<?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>71535</bug_id>
          
          <creation_ts>2011-11-03 20:21:03 -0700</creation_ts>
          <short_desc>Add the ability to transfer ArrayBuffer and &quot;neuter&quot; it</short_desc>
          <delta_ts>2011-11-04 14:44:18 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>66578</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dmitry Lomov">dslomov</reporter>
          <assigned_to name="Dmitry Lomov">dslomov</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>levin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>496016</commentid>
    <comment_count>0</comment_count>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-11-03 20:21:03 -0700</bug_when>
    <thetext>Implement ArrayBuffer transfer and ArrayBuffer and related views neutering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496017</commentid>
    <comment_count>1</comment_count>
      <attachid>113614</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-11-03 20:23:31 -0700</bug_when>
    <thetext>Created attachment 113614
Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496018</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-03 20:25:41 -0700</bug_when>
    <thetext>Attachment 113614 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/WebCore/html/canvas/ArrayBuffer.h:85:  The parameter name &quot;contents&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 8 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>496019</commentid>
    <comment_count>3</comment_count>
      <attachid>113615</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-11-03 20:28:49 -0700</bug_when>
    <thetext>Created attachment 113615
Style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496027</commentid>
    <comment_count>4</comment_count>
      <attachid>113615</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-11-03 20:39:44 -0700</bug_when>
    <thetext>Comment on attachment 113615
Style

Attachment 113615 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10313040</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496029</commentid>
    <comment_count>5</comment_count>
      <attachid>113615</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-11-03 20:46:51 -0700</bug_when>
    <thetext>Comment on attachment 113615
Style

Attachment 113615 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/10319028</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496031</commentid>
    <comment_count>6</comment_count>
      <attachid>113615</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-03 20:50:44 -0700</bug_when>
    <thetext>Comment on attachment 113615
Style

Attachment 113615 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10314038</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496032</commentid>
    <comment_count>7</comment_count>
      <attachid>113619</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-11-03 20:53:31 -0700</bug_when>
    <thetext>Created attachment 113619
Build fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496033</commentid>
    <comment_count>8</comment_count>
      <attachid>113614</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-11-03 21:02:34 -0700</bug_when>
    <thetext>Comment on attachment 113614
Fix

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

&gt; Source/WebCore/ChangeLog:27
&gt; +        (WebCore::ArrayBufferView::neuter):

Why not clear or empty (instead of neuter)? (Of course disgorge would be a fun descriptive word but a more common term is probably better.)

&gt; Source/WebCore/html/canvas/ArrayBuffer.cpp:139
&gt; +    m_firstView = 0;

or

while (m_firstView) {
  ArrayBufferView* current = m_firstView;
  removeView(current);
  current-&gt;neuter(context);
}

&gt; Source/WebCore/html/canvas/ArrayBuffer.cpp:173
&gt; +      m_firstView-&gt;m_prevView = view;

4 space indent

&gt; Source/WebCore/html/canvas/ArrayBuffer.cpp:182
&gt; +    if (view-&gt;m_prevView)

There would be a minor a simplification in this area of the code if m_prevView was m_prevNextView (of type ArrayBufferView**).

Then 
if (view-&gt;m_prevView)
    view-&gt;m_prevView-&gt;m_nextView = view-&gt;m_nextView;
if (m_firstView == view)
     m_firstView = view-&gt;m_nextView;

becomes
    *(view-&gt;m_prevNextView) = view-&gt;m_nextView;

but perhaps that isn&apos;t worth the mental gymnastics to understand it.

&gt; Source/WebCore/html/canvas/ArrayBuffer.h:40
&gt; +  public:

no indent.

&gt; Source/WebCore/html/canvas/ArrayBuffer.h:42
&gt; +      : m_data(0), m_sizeInBytes(0)

4 space indent.

&gt; Source/WebCore/html/canvas/ArrayBuffer.h:43
&gt; +    { }

Either line this all up on one line (41-43) or put these (the two initializer and the braces) all on separate lines.

&gt; Source/WebCore/html/canvas/ArrayBuffer.h:53
&gt; +    void release() { m_data = 0; m_sizeInBytes = 0; }

I don&apos;t like the name release here. I think leak is more typical.

Perhaps replace this with transfer(ArrayBufferContents&amp;) or swap(ArrayBufferContents&amp;) and use that in the two instances where you are using this. 
In fact I rather like &quot;swap&quot; because that will make it obvious that no leaks are happening in transfer.

&gt; Source/WebCore/html/canvas/ArrayBuffer.h:57
&gt; +    { }

Same as above.

&gt; Source/WebCore/html/canvas/ArrayBufferView.cpp:78
&gt; +

extra blank lines.

&gt; Source/WebCore/html/canvas/TypedArrayBase.h:120
&gt; +    }

Add blank line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496151</commentid>
    <comment_count>9</comment_count>
      <attachid>113619</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-04 04:55:38 -0700</bug_when>
    <thetext>Comment on attachment 113619
Build fixed

Attachment 113619 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10314130

New failing tests:
http/tests/canvas/webgl/origin-clean-conformance.html
fast/canvas/webgl/array-get-and-set-method-removal.html
fast/canvas/webgl/gl-enum-tests.html
fast/canvas/webgl/draw-elements-out-of-bounds.html
fast/canvas/webgl/copy-tex-image-and-sub-image-2d.html
fast/canvas/webgl/array-get-out-of-bounds.html
fast/canvas/webgl/drawingbuffer-test.html
fast/canvas/webgl/context-lost-restored.html
fast/canvas/webgl/array-set-out-of-bounds.html
fast/canvas/webgl/framebuffer-object-attachment.html
fast/canvas/webgl/gl-bind-attrib-location-test.html
fast/canvas/webgl/array-setters.html
fast/canvas/webgl/gl-teximage.html
fast/canvas/webgl/array-message-passing.html
fast/canvas/webgl/data-view-test.html
fast/canvas/webgl/context-lost.html
fast/canvas/webgl/context-attributes-alpha-depth-stencil-antialias.html
fast/canvas/webgl/gl-vertex-attrib-zero-issues.html
fast/canvas/webgl/array-unit-tests.html
fast/canvas/webgl/gl-get-calls.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496247</commentid>
    <comment_count>10</comment_count>
      <attachid>113614</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-11-04 10:00:24 -0700</bug_when>
    <thetext>Comment on attachment 113614
Fix

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

&gt;&gt; Source/WebCore/ChangeLog:27
&gt;&gt; +        (WebCore::ArrayBufferView::neuter):
&gt; 
&gt; Why not clear or empty (instead of neuter)? (Of course disgorge would be a fun descriptive word but a more common term is probably better.)

&apos;neuter&apos; is a technical term: http://www.whatwg.org/specs/web-apps/current-work/multipage/common-dom-interfaces.html#transferable-objects

&gt;&gt; Source/WebCore/html/canvas/ArrayBuffer.cpp:139
&gt;&gt; +    m_firstView = 0;
&gt; 
&gt; or
&gt; 
&gt; while (m_firstView) {
&gt;   ArrayBufferView* current = m_firstView;
&gt;   removeView(current);
&gt;   current-&gt;neuter(context);
&gt; }

Thanks - it is better! I&apos;ll do that.

&gt;&gt; Source/WebCore/html/canvas/ArrayBuffer.cpp:182
&gt;&gt; +    if (view-&gt;m_prevView)
&gt; 
&gt; There would be a minor a simplification in this area of the code if m_prevView was m_prevNextView (of type ArrayBufferView**).
&gt; 
&gt; Then 
&gt; if (view-&gt;m_prevView)
&gt;     view-&gt;m_prevView-&gt;m_nextView = view-&gt;m_nextView;
&gt; if (m_firstView == view)
&gt;      m_firstView = view-&gt;m_nextView;
&gt; 
&gt; becomes
&gt;     *(view-&gt;m_prevNextView) = view-&gt;m_nextView;
&gt; 
&gt; but perhaps that isn&apos;t worth the mental gymnastics to understand it.

Yikes. No way. :)

&gt;&gt; Source/WebCore/html/canvas/ArrayBuffer.h:40
&gt;&gt; +  public:
&gt; 
&gt; no indent.

Done

&gt;&gt; Source/WebCore/html/canvas/ArrayBuffer.h:42
&gt;&gt; +      : m_data(0), m_sizeInBytes(0)
&gt; 
&gt; 4 space indent.

Done

&gt;&gt; Source/WebCore/html/canvas/ArrayBuffer.h:43
&gt;&gt; +    { }
&gt; 
&gt; Either line this all up on one line (41-43) or put these (the two initializer and the braces) all on separate lines.

Done

&gt;&gt; Source/WebCore/html/canvas/ArrayBuffer.h:53
&gt;&gt; +    void release() { m_data = 0; m_sizeInBytes = 0; }
&gt; 
&gt; I don&apos;t like the name release here. I think leak is more typical.
&gt; 
&gt; Perhaps replace this with transfer(ArrayBufferContents&amp;) or swap(ArrayBufferContents&amp;) and use that in the two instances where you are using this. 
&gt; In fact I rather like &quot;swap&quot; because that will make it obvious that no leaks are happening in transfer.

swap is a great idea - will do!

&gt;&gt; Source/WebCore/html/canvas/ArrayBuffer.h:57
&gt;&gt; +    { }
&gt; 
&gt; Same as above.

Done

&gt;&gt; Source/WebCore/html/canvas/ArrayBufferView.cpp:78
&gt;&gt; +
&gt; 
&gt; extra blank lines.

Done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496354</commentid>
    <comment_count>11</comment_count>
      <attachid>113689</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-11-04 11:41:13 -0700</bug_when>
    <thetext>Created attachment 113689
CR feedback and tests fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496355</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-04 11:43:30 -0700</bug_when>
    <thetext>Attachment 113689 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/WebCore/html/canvas/ArrayBuffer.h:61:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 8 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>496364</commentid>
    <comment_count>13</comment_count>
      <attachid>113689</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-11-04 11:51:22 -0700</bug_when>
    <thetext>Comment on attachment 113689
CR feedback and tests fixed

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

&gt; Source/WebCore/html/canvas/ArrayBuffer.cpp:132
&gt; +      ArrayBufferView* current = m_firstView;

4 spaces

&gt; Source/WebCore/html/canvas/ArrayBuffer.h:65
&gt; +        m_sizeInBytes = 0; 

This isn&apos;t really a swap.

       void* otherData = other.m_data;
       unsigned otherSizeInBytes = other.m_sizeInBytes;
       other.m_data = m_data;
       other.m_sizeInBytes = m_sizeInBytes;
       m_data = otherData; 
       m_sizeInBytes = otherSizeInBytes;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496370</commentid>
    <comment_count>14</comment_count>
      <attachid>113689</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-04 11:56:40 -0700</bug_when>
    <thetext>Comment on attachment 113689
CR feedback and tests fixed

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

&gt;&gt; Source/WebCore/html/canvas/ArrayBuffer.h:65
&gt;&gt; +        m_sizeInBytes = 0; 
&gt; 
&gt; This isn&apos;t really a swap.
&gt; 
&gt;        void* otherData = other.m_data;
&gt;        unsigned otherSizeInBytes = other.m_sizeInBytes;
&gt;        other.m_data = m_data;
&gt;        other.m_sizeInBytes = m_sizeInBytes;
&gt;        m_data = otherData; 
&gt;        m_sizeInBytes = otherSizeInBytes;

The best way to write a swap is to just swap the data members with the swap function:

    std::swap(m_data, other.m_data);
    std::swap(m_sizeInBytes, other.m_sizeInBytes);

You almost never need to write it any other way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496373</commentid>
    <comment_count>15</comment_count>
      <attachid>113693</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-11-04 12:02:52 -0700</bug_when>
    <thetext>Created attachment 113693
swap-&gt;transfer + assertion

I don&apos;t need a swapping at all, and it is distracting from what the code tries to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496376</commentid>
    <comment_count>16</comment_count>
      <attachid>113695</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-11-04 12:04:58 -0700</bug_when>
    <thetext>Created attachment 113695
Small style fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496485</commentid>
    <comment_count>17</comment_count>
      <attachid>113695</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-04 14:44:12 -0700</bug_when>
    <thetext>Comment on attachment 113695
Small style fix

Clearing flags on attachment: 113695

Committed r99324: &lt;http://trac.webkit.org/changeset/99324&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496486</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-04 14:44:18 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113614</attachid>
            <date>2011-11-03 20:23:31 -0700</date>
            <delta_ts>2011-11-04 10:00:24 -0700</delta_ts>
            <desc>Fix</desc>
            <filename>71535.patch</filename>
            <type>text/plain</type>
            <size>13380</size>
            <attacher name="Dmitry Lomov">dslomov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4ZDkxOWZkLi5kZDhiMGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkg
QEAKKzIwMTEtMTEtMDMgIERtaXRyeSBMb21vdiAgPGRzbG9tb3ZAZ29vZ2xlLmNvbT4KKworICAg
ICAgICBBZGQgdGhlIGFiaWxpdHkgdG8gdHJhbnNmZXIgQXJyYXlCdWZmZXIgYW5kICJuZXV0ZXIi
IGl0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE1
MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0
bWwvY2FudmFzL0FycmF5QnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVy
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXJyYXlCdWZmZXI6OkFycmF5QnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVyOjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkFycmF5QnVmZmVyOjpieXRlTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVy
Ojp0cmFuc2Zlcik6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlckNvbnRlbnRzOjp+QXJy
YXlCdWZmZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlckNvbnRlbnRz
Ojp0cnlBbGxvY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlcjo6YWRkVmlldyk6
CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlcjo6cmVtb3ZlVmlldyk6CisgICAgICAgICog
aHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVy
Q29udGVudHM6OkFycmF5QnVmZmVyQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6QXJyYXlC
dWZmZXJDb250ZW50czo6ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlckNvbnRl
bnRzOjpzaXplSW5CeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlckNvbnRlbnRz
OjpyZWxlYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVyOjp+QXJyYXlCdWZmZXIp
OgorICAgICAgICAqIGh0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBcnJheUJ1ZmZlclZpZXc6OkFycmF5QnVmZmVyVmlldyk6CisgICAgICAgIChXZWJD
b3JlOjpBcnJheUJ1ZmZlclZpZXc6On5BcnJheUJ1ZmZlclZpZXcpOgorICAgICAgICAoV2ViQ29y
ZTo6QXJyYXlCdWZmZXJWaWV3OjpuZXV0ZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0FycmF5
QnVmZmVyVmlldy5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL0RhdGFWaWV3LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFWaWV3OjpuZXV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVZp
ZXc6Om5ldXRlckJpbmRpbmcpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0RhdGFWaWV3Lmg6Cisg
ICAgICAgICogaHRtbC9jYW52YXMvVHlwZWRBcnJheUJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlR5cGVkQXJyYXlCYXNlOjpuZXV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VHlwZWRBcnJheUJh
c2U6Om5ldXRlckJpbmRpbmcpOgorCiAyMDExLTExLTAzICBCZW4gV2VsbHMgIDxiZW53ZWxsc0Bj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgT3B0aW1pemUgY2FudmFzIGZpbGxzIC8gZHJhd0ltYWdl
IHdoZW4gY292ZXJpbmcgZW50aXJlIGNhbnZhcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
QXJyYXlCdWZmZXIuY3BwCmluZGV4IDVjOTNkNGQuLjZkNTRhNTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiQXJyYXlC
dWZmZXJWaWV3LmgiCiAKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAgLTQyLDEwICs0Mywx
MSBAQCBzdGF0aWMgaW50IGNsYW1wVmFsdWUoaW50IHgsIGludCBsZWZ0LCBpbnQgcmlnaHQpCiAK
IFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUodW5zaWduZWQgbnVt
RWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSkKIHsKLSAgICB2b2lkKiBkYXRhID0g
dHJ5QWxsb2NhdGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSk7Ci0gICAgaWYgKCFkYXRh
KQorICAgIEFycmF5QnVmZmVyQ29udGVudHMgY29udGVudHM7CisgICAgQXJyYXlCdWZmZXJDb250
ZW50czo6dHJ5QWxsb2NhdGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSwgY29udGVudHMp
OworICAgIGlmICghY29udGVudHMubV9kYXRhKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEFycmF5QnVmZmVyKGRhdGEsIG51bUVsZW1lbnRzICogZWxlbWVudEJ5
dGVTaXplKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJheUJ1ZmZlcihjb250ZW50cykp
OwogfQogCiBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKEFycmF5
QnVmZmVyKiBvdGhlcikKQEAgLTU1LDMzICs1NywzOSBAQCBQYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKEFycmF5QnVmZmVyKiBvdGhlcikKIAogUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZShjb25zdCB2b2lkKiBzb3VyY2UsIHVuc2ln
bmVkIGJ5dGVMZW5ndGgpCiB7Ci0gICAgdm9pZCogZGF0YSA9IHRyeUFsbG9jYXRlKGJ5dGVMZW5n
dGgsIDEpOwotICAgIGlmICghZGF0YSkKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRz
OworICAgIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKGJ5dGVMZW5ndGgsIDEsIGNv
bnRlbnRzKTsKKyAgICBpZiAoIWNvbnRlbnRzLm1fZGF0YSkKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBhZG9wdFJlZihuZXcgQXJyYXlCdWZmZXIo
ZGF0YSwgYnl0ZUxlbmd0aCkpOworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gYWRv
cHRSZWYobmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7CiAgICAgbWVtY3B5KGJ1ZmZlci0+ZGF0
YSgpLCBzb3VyY2UsIGJ5dGVMZW5ndGgpOwogICAgIHJldHVybiBidWZmZXIucmVsZWFzZSgpOwog
fQogCi1BcnJheUJ1ZmZlcjo6QXJyYXlCdWZmZXIodm9pZCogZGF0YSwgdW5zaWduZWQgc2l6ZUlu
Qnl0ZXMpCi0gICAgOiBtX3NpemVJbkJ5dGVzKHNpemVJbkJ5dGVzKQotICAgICwgbV9kYXRhKGRh
dGEpCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKEFycmF5QnVm
ZmVyQ29udGVudHMmIGNvbnRlbnRzKQogeworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXJyYXlC
dWZmZXIoY29udGVudHMpKTsKK30KKworQXJyYXlCdWZmZXI6OkFycmF5QnVmZmVyKEFycmF5QnVm
ZmVyQ29udGVudHMmIGNvbnRlbnRzKQorICAgIDogbV9jb250ZW50cyhjb250ZW50cy5tX2RhdGEs
IGNvbnRlbnRzLm1fc2l6ZUluQnl0ZXMpCit7CisgICAgY29udGVudHMucmVsZWFzZSgpOwogfQog
CiB2b2lkKiBBcnJheUJ1ZmZlcjo6ZGF0YSgpCiB7Ci0gICAgcmV0dXJuIG1fZGF0YTsKKyAgICBy
ZXR1cm4gbV9jb250ZW50cy5tX2RhdGE7CiB9CiAKIGNvbnN0IHZvaWQqIEFycmF5QnVmZmVyOjpk
YXRhKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kYXRhOworICAgIHJldHVybiBtX2NvbnRlbnRz
Lm1fZGF0YTsKIH0KIAogdW5zaWduZWQgQXJyYXlCdWZmZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAog
ewotICAgIHJldHVybiBtX3NpemVJbkJ5dGVzOworICAgIHJldHVybiBtX2NvbnRlbnRzLm1fc2l6
ZUluQnl0ZXM7CiB9CiAKIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpzbGlj
ZShpbnQgYmVnaW4sIGludCBlbmQpIGNvbnN0CkBAIC0xMDgsMjYgKzExNiw3NCBAQCB1bnNpZ25l
ZCBBcnJheUJ1ZmZlcjo6Y2xhbXBJbmRleChpbnQgaW5kZXgpIGNvbnN0CiAgICAgcmV0dXJuIGNs
YW1wVmFsdWUoaW5kZXgsIDAsIGN1cnJlbnRMZW5ndGgpOwogfQogCi1BcnJheUJ1ZmZlcjo6fkFy
cmF5QnVmZmVyKCkKK3ZvaWQgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBrZWVwQWxpdmUodGhpcyk7CisKKyAg
ICBpZiAoIW1fY29udGVudHMubV9kYXRhKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9F
UlI7CisgICAgICAgIHJlc3VsdC5tX2RhdGEgPSAwOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIHJlc3VsdC5tX2RhdGEgPSBtX2NvbnRlbnRzLm1fZGF0YTsKKyAgICByZXN1bHQubV9zaXpl
SW5CeXRlcyA9IG1fY29udGVudHMubV9zaXplSW5CeXRlczsKKyAgICBtX2NvbnRlbnRzLnJlbGVh
c2UoKTsKKworICAgIGZvciAoQXJyYXlCdWZmZXJWaWV3KiB2aWV3ID0gbV9maXJzdFZpZXc7IHZp
ZXc7KSB7CisgICAgICAgIEFycmF5QnVmZmVyVmlldyogbmV4dCA9IHZpZXctPm1fbmV4dFZpZXc7
CisgICAgICAgIHZpZXctPm5ldXRlcihjb250ZXh0KTsKKyAgICAgICAgdmlldy0+bV9uZXh0Vmll
dyA9IHZpZXctPm1fcHJldlZpZXcgPSAwOworICAgICAgICB2aWV3LT5tX2J1ZmZlciA9IDA7Cisg
ICAgICAgIHZpZXcgPSBuZXh0OworICAgIH0KKyAgICBtX2ZpcnN0VmlldyA9IDA7Cit9CisKK0Fy
cmF5QnVmZmVyQ29udGVudHM6On5BcnJheUJ1ZmZlckNvbnRlbnRzKCkKIHsKICAgICBXVEY6OmZh
c3RGcmVlKG1fZGF0YSk7CiB9CiAKLXZvaWQqIEFycmF5QnVmZmVyOjp0cnlBbGxvY2F0ZSh1bnNp
Z25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKQordm9pZCBBcnJheUJ1
ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQg
ZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzJiByZXN1bHQpCiB7Ci0gICAgdm9p
ZCogcmVzdWx0OwogICAgIC8vIERvIG5vdCBhbGxvdyAzMi1iaXQgb3ZlcmZsb3cgb2YgdGhlIHRv
dGFsIHNpemUuCiAgICAgLy8gRklYTUU6IFdoeSBub3Q/IFRoZSB0cnlGYXN0Q2FsbG9jIGZ1bmN0
aW9uIGFscmVhZHkgY2hlY2tzIGl0cyBhcmd1bWVudHMsCiAgICAgLy8gYW5kIHdpbGwgZmFpbCBp
ZiB0aGVyZSBpcyBhbnkgb3ZlcmZsb3csIHNvIHdoeSBzaG91bGQgd2UgaW5jbHVkZSBhCiAgICAg
Ly8gcmVkdWRhbnQgdW5uZWNlc3NhcmlseSByZXN0cmljdGl2ZSBjaGVjayBoZXJlPwogICAgIGlm
IChudW1FbGVtZW50cykgewogICAgICAgICB1bnNpZ25lZCB0b3RhbFNpemUgPSBudW1FbGVtZW50
cyAqIGVsZW1lbnRCeXRlU2l6ZTsKLSAgICAgICAgaWYgKHRvdGFsU2l6ZSAvIG51bUVsZW1lbnRz
ICE9IGVsZW1lbnRCeXRlU2l6ZSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAo
dG90YWxTaXplIC8gbnVtRWxlbWVudHMgIT0gZWxlbWVudEJ5dGVTaXplKSB7CisgICAgICAgICAg
ICByZXN1bHQubV9kYXRhID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKyAgICBpZiAoV1RGOjp0cnlGYXN0Q2FsbG9jKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNp
emUpLmdldFZhbHVlKHJlc3VsdC5tX2RhdGEpKSB7CisgICAgICAgIHJlc3VsdC5tX3NpemVJbkJ5
dGVzID0gbnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7CisgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgaWYgKFdURjo6dHJ5RmFzdENhbGxvYyhudW1FbGVtZW50cywgZWxlbWVudEJ5dGVT
aXplKS5nZXRWYWx1ZShyZXN1bHQpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIHJldHVy
biAwOworICAgIHJlc3VsdC5tX2RhdGEgPSAwOworfQorCit2b2lkIEFycmF5QnVmZmVyOjphZGRW
aWV3KEFycmF5QnVmZmVyVmlldyogdmlldykKK3sKKyAgICBBU1NFUlQodGhpcyA9PSB2aWV3LT5t
X2J1ZmZlcik7CisgICAgdmlldy0+bV9wcmV2VmlldyA9IDA7CisgICAgdmlldy0+bV9uZXh0Vmll
dyA9IG1fZmlyc3RWaWV3OworICAgIGlmIChtX2ZpcnN0VmlldykKKyAgICAgIG1fZmlyc3RWaWV3
LT5tX3ByZXZWaWV3ID0gdmlldzsKKyAgICBtX2ZpcnN0VmlldyA9IHZpZXc7Cit9CisKK3ZvaWQg
QXJyYXlCdWZmZXI6OnJlbW92ZVZpZXcoQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQoreworICAgIEFT
U0VSVCh0aGlzID09IHZpZXctPm1fYnVmZmVyKTsKKyAgICBpZiAodmlldy0+bV9uZXh0VmlldykK
KyAgICAgICAgdmlldy0+bV9uZXh0Vmlldy0+bV9wcmV2VmlldyA9IHZpZXctPm1fcHJldlZpZXc7
CisgICAgaWYgKHZpZXctPm1fcHJldlZpZXcpCisgICAgICAgIHZpZXctPm1fcHJldlZpZXctPm1f
bmV4dFZpZXcgPSB2aWV3LT5tX25leHRWaWV3OworICAgIGlmIChtX2ZpcnN0VmlldyA9PSB2aWV3
KQorICAgICAgICBtX2ZpcnN0VmlldyA9IHZpZXctPm1fbmV4dFZpZXc7CisgICAgdmlldy0+bV9w
cmV2VmlldyA9IHZpZXctPm1fbmV4dFZpZXcgPSAwOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQXJyYXlCdWZmZXIuaAppbmRleCAzN2FkMjhiLi5jYTQzZmU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyLmgKQEAgLTI4LDE0ICsyOCw0NCBAQAogCiAj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgot
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEFycmF5QnVmZmVyOworY2xhc3MgQXJyYXlC
dWZmZXJWaWV3OworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKK2NsYXNzIEV4Y2VwdGlv
bkNvZGU7CisKK2NsYXNzIEFycmF5QnVmZmVyQ29udGVudHMgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEFycmF5QnVmZmVyQ29udGVudHMpOworICBwdWJsaWM6CisgICAgQXJyYXlCdWZmZXJD
b250ZW50cygpIAorICAgICAgOiBtX2RhdGEoMCksIG1fc2l6ZUluQnl0ZXMoMCkKKyAgICB7IH0K
KyAgICB+QXJyYXlCdWZmZXJDb250ZW50cygpOworCisgICAgdm9pZCogZGF0YSgpIHsgcmV0dXJu
IG1fZGF0YTsgfQorICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgeyByZXR1cm4gbV9zaXplSW5C
eXRlczsgfQorCisgIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEFycmF5QnVmZmVyOworCisg
ICAgc3RhdGljIHZvaWQgdHJ5QWxsb2NhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVk
IGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50cyYpOworICAgIHZvaWQgcmVsZWFz
ZSgpIHsgbV9kYXRhID0gMDsgbV9zaXplSW5CeXRlcyA9IDA7IH0KKworICAgIEFycmF5QnVmZmVy
Q29udGVudHModm9pZCogZGF0YSwgdW5zaWduZWQgc2l6ZUluQnl0ZXMpIAorICAgICAgOiBtX2Rh
dGEoZGF0YSksIG1fc2l6ZUluQnl0ZXMoc2l6ZUluQnl0ZXMpCisgICAgeyB9CisKKyAgICB2b2lk
KiBtX2RhdGE7CisgICAgdW5zaWduZWQgbV9zaXplSW5CeXRlczsKK307CisKIGNsYXNzIEFycmF5
QnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8QXJyYXlCdWZmZXI+IHsKICAgcHVibGljOgogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVu
dHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IGNyZWF0ZShBcnJheUJ1ZmZlciopOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBjcmVhdGUoY29uc3Qgdm9pZCogc291cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3Ro
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVmZmVy
Q29udGVudHMmKTsKIAogICAgIHZvaWQqIGRhdGEoKTsKICAgICBjb25zdCB2b2lkKiBkYXRhKCkg
Y29uc3Q7CkBAIC00NCwxNyArNzQsMjAgQEAgY2xhc3MgQXJyYXlCdWZmZXIgOiBwdWJsaWMgUmVm
Q291bnRlZDxBcnJheUJ1ZmZlcj4gewogICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNl
KGludCBiZWdpbiwgaW50IGVuZCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4g
c2xpY2UoaW50IGJlZ2luKSBjb25zdDsKIAotICAgIH5BcnJheUJ1ZmZlcigpOworICAgIHZvaWQg
YWRkVmlldyhBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICB2b2lkIHJlbW92ZVZpZXcoQXJyYXlCdWZm
ZXJWaWV3Kik7CisKKyAgICB2b2lkIHRyYW5zZmVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBB
cnJheUJ1ZmZlckNvbnRlbnRzJiwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgfkFycmF5QnVmZmVy
KCkgeyB9CiAKICAgcHJpdmF0ZToKLSAgICBBcnJheUJ1ZmZlcih2b2lkKiBkYXRhLCB1bnNpZ25l
ZCBzaXplSW5CeXRlcyk7Ci0gICAgQXJyYXlCdWZmZXIodW5zaWduZWQgbnVtRWxlbWVudHMsIHVu
c2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSk7Ci0gICAgc3RhdGljIHZvaWQqIHRyeUFsbG9jYXRlKHVu
c2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOworICAgIEFycmF5
QnVmZmVyKEFycmF5QnVmZmVyQ29udGVudHMmIGNvbnRlbnRzKTsKICAgICBQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBzbGljZUltcGwodW5zaWduZWQgYmVnaW4sIHVuc2lnbmVkIGVuZCkgY29uc3Q7
CiAgICAgdW5zaWduZWQgY2xhbXBJbmRleChpbnQgaW5kZXgpIGNvbnN0OwogCi0gICAgdW5zaWdu
ZWQgbV9zaXplSW5CeXRlczsKLSAgICB2b2lkKiBtX2RhdGE7CisgICAgQXJyYXlCdWZmZXJDb250
ZW50cyBtX2NvbnRlbnRzOworICAgIEFycmF5QnVmZmVyVmlldyogbV9maXJzdFZpZXc7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
QXJyYXlCdWZmZXJWaWV3LmNwcAppbmRleCBhMmY2MWNhLi4zN2QwZDk1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5jcHAKQEAgLTM2LDEwICszNiwx
NCBAQCBBcnJheUJ1ZmZlclZpZXc6OkFycmF5QnVmZmVyVmlldyhQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBidWZmZXIsCiAgICAgICAgICwgbV9idWZmZXIoYnVmZmVyKQogewogICAgIG1fYmFzZUFk
ZHJlc3MgPSBtX2J1ZmZlciA/IChzdGF0aWNfY2FzdDxjaGFyKj4obV9idWZmZXItPmRhdGEoKSkg
KyBtX2J5dGVPZmZzZXQpIDogMDsKKyAgICBpZiAobV9idWZmZXIpIAorICAgICAgICBtX2J1ZmZl
ci0+YWRkVmlldyh0aGlzKTsKIH0KIAogQXJyYXlCdWZmZXJWaWV3Ojp+QXJyYXlCdWZmZXJWaWV3
KCkKIHsKKyAgICBpZiAobV9idWZmZXIpCisgICAgICAgIG1fYnVmZmVyLT5yZW1vdmVWaWV3KHRo
aXMpOwogfQogCiB2b2lkIEFycmF5QnVmZmVyVmlldzo6c2V0SW1wbChBcnJheUJ1ZmZlclZpZXcq
IGFycmF5LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTcwLDYg
Kzc0LDggQEAgdm9pZCBBcnJheUJ1ZmZlclZpZXc6OnNldFJhbmdlSW1wbChjb25zdCBjaGFyKiBk
YXRhLCBzaXplX3QgZGF0YUJ5dGVMZW5ndGgsIHVuc2kKICAgICBtZW1tb3ZlKGJhc2UgKyBieXRl
T2Zmc2V0LCBkYXRhLCBkYXRhQnl0ZUxlbmd0aCk7CiB9CiAKKworCiB2b2lkIEFycmF5QnVmZmVy
Vmlldzo6emVyb1JhbmdlSW1wbCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRl
TGVuZ3RoLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoYnl0ZU9mZnNldCA+IGJ5dGVM
ZW5ndGgoKQpAQCAtMTAxLDQgKzEwNywxMCBAQCB2b2lkIEFycmF5QnVmZmVyVmlldzo6Y2FsY3Vs
YXRlT2Zmc2V0QW5kTGVuZ3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYQogICAg
ICpsZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZW5kIC0gc3RhcnQpOwogfQogCit2b2lk
IEFycmF5QnVmZmVyVmlldzo6bmV1dGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKQoreworICAg
IG1fYnVmZmVyID0gMDsKKyAgICBtX2J5dGVPZmZzZXQgPSAwOworfQorCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5oCmluZGV4IDdhNTM5MDUuLjMzMDNi
YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyVmll
dy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5oCkBA
IC0xMTksMTMgKzExOSwxOCBAQCBjbGFzcyBBcnJheUJ1ZmZlclZpZXcgOiBwdWJsaWMgUmVmQ291
bnRlZDxBcnJheUJ1ZmZlclZpZXc+IHsKICAgICAgICAgKm51bUVsZW1lbnRzID0gc3RkOjptaW4o
cmVtYWluaW5nRWxlbWVudHMsICpudW1FbGVtZW50cyk7CiAgICAgfQogCisgICAgdmlydHVhbCB2
b2lkIG5ldXRlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisKICAgICAvLyBUaGlzIGlzIHRo
ZSBhZGRyZXNzIG9mIHRoZSBBcnJheUJ1ZmZlcidzIHN0b3JhZ2UsIHBsdXMgdGhlIGJ5dGUgb2Zm
c2V0LgogICAgIHZvaWQqIG1fYmFzZUFkZHJlc3M7CiAKICAgICB1bnNpZ25lZCBtX2J5dGVPZmZz
ZXQ7CiAKICAgcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQXJyYXlCdWZmZXI7CiAgICAgUmVm
UHRyPEFycmF5QnVmZmVyPiBtX2J1ZmZlcjsKKyAgICBBcnJheUJ1ZmZlclZpZXcqIG1fcHJldlZp
ZXc7CisgICAgQXJyYXlCdWZmZXJWaWV3KiBtX25leHRWaWV3OwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZp
ZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuY3BwCmluZGV4IDNk
YjA2ZDYuLmYyZWJlMzIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Rh
dGFWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5jcHAK
QEAgLTIzNSw0ICsyMzUsMTYgQEAgdm9pZCBEYXRhVmlldzo6c2V0RmxvYXQ2NCh1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLAogICAgIHNldERhdGE8
ZG91YmxlPihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7CiB9CiAKK3ZvaWQg
RGF0YVZpZXc6Om5ldXRlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQoreworICAg
IEFycmF5QnVmZmVyVmlldzo6bmV1dGVyKGNvbnRleHQpOworICAgIG1fYnl0ZUxlbmd0aCA9IDA7
CisgICAgbmV1dGVyQmluZGluZyhjb250ZXh0KTsKK30KKwordm9pZCBEYXRhVmlldzo6bmV1dGVy
QmluZGluZyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KikKK3sKKyAgICAvLyBGSVhNRSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE1MzQgCit9CisKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmggYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9EYXRhVmlldy5oCmluZGV4IDVlODBmOGMuLmNkYmVkN2UgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuaApAQCAtNzIsNiArNzIsMTAgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEZsb2F0NjQoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBl
Yyk7IH0KICAgICB2b2lkIHNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgZG91YmxlIHZh
bHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwogCitwcm90ZWN0ZWQ6Cisg
ICAgdmlydHVhbCB2b2lkIG5ldXRlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgdmly
dHVhbCB2b2lkIG5ldXRlckJpbmRpbmcoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworCiBwcml2
YXRlOgogICAgIERhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvVHlwZWRBcnJheUJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1R5cGVkQXJyYXlCYXNlLmgKaW5kZXggZTJhN2M2My4uMzAzZTkzOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVHlwZWRBcnJheUJhc2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9UeXBlZEFycmF5QmFzZS5oCkBAIC0xMTIsNiArMTEyLDE3IEBA
IHByb3RlY3RlZDoKICAgICAgICAgcmV0dXJuIGNyZWF0ZTxTdWJjbGFzcz4oYnVmZmVyKCksIG9m
ZnNldCwgbGVuZ3RoKTsKICAgICB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgbmV1dGVyKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgeworICAgICAgICBBcnJheUJ1ZmZlclZpZXc6
Om5ldXRlcihjb250ZXh0KTsKKyAgICAgICAgbV9sZW5ndGggPSAwOworICAgICAgICBuZXV0ZXJC
aW5kaW5nKGNvbnRleHQpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgbmV1dGVyQmluZGluZyhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KikKKyAgICB7CisgICAgICAgIC8vIEZJWE1FIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTUzNAorICAgIH0KKwogICAgIC8vIFdl
IGRvIG5vdCB3YW50IHRvIGhhdmUgdG8gYWNjZXNzIHRoaXMgdmlhIGEgdmlydHVhbCBmdW5jdGlv
biBpbiBzdWJjbGFzc2VzLAogICAgIC8vIHdoaWNoIGlzIHdoeSBpdCBpcyBwcm90ZWN0ZWQgcmF0
aGVyIHRoYW4gcHJpdmF0ZS4KICAgICB1bnNpZ25lZCBtX2xlbmd0aDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113615</attachid>
            <date>2011-11-03 20:28:49 -0700</date>
            <delta_ts>2011-11-03 20:53:43 -0700</delta_ts>
            <desc>Style</desc>
            <filename>71535.patch</filename>
            <type>text/plain</type>
            <size>13371</size>
            <attacher name="Dmitry Lomov">dslomov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4ZDkxOWZkLi5kZDhiMGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkg
QEAKKzIwMTEtMTEtMDMgIERtaXRyeSBMb21vdiAgPGRzbG9tb3ZAZ29vZ2xlLmNvbT4KKworICAg
ICAgICBBZGQgdGhlIGFiaWxpdHkgdG8gdHJhbnNmZXIgQXJyYXlCdWZmZXIgYW5kICJuZXV0ZXIi
IGl0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE1
MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0
bWwvY2FudmFzL0FycmF5QnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVy
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXJyYXlCdWZmZXI6OkFycmF5QnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVyOjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkFycmF5QnVmZmVyOjpieXRlTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVy
Ojp0cmFuc2Zlcik6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlckNvbnRlbnRzOjp+QXJy
YXlCdWZmZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlckNvbnRlbnRz
Ojp0cnlBbGxvY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlcjo6YWRkVmlldyk6
CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlcjo6cmVtb3ZlVmlldyk6CisgICAgICAgICog
aHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVy
Q29udGVudHM6OkFycmF5QnVmZmVyQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6QXJyYXlC
dWZmZXJDb250ZW50czo6ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlckNvbnRl
bnRzOjpzaXplSW5CeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlckNvbnRlbnRz
OjpyZWxlYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVyOjp+QXJyYXlCdWZmZXIp
OgorICAgICAgICAqIGh0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBcnJheUJ1ZmZlclZpZXc6OkFycmF5QnVmZmVyVmlldyk6CisgICAgICAgIChXZWJD
b3JlOjpBcnJheUJ1ZmZlclZpZXc6On5BcnJheUJ1ZmZlclZpZXcpOgorICAgICAgICAoV2ViQ29y
ZTo6QXJyYXlCdWZmZXJWaWV3OjpuZXV0ZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0FycmF5
QnVmZmVyVmlldy5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL0RhdGFWaWV3LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFWaWV3OjpuZXV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVZp
ZXc6Om5ldXRlckJpbmRpbmcpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0RhdGFWaWV3Lmg6Cisg
ICAgICAgICogaHRtbC9jYW52YXMvVHlwZWRBcnJheUJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlR5cGVkQXJyYXlCYXNlOjpuZXV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VHlwZWRBcnJheUJh
c2U6Om5ldXRlckJpbmRpbmcpOgorCiAyMDExLTExLTAzICBCZW4gV2VsbHMgIDxiZW53ZWxsc0Bj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgT3B0aW1pemUgY2FudmFzIGZpbGxzIC8gZHJhd0ltYWdl
IHdoZW4gY292ZXJpbmcgZW50aXJlIGNhbnZhcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
QXJyYXlCdWZmZXIuY3BwCmluZGV4IDVjOTNkNGQuLjZkNTRhNTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiQXJyYXlC
dWZmZXJWaWV3LmgiCiAKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAgLTQyLDEwICs0Mywx
MSBAQCBzdGF0aWMgaW50IGNsYW1wVmFsdWUoaW50IHgsIGludCBsZWZ0LCBpbnQgcmlnaHQpCiAK
IFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUodW5zaWduZWQgbnVt
RWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSkKIHsKLSAgICB2b2lkKiBkYXRhID0g
dHJ5QWxsb2NhdGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSk7Ci0gICAgaWYgKCFkYXRh
KQorICAgIEFycmF5QnVmZmVyQ29udGVudHMgY29udGVudHM7CisgICAgQXJyYXlCdWZmZXJDb250
ZW50czo6dHJ5QWxsb2NhdGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSwgY29udGVudHMp
OworICAgIGlmICghY29udGVudHMubV9kYXRhKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEFycmF5QnVmZmVyKGRhdGEsIG51bUVsZW1lbnRzICogZWxlbWVudEJ5
dGVTaXplKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJheUJ1ZmZlcihjb250ZW50cykp
OwogfQogCiBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKEFycmF5
QnVmZmVyKiBvdGhlcikKQEAgLTU1LDMzICs1NywzOSBAQCBQYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKEFycmF5QnVmZmVyKiBvdGhlcikKIAogUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZShjb25zdCB2b2lkKiBzb3VyY2UsIHVuc2ln
bmVkIGJ5dGVMZW5ndGgpCiB7Ci0gICAgdm9pZCogZGF0YSA9IHRyeUFsbG9jYXRlKGJ5dGVMZW5n
dGgsIDEpOwotICAgIGlmICghZGF0YSkKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRz
OworICAgIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKGJ5dGVMZW5ndGgsIDEsIGNv
bnRlbnRzKTsKKyAgICBpZiAoIWNvbnRlbnRzLm1fZGF0YSkKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBhZG9wdFJlZihuZXcgQXJyYXlCdWZmZXIo
ZGF0YSwgYnl0ZUxlbmd0aCkpOworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gYWRv
cHRSZWYobmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7CiAgICAgbWVtY3B5KGJ1ZmZlci0+ZGF0
YSgpLCBzb3VyY2UsIGJ5dGVMZW5ndGgpOwogICAgIHJldHVybiBidWZmZXIucmVsZWFzZSgpOwog
fQogCi1BcnJheUJ1ZmZlcjo6QXJyYXlCdWZmZXIodm9pZCogZGF0YSwgdW5zaWduZWQgc2l6ZUlu
Qnl0ZXMpCi0gICAgOiBtX3NpemVJbkJ5dGVzKHNpemVJbkJ5dGVzKQotICAgICwgbV9kYXRhKGRh
dGEpCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKEFycmF5QnVm
ZmVyQ29udGVudHMmIGNvbnRlbnRzKQogeworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXJyYXlC
dWZmZXIoY29udGVudHMpKTsKK30KKworQXJyYXlCdWZmZXI6OkFycmF5QnVmZmVyKEFycmF5QnVm
ZmVyQ29udGVudHMmIGNvbnRlbnRzKQorICAgIDogbV9jb250ZW50cyhjb250ZW50cy5tX2RhdGEs
IGNvbnRlbnRzLm1fc2l6ZUluQnl0ZXMpCit7CisgICAgY29udGVudHMucmVsZWFzZSgpOwogfQog
CiB2b2lkKiBBcnJheUJ1ZmZlcjo6ZGF0YSgpCiB7Ci0gICAgcmV0dXJuIG1fZGF0YTsKKyAgICBy
ZXR1cm4gbV9jb250ZW50cy5tX2RhdGE7CiB9CiAKIGNvbnN0IHZvaWQqIEFycmF5QnVmZmVyOjpk
YXRhKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kYXRhOworICAgIHJldHVybiBtX2NvbnRlbnRz
Lm1fZGF0YTsKIH0KIAogdW5zaWduZWQgQXJyYXlCdWZmZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAog
ewotICAgIHJldHVybiBtX3NpemVJbkJ5dGVzOworICAgIHJldHVybiBtX2NvbnRlbnRzLm1fc2l6
ZUluQnl0ZXM7CiB9CiAKIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpzbGlj
ZShpbnQgYmVnaW4sIGludCBlbmQpIGNvbnN0CkBAIC0xMDgsMjYgKzExNiw3NCBAQCB1bnNpZ25l
ZCBBcnJheUJ1ZmZlcjo6Y2xhbXBJbmRleChpbnQgaW5kZXgpIGNvbnN0CiAgICAgcmV0dXJuIGNs
YW1wVmFsdWUoaW5kZXgsIDAsIGN1cnJlbnRMZW5ndGgpOwogfQogCi1BcnJheUJ1ZmZlcjo6fkFy
cmF5QnVmZmVyKCkKK3ZvaWQgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBrZWVwQWxpdmUodGhpcyk7CisKKyAg
ICBpZiAoIW1fY29udGVudHMubV9kYXRhKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9F
UlI7CisgICAgICAgIHJlc3VsdC5tX2RhdGEgPSAwOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIHJlc3VsdC5tX2RhdGEgPSBtX2NvbnRlbnRzLm1fZGF0YTsKKyAgICByZXN1bHQubV9zaXpl
SW5CeXRlcyA9IG1fY29udGVudHMubV9zaXplSW5CeXRlczsKKyAgICBtX2NvbnRlbnRzLnJlbGVh
c2UoKTsKKworICAgIGZvciAoQXJyYXlCdWZmZXJWaWV3KiB2aWV3ID0gbV9maXJzdFZpZXc7IHZp
ZXc7KSB7CisgICAgICAgIEFycmF5QnVmZmVyVmlldyogbmV4dCA9IHZpZXctPm1fbmV4dFZpZXc7
CisgICAgICAgIHZpZXctPm5ldXRlcihjb250ZXh0KTsKKyAgICAgICAgdmlldy0+bV9uZXh0Vmll
dyA9IHZpZXctPm1fcHJldlZpZXcgPSAwOworICAgICAgICB2aWV3LT5tX2J1ZmZlciA9IDA7Cisg
ICAgICAgIHZpZXcgPSBuZXh0OworICAgIH0KKyAgICBtX2ZpcnN0VmlldyA9IDA7Cit9CisKK0Fy
cmF5QnVmZmVyQ29udGVudHM6On5BcnJheUJ1ZmZlckNvbnRlbnRzKCkKIHsKICAgICBXVEY6OmZh
c3RGcmVlKG1fZGF0YSk7CiB9CiAKLXZvaWQqIEFycmF5QnVmZmVyOjp0cnlBbGxvY2F0ZSh1bnNp
Z25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKQordm9pZCBBcnJheUJ1
ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQg
ZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzJiByZXN1bHQpCiB7Ci0gICAgdm9p
ZCogcmVzdWx0OwogICAgIC8vIERvIG5vdCBhbGxvdyAzMi1iaXQgb3ZlcmZsb3cgb2YgdGhlIHRv
dGFsIHNpemUuCiAgICAgLy8gRklYTUU6IFdoeSBub3Q/IFRoZSB0cnlGYXN0Q2FsbG9jIGZ1bmN0
aW9uIGFscmVhZHkgY2hlY2tzIGl0cyBhcmd1bWVudHMsCiAgICAgLy8gYW5kIHdpbGwgZmFpbCBp
ZiB0aGVyZSBpcyBhbnkgb3ZlcmZsb3csIHNvIHdoeSBzaG91bGQgd2UgaW5jbHVkZSBhCiAgICAg
Ly8gcmVkdWRhbnQgdW5uZWNlc3NhcmlseSByZXN0cmljdGl2ZSBjaGVjayBoZXJlPwogICAgIGlm
IChudW1FbGVtZW50cykgewogICAgICAgICB1bnNpZ25lZCB0b3RhbFNpemUgPSBudW1FbGVtZW50
cyAqIGVsZW1lbnRCeXRlU2l6ZTsKLSAgICAgICAgaWYgKHRvdGFsU2l6ZSAvIG51bUVsZW1lbnRz
ICE9IGVsZW1lbnRCeXRlU2l6ZSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAo
dG90YWxTaXplIC8gbnVtRWxlbWVudHMgIT0gZWxlbWVudEJ5dGVTaXplKSB7CisgICAgICAgICAg
ICByZXN1bHQubV9kYXRhID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKyAgICBpZiAoV1RGOjp0cnlGYXN0Q2FsbG9jKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNp
emUpLmdldFZhbHVlKHJlc3VsdC5tX2RhdGEpKSB7CisgICAgICAgIHJlc3VsdC5tX3NpemVJbkJ5
dGVzID0gbnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7CisgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgaWYgKFdURjo6dHJ5RmFzdENhbGxvYyhudW1FbGVtZW50cywgZWxlbWVudEJ5dGVT
aXplKS5nZXRWYWx1ZShyZXN1bHQpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIHJldHVy
biAwOworICAgIHJlc3VsdC5tX2RhdGEgPSAwOworfQorCit2b2lkIEFycmF5QnVmZmVyOjphZGRW
aWV3KEFycmF5QnVmZmVyVmlldyogdmlldykKK3sKKyAgICBBU1NFUlQodGhpcyA9PSB2aWV3LT5t
X2J1ZmZlcik7CisgICAgdmlldy0+bV9wcmV2VmlldyA9IDA7CisgICAgdmlldy0+bV9uZXh0Vmll
dyA9IG1fZmlyc3RWaWV3OworICAgIGlmIChtX2ZpcnN0VmlldykKKyAgICAgIG1fZmlyc3RWaWV3
LT5tX3ByZXZWaWV3ID0gdmlldzsKKyAgICBtX2ZpcnN0VmlldyA9IHZpZXc7Cit9CisKK3ZvaWQg
QXJyYXlCdWZmZXI6OnJlbW92ZVZpZXcoQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQoreworICAgIEFT
U0VSVCh0aGlzID09IHZpZXctPm1fYnVmZmVyKTsKKyAgICBpZiAodmlldy0+bV9uZXh0VmlldykK
KyAgICAgICAgdmlldy0+bV9uZXh0Vmlldy0+bV9wcmV2VmlldyA9IHZpZXctPm1fcHJldlZpZXc7
CisgICAgaWYgKHZpZXctPm1fcHJldlZpZXcpCisgICAgICAgIHZpZXctPm1fcHJldlZpZXctPm1f
bmV4dFZpZXcgPSB2aWV3LT5tX25leHRWaWV3OworICAgIGlmIChtX2ZpcnN0VmlldyA9PSB2aWV3
KQorICAgICAgICBtX2ZpcnN0VmlldyA9IHZpZXctPm1fbmV4dFZpZXc7CisgICAgdmlldy0+bV9w
cmV2VmlldyA9IHZpZXctPm1fbmV4dFZpZXcgPSAwOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQXJyYXlCdWZmZXIuaAppbmRleCAzN2FkMjhiLi5lZmQyZDdjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyLmgKQEAgLTI4LDE0ICsyOCw0NCBAQAogCiAj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgot
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEFycmF5QnVmZmVyOworY2xhc3MgQXJyYXlC
dWZmZXJWaWV3OworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKK2NsYXNzIEV4Y2VwdGlv
bkNvZGU7CisKK2NsYXNzIEFycmF5QnVmZmVyQ29udGVudHMgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEFycmF5QnVmZmVyQ29udGVudHMpOworICBwdWJsaWM6CisgICAgQXJyYXlCdWZmZXJD
b250ZW50cygpIAorICAgICAgOiBtX2RhdGEoMCksIG1fc2l6ZUluQnl0ZXMoMCkKKyAgICB7IH0K
KyAgICB+QXJyYXlCdWZmZXJDb250ZW50cygpOworCisgICAgdm9pZCogZGF0YSgpIHsgcmV0dXJu
IG1fZGF0YTsgfQorICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgeyByZXR1cm4gbV9zaXplSW5C
eXRlczsgfQorCisgIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEFycmF5QnVmZmVyOworCisg
ICAgc3RhdGljIHZvaWQgdHJ5QWxsb2NhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVk
IGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50cyYpOworICAgIHZvaWQgcmVsZWFz
ZSgpIHsgbV9kYXRhID0gMDsgbV9zaXplSW5CeXRlcyA9IDA7IH0KKworICAgIEFycmF5QnVmZmVy
Q29udGVudHModm9pZCogZGF0YSwgdW5zaWduZWQgc2l6ZUluQnl0ZXMpIAorICAgICAgOiBtX2Rh
dGEoZGF0YSksIG1fc2l6ZUluQnl0ZXMoc2l6ZUluQnl0ZXMpCisgICAgeyB9CisKKyAgICB2b2lk
KiBtX2RhdGE7CisgICAgdW5zaWduZWQgbV9zaXplSW5CeXRlczsKK307CisKIGNsYXNzIEFycmF5
QnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8QXJyYXlCdWZmZXI+IHsKICAgcHVibGljOgogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVu
dHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IGNyZWF0ZShBcnJheUJ1ZmZlciopOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBjcmVhdGUoY29uc3Qgdm9pZCogc291cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3Ro
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVmZmVy
Q29udGVudHMmKTsKIAogICAgIHZvaWQqIGRhdGEoKTsKICAgICBjb25zdCB2b2lkKiBkYXRhKCkg
Y29uc3Q7CkBAIC00NCwxNyArNzQsMjAgQEAgY2xhc3MgQXJyYXlCdWZmZXIgOiBwdWJsaWMgUmVm
Q291bnRlZDxBcnJheUJ1ZmZlcj4gewogICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNl
KGludCBiZWdpbiwgaW50IGVuZCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4g
c2xpY2UoaW50IGJlZ2luKSBjb25zdDsKIAotICAgIH5BcnJheUJ1ZmZlcigpOworICAgIHZvaWQg
YWRkVmlldyhBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICB2b2lkIHJlbW92ZVZpZXcoQXJyYXlCdWZm
ZXJWaWV3Kik7CisKKyAgICB2b2lkIHRyYW5zZmVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBB
cnJheUJ1ZmZlckNvbnRlbnRzJiwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgfkFycmF5QnVmZmVy
KCkgeyB9CiAKICAgcHJpdmF0ZToKLSAgICBBcnJheUJ1ZmZlcih2b2lkKiBkYXRhLCB1bnNpZ25l
ZCBzaXplSW5CeXRlcyk7Ci0gICAgQXJyYXlCdWZmZXIodW5zaWduZWQgbnVtRWxlbWVudHMsIHVu
c2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSk7Ci0gICAgc3RhdGljIHZvaWQqIHRyeUFsbG9jYXRlKHVu
c2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOworICAgIEFycmF5
QnVmZmVyKEFycmF5QnVmZmVyQ29udGVudHMmKTsKICAgICBQYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiBzbGljZUltcGwodW5zaWduZWQgYmVnaW4sIHVuc2lnbmVkIGVuZCkgY29uc3Q7CiAgICAgdW5z
aWduZWQgY2xhbXBJbmRleChpbnQgaW5kZXgpIGNvbnN0OwogCi0gICAgdW5zaWduZWQgbV9zaXpl
SW5CeXRlczsKLSAgICB2b2lkKiBtX2RhdGE7CisgICAgQXJyYXlCdWZmZXJDb250ZW50cyBtX2Nv
bnRlbnRzOworICAgIEFycmF5QnVmZmVyVmlldyogbV9maXJzdFZpZXc7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9B
cnJheUJ1ZmZlclZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQXJyYXlCdWZm
ZXJWaWV3LmNwcAppbmRleCBhMmY2MWNhLi4zN2QwZDk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5jcHAKQEAgLTM2LDEwICszNiwxNCBAQCBBcnJh
eUJ1ZmZlclZpZXc6OkFycmF5QnVmZmVyVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZm
ZXIsCiAgICAgICAgICwgbV9idWZmZXIoYnVmZmVyKQogewogICAgIG1fYmFzZUFkZHJlc3MgPSBt
X2J1ZmZlciA/IChzdGF0aWNfY2FzdDxjaGFyKj4obV9idWZmZXItPmRhdGEoKSkgKyBtX2J5dGVP
ZmZzZXQpIDogMDsKKyAgICBpZiAobV9idWZmZXIpIAorICAgICAgICBtX2J1ZmZlci0+YWRkVmll
dyh0aGlzKTsKIH0KIAogQXJyYXlCdWZmZXJWaWV3Ojp+QXJyYXlCdWZmZXJWaWV3KCkKIHsKKyAg
ICBpZiAobV9idWZmZXIpCisgICAgICAgIG1fYnVmZmVyLT5yZW1vdmVWaWV3KHRoaXMpOwogfQog
CiB2b2lkIEFycmF5QnVmZmVyVmlldzo6c2V0SW1wbChBcnJheUJ1ZmZlclZpZXcqIGFycmF5LCB1
bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTcwLDYgKzc0LDggQEAg
dm9pZCBBcnJheUJ1ZmZlclZpZXc6OnNldFJhbmdlSW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXpl
X3QgZGF0YUJ5dGVMZW5ndGgsIHVuc2kKICAgICBtZW1tb3ZlKGJhc2UgKyBieXRlT2Zmc2V0LCBk
YXRhLCBkYXRhQnl0ZUxlbmd0aCk7CiB9CiAKKworCiB2b2lkIEFycmF5QnVmZmVyVmlldzo6emVy
b1JhbmdlSW1wbCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoYnl0ZU9mZnNldCA+IGJ5dGVMZW5ndGgoKQpA
QCAtMTAxLDQgKzEwNywxMCBAQCB2b2lkIEFycmF5QnVmZmVyVmlldzo6Y2FsY3VsYXRlT2Zmc2V0
QW5kTGVuZ3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYQogICAgICpsZW5ndGgg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZW5kIC0gc3RhcnQpOwogfQogCit2b2lkIEFycmF5QnVm
ZmVyVmlldzo6bmV1dGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKQoreworICAgIG1fYnVmZmVy
ID0gMDsKKyAgICBtX2J5dGVPZmZzZXQgPSAwOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5oCmluZGV4IDdhNTM5MDUuLjMzMDNiYjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5oCkBAIC0xMTksMTMg
KzExOSwxOCBAQCBjbGFzcyBBcnJheUJ1ZmZlclZpZXcgOiBwdWJsaWMgUmVmQ291bnRlZDxBcnJh
eUJ1ZmZlclZpZXc+IHsKICAgICAgICAgKm51bUVsZW1lbnRzID0gc3RkOjptaW4ocmVtYWluaW5n
RWxlbWVudHMsICpudW1FbGVtZW50cyk7CiAgICAgfQogCisgICAgdmlydHVhbCB2b2lkIG5ldXRl
cihTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisKICAgICAvLyBUaGlzIGlzIHRoZSBhZGRyZXNz
IG9mIHRoZSBBcnJheUJ1ZmZlcidzIHN0b3JhZ2UsIHBsdXMgdGhlIGJ5dGUgb2Zmc2V0LgogICAg
IHZvaWQqIG1fYmFzZUFkZHJlc3M7CiAKICAgICB1bnNpZ25lZCBtX2J5dGVPZmZzZXQ7CiAKICAg
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQXJyYXlCdWZmZXI7CiAgICAgUmVmUHRyPEFycmF5
QnVmZmVyPiBtX2J1ZmZlcjsKKyAgICBBcnJheUJ1ZmZlclZpZXcqIG1fcHJldlZpZXc7CisgICAg
QXJyYXlCdWZmZXJWaWV3KiBtX25leHRWaWV3OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuY3BwCmluZGV4IDNkYjA2ZDYuLmYy
ZWJlMzIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5jcHAKQEAgLTIzNSw0
ICsyMzUsMTYgQEAgdm9pZCBEYXRhVmlldzo6c2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0
LCBkb3VibGUgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLAogICAgIHNldERhdGE8ZG91YmxlPihi
eXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7CiB9CiAKK3ZvaWQgRGF0YVZpZXc6
Om5ldXRlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQoreworICAgIEFycmF5QnVm
ZmVyVmlldzo6bmV1dGVyKGNvbnRleHQpOworICAgIG1fYnl0ZUxlbmd0aCA9IDA7CisgICAgbmV1
dGVyQmluZGluZyhjb250ZXh0KTsKK30KKwordm9pZCBEYXRhVmlldzo6bmV1dGVyQmluZGluZyhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KikKK3sKKyAgICAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE1MzQgCit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9EYXRhVmlldy5oCmluZGV4IDVlODBmOGMuLmNkYmVkN2UgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvRGF0YVZpZXcuaApAQCAtNzIsNiArNzIsMTAgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKSB7IHNldEZsb2F0NjQoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KICAg
ICB2b2lkIHNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBib29s
IGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwogCitwcm90ZWN0ZWQ6CisgICAgdmlydHVh
bCB2b2lkIG5ldXRlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgdmlydHVhbCB2b2lk
IG5ldXRlckJpbmRpbmcoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworCiBwcml2YXRlOgogICAg
IERhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
bnNpZ25lZCBieXRlTGVuZ3RoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvVHlwZWRBcnJheUJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1R5cGVk
QXJyYXlCYXNlLmgKaW5kZXggZTJhN2M2My4uMzAzZTkzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvVHlwZWRBcnJheUJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9UeXBlZEFycmF5QmFzZS5oCkBAIC0xMTIsNiArMTEyLDE3IEBAIHByb3RlY3Rl
ZDoKICAgICAgICAgcmV0dXJuIGNyZWF0ZTxTdWJjbGFzcz4oYnVmZmVyKCksIG9mZnNldCwgbGVu
Z3RoKTsKICAgICB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgbmV1dGVyKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQpCisgICAgeworICAgICAgICBBcnJheUJ1ZmZlclZpZXc6Om5ldXRlcihj
b250ZXh0KTsKKyAgICAgICAgbV9sZW5ndGggPSAwOworICAgICAgICBuZXV0ZXJCaW5kaW5nKGNv
bnRleHQpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgbmV1dGVyQmluZGluZyhTY3JpcHRFeGVj
dXRpb25Db250ZXh0KikKKyAgICB7CisgICAgICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTUzNAorICAgIH0KKwogICAgIC8vIFdlIGRvIG5vdCB3
YW50IHRvIGhhdmUgdG8gYWNjZXNzIHRoaXMgdmlhIGEgdmlydHVhbCBmdW5jdGlvbiBpbiBzdWJj
bGFzc2VzLAogICAgIC8vIHdoaWNoIGlzIHdoeSBpdCBpcyBwcm90ZWN0ZWQgcmF0aGVyIHRoYW4g
cHJpdmF0ZS4KICAgICB1bnNpZ25lZCBtX2xlbmd0aDsK
</data>
<flag name="commit-queue"
          id="112032"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113619</attachid>
            <date>2011-11-03 20:53:31 -0700</date>
            <delta_ts>2011-11-04 11:41:13 -0700</delta_ts>
            <desc>Build fixed</desc>
            <filename>71535.patch</filename>
            <type>text/plain</type>
            <size>13423</size>
            <attacher name="Dmitry Lomov">dslomov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4ZDkxOWZkLi5kZDhiMGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkg
QEAKKzIwMTEtMTEtMDMgIERtaXRyeSBMb21vdiAgPGRzbG9tb3ZAZ29vZ2xlLmNvbT4KKworICAg
ICAgICBBZGQgdGhlIGFiaWxpdHkgdG8gdHJhbnNmZXIgQXJyYXlCdWZmZXIgYW5kICJuZXV0ZXIi
IGl0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE1
MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0
bWwvY2FudmFzL0FycmF5QnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVy
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXJyYXlCdWZmZXI6OkFycmF5QnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVyOjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkFycmF5QnVmZmVyOjpieXRlTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVy
Ojp0cmFuc2Zlcik6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlckNvbnRlbnRzOjp+QXJy
YXlCdWZmZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlckNvbnRlbnRz
Ojp0cnlBbGxvY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlcjo6YWRkVmlldyk6
CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlcjo6cmVtb3ZlVmlldyk6CisgICAgICAgICog
aHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVy
Q29udGVudHM6OkFycmF5QnVmZmVyQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6QXJyYXlC
dWZmZXJDb250ZW50czo6ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlckNvbnRl
bnRzOjpzaXplSW5CeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlckNvbnRlbnRz
OjpyZWxlYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVyOjp+QXJyYXlCdWZmZXIp
OgorICAgICAgICAqIGh0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBcnJheUJ1ZmZlclZpZXc6OkFycmF5QnVmZmVyVmlldyk6CisgICAgICAgIChXZWJD
b3JlOjpBcnJheUJ1ZmZlclZpZXc6On5BcnJheUJ1ZmZlclZpZXcpOgorICAgICAgICAoV2ViQ29y
ZTo6QXJyYXlCdWZmZXJWaWV3OjpuZXV0ZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0FycmF5
QnVmZmVyVmlldy5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL0RhdGFWaWV3LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFWaWV3OjpuZXV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVZp
ZXc6Om5ldXRlckJpbmRpbmcpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0RhdGFWaWV3Lmg6Cisg
ICAgICAgICogaHRtbC9jYW52YXMvVHlwZWRBcnJheUJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlR5cGVkQXJyYXlCYXNlOjpuZXV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VHlwZWRBcnJheUJh
c2U6Om5ldXRlckJpbmRpbmcpOgorCiAyMDExLTExLTAzICBCZW4gV2VsbHMgIDxiZW53ZWxsc0Bj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgT3B0aW1pemUgY2FudmFzIGZpbGxzIC8gZHJhd0ltYWdl
IHdoZW4gY292ZXJpbmcgZW50aXJlIGNhbnZhcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
QXJyYXlCdWZmZXIuY3BwCmluZGV4IDVjOTNkNGQuLjZkNTRhNTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiQXJyYXlC
dWZmZXJWaWV3LmgiCiAKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAgLTQyLDEwICs0Mywx
MSBAQCBzdGF0aWMgaW50IGNsYW1wVmFsdWUoaW50IHgsIGludCBsZWZ0LCBpbnQgcmlnaHQpCiAK
IFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUodW5zaWduZWQgbnVt
RWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSkKIHsKLSAgICB2b2lkKiBkYXRhID0g
dHJ5QWxsb2NhdGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSk7Ci0gICAgaWYgKCFkYXRh
KQorICAgIEFycmF5QnVmZmVyQ29udGVudHMgY29udGVudHM7CisgICAgQXJyYXlCdWZmZXJDb250
ZW50czo6dHJ5QWxsb2NhdGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSwgY29udGVudHMp
OworICAgIGlmICghY29udGVudHMubV9kYXRhKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEFycmF5QnVmZmVyKGRhdGEsIG51bUVsZW1lbnRzICogZWxlbWVudEJ5
dGVTaXplKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJheUJ1ZmZlcihjb250ZW50cykp
OwogfQogCiBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKEFycmF5
QnVmZmVyKiBvdGhlcikKQEAgLTU1LDMzICs1NywzOSBAQCBQYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKEFycmF5QnVmZmVyKiBvdGhlcikKIAogUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZShjb25zdCB2b2lkKiBzb3VyY2UsIHVuc2ln
bmVkIGJ5dGVMZW5ndGgpCiB7Ci0gICAgdm9pZCogZGF0YSA9IHRyeUFsbG9jYXRlKGJ5dGVMZW5n
dGgsIDEpOwotICAgIGlmICghZGF0YSkKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRz
OworICAgIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKGJ5dGVMZW5ndGgsIDEsIGNv
bnRlbnRzKTsKKyAgICBpZiAoIWNvbnRlbnRzLm1fZGF0YSkKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBhZG9wdFJlZihuZXcgQXJyYXlCdWZmZXIo
ZGF0YSwgYnl0ZUxlbmd0aCkpOworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gYWRv
cHRSZWYobmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7CiAgICAgbWVtY3B5KGJ1ZmZlci0+ZGF0
YSgpLCBzb3VyY2UsIGJ5dGVMZW5ndGgpOwogICAgIHJldHVybiBidWZmZXIucmVsZWFzZSgpOwog
fQogCi1BcnJheUJ1ZmZlcjo6QXJyYXlCdWZmZXIodm9pZCogZGF0YSwgdW5zaWduZWQgc2l6ZUlu
Qnl0ZXMpCi0gICAgOiBtX3NpemVJbkJ5dGVzKHNpemVJbkJ5dGVzKQotICAgICwgbV9kYXRhKGRh
dGEpCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKEFycmF5QnVm
ZmVyQ29udGVudHMmIGNvbnRlbnRzKQogeworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXJyYXlC
dWZmZXIoY29udGVudHMpKTsKK30KKworQXJyYXlCdWZmZXI6OkFycmF5QnVmZmVyKEFycmF5QnVm
ZmVyQ29udGVudHMmIGNvbnRlbnRzKQorICAgIDogbV9jb250ZW50cyhjb250ZW50cy5tX2RhdGEs
IGNvbnRlbnRzLm1fc2l6ZUluQnl0ZXMpCit7CisgICAgY29udGVudHMucmVsZWFzZSgpOwogfQog
CiB2b2lkKiBBcnJheUJ1ZmZlcjo6ZGF0YSgpCiB7Ci0gICAgcmV0dXJuIG1fZGF0YTsKKyAgICBy
ZXR1cm4gbV9jb250ZW50cy5tX2RhdGE7CiB9CiAKIGNvbnN0IHZvaWQqIEFycmF5QnVmZmVyOjpk
YXRhKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kYXRhOworICAgIHJldHVybiBtX2NvbnRlbnRz
Lm1fZGF0YTsKIH0KIAogdW5zaWduZWQgQXJyYXlCdWZmZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAog
ewotICAgIHJldHVybiBtX3NpemVJbkJ5dGVzOworICAgIHJldHVybiBtX2NvbnRlbnRzLm1fc2l6
ZUluQnl0ZXM7CiB9CiAKIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpzbGlj
ZShpbnQgYmVnaW4sIGludCBlbmQpIGNvbnN0CkBAIC0xMDgsMjYgKzExNiw3NCBAQCB1bnNpZ25l
ZCBBcnJheUJ1ZmZlcjo6Y2xhbXBJbmRleChpbnQgaW5kZXgpIGNvbnN0CiAgICAgcmV0dXJuIGNs
YW1wVmFsdWUoaW5kZXgsIDAsIGN1cnJlbnRMZW5ndGgpOwogfQogCi1BcnJheUJ1ZmZlcjo6fkFy
cmF5QnVmZmVyKCkKK3ZvaWQgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBrZWVwQWxpdmUodGhpcyk7CisKKyAg
ICBpZiAoIW1fY29udGVudHMubV9kYXRhKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9F
UlI7CisgICAgICAgIHJlc3VsdC5tX2RhdGEgPSAwOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIHJlc3VsdC5tX2RhdGEgPSBtX2NvbnRlbnRzLm1fZGF0YTsKKyAgICByZXN1bHQubV9zaXpl
SW5CeXRlcyA9IG1fY29udGVudHMubV9zaXplSW5CeXRlczsKKyAgICBtX2NvbnRlbnRzLnJlbGVh
c2UoKTsKKworICAgIGZvciAoQXJyYXlCdWZmZXJWaWV3KiB2aWV3ID0gbV9maXJzdFZpZXc7IHZp
ZXc7KSB7CisgICAgICAgIEFycmF5QnVmZmVyVmlldyogbmV4dCA9IHZpZXctPm1fbmV4dFZpZXc7
CisgICAgICAgIHZpZXctPm5ldXRlcihjb250ZXh0KTsKKyAgICAgICAgdmlldy0+bV9uZXh0Vmll
dyA9IHZpZXctPm1fcHJldlZpZXcgPSAwOworICAgICAgICB2aWV3LT5tX2J1ZmZlciA9IDA7Cisg
ICAgICAgIHZpZXcgPSBuZXh0OworICAgIH0KKyAgICBtX2ZpcnN0VmlldyA9IDA7Cit9CisKK0Fy
cmF5QnVmZmVyQ29udGVudHM6On5BcnJheUJ1ZmZlckNvbnRlbnRzKCkKIHsKICAgICBXVEY6OmZh
c3RGcmVlKG1fZGF0YSk7CiB9CiAKLXZvaWQqIEFycmF5QnVmZmVyOjp0cnlBbGxvY2F0ZSh1bnNp
Z25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKQordm9pZCBBcnJheUJ1
ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQg
ZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzJiByZXN1bHQpCiB7Ci0gICAgdm9p
ZCogcmVzdWx0OwogICAgIC8vIERvIG5vdCBhbGxvdyAzMi1iaXQgb3ZlcmZsb3cgb2YgdGhlIHRv
dGFsIHNpemUuCiAgICAgLy8gRklYTUU6IFdoeSBub3Q/IFRoZSB0cnlGYXN0Q2FsbG9jIGZ1bmN0
aW9uIGFscmVhZHkgY2hlY2tzIGl0cyBhcmd1bWVudHMsCiAgICAgLy8gYW5kIHdpbGwgZmFpbCBp
ZiB0aGVyZSBpcyBhbnkgb3ZlcmZsb3csIHNvIHdoeSBzaG91bGQgd2UgaW5jbHVkZSBhCiAgICAg
Ly8gcmVkdWRhbnQgdW5uZWNlc3NhcmlseSByZXN0cmljdGl2ZSBjaGVjayBoZXJlPwogICAgIGlm
IChudW1FbGVtZW50cykgewogICAgICAgICB1bnNpZ25lZCB0b3RhbFNpemUgPSBudW1FbGVtZW50
cyAqIGVsZW1lbnRCeXRlU2l6ZTsKLSAgICAgICAgaWYgKHRvdGFsU2l6ZSAvIG51bUVsZW1lbnRz
ICE9IGVsZW1lbnRCeXRlU2l6ZSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAo
dG90YWxTaXplIC8gbnVtRWxlbWVudHMgIT0gZWxlbWVudEJ5dGVTaXplKSB7CisgICAgICAgICAg
ICByZXN1bHQubV9kYXRhID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKyAgICBpZiAoV1RGOjp0cnlGYXN0Q2FsbG9jKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNp
emUpLmdldFZhbHVlKHJlc3VsdC5tX2RhdGEpKSB7CisgICAgICAgIHJlc3VsdC5tX3NpemVJbkJ5
dGVzID0gbnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7CisgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgaWYgKFdURjo6dHJ5RmFzdENhbGxvYyhudW1FbGVtZW50cywgZWxlbWVudEJ5dGVT
aXplKS5nZXRWYWx1ZShyZXN1bHQpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIHJldHVy
biAwOworICAgIHJlc3VsdC5tX2RhdGEgPSAwOworfQorCit2b2lkIEFycmF5QnVmZmVyOjphZGRW
aWV3KEFycmF5QnVmZmVyVmlldyogdmlldykKK3sKKyAgICBBU1NFUlQodGhpcyA9PSB2aWV3LT5t
X2J1ZmZlcik7CisgICAgdmlldy0+bV9wcmV2VmlldyA9IDA7CisgICAgdmlldy0+bV9uZXh0Vmll
dyA9IG1fZmlyc3RWaWV3OworICAgIGlmIChtX2ZpcnN0VmlldykKKyAgICAgIG1fZmlyc3RWaWV3
LT5tX3ByZXZWaWV3ID0gdmlldzsKKyAgICBtX2ZpcnN0VmlldyA9IHZpZXc7Cit9CisKK3ZvaWQg
QXJyYXlCdWZmZXI6OnJlbW92ZVZpZXcoQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQoreworICAgIEFT
U0VSVCh0aGlzID09IHZpZXctPm1fYnVmZmVyKTsKKyAgICBpZiAodmlldy0+bV9uZXh0VmlldykK
KyAgICAgICAgdmlldy0+bV9uZXh0Vmlldy0+bV9wcmV2VmlldyA9IHZpZXctPm1fcHJldlZpZXc7
CisgICAgaWYgKHZpZXctPm1fcHJldlZpZXcpCisgICAgICAgIHZpZXctPm1fcHJldlZpZXctPm1f
bmV4dFZpZXcgPSB2aWV3LT5tX25leHRWaWV3OworICAgIGlmIChtX2ZpcnN0VmlldyA9PSB2aWV3
KQorICAgICAgICBtX2ZpcnN0VmlldyA9IHZpZXctPm1fbmV4dFZpZXc7CisgICAgdmlldy0+bV9w
cmV2VmlldyA9IHZpZXctPm1fbmV4dFZpZXcgPSAwOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQXJyYXlCdWZmZXIuaAppbmRleCAzN2FkMjhiLi41ZWNmNjEyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyLmgKQEAgLTI2LDE2ICsyNiw0NyBAQAogI2lm
bmRlZiBBcnJheUJ1ZmZlcl9oCiAjZGVmaW5lIEFycmF5QnVmZmVyX2gKIAorI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQXJyYXlCdWZm
ZXI7CitjbGFzcyBBcnJheUJ1ZmZlclZpZXc7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OworCitjbGFzcyBBcnJheUJ1ZmZlckNvbnRlbnRzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShBcnJheUJ1ZmZlckNvbnRlbnRzKTsKKyAgcHVibGljOgorICAgIEFycmF5QnVmZmVyQ29udGVu
dHMoKSAKKyAgICAgIDogbV9kYXRhKDApLCBtX3NpemVJbkJ5dGVzKDApCisgICAgeyB9CisgICAg
fkFycmF5QnVmZmVyQ29udGVudHMoKTsKKworICAgIHZvaWQqIGRhdGEoKSB7IHJldHVybiBtX2Rh
dGE7IH0KKyAgICB1bnNpZ25lZCBzaXplSW5CeXRlcygpIHsgcmV0dXJuIG1fc2l6ZUluQnl0ZXM7
IH0KKworICBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBBcnJheUJ1ZmZlcjsKKworICAgIHN0
YXRpYyB2b2lkIHRyeUFsbG9jYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVt
ZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHMmKTsKKyAgICB2b2lkIHJlbGVhc2UoKSB7
IG1fZGF0YSA9IDA7IG1fc2l6ZUluQnl0ZXMgPSAwOyB9CisKKyAgICBBcnJheUJ1ZmZlckNvbnRl
bnRzKHZvaWQqIGRhdGEsIHVuc2lnbmVkIHNpemVJbkJ5dGVzKSAKKyAgICAgIDogbV9kYXRhKGRh
dGEpLCBtX3NpemVJbkJ5dGVzKHNpemVJbkJ5dGVzKQorICAgIHsgfQorCisgICAgdm9pZCogbV9k
YXRhOworICAgIHVuc2lnbmVkIG1fc2l6ZUluQnl0ZXM7Cit9OworCiBjbGFzcyBBcnJheUJ1ZmZl
ciA6IHB1YmxpYyBSZWZDb3VudGVkPEFycmF5QnVmZmVyPiB7CiAgIHB1YmxpYzoKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1
bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBjcmVhdGUoQXJyYXlCdWZmZXIqKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4gY3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShBcnJheUJ1ZmZlckNvbnRl
bnRzJik7CiAKICAgICB2b2lkKiBkYXRhKCk7CiAgICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0
OwpAQCAtNDQsMTcgKzc1LDIwIEBAIGNsYXNzIEFycmF5QnVmZmVyIDogcHVibGljIFJlZkNvdW50
ZWQ8QXJyYXlCdWZmZXI+IHsKICAgICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBzbGljZShpbnQg
YmVnaW4sIGludCBlbmQpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNl
KGludCBiZWdpbikgY29uc3Q7CiAKLSAgICB+QXJyYXlCdWZmZXIoKTsKKyAgICB2b2lkIGFkZFZp
ZXcoQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgdm9pZCByZW1vdmVWaWV3KEFycmF5QnVmZmVyVmll
dyopOworCisgICAgdm9pZCB0cmFuc2ZlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQXJyYXlC
dWZmZXJDb250ZW50cyYsIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIH5BcnJheUJ1ZmZlcigpIHsg
fQogCiAgIHByaXZhdGU6Ci0gICAgQXJyYXlCdWZmZXIodm9pZCogZGF0YSwgdW5zaWduZWQgc2l6
ZUluQnl0ZXMpOwotICAgIEFycmF5QnVmZmVyKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25l
ZCBlbGVtZW50Qnl0ZVNpemUpOwotICAgIHN0YXRpYyB2b2lkKiB0cnlBbGxvY2F0ZSh1bnNpZ25l
ZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKTsKKyAgICBBcnJheUJ1ZmZl
cihBcnJheUJ1ZmZlckNvbnRlbnRzJik7CiAgICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xp
Y2VJbXBsKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpIGNvbnN0OwogICAgIHVuc2lnbmVk
IGNsYW1wSW5kZXgoaW50IGluZGV4KSBjb25zdDsKIAotICAgIHVuc2lnbmVkIG1fc2l6ZUluQnl0
ZXM7Ci0gICAgdm9pZCogbV9kYXRhOworICAgIEFycmF5QnVmZmVyQ29udGVudHMgbV9jb250ZW50
czsKKyAgICBBcnJheUJ1ZmZlclZpZXcqIG1fZmlyc3RWaWV3OwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQXJyYXlC
dWZmZXJWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyVmll
dy5jcHAKaW5kZXggYTJmNjFjYS4uMzdkMGQ5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQXJyYXlCdWZmZXJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuY3BwCkBAIC0zNiwxMCArMzYsMTQgQEAgQXJyYXlCdWZm
ZXJWaWV3OjpBcnJheUJ1ZmZlclZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLAog
ICAgICAgICAsIG1fYnVmZmVyKGJ1ZmZlcikKIHsKICAgICBtX2Jhc2VBZGRyZXNzID0gbV9idWZm
ZXIgPyAoc3RhdGljX2Nhc3Q8Y2hhcio+KG1fYnVmZmVyLT5kYXRhKCkpICsgbV9ieXRlT2Zmc2V0
KSA6IDA7CisgICAgaWYgKG1fYnVmZmVyKSAKKyAgICAgICAgbV9idWZmZXItPmFkZFZpZXcodGhp
cyk7CiB9CiAKIEFycmF5QnVmZmVyVmlldzo6fkFycmF5QnVmZmVyVmlldygpCiB7CisgICAgaWYg
KG1fYnVmZmVyKQorICAgICAgICBtX2J1ZmZlci0+cmVtb3ZlVmlldyh0aGlzKTsKIH0KIAogdm9p
ZCBBcnJheUJ1ZmZlclZpZXc6OnNldEltcGwoQXJyYXlCdWZmZXJWaWV3KiBhcnJheSwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC03MCw2ICs3NCw4IEBAIHZvaWQg
QXJyYXlCdWZmZXJWaWV3OjpzZXRSYW5nZUltcGwoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGRh
dGFCeXRlTGVuZ3RoLCB1bnNpCiAgICAgbWVtbW92ZShiYXNlICsgYnl0ZU9mZnNldCwgZGF0YSwg
ZGF0YUJ5dGVMZW5ndGgpOwogfQogCisKKwogdm9pZCBBcnJheUJ1ZmZlclZpZXc6Onplcm9SYW5n
ZUltcGwodW5zaWduZWQgYnl0ZU9mZnNldCwgc2l6ZV90IHJhbmdlQnl0ZUxlbmd0aCwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKGJ5dGVPZmZzZXQgPiBieXRlTGVuZ3RoKCkKQEAgLTEw
MSw0ICsxMDcsMTAgQEAgdm9pZCBBcnJheUJ1ZmZlclZpZXc6OmNhbGN1bGF0ZU9mZnNldEFuZExl
bmd0aChpbnQgc3RhcnQsIGludCBlbmQsIHVuc2lnbmVkIGFycmEKICAgICAqbGVuZ3RoID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGVuZCAtIHN0YXJ0KTsKIH0KIAordm9pZCBBcnJheUJ1ZmZlclZp
ZXc6Om5ldXRlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KikKK3sKKyAgICBtX2J1ZmZlciA9IDA7
CisgICAgbV9ieXRlT2Zmc2V0ID0gMDsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXJWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9BcnJheUJ1ZmZlclZpZXcuaAppbmRleCA3YTUzOTA1Li4zMzAzYmIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaApAQCAtMTE5LDEzICsxMTks
MTggQEAgY2xhc3MgQXJyYXlCdWZmZXJWaWV3IDogcHVibGljIFJlZkNvdW50ZWQ8QXJyYXlCdWZm
ZXJWaWV3PiB7CiAgICAgICAgICpudW1FbGVtZW50cyA9IHN0ZDo6bWluKHJlbWFpbmluZ0VsZW1l
bnRzLCAqbnVtRWxlbWVudHMpOwogICAgIH0KIAorICAgIHZpcnR1YWwgdm9pZCBuZXV0ZXIoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCopOworCiAgICAgLy8gVGhpcyBpcyB0aGUgYWRkcmVzcyBvZiB0
aGUgQXJyYXlCdWZmZXIncyBzdG9yYWdlLCBwbHVzIHRoZSBieXRlIG9mZnNldC4KICAgICB2b2lk
KiBtX2Jhc2VBZGRyZXNzOwogCiAgICAgdW5zaWduZWQgbV9ieXRlT2Zmc2V0OwogCiAgIHByaXZh
dGU6CisgICAgZnJpZW5kIGNsYXNzIEFycmF5QnVmZmVyOwogICAgIFJlZlB0cjxBcnJheUJ1ZmZl
cj4gbV9idWZmZXI7CisgICAgQXJyYXlCdWZmZXJWaWV3KiBtX3ByZXZWaWV3OworICAgIEFycmF5
QnVmZmVyVmlldyogbV9uZXh0VmlldzsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmNwcAppbmRleCAzZGIwNmQ2Li5mMmViZTMy
IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuY3BwCkBAIC0yMzUsNCArMjM1
LDE2IEBAIHZvaWQgRGF0YVZpZXc6OnNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgZG91
YmxlIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwKICAgICBzZXREYXRhPGRvdWJsZT4oYnl0ZU9m
ZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwogfQogCit2b2lkIERhdGFWaWV3OjpuZXV0
ZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBBcnJheUJ1ZmZlclZp
ZXc6Om5ldXRlcihjb250ZXh0KTsKKyAgICBtX2J5dGVMZW5ndGggPSAwOworICAgIG5ldXRlckJp
bmRpbmcoY29udGV4dCk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6Om5ldXRlckJpbmRpbmcoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCopCit7CisgICAgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTcxNTM0IAorfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
RGF0YVZpZXcuaAppbmRleCA1ZTgwZjhjLi5jZGJlZDdlIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0RhdGFWaWV3LmgKQEAgLTcyLDYgKzcyLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEZs
b2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBl
YykgeyBzZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9CiAgICAgdm9p
ZCBzZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgYm9vbCBsaXR0
bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9p
ZCBuZXV0ZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworICAgIHZpcnR1YWwgdm9pZCBuZXV0
ZXJCaW5kaW5nKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKwogcHJpdmF0ZToKICAgICBEYXRh
VmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWdu
ZWQgYnl0ZUxlbmd0aCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1R5cGVkQXJyYXlCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9UeXBlZEFycmF5
QmFzZS5oCmluZGV4IGUyYTdjNjMuLjMwM2U5MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1R5cGVkQXJyYXlCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvVHlwZWRBcnJheUJhc2UuaApAQCAtMTEyLDYgKzExMiwxNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgICAgIHJldHVybiBjcmVhdGU8U3ViY2xhc3M+KGJ1ZmZlcigpLCBvZmZzZXQsIGxlbmd0aCk7
CiAgICAgfQogCisgICAgdmlydHVhbCB2b2lkIG5ldXRlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgQXJyYXlCdWZmZXJWaWV3OjpuZXV0ZXIoY29udGV4
dCk7CisgICAgICAgIG1fbGVuZ3RoID0gMDsKKyAgICAgICAgbmV1dGVyQmluZGluZyhjb250ZXh0
KTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIG5ldXRlckJpbmRpbmcoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCopCisgICAgeworICAgICAgICAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzE1MzQKKyAgICB9CisKICAgICAvLyBXZSBkbyBub3Qgd2FudCB0
byBoYXZlIHRvIGFjY2VzcyB0aGlzIHZpYSBhIHZpcnR1YWwgZnVuY3Rpb24gaW4gc3ViY2xhc3Nl
cywKICAgICAvLyB3aGljaCBpcyB3aHkgaXQgaXMgcHJvdGVjdGVkIHJhdGhlciB0aGFuIHByaXZh
dGUuCiAgICAgdW5zaWduZWQgbV9sZW5ndGg7Cg==
</data>
<flag name="commit-queue"
          id="112038"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113689</attachid>
            <date>2011-11-04 11:41:13 -0700</date>
            <delta_ts>2011-11-04 12:02:52 -0700</delta_ts>
            <desc>CR feedback and tests fixed</desc>
            <filename>71535.patch</filename>
            <type>text/plain</type>
            <size>13037</size>
            <attacher name="Dmitry Lomov">dslomov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5ZGU0OTJiLi5iYmI4ZDZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkg
QEAKKzIwMTEtMTEtMDMgIERtaXRyeSBMb21vdiAgPGRzbG9tb3ZAZ29vZ2xlLmNvbT4KKworICAg
ICAgICBBZGQgdGhlIGFiaWxpdHkgdG8gdHJhbnNmZXIgQXJyYXlCdWZmZXIgYW5kICJuZXV0ZXIi
IGl0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE1
MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0
bWwvY2FudmFzL0FycmF5QnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVy
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXJyYXlCdWZmZXI6OkFycmF5QnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVyOjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkFycmF5QnVmZmVyOjpieXRlTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVy
Ojp0cmFuc2Zlcik6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlckNvbnRlbnRzOjp+QXJy
YXlCdWZmZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlckNvbnRlbnRz
Ojp0cnlBbGxvY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlcjo6YWRkVmlldyk6
CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlcjo6cmVtb3ZlVmlldyk6CisgICAgICAgICog
aHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVy
Q29udGVudHM6OkFycmF5QnVmZmVyQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6QXJyYXlC
dWZmZXJDb250ZW50czo6ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlckNvbnRl
bnRzOjpzaXplSW5CeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlckNvbnRlbnRz
OjpyZWxlYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVyOjp+QXJyYXlCdWZmZXIp
OgorICAgICAgICAqIGh0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBcnJheUJ1ZmZlclZpZXc6OkFycmF5QnVmZmVyVmlldyk6CisgICAgICAgIChXZWJD
b3JlOjpBcnJheUJ1ZmZlclZpZXc6On5BcnJheUJ1ZmZlclZpZXcpOgorICAgICAgICAoV2ViQ29y
ZTo6QXJyYXlCdWZmZXJWaWV3OjpuZXV0ZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0FycmF5
QnVmZmVyVmlldy5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL0RhdGFWaWV3LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFWaWV3OjpuZXV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVZp
ZXc6Om5ldXRlckJpbmRpbmcpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0RhdGFWaWV3Lmg6Cisg
ICAgICAgICogaHRtbC9jYW52YXMvVHlwZWRBcnJheUJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlR5cGVkQXJyYXlCYXNlOjpuZXV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VHlwZWRBcnJheUJh
c2U6Om5ldXRlckJpbmRpbmcpOgorCiAyMDExLTExLTAzICBBZHJpZW5uZSBXYWxrZXIgIDxlbm5l
QGdvb2dsZS5jb20+CiAKICAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgY2hlY2tlcmJvYXJk
aW5nIGZvciBtaXNzaW5nIGxheWVyIHRpbGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9B
cnJheUJ1ZmZlci5jcHAKaW5kZXggNWM5M2Q0ZC4uY2MzNjNhNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0FycmF5QnVmZmVyLmNwcApAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJBcnJheUJ1
ZmZlclZpZXcuaCIKIAogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtNDIsMTAgKzQzLDEx
IEBAIHN0YXRpYyBpbnQgY2xhbXBWYWx1ZShpbnQgeCwgaW50IGxlZnQsIGludCByaWdodCkKIAog
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZSh1bnNpZ25lZCBudW1F
bGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKQogewotICAgIHZvaWQqIGRhdGEgPSB0
cnlBbGxvY2F0ZShudW1FbGVtZW50cywgZWxlbWVudEJ5dGVTaXplKTsKLSAgICBpZiAoIWRhdGEp
CisgICAgQXJyYXlCdWZmZXJDb250ZW50cyBjb250ZW50czsKKyAgICBBcnJheUJ1ZmZlckNvbnRl
bnRzOjp0cnlBbGxvY2F0ZShudW1FbGVtZW50cywgZWxlbWVudEJ5dGVTaXplLCBjb250ZW50cyk7
CisgICAgaWYgKCFjb250ZW50cy5tX2RhdGEpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQXJyYXlCdWZmZXIoZGF0YSwgbnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0
ZVNpemUpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7
CiB9CiAKIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlC
dWZmZXIqIG90aGVyKQpAQCAtNTUsMzMgKzU3LDM5IEBAIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZmZXIqIG90aGVyKQogCiBQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5zaWdu
ZWQgYnl0ZUxlbmd0aCkKIHsKLSAgICB2b2lkKiBkYXRhID0gdHJ5QWxsb2NhdGUoYnl0ZUxlbmd0
aCwgMSk7Ci0gICAgaWYgKCFkYXRhKQorICAgIEFycmF5QnVmZmVyQ29udGVudHMgY29udGVudHM7
CisgICAgQXJyYXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUoYnl0ZUxlbmd0aCwgMSwgY29u
dGVudHMpOworICAgIGlmICghY29udGVudHMubV9kYXRhKQogICAgICAgICByZXR1cm4gMDsKLSAg
ICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IGFkb3B0UmVmKG5ldyBBcnJheUJ1ZmZlcihk
YXRhLCBieXRlTGVuZ3RoKSk7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBhZG9w
dFJlZihuZXcgQXJyYXlCdWZmZXIoY29udGVudHMpKTsKICAgICBtZW1jcHkoYnVmZmVyLT5kYXRh
KCksIHNvdXJjZSwgYnl0ZUxlbmd0aCk7CiAgICAgcmV0dXJuIGJ1ZmZlci5yZWxlYXNlKCk7CiB9
CiAKLUFycmF5QnVmZmVyOjpBcnJheUJ1ZmZlcih2b2lkKiBkYXRhLCB1bnNpZ25lZCBzaXplSW5C
eXRlcykKLSAgICA6IG1fc2l6ZUluQnl0ZXMoc2l6ZUluQnl0ZXMpCi0gICAgLCBtX2RhdGEoZGF0
YSkKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZm
ZXJDb250ZW50cyYgY29udGVudHMpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJheUJ1
ZmZlcihjb250ZW50cykpOworfQorCitBcnJheUJ1ZmZlcjo6QXJyYXlCdWZmZXIoQXJyYXlCdWZm
ZXJDb250ZW50cyYgY29udGVudHMpCisgICAgOiBtX2ZpcnN0VmlldygwKQoreworICAgIGNvbnRl
bnRzLnN3YXAobV9jb250ZW50cyk7CiB9CiAKIHZvaWQqIEFycmF5QnVmZmVyOjpkYXRhKCkKIHsK
LSAgICByZXR1cm4gbV9kYXRhOworICAgIHJldHVybiBtX2NvbnRlbnRzLm1fZGF0YTsKIH0KIAog
Y29uc3Qgdm9pZCogQXJyYXlCdWZmZXI6OmRhdGEoKSBjb25zdAogewotICAgIHJldHVybiBtX2Rh
dGE7CisgICAgcmV0dXJuIG1fY29udGVudHMubV9kYXRhOwogfQogCiB1bnNpZ25lZCBBcnJheUJ1
ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fc2l6ZUluQnl0ZXM7Cisg
ICAgcmV0dXJuIG1fY29udGVudHMubV9zaXplSW5CeXRlczsKIH0KIAogUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OnNsaWNlKGludCBiZWdpbiwgaW50IGVuZCkgY29uc3QKQEAg
LTEwOCwyNiArMTE2LDcwIEBAIHVuc2lnbmVkIEFycmF5QnVmZmVyOjpjbGFtcEluZGV4KGludCBp
bmRleCkgY29uc3QKICAgICByZXR1cm4gY2xhbXBWYWx1ZShpbmRleCwgMCwgY3VycmVudExlbmd0
aCk7CiB9CiAKLUFycmF5QnVmZmVyOjp+QXJyYXlCdWZmZXIoKQordm9pZCBBcnJheUJ1ZmZlcjo6
dHJhbnNmZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgQXJyYXlCdWZmZXJDb250
ZW50cyYgcmVzdWx0LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZm
ZXI+IGtlZXBBbGl2ZSh0aGlzKTsKKworICAgIGlmICghbV9jb250ZW50cy5tX2RhdGEpIHsKKyAg
ICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IDA7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2NvbnRlbnRzLnN3YXAocmVzdWx0KTsK
KworICAgIHdoaWxlIChtX2ZpcnN0VmlldykgeworICAgICAgQXJyYXlCdWZmZXJWaWV3KiBjdXJy
ZW50ID0gbV9maXJzdFZpZXc7CisgICAgICByZW1vdmVWaWV3KGN1cnJlbnQpOworICAgICAgY3Vy
cmVudC0+bmV1dGVyKGNvbnRleHQpOworICAgIH0KK30KKworQXJyYXlCdWZmZXJDb250ZW50czo6
fkFycmF5QnVmZmVyQ29udGVudHMoKQogewogICAgIFdURjo6ZmFzdEZyZWUobV9kYXRhKTsKIH0K
IAotdm9pZCogQXJyYXlCdWZmZXI6OnRyeUFsbG9jYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1
bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpCit2b2lkIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFs
bG9jYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEFy
cmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCkKIHsKLSAgICB2b2lkKiByZXN1bHQ7CiAgICAgLy8g
RG8gbm90IGFsbG93IDMyLWJpdCBvdmVyZmxvdyBvZiB0aGUgdG90YWwgc2l6ZS4KICAgICAvLyBG
SVhNRTogV2h5IG5vdD8gVGhlIHRyeUZhc3RDYWxsb2MgZnVuY3Rpb24gYWxyZWFkeSBjaGVja3Mg
aXRzIGFyZ3VtZW50cywKICAgICAvLyBhbmQgd2lsbCBmYWlsIGlmIHRoZXJlIGlzIGFueSBvdmVy
Zmxvdywgc28gd2h5IHNob3VsZCB3ZSBpbmNsdWRlIGEKICAgICAvLyByZWR1ZGFudCB1bm5lY2Vz
c2FyaWx5IHJlc3RyaWN0aXZlIGNoZWNrIGhlcmU/CiAgICAgaWYgKG51bUVsZW1lbnRzKSB7CiAg
ICAgICAgIHVuc2lnbmVkIHRvdGFsU2l6ZSA9IG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXpl
OwotICAgICAgICBpZiAodG90YWxTaXplIC8gbnVtRWxlbWVudHMgIT0gZWxlbWVudEJ5dGVTaXpl
KQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmICh0b3RhbFNpemUgLyBudW1FbGVt
ZW50cyAhPSBlbGVtZW50Qnl0ZVNpemUpIHsKKyAgICAgICAgICAgIHJlc3VsdC5tX2RhdGEgPSAw
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIGlmIChXVEY6OnRy
eUZhc3RDYWxsb2MobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSkuZ2V0VmFsdWUocmVzdWx0
Lm1fZGF0YSkpIHsKKyAgICAgICAgcmVzdWx0Lm1fc2l6ZUluQnl0ZXMgPSBudW1FbGVtZW50cyAq
IGVsZW1lbnRCeXRlU2l6ZTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoV1RGOjp0
cnlGYXN0Q2FsbG9jKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUpLmdldFZhbHVlKHJlc3Vs
dCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgcmV0dXJuIDA7CisgICAgcmVzdWx0Lm1f
ZGF0YSA9IDA7Cit9CisKK3ZvaWQgQXJyYXlCdWZmZXI6OmFkZFZpZXcoQXJyYXlCdWZmZXJWaWV3
KiB2aWV3KQoreworICAgIHZpZXctPm1fYnVmZmVyID0gdGhpczsKKyAgICB2aWV3LT5tX3ByZXZW
aWV3ID0gMDsKKyAgICB2aWV3LT5tX25leHRWaWV3ID0gbV9maXJzdFZpZXc7CisgICAgaWYgKG1f
Zmlyc3RWaWV3KQorICAgICAgICBtX2ZpcnN0Vmlldy0+bV9wcmV2VmlldyA9IHZpZXc7CisgICAg
bV9maXJzdFZpZXcgPSB2aWV3OworfQorCit2b2lkIEFycmF5QnVmZmVyOjpyZW1vdmVWaWV3KEFy
cmF5QnVmZmVyVmlldyogdmlldykKK3sKKyAgICBBU1NFUlQodGhpcyA9PSB2aWV3LT5tX2J1ZmZl
cik7CisgICAgaWYgKHZpZXctPm1fbmV4dFZpZXcpCisgICAgICAgIHZpZXctPm1fbmV4dFZpZXct
Pm1fcHJldlZpZXcgPSB2aWV3LT5tX3ByZXZWaWV3OworICAgIGlmICh2aWV3LT5tX3ByZXZWaWV3
KQorICAgICAgICB2aWV3LT5tX3ByZXZWaWV3LT5tX25leHRWaWV3ID0gdmlldy0+bV9uZXh0Vmll
dzsKKyAgICBpZiAobV9maXJzdFZpZXcgPT0gdmlldykKKyAgICAgICAgbV9maXJzdFZpZXcgPSB2
aWV3LT5tX25leHRWaWV3OworICAgIHZpZXctPm1fcHJldlZpZXcgPSB2aWV3LT5tX25leHRWaWV3
ID0gMDsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQXJy
YXlCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyLmgKaW5k
ZXggMzdhZDI4Yi4uMGQzMTI4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQXJyYXlCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1
ZmZlci5oCkBAIC0yNiwxNiArMjYsNTUgQEAKICNpZm5kZWYgQXJyYXlCdWZmZXJfaAogI2RlZmlu
ZSBBcnJheUJ1ZmZlcl9oCiAKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIEFycmF5QnVmZmVyOworY2xhc3MgQXJyYXlCdWZmZXJWaWV3
OworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKworY2xhc3MgQXJyYXlCdWZmZXJDb250
ZW50cyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXJyYXlCdWZmZXJDb250ZW50cyk7Citw
dWJsaWM6CisgICAgQXJyYXlCdWZmZXJDb250ZW50cygpIAorICAgICAgICA6IG1fZGF0YSgwKQor
ICAgICAgICAsIG1fc2l6ZUluQnl0ZXMoMCkKKyAgICB7IH0KKworICAgIH5BcnJheUJ1ZmZlckNv
bnRlbnRzKCk7CisKKyAgICB2b2lkKiBkYXRhKCkgeyByZXR1cm4gbV9kYXRhOyB9CisgICAgdW5z
aWduZWQgc2l6ZUluQnl0ZXMoKSB7IHJldHVybiBtX3NpemVJbkJ5dGVzOyB9CisKK3ByaXZhdGU6
CisgICAgQXJyYXlCdWZmZXJDb250ZW50cyh2b2lkKiBkYXRhLCB1bnNpZ25lZCBzaXplSW5CeXRl
cykgCisgICAgICAgIDogbV9kYXRhKGRhdGEpCisgICAgICAgICwgbV9zaXplSW5CeXRlcyhzaXpl
SW5CeXRlcykKKyAgICB7IH0KKworICAgIGZyaWVuZCBjbGFzcyBBcnJheUJ1ZmZlcjsKKworICAg
IHN0YXRpYyB2b2lkIHRyeUFsbG9jYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBl
bGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHMmKTsKKyAgICB2b2lkIHN3YXAoQXJy
YXlCdWZmZXJDb250ZW50cyYgb3RoZXIpIHsgCisgICAgICAgIG90aGVyLm1fZGF0YSA9IG1fZGF0
YTsKKyAgICAgICAgb3RoZXIubV9zaXplSW5CeXRlcyA9IG1fc2l6ZUluQnl0ZXM7CisgICAgICAg
IG1fZGF0YSA9IDA7IAorICAgICAgICBtX3NpemVJbkJ5dGVzID0gMDsgCisgICAgfQorCisgICAg
dm9pZCogbV9kYXRhOworICAgIHVuc2lnbmVkIG1fc2l6ZUluQnl0ZXM7Cit9OworCiBjbGFzcyBB
cnJheUJ1ZmZlciA6IHB1YmxpYyBSZWZDb3VudGVkPEFycmF5QnVmZmVyPiB7Ci0gIHB1YmxpYzoK
K3B1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKHVuc2ln
bmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUoQXJyYXlCdWZmZXIqKTsKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5zaWdu
ZWQgYnl0ZUxlbmd0aCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0
ZShBcnJheUJ1ZmZlckNvbnRlbnRzJik7CiAKICAgICB2b2lkKiBkYXRhKCk7CiAgICAgY29uc3Qg
dm9pZCogZGF0YSgpIGNvbnN0OwpAQCAtNDQsMTcgKzgzLDIwIEBAIGNsYXNzIEFycmF5QnVmZmVy
IDogcHVibGljIFJlZkNvdW50ZWQ8QXJyYXlCdWZmZXI+IHsKICAgICBQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBzbGljZShpbnQgYmVnaW4sIGludCBlbmQpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IHNsaWNlKGludCBiZWdpbikgY29uc3Q7CiAKLSAgICB+QXJyYXlCdWZmZXIo
KTsKKyAgICB2b2lkIGFkZFZpZXcoQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgdm9pZCByZW1vdmVW
aWV3KEFycmF5QnVmZmVyVmlldyopOworCisgICAgdm9pZCB0cmFuc2ZlcihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgQXJyYXlCdWZmZXJDb250ZW50cyYsIEV4Y2VwdGlvbkNvZGUmKTsKIAotICBw
cml2YXRlOgotICAgIEFycmF5QnVmZmVyKHZvaWQqIGRhdGEsIHVuc2lnbmVkIHNpemVJbkJ5dGVz
KTsKLSAgICBBcnJheUJ1ZmZlcih1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVu
dEJ5dGVTaXplKTsKLSAgICBzdGF0aWMgdm9pZCogdHJ5QWxsb2NhdGUodW5zaWduZWQgbnVtRWxl
bWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSk7CisgICAgfkFycmF5QnVmZmVyKCkgeyB9
CisKK3ByaXZhdGU6CisgICAgQXJyYXlCdWZmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYpOwogICAg
IFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlSW1wbCh1bnNpZ25lZCBiZWdpbiwgdW5zaWdu
ZWQgZW5kKSBjb25zdDsKICAgICB1bnNpZ25lZCBjbGFtcEluZGV4KGludCBpbmRleCkgY29uc3Q7
CiAKLSAgICB1bnNpZ25lZCBtX3NpemVJbkJ5dGVzOwotICAgIHZvaWQqIG1fZGF0YTsKKyAgICBB
cnJheUJ1ZmZlckNvbnRlbnRzIG1fY29udGVudHM7CisgICAgQXJyYXlCdWZmZXJWaWV3KiBtX2Zp
cnN0VmlldzsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuY3BwCmluZGV4IGEyZjYxY2EuLmNlZGQxYmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXJWaWV3LmNwcApA
QCAtMzYsMTAgKzM2LDE0IEBAIEFycmF5QnVmZmVyVmlldzo6QXJyYXlCdWZmZXJWaWV3KFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKICAgICAgICAgLCBtX2J1ZmZlcihidWZmZXIpCiB7
CiAgICAgbV9iYXNlQWRkcmVzcyA9IG1fYnVmZmVyID8gKHN0YXRpY19jYXN0PGNoYXIqPihtX2J1
ZmZlci0+ZGF0YSgpKSArIG1fYnl0ZU9mZnNldCkgOiAwOworICAgIGlmIChtX2J1ZmZlcikgCisg
ICAgICAgIG1fYnVmZmVyLT5hZGRWaWV3KHRoaXMpOwogfQogCiBBcnJheUJ1ZmZlclZpZXc6On5B
cnJheUJ1ZmZlclZpZXcoKQogeworICAgIGlmIChtX2J1ZmZlcikKKyAgICAgICAgbV9idWZmZXIt
PnJlbW92ZVZpZXcodGhpcyk7CiB9CiAKIHZvaWQgQXJyYXlCdWZmZXJWaWV3OjpzZXRJbXBsKEFy
cmF5QnVmZmVyVmlldyogYXJyYXksIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQpAQCAtMTAxLDQgKzEwNSwxMCBAQCB2b2lkIEFycmF5QnVmZmVyVmlldzo6Y2FsY3VsYXRl
T2Zmc2V0QW5kTGVuZ3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYQogICAgICps
ZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZW5kIC0gc3RhcnQpOwogfQogCit2b2lkIEFy
cmF5QnVmZmVyVmlldzo6bmV1dGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKQoreworICAgIG1f
YnVmZmVyID0gMDsKKyAgICBtX2J5dGVPZmZzZXQgPSAwOworfQorCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5oCmluZGV4IDdhNTM5MDUuLjMzMDNiYjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5oCkBAIC0x
MTksMTMgKzExOSwxOCBAQCBjbGFzcyBBcnJheUJ1ZmZlclZpZXcgOiBwdWJsaWMgUmVmQ291bnRl
ZDxBcnJheUJ1ZmZlclZpZXc+IHsKICAgICAgICAgKm51bUVsZW1lbnRzID0gc3RkOjptaW4ocmVt
YWluaW5nRWxlbWVudHMsICpudW1FbGVtZW50cyk7CiAgICAgfQogCisgICAgdmlydHVhbCB2b2lk
IG5ldXRlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisKICAgICAvLyBUaGlzIGlzIHRoZSBh
ZGRyZXNzIG9mIHRoZSBBcnJheUJ1ZmZlcidzIHN0b3JhZ2UsIHBsdXMgdGhlIGJ5dGUgb2Zmc2V0
LgogICAgIHZvaWQqIG1fYmFzZUFkZHJlc3M7CiAKICAgICB1bnNpZ25lZCBtX2J5dGVPZmZzZXQ7
CiAKICAgcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQXJyYXlCdWZmZXI7CiAgICAgUmVmUHRy
PEFycmF5QnVmZmVyPiBtX2J1ZmZlcjsKKyAgICBBcnJheUJ1ZmZlclZpZXcqIG1fcHJldlZpZXc7
CisgICAgQXJyYXlCdWZmZXJWaWV3KiBtX25leHRWaWV3OwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuY3BwCmluZGV4IDNkYjA2
ZDYuLmYyZWJlMzIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFW
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5jcHAKQEAg
LTIzNSw0ICsyMzUsMTYgQEAgdm9pZCBEYXRhVmlldzo6c2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRl
T2Zmc2V0LCBkb3VibGUgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLAogICAgIHNldERhdGE8ZG91
YmxlPihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7CiB9CiAKK3ZvaWQgRGF0
YVZpZXc6Om5ldXRlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQoreworICAgIEFy
cmF5QnVmZmVyVmlldzo6bmV1dGVyKGNvbnRleHQpOworICAgIG1fYnl0ZUxlbmd0aCA9IDA7Cisg
ICAgbmV1dGVyQmluZGluZyhjb250ZXh0KTsKK30KKwordm9pZCBEYXRhVmlldzo6bmV1dGVyQmlu
ZGluZyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KikKK3sKKyAgICAvLyBGSVhNRSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE1MzQgCit9CisKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9EYXRhVmlldy5oCmluZGV4IDVlODBmOGMuLmNkYmVkN2UgMTAwNzU1Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuaApAQCAtNzIsNiArNzIsMTAgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKSB7IHNldEZsb2F0NjQoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7
IH0KICAgICB2b2lkIHNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVl
LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwogCitwcm90ZWN0ZWQ6CisgICAg
dmlydHVhbCB2b2lkIG5ldXRlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgdmlydHVh
bCB2b2lkIG5ldXRlckJpbmRpbmcoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworCiBwcml2YXRl
OgogICAgIERhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zm
c2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvVHlwZWRBcnJheUJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1R5cGVkQXJyYXlCYXNlLmgKaW5kZXggZTJhN2M2My4uYWE1ZDU4MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVHlwZWRBcnJheUJhc2UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9UeXBlZEFycmF5QmFzZS5oCkBAIC0xMTIsNiArMTEyLDE4IEBAIHBy
b3RlY3RlZDoKICAgICAgICAgcmV0dXJuIGNyZWF0ZTxTdWJjbGFzcz4oYnVmZmVyKCksIG9mZnNl
dCwgbGVuZ3RoKTsKICAgICB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgbmV1dGVyKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgeworICAgICAgICBBcnJheUJ1ZmZlclZpZXc6Om5l
dXRlcihjb250ZXh0KTsKKyAgICAgICAgbV9sZW5ndGggPSAwOworICAgICAgICBuZXV0ZXJCaW5k
aW5nKGNvbnRleHQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBuZXV0ZXJCaW5kaW5nKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqKQorICAgIHsKKyAgICAgICAgLy8gRklYTUUgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNTM0CisgICAgfQorCiAgICAgLy8gV2Ug
ZG8gbm90IHdhbnQgdG8gaGF2ZSB0byBhY2Nlc3MgdGhpcyB2aWEgYSB2aXJ0dWFsIGZ1bmN0aW9u
IGluIHN1YmNsYXNzZXMsCiAgICAgLy8gd2hpY2ggaXMgd2h5IGl0IGlzIHByb3RlY3RlZCByYXRo
ZXIgdGhhbiBwcml2YXRlLgogICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwo=
</data>
<flag name="review"
          id="112131"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113693</attachid>
            <date>2011-11-04 12:02:52 -0700</date>
            <delta_ts>2011-11-04 12:04:58 -0700</delta_ts>
            <desc>swap-&gt;transfer + assertion</desc>
            <filename>71535.patch</filename>
            <type>text/plain</type>
            <size>13086</size>
            <attacher name="Dmitry Lomov">dslomov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5ZGU0OTJiLi5iYmI4ZDZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkg
QEAKKzIwMTEtMTEtMDMgIERtaXRyeSBMb21vdiAgPGRzbG9tb3ZAZ29vZ2xlLmNvbT4KKworICAg
ICAgICBBZGQgdGhlIGFiaWxpdHkgdG8gdHJhbnNmZXIgQXJyYXlCdWZmZXIgYW5kICJuZXV0ZXIi
IGl0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE1
MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0
bWwvY2FudmFzL0FycmF5QnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVy
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXJyYXlCdWZmZXI6OkFycmF5QnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVyOjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkFycmF5QnVmZmVyOjpieXRlTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVy
Ojp0cmFuc2Zlcik6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlckNvbnRlbnRzOjp+QXJy
YXlCdWZmZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlckNvbnRlbnRz
Ojp0cnlBbGxvY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlcjo6YWRkVmlldyk6
CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlcjo6cmVtb3ZlVmlldyk6CisgICAgICAgICog
aHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVy
Q29udGVudHM6OkFycmF5QnVmZmVyQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6QXJyYXlC
dWZmZXJDb250ZW50czo6ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlckNvbnRl
bnRzOjpzaXplSW5CeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlckNvbnRlbnRz
OjpyZWxlYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVyOjp+QXJyYXlCdWZmZXIp
OgorICAgICAgICAqIGh0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBcnJheUJ1ZmZlclZpZXc6OkFycmF5QnVmZmVyVmlldyk6CisgICAgICAgIChXZWJD
b3JlOjpBcnJheUJ1ZmZlclZpZXc6On5BcnJheUJ1ZmZlclZpZXcpOgorICAgICAgICAoV2ViQ29y
ZTo6QXJyYXlCdWZmZXJWaWV3OjpuZXV0ZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0FycmF5
QnVmZmVyVmlldy5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL0RhdGFWaWV3LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFWaWV3OjpuZXV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVZp
ZXc6Om5ldXRlckJpbmRpbmcpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0RhdGFWaWV3Lmg6Cisg
ICAgICAgICogaHRtbC9jYW52YXMvVHlwZWRBcnJheUJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlR5cGVkQXJyYXlCYXNlOjpuZXV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VHlwZWRBcnJheUJh
c2U6Om5ldXRlckJpbmRpbmcpOgorCiAyMDExLTExLTAzICBBZHJpZW5uZSBXYWxrZXIgIDxlbm5l
QGdvb2dsZS5jb20+CiAKICAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgY2hlY2tlcmJvYXJk
aW5nIGZvciBtaXNzaW5nIGxheWVyIHRpbGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9B
cnJheUJ1ZmZlci5jcHAKaW5kZXggNWM5M2Q0ZC4uOTg2YzEwYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0FycmF5QnVmZmVyLmNwcApAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJBcnJheUJ1
ZmZlclZpZXcuaCIKIAogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtNDIsMTAgKzQzLDEx
IEBAIHN0YXRpYyBpbnQgY2xhbXBWYWx1ZShpbnQgeCwgaW50IGxlZnQsIGludCByaWdodCkKIAog
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZSh1bnNpZ25lZCBudW1F
bGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKQogewotICAgIHZvaWQqIGRhdGEgPSB0
cnlBbGxvY2F0ZShudW1FbGVtZW50cywgZWxlbWVudEJ5dGVTaXplKTsKLSAgICBpZiAoIWRhdGEp
CisgICAgQXJyYXlCdWZmZXJDb250ZW50cyBjb250ZW50czsKKyAgICBBcnJheUJ1ZmZlckNvbnRl
bnRzOjp0cnlBbGxvY2F0ZShudW1FbGVtZW50cywgZWxlbWVudEJ5dGVTaXplLCBjb250ZW50cyk7
CisgICAgaWYgKCFjb250ZW50cy5tX2RhdGEpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQXJyYXlCdWZmZXIoZGF0YSwgbnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0
ZVNpemUpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7
CiB9CiAKIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlC
dWZmZXIqIG90aGVyKQpAQCAtNTUsMzMgKzU3LDM5IEBAIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZmZXIqIG90aGVyKQogCiBQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5zaWdu
ZWQgYnl0ZUxlbmd0aCkKIHsKLSAgICB2b2lkKiBkYXRhID0gdHJ5QWxsb2NhdGUoYnl0ZUxlbmd0
aCwgMSk7Ci0gICAgaWYgKCFkYXRhKQorICAgIEFycmF5QnVmZmVyQ29udGVudHMgY29udGVudHM7
CisgICAgQXJyYXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUoYnl0ZUxlbmd0aCwgMSwgY29u
dGVudHMpOworICAgIGlmICghY29udGVudHMubV9kYXRhKQogICAgICAgICByZXR1cm4gMDsKLSAg
ICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IGFkb3B0UmVmKG5ldyBBcnJheUJ1ZmZlcihk
YXRhLCBieXRlTGVuZ3RoKSk7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBhZG9w
dFJlZihuZXcgQXJyYXlCdWZmZXIoY29udGVudHMpKTsKICAgICBtZW1jcHkoYnVmZmVyLT5kYXRh
KCksIHNvdXJjZSwgYnl0ZUxlbmd0aCk7CiAgICAgcmV0dXJuIGJ1ZmZlci5yZWxlYXNlKCk7CiB9
CiAKLUFycmF5QnVmZmVyOjpBcnJheUJ1ZmZlcih2b2lkKiBkYXRhLCB1bnNpZ25lZCBzaXplSW5C
eXRlcykKLSAgICA6IG1fc2l6ZUluQnl0ZXMoc2l6ZUluQnl0ZXMpCi0gICAgLCBtX2RhdGEoZGF0
YSkKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZm
ZXJDb250ZW50cyYgY29udGVudHMpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJheUJ1
ZmZlcihjb250ZW50cykpOworfQorCitBcnJheUJ1ZmZlcjo6QXJyYXlCdWZmZXIoQXJyYXlCdWZm
ZXJDb250ZW50cyYgY29udGVudHMpCisgICAgOiBtX2ZpcnN0VmlldygwKQoreworICAgIGNvbnRl
bnRzLnRyYW5zZmVyKG1fY29udGVudHMpOwogfQogCiB2b2lkKiBBcnJheUJ1ZmZlcjo6ZGF0YSgp
CiB7Ci0gICAgcmV0dXJuIG1fZGF0YTsKKyAgICByZXR1cm4gbV9jb250ZW50cy5tX2RhdGE7CiB9
CiAKIGNvbnN0IHZvaWQqIEFycmF5QnVmZmVyOjpkYXRhKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9kYXRhOworICAgIHJldHVybiBtX2NvbnRlbnRzLm1fZGF0YTsKIH0KIAogdW5zaWduZWQgQXJy
YXlCdWZmZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAogewotICAgIHJldHVybiBtX3NpemVJbkJ5dGVz
OworICAgIHJldHVybiBtX2NvbnRlbnRzLm1fc2l6ZUluQnl0ZXM7CiB9CiAKIFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpzbGljZShpbnQgYmVnaW4sIGludCBlbmQpIGNvbnN0
CkBAIC0xMDgsMjYgKzExNiw3MCBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Y2xhbXBJbmRleChp
bnQgaW5kZXgpIGNvbnN0CiAgICAgcmV0dXJuIGNsYW1wVmFsdWUoaW5kZXgsIDAsIGN1cnJlbnRM
ZW5ndGgpOwogfQogCi1BcnJheUJ1ZmZlcjo6fkFycmF5QnVmZmVyKCkKK3ZvaWQgQXJyYXlCdWZm
ZXI6OnRyYW5zZmVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEFycmF5QnVmZmVy
Q29udGVudHMmIHJlc3VsdCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgUmVmUHRyPEFycmF5
QnVmZmVyPiBrZWVwQWxpdmUodGhpcyk7CisKKyAgICBpZiAoIW1fY29udGVudHMubV9kYXRhKSB7
CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJlc3VsdC5tX2RhdGEg
PSAwOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jb250ZW50cy50cmFuc2Zlcihy
ZXN1bHQpOworCisgICAgd2hpbGUgKG1fZmlyc3RWaWV3KSB7CisgICAgICBBcnJheUJ1ZmZlclZp
ZXcqIGN1cnJlbnQgPSBtX2ZpcnN0VmlldzsKKyAgICAgIHJlbW92ZVZpZXcoY3VycmVudCk7Cisg
ICAgICBjdXJyZW50LT5uZXV0ZXIoY29udGV4dCk7CisgICAgfQorfQorCitBcnJheUJ1ZmZlckNv
bnRlbnRzOjp+QXJyYXlCdWZmZXJDb250ZW50cygpCiB7CiAgICAgV1RGOjpmYXN0RnJlZShtX2Rh
dGEpOwogfQogCi12b2lkKiBBcnJheUJ1ZmZlcjo6dHJ5QWxsb2NhdGUodW5zaWduZWQgbnVtRWxl
bWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSkKK3ZvaWQgQXJyYXlCdWZmZXJDb250ZW50
czo6dHJ5QWxsb2NhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRl
U2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50cyYgcmVzdWx0KQogewotICAgIHZvaWQqIHJlc3VsdDsK
ICAgICAvLyBEbyBub3QgYWxsb3cgMzItYml0IG92ZXJmbG93IG9mIHRoZSB0b3RhbCBzaXplLgog
ICAgIC8vIEZJWE1FOiBXaHkgbm90PyBUaGUgdHJ5RmFzdENhbGxvYyBmdW5jdGlvbiBhbHJlYWR5
IGNoZWNrcyBpdHMgYXJndW1lbnRzLAogICAgIC8vIGFuZCB3aWxsIGZhaWwgaWYgdGhlcmUgaXMg
YW55IG92ZXJmbG93LCBzbyB3aHkgc2hvdWxkIHdlIGluY2x1ZGUgYQogICAgIC8vIHJlZHVkYW50
IHVubmVjZXNzYXJpbHkgcmVzdHJpY3RpdmUgY2hlY2sgaGVyZT8KICAgICBpZiAobnVtRWxlbWVu
dHMpIHsKICAgICAgICAgdW5zaWduZWQgdG90YWxTaXplID0gbnVtRWxlbWVudHMgKiBlbGVtZW50
Qnl0ZVNpemU7Ci0gICAgICAgIGlmICh0b3RhbFNpemUgLyBudW1FbGVtZW50cyAhPSBlbGVtZW50
Qnl0ZVNpemUpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKHRvdGFsU2l6ZSAv
IG51bUVsZW1lbnRzICE9IGVsZW1lbnRCeXRlU2l6ZSkgeworICAgICAgICAgICAgcmVzdWx0Lm1f
ZGF0YSA9IDA7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgaWYg
KFdURjo6dHJ5RmFzdENhbGxvYyhudW1FbGVtZW50cywgZWxlbWVudEJ5dGVTaXplKS5nZXRWYWx1
ZShyZXN1bHQubV9kYXRhKSkgeworICAgICAgICByZXN1bHQubV9zaXplSW5CeXRlcyA9IG51bUVs
ZW1lbnRzICogZWxlbWVudEJ5dGVTaXplOworICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlm
IChXVEY6OnRyeUZhc3RDYWxsb2MobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSkuZ2V0VmFs
dWUocmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICByZXR1cm4gMDsKKyAgICBy
ZXN1bHQubV9kYXRhID0gMDsKK30KKwordm9pZCBBcnJheUJ1ZmZlcjo6YWRkVmlldyhBcnJheUJ1
ZmZlclZpZXcqIHZpZXcpCit7CisgICAgdmlldy0+bV9idWZmZXIgPSB0aGlzOworICAgIHZpZXct
Pm1fcHJldlZpZXcgPSAwOworICAgIHZpZXctPm1fbmV4dFZpZXcgPSBtX2ZpcnN0VmlldzsKKyAg
ICBpZiAobV9maXJzdFZpZXcpCisgICAgICAgIG1fZmlyc3RWaWV3LT5tX3ByZXZWaWV3ID0gdmll
dzsKKyAgICBtX2ZpcnN0VmlldyA9IHZpZXc7Cit9CisKK3ZvaWQgQXJyYXlCdWZmZXI6OnJlbW92
ZVZpZXcoQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQoreworICAgIEFTU0VSVCh0aGlzID09IHZpZXct
Pm1fYnVmZmVyKTsKKyAgICBpZiAodmlldy0+bV9uZXh0VmlldykKKyAgICAgICAgdmlldy0+bV9u
ZXh0Vmlldy0+bV9wcmV2VmlldyA9IHZpZXctPm1fcHJldlZpZXc7CisgICAgaWYgKHZpZXctPm1f
cHJldlZpZXcpCisgICAgICAgIHZpZXctPm1fcHJldlZpZXctPm1fbmV4dFZpZXcgPSB2aWV3LT5t
X25leHRWaWV3OworICAgIGlmIChtX2ZpcnN0VmlldyA9PSB2aWV3KQorICAgICAgICBtX2ZpcnN0
VmlldyA9IHZpZXctPm1fbmV4dFZpZXc7CisgICAgdmlldy0+bV9wcmV2VmlldyA9IHZpZXctPm1f
bmV4dFZpZXcgPSAwOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9BcnJheUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQXJyYXlCdWZm
ZXIuaAppbmRleCAzN2FkMjhiLi44ODllYjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0FycmF5QnVmZmVyLmgKQEAgLTI2LDE2ICsyNiw1NyBAQAogI2lmbmRlZiBBcnJheUJ1ZmZlcl9o
CiAjZGVmaW5lIEFycmF5QnVmZmVyX2gKIAorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQXJyYXlCdWZmZXI7CitjbGFzcyBBcnJheUJ1
ZmZlclZpZXc7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCitjbGFzcyBBcnJheUJ1
ZmZlckNvbnRlbnRzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBcnJheUJ1ZmZlckNvbnRl
bnRzKTsKK3B1YmxpYzoKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzKCkgCisgICAgICAgIDogbV9k
YXRhKDApCisgICAgICAgICwgbV9zaXplSW5CeXRlcygwKQorICAgIHsgfQorCisgICAgfkFycmF5
QnVmZmVyQ29udGVudHMoKTsKKworICAgIHZvaWQqIGRhdGEoKSB7IHJldHVybiBtX2RhdGE7IH0K
KyAgICB1bnNpZ25lZCBzaXplSW5CeXRlcygpIHsgcmV0dXJuIG1fc2l6ZUluQnl0ZXM7IH0KKwor
cHJpdmF0ZToKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzKHZvaWQqIGRhdGEsIHVuc2lnbmVkIHNp
emVJbkJ5dGVzKSAKKyAgICAgICAgOiBtX2RhdGEoZGF0YSkKKyAgICAgICAgLCBtX3NpemVJbkJ5
dGVzKHNpemVJbkJ5dGVzKQorICAgIHsgfQorCisgICAgZnJpZW5kIGNsYXNzIEFycmF5QnVmZmVy
OworCisgICAgc3RhdGljIHZvaWQgdHJ5QWxsb2NhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVu
c2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50cyYpOworICAgIHZvaWQg
dHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgb3RoZXIpIAorICAgIHsKKyAgICAgICAgQVNT
RVJUKCFvdGhlci5tX2RhdGEpOworICAgICAgICBvdGhlci5tX2RhdGEgPSBtX2RhdGE7CisgICAg
ICAgIG90aGVyLm1fc2l6ZUluQnl0ZXMgPSBtX3NpemVJbkJ5dGVzOworICAgICAgICBtX2RhdGEg
PSAwOyAKKyAgICAgICAgbV9zaXplSW5CeXRlcyA9IDA7IAorICAgIH0KKworICAgIHZvaWQqIG1f
ZGF0YTsKKyAgICB1bnNpZ25lZCBtX3NpemVJbkJ5dGVzOworfTsKKwogY2xhc3MgQXJyYXlCdWZm
ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlcj4gewotICBwdWJsaWM6CitwdWJsaWM6
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZSh1bnNpZ25lZCBudW1F
bGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVmZmVyKik7CiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShjb25zdCB2b2lkKiBzb3VyY2UsIHVuc2lnbmVkIGJ5dGVM
ZW5ndGgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUoQXJyYXlC
dWZmZXJDb250ZW50cyYpOwogCiAgICAgdm9pZCogZGF0YSgpOwogICAgIGNvbnN0IHZvaWQqIGRh
dGEoKSBjb25zdDsKQEAgLTQ0LDE3ICs4NSwyMCBAQCBjbGFzcyBBcnJheUJ1ZmZlciA6IHB1Ymxp
YyBSZWZDb3VudGVkPEFycmF5QnVmZmVyPiB7CiAgICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4g
c2xpY2UoaW50IGJlZ2luLCBpbnQgZW5kKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBzbGljZShpbnQgYmVnaW4pIGNvbnN0OwogCi0gICAgfkFycmF5QnVmZmVyKCk7CisgICAg
dm9pZCBhZGRWaWV3KEFycmF5QnVmZmVyVmlldyopOworICAgIHZvaWQgcmVtb3ZlVmlldyhBcnJh
eUJ1ZmZlclZpZXcqKTsKKworICAgIHZvaWQgdHJhbnNmZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIEFycmF5QnVmZmVyQ29udGVudHMmLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgcHJpdmF0ZToK
LSAgICBBcnJheUJ1ZmZlcih2b2lkKiBkYXRhLCB1bnNpZ25lZCBzaXplSW5CeXRlcyk7Ci0gICAg
QXJyYXlCdWZmZXIodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6
ZSk7Ci0gICAgc3RhdGljIHZvaWQqIHRyeUFsbG9jYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1
bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOworICAgIH5BcnJheUJ1ZmZlcigpIHsgfQorCitwcml2
YXRlOgorICAgIEFycmF5QnVmZmVyKEFycmF5QnVmZmVyQ29udGVudHMmKTsKICAgICBQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBzbGljZUltcGwodW5zaWduZWQgYmVnaW4sIHVuc2lnbmVkIGVuZCkg
Y29uc3Q7CiAgICAgdW5zaWduZWQgY2xhbXBJbmRleChpbnQgaW5kZXgpIGNvbnN0OwogCi0gICAg
dW5zaWduZWQgbV9zaXplSW5CeXRlczsKLSAgICB2b2lkKiBtX2RhdGE7CisgICAgQXJyYXlCdWZm
ZXJDb250ZW50cyBtX2NvbnRlbnRzOworICAgIEFycmF5QnVmZmVyVmlldyogbV9maXJzdFZpZXc7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQXJyYXlCdWZmZXJWaWV3LmNwcAppbmRleCBhMmY2MWNhLi5jZWRkMWJjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5jcHAKQEAgLTM2LDEw
ICszNiwxNCBAQCBBcnJheUJ1ZmZlclZpZXc6OkFycmF5QnVmZmVyVmlldyhQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBidWZmZXIsCiAgICAgICAgICwgbV9idWZmZXIoYnVmZmVyKQogewogICAgIG1f
YmFzZUFkZHJlc3MgPSBtX2J1ZmZlciA/IChzdGF0aWNfY2FzdDxjaGFyKj4obV9idWZmZXItPmRh
dGEoKSkgKyBtX2J5dGVPZmZzZXQpIDogMDsKKyAgICBpZiAobV9idWZmZXIpIAorICAgICAgICBt
X2J1ZmZlci0+YWRkVmlldyh0aGlzKTsKIH0KIAogQXJyYXlCdWZmZXJWaWV3Ojp+QXJyYXlCdWZm
ZXJWaWV3KCkKIHsKKyAgICBpZiAobV9idWZmZXIpCisgICAgICAgIG1fYnVmZmVyLT5yZW1vdmVW
aWV3KHRoaXMpOwogfQogCiB2b2lkIEFycmF5QnVmZmVyVmlldzo6c2V0SW1wbChBcnJheUJ1ZmZl
clZpZXcqIGFycmF5LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKQEAg
LTEwMSw0ICsxMDUsMTAgQEAgdm9pZCBBcnJheUJ1ZmZlclZpZXc6OmNhbGN1bGF0ZU9mZnNldEFu
ZExlbmd0aChpbnQgc3RhcnQsIGludCBlbmQsIHVuc2lnbmVkIGFycmEKICAgICAqbGVuZ3RoID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZCAtIHN0YXJ0KTsKIH0KIAordm9pZCBBcnJheUJ1ZmZl
clZpZXc6Om5ldXRlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KikKK3sKKyAgICBtX2J1ZmZlciA9
IDA7CisgICAgbV9ieXRlT2Zmc2V0ID0gMDsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXJWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaAppbmRleCA3YTUzOTA1Li4zMzAzYmIwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaApAQCAtMTE5LDEzICsx
MTksMTggQEAgY2xhc3MgQXJyYXlCdWZmZXJWaWV3IDogcHVibGljIFJlZkNvdW50ZWQ8QXJyYXlC
dWZmZXJWaWV3PiB7CiAgICAgICAgICpudW1FbGVtZW50cyA9IHN0ZDo6bWluKHJlbWFpbmluZ0Vs
ZW1lbnRzLCAqbnVtRWxlbWVudHMpOwogICAgIH0KIAorICAgIHZpcnR1YWwgdm9pZCBuZXV0ZXIo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworCiAgICAgLy8gVGhpcyBpcyB0aGUgYWRkcmVzcyBv
ZiB0aGUgQXJyYXlCdWZmZXIncyBzdG9yYWdlLCBwbHVzIHRoZSBieXRlIG9mZnNldC4KICAgICB2
b2lkKiBtX2Jhc2VBZGRyZXNzOwogCiAgICAgdW5zaWduZWQgbV9ieXRlT2Zmc2V0OwogCiAgIHBy
aXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEFycmF5QnVmZmVyOwogICAgIFJlZlB0cjxBcnJheUJ1
ZmZlcj4gbV9idWZmZXI7CisgICAgQXJyYXlCdWZmZXJWaWV3KiBtX3ByZXZWaWV3OworICAgIEFy
cmF5QnVmZmVyVmlldyogbV9uZXh0VmlldzsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmNwcAppbmRleCAzZGIwNmQ2Li5mMmVi
ZTMyIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuY3BwCkBAIC0yMzUsNCAr
MjM1LDE2IEBAIHZvaWQgRGF0YVZpZXc6OnNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwg
ZG91YmxlIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwKICAgICBzZXREYXRhPGRvdWJsZT4oYnl0
ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwogfQogCit2b2lkIERhdGFWaWV3Ojpu
ZXV0ZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBBcnJheUJ1ZmZl
clZpZXc6Om5ldXRlcihjb250ZXh0KTsKKyAgICBtX2J5dGVMZW5ndGggPSAwOworICAgIG5ldXRl
ckJpbmRpbmcoY29udGV4dCk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6Om5ldXRlckJpbmRpbmcoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCopCit7CisgICAgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNTM0IAorfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvRGF0YVZpZXcuaAppbmRleCA1ZTgwZjhjLi5jZGJlZDdlIDEwMDc1NQotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0RhdGFWaWV3LmgKQEAgLTcyLDYgKzcyLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBFeGNlcHRpb25Db2Rl
JiBlYykgeyBzZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9CiAgICAg
dm9pZCBzZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgYm9vbCBs
aXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwg
dm9pZCBuZXV0ZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworICAgIHZpcnR1YWwgdm9pZCBu
ZXV0ZXJCaW5kaW5nKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKwogcHJpdmF0ZToKICAgICBE
YXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5z
aWduZWQgYnl0ZUxlbmd0aCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1R5cGVkQXJyYXlCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9UeXBlZEFy
cmF5QmFzZS5oCmluZGV4IGUyYTdjNjMuLmFhNWQ1ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1R5cGVkQXJyYXlCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvVHlwZWRBcnJheUJhc2UuaApAQCAtMTEyLDYgKzExMiwxOCBAQCBwcm90ZWN0ZWQ6
CiAgICAgICAgIHJldHVybiBjcmVhdGU8U3ViY2xhc3M+KGJ1ZmZlcigpLCBvZmZzZXQsIGxlbmd0
aCk7CiAgICAgfQogCisgICAgdmlydHVhbCB2b2lkIG5ldXRlcihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgQXJyYXlCdWZmZXJWaWV3OjpuZXV0ZXIoY29u
dGV4dCk7CisgICAgICAgIG1fbGVuZ3RoID0gMDsKKyAgICAgICAgbmV1dGVyQmluZGluZyhjb250
ZXh0KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgbmV1dGVyQmluZGluZyhTY3JpcHRFeGVj
dXRpb25Db250ZXh0KikKKyAgICB7CisgICAgICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTUzNAorICAgIH0KKwogICAgIC8vIFdlIGRvIG5vdCB3
YW50IHRvIGhhdmUgdG8gYWNjZXNzIHRoaXMgdmlhIGEgdmlydHVhbCBmdW5jdGlvbiBpbiBzdWJj
bGFzc2VzLAogICAgIC8vIHdoaWNoIGlzIHdoeSBpdCBpcyBwcm90ZWN0ZWQgcmF0aGVyIHRoYW4g
cHJpdmF0ZS4KICAgICB1bnNpZ25lZCBtX2xlbmd0aDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113695</attachid>
            <date>2011-11-04 12:04:58 -0700</date>
            <delta_ts>2011-11-04 14:44:12 -0700</delta_ts>
            <desc>Small style fix</desc>
            <filename>71535.patch</filename>
            <type>text/plain</type>
            <size>13092</size>
            <attacher name="Dmitry Lomov">dslomov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5ZGU0OTJiLi5iYmI4ZDZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkg
QEAKKzIwMTEtMTEtMDMgIERtaXRyeSBMb21vdiAgPGRzbG9tb3ZAZ29vZ2xlLmNvbT4KKworICAg
ICAgICBBZGQgdGhlIGFiaWxpdHkgdG8gdHJhbnNmZXIgQXJyYXlCdWZmZXIgYW5kICJuZXV0ZXIi
IGl0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE1
MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0
bWwvY2FudmFzL0FycmF5QnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVy
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXJyYXlCdWZmZXI6OkFycmF5QnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVyOjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkFycmF5QnVmZmVyOjpieXRlTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVy
Ojp0cmFuc2Zlcik6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlckNvbnRlbnRzOjp+QXJy
YXlCdWZmZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlckNvbnRlbnRz
Ojp0cnlBbGxvY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlcjo6YWRkVmlldyk6
CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlcjo6cmVtb3ZlVmlldyk6CisgICAgICAgICog
aHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVy
Q29udGVudHM6OkFycmF5QnVmZmVyQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6QXJyYXlC
dWZmZXJDb250ZW50czo6ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlckNvbnRl
bnRzOjpzaXplSW5CeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlckNvbnRlbnRz
OjpyZWxlYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVyOjp+QXJyYXlCdWZmZXIp
OgorICAgICAgICAqIGh0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBcnJheUJ1ZmZlclZpZXc6OkFycmF5QnVmZmVyVmlldyk6CisgICAgICAgIChXZWJD
b3JlOjpBcnJheUJ1ZmZlclZpZXc6On5BcnJheUJ1ZmZlclZpZXcpOgorICAgICAgICAoV2ViQ29y
ZTo6QXJyYXlCdWZmZXJWaWV3OjpuZXV0ZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0FycmF5
QnVmZmVyVmlldy5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL0RhdGFWaWV3LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFWaWV3OjpuZXV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVZp
ZXc6Om5ldXRlckJpbmRpbmcpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0RhdGFWaWV3Lmg6Cisg
ICAgICAgICogaHRtbC9jYW52YXMvVHlwZWRBcnJheUJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlR5cGVkQXJyYXlCYXNlOjpuZXV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VHlwZWRBcnJheUJh
c2U6Om5ldXRlckJpbmRpbmcpOgorCiAyMDExLTExLTAzICBBZHJpZW5uZSBXYWxrZXIgIDxlbm5l
QGdvb2dsZS5jb20+CiAKICAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgY2hlY2tlcmJvYXJk
aW5nIGZvciBtaXNzaW5nIGxheWVyIHRpbGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9B
cnJheUJ1ZmZlci5jcHAKaW5kZXggNWM5M2Q0ZC4uYTc5NjYzMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0FycmF5QnVmZmVyLmNwcApAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJBcnJheUJ1
ZmZlclZpZXcuaCIKIAogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtNDIsMTAgKzQzLDEx
IEBAIHN0YXRpYyBpbnQgY2xhbXBWYWx1ZShpbnQgeCwgaW50IGxlZnQsIGludCByaWdodCkKIAog
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZSh1bnNpZ25lZCBudW1F
bGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKQogewotICAgIHZvaWQqIGRhdGEgPSB0
cnlBbGxvY2F0ZShudW1FbGVtZW50cywgZWxlbWVudEJ5dGVTaXplKTsKLSAgICBpZiAoIWRhdGEp
CisgICAgQXJyYXlCdWZmZXJDb250ZW50cyBjb250ZW50czsKKyAgICBBcnJheUJ1ZmZlckNvbnRl
bnRzOjp0cnlBbGxvY2F0ZShudW1FbGVtZW50cywgZWxlbWVudEJ5dGVTaXplLCBjb250ZW50cyk7
CisgICAgaWYgKCFjb250ZW50cy5tX2RhdGEpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQXJyYXlCdWZmZXIoZGF0YSwgbnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0
ZVNpemUpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7
CiB9CiAKIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlC
dWZmZXIqIG90aGVyKQpAQCAtNTUsMzMgKzU3LDM5IEBAIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZmZXIqIG90aGVyKQogCiBQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5zaWdu
ZWQgYnl0ZUxlbmd0aCkKIHsKLSAgICB2b2lkKiBkYXRhID0gdHJ5QWxsb2NhdGUoYnl0ZUxlbmd0
aCwgMSk7Ci0gICAgaWYgKCFkYXRhKQorICAgIEFycmF5QnVmZmVyQ29udGVudHMgY29udGVudHM7
CisgICAgQXJyYXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUoYnl0ZUxlbmd0aCwgMSwgY29u
dGVudHMpOworICAgIGlmICghY29udGVudHMubV9kYXRhKQogICAgICAgICByZXR1cm4gMDsKLSAg
ICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IGFkb3B0UmVmKG5ldyBBcnJheUJ1ZmZlcihk
YXRhLCBieXRlTGVuZ3RoKSk7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBhZG9w
dFJlZihuZXcgQXJyYXlCdWZmZXIoY29udGVudHMpKTsKICAgICBtZW1jcHkoYnVmZmVyLT5kYXRh
KCksIHNvdXJjZSwgYnl0ZUxlbmd0aCk7CiAgICAgcmV0dXJuIGJ1ZmZlci5yZWxlYXNlKCk7CiB9
CiAKLUFycmF5QnVmZmVyOjpBcnJheUJ1ZmZlcih2b2lkKiBkYXRhLCB1bnNpZ25lZCBzaXplSW5C
eXRlcykKLSAgICA6IG1fc2l6ZUluQnl0ZXMoc2l6ZUluQnl0ZXMpCi0gICAgLCBtX2RhdGEoZGF0
YSkKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZm
ZXJDb250ZW50cyYgY29udGVudHMpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJheUJ1
ZmZlcihjb250ZW50cykpOworfQorCitBcnJheUJ1ZmZlcjo6QXJyYXlCdWZmZXIoQXJyYXlCdWZm
ZXJDb250ZW50cyYgY29udGVudHMpCisgICAgOiBtX2ZpcnN0VmlldygwKQoreworICAgIGNvbnRl
bnRzLnRyYW5zZmVyKG1fY29udGVudHMpOwogfQogCiB2b2lkKiBBcnJheUJ1ZmZlcjo6ZGF0YSgp
CiB7Ci0gICAgcmV0dXJuIG1fZGF0YTsKKyAgICByZXR1cm4gbV9jb250ZW50cy5tX2RhdGE7CiB9
CiAKIGNvbnN0IHZvaWQqIEFycmF5QnVmZmVyOjpkYXRhKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9kYXRhOworICAgIHJldHVybiBtX2NvbnRlbnRzLm1fZGF0YTsKIH0KIAogdW5zaWduZWQgQXJy
YXlCdWZmZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAogewotICAgIHJldHVybiBtX3NpemVJbkJ5dGVz
OworICAgIHJldHVybiBtX2NvbnRlbnRzLm1fc2l6ZUluQnl0ZXM7CiB9CiAKIFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpzbGljZShpbnQgYmVnaW4sIGludCBlbmQpIGNvbnN0
CkBAIC0xMDgsMjYgKzExNiw3MCBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Y2xhbXBJbmRleChp
bnQgaW5kZXgpIGNvbnN0CiAgICAgcmV0dXJuIGNsYW1wVmFsdWUoaW5kZXgsIDAsIGN1cnJlbnRM
ZW5ndGgpOwogfQogCi1BcnJheUJ1ZmZlcjo6fkFycmF5QnVmZmVyKCkKK3ZvaWQgQXJyYXlCdWZm
ZXI6OnRyYW5zZmVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEFycmF5QnVmZmVy
Q29udGVudHMmIHJlc3VsdCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgUmVmUHRyPEFycmF5
QnVmZmVyPiBrZWVwQWxpdmUodGhpcyk7CisKKyAgICBpZiAoIW1fY29udGVudHMubV9kYXRhKSB7
CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJlc3VsdC5tX2RhdGEg
PSAwOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jb250ZW50cy50cmFuc2Zlcihy
ZXN1bHQpOworCisgICAgd2hpbGUgKG1fZmlyc3RWaWV3KSB7CisgICAgICAgIEFycmF5QnVmZmVy
VmlldyogY3VycmVudCA9IG1fZmlyc3RWaWV3OworICAgICAgICByZW1vdmVWaWV3KGN1cnJlbnQp
OworICAgICAgICBjdXJyZW50LT5uZXV0ZXIoY29udGV4dCk7CisgICAgfQorfQorCitBcnJheUJ1
ZmZlckNvbnRlbnRzOjp+QXJyYXlCdWZmZXJDb250ZW50cygpCiB7CiAgICAgV1RGOjpmYXN0RnJl
ZShtX2RhdGEpOwogfQogCi12b2lkKiBBcnJheUJ1ZmZlcjo6dHJ5QWxsb2NhdGUodW5zaWduZWQg
bnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSkKK3ZvaWQgQXJyYXlCdWZmZXJD
b250ZW50czo6dHJ5QWxsb2NhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1l
bnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50cyYgcmVzdWx0KQogewotICAgIHZvaWQqIHJl
c3VsdDsKICAgICAvLyBEbyBub3QgYWxsb3cgMzItYml0IG92ZXJmbG93IG9mIHRoZSB0b3RhbCBz
aXplLgogICAgIC8vIEZJWE1FOiBXaHkgbm90PyBUaGUgdHJ5RmFzdENhbGxvYyBmdW5jdGlvbiBh
bHJlYWR5IGNoZWNrcyBpdHMgYXJndW1lbnRzLAogICAgIC8vIGFuZCB3aWxsIGZhaWwgaWYgdGhl
cmUgaXMgYW55IG92ZXJmbG93LCBzbyB3aHkgc2hvdWxkIHdlIGluY2x1ZGUgYQogICAgIC8vIHJl
ZHVkYW50IHVubmVjZXNzYXJpbHkgcmVzdHJpY3RpdmUgY2hlY2sgaGVyZT8KICAgICBpZiAobnVt
RWxlbWVudHMpIHsKICAgICAgICAgdW5zaWduZWQgdG90YWxTaXplID0gbnVtRWxlbWVudHMgKiBl
bGVtZW50Qnl0ZVNpemU7Ci0gICAgICAgIGlmICh0b3RhbFNpemUgLyBudW1FbGVtZW50cyAhPSBl
bGVtZW50Qnl0ZVNpemUpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKHRvdGFs
U2l6ZSAvIG51bUVsZW1lbnRzICE9IGVsZW1lbnRCeXRlU2l6ZSkgeworICAgICAgICAgICAgcmVz
dWx0Lm1fZGF0YSA9IDA7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cisg
ICAgaWYgKFdURjo6dHJ5RmFzdENhbGxvYyhudW1FbGVtZW50cywgZWxlbWVudEJ5dGVTaXplKS5n
ZXRWYWx1ZShyZXN1bHQubV9kYXRhKSkgeworICAgICAgICByZXN1bHQubV9zaXplSW5CeXRlcyA9
IG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXplOworICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIGlmIChXVEY6OnRyeUZhc3RDYWxsb2MobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSku
Z2V0VmFsdWUocmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICByZXR1cm4gMDsK
KyAgICByZXN1bHQubV9kYXRhID0gMDsKK30KKwordm9pZCBBcnJheUJ1ZmZlcjo6YWRkVmlldyhB
cnJheUJ1ZmZlclZpZXcqIHZpZXcpCit7CisgICAgdmlldy0+bV9idWZmZXIgPSB0aGlzOworICAg
IHZpZXctPm1fcHJldlZpZXcgPSAwOworICAgIHZpZXctPm1fbmV4dFZpZXcgPSBtX2ZpcnN0Vmll
dzsKKyAgICBpZiAobV9maXJzdFZpZXcpCisgICAgICAgIG1fZmlyc3RWaWV3LT5tX3ByZXZWaWV3
ID0gdmlldzsKKyAgICBtX2ZpcnN0VmlldyA9IHZpZXc7Cit9CisKK3ZvaWQgQXJyYXlCdWZmZXI6
OnJlbW92ZVZpZXcoQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQoreworICAgIEFTU0VSVCh0aGlzID09
IHZpZXctPm1fYnVmZmVyKTsKKyAgICBpZiAodmlldy0+bV9uZXh0VmlldykKKyAgICAgICAgdmll
dy0+bV9uZXh0Vmlldy0+bV9wcmV2VmlldyA9IHZpZXctPm1fcHJldlZpZXc7CisgICAgaWYgKHZp
ZXctPm1fcHJldlZpZXcpCisgICAgICAgIHZpZXctPm1fcHJldlZpZXctPm1fbmV4dFZpZXcgPSB2
aWV3LT5tX25leHRWaWV3OworICAgIGlmIChtX2ZpcnN0VmlldyA9PSB2aWV3KQorICAgICAgICBt
X2ZpcnN0VmlldyA9IHZpZXctPm1fbmV4dFZpZXc7CisgICAgdmlldy0+bV9wcmV2VmlldyA9IHZp
ZXctPm1fbmV4dFZpZXcgPSAwOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQXJy
YXlCdWZmZXIuaAppbmRleCAzN2FkMjhiLi44ODllYjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0FycmF5QnVmZmVyLmgKQEAgLTI2LDE2ICsyNiw1NyBAQAogI2lmbmRlZiBBcnJheUJ1
ZmZlcl9oCiAjZGVmaW5lIEFycmF5QnVmZmVyX2gKIAorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQXJyYXlCdWZmZXI7CitjbGFzcyBB
cnJheUJ1ZmZlclZpZXc7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCitjbGFzcyBB
cnJheUJ1ZmZlckNvbnRlbnRzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBcnJheUJ1ZmZl
ckNvbnRlbnRzKTsKK3B1YmxpYzoKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzKCkgCisgICAgICAg
IDogbV9kYXRhKDApCisgICAgICAgICwgbV9zaXplSW5CeXRlcygwKQorICAgIHsgfQorCisgICAg
fkFycmF5QnVmZmVyQ29udGVudHMoKTsKKworICAgIHZvaWQqIGRhdGEoKSB7IHJldHVybiBtX2Rh
dGE7IH0KKyAgICB1bnNpZ25lZCBzaXplSW5CeXRlcygpIHsgcmV0dXJuIG1fc2l6ZUluQnl0ZXM7
IH0KKworcHJpdmF0ZToKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzKHZvaWQqIGRhdGEsIHVuc2ln
bmVkIHNpemVJbkJ5dGVzKSAKKyAgICAgICAgOiBtX2RhdGEoZGF0YSkKKyAgICAgICAgLCBtX3Np
emVJbkJ5dGVzKHNpemVJbkJ5dGVzKQorICAgIHsgfQorCisgICAgZnJpZW5kIGNsYXNzIEFycmF5
QnVmZmVyOworCisgICAgc3RhdGljIHZvaWQgdHJ5QWxsb2NhdGUodW5zaWduZWQgbnVtRWxlbWVu
dHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50cyYpOworICAg
IHZvaWQgdHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgb3RoZXIpIAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFvdGhlci5tX2RhdGEpOworICAgICAgICBvdGhlci5tX2RhdGEgPSBtX2RhdGE7
CisgICAgICAgIG90aGVyLm1fc2l6ZUluQnl0ZXMgPSBtX3NpemVJbkJ5dGVzOworICAgICAgICBt
X2RhdGEgPSAwOyAKKyAgICAgICAgbV9zaXplSW5CeXRlcyA9IDA7IAorICAgIH0KKworICAgIHZv
aWQqIG1fZGF0YTsKKyAgICB1bnNpZ25lZCBtX3NpemVJbkJ5dGVzOworfTsKKwogY2xhc3MgQXJy
YXlCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlcj4gewotICBwdWJsaWM6Citw
dWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZSh1bnNpZ25l
ZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKTsKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVmZmVyKik7CiAgICAgc3RhdGljIFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShjb25zdCB2b2lkKiBzb3VyY2UsIHVuc2lnbmVk
IGJ5dGVMZW5ndGgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUo
QXJyYXlCdWZmZXJDb250ZW50cyYpOwogCiAgICAgdm9pZCogZGF0YSgpOwogICAgIGNvbnN0IHZv
aWQqIGRhdGEoKSBjb25zdDsKQEAgLTQ0LDE3ICs4NSwyMCBAQCBjbGFzcyBBcnJheUJ1ZmZlciA6
IHB1YmxpYyBSZWZDb3VudGVkPEFycmF5QnVmZmVyPiB7CiAgICAgUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4gc2xpY2UoaW50IGJlZ2luLCBpbnQgZW5kKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBzbGljZShpbnQgYmVnaW4pIGNvbnN0OwogCi0gICAgfkFycmF5QnVmZmVyKCk7
CisgICAgdm9pZCBhZGRWaWV3KEFycmF5QnVmZmVyVmlldyopOworICAgIHZvaWQgcmVtb3ZlVmll
dyhBcnJheUJ1ZmZlclZpZXcqKTsKKworICAgIHZvaWQgdHJhbnNmZXIoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIEFycmF5QnVmZmVyQ29udGVudHMmLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgcHJp
dmF0ZToKLSAgICBBcnJheUJ1ZmZlcih2b2lkKiBkYXRhLCB1bnNpZ25lZCBzaXplSW5CeXRlcyk7
Ci0gICAgQXJyYXlCdWZmZXIodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRC
eXRlU2l6ZSk7Ci0gICAgc3RhdGljIHZvaWQqIHRyeUFsbG9jYXRlKHVuc2lnbmVkIG51bUVsZW1l
bnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOworICAgIH5BcnJheUJ1ZmZlcigpIHsgfQor
Citwcml2YXRlOgorICAgIEFycmF5QnVmZmVyKEFycmF5QnVmZmVyQ29udGVudHMmKTsKICAgICBQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBzbGljZUltcGwodW5zaWduZWQgYmVnaW4sIHVuc2lnbmVk
IGVuZCkgY29uc3Q7CiAgICAgdW5zaWduZWQgY2xhbXBJbmRleChpbnQgaW5kZXgpIGNvbnN0Owog
Ci0gICAgdW5zaWduZWQgbV9zaXplSW5CeXRlczsKLSAgICB2b2lkKiBtX2RhdGE7CisgICAgQXJy
YXlCdWZmZXJDb250ZW50cyBtX2NvbnRlbnRzOworICAgIEFycmF5QnVmZmVyVmlldyogbV9maXJz
dFZpZXc7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQXJyYXlCdWZmZXJWaWV3LmNwcAppbmRleCBhMmY2MWNhLi5jZWRkMWJjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5jcHAKQEAg
LTM2LDEwICszNiwxNCBAQCBBcnJheUJ1ZmZlclZpZXc6OkFycmF5QnVmZmVyVmlldyhQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBidWZmZXIsCiAgICAgICAgICwgbV9idWZmZXIoYnVmZmVyKQogewog
ICAgIG1fYmFzZUFkZHJlc3MgPSBtX2J1ZmZlciA/IChzdGF0aWNfY2FzdDxjaGFyKj4obV9idWZm
ZXItPmRhdGEoKSkgKyBtX2J5dGVPZmZzZXQpIDogMDsKKyAgICBpZiAobV9idWZmZXIpIAorICAg
ICAgICBtX2J1ZmZlci0+YWRkVmlldyh0aGlzKTsKIH0KIAogQXJyYXlCdWZmZXJWaWV3Ojp+QXJy
YXlCdWZmZXJWaWV3KCkKIHsKKyAgICBpZiAobV9idWZmZXIpCisgICAgICAgIG1fYnVmZmVyLT5y
ZW1vdmVWaWV3KHRoaXMpOwogfQogCiB2b2lkIEFycmF5QnVmZmVyVmlldzo6c2V0SW1wbChBcnJh
eUJ1ZmZlclZpZXcqIGFycmF5LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBl
YykKQEAgLTEwMSw0ICsxMDUsMTAgQEAgdm9pZCBBcnJheUJ1ZmZlclZpZXc6OmNhbGN1bGF0ZU9m
ZnNldEFuZExlbmd0aChpbnQgc3RhcnQsIGludCBlbmQsIHVuc2lnbmVkIGFycmEKICAgICAqbGVu
Z3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZCAtIHN0YXJ0KTsKIH0KIAordm9pZCBBcnJh
eUJ1ZmZlclZpZXc6Om5ldXRlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KikKK3sKKyAgICBtX2J1
ZmZlciA9IDA7CisgICAgbV9ieXRlT2Zmc2V0ID0gMDsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXJWaWV3LmggYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaAppbmRleCA3YTUzOTA1Li4zMzAzYmIwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaApAQCAtMTE5
LDEzICsxMTksMTggQEAgY2xhc3MgQXJyYXlCdWZmZXJWaWV3IDogcHVibGljIFJlZkNvdW50ZWQ8
QXJyYXlCdWZmZXJWaWV3PiB7CiAgICAgICAgICpudW1FbGVtZW50cyA9IHN0ZDo6bWluKHJlbWFp
bmluZ0VsZW1lbnRzLCAqbnVtRWxlbWVudHMpOwogICAgIH0KIAorICAgIHZpcnR1YWwgdm9pZCBu
ZXV0ZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworCiAgICAgLy8gVGhpcyBpcyB0aGUgYWRk
cmVzcyBvZiB0aGUgQXJyYXlCdWZmZXIncyBzdG9yYWdlLCBwbHVzIHRoZSBieXRlIG9mZnNldC4K
ICAgICB2b2lkKiBtX2Jhc2VBZGRyZXNzOwogCiAgICAgdW5zaWduZWQgbV9ieXRlT2Zmc2V0Owog
CiAgIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEFycmF5QnVmZmVyOwogICAgIFJlZlB0cjxB
cnJheUJ1ZmZlcj4gbV9idWZmZXI7CisgICAgQXJyYXlCdWZmZXJWaWV3KiBtX3ByZXZWaWV3Owor
ICAgIEFycmF5QnVmZmVyVmlldyogbV9uZXh0VmlldzsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmNwcAppbmRleCAzZGIwNmQ2
Li5mMmViZTMyIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmll
dy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuY3BwCkBAIC0y
MzUsNCArMjM1LDE2IEBAIHZvaWQgRGF0YVZpZXc6OnNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9m
ZnNldCwgZG91YmxlIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwKICAgICBzZXREYXRhPGRvdWJs
ZT4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwogfQogCit2b2lkIERhdGFW
aWV3OjpuZXV0ZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBBcnJh
eUJ1ZmZlclZpZXc6Om5ldXRlcihjb250ZXh0KTsKKyAgICBtX2J5dGVMZW5ndGggPSAwOworICAg
IG5ldXRlckJpbmRpbmcoY29udGV4dCk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6Om5ldXRlckJpbmRp
bmcoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopCit7CisgICAgLy8gRklYTUUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNTM0IAorfQorCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5oIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvRGF0YVZpZXcuaAppbmRleCA1ZTgwZjhjLi5jZGJlZDdlIDEwMDc1NQotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0RhdGFWaWV3LmgKQEAgLTcyLDYgKzcyLDEwIEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBFeGNlcHRp
b25Db2RlJiBlYykgeyBzZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9
CiAgICAgdm9pZCBzZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwg
Ym9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKIAorcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgdm9pZCBuZXV0ZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworICAgIHZpcnR1YWwg
dm9pZCBuZXV0ZXJCaW5kaW5nKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKwogcHJpdmF0ZToK
ICAgICBEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNl
dCwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1R5cGVkQXJyYXlCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9U
eXBlZEFycmF5QmFzZS5oCmluZGV4IGUyYTdjNjMuLmFhNWQ1ODMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1R5cGVkQXJyYXlCYXNlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvVHlwZWRBcnJheUJhc2UuaApAQCAtMTEyLDYgKzExMiwxOCBAQCBwcm90
ZWN0ZWQ6CiAgICAgICAgIHJldHVybiBjcmVhdGU8U3ViY2xhc3M+KGJ1ZmZlcigpLCBvZmZzZXQs
IGxlbmd0aCk7CiAgICAgfQogCisgICAgdmlydHVhbCB2b2lkIG5ldXRlcihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgQXJyYXlCdWZmZXJWaWV3OjpuZXV0
ZXIoY29udGV4dCk7CisgICAgICAgIG1fbGVuZ3RoID0gMDsKKyAgICAgICAgbmV1dGVyQmluZGlu
Zyhjb250ZXh0KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgbmV1dGVyQmluZGluZyhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KikKKyAgICB7CisgICAgICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTUzNAorICAgIH0KKwogICAgIC8vIFdlIGRv
IG5vdCB3YW50IHRvIGhhdmUgdG8gYWNjZXNzIHRoaXMgdmlhIGEgdmlydHVhbCBmdW5jdGlvbiBp
biBzdWJjbGFzc2VzLAogICAgIC8vIHdoaWNoIGlzIHdoeSBpdCBpcyBwcm90ZWN0ZWQgcmF0aGVy
IHRoYW4gcHJpdmF0ZS4KICAgICB1bnNpZ25lZCBtX2xlbmd0aDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>