<?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>78047</bug_id>
          
          <creation_ts>2012-02-07 15:09:09 -0800</creation_ts>
          <short_desc>[Qt][WK2] QQuickWebView::event should lookup faster which events QQuickWebPage can handle</short_desc>
          <delta_ts>2012-03-01 07:52:43 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Rafael Brandao">rafael.lobo</reporter>
          <assigned_to name="Rafael Brandao">rafael.lobo</assigned_to>
          <cc>abecsi</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>hausmann</cc>
    
    <cc>igor.oliveira</cc>
    
    <cc>kenneth</cc>
    
    <cc>menard</cc>
    
    <cc>noam</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>551439</commentid>
    <comment_count>0</comment_count>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2012-02-07 15:09:09 -0800</bug_when>
    <thetext>[Qt][WK2] QQuickWebView::event should lookup faster which events QQuickWebPage can handle</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551447</commentid>
    <comment_count>1</comment_count>
      <attachid>125940</attachid>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2012-02-07 15:16:35 -0800</bug_when>
    <thetext>Created attachment 125940
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551460</commentid>
    <comment_count>2</comment_count>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2012-02-07 15:24:06 -0800</bug_when>
    <thetext>This is how the assembly code for QQuickWebView::event was before this patch:

=&gt; 0x00007ffff60a5260 &lt;+0&gt;:     mov    %rbx,-0x10(%rsp)
   0x00007ffff60a5265 &lt;+5&gt;:     mov    %rbp,-0x8(%rsp)
   0x00007ffff60a526a &lt;+10&gt;:    sub    $0x18,%rsp
   0x00007ffff60a526e &lt;+14&gt;:    movzwl 0x10(%rsi),%eax
   0x00007ffff60a5272 &lt;+18&gt;:    mov    %rdi,%rbp
   0x00007ffff60a5275 &lt;+21&gt;:    mov    %rsi,%rbx
   0x00007ffff60a5278 &lt;+24&gt;:    mov    0x20(%rdi),%rdx
   0x00007ffff60a527c &lt;+28&gt;:    cmp    $0x3f,%eax
   0x00007ffff60a527f &lt;+31&gt;:    jg     0x7ffff60a52c8 &lt;_ZN13QQuickWebView5eventEP6QEvent+104&gt;
   0x00007ffff60a5281 &lt;+33&gt;:    cmp    $0x3c,%eax
   0x00007ffff60a5284 &lt;+36&gt;:    jl     0x7ffff60a52e8 &lt;_ZN13QQuickWebView5eventEP6QEvent+136&gt;
   0x00007ffff60a5286 &lt;+38&gt;:    mov    0x90(%rdx),%rdi
   0x00007ffff60a528d &lt;+45&gt;:    callq  0x7ffff60a3160 &lt;_ZNK13QQuickWebPage12eventHandlerEv&gt;
   0x00007ffff60a5292 &lt;+50&gt;:    mov    %rbx,%rsi
   0x00007ffff60a5295 &lt;+53&gt;:    mov    %rax,%rdi
   0x00007ffff60a5298 &lt;+56&gt;:    callq  0x7ffff61143f0 &lt;_ZN21QtWebPageEventHandler11handleEventEP6QEvent&gt;
   0x00007ffff60a529d &lt;+61&gt;:    test   %al,%al
   0x00007ffff60a529f &lt;+63&gt;:    jne    0x7ffff60a5318 &lt;_ZN13QQuickWebView5eventEP6QEvent+184&gt;
   0x00007ffff60a52a1 &lt;+65&gt;:    movzwl 0x10(%rbx),%eax
   0x00007ffff60a52a5 &lt;+69&gt;:    cmp    $0x53,%eax
   0x00007ffff60a52a8 &lt;+72&gt;:    je     0x7ffff60a5300 &lt;_ZN13QQuickWebView5eventEP6QEvent+160&gt;
   0x00007ffff60a52aa &lt;+74&gt;:    mov    %rbx,%rsi
   0x00007ffff60a52ad &lt;+77&gt;:    mov    %rbp,%rdi
   0x00007ffff60a52b0 &lt;+80&gt;:    mov    0x8(%rsp),%rbx
   0x00007ffff60a52b5 &lt;+85&gt;:    mov    0x10(%rsp),%rbp
   0x00007ffff60a52ba &lt;+90&gt;:    add    $0x18,%rsp
   0x00007ffff60a52be &lt;+94&gt;:    jmpq   0x7ffff5ff4e60 &lt;_ZN10QQuickItem5eventEP6QEvent@plt&gt;
   0x00007ffff60a52c3 &lt;+99&gt;:    nopl   0x0(%rax,%rax,1)
   0x00007ffff60a52c8 &lt;+104&gt;:   cmp    $0x7f,%eax
   0x00007ffff60a52cb &lt;+107&gt;:   jl     0x7ffff60a52a5 &lt;_ZN13QQuickWebView5eventEP6QEvent+69&gt;
   0x00007ffff60a52cd &lt;+109&gt;:   cmp    $0x81,%eax
   0x00007ffff60a52d2 &lt;+114&gt;:   jle    0x7ffff60a5286 &lt;_ZN13QQuickWebView5eventEP6QEvent+38&gt;
   0x00007ffff60a52d4 &lt;+116&gt;:   lea    -0xc2(%rax),%ecx
   0x00007ffff60a52da &lt;+122&gt;:   cmp    $0x2,%ecx
   0x00007ffff60a52dd &lt;+125&gt;:   ja     0x7ffff60a52a5 &lt;_ZN13QQuickWebView5eventEP6QEvent+69&gt;
   0x00007ffff60a52df &lt;+127&gt;:   jmp    0x7ffff60a5286 &lt;_ZN13QQuickWebView5eventEP6QEvent+38&gt;
   0x00007ffff60a52e1 &lt;+129&gt;:   nopl   0x0(%rax)
   0x00007ffff60a52e8 &lt;+136&gt;:   cmp    $0x2,%eax
   0x00007ffff60a52eb &lt;+139&gt;:   jl     0x7ffff60a52a5 &lt;_ZN13QQuickWebView5eventEP6QEvent+69&gt;
   0x00007ffff60a52ed &lt;+141&gt;:   cmp    $0x9,%eax
   0x00007ffff60a52f0 &lt;+144&gt;:   jle    0x7ffff60a5286 &lt;_ZN13QQuickWebView5eventEP6QEvent+38&gt;
   0x00007ffff60a52f2 &lt;+146&gt;:   cmp    $0x1f,%eax
   0x00007ffff60a52f5 &lt;+149&gt;:   jne    0x7ffff60a52a5 &lt;_ZN13QQuickWebView5eventEP6QEvent+69&gt;
   0x00007ffff60a52f7 &lt;+151&gt;:   jmp    0x7ffff60a5286 &lt;_ZN13QQuickWebView5eventEP6QEvent+38&gt;
   0x00007ffff60a52f9 &lt;+153&gt;:   nopl   0x0(%rax)
   0x00007ffff60a5300 &lt;+160&gt;:   xor    %eax,%eax
   0x00007ffff60a5302 &lt;+162&gt;:   mov    0x8(%rsp),%rbx
   0x00007ffff60a5307 &lt;+167&gt;:   mov    0x10(%rsp),%rbp
   0x00007ffff60a530c &lt;+172&gt;:   add    $0x18,%rsp
   0x00007ffff60a5310 &lt;+176&gt;:   retq   
   0x00007ffff60a5311 &lt;+177&gt;:   nopl   0x0(%rax)
   0x00007ffff60a5318 &lt;+184&gt;:   mov    $0x1,%eax
   0x00007ffff60a531d &lt;+189&gt;:   mov    0x8(%rsp),%rbx
   0x00007ffff60a5322 &lt;+194&gt;:   mov    0x10(%rsp),%rbp
   0x00007ffff60a5327 &lt;+199&gt;:   add    $0x18,%rsp
   0x00007ffff60a532b &lt;+203&gt;:   retq

And now:

=&gt; 0x00007ffff60a4b50 &lt;+0&gt;:     mov    %rbx,-0x10(%rsp)
   0x00007ffff60a4b55 &lt;+5&gt;:     mov    %rbp,-0x8(%rsp)
   0x00007ffff60a4b5a &lt;+10&gt;:    sub    $0x18,%rsp
   0x00007ffff60a4b5e &lt;+14&gt;:    movzwl 0x10(%rsi),%eax
   0x00007ffff60a4b62 &lt;+18&gt;:    mov    %rdi,%rbp
   0x00007ffff60a4b65 &lt;+21&gt;:    mov    %rsi,%rbx
   0x00007ffff60a4b68 &lt;+24&gt;:    mov    0x20(%rdi),%rdx
   0x00007ffff60a4b6c &lt;+28&gt;:    cmp    $0xff,%eax
   0x00007ffff60a4b71 &lt;+33&gt;:    jg     0x7ffff60a4b83 &lt;_ZN13QQuickWebView5eventEP6QEvent+51&gt;
   0x00007ffff60a4b73 &lt;+35&gt;:    lea    0x1d0b7e6(%rip),%rsi        # 0x7ffff7db0360 &lt;_ZL20s_eventHandledByPage&gt;
   0x00007ffff60a4b7a &lt;+42&gt;:    movslq %eax,%rcx
   0x00007ffff60a4b7d &lt;+45&gt;:    cmpb   $0x0,(%rsi,%rcx,1)
   0x00007ffff60a4b81 &lt;+49&gt;:    jne    0x7ffff60a4ba8 &lt;_ZN13QQuickWebView5eventEP6QEvent+88&gt;
   0x00007ffff60a4b83 &lt;+51&gt;:    cmp    $0x53,%eax
   0x00007ffff60a4b86 &lt;+54&gt;:    je     0x7ffff60a4be0 &lt;_ZN13QQuickWebView5eventEP6QEvent+144&gt;
   0x00007ffff60a4b88 &lt;+56&gt;:    mov    %rbx,%rsi
   0x00007ffff60a4b8b &lt;+59&gt;:    mov    %rbp,%rdi
   0x00007ffff60a4b8e &lt;+62&gt;:    mov    0x8(%rsp),%rbx
   0x00007ffff60a4b93 &lt;+67&gt;:    mov    0x10(%rsp),%rbp
   0x00007ffff60a4b98 &lt;+72&gt;:    add    $0x18,%rsp
   0x00007ffff60a4b9c &lt;+76&gt;:    jmpq   0x7ffff5ff4e60 &lt;_ZN10QQuickItem5eventEP6QEvent@plt&gt;
   0x00007ffff60a4ba1 &lt;+81&gt;:    nopl   0x0(%rax)
   0x00007ffff60a4ba8 &lt;+88&gt;:    mov    0x90(%rdx),%rdi
   0x00007ffff60a4baf &lt;+95&gt;:    callq  0x7ffff60a3160 &lt;_ZNK13QQuickWebPage12eventHandlerEv&gt;
   0x00007ffff60a4bb4 &lt;+100&gt;:   mov    %rbx,%rsi
   0x00007ffff60a4bb7 &lt;+103&gt;:   mov    %rax,%rdi
   0x00007ffff60a4bba &lt;+106&gt;:   callq  0x7ffff61144a0 &lt;_ZN21QtWebPageEventHandler11handleEventEP6QEvent&gt;
   0x00007ffff60a4bbf &lt;+111&gt;:   test   %al,%al
   0x00007ffff60a4bc1 &lt;+113&gt;:   je     0x7ffff60a4b88 &lt;_ZN13QQuickWebView5eventEP6QEvent+56&gt;
   0x00007ffff60a4bc3 &lt;+115&gt;:   mov    $0x1,%eax
   0x00007ffff60a4bc8 &lt;+120&gt;:   mov    0x8(%rsp),%rbx
   0x00007ffff60a4bcd &lt;+125&gt;:   mov    0x10(%rsp),%rbp
   0x00007ffff60a4bd2 &lt;+130&gt;:   add    $0x18,%rsp
   0x00007ffff60a4bd6 &lt;+134&gt;:   retq   
   0x00007ffff60a4bd7 &lt;+135&gt;:   nopw   0x0(%rax,%rax,1)
   0x00007ffff60a4be0 &lt;+144&gt;:   xor    %eax,%eax
   0x00007ffff60a4be2 &lt;+146&gt;:   mov    0x8(%rsp),%rbx
   0x00007ffff60a4be7 &lt;+151&gt;:   mov    0x10(%rsp),%rbp
   0x00007ffff60a4bec &lt;+156&gt;:   add    $0x18,%rsp
   0x00007ffff60a4bf0 &lt;+160&gt;:   retq

The main motivation to make this change is that QQuickWebView::event is used a lot and the lookup would grow logarithmically by the number of events handled by QQuickWebPage when we could do this in O(1) instead.

Adding some people to CC... What you think of this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551513</commentid>
    <comment_count>3</comment_count>
      <attachid>125940</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-07 16:03:08 -0800</bug_when>
    <thetext>Comment on attachment 125940
Patch

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

Why use those raw bool arrays instead of the nice abstraction called BitVector?

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:96
&gt; +static inline bool shouldPageHandleEvent(const QEvent::Type&amp; event)

why const&amp;? it&apos;s an enum, just pass by value.

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:1255
&gt; +    } else if (ev-&gt;type() == QEvent::InputMethod)

Why remove the comment?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551535</commentid>
    <comment_count>4</comment_count>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2012-02-07 16:21:19 -0800</bug_when>
    <thetext>What valgrind/cachegrind says about this patch?

