<?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>34683</bug_id>
          
          <creation_ts>2010-02-06 13:51:33 -0800</creation_ts>
          <short_desc>[Haiku] Implement Path, Gradient and flesh out GraphicsContextHaiku</short_desc>
          <delta_ts>2024-04-19 09:03:59 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Other</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Stephan Aßmus">superstippi</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ahmad.saleem792</cc>
    
    <cc>commit-queue</cc>
    
    <cc>leavengood</cc>
    
    <cc>simon.maxime</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>188465</commentid>
    <comment_count>0</comment_count>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-06 13:51:33 -0800</bug_when>
    <thetext>The patch unfortunately cannot be broken into smaller pieces.

PathHaiku was irritatingly implemented as BRegion, while BRegion has nothing to
do with paths. BShape is the way to go. I&apos;ve implemented the subset of
functionality that can be implemented using BShape.

PathGradient was previously not implemented at all. I&apos;ve taken the Qt
implementation as a reference and websites using gradients seem to render fine.

GraphicsContextHaiku was not implementing a great deal of functionality. The
patch implements

 * partial support for paths and gradients
 * more clipping methods
 * support for round rects
 * support for transparency layers
 * support for translating the context, as needed for scrolling
 * changes the strokeArc() method to produce beautiful arcs as needed for box
elements
   without the need to implement clipping paths.
 * implements filling rects
 * implements rounding to device pixels
 * a few missing new methods that broke the build on Haiku
 * fixes a few warnings

--</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188466</commentid>
    <comment_count>1</comment_count>
      <attachid>48295</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-06 13:53:48 -0800</bug_when>
    <thetext>Created attachment 48295
Implements Path and Gradient support for Haiku, fleshes out GraphicsContextHaiku

Patch against r54275.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188471</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-06 14:12:07 -0800</bug_when>
    <thetext>Attachment 48295 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/240826</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188473</commentid>
    <comment_count>3</comment_count>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-06 14:19:40 -0800</bug_when>
    <thetext>The Qt build exited with an internal compiler error. This patch doesn&apos;t touch Qt code, unless the diffs to GraphicsContext.h, Path.h and Gradient.h didn&apos;t apply at the right places (inside the #if PLATFORM(HAIKU)).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189454</commentid>
    <comment_count>4</comment_count>
      <attachid>48295</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-10 13:25:04 -0800</bug_when>
    <thetext>Comment on attachment 48295
Implements Path and Gradient support for Haiku, fleshes out GraphicsContextHaiku

This patch is kinda large and would be better done in pieces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190337</commentid>
    <comment_count>5</comment_count>
    <who name="Ryan Leavengood">leavengood</who>
    <bug_when>2010-02-14 11:12:40 -0800</bug_when>
    <thetext>Hi Eric,

Any suggestions on how to split this up? Most of the changes are in one file, GraphicsContextHaiku, which is a rather large file due to the design of the WebCore platform code. The other changes need to be part of this patch since they relate to the changes in GraphicsContextHaiku. If you could reconsider your position about the size of this patch I would really appreciate it :)

Stephan is doing a great job updating this port which I&apos;ve let get out of date. Getting these changes into the main WebKit repo will make it much easier for us to work together without having to email patches or create external repos with copies of the WebKit code, which I know you guys tend to frown on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191505</commentid>
    <comment_count>6</comment_count>
      <attachid>48990</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-18 02:44:45 -0800</bug_when>
    <thetext>Created attachment 48990
Implments creating and filling platform gradients

Smaller patch for just GradientHaiku.cpp and Gradient.h. If the Haiku build system would be integrated, this patch would break the Haiku build, since GraphicsContextHaiku.cpp would have to be adjusted as well, but it doesn&apos;t matter. It&apos;s more important to reduce the size of the patch. I&apos;ve also fixed some coding style violations compared to the previous patch (using C++ casts in C++ code). Patch is against r54932.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191507</commentid>
    <comment_count>7</comment_count>
      <attachid>48991</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-18 02:58:32 -0800</bug_when>
    <thetext>Created attachment 48991
 Implement native Path backend.

Smaller patch for just implementing the Path support. This one can really not be broken down any further. Again, it would actually need changes in GraphicsContextHaiku.cpp, but since the Haiku build system is not included in WebKit, it doesn&apos;t matter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192584</commentid>
    <comment_count>8</comment_count>
      <attachid>48990</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-22 13:11:36 -0800</bug_when>
    <thetext>Comment on attachment 48990
Implments creating and filling platform gradients

Thanks for splitting it up.

It&apos;s sad that we don&apos;t have an easy way for ports to use OwnPtr here, as that would be nicer than having to do platformDestroy().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192589</commentid>
    <comment_count>9</comment_count>
      <attachid>48991</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-22 13:24:58 -0800</bug_when>
    <thetext>Comment on attachment 48991
 Implement native Path backend.

I sometimes wrap locking blocks in { } to indicate that I&apos;m holding a lock, I&apos;m not sure what WebKit&apos;s official style is.  We generally use stack objects to do locking/unlocking automatically for us:
84     bitmap.Lock();
 85     bitmap.AddChild(&amp;view);
 86     // Current pen location is used as origin for the shape.
 87     view.MovePenTo(-point.x(), -point.y());
 88     // TODO: Handle WindRule... (needs support in BView, the backend already
 89     // support it.)
 90     view.FillShape(m_path);
 91     view.Sync();
 92 
 93     uint8* bits = reinterpret_cast&lt;uint8*&gt;(bitmap.Bits());
 94     bool result = bits[0] &lt; 128;
 95 
 96     view.RemoveSelf();
 97     bitmap.Unlock();

Yeah, given that you do it twice, i tmight make sense to write a simple auto-locking class for just use within this file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192712</commentid>
    <comment_count>10</comment_count>
      <attachid>48990</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-22 17:12:57 -0800</bug_when>
    <thetext>Comment on attachment 48990
Implments creating and filling platform gradients

Clearing flags on attachment: 48990

Committed r55115: &lt;http://trac.webkit.org/changeset/55115&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192838</commentid>
    <comment_count>11</comment_count>
      <attachid>49270</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-23 01:54:26 -0800</bug_when>
    <thetext>Created attachment 49270
Implement native Path backend.

This new patch implements the HitTestBitmap helper class. It also fixes a bug in Path::translate() where the MoveTo() op didn&apos;t adjust y.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192845</commentid>
    <comment_count>12</comment_count>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-23 02:10:04 -0800</bug_when>
    <thetext>I just realized I should perhaps explain the &quot;locking&quot; thing. Usually, a BView is attached to a BWindow. In fact, it can only be attached to a BWindow. A BWindow usually runs it&apos;s own thread for dispatching events. To help coders not make the mistake to invoke BView methods without having the BWindow looper thread properly locked, the BView methods all check the locking status of their parent BWindow and drop the program into the debugger if there is anything wrong. When invoking methods from within the BWindow thread, no locking needs to be done, since it always happens from within the event dispatching code which already has the BWindow locked. It&apos;s just important when invoking from other threads, like BApplication.

Then Be thought that it would be nice to be able to attach BViews also to BBitmaps. For this, they created a special private constructor for BWindow which only BBitmap has access to. A BBitmap which is created with the flag to allow attaching BViews creates such a dummy BWindow for holding the child BViews. It also makes sure that there is an app_server thread running which performs the actual drawing commands for the BView. But this BWindow is special in that the event looper thread never runs. Still, the BView methods check for the locked status of the parent BWindow. So the locking here happens more to prevent the invokation of the debugger, than to actually synchronize critical sections. If WebCore was to run documents, layouting and painting in multiple threads, then it could actually become useful to use the BBitmap lock for synchronization. For now it would just add unnecessary overhead.

I hope this makes it clear why Lock() and Unlock() in HitTestBitmap don&apos;t implement the stack object based auto-locking that you were thinking of. Such technique is otherwise well known in Haiku coding, but it doesn&apos;t apply here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193859</commentid>
    <comment_count>13</comment_count>
      <attachid>49527</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-25 13:04:23 -0800</bug_when>
    <thetext>Created attachment 49527
Implement native Path backend.

The new patchs adds reference counting to global HitTestBitmap object, so that the internal BBitmap can be destroyed before the invokation of the global destructors. This is necessary, since destroying BBitmaps require a running BApplication, which will be gone at that point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196665</commentid>
    <comment_count>14</comment_count>
      <attachid>49527</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-05 14:24:29 -0800</bug_when>
    <thetext>Comment on attachment 49527
Implement native Path backend.

Why not use ref() and deref() as the names so that we could use RefPtr to hold this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196720</commentid>
    <comment_count>15</comment_count>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-03-05 15:12:39 -0800</bug_when>
    <thetext>Changing the method names to ref() and deref() in order to use RefPtr, I would have to add another member to the Path class just for the Haiku platform. This adds clutter to the common Path.h header and Path objects would be ca couple bytes bigger on Haiku for no real benefit, IMHO. The only thing I gain is that I don&apos;t have to deref in the Path destructor. To be honest, I don&apos;t think this change is justified. I don&apos;t even know if adding a RefPtr&lt;HitTestBitmap&gt; to the Path class for Haiku is even possible without making the whole HitTestBitmap class known in the Path.h header.

If you think this change absolutely has to be done in order for the patch to get the green light, I will of course do it, please just leave a note, I would not want the patch to remain sitting here. I just thought I&apos;d try to explain why I think it&apos;s better as it is. :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211413</commentid>
    <comment_count>16</comment_count>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-04-11 13:10:13 -0700</bug_when>
    <thetext>I hope this is not too annoying, but just wanted to give a reminder that I am still waiting on feedback to my last comment. Thanks for your time!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212074</commentid>
    <comment_count>17</comment_count>
      <attachid>49527</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-04-13 14:06:14 -0700</bug_when>
    <thetext>Comment on attachment 49527
Implement native Path backend.

Just a few minor nits. Sorry (I would r+ if you could land it).

&gt; Index: WebCore/ChangeLog
&gt; +            Fixed memory corruption, curtesy of Michael Lotz. We can&apos;t just assign pointers!

courtesy 

&gt; +        (WebCore::Path::addQuadCurveTo):
&gt; +            Implemented (curtesy of Michael Lotz).

courtesy 


&gt; Index: WebCore/platform/graphics/haiku/PathHaiku.cpp
&gt; +// A one pixel sized BBitmap for drawing into. Default high-color of BViews

Single space after . in comments.


&gt; +        virtual status_t IterateLineTo(int32 lineCount, BPoint* linePts)

Abbreviations are discouraged in WebKit. &quot;Pts&quot;.

&gt; +    // BShapeIterator allows us to modify the path data &quot;in place&quot;

Please add a &quot;.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2029860</commentid>
    <comment_count>18</comment_count>
    <who name="Ahmad Saleem">ahmad.saleem792</who>
    <bug_when>2024-04-19 09:03:59 -0700</bug_when>
    <thetext>Haiku port doesn&apos;t exist and if there is any unofficial - these patch might not be as useful as they were in the past and might require total effort from scratch.

Marking this bug as &apos;RESOLVED WONTFIX&apos; from usability perspective and if someone can salvage for their &apos;Haiku&apos; port, they are happy to do so.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48295</attachid>
            <date>2010-02-06 13:53:48 -0800</date>
            <delta_ts>2010-02-18 02:44:45 -0800</delta_ts>
            <desc>Implements Path and Gradient support for Haiku, fleshes out GraphicsContextHaiku</desc>
            <filename>graphics.diff</filename>
            <type>text/plain</type>
            <size>42515</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDMyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODMgQEAKKzIwMTAtMDItMDMgIFN0ZXBoYW4gQcOfbXVzICA8c3VwZXJzdGlwcGlA
