<?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>58242</bug_id>
          
          <creation_ts>2011-04-11 09:45:44 -0700</creation_ts>
          <short_desc>[GTK] Implement pixel dump support for WebKitTestRunner</short_desc>
          <delta_ts>2011-06-22 06:50:04 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>57068</dependson>
    
    <dependson>60293</dependson>
          <blocked>57781</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>alex</cc>
    
    <cc>andersca</cc>
    
    <cc>aroben</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cgarcia</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>383224</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-04-11 09:45:44 -0700</bug_when>
    <thetext>After #57068 closes, WebKitTestRunner will run, but not be able to dump test pixels. This bug tracks adding that feature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383295</commentid>
    <comment_count>1</comment_count>
      <attachid>89035</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-04-11 11:18:28 -0700</bug_when>
    <thetext>Created attachment 89035
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383380</commentid>
    <comment_count>2</comment_count>
      <attachid>89035</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-04-11 12:39:26 -0700</bug_when>
    <thetext>Comment on attachment 89035
Patch

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

This change looks great! I&apos;ve added a few comments for future thought.  I don&apos;t think anything I mention is worth addressing in this change, except perhaps the &quot;ref&quot; call.

&gt; Source/WebKit2/Shared/cairo/ShareableBitmapCairo.cpp:42
&gt; +

Note: I&apos;m not at all sure that this ref() is needed here.  In CoreGraphics, the allocation of the image surface includes a callback routine that performs the cleanup.  We might need to either omit this ref() here, or make sure that the destructor for the PassOwnPtr&lt;GraphicsContext&gt; somehow decrements the reference count here.

&gt; Source/WebKit2/Shared/cairo/ShareableBitmapCairo.cpp:61
&gt; +

Note that I cribbed most (all?) of this routine from ImageCairo.cpp.  It would be nice if this could be shared someplace common for both implementations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390782</commentid>
    <comment_count>3</comment_count>
      <attachid>89035</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-04-22 08:18:08 -0700</bug_when>
    <thetext>Comment on attachment 89035
Patch

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

&gt; Source/WebKit2/Shared/ShareableBitmap.h:116
&gt; +    // This creates a copied BitmapImage (most likely a copy-on-write) of the shareable bitmap.
&gt; +    cairo_surface_t* makeImageCopy();
&gt; +
&gt; +    // This creates a BitmapImage that directly references the shared bitmap data.
&gt; +    // This is only safe to use when we know that the contents of the shareable bitmap won&apos;t change.
&gt; +    cairo_surface_t* makeImage();

Seems like these should return PassRefPtr, given that you use RefPtr&lt;cairo_surface_t&gt; in the implementation. (I didn&apos;t know that was possible!)

Is makeImageCopy() really doing a copy-on-write? CG does that behind-the-scenes on Mac.

&gt;&gt; Source/WebKit2/Shared/cairo/ShareableBitmapCairo.cpp:42
&gt;&gt; +    ref(); // Balanced by deref in releaseBitmapContextData.
&gt;&gt; +
&gt; 
&gt; Note: I&apos;m not at all sure that this ref() is needed here.  In CoreGraphics, the allocation of the image surface includes a callback routine that performs the cleanup.  We might need to either omit this ref() here, or make sure that the destructor for the PassOwnPtr&lt;GraphicsContext&gt; somehow decrements the reference count here.

I agree with Brent. This looks like a leak to me. But if you remove this ref(), what will guarantee that the ShareableBitmap stays alive as long as the cairo_surface_t might access its data?

&gt; Tools/WebKitTestRunner/cairo/TestInvocationCairo.cpp:110
&gt; +void TestInvocation::dumpPixelsAndCompareWithExpected(WKImageRef wkImage)
&gt; +{
&gt; +    cairo_surface_t* surface =  WKImageCreateCairoSurface(wkImage);
&gt; +
&gt; +    char actualHash[33];
&gt; +    computeMD5HashStringForCairoContext(surface, actualHash);
&gt; +    fprintf(stdout, &quot;\nActualHash: %s\n&quot;, actualHash);
&gt; +
&gt; +    // Check the computed hash against the expected one and dump image on mismatch
&gt; +    bool hashesMatch = false;
&gt; +    if (m_expectedPixelHash.length() &gt; 0) {
&gt; +        ASSERT(m_expectedPixelHash.length() == 32);
&gt; +
&gt; +        fprintf(stdout, &quot;\nExpectedHash: %s\n&quot;, m_expectedPixelHash.c_str());
&gt; +
&gt; +        // FIXME: Do case insensitive compare.
&gt; +        if (m_expectedPixelHash == actualHash)
&gt; +            hashesMatch = true;
&gt; +    }
&gt; +
&gt; +    if (!hashesMatch)
&gt; +        dumpBitmap(surface);
&gt;  }

Seems like we should refactor the code so that all ports can share the logic in the latter part of this function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392839</commentid>
    <comment_count>4</comment_count>
      <attachid>89035</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-04-26 15:37:53 -0700</bug_when>
    <thetext>Comment on attachment 89035
Patch

Removing r? in response to aroben&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394571</commentid>
    <comment_count>5</comment_count>
      <attachid>91520</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-04-28 11:16:48 -0700</bug_when>
    <thetext>Created attachment 91520
Proposed update to ShareableBitmap implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420689</commentid>
    <comment_count>6</comment_count>
      <attachid>97162</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-06-14 13:24:02 -0700</bug_when>
    <thetext>Created attachment 97162
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423781</commentid>
    <comment_count>7</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-06-20 11:13:20 -0700</bug_when>
    <thetext>I&apos;ve updated the patch here with Adam&apos;s suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424465</commentid>
    <comment_count>8</comment_count>
      <attachid>97162</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-06-21 08:29:12 -0700</bug_when>
    <thetext>Comment on attachment 97162
Patch

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

&gt; Source/WebKit2/ChangeLog:12
&gt; +        * Shared/API/c/cairo/WKImageCairo.h: Copied from Source/WebKit2/Shared/cairo/ShareableBitmapCairo.cpp.

This file seems to be missing from your patch.

&gt; Tools/WebKitTestRunner/TestInvocation.h:50
&gt; +    bool compareActualHashToExpectedAndDumpResults(char[33]);

Can the argument be a const char[33]?