(In reply to comment #2)
&gt; This is how the assembly code for QQuickWebView::event was before this patch:
&gt; 
&gt; =&gt; 0x00007ffff60a5260 &lt;+0&gt;:     mov    %rbx,-0x10(%rsp)
&gt;    0x00007ffff60a5265 &lt;+5&gt;:     mov    %rbp,-0x8(%rsp)
&gt;    0x00007ffff60a526a &lt;+10&gt;:    sub    $0x18,%rsp
&gt;    0x00007ffff60a526e &lt;+14&gt;:    movzwl 0x10(%rsi),%eax
&gt;    0x00007ffff60a5272 &lt;+18&gt;:    mov    %rdi,%rbp
&gt;    0x00007ffff60a5275 &lt;+21&gt;:    mov    %rsi,%rbx
&gt;    0x00007ffff60a5278 &lt;+24&gt;:    mov    0x20(%rdi),%rdx
&gt;    0x00007ffff60a527c &lt;+28&gt;:    cmp    $0x3f,%eax
&gt;    0x00007ffff60a527f &lt;+31&gt;:    jg     0x7ffff60a52c8 &lt;_ZN13QQuickWebView5eventEP6QEvent+104&gt;
&gt;    0x00007ffff60a5281 &lt;+33&gt;:    cmp    $0x3c,%eax
&gt;    0x00007ffff60a5284 &lt;+36&gt;:    jl     0x7ffff60a52e8 &lt;_ZN13QQuickWebView5eventEP6QEvent+136&gt;
&gt;    0x00007ffff60a5286 &lt;+38&gt;:    mov    0x90(%rdx),%rdi
&gt;    0x00007ffff60a528d &lt;+45&gt;:    callq  0x7ffff60a3160 &lt;_ZNK13QQuickWebPage12eventHandlerEv&gt;
&gt;    0x00007ffff60a5292 &lt;+50&gt;:    mov    %rbx,%rsi
&gt;    0x00007ffff60a5295 &lt;+53&gt;:    mov    %rax,%rdi
&gt;    0x00007ffff60a5298 &lt;+56&gt;:    callq  0x7ffff61143f0 &lt;_ZN21QtWebPageEventHandler11handleEventEP6QEvent&gt;
&gt;    0x00007ffff60a529d &lt;+61&gt;:    test   %al,%al
&gt;    0x00007ffff60a529f &lt;+63&gt;:    jne    0x7ffff60a5318 &lt;_ZN13QQuickWebView5eventEP6QEvent+184&gt;
&gt;    0x00007ffff60a52a1 &lt;+65&gt;:    movzwl 0x10(%rbx),%eax
&gt;    0x00007ffff60a52a5 &lt;+69&gt;:    cmp    $0x53,%eax
&gt;    0x00007ffff60a52a8 &lt;+72&gt;:    je     0x7ffff60a5300 &lt;_ZN13QQuickWebView5eventEP6QEvent+160&gt;
&gt;    0x00007ffff60a52aa &lt;+74&gt;:    mov    %rbx,%rsi
&gt;    0x00007ffff60a52ad &lt;+77&gt;:    mov    %rbp,%rdi
&gt;    0x00007ffff60a52b0 &lt;+80&gt;:    mov    0x8(%rsp),%rbx
&gt;    0x00007ffff60a52b5 &lt;+85&gt;:    mov    0x10(%rsp),%rbp
&gt;    0x00007ffff60a52ba &lt;+90&gt;:    add    $0x18,%rsp
&gt;    0x00007ffff60a52be &lt;+94&gt;:    jmpq   0x7ffff5ff4e60 &lt;_ZN10QQuickItem5eventEP6QEvent@plt&gt;
&gt;    0x00007ffff60a52c3 &lt;+99&gt;:    nopl   0x0(%rax,%rax,1)
&gt;    0x00007ffff60a52c8 &lt;+104&gt;:   cmp    $0x7f,%eax
&gt;    0x00007ffff60a52cb &lt;+107&gt;:   jl     0x7ffff60a52a5 &lt;_ZN13QQuickWebView5eventEP6QEvent+69&gt;
&gt;    0x00007ffff60a52cd &lt;+109&gt;:   cmp    $0x81,%eax
&gt;    0x00007ffff60a52d2 &lt;+114&gt;:   jle    0x7ffff60a5286 &lt;_ZN13QQuickWebView5eventEP6QEvent+38&gt;
&gt;    0x00007ffff60a52d4 &lt;+116&gt;:   lea    -0xc2(%rax),%ecx
&gt;    0x00007ffff60a52da &lt;+122&gt;:   cmp    $0x2,%ecx
&gt;    0x00007ffff60a52dd &lt;+125&gt;:   ja     0x7ffff60a52a5 &lt;_ZN13QQuickWebView5eventEP6QEvent+69&gt;
&gt;    0x00007ffff60a52df &lt;+127&gt;:   jmp    0x7ffff60a5286 &lt;_ZN13QQuickWebView5eventEP6QEvent+38&gt;
&gt;    0x00007ffff60a52e1 &lt;+129&gt;:   nopl   0x0(%rax)
&gt;    0x00007ffff60a52e8 &lt;+136&gt;:   cmp    $0x2,%eax
&gt;    0x00007ffff60a52eb &lt;+139&gt;:   jl     0x7ffff60a52a5 &lt;_ZN13QQuickWebView5eventEP6QEvent+69&gt;
&gt;    0x00007ffff60a52ed &lt;+141&gt;:   cmp    $0x9,%eax
&gt;    0x00007ffff60a52f0 &lt;+144&gt;:   jle    0x7ffff60a5286 &lt;_ZN13QQuickWebView5eventEP6QEvent+38&gt;
&gt;    0x00007ffff60a52f2 &lt;+146&gt;:   cmp    $0x1f,%eax
&gt;    0x00007ffff60a52f5 &lt;+149&gt;:   jne    0x7ffff60a52a5 &lt;_ZN13QQuickWebView5eventEP6QEvent+69&gt;
&gt;    0x00007ffff60a52f7 &lt;+151&gt;:   jmp    0x7ffff60a5286 &lt;_ZN13QQuickWebView5eventEP6QEvent+38&gt;
&gt;    0x00007ffff60a52f9 &lt;+153&gt;:   nopl   0x0(%rax)
&gt;    0x00007ffff60a5300 &lt;+160&gt;:   xor    %eax,%eax
&gt;    0x00007ffff60a5302 &lt;+162&gt;:   mov    0x8(%rsp),%rbx
&gt;    0x00007ffff60a5307 &lt;+167&gt;:   mov    0x10(%rsp),%rbp
&gt;    0x00007ffff60a530c &lt;+172&gt;:   add    $0x18,%rsp
&gt;    0x00007ffff60a5310 &lt;+176&gt;:   retq   
&gt;    0x00007ffff60a5311 &lt;+177&gt;:   nopl   0x0(%rax)
&gt;    0x00007ffff60a5318 &lt;+184&gt;:   mov    $0x1,%eax
&gt;    0x00007ffff60a531d &lt;+189&gt;:   mov    0x8(%rsp),%rbx
&gt;    0x00007ffff60a5322 &lt;+194&gt;:   mov    0x10(%rsp),%rbp
&gt;    0x00007ffff60a5327 &lt;+199&gt;:   add    $0x18,%rsp
&gt;    0x00007ffff60a532b &lt;+203&gt;:   retq
&gt; 
&gt; And now:
&gt; 
&gt; =&gt; 0x00007ffff60a4b50 &lt;+0&gt;:     mov    %rbx,-0x10(%rsp)
&gt;    0x00007ffff60a4b55 &lt;+5&gt;:     mov    %rbp,-0x8(%rsp)
&gt;    0x00007ffff60a4b5a &lt;+10&gt;:    sub    $0x18,%rsp
&gt;    0x00007ffff60a4b5e &lt;+14&gt;:    movzwl 0x10(%rsi),%eax
&gt;    0x00007ffff60a4b62 &lt;+18&gt;:    mov    %rdi,%rbp
&gt;    0x00007ffff60a4b65 &lt;+21&gt;:    mov    %rsi,%rbx
&gt;    0x00007ffff60a4b68 &lt;+24&gt;:    mov    0x20(%rdi),%rdx
&gt;    0x00007ffff60a4b6c &lt;+28&gt;:    cmp    $0xff,%eax
&gt;    0x00007ffff60a4b71 &lt;+33&gt;:    jg     0x7ffff60a4b83 &lt;_ZN13QQuickWebView5eventEP6QEvent+51&gt;
&gt;    0x00007ffff60a4b73 &lt;+35&gt;:    lea    0x1d0b7e6(%rip),%rsi        # 0x7ffff7db0360 &lt;_ZL20s_eventHandledByPage&gt;
&gt;    0x00007ffff60a4b7a &lt;+42&gt;:    movslq %eax,%rcx
&gt;    0x00007ffff60a4b7d &lt;+45&gt;:    cmpb   $0x0,(%rsi,%rcx,1)
&gt;    0x00007ffff60a4b81 &lt;+49&gt;:    jne    0x7ffff60a4ba8 &lt;_ZN13QQuickWebView5eventEP6QEvent+88&gt;
&gt;    0x00007ffff60a4b83 &lt;+51&gt;:    cmp    $0x53,%eax
&gt;    0x00007ffff60a4b86 &lt;+54&gt;:    je     0x7ffff60a4be0 &lt;_ZN13QQuickWebView5eventEP6QEvent+144&gt;
&gt;    0x00007ffff60a4b88 &lt;+56&gt;:    mov    %rbx,%rsi
&gt;    0x00007ffff60a4b8b &lt;+59&gt;:    mov    %rbp,%rdi
&gt;    0x00007ffff60a4b8e &lt;+62&gt;:    mov    0x8(%rsp),%rbx
&gt;    0x00007ffff60a4b93 &lt;+67&gt;:    mov    0x10(%rsp),%rbp
&gt;    0x00007ffff60a4b98 &lt;+72&gt;:    add    $0x18,%rsp
&gt;    0x00007ffff60a4b9c &lt;+76&gt;:    jmpq   0x7ffff5ff4e60 &lt;_ZN10QQuickItem5eventEP6QEvent@plt&gt;
&gt;    0x00007ffff60a4ba1 &lt;+81&gt;:    nopl   0x0(%rax)
&gt;    0x00007ffff60a4ba8 &lt;+88&gt;:    mov    0x90(%rdx),%rdi
&gt;    0x00007ffff60a4baf &lt;+95&gt;:    callq  0x7ffff60a3160 &lt;_ZNK13QQuickWebPage12eventHandlerEv&gt;
&gt;    0x00007ffff60a4bb4 &lt;+100&gt;:   mov    %rbx,%rsi
&gt;    0x00007ffff60a4bb7 &lt;+103&gt;:   mov    %rax,%rdi
&gt;    0x00007ffff60a4bba &lt;+106&gt;:   callq  0x7ffff61144a0 &lt;_ZN21QtWebPageEventHandler11handleEventEP6QEvent&gt;
&gt;    0x00007ffff60a4bbf &lt;+111&gt;:   test   %al,%al
&gt;    0x00007ffff60a4bc1 &lt;+113&gt;:   je     0x7ffff60a4b88 &lt;_ZN13QQuickWebView5eventEP6QEvent+56&gt;
&gt;    0x00007ffff60a4bc3 &lt;+115&gt;:   mov    $0x1,%eax
&gt;    0x00007ffff60a4bc8 &lt;+120&gt;:   mov    0x8(%rsp),%rbx
&gt;    0x00007ffff60a4bcd &lt;+125&gt;:   mov    0x10(%rsp),%rbp
&gt;    0x00007ffff60a4bd2 &lt;+130&gt;:   add    $0x18,%rsp
&gt;    0x00007ffff60a4bd6 &lt;+134&gt;:   retq   
&gt;    0x00007ffff60a4bd7 &lt;+135&gt;:   nopw   0x0(%rax,%rax,1)
&gt;    0x00007ffff60a4be0 &lt;+144&gt;:   xor    %eax,%eax
&gt;    0x00007ffff60a4be2 &lt;+146&gt;:   mov    0x8(%rsp),%rbx
&gt;    0x00007ffff60a4be7 &lt;+151&gt;:   mov    0x10(%rsp),%rbp
&gt;    0x00007ffff60a4bec &lt;+156&gt;:   add    $0x18,%rsp
&gt;    0x00007ffff60a4bf0 &lt;+160&gt;:   retq
&gt; 
&gt; The main motivation to make this change is that QQuickWebView::event is used a lot and the lookup would grow logarithmically by the number of events handled by QQuickWebPage when we could do this in O(1) instead.
&gt; 
&gt; Adding some people to CC... What you think of this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551666</commentid>
    <comment_count>5</comment_count>
      <attachid>125940</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2012-02-07 18:35:49 -0800</bug_when>
    <thetext>Comment on attachment 125940
Patch

Wait wait wait, what is the improvement here? How much faster is that? I want to see numbers, assembly is not enough. This is a huge hack for maybe nothing. I don&apos;t remember seeing ::event being a bottleneck while working in Qt (but I maybe wrong). We&apos;re not yet in the state of micro-optimizing our code. I believe that callgrind will show much more bottleneck than this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551674</commentid>
    <comment_count>6</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2012-02-07 18:42:16 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 125940 [details])
&gt; Wait wait wait, what is the improvement here? How much faster is that? I want to see numbers, assembly is not enough. This is a huge hack for maybe nothing. I don&apos;t remember seeing ::event being a bottleneck while working in Qt (but I maybe wrong). We&apos;re not yet in the state of micro-optimizing our code. I believe that callgrind will show much more bottleneck than this one.

Also what is the balance here memory usage of this map vs the tiny optimization?

One way to optimize the assembly code here is to group each case to avoid big hole (which is the case today) starting let say from the smallest value to the highest, that would help the compiler to maybe generate a jump table for this switch/case and maybe lead to worst case O(n) best case O(1).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551682</commentid>
    <comment_count>7</comment_count>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2012-02-07 18:50:12 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; (From update of attachment 125940 [details] [details])
&gt; &gt; Wait wait wait, what is the improvement here? How much faster is that? I want to see numbers, assembly is not enough. This is a huge hack for maybe nothing. I don&apos;t remember seeing ::event being a bottleneck while working in Qt (but I maybe wrong). We&apos;re not yet in the state of micro-optimizing our code. I believe that callgrind will show much more bottleneck than this one.
&gt; 
&gt; Also what is the balance here memory usage of this map vs the tiny optimization?
&gt; 
&gt; One way to optimize the assembly code here is to group each case to avoid big hole (which is the case today) starting let say from the smallest value to the highest, that would help the compiler to maybe generate a jump table for this switch/case and maybe lead to worst case O(n) best case O(1).

Ok I&apos;ll look into numbers for it (valgrind/cachegrind is an unknown tool for me yet). Still it looks wrong to me that we are not already doing this fast enough, but I believe you may be right, this may not be a bottleneck. In the worse case we can skip this task and fix at some point later (when we get into that stage of micro-optimization), but I can only say more about it tomorrow. Thanks for the feedback! :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551909</commentid>
    <comment_count>8</comment_count>
      <attachid>125940</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-02-08 02:00:33 -0800</bug_when>
    <thetext>Comment on attachment 125940
Patch

I think the best solution is to get rid of this code altogether. With and without your patch we do a type switch _three_ times. Once in QtQuick, which calls our specific mouseFooEvent, touchEvent, etc. handlers in QQuickWebView. We throw away that result and dispatch once more in QQuickWebView::event, just to throw that away again and do another type dispatch in QtWebPageEventHandler. Let&apos;s get rid of our own type dispatch and simply change for example void QQuickWebView::mouseReleaseEvent(QMouseEvent* event) to:

void QQuickWebView::mouseReleaseEvent(QMouseEvent* event)
{
    d-&gt;pageView-&gt;eventHandler()-&gt;mouseReleaseEvent(event);
}

Am I missing something?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551959</commentid>
    <comment_count>9</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-02-08 03:10:14 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 125940 [details])
&gt; I think the best solution is to get rid of this code altogether.

I agree with Simon on this, AFAIR the function originates from the time where we did not have the page event handler yet and the item receiving the events was the page, not the view.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552035</commentid>
    <comment_count>10</comment_count>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2012-02-08 04:52:00 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 125940 [details])
&gt; I think the best solution is to get rid of this code altogether. With and without your patch we do a type switch _three_ times. Once in QtQuick, which calls our specific mouseFooEvent, touchEvent, etc. handlers in QQuickWebView. We throw away that result and dispatch once more in QQuickWebView::event, just to throw that away again and do another type dispatch in QtWebPageEventHandler. Let&apos;s get rid of our own type dispatch and simply change for example void QQuickWebView::mouseReleaseEvent(QMouseEvent* event) to:
&gt; 
&gt; void QQuickWebView::mouseReleaseEvent(QMouseEvent* event)
&gt; {
&gt;     d-&gt;pageView-&gt;eventHandler()-&gt;mouseReleaseEvent(event);
&gt; }
&gt; 
&gt; Am I missing something?

Good point Simon, it seems more reasonable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564202</commentid>
    <comment_count>11</comment_count>
      <attachid>128710</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-02-24 04:51:01 -0800</bug_when>
    <thetext>Created attachment 128710
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564203</commentid>
    <comment_count>12</comment_count>
      <attachid>128710</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2012-02-24 04:53:06 -0800</bug_when>
    <thetext>Comment on attachment 128710
Patch

LGTM. Nice cleanup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564204</commentid>
    <comment_count>13</comment_count>
      <attachid>128710</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-02-24 04:53:18 -0800</bug_when>
    <thetext>Comment on attachment 128710
Patch

Nice!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564384</commentid>
    <comment_count>14</comment_count>
      <attachid>128710</attachid>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2012-02-24 09:32:12 -0800</bug_when>
    <thetext>Comment on attachment 128710
Patch

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

nice :)

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:1292
&gt; +    d-&gt;pageView-&gt;eventHandler()-&gt;handleInputMethodEvent(event);

Can you confirm if we&apos;re still propagating this event? I recall that I&apos;ve tried to reproduce it when I was looking into this but I couldn&apos;t find out. If we are not using it, maybe we should just remove it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564387</commentid>
    <comment_count>15</comment_count>
      <attachid>128710</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2012-02-24 09:35:30 -0800</bug_when>
    <thetext>Comment on attachment 128710
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:1292
&gt;&gt; +    d-&gt;pageView-&gt;eventHandler()-&gt;handleInputMethodEvent(event);
&gt; 
&gt; Can you confirm if we&apos;re still propagating this event? I recall that I&apos;ve tried to reproduce it when I was looking into this but I couldn&apos;t find out. If we are not using it, maybe we should just remove it.

It is used whenever an input method exists in the app :D.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567578</commentid>
    <comment_count>16</comment_count>
      <attachid>129437</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-02-29 07:03:42 -0800</bug_when>
    <thetext>Created attachment 129437
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567580</commentid>
    <comment_count>17</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-02-29 07:07:19 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; Created an attachment (id=129437) [details]
&gt; Patch

New patch. I landed the original patch but had to roll it out again, because many WK2 tests failed. It turned out that this is caused by WTR sending events directly to the QQuickItem instead of sending them through the QQuickCanvas. The latter dispatches the events directly to QQuickItem::fooEvent(QFooEvent*), _not_ going through ::event. I&apos;ll change WTR to send the events through the canvas, like it would happen in a &quot;real&quot; application.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568472</commentid>
    <comment_count>18</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-03-01 01:33:31 -0800</bug_when>
    <thetext>Committed r109326: &lt;http://trac.webkit.org/changeset/109326&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568660</commentid>
    <comment_count>19</comment_count>
      <attachid>129437</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-03-01 07:52:43 -0800</bug_when>
    <thetext>Comment on attachment 129437
Patch

Clearning review. Strange that webkit-patch didn&apos;t do it this time around :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125940</attachid>
            <date>2012-02-07 15:16:35 -0800</date>
            <delta_ts>2012-02-24 04:50:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78047-20120207201633.patch</filename>
            <type>text/plain</type>
            <size>4098</size>
            <attacher name="Rafael Brandao">rafael.lobo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2OTU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNmEzZTcxOGNkZDE4OTZi
