<?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>89485</bug_id>
          
          <creation_ts>2012-06-19 10:54:36 -0700</creation_ts>
          <short_desc>[chromium] Create CCScopedTexture class for creating/freeing textures</short_desc>
          <delta_ts>2012-07-09 18:45:17 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>89474</blocked>
    
    <blocked>89667</blocked>
    
    <blocked>90841</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dana Jansens">danakj</reporter>
          <assigned_to name="Dana Jansens">danakj</assigned_to>
          <cc>aelias</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>epenner</cc>
    
    <cc>jamesr</cc>
    
    <cc>piman</cc>
    
    <cc>wjmaclean</cc>
    
    <cc>zlieber</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>652597</commentid>
    <comment_count>0</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-19 10:54:36 -0700</bug_when>
    <thetext>[chromium] Create CCScopedTexture class for creating/freeing textures</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652607</commentid>
    <comment_count>1</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-19 10:59:53 -0700</bug_when>
    <thetext>I have tried to</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652609</commentid>
    <comment_count>2</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-19 11:01:43 -0700</bug_when>
    <thetext>I have tried to explain in the ChangeLog my intension behind proposing this class.

We currently use the TextureAllocator to create/delete textures, but even in the new prioritized texture manager, we have to explicitly manage this memory. This class will fit well into the CCPrioritizedTexture::Backing class, allowing us to be confident about texture deletion without having to code it explicitly.

More importantly, it lets us easily/safely use textures on the impl thread without relying on ManagedTexture objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652610</commentid>
    <comment_count>3</comment_count>
      <attachid>148361</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-19 11:01:50 -0700</bug_when>
    <thetext>Created attachment 148361
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652661</commentid>
    <comment_count>4</comment_count>
      <attachid>148382</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-19 11:48:15 -0700</bug_when>
    <thetext>Created attachment 148382
Patch

added CCScopedTexureTest.CreateScopedTextureForFramebufferAttachment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652698</commentid>
    <comment_count>5</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-19 12:50:24 -0700</bug_when>
    <thetext>I think it might be nice to have this implement a CCScopedResource (or whatever name) interface, and we have a bitmap implementation of something like this class as well, instead of holding on to textureIds and shm handles directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652715</commentid>
    <comment_count>6</comment_count>
      <attachid>148382</attachid>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-06-19 13:09:19 -0700</bug_when>
    <thetext>Comment on attachment 148382
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCScopedTexture.cpp:116
&gt; +void CCScopedTexture::steal(CCScopedTexture&amp; other)

Could we not include this method?  I&apos;ve never liked it.  Any functionality provided by this can be done instead by the texture manager moving around CCScopedTexture* pointers between various lists, and it will be much easier to understand that way.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCScopedTexture.cpp:124
&gt; +unsigned CCScopedTexture::release()

Rename this to leak(), as it&apos;s dangerous, and does something similar to OwnPtr::leakPtr().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652728</commentid>
    <comment_count>7</comment_count>
      <attachid>148382</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-19 13:19:30 -0700</bug_when>
    <thetext>Comment on attachment 148382
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCScopedTexture.cpp:116
&gt;&gt; +void CCScopedTexture::steal(CCScopedTexture&amp; other)
&gt; 
&gt; Could we not include this method?  I&apos;ve never liked it.  Any functionality provided by this can be done instead by the texture manager moving around CCScopedTexture* pointers between various lists, and it will be much easier to understand that way.

Sure! I added this while thinking about trying to plug this into TextureManager but I think I&apos;d rather not at all anyway.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCScopedTexture.cpp:124
&gt;&gt; +unsigned CCScopedTexture::release()
&gt; 
&gt; Rename this to leak(), as it&apos;s dangerous, and does something similar to OwnPtr::leakPtr().

We can drop this entirely then too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652730</commentid>
    <comment_count>8</comment_count>
      <attachid>148405</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-19 13:21:39 -0700</bug_when>
    <thetext>Created attachment 148405
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652744</commentid>
    <comment_count>9</comment_count>
      <attachid>148382</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-06-19 13:39:02 -0700</bug_when>
    <thetext>Comment on attachment 148382
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCScopedTexture.h:66
&gt; +    RefPtr&lt;GraphicsContext3D&gt; m_context;

Is it okay to keep a refptr to the context? Do we always want textures to keep contexts alive?

As we talked about offline, one concern I have with this being used in CCPrioritizedTexture is that this context pointer isn&apos;t safe on the main thread. So if we do use it, we need to be very careful with methods that access the context (in particular the destructor is tricky). Or we can just wait, and see if that class even stays on the main thread for long.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652746</commentid>
    <comment_count>10</comment_count>
      <attachid>148382</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-19 13:43:49 -0700</bug_when>
    <thetext>Comment on attachment 148382
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCScopedTexture.h:66
&gt;&gt; +    RefPtr&lt;GraphicsContext3D&gt; m_context;
&gt; 
&gt; Is it okay to keep a refptr to the context? Do we always want textures to keep contexts alive?
&gt; 
&gt; As we talked about offline, one concern I have with this being used in CCPrioritizedTexture is that this context pointer isn&apos;t safe on the main thread. So if we do use it, we need to be very careful with methods that access the context (in particular the destructor is tricky). Or we can just wait, and see if that class even stays on the main thread for long.

My current use has been in classes that get destroyed when a context is lost, so that works well. But if you wanted to hold onto the CCScopedTexture object across the lifetime of a context loss (and just recreate the texture resource within it), then this would be hard.

I think I should move the GraphicsContext3D context from the constructor to be a parameter on create().

This keeps a RefPtr in the class still, but clear() could release its reference to the pointer, which should be equivalent of zero-ing out the textureId on context-loss in current code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652750</commentid>
    <comment_count>11</comment_count>
      <attachid>148382</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-06-19 13:45:48 -0700</bug_when>
    <thetext>Comment on attachment 148382
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCScopedTexture.cpp:116
&gt;&gt;&gt; +void CCScopedTexture::steal(CCScopedTexture&amp; other)
&gt;&gt; 
&gt;&gt; Could we not include this method?  I&apos;ve never liked it.  Any functionality provided by this can be done instead by the texture manager moving around CCScopedTexture* pointers between various lists, and it will be much easier to understand that way.
&gt; 
&gt; Sure! I added this while thinking about trying to plug this into TextureManager but I think I&apos;d rather not at all anyway.

If we remove then ignore this.

PrioritizedTexture will have a method called ::swap(), rather than ::steal(). The reason for keeping it there was that the instances that need the swap were nested three levels deep in other classes. So to swap the instances themselves would require lots of get/set plumbing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652760</commentid>
    <comment_count>12</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-06-19 13:50:31 -0700</bug_when>
    <thetext>I just talked offline with epenner and we agreed that we shouldn&apos;t pre-emptively include swap() either.  Let&apos;s try and address the problems causing the need for these by refactoring the container classes instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652761</commentid>
    <comment_count>13</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-19 13:51:26 -0700</bug_when>
    <thetext>Nice, was just going to try figure out if we could swap PTM::Backing objects instead :) Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652768</commentid>
    <comment_count>14</comment_count>
      <attachid>148412</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-19 13:53:49 -0700</bug_when>
    <thetext>Created attachment 148412
Patch

Pass the GC3D in to ::create() and clear/deref it on ::clear().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652785</commentid>
    <comment_count>15</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-06-19 14:06:20 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; I just talked offline with epenner and we agreed that we shouldn&apos;t pre-emptively include swap() either.  Let&apos;s try and address the problems causing the need for these by refactoring the container classes instead.

On that thought, even with all the nested classes, it won&apos;t be hard to remove ::swap on PTM. It&apos;s ugly to do a swap at that level, so should minimally be done at a higher level container.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652832</commentid>
    <comment_count>16</comment_count>
      <attachid>148412</attachid>
    <who name="Antoine Labour">piman</who>
    <bug_when>2012-06-19 14:39:27 -0700</bug_when>
    <thetext>Comment on attachment 148412
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCScopedTexture.cpp:110
&gt; +{

Is there a good way to assert that this was called on the same thread as create() ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652852</commentid>
    <comment_count>17</comment_count>
      <attachid>148433</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-19 14:55:54 -0700</bug_when>
    <thetext>Created attachment 148433
Patch

assert that deleteTexture() happens on the same thread as createTexture()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653948</commentid>
    <comment_count>18</comment_count>
      <attachid>148669</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-20 15:40:53 -0700</bug_when>
    <thetext>Created attachment 148669
Patch

When a texture is deleted externally or the context is lost, you may want to set the id to 0 without calling deleteTexture() on it. Adding lose() to explicitly lose the texture without freeing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654852</commentid>
    <comment_count>19</comment_count>
      <attachid>148669</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-21 13:52:25 -0700</bug_when>
    <thetext>Comment on attachment 148669
Patch

Here&apos;s a collection of assorted OO design thoughts and bikesheddery:
* I don&apos;t like all the code duplication between CCScopedTexture and TrackingTextureAllocator.  Is there something wrong with TrackingTextureAllocator?
* prepare vs. create seems like an unnecessary distinction.  I think size and format are only useful for an existing id.
* create sounds too much like static PassOwnPtr&lt;T&gt; create().
* RefPtr&lt;GraphicsContext3D&gt; makes this class unable to be used on the main thread, so we have a lot of functionality that the main thread can&apos;t use.
* I don&apos;t like the way layer renderer capabilities are stored statically.

Here&apos;s a strawperson proposal to simplify this a bit.

// Bag of data holding a potentially allocated texture
// could be reused on main thread side
// could be part of FrameData and serialized safely
// Kind of like what aelias and epenner were proposing on 89667
class TextureInfo {
    id / format / size
    bytes()
}

// Deletes textures when it goes out of scope, provides stub helpers for creation.
class ScopedTexture : TextureInfo {
    // TrackingTextureAllocator already wraps capabilities and context.
    ScopedTexture(TrackingTextureAllocator*)

    // Allocate could fail if texture already allocated?
    // These are just stub functions to call tracking texture allocator&apos;s create functions
    // (May need to adjust setTextureUsageHint to be more explicit)
    bool allocateTexture(size, format)
    bool allocateTextureForFramebufferAttachment(size, format)
    void lose()
    void free()

    TrackingTextureAllocator* // not sure about lifetime issues here, but LRC owns TTA and also owns RSTextureManager which owns ScopedTexture so TTA potentially can&apos;t outlive ScopedTexture?
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659734</commentid>
    <comment_count>20</comment_count>
      <attachid>149991</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-28 13:14:56 -0700</bug_when>
    <thetext>Created attachment 149991
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659735</commentid>
    <comment_count>21</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-28 13:15:22 -0700</bug_when>
    <thetext>Thanks for the proposal! This is more or less what you proposed now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659809</commentid>
    <comment_count>22</comment_count>
      <attachid>150010</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-28 14:10:25 -0700</bug_when>
    <thetext>Created attachment 150010
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664982</commentid>
    <comment_count>23</comment_count>
      <attachid>150010</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-09 10:44:57 -0700</bug_when>
    <thetext>Comment on attachment 150010
Patch

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

Thanks for all these changes.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCScopedTexture.h:41
&gt; +class CCTexture {

Different headers for different classes, please.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCScopedTexture.h:75
&gt; +    void free();
&gt; +    void lose();

bikeshed: s/lose/leak/ to use the same language as smart pointer classes, in that it clears without explicitly deleting? In rereading comments above, aelias suggested this earlier and I like it a lot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665213</commentid>
    <comment_count>24</comment_count>
      <attachid>151329</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-09 15:13:36 -0700</bug_when>
    <thetext>Created attachment 151329
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665214</commentid>
    <comment_count>25</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-09 15:14:25 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 150010 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=150010&amp;action=review
&gt; 
&gt; Thanks for all these changes.

Thanks for reviews :)

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCScopedTexture.h:41
&gt; &gt; +class CCTexture {
&gt; 
&gt; Different headers for different classes, please.

Done.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCScopedTexture.h:75
&gt; &gt; +    void free();
&gt; &gt; +    void lose();
&gt; 
&gt; bikeshed: s/lose/leak/ to use the same language as smart pointer classes, in that it clears without explicitly deleting? In rereading comments above, aelias suggested this earlier and I like it a lot.

Ya, agree with this much.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665224</commentid>
    <comment_count>26</comment_count>
      <attachid>151329</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-09 15:18:41 -0700</bug_when>
    <thetext>Comment on attachment 151329
Patch

R=me.  Looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665361</commentid>
    <comment_count>27</comment_count>
      <attachid>151373</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-09 17:57:58 -0700</bug_when>
    <thetext>Created attachment 151373
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665393</commentid>
    <comment_count>28</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-09 18:43:47 -0700</bug_when>
    <thetext>Committed r122180: &lt;http://trac.webkit.org/changeset/122180&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148361</attachid>
            <date>2012-06-19 11:01:50 -0700</date>
            <delta_ts>2012-06-19 11:48:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89485-20120619140150.patch</filename>
            <type>text/plain</type>
            <size>21726</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwNzE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGY0OTNmMjQ3ZTMyNDRh
NWRmOTM1Yjc0MWZmMDYyZGUxM2EyMjExZi4uZjc3YTExYjczNWZiYjliNzFhZjcwNDI5YjVkN2Fh
ZWM2NTlhYmE5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEyLTA2LTE5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIENDU2NvcGVkVGV4dHVyZSBjbGFzcyBmb3IgY3JlYXRpbmcvZnJlZWluZyB0ZXh0dXJlcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk0ODUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNsYXNz
IHByb3ZpZGVzIGEgc3RhbmRhcmQgd2F5IHRvIGNyZWF0ZSB0ZXh0dXJlIGlkcyBpbiBhIHdheSB0
aGF0CisgICAgICAgIGVuc3VyZXMgdGhleSB3aWxsIGJlIGZyZWVkIGxhdGVyLiBJdCBpcyBtZWFu
dCB0byByZXBsYWNlIHRoZSB1c2Ugb2YKKyAgICAgICAgdGhlIFRleHR1cmVBbGxvY2F0b3IgZm9y
IGFsbG9jYXRpbmcgdGV4dHVyZXMsIGJ5IGFic3RyYWN0aW5nIHRoZQorICAgICAgICBhYmlsaXRp
ZXMgb2YgdGhlIGNsYXNzIGludG8gZWFjaCBDQ1Njb3BlZFRleHR1cmUgb2JqZWN0LiBUaGlzIHBy
b3ZpZGVzCisgICAgICAgIHVzIHdpdGggYSBjZW50cmFsIHBsYWNlIGZvciB0aGUgY29kZSBhcm91
bmQgY3JlYXRpbmcgdGV4dHVyZXMsIGFuZAorICAgICAgICBjb21wdXRpbmcgdGhlIG51bWJlciBv
ZiBieXRlcyB1c2VkIGJ5IGEgdGV4dHVyZS4gSXQgZW5zdXJlcyB0aGF0CisgICAgICAgIHdlIGNh
biBlYXNpbHkga25vdyBob3cgbWFueSBieXRlcyBhbnkgdGV4dHVyZSBvYmplY3QgaXMgdXNpbmcu
CisKKyAgICAgICAgVGhpcyBvYmplY3Qgd291bGQgYmUgdXNlZCBpbiBwbGFjZSBvZiBzdG9yaW5n
IGFuIHVuc2lnbmVkIHRleHR1cmVJZAorICAgICAgICBpbiBvdGhlciBjbGFzc2VzLCBhbmQgd2ls
bCByZXBsYWNlIHRoZSB1c2Ugb2YgTWFuYWdlZFRleHR1cmVzIGZvcgorICAgICAgICBSZW5kZXJQ
YXNzZXMsIGFsbG93aW5nIHVzIHRvIGRlY291cGxlIFJlbmRlclBhc3NlcyBmcm9tIHRoZQorICAg
ICAgICBub3ctb2Jzb2xldGUgVGV4dHVyZU1hbmFnZXIuCisKKyAgICAgICAgVW5pdCB0ZXN0czog
Q0NTY29wZWRUZXh1cmVUZXN0Lk5ld1Njb3BlZFRleHR1cmUKKyAgICAgICAgICAgICAgICAgICAg
Q0NTY29wZWRUZXh1cmVUZXN0LlByZXBhcmVTY29wZWRUZXh0dXJlCisgICAgICAgICAgICAgICAg
ICAgIENDU2NvcGVkVGV4dXJlVGVzdC5DcmVhdGVTY29wZWRUZXh0dXJlCisgICAgICAgICAgICAg
ICAgICAgIENDU2NvcGVkVGV4dXJlVGVzdC5TY29wZWRUZXh0dXJlSXNEZWxldGVkCisgICAgICAg
ICAgICAgICAgICAgIENDU2NvcGVkVGV4dXJlVGVzdC5TY29wZWRUZXh0dXJlSXNTdG9sZW4KKwor
ICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1Njb3BlZFRleHR1cmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NTY29wZWRUZXh0dXJlOjpDQ1Njb3BlZFRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NTY29wZWRUZXh0dXJlOjp+Q0NTY29wZWRUZXh0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OnRleHR1cmVUb1N0b3JhZ2VGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6
aXNUZXh0dXJlRm9ybWF0U3VwcG9ydGVkRm9yU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1Njb3BlZFRleHR1cmU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njb3BlZFRleHR1
cmU6OnByZXBhcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY29wZWRUZXh0dXJlOjpjbGVhcik6
CisgICAgICAgIChXZWJDb3JlOjpDQ1Njb3BlZFRleHR1cmU6OnN0ZWFsKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDU2NvcGVkVGV4dHVyZTo6cmVsZWFzZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Nj
b3BlZFRleHR1cmU6OmJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2NvcGVkVGV4dHVyZTo6
bWF5YmVCeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njb3BlZFRleHR1cmU6Om1lbW9yeVNp
emVCeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njb3BlZFRleHR1cmU6OmluaXRpYWxpemVD
YXBhYmlsaXRpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
U2NvcGVkVGV4dHVyZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ0NT
Y29wZWRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2NvcGVkVGV4dHVyZTo6aWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NTY29wZWRUZXh0dXJlOjpzaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDU2NvcGVkVGV4dHVyZTo6Zm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2NvcGVk
VGV4dHVyZTo6b3BlcmF0b3IgYm9vbCk6CisKIDIwMTItMDYtMTkgIE1hcnRpbiBSb2JpbnNvbiAg
PG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIDIwMTItMDYtMTkgIE1hcnRpbiBSb2Jp
bnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRl
eCAwNmU5YWNiNzQ0NDQ0NTk0OTg0YzY3MWExODNlODQ3ZWI5ZjU1N2JkLi4zM2ZiYzU3NDg3Mjkw
YjU1MDYxOGNiZmI5YzI1YjM1MDNmY2IyZDAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE5IEBACisyMDEyLTA2LTE5ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3JlYXRlIENDU2NvcGVkVGV4dHVyZSBjbGFz
cyBmb3IgY3JlYXRpbmcvZnJlZWluZyB0ZXh0dXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk0ODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL0ND
U2NvcGVkVGV4dHVyZVRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
IChXZWJLaXQ6OlRFU1QpOgorICAgICAgICAoVHJhY2tpbmdXZWJHcmFwaGljc0NvbnRleHQzRCk6
CisgICAgICAgIChXZWJLaXQ6OlRyYWNraW5nV2ViR3JhcGhpY3NDb250ZXh0M0Q6OlRyYWNraW5n
V2ViR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViS2l0OjpUcmFja2luZ1dlYkdyYXBo
aWNzQ29udGV4dDNEOjpjcmVhdGVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpU
cmFja2luZ1dlYkdyYXBoaWNzQ29udGV4dDNEOjpudW1UZXh0dXJlcyk6CisKIDIwMTItMDYtMTkg
IEFteSBPdXN0ZXJob3V0ICA8YW91c3RlcmhAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJv
bWl1bV0gU3R5bGUgRml4IGluIFdlYkRldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCmluZGV4IDBjMmU4ZTNlMTA5NmQ2NzY5MzYwNjhhYzdmMDFhNmI3M2VjNjkwOGEuLmUx
MmY4ZGQxZGNjYjQwZDY1MmQyZjgwZjU1YjkxNTAyZTE5ZDcyODkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
QEAgLTM3NTIsNiArMzc1Miw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NTY2hlZHVsZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTY2hlZHVsZXJTdGF0ZU1hY2hpbmUuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NjaGVkdWxlclN0YXRlTWFjaGluZS5oJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njb3BlZFRleHR1
cmUuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Nj
b3BlZFRleHR1cmUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NTY29wZWRUaHJlYWRQcm94eS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhckxheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFyTGF5ZXJJbXBsLmgnLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
Y29wZWRUZXh0dXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDU2NvcGVkVGV4dHVyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmJhMjBiYTA4OGRmM2RhNGYx
ODMxNGFhODJlMGUxN2ZkMWI5MTAyOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGV4dHVyZS5jcHAKQEAgLTAs
MCArMSwxNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9D
Q1Njb3BlZFRleHR1cmUuaCIKKworI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgiCisj
aW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworQ0NTY29wZWRUZXh0dXJlOjpDQ1Njb3BlZFRleHR1cmUoUGFzc1JlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gY29udGV4dCkKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV90ZXh0
dXJlSWQoMCkKKyAgICAsIG1fZm9ybWF0KDApCisgICAgLCBtX2ZvckZyYW1lYnVmZmVyQXR0YWNo
bWVudChmYWxzZSkKK3sKKyAgICBBU1NFUlQobV9jb250ZXh0KTsKK30KKworQ0NTY29wZWRUZXh0
dXJlOjp+Q0NTY29wZWRUZXh0dXJlKCkKK3sKKyAgICBjbGVhcigpOworfQorCitzdGF0aWMgaW5s
aW5lIEdDM0RlbnVtIHRleHR1cmVUb1N0b3JhZ2VGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1h
dCkKK3sKKyAgICBHQzNEZW51bSBzdG9yYWdlRm9ybWF0ID0gRXh0ZW5zaW9uczNEOjpSR0JBOF9P
RVM7CisgICAgc3dpdGNoICh0ZXh0dXJlRm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQToKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkJHUkFf
RVhUOgorICAgICAgICBzdG9yYWdlRm9ybWF0ID0gRXh0ZW5zaW9uczNEQ2hyb21pdW06OkJHUkE4
X0VYVDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBzdG9yYWdlRm9y
bWF0OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNUZXh0dXJlRm9ybWF0U3VwcG9ydGVkRm9y
U3RvcmFnZShHQzNEZW51bSBmb3JtYXQpCit7CisgICAgcmV0dXJuIGZvcm1hdCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSB8fCBmb3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpCR1JBX0VYVDsKK30K
KworYm9vbCBDQ1Njb3BlZFRleHR1cmU6OmNyZWF0ZSgpCit7CisgICAgQVNTRVJUKCFtX3RleHR1
cmVJZCk7CisgICAgQVNTRVJUKCFtX3NpemUuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV9mb3Jt
YXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQiB8fCBtX2Zvcm1hdCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQSB8fCBtX2Zvcm1hdCA9PSBFeHRlbnNpb25zM0Q6OkJHUkFfRVhUKTsKKworICAg
IG1fdGV4dHVyZUlkID0gR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5jcmVhdGVUZXh0dXJlKCkp
OworCisgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQpKTsKKyAgICAvLyBEbyBiYXNp
YyBsaW5lYXIgZmlsdGVyaW5nIG9uIHJlc2l6ZS4KKyAgICBHTEMobV9jb250ZXh0LmdldCgpLCBt
X2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpM
SU5FQVIpKTsKKyAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPnRleFBhcmFtZXRl
cmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKKyAgICAvLyBOUE9U
IHRleHR1cmVzIGluIEdMIEVTIG9ubHkgd29yayB3aGVuIHRoZSB3cmFwIG1vZGUgaXMgc2V0IHRv
IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFLgorICAgIEdMQyhtX2NvbnRleHQuZ2V0
KCksIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6
Q0xBTVBfVE9fRURHRSkpOworICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+dGV4
UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSkpOwor
CisgICAgaWYgKG1fdXNlVGV4dHVyZVVzYWdlSGludCAmJiBtX2ZvckZyYW1lYnVmZmVyQXR0YWNo
bWVudCkKKyAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT50ZXhQYXJhbWV0
ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6
R0xfVEVYVFVSRV9VU0FHRV9BTkdMRSwgRXh0ZW5zaW9uczNEQ2hyb21pdW06OkdMX0ZSQU1FQlVG
RkVSX0FUVEFDSE1FTlRfQU5HTEUpKTsKKyAgICBpZiAobV91c2VUZXh0dXJlU3RvcmFnZUV4dCAm
JiBpc1RleHR1cmVGb3JtYXRTdXBwb3J0ZWRGb3JTdG9yYWdlKG1fZm9ybWF0KSkgeworICAgICAg
ICBFeHRlbnNpb25zM0RDaHJvbWl1bSogZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PEV4dGVuc2lv
bnMzRENocm9taXVtKj4obV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkpOworICAgICAgICBHQzNE
ZW51bSBzdG9yYWdlRm9ybWF0ID0gdGV4dHVyZVRvU3RvcmFnZUZvcm1hdChtX2Zvcm1hdCk7Cisg
ICAgICAgIGV4dGVuc2lvbnMtPnRleFN0b3JhZ2UyREVYVChHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgMSwgc3RvcmFnZUZvcm1hdCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQo
KSk7CisgICAgfSBlbHNlCisgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+
dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwg
bV9mb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAsIG1fZm9ybWF0LCBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkpOworICAgIEdMQyhtX2NvbnRleHQuZ2V0
KCksIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IDApKTsKKworICAgIHJldHVybiBtX3RleHR1cmVJZDsKK30KKwordm9pZCBDQ1Njb3BlZFRleHR1
cmU6OnByZXBhcmUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgR0MzRGVudW0gZm9ybWF0LCBib29sIGZv
ckZyYW1lYnVmZmVyQXR0YWNobWVudCkKK3sKKyAgICBBU1NFUlQoIW1fdGV4dHVyZUlkKTsKKwor
ICAgIG1fc2l6ZSA9IHNpemU7CisgICAgbV9mb3JtYXQgPSBmb3JtYXQ7CisgICAgbV9mb3JGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnQgPSBmb3JGcmFtZWJ1ZmZlckF0dGFjaG1lbnQ7Cit9CisKK3ZvaWQg
Q0NTY29wZWRUZXh0dXJlOjpjbGVhcigpCit7CisgICAgaWYgKG1fdGV4dHVyZUlkKQorICAgICAg
ICBtX2NvbnRleHQtPmRlbGV0ZVRleHR1cmUobV90ZXh0dXJlSWQpOworICAgIG1fdGV4dHVyZUlk
ID0gMDsKK30KKwordm9pZCBDQ1Njb3BlZFRleHR1cmU6OnN0ZWFsKENDU2NvcGVkVGV4dHVyZSYg
b3RoZXIpCit7CisgICAgQVNTRVJUKCFtX3RleHR1cmVJZCk7CisKKyAgICBwcmVwYXJlKG90aGVy
Lm1fc2l6ZSwgb3RoZXIubV9mb3JtYXQsIG90aGVyLm1fZm9yRnJhbWVidWZmZXJBdHRhY2htZW50
KTsKKyAgICBtX3RleHR1cmVJZCA9IG90aGVyLnJlbGVhc2UoKTsKK30KKwordW5zaWduZWQgQ0NT
Y29wZWRUZXh0dXJlOjpyZWxlYXNlKCkKK3sKKyAgICB1bnNpZ25lZCByZWxlYXNlZFRleHR1cmVJ
ZCA9IG1fdGV4dHVyZUlkOworICAgIG1fdGV4dHVyZUlkID0gMDsKKyAgICByZXR1cm4gcmVsZWFz
ZWRUZXh0dXJlSWQ7Cit9CisKK3NpemVfdCBDQ1Njb3BlZFRleHR1cmU6OmJ5dGVzKCkgY29uc3QK
K3sKKyAgICBpZiAoIW1fdGV4dHVyZUlkKQorICAgICAgICByZXR1cm4gMHU7CisKKyAgICByZXR1
cm4gbWF5YmVCeXRlcygpOworfQorCitzaXplX3QgQ0NTY29wZWRUZXh0dXJlOjptYXliZUJ5dGVz
KCkgY29uc3QKK3sKKyAgICBpZiAobV9zaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDB1
OworCisgICAgcmV0dXJuIENDU2NvcGVkVGV4dHVyZTo6bWVtb3J5U2l6ZUJ5dGVzKG1fc2l6ZSwg
bV9mb3JtYXQpOworfQorCitzaXplX3QgQ0NTY29wZWRUZXh0dXJlOjptZW1vcnlTaXplQnl0ZXMo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgR0MzRGVudW0gZm9ybWF0KQoreworICAgIHVuc2lnbmVkIGlu
dCBjb21wb25lbnRzUGVyUGl4ZWw7CisgICAgdW5zaWduZWQgaW50IGJ5dGVzUGVyQ29tcG9uZW50
OworICAgIGlmICghR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1l
dGVycyhmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAmY29tcG9uZW50
c1BlclBpeGVsLCAmYnl0ZXNQZXJDb21wb25lbnQpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4gMHU7CisgICAgfQorICAgIHJldHVybiBjb21wb25lbnRz
UGVyUGl4ZWwgKiBieXRlc1BlckNvbXBvbmVudCAqIHNpemUud2lkdGgoKSAqIHNpemUuaGVpZ2h0
KCk7Cit9CisKK2Jvb2wgQ0NTY29wZWRUZXh0dXJlOjptX3VzZVRleHR1cmVVc2FnZUhpbnQgPSBm
YWxzZTsKK2Jvb2wgQ0NTY29wZWRUZXh0dXJlOjptX3VzZVRleHR1cmVTdG9yYWdlRXh0ID0gZmFs
c2U7CisKK3ZvaWQgQ0NTY29wZWRUZXh0dXJlOjppbml0aWFsaXplQ2FwYWJpbGl0aWVzKGNvbnN0
IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcykKK3sKKyAgICBtX3VzZVRl
eHR1cmVVc2FnZUhpbnQgPSBjYXBhYmlsaXRpZXMudXNpbmdUZXh0dXJlVXNhZ2VIaW50OworICAg
IG1fdXNlVGV4dHVyZVN0b3JhZ2VFeHQgPSBjYXBhYmlsaXRpZXMudXNpbmdUZXh0dXJlU3RvcmFn
ZUV4dGVuc2lvbjsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUZXh0dXJlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njb3BlZFRleHR1cmUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40OTc0NDQ3MTIzNTUwZWZkYmFhZjMxZmZiZTNmNjAwYzA0ZGZjOWMyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29w
ZWRUZXh0dXJlLmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NTY29wZWRUZXh0
dXJlX2gKKyNkZWZpbmUgQ0NTY29wZWRUZXh0dXJlX2gKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNELmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IExheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXM7CisKK2NsYXNzIENDU2NvcGVkVGV4dHVyZSB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoQ0NTY29wZWRUZXh0dXJlKTsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBDQ1Njb3BlZFRl
eHR1cmUoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4pOworICAgIH5DQ1Njb3BlZFRleHR1
cmUoKTsKKworICAgIHZvaWQgcHJlcGFyZShjb25zdCBJbnRTaXplJiwgR0MzRGVudW0gZm9ybWF0
LCBib29sIGZvckZyYW1lYnVmZmVyQXR0YWNobWVudCA9IGZhbHNlKTsKKworICAgIGJvb2wgY3Jl
YXRlKCk7CisgICAgdm9pZCBjbGVhcigpOworCisgICAgdm9pZCBzdGVhbChDQ1Njb3BlZFRleHR1
cmUmKTsKKworICAgIHVuc2lnbmVkIGlkKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlSWQ7IH0K
KyAgICBjb25zdCBJbnRTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAg
R0MzRGVudW0gZm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9mb3JtYXQ7IH0KKworICAgIHNpemVf
dCBieXRlcygpIGNvbnN0OworICAgIHNpemVfdCBtYXliZUJ5dGVzKCkgY29uc3Q7CisKKyAgICBv
cGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlSWQ7IH0KKworICAgIHN0YXRp
YyBzaXplX3QgbWVtb3J5U2l6ZUJ5dGVzKGNvbnN0IEludFNpemUmLCBHQzNEZW51bSBmb3JtYXQp
OworCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUNhcGFiaWxpdGllcyhjb25zdCBMYXllclJl
bmRlcmVyQ2FwYWJpbGl0aWVzJik7CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgcmVsZWFzZSgp
OworCisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CisgICAgdW5zaWdu
ZWQgbV90ZXh0dXJlSWQ7CisgICAgSW50U2l6ZSBtX3NpemU7CisgICAgR0MzRGVudW0gbV9mb3Jt
YXQ7CisgICAgYm9vbCBtX2ZvckZyYW1lYnVmZmVyQXR0YWNobWVudDsKKworICAgIHN0YXRpYyBi
b29sIG1fdXNlVGV4dHVyZVVzYWdlSGludDsKKyAgICBzdGF0aWMgYm9vbCBtX3VzZVRleHR1cmVT
dG9yYWdlRXh0OworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBp
CmluZGV4IDU0OWZkZmE0NGI4NGFlMWNhNzUxYWRlNDQyN2MzZDdjOGNjOThhNTUuLmNmNGZkOTEw
ZDFmNGVkNzgxZTI1ZDkwNDY4ZjY1Mjk1ZDIzMzdiNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwaQpAQCAtODYsNiArODYsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0NDU2NoZWR1bGVy
U3RhdGVNYWNoaW5lVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDU2NoZWR1bGVyVGVz
dENvbW1vbi5oJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1NjaGVkdWxlclRlc3QuY3BwJywKKyAg
ICAgICAgICAgICd0ZXN0cy9DQ1Njb3BlZFRleHR1cmVUZXN0LmNwcCcsCiAgICAgICAgICAgICAn
dGVzdHMvQ0NTaW5nbGVUaHJlYWRQcm94eVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9D
Q1NvbGlkQ29sb3JMYXllckltcGxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NUZXN0
Q29tbW9uLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1Nj
b3BlZFRleHR1cmVUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NTY29w
ZWRUZXh0dXJlVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGM0NWRmZWI3Y2NiYTkwNjI4NWY4YWZlYjY3
NWM0MjY4YTY4MjdhMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NTY29wZWRUZXh0dXJlVGVzdC5jcHAKQEAgLTAsMCArMSwxOTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDU2NvcGVkVGV4dHVy
ZS5oIgorCisjaW5jbHVkZSAiRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUu
aCIKKworI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4K
KyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNp
bmcgbmFtZXNwYWNlIFdlYktpdDsKKworbmFtZXNwYWNlIHsKKworVEVTVChDQ1Njb3BlZFRleHR1
cmVUZXN0LCBOZXdTY29wZWRUZXh0dXJlKQoreworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250
ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIobmV3IEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCgp
KSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKworICAg
IENDU2NvcGVkVGV4dHVyZSB0ZXh0dXJlKGNvbnRleHQpOworCisgICAgLy8gTmV3IHNjb3BlZCB0
ZXh0dXJlcyBkbyBub3QgaG9sZCBhIHRleHR1cmUgeWV0LgorICAgIEVYUEVDVF9GQUxTRSh0ZXh0
dXJlKTsKKyAgICBFWFBFQ1RfRVEoMHUsIHRleHR1cmUuaWQoKSk7CisKKyAgICAvLyBOZXcgc2Nv
cGVkIHRleHR1cmVzIGRvIG5vdCBoYXZlIGEgc2l6ZSB5ZXQuCisgICAgRVhQRUNUX0VRKEludFNp
emUoKSwgdGV4dHVyZS5zaXplKCkpOworICAgIEVYUEVDVF9FUSgwdSwgdGV4dHVyZS5tYXliZUJ5
dGVzKCkpOworfQorCitURVNUKENDU2NvcGVkVGV4dHVyZVRlc3QsIFByZXBhcmVTY29wZWRUZXh0
dXJlKQoreworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRv
cHRQdHIobmV3IEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCgpKSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKworICAgIENDU2NvcGVkVGV4dHVyZSB0ZXh0
dXJlKGNvbnRleHQpOworICAgIHRleHR1cmUucHJlcGFyZShJbnRTaXplKDMwLCAzMCksIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBKTsKKworICAgIC8vIFRoZSB0ZXh0dXJlIGhhcyBhbiB1bmFsbG9j
YXRlZCBieXRlLXNpemUgbm93LgorICAgIHNpemVfdCBleHBlY3RlZEJ5dGVzID0gMzAgKiAzMCAq
IDQ7CisgICAgRVhQRUNUX0VRKGV4cGVjdGVkQnl0ZXMsIHRleHR1cmUubWF5YmVCeXRlcygpKTsK
KworICAgIC8vIEJ1dCBub3QgYW4gYWxsb2NhdGVkIGJ5dGUtc2l6ZS4KKyAgICBFWFBFQ1RfRVEo
MHUsIHRleHR1cmUuYnl0ZXMoKSk7CisKKyAgICBFWFBFQ1RfRkFMU0UodGV4dHVyZSk7CisgICAg
RVhQRUNUX0VRKEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCB0ZXh0dXJlLmZvcm1hdCgpKTsKKyAg
ICBFWFBFQ1RfRVEoSW50U2l6ZSgzMCwgMzApLCB0ZXh0dXJlLnNpemUoKSk7Cit9CisKK1RFU1Qo
Q0NTY29wZWRUZXh0dXJlVGVzdCwgQ3JlYXRlU2NvcGVkVGV4dHVyZSkKK3sKKyAgICBSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNy
ZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBGYWtlV2ViR3Jh
cGhpY3NDb250ZXh0M0QoKSksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9z
dFdpbmRvdyk7CisKKyAgICBDQ1Njb3BlZFRleHR1cmUgdGV4dHVyZShjb250ZXh0KTsKKyAgICB0
ZXh0dXJlLnByZXBhcmUoSW50U2l6ZSgzMCwgMzApLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7
CisgICAgdGV4dHVyZS5jcmVhdGUoKTsKKworICAgIC8vIFRoZSB0ZXh0dXJlIGhhcyBhbiBhbGxv
Y2F0ZWQgYnl0ZS1zaXplIG5vdy4KKyAgICBzaXplX3QgZXhwZWN0ZWRCeXRlcyA9IDMwICogMzAg
KiA0OworICAgIEVYUEVDVF9FUShleHBlY3RlZEJ5dGVzLCB0ZXh0dXJlLm1heWJlQnl0ZXMoKSk7
CisgICAgRVhQRUNUX0VRKGV4cGVjdGVkQnl0ZXMsIHRleHR1cmUuYnl0ZXMoKSk7CisKKyAgICBF
WFBFQ1RfVFJVRSh0ZXh0dXJlKTsKKyAgICBFWFBFQ1RfRVEoR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkEsIHRleHR1cmUuZm9ybWF0KCkpOworICAgIEVYUEVDVF9FUShJbnRTaXplKDMwLCAzMCksIHRl
eHR1cmUuc2l6ZSgpKTsKK30KKworLy8gRmFrZSBXZWJHcmFwaGljc0NvbnRleHQzRCB0aGF0IHRy
YWNrcyB0aGUgbnVtYmVyIG9mIHRleHR1cmVzIGluIHVzZS4KK2NsYXNzIFRyYWNraW5nV2ViR3Jh
cGhpY3NDb250ZXh0M0QgOiBwdWJsaWMgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsKK3B1Ymxp
YzoKKyAgICBUcmFja2luZ1dlYkdyYXBoaWNzQ29udGV4dDNEKCkKKyAgICAgICAgOiBtX25leHRU
ZXh0dXJlSWQoMSkKKyAgICAgICAgLCBtX251bVRleHR1cmVzKDApCisgICAgeyB9CisKKyAgICB2
aXJ0dWFsIFdlYkdMSWQgY3JlYXRlVGV4dHVyZSgpIE9WRVJSSURFCisgICAgeworICAgICAgICBX
ZWJHTElkIGlkID0gbV9uZXh0VGV4dHVyZUlkOworICAgICAgICArK21fbmV4dFRleHR1cmVJZDsK
KworICAgICAgICBtX3RleHR1cmVzLnNldChpZCwgdHJ1ZSk7CisgICAgICAgICsrbV9udW1UZXh0
dXJlczsKKyAgICAgICAgcmV0dXJuIGlkOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVUZXh0dXJlKFdlYkdMSWQgaWQpIE9WRVJSSURFCisgICAgeworICAgICAgICBpZiAoIW1fdGV4
dHVyZXMuZ2V0KGlkKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX3RleHR1cmVz
LnNldChpZCwgZmFsc2UpOworICAgICAgICAtLW1fbnVtVGV4dHVyZXM7CisgICAgfQorCisgICAg
UGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlR3JhcGhpY3NDb250ZXh0KCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBo
aWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKHRoaXMpLCBHcmFwaGljc0NvbnRleHQz
RDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOworICAgIH0KKworICAgIHVuc2lnbmVkIG51
bVRleHR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9udW1UZXh0dXJlczsgfQorCitwcml2YXRlOgor
ICAgIFdlYkdMSWQgbV9uZXh0VGV4dHVyZUlkOworICAgIEhhc2hNYXA8V2ViR0xJZCwgYm9vbD4g
bV90ZXh0dXJlczsKKyAgICB1bnNpZ25lZCBtX251bVRleHR1cmVzOworfTsKKworVEVTVChDQ1Nj
b3BlZFRleHR1cmVUZXN0LCBTY29wZWRUZXh0dXJlSXNEZWxldGVkKQoreworICAgIFRyYWNraW5n
V2ViR3JhcGhpY3NDb250ZXh0M0QqIHRyYWNraW5nQ29udGV4dCA9IG5ldyBUcmFja2luZ1dlYkdy
YXBoaWNzQ29udGV4dDNEOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9
IHRyYWNraW5nQ29udGV4dC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisKKyAgICB7CisgICAg
ICAgIENDU2NvcGVkVGV4dHVyZSB0ZXh0dXJlKGNvbnRleHQpOworICAgICAgICB0ZXh0dXJlLnBy
ZXBhcmUoSW50U2l6ZSgzMCwgMzApLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7CisKKyAgICAg
ICAgRVhQRUNUX0VRKDB1LCB0cmFja2luZ0NvbnRleHQtPm51bVRleHR1cmVzKCkpOworICAgICAg
ICB0ZXh0dXJlLmNyZWF0ZSgpOworICAgICAgICBFWFBFQ1RfVFJVRSh0ZXh0dXJlKTsKKyAgICAg
ICAgRVhQRUNUX0VRKDF1LCB0cmFja2luZ0NvbnRleHQtPm51bVRleHR1cmVzKCkpOworICAgIH0K
KworICAgIEVYUEVDVF9FUSgwdSwgdHJhY2tpbmdDb250ZXh0LT5udW1UZXh0dXJlcygpKTsKKwor
ICAgIHsKKyAgICAgICAgQ0NTY29wZWRUZXh0dXJlIHRleHR1cmUoY29udGV4dCk7CisgICAgICAg
IHRleHR1cmUucHJlcGFyZShJbnRTaXplKDMwLCAzMCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
KTsKKworICAgICAgICBFWFBFQ1RfRVEoMHUsIHRyYWNraW5nQ29udGV4dC0+bnVtVGV4dHVyZXMo
KSk7CisgICAgICAgIHRleHR1cmUuY3JlYXRlKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKHRleHR1
cmUpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIHRyYWNraW5nQ29udGV4dC0+bnVtVGV4dHVyZXMo
KSk7CisgICAgICAgIHRleHR1cmUuY2xlYXIoKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCB0cmFj
a2luZ0NvbnRleHQtPm51bVRleHR1cmVzKCkpOworICAgIH0KK30KKworVEVTVChDQ1Njb3BlZFRl
eHR1cmVUZXN0LCBTY29wZWRUZXh0dXJlSXNTdG9sZW4pCit7CisgICAgVHJhY2tpbmdXZWJHcmFw
aGljc0NvbnRleHQzRCogdHJhY2tpbmdDb250ZXh0ID0gbmV3IFRyYWNraW5nV2ViR3JhcGhpY3ND
b250ZXh0M0Q7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gdHJhY2tp
bmdDb250ZXh0LT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKworICAgIENDU2NvcGVkVGV4dHVy
ZSBzdGVhbGVyKGNvbnRleHQpOworCisgICAgeworICAgICAgICBDQ1Njb3BlZFRleHR1cmUgdGV4
dHVyZShjb250ZXh0KTsKKyAgICAgICAgdGV4dHVyZS5wcmVwYXJlKEludFNpemUoMzAsIDMwKSwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpOworCisgICAgICAgIEVYUEVDVF9FUSgwdSwgdHJhY2tp
bmdDb250ZXh0LT5udW1UZXh0dXJlcygpKTsKKyAgICAgICAgdGV4dHVyZS5jcmVhdGUoKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUodGV4dHVyZSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgdHJhY2tp
bmdDb250ZXh0LT5udW1UZXh0dXJlcygpKTsKKworICAgICAgICBzdGVhbGVyLnN0ZWFsKHRleHR1
cmUpOworICAgICAgICBFWFBFQ1RfRkFMU0UodGV4dHVyZSk7CisgICAgICAgIEVYUEVDVF9UUlVF
KHN0ZWFsZXIpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIHRyYWNraW5nQ29udGV4dC0+bnVtVGV4
dHVyZXMoKSk7CisKKyAgICAgICAgdGV4dHVyZS5jbGVhcigpOworICAgICAgICBFWFBFQ1RfRVEo
MXUsIHRyYWNraW5nQ29udGV4dC0+bnVtVGV4dHVyZXMoKSk7CisgICAgfQorCisgICAgRVhQRUNU
X0VRKDF1LCB0cmFja2luZ0NvbnRleHQtPm51bVRleHR1cmVzKCkpOworICAgIHN0ZWFsZXIuY2xl
YXIoKTsKKyAgICBFWFBFQ1RfRVEoMHUsIHRyYWNraW5nQ29udGV4dC0+bnVtVGV4dHVyZXMoKSk7
Cit9CisKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148382</attachid>
            <date>2012-06-19 11:48:15 -0700</date>
            <delta_ts>2012-06-19 13:53:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89485-20120619144815.patch</filename>
            <type>text/plain</type>
            <size>24719</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwNzE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGY0OTNmMjQ3ZTMyNDRh
NWRmOTM1Yjc0MWZmMDYyZGUxM2EyMjExZi4uZGY2YmM4MzIzMGU2MTE4NGRhN2FjYjM1ZGMzZmMz
NzFmOTZlZjhhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDEyLTA2LTE5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIENDU2NvcGVkVGV4dHVyZSBjbGFzcyBmb3IgY3JlYXRpbmcvZnJlZWluZyB0ZXh0dXJlcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk0ODUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNsYXNz
IHByb3ZpZGVzIGEgc3RhbmRhcmQgd2F5IHRvIGNyZWF0ZSB0ZXh0dXJlIGlkcyBpbiBhIHdheSB0
aGF0CisgICAgICAgIGVuc3VyZXMgdGhleSB3aWxsIGJlIGZyZWVkIGxhdGVyLiBJdCBpcyBtZWFu
dCB0byByZXBsYWNlIHRoZSB1c2Ugb2YKKyAgICAgICAgdGhlIFRleHR1cmVBbGxvY2F0b3IgZm9y
IGFsbG9jYXRpbmcgdGV4dHVyZXMsIGJ5IGFic3RyYWN0aW5nIHRoZQorICAgICAgICBhYmlsaXRp
ZXMgb2YgdGhlIGNsYXNzIGludG8gZWFjaCBDQ1Njb3BlZFRleHR1cmUgb2JqZWN0LiBUaGlzIHBy
b3ZpZGVzCisgICAgICAgIHVzIHdpdGggYSBjZW50cmFsIHBsYWNlIGZvciB0aGUgY29kZSBhcm91
bmQgY3JlYXRpbmcgdGV4dHVyZXMsIGFuZAorICAgICAgICBjb21wdXRpbmcgdGhlIG51bWJlciBv
ZiBieXRlcyB1c2VkIGJ5IGEgdGV4dHVyZS4gSXQgZW5zdXJlcyB0aGF0CisgICAgICAgIHdlIGNh
biBlYXNpbHkga25vdyBob3cgbWFueSBieXRlcyBhbnkgdGV4dHVyZSBvYmplY3QgaXMgdXNpbmcu
CisKKyAgICAgICAgVGhpcyBvYmplY3Qgd291bGQgYmUgdXNlZCBpbiBwbGFjZSBvZiBzdG9yaW5n
IGFuIHVuc2lnbmVkIHRleHR1cmVJZAorICAgICAgICBpbiBvdGhlciBjbGFzc2VzLCBhbmQgd2ls
bCByZXBsYWNlIHRoZSB1c2Ugb2YgTWFuYWdlZFRleHR1cmVzIGZvcgorICAgICAgICBSZW5kZXJQ
YXNzZXMsIGFsbG93aW5nIHVzIHRvIGRlY291cGxlIFJlbmRlclBhc3NlcyBmcm9tIHRoZQorICAg
ICAgICBub3ctb2Jzb2xldGUgVGV4dHVyZU1hbmFnZXIuCisKKyAgICAgICAgVW5pdCB0ZXN0czog
Q0NTY29wZWRUZXh1cmVUZXN0Lk5ld1Njb3BlZFRleHR1cmUKKyAgICAgICAgICAgICAgICAgICAg
Q0NTY29wZWRUZXh1cmVUZXN0LlByZXBhcmVTY29wZWRUZXh0dXJlCisgICAgICAgICAgICAgICAg
ICAgIENDU2NvcGVkVGV4dXJlVGVzdC5DcmVhdGVTY29wZWRUZXh0dXJlCisgICAgICAgICAgICAg
ICAgICAgIENDU2NvcGVkVGV4dXJlVGVzdC5TY29wZWRUZXh0dXJlSXNEZWxldGVkCisgICAgICAg
ICAgICAgICAgICAgIENDU2NvcGVkVGV4dXJlVGVzdC5TY29wZWRUZXh0dXJlSXNTdG9sZW4KKyAg
ICAgICAgICAgICAgICAgICAgQ0NTY29wZWRUZXh1cmVUZXN0LkNyZWF0ZVNjb3BlZFRleHR1cmVG
b3JGcmFtZWJ1ZmZlckF0dGFjaG1lbnQKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njb3BlZFRleHR1cmUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY29wZWRUZXh0
dXJlOjpDQ1Njb3BlZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY29wZWRUZXh0dXJl
Ojp+Q0NTY29wZWRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OnRleHR1cmVUb1N0b3JhZ2VG
b3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6aXNUZXh0dXJlRm9ybWF0U3VwcG9ydGVkRm9yU3Rv
cmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njb3BlZFRleHR1cmU6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1Njb3BlZFRleHR1cmU6OnByZXBhcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NTY29wZWRUZXh0dXJlOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njb3BlZFRl
eHR1cmU6OnN0ZWFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2NvcGVkVGV4dHVyZTo6cmVsZWFz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njb3BlZFRleHR1cmU6OmJ5dGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDU2NvcGVkVGV4dHVyZTo6bWF5YmVCeXRlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1Njb3BlZFRleHR1cmU6Om1lbW9yeVNpemVCeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1Njb3BlZFRleHR1cmU6OmluaXRpYWxpemVDYXBhYmlsaXRpZXMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGV4dHVyZS5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoQ0NTY29wZWRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDU2NvcGVkVGV4dHVyZTo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY29wZWRUZXh0
dXJlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2NvcGVkVGV4dHVyZTo6Zm9ybWF0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDU2NvcGVkVGV4dHVyZTo6b3BlcmF0b3IgYm9vbCk6CisKIDIw
MTItMDYtMTkgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAg
ICAgIDIwMTItMDYtMTkgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAwNmU5YWNiNzQ0NDQ0NTk0OTg0YzY3MWExODNl
ODQ3ZWI5ZjU1N2JkLi5iNGEzZjY0OTQ0MWVmOTUzMWQ2YjlhOTViYTk2MDAyNmE4ZjJmMmJmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTA2LTE5ICBE
YW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
Q3JlYXRlIENDU2NvcGVkVGV4dHVyZSBjbGFzcyBmb3IgY3JlYXRpbmcvZnJlZWluZyB0ZXh0dXJl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk0ODUK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktp
dC5neXBpOgorICAgICAgICAqIHRlc3RzL0NDU2NvcGVkVGV4dHVyZVRlc3QuY3BwOiBBZGRlZC4K
KwogMjAxMi0wNi0xOSAgQW15IE91c3RlcmhvdXQgIDxhb3VzdGVyaEBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgW0Nocm9taXVtXSBTdHlsZSBGaXggaW4gV2ViRGV2aWNlT3JpZW50YXRpb25Db250
cm9sbGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMGMyZThlM2UxMDk2ZDY3NjkzNjA2OGFjN2YwMWE2
YjczZWM2OTA4YS4uZTEyZjhkZDFkY2NiNDBkNjUyZDJmODBmNTViOTE1MDJlMTlkNzI4OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQpAQCAtMzc1Miw2ICszNzUyLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NjaGVkdWxlci5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NjaGVkdWxlclN0YXRlTWFjaGluZS5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NoZWR1bGVyU3Rh
dGVNYWNoaW5lLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU2NvcGVkVGV4dHVyZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDU2NvcGVkVGV4dHVyZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1Njb3BlZFRocmVhZFByb3h5LmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFyTGF5ZXJJbXBsLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXJMYXll
ckltcGwuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1Njb3BlZFRleHR1cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUZXh0dXJlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYmEy
MGJhMDg4ZGYzZGE0ZjE4MzE0YWE4MmUwZTE3ZmQxYjkxMDI5Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUZXh0
dXJlLmNwcApAQCAtMCwwICsxLDE2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2luY2x1ZGUgImNjL0NDU2NvcGVkVGV4dHVyZS5oIgorCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNE
Q2hyb21pdW0uaCIKKyNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitDQ1Njb3BlZFRleHR1cmU6OkNDU2NvcGVkVGV4dHVyZShQYXNzUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQp
CisgICAgLCBtX3RleHR1cmVJZCgwKQorICAgICwgbV9mb3JtYXQoMCkKKyAgICAsIG1fZm9yRnJh
bWVidWZmZXJBdHRhY2htZW50KGZhbHNlKQoreworICAgIEFTU0VSVChtX2NvbnRleHQpOworfQor
CitDQ1Njb3BlZFRleHR1cmU6On5DQ1Njb3BlZFRleHR1cmUoKQoreworICAgIGNsZWFyKCk7Cit9
CisKK3N0YXRpYyBpbmxpbmUgR0MzRGVudW0gdGV4dHVyZVRvU3RvcmFnZUZvcm1hdChHQzNEZW51
bSB0ZXh0dXJlRm9ybWF0KQoreworICAgIEdDM0RlbnVtIHN0b3JhZ2VGb3JtYXQgPSBFeHRlbnNp
b25zM0Q6OlJHQkE4X09FUzsKKyAgICBzd2l0Y2ggKHRleHR1cmVGb3JtYXQpIHsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6QkdSQV9FWFQ6CisgICAgICAgIHN0b3JhZ2VGb3JtYXQgPSBFeHRlbnNpb25zM0RD
aHJvbWl1bTo6QkdSQThfRVhUOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0
dXJuIHN0b3JhZ2VGb3JtYXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1RleHR1cmVGb3Jt
YXRTdXBwb3J0ZWRGb3JTdG9yYWdlKEdDM0RlbnVtIGZvcm1hdCkKK3sKKyAgICByZXR1cm4gZm9y
bWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBIHx8IGZvcm1hdCA9PSBFeHRlbnNpb25zM0Q6
OkJHUkFfRVhUOworfQorCitib29sIENDU2NvcGVkVGV4dHVyZTo6Y3JlYXRlKCkKK3sKKyAgICBB
U1NFUlQoIW1fdGV4dHVyZUlkKTsKKyAgICBBU1NFUlQoIW1fc2l6ZS5pc0VtcHR5KCkpOworICAg
IEFTU0VSVChtX2Zvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCIHx8IG1fZm9ybWF0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBIHx8IG1fZm9ybWF0ID09IEV4dGVuc2lvbnMzRDo6QkdS
QV9FWFQpOworCisgICAgbV90ZXh0dXJlSWQgPSBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmNy
ZWF0ZVRleHR1cmUoKSk7CisKKyAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmJp
bmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmVJZCkpOwor
ICAgIC8vIERvIGJhc2ljIGxpbmVhciBmaWx0ZXJpbmcgb24gcmVzaXplLgorICAgIEdMQyhtX2Nv
bnRleHQuZ2V0KCksIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkxJTkVBUikpOworICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4
dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikp
OworICAgIC8vIE5QT1QgdGV4dHVyZXMgaW4gR0wgRVMgb25seSB3b3JrIHdoZW4gdGhlIHdyYXAg
bW9kZSBpcyBzZXQgdG8gR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UuCisgICAgR0xD
KG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBo
aWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7CisgICAgR0xDKG1fY29udGV4dC5nZXQoKSwg
bV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFN
UF9UT19FREdFKSk7CisKKyAgICBpZiAobV91c2VUZXh0dXJlVXNhZ2VIaW50ICYmIG1fZm9yRnJh
bWVidWZmZXJBdHRhY2htZW50KQorICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRl
eHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEV4dGVuc2lv
bnMzRENocm9taXVtOjpHTF9URVhUVVJFX1VTQUdFX0FOR0xFLCBFeHRlbnNpb25zM0RDaHJvbWl1
bTo6R0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSkpOworICAgIGlmIChtX3VzZVRleHR1
cmVTdG9yYWdlRXh0ICYmIGlzVGV4dHVyZUZvcm1hdFN1cHBvcnRlZEZvclN0b3JhZ2UobV9mb3Jt
YXQpKSB7CisgICAgICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBleHRlbnNpb25zID0gc3RhdGlj
X2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKSk7
CisgICAgICAgIEdDM0RlbnVtIHN0b3JhZ2VGb3JtYXQgPSB0ZXh0dXJlVG9TdG9yYWdlRm9ybWF0
KG1fZm9ybWF0KTsKKyAgICAgICAgZXh0ZW5zaW9ucy0+dGV4U3RvcmFnZTJERVhUKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCAxLCBzdG9yYWdlRm9ybWF0LCBtX3NpemUud2lkdGgoKSwg
bV9zaXplLmhlaWdodCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgR0xDKG1fY29udGV4dC5nZXQo
KSwgbV9jb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCAwLCBtX2Zvcm1hdCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwg
MCwgbV9mb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSk7CisgICAgR0xD
KG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgMCkpOworCisgICAgcmV0dXJuIG1fdGV4dHVyZUlkOworfQorCit2b2lk
IENDU2NvcGVkVGV4dHVyZTo6cHJlcGFyZShjb25zdCBJbnRTaXplJiBzaXplLCBHQzNEZW51bSBm
b3JtYXQsIGJvb2wgZm9yRnJhbWVidWZmZXJBdHRhY2htZW50KQoreworICAgIEFTU0VSVCghbV90
ZXh0dXJlSWQpOworCisgICAgbV9zaXplID0gc2l6ZTsKKyAgICBtX2Zvcm1hdCA9IGZvcm1hdDsK
KyAgICBtX2ZvckZyYW1lYnVmZmVyQXR0YWNobWVudCA9IGZvckZyYW1lYnVmZmVyQXR0YWNobWVu
dDsKK30KKwordm9pZCBDQ1Njb3BlZFRleHR1cmU6OmNsZWFyKCkKK3sKKyAgICBpZiAobV90ZXh0
dXJlSWQpCisgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlVGV4dHVyZShtX3RleHR1cmVJZCk7Cisg
ICAgbV90ZXh0dXJlSWQgPSAwOworfQorCit2b2lkIENDU2NvcGVkVGV4dHVyZTo6c3RlYWwoQ0NT
Y29wZWRUZXh0dXJlJiBvdGhlcikKK3sKKyAgICBBU1NFUlQoIW1fdGV4dHVyZUlkKTsKKworICAg
IHByZXBhcmUob3RoZXIubV9zaXplLCBvdGhlci5tX2Zvcm1hdCwgb3RoZXIubV9mb3JGcmFtZWJ1
ZmZlckF0dGFjaG1lbnQpOworICAgIG1fdGV4dHVyZUlkID0gb3RoZXIucmVsZWFzZSgpOworfQor
Cit1bnNpZ25lZCBDQ1Njb3BlZFRleHR1cmU6OnJlbGVhc2UoKQoreworICAgIHVuc2lnbmVkIHJl
bGVhc2VkVGV4dHVyZUlkID0gbV90ZXh0dXJlSWQ7CisgICAgbV90ZXh0dXJlSWQgPSAwOworICAg
IHJldHVybiByZWxlYXNlZFRleHR1cmVJZDsKK30KKworc2l6ZV90IENDU2NvcGVkVGV4dHVyZTo6
Ynl0ZXMoKSBjb25zdAoreworICAgIGlmICghbV90ZXh0dXJlSWQpCisgICAgICAgIHJldHVybiAw
dTsKKworICAgIHJldHVybiBtYXliZUJ5dGVzKCk7Cit9CisKK3NpemVfdCBDQ1Njb3BlZFRleHR1
cmU6Om1heWJlQnl0ZXMoKSBjb25zdAoreworICAgIGlmIChtX3NpemUuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gMHU7CisKKyAgICByZXR1cm4gQ0NTY29wZWRUZXh0dXJlOjptZW1vcnlTaXpl
Qnl0ZXMobV9zaXplLCBtX2Zvcm1hdCk7Cit9CisKK3NpemVfdCBDQ1Njb3BlZFRleHR1cmU6Om1l
bW9yeVNpemVCeXRlcyhjb25zdCBJbnRTaXplJiBzaXplLCBHQzNEZW51bSBmb3JtYXQpCit7Cisg
ICAgdW5zaWduZWQgaW50IGNvbXBvbmVudHNQZXJQaXhlbDsKKyAgICB1bnNpZ25lZCBpbnQgYnl0
ZXNQZXJDb21wb25lbnQ7CisgICAgaWYgKCFHcmFwaGljc0NvbnRleHQzRDo6Y29tcHV0ZUZvcm1h
dEFuZFR5cGVQYXJhbWV0ZXJzKGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUsICZjb21wb25lbnRzUGVyUGl4ZWwsICZieXRlc1BlckNvbXBvbmVudCkpIHsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwdTsKKyAgICB9CisgICAgcmV0
dXJuIGNvbXBvbmVudHNQZXJQaXhlbCAqIGJ5dGVzUGVyQ29tcG9uZW50ICogc2l6ZS53aWR0aCgp
ICogc2l6ZS5oZWlnaHQoKTsKK30KKworYm9vbCBDQ1Njb3BlZFRleHR1cmU6Om1fdXNlVGV4dHVy
ZVVzYWdlSGludCA9IGZhbHNlOworYm9vbCBDQ1Njb3BlZFRleHR1cmU6Om1fdXNlVGV4dHVyZVN0
b3JhZ2VFeHQgPSBmYWxzZTsKKwordm9pZCBDQ1Njb3BlZFRleHR1cmU6OmluaXRpYWxpemVDYXBh
YmlsaXRpZXMoY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgY2FwYWJpbGl0aWVzKQor
eworICAgIG1fdXNlVGV4dHVyZVVzYWdlSGludCA9IGNhcGFiaWxpdGllcy51c2luZ1RleHR1cmVV
c2FnZUhpbnQ7CisgICAgbV91c2VUZXh0dXJlU3RvcmFnZUV4dCA9IGNhcGFiaWxpdGllcy51c2lu
Z1RleHR1cmVTdG9yYWdlRXh0ZW5zaW9uOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njb3BlZFRleHR1cmUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGV4dHVy
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjQ5NzQ0NDcxMjM1NTBlZmRiYWFmMzFmZmJlM2Y2MDBjMDRkZmM5YzIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1Njb3BlZFRleHR1cmUuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBDQ1Njb3BlZFRleHR1cmVfaAorI2RlZmluZSBDQ1Njb3BlZFRleHR1cmVfaAorCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgTGF5
ZXJSZW5kZXJlckNhcGFiaWxpdGllczsKKworY2xhc3MgQ0NTY29wZWRUZXh0dXJlIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShDQ1Njb3BlZFRleHR1cmUpOworcHVibGljOgorICAgIGV4cGxp
Y2l0IENDU2NvcGVkVGV4dHVyZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CisgICAg
fkNDU2NvcGVkVGV4dHVyZSgpOworCisgICAgdm9pZCBwcmVwYXJlKGNvbnN0IEludFNpemUmLCBH
QzNEZW51bSBmb3JtYXQsIGJvb2wgZm9yRnJhbWVidWZmZXJBdHRhY2htZW50ID0gZmFsc2UpOwor
CisgICAgYm9vbCBjcmVhdGUoKTsKKyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICB2b2lkIHN0ZWFs
KENDU2NvcGVkVGV4dHVyZSYpOworCisgICAgdW5zaWduZWQgaWQoKSBjb25zdCB7IHJldHVybiBt
X3RleHR1cmVJZDsgfQorICAgIGNvbnN0IEludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X3NpemU7IH0KKyAgICBHQzNEZW51bSBmb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdDsg
fQorCisgICAgc2l6ZV90IGJ5dGVzKCkgY29uc3Q7CisgICAgc2l6ZV90IG1heWJlQnl0ZXMoKSBj
b25zdDsKKworICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVJZDsg
fQorCisgICAgc3RhdGljIHNpemVfdCBtZW1vcnlTaXplQnl0ZXMoY29uc3QgSW50U2l6ZSYsIEdD
M0RlbnVtIGZvcm1hdCk7CisKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplQ2FwYWJpbGl0aWVz
KGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmKTsKKworcHJpdmF0ZToKKyAgICB1bnNp
Z25lZCByZWxlYXNlKCk7CisKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4
dDsKKyAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICBH
QzNEZW51bSBtX2Zvcm1hdDsKKyAgICBib29sIG1fZm9yRnJhbWVidWZmZXJBdHRhY2htZW50Owor
CisgICAgc3RhdGljIGJvb2wgbV91c2VUZXh0dXJlVXNhZ2VIaW50OworICAgIHN0YXRpYyBib29s
IG1fdXNlVGV4dHVyZVN0b3JhZ2VFeHQ7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cGkKaW5kZXggNTQ5ZmRmYTQ0Yjg0YWUxY2E3NTFhZGU0NDI3YzNkN2M4Y2M5
OGE1NS4uY2Y0ZmQ5MTBkMWY0ZWQ3ODFlMjVkOTA0NjhmNjUyOTVkMjMzN2I1MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC04Niw2ICs4Niw3IEBACiAgICAgICAgICAgICAndGVz
dHMvQ0NTY2hlZHVsZXJTdGF0ZU1hY2hpbmVUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
Q0NTY2hlZHVsZXJUZXN0Q29tbW9uLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDU2NoZWR1bGVy
VGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDU2NvcGVkVGV4dHVyZVRlc3QuY3BwJywK
ICAgICAgICAgICAgICd0ZXN0cy9DQ1NpbmdsZVRocmVhZFByb3h5VGVzdC5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL0NDU29saWRDb2xvckxheWVySW1wbFRlc3QuY3BwJywKICAgICAgICAgICAg
ICd0ZXN0cy9DQ1Rlc3RDb21tb24uaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDU2NvcGVkVGV4dHVyZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ1Njb3BlZFRleHR1cmVUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYTFhNTA3OTU3NjIx
ZTE5MDI3ZDZhNjA3OWM0YjNlMDdkNjA0M2RlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ1Njb3BlZFRleHR1cmVUZXN0LmNwcApAQCAtMCwwICsxLDI3
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2Mv
Q0NTY29wZWRUZXh0dXJlLmgiCisKKyNpbmNsdWRlICJGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0Qu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorCisjaW5j
bHVkZSA8Z21vY2svZ21vY2suaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OwordXNpbmcgOjp0ZXN0aW5nOjpNb2NrOwordXNpbmcgOjp0ZXN0aW5nOjpfOwor
CituYW1lc3BhY2UgeworCitURVNUKENDU2NvcGVkVGV4dHVyZVRlc3QsIE5ld1Njb3BlZFRleHR1
cmUpCit7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9w
dFB0cihuZXcgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEKCkpLCBHcmFwaGljc0NvbnRleHQzRDo6
UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOworCisgICAgQ0NTY29wZWRUZXh0dXJlIHRleHR1
cmUoY29udGV4dCk7CisKKyAgICAvLyBOZXcgc2NvcGVkIHRleHR1cmVzIGRvIG5vdCBob2xkIGEg
dGV4dHVyZSB5ZXQuCisgICAgRVhQRUNUX0ZBTFNFKHRleHR1cmUpOworICAgIEVYUEVDVF9FUSgw
dSwgdGV4dHVyZS5pZCgpKTsKKworICAgIC8vIE5ldyBzY29wZWQgdGV4dHVyZXMgZG8gbm90IGhh
dmUgYSBzaXplIHlldC4KKyAgICBFWFBFQ1RfRVEoSW50U2l6ZSgpLCB0ZXh0dXJlLnNpemUoKSk7
CisgICAgRVhQRUNUX0VRKDB1LCB0ZXh0dXJlLm1heWJlQnl0ZXMoKSk7Cit9CisKK1RFU1QoQ0NT
Y29wZWRUZXh0dXJlVGVzdCwgUHJlcGFyZVNjb3BlZFRleHR1cmUpCit7CisgICAgUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVh
dGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgRmFrZVdlYkdyYXBo
aWNzQ29udGV4dDNEKCkpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RX
aW5kb3cpOworCisgICAgQ0NTY29wZWRUZXh0dXJlIHRleHR1cmUoY29udGV4dCk7CisgICAgdGV4
dHVyZS5wcmVwYXJlKEludFNpemUoMzAsIDMwKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpOwor
CisgICAgLy8gVGhlIHRleHR1cmUgaGFzIGFuIHVuYWxsb2NhdGVkIGJ5dGUtc2l6ZSBub3cuCisg
ICAgc2l6ZV90IGV4cGVjdGVkQnl0ZXMgPSAzMCAqIDMwICogNDsKKyAgICBFWFBFQ1RfRVEoZXhw
ZWN0ZWRCeXRlcywgdGV4dHVyZS5tYXliZUJ5dGVzKCkpOworCisgICAgLy8gQnV0IG5vdCBhbiBh
bGxvY2F0ZWQgYnl0ZS1zaXplLgorICAgIEVYUEVDVF9FUSgwdSwgdGV4dHVyZS5ieXRlcygpKTsK
KworICAgIEVYUEVDVF9GQUxTRSh0ZXh0dXJlKTsKKyAgICBFWFBFQ1RfRVEoR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEsIHRleHR1cmUuZm9ybWF0KCkpOworICAgIEVYUEVDVF9FUShJbnRTaXplKDMw
LCAzMCksIHRleHR1cmUuc2l6ZSgpKTsKK30KKworVEVTVChDQ1Njb3BlZFRleHR1cmVUZXN0LCBD
cmVhdGVTY29wZWRUZXh0dXJlKQoreworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29u
dGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJv
bVdlYkNvbnRleHQoYWRvcHRQdHIobmV3IEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCgpKSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKworICAgIENDU2Nv
cGVkVGV4dHVyZSB0ZXh0dXJlKGNvbnRleHQpOworICAgIHRleHR1cmUucHJlcGFyZShJbnRTaXpl
KDMwLCAzMCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKTsKKyAgICB0ZXh0dXJlLmNyZWF0ZSgp
OworCisgICAgLy8gVGhlIHRleHR1cmUgaGFzIGFuIGFsbG9jYXRlZCBieXRlLXNpemUgbm93Lgor
ICAgIHNpemVfdCBleHBlY3RlZEJ5dGVzID0gMzAgKiAzMCAqIDQ7CisgICAgRVhQRUNUX0VRKGV4
cGVjdGVkQnl0ZXMsIHRleHR1cmUubWF5YmVCeXRlcygpKTsKKyAgICBFWFBFQ1RfRVEoZXhwZWN0
ZWRCeXRlcywgdGV4dHVyZS5ieXRlcygpKTsKKworICAgIEVYUEVDVF9UUlVFKHRleHR1cmUpOwor
ICAgIEVYUEVDVF9FUShHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgdGV4dHVyZS5mb3JtYXQoKSk7
CisgICAgRVhQRUNUX0VRKEludFNpemUoMzAsIDMwKSwgdGV4dHVyZS5zaXplKCkpOworfQorCisv
LyBGYWtlIFdlYkdyYXBoaWNzQ29udGV4dDNEIHRoYXQgdHJhY2tzIHRoZSBudW1iZXIgb2YgdGV4
dHVyZXMgaW4gdXNlLgorY2xhc3MgVHJhY2tpbmdXZWJHcmFwaGljc0NvbnRleHQzRCA6IHB1Ymxp
YyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QgeworcHVibGljOgorICAgIFRyYWNraW5nV2ViR3Jh
cGhpY3NDb250ZXh0M0QoKQorICAgICAgICA6IG1fbmV4dFRleHR1cmVJZCgxKQorICAgICAgICAs
IG1fbnVtVGV4dHVyZXMoMCkKKyAgICB7IH0KKworICAgIHZpcnR1YWwgV2ViR0xJZCBjcmVhdGVU
ZXh0dXJlKCkgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIFdlYkdMSWQgaWQgPSBtX25leHRUZXh0
dXJlSWQ7CisgICAgICAgICsrbV9uZXh0VGV4dHVyZUlkOworCisgICAgICAgIG1fdGV4dHVyZXMu
c2V0KGlkLCB0cnVlKTsKKyAgICAgICAgKyttX251bVRleHR1cmVzOworICAgICAgICByZXR1cm4g
aWQ7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVRleHR1cmUoV2ViR0xJZCBpZCkg
T1ZFUlJJREUKKyAgICB7CisgICAgICAgIGlmICghbV90ZXh0dXJlcy5nZXQoaWQpKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIG1fdGV4dHVyZXMuc2V0KGlkLCBmYWxzZSk7CisgICAg
ICAgIC0tbV9udW1UZXh0dXJlczsKKyAgICB9CisKKyAgICBQYXNzUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBjcmVhdGVHcmFwaGljc0NvbnRleHQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRl
eHQoYWRvcHRQdHIodGhpcyksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9z
dFdpbmRvdyk7CisgICAgfQorCisgICAgdW5zaWduZWQgbnVtVGV4dHVyZXMoKSBjb25zdCB7IHJl
dHVybiBtX251bVRleHR1cmVzOyB9CisKK3ByaXZhdGU6CisgICAgV2ViR0xJZCBtX25leHRUZXh0
dXJlSWQ7CisgICAgSGFzaE1hcDxXZWJHTElkLCBib29sPiBtX3RleHR1cmVzOworICAgIHVuc2ln
bmVkIG1fbnVtVGV4dHVyZXM7Cit9OworCitURVNUKENDU2NvcGVkVGV4dHVyZVRlc3QsIFNjb3Bl
ZFRleHR1cmVJc0RlbGV0ZWQpCit7CisgICAgVHJhY2tpbmdXZWJHcmFwaGljc0NvbnRleHQzRCog
dHJhY2tpbmdDb250ZXh0ID0gbmV3IFRyYWNraW5nV2ViR3JhcGhpY3NDb250ZXh0M0Q7CisgICAg
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gdHJhY2tpbmdDb250ZXh0LT5jcmVh
dGVHcmFwaGljc0NvbnRleHQoKTsKKworICAgIHsKKyAgICAgICAgQ0NTY29wZWRUZXh0dXJlIHRl
eHR1cmUoY29udGV4dCk7CisgICAgICAgIHRleHR1cmUucHJlcGFyZShJbnRTaXplKDMwLCAzMCks
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKTsKKworICAgICAgICBFWFBFQ1RfRVEoMHUsIHRyYWNr
aW5nQ29udGV4dC0+bnVtVGV4dHVyZXMoKSk7CisgICAgICAgIHRleHR1cmUuY3JlYXRlKCk7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKHRleHR1cmUpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIHRyYWNr
aW5nQ29udGV4dC0+bnVtVGV4dHVyZXMoKSk7CisgICAgfQorCisgICAgRVhQRUNUX0VRKDB1LCB0
cmFja2luZ0NvbnRleHQtPm51bVRleHR1cmVzKCkpOworCisgICAgeworICAgICAgICBDQ1Njb3Bl
ZFRleHR1cmUgdGV4dHVyZShjb250ZXh0KTsKKyAgICAgICAgdGV4dHVyZS5wcmVwYXJlKEludFNp
emUoMzAsIDMwKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpOworCisgICAgICAgIEVYUEVDVF9F
USgwdSwgdHJhY2tpbmdDb250ZXh0LT5udW1UZXh0dXJlcygpKTsKKyAgICAgICAgdGV4dHVyZS5j
cmVhdGUoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodGV4dHVyZSk7CisgICAgICAgIEVYUEVDVF9F
USgxdSwgdHJhY2tpbmdDb250ZXh0LT5udW1UZXh0dXJlcygpKTsKKyAgICAgICAgdGV4dHVyZS5j
bGVhcigpOworICAgICAgICBFWFBFQ1RfRVEoMHUsIHRyYWNraW5nQ29udGV4dC0+bnVtVGV4dHVy
ZXMoKSk7CisgICAgfQorfQorCitURVNUKENDU2NvcGVkVGV4dHVyZVRlc3QsIFNjb3BlZFRleHR1
cmVJc1N0b2xlbikKK3sKKyAgICBUcmFja2luZ1dlYkdyYXBoaWNzQ29udGV4dDNEKiB0cmFja2lu
Z0NvbnRleHQgPSBuZXcgVHJhY2tpbmdXZWJHcmFwaGljc0NvbnRleHQzRDsKKyAgICBSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSB0cmFja2luZ0NvbnRleHQtPmNyZWF0ZUdyYXBo
aWNzQ29udGV4dCgpOworCisgICAgQ0NTY29wZWRUZXh0dXJlIHN0ZWFsZXIoY29udGV4dCk7CisK
KyAgICB7CisgICAgICAgIENDU2NvcGVkVGV4dHVyZSB0ZXh0dXJlKGNvbnRleHQpOworICAgICAg
ICB0ZXh0dXJlLnByZXBhcmUoSW50U2l6ZSgzMCwgMzApLCBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSk7CisKKyAgICAgICAgRVhQRUNUX0VRKDB1LCB0cmFja2luZ0NvbnRleHQtPm51bVRleHR1cmVz
KCkpOworICAgICAgICB0ZXh0dXJlLmNyZWF0ZSgpOworICAgICAgICBFWFBFQ1RfVFJVRSh0ZXh0
dXJlKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCB0cmFja2luZ0NvbnRleHQtPm51bVRleHR1cmVz
KCkpOworCisgICAgICAgIHN0ZWFsZXIuc3RlYWwodGV4dHVyZSk7CisgICAgICAgIEVYUEVDVF9G
QUxTRSh0ZXh0dXJlKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoc3RlYWxlcik7CisgICAgICAgIEVY
UEVDVF9FUSgxdSwgdHJhY2tpbmdDb250ZXh0LT5udW1UZXh0dXJlcygpKTsKKworICAgICAgICB0
ZXh0dXJlLmNsZWFyKCk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgdHJhY2tpbmdDb250ZXh0LT5u
dW1UZXh0dXJlcygpKTsKKyAgICB9CisKKyAgICBFWFBFQ1RfRVEoMXUsIHRyYWNraW5nQ29udGV4
dC0+bnVtVGV4dHVyZXMoKSk7CisgICAgc3RlYWxlci5jbGVhcigpOworICAgIEVYUEVDVF9FUSgw
dSwgdHJhY2tpbmdDb250ZXh0LT5udW1UZXh0dXJlcygpKTsKK30KKworY2xhc3MgTW9ja1dlYkdy
YXBoaWNzQ29udGV4dDNEIDogcHVibGljIEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7CitwdWJs
aWM6CisgICAgTU9DS19NRVRIT0QzKHRleFBhcmFtZXRlcmksIHZvaWQoV0dDM0RlbnVtIHRhcmdl
dCwgV0dDM0RlbnVtIHBuYW1lLCBXR0MzRGludCBwYXJhbSkpOworCisgICAgUGFzc1JlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gY3JlYXRlR3JhcGhpY3NDb250ZXh0KCkKKyAgICB7CisgICAgICAg
IHJldHVybiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZy
b21XZWJDb250ZXh0KGFkb3B0UHRyKHRoaXMpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGly
ZWN0bHlUb0hvc3RXaW5kb3cpOworICAgIH0KKworcHJpdmF0ZToKK307CisKK1RFU1QoQ0NTY29w
ZWRUZXh0dXJlVGVzdCwgQ3JlYXRlU2NvcGVkVGV4dHVyZUZvckZyYW1lYnVmZmVyQXR0YWNobWVu
dCkKK3sKKyAgICBNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0QqIG1vY2tDb250ZXh0ID0gbmV3IE1v
Y2tXZWJHcmFwaGljc0NvbnRleHQzRDsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNv
bnRleHQgPSBtb2NrQ29udGV4dC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisKKyAgICAvLyBU
aGlzIHRleHR1cmUgaXMgc2V0IGZvciB1c2UgYXMgZnJhbWVidWZmZXIgYXR0YWNobWVudCwgYnV0
IHRoZSBjYXBhYmlsaXR5IHRvIGRvIHNvIGhhcyBub3QgYmVlbiBzZXQuCisgICAgYm9vbCBmb3JG
cmFtZWJ1ZmZlckF0dGFjaG1lbnQgPSB0cnVlOworCisgICAgeworICAgICAgICBDQ1Njb3BlZFRl
eHR1cmUgdGV4dHVyZShjb250ZXh0KTsKKyAgICAgICAgdGV4dHVyZS5wcmVwYXJlKEludFNpemUo
MzAsIDMwKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIGZvckZyYW1lYnVmZmVyQXR0YWNobWVu
dCk7CisKKyAgICAgICAgLy8gVGhpcyBpcyBhbHdheXMgZG9uZSB0byBzZXQgdXAgdGhlIHRleHR1
cmUuCisgICAgICAgIEVYUEVDVF9DQUxMKCptb2NrQ29udGV4dCwgdGV4UGFyYW1ldGVyaShfLCBf
LCBfKSkuVGltZXMoNCk7CisKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1vY2tDb250ZXh0LCB0ZXhQ
YXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBFeHRlbnNpb25zM0RDaHJv
bWl1bTo6R0xfVEVYVFVSRV9VU0FHRV9BTkdMRSwgRXh0ZW5zaW9uczNEQ2hyb21pdW06OkdMX0ZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpKQorICAgICAgICAgICAgICAgIC5UaW1lcygwKTsK
KworICAgICAgICB0ZXh0dXJlLmNyZWF0ZSgpOworICAgICAgICBFWFBFQ1RfVFJVRSh0ZXh0dXJl
KTsKKworICAgICAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucyhtb2NrQ29udGV4
dCk7CisgICAgfQorCisgICAgLy8gUHJldGVuZCB3ZSBoYXZlIHRoZSBjYXBhYmlsaXR5IG9mIGhp
bnRpbmcgdGV4dHVyZXMgYXMgYmVpbmcgdXNlZCBhcyBmcmFtZWJ1ZmZlciBhdHRhY2htZW50Lgor
ICAgIExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzOworICAgIGNhcGFiaWxp
dGllcy51c2luZ1RleHR1cmVVc2FnZUhpbnQgPSB0cnVlOworICAgIENDU2NvcGVkVGV4dHVyZTo6
aW5pdGlhbGl6ZUNhcGFiaWxpdGllcyhjYXBhYmlsaXRpZXMpOworCisgICAgLy8gVGhpcyB0ZXh0
dXJlIGlzIE5PVCBzZXQgZm9yIHVzZSBhcyBmcmFtZWJ1ZmZlciBhdHRhY2htZW50LgorICAgIGZv
ckZyYW1lYnVmZmVyQXR0YWNobWVudCA9IGZhbHNlOworCisgICAgeworICAgICAgICBDQ1Njb3Bl
ZFRleHR1cmUgdGV4dHVyZShjb250ZXh0KTsKKyAgICAgICAgdGV4dHVyZS5wcmVwYXJlKEludFNp
emUoMzAsIDMwKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIGZvckZyYW1lYnVmZmVyQXR0YWNo
bWVudCk7CisKKyAgICAgICAgLy8gVGhpcyBpcyBhbHdheXMgZG9uZSB0byBzZXQgdXAgdGhlIHRl
eHR1cmUuCisgICAgICAgIEVYUEVDVF9DQUxMKCptb2NrQ29udGV4dCwgdGV4UGFyYW1ldGVyaShf
LCBfLCBfKSkuVGltZXMoNCk7CisKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1vY2tDb250ZXh0LCB0
ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBFeHRlbnNpb25zM0RD
aHJvbWl1bTo6R0xfVEVYVFVSRV9VU0FHRV9BTkdMRSwgRXh0ZW5zaW9uczNEQ2hyb21pdW06OkdM
X0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpKQorICAgICAgICAgICAgICAgIC5UaW1lcygw
KTsKKworICAgICAgICB0ZXh0dXJlLmNyZWF0ZSgpOworICAgICAgICBFWFBFQ1RfVFJVRSh0ZXh0
dXJlKTsKKworICAgICAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucyhtb2NrQ29u
dGV4dCk7CisgICAgfQorCisgICAgLy8gVGhpcyB0ZXh0dXJlIGlzIHNldCBmb3IgdXNlIGFzIGZy
YW1lYnVmZmVyIGF0dGFjaG1lbnQsIGFuZCB3ZSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIGRvIHNv
IHNldCBub3cuCisgICAgZm9yRnJhbWVidWZmZXJBdHRhY2htZW50ID0gdHJ1ZTsKKworICAgIHsK
KyAgICAgICAgQ0NTY29wZWRUZXh0dXJlIHRleHR1cmUoY29udGV4dCk7CisgICAgICAgIHRleHR1
cmUucHJlcGFyZShJbnRTaXplKDMwLCAzMCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBmb3JG
cmFtZWJ1ZmZlckF0dGFjaG1lbnQpOworCisgICAgICAgIC8vIFRoaXMgaXMgYWx3YXlzIGRvbmUg
dG8gc2V0IHVwIHRoZSB0ZXh0dXJlLgorICAgICAgICBFWFBFQ1RfQ0FMTCgqbW9ja0NvbnRleHQs
IHRleFBhcmFtZXRlcmkoXywgXywgXykpLlRpbWVzKDQpOworCisgICAgICAgIEVYUEVDVF9DQUxM
KCptb2NrQ29udGV4dCwgdGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgRXh0ZW5zaW9uczNEQ2hyb21pdW06OkdMX1RFWFRVUkVfVVNBR0VfQU5HTEUsIEV4dGVuc2lv
bnMzRENocm9taXVtOjpHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKSkKKyAgICAgICAg
ICAgICAgICAuVGltZXMoMSk7CisKKyAgICAgICAgdGV4dHVyZS5jcmVhdGUoKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUodGV4dHVyZSk7CisKKyAgICAgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBl
Y3RhdGlvbnMobW9ja0NvbnRleHQpOworICAgIH0KK30KKworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148405</attachid>
            <date>2012-06-19 13:21:39 -0700</date>
            <delta_ts>2012-06-19 13:53:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89485-20120619162138.patch</filename>
            <type>text/plain</type>
            <size>23310</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwNzE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGY0OTNmMjQ3ZTMyNDRh
NWRmOTM1Yjc0MWZmMDYyZGUxM2EyMjExZi4uMGYzOGYwOGU4MjQxNWY3ZTEzNDFiZjVlMWRmNTNk
OWY5ZDkyYjMyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEyLTA2LTE5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIENDU2NvcGVkVGV4dHVyZSBjbGFzcyBmb3IgY3JlYXRpbmcvZnJlZWluZyB0ZXh0dXJlcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk0ODUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNsYXNz
IHByb3ZpZGVzIGEgc3RhbmRhcmQgd2F5IHRvIGNyZWF0ZSB0ZXh0dXJlIGlkcyBpbiBhIHdheSB0
aGF0CisgICAgICAgIGVuc3VyZXMgdGhleSB3aWxsIGJlIGZyZWVkIGxhdGVyLiBJdCBpcyBtZWFu
dCB0byByZXBsYWNlIHRoZSB1c2Ugb2YKKyAgICAgICAgdGhlIFRleHR1cmVBbGxvY2F0b3IgZm9y
IGFsbG9jYXRpbmcgdGV4dHVyZXMsIGJ5IGFic3RyYWN0aW5nIHRoZQorICAgICAgICBhYmlsaXRp
ZXMgb2YgdGhlIGNsYXNzIGludG8gZWFjaCBDQ1Njb3BlZFRleHR1cmUgb2JqZWN0LiBUaGlzIHBy
b3ZpZGVzCisgICAgICAgIHVzIHdpdGggYSBjZW50cmFsIHBsYWNlIGZvciB0aGUgY29kZSBhcm91
bmQgY3JlYXRpbmcgdGV4dHVyZXMsIGFuZAorICAgICAgICBjb21wdXRpbmcgdGhlIG51bWJlciBv
ZiBieXRlcyB1c2VkIGJ5IGEgdGV4dHVyZS4gSXQgZW5zdXJlcyB0aGF0CisgICAgICAgIHdlIGNh
biBlYXNpbHkga25vdyBob3cgbWFueSBieXRlcyBhbnkgdGV4dHVyZSBvYmplY3QgaXMgdXNpbmcu
CisKKyAgICAgICAgVGhpcyBvYmplY3Qgd291bGQgYmUgdXNlZCBpbiBwbGFjZSBvZiBzdG9yaW5n
IGFuIHVuc2lnbmVkIHRleHR1cmVJZAorICAgICAgICBpbiBvdGhlciBjbGFzc2VzLCBhbmQgd2ls
bCByZXBsYWNlIHRoZSB1c2Ugb2YgTWFuYWdlZFRleHR1cmVzIGZvcgorICAgICAgICBSZW5kZXJQ
YXNzZXMsIGFsbG93aW5nIHVzIHRvIGRlY291cGxlIFJlbmRlclBhc3NlcyBmcm9tIHRoZQorICAg
ICAgICBub3ctb2Jzb2xldGUgVGV4dHVyZU1hbmFnZXIuCisKKyAgICAgICAgVW5pdCB0ZXN0czog
Q0NTY29wZWRUZXh1cmVUZXN0Lk5ld1Njb3BlZFRleHR1cmUKKyAgICAgICAgICAgICAgICAgICAg
Q0NTY29wZWRUZXh1cmVUZXN0LlByZXBhcmVTY29wZWRUZXh0dXJlCisgICAgICAgICAgICAgICAg
ICAgIENDU2NvcGVkVGV4dXJlVGVzdC5DcmVhdGVTY29wZWRUZXh0dXJlCisgICAgICAgICAgICAg
ICAgICAgIENDU2NvcGVkVGV4dXJlVGVzdC5TY29wZWRUZXh0dXJlSXNEZWxldGVkCisgICAgICAg
ICAgICAgICAgICAgIENDU2NvcGVkVGV4dXJlVGVzdC5DcmVhdGVTY29wZWRUZXh0dXJlRm9yRnJh
bWVidWZmZXJBdHRhY2htZW50CisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUZXh0dXJlLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2NvcGVkVGV4dHVyZTo6
Q0NTY29wZWRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2NvcGVkVGV4dHVyZTo6fkND
U2NvcGVkVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0dXJlVG9TdG9yYWdlRm9ybWF0
KToKKyAgICAgICAgKFdlYkNvcmU6OmlzVGV4dHVyZUZvcm1hdFN1cHBvcnRlZEZvclN0b3JhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6Q0NTY29wZWRUZXh0dXJlOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTY29wZWRUZXh0dXJlOjpwcmVwYXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
U2NvcGVkVGV4dHVyZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY29wZWRUZXh0dXJl
OjpzdGVhbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njb3BlZFRleHR1cmU6OnJlbGVhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NTY29wZWRUZXh0dXJlOjpieXRlcyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1Njb3BlZFRleHR1cmU6Om1heWJlQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NT
Y29wZWRUZXh0dXJlOjptZW1vcnlTaXplQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY29w
ZWRUZXh0dXJlOjppbml0aWFsaXplQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njb3BlZFRleHR1cmUuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKENDU2NvcGVkVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1Njb3BlZFRleHR1cmU6OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2NvcGVkVGV4dHVyZTo6
c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njb3BlZFRleHR1cmU6OmZvcm1hdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1Njb3BlZFRleHR1cmU6Om9wZXJhdG9yIGJvb2wpOgorCiAyMDEyLTA2
LTE5ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICAy
MDEyLTA2LTE5ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMDZlOWFjYjc0NDQ0NDU5NDk4NGM2NzFhMTgzZTg0N2Vi
OWY1NTdiZC4uYjRhM2Y2NDk0NDFlZjk1MzFkNmI5YTk1YmE5NjAwMjZhOGYyZjJiZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0wNi0xOSAgRGFuYSBK
YW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIENyZWF0
ZSBDQ1Njb3BlZFRleHR1cmUgY2xhc3MgZm9yIGNyZWF0aW5nL2ZyZWVpbmcgdGV4dHVyZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5NDg1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lw
aToKKyAgICAgICAgKiB0ZXN0cy9DQ1Njb3BlZFRleHR1cmVUZXN0LmNwcDogQWRkZWQuCisKIDIw
MTItMDYtMTkgIEFteSBPdXN0ZXJob3V0ICA8YW91c3RlcmhAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFtDaHJvbWl1bV0gU3R5bGUgRml4IGluIFdlYkRldmljZU9yaWVudGF0aW9uQ29udHJvbGxl
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCmluZGV4IDBjMmU4ZTNlMTA5NmQ2NzY5MzYwNjhhYzdmMDFhNmI3M2Vj
NjkwOGEuLmUxMmY4ZGQxZGNjYjQwZDY1MmQyZjgwZjU1YjkxNTAyZTE5ZDcyODkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKQEAgLTM3NTIsNiArMzc1Miw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NTY2hlZHVsZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY2hlZHVsZXJTdGF0ZU1hY2hpbmUuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NjaGVkdWxlclN0YXRlTWFj
aGluZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Nj
b3BlZFRleHR1cmUuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1Njb3BlZFRleHR1cmUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTY29wZWRUaHJlYWRQcm94eS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhckxheWVySW1wbC5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFyTGF5ZXJJbXBs
LmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NTY29wZWRUZXh0dXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGV4dHVyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmNiZjlhMDRk
NWZiN2IxZmM0ODNhN2IwYjlmZmJlM2NiYzczYTZlNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGV4dHVyZS5j
cHAKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlICJjYy9DQ1Njb3BlZFRleHR1cmUuaCIKKworI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9t
aXVtLmgiCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworQ0NTY29wZWRUZXh0dXJlOjpDQ1Njb3BlZFRleHR1cmUoUGFzc1JlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAg
ICwgbV90ZXh0dXJlSWQoMCkKKyAgICAsIG1fZm9ybWF0KDApCisgICAgLCBtX2ZvckZyYW1lYnVm
ZmVyQXR0YWNobWVudChmYWxzZSkKK3sKKyAgICBBU1NFUlQobV9jb250ZXh0KTsKK30KKworQ0NT
Y29wZWRUZXh0dXJlOjp+Q0NTY29wZWRUZXh0dXJlKCkKK3sKKyAgICBjbGVhcigpOworfQorCitz
dGF0aWMgaW5saW5lIEdDM0RlbnVtIHRleHR1cmVUb1N0b3JhZ2VGb3JtYXQoR0MzRGVudW0gdGV4
dHVyZUZvcm1hdCkKK3sKKyAgICBHQzNEZW51bSBzdG9yYWdlRm9ybWF0ID0gRXh0ZW5zaW9uczNE
OjpSR0JBOF9PRVM7CisgICAgc3dpdGNoICh0ZXh0dXJlRm9ybWF0KSB7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQToKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkJHUkFfRVhUOgorICAgICAgICBzdG9yYWdlRm9ybWF0ID0gRXh0ZW5zaW9uczNEQ2hyb21p
dW06OkJHUkE4X0VYVDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBz
dG9yYWdlRm9ybWF0OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNUZXh0dXJlRm9ybWF0U3Vw
cG9ydGVkRm9yU3RvcmFnZShHQzNEZW51bSBmb3JtYXQpCit7CisgICAgcmV0dXJuIGZvcm1hdCA9
PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSB8fCBmb3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpCR1JB
X0VYVDsKK30KKworYm9vbCBDQ1Njb3BlZFRleHR1cmU6OmNyZWF0ZSgpCit7CisgICAgQVNTRVJU
KCFtX3RleHR1cmVJZCk7CisgICAgQVNTRVJUKCFtX3NpemUuaXNFbXB0eSgpKTsKKyAgICBBU1NF
UlQobV9mb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQiB8fCBtX2Zvcm1hdCA9PSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQSB8fCBtX2Zvcm1hdCA9PSBFeHRlbnNpb25zM0Q6OkJHUkFfRVhU
KTsKKworICAgIG1fdGV4dHVyZUlkID0gR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5jcmVhdGVU
ZXh0dXJlKCkpOworCisgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQpKTsKKyAgICAv
LyBEbyBiYXNpYyBsaW5lYXIgZmlsdGVyaW5nIG9uIHJlc2l6ZS4KKyAgICBHTEMobV9jb250ZXh0
LmdldCgpLCBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpMSU5FQVIpKTsKKyAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPnRl
eFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKKyAg
ICAvLyBOUE9UIHRleHR1cmVzIGluIEdMIEVTIG9ubHkgd29yayB3aGVuIHRoZSB3cmFwIG1vZGUg
aXMgc2V0IHRvIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFLgorICAgIEdMQyhtX2Nv
bnRleHQuZ2V0KCksIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0Nv
bnRleHQzRDo6Q0xBTVBfVE9fRURHRSkpOworICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29u
dGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9f
RURHRSkpOworCisgICAgaWYgKG1fdXNlVGV4dHVyZVVzYWdlSGludCAmJiBtX2ZvckZyYW1lYnVm
ZmVyQXR0YWNobWVudCkKKyAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT50
ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBFeHRlbnNpb25zM0RD
aHJvbWl1bTo6R0xfVEVYVFVSRV9VU0FHRV9BTkdMRSwgRXh0ZW5zaW9uczNEQ2hyb21pdW06OkdM
X0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpKTsKKyAgICBpZiAobV91c2VUZXh0dXJlU3Rv
cmFnZUV4dCAmJiBpc1RleHR1cmVGb3JtYXRTdXBwb3J0ZWRGb3JTdG9yYWdlKG1fZm9ybWF0KSkg
eworICAgICAgICBFeHRlbnNpb25zM0RDaHJvbWl1bSogZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0
PEV4dGVuc2lvbnMzRENocm9taXVtKj4obV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkpOworICAg
ICAgICBHQzNEZW51bSBzdG9yYWdlRm9ybWF0ID0gdGV4dHVyZVRvU3RvcmFnZUZvcm1hdChtX2Zv
cm1hdCk7CisgICAgICAgIGV4dGVuc2lvbnMtPnRleFN0b3JhZ2UyREVYVChHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgMSwgc3RvcmFnZUZvcm1hdCwgbV9zaXplLndpZHRoKCksIG1fc2l6
ZS5oZWlnaHQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1f
Y29udGV4dC0+dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgMCwgbV9mb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAsIG1f
Zm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkpOworICAgIEdMQyhtX2Nv
bnRleHQuZ2V0KCksIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIDApKTsKKworICAgIHJldHVybiBtX3RleHR1cmVJZDsKK30KKwordm9pZCBDQ1Nj
b3BlZFRleHR1cmU6OnByZXBhcmUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgR0MzRGVudW0gZm9ybWF0
LCBib29sIGZvckZyYW1lYnVmZmVyQXR0YWNobWVudCkKK3sKKyAgICBBU1NFUlQoIW1fdGV4dHVy
ZUlkKTsKKworICAgIG1fc2l6ZSA9IHNpemU7CisgICAgbV9mb3JtYXQgPSBmb3JtYXQ7CisgICAg
bV9mb3JGcmFtZWJ1ZmZlckF0dGFjaG1lbnQgPSBmb3JGcmFtZWJ1ZmZlckF0dGFjaG1lbnQ7Cit9
CisKK3ZvaWQgQ0NTY29wZWRUZXh0dXJlOjpjbGVhcigpCit7CisgICAgaWYgKG1fdGV4dHVyZUlk
KQorICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVRleHR1cmUobV90ZXh0dXJlSWQpOworICAgIG1f
dGV4dHVyZUlkID0gMDsKK30KKworc2l6ZV90IENDU2NvcGVkVGV4dHVyZTo6Ynl0ZXMoKSBjb25z
dAoreworICAgIGlmICghbV90ZXh0dXJlSWQpCisgICAgICAgIHJldHVybiAwdTsKKworICAgIHJl
dHVybiBtYXliZUJ5dGVzKCk7Cit9CisKK3NpemVfdCBDQ1Njb3BlZFRleHR1cmU6Om1heWJlQnl0
ZXMoKSBjb25zdAoreworICAgIGlmIChtX3NpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
MHU7CisKKyAgICByZXR1cm4gQ0NTY29wZWRUZXh0dXJlOjptZW1vcnlTaXplQnl0ZXMobV9zaXpl
LCBtX2Zvcm1hdCk7Cit9CisKK3NpemVfdCBDQ1Njb3BlZFRleHR1cmU6Om1lbW9yeVNpemVCeXRl
cyhjb25zdCBJbnRTaXplJiBzaXplLCBHQzNEZW51bSBmb3JtYXQpCit7CisgICAgdW5zaWduZWQg
aW50IGNvbXBvbmVudHNQZXJQaXhlbDsKKyAgICB1bnNpZ25lZCBpbnQgYnl0ZXNQZXJDb21wb25l
bnQ7CisgICAgaWYgKCFHcmFwaGljc0NvbnRleHQzRDo6Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJh
bWV0ZXJzKGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsICZjb21wb25l
bnRzUGVyUGl4ZWwsICZieXRlc1BlckNvbXBvbmVudCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwdTsKKyAgICB9CisgICAgcmV0dXJuIGNvbXBvbmVu
dHNQZXJQaXhlbCAqIGJ5dGVzUGVyQ29tcG9uZW50ICogc2l6ZS53aWR0aCgpICogc2l6ZS5oZWln
aHQoKTsKK30KKworYm9vbCBDQ1Njb3BlZFRleHR1cmU6Om1fdXNlVGV4dHVyZVVzYWdlSGludCA9
IGZhbHNlOworYm9vbCBDQ1Njb3BlZFRleHR1cmU6Om1fdXNlVGV4dHVyZVN0b3JhZ2VFeHQgPSBm
YWxzZTsKKwordm9pZCBDQ1Njb3BlZFRleHR1cmU6OmluaXRpYWxpemVDYXBhYmlsaXRpZXMoY29u
c3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgY2FwYWJpbGl0aWVzKQoreworICAgIG1fdXNl
VGV4dHVyZVVzYWdlSGludCA9IGNhcGFiaWxpdGllcy51c2luZ1RleHR1cmVVc2FnZUhpbnQ7Cisg
ICAgbV91c2VUZXh0dXJlU3RvcmFnZUV4dCA9IGNhcGFiaWxpdGllcy51c2luZ1RleHR1cmVTdG9y
YWdlRXh0ZW5zaW9uOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njb3BlZFRleHR1cmUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGV4dHVyZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjA5ZTQzMjYxOTQ3NDdkNTEwYzczN2UwZjg5ZmNhNDU3NGM0ZjcyYzYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Nj
b3BlZFRleHR1cmUuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ1Njb3BlZFRl
eHR1cmVfaAorI2RlZmluZSBDQ1Njb3BlZFRleHR1cmVfaAorCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0M0QuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgTGF5ZXJSZW5kZXJlckNh
cGFiaWxpdGllczsKKworY2xhc3MgQ0NTY29wZWRUZXh0dXJlIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShDQ1Njb3BlZFRleHR1cmUpOworcHVibGljOgorICAgIGV4cGxpY2l0IENDU2NvcGVk
VGV4dHVyZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CisgICAgfkNDU2NvcGVkVGV4
dHVyZSgpOworCisgICAgdm9pZCBwcmVwYXJlKGNvbnN0IEludFNpemUmLCBHQzNEZW51bSBmb3Jt
YXQsIGJvb2wgZm9yRnJhbWVidWZmZXJBdHRhY2htZW50ID0gZmFsc2UpOworCisgICAgYm9vbCBj
cmVhdGUoKTsKKyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICB1bnNpZ25lZCBpZCgpIGNvbnN0IHsg
cmV0dXJuIG1fdGV4dHVyZUlkOyB9CisgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2l6ZTsgfQorICAgIEdDM0RlbnVtIGZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1f
Zm9ybWF0OyB9CisKKyAgICBzaXplX3QgYnl0ZXMoKSBjb25zdDsKKyAgICBzaXplX3QgbWF5YmVC
eXRlcygpIGNvbnN0OworCisgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4
dHVyZUlkOyB9CisKKyAgICBzdGF0aWMgc2l6ZV90IG1lbW9yeVNpemVCeXRlcyhjb25zdCBJbnRT
aXplJiwgR0MzRGVudW0gZm9ybWF0KTsKKworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVDYXBh
YmlsaXRpZXMoY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYpOworCitwcml2YXRlOgor
ICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OworICAgIHVuc2lnbmVkIG1f
dGV4dHVyZUlkOworICAgIEludFNpemUgbV9zaXplOworICAgIEdDM0RlbnVtIG1fZm9ybWF0Owor
ICAgIGJvb2wgbV9mb3JGcmFtZWJ1ZmZlckF0dGFjaG1lbnQ7CisKKyAgICBzdGF0aWMgYm9vbCBt
X3VzZVRleHR1cmVVc2FnZUhpbnQ7CisgICAgc3RhdGljIGJvb2wgbV91c2VUZXh0dXJlU3RvcmFn
ZUV4dDsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRl
eCA1NDlmZGZhNDRiODRhZTFjYTc1MWFkZTQ0MjdjM2Q3YzhjYzk4YTU1Li5jZjRmZDkxMGQxZjRl
ZDc4MWUyNWQ5MDQ2OGY2NTI5NWQyMzM3YjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cGkKQEAgLTg2LDYgKzg2LDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9DQ1NjaGVkdWxlclN0YXRl
TWFjaGluZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1NjaGVkdWxlclRlc3RDb21t
b24uaCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NTY2hlZHVsZXJUZXN0LmNwcCcsCisgICAgICAg
ICAgICAndGVzdHMvQ0NTY29wZWRUZXh0dXJlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3Rz
L0NDU2luZ2xlVGhyZWFkUHJveHlUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NTb2xp
ZENvbG9yTGF5ZXJJbXBsVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDVGVzdENvbW1v
bi5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NTY29wZWRU
ZXh0dXJlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU2NvcGVkVGV4
dHVyZVRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJjODZjNzg1NDQ5NWU5N2FkOWMyMjU4ZTFlMGQ3M2Mw
MjAyY2Q0ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDU2NvcGVkVGV4dHVyZVRlc3QuY3BwCkBAIC0wLDAgKzEsMjQ3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1Njb3BlZFRleHR1cmUuaCIK
KworI2luY2x1ZGUgIkZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCisj
aW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5o
PgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyA6
OnRlc3Rpbmc6Ok1vY2s7Cit1c2luZyA6OnRlc3Rpbmc6Ol87CisKK25hbWVzcGFjZSB7CisKK1RF
U1QoQ0NTY29wZWRUZXh0dXJlVGVzdCwgTmV3U2NvcGVkVGV4dHVyZSkKK3sKKyAgICBSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNy
ZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBGYWtlV2ViR3Jh
cGhpY3NDb250ZXh0M0QoKSksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9z
dFdpbmRvdyk7CisKKyAgICBDQ1Njb3BlZFRleHR1cmUgdGV4dHVyZShjb250ZXh0KTsKKworICAg
IC8vIE5ldyBzY29wZWQgdGV4dHVyZXMgZG8gbm90IGhvbGQgYSB0ZXh0dXJlIHlldC4KKyAgICBF
WFBFQ1RfRkFMU0UodGV4dHVyZSk7CisgICAgRVhQRUNUX0VRKDB1LCB0ZXh0dXJlLmlkKCkpOwor
CisgICAgLy8gTmV3IHNjb3BlZCB0ZXh0dXJlcyBkbyBub3QgaGF2ZSBhIHNpemUgeWV0LgorICAg
IEVYUEVDVF9FUShJbnRTaXplKCksIHRleHR1cmUuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMHUs
IHRleHR1cmUubWF5YmVCeXRlcygpKTsKK30KKworVEVTVChDQ1Njb3BlZFRleHR1cmVUZXN0LCBQ
cmVwYXJlU2NvcGVkVGV4dHVyZSkKK3sKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNv
bnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZy
b21XZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QoKSksIEdy
YXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CisKKyAgICBDQ1Nj
b3BlZFRleHR1cmUgdGV4dHVyZShjb250ZXh0KTsKKyAgICB0ZXh0dXJlLnByZXBhcmUoSW50U2l6
ZSgzMCwgMzApLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7CisKKyAgICAvLyBUaGUgdGV4dHVy
ZSBoYXMgYW4gdW5hbGxvY2F0ZWQgYnl0ZS1zaXplIG5vdy4KKyAgICBzaXplX3QgZXhwZWN0ZWRC
eXRlcyA9IDMwICogMzAgKiA0OworICAgIEVYUEVDVF9FUShleHBlY3RlZEJ5dGVzLCB0ZXh0dXJl
Lm1heWJlQnl0ZXMoKSk7CisKKyAgICAvLyBCdXQgbm90IGFuIGFsbG9jYXRlZCBieXRlLXNpemUu
CisgICAgRVhQRUNUX0VRKDB1LCB0ZXh0dXJlLmJ5dGVzKCkpOworCisgICAgRVhQRUNUX0ZBTFNF
KHRleHR1cmUpOworICAgIEVYUEVDVF9FUShHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgdGV4dHVy
ZS5mb3JtYXQoKSk7CisgICAgRVhQRUNUX0VRKEludFNpemUoMzAsIDMwKSwgdGV4dHVyZS5zaXpl
KCkpOworfQorCitURVNUKENDU2NvcGVkVGV4dHVyZVRlc3QsIENyZWF0ZVNjb3BlZFRleHR1cmUp
Cit7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0
cihuZXcgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEKCkpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVu
ZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOworCisgICAgQ0NTY29wZWRUZXh0dXJlIHRleHR1cmUo
Y29udGV4dCk7CisgICAgdGV4dHVyZS5wcmVwYXJlKEludFNpemUoMzAsIDMwKSwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEpOworICAgIHRleHR1cmUuY3JlYXRlKCk7CisKKyAgICAvLyBUaGUgdGV4
dHVyZSBoYXMgYW4gYWxsb2NhdGVkIGJ5dGUtc2l6ZSBub3cuCisgICAgc2l6ZV90IGV4cGVjdGVk
Qnl0ZXMgPSAzMCAqIDMwICogNDsKKyAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRCeXRlcywgdGV4dHVy
ZS5tYXliZUJ5dGVzKCkpOworICAgIEVYUEVDVF9FUShleHBlY3RlZEJ5dGVzLCB0ZXh0dXJlLmJ5
dGVzKCkpOworCisgICAgRVhQRUNUX1RSVUUodGV4dHVyZSk7CisgICAgRVhQRUNUX0VRKEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBLCB0ZXh0dXJlLmZvcm1hdCgpKTsKKyAgICBFWFBFQ1RfRVEoSW50
U2l6ZSgzMCwgMzApLCB0ZXh0dXJlLnNpemUoKSk7Cit9CisKKy8vIEZha2UgV2ViR3JhcGhpY3ND
b250ZXh0M0QgdGhhdCB0cmFja3MgdGhlIG51bWJlciBvZiB0ZXh0dXJlcyBpbiB1c2UuCitjbGFz
cyBUcmFja2luZ1dlYkdyYXBoaWNzQ29udGV4dDNEIDogcHVibGljIEZha2VXZWJHcmFwaGljc0Nv
bnRleHQzRCB7CitwdWJsaWM6CisgICAgVHJhY2tpbmdXZWJHcmFwaGljc0NvbnRleHQzRCgpCisg
ICAgICAgIDogbV9uZXh0VGV4dHVyZUlkKDEpCisgICAgICAgICwgbV9udW1UZXh0dXJlcygwKQor
ICAgIHsgfQorCisgICAgdmlydHVhbCBXZWJHTElkIGNyZWF0ZVRleHR1cmUoKSBPVkVSUklERQor
ICAgIHsKKyAgICAgICAgV2ViR0xJZCBpZCA9IG1fbmV4dFRleHR1cmVJZDsKKyAgICAgICAgKytt
X25leHRUZXh0dXJlSWQ7CisKKyAgICAgICAgbV90ZXh0dXJlcy5zZXQoaWQsIHRydWUpOworICAg
ICAgICArK21fbnVtVGV4dHVyZXM7CisgICAgICAgIHJldHVybiBpZDsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgZGVsZXRlVGV4dHVyZShXZWJHTElkIGlkKSBPVkVSUklERQorICAgIHsKKyAg
ICAgICAgaWYgKCFtX3RleHR1cmVzLmdldChpZCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgbV90ZXh0dXJlcy5zZXQoaWQsIGZhbHNlKTsKKyAgICAgICAgLS1tX251bVRleHR1cmVz
OworICAgIH0KKworICAgIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUdyYXBo
aWNzQ29udGV4dCgpCisgICAgeworICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cih0aGlzKSwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAgICB9CisK
KyAgICB1bnNpZ25lZCBudW1UZXh0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVGV4dHVyZXM7
IH0KKworcHJpdmF0ZToKKyAgICBXZWJHTElkIG1fbmV4dFRleHR1cmVJZDsKKyAgICBIYXNoTWFw
PFdlYkdMSWQsIGJvb2w+IG1fdGV4dHVyZXM7CisgICAgdW5zaWduZWQgbV9udW1UZXh0dXJlczsK
K307CisKK1RFU1QoQ0NTY29wZWRUZXh0dXJlVGVzdCwgU2NvcGVkVGV4dHVyZUlzRGVsZXRlZCkK
K3sKKyAgICBUcmFja2luZ1dlYkdyYXBoaWNzQ29udGV4dDNEKiB0cmFja2luZ0NvbnRleHQgPSBu
ZXcgVHJhY2tpbmdXZWJHcmFwaGljc0NvbnRleHQzRDsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IGNvbnRleHQgPSB0cmFja2luZ0NvbnRleHQtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgp
OworCisgICAgeworICAgICAgICBDQ1Njb3BlZFRleHR1cmUgdGV4dHVyZShjb250ZXh0KTsKKyAg
ICAgICAgdGV4dHVyZS5wcmVwYXJlKEludFNpemUoMzAsIDMwKSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEpOworCisgICAgICAgIEVYUEVDVF9FUSgwdSwgdHJhY2tpbmdDb250ZXh0LT5udW1UZXh0
dXJlcygpKTsKKyAgICAgICAgdGV4dHVyZS5jcmVhdGUoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUo
dGV4dHVyZSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgdHJhY2tpbmdDb250ZXh0LT5udW1UZXh0
dXJlcygpKTsKKyAgICB9CisKKyAgICBFWFBFQ1RfRVEoMHUsIHRyYWNraW5nQ29udGV4dC0+bnVt
VGV4dHVyZXMoKSk7CisKKyAgICB7CisgICAgICAgIENDU2NvcGVkVGV4dHVyZSB0ZXh0dXJlKGNv
bnRleHQpOworICAgICAgICB0ZXh0dXJlLnByZXBhcmUoSW50U2l6ZSgzMCwgMzApLCBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSk7CisKKyAgICAgICAgRVhQRUNUX0VRKDB1LCB0cmFja2luZ0NvbnRl
eHQtPm51bVRleHR1cmVzKCkpOworICAgICAgICB0ZXh0dXJlLmNyZWF0ZSgpOworICAgICAgICBF
WFBFQ1RfVFJVRSh0ZXh0dXJlKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCB0cmFja2luZ0NvbnRl
eHQtPm51bVRleHR1cmVzKCkpOworICAgICAgICB0ZXh0dXJlLmNsZWFyKCk7CisgICAgICAgIEVY
UEVDVF9FUSgwdSwgdHJhY2tpbmdDb250ZXh0LT5udW1UZXh0dXJlcygpKTsKKyAgICB9Cit9CisK
K2NsYXNzIE1vY2tXZWJHcmFwaGljc0NvbnRleHQzRCA6IHB1YmxpYyBGYWtlV2ViR3JhcGhpY3ND
b250ZXh0M0QgeworcHVibGljOgorICAgIE1PQ0tfTUVUSE9EMyh0ZXhQYXJhbWV0ZXJpLCB2b2lk
KFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEZW51bSBwbmFtZSwgV0dDM0RpbnQgcGFyYW0pKTsKKwor
ICAgIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUdyYXBoaWNzQ29udGV4dCgp
CisgICAgeworICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVH
cmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cih0aGlzKSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAgICB9CisKK3ByaXZhdGU6Cit9
OworCitURVNUKENDU2NvcGVkVGV4dHVyZVRlc3QsIENyZWF0ZVNjb3BlZFRleHR1cmVGb3JGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnQpCit7CisgICAgTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNEKiBtb2Nr
Q29udGV4dCA9IG5ldyBNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0Q7CisgICAgUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBjb250ZXh0ID0gbW9ja0NvbnRleHQtPmNyZWF0ZUdyYXBoaWNzQ29udGV4
dCgpOworCisgICAgLy8gVGhpcyB0ZXh0dXJlIGlzIHNldCBmb3IgdXNlIGFzIGZyYW1lYnVmZmVy
IGF0dGFjaG1lbnQsIGJ1dCB0aGUgY2FwYWJpbGl0eSB0byBkbyBzbyBoYXMgbm90IGJlZW4gc2V0
LgorICAgIGJvb2wgZm9yRnJhbWVidWZmZXJBdHRhY2htZW50ID0gdHJ1ZTsKKworICAgIHsKKyAg
ICAgICAgQ0NTY29wZWRUZXh0dXJlIHRleHR1cmUoY29udGV4dCk7CisgICAgICAgIHRleHR1cmUu
cHJlcGFyZShJbnRTaXplKDMwLCAzMCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBmb3JGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnQpOworCisgICAgICAgIC8vIFRoaXMgaXMgYWx3YXlzIGRvbmUgdG8g
c2V0IHVwIHRoZSB0ZXh0dXJlLgorICAgICAgICBFWFBFQ1RfQ0FMTCgqbW9ja0NvbnRleHQsIHRl
eFBhcmFtZXRlcmkoXywgXywgXykpLlRpbWVzKDQpOworCisgICAgICAgIEVYUEVDVF9DQUxMKCpt
b2NrQ29udGV4dCwgdGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
RXh0ZW5zaW9uczNEQ2hyb21pdW06OkdMX1RFWFRVUkVfVVNBR0VfQU5HTEUsIEV4dGVuc2lvbnMz
RENocm9taXVtOjpHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKSkKKyAgICAgICAgICAg
ICAgICAuVGltZXMoMCk7CisKKyAgICAgICAgdGV4dHVyZS5jcmVhdGUoKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUodGV4dHVyZSk7CisKKyAgICAgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3Rh
dGlvbnMobW9ja0NvbnRleHQpOworICAgIH0KKworICAgIC8vIFByZXRlbmQgd2UgaGF2ZSB0aGUg
Y2FwYWJpbGl0eSBvZiBoaW50aW5nIHRleHR1cmVzIGFzIGJlaW5nIHVzZWQgYXMgZnJhbWVidWZm
ZXIgYXR0YWNobWVudC4KKyAgICBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGll
czsKKyAgICBjYXBhYmlsaXRpZXMudXNpbmdUZXh0dXJlVXNhZ2VIaW50ID0gdHJ1ZTsKKyAgICBD
Q1Njb3BlZFRleHR1cmU6OmluaXRpYWxpemVDYXBhYmlsaXRpZXMoY2FwYWJpbGl0aWVzKTsKKwor
ICAgIC8vIFRoaXMgdGV4dHVyZSBpcyBOT1Qgc2V0IGZvciB1c2UgYXMgZnJhbWVidWZmZXIgYXR0
YWNobWVudC4KKyAgICBmb3JGcmFtZWJ1ZmZlckF0dGFjaG1lbnQgPSBmYWxzZTsKKworICAgIHsK
KyAgICAgICAgQ0NTY29wZWRUZXh0dXJlIHRleHR1cmUoY29udGV4dCk7CisgICAgICAgIHRleHR1
cmUucHJlcGFyZShJbnRTaXplKDMwLCAzMCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBmb3JG
cmFtZWJ1ZmZlckF0dGFjaG1lbnQpOworCisgICAgICAgIC8vIFRoaXMgaXMgYWx3YXlzIGRvbmUg
dG8gc2V0IHVwIHRoZSB0ZXh0dXJlLgorICAgICAgICBFWFBFQ1RfQ0FMTCgqbW9ja0NvbnRleHQs
IHRleFBhcmFtZXRlcmkoXywgXywgXykpLlRpbWVzKDQpOworCisgICAgICAgIEVYUEVDVF9DQUxM
KCptb2NrQ29udGV4dCwgdGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgRXh0ZW5zaW9uczNEQ2hyb21pdW06OkdMX1RFWFRVUkVfVVNBR0VfQU5HTEUsIEV4dGVuc2lv
bnMzRENocm9taXVtOjpHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKSkKKyAgICAgICAg
ICAgICAgICAuVGltZXMoMCk7CisKKyAgICAgICAgdGV4dHVyZS5jcmVhdGUoKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUodGV4dHVyZSk7CisKKyAgICAgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBl
Y3RhdGlvbnMobW9ja0NvbnRleHQpOworICAgIH0KKworICAgIC8vIFRoaXMgdGV4dHVyZSBpcyBz
ZXQgZm9yIHVzZSBhcyBmcmFtZWJ1ZmZlciBhdHRhY2htZW50LCBhbmQgd2UgaGF2ZSB0aGUgY2Fw
YWJpbGl0eSB0byBkbyBzbyBzZXQgbm93LgorICAgIGZvckZyYW1lYnVmZmVyQXR0YWNobWVudCA9
IHRydWU7CisKKyAgICB7CisgICAgICAgIENDU2NvcGVkVGV4dHVyZSB0ZXh0dXJlKGNvbnRleHQp
OworICAgICAgICB0ZXh0dXJlLnByZXBhcmUoSW50U2l6ZSgzMCwgMzApLCBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQSwgZm9yRnJhbWVidWZmZXJBdHRhY2htZW50KTsKKworICAgICAgICAvLyBUaGlz
IGlzIGFsd2F5cyBkb25lIHRvIHNldCB1cCB0aGUgdGV4dHVyZS4KKyAgICAgICAgRVhQRUNUX0NB
TEwoKm1vY2tDb250ZXh0LCB0ZXhQYXJhbWV0ZXJpKF8sIF8sIF8pKS5UaW1lcyg0KTsKKworICAg
ICAgICBFWFBFQ1RfQ0FMTCgqbW9ja0NvbnRleHQsIHRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIEV4dGVuc2lvbnMzRENocm9taXVtOjpHTF9URVhUVVJFX1VTQUdF
X0FOR0xFLCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6R0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9B
TkdMRSkpCisgICAgICAgICAgICAgICAgLlRpbWVzKDEpOworCisgICAgICAgIHRleHR1cmUuY3Jl
YXRlKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKHRleHR1cmUpOworCisgICAgICAgIE1vY2s6OlZl
cmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKG1vY2tDb250ZXh0KTsKKyAgICB9Cit9CisKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148412</attachid>
            <date>2012-06-19 13:53:49 -0700</date>
            <delta_ts>2012-06-19 14:55:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89485-20120619165348.patch</filename>
            <type>text/plain</type>
            <size>22906</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwNzE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGY0OTNmMjQ3ZTMyNDRh
NWRmOTM1Yjc0MWZmMDYyZGUxM2EyMjExZi4uMGYzOGYwOGU4MjQxNWY3ZTEzNDFiZjVlMWRmNTNk
OWY5ZDkyYjMyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEyLTA2LTE5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIENDU2NvcGVkVGV4dHVyZSBjbGFzcyBmb3IgY3JlYXRpbmcvZnJlZWluZyB0ZXh0dXJlcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk0ODUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNsYXNz
IHByb3ZpZGVzIGEgc3RhbmRhcmQgd2F5IHRvIGNyZWF0ZSB0ZXh0dXJlIGlkcyBpbiBhIHdheSB0
aGF0CisgICAgICAgIGVuc3VyZXMgdGhleSB3aWxsIGJlIGZyZWVkIGxhdGVyLiBJdCBpcyBtZWFu
dCB0byByZXBsYWNlIHRoZSB1c2Ugb2YKKyAgICAgICAgdGhlIFRleHR1cmVBbGxvY2F0b3IgZm9y
IGFsbG9jYXRpbmcgdGV4dHVyZXMsIGJ5IGFic3RyYWN0aW5nIHRoZQorICAgICAgICBhYmlsaXRp
ZXMgb2YgdGhlIGNsYXNzIGludG8gZWFjaCBDQ1Njb3BlZFRleHR1cmUgb2JqZWN0LiBUaGlzIHBy
b3ZpZGVzCisgICAgICAgIHVzIHdpdGggYSBjZW50cmFsIHBsYWNlIGZvciB0aGUgY29kZSBhcm91
bmQgY3JlYXRpbmcgdGV4dHVyZXMsIGFuZAorICAgICAgICBjb21wdXRpbmcgdGhlIG51bWJlciBv
ZiBieXRlcyB1c2VkIGJ5IGEgdGV4dHVyZS4gSXQgZW5zdXJlcyB0aGF0CisgICAgICAgIHdlIGNh
biBlYXNpbHkga25vdyBob3cgbWFueSBieXRlcyBhbnkgdGV4dHVyZSBvYmplY3QgaXMgdXNpbmcu
CisKKyAgICAgICAgVGhpcyBvYmplY3Qgd291bGQgYmUgdXNlZCBpbiBwbGFjZSBvZiBzdG9yaW5n
IGFuIHVuc2lnbmVkIHRleHR1cmVJZAorICAgICAgICBpbiBvdGhlciBjbGFzc2VzLCBhbmQgd2ls
bCByZXBsYWNlIHRoZSB1c2Ugb2YgTWFuYWdlZFRleHR1cmVzIGZvcgorICAgICAgICBSZW5kZXJQ
YXNzZXMsIGFsbG93aW5nIHVzIHRvIGRlY291cGxlIFJlbmRlclBhc3NlcyBmcm9tIHRoZQorICAg
ICAgICBub3ctb2Jzb2xldGUgVGV4dHVyZU1hbmFnZXIuCisKKyAgICAgICAgVW5pdCB0ZXN0czog
Q0NTY29wZWRUZXh1cmVUZXN0Lk5ld1Njb3BlZFRleHR1cmUKKyAgICAgICAgICAgICAgICAgICAg
Q0NTY29wZWRUZXh1cmVUZXN0LlByZXBhcmVTY29wZWRUZXh0dXJlCisgICAgICAgICAgICAgICAg
ICAgIENDU2NvcGVkVGV4dXJlVGVzdC5DcmVhdGVTY29wZWRUZXh0dXJlCisgICAgICAgICAgICAg
ICAgICAgIENDU2NvcGVkVGV4dXJlVGVzdC5TY29wZWRUZXh0dXJlSXNEZWxldGVkCisgICAgICAg
ICAgICAgICAgICAgIENDU2NvcGVkVGV4dXJlVGVzdC5DcmVhdGVTY29wZWRUZXh0dXJlRm9yRnJh
bWVidWZmZXJBdHRhY2htZW50CisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUZXh0dXJlLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2NvcGVkVGV4dHVyZTo6
Q0NTY29wZWRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2NvcGVkVGV4dHVyZTo6fkND
U2NvcGVkVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0dXJlVG9TdG9yYWdlRm9ybWF0
KToKKyAgICAgICAgKFdlYkNvcmU6OmlzVGV4dHVyZUZvcm1hdFN1cHBvcnRlZEZvclN0b3JhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6Q0NTY29wZWRUZXh0dXJlOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTY29wZWRUZXh0dXJlOjpwcmVwYXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
U2NvcGVkVGV4dHVyZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY29wZWRUZXh0dXJl
OjpzdGVhbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njb3BlZFRleHR1cmU6OnJlbGVhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NTY29wZWRUZXh0dXJlOjpieXRlcyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1Njb3BlZFRleHR1cmU6Om1heWJlQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NT
Y29wZWRUZXh0dXJlOjptZW1vcnlTaXplQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY29w
ZWRUZXh0dXJlOjppbml0aWFsaXplQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njb3BlZFRleHR1cmUuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKENDU2NvcGVkVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1Njb3BlZFRleHR1cmU6OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2NvcGVkVGV4dHVyZTo6
c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njb3BlZFRleHR1cmU6OmZvcm1hdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1Njb3BlZFRleHR1cmU6Om9wZXJhdG9yIGJvb2wpOgorCiAyMDEyLTA2
LTE5ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICAy
MDEyLTA2LTE5ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMDZlOWFjYjc0NDQ0NDU5NDk4NGM2NzFhMTgzZTg0N2Vi
OWY1NTdiZC4uYjRhM2Y2NDk0NDFlZjk1MzFkNmI5YTk1YmE5NjAwMjZhOGYyZjJiZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0wNi0xOSAgRGFuYSBK
YW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIENyZWF0
ZSBDQ1Njb3BlZFRleHR1cmUgY2xhc3MgZm9yIGNyZWF0aW5nL2ZyZWVpbmcgdGV4dHVyZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5NDg1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lw
aToKKyAgICAgICAgKiB0ZXN0cy9DQ1Njb3BlZFRleHR1cmVUZXN0LmNwcDogQWRkZWQuCisKIDIw
MTItMDYtMTkgIEFteSBPdXN0ZXJob3V0ICA8YW91c3RlcmhAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFtDaHJvbWl1bV0gU3R5bGUgRml4IGluIFdlYkRldmljZU9yaWVudGF0aW9uQ29udHJvbGxl
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCmluZGV4IDBjMmU4ZTNlMTA5NmQ2NzY5MzYwNjhhYzdmMDFhNmI3M2Vj
NjkwOGEuLmUxMmY4ZGQxZGNjYjQwZDY1MmQyZjgwZjU1YjkxNTAyZTE5ZDcyODkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKQEAgLTM3NTIsNiArMzc1Miw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NTY2hlZHVsZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY2hlZHVsZXJTdGF0ZU1hY2hpbmUuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NjaGVkdWxlclN0YXRlTWFj
aGluZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Nj
b3BlZFRleHR1cmUuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1Njb3BlZFRleHR1cmUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTY29wZWRUaHJlYWRQcm94eS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhckxheWVySW1wbC5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFyTGF5ZXJJbXBs
LmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NTY29wZWRUZXh0dXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGV4dHVyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTJlOTc0MDYw
ZWNjNzcyMWRkYmRhZWQwZDZmMGQ5YmIyNDBiYTUyYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGV4dHVyZS5j
cHAKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlICJjYy9DQ1Njb3BlZFRleHR1cmUuaCIKKworI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9t
aXVtLmgiCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworQ0NTY29wZWRUZXh0dXJlOjpDQ1Njb3BlZFRleHR1cmUoKQorICAgIDogbV90
ZXh0dXJlSWQoMCkKKyAgICAsIG1fZm9ybWF0KDApCisgICAgLCBtX2ZvckZyYW1lYnVmZmVyQXR0
YWNobWVudChmYWxzZSkKK3sKK30KKworQ0NTY29wZWRUZXh0dXJlOjp+Q0NTY29wZWRUZXh0dXJl
KCkKK3sKKyAgICBjbGVhcigpOworfQorCitzdGF0aWMgaW5saW5lIEdDM0RlbnVtIHRleHR1cmVU
b1N0b3JhZ2VGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkKK3sKKyAgICBHQzNEZW51bSBz
dG9yYWdlRm9ybWF0ID0gRXh0ZW5zaW9uczNEOjpSR0JBOF9PRVM7CisgICAgc3dpdGNoICh0ZXh0
dXJlRm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkJHUkFfRVhUOgorICAgICAgICBzdG9yYWdl
Rm9ybWF0ID0gRXh0ZW5zaW9uczNEQ2hyb21pdW06OkJHUkE4X0VYVDsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHJldHVybiBzdG9yYWdlRm9ybWF0OworfQorCitzdGF0aWMgaW5s
aW5lIGJvb2wgaXNUZXh0dXJlRm9ybWF0U3VwcG9ydGVkRm9yU3RvcmFnZShHQzNEZW51bSBmb3Jt
YXQpCit7CisgICAgcmV0dXJuIGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSB8fCBm
b3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpCR1JBX0VYVDsKK30KKworYm9vbCBDQ1Njb3BlZFRleHR1
cmU6OmNyZWF0ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQoreworICAg
IEFTU0VSVCghbV9jb250ZXh0KTsKKyAgICBBU1NFUlQoIW1fdGV4dHVyZUlkKTsKKyAgICBBU1NF
UlQoIW1fc2l6ZS5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX2Zvcm1hdCA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCIHx8IG1fZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBIHx8IG1f
Zm9ybWF0ID09IEV4dGVuc2lvbnMzRDo6QkdSQV9FWFQpOworCisgICAgbV9jb250ZXh0ID0gY29u
dGV4dDsKKyAgICBtX3RleHR1cmVJZCA9IEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Y3JlYXRl
VGV4dHVyZSgpKTsKKworICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+YmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKSk7CisgICAg
Ly8gRG8gYmFzaWMgbGluZWFyIGZpbHRlcmluZyBvbiByZXNpemUuCisgICAgR0xDKG1fY29udGV4
dC5nZXQoKSwgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0Nv
bnRleHQzRDo6TElORUFSKSk7CisgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT50
ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKSk7Cisg
ICAgLy8gTlBPVCB0ZXh0dXJlcyBpbiBHTCBFUyBvbmx5IHdvcmsgd2hlbiB0aGUgd3JhcCBtb2Rl
IGlzIHNldCB0byBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRS4KKyAgICBHTEMobV9j
b250ZXh0LmdldCgpLCBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3ND
b250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpKTsKKyAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2Nv
bnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RP
X0VER0UpKTsKKworICAgIGlmIChtX3VzZVRleHR1cmVVc2FnZUhpbnQgJiYgbV9mb3JGcmFtZWJ1
ZmZlckF0dGFjaG1lbnQpCisgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+
dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgRXh0ZW5zaW9uczNE
Q2hyb21pdW06OkdMX1RFWFRVUkVfVVNBR0VfQU5HTEUsIEV4dGVuc2lvbnMzRENocm9taXVtOjpH
TF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKSk7CisgICAgaWYgKG1fdXNlVGV4dHVyZVN0
b3JhZ2VFeHQgJiYgaXNUZXh0dXJlRm9ybWF0U3VwcG9ydGVkRm9yU3RvcmFnZShtX2Zvcm1hdCkp
IHsKKyAgICAgICAgRXh0ZW5zaW9uczNEQ2hyb21pdW0qIGV4dGVuc2lvbnMgPSBzdGF0aWNfY2Fz
dDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpKTsKKyAg
ICAgICAgR0MzRGVudW0gc3RvcmFnZUZvcm1hdCA9IHRleHR1cmVUb1N0b3JhZ2VGb3JtYXQobV9m
b3JtYXQpOworICAgICAgICBleHRlbnNpb25zLT50ZXhTdG9yYWdlMkRFWFQoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIDEsIHN0b3JhZ2VGb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3Np
emUuaGVpZ2h0KCkpOworICAgIH0gZWxzZQorICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBt
X2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIDAsIG1fZm9ybWF0LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBt
X2Zvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpKTsKKyAgICBHTEMobV9j
b250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCAwKSk7CisKKyAgICByZXR1cm4gbV90ZXh0dXJlSWQ7Cit9CisKK3ZvaWQgQ0NT
Y29wZWRUZXh0dXJlOjpwcmVwYXJlKGNvbnN0IEludFNpemUmIHNpemUsIEdDM0RlbnVtIGZvcm1h
dCwgYm9vbCBmb3JGcmFtZWJ1ZmZlckF0dGFjaG1lbnQpCit7CisgICAgQVNTRVJUKCFtX3RleHR1
cmVJZCk7CisKKyAgICBtX3NpemUgPSBzaXplOworICAgIG1fZm9ybWF0ID0gZm9ybWF0OworICAg
IG1fZm9yRnJhbWVidWZmZXJBdHRhY2htZW50ID0gZm9yRnJhbWVidWZmZXJBdHRhY2htZW50Owor
fQorCit2b2lkIENDU2NvcGVkVGV4dHVyZTo6Y2xlYXIoKQoreworICAgIGlmIChtX3RleHR1cmVJ
ZCkKKyAgICAgICAgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJlKG1fdGV4dHVyZUlkKTsKKyAgICBt
X3RleHR1cmVJZCA9IDA7CisgICAgbV9jb250ZXh0LmNsZWFyKCk7Cit9CisKK3NpemVfdCBDQ1Nj
b3BlZFRleHR1cmU6OmJ5dGVzKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fdGV4dHVyZUlkKQorICAg
ICAgICByZXR1cm4gMHU7CisKKyAgICByZXR1cm4gbWF5YmVCeXRlcygpOworfQorCitzaXplX3Qg
Q0NTY29wZWRUZXh0dXJlOjptYXliZUJ5dGVzKCkgY29uc3QKK3sKKyAgICBpZiAobV9zaXplLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDB1OworCisgICAgcmV0dXJuIENDU2NvcGVkVGV4dHVy
ZTo6bWVtb3J5U2l6ZUJ5dGVzKG1fc2l6ZSwgbV9mb3JtYXQpOworfQorCitzaXplX3QgQ0NTY29w
ZWRUZXh0dXJlOjptZW1vcnlTaXplQnl0ZXMoY29uc3QgSW50U2l6ZSYgc2l6ZSwgR0MzRGVudW0g
Zm9ybWF0KQoreworICAgIHVuc2lnbmVkIGludCBjb21wb25lbnRzUGVyUGl4ZWw7CisgICAgdW5z
aWduZWQgaW50IGJ5dGVzUGVyQ29tcG9uZW50OworICAgIGlmICghR3JhcGhpY3NDb250ZXh0M0Q6
OmNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVycyhmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFLCAmY29tcG9uZW50c1BlclBpeGVsLCAmYnl0ZXNQZXJDb21wb25lbnQp
KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMHU7Cisg
ICAgfQorICAgIHJldHVybiBjb21wb25lbnRzUGVyUGl4ZWwgKiBieXRlc1BlckNvbXBvbmVudCAq
IHNpemUud2lkdGgoKSAqIHNpemUuaGVpZ2h0KCk7Cit9CisKK2Jvb2wgQ0NTY29wZWRUZXh0dXJl
OjptX3VzZVRleHR1cmVVc2FnZUhpbnQgPSBmYWxzZTsKK2Jvb2wgQ0NTY29wZWRUZXh0dXJlOjpt
X3VzZVRleHR1cmVTdG9yYWdlRXh0ID0gZmFsc2U7CisKK3ZvaWQgQ0NTY29wZWRUZXh0dXJlOjpp
bml0aWFsaXplQ2FwYWJpbGl0aWVzKGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIGNh
cGFiaWxpdGllcykKK3sKKyAgICBtX3VzZVRleHR1cmVVc2FnZUhpbnQgPSBjYXBhYmlsaXRpZXMu
dXNpbmdUZXh0dXJlVXNhZ2VIaW50OworICAgIG1fdXNlVGV4dHVyZVN0b3JhZ2VFeHQgPSBjYXBh
YmlsaXRpZXMudXNpbmdUZXh0dXJlU3RvcmFnZUV4dGVuc2lvbjsKK30KKworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRU
ZXh0dXJlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1Njb3BlZFRleHR1cmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYmVlNjkzYjA0NzRkN2QwOWI1NjkzZjEyYWFi
NmIwNDdjMjc0NDA3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUZXh0dXJlLmgKQEAgLTAsMCArMSw3NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQ0NTY29wZWRUZXh0dXJlX2gKKyNkZWZpbmUgQ0NTY29wZWRUZXh0dXJl
X2gKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RydWN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXM7CisKK2NsYXNzIENDU2NvcGVkVGV4
dHVyZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NTY29wZWRUZXh0dXJlKTsKK3B1Ymxp
YzoKKyAgICBDQ1Njb3BlZFRleHR1cmUoKTsKKyAgICB+Q0NTY29wZWRUZXh0dXJlKCk7CisKKyAg
ICB2b2lkIHByZXBhcmUoY29uc3QgSW50U2l6ZSYsIEdDM0RlbnVtIGZvcm1hdCwgYm9vbCBmb3JG
cmFtZWJ1ZmZlckF0dGFjaG1lbnQgPSBmYWxzZSk7CisKKyAgICBib29sIGNyZWF0ZShQYXNzUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CisgICAgdm9pZCBjbGVhcigpOworCisgICAgdW5zaWdu
ZWQgaWQoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVJZDsgfQorICAgIGNvbnN0IEludFNpemUm
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBHQzNEZW51bSBmb3JtYXQoKSBj
b25zdCB7IHJldHVybiBtX2Zvcm1hdDsgfQorCisgICAgc2l6ZV90IGJ5dGVzKCkgY29uc3Q7Cisg
ICAgc2l6ZV90IG1heWJlQnl0ZXMoKSBjb25zdDsKKworICAgIG9wZXJhdG9yIGJvb2woKSBjb25z
dCB7IHJldHVybiBtX3RleHR1cmVJZDsgfQorCisgICAgc3RhdGljIHNpemVfdCBtZW1vcnlTaXpl
Qnl0ZXMoY29uc3QgSW50U2l6ZSYsIEdDM0RlbnVtIGZvcm1hdCk7CisKKyAgICBzdGF0aWMgdm9p
ZCBpbml0aWFsaXplQ2FwYWJpbGl0aWVzKGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMm
KTsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsK
KyAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICBHQzNE
ZW51bSBtX2Zvcm1hdDsKKyAgICBib29sIG1fZm9yRnJhbWVidWZmZXJBdHRhY2htZW50OworCisg
ICAgc3RhdGljIGJvb2wgbV91c2VUZXh0dXJlVXNhZ2VIaW50OworICAgIHN0YXRpYyBib29sIG1f
dXNlVGV4dHVyZVN0b3JhZ2VFeHQ7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cGkKaW5kZXggNTQ5ZmRmYTQ0Yjg0YWUxY2E3NTFhZGU0NDI3YzNkN2M4Y2M5OGE1
NS4uY2Y0ZmQ5MTBkMWY0ZWQ3ODFlMjVkOTA0NjhmNjUyOTVkMjMzN2I1MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXBpCkBAIC04Niw2ICs4Niw3IEBACiAgICAgICAgICAgICAndGVzdHMv
Q0NTY2hlZHVsZXJTdGF0ZU1hY2hpbmVUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NT
Y2hlZHVsZXJUZXN0Q29tbW9uLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDU2NoZWR1bGVyVGVz
dC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDU2NvcGVkVGV4dHVyZVRlc3QuY3BwJywKICAg
ICAgICAgICAgICd0ZXN0cy9DQ1NpbmdsZVRocmVhZFByb3h5VGVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL0NDU29saWRDb2xvckxheWVySW1wbFRlc3QuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9DQ1Rlc3RDb21tb24uaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDU2NvcGVkVGV4dHVyZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ1Njb3BlZFRleHR1cmVUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMmRhYWMyZDBmMDkxNjU3
ODJmNzE5ODIxZGVlYzI4M2RiNzJkNjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ1Njb3BlZFRleHR1cmVUZXN0LmNwcApAQCAtMCwwICsxLDI0MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NT
Y29wZWRUZXh0dXJlLmgiCisKKyNpbmNsdWRlICJGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorCisjaW5jbHVk
ZSA8Z21vY2svZ21vY2suaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2Ug
V2ViS2l0OwordXNpbmcgOjp0ZXN0aW5nOjpNb2NrOwordXNpbmcgOjp0ZXN0aW5nOjpfOworCitu
YW1lc3BhY2UgeworCitURVNUKENDU2NvcGVkVGV4dHVyZVRlc3QsIE5ld1Njb3BlZFRleHR1cmUp
Cit7CisgICAgQ0NTY29wZWRUZXh0dXJlIHRleHR1cmU7CisKKyAgICAvLyBOZXcgc2NvcGVkIHRl
eHR1cmVzIGRvIG5vdCBob2xkIGEgdGV4dHVyZSB5ZXQuCisgICAgRVhQRUNUX0ZBTFNFKHRleHR1
cmUpOworICAgIEVYUEVDVF9FUSgwdSwgdGV4dHVyZS5pZCgpKTsKKworICAgIC8vIE5ldyBzY29w
ZWQgdGV4dHVyZXMgZG8gbm90IGhhdmUgYSBzaXplIHlldC4KKyAgICBFWFBFQ1RfRVEoSW50U2l6
ZSgpLCB0ZXh0dXJlLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDB1LCB0ZXh0dXJlLm1heWJlQnl0
ZXMoKSk7Cit9CisKK1RFU1QoQ0NTY29wZWRUZXh0dXJlVGVzdCwgUHJlcGFyZVNjb3BlZFRleHR1
cmUpCit7CisgICAgQ0NTY29wZWRUZXh0dXJlIHRleHR1cmU7CisgICAgdGV4dHVyZS5wcmVwYXJl
KEludFNpemUoMzAsIDMwKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpOworCisgICAgLy8gVGhl
IHRleHR1cmUgaGFzIGFuIHVuYWxsb2NhdGVkIGJ5dGUtc2l6ZSBub3cuCisgICAgc2l6ZV90IGV4
cGVjdGVkQnl0ZXMgPSAzMCAqIDMwICogNDsKKyAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRCeXRlcywg
dGV4dHVyZS5tYXliZUJ5dGVzKCkpOworCisgICAgLy8gQnV0IG5vdCBhbiBhbGxvY2F0ZWQgYnl0
ZS1zaXplLgorICAgIEVYUEVDVF9FUSgwdSwgdGV4dHVyZS5ieXRlcygpKTsKKworICAgIEVYUEVD
VF9GQUxTRSh0ZXh0dXJlKTsKKyAgICBFWFBFQ1RfRVEoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEs
IHRleHR1cmUuZm9ybWF0KCkpOworICAgIEVYUEVDVF9FUShJbnRTaXplKDMwLCAzMCksIHRleHR1
cmUuc2l6ZSgpKTsKK30KKworVEVTVChDQ1Njb3BlZFRleHR1cmVUZXN0LCBDcmVhdGVTY29wZWRU
ZXh0dXJlKQoreworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQo
YWRvcHRQdHIobmV3IEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCgpKSwgR3JhcGhpY3NDb250ZXh0
M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKworICAgIENDU2NvcGVkVGV4dHVyZSB0
ZXh0dXJlOworICAgIHRleHR1cmUucHJlcGFyZShJbnRTaXplKDMwLCAzMCksIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBKTsKKyAgICB0ZXh0dXJlLmNyZWF0ZShjb250ZXh0KTsKKworICAgIC8vIFRo
ZSB0ZXh0dXJlIGhhcyBhbiBhbGxvY2F0ZWQgYnl0ZS1zaXplIG5vdy4KKyAgICBzaXplX3QgZXhw
ZWN0ZWRCeXRlcyA9IDMwICogMzAgKiA0OworICAgIEVYUEVDVF9FUShleHBlY3RlZEJ5dGVzLCB0
ZXh0dXJlLm1heWJlQnl0ZXMoKSk7CisgICAgRVhQRUNUX0VRKGV4cGVjdGVkQnl0ZXMsIHRleHR1
cmUuYnl0ZXMoKSk7CisKKyAgICBFWFBFQ1RfVFJVRSh0ZXh0dXJlKTsKKyAgICBFWFBFQ1RfRVEo
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIHRleHR1cmUuZm9ybWF0KCkpOworICAgIEVYUEVDVF9F
UShJbnRTaXplKDMwLCAzMCksIHRleHR1cmUuc2l6ZSgpKTsKK30KKworLy8gRmFrZSBXZWJHcmFw
aGljc0NvbnRleHQzRCB0aGF0IHRyYWNrcyB0aGUgbnVtYmVyIG9mIHRleHR1cmVzIGluIHVzZS4K
K2NsYXNzIFRyYWNraW5nV2ViR3JhcGhpY3NDb250ZXh0M0QgOiBwdWJsaWMgRmFrZVdlYkdyYXBo
aWNzQ29udGV4dDNEIHsKK3B1YmxpYzoKKyAgICBUcmFja2luZ1dlYkdyYXBoaWNzQ29udGV4dDNE
KCkKKyAgICAgICAgOiBtX25leHRUZXh0dXJlSWQoMSkKKyAgICAgICAgLCBtX251bVRleHR1cmVz
KDApCisgICAgeyB9CisKKyAgICB2aXJ0dWFsIFdlYkdMSWQgY3JlYXRlVGV4dHVyZSgpIE9WRVJS
SURFCisgICAgeworICAgICAgICBXZWJHTElkIGlkID0gbV9uZXh0VGV4dHVyZUlkOworICAgICAg
ICArK21fbmV4dFRleHR1cmVJZDsKKworICAgICAgICBtX3RleHR1cmVzLnNldChpZCwgdHJ1ZSk7
CisgICAgICAgICsrbV9udW1UZXh0dXJlczsKKyAgICAgICAgcmV0dXJuIGlkOworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0dXJlKFdlYkdMSWQgaWQpIE9WRVJSSURFCisgICAg
eworICAgICAgICBpZiAoIW1fdGV4dHVyZXMuZ2V0KGlkKSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBtX3RleHR1cmVzLnNldChpZCwgZmFsc2UpOworICAgICAgICAtLW1fbnVtVGV4
dHVyZXM7CisgICAgfQorCisgICAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRl
R3JhcGhpY3NDb250ZXh0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKHRo
aXMpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOworICAg
IH0KKworICAgIHVuc2lnbmVkIG51bVRleHR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9udW1UZXh0
dXJlczsgfQorCitwcml2YXRlOgorICAgIFdlYkdMSWQgbV9uZXh0VGV4dHVyZUlkOworICAgIEhh
c2hNYXA8V2ViR0xJZCwgYm9vbD4gbV90ZXh0dXJlczsKKyAgICB1bnNpZ25lZCBtX251bVRleHR1
cmVzOworfTsKKworVEVTVChDQ1Njb3BlZFRleHR1cmVUZXN0LCBTY29wZWRUZXh0dXJlSXNEZWxl
dGVkKQoreworICAgIFRyYWNraW5nV2ViR3JhcGhpY3NDb250ZXh0M0QqIHRyYWNraW5nQ29udGV4
dCA9IG5ldyBUcmFja2luZ1dlYkdyYXBoaWNzQ29udGV4dDNEOworICAgIFJlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY29udGV4dCA9IHRyYWNraW5nQ29udGV4dC0+Y3JlYXRlR3JhcGhpY3NDb250
ZXh0KCk7CisKKyAgICB7CisgICAgICAgIENDU2NvcGVkVGV4dHVyZSB0ZXh0dXJlOworICAgICAg
ICB0ZXh0dXJlLnByZXBhcmUoSW50U2l6ZSgzMCwgMzApLCBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSk7CisKKyAgICAgICAgRVhQRUNUX0VRKDB1LCB0cmFja2luZ0NvbnRleHQtPm51bVRleHR1cmVz
KCkpOworICAgICAgICB0ZXh0dXJlLmNyZWF0ZShjb250ZXh0KTsKKyAgICAgICAgRVhQRUNUX1RS
VUUodGV4dHVyZSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgdHJhY2tpbmdDb250ZXh0LT5udW1U
ZXh0dXJlcygpKTsKKyAgICB9CisKKyAgICBFWFBFQ1RfRVEoMHUsIHRyYWNraW5nQ29udGV4dC0+
bnVtVGV4dHVyZXMoKSk7CisKKyAgICB7CisgICAgICAgIENDU2NvcGVkVGV4dHVyZSB0ZXh0dXJl
OworICAgICAgICB0ZXh0dXJlLnByZXBhcmUoSW50U2l6ZSgzMCwgMzApLCBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQSk7CisKKyAgICAgICAgRVhQRUNUX0VRKDB1LCB0cmFja2luZ0NvbnRleHQtPm51
bVRleHR1cmVzKCkpOworICAgICAgICB0ZXh0dXJlLmNyZWF0ZShjb250ZXh0KTsKKyAgICAgICAg
RVhQRUNUX1RSVUUodGV4dHVyZSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgdHJhY2tpbmdDb250
ZXh0LT5udW1UZXh0dXJlcygpKTsKKyAgICAgICAgdGV4dHVyZS5jbGVhcigpOworICAgICAgICBF
WFBFQ1RfRVEoMHUsIHRyYWNraW5nQ29udGV4dC0+bnVtVGV4dHVyZXMoKSk7CisgICAgfQorfQor
CitjbGFzcyBNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0QgOiBwdWJsaWMgRmFrZVdlYkdyYXBoaWNz
Q29udGV4dDNEIHsKK3B1YmxpYzoKKyAgICBNT0NLX01FVEhPRDModGV4UGFyYW1ldGVyaSwgdm9p
ZChXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGVudW0gcG5hbWUsIFdHQzNEaW50IHBhcmFtKSk7CisK
KyAgICBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVHcmFwaGljc0NvbnRleHQo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRl
R3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIodGhpcyksIEdyYXBoaWNzQ29u
dGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CisgICAgfQorCitwcml2YXRlOgor
fTsKKworVEVTVChDQ1Njb3BlZFRleHR1cmVUZXN0LCBDcmVhdGVTY29wZWRUZXh0dXJlRm9yRnJh
bWVidWZmZXJBdHRhY2htZW50KQoreworICAgIE1vY2tXZWJHcmFwaGljc0NvbnRleHQzRCogbW9j
a0NvbnRleHQgPSBuZXcgTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNEOworICAgIFJlZlB0cjxHcmFw
aGljc0NvbnRleHQzRD4gY29udGV4dCA9IG1vY2tDb250ZXh0LT5jcmVhdGVHcmFwaGljc0NvbnRl
eHQoKTsKKworICAgIC8vIFRoaXMgdGV4dHVyZSBpcyBzZXQgZm9yIHVzZSBhcyBmcmFtZWJ1ZmZl
ciBhdHRhY2htZW50LCBidXQgdGhlIGNhcGFiaWxpdHkgdG8gZG8gc28gaGFzIG5vdCBiZWVuIHNl
dC4KKyAgICBib29sIGZvckZyYW1lYnVmZmVyQXR0YWNobWVudCA9IHRydWU7CisKKyAgICB7Cisg
ICAgICAgIENDU2NvcGVkVGV4dHVyZSB0ZXh0dXJlOworICAgICAgICB0ZXh0dXJlLnByZXBhcmUo
SW50U2l6ZSgzMCwgMzApLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgZm9yRnJhbWVidWZmZXJB
dHRhY2htZW50KTsKKworICAgICAgICAvLyBUaGlzIGlzIGFsd2F5cyBkb25lIHRvIHNldCB1cCB0
aGUgdGV4dHVyZS4KKyAgICAgICAgRVhQRUNUX0NBTEwoKm1vY2tDb250ZXh0LCB0ZXhQYXJhbWV0
ZXJpKF8sIF8sIF8pKS5UaW1lcyg0KTsKKworICAgICAgICBFWFBFQ1RfQ0FMTCgqbW9ja0NvbnRl
eHQsIHRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEV4dGVuc2lv
bnMzRENocm9taXVtOjpHTF9URVhUVVJFX1VTQUdFX0FOR0xFLCBFeHRlbnNpb25zM0RDaHJvbWl1
bTo6R0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSkpCisgICAgICAgICAgICAgICAgLlRp
bWVzKDApOworCisgICAgICAgIHRleHR1cmUuY3JlYXRlKGNvbnRleHQpOworICAgICAgICBFWFBF
Q1RfVFJVRSh0ZXh0dXJlKTsKKworICAgICAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0
aW9ucyhtb2NrQ29udGV4dCk7CisgICAgfQorCisgICAgLy8gUHJldGVuZCB3ZSBoYXZlIHRoZSBj
YXBhYmlsaXR5IG9mIGhpbnRpbmcgdGV4dHVyZXMgYXMgYmVpbmcgdXNlZCBhcyBmcmFtZWJ1ZmZl
ciBhdHRhY2htZW50LgorICAgIExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVz
OworICAgIGNhcGFiaWxpdGllcy51c2luZ1RleHR1cmVVc2FnZUhpbnQgPSB0cnVlOworICAgIEND
U2NvcGVkVGV4dHVyZTo6aW5pdGlhbGl6ZUNhcGFiaWxpdGllcyhjYXBhYmlsaXRpZXMpOworCisg
ICAgLy8gVGhpcyB0ZXh0dXJlIGlzIE5PVCBzZXQgZm9yIHVzZSBhcyBmcmFtZWJ1ZmZlciBhdHRh
Y2htZW50LgorICAgIGZvckZyYW1lYnVmZmVyQXR0YWNobWVudCA9IGZhbHNlOworCisgICAgewor
ICAgICAgICBDQ1Njb3BlZFRleHR1cmUgdGV4dHVyZTsKKyAgICAgICAgdGV4dHVyZS5wcmVwYXJl
KEludFNpemUoMzAsIDMwKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIGZvckZyYW1lYnVmZmVy
QXR0YWNobWVudCk7CisKKyAgICAgICAgLy8gVGhpcyBpcyBhbHdheXMgZG9uZSB0byBzZXQgdXAg
dGhlIHRleHR1cmUuCisgICAgICAgIEVYUEVDVF9DQUxMKCptb2NrQ29udGV4dCwgdGV4UGFyYW1l
dGVyaShfLCBfLCBfKSkuVGltZXMoNCk7CisKKyAgICAgICAgRVhQRUNUX0NBTEwoKm1vY2tDb250
ZXh0LCB0ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBFeHRlbnNp
b25zM0RDaHJvbWl1bTo6R0xfVEVYVFVSRV9VU0FHRV9BTkdMRSwgRXh0ZW5zaW9uczNEQ2hyb21p
dW06OkdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpKQorICAgICAgICAgICAgICAgIC5U
aW1lcygwKTsKKworICAgICAgICB0ZXh0dXJlLmNyZWF0ZShjb250ZXh0KTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUodGV4dHVyZSk7CisKKyAgICAgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3Rh
dGlvbnMobW9ja0NvbnRleHQpOworICAgIH0KKworICAgIC8vIFRoaXMgdGV4dHVyZSBpcyBzZXQg
Zm9yIHVzZSBhcyBmcmFtZWJ1ZmZlciBhdHRhY2htZW50LCBhbmQgd2UgaGF2ZSB0aGUgY2FwYWJp
bGl0eSB0byBkbyBzbyBzZXQgbm93LgorICAgIGZvckZyYW1lYnVmZmVyQXR0YWNobWVudCA9IHRy
dWU7CisKKyAgICB7CisgICAgICAgIENDU2NvcGVkVGV4dHVyZSB0ZXh0dXJlOworICAgICAgICB0
ZXh0dXJlLnByZXBhcmUoSW50U2l6ZSgzMCwgMzApLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwg
Zm9yRnJhbWVidWZmZXJBdHRhY2htZW50KTsKKworICAgICAgICAvLyBUaGlzIGlzIGFsd2F5cyBk
b25lIHRvIHNldCB1cCB0aGUgdGV4dHVyZS4KKyAgICAgICAgRVhQRUNUX0NBTEwoKm1vY2tDb250
ZXh0LCB0ZXhQYXJhbWV0ZXJpKF8sIF8sIF8pKS5UaW1lcyg0KTsKKworICAgICAgICBFWFBFQ1Rf
Q0FMTCgqbW9ja0NvbnRleHQsIHRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIEV4dGVuc2lvbnMzRENocm9taXVtOjpHTF9URVhUVVJFX1VTQUdFX0FOR0xFLCBFeHRl
bnNpb25zM0RDaHJvbWl1bTo6R0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSkpCisgICAg
ICAgICAgICAgICAgLlRpbWVzKDEpOworCisgICAgICAgIHRleHR1cmUuY3JlYXRlKGNvbnRleHQp
OworICAgICAgICBFWFBFQ1RfVFJVRSh0ZXh0dXJlKTsKKworICAgICAgICBNb2NrOjpWZXJpZnlB
bmRDbGVhckV4cGVjdGF0aW9ucyhtb2NrQ29udGV4dCk7CisgICAgfQorfQorCit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148433</attachid>
            <date>2012-06-19 14:55:54 -0700</date>
            <delta_ts>2012-06-20 15:40:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89485-20120619175553.patch</filename>
            <type>text/plain</type>
            <size>23209</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwNzE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGY0OTNmMjQ3ZTMyNDRh
NWRmOTM1Yjc0MWZmMDYyZGUxM2EyMjExZi4uMGYzOGYwOGU4MjQxNWY3ZTEzNDFiZjVlMWRmNTNk
OWY5ZDkyYjMyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEyLTA2LTE5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIENDU2NvcGVkVGV4dHVyZSBjbGFzcyBmb3IgY3JlYXRpbmcvZnJlZWluZyB0ZXh0dXJlcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk0ODUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNsYXNz
IHByb3ZpZGVzIGEgc3RhbmRhcmQgd2F5IHRvIGNyZWF0ZSB0ZXh0dXJlIGlkcyBpbiBhIHdheSB0
aGF0CisgICAgICAgIGVuc3VyZXMgdGhleSB3aWxsIGJlIGZyZWVkIGxhdGVyLiBJdCBpcyBtZWFu
dCB0byByZXBsYWNlIHRoZSB1c2Ugb2YKKyAgICAgICAgdGhlIFRleHR1cmVBbGxvY2F0b3IgZm9y
IGFsbG9jYXRpbmcgdGV4dHVyZXMsIGJ5IGFic3RyYWN0aW5nIHRoZQorICAgICAgICBhYmlsaXRp
ZXMgb2YgdGhlIGNsYXNzIGludG8gZWFjaCBDQ1Njb3BlZFRleHR1cmUgb2JqZWN0LiBUaGlzIHBy
b3ZpZGVzCisgICAgICAgIHVzIHdpdGggYSBjZW50cmFsIHBsYWNlIGZvciB0aGUgY29kZSBhcm91
bmQgY3JlYXRpbmcgdGV4dHVyZXMsIGFuZAorICAgICAgICBjb21wdXRpbmcgdGhlIG51bWJlciBv
ZiBieXRlcyB1c2VkIGJ5IGEgdGV4dHVyZS4gSXQgZW5zdXJlcyB0aGF0CisgICAgICAgIHdlIGNh
biBlYXNpbHkga25vdyBob3cgbWFueSBieXRlcyBhbnkgdGV4dHVyZSBvYmplY3QgaXMgdXNpbmcu
CisKKyAgICAgICAgVGhpcyBvYmplY3Qgd291bGQgYmUgdXNlZCBpbiBwbGFjZSBvZiBzdG9yaW5n
IGFuIHVuc2lnbmVkIHRleHR1cmVJZAorICAgICAgICBpbiBvdGhlciBjbGFzc2VzLCBhbmQgd2ls
bCByZXBsYWNlIHRoZSB1c2Ugb2YgTWFuYWdlZFRleHR1cmVzIGZvcgorICAgICAgICBSZW5kZXJQ
YXNzZXMsIGFsbG93aW5nIHVzIHRvIGRlY291cGxlIFJlbmRlclBhc3NlcyBmcm9tIHRoZQorICAg
ICAgICBub3ctb2Jzb2xldGUgVGV4dHVyZU1hbmFnZXIuCisKKyAgICAgICAgVW5pdCB0ZXN0czog
Q0NTY29wZWRUZXh1cmVUZXN0Lk5ld1Njb3BlZFRleHR1cmUKKyAgICAgICAgICAgICAgICAgICAg
Q0NTY29wZWRUZXh1cmVUZXN0LlByZXBhcmVTY29wZWRUZXh0dXJlCisgICAgICAgICAgICAgICAg
ICAgIENDU2NvcGVkVGV4dXJlVGVzdC5DcmVhdGVTY29wZWRUZXh0dXJlCisgICAgICAgICAgICAg
ICAgICAgIENDU2NvcGVkVGV4dXJlVGVzdC5TY29wZWRUZXh0dXJlSXNEZWxldGVkCisgICAgICAg
ICAgICAgICAgICAgIENDU2NvcGVkVGV4dXJlVGVzdC5DcmVhdGVTY29wZWRUZXh0dXJlRm9yRnJh
bWVidWZmZXJBdHRhY2htZW50CisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUZXh0dXJlLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2NvcGVkVGV4dHVyZTo6
Q0NTY29wZWRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2NvcGVkVGV4dHVyZTo6fkND
U2NvcGVkVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0dXJlVG9TdG9yYWdlRm9ybWF0
KToKKyAgICAgICAgKFdlYkNvcmU6OmlzVGV4dHVyZUZvcm1hdFN1cHBvcnRlZEZvclN0b3JhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6Q0NTY29wZWRUZXh0dXJlOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTY29wZWRUZXh0dXJlOjpwcmVwYXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
U2NvcGVkVGV4dHVyZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY29wZWRUZXh0dXJl
OjpzdGVhbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njb3BlZFRleHR1cmU6OnJlbGVhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NTY29wZWRUZXh0dXJlOjpieXRlcyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1Njb3BlZFRleHR1cmU6Om1heWJlQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NT
Y29wZWRUZXh0dXJlOjptZW1vcnlTaXplQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY29w
ZWRUZXh0dXJlOjppbml0aWFsaXplQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njb3BlZFRleHR1cmUuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKENDU2NvcGVkVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1Njb3BlZFRleHR1cmU6OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2NvcGVkVGV4dHVyZTo6
c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njb3BlZFRleHR1cmU6OmZvcm1hdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1Njb3BlZFRleHR1cmU6Om9wZXJhdG9yIGJvb2wpOgorCiAyMDEyLTA2
LTE5ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICAy
MDEyLTA2LTE5ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMDZlOWFjYjc0NDQ0NDU5NDk4NGM2NzFhMTgzZTg0N2Vi
OWY1NTdiZC4uYjRhM2Y2NDk0NDFlZjk1MzFkNmI5YTk1YmE5NjAwMjZhOGYyZjJiZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0wNi0xOSAgRGFuYSBK
YW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIENyZWF0
ZSBDQ1Njb3BlZFRleHR1cmUgY2xhc3MgZm9yIGNyZWF0aW5nL2ZyZWVpbmcgdGV4dHVyZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5NDg1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lw
aToKKyAgICAgICAgKiB0ZXN0cy9DQ1Njb3BlZFRleHR1cmVUZXN0LmNwcDogQWRkZWQuCisKIDIw
MTItMDYtMTkgIEFteSBPdXN0ZXJob3V0ICA8YW91c3RlcmhAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFtDaHJvbWl1bV0gU3R5bGUgRml4IGluIFdlYkRldmljZU9yaWVudGF0aW9uQ29udHJvbGxl
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCmluZGV4IDBjMmU4ZTNlMTA5NmQ2NzY5MzYwNjhhYzdmMDFhNmI3M2Vj
NjkwOGEuLmUxMmY4ZGQxZGNjYjQwZDY1MmQyZjgwZjU1YjkxNTAyZTE5ZDcyODkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKQEAgLTM3NTIsNiArMzc1Miw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NTY2hlZHVsZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY2hlZHVsZXJTdGF0ZU1hY2hpbmUuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NjaGVkdWxlclN0YXRlTWFj
aGluZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Nj
b3BlZFRleHR1cmUuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1Njb3BlZFRleHR1cmUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTY29wZWRUaHJlYWRQcm94eS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhckxheWVySW1wbC5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFyTGF5ZXJJbXBs
LmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NTY29wZWRUZXh0dXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGV4dHVyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDBmZWFkOWQy
ZTJhNDAxZTljMDQ2M2VhNzZmYmY2ZDg1MWFmM2U0ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGV4dHVyZS5j
cHAKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlICJjYy9DQ1Njb3BlZFRleHR1cmUuaCIKKworI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9t
aXVtLmgiCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworQ0NTY29wZWRUZXh0dXJlOjpDQ1Njb3BlZFRleHR1cmUoKQorICAgIDogbV90
ZXh0dXJlSWQoMCkKKyAgICAsIG1fZm9ybWF0KDApCisgICAgLCBtX2ZvckZyYW1lYnVmZmVyQXR0
YWNobWVudChmYWxzZSkKK3sKK30KKworQ0NTY29wZWRUZXh0dXJlOjp+Q0NTY29wZWRUZXh0dXJl
KCkKK3sKKyAgICBjbGVhcigpOworfQorCitzdGF0aWMgaW5saW5lIEdDM0RlbnVtIHRleHR1cmVU
b1N0b3JhZ2VGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkKK3sKKyAgICBHQzNEZW51bSBz
dG9yYWdlRm9ybWF0ID0gRXh0ZW5zaW9uczNEOjpSR0JBOF9PRVM7CisgICAgc3dpdGNoICh0ZXh0
dXJlRm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkJHUkFfRVhUOgorICAgICAgICBzdG9yYWdl
Rm9ybWF0ID0gRXh0ZW5zaW9uczNEQ2hyb21pdW06OkJHUkE4X0VYVDsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHJldHVybiBzdG9yYWdlRm9ybWF0OworfQorCitzdGF0aWMgaW5s
aW5lIGJvb2wgaXNUZXh0dXJlRm9ybWF0U3VwcG9ydGVkRm9yU3RvcmFnZShHQzNEZW51bSBmb3Jt
YXQpCit7CisgICAgcmV0dXJuIGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSB8fCBm
b3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpCR1JBX0VYVDsKK30KKworYm9vbCBDQ1Njb3BlZFRleHR1
cmU6OmNyZWF0ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQoreworICAg
IEFTU0VSVCghbV9jb250ZXh0KTsKKyAgICBBU1NFUlQoIW1fdGV4dHVyZUlkKTsKKyAgICBBU1NF
UlQoIW1fc2l6ZS5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX2Zvcm1hdCA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCIHx8IG1fZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBIHx8IG1f
Zm9ybWF0ID09IEV4dGVuc2lvbnMzRDo6QkdSQV9FWFQpOworCisgICAgbV9jb250ZXh0ID0gY29u
dGV4dDsKKyAgICBtX3RleHR1cmVJZCA9IEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Y3JlYXRl
VGV4dHVyZSgpKTsKKworICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+YmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKSk7CisgICAg
Ly8gRG8gYmFzaWMgbGluZWFyIGZpbHRlcmluZyBvbiByZXNpemUuCisgICAgR0xDKG1fY29udGV4
dC5nZXQoKSwgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0Nv
bnRleHQzRDo6TElORUFSKSk7CisgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT50
ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKSk7Cisg
ICAgLy8gTlBPVCB0ZXh0dXJlcyBpbiBHTCBFUyBvbmx5IHdvcmsgd2hlbiB0aGUgd3JhcCBtb2Rl
IGlzIHNldCB0byBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRS4KKyAgICBHTEMobV9j
b250ZXh0LmdldCgpLCBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3ND
b250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpKTsKKyAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2Nv
bnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RP
X0VER0UpKTsKKworICAgIGlmIChtX3VzZVRleHR1cmVVc2FnZUhpbnQgJiYgbV9mb3JGcmFtZWJ1
ZmZlckF0dGFjaG1lbnQpCisgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+
dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgRXh0ZW5zaW9uczNE
Q2hyb21pdW06OkdMX1RFWFRVUkVfVVNBR0VfQU5HTEUsIEV4dGVuc2lvbnMzRENocm9taXVtOjpH
TF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKSk7CisgICAgaWYgKG1fdXNlVGV4dHVyZVN0
b3JhZ2VFeHQgJiYgaXNUZXh0dXJlRm9ybWF0U3VwcG9ydGVkRm9yU3RvcmFnZShtX2Zvcm1hdCkp
IHsKKyAgICAgICAgRXh0ZW5zaW9uczNEQ2hyb21pdW0qIGV4dGVuc2lvbnMgPSBzdGF0aWNfY2Fz
dDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpKTsKKyAg
ICAgICAgR0MzRGVudW0gc3RvcmFnZUZvcm1hdCA9IHRleHR1cmVUb1N0b3JhZ2VGb3JtYXQobV9m
b3JtYXQpOworICAgICAgICBleHRlbnNpb25zLT50ZXhTdG9yYWdlMkRFWFQoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIDEsIHN0b3JhZ2VGb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3Np
emUuaGVpZ2h0KCkpOworICAgIH0gZWxzZQorICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBt
X2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIDAsIG1fZm9ybWF0LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBt
X2Zvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpKTsKKyAgICBHTEMobV9j
b250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCAwKSk7CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgbV9jcmVhdGVUaHJl
YWRJZGVudGlmaWVyID0gV1RGOjpjdXJyZW50VGhyZWFkKCk7CisjZW5kaWYKKworICAgIHJldHVy
biBtX3RleHR1cmVJZDsKK30KKwordm9pZCBDQ1Njb3BlZFRleHR1cmU6OnByZXBhcmUoY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgR0MzRGVudW0gZm9ybWF0LCBib29sIGZvckZyYW1lYnVmZmVyQXR0YWNo
bWVudCkKK3sKKyAgICBBU1NFUlQoIW1fdGV4dHVyZUlkKTsKKworICAgIG1fc2l6ZSA9IHNpemU7
CisgICAgbV9mb3JtYXQgPSBmb3JtYXQ7CisgICAgbV9mb3JGcmFtZWJ1ZmZlckF0dGFjaG1lbnQg
PSBmb3JGcmFtZWJ1ZmZlckF0dGFjaG1lbnQ7Cit9CisKK3ZvaWQgQ0NTY29wZWRUZXh0dXJlOjpj
bGVhcigpCit7CisgICAgaWYgKG1fdGV4dHVyZUlkKSB7CisgICAgICAgIEFTU0VSVChtX2NyZWF0
ZVRocmVhZElkZW50aWZpZXIgPT0gV1RGOjpjdXJyZW50VGhyZWFkKCkpOworICAgICAgICBtX2Nv
bnRleHQtPmRlbGV0ZVRleHR1cmUobV90ZXh0dXJlSWQpOworICAgIH0KKyAgICBtX3RleHR1cmVJ
ZCA9IDA7CisgICAgbV9jb250ZXh0LmNsZWFyKCk7Cit9CisKK3NpemVfdCBDQ1Njb3BlZFRleHR1
cmU6OmJ5dGVzKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fdGV4dHVyZUlkKQorICAgICAgICByZXR1
cm4gMHU7CisKKyAgICByZXR1cm4gbWF5YmVCeXRlcygpOworfQorCitzaXplX3QgQ0NTY29wZWRU
ZXh0dXJlOjptYXliZUJ5dGVzKCkgY29uc3QKK3sKKyAgICBpZiAobV9zaXplLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIDB1OworCisgICAgcmV0dXJuIENDU2NvcGVkVGV4dHVyZTo6bWVtb3J5
U2l6ZUJ5dGVzKG1fc2l6ZSwgbV9mb3JtYXQpOworfQorCitzaXplX3QgQ0NTY29wZWRUZXh0dXJl
OjptZW1vcnlTaXplQnl0ZXMoY29uc3QgSW50U2l6ZSYgc2l6ZSwgR0MzRGVudW0gZm9ybWF0KQor
eworICAgIHVuc2lnbmVkIGludCBjb21wb25lbnRzUGVyUGl4ZWw7CisgICAgdW5zaWduZWQgaW50
IGJ5dGVzUGVyQ29tcG9uZW50OworICAgIGlmICghR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXB1dGVG
b3JtYXRBbmRUeXBlUGFyYW1ldGVycyhmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFLCAmY29tcG9uZW50c1BlclBpeGVsLCAmYnl0ZXNQZXJDb21wb25lbnQpKSB7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMHU7CisgICAgfQorICAg
IHJldHVybiBjb21wb25lbnRzUGVyUGl4ZWwgKiBieXRlc1BlckNvbXBvbmVudCAqIHNpemUud2lk
dGgoKSAqIHNpemUuaGVpZ2h0KCk7Cit9CisKK2Jvb2wgQ0NTY29wZWRUZXh0dXJlOjptX3VzZVRl
eHR1cmVVc2FnZUhpbnQgPSBmYWxzZTsKK2Jvb2wgQ0NTY29wZWRUZXh0dXJlOjptX3VzZVRleHR1
cmVTdG9yYWdlRXh0ID0gZmFsc2U7CisKK3ZvaWQgQ0NTY29wZWRUZXh0dXJlOjppbml0aWFsaXpl
Q2FwYWJpbGl0aWVzKGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGll
cykKK3sKKyAgICBtX3VzZVRleHR1cmVVc2FnZUhpbnQgPSBjYXBhYmlsaXRpZXMudXNpbmdUZXh0
dXJlVXNhZ2VIaW50OworICAgIG1fdXNlVGV4dHVyZVN0b3JhZ2VFeHQgPSBjYXBhYmlsaXRpZXMu
dXNpbmdUZXh0dXJlU3RvcmFnZUV4dGVuc2lvbjsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUZXh0dXJlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njb3BlZFRl
eHR1cmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mN2Y3MTE3ZjA2ZTUzMDJiNzEyOTExNTUzZWMxOWFlZjA4Njk2
YTRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTY29wZWRUZXh0dXJlLmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgQ0NTY29wZWRUZXh0dXJlX2gKKyNkZWZpbmUgQ0NTY29wZWRUZXh0dXJlX2gKKworI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
cnVjdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzOworCitjbGFzcyBDQ1Njb3BlZFRleHR1cmUg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDU2NvcGVkVGV4dHVyZSk7CitwdWJsaWM6Cisg
ICAgQ0NTY29wZWRUZXh0dXJlKCk7CisgICAgfkNDU2NvcGVkVGV4dHVyZSgpOworCisgICAgdm9p
ZCBwcmVwYXJlKGNvbnN0IEludFNpemUmLCBHQzNEZW51bSBmb3JtYXQsIGJvb2wgZm9yRnJhbWVi
dWZmZXJBdHRhY2htZW50ID0gZmFsc2UpOworCisgICAgYm9vbCBjcmVhdGUoUGFzc1JlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4pOworICAgIHZvaWQgY2xlYXIoKTsKKworICAgIHVuc2lnbmVkIGlk
KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlSWQ7IH0KKyAgICBjb25zdCBJbnRTaXplJiBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgR0MzRGVudW0gZm9ybWF0KCkgY29uc3Qg
eyByZXR1cm4gbV9mb3JtYXQ7IH0KKworICAgIHNpemVfdCBieXRlcygpIGNvbnN0OworICAgIHNp
emVfdCBtYXliZUJ5dGVzKCkgY29uc3Q7CisKKyAgICBvcGVyYXRvciBib29sKCkgY29uc3QgeyBy
ZXR1cm4gbV90ZXh0dXJlSWQ7IH0KKworICAgIHN0YXRpYyBzaXplX3QgbWVtb3J5U2l6ZUJ5dGVz
KGNvbnN0IEludFNpemUmLCBHQzNEZW51bSBmb3JtYXQpOworCisgICAgc3RhdGljIHZvaWQgaW5p
dGlhbGl6ZUNhcGFiaWxpdGllcyhjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJik7CisK
K3ByaXZhdGU6CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CisgICAg
dW5zaWduZWQgbV90ZXh0dXJlSWQ7CisgICAgSW50U2l6ZSBtX3NpemU7CisgICAgR0MzRGVudW0g
bV9mb3JtYXQ7CisgICAgYm9vbCBtX2ZvckZyYW1lYnVmZmVyQXR0YWNobWVudDsKKworI2lmICFB
U1NFUlRfRElTQUJMRUQKKyAgICBUaHJlYWRJZGVudGlmaWVyIG1fY3JlYXRlVGhyZWFkSWRlbnRp
ZmllcjsKKyNlbmRpZgorCisgICAgc3RhdGljIGJvb2wgbV91c2VUZXh0dXJlVXNhZ2VIaW50Owor
ICAgIHN0YXRpYyBib29sIG1fdXNlVGV4dHVyZVN0b3JhZ2VFeHQ7Cit9OworCit9CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggNTQ5ZmRmYTQ0Yjg0YWUxY2E3NTFh
ZGU0NDI3YzNkN2M4Y2M5OGE1NS4uY2Y0ZmQ5MTBkMWY0ZWQ3ODFlMjVkOTA0NjhmNjUyOTVkMjMz
N2I1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC04Niw2ICs4Niw3IEBACiAg
ICAgICAgICAgICAndGVzdHMvQ0NTY2hlZHVsZXJTdGF0ZU1hY2hpbmVUZXN0LmNwcCcsCiAgICAg
ICAgICAgICAndGVzdHMvQ0NTY2hlZHVsZXJUZXN0Q29tbW9uLmgnLAogICAgICAgICAgICAgJ3Rl
c3RzL0NDU2NoZWR1bGVyVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDU2NvcGVkVGV4
dHVyZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1NpbmdsZVRocmVhZFByb3h5VGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDU29saWRDb2xvckxheWVySW1wbFRlc3QuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9DQ1Rlc3RDb21tb24uaCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU2NvcGVkVGV4dHVyZVRlc3QuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1Njb3BlZFRleHR1cmVUZXN0LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iMmRhYWMyZDBmMDkxNjU3ODJmNzE5ODIxZGVlYzI4M2RiNzJkNjQ3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1Njb3BlZFRleHR1cmVUZXN0LmNw
cApAQCAtMCwwICsxLDI0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaW5jbHVkZSAiY2MvQ0NTY29wZWRUZXh0dXJlLmgiCisKKyNpbmNsdWRlICJGYWtlV2ViR3Jh
cGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVl
SG9zdC5oIgorCisjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVz
dC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgOjp0ZXN0aW5nOjpNb2NrOwordXNpbmcg
Ojp0ZXN0aW5nOjpfOworCituYW1lc3BhY2UgeworCitURVNUKENDU2NvcGVkVGV4dHVyZVRlc3Qs
IE5ld1Njb3BlZFRleHR1cmUpCit7CisgICAgQ0NTY29wZWRUZXh0dXJlIHRleHR1cmU7CisKKyAg
ICAvLyBOZXcgc2NvcGVkIHRleHR1cmVzIGRvIG5vdCBob2xkIGEgdGV4dHVyZSB5ZXQuCisgICAg
RVhQRUNUX0ZBTFNFKHRleHR1cmUpOworICAgIEVYUEVDVF9FUSgwdSwgdGV4dHVyZS5pZCgpKTsK
KworICAgIC8vIE5ldyBzY29wZWQgdGV4dHVyZXMgZG8gbm90IGhhdmUgYSBzaXplIHlldC4KKyAg
ICBFWFBFQ1RfRVEoSW50U2l6ZSgpLCB0ZXh0dXJlLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDB1
LCB0ZXh0dXJlLm1heWJlQnl0ZXMoKSk7Cit9CisKK1RFU1QoQ0NTY29wZWRUZXh0dXJlVGVzdCwg
UHJlcGFyZVNjb3BlZFRleHR1cmUpCit7CisgICAgQ0NTY29wZWRUZXh0dXJlIHRleHR1cmU7Cisg
ICAgdGV4dHVyZS5wcmVwYXJlKEludFNpemUoMzAsIDMwKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkEpOworCisgICAgLy8gVGhlIHRleHR1cmUgaGFzIGFuIHVuYWxsb2NhdGVkIGJ5dGUtc2l6ZSBu
b3cuCisgICAgc2l6ZV90IGV4cGVjdGVkQnl0ZXMgPSAzMCAqIDMwICogNDsKKyAgICBFWFBFQ1Rf
RVEoZXhwZWN0ZWRCeXRlcywgdGV4dHVyZS5tYXliZUJ5dGVzKCkpOworCisgICAgLy8gQnV0IG5v
dCBhbiBhbGxvY2F0ZWQgYnl0ZS1zaXplLgorICAgIEVYUEVDVF9FUSgwdSwgdGV4dHVyZS5ieXRl
cygpKTsKKworICAgIEVYUEVDVF9GQUxTRSh0ZXh0dXJlKTsKKyAgICBFWFBFQ1RfRVEoR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEsIHRleHR1cmUuZm9ybWF0KCkpOworICAgIEVYUEVDVF9FUShJbnRT
aXplKDMwLCAzMCksIHRleHR1cmUuc2l6ZSgpKTsKK30KKworVEVTVChDQ1Njb3BlZFRleHR1cmVU
ZXN0LCBDcmVhdGVTY29wZWRUZXh0dXJlKQoreworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250
ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIobmV3IEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCgp
KSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKworICAg
IENDU2NvcGVkVGV4dHVyZSB0ZXh0dXJlOworICAgIHRleHR1cmUucHJlcGFyZShJbnRTaXplKDMw
LCAzMCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKTsKKyAgICB0ZXh0dXJlLmNyZWF0ZShjb250
ZXh0KTsKKworICAgIC8vIFRoZSB0ZXh0dXJlIGhhcyBhbiBhbGxvY2F0ZWQgYnl0ZS1zaXplIG5v
dy4KKyAgICBzaXplX3QgZXhwZWN0ZWRCeXRlcyA9IDMwICogMzAgKiA0OworICAgIEVYUEVDVF9F
UShleHBlY3RlZEJ5dGVzLCB0ZXh0dXJlLm1heWJlQnl0ZXMoKSk7CisgICAgRVhQRUNUX0VRKGV4
cGVjdGVkQnl0ZXMsIHRleHR1cmUuYnl0ZXMoKSk7CisKKyAgICBFWFBFQ1RfVFJVRSh0ZXh0dXJl
KTsKKyAgICBFWFBFQ1RfRVEoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIHRleHR1cmUuZm9ybWF0
KCkpOworICAgIEVYUEVDVF9FUShJbnRTaXplKDMwLCAzMCksIHRleHR1cmUuc2l6ZSgpKTsKK30K
KworLy8gRmFrZSBXZWJHcmFwaGljc0NvbnRleHQzRCB0aGF0IHRyYWNrcyB0aGUgbnVtYmVyIG9m
IHRleHR1cmVzIGluIHVzZS4KK2NsYXNzIFRyYWNraW5nV2ViR3JhcGhpY3NDb250ZXh0M0QgOiBw
dWJsaWMgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsKK3B1YmxpYzoKKyAgICBUcmFja2luZ1dl
YkdyYXBoaWNzQ29udGV4dDNEKCkKKyAgICAgICAgOiBtX25leHRUZXh0dXJlSWQoMSkKKyAgICAg
ICAgLCBtX251bVRleHR1cmVzKDApCisgICAgeyB9CisKKyAgICB2aXJ0dWFsIFdlYkdMSWQgY3Jl
YXRlVGV4dHVyZSgpIE9WRVJSSURFCisgICAgeworICAgICAgICBXZWJHTElkIGlkID0gbV9uZXh0
VGV4dHVyZUlkOworICAgICAgICArK21fbmV4dFRleHR1cmVJZDsKKworICAgICAgICBtX3RleHR1
cmVzLnNldChpZCwgdHJ1ZSk7CisgICAgICAgICsrbV9udW1UZXh0dXJlczsKKyAgICAgICAgcmV0
dXJuIGlkOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0dXJlKFdlYkdMSWQg
aWQpIE9WRVJSSURFCisgICAgeworICAgICAgICBpZiAoIW1fdGV4dHVyZXMuZ2V0KGlkKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX3RleHR1cmVzLnNldChpZCwgZmFsc2UpOwor
ICAgICAgICAtLW1fbnVtVGV4dHVyZXM7CisgICAgfQorCisgICAgUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY3JlYXRlR3JhcGhpY3NDb250ZXh0KCkKKyAgICB7CisgICAgICAgIHJldHVy
biBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJD
b250ZXh0KGFkb3B0UHRyKHRoaXMpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlU
b0hvc3RXaW5kb3cpOworICAgIH0KKworICAgIHVuc2lnbmVkIG51bVRleHR1cmVzKCkgY29uc3Qg
eyByZXR1cm4gbV9udW1UZXh0dXJlczsgfQorCitwcml2YXRlOgorICAgIFdlYkdMSWQgbV9uZXh0
VGV4dHVyZUlkOworICAgIEhhc2hNYXA8V2ViR0xJZCwgYm9vbD4gbV90ZXh0dXJlczsKKyAgICB1
bnNpZ25lZCBtX251bVRleHR1cmVzOworfTsKKworVEVTVChDQ1Njb3BlZFRleHR1cmVUZXN0LCBT
Y29wZWRUZXh0dXJlSXNEZWxldGVkKQoreworICAgIFRyYWNraW5nV2ViR3JhcGhpY3NDb250ZXh0
M0QqIHRyYWNraW5nQ29udGV4dCA9IG5ldyBUcmFja2luZ1dlYkdyYXBoaWNzQ29udGV4dDNEOwor
ICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IHRyYWNraW5nQ29udGV4dC0+
Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisKKyAgICB7CisgICAgICAgIENDU2NvcGVkVGV4dHVy
ZSB0ZXh0dXJlOworICAgICAgICB0ZXh0dXJlLnByZXBhcmUoSW50U2l6ZSgzMCwgMzApLCBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQSk7CisKKyAgICAgICAgRVhQRUNUX0VRKDB1LCB0cmFja2luZ0Nv
bnRleHQtPm51bVRleHR1cmVzKCkpOworICAgICAgICB0ZXh0dXJlLmNyZWF0ZShjb250ZXh0KTsK
KyAgICAgICAgRVhQRUNUX1RSVUUodGV4dHVyZSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgdHJh
Y2tpbmdDb250ZXh0LT5udW1UZXh0dXJlcygpKTsKKyAgICB9CisKKyAgICBFWFBFQ1RfRVEoMHUs
IHRyYWNraW5nQ29udGV4dC0+bnVtVGV4dHVyZXMoKSk7CisKKyAgICB7CisgICAgICAgIENDU2Nv
cGVkVGV4dHVyZSB0ZXh0dXJlOworICAgICAgICB0ZXh0dXJlLnByZXBhcmUoSW50U2l6ZSgzMCwg
MzApLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7CisKKyAgICAgICAgRVhQRUNUX0VRKDB1LCB0
cmFja2luZ0NvbnRleHQtPm51bVRleHR1cmVzKCkpOworICAgICAgICB0ZXh0dXJlLmNyZWF0ZShj
b250ZXh0KTsKKyAgICAgICAgRVhQRUNUX1RSVUUodGV4dHVyZSk7CisgICAgICAgIEVYUEVDVF9F
USgxdSwgdHJhY2tpbmdDb250ZXh0LT5udW1UZXh0dXJlcygpKTsKKyAgICAgICAgdGV4dHVyZS5j
bGVhcigpOworICAgICAgICBFWFBFQ1RfRVEoMHUsIHRyYWNraW5nQ29udGV4dC0+bnVtVGV4dHVy
ZXMoKSk7CisgICAgfQorfQorCitjbGFzcyBNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0QgOiBwdWJs
aWMgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsKK3B1YmxpYzoKKyAgICBNT0NLX01FVEhPRDMo
dGV4UGFyYW1ldGVyaSwgdm9pZChXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGVudW0gcG5hbWUsIFdH
QzNEaW50IHBhcmFtKSk7CisKKyAgICBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVh
dGVHcmFwaGljc0NvbnRleHQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIo
dGhpcyksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7Cisg
ICAgfQorCitwcml2YXRlOgorfTsKKworVEVTVChDQ1Njb3BlZFRleHR1cmVUZXN0LCBDcmVhdGVT
Y29wZWRUZXh0dXJlRm9yRnJhbWVidWZmZXJBdHRhY2htZW50KQoreworICAgIE1vY2tXZWJHcmFw
aGljc0NvbnRleHQzRCogbW9ja0NvbnRleHQgPSBuZXcgTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNE
OworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IG1vY2tDb250ZXh0LT5j
cmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKworICAgIC8vIFRoaXMgdGV4dHVyZSBpcyBzZXQgZm9y
IHVzZSBhcyBmcmFtZWJ1ZmZlciBhdHRhY2htZW50LCBidXQgdGhlIGNhcGFiaWxpdHkgdG8gZG8g
c28gaGFzIG5vdCBiZWVuIHNldC4KKyAgICBib29sIGZvckZyYW1lYnVmZmVyQXR0YWNobWVudCA9
IHRydWU7CisKKyAgICB7CisgICAgICAgIENDU2NvcGVkVGV4dHVyZSB0ZXh0dXJlOworICAgICAg
ICB0ZXh0dXJlLnByZXBhcmUoSW50U2l6ZSgzMCwgMzApLCBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSwgZm9yRnJhbWVidWZmZXJBdHRhY2htZW50KTsKKworICAgICAgICAvLyBUaGlzIGlzIGFsd2F5
cyBkb25lIHRvIHNldCB1cCB0aGUgdGV4dHVyZS4KKyAgICAgICAgRVhQRUNUX0NBTEwoKm1vY2tD
b250ZXh0LCB0ZXhQYXJhbWV0ZXJpKF8sIF8sIF8pKS5UaW1lcyg0KTsKKworICAgICAgICBFWFBF
Q1RfQ0FMTCgqbW9ja0NvbnRleHQsIHRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIEV4dGVuc2lvbnMzRENocm9taXVtOjpHTF9URVhUVVJFX1VTQUdFX0FOR0xFLCBF
eHRlbnNpb25zM0RDaHJvbWl1bTo6R0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSkpCisg
ICAgICAgICAgICAgICAgLlRpbWVzKDApOworCisgICAgICAgIHRleHR1cmUuY3JlYXRlKGNvbnRl
eHQpOworICAgICAgICBFWFBFQ1RfVFJVRSh0ZXh0dXJlKTsKKworICAgICAgICBNb2NrOjpWZXJp
ZnlBbmRDbGVhckV4cGVjdGF0aW9ucyhtb2NrQ29udGV4dCk7CisgICAgfQorCisgICAgLy8gUHJl
dGVuZCB3ZSBoYXZlIHRoZSBjYXBhYmlsaXR5IG9mIGhpbnRpbmcgdGV4dHVyZXMgYXMgYmVpbmcg
dXNlZCBhcyBmcmFtZWJ1ZmZlciBhdHRhY2htZW50LgorICAgIExheWVyUmVuZGVyZXJDYXBhYmls
aXRpZXMgY2FwYWJpbGl0aWVzOworICAgIGNhcGFiaWxpdGllcy51c2luZ1RleHR1cmVVc2FnZUhp
bnQgPSB0cnVlOworICAgIENDU2NvcGVkVGV4dHVyZTo6aW5pdGlhbGl6ZUNhcGFiaWxpdGllcyhj
YXBhYmlsaXRpZXMpOworCisgICAgLy8gVGhpcyB0ZXh0dXJlIGlzIE5PVCBzZXQgZm9yIHVzZSBh
cyBmcmFtZWJ1ZmZlciBhdHRhY2htZW50LgorICAgIGZvckZyYW1lYnVmZmVyQXR0YWNobWVudCA9
IGZhbHNlOworCisgICAgeworICAgICAgICBDQ1Njb3BlZFRleHR1cmUgdGV4dHVyZTsKKyAgICAg
ICAgdGV4dHVyZS5wcmVwYXJlKEludFNpemUoMzAsIDMwKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkEsIGZvckZyYW1lYnVmZmVyQXR0YWNobWVudCk7CisKKyAgICAgICAgLy8gVGhpcyBpcyBhbHdh
eXMgZG9uZSB0byBzZXQgdXAgdGhlIHRleHR1cmUuCisgICAgICAgIEVYUEVDVF9DQUxMKCptb2Nr
Q29udGV4dCwgdGV4UGFyYW1ldGVyaShfLCBfLCBfKSkuVGltZXMoNCk7CisKKyAgICAgICAgRVhQ
RUNUX0NBTEwoKm1vY2tDb250ZXh0LCB0ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6R0xfVEVYVFVSRV9VU0FHRV9BTkdMRSwg
RXh0ZW5zaW9uczNEQ2hyb21pdW06OkdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpKQor
ICAgICAgICAgICAgICAgIC5UaW1lcygwKTsKKworICAgICAgICB0ZXh0dXJlLmNyZWF0ZShjb250
ZXh0KTsKKyAgICAgICAgRVhQRUNUX1RSVUUodGV4dHVyZSk7CisKKyAgICAgICAgTW9jazo6VmVy
aWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMobW9ja0NvbnRleHQpOworICAgIH0KKworICAgIC8vIFRo
aXMgdGV4dHVyZSBpcyBzZXQgZm9yIHVzZSBhcyBmcmFtZWJ1ZmZlciBhdHRhY2htZW50LCBhbmQg
d2UgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBkbyBzbyBzZXQgbm93LgorICAgIGZvckZyYW1lYnVm
ZmVyQXR0YWNobWVudCA9IHRydWU7CisKKyAgICB7CisgICAgICAgIENDU2NvcGVkVGV4dHVyZSB0
ZXh0dXJlOworICAgICAgICB0ZXh0dXJlLnByZXBhcmUoSW50U2l6ZSgzMCwgMzApLCBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSwgZm9yRnJhbWVidWZmZXJBdHRhY2htZW50KTsKKworICAgICAgICAv
LyBUaGlzIGlzIGFsd2F5cyBkb25lIHRvIHNldCB1cCB0aGUgdGV4dHVyZS4KKyAgICAgICAgRVhQ
RUNUX0NBTEwoKm1vY2tDb250ZXh0LCB0ZXhQYXJhbWV0ZXJpKF8sIF8sIF8pKS5UaW1lcyg0KTsK
KworICAgICAgICBFWFBFQ1RfQ0FMTCgqbW9ja0NvbnRleHQsIHRleFBhcmFtZXRlcmkoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEV4dGVuc2lvbnMzRENocm9taXVtOjpHTF9URVhUVVJF
X1VTQUdFX0FOR0xFLCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6R0xfRlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9BTkdMRSkpCisgICAgICAgICAgICAgICAgLlRpbWVzKDEpOworCisgICAgICAgIHRleHR1
cmUuY3JlYXRlKGNvbnRleHQpOworICAgICAgICBFWFBFQ1RfVFJVRSh0ZXh0dXJlKTsKKworICAg
ICAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucyhtb2NrQ29udGV4dCk7CisgICAg
fQorfQorCit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148669</attachid>
            <date>2012-06-20 15:40:53 -0700</date>
            <delta_ts>2012-06-28 13:14:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89485-20120620184053.patch</filename>
            <type>text/plain</type>
            <size>24176</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwODIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODEzMjBhZjQ0N2Q3ODIw
ZDZjODZkMGU0Nzk4ZGVhNzcwZWRmNjI5OC4uM2NmMzVhMmQ2ZjU1ZjFhOGU5ZjYyMDc2ZWMwZjRm
MmU2MjdkMDhhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDEyLTA2LTE5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIENDU2NvcGVkVGV4dHVyZSBjbGFzcyBmb3IgY3JlYXRpbmcvZnJlZWluZyB0ZXh0dXJlcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk0ODUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNsYXNz
IHByb3ZpZGVzIGEgc3RhbmRhcmQgd2F5IHRvIGNyZWF0ZSB0ZXh0dXJlIGlkcyBpbiBhIHdheSB0
aGF0CisgICAgICAgIGVuc3VyZXMgdGhleSB3aWxsIGJlIGZyZWVkIGxhdGVyLiBJdCBpcyBtZWFu
dCB0byByZXBsYWNlIHRoZSB1c2Ugb2YKKyAgICAgICAgdGhlIFRleHR1cmVBbGxvY2F0b3IgZm9y
IGFsbG9jYXRpbmcgdGV4dHVyZXMsIGJ5IGFic3RyYWN0aW5nIHRoZQorICAgICAgICBhYmlsaXRp
ZXMgb2YgdGhlIGNsYXNzIGludG8gZWFjaCBDQ1Njb3BlZFRleHR1cmUgb2JqZWN0LiBUaGlzIHBy
b3ZpZGVzCisgICAgICAgIHVzIHdpdGggYSBjZW50cmFsIHBsYWNlIGZvciB0aGUgY29kZSBhcm91
bmQgY3JlYXRpbmcgdGV4dHVyZXMsIGFuZAorICAgICAgICBjb21wdXRpbmcgdGhlIG51bWJlciBv
ZiBieXRlcyB1c2VkIGJ5IGEgdGV4dHVyZS4gSXQgZW5zdXJlcyB0aGF0CisgICAgICAgIHdlIGNh
biBlYXNpbHkga25vdyBob3cgbWFueSBieXRlcyBhbnkgdGV4dHVyZSBvYmplY3QgaXMgdXNpbmcu
CisKKyAgICAgICAgVGhpcyBvYmplY3Qgd291bGQgYmUgdXNlZCBpbiBwbGFjZSBvZiBzdG9yaW5n
IGFuIHVuc2lnbmVkIHRleHR1cmVJZAorICAgICAgICBpbiBvdGhlciBjbGFzc2VzLCBhbmQgd2ls
bCByZXBsYWNlIHRoZSB1c2Ugb2YgTWFuYWdlZFRleHR1cmVzIGZvcgorICAgICAgICBSZW5kZXJQ
YXNzZXMsIGFsbG93aW5nIHVzIHRvIGRlY291cGxlIFJlbmRlclBhc3NlcyBmcm9tIHRoZQorICAg
ICAgICBub3ctb2Jzb2xldGUgVGV4dHVyZU1hbmFnZXIuCisKKyAgICAgICAgVW5pdCB0ZXN0czog
Q0NTY29wZWRUZXh1cmVUZXN0Lk5ld1Njb3BlZFRleHR1cmUKKyAgICAgICAgICAgICAgICAgICAg
Q0NTY29wZWRUZXh1cmVUZXN0LlByZXBhcmVTY29wZWRUZXh0dXJlCisgICAgICAgICAgICAgICAg
ICAgIENDU2NvcGVkVGV4dXJlVGVzdC5DcmVhdGVTY29wZWRUZXh0dXJlCisgICAgICAgICAgICAg
ICAgICAgIENDU2NvcGVkVGV4dXJlVGVzdC5TY29wZWRUZXh0dXJlSXNEZWxldGVkCisgICAgICAg
ICAgICAgICAgICAgIENDU2NvcGVkVGV4dXJlVGVzdC5Mb3NlU2NvcGVkVGV4dHVyZQorICAgICAg
ICAgICAgICAgICAgICBDQ1Njb3BlZFRleHVyZVRlc3QuQ3JlYXRlU2NvcGVkVGV4dHVyZUZvckZy
YW1lYnVmZmVyQXR0YWNobWVudAorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGV4dHVyZS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njb3BlZFRleHR1cmU6
OkNDU2NvcGVkVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njb3BlZFRleHR1cmU6On5D
Q1Njb3BlZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6dGV4dHVyZVRvU3RvcmFnZUZvcm1h
dCk6CisgICAgICAgIChXZWJDb3JlOjppc1RleHR1cmVGb3JtYXRTdXBwb3J0ZWRGb3JTdG9yYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2NvcGVkVGV4dHVyZTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDU2NvcGVkVGV4dHVyZTo6cHJlcGFyZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1Njb3BlZFRleHR1cmU6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2NvcGVkVGV4dHVy
ZTo6c3RlYWwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY29wZWRUZXh0dXJlOjpyZWxlYXNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDU2NvcGVkVGV4dHVyZTo6Ynl0ZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NTY29wZWRUZXh0dXJlOjptYXliZUJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkND
U2NvcGVkVGV4dHVyZTo6bWVtb3J5U2l6ZUJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nv
cGVkVGV4dHVyZTo6aW5pdGlhbGl6ZUNhcGFiaWxpdGllcyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUZXh0dXJlLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChDQ1Njb3BlZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTY29wZWRUZXh0dXJlOjppZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njb3BlZFRleHR1cmU6
OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY29wZWRUZXh0dXJlOjpmb3JtYXQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NTY29wZWRUZXh0dXJlOjpvcGVyYXRvciBib29sKToKKwogMjAxMi0w
Ni0yMCAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBX
ZWIgSW5zcGVjdG9yOiBkb24ndCByZXBvcnQgY29udGV4dCBpZHMgYmVmb3JlIERpZENvbW1pdExv
YWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNWI1YTA0NmY5MWNjOTBjMzQzMmQ3N2Y2
Y2JhNGZmOGZhYTI5N2NlNy4uMTU0NmYyMDBjNDFiODg1ZWQ0ZjFhMGUzZmMyZTNkYTNhYmM1M2Mw
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0wNi0x
OSAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIENyZWF0ZSBDQ1Njb3BlZFRleHR1cmUgY2xhc3MgZm9yIGNyZWF0aW5nL2ZyZWVpbmcgdGV4
dHVyZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5
NDg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBX
ZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9DQ1Njb3BlZFRleHR1cmVUZXN0LmNwcDogQWRk
ZWQuCisKIDIwMTItMDYtMjAgIFplZXYgTGllYmVyICA8emxpZWJlckBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgW0Nocm9taXVtXSBSZW1vdmUgcmVkdW5kYW50ICNpbmNsdWRlcyBpbiBjb21wb3Np
dG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYzg5NzRkMmQ2NTJkYmVhNjY4MjcwZGEzZGY4ZjQzYmY4
NGEyMjJjNC4uZDU4MDExZTQ2YzZiNjRhMGYxN2JhMTY3N2ZhYmQ1ODk3YTE1NmY3MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQpAQCAtMzc1Nyw2ICszNzU3LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NjaGVkdWxlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NjaGVkdWxlclN0YXRlTWFjaGluZS5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NoZWR1bGVyU3RhdGVN
YWNoaW5lLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
U2NvcGVkVGV4dHVyZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDU2NvcGVkVGV4dHVyZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1Njb3BlZFRocmVhZFByb3h5LmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFyTGF5ZXJJbXBsLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXJMYXllcklt
cGwuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1Njb3BlZFRleHR1cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUZXh0dXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41M2JkYzk3
MzVmNDQ5YzQxNGEyYjFjOGY2ZjgxOTJiOGQ1OTg0MzZhCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUZXh0dXJl
LmNwcApAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgImNjL0NDU2NvcGVkVGV4dHVyZS5oIgorCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hy
b21pdW0uaCIKKyNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitDQ1Njb3BlZFRleHR1cmU6OkNDU2NvcGVkVGV4dHVyZSgpCisgICAgOiBt
X3RleHR1cmVJZCgwKQorICAgICwgbV9mb3JtYXQoMCkKKyAgICAsIG1fZm9yRnJhbWVidWZmZXJB
dHRhY2htZW50KGZhbHNlKQoreworfQorCitDQ1Njb3BlZFRleHR1cmU6On5DQ1Njb3BlZFRleHR1
cmUoKQoreworICAgIGNsZWFyKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgR0MzRGVudW0gdGV4dHVy
ZVRvU3RvcmFnZUZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KQoreworICAgIEdDM0RlbnVt
IHN0b3JhZ2VGb3JtYXQgPSBFeHRlbnNpb25zM0Q6OlJHQkE4X09FUzsKKyAgICBzd2l0Y2ggKHRl
eHR1cmVGb3JtYXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6QkdSQV9FWFQ6CisgICAgICAgIHN0b3Jh
Z2VGb3JtYXQgPSBFeHRlbnNpb25zM0RDaHJvbWl1bTo6QkdSQThfRVhUOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHN0b3JhZ2VGb3JtYXQ7Cit9CisKK3N0YXRpYyBp
bmxpbmUgYm9vbCBpc1RleHR1cmVGb3JtYXRTdXBwb3J0ZWRGb3JTdG9yYWdlKEdDM0RlbnVtIGZv
cm1hdCkKK3sKKyAgICByZXR1cm4gZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBIHx8
IGZvcm1hdCA9PSBFeHRlbnNpb25zM0Q6OkJHUkFfRVhUOworfQorCitib29sIENDU2NvcGVkVGV4
dHVyZTo6Y3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCit7Cisg
ICAgQVNTRVJUKCFtX2NvbnRleHQpOworICAgIEFTU0VSVCghbV90ZXh0dXJlSWQpOworICAgIEFT
U0VSVCghbV9zaXplLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fZm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpSR0IgfHwgbV9mb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgfHwg
bV9mb3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpCR1JBX0VYVCk7CisKKyAgICBtX2NvbnRleHQgPSBj
b250ZXh0OworICAgIG1fdGV4dHVyZUlkID0gR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5jcmVh
dGVUZXh0dXJlKCkpOworCisgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQpKTsKKyAg
ICAvLyBEbyBiYXNpYyBsaW5lYXIgZmlsdGVyaW5nIG9uIHJlc2l6ZS4KKyAgICBHTEMobV9jb250
ZXh0LmdldCgpLCBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNz
Q29udGV4dDNEOjpMSU5FQVIpKTsKKyAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQt
PnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsK
KyAgICAvLyBOUE9UIHRleHR1cmVzIGluIEdMIEVTIG9ubHkgd29yayB3aGVuIHRoZSB3cmFwIG1v
ZGUgaXMgc2V0IHRvIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFLgorICAgIEdMQyht
X2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGlj
c0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSkpOworICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1f
Y29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBf
VE9fRURHRSkpOworCisgICAgaWYgKG1fdXNlVGV4dHVyZVVzYWdlSGludCAmJiBtX2ZvckZyYW1l
YnVmZmVyQXR0YWNobWVudCkKKyAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0
LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBFeHRlbnNpb25z
M0RDaHJvbWl1bTo6R0xfVEVYVFVSRV9VU0FHRV9BTkdMRSwgRXh0ZW5zaW9uczNEQ2hyb21pdW06
OkdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpKTsKKyAgICBpZiAobV91c2VUZXh0dXJl
U3RvcmFnZUV4dCAmJiBpc1RleHR1cmVGb3JtYXRTdXBwb3J0ZWRGb3JTdG9yYWdlKG1fZm9ybWF0
KSkgeworICAgICAgICBFeHRlbnNpb25zM0RDaHJvbWl1bSogZXh0ZW5zaW9ucyA9IHN0YXRpY19j
YXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4obV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkpOwor
ICAgICAgICBHQzNEZW51bSBzdG9yYWdlRm9ybWF0ID0gdGV4dHVyZVRvU3RvcmFnZUZvcm1hdCht
X2Zvcm1hdCk7CisgICAgICAgIGV4dGVuc2lvbnMtPnRleFN0b3JhZ2UyREVYVChHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgMSwgc3RvcmFnZUZvcm1hdCwgbV9zaXplLndpZHRoKCksIG1f
c2l6ZS5oZWlnaHQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCks
IG1fY29udGV4dC0+dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgMCwgbV9mb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAs
IG1fZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkpOworICAgIEdMQyht
X2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIDApKTsKKworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBtX2NyZWF0ZVRo
cmVhZElkZW50aWZpZXIgPSBXVEY6OmN1cnJlbnRUaHJlYWQoKTsKKyNlbmRpZgorCisgICAgcmV0
dXJuIG1fdGV4dHVyZUlkOworfQorCit2b2lkIENDU2NvcGVkVGV4dHVyZTo6cHJlcGFyZShjb25z
dCBJbnRTaXplJiBzaXplLCBHQzNEZW51bSBmb3JtYXQsIGJvb2wgZm9yRnJhbWVidWZmZXJBdHRh
Y2htZW50KQoreworICAgIEFTU0VSVCghbV90ZXh0dXJlSWQpOworCisgICAgbV9zaXplID0gc2l6
ZTsKKyAgICBtX2Zvcm1hdCA9IGZvcm1hdDsKKyAgICBtX2ZvckZyYW1lYnVmZmVyQXR0YWNobWVu
dCA9IGZvckZyYW1lYnVmZmVyQXR0YWNobWVudDsKK30KKwordm9pZCBDQ1Njb3BlZFRleHR1cmU6
OmNsZWFyKCkKK3sKKyAgICBpZiAobV90ZXh0dXJlSWQpIHsKKyAgICAgICAgQVNTRVJUKG1fY3Jl
YXRlVGhyZWFkSWRlbnRpZmllciA9PSBXVEY6OmN1cnJlbnRUaHJlYWQoKSk7CisgICAgICAgIG1f
Y29udGV4dC0+ZGVsZXRlVGV4dHVyZShtX3RleHR1cmVJZCk7CisgICAgfQorICAgIG1fdGV4dHVy
ZUlkID0gMDsKKyAgICBtX2NvbnRleHQuY2xlYXIoKTsKK30KKwordm9pZCBDQ1Njb3BlZFRleHR1
cmU6Omxvc2UoKQoreworICAgIG1fdGV4dHVyZUlkID0gMDsKKyAgICBtX2NvbnRleHQuY2xlYXIo
KTsKK30KKworc2l6ZV90IENDU2NvcGVkVGV4dHVyZTo6Ynl0ZXMoKSBjb25zdAoreworICAgIGlm
ICghbV90ZXh0dXJlSWQpCisgICAgICAgIHJldHVybiAwdTsKKworICAgIHJldHVybiBtYXliZUJ5
dGVzKCk7Cit9CisKK3NpemVfdCBDQ1Njb3BlZFRleHR1cmU6Om1heWJlQnl0ZXMoKSBjb25zdAor
eworICAgIGlmIChtX3NpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMHU7CisKKyAgICBy
ZXR1cm4gQ0NTY29wZWRUZXh0dXJlOjptZW1vcnlTaXplQnl0ZXMobV9zaXplLCBtX2Zvcm1hdCk7
Cit9CisKK3NpemVfdCBDQ1Njb3BlZFRleHR1cmU6Om1lbW9yeVNpemVCeXRlcyhjb25zdCBJbnRT
aXplJiBzaXplLCBHQzNEZW51bSBmb3JtYXQpCit7CisgICAgdW5zaWduZWQgaW50IGNvbXBvbmVu
dHNQZXJQaXhlbDsKKyAgICB1bnNpZ25lZCBpbnQgYnl0ZXNQZXJDb21wb25lbnQ7CisgICAgaWYg
KCFHcmFwaGljc0NvbnRleHQzRDo6Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKGZvcm1h
dCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsICZjb21wb25lbnRzUGVyUGl4ZWws
ICZieXRlc1BlckNvbXBvbmVudCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybiAwdTsKKyAgICB9CisgICAgcmV0dXJuIGNvbXBvbmVudHNQZXJQaXhlbCAq
IGJ5dGVzUGVyQ29tcG9uZW50ICogc2l6ZS53aWR0aCgpICogc2l6ZS5oZWlnaHQoKTsKK30KKwor
Ym9vbCBDQ1Njb3BlZFRleHR1cmU6Om1fdXNlVGV4dHVyZVVzYWdlSGludCA9IGZhbHNlOworYm9v
bCBDQ1Njb3BlZFRleHR1cmU6Om1fdXNlVGV4dHVyZVN0b3JhZ2VFeHQgPSBmYWxzZTsKKwordm9p
ZCBDQ1Njb3BlZFRleHR1cmU6OmluaXRpYWxpemVDYXBhYmlsaXRpZXMoY29uc3QgTGF5ZXJSZW5k
ZXJlckNhcGFiaWxpdGllcyYgY2FwYWJpbGl0aWVzKQoreworICAgIG1fdXNlVGV4dHVyZVVzYWdl
SGludCA9IGNhcGFiaWxpdGllcy51c2luZ1RleHR1cmVVc2FnZUhpbnQ7CisgICAgbV91c2VUZXh0
dXJlU3RvcmFnZUV4dCA9IGNhcGFiaWxpdGllcy51c2luZ1RleHR1cmVTdG9yYWdlRXh0ZW5zaW9u
OworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1Njb3BlZFRleHR1cmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGV4dHVyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjljMzYxOTkz
ZDNmODAwNTBjMWU1YmU2ODRkYWYyY2MxNGNhYWQwZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njb3BlZFRleHR1cmUu
aApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ1Njb3BlZFRleHR1cmVfaAorI2Rl
ZmluZSBDQ1Njb3BlZFRleHR1cmVfaAorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwor
I2lmICFBU1NFUlRfRElTQUJMRUQKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2VuZGlm
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRp
ZXM7CisKK2NsYXNzIENDU2NvcGVkVGV4dHVyZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
Q0NTY29wZWRUZXh0dXJlKTsKK3B1YmxpYzoKKyAgICBDQ1Njb3BlZFRleHR1cmUoKTsKKyAgICB+
Q0NTY29wZWRUZXh0dXJlKCk7CisKKyAgICB2b2lkIHByZXBhcmUoY29uc3QgSW50U2l6ZSYsIEdD
M0RlbnVtIGZvcm1hdCwgYm9vbCBmb3JGcmFtZWJ1ZmZlckF0dGFjaG1lbnQgPSBmYWxzZSk7CisK
KyAgICBib29sIGNyZWF0ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CisgICAgdm9p
ZCBjbGVhcigpOworICAgIHZvaWQgbG9zZSgpOworCisgICAgdW5zaWduZWQgaWQoKSBjb25zdCB7
IHJldHVybiBtX3RleHR1cmVJZDsgfQorICAgIGNvbnN0IEludFNpemUmIHNpemUoKSBjb25zdCB7
IHJldHVybiBtX3NpemU7IH0KKyAgICBHQzNEZW51bSBmb3JtYXQoKSBjb25zdCB7IHJldHVybiBt
X2Zvcm1hdDsgfQorCisgICAgc2l6ZV90IGJ5dGVzKCkgY29uc3Q7CisgICAgc2l6ZV90IG1heWJl
Qnl0ZXMoKSBjb25zdDsKKworICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX3Rl
eHR1cmVJZDsgfQorCisgICAgc3RhdGljIHNpemVfdCBtZW1vcnlTaXplQnl0ZXMoY29uc3QgSW50
U2l6ZSYsIEdDM0RlbnVtIGZvcm1hdCk7CisKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplQ2Fw
YWJpbGl0aWVzKGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmKTsKKworcHJpdmF0ZToK
KyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKKyAgICB1bnNpZ25lZCBt
X3RleHR1cmVJZDsKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICBHQzNEZW51bSBtX2Zvcm1hdDsK
KyAgICBib29sIG1fZm9yRnJhbWVidWZmZXJBdHRhY2htZW50OworCisjaWYgIUFTU0VSVF9ESVNB
QkxFRAorICAgIFRocmVhZElkZW50aWZpZXIgbV9jcmVhdGVUaHJlYWRJZGVudGlmaWVyOworI2Vu
ZGlmCisKKyAgICBzdGF0aWMgYm9vbCBtX3VzZVRleHR1cmVVc2FnZUhpbnQ7CisgICAgc3RhdGlj
IGJvb2wgbV91c2VUZXh0dXJlU3RvcmFnZUV4dDsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCA1NDlmZGZhNDRiODRhZTFjYTc1MWFkZTQ0MjdjM2Q3
YzhjYzk4YTU1Li5jZjRmZDkxMGQxZjRlZDc4MWUyNWQ5MDQ2OGY2NTI5NWQyMzM3YjUyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTg2LDYgKzg2LDcgQEAKICAgICAgICAgICAg
ICd0ZXN0cy9DQ1NjaGVkdWxlclN0YXRlTWFjaGluZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9DQ1NjaGVkdWxlclRlc3RDb21tb24uaCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NTY2hl
ZHVsZXJUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ0NTY29wZWRUZXh0dXJlVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDU2luZ2xlVGhyZWFkUHJveHlUZXN0LmNwcCcsCiAg
ICAgICAgICAgICAndGVzdHMvQ0NTb2xpZENvbG9yTGF5ZXJJbXBsVGVzdC5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL0NDVGVzdENvbW1vbi5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NTY29wZWRUZXh0dXJlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDU2NvcGVkVGV4dHVyZVRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE5OGJkZDU4
NDIyNmNkMmI1OTE5ZDBkN2NhMzY5NWEyNWU0ZTU5MzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU2NvcGVkVGV4dHVyZVRlc3QuY3BwCkBAIC0wLDAg
KzEsMjY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRl
ICJjYy9DQ1Njb3BlZFRleHR1cmUuaCIKKworI2luY2x1ZGUgIkZha2VXZWJHcmFwaGljc0NvbnRl
eHQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisK
KyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5j
bHVkZSA8d3RmL093blB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7Cit1c2luZyA6OnRlc3Rpbmc6Ok1vY2s7Cit1c2luZyA6OnRlc3Rpbmc6
Ol87CisKK25hbWVzcGFjZSB7CisKK1RFU1QoQ0NTY29wZWRUZXh0dXJlVGVzdCwgTmV3U2NvcGVk
VGV4dHVyZSkKK3sKKyAgICBDQ1Njb3BlZFRleHR1cmUgdGV4dHVyZTsKKworICAgIC8vIE5ldyBz
Y29wZWQgdGV4dHVyZXMgZG8gbm90IGhvbGQgYSB0ZXh0dXJlIHlldC4KKyAgICBFWFBFQ1RfRkFM
U0UodGV4dHVyZSk7CisgICAgRVhQRUNUX0VRKDB1LCB0ZXh0dXJlLmlkKCkpOworCisgICAgLy8g
TmV3IHNjb3BlZCB0ZXh0dXJlcyBkbyBub3QgaGF2ZSBhIHNpemUgeWV0LgorICAgIEVYUEVDVF9F
UShJbnRTaXplKCksIHRleHR1cmUuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMHUsIHRleHR1cmUu
bWF5YmVCeXRlcygpKTsKK30KKworVEVTVChDQ1Njb3BlZFRleHR1cmVUZXN0LCBQcmVwYXJlU2Nv
cGVkVGV4dHVyZSkKK3sKKyAgICBDQ1Njb3BlZFRleHR1cmUgdGV4dHVyZTsKKyAgICB0ZXh0dXJl
LnByZXBhcmUoSW50U2l6ZSgzMCwgMzApLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7CisKKyAg
ICAvLyBUaGUgdGV4dHVyZSBoYXMgYW4gdW5hbGxvY2F0ZWQgYnl0ZS1zaXplIG5vdy4KKyAgICBz
aXplX3QgZXhwZWN0ZWRCeXRlcyA9IDMwICogMzAgKiA0OworICAgIEVYUEVDVF9FUShleHBlY3Rl
ZEJ5dGVzLCB0ZXh0dXJlLm1heWJlQnl0ZXMoKSk7CisKKyAgICAvLyBCdXQgbm90IGFuIGFsbG9j
YXRlZCBieXRlLXNpemUuCisgICAgRVhQRUNUX0VRKDB1LCB0ZXh0dXJlLmJ5dGVzKCkpOworCisg
ICAgRVhQRUNUX0ZBTFNFKHRleHR1cmUpOworICAgIEVYUEVDVF9FUShHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSwgdGV4dHVyZS5mb3JtYXQoKSk7CisgICAgRVhQRUNUX0VRKEludFNpemUoMzAsIDMw
KSwgdGV4dHVyZS5zaXplKCkpOworfQorCitURVNUKENDU2NvcGVkVGV4dHVyZVRlc3QsIENyZWF0
ZVNjb3BlZFRleHR1cmUpCit7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0
ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2Vi
Q29udGV4dChhZG9wdFB0cihuZXcgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEKCkpLCBHcmFwaGlj
c0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOworCisgICAgQ0NTY29wZWRU
ZXh0dXJlIHRleHR1cmU7CisgICAgdGV4dHVyZS5wcmVwYXJlKEludFNpemUoMzAsIDMwKSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEpOworICAgIHRleHR1cmUuY3JlYXRlKGNvbnRleHQpOworCisg
ICAgLy8gVGhlIHRleHR1cmUgaGFzIGFuIGFsbG9jYXRlZCBieXRlLXNpemUgbm93LgorICAgIHNp
emVfdCBleHBlY3RlZEJ5dGVzID0gMzAgKiAzMCAqIDQ7CisgICAgRVhQRUNUX0VRKGV4cGVjdGVk
Qnl0ZXMsIHRleHR1cmUubWF5YmVCeXRlcygpKTsKKyAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRCeXRl
cywgdGV4dHVyZS5ieXRlcygpKTsKKworICAgIEVYUEVDVF9UUlVFKHRleHR1cmUpOworICAgIEVY
UEVDVF9FUShHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgdGV4dHVyZS5mb3JtYXQoKSk7CisgICAg
RVhQRUNUX0VRKEludFNpemUoMzAsIDMwKSwgdGV4dHVyZS5zaXplKCkpOworfQorCisvLyBGYWtl
IFdlYkdyYXBoaWNzQ29udGV4dDNEIHRoYXQgdHJhY2tzIHRoZSBudW1iZXIgb2YgdGV4dHVyZXMg
aW4gdXNlLgorY2xhc3MgVHJhY2tpbmdXZWJHcmFwaGljc0NvbnRleHQzRCA6IHB1YmxpYyBGYWtl
V2ViR3JhcGhpY3NDb250ZXh0M0QgeworcHVibGljOgorICAgIFRyYWNraW5nV2ViR3JhcGhpY3ND
b250ZXh0M0QoKQorICAgICAgICA6IG1fbmV4dFRleHR1cmVJZCgxKQorICAgICAgICAsIG1fbnVt
VGV4dHVyZXMoMCkKKyAgICB7IH0KKworICAgIHZpcnR1YWwgV2ViR0xJZCBjcmVhdGVUZXh0dXJl
KCkgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIFdlYkdMSWQgaWQgPSBtX25leHRUZXh0dXJlSWQ7
CisgICAgICAgICsrbV9uZXh0VGV4dHVyZUlkOworCisgICAgICAgIG1fdGV4dHVyZXMuc2V0KGlk
LCB0cnVlKTsKKyAgICAgICAgKyttX251bVRleHR1cmVzOworICAgICAgICByZXR1cm4gaWQ7Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVRleHR1cmUoV2ViR0xJZCBpZCkgT1ZFUlJJ
REUKKyAgICB7CisgICAgICAgIGlmICghbV90ZXh0dXJlcy5nZXQoaWQpKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIG1fdGV4dHVyZXMuc2V0KGlkLCBmYWxzZSk7CisgICAgICAgIC0t
bV9udW1UZXh0dXJlczsKKyAgICB9CisKKyAgICBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBjcmVhdGVHcmFwaGljc0NvbnRleHQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRv
cHRQdHIodGhpcyksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRv
dyk7CisgICAgfQorCisgICAgdW5zaWduZWQgbnVtVGV4dHVyZXMoKSBjb25zdCB7IHJldHVybiBt
X251bVRleHR1cmVzOyB9CisKK3ByaXZhdGU6CisgICAgV2ViR0xJZCBtX25leHRUZXh0dXJlSWQ7
CisgICAgSGFzaE1hcDxXZWJHTElkLCBib29sPiBtX3RleHR1cmVzOworICAgIHVuc2lnbmVkIG1f
bnVtVGV4dHVyZXM7Cit9OworCitURVNUKENDU2NvcGVkVGV4dHVyZVRlc3QsIFNjb3BlZFRleHR1
cmVJc0RlbGV0ZWQpCit7CisgICAgVHJhY2tpbmdXZWJHcmFwaGljc0NvbnRleHQzRCogdHJhY2tp
bmdDb250ZXh0ID0gbmV3IFRyYWNraW5nV2ViR3JhcGhpY3NDb250ZXh0M0Q7CisgICAgUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gdHJhY2tpbmdDb250ZXh0LT5jcmVhdGVHcmFw
aGljc0NvbnRleHQoKTsKKworICAgIHsKKyAgICAgICAgQ0NTY29wZWRUZXh0dXJlIHRleHR1cmU7
CisgICAgICAgIHRleHR1cmUucHJlcGFyZShJbnRTaXplKDMwLCAzMCksIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBKTsKKworICAgICAgICBFWFBFQ1RfRVEoMHUsIHRyYWNraW5nQ29udGV4dC0+bnVt
VGV4dHVyZXMoKSk7CisgICAgICAgIHRleHR1cmUuY3JlYXRlKGNvbnRleHQpOworICAgICAgICBF
WFBFQ1RfVFJVRSh0ZXh0dXJlKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCB0cmFja2luZ0NvbnRl
eHQtPm51bVRleHR1cmVzKCkpOworICAgIH0KKworICAgIEVYUEVDVF9FUSgwdSwgdHJhY2tpbmdD
b250ZXh0LT5udW1UZXh0dXJlcygpKTsKKworICAgIHsKKyAgICAgICAgQ0NTY29wZWRUZXh0dXJl
IHRleHR1cmU7CisgICAgICAgIHRleHR1cmUucHJlcGFyZShJbnRTaXplKDMwLCAzMCksIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBKTsKKworICAgICAgICBFWFBFQ1RfRVEoMHUsIHRyYWNraW5nQ29u
dGV4dC0+bnVtVGV4dHVyZXMoKSk7CisgICAgICAgIHRleHR1cmUuY3JlYXRlKGNvbnRleHQpOwor
ICAgICAgICBFWFBFQ1RfVFJVRSh0ZXh0dXJlKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCB0cmFj
a2luZ0NvbnRleHQtPm51bVRleHR1cmVzKCkpOworICAgICAgICB0ZXh0dXJlLmNsZWFyKCk7Cisg
ICAgICAgIEVYUEVDVF9FUSgwdSwgdHJhY2tpbmdDb250ZXh0LT5udW1UZXh0dXJlcygpKTsKKyAg
ICB9Cit9CisKK1RFU1QoQ0NTY29wZWRUZXh0dXJlVGVzdCwgTG9zZVNjb3BlZFRleHR1cmUpCit7
CisgICAgVHJhY2tpbmdXZWJHcmFwaGljc0NvbnRleHQzRCogdHJhY2tpbmdDb250ZXh0ID0gbmV3
IFRyYWNraW5nV2ViR3JhcGhpY3NDb250ZXh0M0Q7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBjb250ZXh0ID0gdHJhY2tpbmdDb250ZXh0LT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsK
KworICAgIHsKKyAgICAgICAgQ0NTY29wZWRUZXh0dXJlIHRleHR1cmU7CisgICAgICAgIHRleHR1
cmUucHJlcGFyZShJbnRTaXplKDMwLCAzMCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKTsKKwor
ICAgICAgICBFWFBFQ1RfRVEoMHUsIHRyYWNraW5nQ29udGV4dC0+bnVtVGV4dHVyZXMoKSk7Cisg
ICAgICAgIHRleHR1cmUuY3JlYXRlKGNvbnRleHQpOworICAgICAgICBFWFBFQ1RfVFJVRSh0ZXh0
dXJlKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCB0cmFja2luZ0NvbnRleHQtPm51bVRleHR1cmVz
KCkpOworCisgICAgICAgIHRleHR1cmUubG9zZSgpOworICAgICAgICBFWFBFQ1RfRkFMU0UodGV4
dHVyZSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgdHJhY2tpbmdDb250ZXh0LT5udW1UZXh0dXJl
cygpKTsKKworICAgICAgICB0ZXh0dXJlLmNsZWFyKCk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh0
ZXh0dXJlKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCB0cmFja2luZ0NvbnRleHQtPm51bVRleHR1
cmVzKCkpOworICAgIH0KKworICAgIEVYUEVDVF9FUSgxdSwgdHJhY2tpbmdDb250ZXh0LT5udW1U
ZXh0dXJlcygpKTsKK30KKworY2xhc3MgTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNEIDogcHVibGlj
IEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7CitwdWJsaWM6CisgICAgTU9DS19NRVRIT0QzKHRl
eFBhcmFtZXRlcmksIHZvaWQoV0dDM0RlbnVtIHRhcmdldCwgV0dDM0RlbnVtIHBuYW1lLCBXR0Mz
RGludCBwYXJhbSkpOworCisgICAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRl
R3JhcGhpY3NDb250ZXh0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKHRo
aXMpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOworICAg
IH0KKworcHJpdmF0ZToKK307CisKK1RFU1QoQ0NTY29wZWRUZXh0dXJlVGVzdCwgQ3JlYXRlU2Nv
cGVkVGV4dHVyZUZvckZyYW1lYnVmZmVyQXR0YWNobWVudCkKK3sKKyAgICBNb2NrV2ViR3JhcGhp
Y3NDb250ZXh0M0QqIG1vY2tDb250ZXh0ID0gbmV3IE1vY2tXZWJHcmFwaGljc0NvbnRleHQzRDsK
KyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBtb2NrQ29udGV4dC0+Y3Jl
YXRlR3JhcGhpY3NDb250ZXh0KCk7CisKKyAgICAvLyBUaGlzIHRleHR1cmUgaXMgc2V0IGZvciB1
c2UgYXMgZnJhbWVidWZmZXIgYXR0YWNobWVudCwgYnV0IHRoZSBjYXBhYmlsaXR5IHRvIGRvIHNv
IGhhcyBub3QgYmVlbiBzZXQuCisgICAgYm9vbCBmb3JGcmFtZWJ1ZmZlckF0dGFjaG1lbnQgPSB0
cnVlOworCisgICAgeworICAgICAgICBDQ1Njb3BlZFRleHR1cmUgdGV4dHVyZTsKKyAgICAgICAg
dGV4dHVyZS5wcmVwYXJlKEludFNpemUoMzAsIDMwKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEs
IGZvckZyYW1lYnVmZmVyQXR0YWNobWVudCk7CisKKyAgICAgICAgLy8gVGhpcyBpcyBhbHdheXMg
ZG9uZSB0byBzZXQgdXAgdGhlIHRleHR1cmUuCisgICAgICAgIEVYUEVDVF9DQUxMKCptb2NrQ29u
dGV4dCwgdGV4UGFyYW1ldGVyaShfLCBfLCBfKSkuVGltZXMoNCk7CisKKyAgICAgICAgRVhQRUNU
X0NBTEwoKm1vY2tDb250ZXh0LCB0ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6R0xfVEVYVFVSRV9VU0FHRV9BTkdMRSwgRXh0
ZW5zaW9uczNEQ2hyb21pdW06OkdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpKQorICAg
ICAgICAgICAgICAgIC5UaW1lcygwKTsKKworICAgICAgICB0ZXh0dXJlLmNyZWF0ZShjb250ZXh0
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUodGV4dHVyZSk7CisKKyAgICAgICAgTW9jazo6VmVyaWZ5
QW5kQ2xlYXJFeHBlY3RhdGlvbnMobW9ja0NvbnRleHQpOworICAgIH0KKworICAgIC8vIFByZXRl
bmQgd2UgaGF2ZSB0aGUgY2FwYWJpbGl0eSBvZiBoaW50aW5nIHRleHR1cmVzIGFzIGJlaW5nIHVz
ZWQgYXMgZnJhbWVidWZmZXIgYXR0YWNobWVudC4KKyAgICBMYXllclJlbmRlcmVyQ2FwYWJpbGl0
aWVzIGNhcGFiaWxpdGllczsKKyAgICBjYXBhYmlsaXRpZXMudXNpbmdUZXh0dXJlVXNhZ2VIaW50
ID0gdHJ1ZTsKKyAgICBDQ1Njb3BlZFRleHR1cmU6OmluaXRpYWxpemVDYXBhYmlsaXRpZXMoY2Fw
YWJpbGl0aWVzKTsKKworICAgIC8vIFRoaXMgdGV4dHVyZSBpcyBOT1Qgc2V0IGZvciB1c2UgYXMg
ZnJhbWVidWZmZXIgYXR0YWNobWVudC4KKyAgICBmb3JGcmFtZWJ1ZmZlckF0dGFjaG1lbnQgPSBm
YWxzZTsKKworICAgIHsKKyAgICAgICAgQ0NTY29wZWRUZXh0dXJlIHRleHR1cmU7CisgICAgICAg
IHRleHR1cmUucHJlcGFyZShJbnRTaXplKDMwLCAzMCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
LCBmb3JGcmFtZWJ1ZmZlckF0dGFjaG1lbnQpOworCisgICAgICAgIC8vIFRoaXMgaXMgYWx3YXlz
IGRvbmUgdG8gc2V0IHVwIHRoZSB0ZXh0dXJlLgorICAgICAgICBFWFBFQ1RfQ0FMTCgqbW9ja0Nv
bnRleHQsIHRleFBhcmFtZXRlcmkoXywgXywgXykpLlRpbWVzKDQpOworCisgICAgICAgIEVYUEVD
VF9DQUxMKCptb2NrQ29udGV4dCwgdGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgRXh0ZW5zaW9uczNEQ2hyb21pdW06OkdMX1RFWFRVUkVfVVNBR0VfQU5HTEUsIEV4
dGVuc2lvbnMzRENocm9taXVtOjpHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKSkKKyAg
ICAgICAgICAgICAgICAuVGltZXMoMCk7CisKKyAgICAgICAgdGV4dHVyZS5jcmVhdGUoY29udGV4
dCk7CisgICAgICAgIEVYUEVDVF9UUlVFKHRleHR1cmUpOworCisgICAgICAgIE1vY2s6OlZlcmlm
eUFuZENsZWFyRXhwZWN0YXRpb25zKG1vY2tDb250ZXh0KTsKKyAgICB9CisKKyAgICAvLyBUaGlz
IHRleHR1cmUgaXMgc2V0IGZvciB1c2UgYXMgZnJhbWVidWZmZXIgYXR0YWNobWVudCwgYW5kIHdl
IGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gZG8gc28gc2V0IG5vdy4KKyAgICBmb3JGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnQgPSB0cnVlOworCisgICAgeworICAgICAgICBDQ1Njb3BlZFRleHR1cmUgdGV4
dHVyZTsKKyAgICAgICAgdGV4dHVyZS5wcmVwYXJlKEludFNpemUoMzAsIDMwKSwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEsIGZvckZyYW1lYnVmZmVyQXR0YWNobWVudCk7CisKKyAgICAgICAgLy8g
VGhpcyBpcyBhbHdheXMgZG9uZSB0byBzZXQgdXAgdGhlIHRleHR1cmUuCisgICAgICAgIEVYUEVD
VF9DQUxMKCptb2NrQ29udGV4dCwgdGV4UGFyYW1ldGVyaShfLCBfLCBfKSkuVGltZXMoNCk7CisK
KyAgICAgICAgRVhQRUNUX0NBTEwoKm1vY2tDb250ZXh0LCB0ZXhQYXJhbWV0ZXJpKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6R0xfVEVYVFVSRV9V
U0FHRV9BTkdMRSwgRXh0ZW5zaW9uczNEQ2hyb21pdW06OkdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfQU5HTEUpKQorICAgICAgICAgICAgICAgIC5UaW1lcygxKTsKKworICAgICAgICB0ZXh0dXJl
LmNyZWF0ZShjb250ZXh0KTsKKyAgICAgICAgRVhQRUNUX1RSVUUodGV4dHVyZSk7CisKKyAgICAg
ICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMobW9ja0NvbnRleHQpOworICAgIH0K
K30KKworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149991</attachid>
            <date>2012-06-28 13:14:56 -0700</date>
            <delta_ts>2012-06-28 14:10:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89485-20120628161455.patch</filename>
            <type>text/plain</type>
            <size>15826</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxNDM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGVjZjM2YjZlY2JkNmY4
YzFlNGM0NzQxYjBhZTU2YTE3YmFiNWIxZS4uNDAxNjA3ZGIxYWY0MzhlNThmNDdjMzAxZWUxOTNi
MDQzYjQwYWM2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTA2LTI4ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIENDU2NvcGVkVGV4dHVyZSBjbGFzcyBmb3IgY3JlYXRpbmcvZnJlZWluZyB0ZXh0dXJlcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk0ODUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNsYXNz
IHByb3ZpZGVzIGEgc3RhbmRhcmQgd2F5IHRvIGNyZWF0ZSB0ZXh0dXJlIGlkcyBpbiBhIHdheSB0
aGF0CisgICAgICAgIGVuc3VyZXMgdGhleSB3aWxsIGJlIGZyZWVkIGxhdGVyLgorCisgICAgICAg
IEFsc28gaW5jbHVkZXMgYSBDQ1RleHR1cmUgYmFzZSBjbGFzcyB0aGF0IGhvbGRzIHRleHR1cmVJ
ZCwgc2l6ZSwgYW5kCisgICAgICAgIGZvcm1hdCB0b2dldGhlciBpbiBhIHN0cnVjdCB0aGF0IGNh
biBiZSB1c2VkIGluIHBsYWNlIG9mIHN0b3JpbmcgYW4KKyAgICAgICAgdW5zaWduZWQgdGV4dHVy
ZUlkIGluIG90aGVyIGNsYXNzZXMuCisKKyAgICAgICAgVW5pdCB0ZXN0czogQ0NTY29wZWRUZXh1
cmVUZXN0Lk5ld1Njb3BlZFRleHR1cmUKKyAgICAgICAgICAgICAgICAgICAgQ0NTY29wZWRUZXh1
cmVUZXN0LkNyZWF0ZVNjb3BlZFRleHR1cmUKKyAgICAgICAgICAgICAgICAgICAgQ0NTY29wZWRU
ZXh1cmVUZXN0LlNjb3BlZFRleHR1cmVJc0RlbGV0ZWQKKyAgICAgICAgICAgICAgICAgICAgQ0NT
Y29wZWRUZXh1cmVUZXN0Lkxvc2VTY29wZWRUZXh0dXJlCisKKyAgICAgICAgKiBXZWJDb3JlLmd5
cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUZXh0
dXJlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
VGV4dHVyZTo6c2V0RGltZW5zaW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmU6OmJ5
dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZTo6bWVtb3J5U2l6ZUJ5dGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDU2NvcGVkVGV4dHVyZTo6Q0NTY29wZWRUZXh0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDU2NvcGVkVGV4dHVyZTo6fkNDU2NvcGVkVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1Njb3BlZFRleHR1cmU6OmFsbG9jYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDU2NvcGVkVGV4dHVyZTo6ZnJlZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njb3BlZFRleHR1
cmU6Omxvc2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nv
cGVkVGV4dHVyZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ0NUZXh0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZTo6Q0NUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGV4dHVyZTo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUZXh0dXJlOjpz
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZTo6Zm9ybWF0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVGV4dHVyZTo6c2V0VGV4dHVyZUlkKToKKyAgICAgICAgKENDU2NvcGVkVGV4dHVy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njb3BlZFRleHR1cmU6Om9wZXJhdG9yIGJvb2wpOgor
CiAyMDEyLTA2LTI3ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFtjaHJvbWl1bV0gRG8gbm90IG11bHRpcGx5IGJvdW5kcyBieSBjb250ZW50c1NjYWxlIGlu
IFRpbGVkTGF5ZXJDaHJvbWl1bSBhbmQgQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCBmNTUxOGI2ZjMyY2YwMDljYzA0NzZiMWM2ZGQ4ZjM3YTEx
NzVlMzE4Li5jNTFiMGNlMmUyYzk0MTM2ZmU4NTJkY2YxNTFhOWQ2ZGUzZTc4OTE4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTA2LTI4ICBEYW5hIEph
bnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3JlYXRl
IENDU2NvcGVkVGV4dHVyZSBjbGFzcyBmb3IgY3JlYXRpbmcvZnJlZWluZyB0ZXh0dXJlcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk0ODUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBp
OgorICAgICAgICAqIHRlc3RzL0NDU2NvcGVkVGV4dHVyZVRlc3QuY3BwOiBBZGRlZC4KKwogMjAx
Mi0wNi0yNyAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KIAogICAgICAgICBb
Y2hyb21pdW1dIERvIG5vdCBtdWx0aXBseSBib3VuZHMgYnkgY29udGVudHNTY2FsZSBpbiBUaWxl
ZExheWVyQ2hyb21pdW0gYW5kIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQppbmRleCAxMDU0ZTA3MjU1Y2E3NmFiOGJkZTVlNGMwMjlhOTY1ZTlkMzAyODA1Li4zYmRkN2Nm
ZjUxZGIwMGRhYTZjYTgzZWQxZTVlYWEzZjE1OTA0NGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0z
NzY2LDYgKzM3NjYsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDU2NoZWR1bGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDU2NoZWR1bGVyU3RhdGVNYWNoaW5lLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY2hlZHVsZXJTdGF0ZU1hY2hpbmUuaCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUZXh0dXJlLmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRU
ZXh0dXJlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
U2NvcGVkVGhyZWFkUHJveHkuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NTY3JvbGxiYXJMYXllckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhckxheWVySW1wbC5oJywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NvcGVk
VGV4dHVyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1Njb3BlZFRleHR1cmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2ZmE5N2M4ZDVkNmQ3NTdiMzdlNjhl
ZWUzOTQ1YzM0Mjk3ZThhZDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njb3BlZFRleHR1cmUuY3BwCkBAIC0wLDAgKzEs
OTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1Njb3Bl
ZFRleHR1cmUuaCIKKworI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiIC8vIEZvciBUZXh0dXJl
QWxsb2NhdG9yCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBDQ1RleHR1cmU6OnNldERp
bWVuc2lvbnMoY29uc3QgSW50U2l6ZSYgc2l6ZSwgR0MzRGVudW0gZm9ybWF0KQoreworICAgIG1f
c2l6ZSA9IHNpemU7CisgICAgbV9mb3JtYXQgPSBmb3JtYXQ7Cit9CisKK3NpemVfdCBDQ1RleHR1
cmU6OmJ5dGVzKCkgY29uc3QKK3sKKyAgICBpZiAobV9zaXplLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIDB1OworCisgICAgcmV0dXJuIG1lbW9yeVNpemVCeXRlcyhtX3NpemUsIG1fZm9ybWF0
KTsKK30KKworc2l6ZV90IENDVGV4dHVyZTo6bWVtb3J5U2l6ZUJ5dGVzKGNvbnN0IEludFNpemUm
IHNpemUsIEdDM0RlbnVtIGZvcm1hdCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgY29tcG9uZW50c1Bl
clBpeGVsOworICAgIHVuc2lnbmVkIGludCBieXRlc1BlckNvbXBvbmVudDsKKyAgICBpZiAoIUdy
YXBoaWNzQ29udGV4dDNEOjpjb21wdXRlRm9ybWF0QW5kVHlwZVBhcmFtZXRlcnMoZm9ybWF0LCBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgJmNvbXBvbmVudHNQZXJQaXhlbCwgJmJ5
dGVzUGVyQ29tcG9uZW50KSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIDB1OworICAgIH0KKyAgICByZXR1cm4gY29tcG9uZW50c1BlclBpeGVsICogYnl0
ZXNQZXJDb21wb25lbnQgKiBzaXplLndpZHRoKCkgKiBzaXplLmhlaWdodCgpOworfQorCitDQ1Nj
b3BlZFRleHR1cmU6OkNDU2NvcGVkVGV4dHVyZShUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3Ip
CisgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCit7CisgICAgQVNTRVJUKG1fYWxsb2NhdG9y
KTsKK30KKworQ0NTY29wZWRUZXh0dXJlOjp+Q0NTY29wZWRUZXh0dXJlKCkKK3sKKyAgICBmcmVl
KCk7Cit9CisKK2Jvb2wgQ0NTY29wZWRUZXh0dXJlOjphbGxvY2F0ZShjb25zdCBJbnRTaXplJiBz
aXplLCBHQzNEZW51bSBmb3JtYXQpCit7CisgICAgQVNTRVJUKCFpZCgpKTsKKyAgICBBU1NFUlQo
IXNpemUuaXNFbXB0eSgpKTsKKworICAgIHNldERpbWVuc2lvbnMoc2l6ZSwgZm9ybWF0KTsKKyAg
ICBzZXRJZChtX2FsbG9jYXRvci0+Y3JlYXRlVGV4dHVyZShzaXplLCBmb3JtYXQpKTsKKworI2lm
ICFBU1NFUlRfRElTQUJMRUQKKyAgICBtX2NyZWF0ZVRocmVhZElkZW50aWZpZXIgPSBXVEY6OmN1
cnJlbnRUaHJlYWQoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGlkKCk7Cit9CisKK3ZvaWQgQ0NT
Y29wZWRUZXh0dXJlOjpmcmVlKCkKK3sKKyAgICBpZiAoaWQoKSkgeworICAgICAgICBBU1NFUlQo
bV9jcmVhdGVUaHJlYWRJZGVudGlmaWVyID09IFdURjo6Y3VycmVudFRocmVhZCgpKTsKKyAgICAg
ICAgbV9hbGxvY2F0b3ItPmRlbGV0ZVRleHR1cmUoaWQoKSwgc2l6ZSgpLCBmb3JtYXQoKSk7Cisg
ICAgfQorICAgIHNldElkKDApOworfQorCit2b2lkIENDU2NvcGVkVGV4dHVyZTo6bG9zZSgpCit7
CisgICAgc2V0SWQoMCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGV4dHVyZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUZXh0dXJlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNDc1Zjc1Y2NlMDQxODYwMGI4NWFkZjlkNjgxMWE4ZmY5ODZjNWU3YwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
U2NvcGVkVGV4dHVyZS5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDU2NvcGVk
VGV4dHVyZV9oCisjZGVmaW5lIENDU2NvcGVkVGV4dHVyZV9oCisKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKworI2lmICFBU1NFUlRfRElTQUJM
RUQKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RydWN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXM7CitjbGFzcyBUZXh0dXJl
QWxsb2NhdG9yOworCitjbGFzcyBDQ1RleHR1cmUgeworcHVibGljOgorICAgIENDVGV4dHVyZSgp
IDogbV9pZCgwKSB7IH0KKworICAgIHVuc2lnbmVkIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsg
fQorICAgIGNvbnN0IEludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAg
ICBHQzNEZW51bSBmb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdDsgfQorCisgICAgdm9p
ZCBzZXRJZCh1bnNpZ25lZCBpZCkgeyBtX2lkID0gaWQ7IH0KKyAgICB2b2lkIHNldERpbWVuc2lv
bnMoY29uc3QgSW50U2l6ZSYsIEdDM0RlbnVtIGZvcm1hdCk7CisKKyAgICBzaXplX3QgYnl0ZXMo
KSBjb25zdDsKKworICAgIHN0YXRpYyBzaXplX3QgbWVtb3J5U2l6ZUJ5dGVzKGNvbnN0IEludFNp
emUmLCBHQzNEZW51bSBmb3JtYXQpOworCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1faWQ7Cisg
ICAgSW50U2l6ZSBtX3NpemU7CisgICAgR0MzRGVudW0gbV9mb3JtYXQ7Cit9OworCitjbGFzcyBD
Q1Njb3BlZFRleHR1cmUgOiBwcm90ZWN0ZWQgQ0NUZXh0dXJlIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShDQ1Njb3BlZFRleHR1cmUpOworcHVibGljOgorICAgIENDU2NvcGVkVGV4dHVyZShU
ZXh0dXJlQWxsb2NhdG9yKik7CisgICAgfkNDU2NvcGVkVGV4dHVyZSgpOworCisgICAgdXNpbmcg
Q0NUZXh0dXJlOjppZDsKKyAgICB1c2luZyBDQ1RleHR1cmU6OnNpemU7CisgICAgdXNpbmcgQ0NU
ZXh0dXJlOjpmb3JtYXQ7CisgICAgdXNpbmcgQ0NUZXh0dXJlOjpieXRlczsKKworICAgIGJvb2wg
YWxsb2NhdGUoY29uc3QgSW50U2l6ZSYsIEdDM0RlbnVtIGZvcm1hdCk7CisgICAgdm9pZCBmcmVl
KCk7CisgICAgdm9pZCBsb3NlKCk7CisKKyAgICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gaWQoKTsgfQorCitwcml2YXRlOgorICAgIFRleHR1cmVBbGxvY2F0b3IqIG1fYWxsb2NhdG9y
OworCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIFRocmVhZElkZW50aWZpZXIgbV9hbGxvY2F0
ZVRocmVhZElkZW50aWZpZXI7CisjZW5kaWYKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwaQppbmRleCBhOGRkM2E2MjY1MzUwNTM3MDE1MGM2NWVlOGRmY2UwOTE3
ZTc4NGRkLi41MDk5ZDRkMzA1YTZkOGI2OTM5NmY2NGFmNzVmZTU4NWQ4MjdmZDVmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTg2LDYgKzg2LDcgQEAKICAgICAgICAgICAgICd0
ZXN0cy9DQ1NjaGVkdWxlclN0YXRlTWFjaGluZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0
cy9DQ1NjaGVkdWxlclRlc3RDb21tb24uaCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NTY2hlZHVs
ZXJUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ0NTY29wZWRUZXh0dXJlVGVzdC5jcHAn
LAogICAgICAgICAgICAgJ3Rlc3RzL0NDU29saWRDb2xvckxheWVySW1wbFRlc3QuY3BwJywKICAg
ICAgICAgICAgICd0ZXN0cy9DQ1Rlc3RDb21tb24uaCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NU
aWxlZExheWVySW1wbFRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NTY29wZWRUZXh0dXJlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDU2NvcGVkVGV4dHVyZVRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBkYjhlYTQzMDdlYzk3
NDA0NTJmMmE1YmRmOTIzMDM2ZWE5Zjg5YmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDU2NvcGVkVGV4dHVyZVRlc3QuY3BwCkBAIC0wLDAgKzEsMTYw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9D
Q1Njb3BlZFRleHR1cmUuaCIKKworI2luY2x1ZGUgIkNDVGlsZWRMYXllclRlc3RDb21tb24uaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3Qu
aD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0Owor
dXNpbmcgbmFtZXNwYWNlIFdlYktpdFRlc3RzOworCituYW1lc3BhY2UgeworCitURVNUKENDU2Nv
cGVkVGV4dHVyZVRlc3QsIE5ld1Njb3BlZFRleHR1cmUpCit7CisgICAgRmFrZVRleHR1cmVBbGxv
Y2F0b3IgYWxsb2NhdG9yOworICAgIENDU2NvcGVkVGV4dHVyZSB0ZXh0dXJlKCZhbGxvY2F0b3Ip
OworCisgICAgLy8gTmV3IHNjb3BlZCB0ZXh0dXJlcyBkbyBub3QgaG9sZCBhIHRleHR1cmUgeWV0
LgorICAgIEVYUEVDVF9GQUxTRSh0ZXh0dXJlKTsKKyAgICBFWFBFQ1RfRVEoMHUsIHRleHR1cmUu
aWQoKSk7CisKKyAgICAvLyBOZXcgc2NvcGVkIHRleHR1cmVzIGRvIG5vdCBoYXZlIGEgc2l6ZSB5
ZXQuCisgICAgRVhQRUNUX0VRKEludFNpemUoKSwgdGV4dHVyZS5zaXplKCkpOworICAgIEVYUEVD
VF9FUSgwdSwgdGV4dHVyZS5ieXRlcygpKTsKK30KKworVEVTVChDQ1Njb3BlZFRleHR1cmVUZXN0
LCBDcmVhdGVTY29wZWRUZXh0dXJlKQoreworICAgIEZha2VUZXh0dXJlQWxsb2NhdG9yIGFsbG9j
YXRvcjsKKyAgICBDQ1Njb3BlZFRleHR1cmUgdGV4dHVyZSgmYWxsb2NhdG9yKTsKKyAgICB0ZXh0
dXJlLmFsbG9jYXRlKEludFNpemUoMzAsIDMwKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpOwor
CisgICAgLy8gVGhlIHRleHR1cmUgaGFzIGFuIGFsbG9jYXRlZCBieXRlLXNpemUgbm93LgorICAg
IHNpemVfdCBleHBlY3RlZEJ5dGVzID0gMzAgKiAzMCAqIDQ7CisgICAgRVhQRUNUX0VRKGV4cGVj
dGVkQnl0ZXMsIHRleHR1cmUuYnl0ZXMoKSk7CisKKyAgICBFWFBFQ1RfVFJVRSh0ZXh0dXJlKTsK
KyAgICBFWFBFQ1RfRVEoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIHRleHR1cmUuZm9ybWF0KCkp
OworICAgIEVYUEVDVF9FUShJbnRTaXplKDMwLCAzMCksIHRleHR1cmUuc2l6ZSgpKTsKK30KKwor
Ly8gRmFrZSBUZXh0dXJlQWxsb2NhdG9yIHRoYXQgdHJhY2tzIHRoZSBudW1iZXIgb2YgdGV4dHVy
ZXMgaW4gdXNlLgorY2xhc3MgVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yIDogcHVibGljIFRleHR1
cmVBbGxvY2F0b3IgeworcHVibGljOgorICAgIFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcigpCisg
ICAgICAgIDogbV9uZXh0VGV4dHVyZUlkKDEpCisgICAgICAgICwgbV9udW1UZXh0dXJlcygwKQor
ICAgIHsgfQorCisgICAgdmlydHVhbCB1bnNpZ25lZCBjcmVhdGVUZXh0dXJlKGNvbnN0IFdlYkNv
cmU6OkludFNpemUmLCBHQzNEZW51bSkgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIHVuc2lnbmVk
IGlkID0gbV9uZXh0VGV4dHVyZUlkOworICAgICAgICArK21fbmV4dFRleHR1cmVJZDsKKworICAg
ICAgICBtX3RleHR1cmVzLnNldChpZCwgdHJ1ZSk7CisgICAgICAgICsrbV9udW1UZXh0dXJlczsK
KyAgICAgICAgcmV0dXJuIGlkOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0
dXJlKHVuc2lnbmVkIGlkLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgR0MzRGVudW0pIE9WRVJS
SURFCisgICAgeworICAgICAgICBpZiAoIW1fdGV4dHVyZXMuZ2V0KGlkKSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBtX3RleHR1cmVzLnNldChpZCwgZmFsc2UpOworICAgICAgICAt
LW1fbnVtVGV4dHVyZXM7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUFsbFRleHR1
cmVzKCkgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIG1fdGV4dHVyZXMuY2xlYXIoKTsKKyAgICAg
ICAgbV9udW1UZXh0dXJlcyA9IDA7CisgICAgfQorCisgICAgdW5zaWduZWQgbnVtVGV4dHVyZXMo
KSBjb25zdCB7IHJldHVybiBtX251bVRleHR1cmVzOyB9CisKK3ByaXZhdGU6CisgICAgdW5zaWdu
ZWQgbV9uZXh0VGV4dHVyZUlkOworICAgIEhhc2hNYXA8dW5zaWduZWQsIGJvb2w+IG1fdGV4dHVy
ZXM7CisgICAgdW5zaWduZWQgbV9udW1UZXh0dXJlczsKK307CisKK1RFU1QoQ0NTY29wZWRUZXh0
dXJlVGVzdCwgU2NvcGVkVGV4dHVyZUlzRGVsZXRlZCkKK3sKKyAgICBUcmFja2luZ1RleHR1cmVB
bGxvY2F0b3IgYWxsb2NhdG9yOworCisgICAgeworICAgICAgICBDQ1Njb3BlZFRleHR1cmUgdGV4
dHVyZSgmYWxsb2NhdG9yKTsKKworICAgICAgICBFWFBFQ1RfRVEoMHUsIGFsbG9jYXRvci5udW1U
ZXh0dXJlcygpKTsKKyAgICAgICAgdGV4dHVyZS5hbGxvY2F0ZShJbnRTaXplKDMwLCAzMCksIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodGV4dHVyZSk7Cisg
ICAgICAgIEVYUEVDVF9FUSgxdSwgYWxsb2NhdG9yLm51bVRleHR1cmVzKCkpOworICAgIH0KKwor
ICAgIEVYUEVDVF9FUSgwdSwgYWxsb2NhdG9yLm51bVRleHR1cmVzKCkpOworCisgICAgeworICAg
ICAgICBDQ1Njb3BlZFRleHR1cmUgdGV4dHVyZSgmYWxsb2NhdG9yKTsKKyAgICAgICAgRVhQRUNU
X0VRKDB1LCBhbGxvY2F0b3IubnVtVGV4dHVyZXMoKSk7CisgICAgICAgIHRleHR1cmUuYWxsb2Nh
dGUoSW50U2l6ZSgzMCwgMzApLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7CisgICAgICAgIEVY
UEVDVF9UUlVFKHRleHR1cmUpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIGFsbG9jYXRvci5udW1U
ZXh0dXJlcygpKTsKKyAgICAgICAgdGV4dHVyZS5mcmVlKCk7CisgICAgICAgIEVYUEVDVF9FUSgw
dSwgYWxsb2NhdG9yLm51bVRleHR1cmVzKCkpOworICAgIH0KK30KKworVEVTVChDQ1Njb3BlZFRl
eHR1cmVUZXN0LCBMb3NlU2NvcGVkVGV4dHVyZSkKK3sKKyAgICBUcmFja2luZ1RleHR1cmVBbGxv
Y2F0b3IgYWxsb2NhdG9yOworCisgICAgeworICAgICAgICBDQ1Njb3BlZFRleHR1cmUgdGV4dHVy
ZSgmYWxsb2NhdG9yKTsKKworICAgICAgICBFWFBFQ1RfRVEoMHUsIGFsbG9jYXRvci5udW1UZXh0
dXJlcygpKTsKKyAgICAgICAgdGV4dHVyZS5hbGxvY2F0ZShJbnRTaXplKDMwLCAzMCksIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodGV4dHVyZSk7CisgICAg
ICAgIEVYUEVDVF9FUSgxdSwgYWxsb2NhdG9yLm51bVRleHR1cmVzKCkpOworCisgICAgICAgIHRl
eHR1cmUubG9zZSgpOworICAgICAgICBFWFBFQ1RfRkFMU0UodGV4dHVyZSk7CisgICAgICAgIEVY
UEVDVF9FUSgxdSwgYWxsb2NhdG9yLm51bVRleHR1cmVzKCkpOworCisgICAgICAgIHRleHR1cmUu
ZnJlZSgpOworICAgICAgICBFWFBFQ1RfRkFMU0UodGV4dHVyZSk7CisgICAgICAgIEVYUEVDVF9F
USgxdSwgYWxsb2NhdG9yLm51bVRleHR1cmVzKCkpOworICAgIH0KKworICAgIEVYUEVDVF9FUSgx
dSwgYWxsb2NhdG9yLm51bVRleHR1cmVzKCkpOworfQorCit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150010</attachid>
            <date>2012-06-28 14:10:25 -0700</date>
            <delta_ts>2012-07-09 15:13:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89485-20120628171025.patch</filename>
            <type>text/plain</type>
            <size>16348</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxNDM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGVjZjM2YjZlY2JkNmY4
YzFlNGM0NzQxYjBhZTU2YTE3YmFiNWIxZS4uZjU5MGZkMzkzYjQyY2FjZmEzOWQzODgyZWFkMDU5
NDcwN2Y3MTEzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTA2LTI4ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIENDU2NvcGVkVGV4dHVyZSBjbGFzcyBmb3IgY3JlYXRpbmcvZnJlZWluZyB0ZXh0dXJlcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk0ODUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNsYXNz
IHByb3ZpZGVzIGEgc3RhbmRhcmQgd2F5IHRvIGNyZWF0ZSB0ZXh0dXJlIGlkcyBpbiBhIHdheSB0
aGF0CisgICAgICAgIGVuc3VyZXMgdGhleSB3aWxsIGJlIGZyZWVkIGxhdGVyLgorCisgICAgICAg
IEFsc28gaW5jbHVkZXMgYSBDQ1RleHR1cmUgYmFzZSBjbGFzcyB0aGF0IGhvbGRzIHRleHR1cmVJ
ZCwgc2l6ZSwgYW5kCisgICAgICAgIGZvcm1hdCB0b2dldGhlciBpbiBhIHN0cnVjdCB0aGF0IGNh
biBiZSB1c2VkIGluIHBsYWNlIG9mIHN0b3JpbmcgYW4KKyAgICAgICAgdW5zaWduZWQgdGV4dHVy
ZUlkIGluIG90aGVyIGNsYXNzZXMuCisKKyAgICAgICAgVW5pdCB0ZXN0czogQ0NTY29wZWRUZXh1
cmVUZXN0Lk5ld1Njb3BlZFRleHR1cmUKKyAgICAgICAgICAgICAgICAgICAgQ0NTY29wZWRUZXh1
cmVUZXN0LkNyZWF0ZVNjb3BlZFRleHR1cmUKKyAgICAgICAgICAgICAgICAgICAgQ0NTY29wZWRU
ZXh1cmVUZXN0LlNjb3BlZFRleHR1cmVJc0RlbGV0ZWQKKyAgICAgICAgICAgICAgICAgICAgQ0NT
Y29wZWRUZXh1cmVUZXN0Lkxvc2VTY29wZWRUZXh0dXJlCisKKyAgICAgICAgKiBXZWJDb3JlLmd5
cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUZXh0
dXJlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
VGV4dHVyZTo6c2V0RGltZW5zaW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmU6OmJ5
dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZTo6bWVtb3J5U2l6ZUJ5dGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDU2NvcGVkVGV4dHVyZTo6Q0NTY29wZWRUZXh0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDU2NvcGVkVGV4dHVyZTo6fkNDU2NvcGVkVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1Njb3BlZFRleHR1cmU6OmFsbG9jYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDU2NvcGVkVGV4dHVyZTo6ZnJlZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njb3BlZFRleHR1
cmU6Omxvc2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nv
cGVkVGV4dHVyZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ0NUZXh0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZTo6Q0NUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGV4dHVyZTo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUZXh0dXJlOjpz
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZTo6Zm9ybWF0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVGV4dHVyZTo6c2V0SWQpOgorICAgICAgICAoQ0NTY29wZWRUZXh0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDU2NvcGVkVGV4dHVyZTo6Y3JlYXRlKToKKwogMjAxMi0wNi0yNyAg
RGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1d
IERvIG5vdCBtdWx0aXBseSBib3VuZHMgYnkgY29udGVudHNTY2FsZSBpbiBUaWxlZExheWVyQ2hy
b21pdW0gYW5kIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKaW5kZXggZjU1MThiNmYzMmNmMDA5Y2MwNDc2YjFjNmRkOGYzN2ExMTc1ZTMxOC4uZjNhZmQ2
MmZjOTE4ZGQ5NDg4MjU0YWY2MmE3YTI0ZTViMWMyYjM0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0wNi0yOCAgRGFuYSBKYW5zZW5zICA8ZGFuYWtq
QGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIENyZWF0ZSBDQ1Njb3BlZFRleHR1
cmUgY2xhc3MgZm9yIGNyZWF0aW5nL2ZyZWVpbmcgdGV4dHVyZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5NDg1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0
ZXN0cy9DQ1Njb3BlZFRleHR1cmVUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXRUZXN0
cyk6CisgICAgICAgIChXZWJLaXRUZXN0czo6VEVTVCk6CisgICAgICAgIChUcmFja2luZ1RleHR1
cmVBbGxvY2F0b3IpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRyYWNraW5nVGV4dHVyZUFsbG9j
YXRvcjo6VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpU
cmFja2luZ1RleHR1cmVBbGxvY2F0b3I6Om51bVRleHR1cmVzKToKKwogMjAxMi0wNi0yNyAgRGFu
YSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIERv
IG5vdCBtdWx0aXBseSBib3VuZHMgYnkgY29udGVudHNTY2FsZSBpbiBUaWxlZExheWVyQ2hyb21p
dW0gYW5kIENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAxMDU0
ZTA3MjU1Y2E3NmFiOGJkZTVlNGMwMjlhOTY1ZTlkMzAyODA1Li4zYmRkN2NmZjUxZGIwMGRhYTZj
YTgzZWQxZTVlYWEzZjE1OTA0NGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNzY2LDYgKzM3NjYs
OCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NoZWR1
bGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2No
ZWR1bGVyU3RhdGVNYWNoaW5lLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTY2hlZHVsZXJTdGF0ZU1hY2hpbmUuaCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUZXh0dXJlLmNwcCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUZXh0dXJlLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGhyZWFk
UHJveHkuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
Y3JvbGxiYXJMYXllckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1Njcm9sbGJhckxheWVySW1wbC5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGV4dHVyZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njb3BlZFRl
eHR1cmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2ZmE5N2M4ZDVkNmQ3NTdiMzdlNjhlZWUzOTQ1YzM0Mjk3
ZThhZDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1Njb3BlZFRleHR1cmUuY3BwCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1Njb3BlZFRleHR1cmUuaCIK
KworI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiIC8vIEZvciBUZXh0dXJlQWxsb2NhdG9yCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBDQ1RleHR1cmU6OnNldERpbWVuc2lvbnMoY29u
c3QgSW50U2l6ZSYgc2l6ZSwgR0MzRGVudW0gZm9ybWF0KQoreworICAgIG1fc2l6ZSA9IHNpemU7
CisgICAgbV9mb3JtYXQgPSBmb3JtYXQ7Cit9CisKK3NpemVfdCBDQ1RleHR1cmU6OmJ5dGVzKCkg
Y29uc3QKK3sKKyAgICBpZiAobV9zaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDB1Owor
CisgICAgcmV0dXJuIG1lbW9yeVNpemVCeXRlcyhtX3NpemUsIG1fZm9ybWF0KTsKK30KKworc2l6
ZV90IENDVGV4dHVyZTo6bWVtb3J5U2l6ZUJ5dGVzKGNvbnN0IEludFNpemUmIHNpemUsIEdDM0Rl
bnVtIGZvcm1hdCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgY29tcG9uZW50c1BlclBpeGVsOworICAg
IHVuc2lnbmVkIGludCBieXRlc1BlckNvbXBvbmVudDsKKyAgICBpZiAoIUdyYXBoaWNzQ29udGV4
dDNEOjpjb21wdXRlRm9ybWF0QW5kVHlwZVBhcmFtZXRlcnMoZm9ybWF0LCBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfQllURSwgJmNvbXBvbmVudHNQZXJQaXhlbCwgJmJ5dGVzUGVyQ29tcG9u
ZW50KSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDB1
OworICAgIH0KKyAgICByZXR1cm4gY29tcG9uZW50c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25l
bnQgKiBzaXplLndpZHRoKCkgKiBzaXplLmhlaWdodCgpOworfQorCitDQ1Njb3BlZFRleHR1cmU6
OkNDU2NvcGVkVGV4dHVyZShUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IpCisgICAgOiBtX2Fs
bG9jYXRvcihhbGxvY2F0b3IpCit7CisgICAgQVNTRVJUKG1fYWxsb2NhdG9yKTsKK30KKworQ0NT
Y29wZWRUZXh0dXJlOjp+Q0NTY29wZWRUZXh0dXJlKCkKK3sKKyAgICBmcmVlKCk7Cit9CisKK2Jv
b2wgQ0NTY29wZWRUZXh0dXJlOjphbGxvY2F0ZShjb25zdCBJbnRTaXplJiBzaXplLCBHQzNEZW51
bSBmb3JtYXQpCit7CisgICAgQVNTRVJUKCFpZCgpKTsKKyAgICBBU1NFUlQoIXNpemUuaXNFbXB0
eSgpKTsKKworICAgIHNldERpbWVuc2lvbnMoc2l6ZSwgZm9ybWF0KTsKKyAgICBzZXRJZChtX2Fs
bG9jYXRvci0+Y3JlYXRlVGV4dHVyZShzaXplLCBmb3JtYXQpKTsKKworI2lmICFBU1NFUlRfRElT
QUJMRUQKKyAgICBtX2NyZWF0ZVRocmVhZElkZW50aWZpZXIgPSBXVEY6OmN1cnJlbnRUaHJlYWQo
KTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGlkKCk7Cit9CisKK3ZvaWQgQ0NTY29wZWRUZXh0dXJl
OjpmcmVlKCkKK3sKKyAgICBpZiAoaWQoKSkgeworICAgICAgICBBU1NFUlQobV9jcmVhdGVUaHJl
YWRJZGVudGlmaWVyID09IFdURjo6Y3VycmVudFRocmVhZCgpKTsKKyAgICAgICAgbV9hbGxvY2F0
b3ItPmRlbGV0ZVRleHR1cmUoaWQoKSwgc2l6ZSgpLCBmb3JtYXQoKSk7CisgICAgfQorICAgIHNl
dElkKDApOworfQorCit2b2lkIENDU2NvcGVkVGV4dHVyZTo6bG9zZSgpCit7CisgICAgc2V0SWQo
MCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDU2NvcGVkVGV4dHVyZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUZXh0dXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTBlZTZm
ZjFjODEyOTk1MGJkZTU3MTUyZGYxMTY4YWVjYjExYzQyNwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGV4dHVy
ZS5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDU2NvcGVkVGV4dHVyZV9oCisj
ZGVmaW5lIENDU2NvcGVkVGV4dHVyZV9oCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgorI2luY2x1ZGUgIkludFNpemUuaCIKKworI2lmICFBU1NFUlRfRElTQUJMRUQKKyNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3Ry
dWN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXM7CitjbGFzcyBUZXh0dXJlQWxsb2NhdG9yOwor
CitjbGFzcyBDQ1RleHR1cmUgeworcHVibGljOgorICAgIENDVGV4dHVyZSgpIDogbV9pZCgwKSB7
IH0KKworICAgIHVuc2lnbmVkIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgIGNvbnN0
IEludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBHQzNEZW51bSBm
b3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdDsgfQorCisgICAgdm9pZCBzZXRJZCh1bnNp
Z25lZCBpZCkgeyBtX2lkID0gaWQ7IH0KKyAgICB2b2lkIHNldERpbWVuc2lvbnMoY29uc3QgSW50
U2l6ZSYsIEdDM0RlbnVtIGZvcm1hdCk7CisKKyAgICBzaXplX3QgYnl0ZXMoKSBjb25zdDsKKwor
ICAgIHN0YXRpYyBzaXplX3QgbWVtb3J5U2l6ZUJ5dGVzKGNvbnN0IEludFNpemUmLCBHQzNEZW51
bSBmb3JtYXQpOworCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1faWQ7CisgICAgSW50U2l6ZSBt
X3NpemU7CisgICAgR0MzRGVudW0gbV9mb3JtYXQ7Cit9OworCitjbGFzcyBDQ1Njb3BlZFRleHR1
cmUgOiBwcm90ZWN0ZWQgQ0NUZXh0dXJlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ1Nj
b3BlZFRleHR1cmUpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDU2NvcGVkVGV4
dHVyZT4gY3JlYXRlKFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvcikgeyByZXR1cm4gYWRvcHRQ
dHIobmV3IENDU2NvcGVkVGV4dHVyZShhbGxvY2F0b3IpKTsgfQorICAgIHZpcnR1YWwgfkNDU2Nv
cGVkVGV4dHVyZSgpOworCisgICAgdXNpbmcgQ0NUZXh0dXJlOjppZDsKKyAgICB1c2luZyBDQ1Rl
eHR1cmU6OnNpemU7CisgICAgdXNpbmcgQ0NUZXh0dXJlOjpmb3JtYXQ7CisgICAgdXNpbmcgQ0NU
ZXh0dXJlOjpieXRlczsKKworICAgIGJvb2wgYWxsb2NhdGUoY29uc3QgSW50U2l6ZSYsIEdDM0Rl
bnVtIGZvcm1hdCk7CisgICAgdm9pZCBmcmVlKCk7CisgICAgdm9pZCBsb3NlKCk7CisKK3Byb3Rl
Y3RlZDoKKyAgICBDQ1Njb3BlZFRleHR1cmUoVGV4dHVyZUFsbG9jYXRvciopOworCitwcml2YXRl
OgorICAgIFRleHR1cmVBbGxvY2F0b3IqIG1fYWxsb2NhdG9yOworCisjaWYgIUFTU0VSVF9ESVNB
QkxFRAorICAgIFRocmVhZElkZW50aWZpZXIgbV9hbGxvY2F0ZVRocmVhZElkZW50aWZpZXI7Cisj
ZW5kaWYKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRl
eCBhOGRkM2E2MjY1MzUwNTM3MDE1MGM2NWVlOGRmY2UwOTE3ZTc4NGRkLi41MDk5ZDRkMzA1YTZk
OGI2OTM5NmY2NGFmNzVmZTU4NWQ4MjdmZDVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cGkKQEAgLTg2LDYgKzg2LDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9DQ1NjaGVkdWxlclN0YXRl
TWFjaGluZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1NjaGVkdWxlclRlc3RDb21t
b24uaCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NTY2hlZHVsZXJUZXN0LmNwcCcsCisgICAgICAg
ICAgICAndGVzdHMvQ0NTY29wZWRUZXh0dXJlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3Rz
L0NDU29saWRDb2xvckxheWVySW1wbFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1Rl
c3RDb21tb24uaCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NUaWxlZExheWVySW1wbFRlc3QuY3Bw
JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NTY29wZWRUZXh0
dXJlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU2NvcGVkVGV4dHVy
ZVRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY3ODY2ZmVjNjkyNjAxOTU1YTVjOWFhODc3NThlMDNhYjE2
YmM1NzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
U2NvcGVkVGV4dHVyZVRlc3QuY3BwCkBAIC0wLDAgKzEsMTU5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1Njb3BlZFRleHR1cmUuaCIKKwor
I2luY2x1ZGUgIkNDVGlsZWRMYXllclRlc3RDb21tb24uaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYktp
dFRlc3RzOworCituYW1lc3BhY2UgeworCitURVNUKENDU2NvcGVkVGV4dHVyZVRlc3QsIE5ld1Nj
b3BlZFRleHR1cmUpCit7CisgICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgYWxsb2NhdG9yOworICAg
IE93blB0cjxDQ1Njb3BlZFRleHR1cmU+IHRleHR1cmUgPSBDQ1Njb3BlZFRleHR1cmU6OmNyZWF0
ZSgmYWxsb2NhdG9yKTsKKworICAgIC8vIE5ldyBzY29wZWQgdGV4dHVyZXMgZG8gbm90IGhvbGQg
YSB0ZXh0dXJlIHlldC4KKyAgICBFWFBFQ1RfRVEoMHUsIHRleHR1cmUtPmlkKCkpOworCisgICAg
Ly8gTmV3IHNjb3BlZCB0ZXh0dXJlcyBkbyBub3QgaGF2ZSBhIHNpemUgeWV0LgorICAgIEVYUEVD
VF9FUShJbnRTaXplKCksIHRleHR1cmUtPnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDB1LCB0ZXh0
dXJlLT5ieXRlcygpKTsKK30KKworVEVTVChDQ1Njb3BlZFRleHR1cmVUZXN0LCBDcmVhdGVTY29w
ZWRUZXh0dXJlKQoreworICAgIEZha2VUZXh0dXJlQWxsb2NhdG9yIGFsbG9jYXRvcjsKKyAgICBP
d25QdHI8Q0NTY29wZWRUZXh0dXJlPiB0ZXh0dXJlID0gQ0NTY29wZWRUZXh0dXJlOjpjcmVhdGUo
JmFsbG9jYXRvcik7CisgICAgdGV4dHVyZS0+YWxsb2NhdGUoSW50U2l6ZSgzMCwgMzApLCBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQSk7CisKKyAgICAvLyBUaGUgdGV4dHVyZSBoYXMgYW4gYWxsb2Nh
dGVkIGJ5dGUtc2l6ZSBub3cuCisgICAgc2l6ZV90IGV4cGVjdGVkQnl0ZXMgPSAzMCAqIDMwICog
NDsKKyAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRCeXRlcywgdGV4dHVyZS0+Ynl0ZXMoKSk7CisKKyAg
ICBFWFBFQ1RfTFQoMHUsIHRleHR1cmUtPmlkKCkpOworICAgIEVYUEVDVF9FUShHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSwgdGV4dHVyZS0+Zm9ybWF0KCkpOworICAgIEVYUEVDVF9FUShJbnRTaXpl
KDMwLCAzMCksIHRleHR1cmUtPnNpemUoKSk7Cit9CisKKy8vIEZha2UgVGV4dHVyZUFsbG9jYXRv
ciB0aGF0IHRyYWNrcyB0aGUgbnVtYmVyIG9mIHRleHR1cmVzIGluIHVzZS4KK2NsYXNzIFRyYWNr
aW5nVGV4dHVyZUFsbG9jYXRvciA6IHB1YmxpYyBUZXh0dXJlQWxsb2NhdG9yIHsKK3B1YmxpYzoK
KyAgICBUcmFja2luZ1RleHR1cmVBbGxvY2F0b3IoKQorICAgICAgICA6IG1fbmV4dFRleHR1cmVJ
ZCgxKQorICAgICAgICAsIG1fbnVtVGV4dHVyZXMoMCkKKyAgICB7IH0KKworICAgIHZpcnR1YWwg
dW5zaWduZWQgY3JlYXRlVGV4dHVyZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgR0MzRGVudW0p
IE9WRVJSSURFCisgICAgeworICAgICAgICB1bnNpZ25lZCBpZCA9IG1fbmV4dFRleHR1cmVJZDsK
KyAgICAgICAgKyttX25leHRUZXh0dXJlSWQ7CisKKyAgICAgICAgbV90ZXh0dXJlcy5zZXQoaWQs
IHRydWUpOworICAgICAgICArK21fbnVtVGV4dHVyZXM7CisgICAgICAgIHJldHVybiBpZDsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVGV4dHVyZSh1bnNpZ25lZCBpZCwgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYsIEdDM0RlbnVtKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgaWYg
KCFtX3RleHR1cmVzLmdldChpZCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV90
ZXh0dXJlcy5zZXQoaWQsIGZhbHNlKTsKKyAgICAgICAgLS1tX251bVRleHR1cmVzOworICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVBbGxUZXh0dXJlcygpIE9WRVJSSURFCisgICAgewor
ICAgICAgICBtX3RleHR1cmVzLmNsZWFyKCk7CisgICAgICAgIG1fbnVtVGV4dHVyZXMgPSAwOwor
ICAgIH0KKworICAgIHVuc2lnbmVkIG51bVRleHR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9udW1U
ZXh0dXJlczsgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fbmV4dFRleHR1cmVJZDsKKyAg
ICBIYXNoTWFwPHVuc2lnbmVkLCBib29sPiBtX3RleHR1cmVzOworICAgIHVuc2lnbmVkIG1fbnVt
VGV4dHVyZXM7Cit9OworCitURVNUKENDU2NvcGVkVGV4dHVyZVRlc3QsIFNjb3BlZFRleHR1cmVJ
c0RlbGV0ZWQpCit7CisgICAgVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yIGFsbG9jYXRvcjsKKwor
ICAgIHsKKyAgICAgICAgT3duUHRyPENDU2NvcGVkVGV4dHVyZT4gdGV4dHVyZSA9IENDU2NvcGVk
VGV4dHVyZTo6Y3JlYXRlKCZhbGxvY2F0b3IpOworCisgICAgICAgIEVYUEVDVF9FUSgwdSwgYWxs
b2NhdG9yLm51bVRleHR1cmVzKCkpOworICAgICAgICB0ZXh0dXJlLT5hbGxvY2F0ZShJbnRTaXpl
KDMwLCAzMCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKTsKKyAgICAgICAgRVhQRUNUX0xUKDB1
LCB0ZXh0dXJlLT5pZCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBhbGxvY2F0b3IubnVtVGV4
dHVyZXMoKSk7CisgICAgfQorCisgICAgRVhQRUNUX0VRKDB1LCBhbGxvY2F0b3IubnVtVGV4dHVy
ZXMoKSk7CisKKyAgICB7CisgICAgICAgIE93blB0cjxDQ1Njb3BlZFRleHR1cmU+IHRleHR1cmUg
PSBDQ1Njb3BlZFRleHR1cmU6OmNyZWF0ZSgmYWxsb2NhdG9yKTsKKyAgICAgICAgRVhQRUNUX0VR
KDB1LCBhbGxvY2F0b3IubnVtVGV4dHVyZXMoKSk7CisgICAgICAgIHRleHR1cmUtPmFsbG9jYXRl
KEludFNpemUoMzAsIDMwKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpOworICAgICAgICBFWFBF
Q1RfTFQoMHUsIHRleHR1cmUtPmlkKCkpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIGFsbG9jYXRv
ci5udW1UZXh0dXJlcygpKTsKKyAgICAgICAgdGV4dHVyZS0+ZnJlZSgpOworICAgICAgICBFWFBF
Q1RfRVEoMHUsIGFsbG9jYXRvci5udW1UZXh0dXJlcygpKTsKKyAgICB9Cit9CisKK1RFU1QoQ0NT
Y29wZWRUZXh0dXJlVGVzdCwgTG9zZVNjb3BlZFRleHR1cmUpCit7CisgICAgVHJhY2tpbmdUZXh0
dXJlQWxsb2NhdG9yIGFsbG9jYXRvcjsKKworICAgIHsKKyAgICAgICAgT3duUHRyPENDU2NvcGVk
VGV4dHVyZT4gdGV4dHVyZSA9IENDU2NvcGVkVGV4dHVyZTo6Y3JlYXRlKCZhbGxvY2F0b3IpOwor
CisgICAgICAgIEVYUEVDVF9FUSgwdSwgYWxsb2NhdG9yLm51bVRleHR1cmVzKCkpOworICAgICAg
ICB0ZXh0dXJlLT5hbGxvY2F0ZShJbnRTaXplKDMwLCAzMCksIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBKTsKKyAgICAgICAgRVhQRUNUX0xUKDB1LCB0ZXh0dXJlLT5pZCgpKTsKKyAgICAgICAgRVhQ
RUNUX0VRKDF1LCBhbGxvY2F0b3IubnVtVGV4dHVyZXMoKSk7CisKKyAgICAgICAgdGV4dHVyZS0+
bG9zZSgpOworICAgICAgICBFWFBFQ1RfRVEoMHUsIHRleHR1cmUtPmlkKCkpOworICAgICAgICBF
WFBFQ1RfRVEoMXUsIGFsbG9jYXRvci5udW1UZXh0dXJlcygpKTsKKworICAgICAgICB0ZXh0dXJl
LT5mcmVlKCk7CisgICAgICAgIEVYUEVDVF9FUSgwdSwgdGV4dHVyZS0+aWQoKSk7CisgICAgICAg
IEVYUEVDVF9FUSgxdSwgYWxsb2NhdG9yLm51bVRleHR1cmVzKCkpOworICAgIH0KKworICAgIEVY
UEVDVF9FUSgxdSwgYWxsb2NhdG9yLm51bVRleHR1cmVzKCkpOworfQorCit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151329</attachid>
            <date>2012-07-09 15:13:36 -0700</date>
            <delta_ts>2012-07-09 17:57:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89485-20120709181335.patch</filename>
            <type>text/plain</type>
            <size>20609</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMTE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTMyNzI4OGRmNDY4MDI1
ODk2NDNlZGQ3OWIzMTQ1ZmUyYzQwYTZiMy4uNzY4NWFjNjg3MjY3NTY3OWI2ZWYzOWZmMzk4NTUy
N2MzMDhjYjliNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEyLTA3LTA5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIENDU2NvcGVkVGV4dHVyZSBjbGFzcyBmb3IgY3JlYXRpbmcvZnJlZWluZyB0ZXh0dXJlcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk0ODUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNsYXNz
IHByb3ZpZGVzIGEgc3RhbmRhcmQgd2F5IHRvIGNyZWF0ZSB0ZXh0dXJlIGlkcyBpbiBhIHdheSB0
aGF0CisgICAgICAgIGVuc3VyZXMgdGhleSB3aWxsIGJlIGZyZWVkIGxhdGVyLgorCisgICAgICAg
IEFsc28gaW5jbHVkZXMgYSBDQ1RleHR1cmUgYmFzZSBjbGFzcyB0aGF0IGhvbGRzIHRleHR1cmVJ
ZCwgc2l6ZSwgYW5kCisgICAgICAgIGZvcm1hdCB0b2dldGhlciBpbiBhIHN0cnVjdCB0aGF0IGNh
biBiZSB1c2VkIGluIHBsYWNlIG9mIHN0b3JpbmcgYW4KKyAgICAgICAgdW5zaWduZWQgdGV4dHVy
ZUlkIGluIG90aGVyIGNsYXNzZXMuCisKKyAgICAgICAgVW5pdCB0ZXN0czogQ0NTY29wZWRUZXh1
cmVUZXN0Lk5ld1Njb3BlZFRleHR1cmUKKyAgICAgICAgICAgICAgICAgICAgQ0NTY29wZWRUZXh1
cmVUZXN0LkNyZWF0ZVNjb3BlZFRleHR1cmUKKyAgICAgICAgICAgICAgICAgICAgQ0NTY29wZWRU
ZXh1cmVUZXN0LlNjb3BlZFRleHR1cmVJc0RlbGV0ZWQKKyAgICAgICAgICAgICAgICAgICAgQ0NT
Y29wZWRUZXh1cmVUZXN0Lkxvc2VTY29wZWRUZXh0dXJlCisKKyAgICAgICAgKiBXZWJDb3JlLmd5
cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUZXh0
dXJlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
U2NvcGVkVGV4dHVyZTo6Q0NTY29wZWRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nv
cGVkVGV4dHVyZTo6fkNDU2NvcGVkVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njb3Bl
ZFRleHR1cmU6OmFsbG9jYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2NvcGVkVGV4dHVyZTo6
ZnJlZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njb3BlZFRleHR1cmU6OmxlYWspOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGV4dHVyZS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ0NTY29wZWRUZXh0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDU2NvcGVkVGV4dHVyZTo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUZXh0dXJlOjpzZXREaW1lbnNpb25zKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZTo6Ynl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NU
ZXh0dXJlOjptZW1vcnlTaXplQnl0ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGV4dHVyZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoQ0NUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZTo6Q0NUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZTo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NU
ZXh0dXJlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZTo6Zm9ybWF0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZTo6c2V0SWQpOgorCiAyMDEyLTA3LTA5ICBKb3NodWEg
TmV0dGVyZmllbGQgIDxqbmV0dGVyZmllbGRAcmltLmNvbT4KICAgICAgICAgTWFrZSBHQzNEIGFu
ZCBFM0QgbW9yZSBtYWludGFpbmFibGUgZm9yIEdMRVMgcGxhdGZvcm1zCiAgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDU2NwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwppbmRleCA1N2I5ZmE4MDIzNjk0ZjBlYzJkMDUwMWNmZGQ0NGM3ZjkwZjhhNmQ0Li4w
ZGFhMTM3NTNjZGExOWI5Yzk1MTU5MzZlYmQzNWRiZjI3MWZhNjE0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEyLTA3LTA5ICBEYW5hIEphbnNlbnMgIDxk
YW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3JlYXRlIENDU2NvcGVk
VGV4dHVyZSBjbGFzcyBmb3IgY3JlYXRpbmcvZnJlZWluZyB0ZXh0dXJlcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk0ODUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAg
ICAqIHRlc3RzL0NDU2NvcGVkVGV4dHVyZVRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dFRlc3RzKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpURVNUKToKKyAgICAgICAgKFRyYWNraW5n
VGV4dHVyZUFsbG9jYXRvcik6CisgICAgICAgIChXZWJLaXRUZXN0czo6VHJhY2tpbmdUZXh0dXJl
QWxsb2NhdG9yOjpUcmFja2luZ1RleHR1cmVBbGxvY2F0b3IpOgorICAgICAgICAoV2ViS2l0VGVz
dHM6OlRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjo6bnVtVGV4dHVyZXMpOgorCiAyMDEyLTA3LTAy
ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIE1ha2UgSFRNTENv
bGxlY3Rpb24gUmVmQ291bnRlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDBiMTA1Y2Y0YzkyMDM1M2Nk
N2NhNGU1NGIyYjQ3MjY5YTJmYzgxODcuLmI1NWEwZDdjOTI2ZjIxNjU4MDQwNzkxYjAwYjU4ZTQz
Y2Q2YzU3ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTgzNjIsNiArODM2Miw4IEBACiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY2hlZHVsZXIuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY2hlZHVsZXJTdGF0ZU1h
Y2hpbmUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1NjaGVkdWxlclN0YXRlTWFjaGluZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1Njb3BlZFRleHR1cmUuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njb3BlZFRleHR1cmUuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUaHJlYWRQcm94eS5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhckxheWVy
SW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
U2Nyb2xsYmFyTGF5ZXJJbXBsLmgnLApAQCAtODM3Nyw2ICs4Mzc5LDggQEAKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JMYXllckltcGwuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTdHJlYW1WaWRl
b0RyYXdRdWFkLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NTdHJlYW1WaWRlb0RyYXdRdWFkLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVEcmF3UXVhZC5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZURyYXdRdWFkLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZUxheWVySW1w
bC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NTY29wZWRUZXh0dXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGV4dHVyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODBmODMx
NTQxMWJlNTUxZWE2ZGNhNDAzNmVjYjliZWI3ZDY1NjdmMAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGV4dHVy
ZS5jcHAKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgImNjL0NDU2NvcGVkVGV4dHVyZS5oIgorCisjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIu
aCIgLy8gRm9yIFRleHR1cmVBbGxvY2F0b3IKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDQ1Nj
b3BlZFRleHR1cmU6OkNDU2NvcGVkVGV4dHVyZShUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3Ip
CisgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCit7CisgICAgQVNTRVJUKG1fYWxsb2NhdG9y
KTsKK30KKworQ0NTY29wZWRUZXh0dXJlOjp+Q0NTY29wZWRUZXh0dXJlKCkKK3sKKyAgICBmcmVl
KCk7Cit9CisKK2Jvb2wgQ0NTY29wZWRUZXh0dXJlOjphbGxvY2F0ZShjb25zdCBJbnRTaXplJiBz
aXplLCBHQzNEZW51bSBmb3JtYXQpCit7CisgICAgQVNTRVJUKCFpZCgpKTsKKyAgICBBU1NFUlQo
IXNpemUuaXNFbXB0eSgpKTsKKworICAgIHNldERpbWVuc2lvbnMoc2l6ZSwgZm9ybWF0KTsKKyAg
ICBzZXRJZChtX2FsbG9jYXRvci0+Y3JlYXRlVGV4dHVyZShzaXplLCBmb3JtYXQpKTsKKworI2lm
ICFBU1NFUlRfRElTQUJMRUQKKyAgICBtX2FsbG9jYXRlVGhyZWFkSWRlbnRpZmllciA9IFdURjo6
Y3VycmVudFRocmVhZCgpOworI2VuZGlmCisKKyAgICByZXR1cm4gaWQoKTsKK30KKwordm9pZCBD
Q1Njb3BlZFRleHR1cmU6OmZyZWUoKQoreworICAgIGlmIChpZCgpKSB7CisgICAgICAgIEFTU0VS
VChtX2FsbG9jYXRlVGhyZWFkSWRlbnRpZmllciA9PSBXVEY6OmN1cnJlbnRUaHJlYWQoKSk7Cisg
ICAgICAgIG1fYWxsb2NhdG9yLT5kZWxldGVUZXh0dXJlKGlkKCksIHNpemUoKSwgZm9ybWF0KCkp
OworICAgIH0KKyAgICBzZXRJZCgwKTsKK30KKwordm9pZCBDQ1Njb3BlZFRleHR1cmU6OmxlYWso
KQoreworICAgIHNldElkKDApOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njb3BlZFRleHR1cmUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGV4dHVyZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjZmOWM5N2Q5NTRmN2ZlM2M3Njk0ZmM2Y2ZhZjQ4NjM0MWFkMTQxODAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1Njb3BlZFRleHR1cmUuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ1Nj
b3BlZFRleHR1cmVfaAorI2RlZmluZSBDQ1Njb3BlZFRleHR1cmVfaAorCisjaW5jbHVkZSAiY2Mv
Q0NUZXh0dXJlLmgiCisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRleHR1cmVB
bGxvY2F0b3I7CisKK2NsYXNzIENDU2NvcGVkVGV4dHVyZSA6IHByb3RlY3RlZCBDQ1RleHR1cmUg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDU2NvcGVkVGV4dHVyZSk7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NPd25QdHI8Q0NTY29wZWRUZXh0dXJlPiBjcmVhdGUoVGV4dHVyZUFsbG9j
YXRvciogYWxsb2NhdG9yKSB7IHJldHVybiBhZG9wdFB0cihuZXcgQ0NTY29wZWRUZXh0dXJlKGFs
bG9jYXRvcikpOyB9CisgICAgdmlydHVhbCB+Q0NTY29wZWRUZXh0dXJlKCk7CisKKyAgICB1c2lu
ZyBDQ1RleHR1cmU6OmlkOworICAgIHVzaW5nIENDVGV4dHVyZTo6c2l6ZTsKKyAgICB1c2luZyBD
Q1RleHR1cmU6OmZvcm1hdDsKKyAgICB1c2luZyBDQ1RleHR1cmU6OmJ5dGVzOworCisgICAgYm9v
bCBhbGxvY2F0ZShjb25zdCBJbnRTaXplJiwgR0MzRGVudW0gZm9ybWF0KTsKKyAgICB2b2lkIGZy
ZWUoKTsKKyAgICB2b2lkIGxlYWsoKTsKKworcHJvdGVjdGVkOgorICAgIENDU2NvcGVkVGV4dHVy
ZShUZXh0dXJlQWxsb2NhdG9yKik7CisKK3ByaXZhdGU6CisgICAgVGV4dHVyZUFsbG9jYXRvciog
bV9hbGxvY2F0b3I7CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgVGhyZWFkSWRlbnRpZmll
ciBtX2FsbG9jYXRlVGhyZWFkSWRlbnRpZmllcjsKKyNlbmRpZgorfTsKKworfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGV4dHVyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RleHR1cmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE0OGUyZDBmOTllZTA5NGQxMmU4N2JjOGY4
YmY0NTJkYWY5YTdiMDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmUuY3BwCkBAIC0wLDAgKzEsNTcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1RleHR1cmUuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIENDVGV4dHVyZTo6c2V0RGltZW5zaW9ucyhjb25z
dCBJbnRTaXplJiBzaXplLCBHQzNEZW51bSBmb3JtYXQpCit7CisgICAgbV9zaXplID0gc2l6ZTsK
KyAgICBtX2Zvcm1hdCA9IGZvcm1hdDsKK30KKworc2l6ZV90IENDVGV4dHVyZTo6Ynl0ZXMoKSBj
b25zdAoreworICAgIGlmIChtX3NpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMHU7CisK
KyAgICByZXR1cm4gbWVtb3J5U2l6ZUJ5dGVzKG1fc2l6ZSwgbV9mb3JtYXQpOworfQorCitzaXpl
X3QgQ0NUZXh0dXJlOjptZW1vcnlTaXplQnl0ZXMoY29uc3QgSW50U2l6ZSYgc2l6ZSwgR0MzRGVu
dW0gZm9ybWF0KQoreworICAgIHVuc2lnbmVkIGludCBjb21wb25lbnRzUGVyUGl4ZWw7CisgICAg
dW5zaWduZWQgaW50IGJ5dGVzUGVyQ29tcG9uZW50OworICAgIGlmICghR3JhcGhpY3NDb250ZXh0
M0Q6OmNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVycyhmb3JtYXQsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFLCAmY29tcG9uZW50c1BlclBpeGVsLCAmYnl0ZXNQZXJDb21wb25l
bnQpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMHU7
CisgICAgfQorICAgIHJldHVybiBjb21wb25lbnRzUGVyUGl4ZWwgKiBieXRlc1BlckNvbXBvbmVu
dCAqIHNpemUud2lkdGgoKSAqIHNpemUuaGVpZ2h0KCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYTI5NjEwNDY5M2RkNDUyZjJiOTg1NzgyMDQ1ZWYwY2E3NmMxMmU4MgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGV4dHVyZS5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDVGV4dHVy
ZV9oCisjZGVmaW5lIENDVGV4dHVyZV9oCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJjYy9DQ1RleHR1cmUuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ1RleHR1cmUgeworcHVibGljOgorICAgIENDVGV4
dHVyZSgpIDogbV9pZCgwKSB7IH0KKworICAgIHVuc2lnbmVkIGlkKCkgY29uc3QgeyByZXR1cm4g
bV9pZDsgfQorICAgIGNvbnN0IEludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7
IH0KKyAgICBHQzNEZW51bSBmb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdDsgfQorCisg
ICAgdm9pZCBzZXRJZCh1bnNpZ25lZCBpZCkgeyBtX2lkID0gaWQ7IH0KKyAgICB2b2lkIHNldERp
bWVuc2lvbnMoY29uc3QgSW50U2l6ZSYsIEdDM0RlbnVtIGZvcm1hdCk7CisKKyAgICBzaXplX3Qg
Ynl0ZXMoKSBjb25zdDsKKworICAgIHN0YXRpYyBzaXplX3QgbWVtb3J5U2l6ZUJ5dGVzKGNvbnN0
IEludFNpemUmLCBHQzNEZW51bSBmb3JtYXQpOworCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1f
aWQ7CisgICAgSW50U2l6ZSBtX3NpemU7CisgICAgR0MzRGVudW0gbV9mb3JtYXQ7Cit9OworCit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
aSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggN2IzZTY4YzhiODJh
ZmVlMTFkMThhYTcyMGY2ODllNGYyZTY1MTU0YS4uOWNkMmYzNzY2ZWQxZmQ1NDk1OWZlN2ViZjBh
MGUxNTM5NjE1MjFlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC04Niw2ICs4
Niw3IEBACiAgICAgICAgICAgICAndGVzdHMvQ0NTY2hlZHVsZXJTdGF0ZU1hY2hpbmVUZXN0LmNw
cCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NTY2hlZHVsZXJUZXN0Q29tbW9uLmgnLAogICAgICAg
ICAgICAgJ3Rlc3RzL0NDU2NoZWR1bGVyVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0ND
U2NvcGVkVGV4dHVyZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1NvbGlkQ29sb3JM
YXllckltcGxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NUZXN0Q29tbW9uLmgnLAog
ICAgICAgICAgICAgJ3Rlc3RzL0NDVGlsZWRMYXllckltcGxUZXN0LmNwcCcsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU2NvcGVkVGV4dHVyZVRlc3QuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1Njb3BlZFRleHR1cmVUZXN0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40ZDQ2NGVhNTE0MzhlYTgzZjcwMmU5ZjU2NjMwZjVkYjFmN2I2NmZhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1Njb3BlZFRleHR1cmVU
ZXN0LmNwcApAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSAiY2MvQ0NTY29wZWRUZXh0dXJlLmgiCisKKyNpbmNsdWRlICJDQ1Rp
bGVkTGF5ZXJUZXN0Q29tbW9uLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKwor
I2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNp
bmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0czsKKworbmFt
ZXNwYWNlIHsKKworVEVTVChDQ1Njb3BlZFRleHR1cmVUZXN0LCBOZXdTY29wZWRUZXh0dXJlKQor
eworICAgIEZha2VUZXh0dXJlQWxsb2NhdG9yIGFsbG9jYXRvcjsKKyAgICBPd25QdHI8Q0NTY29w
ZWRUZXh0dXJlPiB0ZXh0dXJlID0gQ0NTY29wZWRUZXh0dXJlOjpjcmVhdGUoJmFsbG9jYXRvcik7
CisKKyAgICAvLyBOZXcgc2NvcGVkIHRleHR1cmVzIGRvIG5vdCBob2xkIGEgdGV4dHVyZSB5ZXQu
CisgICAgRVhQRUNUX0VRKDB1LCB0ZXh0dXJlLT5pZCgpKTsKKworICAgIC8vIE5ldyBzY29wZWQg
dGV4dHVyZXMgZG8gbm90IGhhdmUgYSBzaXplIHlldC4KKyAgICBFWFBFQ1RfRVEoSW50U2l6ZSgp
LCB0ZXh0dXJlLT5zaXplKCkpOworICAgIEVYUEVDVF9FUSgwdSwgdGV4dHVyZS0+Ynl0ZXMoKSk7
Cit9CisKK1RFU1QoQ0NTY29wZWRUZXh0dXJlVGVzdCwgQ3JlYXRlU2NvcGVkVGV4dHVyZSkKK3sK
KyAgICBGYWtlVGV4dHVyZUFsbG9jYXRvciBhbGxvY2F0b3I7CisgICAgT3duUHRyPENDU2NvcGVk
VGV4dHVyZT4gdGV4dHVyZSA9IENDU2NvcGVkVGV4dHVyZTo6Y3JlYXRlKCZhbGxvY2F0b3IpOwor
ICAgIHRleHR1cmUtPmFsbG9jYXRlKEludFNpemUoMzAsIDMwKSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEpOworCisgICAgLy8gVGhlIHRleHR1cmUgaGFzIGFuIGFsbG9jYXRlZCBieXRlLXNpemUg
bm93LgorICAgIHNpemVfdCBleHBlY3RlZEJ5dGVzID0gMzAgKiAzMCAqIDQ7CisgICAgRVhQRUNU
X0VRKGV4cGVjdGVkQnl0ZXMsIHRleHR1cmUtPmJ5dGVzKCkpOworCisgICAgRVhQRUNUX0xUKDB1
LCB0ZXh0dXJlLT5pZCgpKTsKKyAgICBFWFBFQ1RfRVEoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEs
IHRleHR1cmUtPmZvcm1hdCgpKTsKKyAgICBFWFBFQ1RfRVEoSW50U2l6ZSgzMCwgMzApLCB0ZXh0
dXJlLT5zaXplKCkpOworfQorCisvLyBGYWtlIFRleHR1cmVBbGxvY2F0b3IgdGhhdCB0cmFja3Mg
dGhlIG51bWJlciBvZiB0ZXh0dXJlcyBpbiB1c2UuCitjbGFzcyBUcmFja2luZ1RleHR1cmVBbGxv
Y2F0b3IgOiBwdWJsaWMgVGV4dHVyZUFsbG9jYXRvciB7CitwdWJsaWM6CisgICAgVHJhY2tpbmdU
ZXh0dXJlQWxsb2NhdG9yKCkKKyAgICAgICAgOiBtX25leHRUZXh0dXJlSWQoMSkKKyAgICAgICAg
LCBtX251bVRleHR1cmVzKDApCisgICAgeyB9CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGNyZWF0
ZVRleHR1cmUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIEdDM0RlbnVtKSBPVkVSUklERQorICAg
IHsKKyAgICAgICAgdW5zaWduZWQgaWQgPSBtX25leHRUZXh0dXJlSWQ7CisgICAgICAgICsrbV9u
ZXh0VGV4dHVyZUlkOworCisgICAgICAgIG1fdGV4dHVyZXMuc2V0KGlkLCB0cnVlKTsKKyAgICAg
ICAgKyttX251bVRleHR1cmVzOworICAgICAgICByZXR1cm4gaWQ7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIGRlbGV0ZVRleHR1cmUodW5zaWduZWQgaWQsIGNvbnN0IFdlYkNvcmU6OkludFNp
emUmLCBHQzNEZW51bSkgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIGlmICghbV90ZXh0dXJlcy5n
ZXQoaWQpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fdGV4dHVyZXMuc2V0KGlk
LCBmYWxzZSk7CisgICAgICAgIC0tbV9udW1UZXh0dXJlczsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlQWxsVGV4dHVyZXMoKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgbV90ZXh0
dXJlcy5jbGVhcigpOworICAgICAgICBtX251bVRleHR1cmVzID0gMDsKKyAgICB9CisKKyAgICB1
bnNpZ25lZCBudW1UZXh0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVGV4dHVyZXM7IH0KKwor
cHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX25leHRUZXh0dXJlSWQ7CisgICAgSGFzaE1hcDx1bnNp
Z25lZCwgYm9vbD4gbV90ZXh0dXJlczsKKyAgICB1bnNpZ25lZCBtX251bVRleHR1cmVzOworfTsK
KworVEVTVChDQ1Njb3BlZFRleHR1cmVUZXN0LCBTY29wZWRUZXh0dXJlSXNEZWxldGVkKQorewor
ICAgIFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvciBhbGxvY2F0b3I7CisKKyAgICB7CisgICAgICAg
IE93blB0cjxDQ1Njb3BlZFRleHR1cmU+IHRleHR1cmUgPSBDQ1Njb3BlZFRleHR1cmU6OmNyZWF0
ZSgmYWxsb2NhdG9yKTsKKworICAgICAgICBFWFBFQ1RfRVEoMHUsIGFsbG9jYXRvci5udW1UZXh0
dXJlcygpKTsKKyAgICAgICAgdGV4dHVyZS0+YWxsb2NhdGUoSW50U2l6ZSgzMCwgMzApLCBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQSk7CisgICAgICAgIEVYUEVDVF9MVCgwdSwgdGV4dHVyZS0+aWQo
KSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgYWxsb2NhdG9yLm51bVRleHR1cmVzKCkpOworICAg
IH0KKworICAgIEVYUEVDVF9FUSgwdSwgYWxsb2NhdG9yLm51bVRleHR1cmVzKCkpOworCisgICAg
eworICAgICAgICBPd25QdHI8Q0NTY29wZWRUZXh0dXJlPiB0ZXh0dXJlID0gQ0NTY29wZWRUZXh0
dXJlOjpjcmVhdGUoJmFsbG9jYXRvcik7CisgICAgICAgIEVYUEVDVF9FUSgwdSwgYWxsb2NhdG9y
Lm51bVRleHR1cmVzKCkpOworICAgICAgICB0ZXh0dXJlLT5hbGxvY2F0ZShJbnRTaXplKDMwLCAz
MCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKTsKKyAgICAgICAgRVhQRUNUX0xUKDB1LCB0ZXh0
dXJlLT5pZCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBhbGxvY2F0b3IubnVtVGV4dHVyZXMo
KSk7CisgICAgICAgIHRleHR1cmUtPmZyZWUoKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBhbGxv
Y2F0b3IubnVtVGV4dHVyZXMoKSk7CisgICAgfQorfQorCitURVNUKENDU2NvcGVkVGV4dHVyZVRl
c3QsIExlYWtTY29wZWRUZXh0dXJlKQoreworICAgIFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvciBh
bGxvY2F0b3I7CisKKyAgICB7CisgICAgICAgIE93blB0cjxDQ1Njb3BlZFRleHR1cmU+IHRleHR1
cmUgPSBDQ1Njb3BlZFRleHR1cmU6OmNyZWF0ZSgmYWxsb2NhdG9yKTsKKworICAgICAgICBFWFBF
Q1RfRVEoMHUsIGFsbG9jYXRvci5udW1UZXh0dXJlcygpKTsKKyAgICAgICAgdGV4dHVyZS0+YWxs
b2NhdGUoSW50U2l6ZSgzMCwgMzApLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7CisgICAgICAg
IEVYUEVDVF9MVCgwdSwgdGV4dHVyZS0+aWQoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgYWxs
b2NhdG9yLm51bVRleHR1cmVzKCkpOworCisgICAgICAgIHRleHR1cmUtPmxlYWsoKTsKKyAgICAg
ICAgRVhQRUNUX0VRKDB1LCB0ZXh0dXJlLT5pZCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBh
bGxvY2F0b3IubnVtVGV4dHVyZXMoKSk7CisKKyAgICAgICAgdGV4dHVyZS0+ZnJlZSgpOworICAg
ICAgICBFWFBFQ1RfRVEoMHUsIHRleHR1cmUtPmlkKCkpOworICAgICAgICBFWFBFQ1RfRVEoMXUs
IGFsbG9jYXRvci5udW1UZXh0dXJlcygpKTsKKyAgICB9CisKKyAgICBFWFBFQ1RfRVEoMXUsIGFs
bG9jYXRvci5udW1UZXh0dXJlcygpKTsKK30KKworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151373</attachid>
            <date>2012-07-09 17:57:58 -0700</date>
            <delta_ts>2012-07-09 18:45:17 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-89485-20120709205757.patch</filename>
            <type>text/plain</type>
            <size>20620</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMTE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTMyNzI4OGRmNDY4MDI1
ODk2NDNlZGQ3OWIzMTQ1ZmUyYzQwYTZiMy4uMmQyNzgzOTk4NzQ1ZTliMjE1MGZjZTY4YTQ5MjA0
NWZjMjk5NTRkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEyLTA3LTA5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIENDU2NvcGVkVGV4dHVyZSBjbGFzcyBmb3IgY3JlYXRpbmcvZnJlZWluZyB0ZXh0dXJlcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk0ODUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBBZHJpZW5uZSBXYWxrZXIuCisKKyAgICAgICAgVGhpcyBjbGFz
cyBwcm92aWRlcyBhIHN0YW5kYXJkIHdheSB0byBjcmVhdGUgdGV4dHVyZSBpZHMgaW4gYSB3YXkg
dGhhdAorICAgICAgICBlbnN1cmVzIHRoZXkgd2lsbCBiZSBmcmVlZCBsYXRlci4KKworICAgICAg
ICBBbHNvIGluY2x1ZGVzIGEgQ0NUZXh0dXJlIGJhc2UgY2xhc3MgdGhhdCBob2xkcyB0ZXh0dXJl
SWQsIHNpemUsIGFuZAorICAgICAgICBmb3JtYXQgdG9nZXRoZXIgaW4gYSBzdHJ1Y3QgdGhhdCBj
YW4gYmUgdXNlZCBpbiBwbGFjZSBvZiBzdG9yaW5nIGFuCisgICAgICAgIHVuc2lnbmVkIHRleHR1
cmVJZCBpbiBvdGhlciBjbGFzc2VzLgorCisgICAgICAgIFVuaXQgdGVzdHM6IENDU2NvcGVkVGV4
dXJlVGVzdC5OZXdTY29wZWRUZXh0dXJlCisgICAgICAgICAgICAgICAgICAgIENDU2NvcGVkVGV4
dXJlVGVzdC5DcmVhdGVTY29wZWRUZXh0dXJlCisgICAgICAgICAgICAgICAgICAgIENDU2NvcGVk
VGV4dXJlVGVzdC5TY29wZWRUZXh0dXJlSXNEZWxldGVkCisgICAgICAgICAgICAgICAgICAgIEND
U2NvcGVkVGV4dXJlVGVzdC5Mb3NlU2NvcGVkVGV4dHVyZQorCisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGV4
dHVyZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1Njb3BlZFRleHR1cmU6OkNDU2NvcGVkVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Nj
b3BlZFRleHR1cmU6On5DQ1Njb3BlZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY29w
ZWRUZXh0dXJlOjphbGxvY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njb3BlZFRleHR1cmU6
OmZyZWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY29wZWRUZXh0dXJlOjpsZWFrKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njb3BlZFRleHR1cmUuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDU2NvcGVkVGV4dHVyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1Njb3BlZFRleHR1cmU6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZTo6c2V0RGltZW5zaW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmU6OmJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkND
VGV4dHVyZTo6bWVtb3J5U2l6ZUJ5dGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RleHR1cmUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKENDVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmU6OkNDVGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmU6OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OkND
VGV4dHVyZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmU6OmZvcm1hdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmU6OnNldElkKToKKwogMjAxMi0wNy0wOSAgSm9zaHVh
IE5ldHRlcmZpZWxkICA8am5ldHRlcmZpZWxkQHJpbS5jb20+CiAgICAgICAgIE1ha2UgR0MzRCBh
bmQgRTNEIG1vcmUgbWFpbnRhaW5hYmxlIGZvciBHTEVTIHBsYXRmb3JtcwogICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA1NjcKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKaW5kZXggNTdiOWZhODAyMzY5NGYwZWMyZDA1MDFjZmRkNDRjN2Y5MGY4YTZkNC4u
OGY2YjdhZGQ1OTEyZmFkYWY1YzFiYTBlNGFiMTEzNGE0NDM1NmZjMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0wNy0wOSAgRGFuYSBKYW5zZW5zICA8
ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIENyZWF0ZSBDQ1Njb3Bl
ZFRleHR1cmUgY2xhc3MgZm9yIGNyZWF0aW5nL2ZyZWVpbmcgdGV4dHVyZXMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5NDg1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQWRyaWVubmUgV2Fsa2VyLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAg
ICAgICogdGVzdHMvQ0NTY29wZWRUZXh0dXJlVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0VGVzdHMpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRFU1QpOgorICAgICAgICAoVHJhY2tp
bmdUZXh0dXJlQWxsb2NhdG9yKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpUcmFja2luZ1RleHR1
cmVBbGxvY2F0b3I6OlRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcik6CisgICAgICAgIChXZWJLaXRU
ZXN0czo6VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOjpudW1UZXh0dXJlcyk6CisKIDIwMTItMDct
MDIgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFrZSBIVE1M
Q29sbGVjdGlvbiBSZWZDb3VudGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMGIxMDVjZjRjOTIwMzUz
Y2Q3Y2E0ZTU0YjJiNDcyNjlhMmZjODE4Ny4uYjU1YTBkN2M5MjZmMjE2NTgwNDA3OTFiMDBiNThl
NDNjZDZjNTdmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtODM2Miw2ICs4MzYyLDggQEAKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NjaGVkdWxlci5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NjaGVkdWxlclN0YXRl
TWFjaGluZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU2NoZWR1bGVyU3RhdGVNYWNoaW5lLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGV4dHVyZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGV4dHVyZS5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njb3BlZFRocmVhZFByb3h5LmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFyTGF5
ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NTY3JvbGxiYXJMYXllckltcGwuaCcsCkBAIC04Mzc3LDYgKzgzNzksOCBAQAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU29saWRDb2xvckxheWVySW1wbC5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1N0cmVhbVZp
ZGVvRHJhd1F1YWQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1N0cmVhbVZpZGVvRHJhd1F1YWQuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZURyYXdRdWFkLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlRHJhd1F1YWQuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlTGF5ZXJJ
bXBsLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1Njb3BlZFRleHR1cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUZXh0dXJlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MGY4
MzE1NDExYmU1NTFlYTZkY2E0MDM2ZWNiOWJlYjdkNjU2N2YwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUZXh0
dXJlLmNwcApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiY2MvQ0NTY29wZWRUZXh0dXJlLmgiCisKKyNpbmNsdWRlICJUZXh0dXJlTWFuYWdl
ci5oIiAvLyBGb3IgVGV4dHVyZUFsbG9jYXRvcgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ND
U2NvcGVkVGV4dHVyZTo6Q0NTY29wZWRUZXh0dXJlKFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRv
cikKKyAgICA6IG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKK3sKKyAgICBBU1NFUlQobV9hbGxvY2F0
b3IpOworfQorCitDQ1Njb3BlZFRleHR1cmU6On5DQ1Njb3BlZFRleHR1cmUoKQoreworICAgIGZy
ZWUoKTsKK30KKworYm9vbCBDQ1Njb3BlZFRleHR1cmU6OmFsbG9jYXRlKGNvbnN0IEludFNpemUm
IHNpemUsIEdDM0RlbnVtIGZvcm1hdCkKK3sKKyAgICBBU1NFUlQoIWlkKCkpOworICAgIEFTU0VS
VCghc2l6ZS5pc0VtcHR5KCkpOworCisgICAgc2V0RGltZW5zaW9ucyhzaXplLCBmb3JtYXQpOwor
ICAgIHNldElkKG1fYWxsb2NhdG9yLT5jcmVhdGVUZXh0dXJlKHNpemUsIGZvcm1hdCkpOworCisj
aWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIG1fYWxsb2NhdGVUaHJlYWRJZGVudGlmaWVyID0gV1RG
OjpjdXJyZW50VGhyZWFkKCk7CisjZW5kaWYKKworICAgIHJldHVybiBpZCgpOworfQorCit2b2lk
IENDU2NvcGVkVGV4dHVyZTo6ZnJlZSgpCit7CisgICAgaWYgKGlkKCkpIHsKKyAgICAgICAgQVNT
RVJUKG1fYWxsb2NhdGVUaHJlYWRJZGVudGlmaWVyID09IFdURjo6Y3VycmVudFRocmVhZCgpKTsK
KyAgICAgICAgbV9hbGxvY2F0b3ItPmRlbGV0ZVRleHR1cmUoaWQoKSwgc2l6ZSgpLCBmb3JtYXQo
KSk7CisgICAgfQorICAgIHNldElkKDApOworfQorCit2b2lkIENDU2NvcGVkVGV4dHVyZTo6bGVh
aygpCit7CisgICAgc2V0SWQoMCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NvcGVkVGV4dHVyZS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUZXh0dXJlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNWEzYzRlOTY0ZGQyYzZjZWU1YTc0MWRmMzFmM2NmZTZiZDFlMjRjMAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDU2NvcGVkVGV4dHVyZS5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEND
U2NvcGVkVGV4dHVyZV9oCisjZGVmaW5lIENDU2NvcGVkVGV4dHVyZV9oCisKKyNpbmNsdWRlICJj
Yy9DQ1RleHR1cmUuaCIKKworI2lmICFBU1NFUlRfRElTQUJMRUQKKyNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGV4dHVy
ZUFsbG9jYXRvcjsKKworY2xhc3MgQ0NTY29wZWRUZXh0dXJlIDogcHJvdGVjdGVkIENDVGV4dHVy
ZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NTY29wZWRUZXh0dXJlKTsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1Njb3BlZFRleHR1cmU+IGNyZWF0ZShUZXh0dXJlQWxs
b2NhdG9yKiBhbGxvY2F0b3IpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1Njb3BlZFRleHR1cmUo
YWxsb2NhdG9yKSk7IH0KKyAgICB2aXJ0dWFsIH5DQ1Njb3BlZFRleHR1cmUoKTsKKworICAgIHVz
aW5nIENDVGV4dHVyZTo6aWQ7CisgICAgdXNpbmcgQ0NUZXh0dXJlOjpzaXplOworICAgIHVzaW5n
IENDVGV4dHVyZTo6Zm9ybWF0OworICAgIHVzaW5nIENDVGV4dHVyZTo6Ynl0ZXM7CisKKyAgICBi
b29sIGFsbG9jYXRlKGNvbnN0IEludFNpemUmLCBHQzNEZW51bSBmb3JtYXQpOworICAgIHZvaWQg
ZnJlZSgpOworICAgIHZvaWQgbGVhaygpOworCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgQ0NT
Y29wZWRUZXh0dXJlKFRleHR1cmVBbGxvY2F0b3IqKTsKKworcHJpdmF0ZToKKyAgICBUZXh0dXJl
QWxsb2NhdG9yKiBtX2FsbG9jYXRvcjsKKworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBUaHJl
YWRJZGVudGlmaWVyIG1fYWxsb2NhdGVUaHJlYWRJZGVudGlmaWVyOworI2VuZGlmCit9OworCit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUZXh0dXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTQ4ZTJkMGY5OWVlMDk0
ZDEyZTg3YmM4ZjhiZjQ1MmRhZjlhN2IwNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZS5jcHAKQEAgLTAsMCAr
MSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDVGV4
dHVyZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgQ0NUZXh0dXJlOjpzZXREaW1l
bnNpb25zKGNvbnN0IEludFNpemUmIHNpemUsIEdDM0RlbnVtIGZvcm1hdCkKK3sKKyAgICBtX3Np
emUgPSBzaXplOworICAgIG1fZm9ybWF0ID0gZm9ybWF0OworfQorCitzaXplX3QgQ0NUZXh0dXJl
OjpieXRlcygpIGNvbnN0Cit7CisgICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiAwdTsKKworICAgIHJldHVybiBtZW1vcnlTaXplQnl0ZXMobV9zaXplLCBtX2Zvcm1hdCk7
Cit9CisKK3NpemVfdCBDQ1RleHR1cmU6Om1lbW9yeVNpemVCeXRlcyhjb25zdCBJbnRTaXplJiBz
aXplLCBHQzNEZW51bSBmb3JtYXQpCit7CisgICAgdW5zaWduZWQgaW50IGNvbXBvbmVudHNQZXJQ
aXhlbDsKKyAgICB1bnNpZ25lZCBpbnQgYnl0ZXNQZXJDb21wb25lbnQ7CisgICAgaWYgKCFHcmFw
aGljc0NvbnRleHQzRDo6Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKGZvcm1hdCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsICZjb21wb25lbnRzUGVyUGl4ZWwsICZieXRl
c1BlckNvbXBvbmVudCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiAwdTsKKyAgICB9CisgICAgcmV0dXJuIGNvbXBvbmVudHNQZXJQaXhlbCAqIGJ5dGVz
UGVyQ29tcG9uZW50ICogc2l6ZS53aWR0aCgpICogc2l6ZS5oZWlnaHQoKTsKK30KKworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
ZXh0dXJlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RleHR1cmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMjk2MTA0NjkzZGQ0NTJmMmI5ODU3ODIwNDVlZjBjYTc2
YzEyZTgyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgQ0NUZXh0dXJlX2gKKyNkZWZpbmUgQ0NUZXh0dXJlX2gKKworI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNELmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgImNjL0NDVGV4dHVy
ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDVGV4dHVyZSB7CitwdWJsaWM6
CisgICAgQ0NUZXh0dXJlKCkgOiBtX2lkKDApIHsgfQorCisgICAgdW5zaWduZWQgaWQoKSBjb25z
dCB7IHJldHVybiBtX2lkOyB9CisgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZTsgfQorICAgIEdDM0RlbnVtIGZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9y
bWF0OyB9CisKKyAgICB2b2lkIHNldElkKHVuc2lnbmVkIGlkKSB7IG1faWQgPSBpZDsgfQorICAg
IHZvaWQgc2V0RGltZW5zaW9ucyhjb25zdCBJbnRTaXplJiwgR0MzRGVudW0gZm9ybWF0KTsKKwor
ICAgIHNpemVfdCBieXRlcygpIGNvbnN0OworCisgICAgc3RhdGljIHNpemVfdCBtZW1vcnlTaXpl
Qnl0ZXMoY29uc3QgSW50U2l6ZSYsIEdDM0RlbnVtIGZvcm1hdCk7CisKK3ByaXZhdGU6CisgICAg
dW5zaWduZWQgbV9pZDsKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICBHQzNEZW51bSBtX2Zvcm1h
dDsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCA3
YjNlNjhjOGI4MmFmZWUxMWQxOGFhNzIwZjY4OWU0ZjJlNjUxNTRhLi45Y2QyZjM3NjZlZDFmZDU0
OTU5ZmU3ZWJmMGEwZTE1Mzk2MTUyMWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkK
QEAgLTg2LDYgKzg2LDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9DQ1NjaGVkdWxlclN0YXRlTWFj
aGluZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1NjaGVkdWxlclRlc3RDb21tb24u
aCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NTY2hlZHVsZXJUZXN0LmNwcCcsCisgICAgICAgICAg
ICAndGVzdHMvQ0NTY29wZWRUZXh0dXJlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0ND
U29saWRDb2xvckxheWVySW1wbFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1Rlc3RD
b21tb24uaCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NUaWxlZExheWVySW1wbFRlc3QuY3BwJywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NTY29wZWRUZXh0dXJl
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU2NvcGVkVGV4dHVyZVRl
c3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjRkNDY0ZWE1MTQzOGVhODNmNzAyZTlmNTY2MzBmNWRiMWY3YjY2
ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU2Nv
cGVkVGV4dHVyZVRlc3QuY3BwCkBAIC0wLDAgKzEsMTU5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1Njb3BlZFRleHR1cmUuaCIKKworI2lu
Y2x1ZGUgIkNDVGlsZWRMYXllclRlc3RDb21tb24uaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzRC5oIgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYktpdFRl
c3RzOworCituYW1lc3BhY2UgeworCitURVNUKENDU2NvcGVkVGV4dHVyZVRlc3QsIE5ld1Njb3Bl
ZFRleHR1cmUpCit7CisgICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgYWxsb2NhdG9yOworICAgIE93
blB0cjxDQ1Njb3BlZFRleHR1cmU+IHRleHR1cmUgPSBDQ1Njb3BlZFRleHR1cmU6OmNyZWF0ZSgm
YWxsb2NhdG9yKTsKKworICAgIC8vIE5ldyBzY29wZWQgdGV4dHVyZXMgZG8gbm90IGhvbGQgYSB0
ZXh0dXJlIHlldC4KKyAgICBFWFBFQ1RfRVEoMHUsIHRleHR1cmUtPmlkKCkpOworCisgICAgLy8g
TmV3IHNjb3BlZCB0ZXh0dXJlcyBkbyBub3QgaGF2ZSBhIHNpemUgeWV0LgorICAgIEVYUEVDVF9F
UShJbnRTaXplKCksIHRleHR1cmUtPnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDB1LCB0ZXh0dXJl
LT5ieXRlcygpKTsKK30KKworVEVTVChDQ1Njb3BlZFRleHR1cmVUZXN0LCBDcmVhdGVTY29wZWRU
ZXh0dXJlKQoreworICAgIEZha2VUZXh0dXJlQWxsb2NhdG9yIGFsbG9jYXRvcjsKKyAgICBPd25Q
dHI8Q0NTY29wZWRUZXh0dXJlPiB0ZXh0dXJlID0gQ0NTY29wZWRUZXh0dXJlOjpjcmVhdGUoJmFs
bG9jYXRvcik7CisgICAgdGV4dHVyZS0+YWxsb2NhdGUoSW50U2l6ZSgzMCwgMzApLCBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSk7CisKKyAgICAvLyBUaGUgdGV4dHVyZSBoYXMgYW4gYWxsb2NhdGVk
IGJ5dGUtc2l6ZSBub3cuCisgICAgc2l6ZV90IGV4cGVjdGVkQnl0ZXMgPSAzMCAqIDMwICogNDsK
KyAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRCeXRlcywgdGV4dHVyZS0+Ynl0ZXMoKSk7CisKKyAgICBF
WFBFQ1RfTFQoMHUsIHRleHR1cmUtPmlkKCkpOworICAgIEVYUEVDVF9FUShHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQSwgdGV4dHVyZS0+Zm9ybWF0KCkpOworICAgIEVYUEVDVF9FUShJbnRTaXplKDMw
LCAzMCksIHRleHR1cmUtPnNpemUoKSk7Cit9CisKKy8vIEZha2UgVGV4dHVyZUFsbG9jYXRvciB0
aGF0IHRyYWNrcyB0aGUgbnVtYmVyIG9mIHRleHR1cmVzIGluIHVzZS4KK2NsYXNzIFRyYWNraW5n
VGV4dHVyZUFsbG9jYXRvciA6IHB1YmxpYyBUZXh0dXJlQWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAg
ICBUcmFja2luZ1RleHR1cmVBbGxvY2F0b3IoKQorICAgICAgICA6IG1fbmV4dFRleHR1cmVJZCgx
KQorICAgICAgICAsIG1fbnVtVGV4dHVyZXMoMCkKKyAgICB7IH0KKworICAgIHZpcnR1YWwgdW5z
aWduZWQgY3JlYXRlVGV4dHVyZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgR0MzRGVudW0pIE9W
RVJSSURFCisgICAgeworICAgICAgICB1bnNpZ25lZCBpZCA9IG1fbmV4dFRleHR1cmVJZDsKKyAg
ICAgICAgKyttX25leHRUZXh0dXJlSWQ7CisKKyAgICAgICAgbV90ZXh0dXJlcy5zZXQoaWQsIHRy
dWUpOworICAgICAgICArK21fbnVtVGV4dHVyZXM7CisgICAgICAgIHJldHVybiBpZDsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVGV4dHVyZSh1bnNpZ25lZCBpZCwgY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYsIEdDM0RlbnVtKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgaWYgKCFt
X3RleHR1cmVzLmdldChpZCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV90ZXh0
dXJlcy5zZXQoaWQsIGZhbHNlKTsKKyAgICAgICAgLS1tX251bVRleHR1cmVzOworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVBbGxUZXh0dXJlcygpIE9WRVJSSURFCisgICAgeworICAg
ICAgICBtX3RleHR1cmVzLmNsZWFyKCk7CisgICAgICAgIG1fbnVtVGV4dHVyZXMgPSAwOworICAg
IH0KKworICAgIHVuc2lnbmVkIG51bVRleHR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9udW1UZXh0
dXJlczsgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fbmV4dFRleHR1cmVJZDsKKyAgICBI
YXNoTWFwPHVuc2lnbmVkLCBib29sPiBtX3RleHR1cmVzOworICAgIHVuc2lnbmVkIG1fbnVtVGV4
dHVyZXM7Cit9OworCitURVNUKENDU2NvcGVkVGV4dHVyZVRlc3QsIFNjb3BlZFRleHR1cmVJc0Rl
bGV0ZWQpCit7CisgICAgVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yIGFsbG9jYXRvcjsKKworICAg
IHsKKyAgICAgICAgT3duUHRyPENDU2NvcGVkVGV4dHVyZT4gdGV4dHVyZSA9IENDU2NvcGVkVGV4
dHVyZTo6Y3JlYXRlKCZhbGxvY2F0b3IpOworCisgICAgICAgIEVYUEVDVF9FUSgwdSwgYWxsb2Nh
dG9yLm51bVRleHR1cmVzKCkpOworICAgICAgICB0ZXh0dXJlLT5hbGxvY2F0ZShJbnRTaXplKDMw
LCAzMCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKTsKKyAgICAgICAgRVhQRUNUX0xUKDB1LCB0
ZXh0dXJlLT5pZCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBhbGxvY2F0b3IubnVtVGV4dHVy
ZXMoKSk7CisgICAgfQorCisgICAgRVhQRUNUX0VRKDB1LCBhbGxvY2F0b3IubnVtVGV4dHVyZXMo
KSk7CisKKyAgICB7CisgICAgICAgIE93blB0cjxDQ1Njb3BlZFRleHR1cmU+IHRleHR1cmUgPSBD
Q1Njb3BlZFRleHR1cmU6OmNyZWF0ZSgmYWxsb2NhdG9yKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1
LCBhbGxvY2F0b3IubnVtVGV4dHVyZXMoKSk7CisgICAgICAgIHRleHR1cmUtPmFsbG9jYXRlKElu
dFNpemUoMzAsIDMwKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpOworICAgICAgICBFWFBFQ1Rf
TFQoMHUsIHRleHR1cmUtPmlkKCkpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIGFsbG9jYXRvci5u
dW1UZXh0dXJlcygpKTsKKyAgICAgICAgdGV4dHVyZS0+ZnJlZSgpOworICAgICAgICBFWFBFQ1Rf
RVEoMHUsIGFsbG9jYXRvci5udW1UZXh0dXJlcygpKTsKKyAgICB9Cit9CisKK1RFU1QoQ0NTY29w
ZWRUZXh0dXJlVGVzdCwgTGVha1Njb3BlZFRleHR1cmUpCit7CisgICAgVHJhY2tpbmdUZXh0dXJl
QWxsb2NhdG9yIGFsbG9jYXRvcjsKKworICAgIHsKKyAgICAgICAgT3duUHRyPENDU2NvcGVkVGV4
dHVyZT4gdGV4dHVyZSA9IENDU2NvcGVkVGV4dHVyZTo6Y3JlYXRlKCZhbGxvY2F0b3IpOworCisg
ICAgICAgIEVYUEVDVF9FUSgwdSwgYWxsb2NhdG9yLm51bVRleHR1cmVzKCkpOworICAgICAgICB0
ZXh0dXJlLT5hbGxvY2F0ZShJbnRTaXplKDMwLCAzMCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
KTsKKyAgICAgICAgRVhQRUNUX0xUKDB1LCB0ZXh0dXJlLT5pZCgpKTsKKyAgICAgICAgRVhQRUNU
X0VRKDF1LCBhbGxvY2F0b3IubnVtVGV4dHVyZXMoKSk7CisKKyAgICAgICAgdGV4dHVyZS0+bGVh
aygpOworICAgICAgICBFWFBFQ1RfRVEoMHUsIHRleHR1cmUtPmlkKCkpOworICAgICAgICBFWFBF
Q1RfRVEoMXUsIGFsbG9jYXRvci5udW1UZXh0dXJlcygpKTsKKworICAgICAgICB0ZXh0dXJlLT5m
cmVlKCk7CisgICAgICAgIEVYUEVDVF9FUSgwdSwgdGV4dHVyZS0+aWQoKSk7CisgICAgICAgIEVY
UEVDVF9FUSgxdSwgYWxsb2NhdG9yLm51bVRleHR1cmVzKCkpOworICAgIH0KKworICAgIEVYUEVD
VF9FUSgxdSwgYWxsb2NhdG9yLm51bVRleHR1cmVzKCkpOworfQorCit9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>