Z214LmRlPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEltcGxlbWVudGluZyBQYXRoSGFpa3UgYW5kIEdyYWRpZW50SGFpa3UsIGZsZXNoaW5nIG91dCBH
cmFwaGljc0NvbnRleHRIYWlrdQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzQ2ODMKKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaDogQWRkZWQgSGFpa3UgZGVm
aW5pdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmg6IEFkZGVkIEhhaWt1
IGRlZmluaXRpb24uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhZGllbnRI
YWlrdS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6cGxhdGZvcm1EZXN0cm95KTog
RGVsZXRlIEJHcmFkaWVudAorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnBsYXRmb3JtR3Jh
ZGllbnQpOiBDcmVhdGUgYW5kIGNhY2hlIEJHcmFkaWVudAorICAgICAgICAoV2ViQ29yZTo6R3Jh
ZGllbnQ6OmZpbGwpOiBGaWxsIHdpdGggQkdyYWRpZW50CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpMYXllcjo6TGF5ZXIpOiBTdXBwb3J0IGZv
ciB0cmFuc3BhcmVuY3kgbGF5ZXJzCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGU6OkxheWVyOjp+TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp2aWV3KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0U2hhcGUpOiBTdXBwb3J0IGZvciBtYWludGFp
bmluZyBhIGN1cnJlbnQgcGF0aAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlOjpzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGU6OnB1c2hMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGU6OnBvcExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6fkdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4dCk6IERpcmVjdCBhY2Nlc3MgdG8gdGhlIEJWaWV3IGhh
cyBiZWVuIGNoYW5nZWQgdG8gdXNlIGFuIGFjY2Vzc29yIG1ldGhvZCBhbmQgcmV0dXJucyB0aGUg
Y3VycmVudCBsYXllcidzIHZpZXcuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNhdmVQbGF0Zm9ybVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
cmVzdG9yZVBsYXRmb3JtU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpkcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5l
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMpOiBDaGFuZ2VkIGltcGxl
bWVudGF0aW9uIHRvIGxvb2sgZ29vZCBvbiBib3ggZWxlbWVudHMgd2l0aG91dCBpbXBsZW1lbnRp
bmcgY2xpcHBpbmcgcGF0aHMuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZVBhdGgpOiBJbXBsZW1lbnRlZAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpkcmF3Q29udmV4UG9seWdvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmZpbGxSZWN0KTogSW1wbGVtZW50CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmZpbGxSb3VuZGVkUmVjdCk6IEltcGxlbWVudAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpmaWxsUGF0aCk6IEltcGxlbWVudAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpiZWdpblBhdGgpOiBJbXBsZW1lbnQKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6YWRkUGF0aCk6IEltcGxlbWVudAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFBh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKTog
QWRkZWQgdG8gZml4IGJ1aWxkCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJv
dW5kVG9EZXZpY2VQaXhlbHMpOiBJbXBsZW1lbnRlZAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKTogSW1wbGVtZW50ZWQKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIpOiBJbXBsZW1l
bnRlZAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QpOiBJbXBs
ZW1lbnRlZAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0QWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
ZXRDb21wb3NpdGVPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpnZXRBZmZpbmVDVE0pOiBJbXBsZW1lbnRlZAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpnZXRDVE0pOiBJbXBsZW1lbnRlZAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Ojp0cmFuc2xhdGUpOiBJbXBsZW1lbnRlZAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpvcmlnaW4pOiBJbXBsZW1lbnRlZAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzY2FsZSk6IEltcGxlbWVudGVkCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmNsaXBPdXQpOiBJbXBsZW1lbnRlZAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWN0Q2xpcCk6IEFkZGVkIGNvbW1lbnQKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1Gb250KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29s
b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1BhdGhIYWlrdS5jcHA6IElt
cGxlbWVudGVkIHZpYSBCU2hhcGUKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OlBhdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6UGF0aDo6Y29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6
c3Ryb2tlQ29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6dHJhbnNsYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhdGg6OmJvdW5kaW5nUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQ
YXRoOjptb3ZlVG8pOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkTGluZVRvKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBhdGg6OmFkZEJlemllckN1cnZlVG8pOgorICAgICAgICAoV2ViQ29yZTo6
UGF0aDo6Y2xvc2VTdWJwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UGF0aDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6
aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjp0cmFuc2Zvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6UGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KTogSW1wbGVtZW50ZWQgaW5jb21wbGV0
ZSAoZG9lcyBub3QgdGFrZSBzdHJva2Ugd2lkdGggaW50byBhY2NvdW50KQorCiAyMDEwLTAyLTAz
ICBTdGV2ZSBGYWxrZW5idXJnICA8c2ZhbGtlbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2luZG93
cyBEZWJ1Z19BbGwgYnVpbGQgZml4LgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFkaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGll
bnQuaAkocmV2aXNpb24gNTQyNzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRp
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDkgQEAgdHlwZWRlZiBjYWlyb19wYXR0
ZXJuX3QqIFBsYXRmb3JtR3JhZGllbgogY2xhc3MgU2tTaGFkZXI7CiB0eXBlZGVmIGNsYXNzIFNr
U2hhZGVyKiBQbGF0Zm9ybUdyYWRpZW50OwogdHlwZWRlZiBjbGFzcyBTa1NoYWRlciogUGxhdGZv
cm1QYXR0ZXJuOworI2VsaWYgUExBVEZPUk0oSEFJS1UpCitjbGFzcyBCR3JhZGllbnQ7Cit0eXBl
ZGVmIEJHcmFkaWVudCogUGxhdGZvcm1HcmFkaWVudDsKICNlbHNlCiB0eXBlZGVmIHZvaWQqIFBs
YXRmb3JtR3JhZGllbnQ7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCShy
ZXZpc2lvbiA1NDI3NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCw4ICs0OCw4IEBAIHR5cGVkZWYgV2ViQ29yZTo6Q2Fpcm9QYXRoIFBs
YXRmb3JtUGF0aDsKIGNsYXNzIFNrUGF0aDsKIHR5cGVkZWYgU2tQYXRoIFBsYXRmb3JtUGF0aDsK
ICNlbGlmIFBMQVRGT1JNKEhBSUtVKQotY2xhc3MgQlJlZ2lvbjsKLXR5cGVkZWYgQlJlZ2lvbiBQ
bGF0Zm9ybVBhdGg7CitjbGFzcyBCU2hhcGU7Cit0eXBlZGVmIEJTaGFwZSBQbGF0Zm9ybVBhdGg7
CiAjZWxpZiBPUyhXSU5DRSkKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBQbGF0Zm9y
bVBhdGg7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYWRpZW50SGFp
a3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3Jh
ZGllbnRIYWlrdS5jcHAJKHJldmlzaW9uIDU0Mjc1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9HcmFkaWVudEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggS2V2aW4gT2xsaXZpZXIgPGtldmlub0B0aGVv
bGxpdmllcnMuY29tPiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAw
OSBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUB0aGVvbGxpdmllcnMuY29tPgorICogQ29weXJp
Z2h0IChDKSAyMDEwIFN0ZXBoYW4gQcOfbXVzIDxzdXBlcnN0aXBwaUBnbXguZGU+CiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDI2ICsyOCw0NSBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAKLSNpbmNsdWRlICJDU1NQYXJzZXIuaCIK
LSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgPEdyYWRpZW50TGluZWFyLmg+CisjaW5jbHVkZSA8R3JhZGllbnRSYWRpYWwu
aD4KKyNpbmNsdWRlIDxWaWV3Lmg+CiAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB2b2lkIEdy
YWRpZW50OjpwbGF0Zm9ybURlc3Ryb3koKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
ZGVsZXRlIG1fZ3JhZGllbnQ7CiB9CiAKIFBsYXRmb3JtR3JhZGllbnQgR3JhZGllbnQ6OnBsYXRm
b3JtR3JhZGllbnQoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Cisg
ICAgaWYgKG1fZ3JhZGllbnQpCisgICAgICAgIHJldHVybiBtX2dyYWRpZW50OworCisgICAgaWYg
KG1fcmFkaWFsKSB7CisgICAgICAgIC8vIFRPRE86IFN1cHBvcnQgbV9yMD8KKyAgICAgICAgbV9n
cmFkaWVudCA9IG5ldyBCR3JhZGllbnRSYWRpYWwobV9wMCwgbV9yMSk7CisgICAgfSBlbHNlCisg
ICAgICAgIG1fZ3JhZGllbnQgPSBuZXcgQkdyYWRpZW50TGluZWFyKG1fcDAsIG1fcDEpOworICAg
IHNpemVfdCBzaXplID0gbV9zdG9wcy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyBpKyspIHsKKyAgICAgICAgY29uc3QgQ29sb3JTdG9wJiBzdG9wID0gbV9zdG9wc1tp
XTsKKyAgICAgICAgcmdiX2NvbG9yIGNvbG9yOworICAgICAgICBjb2xvci5yZWQgPSAodWludDgp
KHN0b3AucmVkICogMjU1LjApOworICAgICAgICBjb2xvci5ncmVlbiA9ICh1aW50OCkoc3RvcC5n
cmVlbiAqIDI1NS4wKTsKKyAgICAgICAgY29sb3IuYmx1ZSA9ICh1aW50OCkoc3RvcC5ibHVlICog
MjU1LjApOworICAgICAgICBjb2xvci5hbHBoYSA9ICh1aW50OCkoc3RvcC5hbHBoYSAqIDI1NS4w
KTsKKyAgICAgICAgbV9ncmFkaWVudC0+QWRkQ29sb3IoY29sb3IsIHN0b3Auc3RvcCk7CisgICAg
fQorICAgIHJldHVybiBtX2dyYWRpZW50OwogfQogCi12b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpCit2b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPkZpbGxSZWN0KHJl
Y3QsICptX2dyYWRpZW50KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFwaGljc0NvbnRleHRIYWlrdS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFwaGljc0NvbnRl
eHRIYWlrdS5jcHAJKHJldmlzaW9uIDU0Mjc1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9HcmFwaGljc0NvbnRleHRIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVu
Z29vZEBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU3RlcGhhbiBBw59tdXMgPHN1
cGVyc3RpcHBpQGdteC5kZT4KICAqCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTMz
LDEyICszNCwxNSBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2lu
Y2x1ZGUgIkZvbnREYXRhLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oIgog
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogI2luY2x1ZGUg
IlBlbi5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSA8Qml0
bWFwLmg+CiAjaW5jbHVkZSA8R3JhcGhpY3NEZWZzLmg+CiAjaW5jbHVkZSA8UmVnaW9uLmg+Cisj
aW5jbHVkZSA8U2hhcGUuaD4KICNpbmNsdWRlIDxWaWV3Lmg+CiAjaW5jbHVkZSA8V2luZG93Lmg+
CiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTUxLDE2ICs1NSwxNjYgQEAgcHVibGljOgogICAgIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShCVmlldyogdmlldyk7CiAgICAgfkdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZSgpOwogCi0gICAgQlZpZXcqIG1fdmlldzsKKyAgICBzdHJ1
Y3QgTGF5ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgTGF5ZXIoQlZpZXcqIF92aWV3KQorICAg
ICAgICAgICAgOiB2aWV3KF92aWV3KQorICAgICAgICAgICAgLCBiaXRtYXAoMCkKKyAgICAgICAg
ICAgICwgZ2xvYmFsQWxwaGEoMjU1KQorICAgICAgICAgICAgLCBjdXJyZW50U2hhcGUoMCkKKyAg
ICAgICAgICAgICwgbG9jYXRpb25JblBhcmVudChCX09SSUdJTikKKyAgICAgICAgICAgICwgYWNj
dW11bGF0ZWRPcmlnaW4oQl9PUklHSU4pCisgICAgICAgICAgICAsIHByZXZpb3VzKDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHN0cm9rZUNvbG9yLnJlZCA9IDA7CisgICAgICAgICAgICBzdHJv
a2VDb2xvci5ncmVlbiA9IDA7CisgICAgICAgICAgICBzdHJva2VDb2xvci5ibHVlID0gMDsKKyAg
ICAgICAgICAgIHN0cm9rZUNvbG9yLmFscGhhID0gMDsKKworICAgICAgICAgICAgZmlsbENvbG9y
LnJlZCA9IDA7CisgICAgICAgICAgICBmaWxsQ29sb3IuZ3JlZW4gPSAwOworICAgICAgICAgICAg
ZmlsbENvbG9yLmJsdWUgPSAwOworICAgICAgICAgICAgZmlsbENvbG9yLmFscGhhID0gMjU1Owor
ICAgICAgICB9CisgICAgICAgIExheWVyKExheWVyKiBwcmV2aW91cykKKyAgICAgICAgICAgIDog
dmlldygwKQorICAgICAgICAgICAgLCBiaXRtYXAoMCkKKyAgICAgICAgICAgICwgZ2xvYmFsQWxw
aGEoMjU1KQorICAgICAgICAgICAgLCBjdXJyZW50U2hhcGUoMCkKKyAgICAgICAgICAgICwgbG9j
YXRpb25JblBhcmVudChCX09SSUdJTikKKyAgICAgICAgICAgICwgYWNjdW11bGF0ZWRPcmlnaW4o
Ql9PUklHSU4pCisgICAgICAgICAgICAsIHByZXZpb3VzKHByZXZpb3VzKQorICAgICAgICB7Cisg
ICAgICAgICAgICBzdHJva2VDb2xvci5yZWQgPSAwOworICAgICAgICAgICAgc3Ryb2tlQ29sb3Iu
Z3JlZW4gPSAwOworICAgICAgICAgICAgc3Ryb2tlQ29sb3IuYmx1ZSA9IDA7CisgICAgICAgICAg
ICBzdHJva2VDb2xvci5hbHBoYSA9IDA7CisKKyAgICAgICAgICAgIGZpbGxDb2xvci5yZWQgPSAw
OworICAgICAgICAgICAgZmlsbENvbG9yLmdyZWVuID0gMDsKKyAgICAgICAgICAgIGZpbGxDb2xv
ci5ibHVlID0gMDsKKyAgICAgICAgICAgIGZpbGxDb2xvci5hbHBoYSA9IDI1NTsKKworICAgICAg
ICAgICAgQlJlZ2lvbiBwYXJlbnRDbGlwcGluZzsKKyAgICAgICAgICAgIHByZXZpb3VzLT52aWV3
LT5HZXRDbGlwcGluZ1JlZ2lvbigmcGFyZW50Q2xpcHBpbmcpOworICAgICAgICAgICAgQlJlY3Qg
ZnJhbWVJblBhcmVudCA9IHBhcmVudENsaXBwaW5nLkZyYW1lKCk7CisgICAgICAgICAgICBpZiAo
IWZyYW1lSW5QYXJlbnQuSXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIGZyYW1lSW5QYXJlbnQg
PSBwcmV2aW91cy0+dmlldy0+Qm91bmRzKCk7CisgICAgICAgICAgICBCUmVjdCBib3VuZHMgPSBm
cmFtZUluUGFyZW50Lk9mZnNldFRvQ29weShCX09SSUdJTik7CisgICAgICAgICAgICBsb2NhdGlv
bkluUGFyZW50ICs9IGZyYW1lSW5QYXJlbnQuTGVmdFRvcCgpOworICAgICAgICAgICAgdmlldyA9
IG5ldyBCVmlldyhib3VuZHMsICJXZWJDb3JlIHRyYW5zcGFyZW5jeSBsYXllciIsIDAsIDApOwor
ICAgICAgICAgICAgYml0bWFwID0gbmV3IEJCaXRtYXAoYm91bmRzLCBCX1JHQkEzMiwgdHJ1ZSk7
CisgICAgICAgICAgICBiaXRtYXAtPkxvY2soKTsKKyAgICAgICAgICAgIGJpdG1hcC0+QWRkQ2hp
bGQodmlldyk7CisgICAgICAgICAgICB2aWV3LT5TZXRIaWdoQ29sb3IoMCwgMCwgMCwgMCk7Cisg
ICAgICAgICAgICB2aWV3LT5GaWxsUmVjdCh2aWV3LT5Cb3VuZHMoKSk7CisgICAgICAgICAgICB2
aWV3LT5TZXRIaWdoQ29sb3IocHJldmlvdXMtPnZpZXctPkhpZ2hDb2xvcigpKTsKKyAgICAgICAg
ICAgIHZpZXctPlNldERyYXdpbmdNb2RlKHByZXZpb3VzLT52aWV3LT5EcmF3aW5nTW9kZSgpKTsK
KyAgICAgICAgICAgIHZpZXctPlNldEJsZW5kaW5nTW9kZShCX1BJWEVMX0FMUEhBLCBCX0FMUEhB
X0NPTVBPU0lURSk7CisgICAgICAgICAgICAvLyBUT0RPOiBsb2NhdGlvbkluUGFyZW50IGFuZCBh
Y2N1bXVsYXRlZE9yaWdpbiBjYW4KKyAgICAgICAgICAgIC8vIHByb2JhYmx5IHNvbWVob3cgYmUg
bWVyZ2VkLiBCdXQgZm9yIG5vdyBpdCB3b3Jrcy4KKyAgICAgICAgICAgIGFjY3VtdWxhdGVkT3Jp
Z2luLnggPSAtZnJhbWVJblBhcmVudC5sZWZ0OworICAgICAgICAgICAgYWNjdW11bGF0ZWRPcmln
aW4ueSA9IC1mcmFtZUluUGFyZW50LnRvcDsKKyAgICAgICAgICAgIHZpZXctPlNldE9yaWdpbihw
cmV2aW91cy0+YWNjdW11bGF0ZWRPcmlnaW4gKyBhY2N1bXVsYXRlZE9yaWdpbik7CisgICAgICAg
ICAgICB2aWV3LT5TZXRTY2FsZShwcmV2aW91cy0+dmlldy0+U2NhbGUoKSk7CisgICAgICAgICAg
ICB2aWV3LT5TZXRQZW5TaXplKHByZXZpb3VzLT52aWV3LT5QZW5TaXplKCkpOworICAgICAgICB9
CisgICAgICAgIH5MYXllcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChiaXRtYXApIHsK
KyAgICAgICAgICAgICAgICBiaXRtYXAtPlVubG9jaygpOworICAgICAgICAgICAgICAgIC8vIERl
bGV0aW5nIHRoZSBiaXRtYXAgd2lsbCBhbHNvIHRha2UgY2FyZSBvZiB0aGUgdmlldywKKyAgICAg
ICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBiaXRtYXAsIHRoZSB2aWV3IGRvZXMgbm90IGJl
bG9uZyB0byB1cyAoaW5pdGlhbCBsYXllcikuCisgICAgICAgICAgICAgICAgZGVsZXRlIGJpdG1h
cDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlbGV0ZSBjdXJyZW50U2hhcGU7CisgICAg
ICAgIH0KKworICAgICAgICBCVmlldyogdmlldzsKKyAgICAgICAgQkJpdG1hcCogYml0bWFwOwor
ICAgICAgICByZ2JfY29sb3Igc3Ryb2tlQ29sb3I7CisgICAgICAgIHJnYl9jb2xvciBmaWxsQ29s
b3I7CisgICAgICAgIHVpbnQ4IGdsb2JhbEFscGhhOworICAgICAgICBCU2hhcGUqIGN1cnJlbnRT
aGFwZTsKKyAgICAgICAgQlBvaW50IGxvY2F0aW9uSW5QYXJlbnQ7CisgICAgICAgIEJQb2ludCBh
Y2N1bXVsYXRlZE9yaWdpbjsKKworICAgICAgICBMYXllciogcHJldmlvdXM7CisgICAgfTsKKwor
ICAgIEJWaWV3KiB2aWV3KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRM
YXllci0+dmlldzsKKyAgICB9CisKKyAgICB2b2lkIHNldFNoYXBlKEJTaGFwZSogc2hhcGUpCisg
ICAgeworICAgICAgICBkZWxldGUgbV9jdXJyZW50TGF5ZXItPmN1cnJlbnRTaGFwZTsKKyAgICAg
ICAgbV9jdXJyZW50TGF5ZXItPmN1cnJlbnRTaGFwZSA9IHNoYXBlOworICAgIH0KKworICAgIEJT
aGFwZSogc2hhcGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRMYXllci0+
Y3VycmVudFNoYXBlKQorICAgICAgICAgICAgbV9jdXJyZW50TGF5ZXItPmN1cnJlbnRTaGFwZSA9
IG5ldyBCU2hhcGUoKTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudExheWVyLT5jdXJyZW50U2hh
cGU7CisgICAgfQorCisgICAgdm9pZCBwdXNoTGF5ZXIoZmxvYXQgb3BhY2l0eSkKKyAgICB7Cisg
ICAgICAgIG1fY3VycmVudExheWVyID0gbmV3IExheWVyKG1fY3VycmVudExheWVyKTsKKyAgICAg
ICAgbV9jdXJyZW50TGF5ZXItPmdsb2JhbEFscGhhID0gKHVpbnQ4KShvcGFjaXR5ICogMjU1LjAp
OworICAgIH0KKworICAgIHZvaWQgcG9wTGF5ZXIoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2N1
cnJlbnRMYXllci0+cHJldmlvdXMpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIExheWVy
KiBsYXllciA9IG1fY3VycmVudExheWVyOworICAgICAgICBtX2N1cnJlbnRMYXllciA9IGxheWVy
LT5wcmV2aW91czsKKyAgICAgICAgaWYgKGxheWVyLT5nbG9iYWxBbHBoYSA+IDApIHsKKyAgICAg
ICAgICAgIC8vIFBvc3QgcHJvY2VzcyB0aGUgYml0bWFwIGluIG9yZGVyIHRvIGFwcGx5IGdsb2Jh
bCBhbHBoYS4uLgorICAgICAgICAgICAgaWYgKGxheWVyLT5nbG9iYWxBbHBoYSA8IDI1NSkgewor
ICAgICAgICAgICAgICAgIHVpbnQ4KiBiaXRzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OCo+KGxh
eWVyLT5iaXRtYXAtPkJpdHMoKSk7CisgICAgICAgICAgICAgICAgdWludDMyIHdpZHRoID0gbGF5
ZXItPmJpdG1hcC0+Qm91bmRzKCkuSW50ZWdlcldpZHRoKCkgKyAxOworICAgICAgICAgICAgICAg
IHVpbnQzMiBoZWlnaHQgPSBsYXllci0+Yml0bWFwLT5Cb3VuZHMoKS5JbnRlZ2VySGVpZ2h0KCkg
KyAxOworICAgICAgICAgICAgICAgIHVpbnQzMiBicHIgPSBsYXllci0+Yml0bWFwLT5CeXRlc1Bl
clJvdygpOworICAgICAgICAgICAgICAgIHVpbnQ4IGFscGhhID0gbGF5ZXItPmdsb2JhbEFscGhh
OworICAgICAgICAgICAgICAgIGZvciAodWludDMyIHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsK
KyAgICAgICAgICAgICAgICAgICAgdWludDgqIHAgPSBiaXRzOworICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVpbnQzMiB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFRPRE86IFRoZXJlIGlzIGEgbWV0aG9kIHRvIGRvIHNoaWZ0aW5nIHdpdGhvdXQg
Yml0IGVycm9ycy4KKyAgICAgICAgICAgICAgICAgICAgICAgIHBbMF0gPSAodWludDgpKCh1aW50
MTYpcFswXSAqIGFscGhhID4+IDgpOworICAgICAgICAgICAgICAgICAgICAgICAgcFsxXSA9ICh1
aW50OCkoKHVpbnQxNilwWzFdICogYWxwaGEgPj4gOCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBwWzJdID0gKHVpbnQ4KSgodWludDE2KXBbMl0gKiBhbHBoYSA+PiA4KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHBbM10gPSAodWludDgpKCh1aW50MTYpcFszXSAqIGFscGhhID4+IDgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcCArPSA0OworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gYnByOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIEJQb2ludCBiaXRtYXBMb2NhdGlvbihsYXllci0+bG9jYXRp
b25JblBhcmVudCk7CisgICAgICAgICAgICBiaXRtYXBMb2NhdGlvbiAtPSBtX2N1cnJlbnRMYXll
ci0+YWNjdW11bGF0ZWRPcmlnaW47CisgICAgICAgICAgICBtX2N1cnJlbnRMYXllci0+dmlldy0+
RHJhd0JpdG1hcChsYXllci0+Yml0bWFwLCBiaXRtYXBMb2NhdGlvbik7CisgICAgICAgIH0KKyAg
ICAgICAgZGVsZXRlIGxheWVyOworICAgIH0KKworICAgIExheWVyKiBtX2N1cnJlbnRMYXllcjsK
IH07CiAKIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKEJWaWV3KiB2aWV3KQotICAgIDogbV92aWV3KHZpZXcpCisgICAgOiBtX2N1
cnJlbnRMYXllcihuZXcgTGF5ZXIodmlldykpCiB7CiB9CiAKIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSgpCiB7CisgICAgd2hp
bGUgKExheWVyKiBwcmV2aW91cyA9IG1fY3VycmVudExheWVyLT5wcmV2aW91cykgeworICAgICAg
ICBkZWxldGUgbV9jdXJyZW50TGF5ZXI7CisgICAgICAgIG1fY3VycmVudExheWVyID0gcHJldmlv
dXM7CisgICAgfQorICAgIGRlbGV0ZSBtX2N1cnJlbnRMYXllcjsKIH0KIAogR3JhcGhpY3NDb250
ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCkBA
IC03OCwxNyArMjMyLDE4IEBAIEdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCgpCiAK
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4
dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS0+bV92aWV3OworICAgIHJldHVybiBtX2Rh
dGEtPnZpZXcoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRl
KCkKIHsKLSAgICBtX2RhdGEtPm1fdmlldy0+UHVzaFN0YXRlKCk7CisgICAgbV9kYXRhLT52aWV3
KCktPlB1c2hTdGF0ZSgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRm
b3JtU3RhdGUoKQogewotICAgIG1fZGF0YS0+bV92aWV3LT5Qb3BTdGF0ZSgpOworICAgIG1fZGF0
YS0+bV9jdXJyZW50TGF5ZXItPmFjY3VtdWxhdGVkT3JpZ2luIC09IG1fZGF0YS0+dmlldygpLT5P
cmlnaW4oKTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+UG9wU3RhdGUoKTsKIH0KIAogLy8gRHJhd3Mg
YSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4KQEAgLTk3LDIxICsyNTIs
MTggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEludAogICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+bV92aWV3
LT5GaWxsUmVjdChyZWN0KTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+RmlsbFJlY3QocmVjdCk7CiAg
ICAgaWYgKHN0cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UpCi0gICAgICAgIG1fZGF0YS0+bV92aWV3
LT5TdHJva2VSZWN0KHJlY3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CisgICAgICAgIG1fZGF0
YS0+dmlldygpLT5TdHJva2VSZWN0KHJlY3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CiB9CiAK
IC8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycy4KIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3TGluZShjb25zdCBJbnRQb2ludCYgcG9pbnQxLCBjb25zdCBJbnRQb2ludCYgcG9p
bnQyKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChzdHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKQorICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkgfHwgc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSB8fCBzdHJva2VUaGlja25lc3MoKSA8
PSAwLjBmIHx8ICFzdHJva2VDb2xvcigpLmFscGhhKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IG1fZGF0YS0+bV92aWV3LT5TdHJva2VMaW5lKHBvaW50MSwgcG9pbnQyLCBnZXRIYWlrdVN0cm9r
ZVN0eWxlKCkpOworICAgIG1fZGF0YS0+dmlldygpLT5TdHJva2VMaW5lKHBvaW50MSwgcG9pbnQy
LCBnZXRIYWlrdVN0cm9rZVN0eWxlKCkpOwogfQogCiAvLyBUaGlzIG1ldGhvZCBpcyBvbmx5IHVz
ZWQgdG8gZHJhdyB0aGUgbGl0dGxlIGNpcmNsZXMgdXNlZCBpbiBsaXN0cy4KQEAgLTEyMCwyMiAr
MjcyLDczIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCAKICAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGEtPm1f
dmlldy0+RmlsbEVsbGlwc2UocmVjdCk7CisgICAgbV9kYXRhLT52aWV3KCktPkZpbGxFbGxpcHNl
KHJlY3QpOwogICAgIGlmIChzdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlKQotICAgICAgICBtX2Rh
dGEtPm1fdmlldy0+U3Ryb2tlRWxsaXBzZShyZWN0LCBnZXRIYWlrdVN0cm9rZVN0eWxlKCkpOwor
ICAgICAgICBtX2RhdGEtPnZpZXcoKS0+U3Ryb2tlRWxsaXBzZShyZWN0LCBnZXRIYWlrdVN0cm9r
ZVN0eWxlKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKGNvbnN0IElu
dFJlY3QmIHJlY3QsIGludCBzdGFydEFuZ2xlLCBpbnQgYW5nbGVTcGFuKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBzdHJva2VT
dHlsZSgpID09IE5vU3Ryb2tlIHx8IHN0cm9rZVRoaWNrbmVzcygpIDw9IDAuMGYgfHwgIXN0cm9r
ZUNvbG9yKCkuYWxwaGEoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhLT5tX3ZpZXct
PlN0cm9rZUFyYyhyZWN0LCBzdGFydEFuZ2xlLCBhbmdsZVNwYW4sIGdldEhhaWt1U3Ryb2tlU3R5
bGUoKSk7CisgICAgLy8gVE9ETzogVGhlIGNvZGUgYmVsb3cgd2lsbCBvbmx5IG1ha2Ugcm91bmQt
Y29ybmVyIGJveGVuIGxvb2sgbmljZS4gRm9yIGFuIHV0dGVybHkgc2hvY2tpbmcKKyAgICAvLyBp
bXBsZW1lbnRhdGlvbiBvZiByb3VuZCBjb3JuZXIgZHJhd2luZywgc2VlIFJlbmRlckJveE1vZGVs
T2JqZWN0OjpwYWludEJvcmRlcigpLiBJdCB0cmllcworICAgIC8vIHRvIHVzZSBvbmUgKG9yIHR3
bykgYWxwaGEgbWFzayhzKSBwZXIgYm94IGNvcm5lciB0byBjdXQgb2ZmIGEgdGhpY2tlciBzdHJv
a2UgYW5kIGRvdWJsZXMKKyAgICAvLyB0aGUgc3Ryb2tlIHdpdGguIEFsbCB0aGlzIHRvIGFsaWdu
IHRoZSBhcmMgd2l0aCB0aGUgYm94IHNpZGVzLi4uCisKKyAgICBmbG9hdCBwZW5TaXplID0gc3Ry
b2tlVGhpY2tuZXNzKCkgLyAyLjBmOworICAgIG1fZGF0YS0+dmlldygpLT5TZXRQZW5TaXplKHBl
blNpemUpOworICAgIEJSZWN0IGJSZWN0KHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC5yaWdodCgp
LCByZWN0LmJvdHRvbSgpKTsKKyAgICBpZiAoc3RhcnRBbmdsZSA+PSAwICYmIHN0YXJ0QW5nbGUg
PCA5MCkgeworICAgICAgICBiUmVjdC5yaWdodCAtPSBwZW5TaXplOworICAgICAgICBiUmVjdC50
b3AgKz0gcGVuU2l6ZSAvIDIuMGY7CisgICAgICAgIGJSZWN0LmJvdHRvbSAtPSBwZW5TaXplIC8g
Mi4wZjsKKyAgICB9IGVsc2UgaWYgKHN0YXJ0QW5nbGUgPj0gOTAgJiYgc3RhcnRBbmdsZSA8IDE4
MCkgeworICAgICAgICBiUmVjdC5sZWZ0ICs9IHBlblNpemUgLyAyLjBmOworICAgICAgICBiUmVj
dC50b3AgKz0gcGVuU2l6ZSAvIDIuMGY7CisgICAgICAgIGJSZWN0LnJpZ2h0IC09IHBlblNpemUg
LyAyLjBmOworICAgICAgICBiUmVjdC5ib3R0b20gLT0gcGVuU2l6ZSAvIDIuMGY7CisgICAgfSBl
bHNlIGlmIChzdGFydEFuZ2xlID49IDE4MCAmJiBzdGFydEFuZ2xlIDwgMjcwKSB7CisgICAgICAg
IGJSZWN0LmxlZnQgKz0gcGVuU2l6ZSAvIDIuMGY7CisgICAgICAgIGJSZWN0LnJpZ2h0IC09IHBl
blNpemUgLyAyLjBmOworICAgICAgICBiUmVjdC5ib3R0b20gLT0gcGVuU2l6ZTsKKyAgICB9IGVs
c2UgaWYgKHN0YXJ0QW5nbGUgPj0gMjcwICYmIHN0YXJ0QW5nbGUgPCAzNjApIHsKKyAgICAgICAg
YlJlY3QucmlnaHQgLT0gcGVuU2l6ZTsKKyAgICAgICAgYlJlY3QuYm90dG9tIC09IHBlblNpemU7
CisgICAgfQorICAgIGJSZWN0Lk9mZnNldFRvKGZsb29yZihiUmVjdC5sZWZ0KSwgZmxvb3JmKGJS
ZWN0LnRvcCkpOworICAgIHVpbnQzMiBmbGFncyA9IG1fZGF0YS0+dmlldygpLT5GbGFncygpOwor
ICAgIG1fZGF0YS0+dmlldygpLT5TZXRGbGFncyhmbGFncyB8IEJfU1VCUElYRUxfUFJFQ0lTRSk7
CisgICAgbV9kYXRhLT52aWV3KCktPlN0cm9rZUFyYyhiUmVjdCwgc3RhcnRBbmdsZSwgYW5nbGVT
cGFuLCBnZXRIYWlrdVN0cm9rZVN0eWxlKCkpOworICAgIG1fZGF0YS0+dmlldygpLT5TZXRGbGFn
cyhmbGFncyk7CisKKyAgICBtX2RhdGEtPnZpZXcoKS0+U2V0UGVuU2l6ZShzdHJva2VUaGlja25l
c3MoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICghbV9kYXRhLT5zaGFwZSgpKQorICAgICAgICByZXR1cm47CisKKy8v
ICAgIG1fZGF0YS0+dmlldygpLT5TZXRGaWxsUnVsZSh0b0hhaWt1RmlsbFJ1bGUoZmlsbFJ1bGUo
KSkpOworICAgIG1fZGF0YS0+dmlldygpLT5Nb3ZlUGVuVG8oQl9PUklHSU4pOworCisgICAgaWYg
KG1fY29tbW9uLT5zdGF0ZS5zdHJva2VQYXR0ZXJuIHx8IG1fY29tbW9uLT5zdGF0ZS5zdHJva2VH
cmFkaWVudCB8fCBzdHJva2VDb2xvcigpLmFscGhhKCkpIHsKKyAgICAgICAgaWYgKG1fY29tbW9u
LT5zdGF0ZS5zdHJva2VQYXR0ZXJuKQorICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICAgICAgZWxzZSBpZiAobV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50KSB7CisgICAgICAg
ICAgICBub3RJbXBsZW1lbnRlZCgpOworLy8gICAgICAgICAgICBCR3JhZGllbnQqIGdyYWRpZW50
ID0gbV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCk7Cisv
LyAgICAgICAgICAgIGdyYWRpZW50LT5TZXRUcmFuc2Zvcm0obV9jb21tb24tPnN0YXRlLmZpbGxH
cmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKKy8vICAgICAgICAgICAgbV9kYXRh
LT52aWV3KCktPlN0cm9rZVNoYXBlKG1fZGF0YS0+c2hhcGUoKSwgKmdyYWRpZW50KTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBtX2RhdGEtPnZpZXcoKS0+U3Ryb2tlU2hhcGUobV9kYXRh
LT5zaGFwZSgpKTsKKyAgICB9CisgICAgbV9kYXRhLT5zZXRTaGFwZSgwKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBwb2ludHNMZW5ndGgsIGNv
bnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBzaG91bGRBbnRpYWxpYXMpCkBAIC0xNDcsMTAg
KzM1MCwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oCiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb2ludHNMZW5ndGg7IGkrKykKICAgICAgICAgYlBvaW50
c1tpXSA9IHBvaW50c1tpXTsKIAotICAgIG1fZGF0YS0+bV92aWV3LT5GaWxsUG9seWdvbihiUG9p
bnRzLCBwb2ludHNMZW5ndGgpOworICAgIG1fZGF0YS0+dmlldygpLT5GaWxsUG9seWdvbihiUG9p
bnRzLCBwb2ludHNMZW5ndGgpOwogICAgIGlmIChzdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlKQog
ICAgICAgICAvLyBTdHJva2Ugd2l0aCBsb3cgY29sb3IKLSAgICAgICAgbV9kYXRhLT5tX3ZpZXct
PlN0cm9rZVBvbHlnb24oYlBvaW50cywgcG9pbnRzTGVuZ3RoLCB0cnVlLCBnZXRIYWlrdVN0cm9r
ZVN0eWxlKCkpOworICAgICAgICBtX2RhdGEtPnZpZXcoKS0+U3Ryb2tlUG9seWdvbihiUG9pbnRz
LCBwb2ludHNMZW5ndGgsIHRydWUsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQpAQCAtMTU4LDE2ICszNjEsMTggQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHJnYl9jb2xvciBvbGRDb2xvciA9
IG1fZGF0YS0+bV92aWV3LT5IaWdoQ29sb3IoKTsKLSAgICBtX2RhdGEtPm1fdmlldy0+U2V0SGln
aENvbG9yKGNvbG9yKTsKLSAgICBtX2RhdGEtPm1fdmlldy0+RmlsbFJlY3QocmVjdCk7Ci0gICAg
bV9kYXRhLT5tX3ZpZXctPlNldEhpZ2hDb2xvcihvbGRDb2xvcik7CisgICAgcmdiX2NvbG9yIG9s
ZENvbG9yID0gbV9kYXRhLT52aWV3KCktPkhpZ2hDb2xvcigpOworICAgIG1fZGF0YS0+dmlldygp
LT5TZXRIaWdoQ29sb3IoY29sb3IpOworICAgIG1fZGF0YS0+dmlldygpLT5GaWxsUmVjdChyZWN0
KTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+U2V0SGlnaENvbG9yKG9sZENvbG9yKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEt
PnZpZXcoKS0+RmlsbFJlY3QocmVjdCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
Um91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwg
Y29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsIGNvbnN0IEludFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0
IEludFNpemUmIGJvdHRvbVJpZ2h0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSkKQEAgLTE3NSwyNSArMzgwLDg4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
Um91bmRlZFJlY3QoY28KICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFjb2xvci5hbHBo
YSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIC8vIEZJ
WE1FOiBBIHNpbXBsZSBpbXBsZW1lbnRhdGlvbiBjb3VsZCBqdXN0IHVzZSBGaWxsUm91bmRSZWN0
IGlmIGFsbAotICAgIC8vIHRoZSBzaXplcyBhcmUgdGhlIHNhbWUsIG9yIGV2ZW4gaWYgdGhleSBh
cmUgbm90LiBPdGhlcndpc2Ugc2V2ZXJhbAotICAgIC8vIEZpbGxSZWN0IGFuZCBGaWxsQXJjIGNh
bGxzIGFyZSBuZWVkZWQuCisgICAgQlBvaW50IHBvaW50c1szXTsKKyAgICBjb25zdCBmbG9hdCBr
UmFkaXVzQmV6aWVyU2NhbGUgPSAwLjU2ZjsKKworICAgIEJTaGFwZSBzaGFwZTsKKyAgICBzaGFw
ZS5Nb3ZlVG8oQlBvaW50KHJlY3QueCgpICsgdG9wTGVmdC53aWR0aCgpLCByZWN0LnkoKSkpOwor
ICAgIHNoYXBlLkxpbmVUbyhCUG9pbnQocmVjdC5yaWdodCgpIC0gdG9wUmlnaHQud2lkdGgoKSwg
cmVjdC55KCkpKTsKKyAgICBwb2ludHNbMF0ueCA9IHJlY3QucmlnaHQoKSAtIGtSYWRpdXNCZXpp
ZXJTY2FsZSAqIHRvcFJpZ2h0LndpZHRoKCk7CisgICAgcG9pbnRzWzBdLnkgPSByZWN0LnkoKTsK
KyAgICBwb2ludHNbMV0ueCA9IHJlY3QucmlnaHQoKTsKKyAgICBwb2ludHNbMV0ueSA9IHJlY3Qu
eSgpICsga1JhZGl1c0JlemllclNjYWxlICogdG9wUmlnaHQuaGVpZ2h0KCk7CisgICAgcG9pbnRz
WzJdLnggPSByZWN0LnJpZ2h0KCk7CisgICAgcG9pbnRzWzJdLnkgPSByZWN0LnkoKSArIHRvcFJp
Z2h0LmhlaWdodCgpOworICAgIHNoYXBlLkJlemllclRvKHBvaW50cyk7CisgICAgc2hhcGUuTGlu
ZVRvKEJQb2ludChyZWN0LnJpZ2h0KCksIHJlY3QuYm90dG9tKCkgLSBib3R0b21SaWdodC5oZWln
aHQoKSkpOworICAgIHBvaW50c1swXS54ID0gcmVjdC5yaWdodCgpOworICAgIHBvaW50c1swXS55
ID0gcmVjdC5ib3R0b20oKSAtIGtSYWRpdXNCZXppZXJTY2FsZSAqIGJvdHRvbVJpZ2h0LmhlaWdo
dCgpOworICAgIHBvaW50c1sxXS54ID0gcmVjdC5yaWdodCgpIC0ga1JhZGl1c0JlemllclNjYWxl
ICogYm90dG9tUmlnaHQud2lkdGgoKTsKKyAgICBwb2ludHNbMV0ueSA9IHJlY3QuYm90dG9tKCk7
CisgICAgcG9pbnRzWzJdLnggPSByZWN0LnJpZ2h0KCkgLSBib3R0b21SaWdodC53aWR0aCgpOwor
ICAgIHBvaW50c1syXS55ID0gcmVjdC5ib3R0b20oKTsKKyAgICBzaGFwZS5CZXppZXJUbyhwb2lu
dHMpOworICAgIHNoYXBlLkxpbmVUbyhCUG9pbnQocmVjdC54KCkgKyBib3R0b21MZWZ0LndpZHRo
KCksIHJlY3QuYm90dG9tKCkpKTsKKyAgICBwb2ludHNbMF0ueCA9IHJlY3QueCgpICsga1JhZGl1
c0JlemllclNjYWxlICogYm90dG9tTGVmdC53aWR0aCgpOworICAgIHBvaW50c1swXS55ID0gcmVj
dC5ib3R0b20oKTsKKyAgICBwb2ludHNbMV0ueCA9IHJlY3QueCgpOworICAgIHBvaW50c1sxXS55
ID0gcmVjdC5ib3R0b20oKSAtIGtSYWRpdXNCZXppZXJTY2FsZSAqIGJvdHRvbVJpZ2h0LmhlaWdo
dCgpOworICAgIHBvaW50c1syXS54ID0gcmVjdC54KCk7CisgICAgcG9pbnRzWzJdLnkgPSByZWN0
LmJvdHRvbSgpIC0gYm90dG9tUmlnaHQuaGVpZ2h0KCk7CisgICAgc2hhcGUuQmV6aWVyVG8ocG9p
bnRzKTsKKyAgICBzaGFwZS5MaW5lVG8oQlBvaW50KHJlY3QueCgpLCByZWN0LnkoKSArIHRvcExl
ZnQuaGVpZ2h0KCkpKTsKKyAgICBwb2ludHNbMF0ueCA9IHJlY3QueCgpOworICAgIHBvaW50c1sw
XS55ID0gcmVjdC55KCkgLSBrUmFkaXVzQmV6aWVyU2NhbGUgKiB0b3BMZWZ0LmhlaWdodCgpOwor
ICAgIHBvaW50c1sxXS54ID0gcmVjdC54KCkgKyBrUmFkaXVzQmV6aWVyU2NhbGUgKiB0b3BMZWZ0
LndpZHRoKCk7CisgICAgcG9pbnRzWzFdLnkgPSByZWN0LnkoKTsKKyAgICBwb2ludHNbMl0ueCA9
IHJlY3QueCgpICsgdG9wTGVmdC53aWR0aCgpOworICAgIHBvaW50c1syXS55ID0gcmVjdC55KCk7
CisgICAgc2hhcGUuQmV6aWVyVG8ocG9pbnRzKTsKKyAgICBzaGFwZS5DbG9zZSgpOworCisgICAg
cmdiX2NvbG9yIG9sZENvbG9yID0gbV9kYXRhLT52aWV3KCktPkhpZ2hDb2xvcigpOworICAgIG1f
ZGF0YS0+dmlldygpLT5TZXRIaWdoQ29sb3IoY29sb3IpOworICAgIG1fZGF0YS0+dmlldygpLT5N
b3ZlUGVuVG8oQl9PUklHSU4pOworICAgIG1fZGF0YS0+dmlldygpLT5GaWxsU2hhcGUoJnNoYXBl
KTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+U2V0SGlnaENvbG9yKG9sZENvbG9yKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgh
bV9kYXRhLT5zaGFwZSgpKQorICAgICAgICByZXR1cm47CisKKy8vICAgIG1fZGF0YS0+dmlldygp
LT5TZXRGaWxsUnVsZSh0b0hhaWt1RmlsbFJ1bGUoZmlsbFJ1bGUoKSkpOworICAgIG1fZGF0YS0+
dmlldygpLT5Nb3ZlUGVuVG8oQl9PUklHSU4pOworCisgICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5m
aWxsUGF0dGVybiB8fCBtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50IHx8IGZpbGxDb2xvcigp
LmFscGhhKCkpIHsKKy8vICAgICAgICBkcmF3RmlsbGVkU2hhZG93UGF0aCh0aGlzLCBwLCBwYXRo
KTsgVE9ETzogV2hhdCdzIHRoaXMgc2hhZG93IGJ1c2luZXNzPworICAgICAgICBpZiAobV9jb21t
b24tPnN0YXRlLmZpbGxQYXR0ZXJuKQorICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICAgICAgZWxzZSBpZiAobV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudCkgeworICAgICAgICAg
ICAgQkdyYWRpZW50KiBncmFkaWVudCA9IG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQtPnBs
YXRmb3JtR3JhZGllbnQoKTsKKy8vICAgICAgICAgICAgZ3JhZGllbnQtPlNldFRyYW5zZm9ybSht
X2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LT5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpOwor
ICAgICAgICAgICAgbV9kYXRhLT52aWV3KCktPkZpbGxTaGFwZShtX2RhdGEtPnNoYXBlKCksICpn
cmFkaWVudCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9kYXRhLT52aWV3KCktPkZp
bGxTaGFwZShtX2RhdGEtPnNoYXBlKCkpOworICAgIH0KKyAgICBtX2RhdGEtPnNldFNoYXBlKDAp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5QYXRoKCkKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIG1fZGF0YS0+c2V0U2hhcGUobmV3IEJTaGFwZSgpKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmFkZFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIGlmICghbV9kYXRhLT5zaGFwZSgpKQorICAgICAgICBtX2RhdGEt
PnNldFNoYXBlKG5ldyBCU2hhcGUoKnBhdGgucGxhdGZvcm1QYXRoKCkpKTsKKyAgICBlbHNlCisg
ICAgICAgIG1fZGF0YS0+c2hhcGUoKS0+QWRkU2hhcGUocGF0aC5wbGF0Zm9ybVBhdGgoKSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAg
LTIwMiwxMiArNDcwLDIzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0
UmUKICAgICAgICAgcmV0dXJuOwogCiAgICAgQlJlZ2lvbiByZWdpb24ocmVjdCk7Ci0gICAgbV9k
YXRhLT5tX3ZpZXctPkNvbnN0cmFpbkNsaXBwaW5nUmVnaW9uKCZyZWdpb24pOworICAgIG1fZGF0
YS0+dmlldygpLT5Db25zdHJhaW5DbGlwcGluZ1JlZ2lvbigmcmVnaW9uKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKFdpbmRSdWxlIGNsaXBSdWxlKQoreworICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVk
KCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3Rv
cjxQYXRoPiYgcGF0aHMsIGludCB3aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9y
KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3Rz
LCBpbnQgLyogd2lkdGggKi8sIGludCAvKiBvZmZzZXQgKi8sIGNvbnN0IENvbG9yJiBjb2xvcikK
QEAgLTIyMSwxMSArNTAwLDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5n
KGNvbnMKIAogICAgIGlmIChyZWN0cy5zaXplKCkgPiAxKSB7CiAgICAgICAgIEJSZWdpb24gICAg
cmVnaW9uOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3RDb3VudDsgKytpKQorICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVjdENvdW50OyArK2kpCiAgICAgICAgICAg
ICByZWdpb24uSW5jbHVkZShCUmVjdChyZWN0c1tpXSkpOwogCi0gICAgICAgIG1fZGF0YS0+bV92
aWV3LT5TZXRIaWdoQ29sb3IoY29sb3IpOwotICAgICAgICBtX2RhdGEtPm1fdmlldy0+U3Ryb2tl
UmVjdChyZWdpb24uRnJhbWUoKSwgQl9NSVhFRF9DT0xPUlMpOworICAgICAgICBtX2RhdGEtPnZp
ZXcoKS0+U2V0SGlnaENvbG9yKGNvbG9yKTsKKyAgICAgICAgbV9kYXRhLT52aWV3KCktPlN0cm9r
ZVJlY3QocmVnaW9uLkZyYW1lKCksIEJfTUlYRURfQ09MT1JTKTsKICAgICB9CiB9CiAKQEAgLTI0
OCw4ICs1MjcsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yTWlzc3BlbAog
CiBGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiByZWN0
OworICAgIEZsb2F0UmVjdCByb3VuZGVkKHJlY3QpOworICAgIHJvdW5kZWQuc2V0WChyb3VuZGYo
cmVjdC54KCkpKTsKKyAgICByb3VuZGVkLnNldFkocm91bmRmKHJlY3QueSgpKSk7CisgICAgcm91
bmRlZC5zZXRXaWR0aChyb3VuZGYocmVjdC53aWR0aCgpKSk7CisgICAgcm91bmRlZC5zZXRIZWln
aHQocm91bmRmKHJlY3QuaGVpZ2h0KCkpKTsKKyAgICByZXR1cm4gcm91bmRlZDsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkK
QEAgLTI1Nyw3ICs1NDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVu
Y3lMCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX2RhdGEtPnB1c2hMYXllcihvcGFjaXR5KTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKQEAgLTI2NSw3ICs1
NDgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICBtX2RhdGEtPnBvcExheWVyKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMjczLDcgKzU1NiwxMSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsCiAgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBtX2RhdGEtPnZpZXcoKS0+UHVzaFN0YXRlKCk7CisgICAgbV9kYXRhLT52aWV3KCktPlNldEhp
Z2hDb2xvcigwLCAwLCAwLCAwKTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+U2V0RHJhd2luZ01vZGUo
Ql9PUF9DT1BZKTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+RmlsbFJlY3QocmVjdCk7CisgICAgbV9k
YXRhLT52aWV3KCktPlBvcFN0YXRlKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgd2lkdGgpCkBAIC0yODEsMTAgKzU2
OCwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGCiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZmxvYXQgb2xkU2l6
ZSA9IG1fZGF0YS0+bV92aWV3LT5QZW5TaXplKCk7Ci0gICAgbV9kYXRhLT5tX3ZpZXctPlNldFBl
blNpemUod2lkdGgpOwotICAgIG1fZGF0YS0+bV92aWV3LT5TdHJva2VSZWN0KHJlY3QsIGdldEhh
aWt1U3Ryb2tlU3R5bGUoKSk7Ci0gICAgbV9kYXRhLT5tX3ZpZXctPlNldFBlblNpemUob2xkU2l6
ZSk7CisgICAgZmxvYXQgb2xkU2l6ZSA9IG1fZGF0YS0+dmlldygpLT5QZW5TaXplKCk7CisgICAg
bV9kYXRhLT52aWV3KCktPlNldFBlblNpemUod2lkdGgpOworICAgIG1fZGF0YS0+dmlldygpLT5T
dHJva2VSZWN0KHJlY3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CisgICAgbV9kYXRhLT52aWV3
KCktPlNldFBlblNpemUob2xkU2l6ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRM
aW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKQEAgLTMwNSw3ICs1OTIsMTIgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAg
ICBtX2RhdGEtPm1fdmlldy0+U2V0TGluZU1vZGUobW9kZSwgbV9kYXRhLT5tX3ZpZXctPkxpbmVK
b2luTW9kZSgpLCBtX2RhdGEtPm1fdmlldy0+TGluZU1pdGVyTGltaXQoKSk7CisgICAgbV9kYXRh
LT52aWV3KCktPlNldExpbmVNb2RlKG1vZGUsIG1fZGF0YS0+dmlldygpLT5MaW5lSm9pbk1vZGUo
KSwgbV9kYXRhLT52aWV3KCktPkxpbmVNaXRlckxpbWl0KCkpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hP
ZmZzZXQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQpAQCAtMzI2LDcgKzYxOCw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm8KICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCi0gICAgbV9kYXRhLT5tX3ZpZXctPlNldExpbmVNb2RlKG1fZGF0YS0+bV92aWV3LT5M
aW5lQ2FwTW9kZSgpLCBtb2RlLCBtX2RhdGEtPm1fdmlldy0+TGluZU1pdGVyTGltaXQoKSk7Cisg
ICAgbV9kYXRhLT52aWV3KCktPlNldExpbmVNb2RlKG1fZGF0YS0+dmlldygpLT5MaW5lQ2FwTW9k
ZSgpLCBtb2RlLCBtX2RhdGEtPnZpZXcoKS0+TGluZU1pdGVyTGltaXQoKSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQpAQCAtMzM0LDcgKzYy
Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KGZsb2EKICAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGEtPm1fdmll
dy0+U2V0TGluZU1vZGUobV9kYXRhLT5tX3ZpZXctPkxpbmVDYXBNb2RlKCksIG1fZGF0YS0+bV92
aWV3LT5MaW5lSm9pbk1vZGUoKSwgbGltaXQpOworICAgIG1fZGF0YS0+dmlldygpLT5TZXRMaW5l
TW9kZShtX2RhdGEtPnZpZXcoKS0+TGluZUNhcE1vZGUoKSwgbV9kYXRhLT52aWV3KCktPkxpbmVK
b2luTW9kZSgpLCBsaW1pdCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRBbHBoYShm
bG9hdCBvcGFjaXR5KQpAQCAtMzQyLDcgKzYzNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRBbHBoYShmbG9hdCBvcGEKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIG1fZGF0YS0+bV9jdXJyZW50TGF5
ZXItPmdsb2JhbEFscGhhID0gKHVpbnQ4KShvcGFjaXR5ICogMjU1LjBmKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBv
cCkKQEAgLTM2Myw3ICs2NTUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRl
T3BlcmF0CiAgICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVy
YXRpb246IFVuc3VwcG9ydGVkIGNvbXBvc2l0ZSBvcGVyYXRpb24gJXNcbiIsCiAgICAgICAgICAg
ICAgICAgY29tcG9zaXRlT3BlcmF0b3JOYW1lKG9wKS51dGY4KCkuZGF0YSgpKTsKICAgICB9Ci0g
ICAgbV9kYXRhLT5tX3ZpZXctPlNldERyYXdpbmdNb2RlKG1vZGUpOworICAgIG1fZGF0YS0+dmll
dygpLT5TZXREcmF3aW5nTW9kZShtb2RlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXAoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTM3MSw3ICs2NjMsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcChjb25zdCBQYXRoJiBwCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhLT5tX3ZpZXctPkNvbnN0cmFpbkNsaXBwaW5nUmVn
aW9uKHBhdGgucGxhdGZvcm1QYXRoKCkpOworICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlwKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zOTQs
MTQgKzY4NiwyMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoCiAK
IEFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldEFmZmluZUNUTSgpIGNvbnN0CiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7Cisg
ICAgLy8gVE9ETzogTWF5YmUgdGhpcyBuZWVkcyB0byB1c2UgdGhlIGFjY3VtdWxhdGVkIHRyYW5z
Zm9ybT8KKyAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4OworICAgIEJQb2ludCBvcmlnaW4gPSBt
X2RhdGEtPnZpZXcoKS0+T3JpZ2luKCk7CisgICAgbWF0cml4LnRyYW5zbGF0ZShvcmlnaW4ueCwg
b3JpZ2luLnkpOworICAgIG1hdHJpeC5zY2FsZShtX2RhdGEtPnZpZXcoKS0+U2NhbGUoKSk7Cisg
ICAgcmV0dXJuIG1hdHJpeDsKIH0KIAogVHJhbnNmb3JtYXRpb25NYXRyaXggR3JhcGhpY3NDb250
ZXh0OjpnZXRDVE0oKSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IFRyYW5zZm9ybWF0aW9uTWF0cml4KCk7CisgICAgLy8gVE9ETzogTWF5YmUgdGhpcyBuZWVkcyB0
byB1c2UgdGhlIGFjY3VtdWxhdGVkIHRyYW5zZm9ybT8KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBtYXRyaXg7CisgICAgQlBvaW50IG9yaWdpbiA9IG1fZGF0YS0+dmlldygpLT5PcmlnaW4oKTsK
KyAgICBtYXRyaXgudHJhbnNsYXRlKG9yaWdpbi54LCBvcmlnaW4ueSk7CisgICAgbWF0cml4LnNj
YWxlKG1fZGF0YS0+dmlldygpLT5TY2FsZSgpKTsKKyAgICByZXR1cm4gbWF0cml4OwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCkBAIC00MDks
MTMgKzcwOSwxOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHgsCiAg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICBtX2RhdGEtPm1fY3VycmVudExheWVyLT5hY2N1bXVsYXRlZE9yaWdp
bi54ICs9IHg7CisgICAgbV9kYXRhLT5tX2N1cnJlbnRMYXllci0+YWNjdW11bGF0ZWRPcmlnaW4u
eSArPSB5OworICAgIEJQb2ludCBvcmlnaW4obV9kYXRhLT52aWV3KCktPk9yaWdpbigpKTsKKyAg
ICBtX2RhdGEtPnZpZXcoKS0+U2V0T3JpZ2luKG9yaWdpbi54ICsgeCwgb3JpZ2luLnkgKyB5KTsK
KworICAgIC8vIFRPRE86IGN1cnJlbnRQYXRoIG5lZWRzIHRvIGJlIHRyYW5zbGF0ZWQgYWxvbmcs
IGFjY29yZGluZyB0byBRdCBpbXBsZW1lbnRhdGlvbgogfQogCiBJbnRQb2ludCBHcmFwaGljc0Nv
bnRleHQ6Om9yaWdpbigpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gSW50
UG9pbnQoMCwgMCk7CisgICAgQlBvaW50IG9yaWdpbiA9IG1fZGF0YS0+dmlldygpLT5PcmlnaW4o
KTsKKyAgICByZXR1cm4gSW50UG9pbnQob3JpZ2luLngsIG9yaWdpbi55KTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCByYWRpYW5zKQpAQCAtNDMxLDcgKzczNiw4IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFMKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIC8vIE5PVEU6IE5vbi11bmlmb3JtIHNjYWxpbmcgbm90IHN1cHBvcnRlZCBvbiBIYWlrdSwg
eWV0LgorICAgIG1fZGF0YS0+dmlldygpLT5TZXRTY2FsZSgoc2l6ZS53aWR0aCgpICsgc2l6ZS5o
ZWlnaHQoKSkgLyAyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3Qg
SW50UmVjdCYgcmVjdCkKQEAgLTQzOSw3ICs3NDUsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcE91dChjb25zdCBJbnRSCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBCUmVnaW9uIHJlZ2lvbihtX2Rh
dGEtPnZpZXcoKS0+Qm91bmRzKCkpOworICAgIHJlZ2lvbi5FeGNsdWRlKHJlY3QpOworICAgIG1f
ZGF0YS0+dmlldygpLT5Db25zdHJhaW5DbGlwcGluZ1JlZ2lvbigmcmVnaW9uKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRFbGxpcHNlSW5SZWN0KGNvbnN0IEludFJlY3QmIHJl
Y3QpCkBAIC00NTUsNiArNzYzLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91
bmRlZFJlYwogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAor
ICAgIC8vIE5PVEU6IFVzZWQgYnkgUmVuZGVyQm94TW9kZWxPYmplY3QgdG8gY2xpcCBvdXQgdGhl
IGlubmVyIHBhcnQgb2YgYW4gYXJjIHdoZW4gcmVuZGluZyBib3ggY29ybmVycy4uLgorICAgIC8v
IFRPRE86IFVzZSB0aGlzIG1ldGhvZCB0byBkZXRlY3QgaWYgd2UgYXJlIHJlbmRlcmluZyBhIHJv
dW5kLWNvcm5lci1ib3guLi4KKwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKQEAgLTQ5Myw3
ICs4MDQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zCiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZvbnQoY29uc3QgRm9udCYgZm9udCkKIHsK
LSAgICBtX2RhdGEtPm1fdmlldy0+U2V0Rm9udChmb250LnByaW1hcnlGb250KCktPnBsYXRmb3Jt
RGF0YSgpLmZvbnQoKSk7CisgICAgbV9kYXRhLT52aWV3KCktPlNldEZvbnQoZm9udC5wcmltYXJ5
Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5mb250KCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSkKQEAgLTUwMSw3ICs4MTIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1TdHJva2VDCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV9kYXRhLT5tX3ZpZXctPlNldEhpZ2hDb2xvcihjb2xvcik7CisgICAgbV9k
YXRhLT52aWV3KCktPlNldEhpZ2hDb2xvcihjb2xvcik7CiB9CiAKIHBhdHRlcm4gR3JhcGhpY3ND
b250ZXh0OjpnZXRIYWlrdVN0cm9rZVN0eWxlKCkKQEAgLTUzNSw3ICs4NDYsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VUCiAgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhLT5tX3ZpZXctPlNldFBlblNpemUo
dGhpY2tuZXNzKTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+U2V0UGVuU2l6ZSh0aGlja25lc3MpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29s
b3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCkBAIC01NDMsNyArODU0LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbAogICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+bV92aWV3LT5TZXRIaWdo
Q29sb3IoY29sb3IpOworICAgIG1fZGF0YS0+dmlldygpLT5TZXRIaWdoQ29sb3IoY29sb3IpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJQbGF0Zm9ybVNoYWRvdygpCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1BhdGhIYWlrdS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwCShyZXZpc2lv
biA1NDI3NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvUGF0aEhhaWt1LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAo
QykgMjAxMCBTdGVwaGFuIEHDn211cyA8c3VwZXJzdGlwcGlAZ214LmRlPgogICoKICAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMzAsMTUgKzMxLDIwIEBACiAKICNpbmNsdWRlICJBZmZp
bmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8UmVnaW9uLmg+CisjaW5jbHVkZSAiU3Ryb2tlU3R5bGVB
cHBsaWVyLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlIDxC
aXRtYXAuaD4KKyNpbmNsdWRlIDxTaGFwZS5oPgorI2luY2x1ZGUgPFZpZXcuaD4KIAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIFBhdGg6OlBhdGgoKQotICAgIDogbV9wYXRoKG5ldyBCUmVnaW9u
KCkpCisgICAgOiBtX3BhdGgobmV3IEJTaGFwZSgpKQogewogfQogCkBAIC00OCw3ICs1NCw3IEBA
IFBhdGg6On5QYXRoKCkKIH0KIAogUGF0aDo6UGF0aChjb25zdCBQYXRoJiBvdGhlcikKLSAgICA6
IG1fcGF0aChuZXcgQlJlZ2lvbigqb3RoZXIucGxhdGZvcm1QYXRoKCkpKQorICAgIDogbV9wYXRo
KG5ldyBCU2hhcGUoKm90aGVyLnBsYXRmb3JtUGF0aCgpKSkKIHsKIH0KIApAQCAtNjcsMjggKzcz
LDEyNSBAQCBib29sIFBhdGg6Omhhc0N1cnJlbnRQb2ludCgpIGNvbnN0CiAKIGJvb2wgUGF0aDo6
Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fcGF0aC0+Q29udGFpbnMocG9pbnQpOworICAgIC8vIFRPRE86IFRoaXMg
aXMgcHJvYmFibHkgdG9vIGV4cGVuc2l2ZS4gVXNlIG9uZSBpbnN0YW5jZSBvZiBhIHNjcmF0Y2gK
KyAgICAvLyBpbWFnZS4KKyAgICBCQml0bWFwIGJpdG1hcChCUmVjdCgwLCAwLCAwLCAwKSwKKyAg
ICAgICAgQl9CSVRNQVBfQ0xFQVJfVE9fV0hJVEUgfCBCX0JJVE1BUF9BQ0NFUFRTX1ZJRVdTLCBC
X1JHQjMyKTsKKyAgICBCVmlldyB2aWV3KEJSZWN0KDAsIDAsIDAsIDApLCAiIiwgMCwgMCk7Cisg
ICAgYml0bWFwLkxvY2soKTsKKyAgICBiaXRtYXAuQWRkQ2hpbGQoJnZpZXcpOworICAgIC8vIEN1
cnJlbnQgcGVuIGxvY2F0aW9uIGlzIHVzZWQgYXMgb3JpZ2luIGZvciB0aGUgc2hhcGUuCisgICAg
dmlldy5Nb3ZlUGVuVG8oLXBvaW50LngoKSwgLXBvaW50LnkoKSk7CisgICAgLy8gVE9ETzogSGFu
ZGxlIFdpbmRSdWxlLi4uIChuZWVkcyBzdXBwb3J0IGluIEJWaWV3LCB0aGUgYmFja2VuZCBhbHJl
YWR5CisgICAgLy8gc3VwcG9ydCBpdC4pCisgICAgdmlldy5GaWxsU2hhcGUobV9wYXRoKTsKKyAg
ICB2aWV3LlN5bmMoKTsKKworICAgIHVpbnQ4KiBiaXRzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
OCo+KGJpdG1hcC5CaXRzKCkpOworICAgIGJvb2wgcmVzdWx0ID0gYml0c1swXSA8IDEyODsKKwor
ICAgIHZpZXcuUmVtb3ZlU2VsZigpOworICAgIGJpdG1hcC5VbmxvY2soKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKFN0cm9rZVN0eWxlQXBwbGll
ciogYXBwbGllciwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgQVNTRVJU
KGFwcGxpZXIpOworCisgICAgLy8gVE9ETzogVGhpcyBpcyBwcm9iYWJseSB0b28gZXhwZW5zaXZl
LiBVc2Ugb25lIGluc3RhbmNlIG9mIGEgc2NyYXRjaAorICAgIC8vIGltYWdlLCBzZWUgYWJvdmUu
CisgICAgLy8gVE9ETzogQ29kZSBkdXBsaWNhdGlvbiBhYm92ZS4KKyAgICBCQml0bWFwIGJpdG1h
cChCUmVjdCgwLCAwLCAwLCAwKSwKKyAgICAgICAgQl9CSVRNQVBfQ0xFQVJfVE9fV0hJVEUgfCBC
X0JJVE1BUF9BQ0NFUFRTX1ZJRVdTLCBCX1JHQjMyKTsKKyAgICBCVmlldyB2aWV3KEJSZWN0KDAs
IDAsIDAsIDApLCAiIiwgMCwgMCk7CisgICAgYml0bWFwLkxvY2soKTsKKyAgICBiaXRtYXAuQWRk
Q2hpbGQoJnZpZXcpOworICAgIC8vIEN1cnJlbnQgcGVuIGxvY2F0aW9uIGlzIHVzZWQgYXMgb3Jp
Z2luIGZvciB0aGUgc2hhcGUuCisgICAgdmlldy5Nb3ZlUGVuVG8oLXBvaW50LngoKSwgLXBvaW50
LnkoKSk7CisgICAgLy8gVE9ETzogSGFuZGxlIFdpbmRSdWxlLi4uIChuZWVkcyBzdXBwb3J0IGlu
IEJWaWV3LCB0aGUgYmFja2VuZCBhbHJlYWR5CisgICAgLy8gc3VwcG9ydCBpdC4pCisgICAgR3Jh
cGhpY3NDb250ZXh0IGNvbnRleHQoJnZpZXcpOworICAgIGFwcGxpZXItPnN0cm9rZVN0eWxlKCZj
b250ZXh0KTsKKyAgICAKKyAgICB2aWV3LlN0cm9rZVNoYXBlKG1fcGF0aCk7CisgICAgdmlldy5T
eW5jKCk7CisKKyAgICB1aW50OCogYml0cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDgqPihiaXRt
YXAuQml0cygpKTsKKyAgICBib29sIHJlc3VsdCA9IGJpdHNbMF0gPCAxMjg7CisKKyAgICB2aWV3
LlJlbW92ZVNlbGYoKTsKKyAgICBiaXRtYXAuVW5sb2NrKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogdm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gQlNoYXBlSXRlcmF0b3IgYWxsb3dzIHVzIHRvIG1v
ZGlmeSB0aGUgcGF0aCBkYXRhICJpbiBwbGFjZSIKKyAgICBjbGFzcyBUcmFuc2xhdGVJdGVyYXRv
ciA6IHB1YmxpYyBCU2hhcGVJdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBUcmFuc2xh
dGVJdGVyYXRvcihCU2hhcGUqIHNoYXBlLCBjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgICAg
ICAgICA6IG1fc2hhcGUoc2hhcGUpCisgICAgICAgICAgICAsIG1fc2l6ZShzaXplKQorICAgICAg
ICB7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBJdGVyYXRlTW92ZVRvKEJQ
b2ludCogcG9pbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBvaW50LT54ICs9IG1fc2l6ZS53
aWR0aCgpOworICAgICAgICAgICAgcmV0dXJuIEJfT0s7CisgICAgICAgIH0KKworICAgICAgICB2
aXJ0dWFsIHN0YXR1c190IEl0ZXJhdGVMaW5lVG8oaW50MzIgbGluZUNvdW50LCBCUG9pbnQqIGxp
bmVQdHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChsaW5lQ291bnQtLSkgeworICAg
ICAgICAgICAgICAgIGxpbmVQdHMtPnggKz0gbV9zaXplLndpZHRoKCk7CisgICAgICAgICAgICAg
ICAgbGluZVB0cy0+eSArPSBtX3NpemUuaGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgbGluZVB0
cysrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEJfT0s7CisgICAgICAgIH0K
KworICAgICAgICB2aXJ0dWFsIHN0YXR1c190IEl0ZXJhdGVCZXppZXJUbyhpbnQzMiBiZXppZXJD
b3VudCwgQlBvaW50KiBiZXppZXJQdHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChi
ZXppZXJDb3VudC0tKSB7CisgICAgICAgICAgICAgICAgYmV6aWVyUHRzWzBdLnggKz0gbV9zaXpl
LndpZHRoKCk7CisgICAgICAgICAgICAgICAgYmV6aWVyUHRzWzBdLnkgKz0gbV9zaXplLmhlaWdo
dCgpOworICAgICAgICAgICAgICAgIGJlemllclB0c1sxXS54ICs9IG1fc2l6ZS53aWR0aCgpOwor
ICAgICAgICAgICAgICAgIGJlemllclB0c1sxXS55ICs9IG1fc2l6ZS5oZWlnaHQoKTsKKyAgICAg
ICAgICAgICAgICBiZXppZXJQdHNbMl0ueCArPSBtX3NpemUud2lkdGgoKTsKKyAgICAgICAgICAg
ICAgICBiZXppZXJQdHNbMl0ueSArPSBtX3NpemUuaGVpZ2h0KCk7CisgICAgICAgICAgICAgICAg
YmV6aWVyUHRzICs9IDM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gQl9PSzsK
KyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgc3RhdHVzX3QgSXRlcmF0ZUNsb3NlKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEJfT0s7CisgICAgICAgIH0KKworICAgIHByaXZh
dGU6CisgICAgICAgIEJTaGFwZSogbV9zaGFwZTsKKyAgICAgICAgY29uc3QgRmxvYXRTaXplJiBt
X3NpemU7CisgICAgfSB0cmFuc2xhdGVJdGVyYXRvcihtX3BhdGgsIHNpemUpOworCisgICAgdHJh
bnNsYXRlSXRlcmF0b3IuSXRlcmF0ZShtX3BhdGgpOwogfQogCiBGbG9hdFJlY3QgUGF0aDo6Ym91
bmRpbmdSZWN0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9wYXRoLT5GcmFtZSgpOworICAgIHJl
dHVybiBtX3BhdGgtPkJvdW5kcygpOwogfQogCiB2b2lkIFBhdGg6Om1vdmVUbyhjb25zdCBGbG9h
dFBvaW50JiBwb2ludCkKIHsKLSAgICAvLyBGSVhNRTogVXNlIE9mZnNldEJ5PwotICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgQlJlY3QgYm91bmRzID0gbV9wYXRoLT5Cb3VuZHMoKTsKKyAgICB0
cmFuc2xhdGUoRmxvYXRTaXplKHBvaW50LngoKSAtIGJvdW5kcy5sZWZ0LCBwb2ludC55KCkgLSBi
b3VuZHMudG9wKSk7CiB9CiAKIHZvaWQgUGF0aDo6YWRkTGluZVRvKGNvbnN0IEZsb2F0UG9pbnQm
IHApCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX3BhdGgtPkxpbmVUbyhwKTsKIH0K
IAogdm9pZCBQYXRoOjphZGRRdWFkQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjcCwgY29uc3Qg
RmxvYXRQb2ludCYgcCkKQEAgLTk4LDcgKzIwMSwxMSBAQCB2b2lkIFBhdGg6OmFkZFF1YWRDdXJ2
ZVRvKGNvbnN0IEZsb2F0UG9pCiAKIHZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBG
bG9hdFBvaW50JiBjcDEsIGNvbnN0IEZsb2F0UG9pbnQmIGNwMiwgY29uc3QgRmxvYXRQb2ludCYg
cCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIEJQb2ludCBwb2ludHNbM107CisgICAg
cG9pbnRzWzBdID0gY3AxOworICAgIHBvaW50c1sxXSA9IGNwMjsKKyAgICBwb2ludHNbMl0gPSBw
OworICAgIG1fcGF0aC0+QmV6aWVyVG8ocG9pbnRzKTsKIH0KIAogdm9pZCBQYXRoOjphZGRBcmNU
byhjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHJhZGl1
cykKQEAgLTEwOCw3ICsyMTUsNyBAQCB2b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0UG9p
bnQmIHAxCiAKIHZvaWQgUGF0aDo6Y2xvc2VTdWJwYXRoKCkKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIG1fcGF0aC0+Q2xvc2UoKTsKIH0KIAogdm9pZCBQYXRoOjphZGRBcmMoY29uc3Qg
RmxvYXRQb2ludCYgcCwgZmxvYXQgciwgZmxvYXQgc2FyLCBmbG9hdCBlYXIsIGJvb2wgYW50aWNs
b2Nrd2lzZSkKQEAgLTExOCw3ICsyMjUsMTIgQEAgdm9pZCBQYXRoOjphZGRBcmMoY29uc3QgRmxv
YXRQb2ludCYgcCwgZgogCiB2b2lkIFBhdGg6OmFkZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQog
ewotICAgIG1fcGF0aC0+SW5jbHVkZShyKTsKKyAgICBtX3BhdGgtPkNsb3NlKCk7CisgICAgbV9w
YXRoLT5Nb3ZlVG8oQlBvaW50KHIueCgpLCByLnkoKSkpOworICAgIG1fcGF0aC0+TGluZVRvKEJQ
b2ludChyLngoKSArIHIud2lkdGgoKSwgci55KCkpKTsKKyAgICBtX3BhdGgtPkxpbmVUbyhCUG9p
bnQoci54KCkgKyByLndpZHRoKCksIHIueSgpICsgci5oZWlnaHQoKSkpOworICAgIG1fcGF0aC0+
TGluZVRvKEJQb2ludChyLngoKSwgci55KCkgKyByLmhlaWdodCgpKSk7CisgICAgbV9wYXRoLT5D
bG9zZSgpOwogfQogCiB2b2lkIFBhdGg6OmFkZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByKQpA
QCAtMTI4LDEyICsyNDAsMTIgQEAgdm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYgcgogCiB2b2lkIFBhdGg6OmNsZWFyKCkKIHsKLSAgICBtX3BhdGgtPk1ha2VFbXB0eSgpOwor
ICAgIG1fcGF0aC0+Q2xlYXIoKTsKIH0KIAogYm9vbCBQYXRoOjppc0VtcHR5KCkgY29uc3QKIHsK
LSAgICByZXR1cm4gIW1fcGF0aC0+RnJhbWUoKS5Jc1ZhbGlkKCk7CisgICAgcmV0dXJuICFtX3Bh
dGgtPkJvdW5kcygpLklzVmFsaWQoKTsKIH0KIAogU3RyaW5nIFBhdGg6OmRlYnVnU3RyaW5nKCkg
Y29uc3QKQEAgLTE0OSwxOCArMjYxLDEwNiBAQCB2b2lkIFBhdGg6OmFwcGx5KHZvaWQqIGluZm8s
IFBhdGhBcHBsaWVyCiAKIHZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdHJhbnNmb3JtKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gQlNoYXBlSXRl
cmF0b3IgYWxsb3dzIHVzIHRvIG1vZGlmeSB0aGUgcGF0aCBkYXRhICJpbiBwbGFjZSIKKyAgICBj
bGFzcyBUcmFuc2Zvcm1JdGVyYXRvciA6IHB1YmxpYyBCU2hhcGVJdGVyYXRvciB7CisgICAgcHVi
bGljOgorICAgICAgICBUcmFuc2Zvcm1JdGVyYXRvcihCU2hhcGUqIHNoYXBlLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKKyAgICAgICAgICAgIDogbV9zaGFwZShzaGFwZSkKKyAg
ICAgICAgICAgICwgbV90cmFuc2Zvcm0odHJhbnNmb3JtKQorICAgICAgICB7CisgICAgICAgIH0K
KyAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBJdGVyYXRlTW92ZVRvKEJQb2ludCogcG9pbnQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgICpwb2ludCA9IG1fdHJhbnNmb3JtLm1hcFBvaW50KCpwb2lu
dCk7CisgICAgICAgICAgICByZXR1cm4gQl9PSzsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1
YWwgc3RhdHVzX3QgSXRlcmF0ZUxpbmVUbyhpbnQzMiBsaW5lQ291bnQsIEJQb2ludCogbGluZVB0
cykKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGxpbmVDb3VudC0tKSB7CisgICAgICAg
ICAgICAgICAgKmxpbmVQdHMgPSBtX3RyYW5zZm9ybS5tYXBQb2ludCgqbGluZVB0cyk7CisgICAg
ICAgICAgICAgICAgbGluZVB0cysrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IEJfT0s7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHN0YXR1c190IEl0ZXJhdGVCZXpp
ZXJUbyhpbnQzMiBiZXppZXJDb3VudCwgQlBvaW50KiBiZXppZXJQdHMpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHdoaWxlIChiZXppZXJDb3VudC0tKSB7CisgICAgICAgICAgICAgICAgYmV6aWVy
UHRzWzBdID0gbV90cmFuc2Zvcm0ubWFwUG9pbnQoYmV6aWVyUHRzWzBdKTsKKyAgICAgICAgICAg
ICAgICBiZXppZXJQdHNbMV0gPSBtX3RyYW5zZm9ybS5tYXBQb2ludChiZXppZXJQdHNbMV0pOwor
ICAgICAgICAgICAgICAgIGJlemllclB0c1syXSA9IG1fdHJhbnNmb3JtLm1hcFBvaW50KGJlemll
clB0c1syXSk7CisgICAgICAgICAgICAgICAgYmV6aWVyUHRzICs9IDM7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gQl9PSzsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwg
c3RhdHVzX3QgSXRlcmF0ZUNsb3NlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEJf
T0s7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEJTaGFwZSogbV9zaGFwZTsK
KyAgICAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtX3RyYW5zZm9ybTsKKyAgICB9IHRyYW5z
Zm9ybUl0ZXJhdG9yKG1fcGF0aCwgdHJhbnNmb3JtKTsKKworICAgIHRyYW5zZm9ybUl0ZXJhdG9y
Lkl0ZXJhdGUobV9wYXRoKTsKIH0KIAogdm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IC8vIEJTaGFwZUl0ZXJhdG9yIGFsbG93cyB1cyB0byBtb2RpZnkgdGhlIHBhdGggZGF0YSAiaW4g
cGxhY2UiCisgICAgY2xhc3MgVHJhbnNmb3JtSXRlcmF0b3IgOiBwdWJsaWMgQlNoYXBlSXRlcmF0
b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgVHJhbnNmb3JtSXRlcmF0b3IoQlNoYXBlKiBzaGFw
ZSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKKyAgICAgICAgICAgIDog
bV9zaGFwZShzaGFwZSkKKyAgICAgICAgICAgICwgbV90cmFuc2Zvcm0odHJhbnNmb3JtKQorICAg
ICAgICB7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBJdGVyYXRlTW92ZVRv
KEJQb2ludCogcG9pbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgICpwb2ludCA9IG1fdHJhbnNm
b3JtLm1hcFBvaW50KCpwb2ludCk7CisgICAgICAgICAgICByZXR1cm4gQl9PSzsKKyAgICAgICAg
fQorCisgICAgICAgIHZpcnR1YWwgc3RhdHVzX3QgSXRlcmF0ZUxpbmVUbyhpbnQzMiBsaW5lQ291
bnQsIEJQb2ludCogbGluZVB0cykKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGxpbmVD
b3VudC0tKSB7CisgICAgICAgICAgICAgICAgKmxpbmVQdHMgPSBtX3RyYW5zZm9ybS5tYXBQb2lu
dCgqbGluZVB0cyk7CisgICAgICAgICAgICAgICAgbGluZVB0cysrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIEJfT0s7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHN0
YXR1c190IEl0ZXJhdGVCZXppZXJUbyhpbnQzMiBiZXppZXJDb3VudCwgQlBvaW50KiBiZXppZXJQ
dHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChiZXppZXJDb3VudC0tKSB7CisgICAg
ICAgICAgICAgICAgYmV6aWVyUHRzWzBdID0gbV90cmFuc2Zvcm0ubWFwUG9pbnQoYmV6aWVyUHRz
WzBdKTsKKyAgICAgICAgICAgICAgICBiZXppZXJQdHNbMV0gPSBtX3RyYW5zZm9ybS5tYXBQb2lu
dChiZXppZXJQdHNbMV0pOworICAgICAgICAgICAgICAgIGJlemllclB0c1syXSA9IG1fdHJhbnNm
b3JtLm1hcFBvaW50KGJlemllclB0c1syXSk7CisgICAgICAgICAgICAgICAgYmV6aWVyUHRzICs9
IDM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gQl9PSzsKKyAgICAgICAgfQor
CisgICAgICAgIHZpcnR1YWwgc3RhdHVzX3QgSXRlcmF0ZUNsb3NlKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIEJfT0s7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAg
IEJTaGFwZSogbV9zaGFwZTsKKyAgICAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1f
dHJhbnNmb3JtOworICAgIH0gdHJhbnNmb3JtSXRlcmF0b3IobV9wYXRoLCB0cmFuc2Zvcm0pOwor
CisgICAgdHJhbnNmb3JtSXRlcmF0b3IuSXRlcmF0ZShtX3BhdGgpOwogfQogCiBGbG9hdFJlY3Qg
UGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KFN0cm9rZVN0eWxlQXBwbGllciogYXBwbGllcikKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1
cm4gbV9wYXRoLT5Cb3VuZHMoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48990</attachid>
            <date>2010-02-18 02:44:45 -0800</date>
            <delta_ts>2010-06-11 10:46:34 -0700</delta_ts>
            <desc>Implments creating and filling platform gradients</desc>
            <filename>gradient.diff</filename>
            <type>text/plain</type>
            <size>3552</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDk1MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMTAtMDItMTggIFN0ZXBoYW4gQcOfbXVzICA8c3VwZXJzdGlwcGlA
