<?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>35288</bug_id>
          
          <creation_ts>2010-02-23 03:04:57 -0800</creation_ts>
          <short_desc>[Haiku] Implement ImageBuffer support</short_desc>
          <delta_ts>2010-04-22 02:38:46 -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>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>37765</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Stephan Aßmus">superstippi</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>simon.maxime</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>192860</commentid>
    <comment_count>0</comment_count>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-23 03:04:57 -0800</bug_when>
    <thetext>There is going to be two patches.

The first adds a StillImage class inheriting from WebCore::Image just like it&apos;s done for the Qt port. This class wraps a native BBitmap and provides access to the image data from within WebCore code.

The second patch actually implements ImageBuffer using StillImage for context() and image().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192864</commentid>
    <comment_count>1</comment_count>
      <attachid>49273</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-23 03:25:58 -0800</bug_when>
    <thetext>Created attachment 49273
Patch implementing StillImage class

The StillImage class wraps a native BBitmap in a WebCore::Image derived class.

A reviewer could check the destroyDecodedData() and decodedSize() methods. Since StillImage will be used only for ImageBuffer implementation, and appear to be short-lived, I don&apos;t believe image data needs to be pruned while keeping the StillImage instance itself alive, but it would be nice to get a confirmation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192867</commentid>
    <comment_count>2</comment_count>
      <attachid>49274</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-23 03:39:53 -0800</bug_when>
    <thetext>Created attachment 49274
Patch implementing all ImageBuffer methods.

Second patch which completes the implementation of ImageBuffer. Needs 49273 to be commited first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198792</commentid>
    <comment_count>3</comment_count>
      <attachid>49273</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-03-11 14:52:11 -0800</bug_when>
    <thetext>Comment on attachment 49273
Patch implementing StillImage class

Just some minor things to address.

&gt; Index: WebCore/platform/graphics/haiku/StillImageHaiku.cpp
&gt; +unsigned StillImage::decodedSize() const
&gt; +{
&gt; +    // TODO: It could be wise to return 0 here, since we don&apos;t want WebCore

Use FIXME instead of TODO.



&gt; Index: WebCore/platform/graphics/haiku/StillImageHaiku.h

&gt; +    virtual void destroyDecodedData(bool = true);

You should put in the parameter name here. I had no idea what the bool for was.


&gt; +    StillImage(const BBitmap&amp; bitmap);

You should remove the param name &quot;bitmap&quot; here. as it adds no information.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199499</commentid>
    <comment_count>4</comment_count>
      <attachid>50676</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-03-14 14:56:07 -0700</bug_when>
    <thetext>Created attachment 50676
Patch implementing StillImage class

Thanks for the review. I&apos;ve edited the patch and made the requested changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199502</commentid>
    <comment_count>5</comment_count>
      <attachid>50677</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-03-14 14:58:49 -0700</bug_when>
    <thetext>Created attachment 50677
Patch implementing StillImage class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199506</commentid>
    <comment_count>6</comment_count>
      <attachid>50678</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-03-14 15:22:35 -0700</bug_when>
    <thetext>Created attachment 50678
Patch implementing all ImageBuffer methods.

Fixed a possible division by zero in the patch and moved a comment into it&apos;s appropriate scope.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200619</commentid>
    <comment_count>7</comment_count>
      <attachid>50677</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-03-17 02:10:39 -0700</bug_when>
    <thetext>Comment on attachment 50677
Patch implementing StillImage class

r=me

Did you mean these patches to be &quot;commit-queue?&quot; ?

--Oliver</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200624</commentid>
    <comment_count>8</comment_count>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-03-17 02:38:36 -0700</bug_when>
    <thetext>Yes. I wasn&apos;t aware that I am supposed to mark patches for commit-queue right away. Is it also possible to indicate that patches do not really require review? I don&apos;t mean that review wouldn&apos;t help, but there are patches were I am more confident and there are patches were I am less confident. As long as the patches do not affect other ports, I could mark the ones I am quite confident with for commit-queue only, if that is appropriate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200628</commentid>
    <comment_count>9</comment_count>
      <attachid>50678</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-03-17 02:47:12 -0700</bug_when>
    <thetext>Comment on attachment 50678
Patch implementing all ImageBuffer methods.

You can&apos;t remove other peoples copyright notices</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200631</commentid>
    <comment_count>10</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2010-03-17 02:54:09 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 50678 [details])
&gt; You can&apos;t remove other peoples copyright notices

Stephan removed/changed almost entirely my code. I&apos;m not even sure that there is still a piece of code which is mine. So I think it&apos;s fair to remove my copyright here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200676</commentid>
    <comment_count>11</comment_count>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-03-17 04:34:06 -0700</bug_when>
    <thetext>The file was previous copied and contained only empty stubs. This was obviously done only to make the port compile. Unless Maxime has copyright on the design of the ImageBuffer interface, which didn&apos;t seem to be the case, I understood from reading comments in other Haiku patch reviews, that it was desired to remove copyright &quot;left-overs&quot;. Naturally, I am very careful and double check before I remove any peoples copyright.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200678</commentid>
    <comment_count>12</comment_count>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-03-17 04:37:58 -0700</bug_when>
    <thetext>Maybe you stopped reading the patch after you saw I removed someone&apos;s copyright, but I just checked again and there is not a single line of the previous code left. It consisted entirely of &quot;notImplemented();&quot; or &quot;notImplemented(); return 0;&quot; in the function bodies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201180</commentid>
    <comment_count>13</comment_count>
      <attachid>50677</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-17 21:56:46 -0700</bug_when>
    <thetext>Comment on attachment 50677
Patch implementing StillImage class

Clearing flags on attachment: 50677

Committed r56149: &lt;http://trac.webkit.org/changeset/56149&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201181</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-17 21:56:50 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201246</commentid>
    <comment_count>15</comment_count>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-03-18 03:59:59 -0700</bug_when>
    <thetext>The ticket has been closed prematurely. The second patch received a negative review, but Maxim and I have tried to explain the situation and why we believe the reasons for the rejection are not valid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211409</commentid>
    <comment_count>16</comment_count>
      <attachid>50678</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-04-11 13:06:42 -0700</bug_when>
    <thetext>Comment on attachment 50678
Patch implementing all ImageBuffer methods.

Flipping review flag back to ?, as suggested on mailing list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211976</commentid>
    <comment_count>17</comment_count>
      <attachid>50678</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-04-13 09:37:35 -0700</bug_when>
    <thetext>Comment on attachment 50678
Patch implementing all ImageBuffer methods.


&gt; Index: WebCore/platform/graphics/haiku/ImageBufferData.h
&gt; +#include &quot;OwnPtr.h&quot;

It doesn&apos;t look like OwnPtr.h is used. Also I believe it is typically included as &lt;wtf/OwnPtr.h&gt;


