<?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>100341</bug_id>
          
          <creation_ts>2012-10-25 00:10:33 -0700</creation_ts>
          <short_desc>[META][GTK] Implement threaded model of Coordinated Graphics</short_desc>
          <delta_ts>2016-09-15 00:52:13 -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>WebKitGTK</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>
          <dependson>100797</dependson>
    
    <dependson>100799</dependson>
    
    <dependson>100907</dependson>
    
    <dependson>101023</dependson>
    
    <dependson>102994</dependson>
    
    <dependson>117227</dependson>
    
    <dependson>117230</dependson>
    
    <dependson>117238</dependson>
    
    <dependson>118265</dependson>
    
    <dependson>143299</dependson>
    
    <dependson>143300</dependson>
    
    <dependson>143301</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Jae Hyun Park">jaepark</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>buildbot</cc>
    
    <cc>cgarcia</cc>
    
    <cc>changseok</cc>
    
    <cc>choco</cc>
    
    <cc>dev</cc>
    
    <cc>dino</cc>
    
    <cc>d.nomiyama</cc>
    
    <cc>dongseong.hwang</cc>
    
    <cc>d-r</cc>
    
    <cc>helder.correia</cc>
    
    <cc>igor.oliveira</cc>
    
    <cc>jaepark</cc>
    
    <cc>joone</cc>
    
    <cc>jourmoon</cc>
    
    <cc>kalyan.kondapally</cc>
    
    <cc>kevin.cs.oh</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>levin+threading</cc>
    
    <cc>luiz</cc>
    
    <cc>mrobinson</cc>
    
    <cc>noam</cc>
    
    <cc>rego</cc>
    
    <cc>rniwa</cc>
    
    <cc>s.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>skyul</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yael</cc>
    
    <cc>yoon</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>750464</commentid>
    <comment_count>0</comment_count>
    <who name="Jae Hyun Park">jaepark</who>
    <bug_when>2012-10-25 00:10:33 -0700</bug_when>
    <thetext>This is a metabug to track threaded model of Coordinate Graphics in GTK+ port.

Purpose

The purpose of threaded model of Coordinated Graphics in GTK+ is to provide performance improvement of the following features with high responsiveness.
- Scroll &amp; Zoom
- CSS Animations in Accelerated Compositing

Why We Need to Add This Feature?

We need to move Texture Mapper off the main thread in GTK+ port.
GTK+ folks prefer running AC on another thread to running AC on UI Process. This has been discussed in the bugzilla (https://bugs.webkit.org/show_bug.cgi?id=92368) and webkit-gtk mailing list (http://lists.webkit.org/pipermail/webkit-gtk/2012-July/001173.html).
Since Qt and EFL already have Coordinated Graphics, we can reuse this infrastructure with little modification to implement threaded model.
When this feature is added, ports that use Coordinated Graphics System will be able to choose either threaded model or process model according to their needs.


For details, refer to the following design document.
https://docs.google.com/document/pub?id=1UoI1zk-6nTUFtz8i4evURM8aQIjkDRC8boO1zPdMMBg


Any comments/discussions are appreciated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769000</commentid>
    <comment_count>1</comment_count>
    <who name="Jae Hyun Park">jaepark</who>
    <bug_when>2012-11-16 00:46:57 -0800</bug_when>
    <thetext>Our team is currently implementing threaded model of Coordinated Graphics in GTK+ port.

We have updated the design document in the link below:
https://docs.google.com/document/pub?id=1UoI1zk-6nTUFtz8i4evURM8aQIjkDRC8boO1zPdMMBg

Our prototype for this implementation is shared in the GitHub.
https://github.com/ryumiel/webkit-experimental

The prototype is still in development, and only implemented up to step 1 in our design document.

The purpose of sharing is to report our progress and make reviewers easier to understand the overview picture.

Any comments/concerns are appreciated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769266</commentid>
    <comment_count>2</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-11-16 07:42:57 -0800</bug_when>
    <thetext>&gt; Any comments/concerns are appreciated.

OK, some comments/concerns :)
First of all you guys are doing an astounding job with this, and I&apos;m happy with any progress re. coordinated graphics,  so don&apos;t get my architectural ideas as criticism...

1. GTK would run into the same problem we ran with with Qt when running this on embedded systems. With the &quot;threading on the web process&quot; approach, you still have to pass via a compositing step (e.g. XComposite on GLX) for every frame in a CSS animation. For desktop this is fine, for some platforms you&apos;d find that the performance is unacceptable and the animations lag behind. We went through the trouble of writing IPC coordinated graphics because of this.

2. The optimizations we have in place today for fixed positioned elements and later for overflow-scroll would not work with the threaded model.

3. I think WebKit2 is the wrong place for this. If you really want to go down this route, I&apos;d prefer it if we made TExtureMapper into more of a transaction/actor model, and make it threadable (it&apos;s already pretty thread safe), rather than trying to put threading code in WebKit2.

It feels a little bit hacky to put something like LayerTreeCoordinatorClientThreaded.h inside WebProcess/WebPage/CoordinatedGraphics; Feels like all of this belongs in WebCore/.../texmap, and  then we can make the IPC version work as a client that is implemented inside WebKit2. Also I don&apos;t see why this should not work on WebKit1. 
It feels like some of the architectural decisions are based on convenience of using existing code, but don&apos;t take the whole picture unto account :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770340</commentid>
    <comment_count>3</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-18 21:50:31 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; OK, some comments/concerns :)
&gt; First of all you guys are doing an astounding job with this, and I&apos;m happy with any progress re. coordinated graphics,  so don&apos;t get my architectural ideas as criticism...

Thank for your valuable feedback. Your concern is very reasonable. I’ll explain why we refactored Coordinated Graphics instead of GrahpicsLayerTextureMapper.

&gt; 1. GTK would run into the same problem we ran with with Qt when running this on embedded systems. With the &quot;threading on the web process&quot; approach, you still have to pass via a compositing step (e.g. XComposite on GLX) for every frame in a CSS animation. For desktop this is fine, for some platforms you&apos;d find that the performance is unacceptable and the animations lag behind. We went through the trouble of writing IPC coordinated graphics because of this.

We separated your first concern into two questions:
1. Does the &quot;threading on the web process&quot; approach cause an additional compositing step?
2. Is threaded coordinated graphics unacceptable because of unpredictable performance of sharing a surface between processes (e.g. XComposite)?

The answer to the first question is “no” in GTK+. GTK+ main loop in UI Process needs to composite the result of TexMap and other UI toolkits, as QSGNode did. So we always need an additional compositing step for every frame, regardless of using IPC coordinated graphics or Threaded coordinated graphics.

I’ll describe our opinion for the second question. If GTK+ uses IPC coordinated graphics, we would use some cairo way to share a texture between threads so that the main thread composites the result that painting thread painted.
If GTK+ uses Threaded coordinated graphics, we need platform specific ways, something like XComposite, to share a surface between processes. I agree on your opinion that the performance of XComposite is unpredictable on some platforms. However, each platform has a cross process surface sharing mechanism for windows compositor and, IMHO, Threaded coordinated graphics can have similar performance to IPC coordinated graphics if we choose a proper surface sharing mechanism on the platform (e.g. EGLImage). How about your opinion, mrobinson and noam?

p.s. You said the performance was unacceptable on embedded platforms. Could you explain in more detail? For example, which device or platform did you try on? Did you use XComposite or EGLImage?

&gt; 2. The optimizations we have in place today for fixed positioned elements and later for overflow-scroll would not work with the threaded model.

I cannot fully understand how threaded coordinated graphics cannot satisfy some requirements that IPC coordinated graphics satisfies. Both implementations are very similar except for the message passing mechanism. Could you explain in more detail?

&gt; 3. I think WebKit2 is the wrong place for this. If you really want to go down this route, I&apos;d prefer it if we made TExtureMapper into more of a transaction/actor model, and make it threadable (it&apos;s already pretty thread safe), rather than trying to put threading code in WebKit2.
&gt; 
&gt; It feels a little bit hacky to put something like LayerTreeCoordinatorClientThreaded.h inside WebProcess/WebPage/CoordinatedGraphics; Feels like all of this belongs in WebCore/.../texmap, and  then we can make the IPC version work as a client that is implemented inside WebKit2. Also I don&apos;t see why this should not work on WebKit1. 
&gt; It feels like some of the architectural decisions are based on convenience of using existing code, but don&apos;t take the whole picture unto account :)

Making a threaded version of GraphicsLayerTextureMapper is also a good idea. I agree that TextureMapperLayer is already pretty thread safe. However, if we focus on changing GraphicsLayerTextureMapper, we need to make new classes like GraphicsLayerThreadedTextureMapper, because we have to change GraphicsLayerTextureMapper a lot, and other clients (e.g. coordinated graphics) would not want GraphicsLayerTextureMapper to becomes complex. 

We thought GraphicsLayerThreadedTextureMapper will be very similar to CoordinatedGraphicsLayer after we add all features for threading. For example, if we use TiledBackingStore in GraphicsLayerThreadedTextureMapper to share backing store, GraphicsLayerThreadedTextureMapper will be similar to CoordinatedGraphicsLayer. Threaded model also need the class that plays a similar role to LayerTreeCoordinator, as chromium compositor has CCLayerTreeHost.
So, we thought reusing is better than reinventing wheel.

I absolutely agree that this can also work on WebKit1. Our next step is to make WebKit1 use Threaded coordinated graphics. We will need to move shareable code from WebKit2/coordinatedgraphics to platform/graphics/texmap/coordinatedgraphics to reuse them in WebKit1.

Moreover, I think reusing coordinated graphics is more convenient for maintaining. For example, if we have another threaded model implementation, alex who made coordinated graphics cache custom filter programs would have to change the threaded model implementation too.

I want to listen to your opinion. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773431</commentid>
    <comment_count>4</comment_count>
    <who name="Jae Hyun Park">jaepark</who>
    <bug_when>2012-11-21 17:11:15 -0800</bug_when>
    <thetext>For starters, we are going to implement threaded coordinated graphics in Qt WebKit1. Then, we will apply it to Gtk WebKit1 &amp; 2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794257</commentid>
    <comment_count>5</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-18 18:34:07 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; For starters, we are going to implement threaded coordinated graphics in Qt WebKit1. Then, we will apply it to Gtk WebKit1 &amp; 2.

I&apos;m not sure if Qt actually needs threaded coordinated graphics.
I need some clarifications if GTK is actually going to use the threaded coordinated graphics system before we continue with the patch-by-patch refactors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794270</commentid>
    <comment_count>6</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-12-18 19:09:14 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; For starters, we are going to implement threaded coordinated graphics in Qt WebKit1. Then, we will apply it to Gtk WebKit1 &amp; 2.
&gt; 
&gt; I&apos;m not sure if Qt actually needs threaded coordinated graphics.
&gt; I need some clarifications if GTK is actually going to use the threaded coordinated graphics system before we continue with the patch-by-patch refactors.

