<?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>40884</bug_id>
          
          <creation_ts>2010-06-20 07:30:29 -0700</creation_ts>
          <short_desc>[Qt] When we render WebGL offscreen, color conversion cost a lot of CPU cycles</short_desc>
          <delta_ts>2011-03-24 12:35:16 -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>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Performance, Qt, QtTriaged</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>hausmann</cc>
    
    <cc>jarkko.j.sakkinen</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>240441</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2010-06-20 07:30:29 -0700</bug_when>
    <thetext>When rendering WebGL offscreen (if we don&apos;t have a GL surface to draw on), we render copy the gl buffer onto QImage and render the QImage.

This operation is CPU intensive. The situation is made a bit worse because of the color conversions and the image transformations.

In particular: 
-we always render to ARGB32, forcing the costly conversion to ARGB32_PM to render
-we copy the image to convert the colors: m_pixels.rgbSwapped()
-we copy one more time to mirror the image: .transformed(QMatrix().rotate(180)

To render, we end up with 3 copies of the pixels, and we have a poor use of the CPU cache.

We could convert the colors and mirror the pixels in WebKit, doing it in a single buffer, and doing the two operations together to optimize the cache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240443</commentid>
    <comment_count>1</comment_count>
      <attachid>59197</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2010-06-20 07:44:39 -0700</bug_when>
    <thetext>Created attachment 59197
Patch

Try to address the issues.

On the website http://www.plsw.net/gnomwgl.htm the rendering goes from 13 fps to 22 fps with the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245633</commentid>
    <comment_count>2</comment_count>
      <attachid>59197</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-07-01 16:20:53 -0700</bug_when>
    <thetext>Comment on attachment 59197
Patch

WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:299
 +  
Unnecessary empty line.

WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:579
 +      // GL give us ABGR on 32 bits, and with the origin at the bottom left
s/give/gives/

WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:465
 +      free(m_pixels);
WebKit normally uses new/delete, is there a specific reason for malloc/free here?

WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:540
 +  static inline quint32 swapPixelsRGB32(quint32 pixel)
I don&apos;t like this function name - it&apos;s swapping color values, not pixels.

WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:586
 +          format = QImage::Format_ARGB32_Premultiplied;
 +          format = QImage::Format_RGB32;
You&apos;re setting format twice here. It ends up being RGB32 which is incorrect for this code path.

Looks good otherwise, r- for the wrong format in the alpha channel case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368912</commentid>
    <comment_count>3</comment_count>
    <who name="Jarkko Sakkinen">jarkko.j.sakkinen</who>
    <bug_when>2011-03-17 00:36:58 -0700</bug_when>
    <thetext>I think this would be important addition to the GraphicsContext3D implementation in order to get reasonable performance when raw texture mapping cannot be used. Shouldn&apos;t be hard to get this integrated. With current implementation code just needs to be moved to GraphicsContext3DImpl::paint().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368959</commentid>
    <comment_count>4</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-03-17 03:10:28 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; I think this would be important addition to the GraphicsContext3D implementation in order to get reasonable performance when raw texture mapping cannot be used. Shouldn&apos;t be hard to get this integrated. With current implementation code just needs to be moved to GraphicsContext3DImpl::paint().

Simon was of the opinion that we should not support software fallback at all since it is not possible to get descent performance with them.

I tend to agree, that is why I have not updated the patch.

I close this as won&apos;t fix. Please comment if you have use case where software fallback are desirable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368968</commentid>
    <comment_count>5</comment_count>
    <who name="Jarkko Sakkinen">jarkko.j.sakkinen</who>
    <bug_when>2011-03-17 03:51:41 -0700</bug_when>
    <thetext>I don&apos;t have an use case for this. Just thinking that it gives more compatibility even if performance is not optimal. I think it would make the overall behaviour also more stable to a developer that uses QtWebKit. Documentation should document settings for optimal performance.

See for example this bug that I&apos;m fixing:
https://bugs.webkit.org/show_bug.cgi?id=56555

Kind of rare use case in real-world, though.

Now, for example, fallback is needed for this use case:
http://developer.qt.nokia.com/forums/viewthread/4505/

Only when QGLWidget is used as the viewport GraphicsContext3D content can be texture mapped.

Should I make a patch for GraphicsContext3D that creation fails if accelerated compositing is not enabled from the settings or QGLWidget viewport does not exist? I can fix the bug 56555 by invalidating GraphicsContext3D if viewport changes after creation if this is the case.

I think this is anyway your (QtWebKit team) call and I don&apos;t really have too strong opinions on this :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368969</commentid>
    <comment_count>6</comment_count>
    <who name="Jarkko Sakkinen">jarkko.j.sakkinen</who>
    <bug_when>2011-03-17 03:57:13 -0700</bug_when>
    <thetext>I actually think that in order to get the first release out with WebGL support the approach that support it with acccelerated compositing really is the right choice because it is always easier to expand support (adding fallback) than degrade it. So I propose that I do the check in constructor of GraphicsContext3D and invalidate context if accelerated compositing is not enabled. I think this fits well in the patch for 56555. What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368988</commentid>
    <comment_count>7</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-03-17 04:32:00 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; I actually think that in order to get the first release out with WebGL support the approach that support it with acccelerated compositing really is the right choice because it is always easier to expand support (adding fallback) than degrade it. So I propose that I do the check in constructor of GraphicsContext3D and invalidate context if accelerated compositing is not enabled. I think this fits well in the patch for 56555. What do you think?

Yep, sounds reasonable to me.

And you have a good point, more support can be added later if necessary. Removing feature would be a lot harder.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369010</commentid>
    <comment_count>8</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-03-17 05:09:26 -0700</bug_when>
    <thetext>Reopen by Jarkko&apos;s comments on 56555.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372881</commentid>
    <comment_count>9</comment_count>
      <attachid>86788</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-03-24 10:11:04 -0700</bug_when>
    <thetext>Created attachment 86788
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372885</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-24 10:13:29 -0700</bug_when>
    <thetext>Attachment 86788 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebKit/qt/tests/benchmarks/webgl/tst_webgl.cpp:20:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebKit/qt/tests/benchmarks/webgl/tst_webgl.cpp:22:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/tests/benchmarks/webgl/tst_webgl.cpp:44:  The parameter name &quot;format&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/tests/benchmarks/webgl/tst_webgl.cpp:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WebKit/qt/tests/qgraphicswebview/tst_qgraphicswebview.cpp:466:  Missing spaces around =  [whitespace/operators] [4]
Total errors found: 5 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372912</commentid>
    <comment_count>11</comment_count>
      <attachid>86797</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-03-24 10:36:54 -0700</bug_when>
    <thetext>Created attachment 86797
Patch

Patches are better when I don&apos;t mess up the style :)
One error expected, the usual one for QtTest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372914</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-24 10:39:42 -0700</bug_when>
    <thetext>Attachment 86797 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebKit/qt/tests/benchmarks/webgl/tst_webgl.cpp:21:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372955</commentid>
    <comment_count>13</comment_count>
    <who name="Jarkko Sakkinen">jarkko.j.sakkinen</who>
    <bug_when>2011-03-24 11:13:41 -0700</bug_when>
    <thetext>This looks good and those tests are very much needed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372957</commentid>
    <comment_count>14</comment_count>
      <attachid>86801</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-03-24 11:20:00 -0700</bug_when>
    <thetext>Created attachment 86801
Patch

Ooops, one of the test was saving the ref image.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372959</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-24 11:21:29 -0700</bug_when>
    <thetext>Attachment 86801 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebKit/qt/tests/benchmarks/webgl/tst_webgl.cpp:21:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372971</commentid>
    <comment_count>16</comment_count>
      <attachid>86801</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-03-24 11:40:34 -0700</bug_when>
    <thetext>Comment on attachment 86801
Patch

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

Pretty nice testing!