Z214LmRlPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtIYWlrdV0gSW1wbGVtZW50IGNyZWF0aW5nIGFuZCBmaWxsaW5nIHBsYXRmb3JtIGdyYWRpZW50
cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0Njgz
CisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYWRpZW50Lmg6CisgICAgICAgICAgICBUeXBlZGVmIFBsYXRmb3JtR3Jh
ZGllbnQgdG8gQkdyYWRpZW50CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3Jh
ZGllbnRIYWlrdS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6cGxhdGZvcm1EZXN0
cm95KToKKyAgICAgICAgICAgIERlbGV0ZSB0aGUgY2FjaGVkIEJHcmFkaWVudCBvYmplY3QuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6cGxhdGZvcm1HcmFkaWVudCk6CisgICAgICAgICAg
ICBDcmVhdGUgYSBCR3JhZGllbnQgb2JqZWN0IGFjY29yZGluZyB0byB0aGUgdHlwZSBvZiBHcmFk
aWVudC4KKyAgICAgICAgICAgIFJldHVybiB0aGUgY2FjaGVkIG9iamVjdC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYWRpZW50OjpmaWxsKToKKyAgICAgICAgICAgIHVzZSBCVmlldyBBUEkgdG8gZmls
bCB3aXRoIHRoZSBwbGF0Zm9ybSBncmFkaWVudC4KKwogMjAxMC0wMi0xOCAgQmVuIE11cmRvY2gg
IDxiZW5tQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTmF0ZSBDaGFwaW4uCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCShyZXZpc2lvbiA1NDkzMikKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NTcsNiArNTcsOSBAQCB0eXBlZGVmIGNhaXJvX3BhdHRlcm5fdCogUGxhdGZvcm1HcmFkaWVuCiBj
bGFzcyBTa1NoYWRlcjsKIHR5cGVkZWYgY2xhc3MgU2tTaGFkZXIqIFBsYXRmb3JtR3JhZGllbnQ7
CiB0eXBlZGVmIGNsYXNzIFNrU2hhZGVyKiBQbGF0Zm9ybVBhdHRlcm47CisjZWxpZiBQTEFURk9S
TShIQUlLVSkKK2NsYXNzIEJHcmFkaWVudDsKK3R5cGVkZWYgQkdyYWRpZW50KiBQbGF0Zm9ybUdy
YWRpZW50OwogI2Vsc2UKIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1HcmFkaWVudDsKICNlbmRpZgpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFkaWVudEhhaWt1LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYWRpZW50SGFp
a3UuY3BwCShyZXZpc2lvbiA1NDkzMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFp
a3UvR3JhZGllbnRIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA4IEtldmluIE9sbGl2aWVyIDxrZXZpbm9AdGhlb2xsaXZpZXJz
LmNvbT4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1l
IFNpbW9uIDxzaW1vbi5tYXhpbWVAdGhlb2xsaXZpZXJzLmNvbT4KKyAqIENvcHlyaWdodCAoQykg
MjAxMCBTdGVwaGFuIEHDn211cyA8c3VwZXJzdGlwcGlAZ214LmRlPgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNywyNiArMjgsNDUgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJHcmFkaWVudC5oIgogCi0jaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCi0jaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlIDxHcmFkaWVudExpbmVhci5oPgorI2luY2x1ZGUgPEdyYWRpZW50UmFkaWFsLmg+CisjaW5j
bHVkZSA8Vmlldy5oPgogCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBHcmFkaWVudDo6
cGxhdGZvcm1EZXN0cm95KCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGRlbGV0ZSBt
X2dyYWRpZW50OwogfQogCiBQbGF0Zm9ybUdyYWRpZW50IEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRp
ZW50KCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOworICAgIGlmICht
X2dyYWRpZW50KQorICAgICAgICByZXR1cm4gbV9ncmFkaWVudDsKKworICAgIGlmIChtX3JhZGlh
bCkgeworICAgICAgICAvLyBUT0RPOiBTdXBwb3J0IG1fcjA/CisgICAgICAgIG1fZ3JhZGllbnQg
PSBuZXcgQkdyYWRpZW50UmFkaWFsKG1fcDAsIG1fcjEpOworICAgIH0gZWxzZQorICAgICAgICBt
X2dyYWRpZW50ID0gbmV3IEJHcmFkaWVudExpbmVhcihtX3AwLCBtX3AxKTsKKyAgICBzaXplX3Qg
c2l6ZSA9IG1fc3RvcHMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsg
aSsrKSB7CisgICAgICAgIGNvbnN0IENvbG9yU3RvcCYgc3RvcCA9IG1fc3RvcHNbaV07CisgICAg
ICAgIHJnYl9jb2xvciBjb2xvcjsKKyAgICAgICAgY29sb3IucmVkID0gc3RhdGljX2Nhc3Q8dWlu
dDg+KHN0b3AucmVkICogMjU1KTsKKyAgICAgICAgY29sb3IuZ3JlZW4gPSBzdGF0aWNfY2FzdDx1
aW50OD4oc3RvcC5ncmVlbiAqIDI1NSk7CisgICAgICAgIGNvbG9yLmJsdWUgPSBzdGF0aWNfY2Fz
dDx1aW50OD4oc3RvcC5ibHVlICogMjU1KTsKKyAgICAgICAgY29sb3IuYWxwaGEgPSBzdGF0aWNf
Y2FzdDx1aW50OD4oc3RvcC5hbHBoYSAqIDI1NSk7CisgICAgICAgIG1fZ3JhZGllbnQtPkFkZENv
bG9yKGNvbG9yLCBzdG9wLnN0b3ApOworICAgIH0KKyAgICByZXR1cm4gbV9ncmFkaWVudDsKIH0K
IAotdm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3Qm
KQordm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLT5GaWxsUmVjdChyZWN0LCAqbV9ncmFkaWVudCk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48991</attachid>
            <date>2010-02-18 02:58:32 -0800</date>
            <delta_ts>2010-02-23 01:54:26 -0800</delta_ts>
            <desc> Implement native Path backend.</desc>
            <filename>path.diff</filename>
            <type>text/plain</type>
            <size>11162</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDk1MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDkgQEAKKzIwMTAtMDItMTggIFN0ZXBoYW4gQcOfbXVzICA8c3VwZXJzdGlwcGlA