Nowaday, I feel similar to you.
I think refactorings until now have their own value. But we need to clarify goal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794288</commentid>
    <comment_count>7</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2012-12-18 19:57:49 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; (In reply to comment #4)
&gt; &gt; &gt; For starters, we are going to implement threaded coordinated graphics in Qt WebKit1. Then, we will apply it to Gtk WebKit1 &amp; 2.
&gt; &gt; 
&gt; &gt; I&apos;m not sure if Qt actually needs threaded coordinated graphics.
&gt; &gt; I need some clarifications if GTK is actually going to use the threaded coordinated graphics system before we continue with the patch-by-patch refactors.
&gt; 
&gt; Nowaday, I feel similar to you.
&gt; I think refactorings until now have their own value. But we need to clarify goal.

We already discussed about this issue in IRC, bugzilla, and mailing-lists.
And we agreed to make threaded compositor in GTK, the goal of this project.

I think refactoring is a by-product of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803478</commentid>
    <comment_count>8</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-01-09 10:44:03 -0800</bug_when>
    <thetext>(In reply to comment #7)

&gt; We already discussed about this issue in IRC, bugzilla, and mailing-lists.
&gt; And we agreed to make threaded compositor in GTK, the goal of this project.
&gt; 
&gt; I think refactoring is a by-product of this.

I think a way to move forward here is to do all this work in an open branch (perhaps on github or in the WebKit repository itself). Then reviewers can work through the patches in the branch, understand them as a whole, and look at the performance changes. I would also really appreciate it if this work wasn&apos;t duplicated between two teams as it is now. Is there any way that both teams can work together to create one branch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803803</commentid>
    <comment_count>9</comment_count>
    <who name="Jae Hyun Park">jaepark</who>
    <bug_when>2013-01-09 16:22:18 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; I think a way to move forward here is to do all this work in an open branch (perhaps on github or in the WebKit repository itself). Then reviewers can work through the patches in the branch, understand them as a whole, and look at the performance changes. I would also really appreciate it if this work wasn&apos;t duplicated between two teams as it is now. Is there any way that both teams can work together to create one branch?

Our plan was to finish refactoring WebKit Qt1 (https://bugs.webkit.org/show_bug.cgi?id=102994) in patch-by-patch review process, and then, work on a new branch for WebKit GTK+. IMHO, I think this is the right approach because current Qt refactoring patches has its own value, improving code maintainability. Moreover, this work is already in progress, and should be finished up before applying Threaded Coordinated Graphics on the GTK+ port.

For WebKit GTK+, we will make a seperate branch so that the reviewers can understand them as a whole, and look at the performance changes. We will upload our work sometime before the end of this month (hopefully).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807407</commentid>
    <comment_count>10</comment_count>
      <attachid>182799</attachid>
    <who name="Denis Nomiyama (dnomi)">d.nomiyama</who>
    <bug_when>2013-01-15 10:04:03 -0800</bug_when>
    <thetext>Created attachment 182799
Proof-of-concept prototype. Not for commit.

Hi, I have been working on a proof-of-concept prototype that implements a thread for compositing layers in the TextureMapperLayer. I am not fully aware of the final implementation proposed in this meta bug, but I believe the prototype follows roughly the same path.

https://github.com/dnomi/webkit/tree/threaded-coordinated-gfx

The idea is to just run TextureMapperLayer::paint() on a new thread, and to check the performance improvement that the threaded coordinated graphics will potentially give us on the WebKit2 GTK+ port.

So the initial results are encouraging, suggesting an improvement of about 20%~30% in the frame rate when displaying some pages with WebGL on a Linux PC (e.g. http://code.google.com/p/webglsamples).

I have also uploaded the patch here for reference and review. Comments are welcome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807417</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-15 10:17:24 -0800</bug_when>
    <thetext>Attachment 182799 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Sou...&quot; exit_code: 1
Source/WebCore/platform/graphics/texmap/TextureMapperLayerThread.cpp:27:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/platform/graphics/texmap/TextureMapperLayerThread.cpp:29:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/platform/graphics/texmap/TextureMapperLayerThread.cpp:69:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/platform/graphics/texmap/TextureMapperLayerTask.cpp:26:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
Source/WebCore/platform/graphics/texmap/TextureMapperLayerTask.cpp:83:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Source/WebCore/platform/graphics/texmap/TextureMapperLayerThread.h:37:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/platform/graphics/texmap/TextureMapperLayerTask.h:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/platform/graphics/cairo/GLContext.h:52:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 8 in 12 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>807428</commentid>
    <comment_count>12</comment_count>
      <attachid>182799</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-01-15 10:27:06 -0800</bug_when>
    <thetext>Comment on attachment 182799
Proof-of-concept prototype. Not for commit.

Attachment 182799 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/15868950</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807435</commentid>
    <comment_count>13</comment_count>
      <attachid>182799</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-01-15 10:31:18 -0800</bug_when>
    <thetext>Comment on attachment 182799
Proof-of-concept prototype. Not for commit.

Attachment 182799 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/15902038</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807478</commentid>
    <comment_count>14</comment_count>
      <attachid>182799</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-15 11:10:35 -0800</bug_when>
    <thetext>Comment on attachment 182799
Proof-of-concept prototype. Not for commit.

Attachment 182799 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/15874962</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807583</commentid>
    <comment_count>15</comment_count>
      <attachid>182799</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-01-15 12:44:01 -0800</bug_when>
    <thetext>Comment on attachment 182799
Proof-of-concept prototype. Not for commit.

Attachment 182799 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/15905044</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810351</commentid>
    <comment_count>16</comment_count>
    <who name="Jae Hyun Park">jaepark</who>
    <bug_when>2013-01-18 01:25:47 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Created an attachment (id=182799) [details]
&gt; Proof-of-concept prototype. Not for commit.
&gt; 
&gt; Hi, I have been working on a proof-of-concept prototype that implements a thread for compositing layers in the TextureMapperLayer. I am not fully aware of the final implementation proposed in this meta bug, but I believe the prototype follows roughly the same path.
&gt; 
&gt; https://github.com/dnomi/webkit/tree/threaded-coordinated-gfx
&gt; 
&gt; The idea is to just run TextureMapperLayer::paint() on a new thread, and to check the performance improvement that the threaded coordinated graphics will potentially give us on the WebKit2 GTK+ port.
&gt; 
&gt; So the initial results are encouraging, suggesting an improvement of about 20%~30% in the frame rate when displaying some pages with WebGL on a Linux PC (e.g. http://code.google.com/p/webglsamples).
&gt; 
&gt; I have also uploaded the patch here for reference and review. Comments are welcome.

Hi, Denis.

Thanks for sharing your prototype with us!

Our design of Threaded Coordinated Graphics is quite different from your prototype. As you can see in the design document, our plan is to refactor and reuse current Coordinated Graphics System by implementing communication mechanism between threads, instead of IPC. That&apos;s why we call this &quot;Threaded Coordinated Graphics&quot;. 

It&apos;s still great to see a performance improvement just by running TextureMapperLayer::paint() on a new thread. 

Thank you for your interest in this project.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819807</commentid>
    <comment_count>17</comment_count>
    <who name="Jae Hyun Park">jaepark</who>
    <bug_when>2013-01-29 22:24:48 -0800</bug_when>
    <thetext>We are still heavily refactoring Coordinated Graphics to implement Threaded Coordinated Graphics, as we have mentioned several times. However, since refactoring Coordinated Graphics takes quite long, we have implemented a proof-of-concept prototype for WebKit2 GTK+. As we have expected, we saw a great performance improvement in PC.

We have uploaded our prototype in github (https://github.com/DorothyBrowser/webkit/tree/threaded-compositor).

The prototype implementation is based on the original WebKit GTK+ design document (https://docs.google.com/document/pub?id=1UoI1zk-6nTUFtz8i4evURM8aQIjkDRC8boO1zPdMMBg).

The following chart shows the performance improvement compared to current WebKit2 GTK+.
https://docs.google.com/document/pub?id=1UoI1zk-6nTUFtz8i4evURM8aQIjkDRC8boO1zPdMMBg#h.g7chzqe91w31

ASAP we finish refactoring Coordinated Graphics, we will reimplement our revised design adapted to the latest WebKit. Stay tuned!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822196</commentid>
    <comment_count>18</comment_count>
    <who name="Jae Hyun Park">jaepark</who>
    <bug_when>2013-01-31 17:53:52 -0800</bug_when>
    <thetext>We have presented our current project, &quot;Threaded Coordinated Graphics&quot;, in LCA Browser Miniconf!

http://mcc.id.au/BrowserMiniconf/LCA2013/Schedule#hwang

We will upload a video of the presentation in a couple of weeks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>905160</commentid>
    <comment_count>19</comment_count>
      <attachid>205840</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-07-01 15:07:01 -0700</bug_when>
    <thetext>Created attachment 205840
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229934</commentid>
    <comment_count>20</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-09-15 00:52:13 -0700</bug_when>
    <thetext>I guess this is obsolete now, closing.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182799</attachid>
            <date>2013-01-15 10:04:03 -0800</date>
            <delta_ts>2013-01-15 12:44:01 -0800</delta_ts>
            <desc>Proof-of-concept prototype. Not for commit.</desc>
            <filename>threaded_coordinated_gfx.patch</filename>
            <type>text/plain</type>
            <size>23641</size>
            <attacher name="Denis Nomiyama (dnomi)">d.nomiyama</attacher>
            
              <data encoding="base64">RnJvbSA2Y2NhZDE0ZDBhYWI1ZTM4NGUxYWFhYzg4ZTZjYzMyZTNlMzI4NmFmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBkbm9taSA8ZC5ub21peWFtYUBzYW1zdW5nLmNvbT4KRGF0ZTog
VGh1LCAxMCBKYW4gMjAxMyAwOTo0NDoxOSArMDAwMApTdWJqZWN0OiBbUEFUQ0hdIEFkZGVkIHRo
cmVhZCB0byBoYW5kbGUgbGF5ZXIgY29tcG9zaXRpbmcuIE1vZGlmaWVkIEdMQ29udGV4dAogdG8g
YmUgbXVsdGktdGhyZWFkCgotLS0KIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0g
ICAgICAgICAgICAgICAgIHwgICAgOCArKwogLi4uL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR0xDb250ZXh0LmNwcCAgfCAgICA2ICstCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HTENvbnRleHQuaCB8ICAgMjggKysrKysrCiAuLi4vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAgICAgICB8ICAgIDIgKwogLi4uL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5jcHAgfCAgICA0ICsKIC4uLi9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwICAgICAgIHwgICAgNCArCiAuLi4v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllclRhc2suY3BwICAgICB8ICAgOTIgKysr
KysrKysrKysrKysrKysrCiAuLi4vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllclRh
c2suaCAgICAgICB8ICAgNjUgKysrKysrKysrKysrKwogLi4uL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyTGF5ZXJUaHJlYWQuY3BwICAgfCAgIDk5ICsrKysrKysrKysrKysrKysrKysrCiAu
Li4vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllclRocmVhZC5oICAgICB8ICAgNjAg
KysrKysrKysrKysrCiAuLi4vV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3Rr
LmNwcCAgICB8ICAgMjEgKysrKysKIC4uLi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJl
ZUhvc3RHdGsuaCAgICAgIHwgICAgMyArCiAxMiBmaWxlcyBjaGFuZ2VkLCAzODkgaW5zZXJ0aW9u
cygrKSwgMyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyVGFzay5jcHAKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckxheWVyVGFzay5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllclRocmVhZC5jcHAKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckxheWVyVGhyZWFkLmgKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpp
bmRleCAyMDI4ZDkwLi45OGQ3NjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAg
LTY0MzQsNiArNjQzNCwxMCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuaCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXll
ci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyTGF5ZXIuaCBcCisgICAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJMYXllclRhc2suY3BwIFwKKyAgICBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyVGFzay5oIFwKKyAgICBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyVGhy
ZWFkLmNwcCBcCisgICAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJMYXllclRocmVhZC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaAogZW5kaWYgICMgRU5EIFVT
RV9URVhUVVJFX01BUFBFUl9DQUlSTwogCkBAIC02NDU5LDYgKzY0NjMsMTAgQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckltYWdlQnVmZmVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmggXAorICAgIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXJUYXNrLmNw
cCBcCisgICAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJMYXllclRhc2suaCBcCisgICAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJMYXllclRocmVhZC5jcHAgXAorICAgIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXJUaHJlYWQuaCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyLmgKIGVuZGlmICAjIEVORCBVU0VfVEVYVFVSRV9NQVBQRVJfR0wKIGVuZGlmICAj
IFVTRV9BQ0NFTEVSQVRFRF9DT01QT1NJVElORwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR0xDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5jcHAKaW5kZXggMmNiMGFiMy4uOWIxMDYz
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR0xD
b250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
TENvbnRleHQuY3BwCkBAIC0zMSw5ICszMSwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K011dGV4IEdyYXBoaWNDb250ZXh0TG9ja2VyOjpzX2Rpc3BsYXlNdXRleDsKK1RocmVhZElkZW50
aWZpZXIgR3JhcGhpY0NvbnRleHRMb2NrZXI6OnNfY3VycmVudFRocmVhZCA9IDA7CisKIEdMQ29u
dGV4dCogR0xDb250ZXh0OjpzaGFyaW5nQ29udGV4dCgpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKE93blB0cjxHTENvbnRleHQ+LCBzaGFy
aW5nLCAoY3JlYXRlT2Zmc2NyZWVuQ29udGV4dCgpKSk7CiAgICAgcmV0dXJuIHNoYXJpbmcuZ2V0
KCk7CiB9CkBAIC0xNTUsMTQgKzE1NywxMiBAQCBHTENvbnRleHQ6On5HTENvbnRleHQoKQogCiBi
b29sIEdMQ29udGV4dDo6bWFrZUNvbnRleHRDdXJyZW50KCkKIHsKLSAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogICAgIGdDdXJyZW50Q29udGV4dCA9IHRoaXM7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKIEdMQ29udGV4dCogR0xDb250ZXh0OjpnZXRDdXJyZW50KCkKIHsKLSAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogICAgIHJldHVybiBnQ3VycmVudENvbnRleHQ7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR0xDb250ZXh0LmgKaW5k
ZXggMWE4ODA3Mi4uODlkZjJlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR0xDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR0xDb250ZXh0LmgKQEAgLTMxLDYgKzMxLDM0IEBAIHR5cGVkZWYgc3Ry
dWN0IF9YRGlzcGxheSBEaXNwbGF5OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEdy
YXBoaWNDb250ZXh0TG9ja2VyIHsKK3B1YmxpYzoKKyAgICBHcmFwaGljQ29udGV4dExvY2tlcigp
CisgICAgeworICAgICAgICB7CisgICAgICAgICAgICAvLyBDaGVjayBpZiBHQyBpcyBsb2NrZWQK
KyAgICAgICAgICAgIE11dGV4VHJ5TG9ja2VyIGxvY2tlcihzX2Rpc3BsYXlNdXRleCk7CisKKyAg
ICAgICAgICAgIGlmIChzX2N1cnJlbnRUaHJlYWQgPT0gY3VycmVudFRocmVhZCgpICYmICFsb2Nr
ZXIubG9ja2VkKCkpIHsKKyAgICAgICAgICAgICAgICBtX2xvY2sgPSAwOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1fbG9jayA9
IG5ldyBNdXRleExvY2tlcihzX2Rpc3BsYXlNdXRleCk7CisKKyAgICAgICAgc19jdXJyZW50VGhy
ZWFkID0gY3VycmVudFRocmVhZCgpOworICAgIH0KKyAgICB+R3JhcGhpY0NvbnRleHRMb2NrZXIo
KSB7CisgICAgICAgIGlmIChtX2xvY2spCisgICAgICAgICAgICBkZWxldGUobV9sb2NrKTsKKyAg
ICB9CisKKyAgICBNdXRleExvY2tlciogbV9sb2NrOworICAgIHN0YXRpYyBNdXRleCBzX2Rpc3Bs
YXlNdXRleDsKKyAgICBzdGF0aWMgVGhyZWFkSWRlbnRpZmllciBzX2N1cnJlbnRUaHJlYWQ7Cit9
OworCiBjbGFzcyBHTENvbnRleHQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdMQ29udGV4
dCk7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCmluZGV4IDNkNWEx
ZTIuLmNmYzZmMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCkBAIC04Nyw2
ICs4Nyw3IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0Nv
bnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBICiAgICAgLCBtX211bHRpc2FtcGxlQ29s
b3JCdWZmZXIoMCkKICAgICAsIG1fcHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNy
ZWF0ZSh0aGlzLCByZW5kZXJTdHlsZSkpCiB7CisgICAgR3JhcGhpY0NvbnRleHRMb2NrZXIgbG9j
a2VyOwogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCiAgICAgdmFsaWRhdGVBdHRyaWJ1dGVz
KCk7CkBAIC0xNDksNiArMTUwLDcgQEAgR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRl
eHQzRCgpCiAgICAgaWYgKG1fcHJpdmF0ZS0+cmVuZGVyU3R5bGUoKSA9PSBSZW5kZXJUb0N1cnJl
bnRHTENvbnRleHQpCiAgICAgICAgIHJldHVybjsKIAorICAgIEdyYXBoaWNDb250ZXh0TG9ja2Vy
IGxvY2tlcjsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6OmdsRGVsZXRlVGV4dHVy
ZXMoMSwgJm1fdGV4dHVyZSk7CiAgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguY3Bw
CmluZGV4IDMxZjMyY2YuLjU2MTRhZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguY3BwCkBAIC0xODIsNiArMTgyLDEwIEBA
IEdMQ29udGV4dEdMWDo6R0xDb250ZXh0R0xYKEdMWENvbnRleHQgY29udGV4dCwgUGl4bWFwIHBp
eG1hcCwgR0xYUGl4bWFwIGdseFBpeG1hCiAKIEdMQ29udGV4dEdMWDo6fkdMQ29udGV4dEdMWCgp
CiB7CisgICAgR3JhcGhpY0NvbnRleHRMb2NrZXIgbG9ja2VyOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChtX2NvbnRleHQpIHsKICAg
ICAgICAgLy8gVGhpcyBtYXkgYmUgbmVjZXNzYXJ5IHRvIHByZXZlbnQgY3Jhc2hlcyB3aXRoIE5W
aWRpYSdzIGNsb3NlZCBzb3VyY2UgZHJpdmVycy4gT3JpZ2luYWxseQogICAgICAgICAvLyBmcm9t
IE1vemlsbGEncyAzRCBjYW52YXMgaW1wbGVtZW50YXRpb24gYXQ6IGh0dHA6Ly9iaXRidWNrZXQu
b3JnL2lsbWFyaS9jYW52YXMzZC8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0xDb21tb24uY3BwCmluZGV4IDU4Y2ZkN2YuLjRlMzk2ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENv
bW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcApAQCAtMzgsNiArMzgsNyBAQAogI2Vsc2UK
ICNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKICNlbmRpZgorI2luY2x1ZGUgIkdMQ29u
dGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCkBAIC03MCw2ICs3MSw5IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorLy8gSGFja2luZyA6KCBKdXN0IHRvIGF2b2lkIHRvbyBtYW55IGNo
YW5nZXMgaW4gdGhpcyBwcm90b3R5cGUuCisjZGVmaW5lIG1ha2VDb250ZXh0Q3VycmVudCgpIEdy
YXBoaWNDb250ZXh0TG9ja2VyIGxvY2tlcjsgR3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0
Q3VycmVudCgpOworCiBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlRm9yQ3VycmVudEdMQ29udGV4dCgpCiB7CiAgICAgUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKEF0dHJp
YnV0ZXMoKSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclRvQ3VycmVudEdMQ29udGV4dCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJMYXllclRhc2suY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllclRhc2suY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjMzMTE0MjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyVGFzay5jcHAKQEAg
LTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9u
aWNzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJMYXllclRhc2suaCIKKyNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyTGF5ZXJUaHJlYWQuaCIKKyNpbmNsdWRlIDxHTC9nbC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK093blB0cjxXZWJDb3JlOjpHTENvbnRleHQ+IFRleHR1cmVNYXBw
ZXJMYXllclRhc2s6OnNfY29udGV4dCA9IG51bGxwdHI7CisKK1RleHR1cmVNYXBwZXJMYXllclRh
c2s6OlRleHR1cmVNYXBwZXJMYXllclRhc2soVHlwZSB0eXBlLCBUZXh0dXJlTWFwcGVyTGF5ZXIq
IHRleHR1cmVNYXBwZXJMYXllciwgdWludDY0X3Qgd2luZG93SGFuZGxlKQorICAgIDogbV90eXBl
KHR5cGUpCisgICAgLCBtX3RocmVhZCgwKQorICAgICwgbV90ZXh0dXJlTWFwcGVyTGF5ZXIodGV4
dHVyZU1hcHBlckxheWVyKQoreworICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXJMYXllcik7Cisg
ICAgQVNTRVJUKG1fdHlwZSA9PSBMYXllclBhaW50KTsKKyAgICBpZiAoIXNfY29udGV4dCkKKyAg
ICAgICAgc19jb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVDb250ZXh0Rm9yV2luZG93KHdpbmRv
d0hhbmRsZSwgR0xDb250ZXh0OjpzaGFyaW5nQ29udGV4dCgpKTsKKyAgICBBU1NFUlQoc19jb250
ZXh0KTsKK30KKworVGV4dHVyZU1hcHBlckxheWVyVGFzazo6VGV4dHVyZU1hcHBlckxheWVyVGFz
ayhUeXBlIHR5cGUsIFRleHR1cmVNYXBwZXJMYXllclRocmVhZCogdGhyZWFkKQorICAgIDogbV90
eXBlKHR5cGUpCisgICAgLCBtX3RocmVhZCh0aHJlYWQpCisgICAgLCBtX3RleHR1cmVNYXBwZXJM
YXllcigwKQoreworICAgIEFTU0VSVChtX3RocmVhZCk7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBU
ZXJtaW5hdGVUaHJlYWQpOworfQorCitUZXh0dXJlTWFwcGVyTGF5ZXJUYXNrOjp+VGV4dHVyZU1h
cHBlckxheWVyVGFzaygpCit7Cit9CisKK2Jvb2wgVGV4dHVyZU1hcHBlckxheWVyVGFzazo6c19j
b21wb3NpdGluZyA9IGZhbHNlOworCit2b2lkIFRleHR1cmVNYXBwZXJMYXllclRhc2s6OmNvbXBv
c2l0ZUxheWVyc1RvQ29udGV4dCgpCit7CisgICAgc19jb21wb3NpdGluZyA9IHRydWU7CisgICAg
R3JhcGhpY0NvbnRleHRMb2NrZXIgbG9ja2VyOworICAgIGlmICghc19jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50U2l6ZSBjb250ZXh0U2l6
ZSA9IHNfY29udGV4dC0+ZGVmYXVsdEZyYW1lQnVmZmVyU2l6ZSgpOworICAgIGdsVmlld3BvcnQo
MCwgMCwgY29udGV4dFNpemUud2lkdGgoKSwgY29udGV4dFNpemUuaGVpZ2h0KCkpOworCisgICAg
bV90ZXh0dXJlTWFwcGVyTGF5ZXItPnRleHR1cmVNYXBwZXIoKS0+YmVnaW5QYWludGluZygpOwor
ICAgIG1fdGV4dHVyZU1hcHBlckxheWVyLT5wYWludCgpOworICAgIG1fdGV4dHVyZU1hcHBlckxh
eWVyLT50ZXh0dXJlTWFwcGVyKCktPmVuZFBhaW50aW5nKCk7CisKKyAgICBzX2NvbnRleHQtPnN3
YXBCdWZmZXJzKCk7CisKKyAgICBzX2NvbXBvc2l0aW5nID0gZmFsc2U7Cit9CisKK3ZvaWQgVGV4
dHVyZU1hcHBlckxheWVyVGFzazo6cGVyZm9ybVRhc2soKQoreworICAgIHN3aXRjaCAobV90eXBl
KSB7CisgICAgICAgIGNhc2UgTGF5ZXJQYWludDoKKyAgICAgICAgICAgIGNvbXBvc2l0ZUxheWVy
c1RvQ29udGV4dCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVGVybWluYXRl
VGhyZWFkOgorICAgICAgICAgICAgbV90aHJlYWQtPnBlcmZvcm1UZXJtaW5hdGUoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllclRhc2suaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXJUYXNr
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZjZWNlNwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyTGF5ZXJUYXNrLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBUZXh0dXJlTWFwcGVyTGF5ZXJUYXNrX2gKKyNkZWZpbmUgVGV4
dHVyZU1hcHBlckxheWVyVGFza19oCisKKyNpbmNsdWRlICJHTENvbnRleHQuaCIKKyNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyTGF5ZXIuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xh
c3MgVGV4dHVyZU1hcHBlckxheWVyVGhyZWFkOworCisgICAgY2xhc3MgVGV4dHVyZU1hcHBlckxh
eWVyVGFzayB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRleHR1cmVNYXBwZXJMYXll
clRhc2spOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIGVu
dW0gVHlwZSB7IExheWVyUGFpbnQsIFRlcm1pbmF0ZVRocmVhZCB9OworCisgICAgICAgIH5UZXh0
dXJlTWFwcGVyTGF5ZXJUYXNrKCk7CisKKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVy
ZU1hcHBlckxheWVyVGFzaz4gY29tcG9zaXRlTGF5ZXJzVG9Db250ZXh0KFRleHR1cmVNYXBwZXJM
YXllciogdGV4dHVyZU1hcHBlckxheWVyLCB1aW50NjRfdCB3aW5kb3dIYW5kbGUpIHsgcmV0dXJu
IGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyTGF5ZXJUYXNrKExheWVyUGFpbnQsIHRleHR1cmVN
YXBwZXJMYXllciwgd2luZG93SGFuZGxlKSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8
VGV4dHVyZU1hcHBlckxheWVyVGFzaz4gY3JlYXRlVGVybWluYXRlKFRleHR1cmVNYXBwZXJMYXll
clRocmVhZCogdGhyZWFkKSB7IHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBlckxheWVy
VGFzayhUZXJtaW5hdGVUaHJlYWQsIHRocmVhZCkpOyB9CisKKyAgICAgICAgdm9pZCBwZXJmb3Jt
VGFzaygpOworCisgICAgICAgIHN0YXRpYyBib29sIHNfY29tcG9zaXRpbmc7CisKKyAgICBwcml2
YXRlOgorICAgICAgICBUZXh0dXJlTWFwcGVyTGF5ZXJUYXNrKFR5cGUsIFRleHR1cmVNYXBwZXJM
YXllciosIHVpbnQ2NF90KTsKKyAgICAgICAgVGV4dHVyZU1hcHBlckxheWVyVGFzayhUeXBlLCBU
ZXh0dXJlTWFwcGVyTGF5ZXJUaHJlYWQqKTsKKworICAgICAgICB2b2lkIGNvbXBvc2l0ZUxheWVy
c1RvQ29udGV4dCgpOworCisgICAgICAgIFR5cGUgbV90eXBlOworICAgICAgICBUZXh0dXJlTWFw
cGVyTGF5ZXJUaHJlYWQqIG1fdGhyZWFkOworICAgICAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIG1f
dGV4dHVyZU1hcHBlckxheWVyOworICAgICAgICBzdGF0aWMgT3duUHRyPFdlYkNvcmU6OkdMQ29u
dGV4dD4gc19jb250ZXh0OworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFRleHR1cmVNYXBwZXJMYXllclRhc2tfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllclRocmVhZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxh
eWVyVGhyZWFkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjg0MGJh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJMYXllclRocmVhZC5jcHAKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzIEx0ZC4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVk
ZSAiQXV0b2RyYWluZWRQb29sLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckxheWVyVGFzay5o
IgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJMYXllclRocmVhZC5oIgorI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxUZXh0dXJl
TWFwcGVyTGF5ZXJUaHJlYWQ+IFRleHR1cmVNYXBwZXJMYXllclRocmVhZDo6Y3JlYXRlKCkKK3sK
KyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJMYXllclRocmVhZCk7Cit9CisK
K1RleHR1cmVNYXBwZXJMYXllclRocmVhZDo6VGV4dHVyZU1hcHBlckxheWVyVGhyZWFkKCkKKyAg
ICA6IG1fdGhyZWFkSUQoMCkKK3sKK30KKworVGV4dHVyZU1hcHBlckxheWVyVGhyZWFkOjp+VGV4
dHVyZU1hcHBlckxheWVyVGhyZWFkKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIEFTU0VSVCghbV90aHJlYWRJRCk7Cit9CisKK2Jvb2wgVGV4dHVyZU1hcHBlckxheWVyVGhy
ZWFkOjpzdGFydCgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1f
dGhyZWFkSUQpCisgICAgICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoVGV4dHVyZU1hcHBl
ckxheWVyVGhyZWFkOjp0aHJlYWRFbnRyeVBvaW50Q2FsbGJhY2ssIHRoaXMsICJXZWJLaXQ6IFRl
eHR1cmVNYXBwZXJMYXllciIpOworICAgIHJldHVybiBtX3RocmVhZElEOworfQorCit2b2lkIFRl
eHR1cmVNYXBwZXJMYXllclRocmVhZDo6dGhyZWFkRW50cnlQb2ludENhbGxiYWNrKHZvaWQqIHRo
cmVhZCkKK3sKKyAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyTGF5ZXJUaHJlYWQqPih0aHJl
YWQpLT50aHJlYWRFbnRyeVBvaW50KCk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckxheWVyVGhy
ZWFkOjp0aHJlYWRFbnRyeVBvaW50KCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsK
KworICAgIHdoaWxlIChPd25QdHI8VGV4dHVyZU1hcHBlckxheWVyVGFzaz4gdGFzayA9IG1fcXVl
dWUud2FpdEZvck1lc3NhZ2UoKSkgeworICAgICAgICB0YXNrLT5wZXJmb3JtVGFzaygpOworICAg
IH0KK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXJUaHJlYWQ6OnNjaGVkdWxlVGFzayhQYXNz
T3duUHRyPFRleHR1cmVNYXBwZXJMYXllclRhc2s+IHRhc2spCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWRJRCk7
CisgICAgbV9xdWV1ZS5hcHBlbmQodGFzayk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckxheWVy
VGhyZWFkOjp0ZXJtaW5hdGUoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAg
QVNTRVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkSUQpOworCisgICAgaWYgKCFtX3Ro
cmVhZElEKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3F1ZXVlLmFwcGVuZChUZXh0dXJlTWFw
cGVyTGF5ZXJUYXNrOjpjcmVhdGVUZXJtaW5hdGUodGhpcykpOworICAgIHdhaXRGb3JUaHJlYWRD
b21wbGV0aW9uKG1fdGhyZWFkSUQpOworICAgIEFTU0VSVChtX3F1ZXVlLmtpbGxlZCgpKTsKKyAg
ICBtX3RocmVhZElEID0gMDsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXJUaHJlYWQ6OnBl
cmZvcm1UZXJtaW5hdGUoKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIG1f
cXVldWUua2lsbCgpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyVGhyZWFkLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyVGhyZWFkLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUwMmQzNgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyTGF5ZXJUaHJlYWQuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MgTHRkLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisKKyNpZm5kZWYgVGV4dHVyZU1hcHBlckxheWVyVGhyZWFkX2gKKyNkZWZpbmUg
VGV4dHVyZU1hcHBlckxheWVyVGhyZWFkX2gKKworI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Cisj
aW5jbHVkZSA8d3RmL01lc3NhZ2VRdWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIFRleHR1cmVNYXBwZXJMYXllclRh
c2s7CisKKyAgICBjbGFzcyBUZXh0dXJlTWFwcGVyTGF5ZXJUaHJlYWQgeworICAgICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShUZXh0dXJlTWFwcGVyTGF5ZXJUaHJlYWQpOyBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHR1
cmVNYXBwZXJMYXllclRocmVhZD4gY3JlYXRlKCk7CisgICAgICAgIH5UZXh0dXJlTWFwcGVyTGF5
ZXJUaHJlYWQoKTsKKyAgICAgICAgYm9vbCBzdGFydCgpOworICAgICAgICB2b2lkIHRlcm1pbmF0
ZSgpOworICAgICAgICB2b2lkIHNjaGVkdWxlVGFzayhQYXNzT3duUHRyPFRleHR1cmVNYXBwZXJM
YXllclRhc2s+KTsKKyAgICAgICAgdm9pZCBwZXJmb3JtVGVybWluYXRlKCk7CisKKyAgICBwcml2
YXRlOgorICAgICAgICBUZXh0dXJlTWFwcGVyTGF5ZXJUaHJlYWQoKTsKKyAgICAgICAgc3RhdGlj
IHZvaWQgdGhyZWFkRW50cnlQb2ludENhbGxiYWNrKHZvaWQqKTsKKyAgICAgICAgdm9pZCB0aHJl
YWRFbnRyeVBvaW50KCk7CisKKyAgICAgICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOwor
ICAgICAgICBNZXNzYWdlUXVldWU8VGV4dHVyZU1hcHBlckxheWVyVGFzaz4gbV9xdWV1ZTsKKyAg
ICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBUZXh0dXJlTWFwcGVy
TGF5ZXJUaHJlYWRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHAKaW5kZXggMDdmZTEyOC4uMjFhNzI5YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRy
ZWVIb3N0R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3Rr
L0xheWVyVHJlZUhvc3RHdGsuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJEcmF3
aW5nQXJlYUltcGwuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyTGF5ZXJUYXNrLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2luY2x1ZGUg
IldlYlByb2Nlc3MuaCIKICNpbmNsdWRlIDxHTC9nbC5oPgpAQCAtNjYsNyArNjcsOSBAQCBMYXll
clRyZWVIb3N0R3RrOjpMYXllclRyZWVIb3N0R3RrKFdlYlBhZ2UqIHdlYlBhZ2UpCiAgICAgLCBt
X25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaChmYWxzZSkKICAgICAsIG1fbGF5ZXJGbHVz
aFNjaGVkdWxpbmdFbmFibGVkKHRydWUpCiAgICAgLCBtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNr
SWQoMCkKKyAgICAsIG1fdGhyZWFkKFRleHR1cmVNYXBwZXJMYXllclRocmVhZDo6Y3JlYXRlKCkp
CiB7CisgICAgbV90aHJlYWQtPnN0YXJ0KCk7CiB9CiAKIEdMQ29udGV4dCogTGF5ZXJUcmVlSG9z
dEd0azo6Z2xDb250ZXh0KCkKQEAgLTEyOSw2ICsxMzIsMTAgQEAgTGF5ZXJUcmVlSG9zdEd0azo6
fkxheWVyVHJlZUhvc3RHdGsoKQogewogICAgIEFTU0VSVCghbV9pc1ZhbGlkKTsKICAgICBBU1NF
UlQoIW1fcm9vdExheWVyKTsKKyAgICBpZiAobV90aHJlYWQpIHsKKyAgICAgICAgbV90aHJlYWQt
PnRlcm1pbmF0ZSgpOworICAgICAgICBtX3RocmVhZC5jbGVhcigpOworICAgIH0KICAgICBjYW5j
ZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOwogfQogCkBAIC0yODcsNiArMjk0LDcgQEAgYm9vbCBMYXll
clRyZWVIb3N0R3RrOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKQogCiB2b2lkIExheWVyVHJl
ZUhvc3RHdGs6OmNvbXBvc2l0ZUxheWVyc1RvQ29udGV4dChDb21wb3NpdGVQdXJwb3NlIHB1cnBv
c2UpCiB7CisgICAgR3JhcGhpY0NvbnRleHRMb2NrZXIgbG9ja2VyOwogICAgIEdMQ29udGV4dCog
Y29udGV4dCA9IGdsQ29udGV4dCgpOwogICAgIGlmICghY29udGV4dCB8fCAhY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTMxMSw2ICszMTksMTAgQEAg
dm9pZCBMYXllclRyZWVIb3N0R3RrOjpjb21wb3NpdGVMYXllcnNUb0NvbnRleHQoQ29tcG9zaXRl
UHVycG9zZSBwdXJwb3NlKQogCiB2b2lkIExheWVyVHJlZUhvc3RHdGs6OmZsdXNoQW5kUmVuZGVy
TGF5ZXJzKCkKIHsKKyAgICAvLyBUaGlzIHdpbGwgYXZvaWQgbmV3IGxheW91dHMgd2hpbGUgZmx1
c2hpbmcsIHdoaWNoIG1pZ2h0IGJlIG9rIHdpdGggdGltZXJzIGZpcmluZyBhdCA2MCBGUFM/Cisg
ICAgaWYgKFRleHR1cmVNYXBwZXJMYXllclRhc2s6OnNfY29tcG9zaXRpbmcpCisgICAgICAgIHJl
dHVybjsKKwogICAgIHsKICAgICAgICAgUmVmUHRyPExheWVyVHJlZUhvc3RHdGs+IHByb3RlY3Qo
dGhpcyk7CiAgICAgICAgIG1fd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsKQEAgLTMxOSw2ICsz
MzEsNyBAQCB2b2lkIExheWVyVHJlZUhvc3RHdGs6OmZsdXNoQW5kUmVuZGVyTGF5ZXJzKCkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBHcmFwaGljQ29udGV4dExvY2tlciBsb2Nr
ZXI7CiAgICAgR0xDb250ZXh0KiBjb250ZXh0ID0gZ2xDb250ZXh0KCk7CiAgICAgaWYgKCFjb250
ZXh0IHx8ICFjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMzI2LDggKzMzOSwxNiBAQCB2b2lkIExheWVyVHJlZUhvc3RHdGs6OmZsdXNoQW5kUmVuZGVy
TGF5ZXJzKCkKICAgICBpZiAoIWZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpKQogICAgICAgICBy
ZXR1cm47CiAKKyAgICAvLyBIZXJlIHRvIHN3aXRjaCBvbi9vZmYgdGhyZWFkZWQgY29vcmRpbmF0
ZWQgZ2Z4LgorI2lmIDEKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCht
X3RocmVhZCk7CisKKyAgICBtX3RocmVhZC0+c2NoZWR1bGVUYXNrKFRleHR1cmVNYXBwZXJMYXll
clRhc2s6OmNvbXBvc2l0ZUxheWVyc1RvQ29udGV4dCh0b1RleHR1cmVNYXBwZXJMYXllcihtX3Jv
b3RMYXllci5nZXQoKSksIG1fd2ViUGFnZS0+bmF0aXZlV2luZG93SGFuZGxlKCkpKTsKKyNlbHNl
CiAgICAgLy8gT3VyIG1vZGVsIGlzIHZlcnkgc2ltcGxlLiBXZSBhbHdheXMgY29tcG9zaXRlIGFu
ZCByZW5kZXIgdGhlIHRyZWUgaW1tZWRpYXRlbHkgYWZ0ZXIgdXBkYXRpbmcgaXQuCiAgICAgY29t
cG9zaXRlTGF5ZXJzVG9Db250ZXh0KCk7CisjZW5kaWYKIAogICAgIGlmIChtX25vdGlmeUFmdGVy
U2NoZWR1bGVkTGF5ZXJGbHVzaCkgewogICAgICAgICAvLyBMZXQgdGhlIGRyYXdpbmcgYXJlYSBr
bm93IHRoYXQgd2UndmUgZG9uZSBhIGZsdXNoIG9mIHRoZSBsYXllciBjaGFuZ2VzLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0
R3RrLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhv
c3RHdGsuaAppbmRleCA4NDBhZGE4Li5jNDQ3NDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuaApAQCAtMzIs
NiArMzIsNyBAQAogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKICNpbmNsdWRlICJMYXll
clRyZWVIb3N0LmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckxheWVyLmgiCisjaW5jbHVkZSAi
VGV4dHVyZU1hcHBlckxheWVyVGhyZWFkLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9HTENvbnRleHQu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDbGllbnQuaD4KICNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CkBAIC0xMDMsNiArMTA0LDggQEAgcHJpdmF0ZToKICAgICBPd25QdHI8V2Vi
Q29yZTo6R0xDb250ZXh0PiBtX2NvbnRleHQ7CiAgICAgYm9vbCBtX2xheWVyRmx1c2hTY2hlZHVs
aW5nRW5hYmxlZDsKICAgICB1bnNpZ25lZCBtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQ7CisK
KyAgICBPd25QdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyVGhyZWFkPiBtX3RocmVhZDsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAotLSAKMS43LjEwLjQKCg==
</data>
<flag name="commit-queue"
          id="200947"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>205840</attachid>
            <date>2013-07-01 15:07:01 -0700</date>
            <delta_ts>2013-07-01 15:10:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100341-20130702070455.patch</filename>
            <type>text/plain</type>
            <size>45428</size>
            <attacher name="Gwang Yoon Hwang">yoon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUyMjQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGRmNzAyYmMwNWEyNzA2MzRkYWQzNjlm
N2U3Nzg3YmU0M2U1OWFjNmQuLjc5YWNkYjViMjRjZmRhMGRkMjIxY2IzMzNiNDhkMzVjMTFjZjkw
ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTMtMDYtMDUgIEd3YW5nIFlvb24gSHdhbmcgIDxy
eXVtaWVsQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIFtXSzJdW0dUS10gSW1wbGVtZW50IHRo
cmVhZGVkIGNvbXBvc2l0aW5nIGZvciBXZWJLaXQyIEd0ay4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDM0MQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENPT1JESU5BVEVEX0dSQVBISUNTX0lQQyBzaG91
bGQgYmUgZGVjbGFpcmVkIHRvIHVzZSBDb29yZGluYXRlZAorICAgICAgICBHcmFwaGljcyBpbiBX
ZWJLaXRRVC4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorCiAyMDEzLTA2LTI4ICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIFN0cmlu
Zzo6ZGVwcmVjYXRlZENoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkgYW5kIHJlbGF0ZWQg
Y29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCmluZGV4IDE4ZTliYWRmNDQ2YWRjZWM1NDU5OWNmMTI5ODk3ZGJlN2MzNmQy
N2EuLjc4Mzc4ZWViNDYxNDRjMjMyNmYyYzMyNTRkNzI0OThiMDQ0YTI2ZDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
QEAgLTEsNSArMSw5MCBAQAogMjAxMy0wNi0wNSAgR3dhbmcgWW9vbiBId2FuZyAgPHJ5dW1pZWxA
Y29tcGFueTEwMC5uZXQ+CiAKKyAgICAgICAgW1dLMl1bR1RLXSBJbXBsZW1lbnQgdGhyZWFkZWQg
Y29tcG9zaXRpbmcgZm9yIFdlYktpdDIgR3RrLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwMzQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQnkgaW1wbGVtZW50aW5nIFRocmVhZGVkQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0LCB0aGlzIHBhdGNoIHN1cHBvcnRzCisgICAgICAgIHRocmVhZGVkIGNvbXBv
c2l0b3IgZm9yIFdLMi4gSW4gdGhpcyBpbml0aWFsIGltcGxlbWVudGF0aW9uLCB0aHJlYWRlZAor
ICAgICAgICBjb21wb3NpdG9yIG9ubHkgc3VwcG9ydHMgZml4ZWRMYXlvdXQuCisKKyAgICAgICAg
Q09PUkRJTkFURURfR1JBUEhJQ1NfSVBDIGlzIGludHJvZHVjZWQgdG8gY2xhc3NpZnkgSVBDIHNw
ZWNpZmljIGNvZGVzCisgICAgICAgIGZyb20gQ29vcmRpbmF0ZWQgR3JhcGhpY3MuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLCB0aGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlLgorCisgICAg
ICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTZXR0aW5ncy5jcHA6CisgICAgICAgIChf
V2ViS2l0U2V0dGluZ3NQcml2YXRlOjpfV2ViS2l0U2V0dGluZ3NQcml2YXRlKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHA6CisgICAgICAgICh3ZWJr
aXRXZWJWaWV3QmFzZUNyZWF0ZVdlYlBhZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lmg6CisgICAgICAgICog
VUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3
aW5nQXJlYVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OkRyYXdpbmdBcmVh
UHJveHlJbXBsKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OmVudGVy
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMu
aW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmNvbnRlbnRzU2l6ZUNoYW5n
ZWQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1Ro
cmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6OlRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGUpOgorICAgICAgICAo
V2ViS2l0OjpUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6flRocmVhZGVkQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYktpdDo6VGhyZWFkZWRDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OlRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KToKKyAgICAg
ICAgKFdlYktpdDo6VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjaGVkdWxlTGF5
ZXJGbHVzaCk6CisgICAgICAgIChXZWJLaXQ6OlRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpU
aHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0
U2NoZWR1bGVkTGF5ZXJGbHVzaCk6CisgICAgICAgIChXZWJLaXQ6OlRocmVhZGVkQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcik6CisgICAgICAgIChXZWJL
aXQ6OlRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlKToKKyAgICAg
ICAgKFdlYktpdDo6VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjcm9sbE5vbkNv
bXBvc2l0ZWRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OlRocmVhZGVkQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0Ojpmb3JjZVJlcGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpUaHJlYWRlZENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50QXN5bmMpOgorICAgICAgICAoV2Vi
S2l0OjpUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2l6ZURpZENoYW5nZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXZpY2VP
clBhZ2VTY2FsZUZhY3RvckNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpUaHJlYWRlZENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGlkSW5zdGFsbFBhZ2VPdmVybGF5KToKKyAgICAgICAgKFdl
YktpdDo6VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpZFVuaW5zdGFsbFBhZ2VP
dmVybGF5KToKKyAgICAgICAgKFdlYktpdDo6VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6VGhyZWFk
ZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFBhZ2VPdmVybGF5T3BhY2l0eSk6CisgICAg
ICAgIChXZWJLaXQ6OlRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwYXVzZVJlbmRl
cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpyZXN1bWVSZW5kZXJpbmcpOgorICAgICAgICAoV2ViS2l0OjpUaHJlYWRlZENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6Z3JhcGhpY3NMYXllckZhY3RvcnkpOgorICAgICAgICAoV2ViS2l0OjpU
aHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0QmFja2dyb3VuZENvbG9yKToKKyAg
ICAgICAgKFdlYktpdDo6VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnZpZXdwb3J0
U2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6ZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYktpdDo6
VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpZFNjYWxlRmFjdG9yQ2hhbmdlZCk6
CisgICAgICAgIChXZWJLaXQ6OlRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRO
YXRpdmVDb21wb3NpdGluZ1N1cmZhY2VIYW5kbGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpUaHJlYWRlZENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6cGFnZU92ZXJsYXlTaG91bGRBcHBseUZhZGVXaGVuUGFpbnRpbmcpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OmNy
ZWF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaDoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OldlYlBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp+V2ViUGFnZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldFNpemUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjpzZW5kVmlld3BvcnRBdHRyaWJ1dGVzQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OnBhZ2VEaWRSZXF1ZXN0U2Nyb2xsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6Y2FuSGFuZGxlVXNlckV2ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRpZENv
bXBsZXRlUGFnZVRyYW5zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjptYWluRnJh
bWVEaWRMYXlvdXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkaWRSZWNlaXZlTWVzc2Fn
ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL2d0ay9XZWJQcm9jZXNzTWFpbkd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NNYWluR3RrKToKKworMjAxMy0wNi0wNSAgR3dhbmcgWW9vbiBId2FuZyAgPHJ5dW1pZWxAY29t
cGFueTEwMC5uZXQ+CisKICAgICAgICAgW1dLMl1bR1RLXSBMZXQgRHJhd2luZ0FyZWEgbWFuYWdl
cyBzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nV2luZG93SWQKICAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNzIzMAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9QbGF0Zm9ybS5oIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAppbmRleCAxYzJk
MjM5OGQzOWFjNzllMWM1OWFmMWE1NjIyOThmMWI1OTg1ZWFhLi5jOThiMzc0NzhmNDFiMDg2MGQw
NzA5MjdkMmJkNThiNGZkZjNhZWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKQEAgLTg4MSw2ICs4ODEsNyBAQAog
LyogQ29tcG9zaXRpbmcgb24gdGhlIFVJLXByb2Nlc3MgaW4gV2ViS2l0MiAqLwogI2lmIFVTRSgz
RF9HUkFQSElDUykgJiYgUExBVEZPUk0oUVQpCiAjZGVmaW5lIFdURl9VU0VfQ09PUkRJTkFURURf
R1JBUEhJQ1MgMQorI2RlZmluZSBXVEZfVVNFX0NPT1JESU5BVEVEX0dSQVBISUNTX0lQQyAxCiAj
ZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmls
ZS5hbQppbmRleCA2MjQ3NDExYTgzMWI5ZmViNjUxZmFlZTI2ODc1OGE5MjhhM2VkMDI0Li42NWE5
YWRhYzY0ZmUwOGUwYWFiODI2ZjVlOWM2NWE1MDhkN2RmYTQyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5h
bQpAQCAtMTQyLDYgKzE0Miw3IEBAIGxpYndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1Jf
VkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfQ1BQCiAJLUkkKHNyY2Rp
cikvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlIFwKIAktSSQoc3JjZGlyKS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvYXRrIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcyBcCiAJLUkkKHRvcF9i
dWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0MiBcCiAJLUkkKHRvcF9idWlsZGRpcikvRGVy
aXZlZFNvdXJjZXMvV2ViS2l0Mi9pbmNsdWRlIFwKIAktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVk
U291cmNlcy9XZWJLaXQyL3dlYmtpdDJndGsgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
R05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0K
aW5kZXggYjE1MDE3ZmViOGNkMGM1Zjg4NGE1OGQ5NTkzNTk3YmRhNmEyNzYyZS4uZDdmMTQ0ZGVm
ODAzY2FiYjQ0Mzk5MTg1ZDMzMzViZjRjNjZhNDE4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5s
aXN0LmFtCkBAIC0xMjQzLDExICsxMjQzLDE3IEBAIHdlYmtpdDJfc291cmNlcyArPSBcCiAJU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBcCiAJU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgKIAoraWYgVVNFX1RIUkVBREVEX0NPTVBPU0lUT1IKK3dl
YmtpdDJfc291cmNlcyArPSBcCisgICBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAg
XAorICAgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaAorZWxzZQogaWYgVVNFX1RFWFRV
UkVfTUFQUEVSX0dMCiB3ZWJraXQyX3NvdXJjZXMgKz0gXAogICAgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNwcCBcCiAgICBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuaAogZW5kaWYgIyBF
TkQgVVNFX1RFWFRVUkVfTUFQUEVSX0dMCitlbmRpZgogCiB3ZWJraXQyX3BsdWdpbl9wcm9jZXNz
X2J1aWx0X3NvdXJjZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL1dlYktpdDIvTlBPYmplY3RNZXNz
YWdlUmVjZWl2ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNldHRpbmdzLmNwcAppbmRleCA0Y2U4NDQyYTE1OTNm
NDFjMDIxNzgwMmFlZjE0ZmMwZTQ3OWJiZWFlLi4wMmVhZmE1OTVlMjNmMjhjM2RmNDJmN2M1ZGI3
NTA0YWIwODlkZjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRTZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0U2V0dGluZ3MuY3BwCkBAIC01MSw2ICs1MSwxMCBAQCBzdHJ1Y3QgX1dlYktpdFNl
dHRpbmdzUHJpdmF0ZSB7CiAgICAgICAgIGZhbnRhc3lGb250RmFtaWx5ID0gcHJlZmVyZW5jZXMt
PmZhbnRhc3lGb250RmFtaWx5KCkudXRmOCgpOwogICAgICAgICBwaWN0b2dyYXBoRm9udEZhbWls
eSA9IHByZWZlcmVuY2VzLT5waWN0b2dyYXBoRm9udEZhbWlseSgpLnV0ZjgoKTsKICAgICAgICAg
ZGVmYXVsdENoYXJzZXQgPSBwcmVmZXJlbmNlcy0+ZGVmYXVsdFRleHRFbmNvZGluZ05hbWUoKS51
dGY4KCk7CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCisgICAgICAg
IHByZWZlcmVuY2VzLT5zZXRGb3JjZUNvbXBvc2l0aW5nTW9kZSh0cnVlKTsKKyNlbmRpZgogICAg
IH0KIAogICAgIFJlZlB0cjxXZWJQcmVmZXJlbmNlcz4gcHJlZmVyZW5jZXM7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAK
aW5kZXggZDIyYjdkMzJlYzFhYmY0YjFkNDE0NzAyMjhmNDcxMjRhZTVmZjljNS4uNTJjZDVjNjc2
OTRhMDFkMjIxZmMxZTAxNGEyMGRhMzkzYmQ3ODcwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcApAQCAtOTEwLDYg
KzkxMCwxMCBAQCB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlQ3JlYXRlV2ViUGFnZShXZWJLaXRXZWJW
aWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UsIFdlYkNvbgogICAgIH0KICNlbmRpZgogCisjaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQorICAgIHByaXYtPnBhZ2VQcm94eS0+
c2V0VXNlRml4ZWRMYXlvdXQodHJ1ZSk7CisjZW5kaWYKKwogICAgIC8vIFRoaXMgbXVzdCBoYXBw
ZW4gaGVyZSBpbnN0ZWFkIG9mIHRoZSBpbnN0YW5jZSBpbml0aWFsaXplciwgYmVjYXVzZSB0aGUg
aW5wdXQgbWV0aG9kCiAgICAgLy8gZmlsdGVyIG11c3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIHBhZ2Uu
CiAgICAgcHJpdi0+aW5wdXRNZXRob2RGaWx0ZXIuc2V0V2ViVmlldyh3ZWJraXRXZWJWaWV3QmFz
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHku
aAppbmRleCAyZmIxN2IzZWRhZWZjZWFlMWNhY2FjYTcxZjYyOTUxODJiNzIxMDc5Li4yMjlmYzg0
Y2FhYTgxOTBkY2IyNDM0ZWFkMDQ2YmU0ODlmYzFmMTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgKQEAgLTIxLDcgKzIxLDcgQEAKICNp
Zm5kZWYgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHlfaAogI2RlZmluZSBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eV9oCiAKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisj
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX0lQQykKIAogI2luY2x1ZGUgIkNvb3JkaW5hdGVk
R3JhcGhpY3NBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgpA
QCAtMzcsNiArMzcsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRHJhd2luZ0FyZWFQ
cm94eTsKIAorY2xhc3MgRHJhd2luZ0FyZWFQcm94eTsKKwogY2xhc3MgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHkgOiBwdWJsaWMgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
Q2xpZW50LCBwdWJsaWMgQ29yZUlQQzo6TWVzc2FnZVJlY2VpdmVyIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSk7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CkBAIC03MCw2ICs3Miw2IEBAIHByb3RlY3RlZDoKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CiAKLSNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjZW5k
aWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX0lQQykKIAogI2VuZGlmIC8vIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9EcmF3aW5nQXJlYVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3
aW5nQXJlYVByb3h5LmNwcAppbmRleCA0ZDQ5ZDgxNmM1NDJhN2ZiOTFmYTAxYmQ0ZmZiNTUyMTRi
ODcyYmNlLi4zYjU0MDY3YTQ3MDVmMDRjNzQ3ZThjNjdiZTYyMzhlNDgxMmE4OGVhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwCkBAIC0zMCwxMCAr
MzAsNiBAQAogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQ
cm94eS5oIgogCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgiCi0jZW5kaWYKLQogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNjQsNyArNjAsNyBAQCB2b2lkIERyYXdp
bmdBcmVhUHJveHk6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgSW50U2l6ZSYg
bGF5ZXJQb3NpdGlvbgogICAgIHNpemVEaWRDaGFuZ2UoKTsKIH0KIAotI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfSVBDKQogdm9pZCBE
cmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVWaWV3cG9ydCgpCiB7CiAgICAgbV93ZWJQYWdlUHJveHkt
PnNldFZpZXdOZWVkc0Rpc3BsYXkodmlld3BvcnRWaXNpYmxlUmVjdCgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCmluZGV4IGUyNjBkYmM5NzVhYTc3NjUx
MjU5MjRjNGU0OWU1MTIyNWY5MjA2NTEuLjQ3ZjZiOTcwYmM1MzZjMGNmYmYxOGI0MWZhMDExZWQ4
YjRlMDlmNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJl
YVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHku
aApAQCAtMzYsMTAgKzM2LDEzIEBACiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CiAKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfSVBDKQorI2lu
Y2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgiCisjZW5kaWYKKwogbmFtZXNw
YWNlIFdlYktpdCB7CiAKIGNsYXNzIExheWVyVHJlZUNvbnRleHQ7Ci1jbGFzcyBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTsKIGNsYXNzIFVwZGF0ZUluZm87CiBjbGFzcyBXZWJQYWdlUHJv
eHk7CiAKQEAgLTczLDcgKzc2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjb2xvclNw
YWNlRGlkQ2hhbmdlKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIG1pbmltdW1MYXlvdXRTaXplRGlk
Q2hhbmdlKCkgeyB9CiAKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTX0lQQykKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVmlld3BvcnQo
KTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgdmlld3BvcnRWaXNpYmxlUmVjdCgpIGNv
bnN0IHsgcmV0dXJuIGNvbnRlbnRzUmVjdCgpOyB9CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRS
ZWN0IGNvbnRlbnRzUmVjdCgpIGNvbnN0OwpAQCAtOTIsNyArOTUsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgV2ViQ29yZTo6SW50U2l6ZSBtX2xheWVyUG9zaXRpb247CiAgICAgV2ViQ29yZTo6SW50U2l6
ZSBtX3Njcm9sbE9mZnNldDsKIAotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfSVBDKQogICAgIE93blB0cjxDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eT4gbV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTsKICNlbmRpZgog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUlt
cGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNw
cAppbmRleCAwYTUzOWYzNjViOGRjMmQ2ZDZiZDhhZGY1Mjk4NTQwMWQ4MTc3OGZhLi41MTZiMTZj
M2YwZDBjYWYyZDQ5MTU0ODAwNmIwYmE3ZTYyOWQ5ZWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKQEAgLTM2LDcgKzM2LDcgQEAK
ICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1JlZ2lvbi5o
PgogCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDU19JUEMpCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCIK
ICNlbmRpZgogCkBAIC01OCw3ICs1OCw3IEBAIERyYXdpbmdBcmVhUHJveHlJbXBsOjpEcmF3aW5n
QXJlYVByb3h5SW1wbChXZWJQYWdlUHJveHkqIHdlYlBhZ2VQcm94eSkKICAgICAsIG1faXNCYWNr
aW5nU3RvcmVEaXNjYXJkYWJsZSh0cnVlKQogICAgICwgbV9kaXNjYXJkQmFja2luZ1N0b3JlVGlt
ZXIoUnVuTG9vcDo6Y3VycmVudCgpLCB0aGlzLCAmRHJhd2luZ0FyZWFQcm94eUltcGw6OmRpc2Nh
cmRCYWNraW5nU3RvcmUpCiB7Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDU19JUEMpCiAgICAgLy8gQ29uc3RydWN0IHRoZSBwcm94eSBl
YXJseSB0byBhbGxvdyBtZXNzYWdlcyB0byBiZSBzZW50IHRvIHRoZSB3ZWIgcHJvY2VzcyB3aGls
ZSBBQyBpcyBlbnRlcmVkIHRoZXJlLgogICAgIGlmICh3ZWJQYWdlUHJveHktPnBhZ2VHcm91cCgp
LT5wcmVmZXJlbmNlcygpLT5mb3JjZUNvbXBvc2l0aW5nTW9kZSgpKQogICAgICAgICBtX2Nvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5ID0gYWRvcHRQdHIobmV3IENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5KHRoaXMpKTsKQEAgLTM2NSw3ICszNjUsNyBAQCB2b2lkIERyYXdpbmdBcmVh
UHJveHlJbXBsOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJl
ZUNvbnRleAogICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKICAgICBtX2xheWVyVHJlZUNv
bnRleHQgPSBsYXllclRyZWVDb250ZXh0OwogICAgIG1fd2ViUGFnZVByb3h5LT5lbnRlckFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGxheWVyVHJlZUNvbnRleHQpOwotI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfSVBDKQogICAgIGlm
ICghbV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSkKICAgICAgICAgbV9jb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eSA9IGFkb3B0UHRyKG5ldyBDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eSh0aGlzKSk7CiAjZW5kaWYKQEAgLTM3OCw3ICszNzgsNyBAQCB2b2lkIERyYXdpbmdB
cmVhUHJveHlJbXBsOjpzZXROYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcodWludDY0
X3QgaGFuZGxlKQogfQogI2VuZGlmCiAKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisj
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX0lQQykKIHZvaWQgRHJhd2luZ0FyZWFQcm94eUlt
cGw6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB2aXNp
YmxlQ29udGVudHNSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVj
dG9yKQogewogICAgIGlmIChtX2Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaAppbmRleCBmYTA0
Yjk1NmRhNmZmMjlmODg0Yjk1YWUwNGI0YjliMWY4MjU5MDc0Li40MjhlMThjM2MyNmEyYzZhNWVj
MzRlNTBmYTc3YTU5MTc4ZTY5ZTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
RHJhd2luZ0FyZWFQcm94eUltcGwuaApAQCAtMzksNyArMzksOSBAQCBjbGFzcyBSZWdpb247CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX0lQQykK
IGNsYXNzIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OworI2VuZGlmCiAKIGNsYXNzIERy
YXdpbmdBcmVhUHJveHlJbXBsIDogcHVibGljIERyYXdpbmdBcmVhUHJveHkgewogcHVibGljOgpA
QCAtODYsNyArODgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jik7CiAgICAgdm9pZCBleGl0QWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKICAgICB2b2lkIHVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKTsKLSNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX0lQQykKICAgICB2aXJ0dWFs
IHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHZp
c2libGVDb250ZW50c1JlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHRyYWplY3Rvcnkp
IE9WRVJSSURFOwogI2VuZGlmCiAjZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1BhZ2VDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50
LmgKaW5kZXggOTVmNjY5NjNhYzgzMGZjNmUwNzRmYjBiNzA2N2UyN2E1OWJlNTIyMC4uMTg1Njk3
MDY1MTZlOTc0ODM2ODMzNjVlM2ZkMmJhZGJiMDAzZmQ2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvUGFnZUNsaWVudC5oCkBAIC0xMTYsNyArMTE2LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCB2b2lkIHRvb2xUaXBDaGFuZ2VkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpID0gMDsK
IAotI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NU
T1JFKSAmJiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfSVBDKQogICAgIHZpcnR1YWwgdm9pZCBw
YWdlRGlkUmVxdWVzdFNjcm9sbChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVuZGVyRnJhbWUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY29udGVu
dHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb3ZlcmVkUmVjdCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBwYWdlVHJhbnNpdGlvblZpZXdwb3J0UmVhZHkoKSA9IDA7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDFjNzUyZDM2MmJhODk3M2U2ODVm
OTkyMDJmZDRlMmVhNDA3MzIxODIuLjkwYWQ1Mjg1MjdlNjk5ZDk2OWUxMDcyNDk5ZjJlNjkzOWM2
NjQ3ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC05
Myw3ICs5Myw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9XaW5kb3dGZWF0dXJlcy5oPgogI2luY2x1
ZGUgPHN0ZGlvLmg+CiAKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTX0lQQykKICNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eU1lc3NhZ2VzLmgiCiAjZW5kaWYKIApAQCAtMTE3MSw3ICsxMTcxLDcgQEAgdm9pZCBX
ZWJQYWdlUHJveHk6OmV4ZWN1dGVFZGl0Q29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1l
KQogICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RXhlY3V0ZUVkaXRDb21t
YW5kKGNvbW1hbmROYW1lKSwgbV9wYWdlSUQpOwogfQogICAgIAotI2lmIFVTRShUSUxFRF9CQUNL
SU5HX1NUT1JFKQorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19JUEMpCiB2b2lkIFdlYlBh
Z2VQcm94eTo6Y29tbWl0UGFnZVRyYW5zaXRpb25WaWV3cG9ydCgpCiB7CiAgICAgaWYgKCFpc1Zh
bGlkKCkpCkBAIC0yODM5LDcgKzI4MzksNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cnVuQmVmb3Jl
VW5sb2FkQ29uZmlybVBhbmVsKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdWludDY0X3QgZgogICAg
IHNob3VsZENsb3NlID0gbV91aUNsaWVudC5ydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwodGhp
cywgbWVzc2FnZSwgZnJhbWUpOwogfQogCi0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisj
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX0lQQykKIHZvaWQgV2ViUGFnZVByb3h5OjpwYWdl
RGlkUmVxdWVzdFNjcm9sbChjb25zdCBJbnRQb2ludCYgcG9pbnQpCiB7CiAgICAgbV9wYWdlQ2xp
ZW50LT5wYWdlRGlkUmVxdWVzdFNjcm9sbChwb2ludCk7CkBAIC0yOTQyLDcgKzI5NDIsNyBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqIGRv
d25sb2FkKQogfQogI2VuZGlmIC8vIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShFRkwpIHx8IFBM
QVRGT1JNKEdUSykKIAotI2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShFRkwpCisjaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTX0lQQykKIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDaGFuZ2VD
b250ZW50c1NpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBtX3BhZ2VDbGllbnQtPmRp
ZENoYW5nZUNvbnRlbnRzU2l6ZShzaXplKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaAppbmRleCA1YjEyZmMyZjNlOGE5MmFmZTJmNTE0ZWM4MWRmZmZlNTM0NzcwMzA2Li43
ZjY3ODdkYjA5Mjk3Njk3NWQ2ODNiMjZiYWY4NTgxNmFjZGYwM2M4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0zNjEsNyArMzYxLDcgQEAgcHVibGljOgogICAg
IAogICAgIGJvb2wgbWFpbnRhaW5zSW5hY3RpdmVTZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBt
X21haW50YWluc0luYWN0aXZlU2VsZWN0aW9uOyB9CiAgICAgdm9pZCBzZXRNYWludGFpbnNJbmFj
dGl2ZVNlbGVjdGlvbihib29sKTsKLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkgCisjaWYg
VVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpICYmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19JUEMp
CiAgICAgdm9pZCBkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50
c1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0KTsKICNlbmRpZgogI2lm
IFBMQVRGT1JNKFFUKQpAQCAtNDI2LDcgKzQyNiw3IEBAIHB1YmxpYzoKICNpZiBQTEFURk9STShH
VEspCiAgICAgUGxhdGZvcm1XaWRnZXQgdmlld1dpZGdldCgpOwogI2VuZGlmCi0jaWYgVVNFKFRJ
TEVEX0JBQ0tJTkdfU1RPUkUpCisjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpICYmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDU19JUEMpCiAgICAgdm9pZCBjb21taXRQYWdlVHJhbnNpdGlvblZp
ZXdwb3J0KCk7CiAjZW5kaWYKIApAQCAtODc2LDE1ICs4NzYsMTMgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGNsZWFyTm90aWZpY2F0aW9ucyhjb25zdCBWZWN0b3I8dWludDY0X3Q+JiBub3RpZmljYXRp
b25JRHMpOwogICAgIHZvaWQgZGlkRGVzdHJveU5vdGlmaWNhdGlvbih1aW50NjRfdCBub3RpZmlj
YXRpb25JRCk7CiAKLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICB2b2lkIHBhZ2VE
aWRSZXF1ZXN0U2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7Ci0gICAgdm9pZCBwYWdl
VHJhbnNpdGlvblZpZXdwb3J0UmVhZHkoKTsKLSNlbmRpZgogI2lmIFBMQVRGT1JNKFFUKQogICAg
IHZvaWQgZGlkRmluZFpvb21hYmxlQXJlYShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRG
T1JNKEVGTCkKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfSVBDKQorICAgIHZvaWQgcGFn
ZURpZFJlcXVlc3RTY3JvbGwoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKKyAgICB2b2lkIHBh
Z2VUcmFuc2l0aW9uVmlld3BvcnRSZWFkeSgpOwogICAgIHZvaWQgZGlkQ2hhbmdlQ29udGVudHNT
aXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgppbmRleCA4YzFkZTkwOGNj
ZDY4YzlmNTJkYzAwMGVhOTYxYzUxM2UyNzUxMmMzLi5hM2EwMDk0NDc3MzU5NDRmZDY0MTIwZTY3
NmFjZDgzMzBlNDY1YTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkubWVzc2FnZXMuaW4KQEAgLTczLDEwICs3Myw2IEBAIG1lc3NhZ2VzIC0+IFdlYlBh
Z2VQcm94eSB7CiAgICAgSGFuZGxlSW5wdXRNZXRob2RLZXlkb3duKCkgLT4gKGJvb2wgaGFuZGxl
ZCkKICNlbmRpZgogCi0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgUGFnZURpZFJl
cXVlc3RTY3JvbGwoV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQpCi0gICAgUGFnZVRyYW5zaXRpb25W
aWV3cG9ydFJlYWR5KCkKLSNlbmRpZgogI2lmIFBMQVRGT1JNKFFUKQogICAgIERpZEZpbmRab29t
YWJsZUFyZWEoV2ViQ29yZTo6SW50UG9pbnQgdGFyZ2V0LCBXZWJDb3JlOjpJbnRSZWN0IGFyZWEp
CiAgICAgQXV0aGVudGljYXRpb25SZXF1aXJlZFJlcXVlc3QoV1RGOjpTdHJpbmcgaG9zdG5hbWUs
IFdURjo6U3RyaW5nIHJlYWxtLCBXVEY6OlN0cmluZyBwcmVmaWxsZWRVc2VybmFtZSkgLT4gKFdU
Rjo6U3RyaW5nIHVzZXJuYW1lLCBXVEY6OlN0cmluZyBwYXNzd29yZCkKQEAgLTg0LDcgKzgwLDkg
QEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBQcm94eUF1dGhlbnRpY2F0aW9uUmVx
dWlyZWRSZXF1ZXN0KFdURjo6U3RyaW5nIGhvc3RuYW1lLCB1aW50MTZfdCBwb3J0LCBXVEY6OlN0
cmluZyBwcmVmaWxsZWRVc2VybmFtZSkgLT4gKFdURjo6U3RyaW5nIHVzZXJuYW1lLCBXVEY6OlN0
cmluZyBwYXNzd29yZCkKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVG
TCkKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfSVBDKQorICAgIFBhZ2VEaWRSZXF1ZXN0
U2Nyb2xsKFdlYkNvcmU6OkludFBvaW50IHBvaW50KQorICAgIFBhZ2VUcmFuc2l0aW9uVmlld3Bv
cnRSZWFkeSgpCiAgICAgRGlkQ2hhbmdlQ29udGVudHNTaXplKFdlYkNvcmU6OkludFNpemUgbmV3
U2l6ZSkKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKaW5kZXggY2UxNjAwNmRiNzRm
MjBmOTcyNzRkNGViM2I1NGZmOGFlOGI4MGU4Yy4uOGI1OGI4ZTQ3MjY0ZTdkMjAwMGU3NzIwMTM5
MWEyNjU2ZDI0ODgzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtNDgxLDggKzQ4MSwx
MCBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6Y29udGVudHNTaXplQ2hhbmdlZChGcmFtZSogZnJh
bWUsIGNvbnN0IEludFNpemUmIHNpemUpIGNvbgogICAgIGlmIChtX3BhZ2UtPnVzZUZpeGVkTGF5
b3V0KCkpCiAgICAgICAgIG1fcGFnZS0+ZHJhd2luZ0FyZWEoKS0+bGF5ZXJUcmVlSG9zdCgpLT5z
aXplRGlkQ2hhbmdlKHNpemUpOwogCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX0lQQykK
ICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkQ2hhbmdlQ29udGVu
dHNTaXplKHNpemUpKTsKICNlbmRpZgorI2VuZGlmCiAKICAgICBtX3BhZ2UtPmRyYXdpbmdBcmVh
KCktPm1haW5GcmFtZUNvbnRlbnRTaXplQ2hhbmdlZChzaXplKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFk
ZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJl
ZUhvc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdjYmVlZTZiODcyMmM0YTRmNWM2Y2ZkNDcyMDlkNzc4MzZl
MGY3ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5j
cHAKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQ29tcGFueSAx
MDAsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQorI2luY2x1ZGUgIlRocmVhZGVkQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0LmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUg
IldlYlBhZ2UuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitQYXNzUmVmUHRyPFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiBUaHJl
YWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKFdlYlBhZ2UqIHdlYlBhZ2UpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dCh3ZWJQYWdlKSk7Cit9CisKK1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp+VGhy
ZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QoKQoreworfQorCitUaHJlYWRlZENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QoV2ViUGFn
ZSogd2ViUGFnZSkKKyAgICA6IExheWVyVHJlZUhvc3Qod2ViUGFnZSkKKyAgICAsIG1fZm9yY2VS
ZXBhaW50QXN5bmNDYWxsYmFja0lEKDApCit7CisgICAgbV9jb21wb3NpdG9yID0gVGhyZWFkZWRD
b29yZGluYXRlZENvbXBvc2l0b3I6OmNyZWF0ZSh3ZWJQYWdlLT5jb3JlUGFnZSgpLCB0aGlzLCBt
X3dlYlBhZ2UtPnNpemUoKSk7Cit9CisKK3ZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OnNjaGVkdWxlTGF5ZXJGbHVzaCgpCit7CisgICAgbV9jb21wb3NpdG9yLT5zY2hlZHVs
ZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGJvb2wgbGF5ZXJGbHVzaGluZ0VuYWJs
ZWQpCit7CisgICAgbV9jb21wb3NpdG9yLT5zZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQo
bGF5ZXJGbHVzaGluZ0VuYWJsZWQpOworfQorCit2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJv
b2wgbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKQoreworICAgIG1fY29tcG9zaXRvci0+
c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChub3RpZnlBZnRlclNj
aGVkdWxlZExheWVyRmx1c2gpOworfQorCit2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBn
cmFwaGljc0xheWVyKQoreworICAgIG1fY29tcG9zaXRvci0+c2V0Um9vdENvbXBvc2l0aW5nTGF5
ZXIoZ3JhcGhpY3NMYXllcik7Cit9CisKK3ZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OmludmFsaWRhdGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjcm9sbE5vbkNvbXBvc2l0ZWRDb250
ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIG1fY29tcG9zaXRvci0+
c2Nyb2xsVG8ocmVjdC5sb2NhdGlvbigpKTsKK30KKwordm9pZCBUaHJlYWRlZENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCitib29sIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpmb3JjZVJlcGFpbnRB
c3luYyh1aW50NjRfdCBjYWxsYmFja0lEKQoreworICAgIC8vIFdlIGV4cGVjdCB0aGUgVUkgcHJv
Y2VzcyB0byBub3QgcmVxdWlyZSBhIG5ldyByZXBhaW50IHVudGlsIHRoZSBwcmV2aW91cyBvbmUg
aGFzIGZpbmlzaGVkLgorICAgIEFTU0VSVCghbV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQp
OworICAgIG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEID0gY2FsbGJhY2tJRDsKKyAgICBt
X2NvbXBvc2l0b3ItPnNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzaXplRGlkQ2hhbmdlKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpemUpCit7CisgICAgbV9jb21wb3NpdG9yLT5jb250
ZW50c1NpemVDaGFuZ2VkKG5ld1NpemUpOworCisgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikK
KyAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRTaXplKG5ld1NpemUpOworfQorCit2b2lk
IFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXZpY2VPclBhZ2VTY2FsZUZhY3Rv
ckNoYW5nZWQoKQoreworICAgIG1fY29tcG9zaXRvci0+ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JD
aGFuZ2VkKCk7CisKKyAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQorICAgICAgICBtX3BhZ2VP
dmVybGF5TGF5ZXItPmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOworfQorCit2b2lk
IFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaWRJbnN0YWxsUGFnZU92ZXJsYXko
UGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpZFVuaW5zdGFsbFBhZ2VP
dmVybGF5KFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRQYWdlT3Zl
cmxheU5lZWRzRGlzcGxheShQYWdlT3ZlcmxheSosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJl
Y3QpCit7CisgICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXllcik7CisgICAgbV9wYWdlT3Zlcmxh
eUxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgc2NoZWR1bGVMYXllckZs
dXNoKCk7Cit9CisKK3ZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFBh
Z2VPdmVybGF5T3BhY2l0eShQYWdlT3ZlcmxheSosIGZsb2F0IHZhbHVlKQoreworICAgIEFTU0VS
VChtX3BhZ2VPdmVybGF5TGF5ZXIpOworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0T3BhY2l0
eSh2YWx1ZSk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgVGhyZWFkZWRD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnBhdXNlUmVuZGVyaW5nKCkKK3sKKyAgICBtX2NvbXBv
c2l0b3ItPnBhdXNlUmVuZGVyaW5nKCk7Cit9CisKK3ZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OnJlc3VtZVJlbmRlcmluZygpCit7CisgICAgbV9jb21wb3NpdG9yLT5yZXN1
bWVSZW5kZXJpbmcoKTsKK30KKworR3JhcGhpY3NMYXllckZhY3RvcnkqIFRocmVhZGVkQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpncmFwaGljc0xheWVyRmFjdG9yeSgpCit7CisgICAgcmV0dXJu
IG1fY29tcG9zaXRvci0+Z3JhcGhpY3NMYXllckZhY3RvcnkoKTsKK30KKwordm9pZCBUaHJlYWRl
ZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNv
cmU6OkNvbG9yJiBjb2xvcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFRo
cmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp2aWV3cG9ydFNpemVDaGFuZ2VkKGNvbnN0
IFdlYkNvcmU6OkludFNpemUmIHNpemUpCit7CisgICAgbV9jb21wb3NpdG9yLT52aWV3cG9ydFNp
emVDaGFuZ2VkKHNpemUpOworfQorCit2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRB
dHRyaWJ1dGVzJiBhdHRyKQoreworICAgIG1fY29tcG9zaXRvci0+dmlld3BvcnRBdHRyaWJ1dGVD
aGFuZ2VkKGF0dHIpOworfQorCit2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpkaWRTY2FsZUZhY3RvckNoYW5nZWQoZmxvYXQgc2NhbGUsIGNvbnN0IEludFBvaW50JiBvcmln
aW4pCit7CisgICAgbV93ZWJQYWdlLT5zY2FsZVBhZ2Uoc2NhbGUsIG9yaWdpbik7Cit9CisKKyNp
ZiBQTEFURk9STShHVEspCit2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpz
ZXROYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcodWludDY0X3QgaGFuZGxlKQorewor
ICAgIG1fbGF5ZXJUcmVlQ29udGV4dC53aW5kb3dIYW5kbGUgPSBoYW5kbGU7CisgICAgbV9jb21w
b3NpdG9yLT5zZXROYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcoaGFuZGxlKTsKK30K
KyNlbmRpZgorCitib29sIExheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZygpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRD
b29yZGluYXRlZExheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYWY0N2Q0MWI3MDUxN2FjZDViM2ZhY2M5M2QyZTlkZDcwYzA2Y2ViOAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKQEAgLTAs
MCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQ29tcGFueSAxMDAsIEluYy4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdF9oCisj
ZGVmaW5lIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0X2gKKworI2lmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDU19USFJFQURFRCkKKworI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQu
aCIKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbnRQb2lu
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGhyZWFkZWRDb29yZGluYXRlZENvbXBvc2l0b3IuaD4K
KyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdy
YXBoaWNzTGF5ZXJGYWN0b3J5OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2Vi
UGFnZTsKKworY2xhc3MgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QgOiBwdWJsaWMg
TGF5ZXJUcmVlSG9zdCwgcHVibGljIFdlYkNvcmU6OlRocmVhZGVkQ29vcmRpbmF0ZWRDb21wb3Np
dG9yOjpDbGllbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRocmVhZGVkQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0PiBjcmVhdGUoV2ViUGFnZSopOworICAgIHZpcnR1YWwgflRo
cmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KCk7CisKKyAgICB2aXJ0dWFsIGNvbnN0IExh
eWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQoKSBPVkVSUklERSB7IHJldHVybiBtX2xh
eWVyVHJlZUNvbnRleHQ7IH07CisKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVMYXllckZsdXNo
KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5h
YmxlZChib29sKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvdWxkTm90aWZ5QWZ0
ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChib29sKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoKSBPVkVSUklERSB7
IH07CisgICAgdmlydHVhbCB2b2lkIHNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5
SW5SZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBPVkVSUklERSB7IH07CisgICAgdmlydHVh
bCB2b2lkIHNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBzY3JvbGxSZWN0KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZm9yY2VSZXBhaW50KCkg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGZvcmNlUmVwYWludEFzeW5jKHVpbnQ2NF90IC8q
Y2FsbGJhY2tJRCovKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2l6ZURpZENoYW5nZShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkSW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KikgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KFBhZ2VP
dmVybGF5KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBzZXRQYWdlT3ZlcmxheU9wYWNpdHkoUGFnZU92ZXJsYXkqLCBmbG9hdCkgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBib29sIHBhZ2VPdmVybGF5U2hvdWxkQXBwbHlGYWRlV2hlblBhaW50aW5n
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgdm9pZCBwYXVzZVJlbmRl
cmluZygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZXN1bWVSZW5kZXJpbmcoKSBPVkVS
UklERTsKKworICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIGdyYXBo
aWNzTGF5ZXJGYWN0b3J5KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldEJhY2tncm91
bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBwYWdlQmFja2dyb3VuZFRyYW5zcGFyZW5jeUNoYW5nZWQoKSBPVkVSUklERSB7IH07CisKKyAg
ICB2aXJ0dWFsIHZvaWQgdmlld3BvcnRTaXplQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGll
cyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmKSBPVkVSUklERTsKKworI2lmIFBM
QVRGT1JNKEdUSykKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNv
bXBvc2l0aW5nKHVpbnQ2NF90KSBPVkVSUklERTsKKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAg
ZXhwbGljaXQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QoV2ViUGFnZSopOworCitw
cml2YXRlOgorCisgICAgdmlydHVhbCB2b2lkIGRpZFNjYWxlRmFjdG9yQ2hhbmdlZChmbG9hdCBz
Y2FsZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIG9yaWdpbikgT1ZFUlJJREU7CisKKyAgICBM
YXllclRyZWVDb250ZXh0IG1fbGF5ZXJUcmVlQ29udGV4dDsKKyAgICB1aW50NjRfdCBtX2ZvcmNl
UmVwYWludEFzeW5jQ2FsbGJhY2tJRDsKKworICAgIFdlYkNvcmU6OkludFBvaW50IG1fcHJldlNj
cm9sbFBvc2l0aW9uOworCisgICAgLy8gVGhlIHBhZ2Ugb3ZlcmxheSBsYXllci4gV2lsbCBiZSBu
dWxsIGlmIHRoZXJlJ3Mgbm8gcGFnZSBvdmVybGF5LgorICAgIE93blB0cjxXZWJDb3JlOjpHcmFw
aGljc0xheWVyPiBtX3BhZ2VPdmVybGF5TGF5ZXI7CisgICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBt
X3BhZ2VPdmVybGF5OworCisgICAgT3duUHRyPFdlYkNvcmU6OlRocmVhZGVkQ29vcmRpbmF0ZWRD
b21wb3NpdG9yPiBtX2NvbXBvc2l0b3I7CisKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQorCisjZW5kaWYg
Ly8gVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3RfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaAppbmRleCA5Njk4NDA4Yjk5YzI4OGQ0
Y2NiYzE5ZmQ2NDA1N2NlZmNjNDVmYTJlLi5mMjczY2RjOGJiZWU4MGNlYmI0M2FjYzcyN2VmYTZl
OGFjMTFjOGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
RHJhd2luZ0FyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJh
d2luZ0FyZWEuaApAQCAtOTcsNyArOTcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNj
aGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCkgPSAwOwogI2VuZGlmCiAKLSNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX0lQQykKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdE1lc3NhZ2Uo
Q29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJikgPSAwOwogI2Vu
ZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3
aW5nQXJlYUltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdp
bmdBcmVhSW1wbC5jcHAKaW5kZXggMjBjZTI2MjFhYzkxNWVlNmU3MTUyODZiMGMwMWFmZjU5MjEy
ZDVmYS4uMTUwYzhiYTJmNDZjNGRhM2FiN2ZlNzVkOWI5YTBmMDFhNzg4NTE2OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5j
cHAKQEAgLTc0Niw3ICs3NDYsNyBAQCB2b2lkIERyYXdpbmdBcmVhSW1wbDo6ZGlzcGxheShVcGRh
dGVJbmZvJiB1cGRhdGVJbmZvKQogICAgIG1fZGlzcGxheVRpbWVyLnN0b3AoKTsKIH0KIAotI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Nf
SVBDKQogdm9pZCBEcmF3aW5nQXJlYUltcGw6OmRpZFJlY2VpdmVDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1l
c3NhZ2VEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCkBAIC03
NzUsNiArNzc1LDggQEAgdm9pZCBEcmF3aW5nQXJlYUltcGw6OnNldExheWVySG9zdGluZ01vZGUo
dWludDMyX3Qgb3BhcXVlTGF5ZXJIb3N0aW5nTW9kZSkKIHZvaWQgRHJhd2luZ0FyZWFJbXBsOjpz
ZXROYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcodWludDY0X3QgaGFuZGxlKQogewog
ICAgIG1fbmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nID0gaGFuZGxlOworICAgIGlm
IChtX2xheWVyVHJlZUhvc3QpCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0TmF0aXZlU3Vy
ZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKGhhbmRsZSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oCmluZGV4
IDc4OWIwZTRhNTU3NDdkMzIzMTUzNjY2NjI2MjZiMDljMmE4MDQwZTAuLmNhMzNmOTVjZmRlZDJk
ZTBjOGQ1NWE0YmRmN2Y0MWM3NDc4YzgzYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmgKQEAgLTg0LDcgKzg0LDcgQEAgcHJp
dmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0
aW5nKHVpbnQ2NF90KSBPVkVSUklERTsKICNlbmRpZgogCi0jaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19JUEMpCiAgICAgdmlydHVhbCB2
b2lkIGRpZFJlY2VpdmVDb29yZGluYXRlZExheWVyVHJlZUhvc3RNZXNzYWdlKENvcmVJUEM6OkNv
bm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYpOwogI2VuZGlmCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcAppbmRl
eCBhNGExMDM5ODRiZjRiMzViM2VmNmE0NGVkNGI3N2RkODU4NWE0ZDYxLi4yZGE0ZmQ0NjIwZjYy
YWI0MTY0ZmRkOTgzN2I3OTFhYWJkMTA1NDliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwCkBAIC0zMCwxMCArMzAsMTQgQEAK
ICNpbmNsdWRlICJMYXllclRyZWVIb3N0TWFjLmgiCiAjZW5kaWYKIAotI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfSVBDKQogI2luY2x1
ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oIgogI2VuZGlmCiAKKyNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCisjaW5jbHVkZSAiVGhyZWFkZWRDb29yZGluYXRlZExh
eWVyVHJlZUhvc3QuaCIKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oR1RLKSAmJiBVU0UoVEVYVFVS
RV9NQVBQRVJfR0wpCiAjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdEd0ay5oIgogI2VuZGlmCkBAIC00
Niw4ICs1MCwxMCBAQCBQYXNzUmVmUHRyPExheWVyVHJlZUhvc3Q+IExheWVyVHJlZUhvc3Q6OmNy
ZWF0ZShXZWJQYWdlKiB3ZWJQYWdlKQogewogI2lmIFBMQVRGT1JNKE1BQykKICAgICByZXR1cm4g
TGF5ZXJUcmVlSG9zdE1hYzo6Y3JlYXRlKHdlYlBhZ2UpOwotI2VsaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQorI2VsaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX0lQQykKICAgICByZXR1
cm4gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGUod2ViUGFnZSk7CisjZWxpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCisgICAgcmV0dXJuIFRocmVhZGVkQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGUod2ViUGFnZSk7CiAjZWxpZiBQTEFURk9STShHVEsp
ICYmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKICAgICByZXR1cm4gTGF5ZXJUcmVlSG9zdEd0azo6
Y3JlYXRlKHdlYlBhZ2UpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDJmYWQyZDEzY2YyNWQ4MzZlY2ZhYmEzYWJm
ZTZhZjg5ODAyNDBhMjYuLjUyZjA2ZTgwMTE1NTdkM2RmNDE5NTJmODFlNGJiZWU0NzY2NTE5MGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVI
b3N0LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhv
c3QuaApAQCAtNDMsNiArNDMsMTAgQEAgY2xhc3MgSW50UmVjdDsKIGNsYXNzIEludFNpemU7CiBj
bGFzcyBHcmFwaGljc0xheWVyOwogY2xhc3MgR3JhcGhpY3NMYXllckZhY3Rvcnk7CisKKyNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCitjbGFzcyBWaWV3cG9ydEF0dHJpYnV0
ZXM7CisjZW5kaWYKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC04NiwxNSArOTAsMjQgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIGdyYXBo
aWNzTGF5ZXJGYWN0b3J5KCkgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNr
Z3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImKSB7IH0KIAotI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfSVBDKQogICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0TWVzc2FnZShDb3Jl
SVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKSA9IDA7CiAjZW5kaWYK
IAorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkKKyAgICB2aXJ0dWFsIHZv
aWQgdmlld3BvcnRTaXplQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMoY29uc3QgV2ViQ29yZTo6
Vmlld3BvcnRBdHRyaWJ1dGVzJikgPSAwOworI2VuZGlmCisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQ
RVJfR0wpICYmIFBMQVRGT1JNKEdUSykKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmF0aXZlU3VyZmFj
ZUhhbmRsZUZvckNvbXBvc2l0aW5nKHVpbnQ2NF90KSB7IH0KKyNlbmRpZgorCiAjaWYgUExBVEZP
Uk0oTUFDKQogICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckhvc3RpbmdNb2RlKExheWVySG9zdGlu
Z01vZGUpIHsgfQogI2VuZGlmCiAKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpICYmIEVO
QUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1NfSVBDKSAmJiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCiAgICAgdmlydHVhbCB2
b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgPSAwOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCA3MWNkNjY3NDUxNTdlZjdlOWFl
ZTM2MDIzNDk5NzdmZGRmOTk0NmQ2Li4yNDEyOGIwOTYxZWY2YzdmMWQ1MGQzYTY3ZmFlOWUxYzcy
YmZjNjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCkBAIC0xODksNyArMTg5LDcgQEAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZExlYWtDb3Vu
dGVyLmg+CiAjZW5kaWYKIAotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1NfSVBDKQogI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdE1lc3NhZ2VzLmgiCiAjZW5kaWYKIApAQCAtMzk4LDcgKzM5OCw3IEBAIFdlYlBhZ2U6Oldl
YlBhZ2UodWludDY0X3QgcGFnZUlELCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJiBw
YXJhbWV0ZXJzKQogCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGRvbmUgaW4gdGhlIG9i
amVjdCBjb25zdHJ1Y3RvcnMsIGFuZCB0aGUgb2JqZWN0cyB0aGVtc2VsdmVzIHNob3VsZCBiZSBt
ZXNzYWdlIHJlY2VpdmVycy4KICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5hZGRNZXNzYWdlUmVj
ZWl2ZXIoTWVzc2FnZXM6OkRyYXdpbmdBcmVhOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFn
ZUlELCB0aGlzKTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTX0lQQykKICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5hZGRNZXNzYWdl
UmVjZWl2ZXIoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCBtX3BhZ2VJRCwgdGhpcyk7CiAjZW5kaWYKICNpZiBFTkFCTEUoSU5TUEVDVE9S
KQpAQCAtNDM0LDcgKzQzNCw3IEBAIFdlYlBhZ2U6On5XZWJQYWdlKCkKIAogICAgIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCBiZSBkb25lIGluIHRoZSBvYmplY3QgZGVzdHJ1Y3RvcnMsIGFuZCB0aGUg
b2JqZWN0cyB0aGVtc2VsdmVzIHNob3VsZCBiZSBtZXNzYWdlIHJlY2VpdmVycy4KICAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRyYXdpbmdB
cmVhOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZUlEKTsKLSNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX0lQQykKICAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCk7CiAjZW5k
aWYKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQpAQCAtMTA4Miw4ICsxMDgyLDEzIEBAIHZvaWQgV2Vi
UGFnZTo6c2V0U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiB2aWV3U2l6ZSkKICAgICBtX3Zp
ZXdTaXplID0gdmlld1NpemU7CiAKICNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICBp
ZiAodmlldy0+dXNlRml4ZWRMYXlvdXQoKSkKKyAgICBpZiAodmlldy0+dXNlRml4ZWRMYXlvdXQo
KSkgewogICAgICAgICBzZW5kVmlld3BvcnRBdHRyaWJ1dGVzQ2hhbmdlZCgpOworI2lmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkKKyAgICAgICAgaWYgKG1fZHJhd2luZ0FyZWEt
PmxheWVyVHJlZUhvc3QoKSkKKyAgICAgICAgICAgIG1fZHJhd2luZ0FyZWEtPmxheWVyVHJlZUhv
c3QoKS0+dmlld3BvcnRTaXplQ2hhbmdlZCh2aWV3U2l6ZSk7CisjZW5kaWYKKyAgICB9CiAjZW5k
aWYKIH0KIApAQCAtMTEzNyw3ICsxMTQyLDEyIEBAIHZvaWQgV2ViUGFnZTo6c2VuZFZpZXdwb3J0
QXR0cmlidXRlc0NoYW5nZWQoKQogICAgIC8vIFRoaXMgYWxzbyB0YWtlcyBjYXJlIG9mIHRoZSBy
ZWxheW91dC4KICAgICBzZXRGaXhlZExheW91dFNpemUocm91bmRlZEludFNpemUoYXR0ci5sYXlv
dXRTaXplKSk7CiAKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfSVBDKQogICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGF0dHIp
KTsKKyNlbGlmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkKKyAgICBpZiAobV9k
cmF3aW5nQXJlYS0+bGF5ZXJUcmVlSG9zdCgpKQorICAgICAgICBtX2RyYXdpbmdBcmVhLT5sYXll
clRyZWVIb3N0KCktPmRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyhhdHRyKTsKKyNlbmRpZgog
fQogI2VuZGlmCiAKQEAgLTE1NTIsNyArMTU2MiwxMSBAQCB2b2lkIFdlYlBhZ2U6OnBhZ2VEaWRT
Y3JvbGwoKQogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQogdm9pZCBXZWJQYWdlOjpwYWdl
RGlkUmVxdWVzdFNjcm9sbChjb25zdCBJbnRQb2ludCYgcG9pbnQpCiB7CisjaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTX0lQQykKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlBh
Z2VEaWRSZXF1ZXN0U2Nyb2xsKHBvaW50KSk7CisjZWxpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1NfVEhSRUFERUQpCisgICAgZHJhd2luZ0FyZWEoKS0+c2Nyb2xsKEludFJlY3QocG9pbnQsIElu
dFNpemUoKSksIEludFNpemUoKSk7CisjZW5kaWYKIH0KICNlbmRpZgogCkBAIC0yMDk4LDcgKzIx
MTIsNyBAQCB2b2lkIFdlYlBhZ2U6OmRpZFVwZGF0ZUluV2luZG93U3RhdGVUaW1lckZpcmVkKCkK
IAogaW5saW5lIGJvb2wgV2ViUGFnZTo6Y2FuSGFuZGxlVXNlckV2ZW50cygpIGNvbnN0CiB7Ci0j
aWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
X0lQQykKICAgICAvLyBTaG91bGQgYXBwbHkgb25seSBpZiB0aGUgYXJlYSB3YXMgZnJvemVuIGJ5
IGRpZFN0YXJ0UGFnZVRyYW5zaXRpb24oKS4KICAgICByZXR1cm4gIW1fZHJhd2luZ0FyZWEtPmxh
eWVyVHJlZVN0YXRlSXNGcm96ZW4oKTsKICNlbmRpZgpAQCAtMjE0OCw3ICsyMTYyLDcgQEAgdm9p
ZCBXZWJQYWdlOjpkaWRTdGFydFBhZ2VUcmFuc2l0aW9uKCkKIAogdm9pZCBXZWJQYWdlOjpkaWRD
b21wbGV0ZVBhZ2VUcmFuc2l0aW9uKCkKIHsKLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkK
KyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfSVBDKQogICAgIGlmIChtX21haW5GcmFtZS0+
Y29yZUZyYW1lKCktPnZpZXcoKS0+ZGVsZWdhdGVzU2Nyb2xsaW5nKCkpCiAgICAgICAgIC8vIFdh
aXQgdW50aWwgdGhlIFVJIHByb2Nlc3Mgc2VudCB1cyB0aGUgdmlzaWJsZSByZWN0IGl0IHdhbnRz
IHJlbmRlcmVkLgogICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlBhZ2VUcmFu
c2l0aW9uVmlld3BvcnRSZWFkeSgpKTsKQEAgLTMwNDMsNyArMzA1Nyw3IEBAIHZvaWQgV2ViUGFn
ZTo6bWFpbkZyYW1lRGlkTGF5b3V0KCkKICAgICAgICAgbV9jYWNoZWRQYWdlQ291bnQgPSBwYWdl
Q291bnQ7CiAgICAgfQogCi0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpICYmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfSVBDKQog
ICAgIGlmIChtX2RyYXdpbmdBcmVhICYmIG1fZHJhd2luZ0FyZWEtPmxheWVyVHJlZUhvc3QoKSkg
ewogICAgICAgICBkb3VibGUgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGE7CiAgICAgICAgIG1fbWFp
bkZyYW1lLT5nZXREb2N1bWVudEJhY2tncm91bmRDb2xvcigmcmVkLCAmZ3JlZW4sICZibHVlLCAm
YWxwaGEpOwpAQCAtMzE0Nyw3ICszMTYxLDcgQEAgdm9pZCBXZWJQYWdlOjpkaWRSZWNlaXZlTWVz
c2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBDb3JlSVBDOjpNZXNzYWcKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKSAmJiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
X0lQQykKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6
OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAg
ICAgIGlmIChtX2RyYXdpbmdBcmVhKQogICAgICAgICAgICAgbV9kcmF3aW5nQXJlYS0+ZGlkUmVj
ZWl2ZUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7
CkBAIC0zNjQ4LDcgKzM2NjIsNyBAQCBib29sIFdlYlBhZ2U6OmNhbkhhbmRsZVJlcXVlc3QoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogICAgIHJldHVybiBwbGF0Zm9y
bUNhbkhhbmRsZVJlcXVlc3QocmVxdWVzdCk7CiB9CiAKLSNpZiBVU0UoVElMRURfQkFDS0lOR19T
VE9SRSkKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfSVBDKQogdm9pZCBXZWJQYWdlOjpj
b21taXRQYWdlVHJhbnNpdGlvblZpZXdwb3J0KCkKIHsKICAgICBtX2RyYXdpbmdBcmVhLT5zZXRM
YXllclRyZWVTdGF0ZUlzRnJvemVuKGZhbHNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IGY0M2ZkNzM3ZWY0YTc5ZDEzYmQ4OTllYmM4MTBhOTZi
MmNlMGIxZmMuLjMyYmYyMTkxZTFjMWY2YTk3NGZmMDMzNzAxNDU0Zjk4MjgxYjQ0N2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtNDUwLDcgKzQ1
MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRoZW1lUGF0aChjb25zdCBTdHJpbmcmKTsKICNl
bmRpZgogCi0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisjaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTX0lQQykKICAgICB2b2lkIGNvbW1pdFBhZ2VUcmFuc2l0aW9uVmlld3BvcnQoKTsK
ICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLm1lc3NhZ2VzLmluCmluZGV4IDU5MTc5YzRjOGQ0OWMzYzViOGQ1M2IzYzdjYmI4MWMx
YWIwNzA1NTkuLjY0MTRjNDRlMjg2NTBhN2VlNzBhMTBiMWY2NjA3ZDM1OWY3NDdmMDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2Vz
LmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3Nh
Z2VzLmluCkBAIC0yNDksNyArMjQ5LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNl
aXZlciB7CiAgICAgU2V0VGhlbWVQYXRoKFdURjo6U3RyaW5nIHRoZW1lUGF0aCkKICNlbmRpZgog
Ci0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTX0lQQykKICAgICBDb21taXRQYWdlVHJhbnNpdGlvblZpZXdwb3J0KCkKICNlbmRpZgogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJQcm9jZXNzTWFpbkd0
ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJQcm9jZXNzTWFpbkd0ay5j
cHAKaW5kZXggNTRjOGRmM2UwY2JjZWM3NWQ3MDkyYzJiMjQyNmFjN2ZmNTFjNGVmOC4uN2Y3MzQ2
ZjM5ZjEyZGI0OWU3ZGM1OTIwZTQ3M2EwZDE2M2ZjODlmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc01haW5HdGsuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NNYWluR3RrLmNwcApAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1J1bkxvb3AuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dlYlByb2Nlc3MuaD4KKyNpbmNsdWRl
IDxYMTEvWGxpYi5oPgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KICNpbmNsdWRlIDxsaWJpbnRsLmg+
CiAjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CkBAIC01NCw2ICs1NSw3IEBAIFdLX0VYUE9SVCBp
bnQgV2ViUHJvY2Vzc01haW5HdGsoaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICAgICAgc2xl
ZXAoMzApOwogI2VuZGlmCiAKKyAgICBYSW5pdFRocmVhZHMoKTsKICAgICBndGtfaW5pdCgmYXJn
YywgJmFyZ3YpOwogCiAgICAgYmluZHRleHRkb21haW4oR0VUVEVYVF9QQUNLQUdFLCBQQUNLQUdF
X0xPQ0FMRV9ESVIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2Ug
Yi9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQppbmRleCA1YWRiNTQ5OTI4OTAyZGNmMjY0
MDY2M2VmNGMzMmQ1YTg2OTY3MWRiLi4wYTJjNTkxMGJhYmFhMWY2MmE3N2VkZWVjNTE2MDZlZTAy
MTA2MTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQorKysgYi9T
b3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQpAQCAtMTg0LDYgKzE4NCw3IEBAIGlmIChXVEZf
VVNFX1RJTEVEX0JBQ0tJTkdfU1RPUkUpCiAgICAgYWRkX2RlZmluaXRpb25zKC1EV1RGX1VTRV9B
Q0NFTEVSQVRFRF9DT01QT1NJVElORz0xKQogCiAgICAgYWRkX2RlZmluaXRpb25zKC1EV1RGX1VT
RV9DT09SRElOQVRFRF9HUkFQSElDUz0xKQorICAgIGFkZF9kZWZpbml0aW9ucygtRFdURl9VU0Vf
Q09PUkRJTkFURURfR1JBUEhJQ1NfSVBDPTEpCiAKICAgICBzZXQoV1RGX1VTRV9URVhUVVJFX01B
UFBFUiAxKQogICAgIGFkZF9kZWZpbml0aW9ucygtRFdURl9VU0VfVEVYVFVSRV9NQVBQRVI9MSkK
ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAwYzBmYzc5NTJlYjUzNjhi
MTcyNDA1OTRlNjE5YjY0Y2I2MDQ5YTA4Li5hYmNkMGE3NmY4YzU1M2Y1OWJlY2VlNDExNDgwMDFk
MTdkY2NmMzg5IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDUg
KzEsMTcgQEAKIDIwMTMtMDYtMDUgIEd3YW5nIFlvb24gSHdhbmcgIDxyeXVtaWVsQGNvbXBhbnkx
MDAubmV0PgogCisgICAgICAgIFtXSzJdW0dUS10gSW1wbGVtZW50IHRocmVhZGVkIGNvbXBvc2l0
aW5nIGZvciBXZWJLaXQyIEd0ay4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwMDM0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIENPT1JESU5BVEVEX0dSQVBISUNTX0lQQyBzaG91bGQgYmUgZGVjbGFpcmVk
IHRvIHVzZSBDb29yZGluYXRlZAorICAgICAgICBHcmFwaGljcyBpbiBXZWJLaXRFRkwuCisKKyAg
ICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZToKKworMjAxMy0wNi0wNSAgR3dh
bmcgWW9vbiBId2FuZyAgPHJ5dW1pZWxAY29tcGFueTEwMC5uZXQ+CisKICAgICAgICAgW1dLMV1b
R1RLXSBBZGQgc3VwcG9ydCB0byB1c2UgVGhyZWFkZWQgQ29vcmRpbmF0ZWQgR3JhcGhpY3MuCiAg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTcyMjcKIAo=
</data>
<flag name="commit-queue"
          id="227454"
          type_id="3"
          status="-"
          setter="yoon"
    />
          </attachment>
      

    </bug>

</bugzilla>