&gt; Source/WebKit/qt/tests/benchmarks/webgl/tst_webgl.cpp:31
&gt; +class tst_WebGlPerformance : public QObject {

We normally use GL as uppercase (ie QGLWidget)

&gt; Source/WebKit/qt/tests/qgraphicswebview/tst_qgraphicswebview.cpp:475
&gt; +        for (int column = 0; column &lt; image1.size().height(); ++column)
&gt; +            if (image1.pixel(row, column) != image2.pixel(row, column))
&gt; +                ++diffPixelCount;

That for should really use {}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372992</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-24 12:31:48 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 86801:

http/tests/appcache/fail-on-update.html bug 57043 (author: ap@webkit.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372995</commentid>
    <comment_count>18</comment_count>
      <attachid>86801</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-24 12:35:12 -0700</bug_when>
    <thetext>Comment on attachment 86801
Patch

Clearing flags on attachment: 86801

Committed r81886: &lt;http://trac.webkit.org/changeset/81886&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372996</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-24 12:35:16 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59197</attachid>
            <date>2010-06-20 07:44:39 -0700</date>
            <delta_ts>2011-03-24 10:11:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>40884.patch</filename>
            <type>text/plain</type>
            <size>6711</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDQxNGNjZS4uYmUyZTU3NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAxMC0wNi0yMCAgQmVuamFtaW4gUG91
bGFpbiAgPGJlbmphbWluLnBvdWxhaW5Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gV2hlbiB3ZSByZW5kZXIgV2ViR0wgb2Zm
c2NyZWVuLCBjb2xvciBjb252ZXJzaW9uIGNvc3QgYSBsb3Qgb2YgQ1BVIGN5Y2xlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDA4ODQKKworICAgICAg
ICBUaGlzIHBhdGNoIGltcHJvdmVzIHRoZSByZW5kZXJpbmcgcGVyZm9ybWFuY2Ugb2YgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbAorICAgICAgICB3aGVuIHdlIGRvIG5vdCBkcmF3IG9uIGFuIG9u
LXNjcmVlbiBmcmFtZWJ1ZmZlci4KKworICAgICAgICBGaXJzdCwgdGhlIGZvcm1hdCBvZiB0aGUg
dGFyZ2V0IGltYWdlIGlzIHNldCB0byBvcGFxdWUgKFFJbWFnZSdzIFJHQjMyKSB3aGVuCisgICAg
ICAgIHBvc3NpYmxlLCB0byBzcGVlZCB1cCB0aGUgYmxlbmRpbmcgb2YgdGhlIFdlYkdMIGNhbnZh
cy4KKworICAgICAgICBUaGUgb3RoZXIgb3B0aW1pemF0aW9uIGlzIHRvIGRvIHRoZSBjb2xvciBj
b252ZXJzaW9uIGFuZCBpbWFnZSB0cmFuc2Zvcm1hdGlvbgorICAgICAgICBkaXJlY3RseSBpbiBX
ZWJLaXQuIFRoaXMgYXZvaWRzIGNvcHlpbmcgdGhlIHBpeGVscyB0aHJlZSB0aW1lLCBhbmQgbWFr
ZXMgYQorICAgICAgICBiZXR0ZXIgdXNlIG9mIHRoZSBjYWNoZS4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp+R3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpzd2FwUGl4ZWxzUkdCMzIpOgor
ICAgICAgICAoV2ViQ29yZTo6YXJnYjMyVG9QcmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6cmVzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6Y2xlYXJDb2xvcik6CisKIDIwMTAtMDYtMTggIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtp
bUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeC4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCmlu
ZGV4IDgzZmY4YzQuLjdlYjg2OWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcApAQCAtMjU5LDcgKzI1OSw4IEBAIHB1Ymxp
YzoKICAgICBHTHVpbnQgbV9tYWluRmJvOwogICAgIEdMdWludCBtX2N1cnJlbnRGYm87CiAgICAg
R0x1aW50IG1fZGVwdGhCdWZmZXI7Ci0gICAgUUltYWdlIG1fcGl4ZWxzOworICAgIHF1aW50MzIq
IG1fcGl4ZWxzOworICAgIGJvb2wgbV9oYXNBbHBoYTsKICAgICBMaXN0SGFzaFNldDx1bnNpZ25l
ZCBsb25nPiBtX3N5bnRoZXRpY0Vycm9yczsKIAogcHJpdmF0ZToKQEAgLTI5Miw3ICsyOTMsMTAg
QEAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbChH
cmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXQKICAgICAsIG1fbWFpbkZibygwKQogICAgICwgbV9j
dXJyZW50RmJvKDApCiAgICAgLCBtX2RlcHRoQnVmZmVyKDApCisgICAgLCBtX3BpeGVscygwKQor
ICAgICwgbV9oYXNBbHBoYSh0cnVlKQogICAgICwgbV9jb250ZXh0VmFsaWQodHJ1ZSkKKwogewog
ICAgIFFXZWJQYWdlQ2xpZW50KiB3ZWJQYWdlQ2xpZW50ID0gaG9zdFdpbmRvdy0+cGxhdGZvcm1Q
YWdlQ2xpZW50KCk7CiAgICAgUUdMV2lkZ2V0KiBvd25lckdMV2lkZ2V0ICA9IGdldE93bmVyR0xX
aWRnZXQod2ViUGFnZUNsaWVudCk7CkBAIC00NTgsNiArNDYyLDcgQEAgR3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbDo6fkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoKQogewogICAgIGRlbGV0ZSBt
X2dsV2lkZ2V0OwogICAgIG1fZ2xXaWRnZXQgPSAwOworICAgIGZyZWUobV9waXhlbHMpOwogfQog
CiBRR0xXaWRnZXQqIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldE93bmVyR0xXaWRnZXQo
UVdlYlBhZ2VDbGllbnQqIHdlYlBhZ2VDbGllbnQpCkBAIC01MzIsNiArNTM3LDI1IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmVuZFBhaW50KCkKIHsKIH0KIAorc3RhdGljIGlubGluZSBxdWlu
dDMyIHN3YXBQaXhlbHNSR0IzMihxdWludDMyIHBpeGVsKQoreworICAgIHJldHVybiAoKHBpeGVs
IDw8IDE2KSAmIDB4ZmYwMDAwKSB8ICgocGl4ZWwgPj4gMTYpICYgMHhmZikgfCAocGl4ZWwgJiAw
eGZmMDBmZjAwKTsKK30KKworc3RhdGljIGlubGluZSBxdWludDMyIGFyZ2IzMlRvUHJlbXVsdGlw
bGllZChxdWludDMyIHgpCit7CisgICAgcXVpbnQzMiBhID0geCA+PiAyNDsKKyAgICBxdWludDMy
IHQgPSAoeCAmIDB4ZmYwMGZmKSAqIGE7CisgICAgdCA9ICh0ICsgKCh0ID4+IDgpICYgMHhmZjAw
ZmYpICsgMHg4MDAwODApID4+IDg7CisgICAgdCAmPSAweGZmMDBmZjsKKworICAgIHggPSAoKHgg
Pj4gOCkgJiAweGZmKSAqIGE7CisgICAgeCA9ICh4ICsgKCh4ID4+IDgpICYgMHhmZikgKyAweDgw
KTsKKyAgICB4ICY9IDB4ZmYwMDsKKyAgICB4IHw9IHQgfCAoYSA8PCAyNCk7CisgICAgcmV0dXJu
IHg7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50KFFQYWludGVyKiBwYWludGVy
LCBjb25zdCBRUmVjdCYgcmVjdCkgY29uc3QKIHsKICNpZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJ
T05fQ0hFQ0soNCwgNywgMCkKQEAgLTU0MiwxMCArNTY2LDUyIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnBhaW50KFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRUmVjdCYgcmVjdCkgY29uc3QK
ICAgICAgICAgcmV0dXJuOwogICAgIH0gCiAjZW5kaWYKKyAgICBpZiAoIW1faW50ZXJuYWwtPm1f
cGl4ZWxzKSB7CisgICAgICAgIG1faW50ZXJuYWwtPm1fcGl4ZWxzID0gKHF1aW50MzIqKSBtYWxs
b2MobV9jdXJyZW50V2lkdGggKiBtX2N1cnJlbnRIZWlnaHQgKiBzaXplb2YocXVpbnQzMikpOwor
ICAgICAgICBpZiAoIW1faW50ZXJuYWwtPm1fcGl4ZWxzKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgIH0KKwogICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAg
bV9pbnRlcm5hbC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UiwgbV9pbnRlcm5hbC0+bV9tYWluRmJvKTsKLSAgICBnbFJlYWRQaXhlbHMoLyogeCAqLyAwLCAv
KiB5ICovIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgbV9pbnRlcm5hbC0+
bV9waXhlbHMuYml0cygpKTsKLSAgICBwYWludGVyLT5kcmF3SW1hZ2UoLyogeCAqLyAwLCAvKiB5
ICovIDAsIG1faW50ZXJuYWwtPm1fcGl4ZWxzLnJnYlN3YXBwZWQoKS50cmFuc2Zvcm1lZChRTWF0
cml4KCkucm90YXRlKDE4MCkpKTsKKyAgICBnbFJlYWRQaXhlbHMoLyogeCAqLyAwLCAvKiB5ICov
IDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIEdMX1JHQkEsIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFLCBtX2ludGVybmFsLT5tX3BpeGVscyk7CisKKyAgICAvLyBH
TCBnaXZlIHVzIEFCR1Igb24gMzIgYml0cywgYW5kIHdpdGggdGhlIG9yaWdpbiBhdCB0aGUgYm90
dG9tIGxlZnQKKyAgICAvLyBXZSBuZWVkIFJHQjMyIG9yIEFSR0IzMl9QTSwgd2l0aCB0aGUgb3Jp
Z2luIGF0IHRoZSB0b3AgbGVmdAorICAgIC8vIFRPRE86IHRoaXMgY291bGQgYmUgZXZlbiBtb3Jl
IGVmZmVjdGl2ZSB3aXRoIFNJTUQgaW5zdHJ1Y3Rpb25zCisgICAgUUltYWdlOjpGb3JtYXQgZm9y
bWF0OworICAgIHF1aW50MzIqIHBpeGVsc1NyYyA9IG1faW50ZXJuYWwtPm1fcGl4ZWxzOworICAg
IGNvbnN0IGludCBoYWxmSGVpZ2h0ID0gbV9jdXJyZW50SGVpZ2h0ID4+IDE7CisgICAgaWYgKG1f
aW50ZXJuYWwtPm1faGFzQWxwaGEpIHsKKyAgICAgICAgZm9ybWF0ID0gUUltYWdlOjpGb3JtYXRf
QVJHQjMyX1ByZW11bHRpcGxpZWQ7CisgICAgICAgIGZvcm1hdCA9IFFJbWFnZTo6Rm9ybWF0X1JH
QjMyOworICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBoYWxmSGVpZ2h0OyArK3Jvdykg
eworICAgICAgICAgICAgY29uc3QgaW50IHRhcmdldElkeCA9IChtX2N1cnJlbnRIZWlnaHQgLSAx
IC0gcm93KSAqIG1fY3VycmVudFdpZHRoOworICAgICAgICAgICAgcXVpbnQzMiogcGl4ZWxzRHN0
ID0gbV9pbnRlcm5hbC0+bV9waXhlbHMgKyB0YXJnZXRJZHg7CisgICAgICAgICAgICBmb3IgKGlu
dCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBtX2N1cnJlbnRXaWR0aDsgKytjb2x1bW4pIHsKKyAgICAg
ICAgICAgICAgICBxdWludDMyIHRlbXBQaXhlbCA9ICpwaXhlbHNTcmM7CisgICAgICAgICAgICAg
ICAgKnBpeGVsc1NyYyA9IGFyZ2IzMlRvUHJlbXVsdGlwbGllZChzd2FwUGl4ZWxzUkdCMzIoKnBp
eGVsc0RzdCkpOworICAgICAgICAgICAgICAgICpwaXhlbHNEc3QgPSBhcmdiMzJUb1ByZW11bHRp
cGxpZWQoc3dhcFBpeGVsc1JHQjMyKHRlbXBQaXhlbCkpOworICAgICAgICAgICAgICAgICsrcGl4
ZWxzU3JjOworICAgICAgICAgICAgICAgICsrcGl4ZWxzRHN0OworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9ybWF0ID0gUUltYWdlOjpGb3JtYXRfUkdC
MzI7CisgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGhhbGZIZWlnaHQ7ICsrcm93KSB7
CisgICAgICAgICAgICBjb25zdCBpbnQgdGFyZ2V0SWR4ID0gKG1fY3VycmVudEhlaWdodCAtIDEg
LSByb3cpICogbV9jdXJyZW50V2lkdGg7CisgICAgICAgICAgICBxdWludDMyKiBwaXhlbHNEc3Qg
PSBtX2ludGVybmFsLT5tX3BpeGVscyArIHRhcmdldElkeDsKKyAgICAgICAgICAgIGZvciAoaW50
IGNvbHVtbiA9IDA7IGNvbHVtbiA8IG1fY3VycmVudFdpZHRoOyArK2NvbHVtbikgeworICAgICAg
ICAgICAgICAgIHF1aW50MzIgdGVtcFBpeGVsID0gKnBpeGVsc1NyYzsKKyAgICAgICAgICAgICAg
ICAqcGl4ZWxzU3JjID0gc3dhcFBpeGVsc1JHQjMyKCpwaXhlbHNEc3QpOworICAgICAgICAgICAg
ICAgICpwaXhlbHNEc3QgPSBzd2FwUGl4ZWxzUkdCMzIodGVtcFBpeGVsKTsKKyAgICAgICAgICAg
ICAgICArK3BpeGVsc1NyYzsKKyAgICAgICAgICAgICAgICArK3BpeGVsc0RzdDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHBhaW50ZXItPmRyYXdJbWFnZSgvKiB4ICov
IDAsIC8qIHkgKi8gMCwgUUltYWdlKCh1Y2hhciopKG1faW50ZXJuYWwtPm1fcGl4ZWxzKSwgbV9j
dXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgZm9ybWF0KSk7CiAgICAgbV9pbnRlcm5hbC0+
YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9pbnRlcm5h
bC0+bV9jdXJyZW50RmJvKTsgCiB9CiAKQEAgLTU1Niw4ICs2MjIsOCBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICAKICAgICBtX2N1
cnJlbnRXaWR0aCA9IHdpZHRoOwogICAgIG1fY3VycmVudEhlaWdodCA9IGhlaWdodDsKLQotICAg
IG1faW50ZXJuYWwtPm1fcGl4ZWxzID0gUUltYWdlKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRI
ZWlnaHQsIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMik7CisgICAgZnJlZShtX2ludGVybmFsLT5tX3Bp
eGVscyk7CisgICAgbV9pbnRlcm5hbC0+bV9waXhlbHMgPSAwOwogCiAgICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKIApAQCAtNjk1LDYgKzc2MSw3IEBAIHVuc2lnbmVk
IGxvbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXModW5zaWduZWQg
bG9uZyB0YXJnZXQpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyQ29sb3IoZG91Ymxl
IHIsIGRvdWJsZSBnLCBkb3VibGUgYiwgZG91YmxlIGEpCiB7CisgICAgbV9pbnRlcm5hbC0+bV9o
YXNBbHBoYSA9ICFxRnV6enlDb21wYXJlKHN0YXRpY19jYXN0PGZsb2F0PihhKSwgMS4wZik7CiAg
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBnbENsZWFyQ29s
b3Ioc3RhdGljX2Nhc3Q8ZmxvYXQ+KHIpLCBzdGF0aWNfY2FzdDxmbG9hdD4oZyksIHN0YXRpY19j
YXN0PGZsb2F0PihiKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGEpKTsKIH0K
</data>
<flag name="review"
          id="45899"
          type_id="1"
          status="-"
          setter="kling"
    />
    <flag name="commit-queue"
          id="45900"
          type_id="3"
          status="-"
          setter="kling"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86788</attachid>
            <date>2011-03-24 10:11:04 -0700</date>
            <delta_ts>2011-03-24 10:36:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>40884.diff</filename>
            <type>text/plain</type>
            <size>23337</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkMDAzNTBjLi45YWI1MjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcg
QEAKKzIwMTEtMDMtMjQgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbi5wb3VsYWluQG5va2lh
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
UXRdIFdoZW4gd2UgcmVuZGVyIFdlYkdMIG9mZnNjcmVlbiwgY29sb3IgY29udmVyc2lvbiBjb3N0
IGEgbG90IG9mIENQVSBjeWNsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQwODg0CisKKyAgICAgICAgVGhlIHNvZnR3YXJlIGZhbGxiYWNrIGlzIG5v
dyBvbmx5IG5lZWRlZCBmb3IgY29ybmVyIGNhc2VzIGxpa2UgYSBtYW51YWwgcmVuZGVyaW5nCisg
ICAgICAgIG9mIHRoZSBwYWdlIHRvIFFJbWFnZS4KKworICAgICAgICBLZWVwaW5nIHRoZSBpbWFn
ZSB3aXRoIHRoZSBsYXN0IHBpeGVsIHZhbHVlcyBpcyBubyBsb25nZXIgbmVlZGVkLiBSZW1vdmlu
ZyBpdCByZWR1Y2UgdGhlCisgICAgICAgIHBlcmZvcm1hbmNlIGZvciByZWFsLXRpbWUgcmVuZGVy
aW5nIG9uIHNvZnR3YXJlIHN1cmZhY2UsIGJ1dCB0aGlzIGNhc2Ugc2hvdWxkIG5vIGxvbmdlciBi
ZQorICAgICAgICBzdXBwb3J0ZWQuCisKKyAgICAgICAgVGhlIGNvbnZlcnNpb24gZnJvbSBPcGVu
R0wgY29sb3Igc3BhY2UgYW5kIGNvb3JkaW5hdGVzIGlzIGRvbmUgbWFudWFsbHkgZm9yIHBlcmZv
cm1hbmNlLiBUaGlzCisgICAgICAgIGFsc28gZml4IHRoZSBidWcgb2YgdGhlIGludmVydGVkIFgg
YXhpcyBkdWUgdG8gdGhlIHRyYW5zZm9ybWF0aW9uLgorCisgICAgICAgIFRoZSB0ZXN0cyBhbmQg
YmVuY2htYXJrcyBhcmUgZG9uZSB0aHJvdWdoIFF0IEFQSSB0ZXN0cy4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6c3dhcEJnclRvUmdiKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpy
ZXNoYXBlKToKKwogMjAxMS0wMy0yMyAgQW5kcmV5IEFkYWlraW4gIDxhYW5kcmV5QGdvb2dsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0
M0RRdC5jcHAKaW5kZXggMDgxNzllMS4uMTYxNTM5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAK
QEAgLTI2Myw3ICsyNjMsNiBAQCBwdWJsaWM6CiAgICAgR0x1aW50IG1fbWFpbkZibzsKICAgICBH
THVpbnQgbV9jdXJyZW50RmJvOwogICAgIEdMdWludCBtX2RlcHRoQnVmZmVyOwotICAgIFFJbWFn
ZSBtX3BpeGVsczsKICAgICBib29sIG1fbGF5ZXJDb21wb3NpdGVkOwogICAgIExpc3RIYXNoU2V0
PHVuc2lnbmVkIGludD4gbV9zeW50aGV0aWNFcnJvcnM7CiAKQEAgLTQ4MSw2ICs0ODAsMTEgQEAg
UUdMV2lkZ2V0KiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRWaWV3cG9ydEdMV2lkZ2V0
KCkKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBxdWludDMyIHN3YXBCZ3JUb1Jn
YihxdWludDMyIHBpeGVsKQoreworICAgIHJldHVybiAoKHBpeGVsIDw8IDE2KSAmIDB4ZmYwMDAw
KSB8ICgocGl4ZWwgPj4gMTYpICYgMHhmZikgfCAocGl4ZWwgJiAweGZmMDBmZjAwKTsKK30KKwog
dm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwYWludChRUGFpbnRlciogcGFpbnRlciwg
Y29uc3QgUVN0eWxlT3B0aW9uR3JhcGhpY3NJdGVtKiBvcHRpb24sIFFXaWRnZXQqIHdpZGdldCkK
IHsKICAgICBRX1VOVVNFRCh3aWRnZXQpOwpAQCAtNDk2LDExICs1MDAsMzkgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQzREludGVybmFsOjpwYWludChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVN0
eWxlT3B0aW9uR3JhcGgKICAgICB9CiAKICAgICAvLyBBbHRlcm5hdGl2ZWx5IHJlYWQgcGl4ZWxz
IHRvIGEgbWVtb3J5IGJ1ZmZlci4KKyAgICBRSW1hZ2Ugb2Zmc2NyZWVuSW1hZ2UocmVjdC53aWR0
aCgpLCByZWN0LmhlaWdodCgpLCBRSW1hZ2U6OkZvcm1hdF9BUkdCMzIpOworICAgIHF1aW50MzIq
IGltYWdlUGl4ZWxzID0gcmVpbnRlcnByZXRfY2FzdDxxdWludDMyKj4ob2Zmc2NyZWVuSW1hZ2Uu
Yml0cygpKTsKKwogICAgIG1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgYmluZEZyYW1l
YnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tYWluRmJvKTsKLSAgICBn
bFJlYWRQaXhlbHMoLyogeCAqLyAwLCAvKiB5ICovIDAsIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWln
aHQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFLCBtX3BpeGVscy5iaXRzKCkpOwotICAgIHBhaW50ZXItPmRyYXdJbWFnZSgvKiB4ICov
IDAsIC8qIHkgKi8gMCwgbV9waXhlbHMucmdiU3dhcHBlZCgpLnRyYW5zZm9ybWVkKFFNYXRyaXgo
KS5yb3RhdGUoMTgwKSkpOworICAgIGdsUmVhZFBpeGVscygvKiB4ICovIDAsIC8qIHkgKi8gMCwg
cmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGltYWdlUGl4ZWxzKTsKKwogICAgIGJpbmRG
cmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fY3VycmVudEZibyk7
CisKKyAgICAvLyBPcGVuR0wgZ2l2ZXMgdXMgQUJHUiBvbiAzMiBiaXRzLCBhbmQgd2l0aCB0aGUg
b3JpZ2luIGF0IHRoZSBib3R0b20gbGVmdAorICAgIC8vIFdlIG5lZWQgUkdCMzIgb3IgQVJHQjMy
X1BNLCB3aXRoIHRoZSBvcmlnaW4gYXQgdGhlIHRvcCBsZWZ0LgorICAgIHF1aW50MzIqIHBpeGVs
c1NyYyA9IGltYWdlUGl4ZWxzOworICAgIGNvbnN0IGludCBoZWlnaHQgPSBzdGF0aWNfY2FzdDxp
bnQ+KHJlY3QuaGVpZ2h0KCkpOworICAgIGNvbnN0IGludCB3aWR0aCA9IHN0YXRpY19jYXN0PGlu
dD4ocmVjdC53aWR0aCgpKTsKKyAgICBjb25zdCBpbnQgaGFsZkhlaWdodCA9IGhlaWdodCAvIDI7
CisgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgaGFsZkhlaWdodDsgKytyb3cpIHsKKyAgICAg
ICAgY29uc3QgaW50IHRhcmdldElkeCA9IChoZWlnaHQgLSAxIC0gcm93KSAqIHdpZHRoOworICAg
ICAgICBxdWludDMyKiBwaXhlbHNEc3QgPSBpbWFnZVBpeGVscyArIHRhcmdldElkeDsKKyAgICAg
ICAgZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwgd2lkdGg7ICsrY29sdW1uKSB7CisgICAg
ICAgICAgICBxdWludDMyIHRlbXBQaXhlbCA9ICpwaXhlbHNTcmM7CisgICAgICAgICAgICAqcGl4
ZWxzU3JjID0gc3dhcEJnclRvUmdiKCpwaXhlbHNEc3QpOworICAgICAgICAgICAgKnBpeGVsc0Rz
dCA9IHN3YXBCZ3JUb1JnYih0ZW1wUGl4ZWwpOworICAgICAgICAgICAgKytwaXhlbHNTcmM7Cisg
ICAgICAgICAgICArK3BpeGVsc0RzdDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoc3RhdGlj
X2Nhc3Q8aW50PihoZWlnaHQpICUgMikgeworICAgICAgICBmb3IgKGludCBjb2x1bW4gPSAwOyBj
b2x1bW4gPCB3aWR0aDsgKytjb2x1bW4pIHsKKyAgICAgICAgICAgICpwaXhlbHNTcmMgPSBzd2Fw
QmdyVG9SZ2IoKnBpeGVsc1NyYyk7CisgICAgICAgICAgICArK3BpeGVsc1NyYzsKKyAgICAgICAg
fQorICAgIH0KKyAgICBwYWludGVyLT5kcmF3SW1hZ2UoLyogeCAqLyAwLCAvKiB5ICovIDAsIG9m
ZnNjcmVlbkltYWdlKTsKIH0KIAogUVJlY3RGIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJv
dW5kaW5nUmVjdCgpIGNvbnN0CkBAIC01OTAsNyArNjIyLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgbV9jdXJyZW50SGVpZ2h0
ID0gaGVpZ2h0OwogCiAgICAgbV9pbnRlcm5hbC0+bV9ib3VuZGluZ1JlY3QgPSBRUmVjdEYoUVBv
aW50RigwLCAwKSwgUVNpemVGKHdpZHRoLCBoZWlnaHQpKTsKLSAgICBtX2ludGVybmFsLT5tX3Bp
eGVscyA9IFFJbWFnZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBRSW1hZ2U6OkZv
cm1hdF9BUkdCMzIpOwogCiAgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L3F0L0NoYW5nZUxvZwppbmRleCBjMjY3NGM0Li5kMGY3OWU2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwpA
QCAtMSwzICsxLDM3IEBACisyMDExLTAzLTI0ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW4u
cG91bGFpbkBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgW1F0XSBXaGVuIHdlIHJlbmRlciBXZWJHTCBvZmZzY3JlZW4sIGNvbG9yIGNv
bnZlcnNpb24gY29zdCBhIGxvdCBvZiBDUFUgY3ljbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDg4NAorCisgICAgICAgIEFkZCB0ZXN0cyBhbmQg
YmVuY2htYXJrcyBmb3IgdGhlIHNvZnR3YXJlIGZhbGxiYWNrIG9mIFdlYkdMLgorCisgICAgICAg
ICogdGVzdHMvYmVuY2htYXJrcy93ZWJnbC8xMDAwMF90cmlhbmdsZXMuaHRtbDogQWRkZWQuCisg
ICAgICAgICogdGVzdHMvYmVuY2htYXJrcy93ZWJnbC90c3Rfd2ViZ2wuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEdyYXBoaWNzVmlldzo6R3JhcGhpY3NWaWV3KToKKyAgICAgICAgKEdyYXBoaWNzVmll
dzo6cmVzaXplRXZlbnQpOgorICAgICAgICAodHN0X1dlYkdsUGVyZm9ybWFuY2U6OmluaXQpOgor
ICAgICAgICAodHN0X1dlYkdsUGVyZm9ybWFuY2U6OmNsZWFudXApOgorICAgICAgICAodHN0X1dl
YkdsUGVyZm9ybWFuY2U6OmJlbmNoU29mdHdhcmVGYWxsYmFja1JnYjE2KToKKyAgICAgICAgKHRz
dF9XZWJHbFBlcmZvcm1hbmNlOjpiZW5jaFNvZnR3YXJlRmFsbGJhY2tSZ2IzMik6CisgICAgICAg
ICh0c3RfV2ViR2xQZXJmb3JtYW5jZTo6YmVuY2hTb2Z0d2FyZUZhbGxiYWNrQXJnYjMyKToKKyAg
ICAgICAgKHRzdF9XZWJHbFBlcmZvcm1hbmNlOjpiZW5jaFNvZnR3YXJlRmFsbGJhY2tBcmdiMzJQ
cmVtdWx0aXBsaWVkKToKKyAgICAgICAgKHRzdF9XZWJHbFBlcmZvcm1hbmNlOjpiZW5jaG1hcmtG
cmFtZVJlbmRlcmluZ09uSW1hZ2UpOgorICAgICAgICAqIHRlc3RzL2JlbmNobWFya3Mvd2ViZ2wv
dHN0X3dlYmdsLnFyYzogQWRkZWQuCisgICAgICAgICogdGVzdHMvYmVuY2htYXJrcy93ZWJnbC93
ZWJnbC5wcm86IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3FncmFwaGljc3dlYnZpZXcvcWdyYXBo
aWNzd2Vidmlldy5wcm86CisgICAgICAgICogdGVzdHMvcWdyYXBoaWNzd2Vidmlldy9yZXNvdXJj
ZXMvcG9pbnRpbmdfcmlnaHQuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMvcWdyYXBoaWNz
d2Vidmlldy9yZXNvdXJjZXMvcG9pbnRpbmdfdXAuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVz
dHMvcWdyYXBoaWNzd2Vidmlldy90c3RfcWdyYXBoaWNzd2Vidmlldy5jcHA6CisgICAgICAgIChj
b21wYXJlSW1hZ2VzRnV6enlQaXhlbENvdW50KToKKyAgICAgICAgKEdyYXBoaWNzVmlldzo6R3Jh
cGhpY3NWaWV3KToKKyAgICAgICAgKHRzdF9RR3JhcGhpY3NXZWJWaWV3Ojp3ZWJnbFNvZnR3YXJl
RmFsbGJhY2tWZXJ0aWNhbE9yaWVudGF0aW9uKToKKyAgICAgICAgKHRzdF9RR3JhcGhpY3NXZWJW
aWV3Ojp3ZWJnbFNvZnR3YXJlRmFsbGJhY2tIb3Jpem9udGFsT3JpZW50YXRpb24pOgorICAgICAg
ICAodHN0X1FHcmFwaGljc1dlYlZpZXc6OmNvbXBhcmVDYW52YXNUb0ltYWdlKToKKyAgICAgICAg
KiB0ZXN0cy9xZ3JhcGhpY3N3ZWJ2aWV3L3RzdF9xZ3JhcGhpY3N3ZWJ2aWV3LnFyYzoKKyAgICAg
ICAgKiB0ZXN0cy90ZXN0cy5wcm86CisKIDIwMTEtMDMtMjIgIEFuZHJldyBXYXNvbiAgPHJlY3Rh
bG9naWNAcmVjdGFsb2dpYy5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQmVuamFtaW4gUG91
bGFpbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvYmVuY2htYXJrcy93ZWJn
bC8xMDAwMF90cmlhbmdsZXMuaHRtbCBiL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvYmVuY2htYXJr
cy93ZWJnbC8xMDAwMF90cmlhbmdsZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5mZDA2MWFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC90ZXN0
cy9iZW5jaG1hcmtzL3dlYmdsLzEwMDAwX3RyaWFuZ2xlcy5odG1sCkBAIC0wLDAgKzEsNTkgQEAK
KzxodG1sPgorICA8Ym9keSBzdHlsZT0ibWFyZ2luOiAwIj4KKyAgICA8Y2FudmFzIHdpZHRoPSIx
MDAwIiBoZWlnaHQ9IjEwMDAiPjwvY2FudmFzPgorICA8L2JvZHk+Cis8L2h0bWw+Cis8c2NyaXB0
PgorICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiY2FudmFz
IilbMF07CisgICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIik7
CisgICAgZ2wuY2xlYXJDb2xvcigwLjAsIDEuMCwgMC4wLCAxLjApOworICAgIGdsLnZpZXdwb3J0
KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7CisKKyAgICB2YXIgdmVydGV4U2hh
ZGVyID0gZ2wuY3JlYXRlU2hhZGVyKGdsLlZFUlRFWF9TSEFERVIpOworICAgIGdsLnNoYWRlclNv
dXJjZSh2ZXJ0ZXhTaGFkZXIsICJhdHRyaWJ1dGUgdmVjNCB2UG9zaXRpb247XG52b2lkIG1haW4o
KSB7IGdsX1Bvc2l0aW9uID0gdlBvc2l0aW9uOyB9Iik7CisgICAgZ2wuY29tcGlsZVNoYWRlcih2
ZXJ0ZXhTaGFkZXIpOworCisgICAgdmFyIGZyYWdtZW50U2hhZGVyID0gZ2wuY3JlYXRlU2hhZGVy
KGdsLkZSQUdNRU5UX1NIQURFUik7CisgICAgZ2wuc2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVy
LCAidm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCwgMC4wLCAwLjAsIDEuMCk7
IH0iKTsKKyAgICBnbC5jb21waWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTsKKworICAgIHZhciBz
aGFkZXJQcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpOworICAgIGdsLmF0dGFjaFNoYWRlcihz
aGFkZXJQcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpOworICAgIGdsLmF0dGFjaFNoYWRlcihzaGFkZXJQ
cm9ncmFtLCBmcmFnbWVudFNoYWRlcik7CisgICAgZ2wuYmluZEF0dHJpYkxvY2F0aW9uKHNoYWRl
clByb2dyYW0sIDAsICJ2UG9zaXRpb24iKTsKKyAgICBnbC5saW5rUHJvZ3JhbShzaGFkZXJQcm9n
cmFtKTsKKworICAgIGdsLnVzZVByb2dyYW0oc2hhZGVyUHJvZ3JhbSk7CisKKyAgICB2YXIgYnVm
ZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7CisgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZG
RVIsIGJ1ZmZlcik7CisKKyAgICB2YXIgdmVydGljZXMgPSBbXTsKKyAgICB2YXIgc2VlZFggPSAt
MS4wOworICAgIHZhciBzZWVkWSA9IDEuMDsKKyAgICBmb3IgKHZhciBpID0gMTsgaSA8PSAxMDAw
MDsgKytpKSB7CisgICAgICAgIHZlcnRpY2VzLnB1c2goc2VlZFgpOworICAgICAgICB2ZXJ0aWNl
cy5wdXNoKHNlZWRZKTsKKyAgICAgICAgdmVydGljZXMucHVzaCgwKTsKKyAgICAgICAgc2VlZFgg
Kz0gMC4wMTsKKyAgICAgICAgdmVydGljZXMucHVzaChzZWVkWCk7CisgICAgICAgIHZlcnRpY2Vz
LnB1c2goc2VlZFkgLSAwLjAyKTsKKyAgICAgICAgdmVydGljZXMucHVzaCgwKTsKKyAgICAgICAg
c2VlZFggKz0gMC4wMTsKKyAgICAgICAgdmVydGljZXMucHVzaChzZWVkWCk7CisgICAgICAgIHZl
cnRpY2VzLnB1c2goc2VlZFkpOworICAgICAgICB2ZXJ0aWNlcy5wdXNoKDApOworICAgICAgICBp
ZiAoIShpICUgMTAwKSkgeworICAgICAgICAgICAgc2VlZFggPSAtMS4wOworICAgICAgICAgICAg
c2VlZFkgLT0gMC4wMjsKKyAgICAgICAgfQorICAgIH0KKyAgICBnbC5idWZmZXJEYXRhKGdsLkFS
UkFZX0JVRkZFUiwgbmV3IEZsb2F0MzJBcnJheSh2ZXJ0aWNlcyksIGdsLlNUQVRJQ19EUkFXKTsK
KworCisgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcigwLCAzLCBnbC5GTE9BVCwgZmFsc2UsIDAs
IDApOworICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApOworICAgIGdsLmNsZWFyKGds
LkNPTE9SX0JVRkZFUl9CSVQpOworICAgIGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAwLCAz
MDAwMCk7CisgICAgZ2wuZmx1c2goKTsKKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9xdC90ZXN0cy9iZW5jaG1hcmtzL3dlYmdsL3RzdF93ZWJnbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L3F0L3Rlc3RzL2JlbmNobWFya3Mvd2ViZ2wvdHN0X3dlYmdsLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTdjY2FlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9xdC90ZXN0cy9iZW5jaG1hcmtzL3dlYmdsL3RzdF93ZWJnbC5jcHAKQEAgLTAsMCAr
MSwxMjkgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlIDxRdFRlc3QvUXRUZXN0Pgor
CisjaW5jbHVkZSAiLi4vLi4vdXRpbC5oIgorI2luY2x1ZGUgPFFHTFdpZGdldD4KKyNpbmNsdWRl
IDxRR3JhcGhpY3NWaWV3PgorI2luY2x1ZGUgPFFHcmFwaGljc1dlYlZpZXc+CisjaW5jbHVkZSA8
UVNjb3BlZFBvaW50ZXI+CisjaW5jbHVkZSA8UVdlYkZyYW1lPgorCitjbGFzcyBHcmFwaGljc1Zp
ZXc7CisKK2NsYXNzIHRzdF9XZWJHbFBlcmZvcm1hbmNlIDogcHVibGljIFFPYmplY3QgeworICAg
IFFfT0JKRUNUCisKK3ByaXZhdGUgc2xvdHM6CisgICAgdm9pZCBpbml0KCk7CisgICAgdm9pZCBj
bGVhbnVwKCk7CisKKyAgICB2b2lkIGJlbmNoU29mdHdhcmVGYWxsYmFja1JnYjE2KCk7CisgICAg
dm9pZCBiZW5jaFNvZnR3YXJlRmFsbGJhY2tSZ2IzMigpOworICAgIHZvaWQgYmVuY2hTb2Z0d2Fy
ZUZhbGxiYWNrQXJnYjMyKCk7CisgICAgdm9pZCBiZW5jaFNvZnR3YXJlRmFsbGJhY2tBcmdiMzJQ
cmVtdWx0aXBsaWVkKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBiZW5jaG1hcmtGcmFtZVJlbmRl
cmluZ09uSW1hZ2UoUUltYWdlOjpGb3JtYXQgZm9ybWF0KTsKKworICAgIFFTY29wZWRQb2ludGVy
PEdyYXBoaWNzVmlldz4gbV92aWV3OworfTsKKworY2xhc3MgR3JhcGhpY3NWaWV3IDogcHVibGlj
IFFHcmFwaGljc1ZpZXcgeworcHVibGljOgorICAgIEdyYXBoaWNzVmlldygpOworICAgIFFHcmFw
aGljc1dlYlZpZXcqIG1fd2ViVmlldzsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgcmVzaXplRXZl
bnQoUVJlc2l6ZUV2ZW50Kik7Cit9OworCitHcmFwaGljc1ZpZXc6OkdyYXBoaWNzVmlldygpCit7
CisgICAgUUdyYXBoaWNzU2NlbmUqIGNvbnN0IHNjZW5lID0gbmV3IFFHcmFwaGljc1NjZW5lKHRo
aXMpOworICAgIHNldFNjZW5lKHNjZW5lKTsKKworICAgIG1fd2ViVmlldyA9IG5ldyBRR3JhcGhp
Y3NXZWJWaWV3OworICAgIHNjZW5lLT5hZGRJdGVtKG1fd2ViVmlldyk7CisKKyAgICBtX3dlYlZp
ZXctPnBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6V2ViR0xF
bmFibGVkLCB0cnVlKTsKKworICAgIHJlc2l6ZSg4MDAsIDYwMCk7CisgICAgc2V0RnJhbWVTaGFw
ZShRRnJhbWU6Ok5vRnJhbWUpOworICAgIHNldFZpZXdwb3J0KG5ldyBRR0xXaWRnZXQpOworfQor
Cit2b2lkIEdyYXBoaWNzVmlldzo6cmVzaXplRXZlbnQoUVJlc2l6ZUV2ZW50KiBldmVudCkKK3sK
KyAgICBRR3JhcGhpY3NWaWV3OjpyZXNpemVFdmVudChldmVudCk7CisgICAgUVJlY3RGIHJlY3Qo
UVBvaW50KDAsIDApLCBldmVudC0+c2l6ZSgpKTsKKyAgICBtX3dlYlZpZXctPnNldEdlb21ldHJ5
KHJlY3QpOworICAgIHNjZW5lKCktPnNldFNjZW5lUmVjdChyZWN0KTsKK30KKwordm9pZCB0c3Rf
V2ViR2xQZXJmb3JtYW5jZTo6aW5pdCgpCit7CisgICAgbV92aWV3LnJlc2V0KG5ldyBHcmFwaGlj
c1ZpZXcpOworICAgIG1fdmlldy0+c2hvd01heGltaXplZCgpOworICAgIFFUZXN0OjpxV2FpdEZv
cldpbmRvd1Nob3duKG1fdmlldy5kYXRhKCkpOworfQorCit2b2lkIHRzdF9XZWJHbFBlcmZvcm1h
bmNlOjpjbGVhbnVwKCkKK3sKKyAgICBtX3ZpZXcucmVzZXQoKTsKK30KKwordm9pZCB0c3RfV2Vi
R2xQZXJmb3JtYW5jZTo6YmVuY2hTb2Z0d2FyZUZhbGxiYWNrUmdiMTYoKQoreworICAgIGJlbmNo
bWFya0ZyYW1lUmVuZGVyaW5nT25JbWFnZShRSW1hZ2U6OkZvcm1hdF9SR0IxNik7Cit9CisKK3Zv
aWQgdHN0X1dlYkdsUGVyZm9ybWFuY2U6OmJlbmNoU29mdHdhcmVGYWxsYmFja1JnYjMyKCkKK3sK
KyAgICBiZW5jaG1hcmtGcmFtZVJlbmRlcmluZ09uSW1hZ2UoUUltYWdlOjpGb3JtYXRfUkdCMzIp
OworfQorCit2b2lkIHRzdF9XZWJHbFBlcmZvcm1hbmNlOjpiZW5jaFNvZnR3YXJlRmFsbGJhY2tB
cmdiMzIoKQoreworICAgIGJlbmNobWFya0ZyYW1lUmVuZGVyaW5nT25JbWFnZShRSW1hZ2U6OkZv
cm1hdF9BUkdCMzIpOworfQorCit2b2lkIHRzdF9XZWJHbFBlcmZvcm1hbmNlOjpiZW5jaFNvZnR3
YXJlRmFsbGJhY2tBcmdiMzJQcmVtdWx0aXBsaWVkKCkKK3sKKyAgICBiZW5jaG1hcmtGcmFtZVJl
bmRlcmluZ09uSW1hZ2UoUUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQpOworfQor
Cit2b2lkIHRzdF9XZWJHbFBlcmZvcm1hbmNlOjpiZW5jaG1hcmtGcmFtZVJlbmRlcmluZ09uSW1h
Z2UoUUltYWdlOjpGb3JtYXQgZm9ybWF0KSB7CisgICAgbV92aWV3LT5tX3dlYlZpZXctPmxvYWQo
UVVybChRTGF0aW4xU3RyaW5nKCJxcmM6Ly8vdGVzdGNhc2VzLzEwMDAwX3RyaWFuZ2xlcy5odG1s
IikpKTsKKyAgICBjb25zdCBib29sIHBhZ2VMb2FkZWQgPSB3YWl0Rm9yU2lnbmFsKG1fdmlldy0+
bV93ZWJWaWV3LCBTSUdOQUwobG9hZEZpbmlzaGVkKGJvb2wpKSk7CisgICAgUV9BU1NFUlQocGFn
ZUxvYWRlZCk7CisgICAgUV9VTlVTRUQocGFnZUxvYWRlZCk7CisKKyAgICBRSW1hZ2UgdGFyZ2V0
KG1fdmlldy0+c2l6ZSgpLCBmb3JtYXQpOworICAgIFFCRU5DSE1BUksgeworICAgICAgICBRUGFp
bnRlciBwYWludGVyKCZ0YXJnZXQpOworICAgICAgICBtX3ZpZXctPnJlbmRlcigmcGFpbnRlcik7
CisgICAgICAgIHBhaW50ZXIuZW5kKCk7CisgICAgfQorfQorCitRVEVTVF9NQUlOKHRzdF9XZWJH
bFBlcmZvcm1hbmNlKQorCisjaW5jbHVkZSAidHN0X3dlYmdsLm1vYyIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvcXQvdGVzdHMvYmVuY2htYXJrcy93ZWJnbC90c3Rfd2ViZ2wucXJjIGIvU291
cmNlL1dlYktpdC9xdC90ZXN0cy9iZW5jaG1hcmtzL3dlYmdsL3RzdF93ZWJnbC5xcmMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg0OTQ0OAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvYmVuY2htYXJrcy93ZWJnbC90c3Rfd2ViZ2wucXJjCkBA
IC0wLDAgKzEsNSBAQAorPFJDQz4KKyAgICA8cXJlc291cmNlIHByZWZpeD0iL3Rlc3RjYXNlcyI+
CisgICAgICAgIDxmaWxlPjEwMDAwX3RyaWFuZ2xlcy5odG1sPC9maWxlPgorICAgIDwvcXJlc291
cmNlPgorPC9SQ0M+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL2JlbmNobWFy
a3Mvd2ViZ2wvd2ViZ2wucHJvIGIvU291cmNlL1dlYktpdC9xdC90ZXN0cy9iZW5jaG1hcmtzL3dl
YmdsL3dlYmdsLnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjIxYmM4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC90ZXN0cy9iZW5jaG1hcmtzL3dl
YmdsL3dlYmdsLnBybwpAQCAtMCwwICsxLDQgQEAKK2lzRW1wdHkoT1VUUFVUX0RJUik6IE9VVFBV
VF9ESVIgPSAuLi8uLi8uLi8uLi8uLgoraW5jbHVkZSguLi8uLi90ZXN0cy5wcmkpCitleGlzdHMo
JCR7VEFSR0VUfS5xcmMpOlJFU09VUkNFUyArPSAkJHtUQVJHRVR9LnFyYworUVQgKz0gb3Blbmds
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3FncmFwaGljc3dlYnZpZXcvcWdy
YXBoaWNzd2Vidmlldy5wcm8gYi9Tb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3FncmFwaGljc3dlYnZp
ZXcvcWdyYXBoaWNzd2Vidmlldy5wcm8KaW5kZXggZTkxNWQ2MC4uZTU0OTRhZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9xdC90ZXN0cy9xZ3JhcGhpY3N3ZWJ2aWV3L3FncmFwaGljc3dlYnZp
ZXcucHJvCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcWdyYXBoaWNzd2Vidmlldy9xZ3Jh
cGhpY3N3ZWJ2aWV3LnBybwpAQCAtMSwzICsxLDYgQEAKIGlzRW1wdHkoT1VUUFVUX0RJUik6IE9V
VFBVVF9ESVIgPSAuLi8uLi8uLi8uLgogaW5jbHVkZSguLi90ZXN0cy5wcmkpCiBleGlzdHMoJCR7
VEFSR0VUfS5xcmMpOlJFU09VUkNFUyArPSAkJHtUQVJHRVR9LnFyYworY29udGFpbnMoREVGSU5F
UywgRU5BQkxFX1dFQkdMPTEpIHsKKyAgICBRVCArPSBvcGVuZ2wKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvcXQvdGVzdHMvcWdyYXBoaWNzd2Vidmlldy9yZXNvdXJjZXMvcG9pbnRpbmdf
cmlnaHQuaHRtbCBiL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcWdyYXBoaWNzd2Vidmlldy9yZXNv
dXJjZXMvcG9pbnRpbmdfcmlnaHQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5iYzU5MmZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC90ZXN0cy9x
Z3JhcGhpY3N3ZWJ2aWV3L3Jlc291cmNlcy9wb2ludGluZ19yaWdodC5odG1sCkBAIC0wLDAgKzEs
NDUgQEAKKzxodG1sPgorICA8Ym9keSBzdHlsZT0ibWFyZ2luOiAwIj4KKyAgICA8Y2FudmFzIHdp
ZHRoPSIxMDAiIGhlaWdodD0iMTAwIj48L2NhbnZhcz4KKyAgPC9ib2R5PgorPC9odG1sPgorPHNj
cmlwdD4KKyAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImNh
bnZhcyIpWzBdOworICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJn
bCIpOworICAgIGdsLmNsZWFyQ29sb3IoMC4wLCAxLjAsIDAuMCwgMS4wKTsKKyAgICBnbC52aWV3
cG9ydCgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpOworCisgICAgdmFyIHZlcnRl
eFNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcihnbC5WRVJURVhfU0hBREVSKTsKKyAgICBnbC5zaGFk
ZXJTb3VyY2UodmVydGV4U2hhZGVyLCAiYXR0cmlidXRlIHZlYzQgdlBvc2l0aW9uO1xudm9pZCBt
YWluKCkgeyBnbF9Qb3NpdGlvbiA9IHZQb3NpdGlvbjsgfSIpOworICAgIGdsLmNvbXBpbGVTaGFk
ZXIodmVydGV4U2hhZGVyKTsKKworICAgIHZhciBmcmFnbWVudFNoYWRlciA9IGdsLmNyZWF0ZVNo
YWRlcihnbC5GUkFHTUVOVF9TSEFERVIpOworICAgIGdsLnNoYWRlclNvdXJjZShmcmFnbWVudFNo
YWRlciwgInZvaWQgbWFpbigpIHsgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDAuMCwgMC4wLCAx
LjApOyB9Iik7CisgICAgZ2wuY29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcik7CisKKyAgICB2
YXIgc2hhZGVyUHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTsKKyAgICBnbC5hdHRhY2hTaGFk
ZXIoc2hhZGVyUHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsKKyAgICBnbC5hdHRhY2hTaGFkZXIoc2hh
ZGVyUHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIpOworICAgIGdsLmJpbmRBdHRyaWJMb2NhdGlvbihz
aGFkZXJQcm9ncmFtLCAwLCAidlBvc2l0aW9uIik7CisgICAgZ2wubGlua1Byb2dyYW0oc2hhZGVy
UHJvZ3JhbSk7CisKKyAgICBnbC51c2VQcm9ncmFtKHNoYWRlclByb2dyYW0pOworCisgICAgdmFy
IGJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpOworICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlf
QlVGRkVSLCBidWZmZXIpOworCisgICAgdmFyIHZlcnRpY2VzID0gWy0xLjAsIC0xLjAsCisgICAg
ICAgICAgICAgICAgICAgIDAuMCwgMC4wLAorICAgICAgICAgICAgICAgICAgICAtMS4wLCAxLjBd
OworICAgIHZhciBzZWVkWCA9IC0xLjA7CisgICAgdmFyIHNlZWRZID0gMS4wOworICAgIHZlcnRp
Y2VzCisgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG5ldyBGbG9hdDMyQXJyYXko
dmVydGljZXMpLCBnbC5TVEFUSUNfRFJBVyk7CisKKworICAgIGdsLnZlcnRleEF0dHJpYlBvaW50
ZXIoMCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgICBnbC5lbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheSgwKTsKKyAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUKTsKKyAgICBnbC5k
cmF3QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgMyk7CisgICAgZ2wuZmx1c2goKTsKKzwvc2NyaXB0
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC90ZXN0cy9xZ3JhcGhpY3N3ZWJ2aWV3L3Jl
c291cmNlcy9wb2ludGluZ191cC5odG1sIGIvU291cmNlL1dlYktpdC9xdC90ZXN0cy9xZ3JhcGhp
Y3N3ZWJ2aWV3L3Jlc291cmNlcy9wb2ludGluZ191cC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjQ3NGE1NmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L3F0L3Rlc3RzL3FncmFwaGljc3dlYnZpZXcvcmVzb3VyY2VzL3BvaW50aW5nX3VwLmh0bWwKQEAg
LTAsMCArMSw0NiBAQAorPGh0bWw+CisgIDxib2R5IHN0eWxlPSJtYXJnaW46IDAiPgorICAgIDxj
YW52YXMgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiPjwvY2FudmFzPgorICA8L2JvZHk+Cis8L2h0
bWw+Cis8c2NyaXB0PgorICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFn
TmFtZSgiY2FudmFzIilbMF07CisgICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgiZXhwZXJpbWVu
dGFsLXdlYmdsIik7CisgICAgZ2wuY2xlYXJDb2xvcigwLjAsIDEuMCwgMC4wLCAxLjApOworICAg
IGdsLnZpZXdwb3J0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7CisKKyAgICB2
YXIgdmVydGV4U2hhZGVyID0gZ2wuY3JlYXRlU2hhZGVyKGdsLlZFUlRFWF9TSEFERVIpOworICAg
IGdsLnNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsICJhdHRyaWJ1dGUgdmVjNCB2UG9zaXRpb247
XG52b2lkIG1haW4oKSB7IGdsX1Bvc2l0aW9uID0gdlBvc2l0aW9uOyB9Iik7CisgICAgZ2wuY29t
cGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOworCisgICAgdmFyIGZyYWdtZW50U2hhZGVyID0gZ2wu
Y3JlYXRlU2hhZGVyKGdsLkZSQUdNRU5UX1NIQURFUik7CisgICAgZ2wuc2hhZGVyU291cmNlKGZy
YWdtZW50U2hhZGVyLCAidm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCwgMC4w
LCAwLjAsIDEuMCk7IH0iKTsKKyAgICBnbC5jb21waWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTsK
KworICAgIHZhciBzaGFkZXJQcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpOworICAgIGdsLmF0
dGFjaFNoYWRlcihzaGFkZXJQcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpOworICAgIGdsLmF0dGFjaFNo
YWRlcihzaGFkZXJQcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7CisgICAgZ2wuYmluZEF0dHJpYkxv
Y2F0aW9uKHNoYWRlclByb2dyYW0sIDAsICJ2UG9zaXRpb24iKTsKKyAgICBnbC5saW5rUHJvZ3Jh
bShzaGFkZXJQcm9ncmFtKTsKKworICAgIGdsLnVzZVByb2dyYW0oc2hhZGVyUHJvZ3JhbSk7CisK
KyAgICB2YXIgYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7CisgICAgZ2wuYmluZEJ1ZmZlcihn
bC5BUlJBWV9CVUZGRVIsIGJ1ZmZlcik7CisKKyAgICB2YXIgdmVydGljZXMgPSBbLTEuMCwgLTEu
MCwKKyAgICAgICAgICAgICAgICAgICAgMC4wLCAwLjAsCisgICAgICAgICAgICAgICAgICAgIDEu
MCwgLTEuMF07CisgICAgdmFyIHNlZWRYID0gLTEuMDsKKyAgICB2YXIgc2VlZFkgPSAxLjA7Cisg
ICAgdmVydGljZXMKKyAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbmV3IEZsb2F0
MzJBcnJheSh2ZXJ0aWNlcyksIGdsLlNUQVRJQ19EUkFXKTsKKworCisgICAgZ2wudmVydGV4QXR0
cmliUG9pbnRlcigwLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApOworICAgIGdsLmVuYWJsZVZl
cnRleEF0dHJpYkFycmF5KDApOworICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpOwor
ICAgIGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAwLCAzKTsKKyAgICBnbC5mbHVzaCgpOwor
ICAgIGdsLmZpbmlzaCgpOworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0
L3Rlc3RzL3FncmFwaGljc3dlYnZpZXcvdHN0X3FncmFwaGljc3dlYnZpZXcuY3BwIGIvU291cmNl
L1dlYktpdC9xdC90ZXN0cy9xZ3JhcGhpY3N3ZWJ2aWV3L3RzdF9xZ3JhcGhpY3N3ZWJ2aWV3LmNw
cAppbmRleCBlNjMwZmZmLi45ZjhmZWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L3Rl
c3RzL3FncmFwaGljc3dlYnZpZXcvdHN0X3FncmFwaGljc3dlYnZpZXcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvcXQvdGVzdHMvcWdyYXBoaWNzd2Vidmlldy90c3RfcWdyYXBoaWNzd2Vidmlldy5j
cHAKQEAgLTI1LDYgKzI1LDEwIEBACiAjaW5jbHVkZSA8cXdlYnBhZ2UuaD4KICNpbmNsdWRlIDxx
d2ViZnJhbWUuaD4KIAorI2lmIGRlZmluZWQoRU5BQkxFX1dFQkdMKSAmJiBFTkFCTEVfV0VCR0wK
KyNpbmNsdWRlIDxRR0xXaWRnZXQ+CisjZW5kaWYKKwogY2xhc3MgdHN0X1FHcmFwaGljc1dlYlZp
ZXcgOiBwdWJsaWMgUU9iamVjdAogewogICAgIFFfT0JKRUNUCkBAIC0zOSw2ICs0MywxNCBAQCBw
cml2YXRlIHNsb3RzOgogICAgIHZvaWQgc2V0UGFsZXR0ZV9kYXRhKCk7CiAgICAgdm9pZCBzZXRQ
YWxldHRlKCk7CiAgICAgdm9pZCByZW5kZXJIaW50cygpOworCisjaWYgZGVmaW5lZChFTkFCTEVf
V0VCR0wpICYmIEVOQUJMRV9XRUJHTAorICAgIHZvaWQgd2ViZ2xTb2Z0d2FyZUZhbGxiYWNrVmVy
dGljYWxPcmllbnRhdGlvbigpOworICAgIHZvaWQgd2ViZ2xTb2Z0d2FyZUZhbGxiYWNrSG9yaXpv
bnRhbE9yaWVudGF0aW9uKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBjb21wYXJlQ2FudmFzVG9J
bWFnZShjb25zdCBRVXJsJiwgY29uc3QgUUltYWdlJik7CisjZW5kaWYKIH07CiAKIHZvaWQgdHN0
X1FHcmFwaGljc1dlYlZpZXc6OnFncmFwaGljc3dlYnZpZXcoKQpAQCAtNDQ0LDYgKzQ1NiwxMTQg
QEAgdm9pZCB0c3RfUUdyYXBoaWNzV2ViVmlldzo6cmVuZGVySGludHMoKQogICAgIFFWRVJJRlko
ISh3ZWJWaWV3LnJlbmRlckhpbnRzKCkgJiBRUGFpbnRlcjo6SGlnaFF1YWxpdHlBbnRpYWxpYXNp
bmcpKTsKIH0KIAorY2xhc3MgR3JhcGhpY3NWaWV3IDogcHVibGljIFFHcmFwaGljc1ZpZXcgewor
cHVibGljOgorICAgIEdyYXBoaWNzVmlldygpOworICAgIFFHcmFwaGljc1dlYlZpZXcqIG1fd2Vi
VmlldzsKK307CisKKyNpZiBkZWZpbmVkKEVOQUJMRV9XRUJHTCkgJiYgRU5BQkxFX1dFQkdMCiti
b29sIGNvbXBhcmVJbWFnZXNGdXp6eVBpeGVsQ291bnQoY29uc3QgUUltYWdlJiBpbWFnZTEsIGNv
bnN0IFFJbWFnZSYgaW1hZ2UyLCBxcmVhbCB0b2xlcmFuY2U9MC4wNSkKK3sKKyAgICBpZiAoaW1h
Z2UxLnNpemUoKSAhPSBpbWFnZTIuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICB1bnNpZ25lZCBkaWZmUGl4ZWxDb3VudCA9IDA7CisgICAgZm9yIChpbnQgcm93ID0gMDsgcm93
IDwgaW1hZ2UxLnNpemUoKS53aWR0aCgpOyArK3JvdykgeworICAgICAgICBmb3IgKGludCBjb2x1
bW4gPSAwOyBjb2x1bW4gPCBpbWFnZTEuc2l6ZSgpLmhlaWdodCgpOyArK2NvbHVtbikKKyAgICAg
ICAgICAgIGlmIChpbWFnZTEucGl4ZWwocm93LCBjb2x1bW4pICE9IGltYWdlMi5waXhlbChyb3cs
IGNvbHVtbikpCisgICAgICAgICAgICAgICAgKytkaWZmUGl4ZWxDb3VudDsKKyAgICB9CisKKyAg
ICBpZiAoZGlmZlBpeGVsQ291bnQgPiAoaW1hZ2UxLnNpemUoKS53aWR0aCgpICogaW1hZ2UxLnNp
emUoKS5oZWlnaHQoKSkgKiB0b2xlcmFuY2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJldHVybiB0cnVlOworfQorCitHcmFwaGljc1ZpZXc6OkdyYXBoaWNzVmlldygpCit7CisgICAg
UUdyYXBoaWNzU2NlbmUqIGNvbnN0IHNjZW5lID0gbmV3IFFHcmFwaGljc1NjZW5lKHRoaXMpOwor
ICAgIHNldFNjZW5lKHNjZW5lKTsKKworICAgIG1fd2ViVmlldyA9IG5ldyBRR3JhcGhpY3NXZWJW
aWV3OworICAgIHNjZW5lLT5hZGRJdGVtKG1fd2ViVmlldyk7CisKKyAgICBtX3dlYlZpZXctPnBh
Z2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6V2ViR0xFbmFibGVk
LCB0cnVlKTsKKyAgICBtX3dlYlZpZXctPnNldFJlc2l6ZXNUb0NvbnRlbnRzKHRydWUpOworCisg
ICAgc2V0RnJhbWVTaGFwZShRRnJhbWU6Ok5vRnJhbWUpOworICAgIHNldFZpZXdwb3J0KG5ldyBR
R0xXaWRnZXQpOworfQorCit2b2lkIHRzdF9RR3JhcGhpY3NXZWJWaWV3Ojp3ZWJnbFNvZnR3YXJl
RmFsbGJhY2tWZXJ0aWNhbE9yaWVudGF0aW9uKCkKK3sKKyAgICBRU2l6ZSBjYW52YXNTaXplKDEw
MCwgMTAwKTsKKyAgICBRSW1hZ2UgcmVmZXJlbmNlKGNhbnZhc1NpemUsIFFJbWFnZTo6Rm9ybWF0
X0FSR0IzMik7CisgICAgcmVmZXJlbmNlLmZpbGwoMHhGRjAwRkYwMCk7CisgICAgeyAvLyBSZWZl
cmVuY2UuCisgICAgICAgIFFQYWludGVyIHBhaW50ZXIoJnJlZmVyZW5jZSk7CisgICAgICAgIFFQ
b2x5Z29uRiB0cmlhbmdsZVVwOworICAgICAgICB0cmlhbmdsZVVwIDw8IFFQb2ludEYoMCwgY2Fu
dmFzU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgICAgICAgICAgICA8PCBRUG9pbnRGKGNhbnZhc1Np
emUud2lkdGgoKSwgY2FudmFzU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgICAgICAgICAgICA8PCBR
UG9pbnRGKGNhbnZhc1NpemUud2lkdGgoKSAvIDIuMCwgY2FudmFzU2l6ZS5oZWlnaHQoKSAvIDIu
MCk7CisgICAgICAgIHBhaW50ZXIuc2V0UGVuKFF0OjpOb1Blbik7CisgICAgICAgIHBhaW50ZXIu
c2V0QnJ1c2goUXQ6OnJlZCk7CisgICAgICAgIHBhaW50ZXIuZHJhd1BvbHlnb24odHJpYW5nbGVV
cCk7CisgICAgfQorCisgICAgY29tcGFyZUNhbnZhc1RvSW1hZ2UoUVVybChRTGF0aW4xU3RyaW5n
KCJxcmM6Ly8vcmVzb3VyY2VzL3BvaW50aW5nX3VwLmh0bWwiKSksIHJlZmVyZW5jZSk7Cit9CisK
K3ZvaWQgdHN0X1FHcmFwaGljc1dlYlZpZXc6OndlYmdsU29mdHdhcmVGYWxsYmFja0hvcml6b250
YWxPcmllbnRhdGlvbigpCit7CisgICAgUVNpemUgY2FudmFzU2l6ZSgxMDAsIDEwMCk7CisgICAg
UUltYWdlIHJlZmVyZW5jZShjYW52YXNTaXplLCBRSW1hZ2U6OkZvcm1hdF9BUkdCMzIpOworICAg
IHJlZmVyZW5jZS5maWxsKDB4RkYwMEZGMDApOworICAgIHsgLy8gUmVmZXJlbmNlLgorICAgICAg
ICBRUGFpbnRlciBwYWludGVyKCZyZWZlcmVuY2UpOworICAgICAgICBRUG9seWdvbkYgdHJpYW5n
bGVVcDsKKyAgICAgICAgdHJpYW5nbGVVcCA8PCBRUG9pbnRGKDAsIDApCisgICAgICAgICAgICAg
ICAgICAgPDwgUVBvaW50RigwLCBjYW52YXNTaXplLmhlaWdodCgpKQorICAgICAgICAgICAgICAg
ICAgIDw8IFFQb2ludEYoY2FudmFzU2l6ZS53aWR0aCgpIC8gMi4wLCBjYW52YXNTaXplLmhlaWdo
dCgpIC8gMi4wKTsKKyAgICAgICAgcGFpbnRlci5zZXRQZW4oUXQ6Ok5vUGVuKTsKKyAgICAgICAg
cGFpbnRlci5zZXRCcnVzaChRdDo6cmVkKTsKKyAgICAgICAgcGFpbnRlci5kcmF3UG9seWdvbih0
cmlhbmdsZVVwKTsKKyAgICB9CisKKyAgICBjb21wYXJlQ2FudmFzVG9JbWFnZShRVXJsKFFMYXRp
bjFTdHJpbmcoInFyYzovLy9yZXNvdXJjZXMvcG9pbnRpbmdfcmlnaHQuaHRtbCIpKSwgcmVmZXJl
bmNlKTsKK30KKwordm9pZCB0c3RfUUdyYXBoaWNzV2ViVmlldzo6Y29tcGFyZUNhbnZhc1RvSW1h
Z2UoY29uc3QgUVVybCYgdXJsLCBjb25zdCBRSW1hZ2UmIHJlZmVyZW5jZSkKK3sKKyAgICBHcmFw
aGljc1ZpZXcgdmlldzsKKyAgICB2aWV3LnNob3coKTsKKyAgICBRVGVzdDo6cVdhaXRGb3JXaW5k
b3dTaG93bigmdmlldyk7CisKKyAgICBRR3JhcGhpY3NXZWJWaWV3KiBjb25zdCBncmFwaGljc1dl
YlZpZXcgPSB2aWV3Lm1fd2ViVmlldzsKKyAgICBncmFwaGljc1dlYlZpZXctPmxvYWQodXJsKTsK
KyAgICBRVkVSSUZZKHdhaXRGb3JTaWduYWwoZ3JhcGhpY3NXZWJWaWV3LCBTSUdOQUwobG9hZEZp
bmlzaGVkKGJvb2wpKSkpOworICAgIHsgLy8gRm9yY2UgYSByZW5kZXIsIHRvIGNyZWF0ZSB0aGUg
YWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgdHJlZS4KKyAgICAgICAgUVBpeG1hcCBwaXhtYXAodmll
dy5zaXplKCkpOworICAgICAgICBRUGFpbnRlciBwYWludGVyKCZwaXhtYXApOworICAgICAgICB2
aWV3LnJlbmRlcigmcGFpbnRlcik7CisgICAgfQorICAgIFFBcHBsaWNhdGlvbjo6c3luY1goKTsK
KworICAgIGNvbnN0IFFTaXplIGltYWdlU2l6ZSA9IHJlZmVyZW5jZS5zaXplKCk7CisKKyAgICBR
SW1hZ2UgdGFyZ2V0KGltYWdlU2l6ZSwgUUltYWdlOjpGb3JtYXRfQVJHQjMyKTsKKyAgICB7IC8v
IFdlYiBwYWdlIGNvbnRlbnQuCisgICAgICAgIFFQYWludGVyIHBhaW50ZXIoJnRhcmdldCk7Cisg
ICAgICAgIFFSZWN0RiByZW5kZXJSZWN0KDAsIDAsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNp
emUuaGVpZ2h0KCkpOworICAgICAgICB2aWV3LnNjZW5lKCktPnJlbmRlcigmcGFpbnRlciwgcmVu
ZGVyUmVjdCwgcmVuZGVyUmVjdCk7CisgICAgfQorICAgIHRhcmdldC5zYXZlKCJ0YXJnZXQucG5n
Iik7CisgICAgcmVmZXJlbmNlLnNhdmUoInJlZmVyZW5jZS5wbmciKTsKKyAgICBRVkVSSUZZKGNv
bXBhcmVJbWFnZXNGdXp6eVBpeGVsQ291bnQodGFyZ2V0LCByZWZlcmVuY2UsIDAuMDEpKTsKK30K
KyNlbmRpZgorCiBRVEVTVF9NQUlOKHRzdF9RR3JhcGhpY3NXZWJWaWV3KQogCiAjaW5jbHVkZSAi
dHN0X3FncmFwaGljc3dlYnZpZXcubW9jIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC90
ZXN0cy9xZ3JhcGhpY3N3ZWJ2aWV3L3RzdF9xZ3JhcGhpY3N3ZWJ2aWV3LnFyYyBiL1NvdXJjZS9X
ZWJLaXQvcXQvdGVzdHMvcWdyYXBoaWNzd2Vidmlldy90c3RfcWdyYXBoaWNzd2Vidmlldy5xcmMK
aW5kZXggYzkxYmI5Yy4uMTQ4OGZjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC90ZXN0
cy9xZ3JhcGhpY3N3ZWJ2aWV3L3RzdF9xZ3JhcGhpY3N3ZWJ2aWV3LnFyYworKysgYi9Tb3VyY2Uv
V2ViS2l0L3F0L3Rlc3RzL3FncmFwaGljc3dlYnZpZXcvdHN0X3FncmFwaGljc3dlYnZpZXcucXJj
CkBAIC0xLDYgKzEsNyBAQAotPCFET0NUWVBFIFJDQz48UkNDIHZlcnNpb249IjEuMCI+Ci08cXJl
c291cmNlPgotICAgIDxmaWxlPnJlc291cmNlcy9pbnB1dF90eXBlcy5odG1sPC9maWxlPgotPC9x
cmVzb3VyY2U+Cis8UkNDPgorICAgIDxxcmVzb3VyY2UgcHJlZml4PSIvIj4KKyAgICAgICAgPGZp
bGU+cmVzb3VyY2VzL2lucHV0X3R5cGVzLmh0bWw8L2ZpbGU+CisgICAgICAgIDxmaWxlPnJlc291
cmNlcy9wb2ludGluZ19yaWdodC5odG1sPC9maWxlPgorICAgICAgICA8ZmlsZT5yZXNvdXJjZXMv
cG9pbnRpbmdfdXAuaHRtbDwvZmlsZT4KKyAgICA8L3FyZXNvdXJjZT4KIDwvUkNDPgotCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3Rlc3RzLnBybyBiL1NvdXJjZS9XZWJLaXQv
cXQvdGVzdHMvdGVzdHMucHJvCmluZGV4IGU1Yjc0MDguLjUyOWZhMDQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvcXQvdGVzdHMvdGVzdHMucHJvCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvdGVz
dHMvdGVzdHMucHJvCkBAIC0zLDMgKzMsNiBAQCBURU1QTEFURSA9IHN1YmRpcnMKIFNVQkRJUlMg
PSBxd2ViZnJhbWUgcXdlYnBhZ2UgcXdlYmVsZW1lbnQgcWdyYXBoaWNzd2VidmlldyBxd2ViaGlz
dG9yeWludGVyZmFjZSBxd2VidmlldyBxd2ViaGlzdG9yeSBxd2ViaW5zcGVjdG9yIGh5YnJpZFBp
eG1hcAogY29udGFpbnMoUVRfQ09ORklHLCBkZWNsYXJhdGl2ZSk6IFNVQkRJUlMgKz0gcWRlY2xh
cmF0aXZld2VidmlldwogU1VCRElSUyArPSBiZW5jaG1hcmtzL3BhaW50aW5nIGJlbmNobWFya3Mv
bG9hZGluZworY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dFQkdMPTEpIHsKKyAgICBTVUJESVJT
ICs9IGJlbmNobWFya3Mvd2ViZ2wKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86797</attachid>
            <date>2011-03-24 10:36:54 -0700</date>
            <delta_ts>2011-03-24 11:20:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>40884.diff</filename>
            <type>text/plain</type>
            <size>23333</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkMDAzNTBjLi45YWI1MjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcg
QEAKKzIwMTEtMDMtMjQgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbi5wb3VsYWluQG5va2lh
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
UXRdIFdoZW4gd2UgcmVuZGVyIFdlYkdMIG9mZnNjcmVlbiwgY29sb3IgY29udmVyc2lvbiBjb3N0
IGEgbG90IG9mIENQVSBjeWNsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQwODg0CisKKyAgICAgICAgVGhlIHNvZnR3YXJlIGZhbGxiYWNrIGlzIG5v
dyBvbmx5IG5lZWRlZCBmb3IgY29ybmVyIGNhc2VzIGxpa2UgYSBtYW51YWwgcmVuZGVyaW5nCisg
ICAgICAgIG9mIHRoZSBwYWdlIHRvIFFJbWFnZS4KKworICAgICAgICBLZWVwaW5nIHRoZSBpbWFn
ZSB3aXRoIHRoZSBsYXN0IHBpeGVsIHZhbHVlcyBpcyBubyBsb25nZXIgbmVlZGVkLiBSZW1vdmlu
ZyBpdCByZWR1Y2UgdGhlCisgICAgICAgIHBlcmZvcm1hbmNlIGZvciByZWFsLXRpbWUgcmVuZGVy
aW5nIG9uIHNvZnR3YXJlIHN1cmZhY2UsIGJ1dCB0aGlzIGNhc2Ugc2hvdWxkIG5vIGxvbmdlciBi
ZQorICAgICAgICBzdXBwb3J0ZWQuCisKKyAgICAgICAgVGhlIGNvbnZlcnNpb24gZnJvbSBPcGVu
R0wgY29sb3Igc3BhY2UgYW5kIGNvb3JkaW5hdGVzIGlzIGRvbmUgbWFudWFsbHkgZm9yIHBlcmZv
cm1hbmNlLiBUaGlzCisgICAgICAgIGFsc28gZml4IHRoZSBidWcgb2YgdGhlIGludmVydGVkIFgg
YXhpcyBkdWUgdG8gdGhlIHRyYW5zZm9ybWF0aW9uLgorCisgICAgICAgIFRoZSB0ZXN0cyBhbmQg
YmVuY2htYXJrcyBhcmUgZG9uZSB0aHJvdWdoIFF0IEFQSSB0ZXN0cy4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6c3dhcEJnclRvUmdiKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpy
ZXNoYXBlKToKKwogMjAxMS0wMy0yMyAgQW5kcmV5IEFkYWlraW4gIDxhYW5kcmV5QGdvb2dsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0
M0RRdC5jcHAKaW5kZXggMDgxNzllMS4uMTYxNTM5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAK
QEAgLTI2Myw3ICsyNjMsNiBAQCBwdWJsaWM6CiAgICAgR0x1aW50IG1fbWFpbkZibzsKICAgICBH
THVpbnQgbV9jdXJyZW50RmJvOwogICAgIEdMdWludCBtX2RlcHRoQnVmZmVyOwotICAgIFFJbWFn
ZSBtX3BpeGVsczsKICAgICBib29sIG1fbGF5ZXJDb21wb3NpdGVkOwogICAgIExpc3RIYXNoU2V0
PHVuc2lnbmVkIGludD4gbV9zeW50aGV0aWNFcnJvcnM7CiAKQEAgLTQ4MSw2ICs0ODAsMTEgQEAg
UUdMV2lkZ2V0KiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRWaWV3cG9ydEdMV2lkZ2V0
KCkKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBxdWludDMyIHN3YXBCZ3JUb1Jn
YihxdWludDMyIHBpeGVsKQoreworICAgIHJldHVybiAoKHBpeGVsIDw8IDE2KSAmIDB4ZmYwMDAw
KSB8ICgocGl4ZWwgPj4gMTYpICYgMHhmZikgfCAocGl4ZWwgJiAweGZmMDBmZjAwKTsKK30KKwog
dm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwYWludChRUGFpbnRlciogcGFpbnRlciwg
Y29uc3QgUVN0eWxlT3B0aW9uR3JhcGhpY3NJdGVtKiBvcHRpb24sIFFXaWRnZXQqIHdpZGdldCkK
IHsKICAgICBRX1VOVVNFRCh3aWRnZXQpOwpAQCAtNDk2LDExICs1MDAsMzkgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQzREludGVybmFsOjpwYWludChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVN0
eWxlT3B0aW9uR3JhcGgKICAgICB9CiAKICAgICAvLyBBbHRlcm5hdGl2ZWx5IHJlYWQgcGl4ZWxz
IHRvIGEgbWVtb3J5IGJ1ZmZlci4KKyAgICBRSW1hZ2Ugb2Zmc2NyZWVuSW1hZ2UocmVjdC53aWR0
aCgpLCByZWN0LmhlaWdodCgpLCBRSW1hZ2U6OkZvcm1hdF9BUkdCMzIpOworICAgIHF1aW50MzIq
IGltYWdlUGl4ZWxzID0gcmVpbnRlcnByZXRfY2FzdDxxdWludDMyKj4ob2Zmc2NyZWVuSW1hZ2Uu
Yml0cygpKTsKKwogICAgIG1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgYmluZEZyYW1l
YnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tYWluRmJvKTsKLSAgICBn
bFJlYWRQaXhlbHMoLyogeCAqLyAwLCAvKiB5ICovIDAsIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWln
aHQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFLCBtX3BpeGVscy5iaXRzKCkpOwotICAgIHBhaW50ZXItPmRyYXdJbWFnZSgvKiB4ICov
IDAsIC8qIHkgKi8gMCwgbV9waXhlbHMucmdiU3dhcHBlZCgpLnRyYW5zZm9ybWVkKFFNYXRyaXgo
KS5yb3RhdGUoMTgwKSkpOworICAgIGdsUmVhZFBpeGVscygvKiB4ICovIDAsIC8qIHkgKi8gMCwg
cmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGltYWdlUGl4ZWxzKTsKKwogICAgIGJpbmRG
cmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fY3VycmVudEZibyk7
CisKKyAgICAvLyBPcGVuR0wgZ2l2ZXMgdXMgQUJHUiBvbiAzMiBiaXRzLCBhbmQgd2l0aCB0aGUg
b3JpZ2luIGF0IHRoZSBib3R0b20gbGVmdAorICAgIC8vIFdlIG5lZWQgUkdCMzIgb3IgQVJHQjMy
X1BNLCB3aXRoIHRoZSBvcmlnaW4gYXQgdGhlIHRvcCBsZWZ0LgorICAgIHF1aW50MzIqIHBpeGVs
c1NyYyA9IGltYWdlUGl4ZWxzOworICAgIGNvbnN0IGludCBoZWlnaHQgPSBzdGF0aWNfY2FzdDxp
bnQ+KHJlY3QuaGVpZ2h0KCkpOworICAgIGNvbnN0IGludCB3aWR0aCA9IHN0YXRpY19jYXN0PGlu
dD4ocmVjdC53aWR0aCgpKTsKKyAgICBjb25zdCBpbnQgaGFsZkhlaWdodCA9IGhlaWdodCAvIDI7
CisgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgaGFsZkhlaWdodDsgKytyb3cpIHsKKyAgICAg
ICAgY29uc3QgaW50IHRhcmdldElkeCA9IChoZWlnaHQgLSAxIC0gcm93KSAqIHdpZHRoOworICAg
ICAgICBxdWludDMyKiBwaXhlbHNEc3QgPSBpbWFnZVBpeGVscyArIHRhcmdldElkeDsKKyAgICAg
ICAgZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwgd2lkdGg7ICsrY29sdW1uKSB7CisgICAg
ICAgICAgICBxdWludDMyIHRlbXBQaXhlbCA9ICpwaXhlbHNTcmM7CisgICAgICAgICAgICAqcGl4
ZWxzU3JjID0gc3dhcEJnclRvUmdiKCpwaXhlbHNEc3QpOworICAgICAgICAgICAgKnBpeGVsc0Rz
dCA9IHN3YXBCZ3JUb1JnYih0ZW1wUGl4ZWwpOworICAgICAgICAgICAgKytwaXhlbHNTcmM7Cisg
ICAgICAgICAgICArK3BpeGVsc0RzdDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoc3RhdGlj
X2Nhc3Q8aW50PihoZWlnaHQpICUgMikgeworICAgICAgICBmb3IgKGludCBjb2x1bW4gPSAwOyBj
b2x1bW4gPCB3aWR0aDsgKytjb2x1bW4pIHsKKyAgICAgICAgICAgICpwaXhlbHNTcmMgPSBzd2Fw
QmdyVG9SZ2IoKnBpeGVsc1NyYyk7CisgICAgICAgICAgICArK3BpeGVsc1NyYzsKKyAgICAgICAg
fQorICAgIH0KKyAgICBwYWludGVyLT5kcmF3SW1hZ2UoLyogeCAqLyAwLCAvKiB5ICovIDAsIG9m
ZnNjcmVlbkltYWdlKTsKIH0KIAogUVJlY3RGIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJv
dW5kaW5nUmVjdCgpIGNvbnN0CkBAIC01OTAsNyArNjIyLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgbV9jdXJyZW50SGVpZ2h0
ID0gaGVpZ2h0OwogCiAgICAgbV9pbnRlcm5hbC0+bV9ib3VuZGluZ1JlY3QgPSBRUmVjdEYoUVBv
aW50RigwLCAwKSwgUVNpemVGKHdpZHRoLCBoZWlnaHQpKTsKLSAgICBtX2ludGVybmFsLT5tX3Bp
eGVscyA9IFFJbWFnZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBRSW1hZ2U6OkZv
cm1hdF9BUkdCMzIpOwogCiAgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L3F0L0NoYW5nZUxvZwppbmRleCBjMjY3NGM0Li5kMGY3OWU2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwpA
QCAtMSwzICsxLDM3IEBACisyMDExLTAzLTI0ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW4u
cG91bGFpbkBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgW1F0XSBXaGVuIHdlIHJlbmRlciBXZWJHTCBvZmZzY3JlZW4sIGNvbG9yIGNv
bnZlcnNpb24gY29zdCBhIGxvdCBvZiBDUFUgY3ljbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDg4NAorCisgICAgICAgIEFkZCB0ZXN0cyBhbmQg
YmVuY2htYXJrcyBmb3IgdGhlIHNvZnR3YXJlIGZhbGxiYWNrIG9mIFdlYkdMLgorCisgICAgICAg
ICogdGVzdHMvYmVuY2htYXJrcy93ZWJnbC8xMDAwMF90cmlhbmdsZXMuaHRtbDogQWRkZWQuCisg
ICAgICAgICogdGVzdHMvYmVuY2htYXJrcy93ZWJnbC90c3Rfd2ViZ2wuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEdyYXBoaWNzVmlldzo6R3JhcGhpY3NWaWV3KToKKyAgICAgICAgKEdyYXBoaWNzVmll
dzo6cmVzaXplRXZlbnQpOgorICAgICAgICAodHN0X1dlYkdsUGVyZm9ybWFuY2U6OmluaXQpOgor
ICAgICAgICAodHN0X1dlYkdsUGVyZm9ybWFuY2U6OmNsZWFudXApOgorICAgICAgICAodHN0X1dl
YkdsUGVyZm9ybWFuY2U6OmJlbmNoU29mdHdhcmVGYWxsYmFja1JnYjE2KToKKyAgICAgICAgKHRz
dF9XZWJHbFBlcmZvcm1hbmNlOjpiZW5jaFNvZnR3YXJlRmFsbGJhY2tSZ2IzMik6CisgICAgICAg
ICh0c3RfV2ViR2xQZXJmb3JtYW5jZTo6YmVuY2hTb2Z0d2FyZUZhbGxiYWNrQXJnYjMyKToKKyAg
ICAgICAgKHRzdF9XZWJHbFBlcmZvcm1hbmNlOjpiZW5jaFNvZnR3YXJlRmFsbGJhY2tBcmdiMzJQ
cmVtdWx0aXBsaWVkKToKKyAgICAgICAgKHRzdF9XZWJHbFBlcmZvcm1hbmNlOjpiZW5jaG1hcmtG
cmFtZVJlbmRlcmluZ09uSW1hZ2UpOgorICAgICAgICAqIHRlc3RzL2JlbmNobWFya3Mvd2ViZ2wv
dHN0X3dlYmdsLnFyYzogQWRkZWQuCisgICAgICAgICogdGVzdHMvYmVuY2htYXJrcy93ZWJnbC93
ZWJnbC5wcm86IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3FncmFwaGljc3dlYnZpZXcvcWdyYXBo
aWNzd2Vidmlldy5wcm86CisgICAgICAgICogdGVzdHMvcWdyYXBoaWNzd2Vidmlldy9yZXNvdXJj
ZXMvcG9pbnRpbmdfcmlnaHQuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMvcWdyYXBoaWNz
d2Vidmlldy9yZXNvdXJjZXMvcG9pbnRpbmdfdXAuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVz
dHMvcWdyYXBoaWNzd2Vidmlldy90c3RfcWdyYXBoaWNzd2Vidmlldy5jcHA6CisgICAgICAgIChj
b21wYXJlSW1hZ2VzRnV6enlQaXhlbENvdW50KToKKyAgICAgICAgKEdyYXBoaWNzVmlldzo6R3Jh
cGhpY3NWaWV3KToKKyAgICAgICAgKHRzdF9RR3JhcGhpY3NXZWJWaWV3Ojp3ZWJnbFNvZnR3YXJl
RmFsbGJhY2tWZXJ0aWNhbE9yaWVudGF0aW9uKToKKyAgICAgICAgKHRzdF9RR3JhcGhpY3NXZWJW
aWV3Ojp3ZWJnbFNvZnR3YXJlRmFsbGJhY2tIb3Jpem9udGFsT3JpZW50YXRpb24pOgorICAgICAg
ICAodHN0X1FHcmFwaGljc1dlYlZpZXc6OmNvbXBhcmVDYW52YXNUb0ltYWdlKToKKyAgICAgICAg
KiB0ZXN0cy9xZ3JhcGhpY3N3ZWJ2aWV3L3RzdF9xZ3JhcGhpY3N3ZWJ2aWV3LnFyYzoKKyAgICAg
ICAgKiB0ZXN0cy90ZXN0cy5wcm86CisKIDIwMTEtMDMtMjIgIEFuZHJldyBXYXNvbiAgPHJlY3Rh
bG9naWNAcmVjdGFsb2dpYy5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQmVuamFtaW4gUG91
bGFpbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvYmVuY2htYXJrcy93ZWJn
bC8xMDAwMF90cmlhbmdsZXMuaHRtbCBiL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvYmVuY2htYXJr
cy93ZWJnbC8xMDAwMF90cmlhbmdsZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5mZDA2MWFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC90ZXN0
cy9iZW5jaG1hcmtzL3dlYmdsLzEwMDAwX3RyaWFuZ2xlcy5odG1sCkBAIC0wLDAgKzEsNTkgQEAK
KzxodG1sPgorICA8Ym9keSBzdHlsZT0ibWFyZ2luOiAwIj4KKyAgICA8Y2FudmFzIHdpZHRoPSIx
MDAwIiBoZWlnaHQ9IjEwMDAiPjwvY2FudmFzPgorICA8L2JvZHk+Cis8L2h0bWw+Cis8c2NyaXB0
PgorICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiY2FudmFz
IilbMF07CisgICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIik7
CisgICAgZ2wuY2xlYXJDb2xvcigwLjAsIDEuMCwgMC4wLCAxLjApOworICAgIGdsLnZpZXdwb3J0
KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7CisKKyAgICB2YXIgdmVydGV4U2hh
ZGVyID0gZ2wuY3JlYXRlU2hhZGVyKGdsLlZFUlRFWF9TSEFERVIpOworICAgIGdsLnNoYWRlclNv
dXJjZSh2ZXJ0ZXhTaGFkZXIsICJhdHRyaWJ1dGUgdmVjNCB2UG9zaXRpb247XG52b2lkIG1haW4o
KSB7IGdsX1Bvc2l0aW9uID0gdlBvc2l0aW9uOyB9Iik7CisgICAgZ2wuY29tcGlsZVNoYWRlcih2
ZXJ0ZXhTaGFkZXIpOworCisgICAgdmFyIGZyYWdtZW50U2hhZGVyID0gZ2wuY3JlYXRlU2hhZGVy
KGdsLkZSQUdNRU5UX1NIQURFUik7CisgICAgZ2wuc2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVy
LCAidm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCwgMC4wLCAwLjAsIDEuMCk7
IH0iKTsKKyAgICBnbC5jb21waWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTsKKworICAgIHZhciBz
aGFkZXJQcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpOworICAgIGdsLmF0dGFjaFNoYWRlcihz
aGFkZXJQcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpOworICAgIGdsLmF0dGFjaFNoYWRlcihzaGFkZXJQ
cm9ncmFtLCBmcmFnbWVudFNoYWRlcik7CisgICAgZ2wuYmluZEF0dHJpYkxvY2F0aW9uKHNoYWRl
clByb2dyYW0sIDAsICJ2UG9zaXRpb24iKTsKKyAgICBnbC5saW5rUHJvZ3JhbShzaGFkZXJQcm9n
cmFtKTsKKworICAgIGdsLnVzZVByb2dyYW0oc2hhZGVyUHJvZ3JhbSk7CisKKyAgICB2YXIgYnVm
ZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7CisgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZG
RVIsIGJ1ZmZlcik7CisKKyAgICB2YXIgdmVydGljZXMgPSBbXTsKKyAgICB2YXIgc2VlZFggPSAt
MS4wOworICAgIHZhciBzZWVkWSA9IDEuMDsKKyAgICBmb3IgKHZhciBpID0gMTsgaSA8PSAxMDAw
MDsgKytpKSB7CisgICAgICAgIHZlcnRpY2VzLnB1c2goc2VlZFgpOworICAgICAgICB2ZXJ0aWNl
cy5wdXNoKHNlZWRZKTsKKyAgICAgICAgdmVydGljZXMucHVzaCgwKTsKKyAgICAgICAgc2VlZFgg
Kz0gMC4wMTsKKyAgICAgICAgdmVydGljZXMucHVzaChzZWVkWCk7CisgICAgICAgIHZlcnRpY2Vz
LnB1c2goc2VlZFkgLSAwLjAyKTsKKyAgICAgICAgdmVydGljZXMucHVzaCgwKTsKKyAgICAgICAg
c2VlZFggKz0gMC4wMTsKKyAgICAgICAgdmVydGljZXMucHVzaChzZWVkWCk7CisgICAgICAgIHZl
cnRpY2VzLnB1c2goc2VlZFkpOworICAgICAgICB2ZXJ0aWNlcy5wdXNoKDApOworICAgICAgICBp
ZiAoIShpICUgMTAwKSkgeworICAgICAgICAgICAgc2VlZFggPSAtMS4wOworICAgICAgICAgICAg
c2VlZFkgLT0gMC4wMjsKKyAgICAgICAgfQorICAgIH0KKyAgICBnbC5idWZmZXJEYXRhKGdsLkFS
UkFZX0JVRkZFUiwgbmV3IEZsb2F0MzJBcnJheSh2ZXJ0aWNlcyksIGdsLlNUQVRJQ19EUkFXKTsK
KworCisgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcigwLCAzLCBnbC5GTE9BVCwgZmFsc2UsIDAs
IDApOworICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApOworICAgIGdsLmNsZWFyKGds
LkNPTE9SX0JVRkZFUl9CSVQpOworICAgIGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAwLCAz
MDAwMCk7CisgICAgZ2wuZmx1c2goKTsKKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9xdC90ZXN0cy9iZW5jaG1hcmtzL3dlYmdsL3RzdF93ZWJnbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L3F0L3Rlc3RzL2JlbmNobWFya3Mvd2ViZ2wvdHN0X3dlYmdsLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDg2NWEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9xdC90ZXN0cy9iZW5jaG1hcmtzL3dlYmdsL3RzdF93ZWJnbC5jcHAKQEAgLTAsMCAr
MSwxMzAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKworI2luY2x1ZGUgIi4uLy4uL3V0aWwuaCIK
KyNpbmNsdWRlIDxRR0xXaWRnZXQ+CisjaW5jbHVkZSA8UUdyYXBoaWNzVmlldz4KKyNpbmNsdWRl
IDxRR3JhcGhpY3NXZWJWaWV3PgorI2luY2x1ZGUgPFFTY29wZWRQb2ludGVyPgorI2luY2x1ZGUg
PFFXZWJGcmFtZT4KKyNpbmNsdWRlIDxRdFRlc3QvUXRUZXN0PgorCitjbGFzcyBHcmFwaGljc1Zp
ZXc7CisKK2NsYXNzIHRzdF9XZWJHbFBlcmZvcm1hbmNlIDogcHVibGljIFFPYmplY3QgeworICAg
IFFfT0JKRUNUCisKK3ByaXZhdGUgc2xvdHM6CisgICAgdm9pZCBpbml0KCk7CisgICAgdm9pZCBj
bGVhbnVwKCk7CisKKyAgICB2b2lkIGJlbmNoU29mdHdhcmVGYWxsYmFja1JnYjE2KCk7CisgICAg
dm9pZCBiZW5jaFNvZnR3YXJlRmFsbGJhY2tSZ2IzMigpOworICAgIHZvaWQgYmVuY2hTb2Z0d2Fy
ZUZhbGxiYWNrQXJnYjMyKCk7CisgICAgdm9pZCBiZW5jaFNvZnR3YXJlRmFsbGJhY2tBcmdiMzJQ
cmVtdWx0aXBsaWVkKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBiZW5jaG1hcmtGcmFtZVJlbmRl
cmluZ09uSW1hZ2UoUUltYWdlOjpGb3JtYXQpOworCisgICAgUVNjb3BlZFBvaW50ZXI8R3JhcGhp
Y3NWaWV3PiBtX3ZpZXc7Cit9OworCitjbGFzcyBHcmFwaGljc1ZpZXcgOiBwdWJsaWMgUUdyYXBo
aWNzVmlldyB7CitwdWJsaWM6CisgICAgR3JhcGhpY3NWaWV3KCk7CisgICAgUUdyYXBoaWNzV2Vi
VmlldyogbV93ZWJWaWV3OworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCByZXNpemVFdmVudChRUmVz
aXplRXZlbnQqKTsKK307CisKK0dyYXBoaWNzVmlldzo6R3JhcGhpY3NWaWV3KCkKK3sKKyAgICBR
R3JhcGhpY3NTY2VuZSogY29uc3Qgc2NlbmUgPSBuZXcgUUdyYXBoaWNzU2NlbmUodGhpcyk7Cisg
ICAgc2V0U2NlbmUoc2NlbmUpOworCisgICAgbV93ZWJWaWV3ID0gbmV3IFFHcmFwaGljc1dlYlZp
ZXc7CisgICAgc2NlbmUtPmFkZEl0ZW0obV93ZWJWaWV3KTsKKworICAgIG1fd2ViVmlldy0+cGFn
ZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpXZWJHTEVuYWJsZWQs
IHRydWUpOworCisgICAgcmVzaXplKDgwMCwgNjAwKTsKKyAgICBzZXRGcmFtZVNoYXBlKFFGcmFt
ZTo6Tm9GcmFtZSk7CisgICAgc2V0Vmlld3BvcnQobmV3IFFHTFdpZGdldCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NWaWV3OjpyZXNpemVFdmVudChRUmVzaXplRXZlbnQqIGV2ZW50KQoreworICAgIFFH
cmFwaGljc1ZpZXc6OnJlc2l6ZUV2ZW50KGV2ZW50KTsKKyAgICBRUmVjdEYgcmVjdChRUG9pbnQo
MCwgMCksIGV2ZW50LT5zaXplKCkpOworICAgIG1fd2ViVmlldy0+c2V0R2VvbWV0cnkocmVjdCk7
CisgICAgc2NlbmUoKS0+c2V0U2NlbmVSZWN0KHJlY3QpOworfQorCit2b2lkIHRzdF9XZWJHbFBl
cmZvcm1hbmNlOjppbml0KCkKK3sKKyAgICBtX3ZpZXcucmVzZXQobmV3IEdyYXBoaWNzVmlldyk7
CisgICAgbV92aWV3LT5zaG93TWF4aW1pemVkKCk7CisgICAgUVRlc3Q6OnFXYWl0Rm9yV2luZG93
U2hvd24obV92aWV3LmRhdGEoKSk7Cit9CisKK3ZvaWQgdHN0X1dlYkdsUGVyZm9ybWFuY2U6OmNs
ZWFudXAoKQoreworICAgIG1fdmlldy5yZXNldCgpOworfQorCit2b2lkIHRzdF9XZWJHbFBlcmZv
cm1hbmNlOjpiZW5jaFNvZnR3YXJlRmFsbGJhY2tSZ2IxNigpCit7CisgICAgYmVuY2htYXJrRnJh
bWVSZW5kZXJpbmdPbkltYWdlKFFJbWFnZTo6Rm9ybWF0X1JHQjE2KTsKK30KKwordm9pZCB0c3Rf
V2ViR2xQZXJmb3JtYW5jZTo6YmVuY2hTb2Z0d2FyZUZhbGxiYWNrUmdiMzIoKQoreworICAgIGJl
bmNobWFya0ZyYW1lUmVuZGVyaW5nT25JbWFnZShRSW1hZ2U6OkZvcm1hdF9SR0IzMik7Cit9CisK
K3ZvaWQgdHN0X1dlYkdsUGVyZm9ybWFuY2U6OmJlbmNoU29mdHdhcmVGYWxsYmFja0FyZ2IzMigp
Cit7CisgICAgYmVuY2htYXJrRnJhbWVSZW5kZXJpbmdPbkltYWdlKFFJbWFnZTo6Rm9ybWF0X0FS
R0IzMik7Cit9CisKK3ZvaWQgdHN0X1dlYkdsUGVyZm9ybWFuY2U6OmJlbmNoU29mdHdhcmVGYWxs
YmFja0FyZ2IzMlByZW11bHRpcGxpZWQoKQoreworICAgIGJlbmNobWFya0ZyYW1lUmVuZGVyaW5n
T25JbWFnZShRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZCk7Cit9CisKK3ZvaWQg
dHN0X1dlYkdsUGVyZm9ybWFuY2U6OmJlbmNobWFya0ZyYW1lUmVuZGVyaW5nT25JbWFnZShRSW1h
Z2U6OkZvcm1hdCBmb3JtYXQpCit7CisgICAgbV92aWV3LT5tX3dlYlZpZXctPmxvYWQoUVVybChR
TGF0aW4xU3RyaW5nKCJxcmM6Ly8vdGVzdGNhc2VzLzEwMDAwX3RyaWFuZ2xlcy5odG1sIikpKTsK
KyAgICBjb25zdCBib29sIHBhZ2VMb2FkZWQgPSB3YWl0Rm9yU2lnbmFsKG1fdmlldy0+bV93ZWJW
aWV3LCBTSUdOQUwobG9hZEZpbmlzaGVkKGJvb2wpKSk7CisgICAgUV9BU1NFUlQocGFnZUxvYWRl
ZCk7CisgICAgUV9VTlVTRUQocGFnZUxvYWRlZCk7CisKKyAgICBRSW1hZ2UgdGFyZ2V0KG1fdmll
dy0+c2l6ZSgpLCBmb3JtYXQpOworICAgIFFCRU5DSE1BUksgeworICAgICAgICBRUGFpbnRlciBw
YWludGVyKCZ0YXJnZXQpOworICAgICAgICBtX3ZpZXctPnJlbmRlcigmcGFpbnRlcik7CisgICAg
ICAgIHBhaW50ZXIuZW5kKCk7CisgICAgfQorfQorCitRVEVTVF9NQUlOKHRzdF9XZWJHbFBlcmZv
cm1hbmNlKQorCisjaW5jbHVkZSAidHN0X3dlYmdsLm1vYyIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvcXQvdGVzdHMvYmVuY2htYXJrcy93ZWJnbC90c3Rfd2ViZ2wucXJjIGIvU291cmNlL1dl
YktpdC9xdC90ZXN0cy9iZW5jaG1hcmtzL3dlYmdsL3RzdF93ZWJnbC5xcmMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg0OTQ0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvcXQvdGVzdHMvYmVuY2htYXJrcy93ZWJnbC90c3Rfd2ViZ2wucXJjCkBAIC0wLDAg
KzEsNSBAQAorPFJDQz4KKyAgICA8cXJlc291cmNlIHByZWZpeD0iL3Rlc3RjYXNlcyI+CisgICAg
ICAgIDxmaWxlPjEwMDAwX3RyaWFuZ2xlcy5odG1sPC9maWxlPgorICAgIDwvcXJlc291cmNlPgor
PC9SQ0M+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL2JlbmNobWFya3Mvd2Vi
Z2wvd2ViZ2wucHJvIGIvU291cmNlL1dlYktpdC9xdC90ZXN0cy9iZW5jaG1hcmtzL3dlYmdsL3dl
YmdsLnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjIxYmM4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC90ZXN0cy9iZW5jaG1hcmtzL3dlYmdsL3dl
YmdsLnBybwpAQCAtMCwwICsxLDQgQEAKK2lzRW1wdHkoT1VUUFVUX0RJUik6IE9VVFBVVF9ESVIg
PSAuLi8uLi8uLi8uLi8uLgoraW5jbHVkZSguLi8uLi90ZXN0cy5wcmkpCitleGlzdHMoJCR7VEFS
R0VUfS5xcmMpOlJFU09VUkNFUyArPSAkJHtUQVJHRVR9LnFyYworUVQgKz0gb3BlbmdsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3FncmFwaGljc3dlYnZpZXcvcWdyYXBoaWNz
d2Vidmlldy5wcm8gYi9Tb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3FncmFwaGljc3dlYnZpZXcvcWdy
YXBoaWNzd2Vidmlldy5wcm8KaW5kZXggZTkxNWQ2MC4uZTU0OTRhZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9xdC90ZXN0cy9xZ3JhcGhpY3N3ZWJ2aWV3L3FncmFwaGljc3dlYnZpZXcucHJv
CisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcWdyYXBoaWNzd2Vidmlldy9xZ3JhcGhpY3N3
ZWJ2aWV3LnBybwpAQCAtMSwzICsxLDYgQEAKIGlzRW1wdHkoT1VUUFVUX0RJUik6IE9VVFBVVF9E
SVIgPSAuLi8uLi8uLi8uLgogaW5jbHVkZSguLi90ZXN0cy5wcmkpCiBleGlzdHMoJCR7VEFSR0VU
fS5xcmMpOlJFU09VUkNFUyArPSAkJHtUQVJHRVR9LnFyYworY29udGFpbnMoREVGSU5FUywgRU5B
QkxFX1dFQkdMPTEpIHsKKyAgICBRVCArPSBvcGVuZ2wKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvcXQvdGVzdHMvcWdyYXBoaWNzd2Vidmlldy9yZXNvdXJjZXMvcG9pbnRpbmdfcmlnaHQu
aHRtbCBiL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcWdyYXBoaWNzd2Vidmlldy9yZXNvdXJjZXMv
cG9pbnRpbmdfcmlnaHQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5i
YzU5MmZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC90ZXN0cy9xZ3JhcGhp
Y3N3ZWJ2aWV3L3Jlc291cmNlcy9wb2ludGluZ19yaWdodC5odG1sCkBAIC0wLDAgKzEsNDUgQEAK
KzxodG1sPgorICA8Ym9keSBzdHlsZT0ibWFyZ2luOiAwIj4KKyAgICA8Y2FudmFzIHdpZHRoPSIx
MDAiIGhlaWdodD0iMTAwIj48L2NhbnZhcz4KKyAgPC9ib2R5PgorPC9odG1sPgorPHNjcmlwdD4K
KyAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImNhbnZhcyIp
WzBdOworICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIpOwor
ICAgIGdsLmNsZWFyQ29sb3IoMC4wLCAxLjAsIDAuMCwgMS4wKTsKKyAgICBnbC52aWV3cG9ydCgw
LCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpOworCisgICAgdmFyIHZlcnRleFNoYWRl
ciA9IGdsLmNyZWF0ZVNoYWRlcihnbC5WRVJURVhfU0hBREVSKTsKKyAgICBnbC5zaGFkZXJTb3Vy
Y2UodmVydGV4U2hhZGVyLCAiYXR0cmlidXRlIHZlYzQgdlBvc2l0aW9uO1xudm9pZCBtYWluKCkg
eyBnbF9Qb3NpdGlvbiA9IHZQb3NpdGlvbjsgfSIpOworICAgIGdsLmNvbXBpbGVTaGFkZXIodmVy
dGV4U2hhZGVyKTsKKworICAgIHZhciBmcmFnbWVudFNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcihn
bC5GUkFHTUVOVF9TSEFERVIpOworICAgIGdsLnNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwg
InZvaWQgbWFpbigpIHsgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDAuMCwgMC4wLCAxLjApOyB9
Iik7CisgICAgZ2wuY29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcik7CisKKyAgICB2YXIgc2hh
ZGVyUHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTsKKyAgICBnbC5hdHRhY2hTaGFkZXIoc2hh
ZGVyUHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsKKyAgICBnbC5hdHRhY2hTaGFkZXIoc2hhZGVyUHJv
Z3JhbSwgZnJhZ21lbnRTaGFkZXIpOworICAgIGdsLmJpbmRBdHRyaWJMb2NhdGlvbihzaGFkZXJQ
cm9ncmFtLCAwLCAidlBvc2l0aW9uIik7CisgICAgZ2wubGlua1Byb2dyYW0oc2hhZGVyUHJvZ3Jh
bSk7CisKKyAgICBnbC51c2VQcm9ncmFtKHNoYWRlclByb2dyYW0pOworCisgICAgdmFyIGJ1ZmZl
ciA9IGdsLmNyZWF0ZUJ1ZmZlcigpOworICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVS
LCBidWZmZXIpOworCisgICAgdmFyIHZlcnRpY2VzID0gWy0xLjAsIC0xLjAsCisgICAgICAgICAg
ICAgICAgICAgIDAuMCwgMC4wLAorICAgICAgICAgICAgICAgICAgICAtMS4wLCAxLjBdOworICAg
IHZhciBzZWVkWCA9IC0xLjA7CisgICAgdmFyIHNlZWRZID0gMS4wOworICAgIHZlcnRpY2VzCisg
ICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG5ldyBGbG9hdDMyQXJyYXkodmVydGlj
ZXMpLCBnbC5TVEFUSUNfRFJBVyk7CisKKworICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoMCwg
MiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eSgwKTsKKyAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUKTsKKyAgICBnbC5kcmF3QXJy
YXlzKGdsLlRSSUFOR0xFUywgMCwgMyk7CisgICAgZ2wuZmx1c2goKTsKKzwvc2NyaXB0PgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC90ZXN0cy9xZ3JhcGhpY3N3ZWJ2aWV3L3Jlc291cmNl
cy9wb2ludGluZ191cC5odG1sIGIvU291cmNlL1dlYktpdC9xdC90ZXN0cy9xZ3JhcGhpY3N3ZWJ2
aWV3L3Jlc291cmNlcy9wb2ludGluZ191cC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjQ3NGE1NmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L3Rl
c3RzL3FncmFwaGljc3dlYnZpZXcvcmVzb3VyY2VzL3BvaW50aW5nX3VwLmh0bWwKQEAgLTAsMCAr
MSw0NiBAQAorPGh0bWw+CisgIDxib2R5IHN0eWxlPSJtYXJnaW46IDAiPgorICAgIDxjYW52YXMg
d2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiPjwvY2FudmFzPgorICA8L2JvZHk+Cis8L2h0bWw+Cis8
c2NyaXB0PgorICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgi
Y2FudmFzIilbMF07CisgICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdl
YmdsIik7CisgICAgZ2wuY2xlYXJDb2xvcigwLjAsIDEuMCwgMC4wLCAxLjApOworICAgIGdsLnZp
ZXdwb3J0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7CisKKyAgICB2YXIgdmVy
dGV4U2hhZGVyID0gZ2wuY3JlYXRlU2hhZGVyKGdsLlZFUlRFWF9TSEFERVIpOworICAgIGdsLnNo
YWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsICJhdHRyaWJ1dGUgdmVjNCB2UG9zaXRpb247XG52b2lk
IG1haW4oKSB7IGdsX1Bvc2l0aW9uID0gdlBvc2l0aW9uOyB9Iik7CisgICAgZ2wuY29tcGlsZVNo
YWRlcih2ZXJ0ZXhTaGFkZXIpOworCisgICAgdmFyIGZyYWdtZW50U2hhZGVyID0gZ2wuY3JlYXRl
U2hhZGVyKGdsLkZSQUdNRU5UX1NIQURFUik7CisgICAgZ2wuc2hhZGVyU291cmNlKGZyYWdtZW50
U2hhZGVyLCAidm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCwgMC4wLCAwLjAs
IDEuMCk7IH0iKTsKKyAgICBnbC5jb21waWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTsKKworICAg
IHZhciBzaGFkZXJQcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpOworICAgIGdsLmF0dGFjaFNo
YWRlcihzaGFkZXJQcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpOworICAgIGdsLmF0dGFjaFNoYWRlcihz
aGFkZXJQcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7CisgICAgZ2wuYmluZEF0dHJpYkxvY2F0aW9u
KHNoYWRlclByb2dyYW0sIDAsICJ2UG9zaXRpb24iKTsKKyAgICBnbC5saW5rUHJvZ3JhbShzaGFk
ZXJQcm9ncmFtKTsKKworICAgIGdsLnVzZVByb2dyYW0oc2hhZGVyUHJvZ3JhbSk7CisKKyAgICB2
YXIgYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7CisgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJB
WV9CVUZGRVIsIGJ1ZmZlcik7CisKKyAgICB2YXIgdmVydGljZXMgPSBbLTEuMCwgLTEuMCwKKyAg
ICAgICAgICAgICAgICAgICAgMC4wLCAwLjAsCisgICAgICAgICAgICAgICAgICAgIDEuMCwgLTEu
MF07CisgICAgdmFyIHNlZWRYID0gLTEuMDsKKyAgICB2YXIgc2VlZFkgPSAxLjA7CisgICAgdmVy
dGljZXMKKyAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbmV3IEZsb2F0MzJBcnJh
eSh2ZXJ0aWNlcyksIGdsLlNUQVRJQ19EUkFXKTsKKworCisgICAgZ2wudmVydGV4QXR0cmliUG9p
bnRlcigwLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApOworICAgIGdsLmVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KDApOworICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpOworICAgIGds
LmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAwLCAzKTsKKyAgICBnbC5mbHVzaCgpOworICAgIGds
LmZpbmlzaCgpOworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L3Rlc3Rz
L3FncmFwaGljc3dlYnZpZXcvdHN0X3FncmFwaGljc3dlYnZpZXcuY3BwIGIvU291cmNlL1dlYktp
dC9xdC90ZXN0cy9xZ3JhcGhpY3N3ZWJ2aWV3L3RzdF9xZ3JhcGhpY3N3ZWJ2aWV3LmNwcAppbmRl
eCBlNjMwZmZmLi5hYjc4OTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3Fn
cmFwaGljc3dlYnZpZXcvdHN0X3FncmFwaGljc3dlYnZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvcXQvdGVzdHMvcWdyYXBoaWNzd2Vidmlldy90c3RfcWdyYXBoaWNzd2Vidmlldy5jcHAKQEAg
LTI1LDYgKzI1LDEwIEBACiAjaW5jbHVkZSA8cXdlYnBhZ2UuaD4KICNpbmNsdWRlIDxxd2ViZnJh
bWUuaD4KIAorI2lmIGRlZmluZWQoRU5BQkxFX1dFQkdMKSAmJiBFTkFCTEVfV0VCR0wKKyNpbmNs
dWRlIDxRR0xXaWRnZXQ+CisjZW5kaWYKKwogY2xhc3MgdHN0X1FHcmFwaGljc1dlYlZpZXcgOiBw
dWJsaWMgUU9iamVjdAogewogICAgIFFfT0JKRUNUCkBAIC0zOSw2ICs0MywxNCBAQCBwcml2YXRl
IHNsb3RzOgogICAgIHZvaWQgc2V0UGFsZXR0ZV9kYXRhKCk7CiAgICAgdm9pZCBzZXRQYWxldHRl
KCk7CiAgICAgdm9pZCByZW5kZXJIaW50cygpOworCisjaWYgZGVmaW5lZChFTkFCTEVfV0VCR0wp
ICYmIEVOQUJMRV9XRUJHTAorICAgIHZvaWQgd2ViZ2xTb2Z0d2FyZUZhbGxiYWNrVmVydGljYWxP
cmllbnRhdGlvbigpOworICAgIHZvaWQgd2ViZ2xTb2Z0d2FyZUZhbGxiYWNrSG9yaXpvbnRhbE9y
aWVudGF0aW9uKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBjb21wYXJlQ2FudmFzVG9JbWFnZShj
b25zdCBRVXJsJiwgY29uc3QgUUltYWdlJik7CisjZW5kaWYKIH07CiAKIHZvaWQgdHN0X1FHcmFw
aGljc1dlYlZpZXc6OnFncmFwaGljc3dlYnZpZXcoKQpAQCAtNDQ0LDYgKzQ1NiwxMTQgQEAgdm9p
ZCB0c3RfUUdyYXBoaWNzV2ViVmlldzo6cmVuZGVySGludHMoKQogICAgIFFWRVJJRlkoISh3ZWJW
aWV3LnJlbmRlckhpbnRzKCkgJiBRUGFpbnRlcjo6SGlnaFF1YWxpdHlBbnRpYWxpYXNpbmcpKTsK
IH0KIAorY2xhc3MgR3JhcGhpY3NWaWV3IDogcHVibGljIFFHcmFwaGljc1ZpZXcgeworcHVibGlj
OgorICAgIEdyYXBoaWNzVmlldygpOworICAgIFFHcmFwaGljc1dlYlZpZXcqIG1fd2ViVmlldzsK
K307CisKKyNpZiBkZWZpbmVkKEVOQUJMRV9XRUJHTCkgJiYgRU5BQkxFX1dFQkdMCitib29sIGNv
bXBhcmVJbWFnZXNGdXp6eVBpeGVsQ291bnQoY29uc3QgUUltYWdlJiBpbWFnZTEsIGNvbnN0IFFJ
bWFnZSYgaW1hZ2UyLCBxcmVhbCB0b2xlcmFuY2UgPSAwLjA1KQoreworICAgIGlmIChpbWFnZTEu
c2l6ZSgpICE9IGltYWdlMi5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVu
c2lnbmVkIGRpZmZQaXhlbENvdW50ID0gMDsKKyAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBp
bWFnZTEuc2l6ZSgpLndpZHRoKCk7ICsrcm93KSB7CisgICAgICAgIGZvciAoaW50IGNvbHVtbiA9
IDA7IGNvbHVtbiA8IGltYWdlMS5zaXplKCkuaGVpZ2h0KCk7ICsrY29sdW1uKQorICAgICAgICAg
ICAgaWYgKGltYWdlMS5waXhlbChyb3csIGNvbHVtbikgIT0gaW1hZ2UyLnBpeGVsKHJvdywgY29s
dW1uKSkKKyAgICAgICAgICAgICAgICArK2RpZmZQaXhlbENvdW50OworICAgIH0KKworICAgIGlm
IChkaWZmUGl4ZWxDb3VudCA+IChpbWFnZTEuc2l6ZSgpLndpZHRoKCkgKiBpbWFnZTEuc2l6ZSgp
LmhlaWdodCgpKSAqIHRvbGVyYW5jZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK0dyYXBoaWNzVmlldzo6R3JhcGhpY3NWaWV3KCkKK3sKKyAgICBRR3Jh
cGhpY3NTY2VuZSogY29uc3Qgc2NlbmUgPSBuZXcgUUdyYXBoaWNzU2NlbmUodGhpcyk7CisgICAg
c2V0U2NlbmUoc2NlbmUpOworCisgICAgbV93ZWJWaWV3ID0gbmV3IFFHcmFwaGljc1dlYlZpZXc7
CisgICAgc2NlbmUtPmFkZEl0ZW0obV93ZWJWaWV3KTsKKworICAgIG1fd2ViVmlldy0+cGFnZSgp
LT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpXZWJHTEVuYWJsZWQsIHRy
dWUpOworICAgIG1fd2ViVmlldy0+c2V0UmVzaXplc1RvQ29udGVudHModHJ1ZSk7CisKKyAgICBz
ZXRGcmFtZVNoYXBlKFFGcmFtZTo6Tm9GcmFtZSk7CisgICAgc2V0Vmlld3BvcnQobmV3IFFHTFdp
ZGdldCk7Cit9CisKK3ZvaWQgdHN0X1FHcmFwaGljc1dlYlZpZXc6OndlYmdsU29mdHdhcmVGYWxs
YmFja1ZlcnRpY2FsT3JpZW50YXRpb24oKQoreworICAgIFFTaXplIGNhbnZhc1NpemUoMTAwLCAx
MDApOworICAgIFFJbWFnZSByZWZlcmVuY2UoY2FudmFzU2l6ZSwgUUltYWdlOjpGb3JtYXRfQVJH
QjMyKTsKKyAgICByZWZlcmVuY2UuZmlsbCgweEZGMDBGRjAwKTsKKyAgICB7IC8vIFJlZmVyZW5j
ZS4KKyAgICAgICAgUVBhaW50ZXIgcGFpbnRlcigmcmVmZXJlbmNlKTsKKyAgICAgICAgUVBvbHln
b25GIHRyaWFuZ2xlVXA7CisgICAgICAgIHRyaWFuZ2xlVXAgPDwgUVBvaW50RigwLCBjYW52YXNT
aXplLmhlaWdodCgpKQorICAgICAgICAgICAgICAgICAgIDw8IFFQb2ludEYoY2FudmFzU2l6ZS53
aWR0aCgpLCBjYW52YXNTaXplLmhlaWdodCgpKQorICAgICAgICAgICAgICAgICAgIDw8IFFQb2lu
dEYoY2FudmFzU2l6ZS53aWR0aCgpIC8gMi4wLCBjYW52YXNTaXplLmhlaWdodCgpIC8gMi4wKTsK
KyAgICAgICAgcGFpbnRlci5zZXRQZW4oUXQ6Ok5vUGVuKTsKKyAgICAgICAgcGFpbnRlci5zZXRC
cnVzaChRdDo6cmVkKTsKKyAgICAgICAgcGFpbnRlci5kcmF3UG9seWdvbih0cmlhbmdsZVVwKTsK
KyAgICB9CisKKyAgICBjb21wYXJlQ2FudmFzVG9JbWFnZShRVXJsKFFMYXRpbjFTdHJpbmcoInFy
YzovLy9yZXNvdXJjZXMvcG9pbnRpbmdfdXAuaHRtbCIpKSwgcmVmZXJlbmNlKTsKK30KKwordm9p
ZCB0c3RfUUdyYXBoaWNzV2ViVmlldzo6d2ViZ2xTb2Z0d2FyZUZhbGxiYWNrSG9yaXpvbnRhbE9y
aWVudGF0aW9uKCkKK3sKKyAgICBRU2l6ZSBjYW52YXNTaXplKDEwMCwgMTAwKTsKKyAgICBRSW1h
Z2UgcmVmZXJlbmNlKGNhbnZhc1NpemUsIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMik7CisgICAgcmVm
ZXJlbmNlLmZpbGwoMHhGRjAwRkYwMCk7CisgICAgeyAvLyBSZWZlcmVuY2UuCisgICAgICAgIFFQ
YWludGVyIHBhaW50ZXIoJnJlZmVyZW5jZSk7CisgICAgICAgIFFQb2x5Z29uRiB0cmlhbmdsZVVw
OworICAgICAgICB0cmlhbmdsZVVwIDw8IFFQb2ludEYoMCwgMCkKKyAgICAgICAgICAgICAgICAg
ICA8PCBRUG9pbnRGKDAsIGNhbnZhc1NpemUuaGVpZ2h0KCkpCisgICAgICAgICAgICAgICAgICAg
PDwgUVBvaW50RihjYW52YXNTaXplLndpZHRoKCkgLyAyLjAsIGNhbnZhc1NpemUuaGVpZ2h0KCkg
LyAyLjApOworICAgICAgICBwYWludGVyLnNldFBlbihRdDo6Tm9QZW4pOworICAgICAgICBwYWlu
dGVyLnNldEJydXNoKFF0OjpyZWQpOworICAgICAgICBwYWludGVyLmRyYXdQb2x5Z29uKHRyaWFu
Z2xlVXApOworICAgIH0KKworICAgIGNvbXBhcmVDYW52YXNUb0ltYWdlKFFVcmwoUUxhdGluMVN0
cmluZygicXJjOi8vL3Jlc291cmNlcy9wb2ludGluZ19yaWdodC5odG1sIikpLCByZWZlcmVuY2Up
OworfQorCit2b2lkIHRzdF9RR3JhcGhpY3NXZWJWaWV3Ojpjb21wYXJlQ2FudmFzVG9JbWFnZShj
b25zdCBRVXJsJiB1cmwsIGNvbnN0IFFJbWFnZSYgcmVmZXJlbmNlKQoreworICAgIEdyYXBoaWNz
VmlldyB2aWV3OworICAgIHZpZXcuc2hvdygpOworICAgIFFUZXN0OjpxV2FpdEZvcldpbmRvd1No
b3duKCZ2aWV3KTsKKworICAgIFFHcmFwaGljc1dlYlZpZXcqIGNvbnN0IGdyYXBoaWNzV2ViVmll
dyA9IHZpZXcubV93ZWJWaWV3OworICAgIGdyYXBoaWNzV2ViVmlldy0+bG9hZCh1cmwpOworICAg
IFFWRVJJRlkod2FpdEZvclNpZ25hbChncmFwaGljc1dlYlZpZXcsIFNJR05BTChsb2FkRmluaXNo
ZWQoYm9vbCkpKSk7CisgICAgeyAvLyBGb3JjZSBhIHJlbmRlciwgdG8gY3JlYXRlIHRoZSBhY2Nl
bGVyYXRlZCBjb21wb3NpdGluZyB0cmVlLgorICAgICAgICBRUGl4bWFwIHBpeG1hcCh2aWV3LnNp
emUoKSk7CisgICAgICAgIFFQYWludGVyIHBhaW50ZXIoJnBpeG1hcCk7CisgICAgICAgIHZpZXcu
cmVuZGVyKCZwYWludGVyKTsKKyAgICB9CisgICAgUUFwcGxpY2F0aW9uOjpzeW5jWCgpOworCisg
ICAgY29uc3QgUVNpemUgaW1hZ2VTaXplID0gcmVmZXJlbmNlLnNpemUoKTsKKworICAgIFFJbWFn
ZSB0YXJnZXQoaW1hZ2VTaXplLCBRSW1hZ2U6OkZvcm1hdF9BUkdCMzIpOworICAgIHsgLy8gV2Vi
IHBhZ2UgY29udGVudC4KKyAgICAgICAgUVBhaW50ZXIgcGFpbnRlcigmdGFyZ2V0KTsKKyAgICAg
ICAgUVJlY3RGIHJlbmRlclJlY3QoMCwgMCwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5o
ZWlnaHQoKSk7CisgICAgICAgIHZpZXcuc2NlbmUoKS0+cmVuZGVyKCZwYWludGVyLCByZW5kZXJS
ZWN0LCByZW5kZXJSZWN0KTsKKyAgICB9CisgICAgdGFyZ2V0LnNhdmUoInRhcmdldC5wbmciKTsK
KyAgICByZWZlcmVuY2Uuc2F2ZSgicmVmZXJlbmNlLnBuZyIpOworICAgIFFWRVJJRlkoY29tcGFy
ZUltYWdlc0Z1enp5UGl4ZWxDb3VudCh0YXJnZXQsIHJlZmVyZW5jZSwgMC4wMSkpOworfQorI2Vu
ZGlmCisKIFFURVNUX01BSU4odHN0X1FHcmFwaGljc1dlYlZpZXcpCiAKICNpbmNsdWRlICJ0c3Rf
cWdyYXBoaWNzd2Vidmlldy5tb2MiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L3Rlc3Rz
L3FncmFwaGljc3dlYnZpZXcvdHN0X3FncmFwaGljc3dlYnZpZXcucXJjIGIvU291cmNlL1dlYktp
dC9xdC90ZXN0cy9xZ3JhcGhpY3N3ZWJ2aWV3L3RzdF9xZ3JhcGhpY3N3ZWJ2aWV3LnFyYwppbmRl
eCBjOTFiYjljLi4xNDg4ZmNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3Fn
cmFwaGljc3dlYnZpZXcvdHN0X3FncmFwaGljc3dlYnZpZXcucXJjCisrKyBiL1NvdXJjZS9XZWJL
aXQvcXQvdGVzdHMvcWdyYXBoaWNzd2Vidmlldy90c3RfcWdyYXBoaWNzd2Vidmlldy5xcmMKQEAg
LTEsNiArMSw3IEBACi08IURPQ1RZUEUgUkNDPjxSQ0MgdmVyc2lvbj0iMS4wIj4KLTxxcmVzb3Vy
Y2U+Ci0gICAgPGZpbGU+cmVzb3VyY2VzL2lucHV0X3R5cGVzLmh0bWw8L2ZpbGU+Ci08L3FyZXNv
dXJjZT4KKzxSQ0M+CisgICAgPHFyZXNvdXJjZSBwcmVmaXg9Ii8iPgorICAgICAgICA8ZmlsZT5y
ZXNvdXJjZXMvaW5wdXRfdHlwZXMuaHRtbDwvZmlsZT4KKyAgICAgICAgPGZpbGU+cmVzb3VyY2Vz
L3BvaW50aW5nX3JpZ2h0Lmh0bWw8L2ZpbGU+CisgICAgICAgIDxmaWxlPnJlc291cmNlcy9wb2lu
dGluZ191cC5odG1sPC9maWxlPgorICAgIDwvcXJlc291cmNlPgogPC9SQ0M+Ci0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvdGVzdHMucHJvIGIvU291cmNlL1dlYktpdC9xdC90
ZXN0cy90ZXN0cy5wcm8KaW5kZXggZTViNzQwOC4uNTI5ZmEwNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9xdC90ZXN0cy90ZXN0cy5wcm8KKysrIGIvU291cmNlL1dlYktpdC9xdC90ZXN0cy90
ZXN0cy5wcm8KQEAgLTMsMyArMyw2IEBAIFRFTVBMQVRFID0gc3ViZGlycwogU1VCRElSUyA9IHF3
ZWJmcmFtZSBxd2VicGFnZSBxd2ViZWxlbWVudCBxZ3JhcGhpY3N3ZWJ2aWV3IHF3ZWJoaXN0b3J5
aW50ZXJmYWNlIHF3ZWJ2aWV3IHF3ZWJoaXN0b3J5IHF3ZWJpbnNwZWN0b3IgaHlicmlkUGl4bWFw
CiBjb250YWlucyhRVF9DT05GSUcsIGRlY2xhcmF0aXZlKTogU1VCRElSUyArPSBxZGVjbGFyYXRp
dmV3ZWJ2aWV3CiBTVUJESVJTICs9IGJlbmNobWFya3MvcGFpbnRpbmcgYmVuY2htYXJrcy9sb2Fk
aW5nCitjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgeworICAgIFNVQkRJUlMgKz0g
YmVuY2htYXJrcy93ZWJnbAorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86801</attachid>
            <date>2011-03-24 11:20:00 -0700</date>
            <delta_ts>2011-03-24 12:35:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>40884.diff</filename>
            <type>text/plain</type>
            <size>23263</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkMDAzNTBjLi45YWI1MjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcg
QEAKKzIwMTEtMDMtMjQgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbi5wb3VsYWluQG5va2lh
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
UXRdIFdoZW4gd2UgcmVuZGVyIFdlYkdMIG9mZnNjcmVlbiwgY29sb3IgY29udmVyc2lvbiBjb3N0
IGEgbG90IG9mIENQVSBjeWNsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQwODg0CisKKyAgICAgICAgVGhlIHNvZnR3YXJlIGZhbGxiYWNrIGlzIG5v
dyBvbmx5IG5lZWRlZCBmb3IgY29ybmVyIGNhc2VzIGxpa2UgYSBtYW51YWwgcmVuZGVyaW5nCisg
ICAgICAgIG9mIHRoZSBwYWdlIHRvIFFJbWFnZS4KKworICAgICAgICBLZWVwaW5nIHRoZSBpbWFn
ZSB3aXRoIHRoZSBsYXN0IHBpeGVsIHZhbHVlcyBpcyBubyBsb25nZXIgbmVlZGVkLiBSZW1vdmlu
ZyBpdCByZWR1Y2UgdGhlCisgICAgICAgIHBlcmZvcm1hbmNlIGZvciByZWFsLXRpbWUgcmVuZGVy
aW5nIG9uIHNvZnR3YXJlIHN1cmZhY2UsIGJ1dCB0aGlzIGNhc2Ugc2hvdWxkIG5vIGxvbmdlciBi
ZQorICAgICAgICBzdXBwb3J0ZWQuCisKKyAgICAgICAgVGhlIGNvbnZlcnNpb24gZnJvbSBPcGVu
R0wgY29sb3Igc3BhY2UgYW5kIGNvb3JkaW5hdGVzIGlzIGRvbmUgbWFudWFsbHkgZm9yIHBlcmZv
cm1hbmNlLiBUaGlzCisgICAgICAgIGFsc28gZml4IHRoZSBidWcgb2YgdGhlIGludmVydGVkIFgg
YXhpcyBkdWUgdG8gdGhlIHRyYW5zZm9ybWF0aW9uLgorCisgICAgICAgIFRoZSB0ZXN0cyBhbmQg
YmVuY2htYXJrcyBhcmUgZG9uZSB0aHJvdWdoIFF0IEFQSSB0ZXN0cy4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6c3dhcEJnclRvUmdiKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpy
ZXNoYXBlKToKKwogMjAxMS0wMy0yMyAgQW5kcmV5IEFkYWlraW4gIDxhYW5kcmV5QGdvb2dsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0
M0RRdC5jcHAKaW5kZXggMDgxNzllMS4uMTYxNTM5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAK
QEAgLTI2Myw3ICsyNjMsNiBAQCBwdWJsaWM6CiAgICAgR0x1aW50IG1fbWFpbkZibzsKICAgICBH
THVpbnQgbV9jdXJyZW50RmJvOwogICAgIEdMdWludCBtX2RlcHRoQnVmZmVyOwotICAgIFFJbWFn
ZSBtX3BpeGVsczsKICAgICBib29sIG1fbGF5ZXJDb21wb3NpdGVkOwogICAgIExpc3RIYXNoU2V0
PHVuc2lnbmVkIGludD4gbV9zeW50aGV0aWNFcnJvcnM7CiAKQEAgLTQ4MSw2ICs0ODAsMTEgQEAg
UUdMV2lkZ2V0KiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRWaWV3cG9ydEdMV2lkZ2V0
KCkKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBxdWludDMyIHN3YXBCZ3JUb1Jn
YihxdWludDMyIHBpeGVsKQoreworICAgIHJldHVybiAoKHBpeGVsIDw8IDE2KSAmIDB4ZmYwMDAw
KSB8ICgocGl4ZWwgPj4gMTYpICYgMHhmZikgfCAocGl4ZWwgJiAweGZmMDBmZjAwKTsKK30KKwog
dm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwYWludChRUGFpbnRlciogcGFpbnRlciwg
Y29uc3QgUVN0eWxlT3B0aW9uR3JhcGhpY3NJdGVtKiBvcHRpb24sIFFXaWRnZXQqIHdpZGdldCkK
IHsKICAgICBRX1VOVVNFRCh3aWRnZXQpOwpAQCAtNDk2LDExICs1MDAsMzkgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQzREludGVybmFsOjpwYWludChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVN0
eWxlT3B0aW9uR3JhcGgKICAgICB9CiAKICAgICAvLyBBbHRlcm5hdGl2ZWx5IHJlYWQgcGl4ZWxz
IHRvIGEgbWVtb3J5IGJ1ZmZlci4KKyAgICBRSW1hZ2Ugb2Zmc2NyZWVuSW1hZ2UocmVjdC53aWR0
aCgpLCByZWN0LmhlaWdodCgpLCBRSW1hZ2U6OkZvcm1hdF9BUkdCMzIpOworICAgIHF1aW50MzIq
IGltYWdlUGl4ZWxzID0gcmVpbnRlcnByZXRfY2FzdDxxdWludDMyKj4ob2Zmc2NyZWVuSW1hZ2Uu
Yml0cygpKTsKKwogICAgIG1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgYmluZEZyYW1l
YnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tYWluRmJvKTsKLSAgICBn
bFJlYWRQaXhlbHMoLyogeCAqLyAwLCAvKiB5ICovIDAsIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWln
aHQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFLCBtX3BpeGVscy5iaXRzKCkpOwotICAgIHBhaW50ZXItPmRyYXdJbWFnZSgvKiB4ICov
IDAsIC8qIHkgKi8gMCwgbV9waXhlbHMucmdiU3dhcHBlZCgpLnRyYW5zZm9ybWVkKFFNYXRyaXgo
KS5yb3RhdGUoMTgwKSkpOworICAgIGdsUmVhZFBpeGVscygvKiB4ICovIDAsIC8qIHkgKi8gMCwg
cmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGltYWdlUGl4ZWxzKTsKKwogICAgIGJpbmRG
cmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fY3VycmVudEZibyk7
CisKKyAgICAvLyBPcGVuR0wgZ2l2ZXMgdXMgQUJHUiBvbiAzMiBiaXRzLCBhbmQgd2l0aCB0aGUg
b3JpZ2luIGF0IHRoZSBib3R0b20gbGVmdAorICAgIC8vIFdlIG5lZWQgUkdCMzIgb3IgQVJHQjMy
X1BNLCB3aXRoIHRoZSBvcmlnaW4gYXQgdGhlIHRvcCBsZWZ0LgorICAgIHF1aW50MzIqIHBpeGVs
c1NyYyA9IGltYWdlUGl4ZWxzOworICAgIGNvbnN0IGludCBoZWlnaHQgPSBzdGF0aWNfY2FzdDxp
bnQ+KHJlY3QuaGVpZ2h0KCkpOworICAgIGNvbnN0IGludCB3aWR0aCA9IHN0YXRpY19jYXN0PGlu
dD4ocmVjdC53aWR0aCgpKTsKKyAgICBjb25zdCBpbnQgaGFsZkhlaWdodCA9IGhlaWdodCAvIDI7
CisgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgaGFsZkhlaWdodDsgKytyb3cpIHsKKyAgICAg
ICAgY29uc3QgaW50IHRhcmdldElkeCA9IChoZWlnaHQgLSAxIC0gcm93KSAqIHdpZHRoOworICAg
ICAgICBxdWludDMyKiBwaXhlbHNEc3QgPSBpbWFnZVBpeGVscyArIHRhcmdldElkeDsKKyAgICAg
ICAgZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwgd2lkdGg7ICsrY29sdW1uKSB7CisgICAg
ICAgICAgICBxdWludDMyIHRlbXBQaXhlbCA9ICpwaXhlbHNTcmM7CisgICAgICAgICAgICAqcGl4
ZWxzU3JjID0gc3dhcEJnclRvUmdiKCpwaXhlbHNEc3QpOworICAgICAgICAgICAgKnBpeGVsc0Rz
dCA9IHN3YXBCZ3JUb1JnYih0ZW1wUGl4ZWwpOworICAgICAgICAgICAgKytwaXhlbHNTcmM7Cisg
ICAgICAgICAgICArK3BpeGVsc0RzdDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoc3RhdGlj
X2Nhc3Q8aW50PihoZWlnaHQpICUgMikgeworICAgICAgICBmb3IgKGludCBjb2x1bW4gPSAwOyBj
b2x1bW4gPCB3aWR0aDsgKytjb2x1bW4pIHsKKyAgICAgICAgICAgICpwaXhlbHNTcmMgPSBzd2Fw
QmdyVG9SZ2IoKnBpeGVsc1NyYyk7CisgICAgICAgICAgICArK3BpeGVsc1NyYzsKKyAgICAgICAg
fQorICAgIH0KKyAgICBwYWludGVyLT5kcmF3SW1hZ2UoLyogeCAqLyAwLCAvKiB5ICovIDAsIG9m
ZnNjcmVlbkltYWdlKTsKIH0KIAogUVJlY3RGIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJv
dW5kaW5nUmVjdCgpIGNvbnN0CkBAIC01OTAsNyArNjIyLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgbV9jdXJyZW50SGVpZ2h0
ID0gaGVpZ2h0OwogCiAgICAgbV9pbnRlcm5hbC0+bV9ib3VuZGluZ1JlY3QgPSBRUmVjdEYoUVBv
aW50RigwLCAwKSwgUVNpemVGKHdpZHRoLCBoZWlnaHQpKTsKLSAgICBtX2ludGVybmFsLT5tX3Bp
eGVscyA9IFFJbWFnZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBRSW1hZ2U6OkZv
cm1hdF9BUkdCMzIpOwogCiAgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQo
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L3F0L0NoYW5nZUxvZwppbmRleCBjMjY3NGM0Li5kMGY3OWU2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwpA
QCAtMSwzICsxLDM3IEBACisyMDExLTAzLTI0ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW4u
cG91bGFpbkBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgW1F0XSBXaGVuIHdlIHJlbmRlciBXZWJHTCBvZmZzY3JlZW4sIGNvbG9yIGNv
bnZlcnNpb24gY29zdCBhIGxvdCBvZiBDUFUgY3ljbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDg4NAorCisgICAgICAgIEFkZCB0ZXN0cyBhbmQg
YmVuY2htYXJrcyBmb3IgdGhlIHNvZnR3YXJlIGZhbGxiYWNrIG9mIFdlYkdMLgorCisgICAgICAg
ICogdGVzdHMvYmVuY2htYXJrcy93ZWJnbC8xMDAwMF90cmlhbmdsZXMuaHRtbDogQWRkZWQuCisg
ICAgICAgICogdGVzdHMvYmVuY2htYXJrcy93ZWJnbC90c3Rfd2ViZ2wuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEdyYXBoaWNzVmlldzo6R3JhcGhpY3NWaWV3KToKKyAgICAgICAgKEdyYXBoaWNzVmll
dzo6cmVzaXplRXZlbnQpOgorICAgICAgICAodHN0X1dlYkdsUGVyZm9ybWFuY2U6OmluaXQpOgor
ICAgICAgICAodHN0X1dlYkdsUGVyZm9ybWFuY2U6OmNsZWFudXApOgorICAgICAgICAodHN0X1dl
YkdsUGVyZm9ybWFuY2U6OmJlbmNoU29mdHdhcmVGYWxsYmFja1JnYjE2KToKKyAgICAgICAgKHRz
dF9XZWJHbFBlcmZvcm1hbmNlOjpiZW5jaFNvZnR3YXJlRmFsbGJhY2tSZ2IzMik6CisgICAgICAg
ICh0c3RfV2ViR2xQZXJmb3JtYW5jZTo6YmVuY2hTb2Z0d2FyZUZhbGxiYWNrQXJnYjMyKToKKyAg
ICAgICAgKHRzdF9XZWJHbFBlcmZvcm1hbmNlOjpiZW5jaFNvZnR3YXJlRmFsbGJhY2tBcmdiMzJQ
cmVtdWx0aXBsaWVkKToKKyAgICAgICAgKHRzdF9XZWJHbFBlcmZvcm1hbmNlOjpiZW5jaG1hcmtG
cmFtZVJlbmRlcmluZ09uSW1hZ2UpOgorICAgICAgICAqIHRlc3RzL2JlbmNobWFya3Mvd2ViZ2wv
dHN0X3dlYmdsLnFyYzogQWRkZWQuCisgICAgICAgICogdGVzdHMvYmVuY2htYXJrcy93ZWJnbC93
ZWJnbC5wcm86IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3FncmFwaGljc3dlYnZpZXcvcWdyYXBo
aWNzd2Vidmlldy5wcm86CisgICAgICAgICogdGVzdHMvcWdyYXBoaWNzd2Vidmlldy9yZXNvdXJj
ZXMvcG9pbnRpbmdfcmlnaHQuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMvcWdyYXBoaWNz
d2Vidmlldy9yZXNvdXJjZXMvcG9pbnRpbmdfdXAuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVz
dHMvcWdyYXBoaWNzd2Vidmlldy90c3RfcWdyYXBoaWNzd2Vidmlldy5jcHA6CisgICAgICAgIChj
b21wYXJlSW1hZ2VzRnV6enlQaXhlbENvdW50KToKKyAgICAgICAgKEdyYXBoaWNzVmlldzo6R3Jh
cGhpY3NWaWV3KToKKyAgICAgICAgKHRzdF9RR3JhcGhpY3NXZWJWaWV3Ojp3ZWJnbFNvZnR3YXJl
RmFsbGJhY2tWZXJ0aWNhbE9yaWVudGF0aW9uKToKKyAgICAgICAgKHRzdF9RR3JhcGhpY3NXZWJW
aWV3Ojp3ZWJnbFNvZnR3YXJlRmFsbGJhY2tIb3Jpem9udGFsT3JpZW50YXRpb24pOgorICAgICAg
ICAodHN0X1FHcmFwaGljc1dlYlZpZXc6OmNvbXBhcmVDYW52YXNUb0ltYWdlKToKKyAgICAgICAg
KiB0ZXN0cy9xZ3JhcGhpY3N3ZWJ2aWV3L3RzdF9xZ3JhcGhpY3N3ZWJ2aWV3LnFyYzoKKyAgICAg
ICAgKiB0ZXN0cy90ZXN0cy5wcm86CisKIDIwMTEtMDMtMjIgIEFuZHJldyBXYXNvbiAgPHJlY3Rh
bG9naWNAcmVjdGFsb2dpYy5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQmVuamFtaW4gUG91
bGFpbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvYmVuY2htYXJrcy93ZWJn
bC8xMDAwMF90cmlhbmdsZXMuaHRtbCBiL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvYmVuY2htYXJr
cy93ZWJnbC8xMDAwMF90cmlhbmdsZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5mZDA2MWFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC90ZXN0
cy9iZW5jaG1hcmtzL3dlYmdsLzEwMDAwX3RyaWFuZ2xlcy5odG1sCkBAIC0wLDAgKzEsNTkgQEAK
KzxodG1sPgorICA8Ym9keSBzdHlsZT0ibWFyZ2luOiAwIj4KKyAgICA8Y2FudmFzIHdpZHRoPSIx
MDAwIiBoZWlnaHQ9IjEwMDAiPjwvY2FudmFzPgorICA8L2JvZHk+Cis8L2h0bWw+Cis8c2NyaXB0
PgorICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiY2FudmFz
IilbMF07CisgICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIik7
CisgICAgZ2wuY2xlYXJDb2xvcigwLjAsIDEuMCwgMC4wLCAxLjApOworICAgIGdsLnZpZXdwb3J0
KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7CisKKyAgICB2YXIgdmVydGV4U2hh
ZGVyID0gZ2wuY3JlYXRlU2hhZGVyKGdsLlZFUlRFWF9TSEFERVIpOworICAgIGdsLnNoYWRlclNv
dXJjZSh2ZXJ0ZXhTaGFkZXIsICJhdHRyaWJ1dGUgdmVjNCB2UG9zaXRpb247XG52b2lkIG1haW4o
KSB7IGdsX1Bvc2l0aW9uID0gdlBvc2l0aW9uOyB9Iik7CisgICAgZ2wuY29tcGlsZVNoYWRlcih2
ZXJ0ZXhTaGFkZXIpOworCisgICAgdmFyIGZyYWdtZW50U2hhZGVyID0gZ2wuY3JlYXRlU2hhZGVy
KGdsLkZSQUdNRU5UX1NIQURFUik7CisgICAgZ2wuc2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVy
LCAidm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCwgMC4wLCAwLjAsIDEuMCk7
IH0iKTsKKyAgICBnbC5jb21waWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTsKKworICAgIHZhciBz
aGFkZXJQcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpOworICAgIGdsLmF0dGFjaFNoYWRlcihz
aGFkZXJQcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpOworICAgIGdsLmF0dGFjaFNoYWRlcihzaGFkZXJQ
cm9ncmFtLCBmcmFnbWVudFNoYWRlcik7CisgICAgZ2wuYmluZEF0dHJpYkxvY2F0aW9uKHNoYWRl
clByb2dyYW0sIDAsICJ2UG9zaXRpb24iKTsKKyAgICBnbC5saW5rUHJvZ3JhbShzaGFkZXJQcm9n
cmFtKTsKKworICAgIGdsLnVzZVByb2dyYW0oc2hhZGVyUHJvZ3JhbSk7CisKKyAgICB2YXIgYnVm
ZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7CisgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZG
RVIsIGJ1ZmZlcik7CisKKyAgICB2YXIgdmVydGljZXMgPSBbXTsKKyAgICB2YXIgc2VlZFggPSAt
MS4wOworICAgIHZhciBzZWVkWSA9IDEuMDsKKyAgICBmb3IgKHZhciBpID0gMTsgaSA8PSAxMDAw
MDsgKytpKSB7CisgICAgICAgIHZlcnRpY2VzLnB1c2goc2VlZFgpOworICAgICAgICB2ZXJ0aWNl
cy5wdXNoKHNlZWRZKTsKKyAgICAgICAgdmVydGljZXMucHVzaCgwKTsKKyAgICAgICAgc2VlZFgg
Kz0gMC4wMTsKKyAgICAgICAgdmVydGljZXMucHVzaChzZWVkWCk7CisgICAgICAgIHZlcnRpY2Vz
LnB1c2goc2VlZFkgLSAwLjAyKTsKKyAgICAgICAgdmVydGljZXMucHVzaCgwKTsKKyAgICAgICAg
c2VlZFggKz0gMC4wMTsKKyAgICAgICAgdmVydGljZXMucHVzaChzZWVkWCk7CisgICAgICAgIHZl
cnRpY2VzLnB1c2goc2VlZFkpOworICAgICAgICB2ZXJ0aWNlcy5wdXNoKDApOworICAgICAgICBp
ZiAoIShpICUgMTAwKSkgeworICAgICAgICAgICAgc2VlZFggPSAtMS4wOworICAgICAgICAgICAg
c2VlZFkgLT0gMC4wMjsKKyAgICAgICAgfQorICAgIH0KKyAgICBnbC5idWZmZXJEYXRhKGdsLkFS
UkFZX0JVRkZFUiwgbmV3IEZsb2F0MzJBcnJheSh2ZXJ0aWNlcyksIGdsLlNUQVRJQ19EUkFXKTsK
KworCisgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcigwLCAzLCBnbC5GTE9BVCwgZmFsc2UsIDAs
IDApOworICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApOworICAgIGdsLmNsZWFyKGds
LkNPTE9SX0JVRkZFUl9CSVQpOworICAgIGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAwLCAz
MDAwMCk7CisgICAgZ2wuZmx1c2goKTsKKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9xdC90ZXN0cy9iZW5jaG1hcmtzL3dlYmdsL3RzdF93ZWJnbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L3F0L3Rlc3RzL2JlbmNobWFya3Mvd2ViZ2wvdHN0X3dlYmdsLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDg2NWEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9xdC90ZXN0cy9iZW5jaG1hcmtzL3dlYmdsL3RzdF93ZWJnbC5jcHAKQEAgLTAsMCAr
MSwxMzAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKworI2luY2x1ZGUgIi4uLy4uL3V0aWwuaCIK
KyNpbmNsdWRlIDxRR0xXaWRnZXQ+CisjaW5jbHVkZSA8UUdyYXBoaWNzVmlldz4KKyNpbmNsdWRl
IDxRR3JhcGhpY3NXZWJWaWV3PgorI2luY2x1ZGUgPFFTY29wZWRQb2ludGVyPgorI2luY2x1ZGUg
PFFXZWJGcmFtZT4KKyNpbmNsdWRlIDxRdFRlc3QvUXRUZXN0PgorCitjbGFzcyBHcmFwaGljc1Zp
ZXc7CisKK2NsYXNzIHRzdF9XZWJHbFBlcmZvcm1hbmNlIDogcHVibGljIFFPYmplY3QgeworICAg
IFFfT0JKRUNUCisKK3ByaXZhdGUgc2xvdHM6CisgICAgdm9pZCBpbml0KCk7CisgICAgdm9pZCBj
bGVhbnVwKCk7CisKKyAgICB2b2lkIGJlbmNoU29mdHdhcmVGYWxsYmFja1JnYjE2KCk7CisgICAg
dm9pZCBiZW5jaFNvZnR3YXJlRmFsbGJhY2tSZ2IzMigpOworICAgIHZvaWQgYmVuY2hTb2Z0d2Fy
ZUZhbGxiYWNrQXJnYjMyKCk7CisgICAgdm9pZCBiZW5jaFNvZnR3YXJlRmFsbGJhY2tBcmdiMzJQ
cmVtdWx0aXBsaWVkKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBiZW5jaG1hcmtGcmFtZVJlbmRl
cmluZ09uSW1hZ2UoUUltYWdlOjpGb3JtYXQpOworCisgICAgUVNjb3BlZFBvaW50ZXI8R3JhcGhp
Y3NWaWV3PiBtX3ZpZXc7Cit9OworCitjbGFzcyBHcmFwaGljc1ZpZXcgOiBwdWJsaWMgUUdyYXBo
aWNzVmlldyB7CitwdWJsaWM6CisgICAgR3JhcGhpY3NWaWV3KCk7CisgICAgUUdyYXBoaWNzV2Vi
VmlldyogbV93ZWJWaWV3OworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCByZXNpemVFdmVudChRUmVz
aXplRXZlbnQqKTsKK307CisKK0dyYXBoaWNzVmlldzo6R3JhcGhpY3NWaWV3KCkKK3sKKyAgICBR
R3JhcGhpY3NTY2VuZSogY29uc3Qgc2NlbmUgPSBuZXcgUUdyYXBoaWNzU2NlbmUodGhpcyk7Cisg
ICAgc2V0U2NlbmUoc2NlbmUpOworCisgICAgbV93ZWJWaWV3ID0gbmV3IFFHcmFwaGljc1dlYlZp
ZXc7CisgICAgc2NlbmUtPmFkZEl0ZW0obV93ZWJWaWV3KTsKKworICAgIG1fd2ViVmlldy0+cGFn
ZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpXZWJHTEVuYWJsZWQs
IHRydWUpOworCisgICAgcmVzaXplKDgwMCwgNjAwKTsKKyAgICBzZXRGcmFtZVNoYXBlKFFGcmFt
ZTo6Tm9GcmFtZSk7CisgICAgc2V0Vmlld3BvcnQobmV3IFFHTFdpZGdldCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NWaWV3OjpyZXNpemVFdmVudChRUmVzaXplRXZlbnQqIGV2ZW50KQoreworICAgIFFH
cmFwaGljc1ZpZXc6OnJlc2l6ZUV2ZW50KGV2ZW50KTsKKyAgICBRUmVjdEYgcmVjdChRUG9pbnQo
MCwgMCksIGV2ZW50LT5zaXplKCkpOworICAgIG1fd2ViVmlldy0+c2V0R2VvbWV0cnkocmVjdCk7
CisgICAgc2NlbmUoKS0+c2V0U2NlbmVSZWN0KHJlY3QpOworfQorCit2b2lkIHRzdF9XZWJHbFBl
cmZvcm1hbmNlOjppbml0KCkKK3sKKyAgICBtX3ZpZXcucmVzZXQobmV3IEdyYXBoaWNzVmlldyk7
CisgICAgbV92aWV3LT5zaG93TWF4aW1pemVkKCk7CisgICAgUVRlc3Q6OnFXYWl0Rm9yV2luZG93
U2hvd24obV92aWV3LmRhdGEoKSk7Cit9CisKK3ZvaWQgdHN0X1dlYkdsUGVyZm9ybWFuY2U6OmNs
ZWFudXAoKQoreworICAgIG1fdmlldy5yZXNldCgpOworfQorCit2b2lkIHRzdF9XZWJHbFBlcmZv
cm1hbmNlOjpiZW5jaFNvZnR3YXJlRmFsbGJhY2tSZ2IxNigpCit7CisgICAgYmVuY2htYXJrRnJh
bWVSZW5kZXJpbmdPbkltYWdlKFFJbWFnZTo6Rm9ybWF0X1JHQjE2KTsKK30KKwordm9pZCB0c3Rf
V2ViR2xQZXJmb3JtYW5jZTo6YmVuY2hTb2Z0d2FyZUZhbGxiYWNrUmdiMzIoKQoreworICAgIGJl
bmNobWFya0ZyYW1lUmVuZGVyaW5nT25JbWFnZShRSW1hZ2U6OkZvcm1hdF9SR0IzMik7Cit9CisK
K3ZvaWQgdHN0X1dlYkdsUGVyZm9ybWFuY2U6OmJlbmNoU29mdHdhcmVGYWxsYmFja0FyZ2IzMigp
Cit7CisgICAgYmVuY2htYXJrRnJhbWVSZW5kZXJpbmdPbkltYWdlKFFJbWFnZTo6Rm9ybWF0X0FS
R0IzMik7Cit9CisKK3ZvaWQgdHN0X1dlYkdsUGVyZm9ybWFuY2U6OmJlbmNoU29mdHdhcmVGYWxs
YmFja0FyZ2IzMlByZW11bHRpcGxpZWQoKQoreworICAgIGJlbmNobWFya0ZyYW1lUmVuZGVyaW5n
T25JbWFnZShRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZCk7Cit9CisKK3ZvaWQg
dHN0X1dlYkdsUGVyZm9ybWFuY2U6OmJlbmNobWFya0ZyYW1lUmVuZGVyaW5nT25JbWFnZShRSW1h
Z2U6OkZvcm1hdCBmb3JtYXQpCit7CisgICAgbV92aWV3LT5tX3dlYlZpZXctPmxvYWQoUVVybChR
TGF0aW4xU3RyaW5nKCJxcmM6Ly8vdGVzdGNhc2VzLzEwMDAwX3RyaWFuZ2xlcy5odG1sIikpKTsK
KyAgICBjb25zdCBib29sIHBhZ2VMb2FkZWQgPSB3YWl0Rm9yU2lnbmFsKG1fdmlldy0+bV93ZWJW
aWV3LCBTSUdOQUwobG9hZEZpbmlzaGVkKGJvb2wpKSk7CisgICAgUV9BU1NFUlQocGFnZUxvYWRl
ZCk7CisgICAgUV9VTlVTRUQocGFnZUxvYWRlZCk7CisKKyAgICBRSW1hZ2UgdGFyZ2V0KG1fdmll
dy0+c2l6ZSgpLCBmb3JtYXQpOworICAgIFFCRU5DSE1BUksgeworICAgICAgICBRUGFpbnRlciBw
YWludGVyKCZ0YXJnZXQpOworICAgICAgICBtX3ZpZXctPnJlbmRlcigmcGFpbnRlcik7CisgICAg
ICAgIHBhaW50ZXIuZW5kKCk7CisgICAgfQorfQorCitRVEVTVF9NQUlOKHRzdF9XZWJHbFBlcmZv
cm1hbmNlKQorCisjaW5jbHVkZSAidHN0X3dlYmdsLm1vYyIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvcXQvdGVzdHMvYmVuY2htYXJrcy93ZWJnbC90c3Rfd2ViZ2wucXJjIGIvU291cmNlL1dl
YktpdC9xdC90ZXN0cy9iZW5jaG1hcmtzL3dlYmdsL3RzdF93ZWJnbC5xcmMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg0OTQ0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvcXQvdGVzdHMvYmVuY2htYXJrcy93ZWJnbC90c3Rfd2ViZ2wucXJjCkBAIC0wLDAg
KzEsNSBAQAorPFJDQz4KKyAgICA8cXJlc291cmNlIHByZWZpeD0iL3Rlc3RjYXNlcyI+CisgICAg
ICAgIDxmaWxlPjEwMDAwX3RyaWFuZ2xlcy5odG1sPC9maWxlPgorICAgIDwvcXJlc291cmNlPgor
PC9SQ0M+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL2JlbmNobWFya3Mvd2Vi
Z2wvd2ViZ2wucHJvIGIvU291cmNlL1dlYktpdC9xdC90ZXN0cy9iZW5jaG1hcmtzL3dlYmdsL3dl
YmdsLnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjIxYmM4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC90ZXN0cy9iZW5jaG1hcmtzL3dlYmdsL3dl
YmdsLnBybwpAQCAtMCwwICsxLDQgQEAKK2lzRW1wdHkoT1VUUFVUX0RJUik6IE9VVFBVVF9ESVIg
PSAuLi8uLi8uLi8uLi8uLgoraW5jbHVkZSguLi8uLi90ZXN0cy5wcmkpCitleGlzdHMoJCR7VEFS
R0VUfS5xcmMpOlJFU09VUkNFUyArPSAkJHtUQVJHRVR9LnFyYworUVQgKz0gb3BlbmdsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3FncmFwaGljc3dlYnZpZXcvcWdyYXBoaWNz
d2Vidmlldy5wcm8gYi9Tb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3FncmFwaGljc3dlYnZpZXcvcWdy
YXBoaWNzd2Vidmlldy5wcm8KaW5kZXggZTkxNWQ2MC4uZTU0OTRhZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9xdC90ZXN0cy9xZ3JhcGhpY3N3ZWJ2aWV3L3FncmFwaGljc3dlYnZpZXcucHJv
CisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcWdyYXBoaWNzd2Vidmlldy9xZ3JhcGhpY3N3
ZWJ2aWV3LnBybwpAQCAtMSwzICsxLDYgQEAKIGlzRW1wdHkoT1VUUFVUX0RJUik6IE9VVFBVVF9E
SVIgPSAuLi8uLi8uLi8uLgogaW5jbHVkZSguLi90ZXN0cy5wcmkpCiBleGlzdHMoJCR7VEFSR0VU
fS5xcmMpOlJFU09VUkNFUyArPSAkJHtUQVJHRVR9LnFyYworY29udGFpbnMoREVGSU5FUywgRU5B
QkxFX1dFQkdMPTEpIHsKKyAgICBRVCArPSBvcGVuZ2wKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvcXQvdGVzdHMvcWdyYXBoaWNzd2Vidmlldy9yZXNvdXJjZXMvcG9pbnRpbmdfcmlnaHQu
aHRtbCBiL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcWdyYXBoaWNzd2Vidmlldy9yZXNvdXJjZXMv
cG9pbnRpbmdfcmlnaHQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5i
YzU5MmZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC90ZXN0cy9xZ3JhcGhp
Y3N3ZWJ2aWV3L3Jlc291cmNlcy9wb2ludGluZ19yaWdodC5odG1sCkBAIC0wLDAgKzEsNDUgQEAK
KzxodG1sPgorICA8Ym9keSBzdHlsZT0ibWFyZ2luOiAwIj4KKyAgICA8Y2FudmFzIHdpZHRoPSIx
MDAiIGhlaWdodD0iMTAwIj48L2NhbnZhcz4KKyAgPC9ib2R5PgorPC9odG1sPgorPHNjcmlwdD4K
KyAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImNhbnZhcyIp
WzBdOworICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIpOwor
ICAgIGdsLmNsZWFyQ29sb3IoMC4wLCAxLjAsIDAuMCwgMS4wKTsKKyAgICBnbC52aWV3cG9ydCgw
LCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpOworCisgICAgdmFyIHZlcnRleFNoYWRl
ciA9IGdsLmNyZWF0ZVNoYWRlcihnbC5WRVJURVhfU0hBREVSKTsKKyAgICBnbC5zaGFkZXJTb3Vy
Y2UodmVydGV4U2hhZGVyLCAiYXR0cmlidXRlIHZlYzQgdlBvc2l0aW9uO1xudm9pZCBtYWluKCkg
eyBnbF9Qb3NpdGlvbiA9IHZQb3NpdGlvbjsgfSIpOworICAgIGdsLmNvbXBpbGVTaGFkZXIodmVy
dGV4U2hhZGVyKTsKKworICAgIHZhciBmcmFnbWVudFNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcihn
bC5GUkFHTUVOVF9TSEFERVIpOworICAgIGdsLnNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwg
InZvaWQgbWFpbigpIHsgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDAuMCwgMC4wLCAxLjApOyB9
Iik7CisgICAgZ2wuY29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcik7CisKKyAgICB2YXIgc2hh
ZGVyUHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTsKKyAgICBnbC5hdHRhY2hTaGFkZXIoc2hh
ZGVyUHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsKKyAgICBnbC5hdHRhY2hTaGFkZXIoc2hhZGVyUHJv
Z3JhbSwgZnJhZ21lbnRTaGFkZXIpOworICAgIGdsLmJpbmRBdHRyaWJMb2NhdGlvbihzaGFkZXJQ
cm9ncmFtLCAwLCAidlBvc2l0aW9uIik7CisgICAgZ2wubGlua1Byb2dyYW0oc2hhZGVyUHJvZ3Jh
bSk7CisKKyAgICBnbC51c2VQcm9ncmFtKHNoYWRlclByb2dyYW0pOworCisgICAgdmFyIGJ1ZmZl
ciA9IGdsLmNyZWF0ZUJ1ZmZlcigpOworICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVS
LCBidWZmZXIpOworCisgICAgdmFyIHZlcnRpY2VzID0gWy0xLjAsIC0xLjAsCisgICAgICAgICAg
ICAgICAgICAgIDAuMCwgMC4wLAorICAgICAgICAgICAgICAgICAgICAtMS4wLCAxLjBdOworICAg
IHZhciBzZWVkWCA9IC0xLjA7CisgICAgdmFyIHNlZWRZID0gMS4wOworICAgIHZlcnRpY2VzCisg
ICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG5ldyBGbG9hdDMyQXJyYXkodmVydGlj
ZXMpLCBnbC5TVEFUSUNfRFJBVyk7CisKKworICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoMCwg
MiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eSgwKTsKKyAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUKTsKKyAgICBnbC5kcmF3QXJy
YXlzKGdsLlRSSUFOR0xFUywgMCwgMyk7CisgICAgZ2wuZmx1c2goKTsKKzwvc2NyaXB0PgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC90ZXN0cy9xZ3JhcGhpY3N3ZWJ2aWV3L3Jlc291cmNl
cy9wb2ludGluZ191cC5odG1sIGIvU291cmNlL1dlYktpdC9xdC90ZXN0cy9xZ3JhcGhpY3N3ZWJ2
aWV3L3Jlc291cmNlcy9wb2ludGluZ191cC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjQ3NGE1NmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L3Rl
c3RzL3FncmFwaGljc3dlYnZpZXcvcmVzb3VyY2VzL3BvaW50aW5nX3VwLmh0bWwKQEAgLTAsMCAr
MSw0NiBAQAorPGh0bWw+CisgIDxib2R5IHN0eWxlPSJtYXJnaW46IDAiPgorICAgIDxjYW52YXMg
d2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiPjwvY2FudmFzPgorICA8L2JvZHk+Cis8L2h0bWw+Cis8
c2NyaXB0PgorICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgi
Y2FudmFzIilbMF07CisgICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdl
YmdsIik7CisgICAgZ2wuY2xlYXJDb2xvcigwLjAsIDEuMCwgMC4wLCAxLjApOworICAgIGdsLnZp
ZXdwb3J0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7CisKKyAgICB2YXIgdmVy
dGV4U2hhZGVyID0gZ2wuY3JlYXRlU2hhZGVyKGdsLlZFUlRFWF9TSEFERVIpOworICAgIGdsLnNo
YWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsICJhdHRyaWJ1dGUgdmVjNCB2UG9zaXRpb247XG52b2lk
IG1haW4oKSB7IGdsX1Bvc2l0aW9uID0gdlBvc2l0aW9uOyB9Iik7CisgICAgZ2wuY29tcGlsZVNo
YWRlcih2ZXJ0ZXhTaGFkZXIpOworCisgICAgdmFyIGZyYWdtZW50U2hhZGVyID0gZ2wuY3JlYXRl
U2hhZGVyKGdsLkZSQUdNRU5UX1NIQURFUik7CisgICAgZ2wuc2hhZGVyU291cmNlKGZyYWdtZW50
U2hhZGVyLCAidm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCwgMC4wLCAwLjAs
IDEuMCk7IH0iKTsKKyAgICBnbC5jb21waWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTsKKworICAg
IHZhciBzaGFkZXJQcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpOworICAgIGdsLmF0dGFjaFNo
YWRlcihzaGFkZXJQcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpOworICAgIGdsLmF0dGFjaFNoYWRlcihz
aGFkZXJQcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7CisgICAgZ2wuYmluZEF0dHJpYkxvY2F0aW9u
KHNoYWRlclByb2dyYW0sIDAsICJ2UG9zaXRpb24iKTsKKyAgICBnbC5saW5rUHJvZ3JhbShzaGFk
ZXJQcm9ncmFtKTsKKworICAgIGdsLnVzZVByb2dyYW0oc2hhZGVyUHJvZ3JhbSk7CisKKyAgICB2
YXIgYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7CisgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJB
WV9CVUZGRVIsIGJ1ZmZlcik7CisKKyAgICB2YXIgdmVydGljZXMgPSBbLTEuMCwgLTEuMCwKKyAg
ICAgICAgICAgICAgICAgICAgMC4wLCAwLjAsCisgICAgICAgICAgICAgICAgICAgIDEuMCwgLTEu
MF07CisgICAgdmFyIHNlZWRYID0gLTEuMDsKKyAgICB2YXIgc2VlZFkgPSAxLjA7CisgICAgdmVy
dGljZXMKKyAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbmV3IEZsb2F0MzJBcnJh
eSh2ZXJ0aWNlcyksIGdsLlNUQVRJQ19EUkFXKTsKKworCisgICAgZ2wudmVydGV4QXR0cmliUG9p
bnRlcigwLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApOworICAgIGdsLmVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KDApOworICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpOworICAgIGds
LmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAwLCAzKTsKKyAgICBnbC5mbHVzaCgpOworICAgIGds
LmZpbmlzaCgpOworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L3Rlc3Rz
L3FncmFwaGljc3dlYnZpZXcvdHN0X3FncmFwaGljc3dlYnZpZXcuY3BwIGIvU291cmNlL1dlYktp
dC9xdC90ZXN0cy9xZ3JhcGhpY3N3ZWJ2aWV3L3RzdF9xZ3JhcGhpY3N3ZWJ2aWV3LmNwcAppbmRl
eCBlNjMwZmZmLi40MWFiODcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3Fn
cmFwaGljc3dlYnZpZXcvdHN0X3FncmFwaGljc3dlYnZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvcXQvdGVzdHMvcWdyYXBoaWNzd2Vidmlldy90c3RfcWdyYXBoaWNzd2Vidmlldy5jcHAKQEAg
LTI1LDYgKzI1LDEwIEBACiAjaW5jbHVkZSA8cXdlYnBhZ2UuaD4KICNpbmNsdWRlIDxxd2ViZnJh
bWUuaD4KIAorI2lmIGRlZmluZWQoRU5BQkxFX1dFQkdMKSAmJiBFTkFCTEVfV0VCR0wKKyNpbmNs
dWRlIDxRR0xXaWRnZXQ+CisjZW5kaWYKKwogY2xhc3MgdHN0X1FHcmFwaGljc1dlYlZpZXcgOiBw
dWJsaWMgUU9iamVjdAogewogICAgIFFfT0JKRUNUCkBAIC0zOSw2ICs0MywxNCBAQCBwcml2YXRl
IHNsb3RzOgogICAgIHZvaWQgc2V0UGFsZXR0ZV9kYXRhKCk7CiAgICAgdm9pZCBzZXRQYWxldHRl
KCk7CiAgICAgdm9pZCByZW5kZXJIaW50cygpOworCisjaWYgZGVmaW5lZChFTkFCTEVfV0VCR0wp
ICYmIEVOQUJMRV9XRUJHTAorICAgIHZvaWQgd2ViZ2xTb2Z0d2FyZUZhbGxiYWNrVmVydGljYWxP
cmllbnRhdGlvbigpOworICAgIHZvaWQgd2ViZ2xTb2Z0d2FyZUZhbGxiYWNrSG9yaXpvbnRhbE9y
aWVudGF0aW9uKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBjb21wYXJlQ2FudmFzVG9JbWFnZShj
b25zdCBRVXJsJiwgY29uc3QgUUltYWdlJik7CisjZW5kaWYKIH07CiAKIHZvaWQgdHN0X1FHcmFw
aGljc1dlYlZpZXc6OnFncmFwaGljc3dlYnZpZXcoKQpAQCAtNDQ0LDYgKzQ1NiwxMTIgQEAgdm9p
ZCB0c3RfUUdyYXBoaWNzV2ViVmlldzo6cmVuZGVySGludHMoKQogICAgIFFWRVJJRlkoISh3ZWJW
aWV3LnJlbmRlckhpbnRzKCkgJiBRUGFpbnRlcjo6SGlnaFF1YWxpdHlBbnRpYWxpYXNpbmcpKTsK
IH0KIAorY2xhc3MgR3JhcGhpY3NWaWV3IDogcHVibGljIFFHcmFwaGljc1ZpZXcgeworcHVibGlj
OgorICAgIEdyYXBoaWNzVmlldygpOworICAgIFFHcmFwaGljc1dlYlZpZXcqIG1fd2ViVmlldzsK
K307CisKKyNpZiBkZWZpbmVkKEVOQUJMRV9XRUJHTCkgJiYgRU5BQkxFX1dFQkdMCitib29sIGNv
bXBhcmVJbWFnZXNGdXp6eVBpeGVsQ291bnQoY29uc3QgUUltYWdlJiBpbWFnZTEsIGNvbnN0IFFJ
bWFnZSYgaW1hZ2UyLCBxcmVhbCB0b2xlcmFuY2UgPSAwLjA1KQoreworICAgIGlmIChpbWFnZTEu
c2l6ZSgpICE9IGltYWdlMi5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVu
c2lnbmVkIGRpZmZQaXhlbENvdW50ID0gMDsKKyAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBp
bWFnZTEuc2l6ZSgpLndpZHRoKCk7ICsrcm93KSB7CisgICAgICAgIGZvciAoaW50IGNvbHVtbiA9
IDA7IGNvbHVtbiA8IGltYWdlMS5zaXplKCkuaGVpZ2h0KCk7ICsrY29sdW1uKQorICAgICAgICAg
ICAgaWYgKGltYWdlMS5waXhlbChyb3csIGNvbHVtbikgIT0gaW1hZ2UyLnBpeGVsKHJvdywgY29s
dW1uKSkKKyAgICAgICAgICAgICAgICArK2RpZmZQaXhlbENvdW50OworICAgIH0KKworICAgIGlm
IChkaWZmUGl4ZWxDb3VudCA+IChpbWFnZTEuc2l6ZSgpLndpZHRoKCkgKiBpbWFnZTEuc2l6ZSgp
LmhlaWdodCgpKSAqIHRvbGVyYW5jZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK0dyYXBoaWNzVmlldzo6R3JhcGhpY3NWaWV3KCkKK3sKKyAgICBRR3Jh
cGhpY3NTY2VuZSogY29uc3Qgc2NlbmUgPSBuZXcgUUdyYXBoaWNzU2NlbmUodGhpcyk7CisgICAg
c2V0U2NlbmUoc2NlbmUpOworCisgICAgbV93ZWJWaWV3ID0gbmV3IFFHcmFwaGljc1dlYlZpZXc7
CisgICAgc2NlbmUtPmFkZEl0ZW0obV93ZWJWaWV3KTsKKworICAgIG1fd2ViVmlldy0+cGFnZSgp
LT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpXZWJHTEVuYWJsZWQsIHRy
dWUpOworICAgIG1fd2ViVmlldy0+c2V0UmVzaXplc1RvQ29udGVudHModHJ1ZSk7CisKKyAgICBz
ZXRGcmFtZVNoYXBlKFFGcmFtZTo6Tm9GcmFtZSk7CisgICAgc2V0Vmlld3BvcnQobmV3IFFHTFdp
ZGdldCk7Cit9CisKK3ZvaWQgdHN0X1FHcmFwaGljc1dlYlZpZXc6OndlYmdsU29mdHdhcmVGYWxs
YmFja1ZlcnRpY2FsT3JpZW50YXRpb24oKQoreworICAgIFFTaXplIGNhbnZhc1NpemUoMTAwLCAx
MDApOworICAgIFFJbWFnZSByZWZlcmVuY2UoY2FudmFzU2l6ZSwgUUltYWdlOjpGb3JtYXRfQVJH
QjMyKTsKKyAgICByZWZlcmVuY2UuZmlsbCgweEZGMDBGRjAwKTsKKyAgICB7IC8vIFJlZmVyZW5j
ZS4KKyAgICAgICAgUVBhaW50ZXIgcGFpbnRlcigmcmVmZXJlbmNlKTsKKyAgICAgICAgUVBvbHln
b25GIHRyaWFuZ2xlVXA7CisgICAgICAgIHRyaWFuZ2xlVXAgPDwgUVBvaW50RigwLCBjYW52YXNT
aXplLmhlaWdodCgpKQorICAgICAgICAgICAgICAgICAgIDw8IFFQb2ludEYoY2FudmFzU2l6ZS53
aWR0aCgpLCBjYW52YXNTaXplLmhlaWdodCgpKQorICAgICAgICAgICAgICAgICAgIDw8IFFQb2lu
dEYoY2FudmFzU2l6ZS53aWR0aCgpIC8gMi4wLCBjYW52YXNTaXplLmhlaWdodCgpIC8gMi4wKTsK
KyAgICAgICAgcGFpbnRlci5zZXRQZW4oUXQ6Ok5vUGVuKTsKKyAgICAgICAgcGFpbnRlci5zZXRC
cnVzaChRdDo6cmVkKTsKKyAgICAgICAgcGFpbnRlci5kcmF3UG9seWdvbih0cmlhbmdsZVVwKTsK
KyAgICB9CisKKyAgICBjb21wYXJlQ2FudmFzVG9JbWFnZShRVXJsKFFMYXRpbjFTdHJpbmcoInFy
YzovLy9yZXNvdXJjZXMvcG9pbnRpbmdfdXAuaHRtbCIpKSwgcmVmZXJlbmNlKTsKK30KKwordm9p
ZCB0c3RfUUdyYXBoaWNzV2ViVmlldzo6d2ViZ2xTb2Z0d2FyZUZhbGxiYWNrSG9yaXpvbnRhbE9y
aWVudGF0aW9uKCkKK3sKKyAgICBRU2l6ZSBjYW52YXNTaXplKDEwMCwgMTAwKTsKKyAgICBRSW1h
Z2UgcmVmZXJlbmNlKGNhbnZhc1NpemUsIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMik7CisgICAgcmVm
ZXJlbmNlLmZpbGwoMHhGRjAwRkYwMCk7CisgICAgeyAvLyBSZWZlcmVuY2UuCisgICAgICAgIFFQ
YWludGVyIHBhaW50ZXIoJnJlZmVyZW5jZSk7CisgICAgICAgIFFQb2x5Z29uRiB0cmlhbmdsZVVw
OworICAgICAgICB0cmlhbmdsZVVwIDw8IFFQb2ludEYoMCwgMCkKKyAgICAgICAgICAgICAgICAg
ICA8PCBRUG9pbnRGKDAsIGNhbnZhc1NpemUuaGVpZ2h0KCkpCisgICAgICAgICAgICAgICAgICAg
PDwgUVBvaW50RihjYW52YXNTaXplLndpZHRoKCkgLyAyLjAsIGNhbnZhc1NpemUuaGVpZ2h0KCkg
LyAyLjApOworICAgICAgICBwYWludGVyLnNldFBlbihRdDo6Tm9QZW4pOworICAgICAgICBwYWlu
dGVyLnNldEJydXNoKFF0OjpyZWQpOworICAgICAgICBwYWludGVyLmRyYXdQb2x5Z29uKHRyaWFu
Z2xlVXApOworICAgIH0KKworICAgIGNvbXBhcmVDYW52YXNUb0ltYWdlKFFVcmwoUUxhdGluMVN0
cmluZygicXJjOi8vL3Jlc291cmNlcy9wb2ludGluZ19yaWdodC5odG1sIikpLCByZWZlcmVuY2Up
OworfQorCit2b2lkIHRzdF9RR3JhcGhpY3NXZWJWaWV3Ojpjb21wYXJlQ2FudmFzVG9JbWFnZShj
b25zdCBRVXJsJiB1cmwsIGNvbnN0IFFJbWFnZSYgcmVmZXJlbmNlKQoreworICAgIEdyYXBoaWNz
VmlldyB2aWV3OworICAgIHZpZXcuc2hvdygpOworICAgIFFUZXN0OjpxV2FpdEZvcldpbmRvd1No
b3duKCZ2aWV3KTsKKworICAgIFFHcmFwaGljc1dlYlZpZXcqIGNvbnN0IGdyYXBoaWNzV2ViVmll
dyA9IHZpZXcubV93ZWJWaWV3OworICAgIGdyYXBoaWNzV2ViVmlldy0+bG9hZCh1cmwpOworICAg
IFFWRVJJRlkod2FpdEZvclNpZ25hbChncmFwaGljc1dlYlZpZXcsIFNJR05BTChsb2FkRmluaXNo
ZWQoYm9vbCkpKSk7CisgICAgeyAvLyBGb3JjZSBhIHJlbmRlciwgdG8gY3JlYXRlIHRoZSBhY2Nl
bGVyYXRlZCBjb21wb3NpdGluZyB0cmVlLgorICAgICAgICBRUGl4bWFwIHBpeG1hcCh2aWV3LnNp
emUoKSk7CisgICAgICAgIFFQYWludGVyIHBhaW50ZXIoJnBpeG1hcCk7CisgICAgICAgIHZpZXcu
cmVuZGVyKCZwYWludGVyKTsKKyAgICB9CisgICAgUUFwcGxpY2F0aW9uOjpzeW5jWCgpOworCisg
ICAgY29uc3QgUVNpemUgaW1hZ2VTaXplID0gcmVmZXJlbmNlLnNpemUoKTsKKworICAgIFFJbWFn
ZSB0YXJnZXQoaW1hZ2VTaXplLCBRSW1hZ2U6OkZvcm1hdF9BUkdCMzIpOworICAgIHsgLy8gV2Vi
IHBhZ2UgY29udGVudC4KKyAgICAgICAgUVBhaW50ZXIgcGFpbnRlcigmdGFyZ2V0KTsKKyAgICAg
ICAgUVJlY3RGIHJlbmRlclJlY3QoMCwgMCwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5o
ZWlnaHQoKSk7CisgICAgICAgIHZpZXcuc2NlbmUoKS0+cmVuZGVyKCZwYWludGVyLCByZW5kZXJS
ZWN0LCByZW5kZXJSZWN0KTsKKyAgICB9CisgICAgUVZFUklGWShjb21wYXJlSW1hZ2VzRnV6enlQ
aXhlbENvdW50KHRhcmdldCwgcmVmZXJlbmNlLCAwLjAxKSk7Cit9CisjZW5kaWYKKwogUVRFU1Rf
TUFJTih0c3RfUUdyYXBoaWNzV2ViVmlldykKIAogI2luY2x1ZGUgInRzdF9xZ3JhcGhpY3N3ZWJ2
aWV3Lm1vYyIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcWdyYXBoaWNzd2Vi
dmlldy90c3RfcWdyYXBoaWNzd2Vidmlldy5xcmMgYi9Tb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3Fn
cmFwaGljc3dlYnZpZXcvdHN0X3FncmFwaGljc3dlYnZpZXcucXJjCmluZGV4IGM5MWJiOWMuLjE0
ODhmY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcWdyYXBoaWNzd2Vidmll
dy90c3RfcWdyYXBoaWNzd2Vidmlldy5xcmMKKysrIGIvU291cmNlL1dlYktpdC9xdC90ZXN0cy9x
Z3JhcGhpY3N3ZWJ2aWV3L3RzdF9xZ3JhcGhpY3N3ZWJ2aWV3LnFyYwpAQCAtMSw2ICsxLDcgQEAK
LTwhRE9DVFlQRSBSQ0M+PFJDQyB2ZXJzaW9uPSIxLjAiPgotPHFyZXNvdXJjZT4KLSAgICA8Zmls
ZT5yZXNvdXJjZXMvaW5wdXRfdHlwZXMuaHRtbDwvZmlsZT4KLTwvcXJlc291cmNlPgorPFJDQz4K
KyAgICA8cXJlc291cmNlIHByZWZpeD0iLyI+CisgICAgICAgIDxmaWxlPnJlc291cmNlcy9pbnB1
dF90eXBlcy5odG1sPC9maWxlPgorICAgICAgICA8ZmlsZT5yZXNvdXJjZXMvcG9pbnRpbmdfcmln
aHQuaHRtbDwvZmlsZT4KKyAgICAgICAgPGZpbGU+cmVzb3VyY2VzL3BvaW50aW5nX3VwLmh0bWw8
L2ZpbGU+CisgICAgPC9xcmVzb3VyY2U+CiA8L1JDQz4KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9xdC90ZXN0cy90ZXN0cy5wcm8gYi9Tb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3Rlc3RzLnBy
bwppbmRleCBlNWI3NDA4Li41MjlmYTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L3Rl
c3RzL3Rlc3RzLnBybworKysgYi9Tb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3Rlc3RzLnBybwpAQCAt
MywzICszLDYgQEAgVEVNUExBVEUgPSBzdWJkaXJzCiBTVUJESVJTID0gcXdlYmZyYW1lIHF3ZWJw
YWdlIHF3ZWJlbGVtZW50IHFncmFwaGljc3dlYnZpZXcgcXdlYmhpc3RvcnlpbnRlcmZhY2UgcXdl
YnZpZXcgcXdlYmhpc3RvcnkgcXdlYmluc3BlY3RvciBoeWJyaWRQaXhtYXAKIGNvbnRhaW5zKFFU
X0NPTkZJRywgZGVjbGFyYXRpdmUpOiBTVUJESVJTICs9IHFkZWNsYXJhdGl2ZXdlYnZpZXcKIFNV
QkRJUlMgKz0gYmVuY2htYXJrcy9wYWludGluZyBiZW5jaG1hcmtzL2xvYWRpbmcKK2NvbnRhaW5z
KERFRklORVMsIEVOQUJMRV9XRUJHTD0xKSB7CisgICAgU1VCRElSUyArPSBiZW5jaG1hcmtzL3dl
YmdsCit9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>