&gt; Index: WebCore/platform/graphics/haiku/ImageBufferHaiku.cpp
&gt; +static inline void convertFromInternalData(const uint8* sourceRows, unsigned sourceBytesPerRow,
&gt; +                                           uint8* destRows, unsigned destBytesPerRow,
&gt; +                                           unsigned rows, unsigned columns,
&gt; +                                           bool premultiplied)
&gt; +{
&gt; +    if (premultiplied) {
&gt; +        // Internal storage is not pre-multiplied, pre-multiply on the fly.
&gt; +        for (unsigned y = 0; y &lt; rows; y++) {
&gt; +            const uint8* s = sourceRows;

Please avoid single letter variables (well &quot;i&quot; is ok as a loop vairable, etc. and x, y are ok, but in this case &quot;s&quot; is an abbreviation of ?


&gt; +    unsigned char* destRows = data;
&gt; +    // Offset the destination pointer to point at the first pixel of the
&gt; +    // intersection rect.
&gt; +    destRows += (rect.x() - (int)sourceRect.left) * 4 + (rect.y() - (int)sourceRect.top) * destBytesPerRow;

Use c++ style casting instead of c style casting.


&gt; +static void putImageData(ImageData* source, const IntRect&amp; sourceRect, const IntPoint&amp; destPoint, ImageBufferData&amp; imageData, const IntSize&amp; size, bool premultiplied)
&gt; +{
&gt; +    // If the source image is outside the destination image, we can return at
&gt; +    // this point.
&gt; +    // TODO: Check if this isn&apos;t already done in WebCore.

Use FIXME instead of TODO in WebKit code.



&gt; +        roster-&gt;GetOutputFormats(translators[i], &amp;outputFormats, &amp;formatCount);
&gt; +        for (int32 j = 0; j &lt; formatCount; j++) {
&gt; +            if (outputFormats[j].group == B_TRANSLATOR_BITMAP
&gt; +                &amp;&amp; mimeTypeString == outputFormats[j].MIME) {

No need to wrap this line (unless you really want to).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212023</commentid>
    <comment_count>18</comment_count>
      <attachid>53266</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-04-13 11:29:54 -0700</bug_when>
    <thetext>Created attachment 53266
Patch implementing all ImageBuffer methods.

Revised patch after review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212025</commentid>
    <comment_count>19</comment_count>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-04-13 11:33:16 -0700</bug_when>
    <thetext>Forgot to mention that I didn&apos;t change the line wrapping, since I personally find the long lines in WebCore code really awkward. For example, the code was badly wrapped in the notification email sent by Bugzilla. This is just one example. Even in the HTML mails sent to webkit-changes, text runs out of the box elements. Since the style guide does not require me to write long lines, I prefer not to. :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212027</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-13 11:34:15 -0700</bug_when>
    <thetext>Attachment 53266 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/graphics/haiku/ImageBufferHaiku.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212355</commentid>
    <comment_count>21</comment_count>
      <attachid>53266</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-04-14 08:52:05 -0700</bug_when>
    <thetext>Comment on attachment 53266
Patch implementing all ImageBuffer methods.

Rejecting patch 53266 from commit-queue.

Unexpected failure when landing patch!  Please file a bug against webkit-patch.
Failed to run &quot;[&apos;WebKitTools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-commit-queue.appspot.com&apos;, &apos;land-attachment&apos;, &apos;--force-clean&apos;, &apos;--build&apos;, &apos;--test&apos;, &apos;--non-interactive&apos;, &apos;--ignore-builders&apos;, &apos;--build-style=both&apos;, &apos;--quiet&apos;, &apos;53266&apos;, &apos;--parent-command=commit-queue&apos;, &apos;--no-update&apos;]&quot; exit_code: 1
Last 500 characters of output:
&apos;, &apos;commit&apos;, &apos;--all&apos;, &apos;-F&apos;, &apos;-&apos;], input=message)
  File &quot;/Users/eseidel/Projects/CommitQueue/WebKitTools/Scripts/webkitpy/common/system/executive.py&quot;, line 85, in run_command
    return Executive().run_command(*args, **kwargs)
  File &quot;/Users/eseidel/Projects/CommitQueue/WebKitTools/Scripts/webkitpy/common/system/executive.py&quot;, line 186, in run_command
    string_to_communicate = str(input)
UnicodeEncodeError: &apos;ascii&apos; codec can&apos;t encode character u&apos;\xdf&apos; in position 21: ordinal not in range(128)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212488</commentid>
    <comment_count>22</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-14 12:23:31 -0700</bug_when>
    <thetext>This is a commit-queue bug.  I&apos;ll look into it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215637</commentid>
    <comment_count>23</comment_count>
      <attachid>53266</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-21 18:35:20 -0700</bug_when>
    <thetext>Comment on attachment 53266
Patch implementing all ImageBuffer methods.

Hopefully fixed now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215795</commentid>
    <comment_count>24</comment_count>
      <attachid>53266</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-04-22 02:38:40 -0700</bug_when>
    <thetext>Comment on attachment 53266
Patch implementing all ImageBuffer methods.

Clearing flags on attachment: 53266

Committed r58078: &lt;http://trac.webkit.org/changeset/58078&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215796</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-04-22 02:38:46 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49273</attachid>
            <date>2010-02-23 03:25:58 -0800</date>
            <delta_ts>2010-03-14 14:56:07 -0700</delta_ts>
            <desc>Patch implementing StillImage class</desc>
            <filename>still_image.diff</filename>
            <type>text/plain</type>
            <size>6597</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTEzNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMTAtMDItMjMgIFN0ZXBoYW4gQcOfbXVzICA8c3VwZXJzdGlwcGlA
Z214LmRlPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtIYWlrdV0gSW1wbGVtZW50IEltYWdlQnVmZmVyIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1Mjg4CisKKyAgICAgICAgQ292ZXJlZCBi
eSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICBUaGUgU3RpbGxJbWFnZSBjbGFzcyBpbXBsZW1l
bnRzIFdlYkNvcmU6OkltYWdlIGJ5IHdyYXBwaW5nIGEgbmF0aXZlCisgICAgICAgIEJCaXRtYXAu
IEl0IHdpbGwgYmUgbmVlZGVkIHRvIGltcGxlbWVudCBXZWJDb3JlOjpJbWFnZUJ1ZmZlci4gVGhp
cworICAgICAgICBzb2x1dGlvbiBpcyBqdXN0IGxpa2UgaXQncyBkb25lIGluIHRoZSBRdCBwb3J0
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvU3RpbGxJbWFnZUhhaWt1LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTdGlsbEltYWdlOjpTdGlsbEltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0aWxsSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpTdGlsbEltYWdlOjpkZWNvZGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dGlsbEltYWdlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlN0aWxsSW1hZ2U6Om5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlN0aWxsSW1hZ2U6OmRyYXcp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1N0aWxsSW1hZ2VIYWlrdS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0aWxsSW1hZ2U6OmNyZWF0ZSk6CisKIDIwMTAtMDIt
MjMgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9TdGlsbEltYWdlSGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvU3RpbGxJbWFnZUhhaWt1LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvU3RpbGxJbWFnZUhhaWt1LmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVwaGFuIEHDn211
cyA8c3VwZXJzdGlwcGlAZ214LmRlPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0aWxsSW1hZ2VIYWlrdS5oIgorCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1
ZGUgPFZpZXcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTdGlsbEltYWdlOjpTdGlsbElt
YWdlKGNvbnN0IEJCaXRtYXAmIGJpdG1hcCkKKyAgICA6IG1fYml0bWFwKCZiaXRtYXApCit7Cit9
CisKK3ZvaWQgU3RpbGxJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKGJvb2wgZGVzdHJveUFsbCkK
K3sKKyAgICAvLyBUaGlzIGlzIHVzZWQgZm9yICJsYXJnZSIgYW5pbWF0aW9ucyB0byBmcmVlIGlt
YWdlIGRhdGEuCisgICAgLy8gSXQgYXBwZWFycyBpdCB3b3VsZCBub3QgYXBwbHkgdG8gU3RpbGxJ
bWFnZS4KK30KKwordW5zaWduZWQgU3RpbGxJbWFnZTo6ZGVjb2RlZFNpemUoKSBjb25zdAorewor
ICAgIC8vIFRPRE86IEl0IGNvdWxkIGJlIHdpc2UgdG8gcmV0dXJuIDAgaGVyZSwgc2luY2Ugd2Ug
ZG9uJ3Qgd2FudCBXZWJDb3JlCisgICAgLy8gdG8gdGhpbmsgd2UgZWF0IHVwIG1lbW9yeSwgc2lu
Y2Ugd2UgYXJlIG5vdCBmcmVlaW5nIGFueSBpbgorICAgIC8vIGRlc3Ryb3lEZWNvZGVkRGF0YSgp
IGVpdGhlci4KKyAgICByZXR1cm4gbV9iaXRtYXAuQml0c0xlbmd0aCgpOworfQorCitJbnRTaXpl
IFN0aWxsSW1hZ2U6OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBJbnRTaXplKG1fYml0bWFw
LkJvdW5kcygpLkludGVnZXJXaWR0aCgpICsgMSwgbV9iaXRtYXAuQm91bmRzKCkuSW50ZWdlckhl
aWdodCgpICsgMSk7Cit9CisKK05hdGl2ZUltYWdlUHRyIFN0aWxsSW1hZ2U6Om5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKCkKK3sKKyAgICByZXR1cm4gJm1fYml0bWFwOworfQorCit2b2lkIFN0
aWxsSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
UmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit7CisgICAgaWYgKCFtX2Jp
dG1hcC5Jc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnRleHQtPnNhdmUoKTsK
KyAgICBjb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3ApOworICAgIGNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLT5EcmF3Qml0bWFwKCZtX2JpdG1hcCwgc291cmNlUmVjdCwgZGVzdFJl
Y3QpOworICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9TdGlsbEltYWdlSGFpa3UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1N0aWxsSW1hZ2VIYWlrdS5oCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9TdGlsbEltYWdlSGFpa3UuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBT
dGVwaGFuIEHDn211cyA8c3VwZXJzdGlwcGlAZ214LmRlPgorICoKKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBTdGlsbEltYWdlSGFpa3VfaAorI2RlZmluZSBTdGlsbElt
YWdlSGFpa3VfaAorCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlIDxCaXRtYXAuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTdGlsbEltYWdlIDogcHVibGljIEltYWdlIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdGlsbEltYWdlPiBjcmVhdGUoY29uc3Qg
QkJpdG1hcCYgYml0bWFwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdGls
bEltYWdlKGJpdG1hcCkpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2Rl
ZERhdGEoYm9vbCA9IHRydWUpOworICAgIHZpcnR1YWwgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBj
b25zdDsKKworICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3Q7CisgICAgdmlydHVhbCBO
YXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIHZpcnR1YWwg
dm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9z
aXRlT3BlcmF0b3IpOworCitwcml2YXRlOgorICAgIFN0aWxsSW1hZ2UoY29uc3QgQkJpdG1hcCYg
Yml0bWFwKTsKKyAgICAKKyAgICBCQml0bWFwIG1fYml0bWFwOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU3RpbGxJbWFnZUhhaWt1X2gK
</data>
<flag name="review"
          id="32094"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49274</attachid>
            <date>2010-02-23 03:39:53 -0800</date>
            <delta_ts>2010-03-14 15:22:35 -0700</delta_ts>
            <desc>Patch implementing all ImageBuffer methods.</desc>
            <filename>image_buffer.diff</filename>
            <type>text/plain</type>
            <size>18121</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTEzOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDkgQEAKKzIwMTAtMDItMjMgIFN0ZXBoYW4gQcOfbXVzICA8c3VwZXJzdGlwcGlA
Z214LmRlPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtIYWlrdV0gSW1wbGVtZW50IEltYWdlQnVmZmVyIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1Mjg4CisKKyAgICAgICAgQ292ZXJlZCBi
eSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICBDb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBJ
bWFnZUJ1ZmZlciBmb3IgSGFpa3UuIFVzZXMgU3RpbGxJbWFnZQorICAgICAgICBjbGFzcyB0byBl
eHBvcnQgYSBXZWJDb3JlOjpJbWFnZSBhbmQgYXNzb2NpYXRlZCBHcmFwaGljc0NvbnRleHQKKyAg
ICAgICAgdG8gcGVyZm9ybSBhcmJpdHJhcnkgZHJhd2luZyBpbiB0aGUgb2Zmc2NyZWVuIEJCaXRt
YXAgYnVmZmVyLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZm
ZXJEYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJI
YWlrdS5jcHAsCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVy
RGF0YSksCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6On5JbWFnZUJ1ZmZlckRh
dGEpLAorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKSwKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIpLAorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmNvbnRleHQpLAorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OmltYWdlKToKKyAgICAgICAgICAgIEltcGxlbWVudGF0aW9uIHVzZXMgb2Zmc2NyZWVuIEJCaXRt
YXAgYW5kIEJWaWV3LCB3cmFwcyBTdGlsbEltYWdlCisgICAgICAgICAgICBhcm91bmQgdGhvc2Ug
dG8gcHJvdmlkZSBXZWJDb3JlOjpJbWFnZSBpbnRlcmZhY2UuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnZlcnRGcm9tRGF0YSk6CisgICAgICAgICAgICBNZXRob2QganVzdCBwZXJmb3JtcyBC
R1JBIDwtPiBSR0JBIGNvbnZlcnNpb24uCisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RnJvbUlu
dGVybmFsRGF0YSk6CisgICAgICAgICAgICBNZXRob2QganVzdCBwZXJmb3JtcyBCR1JBIDwtPiBS
R0JBIGNvbnZlcnNpb24gYW5kIGhhbmRsZXMKKyAgICAgICAgICAgIHByZS1tdWx0aXBseWluZyB0
aGUgY29sb3IgdmFsdWVzIGlmIHJlcXVlc3RlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRU
b0ludGVybmFsRGF0YSk6CisgICAgICAgICAgICBNZXRob2QganVzdCBwZXJmb3JtcyBCR1JBIDwt
PiBSR0JBIGNvbnZlcnNpb24gYW5kIGhhbmRsZXMKKyAgICAgICAgICAgIGRlLm11bHRpcGx5aW5n
IHRoZSBjb2xvciB2YWx1ZXMgaWYgcmVxdWVzdGVkLgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW1h
Z2VEYXRhKToKKyAgICAgICAgICAgIENvbW1vbiBjb2RlIGZvciB0aGUgbmV4dCB0d28gbWV0aG9k
cy4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURh
dGEpLAorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFn
ZURhdGEpOgorICAgICAgICAgICAgSW1wbGVtZW50ZWQuCisgICAgICAgIChXZWJDb3JlOjpwdXRJ
bWFnZURhdGEpOgorICAgICAgICAgICAgQ29tbW9uIGNvZGUgZm9yIHRoZSBuZXh0IHR3byBtZXRo
b2RzLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dFVubXVsdGlwbGllZEltYWdl
RGF0YSksCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZElt
YWdlRGF0YSk6CisgICAgICAgICAgICBJbXBsZW1lbnRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjp0b0RhdGFVUkwpOgorICAgICAgICAgICAgVXNlcyBIYWlrdSAiVHJhbnNsYXRp
b24gS2l0IiB0byBjb252ZXJ0IGltYWdlIGRhdGEgdG8gZGF0YQorICAgICAgICAgICAgb2YgdGhl
IHJlcXVlc3RlZCBtaW1lIHR5cGUuCisKIDIwMTAtMDItMjMgIFN0ZXBoYW4gQcOfbXVzICA8c3Vw
ZXJzdGlwcGlAZ214LmRlPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckRhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVyRGF0
YS5oCShyZXZpc2lvbiA1NTEzMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
SW1hZ2VCdWZmZXJEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVwaGFuIEHDn211cyA8c3VwZXJzdGlwcGlAZ214LmRl
PgogICoKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMjgsMTYgKzI4LDI0IEBACiAj
aWZuZGVmIEltYWdlQnVmZmVyRGF0YV9oCiAjZGVmaW5lIEltYWdlQnVmZmVyRGF0YV9oCiAKKyNp
bmNsdWRlICJPd25QdHIuaCIKKyNpbmNsdWRlIDxCaXRtYXAuaD4KKyNpbmNsdWRlIDxWaWV3Lmg+
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIEludFNpemU7CitjbGFzcyBJbnRT
aXplOworCitjbGFzcyBJbWFnZUJ1ZmZlckRhdGEgeworcHVibGljOgorICAgIEltYWdlQnVmZmVy
RGF0YShjb25zdCBJbnRTaXplJik7CisgICAgfkltYWdlQnVmZmVyRGF0YSgpOwogCi0gICAgY2xh
c3MgSW1hZ2VCdWZmZXJEYXRhIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEltYWdlQnVmZmVyRGF0
YShjb25zdCBJbnRTaXplJik7Ci0gICAgfTsKKyAgICBCQml0bWFwIG1fYml0bWFwOworICAgIEJW
aWV3IG1fdmlldzsKK307CiAKLX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKLSNlbmRpZiAgLy8gSW1hZ2VCdWZmZXJEYXRhX2gKKyNlbmRpZiAvLyBJbWFn
ZUJ1ZmZlckRhdGFfaAogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0lt
YWdlQnVmZmVySGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHAJKHJldmlzaW9uIDU1MTMwKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNp
bW9uIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFN0ZXBo
YW4gQcOfbXVzIDxzdXBlcnN0aXBwaUBnbXguZGU+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI2LDcxICsyNiwzMzkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgogCisjaW5jbHVkZSAiQmFzZTY0LmgiCisjaW5jbHVkZSAiQ1N0cmlu
Zy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlRGF0YS5o
IgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0KKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lz
dHJ5LmgiCisjaW5jbHVkZSAiU3RpbGxJbWFnZUhhaWt1LmgiCisjaW5jbHVkZSA8Qml0bWFwU3Ry
ZWFtLmg+CisjaW5jbHVkZSA8U3RyaW5nLmg+CisjaW5jbHVkZSA8VHJhbnNsYXRvclJvc3Rlci5o
PgorI2luY2x1ZGUgPHN0ZGlvLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW1hZ2VCdWZm
ZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYpCitJbWFnZUJ1ZmZlckRhdGE6
OkltYWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXplJiBzaXplKQorICAgIDogbV9iaXRtYXAoQlJl
Y3QoMCwgMCwgc2l6ZS53aWR0aCgpIC0gMSwgc2l6ZS5oZWlnaHQoKSAtIDEpLCBCX1JHQkEzMiwg
dHJ1ZSkKKyAgICAsIG1fdmlldyhtX2JpdG1hcC5Cb3VuZHMoKSwgIldlYktpdCBJbWFnZUJ1ZmZl
ckRhdGEiLCAwLCAwKQogeworICAgIC8vIEFsd2F5cyBrZWVwIHRoZSBiaXRtYXAgbG9ja2VkLCB3
ZSBhcmUgdGhlIG9ubHkgY2xpZW50LgorICAgIG1fYml0bWFwLkxvY2soKTsKKyAgICBtX2JpdG1h
cC5BZGRDaGlsZCgmbV92aWV3KTsKKworICAgIC8vIEZpbGwgd2l0aCBjb21wbGV0ZWx5IHRyYW5z
cGFyZW50IGNvbG9yLgorICAgIG1lbXNldChtX2JpdG1hcC5CaXRzKCksIDAsIG1fYml0bWFwLkJp
dHNMZW5ndGgoKSk7CisKKyAgICAvLyBTaW5jZSBJbWFnZUJ1ZmZlciBpcyB1c2VkIG1haW5seSBm
b3IgQ2FudmFzLCBleHBsaWNpdGx5IGluaXRpYWxpemUKKyAgICAvLyBpdHMgdmlldydzIGdyYXBo
aWNzIHN0YXRlIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgY2FudmFzIGRlZmF1bHRzCisgICAgLy8g
Tk9URToga2VlcCBpbiBzeW5jIHdpdGggQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpTdGF0ZQor
ICAgIG1fdmlldy5TZXRMaW5lTW9kZShCX0JVVFRfQ0FQLCBCX01JVEVSX0pPSU4sIDEwKTsKKyAg
ICBtX3ZpZXcuU2V0RHJhd2luZ01vZGUoQl9PUF9BTFBIQSk7CisgICAgbV92aWV3LlNldEJsZW5k
aW5nTW9kZShCX1BJWEVMX0FMUEhBLCBCX0FMUEhBX0NPTVBPU0lURSk7CiB9CiAKLUltYWdlQnVm
ZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiwgSW1hZ2VDb2xvclNwYWNlIGltYWdlQ29s
b3JTcGFjZSwgYm9vbCYgc3VjY2VzcykKLSAgICA6IG1fZGF0YShJbnRTaXplKCkpCitJbWFnZUJ1
ZmZlckRhdGE6On5JbWFnZUJ1ZmZlckRhdGEoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgc3VjY2VzcyA9IGZhbHNlOworICAgIC8vIFJlbW92ZSB0aGUgdmlldyBmcm9tIHRoZSBiaXRt
YXAsIGtlZXBpbmcgaXQgZnJvbSBiZWluZyBmcmVlJ2QgdHdpY2UuCisgICAgbV92aWV3LlJlbW92
ZVNlbGYoKTsKKyAgICBtX2JpdG1hcC5VbmxvY2soKTsKIH0KIAotSW1hZ2VCdWZmZXI6On5JbWFn
ZUJ1ZmZlcigpCitJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwg
SW1hZ2VDb2xvclNwYWNlIGltYWdlQ29sb3JTcGFjZSwgYm9vbCYgc3VjY2VzcykKKyAgICA6IG1f
ZGF0YShzaXplKQorICAgICwgbV9zaXplKHNpemUpCiB7CisgICAgbV9jb250ZXh0LnNldChuZXcg
R3JhcGhpY3NDb250ZXh0KCZtX2RhdGEubV92aWV3KSk7CisgICAgc3VjY2VzcyA9IHRydWU7CiB9
CiAKLUdyYXBoaWNzQ29udGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAorSW1hZ2VC
dWZmZXI6On5JbWFnZUJ1ZmZlcigpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gMDsKIH0KIAotUGFzc1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRp
cGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK0dyYXBoaWNzQ29udGV4
dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIDA7CisgICAgQVNTRVJUKG1fZGF0YS5tX3ZpZXcuV2luZG93KCkpOworCisg
ICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKIH0KIAotUGFzc1JlZlB0cjxJbWFnZURhdGE+IElt
YWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3Qp
IGNvbnN0CitJbWFnZSogSW1hZ2VCdWZmZXI6OmltYWdlKCkgY29uc3QKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiAwOworICAgIGlmICghbV9pbWFnZSkgeworICAgICAgICAv
LyBJdCdzIGFzc3VtZWQgdGhhdCBpZiBpbWFnZSgpIGlzIGNhbGxlZCwgdGhlIGFjdHVhbCByZW5k
ZXJpbmcgdG8gdGhlCisgICAgICAgIC8vIEdyYXBoaWNzQ29udGV4dCBtdXN0IGJlIGRvbmUuCisg
ICAgICAgIEFTU0VSVChjb250ZXh0KCkpOworICAgICAgICBtX2RhdGEubV92aWV3LlN5bmMoKTsK
KyAgICAgICAgbV9pbWFnZSA9IFN0aWxsSW1hZ2U6OmNyZWF0ZShtX2RhdGEubV9iaXRtYXApOwor
ICAgIH0KKworICAgIHJldHVybiBtX2ltYWdlLmdldCgpOwogfQogCi12b2lkIEltYWdlQnVmZmVy
OjpwdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW1hZ2VEYXRhKiBzb3VyY2UsIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCit2b2lkIEltYWdlQnVm
ZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3QgVmVjdG9yPGludD4mIGxvb2tV
cFRhYmxlKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgdWludDgqIHJvd0RhdGEgPSBy
ZWludGVycHJldF9jYXN0PHVpbnQ4Kj4obV9kYXRhLm1fYml0bWFwLkJpdHMoKSk7CisgICAgdW5z
aWduZWQgYnl0ZXNQZXJSb3cgPSBtX2RhdGEubV9iaXRtYXAuQnl0ZXNQZXJSb3coKTsKKyAgICB1
bnNpZ25lZCByb3dzID0gbV9zaXplLmhlaWdodCgpOworICAgIHVuc2lnbmVkIGNvbHVtbnMgPSBt
X3NpemUud2lkdGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIHkgPSAwOyB5IDwgcm93czsgeSsrKSB7
CisgICAgICAgIHVpbnQ4KiBwaXhlbCA9IHJvd0RhdGE7CisgICAgICAgIGZvciAodW5zaWduZWQg
eCA9IDA7IHggPCBjb2x1bW5zOyB4KyspIHsKKyAgICAgICAgICAgIC8vIGxvb2tVcFRhYmxlIGRv
ZXNuJ3Qgc2VlbSB0byBzdXBwb3J0IGEgTFVUIGZvciBlYWNoIGNvbG9yIGNoYW5uZWwKKyAgICAg
ICAgICAgIC8vIHNlcGFyYXRlbHkgKGp1ZGdpbmcgZnJvbSB0aGUgb3RoZXIgcG9ydHMpLiBXZSBk
b24ndCBuZWVkIHRvCisgICAgICAgICAgICAvLyBjb252ZXJ0IGZyb20vdG8gcHJlLW11bHRpcGxp
ZWQgY29sb3Igc3BhY2Ugc2luY2UgQkJpdG1hcCBzdG9yYWdlCisgICAgICAgICAgICAvLyBpcyBu
b3QgcHJlLW11bHRpcGxpZWQuCisgICAgICAgICAgICBwaXhlbFswXSA9IGxvb2tVcFRhYmxlW3Bp
eGVsWzBdXTsKKyAgICAgICAgICAgIHBpeGVsWzFdID0gbG9va1VwVGFibGVbcGl4ZWxbMV1dOwor
ICAgICAgICAgICAgcGl4ZWxbMl0gPSBsb29rVXBUYWJsZVtwaXhlbFsyXV07CisgICAgICAgICAg
ICAvLyBhbHBoYSBzdGF5cyB1bm1vZGlmaWVkLgorICAgICAgICAgICAgcGl4ZWwgKz0gNDsKKyAg
ICAgICAgfQorICAgICAgICByb3dEYXRhICs9IGJ5dGVzUGVyUm93OworICAgIH0KK30KKworc3Rh
dGljIGlubGluZSB2b2lkIGNvbnZlcnRGcm9tRGF0YShjb25zdCB1aW50OCogc291cmNlUm93cywg
dW5zaWduZWQgc291cmNlQnl0ZXNQZXJSb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQ4KiBkZXN0Um93cywgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCByb3dzLCB1bnNpZ25lZCBjb2x1
bW5zKQoreworICAgIGZvciAodW5zaWduZWQgeSA9IDA7IHkgPCByb3dzOyB5KyspIHsKKyAgICAg
ICAgY29uc3QgdWludDgqIHMgPSBzb3VyY2VSb3dzOworICAgICAgICB1aW50OCogZCA9IGRlc3RS
b3dzOworICAgICAgICBmb3IgKHVuc2lnbmVkIHggPSAwOyB4IDwgY29sdW1uczsgeCsrKSB7Cisg
ICAgICAgICAgICAvLyBSR0JBIC0+IEJHUkEgb3IgQkdSQSAtPiBSR0JBCisgICAgICAgICAgICBk
WzBdID0gc1syXTsKKyAgICAgICAgICAgIGRbMV0gPSBzWzFdOworICAgICAgICAgICAgZFsyXSA9
IHNbMF07CisgICAgICAgICAgICBkWzNdID0gc1szXTsKKyAgICAgICAgICAgIGQgKz0gNDsKKyAg
ICAgICAgICAgIHMgKz0gNDsKKyAgICAgICAgfQorICAgICAgICBzb3VyY2VSb3dzICs9IHNvdXJj
ZUJ5dGVzUGVyUm93OworICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7CisgICAg
fQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29udmVydEZyb21JbnRlcm5hbERhdGEoY29uc3Qg
dWludDgqIHNvdXJjZVJvd3MsIHVuc2lnbmVkIHNvdXJjZUJ5dGVzUGVyUm93LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4KiBkZXN0Um93cywgdW5zaWdu
ZWQgZGVzdEJ5dGVzUGVyUm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIHJvd3MsIHVuc2lnbmVkIGNvbHVtbnMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtdWx0aXBsaWVkKQoreworICAgIGlm
IChwcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIC8vIEludGVybmFsIHN0b3JhZ2UgaXMgbm90IHBy
ZS1tdWx0aXBsaWVkLCBwcmUtbXVsdGlwbHkgb24gdGhlIGZseS4KKyAgICAgICAgZm9yICh1bnNp
Z25lZCB5ID0gMDsgeSA8IHJvd3M7IHkrKykgeworICAgICAgICAgICAgY29uc3QgdWludDgqIHMg
PSBzb3VyY2VSb3dzOworICAgICAgICAgICAgdWludDgqIGQgPSBkZXN0Um93czsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgeCA9IDA7IHggPCBjb2x1bW5zOyB4KyspIHsKKyAgICAgICAgICAg
ICAgICAvLyBSR0JBIC0+IEJHUkEgb3IgQkdSQSAtPiBSR0JBCisgICAgICAgICAgICAgICAgZFsw
XSA9IHN0YXRpY19jYXN0PHVpbnQxNj4oc1syXSkgKiBzWzNdIC8gMjU1OworICAgICAgICAgICAg
ICAgIGRbMV0gPSBzdGF0aWNfY2FzdDx1aW50MTY+KHNbMV0pICogc1szXSAvIDI1NTsKKyAgICAg
ICAgICAgICAgICBkWzJdID0gc3RhdGljX2Nhc3Q8dWludDE2PihzWzBdKSAqIHNbM10gLyAyNTU7
CisgICAgICAgICAgICAgICAgZFszXSA9IHNbM107CisgICAgICAgICAgICAgICAgZCArPSA0Owor
ICAgICAgICAgICAgICAgIHMgKz0gNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNvdXJj
ZVJvd3MgKz0gc291cmNlQnl0ZXNQZXJSb3c7CisgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0
Qnl0ZXNQZXJSb3c7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBjb252ZXJ0RnJv
bURhdGEoc291cmNlUm93cywgc291cmNlQnl0ZXNQZXJSb3csCisgICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93cywgZGVzdEJ5dGVzUGVyUm93LAorICAgICAgICAgICAgICAgICAgICAgICAg
cm93cywgY29sdW1ucyk7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29udmVydFRv
SW50ZXJuYWxEYXRhKGNvbnN0IHVpbnQ4KiBzb3VyY2VSb3dzLCB1bnNpZ25lZCBzb3VyY2VCeXRl
c1BlclJvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDgq
IGRlc3RSb3dzLCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJvd3MsIHVuc2lnbmVkIGNvbHVtbnMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlbXVsdGlwbGll
ZCkKK3sKKyAgICAvLyBJbnRlcm5hbCBzdG9yYWdlIGlzIG5vdCBwcmUtbXVsdGlwbGllZCwgZGUt
bXVsdGlwbHkgc291cmNlIGRhdGEuCisgICAgaWYgKHByZW11bHRpcGxpZWQpIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCB5ID0gMDsgeSA8IHJvd3M7IHkrKykgeworICAgICAgICAgICAgY29uc3Qg
dWludDgqIHMgPSBzb3VyY2VSb3dzOworICAgICAgICAgICAgdWludDgqIGQgPSBkZXN0Um93czsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgeCA9IDA7IHggPCBjb2x1bW5zOyB4KyspIHsKKyAg
ICAgICAgICAgICAgICAvLyBSR0JBIC0+IEJHUkEgb3IgQkdSQSAtPiBSR0JBCisgICAgICAgICAg
ICAgICAgZFswXSA9IHN0YXRpY19jYXN0PHVpbnQxNj4oc1syXSkgKiAyNTUgLyBzWzNdOworICAg
ICAgICAgICAgICAgIGRbMV0gPSBzdGF0aWNfY2FzdDx1aW50MTY+KHNbMV0pICogMjU1IC8gc1sz
XTsKKyAgICAgICAgICAgICAgICBkWzJdID0gc3RhdGljX2Nhc3Q8dWludDE2PihzWzBdKSAqIDI1
NSAvIHNbM107CisgICAgICAgICAgICAgICAgZFszXSA9IHNbM107CisgICAgICAgICAgICAgICAg
ZCArPSA0OworICAgICAgICAgICAgICAgIHMgKz0gNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHNvdXJjZVJvd3MgKz0gc291cmNlQnl0ZXNQZXJSb3c7CisgICAgICAgICAgICBkZXN0Um93
cyArPSBkZXN0Qnl0ZXNQZXJSb3c7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBj
b252ZXJ0RnJvbURhdGEoc291cmNlUm93cywgc291cmNlQnl0ZXNQZXJSb3csCisgICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93cywgZGVzdEJ5dGVzUGVyUm93LAorICAgICAgICAgICAgICAg
ICAgICAgICAgcm93cywgY29sdW1ucyk7CisgICAgfQorfQorCitzdGF0aWMgUGFzc1JlZlB0cjxJ
bWFnZURhdGE+IGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbWFnZUJ1
ZmZlckRhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBs
aWVkKQoreworICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiByZXN1bHQgPSBJbWFnZURhdGE6OmNy
ZWF0ZShyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIHVuc2lnbmVkIGNoYXIqIGRh
dGEgPSByZXN1bHQtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCk7CisKKyAgICAvLyBJZiB0aGUgZGVz
dGluYXRpb24gaW1hZ2UgaXMgbGFyZ2VyIHRoYW4gdGhlIHNvdXJjZSBpbWFnZSwgdGhlIG91dHNp
ZGUKKyAgICAvLyByZWdpb25zIG5lZWQgdG8gYmUgdHJhbnNwYXJlbnQuIFRoaXMgd2F5IGlzIHNp
bXBseSwgYWx0aG91Z2ggd2l0aCBhCisgICAgLy8gYSBzbGlnaHQgb3ZlcmhlYWQgZm9yIHRoZSBp
bnNpZGUgcmVnaW9uLgorICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwIHx8IChy
ZWN0LngoKSArIHJlY3Qud2lkdGgoKSkgPiBzaXplLndpZHRoKCkgfHwgKHJlY3QueSgpICsgcmVj
dC5oZWlnaHQoKSkgPiBzaXplLmhlaWdodCgpKQorICAgICAgICBtZW1zZXQoZGF0YSwgMCwgcmVz
dWx0LT5kYXRhKCktPmxlbmd0aCgpKTsKKworICAgIC8vIElmIHRoZSByZXF1ZXN0ZWQgaW1hZ2Ug
aXMgb3V0c2lkZSB0aGUgc291cmNlIGltYWdlLCB3ZSBjYW4gcmV0dXJuIGF0CisgICAgLy8gdGhp
cyBwb2ludC4KKyAgICBpZiAocmVjdC54KCkgPiBzaXplLndpZHRoKCkgfHwgcmVjdC55KCkgPiBz
aXplLmhlaWdodCgpIHx8IHJlY3QucmlnaHQoKSA8IDAgfHwgcmVjdC5ib3R0b20oKSA8IDApCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAvLyBOb3cgd2Uga25vdyB0aGVyZSBtdXN0IGJl
IGFuIGludGVyc2VjdGlvbiByZWN0IHdoaWNoIHdlIG5lZWQgdG8gZXh0cmFjdC4KKyAgICBCUmVj
dCBzb3VyY2VSZWN0KDAsIDAsIHNpemUud2lkdGgoKSAtIDEsIHNpemUuaGVpZ2h0KCkgLSAxKTsK
KyAgICBzb3VyY2VSZWN0ID0gQlJlY3QocmVjdCkgJiBzb3VyY2VSZWN0OworCisgICAgdW5zaWdu
ZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHJlY3Qud2lkdGgoKTsKKyAgICB1bnNpZ25lZCBjaGFy
KiBkZXN0Um93cyA9IGRhdGE7CisgICAgLy8gT2Zmc2V0IHRoZSBkZXN0aW5hdGlvbiBwb2ludGVy
IHRvIHBvaW50IGF0IHRoZSBmaXJzdCBwaXhlbCBvZiB0aGUKKyAgICAvLyBpbnRlcnNlY3Rpb24g
cmVjdC4KKyAgICBkZXN0Um93cyArPSAocmVjdC54KCkgLSAoaW50KXNvdXJjZVJlY3QubGVmdCkg
KiA0ICsgKHJlY3QueSgpIC0gKGludClzb3VyY2VSZWN0LnRvcCkgKiBkZXN0Qnl0ZXNQZXJSb3c7
CisKKyAgICBjb25zdCB1aW50OCogc291cmNlUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDgqPihpbWFnZURhdGEubV9iaXRtYXAuQml0cygpKTsKKyAgICB1aW50MzIgc291cmNlQnl0
ZXNQZXJSb3cgPSBpbWFnZURhdGEubV9iaXRtYXAuQnl0ZXNQZXJSb3coKTsKKyAgICAvLyBPZmZz
ZXQgdGhlIHNvdXJjZSBwb2ludGVyIHRvIHBvaW50IGF0IHRoZSBmaXJzdCBwaXhlbCBvZiB0aGUK
KyAgICAvLyBpbnRlcnNlY3Rpb24gcmVjdC4KKyAgICBzb3VyY2VSb3dzICs9IChpbnQpc291cmNl
UmVjdC5sZWZ0ICogNCArIChpbnQpc291cmNlUmVjdC50b3AgKiBzb3VyY2VCeXRlc1BlclJvdzsK
KworICAgIHVuc2lnbmVkIHJvd3MgPSBzb3VyY2VSZWN0LkludGVnZXJIZWlnaHQoKSArIDE7Cisg
ICAgdW5zaWduZWQgY29sdW1ucyA9IHNvdXJjZVJlY3QuSW50ZWdlcldpZHRoKCkgKyAxOworICAg
IGNvbnZlcnRGcm9tSW50ZXJuYWxEYXRhKHNvdXJjZVJvd3MsIHNvdXJjZUJ5dGVzUGVyUm93LCBk
ZXN0Um93cywgZGVzdEJ5dGVzUGVyUm93LAorICAgICAgICByb3dzLCBjb2x1bW5zLCBwcmVtdWx0
aXBsaWVkKTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXI6OnB1
dFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW1hZ2VEYXRhKiBzb3VyY2UsIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCisKK1Bhc3NSZWZQdHI8SW1h
Z2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJl
Y3QmIHJlY3QpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAvLyBNYWtlIHN1
cmUgYWxsIGFzeW5jaHJvbm91cyBkcmF3aW5nIGhhcyBmaW5pc2hlZAorICAgIG1fZGF0YS5tX3Zp
ZXcuU3luYygpOworICAgIHJldHVybiBnZXRJbWFnZURhdGEocmVjdCwgbV9kYXRhLCBtX3NpemUs
IGZhbHNlKTsKIH0KIAotU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5n
JikgY29uc3QKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlw
bGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAogewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOworICAgIC8vIE1ha2Ugc3VyZSBhbGwgYXN5
bmNocm9ub3VzIGRyYXdpbmcgaGFzIGZpbmlzaGVkCisgICAgbV9kYXRhLm1fdmlldy5TeW5jKCk7
CisgICAgcmV0dXJuIGdldEltYWdlRGF0YShyZWN0LCBtX2RhdGEsIG1fc2l6ZSwgdHJ1ZSk7Cit9
CisKK3N0YXRpYyB2b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEqIHNvdXJjZSwgY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgSW1hZ2VCdWZmZXJE
YXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlwbGllZCkK
K3sKKyAgICAvLyBJZiB0aGUgc291cmNlIGltYWdlIGlzIG91dHNpZGUgdGhlIGRlc3RpbmF0aW9u
IGltYWdlLCB3ZSBjYW4gcmV0dXJuIGF0CisgICAgLy8gdGhpcyBwb2ludC4KKyAgICAvLyBUT0RP
OiBDaGVjayBpZiB0aGlzIGlzbid0IGFscmVhZHkgZG9uZSBpbiBXZWJDb3JlLgorICAgIGlmIChk
ZXN0UG9pbnQueCgpID4gc2l6ZS53aWR0aCgpIHx8IGRlc3RQb2ludC55KCkgPiBzaXplLmhlaWdo
dCgpCisgICAgICAgIHx8IGRlc3RQb2ludC54KCkgKyBzb3VyY2VSZWN0LndpZHRoKCkgPCAwCisg
ICAgICAgIHx8IGRlc3RQb2ludC55KCkgKyBzb3VyY2VSZWN0LmhlaWdodCgpIDwgMCkgeworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgdW5zaWduZWQgY2hhciogc291cmNlUm93
cyA9IHNvdXJjZS0+ZGF0YSgpLT5kYXRhKCktPmRhdGEoKTsKKyAgICB1bnNpZ25lZCBzb3VyY2VC
eXRlc1BlclJvdyA9IDQgKiBzb3VyY2UtPndpZHRoKCk7CisgICAgLy8gT2Zmc2V0IHRoZSBzb3Vy
Y2UgcG9pbnRlciB0byB0aGUgZmlyc3QgcGl4ZWwgb2YgdGhlIHNvdXJjZSByZWN0LgorICAgIHNv
dXJjZVJvd3MgKz0gc291cmNlUmVjdC54KCkgKiA0ICsgc291cmNlUmVjdC55KCkgKiBzb3VyY2VC
eXRlc1BlclJvdzsKKworICAgIC8vIFdlIGtub3cgdGhlcmUgbXVzdCBiZSBhbiBpbnRlcnNlY3Rp
b24gcmVjdC4KKyAgICBCUmVjdCBkZXN0UmVjdChkZXN0UG9pbnQueCgpLCBkZXN0UG9pbnQueSgp
LCBzb3VyY2VSZWN0LndpZHRoKCkgLSAxLCBzb3VyY2VSZWN0LmhlaWdodCgpIC0gMSk7CisgICAg
ZGVzdFJlY3QgPSBkZXN0UmVjdCAmIEJSZWN0KDAsIDAsIHNpemUud2lkdGgoKSAtIDEsIHNpemUu
aGVpZ2h0KCkgLSAxKTsKKworICAgIHVuc2lnbmVkIGNoYXIqIGRlc3RSb3dzID0gcmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oaW1hZ2VEYXRhLm1fYml0bWFwLkJpdHMoKSk7CisgICAg
dWludDMyIGRlc3RCeXRlc1BlclJvdyA9IGltYWdlRGF0YS5tX2JpdG1hcC5CeXRlc1BlclJvdygp
OworICAgIC8vIE9mZnNldCB0aGUgc291cmNlIHBvaW50ZXIgdG8gcG9pbnQgYXQgdGhlIGZpcnN0
IHBpeGVsIG9mIHRoZQorICAgIC8vIGludGVyc2VjdGlvbiByZWN0LgorICAgIGRlc3RSb3dzICs9
IChpbnQpZGVzdFJlY3QubGVmdCAqIDQgKyAoaW50KWRlc3RSZWN0LnRvcCAqIGRlc3RCeXRlc1Bl
clJvdzsKKworICAgIHVuc2lnbmVkIHJvd3MgPSBzb3VyY2VSZWN0LmhlaWdodCgpOworICAgIHVu
c2lnbmVkIGNvbHVtbnMgPSBzb3VyY2VSZWN0LndpZHRoKCk7CisgICAgY29udmVydFRvSW50ZXJu
YWxEYXRhKHNvdXJjZVJvd3MsIHNvdXJjZUJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdEJ5dGVz
UGVyUm93LAorICAgICAgICByb3dzLCBjb2x1bW5zLCBwcmVtdWx0aXBsaWVkKTsKIH0KIAotSW1h
Z2UqIEltYWdlQnVmZmVyOjppbWFnZSgpIGNvbnN0Cit2b2lkIEltYWdlQnVmZmVyOjpwdXRVbm11
bHRpcGxpZWRJbWFnZURhdGEoSW1hZ2VEYXRhKiBzb3VyY2UsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICByZXR1cm4gMDsKKyAgICAvLyBNYWtlIHN1cmUgYWxsIGFzeW5jaHJvbm91cyBkcmF3
aW5nIGhhcyBmaW5pc2hlZAorICAgIG1fZGF0YS5tX3ZpZXcuU3luYygpOworICAgIHB1dEltYWdl
RGF0YShzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RQb2ludCwgbV9kYXRhLCBtX3NpemUsIGZhbHNl
KTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNv
bnN0IFZlY3RvcjxpbnQ+JiBsb29rVXBUYWJsZSkKK3ZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11
bHRpcGxpZWRJbWFnZURhdGEoSW1hZ2VEYXRhKiBzb3VyY2UsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICAvLyBNYWtlIHN1cmUgYWxsIGFzeW5jaHJvbm91cyBkcmF3aW5nIGhhcyBmaW5pc2hl
ZAorICAgIG1fZGF0YS5tX3ZpZXcuU3luYygpOworICAgIHB1dEltYWdlRGF0YShzb3VyY2UsIHNv
dXJjZVJlY3QsIGRlc3RQb2ludCwgbV9kYXRhLCBtX3NpemUsIHRydWUpOworfQorCitTdHJpbmcg
SW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBjb25zdAorewor
ICAgIGlmICghTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5j
b2RpbmcobWltZVR5cGUpKQorICAgICAgICByZXR1cm4gImRhdGE6LCI7CisKKyAgICBCU3RyaW5n
IG1pbWVUeXBlU3RyaW5nKG1pbWVUeXBlKTsKKworICAgIHVpbnQzMiB0cmFuc2xhdG9yVHlwZSA9
IDA7CisKKyAgICBCVHJhbnNsYXRvclJvc3Rlciogcm9zdGVyID0gQlRyYW5zbGF0b3JSb3N0ZXI6
OkRlZmF1bHQoKTsKKyAgICB0cmFuc2xhdG9yX2lkKiB0cmFuc2xhdG9yczsKKyAgICBpbnQzMiB0
cmFuc2xhdG9yQ291bnQ7CisgICAgcm9zdGVyLT5HZXRBbGxUcmFuc2xhdG9ycygmdHJhbnNsYXRv
cnMsICZ0cmFuc2xhdG9yQ291bnQpOworICAgIGZvciAoaW50MzIgaSA9IDA7IGkgPCB0cmFuc2xh
dG9yQ291bnQ7IGkrKykgeworICAgICAgICAvLyBTa2lwIHRyYW5zbGF0b3JzIHRoYXQgZG9uJ3Qg
c3VwcG9ydCBhcmNoaXZlZCBCQml0bWFwcyBhcyBpbnB1dCBkYXRhLgorICAgICAgICBjb25zdCB0
cmFuc2xhdGlvbl9mb3JtYXQqIGlucHV0Rm9ybWF0czsKKyAgICAgICAgaW50MzIgZm9ybWF0Q291
bnQ7CisgICAgICAgIHJvc3Rlci0+R2V0SW5wdXRGb3JtYXRzKHRyYW5zbGF0b3JzW2ldLCAmaW5w
dXRGb3JtYXRzLCAmZm9ybWF0Q291bnQpOworICAgICAgICBib29sIHN1cHBvcnRzQml0bWFwcyA9
IGZhbHNlOworICAgICAgICBmb3IgKGludDMyIGogPSAwOyBqIDwgZm9ybWF0Q291bnQ7IGorKykg
eworICAgICAgICAgICAgaWYgKGlucHV0Rm9ybWF0c1tqXS50eXBlID09IEJfVFJBTlNMQVRPUl9C
SVRNQVApIHsKKyAgICAgICAgICAgICAgICBzdXBwb3J0c0JpdG1hcHMgPSB0cnVlOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICgh
c3VwcG9ydHNCaXRtYXBzKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgY29uc3Qg
dHJhbnNsYXRpb25fZm9ybWF0KiBvdXRwdXRGb3JtYXRzOworICAgICAgICByb3N0ZXItPkdldE91
dHB1dEZvcm1hdHModHJhbnNsYXRvcnNbaV0sICZvdXRwdXRGb3JtYXRzLCAmZm9ybWF0Q291bnQp
OworICAgICAgICBmb3IgKGludDMyIGogPSAwOyBqIDwgZm9ybWF0Q291bnQ7IGorKykgeworICAg
ICAgICAgICAgaWYgKG91dHB1dEZvcm1hdHNbal0uZ3JvdXAgPT0gQl9UUkFOU0xBVE9SX0JJVE1B
UAorICAgICAgICAgICAgICAgICYmIG1pbWVUeXBlU3RyaW5nID09IG91dHB1dEZvcm1hdHNbal0u
TUlNRSkgeworICAgICAgICAgICAgICAgIHRyYW5zbGF0b3JUeXBlID0gb3V0cHV0Rm9ybWF0c1tq
XS50eXBlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0cmFuc2xhdG9y
VHlwZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworCisgICAgQk1hbGxvY0lPIHRyYW5z
bGF0ZWRTdHJlYW07CisgICAgQkJpdG1hcCogYml0bWFwID0gY29uc3RfY2FzdDxCQml0bWFwKj4o
Jm1fZGF0YS5tX2JpdG1hcCk7CisgICAgICAgIC8vIEJCaXRtYXBTdHJlYW0gZG9lc24ndCB0YWtl
ICJjb25zdCBCaXRtYXAqIi4uLgorICAgIEJCaXRtYXBTdHJlYW0gYml0bWFwU3RyZWFtKGJpdG1h
cCk7CisgICAgaWYgKHJvc3Rlci0+VHJhbnNsYXRlKCZiaXRtYXBTdHJlYW0sIDAsIDAsICZ0cmFu
c2xhdGVkU3RyZWFtLCB0cmFuc2xhdG9yVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
Ql9UUkFOU0xBVE9SX0JJVE1BUCwgbWltZVR5cGUudXRmOCgpLmRhdGEoKSkgIT0gQl9PSykgewor
ICAgICAgICBiaXRtYXBTdHJlYW0uRGV0YWNoQml0bWFwKCZiaXRtYXApOworICAgICAgICByZXR1
cm4gImRhdGE6LCI7CisgICAgfQorCisgICAgYml0bWFwU3RyZWFtLkRldGFjaEJpdG1hcCgmYml0
bWFwKTsKKworICAgIFZlY3RvcjxjaGFyPiBlbmNvZGVkQnVmZmVyOworICAgIGJhc2U2NEVuY29k
ZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih0cmFuc2xhdGVkU3RyZWFtLkJ1ZmZlcigp
KSwKKyAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZFN0cmVhbS5CdWZmZXJMZW5ndGgoKSwgZW5j
b2RlZEJ1ZmZlcik7CisKKyAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoImRhdGE6JXM7YmFzZTY0
LCVzIiwgbWltZVR5cGUudXRmOCgpLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ZW5jb2RlZEJ1ZmZlci5kYXRhKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50676</attachid>
            <date>2010-03-14 14:56:07 -0700</date>
            <delta_ts>2010-03-14 14:58:49 -0700</delta_ts>
            <desc>Patch implementing StillImage class</desc>
            <filename>still_image.diff</filename>
            <type>text/plain</type>
            <size>6602</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTEzNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMTAtMDItMjMgIFN0ZXBoYW4gQcOfbXVzICA8c3VwZXJzdGlwcGlA
Z214LmRlPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtIYWlrdV0gSW1wbGVtZW50IEltYWdlQnVmZmVyIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1Mjg4CisKKyAgICAgICAgQ292ZXJlZCBi
eSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICBUaGUgU3RpbGxJbWFnZSBjbGFzcyBpbXBsZW1l
bnRzIFdlYkNvcmU6OkltYWdlIGJ5IHdyYXBwaW5nIGEgbmF0aXZlCisgICAgICAgIEJCaXRtYXAu
IEl0IHdpbGwgYmUgbmVlZGVkIHRvIGltcGxlbWVudCBXZWJDb3JlOjpJbWFnZUJ1ZmZlci4gVGhp
cworICAgICAgICBzb2x1dGlvbiBpcyBqdXN0IGxpa2UgaXQncyBkb25lIGluIHRoZSBRdCBwb3J0
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvU3RpbGxJbWFnZUhhaWt1LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTdGlsbEltYWdlOjpTdGlsbEltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0aWxsSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpTdGlsbEltYWdlOjpkZWNvZGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dGlsbEltYWdlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlN0aWxsSW1hZ2U6Om5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlN0aWxsSW1hZ2U6OmRyYXcp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1N0aWxsSW1hZ2VIYWlrdS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0aWxsSW1hZ2U6OmNyZWF0ZSk6CisKIDIwMTAtMDIt
MjMgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9TdGlsbEltYWdlSGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvU3RpbGxJbWFnZUhhaWt1LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvU3RpbGxJbWFnZUhhaWt1LmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVwaGFuIEHDn211
cyA8c3VwZXJzdGlwcGlAZ214LmRlPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0aWxsSW1hZ2VIYWlrdS5oIgorCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1
ZGUgPFZpZXcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTdGlsbEltYWdlOjpTdGlsbElt
YWdlKGNvbnN0IEJCaXRtYXAmIGJpdG1hcCkKKyAgICA6IG1fYml0bWFwKCZiaXRtYXApCit7Cit9
CisKK3ZvaWQgU3RpbGxJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKGJvb2wgZGVzdHJveUFsbCkK
K3sKKyAgICAvLyBUaGlzIGlzIHVzZWQgZm9yICJsYXJnZSIgYW5pbWF0aW9ucyB0byBmcmVlIGlt
YWdlIGRhdGEuCisgICAgLy8gSXQgYXBwZWFycyBpdCB3b3VsZCBub3QgYXBwbHkgdG8gU3RpbGxJ
bWFnZS4KK30KKwordW5zaWduZWQgU3RpbGxJbWFnZTo6ZGVjb2RlZFNpemUoKSBjb25zdAorewor
ICAgIC8vIEZJWE1FOiBJdCBjb3VsZCBiZSB3aXNlIHRvIHJldHVybiAwIGhlcmUsIHNpbmNlIHdl
IGRvbid0IHdhbnQgV2ViQ29yZQorICAgIC8vIHRvIHRoaW5rIHdlIGVhdCB1cCBtZW1vcnksIHNp
bmNlIHdlIGFyZSBub3QgZnJlZWluZyBhbnkgaW4KKyAgICAvLyBkZXN0cm95RGVjb2RlZERhdGEo
KSBlaXRoZXIuCisgICAgcmV0dXJuIG1fYml0bWFwLkJpdHNMZW5ndGgoKTsKK30KKworSW50U2l6
ZSBTdGlsbEltYWdlOjpzaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50U2l6ZShtX2JpdG1h
cC5Cb3VuZHMoKS5JbnRlZ2VyV2lkdGgoKSArIDEsIG1fYml0bWFwLkJvdW5kcygpLkludGVnZXJI
ZWlnaHQoKSArIDEpOworfQorCitOYXRpdmVJbWFnZVB0ciBTdGlsbEltYWdlOjpuYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpCit7CisgICAgcmV0dXJuICZtX2JpdG1hcDsKK30KKwordm9pZCBT
dGlsbEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QmIHNvdXJj
ZVJlY3QsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQoreworICAgIGlmICghbV9i
aXRtYXAuSXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb250ZXh0LT5zYXZlKCk7
CisgICAgY29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wKTsKKyAgICBjb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKS0+RHJhd0JpdG1hcCgmbV9iaXRtYXAsIHNvdXJjZVJlY3QsIGRlc3RS
ZWN0KTsKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvU3RpbGxJbWFnZUhhaWt1LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9TdGlsbEltYWdlSGFpa3UuaAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvU3RpbGxJbWFnZUhhaWt1LmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
U3RlcGhhbiBBw59tdXMgPHN1cGVyc3RpcHBpQGdteC5kZT4KKyAqCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgU3RpbGxJbWFnZUhhaWt1X2gKKyNkZWZpbmUgU3RpbGxJ
bWFnZUhhaWt1X2gKKworI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSA8Qml0bWFwLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU3RpbGxJbWFnZSA6IHB1YmxpYyBJbWFnZSB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RpbGxJbWFnZT4gY3JlYXRlKGNvbnN0
IEJCaXRtYXAmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdGlsbEltYWdl
KGJpdG1hcCkpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEo
Ym9vbCBkZXN0cm95QWxsID0gdHJ1ZSk7CisgICAgdmlydHVhbCB1bnNpZ25lZCBkZWNvZGVkU2l6
ZSgpIGNvbnN0OworCisgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgdmly
dHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBD
b21wb3NpdGVPcGVyYXRvcik7CisKK3ByaXZhdGU6CisgICAgU3RpbGxJbWFnZShjb25zdCBCQml0
bWFwJiBiaXRtYXApOworICAgIAorICAgIEJCaXRtYXAgbV9iaXRtYXA7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTdGlsbEltYWdlSGFpa3VfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50677</attachid>
            <date>2010-03-14 14:58:49 -0700</date>
            <delta_ts>2010-03-17 21:56:46 -0700</delta_ts>
            <desc>Patch implementing StillImage class</desc>
            <filename>still_image.diff</filename>
            <type>text/plain</type>
            <size>6602</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTEzNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMTAtMDItMjMgIFN0ZXBoYW4gQcOfbXVzICA8c3VwZXJzdGlwcGlA
Z214LmRlPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtIYWlrdV0gSW1wbGVtZW50IEltYWdlQnVmZmVyIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1Mjg4CisKKyAgICAgICAgQ292ZXJlZCBi
eSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICBUaGUgU3RpbGxJbWFnZSBjbGFzcyBpbXBsZW1l
bnRzIFdlYkNvcmU6OkltYWdlIGJ5IHdyYXBwaW5nIGEgbmF0aXZlCisgICAgICAgIEJCaXRtYXAu
IEl0IHdpbGwgYmUgbmVlZGVkIHRvIGltcGxlbWVudCBXZWJDb3JlOjpJbWFnZUJ1ZmZlci4gVGhp
cworICAgICAgICBzb2x1dGlvbiBpcyBqdXN0IGxpa2UgaXQncyBkb25lIGluIHRoZSBRdCBwb3J0
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvU3RpbGxJbWFnZUhhaWt1LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTdGlsbEltYWdlOjpTdGlsbEltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0aWxsSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpTdGlsbEltYWdlOjpkZWNvZGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dGlsbEltYWdlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlN0aWxsSW1hZ2U6Om5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlN0aWxsSW1hZ2U6OmRyYXcp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1N0aWxsSW1hZ2VIYWlrdS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0aWxsSW1hZ2U6OmNyZWF0ZSk6CisKIDIwMTAtMDIt
MjMgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9TdGlsbEltYWdlSGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvU3RpbGxJbWFnZUhhaWt1LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvU3RpbGxJbWFnZUhhaWt1LmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVwaGFuIEHDn211
cyA8c3VwZXJzdGlwcGlAZ214LmRlPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0aWxsSW1hZ2VIYWlrdS5oIgorCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1
ZGUgPFZpZXcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTdGlsbEltYWdlOjpTdGlsbElt
YWdlKGNvbnN0IEJCaXRtYXAmIGJpdG1hcCkKKyAgICA6IG1fYml0bWFwKCZiaXRtYXApCit7Cit9
CisKK3ZvaWQgU3RpbGxJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKGJvb2wgZGVzdHJveUFsbCkK
K3sKKyAgICAvLyBUaGlzIGlzIHVzZWQgZm9yICJsYXJnZSIgYW5pbWF0aW9ucyB0byBmcmVlIGlt
YWdlIGRhdGEuCisgICAgLy8gSXQgYXBwZWFycyBpdCB3b3VsZCBub3QgYXBwbHkgdG8gU3RpbGxJ
bWFnZS4KK30KKwordW5zaWduZWQgU3RpbGxJbWFnZTo6ZGVjb2RlZFNpemUoKSBjb25zdAorewor
ICAgIC8vIEZJWE1FOiBJdCBjb3VsZCBiZSB3aXNlIHRvIHJldHVybiAwIGhlcmUsIHNpbmNlIHdl
IGRvbid0IHdhbnQgV2ViQ29yZQorICAgIC8vIHRvIHRoaW5rIHdlIGVhdCB1cCBtZW1vcnksIHNp
bmNlIHdlIGFyZSBub3QgZnJlZWluZyBhbnkgaW4KKyAgICAvLyBkZXN0cm95RGVjb2RlZERhdGEo
KSBlaXRoZXIuCisgICAgcmV0dXJuIG1fYml0bWFwLkJpdHNMZW5ndGgoKTsKK30KKworSW50U2l6
ZSBTdGlsbEltYWdlOjpzaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50U2l6ZShtX2JpdG1h
cC5Cb3VuZHMoKS5JbnRlZ2VyV2lkdGgoKSArIDEsIG1fYml0bWFwLkJvdW5kcygpLkludGVnZXJI
ZWlnaHQoKSArIDEpOworfQorCitOYXRpdmVJbWFnZVB0ciBTdGlsbEltYWdlOjpuYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpCit7CisgICAgcmV0dXJuICZtX2JpdG1hcDsKK30KKwordm9pZCBT
dGlsbEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QmIHNvdXJj
ZVJlY3QsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQoreworICAgIGlmICghbV9i
aXRtYXAuSXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb250ZXh0LT5zYXZlKCk7
CisgICAgY29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wKTsKKyAgICBjb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKS0+RHJhd0JpdG1hcCgmbV9iaXRtYXAsIHNvdXJjZVJlY3QsIGRlc3RS
ZWN0KTsKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvU3RpbGxJbWFnZUhhaWt1LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9TdGlsbEltYWdlSGFpa3UuaAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvU3RpbGxJbWFnZUhhaWt1LmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
U3RlcGhhbiBBw59tdXMgPHN1cGVyc3RpcHBpQGdteC5kZT4KKyAqCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgU3RpbGxJbWFnZUhhaWt1X2gKKyNkZWZpbmUgU3RpbGxJ
bWFnZUhhaWt1X2gKKworI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSA8Qml0bWFwLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU3RpbGxJbWFnZSA6IHB1YmxpYyBJbWFnZSB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RpbGxJbWFnZT4gY3JlYXRlKGNvbnN0
IEJCaXRtYXAmIGJpdG1hcCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3Rp
bGxJbWFnZShiaXRtYXApKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29k
ZWREYXRhKGJvb2wgZGVzdHJveUFsbCA9IHRydWUpOworICAgIHZpcnR1YWwgdW5zaWduZWQgZGVj
b2RlZFNpemUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwor
ICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYg
ZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JT
cGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOworCitwcml2YXRlOgorICAgIFN0aWxsSW1hZ2UoY29u
c3QgQkJpdG1hcCYpOworICAgIAorICAgIEJCaXRtYXAgbV9iaXRtYXA7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTdGlsbEltYWdlSGFpa3VfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50678</attachid>
            <date>2010-03-14 15:22:35 -0700</date>
            <delta_ts>2010-04-13 11:29:54 -0700</delta_ts>
            <desc>Patch implementing all ImageBuffer methods.</desc>
            <filename>image_buffer.diff</filename>
            <type>text/plain</type>
            <size>18339</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTEzOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDkgQEAKKzIwMTAtMDItMjMgIFN0ZXBoYW4gQcOfbXVzICA8c3VwZXJzdGlwcGlA
Z214LmRlPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtIYWlrdV0gSW1wbGVtZW50IEltYWdlQnVmZmVyIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1Mjg4CisKKyAgICAgICAgQ292ZXJlZCBi
eSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICBDb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBJ
bWFnZUJ1ZmZlciBmb3IgSGFpa3UuIFVzZXMgU3RpbGxJbWFnZQorICAgICAgICBjbGFzcyB0byBl
eHBvcnQgYSBXZWJDb3JlOjpJbWFnZSBhbmQgYXNzb2NpYXRlZCBHcmFwaGljc0NvbnRleHQKKyAg
ICAgICAgdG8gcGVyZm9ybSBhcmJpdHJhcnkgZHJhd2luZyBpbiB0aGUgb2Zmc2NyZWVuIEJCaXRt
YXAgYnVmZmVyLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZm
ZXJEYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJI
YWlrdS5jcHAsCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVy
RGF0YSksCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6On5JbWFnZUJ1ZmZlckRh
dGEpLAorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKSwKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIpLAorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmNvbnRleHQpLAorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OmltYWdlKToKKyAgICAgICAgICAgIEltcGxlbWVudGF0aW9uIHVzZXMgb2Zmc2NyZWVuIEJCaXRt
YXAgYW5kIEJWaWV3LCB3cmFwcyBTdGlsbEltYWdlCisgICAgICAgICAgICBhcm91bmQgdGhvc2Ug
dG8gcHJvdmlkZSBXZWJDb3JlOjpJbWFnZSBpbnRlcmZhY2UuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnZlcnRGcm9tRGF0YSk6CisgICAgICAgICAgICBNZXRob2QganVzdCBwZXJmb3JtcyBC
R1JBIDwtPiBSR0JBIGNvbnZlcnNpb24uCisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RnJvbUlu
dGVybmFsRGF0YSk6CisgICAgICAgICAgICBNZXRob2QganVzdCBwZXJmb3JtcyBCR1JBIDwtPiBS
R0JBIGNvbnZlcnNpb24gYW5kIGhhbmRsZXMKKyAgICAgICAgICAgIHByZS1tdWx0aXBseWluZyB0
aGUgY29sb3IgdmFsdWVzIGlmIHJlcXVlc3RlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRU
b0ludGVybmFsRGF0YSk6CisgICAgICAgICAgICBNZXRob2QganVzdCBwZXJmb3JtcyBCR1JBIDwt
PiBSR0JBIGNvbnZlcnNpb24gYW5kIGhhbmRsZXMKKyAgICAgICAgICAgIGRlLm11bHRpcGx5aW5n
IHRoZSBjb2xvciB2YWx1ZXMgaWYgcmVxdWVzdGVkLgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW1h
Z2VEYXRhKToKKyAgICAgICAgICAgIENvbW1vbiBjb2RlIGZvciB0aGUgbmV4dCB0d28gbWV0aG9k
cy4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURh
dGEpLAorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFn
ZURhdGEpOgorICAgICAgICAgICAgSW1wbGVtZW50ZWQuCisgICAgICAgIChXZWJDb3JlOjpwdXRJ
bWFnZURhdGEpOgorICAgICAgICAgICAgQ29tbW9uIGNvZGUgZm9yIHRoZSBuZXh0IHR3byBtZXRo
b2RzLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dFVubXVsdGlwbGllZEltYWdl
RGF0YSksCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZElt
YWdlRGF0YSk6CisgICAgICAgICAgICBJbXBsZW1lbnRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjp0b0RhdGFVUkwpOgorICAgICAgICAgICAgVXNlcyBIYWlrdSAiVHJhbnNsYXRp
b24gS2l0IiB0byBjb252ZXJ0IGltYWdlIGRhdGEgdG8gZGF0YQorICAgICAgICAgICAgb2YgdGhl
IHJlcXVlc3RlZCBtaW1lIHR5cGUuCisKIDIwMTAtMDItMjMgIFN0ZXBoYW4gQcOfbXVzICA8c3Vw
ZXJzdGlwcGlAZ214LmRlPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckRhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVyRGF0
YS5oCShyZXZpc2lvbiA1NTI1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
SW1hZ2VCdWZmZXJEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVwaGFuIEHDn211cyA8c3VwZXJzdGlwcGlAZ214LmRl
PgogICoKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMjgsMTYgKzI4LDI0IEBACiAj
aWZuZGVmIEltYWdlQnVmZmVyRGF0YV9oCiAjZGVmaW5lIEltYWdlQnVmZmVyRGF0YV9oCiAKKyNp
bmNsdWRlICJPd25QdHIuaCIKKyNpbmNsdWRlIDxCaXRtYXAuaD4KKyNpbmNsdWRlIDxWaWV3Lmg+
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIEludFNpemU7CitjbGFzcyBJbnRT
aXplOworCitjbGFzcyBJbWFnZUJ1ZmZlckRhdGEgeworcHVibGljOgorICAgIEltYWdlQnVmZmVy
RGF0YShjb25zdCBJbnRTaXplJik7CisgICAgfkltYWdlQnVmZmVyRGF0YSgpOwogCi0gICAgY2xh
c3MgSW1hZ2VCdWZmZXJEYXRhIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEltYWdlQnVmZmVyRGF0
YShjb25zdCBJbnRTaXplJik7Ci0gICAgfTsKKyAgICBCQml0bWFwIG1fYml0bWFwOworICAgIEJW
aWV3IG1fdmlldzsKK307CiAKLX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKLSNlbmRpZiAgLy8gSW1hZ2VCdWZmZXJEYXRhX2gKKyNlbmRpZiAvLyBJbWFn
ZUJ1ZmZlckRhdGFfaAogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0lt
YWdlQnVmZmVySGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHAJKHJldmlzaW9uIDU1MjUwKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNp
bW9uIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFN0ZXBo
YW4gQcOfbXVzIDxzdXBlcnN0aXBwaUBnbXguZGU+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI2LDcxICsyNiwzNDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgogCisjaW5jbHVkZSAiQmFzZTY0LmgiCisjaW5jbHVkZSAiQ1N0cmlu
Zy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlRGF0YS5o
IgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0KKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lz
dHJ5LmgiCisjaW5jbHVkZSAiU3RpbGxJbWFnZUhhaWt1LmgiCisjaW5jbHVkZSA8Qml0bWFwU3Ry
ZWFtLmg+CisjaW5jbHVkZSA8U3RyaW5nLmg+CisjaW5jbHVkZSA8VHJhbnNsYXRvclJvc3Rlci5o
PgorI2luY2x1ZGUgPHN0ZGlvLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW1hZ2VCdWZm
ZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYpCitJbWFnZUJ1ZmZlckRhdGE6
OkltYWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXplJiBzaXplKQorICAgIDogbV9iaXRtYXAoQlJl
Y3QoMCwgMCwgc2l6ZS53aWR0aCgpIC0gMSwgc2l6ZS5oZWlnaHQoKSAtIDEpLCBCX1JHQkEzMiwg
dHJ1ZSkKKyAgICAsIG1fdmlldyhtX2JpdG1hcC5Cb3VuZHMoKSwgIldlYktpdCBJbWFnZUJ1ZmZl
ckRhdGEiLCAwLCAwKQogeworICAgIC8vIEFsd2F5cyBrZWVwIHRoZSBiaXRtYXAgbG9ja2VkLCB3
ZSBhcmUgdGhlIG9ubHkgY2xpZW50LgorICAgIG1fYml0bWFwLkxvY2soKTsKKyAgICBtX2JpdG1h
cC5BZGRDaGlsZCgmbV92aWV3KTsKKworICAgIC8vIEZpbGwgd2l0aCBjb21wbGV0ZWx5IHRyYW5z
cGFyZW50IGNvbG9yLgorICAgIG1lbXNldChtX2JpdG1hcC5CaXRzKCksIDAsIG1fYml0bWFwLkJp
dHNMZW5ndGgoKSk7CisKKyAgICAvLyBTaW5jZSBJbWFnZUJ1ZmZlciBpcyB1c2VkIG1haW5seSBm
b3IgQ2FudmFzLCBleHBsaWNpdGx5IGluaXRpYWxpemUKKyAgICAvLyBpdHMgdmlldydzIGdyYXBo
aWNzIHN0YXRlIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgY2FudmFzIGRlZmF1bHRzCisgICAgLy8g
Tk9URToga2VlcCBpbiBzeW5jIHdpdGggQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpTdGF0ZQor
ICAgIG1fdmlldy5TZXRMaW5lTW9kZShCX0JVVFRfQ0FQLCBCX01JVEVSX0pPSU4sIDEwKTsKKyAg
ICBtX3ZpZXcuU2V0RHJhd2luZ01vZGUoQl9PUF9BTFBIQSk7CisgICAgbV92aWV3LlNldEJsZW5k
aW5nTW9kZShCX1BJWEVMX0FMUEhBLCBCX0FMUEhBX0NPTVBPU0lURSk7CiB9CiAKLUltYWdlQnVm
ZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiwgSW1hZ2VDb2xvclNwYWNlIGltYWdlQ29s
b3JTcGFjZSwgYm9vbCYgc3VjY2VzcykKLSAgICA6IG1fZGF0YShJbnRTaXplKCkpCitJbWFnZUJ1
ZmZlckRhdGE6On5JbWFnZUJ1ZmZlckRhdGEoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgc3VjY2VzcyA9IGZhbHNlOworICAgIC8vIFJlbW92ZSB0aGUgdmlldyBmcm9tIHRoZSBiaXRt
YXAsIGtlZXBpbmcgaXQgZnJvbSBiZWluZyBmcmVlJ2QgdHdpY2UuCisgICAgbV92aWV3LlJlbW92
ZVNlbGYoKTsKKyAgICBtX2JpdG1hcC5VbmxvY2soKTsKIH0KIAotSW1hZ2VCdWZmZXI6On5JbWFn
ZUJ1ZmZlcigpCitJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwg
SW1hZ2VDb2xvclNwYWNlIGltYWdlQ29sb3JTcGFjZSwgYm9vbCYgc3VjY2VzcykKKyAgICA6IG1f
ZGF0YShzaXplKQorICAgICwgbV9zaXplKHNpemUpCiB7CisgICAgbV9jb250ZXh0LnNldChuZXcg
R3JhcGhpY3NDb250ZXh0KCZtX2RhdGEubV92aWV3KSk7CisgICAgc3VjY2VzcyA9IHRydWU7CiB9
CiAKLUdyYXBoaWNzQ29udGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAorSW1hZ2VC
dWZmZXI6On5JbWFnZUJ1ZmZlcigpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gMDsKIH0KIAotUGFzc1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRp
cGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK0dyYXBoaWNzQ29udGV4
dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIDA7CisgICAgQVNTRVJUKG1fZGF0YS5tX3ZpZXcuV2luZG93KCkpOworCisg
ICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKIH0KIAotUGFzc1JlZlB0cjxJbWFnZURhdGE+IElt
YWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3Qp
IGNvbnN0CitJbWFnZSogSW1hZ2VCdWZmZXI6OmltYWdlKCkgY29uc3QKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiAwOworICAgIGlmICghbV9pbWFnZSkgeworICAgICAgICAv
LyBJdCdzIGFzc3VtZWQgdGhhdCBpZiBpbWFnZSgpIGlzIGNhbGxlZCwgdGhlIGFjdHVhbCByZW5k
ZXJpbmcgdG8gdGhlCisgICAgICAgIC8vIEdyYXBoaWNzQ29udGV4dCBtdXN0IGJlIGRvbmUuCisg
ICAgICAgIEFTU0VSVChjb250ZXh0KCkpOworICAgICAgICBtX2RhdGEubV92aWV3LlN5bmMoKTsK
KyAgICAgICAgbV9pbWFnZSA9IFN0aWxsSW1hZ2U6OmNyZWF0ZShtX2RhdGEubV9iaXRtYXApOwor
ICAgIH0KKworICAgIHJldHVybiBtX2ltYWdlLmdldCgpOwogfQogCi12b2lkIEltYWdlQnVmZmVy
OjpwdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW1hZ2VEYXRhKiBzb3VyY2UsIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCit2b2lkIEltYWdlQnVm
ZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3QgVmVjdG9yPGludD4mIGxvb2tV
cFRhYmxlKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgdWludDgqIHJvd0RhdGEgPSBy
ZWludGVycHJldF9jYXN0PHVpbnQ4Kj4obV9kYXRhLm1fYml0bWFwLkJpdHMoKSk7CisgICAgdW5z
aWduZWQgYnl0ZXNQZXJSb3cgPSBtX2RhdGEubV9iaXRtYXAuQnl0ZXNQZXJSb3coKTsKKyAgICB1
bnNpZ25lZCByb3dzID0gbV9zaXplLmhlaWdodCgpOworICAgIHVuc2lnbmVkIGNvbHVtbnMgPSBt
X3NpemUud2lkdGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIHkgPSAwOyB5IDwgcm93czsgeSsrKSB7
CisgICAgICAgIHVpbnQ4KiBwaXhlbCA9IHJvd0RhdGE7CisgICAgICAgIGZvciAodW5zaWduZWQg
eCA9IDA7IHggPCBjb2x1bW5zOyB4KyspIHsKKyAgICAgICAgICAgIC8vIGxvb2tVcFRhYmxlIGRv
ZXNuJ3Qgc2VlbSB0byBzdXBwb3J0IGEgTFVUIGZvciBlYWNoIGNvbG9yIGNoYW5uZWwKKyAgICAg
ICAgICAgIC8vIHNlcGFyYXRlbHkgKGp1ZGdpbmcgZnJvbSB0aGUgb3RoZXIgcG9ydHMpLiBXZSBk
b24ndCBuZWVkIHRvCisgICAgICAgICAgICAvLyBjb252ZXJ0IGZyb20vdG8gcHJlLW11bHRpcGxp
ZWQgY29sb3Igc3BhY2Ugc2luY2UgQkJpdG1hcCBzdG9yYWdlCisgICAgICAgICAgICAvLyBpcyBu
b3QgcHJlLW11bHRpcGxpZWQuCisgICAgICAgICAgICBwaXhlbFswXSA9IGxvb2tVcFRhYmxlW3Bp
eGVsWzBdXTsKKyAgICAgICAgICAgIHBpeGVsWzFdID0gbG9va1VwVGFibGVbcGl4ZWxbMV1dOwor
ICAgICAgICAgICAgcGl4ZWxbMl0gPSBsb29rVXBUYWJsZVtwaXhlbFsyXV07CisgICAgICAgICAg
ICAvLyBhbHBoYSBzdGF5cyB1bm1vZGlmaWVkLgorICAgICAgICAgICAgcGl4ZWwgKz0gNDsKKyAg
ICAgICAgfQorICAgICAgICByb3dEYXRhICs9IGJ5dGVzUGVyUm93OworICAgIH0KK30KKworc3Rh
dGljIGlubGluZSB2b2lkIGNvbnZlcnRGcm9tRGF0YShjb25zdCB1aW50OCogc291cmNlUm93cywg
dW5zaWduZWQgc291cmNlQnl0ZXNQZXJSb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQ4KiBkZXN0Um93cywgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCByb3dzLCB1bnNpZ25lZCBjb2x1
bW5zKQoreworICAgIGZvciAodW5zaWduZWQgeSA9IDA7IHkgPCByb3dzOyB5KyspIHsKKyAgICAg
ICAgY29uc3QgdWludDgqIHMgPSBzb3VyY2VSb3dzOworICAgICAgICB1aW50OCogZCA9IGRlc3RS
b3dzOworICAgICAgICBmb3IgKHVuc2lnbmVkIHggPSAwOyB4IDwgY29sdW1uczsgeCsrKSB7Cisg
ICAgICAgICAgICAvLyBSR0JBIC0+IEJHUkEgb3IgQkdSQSAtPiBSR0JBCisgICAgICAgICAgICBk
WzBdID0gc1syXTsKKyAgICAgICAgICAgIGRbMV0gPSBzWzFdOworICAgICAgICAgICAgZFsyXSA9
IHNbMF07CisgICAgICAgICAgICBkWzNdID0gc1szXTsKKyAgICAgICAgICAgIGQgKz0gNDsKKyAg
ICAgICAgICAgIHMgKz0gNDsKKyAgICAgICAgfQorICAgICAgICBzb3VyY2VSb3dzICs9IHNvdXJj
ZUJ5dGVzUGVyUm93OworICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7CisgICAg
fQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29udmVydEZyb21JbnRlcm5hbERhdGEoY29uc3Qg
dWludDgqIHNvdXJjZVJvd3MsIHVuc2lnbmVkIHNvdXJjZUJ5dGVzUGVyUm93LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4KiBkZXN0Um93cywgdW5zaWdu
ZWQgZGVzdEJ5dGVzUGVyUm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIHJvd3MsIHVuc2lnbmVkIGNvbHVtbnMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtdWx0aXBsaWVkKQoreworICAgIGlm
IChwcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIC8vIEludGVybmFsIHN0b3JhZ2UgaXMgbm90IHBy
ZS1tdWx0aXBsaWVkLCBwcmUtbXVsdGlwbHkgb24gdGhlIGZseS4KKyAgICAgICAgZm9yICh1bnNp
Z25lZCB5ID0gMDsgeSA8IHJvd3M7IHkrKykgeworICAgICAgICAgICAgY29uc3QgdWludDgqIHMg
PSBzb3VyY2VSb3dzOworICAgICAgICAgICAgdWludDgqIGQgPSBkZXN0Um93czsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgeCA9IDA7IHggPCBjb2x1bW5zOyB4KyspIHsKKyAgICAgICAgICAg
ICAgICAvLyBSR0JBIC0+IEJHUkEgb3IgQkdSQSAtPiBSR0JBCisgICAgICAgICAgICAgICAgZFsw
XSA9IHN0YXRpY19jYXN0PHVpbnQxNj4oc1syXSkgKiBzWzNdIC8gMjU1OworICAgICAgICAgICAg
ICAgIGRbMV0gPSBzdGF0aWNfY2FzdDx1aW50MTY+KHNbMV0pICogc1szXSAvIDI1NTsKKyAgICAg
ICAgICAgICAgICBkWzJdID0gc3RhdGljX2Nhc3Q8dWludDE2PihzWzBdKSAqIHNbM10gLyAyNTU7
CisgICAgICAgICAgICAgICAgZFszXSA9IHNbM107CisgICAgICAgICAgICAgICAgZCArPSA0Owor
ICAgICAgICAgICAgICAgIHMgKz0gNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNvdXJj
ZVJvd3MgKz0gc291cmNlQnl0ZXNQZXJSb3c7CisgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0
Qnl0ZXNQZXJSb3c7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBjb252ZXJ0RnJv
bURhdGEoc291cmNlUm93cywgc291cmNlQnl0ZXNQZXJSb3csCisgICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93cywgZGVzdEJ5dGVzUGVyUm93LAorICAgICAgICAgICAgICAgICAgICAgICAg
cm93cywgY29sdW1ucyk7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29udmVydFRv
SW50ZXJuYWxEYXRhKGNvbnN0IHVpbnQ4KiBzb3VyY2VSb3dzLCB1bnNpZ25lZCBzb3VyY2VCeXRl
c1BlclJvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDgq
IGRlc3RSb3dzLCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJvd3MsIHVuc2lnbmVkIGNvbHVtbnMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlbXVsdGlwbGll
ZCkKK3sKKyAgICBpZiAocHJlbXVsdGlwbGllZCkgeworICAgICAgICAvLyBJbnRlcm5hbCBzdG9y
YWdlIGlzIG5vdCBwcmUtbXVsdGlwbGllZCwgZGUtbXVsdGlwbHkgc291cmNlIGRhdGEuCisgICAg
ICAgIGZvciAodW5zaWduZWQgeSA9IDA7IHkgPCByb3dzOyB5KyspIHsKKyAgICAgICAgICAgIGNv
bnN0IHVpbnQ4KiBzID0gc291cmNlUm93czsKKyAgICAgICAgICAgIHVpbnQ4KiBkID0gZGVzdFJv
d3M7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHggPSAwOyB4IDwgY29sdW1uczsgeCsrKSB7
CisgICAgICAgICAgICAgICAgLy8gUkdCQSAtPiBCR1JBIG9yIEJHUkEgLT4gUkdCQQorICAgICAg
ICAgICAgICAgIGlmIChzWzNdKSB7CisgICAgICAgICAgICAgICAgICAgIGRbMF0gPSBzdGF0aWNf
Y2FzdDx1aW50MTY+KHNbMl0pICogMjU1IC8gc1szXTsKKyAgICAgICAgICAgICAgICAgICAgZFsx
XSA9IHN0YXRpY19jYXN0PHVpbnQxNj4oc1sxXSkgKiAyNTUgLyBzWzNdOworICAgICAgICAgICAg
ICAgICAgICBkWzJdID0gc3RhdGljX2Nhc3Q8dWludDE2PihzWzBdKSAqIDI1NSAvIHNbM107Cisg
ICAgICAgICAgICAgICAgICAgIGRbM10gPSBzWzNdOworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIGRbMF0gPSAwOworICAgICAgICAgICAgICAgICAgICBkWzFd
ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZFsyXSA9IDA7CisgICAgICAgICAgICAgICAgICAg
IGRbM10gPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkICs9IDQ7Cisg
ICAgICAgICAgICAgICAgcyArPSA0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgc291cmNl
Um93cyArPSBzb3VyY2VCeXRlc1BlclJvdzsKKyAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RC
eXRlc1BlclJvdzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnZlcnRGcm9t
RGF0YShzb3VyY2VSb3dzLCBzb3VyY2VCeXRlc1BlclJvdywKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzLCBkZXN0Qnl0ZXNQZXJSb3csCisgICAgICAgICAgICAgICAgICAgICAgICBy
b3dzLCBjb2x1bW5zKTsKKyAgICB9Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRyPEltYWdlRGF0YT4g
Z2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEltYWdlQnVmZmVyRGF0YSYg
aW1hZ2VEYXRhLCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIHByZW11bHRpcGxpZWQpCit7Cisg
ICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Qu
d2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgdW5zaWduZWQgY2hhciogZGF0YSA9IHJlc3Vs
dC0+ZGF0YSgpLT5kYXRhKCktPmRhdGEoKTsKKworICAgIC8vIElmIHRoZSBkZXN0aW5hdGlvbiBp
bWFnZSBpcyBsYXJnZXIgdGhhbiB0aGUgc291cmNlIGltYWdlLCB0aGUgb3V0c2lkZQorICAgIC8v
IHJlZ2lvbnMgbmVlZCB0byBiZSB0cmFuc3BhcmVudC4gVGhpcyB3YXkgaXMgc2ltcGx5LCBhbHRo
b3VnaCB3aXRoIGEKKyAgICAvLyBhIHNsaWdodCBvdmVyaGVhZCBmb3IgdGhlIGluc2lkZSByZWdp
b24uCisgICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgKHJlY3QueCgpICsg
cmVjdC53aWR0aCgpKSA+IHNpemUud2lkdGgoKSB8fCAocmVjdC55KCkgKyByZWN0LmhlaWdodCgp
KSA+IHNpemUuaGVpZ2h0KCkpCisgICAgICAgIG1lbXNldChkYXRhLCAwLCByZXN1bHQtPmRhdGEo
KS0+bGVuZ3RoKCkpOworCisgICAgLy8gSWYgdGhlIHJlcXVlc3RlZCBpbWFnZSBpcyBvdXRzaWRl
IHRoZSBzb3VyY2UgaW1hZ2UsIHdlIGNhbiByZXR1cm4gYXQKKyAgICAvLyB0aGlzIHBvaW50Lgor
ICAgIGlmIChyZWN0LngoKSA+IHNpemUud2lkdGgoKSB8fCByZWN0LnkoKSA+IHNpemUuaGVpZ2h0
KCkgfHwgcmVjdC5yaWdodCgpIDwgMCB8fCByZWN0LmJvdHRvbSgpIDwgMCkKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKworICAgIC8vIE5vdyB3ZSBrbm93IHRoZXJlIG11c3QgYmUgYW4gaW50ZXJz
ZWN0aW9uIHJlY3Qgd2hpY2ggd2UgbmVlZCB0byBleHRyYWN0LgorICAgIEJSZWN0IHNvdXJjZVJl
Y3QoMCwgMCwgc2l6ZS53aWR0aCgpIC0gMSwgc2l6ZS5oZWlnaHQoKSAtIDEpOworICAgIHNvdXJj
ZVJlY3QgPSBCUmVjdChyZWN0KSAmIHNvdXJjZVJlY3Q7CisKKyAgICB1bnNpZ25lZCBkZXN0Qnl0
ZXNQZXJSb3cgPSA0ICogcmVjdC53aWR0aCgpOworICAgIHVuc2lnbmVkIGNoYXIqIGRlc3RSb3dz
ID0gZGF0YTsKKyAgICAvLyBPZmZzZXQgdGhlIGRlc3RpbmF0aW9uIHBvaW50ZXIgdG8gcG9pbnQg
YXQgdGhlIGZpcnN0IHBpeGVsIG9mIHRoZQorICAgIC8vIGludGVyc2VjdGlvbiByZWN0LgorICAg
IGRlc3RSb3dzICs9IChyZWN0LngoKSAtIChpbnQpc291cmNlUmVjdC5sZWZ0KSAqIDQgKyAocmVj
dC55KCkgLSAoaW50KXNvdXJjZVJlY3QudG9wKSAqIGRlc3RCeXRlc1BlclJvdzsKKworICAgIGNv
bnN0IHVpbnQ4KiBzb3VyY2VSb3dzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OCo+KGlt
YWdlRGF0YS5tX2JpdG1hcC5CaXRzKCkpOworICAgIHVpbnQzMiBzb3VyY2VCeXRlc1BlclJvdyA9
IGltYWdlRGF0YS5tX2JpdG1hcC5CeXRlc1BlclJvdygpOworICAgIC8vIE9mZnNldCB0aGUgc291
cmNlIHBvaW50ZXIgdG8gcG9pbnQgYXQgdGhlIGZpcnN0IHBpeGVsIG9mIHRoZQorICAgIC8vIGlu
dGVyc2VjdGlvbiByZWN0LgorICAgIHNvdXJjZVJvd3MgKz0gKGludClzb3VyY2VSZWN0LmxlZnQg
KiA0ICsgKGludClzb3VyY2VSZWN0LnRvcCAqIHNvdXJjZUJ5dGVzUGVyUm93OworCisgICAgdW5z
aWduZWQgcm93cyA9IHNvdXJjZVJlY3QuSW50ZWdlckhlaWdodCgpICsgMTsKKyAgICB1bnNpZ25l
ZCBjb2x1bW5zID0gc291cmNlUmVjdC5JbnRlZ2VyV2lkdGgoKSArIDE7CisgICAgY29udmVydEZy
b21JbnRlcm5hbERhdGEoc291cmNlUm93cywgc291cmNlQnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBk
ZXN0Qnl0ZXNQZXJSb3csCisgICAgICAgIHJvd3MsIGNvbHVtbnMsIHByZW11bHRpcGxpZWQpOwor
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlw
bGllZEltYWdlRGF0YShJbWFnZURhdGEqIHNvdXJjZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKKworUGFzc1JlZlB0cjxJbWFnZURhdGE+IElt
YWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCkg
Y29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIE1ha2Ugc3VyZSBhbGwgYXN5
bmNocm9ub3VzIGRyYXdpbmcgaGFzIGZpbmlzaGVkCisgICAgbV9kYXRhLm1fdmlldy5TeW5jKCk7
CisgICAgcmV0dXJuIGdldEltYWdlRGF0YShyZWN0LCBtX2RhdGEsIG1fc2l6ZSwgZmFsc2UpOwog
fQogCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmKSBjb25zdAor
UGFzc1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VE
YXRhKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgLy8gTWFrZSBzdXJlIGFsbCBhc3luY2hyb25vdXMg
ZHJhd2luZyBoYXMgZmluaXNoZWQKKyAgICBtX2RhdGEubV92aWV3LlN5bmMoKTsKKyAgICByZXR1
cm4gZ2V0SW1hZ2VEYXRhKHJlY3QsIG1fZGF0YSwgbV9zaXplLCB0cnVlKTsKK30KKworc3RhdGlj
IHZvaWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSogc291cmNlLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBJbWFnZUJ1ZmZlckRhdGEmIGltYWdl
RGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBsaWVkKQoreworICAgIC8v
IElmIHRoZSBzb3VyY2UgaW1hZ2UgaXMgb3V0c2lkZSB0aGUgZGVzdGluYXRpb24gaW1hZ2UsIHdl
IGNhbiByZXR1cm4gYXQKKyAgICAvLyB0aGlzIHBvaW50LgorICAgIC8vIFRPRE86IENoZWNrIGlm
IHRoaXMgaXNuJ3QgYWxyZWFkeSBkb25lIGluIFdlYkNvcmUuCisgICAgaWYgKGRlc3RQb2ludC54
KCkgPiBzaXplLndpZHRoKCkgfHwgZGVzdFBvaW50LnkoKSA+IHNpemUuaGVpZ2h0KCkKKyAgICAg
ICAgfHwgZGVzdFBvaW50LngoKSArIHNvdXJjZVJlY3Qud2lkdGgoKSA8IDAKKyAgICAgICAgfHwg
ZGVzdFBvaW50LnkoKSArIHNvdXJjZVJlY3QuaGVpZ2h0KCkgPCAwKSB7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBzb3VyY2VSb3dzID0gc291cmNl
LT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpOworICAgIHVuc2lnbmVkIHNvdXJjZUJ5dGVzUGVyUm93
ID0gNCAqIHNvdXJjZS0+d2lkdGgoKTsKKyAgICAvLyBPZmZzZXQgdGhlIHNvdXJjZSBwb2ludGVy
IHRvIHRoZSBmaXJzdCBwaXhlbCBvZiB0aGUgc291cmNlIHJlY3QuCisgICAgc291cmNlUm93cyAr
PSBzb3VyY2VSZWN0LngoKSAqIDQgKyBzb3VyY2VSZWN0LnkoKSAqIHNvdXJjZUJ5dGVzUGVyUm93
OworCisgICAgLy8gV2Uga25vdyB0aGVyZSBtdXN0IGJlIGFuIGludGVyc2VjdGlvbiByZWN0Lgor
ICAgIEJSZWN0IGRlc3RSZWN0KGRlc3RQb2ludC54KCksIGRlc3RQb2ludC55KCksIHNvdXJjZVJl
Y3Qud2lkdGgoKSAtIDEsIHNvdXJjZVJlY3QuaGVpZ2h0KCkgLSAxKTsKKyAgICBkZXN0UmVjdCA9
IGRlc3RSZWN0ICYgQlJlY3QoMCwgMCwgc2l6ZS53aWR0aCgpIC0gMSwgc2l6ZS5oZWlnaHQoKSAt
IDEpOworCisgICAgdW5zaWduZWQgY2hhciogZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0PHVu
c2lnbmVkIGNoYXIqPihpbWFnZURhdGEubV9iaXRtYXAuQml0cygpKTsKKyAgICB1aW50MzIgZGVz
dEJ5dGVzUGVyUm93ID0gaW1hZ2VEYXRhLm1fYml0bWFwLkJ5dGVzUGVyUm93KCk7CisgICAgLy8g
T2Zmc2V0IHRoZSBzb3VyY2UgcG9pbnRlciB0byBwb2ludCBhdCB0aGUgZmlyc3QgcGl4ZWwgb2Yg
dGhlCisgICAgLy8gaW50ZXJzZWN0aW9uIHJlY3QuCisgICAgZGVzdFJvd3MgKz0gKGludClkZXN0
UmVjdC5sZWZ0ICogNCArIChpbnQpZGVzdFJlY3QudG9wICogZGVzdEJ5dGVzUGVyUm93OworCisg
ICAgdW5zaWduZWQgcm93cyA9IHNvdXJjZVJlY3QuaGVpZ2h0KCk7CisgICAgdW5zaWduZWQgY29s
dW1ucyA9IHNvdXJjZVJlY3Qud2lkdGgoKTsKKyAgICBjb252ZXJ0VG9JbnRlcm5hbERhdGEoc291
cmNlUm93cywgc291cmNlQnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBkZXN0Qnl0ZXNQZXJSb3csCisg
ICAgICAgIHJvd3MsIGNvbHVtbnMsIHByZW11bHRpcGxpZWQpOwogfQogCi1JbWFnZSogSW1hZ2VC
dWZmZXI6OmltYWdlKCkgY29uc3QKK3ZvaWQgSW1hZ2VCdWZmZXI6OnB1dFVubXVsdGlwbGllZElt
YWdlRGF0YShJbWFnZURhdGEqIHNvdXJjZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29u
c3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiAwOworICAgIC8vIE1ha2Ugc3VyZSBhbGwgYXN5bmNocm9ub3VzIGRyYXdpbmcgaGFzIGZp
bmlzaGVkCisgICAgbV9kYXRhLm1fdmlldy5TeW5jKCk7CisgICAgcHV0SW1hZ2VEYXRhKHNvdXJj
ZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBtX2RhdGEsIG1fc2l6ZSwgZmFsc2UpOwogfQogCi12
b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3QgVmVjdG9y
PGludD4mIGxvb2tVcFRhYmxlKQordm9pZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZElt
YWdlRGF0YShJbWFnZURhdGEqIHNvdXJjZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29u
c3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8v
IE1ha2Ugc3VyZSBhbGwgYXN5bmNocm9ub3VzIGRyYXdpbmcgaGFzIGZpbmlzaGVkCisgICAgbV9k
YXRhLm1fdmlldy5TeW5jKCk7CisgICAgcHV0SW1hZ2VEYXRhKHNvdXJjZSwgc291cmNlUmVjdCwg
ZGVzdFBvaW50LCBtX2RhdGEsIG1fc2l6ZSwgdHJ1ZSk7Cit9CisKK1N0cmluZyBJbWFnZUJ1ZmZl
cjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0Cit7CisgICAgaWYgKCFN
SU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1l
VHlwZSkpCisgICAgICAgIHJldHVybiAiZGF0YTosIjsKKworICAgIEJTdHJpbmcgbWltZVR5cGVT
dHJpbmcobWltZVR5cGUpOworCisgICAgdWludDMyIHRyYW5zbGF0b3JUeXBlID0gMDsKKworICAg
IEJUcmFuc2xhdG9yUm9zdGVyKiByb3N0ZXIgPSBCVHJhbnNsYXRvclJvc3Rlcjo6RGVmYXVsdCgp
OworICAgIHRyYW5zbGF0b3JfaWQqIHRyYW5zbGF0b3JzOworICAgIGludDMyIHRyYW5zbGF0b3JD
b3VudDsKKyAgICByb3N0ZXItPkdldEFsbFRyYW5zbGF0b3JzKCZ0cmFuc2xhdG9ycywgJnRyYW5z
bGF0b3JDb3VudCk7CisgICAgZm9yIChpbnQzMiBpID0gMDsgaSA8IHRyYW5zbGF0b3JDb3VudDsg
aSsrKSB7CisgICAgICAgIC8vIFNraXAgdHJhbnNsYXRvcnMgdGhhdCBkb24ndCBzdXBwb3J0IGFy
Y2hpdmVkIEJCaXRtYXBzIGFzIGlucHV0IGRhdGEuCisgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9u
X2Zvcm1hdCogaW5wdXRGb3JtYXRzOworICAgICAgICBpbnQzMiBmb3JtYXRDb3VudDsKKyAgICAg
ICAgcm9zdGVyLT5HZXRJbnB1dEZvcm1hdHModHJhbnNsYXRvcnNbaV0sICZpbnB1dEZvcm1hdHMs
ICZmb3JtYXRDb3VudCk7CisgICAgICAgIGJvb2wgc3VwcG9ydHNCaXRtYXBzID0gZmFsc2U7Cisg
ICAgICAgIGZvciAoaW50MzIgaiA9IDA7IGogPCBmb3JtYXRDb3VudDsgaisrKSB7CisgICAgICAg
ICAgICBpZiAoaW5wdXRGb3JtYXRzW2pdLnR5cGUgPT0gQl9UUkFOU0xBVE9SX0JJVE1BUCkgewor
ICAgICAgICAgICAgICAgIHN1cHBvcnRzQml0bWFwcyA9IHRydWU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFzdXBwb3J0c0Jp
dG1hcHMpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBjb25zdCB0cmFuc2xhdGlv
bl9mb3JtYXQqIG91dHB1dEZvcm1hdHM7CisgICAgICAgIHJvc3Rlci0+R2V0T3V0cHV0Rm9ybWF0
cyh0cmFuc2xhdG9yc1tpXSwgJm91dHB1dEZvcm1hdHMsICZmb3JtYXRDb3VudCk7CisgICAgICAg
IGZvciAoaW50MzIgaiA9IDA7IGogPCBmb3JtYXRDb3VudDsgaisrKSB7CisgICAgICAgICAgICBp
ZiAob3V0cHV0Rm9ybWF0c1tqXS5ncm91cCA9PSBCX1RSQU5TTEFUT1JfQklUTUFQCisgICAgICAg
ICAgICAgICAgJiYgbWltZVR5cGVTdHJpbmcgPT0gb3V0cHV0Rm9ybWF0c1tqXS5NSU1FKSB7Cisg
ICAgICAgICAgICAgICAgdHJhbnNsYXRvclR5cGUgPSBvdXRwdXRGb3JtYXRzW2pdLnR5cGU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRyYW5zbGF0b3JUeXBlKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgfQorCisKKyAgICBCTWFsbG9jSU8gdHJhbnNsYXRlZFN0cmVh
bTsKKyAgICBCQml0bWFwKiBiaXRtYXAgPSBjb25zdF9jYXN0PEJCaXRtYXAqPigmbV9kYXRhLm1f
Yml0bWFwKTsKKyAgICAgICAgLy8gQkJpdG1hcFN0cmVhbSBkb2Vzbid0IHRha2UgImNvbnN0IEJp
dG1hcCoiLi4uCisgICAgQkJpdG1hcFN0cmVhbSBiaXRtYXBTdHJlYW0oYml0bWFwKTsKKyAgICBp
ZiAocm9zdGVyLT5UcmFuc2xhdGUoJmJpdG1hcFN0cmVhbSwgMCwgMCwgJnRyYW5zbGF0ZWRTdHJl
YW0sIHRyYW5zbGF0b3JUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBCX1RSQU5TTEFU
T1JfQklUTUFQLCBtaW1lVHlwZS51dGY4KCkuZGF0YSgpKSAhPSBCX09LKSB7CisgICAgICAgIGJp
dG1hcFN0cmVhbS5EZXRhY2hCaXRtYXAoJmJpdG1hcCk7CisgICAgICAgIHJldHVybiAiZGF0YTos
IjsKKyAgICB9CisKKyAgICBiaXRtYXBTdHJlYW0uRGV0YWNoQml0bWFwKCZiaXRtYXApOworCisg
ICAgVmVjdG9yPGNoYXI+IGVuY29kZWRCdWZmZXI7CisgICAgYmFzZTY0RW5jb2RlKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHRyYW5zbGF0ZWRTdHJlYW0uQnVmZmVyKCkpLAorICAgICAg
ICAgICAgICAgICB0cmFuc2xhdGVkU3RyZWFtLkJ1ZmZlckxlbmd0aCgpLCBlbmNvZGVkQnVmZmVy
KTsKKworICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiZGF0YTolcztiYXNlNjQsJXMiLCBtaW1l
VHlwZS51dGY4KCkuZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQnVm
ZmVyLmRhdGEoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="33845"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53266</attachid>
            <date>2010-04-13 11:29:54 -0700</date>
            <delta_ts>2010-04-22 02:38:40 -0700</delta_ts>
            <desc>Patch implementing all ImageBuffer methods.</desc>
            <filename>ImageBufferHaiku.diff</filename>
            <type>text/plain</type>
            <size>19208</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzUyNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDkgQEAKKzIwMTAtMDQtMTMgIFN0ZXBoYW4gQcOfbXVzICA8c3VwZXJzdGlwcGlA
Z214LmRlPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtIYWlrdV0gSW1wbGVtZW50IEltYWdlQnVmZmVyIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1Mjg4CisKKyAgICAgICAgQ292ZXJlZCBi
eSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICBDb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBJ
bWFnZUJ1ZmZlciBmb3IgSGFpa3UuIFVzZXMgU3RpbGxJbWFnZQorICAgICAgICBjbGFzcyB0byBl
eHBvcnQgYSBXZWJDb3JlOjpJbWFnZSBhbmQgYXNzb2NpYXRlZCBHcmFwaGljc0NvbnRleHQKKyAg
ICAgICAgdG8gcGVyZm9ybSBhcmJpdHJhcnkgZHJhd2luZyBpbiB0aGUgb2Zmc2NyZWVuIEJCaXRt
YXAgYnVmZmVyLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZm
ZXJEYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJI
YWlrdS5jcHAsCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVy
RGF0YSksCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6On5JbWFnZUJ1ZmZlckRh
dGEpLAorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKSwKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIpLAorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmNvbnRleHQpLAorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OmltYWdlKToKKyAgICAgICAgICAgIEltcGxlbWVudGF0aW9uIHVzZXMgb2Zmc2NyZWVuIEJCaXRt
YXAgYW5kIEJWaWV3LCB3cmFwcyBTdGlsbEltYWdlCisgICAgICAgICAgICBhcm91bmQgdGhvc2Ug
dG8gcHJvdmlkZSBXZWJDb3JlOjpJbWFnZSBpbnRlcmZhY2UuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnZlcnRGcm9tRGF0YSk6CisgICAgICAgICAgICBNZXRob2QganVzdCBwZXJmb3JtcyBC
R1JBIDwtPiBSR0JBIGNvbnZlcnNpb24uCisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RnJvbUlu
dGVybmFsRGF0YSk6CisgICAgICAgICAgICBNZXRob2QganVzdCBwZXJmb3JtcyBCR1JBIDwtPiBS
R0JBIGNvbnZlcnNpb24gYW5kIGhhbmRsZXMKKyAgICAgICAgICAgIHByZS1tdWx0aXBseWluZyB0
aGUgY29sb3IgdmFsdWVzIGlmIHJlcXVlc3RlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRU
b0ludGVybmFsRGF0YSk6CisgICAgICAgICAgICBNZXRob2QganVzdCBwZXJmb3JtcyBCR1JBIDwt
PiBSR0JBIGNvbnZlcnNpb24gYW5kIGhhbmRsZXMKKyAgICAgICAgICAgIGRlLm11bHRpcGx5aW5n
IHRoZSBjb2xvciB2YWx1ZXMgaWYgcmVxdWVzdGVkLgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW1h
Z2VEYXRhKToKKyAgICAgICAgICAgIENvbW1vbiBjb2RlIGZvciB0aGUgbmV4dCB0d28gbWV0aG9k
cy4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURh
dGEpLAorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFn
ZURhdGEpOgorICAgICAgICAgICAgSW1wbGVtZW50ZWQuCisgICAgICAgIChXZWJDb3JlOjpwdXRJ
bWFnZURhdGEpOgorICAgICAgICAgICAgQ29tbW9uIGNvZGUgZm9yIHRoZSBuZXh0IHR3byBtZXRo
b2RzLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dFVubXVsdGlwbGllZEltYWdl
RGF0YSksCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZElt
YWdlRGF0YSk6CisgICAgICAgICAgICBJbXBsZW1lbnRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjp0b0RhdGFVUkwpOgorICAgICAgICAgICAgVXNlcyBIYWlrdSAiVHJhbnNsYXRp
b24gS2l0IiB0byBjb252ZXJ0IGltYWdlIGRhdGEgdG8gZGF0YQorICAgICAgICAgICAgb2YgdGhl
IHJlcXVlc3RlZCBtaW1lIHR5cGUuCisKIDIwMTAtMDQtMTIgIHlhZWwgYWhhcm9uICA8eWFlbC5h
aGFyb25Abm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRvciBBcm5lIFZlc3Riby4K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJEYXRhLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZl
ckRhdGEuaAkocmV2aXNpb24gNTcyNzQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L0ltYWdlQnVmZmVyRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5j
b20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU3RlcGhhbiBBw59tdXMgPHN1cGVyc3RpcHBpQGdt
eC5kZT4KICAqCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTI4LDE2ICsyOCwyMyBA
QAogI2lmbmRlZiBJbWFnZUJ1ZmZlckRhdGFfaAogI2RlZmluZSBJbWFnZUJ1ZmZlckRhdGFfaAog
CisjaW5jbHVkZSA8Qml0bWFwLmg+CisjaW5jbHVkZSA8Vmlldy5oPgorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLSAgICBjbGFzcyBJbnRTaXplOworY2xhc3MgSW50U2l6ZTsKKworY2xhc3MgSW1h
Z2VCdWZmZXJEYXRhIHsKK3B1YmxpYzoKKyAgICBJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6
ZSYpOworICAgIH5JbWFnZUJ1ZmZlckRhdGEoKTsKIAotICAgIGNsYXNzIEltYWdlQnVmZmVyRGF0
YSB7Ci0gICAgcHVibGljOgotICAgICAgICBJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYp
OwotICAgIH07CisgICAgQkJpdG1hcCBtX2JpdG1hcDsKKyAgICBCVmlldyBtX3ZpZXc7Cit9Owog
Ci19ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5k
aWYgIC8vIEltYWdlQnVmZmVyRGF0YV9oCisjZW5kaWYgLy8gSW1hZ2VCdWZmZXJEYXRhX2gKIApJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVm
ZmVySGFpa3UuY3BwCShyZXZpc2lvbiA1NzI3NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1l
QGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVwaGFuIEHDn211cyA8c3VwZXJz
dGlwcGlAZ214LmRlPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMCw3NyAr
MjAsMzU0IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogCisjaW5jbHVkZSAiQmFzZTY0LmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKLQorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRl
ICJTdGlsbEltYWdlSGFpa3UuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5j
bHVkZSA8Qml0bWFwU3RyZWFtLmg+CisjaW5jbHVkZSA8U3RyaW5nLmg+CisjaW5jbHVkZSA8VHJh
bnNsYXRvclJvc3Rlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUltYWdlQnVmZmVyRGF0
YTo6SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmKQorSW1hZ2VCdWZmZXJEYXRhOjpJbWFn
ZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICA6IG1fYml0bWFwKEJSZWN0KDAs
IDAsIHNpemUud2lkdGgoKSAtIDEsIHNpemUuaGVpZ2h0KCkgLSAxKSwgQl9SR0JBMzIsIHRydWUp
CisgICAgLCBtX3ZpZXcobV9iaXRtYXAuQm91bmRzKCksICJXZWJLaXQgSW1hZ2VCdWZmZXJEYXRh
IiwgMCwgMCkKIHsKKyAgICAvLyBBbHdheXMga2VlcCB0aGUgYml0bWFwIGxvY2tlZCwgd2UgYXJl
IHRoZSBvbmx5IGNsaWVudC4KKyAgICBtX2JpdG1hcC5Mb2NrKCk7CisgICAgbV9iaXRtYXAuQWRk
Q2hpbGQoJm1fdmlldyk7CisKKyAgICAvLyBGaWxsIHdpdGggY29tcGxldGVseSB0cmFuc3BhcmVu
dCBjb2xvci4KKyAgICBtZW1zZXQobV9iaXRtYXAuQml0cygpLCAwLCBtX2JpdG1hcC5CaXRzTGVu
Z3RoKCkpOworCisgICAgLy8gU2luY2UgSW1hZ2VCdWZmZXIgaXMgdXNlZCBtYWlubHkgZm9yIENh
bnZhcywgZXhwbGljaXRseSBpbml0aWFsaXplCisgICAgLy8gaXRzIHZpZXcncyBncmFwaGljcyBz
dGF0ZSB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGNhbnZhcyBkZWZhdWx0cworICAgIC8vIE5PVEU6
IGtlZXAgaW4gc3luYyB3aXRoIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6U3RhdGUKKyAgICBt
X3ZpZXcuU2V0TGluZU1vZGUoQl9CVVRUX0NBUCwgQl9NSVRFUl9KT0lOLCAxMCk7CisgICAgbV92
aWV3LlNldERyYXdpbmdNb2RlKEJfT1BfQUxQSEEpOworICAgIG1fdmlldy5TZXRCbGVuZGluZ01v
ZGUoQl9QSVhFTF9BTFBIQSwgQl9BTFBIQV9DT01QT1NJVEUpOwogfQogCi1JbWFnZUJ1ZmZlcjo6
SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYsIEltYWdlQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3Bh
Y2UsIGJvb2wmIHN1Y2Nlc3MpCi0gICAgOiBtX2RhdGEoSW50U2l6ZSgpKQorSW1hZ2VCdWZmZXJE
YXRhOjp+SW1hZ2VCdWZmZXJEYXRhKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHN1
Y2Nlc3MgPSBmYWxzZTsKKyAgICAvLyBSZW1vdmUgdGhlIHZpZXcgZnJvbSB0aGUgYml0bWFwLCBr
ZWVwaW5nIGl0IGZyb20gYmVpbmcgZnJlZSdkIHR3aWNlLgorICAgIG1fdmlldy5SZW1vdmVTZWxm
KCk7CisgICAgbV9iaXRtYXAuVW5sb2NrKCk7CiB9CiAKLUltYWdlQnVmZmVyOjp+SW1hZ2VCdWZm
ZXIoKQorSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIEltYWdl
Q29sb3JTcGFjZSBpbWFnZUNvbG9yU3BhY2UsIGJvb2wmIHN1Y2Nlc3MpCisgICAgOiBtX2RhdGEo
c2l6ZSkKKyAgICAsIG1fc2l6ZShzaXplKQogeworICAgIG1fY29udGV4dC5zZXQobmV3IEdyYXBo
aWNzQ29udGV4dCgmbV9kYXRhLm1fdmlldykpOworICAgIHN1Y2Nlc3MgPSB0cnVlOwogfQogCi1H
cmFwaGljc0NvbnRleHQqIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKK0ltYWdlQnVmZmVy
Ojp+SW1hZ2VCdWZmZXIoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7
CiB9CiAKLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVk
SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CitHcmFwaGljc0NvbnRleHQqIElt
YWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiAwOworICAgIEFTU0VSVChtX2RhdGEubV92aWV3LldpbmRvdygpKTsKKworICAgIHJl
dHVybiBtX2NvbnRleHQuZ2V0KCk7CiB9CiAKLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1
ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25z
dAorSW1hZ2UqIEltYWdlQnVmZmVyOjppbWFnZSgpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gMDsKKyAgICBpZiAoIW1faW1hZ2UpIHsKKyAgICAgICAgLy8gSXQn
cyBhc3N1bWVkIHRoYXQgaWYgaW1hZ2UoKSBpcyBjYWxsZWQsIHRoZSBhY3R1YWwgcmVuZGVyaW5n
IHRvIHRoZQorICAgICAgICAvLyBHcmFwaGljc0NvbnRleHQgbXVzdCBiZSBkb25lLgorICAgICAg
ICBBU1NFUlQoY29udGV4dCgpKTsKKyAgICAgICAgbV9kYXRhLm1fdmlldy5TeW5jKCk7CisgICAg
ICAgIG1faW1hZ2UgPSBTdGlsbEltYWdlOjpjcmVhdGUobV9kYXRhLm1fYml0bWFwKTsKKyAgICB9
CisKKyAgICByZXR1cm4gbV9pbWFnZS5nZXQoKTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0
VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEltYWdlRGF0YSogc291cmNlLCBjb25zdCBJbnRSZWN0JiBz
b3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQordm9pZCBJbWFnZUJ1ZmZlcjo6
cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IFZlY3RvcjxpbnQ+JiBsb29rVXBUYWJs
ZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHVpbnQ4KiByb3dEYXRhID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50OCo+KG1fZGF0YS5tX2JpdG1hcC5CaXRzKCkpOworICAgIHVuc2lnbmVk
IGJ5dGVzUGVyUm93ID0gbV9kYXRhLm1fYml0bWFwLkJ5dGVzUGVyUm93KCk7CisgICAgdW5zaWdu
ZWQgcm93cyA9IG1fc2l6ZS5oZWlnaHQoKTsKKyAgICB1bnNpZ25lZCBjb2x1bW5zID0gbV9zaXpl
LndpZHRoKCk7CisgICAgZm9yICh1bnNpZ25lZCB5ID0gMDsgeSA8IHJvd3M7IHkrKykgeworICAg
ICAgICB1aW50OCogcGl4ZWwgPSByb3dEYXRhOworICAgICAgICBmb3IgKHVuc2lnbmVkIHggPSAw
OyB4IDwgY29sdW1uczsgeCsrKSB7CisgICAgICAgICAgICAvLyBsb29rVXBUYWJsZSBkb2Vzbid0
IHNlZW0gdG8gc3VwcG9ydCBhIExVVCBmb3IgZWFjaCBjb2xvciBjaGFubmVsCisgICAgICAgICAg
ICAvLyBzZXBhcmF0ZWx5IChqdWRnaW5nIGZyb20gdGhlIG90aGVyIHBvcnRzKS4gV2UgZG9uJ3Qg
bmVlZCB0bworICAgICAgICAgICAgLy8gY29udmVydCBmcm9tL3RvIHByZS1tdWx0aXBsaWVkIGNv
bG9yIHNwYWNlIHNpbmNlIEJCaXRtYXAgc3RvcmFnZQorICAgICAgICAgICAgLy8gaXMgbm90IHBy
ZS1tdWx0aXBsaWVkLgorICAgICAgICAgICAgcGl4ZWxbMF0gPSBsb29rVXBUYWJsZVtwaXhlbFsw
XV07CisgICAgICAgICAgICBwaXhlbFsxXSA9IGxvb2tVcFRhYmxlW3BpeGVsWzFdXTsKKyAgICAg
ICAgICAgIHBpeGVsWzJdID0gbG9va1VwVGFibGVbcGl4ZWxbMl1dOworICAgICAgICAgICAgLy8g
YWxwaGEgc3RheXMgdW5tb2RpZmllZC4KKyAgICAgICAgICAgIHBpeGVsICs9IDQ7CisgICAgICAg
IH0KKyAgICAgICAgcm93RGF0YSArPSBieXRlc1BlclJvdzsKKyAgICB9Cit9CisKK3N0YXRpYyBp
bmxpbmUgdm9pZCBjb252ZXJ0RnJvbURhdGEoY29uc3QgdWludDgqIHNvdXJjZVJvd3MsIHVuc2ln
bmVkIHNvdXJjZUJ5dGVzUGVyUm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1aW50OCogZGVzdFJvd3MsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcm93cywgdW5zaWduZWQgY29sdW1ucykK
K3sKKyAgICBmb3IgKHVuc2lnbmVkIHkgPSAwOyB5IDwgcm93czsgeSsrKSB7CisgICAgICAgIGNv
bnN0IHVpbnQ4KiBzb3VyY2VQaXhlbCA9IHNvdXJjZVJvd3M7CisgICAgICAgIHVpbnQ4KiBkZXN0
UGl4ZWwgPSBkZXN0Um93czsKKyAgICAgICAgZm9yICh1bnNpZ25lZCB4ID0gMDsgeCA8IGNvbHVt
bnM7IHgrKykgeworICAgICAgICAgICAgLy8gUkdCQSAtPiBCR1JBIG9yIEJHUkEgLT4gUkdCQQor
ICAgICAgICAgICAgZGVzdFBpeGVsWzBdID0gc291cmNlUGl4ZWxbMl07CisgICAgICAgICAgICBk
ZXN0UGl4ZWxbMV0gPSBzb3VyY2VQaXhlbFsxXTsKKyAgICAgICAgICAgIGRlc3RQaXhlbFsyXSA9
IHNvdXJjZVBpeGVsWzBdOworICAgICAgICAgICAgZGVzdFBpeGVsWzNdID0gc291cmNlUGl4ZWxb
M107CisgICAgICAgICAgICBkZXN0UGl4ZWwgKz0gNDsKKyAgICAgICAgICAgIHNvdXJjZVBpeGVs
ICs9IDQ7CisgICAgICAgIH0KKyAgICAgICAgc291cmNlUm93cyArPSBzb3VyY2VCeXRlc1BlclJv
dzsKKyAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OworICAgIH0KK30KKworc3Rh
dGljIGlubGluZSB2b2lkIGNvbnZlcnRGcm9tSW50ZXJuYWxEYXRhKGNvbnN0IHVpbnQ4KiBzb3Vy
Y2VSb3dzLCB1bnNpZ25lZCBzb3VyY2VCeXRlc1BlclJvdywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1aW50OCogZGVzdFJvd3MsIHVuc2lnbmVkIGRlc3RCeXRl
c1BlclJvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCByb3dzLCB1bnNpZ25lZCBjb2x1bW5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgcHJlbXVsdGlwbGllZCkKK3sKKyAgICBpZiAocHJlbXVsdGlw
bGllZCkgeworICAgICAgICAvLyBJbnRlcm5hbCBzdG9yYWdlIGlzIG5vdCBwcmUtbXVsdGlwbGll
ZCwgcHJlLW11bHRpcGx5IG9uIHRoZSBmbHkuCisgICAgICAgIGZvciAodW5zaWduZWQgeSA9IDA7
IHkgPCByb3dzOyB5KyspIHsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQ4KiBzb3VyY2VQaXhlbCA9
IHNvdXJjZVJvd3M7CisgICAgICAgICAgICB1aW50OCogZGVzdFBpeGVsID0gZGVzdFJvd3M7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHggPSAwOyB4IDwgY29sdW1uczsgeCsrKSB7CisgICAg
ICAgICAgICAgICAgLy8gUkdCQSAtPiBCR1JBIG9yIEJHUkEgLT4gUkdCQQorICAgICAgICAgICAg
ICAgIGRlc3RQaXhlbFswXSA9IHN0YXRpY19jYXN0PHVpbnQxNj4oc291cmNlUGl4ZWxbMl0pICog
c291cmNlUGl4ZWxbM10gLyAyNTU7CisgICAgICAgICAgICAgICAgZGVzdFBpeGVsWzFdID0gc3Rh
dGljX2Nhc3Q8dWludDE2Pihzb3VyY2VQaXhlbFsxXSkgKiBzb3VyY2VQaXhlbFszXSAvIDI1NTsK
KyAgICAgICAgICAgICAgICBkZXN0UGl4ZWxbMl0gPSBzdGF0aWNfY2FzdDx1aW50MTY+KHNvdXJj
ZVBpeGVsWzBdKSAqIHNvdXJjZVBpeGVsWzNdIC8gMjU1OworICAgICAgICAgICAgICAgIGRlc3RQ
aXhlbFszXSA9IHNvdXJjZVBpeGVsWzNdOworICAgICAgICAgICAgICAgIGRlc3RQaXhlbCArPSA0
OworICAgICAgICAgICAgICAgIHNvdXJjZVBpeGVsICs9IDQ7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBzb3VyY2VSb3dzICs9IHNvdXJjZUJ5dGVzUGVyUm93OworICAgICAgICAgICAgZGVz
dFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgY29udmVydEZyb21EYXRhKHNvdXJjZVJvd3MsIHNvdXJjZUJ5dGVzUGVyUm93LAorICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3MsIGRlc3RCeXRlc1BlclJvdywKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJvd3MsIGNvbHVtbnMpOworICAgIH0KK30KKworc3RhdGljIGlubGluZSB2
b2lkIGNvbnZlcnRUb0ludGVybmFsRGF0YShjb25zdCB1aW50OCogc291cmNlUm93cywgdW5zaWdu
ZWQgc291cmNlQnl0ZXNQZXJSb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQ4KiBkZXN0Um93cywgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCByb3dzLCB1bnNpZ25l
ZCBjb2x1bW5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IHByZW11bHRpcGxpZWQpCit7CisgICAgaWYgKHByZW11bHRpcGxpZWQpIHsKKyAgICAgICAgLy8g
SW50ZXJuYWwgc3RvcmFnZSBpcyBub3QgcHJlLW11bHRpcGxpZWQsIGRlLW11bHRpcGx5IHNvdXJj
ZSBkYXRhLgorICAgICAgICBmb3IgKHVuc2lnbmVkIHkgPSAwOyB5IDwgcm93czsgeSsrKSB7Cisg
ICAgICAgICAgICBjb25zdCB1aW50OCogc291cmNlUGl4ZWwgPSBzb3VyY2VSb3dzOworICAgICAg
ICAgICAgdWludDgqIGRlc3RQaXhlbCA9IGRlc3RSb3dzOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCB4ID0gMDsgeCA8IGNvbHVtbnM7IHgrKykgeworICAgICAgICAgICAgICAgIC8vIFJHQkEg
LT4gQkdSQSBvciBCR1JBIC0+IFJHQkEKKyAgICAgICAgICAgICAgICBpZiAoc291cmNlUGl4ZWxb
M10pIHsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFBpeGVsWzBdID0gc3RhdGljX2Nhc3Q8dWlu
dDE2Pihzb3VyY2VQaXhlbFsyXSkgKiAyNTUgLyBzb3VyY2VQaXhlbFszXTsKKyAgICAgICAgICAg
ICAgICAgICAgZGVzdFBpeGVsWzFdID0gc3RhdGljX2Nhc3Q8dWludDE2Pihzb3VyY2VQaXhlbFsx
XSkgKiAyNTUgLyBzb3VyY2VQaXhlbFszXTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFBpeGVs
WzJdID0gc3RhdGljX2Nhc3Q8dWludDE2Pihzb3VyY2VQaXhlbFswXSkgKiAyNTUgLyBzb3VyY2VQ
aXhlbFszXTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFBpeGVsWzNdID0gc291cmNlUGl4ZWxb
M107CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFBp
eGVsWzBdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFBpeGVsWzFdID0gMDsKKyAgICAg
ICAgICAgICAgICAgICAgZGVzdFBpeGVsWzJdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZGVz
dFBpeGVsWzNdID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGVzdFBp
eGVsICs9IDQ7CisgICAgICAgICAgICAgICAgc291cmNlUGl4ZWwgKz0gNDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHNvdXJjZVJvd3MgKz0gc291cmNlQnl0ZXNQZXJSb3c7CisgICAgICAg
ICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgICBjb252ZXJ0RnJvbURhdGEoc291cmNlUm93cywgc291cmNlQnl0ZXNQZXJSb3cs
CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93cywgZGVzdEJ5dGVzUGVyUm93LAorICAg
ICAgICAgICAgICAgICAgICAgICAgcm93cywgY29sdW1ucyk7CisgICAgfQorfQorCitzdGF0aWMg
UGFzc1JlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBj
b25zdCBJbWFnZUJ1ZmZlckRhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9v
bCBwcmVtdWx0aXBsaWVkKQoreworICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiByZXN1bHQgPSBJ
bWFnZURhdGE6OmNyZWF0ZShyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIHVuc2ln
bmVkIGNoYXIqIGRhdGEgPSByZXN1bHQtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCk7CisKKyAgICAv
LyBJZiB0aGUgZGVzdGluYXRpb24gaW1hZ2UgaXMgbGFyZ2VyIHRoYW4gdGhlIHNvdXJjZSBpbWFn
ZSwgdGhlIG91dHNpZGUKKyAgICAvLyByZWdpb25zIG5lZWQgdG8gYmUgdHJhbnNwYXJlbnQuIFRo
aXMgd2F5IGlzIHNpbXBseSwgYWx0aG91Z2ggd2l0aCBhCisgICAgLy8gYSBzbGlnaHQgb3Zlcmhl
YWQgZm9yIHRoZSBpbnNpZGUgcmVnaW9uLgorICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55
KCkgPCAwIHx8IChyZWN0LngoKSArIHJlY3Qud2lkdGgoKSkgPiBzaXplLndpZHRoKCkgfHwgKHJl
Y3QueSgpICsgcmVjdC5oZWlnaHQoKSkgPiBzaXplLmhlaWdodCgpKQorICAgICAgICBtZW1zZXQo
ZGF0YSwgMCwgcmVzdWx0LT5kYXRhKCktPmxlbmd0aCgpKTsKKworICAgIC8vIElmIHRoZSByZXF1
ZXN0ZWQgaW1hZ2UgaXMgb3V0c2lkZSB0aGUgc291cmNlIGltYWdlLCB3ZSBjYW4gcmV0dXJuIGF0
CisgICAgLy8gdGhpcyBwb2ludC4KKyAgICBpZiAocmVjdC54KCkgPiBzaXplLndpZHRoKCkgfHwg
cmVjdC55KCkgPiBzaXplLmhlaWdodCgpIHx8IHJlY3QucmlnaHQoKSA8IDAgfHwgcmVjdC5ib3R0
b20oKSA8IDApCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAvLyBOb3cgd2Uga25vdyB0
aGVyZSBtdXN0IGJlIGFuIGludGVyc2VjdGlvbiByZWN0IHdoaWNoIHdlIG5lZWQgdG8gZXh0cmFj
dC4KKyAgICBCUmVjdCBzb3VyY2VSZWN0KDAsIDAsIHNpemUud2lkdGgoKSAtIDEsIHNpemUuaGVp
Z2h0KCkgLSAxKTsKKyAgICBzb3VyY2VSZWN0ID0gQlJlY3QocmVjdCkgJiBzb3VyY2VSZWN0Owor
CisgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHJlY3Qud2lkdGgoKTsKKyAgICB1
bnNpZ25lZCBjaGFyKiBkZXN0Um93cyA9IGRhdGE7CisgICAgLy8gT2Zmc2V0IHRoZSBkZXN0aW5h
dGlvbiBwb2ludGVyIHRvIHBvaW50IGF0IHRoZSBmaXJzdCBwaXhlbCBvZiB0aGUKKyAgICAvLyBp
bnRlcnNlY3Rpb24gcmVjdC4KKyAgICBkZXN0Um93cyArPSAocmVjdC54KCkgLSBzdGF0aWNfY2Fz
dDxpbnQ+KHNvdXJjZVJlY3QubGVmdCkpICogNAorICAgICAgICArIChyZWN0LnkoKSAtIHN0YXRp
Y19jYXN0PGludD4oc291cmNlUmVjdC50b3ApKSAqIGRlc3RCeXRlc1BlclJvdzsKKworICAgIGNv
bnN0IHVpbnQ4KiBzb3VyY2VSb3dzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OCo+KGlt
YWdlRGF0YS5tX2JpdG1hcC5CaXRzKCkpOworICAgIHVpbnQzMiBzb3VyY2VCeXRlc1BlclJvdyA9
IGltYWdlRGF0YS5tX2JpdG1hcC5CeXRlc1BlclJvdygpOworICAgIC8vIE9mZnNldCB0aGUgc291
cmNlIHBvaW50ZXIgdG8gcG9pbnQgYXQgdGhlIGZpcnN0IHBpeGVsIG9mIHRoZQorICAgIC8vIGlu
dGVyc2VjdGlvbiByZWN0LgorICAgIHNvdXJjZVJvd3MgKz0gc3RhdGljX2Nhc3Q8aW50Pihzb3Vy
Y2VSZWN0LmxlZnQpICogNAorICAgICAgICArIHN0YXRpY19jYXN0PGludD4oc291cmNlUmVjdC50
b3ApICogc291cmNlQnl0ZXNQZXJSb3c7CisKKyAgICB1bnNpZ25lZCByb3dzID0gc291cmNlUmVj
dC5JbnRlZ2VySGVpZ2h0KCkgKyAxOworICAgIHVuc2lnbmVkIGNvbHVtbnMgPSBzb3VyY2VSZWN0
LkludGVnZXJXaWR0aCgpICsgMTsKKyAgICBjb252ZXJ0RnJvbUludGVybmFsRGF0YShzb3VyY2VS
b3dzLCBzb3VyY2VCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RCeXRlc1BlclJvdywKKyAgICAg
ICAgcm93cywgY29sdW1ucywgcHJlbXVsdGlwbGllZCk7CisKKyAgICByZXR1cm4gcmVzdWx0Owog
fQogCi12b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEltYWdlRGF0
YSogc291cmNlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50KQorCitQYXNzUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlw
bGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAogewotICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgLy8gTWFrZSBzdXJlIGFsbCBhc3luY2hyb25vdXMgZHJhd2luZyBoYXMg
ZmluaXNoZWQKKyAgICBtX2RhdGEubV92aWV3LlN5bmMoKTsKKyAgICByZXR1cm4gZ2V0SW1hZ2VE
YXRhKHJlY3QsIG1fZGF0YSwgbV9zaXplLCBmYWxzZSk7CiB9CiAKLVN0cmluZyBJbWFnZUJ1ZmZl
cjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYpIGNvbnN0CitQYXNzUmVmUHRyPEltYWdlRGF0YT4g
SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVj
dCkgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsK
KyAgICAvLyBNYWtlIHN1cmUgYWxsIGFzeW5jaHJvbm91cyBkcmF3aW5nIGhhcyBmaW5pc2hlZAor
ICAgIG1fZGF0YS5tX3ZpZXcuU3luYygpOworICAgIHJldHVybiBnZXRJbWFnZURhdGEocmVjdCwg
bV9kYXRhLCBtX3NpemUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBwdXRJbWFnZURhdGEoSW1h
Z2VEYXRhKiBzb3VyY2UsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50
JiBkZXN0UG9pbnQsIEltYWdlQnVmZmVyRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRTaXplJiBz
aXplLCBib29sIHByZW11bHRpcGxpZWQpCit7CisgICAgLy8gSWYgdGhlIHNvdXJjZSBpbWFnZSBp
cyBvdXRzaWRlIHRoZSBkZXN0aW5hdGlvbiBpbWFnZSwgd2UgY2FuIHJldHVybiBhdAorICAgIC8v
IHRoaXMgcG9pbnQuCisgICAgLy8gRklYTUU6IENoZWNrIGlmIHRoaXMgaXNuJ3QgYWxyZWFkeSBk
b25lIGluIFdlYkNvcmUuCisgICAgaWYgKGRlc3RQb2ludC54KCkgPiBzaXplLndpZHRoKCkgfHwg
ZGVzdFBvaW50LnkoKSA+IHNpemUuaGVpZ2h0KCkKKyAgICAgICAgfHwgZGVzdFBvaW50LngoKSAr
IHNvdXJjZVJlY3Qud2lkdGgoKSA8IDAKKyAgICAgICAgfHwgZGVzdFBvaW50LnkoKSArIHNvdXJj
ZVJlY3QuaGVpZ2h0KCkgPCAwKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25z
dCB1bnNpZ25lZCBjaGFyKiBzb3VyY2VSb3dzID0gc291cmNlLT5kYXRhKCktPmRhdGEoKS0+ZGF0
YSgpOworICAgIHVuc2lnbmVkIHNvdXJjZUJ5dGVzUGVyUm93ID0gNCAqIHNvdXJjZS0+d2lkdGgo
KTsKKyAgICAvLyBPZmZzZXQgdGhlIHNvdXJjZSBwb2ludGVyIHRvIHRoZSBmaXJzdCBwaXhlbCBv
ZiB0aGUgc291cmNlIHJlY3QuCisgICAgc291cmNlUm93cyArPSBzb3VyY2VSZWN0LngoKSAqIDQg
KyBzb3VyY2VSZWN0LnkoKSAqIHNvdXJjZUJ5dGVzUGVyUm93OworCisgICAgLy8gV2Uga25vdyB0
aGVyZSBtdXN0IGJlIGFuIGludGVyc2VjdGlvbiByZWN0LgorICAgIEJSZWN0IGRlc3RSZWN0KGRl
c3RQb2ludC54KCksIGRlc3RQb2ludC55KCksIHNvdXJjZVJlY3Qud2lkdGgoKSAtIDEsIHNvdXJj
ZVJlY3QuaGVpZ2h0KCkgLSAxKTsKKyAgICBkZXN0UmVjdCA9IGRlc3RSZWN0ICYgQlJlY3QoMCwg
MCwgc2l6ZS53aWR0aCgpIC0gMSwgc2l6ZS5oZWlnaHQoKSAtIDEpOworCisgICAgdW5zaWduZWQg
Y2hhciogZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihpbWFnZURh
dGEubV9iaXRtYXAuQml0cygpKTsKKyAgICB1aW50MzIgZGVzdEJ5dGVzUGVyUm93ID0gaW1hZ2VE
YXRhLm1fYml0bWFwLkJ5dGVzUGVyUm93KCk7CisgICAgLy8gT2Zmc2V0IHRoZSBzb3VyY2UgcG9p
bnRlciB0byBwb2ludCBhdCB0aGUgZmlyc3QgcGl4ZWwgb2YgdGhlCisgICAgLy8gaW50ZXJzZWN0
aW9uIHJlY3QuCisgICAgZGVzdFJvd3MgKz0gc3RhdGljX2Nhc3Q8aW50PihkZXN0UmVjdC5sZWZ0
KSAqIDQKKyAgICAgICAgKyBzdGF0aWNfY2FzdDxpbnQ+KGRlc3RSZWN0LnRvcCkgKiBkZXN0Qnl0
ZXNQZXJSb3c7CisKKyAgICB1bnNpZ25lZCByb3dzID0gc291cmNlUmVjdC5oZWlnaHQoKTsKKyAg
ICB1bnNpZ25lZCBjb2x1bW5zID0gc291cmNlUmVjdC53aWR0aCgpOworICAgIGNvbnZlcnRUb0lu
dGVybmFsRGF0YShzb3VyY2VSb3dzLCBzb3VyY2VCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RC
eXRlc1BlclJvdywKKyAgICAgICAgcm93cywgY29sdW1ucywgcHJlbXVsdGlwbGllZCk7CiB9CiAK
LUltYWdlKiBJbWFnZUJ1ZmZlcjo6aW1hZ2UoKSBjb25zdAordm9pZCBJbWFnZUJ1ZmZlcjo6cHV0
VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEltYWdlRGF0YSogc291cmNlLCBjb25zdCBJbnRSZWN0JiBz
b3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIDA7CisgICAgLy8gTWFrZSBzdXJlIGFsbCBhc3luY2hyb25vdXMg
ZHJhd2luZyBoYXMgZmluaXNoZWQKKyAgICBtX2RhdGEubV92aWV3LlN5bmMoKTsKKyAgICBwdXRJ
bWFnZURhdGEoc291cmNlLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsIG1fZGF0YSwgbV9zaXplLCBm
YWxzZSk7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFj
ZShjb25zdCBWZWN0b3I8aW50PiYgbG9va1VwVGFibGUpCit2b2lkIEltYWdlQnVmZmVyOjpwdXRQ
cmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEltYWdlRGF0YSogc291cmNlLCBjb25zdCBJbnRSZWN0JiBz
b3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewotICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgLy8gTWFrZSBzdXJlIGFsbCBhc3luY2hyb25vdXMgZHJhd2luZyBoYXMgZmlu
aXNoZWQKKyAgICBtX2RhdGEubV92aWV3LlN5bmMoKTsKKyAgICBwdXRJbWFnZURhdGEoc291cmNl
LCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsIG1fZGF0YSwgbV9zaXplLCB0cnVlKTsKK30KKworU3Ry
aW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3QK
K3sKKyAgICBpZiAoIU1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZv
ckVuY29kaW5nKG1pbWVUeXBlKSkKKyAgICAgICAgcmV0dXJuICJkYXRhOiwiOworCisgICAgQlN0
cmluZyBtaW1lVHlwZVN0cmluZyhtaW1lVHlwZSk7CisKKyAgICB1aW50MzIgdHJhbnNsYXRvclR5
cGUgPSAwOworCisgICAgQlRyYW5zbGF0b3JSb3N0ZXIqIHJvc3RlciA9IEJUcmFuc2xhdG9yUm9z
dGVyOjpEZWZhdWx0KCk7CisgICAgdHJhbnNsYXRvcl9pZCogdHJhbnNsYXRvcnM7CisgICAgaW50
MzIgdHJhbnNsYXRvckNvdW50OworICAgIHJvc3Rlci0+R2V0QWxsVHJhbnNsYXRvcnMoJnRyYW5z
bGF0b3JzLCAmdHJhbnNsYXRvckNvdW50KTsKKyAgICBmb3IgKGludDMyIGkgPSAwOyBpIDwgdHJh
bnNsYXRvckNvdW50OyBpKyspIHsKKyAgICAgICAgLy8gU2tpcCB0cmFuc2xhdG9ycyB0aGF0IGRv
bid0IHN1cHBvcnQgYXJjaGl2ZWQgQkJpdG1hcHMgYXMgaW5wdXQgZGF0YS4KKyAgICAgICAgY29u
c3QgdHJhbnNsYXRpb25fZm9ybWF0KiBpbnB1dEZvcm1hdHM7CisgICAgICAgIGludDMyIGZvcm1h
dENvdW50OworICAgICAgICByb3N0ZXItPkdldElucHV0Rm9ybWF0cyh0cmFuc2xhdG9yc1tpXSwg
JmlucHV0Rm9ybWF0cywgJmZvcm1hdENvdW50KTsKKyAgICAgICAgYm9vbCBzdXBwb3J0c0JpdG1h
cHMgPSBmYWxzZTsKKyAgICAgICAgZm9yIChpbnQzMiBqID0gMDsgaiA8IGZvcm1hdENvdW50OyBq
KyspIHsKKyAgICAgICAgICAgIGlmIChpbnB1dEZvcm1hdHNbal0udHlwZSA9PSBCX1RSQU5TTEFU
T1JfQklUTUFQKSB7CisgICAgICAgICAgICAgICAgc3VwcG9ydHNCaXRtYXBzID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBp
ZiAoIXN1cHBvcnRzQml0bWFwcykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGNv
bnN0IHRyYW5zbGF0aW9uX2Zvcm1hdCogb3V0cHV0Rm9ybWF0czsKKyAgICAgICAgcm9zdGVyLT5H
ZXRPdXRwdXRGb3JtYXRzKHRyYW5zbGF0b3JzW2ldLCAmb3V0cHV0Rm9ybWF0cywgJmZvcm1hdENv
dW50KTsKKyAgICAgICAgZm9yIChpbnQzMiBqID0gMDsgaiA8IGZvcm1hdENvdW50OyBqKyspIHsK
KyAgICAgICAgICAgIGlmIChvdXRwdXRGb3JtYXRzW2pdLmdyb3VwID09IEJfVFJBTlNMQVRPUl9C
SVRNQVAKKyAgICAgICAgICAgICAgICAmJiBtaW1lVHlwZVN0cmluZyA9PSBvdXRwdXRGb3JtYXRz
W2pdLk1JTUUpIHsKKyAgICAgICAgICAgICAgICB0cmFuc2xhdG9yVHlwZSA9IG91dHB1dEZvcm1h
dHNbal0udHlwZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodHJhbnNs
YXRvclR5cGUpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKworICAgIEJNYWxsb2NJTyB0
cmFuc2xhdGVkU3RyZWFtOworICAgIEJCaXRtYXAqIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8QkJpdG1h
cCo+KCZtX2RhdGEubV9iaXRtYXApOworICAgICAgICAvLyBCQml0bWFwU3RyZWFtIGRvZXNuJ3Qg
dGFrZSAiY29uc3QgQml0bWFwKiIuLi4KKyAgICBCQml0bWFwU3RyZWFtIGJpdG1hcFN0cmVhbShi
aXRtYXApOworICAgIGlmIChyb3N0ZXItPlRyYW5zbGF0ZSgmYml0bWFwU3RyZWFtLCAwLCAwLCAm
dHJhbnNsYXRlZFN0cmVhbSwgdHJhbnNsYXRvclR5cGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIEJfVFJBTlNMQVRPUl9CSVRNQVAsIG1pbWVUeXBlLnV0ZjgoKS5kYXRhKCkpICE9IEJfT0sp
IHsKKyAgICAgICAgYml0bWFwU3RyZWFtLkRldGFjaEJpdG1hcCgmYml0bWFwKTsKKyAgICAgICAg
cmV0dXJuICJkYXRhOiwiOworICAgIH0KKworICAgIGJpdG1hcFN0cmVhbS5EZXRhY2hCaXRtYXAo
JmJpdG1hcCk7CisKKyAgICBWZWN0b3I8Y2hhcj4gZW5jb2RlZEJ1ZmZlcjsKKyAgICBiYXNlNjRF
bmNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odHJhbnNsYXRlZFN0cmVhbS5CdWZm
ZXIoKSksCisgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRTdHJlYW0uQnVmZmVyTGVuZ3RoKCks
IGVuY29kZWRCdWZmZXIpOworCisgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJkYXRhOiVzO2Jh
c2U2NCwlcyIsIG1pbWVUeXBlLnV0ZjgoKS5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVuY29kZWRCdWZmZXIuZGF0YSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>