<?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>103796</bug_id>
          
          <creation_ts>2012-11-30 18:14:07 -0800</creation_ts>
          <short_desc>[chromium] ImageDecodingStore should cache partially decoded images</short_desc>
          <delta_ts>2012-12-10 22:16:33 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</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>99790</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hin-Chung Lam">hclam</reporter>
          <assigned_to name="Hin-Chung Lam">hclam</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>levin+threading</cc>
    
    <cc>nduca</cc>
    
    <cc>ostap73</cc>
    
    <cc>qinmin</cc>
    
    <cc>senorblanco</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>780602</commentid>
    <comment_count>0</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-11-30 18:14:07 -0800</bug_when>
    <thetext>Current implementation does not cache partially decoded images. The result is that when an image is partially decoded, the bitmap and corresponding ImageDecoder is deleted. The means any subsequent decoding will have to start from scratch.

Redoing image decoding many times is very expensive and should be avoided. The solution to this is to cache partially decoded bitmap together with the ImageDecoder.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783455</commentid>
    <comment_count>1</comment_count>
      <attachid>177684</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-12-05 00:05:00 -0800</bug_when>
    <thetext>Created attachment 177684
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783457</commentid>
    <comment_count>2</comment_count>
      <attachid>177684</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-12-05 00:12:11 -0800</bug_when>
    <thetext>Comment on attachment 177684
Patch

The seems big but if you focus on ImageDecodingStore and ImageFrameGenerator the others are just test and changes to mock modules.

ImageDecodingStore

Added logic to handle incomplete cache entries.

ImageFrameGenerator

Added logic to resume decoding using a cached decoder. The change has some code move involved to share code with decoding starting from scratch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>784116</commentid>
    <comment_count>3</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-12-05 14:29:18 -0800</bug_when>
    <thetext>Woohoo! Tested this with Chrome and it works with large JPEG files too, which means this incomplete image caching is working.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786016</commentid>
    <comment_count>4</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-12-07 11:38:34 -0800</bug_when>
    <thetext>nduca, senorblanco: have time to have a look? As we have discussed we&apos;ll change the resampling algorithm later so it&apos;s now in it&apos;s own function and easy to swap out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786039</commentid>
    <comment_count>5</comment_count>
      <attachid>177684</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-12-07 12:14:32 -0800</bug_when>
    <thetext>Comment on attachment 177684
Patch

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

Please fix the anonymous bool.  The rest are nits and suggestions, which you can heed or ignore at your whim.

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:80
&gt; +bool ImageDecodingStore::lockCache(const ImageFrameGenerator* generator, const SkISize&amp; scaledSize, bool cacheMustBeComplete, const ScaledImageFragment** cachedImage, ImageDecoder** decoder)

For cacheMustBeComplete:  &quot;Prefer enums to bools on function parameters if callers are likely to be passing constants, since named constants are easier to read at the call site.&quot;

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:82
&gt;      CacheEntry* cacheEntry = 0;

Maybe ASSERT(cachedImage) here?  Seems to be non-optional outparam.  (I&apos;d actually keep it as the actual return value, since only decoder seems to be optional, but that&apos;s just personal style.)

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:103
&gt; +    if (decoder)
&gt; +        *decoder = cacheEntry-&gt;cachedDecoder();

(Suggestion)  Would it make sense to have this function return a cacheEntry instead, so the caller could just get the decoder from it?  Or would that expose too much implementation to the caller?

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:152
&gt; +    OwnPtr&lt;ImageDecoder&gt; trash;

Does this really need to live to end of function scope?  (I&apos;m guessing yes, just making sure.)

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:168
&gt; +        cacheEntry-&gt;overwriteCachedImage(newImage);
&gt; +        newCachedImage = cacheEntry-&gt;cachedImage();
&gt; +
&gt; +        // Image is complete then decoder is not needed.
&gt; +        if (cacheEntry-&gt;cachedImage()-&gt;isComplete())
&gt; +            trash = cacheEntry-&gt;releaseCachedDecoder();

(Suggestion) It seems like the only place you releaseCachedDecoder() is right after calling overwriteCachedImage().  If that&apos;s always going to be true, perhaps you should just have overwriteCachedImage() release the decoder itself if isComplete() is true?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786226</commentid>
    <comment_count>6</comment_count>
      <attachid>178292</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-12-07 15:27:13 -0800</bug_when>
    <thetext>Created attachment 178292
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786227</commentid>
    <comment_count>7</comment_count>
      <attachid>177684</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-12-07 15:27:19 -0800</bug_when>
    <thetext>Comment on attachment 177684
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:80
&gt;&gt; +bool ImageDecodingStore::lockCache(const ImageFrameGenerator* generator, const SkISize&amp; scaledSize, bool cacheMustBeComplete, const ScaledImageFragment** cachedImage, ImageDecoder** decoder)
&gt; 
&gt; For cacheMustBeComplete:  &quot;Prefer enums to bools on function parameters if callers are likely to be passing constants, since named constants are easier to read at the call site.&quot;

Okay.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:82
&gt;&gt;      CacheEntry* cacheEntry = 0;
&gt; 
&gt; Maybe ASSERT(cachedImage) here?  Seems to be non-optional outparam.  (I&apos;d actually keep it as the actual return value, since only decoder seems to be optional, but that&apos;s just personal style.)

Done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:103
&gt;&gt; +        *decoder = cacheEntry-&gt;cachedDecoder();
&gt; 
&gt; (Suggestion)  Would it make sense to have this function return a cacheEntry instead, so the caller could just get the decoder from it?  Or would that expose too much implementation to the caller?

I want to keep CacheEntry internal to ImageDecodingStore.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:152
&gt;&gt; +    OwnPtr&lt;ImageDecoder&gt; trash;
&gt; 
&gt; Does this really need to live to end of function scope?  (I&apos;m guessing yes, just making sure.)

Yes so that deleting the object doesn&apos;t live inside the lock.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:168
&gt;&gt; +            trash = cacheEntry-&gt;releaseCachedDecoder();
&gt; 
&gt; (Suggestion) It seems like the only place you releaseCachedDecoder() is right after calling overwriteCachedImage().  If that&apos;s always going to be true, perhaps you should just have overwriteCachedImage() release the decoder itself if isComplete() is true?

Good idea, will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786288</commentid>
    <comment_count>8</comment_count>
      <attachid>178292</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-12-07 16:36:31 -0800</bug_when>
    <thetext>Comment on attachment 178292
Patch

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

OK.  The logic still seems a bit complex, but perhaps that can be cleaned up later.  r=me

&gt; Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.cpp:191
&gt; +            *decoder = m_imageDecoderFactory-&gt;create().leakPtr();

I wonder if this function (and others) should take an OwnPtr&lt;ImageDecoder&gt;* instead?  Then you wouldn&apos;t have to call leakPtr() here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786337</commentid>
    <comment_count>9</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-12-07 18:13:21 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 178292 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=178292&amp;action=review
&gt; 
&gt; OK.  The logic still seems a bit complex, but perhaps that can be cleaned up later.  r=me
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.cpp:191
&gt; &gt; +            *decoder = m_imageDecoderFactory-&gt;create().leakPtr();
&gt; 

ImageDecodingStore is pretty close to complete and concise. There will be some more work in ImageFrameGenerator later.

&gt; I wonder if this function (and others) should take an OwnPtr&lt;ImageDecoder&gt;* instead?  Then you wouldn&apos;t have to call leakPtr() here.

One caller doesn&apos;t transfer ownership hence it&apos;s a ** parameter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786338</commentid>
    <comment_count>10</comment_count>
      <attachid>178317</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-12-07 18:14:31 -0800</bug_when>
    <thetext>Created attachment 178317
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786363</commentid>
    <comment_count>11</comment_count>
      <attachid>178317</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-07 19:01:15 -0800</bug_when>
    <thetext>Comment on attachment 178317
Patch for landing

Clearing flags on attachment: 178317

Committed r137008: &lt;http://trac.webkit.org/changeset/137008&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786364</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-07 19:01:20 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788049</commentid>
    <comment_count>13</comment_count>
    <who name="Min Qin">qinmin</who>
    <bug_when>2012-12-10 22:16:33 -0800</bug_when>
    <thetext>*** Bug 104311 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177684</attachid>
            <date>2012-12-05 00:05:00 -0800</date>
            <delta_ts>2012-12-07 18:14:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103796-20121205000225.patch</filename>
            <type>text/plain</type>
            <size>43953</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2NjQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDcwMmYwMGQwYmYyODE3
Yjc4ZTY3NWRkNTNkMTQ3ZTI3NTExZjZjNS4uOTQ4NjE0NjM5NDNiYjZiZTY1ZDNhZmEwZWE3Njlm
N2M3NGQ1NzkxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2IEBACisyMDEyLTEyLTA0ICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbWFnZURl
Y29kaW5nU3RvcmUgc2hvdWxkIGNhY2hlIHBhcnRpYWxseSBkZWNvZGVkIGltYWdlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNzk2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IGNhY2hp
bmcgZm9yIGluY29tcGxldGUgaW1hZ2VzLCBtZWFuaW5nIHRoZSBpbWFnZSBpcyBwYXJ0aWFsbHkK
KyAgICAgICAgZGVjb2RlZC4gVGhlIGltYWdlIGlzIGNhY2hlZCB0b2dldGhlciB3aXRoIHBhcnRp
YWxseSBkZWNvZGVkIEltYWdlRGVjb2Rlci4KKyAgICAgICAgVGhpcyBhbGxvd3MgZGVjb2Rpbmcg
dG8gcmVzdW1lIGluIGEgbGF0ZXIgdGltZS4KKworICAgICAgICBDYWNoaW5nIGxvZ2ljIGZvciBp
bmNvbXBsZXRlIGltYWdlcyBpcyBpbXBsZW1lbnRlZCBpbiBJbWFnZURlY29kaW5nU3RvcmUuCisK
KyAgICAgICAgTG9naWMgZm9yIHJlc3VtaW5nIGltYWdlIGRlY29kaW5nIGlzIGltcGxlbWVudGVk
IGluIEltYWdlRnJhbWVHZW5lcmF0b3IuCisKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlIGFs
bG93cyBzdG9yaW5nIGluY29tcGxldGUgaW1hZ2Ugd2l0aCB0aGUgZGVjb2Rlci4KKyAgICAgICAg
VGhlIGNhY2hlIGVudHJ5IGNhbiBiZSB1c2VkIGluIGEgbGF0ZXIgdGltZSB0byByZWFkIGFuZCB3
cml0ZSAoaS5lLiByZXN1bWUKKyAgICAgICAgZGVjb2RpbmcuKSBUbyBhdm9pZCB0aGUgc2FtZSBl
bnRyeSBiZWluZyB3cml0dGVuIGFuZCByZWFkIGF0IHRoZSBzYW1lIHRpbWUsCisgICAgICAgIGFu
IGluY29tcGxldGUgZW50cnkgY2FuIGJlIHVzZWQgYnkgb25lIHVzZXIgb25seS4gQ29uY3VycmVu
dCBhY2Nlc3MgdG8KKyAgICAgICAgYW4gaW5jb21wbGV0ZSBlbnRyeSBzaG91bGQgbmV2ZXIgaGFw
cGVuIGFuZCBpcyBjaGVja2VkIGJ5IGFuIGFzc2VydC4KKyAgICAgICAgQW4gZW50cnkgY2FuIGJl
Y29tZXMgY29tcGxldGUgd2hlbiBkZWNvZGluZyBpcyBmaW5pc2hlZC4gSW4gdGhpcyBjYXNlCisg
ICAgICAgIHRoZSBhc3NvY2lhdGVkIGRlY29kZXIgaXMgZGVsZXRlZC4gT25jZSBhbiBlbnRyeSBi
ZWNvbWVzIGNvbXBsZXRlIGNvbmN1cnJlbnQKKyAgICAgICAgcmVhZCBpcyBhbGxvd2VkLgorCisg
ICAgICAgIEltYWdlRnJhbWVHZW5lcmF0b3IgcGVyZm9ybXMgdGhlIGxvZ2ljIHRvIHJlc3VtZSBp
bWFnZSBkZWNvZGluZy4gSXQKKyAgICAgICAgcGVyZm9ybXMgdGhlIGZvbGxvd2luZyBvcGVyYXRp
b25zIGluIHNlcXVlbmNlOgorICAgICAgICAtIFRyeSB0byBsb29rdXAgYSBjb21wbGV0ZSBpbWFn
ZQorICAgICAgICAtIFRyeSB0byBwZXJmb3JtIHNjYWxpbmcgb24gYSBjb21wbGV0ZSBpbWFnZQor
ICAgICAgICAtIFRyeSB0byBsb29rdXAgYW4gaW5jb21wbGV0ZSBpbWFnZSBhbmQgcmVzdW1lIGRl
Y29kaW5nICYgc2NhbGluZworICAgICAgICAtIEV2ZXJ5dGhpbmcgZmFpbHMsIHN0YXJ0IGRlY29k
aW5nIGZyb20gc2NyYXRjaAorICAgICAgICBUaGUgZW50aXJlIHNlcXVlbmNlIG9mIG9wZXJhdGlv
bnMgaW4gdW5kZXIgYSBtdXRleCwgaGVuY2UgdGhlcmUgd2lsbCBiZQorICAgICAgICBubyBtb3Jl
IHRoYW4gMSB1c2VyIG9mIGFuIGluY29tcGxldGUgY2FjaGUgZW50cnkgYXQgdGhlIHNhbWUgdGlt
ZS4KKworICAgICAgICBOZXcgdW5pdCB0ZXN0cyBpbiBJbWFnZURlY29kaW5nU3RvcmVUZXN0IGFu
ZCBJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kaW5nU3RvcmU6OmxvY2tDYWNoZSk6CisgICAgICAgIENoYW5nZSBvZiBtZXRob2QgZGVm
aW5pdGlvbiB0byByZXR1cm4gYW4gaW1hZ2UgYW5kIEltYWdlRGVjb2Rlci4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6dW5sb2NrQ2FjaGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjppbnNlcnRBbmRMb2NrQ2FjaGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpvdmVyd3JpdGVBbmRMb2NrQ2FjaGUpOgorICAgICAg
ICBOZXcgbWV0aG9kIHRvIGFsbG93IGFuIGluY29tcGxldGUgY2FjaGUgZW50cnkgYmUgb3Zlcndy
aXR0ZW4uCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaDoKKyAgICAgICAgKEltYWdlRGVjb2RpbmdTdG9y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OkNhY2hlRW50cnk6OmNy
ZWF0ZUFuZFVzZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OkNhY2hl
RW50cnk6OkNhY2hlRW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3Jl
OjpDYWNoZUVudHJ5OjpjYWNoZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29k
aW5nU3RvcmU6OkNhY2hlRW50cnk6OmNhY2hlZERlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEZWNvZGluZ1N0b3JlOjpDYWNoZUVudHJ5OjpyZWxlYXNlQ2FjaGVkRGVjb2Rlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OkNhY2hlRW50cnk6Om92ZXJ3cml0
ZUNhY2hlZEltYWdlKToKKyAgICAgICAgTmV3IG1ldGhvZCB0byBhbGxvdyBhbiBpbmNvbXBsZXRl
IGltYWdlIGJlIG92ZXJ3aXR0ZW4uCisgICAgICAgIChDYWNoZUVudHJ5KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OkltYWdlRnJhbWVHZW5lcmF0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6ZGVjb2RlQW5kU2NhbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6dHJ5VG9Mb2NrQ29tcGxldGVD
YWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjp0cnlUb1NjYWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OnRyeVRvUmVzdW1lRGVj
b2RlQW5kU2NhbGUpOgorICAgICAgICBOZXcgbWV0aG9kIHRvIGxvb2t1cCBhbiBpbmNvbXBsZXRl
IGNhY2hlIGVudHJ5IGFuZCByZXN1bWUgZGVjb2RpbmcuCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OnRyeVRvRGVjb2RlQW5kU2NhbGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6ZGVjb2Rlcik6CisgICAg
ICAgIE5ldyBoZWxwZXIgbWV0aG9kIHRvIGRvIGRlY29kaW5nIGZvciBhIGZ1bGwgc2l6ZWQgaW1h
Z2UuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpwcmVwYXJlRGF0YSk6
CisgICAgICAgIE5ldyBoZWxwZXIgbWV0aG9kIHRvIHByZXBhcmUgZGF0YSBzYWZlbHkuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oOgor
ICAgICAgICAoSW1hZ2VGcmFtZUdlbmVyYXRvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uTG9ja1BpeGVscyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vU2NhbGVkSW1hZ2VGcmFnbWVudC5oOgorICAgICAgICAoV2ViQ29y
ZTo6U2NhbGVkSW1hZ2VGcmFnbWVudDo6c2V0SXNDb21wbGV0ZSk6CisKIDIwMTItMTItMDQgIEVs
bGlvdHQgU3ByZWhuICA8ZXNwcmVobkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQ2xpY2tpbmcg
YSBzY3JvbGxiYXIgdW5mb2N1c2VzIHRoZSBjdXJyZW50IGFjdGl2ZUVsZW1lbnQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKaW5kZXggMTQ3OTQxZWQxNjZiNGViYmMzNTA3MzI1M2MyOWY1MjgxZmU2
ZDgyOC4uMWVhZTI5YzNhYzI1OGEwYWUwNGMxZTU0YWU4NDQ3ZDIzMzczNzAxMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OSBAQAorMjAxMi0xMi0wNCAgQWxwaGEgTGFt
ICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1hZ2VEZWNvZGlu
Z1N0b3JlIHNob3VsZCBjYWNoZSBwYXJ0aWFsbHkgZGVjb2RlZCBpbWFnZXMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzc5NgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHVuaXQgdGVzdHMgdG8g
dmVyaWZ5IGNhY2hpbmcgYmVoYXZpb3IgZm9yIHBhcnRpYWxseSBkZWNvZGVkIGltYWdlcy4KKyAg
ICAgICAgTmV3IHRlc3RzIGFkZGVkOgorICAgICAgICAtIEltYWdlRGVjb2RpbmdTdG9yZVRlc3Qu
aW5zZXJ0SW5jb21wbGV0ZUNhY2hlCisgICAgICAgIEluc2VydCBpbmNvbXBsZXRlIGltYWdlIHdp
dGggYSBkZWNvZGVyIGludG8gY2FjaGUuCisKKyAgICAgICAgLSBJbWFnZURlY29kaW5nU3RvcmVU
ZXN0Lmluc2VydENvbXBsZXRlQ2FjaGVXaXRoRGVjb2RlcgorICAgICAgICBJbnNlcnQgY29tcGxl
dGUgaW1hZ2Ugd2l0aCBhIGRlY29kZXIsIGRlY29kZXIgaXMgZGVsZXRlZC4KKworICAgICAgICAt
IEltYWdlRGVjb2RpbmdTdG9yZVRlc3QuaW5jb21wbGV0ZUNhY2hlQmVjb21lc0NvbXBsZXRlCisg
ICAgICAgIFByb2dyZXNzaXZlIGRvd25sb2FkaW5nIG9mIGEgZmlsZS4gSW1hZ2UgYmVjb21lcyBj
b21wbGV0ZSwgZGVjb2RlciBkZWxldGVkLgorCisgICAgICAgIC0gSW1hZ2VGcmFtZUdlbmVyYXRv
clRlc3QuY2FjaGVNaXNzV2l0aEluY29tcGxldGVEZWNvZGVBbmRTY2FsZQorICAgICAgICBDYWNo
ZSBsb29rdXAgZmFpbGVkIGFuZCBzdGFydCBhIGRlY29kaW5nIHRoYXQgZGVjb2RlZCBhbiBpbmNv
bXBsZXRlIGltYWdlLgorCisgICAgICAgIEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LmluY29tcGxl
dGVEZWNvZGVCZWNvbWVzQ29tcGxldGUKKyAgICAgICAgSW1hZ2UgZGVjb2RlZCBhcyBpbmNvbXBs
ZXRlLCBmaWxlIGZ1bGx5IGRvd25sb2FkZWQgYW5kIGNhY2hlIGVudHJ5IGJlY29tZXMgY29tcGxl
dGUuCisKKyAgICAgICAgSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QuaW5jb21wbGV0ZURlY29kZUFu
ZFNjYWxlQmVjb21lc0NvbXBsZXRlCisgICAgICAgIEltYWdlIGRlY29kZWQgYW5kIHNjYWxlZCBh
cyBpbmNvbXBsZXRlLCBiZWNvbWVzIGNvbXBsZXRlIGFmdGVyIGZpbGUgaXMgZnVsbHkgZG93bG9h
ZGVkLgorCisgICAgICAgIEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LmluY29tcGxldGVEZWNvZGVC
ZWNvbWVzQ29tcGxldGVNdWx0aVRocmVhZGVkCisgICAgICAgIFRyYW5zaXRpb24gZnJvbSBpbmNv
bXBsZXRlIHRvIGNvbXBsZXRlLCBlbnRpcmUgbGlmZWN5Y2xlIGhhcHBlbnMgb24gMiB0aHJlYWRz
LgorCisgICAgICAgICogdGVzdHMvRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdDo6U2V0VXApOgorICAgICAgICAq
IHRlc3RzL0ltYWdlRGVjb2RpbmdTdG9yZVRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VEZWNvZGluZ1N0b3JlVGVzdDo6U2V0VXApOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGluZ1N0b3JlVGVzdDo6ZGVjb2RlckJlaW5nRGVzdHJveWVkKToKKyAgICAgICAgKEltYWdlRGVj
b2RpbmdTdG9yZVRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlVGVz
dDo6ZnJhbWVCdWZmZXJSZXF1ZXN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGlu
Z1N0b3JlVGVzdDo6ZnJhbWVTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGlu
Z1N0b3JlVGVzdDo6Y3JlYXRlSW5jb21wbGV0ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2RpbmdTdG9yZVRlc3Q6OmxvY2tDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpURVNU
X0YpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogdGVzdHMvSW1hZ2VGcmFtZUdlbmVy
YXRvclRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvclRlc3Q6
OlNldFVwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3JUZXN0OjpkZWNv
ZGVyQmVpbmdEZXN0cm95ZWQpOgorICAgICAgICAoSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TW9ja0ltYWdlRGVjb2RlckZhY3Rvcnk6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpURVNUX0YpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpkZWNvZGVUaHJlYWRNYWluKToKKyAgICAgICAgKiB0ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVy
Lmg6CisgICAgICAgIChXZWJDb3JlOjpNb2NrSW1hZ2VEZWNvZGVyOjpjcmVhdGUpOgorICAgICAg
ICAoTW9ja0ltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpNb2NrSW1hZ2VEZWNvZGVy
OjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tJbWFnZURlY29kZXI6OmZyYW1lQnVm
ZmVyQXRJbmRleCk6CisKIDIwMTItMTItMDQgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFtWOF0gUmVtb3ZlIHRvVjhPYmplY3QoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0
b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdl
RGVjb2RpbmdTdG9yZS5jcHAKaW5kZXggNmI2MTc1MzAyN2RjYmU0YTI5OTM4NjJiNjBkYTRjYTc5
ZTNkMGY3Ny4uNDc3NjIwMGQxM2RmMzMzMDQ5ZmRjMWUzZmRjZjY0ZjIyYzdlYWU1MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNv
ZGluZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwCkBAIC03NywzOSArNzcsMzggQEAgdm9pZCBJbWFn
ZURlY29kaW5nU3RvcmU6OnNodXRkb3duKCkKICAgICBzZXRJbnN0YW5jZSgwKTsKIH0KIAotY29u
c3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb2NrQ29tcGxldGVD
YWNoZShjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiBnZW5lcmF0b3IsIGNvbnN0IFNrSVNpemUm
IHNjYWxlZFNpemUpCitib29sIEltYWdlRGVjb2RpbmdTdG9yZTo6bG9ja0NhY2hlKGNvbnN0IElt
YWdlRnJhbWVHZW5lcmF0b3IqIGdlbmVyYXRvciwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwg
Ym9vbCBjYWNoZU11c3RCZUNvbXBsZXRlLCBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiogY2Fj
aGVkSW1hZ2UsIEltYWdlRGVjb2RlcioqIGRlY29kZXIpCiB7CiAgICAgQ2FjaGVFbnRyeSogY2Fj
aGVFbnRyeSA9IDA7CiAgICAgewogICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOwog
ICAgICAgICBDYWNoZU1hcDo6aXRlcmF0b3IgaXRlciA9IG1fY2FjaGVNYXAuZmluZChzdGQ6Om1h
a2VfcGFpcihnZW5lcmF0b3IsIHNjYWxlZFNpemUpKTsKICAgICAgICAgaWYgKGl0ZXIgPT0gbV9j
YWNoZU1hcC5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBjYWNoZUVudHJ5ID0gaXRlci0+dmFsdWUuZ2V0KCk7Ci0gICAgICAg
IGlmICghY2FjaGVFbnRyeS0+Y2FjaGVkSW1hZ2UoKS0+aXNDb21wbGV0ZSgpKQotICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIGlmIChjYWNoZU11c3RCZUNvbXBsZXRlICYmICFjYWNoZUVu
dHJ5LT5jYWNoZWRJbWFnZSgpLT5pc0NvbXBsZXRlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgLy8gSW5jb21wbGV0ZSBjYWNoZSBlbnRyeSBjYW5ub3QgYmUgdXNlZCBt
b3JlIHRoYW4gb25jZS4KKyAgICAgICAgQVNTRVJUKGNhY2hlRW50cnktPmNhY2hlZEltYWdlKCkt
PmlzQ29tcGxldGUoKSB8fCAhY2FjaGVFbnRyeS0+dXNlQ291bnQoKSk7CiAKICAgICAgICAgLy8g
SW5jcmVtZW50IHVzZSBjb3VudCBzdWNoIHRoYXQgaXQgZG9lc24ndCBnZXQgZXZpY3RlZC4KICAg
ICAgICAgY2FjaGVFbnRyeS0+aW5jcmVtZW50VXNlQ291bnQoKTsKICAgICB9Ci0gICAgY2FjaGVF
bnRyeS0+Y2FjaGVkSW1hZ2UoKS0+Yml0bWFwKCkubG9ja1BpeGVscygpOwotICAgIHJldHVybiBj
YWNoZUVudHJ5LT5jYWNoZWRJbWFnZSgpOwotfQogCi1jb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50
KiBJbWFnZURlY29kaW5nU3RvcmU6OmxvY2tJbmNvbXBsZXRlQ2FjaGUoY29uc3QgSW1hZ2VGcmFt
ZUdlbmVyYXRvciogZ2VuZXJhdG9yLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKQotewotICAg
IC8vIFRPRE86IEltcGxlbWVudC4KLSAgICByZXR1cm4gMDsKKyAgICAvLyBDb21wbGV0ZSBjYWNo
ZSBlbnRyeSBkb2Vzbid0IGhhdmUgYSBkZWNvZGVyLgorICAgIEFTU0VSVCghY2FjaGVFbnRyeS0+
Y2FjaGVkSW1hZ2UoKS0+aXNDb21wbGV0ZSgpIHx8ICFjYWNoZUVudHJ5LT5jYWNoZWREZWNvZGVy
KCkpOworCisgICAgaWYgKGRlY29kZXIpCisgICAgICAgICpkZWNvZGVyID0gY2FjaGVFbnRyeS0+
Y2FjaGVkRGVjb2RlcigpOworICAgICpjYWNoZWRJbWFnZSA9IGNhY2hlRW50cnktPmNhY2hlZElt
YWdlKCk7CisgICAgKCpjYWNoZWRJbWFnZSktPmJpdG1hcCgpLmxvY2tQaXhlbHMoKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OnVubG9ja0NhY2hlKGNv
bnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqIGdlbmVyYXRvciwgY29uc3QgU2NhbGVkSW1hZ2VGcmFn
bWVudCogY2FjaGVkSW1hZ2UpCiB7CiAgICAgY2FjaGVkSW1hZ2UtPmJpdG1hcCgpLnVubG9ja1Bp
eGVscygpOwotICAgIGlmICghY2FjaGVkSW1hZ2UtPmlzQ29tcGxldGUoKSkgewotICAgICAgICAv
LyBEZWxldGUgdGhlIGltYWdlIGlmIGl0IGlzIGluY29tcGxldGUuIEl0IHdhcyBuZXZlciBzdG9y
ZWQgaW4gY2FjaGUuCi0gICAgICAgIGRlbGV0ZSBjYWNoZWRJbWFnZTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KIAogICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CiAgICAgQ2FjaGVNYXA6
Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhY2hlTWFwLmZpbmQoc3RkOjptYWtlX3BhaXIoZ2VuZXJhdG9y
LCBjYWNoZWRJbWFnZS0+c2NhbGVkU2l6ZSgpKSk7CkBAIC0xMjMsNyArMTIyLDcgQEAgdm9pZCBJ
bWFnZURlY29kaW5nU3RvcmU6OnVubG9ja0NhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3Iq
IGdlbmVyYXRvciwgY29uc3QKICAgICBtX29yZGVyZWRDYWNoZUxpc3QuYXBwZW5kKGNhY2hlRW50
cnkpOwogfQogCi1jb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFnZURlY29kaW5nU3RvcmU6
Omluc2VydEFuZExvY2tDYWNoZShjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiBnZW5lcmF0b3Is
IFBhc3NPd25QdHI8U2NhbGVkSW1hZ2VGcmFnbWVudD4gaW1hZ2UpCitjb25zdCBTY2FsZWRJbWFn
ZUZyYWdtZW50KiBJbWFnZURlY29kaW5nU3RvcmU6Omluc2VydEFuZExvY2tDYWNoZShjb25zdCBJ
bWFnZUZyYW1lR2VuZXJhdG9yKiBnZW5lcmF0b3IsIFBhc3NPd25QdHI8U2NhbGVkSW1hZ2VGcmFn
bWVudD4gaW1hZ2UsIFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBkZWNvZGVyKQogewogICAgIC8v
IFBydW5lIG9sZCBjYWNoZSBlbnRyaWVzIHRvIGdpdmUgc3BhY2UgZm9yIHRoZSBuZXcgb25lLgog
ICAgIHBydW5lKCk7CkBAIC0xMzEsMTYgKzEzMCwxNCBAQCBjb25zdCBTY2FsZWRJbWFnZUZyYWdt
ZW50KiBJbWFnZURlY29kaW5nU3RvcmU6Omluc2VydEFuZExvY2tDYWNoZShjb25zdCBJbWFnZUZy
YQogICAgIC8vIExvY2sgdGhlIHVuZGVybHlpbmcgU2tCaXRtYXAgdG8gcHJldmVudCBpdCBmcm9t
IGJlaW5nIHB1cmdlZC4KICAgICBpbWFnZS0+Yml0bWFwKCkubG9ja1BpeGVscygpOwogCi0gICAg
aWYgKCFpbWFnZS0+aXNDb21wbGV0ZSgpKSB7Ci0gICAgICAgIC8vIEluY29tcGxldGUgaW1hZ2Ug
aXMgbm90IHN0b3JlZCBpbiB0aGUgY2FjaGUgYW5kIGRlbGV0ZWQgYWZ0ZXIgdXNlLgotICAgICAg
ICAvLyBTZWUgdW5sb2NrQ2FjaGUoKS4KLSAgICAgICAgLy8gVE9ETzogV2Ugc2hvdWxkIGFsbG93
IGluY29tcGxldGUgaW1hZ2VzIHRvIGJlIHN0b3JlZCB0b2dldGhlciB3aXRoCi0gICAgICAgIC8v
IHRoZSBjb3JyZXNwb25kaW5nIEltYWdlRGVjb2Rlci4KLSAgICAgICAgcmV0dXJuIGltYWdlLmxl
YWtQdHIoKTsKLSAgICB9Ci0KICAgICBTY2FsZWRJbWFnZUZyYWdtZW50KiBjYWNoZWRJbWFnZSA9
IGltYWdlLmdldCgpOwotICAgIE93blB0cjxDYWNoZUVudHJ5PiBuZXdDYWNoZUVudHJ5ID0gQ2Fj
aGVFbnRyeTo6Y3JlYXRlQW5kVXNlKGdlbmVyYXRvciwgaW1hZ2UpOworICAgIE93blB0cjxDYWNo
ZUVudHJ5PiBuZXdDYWNoZUVudHJ5OworCisgICAgLy8gSW1hZ2VEZWNvZGVyIGlzIG5vdCB1c2Vk
IGFueSBtb3JlIGlmIGNhY2hlIGlzIGNvbXBsZXRlLgorICAgIGlmIChpbWFnZS0+aXNDb21wbGV0
ZSgpKQorICAgICAgICBuZXdDYWNoZUVudHJ5ID0gQ2FjaGVFbnRyeTo6Y3JlYXRlQW5kVXNlKGdl
bmVyYXRvciwgaW1hZ2UpOworICAgIGVsc2UKKyAgICAgICAgbmV3Q2FjaGVFbnRyeSA9IENhY2hl
RW50cnk6OmNyZWF0ZUFuZFVzZShnZW5lcmF0b3IsIGltYWdlLCBkZWNvZGVyKTsKIAogICAgIE11
dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CiAgICAgQVNTRVJUKCFtX2NhY2hlTWFwLmNvbnRhaW5z
KG5ld0NhY2hlRW50cnktPmNhY2hlS2V5KCkpKTsKQEAgLTE0OCw2ICsxNDUsMzQgQEAgY29uc3Qg
U2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnNlcnRBbmRMb2NrQ2Fj
aGUoY29uc3QgSW1hZ2VGcmEKICAgICByZXR1cm4gY2FjaGVkSW1hZ2U7CiB9CiAKK2NvbnN0IFNj
YWxlZEltYWdlRnJhZ21lbnQqIEltYWdlRGVjb2RpbmdTdG9yZTo6b3ZlcndyaXRlQW5kTG9ja0Nh
Y2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqIGdlbmVyYXRvciwgY29uc3QgU2NhbGVkSW1h
Z2VGcmFnbWVudCogY2FjaGVkSW1hZ2UsIFBhc3NPd25QdHI8U2NhbGVkSW1hZ2VGcmFnbWVudD4g
bmV3SW1hZ2UpCit7CisgICAgY2FjaGVkSW1hZ2UtPmJpdG1hcCgpLnVubG9ja1BpeGVscygpOwor
CisgICAgT3duUHRyPEltYWdlRGVjb2Rlcj4gdHJhc2g7CisgICAgY29uc3QgU2NhbGVkSW1hZ2VG
cmFnbWVudCogbmV3Q2FjaGVkSW1hZ2UgPSAwOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIg
bG9jayhtX211dGV4KTsKKyAgICAgICAgQ2FjaGVNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhY2hl
TWFwLmZpbmQoc3RkOjptYWtlX3BhaXIoZ2VuZXJhdG9yLCBjYWNoZWRJbWFnZS0+c2NhbGVkU2l6
ZSgpKSk7CisgICAgICAgIEFTU0VSVChpdGVyICE9IG1fY2FjaGVNYXAuZW5kKCkpOworCisgICAg
ICAgIENhY2hlRW50cnkqIGNhY2hlRW50cnkgPSBpdGVyLT52YWx1ZS5nZXQoKTsKKyAgICAgICAg
QVNTRVJUKGNhY2hlRW50cnktPnVzZUNvdW50KCkgPT0gMSk7CisgICAgICAgIEFTU0VSVCghY2Fj
aGVFbnRyeS0+Y2FjaGVkSW1hZ2UoKS0+aXNDb21wbGV0ZSgpKTsKKworICAgICAgICBjYWNoZUVu
dHJ5LT5vdmVyd3JpdGVDYWNoZWRJbWFnZShuZXdJbWFnZSk7CisgICAgICAgIG5ld0NhY2hlZElt
YWdlID0gY2FjaGVFbnRyeS0+Y2FjaGVkSW1hZ2UoKTsKKworICAgICAgICAvLyBJbWFnZSBpcyBj
b21wbGV0ZSB0aGVuIGRlY29kZXIgaXMgbm90IG5lZWRlZC4KKyAgICAgICAgaWYgKGNhY2hlRW50
cnktPmNhY2hlZEltYWdlKCktPmlzQ29tcGxldGUoKSkKKyAgICAgICAgICAgIHRyYXNoID0gY2Fj
aGVFbnRyeS0+cmVsZWFzZUNhY2hlZERlY29kZXIoKTsKKyAgICB9CisKKyAgICAvLyBMb2NrIHRo
ZSB1bmRlcmx5aW5nIFNrQml0bWFwIHRvIHByZXZlbnQgaXQgZnJvbSBiZWluZyBwdXJnZWQuCisg
ICAgbmV3Q2FjaGVkSW1hZ2UtPmJpdG1hcCgpLmxvY2tQaXhlbHMoKTsKKyAgICByZXR1cm4gbmV3
Q2FjaGVkSW1hZ2U7Cit9CisKIHZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjpyZW1vdmVDYWNoZUlu
ZGV4ZWRCeUdlbmVyYXRvcihjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiBnZW5lcmF0b3IpCiB7
CiAgICAgVmVjdG9yPE93blB0cjxDYWNoZUVudHJ5PiA+IGNhY2hlRW50cmllc1RvRGVsZXRlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VEZWNvZGluZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaAppbmRleCA2YWYwYzg1Njg4OTA4YzkzOGExMDdmNzNk
ZTk2Nzk1OGM0YTFjMzgzLi44ZjVjOWRlYjZlMWVhMGZhZGZlMTAwZjVjYTJhODM3MGZhMzZlMzRi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZURlY29kaW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaApAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRl
ZiBJbWFnZURlY29kaW5nU3RvcmVfaAogI2RlZmluZSBJbWFnZURlY29kaW5nU3RvcmVfaAogCisj
aW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiU2NhbGVkSW1hZ2VGcmFnbWVudC5o
IgogI2luY2x1ZGUgIlNrVHlwZXMuaCIKICNpbmNsdWRlICJTa1NpemUuaCIKQEAgLTQwLDcgKzQx
LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJbWFnZURlY29kZXI7CiBjbGFz
cyBJbWFnZUZyYW1lR2VuZXJhdG9yOwogY2xhc3MgU2hhcmVkQnVmZmVyOwogCkBAIC01MywxMCAr
NTMsMTQgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVPbmNlKCk7CiAgICAg
c3RhdGljIHZvaWQgc2h1dGRvd24oKTsKIAotICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQq
IGxvY2tDb21wbGV0ZUNhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqLCBjb25zdCBTa0lT
aXplJiBzY2FsZWRTaXplKTsKLSAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBsb2NrSW5j
b21wbGV0ZUNhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqLCBjb25zdCBTa0lTaXplJiBz
Y2FsZWRTaXplKTsKKyAgICAvLyBJZiBjYWNoZU11c3RCZUNvbXBsZXRlIGlzIHRydWUgdGhlbiBv
bmx5IHJldHVybiBhIGNvbXBsZXRlIGNhY2hlLgorICAgIGJvb2wgbG9ja0NhY2hlKGNvbnN0IElt
YWdlRnJhbWVHZW5lcmF0b3IqLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBib29sIGNhY2hl
TXVzdEJlQ29tcGxldGUsIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqKiwgSW1hZ2VEZWNvZGVy
KiogPSAwKTsKICAgICB2b2lkIHVubG9ja0NhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3Iq
LCBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50Kik7Ci0gICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFn
bWVudCogaW5zZXJ0QW5kTG9ja0NhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqLCBQYXNz
T3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+KTsKKyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdt
ZW50KiBpbnNlcnRBbmRMb2NrQ2FjaGUoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciosIFBhc3NP
d25QdHI8U2NhbGVkSW1hZ2VGcmFnbWVudD4sIFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiA9IG51
bGxwdHIpOworCisgICAgLy8gT3ZlcndyaXRlIGFuIGV4aXN0aW5nIGNhY2hlZCBpbWFnZS4gSXQg
aXMgdW5sb2NrZWQgYW5kIHRoZW4gcmVwbGFjZWQgd2l0aCB0aGUgbmV3IGltYWdlLgorICAgIC8v
IFRoZSBleGlzdGluZyBjYWNoZWQgaW1hZ2UgbXVzdCBiZSBhbHJlYWR5IGxvY2tlZCBhbmQgaW5j
b21wbGV0ZS4KKyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBvdmVyd3JpdGVBbmRMb2Nr
Q2FjaGUoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciosIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21l
bnQqLCBQYXNzT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+KTsKIAogICAgIC8vIFJlbW92ZSBh
bGwgY2FjaGUgZW50cmllcyBpbmRleGVkIGJ5IEltYWdlRnJhbWVHZW5lcmF0b3IuCiAgICAgdm9p
ZCByZW1vdmVDYWNoZUluZGV4ZWRCeUdlbmVyYXRvcihjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9y
Kik7CkBAIC03MSwxNiArNzUsMTcgQEAgcHJpdmF0ZToKICAgICBjbGFzcyBDYWNoZUVudHJ5IDog
cHVibGljIERvdWJseUxpbmtlZExpc3ROb2RlPENhY2hlRW50cnk+IHsKICAgICAgICAgZnJpZW5k
IGNsYXNzIFdURjo6RG91Ymx5TGlua2VkTGlzdE5vZGU8Q2FjaGVFbnRyeT47CiAgICAgcHVibGlj
OgotICAgICAgICBzdGF0aWMgUGFzc093blB0cjxDYWNoZUVudHJ5PiBjcmVhdGVBbmRVc2UoY29u
c3QgSW1hZ2VGcmFtZUdlbmVyYXRvciogZ2VuZXJhdG9yLCBQYXNzT3duUHRyPFNjYWxlZEltYWdl
RnJhZ21lbnQ+IGltYWdlKQorICAgICAgICBzdGF0aWMgUGFzc093blB0cjxDYWNoZUVudHJ5PiBj
cmVhdGVBbmRVc2UoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciogZ2VuZXJhdG9yLCBQYXNzT3du
UHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IGltYWdlLCBQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4g
ZGVjb2RlciA9IG51bGxwdHIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFB0
cihuZXcgQ2FjaGVFbnRyeShnZW5lcmF0b3IsIGltYWdlLCAxKSk7CisgICAgICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IENhY2hlRW50cnkoZ2VuZXJhdG9yLCBpbWFnZSwgZGVjb2RlciwgMSkp
OwogICAgICAgICB9CiAKLSAgICAgICAgQ2FjaGVFbnRyeShjb25zdCBJbWFnZUZyYW1lR2VuZXJh
dG9yKiBnZW5lcmF0b3IsIFBhc3NPd25QdHI8U2NhbGVkSW1hZ2VGcmFnbWVudD4gaW1hZ2UsIGlu
dCBjb3VudCkKKyAgICAgICAgQ2FjaGVFbnRyeShjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiBn
ZW5lcmF0b3IsIFBhc3NPd25QdHI8U2NhbGVkSW1hZ2VGcmFnbWVudD4gaW1hZ2UsIFBhc3NPd25Q
dHI8SW1hZ2VEZWNvZGVyPiBkZWNvZGVyLCBpbnQgY291bnQpCiAgICAgICAgICAgICA6IG1fcHJl
digwKQogICAgICAgICAgICAgLCBtX25leHQoMCkKICAgICAgICAgICAgICwgbV9nZW5lcmF0b3Io
Z2VuZXJhdG9yKQogICAgICAgICAgICAgLCBtX2NhY2hlZEltYWdlKGltYWdlKQorICAgICAgICAg
ICAgLCBtX2NhY2hlZERlY29kZXIoZGVjb2RlcikKICAgICAgICAgICAgICwgbV91c2VDb3VudChj
b3VudCkKICAgICAgICAgewogICAgICAgICB9CkBAIC05Miw2ICs5NywxMCBAQCBwcml2YXRlOgog
CiAgICAgICAgIENhY2hlSWRlbnRpZmllciBjYWNoZUtleSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6
bWFrZV9wYWlyKG1fZ2VuZXJhdG9yLCBtX2NhY2hlZEltYWdlLT5zY2FsZWRTaXplKCkpOyB9CiAg
ICAgICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGNhY2hlZEltYWdlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jYWNoZWRJbWFnZS5nZXQoKTsgfQorICAgICAgICBTY2FsZWRJbWFnZUZyYWdtZW50
KiBjYWNoZWRJbWFnZSgpIHsgcmV0dXJuIG1fY2FjaGVkSW1hZ2UuZ2V0KCk7IH0KKyAgICAgICAg
SW1hZ2VEZWNvZGVyKiBjYWNoZWREZWNvZGVyKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWREZWNv
ZGVyLmdldCgpOyB9CisgICAgICAgIFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiByZWxlYXNlQ2Fj
aGVkRGVjb2RlcigpIHsgcmV0dXJuIG1fY2FjaGVkRGVjb2Rlci5yZWxlYXNlKCk7IH0KKyAgICAg
ICAgdm9pZCBvdmVyd3JpdGVDYWNoZWRJbWFnZShQYXNzT3duUHRyPFNjYWxlZEltYWdlRnJhZ21l
bnQ+IGltYWdlKSB7IG1fY2FjaGVkSW1hZ2UgPSBpbWFnZTsgfQogICAgICAgICBpbnQgdXNlQ291
bnQoKSBjb25zdCB7IHJldHVybiBtX3VzZUNvdW50OyB9CiAgICAgICAgIHZvaWQgaW5jcmVtZW50
VXNlQ291bnQoKSB7ICsrbV91c2VDb3VudDsgfQogICAgICAgICB2b2lkIGRlY3JlbWVudFVzZUNv
dW50KCkgeyAtLW1fdXNlQ291bnQ7IEFTU0VSVChtX3VzZUNvdW50ID49IDApOyB9CkBAIC0xMDUs
NiArMTE0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgQ2FjaGVFbnRyeSogbV9uZXh0OwogICAgICAg
ICBjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiBtX2dlbmVyYXRvcjsKICAgICAgICAgT3duUHRy
PFNjYWxlZEltYWdlRnJhZ21lbnQ+IG1fY2FjaGVkSW1hZ2U7CisgICAgICAgIE93blB0cjxJbWFn
ZURlY29kZXI+IG1fY2FjaGVkRGVjb2RlcjsKICAgICAgICAgaW50IG1fdXNlQ291bnQ7CiAgICAg
fTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcAppbmRleCBlZjg1MDU1YzRkYzIz
YTRkNjAwZjM5MDhjOWYwNTM5MWZhOWM0OWE0Li42MDM2Y2MxZTdkMGNkOGNlMWY1ZmZjNzA2N2I5
OGUzODFkMTk5N2Y4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcApAQCAtNDgs
NiArNDgsNyBAQCBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJlc2l6ZU1ldGhvZCByZXNpemVNZXRo
b2QoKQogSW1hZ2VGcmFtZUdlbmVyYXRvcjo6SW1hZ2VGcmFtZUdlbmVyYXRvcihjb25zdCBTa0lT
aXplJiBmdWxsU2l6ZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0
YVJlY2VpdmVkKQogICAgIDogbV9mdWxsU2l6ZShmdWxsU2l6ZSkKICAgICAsIG1fYWxsRGF0YVJl
Y2VpdmVkKGZhbHNlKQorICAgICwgbV9kZWNvZGVGYWlsZWRBbmRFbXB0eShmYWxzZSkKIHsKICAg
ICBzZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CiB9CkBAIC03Niw5ICs3NywxMiBAQCBj
b25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFnZUZyYW1lR2VuZXJhdG9yOjpkZWNvZGVBbmRT
Y2FsZShjb25zdCBTa0lTaXplJiBzYwogICAgIC8vIFByZXZlbnRzIGNvbmN1cnJlbnQgZGVjb2Rl
IG9yIHNjYWxlIG9wZXJhdGlvbnMgb24gdGhlIHNhbWUgaW1hZ2UgZGF0YS4KICAgICAvLyBNdWx0
aXBsZSBMYXp5RGVjb2RpbmdQaXhlbFJlZnMgY2FuIGNhbGwgdGhpcyBtZXRob2QgYXQgdGhlIHNh
bWUgdGltZS4KICAgICBNdXRleExvY2tlciBsb2NrKG1fZGVjb2RlTXV0ZXgpOworICAgIGlmICht
X2RlY29kZUZhaWxlZEFuZEVtcHR5KQorICAgICAgICByZXR1cm4gMDsKKwogICAgIGNvbnN0IFNj
YWxlZEltYWdlRnJhZ21lbnQqIGNhY2hlZEltYWdlID0gMDsKIAotICAgIGNhY2hlZEltYWdlID0g
dHJ5VG9Mb2NrQ2FjaGUoc2NhbGVkU2l6ZSk7CisgICAgY2FjaGVkSW1hZ2UgPSB0cnlUb0xvY2tD
b21wbGV0ZUNhY2hlKHNjYWxlZFNpemUpOwogICAgIGlmIChjYWNoZWRJbWFnZSkKICAgICAgICAg
cmV0dXJuIGNhY2hlZEltYWdlOwogCkBAIC04NiwxNSArOTAsMjIgQEAgY29uc3QgU2NhbGVkSW1h
Z2VGcmFnbWVudCogSW1hZ2VGcmFtZUdlbmVyYXRvcjo6ZGVjb2RlQW5kU2NhbGUoY29uc3QgU2tJ
U2l6ZSYgc2MKICAgICBpZiAoY2FjaGVkSW1hZ2UpCiAgICAgICAgIHJldHVybiBjYWNoZWRJbWFn
ZTsKIAorICAgIGNhY2hlZEltYWdlID0gdHJ5VG9SZXN1bWVEZWNvZGVBbmRTY2FsZShzY2FsZWRT
aXplKTsKKyAgICBpZiAoY2FjaGVkSW1hZ2UpCisgICAgICAgIHJldHVybiBjYWNoZWRJbWFnZTsK
KwogICAgIGNhY2hlZEltYWdlID0gdHJ5VG9EZWNvZGVBbmRTY2FsZShzY2FsZWRTaXplKTsKICAg
ICBpZiAoY2FjaGVkSW1hZ2UpCiAgICAgICAgIHJldHVybiBjYWNoZWRJbWFnZTsKICAgICByZXR1
cm4gMDsKIH0KIAotY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VGcmFtZUdlbmVyYXRv
cjo6dHJ5VG9Mb2NrQ2FjaGUoY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkKK2NvbnN0IFNjYWxl
ZEltYWdlRnJhZ21lbnQqIEltYWdlRnJhbWVHZW5lcmF0b3I6OnRyeVRvTG9ja0NvbXBsZXRlQ2Fj
aGUoY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkKIHsKLSAgICByZXR1cm4gSW1hZ2VEZWNvZGlu
Z1N0b3JlOjppbnN0YW5jZSgpLT5sb2NrQ29tcGxldGVDYWNoZSh0aGlzLCBzY2FsZWRTaXplKTsK
KyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBjYWNoZWRJbWFnZSA9IDA7CisgICAgaWYg
KEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+bG9ja0NhY2hlKHRoaXMsIHNjYWxlZFNp
emUsIHRydWUsICZjYWNoZWRJbWFnZSkpCisgICAgICAgIHJldHVybiBjYWNoZWRJbWFnZTsKKyAg
ICByZXR1cm4gMDsKIH0KIAogY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VGcmFtZUdl
bmVyYXRvcjo6dHJ5VG9TY2FsZShjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBmdWxsU2l6ZUlt
YWdlLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKQpAQCAtMTA0LDEwICsxMTUsNyBAQCBjb25z
dCBTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFnZUZyYW1lR2VuZXJhdG9yOjp0cnlUb1NjYWxlKGNv
bnN0IFNjYWxlZEltYWdlRnJhZwogICAgIGlmIChzY2FsZWRTaXplID09IG1fZnVsbFNpemUpCiAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKCFmdWxsU2l6ZUltYWdlKQotICAgICAgICBmdWxs
U2l6ZUltYWdlID0gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5sb2NrQ29tcGxldGVD
YWNoZSh0aGlzLCBtX2Z1bGxTaXplKTsKLQotICAgIGlmICghZnVsbFNpemVJbWFnZSkKKyAgICBp
ZiAoIWZ1bGxTaXplSW1hZ2UgJiYgIUltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+bG9j
a0NhY2hlKHRoaXMsIG1fZnVsbFNpemUsIHRydWUsICZmdWxsU2l6ZUltYWdlKSkKICAgICAgICAg
cmV0dXJuIDA7CiAKICAgICBTa0JpdG1hcCBzY2FsZWRCaXRtYXAgPSBza2lhOjpJbWFnZU9wZXJh
dGlvbnM6OlJlc2l6ZSgKQEAgLTExNSw0MiArMTIzLDk4IEBAIGNvbnN0IFNjYWxlZEltYWdlRnJh
Z21lbnQqIEltYWdlRnJhbWVHZW5lcmF0b3I6OnRyeVRvU2NhbGUoY29uc3QgU2NhbGVkSW1hZ2VG
cmFnCiAgICAgT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IHNjYWxlZEltYWdlID0gU2NhbGVk
SW1hZ2VGcmFnbWVudDo6Y3JlYXRlKHNjYWxlZFNpemUsIHNjYWxlZEJpdG1hcCwgZnVsbFNpemVJ
bWFnZS0+aXNDb21wbGV0ZSgpKTsKIAogICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2Uo
KS0+dW5sb2NrQ2FjaGUodGhpcywgZnVsbFNpemVJbWFnZSk7CisKKyAgICBjb25zdCBTY2FsZWRJ
bWFnZUZyYWdtZW50KiBjYWNoZWRJbWFnZSA9IDA7CisKKyAgICAvLyBJZiBhIGNhY2hlIGxvb2t1
cCBpcyBzdWNjZXNzZnVsIHRoZW4gdGhlIGNhY2hlIGVudHJ5IG11c3QgYmUgaW5jb21wbGV0ZQor
ICAgIC8vIHRoZXJlZm9yZSBpdCBpcyBzYWZlIHRvIG92ZXJ3cml0ZS4KKyAgICBpZiAoSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5sb2NrQ2FjaGUodGhpcywgc2NhbGVkU2l6ZSwgZmFs
c2UsICZjYWNoZWRJbWFnZSkpCisgICAgICAgIHJldHVybiBJbWFnZURlY29kaW5nU3RvcmU6Omlu
c3RhbmNlKCktPm92ZXJ3cml0ZUFuZExvY2tDYWNoZSh0aGlzLCBjYWNoZWRJbWFnZSwgc2NhbGVk
SW1hZ2UucmVsZWFzZSgpKTsKICAgICByZXR1cm4gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5j
ZSgpLT5pbnNlcnRBbmRMb2NrQ2FjaGUodGhpcywgc2NhbGVkSW1hZ2UucmVsZWFzZSgpKTsKIH0K
IAorY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VGcmFtZUdlbmVyYXRvcjo6dHJ5VG9S
ZXN1bWVEZWNvZGVBbmRTY2FsZShjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKQoreworICAgIGNv
bnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGNhY2hlZEltYWdlID0gMDsKKyAgICBJbWFnZURlY29k
ZXIqIGNhY2hlZERlY29kZXIgPSAwOworICAgIGlmICghSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0
YW5jZSgpLT5sb2NrQ2FjaGUodGhpcywgbV9mdWxsU2l6ZSwgZmFsc2UsICZjYWNoZWRJbWFnZSwg
JmNhY2hlZERlY29kZXIpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBBU1NFUlQoY2FjaGVkRGVj
b2Rlcik7CisKKyAgICBPd25QdHI8U2NhbGVkSW1hZ2VGcmFnbWVudD4gZnVsbFNpemVJbWFnZSA9
IGRlY29kZSgmY2FjaGVkRGVjb2Rlcik7CisKKyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50
KiBjYWNoZWRGdWxsU2l6ZUltYWdlID0gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5v
dmVyd3JpdGVBbmRMb2NrQ2FjaGUoCisgICAgICAgIHRoaXMsIGNhY2hlZEltYWdlLCBmdWxsU2l6
ZUltYWdlLnJlbGVhc2UoKSk7CisKKyAgICBpZiAobV9mdWxsU2l6ZSA9PSBzY2FsZWRTaXplKQor
ICAgICAgICByZXR1cm4gY2FjaGVkRnVsbFNpemVJbWFnZTsKKyAgICByZXR1cm4gdHJ5VG9TY2Fs
ZShjYWNoZWRGdWxsU2l6ZUltYWdlLCBzY2FsZWRTaXplKTsKK30KKwogY29uc3QgU2NhbGVkSW1h
Z2VGcmFnbWVudCogSW1hZ2VGcmFtZUdlbmVyYXRvcjo6dHJ5VG9EZWNvZGVBbmRTY2FsZShjb25z
dCBTa0lTaXplJiBzY2FsZWRTaXplKQogeworICAgIEltYWdlRGVjb2RlciogZGVjb2RlciA9IDA7
CisgICAgT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IGZ1bGxTaXplSW1hZ2UgPSBkZWNvZGUo
JmRlY29kZXIpOworCisgICAgaWYgKCFkZWNvZGVyKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IE93blB0cjxJbWFnZURlY29kZXI+IGRlY29kZXJDb250YWluZXIgPSBhZG9wdFB0cihkZWNvZGVy
KTsKKworICAgIGlmICghZnVsbFNpemVJbWFnZSkgeworICAgICAgICAvLyBJZiBkZWNvZGUgaGFz
IGZhaWxlZCBhbmQgcmVzdWx0ZWQgYW4gZW1wdHkgaW1hZ2Ugd2UgbmVlZCB0byBtYWtlCisgICAg
ICAgIC8vIHN1cmUgd2UgZG9uJ3QgZG8gd2FzdGVkIHdvcmsgaW4gdGhlIGZ1dHVyZS4KKyAgICAg
ICAgbV9kZWNvZGVGYWlsZWRBbmRFbXB0eSA9IGRlY29kZXJDb250YWluZXItPmZhaWxlZCgpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50
KiBjYWNoZWRGdWxsU2l6ZUltYWdlID0gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5p
bnNlcnRBbmRMb2NrQ2FjaGUoCisgICAgICAgIHRoaXMsIGZ1bGxTaXplSW1hZ2UucmVsZWFzZSgp
LCBkZWNvZGVyQ29udGFpbmVyLnJlbGVhc2UoKSk7CisKKyAgICBpZiAobV9mdWxsU2l6ZSA9PSBz
Y2FsZWRTaXplKQorICAgICAgICByZXR1cm4gY2FjaGVkRnVsbFNpemVJbWFnZTsKKyAgICByZXR1
cm4gdHJ5VG9TY2FsZShjYWNoZWRGdWxsU2l6ZUltYWdlLCBzY2FsZWRTaXplKTsKK30KKworUGFz
c093blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBJbWFnZUZyYW1lR2VuZXJhdG9yOjpkZWNvZGUo
SW1hZ2VEZWNvZGVyKiogZGVjb2RlcikKK3sKKyAgICBBU1NFUlQoZGVjb2Rlcik7CiAgICAgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YTsKICAgICBib29sIGFsbERhdGFSZWNlaXZlZCA9IGZhbHNl
OwotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2RhdGFNdXRleCk7CisgICAgcHJl
cGFyZURhdGEoJmRhdGEsICZhbGxEYXRhUmVjZWl2ZWQpOworCisgICAgLy8gVHJ5IHRvIGNyZWF0
ZSBhbiBJbWFnZURlY29kZXIgaWYgd2UgYXJlIG5vdCBnaXZlbiBvbmUuCisgICAgaWYgKCEqZGVj
b2RlcikgeworICAgICAgICAqZGVjb2RlciA9IEltYWdlRGVjb2Rlcjo6Y3JlYXRlKCpkYXRhLmdl
dCgpLCBJbWFnZVNvdXJjZTo6QWxwaGFQcmVtdWx0aXBsaWVkLCBJbWFnZVNvdXJjZTo6R2FtbWFB
bmRDb2xvclByb2ZpbGVBcHBsaWVkKTsKKworICAgICAgICBpZiAoISpkZWNvZGVyICYmIG1faW1h
Z2VEZWNvZGVyRmFjdG9yeSkKKyAgICAgICAgICAgICpkZWNvZGVyID0gbV9pbWFnZURlY29kZXJG
YWN0b3J5LT5jcmVhdGUoKS5sZWFrUHRyKCk7CiAKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBkbyBhIHNoYWxsb3cgY29weSBpbnN0ZWFkLiBOb3cgd2UncmUgcmVzdHJpY3RlZCBieSB0aGUg
QVBJIG9mIFNoYXJlZEJ1ZmZlci4KLSAgICAgICAgZGF0YSA9IG1fZGF0YS0+Y29weSgpOwotICAg
ICAgICBhbGxEYXRhUmVjZWl2ZWQgPSBtX2FsbERhdGFSZWNlaXZlZDsKKyAgICAgICAgaWYgKCEq
ZGVjb2RlcikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIE93blB0
cjxJbWFnZURlY29kZXI+IGRlY29kZXIoYWRvcHRQdHIoSW1hZ2VEZWNvZGVyOjpjcmVhdGUoKmRh
dGEuZ2V0KCksIEltYWdlU291cmNlOjpBbHBoYVByZW11bHRpcGxpZWQsIEltYWdlU291cmNlOjpH
YW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpKSk7Ci0gICAgaWYgKCFkZWNvZGVyICYmIG1faW1h
Z2VEZWNvZGVyRmFjdG9yeSkKLSAgICAgICAgZGVjb2RlciA9IG1faW1hZ2VEZWNvZGVyRmFjdG9y
eS0+Y3JlYXRlKCk7Ci0gICAgaWYgKCFkZWNvZGVyKQotICAgICAgICByZXR1cm4gMDsKKyAgICAo
KmRlY29kZXIpLT5zZXREYXRhKGRhdGEuZ2V0KCksIGFsbERhdGFSZWNlaXZlZCk7CisgICAgSW1h
Z2VGcmFtZSogZnJhbWUgPSAoKmRlY29kZXIpLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMCk7CisgICAg
KCpkZWNvZGVyKS0+c2V0RGF0YSgwLCBmYWxzZSk7IC8vIFVucmVmIFNoYXJlZEJ1ZmZlciBmcm9t
IEltYWdlRGVjb2Rlci4KIAotICAgIGRlY29kZXItPnNldERhdGEoZGF0YS5nZXQoKSwgYWxsRGF0
YVJlY2VpdmVkKTsKLSAgICBJbWFnZUZyYW1lKiBmcmFtZSA9IGRlY29kZXItPmZyYW1lQnVmZmVy
QXRJbmRleCgwKTsKICAgICBpZiAoIWZyYW1lIHx8IGZyYW1lLT5zdGF0dXMoKSA9PSBJbWFnZUZy
YW1lOjpGcmFtZUVtcHR5KQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICBib29sIGlzQ29tcGxldGUgPSBmcmFtZS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFt
ZTo6RnJhbWVDb21wbGV0ZTsKICAgICBTa0JpdG1hcCBmdWxsU2l6ZUJpdG1hcCA9IGZyYW1lLT5n
ZXRTa0JpdG1hcCgpOwogICAgIEFTU0VSVChmdWxsU2l6ZUJpdG1hcC53aWR0aCgpID09IG1fZnVs
bFNpemUud2lkdGgoKSAmJiBmdWxsU2l6ZUJpdG1hcC5oZWlnaHQoKSA9PSBtX2Z1bGxTaXplLmhl
aWdodCgpKTsKIAotICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGZ1bGxTaXplSW1hZ2Ug
PSBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmluc2VydEFuZExvY2tDYWNoZSgKLSAg
ICAgICAgdGhpcywgU2NhbGVkSW1hZ2VGcmFnbWVudDo6Y3JlYXRlKG1fZnVsbFNpemUsIGZ1bGxT
aXplQml0bWFwLCBpc0NvbXBsZXRlKSk7CisgICAgcmV0dXJuIFNjYWxlZEltYWdlRnJhZ21lbnQ6
OmNyZWF0ZShtX2Z1bGxTaXplLCBmdWxsU2l6ZUJpdG1hcCwgaXNDb21wbGV0ZSk7Cit9CiAKLSAg
ICBpZiAobV9mdWxsU2l6ZSA9PSBzY2FsZWRTaXplKQotICAgICAgICByZXR1cm4gZnVsbFNpemVJ
bWFnZTsKLSAgICByZXR1cm4gdHJ5VG9TY2FsZShmdWxsU2l6ZUltYWdlLCBzY2FsZWRTaXplKTsK
K3ZvaWQgSW1hZ2VGcmFtZUdlbmVyYXRvcjo6cHJlcGFyZURhdGEoUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4qIGRhdGEsIGJvb2wqIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBNdXRleExvY2tlciBsb2Nr
KG1fZGF0YU11dGV4KTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZG8gYSBzaGFsbG93IGNv
cHkgaW5zdGVhZC4gTm93IHdlJ3JlIHJlc3RyaWN0ZWQgYnkgdGhlIEFQSSBvZiBTaGFyZWRCdWZm
ZXIuCisgICAgKmRhdGEgPSBtX2RhdGEtPmNvcHkoKTsKKyAgICAqYWxsRGF0YVJlY2VpdmVkID0g
bV9hbGxEYXRhUmVjZWl2ZWQ7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVH
ZW5lcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlRnJhbWVHZW5lcmF0b3IuaAppbmRleCAwODMxYzQ0OTgyMTE0ZjRhNjZjNjk2N2U5ZjJiNjhj
YTAzM2NmNTk3Li45YzNmZTY1NTJmMjIyYTI4NWY1OWRjMzNmMjc3NzI4OWRlNzdhMjljIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZy
YW1lR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oCkBAIC02NiwxMyArNjYsMTkgQEAgcHVibGljOgog
CiBwcml2YXRlOgogICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB3aGlsZSBtX2RlY29k
ZU11dGV4IGlzIGxvY2tlZC4KLSAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiB0cnlUb0xv
Y2tDYWNoZShjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKTsKKyAgICBjb25zdCBTY2FsZWRJbWFn
ZUZyYWdtZW50KiB0cnlUb0xvY2tDb21wbGV0ZUNhY2hlKGNvbnN0IFNrSVNpemUmIHNjYWxlZFNp
emUpOwogICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIHRyeVRvU2NhbGUoY29uc3QgU2Nh
bGVkSW1hZ2VGcmFnbWVudCogZnVsbFNpemVJbWFnZSwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6
ZSk7CisgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogdHJ5VG9SZXN1bWVEZWNvZGVBbmRT
Y2FsZShjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKTsKICAgICBjb25zdCBTY2FsZWRJbWFnZUZy
YWdtZW50KiB0cnlUb0RlY29kZUFuZFNjYWxlKGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpOwog
CisgICAgLy8gVXNlIHRoZSBnaXZlbiBkZWNvZGVyIHRvIGRlY29kZS4gSWYgYSBkZWNvZGVyIGlz
IG5vdCBnaXZlbiB0aGVuIHRyeSB0byBjcmVhdGUgb25lLgorICAgIFBhc3NPd25QdHI8U2NhbGVk
SW1hZ2VGcmFnbWVudD4gZGVjb2RlKEltYWdlRGVjb2RlcioqKTsKKyAgICB2b2lkIHByZXBhcmVE
YXRhKFJlZlB0cjxTaGFyZWRCdWZmZXI+KiwgYm9vbCogYWxsRGF0YVJlY2VpdmVkKTsKKwogICAg
IFNrSVNpemUgbV9mdWxsU2l6ZTsKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7CiAg
ICAgYm9vbCBtX2FsbERhdGFSZWNlaXZlZDsKKyAgICBib29sIG1fZGVjb2RlRmFpbGVkQW5kRW1w
dHk7CiAKICAgICBPd25QdHI8SW1hZ2VEZWNvZGVyRmFjdG9yeT4gbV9pbWFnZURlY29kZXJGYWN0
b3J5OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAKaW5kZXggZjMxMjBlNzlk
ODBlZDVhYjQ0MDMyNzQ1ZWIxNjFkZmM0MDhkODkzZS4uYTFkYjFiYjc5MTU1ZmIzMDU2MjdkNGYx
YmM4MjM5N2JmOTZkNjk1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmNwcApA
QCAtNjAsNyArNjAsOCBAQCB2b2lkKiBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6b25Mb2NrUGl4ZWxz
KFNrQ29sb3JUYWJsZSoqKQogICAgIG1fbXV0ZXgubG9jaygpOwogICAgIEFTU0VSVCghbV9sb2Nr
ZWRDYWNoZWRJbWFnZSk7CiAKLSAgICBtX2xvY2tlZENhY2hlZEltYWdlID0gSW1hZ2VEZWNvZGlu
Z1N0b3JlOjppbnN0YW5jZSgpLT5sb2NrQ29tcGxldGVDYWNoZShtX2ZyYW1lR2VuZXJhdG9yLmdl
dCgpLCBtX3NjYWxlZFNpemUpOworICAgIGlmICghSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5j
ZSgpLT5sb2NrQ2FjaGUobV9mcmFtZUdlbmVyYXRvci5nZXQoKSwgbV9zY2FsZWRTaXplLCB0cnVl
LCAmbV9sb2NrZWRDYWNoZWRJbWFnZSkpCisgICAgICAgIG1fbG9ja2VkQ2FjaGVkSW1hZ2UgPSAw
OwogCiAgICAgLy8gVXNlIEltYWdlRnJhbWVHZW5lcmF0b3IgdG8gZ2VuZXJhdGUgdGhlIGltYWdl
LiBJdCB3aWxsIGxvY2sgdGhlIGNhY2hlCiAgICAgLy8gZW50cnkgZm9yIHVzLgpAQCAtOTEsMTAg
KzkyLDEzIEBAIGJvb2wgTGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uTG9ja1BpeGVsc0FyZVdyaXRh
YmxlKCkgY29uc3QKIAogYm9vbCBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6UHJlcGFyZVRvRGVjb2Rl
KGNvbnN0IExhenlQaXhlbFJlZjo6UHJlcGFyZVBhcmFtcyYgcGFyYW1zKQogewotICAgIE11dGV4
TG9ja2VyIGxvY2sobV9tdXRleCk7CiAgICAgLy8gVE9ETzogY2hlY2sgaWYgb25seSBhIHBhcnRp
Y3VsYXIgcmVjdCBpcyBhdmFpbGFibGUgaW4gaW1hZ2UgY2FjaGUuCiAgICAgVU5VU0VEX1BBUkFN
KHBhcmFtcyk7Ci0gICAgcmV0dXJuIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+bG9j
a0NvbXBsZXRlQ2FjaGUobV9mcmFtZUdlbmVyYXRvci5nZXQoKSwgbV9zY2FsZWRTaXplKTsKKyAg
ICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBjYWNoZWRJbWFnZSA9IDA7CisgICAgYm9vbCBj
YWNoZWQgPSBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmxvY2tDYWNoZShtX2ZyYW1l
R2VuZXJhdG9yLmdldCgpLCBtX3NjYWxlZFNpemUsIHRydWUsICZjYWNoZWRJbWFnZSk7CisgICAg
aWYgKGNhY2hlZCkKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxv
Y2tDYWNoZShtX2ZyYW1lR2VuZXJhdG9yLmdldCgpLCBjYWNoZWRJbWFnZSk7CisgICAgcmV0dXJu
IGNhY2hlZDsKIH0KIAogdm9pZCBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6RGVjb2RlKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NjYWxlZElt
YWdlRnJhZ21lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1NjYWxlZEltYWdlRnJhZ21lbnQuaAppbmRleCBmMDcwN2IzY2UzNGM2NDRmNWJiNzUxNGZkNjRi
MWRmMmQwNzEyYzc3Li4wMGEyMmI1MDA2YTkyOGZiYjMwOGM4N2I1YTBlM2Y2ZjJmY2YwNmU2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2Fs
ZWRJbWFnZUZyYWdtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vU2NhbGVkSW1hZ2VGcmFnbWVudC5oCkBAIC00OSw2ICs0OSw3IEBAIHB1YmxpYzoK
ICAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwKCkgY29uc3QgeyByZXR1cm4gbV9iaXRtYXA7IH0K
ICAgICBTa0JpdG1hcCYgYml0bWFwKCkgeyByZXR1cm4gbV9iaXRtYXA7IH0KICAgICBib29sIGlz
Q29tcGxldGUoKSBjb25zdCB7IHJldHVybiBtX2lzQ29tcGxldGU7IH0KKyAgICB2b2lkIHNldElz
Q29tcGxldGUoKSB7IG1faXNDb21wbGV0ZSA9IHRydWU7IH0KIAogcHJpdmF0ZToKICAgICBTa0lT
aXplIG1fc2NhbGVkU2l6ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0LmNwcAppbmRleCA3ZmQ0MDE3YTZlNDBiZmZj
YWY3N2RmNmNjZjExZjA1MjY0YThmNjM2Li43ZjE5MDBiMWNkZDIyNDI1MTgyMGVjOGFhNDE2MzU2
YzI1NjczNTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlZmVy
cmVkSW1hZ2VEZWNvZGVyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9EZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuY3BwCkBAIC03Niw5ICs3NiwxMCBAQCBwdWJsaWM6
CiAgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uY2UoKTsKICAgICAgICAg
RGVmZXJyZWRJbWFnZURlY29kZXI6OnNldEVuYWJsZWQodHJ1ZSk7CiAgICAgICAgIG1fZGF0YSA9
IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHdoaXRlUE5HLCBzaXplb2Yod2hpdGVQTkcpKTsKLSAgICAg
ICAgbV9hY3R1YWxEZWNvZGVyID0gbmV3IE1vY2tJbWFnZURlY29kZXIodGhpcyk7CisgICAgICAg
IE93blB0cjxNb2NrSW1hZ2VEZWNvZGVyPiBkZWNvZGVyID0gTW9ja0ltYWdlRGVjb2Rlcjo6Y3Jl
YXRlKHRoaXMpOworICAgICAgICBtX2FjdHVhbERlY29kZXIgPSBkZWNvZGVyLmdldCgpOwogICAg
ICAgICBtX2FjdHVhbERlY29kZXItPnNldFNpemUoMSwgMSk7Ci0gICAgICAgIG1fbGF6eURlY29k
ZXIgPSBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6Y3JlYXRlRm9yVGVzdGluZyhhZG9wdFB0cihtX2Fj
dHVhbERlY29kZXIpKTsKKyAgICAgICAgbV9sYXp5RGVjb2RlciA9IERlZmVycmVkSW1hZ2VEZWNv
ZGVyOjpjcmVhdGVGb3JUZXN0aW5nKGRlY29kZXIucmVsZWFzZSgpKTsKICAgICAgICAgbV9sYXp5
RGVjb2Rlci0+c2V0RGF0YShtX2RhdGEuZ2V0KCksIHRydWUpOwogICAgICAgICBtX2NhbnZhcy5y
ZXNldChjcmVhdGVSYXN0ZXJDYW52YXMoMTAwLCAxMDApKTsKICAgICAgICAgbV9mcmFtZUJ1ZmZl
clJlcXVlc3RDb3VudCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0ltYWdlRGVjb2RpbmdTdG9yZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9JbWFnZURlY29kaW5nU3RvcmVUZXN0LmNwcAppbmRleCAwMzhhZTcyMGI1NzViZjk5NjBi
NTg3MmJlMWUwOTc0ZmEzZDdkOWIzLi5jNjBjMzg0ZjE2M2IzY2U1ZmQ2NTVlYjIxM2NjYjNjYWYx
ZWVlZGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlRGVj
b2RpbmdTdG9yZVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1h
Z2VEZWNvZGluZ1N0b3JlVGVzdC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJJbWFn
ZURlY29kaW5nU3RvcmUuaCIKIAogI2luY2x1ZGUgIkltYWdlRnJhbWVHZW5lcmF0b3IuaCIKKyNp
bmNsdWRlICJNb2NrSW1hZ2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAj
aW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KIApAQCAtMzUsMTMgKzM2LDE0IEBAIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgewogCi1jbGFzcyBJbWFnZURlY29kaW5nU3RvcmVU
ZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7CitjbGFzcyBJbWFnZURlY29kaW5nU3RvcmVU
ZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCwgcHVibGljIE1vY2tJbWFnZURlY29kZXJDbGll
bnQgewogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCiAgICAgewogICAgICAgICBJ
bWFnZURlY29kaW5nU3RvcmU6OmluaXRpYWxpemVPbmNlKCk7CiAgICAgICAgIG1fZGF0YSA9IFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKCk7CiAgICAgICAgIG1fZ2VuZXJhdG9yID0gSW1hZ2VGcmFtZUdl
bmVyYXRvcjo6Y3JlYXRlKFNrSVNpemU6Ok1ha2UoMTAwLCAxMDApLCBtX2RhdGEsIHRydWUpOwor
ICAgICAgICBtX2RlY29kZXJzRGVzdHJveWVkID0gMDsKICAgICB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgVGVhckRvd24oKQpAQCAtNDksNiArNTEsMjIgQEAgcHVibGljOgogICAgICAgICBJbWFnZURl
Y29kaW5nU3RvcmU6OnNodXRkb3duKCk7CiAgICAgfQogCisgICAgdmlydHVhbCB2b2lkIGRlY29k
ZXJCZWluZ0Rlc3Ryb3llZCgpCisgICAgeworICAgICAgICArK21fZGVjb2RlcnNEZXN0cm95ZWQ7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGZyYW1lQnVmZmVyUmVxdWVzdGVkKCkKKyAgICB7
CisgICAgICAgIC8vIERlY29kZXIgaXMgbmV2ZXIgdXNlZCBieSBJbWFnZURlY29kaW5nU3RvcmUu
CisgICAgICAgIEFTU0VSVF9UUlVFKGZhbHNlKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEltYWdl
RnJhbWU6OkZyYW1lU3RhdHVzIGZyYW1lU3RhdHVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBJ
bWFnZUZyYW1lOjpGcmFtZVBhcnRpYWw7CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgUGFzc093
blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBjcmVhdGVDb21wbGV0ZUltYWdlKGNvbnN0IFNrSVNp
emUmIHNpemUpCiAgICAgewpAQCAtNTgsNiArNzYsMTQgQEAgcHJvdGVjdGVkOgogICAgICAgICBy
ZXR1cm4gU2NhbGVkSW1hZ2VGcmFnbWVudDo6Y3JlYXRlKHNpemUsIGJpdG1hcCwgdHJ1ZSk7CiAg
ICAgfQogCisgICAgUGFzc093blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBjcmVhdGVJbmNvbXBs
ZXRlSW1hZ2UoY29uc3QgU2tJU2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAgIFNrQml0bWFwIGJp
dG1hcDsKKyAgICAgICAgYml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25m
aWcsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGJpdG1hcC5hbGxvY1Bp
eGVscygpOworICAgICAgICByZXR1cm4gU2NhbGVkSW1hZ2VGcmFnbWVudDo6Y3JlYXRlKHNpemUs
IGJpdG1hcCwgZmFsc2UpOworICAgIH0KKwogICAgIHZvaWQgaW5zZXJ0Q2FjaGUoY29uc3QgU2tJ
U2l6ZSYgc2l6ZSkKICAgICB7CiAgICAgICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGlt
YWdlID0gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5pbnNlcnRBbmRMb2NrQ2FjaGUo
CkBAIC02Nyw3ICs5MywxMCBAQCBwcm90ZWN0ZWQ6CiAKICAgICBjb25zdCBTY2FsZWRJbWFnZUZy
YWdtZW50KiBsb2NrQ2FjaGUoY29uc3QgU2tJU2l6ZSYgc2l6ZSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmxvY2tDb21wbGV0ZUNhY2hlKG1f
Z2VuZXJhdG9yLmdldCgpLCBzaXplKTsKKyAgICAgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVu
dCogY2FjaGVkSW1hZ2UgPSAwOworICAgICAgICBpZiAoSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0
YW5jZSgpLT5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHNpemUsIGZhbHNlLCAmY2FjaGVk
SW1hZ2UpKQorICAgICAgICAgICAgcmV0dXJuIGNhY2hlZEltYWdlOworICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAKICAgICB2b2lkIHVubG9ja0NhY2hlKGNvbnN0IFNjYWxlZEltYWdlRnJhZ21l
bnQqIGNhY2hlZEltYWdlKQpAQCAtOTUsNiArMTI0LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOwogICAgIFJlZlB0cjxJbWFnZUZyYW1lR2VuZXJhdG9y
PiBtX2dlbmVyYXRvcjsKKyAgICBpbnQgbV9kZWNvZGVyc0Rlc3Ryb3llZDsKIH07CiAKIFRFU1Rf
RihJbWFnZURlY29kaW5nU3RvcmVUZXN0LCBldmljdE9uZUNhY2hlKQpAQCAtMTgxLDcgKzIxMSw3
IEBAIFRFU1RfRihJbWFnZURlY29kaW5nU3RvcmVUZXN0LCBjYWNoZUluVXNlTm90RXZpY3RlZCkK
ICAgICBFWFBFQ1RfRVEoM3UsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVF
bnRyaWVzKCkpOwogCiAgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogY2FjaGVkSW1hZ2Ug
PSBsb2NrQ2FjaGUoU2tJU2l6ZTo6TWFrZSgxLCAxKSk7Ci0gICAgRVhQRUNUX1RSVUUoY2FjaGVk
SW1hZ2UpOworICAgIEFTU0VSVF9UUlVFKGNhY2hlZEltYWdlKTsKIAogICAgIC8vIENhY2hlIDIg
aXMgZXZpY3RlZCBiZWNhdXNlIGNhY2hlIDEgaXMgaW4gdXNlLgogICAgIGV2aWN0T25lQ2FjaGUo
KTsKQEAgLTIwNCw0ICsyMzQsNTEgQEAgVEVTVF9GKEltYWdlRGVjb2RpbmdTdG9yZVRlc3QsIGRl
c3Ryb3lJbWFnZUZyYW1lR2VuZXJhdG9yKQogICAgIEVYUEVDVF9GQUxTRShJbWFnZURlY29kaW5n
U3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygpKTsKIH0KIAorVEVTVF9GKEltYWdlRGVj
b2RpbmdTdG9yZVRlc3QsIGluc2VydEluY29tcGxldGVDYWNoZSkKK3sKKyAgICBjb25zdCBTa0lT
aXplIHNpemUgPSBTa0lTaXplOjpNYWtlKDEsIDEpOworICAgIGNvbnN0IFNjYWxlZEltYWdlRnJh
Z21lbnQqIGNhY2hlZEltYWdlID0gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5pbnNl
cnRBbmRMb2NrQ2FjaGUoCisgICAgICAgIG1fZ2VuZXJhdG9yLmdldCgpLCBjcmVhdGVJbmNvbXBs
ZXRlSW1hZ2Uoc2l6ZSksIE1vY2tJbWFnZURlY29kZXI6OmNyZWF0ZSh0aGlzKSk7CisgICAgRVhQ
RUNUX0VRKDF1LCBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygp
KTsKKyAgICB1bmxvY2tDYWNoZShjYWNoZWRJbWFnZSk7CisKKyAgICBJbWFnZURlY29kZXIqIGRl
Y29kZXIgPSAwOworICAgIEVYUEVDVF9UUlVFKEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2Uo
KS0+bG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCBzaXplLCBmYWxzZSwgJmNhY2hlZEltYWdl
LCAmZGVjb2RlcikpOworICAgIEVYUEVDVF9UUlVFKGRlY29kZXIpOworICAgIEFTU0VSVF9UUlVF
KGNhY2hlZEltYWdlKTsKKyAgICBFWFBFQ1RfRkFMU0UoY2FjaGVkSW1hZ2UtPmlzQ29tcGxldGUo
KSk7CisgICAgdW5sb2NrQ2FjaGUoY2FjaGVkSW1hZ2UpOworICAgIEVYUEVDVF9FUSgwLCBtX2Rl
Y29kZXJzRGVzdHJveWVkKTsKK30KKworVEVTVF9GKEltYWdlRGVjb2RpbmdTdG9yZVRlc3QsIGlu
c2VydENvbXBsZXRlQ2FjaGVXaXRoRGVjb2RlcikKK3sKKyAgICBjb25zdCBTY2FsZWRJbWFnZUZy
YWdtZW50KiBjYWNoZWRJbWFnZSA9IEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+aW5z
ZXJ0QW5kTG9ja0NhY2hlKAorICAgICAgICBtX2dlbmVyYXRvci5nZXQoKSwgY3JlYXRlQ29tcGxl
dGVJbWFnZShTa0lTaXplOjpNYWtlKDEsIDEpKSwgTW9ja0ltYWdlRGVjb2Rlcjo6Y3JlYXRlKHRo
aXMpKTsKKyAgICB1bmxvY2tDYWNoZShjYWNoZWRJbWFnZSk7CisgICAgRVhQRUNUX0VRKDF1LCBJ
bWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygpKTsKKyAgICBFWFBF
Q1RfRVEoMSwgbV9kZWNvZGVyc0Rlc3Ryb3llZCk7Cit9CisKK1RFU1RfRihJbWFnZURlY29kaW5n
U3RvcmVUZXN0LCBpbmNvbXBsZXRlQ2FjaGVCZWNvbWVzQ29tcGxldGUpCit7CisgICAgY29uc3Qg
U2tJU2l6ZSBzaXplID0gU2tJU2l6ZTo6TWFrZSgxLCAxKTsKKyAgICBjb25zdCBTY2FsZWRJbWFn
ZUZyYWdtZW50KiBjYWNoZWRJbWFnZSA9IEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+
aW5zZXJ0QW5kTG9ja0NhY2hlKAorICAgICAgICBtX2dlbmVyYXRvci5nZXQoKSwgY3JlYXRlSW5j
b21wbGV0ZUltYWdlKHNpemUpLCBNb2NrSW1hZ2VEZWNvZGVyOjpjcmVhdGUodGhpcykpOworICAg
IEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3Iu
Z2V0KCksIGNhY2hlZEltYWdlKTsKKyAgICBFWFBFQ1RfRVEoMXUsIEltYWdlRGVjb2RpbmdTdG9y
ZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRyaWVzKCkpOworCisgICAgSW1hZ2VEZWNvZGVyKiBkZWNv
ZGVyID0gMDsKKyAgICBFWFBFQ1RfVFJVRShJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCkt
PmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgc2l6ZSwgZmFsc2UsICZjYWNoZWRJbWFnZSwg
JmRlY29kZXIpKTsKKyAgICBFWFBFQ1RfVFJVRShkZWNvZGVyKTsKKyAgICBBU1NFUlRfVFJVRShj
YWNoZWRJbWFnZSk7CisgICAgRVhQRUNUX0ZBTFNFKGNhY2hlZEltYWdlLT5pc0NvbXBsZXRlKCkp
OworCisgICAgY2FjaGVkSW1hZ2UgPSBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPm92
ZXJ3cml0ZUFuZExvY2tDYWNoZSgKKyAgICAgICAgbV9nZW5lcmF0b3IuZ2V0KCksIGNhY2hlZElt
YWdlLCBjcmVhdGVDb21wbGV0ZUltYWdlKHNpemUpKTsKKyAgICBFWFBFQ1RfVFJVRShjYWNoZWRJ
bWFnZS0+aXNDb21wbGV0ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9kZWNvZGVyc0Rlc3Ryb3ll
ZCk7CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dl
bmVyYXRvci5nZXQoKSwgY2FjaGVkSW1hZ2UpOworfQorCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JbWFnZUZyYW1lR2VuZXJhdG9yVGVz
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlRnJhbWVHZW5lcmF0b3JU
ZXN0LmNwcAppbmRleCBkYTBhMmY4NjQyNWFkMzI2NmM0NDg4NTg0NmE5ZjRkNGJlODg4YjNmLi4z
NmY0MDdiNTkwNTNlN2UzMTA5N2RlYzgyNWUyOTJiOWIwNTM4ZjY2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LmNw
cApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIk1vY2tJbWFnZURlY29kZXIuaCIKICNpbmNs
dWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTcwLDYg
KzcxLDcgQEAgcHVibGljOgogICAgICAgICBtX2RhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZSgp
OwogICAgICAgICBtX2dlbmVyYXRvciA9IEltYWdlRnJhbWVHZW5lcmF0b3I6OmNyZWF0ZShmdWxs
U2l6ZSgpLCBtX2RhdGEsIHRydWUpOwogICAgICAgICBtX2dlbmVyYXRvci0+c2V0SW1hZ2VEZWNv
ZGVyRmFjdG9yeUZvclRlc3RpbmcoTW9ja0ltYWdlRGVjb2RlckZhY3Rvcnk6OmNyZWF0ZSh0aGlz
KSk7CisgICAgICAgIG1fZGVjb2RlcnNEZXN0cm95ZWQgPSAwOwogICAgICAgICBtX2ZyYW1lQnVm
ZmVyUmVxdWVzdENvdW50ID0gMDsKICAgICAgICAgbV9mcmFtZVN0YXR1cyA9IEltYWdlRnJhbWU6
OkZyYW1lRW1wdHk7CiAgICAgfQpAQCAtODEsNiArODMsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIHZvaWQgZGVjb2RlckJlaW5nRGVzdHJveWVkKCkKICAgICB7CisgICAgICAgICsrbV9kZWNv
ZGVyc0Rlc3Ryb3llZDsKICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZnJhbWVCdWZmZXJSZXF1
ZXN0ZWQoKQpAQCAtMTA2LDE1ICsxMDksMTYgQEAgcHJvdGVjdGVkOgogCiAgICAgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gbV9kYXRhOwogICAgIFJlZlB0cjxJbWFnZUZyYW1lR2VuZXJhdG9yPiBtX2dl
bmVyYXRvcjsKKyAgICBpbnQgbV9kZWNvZGVyc0Rlc3Ryb3llZDsKICAgICBpbnQgbV9mcmFtZUJ1
ZmZlclJlcXVlc3RDb3VudDsKICAgICBJbWFnZUZyYW1lOjpGcmFtZVN0YXR1cyBtX2ZyYW1lU3Rh
dHVzOwogfTsKIAogUGFzc093blB0cjxJbWFnZURlY29kZXI+IE1vY2tJbWFnZURlY29kZXJGYWN0
b3J5OjpjcmVhdGUoKQogewotICAgIE1vY2tJbWFnZURlY29kZXIqIGRlY29kZXIgPSBuZXcgTW9j
a0ltYWdlRGVjb2RlcihtX3Rlc3QpOworICAgIE93blB0cjxNb2NrSW1hZ2VEZWNvZGVyPiBkZWNv
ZGVyID0gTW9ja0ltYWdlRGVjb2Rlcjo6Y3JlYXRlKG1fdGVzdCk7CiAgICAgZGVjb2Rlci0+c2V0
U2l6ZShmdWxsU2l6ZSgpLndpZHRoKCksIGZ1bGxTaXplKCkuaGVpZ2h0KCkpOwotICAgIHJldHVy
biBhZG9wdFB0cihkZWNvZGVyKTsKKyAgICByZXR1cm4gZGVjb2Rlci5yZWxlYXNlKCk7CiB9CiAK
IFRFU1RfRihJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCwgY2FjaGVIaXQpCkBAIC0xNjEsNiArMTY1
LDcgQEAgVEVTVF9GKEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LCBjYWNoZU1pc3NXaXRoRGVjb2Rl
QW5kU2NhbGUpCiAgICAgRVhQRUNUX0VRKDEsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOwog
ICAgIEVYUEVDVF9FUShzY2FsZWRTaXplKCksIHNjYWxlZEltYWdlLT5zY2FsZWRTaXplKCkpOwog
ICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0
b3IuZ2V0KCksIHNjYWxlZEltYWdlKTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9kZWNvZGVyc0Rlc3Ry
b3llZCk7CiAKICAgICAvLyBDYWNoZSBoaXQuCiAgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVu
dCogZnVsbEltYWdlID0gbV9nZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKGZ1bGxTaXplKCkpOwpA
QCAtMTc2LDIxICsxODEsMTMwIEBAIFRFU1RfRihJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCwgY2Fj
aGVNaXNzV2l0aERlY29kZUFuZFNjYWxlKQogICAgIEVYUEVDVF9FUSgxLCBtX2ZyYW1lQnVmZmVy
UmVxdWVzdENvdW50KTsKIH0KIAotLy8gVGVzdCB0aGF0IGluY29tcGxldGUgZnJhbWVzIGFyZSBu
b3QgY2FjaGVkLgogVEVTVF9GKEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LCBjYWNoZU1pc3NXaXRo
SW5jb21wbGV0ZURlY29kZSkKIHsKICAgICBzZXRGcmFtZVN0YXR1cyhJbWFnZUZyYW1lOjpGcmFt
ZVBhcnRpYWwpOwogCi0gICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogdGVtcEltYWdlID0g
bV9nZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKHNjYWxlZFNpemUoKSk7CisgICAgY29uc3QgU2Nh
bGVkSW1hZ2VGcmFnbWVudCogdGVtcEltYWdlPSBtX2dlbmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUo
ZnVsbFNpemUoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRlbXBJbWFnZS0+aXNDb21wbGV0ZSgpKTsK
KyAgICBFWFBFQ1RfRVEoMSwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCk7CisgICAgSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwg
dGVtcEltYWdlKTsKKyAgICBFWFBFQ1RfRVEoMXUsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFu
Y2UoKS0+Y2FjaGVFbnRyaWVzKCkpOworCisgICAgdGVtcEltYWdlID0gbV9nZW5lcmF0b3ItPmRl
Y29kZUFuZFNjYWxlKGZ1bGxTaXplKCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZW1wSW1hZ2UtPmlz
Q29tcGxldGUoKSk7CisgICAgRVhQRUNUX0VRKDIsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQp
OworICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5l
cmF0b3IuZ2V0KCksIHRlbXBJbWFnZSk7CisgICAgRVhQRUNUX0VRKDF1LCBJbWFnZURlY29kaW5n
U3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygpKTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9k
ZWNvZGVyc0Rlc3Ryb3llZCk7Cit9CisKK1RFU1RfRihJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCwg
Y2FjaGVNaXNzV2l0aEluY29tcGxldGVEZWNvZGVBbmRTY2FsZSkKK3sKKyAgICBzZXRGcmFtZVN0
YXR1cyhJbWFnZUZyYW1lOjpGcmFtZVBhcnRpYWwpOworCisgICAgY29uc3QgU2NhbGVkSW1hZ2VG
cmFnbWVudCogdGVtcEltYWdlPSBtX2dlbmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUoc2NhbGVkU2l6
ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVtcEltYWdlLT5pc0NvbXBsZXRlKCkpOworICAgIEVY
UEVDVF9FUSgxLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsKKyAgICBJbWFnZURlY29kaW5n
U3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCB0ZW1wSW1h
Z2UpOworICAgIEVYUEVDVF9FUSgydSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5j
YWNoZUVudHJpZXMoKSk7CisKKyAgICB0ZW1wSW1hZ2UgPSBtX2dlbmVyYXRvci0+ZGVjb2RlQW5k
U2NhbGUoc2NhbGVkU2l6ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVtcEltYWdlLT5pc0NvbXBs
ZXRlKCkpOworICAgIEVYUEVDVF9FUSgyLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsKKyAg
ICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9y
LmdldCgpLCB0ZW1wSW1hZ2UpOworICAgIEVYUEVDVF9FUSgydSwgSW1hZ2VEZWNvZGluZ1N0b3Jl
OjppbnN0YW5jZSgpLT5jYWNoZUVudHJpZXMoKSk7CisgICAgRVhQRUNUX0VRKDAsIG1fZGVjb2Rl
cnNEZXN0cm95ZWQpOworfQorCitURVNUX0YoSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QsIGluY29t
cGxldGVEZWNvZGVCZWNvbWVzQ29tcGxldGUpCit7CisgICAgc2V0RnJhbWVTdGF0dXMoSW1hZ2VG
cmFtZTo6RnJhbWVQYXJ0aWFsKTsKKworICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIHRl
bXBJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShmdWxsU2l6ZSgpKTsKKyAgICBF
WFBFQ1RfRkFMU0UodGVtcEltYWdlLT5pc0NvbXBsZXRlKCkpOwogICAgIEVYUEVDVF9FUSgxLCBt
X2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9kZWNvZGVyc0Rl
c3Ryb3llZCk7CiAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNo
ZShtX2dlbmVyYXRvci5nZXQoKSwgdGVtcEltYWdlKTsKKyAgICBFWFBFQ1RfRVEoMXUsIEltYWdl
RGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRyaWVzKCkpOworCisgICAgc2V0RnJh
bWVTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSk7CiAKICAgICB0ZW1wSW1hZ2UgPSBt
X2dlbmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUoZnVsbFNpemUoKSk7CisgICAgRVhQRUNUX1RSVUUo
dGVtcEltYWdlLT5pc0NvbXBsZXRlKCkpOworICAgIEVYUEVDVF9FUSgyLCBtX2ZyYW1lQnVmZmVy
UmVxdWVzdENvdW50KTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9kZWNvZGVyc0Rlc3Ryb3llZCk7Cisg
ICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRv
ci5nZXQoKSwgdGVtcEltYWdlKTsKKyAgICBFWFBFQ1RfRVEoMXUsIEltYWdlRGVjb2RpbmdTdG9y
ZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRyaWVzKCkpOworCisgICAgdGVtcEltYWdlID0gbV9nZW5l
cmF0b3ItPmRlY29kZUFuZFNjYWxlKGZ1bGxTaXplKCkpOworICAgIEVYUEVDVF9UUlVFKHRlbXBJ
bWFnZS0+aXNDb21wbGV0ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMiwgbV9mcmFtZUJ1ZmZlclJlcXVl
c3RDb3VudCk7CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNo
ZShtX2dlbmVyYXRvci5nZXQoKSwgdGVtcEltYWdlKTsKK30KKworVEVTVF9GKEltYWdlRnJhbWVH
ZW5lcmF0b3JUZXN0LCBpbmNvbXBsZXRlRGVjb2RlQW5kU2NhbGVCZWNvbWVzQ29tcGxldGUpCit7
CisgICAgc2V0RnJhbWVTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKKworICAgIGNv
bnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIHRlbXBJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNvZGVB
bmRTY2FsZShzY2FsZWRTaXplKCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZW1wSW1hZ2UtPmlzQ29t
cGxldGUoKSk7CisgICAgRVhQRUNUX0VRKDEsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOwor
ICAgIEVYUEVDVF9FUSgwLCBtX2RlY29kZXJzRGVzdHJveWVkKTsKKyAgICBJbWFnZURlY29kaW5n
U3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCB0ZW1wSW1h
Z2UpOworICAgIEVYUEVDVF9FUSgydSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5j
YWNoZUVudHJpZXMoKSk7CisKKyAgICBzZXRGcmFtZVN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZUNv
bXBsZXRlKTsKKworICAgIHRlbXBJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShz
Y2FsZWRTaXplKCkpOworICAgIEVYUEVDVF9UUlVFKHRlbXBJbWFnZS0+aXNDb21wbGV0ZSgpKTsK
ICAgICBFWFBFQ1RfRVEoMiwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCk7CisgICAgRVhQRUNU
X0VRKDEsIG1fZGVjb2RlcnNEZXN0cm95ZWQpOwogICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5z
dGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHRlbXBJbWFnZSk7CisgICAg
RVhQRUNUX0VRKDJ1LCBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmll
cygpKTsKIAogICAgIHRlbXBJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShzY2Fs
ZWRTaXplKCkpOwotICAgIEVYUEVDVF9FUSgzLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsK
KyAgICBFWFBFQ1RfVFJVRSh0ZW1wSW1hZ2UtPmlzQ29tcGxldGUoKSk7CisgICAgSW1hZ2VEZWNv
ZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgdGVt
cEltYWdlKTsKKworICAgIHRlbXBJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShm
dWxsU2l6ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZW1wSW1hZ2UtPmlzQ29tcGxldGUoKSk7Cisg
ICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRv
ci5nZXQoKSwgdGVtcEltYWdlKTsKKworICAgIEVYUEVDVF9FUSgyLCBtX2ZyYW1lQnVmZmVyUmVx
dWVzdENvdW50KTsKK30KKworc3RhdGljIHZvaWQgZGVjb2RlVGhyZWFkTWFpbih2b2lkKiBhcmcp
Cit7CisgICAgSW1hZ2VGcmFtZUdlbmVyYXRvciogZ2VuZXJhdG9yID0gcmVpbnRlcnByZXRfY2Fz
dDxJbWFnZUZyYW1lR2VuZXJhdG9yKj4oYXJnKTsKKyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdt
ZW50KiB0ZW1wSW1hZ2UgPSBnZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKGZ1bGxTaXplKCkpOwor
ICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUoZ2VuZXJhdG9y
LCB0ZW1wSW1hZ2UpOworfQorCitURVNUX0YoSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QsIGluY29t
cGxldGVEZWNvZGVCZWNvbWVzQ29tcGxldGVNdWx0aVRocmVhZGVkKQoreworICAgIFdURjo6aW5p
dGlhbGl6ZVRocmVhZGluZygpOworICAgIHNldEZyYW1lU3RhdHVzKEltYWdlRnJhbWU6OkZyYW1l
UGFydGlhbCk7CisKKyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiB0ZW1wSW1hZ2UgPSBt
X2dlbmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUoZnVsbFNpemUoKSk7CisgICAgRVhQRUNUX0ZBTFNF
KHRlbXBJbWFnZS0+aXNDb21wbGV0ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9mcmFtZUJ1ZmZl
clJlcXVlc3RDb3VudCk7CisgICAgRVhQRUNUX0VRKDAsIG1fZGVjb2RlcnNEZXN0cm95ZWQpOwor
ICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0
b3IuZ2V0KCksIHRlbXBJbWFnZSk7CisgICAgRVhQRUNUX0VRKDF1LCBJbWFnZURlY29kaW5nU3Rv
cmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygpKTsKKworICAgIC8vIEZyYW1lIGNhbiBub3cg
YmUgZGVjb2RlZCBjb21wbGV0ZWx5LgorICAgIHNldEZyYW1lU3RhdHVzKEltYWdlRnJhbWU6OkZy
YW1lQ29tcGxldGUpOworICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQgPSBjcmVhdGVUaHJl
YWQoJmRlY29kZVRocmVhZE1haW4sIG1fZ2VuZXJhdG9yLmdldCgpLCAiRGVjb2RlVGhyZWFkIik7
CisgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSUQpOworCisgICAgRVhQRUNUX0VR
KDIsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOworICAgIEVYUEVDVF9FUSgxLCBtX2RlY29k
ZXJzRGVzdHJveWVkKTsKKyAgICBFWFBFQ1RfRVEoMXUsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5z
dGFuY2UoKS0+Y2FjaGVFbnRyaWVzKCkpOworCisgICAgdGVtcEltYWdlID0gbV9nZW5lcmF0b3It
PmRlY29kZUFuZFNjYWxlKGZ1bGxTaXplKCkpOworICAgIEVYUEVDVF9UUlVFKHRlbXBJbWFnZS0+
aXNDb21wbGV0ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMiwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3Vu
dCk7CiAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dl
bmVyYXRvci5nZXQoKSwgdGVtcEltYWdlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaAppbmRleCA4YjRmNDAzODIzOWMyOTVkZTQ4Yzlk
ZWVkN2YzOWVmOGFkNThmMDc1Li41YzlhNjIzN2I5NGY4NWJhM2ZkNjI0YmJiNTVhNzAyOWFkODlm
ODQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01vY2tJbWFnZURl
Y29kZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01vY2tJbWFnZURlY29k
ZXIuaApAQCAtMzgsNiArMzgsOCBAQCBwdWJsaWM6CiAKIGNsYXNzIE1vY2tJbWFnZURlY29kZXIg
OiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxN
b2NrSW1hZ2VEZWNvZGVyPiBjcmVhdGUoTW9ja0ltYWdlRGVjb2RlckNsaWVudCogY2xpZW50KSB7
IHJldHVybiBhZG9wdFB0cihuZXcgTW9ja0ltYWdlRGVjb2RlcihjbGllbnQpKTsgfQorCiAgICAg
TW9ja0ltYWdlRGVjb2RlcihNb2NrSW1hZ2VEZWNvZGVyQ2xpZW50KiBjbGllbnQpCiAgICAgICAg
IDogSW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYVByZW11bHRpcGxpZWQsIEltYWdlU291
cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpCiAgICAgICAgICwgbV9mcmFtZUJ1ZmZl
clJlcXVlc3RDb3VudCgwKQpAQCAtNDksNiArNTEsMTQgQEAgcHVibGljOgogICAgICAgICBtX2Ns
aWVudC0+ZGVjb2RlckJlaW5nRGVzdHJveWVkKCk7CiAgICAgfQogCisgICAgdmlydHVhbCBib29s
IHNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKKyAgICB7CisgICAgICAg
IEltYWdlRGVjb2Rlcjo6c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgbV9mcmFtZUJ1
ZmZlckNhY2hlLnJlc2l6ZSgxKTsKKyAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnNldFNp
emUod2lkdGgsIGhlaWdodCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIHZp
cnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJl
dHVybiAibW9jayI7CkBAIC01OSw4ICs2OSw2IEBAIHB1YmxpYzoKICAgICAgICAgKyttX2ZyYW1l
QnVmZmVyUmVxdWVzdENvdW50OwogICAgICAgICBtX2NsaWVudC0+ZnJhbWVCdWZmZXJSZXF1ZXN0
ZWQoKTsKIAotICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKDEpOwotICAgICAgICBt
X2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc2V0U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdo
dCgpKTsKICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnNldFN0YXR1cyhtX2NsaWVudC0+
ZnJhbWVTdGF0dXMoKSk7CiAgICAgICAgIHJldHVybiAmbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwog
ICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178292</attachid>
            <date>2012-12-07 15:27:13 -0800</date>
            <delta_ts>2012-12-07 18:14:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103796-20121207152437.patch</filename>
            <type>text/plain</type>
            <size>44681</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2OTkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODJjMzQ5OTJjMzIzNmNj