Z214LmRlPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtIYWlrdV0gSW1wbGVtZW50IG5hdGl2ZSBQYXRoIGJhY2tlbmQuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDY4MworCisgICAgICAgIENvdmVyZWQg
YnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmg6
CisgICAgICAgICAgICBDaGFuZ2VkIGRlZmluaXRpb24gb2YgUGxhdGZvcm1QYXRoIGZyb20gQlJl
Z2lvbiB0byBCU2hhcGUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvUGF0aEhh
aWt1LmNwcDoKKyAgICAgICAgICAgIEltcGxlbWVudGVkIAorICAgICAgICAoV2ViQ29yZTo6UGF0
aDo6UGF0aCk6CisgICAgICAgICAgICBDcmVhdGUgQlNoYXBlIG9iamVjdHMuCisgICAgICAgIChX
ZWJDb3JlOjpQYXRoOjpvcGVyYXRvcj0pOgorICAgICAgICAgICAgRml4ZWQgbWVtb3J5IGNvcnJ1
cHRpb24sIGN1cnRlc3kgb2YgTWljaGFlbCBMb3R6LiBXZSBjYW4ndCBqdXN0IGFzc2lnbiBwb2lu
dGVycyEKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmNvbnRhaW5zKToKKyAgICAgICAgICAgIElt
cGxlbWVudGVkIHNpbWlsYXJpbHkgdG8gUXQgcG9ydDogUmVuZGVyIGludG8gYSB0ZW1wb3J5IDF4
MSBiaXRtYXAgZm9yIGhpdCB0ZXN0aW5nLgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6c3Ryb2tl
Q29udGFpbnMpOgorICAgICAgICAgICAgU2FtZSBhcyBjb250YWlucygpLgorICAgICAgICAoV2Vi
Q29yZTo6UGF0aDo6dHJhbnNsYXRlKToKKyAgICAgICAgICAgIEltcGxlbWVudGVkIHZpYSBhIEJT
aGFwZUl0ZXJhdG9yIHRvIG1vZGlmeSBjb29yZHMgaW4gcGxhY2UuCisgICAgICAgIChXZWJDb3Jl
OjpQYXRoOjpib3VuZGluZ1JlY3QpOgorICAgICAgICAgICAgSW1wbGVtZW50ZWQuCisgICAgICAg
IChXZWJDb3JlOjpQYXRoOjptb3ZlVG8pOgorICAgICAgICAgICAgSW1wbGVtZW50ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpQYXRoOjphZGRMaW5lVG8pOgorICAgICAgICAgICAgSW1wbGVtZW50ZWQu
CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjphZGRRdWFkQ3VydmVUbyk6CisgICAgICAgICAgICBJ
bXBsZW1lbnRlZCAoY3VydGVzeSBvZiBNaWNoYWVsIExvdHopLgorICAgICAgICAoV2ViQ29yZTo6
UGF0aDo6YWRkQmV6aWVyQ3VydmVUbyk6CisgICAgICAgICAgICBJbXBsZW1lbnRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlBhdGg6OmNsb3NlU3VicGF0aCk6CisgICAgICAgICAgICBJbXBsZW1lbnRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZFJlY3QpOgorICAgICAgICAgICAgSW1wbGVt
ZW50ZWQuCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpjbGVhcik6CisgICAgICAgICAgICBJbXBs
ZW1lbnRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmlzRW1wdHkpOgorICAgICAgICAgICAg
SW1wbGVtZW50ZWQuCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjp0cmFuc2Zvcm0pOgorICAgICAg
ICAgICAgSW1wbGVtZW50ZWQgdmlhIGEgQlNoYXBlSXRlcmF0b3IgdG8gbW9kaWZ5IGNvb3JkcyBp
biBwbGFjZS4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdCk6Cisg
ICAgICAgICAgICBOb3QgYWN0dWFsbHkgaW1wbGVtZW50ZWQsIGJ1dCBhdCBsZWFzdCByZXR1cm4g
Ym91bmRzIG9mIGZpbGwgcGF0aC4KKwogMjAxMC0wMi0xOCAgQmVuIE11cmRvY2ggIDxiZW5tQGdv
b2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTmF0ZSBDaGFwaW4uCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BhdGguaAkocmV2aXNpb24gNTQ5MzIpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BhdGguaAkod29ya2luZyBjb3B5KQpAQCAtNDgsOCArNDgsOCBAQCB0eXBlZGVm
IFdlYkNvcmU6OkNhaXJvUGF0aCBQbGF0Zm9ybVBhdGg7CiBjbGFzcyBTa1BhdGg7CiB0eXBlZGVm
IFNrUGF0aCBQbGF0Zm9ybVBhdGg7CiAjZWxpZiBQTEFURk9STShIQUlLVSkKLWNsYXNzIEJSZWdp
b247Ci10eXBlZGVmIEJSZWdpb24gUGxhdGZvcm1QYXRoOworY2xhc3MgQlNoYXBlOwordHlwZWRl
ZiBCU2hhcGUgUGxhdGZvcm1QYXRoOwogI2VsaWYgT1MoV0lOQ0UpCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgY2xhc3MgUGxhdGZvcm1QYXRoOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvUGF0aEhhaWt1LmNwcAkocmV2aXNpb24gNTQ5MzIpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1BhdGhIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8
bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU3RlcGhhbiBBw59t
dXMgPHN1cGVyc3RpcHBpQGdteC5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBNaWNoYWVsIExv
dHogPG1tbHJAbWxvdHouY2g+CiAgKgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0z
MCwxNSArMzIsMjAgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDxS
ZWdpb24uaD4KKyNpbmNsdWRlICJTdHJva2VTdHlsZUFwcGxpZXIuaCIKKyNpbmNsdWRlICJUcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgPEJpdG1hcC5oPgorI2luY2x1ZGUgPFNoYXBl
Lmg+CisjaW5jbHVkZSA8Vmlldy5oPgogCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGF0aDo6
UGF0aCgpCi0gICAgOiBtX3BhdGgobmV3IEJSZWdpb24oKSkKKyAgICA6IG1fcGF0aChuZXcgQlNo
YXBlKCkpCiB7CiB9CiAKQEAgLTQ4LDE0ICs1NSwxNiBAQCBQYXRoOjp+UGF0aCgpCiB9CiAKIFBh
dGg6OlBhdGgoY29uc3QgUGF0aCYgb3RoZXIpCi0gICAgOiBtX3BhdGgobmV3IEJSZWdpb24oKm90
aGVyLnBsYXRmb3JtUGF0aCgpKSkKKyAgICA6IG1fcGF0aChuZXcgQlNoYXBlKCpvdGhlci5wbGF0
Zm9ybVBhdGgoKSkpCiB7CiB9CiAKIFBhdGgmIFBhdGg6Om9wZXJhdG9yPShjb25zdCBQYXRoJiBv
dGhlcikKIHsKLSAgICBpZiAoJm90aGVyICE9IHRoaXMpCi0gICAgICAgIG1fcGF0aCA9IG90aGVy
LnBsYXRmb3JtUGF0aCgpOworICAgIGlmICgmb3RoZXIgIT0gdGhpcykgeworICAgICAgICBtX3Bh
dGgtPkNsZWFyKCk7CisgICAgICAgIG1fcGF0aC0+QWRkU2hhcGUob3RoZXIucGxhdGZvcm1QYXRo
KCkpOworICAgIH0KIAogICAgIHJldHVybiAqdGhpczsKIH0KQEAgLTY3LDM4ICs3NiwxNTAgQEAg
Ym9vbCBQYXRoOjpoYXNDdXJyZW50UG9pbnQoKSBjb25zdAogCiBib29sIFBhdGg6OmNvbnRhaW5z
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBXaW5kUnVsZSBydWxlKSBjb25zdAogewotICAgIHJl
dHVybiBtX3BhdGgtPkNvbnRhaW5zKHBvaW50KTsKKyAgICAvLyBUT0RPOiBUaGlzIGlzIHByb2Jh
Ymx5IHRvbyBleHBlbnNpdmUuIFVzZSBvbmUgaW5zdGFuY2Ugb2YgYSBzY3JhdGNoCisgICAgLy8g
aW1hZ2UuCisgICAgQkJpdG1hcCBiaXRtYXAoQlJlY3QoMCwgMCwgMCwgMCksCisgICAgICAgIEJf
QklUTUFQX0NMRUFSX1RPX1dISVRFIHwgQl9CSVRNQVBfQUNDRVBUU19WSUVXUywgQl9SR0IzMik7
CisgICAgQlZpZXcgdmlldyhCUmVjdCgwLCAwLCAwLCAwKSwgIiIsIDAsIDApOworICAgIGJpdG1h
cC5Mb2NrKCk7CisgICAgYml0bWFwLkFkZENoaWxkKCZ2aWV3KTsKKyAgICAvLyBDdXJyZW50IHBl
biBsb2NhdGlvbiBpcyB1c2VkIGFzIG9yaWdpbiBmb3IgdGhlIHNoYXBlLgorICAgIHZpZXcuTW92
ZVBlblRvKC1wb2ludC54KCksIC1wb2ludC55KCkpOworICAgIC8vIFRPRE86IEhhbmRsZSBXaW5k
UnVsZS4uLiAobmVlZHMgc3VwcG9ydCBpbiBCVmlldywgdGhlIGJhY2tlbmQgYWxyZWFkeQorICAg
IC8vIHN1cHBvcnQgaXQuKQorICAgIHZpZXcuRmlsbFNoYXBlKG1fcGF0aCk7CisgICAgdmlldy5T
eW5jKCk7CisKKyAgICB1aW50OCogYml0cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDgqPihiaXRt
YXAuQml0cygpKTsKKyAgICBib29sIHJlc3VsdCA9IGJpdHNbMF0gPCAxMjg7CisKKyAgICB2aWV3
LlJlbW92ZVNlbGYoKTsKKyAgICBiaXRtYXAuVW5sb2NrKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhTdHJva2VTdHlsZUFwcGxpZXIqIGFwcGxp
ZXIsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIEFTU0VSVChhcHBsaWVy
KTsKKworICAgIC8vIFRPRE86IFRoaXMgaXMgcHJvYmFibHkgdG9vIGV4cGVuc2l2ZS4gVXNlIG9u
ZSBpbnN0YW5jZSBvZiBhIHNjcmF0Y2gKKyAgICAvLyBpbWFnZSwgc2VlIGFib3ZlLgorICAgIC8v
IFRPRE86IENvZGUgZHVwbGljYXRpb24gYWJvdmUuCisgICAgQkJpdG1hcCBiaXRtYXAoQlJlY3Qo
MCwgMCwgMCwgMCksCisgICAgICAgIEJfQklUTUFQX0NMRUFSX1RPX1dISVRFIHwgQl9CSVRNQVBf
QUNDRVBUU19WSUVXUywgQl9SR0IzMik7CisgICAgQlZpZXcgdmlldyhCUmVjdCgwLCAwLCAwLCAw
KSwgIiIsIDAsIDApOworICAgIGJpdG1hcC5Mb2NrKCk7CisgICAgYml0bWFwLkFkZENoaWxkKCZ2
aWV3KTsKKyAgICAvLyBDdXJyZW50IHBlbiBsb2NhdGlvbiBpcyB1c2VkIGFzIG9yaWdpbiBmb3Ig
dGhlIHNoYXBlLgorICAgIHZpZXcuTW92ZVBlblRvKC1wb2ludC54KCksIC1wb2ludC55KCkpOwor
ICAgIC8vIFRPRE86IEhhbmRsZSBXaW5kUnVsZS4uLiAobmVlZHMgc3VwcG9ydCBpbiBCVmlldywg
dGhlIGJhY2tlbmQgYWxyZWFkeQorICAgIC8vIHN1cHBvcnQgaXQuKQorICAgIEdyYXBoaWNzQ29u
dGV4dCBjb250ZXh0KCZ2aWV3KTsKKyAgICBhcHBsaWVyLT5zdHJva2VTdHlsZSgmY29udGV4dCk7
CisgICAgCisgICAgdmlldy5TdHJva2VTaGFwZShtX3BhdGgpOworICAgIHZpZXcuU3luYygpOwor
CisgICAgdWludDgqIGJpdHMgPSByZWludGVycHJldF9jYXN0PHVpbnQ4Kj4oYml0bWFwLkJpdHMo
KSk7CisgICAgYm9vbCByZXN1bHQgPSBiaXRzWzBdIDwgMTI4OworCisgICAgdmlldy5SZW1vdmVT
ZWxmKCk7CisgICAgYml0bWFwLlVubG9jaygpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZv
aWQgUGF0aDo6dHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIC8vIEJTaGFwZUl0ZXJhdG9yIGFsbG93cyB1cyB0byBtb2RpZnkgdGhl
IHBhdGggZGF0YSAiaW4gcGxhY2UiCisgICAgY2xhc3MgVHJhbnNsYXRlSXRlcmF0b3IgOiBwdWJs
aWMgQlNoYXBlSXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgVHJhbnNsYXRlSXRlcmF0
b3IoQlNoYXBlKiBzaGFwZSwgY29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgICAgICAgICAgOiBt
X3NoYXBlKHNoYXBlKQorICAgICAgICAgICAgLCBtX3NpemUoc2l6ZSkKKyAgICAgICAgeworICAg
ICAgICB9CisgICAgICAgIHZpcnR1YWwgc3RhdHVzX3QgSXRlcmF0ZU1vdmVUbyhCUG9pbnQqIHBv
aW50KQorICAgICAgICB7CisgICAgICAgICAgICBwb2ludC0+eCArPSBtX3NpemUud2lkdGgoKTsK
KyAgICAgICAgICAgIHJldHVybiBCX09LOworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCBz
dGF0dXNfdCBJdGVyYXRlTGluZVRvKGludDMyIGxpbmVDb3VudCwgQlBvaW50KiBsaW5lUHRzKQor
ICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAobGluZUNvdW50LS0pIHsKKyAgICAgICAgICAg
ICAgICBsaW5lUHRzLT54ICs9IG1fc2l6ZS53aWR0aCgpOworICAgICAgICAgICAgICAgIGxpbmVQ
dHMtPnkgKz0gbV9zaXplLmhlaWdodCgpOworICAgICAgICAgICAgICAgIGxpbmVQdHMrKzsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBCX09LOworICAgICAgICB9CisKKyAgICAg
ICAgdmlydHVhbCBzdGF0dXNfdCBJdGVyYXRlQmV6aWVyVG8oaW50MzIgYmV6aWVyQ291bnQsIEJQ
b2ludCogYmV6aWVyUHRzKQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoYmV6aWVyQ291
bnQtLSkgeworICAgICAgICAgICAgICAgIGJlemllclB0c1swXS54ICs9IG1fc2l6ZS53aWR0aCgp
OworICAgICAgICAgICAgICAgIGJlemllclB0c1swXS55ICs9IG1fc2l6ZS5oZWlnaHQoKTsKKyAg
ICAgICAgICAgICAgICBiZXppZXJQdHNbMV0ueCArPSBtX3NpemUud2lkdGgoKTsKKyAgICAgICAg
ICAgICAgICBiZXppZXJQdHNbMV0ueSArPSBtX3NpemUuaGVpZ2h0KCk7CisgICAgICAgICAgICAg
ICAgYmV6aWVyUHRzWzJdLnggKz0gbV9zaXplLndpZHRoKCk7CisgICAgICAgICAgICAgICAgYmV6
aWVyUHRzWzJdLnkgKz0gbV9zaXplLmhlaWdodCgpOworICAgICAgICAgICAgICAgIGJlemllclB0
cyArPSAzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEJfT0s7CisgICAgICAg
IH0KKworICAgICAgICB2aXJ0dWFsIHN0YXR1c190IEl0ZXJhdGVDbG9zZSgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBCX09LOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAg
ICAgICBCU2hhcGUqIG1fc2hhcGU7CisgICAgICAgIGNvbnN0IEZsb2F0U2l6ZSYgbV9zaXplOwor
ICAgIH0gdHJhbnNsYXRlSXRlcmF0b3IobV9wYXRoLCBzaXplKTsKKworICAgIHRyYW5zbGF0ZUl0
ZXJhdG9yLkl0ZXJhdGUobV9wYXRoKTsKIH0KIAogRmxvYXRSZWN0IFBhdGg6OmJvdW5kaW5nUmVj
dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcGF0aC0+RnJhbWUoKTsKKyAgICByZXR1cm4gbV9w
YXRoLT5Cb3VuZHMoKTsKIH0KIAotdm9pZCBQYXRoOjptb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQpCit2b2lkIFBhdGg6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiBwKQogewotICAgIC8v
IEZJWE1FOiBVc2UgT2Zmc2V0Qnk/Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX3BhdGgt
Pk1vdmVUbyhwKTsKIH0KIAogdm9pZCBQYXRoOjphZGRMaW5lVG8oY29uc3QgRmxvYXRQb2ludCYg
cCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIG1fcGF0aC0+TGluZVRvKHApOwogfQog
CiB2b2lkIFBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNwLCBjb25zdCBG
bG9hdFBvaW50JiBwKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgQlBvaW50IGNvbnRy
b2wgPSBjcDsKKworICAgIEJQb2ludCBwb2ludHNbM107CisgICAgcG9pbnRzWzBdID0gY29udHJv
bDsKKyAgICBwb2ludHNbMF0ueCArPSAoY29udHJvbC54IC0gcG9pbnRzWzBdLngpICogKDIuMCAv
IDMuMCk7CisgICAgcG9pbnRzWzBdLnkgKz0gKGNvbnRyb2wueSAtIHBvaW50c1swXS55KSAqICgy
LjAgLyAzLjApOworCisgICAgcG9pbnRzWzFdID0gcDsKKyAgICBwb2ludHNbMV0ueCArPSAoY29u
dHJvbC54IC0gcG9pbnRzWzFdLngpICogKDIuMCAvIDMuMCk7CisgICAgcG9pbnRzWzFdLnkgKz0g
KGNvbnRyb2wueSAtIHBvaW50c1sxXS55KSAqICgyLjAgLyAzLjApOworCisgICAgcG9pbnRzWzJd
ID0gcDsKKyAgICBtX3BhdGgtPkJlemllclRvKHBvaW50cyk7CiB9CiAKIHZvaWQgUGF0aDo6YWRk
QmV6aWVyQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjcDEsIGNvbnN0IEZsb2F0UG9pbnQmIGNw
MiwgY29uc3QgRmxvYXRQb2ludCYgcCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIEJQ
b2ludCBwb2ludHNbM107CisgICAgcG9pbnRzWzBdID0gY3AxOworICAgIHBvaW50c1sxXSA9IGNw
MjsKKyAgICBwb2ludHNbMl0gPSBwOworICAgIG1fcGF0aC0+QmV6aWVyVG8ocG9pbnRzKTsKIH0K
IAogdm9pZCBQYXRoOjphZGRBcmNUbyhjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQ
b2ludCYgcDIsIGZsb2F0IHJhZGl1cykKQEAgLTEwOCw3ICsyMjksNyBAQCB2b2lkIFBhdGg6OmFk
ZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmIHAxCiAKIHZvaWQgUGF0aDo6Y2xvc2VTdWJwYXRoKCkK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIG1fcGF0aC0+Q2xvc2UoKTsKIH0KIAogdm9p
ZCBQYXRoOjphZGRBcmMoY29uc3QgRmxvYXRQb2ludCYgcCwgZmxvYXQgciwgZmxvYXQgc2FyLCBm
bG9hdCBlYXIsIGJvb2wgYW50aWNsb2Nrd2lzZSkKQEAgLTExOCw3ICsyMzksMTIgQEAgdm9pZCBQ
YXRoOjphZGRBcmMoY29uc3QgRmxvYXRQb2ludCYgcCwgZgogCiB2b2lkIFBhdGg6OmFkZFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByKQogewotICAgIG1fcGF0aC0+SW5jbHVkZShyKTsKKyAgICBtX3Bh
dGgtPkNsb3NlKCk7CisgICAgbV9wYXRoLT5Nb3ZlVG8oQlBvaW50KHIueCgpLCByLnkoKSkpOwor
ICAgIG1fcGF0aC0+TGluZVRvKEJQb2ludChyLngoKSArIHIud2lkdGgoKSwgci55KCkpKTsKKyAg
ICBtX3BhdGgtPkxpbmVUbyhCUG9pbnQoci54KCkgKyByLndpZHRoKCksIHIueSgpICsgci5oZWln
aHQoKSkpOworICAgIG1fcGF0aC0+TGluZVRvKEJQb2ludChyLngoKSwgci55KCkgKyByLmhlaWdo
dCgpKSk7CisgICAgbV9wYXRoLT5DbG9zZSgpOwogfQogCiB2b2lkIFBhdGg6OmFkZEVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiByKQpAQCAtMTI4LDEyICsyNTQsMTIgQEAgdm9pZCBQYXRoOjphZGRF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcgogCiB2b2lkIFBhdGg6OmNsZWFyKCkKIHsKLSAgICBt
X3BhdGgtPk1ha2VFbXB0eSgpOworICAgIG1fcGF0aC0+Q2xlYXIoKTsKIH0KIAogYm9vbCBQYXRo
Ojppc0VtcHR5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gIW1fcGF0aC0+RnJhbWUoKS5Jc1ZhbGlk
KCk7CisgICAgcmV0dXJuICFtX3BhdGgtPkJvdW5kcygpLklzVmFsaWQoKTsKIH0KIAogU3RyaW5n
IFBhdGg6OmRlYnVnU3RyaW5nKCkgY29uc3QKQEAgLTE0OSwxMyArMjc1LDU3IEBAIHZvaWQgUGF0
aDo6YXBwbHkodm9pZCogaW5mbywgUGF0aEFwcGxpZXIKIAogdm9pZCBQYXRoOjp0cmFuc2Zvcm0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICAvLyBCU2hhcGVJdGVyYXRvciBhbGxvd3MgdXMgdG8gbW9kaWZ5IHRoZSBwYXRoIGRh
dGEgImluIHBsYWNlIgorICAgIGNsYXNzIFRyYW5zZm9ybUl0ZXJhdG9yIDogcHVibGljIEJTaGFw
ZUl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRyYW5zZm9ybUl0ZXJhdG9yKEJTaGFw
ZSogc2hhcGUsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQorICAgICAgICAgICAg
OiBtX3NoYXBlKHNoYXBlKQorICAgICAgICAgICAgLCBtX3RyYW5zZm9ybSh0cmFuc2Zvcm0pCisg
ICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICB2aXJ0dWFsIHN0YXR1c190IEl0ZXJhdGVNb3Zl
VG8oQlBvaW50KiBwb2ludCkKKyAgICAgICAgeworICAgICAgICAgICAgKnBvaW50ID0gbV90cmFu
c2Zvcm0ubWFwUG9pbnQoKnBvaW50KTsKKyAgICAgICAgICAgIHJldHVybiBCX09LOworICAgICAg
ICB9CisKKyAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBJdGVyYXRlTGluZVRvKGludDMyIGxpbmVD
b3VudCwgQlBvaW50KiBsaW5lUHRzKQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAobGlu
ZUNvdW50LS0pIHsKKyAgICAgICAgICAgICAgICAqbGluZVB0cyA9IG1fdHJhbnNmb3JtLm1hcFBv
aW50KCpsaW5lUHRzKTsKKyAgICAgICAgICAgICAgICBsaW5lUHRzKys7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gQl9PSzsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwg
c3RhdHVzX3QgSXRlcmF0ZUJlemllclRvKGludDMyIGJlemllckNvdW50LCBCUG9pbnQqIGJlemll
clB0cykKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGJlemllckNvdW50LS0pIHsKKyAg
ICAgICAgICAgICAgICBiZXppZXJQdHNbMF0gPSBtX3RyYW5zZm9ybS5tYXBQb2ludChiZXppZXJQ
dHNbMF0pOworICAgICAgICAgICAgICAgIGJlemllclB0c1sxXSA9IG1fdHJhbnNmb3JtLm1hcFBv
aW50KGJlemllclB0c1sxXSk7CisgICAgICAgICAgICAgICAgYmV6aWVyUHRzWzJdID0gbV90cmFu
c2Zvcm0ubWFwUG9pbnQoYmV6aWVyUHRzWzJdKTsKKyAgICAgICAgICAgICAgICBiZXppZXJQdHMg
Kz0gMzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBCX09LOworICAgICAgICB9
CisKKyAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBJdGVyYXRlQ2xvc2UoKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gQl9PSzsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgQlNoYXBlKiBtX3NoYXBlOworICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIG1fdHJh
bnNmb3JtOworICAgIH0gdHJhbnNmb3JtSXRlcmF0b3IobV9wYXRoLCB0cmFuc2Zvcm0pOworCisg
ICAgdHJhbnNmb3JtSXRlcmF0b3IuSXRlcmF0ZShtX3BhdGgpOwogfQogCiBGbG9hdFJlY3QgUGF0
aDo6c3Ryb2tlQm91bmRpbmdSZWN0KFN0cm9rZVN0eWxlQXBwbGllciogYXBwbGllcikKIHsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1cm4g
bV9wYXRoLT5Cb3VuZHMoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49270</attachid>
            <date>2010-02-23 01:54:26 -0800</date>
            <delta_ts>2010-02-25 13:04:23 -0800</delta_ts>
            <desc>Implement native Path backend.</desc>
            <filename>path.diff</filename>
            <type>text/plain</type>
            <size>13740</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTEzMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTIgQEAKKzIwMTAtMDItMjMgIFN0ZXBoYW4gQcOfbXVzICA8c3VwZXJzdGlwcGlA