&gt; Tools/WebKitTestRunner/cairo/TestInvocationCairo.cpp:49
&gt; +    for (unsigned row = 0; row &lt; pixelsHigh; row++) {

Might as well use size_t and preincrement here.

&gt; Tools/WebKitTestRunner/cairo/TestInvocationCairo.cpp:50
&gt; +        md5Context.addBytes(bitmapData, 4 * pixelsWide);

Is it worth checking the bits-per-pixel of the surface instead of assuming 32?

&gt; Tools/WebKitTestRunner/cairo/TestInvocationCairo.cpp:92
&gt; +    cairo_surface_t* surface = WKImageCreateCairoSurface(wkImage);

Can you use a RefPtr here?

&gt; Tools/WebKitTestRunner/cg/TestInvocationCG.cpp:-145
&gt; -        // FIXME: Do case insensitive compare.

You lost this FIXME when moving this code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424867</commentid>
    <comment_count>9</comment_count>
      <attachid>98079</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-06-21 16:41:51 -0700</bug_when>
    <thetext>Created attachment 98079
Patch wth Adam&apos;s suggestions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424869</commentid>
    <comment_count>10</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-06-21 16:44:48 -0700</bug_when>
    <thetext>(In reply to comment #8)

Thanks for the review. I&apos;ve attached a new patch, which I hope addresses your comments.

&gt; (From update of attachment 97162 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=97162&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:12
&gt; &gt; +        * Shared/API/c/cairo/WKImageCairo.h: Copied from Source/WebKit2/Shared/cairo/ShareableBitmapCairo.cpp.
&gt; 
&gt; This file seems to be missing from your patch.

Wow. For some reason webkit-patch isn&apos;t picking it up. :(

&gt; &gt; Tools/WebKitTestRunner/TestInvocation.h:50
&gt; &gt; +    bool compareActualHashToExpectedAndDumpResults(char[33]);
&gt; 
&gt; Can the argument be a const char[33]?

Fixed!

&gt; &gt; Tools/WebKitTestRunner/cairo/TestInvocationCairo.cpp:49
&gt; &gt; +    for (unsigned row = 0; row &lt; pixelsHigh; row++) {
&gt; 
&gt; Might as well use size_t and preincrement here.

Fixed!

&gt; &gt; Tools/WebKitTestRunner/cairo/TestInvocationCairo.cpp:50
&gt; &gt; +        md5Context.addBytes(bitmapData, 4 * pixelsWide);
&gt; 
&gt; Is it worth checking the bits-per-pixel of the surface instead of assuming 32?

I assert above that the format matches what we expect here. Is that enough? I believe that getting any other image format at this point represents an error.

&gt; &gt; Tools/WebKitTestRunner/cairo/TestInvocationCairo.cpp:92
&gt; &gt; +    cairo_surface_t* surface = WKImageCreateCairoSurface(wkImage);
&gt; 
&gt; Can you use a RefPtr here?

I had hoped so originally, but the Cairo RefPtr specializations are not header files and are not exported publically from libwebkitetetc.so.

&gt; &gt; Tools/WebKitTestRunner/cg/TestInvocationCG.cpp:-145
&gt; &gt; -        // FIXME: Do case insensitive compare.
&gt; 
&gt; You lost this FIXME when moving this code.

Fixed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425171</commentid>
    <comment_count>11</comment_count>
      <attachid>97162</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-06-22 06:05:34 -0700</bug_when>
    <thetext>Comment on attachment 97162
Patch

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

&gt;&gt;&gt; Tools/WebKitTestRunner/cairo/TestInvocationCairo.cpp:50
&gt;&gt;&gt; +        md5Context.addBytes(bitmapData, 4 * pixelsWide);
&gt;&gt; 
&gt;&gt; Is it worth checking the bits-per-pixel of the surface instead of assuming 32?
&gt; 
&gt; I assert above that the format matches what we expect here. Is that enough? I believe that getting any other image format at this point represents an error.

Sounds fine to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425173</commentid>
    <comment_count>12</comment_count>
      <attachid>98079</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-06-22 06:08:02 -0700</bug_when>
    <thetext>Comment on attachment 98079
Patch wth Adam&apos;s suggestions

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

&gt; Source/WebKit2/Shared/API/c/cairo/WKImageCairo.h:33
&gt; +typedef _cairo_surface cairo_surface_t;

Seems like you&apos;re missing a &quot;struct&quot; in here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425183</commentid>
    <comment_count>13</comment_count>
      <attachid>98079</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-22 06:49:58 -0700</bug_when>
    <thetext>Comment on attachment 98079
Patch wth Adam&apos;s suggestions

Clearing flags on attachment: 98079

Committed r89426: &lt;http://trac.webkit.org/changeset/89426&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425184</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-22 06:50:04 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89035</attachid>
            <date>2011-04-11 11:18:28 -0700</date>
            <delta_ts>2011-06-14 13:23:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58242-20110411111820.patch</filename>
            <type>text/plain</type>
            <size>22295</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMzODEKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5n
ZUxvZwppbmRleCBhYWJjNmNhODc3ZjA3ZGQxMjliM2Q5ZGY2MzljYzZiYTk3ODJiODQ0Li4xZjg3
NGVhNmIzYTIzZWE0MmFiMDY4MjM3NmZmZGNkYmM3NWQ4NzcwIDEwMDY0NAotLS0gYS9DaGFuZ2VM
b2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDQtMTEgIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUBnbWFpbC5jb20+IGFuZCBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5z
b25AaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBbR1RLXSBJbXBsZW1lbnQgcGl4ZWwgZHVtcCBzdXBwb3J0IGZvciBXZWJLaXRUZXN0
UnVubmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
ODI0MgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IFJlZmVyZW5jZSB0aGUgbmV3IEltYWdl
RGlmZiBHTlVtYWtlZmlsZS4KKwogMjAxMS0wMy0zMCAgTWFydGluIFJvYmluc29uICA8bXJvYmlu
c29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCmRp
ZmYgLS1naXQgYS9HTlVtYWtlZmlsZS5hbSBiL0dOVW1ha2VmaWxlLmFtCmluZGV4IDhjNTAyZjAz
NDZjYmVhMDUzNmFjYmIwNmQwZmNjYzY2NTg0NmQyMDQuLjk2MGYzZWJkZjgyMTkwNWMzY2RiNmZh
Nzg4ZTY4NjYyODFlYWRjYzAgMTAwNjQ0Ci0tLSBhL0dOVW1ha2VmaWxlLmFtCisrKyBiL0dOVW1h
a2VmaWxlLmFtCkBAIC0yMjcsNiArMjI3LDcgQEAgRVhUUkFfRElTVCArPSBcCiAjIEluY2x1ZGUg
bW9kdWxlIG1ha2VmaWxlcwogaW5jbHVkZSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZp
bGUuYW0KIGluY2x1ZGUgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KK2luY2x1ZGUgVG9v
bHMvRHVtcFJlbmRlclRyZWUvZ3RrL0dOVW1ha2VmaWxlLkltYWdlRGlmZi5hbQogaWYgRU5BQkxF
X1dFQktJVDIKIGluY2x1ZGUgU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KIGluY2x1ZGUg
VG9vbHMvTWluaUJyb3dzZXIvZ3RrL0dOVW1ha2VmaWxlLmFtCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNGIyNmRm
ZTVhMzU1ODBmZjk2OTNjNWQ0ZWY4MjIwOTM4N2RjOGQ5Ni4uYzIxOTEzN2I0MjExMmE3ZmM2YjEw
Y2QzM2NmNWY0ZmY2OGZjYTc1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDExLTA0
LTExICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AZ21haWwuY29tPiBhbmQgTWFydGluIFJvYmlu
c29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW0dUS10gSW1wbGVtZW50IHBpeGVsIGR1bXAgc3VwcG9ydCBm
b3IgV2ViS2l0VGVzdFJ1bm5lcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTgyNDIKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGRlZCBuZXcg
Q2Fpcm8gc3BlY2lmaWMgaW1hZ2UgaGFuZGxpbmcgZmlsZXMgdG8gdGhlIGJ1aWxkLgorICAgICAg
ICAqIFNoYXJlZC9BUEkvYy9jYWlyby9XS0ltYWdlQ2Fpcm8uY3BwOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8uY3BwLgorICAgICAg
ICAoV0tJbWFnZUNyZWF0ZUNhaXJvU3VyZmFjZSk6IEFkZGVkCisgICAgICAgIChXS0ltYWdlQ3Jl
YXRlRnJvbUNhaXJvU3VyZmFjZSk6IEFkZGVkCisgICAgICAgICogU2hhcmVkL0FQSS9jL2NhaXJv
L1dLSW1hZ2VDYWlyby5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2Fpcm8v
U2hhcmVhYmxlQml0bWFwQ2Fpcm8uY3BwLgorICAgICAgICAqIFNoYXJlZC9TaGFyZWFibGVCaXRt
YXAuaDogQWRkZWQgc3VwcG9ydCBmb3IgQ2Fpcm8uCisgICAgICAgICogU2hhcmVkL2NhaXJvL1No
YXJlYWJsZUJpdG1hcENhaXJvLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJs
ZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OlNoYXJlYWJsZUJpdG1hcDo6cGFpbnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6U2hhcmVh
YmxlQml0bWFwOjptYWtlSW1hZ2VDb3B5KTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlNoYXJl
YWJsZUJpdG1hcDo6bWFrZUltYWdlKTogQWRkZWQuCisKIDIwMTEtMDMtMzAgIE1hcnRpbiBSb2Jp
bnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gYi9T
b3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCAwMmUyOGQwYmYzZTA3OTk2MzZjYTZk
NmRmMjk1Y2IyYmM3ZTEwOGRjLi5lYjkzOWUyOGNjYzEwNmNkNzliZjNjNDQ1MDQxNDJlNzUzNmQw
ZWU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtMTIxLDYgKzEyMSw4IEBAIGxpYldlYktpdDJf
bGFfU09VUkNFUyA9IFwKIAlTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3ND
b25uZWN0aW9uLmNwcCBcCiAJU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9XZWJQcm9jZXNz
Q29ubmVjdGlvbi5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJQ2xpZW50LmggXAorCVNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9jYWlyby9XS0ltYWdlQ2Fpcm8uY3BwIFwKKwlTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvY2Fpcm8vV0tJbWFnZUNhaXJvLmggXAogCVNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9BUEkvYy9ndGsvV0tCYXNlR3RrLmggXAogCVNvdXJjZS9XZWJLaXQyL1No
YXJlZC9BUEkvYy9ndGsvV0tHcmFwaGljc0NvbnRleHRHdGsuaCBcCiAJU291cmNlL1dlYktpdDIv
U2hhcmVkL0FQSS9jL2d0ay9XS0dyYXBoaWNzQ29udGV4dEd0ay5jcHAgXApAQCAtMTg2LDcgKzE4
OCw3IEBAIGxpYldlYktpdDJfbGFfU09VUkNFUyA9IFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Q29yZUlQQ1N1cHBvcnQvV2ViUHJvY2Vzc1Byb3h5TWVzc2FnZUtpbmRzLmggXAogCVNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9EcmF3aW5nQXJlYUluZm8uaCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVk
L0ZvbnRTbW9vdGhpbmdMZXZlbC5oIFwKLQlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1NoYXJl
YWJsZUJpdG1hcEd0ay5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9jYWlyby9TaGFyZWFi
bGVCaXRtYXBDYWlyby5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvTmF0aXZlV2Vi
S2V5Ym9hcmRFdmVudEd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvUGxhdGZv
cm1DZXJ0aWZpY2F0ZUluZm8uaCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9VcGRhdGVD
aHVuay5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL2NhaXJv
L1dLSW1hZ2VDYWlyby5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvY2Fpcm8vV0tJ
bWFnZUNhaXJvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZmQxMGE1NWM0MGVlMDE0ZWI4MWM5ZDQ4ZWIyM2E2
OGFjOGE3ZTU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9j
L2NhaXJvL1dLSW1hZ2VDYWlyby5jcHAKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldLSW1hZ2VDYWlyby5oIgorCisjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisj
aW5jbHVkZSAiV0tTaGFyZWRBUElDYXN0LmgiCisjaW5jbHVkZSAiV2ViSW1hZ2UuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZv
cm1Db250ZXh0Q2Fpcm8uaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCitjYWlyb19zdXJmYWNlX3QqIFdLSW1hZ2VDcmVhdGVDYWlyb1N1cmZh
Y2UoV0tJbWFnZVJlZiBpbWFnZVJlZikKK3sKKyAgICByZXR1cm4gdG9JbXBsKGltYWdlUmVmKS0+
Yml0bWFwKCktPm1ha2VJbWFnZUNvcHkoKTsKK30KKworV0tJbWFnZVJlZiBXS0ltYWdlQ3JlYXRl
RnJvbUNhaXJvU3VyZmFjZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UsIFdLSW1hZ2VPcHRpb25z
IG9wdGlvbnMpCit7CisgICAgSW50U2l6ZSBpbWFnZVNpemUoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfd2lkdGgoc3VyZmFjZSksIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNl
KSk7CisgICAgUmVmUHRyPFdlYkltYWdlPiB3ZWJJbWFnZSA9IFdlYkltYWdlOjpjcmVhdGUoaW1h
Z2VTaXplLCB0b0ltYWdlT3B0aW9ucyhvcHRpb25zKSk7CisgICAgT3duUHRyPEdyYXBoaWNzQ29u
dGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gd2ViSW1hZ2UtPmJpdG1hcCgpLT5jcmVhdGVHcmFwaGlj
c0NvbnRleHQoKTsKKworICAgIGNhaXJvX3QqIGNyID0gZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKS0+Y3IoKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IsIHN1cmZh
Y2UsIDAsIDApOworICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfU09V
UkNFKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY3IsIDAsIDAsIGltYWdlU2l6ZS53aWR0aCgpLCBp
bWFnZVNpemUuaGVpZ2h0KCkpOworICAgIGNhaXJvX2ZpbGwoY3IpOworCisgICAgcmV0dXJuIHRv
QVBJKHdlYkltYWdlLnJlbGVhc2UoKS5sZWFrUmVmKCkpOworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL0FQSS9jL2NhaXJvL1dLSW1hZ2VDYWlyby5oIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL0FQSS9jL2NhaXJvL1dLSW1hZ2VDYWlyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxY2E4OWQw
M2E1YzI2NDg4OTUzMjNhNTA3YjdkZjA5ZGEwYmZiMzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvY2Fpcm8vV0tJbWFnZUNhaXJvLmgKQEAgLTAsMCArMSw0
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBXS0ltYWdlQ2Fpcm9faAorI2RlZmluZSBXS0ltYWdlQ2Fpcm9faAorCisjaW5jbHVkZSA8
V2ViS2l0Mi9XS0Jhc2UuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLSW1hZ2UuaD4KKwordHlwZWRl
ZiBfY2Fpcm9fc3VyZmFjZSBjYWlyb19zdXJmYWNlX3Q7CisKKyNpZmRlZiBfX2NwbHVzcGx1cwor
ZXh0ZXJuICJDIiB7CisjZW5kaWYKKworV0tfRVhQT1JUIGNhaXJvX3N1cmZhY2VfdCogV0tJbWFn
ZUNyZWF0ZUNhaXJvU3VyZmFjZShXS0ltYWdlUmVmIGltYWdlKTsKKworV0tfRVhQT1JUIFdLSW1h
Z2VSZWYgV0tJbWFnZUNyZWF0ZUZyb21DYWlyb1N1cmZhY2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJm
YWNlLCBXS0ltYWdlT3B0aW9ucyBvcHRpb25zKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9Cisj
ZW5kaWYKKworI2VuZGlmIC8qIFdLSW1hZ2VDYWlyb19oICovCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
U2hhcmVhYmxlQml0bWFwLmgKaW5kZXggZmU3ZmEwYWI4NTNlOWM4ZGVhNWM3OGFjNGExN2RlYTA3
MTcyNTcyOS4uMTcyZjdmZjc1NmU0ZDQ4ZDE0YzM5NDVjM2Q0YWZhY2U2ZmM5NGU1ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuaApAQCAtMzUsNiArMzUsOCBAQAogCiAj
aWYgUExBVEZPUk0oQ0cpCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2VsaWYgUExBVEZP
Uk0oQ0FJUk8pCit0eXBlZGVmIHN0cnVjdCBfY2Fpcm9fc3VyZmFjZSBjYWlyb19zdXJmYWNlX3Q7
IAogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEwNSw2ICsxMDcsMTMgQEAgcHVi
bGljOgogICAgIC8vIFRoaXMgY3JlYXRlcyBhIENHSW1hZ2VSZWYgdGhhdCBkaXJlY3RseSByZWZl
cmVuY2VzIHRoZSBzaGFyZWQgYml0bWFwIGRhdGEuCiAgICAgLy8gVGhpcyBpcyBvbmx5IHNhZmUg
dG8gdXNlIHdoZW4gd2Uga25vdyB0aGF0IHRoZSBjb250ZW50cyBvZiB0aGUgc2hhcmVhYmxlIGJp
dG1hcCB3b24ndCBjaGFuZ2UuCiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IG1ha2VDR0ltYWdl
KCk7CisjZWxpZiBQTEFURk9STShDQUlSTykKKyAgICAvLyBUaGlzIGNyZWF0ZXMgYSBjb3BpZWQg
Qml0bWFwSW1hZ2UgKG1vc3QgbGlrZWx5IGEgY29weS1vbi13cml0ZSkgb2YgdGhlIHNoYXJlYWJs
ZSBiaXRtYXAuCisgICAgY2Fpcm9fc3VyZmFjZV90KiBtYWtlSW1hZ2VDb3B5KCk7CisKKyAgICAv
LyBUaGlzIGNyZWF0ZXMgYSBCaXRtYXBJbWFnZSB0aGF0IGRpcmVjdGx5IHJlZmVyZW5jZXMgdGhl
IHNoYXJlZCBiaXRtYXAgZGF0YS4KKyAgICAvLyBUaGlzIGlzIG9ubHkgc2FmZSB0byB1c2Ugd2hl
biB3ZSBrbm93IHRoYXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBzaGFyZWFibGUgYml0bWFwIHdvbid0
IGNoYW5nZS4KKyAgICBjYWlyb19zdXJmYWNlX3QqIG1ha2VJbWFnZSgpOwogI2VuZGlmCiAKIHBy
aXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxl
Qml0bWFwQ2Fpcm8uY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2NhaXJvL1NoYXJlYWJsZUJp
dG1hcENhaXJvLmNwcAppbmRleCBhNGU4ZTU1NzM5NDI3NDI1ZmQwMGFlNzQ0MTdiYWMwODViZTBj
NjExLi5kNzZmMDE3MzYwY2JiODM1OTY3OTQ4MzQ3MTY2NzJhZTJhMThmOTZkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8uY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWlyby5jcHAK
QEAgLTEsNSArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBCcmVudCBGdWxnaGFtIDxi
ZnVsZ2hhbUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDYgKzMwLDcgQEAKIAogI2luY2x1
ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBs
ZW1lbnRlZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaD4KIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTM1LDEzICszOCw2NSBAQCBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IFNoYXJlYWJsZUJpdG1hcDo6
Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiAwOworICAgIHJlZigpOyAvLyBCYWxhbmNlZCBieSBkZXJlZiBpbiByZWxlYXNlQml0bWFw
Q29udGV4dERhdGEuCisKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBpbWFnZSA9IGFkb3B0
UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihkYXRhKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBSVJPX0ZPUk1B
VF9BUkdCMzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zaXplLndpZHRoKCksIG1fc2l6
ZS5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3NpemUud2lkdGgoKSAqIDQp
KTsKKyAgICBSZWZQdHI8Y2Fpcm9fdD4gYml0bWFwQ29udGV4dCA9IGFkb3B0UmVmKGNhaXJvX2Ny
ZWF0ZShpbWFnZS5nZXQoKSkpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250
ZXh0KGJpdG1hcENvbnRleHQuZ2V0KCkpKTsKIH0KIAotdm9pZCBTaGFyZWFibGVCaXRtYXA6OnBh
aW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYpCit2
b2lkIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBJbnRQb2ludCYgZHN0UG9pbnQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICBjb250ZXh0LnNhdmUoKTsKKworICAgIFJlZlB0cjxjYWlyb19z
dXJmYWNlX3Q+IGltYWdlID0gYWRvcHRSZWYobWFrZUltYWdlQ29weSgpKTsKKworICAgIC8vIElm
IHdlJ3JlIGRyYXdpbmcgYSBzdWIgcG9ydGlvbiBvZiB0aGUgaW1hZ2Ugb3Igc2NhbGluZyB0aGVu
IGNyZWF0ZQorICAgIC8vIGEgcGF0dGVybiB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgaW1hZ2UgYW5k
IGRyYXcgdGhlIHRyYW5zZm9ybWVkIHBhdHRlcm4uCisgICAgLy8gVGVzdCB1c2luZyBleGFtcGxl
IHNpdGUgYXQgaHR0cDovL3d3dy5tZXllcndlYi5jb20vZXJpYy9jc3MvZWRnZS9jb21wbGV4c3Bp
cmFsL2RlbW8uaHRtbAorICAgIGNhaXJvX3BhdHRlcm5fdCogcGF0dGVybiA9IGNhaXJvX3BhdHRl
cm5fY3JlYXRlX2Zvcl9zdXJmYWNlKGltYWdlLmdldCgpKTsKKworICAgIGNhaXJvX3BhdHRlcm5f
c2V0X2V4dGVuZChwYXR0ZXJuLCBDQUlST19FWFRFTkRfUEFEKTsKKworICAgIGZsb2F0IHNjYWxl
WCA9IG1fc2l6ZS53aWR0aCgpIC8gc3JjUmVjdC53aWR0aCgpOworICAgIGZsb2F0IHNjYWxlWSA9
IG1fc2l6ZS5oZWlnaHQoKSAvIHNyY1JlY3QuaGVpZ2h0KCk7CisgICAgY2Fpcm9fbWF0cml4X3Qg
bWF0cml4ID0geyBzY2FsZVgsIDAsIDAsIHNjYWxlWSwgc3JjUmVjdC54KCksIHNyY1JlY3QueSgp
IH07CisgICAgY2Fpcm9fcGF0dGVybl9zZXRfbWF0cml4KHBhdHRlcm4sICZtYXRyaXgpOworCisg
ICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOworICAgIGNh
aXJvX3RyYW5zbGF0ZShjciwgZHN0UG9pbnQueCgpLCBkc3RQb2ludC55KCkpOworICAgIGNhaXJv
X3NldF9zb3VyY2UoY3IsIHBhdHRlcm4pOworICAgIGNhaXJvX3BhdHRlcm5fZGVzdHJveShwYXR0
ZXJuKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY3IsIDAsIDAsIHNyY1JlY3Qud2lkdGgoKSwgc3Jj
UmVjdC5oZWlnaHQoKSk7CisgICAgY2Fpcm9fY2xpcChjcik7CisgICAgY2Fpcm9fcGFpbnRfd2l0
aF9hbHBoYShjciwgY29udGV4dC5nZXRBbHBoYSgpKTsKKworICAgIGNvbnRleHQucmVzdG9yZSgp
OwogfQotICAgICAgICAKKworY2Fpcm9fc3VyZmFjZV90KiBTaGFyZWFibGVCaXRtYXA6Om1ha2VJ
bWFnZUNvcHkoKQoreworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG9yaWdpbmFsU3VyZmFj
ZSA9IGFkb3B0UmVmKG1ha2VJbWFnZSgpKTsKKyAgICBjYWlyb19zdXJmYWNlX3QqIG5ld3N1cmZh
Y2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fc2l6ZS53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fc2l6ZS5oZWlnaHQoKSk7CisKKyAgICBSZWZQdHI8Y2Fp
cm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobmV3c3VyZmFjZSkpOworICAgIGNhaXJv
X3NldF9zb3VyY2Vfc3VyZmFjZShjci5nZXQoKSwgb3JpZ2luYWxTdXJmYWNlLmdldCgpLCAwLCAw
KTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX1NPVVJD
RSk7CisgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOworICAgIHJldHVybiBuZXdzdXJmYWNlOwor
fQorCitjYWlyb19zdXJmYWNlX3QqIFNoYXJlYWJsZUJpdG1hcDo6bWFrZUltYWdlKCkKK3sKKyAg
ICByZXR1cm4gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KGRhdGEoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENBSVJPX0ZPUk1BVF9BUkdCMzIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc2l6
ZS53aWR0aCgpICogNCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
VG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDMyZWIwOTQ5OWY1ZGRlYjgz
OWFjOTBhZWNiNjkxZGU4NTA1ZTQwNzguLjQyMTUwZjM1YzBhNzI0ZDc5NzcxZWRiZDJhMTRjOGY0
Mzg0ODdlMTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMS0wNC0xMSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFt
QGdtYWlsLmNvbT4gYW5kIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIElt
cGxlbWVudCBwaXhlbCBkdW1wIHN1cHBvcnQgZm9yIFdlYktpdFRlc3RSdW5uZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4MjQyCisKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9ndGsvR05VbWFrZWZpbGUuSW1hZ2VEaWZmLmFtOiBBZGRlZC4KKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5hbTogU2VwYXJhdGUgb3V0IHRoZSBJbWFnZURpZmYgYml0cyBv
ZiB0aGUgR05VbWFrZWZpbGUuCisgICAgICAgICogU2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0
czogVXBkYXRlIHRvIGFkZCBzdXBwb3J0IGZvciB0aGUgR1RLKyBwb3J0LgorICAgICAgICAqIFdl
YktpdFRlc3RSdW5uZXIvR05VbWFrZWZpbGUuYW06IEFkZGVkIENhaXJvIHNwZWNpZmljIGZpbGVz
IHRvIHRoZSBidWlsZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZv
Y2F0aW9uQ2Fpcm8uY3BwOgorICAgICAgICAoV1RSOjpjb21wdXRlTUQ1SGFzaFN0cmluZ0ZvckNh
aXJvQ29udGV4dCk6IEFkZGVkLgorICAgICAgICAoV1RSOjp3cml0ZUZ1bmN0aW9uKTogRGl0dG8u
CisgICAgICAgIChXVFI6OmR1bXBCaXRtYXApOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdElu
dm9jYXRpb246OmR1bXBQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKTogRGl0dG8uCisKIDIw
MTEtMDMtMzAgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvZ3RrL0dOVW1ha2VmaWxlLkltYWdlRGlmZi5hbSBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2d0ay9HTlVtYWtlZmlsZS5JbWFnZURpZmYuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTdjM2FlZmMwMWQ5
MzM4MGVhODdkYjdiZmQ4ZTZjNTBjZmIyYjhlZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2d0ay9HTlVtYWtlZmlsZS5JbWFnZURpZmYuYW0KQEAgLTAsMCArMSwyOCBA
QAorbm9pbnN0X1BST0dSQU1TICs9IFwKKwlQcm9ncmFtcy9JbWFnZURpZmYKKworUHJvZ3JhbXNf
SW1hZ2VEaWZmX0NQUEZMQUdTID0gJChnbG9iYWxfY3BwZmxhZ3MpCisKK1Byb2dyYW1zX0ltYWdl
RGlmZl9TT1VSQ0VTID0gXAorICAgVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0ltYWdlRGlmZi5j
cHAKKworUHJvZ3JhbXNfSW1hZ2VEaWZmX0NYWEZMQUdTID0gXAorICAgJChnbG9iYWxfY3h4Zmxh
Z3MpIFwKKyAgICQoZ2xvYmFsX2NwcGZsYWdzKSBcCisgICAkKFByb2dyYW1zX0ltYWdlRGlmZl9D
RkxBR1MpCisKK1Byb2dyYW1zX0ltYWdlRGlmZl9DRkxBR1MgPSBcCisgICAtZm5vLXN0cmljdC1h
bGlhc2luZyBcCisgICAkKGdsb2JhbF9jZmxhZ3MpIFwKKyAgICQoR0xPQkFMREVQU19DRkxBR1Mp
IFwKKyAgICQoR1RLX0NGTEFHUykKKworUHJvZ3JhbXNfSW1hZ2VEaWZmX0xEQUREID0gXAorICAg
JChHVEtfTElCUykKKworUHJvZ3JhbXNfSW1hZ2VEaWZmX0xERkxBR1MgPSBcCisgICAtbm8tZmFz
dC1pbnN0YWxsIFwKKyAgIC1uby1pbnN0YWxsCisKK0NMRUFORklMRVMgKz0gXAorCVByb2dyYW1z
L0ltYWdlRGlmZgpkaWZmIC0tZ2l0IGEvVG9vbHMvR05VbWFrZWZpbGUuYW0gYi9Ub29scy9HTlVt
YWtlZmlsZS5hbQppbmRleCAwNzU1NWM0YjcyODMwZGQ5MzUzM2IxZGYyNDI1MTJiNjI4YmU1YTE2
Li5mNGZhMTdjNDZkMDhkNzZlNGQ1N2NkYzBlNTRkNmU0ZWYyODBmMDMxIDEwMDY0NAotLS0gYS9U
b29scy9HTlVtYWtlZmlsZS5hbQorKysgYi9Ub29scy9HTlVtYWtlZmlsZS5hbQpAQCAtMSw3ICsx
LDYgQEAKIG5vaW5zdF9QUk9HUkFNUyArPSBcCiAJUHJvZ3JhbXMvRHVtcFJlbmRlclRyZWUgXAot
CVByb2dyYW1zL0d0a0xhdW5jaGVyIFwKLQlQcm9ncmFtcy9JbWFnZURpZmYKKwlQcm9ncmFtcy9H
dGtMYXVuY2hlcgogCiAjIEd0a0xhdW5jaGVyCiBQcm9ncmFtc19HdGtMYXVuY2hlcl9DUFBGTEFH
UyA9IFwKQEAgLTExNywzNSArMTE2LDEwIEBAIFByb2dyYW1zX0R1bXBSZW5kZXJUcmVlX0xERkxB
R1MgPSBcCiAJLW5vLWZhc3QtaW5zdGFsbCBcCiAJLW5vLWluc3RhbGwKIAotIyBJbWFnZURpZmYK
LVByb2dyYW1zX0ltYWdlRGlmZl9DUFBGTEFHUyA9ICQoZ2xvYmFsX2NwcGZsYWdzKQotCi1Qcm9n
cmFtc19JbWFnZURpZmZfU09VUkNFUyA9IFwKLSAgIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9J
bWFnZURpZmYuY3BwCi0KLVByb2dyYW1zX0ltYWdlRGlmZl9DWFhGTEFHUyA9IFwKLSAgICQoZ2xv
YmFsX2N4eGZsYWdzKSBcCi0gICAkKGdsb2JhbF9jcHBmbGFncykgXAotICAgJChQcm9ncmFtc19J
bWFnZURpZmZfQ0ZMQUdTKQotCi1Qcm9ncmFtc19JbWFnZURpZmZfQ0ZMQUdTID0gXAotICAgLWZu
by1zdHJpY3QtYWxpYXNpbmcgXAotICAgJChnbG9iYWxfY2ZsYWdzKSBcCi0gICAkKEdMT0JBTERF
UFNfQ0ZMQUdTKSBcCi0gICAkKEdUS19DRkxBR1MpCi0KLVByb2dyYW1zX0ltYWdlRGlmZl9MREFE
RCA9IFwKLSAgICQoR1RLX0xJQlMpCi0KLVByb2dyYW1zX0ltYWdlRGlmZl9MREZMQUdTID0gXAot
ICAgLW5vLWZhc3QtaW5zdGFsbCBcCi0gICAtbm8taW5zdGFsbAotCiAjIGNsZWFuIHRhcmdldAog
Q0xFQU5GSUxFUyArPSBcCiAJUHJvZ3JhbXMvRHVtcFJlbmRlclRyZWUgXAotCVByb2dyYW1zL0d0
a0xhdW5jaGVyIFwKLQlQcm9ncmFtcy9JbWFnZURpZmYKKwlQcm9ncmFtcy9HdGtMYXVuY2hlcgog
CiBpZiBUQVJHRVRfWDExCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvb2xkLXJ1bi13ZWJr
aXQtdGVzdHMgYi9Ub29scy9TY3JpcHRzL29sZC1ydW4td2Via2l0LXRlc3RzCmluZGV4IDM3NWY5
YTMxOGYwMDk2ZTA5N2Y4N2M5NTRiMTU0M2MyOWQyNGQ1MTcuLmM2MGU2YWEwZTBiYzIwZmRhODE5
YmY0ZDRmMmIzZmIyMmVkYWI1NjcgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvb2xkLXJ1bi13
ZWJraXQtdGVzdHMKKysrIGIvVG9vbHMvU2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0cwpAQCAt
MjE3Miw2ICsyMTcyLDkgQEAgc3ViIGJ1aWxkUGxhdGZvcm1SZXN1bHRIaWVyYXJjaHkoKQogICAg
IH0gZWxzaWYgKCRwbGF0Zm9ybSA9fiAvXnF0LS8pIHsKICAgICAgICAgcHVzaCBAcGxhdGZvcm1z
LCAkcGxhdGZvcm07CiAgICAgICAgIHB1c2ggQHBsYXRmb3JtcywgInF0IjsKKyAgICB9IGVsc2lm
ICgkcGxhdGZvcm0gPX4gL15ndGstLykgeworICAgICAgICBwdXNoIEBwbGF0Zm9ybXMsICRwbGF0
Zm9ybTsKKyAgICAgICAgcHVzaCBAcGxhdGZvcm1zLCAiZ3RrIjsKICAgICB9IGVsc2UgewogICAg
ICAgICBAcGxhdGZvcm1zID0gJHBsYXRmb3JtOwogICAgIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvR05VbWFrZWZpbGUuYW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dO
VW1ha2VmaWxlLmFtCmluZGV4IDYyYzc4NGVlYzdkNmY1NDExNDUzMzBkYTgyZGUxZjFlMzlhODVj
ZjYuLmJjNjcwZDc0M2I4ODBiYjBlMmYxZjZlMjhmOTgzNjk1YjM4OTYxMjAgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvR05VbWFrZWZpbGUuYW0KKysrIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9HTlVtYWtlZmlsZS5hbQpAQCAtMTIsNyArMTIsNyBAQCBQcm9ncmFtc19XZWJL
aXRUZXN0UnVubmVyX1NPVVJDRVMgPSBcCiAJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvbWFp
bi5jcHAgXAogCVRvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1BsYXRmb3JtV2ViVmlld0d0ay5j
cHAgXAogCVRvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RDb250cm9sbGVyR3RrLmNwcCBc
Ci0JVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvVGVzdEludm9jYXRpb25HdGsuY3BwIFwKKwlU
b29scy9XZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwIFwKIAlU
b29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oIFwKIAlUb29scy9XZWJLaXRU
ZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oIFwKIAlUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RDb250cm9sbGVyLmNwcCBcCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2Nh
aXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jYWly
by9UZXN0SW52b2NhdGlvbkNhaXJvLmNwcAppbmRleCA4OGFhY2JkNTE3NGFiYzk0OGU4MWIzZTJi
ZmJjZGU1MTZjOTZlMmQ3Li5lY2FmMmQ0ZmJhNjUwMzRmNTk3NDJmYWNkMjQ0NmYxZjAxNjllMGEy
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9u
Q2Fpcm8uY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2Fpcm8vVGVzdEludm9jYXRp
b25DYWlyby5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBCcmVu
dCBGdWxnaGFtIDxiZnVsZ2hhbUB3ZWJraXQub3JnPi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
ICAgICAgICAgKEMpIDIwMDksMjAxMSBCcmVudCBGdWxnaGFtIDxiZnVsZ2hhbUB3ZWJraXQub3Jn
PgorICogICAgICAgICAgIChDKSAyMDEwLDIwMTEgSWdhbGlhIFMuTAogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNywxMiArMjgsODUgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJUZXN0SW52b2NhdGlvbi5oIgogCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0ltYWdl
Q2Fpcm8uaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9NRDUu
aD4KKwogbmFtZXNwYWNlIFdUUiB7CiAKLXZvaWQgVGVzdEludm9jYXRpb246OmR1bXBQaXhlbHNB
bmRDb21wYXJlV2l0aEV4cGVjdGVkKFdLSW1hZ2VSZWYgaW1hZ2UpCit2b2lkIGNvbXB1dGVNRDVI
YXNoU3RyaW5nRm9yQ2Fpcm9Db250ZXh0KGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSwgY2hhciBo
YXNoU3RyaW5nWzMzXSkKK3sKKyAgICBBU1NFUlQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZm9y
bWF0KHN1cmZhY2UpID09IENBSVJPX0ZPUk1BVF9BUkdCMzIpOyAvLyBJbWFnZURpZmYgYXNzdW1l
cyAzMiBiaXQgUkdCQSwgd2UgbXVzdCBhcyB3ZWxsLgorCisgICAgc2l6ZV90IHBpeGVsc0hpZ2gg
PSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZSk7CisgICAgc2l6ZV90IHBp
eGVsc1dpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChzdXJmYWNlKTsKKyAgICBz
aXplX3QgYnl0ZXNQZXJSb3cgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFj
ZSk7CisKKyAgICBNRDUgbWQ1Q29udGV4dDsKKyAgICB1bnNpZ25lZCBjaGFyKiBiaXRtYXBEYXRh
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Rh
dGEoc3VyZmFjZSkpOworICAgIGZvciAodW5zaWduZWQgcm93ID0gMDsgcm93IDwgcGl4ZWxzSGln
aDsgcm93KyspIHsKKyAgICAgICAgbWQ1Q29udGV4dC5hZGRCeXRlcyhiaXRtYXBEYXRhLCA0ICog
cGl4ZWxzV2lkZSk7CisgICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7CisgICAgfQor
ICAgIFZlY3Rvcjx1aW50OF90LCAxNj4gaGFzaDsKKyAgICBtZDVDb250ZXh0LmNoZWNrc3VtKGhh
c2gpOworCisgICAgc25wcmludGYoaGFzaFN0cmluZywgMzMsICIlMDJ4JTAyeCUwMnglMDJ4JTAy
eCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4IiwKKyAgICAgICAg
aGFzaFswXSwgaGFzaFsxXSwgaGFzaFsyXSwgaGFzaFszXSwgaGFzaFs0XSwgaGFzaFs1XSwgaGFz
aFs2XSwgaGFzaFs3XSwKKyAgICAgICAgaGFzaFs4XSwgaGFzaFs5XSwgaGFzaFsxMF0sIGhhc2hb
MTFdLCBoYXNoWzEyXSwgaGFzaFsxM10sIGhhc2hbMTRdLCBoYXNoWzE1XSk7Cit9CisKK3N0YXRp
YyBjYWlyb19zdGF0dXNfdCB3cml0ZUZ1bmN0aW9uKHZvaWQqIGNsb3N1cmUsIGNvbnN0IHVuc2ln
bmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGludCBsZW5ndGgpCit7CisgICAgVmVjdG9yPHVuc2ln
bmVkIGNoYXI+KiBpbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yPHVuc2lnbmVkIGNoYXI+Kj4o
Y2xvc3VyZSk7CisgICAgaW4tPmFwcGVuZChkYXRhLCBsZW5ndGgpOworICAgIHJldHVybiBDQUlS
T19TVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIHZvaWQgZHVtcEJpdG1hcChjYWlyb19zdXJm
YWNlX3QqIHN1cmZhY2UpCiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgc3R1YiBzaG91bGQgYmUgcmVw
bGFjZWQgd2l0aCBhIENhaXJvIGltcGxlbWVudGF0aW9uCi0gICAgLy8gb2YgdGhlIHBpeGVsIGR1
bXBpbmcgYW5kIGNvbXBhcmlzb24gcm91dGluZXMuCisgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+
IHBpeGVsRGF0YTsKKyAgICBjYWlyb19zdXJmYWNlX3dyaXRlX3RvX3BuZ19zdHJlYW0oc3VyZmFj
ZSwgd3JpdGVGdW5jdGlvbiwgJnBpeGVsRGF0YSk7CisgICAgY29uc3Qgc2l6ZV90IGRhdGFMZW5n
dGggPSBwaXhlbERhdGEuc2l6ZSgpOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEgPSBw
aXhlbERhdGEuZGF0YSgpOworCisgICAgcHJpbnRmKCJDb250ZW50LVR5cGU6ICVzXG4iLCAiaW1h
Z2UvcG5nIik7CisgICAgcHJpbnRmKCJDb250ZW50LUxlbmd0aDogJWx1XG4iLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBsb25nPihkYXRhTGVuZ3RoKSk7CisKKyAgICBjb25zdCBzaXplX3QgYnl0ZXNU
b1dyaXRlSW5PbmVDaHVuayA9IDEgPDwgMTU7CisgICAgc2l6ZV90IGRhdGFSZW1haW5pbmdUb1dy
aXRlID0gZGF0YUxlbmd0aDsKKyAgICB3aGlsZSAoZGF0YVJlbWFpbmluZ1RvV3JpdGUpIHsKKyAg
ICAgICAgc2l6ZV90IGJ5dGVzVG9Xcml0ZUluVGhpc0NodW5rID0gc3RkOjptaW4oZGF0YVJlbWFp
bmluZ1RvV3JpdGUsIGJ5dGVzVG9Xcml0ZUluT25lQ2h1bmspOworICAgICAgICBzaXplX3QgYnl0
ZXNXcml0dGVuID0gZndyaXRlKGRhdGEsIDEsIGJ5dGVzVG9Xcml0ZUluVGhpc0NodW5rLCBzdGRv
dXQpOworICAgICAgICBpZiAoYnl0ZXNXcml0dGVuICE9IGJ5dGVzVG9Xcml0ZUluVGhpc0NodW5r
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRhdGFSZW1haW5pbmdUb1dyaXRlIC09IGJ5
dGVzV3JpdHRlbjsKKyAgICAgICAgZGF0YSArPSBieXRlc1dyaXR0ZW47CisgICAgfQorfQorCit2
b2lkIFRlc3RJbnZvY2F0aW9uOjpkdW1wUGl4ZWxzQW5kQ29tcGFyZVdpdGhFeHBlY3RlZChXS0lt
YWdlUmVmIHdrSW1hZ2UpCit7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gIFdLSW1h
Z2VDcmVhdGVDYWlyb1N1cmZhY2Uod2tJbWFnZSk7CisKKyAgICBjaGFyIGFjdHVhbEhhc2hbMzNd
OworICAgIGNvbXB1dGVNRDVIYXNoU3RyaW5nRm9yQ2Fpcm9Db250ZXh0KHN1cmZhY2UsIGFjdHVh
bEhhc2gpOworICAgIGZwcmludGYoc3Rkb3V0LCAiXG5BY3R1YWxIYXNoOiAlc1xuIiwgYWN0dWFs
SGFzaCk7CisKKyAgICAvLyBDaGVjayB0aGUgY29tcHV0ZWQgaGFzaCBhZ2FpbnN0IHRoZSBleHBl
Y3RlZCBvbmUgYW5kIGR1bXAgaW1hZ2Ugb24gbWlzbWF0Y2gKKyAgICBib29sIGhhc2hlc01hdGNo
ID0gZmFsc2U7CisgICAgaWYgKG1fZXhwZWN0ZWRQaXhlbEhhc2gubGVuZ3RoKCkgPiAwKSB7Cisg
ICAgICAgIEFTU0VSVChtX2V4cGVjdGVkUGl4ZWxIYXNoLmxlbmd0aCgpID09IDMyKTsKKworICAg
ICAgICBmcHJpbnRmKHN0ZG91dCwgIlxuRXhwZWN0ZWRIYXNoOiAlc1xuIiwgbV9leHBlY3RlZFBp
eGVsSGFzaC5jX3N0cigpKTsKKworICAgICAgICAvLyBGSVhNRTogRG8gY2FzZSBpbnNlbnNpdGl2
ZSBjb21wYXJlLgorICAgICAgICBpZiAobV9leHBlY3RlZFBpeGVsSGFzaCA9PSBhY3R1YWxIYXNo
KQorICAgICAgICAgICAgaGFzaGVzTWF0Y2ggPSB0cnVlOworICAgIH0KKworICAgIGlmICghaGFz
aGVzTWF0Y2gpCisgICAgICAgIGR1bXBCaXRtYXAoc3VyZmFjZSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdUUgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91520</attachid>
            <date>2011-04-28 11:16:48 -0700</date>
            <delta_ts>2011-06-14 13:23:56 -0700</delta_ts>
            <desc>Proposed update to ShareableBitmap implementation</desc>
            <filename>shareable.patch</filename>
            <type>text/plain</type>
            <size>7142</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmgJKHJldmlzaW9uIDg1
MDU2KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw2ICszNSw4IEBACiAKICNpZiBVU0UoQ0cpCiAjaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgorI2VsaWYgVVNFKENBSVJPKQordHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3N1cmZh
Y2UgY2Fpcm9fc3VyZmFjZV90OyAKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0x
MDUsNiArMTA3LDE0IEBAIHB1YmxpYzoKICAgICAvLyBUaGlzIGNyZWF0ZXMgYSBDR0ltYWdlUmVm
IHRoYXQgZGlyZWN0bHkgcmVmZXJlbmNlcyB0aGUgc2hhcmVkIGJpdG1hcCBkYXRhLgogICAgIC8v
IFRoaXMgaXMgb25seSBzYWZlIHRvIHVzZSB3aGVuIHdlIGtub3cgdGhhdCB0aGUgY29udGVudHMg
b2YgdGhlIHNoYXJlYWJsZSBiaXRtYXAgd29uJ3QgY2hhbmdlLgogICAgIFJldGFpblB0cjxDR0lt
YWdlUmVmPiBtYWtlQ0dJbWFnZSgpOworI2VsaWYgVVNFKENBSVJPKQorICAgIC8vIFRoaXMgY3Jl
YXRlcyBhIGNvcGllZCBCaXRtYXBJbWFnZSAobW9zdCBsaWtlbHkgYSBjb3B5LW9uLXdyaXRlKSBv
ZiB0aGUgc2hhcmVhYmxlIGJpdG1hcC4KKyAgICBjYWlyb19zdXJmYWNlX3QqIG1ha2VJbWFnZUNv
cHkoKTsKKworICAgIC8vIFRoaXMgY3JlYXRlcyBhIEJpdG1hcEltYWdlIHRoYXQgZGlyZWN0bHkg
cmVmZXJlbmNlcyB0aGUgc2hhcmVkIGJpdG1hcCBkYXRhLgorICAgIC8vIFRoaXMgaXMgb25seSBz
YWZlIHRvIHVzZSB3aGVuIHdlIGtub3cgdGhhdCB0aGUgY29udGVudHMgb2YgdGhlIHNoYXJlYWJs
ZSBiaXRtYXAgd29uJ3QgY2hhbmdlLgorICAgIGNhaXJvX3N1cmZhY2VfdCogbWFrZUltYWdlKCk7
CisgICAgdm9pZCBkdW1wVG9GaWxlKGNvbnN0IGNoYXIqKTsKICNlbmRpZgogCiBwcml2YXRlOgpA
QCAtMTE2LDYgKzEyNiw4IEBAIHByaXZhdGU6CiAjaWYgVVNFKENHKQogICAgIHN0YXRpYyB2b2lk
IHJlbGVhc2VCaXRtYXBDb250ZXh0RGF0YSh2b2lkKiB0eXBlbGVzc0JpdG1hcCwgdm9pZCogdHlw
ZWxlc3NEYXRhKTsKICAgICBzdGF0aWMgdm9pZCByZWxlYXNlRGF0YVByb3ZpZGVyRGF0YSh2b2lk
KiB0eXBlbGVzc0JpdG1hcCwgY29uc3Qgdm9pZCogdHlwZWxlc3NEYXRhLCBzaXplX3QpOworI2Vs
aWYgVVNFKENBSVJPKQorICAgIHN0YXRpYyB2b2lkIHJlbGVhc2VCaXRtYXBDb250ZXh0RGF0YSh2
b2lkKiB0eXBlbGVzc0JpdG1hcCk7CiAjZW5kaWYKIAogICAgIHZvaWQqIGRhdGEoKSBjb25zdDsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWlyby5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL2NhaXJvL1NoYXJlYWJsZUJp
dG1hcENhaXJvLmNwcAkocmV2aXNpb24gODUwNTYpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Y2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQnJlbnQgRnVsZ2hhbSA8YmZ1bGdoYW1Ad2Vi
a2l0Lm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMjEgKzI4LDE0
NiBAQAogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogCiAjaW5jbHVkZSA8V2ViQ29yZS9H
cmFwaGljc0NvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dENhaXJv
Lmg+IAogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KIAorI2lmIE9TKFdJTkRP
V1MpCisjaW5jbHVkZSA8V2ViQ29yZS9CaXRtYXBJbmZvLmg+CisKKyNpbmNsdWRlIDxjYWlyby13
aW4zMi5oPgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAorc3RhdGljIGNhaXJvX3VzZXJfZGF0YV9rZXlfdCBzX2ltYWdlRGF0YUtleTsK
Kworc3RhdGljIHZvaWQgZHJhd1Rlc3RJbWFnZShjYWlyb190KiBjciwgZG91YmxlIHhwb3MsIGRv
dWJsZSB5cG9zKQoreworICAgIGRvdWJsZSByYWRpdXMgPSAxMDAuMDsKKyAgICBkb3VibGUgYW5n
bGUxID0gNDUuMCAqICgzLjE0MTcvMTgwLjApOworICAgIGRvdWJsZSBhbmdsZTIgPSAxODAuMCAq
ICgzLjE0MTcvMTgwLjApOworCisgICAgY2Fpcm9fc2F2ZShjcik7CisgICAgY2Fpcm9fc2V0X2xp
bmVfd2lkdGgoY3IsIDEwLjApOworICAgIGNhaXJvX2FyYyhjciwgeHBvcywgeXBvcywgcmFkaXVz
LCBhbmdsZTEsIGFuZ2xlMik7CisgICAgY2Fpcm9fc3Ryb2tlKGNyKTsKKworICAgIGNhaXJvX3Nl
dF9zb3VyY2VfcmdiYShjciwgMSwgMC4yLCAwLjIsIDAuNik7CisgICAgY2Fpcm9fc2V0X2xpbmVf
d2lkdGgoY3IsIDYuMCk7CisKKyAgICBjYWlyb19hcmMoY3IsIHhwb3MsIHlwb3MsIDEwLjAsIDAs
IDIqMy4xNDE3KTsKKyAgICBjYWlyb19maWxsKGNyKTsKKworICAgIGNhaXJvX2FyYyhjciwgeHBv
cywgeXBvcywgcmFkaXVzLCBhbmdsZTEsIGFuZ2xlMSk7CisgICAgY2Fpcm9fbGluZV90byhjciwg
eHBvcywgeXBvcyk7CisgICAgY2Fpcm9fYXJjKGNyLCB4cG9zLCB5cG9zLCByYWRpdXMsIGFuZ2xl
MiwgYW5nbGUyKTsKKyAgICBjYWlyb19saW5lX3RvKGNyLCB4cG9zLCB5cG9zKTsKKyAgICBjYWly
b19zdHJva2UoY3IpOworICAgIGNhaXJvX3Jlc3RvcmUoY3IpOworfQorCiBQYXNzT3duUHRyPEdy
YXBoaWNzQ29udGV4dD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0NvbnRleHQoKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7CisgICAgcmVmKCk7IC8vIEJh
bGFuY2VkIGJ5IGRlcmVmIGluIHJlbGVhc2VCaXRtYXBDb250ZXh0RGF0YS4KKworICAgIFJlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlIChjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3Jf
ZGF0YSgodW5zaWduZWQgY2hhciopZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENBSVJPX0ZPUk1BVF9BUkdCMzIsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUu
aGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zaXpl
LndpZHRoKCkgKiA0KSk7CisKKyAgICBjYWlyb19zdXJmYWNlX3NldF91c2VyX2RhdGEoaW1hZ2Uu
Z2V0KCksICZzX2ltYWdlRGF0YUtleSwgdGhpcywgU2hhcmVhYmxlQml0bWFwOjpyZWxlYXNlQml0
bWFwQ29udGV4dERhdGEpOworCisgICAgUmVmUHRyPGNhaXJvX3Q+IGJpdG1hcENvbnRleHQgPSBj
YWlyb19jcmVhdGUoaW1hZ2UuZ2V0KCkpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgR3JhcGhp
Y3NDb250ZXh0KGJpdG1hcENvbnRleHQuZ2V0KCkpKTsKK30KKworc3RhdGljIHZvaWQgcGFpbnRJ
bWFnZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UsIGNv
bnN0IEludFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkKK3sKKyAg
ICBjb250ZXh0LnNhdmUoKTsKKworICAgIC8vIElmIHdlJ3JlIGRyYXdpbmcgYSBzdWIgcG9ydGlv
biBvZiB0aGUgaW1hZ2Ugb3Igc2NhbGluZyB0aGVuIGNyZWF0ZQorICAgIC8vIGEgcGF0dGVybiB0
cmFuc2Zvcm1hdGlvbiBvbiB0aGUgaW1hZ2UgYW5kIGRyYXcgdGhlIHRyYW5zZm9ybWVkIHBhdHRl
cm4uCisgICAgLy8gVGVzdCB1c2luZyBleGFtcGxlIHNpdGUgYXQgaHR0cDovL3d3dy5tZXllcndl
Yi5jb20vZXJpYy9jc3MvZWRnZS9jb21wbGV4c3BpcmFsL2RlbW8uaHRtbAorICAgIGNhaXJvX3Bh
dHRlcm5fdCogcGF0dGVybiA9IGNhaXJvX3BhdHRlcm5fY3JlYXRlX2Zvcl9zdXJmYWNlKGltYWdl
KTsKKworICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChwYXR0ZXJuLCBDQUlST19FWFRFTkRf
UEFEKTsKKworICAgIGludCB3aWR0aCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKGlt
YWdlKTsKKyAgICBpbnQgaGVpZ2h0ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KGlt
YWdlKTsKKworICAgIGZsb2F0IHNjYWxlWCA9IHdpZHRoIC8gc3JjUmVjdC53aWR0aCgpOworICAg
IGZsb2F0IHNjYWxlWSA9IGhlaWdodCAvIHNyY1JlY3QuaGVpZ2h0KCk7CisgICAgY2Fpcm9fbWF0
cml4X3QgbWF0cml4ID0geyBzY2FsZVgsIDAsIDAsIHNjYWxlWSwgc3JjUmVjdC54KCksIHNyY1Jl
Y3QueSgpIH07CisgICAgY2Fpcm9fcGF0dGVybl9zZXRfbWF0cml4KHBhdHRlcm4sICZtYXRyaXgp
OworCisgICAgLy8gRHJhdyB0aGUgaW1hZ2UuCisgICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LnBs
YXRmb3JtQ29udGV4dCgpLT5jcigpOworICAgIGNhaXJvX3RyYW5zbGF0ZShjciwgZGVzdGluYXRp
b24ueCgpLCBkZXN0aW5hdGlvbi55KCkpOworICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIHBhdHRl
cm4pOworICAgIGNhaXJvX3BhdHRlcm5fZGVzdHJveShwYXR0ZXJuKTsKKyAgICBjYWlyb19yZWN0
YW5nbGUoY3IsIDAsIDAsIHNyY1JlY3Qud2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQoKSk7CisgICAg
Y2Fpcm9fY2xpcChjcik7CisgICAgY2Fpcm9fcGFpbnRfd2l0aF9hbHBoYShjciwgY29udGV4dC5n
ZXRBbHBoYSgpKTsKKworICAgIGNvbnRleHQucmVzdG9yZSgpOworfQorCit2b2lkIFNoYXJlYWJs
ZUJpdG1hcDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYg
ZHN0UG9pbnQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpCit7CisgICAgcGFpbnRJbWFnZShjb250
ZXh0LCBtYWtlSW1hZ2VDb3B5KCksIGRzdFBvaW50LCBzcmNSZWN0KTsKK30KKworLy8gQ2Fpcm8g
ZG9lc24ndCBwcm92aWRlIGEgd2F5IHRvIGNvcHkgYSBjYWlyb19zdXJmYWNlX3QuCisvLyBTZWUg
aHR0cDovL2xpc3RzLmNhaXJvZ3JhcGhpY3Mub3JnL2FyY2hpdmVzL2NhaXJvLzIwMDctSnVuZS8w
MTA4NzcuaHRtbAorLy8gT25jZSBjYWlybyBwcm92aWRlcyB0aGUgd2F5LCB1c2UgdGhlIGZ1bmN0
aW9uIGluc3RlYWQgb2YgdGhpcy4KK3N0YXRpYyBpbmxpbmUgY2Fpcm9fc3VyZmFjZV90KiBjb3B5
U3VyZmFjZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCit7CisgICAgY2Fpcm9fZm9ybWF0X3Qg
Zm9ybWF0ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZm9ybWF0KHN1cmZhY2UpOworICAgIGlu
dCB3aWR0aCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpOworICAgIGlu
dCBoZWlnaHQgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZSk7CisKKyAg
ICBjYWlyb19zdXJmYWNlX3QqIG5ld3N1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0
ZShmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworCisgICAgY2Fpcm9fdCogY3IgPSBjYWlyb19jcmVh
dGUobmV3c3VyZmFjZSk7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLCBzdXJmYWNl
LCAwLCAwKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX1NPVVJD
RSk7CisgICAgY2Fpcm9fcGFpbnQoY3IpOworICAgIGNhaXJvX2Rlc3Ryb3koY3IpOworCisgICAg
cmV0dXJuIG5ld3N1cmZhY2U7Cit9CisKK2NhaXJvX3N1cmZhY2VfdCogU2hhcmVhYmxlQml0bWFw
OjptYWtlSW1hZ2VDb3B5KCkKK3sKKyAgICByZXR1cm4gY29weVN1cmZhY2UobWFrZUltYWdlKCkp
OwogfQogCi12b2lkIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JikKK2NhaXJvX3N1cmZhY2VfdCogU2hhcmVhYmxl
Qml0bWFwOjptYWtlSW1hZ2UoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmVmKCk7
IC8vIEJhbGFuY2VkIGJ5IGRlcmVmIGluIHJlbGVhc2VCaXRtYXBDb250ZXh0RGF0YS4KKyAgICBj
YWlyb19zdXJmYWNlX3QqIGltYWdlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2Rh
dGEoKHVuc2lnbmVkIGNoYXIqKWRhdGEoKSwKKyAgICAgICAgQ0FJUk9fRk9STUFUX0FSR0IzMiwg
bV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgbV9zaXplLndpZHRoKCkgKiA0KTsKKyAg
ICBjYWlyb19zdXJmYWNlX3NldF91c2VyX2RhdGEoaW1hZ2UsICZzX2ltYWdlRGF0YUtleSwgdGhp
cywgU2hhcmVhYmxlQml0bWFwOjpyZWxlYXNlQml0bWFwQ29udGV4dERhdGEpOworCisgICAgcmV0
dXJuIGltYWdlOworfQorCit2b2lkIFNoYXJlYWJsZUJpdG1hcDo6cmVsZWFzZUJpdG1hcENvbnRl
eHREYXRhKHZvaWQqIHR5cGVsZXNzQml0bWFwKQoreworICAgIFNoYXJlYWJsZUJpdG1hcCogYml0
bWFwID0gc3RhdGljX2Nhc3Q8U2hhcmVhYmxlQml0bWFwKj4odHlwZWxlc3NCaXRtYXApOworICAg
IGJpdG1hcC0+ZGVyZWYoKTsgLy8gQmFsYW5jZWQgYnkgcmVmIGluIGNyZWF0ZUdyYXBoaWNzQ29u
dGV4dC4KIH0KLSAgICAgICAgCisKK3ZvaWQgU2hhcmVhYmxlQml0bWFwOjpkdW1wVG9GaWxlKGNv
bnN0IGNoYXIqIGZpbGUpCit7CisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2UgPSBt
YWtlSW1hZ2UoKTsKKyAgICBpZiAoMCkKKyAgICB7CisgICAgICAgIFJlZlB0cjxjYWlyb190PiBi
aXRtYXBDb250ZXh0ID0gY2Fpcm9fY3JlYXRlKGltYWdlLmdldCgpKTsKKyAgICAgICAgZHJhd1Rl
c3RJbWFnZShiaXRtYXBDb250ZXh0LmdldCgpLCAxMjguMCwgMTI4LjApOworICAgIH0KKyAgICBj
YWlyb19zdXJmYWNlX3dyaXRlX3RvX3BuZyhpbWFnZS5nZXQoKSwgZmlsZSk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97162</attachid>
            <date>2011-06-14 13:24:02 -0700</date>
            <delta_ts>2011-06-22 06:05:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58242-20110614132403.patch</filename>
            <type>text/plain</type>
            <size>17107</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODg4MDMKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5n
ZUxvZwppbmRleCA5MDhjNzY1NGM4MmZhYWExZDVmMTE2ZTRiZmJiNTY4ZDVmMGY1MGMyLi42M2Fj
NTcxOGZkMWVkMDI2YzJmYTA1OWIzMTk3MDI5ZjI1OWI4NGUyIDEwMDY0NAotLS0gYS9DaGFuZ2VM
b2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDQtMTEgIE1hcnRpbiBS
b2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIEltcGxlbWVudCBwaXhlbCBkdW1wIHN1cHBv
cnQgZm9yIFdlYktpdFRlc3RSdW5uZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTU4MjQyCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogUmVmZXJl
bmNlIHRoZSBuZXcgSW1hZ2VEaWZmIEdOVW1ha2VmaWxlLgorCiAyMDExLTA2LTEzICBKb29uZSBI
dXIgIDxqb29uZS5odXJAY29sbGFib3JhLmNvLnVrPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1h
cnRpbiBSb2JpbnNvbi4KZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05VbWFrZWZpbGUu
YW0KaW5kZXggOWM4OGMxOWM3YmU5ZTk4ZGQzOGZlNmE1MGJiN2JhYjk3NDgyODFmNC4uZmIxMDc5
MGIxZWExNDJiNjk0ZjhjM2ZhOGVhMzMwZTdmNWE0YTRkZCAxMDA2NDQKLS0tIGEvR05VbWFrZWZp
bGUuYW0KKysrIGIvR05VbWFrZWZpbGUuYW0KQEAgLTE5Nyw2ICsxOTcsOCBAQCBpbmNsdWRlIFNv
dXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCiBpbmNsdWRlIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2dvYmplY3QvR05VbWFrZWZpbGUuYW0KIGluY2x1ZGUgVG9vbHMvR05VbWFrZWZpbGUu
YW0KIGluY2x1ZGUgU291cmNlL1dlYktpdC9ndGsvcG8vR05VbWFrZWZpbGUuYW0KK2luY2x1ZGUg
VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0dOVW1ha2VmaWxlLkltYWdlRGlmZi5hbQorCiBpZiBF
TkFCTEVfV0VCS0lUMgogaW5jbHVkZSBTb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQogaW5j
bHVkZSBUb29scy9NaW5pQnJvd3Nlci9ndGsvR05VbWFrZWZpbGUuYW0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA4
Y2ZlZDVlMTMyZDM5ZjkzYTEwZGNhZWFhYWJkMDIwNTk3Nzg3ZjM3Li41ZDQyNjU0MGNkZjYwNmM4
MDIwNjIxMDZkOTdlZjYxYzg5MGI3NzdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIw
MTEtMDQtMTEgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIEltcGxlbWVu
dCBwaXhlbCBkdW1wIHN1cHBvcnQgZm9yIFdlYktpdFRlc3RSdW5uZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4MjQyCisKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbTogQWRkZWQgbmV3IENhaXJvIHNwZWNpZmljIGltYWdlIGhhbmRsaW5nIGZpbGVz
IHRvIHRoZSBidWlsZC4KKyAgICAgICAgKiBTaGFyZWQvQVBJL2MvY2Fpcm8vV0tJbWFnZUNhaXJv
LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVkL2NhaXJvL1NoYXJlYWJsZUJp
dG1hcENhaXJvLmNwcC4KKyAgICAgICAgKFdLSW1hZ2VDcmVhdGVDYWlyb1N1cmZhY2UpOiBBZGRl
ZAorICAgICAgICAoV0tJbWFnZUNyZWF0ZUZyb21DYWlyb1N1cmZhY2UpOiBBZGRlZAorICAgICAg
ICAqIFNoYXJlZC9BUEkvYy9jYWlyby9XS0ltYWdlQ2Fpcm8uaDogQ29waWVkIGZyb20gU291cmNl
L1dlYktpdDIvU2hhcmVkL2NhaXJvL1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcC4KKwogMjAxMS0w
Ni0xNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCA0
YzM3NGIyYTk5MTE0ZDJlMjdlMWJkMmRkYjUwZjNhYjU4MGI4MTU4Li4yOWQxNjRjY2FhMTZmYmU0
ZmQyMDFlMTNmMjg5ZDM4MDM0NzM0YzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVt
YWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtMTI1LDYg
KzEyNSw4IEBAIGxpYndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdF
QktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfU09VCiAJU291cmNlL1dlYktpdDIvUGx1Z2lu
UHJvY2Vzcy9ndGsvUGx1Z2luQ29udHJvbGxlclByb3h5R3RrLmNwcCBcCiAJU291cmNlL1dlYktp
dDIvUGx1Z2luUHJvY2Vzcy9ndGsvUGx1Z2luUHJvY2Vzc0d0ay5jcHAgXAogCVNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9BUElDbGllbnQuaCBcCisJU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL2Nh
aXJvL1dLSW1hZ2VDYWlyby5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9jYWly
by9XS0ltYWdlQ2Fpcm8uaCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL2d0ay9XS0Jh
c2VHdGsuaCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL2d0ay9XS0dyYXBoaWNzQ29u
dGV4dEd0ay5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvZ3RrL1dLR3JhcGhpY3ND
b250ZXh0R3RrLmNwcCBcCkBAIC0xODgsOCArMTkwLDggQEAgbGlid2Via2l0Mmd0a19AV0VCS0lU
R1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9T
T1UKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRHJhd2luZ0FyZWFJbmZvLmggXAogCVNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9FZGl0b3JTdGF0ZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRm9u
dFNtb290aGluZ0xldmVsLmggXAotCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9jYWlyby9TaGFyZWFi
bGVCaXRtYXBDYWlyby5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9jYWlyby9MYXllclRy
ZWVDb250ZXh0Q2Fpcm8uY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2Fpcm8vU2hhcmVh
YmxlQml0bWFwQ2Fpcm8uY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdl
YktleWJvYXJkRXZlbnRHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2
ZVdlYk1vdXNlRXZlbnRHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2
ZVdlYldoZWVsRXZlbnRHdGsuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9BUEkvYy9jYWlyby9XS0ltYWdlQ2Fpcm8uY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQ
SS9jL2NhaXJvL1dLSW1hZ2VDYWlyby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzAzZDg2OTAxOTJhYjcwNDYx
NjdmYWU4NGM2OGEyNmMwZTc1NzZmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9BUEkvYy9jYWlyby9XS0ltYWdlQ2Fpcm8uY3BwCkBAIC0wLDAgKzEsNTggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXS0ltYWdlQ2Fpcm8uaCIKKworI2luY2x1ZGUgIlNoYXJlYWJs
ZUJpdG1hcC5oIgorI2luY2x1ZGUgIldLU2hhcmVkQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldlYklt
YWdlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1BsYXRmb3JtQ29udGV4dENhaXJvLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworY2Fpcm9fc3VyZmFjZV90KiBXS0ltYWdlQ3Jl
YXRlQ2Fpcm9TdXJmYWNlKFdLSW1hZ2VSZWYgaW1hZ2VSZWYpCit7CisgICAgLy8gV2UgY2Fubm90
IHBhc3MgYSBSZWZQdHIgdGhyb3VnaCB0aGUgQVBJIGhlcmUsIHNvIHdlIGp1c3QgbGVhayB0aGUg
cmVmZXJlbmNlLgorICAgIHJldHVybiB0b0ltcGwoaW1hZ2VSZWYpLT5iaXRtYXAoKS0+Y3JlYXRl
Q2Fpcm9TdXJmYWNlKCkubGVha1JlZigpOworfQorCitXS0ltYWdlUmVmIFdLSW1hZ2VDcmVhdGVG
cm9tQ2Fpcm9TdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSwgV0tJbWFnZU9wdGlvbnMg
b3B0aW9ucykKK3sKKyAgICBJbnRTaXplIGltYWdlU2l6ZShjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF93aWR0aChzdXJmYWNlKSwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2Up
KTsKKyAgICBSZWZQdHI8V2ViSW1hZ2U+IHdlYkltYWdlID0gV2ViSW1hZ2U6OmNyZWF0ZShpbWFn
ZVNpemUsIHRvSW1hZ2VPcHRpb25zKG9wdGlvbnMpKTsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250
ZXh0PiBncmFwaGljc0NvbnRleHQgPSB3ZWJJbWFnZS0+Yml0bWFwKCktPmNyZWF0ZUdyYXBoaWNz
Q29udGV4dCgpOworCisgICAgY2Fpcm9fdCogY3IgPSBncmFwaGljc0NvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT5jcigpOworICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjciwgc3VyZmFj
ZSwgMCwgMCk7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9TT1VS
Q0UpOworICAgIGNhaXJvX3JlY3RhbmdsZShjciwgMCwgMCwgaW1hZ2VTaXplLndpZHRoKCksIGlt
YWdlU2l6ZS5oZWlnaHQoKSk7CisgICAgY2Fpcm9fZmlsbChjcik7CisKKyAgICByZXR1cm4gdG9B
UEkod2ViSW1hZ2UucmVsZWFzZSgpLmxlYWtSZWYoKSk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYzYwMzgzZTQxYThhNTMyOTc0NzE0NWRl
ZjkxZTIwYWY0NzcyMTIxNi4uOWJjNDhlNjgzZmIxMzM4ZWJiNTU0MmVkYTdjYTZiODRhODZlNTI1
MiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIyIEBACisyMDExLTA0LTExICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdh
bGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBbR1RLXSBJbXBsZW1lbnQgcGl4ZWwgZHVtcCBzdXBwb3J0IGZvciBXZWJLaXRUZXN0UnVubmVy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODI0Mgor
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL0dOVW1ha2VmaWxlLkltYWdlRGlmZi5hbTog
QWRkZWQuCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IFNlcGFyYXRlIG91dCB0aGUgSW1hZ2VE
aWZmIGJpdHMgb2YgdGhlIEdOVW1ha2VmaWxlLgorICAgICAgICAqIFNjcmlwdHMvb2xkLXJ1bi13
ZWJraXQtdGVzdHM6IFVwZGF0ZSB0byBhZGQgc3VwcG9ydCBmb3IgdGhlIEdUSysgcG9ydC4KKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0dOVW1ha2VmaWxlLmFtOiBBZGRlZCBDYWlybyBzcGVj
aWZpYyBmaWxlcyB0byB0aGUgYnVpbGQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0
SW52b2NhdGlvbi5jcHA6IE1vdmVkIHRoaXMgY29kZSB0byB0aGUgcGxhdGZvcm0taW5kZXBlbmRl
bnQKKyAgICAgICAgZmlsZSBzbyB0aGF0IHdlIGNhbiBzaGFyZSBpdCBhY3Jvc3MgcGxhdGZvcm1z
LgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6Y29tcGFyZUFjdHVhbEhhc2hUb0V4cGVj
dGVkQW5kRHVtcFJlc3VsdHMpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdEludm9j
YXRpb24uaDogVXBkYXRlZCBtZXRob2QgbGlzdC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwOiBBZGRlZCBDYWlybyBpbXBsZW1lbnRhdGlv
bi4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwOgor
ICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZHVtcFBpeGVsc0FuZENvbXBhcmVXaXRoRXhw
ZWN0ZWQpOiBVcGRhdGVkIHRvIHVzZSBuZXcgaGVscGVyLgorCiAyMDExLTA2LTE0ICBDYWlvIE1h
cmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2d0ay9HTlVtYWtlZmlsZS5JbWFnZURpZmYuYW0gYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9ndGsvR05VbWFrZWZpbGUuSW1hZ2VEaWZmLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU3YzNhZWZj
MDFkOTMzODBlYTg3ZGI3YmZkOGU2YzUwY2ZiMmI4ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9ndGsvR05VbWFrZWZpbGUuSW1hZ2VEaWZmLmFtCkBAIC0wLDAgKzEs
MjggQEAKK25vaW5zdF9QUk9HUkFNUyArPSBcCisJUHJvZ3JhbXMvSW1hZ2VEaWZmCisKK1Byb2dy
YW1zX0ltYWdlRGlmZl9DUFBGTEFHUyA9ICQoZ2xvYmFsX2NwcGZsYWdzKQorCitQcm9ncmFtc19J
bWFnZURpZmZfU09VUkNFUyA9IFwKKyAgIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9JbWFnZURp
ZmYuY3BwCisKK1Byb2dyYW1zX0ltYWdlRGlmZl9DWFhGTEFHUyA9IFwKKyAgICQoZ2xvYmFsX2N4
eGZsYWdzKSBcCisgICAkKGdsb2JhbF9jcHBmbGFncykgXAorICAgJChQcm9ncmFtc19JbWFnZURp
ZmZfQ0ZMQUdTKQorCitQcm9ncmFtc19JbWFnZURpZmZfQ0ZMQUdTID0gXAorICAgLWZuby1zdHJp
Y3QtYWxpYXNpbmcgXAorICAgJChnbG9iYWxfY2ZsYWdzKSBcCisgICAkKEdMT0JBTERFUFNfQ0ZM
QUdTKSBcCisgICAkKEdUS19DRkxBR1MpCisKK1Byb2dyYW1zX0ltYWdlRGlmZl9MREFERCA9IFwK
KyAgICQoR1RLX0xJQlMpCisKK1Byb2dyYW1zX0ltYWdlRGlmZl9MREZMQUdTID0gXAorICAgLW5v
LWZhc3QtaW5zdGFsbCBcCisgICAtbm8taW5zdGFsbAorCitDTEVBTkZJTEVTICs9IFwKKwlQcm9n
cmFtcy9JbWFnZURpZmYKZGlmZiAtLWdpdCBhL1Rvb2xzL0dOVW1ha2VmaWxlLmFtIGIvVG9vbHMv
R05VbWFrZWZpbGUuYW0KaW5kZXggYjMwM2QwNjhjOTZmYzI4MzExNGVmNWYyNTg1NmE0YzY4NGJm
ZmExYi4uYzY4YjZlZTAwZjVlOGViOTU1MmY3YzUyNDQzMGJmYTQzNWZlODhlMSAxMDA2NDQKLS0t
IGEvVG9vbHMvR05VbWFrZWZpbGUuYW0KKysrIGIvVG9vbHMvR05VbWFrZWZpbGUuYW0KQEAgLTEs
NyArMSw2IEBACiBub2luc3RfUFJPR1JBTVMgKz0gXAogCVByb2dyYW1zL0R1bXBSZW5kZXJUcmVl
IFwKLQlQcm9ncmFtcy9HdGtMYXVuY2hlciBcCi0JUHJvZ3JhbXMvSW1hZ2VEaWZmCisJUHJvZ3Jh
bXMvR3RrTGF1bmNoZXIKIAogaWYgRU5BQkxFX1dFQktJVDIKIG5vaW5zdF9QUk9HUkFNUyArPSBc
CkBAIC0yMDUsMzUgKzIwNCwxMCBAQCBQcm9ncmFtc19EdW1wUmVuZGVyVHJlZV9MREZMQUdTID0g
XAogCS1uby1mYXN0LWluc3RhbGwgXAogCS1uby1pbnN0YWxsCiAKLSMgSW1hZ2VEaWZmCi1Qcm9n
cmFtc19JbWFnZURpZmZfQ1BQRkxBR1MgPSAkKGdsb2JhbF9jcHBmbGFncykKLQotUHJvZ3JhbXNf
SW1hZ2VEaWZmX1NPVVJDRVMgPSBcCi0gICBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvSW1hZ2VE
aWZmLmNwcAotCi1Qcm9ncmFtc19JbWFnZURpZmZfQ1hYRkxBR1MgPSBcCi0gICAkKGdsb2JhbF9j
eHhmbGFncykgXAotICAgJChnbG9iYWxfY3BwZmxhZ3MpIFwKLSAgICQoUHJvZ3JhbXNfSW1hZ2VE
aWZmX0NGTEFHUykKLQotUHJvZ3JhbXNfSW1hZ2VEaWZmX0NGTEFHUyA9IFwKLSAgIC1mbm8tc3Ry
aWN0LWFsaWFzaW5nIFwKLSAgICQoZ2xvYmFsX2NmbGFncykgXAotICAgJChHTE9CQUxERVBTX0NG
TEFHUykgXAotICAgJChHVEtfQ0ZMQUdTKQotCi1Qcm9ncmFtc19JbWFnZURpZmZfTERBREQgPSBc
Ci0gICAkKEdUS19MSUJTKQotCi1Qcm9ncmFtc19JbWFnZURpZmZfTERGTEFHUyA9IFwKLSAgIC1u
by1mYXN0LWluc3RhbGwgXAotICAgLW5vLWluc3RhbGwKLQogIyBjbGVhbiB0YXJnZXQKIENMRUFO
RklMRVMgKz0gXAogCVByb2dyYW1zL0R1bXBSZW5kZXJUcmVlIFwKLQlQcm9ncmFtcy9HdGtMYXVu
Y2hlciBcCi0JUHJvZ3JhbXMvSW1hZ2VEaWZmCisJUHJvZ3JhbXMvR3RrTGF1bmNoZXIKIAogaWYg
RU5BQkxFX1dFQktJVDIKIENMRUFORklMRVMgKz0gXApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9HTlVtYWtlZmlsZS5hbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvR05VbWFr
ZWZpbGUuYW0KaW5kZXggMjNhYzg1ZDVjNzk3ZjA0YzZhYjQzMTkxYWI0YTE1MTBjNzc0NGY2NS4u
MjI4YTE1OTQ3Y2FhNjA1ODc5MTczMzNlOWVhZDFkODFlOTIyNGI3YSAxMDA2NDQKLS0tIGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9HTlVtYWtlZmlsZS5hbQorKysgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0dOVW1ha2VmaWxlLmFtCkBAIC0xMiw3ICsxMiw3IEBAIFByb2dyYW1zX1dlYktpdFRl
c3RSdW5uZXJfU09VUkNFUyA9IFwKIAlUb29scy9XZWJLaXRUZXN0UnVubmVyL2d0ay9tYWluLmNw
cCBcCiAJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvUGxhdGZvcm1XZWJWaWV3R3RrLmNwcCBc
CiAJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvVGVzdENvbnRyb2xsZXJHdGsuY3BwIFwKLQlU
b29scy9XZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0SW52b2NhdGlvbkd0ay5jcHAgXAorCVRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvY2Fpcm8vVGVzdEludm9jYXRpb25DYWlyby5jcHAgXAogCVRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmggXAogCVRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvU3RyaW5nRnVuY3Rpb25zLmggXAogCVRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuY3BwIFwKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdElu
dm9jYXRpb24uY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAK
aW5kZXggYzI3MTk2NzY1M2ZmYTBiY2NjMzRhNWE3YmQyZGE3ODIzNmIzNjI3Mi4uMzgwNDY0MWY2
MzFmMGYzYzUyMWYwMWU1M2EwYWEwM2E4YTVmNGM3MCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0SW52b2NhdGlvbi5jcHAKQEAgLTE3NCw2ICsxNzQsMTkgQEAgdm9pZCBUZXN0SW52b2Nh
dGlvbjo6ZHVtcChjb25zdCBjaGFyKiBzdHJpbmdUb0R1bXAsIGJvb2wgc2luZ2xlRU9GKQogICAg
IGZmbHVzaChzdGRlcnIpOwogfQogCitib29sIFRlc3RJbnZvY2F0aW9uOjpjb21wYXJlQWN0dWFs
SGFzaFRvRXhwZWN0ZWRBbmREdW1wUmVzdWx0cyhjaGFyIGFjdHVhbEhhc2hbMzNdKQoreworICAg
IC8vIENvbXB1dGUgdGhlIGhhc2ggb2YgdGhlIGJpdG1hcCBjb250ZXh0IHBpeGVscworICAgIGZw
cmludGYoc3Rkb3V0LCAiXG5BY3R1YWxIYXNoOiAlc1xuIiwgYWN0dWFsSGFzaCk7CisKKyAgICBp
ZiAoIW1fZXhwZWN0ZWRQaXhlbEhhc2gubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIEFTU0VSVChtX2V4cGVjdGVkUGl4ZWxIYXNoLmxlbmd0aCgpID09IDMyKTsKKyAgICBm
cHJpbnRmKHN0ZG91dCwgIlxuRXhwZWN0ZWRIYXNoOiAlc1xuIiwgbV9leHBlY3RlZFBpeGVsSGFz
aC5jX3N0cigpKTsKKyAgICByZXR1cm4gbV9leHBlY3RlZFBpeGVsSGFzaCA9PSBhY3R1YWxIYXNo
OworfQorCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3Rl
ZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5KQog
ewogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRXJy
b3IiKSkgewpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlv
bi5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5oCmluZGV4IDlmYWYx
Y2MyNGM1ZDkxM2M1N2U4MzMzNTRjMTljMzI5YzJmZTJiZjYuLmU1MWNjYjhhMThjZTQyZjk2YmIx
N2M3ZjQzZjdkMTRkZDcwMzFkNjEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
VGVzdEludm9jYXRpb24uaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0
aW9uLmgKQEAgLTQ3LDYgKzQ3LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIGR1bXAo
Y29uc3QgY2hhciosIGJvb2wgc2luZ2xlRU9GID0gZmFsc2UpOwogICAgIHZvaWQgZHVtcFBpeGVs
c0FuZENvbXBhcmVXaXRoRXhwZWN0ZWQoV0tJbWFnZVJlZik7CisgICAgYm9vbCBjb21wYXJlQWN0
dWFsSGFzaFRvRXhwZWN0ZWRBbmREdW1wUmVzdWx0cyhjaGFyWzMzXSk7CiAgICAgCiAgICAgV0tS
ZXRhaW5QdHI8V0tVUkxSZWY+IG1fdXJsOwogICAgIHN0ZDo6c3RyaW5nIG1fcGF0aE9yVVJMOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jYWlyby9UZXN0SW52b2NhdGlvbkNh
aXJvLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2Fpcm8vVGVzdEludm9jYXRpb25DYWly
by5jcHAKaW5kZXggODhhYWNiZDUxNzRhYmM5NDhlODFiM2UyYmZiY2RlNTE2Yzk2ZTJkNy4uZmQx
YWQzYWM0Y2UwNDgyMjNkMTM0NDYyNjlhYmZjMTI4ODlhMjI2MSAxMDA2NDQKLS0tIGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9jYWlyby9UZXN0SW52b2NhdGlvbkNhaXJvLmNwcAorKysgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwCkBAIC0xLDYg
KzEsNyBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQnJlbnQgRnVsZ2hhbSA8YmZ1bGdoYW1A
d2Via2l0Lm9yZz4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgIChDKSAyMDExIEJy
ZW50IEZ1bGdoYW0gPGJmdWxnaGFtQHdlYmtpdC5vcmc+LiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogICAgICAgICAgIChDKSAyMDEwLCAyMDExIElnYWxpYSBTLkwKICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjcsMTIgKzI4LDc1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiVGVzdEludm9jYXRpb24uaCIKIAorI2luY2x1ZGUgPFdlYktpdDIvV0tJbWFnZUNh
aXJvLmg+CisjaW5jbHVkZSA8Y2Fpcm8vY2Fpcm8uaD4KKyNpbmNsdWRlIDxjc3RkaW8+CisjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvTUQ1Lmg+CisKIG5hbWVzcGFj
ZSBXVFIgewogCi12b2lkIFRlc3RJbnZvY2F0aW9uOjpkdW1wUGl4ZWxzQW5kQ29tcGFyZVdpdGhF
eHBlY3RlZChXS0ltYWdlUmVmIGltYWdlKQordm9pZCBjb21wdXRlTUQ1SGFzaFN0cmluZ0ZvckNh
aXJvU3VyZmFjZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UsIGNoYXIgaGFzaFN0cmluZ1szM10p
CiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgc3R1YiBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCBhIENh
aXJvIGltcGxlbWVudGF0aW9uCi0gICAgLy8gb2YgdGhlIHBpeGVsIGR1bXBpbmcgYW5kIGNvbXBh
cmlzb24gcm91dGluZXMuCisgICAgQVNTRVJUKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Zvcm1h
dChzdXJmYWNlKSA9PSBDQUlST19GT1JNQVRfQVJHQjMyKTsgLy8gSW1hZ2VEaWZmIGFzc3VtZXMg
MzIgYml0IFJHQkEsIHdlIG11c3QgYXMgd2VsbC4KKworICAgIHNpemVfdCBwaXhlbHNIaWdoID0g
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UpOworICAgIHNpemVfdCBwaXhl
bHNXaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSk7CisgICAgc2l6
ZV90IGJ5dGVzUGVyUm93ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2Up
OworCisgICAgTUQ1IG1kNUNvbnRleHQ7CisgICAgdW5zaWduZWQgY2hhciogYml0bWFwRGF0YSA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRh
KHN1cmZhY2UpKTsKKyAgICBmb3IgKHVuc2lnbmVkIHJvdyA9IDA7IHJvdyA8IHBpeGVsc0hpZ2g7
IHJvdysrKSB7CisgICAgICAgIG1kNUNvbnRleHQuYWRkQnl0ZXMoYml0bWFwRGF0YSwgNCAqIHBp
eGVsc1dpZGUpOworICAgICAgICBiaXRtYXBEYXRhICs9IGJ5dGVzUGVyUm93OworICAgIH0KKyAg
ICBWZWN0b3I8dWludDhfdCwgMTY+IGhhc2g7CisgICAgbWQ1Q29udGV4dC5jaGVja3N1bShoYXNo
KTsKKworICAgIHNucHJpbnRmKGhhc2hTdHJpbmcsIDMzLCAiJTAyeCUwMnglMDJ4JTAyeCUwMngl
MDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCIsCisgICAgICAgIGhh
c2hbMF0sIGhhc2hbMV0sIGhhc2hbMl0sIGhhc2hbM10sIGhhc2hbNF0sIGhhc2hbNV0sIGhhc2hb
Nl0sIGhhc2hbN10sCisgICAgICAgIGhhc2hbOF0sIGhhc2hbOV0sIGhhc2hbMTBdLCBoYXNoWzEx
XSwgaGFzaFsxMl0sIGhhc2hbMTNdLCBoYXNoWzE0XSwgaGFzaFsxNV0pOworfQorCitzdGF0aWMg
Y2Fpcm9fc3RhdHVzX3Qgd3JpdGVGdW5jdGlvbih2b2lkKiBjbG9zdXJlLCBjb25zdCB1bnNpZ25l
ZCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQoreworICAgIFZlY3Rvcjx1bnNpZ25l
ZCBjaGFyPiogaW4gPSByZWludGVycHJldF9jYXN0PFZlY3Rvcjx1bnNpZ25lZCBjaGFyPio+KGNs
b3N1cmUpOworICAgIGluLT5hcHBlbmQoZGF0YSwgbGVuZ3RoKTsKKyAgICByZXR1cm4gQ0FJUk9f
U1RBVFVTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBCaXRtYXAoY2Fpcm9fc3VyZmFj
ZV90KiBzdXJmYWNlKQoreworICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBwaXhlbERhdGE7Cisg
ICAgY2Fpcm9fc3VyZmFjZV93cml0ZV90b19wbmdfc3RyZWFtKHN1cmZhY2UsIHdyaXRlRnVuY3Rp
b24sICZwaXhlbERhdGEpOworICAgIGNvbnN0IHNpemVfdCBkYXRhTGVuZ3RoID0gcGl4ZWxEYXRh
LnNpemUoKTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhID0gcGl4ZWxEYXRhLmRhdGEo
KTsKKworICAgIHByaW50ZigiQ29udGVudC1UeXBlOiAlc1xuIiwgImltYWdlL3BuZyIpOworICAg
IHByaW50ZigiQ29udGVudC1MZW5ndGg6ICVsdVxuIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9u
Zz4oZGF0YUxlbmd0aCkpOworCisgICAgY29uc3Qgc2l6ZV90IGJ5dGVzVG9Xcml0ZUluT25lQ2h1
bmsgPSAxIDw8IDE1OworICAgIHNpemVfdCBkYXRhUmVtYWluaW5nVG9Xcml0ZSA9IGRhdGFMZW5n
dGg7CisgICAgd2hpbGUgKGRhdGFSZW1haW5pbmdUb1dyaXRlKSB7CisgICAgICAgIHNpemVfdCBi
eXRlc1RvV3JpdGVJblRoaXNDaHVuayA9IHN0ZDo6bWluKGRhdGFSZW1haW5pbmdUb1dyaXRlLCBi
eXRlc1RvV3JpdGVJbk9uZUNodW5rKTsKKyAgICAgICAgc2l6ZV90IGJ5dGVzV3JpdHRlbiA9IGZ3
cml0ZShkYXRhLCAxLCBieXRlc1RvV3JpdGVJblRoaXNDaHVuaywgc3Rkb3V0KTsKKyAgICAgICAg
aWYgKGJ5dGVzV3JpdHRlbiAhPSBieXRlc1RvV3JpdGVJblRoaXNDaHVuaykKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBkYXRhUmVtYWluaW5nVG9Xcml0ZSAtPSBieXRlc1dyaXR0ZW47Cisg
ICAgICAgIGRhdGEgKz0gYnl0ZXNXcml0dGVuOworICAgIH0KK30KKwordm9pZCBUZXN0SW52b2Nh
dGlvbjo6ZHVtcFBpeGVsc0FuZENvbXBhcmVXaXRoRXhwZWN0ZWQoV0tJbWFnZVJlZiB3a0ltYWdl
KQoreworICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IFdLSW1hZ2VDcmVhdGVDYWlyb1N1
cmZhY2Uod2tJbWFnZSk7CisKKyAgICBjaGFyIGFjdHVhbEhhc2hbMzNdOworICAgIGNvbXB1dGVN
RDVIYXNoU3RyaW5nRm9yQ2Fpcm9TdXJmYWNlKHN1cmZhY2UsIGFjdHVhbEhhc2gpOworICAgIGlm
ICghY29tcGFyZUFjdHVhbEhhc2hUb0V4cGVjdGVkQW5kRHVtcFJlc3VsdHMoYWN0dWFsSGFzaCkp
CisgICAgICAgIGR1bXBCaXRtYXAoc3VyZmFjZSk7CisKKyAgICBjYWlyb19zdXJmYWNlX2Rlc3Ry
b3koc3VyZmFjZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcCBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvY2cvVGVzdEludm9jYXRpb25DRy5jcHAKaW5kZXggY2JhMjkwODFmNDhkNWUzNzMw
ZWE0MjBiNWM2Yjc2MGQzMTEwOTRjZC4uMzNmMjQ3NjdhODdmOTc1MjQ4ZDYyNTkxMTM0MDEzZDQ1
Mzg4ZjQyNyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2Nh
dGlvbkNHLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9u
Q0cuY3BwCkBAIC0xMzAsMjQgKzEzMCw5IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmR1bXBQaXhl
bHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKFdLSW1hZ2VSZWYgaW1hZ2UpCiB7CiAgICAgQ0dDb250
ZXh0UmVmIGNvbnRleHQgPSBjcmVhdGVDR0NvbnRleHRGcm9tSW1hZ2UoaW1hZ2UpOwogCi0gICAg
Ly8gQ29tcHV0ZSB0aGUgaGFzaCBvZiB0aGUgYml0bWFwIGNvbnRleHQgcGl4ZWxzCiAgICAgY2hh
ciBhY3R1YWxIYXNoWzMzXTsKICAgICBjb21wdXRlTUQ1SGFzaFN0cmluZ0ZvckNvbnRleHQoY29u
dGV4dCwgYWN0dWFsSGFzaCk7Ci0gICAgZnByaW50ZihzdGRvdXQsICJcbkFjdHVhbEhhc2g6ICVz
XG4iLCBhY3R1YWxIYXNoKTsKLQotICAgIC8vIENoZWNrIHRoZSBjb21wdXRlZCBoYXNoIGFnYWlu
c3QgdGhlIGV4cGVjdGVkIG9uZSBhbmQgZHVtcCBpbWFnZSBvbiBtaXNtYXRjaAotICAgIGJvb2wg
aGFzaGVzTWF0Y2ggPSBmYWxzZTsKLSAgICBpZiAobV9leHBlY3RlZFBpeGVsSGFzaC5sZW5ndGgo
KSA+IDApIHsKLSAgICAgICAgQVNTRVJUKG1fZXhwZWN0ZWRQaXhlbEhhc2gubGVuZ3RoKCkgPT0g
MzIpOwotCi0gICAgICAgIGZwcmludGYoc3Rkb3V0LCAiXG5FeHBlY3RlZEhhc2g6ICVzXG4iLCBt
X2V4cGVjdGVkUGl4ZWxIYXNoLmNfc3RyKCkpOwotCi0gICAgICAgIC8vIEZJWE1FOiBEbyBjYXNl
IGluc2Vuc2l0aXZlIGNvbXBhcmUuCi0gICAgICAgIGlmIChtX2V4cGVjdGVkUGl4ZWxIYXNoID09
IGFjdHVhbEhhc2gpCi0gICAgICAgICAgICBoYXNoZXNNYXRjaCA9IHRydWU7Ci0gICAgfQotCi0g
ICAgaWYgKCFoYXNoZXNNYXRjaCkKKyAgICBpZiAoIWNvbXBhcmVBY3R1YWxIYXNoVG9FeHBlY3Rl
ZEFuZER1bXBSZXN1bHRzKGFjdHVhbEhhc2gpKQogICAgICAgICBkdW1wQml0bWFwKGNvbnRleHQp
OwogfQogCg==
</data>
<flag name="review"
          id="91028"
          type_id="1"
          status="-"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98079</attachid>
            <date>2011-06-21 16:41:51 -0700</date>
            <delta_ts>2011-06-22 06:49:58 -0700</delta_ts>
            <desc>Patch wth Adam&apos;s suggestions</desc>
            <filename>0001-GTK-Implement-pixel-dump-support-for-WebKitTestRunne.patch</filename>
            <type>text/plain</type>
            <size>22976</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">RnJvbSA4NDBmNTQ5YjhkOTk1Mjk5ZDMwYzM0MmEzYjc2N2VkZmM2OTYwZGQ1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJ0aW4gUm9iaW5zb24gPG1yb2JpbnNvbkBpZ2FsaWEuY29t
PgpEYXRlOiBNb24sIDExIEFwciAyMDExIDExOjIzOjM3IC0wNzAwClN1YmplY3Q6IFtQQVRDSF0g
W0dUS10gSW1wbGVtZW50IHBpeGVsIGR1bXAgc3VwcG9ydCBmb3IgV2ViS2l0VGVzdFJ1bm5lcgog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4MjQyCgpSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KCi46CgoqIEdOVW1ha2VmaWxlLmFtOiBSZWZlcmVuY2UgdGhlIG5l
dyBJbWFnZURpZmYgR05VbWFrZWZpbGUuCgpTb3VyY2UvV2ViS2l0MjoKCiogR05VbWFrZWZpbGUu
YW06IEFkZGVkIG5ldyBDYWlybyBzcGVjaWZpYyBpbWFnZSBoYW5kbGluZyBmaWxlcyB0byB0aGUg
YnVpbGQuCiogU2hhcmVkL0FQSS9jL2NhaXJvL1dLSW1hZ2VDYWlyby5jcHA6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWlyby5jcHAuCihX
S0ltYWdlQ3JlYXRlQ2Fpcm9TdXJmYWNlKTogQWRkZWQKKFdLSW1hZ2VDcmVhdGVGcm9tQ2Fpcm9T
dXJmYWNlKTogQWRkZWQKKiBTaGFyZWQvQVBJL2MvY2Fpcm8vV0tJbWFnZUNhaXJvLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWlyby5j
cHAuCgpUb29sczoKCiogRHVtcFJlbmRlclRyZWUvZ3RrL0dOVW1ha2VmaWxlLkltYWdlRGlmZi5h
bTogQWRkZWQuCiogR05VbWFrZWZpbGUuYW06IFNlcGFyYXRlIG91dCB0aGUgSW1hZ2VEaWZmIGJp
dHMgb2YgdGhlIEdOVW1ha2VmaWxlLgoqIFNjcmlwdHMvb2xkLXJ1bi13ZWJraXQtdGVzdHM6IFVw
ZGF0ZSB0byBhZGQgc3VwcG9ydCBmb3IgdGhlIEdUSysgcG9ydC4KKiBXZWJLaXRUZXN0UnVubmVy
L0dOVW1ha2VmaWxlLmFtOiBBZGRlZCBDYWlybyBzcGVjaWZpYyBmaWxlcyB0byB0aGUgYnVpbGQu
CiogV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6IE1vdmVkIHRoaXMgY29kZSB0
byB0aGUgcGxhdGZvcm0taW5kZXBlbmRlbnQKZmlsZSBzbyB0aGF0IHdlIGNhbiBzaGFyZSBpdCBh
Y3Jvc3MgcGxhdGZvcm1zLgooV1RSOjpUZXN0SW52b2NhdGlvbjo6Y29tcGFyZUFjdHVhbEhhc2hU
b0V4cGVjdGVkQW5kRHVtcFJlc3VsdHMpOgoqIFdlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRp
b24uaDogVXBkYXRlZCBtZXRob2QgbGlzdC4KKiBXZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJ
bnZvY2F0aW9uQ2Fpcm8uY3BwOiBBZGRlZCBDYWlybyBpbXBsZW1lbnRhdGlvbi4KKiBXZWJLaXRU
ZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwOgooV1RSOjpUZXN0SW52b2NhdGlvbjo6
ZHVtcFBpeGVsc0FuZENvbXBhcmVXaXRoRXhwZWN0ZWQpOiBVcGRhdGVkIHRvIHVzZSBuZXcgaGVs
cGVyLgotLS0KIENoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgICAgOSArKysKIEdOVW1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgICAgMiArCiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgMTMgKysrKwogU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0g
ICAgICAgICAgICAgICAgICAgICAgfCAgICA0ICstCiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJ
L2MvY2Fpcm8vV0tJbWFnZUNhaXJvLmNwcCB8ICAgNTggKysrKysrKysrKysrKysrCiBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvQVBJL2MvY2Fpcm8vV0tJbWFnZUNhaXJvLmggICB8ICAgNDcgKysrKysr
KysrKysrCiBUb29scy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8ICAgMTkgKysrKysKIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9HTlVtYWtlZmlsZS5JbWFn
ZURpZmYuYW0gIHwgICAyOCArKysrKysrKwogVG9vbHMvR05VbWFrZWZpbGUuYW0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgIDMwICstLS0tLS0tLQogVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9HTlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgfCAgICAyICstCiBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcCAgICAgICAgICB8ICAgMTUgKysrKwogVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5oICAgICAgICAgICAgfCAgICAxICsKIC4u
Li9XZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwIHwgICA3NCAr
KysrKysrKysrKysrKysrKystLQogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2Nh
dGlvbkNHLmNwcCAgICAgfCAgIDE3ICstLS0tCiBUb29scy9XZWJLaXRUZXN0UnVubmVyL2d0ay9U
ZXN0SW52b2NhdGlvbkd0ay5jcHAgICB8ICAgMzUgLS0tLS0tLS0tCiAxNSBmaWxlcyBjaGFuZ2Vk
LCAyNjggaW5zZXJ0aW9ucygrKSwgODYgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg
U291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL2NhaXJvL1dLSW1hZ2VDYWlyby5jcHAKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvY2Fpcm8vV0tJbWFnZUNh
aXJvLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvR05VbWFr
ZWZpbGUuSW1hZ2VEaWZmLmFtCiBkZWxldGUgbW9kZSAxMDA2NDQgVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9ndGsvVGVzdEludm9jYXRpb25HdGsuY3BwCgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIv
Q2hhbmdlTG9nCmluZGV4IGFmYTgxNzUuLmUxNWE3MTcgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZwor
KysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMS0wNC0xMSAgTWFydGluIFJvYmlu
c29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW0dUS10gSW1wbGVtZW50IHBpeGVsIGR1bXAgc3VwcG9ydCBm
b3IgV2ViS2l0VGVzdFJ1bm5lcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTgyNDIKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBSZWZlcmVuY2Ug
dGhlIG5ldyBJbWFnZURpZmYgR05VbWFrZWZpbGUuCisKIDIwMTEtMDYtMjAgIE1PUklUQSBIYWpp
bWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBHVEsgYnVpbGQg
Zml4LgpkaWZmIC0tZ2l0IGEvR05VbWFrZWZpbGUuYW0gYi9HTlVtYWtlZmlsZS5hbQppbmRleCA5
Yzg4YzE5Li5mYjEwNzkwIDEwMDY0NAotLS0gYS9HTlVtYWtlZmlsZS5hbQorKysgYi9HTlVtYWtl
ZmlsZS5hbQpAQCAtMTk3LDYgKzE5Nyw4IEBAIGluY2x1ZGUgU291cmNlL1dlYktpdC9ndGsvR05V
bWFrZWZpbGUuYW0KIGluY2x1ZGUgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HTlVt
YWtlZmlsZS5hbQogaW5jbHVkZSBUb29scy9HTlVtYWtlZmlsZS5hbQogaW5jbHVkZSBTb3VyY2Uv
V2ViS2l0L2d0ay9wby9HTlVtYWtlZmlsZS5hbQoraW5jbHVkZSBUb29scy9EdW1wUmVuZGVyVHJl
ZS9ndGsvR05VbWFrZWZpbGUuSW1hZ2VEaWZmLmFtCisKIGlmIEVOQUJMRV9XRUJLSVQyCiBpbmNs
dWRlIFNvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCiBpbmNsdWRlIFRvb2xzL01pbmlCcm93
c2VyL2d0ay9HTlVtYWtlZmlsZS5hbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDM2ZTU4NjIuLjEyOWEyODMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMS0wNC0xMSAgTWFydGluIFJvYmluc29uICA8
bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgW0dUS10gSW1wbGVtZW50IHBpeGVsIGR1bXAgc3VwcG9ydCBmb3IgV2Vi
S2l0VGVzdFJ1bm5lcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTgyNDIKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGRlZCBuZXcgQ2Fpcm8g
c3BlY2lmaWMgaW1hZ2UgaGFuZGxpbmcgZmlsZXMgdG8gdGhlIGJ1aWxkLgorICAgICAgICAqIFNo
YXJlZC9BUEkvYy9jYWlyby9XS0ltYWdlQ2Fpcm8uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8uY3BwLgorICAgICAgICAoV0tJ
bWFnZUNyZWF0ZUNhaXJvU3VyZmFjZSk6IEFkZGVkCisgICAgICAgIChXS0ltYWdlQ3JlYXRlRnJv
bUNhaXJvU3VyZmFjZSk6IEFkZGVkCisgICAgICAgICogU2hhcmVkL0FQSS9jL2NhaXJvL1dLSW1h
Z2VDYWlyby5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2Fpcm8vU2hhcmVh
YmxlQml0bWFwQ2Fpcm8uY3BwLgorCiAyMDExLTA2LTIxICBMdWthc3ogU2xhY2hjaWFrICA8bC5z
bGFjaGNpYWtAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktp
dDIvR05VbWFrZWZpbGUuYW0KaW5kZXggZWI3ZWUyMi4uNDNhYmRlMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZp
bGUuYW0KQEAgLTEyNiw2ICsxMjYsOCBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01B
Sk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX1NPVQogCVNvdXJj
ZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvZ3RrL1BsdWdpbkNvbnRyb2xsZXJQcm94eUd0ay5jcHAg
XAogCVNvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvZ3RrL1BsdWdpblByb2Nlc3NHdGsuY3Bw
IFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJQ2xpZW50LmggXAorCVNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9BUEkvYy9jYWlyby9XS0ltYWdlQ2Fpcm8uY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvQVBJL2MvY2Fpcm8vV0tJbWFnZUNhaXJvLmggXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9BUEkvYy9ndGsvV0tCYXNlR3RrLmggXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9n
dGsvV0tHcmFwaGljc0NvbnRleHRHdGsuaCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9j
L2d0ay9XS0dyYXBoaWNzQ29udGV4dEd0ay5jcHAgXApAQCAtMTg5LDggKzE5MSw4IEBAIGxpYndl
YmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlO
T1JfVkVSU0lPTkBfbGFfU09VCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL0RyYXdpbmdBcmVhSW5m
by5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRWRpdG9yU3RhdGUuaCBcCiAJU291cmNlL1dl
YktpdDIvU2hhcmVkL0ZvbnRTbW9vdGhpbmdMZXZlbC5oIFwKLQlTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8uY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvY2Fpcm8vTGF5ZXJUcmVlQ29udGV4dENhaXJvLmNwcCBcCisJU291cmNlL1dlYktpdDIvU2hh
cmVkL2NhaXJvL1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcCBcCiAJU291cmNlL1dlYktpdDIvU2hh
cmVkL2d0ay9OYXRpdmVXZWJLZXlib2FyZEV2ZW50R3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIv
U2hhcmVkL2d0ay9OYXRpdmVXZWJNb3VzZUV2ZW50R3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIv
U2hhcmVkL2d0ay9OYXRpdmVXZWJXaGVlbEV2ZW50R3RrLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvY2Fpcm8vV0tJbWFnZUNhaXJvLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9BUEkvYy9jYWlyby9XS0ltYWdlQ2Fpcm8uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwM2Q4NjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvQVBJL2MvY2Fpcm8vV0tJbWFnZUNhaXJvLmNwcApAQCAtMCwwICsxLDU4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0tJbWFnZUNhaXJvLmgiCisKKyNpbmNsdWRlICJT
aGFyZWFibGVCaXRtYXAuaCIKKyNpbmNsdWRlICJXS1NoYXJlZEFQSUNhc3QuaCIKKyNpbmNsdWRl
ICJXZWJJbWFnZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHRDYWlyby5oPgorCit1c2luZyBuYW1lc3BhY2Ug
V2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2NhaXJvX3N1cmZhY2VfdCogV0tJ
bWFnZUNyZWF0ZUNhaXJvU3VyZmFjZShXS0ltYWdlUmVmIGltYWdlUmVmKQoreworICAgIC8vIFdl
IGNhbm5vdCBwYXNzIGEgUmVmUHRyIHRocm91Z2ggdGhlIEFQSSBoZXJlLCBzbyB3ZSBqdXN0IGxl
YWsgdGhlIHJlZmVyZW5jZS4KKyAgICByZXR1cm4gdG9JbXBsKGltYWdlUmVmKS0+Yml0bWFwKCkt
PmNyZWF0ZUNhaXJvU3VyZmFjZSgpLmxlYWtSZWYoKTsKK30KKworV0tJbWFnZVJlZiBXS0ltYWdl
Q3JlYXRlRnJvbUNhaXJvU3VyZmFjZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UsIFdLSW1hZ2VP
cHRpb25zIG9wdGlvbnMpCit7CisgICAgSW50U2l6ZSBpbWFnZVNpemUoY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSksIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChz
dXJmYWNlKSk7CisgICAgUmVmUHRyPFdlYkltYWdlPiB3ZWJJbWFnZSA9IFdlYkltYWdlOjpjcmVh
dGUoaW1hZ2VTaXplLCB0b0ltYWdlT3B0aW9ucyhvcHRpb25zKSk7CisgICAgT3duUHRyPEdyYXBo
aWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gd2ViSW1hZ2UtPmJpdG1hcCgpLT5jcmVhdGVH
cmFwaGljc0NvbnRleHQoKTsKKworICAgIGNhaXJvX3QqIGNyID0gZ3JhcGhpY3NDb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3Is
IHN1cmZhY2UsIDAsIDApOworICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFU
T1JfU09VUkNFKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY3IsIDAsIDAsIGltYWdlU2l6ZS53aWR0
aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpOworICAgIGNhaXJvX2ZpbGwoY3IpOworCisgICAgcmV0
dXJuIHRvQVBJKHdlYkltYWdlLnJlbGVhc2UoKS5sZWFrUmVmKCkpOworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL2NhaXJvL1dLSW1hZ2VDYWlyby5oIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL0FQSS9jL2NhaXJvL1dLSW1hZ2VDYWlyby5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxY2E4OWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvQVBJL2MvY2Fpcm8vV0tJbWFnZUNhaXJvLmgKQEAgLTAsMCArMSw0NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBXS0ltYWdlQ2Fpcm9faAorI2RlZmluZSBXS0ltYWdlQ2Fpcm9faAorCisjaW5jbHVkZSA8V2Vi
S2l0Mi9XS0Jhc2UuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLSW1hZ2UuaD4KKwordHlwZWRlZiBf
Y2Fpcm9fc3VyZmFjZSBjYWlyb19zdXJmYWNlX3Q7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0
ZXJuICJDIiB7CisjZW5kaWYKKworV0tfRVhQT1JUIGNhaXJvX3N1cmZhY2VfdCogV0tJbWFnZUNy
ZWF0ZUNhaXJvU3VyZmFjZShXS0ltYWdlUmVmIGltYWdlKTsKKworV0tfRVhQT1JUIFdLSW1hZ2VS
ZWYgV0tJbWFnZUNyZWF0ZUZyb21DYWlyb1N1cmZhY2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNl
LCBXS0ltYWdlT3B0aW9ucyBvcHRpb25zKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5k
aWYKKworI2VuZGlmIC8qIFdLSW1hZ2VDYWlyb19oICovCmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOTExNzkwMi4uYmEyOTBlZCAxMDA2NDQKLS0t
IGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBA
CisyMDExLTA0LTExICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBJbXBs
ZW1lbnQgcGl4ZWwgZHVtcCBzdXBwb3J0IGZvciBXZWJLaXRUZXN0UnVubmVyCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODI0MgorCisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvZ3RrL0dOVW1ha2VmaWxlLkltYWdlRGlmZi5hbTogQWRkZWQuCisgICAg
ICAgICogR05VbWFrZWZpbGUuYW06IFNlcGFyYXRlIG91dCB0aGUgSW1hZ2VEaWZmIGJpdHMgb2Yg
dGhlIEdOVW1ha2VmaWxlLgorICAgICAgICAqIFNjcmlwdHMvb2xkLXJ1bi13ZWJraXQtdGVzdHM6
IFVwZGF0ZSB0byBhZGQgc3VwcG9ydCBmb3IgdGhlIEdUSysgcG9ydC4KKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL0dOVW1ha2VmaWxlLmFtOiBBZGRlZCBDYWlybyBzcGVjaWZpYyBmaWxlcyB0
byB0aGUgYnVpbGQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5j
cHA6IE1vdmVkIHRoaXMgY29kZSB0byB0aGUgcGxhdGZvcm0taW5kZXBlbmRlbnQKKyAgICAgICAg
ZmlsZSBzbyB0aGF0IHdlIGNhbiBzaGFyZSBpdCBhY3Jvc3MgcGxhdGZvcm1zLgorICAgICAgICAo
V1RSOjpUZXN0SW52b2NhdGlvbjo6Y29tcGFyZUFjdHVhbEhhc2hUb0V4cGVjdGVkQW5kRHVtcFJl
c3VsdHMpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uaDogVXBk
YXRlZCBtZXRob2QgbGlzdC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJ
bnZvY2F0aW9uQ2Fpcm8uY3BwOiBBZGRlZCBDYWlybyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwOgorICAgICAgICAoV1RS
OjpUZXN0SW52b2NhdGlvbjo6ZHVtcFBpeGVsc0FuZENvbXBhcmVXaXRoRXhwZWN0ZWQpOiBVcGRh
dGVkIHRvIHVzZSBuZXcgaGVscGVyLgorCiAyMDExLTA2LTIwICBEbWl0cnkgTG9tb3YgIDxkc2xv
bW92QGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCmRpZmYg
LS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvR05VbWFrZWZpbGUuSW1hZ2VEaWZmLmFt
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0dOVW1ha2VmaWxlLkltYWdlRGlmZi5hbQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2MzYWVmCi0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0dOVW1ha2VmaWxlLkltYWdlRGlmZi5hbQpAQCAt
MCwwICsxLDI4IEBACitub2luc3RfUFJPR1JBTVMgKz0gXAorCVByb2dyYW1zL0ltYWdlRGlmZgor
CitQcm9ncmFtc19JbWFnZURpZmZfQ1BQRkxBR1MgPSAkKGdsb2JhbF9jcHBmbGFncykKKworUHJv
Z3JhbXNfSW1hZ2VEaWZmX1NPVVJDRVMgPSBcCisgICBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsv
SW1hZ2VEaWZmLmNwcAorCitQcm9ncmFtc19JbWFnZURpZmZfQ1hYRkxBR1MgPSBcCisgICAkKGds
b2JhbF9jeHhmbGFncykgXAorICAgJChnbG9iYWxfY3BwZmxhZ3MpIFwKKyAgICQoUHJvZ3JhbXNf
SW1hZ2VEaWZmX0NGTEFHUykKKworUHJvZ3JhbXNfSW1hZ2VEaWZmX0NGTEFHUyA9IFwKKyAgIC1m
bm8tc3RyaWN0LWFsaWFzaW5nIFwKKyAgICQoZ2xvYmFsX2NmbGFncykgXAorICAgJChHTE9CQUxE
RVBTX0NGTEFHUykgXAorICAgJChHVEtfQ0ZMQUdTKQorCitQcm9ncmFtc19JbWFnZURpZmZfTERB
REQgPSBcCisgICAkKEdUS19MSUJTKQorCitQcm9ncmFtc19JbWFnZURpZmZfTERGTEFHUyA9IFwK
KyAgIC1uby1mYXN0LWluc3RhbGwgXAorICAgLW5vLWluc3RhbGwKKworQ0xFQU5GSUxFUyArPSBc
CisJUHJvZ3JhbXMvSW1hZ2VEaWZmCmRpZmYgLS1naXQgYS9Ub29scy9HTlVtYWtlZmlsZS5hbSBi
L1Rvb2xzL0dOVW1ha2VmaWxlLmFtCmluZGV4IGIzMDNkMDYuLmM2OGI2ZWUgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0dOVW1ha2VmaWxlLmFtCisrKyBiL1Rvb2xzL0dOVW1ha2VmaWxlLmFtCkBAIC0xLDcg
KzEsNiBAQAogbm9pbnN0X1BST0dSQU1TICs9IFwKIAlQcm9ncmFtcy9EdW1wUmVuZGVyVHJlZSBc
Ci0JUHJvZ3JhbXMvR3RrTGF1bmNoZXIgXAotCVByb2dyYW1zL0ltYWdlRGlmZgorCVByb2dyYW1z
L0d0a0xhdW5jaGVyCiAKIGlmIEVOQUJMRV9XRUJLSVQyCiBub2luc3RfUFJPR1JBTVMgKz0gXApA
QCAtMjA1LDM1ICsyMDQsMTAgQEAgUHJvZ3JhbXNfRHVtcFJlbmRlclRyZWVfTERGTEFHUyA9IFwK
IAktbm8tZmFzdC1pbnN0YWxsIFwKIAktbm8taW5zdGFsbAogCi0jIEltYWdlRGlmZgotUHJvZ3Jh
bXNfSW1hZ2VEaWZmX0NQUEZMQUdTID0gJChnbG9iYWxfY3BwZmxhZ3MpCi0KLVByb2dyYW1zX0lt
YWdlRGlmZl9TT1VSQ0VTID0gXAotICAgVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0ltYWdlRGlm
Zi5jcHAKLQotUHJvZ3JhbXNfSW1hZ2VEaWZmX0NYWEZMQUdTID0gXAotICAgJChnbG9iYWxfY3h4
ZmxhZ3MpIFwKLSAgICQoZ2xvYmFsX2NwcGZsYWdzKSBcCi0gICAkKFByb2dyYW1zX0ltYWdlRGlm
Zl9DRkxBR1MpCi0KLVByb2dyYW1zX0ltYWdlRGlmZl9DRkxBR1MgPSBcCi0gICAtZm5vLXN0cmlj
dC1hbGlhc2luZyBcCi0gICAkKGdsb2JhbF9jZmxhZ3MpIFwKLSAgICQoR0xPQkFMREVQU19DRkxB
R1MpIFwKLSAgICQoR1RLX0NGTEFHUykKLQotUHJvZ3JhbXNfSW1hZ2VEaWZmX0xEQUREID0gXAot
ICAgJChHVEtfTElCUykKLQotUHJvZ3JhbXNfSW1hZ2VEaWZmX0xERkxBR1MgPSBcCi0gICAtbm8t
ZmFzdC1pbnN0YWxsIFwKLSAgIC1uby1pbnN0YWxsCi0KICMgY2xlYW4gdGFyZ2V0CiBDTEVBTkZJ
TEVTICs9IFwKIAlQcm9ncmFtcy9EdW1wUmVuZGVyVHJlZSBcCi0JUHJvZ3JhbXMvR3RrTGF1bmNo
ZXIgXAotCVByb2dyYW1zL0ltYWdlRGlmZgorCVByb2dyYW1zL0d0a0xhdW5jaGVyCiAKIGlmIEVO
QUJMRV9XRUJLSVQyCiBDTEVBTkZJTEVTICs9IFwKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvR05VbWFrZWZpbGUuYW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dOVW1ha2Vm
aWxlLmFtCmluZGV4IDIzYWM4NWQuLjIyOGExNTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvR05VbWFrZWZpbGUuYW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HTlVt
YWtlZmlsZS5hbQpAQCAtMTIsNyArMTIsNyBAQCBQcm9ncmFtc19XZWJLaXRUZXN0UnVubmVyX1NP
VVJDRVMgPSBcCiAJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvbWFpbi5jcHAgXAogCVRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvZ3RrL1BsYXRmb3JtV2ViVmlld0d0ay5jcHAgXAogCVRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RDb250cm9sbGVyR3RrLmNwcCBcCi0JVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9ndGsvVGVzdEludm9jYXRpb25HdGsuY3BwIFwKKwlUb29scy9XZWJLaXRUZXN0
UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwIFwKIAlUb29scy9XZWJLaXRUZXN0
UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oIFwKIAlUb29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmlu
Z0Z1bmN0aW9ucy5oIFwKIAlUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNw
cCBcCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNw
cCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCmluZGV4IGMyNzE5
NjcuLmVjOWFiOTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9j
YXRpb24uY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3Bw
CkBAIC0xNzQsNiArMTc0LDIxIEBAIHZvaWQgVGVzdEludm9jYXRpb246OmR1bXAoY29uc3QgY2hh
ciogc3RyaW5nVG9EdW1wLCBib29sIHNpbmdsZUVPRikKICAgICBmZmx1c2goc3RkZXJyKTsKIH0K
IAorYm9vbCBUZXN0SW52b2NhdGlvbjo6Y29tcGFyZUFjdHVhbEhhc2hUb0V4cGVjdGVkQW5kRHVt
cFJlc3VsdHMoY29uc3QgY2hhciBhY3R1YWxIYXNoWzMzXSkKK3sKKyAgICAvLyBDb21wdXRlIHRo
ZSBoYXNoIG9mIHRoZSBiaXRtYXAgY29udGV4dCBwaXhlbHMKKyAgICBmcHJpbnRmKHN0ZG91dCwg
IlxuQWN0dWFsSGFzaDogJXNcbiIsIGFjdHVhbEhhc2gpOworCisgICAgaWYgKCFtX2V4cGVjdGVk
UGl4ZWxIYXNoLmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQo
bV9leHBlY3RlZFBpeGVsSGFzaC5sZW5ndGgoKSA9PSAzMik7CisgICAgZnByaW50ZihzdGRvdXQs
ICJcbkV4cGVjdGVkSGFzaDogJXNcbiIsIG1fZXhwZWN0ZWRQaXhlbEhhc2guY19zdHIoKSk7CisK
KyAgICAvLyBGSVhNRTogRG8gY2FzZSBpbnNlbnNpdGl2ZSBjb21wYXJlLgorICAgIHJldHVybiBt
X2V4cGVjdGVkUGl4ZWxIYXNoID09IGFjdHVhbEhhc2g7Cit9CisKIHZvaWQgVGVzdEludm9jYXRp
b246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3Nh
Z2VOYW1lLCBXS1R5cGVSZWYgbWVzc2FnZUJvZHkpCiB7CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJFcnJvciIpKSB7CmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmggYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL1Rlc3RJbnZvY2F0aW9uLmgKaW5kZXggOWZhZjFjYy4uYWFiNThhMiAxMDA2NDQKLS0tIGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5oCisrKyBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uaApAQCAtNDcsNiArNDcsNyBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIHZvaWQgZHVtcChjb25zdCBjaGFyKiwgYm9vbCBzaW5nbGVFT0YgPSBmYWxz
ZSk7CiAgICAgdm9pZCBkdW1wUGl4ZWxzQW5kQ29tcGFyZVdpdGhFeHBlY3RlZChXS0ltYWdlUmVm
KTsKKyAgICBib29sIGNvbXBhcmVBY3R1YWxIYXNoVG9FeHBlY3RlZEFuZER1bXBSZXN1bHRzKGNv
bnN0IGNoYXJbMzNdKTsKICAgICAKICAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gbV91cmw7CiAg
ICAgc3RkOjpzdHJpbmcgbV9wYXRoT3JVUkw7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9jYWlyby9UZXN0SW52b2NhdGlvbkNhaXJvLmNwcAppbmRleCA4OGFhY2JkLi4wNGY2MGY3
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9u
Q2Fpcm8uY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2Fpcm8vVGVzdEludm9jYXRp
b25DYWlyby5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBCcmVu
dCBGdWxnaGFtIDxiZnVsZ2hhbUB3ZWJraXQub3JnPi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
ICAgICAgICAgKEMpIDIwMTEgQnJlbnQgRnVsZ2hhbSA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgKEMpIDIwMTAsIDIwMTEgSWdhbGlhIFMu
TAogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywxMiArMjgsNzUgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0SW52b2NhdGlvbi5oIgogCisjaW5jbHVk
ZSA8V2ViS2l0Mi9XS0ltYWdlQ2Fpcm8uaD4KKyNpbmNsdWRlIDxjYWlyby9jYWlyby5oPgorI2lu
Y2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0
Zi9NRDUuaD4KKwogbmFtZXNwYWNlIFdUUiB7CiAKLXZvaWQgVGVzdEludm9jYXRpb246OmR1bXBQ
aXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKFdLSW1hZ2VSZWYgaW1hZ2UpCit2b2lkIGNvbXB1
dGVNRDVIYXNoU3RyaW5nRm9yQ2Fpcm9TdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSwg
Y2hhciBoYXNoU3RyaW5nWzMzXSkKIHsKLSAgICAvLyBGSVhNRTogVGhpcyBzdHViIHNob3VsZCBi
ZSByZXBsYWNlZCB3aXRoIGEgQ2Fpcm8gaW1wbGVtZW50YXRpb24KLSAgICAvLyBvZiB0aGUgcGl4
ZWwgZHVtcGluZyBhbmQgY29tcGFyaXNvbiByb3V0aW5lcy4KKyAgICBBU1NFUlQoY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfZm9ybWF0KHN1cmZhY2UpID09IENBSVJPX0ZPUk1BVF9BUkdCMzIpOyAv
LyBJbWFnZURpZmYgYXNzdW1lcyAzMiBiaXQgUkdCQSwgd2UgbXVzdCBhcyB3ZWxsLgorCisgICAg
c2l6ZV90IHBpeGVsc0hpZ2ggPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFj
ZSk7CisgICAgc2l6ZV90IHBpeGVsc1dpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0
aChzdXJmYWNlKTsKKyAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9zdHJpZGUoc3VyZmFjZSk7CisKKyAgICBNRDUgbWQ1Q29udGV4dDsKKyAgICB1bnNpZ25l
ZCBjaGFyKiBiaXRtYXBEYXRhID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZSkpOworICAgIGZvciAoc2l6ZV90IHJvdyA9IDA7
IHJvdyA8IHBpeGVsc0hpZ2g7ICsrcm93KSB7CisgICAgICAgIG1kNUNvbnRleHQuYWRkQnl0ZXMo
Yml0bWFwRGF0YSwgNCAqIHBpeGVsc1dpZGUpOworICAgICAgICBiaXRtYXBEYXRhICs9IGJ5dGVz
UGVyUm93OworICAgIH0KKyAgICBWZWN0b3I8dWludDhfdCwgMTY+IGhhc2g7CisgICAgbWQ1Q29u
dGV4dC5jaGVja3N1bShoYXNoKTsKKworICAgIHNucHJpbnRmKGhhc2hTdHJpbmcsIDMzLCAiJTAy
eCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4
JTAyeCIsCisgICAgICAgIGhhc2hbMF0sIGhhc2hbMV0sIGhhc2hbMl0sIGhhc2hbM10sIGhhc2hb
NF0sIGhhc2hbNV0sIGhhc2hbNl0sIGhhc2hbN10sCisgICAgICAgIGhhc2hbOF0sIGhhc2hbOV0s
IGhhc2hbMTBdLCBoYXNoWzExXSwgaGFzaFsxMl0sIGhhc2hbMTNdLCBoYXNoWzE0XSwgaGFzaFsx
NV0pOworfQorCitzdGF0aWMgY2Fpcm9fc3RhdHVzX3Qgd3JpdGVGdW5jdGlvbih2b2lkKiBjbG9z
dXJlLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQorewor
ICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiogaW4gPSByZWludGVycHJldF9jYXN0PFZlY3Rvcjx1
bnNpZ25lZCBjaGFyPio+KGNsb3N1cmUpOworICAgIGluLT5hcHBlbmQoZGF0YSwgbGVuZ3RoKTsK
KyAgICByZXR1cm4gQ0FJUk9fU1RBVFVTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBC
aXRtYXAoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQoreworICAgIFZlY3Rvcjx1bnNpZ25lZCBj
aGFyPiBwaXhlbERhdGE7CisgICAgY2Fpcm9fc3VyZmFjZV93cml0ZV90b19wbmdfc3RyZWFtKHN1
cmZhY2UsIHdyaXRlRnVuY3Rpb24sICZwaXhlbERhdGEpOworICAgIGNvbnN0IHNpemVfdCBkYXRh
TGVuZ3RoID0gcGl4ZWxEYXRhLnNpemUoKTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRh
ID0gcGl4ZWxEYXRhLmRhdGEoKTsKKworICAgIHByaW50ZigiQ29udGVudC1UeXBlOiAlc1xuIiwg
ImltYWdlL3BuZyIpOworICAgIHByaW50ZigiQ29udGVudC1MZW5ndGg6ICVsdVxuIiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgbG9uZz4oZGF0YUxlbmd0aCkpOworCisgICAgY29uc3Qgc2l6ZV90IGJ5
dGVzVG9Xcml0ZUluT25lQ2h1bmsgPSAxIDw8IDE1OworICAgIHNpemVfdCBkYXRhUmVtYWluaW5n
VG9Xcml0ZSA9IGRhdGFMZW5ndGg7CisgICAgd2hpbGUgKGRhdGFSZW1haW5pbmdUb1dyaXRlKSB7
CisgICAgICAgIHNpemVfdCBieXRlc1RvV3JpdGVJblRoaXNDaHVuayA9IHN0ZDo6bWluKGRhdGFS
ZW1haW5pbmdUb1dyaXRlLCBieXRlc1RvV3JpdGVJbk9uZUNodW5rKTsKKyAgICAgICAgc2l6ZV90
IGJ5dGVzV3JpdHRlbiA9IGZ3cml0ZShkYXRhLCAxLCBieXRlc1RvV3JpdGVJblRoaXNDaHVuaywg
c3Rkb3V0KTsKKyAgICAgICAgaWYgKGJ5dGVzV3JpdHRlbiAhPSBieXRlc1RvV3JpdGVJblRoaXND
aHVuaykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkYXRhUmVtYWluaW5nVG9Xcml0ZSAt
PSBieXRlc1dyaXR0ZW47CisgICAgICAgIGRhdGEgKz0gYnl0ZXNXcml0dGVuOworICAgIH0KK30K
Kwordm9pZCBUZXN0SW52b2NhdGlvbjo6ZHVtcFBpeGVsc0FuZENvbXBhcmVXaXRoRXhwZWN0ZWQo
V0tJbWFnZVJlZiB3a0ltYWdlKQoreworICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IFdL
SW1hZ2VDcmVhdGVDYWlyb1N1cmZhY2Uod2tJbWFnZSk7CisKKyAgICBjaGFyIGFjdHVhbEhhc2hb
MzNdOworICAgIGNvbXB1dGVNRDVIYXNoU3RyaW5nRm9yQ2Fpcm9TdXJmYWNlKHN1cmZhY2UsIGFj
dHVhbEhhc2gpOworICAgIGlmICghY29tcGFyZUFjdHVhbEhhc2hUb0V4cGVjdGVkQW5kRHVtcFJl
c3VsdHMoYWN0dWFsSGFzaCkpCisgICAgICAgIGR1bXBCaXRtYXAoc3VyZmFjZSk7CisKKyAgICBj
YWlyb19zdXJmYWNlX2Rlc3Ryb3koc3VyZmFjZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNw
cCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2cvVGVzdEludm9jYXRpb25DRy5jcHAKaW5kZXgg
Y2JhMjkwOC4uMzNmMjQ3NiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9U
ZXN0SW52b2NhdGlvbkNHLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJ
bnZvY2F0aW9uQ0cuY3BwCkBAIC0xMzAsMjQgKzEzMCw5IEBAIHZvaWQgVGVzdEludm9jYXRpb246
OmR1bXBQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKFdLSW1hZ2VSZWYgaW1hZ2UpCiB7CiAg
ICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBjcmVhdGVDR0NvbnRleHRGcm9tSW1hZ2UoaW1hZ2Up
OwogCi0gICAgLy8gQ29tcHV0ZSB0aGUgaGFzaCBvZiB0aGUgYml0bWFwIGNvbnRleHQgcGl4ZWxz
CiAgICAgY2hhciBhY3R1YWxIYXNoWzMzXTsKICAgICBjb21wdXRlTUQ1SGFzaFN0cmluZ0ZvckNv
bnRleHQoY29udGV4dCwgYWN0dWFsSGFzaCk7Ci0gICAgZnByaW50ZihzdGRvdXQsICJcbkFjdHVh
bEhhc2g6ICVzXG4iLCBhY3R1YWxIYXNoKTsKLQotICAgIC8vIENoZWNrIHRoZSBjb21wdXRlZCBo
YXNoIGFnYWluc3QgdGhlIGV4cGVjdGVkIG9uZSBhbmQgZHVtcCBpbWFnZSBvbiBtaXNtYXRjaAot
ICAgIGJvb2wgaGFzaGVzTWF0Y2ggPSBmYWxzZTsKLSAgICBpZiAobV9leHBlY3RlZFBpeGVsSGFz
aC5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgQVNTRVJUKG1fZXhwZWN0ZWRQaXhlbEhhc2gubGVu
Z3RoKCkgPT0gMzIpOwotCi0gICAgICAgIGZwcmludGYoc3Rkb3V0LCAiXG5FeHBlY3RlZEhhc2g6
ICVzXG4iLCBtX2V4cGVjdGVkUGl4ZWxIYXNoLmNfc3RyKCkpOwotCi0gICAgICAgIC8vIEZJWE1F
OiBEbyBjYXNlIGluc2Vuc2l0aXZlIGNvbXBhcmUuCi0gICAgICAgIGlmIChtX2V4cGVjdGVkUGl4
ZWxIYXNoID09IGFjdHVhbEhhc2gpCi0gICAgICAgICAgICBoYXNoZXNNYXRjaCA9IHRydWU7Ci0g
ICAgfQotCi0gICAgaWYgKCFoYXNoZXNNYXRjaCkKKyAgICBpZiAoIWNvbXBhcmVBY3R1YWxIYXNo
VG9FeHBlY3RlZEFuZER1bXBSZXN1bHRzKGFjdHVhbEhhc2gpKQogICAgICAgICBkdW1wQml0bWFw
KGNvbnRleHQpOwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2d0ay9U
ZXN0SW52b2NhdGlvbkd0ay5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0SW52
b2NhdGlvbkd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4NTIwYWIuLjAw
MDAwMDAKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvVGVzdEludm9jYXRpb25HdGsu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0SW52b2NhdGlvbi5oIgotCi1uYW1lc3BhY2UgV1RS
IHsKLQotdm9pZCBUZXN0SW52b2NhdGlvbjo6ZHVtcFBpeGVsc0FuZENvbXBhcmVXaXRoRXhwZWN0
ZWQoV0tJbWFnZVJlZiBpbWFnZSkKLXsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RSCi0tIAoxLjcu
NC4xCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>