NTk1NGY1MzQ1YjUzMTE0NmM1YTg2MzQ5OC4uMGIxZWU0ZWMzMjgxZDVhZGUzNDc4NTJhMDNmMjZk
MjZiMzBkMzIyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2IEBACisyMDEyLTEyLTA0ICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbWFnZURl
Y29kaW5nU3RvcmUgc2hvdWxkIGNhY2hlIHBhcnRpYWxseSBkZWNvZGVkIGltYWdlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNzk2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IGNhY2hp
bmcgZm9yIGluY29tcGxldGUgaW1hZ2VzLCBtZWFuaW5nIHRoZSBpbWFnZSBpcyBwYXJ0aWFsbHkK
KyAgICAgICAgZGVjb2RlZC4gVGhlIGltYWdlIGlzIGNhY2hlZCB0b2dldGhlciB3aXRoIHBhcnRp
YWxseSBkZWNvZGVkIEltYWdlRGVjb2Rlci4KKyAgICAgICAgVGhpcyBhbGxvd3MgZGVjb2Rpbmcg
dG8gcmVzdW1lIGluIGEgbGF0ZXIgdGltZS4KKworICAgICAgICBDYWNoaW5nIGxvZ2ljIGZvciBp
bmNvbXBsZXRlIGltYWdlcyBpcyBpbXBsZW1lbnRlZCBpbiBJbWFnZURlY29kaW5nU3RvcmUuCisK
KyAgICAgICAgTG9naWMgZm9yIHJlc3VtaW5nIGltYWdlIGRlY29kaW5nIGlzIGltcGxlbWVudGVk
IGluIEltYWdlRnJhbWVHZW5lcmF0b3IuCisKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlIGFs
bG93cyBzdG9yaW5nIGluY29tcGxldGUgaW1hZ2Ugd2l0aCB0aGUgZGVjb2Rlci4KKyAgICAgICAg
VGhlIGNhY2hlIGVudHJ5IGNhbiBiZSB1c2VkIGluIGEgbGF0ZXIgdGltZSB0byByZWFkIGFuZCB3
cml0ZSAoaS5lLiByZXN1bWUKKyAgICAgICAgZGVjb2RpbmcuKSBUbyBhdm9pZCB0aGUgc2FtZSBl
bnRyeSBiZWluZyB3cml0dGVuIGFuZCByZWFkIGF0IHRoZSBzYW1lIHRpbWUsCisgICAgICAgIGFu
IGluY29tcGxldGUgZW50cnkgY2FuIGJlIHVzZWQgYnkgb25lIHVzZXIgb25seS4gQ29uY3VycmVu
dCBhY2Nlc3MgdG8KKyAgICAgICAgYW4gaW5jb21wbGV0ZSBlbnRyeSBzaG91bGQgbmV2ZXIgaGFw
cGVuIGFuZCBpcyBjaGVja2VkIGJ5IGFuIGFzc2VydC4KKyAgICAgICAgQW4gZW50cnkgY2FuIGJl
Y29tZXMgY29tcGxldGUgd2hlbiBkZWNvZGluZyBpcyBmaW5pc2hlZC4gSW4gdGhpcyBjYXNlCisg
ICAgICAgIHRoZSBhc3NvY2lhdGVkIGRlY29kZXIgaXMgZGVsZXRlZC4gT25jZSBhbiBlbnRyeSBi
ZWNvbWVzIGNvbXBsZXRlIGNvbmN1cnJlbnQKKyAgICAgICAgcmVhZCBpcyBhbGxvd2VkLgorCisg
ICAgICAgIEltYWdlRnJhbWVHZW5lcmF0b3IgcGVyZm9ybXMgdGhlIGxvZ2ljIHRvIHJlc3VtZSBp
bWFnZSBkZWNvZGluZy4gSXQKKyAgICAgICAgcGVyZm9ybXMgdGhlIGZvbGxvd2luZyBvcGVyYXRp
b25zIGluIHNlcXVlbmNlOgorICAgICAgICAtIFRyeSB0byBsb29rdXAgYSBjb21wbGV0ZSBpbWFn
ZQorICAgICAgICAtIFRyeSB0byBwZXJmb3JtIHNjYWxpbmcgb24gYSBjb21wbGV0ZSBpbWFnZQor
ICAgICAgICAtIFRyeSB0byBsb29rdXAgYW4gaW5jb21wbGV0ZSBpbWFnZSBhbmQgcmVzdW1lIGRl
Y29kaW5nICYgc2NhbGluZworICAgICAgICAtIEV2ZXJ5dGhpbmcgZmFpbHMsIHN0YXJ0IGRlY29k
aW5nIGZyb20gc2NyYXRjaAorICAgICAgICBUaGUgZW50aXJlIHNlcXVlbmNlIG9mIG9wZXJhdGlv
bnMgaW4gdW5kZXIgYSBtdXRleCwgaGVuY2UgdGhlcmUgd2lsbCBiZQorICAgICAgICBubyBtb3Jl
IHRoYW4gMSB1c2VyIG9mIGFuIGluY29tcGxldGUgY2FjaGUgZW50cnkgYXQgdGhlIHNhbWUgdGlt
ZS4KKworICAgICAgICBOZXcgdW5pdCB0ZXN0cyBpbiBJbWFnZURlY29kaW5nU3RvcmVUZXN0IGFu
ZCBJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kaW5nU3RvcmU6OmxvY2tDYWNoZSk6CisgICAgICAgIENoYW5nZSBvZiBtZXRob2QgZGVm
aW5pdGlvbiB0byByZXR1cm4gYW4gaW1hZ2UgYW5kIEltYWdlRGVjb2Rlci4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6dW5sb2NrQ2FjaGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjppbnNlcnRBbmRMb2NrQ2FjaGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpvdmVyd3JpdGVBbmRMb2NrQ2FjaGUpOgorICAgICAg
ICBOZXcgbWV0aG9kIHRvIGFsbG93IGFuIGluY29tcGxldGUgY2FjaGUgZW50cnkgYmUgb3Zlcndy
aXR0ZW4uCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaDoKKyAgICAgICAgKEltYWdlRGVjb2RpbmdTdG9y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OkNhY2hlRW50cnk6OmNy
ZWF0ZUFuZFVzZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OkNhY2hl
RW50cnk6OkNhY2hlRW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3Jl
OjpDYWNoZUVudHJ5OjpjYWNoZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29k
aW5nU3RvcmU6OkNhY2hlRW50cnk6OmNhY2hlZERlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEZWNvZGluZ1N0b3JlOjpDYWNoZUVudHJ5OjpyZWxlYXNlQ2FjaGVkRGVjb2Rlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OkNhY2hlRW50cnk6Om92ZXJ3cml0
ZUNhY2hlZEltYWdlKToKKyAgICAgICAgTmV3IG1ldGhvZCB0byBhbGxvdyBhbiBpbmNvbXBsZXRl
IGltYWdlIGJlIG92ZXJ3aXR0ZW4uCisgICAgICAgIChDYWNoZUVudHJ5KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OkltYWdlRnJhbWVHZW5lcmF0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6ZGVjb2RlQW5kU2NhbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6dHJ5VG9Mb2NrQ29tcGxldGVD
YWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjp0cnlUb1NjYWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OnRyeVRvUmVzdW1lRGVj
b2RlQW5kU2NhbGUpOgorICAgICAgICBOZXcgbWV0aG9kIHRvIGxvb2t1cCBhbiBpbmNvbXBsZXRl
IGNhY2hlIGVudHJ5IGFuZCByZXN1bWUgZGVjb2RpbmcuCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OnRyeVRvRGVjb2RlQW5kU2NhbGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6ZGVjb2Rlcik6CisgICAg
ICAgIE5ldyBoZWxwZXIgbWV0aG9kIHRvIGRvIGRlY29kaW5nIGZvciBhIGZ1bGwgc2l6ZWQgaW1h
Z2UuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpwcmVwYXJlRGF0YSk6
CisgICAgICAgIE5ldyBoZWxwZXIgbWV0aG9kIHRvIHByZXBhcmUgZGF0YSBzYWZlbHkuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oOgor
ICAgICAgICAoSW1hZ2VGcmFtZUdlbmVyYXRvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uTG9ja1BpeGVscyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vU2NhbGVkSW1hZ2VGcmFnbWVudC5oOgorICAgICAgICAoV2ViQ29y
ZTo6U2NhbGVkSW1hZ2VGcmFnbWVudDo6c2V0SXNDb21wbGV0ZSk6CisKIDIwMTItMTItMDcgIERp
bWEgR29yYmlrICA8ZGdvcmJpa0BhcHBsZS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IGdlbmVy
YWwgOjpjdWUgcHNldWRvIGVsZW1lbnQgZm9yIHRoZSA8dmlkZW8+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IDM5Y2JiMTc5ZjE4ZTE1MDFlNWY5NzU0ZGQ5OGM4Y2NlMGNjYjUwYmMuLmMz
MzJlYzk2MmRhYjc4ZDNlMThkZjEwZDY3MmMyNzc3ZGJjYmM3NWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsNTkgQEAKKzIwMTItMTItMDQgIEFscGhhIExhbSAgPGhjbGFt
QGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEltYWdlRGVjb2RpbmdTdG9yZSBz
aG91bGQgY2FjaGUgcGFydGlhbGx5IGRlY29kZWQgaW1hZ2VzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM3OTYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB1bml0IHRlc3RzIHRvIHZlcmlmeSBj
YWNoaW5nIGJlaGF2aW9yIGZvciBwYXJ0aWFsbHkgZGVjb2RlZCBpbWFnZXMuCisgICAgICAgIE5l
dyB0ZXN0cyBhZGRlZDoKKyAgICAgICAgLSBJbWFnZURlY29kaW5nU3RvcmVUZXN0Lmluc2VydElu
Y29tcGxldGVDYWNoZQorICAgICAgICBJbnNlcnQgaW5jb21wbGV0ZSBpbWFnZSB3aXRoIGEgZGVj
b2RlciBpbnRvIGNhY2hlLgorCisgICAgICAgIC0gSW1hZ2VEZWNvZGluZ1N0b3JlVGVzdC5pbnNl
cnRDb21wbGV0ZUNhY2hlV2l0aERlY29kZXIKKyAgICAgICAgSW5zZXJ0IGNvbXBsZXRlIGltYWdl
IHdpdGggYSBkZWNvZGVyLCBkZWNvZGVyIGlzIGRlbGV0ZWQuCisKKyAgICAgICAgLSBJbWFnZURl
Y29kaW5nU3RvcmVUZXN0LmluY29tcGxldGVDYWNoZUJlY29tZXNDb21wbGV0ZQorICAgICAgICBQ
cm9ncmVzc2l2ZSBkb3dubG9hZGluZyBvZiBhIGZpbGUuIEltYWdlIGJlY29tZXMgY29tcGxldGUs
IGRlY29kZXIgZGVsZXRlZC4KKworICAgICAgICAtIEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LmNh
Y2hlTWlzc1dpdGhJbmNvbXBsZXRlRGVjb2RlQW5kU2NhbGUKKyAgICAgICAgQ2FjaGUgbG9va3Vw
IGZhaWxlZCBhbmQgc3RhcnQgYSBkZWNvZGluZyB0aGF0IGRlY29kZWQgYW4gaW5jb21wbGV0ZSBp
bWFnZS4KKworICAgICAgICBJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdC5pbmNvbXBsZXRlRGVjb2Rl
QmVjb21lc0NvbXBsZXRlCisgICAgICAgIEltYWdlIGRlY29kZWQgYXMgaW5jb21wbGV0ZSwgZmls
ZSBmdWxseSBkb3dubG9hZGVkIGFuZCBjYWNoZSBlbnRyeSBiZWNvbWVzIGNvbXBsZXRlLgorCisg
ICAgICAgIEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LmluY29tcGxldGVEZWNvZGVBbmRTY2FsZUJl
Y29tZXNDb21wbGV0ZQorICAgICAgICBJbWFnZSBkZWNvZGVkIGFuZCBzY2FsZWQgYXMgaW5jb21w
bGV0ZSwgYmVjb21lcyBjb21wbGV0ZSBhZnRlciBmaWxlIGlzIGZ1bGx5IGRvd2xvYWRlZC4KKwor
ICAgICAgICBJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdC5pbmNvbXBsZXRlRGVjb2RlQmVjb21lc0Nv
bXBsZXRlTXVsdGlUaHJlYWRlZAorICAgICAgICBUcmFuc2l0aW9uIGZyb20gaW5jb21wbGV0ZSB0
byBjb21wbGV0ZSwgZW50aXJlIGxpZmVjeWNsZSBoYXBwZW5zIG9uIDIgdGhyZWFkcy4KKworICAg
ICAgICAqIHRlc3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEZWZlcnJlZEltYWdlRGVjb2RlclRlc3Q6OlNldFVwKToKKyAgICAgICAgKiB0ZXN0cy9J
bWFnZURlY29kaW5nU3RvcmVUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rp
bmdTdG9yZVRlc3Q6OlNldFVwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9y
ZVRlc3Q6OmRlY29kZXJCZWluZ0Rlc3Ryb3llZCk6CisgICAgICAgIChJbWFnZURlY29kaW5nU3Rv
cmVUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZVRlc3Q6OmZyYW1l
QnVmZmVyUmVxdWVzdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZVRl
c3Q6OmZyYW1lU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZVRl
c3Q6OmNyZWF0ZUluY29tcGxldGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29k
aW5nU3RvcmVUZXN0Ojpsb2NrQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVF9GKToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHRlc3RzL0ltYWdlRnJhbWVHZW5lcmF0b3JUZXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3JUZXN0OjpTZXRVcCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdDo6ZGVjb2RlckJlaW5n
RGVzdHJveWVkKToKKyAgICAgICAgKEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0KToKKyAgICAgICAg
KFdlYkNvcmU6Ok1vY2tJbWFnZURlY29kZXJGYWN0b3J5OjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6VEVTVF9GKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6ZGVj
b2RlVGhyZWFkTWFpbik6CisgICAgICAgICogdGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oOgorICAg
ICAgICAoV2ViQ29yZTo6TW9ja0ltYWdlRGVjb2Rlcjo6Y3JlYXRlKToKKyAgICAgICAgKE1vY2tJ
bWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0ltYWdlRGVjb2Rlcjo6c2V0U2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5k
ZXgpOgorCiAyMDEyLTEyLTA3ICBTY290dCBWaW9sZXQgIDxza3lAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFtjaHJvbWl1bV0gUmVtb3ZlIGxpbnV4IHRoZW1lIHJlbGF0ZWQgZmlsZXMgYW5kIHN3
aXRjaCB0byBkZWZhdWx0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcAppbmRleCA2YjYx
NzUzMDI3ZGNiZTRhMjk5Mzg2MmI2MGRhNGNhNzllM2QwZjc3Li41OTkyYzUwMDNkMThhNmQwNDI0
MjUzZGIxYWU3MDk4N2ZlYmY2MTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAK
QEAgLTc3LDM5ICs3Nyw0MCBAQCB2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24oKQog
ICAgIHNldEluc3RhbmNlKDApOwogfQogCi1jb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFn
ZURlY29kaW5nU3RvcmU6OmxvY2tDb21wbGV0ZUNhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0
b3IqIGdlbmVyYXRvciwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkKK2Jvb2wgSW1hZ2VEZWNv
ZGluZ1N0b3JlOjpsb2NrQ2FjaGUoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciogZ2VuZXJhdG9y
LCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBDYWNoZUNvbmRpdGlvbiBjb25kaXRpb24sIGNv
bnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqKiBjYWNoZWRJbWFnZSwgSW1hZ2VEZWNvZGVyKiogZGVj
b2RlcikKIHsKKyAgICBBU1NFUlQoY2FjaGVkSW1hZ2UpOworCiAgICAgQ2FjaGVFbnRyeSogY2Fj
aGVFbnRyeSA9IDA7CiAgICAgewogICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOwog
ICAgICAgICBDYWNoZU1hcDo6aXRlcmF0b3IgaXRlciA9IG1fY2FjaGVNYXAuZmluZChzdGQ6Om1h
a2VfcGFpcihnZW5lcmF0b3IsIHNjYWxlZFNpemUpKTsKICAgICAgICAgaWYgKGl0ZXIgPT0gbV9j
YWNoZU1hcC5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBjYWNoZUVudHJ5ID0gaXRlci0+dmFsdWUuZ2V0KCk7Ci0gICAgICAg
IGlmICghY2FjaGVFbnRyeS0+Y2FjaGVkSW1hZ2UoKS0+aXNDb21wbGV0ZSgpKQotICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIGlmIChjb25kaXRpb24gPT0gQ2FjaGVNdXN0QmVDb21wbGV0
ZSAmJiAhY2FjaGVFbnRyeS0+Y2FjaGVkSW1hZ2UoKS0+aXNDb21wbGV0ZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vIEluY29tcGxldGUgY2FjaGUgZW50cnkgY2Fu
bm90IGJlIHVzZWQgbW9yZSB0aGFuIG9uY2UuCisgICAgICAgIEFTU0VSVChjYWNoZUVudHJ5LT5j
YWNoZWRJbWFnZSgpLT5pc0NvbXBsZXRlKCkgfHwgIWNhY2hlRW50cnktPnVzZUNvdW50KCkpOwog
CiAgICAgICAgIC8vIEluY3JlbWVudCB1c2UgY291bnQgc3VjaCB0aGF0IGl0IGRvZXNuJ3QgZ2V0
IGV2aWN0ZWQuCiAgICAgICAgIGNhY2hlRW50cnktPmluY3JlbWVudFVzZUNvdW50KCk7CiAgICAg
fQotICAgIGNhY2hlRW50cnktPmNhY2hlZEltYWdlKCktPmJpdG1hcCgpLmxvY2tQaXhlbHMoKTsK
LSAgICByZXR1cm4gY2FjaGVFbnRyeS0+Y2FjaGVkSW1hZ2UoKTsKLX0KIAotY29uc3QgU2NhbGVk
SW1hZ2VGcmFnbWVudCogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb2NrSW5jb21wbGV0ZUNhY2hlKGNv
bnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqIGdlbmVyYXRvciwgY29uc3QgU2tJU2l6ZSYgc2NhbGVk
U2l6ZSkKLXsKLSAgICAvLyBUT0RPOiBJbXBsZW1lbnQuCi0gICAgcmV0dXJuIDA7CisgICAgLy8g
Q29tcGxldGUgY2FjaGUgZW50cnkgZG9lc24ndCBoYXZlIGEgZGVjb2Rlci4KKyAgICBBU1NFUlQo
IWNhY2hlRW50cnktPmNhY2hlZEltYWdlKCktPmlzQ29tcGxldGUoKSB8fCAhY2FjaGVFbnRyeS0+
Y2FjaGVkRGVjb2RlcigpKTsKKworICAgIGlmIChkZWNvZGVyKQorICAgICAgICAqZGVjb2RlciA9
IGNhY2hlRW50cnktPmNhY2hlZERlY29kZXIoKTsKKyAgICAqY2FjaGVkSW1hZ2UgPSBjYWNoZUVu
dHJ5LT5jYWNoZWRJbWFnZSgpOworICAgICgqY2FjaGVkSW1hZ2UpLT5iaXRtYXAoKS5sb2NrUGl4
ZWxzKCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjp1
bmxvY2tDYWNoZShjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiBnZW5lcmF0b3IsIGNvbnN0IFNj
YWxlZEltYWdlRnJhZ21lbnQqIGNhY2hlZEltYWdlKQogewogICAgIGNhY2hlZEltYWdlLT5iaXRt
YXAoKS51bmxvY2tQaXhlbHMoKTsKLSAgICBpZiAoIWNhY2hlZEltYWdlLT5pc0NvbXBsZXRlKCkp
IHsKLSAgICAgICAgLy8gRGVsZXRlIHRoZSBpbWFnZSBpZiBpdCBpcyBpbmNvbXBsZXRlLiBJdCB3
YXMgbmV2ZXIgc3RvcmVkIGluIGNhY2hlLgotICAgICAgICBkZWxldGUgY2FjaGVkSW1hZ2U7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOwog
ICAgIENhY2hlTWFwOjppdGVyYXRvciBpdGVyID0gbV9jYWNoZU1hcC5maW5kKHN0ZDo6bWFrZV9w
YWlyKGdlbmVyYXRvciwgY2FjaGVkSW1hZ2UtPnNjYWxlZFNpemUoKSkpOwpAQCAtMTIzLDcgKzEy
NCw3IEBAIHZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjp1bmxvY2tDYWNoZShjb25zdCBJbWFnZUZy
YW1lR2VuZXJhdG9yKiBnZW5lcmF0b3IsIGNvbnN0CiAgICAgbV9vcmRlcmVkQ2FjaGVMaXN0LmFw
cGVuZChjYWNoZUVudHJ5KTsKIH0KIAotY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbnNlcnRBbmRMb2NrQ2FjaGUoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRv
ciogZ2VuZXJhdG9yLCBQYXNzT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IGltYWdlKQorY29u
c3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnNlcnRBbmRMb2Nr
Q2FjaGUoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciogZ2VuZXJhdG9yLCBQYXNzT3duUHRyPFNj
YWxlZEltYWdlRnJhZ21lbnQ+IGltYWdlLCBQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gZGVjb2Rl
cikKIHsKICAgICAvLyBQcnVuZSBvbGQgY2FjaGUgZW50cmllcyB0byBnaXZlIHNwYWNlIGZvciB0
aGUgbmV3IG9uZS4KICAgICBwcnVuZSgpOwpAQCAtMTMxLDE2ICsxMzIsMTQgQEAgY29uc3QgU2Nh
bGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnNlcnRBbmRMb2NrQ2FjaGUo
Y29uc3QgSW1hZ2VGcmEKICAgICAvLyBMb2NrIHRoZSB1bmRlcmx5aW5nIFNrQml0bWFwIHRvIHBy
ZXZlbnQgaXQgZnJvbSBiZWluZyBwdXJnZWQuCiAgICAgaW1hZ2UtPmJpdG1hcCgpLmxvY2tQaXhl
bHMoKTsKIAotICAgIGlmICghaW1hZ2UtPmlzQ29tcGxldGUoKSkgewotICAgICAgICAvLyBJbmNv
bXBsZXRlIGltYWdlIGlzIG5vdCBzdG9yZWQgaW4gdGhlIGNhY2hlIGFuZCBkZWxldGVkIGFmdGVy
IHVzZS4KLSAgICAgICAgLy8gU2VlIHVubG9ja0NhY2hlKCkuCi0gICAgICAgIC8vIFRPRE86IFdl
IHNob3VsZCBhbGxvdyBpbmNvbXBsZXRlIGltYWdlcyB0byBiZSBzdG9yZWQgdG9nZXRoZXIgd2l0
aAotICAgICAgICAvLyB0aGUgY29ycmVzcG9uZGluZyBJbWFnZURlY29kZXIuCi0gICAgICAgIHJl
dHVybiBpbWFnZS5sZWFrUHRyKCk7Ci0gICAgfQotCiAgICAgU2NhbGVkSW1hZ2VGcmFnbWVudCog
Y2FjaGVkSW1hZ2UgPSBpbWFnZS5nZXQoKTsKLSAgICBPd25QdHI8Q2FjaGVFbnRyeT4gbmV3Q2Fj
aGVFbnRyeSA9IENhY2hlRW50cnk6OmNyZWF0ZUFuZFVzZShnZW5lcmF0b3IsIGltYWdlKTsKKyAg
ICBPd25QdHI8Q2FjaGVFbnRyeT4gbmV3Q2FjaGVFbnRyeTsKKworICAgIC8vIEltYWdlRGVjb2Rl
ciBpcyBub3QgdXNlZCBhbnkgbW9yZSBpZiBjYWNoZSBpcyBjb21wbGV0ZS4KKyAgICBpZiAoaW1h
Z2UtPmlzQ29tcGxldGUoKSkKKyAgICAgICAgbmV3Q2FjaGVFbnRyeSA9IENhY2hlRW50cnk6OmNy
ZWF0ZUFuZFVzZShnZW5lcmF0b3IsIGltYWdlKTsKKyAgICBlbHNlCisgICAgICAgIG5ld0NhY2hl
RW50cnkgPSBDYWNoZUVudHJ5OjpjcmVhdGVBbmRVc2UoZ2VuZXJhdG9yLCBpbWFnZSwgZGVjb2Rl
cik7CiAKICAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOwogICAgIEFTU0VSVCghbV9jYWNo
ZU1hcC5jb250YWlucyhuZXdDYWNoZUVudHJ5LT5jYWNoZUtleSgpKSk7CkBAIC0xNDgsNiArMTQ3
LDMwIEBAIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5z
ZXJ0QW5kTG9ja0NhY2hlKGNvbnN0IEltYWdlRnJhCiAgICAgcmV0dXJuIGNhY2hlZEltYWdlOwog
fQogCitjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFnZURlY29kaW5nU3RvcmU6Om92ZXJ3
cml0ZUFuZExvY2tDYWNoZShjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiBnZW5lcmF0b3IsIGNv
bnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGNhY2hlZEltYWdlLCBQYXNzT3duUHRyPFNjYWxlZElt
YWdlRnJhZ21lbnQ+IG5ld0ltYWdlKQoreworICAgIGNhY2hlZEltYWdlLT5iaXRtYXAoKS51bmxv
Y2tQaXhlbHMoKTsKKworICAgIE93blB0cjxJbWFnZURlY29kZXI+IHRyYXNoOworICAgIGNvbnN0
IFNjYWxlZEltYWdlRnJhZ21lbnQqIG5ld0NhY2hlZEltYWdlID0gMDsKKyAgICB7CisgICAgICAg
IE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAgICAgIENhY2hlTWFwOjppdGVyYXRvciBp
dGVyID0gbV9jYWNoZU1hcC5maW5kKHN0ZDo6bWFrZV9wYWlyKGdlbmVyYXRvciwgY2FjaGVkSW1h
Z2UtPnNjYWxlZFNpemUoKSkpOworICAgICAgICBBU1NFUlQoaXRlciAhPSBtX2NhY2hlTWFwLmVu
ZCgpKTsKKworICAgICAgICBDYWNoZUVudHJ5KiBjYWNoZUVudHJ5ID0gaXRlci0+dmFsdWUuZ2V0
KCk7CisgICAgICAgIEFTU0VSVChjYWNoZUVudHJ5LT51c2VDb3VudCgpID09IDEpOworICAgICAg
ICBBU1NFUlQoIWNhY2hlRW50cnktPmNhY2hlZEltYWdlKCktPmlzQ29tcGxldGUoKSk7CisKKyAg
ICAgICAgdHJhc2ggPSBjYWNoZUVudHJ5LT5vdmVyd3JpdGVDYWNoZWRJbWFnZShuZXdJbWFnZSk7
CisgICAgICAgIG5ld0NhY2hlZEltYWdlID0gY2FjaGVFbnRyeS0+Y2FjaGVkSW1hZ2UoKTsKKyAg
ICB9CisKKyAgICAvLyBMb2NrIHRoZSB1bmRlcmx5aW5nIFNrQml0bWFwIHRvIHByZXZlbnQgaXQg
ZnJvbSBiZWluZyBwdXJnZWQuCisgICAgbmV3Q2FjaGVkSW1hZ2UtPmJpdG1hcCgpLmxvY2tQaXhl
bHMoKTsKKyAgICByZXR1cm4gbmV3Q2FjaGVkSW1hZ2U7Cit9CisKIHZvaWQgSW1hZ2VEZWNvZGlu
Z1N0b3JlOjpyZW1vdmVDYWNoZUluZGV4ZWRCeUdlbmVyYXRvcihjb25zdCBJbWFnZUZyYW1lR2Vu
ZXJhdG9yKiBnZW5lcmF0b3IpCiB7CiAgICAgVmVjdG9yPE93blB0cjxDYWNoZUVudHJ5PiA+IGNh
Y2hlRW50cmllc1RvRGVsZXRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaAppbmRleCA2YWYw
Yzg1Njg4OTA4YzkzOGExMDdmNzNkZTk2Nzk1OGM0YTFjMzgzLi41ZjFmYjI4YWViNDBiOTI0NWRj
ZDhjODI3ZTI4NmY3ODI0YmJiZjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaApAQCAt
MjYsNiArMjYsNyBAQAogI2lmbmRlZiBJbWFnZURlY29kaW5nU3RvcmVfaAogI2RlZmluZSBJbWFn
ZURlY29kaW5nU3RvcmVfaAogCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAi
U2NhbGVkSW1hZ2VGcmFnbWVudC5oIgogI2luY2x1ZGUgIlNrVHlwZXMuaCIKICNpbmNsdWRlICJT
a1NpemUuaCIKQEAgLTQwLDEyICs0MSwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIEltYWdlRGVjb2RlcjsKIGNsYXNzIEltYWdlRnJhbWVHZW5lcmF0b3I7CiBjbGFzcyBTaGFy
ZWRCdWZmZXI7CiAKIGNsYXNzIEltYWdlRGVjb2RpbmdTdG9yZSB7CiBwdWJsaWM6CisgICAgZW51
bSBDYWNoZUNvbmRpdGlvbiB7CisgICAgICAgIENhY2hlTXVzdEJlQ29tcGxldGUsCisgICAgICAg
IENhY2hlQ2FuQmVJbmNvbXBsZXRlCisgICAgfTsKKwogICAgIHN0YXRpYyBQYXNzT3duUHRyPElt
YWdlRGVjb2RpbmdTdG9yZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IEltYWdlRGVj
b2RpbmdTdG9yZSk7IH0KICAgICB+SW1hZ2VEZWNvZGluZ1N0b3JlKCk7CiAKQEAgLTUzLDEwICs1
OCwxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZU9uY2UoKTsKICAgICBz
dGF0aWMgdm9pZCBzaHV0ZG93bigpOwogCi0gICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCog
bG9ja0NvbXBsZXRlQ2FjaGUoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciosIGNvbnN0IFNrSVNp
emUmIHNjYWxlZFNpemUpOwotICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGxvY2tJbmNv
bXBsZXRlQ2FjaGUoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciosIGNvbnN0IFNrSVNpemUmIHNj
YWxlZFNpemUpOworICAgIC8vIElmIGNhY2hlTXVzdEJlQ29tcGxldGUgaXMgdHJ1ZSB0aGVuIG9u
bHkgcmV0dXJuIGEgY29tcGxldGUgY2FjaGUuCisgICAgYm9vbCBsb2NrQ2FjaGUoY29uc3QgSW1h
Z2VGcmFtZUdlbmVyYXRvciosIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIENhY2hlQ29uZGl0
aW9uLCBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiosIEltYWdlRGVjb2RlcioqID0gMCk7CiAg
ICAgdm9pZCB1bmxvY2tDYWNoZShjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiwgY29uc3QgU2Nh
bGVkSW1hZ2VGcmFnbWVudCopOwotICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGluc2Vy
dEFuZExvY2tDYWNoZShjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiwgUGFzc093blB0cjxTY2Fs
ZWRJbWFnZUZyYWdtZW50Pik7CisgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogaW5zZXJ0
QW5kTG9ja0NhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqLCBQYXNzT3duUHRyPFNjYWxl
ZEltYWdlRnJhZ21lbnQ+LCBQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gPSBudWxscHRyKTsKKwor
ICAgIC8vIE92ZXJ3cml0ZSBhbiBleGlzdGluZyBjYWNoZWQgaW1hZ2UuIEl0IGlzIHVubG9ja2Vk
IGFuZCB0aGVuIHJlcGxhY2VkIHdpdGggdGhlIG5ldyBpbWFnZS4KKyAgICAvLyBUaGUgZXhpc3Rp
bmcgY2FjaGVkIGltYWdlIG11c3QgYmUgYWxyZWFkeSBsb2NrZWQgYW5kIGluY29tcGxldGUuCisg
ICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogb3ZlcndyaXRlQW5kTG9ja0NhY2hlKGNvbnN0
IEltYWdlRnJhbWVHZW5lcmF0b3IqLCBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiwgUGFzc093
blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50Pik7CiAKICAgICAvLyBSZW1vdmUgYWxsIGNhY2hlIGVu
dHJpZXMgaW5kZXhlZCBieSBJbWFnZUZyYW1lR2VuZXJhdG9yLgogICAgIHZvaWQgcmVtb3ZlQ2Fj
aGVJbmRleGVkQnlHZW5lcmF0b3IoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciopOwpAQCAtNzEs
MTYgKzgwLDE3IEBAIHByaXZhdGU6CiAgICAgY2xhc3MgQ2FjaGVFbnRyeSA6IHB1YmxpYyBEb3Vi
bHlMaW5rZWRMaXN0Tm9kZTxDYWNoZUVudHJ5PiB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBXVEY6
OkRvdWJseUxpbmtlZExpc3ROb2RlPENhY2hlRW50cnk+OwogICAgIHB1YmxpYzoKLSAgICAgICAg
c3RhdGljIFBhc3NPd25QdHI8Q2FjaGVFbnRyeT4gY3JlYXRlQW5kVXNlKGNvbnN0IEltYWdlRnJh
bWVHZW5lcmF0b3IqIGdlbmVyYXRvciwgUGFzc093blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBp
bWFnZSkKKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8Q2FjaGVFbnRyeT4gY3JlYXRlQW5kVXNl
KGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqIGdlbmVyYXRvciwgUGFzc093blB0cjxTY2FsZWRJ
bWFnZUZyYWdtZW50PiBpbWFnZSwgUGFzc093blB0cjxJbWFnZURlY29kZXI+IGRlY29kZXIgPSBu
dWxscHRyKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENhY2hl
RW50cnkoZ2VuZXJhdG9yLCBpbWFnZSwgMSkpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBDYWNoZUVudHJ5KGdlbmVyYXRvciwgaW1hZ2UsIGRlY29kZXIsIDEpKTsKICAgICAgICAg
fQogCi0gICAgICAgIENhY2hlRW50cnkoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciogZ2VuZXJh
dG9yLCBQYXNzT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IGltYWdlLCBpbnQgY291bnQpCisg
ICAgICAgIENhY2hlRW50cnkoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciogZ2VuZXJhdG9yLCBQ
YXNzT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IGltYWdlLCBQYXNzT3duUHRyPEltYWdlRGVj
b2Rlcj4gZGVjb2RlciwgaW50IGNvdW50KQogICAgICAgICAgICAgOiBtX3ByZXYoMCkKICAgICAg
ICAgICAgICwgbV9uZXh0KDApCiAgICAgICAgICAgICAsIG1fZ2VuZXJhdG9yKGdlbmVyYXRvcikK
ICAgICAgICAgICAgICwgbV9jYWNoZWRJbWFnZShpbWFnZSkKKyAgICAgICAgICAgICwgbV9jYWNo
ZWREZWNvZGVyKGRlY29kZXIpCiAgICAgICAgICAgICAsIG1fdXNlQ291bnQoY291bnQpCiAgICAg
ICAgIHsKICAgICAgICAgfQpAQCAtOTIsNiArMTAyLDE1IEBAIHByaXZhdGU6CiAKICAgICAgICAg
Q2FjaGVJZGVudGlmaWVyIGNhY2hlS2V5KCkgY29uc3QgeyByZXR1cm4gc3RkOjptYWtlX3BhaXIo
bV9nZW5lcmF0b3IsIG1fY2FjaGVkSW1hZ2UtPnNjYWxlZFNpemUoKSk7IH0KICAgICAgICAgY29u
c3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogY2FjaGVkSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2Nh
Y2hlZEltYWdlLmdldCgpOyB9CisgICAgICAgIFNjYWxlZEltYWdlRnJhZ21lbnQqIGNhY2hlZElt
YWdlKCkgeyByZXR1cm4gbV9jYWNoZWRJbWFnZS5nZXQoKTsgfQorICAgICAgICBJbWFnZURlY29k
ZXIqIGNhY2hlZERlY29kZXIoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZERlY29kZXIuZ2V0KCk7
IH0KKyAgICAgICAgUGFzc093blB0cjxJbWFnZURlY29kZXI+IG92ZXJ3cml0ZUNhY2hlZEltYWdl
KFBhc3NPd25QdHI8U2NhbGVkSW1hZ2VGcmFnbWVudD4gaW1hZ2UpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1fY2FjaGVkSW1hZ2UgPSBpbWFnZTsKKyAgICAgICAgICAgIGlmIChtX2NhY2hlZElt
YWdlLT5pc0NvbXBsZXRlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2FjaGVkRGVjb2Rl
ci5yZWxlYXNlKCk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQogICAg
ICAgICBpbnQgdXNlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3VzZUNvdW50OyB9CiAgICAgICAg
IHZvaWQgaW5jcmVtZW50VXNlQ291bnQoKSB7ICsrbV91c2VDb3VudDsgfQogICAgICAgICB2b2lk
IGRlY3JlbWVudFVzZUNvdW50KCkgeyAtLW1fdXNlQ291bnQ7IEFTU0VSVChtX3VzZUNvdW50ID49
IDApOyB9CkBAIC0xMDUsNiArMTI0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgQ2FjaGVFbnRyeSog
bV9uZXh0OwogICAgICAgICBjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiBtX2dlbmVyYXRvcjsK
ICAgICAgICAgT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IG1fY2FjaGVkSW1hZ2U7CisgICAg
ICAgIE93blB0cjxJbWFnZURlY29kZXI+IG1fY2FjaGVkRGVjb2RlcjsKICAgICAgICAgaW50IG1f
dXNlQ291bnQ7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcAppbmRl
eCBlZjg1MDU1YzRkYzIzYTRkNjAwZjM5MDhjOWYwNTM5MWZhOWM0OWE0Li4yYzJhMWQyYjBiODRi
NmZiNGUzYzQxNTYzNGMwZmY1YmJkNWE2ODI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJh
dG9yLmNwcApAQCAtNDgsNiArNDgsNyBAQCBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJlc2l6ZU1l
dGhvZCByZXNpemVNZXRob2QoKQogSW1hZ2VGcmFtZUdlbmVyYXRvcjo6SW1hZ2VGcmFtZUdlbmVy
YXRvcihjb25zdCBTa0lTaXplJiBmdWxsU2l6ZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRh
dGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogICAgIDogbV9mdWxsU2l6ZShmdWxsU2l6ZSkKICAg
ICAsIG1fYWxsRGF0YVJlY2VpdmVkKGZhbHNlKQorICAgICwgbV9kZWNvZGVGYWlsZWRBbmRFbXB0
eShmYWxzZSkKIHsKICAgICBzZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CiB9CkBAIC03
Niw5ICs3NywxMiBAQCBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFnZUZyYW1lR2VuZXJh
dG9yOjpkZWNvZGVBbmRTY2FsZShjb25zdCBTa0lTaXplJiBzYwogICAgIC8vIFByZXZlbnRzIGNv
bmN1cnJlbnQgZGVjb2RlIG9yIHNjYWxlIG9wZXJhdGlvbnMgb24gdGhlIHNhbWUgaW1hZ2UgZGF0
YS4KICAgICAvLyBNdWx0aXBsZSBMYXp5RGVjb2RpbmdQaXhlbFJlZnMgY2FuIGNhbGwgdGhpcyBt
ZXRob2QgYXQgdGhlIHNhbWUgdGltZS4KICAgICBNdXRleExvY2tlciBsb2NrKG1fZGVjb2RlTXV0
ZXgpOworICAgIGlmIChtX2RlY29kZUZhaWxlZEFuZEVtcHR5KQorICAgICAgICByZXR1cm4gMDsK
KwogICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGNhY2hlZEltYWdlID0gMDsKIAotICAg
IGNhY2hlZEltYWdlID0gdHJ5VG9Mb2NrQ2FjaGUoc2NhbGVkU2l6ZSk7CisgICAgY2FjaGVkSW1h
Z2UgPSB0cnlUb0xvY2tDb21wbGV0ZUNhY2hlKHNjYWxlZFNpemUpOwogICAgIGlmIChjYWNoZWRJ
bWFnZSkKICAgICAgICAgcmV0dXJuIGNhY2hlZEltYWdlOwogCkBAIC04NiwxNSArOTAsMjIgQEAg
Y29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VGcmFtZUdlbmVyYXRvcjo6ZGVjb2RlQW5k
U2NhbGUoY29uc3QgU2tJU2l6ZSYgc2MKICAgICBpZiAoY2FjaGVkSW1hZ2UpCiAgICAgICAgIHJl
dHVybiBjYWNoZWRJbWFnZTsKIAorICAgIGNhY2hlZEltYWdlID0gdHJ5VG9SZXN1bWVEZWNvZGVB
bmRTY2FsZShzY2FsZWRTaXplKTsKKyAgICBpZiAoY2FjaGVkSW1hZ2UpCisgICAgICAgIHJldHVy
biBjYWNoZWRJbWFnZTsKKwogICAgIGNhY2hlZEltYWdlID0gdHJ5VG9EZWNvZGVBbmRTY2FsZShz
Y2FsZWRTaXplKTsKICAgICBpZiAoY2FjaGVkSW1hZ2UpCiAgICAgICAgIHJldHVybiBjYWNoZWRJ
bWFnZTsKICAgICByZXR1cm4gMDsKIH0KIAotY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1h
Z2VGcmFtZUdlbmVyYXRvcjo6dHJ5VG9Mb2NrQ2FjaGUoY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6
ZSkKK2NvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIEltYWdlRnJhbWVHZW5lcmF0b3I6OnRyeVRv
TG9ja0NvbXBsZXRlQ2FjaGUoY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkKIHsKLSAgICByZXR1
cm4gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5sb2NrQ29tcGxldGVDYWNoZSh0aGlz
LCBzY2FsZWRTaXplKTsKKyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBjYWNoZWRJbWFn
ZSA9IDA7CisgICAgaWYgKEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+bG9ja0NhY2hl
KHRoaXMsIHNjYWxlZFNpemUsIEltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVNdXN0QmVDb21wbGV0
ZSwgJmNhY2hlZEltYWdlKSkKKyAgICAgICAgcmV0dXJuIGNhY2hlZEltYWdlOworICAgIHJldHVy
biAwOwogfQogCiBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFnZUZyYW1lR2VuZXJhdG9y
Ojp0cnlUb1NjYWxlKGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGZ1bGxTaXplSW1hZ2UsIGNv
bnN0IFNrSVNpemUmIHNjYWxlZFNpemUpCkBAIC0xMDQsMTAgKzExNSw3IEBAIGNvbnN0IFNjYWxl
ZEltYWdlRnJhZ21lbnQqIEltYWdlRnJhbWVHZW5lcmF0b3I6OnRyeVRvU2NhbGUoY29uc3QgU2Nh
bGVkSW1hZ2VGcmFnCiAgICAgaWYgKHNjYWxlZFNpemUgPT0gbV9mdWxsU2l6ZSkKICAgICAgICAg
cmV0dXJuIDA7CiAKLSAgICBpZiAoIWZ1bGxTaXplSW1hZ2UpCi0gICAgICAgIGZ1bGxTaXplSW1h
Z2UgPSBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmxvY2tDb21wbGV0ZUNhY2hlKHRo
aXMsIG1fZnVsbFNpemUpOwotCi0gICAgaWYgKCFmdWxsU2l6ZUltYWdlKQorICAgIGlmICghZnVs
bFNpemVJbWFnZSAmJiAhSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5sb2NrQ2FjaGUo
dGhpcywgbV9mdWxsU2l6ZSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjpDYWNoZU11c3RCZUNvbXBsZXRl
LCAmZnVsbFNpemVJbWFnZSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgU2tCaXRtYXAgc2Nh
bGVkQml0bWFwID0gc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSZXNpemUoCkBAIC0xMTUsNDIgKzEy
Myw5OCBAQCBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFnZUZyYW1lR2VuZXJhdG9yOjp0
cnlUb1NjYWxlKGNvbnN0IFNjYWxlZEltYWdlRnJhZwogICAgIE93blB0cjxTY2FsZWRJbWFnZUZy
YWdtZW50PiBzY2FsZWRJbWFnZSA9IFNjYWxlZEltYWdlRnJhZ21lbnQ6OmNyZWF0ZShzY2FsZWRT
aXplLCBzY2FsZWRCaXRtYXAsIGZ1bGxTaXplSW1hZ2UtPmlzQ29tcGxldGUoKSk7CiAKICAgICBJ
bWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKHRoaXMsIGZ1bGxTaXpl
SW1hZ2UpOworCisgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogY2FjaGVkSW1hZ2UgPSAw
OworCisgICAgLy8gSWYgYSBjYWNoZSBsb29rdXAgaXMgc3VjY2Vzc2Z1bCB0aGVuIHRoZSBjYWNo
ZSBlbnRyeSBtdXN0IGJlIGluY29tcGxldGUKKyAgICAvLyB0aGVyZWZvcmUgaXQgaXMgc2FmZSB0
byBvdmVyd3JpdGUuCisgICAgaWYgKEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+bG9j
a0NhY2hlKHRoaXMsIHNjYWxlZFNpemUsIEltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVDYW5CZUlu
Y29tcGxldGUsICZjYWNoZWRJbWFnZSkpCisgICAgICAgIHJldHVybiBJbWFnZURlY29kaW5nU3Rv
cmU6Omluc3RhbmNlKCktPm92ZXJ3cml0ZUFuZExvY2tDYWNoZSh0aGlzLCBjYWNoZWRJbWFnZSwg
c2NhbGVkSW1hZ2UucmVsZWFzZSgpKTsKICAgICByZXR1cm4gSW1hZ2VEZWNvZGluZ1N0b3JlOjpp
bnN0YW5jZSgpLT5pbnNlcnRBbmRMb2NrQ2FjaGUodGhpcywgc2NhbGVkSW1hZ2UucmVsZWFzZSgp
KTsKIH0KIAorY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VGcmFtZUdlbmVyYXRvcjo6
dHJ5VG9SZXN1bWVEZWNvZGVBbmRTY2FsZShjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKQorewor
ICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGNhY2hlZEltYWdlID0gMDsKKyAgICBJbWFn
ZURlY29kZXIqIGNhY2hlZERlY29kZXIgPSAwOworICAgIGlmICghSW1hZ2VEZWNvZGluZ1N0b3Jl
OjppbnN0YW5jZSgpLT5sb2NrQ2FjaGUodGhpcywgbV9mdWxsU2l6ZSwgSW1hZ2VEZWNvZGluZ1N0
b3JlOjpDYWNoZUNhbkJlSW5jb21wbGV0ZSwgJmNhY2hlZEltYWdlLCAmY2FjaGVkRGVjb2Rlcikp
CisgICAgICAgIHJldHVybiAwOworICAgIEFTU0VSVChjYWNoZWREZWNvZGVyKTsKKworICAgIE93
blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBmdWxsU2l6ZUltYWdlID0gZGVjb2RlKCZjYWNoZWRE
ZWNvZGVyKTsKKworICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGNhY2hlZEZ1bGxTaXpl
SW1hZ2UgPSBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPm92ZXJ3cml0ZUFuZExvY2tD
YWNoZSgKKyAgICAgICAgdGhpcywgY2FjaGVkSW1hZ2UsIGZ1bGxTaXplSW1hZ2UucmVsZWFzZSgp
KTsKKworICAgIGlmIChtX2Z1bGxTaXplID09IHNjYWxlZFNpemUpCisgICAgICAgIHJldHVybiBj
YWNoZWRGdWxsU2l6ZUltYWdlOworICAgIHJldHVybiB0cnlUb1NjYWxlKGNhY2hlZEZ1bGxTaXpl
SW1hZ2UsIHNjYWxlZFNpemUpOworfQorCiBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFn
ZUZyYW1lR2VuZXJhdG9yOjp0cnlUb0RlY29kZUFuZFNjYWxlKGNvbnN0IFNrSVNpemUmIHNjYWxl
ZFNpemUpCiB7CisgICAgSW1hZ2VEZWNvZGVyKiBkZWNvZGVyID0gMDsKKyAgICBPd25QdHI8U2Nh
bGVkSW1hZ2VGcmFnbWVudD4gZnVsbFNpemVJbWFnZSA9IGRlY29kZSgmZGVjb2Rlcik7CisKKyAg
ICBpZiAoIWRlY29kZXIpCisgICAgICAgIHJldHVybiAwOworCisgICAgT3duUHRyPEltYWdlRGVj
b2Rlcj4gZGVjb2RlckNvbnRhaW5lciA9IGFkb3B0UHRyKGRlY29kZXIpOworCisgICAgaWYgKCFm
dWxsU2l6ZUltYWdlKSB7CisgICAgICAgIC8vIElmIGRlY29kZSBoYXMgZmFpbGVkIGFuZCByZXN1
bHRlZCBhbiBlbXB0eSBpbWFnZSB3ZSBuZWVkIHRvIG1ha2UKKyAgICAgICAgLy8gc3VyZSB3ZSBk
b24ndCBkbyB3YXN0ZWQgd29yayBpbiB0aGUgZnV0dXJlLgorICAgICAgICBtX2RlY29kZUZhaWxl
ZEFuZEVtcHR5ID0gZGVjb2RlckNvbnRhaW5lci0+ZmFpbGVkKCk7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKworICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGNhY2hlZEZ1bGxTaXpl
SW1hZ2UgPSBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmluc2VydEFuZExvY2tDYWNo
ZSgKKyAgICAgICAgdGhpcywgZnVsbFNpemVJbWFnZS5yZWxlYXNlKCksIGRlY29kZXJDb250YWlu
ZXIucmVsZWFzZSgpKTsKKworICAgIGlmIChtX2Z1bGxTaXplID09IHNjYWxlZFNpemUpCisgICAg
ICAgIHJldHVybiBjYWNoZWRGdWxsU2l6ZUltYWdlOworICAgIHJldHVybiB0cnlUb1NjYWxlKGNh
Y2hlZEZ1bGxTaXplSW1hZ2UsIHNjYWxlZFNpemUpOworfQorCitQYXNzT3duUHRyPFNjYWxlZElt
YWdlRnJhZ21lbnQ+IEltYWdlRnJhbWVHZW5lcmF0b3I6OmRlY29kZShJbWFnZURlY29kZXIqKiBk
ZWNvZGVyKQoreworICAgIEFTU0VSVChkZWNvZGVyKTsKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVy
PiBkYXRhOwogICAgIGJvb2wgYWxsRGF0YVJlY2VpdmVkID0gZmFsc2U7Ci0gICAgewotICAgICAg
ICBNdXRleExvY2tlciBsb2NrKG1fZGF0YU11dGV4KTsKKyAgICBwcmVwYXJlRGF0YSgmZGF0YSwg
JmFsbERhdGFSZWNlaXZlZCk7CisKKyAgICAvLyBUcnkgdG8gY3JlYXRlIGFuIEltYWdlRGVjb2Rl
ciBpZiB3ZSBhcmUgbm90IGdpdmVuIG9uZS4KKyAgICBpZiAoISpkZWNvZGVyKSB7CisgICAgICAg
ICpkZWNvZGVyID0gSW1hZ2VEZWNvZGVyOjpjcmVhdGUoKmRhdGEuZ2V0KCksIEltYWdlU291cmNl
OjpBbHBoYVByZW11bHRpcGxpZWQsIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFw
cGxpZWQpOworCisgICAgICAgIGlmICghKmRlY29kZXIgJiYgbV9pbWFnZURlY29kZXJGYWN0b3J5
KQorICAgICAgICAgICAgKmRlY29kZXIgPSBtX2ltYWdlRGVjb2RlckZhY3RvcnktPmNyZWF0ZSgp
LmxlYWtQdHIoKTsKIAotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGRvIGEgc2hhbGxvdyBj
b3B5IGluc3RlYWQuIE5vdyB3ZSdyZSByZXN0cmljdGVkIGJ5IHRoZSBBUEkgb2YgU2hhcmVkQnVm
ZmVyLgotICAgICAgICBkYXRhID0gbV9kYXRhLT5jb3B5KCk7Ci0gICAgICAgIGFsbERhdGFSZWNl
aXZlZCA9IG1fYWxsRGF0YVJlY2VpdmVkOworICAgICAgICBpZiAoISpkZWNvZGVyKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgT3duUHRyPEltYWdlRGVjb2Rlcj4g
ZGVjb2RlcihhZG9wdFB0cihJbWFnZURlY29kZXI6OmNyZWF0ZSgqZGF0YS5nZXQoKSwgSW1hZ2VT
b3VyY2U6OkFscGhhUHJlbXVsdGlwbGllZCwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9m
aWxlQXBwbGllZCkpKTsKLSAgICBpZiAoIWRlY29kZXIgJiYgbV9pbWFnZURlY29kZXJGYWN0b3J5
KQotICAgICAgICBkZWNvZGVyID0gbV9pbWFnZURlY29kZXJGYWN0b3J5LT5jcmVhdGUoKTsKLSAg
ICBpZiAoIWRlY29kZXIpCi0gICAgICAgIHJldHVybiAwOworICAgICgqZGVjb2RlciktPnNldERh
dGEoZGF0YS5nZXQoKSwgYWxsRGF0YVJlY2VpdmVkKTsKKyAgICBJbWFnZUZyYW1lKiBmcmFtZSA9
ICgqZGVjb2RlciktPmZyYW1lQnVmZmVyQXRJbmRleCgwKTsKKyAgICAoKmRlY29kZXIpLT5zZXRE
YXRhKDAsIGZhbHNlKTsgLy8gVW5yZWYgU2hhcmVkQnVmZmVyIGZyb20gSW1hZ2VEZWNvZGVyLgog
Ci0gICAgZGVjb2Rlci0+c2V0RGF0YShkYXRhLmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQpOwotICAg
IEltYWdlRnJhbWUqIGZyYW1lID0gZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KDApOwogICAg
IGlmICghZnJhbWUgfHwgZnJhbWUtPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkp
Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGJvb2wg
aXNDb21wbGV0ZSA9IGZyYW1lLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRl
OwogICAgIFNrQml0bWFwIGZ1bGxTaXplQml0bWFwID0gZnJhbWUtPmdldFNrQml0bWFwKCk7CiAg
ICAgQVNTRVJUKGZ1bGxTaXplQml0bWFwLndpZHRoKCkgPT0gbV9mdWxsU2l6ZS53aWR0aCgpICYm
IGZ1bGxTaXplQml0bWFwLmhlaWdodCgpID09IG1fZnVsbFNpemUuaGVpZ2h0KCkpOwogCi0gICAg
Y29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogZnVsbFNpemVJbWFnZSA9IEltYWdlRGVjb2RpbmdT
dG9yZTo6aW5zdGFuY2UoKS0+aW5zZXJ0QW5kTG9ja0NhY2hlKAotICAgICAgICB0aGlzLCBTY2Fs
ZWRJbWFnZUZyYWdtZW50OjpjcmVhdGUobV9mdWxsU2l6ZSwgZnVsbFNpemVCaXRtYXAsIGlzQ29t
cGxldGUpKTsKKyAgICByZXR1cm4gU2NhbGVkSW1hZ2VGcmFnbWVudDo6Y3JlYXRlKG1fZnVsbFNp
emUsIGZ1bGxTaXplQml0bWFwLCBpc0NvbXBsZXRlKTsKK30KIAotICAgIGlmIChtX2Z1bGxTaXpl
ID09IHNjYWxlZFNpemUpCi0gICAgICAgIHJldHVybiBmdWxsU2l6ZUltYWdlOwotICAgIHJldHVy
biB0cnlUb1NjYWxlKGZ1bGxTaXplSW1hZ2UsIHNjYWxlZFNpemUpOwordm9pZCBJbWFnZUZyYW1l
R2VuZXJhdG9yOjpwcmVwYXJlRGF0YShSZWZQdHI8U2hhcmVkQnVmZmVyPiogZGF0YSwgYm9vbCog
YWxsRGF0YVJlY2VpdmVkKQoreworICAgIE11dGV4TG9ja2VyIGxvY2sobV9kYXRhTXV0ZXgpOwor
CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkbyBhIHNoYWxsb3cgY29weSBpbnN0ZWFkLiBOb3cg
d2UncmUgcmVzdHJpY3RlZCBieSB0aGUgQVBJIG9mIFNoYXJlZEJ1ZmZlci4KKyAgICAqZGF0YSA9
IG1fZGF0YS0+Y29weSgpOworICAgICphbGxEYXRhUmVjZWl2ZWQgPSBtX2FsbERhdGFSZWNlaXZl
ZDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRv
ci5oCmluZGV4IDA4MzFjNDQ5ODIxMTRmNGE2NmM2OTY3ZTlmMmI2OGNhMDMzY2Y1OTcuLmJhNDlh
YTkxOTI0YWY5YTE3Y2M1Mzk1N2M0N2MwZDNmODM5NGQxYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1l
R2VuZXJhdG9yLmgKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZ1ByaW1pdGl2ZXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNjYsMTMgKzY3LDE5IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICAv
LyBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgd2hpbGUgbV9kZWNvZGVNdXRleCBpcyBsb2NrZWQu
Ci0gICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogdHJ5VG9Mb2NrQ2FjaGUoY29uc3QgU2tJ
U2l6ZSYgc2NhbGVkU2l6ZSk7CisgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogdHJ5VG9M
b2NrQ29tcGxldGVDYWNoZShjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKTsKICAgICBjb25zdCBT
Y2FsZWRJbWFnZUZyYWdtZW50KiB0cnlUb1NjYWxlKGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQq
IGZ1bGxTaXplSW1hZ2UsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpOworICAgIGNvbnN0IFNj
YWxlZEltYWdlRnJhZ21lbnQqIHRyeVRvUmVzdW1lRGVjb2RlQW5kU2NhbGUoY29uc3QgU2tJU2l6
ZSYgc2NhbGVkU2l6ZSk7CiAgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogdHJ5VG9EZWNv
ZGVBbmRTY2FsZShjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKTsKIAorICAgIC8vIFVzZSB0aGUg
Z2l2ZW4gZGVjb2RlciB0byBkZWNvZGUuIElmIGEgZGVjb2RlciBpcyBub3QgZ2l2ZW4gdGhlbiB0
cnkgdG8gY3JlYXRlIG9uZS4KKyAgICBQYXNzT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IGRl
Y29kZShJbWFnZURlY29kZXIqKik7CisgICAgdm9pZCBwcmVwYXJlRGF0YShSZWZQdHI8U2hhcmVk
QnVmZmVyPiosIGJvb2wqIGFsbERhdGFSZWNlaXZlZCk7CisKICAgICBTa0lTaXplIG1fZnVsbFNp
emU7CiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOwogICAgIGJvb2wgbV9hbGxEYXRh
UmVjZWl2ZWQ7CisgICAgYm9vbCBtX2RlY29kZUZhaWxlZEFuZEVtcHR5OwogCiAgICAgT3duUHRy
PEltYWdlRGVjb2RlckZhY3Rvcnk+IG1faW1hZ2VEZWNvZGVyRmFjdG9yeTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5n
UGl4ZWxSZWYuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwCmluZGV4IGYzMTIwZTc5ZDgwZWQ1YWI0NDAzMjc0NWVi
MTYxZGZjNDA4ZDg5M2UuLjAwMjU4YzYyMTQ1ZjE2ZDI0NWI1NThmNzQyYjUyZjg2Y2RiZTgzYWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
enlEZWNvZGluZ1BpeGVsUmVmLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAKQEAgLTYwLDcgKzYwLDggQEAg
dm9pZCogTGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uTG9ja1BpeGVscyhTa0NvbG9yVGFibGUqKikK
ICAgICBtX211dGV4LmxvY2soKTsKICAgICBBU1NFUlQoIW1fbG9ja2VkQ2FjaGVkSW1hZ2UpOwog
Ci0gICAgbV9sb2NrZWRDYWNoZWRJbWFnZSA9IEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2Uo
KS0+bG9ja0NvbXBsZXRlQ2FjaGUobV9mcmFtZUdlbmVyYXRvci5nZXQoKSwgbV9zY2FsZWRTaXpl
KTsKKyAgICBpZiAoIUltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+bG9ja0NhY2hlKG1f
ZnJhbWVHZW5lcmF0b3IuZ2V0KCksIG1fc2NhbGVkU2l6ZSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjpD
YWNoZU11c3RCZUNvbXBsZXRlLCAmbV9sb2NrZWRDYWNoZWRJbWFnZSkpCisgICAgICAgIG1fbG9j
a2VkQ2FjaGVkSW1hZ2UgPSAwOwogCiAgICAgLy8gVXNlIEltYWdlRnJhbWVHZW5lcmF0b3IgdG8g
Z2VuZXJhdGUgdGhlIGltYWdlLiBJdCB3aWxsIGxvY2sgdGhlIGNhY2hlCiAgICAgLy8gZW50cnkg
Zm9yIHVzLgpAQCAtOTEsMTAgKzkyLDEzIEBAIGJvb2wgTGF6eURlY29kaW5nUGl4ZWxSZWY6Om9u
TG9ja1BpeGVsc0FyZVdyaXRhYmxlKCkgY29uc3QKIAogYm9vbCBMYXp5RGVjb2RpbmdQaXhlbFJl
Zjo6UHJlcGFyZVRvRGVjb2RlKGNvbnN0IExhenlQaXhlbFJlZjo6UHJlcGFyZVBhcmFtcyYgcGFy
YW1zKQogewotICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CiAgICAgLy8gVE9ETzogY2hl
Y2sgaWYgb25seSBhIHBhcnRpY3VsYXIgcmVjdCBpcyBhdmFpbGFibGUgaW4gaW1hZ2UgY2FjaGUu
CiAgICAgVU5VU0VEX1BBUkFNKHBhcmFtcyk7Ci0gICAgcmV0dXJuIEltYWdlRGVjb2RpbmdTdG9y
ZTo6aW5zdGFuY2UoKS0+bG9ja0NvbXBsZXRlQ2FjaGUobV9mcmFtZUdlbmVyYXRvci5nZXQoKSwg
bV9zY2FsZWRTaXplKTsKKyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBjYWNoZWRJbWFn
ZSA9IDA7CisgICAgYm9vbCBjYWNoZWQgPSBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCkt
PmxvY2tDYWNoZShtX2ZyYW1lR2VuZXJhdG9yLmdldCgpLCBtX3NjYWxlZFNpemUsIEltYWdlRGVj
b2RpbmdTdG9yZTo6Q2FjaGVNdXN0QmVDb21wbGV0ZSwgJmNhY2hlZEltYWdlKTsKKyAgICBpZiAo
Y2FjaGVkKQorICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0Nh
Y2hlKG1fZnJhbWVHZW5lcmF0b3IuZ2V0KCksIGNhY2hlZEltYWdlKTsKKyAgICByZXR1cm4gY2Fj
aGVkOwogfQogCiB2b2lkIExhenlEZWNvZGluZ1BpeGVsUmVmOjpEZWNvZGUoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2NhbGVkSW1hZ2VG
cmFnbWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Nh
bGVkSW1hZ2VGcmFnbWVudC5oCmluZGV4IGYwNzA3YjNjZTM0YzY0NGY1YmI3NTE0ZmQ2NGIxZGYy
ZDA3MTJjNzcuLjAwYTIyYjUwMDZhOTI4ZmJiMzA4Yzg3YjVhMGUzZjZmMmZjZjA2ZTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NjYWxlZElt
YWdlRnJhZ21lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50LmgKQEAgLTQ5LDYgKzQ5LDcgQEAgcHVibGljOgogICAg
IGNvbnN0IFNrQml0bWFwJiBiaXRtYXAoKSBjb25zdCB7IHJldHVybiBtX2JpdG1hcDsgfQogICAg
IFNrQml0bWFwJiBiaXRtYXAoKSB7IHJldHVybiBtX2JpdG1hcDsgfQogICAgIGJvb2wgaXNDb21w
bGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb21wbGV0ZTsgfQorICAgIHZvaWQgc2V0SXNDb21w
bGV0ZSgpIHsgbV9pc0NvbXBsZXRlID0gdHJ1ZTsgfQogCiBwcml2YXRlOgogICAgIFNrSVNpemUg
bV9zY2FsZWRTaXplOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9E
ZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9EZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuY3BwCmluZGV4IDdmZDQwMTdhNmU0MGJmZmNhZjc3
ZGY2Y2NmMTFmMDUyNjRhOGY2MzYuLjdmMTkwMGIxY2RkMjI0MjUxODIwZWM4YWE0MTYzNTZjMjU2
NzM1MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRGVmZXJyZWRJ
bWFnZURlY29kZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0Rl
ZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5jcHAKQEAgLTc2LDkgKzc2LDEwIEBAIHB1YmxpYzoKICAg
ICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbml0aWFsaXplT25jZSgpOwogICAgICAgICBEZWZl
cnJlZEltYWdlRGVjb2Rlcjo6c2V0RW5hYmxlZCh0cnVlKTsKICAgICAgICAgbV9kYXRhID0gU2hh
cmVkQnVmZmVyOjpjcmVhdGUod2hpdGVQTkcsIHNpemVvZih3aGl0ZVBORykpOwotICAgICAgICBt
X2FjdHVhbERlY29kZXIgPSBuZXcgTW9ja0ltYWdlRGVjb2Rlcih0aGlzKTsKKyAgICAgICAgT3du
UHRyPE1vY2tJbWFnZURlY29kZXI+IGRlY29kZXIgPSBNb2NrSW1hZ2VEZWNvZGVyOjpjcmVhdGUo
dGhpcyk7CisgICAgICAgIG1fYWN0dWFsRGVjb2RlciA9IGRlY29kZXIuZ2V0KCk7CiAgICAgICAg
IG1fYWN0dWFsRGVjb2Rlci0+c2V0U2l6ZSgxLCAxKTsKLSAgICAgICAgbV9sYXp5RGVjb2RlciA9
IERlZmVycmVkSW1hZ2VEZWNvZGVyOjpjcmVhdGVGb3JUZXN0aW5nKGFkb3B0UHRyKG1fYWN0dWFs
RGVjb2RlcikpOworICAgICAgICBtX2xhenlEZWNvZGVyID0gRGVmZXJyZWRJbWFnZURlY29kZXI6
OmNyZWF0ZUZvclRlc3RpbmcoZGVjb2Rlci5yZWxlYXNlKCkpOwogICAgICAgICBtX2xhenlEZWNv
ZGVyLT5zZXREYXRhKG1fZGF0YS5nZXQoKSwgdHJ1ZSk7CiAgICAgICAgIG1fY2FudmFzLnJlc2V0
KGNyZWF0ZVJhc3RlckNhbnZhcygxMDAsIDEwMCkpOwogICAgICAgICBtX2ZyYW1lQnVmZmVyUmVx
dWVzdENvdW50ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
SW1hZ2VEZWNvZGluZ1N0b3JlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0ltYWdlRGVjb2RpbmdTdG9yZVRlc3QuY3BwCmluZGV4IDAzOGFlNzIwYjU3NWJmOTk2MGI1ODcy
YmUxZTA5NzRmYTNkN2Q5YjMuLjgzZWE4NDI5NmUxNjE2OGFlNGU0N2M4OWRkZmNkMWYxN2FjMzdm
YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VEZWNvZGlu
Z1N0b3JlVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JbWFnZURl
Y29kaW5nU3RvcmVUZXN0LmNwcApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkltYWdlRGVj
b2RpbmdTdG9yZS5oIgogCiAjaW5jbHVkZSAiSW1hZ2VGcmFtZUdlbmVyYXRvci5oIgorI2luY2x1
ZGUgIk1vY2tJbWFnZURlY29kZXIuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNs
dWRlIDxndGVzdC9ndGVzdC5oPgogCkBAIC0zNSwxMyArMzYsMTQgQEAgdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKIG5hbWVzcGFjZSB7CiAKLWNsYXNzIEltYWdlRGVjb2RpbmdTdG9yZVRlc3Qg
OiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKK2NsYXNzIEltYWdlRGVjb2RpbmdTdG9yZVRlc3Qg
OiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0LCBwdWJsaWMgTW9ja0ltYWdlRGVjb2RlckNsaWVudCB7
CiBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIFNldFVwKCkKICAgICB7CiAgICAgICAgIEltYWdl
RGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uY2UoKTsKICAgICAgICAgbV9kYXRhID0gU2hhcmVk
QnVmZmVyOjpjcmVhdGUoKTsKICAgICAgICAgbV9nZW5lcmF0b3IgPSBJbWFnZUZyYW1lR2VuZXJh
dG9yOjpjcmVhdGUoU2tJU2l6ZTo6TWFrZSgxMDAsIDEwMCksIG1fZGF0YSwgdHJ1ZSk7CisgICAg
ICAgIG1fZGVjb2RlcnNEZXN0cm95ZWQgPSAwOwogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBU
ZWFyRG93bigpCkBAIC00OSw2ICs1MSwyMiBAQCBwdWJsaWM6CiAgICAgICAgIEltYWdlRGVjb2Rp
bmdTdG9yZTo6c2h1dGRvd24oKTsKICAgICB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZGVjb2RlckJl
aW5nRGVzdHJveWVkKCkKKyAgICB7CisgICAgICAgICsrbV9kZWNvZGVyc0Rlc3Ryb3llZDsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVCdWZmZXJSZXF1ZXN0ZWQoKQorICAgIHsKKyAg
ICAgICAgLy8gRGVjb2RlciBpcyBuZXZlciB1c2VkIGJ5IEltYWdlRGVjb2RpbmdTdG9yZS4KKyAg
ICAgICAgQVNTRVJUX1RSVUUoZmFsc2UpOworICAgIH0KKworICAgIHZpcnR1YWwgSW1hZ2VGcmFt
ZTo6RnJhbWVTdGF0dXMgZnJhbWVTdGF0dXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEltYWdl
RnJhbWU6OkZyYW1lUGFydGlhbDsKKyAgICB9CisKIHByb3RlY3RlZDoKICAgICBQYXNzT3duUHRy
PFNjYWxlZEltYWdlRnJhZ21lbnQ+IGNyZWF0ZUNvbXBsZXRlSW1hZ2UoY29uc3QgU2tJU2l6ZSYg
c2l6ZSkKICAgICB7CkBAIC01OCw2ICs3NiwxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVy
biBTY2FsZWRJbWFnZUZyYWdtZW50OjpjcmVhdGUoc2l6ZSwgYml0bWFwLCB0cnVlKTsKICAgICB9
CiAKKyAgICBQYXNzT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IGNyZWF0ZUluY29tcGxldGVJ
bWFnZShjb25zdCBTa0lTaXplJiBzaXplKQorICAgIHsKKyAgICAgICAgU2tCaXRtYXAgYml0bWFw
OworICAgICAgICBiaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywg
c2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKyAgICAgICAgYml0bWFwLmFsbG9jUGl4ZWxz
KCk7CisgICAgICAgIHJldHVybiBTY2FsZWRJbWFnZUZyYWdtZW50OjpjcmVhdGUoc2l6ZSwgYml0
bWFwLCBmYWxzZSk7CisgICAgfQorCiAgICAgdm9pZCBpbnNlcnRDYWNoZShjb25zdCBTa0lTaXpl
JiBzaXplKQogICAgIHsKICAgICAgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogaW1hZ2Ug
PSBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmluc2VydEFuZExvY2tDYWNoZSgKQEAg
LTY3LDcgKzkzLDEwIEBAIHByb3RlY3RlZDoKIAogICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21l
bnQqIGxvY2tDYWNoZShjb25zdCBTa0lTaXplJiBzaXplKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+bG9ja0NvbXBsZXRlQ2FjaGUobV9nZW5l
cmF0b3IuZ2V0KCksIHNpemUpOworICAgICAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBj
YWNoZWRJbWFnZSA9IDA7CisgICAgICAgIGlmIChJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNl
KCktPmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgc2l6ZSwgSW1hZ2VEZWNvZGluZ1N0b3Jl
OjpDYWNoZUNhbkJlSW5jb21wbGV0ZSwgJmNhY2hlZEltYWdlKSkKKyAgICAgICAgICAgIHJldHVy
biBjYWNoZWRJbWFnZTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAgdm9pZCB1bmxv
Y2tDYWNoZShjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBjYWNoZWRJbWFnZSkKQEAgLTk1LDYg
KzEyNCw3IEBAIHByb3RlY3RlZDoKIAogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsK
ICAgICBSZWZQdHI8SW1hZ2VGcmFtZUdlbmVyYXRvcj4gbV9nZW5lcmF0b3I7CisgICAgaW50IG1f
ZGVjb2RlcnNEZXN0cm95ZWQ7CiB9OwogCiBURVNUX0YoSW1hZ2VEZWNvZGluZ1N0b3JlVGVzdCwg
ZXZpY3RPbmVDYWNoZSkKQEAgLTE4MSw3ICsyMTEsNyBAQCBURVNUX0YoSW1hZ2VEZWNvZGluZ1N0
b3JlVGVzdCwgY2FjaGVJblVzZU5vdEV2aWN0ZWQpCiAgICAgRVhQRUNUX0VRKDN1LCBJbWFnZURl
Y29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygpKTsKIAogICAgIGNvbnN0IFNj
YWxlZEltYWdlRnJhZ21lbnQqIGNhY2hlZEltYWdlID0gbG9ja0NhY2hlKFNrSVNpemU6Ok1ha2Uo
MSwgMSkpOwotICAgIEVYUEVDVF9UUlVFKGNhY2hlZEltYWdlKTsKKyAgICBBU1NFUlRfVFJVRShj
YWNoZWRJbWFnZSk7CiAKICAgICAvLyBDYWNoZSAyIGlzIGV2aWN0ZWQgYmVjYXVzZSBjYWNoZSAx
IGlzIGluIHVzZS4KICAgICBldmljdE9uZUNhY2hlKCk7CkBAIC0yMDQsNCArMjM0LDUxIEBAIFRF
U1RfRihJbWFnZURlY29kaW5nU3RvcmVUZXN0LCBkZXN0cm95SW1hZ2VGcmFtZUdlbmVyYXRvcikK
ICAgICBFWFBFQ1RfRkFMU0UoSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5jYWNoZUVu
dHJpZXMoKSk7CiB9CiAKK1RFU1RfRihJbWFnZURlY29kaW5nU3RvcmVUZXN0LCBpbnNlcnRJbmNv
bXBsZXRlQ2FjaGUpCit7CisgICAgY29uc3QgU2tJU2l6ZSBzaXplID0gU2tJU2l6ZTo6TWFrZSgx
LCAxKTsKKyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBjYWNoZWRJbWFnZSA9IEltYWdl
RGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+aW5zZXJ0QW5kTG9ja0NhY2hlKAorICAgICAgICBt
X2dlbmVyYXRvci5nZXQoKSwgY3JlYXRlSW5jb21wbGV0ZUltYWdlKHNpemUpLCBNb2NrSW1hZ2VE
ZWNvZGVyOjpjcmVhdGUodGhpcykpOworICAgIEVYUEVDVF9FUSgxdSwgSW1hZ2VEZWNvZGluZ1N0
b3JlOjppbnN0YW5jZSgpLT5jYWNoZUVudHJpZXMoKSk7CisgICAgdW5sb2NrQ2FjaGUoY2FjaGVk
SW1hZ2UpOworCisgICAgSW1hZ2VEZWNvZGVyKiBkZWNvZGVyID0gMDsKKyAgICBFWFBFQ1RfVFJV
RShJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmxvY2tDYWNoZShtX2dlbmVyYXRvci5n
ZXQoKSwgc2l6ZSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjpDYWNoZUNhbkJlSW5jb21wbGV0ZSwgJmNh
Y2hlZEltYWdlLCAmZGVjb2RlcikpOworICAgIEVYUEVDVF9UUlVFKGRlY29kZXIpOworICAgIEFT
U0VSVF9UUlVFKGNhY2hlZEltYWdlKTsKKyAgICBFWFBFQ1RfRkFMU0UoY2FjaGVkSW1hZ2UtPmlz
Q29tcGxldGUoKSk7CisgICAgdW5sb2NrQ2FjaGUoY2FjaGVkSW1hZ2UpOworICAgIEVYUEVDVF9F
USgwLCBtX2RlY29kZXJzRGVzdHJveWVkKTsKK30KKworVEVTVF9GKEltYWdlRGVjb2RpbmdTdG9y
ZVRlc3QsIGluc2VydENvbXBsZXRlQ2FjaGVXaXRoRGVjb2RlcikKK3sKKyAgICBjb25zdCBTY2Fs
ZWRJbWFnZUZyYWdtZW50KiBjYWNoZWRJbWFnZSA9IEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFu
Y2UoKS0+aW5zZXJ0QW5kTG9ja0NhY2hlKAorICAgICAgICBtX2dlbmVyYXRvci5nZXQoKSwgY3Jl
YXRlQ29tcGxldGVJbWFnZShTa0lTaXplOjpNYWtlKDEsIDEpKSwgTW9ja0ltYWdlRGVjb2Rlcjo6
Y3JlYXRlKHRoaXMpKTsKKyAgICB1bmxvY2tDYWNoZShjYWNoZWRJbWFnZSk7CisgICAgRVhQRUNU
X0VRKDF1LCBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygpKTsK
KyAgICBFWFBFQ1RfRVEoMSwgbV9kZWNvZGVyc0Rlc3Ryb3llZCk7Cit9CisKK1RFU1RfRihJbWFn
ZURlY29kaW5nU3RvcmVUZXN0LCBpbmNvbXBsZXRlQ2FjaGVCZWNvbWVzQ29tcGxldGUpCit7Cisg
ICAgY29uc3QgU2tJU2l6ZSBzaXplID0gU2tJU2l6ZTo6TWFrZSgxLCAxKTsKKyAgICBjb25zdCBT
Y2FsZWRJbWFnZUZyYWdtZW50KiBjYWNoZWRJbWFnZSA9IEltYWdlRGVjb2RpbmdTdG9yZTo6aW5z
dGFuY2UoKS0+aW5zZXJ0QW5kTG9ja0NhY2hlKAorICAgICAgICBtX2dlbmVyYXRvci5nZXQoKSwg
Y3JlYXRlSW5jb21wbGV0ZUltYWdlKHNpemUpLCBNb2NrSW1hZ2VEZWNvZGVyOjpjcmVhdGUodGhp
cykpOworICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9n
ZW5lcmF0b3IuZ2V0KCksIGNhY2hlZEltYWdlKTsKKyAgICBFWFBFQ1RfRVEoMXUsIEltYWdlRGVj
b2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRyaWVzKCkpOworCisgICAgSW1hZ2VEZWNv
ZGVyKiBkZWNvZGVyID0gMDsKKyAgICBFWFBFQ1RfVFJVRShJbWFnZURlY29kaW5nU3RvcmU6Omlu
c3RhbmNlKCktPmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgc2l6ZSwgSW1hZ2VEZWNvZGlu
Z1N0b3JlOjpDYWNoZUNhbkJlSW5jb21wbGV0ZSwgJmNhY2hlZEltYWdlLCAmZGVjb2RlcikpOwor
ICAgIEVYUEVDVF9UUlVFKGRlY29kZXIpOworICAgIEFTU0VSVF9UUlVFKGNhY2hlZEltYWdlKTsK
KyAgICBFWFBFQ1RfRkFMU0UoY2FjaGVkSW1hZ2UtPmlzQ29tcGxldGUoKSk7CisKKyAgICBjYWNo
ZWRJbWFnZSA9IEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+b3ZlcndyaXRlQW5kTG9j
a0NhY2hlKAorICAgICAgICBtX2dlbmVyYXRvci5nZXQoKSwgY2FjaGVkSW1hZ2UsIGNyZWF0ZUNv
bXBsZXRlSW1hZ2Uoc2l6ZSkpOworICAgIEVYUEVDVF9UUlVFKGNhY2hlZEltYWdlLT5pc0NvbXBs
ZXRlKCkpOworICAgIEVYUEVDVF9FUSgxLCBtX2RlY29kZXJzRGVzdHJveWVkKTsKKyAgICBJbWFn
ZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgp
LCBjYWNoZWRJbWFnZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QuY3BwCmluZGV4
IGRhMGEyZjg2NDI1YWQzMjY2YzQ0ODg1ODQ2YTlmNGQ0YmU4ODhiM2YuLjM2ZjQwN2I1OTA1M2U3
ZTMxMDk3ZGVjODI1ZTI5MmI5YjA1MzhmNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QuY3BwCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSAiTW9ja0ltYWdlRGVjb2Rlci5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1
ZmZlci5oIgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGlu
Zy5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNzAsNiArNzEsNyBAQCBwdWJs
aWM6CiAgICAgICAgIG1fZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCk7CiAgICAgICAgIG1f
Z2VuZXJhdG9yID0gSW1hZ2VGcmFtZUdlbmVyYXRvcjo6Y3JlYXRlKGZ1bGxTaXplKCksIG1fZGF0
YSwgdHJ1ZSk7CiAgICAgICAgIG1fZ2VuZXJhdG9yLT5zZXRJbWFnZURlY29kZXJGYWN0b3J5Rm9y
VGVzdGluZyhNb2NrSW1hZ2VEZWNvZGVyRmFjdG9yeTo6Y3JlYXRlKHRoaXMpKTsKKyAgICAgICAg
bV9kZWNvZGVyc0Rlc3Ryb3llZCA9IDA7CiAgICAgICAgIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291
bnQgPSAwOwogICAgICAgICBtX2ZyYW1lU3RhdHVzID0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eTsK
ICAgICB9CkBAIC04MSw2ICs4Myw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBkZWNv
ZGVyQmVpbmdEZXN0cm95ZWQoKQogICAgIHsKKyAgICAgICAgKyttX2RlY29kZXJzRGVzdHJveWVk
OwogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBmcmFtZUJ1ZmZlclJlcXVlc3RlZCgpCkBAIC0x
MDYsMTUgKzEwOSwxNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBt
X2RhdGE7CiAgICAgUmVmUHRyPEltYWdlRnJhbWVHZW5lcmF0b3I+IG1fZ2VuZXJhdG9yOworICAg
IGludCBtX2RlY29kZXJzRGVzdHJveWVkOwogICAgIGludCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENv
dW50OwogICAgIEltYWdlRnJhbWU6OkZyYW1lU3RhdHVzIG1fZnJhbWVTdGF0dXM7CiB9OwogCiBQ
YXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gTW9ja0ltYWdlRGVjb2RlckZhY3Rvcnk6OmNyZWF0ZSgp
CiB7Ci0gICAgTW9ja0ltYWdlRGVjb2RlciogZGVjb2RlciA9IG5ldyBNb2NrSW1hZ2VEZWNvZGVy
KG1fdGVzdCk7CisgICAgT3duUHRyPE1vY2tJbWFnZURlY29kZXI+IGRlY29kZXIgPSBNb2NrSW1h
Z2VEZWNvZGVyOjpjcmVhdGUobV90ZXN0KTsKICAgICBkZWNvZGVyLT5zZXRTaXplKGZ1bGxTaXpl
KCkud2lkdGgoKSwgZnVsbFNpemUoKS5oZWlnaHQoKSk7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKGRl
Y29kZXIpOworICAgIHJldHVybiBkZWNvZGVyLnJlbGVhc2UoKTsKIH0KIAogVEVTVF9GKEltYWdl
RnJhbWVHZW5lcmF0b3JUZXN0LCBjYWNoZUhpdCkKQEAgLTE2MSw2ICsxNjUsNyBAQCBURVNUX0Yo
SW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QsIGNhY2hlTWlzc1dpdGhEZWNvZGVBbmRTY2FsZSkKICAg
ICBFWFBFQ1RfRVEoMSwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCk7CiAgICAgRVhQRUNUX0VR
KHNjYWxlZFNpemUoKSwgc2NhbGVkSW1hZ2UtPnNjYWxlZFNpemUoKSk7CiAgICAgSW1hZ2VEZWNv
ZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgc2Nh
bGVkSW1hZ2UpOworICAgIEVYUEVDVF9FUSgxLCBtX2RlY29kZXJzRGVzdHJveWVkKTsKIAogICAg
IC8vIENhY2hlIGhpdC4KICAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBmdWxsSW1hZ2Ug
PSBtX2dlbmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUoZnVsbFNpemUoKSk7CkBAIC0xNzYsMjEgKzE4
MSwxMzAgQEAgVEVTVF9GKEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LCBjYWNoZU1pc3NXaXRoRGVj
b2RlQW5kU2NhbGUpCiAgICAgRVhQRUNUX0VRKDEsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQp
OwogfQogCi0vLyBUZXN0IHRoYXQgaW5jb21wbGV0ZSBmcmFtZXMgYXJlIG5vdCBjYWNoZWQuCiBU
RVNUX0YoSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QsIGNhY2hlTWlzc1dpdGhJbmNvbXBsZXRlRGVj
b2RlKQogewogICAgIHNldEZyYW1lU3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CiAK
LSAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiB0ZW1wSW1hZ2UgPSBtX2dlbmVyYXRvci0+
ZGVjb2RlQW5kU2NhbGUoc2NhbGVkU2l6ZSgpKTsKKyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdt
ZW50KiB0ZW1wSW1hZ2U9IG1fZ2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShmdWxsU2l6ZSgpKTsK
KyAgICBFWFBFQ1RfRkFMU0UodGVtcEltYWdlLT5pc0NvbXBsZXRlKCkpOworICAgIEVYUEVDVF9F
USgxLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6
Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCB0ZW1wSW1hZ2UpOwor
ICAgIEVYUEVDVF9FUSgxdSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5jYWNoZUVu
dHJpZXMoKSk7CisKKyAgICB0ZW1wSW1hZ2UgPSBtX2dlbmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUo
ZnVsbFNpemUoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRlbXBJbWFnZS0+aXNDb21wbGV0ZSgpKTsK
KyAgICBFWFBFQ1RfRVEoMiwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCk7CisgICAgSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwg
dGVtcEltYWdlKTsKKyAgICBFWFBFQ1RfRVEoMXUsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFu
Y2UoKS0+Y2FjaGVFbnRyaWVzKCkpOworICAgIEVYUEVDVF9FUSgwLCBtX2RlY29kZXJzRGVzdHJv
eWVkKTsKK30KKworVEVTVF9GKEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LCBjYWNoZU1pc3NXaXRo
SW5jb21wbGV0ZURlY29kZUFuZFNjYWxlKQoreworICAgIHNldEZyYW1lU3RhdHVzKEltYWdlRnJh
bWU6OkZyYW1lUGFydGlhbCk7CisKKyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiB0ZW1w
SW1hZ2U9IG1fZ2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShzY2FsZWRTaXplKCkpOworICAgIEVY
UEVDVF9GQUxTRSh0ZW1wSW1hZ2UtPmlzQ29tcGxldGUoKSk7CisgICAgRVhQRUNUX0VRKDEsIG1f
ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOworICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFu
Y2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHRlbXBJbWFnZSk7CisgICAgRVhQ
RUNUX0VRKDJ1LCBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygp
KTsKKworICAgIHRlbXBJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShzY2FsZWRT
aXplKCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZW1wSW1hZ2UtPmlzQ29tcGxldGUoKSk7CisgICAg
RVhQRUNUX0VRKDIsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOworICAgIEltYWdlRGVjb2Rp
bmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHRlbXBJ
bWFnZSk7CisgICAgRVhQRUNUX0VRKDJ1LCBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCkt
PmNhY2hlRW50cmllcygpKTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9kZWNvZGVyc0Rlc3Ryb3llZCk7
Cit9CisKK1RFU1RfRihJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCwgaW5jb21wbGV0ZURlY29kZUJl
Y29tZXNDb21wbGV0ZSkKK3sKKyAgICBzZXRGcmFtZVN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZVBh
cnRpYWwpOworCisgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogdGVtcEltYWdlID0gbV9n
ZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKGZ1bGxTaXplKCkpOworICAgIEVYUEVDVF9GQUxTRSh0
ZW1wSW1hZ2UtPmlzQ29tcGxldGUoKSk7CiAgICAgRVhQRUNUX0VRKDEsIG1fZnJhbWVCdWZmZXJS
ZXF1ZXN0Q291bnQpOworICAgIEVYUEVDVF9FUSgwLCBtX2RlY29kZXJzRGVzdHJveWVkKTsKICAg
ICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9y
LmdldCgpLCB0ZW1wSW1hZ2UpOworICAgIEVYUEVDVF9FUSgxdSwgSW1hZ2VEZWNvZGluZ1N0b3Jl
OjppbnN0YW5jZSgpLT5jYWNoZUVudHJpZXMoKSk7CisKKyAgICBzZXRGcmFtZVN0YXR1cyhJbWFn
ZUZyYW1lOjpGcmFtZUNvbXBsZXRlKTsKIAogICAgIHRlbXBJbWFnZSA9IG1fZ2VuZXJhdG9yLT5k
ZWNvZGVBbmRTY2FsZShmdWxsU2l6ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZW1wSW1hZ2UtPmlz
Q29tcGxldGUoKSk7CisgICAgRVhQRUNUX0VRKDIsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQp
OworICAgIEVYUEVDVF9FUSgxLCBtX2RlY29kZXJzRGVzdHJveWVkKTsKKyAgICBJbWFnZURlY29k
aW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCB0ZW1w
SW1hZ2UpOworICAgIEVYUEVDVF9FUSgxdSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgp
LT5jYWNoZUVudHJpZXMoKSk7CisKKyAgICB0ZW1wSW1hZ2UgPSBtX2dlbmVyYXRvci0+ZGVjb2Rl
QW5kU2NhbGUoZnVsbFNpemUoKSk7CisgICAgRVhQRUNUX1RSVUUodGVtcEltYWdlLT5pc0NvbXBs
ZXRlKCkpOworICAgIEVYUEVDVF9FUSgyLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsKKyAg
ICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9y
LmdldCgpLCB0ZW1wSW1hZ2UpOworfQorCitURVNUX0YoSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3Qs
IGluY29tcGxldGVEZWNvZGVBbmRTY2FsZUJlY29tZXNDb21wbGV0ZSkKK3sKKyAgICBzZXRGcmFt
ZVN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZVBhcnRpYWwpOworCisgICAgY29uc3QgU2NhbGVkSW1h
Z2VGcmFnbWVudCogdGVtcEltYWdlID0gbV9nZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKHNjYWxl
ZFNpemUoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRlbXBJbWFnZS0+aXNDb21wbGV0ZSgpKTsKKyAg
ICBFWFBFQ1RfRVEoMSwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCk7CisgICAgRVhQRUNUX0VR
KDAsIG1fZGVjb2RlcnNEZXN0cm95ZWQpOworICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFu
Y2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHRlbXBJbWFnZSk7CisgICAgRVhQ
RUNUX0VRKDJ1LCBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygp
KTsKKworICAgIHNldEZyYW1lU3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpOworCisg
ICAgdGVtcEltYWdlID0gbV9nZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKHNjYWxlZFNpemUoKSk7
CisgICAgRVhQRUNUX1RSVUUodGVtcEltYWdlLT5pc0NvbXBsZXRlKCkpOwogICAgIEVYUEVDVF9F
USgyLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9kZWNv
ZGVyc0Rlc3Ryb3llZCk7CiAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxv
Y2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgdGVtcEltYWdlKTsKKyAgICBFWFBFQ1RfRVEoMnUs
IEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRyaWVzKCkpOwogCiAgICAg
dGVtcEltYWdlID0gbV9nZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKHNjYWxlZFNpemUoKSk7Ci0g
ICAgRVhQRUNUX0VRKDMsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOworICAgIEVYUEVDVF9U
UlVFKHRlbXBJbWFnZS0+aXNDb21wbGV0ZSgpKTsKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6Omlu
c3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCB0ZW1wSW1hZ2UpOworCisg
ICAgdGVtcEltYWdlID0gbV9nZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKGZ1bGxTaXplKCkpOwor
ICAgIEVYUEVDVF9UUlVFKHRlbXBJbWFnZS0+aXNDb21wbGV0ZSgpKTsKKyAgICBJbWFnZURlY29k
aW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCB0ZW1w
SW1hZ2UpOworCisgICAgRVhQRUNUX0VRKDIsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOwor
fQorCitzdGF0aWMgdm9pZCBkZWNvZGVUaHJlYWRNYWluKHZvaWQqIGFyZykKK3sKKyAgICBJbWFn
ZUZyYW1lR2VuZXJhdG9yKiBnZW5lcmF0b3IgPSByZWludGVycHJldF9jYXN0PEltYWdlRnJhbWVH
ZW5lcmF0b3IqPihhcmcpOworICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIHRlbXBJbWFn
ZSA9IGdlbmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUoZnVsbFNpemUoKSk7CisgICAgSW1hZ2VEZWNv
ZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShnZW5lcmF0b3IsIHRlbXBJbWFnZSk7
Cit9CisKK1RFU1RfRihJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCwgaW5jb21wbGV0ZURlY29kZUJl
Y29tZXNDb21wbGV0ZU11bHRpVGhyZWFkZWQpCit7CisgICAgV1RGOjppbml0aWFsaXplVGhyZWFk
aW5nKCk7CisgICAgc2V0RnJhbWVTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKKwor
ICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIHRlbXBJbWFnZSA9IG1fZ2VuZXJhdG9yLT5k
ZWNvZGVBbmRTY2FsZShmdWxsU2l6ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVtcEltYWdlLT5p
c0NvbXBsZXRlKCkpOworICAgIEVYUEVDVF9FUSgxLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50
KTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9kZWNvZGVyc0Rlc3Ryb3llZCk7CisgICAgSW1hZ2VEZWNv
ZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgdGVt
cEltYWdlKTsKKyAgICBFWFBFQ1RfRVEoMXUsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2Uo
KS0+Y2FjaGVFbnRyaWVzKCkpOworCisgICAgLy8gRnJhbWUgY2FuIG5vdyBiZSBkZWNvZGVkIGNv
bXBsZXRlbHkuCisgICAgc2V0RnJhbWVTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSk7
CisgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCA9IGNyZWF0ZVRocmVhZCgmZGVjb2RlVGhy
ZWFkTWFpbiwgbV9nZW5lcmF0b3IuZ2V0KCksICJEZWNvZGVUaHJlYWQiKTsKKyAgICB3YWl0Rm9y
VGhyZWFkQ29tcGxldGlvbih0aHJlYWRJRCk7CisKKyAgICBFWFBFQ1RfRVEoMiwgbV9mcmFtZUJ1
ZmZlclJlcXVlc3RDb3VudCk7CisgICAgRVhQRUNUX0VRKDEsIG1fZGVjb2RlcnNEZXN0cm95ZWQp
OworICAgIEVYUEVDVF9FUSgxdSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5jYWNo
ZUVudHJpZXMoKSk7CisKKyAgICB0ZW1wSW1hZ2UgPSBtX2dlbmVyYXRvci0+ZGVjb2RlQW5kU2Nh
bGUoZnVsbFNpemUoKSk7CisgICAgRVhQRUNUX1RSVUUodGVtcEltYWdlLT5pc0NvbXBsZXRlKCkp
OworICAgIEVYUEVDVF9FUSgyLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsKICAgICBJbWFn
ZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgp
LCB0ZW1wSW1hZ2UpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL01vY2tJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9j
a0ltYWdlRGVjb2Rlci5oCmluZGV4IDhiNGY0MDM4MjM5YzI5NWRlNDhjOWRlZWQ3ZjM5ZWY4YWQ1
OGYwNzUuLjVjOWE2MjM3Yjk0Zjg1YmEzZmQ2MjRiYmI1NWE3MDI5YWQ4OWY4NDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oCkBAIC0zOCw2
ICszOCw4IEBAIHB1YmxpYzoKIAogY2xhc3MgTW9ja0ltYWdlRGVjb2RlciA6IHB1YmxpYyBJbWFn
ZURlY29kZXIgewogcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPE1vY2tJbWFnZURlY29k
ZXI+IGNyZWF0ZShNb2NrSW1hZ2VEZWNvZGVyQ2xpZW50KiBjbGllbnQpIHsgcmV0dXJuIGFkb3B0
UHRyKG5ldyBNb2NrSW1hZ2VEZWNvZGVyKGNsaWVudCkpOyB9CisKICAgICBNb2NrSW1hZ2VEZWNv
ZGVyKE1vY2tJbWFnZURlY29kZXJDbGllbnQqIGNsaWVudCkKICAgICAgICAgOiBJbWFnZURlY29k
ZXIoSW1hZ2VTb3VyY2U6OkFscGhhUHJlbXVsdGlwbGllZCwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5k
Q29sb3JQcm9maWxlQXBwbGllZCkKICAgICAgICAgLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50
KDApCkBAIC00OSw2ICs1MSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2xpZW50LT5kZWNvZGVy
QmVpbmdEZXN0cm95ZWQoKTsKICAgICB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgc2V0U2l6ZSh1bnNp
Z25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQorICAgIHsKKyAgICAgICAgSW1hZ2VEZWNvZGVy
OjpzZXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVz
aXplKDEpOworICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc2V0U2l6ZSh3aWR0aCwgaGVp
Z2h0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgdmlydHVhbCBTdHJpbmcg
ZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuICJtb2NrIjsK
QEAgLTU5LDggKzY5LDYgQEAgcHVibGljOgogICAgICAgICArK21fZnJhbWVCdWZmZXJSZXF1ZXN0
Q291bnQ7CiAgICAgICAgIG1fY2xpZW50LT5mcmFtZUJ1ZmZlclJlcXVlc3RlZCgpOwogCi0gICAg
ICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUoMSk7Ci0gICAgICAgIG1fZnJhbWVCdWZmZXJD
YWNoZVswXS5zZXRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpOwogICAgICAg
ICBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc2V0U3RhdHVzKG1fY2xpZW50LT5mcmFtZVN0YXR1cygp
KTsKICAgICAgICAgcmV0dXJuICZtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178317</attachid>
            <date>2012-12-07 18:14:31 -0800</date>
            <delta_ts>2012-12-07 19:01:15 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-103796-20121207181155.patch</filename>
            <type>text/plain</type>
            <size>44679</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2OTkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODJjMzQ5OTJjMzIzNmNj