Z214LmRlPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtIYWlrdV0gSW1wbGVtZW50IG5hdGl2ZSBQYXRoIGJhY2tlbmQuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDY4MworCisgICAgICAgIENvdmVyZWQg
YnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmg6
CisgICAgICAgICAgICBDaGFuZ2VkIGRlZmluaXRpb24gb2YgUGxhdGZvcm1QYXRoIGZyb20gQlJl
Z2lvbiB0byBCU2hhcGUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvUGF0aEhh
aWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RCaXRtYXA6OkhpdFRlc3RCaXRtYXAp
OgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdEJpdG1hcDo6fkhpdFRlc3RCaXRtYXApOgorICAg
ICAgICAoV2ViQ29yZTo6SGl0VGVzdEJpdG1hcDo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpI
aXRUZXN0Qml0bWFwOjpjbGVhclRvV2hpdGUpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdEJp
dG1hcDo6cHJlcGFyZUhpdFRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdEJpdG1hcDo6
aGl0VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0Qml0bWFwOjpoaXRUZXN0UGl4ZWwp
OgorICAgICAgICAgICAgSGl0VGVzdEJpdG1hcCBpcyBhIGNsYXNzIGZvciB1c2luZyBhbiBvZmZz
Y3JlZW4gMS1waXhlbCBzaXplZCBCQml0bWFwCisgICAgICAgICAgICBhbmQgYXR0YWNoZWQgQlZp
ZXcgdG8gcGVyZm9ybSBoaXR0ZXN0aW5nLiBUaGVyZSBpcyBhIGdsb2JhbCBpbnN0YW5jZQorICAg
ICAgICAgICAgd2l0aCBsYXp5IGluaXRpYWxpemF0aW9uIG9mIHRoZSBCQml0bWFwIHRvIGJlIHNo
YXJlZCBieSBhbGwgUGF0aCBvYmplY3RzLgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6UGF0aCk6
CisgICAgICAgICAgICBDcmVhdGUgQlNoYXBlIG9iamVjdHMgaW5zdGVhZCBvZiBCUmVnaW9ucy4K
KyAgICAgICAgKFdlYkNvcmU6OlBhdGg6On5QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6
Om9wZXJhdG9yPSk6CisgICAgICAgICAgICBGaXhlZCBtZW1vcnkgY29ycnVwdGlvbiwgY3VydGVz
eSBvZiBNaWNoYWVsIExvdHouIFdlIGNhbid0IGp1c3QgYXNzaWduIHBvaW50ZXJzIQorICAgICAg
ICAoV2ViQ29yZTo6UGF0aDo6Y29udGFpbnMpLAorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6c3Ry
b2tlQ29udGFpbnMpOgorICAgICAgICAgICAgVXNlIEhpdFRlc3RCaXRtYXAgaGVscGVyIGNsYXNz
LgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6dHJhbnNsYXRlKToKKyAgICAgICAgICAgIEltcGxl
bWVudGVkIHZpYSBhIEJTaGFwZUl0ZXJhdG9yIHRvIG1vZGlmeSBjb29yZHMgaW4gcGxhY2UuCisg
ICAgICAgIChXZWJDb3JlOjpQYXRoOjpib3VuZGluZ1JlY3QpLAorICAgICAgICAoV2ViQ29yZTo6
UGF0aDo6bW92ZVRvKSwKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZExpbmVUbyk6CisgICAg
ICAgICAgICBJbXBsZW1lbnRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZFF1YWRDdXJ2
ZVRvKToKKyAgICAgICAgICAgIEltcGxlbWVudGVkIChjdXJ0ZXN5IG9mIE1pY2hhZWwgTG90eiku
CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKSwKKyAgICAgICAgKFdl
YkNvcmU6OlBhdGg6OmNsb3NlU3VicGF0aCksCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjphZGRS
ZWN0KSwKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmNsZWFyKSwKKyAgICAgICAgKFdlYkNvcmU6
OlBhdGg6OmlzRW1wdHkpOgorICAgICAgICAgICAgSW1wbGVtZW50ZWQuCisgICAgICAgIChXZWJD
b3JlOjpQYXRoOjp0cmFuc2Zvcm0pOgorICAgICAgICAgICAgSW1wbGVtZW50ZWQgdmlhIGEgQlNo
YXBlSXRlcmF0b3IgdG8gbW9kaWZ5IGNvb3JkcyBpbiBwbGFjZS4KKyAgICAgICAgKFdlYkNvcmU6
OlBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdCk6CisgICAgICAgICAgICBOb3QgYWN0dWFsbHkgaW1w
bGVtZW50ZWQsIGJ1dCBhdCBsZWFzdCByZXR1cm4gYm91bmRzIG9mIGZpbGwgcGF0aC4KKwogMjAx
MC0wMi0yMyAgU3RlcGhhbiBBw59tdXMgIDxzdXBlcnN0aXBwaUBnbXguZGU+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1BhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAko
cmV2aXNpb24gNTUxMzApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAkod29y
a2luZyBjb3B5KQpAQCAtNDgsOCArNDgsOCBAQCB0eXBlZGVmIFdlYkNvcmU6OkNhaXJvUGF0aCBQ
bGF0Zm9ybVBhdGg7CiBjbGFzcyBTa1BhdGg7CiB0eXBlZGVmIFNrUGF0aCBQbGF0Zm9ybVBhdGg7
CiAjZWxpZiBQTEFURk9STShIQUlLVSkKLWNsYXNzIEJSZWdpb247Ci10eXBlZGVmIEJSZWdpb24g
UGxhdGZvcm1QYXRoOworY2xhc3MgQlNoYXBlOwordHlwZWRlZiBCU2hhcGUgUGxhdGZvcm1QYXRo
OwogI2VsaWYgT1MoV0lOQ0UpCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgUGxhdGZv
cm1QYXRoOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFpa3Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvUGF0aEhh
aWt1LmNwcAkocmV2aXNpb24gNTUxMzApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L1BhdGhIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw3IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU3RlcGhhbiBBw59tdXMgPHN1cGVyc3RpcHBpQGdteC5k
ZT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBNaWNoYWVsIExvdHogPG1tbHJAbWxvdHouY2g+CiAg
KgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0zMCwzMiArMzIsMTQxIEBACiAKICNp
bmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8UmVnaW9uLmg+Ci0KKyNpbmNsdWRl
ICJTdHJva2VTdHlsZUFwcGxpZXIuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
IgorI2luY2x1ZGUgPEJpdG1hcC5oPgorI2luY2x1ZGUgPFNoYXBlLmg+CisjaW5jbHVkZSA8Vmll
dy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIEEgb25lIHBpeGVsIHNpemVkIEJCaXRt
YXAgZm9yIGRyYXdpbmcgaW50by4gRGVmYXVsdCBoaWdoLWNvbG9yIG9mIEJWaWV3cworLy8gaXMg
YmxhY2suIFNvIHRlc3Rpbmcgb2YgYW55IGNvbG9yIGNoYW5uZWwgZm9yIDwgMTI4IG1lYW5zIHRo
ZSBwaXhlbCB3YXMgaGl0LgorY2xhc3MgSGl0VGVzdEJpdG1hcCB7CitwdWJsaWM6CisgICAgSGl0
VGVzdEJpdG1hcCgpCisgICAgICAgIDogbV9iaXRtYXAoMCkKKyAgICAgICAgLCBtX3ZpZXcoMCkK
KyAgICB7CisgICAgICAgIC8vIERvIG5vdCBjcmVhdGUgdGhlIGJpdG1hcCBoZXJlLCBzaW5jZSB0
aGlzIG9iamVjdCBpcyBpbml0aWFsaXplZAorICAgICAgICAvLyBzdGF0aWNhbGx5LCBhbmQgQkJp
dG1hcHMgbmVlZCBhIHJ1bm5pbmcgQkFwcGxpY2F0aW9uIHRvIHdvcmsuCisgICAgfQorCisgICAg
fkhpdFRlc3RCaXRtYXAoKQorICAgIHsKKyAgICAgICAgLy8gbV9iaXRtYXAgYmVpbmcgMCBzaW1w
bHkgbWVhbnMgV2ViQ29yZSBuZXZlciBwZXJmb3JtZWQgYW55IGhpdC10ZXN0cworICAgICAgICAv
LyBvbiBQYXRocy4KKyAgICAgICAgaWYgKCFtX2JpdG1hcCkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBtX2JpdG1hcC0+VW5sb2NrKCk7CisgICAgICAgIC8vIFdpbGwgYWxzbyBkZWxl
dGUgdGhlIEJWaWV3IGF0dGFjaGVkIHRvIHRoZSBiaXRtYXA6CisgICAgICAgIGRlbGV0ZSBtX2Jp
dG1hcDsKKyAgICB9CisKKyAgICB2b2lkIGluaXQoKQorICAgIHsKKyAgICAgICAgaWYgKG1fYml0
bWFwKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fYml0bWFwID0gbmV3IEJCaXRt
YXAoQlJlY3QoMCwgMCwgMCwgMCksIEJfUkdCMzIsIHRydWUpOworICAgICAgICAvLyBLZWVwIHRo
ZSBkdW1tbXkgd2luZG93IGxvY2tlZCBhdCBhbGwgdGltZXMsIHNvIHdlIGRvbid0IG5lZWQKKyAg
ICAgICAgLy8gdG8gd29ycnkgYWJvdXQgaXQgYW55bW9yZS4KKyAgICAgICAgbV9iaXRtYXAtPkxv
Y2soKTsKKyAgICAgICAgLy8gQWRkIGEgQlZpZXcgd2hpY2ggZG9lcyBhbnkgcmVuZGVyaW5nLgor
ICAgICAgICBtX3ZpZXcgPSBuZXcgQlZpZXcobV9iaXRtYXAtPkJvdW5kcygpLCAiV2ViQ29yZSBo
aS10ZXN0IHZpZXciLCAwLCAwKTsKKyAgICAgICAgbV9iaXRtYXAtPkFkZENoaWxkKG1fdmlldyk7
CisKKyAgICAgICAgY2xlYXJUb1doaXRlKCk7CisgICAgfQorCisgICAgdm9pZCBjbGVhclRvV2hp
dGUoKQorICAgIHsKKyAgICAgICAgbWVtc2V0KG1fYml0bWFwLT5CaXRzKCksIDI1NSwgbV9iaXRt
YXAtPkJpdHNMZW5ndGgoKSk7CisgICAgfQorCisgICAgdm9pZCBwcmVwYXJlSGl0VGVzdChmbG9h
dCB4LCBmbG9hdCB5KQorICAgIHsKKyAgICAgICAgY2xlYXJUb1doaXRlKCk7CisgICAgICAgIC8v
IFRoZSBjdXJyZW50IHBlbiBsb2NhdGlvbiBpcyB1c2VkIGFzIHRoZSByZWZlcmVuY2UgcG9pbnQg
Zm9yCisgICAgICAgIC8vIHdoZXJlIHRoZSBzaGFwZSBpcyByZW5kZXJlZCBpbiB0aGUgdmlldy4g
T2J2aW91c2x5IEJlIHRob3VnaHQgdGhpcworICAgICAgICAvLyB3YXMgYSBuZWF0IGlkZWEgZm9y
IHVzaW5nIEJTaGFwZXMgYXMgc3ltYm9scywgYWx0aG91Z2ggaXQgaXMKKyAgICAgICAgLy8gaW5j
b25zaXN0ZW50IHdpdGggZHJhd2luZyBvdGhlciBwcmltaXRpdmVzLiBTZXRPcmlnaW4oKSBzaG91
bGQKKyAgICAgICAgLy8gYmUgdXNlZCBpbnN0ZWFkLCBidXQgdGhpcyBpcyBjaGVhcGVyOgorICAg
ICAgICBtX3ZpZXctPk1vdmVQZW5UbygteCwgLXkpOworICAgIH0KKworICAgIGJvb2wgaGl0VGVz
dChCU2hhcGUqIHNoYXBlLCBmbG9hdCB4LCBmbG9hdCB5LCBXaW5kUnVsZSBydWxlKQorICAgIHsK
KyAgICAgICAgcHJlcGFyZUhpdFRlc3QoeCwgeSk7CisKKyAgICAgICAgbV92aWV3LT5GaWxsU2hh
cGUoc2hhcGUpOworCisgICAgICAgIHJldHVybiBoaXRUZXN0UGl4ZWwoKTsKKyAgICB9CisKKyAg
ICBib29sIGhpdFRlc3QoQlNoYXBlKiBzaGFwZSwgZmxvYXQgeCwgZmxvYXQgeSwgU3Ryb2tlU3R5
bGVBcHBsaWVyKiBhcHBsaWVyKQorICAgIHsKKyAgICAgICAgcHJlcGFyZUhpdFRlc3QoeCwgeSk7
CisKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQobV92aWV3KTsKKyAgICAgICAgYXBw
bGllci0+c3Ryb2tlU3R5bGUoJmNvbnRleHQpOworICAgICAgICBtX3ZpZXctPlN0cm9rZVNoYXBl
KHNoYXBlKTsKKworICAgICAgICByZXR1cm4gaGl0VGVzdFBpeGVsKCk7CisgICAgfQorCisgICAg
Ym9vbCBoaXRUZXN0UGl4ZWwoKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRo
ZSBhcHBfc2VydmVyIGhhcyByZW5kZXJlZCBldmVyeXRoaW5nIGFscmVhZHkuCisgICAgICAgIG1f
dmlldy0+U3luYygpOworICAgICAgICAvLyBCaXRtYXAgaXMgd2hpdGUgYmVmb3JlIGRyYXdpbmcs
IGFudGktYWxpYXNpbmcgdGhyZXNob2xkIGlzIG1pZC1ncmV5LAorICAgICAgICAvLyB0aGVuIHRo
ZSBwaXhlbCBpcyBjb25zaWRlcmVkIHdpdGhpbiB0aGUgYmxhY2sgc2hhcGUuIFRoZW9yZXRpY2Fs
bHksCisgICAgICAgIC8vIGl0IHdvdWxkIGJlIGVub3VnaCB0byB0ZXN0IG9uZSBjb2xvciBjaGFu
bmVsLCBidXQgc2luY2UgdGhlIEhhaWt1CisgICAgICAgIC8vIGFwcF9zZXJ2ZXIgcmVuZGVycyBh
bGwgc2hhcGVzIHdpdGggTENEIHN1Yi1waXhlbCBhbnRpLWFsaWFzaW5nLCB0aGUKKyAgICAgICAg
Ly8gY29sb3IgY2hhbm5lbHMgY2FuIGluIGZhY3QgZGlmZmVyIGF0IGVkZ2UgcGl4ZWxzLgorICAg
ICAgICBjb25zdCB1aW50OCogYml0cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDgqPiht
X2JpdG1hcC0+Qml0cygpKTsKKyAgICAgICAgcmV0dXJuIChzdGF0aWNfY2FzdDx1aW50MTY+KGJp
dHNbMF0pICsgYml0c1sxXSArIGJpdHNbMl0pIC8gMyA8IDEyODsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgQkJpdG1hcCogbV9iaXRtYXA7CisgICAgQlZpZXcqIG1fdmlldzsKK307CisKKy8vIFJl
dXNlIHRoZSBzYW1lIGhpdCB0ZXN0IGJpdG1hcCBmb3IgYWxsIHBhdGhzLiBJbml0aWFsaXphdGlv
biBpcyBsYXp5LCBhbmQKKy8vIG5lZWRzIHRvIGJlLCBzaW5jZSBCQml0bWFwcyBuZWVkIGEgcnVu
bmluZyBCQXBwbGljYXRpb24uIElmIFdlYkNvcmUgZXZlcgorLy8gcnVucyBlYWNoIERvY3VtZW50
IGluIGl0J3Mgb3duIHRocmVhZCwgd2Ugc2hhbGwgcmUtdXNlIHRoZSBpbnRlcm5hbCBiaXRtYXAn
cworLy8gbG9jayB0byBzeW5jaHJvbml6ZSBhY2Nlc3MuIFNpbmNlIHRoZSBwb2ludGVyIGlzIGxp
a2VseSBvbmx5IHNpdHRpbmcgYWJvdmUKKy8vIG9uZSBkb2N1bWVudCBhdCBhIHRpbWUsIGl0IHNl
ZW1zIHVubGlrZWx5IHRvIGJlIGEgcHJvYmxlbSBhbnl3YXkuCitzdGF0aWMgSGl0VGVzdEJpdG1h
cCBnSGl0VGVzdEJpdG1hcDsKKworLy8gI3ByYWdtYSBtYXJrIC0gUGF0aAorCiBQYXRoOjpQYXRo
KCkKLSAgICA6IG1fcGF0aChuZXcgQlJlZ2lvbigpKQorICAgIDogbV9wYXRoKG5ldyBCU2hhcGUo
KSkKIHsKIH0KIAotUGF0aDo6flBhdGgoKQorUGF0aDo6UGF0aChjb25zdCBQYXRoJiBvdGhlcikK
KyAgICA6IG1fcGF0aChuZXcgQlNoYXBlKCpvdGhlci5wbGF0Zm9ybVBhdGgoKSkpCiB7Ci0gICAg
ZGVsZXRlIG1fcGF0aDsKIH0KIAotUGF0aDo6UGF0aChjb25zdCBQYXRoJiBvdGhlcikKLSAgICA6
IG1fcGF0aChuZXcgQlJlZ2lvbigqb3RoZXIucGxhdGZvcm1QYXRoKCkpKQorUGF0aDo6flBhdGgo
KQogeworICAgIGRlbGV0ZSBtX3BhdGg7CiB9CiAKIFBhdGgmIFBhdGg6Om9wZXJhdG9yPShjb25z
dCBQYXRoJiBvdGhlcikKIHsKLSAgICBpZiAoJm90aGVyICE9IHRoaXMpCi0gICAgICAgIG1fcGF0
aCA9IG90aGVyLnBsYXRmb3JtUGF0aCgpOworICAgIGlmICgmb3RoZXIgIT0gdGhpcykgeworICAg
ICAgICBtX3BhdGgtPkNsZWFyKCk7CisgICAgICAgIG1fcGF0aC0+QWRkU2hhcGUob3RoZXIucGxh
dGZvcm1QYXRoKCkpOworICAgIH0KIAogICAgIHJldHVybiAqdGhpczsKIH0KQEAgLTY3LDM4ICsx
NzgsMTExIEBAIGJvb2wgUGF0aDo6aGFzQ3VycmVudFBvaW50KCkgY29uc3QKIAogYm9vbCBQYXRo
Ojpjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgV2luZFJ1bGUgcnVsZSkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9wYXRoLT5Db250YWlucyhwb2ludCk7CisgICAgZ0hpdFRlc3RCaXRt
YXAuaW5pdCgpOworICAgIHJldHVybiBnSGl0VGVzdEJpdG1hcC5oaXRUZXN0KG1fcGF0aCwgcG9p
bnQueCgpLCBwb2ludC55KCksIHJ1bGUpOworfQorCitib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5z
KFN0cm9rZVN0eWxlQXBwbGllciogYXBwbGllciwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNv
bnN0Cit7CisgICAgQVNTRVJUKGFwcGxpZXIpOworCisgICAgZ0hpdFRlc3RCaXRtYXAuaW5pdCgp
OworICAgIHJldHVybiBnSGl0VGVzdEJpdG1hcC5oaXRUZXN0KG1fcGF0aCwgcG9pbnQueCgpLCBw
b2ludC55KCksIGFwcGxpZXIpOwogfQogCiB2b2lkIFBhdGg6OnRyYW5zbGF0ZShjb25zdCBGbG9h
dFNpemUmIHNpemUpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAvLyBCU2hhcGVJdGVy
YXRvciBhbGxvd3MgdXMgdG8gbW9kaWZ5IHRoZSBwYXRoIGRhdGEgImluIHBsYWNlIgorICAgIGNs
YXNzIFRyYW5zbGF0ZUl0ZXJhdG9yIDogcHVibGljIEJTaGFwZUl0ZXJhdG9yIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIFRyYW5zbGF0ZUl0ZXJhdG9yKEJTaGFwZSogc2hhcGUsIGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSkKKyAgICAgICAgICAgIDogbV9zaGFwZShzaGFwZSkKKyAgICAgICAgICAgICwg
bV9zaXplKHNpemUpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICB2aXJ0dWFsIHN0YXR1
c190IEl0ZXJhdGVNb3ZlVG8oQlBvaW50KiBwb2ludCkKKyAgICAgICAgeworICAgICAgICAgICAg
cG9pbnQtPnggKz0gbV9zaXplLndpZHRoKCk7CisgICAgICAgICAgICBwb2ludC0+eSArPSBtX3Np
emUuaGVpZ2h0KCk7CisgICAgICAgICAgICByZXR1cm4gQl9PSzsKKyAgICAgICAgfQorCisgICAg
ICAgIHZpcnR1YWwgc3RhdHVzX3QgSXRlcmF0ZUxpbmVUbyhpbnQzMiBsaW5lQ291bnQsIEJQb2lu
dCogbGluZVB0cykKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGxpbmVDb3VudC0tKSB7
CisgICAgICAgICAgICAgICAgbGluZVB0cy0+eCArPSBtX3NpemUud2lkdGgoKTsKKyAgICAgICAg
ICAgICAgICBsaW5lUHRzLT55ICs9IG1fc2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBs
aW5lUHRzKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gQl9PSzsKKyAgICAg
ICAgfQorCisgICAgICAgIHZpcnR1YWwgc3RhdHVzX3QgSXRlcmF0ZUJlemllclRvKGludDMyIGJl
emllckNvdW50LCBCUG9pbnQqIGJlemllclB0cykKKyAgICAgICAgeworICAgICAgICAgICAgd2hp
bGUgKGJlemllckNvdW50LS0pIHsKKyAgICAgICAgICAgICAgICBiZXppZXJQdHNbMF0ueCArPSBt
X3NpemUud2lkdGgoKTsKKyAgICAgICAgICAgICAgICBiZXppZXJQdHNbMF0ueSArPSBtX3NpemUu
aGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgYmV6aWVyUHRzWzFdLnggKz0gbV9zaXplLndpZHRo
KCk7CisgICAgICAgICAgICAgICAgYmV6aWVyUHRzWzFdLnkgKz0gbV9zaXplLmhlaWdodCgpOwor
ICAgICAgICAgICAgICAgIGJlemllclB0c1syXS54ICs9IG1fc2l6ZS53aWR0aCgpOworICAgICAg
ICAgICAgICAgIGJlemllclB0c1syXS55ICs9IG1fc2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgICAg
ICAgICBiZXppZXJQdHMgKz0gMzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBC
X09LOworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBJdGVyYXRlQ2xvc2Uo
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gQl9PSzsKKyAgICAgICAgfQorCisgICAg
cHJpdmF0ZToKKyAgICAgICAgQlNoYXBlKiBtX3NoYXBlOworICAgICAgICBjb25zdCBGbG9hdFNp
emUmIG1fc2l6ZTsKKyAgICB9IHRyYW5zbGF0ZUl0ZXJhdG9yKG1fcGF0aCwgc2l6ZSk7CisKKyAg
ICB0cmFuc2xhdGVJdGVyYXRvci5JdGVyYXRlKG1fcGF0aCk7CiB9CiAKIEZsb2F0UmVjdCBQYXRo
Ojpib3VuZGluZ1JlY3QoKSBjb25zdAogewotICAgIHJldHVybiBtX3BhdGgtPkZyYW1lKCk7Cisg
ICAgcmV0dXJuIG1fcGF0aC0+Qm91bmRzKCk7CiB9CiAKLXZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50KQordm9pZCBQYXRoOjptb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYg
cCkKIHsKLSAgICAvLyBGSVhNRTogVXNlIE9mZnNldEJ5PwotICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgbV9wYXRoLT5Nb3ZlVG8ocCk7CiB9CiAKIHZvaWQgUGF0aDo6YWRkTGluZVRvKGNvbnN0
IEZsb2F0UG9pbnQmIHApCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX3BhdGgtPkxp
bmVUbyhwKTsKIH0KIAogdm9pZCBQYXRoOjphZGRRdWFkQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50
JiBjcCwgY29uc3QgRmxvYXRQb2ludCYgcCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IEJQb2ludCBjb250cm9sID0gY3A7CisKKyAgICBCUG9pbnQgcG9pbnRzWzNdOworICAgIHBvaW50
c1swXSA9IGNvbnRyb2w7CisgICAgcG9pbnRzWzBdLnggKz0gKGNvbnRyb2wueCAtIHBvaW50c1sw
XS54KSAqICgyLjAgLyAzLjApOworICAgIHBvaW50c1swXS55ICs9IChjb250cm9sLnkgLSBwb2lu
dHNbMF0ueSkgKiAoMi4wIC8gMy4wKTsKKworICAgIHBvaW50c1sxXSA9IHA7CisgICAgcG9pbnRz
WzFdLnggKz0gKGNvbnRyb2wueCAtIHBvaW50c1sxXS54KSAqICgyLjAgLyAzLjApOworICAgIHBv
aW50c1sxXS55ICs9IChjb250cm9sLnkgLSBwb2ludHNbMV0ueSkgKiAoMi4wIC8gMy4wKTsKKwor
ICAgIHBvaW50c1syXSA9IHA7CisgICAgbV9wYXRoLT5CZXppZXJUbyhwb2ludHMpOwogfQogCiB2
b2lkIFBhdGg6OmFkZEJlemllckN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY3AxLCBjb25zdCBG
bG9hdFBvaW50JiBjcDIsIGNvbnN0IEZsb2F0UG9pbnQmIHApCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICBCUG9pbnQgcG9pbnRzWzNdOworICAgIHBvaW50c1swXSA9IGNwMTsKKyAgICBw
b2ludHNbMV0gPSBjcDI7CisgICAgcG9pbnRzWzJdID0gcDsKKyAgICBtX3BhdGgtPkJlemllclRv
KHBvaW50cyk7CiB9CiAKIHZvaWQgUGF0aDo6YWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYgcDEs
IGNvbnN0IEZsb2F0UG9pbnQmIHAyLCBmbG9hdCByYWRpdXMpCkBAIC0xMDgsNyArMjkyLDcgQEAg
dm9pZCBQYXRoOjphZGRBcmNUbyhjb25zdCBGbG9hdFBvaW50JiBwMQogCiB2b2lkIFBhdGg6OmNs
b3NlU3VicGF0aCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX3BhdGgtPkNsb3Nl
KCk7CiB9CiAKIHZvaWQgUGF0aDo6YWRkQXJjKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGZsb2F0IHIs
IGZsb2F0IHNhciwgZmxvYXQgZWFyLCBib29sIGFudGljbG9ja3dpc2UpCkBAIC0xMTgsNyArMzAy
LDEyIEBAIHZvaWQgUGF0aDo6YWRkQXJjKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGYKIAogdm9pZCBQ
YXRoOjphZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKIHsKLSAgICBtX3BhdGgtPkluY2x1ZGUo
cik7CisgICAgbV9wYXRoLT5DbG9zZSgpOworICAgIG1fcGF0aC0+TW92ZVRvKEJQb2ludChyLngo
KSwgci55KCkpKTsKKyAgICBtX3BhdGgtPkxpbmVUbyhCUG9pbnQoci54KCkgKyByLndpZHRoKCks
IHIueSgpKSk7CisgICAgbV9wYXRoLT5MaW5lVG8oQlBvaW50KHIueCgpICsgci53aWR0aCgpLCBy
LnkoKSArIHIuaGVpZ2h0KCkpKTsKKyAgICBtX3BhdGgtPkxpbmVUbyhCUG9pbnQoci54KCksIHIu
eSgpICsgci5oZWlnaHQoKSkpOworICAgIG1fcGF0aC0+Q2xvc2UoKTsKIH0KIAogdm9pZCBQYXRo
OjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcikKQEAgLTEyOCwxMiArMzE3LDEyIEBAIHZv
aWQgUGF0aDo6YWRkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHIKIAogdm9pZCBQYXRoOjpjbGVh
cigpCiB7Ci0gICAgbV9wYXRoLT5NYWtlRW1wdHkoKTsKKyAgICBtX3BhdGgtPkNsZWFyKCk7CiB9
CiAKIGJvb2wgUGF0aDo6aXNFbXB0eSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFtX3BhdGgtPkZy
YW1lKCkuSXNWYWxpZCgpOworICAgIHJldHVybiAhbV9wYXRoLT5Cb3VuZHMoKS5Jc1ZhbGlkKCk7
CiB9CiAKIFN0cmluZyBQYXRoOjpkZWJ1Z1N0cmluZygpIGNvbnN0CkBAIC0xNDksMTMgKzMzOCw1
NyBAQCB2b2lkIFBhdGg6OmFwcGx5KHZvaWQqIGluZm8sIFBhdGhBcHBsaWVyCiAKIHZvaWQgUGF0
aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewotICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgLy8gQlNoYXBlSXRlcmF0b3IgYWxsb3dzIHVzIHRvIG1vZGlm
eSB0aGUgcGF0aCBkYXRhICJpbiBwbGFjZSIKKyAgICBjbGFzcyBUcmFuc2Zvcm1JdGVyYXRvciA6
IHB1YmxpYyBCU2hhcGVJdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBUcmFuc2Zvcm1J
dGVyYXRvcihCU2hhcGUqIHNoYXBlLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkK
KyAgICAgICAgICAgIDogbV9zaGFwZShzaGFwZSkKKyAgICAgICAgICAgICwgbV90cmFuc2Zvcm0o
dHJhbnNmb3JtKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCBzdGF0dXNf
dCBJdGVyYXRlTW92ZVRvKEJQb2ludCogcG9pbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgICpw
b2ludCA9IG1fdHJhbnNmb3JtLm1hcFBvaW50KCpwb2ludCk7CisgICAgICAgICAgICByZXR1cm4g
Ql9PSzsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgc3RhdHVzX3QgSXRlcmF0ZUxpbmVU
byhpbnQzMiBsaW5lQ291bnQsIEJQb2ludCogbGluZVB0cykKKyAgICAgICAgeworICAgICAgICAg
ICAgd2hpbGUgKGxpbmVDb3VudC0tKSB7CisgICAgICAgICAgICAgICAgKmxpbmVQdHMgPSBtX3Ry
YW5zZm9ybS5tYXBQb2ludCgqbGluZVB0cyk7CisgICAgICAgICAgICAgICAgbGluZVB0cysrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEJfT0s7CisgICAgICAgIH0KKworICAg
ICAgICB2aXJ0dWFsIHN0YXR1c190IEl0ZXJhdGVCZXppZXJUbyhpbnQzMiBiZXppZXJDb3VudCwg
QlBvaW50KiBiZXppZXJQdHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChiZXppZXJD
b3VudC0tKSB7CisgICAgICAgICAgICAgICAgYmV6aWVyUHRzWzBdID0gbV90cmFuc2Zvcm0ubWFw
UG9pbnQoYmV6aWVyUHRzWzBdKTsKKyAgICAgICAgICAgICAgICBiZXppZXJQdHNbMV0gPSBtX3Ry
YW5zZm9ybS5tYXBQb2ludChiZXppZXJQdHNbMV0pOworICAgICAgICAgICAgICAgIGJlemllclB0
c1syXSA9IG1fdHJhbnNmb3JtLm1hcFBvaW50KGJlemllclB0c1syXSk7CisgICAgICAgICAgICAg
ICAgYmV6aWVyUHRzICs9IDM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gQl9P
SzsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgc3RhdHVzX3QgSXRlcmF0ZUNsb3NlKCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEJfT0s7CisgICAgICAgIH0KKworICAgIHBy
aXZhdGU6CisgICAgICAgIEJTaGFwZSogbV9zaGFwZTsKKyAgICAgICAgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBtX3RyYW5zZm9ybTsKKyAgICB9IHRyYW5zZm9ybUl0ZXJhdG9yKG1fcGF0aCwgdHJh
bnNmb3JtKTsKKworICAgIHRyYW5zZm9ybUl0ZXJhdG9yLkl0ZXJhdGUobV9wYXRoKTsKIH0KIAog
RmxvYXRSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChTdHJva2VTdHlsZUFwcGxpZXIqIGFw
cGxpZXIpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7
CisgICAgcmV0dXJuIG1fcGF0aC0+Qm91bmRzKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49527</attachid>
            <date>2010-02-25 13:04:23 -0800</date>
            <delta_ts>2010-04-13 14:06:14 -0700</delta_ts>
            <desc>Implement native Path backend.</desc>
            <filename>path.diff</filename>
            <type>text/plain</type>
            <size>14859</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTI1MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTYgQEAKKzIwMTAtMDItMjUgIFN0ZXBoYW4gQcOfbXVzICA8c3VwZXJzdGlwcGlA