YmRlOTc5MGM5OTVkMmVlZWI0YTdmMGQxOC4uZDg0MzJiYzJjMWVmNWE0YzUxMDc2NjBiODM0ODgz
YmE2NjUzMmIyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEyLTAyLTA3ICBSYWZh
ZWwgQnJhbmRhbyAgPHJhZmFlbC5sb2JvQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgW1F0XVtX
SzJdIFFRdWlja1dlYlZpZXc6OmV2ZW50IHNob3VsZCBsb29rdXAgZmFzdGVyIHdoaWNoIGV2ZW50
cyBRUXVpY2tXZWJQYWdlIGNhbiBoYW5kbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc4MDQ3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgV2UgY3JlYXRlIGFuIGFycmF5IHRvIG1hcCB3aGljaCBldmVudHMg
c2hvdWxkIGJlIGhhbmRsZWQgYnkgUVF1aWNrV2ViUGFnZS4gSXQgaXMgc3RhdGljIGFuZAorICAg
ICAgICBmaWxsZWQgb25jZSBRUXVpY2tXZWJWaWV3UHJpdmF0ZSBpcyBjcmVhdGVkLiBQcmV2aW91
c2x5IGl0IHdvdWxkIHRha2UgYXQgbW9zdCBmb3VyIGNvbXBhcmlzb25zCisgICAgICAgIHRvIG1h
a2UgdGhpcyBkZWNpc2lvbiBhbmQgbm93IGl0IHRha2VzIGF0IG1vc3QgdHdvIChpbiBhc3NlbWJs
eSkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwOgorICAg
ICAgICAoaW5pdFRhYmxlRXZlbnRIYW5kbGVkQnlQYWdlKToKKyAgICAgICAgKHNob3VsZFBhZ2VI
YW5kbGVFdmVudCk6CisgICAgICAgIChjcmVhdGVQcml2YXRlT2JqZWN0KToKKyAgICAgICAgKFFR
dWlja1dlYlZpZXc6OmV2ZW50KToKKwogMjAxMi0wMi0wNyAgQWxsYW4gU2FuZGZlbGQgSmVuc2Vu
ICA8YWxsYW4uamVuc2VuQG5va2lhLmNvbT4KIAogICAgICAgICBFbmNvZGUgcmFkaXVzLCBmb3Jj
ZSBhbmQgcm90YXRpb25BbmdsZSBpbiBXZWJQbGF0Zm9ybVRvdWNoUG9pbnQuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcAppbmRleCA3ZWE2
ZDM0N2NmMGFjOTY4ZTYyYzY1NDQ0YjQwZmEyY2U4ZmIwZjBiLi42YWQyNGIzMzVlMGM2Zjg2ZGIx
NmM1ZDE0MzdmYWJiOWIzNmI0YmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKQEAgLTU2LDkgKzU2LDUyIEBACiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAogc3RhdGljIGJvb2wgc19mbGlja2FibGVWaWV3cG9ydEVuYWJsZWQg
PSB0cnVlOworc3RhdGljIGJvb2wgc19zaG91bGRJbml0VGFibGVFdmVudEhhbmRsZWRCeVBhZ2Ug
PSB0cnVlOworc3RhdGljIGJvb2wgc19ldmVudEhhbmRsZWRCeVBhZ2VbMjU2XTsKKworc3RhdGlj
IHZvaWQgaW5pdFRhYmxlRXZlbnRIYW5kbGVkQnlQYWdlKCkKK3sKKyAgICBpZiAoIXNfc2hvdWxk
SW5pdFRhYmxlRXZlbnRIYW5kbGVkQnlQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBzX3No
b3VsZEluaXRUYWJsZUV2ZW50SGFuZGxlZEJ5UGFnZSA9IGZhbHNlOworICAgIFFFdmVudDo6VHlw
ZSBldmVudExpc3RbXSA9IHsKKyAgICAgICAgUUV2ZW50OjpNb3VzZU1vdmUsCisgICAgICAgIFFF
dmVudDo6TW91c2VCdXR0b25QcmVzcywKKyAgICAgICAgUUV2ZW50OjpNb3VzZUJ1dHRvblJlbGVh
c2UsCisgICAgICAgIFFFdmVudDo6TW91c2VCdXR0b25EYmxDbGljaywKKyAgICAgICAgUUV2ZW50
OjpXaGVlbCwKKyAgICAgICAgUUV2ZW50OjpIb3ZlckxlYXZlLAorICAgICAgICBRRXZlbnQ6Okhv
dmVyRW50ZXIsCisgICAgICAgIFFFdmVudDo6SG92ZXJNb3ZlLAorICAgICAgICBRRXZlbnQ6OkRy
YWdFbnRlciwKKyAgICAgICAgUUV2ZW50OjpEcmFnTGVhdmUsCisgICAgICAgIFFFdmVudDo6RHJh
Z01vdmUsCisgICAgICAgIFFFdmVudDo6RHJvcCwKKyAgICAgICAgUUV2ZW50OjpLZXlQcmVzcywK
KyAgICAgICAgUUV2ZW50OjpLZXlSZWxlYXNlLAorICAgICAgICBRRXZlbnQ6OkZvY3VzSW4sCisg
ICAgICAgIFFFdmVudDo6Rm9jdXNPdXQsCisgICAgICAgIFFFdmVudDo6VG91Y2hCZWdpbiwKKyAg
ICAgICAgUUV2ZW50OjpUb3VjaEVuZCwKKyAgICAgICAgUUV2ZW50OjpUb3VjaFVwZGF0ZQorICAg
IH07CisgICAgaW50IG4gPSBzaXplb2YoZXZlbnRMaXN0KSAvIHNpemVvZihRRXZlbnQ6OlR5cGUp
OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgIFFfQVNTRVJUKGV2
ZW50TGlzdFtpXSA8IDI1Nik7CisgICAgICAgIHNfZXZlbnRIYW5kbGVkQnlQYWdlW2V2ZW50TGlz
dFtpXV0gPSB0cnVlOworICAgIH0KK30KKworc3RhdGljIGlubGluZSBib29sIHNob3VsZFBhZ2VI
YW5kbGVFdmVudChjb25zdCBRRXZlbnQ6OlR5cGUmIGV2ZW50KQoreworICAgIHJldHVybiBldmVu
dCA8IDI1NiAmJiBzX2V2ZW50SGFuZGxlZEJ5UGFnZVtldmVudF07Cit9CisKIAogc3RhdGljIFFR
dWlja1dlYlZpZXdQcml2YXRlKiBjcmVhdGVQcml2YXRlT2JqZWN0KFFRdWlja1dlYlZpZXcqIHB1
YmxpY09iamVjdCkKIHsKKyAgICBpbml0VGFibGVFdmVudEhhbmRsZWRCeVBhZ2UoKTsKICAgICBp
ZiAoc19mbGlja2FibGVWaWV3cG9ydEVuYWJsZWQpCiAgICAgICAgIHJldHVybiBuZXcgUVF1aWNr
V2ViVmlld0ZsaWNrYWJsZVByaXZhdGUocHVibGljT2JqZWN0KTsKICAgICByZXR1cm4gbmV3IFFR
dWlja1dlYlZpZXdMZWdhY3lQcml2YXRlKHB1YmxpY09iamVjdCk7CkBAIC0xMjA2LDMyICsxMjQ5
LDExIEBAIGJvb2wgUVF1aWNrV2ViVmlldzo6ZXZlbnQoUUV2ZW50KiBldikKIHsKICAgICBRX0Qo
UVF1aWNrV2ViVmlldyk7CiAKLSAgICBzd2l0Y2ggKGV2LT50eXBlKCkpIHsKLSAgICBjYXNlIFFF
dmVudDo6TW91c2VNb3ZlOgotICAgIGNhc2UgUUV2ZW50OjpNb3VzZUJ1dHRvblByZXNzOgotICAg
IGNhc2UgUUV2ZW50OjpNb3VzZUJ1dHRvblJlbGVhc2U6Ci0gICAgY2FzZSBRRXZlbnQ6Ok1vdXNl
QnV0dG9uRGJsQ2xpY2s6Ci0gICAgY2FzZSBRRXZlbnQ6OldoZWVsOgotICAgIGNhc2UgUUV2ZW50
OjpIb3ZlckxlYXZlOgotICAgIGNhc2UgUUV2ZW50OjpIb3ZlckVudGVyOgotICAgIGNhc2UgUUV2
ZW50OjpIb3Zlck1vdmU6Ci0gICAgY2FzZSBRRXZlbnQ6OkRyYWdFbnRlcjoKLSAgICBjYXNlIFFF
dmVudDo6RHJhZ0xlYXZlOgotICAgIGNhc2UgUUV2ZW50OjpEcmFnTW92ZToKLSAgICBjYXNlIFFF
dmVudDo6RHJvcDoKLSAgICBjYXNlIFFFdmVudDo6S2V5UHJlc3M6Ci0gICAgY2FzZSBRRXZlbnQ6
OktleVJlbGVhc2U6Ci0gICAgY2FzZSBRRXZlbnQ6OkZvY3VzSW46Ci0gICAgY2FzZSBRRXZlbnQ6
OkZvY3VzT3V0OgotICAgIGNhc2UgUUV2ZW50OjpUb3VjaEJlZ2luOgotICAgIGNhc2UgUUV2ZW50
OjpUb3VjaEVuZDoKLSAgICBjYXNlIFFFdmVudDo6VG91Y2hVcGRhdGU6CisgICAgaWYgKHNob3Vs
ZFBhZ2VIYW5kbGVFdmVudChldi0+dHlwZSgpKSkgewogICAgICAgICBpZiAoZC0+cGFnZVZpZXct
PmV2ZW50SGFuZGxlcigpLT5oYW5kbGVFdmVudChldikpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBpZiAoZXYtPnR5cGUoKSA9PSBRRXZlbnQ6OklucHV0TWV0aG9kKQot
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIGF2b2lkIGFuIGVu
ZGxlc3MgbG9vcCBpbiBjb25uZWN0aW9uIHdpdGggUVF1aWNrSXRlbTo6ZXZlbnQoKS4KKyAgICB9
IGVsc2UgaWYgKGV2LT50eXBlKCkgPT0gUUV2ZW50OjpJbnB1dE1ldGhvZCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIFFRdWlja0l0ZW06OmV2ZW50KGV2KTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128710</attachid>
            <date>2012-02-24 04:51:01 -0800</date>
            <delta_ts>2012-02-29 07:03:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78047-20120224135103.patch</filename>
            <type>text/plain</type>
            <size>19482</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4NzQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMjZlZmI0MDBlOWYxODVi