NTk1NGY1MzQ1YjUzMTE0NmM1YTg2MzQ5OC4uZjk2OThiYTE5YTJmMjFlNTIyYzIwNTcyY2ZjMmYz
MjVhNjMyMWJiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2IEBACisyMDEyLTEyLTA0ICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbWFnZURl
Y29kaW5nU3RvcmUgc2hvdWxkIGNhY2hlIHBhcnRpYWxseSBkZWNvZGVkIGltYWdlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNzk2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgU3RlcGhlbiBXaGl0ZS4KKworICAgICAgICBJbXBsZW1lbnQgY2FjaGlu
ZyBmb3IgaW5jb21wbGV0ZSBpbWFnZXMsIG1lYW5pbmcgdGhlIGltYWdlIGlzIHBhcnRpYWxseQor
ICAgICAgICBkZWNvZGVkLiBUaGUgaW1hZ2UgaXMgY2FjaGVkIHRvZ2V0aGVyIHdpdGggcGFydGlh
bGx5IGRlY29kZWQgSW1hZ2VEZWNvZGVyLgorICAgICAgICBUaGlzIGFsbG93cyBkZWNvZGluZyB0
byByZXN1bWUgaW4gYSBsYXRlciB0aW1lLgorCisgICAgICAgIENhY2hpbmcgbG9naWMgZm9yIGlu
Y29tcGxldGUgaW1hZ2VzIGlzIGltcGxlbWVudGVkIGluIEltYWdlRGVjb2RpbmdTdG9yZS4KKwor
ICAgICAgICBMb2dpYyBmb3IgcmVzdW1pbmcgaW1hZ2UgZGVjb2RpbmcgaXMgaW1wbGVtZW50ZWQg
aW4gSW1hZ2VGcmFtZUdlbmVyYXRvci4KKworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmUgYWxs
b3dzIHN0b3JpbmcgaW5jb21wbGV0ZSBpbWFnZSB3aXRoIHRoZSBkZWNvZGVyLgorICAgICAgICBU
aGUgY2FjaGUgZW50cnkgY2FuIGJlIHVzZWQgaW4gYSBsYXRlciB0aW1lIHRvIHJlYWQgYW5kIHdy
aXRlIChpLmUuIHJlc3VtZQorICAgICAgICBkZWNvZGluZy4pIFRvIGF2b2lkIHRoZSBzYW1lIGVu
dHJ5IGJlaW5nIHdyaXR0ZW4gYW5kIHJlYWQgYXQgdGhlIHNhbWUgdGltZSwKKyAgICAgICAgYW4g
aW5jb21wbGV0ZSBlbnRyeSBjYW4gYmUgdXNlZCBieSBvbmUgdXNlciBvbmx5LiBDb25jdXJyZW50
IGFjY2VzcyB0bworICAgICAgICBhbiBpbmNvbXBsZXRlIGVudHJ5IHNob3VsZCBuZXZlciBoYXBw
ZW4gYW5kIGlzIGNoZWNrZWQgYnkgYW4gYXNzZXJ0LgorICAgICAgICBBbiBlbnRyeSBjYW4gYmVj
b21lcyBjb21wbGV0ZSB3aGVuIGRlY29kaW5nIGlzIGZpbmlzaGVkLiBJbiB0aGlzIGNhc2UKKyAg
ICAgICAgdGhlIGFzc29jaWF0ZWQgZGVjb2RlciBpcyBkZWxldGVkLiBPbmNlIGFuIGVudHJ5IGJl
Y29tZXMgY29tcGxldGUgY29uY3VycmVudAorICAgICAgICByZWFkIGlzIGFsbG93ZWQuCisKKyAg
ICAgICAgSW1hZ2VGcmFtZUdlbmVyYXRvciBwZXJmb3JtcyB0aGUgbG9naWMgdG8gcmVzdW1lIGlt
YWdlIGRlY29kaW5nLiBJdAorICAgICAgICBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIG9wZXJhdGlv
bnMgaW4gc2VxdWVuY2U6CisgICAgICAgIC0gVHJ5IHRvIGxvb2t1cCBhIGNvbXBsZXRlIGltYWdl
CisgICAgICAgIC0gVHJ5IHRvIHBlcmZvcm0gc2NhbGluZyBvbiBhIGNvbXBsZXRlIGltYWdlCisg
ICAgICAgIC0gVHJ5IHRvIGxvb2t1cCBhbiBpbmNvbXBsZXRlIGltYWdlIGFuZCByZXN1bWUgZGVj
b2RpbmcgJiBzY2FsaW5nCisgICAgICAgIC0gRXZlcnl0aGluZyBmYWlscywgc3RhcnQgZGVjb2Rp
bmcgZnJvbSBzY3JhdGNoCisgICAgICAgIFRoZSBlbnRpcmUgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9u
cyBpbiB1bmRlciBhIG11dGV4LCBoZW5jZSB0aGVyZSB3aWxsIGJlCisgICAgICAgIG5vIG1vcmUg
dGhhbiAxIHVzZXIgb2YgYW4gaW5jb21wbGV0ZSBjYWNoZSBlbnRyeSBhdCB0aGUgc2FtZSB0aW1l
LgorCisgICAgICAgIE5ldyB1bml0IHRlc3RzIGluIEltYWdlRGVjb2RpbmdTdG9yZVRlc3QgYW5k
IEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2RpbmdTdG9yZTo6bG9ja0NhY2hlKToKKyAgICAgICAgQ2hhbmdlIG9mIG1ldGhvZCBkZWZp
bml0aW9uIHRvIHJldHVybiBhbiBpbWFnZSBhbmQgSW1hZ2VEZWNvZGVyLgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjp1bmxvY2tDYWNoZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZURlY29kaW5nU3RvcmU6Omluc2VydEFuZExvY2tDYWNoZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kaW5nU3RvcmU6Om92ZXJ3cml0ZUFuZExvY2tDYWNoZSk6CisgICAgICAg
IE5ldyBtZXRob2QgdG8gYWxsb3cgYW4gaW5jb21wbGV0ZSBjYWNoZSBlbnRyeSBiZSBvdmVyd3Jp
dHRlbi4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5oOgorICAgICAgICAoSW1hZ2VEZWNvZGluZ1N0b3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVFbnRyeTo6Y3Jl
YXRlQW5kVXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVF
bnRyeTo6Q2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6
OkNhY2hlRW50cnk6OmNhY2hlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rp
bmdTdG9yZTo6Q2FjaGVFbnRyeTo6Y2FjaGVkRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURlY29kaW5nU3RvcmU6OkNhY2hlRW50cnk6OnJlbGVhc2VDYWNoZWREZWNvZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVFbnRyeTo6b3ZlcndyaXRl
Q2FjaGVkSW1hZ2UpOgorICAgICAgICBOZXcgbWV0aG9kIHRvIGFsbG93IGFuIGluY29tcGxldGUg
aW1hZ2UgYmUgb3ZlcndpdHRlbi4KKyAgICAgICAgKENhY2hlRW50cnkpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6SW1hZ2VGcmFtZUdlbmVyYXRvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpkZWNvZGVBbmRTY2FsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjp0cnlUb0xvY2tDb21wbGV0ZUNh
Y2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OnRyeVRvU2NhbGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6dHJ5VG9SZXN1bWVEZWNv
ZGVBbmRTY2FsZSk6CisgICAgICAgIE5ldyBtZXRob2QgdG8gbG9va3VwIGFuIGluY29tcGxldGUg
Y2FjaGUgZW50cnkgYW5kIHJlc3VtZSBkZWNvZGluZy4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6dHJ5VG9EZWNvZGVBbmRTY2FsZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpkZWNvZGVyKToKKyAgICAg
ICAgTmV3IGhlbHBlciBtZXRob2QgdG8gZG8gZGVjb2RpbmcgZm9yIGEgZnVsbCBzaXplZCBpbWFn
ZS4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OnByZXBhcmVEYXRhKToK
KyAgICAgICAgTmV3IGhlbHBlciBtZXRob2QgdG8gcHJlcGFyZSBkYXRhIHNhZmVseS4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmg6Cisg
ICAgICAgIChJbWFnZUZyYW1lR2VuZXJhdG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
YXp5RGVjb2RpbmdQaXhlbFJlZjo6b25Mb2NrUGl4ZWxzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpTY2FsZWRJbWFnZUZyYWdtZW50OjpzZXRJc0NvbXBsZXRlKToKKwogMjAxMi0xMi0wNyAgRGlt
YSBHb3JiaWsgIDxkZ29yYmlrQGFwcGxlLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgZ2VuZXJh
bCA6OmN1ZSBwc2V1ZG8gZWxlbWVudCBmb3IgdGhlIDx2aWRlbz4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKaW5kZXggMzljYmIxNzlmMThlMTUwMWU1Zjk3NTRkZDk4YzhjY2UwY2NiNTBiYy4uYTJk
YThjOTg4NTA0YWJhN2QwMzBhM2Y0M2MxZTgxY2ZkODZjYWNkYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw1OSBAQAorMjAxMi0xMi0wNCAgQWxwaGEgTGFtICA8aGNsYW1A
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1hZ2VEZWNvZGluZ1N0b3JlIHNo
b3VsZCBjYWNoZSBwYXJ0aWFsbHkgZGVjb2RlZCBpbWFnZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzc5NgorCisgICAgICAgIFJldmlld2VkIGJ5
IFN0ZXBoZW4gV2hpdGUuCisKKyAgICAgICAgQWRkZWQgdW5pdCB0ZXN0cyB0byB2ZXJpZnkgY2Fj
aGluZyBiZWhhdmlvciBmb3IgcGFydGlhbGx5IGRlY29kZWQgaW1hZ2VzLgorICAgICAgICBOZXcg
dGVzdHMgYWRkZWQ6CisgICAgICAgIC0gSW1hZ2VEZWNvZGluZ1N0b3JlVGVzdC5pbnNlcnRJbmNv
bXBsZXRlQ2FjaGUKKyAgICAgICAgSW5zZXJ0IGluY29tcGxldGUgaW1hZ2Ugd2l0aCBhIGRlY29k
ZXIgaW50byBjYWNoZS4KKworICAgICAgICAtIEltYWdlRGVjb2RpbmdTdG9yZVRlc3QuaW5zZXJ0
Q29tcGxldGVDYWNoZVdpdGhEZWNvZGVyCisgICAgICAgIEluc2VydCBjb21wbGV0ZSBpbWFnZSB3
aXRoIGEgZGVjb2RlciwgZGVjb2RlciBpcyBkZWxldGVkLgorCisgICAgICAgIC0gSW1hZ2VEZWNv
ZGluZ1N0b3JlVGVzdC5pbmNvbXBsZXRlQ2FjaGVCZWNvbWVzQ29tcGxldGUKKyAgICAgICAgUHJv
Z3Jlc3NpdmUgZG93bmxvYWRpbmcgb2YgYSBmaWxlLiBJbWFnZSBiZWNvbWVzIGNvbXBsZXRlLCBk
ZWNvZGVyIGRlbGV0ZWQuCisKKyAgICAgICAgLSBJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdC5jYWNo
ZU1pc3NXaXRoSW5jb21wbGV0ZURlY29kZUFuZFNjYWxlCisgICAgICAgIENhY2hlIGxvb2t1cCBm
YWlsZWQgYW5kIHN0YXJ0IGEgZGVjb2RpbmcgdGhhdCBkZWNvZGVkIGFuIGluY29tcGxldGUgaW1h
Z2UuCisKKyAgICAgICAgSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QuaW5jb21wbGV0ZURlY29kZUJl
Y29tZXNDb21wbGV0ZQorICAgICAgICBJbWFnZSBkZWNvZGVkIGFzIGluY29tcGxldGUsIGZpbGUg
ZnVsbHkgZG93bmxvYWRlZCBhbmQgY2FjaGUgZW50cnkgYmVjb21lcyBjb21wbGV0ZS4KKworICAg
ICAgICBJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdC5pbmNvbXBsZXRlRGVjb2RlQW5kU2NhbGVCZWNv
bWVzQ29tcGxldGUKKyAgICAgICAgSW1hZ2UgZGVjb2RlZCBhbmQgc2NhbGVkIGFzIGluY29tcGxl
dGUsIGJlY29tZXMgY29tcGxldGUgYWZ0ZXIgZmlsZSBpcyBmdWxseSBkb3dsb2FkZWQuCisKKyAg
ICAgICAgSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QuaW5jb21wbGV0ZURlY29kZUJlY29tZXNDb21w
bGV0ZU11bHRpVGhyZWFkZWQKKyAgICAgICAgVHJhbnNpdGlvbiBmcm9tIGluY29tcGxldGUgdG8g
Y29tcGxldGUsIGVudGlyZSBsaWZlY3ljbGUgaGFwcGVucyBvbiAyIHRocmVhZHMuCisKKyAgICAg
ICAgKiB0ZXN0cy9EZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RGVmZXJyZWRJbWFnZURlY29kZXJUZXN0OjpTZXRVcCk6CisgICAgICAgICogdGVzdHMvSW1h
Z2VEZWNvZGluZ1N0b3JlVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5n
U3RvcmVUZXN0OjpTZXRVcCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmVU
ZXN0OjpkZWNvZGVyQmVpbmdEZXN0cm95ZWQpOgorICAgICAgICAoSW1hZ2VEZWNvZGluZ1N0b3Jl
VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmVUZXN0OjpmcmFtZUJ1
ZmZlclJlcXVlc3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmVUZXN0
OjpmcmFtZVN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmVUZXN0
OjpjcmVhdGVJbmNvbXBsZXRlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGlu
Z1N0b3JlVGVzdDo6bG9ja0NhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1RfRik6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKiB0ZXN0cy9JbWFnZUZyYW1lR2VuZXJhdG9yVGVzdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdDo6U2V0VXApOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvclRlc3Q6OmRlY29kZXJCZWluZ0Rl
c3Ryb3llZCk6CisgICAgICAgIChJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpNb2NrSW1hZ2VEZWNvZGVyRmFjdG9yeTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRFU1RfRik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmRlY29k
ZVRocmVhZE1haW4pOgorICAgICAgICAqIHRlc3RzL01vY2tJbWFnZURlY29kZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1vY2tJbWFnZURlY29kZXI6OmNyZWF0ZSk6CisgICAgICAgIChNb2NrSW1h
Z2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tJbWFnZURlY29kZXI6OnNldFNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6TW9ja0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4
KToKKwogMjAxMi0xMi0wNyAgU2NvdHQgVmlvbGV0ICA8c2t5QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBbY2hyb21pdW1dIFJlbW92ZSBsaW51eCB0aGVtZSByZWxhdGVkIGZpbGVzIGFuZCBzd2l0
Y2ggdG8gZGVmYXVsdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAKaW5kZXggNmI2MTc1
MzAyN2RjYmU0YTI5OTM4NjJiNjBkYTRjYTc5ZTNkMGY3Ny4uNTk5MmM1MDAzZDE4YTZkMDQyNDI1
M2RiMWFlNzA5ODdmZWJmNjE2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwCkBA
IC03NywzOSArNzcsNDAgQEAgdm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OnNodXRkb3duKCkKICAg
ICBzZXRJbnN0YW5jZSgwKTsKIH0KIAotY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VE
ZWNvZGluZ1N0b3JlOjpsb2NrQ29tcGxldGVDYWNoZShjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9y
KiBnZW5lcmF0b3IsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpCitib29sIEltYWdlRGVjb2Rp
bmdTdG9yZTo6bG9ja0NhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqIGdlbmVyYXRvciwg
Y29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgQ2FjaGVDb25kaXRpb24gY29uZGl0aW9uLCBjb25z
dCBTY2FsZWRJbWFnZUZyYWdtZW50KiogY2FjaGVkSW1hZ2UsIEltYWdlRGVjb2RlcioqIGRlY29k
ZXIpCiB7CisgICAgQVNTRVJUKGNhY2hlZEltYWdlKTsKKwogICAgIENhY2hlRW50cnkqIGNhY2hl
RW50cnkgPSAwOwogICAgIHsKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKICAg
ICAgICAgQ2FjaGVNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhY2hlTWFwLmZpbmQoc3RkOjptYWtl
X3BhaXIoZ2VuZXJhdG9yLCBzY2FsZWRTaXplKSk7CiAgICAgICAgIGlmIChpdGVyID09IG1fY2Fj
aGVNYXAuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgY2FjaGVFbnRyeSA9IGl0ZXItPnZhbHVlLmdldCgpOwotICAgICAgICBp
ZiAoIWNhY2hlRW50cnktPmNhY2hlZEltYWdlKCktPmlzQ29tcGxldGUoKSkKLSAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICBpZiAoY29uZGl0aW9uID09IENhY2hlTXVzdEJlQ29tcGxldGUg
JiYgIWNhY2hlRW50cnktPmNhY2hlZEltYWdlKCktPmlzQ29tcGxldGUoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBJbmNvbXBsZXRlIGNhY2hlIGVudHJ5IGNhbm5v
dCBiZSB1c2VkIG1vcmUgdGhhbiBvbmNlLgorICAgICAgICBBU1NFUlQoY2FjaGVFbnRyeS0+Y2Fj
aGVkSW1hZ2UoKS0+aXNDb21wbGV0ZSgpIHx8ICFjYWNoZUVudHJ5LT51c2VDb3VudCgpKTsKIAog
ICAgICAgICAvLyBJbmNyZW1lbnQgdXNlIGNvdW50IHN1Y2ggdGhhdCBpdCBkb2Vzbid0IGdldCBl
dmljdGVkLgogICAgICAgICBjYWNoZUVudHJ5LT5pbmNyZW1lbnRVc2VDb3VudCgpOwogICAgIH0K
LSAgICBjYWNoZUVudHJ5LT5jYWNoZWRJbWFnZSgpLT5iaXRtYXAoKS5sb2NrUGl4ZWxzKCk7Ci0g
ICAgcmV0dXJuIGNhY2hlRW50cnktPmNhY2hlZEltYWdlKCk7Ci19CiAKLWNvbnN0IFNjYWxlZElt
YWdlRnJhZ21lbnQqIEltYWdlRGVjb2RpbmdTdG9yZTo6bG9ja0luY29tcGxldGVDYWNoZShjb25z
dCBJbWFnZUZyYW1lR2VuZXJhdG9yKiBnZW5lcmF0b3IsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNp
emUpCi17Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50LgotICAgIHJldHVybiAwOworICAgIC8vIENv
bXBsZXRlIGNhY2hlIGVudHJ5IGRvZXNuJ3QgaGF2ZSBhIGRlY29kZXIuCisgICAgQVNTRVJUKCFj
YWNoZUVudHJ5LT5jYWNoZWRJbWFnZSgpLT5pc0NvbXBsZXRlKCkgfHwgIWNhY2hlRW50cnktPmNh
Y2hlZERlY29kZXIoKSk7CisKKyAgICBpZiAoZGVjb2RlcikKKyAgICAgICAgKmRlY29kZXIgPSBj
YWNoZUVudHJ5LT5jYWNoZWREZWNvZGVyKCk7CisgICAgKmNhY2hlZEltYWdlID0gY2FjaGVFbnRy
eS0+Y2FjaGVkSW1hZ2UoKTsKKyAgICAoKmNhY2hlZEltYWdlKS0+Yml0bWFwKCkubG9ja1BpeGVs
cygpOworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6dW5s
b2NrQ2FjaGUoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciogZ2VuZXJhdG9yLCBjb25zdCBTY2Fs
ZWRJbWFnZUZyYWdtZW50KiBjYWNoZWRJbWFnZSkKIHsKICAgICBjYWNoZWRJbWFnZS0+Yml0bWFw
KCkudW5sb2NrUGl4ZWxzKCk7Ci0gICAgaWYgKCFjYWNoZWRJbWFnZS0+aXNDb21wbGV0ZSgpKSB7
Ci0gICAgICAgIC8vIERlbGV0ZSB0aGUgaW1hZ2UgaWYgaXQgaXMgaW5jb21wbGV0ZS4gSXQgd2Fz
IG5ldmVyIHN0b3JlZCBpbiBjYWNoZS4KLSAgICAgICAgZGVsZXRlIGNhY2hlZEltYWdlOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKICAg
ICBDYWNoZU1hcDo6aXRlcmF0b3IgaXRlciA9IG1fY2FjaGVNYXAuZmluZChzdGQ6Om1ha2VfcGFp
cihnZW5lcmF0b3IsIGNhY2hlZEltYWdlLT5zY2FsZWRTaXplKCkpKTsKQEAgLTEyMyw3ICsxMjQs
NyBAQCB2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6dW5sb2NrQ2FjaGUoY29uc3QgSW1hZ2VGcmFt
ZUdlbmVyYXRvciogZ2VuZXJhdG9yLCBjb25zdAogICAgIG1fb3JkZXJlZENhY2hlTGlzdC5hcHBl
bmQoY2FjaGVFbnRyeSk7CiB9CiAKLWNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIEltYWdlRGVj
b2RpbmdTdG9yZTo6aW5zZXJ0QW5kTG9ja0NhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3Iq
IGdlbmVyYXRvciwgUGFzc093blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBpbWFnZSkKK2NvbnN0
IFNjYWxlZEltYWdlRnJhZ21lbnQqIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zZXJ0QW5kTG9ja0Nh
Y2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqIGdlbmVyYXRvciwgUGFzc093blB0cjxTY2Fs
ZWRJbWFnZUZyYWdtZW50PiBpbWFnZSwgUGFzc093blB0cjxJbWFnZURlY29kZXI+IGRlY29kZXIp
CiB7CiAgICAgLy8gUHJ1bmUgb2xkIGNhY2hlIGVudHJpZXMgdG8gZ2l2ZSBzcGFjZSBmb3IgdGhl
IG5ldyBvbmUuCiAgICAgcHJ1bmUoKTsKQEAgLTEzMSwxNiArMTMyLDE0IEBAIGNvbnN0IFNjYWxl
ZEltYWdlRnJhZ21lbnQqIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zZXJ0QW5kTG9ja0NhY2hlKGNv
bnN0IEltYWdlRnJhCiAgICAgLy8gTG9jayB0aGUgdW5kZXJseWluZyBTa0JpdG1hcCB0byBwcmV2
ZW50IGl0IGZyb20gYmVpbmcgcHVyZ2VkLgogICAgIGltYWdlLT5iaXRtYXAoKS5sb2NrUGl4ZWxz
KCk7CiAKLSAgICBpZiAoIWltYWdlLT5pc0NvbXBsZXRlKCkpIHsKLSAgICAgICAgLy8gSW5jb21w
bGV0ZSBpbWFnZSBpcyBub3Qgc3RvcmVkIGluIHRoZSBjYWNoZSBhbmQgZGVsZXRlZCBhZnRlciB1
c2UuCi0gICAgICAgIC8vIFNlZSB1bmxvY2tDYWNoZSgpLgotICAgICAgICAvLyBUT0RPOiBXZSBz
aG91bGQgYWxsb3cgaW5jb21wbGV0ZSBpbWFnZXMgdG8gYmUgc3RvcmVkIHRvZ2V0aGVyIHdpdGgK
LSAgICAgICAgLy8gdGhlIGNvcnJlc3BvbmRpbmcgSW1hZ2VEZWNvZGVyLgotICAgICAgICByZXR1
cm4gaW1hZ2UubGVha1B0cigpOwotICAgIH0KLQogICAgIFNjYWxlZEltYWdlRnJhZ21lbnQqIGNh
Y2hlZEltYWdlID0gaW1hZ2UuZ2V0KCk7Ci0gICAgT3duUHRyPENhY2hlRW50cnk+IG5ld0NhY2hl
RW50cnkgPSBDYWNoZUVudHJ5OjpjcmVhdGVBbmRVc2UoZ2VuZXJhdG9yLCBpbWFnZSk7CisgICAg
T3duUHRyPENhY2hlRW50cnk+IG5ld0NhY2hlRW50cnk7CisKKyAgICAvLyBJbWFnZURlY29kZXIg
aXMgbm90IHVzZWQgYW55IG1vcmUgaWYgY2FjaGUgaXMgY29tcGxldGUuCisgICAgaWYgKGltYWdl
LT5pc0NvbXBsZXRlKCkpCisgICAgICAgIG5ld0NhY2hlRW50cnkgPSBDYWNoZUVudHJ5OjpjcmVh
dGVBbmRVc2UoZ2VuZXJhdG9yLCBpbWFnZSk7CisgICAgZWxzZQorICAgICAgICBuZXdDYWNoZUVu
dHJ5ID0gQ2FjaGVFbnRyeTo6Y3JlYXRlQW5kVXNlKGdlbmVyYXRvciwgaW1hZ2UsIGRlY29kZXIp
OwogCiAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKICAgICBBU1NFUlQoIW1fY2FjaGVN
YXAuY29udGFpbnMobmV3Q2FjaGVFbnRyeS0+Y2FjaGVLZXkoKSkpOwpAQCAtMTQ4LDYgKzE0Nywz
MCBAQCBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFnZURlY29kaW5nU3RvcmU6Omluc2Vy
dEFuZExvY2tDYWNoZShjb25zdCBJbWFnZUZyYQogICAgIHJldHVybiBjYWNoZWRJbWFnZTsKIH0K
IAorY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VEZWNvZGluZ1N0b3JlOjpvdmVyd3Jp
dGVBbmRMb2NrQ2FjaGUoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciogZ2VuZXJhdG9yLCBjb25z
dCBTY2FsZWRJbWFnZUZyYWdtZW50KiBjYWNoZWRJbWFnZSwgUGFzc093blB0cjxTY2FsZWRJbWFn
ZUZyYWdtZW50PiBuZXdJbWFnZSkKK3sKKyAgICBjYWNoZWRJbWFnZS0+Yml0bWFwKCkudW5sb2Nr
UGl4ZWxzKCk7CisKKyAgICBPd25QdHI8SW1hZ2VEZWNvZGVyPiB0cmFzaDsKKyAgICBjb25zdCBT
Y2FsZWRJbWFnZUZyYWdtZW50KiBuZXdDYWNoZWRJbWFnZSA9IDA7CisgICAgeworICAgICAgICBN
dXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOworICAgICAgICBDYWNoZU1hcDo6aXRlcmF0b3IgaXRl
ciA9IG1fY2FjaGVNYXAuZmluZChzdGQ6Om1ha2VfcGFpcihnZW5lcmF0b3IsIGNhY2hlZEltYWdl
LT5zY2FsZWRTaXplKCkpKTsKKyAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV9jYWNoZU1hcC5lbmQo
KSk7CisKKyAgICAgICAgQ2FjaGVFbnRyeSogY2FjaGVFbnRyeSA9IGl0ZXItPnZhbHVlLmdldCgp
OworICAgICAgICBBU1NFUlQoY2FjaGVFbnRyeS0+dXNlQ291bnQoKSA9PSAxKTsKKyAgICAgICAg
QVNTRVJUKCFjYWNoZUVudHJ5LT5jYWNoZWRJbWFnZSgpLT5pc0NvbXBsZXRlKCkpOworCisgICAg
ICAgIHRyYXNoID0gY2FjaGVFbnRyeS0+b3ZlcndyaXRlQ2FjaGVkSW1hZ2UobmV3SW1hZ2UpOwor
ICAgICAgICBuZXdDYWNoZWRJbWFnZSA9IGNhY2hlRW50cnktPmNhY2hlZEltYWdlKCk7CisgICAg
fQorCisgICAgLy8gTG9jayB0aGUgdW5kZXJseWluZyBTa0JpdG1hcCB0byBwcmV2ZW50IGl0IGZy
b20gYmVpbmcgcHVyZ2VkLgorICAgIG5ld0NhY2hlZEltYWdlLT5iaXRtYXAoKS5sb2NrUGl4ZWxz
KCk7CisgICAgcmV0dXJuIG5ld0NhY2hlZEltYWdlOworfQorCiB2b2lkIEltYWdlRGVjb2RpbmdT
dG9yZTo6cmVtb3ZlQ2FjaGVJbmRleGVkQnlHZW5lcmF0b3IoY29uc3QgSW1hZ2VGcmFtZUdlbmVy
YXRvciogZ2VuZXJhdG9yKQogewogICAgIFZlY3RvcjxPd25QdHI8Q2FjaGVFbnRyeT4gPiBjYWNo
ZUVudHJpZXNUb0RlbGV0ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmgKaW5kZXggNmFmMGM4
NTY4ODkwOGM5MzhhMTA3ZjczZGU5Njc5NThjNGExYzM4My4uNWYxZmIyOGFlYjQwYjkyNDVkY2Q4
YzgyN2UyODZmNzgyNGJiYmY3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmgKQEAgLTI2
LDYgKzI2LDcgQEAKICNpZm5kZWYgSW1hZ2VEZWNvZGluZ1N0b3JlX2gKICNkZWZpbmUgSW1hZ2VE
ZWNvZGluZ1N0b3JlX2gKIAorI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgogI2luY2x1ZGUgIlNj
YWxlZEltYWdlRnJhZ21lbnQuaCIKICNpbmNsdWRlICJTa1R5cGVzLmgiCiAjaW5jbHVkZSAiU2tT
aXplLmgiCkBAIC00MCwxMiArNDEsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBJbWFnZURlY29kZXI7CiBjbGFzcyBJbWFnZUZyYW1lR2VuZXJhdG9yOwogY2xhc3MgU2hhcmVk
QnVmZmVyOwogCiBjbGFzcyBJbWFnZURlY29kaW5nU3RvcmUgewogcHVibGljOgorICAgIGVudW0g
Q2FjaGVDb25kaXRpb24geworICAgICAgICBDYWNoZU11c3RCZUNvbXBsZXRlLAorICAgICAgICBD
YWNoZUNhbkJlSW5jb21wbGV0ZQorICAgIH07CisKICAgICBzdGF0aWMgUGFzc093blB0cjxJbWFn
ZURlY29kaW5nU3RvcmU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbWFnZURlY29k
aW5nU3RvcmUpOyB9CiAgICAgfkltYWdlRGVjb2RpbmdTdG9yZSgpOwogCkBAIC01MywxMCArNTgs
MTQgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVPbmNlKCk7CiAgICAgc3Rh
dGljIHZvaWQgc2h1dGRvd24oKTsKIAotICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGxv
Y2tDb21wbGV0ZUNhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqLCBjb25zdCBTa0lTaXpl
JiBzY2FsZWRTaXplKTsKLSAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBsb2NrSW5jb21w
bGV0ZUNhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqLCBjb25zdCBTa0lTaXplJiBzY2Fs
ZWRTaXplKTsKKyAgICAvLyBJZiBjYWNoZU11c3RCZUNvbXBsZXRlIGlzIHRydWUgdGhlbiBvbmx5
IHJldHVybiBhIGNvbXBsZXRlIGNhY2hlLgorICAgIGJvb2wgbG9ja0NhY2hlKGNvbnN0IEltYWdl
RnJhbWVHZW5lcmF0b3IqLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBDYWNoZUNvbmRpdGlv
biwgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCoqLCBJbWFnZURlY29kZXIqKiA9IDApOwogICAg
IHZvaWQgdW5sb2NrQ2FjaGUoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciosIGNvbnN0IFNjYWxl
ZEltYWdlRnJhZ21lbnQqKTsKLSAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBpbnNlcnRB
bmRMb2NrQ2FjaGUoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciosIFBhc3NPd25QdHI8U2NhbGVk
SW1hZ2VGcmFnbWVudD4pOworICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGluc2VydEFu
ZExvY2tDYWNoZShjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiwgUGFzc093blB0cjxTY2FsZWRJ
bWFnZUZyYWdtZW50PiwgUGFzc093blB0cjxJbWFnZURlY29kZXI+ID0gbnVsbHB0cik7CisKKyAg
ICAvLyBPdmVyd3JpdGUgYW4gZXhpc3RpbmcgY2FjaGVkIGltYWdlLiBJdCBpcyB1bmxvY2tlZCBh
bmQgdGhlbiByZXBsYWNlZCB3aXRoIHRoZSBuZXcgaW1hZ2UuCisgICAgLy8gVGhlIGV4aXN0aW5n
IGNhY2hlZCBpbWFnZSBtdXN0IGJlIGFscmVhZHkgbG9ja2VkIGFuZCBpbmNvbXBsZXRlLgorICAg
IGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIG92ZXJ3cml0ZUFuZExvY2tDYWNoZShjb25zdCBJ
bWFnZUZyYW1lR2VuZXJhdG9yKiwgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCosIFBhc3NPd25Q
dHI8U2NhbGVkSW1hZ2VGcmFnbWVudD4pOwogCiAgICAgLy8gUmVtb3ZlIGFsbCBjYWNoZSBlbnRy
aWVzIGluZGV4ZWQgYnkgSW1hZ2VGcmFtZUdlbmVyYXRvci4KICAgICB2b2lkIHJlbW92ZUNhY2hl
SW5kZXhlZEJ5R2VuZXJhdG9yKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqKTsKQEAgLTcxLDE2
ICs4MCwxNyBAQCBwcml2YXRlOgogICAgIGNsYXNzIENhY2hlRW50cnkgOiBwdWJsaWMgRG91Ymx5
TGlua2VkTGlzdE5vZGU8Q2FjaGVFbnRyeT4gewogICAgICAgICBmcmllbmQgY2xhc3MgV1RGOjpE
b3VibHlMaW5rZWRMaXN0Tm9kZTxDYWNoZUVudHJ5PjsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0
YXRpYyBQYXNzT3duUHRyPENhY2hlRW50cnk+IGNyZWF0ZUFuZFVzZShjb25zdCBJbWFnZUZyYW1l
R2VuZXJhdG9yKiBnZW5lcmF0b3IsIFBhc3NPd25QdHI8U2NhbGVkSW1hZ2VGcmFnbWVudD4gaW1h
Z2UpCisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPENhY2hlRW50cnk+IGNyZWF0ZUFuZFVzZShj
b25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiBnZW5lcmF0b3IsIFBhc3NPd25QdHI8U2NhbGVkSW1h
Z2VGcmFnbWVudD4gaW1hZ2UsIFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBkZWNvZGVyID0gbnVs
bHB0cikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDYWNoZUVu
dHJ5KGdlbmVyYXRvciwgaW1hZ2UsIDEpKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgQ2FjaGVFbnRyeShnZW5lcmF0b3IsIGltYWdlLCBkZWNvZGVyLCAxKSk7CiAgICAgICAgIH0K
IAotICAgICAgICBDYWNoZUVudHJ5KGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqIGdlbmVyYXRv
ciwgUGFzc093blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBpbWFnZSwgaW50IGNvdW50KQorICAg
ICAgICBDYWNoZUVudHJ5KGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqIGdlbmVyYXRvciwgUGFz
c093blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBpbWFnZSwgUGFzc093blB0cjxJbWFnZURlY29k
ZXI+IGRlY29kZXIsIGludCBjb3VudCkKICAgICAgICAgICAgIDogbV9wcmV2KDApCiAgICAgICAg
ICAgICAsIG1fbmV4dCgwKQogICAgICAgICAgICAgLCBtX2dlbmVyYXRvcihnZW5lcmF0b3IpCiAg
ICAgICAgICAgICAsIG1fY2FjaGVkSW1hZ2UoaW1hZ2UpCisgICAgICAgICAgICAsIG1fY2FjaGVk
RGVjb2RlcihkZWNvZGVyKQogICAgICAgICAgICAgLCBtX3VzZUNvdW50KGNvdW50KQogICAgICAg
ICB7CiAgICAgICAgIH0KQEAgLTkyLDYgKzEwMiwxNSBAQCBwcml2YXRlOgogCiAgICAgICAgIENh
Y2hlSWRlbnRpZmllciBjYWNoZUtleSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG1f
Z2VuZXJhdG9yLCBtX2NhY2hlZEltYWdlLT5zY2FsZWRTaXplKCkpOyB9CiAgICAgICAgIGNvbnN0
IFNjYWxlZEltYWdlRnJhZ21lbnQqIGNhY2hlZEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9jYWNo
ZWRJbWFnZS5nZXQoKTsgfQorICAgICAgICBTY2FsZWRJbWFnZUZyYWdtZW50KiBjYWNoZWRJbWFn
ZSgpIHsgcmV0dXJuIG1fY2FjaGVkSW1hZ2UuZ2V0KCk7IH0KKyAgICAgICAgSW1hZ2VEZWNvZGVy
KiBjYWNoZWREZWNvZGVyKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWREZWNvZGVyLmdldCgpOyB9
CisgICAgICAgIFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBvdmVyd3JpdGVDYWNoZWRJbWFnZShQ
YXNzT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IGltYWdlKQorICAgICAgICB7CisgICAgICAg
ICAgICBtX2NhY2hlZEltYWdlID0gaW1hZ2U7CisgICAgICAgICAgICBpZiAobV9jYWNoZWRJbWFn
ZS0+aXNDb21wbGV0ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBtX2NhY2hlZERlY29kZXIu
cmVsZWFzZSgpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KICAgICAg
ICAgaW50IHVzZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV91c2VDb3VudDsgfQogICAgICAgICB2
b2lkIGluY3JlbWVudFVzZUNvdW50KCkgeyArK21fdXNlQ291bnQ7IH0KICAgICAgICAgdm9pZCBk
ZWNyZW1lbnRVc2VDb3VudCgpIHsgLS1tX3VzZUNvdW50OyBBU1NFUlQobV91c2VDb3VudCA+PSAw
KTsgfQpAQCAtMTA1LDYgKzEyNCw3IEBAIHByaXZhdGU6CiAgICAgICAgIENhY2hlRW50cnkqIG1f
bmV4dDsKICAgICAgICAgY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciogbV9nZW5lcmF0b3I7CiAg
ICAgICAgIE93blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBtX2NhY2hlZEltYWdlOworICAgICAg
ICBPd25QdHI8SW1hZ2VEZWNvZGVyPiBtX2NhY2hlZERlY29kZXI7CiAgICAgICAgIGludCBtX3Vz
ZUNvdW50OwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAKaW5kZXgg
ZWY4NTA1NWM0ZGMyM2E0ZDYwMGYzOTA4YzlmMDUzOTFmYTljNDlhNC4uMmMyYTFkMmIwYjg0YjZm
YjRlM2M0MTU2MzRjMGZmNWJiZDVhNjgyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRv
ci5jcHAKQEAgLTQ4LDYgKzQ4LDcgQEAgc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSZXNpemVNZXRo
b2QgcmVzaXplTWV0aG9kKCkKIEltYWdlRnJhbWVHZW5lcmF0b3I6OkltYWdlRnJhbWVHZW5lcmF0
b3IoY29uc3QgU2tJU2l6ZSYgZnVsbFNpemUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRh
LCBib29sIGFsbERhdGFSZWNlaXZlZCkKICAgICA6IG1fZnVsbFNpemUoZnVsbFNpemUpCiAgICAg
LCBtX2FsbERhdGFSZWNlaXZlZChmYWxzZSkKKyAgICAsIG1fZGVjb2RlRmFpbGVkQW5kRW1wdHko
ZmFsc2UpCiB7CiAgICAgc2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwogfQpAQCAtNzYs
OSArNzcsMTIgQEAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VGcmFtZUdlbmVyYXRv
cjo6ZGVjb2RlQW5kU2NhbGUoY29uc3QgU2tJU2l6ZSYgc2MKICAgICAvLyBQcmV2ZW50cyBjb25j
dXJyZW50IGRlY29kZSBvciBzY2FsZSBvcGVyYXRpb25zIG9uIHRoZSBzYW1lIGltYWdlIGRhdGEu
CiAgICAgLy8gTXVsdGlwbGUgTGF6eURlY29kaW5nUGl4ZWxSZWZzIGNhbiBjYWxsIHRoaXMgbWV0
aG9kIGF0IHRoZSBzYW1lIHRpbWUuCiAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2RlY29kZU11dGV4
KTsKKyAgICBpZiAobV9kZWNvZGVGYWlsZWRBbmRFbXB0eSkKKyAgICAgICAgcmV0dXJuIDA7CisK
ICAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBjYWNoZWRJbWFnZSA9IDA7CiAKLSAgICBj
YWNoZWRJbWFnZSA9IHRyeVRvTG9ja0NhY2hlKHNjYWxlZFNpemUpOworICAgIGNhY2hlZEltYWdl
ID0gdHJ5VG9Mb2NrQ29tcGxldGVDYWNoZShzY2FsZWRTaXplKTsKICAgICBpZiAoY2FjaGVkSW1h
Z2UpCiAgICAgICAgIHJldHVybiBjYWNoZWRJbWFnZTsKIApAQCAtODYsMTUgKzkwLDIyIEBAIGNv
bnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIEltYWdlRnJhbWVHZW5lcmF0b3I6OmRlY29kZUFuZFNj
YWxlKGNvbnN0IFNrSVNpemUmIHNjCiAgICAgaWYgKGNhY2hlZEltYWdlKQogICAgICAgICByZXR1
cm4gY2FjaGVkSW1hZ2U7CiAKKyAgICBjYWNoZWRJbWFnZSA9IHRyeVRvUmVzdW1lRGVjb2RlQW5k
U2NhbGUoc2NhbGVkU2l6ZSk7CisgICAgaWYgKGNhY2hlZEltYWdlKQorICAgICAgICByZXR1cm4g
Y2FjaGVkSW1hZ2U7CisKICAgICBjYWNoZWRJbWFnZSA9IHRyeVRvRGVjb2RlQW5kU2NhbGUoc2Nh
bGVkU2l6ZSk7CiAgICAgaWYgKGNhY2hlZEltYWdlKQogICAgICAgICByZXR1cm4gY2FjaGVkSW1h
Z2U7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIEltYWdl
RnJhbWVHZW5lcmF0b3I6OnRyeVRvTG9ja0NhY2hlKGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUp
Citjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFnZUZyYW1lR2VuZXJhdG9yOjp0cnlUb0xv
Y2tDb21wbGV0ZUNhY2hlKGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpCiB7Ci0gICAgcmV0dXJu
IEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+bG9ja0NvbXBsZXRlQ2FjaGUodGhpcywg
c2NhbGVkU2l6ZSk7CisgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogY2FjaGVkSW1hZ2Ug
PSAwOworICAgIGlmIChJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmxvY2tDYWNoZSh0
aGlzLCBzY2FsZWRTaXplLCBJbWFnZURlY29kaW5nU3RvcmU6OkNhY2hlTXVzdEJlQ29tcGxldGUs
ICZjYWNoZWRJbWFnZSkpCisgICAgICAgIHJldHVybiBjYWNoZWRJbWFnZTsKKyAgICByZXR1cm4g
MDsKIH0KIAogY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VGcmFtZUdlbmVyYXRvcjo6
dHJ5VG9TY2FsZShjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBmdWxsU2l6ZUltYWdlLCBjb25z
dCBTa0lTaXplJiBzY2FsZWRTaXplKQpAQCAtMTA0LDEwICsxMTUsNyBAQCBjb25zdCBTY2FsZWRJ
bWFnZUZyYWdtZW50KiBJbWFnZUZyYW1lR2VuZXJhdG9yOjp0cnlUb1NjYWxlKGNvbnN0IFNjYWxl
ZEltYWdlRnJhZwogICAgIGlmIChzY2FsZWRTaXplID09IG1fZnVsbFNpemUpCiAgICAgICAgIHJl
dHVybiAwOwogCi0gICAgaWYgKCFmdWxsU2l6ZUltYWdlKQotICAgICAgICBmdWxsU2l6ZUltYWdl
ID0gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5sb2NrQ29tcGxldGVDYWNoZSh0aGlz
LCBtX2Z1bGxTaXplKTsKLQotICAgIGlmICghZnVsbFNpemVJbWFnZSkKKyAgICBpZiAoIWZ1bGxT
aXplSW1hZ2UgJiYgIUltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+bG9ja0NhY2hlKHRo
aXMsIG1fZnVsbFNpemUsIEltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVNdXN0QmVDb21wbGV0ZSwg
JmZ1bGxTaXplSW1hZ2UpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIFNrQml0bWFwIHNjYWxl
ZEJpdG1hcCA9IHNraWE6OkltYWdlT3BlcmF0aW9uczo6UmVzaXplKApAQCAtMTE1LDQyICsxMjMs
OTggQEAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VGcmFtZUdlbmVyYXRvcjo6dHJ5
VG9TY2FsZShjb25zdCBTY2FsZWRJbWFnZUZyYWcKICAgICBPd25QdHI8U2NhbGVkSW1hZ2VGcmFn
bWVudD4gc2NhbGVkSW1hZ2UgPSBTY2FsZWRJbWFnZUZyYWdtZW50OjpjcmVhdGUoc2NhbGVkU2l6
ZSwgc2NhbGVkQml0bWFwLCBmdWxsU2l6ZUltYWdlLT5pc0NvbXBsZXRlKCkpOwogCiAgICAgSW1h
Z2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZSh0aGlzLCBmdWxsU2l6ZUlt
YWdlKTsKKworICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGNhY2hlZEltYWdlID0gMDsK
KworICAgIC8vIElmIGEgY2FjaGUgbG9va3VwIGlzIHN1Y2Nlc3NmdWwgdGhlbiB0aGUgY2FjaGUg
ZW50cnkgbXVzdCBiZSBpbmNvbXBsZXRlCisgICAgLy8gdGhlcmVmb3JlIGl0IGlzIHNhZmUgdG8g
b3ZlcndyaXRlLgorICAgIGlmIChJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmxvY2tD
YWNoZSh0aGlzLCBzY2FsZWRTaXplLCBJbWFnZURlY29kaW5nU3RvcmU6OkNhY2hlQ2FuQmVJbmNv
bXBsZXRlLCAmY2FjaGVkSW1hZ2UpKQorICAgICAgICByZXR1cm4gSW1hZ2VEZWNvZGluZ1N0b3Jl
OjppbnN0YW5jZSgpLT5vdmVyd3JpdGVBbmRMb2NrQ2FjaGUodGhpcywgY2FjaGVkSW1hZ2UsIHNj
YWxlZEltYWdlLnJlbGVhc2UoKSk7CiAgICAgcmV0dXJuIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5z
dGFuY2UoKS0+aW5zZXJ0QW5kTG9ja0NhY2hlKHRoaXMsIHNjYWxlZEltYWdlLnJlbGVhc2UoKSk7
CiB9CiAKK2NvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIEltYWdlRnJhbWVHZW5lcmF0b3I6OnRy
eVRvUmVzdW1lRGVjb2RlQW5kU2NhbGUoY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkKK3sKKyAg
ICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBjYWNoZWRJbWFnZSA9IDA7CisgICAgSW1hZ2VE
ZWNvZGVyKiBjYWNoZWREZWNvZGVyID0gMDsKKyAgICBpZiAoIUltYWdlRGVjb2RpbmdTdG9yZTo6
aW5zdGFuY2UoKS0+bG9ja0NhY2hlKHRoaXMsIG1fZnVsbFNpemUsIEltYWdlRGVjb2RpbmdTdG9y
ZTo6Q2FjaGVDYW5CZUluY29tcGxldGUsICZjYWNoZWRJbWFnZSwgJmNhY2hlZERlY29kZXIpKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBBU1NFUlQoY2FjaGVkRGVjb2Rlcik7CisKKyAgICBPd25Q
dHI8U2NhbGVkSW1hZ2VGcmFnbWVudD4gZnVsbFNpemVJbWFnZSA9IGRlY29kZSgmY2FjaGVkRGVj
b2Rlcik7CisKKyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBjYWNoZWRGdWxsU2l6ZUlt
YWdlID0gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5vdmVyd3JpdGVBbmRMb2NrQ2Fj
aGUoCisgICAgICAgIHRoaXMsIGNhY2hlZEltYWdlLCBmdWxsU2l6ZUltYWdlLnJlbGVhc2UoKSk7
CisKKyAgICBpZiAobV9mdWxsU2l6ZSA9PSBzY2FsZWRTaXplKQorICAgICAgICByZXR1cm4gY2Fj
aGVkRnVsbFNpemVJbWFnZTsKKyAgICByZXR1cm4gdHJ5VG9TY2FsZShjYWNoZWRGdWxsU2l6ZUlt
YWdlLCBzY2FsZWRTaXplKTsKK30KKwogY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VG
cmFtZUdlbmVyYXRvcjo6dHJ5VG9EZWNvZGVBbmRTY2FsZShjb25zdCBTa0lTaXplJiBzY2FsZWRT
aXplKQogeworICAgIEltYWdlRGVjb2RlciogZGVjb2RlciA9IDA7CisgICAgT3duUHRyPFNjYWxl
ZEltYWdlRnJhZ21lbnQ+IGZ1bGxTaXplSW1hZ2UgPSBkZWNvZGUoJmRlY29kZXIpOworCisgICAg
aWYgKCFkZWNvZGVyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIE93blB0cjxJbWFnZURlY29k
ZXI+IGRlY29kZXJDb250YWluZXIgPSBhZG9wdFB0cihkZWNvZGVyKTsKKworICAgIGlmICghZnVs
bFNpemVJbWFnZSkgeworICAgICAgICAvLyBJZiBkZWNvZGUgaGFzIGZhaWxlZCBhbmQgcmVzdWx0
ZWQgYW4gZW1wdHkgaW1hZ2Ugd2UgbmVlZCB0byBtYWtlCisgICAgICAgIC8vIHN1cmUgd2UgZG9u
J3QgZG8gd2FzdGVkIHdvcmsgaW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgbV9kZWNvZGVGYWlsZWRB
bmRFbXB0eSA9IGRlY29kZXJDb250YWluZXItPmZhaWxlZCgpOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisKKyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBjYWNoZWRGdWxsU2l6ZUlt
YWdlID0gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5pbnNlcnRBbmRMb2NrQ2FjaGUo
CisgICAgICAgIHRoaXMsIGZ1bGxTaXplSW1hZ2UucmVsZWFzZSgpLCBkZWNvZGVyQ29udGFpbmVy
LnJlbGVhc2UoKSk7CisKKyAgICBpZiAobV9mdWxsU2l6ZSA9PSBzY2FsZWRTaXplKQorICAgICAg
ICByZXR1cm4gY2FjaGVkRnVsbFNpemVJbWFnZTsKKyAgICByZXR1cm4gdHJ5VG9TY2FsZShjYWNo
ZWRGdWxsU2l6ZUltYWdlLCBzY2FsZWRTaXplKTsKK30KKworUGFzc093blB0cjxTY2FsZWRJbWFn
ZUZyYWdtZW50PiBJbWFnZUZyYW1lR2VuZXJhdG9yOjpkZWNvZGUoSW1hZ2VEZWNvZGVyKiogZGVj
b2RlcikKK3sKKyAgICBBU1NFUlQoZGVjb2Rlcik7CiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
ZGF0YTsKICAgICBib29sIGFsbERhdGFSZWNlaXZlZCA9IGZhbHNlOwotICAgIHsKLSAgICAgICAg
TXV0ZXhMb2NrZXIgbG9jayhtX2RhdGFNdXRleCk7CisgICAgcHJlcGFyZURhdGEoJmRhdGEsICZh
bGxEYXRhUmVjZWl2ZWQpOworCisgICAgLy8gVHJ5IHRvIGNyZWF0ZSBhbiBJbWFnZURlY29kZXIg
aWYgd2UgYXJlIG5vdCBnaXZlbiBvbmUuCisgICAgaWYgKCEqZGVjb2RlcikgeworICAgICAgICAq
ZGVjb2RlciA9IEltYWdlRGVjb2Rlcjo6Y3JlYXRlKCpkYXRhLmdldCgpLCBJbWFnZVNvdXJjZTo6
QWxwaGFQcmVtdWx0aXBsaWVkLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVBcHBs
aWVkKTsKKworICAgICAgICBpZiAoISpkZWNvZGVyICYmIG1faW1hZ2VEZWNvZGVyRmFjdG9yeSkK
KyAgICAgICAgICAgICpkZWNvZGVyID0gbV9pbWFnZURlY29kZXJGYWN0b3J5LT5jcmVhdGUoKS5s
ZWFrUHRyKCk7CiAKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkbyBhIHNoYWxsb3cgY29w
eSBpbnN0ZWFkLiBOb3cgd2UncmUgcmVzdHJpY3RlZCBieSB0aGUgQVBJIG9mIFNoYXJlZEJ1ZmZl
ci4KLSAgICAgICAgZGF0YSA9IG1fZGF0YS0+Y29weSgpOwotICAgICAgICBhbGxEYXRhUmVjZWl2
ZWQgPSBtX2FsbERhdGFSZWNlaXZlZDsKKyAgICAgICAgaWYgKCEqZGVjb2RlcikKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIE93blB0cjxJbWFnZURlY29kZXI+IGRl
Y29kZXIoYWRvcHRQdHIoSW1hZ2VEZWNvZGVyOjpjcmVhdGUoKmRhdGEuZ2V0KCksIEltYWdlU291
cmNlOjpBbHBoYVByZW11bHRpcGxpZWQsIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmls
ZUFwcGxpZWQpKSk7Ci0gICAgaWYgKCFkZWNvZGVyICYmIG1faW1hZ2VEZWNvZGVyRmFjdG9yeSkK
LSAgICAgICAgZGVjb2RlciA9IG1faW1hZ2VEZWNvZGVyRmFjdG9yeS0+Y3JlYXRlKCk7Ci0gICAg
aWYgKCFkZWNvZGVyKQotICAgICAgICByZXR1cm4gMDsKKyAgICAoKmRlY29kZXIpLT5zZXREYXRh
KGRhdGEuZ2V0KCksIGFsbERhdGFSZWNlaXZlZCk7CisgICAgSW1hZ2VGcmFtZSogZnJhbWUgPSAo
KmRlY29kZXIpLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMCk7CisgICAgKCpkZWNvZGVyKS0+c2V0RGF0
YSgwLCBmYWxzZSk7IC8vIFVucmVmIFNoYXJlZEJ1ZmZlciBmcm9tIEltYWdlRGVjb2Rlci4KIAot
ICAgIGRlY29kZXItPnNldERhdGEoZGF0YS5nZXQoKSwgYWxsRGF0YVJlY2VpdmVkKTsKLSAgICBJ
bWFnZUZyYW1lKiBmcmFtZSA9IGRlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleCgwKTsKICAgICBp
ZiAoIWZyYW1lIHx8IGZyYW1lLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KQot
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBib29sIGlz
Q29tcGxldGUgPSBmcmFtZS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZTsK
ICAgICBTa0JpdG1hcCBmdWxsU2l6ZUJpdG1hcCA9IGZyYW1lLT5nZXRTa0JpdG1hcCgpOwogICAg
IEFTU0VSVChmdWxsU2l6ZUJpdG1hcC53aWR0aCgpID09IG1fZnVsbFNpemUud2lkdGgoKSAmJiBm
dWxsU2l6ZUJpdG1hcC5oZWlnaHQoKSA9PSBtX2Z1bGxTaXplLmhlaWdodCgpKTsKIAotICAgIGNv
bnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGZ1bGxTaXplSW1hZ2UgPSBJbWFnZURlY29kaW5nU3Rv
cmU6Omluc3RhbmNlKCktPmluc2VydEFuZExvY2tDYWNoZSgKLSAgICAgICAgdGhpcywgU2NhbGVk
SW1hZ2VGcmFnbWVudDo6Y3JlYXRlKG1fZnVsbFNpemUsIGZ1bGxTaXplQml0bWFwLCBpc0NvbXBs
ZXRlKSk7CisgICAgcmV0dXJuIFNjYWxlZEltYWdlRnJhZ21lbnQ6OmNyZWF0ZShtX2Z1bGxTaXpl
LCBmdWxsU2l6ZUJpdG1hcCwgaXNDb21wbGV0ZSk7Cit9CiAKLSAgICBpZiAobV9mdWxsU2l6ZSA9
PSBzY2FsZWRTaXplKQotICAgICAgICByZXR1cm4gZnVsbFNpemVJbWFnZTsKLSAgICByZXR1cm4g
dHJ5VG9TY2FsZShmdWxsU2l6ZUltYWdlLCBzY2FsZWRTaXplKTsKK3ZvaWQgSW1hZ2VGcmFtZUdl
bmVyYXRvcjo6cHJlcGFyZURhdGEoUmVmUHRyPFNoYXJlZEJ1ZmZlcj4qIGRhdGEsIGJvb2wqIGFs
bERhdGFSZWNlaXZlZCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrKG1fZGF0YU11dGV4KTsKKwor
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZG8gYSBzaGFsbG93IGNvcHkgaW5zdGVhZC4gTm93IHdl
J3JlIHJlc3RyaWN0ZWQgYnkgdGhlIEFQSSBvZiBTaGFyZWRCdWZmZXIuCisgICAgKmRhdGEgPSBt
X2RhdGEtPmNvcHkoKTsKKyAgICAqYWxsRGF0YVJlY2VpdmVkID0gbV9hbGxEYXRhUmVjZWl2ZWQ7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3Iu
aAppbmRleCAwODMxYzQ0OTgyMTE0ZjRhNjZjNjk2N2U5ZjJiNjhjYTAzM2NmNTk3Li5iYTQ5YWE5
MTkyNGFmOWExN2NjNTM5NTdjNDdjMGQzZjgzOTRkMWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdl
bmVyYXRvci5oCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmdQcmltaXRpdmVzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTY2LDEzICs2NywxOSBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgLy8g
VGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHdoaWxlIG1fZGVjb2RlTXV0ZXggaXMgbG9ja2VkLgot
ICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIHRyeVRvTG9ja0NhY2hlKGNvbnN0IFNrSVNp
emUmIHNjYWxlZFNpemUpOworICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIHRyeVRvTG9j
a0NvbXBsZXRlQ2FjaGUoY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSk7CiAgICAgY29uc3QgU2Nh
bGVkSW1hZ2VGcmFnbWVudCogdHJ5VG9TY2FsZShjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBm
dWxsU2l6ZUltYWdlLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKTsKKyAgICBjb25zdCBTY2Fs
ZWRJbWFnZUZyYWdtZW50KiB0cnlUb1Jlc3VtZURlY29kZUFuZFNjYWxlKGNvbnN0IFNrSVNpemUm
IHNjYWxlZFNpemUpOwogICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIHRyeVRvRGVjb2Rl
QW5kU2NhbGUoY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSk7CiAKKyAgICAvLyBVc2UgdGhlIGdp
dmVuIGRlY29kZXIgdG8gZGVjb2RlLiBJZiBhIGRlY29kZXIgaXMgbm90IGdpdmVuIHRoZW4gdHJ5
IHRvIGNyZWF0ZSBvbmUuCisgICAgUGFzc093blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBkZWNv
ZGUoSW1hZ2VEZWNvZGVyKiopOworICAgIHZvaWQgcHJlcGFyZURhdGEoUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4qLCBib29sKiBhbGxEYXRhUmVjZWl2ZWQpOworCiAgICAgU2tJU2l6ZSBtX2Z1bGxTaXpl
OwogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKICAgICBib29sIG1fYWxsRGF0YVJl
Y2VpdmVkOworICAgIGJvb2wgbV9kZWNvZGVGYWlsZWRBbmRFbXB0eTsKIAogICAgIE93blB0cjxJ
bWFnZURlY29kZXJGYWN0b3J5PiBtX2ltYWdlRGVjb2RlckZhY3Rvcnk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1Bp
eGVsUmVmLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
enlEZWNvZGluZ1BpeGVsUmVmLmNwcAppbmRleCBmMzEyMGU3OWQ4MGVkNWFiNDQwMzI3NDVlYjE2
MWRmYzQwOGQ4OTNlLi4wMDI1OGM2MjE0NWYxNmQyNDViNTU4Zjc0MmI1MmY4NmNkYmU4M2FkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5
RGVjb2RpbmdQaXhlbFJlZi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwCkBAIC02MCw3ICs2MCw4IEBAIHZv
aWQqIExhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxvY2tQaXhlbHMoU2tDb2xvclRhYmxlKiopCiAg
ICAgbV9tdXRleC5sb2NrKCk7CiAgICAgQVNTRVJUKCFtX2xvY2tlZENhY2hlZEltYWdlKTsKIAot
ICAgIG1fbG9ja2VkQ2FjaGVkSW1hZ2UgPSBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCkt
PmxvY2tDb21wbGV0ZUNhY2hlKG1fZnJhbWVHZW5lcmF0b3IuZ2V0KCksIG1fc2NhbGVkU2l6ZSk7
CisgICAgaWYgKCFJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmxvY2tDYWNoZShtX2Zy
YW1lR2VuZXJhdG9yLmdldCgpLCBtX3NjYWxlZFNpemUsIEltYWdlRGVjb2RpbmdTdG9yZTo6Q2Fj
aGVNdXN0QmVDb21wbGV0ZSwgJm1fbG9ja2VkQ2FjaGVkSW1hZ2UpKQorICAgICAgICBtX2xvY2tl
ZENhY2hlZEltYWdlID0gMDsKIAogICAgIC8vIFVzZSBJbWFnZUZyYW1lR2VuZXJhdG9yIHRvIGdl
bmVyYXRlIHRoZSBpbWFnZS4gSXQgd2lsbCBsb2NrIHRoZSBjYWNoZQogICAgIC8vIGVudHJ5IGZv
ciB1cy4KQEAgLTkxLDEwICs5MiwxMyBAQCBib29sIExhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxv
Y2tQaXhlbHNBcmVXcml0YWJsZSgpIGNvbnN0CiAKIGJvb2wgTGF6eURlY29kaW5nUGl4ZWxSZWY6
OlByZXBhcmVUb0RlY29kZShjb25zdCBMYXp5UGl4ZWxSZWY6OlByZXBhcmVQYXJhbXMmIHBhcmFt
cykKIHsKLSAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOwogICAgIC8vIFRPRE86IGNoZWNr
IGlmIG9ubHkgYSBwYXJ0aWN1bGFyIHJlY3QgaXMgYXZhaWxhYmxlIGluIGltYWdlIGNhY2hlLgog
ICAgIFVOVVNFRF9QQVJBTShwYXJhbXMpOwotICAgIHJldHVybiBJbWFnZURlY29kaW5nU3RvcmU6
Omluc3RhbmNlKCktPmxvY2tDb21wbGV0ZUNhY2hlKG1fZnJhbWVHZW5lcmF0b3IuZ2V0KCksIG1f
c2NhbGVkU2l6ZSk7CisgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogY2FjaGVkSW1hZ2Ug
PSAwOworICAgIGJvb2wgY2FjaGVkID0gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5s
b2NrQ2FjaGUobV9mcmFtZUdlbmVyYXRvci5nZXQoKSwgbV9zY2FsZWRTaXplLCBJbWFnZURlY29k
aW5nU3RvcmU6OkNhY2hlTXVzdEJlQ29tcGxldGUsICZjYWNoZWRJbWFnZSk7CisgICAgaWYgKGNh
Y2hlZCkKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNo
ZShtX2ZyYW1lR2VuZXJhdG9yLmdldCgpLCBjYWNoZWRJbWFnZSk7CisgICAgcmV0dXJuIGNhY2hl
ZDsKIH0KIAogdm9pZCBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6RGVjb2RlKCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NjYWxlZEltYWdlRnJh
Z21lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NjYWxl
ZEltYWdlRnJhZ21lbnQuaAppbmRleCBmMDcwN2IzY2UzNGM2NDRmNWJiNzUxNGZkNjRiMWRmMmQw
NzEyYzc3Li4wMGEyMmI1MDA2YTkyOGZiYjMwOGM4N2I1YTBlM2Y2ZjJmY2YwNmU2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2FsZWRJbWFn
ZUZyYWdtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vU2NhbGVkSW1hZ2VGcmFnbWVudC5oCkBAIC00OSw2ICs0OSw3IEBAIHB1YmxpYzoKICAgICBj
b25zdCBTa0JpdG1hcCYgYml0bWFwKCkgY29uc3QgeyByZXR1cm4gbV9iaXRtYXA7IH0KICAgICBT
a0JpdG1hcCYgYml0bWFwKCkgeyByZXR1cm4gbV9iaXRtYXA7IH0KICAgICBib29sIGlzQ29tcGxl
dGUoKSBjb25zdCB7IHJldHVybiBtX2lzQ29tcGxldGU7IH0KKyAgICB2b2lkIHNldElzQ29tcGxl
dGUoKSB7IG1faXNDb21wbGV0ZSA9IHRydWU7IH0KIAogcHJpdmF0ZToKICAgICBTa0lTaXplIG1f
c2NhbGVkU2l6ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRGVm
ZXJyZWRJbWFnZURlY29kZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
RGVmZXJyZWRJbWFnZURlY29kZXJUZXN0LmNwcAppbmRleCA3ZmQ0MDE3YTZlNDBiZmZjYWY3N2Rm
NmNjZjExZjA1MjY0YThmNjM2Li43ZjE5MDBiMWNkZDIyNDI1MTgyMGVjOGFhNDE2MzU2YzI1Njcz
NTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlZmVycmVkSW1h
Z2VEZWNvZGVyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9EZWZl
cnJlZEltYWdlRGVjb2RlclRlc3QuY3BwCkBAIC03Niw5ICs3NiwxMCBAQCBwdWJsaWM6CiAgICAg
ICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uY2UoKTsKICAgICAgICAgRGVmZXJy
ZWRJbWFnZURlY29kZXI6OnNldEVuYWJsZWQodHJ1ZSk7CiAgICAgICAgIG1fZGF0YSA9IFNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKHdoaXRlUE5HLCBzaXplb2Yod2hpdGVQTkcpKTsKLSAgICAgICAgbV9h
Y3R1YWxEZWNvZGVyID0gbmV3IE1vY2tJbWFnZURlY29kZXIodGhpcyk7CisgICAgICAgIE93blB0
cjxNb2NrSW1hZ2VEZWNvZGVyPiBkZWNvZGVyID0gTW9ja0ltYWdlRGVjb2Rlcjo6Y3JlYXRlKHRo
aXMpOworICAgICAgICBtX2FjdHVhbERlY29kZXIgPSBkZWNvZGVyLmdldCgpOwogICAgICAgICBt
X2FjdHVhbERlY29kZXItPnNldFNpemUoMSwgMSk7Ci0gICAgICAgIG1fbGF6eURlY29kZXIgPSBE
ZWZlcnJlZEltYWdlRGVjb2Rlcjo6Y3JlYXRlRm9yVGVzdGluZyhhZG9wdFB0cihtX2FjdHVhbERl
Y29kZXIpKTsKKyAgICAgICAgbV9sYXp5RGVjb2RlciA9IERlZmVycmVkSW1hZ2VEZWNvZGVyOjpj
cmVhdGVGb3JUZXN0aW5nKGRlY29kZXIucmVsZWFzZSgpKTsKICAgICAgICAgbV9sYXp5RGVjb2Rl
ci0+c2V0RGF0YShtX2RhdGEuZ2V0KCksIHRydWUpOwogICAgICAgICBtX2NhbnZhcy5yZXNldChj
cmVhdGVSYXN0ZXJDYW52YXMoMTAwLCAxMDApKTsKICAgICAgICAgbV9mcmFtZUJ1ZmZlclJlcXVl
c3RDb3VudCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lt
YWdlRGVjb2RpbmdTdG9yZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9J
bWFnZURlY29kaW5nU3RvcmVUZXN0LmNwcAppbmRleCAwMzhhZTcyMGI1NzViZjk5NjBiNTg3MmJl
MWUwOTc0ZmEzZDdkOWIzLi44M2VhODQyOTZlMTYxNjhhZTRlNDdjODlkZGZjZDFmMTdhYzM3ZmFh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlRGVjb2RpbmdT
dG9yZVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VEZWNv
ZGluZ1N0b3JlVGVzdC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJJbWFnZURlY29k
aW5nU3RvcmUuaCIKIAogI2luY2x1ZGUgIkltYWdlRnJhbWVHZW5lcmF0b3IuaCIKKyNpbmNsdWRl
ICJNb2NrSW1hZ2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVk
ZSA8Z3Rlc3QvZ3Rlc3QuaD4KIApAQCAtMzUsMTMgKzM2LDE0IEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCiBuYW1lc3BhY2UgewogCi1jbGFzcyBJbWFnZURlY29kaW5nU3RvcmVUZXN0IDog
cHVibGljIDo6dGVzdGluZzo6VGVzdCB7CitjbGFzcyBJbWFnZURlY29kaW5nU3RvcmVUZXN0IDog
cHVibGljIDo6dGVzdGluZzo6VGVzdCwgcHVibGljIE1vY2tJbWFnZURlY29kZXJDbGllbnQgewog
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCiAgICAgewogICAgICAgICBJbWFnZURl
Y29kaW5nU3RvcmU6OmluaXRpYWxpemVPbmNlKCk7CiAgICAgICAgIG1fZGF0YSA9IFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKCk7CiAgICAgICAgIG1fZ2VuZXJhdG9yID0gSW1hZ2VGcmFtZUdlbmVyYXRv
cjo6Y3JlYXRlKFNrSVNpemU6Ok1ha2UoMTAwLCAxMDApLCBtX2RhdGEsIHRydWUpOworICAgICAg
ICBtX2RlY29kZXJzRGVzdHJveWVkID0gMDsKICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgVGVh
ckRvd24oKQpAQCAtNDksNiArNTEsMjIgQEAgcHVibGljOgogICAgICAgICBJbWFnZURlY29kaW5n
U3RvcmU6OnNodXRkb3duKCk7CiAgICAgfQogCisgICAgdmlydHVhbCB2b2lkIGRlY29kZXJCZWlu
Z0Rlc3Ryb3llZCgpCisgICAgeworICAgICAgICArK21fZGVjb2RlcnNEZXN0cm95ZWQ7CisgICAg
fQorCisgICAgdmlydHVhbCB2b2lkIGZyYW1lQnVmZmVyUmVxdWVzdGVkKCkKKyAgICB7CisgICAg
ICAgIC8vIERlY29kZXIgaXMgbmV2ZXIgdXNlZCBieSBJbWFnZURlY29kaW5nU3RvcmUuCisgICAg
ICAgIEFTU0VSVF9UUlVFKGZhbHNlKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEltYWdlRnJhbWU6
OkZyYW1lU3RhdHVzIGZyYW1lU3RhdHVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBJbWFnZUZy
YW1lOjpGcmFtZVBhcnRpYWw7CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgUGFzc093blB0cjxT
Y2FsZWRJbWFnZUZyYWdtZW50PiBjcmVhdGVDb21wbGV0ZUltYWdlKGNvbnN0IFNrSVNpemUmIHNp
emUpCiAgICAgewpAQCAtNTgsNiArNzYsMTQgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4g
U2NhbGVkSW1hZ2VGcmFnbWVudDo6Y3JlYXRlKHNpemUsIGJpdG1hcCwgdHJ1ZSk7CiAgICAgfQog
CisgICAgUGFzc093blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBjcmVhdGVJbmNvbXBsZXRlSW1h
Z2UoY29uc3QgU2tJU2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAgIFNrQml0bWFwIGJpdG1hcDsK
KyAgICAgICAgYml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIHNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGJpdG1hcC5hbGxvY1BpeGVscygp
OworICAgICAgICByZXR1cm4gU2NhbGVkSW1hZ2VGcmFnbWVudDo6Y3JlYXRlKHNpemUsIGJpdG1h
cCwgZmFsc2UpOworICAgIH0KKwogICAgIHZvaWQgaW5zZXJ0Q2FjaGUoY29uc3QgU2tJU2l6ZSYg
c2l6ZSkKICAgICB7CiAgICAgICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGltYWdlID0g
SW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5pbnNlcnRBbmRMb2NrQ2FjaGUoCkBAIC02
Nyw3ICs5MywxMCBAQCBwcm90ZWN0ZWQ6CiAKICAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50
KiBsb2NrQ2FjaGUoY29uc3QgU2tJU2l6ZSYgc2l6ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBJ
bWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmxvY2tDb21wbGV0ZUNhY2hlKG1fZ2VuZXJh
dG9yLmdldCgpLCBzaXplKTsKKyAgICAgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogY2Fj
aGVkSW1hZ2UgPSAwOworICAgICAgICBpZiAoSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgp
LT5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHNpemUsIEltYWdlRGVjb2RpbmdTdG9yZTo6
Q2FjaGVDYW5CZUluY29tcGxldGUsICZjYWNoZWRJbWFnZSkpCisgICAgICAgICAgICByZXR1cm4g
Y2FjaGVkSW1hZ2U7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIHZvaWQgdW5sb2Nr
Q2FjaGUoY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogY2FjaGVkSW1hZ2UpCkBAIC05NSw2ICsx
MjQsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7CiAg
ICAgUmVmUHRyPEltYWdlRnJhbWVHZW5lcmF0b3I+IG1fZ2VuZXJhdG9yOworICAgIGludCBtX2Rl
Y29kZXJzRGVzdHJveWVkOwogfTsKIAogVEVTVF9GKEltYWdlRGVjb2RpbmdTdG9yZVRlc3QsIGV2
aWN0T25lQ2FjaGUpCkBAIC0xODEsNyArMjExLDcgQEAgVEVTVF9GKEltYWdlRGVjb2RpbmdTdG9y
ZVRlc3QsIGNhY2hlSW5Vc2VOb3RFdmljdGVkKQogICAgIEVYUEVDVF9FUSgzdSwgSW1hZ2VEZWNv
ZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5jYWNoZUVudHJpZXMoKSk7CiAKICAgICBjb25zdCBTY2Fs
ZWRJbWFnZUZyYWdtZW50KiBjYWNoZWRJbWFnZSA9IGxvY2tDYWNoZShTa0lTaXplOjpNYWtlKDEs
IDEpKTsKLSAgICBFWFBFQ1RfVFJVRShjYWNoZWRJbWFnZSk7CisgICAgQVNTRVJUX1RSVUUoY2Fj
aGVkSW1hZ2UpOwogCiAgICAgLy8gQ2FjaGUgMiBpcyBldmljdGVkIGJlY2F1c2UgY2FjaGUgMSBp
cyBpbiB1c2UuCiAgICAgZXZpY3RPbmVDYWNoZSgpOwpAQCAtMjA0LDQgKzIzNCw1MSBAQCBURVNU
X0YoSW1hZ2VEZWNvZGluZ1N0b3JlVGVzdCwgZGVzdHJveUltYWdlRnJhbWVHZW5lcmF0b3IpCiAg
ICAgRVhQRUNUX0ZBTFNFKEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRy
aWVzKCkpOwogfQogCitURVNUX0YoSW1hZ2VEZWNvZGluZ1N0b3JlVGVzdCwgaW5zZXJ0SW5jb21w
bGV0ZUNhY2hlKQoreworICAgIGNvbnN0IFNrSVNpemUgc2l6ZSA9IFNrSVNpemU6Ok1ha2UoMSwg
MSk7CisgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogY2FjaGVkSW1hZ2UgPSBJbWFnZURl
Y29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmluc2VydEFuZExvY2tDYWNoZSgKKyAgICAgICAgbV9n
ZW5lcmF0b3IuZ2V0KCksIGNyZWF0ZUluY29tcGxldGVJbWFnZShzaXplKSwgTW9ja0ltYWdlRGVj
b2Rlcjo6Y3JlYXRlKHRoaXMpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIEltYWdlRGVjb2RpbmdTdG9y
ZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRyaWVzKCkpOworICAgIHVubG9ja0NhY2hlKGNhY2hlZElt
YWdlKTsKKworICAgIEltYWdlRGVjb2RlciogZGVjb2RlciA9IDA7CisgICAgRVhQRUNUX1RSVUUo
SW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0
KCksIHNpemUsIEltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVDYW5CZUluY29tcGxldGUsICZjYWNo
ZWRJbWFnZSwgJmRlY29kZXIpKTsKKyAgICBFWFBFQ1RfVFJVRShkZWNvZGVyKTsKKyAgICBBU1NF
UlRfVFJVRShjYWNoZWRJbWFnZSk7CisgICAgRVhQRUNUX0ZBTFNFKGNhY2hlZEltYWdlLT5pc0Nv
bXBsZXRlKCkpOworICAgIHVubG9ja0NhY2hlKGNhY2hlZEltYWdlKTsKKyAgICBFWFBFQ1RfRVEo
MCwgbV9kZWNvZGVyc0Rlc3Ryb3llZCk7Cit9CisKK1RFU1RfRihJbWFnZURlY29kaW5nU3RvcmVU
ZXN0LCBpbnNlcnRDb21wbGV0ZUNhY2hlV2l0aERlY29kZXIpCit7CisgICAgY29uc3QgU2NhbGVk
SW1hZ2VGcmFnbWVudCogY2FjaGVkSW1hZ2UgPSBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNl
KCktPmluc2VydEFuZExvY2tDYWNoZSgKKyAgICAgICAgbV9nZW5lcmF0b3IuZ2V0KCksIGNyZWF0
ZUNvbXBsZXRlSW1hZ2UoU2tJU2l6ZTo6TWFrZSgxLCAxKSksIE1vY2tJbWFnZURlY29kZXI6OmNy
ZWF0ZSh0aGlzKSk7CisgICAgdW5sb2NrQ2FjaGUoY2FjaGVkSW1hZ2UpOworICAgIEVYUEVDVF9F
USgxdSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5jYWNoZUVudHJpZXMoKSk7Cisg
ICAgRVhQRUNUX0VRKDEsIG1fZGVjb2RlcnNEZXN0cm95ZWQpOworfQorCitURVNUX0YoSW1hZ2VE
ZWNvZGluZ1N0b3JlVGVzdCwgaW5jb21wbGV0ZUNhY2hlQmVjb21lc0NvbXBsZXRlKQoreworICAg
IGNvbnN0IFNrSVNpemUgc2l6ZSA9IFNrSVNpemU6Ok1ha2UoMSwgMSk7CisgICAgY29uc3QgU2Nh
bGVkSW1hZ2VGcmFnbWVudCogY2FjaGVkSW1hZ2UgPSBJbWFnZURlY29kaW5nU3RvcmU6Omluc3Rh
bmNlKCktPmluc2VydEFuZExvY2tDYWNoZSgKKyAgICAgICAgbV9nZW5lcmF0b3IuZ2V0KCksIGNy
ZWF0ZUluY29tcGxldGVJbWFnZShzaXplKSwgTW9ja0ltYWdlRGVjb2Rlcjo6Y3JlYXRlKHRoaXMp
KTsKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2Vu
ZXJhdG9yLmdldCgpLCBjYWNoZWRJbWFnZSk7CisgICAgRVhQRUNUX0VRKDF1LCBJbWFnZURlY29k
aW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygpKTsKKworICAgIEltYWdlRGVjb2Rl
ciogZGVjb2RlciA9IDA7CisgICAgRVhQRUNUX1RSVUUoSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0
YW5jZSgpLT5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHNpemUsIEltYWdlRGVjb2RpbmdT
dG9yZTo6Q2FjaGVDYW5CZUluY29tcGxldGUsICZjYWNoZWRJbWFnZSwgJmRlY29kZXIpKTsKKyAg
ICBFWFBFQ1RfVFJVRShkZWNvZGVyKTsKKyAgICBBU1NFUlRfVFJVRShjYWNoZWRJbWFnZSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKGNhY2hlZEltYWdlLT5pc0NvbXBsZXRlKCkpOworCisgICAgY2FjaGVk
SW1hZ2UgPSBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPm92ZXJ3cml0ZUFuZExvY2tD
YWNoZSgKKyAgICAgICAgbV9nZW5lcmF0b3IuZ2V0KCksIGNhY2hlZEltYWdlLCBjcmVhdGVDb21w
bGV0ZUltYWdlKHNpemUpKTsKKyAgICBFWFBFQ1RfVFJVRShjYWNoZWRJbWFnZS0+aXNDb21wbGV0
ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9kZWNvZGVyc0Rlc3Ryb3llZCk7CisgICAgSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwg
Y2FjaGVkSW1hZ2UpOworfQorCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9JbWFnZUZyYW1lR2VuZXJhdG9yVGVzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LmNwcAppbmRleCBk
YTBhMmY4NjQyNWFkMzI2NmM0NDg4NTg0NmE5ZjRkNGJlODg4YjNmLi4zNmY0MDdiNTkwNTNlN2Uz
MTA5N2RlYzgyNWUyOTJiOWIwNTM4ZjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0ltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0ltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LmNwcApAQCAtMzEsNiArMzEs
NyBAQAogI2luY2x1ZGUgIk1vY2tJbWFnZURlY29kZXIuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZm
ZXIuaCIKICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcu
aD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTcwLDYgKzcxLDcgQEAgcHVibGlj
OgogICAgICAgICBtX2RhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZSgpOwogICAgICAgICBtX2dl
bmVyYXRvciA9IEltYWdlRnJhbWVHZW5lcmF0b3I6OmNyZWF0ZShmdWxsU2l6ZSgpLCBtX2RhdGEs
IHRydWUpOwogICAgICAgICBtX2dlbmVyYXRvci0+c2V0SW1hZ2VEZWNvZGVyRmFjdG9yeUZvclRl
c3RpbmcoTW9ja0ltYWdlRGVjb2RlckZhY3Rvcnk6OmNyZWF0ZSh0aGlzKSk7CisgICAgICAgIG1f
ZGVjb2RlcnNEZXN0cm95ZWQgPSAwOwogICAgICAgICBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50
ID0gMDsKICAgICAgICAgbV9mcmFtZVN0YXR1cyA9IEltYWdlRnJhbWU6OkZyYW1lRW1wdHk7CiAg
ICAgfQpAQCAtODEsNiArODMsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVjb2Rl
ckJlaW5nRGVzdHJveWVkKCkKICAgICB7CisgICAgICAgICsrbV9kZWNvZGVyc0Rlc3Ryb3llZDsK
ICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZnJhbWVCdWZmZXJSZXF1ZXN0ZWQoKQpAQCAtMTA2
LDE1ICsxMDksMTYgQEAgcHJvdGVjdGVkOgogCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9k
YXRhOwogICAgIFJlZlB0cjxJbWFnZUZyYW1lR2VuZXJhdG9yPiBtX2dlbmVyYXRvcjsKKyAgICBp
bnQgbV9kZWNvZGVyc0Rlc3Ryb3llZDsKICAgICBpbnQgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3Vu
dDsKICAgICBJbWFnZUZyYW1lOjpGcmFtZVN0YXR1cyBtX2ZyYW1lU3RhdHVzOwogfTsKIAogUGFz
c093blB0cjxJbWFnZURlY29kZXI+IE1vY2tJbWFnZURlY29kZXJGYWN0b3J5OjpjcmVhdGUoKQog
ewotICAgIE1vY2tJbWFnZURlY29kZXIqIGRlY29kZXIgPSBuZXcgTW9ja0ltYWdlRGVjb2Rlciht
X3Rlc3QpOworICAgIE93blB0cjxNb2NrSW1hZ2VEZWNvZGVyPiBkZWNvZGVyID0gTW9ja0ltYWdl
RGVjb2Rlcjo6Y3JlYXRlKG1fdGVzdCk7CiAgICAgZGVjb2Rlci0+c2V0U2l6ZShmdWxsU2l6ZSgp
LndpZHRoKCksIGZ1bGxTaXplKCkuaGVpZ2h0KCkpOwotICAgIHJldHVybiBhZG9wdFB0cihkZWNv
ZGVyKTsKKyAgICByZXR1cm4gZGVjb2Rlci5yZWxlYXNlKCk7CiB9CiAKIFRFU1RfRihJbWFnZUZy
YW1lR2VuZXJhdG9yVGVzdCwgY2FjaGVIaXQpCkBAIC0xNjEsNiArMTY1LDcgQEAgVEVTVF9GKElt
YWdlRnJhbWVHZW5lcmF0b3JUZXN0LCBjYWNoZU1pc3NXaXRoRGVjb2RlQW5kU2NhbGUpCiAgICAg
RVhQRUNUX0VRKDEsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOwogICAgIEVYUEVDVF9FUShz
Y2FsZWRTaXplKCksIHNjYWxlZEltYWdlLT5zY2FsZWRTaXplKCkpOwogICAgIEltYWdlRGVjb2Rp
bmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHNjYWxl
ZEltYWdlKTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9kZWNvZGVyc0Rlc3Ryb3llZCk7CiAKICAgICAv
LyBDYWNoZSBoaXQuCiAgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogZnVsbEltYWdlID0g
bV9nZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKGZ1bGxTaXplKCkpOwpAQCAtMTc2LDIxICsxODEs
MTMwIEBAIFRFU1RfRihJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCwgY2FjaGVNaXNzV2l0aERlY29k
ZUFuZFNjYWxlKQogICAgIEVYUEVDVF9FUSgxLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsK
IH0KIAotLy8gVGVzdCB0aGF0IGluY29tcGxldGUgZnJhbWVzIGFyZSBub3QgY2FjaGVkLgogVEVT
VF9GKEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LCBjYWNoZU1pc3NXaXRoSW5jb21wbGV0ZURlY29k
ZSkKIHsKICAgICBzZXRGcmFtZVN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZVBhcnRpYWwpOwogCi0g
ICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogdGVtcEltYWdlID0gbV9nZW5lcmF0b3ItPmRl
Y29kZUFuZFNjYWxlKHNjYWxlZFNpemUoKSk7CisgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVu
dCogdGVtcEltYWdlPSBtX2dlbmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUoZnVsbFNpemUoKSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKHRlbXBJbWFnZS0+aXNDb21wbGV0ZSgpKTsKKyAgICBFWFBFQ1RfRVEo
MSwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCk7CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjpp
bnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgdGVtcEltYWdlKTsKKyAg
ICBFWFBFQ1RfRVEoMXUsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRy
aWVzKCkpOworCisgICAgdGVtcEltYWdlID0gbV9nZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKGZ1
bGxTaXplKCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZW1wSW1hZ2UtPmlzQ29tcGxldGUoKSk7Cisg
ICAgRVhQRUNUX0VRKDIsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOworICAgIEltYWdlRGVj
b2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHRl
bXBJbWFnZSk7CisgICAgRVhQRUNUX0VRKDF1LCBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNl
KCktPmNhY2hlRW50cmllcygpKTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9kZWNvZGVyc0Rlc3Ryb3ll
ZCk7Cit9CisKK1RFU1RfRihJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCwgY2FjaGVNaXNzV2l0aElu
Y29tcGxldGVEZWNvZGVBbmRTY2FsZSkKK3sKKyAgICBzZXRGcmFtZVN0YXR1cyhJbWFnZUZyYW1l
OjpGcmFtZVBhcnRpYWwpOworCisgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogdGVtcElt
YWdlPSBtX2dlbmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUoc2NhbGVkU2l6ZSgpKTsKKyAgICBFWFBF
Q1RfRkFMU0UodGVtcEltYWdlLT5pc0NvbXBsZXRlKCkpOworICAgIEVYUEVDVF9FUSgxLCBtX2Zy
YW1lQnVmZmVyUmVxdWVzdENvdW50KTsKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNl
KCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCB0ZW1wSW1hZ2UpOworICAgIEVYUEVD
VF9FUSgydSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5jYWNoZUVudHJpZXMoKSk7
CisKKyAgICB0ZW1wSW1hZ2UgPSBtX2dlbmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUoc2NhbGVkU2l6
ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVtcEltYWdlLT5pc0NvbXBsZXRlKCkpOworICAgIEVY
UEVDVF9FUSgyLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsKKyAgICBJbWFnZURlY29kaW5n
U3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCB0ZW1wSW1h
Z2UpOworICAgIEVYUEVDVF9FUSgydSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5j
YWNoZUVudHJpZXMoKSk7CisgICAgRVhQRUNUX0VRKDAsIG1fZGVjb2RlcnNEZXN0cm95ZWQpOwor
fQorCitURVNUX0YoSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QsIGluY29tcGxldGVEZWNvZGVCZWNv
bWVzQ29tcGxldGUpCit7CisgICAgc2V0RnJhbWVTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0
aWFsKTsKKworICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIHRlbXBJbWFnZSA9IG1fZ2Vu
ZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShmdWxsU2l6ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVt
cEltYWdlLT5pc0NvbXBsZXRlKCkpOwogICAgIEVYUEVDVF9FUSgxLCBtX2ZyYW1lQnVmZmVyUmVx
dWVzdENvdW50KTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9kZWNvZGVyc0Rlc3Ryb3llZCk7CiAgICAg
SW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5n
ZXQoKSwgdGVtcEltYWdlKTsKKyAgICBFWFBFQ1RfRVEoMXUsIEltYWdlRGVjb2RpbmdTdG9yZTo6
aW5zdGFuY2UoKS0+Y2FjaGVFbnRyaWVzKCkpOworCisgICAgc2V0RnJhbWVTdGF0dXMoSW1hZ2VG
cmFtZTo6RnJhbWVDb21wbGV0ZSk7CiAKICAgICB0ZW1wSW1hZ2UgPSBtX2dlbmVyYXRvci0+ZGVj
b2RlQW5kU2NhbGUoZnVsbFNpemUoKSk7CisgICAgRVhQRUNUX1RSVUUodGVtcEltYWdlLT5pc0Nv
bXBsZXRlKCkpOworICAgIEVYUEVDVF9FUSgyLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsK
KyAgICBFWFBFQ1RfRVEoMSwgbV9kZWNvZGVyc0Rlc3Ryb3llZCk7CisgICAgSW1hZ2VEZWNvZGlu
Z1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgdGVtcElt
YWdlKTsKKyAgICBFWFBFQ1RfRVEoMXUsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+
Y2FjaGVFbnRyaWVzKCkpOworCisgICAgdGVtcEltYWdlID0gbV9nZW5lcmF0b3ItPmRlY29kZUFu
ZFNjYWxlKGZ1bGxTaXplKCkpOworICAgIEVYUEVDVF9UUlVFKHRlbXBJbWFnZS0+aXNDb21wbGV0
ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMiwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCk7CisgICAg
SW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5n
ZXQoKSwgdGVtcEltYWdlKTsKK30KKworVEVTVF9GKEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LCBp
bmNvbXBsZXRlRGVjb2RlQW5kU2NhbGVCZWNvbWVzQ29tcGxldGUpCit7CisgICAgc2V0RnJhbWVT
dGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKKworICAgIGNvbnN0IFNjYWxlZEltYWdl
RnJhZ21lbnQqIHRlbXBJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShzY2FsZWRT
aXplKCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZW1wSW1hZ2UtPmlzQ29tcGxldGUoKSk7CisgICAg
RVhQRUNUX0VRKDEsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOworICAgIEVYUEVDVF9FUSgw
LCBtX2RlY29kZXJzRGVzdHJveWVkKTsKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNl
KCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCB0ZW1wSW1hZ2UpOworICAgIEVYUEVD
VF9FUSgydSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5jYWNoZUVudHJpZXMoKSk7
CisKKyAgICBzZXRGcmFtZVN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKTsKKworICAg
IHRlbXBJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShzY2FsZWRTaXplKCkpOwor
ICAgIEVYUEVDVF9UUlVFKHRlbXBJbWFnZS0+aXNDb21wbGV0ZSgpKTsKICAgICBFWFBFQ1RfRVEo
MiwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCk7CisgICAgRVhQRUNUX0VRKDEsIG1fZGVjb2Rl
cnNEZXN0cm95ZWQpOwogICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2Nr
Q2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHRlbXBJbWFnZSk7CisgICAgRVhQRUNUX0VRKDJ1LCBJ
bWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygpKTsKIAogICAgIHRl
bXBJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShzY2FsZWRTaXplKCkpOwotICAg
IEVYUEVDVF9FUSgzLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsKKyAgICBFWFBFQ1RfVFJV
RSh0ZW1wSW1hZ2UtPmlzQ29tcGxldGUoKSk7CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0
YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgdGVtcEltYWdlKTsKKworICAg
IHRlbXBJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShmdWxsU2l6ZSgpKTsKKyAg
ICBFWFBFQ1RfVFJVRSh0ZW1wSW1hZ2UtPmlzQ29tcGxldGUoKSk7CisgICAgSW1hZ2VEZWNvZGlu
Z1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgdGVtcElt
YWdlKTsKKworICAgIEVYUEVDVF9FUSgyLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsKK30K
Kworc3RhdGljIHZvaWQgZGVjb2RlVGhyZWFkTWFpbih2b2lkKiBhcmcpCit7CisgICAgSW1hZ2VG
cmFtZUdlbmVyYXRvciogZ2VuZXJhdG9yID0gcmVpbnRlcnByZXRfY2FzdDxJbWFnZUZyYW1lR2Vu
ZXJhdG9yKj4oYXJnKTsKKyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiB0ZW1wSW1hZ2Ug
PSBnZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKGZ1bGxTaXplKCkpOworICAgIEltYWdlRGVjb2Rp
bmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUoZ2VuZXJhdG9yLCB0ZW1wSW1hZ2UpOwor
fQorCitURVNUX0YoSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QsIGluY29tcGxldGVEZWNvZGVCZWNv
bWVzQ29tcGxldGVNdWx0aVRocmVhZGVkKQoreworICAgIFdURjo6aW5pdGlhbGl6ZVRocmVhZGlu
ZygpOworICAgIHNldEZyYW1lU3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CisKKyAg
ICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiB0ZW1wSW1hZ2UgPSBtX2dlbmVyYXRvci0+ZGVj
b2RlQW5kU2NhbGUoZnVsbFNpemUoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRlbXBJbWFnZS0+aXND
b21wbGV0ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCk7
CisgICAgRVhQRUNUX0VRKDAsIG1fZGVjb2RlcnNEZXN0cm95ZWQpOworICAgIEltYWdlRGVjb2Rp
bmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHRlbXBJ
bWFnZSk7CisgICAgRVhQRUNUX0VRKDF1LCBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCkt
PmNhY2hlRW50cmllcygpKTsKKworICAgIC8vIEZyYW1lIGNhbiBub3cgYmUgZGVjb2RlZCBjb21w
bGV0ZWx5LgorICAgIHNldEZyYW1lU3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpOwor
ICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoJmRlY29kZVRocmVh
ZE1haW4sIG1fZ2VuZXJhdG9yLmdldCgpLCAiRGVjb2RlVGhyZWFkIik7CisgICAgd2FpdEZvclRo
cmVhZENvbXBsZXRpb24odGhyZWFkSUQpOworCisgICAgRVhQRUNUX0VRKDIsIG1fZnJhbWVCdWZm
ZXJSZXF1ZXN0Q291bnQpOworICAgIEVYUEVDVF9FUSgxLCBtX2RlY29kZXJzRGVzdHJveWVkKTsK
KyAgICBFWFBFQ1RfRVEoMXUsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVF
bnRyaWVzKCkpOworCisgICAgdGVtcEltYWdlID0gbV9nZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxl
KGZ1bGxTaXplKCkpOworICAgIEVYUEVDVF9UUlVFKHRlbXBJbWFnZS0+aXNDb21wbGV0ZSgpKTsK
KyAgICBFWFBFQ1RfRVEoMiwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCk7CiAgICAgSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwg
dGVtcEltYWdlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9Nb2NrSW1hZ2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01vY2tJ
bWFnZURlY29kZXIuaAppbmRleCA4YjRmNDAzODIzOWMyOTVkZTQ4YzlkZWVkN2YzOWVmOGFkNThm
MDc1Li41YzlhNjIzN2I5NGY4NWJhM2ZkNjI0YmJiNTVhNzAyOWFkODlmODQxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaApAQCAtMzgsNiAr
MzgsOCBAQCBwdWJsaWM6CiAKIGNsYXNzIE1vY2tJbWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VE
ZWNvZGVyIHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxNb2NrSW1hZ2VEZWNvZGVy
PiBjcmVhdGUoTW9ja0ltYWdlRGVjb2RlckNsaWVudCogY2xpZW50KSB7IHJldHVybiBhZG9wdFB0
cihuZXcgTW9ja0ltYWdlRGVjb2RlcihjbGllbnQpKTsgfQorCiAgICAgTW9ja0ltYWdlRGVjb2Rl
cihNb2NrSW1hZ2VEZWNvZGVyQ2xpZW50KiBjbGllbnQpCiAgICAgICAgIDogSW1hZ2VEZWNvZGVy
KEltYWdlU291cmNlOjpBbHBoYVByZW11bHRpcGxpZWQsIEltYWdlU291cmNlOjpHYW1tYUFuZENv
bG9yUHJvZmlsZUFwcGxpZWQpCiAgICAgICAgICwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCgw
KQpAQCAtNDksNiArNTEsMTQgQEAgcHVibGljOgogICAgICAgICBtX2NsaWVudC0+ZGVjb2RlckJl
aW5nRGVzdHJveWVkKCk7CiAgICAgfQogCisgICAgdmlydHVhbCBib29sIHNldFNpemUodW5zaWdu
ZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKKyAgICB7CisgICAgICAgIEltYWdlRGVjb2Rlcjo6
c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6
ZSgxKTsKKyAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnNldFNpemUod2lkdGgsIGhlaWdo
dCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIHZpcnR1YWwgU3RyaW5nIGZp
bGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiAibW9jayI7CkBA
IC01OSw4ICs2OSw2IEBAIHB1YmxpYzoKICAgICAgICAgKyttX2ZyYW1lQnVmZmVyUmVxdWVzdENv
dW50OwogICAgICAgICBtX2NsaWVudC0+ZnJhbWVCdWZmZXJSZXF1ZXN0ZWQoKTsKIAotICAgICAg
ICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKDEpOwotICAgICAgICBtX2ZyYW1lQnVmZmVyQ2Fj
aGVbMF0uc2V0U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKTsKICAgICAgICAg
bV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnNldFN0YXR1cyhtX2NsaWVudC0+ZnJhbWVTdGF0dXMoKSk7
CiAgICAgICAgIHJldHVybiAmbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwogICAgIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>