Z214LmRlPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtIYWlrdV0gSW1wbGVtZW50IG5hdGl2ZSBQYXRoIGJhY2tlbmQuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDY4MworCisgICAgICAgIENvdmVyZWQg
YnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmg6
CisgICAgICAgICAgICBDaGFuZ2VkIGRlZmluaXRpb24gb2YgUGxhdGZvcm1QYXRoIGZyb20gQlJl
Z2lvbiB0byBCU2hhcGUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvUGF0aEhh
aWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RCaXRtYXA6OkhpdFRlc3RCaXRtYXAp
OgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdEJpdG1hcDo6fkhpdFRlc3RCaXRtYXApOgorICAg
ICAgICAoV2ViQ29yZTo6SGl0VGVzdEJpdG1hcDo6YWRkUmVmZXJlbmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkhpdFRlc3RCaXRtYXA6OnJlbW92ZVJlZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3Jl
OjpIaXRUZXN0Qml0bWFwOjppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RCaXRtYXA6
OmNsZWFyVG9XaGl0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0Qml0bWFwOjpwcmVwYXJl
SGl0VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0Qml0bWFwOjpoaXRUZXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhpdFRlc3RCaXRtYXA6OmhpdFRlc3RQaXhlbCk6CisgICAgICAgICAg
ICBIaXRUZXN0Qml0bWFwIGlzIGEgY2xhc3MgZm9yIHVzaW5nIGFuIG9mZnNjcmVlbiAxLXBpeGVs
IHNpemVkIEJCaXRtYXAKKyAgICAgICAgICAgIGFuZCBhdHRhY2hlZCBCVmlldyB0byBwZXJmb3Jt
IGhpdHRlc3RpbmcuIFRoZXJlIGlzIGEgZ2xvYmFsIGluc3RhbmNlCisgICAgICAgICAgICB3aXRo
IGxhenkgaW5pdGlhbGl6YXRpb24gb2YgdGhlIEJCaXRtYXAgdG8gYmUgc2hhcmVkIGJ5IGFsbCBQ
YXRoIG9iamVjdHMKKyAgICAgICAgICAgIHdpdGggcmVmZXJlbmNlIGNvdW50ZWQgZGVzdHJ1Y3Rp
b24gb2YgdGhlIEJCaXRtYXAgaW4gb3JkZXIgdG8gZG8gaXQKKyAgICAgICAgICAgIGJlZm9yZSB0
aGUgQkFwcGxpYXRpb24gb2JqZWN0IGlzIGRlc3Ryb3llZCBvbiBwcm9ncmFtIGV4aXQuCisgICAg
ICAgIChXZWJDb3JlOjpQYXRoOjpQYXRoKToKKyAgICAgICAgICAgIENyZWF0ZSBCU2hhcGUgb2Jq
ZWN0cyBpbnN0ZWFkIG9mIEJSZWdpb25zLgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6flBhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6b3BlcmF0b3I9KToKKyAgICAgICAgICAgIEZpeGVk
IG1lbW9yeSBjb3JydXB0aW9uLCBjdXJ0ZXN5IG9mIE1pY2hhZWwgTG90ei4gV2UgY2FuJ3QganVz
dCBhc3NpZ24gcG9pbnRlcnMhCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpjb250YWlucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYXRoOjpzdHJva2VDb250YWlucyk6CisgICAgICAgICAgICBVc2Ug
SGl0VGVzdEJpdG1hcCBoZWxwZXIgY2xhc3MuCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjp0cmFu
c2xhdGUpOgorICAgICAgICAgICAgSW1wbGVtZW50ZWQgdmlhIGEgQlNoYXBlSXRlcmF0b3IgdG8g
bW9kaWZ5IGNvb3JkcyBpbiBwbGFjZS4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmJvdW5kaW5n
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjptb3ZlVG8pOgorICAgICAgICAoV2ViQ29y
ZTo6UGF0aDo6YWRkTGluZVRvKToKKyAgICAgICAgICAgIEltcGxlbWVudGVkLgorICAgICAgICAo
V2ViQ29yZTo6UGF0aDo6YWRkUXVhZEN1cnZlVG8pOgorICAgICAgICAgICAgSW1wbGVtZW50ZWQg
KGN1cnRlc3kgb2YgTWljaGFlbCBMb3R6KS4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZEJl
emllckN1cnZlVG8pOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6Y2xvc2VTdWJwYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6
Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6aXNFbXB0eSk6CisgICAgICAgICAgICBJ
bXBsZW1lbnRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnRyYW5zZm9ybSk6CisgICAgICAg
ICAgICBJbXBsZW1lbnRlZCB2aWEgYSBCU2hhcGVJdGVyYXRvciB0byBtb2RpZnkgY29vcmRzIGlu
IHBsYWNlLgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KToKKyAg
ICAgICAgICAgIE5vdCBhY3R1YWxseSBpbXBsZW1lbnRlZCwgYnV0IGF0IGxlYXN0IHJldHVybiBi
b3VuZHMgb2YgZmlsbCBwYXRoLgorCiAyMDEwLTAyLTI1ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8
YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgJKHJldmlzaW9uIDU1MjUwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4LDggQEAg
dHlwZWRlZiBXZWJDb3JlOjpDYWlyb1BhdGggUGxhdGZvcm1QYXRoOwogY2xhc3MgU2tQYXRoOwog
dHlwZWRlZiBTa1BhdGggUGxhdGZvcm1QYXRoOwogI2VsaWYgUExBVEZPUk0oSEFJS1UpCi1jbGFz
cyBCUmVnaW9uOwotdHlwZWRlZiBCUmVnaW9uIFBsYXRmb3JtUGF0aDsKK2NsYXNzIEJTaGFwZTsK
K3R5cGVkZWYgQlNoYXBlIFBsYXRmb3JtUGF0aDsKICNlbGlmIE9TKFdJTkNFKQogbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIGNsYXNzIFBsYXRmb3JtUGF0aDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvUGF0aEhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L1BhdGhIYWlrdS5jcHAJKHJldmlzaW9uIDU1MjUwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZl
bmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFN0ZXBo
YW4gQcOfbXVzIDxzdXBlcnN0aXBwaUBnbXguZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTWlj
aGFlbCBMb3R6IDxtbWxyQG1sb3R6LmNoPgogICoKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgpAQCAtMzAsMzIgKzMyLDE2OCBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2lu
Y2x1ZGUgPFJlZ2lvbi5oPgotCisjaW5jbHVkZSAiU3Ryb2tlU3R5bGVBcHBsaWVyLmgiCisjaW5j
bHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlIDxCaXRtYXAuaD4KKyNpbmNs
dWRlIDxTaGFwZS5oPgorI2luY2x1ZGUgPFZpZXcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIEEgb25lIHBpeGVsIHNpemVkIEJCaXRtYXAgZm9yIGRy
YXdpbmcgaW50by4gRGVmYXVsdCBoaWdoLWNvbG9yIG9mIEJWaWV3cworLy8gaXMgYmxhY2suIFNv
IHRlc3Rpbmcgb2YgYW55IGNvbG9yIGNoYW5uZWwgZm9yIDwgMTI4IG1lYW5zIHRoZSBwaXhlbCB3
YXMgaGl0LgorY2xhc3MgSGl0VGVzdEJpdG1hcCB7CitwdWJsaWM6CisgICAgSGl0VGVzdEJpdG1h
cCgpCisgICAgICAgIDogbV9iaXRtYXAoMCkKKyAgICAgICAgLCBtX3ZpZXcoMCkKKyAgICAgICAg
LCBtX3JlZmVyZW5jZUNvdW50KDApCisgICAgeworICAgICAgICAvLyBEbyBub3QgY3JlYXRlIHRo
ZSBiaXRtYXAgaGVyZSwgc2luY2UgdGhpcyBvYmplY3QgaXMgaW5pdGlhbGl6ZWQKKyAgICAgICAg
Ly8gc3RhdGljYWxseSwgYW5kIEJCaXRtYXBzIG5lZWQgYSBydW5uaW5nIEJBcHBsaWNhdGlvbiB0
byB3b3JrLgorICAgIH0KKworICAgIH5IaXRUZXN0Qml0bWFwKCkKKyAgICB7CisgICAgfQorCisg
ICAgdm9pZCBhZGRSZWZlcmVuY2UoKQorICAgIHsKKyAgICAgICAgbV9yZWZlcmVuY2VDb3VudCsr
OworICAgIH0KKworICAgIHZvaWQgcmVtb3ZlUmVmZXJlbmNlKCkKKyAgICB7CisgICAgICAgIC8v
IFRoZSByZWZlcmVuY2UgY291bnRpbmcgaXMgbmVlZGVkIHRvIGRlbGV0ZSB0aGUgQkJpdG1hcCB3
aGVuCisgICAgICAgIC8vIHRoZSBsYXN0IFBhdGggb2JqZWN0IGlzIGdvbmUuIFRoZSBkZWxldGlv
biBuZWVkcyB0byBoYXBwZW4KKyAgICAgICAgLy8gaGVyZSwgYW5kIG5vdCBpbiBvdXIgZGVzdHJ1
Y3RvciwgYmVjYXVzZSB3ZSBhcmUgZGVsZXRlZCBvbiB0aGUKKyAgICAgICAgLy8gZXhlY3V0aW9u
IG9mIGdsb2JhbCBkZXN0cnVjdG9ycywgYXQgd2hpY2ggcG9pbnQgdGhlIEJBcHBsaWNhdGlvbgor
ICAgICAgICAvLyBpcyBhbHJlYWR5IGdvbmUsIGFuZCBkZWxldGluZyBCQml0bWFwcyB3aXRob3V0
IGEgQkFwcGxpY2F0aW9uCisgICAgICAgIC8vIGludm9rZXMgdGhlIGRlYnVnZ2VyLgorICAgICAg
ICBtX3JlZmVyZW5jZUNvdW50LS07CisKKyAgICAgICAgaWYgKCFtX3JlZmVyZW5jZUNvdW50KSB7
CisgICAgICAgICAgICAvLyBtX2JpdG1hcCBiZWluZyAwIHNpbXBseSBtZWFucyBXZWJDb3JlIG5l
dmVyIHBlcmZvcm1lZCBhbnkgCisgICAgICAgICAgICAvLyBoaXQtdGVzdHMgb24gUGF0aHMuCisg
ICAgICAgICAgICBpZiAoIW1fYml0bWFwKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAgICAgbV9iaXRtYXAtPlVubG9jaygpOworICAgICAgICAgICAgLy8gV2lsbCBhbHNvIGRl
bGV0ZSB0aGUgQlZpZXcgYXR0YWNoZWQgdG8gdGhlIGJpdG1hcDoKKyAgICAgICAgICAgIGRlbGV0
ZSBtX2JpdG1hcDsKKyAgICAgICAgICAgIG1fYml0bWFwID0gMDsKKyAgICAgICAgICAgIG1fdmll
dyA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGluaXQoKQorICAgIHsKKyAgICAg
ICAgaWYgKG1fYml0bWFwKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fYml0bWFw
ID0gbmV3IEJCaXRtYXAoQlJlY3QoMCwgMCwgMCwgMCksIEJfUkdCMzIsIHRydWUpOworICAgICAg
ICAvLyBLZWVwIHRoZSBkdW1tbXkgd2luZG93IGxvY2tlZCBhdCBhbGwgdGltZXMsIHNvIHdlIGRv
bid0IG5lZWQKKyAgICAgICAgLy8gdG8gd29ycnkgYWJvdXQgaXQgYW55bW9yZS4KKyAgICAgICAg
bV9iaXRtYXAtPkxvY2soKTsKKyAgICAgICAgLy8gQWRkIGEgQlZpZXcgd2hpY2ggZG9lcyBhbnkg
cmVuZGVyaW5nLgorICAgICAgICBtX3ZpZXcgPSBuZXcgQlZpZXcobV9iaXRtYXAtPkJvdW5kcygp
LCAiV2ViQ29yZSBoaS10ZXN0IHZpZXciLCAwLCAwKTsKKyAgICAgICAgbV9iaXRtYXAtPkFkZENo
aWxkKG1fdmlldyk7CisKKyAgICAgICAgY2xlYXJUb1doaXRlKCk7CisgICAgfQorCisgICAgdm9p
ZCBjbGVhclRvV2hpdGUoKQorICAgIHsKKyAgICAgICAgbWVtc2V0KG1fYml0bWFwLT5CaXRzKCks
IDI1NSwgbV9iaXRtYXAtPkJpdHNMZW5ndGgoKSk7CisgICAgfQorCisgICAgdm9pZCBwcmVwYXJl
SGl0VGVzdChmbG9hdCB4LCBmbG9hdCB5KQorICAgIHsKKyAgICAgICAgY2xlYXJUb1doaXRlKCk7
CisgICAgICAgIC8vIFRoZSBjdXJyZW50IHBlbiBsb2NhdGlvbiBpcyB1c2VkIGFzIHRoZSByZWZl
cmVuY2UgcG9pbnQgZm9yCisgICAgICAgIC8vIHdoZXJlIHRoZSBzaGFwZSBpcyByZW5kZXJlZCBp
biB0aGUgdmlldy4gT2J2aW91c2x5IEJlIHRob3VnaHQgdGhpcworICAgICAgICAvLyB3YXMgYSBu
ZWF0IGlkZWEgZm9yIHVzaW5nIEJTaGFwZXMgYXMgc3ltYm9scywgYWx0aG91Z2ggaXQgaXMKKyAg
ICAgICAgLy8gaW5jb25zaXN0ZW50IHdpdGggZHJhd2luZyBvdGhlciBwcmltaXRpdmVzLiBTZXRP
cmlnaW4oKSBzaG91bGQKKyAgICAgICAgLy8gYmUgdXNlZCBpbnN0ZWFkLCBidXQgdGhpcyBpcyBj
aGVhcGVyOgorICAgICAgICBtX3ZpZXctPk1vdmVQZW5UbygteCwgLXkpOworICAgIH0KKworICAg
IGJvb2wgaGl0VGVzdChCU2hhcGUqIHNoYXBlLCBmbG9hdCB4LCBmbG9hdCB5LCBXaW5kUnVsZSBy
dWxlKQorICAgIHsKKyAgICAgICAgcHJlcGFyZUhpdFRlc3QoeCwgeSk7CisKKyAgICAgICAgbV92
aWV3LT5GaWxsU2hhcGUoc2hhcGUpOworCisgICAgICAgIHJldHVybiBoaXRUZXN0UGl4ZWwoKTsK
KyAgICB9CisKKyAgICBib29sIGhpdFRlc3QoQlNoYXBlKiBzaGFwZSwgZmxvYXQgeCwgZmxvYXQg
eSwgU3Ryb2tlU3R5bGVBcHBsaWVyKiBhcHBsaWVyKQorICAgIHsKKyAgICAgICAgcHJlcGFyZUhp
dFRlc3QoeCwgeSk7CisKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQobV92aWV3KTsK
KyAgICAgICAgYXBwbGllci0+c3Ryb2tlU3R5bGUoJmNvbnRleHQpOworICAgICAgICBtX3ZpZXct
PlN0cm9rZVNoYXBlKHNoYXBlKTsKKworICAgICAgICByZXR1cm4gaGl0VGVzdFBpeGVsKCk7Cisg
ICAgfQorCisgICAgYm9vbCBoaXRUZXN0UGl4ZWwoKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8g
TWFrZSBzdXJlIHRoZSBhcHBfc2VydmVyIGhhcyByZW5kZXJlZCBldmVyeXRoaW5nIGFscmVhZHku
CisgICAgICAgIG1fdmlldy0+U3luYygpOworICAgICAgICAvLyBCaXRtYXAgaXMgd2hpdGUgYmVm
b3JlIGRyYXdpbmcsIGFudGktYWxpYXNpbmcgdGhyZXNob2xkIGlzIG1pZC1ncmV5LAorICAgICAg
ICAvLyB0aGVuIHRoZSBwaXhlbCBpcyBjb25zaWRlcmVkIHdpdGhpbiB0aGUgYmxhY2sgc2hhcGUu
IFRoZW9yZXRpY2FsbHksCisgICAgICAgIC8vIGl0IHdvdWxkIGJlIGVub3VnaCB0byB0ZXN0IG9u
ZSBjb2xvciBjaGFubmVsLCBidXQgc2luY2UgdGhlIEhhaWt1CisgICAgICAgIC8vIGFwcF9zZXJ2
ZXIgcmVuZGVycyBhbGwgc2hhcGVzIHdpdGggTENEIHN1Yi1waXhlbCBhbnRpLWFsaWFzaW5nLCB0
aGUKKyAgICAgICAgLy8gY29sb3IgY2hhbm5lbHMgY2FuIGluIGZhY3QgZGlmZmVyIGF0IGVkZ2Ug
cGl4ZWxzLgorICAgICAgICBjb25zdCB1aW50OCogYml0cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDgqPihtX2JpdG1hcC0+Qml0cygpKTsKKyAgICAgICAgcmV0dXJuIChzdGF0aWNfY2Fz
dDx1aW50MTY+KGJpdHNbMF0pICsgYml0c1sxXSArIGJpdHNbMl0pIC8gMyA8IDEyODsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgQkJpdG1hcCogbV9iaXRtYXA7CisgICAgQlZpZXcqIG1fdmlldzsK
KyAgICBpbnQgbV9yZWZlcmVuY2VDb3VudDsKK307CisKKy8vIFJldXNlIHRoZSBzYW1lIGhpdCB0
ZXN0IGJpdG1hcCBmb3IgYWxsIHBhdGhzLiBJbml0aWFsaXphdGlvbiBpcyBsYXp5LCBhbmQKKy8v
IG5lZWRzIHRvIGJlLCBzaW5jZSBCQml0bWFwcyBuZWVkIGEgcnVubmluZyBCQXBwbGljYXRpb24u
IElmIFdlYkNvcmUgZXZlcgorLy8gcnVucyBlYWNoIERvY3VtZW50IGluIGl0J3Mgb3duIHRocmVh
ZCwgd2Ugc2hhbGwgcmUtdXNlIHRoZSBpbnRlcm5hbCBiaXRtYXAncworLy8gbG9jayB0byBzeW5j
aHJvbml6ZSBhY2Nlc3MuIFNpbmNlIHRoZSBwb2ludGVyIGlzIGxpa2VseSBvbmx5IHNpdHRpbmcg
YWJvdmUKKy8vIG9uZSBkb2N1bWVudCBhdCBhIHRpbWUsIGl0IHNlZW1zIHVubGlrZWx5IHRvIGJl
IGEgcHJvYmxlbSBhbnl3YXkuCitzdGF0aWMgSGl0VGVzdEJpdG1hcCBnSGl0VGVzdEJpdG1hcDsK
KworLy8gI3ByYWdtYSBtYXJrIC0gUGF0aAorCiBQYXRoOjpQYXRoKCkKLSAgICA6IG1fcGF0aChu
ZXcgQlJlZ2lvbigpKQorICAgIDogbV9wYXRoKG5ldyBCU2hhcGUoKSkKIHsKKyAgICBnSGl0VGVz
dEJpdG1hcC5hZGRSZWZlcmVuY2UoKTsKIH0KIAotUGF0aDo6flBhdGgoKQorUGF0aDo6UGF0aChj
b25zdCBQYXRoJiBvdGhlcikKKyAgICA6IG1fcGF0aChuZXcgQlNoYXBlKCpvdGhlci5wbGF0Zm9y
bVBhdGgoKSkpCiB7Ci0gICAgZGVsZXRlIG1fcGF0aDsKKyAgICBnSGl0VGVzdEJpdG1hcC5hZGRS
ZWZlcmVuY2UoKTsKIH0KIAotUGF0aDo6UGF0aChjb25zdCBQYXRoJiBvdGhlcikKLSAgICA6IG1f
cGF0aChuZXcgQlJlZ2lvbigqb3RoZXIucGxhdGZvcm1QYXRoKCkpKQorUGF0aDo6flBhdGgoKQog
eworICAgIGdIaXRUZXN0Qml0bWFwLnJlbW92ZVJlZmVyZW5jZSgpOworICAgIGRlbGV0ZSBtX3Bh
dGg7CiB9CiAKIFBhdGgmIFBhdGg6Om9wZXJhdG9yPShjb25zdCBQYXRoJiBvdGhlcikKIHsKLSAg
ICBpZiAoJm90aGVyICE9IHRoaXMpCi0gICAgICAgIG1fcGF0aCA9IG90aGVyLnBsYXRmb3JtUGF0
aCgpOworICAgIGlmICgmb3RoZXIgIT0gdGhpcykgeworICAgICAgICBtX3BhdGgtPkNsZWFyKCk7
CisgICAgICAgIG1fcGF0aC0+QWRkU2hhcGUob3RoZXIucGxhdGZvcm1QYXRoKCkpOworICAgIH0K
IAogICAgIHJldHVybiAqdGhpczsKIH0KQEAgLTY3LDM4ICsyMDUsMTExIEBAIGJvb2wgUGF0aDo6
aGFzQ3VycmVudFBvaW50KCkgY29uc3QKIAogYm9vbCBQYXRoOjpjb250YWlucyhjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgV2luZFJ1bGUgcnVsZSkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9wYXRo
LT5Db250YWlucyhwb2ludCk7CisgICAgZ0hpdFRlc3RCaXRtYXAuaW5pdCgpOworICAgIHJldHVy
biBnSGl0VGVzdEJpdG1hcC5oaXRUZXN0KG1fcGF0aCwgcG9pbnQueCgpLCBwb2ludC55KCksIHJ1
bGUpOworfQorCitib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKFN0cm9rZVN0eWxlQXBwbGllciog
YXBwbGllciwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgQVNTRVJUKGFw
cGxpZXIpOworCisgICAgZ0hpdFRlc3RCaXRtYXAuaW5pdCgpOworICAgIHJldHVybiBnSGl0VGVz
dEJpdG1hcC5oaXRUZXN0KG1fcGF0aCwgcG9pbnQueCgpLCBwb2ludC55KCksIGFwcGxpZXIpOwog
fQogCiB2b2lkIFBhdGg6OnRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICAvLyBCU2hhcGVJdGVyYXRvciBhbGxvd3MgdXMgdG8gbW9k
aWZ5IHRoZSBwYXRoIGRhdGEgImluIHBsYWNlIgorICAgIGNsYXNzIFRyYW5zbGF0ZUl0ZXJhdG9y
IDogcHVibGljIEJTaGFwZUl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRyYW5zbGF0
ZUl0ZXJhdG9yKEJTaGFwZSogc2hhcGUsIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKKyAgICAgICAg
ICAgIDogbV9zaGFwZShzaGFwZSkKKyAgICAgICAgICAgICwgbV9zaXplKHNpemUpCisgICAgICAg
IHsKKyAgICAgICAgfQorICAgICAgICB2aXJ0dWFsIHN0YXR1c190IEl0ZXJhdGVNb3ZlVG8oQlBv
aW50KiBwb2ludCkKKyAgICAgICAgeworICAgICAgICAgICAgcG9pbnQtPnggKz0gbV9zaXplLndp
ZHRoKCk7CisgICAgICAgICAgICBwb2ludC0+eSArPSBtX3NpemUuaGVpZ2h0KCk7CisgICAgICAg
ICAgICByZXR1cm4gQl9PSzsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgc3RhdHVzX3Qg
SXRlcmF0ZUxpbmVUbyhpbnQzMiBsaW5lQ291bnQsIEJQb2ludCogbGluZVB0cykKKyAgICAgICAg
eworICAgICAgICAgICAgd2hpbGUgKGxpbmVDb3VudC0tKSB7CisgICAgICAgICAgICAgICAgbGlu
ZVB0cy0+eCArPSBtX3NpemUud2lkdGgoKTsKKyAgICAgICAgICAgICAgICBsaW5lUHRzLT55ICs9
IG1fc2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBsaW5lUHRzKys7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gQl9PSzsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1
YWwgc3RhdHVzX3QgSXRlcmF0ZUJlemllclRvKGludDMyIGJlemllckNvdW50LCBCUG9pbnQqIGJl
emllclB0cykKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGJlemllckNvdW50LS0pIHsK
KyAgICAgICAgICAgICAgICBiZXppZXJQdHNbMF0ueCArPSBtX3NpemUud2lkdGgoKTsKKyAgICAg
ICAgICAgICAgICBiZXppZXJQdHNbMF0ueSArPSBtX3NpemUuaGVpZ2h0KCk7CisgICAgICAgICAg
ICAgICAgYmV6aWVyUHRzWzFdLnggKz0gbV9zaXplLndpZHRoKCk7CisgICAgICAgICAgICAgICAg
YmV6aWVyUHRzWzFdLnkgKz0gbV9zaXplLmhlaWdodCgpOworICAgICAgICAgICAgICAgIGJlemll
clB0c1syXS54ICs9IG1fc2l6ZS53aWR0aCgpOworICAgICAgICAgICAgICAgIGJlemllclB0c1sy
XS55ICs9IG1fc2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBiZXppZXJQdHMgKz0gMzsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBCX09LOworICAgICAgICB9CisKKyAg
ICAgICAgdmlydHVhbCBzdGF0dXNfdCBJdGVyYXRlQ2xvc2UoKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gQl9PSzsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQlNo
YXBlKiBtX3NoYXBlOworICAgICAgICBjb25zdCBGbG9hdFNpemUmIG1fc2l6ZTsKKyAgICB9IHRy
YW5zbGF0ZUl0ZXJhdG9yKG1fcGF0aCwgc2l6ZSk7CisKKyAgICB0cmFuc2xhdGVJdGVyYXRvci5J
dGVyYXRlKG1fcGF0aCk7CiB9CiAKIEZsb2F0UmVjdCBQYXRoOjpib3VuZGluZ1JlY3QoKSBjb25z
dAogewotICAgIHJldHVybiBtX3BhdGgtPkZyYW1lKCk7CisgICAgcmV0dXJuIG1fcGF0aC0+Qm91
bmRzKCk7CiB9CiAKLXZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQor
dm9pZCBQYXRoOjptb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYgcCkKIHsKLSAgICAvLyBGSVhNRTog
VXNlIE9mZnNldEJ5PwotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbV9wYXRoLT5Nb3ZlVG8o
cCk7CiB9CiAKIHZvaWQgUGF0aDo6YWRkTGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHApCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX3BhdGgtPkxpbmVUbyhwKTsKIH0KIAogdm9pZCBQ
YXRoOjphZGRRdWFkQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjcCwgY29uc3QgRmxvYXRQb2lu
dCYgcCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIEJQb2ludCBjb250cm9sID0gY3A7
CisKKyAgICBCUG9pbnQgcG9pbnRzWzNdOworICAgIHBvaW50c1swXSA9IGNvbnRyb2w7CisgICAg
cG9pbnRzWzBdLnggKz0gKGNvbnRyb2wueCAtIHBvaW50c1swXS54KSAqICgyLjAgLyAzLjApOwor
ICAgIHBvaW50c1swXS55ICs9IChjb250cm9sLnkgLSBwb2ludHNbMF0ueSkgKiAoMi4wIC8gMy4w
KTsKKworICAgIHBvaW50c1sxXSA9IHA7CisgICAgcG9pbnRzWzFdLnggKz0gKGNvbnRyb2wueCAt
IHBvaW50c1sxXS54KSAqICgyLjAgLyAzLjApOworICAgIHBvaW50c1sxXS55ICs9IChjb250cm9s
LnkgLSBwb2ludHNbMV0ueSkgKiAoMi4wIC8gMy4wKTsKKworICAgIHBvaW50c1syXSA9IHA7Cisg
ICAgbV9wYXRoLT5CZXppZXJUbyhwb2ludHMpOwogfQogCiB2b2lkIFBhdGg6OmFkZEJlemllckN1
cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY3AxLCBjb25zdCBGbG9hdFBvaW50JiBjcDIsIGNvbnN0
IEZsb2F0UG9pbnQmIHApCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBCUG9pbnQgcG9p
bnRzWzNdOworICAgIHBvaW50c1swXSA9IGNwMTsKKyAgICBwb2ludHNbMV0gPSBjcDI7CisgICAg
cG9pbnRzWzJdID0gcDsKKyAgICBtX3BhdGgtPkJlemllclRvKHBvaW50cyk7CiB9CiAKIHZvaWQg
UGF0aDo6YWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAy
LCBmbG9hdCByYWRpdXMpCkBAIC0xMDgsNyArMzE5LDcgQEAgdm9pZCBQYXRoOjphZGRBcmNUbyhj
b25zdCBGbG9hdFBvaW50JiBwMQogCiB2b2lkIFBhdGg6OmNsb3NlU3VicGF0aCgpCiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX3BhdGgtPkNsb3NlKCk7CiB9CiAKIHZvaWQgUGF0aDo6
YWRkQXJjKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGZsb2F0IHIsIGZsb2F0IHNhciwgZmxvYXQgZWFy
LCBib29sIGFudGljbG9ja3dpc2UpCkBAIC0xMTgsNyArMzI5LDEyIEBAIHZvaWQgUGF0aDo6YWRk
QXJjKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGYKIAogdm9pZCBQYXRoOjphZGRSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcikKIHsKLSAgICBtX3BhdGgtPkluY2x1ZGUocik7CisgICAgbV9wYXRoLT5DbG9z
ZSgpOworICAgIG1fcGF0aC0+TW92ZVRvKEJQb2ludChyLngoKSwgci55KCkpKTsKKyAgICBtX3Bh
dGgtPkxpbmVUbyhCUG9pbnQoci54KCkgKyByLndpZHRoKCksIHIueSgpKSk7CisgICAgbV9wYXRo
LT5MaW5lVG8oQlBvaW50KHIueCgpICsgci53aWR0aCgpLCByLnkoKSArIHIuaGVpZ2h0KCkpKTsK
KyAgICBtX3BhdGgtPkxpbmVUbyhCUG9pbnQoci54KCksIHIueSgpICsgci5oZWlnaHQoKSkpOwor
ICAgIG1fcGF0aC0+Q2xvc2UoKTsKIH0KIAogdm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYgcikKQEAgLTEyOCwxMiArMzQ0LDEyIEBAIHZvaWQgUGF0aDo6YWRkRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIHIKIAogdm9pZCBQYXRoOjpjbGVhcigpCiB7Ci0gICAgbV9wYXRoLT5N
YWtlRW1wdHkoKTsKKyAgICBtX3BhdGgtPkNsZWFyKCk7CiB9CiAKIGJvb2wgUGF0aDo6aXNFbXB0
eSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFtX3BhdGgtPkZyYW1lKCkuSXNWYWxpZCgpOworICAg
IHJldHVybiAhbV9wYXRoLT5Cb3VuZHMoKS5Jc1ZhbGlkKCk7CiB9CiAKIFN0cmluZyBQYXRoOjpk
ZWJ1Z1N0cmluZygpIGNvbnN0CkBAIC0xNDksMTMgKzM2NSw1NyBAQCB2b2lkIFBhdGg6OmFwcGx5
KHZvaWQqIGluZm8sIFBhdGhBcHBsaWVyCiAKIHZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
Ly8gQlNoYXBlSXRlcmF0b3IgYWxsb3dzIHVzIHRvIG1vZGlmeSB0aGUgcGF0aCBkYXRhICJpbiBw
bGFjZSIKKyAgICBjbGFzcyBUcmFuc2Zvcm1JdGVyYXRvciA6IHB1YmxpYyBCU2hhcGVJdGVyYXRv
ciB7CisgICAgcHVibGljOgorICAgICAgICBUcmFuc2Zvcm1JdGVyYXRvcihCU2hhcGUqIHNoYXBl
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKKyAgICAgICAgICAgIDogbV9zaGFw
ZShzaGFwZSkKKyAgICAgICAgICAgICwgbV90cmFuc2Zvcm0odHJhbnNmb3JtKQorICAgICAgICB7
CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBJdGVyYXRlTW92ZVRvKEJQb2lu
dCogcG9pbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgICpwb2ludCA9IG1fdHJhbnNmb3JtLm1h
cFBvaW50KCpwb2ludCk7CisgICAgICAgICAgICByZXR1cm4gQl9PSzsKKyAgICAgICAgfQorCisg
ICAgICAgIHZpcnR1YWwgc3RhdHVzX3QgSXRlcmF0ZUxpbmVUbyhpbnQzMiBsaW5lQ291bnQsIEJQ
b2ludCogbGluZVB0cykKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGxpbmVDb3VudC0t
KSB7CisgICAgICAgICAgICAgICAgKmxpbmVQdHMgPSBtX3RyYW5zZm9ybS5tYXBQb2ludCgqbGlu
ZVB0cyk7CisgICAgICAgICAgICAgICAgbGluZVB0cysrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIEJfT0s7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHN0YXR1c190
IEl0ZXJhdGVCZXppZXJUbyhpbnQzMiBiZXppZXJDb3VudCwgQlBvaW50KiBiZXppZXJQdHMpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChiZXppZXJDb3VudC0tKSB7CisgICAgICAgICAg
ICAgICAgYmV6aWVyUHRzWzBdID0gbV90cmFuc2Zvcm0ubWFwUG9pbnQoYmV6aWVyUHRzWzBdKTsK
KyAgICAgICAgICAgICAgICBiZXppZXJQdHNbMV0gPSBtX3RyYW5zZm9ybS5tYXBQb2ludChiZXpp
ZXJQdHNbMV0pOworICAgICAgICAgICAgICAgIGJlemllclB0c1syXSA9IG1fdHJhbnNmb3JtLm1h
cFBvaW50KGJlemllclB0c1syXSk7CisgICAgICAgICAgICAgICAgYmV6aWVyUHRzICs9IDM7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gQl9PSzsKKyAgICAgICAgfQorCisgICAg
ICAgIHZpcnR1YWwgc3RhdHVzX3QgSXRlcmF0ZUNsb3NlKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIEJfT0s7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEJTaGFw
ZSogbV9zaGFwZTsKKyAgICAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtX3RyYW5zZm9ybTsK
KyAgICB9IHRyYW5zZm9ybUl0ZXJhdG9yKG1fcGF0aCwgdHJhbnNmb3JtKTsKKworICAgIHRyYW5z
Zm9ybUl0ZXJhdG9yLkl0ZXJhdGUobV9wYXRoKTsKIH0KIAogRmxvYXRSZWN0IFBhdGg6OnN0cm9r
ZUJvdW5kaW5nUmVjdChTdHJva2VTdHlsZUFwcGxpZXIqIGFwcGxpZXIpCiB7CiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0dXJuIG1fcGF0aC0+
Qm91bmRzKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="32431"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>