OGRjMzAyNDhjNjhiN2Q0N2M0NGZmYTk3ZS4uMmMyYmFkODYwMDA4ZDkyOTY0OWU0OTMxMmMzNGQ3
YjNhYTc5NjdiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEyLTAyLTI0ICBTaW1v
biBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KKworICAgICAgICBbUXRdW1dL
Ml0gUVF1aWNrV2ViVmlldzo6ZXZlbnQgc2hvdWxkIGxvb2t1cCBmYXN0ZXIgd2hpY2ggZXZlbnRz
IFFRdWlja1dlYlBhZ2UgY2FuIGhhbmRsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzgwNDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBSZXBsYWNlZCBkb3VibGUtZGlzcGF0Y2ggb2YgZXZlbnRzIHdpdGgg
ZGlyZWN0IGZvcndhcmRpbmcgb2YgZXZlbnRzIGZyb20gUVF1aWNrV2ViVmlldzo6KkV2ZW50IHRv
CisgICAgICAgIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlKkV2ZW50LgorCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKFFRdWlja1dl
YlZpZXc6OmtleVByZXNzRXZlbnQpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6a2V5UmVsZWFz
ZUV2ZW50KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OmlucHV0TWV0aG9kRXZlbnQpOgorICAg
ICAgICAoUVF1aWNrV2ViVmlldzo6Zm9jdXNJbkV2ZW50KToKKyAgICAgICAgKFFRdWlja1dlYlZp
ZXc6OmZvY3VzT3V0RXZlbnQpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6dG91Y2hFdmVudCk6
CisgICAgICAgIChRUXVpY2tXZWJWaWV3Ojptb3VzZVByZXNzRXZlbnQpOgorICAgICAgICAoUVF1
aWNrV2ViVmlldzo6bW91c2VNb3ZlRXZlbnQpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6bW91
c2VSZWxlYXNlRXZlbnQpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6bW91c2VEb3VibGVDbGlj
a0V2ZW50KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OndoZWVsRXZlbnQpOgorICAgICAgICAo
UVF1aWNrV2ViVmlldzo6aG92ZXJFbnRlckV2ZW50KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6
OmhvdmVyTW92ZUV2ZW50KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OmhvdmVyTGVhdmVFdmVu
dCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3OjpkcmFnTW92ZUV2ZW50KToKKyAgICAgICAgKFFR
dWlja1dlYlZpZXc6OmRyYWdFbnRlckV2ZW50KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OmRy
YWdMZWF2ZUV2ZW50KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OmRyb3BFdmVudCk6CisgICAg
ICAgIChRUXVpY2tXZWJWaWV3OjpldmVudCk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2Vi
UGFnZUV2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChRdFdlYlBhZ2VFdmVudEhhbmRsZXI6Omhh
bmRsZU1vdXNlTW92ZUV2ZW50KToKKyAgICAgICAgKFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFu
ZGxlTW91c2VQcmVzc0V2ZW50KToKKyAgICAgICAgKFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFu
ZGxlTW91c2VSZWxlYXNlRXZlbnQpOgorICAgICAgICAoUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpo
YW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxl
SG92ZXJMZWF2ZUV2ZW50KToKKyAgICAgICAgKFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxl
SG92ZXJNb3ZlRXZlbnQpOgorICAgICAgICAoUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVE
cmFnRW50ZXJFdmVudCk6CisgICAgICAgIChRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZURy
YWdMZWF2ZUV2ZW50KToKKyAgICAgICAgKFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlRHJh
Z01vdmVFdmVudCk6CisgICAgICAgIChRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZURyb3BF
dmVudCk6CisgICAgICAgIChRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZUtleVByZXNzRXZl
bnQpOgorICAgICAgICAoUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVLZXlSZWxlYXNlRXZl
bnQpOgorICAgICAgICAoUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVGb2N1c0luRXZlbnQp
OgorICAgICAgICAoUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVGb2N1c091dEV2ZW50KToK
KyAgICAgICAgKFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlSW5wdXRNZXRob2RFdmVudCk6
CisgICAgICAgIChRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuaDoKKyAgICAgICAgKFF0
V2ViUGFnZUV2ZW50SGFuZGxlcik6CisKIDIwMTItMDItMjMgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNA
YXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFtZSBbc2V0U3xzXXVwcHJlc3NJbmNyZW1lbnRhbFJl
bmRlcmluZyB0byBbc2V0U3xzXXVwcHJlc3Nlc0luY3JlbWVudGFsUmVuZGVyaW5nIGFuZCBtYWtl
IGl0IFdlYlByZWZlcmVuY2VzIEFQSS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCmluZGV4IDU2ZTMyNmFmNzI5MzYzMGMyZDAyOWNlMWY1
NjVmZjIxZjVmYThjZGQuLjVkYWI4ZWUzNGRmZjAyZmMxMjA2ZWI2NDUzOTgzYjgwN2JlMTk3ZjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmll
dy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3
LmNwcApAQCAtMTI3NiwxMjggKzEyNzYsMTIwIEBAIHZvaWQgUVF1aWNrV2ViVmlldzo6Y29tcG9u
ZW50Q29tcGxldGUoKQogCiB2b2lkIFFRdWlja1dlYlZpZXc6OmtleVByZXNzRXZlbnQoUUtleUV2
ZW50KiBldmVudCkKIHsKLSAgICB0aGlzLT5ldmVudChldmVudCk7CisgICAgUV9EKFFRdWlja1dl
YlZpZXcpOworICAgIGQtPnBhZ2VWaWV3LT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlS2V5UHJlc3NF
dmVudChldmVudCk7CiB9CiAKIHZvaWQgUVF1aWNrV2ViVmlldzo6a2V5UmVsZWFzZUV2ZW50KFFL
ZXlFdmVudCogZXZlbnQpCiB7Ci0gICAgdGhpcy0+ZXZlbnQoZXZlbnQpOworICAgIFFfRChRUXVp
Y2tXZWJWaWV3KTsKKyAgICBkLT5wYWdlVmlldy0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZUtleVJl
bGVhc2VFdmVudChldmVudCk7CiB9CiAKIHZvaWQgUVF1aWNrV2ViVmlldzo6aW5wdXRNZXRob2RF
dmVudChRSW5wdXRNZXRob2RFdmVudCogZXZlbnQpCiB7Ci0gICAgdGhpcy0+ZXZlbnQoZXZlbnQp
OworICAgIFFfRChRUXVpY2tXZWJWaWV3KTsKKyAgICBkLT5wYWdlVmlldy0+ZXZlbnRIYW5kbGVy
KCktPmhhbmRsZUlucHV0TWV0aG9kRXZlbnQoZXZlbnQpOwogfQogCiB2b2lkIFFRdWlja1dlYlZp
ZXc6OmZvY3VzSW5FdmVudChRRm9jdXNFdmVudCogZXZlbnQpCiB7Ci0gICAgdGhpcy0+ZXZlbnQo
ZXZlbnQpOworICAgIFFfRChRUXVpY2tXZWJWaWV3KTsKKyAgICBkLT5wYWdlVmlldy0+ZXZlbnRI
YW5kbGVyKCktPmhhbmRsZUZvY3VzSW5FdmVudChldmVudCk7CiB9CiAKIHZvaWQgUVF1aWNrV2Vi
Vmlldzo6Zm9jdXNPdXRFdmVudChRRm9jdXNFdmVudCogZXZlbnQpCiB7Ci0gICAgdGhpcy0+ZXZl
bnQoZXZlbnQpOworICAgIFFfRChRUXVpY2tXZWJWaWV3KTsKKyAgICBkLT5wYWdlVmlldy0+ZXZl
bnRIYW5kbGVyKCktPmhhbmRsZUZvY3VzT3V0RXZlbnQoZXZlbnQpOwogfQogCiB2b2lkIFFRdWlj
a1dlYlZpZXc6OnRvdWNoRXZlbnQoUVRvdWNoRXZlbnQqIGV2ZW50KQogeworICAgIFFfRChRUXVp
Y2tXZWJWaWV3KTsKICAgICBmb3JjZUFjdGl2ZUZvY3VzKCk7Ci0gICAgdGhpcy0+ZXZlbnQoZXZl
bnQpOworICAgIGQtPnBhZ2VWaWV3LT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlVG91Y2hFdmVudChl
dmVudCk7CiB9CiAKIHZvaWQgUVF1aWNrV2ViVmlldzo6bW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2
ZW50KiBldmVudCkKIHsKKyAgICBRX0QoUVF1aWNrV2ViVmlldyk7CiAgICAgZm9yY2VBY3RpdmVG
b2N1cygpOwotICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKKyAgICBkLT5wYWdlVmlldy0+ZXZlbnRI
YW5kbGVyKCktPmhhbmRsZU1vdXNlUHJlc3NFdmVudChldmVudCk7CiB9CiAKIHZvaWQgUVF1aWNr
V2ViVmlldzo6bW91c2VNb3ZlRXZlbnQoUU1vdXNlRXZlbnQqIGV2ZW50KQogewotICAgIHRoaXMt
PmV2ZW50KGV2ZW50KTsKKyAgICBRX0QoUVF1aWNrV2ViVmlldyk7CisgICAgZC0+cGFnZVZpZXct
PmV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZU1vdmVFdmVudChldmVudCk7CiB9CiAKIHZvaWQg
UVF1aWNrV2ViVmlldzo6bW91c2VSZWxlYXNlRXZlbnQoUU1vdXNlRXZlbnQqIGV2ZW50KQogewot
ICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKKyAgICBRX0QoUVF1aWNrV2ViVmlldyk7CisgICAgZC0+
cGFnZVZpZXctPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZVJlbGVhc2VFdmVudChldmVudCk7
CiB9CiAKIHZvaWQgUVF1aWNrV2ViVmlldzo6bW91c2VEb3VibGVDbGlja0V2ZW50KFFNb3VzZUV2
ZW50KiBldmVudCkKIHsKLSAgICB0aGlzLT5ldmVudChldmVudCk7CisgICAgUV9EKFFRdWlja1dl
YlZpZXcpOworICAgIC8vIElmIGEgTW91c2VCdXR0b25EYmxDbGljayB3YXMgcmVjZWl2ZWQgdGhl
biB3ZSBnb3QgYSBNb3VzZUJ1dHRvblByZXNzIGJlZm9yZQorICAgIC8vIGhhbmRsZU1vdXNlUHJl
c3NFdmVudCB3aWxsIHRha2UgY2FyZSBvZiBkb3VibGUgY2xpY2tzLgorICAgIGQtPnBhZ2VWaWV3
LT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VQcmVzc0V2ZW50KGV2ZW50KTsKIH0KIAogdm9p
ZCBRUXVpY2tXZWJWaWV3Ojp3aGVlbEV2ZW50KFFXaGVlbEV2ZW50KiBldmVudCkKIHsKLSAgICB0
aGlzLT5ldmVudChldmVudCk7CisgICAgUV9EKFFRdWlja1dlYlZpZXcpOworICAgIGQtPnBhZ2VW
aWV3LT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlV2hlZWxFdmVudChldmVudCk7CiB9CiAKIHZvaWQg
UVF1aWNrV2ViVmlldzo6aG92ZXJFbnRlckV2ZW50KFFIb3ZlckV2ZW50KiBldmVudCkKIHsKLSAg
ICB0aGlzLT5ldmVudChldmVudCk7CisgICAgUV9EKFFRdWlja1dlYlZpZXcpOworICAgIC8vIE1h
cCBIb3ZlckVudGVyIHRvIE1vdmUsIGZvciBXZWJLaXQgdGhlIGRpc3RpbmN0aW9uIGRvZXNuJ3Qg
bWF0dGVyLgorICAgIGQtPnBhZ2VWaWV3LT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlSG92ZXJNb3Zl
RXZlbnQoZXZlbnQpOwogfQogCiB2b2lkIFFRdWlja1dlYlZpZXc6OmhvdmVyTW92ZUV2ZW50KFFI
b3ZlckV2ZW50KiBldmVudCkKIHsKLSAgICB0aGlzLT5ldmVudChldmVudCk7CisgICAgUV9EKFFR
dWlja1dlYlZpZXcpOworICAgIGQtPnBhZ2VWaWV3LT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlSG92
ZXJNb3ZlRXZlbnQoZXZlbnQpOwogfQogCiB2b2lkIFFRdWlja1dlYlZpZXc6OmhvdmVyTGVhdmVF
dmVudChRSG92ZXJFdmVudCogZXZlbnQpCiB7Ci0gICAgdGhpcy0+ZXZlbnQoZXZlbnQpOworICAg
IFFfRChRUXVpY2tXZWJWaWV3KTsKKyAgICBkLT5wYWdlVmlldy0+ZXZlbnRIYW5kbGVyKCktPmhh
bmRsZUhvdmVyTGVhdmVFdmVudChldmVudCk7CiB9CiAKIHZvaWQgUVF1aWNrV2ViVmlldzo6ZHJh
Z01vdmVFdmVudChRRHJhZ01vdmVFdmVudCogZXZlbnQpCiB7Ci0gICAgdGhpcy0+ZXZlbnQoZXZl
bnQpOworICAgIFFfRChRUXVpY2tXZWJWaWV3KTsKKyAgICBkLT5wYWdlVmlldy0+ZXZlbnRIYW5k
bGVyKCktPmhhbmRsZURyYWdNb3ZlRXZlbnQoZXZlbnQpOwogfQogCiB2b2lkIFFRdWlja1dlYlZp
ZXc6OmRyYWdFbnRlckV2ZW50KFFEcmFnRW50ZXJFdmVudCogZXZlbnQpCiB7Ci0gICAgdGhpcy0+
ZXZlbnQoZXZlbnQpOworICAgIFFfRChRUXVpY2tXZWJWaWV3KTsKKyAgICBkLT5wYWdlVmlldy0+
ZXZlbnRIYW5kbGVyKCktPmhhbmRsZURyYWdFbnRlckV2ZW50KGV2ZW50KTsKIH0KIAogdm9pZCBR
UXVpY2tXZWJWaWV3OjpkcmFnTGVhdmVFdmVudChRRHJhZ0xlYXZlRXZlbnQqIGV2ZW50KQogewot
ICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKKyAgICBRX0QoUVF1aWNrV2ViVmlldyk7CisgICAgZC0+
cGFnZVZpZXctPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVEcmFnTGVhdmVFdmVudChldmVudCk7CiB9
CiAKIHZvaWQgUVF1aWNrV2ViVmlldzo6ZHJvcEV2ZW50KFFEcm9wRXZlbnQqIGV2ZW50KQogewot
ICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKKyAgICBRX0QoUVF1aWNrV2ViVmlldyk7CisgICAgZC0+
cGFnZVZpZXctPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVEcm9wRXZlbnQoZXZlbnQpOwogfQogCiBi
b29sIFFRdWlja1dlYlZpZXc6OmV2ZW50KFFFdmVudCogZXYpCiB7Ci0gICAgUV9EKFFRdWlja1dl
YlZpZXcpOwotCi0gICAgc3dpdGNoIChldi0+dHlwZSgpKSB7Ci0gICAgY2FzZSBRRXZlbnQ6Ok1v
dXNlTW92ZToKLSAgICBjYXNlIFFFdmVudDo6TW91c2VCdXR0b25QcmVzczoKLSAgICBjYXNlIFFF
dmVudDo6TW91c2VCdXR0b25SZWxlYXNlOgotICAgIGNhc2UgUUV2ZW50OjpNb3VzZUJ1dHRvbkRi
bENsaWNrOgotICAgIGNhc2UgUUV2ZW50OjpXaGVlbDoKLSAgICBjYXNlIFFFdmVudDo6SG92ZXJM
ZWF2ZToKLSAgICBjYXNlIFFFdmVudDo6SG92ZXJFbnRlcjoKLSAgICBjYXNlIFFFdmVudDo6SG92
ZXJNb3ZlOgotICAgIGNhc2UgUUV2ZW50OjpEcmFnRW50ZXI6Ci0gICAgY2FzZSBRRXZlbnQ6OkRy
YWdMZWF2ZToKLSAgICBjYXNlIFFFdmVudDo6RHJhZ01vdmU6Ci0gICAgY2FzZSBRRXZlbnQ6OkRy
b3A6Ci0gICAgY2FzZSBRRXZlbnQ6OktleVByZXNzOgotICAgIGNhc2UgUUV2ZW50OjpLZXlSZWxl
YXNlOgotICAgIGNhc2UgUUV2ZW50OjpGb2N1c0luOgotICAgIGNhc2UgUUV2ZW50OjpGb2N1c091
dDoKLSAgICBjYXNlIFFFdmVudDo6VG91Y2hCZWdpbjoKLSAgICBjYXNlIFFFdmVudDo6VG91Y2hF
bmQ6Ci0gICAgY2FzZSBRRXZlbnQ6OlRvdWNoQ2FuY2VsOgotICAgIGNhc2UgUUV2ZW50OjpUb3Vj
aFVwZGF0ZToKLSAgICAgICAgaWYgKGQtPnBhZ2VWaWV3LT5ldmVudEhhbmRsZXIoKS0+aGFuZGxl
RXZlbnQoZXYpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGV2
LT50eXBlKCkgPT0gUUV2ZW50OjpJbnB1dE1ldGhvZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBUaGlzIGlzIG5lY2Vzc2FyeSB0byBhdm9pZCBhbiBlbmRsZXNzIGxvb3AgaW4gY29ubmVjdGlv
biB3aXRoIFFRdWlja0l0ZW06OmV2ZW50KCkuCi0KKyAgICAvLyBSZS1pbXBsZW1lbnRlZCBmb3Ig
cG9zc2libGUgZnV0dXJlIHVzZSB3aXRob3V0IGJyZWFraW5nIGJpbmFyeSBjb21wYXRpYmlsaXR5
LgogICAgIHJldHVybiBRUXVpY2tJdGVtOjpldmVudChldik7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAKaW5kZXgg
N2QwODk5MjlhMjIzN2RkYmIxOGQyNDBmMTg5ZWM0YTc2OWY5ZjIxOS4uOTVlZDQzMTkxNmQ0MGZk
NzU4MWQ3ZTM3MTE2YzFlODQ2YWFlNTUzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAKQEAgLTEwNiw1NyArMTA2LDcg
QEAgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjp+UXRXZWJQYWdlRXZlbnRIYW5kbGVyKCkKICAgICBk
aXNjb25uZWN0KHFBcHAtPmlucHV0UGFuZWwoKSwgU0lHTkFMKHZpc2libGVDaGFuZ2VkKCkpLCB0
aGlzLCBTTE9UKGlucHV0UGFuZWxWaXNpYmxlQ2hhbmdlZCgpKSk7CiB9CiAKLWJvb2wgUXRXZWJQ
YWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVFdmVudChRRXZlbnQqIGV2KQotewotICAgIHN3aXRjaCAo
ZXYtPnR5cGUoKSkgewotICAgIGNhc2UgUUV2ZW50OjpNb3VzZU1vdmU6Ci0gICAgICAgIHJldHVy
biBoYW5kbGVNb3VzZU1vdmVFdmVudChzdGF0aWNfY2FzdDxRTW91c2VFdmVudCo+KGV2KSk7Ci0g
ICAgY2FzZSBRRXZlbnQ6Ok1vdXNlQnV0dG9uUHJlc3M6Ci0gICAgY2FzZSBRRXZlbnQ6Ok1vdXNl
QnV0dG9uRGJsQ2xpY2s6Ci0gICAgICAgIC8vIElmIGEgTW91c2VCdXR0b25EYmxDbGljayB3YXMg
cmVjZWl2ZWQgdGhlbiB3ZSBnb3QgYSBNb3VzZUJ1dHRvblByZXNzIGJlZm9yZQotICAgICAgICAv
LyBoYW5kbGVNb3VzZVByZXNzRXZlbnQgd2lsbCB0YWtlIGNhcmUgb2YgZG91YmxlIGNsaWNrcy4K
LSAgICAgICAgcmV0dXJuIGhhbmRsZU1vdXNlUHJlc3NFdmVudChzdGF0aWNfY2FzdDxRTW91c2VF
dmVudCo+KGV2KSk7Ci0gICAgY2FzZSBRRXZlbnQ6Ok1vdXNlQnV0dG9uUmVsZWFzZToKLSAgICAg
ICAgcmV0dXJuIGhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KHN0YXRpY19jYXN0PFFNb3VzZUV2ZW50
Kj4oZXYpKTsKLSAgICBjYXNlIFFFdmVudDo6V2hlZWw6Ci0gICAgICAgIHJldHVybiBoYW5kbGVX
aGVlbEV2ZW50KHN0YXRpY19jYXN0PFFXaGVlbEV2ZW50Kj4oZXYpKTsKLSAgICBjYXNlIFFFdmVu
dDo6SG92ZXJMZWF2ZToKLSAgICAgICAgcmV0dXJuIGhhbmRsZUhvdmVyTGVhdmVFdmVudChzdGF0
aWNfY2FzdDxRSG92ZXJFdmVudCo+KGV2KSk7Ci0gICAgY2FzZSBRRXZlbnQ6OkhvdmVyRW50ZXI6
IC8vIEZhbGwtdGhyb3VnaCwgZm9yIFdlYktpdCB0aGUgZGlzdGluY3Rpb24gZG9lc24ndCBtYXR0
ZXIuCi0gICAgY2FzZSBRRXZlbnQ6OkhvdmVyTW92ZToKLSAgICAgICAgcmV0dXJuIGhhbmRsZUhv
dmVyTW92ZUV2ZW50KHN0YXRpY19jYXN0PFFIb3ZlckV2ZW50Kj4oZXYpKTsKLSAgICBjYXNlIFFF
dmVudDo6RHJhZ0VudGVyOgotICAgICAgICByZXR1cm4gaGFuZGxlRHJhZ0VudGVyRXZlbnQoc3Rh
dGljX2Nhc3Q8UURyYWdFbnRlckV2ZW50Kj4oZXYpKTsKLSAgICBjYXNlIFFFdmVudDo6RHJhZ0xl
YXZlOgotICAgICAgICByZXR1cm4gaGFuZGxlRHJhZ0xlYXZlRXZlbnQoc3RhdGljX2Nhc3Q8UURy
YWdMZWF2ZUV2ZW50Kj4oZXYpKTsKLSAgICBjYXNlIFFFdmVudDo6RHJhZ01vdmU6Ci0gICAgICAg
IHJldHVybiBoYW5kbGVEcmFnTW92ZUV2ZW50KHN0YXRpY19jYXN0PFFEcmFnTW92ZUV2ZW50Kj4o
ZXYpKTsKLSAgICBjYXNlIFFFdmVudDo6RHJvcDoKLSAgICAgICAgcmV0dXJuIGhhbmRsZURyb3BF
dmVudChzdGF0aWNfY2FzdDxRRHJvcEV2ZW50Kj4oZXYpKTsKLSAgICBjYXNlIFFFdmVudDo6S2V5
UHJlc3M6Ci0gICAgICAgIHJldHVybiBoYW5kbGVLZXlQcmVzc0V2ZW50KHN0YXRpY19jYXN0PFFL
ZXlFdmVudCo+KGV2KSk7Ci0gICAgY2FzZSBRRXZlbnQ6OktleVJlbGVhc2U6Ci0gICAgICAgIHJl
dHVybiBoYW5kbGVLZXlSZWxlYXNlRXZlbnQoc3RhdGljX2Nhc3Q8UUtleUV2ZW50Kj4oZXYpKTsK
LSAgICBjYXNlIFFFdmVudDo6Rm9jdXNJbjoKLSAgICAgICAgcmV0dXJuIGhhbmRsZUZvY3VzSW5F
dmVudChzdGF0aWNfY2FzdDxRRm9jdXNFdmVudCo+KGV2KSk7Ci0gICAgY2FzZSBRRXZlbnQ6OkZv
Y3VzT3V0OgotICAgICAgICByZXR1cm4gaGFuZGxlRm9jdXNPdXRFdmVudChzdGF0aWNfY2FzdDxR
Rm9jdXNFdmVudCo+KGV2KSk7Ci0gICAgY2FzZSBRRXZlbnQ6OlRvdWNoQmVnaW46Ci0gICAgY2Fz
ZSBRRXZlbnQ6OlRvdWNoRW5kOgotICAgIGNhc2UgUUV2ZW50OjpUb3VjaENhbmNlbDoKLSAgICBj
YXNlIFFFdmVudDo6VG91Y2hVcGRhdGU6Ci0gICAgICAgIHRvdWNoRXZlbnQoc3RhdGljX2Nhc3Q8
UVRvdWNoRXZlbnQqPihldikpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIFFFdmVu
dDo6SW5wdXRNZXRob2Q6Ci0gICAgICAgIGlucHV0TWV0aG9kRXZlbnQoc3RhdGljX2Nhc3Q8UUlu
cHV0TWV0aG9kRXZlbnQqPihldikpOwotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFRoaXMgaXMg
bmVjZXNzYXJ5IHRvIGF2b2lkIGFuIGVuZGxlc3MgbG9vcCBpbiBjb25uZWN0aW9uIHdpdGggUVF1
aWNrSXRlbTo6ZXZlbnQoKS4KLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogTW92ZSBhbGwgY29tbW9u
IGV2ZW50IGhhbmRsaW5nIGhlcmUuCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFF0V2Vi
UGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VNb3ZlRXZlbnQoUU1vdXNlRXZlbnQqIGV2KQor
dm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlTW92ZUV2ZW50KFFNb3VzZUV2
ZW50KiBldikKIHsKICAgICAvLyBGb3Igc29tZSByZWFzb24gbW91c2UgcHJlc3MgcmVzdWx0cyBp
biBtb3VzZSBob3ZlciAod2hpY2ggaXMKICAgICAvLyBjb252ZXJ0ZWQgdG8gbW91c2UgbW92ZSBm
b3IgV2ViS2l0KS4gV2UgaWdub3JlIHRoZXNlIGhvdmVyCkBAIC0xNjcsMTUgKzExNywxMyBAQCBi
b29sIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VNb3ZlRXZlbnQoUU1vdXNlRXZl
bnQqIGV2KQogICAgIFFUcmFuc2Zvcm0gZnJvbUl0ZW1UcmFuc2Zvcm0gPSBtX3dlYlBhZ2UtPnRy
YW5zZm9ybUZyb21JdGVtKCk7CiAgICAgUVBvaW50RiB3ZWJQYWdlUG9pbnQgPSBmcm9tSXRlbVRy
YW5zZm9ybS5tYXAoZXYtPmxvY2FsUG9zKCkpOwogICAgIGlmIChsYXN0UG9zID09IHdlYlBhZ2VQ
b2ludCkKLSAgICAgICAgcmV0dXJuIGV2LT5pc0FjY2VwdGVkKCk7CisgICAgICAgIHJldHVybjsK
ICAgICBsYXN0UG9zID0gd2ViUGFnZVBvaW50OwogCiAgICAgbV93ZWJQYWdlUHJveHktPmhhbmRs
ZU1vdXNlRXZlbnQoTmF0aXZlV2ViTW91c2VFdmVudChldiwgZnJvbUl0ZW1UcmFuc2Zvcm0sIC8q
ZXZlbnRDbGlja0NvdW50Ki8gMCkpOwotCi0gICAgcmV0dXJuIGV2LT5pc0FjY2VwdGVkKCk7CiB9
CiAKLWJvb2wgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoUU1v
dXNlRXZlbnQqIGV2KQordm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJl
c3NFdmVudChRTW91c2VFdmVudCogZXYpCiB7CiAgICAgUVRyYW5zZm9ybSBmcm9tSXRlbVRyYW5z
Zm9ybSA9IG1fd2ViUGFnZS0+dHJhbnNmb3JtRnJvbUl0ZW0oKTsKICAgICBRUG9pbnRGIHdlYlBh
Z2VQb2ludCA9IGZyb21JdGVtVHJhbnNmb3JtLm1hcChldi0+bG9jYWxQb3MoKSk7CkBAIC0xOTMs
NDggKzE0MSw0MyBAQCBib29sIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVz
c0V2ZW50KFFNb3VzZUV2ZW50KiBldikKIAogICAgIG1fbGFzdENsaWNrID0gd2ViUGFnZVBvaW50
OwogICAgIG1fY2xpY2tUaW1lci5zdGFydChxQXBwLT5zdHlsZUhpbnRzKCktPm1vdXNlRG91Ymxl
Q2xpY2tJbnRlcnZhbCgpLCB0aGlzKTsKLQotICAgIHJldHVybiBldi0+aXNBY2NlcHRlZCgpOwog
fQogCi1ib29sIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQo
UU1vdXNlRXZlbnQqIGV2KQordm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNl
UmVsZWFzZUV2ZW50KFFNb3VzZUV2ZW50KiBldikKIHsKICAgICBRVHJhbnNmb3JtIGZyb21JdGVt
VHJhbnNmb3JtID0gbV93ZWJQYWdlLT50cmFuc2Zvcm1Gcm9tSXRlbSgpOwogICAgIG1fd2ViUGFn
ZVByb3h5LT5oYW5kbGVNb3VzZUV2ZW50KE5hdGl2ZVdlYk1vdXNlRXZlbnQoZXYsIGZyb21JdGVt
VHJhbnNmb3JtLCAvKmV2ZW50Q2xpY2tDb3VudCovIDApKTsKLSAgICByZXR1cm4gZXYtPmlzQWNj
ZXB0ZWQoKTsKIH0KIAotYm9vbCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZl
bnQoUVdoZWVsRXZlbnQqIGV2KQordm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZVdo
ZWVsRXZlbnQoUVdoZWVsRXZlbnQqIGV2KQogewogICAgIFFUcmFuc2Zvcm0gZnJvbUl0ZW1UcmFu
c2Zvcm0gPSBtX3dlYlBhZ2UtPnRyYW5zZm9ybUZyb21JdGVtKCk7CiAgICAgbV93ZWJQYWdlUHJv
eHktPmhhbmRsZVdoZWVsRXZlbnQoTmF0aXZlV2ViV2hlZWxFdmVudChldiwgZnJvbUl0ZW1UcmFu
c2Zvcm0pKTsKICAgICAvLyBGSVhNRTogSGFuZGxlIHdoZXRoZXIgdGhlIHBhZ2UgdXNlZCB0aGUg
d2hlZWwgZXZlbnQgb3Igbm90LgogICAgIGlmIChtX2ludGVyYWN0aW9uRW5naW5lKQogICAgICAg
ICBtX2ludGVyYWN0aW9uRW5naW5lLT53aGVlbEV2ZW50KGV2KTsKLSAgICByZXR1cm4gZXYtPmlz
QWNjZXB0ZWQoKTsKIH0KIAotYm9vbCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZUhvdmVy
TGVhdmVFdmVudChRSG92ZXJFdmVudCogZXYpCit2b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6
aGFuZGxlSG92ZXJMZWF2ZUV2ZW50KFFIb3ZlckV2ZW50KiBldikKIHsKICAgICAvLyBUbyBnZXQg
dGhlIGNvcnJlY3QgYmVoYXZpb3Igb2YgbW91c2VvdXQsIHdlIG5lZWQgdG8gdHVybiB0aGUgTGVh
dmUgZXZlbnQgb2Ygb3VyIHdlYnZpZXcgaW50byBhIG1vdXNlIG1vdmUKICAgICAvLyB0byBhIHZl
cnkgZmFyIHJlZ2lvbi4KICAgICBRVHJhbnNmb3JtIGZyb21JdGVtVHJhbnNmb3JtID0gbV93ZWJQ
YWdlLT50cmFuc2Zvcm1Gcm9tSXRlbSgpOwogICAgIFFIb3ZlckV2ZW50IGZha2VFdmVudChRRXZl
bnQ6OkhvdmVyTW92ZSwgUVBvaW50KElOVF9NSU4sIElOVF9NSU4pLCBmcm9tSXRlbVRyYW5zZm9y
bS5tYXAoZXYtPm9sZFBvc0YoKSkpOwogICAgIGZha2VFdmVudC5zZXRUaW1lc3RhbXAoZXYtPnRp
bWVzdGFtcCgpKTsKLSAgICByZXR1cm4gaGFuZGxlSG92ZXJNb3ZlRXZlbnQoJmZha2VFdmVudCk7
CisgICAgaGFuZGxlSG92ZXJNb3ZlRXZlbnQoJmZha2VFdmVudCk7CiB9CiAKLWJvb2wgUXRXZWJQ
YWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVIb3Zlck1vdmVFdmVudChRSG92ZXJFdmVudCogZXYpCit2
b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlSG92ZXJNb3ZlRXZlbnQoUUhvdmVyRXZl
bnQqIGV2KQogewogICAgIFFUcmFuc2Zvcm0gZnJvbUl0ZW1UcmFuc2Zvcm0gPSBtX3dlYlBhZ2Ut
PnRyYW5zZm9ybUZyb21JdGVtKCk7CiAgICAgUU1vdXNlRXZlbnQgbWUoUUV2ZW50OjpNb3VzZU1v
dmUsIGZyb21JdGVtVHJhbnNmb3JtLm1hcChldi0+cG9zRigpKSwgUXQ6Ok5vQnV0dG9uLCBRdDo6
Tm9CdXR0b24sIFF0OjpOb01vZGlmaWVyKTsKICAgICBtZS5zZXRBY2NlcHRlZChldi0+aXNBY2Nl
cHRlZCgpKTsKICAgICBtZS5zZXRUaW1lc3RhbXAoZXYtPnRpbWVzdGFtcCgpKTsKLQotICAgIHJl
dHVybiBoYW5kbGVNb3VzZU1vdmVFdmVudCgmbWUpOworICAgIGhhbmRsZU1vdXNlTW92ZUV2ZW50
KCZtZSk7CiB9CiAKLWJvb2wgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVEcmFnRW50ZXJF
dmVudChRRHJhZ0VudGVyRXZlbnQqIGV2KQordm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6Omhh
bmRsZURyYWdFbnRlckV2ZW50KFFEcmFnRW50ZXJFdmVudCogZXYpCiB7CiAgICAgbV93ZWJQYWdl
UHJveHktPnJlc2V0RHJhZ09wZXJhdGlvbigpOwogICAgIFFUcmFuc2Zvcm0gZnJvbUl0ZW1UcmFu
c2Zvcm0gPSBtX3dlYlBhZ2UtPnRyYW5zZm9ybUZyb21JdGVtKCk7CkBAIC0yNDIsMTAgKzE4NSw5
IEBAIGJvb2wgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVEcmFnRW50ZXJFdmVudChRRHJh
Z0VudGVyRXZlbnQqIGV2KQogICAgIERyYWdEYXRhIGRyYWdEYXRhKGV2LT5taW1lRGF0YSgpLCBm
cm9tSXRlbVRyYW5zZm9ybS5tYXAoZXYtPnBvcygpKSwgUUN1cnNvcjo6cG9zKCksIGRyb3BBY3Rp
b25Ub0RyYWdPcGVyYXRpb24oZXYtPnBvc3NpYmxlQWN0aW9ucygpKSk7CiAgICAgbV93ZWJQYWdl
UHJveHktPmRyYWdFbnRlcmVkKCZkcmFnRGF0YSk7CiAgICAgZXYtPmFjY2VwdFByb3Bvc2VkQWN0
aW9uKCk7Ci0gICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUXRXZWJQYWdlRXZlbnRIYW5kbGVy
OjpoYW5kbGVEcmFnTGVhdmVFdmVudChRRHJhZ0xlYXZlRXZlbnQqIGV2KQordm9pZCBRdFdlYlBh
Z2VFdmVudEhhbmRsZXI6OmhhbmRsZURyYWdMZWF2ZUV2ZW50KFFEcmFnTGVhdmVFdmVudCogZXYp
CiB7CiAgICAgYm9vbCBhY2NlcHRlZCA9IGV2LT5pc0FjY2VwdGVkKCk7CiAKQEAgLTI1NSwxMCAr
MTk3LDkgQEAgYm9vbCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZURyYWdMZWF2ZUV2ZW50
KFFEcmFnTGVhdmVFdmVudCogZXYpCiAgICAgbV93ZWJQYWdlUHJveHktPnJlc2V0RHJhZ09wZXJh
dGlvbigpOwogCiAgICAgZXYtPnNldEFjY2VwdGVkKGFjY2VwdGVkKTsKLSAgICByZXR1cm4gYWNj
ZXB0ZWQ7CiB9CiAKLWJvb2wgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVEcmFnTW92ZUV2
ZW50KFFEcmFnTW92ZUV2ZW50KiBldikKK3ZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5k
bGVEcmFnTW92ZUV2ZW50KFFEcmFnTW92ZUV2ZW50KiBldikKIHsKICAgICBib29sIGFjY2VwdGVk
ID0gZXYtPmlzQWNjZXB0ZWQoKTsKIApAQCAtMjcxLDEwICsyMTIsOSBAQCBib29sIFF0V2ViUGFn
ZUV2ZW50SGFuZGxlcjo6aGFuZGxlRHJhZ01vdmVFdmVudChRRHJhZ01vdmVFdmVudCogZXYpCiAg
ICAgICAgIGV2LT5hY2NlcHQoKTsKIAogICAgIGV2LT5zZXRBY2NlcHRlZChhY2NlcHRlZCk7Ci0g
ICAgcmV0dXJuIGFjY2VwdGVkOwogfQogCi1ib29sIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFu
ZGxlRHJvcEV2ZW50KFFEcm9wRXZlbnQqIGV2KQordm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6
OmhhbmRsZURyb3BFdmVudChRRHJvcEV2ZW50KiBldikKIHsKICAgICBib29sIGFjY2VwdGVkID0g
ZXYtPmlzQWNjZXB0ZWQoKTsKICAgICBRVHJhbnNmb3JtIGZyb21JdGVtVHJhbnNmb3JtID0gbV93
ZWJQYWdlLT50cmFuc2Zvcm1Gcm9tSXRlbSgpOwpAQCAtMjg2LDcgKzIyNiw2IEBAIGJvb2wgUXRX
ZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVEcm9wRXZlbnQoUURyb3BFdmVudCogZXYpCiAgICAg
ZXYtPmFjY2VwdCgpOwogCiAgICAgZXYtPnNldEFjY2VwdGVkKGFjY2VwdGVkKTsKLSAgICByZXR1
cm4gYWNjZXB0ZWQ7CiB9CiAKIHZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVQb3Rl
bnRpYWxTaW5nbGVUYXBFdmVudChjb25zdCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCYgcG9pbnQp
CkBAIC0zMTksMjggKzI1OCwyNCBAQCB2b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6dGltZXJF
dmVudChRVGltZXJFdmVudCogZXYpCiAgICAgICAgIFFPYmplY3Q6OnRpbWVyRXZlbnQoZXYpOwog
fQogCi1ib29sIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlS2V5UHJlc3NFdmVudChRS2V5
RXZlbnQqIGV2KQordm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZUtleVByZXNzRXZl
bnQoUUtleUV2ZW50KiBldikKIHsKICAgICBtX3dlYlBhZ2VQcm94eS0+aGFuZGxlS2V5Ym9hcmRF
dmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KGV2KSk7Ci0gICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVLZXlSZWxlYXNlRXZlbnQoUUtleUV2
ZW50KiBldikKK3ZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVLZXlSZWxlYXNlRXZl
bnQoUUtleUV2ZW50KiBldikKIHsKICAgICBtX3dlYlBhZ2VQcm94eS0+aGFuZGxlS2V5Ym9hcmRF
dmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KGV2KSk7Ci0gICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVGb2N1c0luRXZlbnQoUUZvY3VzRXZl
bnQqKQordm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZUZvY3VzSW5FdmVudChRRm9j
dXNFdmVudCopCiB7CiAgICAgbV93ZWJQYWdlUHJveHktPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQ
YWdlUHJveHk6OlZpZXdJc0ZvY3VzZWQgfCBXZWJQYWdlUHJveHk6OlZpZXdXaW5kb3dJc0FjdGl2
ZSk7Ci0gICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpo
YW5kbGVGb2N1c091dEV2ZW50KFFGb2N1c0V2ZW50KikKK3ZvaWQgUXRXZWJQYWdlRXZlbnRIYW5k
bGVyOjpoYW5kbGVGb2N1c091dEV2ZW50KFFGb2N1c0V2ZW50KikKIHsKICAgICBtX3dlYlBhZ2VQ
cm94eS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld0lzRm9jdXNlZCB8IFdl
YlBhZ2VQcm94eTo6Vmlld1dpbmRvd0lzQWN0aXZlKTsKLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAog
dm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OnNldFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUo
UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKiBlbmdpbmUpCkBAIC0zNDgsNyArMjgzLDcgQEAg
dm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OnNldFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUo
UXRWaWV3cG9ydEludGVyYWN0aW9uRW4KICAgICBtX2ludGVyYWN0aW9uRW5naW5lID0gZW5naW5l
OwogfQogCi12b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aW5wdXRNZXRob2RFdmVudChRSW5w
dXRNZXRob2RFdmVudCogZXYpCit2b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlSW5w
dXRNZXRob2RFdmVudChRSW5wdXRNZXRob2RFdmVudCogZXYpCiB7CiAgICAgUVN0cmluZyBjb21t
aXQgPSBldi0+Y29tbWl0U3RyaW5nKCk7CiAgICAgUVN0cmluZyBjb21wb3NpdGlvbiA9IGV2LT5w
cmVlZGl0U3RyaW5nKCk7CkBAIC00MTUsNyArMzUwLDcgQEAgdm9pZCBRdFdlYlBhZ2VFdmVudEhh
bmRsZXI6OmlucHV0TWV0aG9kRXZlbnQoUUlucHV0TWV0aG9kRXZlbnQqIGV2KQogICAgIGV2LT5h
Y2NlcHQoKTsKIH0KIAotdm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OnRvdWNoRXZlbnQoUVRv
dWNoRXZlbnQqIGV2ZW50KQordm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNo
RXZlbnQoUVRvdWNoRXZlbnQqIGV2ZW50KQogewogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAg
ICAgUVRyYW5zZm9ybSBmcm9tSXRlbVRyYW5zZm9ybSA9IG1fd2ViUGFnZS0+dHJhbnNmb3JtRnJv
bUl0ZW0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBh
Z2VFdmVudEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VF
dmVudEhhbmRsZXIuaAppbmRleCBlYmU5NWRkOGQzYzk1MWM3M2ExZDY0MGQ2OWY5ZjE5YjRkMzJk
ODMwLi41MTllYzU0NzFjNGY1NjQ2N2Y1ZThkMGU4ZjRhNDYxYWE4MGU2MTIyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5oCkBA
IC00Myw3ICs0MywyMiBAQCBwdWJsaWM6CiAgICAgUXRXZWJQYWdlRXZlbnRIYW5kbGVyKFdLUGFn
ZVJlZiwgUVF1aWNrV2ViUGFnZSosIFFRdWlja1dlYlZpZXcqKTsKICAgICB+UXRXZWJQYWdlRXZl
bnRIYW5kbGVyKCk7CiAKLSAgICBib29sIGhhbmRsZUV2ZW50KFFFdmVudCopOworICAgIHZvaWQg
aGFuZGxlS2V5UHJlc3NFdmVudChRS2V5RXZlbnQqKTsKKyAgICB2b2lkIGhhbmRsZUtleVJlbGVh
c2VFdmVudChRS2V5RXZlbnQqKTsKKyAgICB2b2lkIGhhbmRsZUZvY3VzSW5FdmVudChRRm9jdXNF
dmVudCopOworICAgIHZvaWQgaGFuZGxlRm9jdXNPdXRFdmVudChRRm9jdXNFdmVudCopOworICAg
IHZvaWQgaGFuZGxlTW91c2VNb3ZlRXZlbnQoUU1vdXNlRXZlbnQqKTsKKyAgICB2b2lkIGhhbmRs
ZU1vdXNlUHJlc3NFdmVudChRTW91c2VFdmVudCopOworICAgIHZvaWQgaGFuZGxlTW91c2VSZWxl
YXNlRXZlbnQoUU1vdXNlRXZlbnQqKTsKKyAgICB2b2lkIGhhbmRsZVdoZWVsRXZlbnQoUVdoZWVs
RXZlbnQqKTsKKyAgICB2b2lkIGhhbmRsZUhvdmVyTGVhdmVFdmVudChRSG92ZXJFdmVudCopOwor
ICAgIHZvaWQgaGFuZGxlSG92ZXJNb3ZlRXZlbnQoUUhvdmVyRXZlbnQqKTsKKyAgICB2b2lkIGhh
bmRsZURyYWdFbnRlckV2ZW50KFFEcmFnRW50ZXJFdmVudCopOworICAgIHZvaWQgaGFuZGxlRHJh
Z0xlYXZlRXZlbnQoUURyYWdMZWF2ZUV2ZW50Kik7CisgICAgdm9pZCBoYW5kbGVEcmFnTW92ZUV2
ZW50KFFEcmFnTW92ZUV2ZW50Kik7CisgICAgdm9pZCBoYW5kbGVEcm9wRXZlbnQoUURyb3BFdmVu
dCopOworICAgIHZvaWQgaGFuZGxlSW5wdXRNZXRob2RFdmVudChRSW5wdXRNZXRob2RFdmVudCop
OworICAgIHZvaWQgaGFuZGxlVG91Y2hFdmVudChRVG91Y2hFdmVudCopOwogCiAgICAgdm9pZCBz
ZXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSop
OwogCkBAIC03NCwyNiArODksOCBAQCBwcml2YXRlIHNsb3RzOgogICAgIHZvaWQgaW5wdXRQYW5l
bFZpc2libGVDaGFuZ2VkKCk7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBoYW5kbGVLZXlQcmVzc0V2
ZW50KFFLZXlFdmVudCopOwotICAgIGJvb2wgaGFuZGxlS2V5UmVsZWFzZUV2ZW50KFFLZXlFdmVu
dCopOwotICAgIGJvb2wgaGFuZGxlRm9jdXNJbkV2ZW50KFFGb2N1c0V2ZW50Kik7Ci0gICAgYm9v
bCBoYW5kbGVGb2N1c091dEV2ZW50KFFGb2N1c0V2ZW50Kik7Ci0gICAgYm9vbCBoYW5kbGVNb3Vz
ZU1vdmVFdmVudChRTW91c2VFdmVudCopOwotICAgIGJvb2wgaGFuZGxlTW91c2VQcmVzc0V2ZW50
KFFNb3VzZUV2ZW50Kik7Ci0gICAgYm9vbCBoYW5kbGVNb3VzZVJlbGVhc2VFdmVudChRTW91c2VF
dmVudCopOwotICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVudChRV2hlZWxFdmVudCopOwotICAgIGJv
b2wgaGFuZGxlSG92ZXJMZWF2ZUV2ZW50KFFIb3ZlckV2ZW50Kik7Ci0gICAgYm9vbCBoYW5kbGVI
b3Zlck1vdmVFdmVudChRSG92ZXJFdmVudCopOwotICAgIGJvb2wgaGFuZGxlRHJhZ0VudGVyRXZl
bnQoUURyYWdFbnRlckV2ZW50Kik7Ci0gICAgYm9vbCBoYW5kbGVEcmFnTGVhdmVFdmVudChRRHJh
Z0xlYXZlRXZlbnQqKTsKLSAgICBib29sIGhhbmRsZURyYWdNb3ZlRXZlbnQoUURyYWdNb3ZlRXZl
bnQqKTsKLSAgICBib29sIGhhbmRsZURyb3BFdmVudChRRHJvcEV2ZW50Kik7Ci0KICAgICB2b2lk
IHRpbWVyRXZlbnQoUVRpbWVyRXZlbnQqKTsKIAotICAgIHZvaWQgdG91Y2hFdmVudChRVG91Y2hF
dmVudCopOwotICAgIHZvaWQgaW5wdXRNZXRob2RFdmVudChRSW5wdXRNZXRob2RFdmVudCopOwot
CiAgICAgUVBvaW50RiBtX2xhc3RDbGljazsKICAgICBRQmFzaWNUaW1lciBtX2NsaWNrVGltZXI7
CiAgICAgUXQ6Ok1vdXNlQnV0dG9uIG1fcHJldmlvdXNDbGlja0J1dHRvbjsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129437</attachid>
            <date>2012-02-29 07:03:42 -0800</date>
            <delta_ts>2012-03-01 07:52:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78047-20120229160355.patch</filename>
            <type>text/plain</type>
            <size>21341</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5MjA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNGQyNjgxMDYxYWRmYzMz
NDAxYWY4MTExOWNkYzcxNjY3M2UyZjUwZi4uZjViN2ZhOWYxYTM2MzQ5Y2ZkZmI1YzJiMDc4MTVh
MWNmMTVmYTNmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEyLTAyLTI5ICBTaW1v
biBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KKworICAgICAgICBbUXRdW1dL
Ml0gUVF1aWNrV2ViVmlldzo6ZXZlbnQgc2hvdWxkIGxvb2t1cCBmYXN0ZXIgd2hpY2ggZXZlbnRz
IFFRdWlja1dlYlBhZ2UgY2FuIGhhbmRsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzgwNDcKKworICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJv
aGRlIENocmlzdGlhbnNlbi4KKworICAgICAgICBSZXBsYWNlZCBkb3VibGUtZGlzcGF0Y2ggb2Yg
ZXZlbnRzIHdpdGggZGlyZWN0IGZvcndhcmRpbmcgb2YgZXZlbnRzIGZyb20gUVF1aWNrV2ViVmll
dzo6KkV2ZW50IHRvCisgICAgICAgIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlKkV2ZW50
LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcDoKKyAgICAg
ICAgKFFRdWlja1dlYlZpZXc6OmtleVByZXNzRXZlbnQpOgorICAgICAgICAoUVF1aWNrV2ViVmll
dzo6a2V5UmVsZWFzZUV2ZW50KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OmlucHV0TWV0aG9k
RXZlbnQpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6Zm9jdXNJbkV2ZW50KToKKyAgICAgICAg
KFFRdWlja1dlYlZpZXc6OmZvY3VzT3V0RXZlbnQpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6
dG91Y2hFdmVudCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3Ojptb3VzZVByZXNzRXZlbnQpOgor
ICAgICAgICAoUVF1aWNrV2ViVmlldzo6bW91c2VNb3ZlRXZlbnQpOgorICAgICAgICAoUVF1aWNr
V2ViVmlldzo6bW91c2VSZWxlYXNlRXZlbnQpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6bW91
c2VEb3VibGVDbGlja0V2ZW50KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OndoZWVsRXZlbnQp
OgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6aG92ZXJFbnRlckV2ZW50KToKKyAgICAgICAgKFFR
dWlja1dlYlZpZXc6OmhvdmVyTW92ZUV2ZW50KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6Omhv
dmVyTGVhdmVFdmVudCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3OjpkcmFnTW92ZUV2ZW50KToK
KyAgICAgICAgKFFRdWlja1dlYlZpZXc6OmRyYWdFbnRlckV2ZW50KToKKyAgICAgICAgKFFRdWlj
a1dlYlZpZXc6OmRyYWdMZWF2ZUV2ZW50KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OmRyb3BF
dmVudCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3OjpldmVudCk6CisgICAgICAgICogVUlQcm9j
ZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChRdFdlYlBhZ2VFdmVu
dEhhbmRsZXI6OmhhbmRsZU1vdXNlTW92ZUV2ZW50KToKKyAgICAgICAgKFF0V2ViUGFnZUV2ZW50
SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KToKKyAgICAgICAgKFF0V2ViUGFnZUV2ZW50
SGFuZGxlcjo6aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQpOgorICAgICAgICAoUXRXZWJQYWdlRXZl
bnRIYW5kbGVyOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFF0V2ViUGFnZUV2ZW50SGFu
ZGxlcjo6aGFuZGxlSG92ZXJMZWF2ZUV2ZW50KToKKyAgICAgICAgKFF0V2ViUGFnZUV2ZW50SGFu
ZGxlcjo6aGFuZGxlSG92ZXJNb3ZlRXZlbnQpOgorICAgICAgICAoUXRXZWJQYWdlRXZlbnRIYW5k
bGVyOjpoYW5kbGVEcmFnRW50ZXJFdmVudCk6CisgICAgICAgIChRdFdlYlBhZ2VFdmVudEhhbmRs
ZXI6OmhhbmRsZURyYWdMZWF2ZUV2ZW50KToKKyAgICAgICAgKFF0V2ViUGFnZUV2ZW50SGFuZGxl
cjo6aGFuZGxlRHJhZ01vdmVFdmVudCk6CisgICAgICAgIChRdFdlYlBhZ2VFdmVudEhhbmRsZXI6
OmhhbmRsZURyb3BFdmVudCk6CisgICAgICAgIChRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRs
ZUtleVByZXNzRXZlbnQpOgorICAgICAgICAoUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVL
ZXlSZWxlYXNlRXZlbnQpOgorICAgICAgICAoUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVG
b2N1c0luRXZlbnQpOgorICAgICAgICAoUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVGb2N1
c091dEV2ZW50KToKKyAgICAgICAgKFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlSW5wdXRN
ZXRob2RFdmVudCk6CisgICAgICAgIChRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNo
RXZlbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuaDoK
KyAgICAgICAgKFF0V2ViUGFnZUV2ZW50SGFuZGxlcik6CisKIDIwMTItMDItMjggIFNpbW9uIEZy
YXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIFdlYktpdFN5
c3RlbUludGVyZmFjZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcXF1aWNrd2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Fx
dWlja3dlYnZpZXcuY3BwCmluZGV4IDJjZDY3NjYwMmVkNmJkOTNjNjg2ZGZhNjliZGViNzkyMzFl
MmZlMzkuLjUyNTVhZTM5MDhkZWZkZjFhNmRmYThkZTc3OGNhYjY1MTM3ZGFmNTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcApAQCAt
MTMwNSwxMjggKzEzMDUsMTIwIEBAIHZvaWQgUVF1aWNrV2ViVmlldzo6Y29tcG9uZW50Q29tcGxl
dGUoKQogCiB2b2lkIFFRdWlja1dlYlZpZXc6OmtleVByZXNzRXZlbnQoUUtleUV2ZW50KiBldmVu
dCkKIHsKLSAgICB0aGlzLT5ldmVudChldmVudCk7CisgICAgUV9EKFFRdWlja1dlYlZpZXcpOwor
ICAgIGQtPnBhZ2VWaWV3LT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlS2V5UHJlc3NFdmVudChldmVu
dCk7CiB9CiAKIHZvaWQgUVF1aWNrV2ViVmlldzo6a2V5UmVsZWFzZUV2ZW50KFFLZXlFdmVudCog
ZXZlbnQpCiB7Ci0gICAgdGhpcy0+ZXZlbnQoZXZlbnQpOworICAgIFFfRChRUXVpY2tXZWJWaWV3
KTsKKyAgICBkLT5wYWdlVmlldy0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZUtleVJlbGVhc2VFdmVu
dChldmVudCk7CiB9CiAKIHZvaWQgUVF1aWNrV2ViVmlldzo6aW5wdXRNZXRob2RFdmVudChRSW5w
dXRNZXRob2RFdmVudCogZXZlbnQpCiB7Ci0gICAgdGhpcy0+ZXZlbnQoZXZlbnQpOworICAgIFFf
RChRUXVpY2tXZWJWaWV3KTsKKyAgICBkLT5wYWdlVmlldy0+ZXZlbnRIYW5kbGVyKCktPmhhbmRs
ZUlucHV0TWV0aG9kRXZlbnQoZXZlbnQpOwogfQogCiB2b2lkIFFRdWlja1dlYlZpZXc6OmZvY3Vz
SW5FdmVudChRRm9jdXNFdmVudCogZXZlbnQpCiB7Ci0gICAgdGhpcy0+ZXZlbnQoZXZlbnQpOwor
ICAgIFFfRChRUXVpY2tXZWJWaWV3KTsKKyAgICBkLT5wYWdlVmlldy0+ZXZlbnRIYW5kbGVyKCkt
PmhhbmRsZUZvY3VzSW5FdmVudChldmVudCk7CiB9CiAKIHZvaWQgUVF1aWNrV2ViVmlldzo6Zm9j
dXNPdXRFdmVudChRRm9jdXNFdmVudCogZXZlbnQpCiB7Ci0gICAgdGhpcy0+ZXZlbnQoZXZlbnQp
OworICAgIFFfRChRUXVpY2tXZWJWaWV3KTsKKyAgICBkLT5wYWdlVmlldy0+ZXZlbnRIYW5kbGVy
KCktPmhhbmRsZUZvY3VzT3V0RXZlbnQoZXZlbnQpOwogfQogCiB2b2lkIFFRdWlja1dlYlZpZXc6
OnRvdWNoRXZlbnQoUVRvdWNoRXZlbnQqIGV2ZW50KQogeworICAgIFFfRChRUXVpY2tXZWJWaWV3
KTsKICAgICBmb3JjZUFjdGl2ZUZvY3VzKCk7Ci0gICAgdGhpcy0+ZXZlbnQoZXZlbnQpOworICAg
IGQtPnBhZ2VWaWV3LT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlVG91Y2hFdmVudChldmVudCk7CiB9
CiAKIHZvaWQgUVF1aWNrV2ViVmlldzo6bW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50KiBldmVu
dCkKIHsKKyAgICBRX0QoUVF1aWNrV2ViVmlldyk7CiAgICAgZm9yY2VBY3RpdmVGb2N1cygpOwot
ICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKKyAgICBkLT5wYWdlVmlldy0+ZXZlbnRIYW5kbGVyKCkt
PmhhbmRsZU1vdXNlUHJlc3NFdmVudChldmVudCk7CiB9CiAKIHZvaWQgUVF1aWNrV2ViVmlldzo6
bW91c2VNb3ZlRXZlbnQoUU1vdXNlRXZlbnQqIGV2ZW50KQogewotICAgIHRoaXMtPmV2ZW50KGV2
ZW50KTsKKyAgICBRX0QoUVF1aWNrV2ViVmlldyk7CisgICAgZC0+cGFnZVZpZXctPmV2ZW50SGFu
ZGxlcigpLT5oYW5kbGVNb3VzZU1vdmVFdmVudChldmVudCk7CiB9CiAKIHZvaWQgUVF1aWNrV2Vi
Vmlldzo6bW91c2VSZWxlYXNlRXZlbnQoUU1vdXNlRXZlbnQqIGV2ZW50KQogewotICAgIHRoaXMt
PmV2ZW50KGV2ZW50KTsKKyAgICBRX0QoUVF1aWNrV2ViVmlldyk7CisgICAgZC0+cGFnZVZpZXct
PmV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZVJlbGVhc2VFdmVudChldmVudCk7CiB9CiAKIHZv
aWQgUVF1aWNrV2ViVmlldzo6bW91c2VEb3VibGVDbGlja0V2ZW50KFFNb3VzZUV2ZW50KiBldmVu
dCkKIHsKLSAgICB0aGlzLT5ldmVudChldmVudCk7CisgICAgUV9EKFFRdWlja1dlYlZpZXcpOwor
ICAgIC8vIElmIGEgTW91c2VCdXR0b25EYmxDbGljayB3YXMgcmVjZWl2ZWQgdGhlbiB3ZSBnb3Qg
YSBNb3VzZUJ1dHRvblByZXNzIGJlZm9yZQorICAgIC8vIGhhbmRsZU1vdXNlUHJlc3NFdmVudCB3
aWxsIHRha2UgY2FyZSBvZiBkb3VibGUgY2xpY2tzLgorICAgIGQtPnBhZ2VWaWV3LT5ldmVudEhh
bmRsZXIoKS0+aGFuZGxlTW91c2VQcmVzc0V2ZW50KGV2ZW50KTsKIH0KIAogdm9pZCBRUXVpY2tX
ZWJWaWV3Ojp3aGVlbEV2ZW50KFFXaGVlbEV2ZW50KiBldmVudCkKIHsKLSAgICB0aGlzLT5ldmVu
dChldmVudCk7CisgICAgUV9EKFFRdWlja1dlYlZpZXcpOworICAgIGQtPnBhZ2VWaWV3LT5ldmVu
dEhhbmRsZXIoKS0+aGFuZGxlV2hlZWxFdmVudChldmVudCk7CiB9CiAKIHZvaWQgUVF1aWNrV2Vi
Vmlldzo6aG92ZXJFbnRlckV2ZW50KFFIb3ZlckV2ZW50KiBldmVudCkKIHsKLSAgICB0aGlzLT5l
dmVudChldmVudCk7CisgICAgUV9EKFFRdWlja1dlYlZpZXcpOworICAgIC8vIE1hcCBIb3ZlckVu
dGVyIHRvIE1vdmUsIGZvciBXZWJLaXQgdGhlIGRpc3RpbmN0aW9uIGRvZXNuJ3QgbWF0dGVyLgor
ICAgIGQtPnBhZ2VWaWV3LT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlSG92ZXJNb3ZlRXZlbnQoZXZl
bnQpOwogfQogCiB2b2lkIFFRdWlja1dlYlZpZXc6OmhvdmVyTW92ZUV2ZW50KFFIb3ZlckV2ZW50
KiBldmVudCkKIHsKLSAgICB0aGlzLT5ldmVudChldmVudCk7CisgICAgUV9EKFFRdWlja1dlYlZp
ZXcpOworICAgIGQtPnBhZ2VWaWV3LT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlSG92ZXJNb3ZlRXZl
bnQoZXZlbnQpOwogfQogCiB2b2lkIFFRdWlja1dlYlZpZXc6OmhvdmVyTGVhdmVFdmVudChRSG92
ZXJFdmVudCogZXZlbnQpCiB7Ci0gICAgdGhpcy0+ZXZlbnQoZXZlbnQpOworICAgIFFfRChRUXVp
Y2tXZWJWaWV3KTsKKyAgICBkLT5wYWdlVmlldy0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZUhvdmVy
TGVhdmVFdmVudChldmVudCk7CiB9CiAKIHZvaWQgUVF1aWNrV2ViVmlldzo6ZHJhZ01vdmVFdmVu
dChRRHJhZ01vdmVFdmVudCogZXZlbnQpCiB7Ci0gICAgdGhpcy0+ZXZlbnQoZXZlbnQpOworICAg
IFFfRChRUXVpY2tXZWJWaWV3KTsKKyAgICBkLT5wYWdlVmlldy0+ZXZlbnRIYW5kbGVyKCktPmhh
bmRsZURyYWdNb3ZlRXZlbnQoZXZlbnQpOwogfQogCiB2b2lkIFFRdWlja1dlYlZpZXc6OmRyYWdF
bnRlckV2ZW50KFFEcmFnRW50ZXJFdmVudCogZXZlbnQpCiB7Ci0gICAgdGhpcy0+ZXZlbnQoZXZl
bnQpOworICAgIFFfRChRUXVpY2tXZWJWaWV3KTsKKyAgICBkLT5wYWdlVmlldy0+ZXZlbnRIYW5k
bGVyKCktPmhhbmRsZURyYWdFbnRlckV2ZW50KGV2ZW50KTsKIH0KIAogdm9pZCBRUXVpY2tXZWJW
aWV3OjpkcmFnTGVhdmVFdmVudChRRHJhZ0xlYXZlRXZlbnQqIGV2ZW50KQogewotICAgIHRoaXMt
PmV2ZW50KGV2ZW50KTsKKyAgICBRX0QoUVF1aWNrV2ViVmlldyk7CisgICAgZC0+cGFnZVZpZXct
PmV2ZW50SGFuZGxlcigpLT5oYW5kbGVEcmFnTGVhdmVFdmVudChldmVudCk7CiB9CiAKIHZvaWQg
UVF1aWNrV2ViVmlldzo6ZHJvcEV2ZW50KFFEcm9wRXZlbnQqIGV2ZW50KQogewotICAgIHRoaXMt
PmV2ZW50KGV2ZW50KTsKKyAgICBRX0QoUVF1aWNrV2ViVmlldyk7CisgICAgZC0+cGFnZVZpZXct
PmV2ZW50SGFuZGxlcigpLT5oYW5kbGVEcm9wRXZlbnQoZXZlbnQpOwogfQogCiBib29sIFFRdWlj
a1dlYlZpZXc6OmV2ZW50KFFFdmVudCogZXYpCiB7Ci0gICAgUV9EKFFRdWlja1dlYlZpZXcpOwot
Ci0gICAgc3dpdGNoIChldi0+dHlwZSgpKSB7Ci0gICAgY2FzZSBRRXZlbnQ6Ok1vdXNlTW92ZToK
LSAgICBjYXNlIFFFdmVudDo6TW91c2VCdXR0b25QcmVzczoKLSAgICBjYXNlIFFFdmVudDo6TW91
c2VCdXR0b25SZWxlYXNlOgotICAgIGNhc2UgUUV2ZW50OjpNb3VzZUJ1dHRvbkRibENsaWNrOgot
ICAgIGNhc2UgUUV2ZW50OjpXaGVlbDoKLSAgICBjYXNlIFFFdmVudDo6SG92ZXJMZWF2ZToKLSAg
ICBjYXNlIFFFdmVudDo6SG92ZXJFbnRlcjoKLSAgICBjYXNlIFFFdmVudDo6SG92ZXJNb3ZlOgot
ICAgIGNhc2UgUUV2ZW50OjpEcmFnRW50ZXI6Ci0gICAgY2FzZSBRRXZlbnQ6OkRyYWdMZWF2ZToK
LSAgICBjYXNlIFFFdmVudDo6RHJhZ01vdmU6Ci0gICAgY2FzZSBRRXZlbnQ6OkRyb3A6Ci0gICAg
Y2FzZSBRRXZlbnQ6OktleVByZXNzOgotICAgIGNhc2UgUUV2ZW50OjpLZXlSZWxlYXNlOgotICAg
IGNhc2UgUUV2ZW50OjpGb2N1c0luOgotICAgIGNhc2UgUUV2ZW50OjpGb2N1c091dDoKLSAgICBj
YXNlIFFFdmVudDo6VG91Y2hCZWdpbjoKLSAgICBjYXNlIFFFdmVudDo6VG91Y2hFbmQ6Ci0gICAg
Y2FzZSBRRXZlbnQ6OlRvdWNoQ2FuY2VsOgotICAgIGNhc2UgUUV2ZW50OjpUb3VjaFVwZGF0ZToK
LSAgICAgICAgaWYgKGQtPnBhZ2VWaWV3LT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlRXZlbnQoZXYp
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGV2LT50eXBlKCkg
PT0gUUV2ZW50OjpJbnB1dE1ldGhvZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBUaGlzIGlz
IG5lY2Vzc2FyeSB0byBhdm9pZCBhbiBlbmRsZXNzIGxvb3AgaW4gY29ubmVjdGlvbiB3aXRoIFFR
dWlja0l0ZW06OmV2ZW50KCkuCi0KKyAgICAvLyBSZS1pbXBsZW1lbnRlZCBmb3IgcG9zc2libGUg
ZnV0dXJlIHVzZSB3aXRob3V0IGJyZWFraW5nIGJpbmFyeSBjb21wYXRpYmlsaXR5LgogICAgIHJl
dHVybiBRUXVpY2tJdGVtOjpldmVudChldik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAKaW5kZXggN2QwODk5Mjlh
MjIzN2RkYmIxOGQyNDBmMTg5ZWM0YTc2OWY5ZjIxOS4uOTVlZDQzMTkxNmQ0MGZkNzU4MWQ3ZTM3
MTE2YzFlODQ2YWFlNTUzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAKQEAgLTEwNiw1NyArMTA2LDcgQEAgUXRXZWJQ
YWdlRXZlbnRIYW5kbGVyOjp+UXRXZWJQYWdlRXZlbnRIYW5kbGVyKCkKICAgICBkaXNjb25uZWN0
KHFBcHAtPmlucHV0UGFuZWwoKSwgU0lHTkFMKHZpc2libGVDaGFuZ2VkKCkpLCB0aGlzLCBTTE9U
KGlucHV0UGFuZWxWaXNpYmxlQ2hhbmdlZCgpKSk7CiB9CiAKLWJvb2wgUXRXZWJQYWdlRXZlbnRI
YW5kbGVyOjpoYW5kbGVFdmVudChRRXZlbnQqIGV2KQotewotICAgIHN3aXRjaCAoZXYtPnR5cGUo
KSkgewotICAgIGNhc2UgUUV2ZW50OjpNb3VzZU1vdmU6Ci0gICAgICAgIHJldHVybiBoYW5kbGVN
b3VzZU1vdmVFdmVudChzdGF0aWNfY2FzdDxRTW91c2VFdmVudCo+KGV2KSk7Ci0gICAgY2FzZSBR
RXZlbnQ6Ok1vdXNlQnV0dG9uUHJlc3M6Ci0gICAgY2FzZSBRRXZlbnQ6Ok1vdXNlQnV0dG9uRGJs
Q2xpY2s6Ci0gICAgICAgIC8vIElmIGEgTW91c2VCdXR0b25EYmxDbGljayB3YXMgcmVjZWl2ZWQg
dGhlbiB3ZSBnb3QgYSBNb3VzZUJ1dHRvblByZXNzIGJlZm9yZQotICAgICAgICAvLyBoYW5kbGVN
b3VzZVByZXNzRXZlbnQgd2lsbCB0YWtlIGNhcmUgb2YgZG91YmxlIGNsaWNrcy4KLSAgICAgICAg
cmV0dXJuIGhhbmRsZU1vdXNlUHJlc3NFdmVudChzdGF0aWNfY2FzdDxRTW91c2VFdmVudCo+KGV2
KSk7Ci0gICAgY2FzZSBRRXZlbnQ6Ok1vdXNlQnV0dG9uUmVsZWFzZToKLSAgICAgICAgcmV0dXJu
IGhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KHN0YXRpY19jYXN0PFFNb3VzZUV2ZW50Kj4oZXYpKTsK
LSAgICBjYXNlIFFFdmVudDo6V2hlZWw6Ci0gICAgICAgIHJldHVybiBoYW5kbGVXaGVlbEV2ZW50
KHN0YXRpY19jYXN0PFFXaGVlbEV2ZW50Kj4oZXYpKTsKLSAgICBjYXNlIFFFdmVudDo6SG92ZXJM
ZWF2ZToKLSAgICAgICAgcmV0dXJuIGhhbmRsZUhvdmVyTGVhdmVFdmVudChzdGF0aWNfY2FzdDxR
SG92ZXJFdmVudCo+KGV2KSk7Ci0gICAgY2FzZSBRRXZlbnQ6OkhvdmVyRW50ZXI6IC8vIEZhbGwt
dGhyb3VnaCwgZm9yIFdlYktpdCB0aGUgZGlzdGluY3Rpb24gZG9lc24ndCBtYXR0ZXIuCi0gICAg
Y2FzZSBRRXZlbnQ6OkhvdmVyTW92ZToKLSAgICAgICAgcmV0dXJuIGhhbmRsZUhvdmVyTW92ZUV2
ZW50KHN0YXRpY19jYXN0PFFIb3ZlckV2ZW50Kj4oZXYpKTsKLSAgICBjYXNlIFFFdmVudDo6RHJh
Z0VudGVyOgotICAgICAgICByZXR1cm4gaGFuZGxlRHJhZ0VudGVyRXZlbnQoc3RhdGljX2Nhc3Q8
UURyYWdFbnRlckV2ZW50Kj4oZXYpKTsKLSAgICBjYXNlIFFFdmVudDo6RHJhZ0xlYXZlOgotICAg
ICAgICByZXR1cm4gaGFuZGxlRHJhZ0xlYXZlRXZlbnQoc3RhdGljX2Nhc3Q8UURyYWdMZWF2ZUV2
ZW50Kj4oZXYpKTsKLSAgICBjYXNlIFFFdmVudDo6RHJhZ01vdmU6Ci0gICAgICAgIHJldHVybiBo
YW5kbGVEcmFnTW92ZUV2ZW50KHN0YXRpY19jYXN0PFFEcmFnTW92ZUV2ZW50Kj4oZXYpKTsKLSAg
ICBjYXNlIFFFdmVudDo6RHJvcDoKLSAgICAgICAgcmV0dXJuIGhhbmRsZURyb3BFdmVudChzdGF0
aWNfY2FzdDxRRHJvcEV2ZW50Kj4oZXYpKTsKLSAgICBjYXNlIFFFdmVudDo6S2V5UHJlc3M6Ci0g
ICAgICAgIHJldHVybiBoYW5kbGVLZXlQcmVzc0V2ZW50KHN0YXRpY19jYXN0PFFLZXlFdmVudCo+
KGV2KSk7Ci0gICAgY2FzZSBRRXZlbnQ6OktleVJlbGVhc2U6Ci0gICAgICAgIHJldHVybiBoYW5k
bGVLZXlSZWxlYXNlRXZlbnQoc3RhdGljX2Nhc3Q8UUtleUV2ZW50Kj4oZXYpKTsKLSAgICBjYXNl
IFFFdmVudDo6Rm9jdXNJbjoKLSAgICAgICAgcmV0dXJuIGhhbmRsZUZvY3VzSW5FdmVudChzdGF0
aWNfY2FzdDxRRm9jdXNFdmVudCo+KGV2KSk7Ci0gICAgY2FzZSBRRXZlbnQ6OkZvY3VzT3V0Ogot
ICAgICAgICByZXR1cm4gaGFuZGxlRm9jdXNPdXRFdmVudChzdGF0aWNfY2FzdDxRRm9jdXNFdmVu
dCo+KGV2KSk7Ci0gICAgY2FzZSBRRXZlbnQ6OlRvdWNoQmVnaW46Ci0gICAgY2FzZSBRRXZlbnQ6
OlRvdWNoRW5kOgotICAgIGNhc2UgUUV2ZW50OjpUb3VjaENhbmNlbDoKLSAgICBjYXNlIFFFdmVu
dDo6VG91Y2hVcGRhdGU6Ci0gICAgICAgIHRvdWNoRXZlbnQoc3RhdGljX2Nhc3Q8UVRvdWNoRXZl
bnQqPihldikpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIFFFdmVudDo6SW5wdXRN
ZXRob2Q6Ci0gICAgICAgIGlucHV0TWV0aG9kRXZlbnQoc3RhdGljX2Nhc3Q8UUlucHV0TWV0aG9k
RXZlbnQqPihldikpOwotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFRoaXMgaXMgbmVjZXNzYXJ5
IHRvIGF2b2lkIGFuIGVuZGxlc3MgbG9vcCBpbiBjb25uZWN0aW9uIHdpdGggUVF1aWNrSXRlbTo6
ZXZlbnQoKS4KLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogTW92ZSBhbGwgY29tbW9uIGV2ZW50IGhh
bmRsaW5nIGhlcmUuCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFF0V2ViUGFnZUV2ZW50
SGFuZGxlcjo6aGFuZGxlTW91c2VNb3ZlRXZlbnQoUU1vdXNlRXZlbnQqIGV2KQordm9pZCBRdFdl
YlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlTW92ZUV2ZW50KFFNb3VzZUV2ZW50KiBldikK
IHsKICAgICAvLyBGb3Igc29tZSByZWFzb24gbW91c2UgcHJlc3MgcmVzdWx0cyBpbiBtb3VzZSBo
b3ZlciAod2hpY2ggaXMKICAgICAvLyBjb252ZXJ0ZWQgdG8gbW91c2UgbW92ZSBmb3IgV2ViS2l0
KS4gV2UgaWdub3JlIHRoZXNlIGhvdmVyCkBAIC0xNjcsMTUgKzExNywxMyBAQCBib29sIFF0V2Vi
UGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VNb3ZlRXZlbnQoUU1vdXNlRXZlbnQqIGV2KQog
ICAgIFFUcmFuc2Zvcm0gZnJvbUl0ZW1UcmFuc2Zvcm0gPSBtX3dlYlBhZ2UtPnRyYW5zZm9ybUZy
b21JdGVtKCk7CiAgICAgUVBvaW50RiB3ZWJQYWdlUG9pbnQgPSBmcm9tSXRlbVRyYW5zZm9ybS5t
YXAoZXYtPmxvY2FsUG9zKCkpOwogICAgIGlmIChsYXN0UG9zID09IHdlYlBhZ2VQb2ludCkKLSAg
ICAgICAgcmV0dXJuIGV2LT5pc0FjY2VwdGVkKCk7CisgICAgICAgIHJldHVybjsKICAgICBsYXN0
UG9zID0gd2ViUGFnZVBvaW50OwogCiAgICAgbV93ZWJQYWdlUHJveHktPmhhbmRsZU1vdXNlRXZl
bnQoTmF0aXZlV2ViTW91c2VFdmVudChldiwgZnJvbUl0ZW1UcmFuc2Zvcm0sIC8qZXZlbnRDbGlj
a0NvdW50Ki8gMCkpOwotCi0gICAgcmV0dXJuIGV2LT5pc0FjY2VwdGVkKCk7CiB9CiAKLWJvb2wg
UXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoUU1vdXNlRXZlbnQq
IGV2KQordm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudChR
TW91c2VFdmVudCogZXYpCiB7CiAgICAgUVRyYW5zZm9ybSBmcm9tSXRlbVRyYW5zZm9ybSA9IG1f
d2ViUGFnZS0+dHJhbnNmb3JtRnJvbUl0ZW0oKTsKICAgICBRUG9pbnRGIHdlYlBhZ2VQb2ludCA9
IGZyb21JdGVtVHJhbnNmb3JtLm1hcChldi0+bG9jYWxQb3MoKSk7CkBAIC0xOTMsNDggKzE0MSw0
MyBAQCBib29sIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KFFN
b3VzZUV2ZW50KiBldikKIAogICAgIG1fbGFzdENsaWNrID0gd2ViUGFnZVBvaW50OwogICAgIG1f
Y2xpY2tUaW1lci5zdGFydChxQXBwLT5zdHlsZUhpbnRzKCktPm1vdXNlRG91YmxlQ2xpY2tJbnRl
cnZhbCgpLCB0aGlzKTsKLQotICAgIHJldHVybiBldi0+aXNBY2NlcHRlZCgpOwogfQogCi1ib29s
IFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoUU1vdXNlRXZl
bnQqIGV2KQordm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUmVsZWFzZUV2
ZW50KFFNb3VzZUV2ZW50KiBldikKIHsKICAgICBRVHJhbnNmb3JtIGZyb21JdGVtVHJhbnNmb3Jt
ID0gbV93ZWJQYWdlLT50cmFuc2Zvcm1Gcm9tSXRlbSgpOwogICAgIG1fd2ViUGFnZVByb3h5LT5o
YW5kbGVNb3VzZUV2ZW50KE5hdGl2ZVdlYk1vdXNlRXZlbnQoZXYsIGZyb21JdGVtVHJhbnNmb3Jt
LCAvKmV2ZW50Q2xpY2tDb3VudCovIDApKTsKLSAgICByZXR1cm4gZXYtPmlzQWNjZXB0ZWQoKTsK
IH0KIAotYm9vbCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQoUVdoZWVs
RXZlbnQqIGV2KQordm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQo
UVdoZWVsRXZlbnQqIGV2KQogewogICAgIFFUcmFuc2Zvcm0gZnJvbUl0ZW1UcmFuc2Zvcm0gPSBt
X3dlYlBhZ2UtPnRyYW5zZm9ybUZyb21JdGVtKCk7CiAgICAgbV93ZWJQYWdlUHJveHktPmhhbmRs
ZVdoZWVsRXZlbnQoTmF0aXZlV2ViV2hlZWxFdmVudChldiwgZnJvbUl0ZW1UcmFuc2Zvcm0pKTsK
ICAgICAvLyBGSVhNRTogSGFuZGxlIHdoZXRoZXIgdGhlIHBhZ2UgdXNlZCB0aGUgd2hlZWwgZXZl
bnQgb3Igbm90LgogICAgIGlmIChtX2ludGVyYWN0aW9uRW5naW5lKQogICAgICAgICBtX2ludGVy
YWN0aW9uRW5naW5lLT53aGVlbEV2ZW50KGV2KTsKLSAgICByZXR1cm4gZXYtPmlzQWNjZXB0ZWQo
KTsKIH0KIAotYm9vbCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZUhvdmVyTGVhdmVFdmVu
dChRSG92ZXJFdmVudCogZXYpCit2b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlSG92
ZXJMZWF2ZUV2ZW50KFFIb3ZlckV2ZW50KiBldikKIHsKICAgICAvLyBUbyBnZXQgdGhlIGNvcnJl
Y3QgYmVoYXZpb3Igb2YgbW91c2VvdXQsIHdlIG5lZWQgdG8gdHVybiB0aGUgTGVhdmUgZXZlbnQg
b2Ygb3VyIHdlYnZpZXcgaW50byBhIG1vdXNlIG1vdmUKICAgICAvLyB0byBhIHZlcnkgZmFyIHJl
Z2lvbi4KICAgICBRVHJhbnNmb3JtIGZyb21JdGVtVHJhbnNmb3JtID0gbV93ZWJQYWdlLT50cmFu
c2Zvcm1Gcm9tSXRlbSgpOwogICAgIFFIb3ZlckV2ZW50IGZha2VFdmVudChRRXZlbnQ6OkhvdmVy
TW92ZSwgUVBvaW50KElOVF9NSU4sIElOVF9NSU4pLCBmcm9tSXRlbVRyYW5zZm9ybS5tYXAoZXYt
Pm9sZFBvc0YoKSkpOwogICAgIGZha2VFdmVudC5zZXRUaW1lc3RhbXAoZXYtPnRpbWVzdGFtcCgp
KTsKLSAgICByZXR1cm4gaGFuZGxlSG92ZXJNb3ZlRXZlbnQoJmZha2VFdmVudCk7CisgICAgaGFu
ZGxlSG92ZXJNb3ZlRXZlbnQoJmZha2VFdmVudCk7CiB9CiAKLWJvb2wgUXRXZWJQYWdlRXZlbnRI
YW5kbGVyOjpoYW5kbGVIb3Zlck1vdmVFdmVudChRSG92ZXJFdmVudCogZXYpCit2b2lkIFF0V2Vi
UGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlSG92ZXJNb3ZlRXZlbnQoUUhvdmVyRXZlbnQqIGV2KQog
ewogICAgIFFUcmFuc2Zvcm0gZnJvbUl0ZW1UcmFuc2Zvcm0gPSBtX3dlYlBhZ2UtPnRyYW5zZm9y
bUZyb21JdGVtKCk7CiAgICAgUU1vdXNlRXZlbnQgbWUoUUV2ZW50OjpNb3VzZU1vdmUsIGZyb21J
dGVtVHJhbnNmb3JtLm1hcChldi0+cG9zRigpKSwgUXQ6Ok5vQnV0dG9uLCBRdDo6Tm9CdXR0b24s
IFF0OjpOb01vZGlmaWVyKTsKICAgICBtZS5zZXRBY2NlcHRlZChldi0+aXNBY2NlcHRlZCgpKTsK
ICAgICBtZS5zZXRUaW1lc3RhbXAoZXYtPnRpbWVzdGFtcCgpKTsKLQotICAgIHJldHVybiBoYW5k
bGVNb3VzZU1vdmVFdmVudCgmbWUpOworICAgIGhhbmRsZU1vdXNlTW92ZUV2ZW50KCZtZSk7CiB9
CiAKLWJvb2wgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVEcmFnRW50ZXJFdmVudChRRHJh
Z0VudGVyRXZlbnQqIGV2KQordm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZURyYWdF
bnRlckV2ZW50KFFEcmFnRW50ZXJFdmVudCogZXYpCiB7CiAgICAgbV93ZWJQYWdlUHJveHktPnJl
c2V0RHJhZ09wZXJhdGlvbigpOwogICAgIFFUcmFuc2Zvcm0gZnJvbUl0ZW1UcmFuc2Zvcm0gPSBt
X3dlYlBhZ2UtPnRyYW5zZm9ybUZyb21JdGVtKCk7CkBAIC0yNDIsMTAgKzE4NSw5IEBAIGJvb2wg
UXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVEcmFnRW50ZXJFdmVudChRRHJhZ0VudGVyRXZl
bnQqIGV2KQogICAgIERyYWdEYXRhIGRyYWdEYXRhKGV2LT5taW1lRGF0YSgpLCBmcm9tSXRlbVRy
YW5zZm9ybS5tYXAoZXYtPnBvcygpKSwgUUN1cnNvcjo6cG9zKCksIGRyb3BBY3Rpb25Ub0RyYWdP
cGVyYXRpb24oZXYtPnBvc3NpYmxlQWN0aW9ucygpKSk7CiAgICAgbV93ZWJQYWdlUHJveHktPmRy
YWdFbnRlcmVkKCZkcmFnRGF0YSk7CiAgICAgZXYtPmFjY2VwdFByb3Bvc2VkQWN0aW9uKCk7Ci0g
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVE
cmFnTGVhdmVFdmVudChRRHJhZ0xlYXZlRXZlbnQqIGV2KQordm9pZCBRdFdlYlBhZ2VFdmVudEhh
bmRsZXI6OmhhbmRsZURyYWdMZWF2ZUV2ZW50KFFEcmFnTGVhdmVFdmVudCogZXYpCiB7CiAgICAg
Ym9vbCBhY2NlcHRlZCA9IGV2LT5pc0FjY2VwdGVkKCk7CiAKQEAgLTI1NSwxMCArMTk3LDkgQEAg
Ym9vbCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZURyYWdMZWF2ZUV2ZW50KFFEcmFnTGVh
dmVFdmVudCogZXYpCiAgICAgbV93ZWJQYWdlUHJveHktPnJlc2V0RHJhZ09wZXJhdGlvbigpOwog
CiAgICAgZXYtPnNldEFjY2VwdGVkKGFjY2VwdGVkKTsKLSAgICByZXR1cm4gYWNjZXB0ZWQ7CiB9
CiAKLWJvb2wgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVEcmFnTW92ZUV2ZW50KFFEcmFn
TW92ZUV2ZW50KiBldikKK3ZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVEcmFnTW92
ZUV2ZW50KFFEcmFnTW92ZUV2ZW50KiBldikKIHsKICAgICBib29sIGFjY2VwdGVkID0gZXYtPmlz
QWNjZXB0ZWQoKTsKIApAQCAtMjcxLDEwICsyMTIsOSBAQCBib29sIFF0V2ViUGFnZUV2ZW50SGFu
ZGxlcjo6aGFuZGxlRHJhZ01vdmVFdmVudChRRHJhZ01vdmVFdmVudCogZXYpCiAgICAgICAgIGV2
LT5hY2NlcHQoKTsKIAogICAgIGV2LT5zZXRBY2NlcHRlZChhY2NlcHRlZCk7Ci0gICAgcmV0dXJu
IGFjY2VwdGVkOwogfQogCi1ib29sIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlRHJvcEV2
ZW50KFFEcm9wRXZlbnQqIGV2KQordm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZURy
b3BFdmVudChRRHJvcEV2ZW50KiBldikKIHsKICAgICBib29sIGFjY2VwdGVkID0gZXYtPmlzQWNj
ZXB0ZWQoKTsKICAgICBRVHJhbnNmb3JtIGZyb21JdGVtVHJhbnNmb3JtID0gbV93ZWJQYWdlLT50
cmFuc2Zvcm1Gcm9tSXRlbSgpOwpAQCAtMjg2LDcgKzIyNiw2IEBAIGJvb2wgUXRXZWJQYWdlRXZl
bnRIYW5kbGVyOjpoYW5kbGVEcm9wRXZlbnQoUURyb3BFdmVudCogZXYpCiAgICAgZXYtPmFjY2Vw
dCgpOwogCiAgICAgZXYtPnNldEFjY2VwdGVkKGFjY2VwdGVkKTsKLSAgICByZXR1cm4gYWNjZXB0
ZWQ7CiB9CiAKIHZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVQb3RlbnRpYWxTaW5n
bGVUYXBFdmVudChjb25zdCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCYgcG9pbnQpCkBAIC0zMTks
MjggKzI1OCwyNCBAQCB2b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6dGltZXJFdmVudChRVGlt
ZXJFdmVudCogZXYpCiAgICAgICAgIFFPYmplY3Q6OnRpbWVyRXZlbnQoZXYpOwogfQogCi1ib29s
IFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlS2V5UHJlc3NFdmVudChRS2V5RXZlbnQqIGV2
KQordm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZUtleVByZXNzRXZlbnQoUUtleUV2
ZW50KiBldikKIHsKICAgICBtX3dlYlBhZ2VQcm94eS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRp
dmVXZWJLZXlib2FyZEV2ZW50KGV2KSk7Ci0gICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUXRX
ZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVLZXlSZWxlYXNlRXZlbnQoUUtleUV2ZW50KiBldikK
K3ZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVLZXlSZWxlYXNlRXZlbnQoUUtleUV2
ZW50KiBldikKIHsKICAgICBtX3dlYlBhZ2VQcm94eS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRp
dmVXZWJLZXlib2FyZEV2ZW50KGV2KSk7Ci0gICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUXRX
ZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVGb2N1c0luRXZlbnQoUUZvY3VzRXZlbnQqKQordm9p
ZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZUZvY3VzSW5FdmVudChRRm9jdXNFdmVudCop
CiB7CiAgICAgbV93ZWJQYWdlUHJveHktPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6
OlZpZXdJc0ZvY3VzZWQgfCBXZWJQYWdlUHJveHk6OlZpZXdXaW5kb3dJc0FjdGl2ZSk7Ci0gICAg
cmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVGb2N1
c091dEV2ZW50KFFGb2N1c0V2ZW50KikKK3ZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5k
bGVGb2N1c091dEV2ZW50KFFGb2N1c0V2ZW50KikKIHsKICAgICBtX3dlYlBhZ2VQcm94eS0+dmll
d1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld0lzRm9jdXNlZCB8IFdlYlBhZ2VQcm94
eTo6Vmlld1dpbmRvd0lzQWN0aXZlKTsKLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBRdFdl
YlBhZ2VFdmVudEhhbmRsZXI6OnNldFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUoUXRWaWV3cG9y
dEludGVyYWN0aW9uRW5naW5lKiBlbmdpbmUpCkBAIC0zNDgsNyArMjgzLDcgQEAgdm9pZCBRdFdl
YlBhZ2VFdmVudEhhbmRsZXI6OnNldFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUoUXRWaWV3cG9y
dEludGVyYWN0aW9uRW4KICAgICBtX2ludGVyYWN0aW9uRW5naW5lID0gZW5naW5lOwogfQogCi12
b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aW5wdXRNZXRob2RFdmVudChRSW5wdXRNZXRob2RF
dmVudCogZXYpCit2b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlSW5wdXRNZXRob2RF
dmVudChRSW5wdXRNZXRob2RFdmVudCogZXYpCiB7CiAgICAgUVN0cmluZyBjb21taXQgPSBldi0+
Y29tbWl0U3RyaW5nKCk7CiAgICAgUVN0cmluZyBjb21wb3NpdGlvbiA9IGV2LT5wcmVlZGl0U3Ry
aW5nKCk7CkBAIC00MTUsNyArMzUwLDcgQEAgdm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6Omlu
cHV0TWV0aG9kRXZlbnQoUUlucHV0TWV0aG9kRXZlbnQqIGV2KQogICAgIGV2LT5hY2NlcHQoKTsK
IH0KIAotdm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OnRvdWNoRXZlbnQoUVRvdWNoRXZlbnQq
IGV2ZW50KQordm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQoUVRv
dWNoRXZlbnQqIGV2ZW50KQogewogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgUVRyYW5z
Zm9ybSBmcm9tSXRlbVRyYW5zZm9ybSA9IG1fd2ViUGFnZS0+dHJhbnNmb3JtRnJvbUl0ZW0oKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhh
bmRsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRs
ZXIuaAppbmRleCBlYmU5NWRkOGQzYzk1MWM3M2ExZDY0MGQ2OWY5ZjE5YjRkMzJkODMwLi41MTll
YzU0NzFjNGY1NjQ2N2Y1ZThkMGU4ZjRhNDYxYWE4MGU2MTIyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5oCkBAIC00Myw3ICs0
MywyMiBAQCBwdWJsaWM6CiAgICAgUXRXZWJQYWdlRXZlbnRIYW5kbGVyKFdLUGFnZVJlZiwgUVF1
aWNrV2ViUGFnZSosIFFRdWlja1dlYlZpZXcqKTsKICAgICB+UXRXZWJQYWdlRXZlbnRIYW5kbGVy
KCk7CiAKLSAgICBib29sIGhhbmRsZUV2ZW50KFFFdmVudCopOworICAgIHZvaWQgaGFuZGxlS2V5
UHJlc3NFdmVudChRS2V5RXZlbnQqKTsKKyAgICB2b2lkIGhhbmRsZUtleVJlbGVhc2VFdmVudChR
S2V5RXZlbnQqKTsKKyAgICB2b2lkIGhhbmRsZUZvY3VzSW5FdmVudChRRm9jdXNFdmVudCopOwor
ICAgIHZvaWQgaGFuZGxlRm9jdXNPdXRFdmVudChRRm9jdXNFdmVudCopOworICAgIHZvaWQgaGFu
ZGxlTW91c2VNb3ZlRXZlbnQoUU1vdXNlRXZlbnQqKTsKKyAgICB2b2lkIGhhbmRsZU1vdXNlUHJl
c3NFdmVudChRTW91c2VFdmVudCopOworICAgIHZvaWQgaGFuZGxlTW91c2VSZWxlYXNlRXZlbnQo
UU1vdXNlRXZlbnQqKTsKKyAgICB2b2lkIGhhbmRsZVdoZWVsRXZlbnQoUVdoZWVsRXZlbnQqKTsK
KyAgICB2b2lkIGhhbmRsZUhvdmVyTGVhdmVFdmVudChRSG92ZXJFdmVudCopOworICAgIHZvaWQg
aGFuZGxlSG92ZXJNb3ZlRXZlbnQoUUhvdmVyRXZlbnQqKTsKKyAgICB2b2lkIGhhbmRsZURyYWdF
bnRlckV2ZW50KFFEcmFnRW50ZXJFdmVudCopOworICAgIHZvaWQgaGFuZGxlRHJhZ0xlYXZlRXZl
bnQoUURyYWdMZWF2ZUV2ZW50Kik7CisgICAgdm9pZCBoYW5kbGVEcmFnTW92ZUV2ZW50KFFEcmFn
TW92ZUV2ZW50Kik7CisgICAgdm9pZCBoYW5kbGVEcm9wRXZlbnQoUURyb3BFdmVudCopOworICAg
IHZvaWQgaGFuZGxlSW5wdXRNZXRob2RFdmVudChRSW5wdXRNZXRob2RFdmVudCopOworICAgIHZv
aWQgaGFuZGxlVG91Y2hFdmVudChRVG91Y2hFdmVudCopOwogCiAgICAgdm9pZCBzZXRWaWV3cG9y
dEludGVyYWN0aW9uRW5naW5lKFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSopOwogCkBAIC03
NCwyNiArODksOCBAQCBwcml2YXRlIHNsb3RzOgogICAgIHZvaWQgaW5wdXRQYW5lbFZpc2libGVD
aGFuZ2VkKCk7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBoYW5kbGVLZXlQcmVzc0V2ZW50KFFLZXlF
dmVudCopOwotICAgIGJvb2wgaGFuZGxlS2V5UmVsZWFzZUV2ZW50KFFLZXlFdmVudCopOwotICAg
IGJvb2wgaGFuZGxlRm9jdXNJbkV2ZW50KFFGb2N1c0V2ZW50Kik7Ci0gICAgYm9vbCBoYW5kbGVG
b2N1c091dEV2ZW50KFFGb2N1c0V2ZW50Kik7Ci0gICAgYm9vbCBoYW5kbGVNb3VzZU1vdmVFdmVu
dChRTW91c2VFdmVudCopOwotICAgIGJvb2wgaGFuZGxlTW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2
ZW50Kik7Ci0gICAgYm9vbCBoYW5kbGVNb3VzZVJlbGVhc2VFdmVudChRTW91c2VFdmVudCopOwot
ICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVudChRV2hlZWxFdmVudCopOwotICAgIGJvb2wgaGFuZGxl
SG92ZXJMZWF2ZUV2ZW50KFFIb3ZlckV2ZW50Kik7Ci0gICAgYm9vbCBoYW5kbGVIb3Zlck1vdmVF
dmVudChRSG92ZXJFdmVudCopOwotICAgIGJvb2wgaGFuZGxlRHJhZ0VudGVyRXZlbnQoUURyYWdF
bnRlckV2ZW50Kik7Ci0gICAgYm9vbCBoYW5kbGVEcmFnTGVhdmVFdmVudChRRHJhZ0xlYXZlRXZl
bnQqKTsKLSAgICBib29sIGhhbmRsZURyYWdNb3ZlRXZlbnQoUURyYWdNb3ZlRXZlbnQqKTsKLSAg
ICBib29sIGhhbmRsZURyb3BFdmVudChRRHJvcEV2ZW50Kik7Ci0KICAgICB2b2lkIHRpbWVyRXZl
bnQoUVRpbWVyRXZlbnQqKTsKIAotICAgIHZvaWQgdG91Y2hFdmVudChRVG91Y2hFdmVudCopOwot
ICAgIHZvaWQgaW5wdXRNZXRob2RFdmVudChRSW5wdXRNZXRob2RFdmVudCopOwotCiAgICAgUVBv
aW50RiBtX2xhc3RDbGljazsKICAgICBRQmFzaWNUaW1lciBtX2NsaWNrVGltZXI7CiAgICAgUXQ6
Ok1vdXNlQnV0dG9uIG1fcHJldmlvdXNDbGlja0J1dHRvbjsKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxMDRkZmQ4NGRkOWMyMmRlYjVlN2E2YzIx
ZGRkODU0YWMyMDQ0MWZiLi40ZGU3NWY3ZDI1YjJlNGZmODQzMGZmOWZlN2MyNGM5NzgwODFmZWY5
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjAgQEAKKzIwMTItMDItMjkgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21hbm5A
bm9raWEuY29tPgorCisgICAgICAgIFtRdF1bV0syXSBRUXVpY2tXZWJWaWV3OjpldmVudCBzaG91
bGQgbG9va3VwIGZhc3RlciB3aGljaCBldmVudHMgUVF1aWNrV2ViUGFnZSBjYW4gaGFuZGxlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODA0NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNlbmQgZXZlbnRz
IGZvciB0aGUgd2VidmlldyB0aHJvdWdoIHRoZSBRUXVpY2tDYW52YXMgaW5zdGVhZCBvZiBkaXJl
Y3RseSB0byB0aGUgaXRlbS4gRGlyZWN0CisgICAgICAgIHNlbmRpbmcgdG8gdGhlIGl0ZW0gcmVx
dWlyZXMgdGhlIFFPYmplY3Q6OmV2ZW50IHJlLWltcGxlbWVudGF0aW9uIHRvIGRpc3BhdGNoIHRv
IHRoZSBjb3JyZWN0CisgICAgICAgIGV2ZW50IGhhbmRsaW5nIGZ1bmN0aW9uLiBIb3dldmVyIFFR
dWlja0l0ZW06OmV2ZW50IGRvZXNuJ3QgZG8gdGhhdC4gSW5zdGVhZCBRUXVpY2tDYW52YXMgY2Fs
bHMKKyAgICAgICAgdGhlIGV2ZW50IGhhbmRsZXJzIGRpcmVjdGx5LCBhbmQgd2l0aCB0aGUgcmVt
b3ZhbCBvZiBvdXIgb3duIGRpc3BhdGNoaW5nIHdlIG5lZWQgdG8gZ28gdGhyb3VnaAorICAgICAg
ICB0aGF0IGNvZGUgcGF0aC4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvcXQvUGxhdGZv
cm1XZWJWaWV3UXQuY3BwOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OnNlbmRFdmVu
dCk6CisgICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6cG9zdEV2ZW50KToKKwogMjAxMi0w
Mi0yOSAgR2Fib3IgUmFwY3NhbnlpICA8cmdhYm9yQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW0dU
S10gU21hbGwgZml4IGZvciBjcm9zcyBjb21waWxhdGlvbiB0byBub3QgZ2VuZXJhdGUgZ3RrZG9j
LgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9xdC9QbGF0Zm9ybVdlYlZpZXdR
dC5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL3F0L1BsYXRmb3JtV2ViVmlld1F0LmNwcApp
bmRleCBlZmZmMWVhZjYwMTQ2NDI1MTQ2YTNjZmJmMGUzYzY5YWI0MDU1YjIzLi42YjM2YTNjMDlm
ZDczMTQ2NzBiYzM0OWE0NWE2MWViZGY3OTg1YzM4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL3F0L1BsYXRmb3JtV2ViVmlld1F0LmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL3F0L1BsYXRmb3JtV2ViVmlld1F0LmNwcApAQCAtMTI0LDEyICsxMjQsMTIgQEAgdm9p
ZCBQbGF0Zm9ybVdlYlZpZXc6OnNldFdpbmRvd0ZyYW1lKFdLUmVjdCB3a1JlY3QpCiAKIGJvb2wg
UGxhdGZvcm1XZWJWaWV3OjpzZW5kRXZlbnQoUUV2ZW50KiBldmVudCkKIHsKLSAgICByZXR1cm4g
UUNvcmVBcHBsaWNhdGlvbjo6c2VuZEV2ZW50KG1fdmlldywgZXZlbnQpOworICAgIHJldHVybiBR
Q29yZUFwcGxpY2F0aW9uOjpzZW5kRXZlbnQobV93aW5kb3csIGV2ZW50KTsKIH0KIAogdm9pZCBQ
bGF0Zm9ybVdlYlZpZXc6OnBvc3RFdmVudChRRXZlbnQqIGV2ZW50KQogewotICAgIFFDb3JlQXBw
bGljYXRpb246OnBvc3RFdmVudChtX3ZpZXcsIGV2ZW50KTsKKyAgICBRQ29yZUFwcGxpY2F0aW9u
Ojpwb3N0RXZlbnQobV93aW5kb3csIGV2ZW50KTsKIH0KIAogdm9pZCBQbGF0Zm9ybVdlYlZpZXc6
OmFkZENocm9tZUlucHV0RmllbGQoKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>