<?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>116848</bug_id>
          
          <creation_ts>2013-05-27 17:04:43 -0700</creation_ts>
          <short_desc>It should be possible to record heap operations (both FastMalloc and JSC GC)</short_desc>
          <delta_ts>2013-05-28 11:18:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>116763</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>philn</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>894195</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-27 17:04:43 -0700</bug_when>
    <thetext>This is the record part of record and replay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894197</commentid>
    <comment_count>1</comment_count>
      <attachid>203018</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-27 17:07:22 -0700</bug_when>
    <thetext>Created attachment 203018
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894407</commentid>
    <comment_count>2</comment_count>
      <attachid>203018</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-05-28 10:21:34 -0700</bug_when>
    <thetext>Comment on attachment 203018
the patch

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

&gt; Source/JavaScriptCore/runtime/Butterfly.h:166
&gt; +    Butterfly* growPropertyStorage(VM&amp;, JSCell* intendedOwner, size_t preCapacity, size_t oldPropertyCapacity, bool hasIndexingHeader, size_t indexingPayloadSizeInBytes, size_t newPropertyCapacity);
&gt; +    Butterfly* growPropertyStorage(VM&amp;, JSCell* intendedOwner, Structure* oldStructure, size_t oldPropertyCapacity, size_t newPropertyCapacity);
&gt; +    Butterfly* growPropertyStorage(VM&amp;, JSCell* intendedOwner, Structure* oldStructure, size_t newPropertyCapacity);
&gt; +    Butterfly* growArrayRight(VM&amp;, JSCell* intendedOwner, Structure* oldStructure, size_t propertyCapacity, bool hadIndexingHeader, size_t oldIndexingPayloadSizeInBytes, size_t newIndexingPayloadSizeInBytes); // Assumes that preCapacity is zero, and asserts as much.
&gt; +    Butterfly* growArrayRight(VM&amp;, JSCell* intendedOwner, Structure*, size_t newIndexingPayloadSizeInBytes);
&gt; +    Butterfly* resizeArray(VM&amp;, JSCell* intendedOwner, size_t propertyCapacity, bool oldHasIndexingHeader, size_t oldIndexingPayloadSizeInBytes, size_t newPreCapacity, bool newHasIndexingHeader, size_t newIndexingPayloadSizeInBytes);
&gt; +    Butterfly* resizeArray(VM&amp;, JSCell* intendedOwner, Structure*, size_t newPreCapacity, size_t newIndexingPayloadSizeInBytes); // Assumes that you&apos;re not changing whether or not the object has an indexing header.

These signatures are getting ridiculous.

&gt; Source/WTF/wtf/ConditionalLocker.h:36
&gt; +template &lt;typename T&gt; class ConditionalLocker {

Where do we use this class?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894408</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-28 10:22:28 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 203018 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=203018&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/Butterfly.h:166
&gt; &gt; +    Butterfly* growPropertyStorage(VM&amp;, JSCell* intendedOwner, size_t preCapacity, size_t oldPropertyCapacity, bool hasIndexingHeader, size_t indexingPayloadSizeInBytes, size_t newPropertyCapacity);
&gt; &gt; +    Butterfly* growPropertyStorage(VM&amp;, JSCell* intendedOwner, Structure* oldStructure, size_t oldPropertyCapacity, size_t newPropertyCapacity);
&gt; &gt; +    Butterfly* growPropertyStorage(VM&amp;, JSCell* intendedOwner, Structure* oldStructure, size_t newPropertyCapacity);
&gt; &gt; +    Butterfly* growArrayRight(VM&amp;, JSCell* intendedOwner, Structure* oldStructure, size_t propertyCapacity, bool hadIndexingHeader, size_t oldIndexingPayloadSizeInBytes, size_t newIndexingPayloadSizeInBytes); // Assumes that preCapacity is zero, and asserts as much.
&gt; &gt; +    Butterfly* growArrayRight(VM&amp;, JSCell* intendedOwner, Structure*, size_t newIndexingPayloadSizeInBytes);
&gt; &gt; +    Butterfly* resizeArray(VM&amp;, JSCell* intendedOwner, size_t propertyCapacity, bool oldHasIndexingHeader, size_t oldIndexingPayloadSizeInBytes, size_t newPreCapacity, bool newHasIndexingHeader, size_t newIndexingPayloadSizeInBytes);
&gt; &gt; +    Butterfly* resizeArray(VM&amp;, JSCell* intendedOwner, Structure*, size_t newPreCapacity, size_t newIndexingPayloadSizeInBytes); // Assumes that you&apos;re not changing whether or not the object has an indexing header.
&gt; 
&gt; These signatures are getting ridiculous.

Word.

Do you have any suggestions for how to shrink them?

&gt; 
&gt; &gt; Source/WTF/wtf/ConditionalLocker.h:36
&gt; &gt; +template &lt;typename T&gt; class ConditionalLocker {
&gt; 
&gt; Where do we use this class?

Ooops!  I&apos;ll remove it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894410</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-05-28 10:24:23 -0700</bug_when>
    <thetext>&gt; &gt; These signatures are getting ridiculous.
&gt; 
&gt; Word.
&gt; 
&gt; Do you have any suggestions for how to shrink them?
&gt; 
Maybe we could use a struct to pass all of the various newSize, oldSize, hasIndexingHeader, etc. stuff? Not necessary for this patch though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894411</commentid>
    <comment_count>5</comment_count>
      <attachid>203065</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-28 10:25:03 -0700</bug_when>
    <thetext>Created attachment 203065
the patch

Removed ConditionalLocker.  I don&apos;t know why it was there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894415</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-28 10:28:28 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; &gt; These signatures are getting ridiculous.
&gt; &gt; 
&gt; &gt; Word.
&gt; &gt; 
&gt; &gt; Do you have any suggestions for how to shrink them?
&gt; &gt; 
&gt; Maybe we could use a struct to pass all of the various newSize, oldSize, hasIndexingHeader, etc. stuff? Not necessary for this patch though.

I wish we could do ML-style records.

What about introducing classes for each of the arguments so that instead of saying:

butterfly-&gt;thingy(size + 100, size, someFlag, false, blah);

You say:

butterfly-&gt;thingy(NewSize(size + 100), OldSize(size), HasIndexingHeader(someFlag), Whatever(false), Something(blah));

(replace &quot;Whatever&quot; and &quot;Something&quot; with other meaningful terms.)

This could work, but I feel like we ought to have some macro magic for generating these, so that we don&apos;t get too much cruft all over the place to just create them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894417</commentid>
    <comment_count>7</comment_count>
      <attachid>203065</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-05-28 10:33:41 -0700</bug_when>
    <thetext>Comment on attachment 203065
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894418</commentid>
    <comment_count>8</comment_count>
      <attachid>203065</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-05-28 10:35:04 -0700</bug_when>
    <thetext>Comment on attachment 203065
the patch

Attachment 203065 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/666121</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894420</commentid>
    <comment_count>9</comment_count>
      <attachid>203065</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-05-28 10:37:14 -0700</bug_when>
    <thetext>Comment on attachment 203065
the patch

Attachment 203065 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/672433</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894427</commentid>
    <comment_count>10</comment_count>
      <attachid>203065</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-05-28 11:00:38 -0700</bug_when>
    <thetext>Comment on attachment 203065
the patch

Attachment 203065 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/683318</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894428</commentid>
    <comment_count>11</comment_count>
      <attachid>203065</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-05-28 11:07:42 -0700</bug_when>
    <thetext>Comment on attachment 203065
the patch

Attachment 203065 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/683314</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894431</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-28 11:18:22 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/150811</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203018</attachid>
            <date>2013-05-27 17:07:22 -0700</date>
            <delta_ts>2013-05-28 10:25:03 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>59997</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUwNzg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBA
CisyMDEzLTA1LTI3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHJlY29yZCBoZWFwIG9wZXJhdGlvbnMgKGJvdGggRmFz
dE1hbGxvYyBhbmQgSlNDIEdDKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTE2ODQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisgICAgICAgIAorICAgICAgICBSZWNvcmQgR0MgaGVhcCBvcGVyYXRpb25zIGlmIEVOQUJMRShB
TExPQ0FUSU9OX0xPR0dJTkcpLgorCisgICAgICAgICogQVBJL0pTTWFuYWdlZFZhbHVlLm1tOgor
ICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3Bw
OgorICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0KToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoK
KyAgICAgICAgKEhlYXApOgorICAgICAgICAoSlNDOjpIZWFwOjphbGxvY2F0ZVdpdGhOb3JtYWxE
ZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWxsb2NhdGVXaXRoSW1tb3J0YWxTdHJ1
Y3R1cmVEZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWxsb2NhdGVXaXRob3V0RGVz
dHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OkhlYXA6OnRyeUFsbG9jYXRlU3RvcmFnZSk6CisgICAg
ICAgIChKU0M6OkhlYXA6OnRyeVJlYWxsb2NhdGVTdG9yYWdlKToKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OmFzY3JpYmVPd25lcik6CisgICAgICAgICogaGVhcC9TbG90Vmlz
aXRvci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphcHBlbmQpOgorICAgICAgICAo
SlNDOjpTbG90VmlzaXRvcjo6aW50ZXJuYWxBcHBlbmQpOgorICAgICAgICAqIGhlYXAvU2xvdFZp
c2l0b3IuaDoKKyAgICAgICAgKFNsb3RWaXNpdG9yKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNp
dG9ySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kKToKKyAgICAg
ICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkUG9pbnRlcik6CisgICAgICAg
IChKU0M6OlNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJpZXJlZFZhbHVlKToKKyAgICAgICAgKEpT
Qzo6U2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkV2Vhayk6CisgICAgICAgIChKU0M6OlNs
b3RWaXNpdG9yOjppbnRlcm5hbEFwcGVuZCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlND
OjpTbG90VmlzaXRvcjo6YXBwZW5kVmFsdWVzKToKKyAgICAgICAgKiBqaXQvSklUV3JpdGVCYXJy
aWVyLmg6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphcHBlbmQpOgorICAgICAgICAqIGxs
aW50L0xMSW50Q29tbW9uLmg6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHkuaDoKKyAgICAg
ICAgKEJ1dHRlcmZseSk6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChK
U0M6OkJ1dHRlcmZseTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93UHJv
cGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJh
eVJpZ2h0KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Z3Jvd0Fy
cmF5UmlnaHQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KToKKyAgICAg
ICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpjcmVhdGVBcnJheUJ1dHRl
cmZseUluRGljdGlvbmFyeUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnVu
c2hpZnRDb3VudFNsb3dDYXNlKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAg
ICAgKEpTQzo6Y3JlYXRlQ29udGlndW91c0FycmF5QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6
Y3JlYXRlQXJyYXlCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFs
aXplZCk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFk
eUV4aXN0cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsSW5kZXhlZFN0
b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhv
dXRDb3B5aW5nRWxlbWVudHMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5jcmVhc2VWZWN0
b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlTGVuZ3RoU2xvdyk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgICog
cnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6SlNPYmplY3QpOgor
ICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5oOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhw
TWF0Y2hlc0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVh
dGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKiBydW50aW1lL1dyaXRlQmFycmllci5oOgorICAgICAgICAoSlNDKToKKwog
MjAxMy0wNS0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIGZv
dXJ0aFRpZXI6IERGRyBBcml0aE1vZCBzaG91bGQgaGF2ZSB0aGUgIW5vZGVVc2VkQXNOdW1iZXIg
b3B0aW1pemF0aW9ucyB0aGF0IEFyaXRoRGl2IGhhcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU01hbmFnZWRWYWx1ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTTWFuYWdlZFZhbHVlLm1tCShyZXZpc2lvbiAxNTA1NjkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTTWFuYWdlZFZhbHVlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSwxMiArMzEsMTIgQEAKIAogI2ltcG9ydCAiQVBJQ2FzdC5oIgogI2ltcG9ydCAiSGVhcC5oIgot
I2ltcG9ydCAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbXBvcnQgIkpTQ29udGV4dEludGVybmFs
LmgiCiAjaW1wb3J0ICJKU1ZhbHVlSW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYWsuaCIKICNpbXBv
cnQgIldlYWtIYW5kbGVPd25lci5oIgogI2ltcG9ydCAiT2JqY1J1bnRpbWVFeHRyYXMuaCIKKyNp
bXBvcnQgIk9wZXJhdGlvbnMuaCIKIAogY2xhc3MgSlNNYW5hZ2VkVmFsdWVIYW5kbGVPd25lciA6
IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE1MDU2OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0NTcsNyArMTQ1Nyw3IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQWxs
b2NhdGVQcm8KICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAK
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oCi0gICAgICAgIEJ1dHRlcmZseTo6
Y3JlYXRlVW5pbml0aWFsaXplZCh2bSwgMCwgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5LCBmYWxz
ZSwgMCkpOworICAgICAgICBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIDAsIDAs
IGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSwgZmFsc2UsIDApKTsKIH0KIAogY2hhciogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMs
IHNpemVfdCBuZXdTaXplKQpAQCAtMTQ2Niw3ICsxNDY2LDcgQEAgY2hhciogREZHX09QRVJBVElP
TiBvcGVyYXRpb25BbGxvY2F0ZVBybwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
JnZtLCBleGVjKTsKIAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPigKLSAgICAg
ICAgQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKHZtLCAwLCBuZXdTaXplLCBmYWxzZSwg
MCkpOworICAgICAgICBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIDAsIDAsIG5l
d1NpemUsIGZhbHNlLCAwKSk7CiB9CiAKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVh
bGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHko
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0KQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE1MDU2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTYsNiArNjk2LDEwIEBAIHN0YXRp
YyBkb3VibGUgbWludXRlID0gNjAuMDsKIAogdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xl
IHN3ZWVwVG9nZ2xlKQogeworI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCisgICAgZGF0
YUxvZ0YoIkpTQyBHQyBzdGFydGluZyBjb2xsZWN0aW9uLlxuIik7CisjZW5kaWYKKyAgICAKICAg
ICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiR2FyYmFnZSBDb2xsZWN0aW9uIik7CiAg
ICAgCiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fZGVmZXJyYWxEZXB0aCk7CkBAIC04MDgsNiArODEy
LDEwIEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKIAogICAgIGlm
IChPcHRpb25zOjpzaG93T2JqZWN0U3RhdGlzdGljcygpKQogICAgICAgICBIZWFwU3RhdGlzdGlj
czo6c2hvd09iamVjdFN0YXRpc3RpY3ModGhpcyk7CisKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9M
T0dHSU5HKQorICAgIGRhdGFMb2dGKCJKU0MgR0MgZmluaXNoaW5nIGNvbGxlY3Rpb24uXG4iKTsK
KyNlbmRpZgogfQogCiBib29sIEhlYXA6OmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTUwNTY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksOCArMTE5
LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9y
Rm9yT2JqZWN0V2l0aE5vcm1hbERlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKSB7IHJldHVybiBtX29i
amVjdFNwYWNlLm5vcm1hbERlc3RydWN0b3JBbGxvY2F0b3JGb3IoYnl0ZXMpOyB9CiAgICAgICAg
IE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yRm9yT2JqZWN0V2l0aEltbW9ydGFsU3RydWN0dXJl
RGVzdHJ1Y3RvcihzaXplX3QgYnl0ZXMpIHsgcmV0dXJuIG1fb2JqZWN0U3BhY2UuaW1tb3J0YWxT
dHJ1Y3R1cmVEZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGJ5dGVzKTsgfQogICAgICAgICBDb3BpZWRB
bGxvY2F0b3ImIHN0b3JhZ2VBbGxvY2F0b3IoKSB7IHJldHVybiBtX3N0b3JhZ2VTcGFjZS5hbGxv
Y2F0b3IoKTsgfQotICAgICAgICBDaGVja2VkQm9vbGVhbiB0cnlBbGxvY2F0ZVN0b3JhZ2Uoc2l6
ZV90LCB2b2lkKiopOwotICAgICAgICBDaGVja2VkQm9vbGVhbiB0cnlSZWFsbG9jYXRlU3RvcmFn
ZSh2b2lkKiosIHNpemVfdCwgc2l6ZV90KTsKKyAgICAgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5QWxs
b2NhdGVTdG9yYWdlKEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90LCB2b2lkKiopOworICAg
ICAgICBDaGVja2VkQm9vbGVhbiB0cnlSZWFsbG9jYXRlU3RvcmFnZShKU0NlbGwqIGludGVuZGVk
T3duZXIsIHZvaWQqKiwgc2l6ZV90LCBzaXplX3QpOworICAgICAgICB2b2lkIGFzY3JpYmVPd25l
cihKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqKTsKIAogICAgICAgICB0eXBlZGVmIHZvaWQg
KCpGaW5hbGl6ZXIpKEpTQ2VsbCopOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFk
ZEZpbmFsaXplcihKU0NlbGwqLCBGaW5hbGl6ZXIpOwpAQCAtMzgyLDMwICszODMsNjQgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVXaXRoTm9ybWFs
RGVzdHJ1Y3RvcihzaXplX3QgYnl0ZXMpCiAgICAgeworI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xP
R0dJTkcpCisgICAgICAgIGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGluZyAlbHUgYnl0ZXMgd2l0
aCBub3JtYWwgZGVzdHJ1Y3Rvci5cbiIsIGJ5dGVzKTsKKyNlbmRpZgogICAgICAgICBBU1NFUlQo
aXNWYWxpZEFsbG9jYXRpb24oYnl0ZXMpKTsKICAgICAgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uu
YWxsb2NhdGVXaXRoTm9ybWFsRGVzdHJ1Y3RvcihieXRlcyk7CiAgICAgfQogICAgIAogICAgIGlu
bGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZVdpdGhJbW1vcnRhbFN0cnVjdHVyZURlc3RydWN0b3Io
c2l6ZV90IGJ5dGVzKQogICAgIHsKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAg
ICAgICBkYXRhTG9nRigiSlNDIEdDIGFsbG9jYXRpbmcgJWx1IGJ5dGVzIHdpdGggaW1tb3J0YWwg
c3RydWN0dXJlIGRlc3RydWN0b3IuXG4iLCBieXRlcyk7CisjZW5kaWYKICAgICAgICAgQVNTRVJU
KGlzVmFsaWRBbGxvY2F0aW9uKGJ5dGVzKSk7CiAgICAgICAgIHJldHVybiBtX29iamVjdFNwYWNl
LmFsbG9jYXRlV2l0aEltbW9ydGFsU3RydWN0dXJlRGVzdHJ1Y3RvcihieXRlcyk7CiAgICAgfQog
ICAgIAogICAgIGlubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKHNp
emVfdCBieXRlcykKICAgICB7CisjaWYgRU5BQkxFKEFMTE9DQVRJT05fTE9HR0lORykKKyAgICAg
ICAgZGF0YUxvZ0YoIkpTQyBHQyBhbGxvY2F0aW5nICVsdSBieXRlcyB3aXRob3V0IGRlc3RydWN0
b3IuXG4iLCBieXRlcyk7CisjZW5kaWYKICAgICAgICAgQVNTRVJUKGlzVmFsaWRBbGxvY2F0aW9u
KGJ5dGVzKSk7CiAgICAgICAgIHJldHVybiBtX29iamVjdFNwYWNlLmFsbG9jYXRlV2l0aG91dERl
c3RydWN0b3IoYnl0ZXMpOwogICAgIH0KICAgIAotICAgIGlubGluZSBDaGVja2VkQm9vbGVhbiBI
ZWFwOjp0cnlBbGxvY2F0ZVN0b3JhZ2Uoc2l6ZV90IGJ5dGVzLCB2b2lkKiogb3V0UHRyKQorICAg
IGlubGluZSBDaGVja2VkQm9vbGVhbiBIZWFwOjp0cnlBbGxvY2F0ZVN0b3JhZ2UoSlNDZWxsKiBp
bnRlbmRlZE93bmVyLCBzaXplX3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpCiAgICAgewotICAgICAg
ICByZXR1cm4gbV9zdG9yYWdlU3BhY2UudHJ5QWxsb2NhdGUoYnl0ZXMsIG91dFB0cik7CisgICAg
ICAgIENoZWNrZWRCb29sZWFuIHJlc3VsdCA9IG1fc3RvcmFnZVNwYWNlLnRyeUFsbG9jYXRlKGJ5
dGVzLCBvdXRQdHIpOworI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCisgICAgICAgIGRh
dGFMb2dGKCJKU0MgR0MgYWxsb2NhdGluZyAlbHUgYnl0ZXMgb2Ygc3RvcmFnZSBmb3IgJXA6ICVw
LlxuIiwgYnl0ZXMsIGludGVuZGVkT3duZXIsICpvdXRQdHIpOworI2Vsc2UKKyAgICAgICAgVU5V
U0VEX1BBUkFNKGludGVuZGVkT3duZXIpOworI2VuZGlmCisgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogICAgIAotICAgIGlubGluZSBDaGVja2VkQm9vbGVhbiBIZWFwOjp0cnlSZWFsbG9j
YXRlU3RvcmFnZSh2b2lkKiogcHRyLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCisg
ICAgaW5saW5lIENoZWNrZWRCb29sZWFuIEhlYXA6OnRyeVJlYWxsb2NhdGVTdG9yYWdlKEpTQ2Vs
bCogaW50ZW5kZWRPd25lciwgdm9pZCoqIHB0ciwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdT
aXplKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc3RvcmFnZVNwYWNlLnRyeVJlYWxsb2NhdGUo
cHRyLCBvbGRTaXplLCBuZXdTaXplKTsKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQor
ICAgICAgICB2b2lkKiBvbGRQdHIgPSAqcHRyOworI2VuZGlmCisgICAgICAgIENoZWNrZWRCb29s
ZWFuIHJlc3VsdCA9IG1fc3RvcmFnZVNwYWNlLnRyeVJlYWxsb2NhdGUocHRyLCBvbGRTaXplLCBu
ZXdTaXplKTsKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgICAgICBkYXRhTG9n
RigiSlNDIEdDIHJlYWxsb2NhdGluZyAlbHUgLT4gJWx1IGJ5dGVzIG9mIHN0b3JhZ2UgZm9yICVw
OiAlcCAtPiAlcC5cbiIsIG9sZFNpemUsIG5ld1NpemUsIGludGVuZGVkT3duZXIsIG9sZFB0ciwg
KnB0cik7CisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0oaW50ZW5kZWRPd25lcik7CisjZW5k
aWYKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBpbmxpbmUgdm9pZCBIZWFw
Ojphc2NyaWJlT3duZXIoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKiBzdG9yYWdlKQorICAg
IHsKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgICAgICBkYXRhTG9nRigiSlND
IEdDIGFzY3JpYmluZyAlcCBhcyBvd25lciBvZiBzdG9yYWdlICVwLlxuIiwgaW50ZW5kZWRPd25l
ciwgc3RvcmFnZSk7CisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0oaW50ZW5kZWRPd25lcik7
CisgICAgICAgIFVOVVNFRF9QQVJBTShzdG9yYWdlKTsKKyNlbmRpZgogICAgIH0KIAogICAgIGlu
bGluZSBCbG9ja0FsbG9jYXRvciYgSGVhcDo6YmxvY2tBbGxvY2F0b3IoKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMTUwNTY5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChDb25zZXJ2YXRp
dmVSb28KICAgICBKU0NlbGwqKiByb290cyA9IGNvbnNlcnZhdGl2ZVJvb3RzLnJvb3RzKCk7CiAg
ICAgc2l6ZV90IHNpemUgPSBjb25zZXJ2YXRpdmVSb290cy5zaXplKCk7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIGludGVybmFsQXBwZW5kKHJvb3RzW2ld
KTsKKyAgICAgICAgaW50ZXJuYWxBcHBlbmQoMCwgcm9vdHNbaV0pOwogfQogCiBBTFdBWVNfSU5M
SU5FIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IEpTQ2VsbCogY2VsbCkKQEAgLTI3OSw3ICsyNzksNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNT
dHJpbmc6OnNob3VsZFRyeUhhCiAgICAgcmV0dXJuICgobGVuZ3RoKCkgPiAxKSAmJiAhaXNSb3Bl
KCkgJiYgIWlzSGFzaENvbnNTaW5nbGV0b24oKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBT
bG90VmlzaXRvcjo6aW50ZXJuYWxBcHBlbmQoSlNWYWx1ZSogc2xvdCkKK0FMV0FZU19JTkxJTkUg
dm9pZCBTbG90VmlzaXRvcjo6aW50ZXJuYWxBcHBlbmQodm9pZCogZnJvbSwgSlNWYWx1ZSogc2xv
dCkKIHsKICAgICAvLyBUaGlzIGludGVybmFsQXBwZW5kIGlzIG9ubHkgaW50ZW5kZWQgZm9yIHZp
c2l0cyB0byBvYmplY3QgYW5kIGFycmF5IGJhY2tpbmcgc3RvcmVzLgogICAgIC8vIGFzIGl0IGNh
biBjaGFuZ2UgdGhlIEpTVmFsdWUgcG9pbnRlZCB0byBiZSB0aGUgYXJndW1lbnQgd2hlbiB0aGUg
b3JpZ2luYWwgSlNWYWx1ZQpAQCAtMzE2LDcgKzMxNiw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBT
bG90VmlzaXRvcjo6aW50ZXJuYWwKICAgICAgICAgfQogICAgIH0KIAotICAgIGludGVybmFsQXBw
ZW5kKGNlbGwpOworICAgIGludGVybmFsQXBwZW5kKGZyb20sIGNlbGwpOwogfQogCiB2b2lkIFNs
b3RWaXNpdG9yOjpoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAxNTA1NjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xMDUsMTAgKzEwNSwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgYXBwZW5kKEpTVmFsdWUqKTsK
ICAgICB2b2lkIGFwcGVuZChKU1ZhbHVlKiwgc2l6ZV90IGNvdW50KTsKICAgICB2b2lkIGFwcGVu
ZChKU0NlbGwqKik7Ci0KLSAgICB2b2lkIGludGVybmFsQXBwZW5kKEpTQ2VsbCopOwotICAgIHZv
aWQgaW50ZXJuYWxBcHBlbmQoSlNWYWx1ZSk7Ci0gICAgdm9pZCBpbnRlcm5hbEFwcGVuZChKU1Zh
bHVlKik7CisgICAgCisgICAgdm9pZCBpbnRlcm5hbEFwcGVuZCh2b2lkKiBmcm9tLCBKU0NlbGwq
KTsKKyAgICB2b2lkIGludGVybmFsQXBwZW5kKHZvaWQqIGZyb20sIEpTVmFsdWUpOworICAgIHZv
aWQgaW50ZXJuYWxBcHBlbmQodm9pZCogZnJvbSwgSlNWYWx1ZSopOwogICAgIAogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgbWVyZ2VPcGFxdWVSb290cygpOwogICAgIHZvaWQgbWVyZ2VPcGFx
dWVSb290c0lmTmVjZXNzYXJ5KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMTUwNTY5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4
LDcgKzM4LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoSgogewog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICBKU1ZhbHVl
JiB2YWx1ZSA9IHNsb3RbaV07Ci0gICAgICAgIGludGVybmFsQXBwZW5kKHZhbHVlKTsKKyAgICAg
ICAgaW50ZXJuYWxBcHBlbmQoJnZhbHVlLCB2YWx1ZSk7CiAgICAgfQogfQogCkBAIC00NywyNSAr
NDcsMjUgQEAgaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcgogewogICAg
IEFTU0VSVChzbG90KTsKICAgICBKU0NlbGwqIGNlbGwgPSAqc2xvdDsKLSAgICBpbnRlcm5hbEFw
cGVuZChjZWxsKTsKKyAgICBpbnRlcm5hbEFwcGVuZChzbG90LCBjZWxsKTsKIH0KIAogQUxXQVlT
X0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoSlNWYWx1ZSogc2xvdCkKIHsKICAgICBB
U1NFUlQoc2xvdCk7Ci0gICAgaW50ZXJuYWxBcHBlbmQoKnNsb3QpOworICAgIGludGVybmFsQXBw
ZW5kKHNsb3QsICpzbG90KTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjph
cHBlbmRVbmJhcnJpZXJlZFZhbHVlKEpTVmFsdWUqIHNsb3QpCiB7CiAgICAgQVNTRVJUKHNsb3Qp
OwotICAgIGludGVybmFsQXBwZW5kKCpzbG90KTsKKyAgICBpbnRlcm5hbEFwcGVuZChzbG90LCAq
c2xvdCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKEpTQ2Vs
bCoqIHNsb3QpCiB7CiAgICAgQVNTRVJUKHNsb3QpOwotICAgIGludGVybmFsQXBwZW5kKCpzbG90
KTsKKyAgICBpbnRlcm5hbEFwcGVuZChzbG90LCAqc2xvdCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CkBAIC03MywxNCArNzMsNTAgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9y
OjphcHBlbmRVbgogewogICAgIEFTU0VSVCh3ZWFrKTsKICAgICBpZiAod2Vhay0+Z2V0KCkpCi0g
ICAgICAgIGludGVybmFsQXBwZW5kKHdlYWstPmdldCgpKTsKKyAgICAgICAgaW50ZXJuYWxBcHBl
bmQoMCwgd2Vhay0+Z2V0KCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6
OmludGVybmFsQXBwZW5kKEpTVmFsdWUgdmFsdWUpCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZp
c2l0b3I6OmludGVybmFsQXBwZW5kKHZvaWQqIGZyb20sIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAg
aWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpbnRl
cm5hbEFwcGVuZCh2YWx1ZS5hc0NlbGwoKSk7CisgICAgaW50ZXJuYWxBcHBlbmQoZnJvbSwgdmFs
dWUuYXNDZWxsKCkpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmludGVy
bmFsQXBwZW5kKHZvaWQqIGZyb20sIEpTQ2VsbCogY2VsbCkKK3sKKyAgICBBU1NFUlQoIW1faXND
aGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uKTsKKyAgICBpZiAoIWNlbGwpCisgICAgICAg
IHJldHVybjsKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgIGRhdGFMb2dGKCJK
U0MgR0Mgbm90aWNpbmcgcmVmZXJlbmNlIGZyb20gJXAgdG8gJXAuXG4iLCBmcm9tLCBjZWxsKTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGZyb20pOworI2VuZGlmCisjaWYgRU5BQkxFKEdDX1ZB
TElEQVRJT04pCisgICAgdmFsaWRhdGUoY2VsbCk7CisjZW5kaWYKKyAgICBpZiAoSGVhcDo6dGVz
dEFuZFNldE1hcmtlZChjZWxsKSB8fCAhY2VsbC0+c3RydWN0dXJlKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fdmlzaXRDb3VudCsrOworICAgICAgICAKKyAgICBNQVJLX0xPR19DSElMRCgq
dGhpcywgY2VsbCk7CisKKyAgICAvLyBTaG91bGQgbmV2ZXIgYXR0ZW1wdCB0byBtYXJrIHNvbWV0
aGluZyB0aGF0IGlzIHphcHBlZC4KKyAgICBBU1NFUlQoIWNlbGwtPmlzWmFwcGVkKCkpOworICAg
ICAgICAKKyAgICBtX3N0YWNrLmFwcGVuZChjZWxsKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChXcml0ZUJhcnJpZXJCYXNlPFQ+KiBz
bG90KQoreworICAgIGludGVybmFsQXBwZW5kKHNsb3QsICpzbG90LT5zbG90KCkpOworfQorCitB
TFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFZhbHVlcyhXcml0ZUJhcnJpZXJC
YXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6ZV90IGNvdW50KQoreworICAgIGFwcGVuZChiYXJy
aWVycy0+c2xvdCgpLCBjb3VudCk7CiB9CiAKIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphZGRX
ZWFrUmVmZXJlbmNlSGFydmVzdGVyKFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIqIHdlYWtSZWZlcmVu
Y2VIYXJ2ZXN0ZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdyaXRlQmFy
cmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV3JpdGVC
YXJyaWVyLmgJKHJldmlzaW9uIDE1MDU2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUV3JpdGVCYXJyaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw3ICsxMzcsNyBAQCBwdWJs
aWM6CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphcHBl
bmQoSklUV3JpdGVCYXJyaWVyPFQ+KiBzbG90KQogewotICAgIGludGVybmFsQXBwZW5kKHNsb3Qt
PmdldCgpKTsKKyAgICBpbnRlcm5hbEFwcGVuZCgwLCBzbG90LT5nZXQoKSk7CiB9CiAKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludENvbW1vbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludENvbW1vbi5oCShyZXZpc2lvbiAx
NTA1NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRDb21tb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzQsNyArMzQsMTEgQEAKIAogLy8gRGlzYWJsZSBpbmxpbmUgYWxsb2NhdGlv
biBpbiB0aGUgaW50ZXJwcmV0ZXIuIFRoaXMgaXMgZ3JlYXQgaWYgeW91J3JlIGNoYW5naW5nCiAv
LyBob3cgdGhlIEdDIGFsbG9jYXRlcy4KKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQor
I2RlZmluZSBMTElOVF9BTFdBWVNfQUxMT0NBVEVfU0xPVyAxCisjZWxzZQogI2RlZmluZSBMTElO
VF9BTFdBWVNfQUxMT0NBVEVfU0xPVyAwCisjZW5kaWYKIAogLy8gRGlzYWJsZSBpbmxpbmUgY2Fj
aGluZyBvZiBnZXRfYnlfaWQgYW5kIHB1dF9ieV9pZC4KICNkZWZpbmUgTExJTlRfQUxXQVlTX0FD
Q0VTU19TTE9XIDAKQEAgLTQyLDcgKzQ2LDcgQEAKIC8vIEVuYWJsZSBPU1IgaW50byB0aGUgSklU
LiBEaXNhYmxpbmcgdGhpcyB3aGlsZSB0aGUgTExJbnQgaXMgZW5hYmxlZCBlZmZlY3RpdmVseQog
Ly8gdHVybnMgb2ZmIGFsbCBKSVQnaW5nLCBzaW5jZSBpbiBMTEludCdzIHBhcmxhbmNlLCBPU1Ig
c3Vic3VtZXMgYW55IGZvcm0gb2YgSklUCiAvLyBpbnZvY2F0aW9uLgotI2lmIEVOQUJMRShKSVQp
CisjaWYgRU5BQkxFKEpJVCkgJiYgIUVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCiAjZGVmaW5l
IExMSU5UX09TUl9UT19KSVQgMQogI2Vsc2UKICNkZWZpbmUgTExJTlRfT1NSX1RPX0pJVCAwCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAkocmV2aXNpb24g
MTUwNTY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwNCwxMCArMTA0LDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mUHVibGljTGVuZ3RoKCkgeyByZXR1cm4gb2Zmc2V0T2ZJbmRleGluZ0hl
YWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mUHVibGljTGVuZ3RoKCk7IH0KICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVmVjdG9yTGVuZ3RoKCkgeyByZXR1cm4gb2Zmc2V0T2ZJ
bmRleGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCk7
IH0KICAgICAKLSAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGVVbmluaXRpYWxpemVkKFZNJiwg
c2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRl
eGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBzdGF0
aWMgQnV0dGVyZmx5KiBjcmVhdGVVbmluaXRpYWxpemVkKFZNJiwgSlNDZWxsKiBpbnRlbmRlZE93
bmVyLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhh
c0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogCi0g
ICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlKFZNJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXpl
X3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgY29uc3QgSW5kZXhp
bmdIZWFkZXImLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIHN0YXRp
YyBCdXR0ZXJmbHkqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBCdXR0ZXJm
bHkqIGNyZWF0ZShWTSYsIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90IHByZUNhcGFjaXR5
LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgY29uc3Qg
SW5kZXhpbmdIZWFkZXImLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAg
IHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZShWTSYsIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgU3Ry
dWN0dXJlKik7CiAgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlVW5pbml0aWFsaXplZER1cmlu
Z0NvbGxlY3Rpb24oQ29weVZpc2l0b3ImLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9w
ZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpOwogICAgIAogICAgIEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRl
cigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9CkBAIC0xNDcsMjAgKzE0
NywyMyBAQCBwdWJsaWM6CiAgICAgdm9pZCogYmFzZShzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVf
dCBwcm9wZXJ0eUNhcGFjaXR5KSB7IHJldHVybiBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5
Q2FwYWNpdHkgLSBwcmVDYXBhY2l0eTsgfQogICAgIHZvaWQqIGJhc2UoU3RydWN0dXJlKik7CiAK
LSAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGVPckdyb3dBcnJheVJpZ2h0KEJ1dHRlcmZseSos
IFZNJiwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBi
b29sIGhhZEluZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7IAorICAgIHN0YXRpYyBC
dXR0ZXJmbHkqIGNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCisgICAgICAgIEJ1dHRlcmZseSosIFZN
JiwgSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwKKyAgICAg
ICAgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFkSW5kZXhpbmdIZWFkZXIsCisgICAg
ICAgIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld0luZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsgCiAKICAgICAvLyBUaGUgYnV0dGVyZmx5IHJlYWxsb2Nh
dGlvbiBtZXRob2RzIHBlcmZvcm0gdGhlIHJlYWxsb2NhdGlvbiBpdHNlbGYgYnV0IGRvIG5vdCBj
aGFuZ2UgYW55CiAgICAgLy8gb2YgdGhlIG1ldGEtZGF0YSB0byByZWZsZWN0IHRoYXQgdGhlIHJl
YWxsb2NhdGlvbiBvY2N1cnJlZC4gTm90ZSB0aGF0IHRoaXMgc2V0IG9mCiAgICAgLy8gbWV0aG9k
cyBpcyBub3QgZXhoYXVzdGl2ZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGVuY2Fwc3VsYXRlIGFs
bCBwb3NzaWJsZSBhbGxvY2F0aW9uCiAgICAgLy8gbW9kZXMgb2YgYnV0dGVyZmxpZXMgLSB0aGVy
ZSBhcmUgY29kZSBwYXRocyB0aGF0IGFsbG9jYXRlIGJ1dHRlcmZsaWVzIGJ5IGNhbGxpbmcKICAg
ICAvLyBkaXJlY3RseSBpbnRvIEhlYXA6OnRyeUFsbG9jYXRlU3RvcmFnZS4KLSAgICBCdXR0ZXJm
bHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoVk0mLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBv
bGRQcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKLSAgICBC
dXR0ZXJmbHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoVk0mLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVy
ZSwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5
KTsKLSAgICBCdXR0ZXJmbHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoVk0mLCBTdHJ1Y3R1cmUqIG9s
ZFN0cnVjdHVyZSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpOwotICAgIEJ1dHRlcmZseSog
Z3Jvd0FycmF5UmlnaHQoVk0mLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IHByb3Bl
cnR5Q2FwYWNpdHksIGJvb2wgaGFkSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsg
Ly8gQXNzdW1lcyB0aGF0IHByZUNhcGFjaXR5IGlzIHplcm8sIGFuZCBhc3NlcnRzIGFzIG11Y2gu
Ci0gICAgQnV0dGVyZmx5KiBncm93QXJyYXlSaWdodChWTSYsIFN0cnVjdHVyZSosIHNpemVfdCBu
ZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgQnV0dGVyZmx5KiByZXNpemVBcnJh
eShWTSYsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIG9sZEhhc0luZGV4aW5nSGVhZGVy
LCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcmVDYXBh
Y2l0eSwgYm9vbCBuZXdIYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKTsKLSAgICBCdXR0ZXJmbHkqIHJlc2l6ZUFycmF5KFZNJiwgU3RydWN0dXJl
Kiwgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpOyAvLyBBc3N1bWVzIHRoYXQgeW91J3JlIG5vdCBjaGFuZ2luZyB3aGV0aGVyIG9yIG5v
dCB0aGUgb2JqZWN0IGhhcyBhbiBpbmRleGluZyBoZWFkZXIuCisgICAgQnV0dGVyZmx5KiBncm93
UHJvcGVydHlTdG9yYWdlKFZNJiwgSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QgcHJlQ2Fw
YWNpdHksIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVy
LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcm9wZXJ0eUNh
cGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoVk0mLCBKU0NlbGwq
IGludGVuZGVkT3duZXIsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3Qgb2xkUHJvcGVy
dHlDYXBhY2l0eSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSog
Z3Jvd1Byb3BlcnR5U3RvcmFnZShWTSYsIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgU3RydWN0dXJl
KiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJm
bHkqIGdyb3dBcnJheVJpZ2h0KFZNJiwgSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBTdHJ1Y3R1cmUq
IG9sZFN0cnVjdHVyZSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFkSW5kZXhpbmdI
ZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld0lu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsgLy8gQXNzdW1lcyB0aGF0IHByZUNhcGFjaXR5IGlz
IHplcm8sIGFuZCBhc3NlcnRzIGFzIG11Y2guCisgICAgQnV0dGVyZmx5KiBncm93QXJyYXlSaWdo
dChWTSYsIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgU3RydWN0dXJlKiwgc2l6ZV90IG5ld0luZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBCdXR0ZXJmbHkqIHJlc2l6ZUFycmF5KFZNJiwg
SlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBvbGRI
YXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBz
aXplX3QgbmV3UHJlQ2FwYWNpdHksIGJvb2wgbmV3SGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBu
ZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgQnV0dGVyZmx5KiByZXNpemVBcnJh
eShWTSYsIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgU3RydWN0dXJlKiwgc2l6ZV90IG5ld1ByZUNh
cGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOyAvLyBBc3N1bWVz
IHRoYXQgeW91J3JlIG5vdCBjaGFuZ2luZyB3aGV0aGVyIG9yIG5vdCB0aGUgb2JqZWN0IGhhcyBh
biBpbmRleGluZyBoZWFkZXIuCiAgICAgQnV0dGVyZmx5KiB1bnNoaWZ0KFN0cnVjdHVyZSosIHNp
emVfdCBudW1iZXJPZlNsb3RzKTsKICAgICBCdXR0ZXJmbHkqIHNoaWZ0KFN0cnVjdHVyZSosIHNp
emVfdCBudW1iZXJPZlNsb3RzKTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCShyZXZpc2lvbiAxNTA1NjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDI3ICszNSwzMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIEJ1dHRl
cmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKFZNJiB2bSwgc2l6ZV90IHByZUNh
cGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwg
c2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoraW5saW5lIEJ1dHRlcmZseSogQnV0
dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKFZNJiB2bSwgSlNDZWxsKiBpbnRlbmRlZE93bmVy
LCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0lu
ZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7CiAgICAg
dm9pZCogdGVtcDsKICAgICBzaXplX3Qgc2l6ZSA9IHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJv
cGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKTsKLSAgICBSRUxFQVNFX0FTU0VSVCh2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzaXpl
LCAmdGVtcCkpOworICAgIFJFTEVBU0VfQVNTRVJUKHZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdl
KGludGVuZGVkT3duZXIsIHNpemUsICZ0ZW1wKSk7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBm
cm9tQmFzZSh0ZW1wLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUoVk0mIHZt
LCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0lu
ZGV4aW5nSGVhZGVyLCBjb25zdCBJbmRleGluZ0hlYWRlciYgaW5kZXhpbmdIZWFkZXIsIHNpemVf
dCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZs
eTo6Y3JlYXRlKFZNJiB2bSwgSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QgcHJlQ2FwYWNp
dHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBjb25z
dCBJbmRleGluZ0hlYWRlciYgaW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcykKIHsKICAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6
ZWQoCi0gICAgICAgIHZtLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhp
bmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAgICAgdm0sIGludGVu
ZGVkT3duZXIsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRl
ciwKKyAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogICAgIGlmIChoYXNJbmRl
eGluZ0hlYWRlcikKICAgICAgICAgKnJlc3VsdC0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5n
SGVhZGVyOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRl
cmZseTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitpbmxpbmUgQnV0dGVy
Zmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZShWTSYgdm0sIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZSh2bSwgMCwgc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKSwgSW5kZXhpbmdIZWFkZXIoKSwgMCk7CisgICAgcmV0dXJuIGNyZWF0ZSgKKyAg
ICAgICAgdm0sIGludGVuZGVkT3duZXIsIDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSwKKyAgICAgICAgaGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSks
IEluZGV4aW5nSGVhZGVyKCksIDApOwogfQogCiBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKENvcHlWaXNpdG9yJiB2aXNpdG9y
LCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0lu
ZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCkBAIC03Miwx
MSArNzUsMTQgQEAgaW5saW5lIHZvaWQqIEJ1dHRlcmZseTo6YmFzZShTdHJ1Y3R1cmUqIAogICAg
IHJldHVybiBiYXNlKGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSksIHN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiB9CiAKLWlubGluZSBCdXR0ZXJmbHkqIEJ1
dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShWTSYgdm0sIHNpemVfdCBwcmVDYXBhY2l0eSwg
c2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVf
dCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkp
CitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoCisgICAg
Vk0mIHZtLCBKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90
IG9sZFByb3BlcnR5Q2FwYWNpdHksCisgICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90
IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkK
IHsKICAgICBSRUxFQVNFX0FTU0VSVChuZXdQcm9wZXJ0eUNhcGFjaXR5ID4gb2xkUHJvcGVydHlD
YXBhY2l0eSk7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKAot
ICAgICAgICB2bSwgcHJlQ2FwYWNpdHksIG5ld1Byb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5n
SGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgICAgIHZtLCBpbnRlbmRl
ZE93bmVyLCBwcmVDYXBhY2l0eSwgbmV3UHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFk
ZXIsCisgICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKICAgICBtZW1jcHkoCiAg
ICAgICAgIHJlc3VsdC0+cHJvcGVydHlTdG9yYWdlKCkgLSBvbGRQcm9wZXJ0eUNhcGFjaXR5LAog
ICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIG9sZFByb3BlcnR5Q2FwYWNpdHksCkBAIC04NCw1
MSArOTAsNzIgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93UHJvcGVydAogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd1By
b3BlcnR5U3RvcmFnZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qgb2xkUHJv
cGVydHlDYXBhY2l0eSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCitpbmxpbmUgQnV0dGVy
Zmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoCisgICAgVk0mIHZtLCBKU0NlbGwq
IGludGVuZGVkT3duZXIsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qgb2xkUHJvcGVydHlD
YXBhY2l0eSwKKyAgICBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKIHsKICAgICByZXR1cm4g
Z3Jvd1Byb3BlcnR5U3RvcmFnZSgKLSAgICAgICAgdm0sIGluZGV4aW5nSGVhZGVyKCktPnByZUNh
cGFjaXR5KHN0cnVjdHVyZSksIG9sZFByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgIHZtLCBpbnRl
bmRlZE93bmVyLCBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBvbGRQ
cm9wZXJ0eUNhcGFjaXR5LAogICAgICAgICBoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpKSwKICAgICAgICAgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMoc3RydWN0dXJlKSwgbmV3UHJvcGVydHlDYXBhY2l0eSk7CiB9CiAKLWlubGlu
ZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShWTSYgdm0sIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKK2lubGluZSBC
dXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZSgKKyAgICBWTSYgdm0sIEpT
Q2VsbCogaW50ZW5kZWRPd25lciwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBuZXdQ
cm9wZXJ0eUNhcGFjaXR5KQogewogICAgIHJldHVybiBncm93UHJvcGVydHlTdG9yYWdlKAotICAg
ICAgICB2bSwgb2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCks
IG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworICAgICAgICB2bSwgaW50ZW5kZWRPd25lciwgb2xkU3Ry
dWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksCisgICAgICAgIG5ld1By
b3BlcnR5Q2FwYWNpdHkpOwogfQogCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0
ZU9yR3Jvd0FycmF5UmlnaHQoQnV0dGVyZmx5KiBvbGRCdXR0ZXJmbHksIFZNJiB2bSwgU3RydWN0
dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhZEluZGV4
aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBu
ZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKLXsKLSAgICBpZiAoIW9sZEJ1dHRlcmZseSkK
LSAgICAgICAgcmV0dXJuIGNyZWF0ZSh2bSwgMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgSW5k
ZXhpbmdIZWFkZXIoKSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIHJldHVy
biBvbGRCdXR0ZXJmbHktPmdyb3dBcnJheVJpZ2h0KHZtLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5
Q2FwYWNpdHksIGhhZEluZGV4aW5nSGVhZGVyLCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cywgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotfQotCi1pbmxpbmUgQnV0dGVyZmx5
KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KFZNJiB2bSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1
cmUsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhZEluZGV4aW5nSGVhZGVyLCBzaXpl
X3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcykKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93
QXJyYXlSaWdodCgKKyAgICBCdXR0ZXJmbHkqIG9sZEJ1dHRlcmZseSwgVk0mIHZtLCBKU0NlbGwq
IGludGVuZGVkT3duZXIsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAorICAgIHNpemVfdCBwcm9w
ZXJ0eUNhcGFjaXR5LCBib29sIGhhZEluZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMsCisgICAgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKQoreworICAgIGlmICghb2xkQnV0dGVyZmx5KSB7CisgICAgICAgIHJldHVybiBjcmVhdGUo
CisgICAgICAgICAgICB2bSwgaW50ZW5kZWRPd25lciwgMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1
ZSwgSW5kZXhpbmdIZWFkZXIoKSwKKyAgICAgICAgICAgIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKTsKKyAgICB9CisgICAgcmV0dXJuIG9sZEJ1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQo
CisgICAgICAgIHZtLCBpbnRlbmRlZE93bmVyLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5Q2FwYWNp
dHksIGhhZEluZGV4aW5nSGVhZGVyLAorICAgICAgICBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcywgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworfQorCitpbmxpbmUgQnV0dGVy
Zmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KAorICAgIFZNJiB2bSwgSlNDZWxsKiBpbnRl
bmRlZE93bmVyLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNp
dHksCisgICAgYm9vbCBoYWRJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzLAorICAgIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykK
IHsKICAgICBBU1NFUlRfVU5VU0VEKG9sZFN0cnVjdHVyZSwgIWluZGV4aW5nSGVhZGVyKCktPnBy
ZUNhcGFjaXR5KG9sZFN0cnVjdHVyZSkpOwogICAgIEFTU0VSVF9VTlVTRUQob2xkU3RydWN0dXJl
LCBoYWRJbmRleGluZ0hlYWRlciA9PSBoYXNJbmRleGluZ0hlYWRlcihvbGRTdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpKSk7CiAgICAgdm9pZCogdGhlQmFzZSA9IGJhc2UoMCwgcHJvcGVydHlDYXBh
Y2l0eSk7CiAgICAgc2l6ZV90IG9sZFNpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0
eSwgaGFkSW5kZXhpbmdIZWFkZXIsIG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKICAg
ICBzaXplX3QgbmV3U2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBu
ZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgaWYgKCF2bS5oZWFwLnRyeVJlYWxs
b2NhdGVTdG9yYWdlKCZ0aGVCYXNlLCBvbGRTaXplLCBuZXdTaXplKSkKKyAgICBpZiAoIXZtLmhl
YXAudHJ5UmVhbGxvY2F0ZVN0b3JhZ2UoaW50ZW5kZWRPd25lciwgJnRoZUJhc2UsIG9sZFNpemUs
IG5ld1NpemUpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gZnJvbUJhc2UodGhlQmFz
ZSwgMCwgcHJvcGVydHlDYXBhY2l0eSk7CiB9CiAKLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZs
eTo6Z3Jvd0FycmF5UmlnaHQoVk0mIHZtLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90
IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoraW5saW5lIEJ1dHRlcmZseSogQnV0dGVy
Zmx5Ojpncm93QXJyYXlSaWdodCgKKyAgICBWTSYgdm0sIEpTQ2VsbCogaW50ZW5kZWRPd25lciwg
U3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsCisgICAgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKQogewogICAgIHJldHVybiBncm93QXJyYXlSaWdodCgKLSAgICAgICAgdm0sIG9s
ZFN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLAorICAgICAgICB2
bSwgaW50ZW5kZWRPd25lciwgb2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCksCiAgICAgICAgIGhhc0luZGV4aW5nSGVhZGVyKG9sZFN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpLAogICAgICAgICBpbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyhvbGRTdHJ1Y3R1cmUpLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiB9
CiAKLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoVk0mIHZtLCBzaXpl
X3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBvbGRIYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9s
ZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIGJvb2wg
bmV3SGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cykKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoCisgICAgVk0mIHZt
LCBKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIG9s
ZEhhc0luZGV4aW5nSGVhZGVyLAorICAgIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcywgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBib29sIG5ld0hhc0luZGV4aW5nSGVhZGVyLAor
ICAgIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKIHsKICAgICBCdXR0ZXJm
bHkqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQoCi0gICAgICAgIHZtLCBuZXdQcmVDYXBh
Y2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgbmV3SGFzSW5kZXhpbmdIZWFkZXIsIG5ld0luZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAgICAgdm0sIGludGVuZGVkT3duZXIsIG5ld1ByZUNh
cGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBuZXdIYXNJbmRleGluZ0hlYWRlciwKKyAgICAgICAg
bmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxk
IGJlIG1hZGUgbXVjaCBtb3JlIGVmZmljaWVudCBpZiB3ZSB1c2VkIHRoZSBwcm9wZXJ0eSBzaXpl
LAogICAgIC8vIG5vdCB0aGUgY2FwYWNpdHkuCiAgICAgdm9pZCogdG8gPSByZXN1bHQtPnByb3Bl
cnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eTsKQEAgLTE0MCwxMSArMTY3LDEzIEBAIGlu
bGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5ld0lu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoraW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpy
ZXNpemVBcnJheSgKKyAgICBWTSYgdm0sIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwKKyAgICBzaXplX3QgbmV3SW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7CiAgICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9IEpT
Qzo6aGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgcmV0
dXJuIHJlc2l6ZUFycmF5KAotICAgICAgICB2bSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpLCBoYXNJbmRleGluZ0hlYWRlciwKKyAgICAgICAgdm0sIGludGVuZGVkT3duZXIsIHN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgaGFzSW5kZXhpbmdIZWFkZXIsCiAgICAgICAgIGlu
ZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSksIG5l
d1ByZUNhcGFjaXR5LAogICAgICAgICBoYXNJbmRleGluZ0hlYWRlciwgbmV3SW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheS5jcHAJKHJldmlzaW9uIDE1MDU2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMCArNDgsMTEgQEAgQVNT
RVJUX0hBU19UUklWSUFMX0RFU1RSVUNUT1IoSlNBcnJheSk7CiAKIGNvbnN0IENsYXNzSW5mbyBK
U0FycmF5OjpzX2luZm8gPSB7IkFycmF5IiwgJkpTTm9uRmluYWxPYmplY3Q6OnNfaW5mbywgMCwg
MCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FycmF5KX07CiAKLUJ1dHRlcmZseSogY3JlYXRlQXJy
YXlCdXR0ZXJmbHlJbkRpY3Rpb25hcnlJbmRleGluZ01vZGUoVk0mIHZtLCB1bnNpZ25lZCBpbml0
aWFsTGVuZ3RoKQorQnV0dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseUluRGljdGlvbmFyeUlu
ZGV4aW5nTW9kZSgKKyAgICBWTSYgdm0sIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdW5zaWduZWQg
aW5pdGlhbExlbmd0aCkKIHsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6
Y3JlYXRlKAotICAgICAgICB2bSwgMCwgMCwgdHJ1ZSwgSW5kZXhpbmdIZWFkZXIoKSwgQXJyYXlT
dG9yYWdlOjpzaXplRm9yKDApKTsKKyAgICAgICAgdm0sIGludGVuZGVkT3duZXIsIDAsIDAsIHRy
dWUsIEluZGV4aW5nSGVhZGVyKCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CiAgICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICBzdG9y
YWdlLT5zZXRMZW5ndGgoaW5pdGlhbExlbmd0aCk7CiAgICAgc3RvcmFnZS0+c2V0VmVjdG9yTGVu
Z3RoKDApOwpAQCAtMjg2LDcgKzI4Nyw3IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xv
d0Nhc2UoVk0mIHYKICAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gY3VycmVudENhcGFjaXR5
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIHNpemVfdCBuZXdTaXplID0gQnV0dGVyZmx5Ojp0b3Rh
bFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGRl
c2lyZWRDYXBhY2l0eSkpOwotICAgICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdl
KG5ld1NpemUsICZuZXdBbGxvY0Jhc2UpKQorICAgICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2Nh
dGVTdG9yYWdlKHRoaXMsIG5ld1NpemUsICZuZXdBbGxvY0Jhc2UpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBkZXNpcmVkQ2FwYWNpdHk7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2
aXNpb24gMTUwNTY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsMjEgKzE3NCwyMiBAQCBwcml2YXRlOgogICAgIHZvaWQg
Y29tcGFjdEZvclNvcnRpbmcodW5zaWduZWQmIG51bURlZmluZWQsIHVuc2lnbmVkJiBuZXdSZWxl
dmFudExlbmd0aCk7CiB9OwogCi1pbmxpbmUgQnV0dGVyZmx5KiBjcmVhdGVDb250aWd1b3VzQXJy
YXlCdXR0ZXJmbHkoVk0mIHZtLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkJiB2ZWN0b3JMZW5n
dGgpCitpbmxpbmUgQnV0dGVyZmx5KiBjcmVhdGVDb250aWd1b3VzQXJyYXlCdXR0ZXJmbHkoVk0m
IHZtLCBKU0NlbGwqIGludGVuZGVkT3duZXIsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQmIHZl
Y3Rvckxlbmd0aCkKIHsKICAgICBJbmRleGluZ0hlYWRlciBoZWFkZXI7CiAgICAgdmVjdG9yTGVu
Z3RoID0gc3RkOjptYXgobGVuZ3RoLCBCQVNFX1ZFQ1RPUl9MRU4pOwogICAgIGhlYWRlci5zZXRW
ZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKICAgICBoZWFkZXIuc2V0UHVibGljTGVuZ3RoKGxl
bmd0aCk7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBCdXR0ZXJmbHk6OmNyZWF0ZSgKLSAgICAg
ICAgdm0sIDAsIDAsIHRydWUsIGhlYWRlciwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSk7CisgICAgICAgIHZtLCBpbnRlbmRlZE93bmVyLCAwLCAwLCB0cnVlLCBoZWFkZXIs
IHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLWlubGluZSBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5KFZNJiB2bSwg
dW5zaWduZWQgaW5pdGlhbExlbmd0aCkKK2lubGluZSBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0
dGVyZmx5KFZNJiB2bSwgSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB1bnNpZ25lZCBpbml0aWFsTGVu
Z3RoKQogewogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGUoCi0g
ICAgICAgIHZtLCAwLCAwLCB0cnVlLCBiYXNlSW5kZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFs
TGVuZ3RoKSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKEJBU0VfVkVDVE9SX0xFTikpOworICAgICAg
ICB2bSwgaW50ZW5kZWRPd25lciwgMCwgMCwgdHJ1ZSwgYmFzZUluZGV4aW5nSGVhZGVyRm9yQXJy
YXkoaW5pdGlhbExlbmd0aCksCisgICAgICAgIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihCQVNFX1ZF
Q1RPUl9MRU4pKTsKICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOwogICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzID0gMDsKICAgICBzdG9yYWdlLT5t
X3NwYXJzZU1hcC5jbGVhcigpOwpAQCAtMTk2LDcgKzE5Nyw4IEBAIGlubGluZSBCdXR0ZXJmbHkq
IGNyZWF0ZUFycmF5QnV0dGVyZmx5KFYKICAgICByZXR1cm4gYnV0dGVyZmx5OwogfQogCi1CdXR0
ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5SW5EaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKFZNJiwg
dW5zaWduZWQgaW5pdGlhbExlbmd0aCk7CitCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5
SW5EaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKAorICAgIFZNJiwgSlNDZWxsKiBpbnRlbmRlZE93bmVy
LCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKTsKIAogaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OmNy
ZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3Ro
KQogewpAQCAtMjA4LDcgKzIxMCw3IEBAIGlubGluZSBKU0FycmF5KiBKU0FycmF5OjpjcmVhdGUo
Vk0mIHZtLCAKICAgICAgICAgICAgIHx8IGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKQogICAgICAgICAgICAgfHwgaGFzQ29udGlndW91cyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKSk7CiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aDsKLSAgICAgICAgYnV0dGVyZmx5
ID0gY3JlYXRlQ29udGlndW91c0FycmF5QnV0dGVyZmx5KHZtLCBpbml0aWFsTGVuZ3RoLCB2ZWN0
b3JMZW5ndGgpOworICAgICAgICBidXR0ZXJmbHkgPSBjcmVhdGVDb250aWd1b3VzQXJyYXlCdXR0
ZXJmbHkodm0sIDAsIGluaXRpYWxMZW5ndGgsIHZlY3Rvckxlbmd0aCk7CiAgICAgICAgIEFTU0VS
VChpbml0aWFsTGVuZ3RoIDwgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCk7CiAgICAgICAgIGlmICho
YXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpIHsKICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKQEAgLTIxOCw3ICsyMjAsNyBA
QCBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6Y3JlYXRlKFZNJiB2bSwgCiAgICAgICAgIEFTU0VS
VCgKICAgICAgICAgICAgIHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoU2xv
d1B1dEFycmF5U3RvcmFnZQogICAgICAgICAgICAgfHwgc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSA9PSBBcnJheVdpdGhBcnJheVN0b3JhZ2UpOwotICAgICAgICBidXR0ZXJmbHkgPSBjcmVhdGVB
cnJheUJ1dHRlcmZseSh2bSwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgIGJ1dHRlcmZseSA9IGNy
ZWF0ZUFycmF5QnV0dGVyZmx5KHZtLCAwLCBpbml0aWFsTGVuZ3RoKTsKICAgICB9CiAgICAgSlNB
cnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5Pih2bS5oZWFw
KSkgSlNBcnJheSh2bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOwogICAgIGFycmF5LT5maW5pc2hD
cmVhdGlvbih2bSk7CkBAIC0yNDAsNyArMjQyLDcgQEAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6
OnRyeUNyZWF0ZVVuaW5pdAogICAgICAgICAgICAgfHwgaGFzQ29udGlndW91cyhzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpKSk7CiAKICAgICAgICAgdm9pZCogdGVtcDsKLSAgICAgICAgaWYgKCF2
bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVl
LCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgJnRlbXApKQorICAgICAg
ICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKDAsIEJ1dHRlcmZseTo6dG90YWxTaXpl
KDAsIDAsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCAmdGVt
cCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgYnV0dGVyZmx5ID0gQnV0dGVyZmx5
Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsKICAgICAgICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5n
dGgodmVjdG9yTGVuZ3RoKTsKQEAgLTI1MSw3ICsyNTMsNyBAQCBpbmxpbmUgSlNBcnJheSogSlNB
cnJheTo6dHJ5Q3JlYXRlVW5pbml0CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICB2
b2lkKiB0ZW1wOwotICAgICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKEJ1dHRl
cmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JM
ZW5ndGgpKSwgJnRlbXApKQorICAgICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdl
KDAsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZv
cih2ZWN0b3JMZW5ndGgpKSwgJnRlbXApKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
IGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgMCk7CiAgICAgICAgICpi
dXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlckZvckFycmF5KGluaXRp
YWxMZW5ndGgsIHZlY3Rvckxlbmd0aCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxNTA1NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0Myw3ICs1NDMs
NyBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJCiAgICAgICAgICAg
ICBtYXAtPmFkZCh0aGlzLCBpKS5pdGVyYXRvci0+dmFsdWUuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7
CiAgICAgfQogCi0gICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJm
bHkoKS0+cmVzaXplQXJyYXkodm0sIHN0cnVjdHVyZSgpLCAwLCBBcnJheVN0b3JhZ2U6OnNpemVG
b3IoMCkpOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5
KCktPnJlc2l6ZUFycmF5KHZtLCB0aGlzLCBzdHJ1Y3R1cmUoKSwgMCwgQXJyYXlTdG9yYWdlOjpz
aXplRm9yKDApKTsKICAgICBSRUxFQVNFX0FTU0VSVChuZXdCdXR0ZXJmbHkpOwogICAgIAogICAg
IG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OwpAQCAtNTk1LDggKzU5NSw4IEBAIEJ1dHRlcmZs
eSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxJbmRleGUKICAgICBBU1NFUlQoIXN0cnVjdHVyZSgp
LT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKTsKICAgICBBU1NFUlQoIWluZGV4aW5nU2hvdWxkQmVT
cGFyc2UoKSk7CiAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RkOjptYXgobGVuZ3RoLCBC
QVNFX1ZFQ1RPUl9MRU4pOwotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5
OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0KG1fYnV0dGVyZmx5LCAKLSAgICAgICAgdm0sIHN0cnVj
dHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsCisgICAg
QnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5Umln
aHQoCisgICAgICAgIG1fYnV0dGVyZmx5LCB2bSwgdGhpcywgc3RydWN0dXJlKCksIHN0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwKICAgICAgICAgZWxlbWVudFNpemUg
KiB2ZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0
aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKQEAg
LTY0MSw4ICs2NDEsOCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3Jh
CiB7CiAgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCk7CiAgICAgQVNTRVJUX1VOVVNFRChvbGRUeXBlLCAhaGFzSW5kZXhlZFByb3BlcnRpZXMob2xk
VHlwZSkpOwotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVP
ckdyb3dBcnJheVJpZ2h0KG1fYnV0dGVyZmx5LCAKLSAgICAgICAgdm0sIHN0cnVjdHVyZSgpLCBz
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsCisgICAgQnV0dGVyZmx5
KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCisgICAg
ICAgIG1fYnV0dGVyZmx5LCB2bSwgdGhpcywgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwKICAgICAgICAgQXJyYXlTdG9yYWdlOjpzaXplRm9y
KHZlY3Rvckxlbmd0aCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG5ld0J1dHRlcmZseSk7CiAKQEAg
LTY5NCw3ICs2OTQsNyBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb25zdHJ1Y3RDb252ZXJ0
CiAgICAgdW5zaWduZWQgcHJvcGVydHlTaXplID0gc3RydWN0dXJlKCktPm91dE9mTGluZVNpemUo
KTsKICAgICAKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRl
VW5pbml0aWFsaXplZCgKLSAgICAgICAgdm0sIDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIEFy
cmF5U3RvcmFnZTo6c2l6ZUZvcihuZWVkZWRMZW5ndGgpKTsKKyAgICAgICAgdm0sIHRoaXMsIDAs
IHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZWVkZWRMZW5n
dGgpKTsKICAgICAKICAgICBtZW1jcHkoCiAgICAgICAgIG5ld0J1dHRlcmZseS0+cHJvcGVydHlT
dG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsCkBAIC0yMzAwLDcgKzIzMDAsOSBAQCBib29sIEpTT2Jq
ZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYgCiAKICAgICAvLyBGYXN0IGNhc2UgLSB0aGVy
ZSBpcyBubyBwcmVjYXBhY2l0eS4gSW4gdGhlc2UgY2FzZXMgYSByZWFsbG9jIG1ha2VzIHNlbnNl
LgogICAgIGlmIChMSUtFTFkoIWluZGV4QmlhcykpIHsKLSAgICAgICAgQnV0dGVyZmx5KiBuZXdC
dXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+Z3Jvd0FycmF5UmlnaHQodm0sIHN0cnVj
dHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgQXJyYXlTdG9y
YWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0
b3JMZW5ndGgpKTsKKyAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBzdG9yYWdlLT5i
dXR0ZXJmbHkoKS0+Z3Jvd0FycmF5UmlnaHQoCisgICAgICAgICAgICB2bSwgdGhpcywgc3RydWN0
dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLAorICAgICAgICAg
ICAgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCksIEFycmF5U3RvcmFnZTo6c2l6
ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKICAgICAgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5
OwpAQCAtMjMxMSw3ICsyMzEzLDcgQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5n
dGgoVk0mIAogICAgIC8vIFJlbW92ZSBzb21lLCBidXQgbm90IGFsbCBvZiB0aGUgcHJlY2FwYWNp
dHkuIEF0b21pYyBkZWNheSwgJiBjYXBwZWQgdG8gbm90IG92ZXJmbG93IGFycmF5IGxlbmd0aC4K
ICAgICB1bnNpZ25lZCBuZXdJbmRleEJpYXMgPSBzdGQ6Om1pbihpbmRleEJpYXMgPj4gMSwgTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgQnV0dGVyZmx5
KiBuZXdCdXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+cmVzaXplQXJyYXkoCi0gICAg
ICAgIHZtLAorICAgICAgICB2bSwgdGhpcywKICAgICAgICAgc3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpLAog
ICAgICAgICBuZXdJbmRleEJpYXMsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0
b3JMZW5ndGgpKTsKICAgICBpZiAoIW5ld0J1dHRlcmZseSkKQEAgLTIzMzQsNyArMjMzNiw3IEBA
IHZvaWQgSlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3coVk0mIHZtLCAKICAgICAgICAgTUFYX1NU
T1JBR0VfVkVDVE9SX0xFTkdUSCk7CiAgICAgdW5zaWduZWQgb2xkVmVjdG9yTGVuZ3RoID0gbV9i
dXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwogICAgIG1fYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkt
Pmdyb3dBcnJheVJpZ2h0KAotICAgICAgICB2bSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5v
dXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLAorICAgICAgICB2bSwgdGhpcywgc3RydWN0dXJlKCks
IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLAogICAgICAgICBvbGRWZWN0
b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpLAogICAgICAgICBuZXdWZWN0b3JMZW5n
dGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKICAgICBpZiAoaGFzRG91YmxlKHN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSkpIHsKQEAgLTIzNTEsNyArMjM1Myw3IEBAIEJ1dHRlcmZseSog
SlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWcKICAgICAvLyBJdCdzIGltcG9ydGFudCB0aGF0
IHRoaXMgZnVuY3Rpb24gbm90IHJlbHkgb24gc3RydWN0dXJlKCksIGZvciB0aGUgcHJvcGVydHkK
ICAgICAvLyBjYXBhY2l0eSwgc2luY2Ugd2UgbWlnaHQgaGF2ZSBhbHJlYWR5IG11dGF0ZWQgdGhl
IHN0cnVjdHVyZSBpbi1wbGFjZS4KICAgICAKLSAgICByZXR1cm4gbV9idXR0ZXJmbHktPmdyb3dQ
cm9wZXJ0eVN0b3JhZ2Uodm0sIHN0cnVjdHVyZSgpLCBvbGRTaXplLCBuZXdTaXplKTsKKyAgICBy
ZXR1cm4gbV9idXR0ZXJmbHktPmdyb3dQcm9wZXJ0eVN0b3JhZ2Uodm0sIHRoaXMsIHN0cnVjdHVy
ZSgpLCBvbGRTaXplLCBuZXdTaXplKTsKIH0KIAogYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxNTA1Njkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJy
aSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBL
ZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
LCAyMDA5LCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAiU3RydWN0dXJlLmgi
CiAjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgotI2luY2x1ZGUgIlNsb3RW
aXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlNwYXJzZUFycmF5VmFsdWVNYXAuaCIKICNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTExMzYsNiArMTEzNSw3IEBAIGlubGluZSBK
U09iamVjdDo6SlNPYmplY3QoVk0mIHZtLCBTdHJ1Y3QKICAgICA6IEpTQ2VsbCh2bSwgc3RydWN0
dXJlKQogICAgICwgbV9idXR0ZXJmbHkoYnV0dGVyZmx5KQogeworICAgIHZtLmhlYXAuYXNjcmli
ZU93bmVyKHRoaXMsIGJ1dHRlcmZseSk7CiB9CiAKIGlubGluZSBKU1ZhbHVlIEpTT2JqZWN0Ojpw
cm90b3R5cGUoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3Bl
cmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
ZXJhdGlvbnMuaAkocmV2aXNpb24gMTUwNTY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQot
ICogIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAi
SlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU1Byb3h5LmgiCiAjaW5jbHVkZSAiSlNT
dHJpbmcuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJTdHJ1
Y3R1cmVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuY3BwCShyZXZpc2lv
biAxNTA1NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVz
QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIFJlZ0V4cE1hdGNoZXNB
cnJheSogUmVnRXhwTWF0Y2hlc0FycmF5OjoKIHsKICAgICBBU1NFUlQocmVzdWx0KTsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gY3JlYXRlQXJy
YXlCdXR0ZXJmbHkodm0sIHJlZ0V4cC0+bnVtU3VicGF0dGVybnMoKSArIDEpOworICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlCdXR0ZXJmbHkodm0sIDAsIHJlZ0V4cC0+bnVt
U3VicGF0dGVybnMoKSArIDEpOwogICAgIFJlZ0V4cE1hdGNoZXNBcnJheSogYXJyYXkgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxSZWdFeHBNYXRjaGVzQXJyYXk+KHZtLmhlYXApKSBSZWdF
eHBNYXRjaGVzQXJyYXkodm0sIGJ1dHRlcmZseSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LCBpbnB1dCwgcmVnRXhwLCByZXN1bHQpOwogICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbih2bSk7
CiAgICAgcmV0dXJuIGFycmF5OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkocmV2aXNpb24gMTUwNTY5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDksMjcgKzEwOSw2IEBAIGlubGluZSBib29sIFN0cnVjdHVyZTo6bWFzcXVlcmFkZXNBc1Vu
ZGUKICAgICByZXR1cm4gdHlwZUluZm8oKS5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKCkgJiYgZ2xv
YmFsT2JqZWN0KCkgPT0gbGV4aWNhbEdsb2JhbE9iamVjdDsKIH0KIAotQUxXQVlTX0lOTElORSB2
b2lkIFNsb3RWaXNpdG9yOjppbnRlcm5hbEFwcGVuZChKU0NlbGwqIGNlbGwpCi17Ci0gICAgQVNT
RVJUKCFtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbik7Ci0gICAgaWYgKCFjZWxs
KQotICAgICAgICByZXR1cm47Ci0jaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCi0gICAgdmFsaWRh
dGUoY2VsbCk7Ci0jZW5kaWYKLSAgICBpZiAoSGVhcDo6dGVzdEFuZFNldE1hcmtlZChjZWxsKSB8
fCAhY2VsbC0+c3RydWN0dXJlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fdmlzaXRDb3Vu
dCsrOwotICAgICAgICAKLSAgICBNQVJLX0xPR19DSElMRCgqdGhpcywgY2VsbCk7Ci0KLSAgICAv
LyBTaG91bGQgbmV2ZXIgYXR0ZW1wdCB0byBtYXJrIHNvbWV0aGluZyB0aGF0IGlzIHphcHBlZC4K
LSAgICBBU1NFUlQoIWNlbGwtPmlzWmFwcGVkKCkpOwotICAgICAgICAKLSAgICBtX3N0YWNrLmFw
cGVuZChjZWxsKTsKLX0KLQogaW5saW5lIGJvb2wgU3RydWN0dXJlOjp0cmFuc2l0aXZlbHlUcmFu
c2l0aW9uZWRGcm9tKFN0cnVjdHVyZSogc3RydWN0dXJlVG9GaW5kKQogewogICAgIGZvciAoU3Ry
dWN0dXJlKiBjdXJyZW50ID0gdGhpczsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPnByZXZp
b3VzSUQoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJy
aWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVC
YXJyaWVyLmgJKHJldmlzaW9uIDE1MDU2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dyaXRlQmFycmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMjcsMTggKzIyNyw2IEBAIHRlbXBs
YXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBpbmxpbmUKICAgICByZXR1cm4gbGhzLmdldCgp
ID09IHJocy5nZXQoKTsKIH0KIAotLy8gU2xvdFZpc2l0b3IgZnVuY3Rpb25zCi0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoV3JpdGVCYXJyaWVy
QmFzZTxUPiogc2xvdCkKLXsKLSAgICBpbnRlcm5hbEFwcGVuZCgqc2xvdC0+c2xvdCgpKTsKLX0K
LQotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRWYWx1ZXMoV3JpdGVCYXJy
aWVyQmFzZTxVbmtub3duPiogYmFycmllcnMsIHNpemVfdCBjb3VudCkKLXsKLSAgICBhcHBlbmQo
YmFycmllcnMtPnNsb3QoKSwgY291bnQpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2Vu
ZGlmIC8vIFdyaXRlQmFycmllcl9oCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTUwNzg1KQorKysgU291cmNl
L1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAxMy0wNS0y
NyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEl0IHNob3VsZCBi
ZSBwb3NzaWJsZSB0byByZWNvcmQgaGVhcCBvcGVyYXRpb25zIChib3RoIEZhc3RNYWxsb2MgYW5k
IEpTQyBHQykKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExNjg0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0NvbmRpdGlv
bmFsTG9ja2VyLmg6IEFkZGVkLgorICAgICAgICAoV1RGKToKKyAgICAgICAgKENvbmRpdGlvbmFs
TG9ja2VyKToKKyAgICAgICAgKFdURjo6Q29uZGl0aW9uYWxMb2NrZXI6OkNvbmRpdGlvbmFsTG9j
a2VyKToKKyAgICAgICAgKFdURjo6Q29uZGl0aW9uYWxMb2NrZXI6On5Db25kaXRpb25hbExvY2tl
cik6CisgICAgICAgICogd3RmL0RhdGFMb2cuY3BwOgorICAgICAgICAoV1RGKToKKyAgICAgICAg
KFdURjo6aW5pdGlhbGl6ZUxvZ0ZpbGVPbmNlKToKKyAgICAgICAgKiB3dGYvRmFzdE1hbGxvYy5j
cHA6CisgICAgICAgIChXVEY6OlRDTWFsbG9jX1RocmVhZENhY2hlOjpDcmVhdGVDYWNoZUlmTmVj
ZXNzYXJ5KToKKyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDoKKwogMjAxMy0wNS0yMSAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIGZvdXJ0aFRpZXI6IERGRyBzaG91
bGQgYmUgYWJsZSB0byBydW4gb24gYSBzZXBhcmF0ZSB0aHJlYWQKSW5kZXg6IFNvdXJjZS9XVEYv
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUwNTY5KQorKysgU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjMs
MTUgKzIzLDE2IEBACiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCQkwRjBEODVC
NDE3MjM0Q0MxMDAzMzgyMTAgLyogTm9Mb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmgg
Ki87IH07CiAJCTBGODcxMDVBMTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg3MTA1OTE2NjQzRjE5
MDA5MEIwQUQgLyogUmF3UG9pbnRlci5oICovOyB9OwotCQkwRjhGMkI5QzE3MkYyNTk2MDA3REJE
QTUgLyogQ29udmVyc2lvbk1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOEYyQjlCMTcyRjI1OTQwMDdEQkRBNSAvKiBDb252ZXJzaW9uTW9kZS5o
ICovOyB9OwogCQkwRjhGMkI5MTE3MkUwMEZDMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYyQjkw
MTcyRTAwRjAwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5oICovOyB9OwogCQkwRjhGMkI5
MjE3MkUwMTAzMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4RjJCOEYxNzJFMDBGMDAwN0RCREE1
IC8qIENvbXBpbGF0aW9uVGhyZWFkLmNwcCAqLzsgfTsKKwkJMEY4RjJCOUMxNzJGMjU5NjAwN0RC
REE1IC8qIENvbnZlcnNpb25Nb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjhGMkI5QjE3MkYyNTk0MDA3REJEQTUgLyogQ29udmVyc2lvbk1vZGUu
aCAqLzsgfTsKIAkJMEY5RDMzNjAxNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0cmVhbS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzM1
QjE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmNwcCAqLzsgfTsKIAkJMEY5RDMz
NjExNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0cmVhbS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RDMzNUMxNjVEQkE3MzAwNUFEMzg3IC8q
IEZpbGVQcmludFN0cmVhbS5oICovOyB9OwogCQkwRjlEMzM2MjE2NURCQTczMDA1QUQzODcgLyog
UHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY5RDMzNUQxNjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3RyZWFtLmNwcCAqLzsgfTsK
IAkJMEY5RDMzNjMxNjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3RyZWFtLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzM1RTE2NURCQTczMDA1QUQz
ODcgLyogUHJpbnRTdHJlYW0uaCAqLzsgfTsKIAkJMEZDNEVERTYxNjk2MTQ5NjAwRjY1MDQxIC8q
IENvbW1hUHJpbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZDNEVERTUxNjk2MTQ5NjAwRjY1MDQxIC8qIENvbW1hUHJpbnRlci5oICovOyB9Owog
CQkwRkQ4MUFDNTE1NEZCMjJFMDA5ODNFNzIgLyogRmFzdEJpdFZlY3Rvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODFBQzQxNTRGQjIyRTAwOTgz
RTcyIC8qIEZhc3RCaXRWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9
OyB9OworCQkwRkRBOENCQjE3NEVDNTYwMDBGMzA1RUIgLyogQ29uZGl0aW9uYWxMb2NrZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREE4Q0JBMTc0
RUM1NTgwMEYzMDVFQiAvKiBDb25kaXRpb25hbExvY2tlci5oICovOyB9OwogCQkwRkREQkZBNzE2
NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQTUxNjY2REZBMzAwQzU1RkVGIC8q
IFN0cmluZ1ByaW50U3RyZWFtLmNwcCAqLzsgfTsKIAkJMEZEREJGQTgxNjY2REZBMzAwQzU1RkVG
IC8qIFN0cmluZ1ByaW50U3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkREQkZBNjE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJl
YW0uaCAqLzsgfTsKIAkJMTQzRjYxMUYxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzRjYxMUQxNTY1
RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwICovOyB9OwpAQCAtMzM3LDE1ICszMzgsMTYgQEAK
IC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCQkwRjBEODVCMzE3MjM0Q0Ix
MDAzMzgyMTAgLyogTm9Mb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vTG9jay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjg3MTA1OTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSYXdQb2ludGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOEYyQjlCMTcyRjI1OTQwMDdEQkRBNSAvKiBDb252
ZXJzaW9uTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb252ZXJzaW9uTW9kZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjhGMkI4RjE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRp
b25UaHJlYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29tcGlsYXRpb25UaHJlYWQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjhGMkI5MDE3MkUwMEYwMDA3REJEQTUgLyog
Q29tcGlsYXRpb25UaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcGlsYXRpb25UaHJlYWQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY4RjJCOUIxNzJGMjU5NDAwN0RCREE1IC8q
IENvbnZlcnNpb25Nb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnZlcnNpb25Nb2RlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUQzMzVCMTY1REJBNzMwMDVBRDM4NyAvKiBGaWxl
UHJpbnRTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmls
ZVByaW50U3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RDMzNUMx
NjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGaWxlUHJpbnRTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY5RDMzNUQxNjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3RyZWFtLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByaW50U3RyZWFtLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RDMzNUUxNjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3Ry
ZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByaW50U3RyZWFtLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzRFREU1MTY5NjE0OTYwMEY2NTA0MSAvKiBD
b21tYVByaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tbWFQcmlu
dGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgxQUM0MTU0RkIyMkUwMDk4
M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEZhc3RCaXRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQThDQkEx
NzRFQzU1ODAwRjMwNUVCIC8qIENvbmRpdGlvbmFsTG9ja2VyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENv
bmRpdGlvbmFsTG9ja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRERCRkE1
MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJpbmdQcmludFN0cmVhbS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRERCRkE2MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmlu
dFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdQcmludFN0
cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDM0VFNDE3MUI4MzQ3MDBG
REFDOEQgLyogQnl0ZVNwaW5Mb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVTcGluTG9jay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzM2LDYgKzczOCw3IEBACiAJCQkJMEY4RjJC
OTAxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggKi8sCiAJCQkJQThBNDcy
NzAxNTFBODI1QTAwNDEyM0ZGIC8qIENvbXBpbGVyLmggKi8sCiAJCQkJQThBNDcyNzExNTFBODI1
QTAwNDEyM0ZGIC8qIENvbXBsZXguaCAqLywKKwkJCQkwRkRBOENCQTE3NEVDNTU4MDBGMzA1RUIg
LyogQ29uZGl0aW9uYWxMb2NrZXIuaCAqLywKIAkJCQlBOEE0NzI3MzE1MUE4MjVBMDA0MTIzRkYg
LyogQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuY3BwICovLAogCQkJCUE4QTQ3Mjc0MTUx
QTgyNUEwMDQxMjNGRiAvKiBDcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oICovLAogCQkJ
CUE4QTQ3Mjc1MTUxQTgyNUEwMDQxMjNGRiAvKiBDdXJyZW50VGltZS5jcHAgKi8sCkBAIC0xMTg4
LDYgKzExOTEsNyBAQAogCQkJCUYzMjJDQ0UxMTY1NjlBMTAwMDQ4NTJERCAvKiBNZW1vcnlPYmpl
Y3RJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBEODVCNDE3MjM0Q0MxMDAzMzgyMTAgLyog
Tm9Mb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNFQjE1MUE4MjVCMDA0MTIzRkYgLyog
TWVzc2FnZVF1ZXVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkRBOENCQjE3NEVDNTYwMDBGMzA1
RUIgLyogQ29uZGl0aW9uYWxMb2NrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0VEMTUx
QTgyNUIwMDQxMjNGRiAvKiBNZXRhQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0
NzNFRTE1MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQThBNDczRUYxNTFBODI1QjAwNDEyM0ZGIC8qIE5vbmNvcHlhYmxlLmggaW4gSGVh
ZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NvbmRpdGlvbmFsTG9ja2VyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvQ29uZGl0aW9uYWxMb2NrZXIuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XVEYvd3RmL0NvbmRpdGlvbmFsTG9ja2VyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBDb25kaXRpb25hbExvY2tlcl9oCisjZGVmaW5lIENvbmRp
dGlvbmFsTG9ja2VyX2gKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3Bh
Y2UgV1RGIHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIENvbmRpdGlvbmFsTG9ja2Vy
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb25kaXRpb25hbExvY2tlcik7CitwdWJsaWM6
CisgICAgQ29uZGl0aW9uYWxMb2NrZXIoVCogbG9ja2FibGUpIDogbV9sb2NrYWJsZShsb2NrYWJs
ZSkKKyAgICB7CisgICAgICAgIGlmIChtX2xvY2thYmxlKQorICAgICAgICAgICAgbV9sb2NrYWJs
ZS0+bG9jaygpOworICAgIH0KKyAgICB+Q29uZGl0aW9uYWxMb2NrZXIoKQorICAgIHsKKyAgICAg
ICAgaWYgKG1fbG9ja2FibGUpCisgICAgICAgICAgICBtX2xvY2thYmxlLT51bmxvY2soKTsKKyAg
ICB9Citwcml2YXRlOgorICAgIFQqIG1fbG9ja2FibGU7Cit9OworCit9CisKK3VzaW5nIFdURjo6
Q29uZGl0aW9uYWxMb2NrZXI7CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dURi93dGYvRGF0YUxv
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRGF0YUxvZy5jcHAJKHJldmlzaW9u
IDE1MDU2OSkKKysrIFNvdXJjZS9XVEYvd3RmL0RhdGFMb2cuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Niw2ICs1Niw4IEBAIHN0YXRpYyBwdGhyZWFkX29uY2VfdCBpbml0aWFsaXplTG9nRmlsZU8K
IAogc3RhdGljIEZpbGVQcmludFN0cmVhbSogZmlsZTsKIAorc3RhdGljIHVpbnQ2NF90IGZpbGVE
YXRhWyhzaXplb2YoRmlsZVByaW50U3RyZWFtKSArIDcpIC8gOF07CisKIHN0YXRpYyB2b2lkIGlu
aXRpYWxpemVMb2dGaWxlT25jZSgpCiB7CiAjaWYgREFUQV9MT0dfVE9fRklMRQpAQCAtNzgsOCAr
ODAsMTEgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUxvZ0ZpbGVPbmNlKCkKICAgICAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiV2FybmluZzogQ291bGQgbm90IG9wZW4gbG9nIGZpbGUgJXMgZm9y
IHdyaXRpbmcuXG4iLCBhY3R1YWxGaWxlbmFtZSk7CiAgICAgfQogI2VuZGlmIC8vIERBVEFfTE9H
X1RPX0ZJTEUKLSAgICBpZiAoIWZpbGUpCi0gICAgICAgIGZpbGUgPSBuZXcgRmlsZVByaW50U3Ry
ZWFtKHN0ZGVyciwgRmlsZVByaW50U3RyZWFtOjpCb3Jyb3cpOworICAgIGlmICghZmlsZSkgewor
ICAgICAgICAvLyBVc2UgcGxhY2VtZW50IG5ldzsgdGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gdXNl
IGRhdGFMb2coKSB0byBkZWJ1ZworICAgICAgICAvLyBmYXN0TWFsbG9jLgorICAgICAgICBmaWxl
ID0gbmV3IChmaWxlRGF0YSkgRmlsZVByaW50U3RyZWFtKHN0ZGVyciwgRmlsZVByaW50U3RyZWFt
OjpCb3Jyb3cpOworICAgIH0KICAgICAKICAgICBzZXR2YnVmKGZpbGUtPmZpbGUoKSwgMCwgX0lP
TkJGLCAwKTsgLy8gUHJlZmVyIHVuYnVmZmVyZWQgb3V0cHV0LCBzbyB0aGF0IHdlIGdldCBhIGZ1
bGwgbG9nIHVwb24gY3Jhc2ggb3IgZGVhZGxvY2suCiB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9G
YXN0TWFsbG9jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNw
cAkocmV2aXNpb24gMTUwNTY5KQorKysgU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAKICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAjZW5k
aWYKICNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIApA
QCAtNDE2MywxMiArNDE2NCwyMiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQqIG1hbGxvYyhzaXplX3Qp
OwogCiB2b2lkKiBmYXN0TWFsbG9jKHNpemVfdCBzaXplKQogewotICAgIHJldHVybiBtYWxsb2M8
dHJ1ZT4oc2l6ZSk7CisgICAgdm9pZCogcmVzdWx0ID0gbWFsbG9jPHRydWU+KHNpemUpOworI2lm
IEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCisgICAgZGF0YUxvZ0YoImZhc3RNYWxsb2MgYWxs
b2NhdGluZyAlbHUgYnl0ZXMgKGZhc3RNYWxsb2MpOiAlcC5cbiIsIHNpemUsIHJlc3VsdCk7Cisj
ZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBUcnlNYWxsb2NSZXR1cm5WYWx1ZSB0cnlG
YXN0TWFsbG9jKHNpemVfdCBzaXplKQogewotICAgIHJldHVybiBtYWxsb2M8ZmFsc2U+KHNpemUp
OworICAgIFRyeU1hbGxvY1JldHVyblZhbHVlIHJlc3VsdCA9IG1hbGxvYzxmYWxzZT4oc2l6ZSk7
CisjaWYgRU5BQkxFKEFMTE9DQVRJT05fTE9HR0lORykKKyAgICB2b2lkKiBwb2ludGVyOworICAg
ICh2b2lkKXJlc3VsdC5nZXRWYWx1ZShwb2ludGVyKTsKKyAgICBkYXRhTG9nRigiZmFzdE1hbGxv
YyBhbGxvY2F0aW5nICVsdSBieXRlcyAodHJ5RmFzdE1hbGxvYyk6ICVwLlxuIiwgc2l6ZSwgcG9p
bnRlcik7CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB0ZW1wbGF0ZSA8Ym9vbCBj
cmFzaE9uRmFpbHVyZT4KQEAgLTQyMDMsNiArNDIxNCwxMCBAQCB2b2lkKiBtYWxsb2Moc2l6ZV90
IHNpemUpIHsKIGV4dGVybiAiQyIgCiAjZW5kaWYKIHZvaWQgZnJlZSh2b2lkKiBwdHIpIHsKKyNp
ZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgIGRhdGFMb2dGKCJmYXN0RnJlZSBmcmVl
aW5nICVwLlxuIiwgcHRyKTsKKyNlbmRpZgorICAgIAogI2lmbmRlZiBXVEZfQ0hBTkdFUwogICBN
YWxsb2NIb29rOjpJbnZva2VEZWxldGVIb29rKHB0cik7CiAjZW5kaWYKQEAgLTQyMzIsNiArNDI0
Nyw5IEBAIHZvaWQqIGZhc3RDYWxsb2Moc2l6ZV90IG4sIHNpemVfdCBlbGVtX3MKICNpZiBFTkFC
TEUoV1RGX01BTExPQ19WQUxJREFUSU9OKQogICAgIGZhc3RNYWxsb2NWYWxpZGF0ZShyZXN1bHQp
OwogI2VuZGlmCisjaWYgRU5BQkxFKEFMTE9DQVRJT05fTE9HR0lORykKKyAgICBkYXRhTG9nRigi
ZmFzdE1hbGxvYyBjb250aWd1b3VzbHkgYWxsb2NhdGluZyAlbHUgKiAlbHUgYnl0ZXMgKGZhc3RD
YWxsb2MpOiAlcC5cbiIsIG4sIGVsZW1fc2l6ZSwgcmVzdWx0KTsKKyNlbmRpZgogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKQEAgLTQyNDEsNiArNDI1OSw5IEBAIFRyeU1hbGxvY1JldHVyblZhbHVl
IHRyeUZhc3RDYWxsb2Moc2l6ZV8KICNpZiBFTkFCTEUoV1RGX01BTExPQ19WQUxJREFUSU9OKQog
ICAgIGZhc3RNYWxsb2NWYWxpZGF0ZShyZXN1bHQpOwogI2VuZGlmCisjaWYgRU5BQkxFKEFMTE9D
QVRJT05fTE9HR0lORykKKyAgICBkYXRhTG9nRigiZmFzdE1hbGxvYyBjb250aWd1b3VzbHkgYWxs
b2NhdGluZyAlbHUgKiAlbHUgYnl0ZXMgKHRyeUZhc3RDYWxsb2MpOiAlcC5cbiIsIG4sIGVsZW1f
c2l6ZSwgcmVzdWx0KTsKKyNlbmRpZgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTQzMDIs
NiArNDMyMyw5IEBAIHZvaWQqIGZhc3RSZWFsbG9jKHZvaWQqIG9sZF9wdHIsIHNpemVfdCAKICNp
ZiBFTkFCTEUoV1RGX01BTExPQ19WQUxJREFUSU9OKQogICAgIGZhc3RNYWxsb2NWYWxpZGF0ZShy
ZXN1bHQpOwogI2VuZGlmCisjaWYgRU5BQkxFKEFMTE9DQVRJT05fTE9HR0lORykKKyAgICBkYXRh
TG9nRigiZmFzdE1hbGxvYyByZWFsbG9jYXRpbmcgJWx1IGJ5dGVzIChmYXN0UmVhbGxvYyk6ICVw
IC0+ICVwLlxuIiwgbmV3X3NpemUsIG9sZF9wdHIsIHJlc3VsdCk7CisjZW5kaWYKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCkBAIC00MzE0LDYgKzQzMzgsOSBAQCBUcnlNYWxsb2NSZXR1cm5WYWx1
ZSB0cnlGYXN0UmVhbGxvYyh2b2lkCiAjaWYgRU5BQkxFKFdURl9NQUxMT0NfVkFMSURBVElPTikK
ICAgICBmYXN0TWFsbG9jVmFsaWRhdGUocmVzdWx0KTsKICNlbmRpZgorI2lmIEVOQUJMRShBTExP
Q0FUSU9OX0xPR0dJTkcpCisgICAgZGF0YUxvZ0YoImZhc3RNYWxsb2MgcmVhbGxvY2F0aW5nICVs
dSBieXRlcyAodHJ5RmFzdFJlYWxsb2MpOiAlcCAtPiAlcC5cbiIsIG5ld19zaXplLCBvbGRfcHRy
LCByZXN1bHQpOworI2VuZGlmCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNl
L1dURi93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bS5oCShyZXZpc2lvbiAxNTA1NjkpCisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NTgsNiArODU4LDE2IEBACiAjZGVmaW5lIEVOQUJMRV9XUklURV9CQVJS
SUVSX1BST0ZJTElORyAwCiAjZW5kaWYKIAorLyogTG9ncyBhbGwgYWxsb2NhdGlvbi1yZWxhdGVk
IGFjdGl2aXR5IHRoYXQgZ29lcyB0aHJvdWdoIGZhc3RNYWxsb2Mgb3IgdGhlCisgICBKU0MgR0Mg
KGJvdGggY2VsbHMgYW5kIGJ1dHRlcmZsaWVzKS4gQWxzbyBsb2dzIG1hcmtpbmcuIE5vdGUgdGhh
dCB0aGlzCisgICBpc24ndCBhIGNvbXBsZXRlbHkgYWNjdXJhdGUgdmlldyBvZiB0aGUgaGVhcCBz
aW5jZSBpdCBkb2Vzbid0IGluY2x1ZGUgYWxsCisgICBidXR0ZXJmbHkgcmVzaXplIG9wZXJhdGlv
bnMsIGRvZXNuJ3QgdGVsbCB5b3Ugd2hhdCBpcyBnb2luZyBvbiB3aXRoIHdlYWsKKyAgIHJlZmVy
ZW5jZXMgKG90aGVyIHRoYW4gdG8gdGVsbCB5b3Ugd2hlbiB0aGV5J3JlIG1hcmtlZCksIGFuZCBk
b2Vzbid0CisgICB0cmFjayBkaXJlY3QgbW1hcCgpIGFsbG9jYXRpb25zIG9yIHRoaW5ncyBsaWtl
IEpJVCBhbGxvY2F0aW9uLiAqLworI2lmICFkZWZpbmVkKEVOQUJMRV9BTExPQ0FUSU9OX0xPR0dJ
TkcpCisjZGVmaW5lIEVOQUJMRV9BTExPQ0FUSU9OX0xPR0dJTkcgMAorI2VuZGlmCisKIC8qIEVu
YWJsZSB2ZXJpZmljYXRpb24gdGhhdCB0aGF0IHJlZ2lzdGVyIGFsbG9jYXRpb25zIGFyZSBub3Qg
bWFkZSB3aXRoaW4gZ2VuZXJhdGVkIGNvbnRyb2wgZmxvdy4KICAgIFR1cm5lZCBvbiBmb3IgZGVi
dWcgYnVpbGRzLiAqLwogI2lmICFkZWZpbmVkKEVOQUJMRV9ERkdfUkVHSVNURVJfQUxMT0NBVElP
Tl9WQUxJREFUSU9OKSAmJiBFTkFCTEUoREZHX0pJVCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203065</attachid>
            <date>2013-05-28 10:25:03 -0700</date>
            <delta_ts>2013-05-28 11:07:42 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>50974</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUwNzg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBA
CisyMDEzLTA1LTI3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHJlY29yZCBoZWFwIG9wZXJhdGlvbnMgKGJvdGggRmFz
dE1hbGxvYyBhbmQgSlNDIEdDKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTE2ODQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisgICAgICAgIAorICAgICAgICBSZWNvcmQgR0MgaGVhcCBvcGVyYXRpb25zIGlmIEVOQUJMRShB
TExPQ0FUSU9OX0xPR0dJTkcpLgorCisgICAgICAgICogQVBJL0pTTWFuYWdlZFZhbHVlLm1tOgor
ICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3Bw
OgorICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0KToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoK
KyAgICAgICAgKEhlYXApOgorICAgICAgICAoSlNDOjpIZWFwOjphbGxvY2F0ZVdpdGhOb3JtYWxE
ZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWxsb2NhdGVXaXRoSW1tb3J0YWxTdHJ1
Y3R1cmVEZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWxsb2NhdGVXaXRob3V0RGVz
dHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OkhlYXA6OnRyeUFsbG9jYXRlU3RvcmFnZSk6CisgICAg
ICAgIChKU0M6OkhlYXA6OnRyeVJlYWxsb2NhdGVTdG9yYWdlKToKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OmFzY3JpYmVPd25lcik6CisgICAgICAgICogaGVhcC9TbG90Vmlz
aXRvci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphcHBlbmQpOgorICAgICAgICAo
SlNDOjpTbG90VmlzaXRvcjo6aW50ZXJuYWxBcHBlbmQpOgorICAgICAgICAqIGhlYXAvU2xvdFZp
c2l0b3IuaDoKKyAgICAgICAgKFNsb3RWaXNpdG9yKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNp
dG9ySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kKToKKyAgICAg
ICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkUG9pbnRlcik6CisgICAgICAg
IChKU0M6OlNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJpZXJlZFZhbHVlKToKKyAgICAgICAgKEpT
Qzo6U2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkV2Vhayk6CisgICAgICAgIChKU0M6OlNs
b3RWaXNpdG9yOjppbnRlcm5hbEFwcGVuZCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlND
OjpTbG90VmlzaXRvcjo6YXBwZW5kVmFsdWVzKToKKyAgICAgICAgKiBqaXQvSklUV3JpdGVCYXJy
aWVyLmg6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphcHBlbmQpOgorICAgICAgICAqIGxs
aW50L0xMSW50Q29tbW9uLmg6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHkuaDoKKyAgICAg
ICAgKEJ1dHRlcmZseSk6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChK
U0M6OkJ1dHRlcmZseTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93UHJv
cGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJh
eVJpZ2h0KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Z3Jvd0Fy
cmF5UmlnaHQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KToKKyAgICAg
ICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpjcmVhdGVBcnJheUJ1dHRl
cmZseUluRGljdGlvbmFyeUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnVu
c2hpZnRDb3VudFNsb3dDYXNlKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAg
ICAgKEpTQzo6Y3JlYXRlQ29udGlndW91c0FycmF5QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6
Y3JlYXRlQXJyYXlCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFs
aXplZCk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFk
eUV4aXN0cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsSW5kZXhlZFN0
b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhv
dXRDb3B5aW5nRWxlbWVudHMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5jcmVhc2VWZWN0
b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlTGVuZ3RoU2xvdyk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgICog
cnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6SlNPYmplY3QpOgor
ICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5oOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhw
TWF0Y2hlc0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVh
dGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKiBydW50aW1lL1dyaXRlQmFycmllci5oOgorICAgICAgICAoSlNDKToKKwog
MjAxMy0wNS0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIGZv
dXJ0aFRpZXI6IERGRyBBcml0aE1vZCBzaG91bGQgaGF2ZSB0aGUgIW5vZGVVc2VkQXNOdW1iZXIg
b3B0aW1pemF0aW9ucyB0aGF0IEFyaXRoRGl2IGhhcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU01hbmFnZWRWYWx1ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTTWFuYWdlZFZhbHVlLm1tCShyZXZpc2lvbiAxNTA1NjkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTTWFuYWdlZFZhbHVlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSwxMiArMzEsMTIgQEAKIAogI2ltcG9ydCAiQVBJQ2FzdC5oIgogI2ltcG9ydCAiSGVhcC5oIgot
I2ltcG9ydCAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbXBvcnQgIkpTQ29udGV4dEludGVybmFs
LmgiCiAjaW1wb3J0ICJKU1ZhbHVlSW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYWsuaCIKICNpbXBv
cnQgIldlYWtIYW5kbGVPd25lci5oIgogI2ltcG9ydCAiT2JqY1J1bnRpbWVFeHRyYXMuaCIKKyNp
bXBvcnQgIk9wZXJhdGlvbnMuaCIKIAogY2xhc3MgSlNNYW5hZ2VkVmFsdWVIYW5kbGVPd25lciA6
IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE1MDU2OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0NTcsNyArMTQ1Nyw3IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQWxs
b2NhdGVQcm8KICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAK
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oCi0gICAgICAgIEJ1dHRlcmZseTo6
Y3JlYXRlVW5pbml0aWFsaXplZCh2bSwgMCwgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5LCBmYWxz
ZSwgMCkpOworICAgICAgICBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIDAsIDAs
IGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSwgZmFsc2UsIDApKTsKIH0KIAogY2hhciogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMs
IHNpemVfdCBuZXdTaXplKQpAQCAtMTQ2Niw3ICsxNDY2LDcgQEAgY2hhciogREZHX09QRVJBVElP
TiBvcGVyYXRpb25BbGxvY2F0ZVBybwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
JnZtLCBleGVjKTsKIAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPigKLSAgICAg
ICAgQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKHZtLCAwLCBuZXdTaXplLCBmYWxzZSwg
MCkpOworICAgICAgICBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIDAsIDAsIG5l
d1NpemUsIGZhbHNlLCAwKSk7CiB9CiAKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVh
bGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHko
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0KQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE1MDU2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTYsNiArNjk2LDEwIEBAIHN0YXRp
YyBkb3VibGUgbWludXRlID0gNjAuMDsKIAogdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xl
IHN3ZWVwVG9nZ2xlKQogeworI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCisgICAgZGF0
YUxvZ0YoIkpTQyBHQyBzdGFydGluZyBjb2xsZWN0aW9uLlxuIik7CisjZW5kaWYKKyAgICAKICAg
ICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiR2FyYmFnZSBDb2xsZWN0aW9uIik7CiAg
ICAgCiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fZGVmZXJyYWxEZXB0aCk7CkBAIC04MDgsNiArODEy
LDEwIEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKIAogICAgIGlm
IChPcHRpb25zOjpzaG93T2JqZWN0U3RhdGlzdGljcygpKQogICAgICAgICBIZWFwU3RhdGlzdGlj
czo6c2hvd09iamVjdFN0YXRpc3RpY3ModGhpcyk7CisKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9M
T0dHSU5HKQorICAgIGRhdGFMb2dGKCJKU0MgR0MgZmluaXNoaW5nIGNvbGxlY3Rpb24uXG4iKTsK
KyNlbmRpZgogfQogCiBib29sIEhlYXA6OmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTUwNTY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksOCArMTE5
LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9y
Rm9yT2JqZWN0V2l0aE5vcm1hbERlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKSB7IHJldHVybiBtX29i
amVjdFNwYWNlLm5vcm1hbERlc3RydWN0b3JBbGxvY2F0b3JGb3IoYnl0ZXMpOyB9CiAgICAgICAg
IE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yRm9yT2JqZWN0V2l0aEltbW9ydGFsU3RydWN0dXJl
RGVzdHJ1Y3RvcihzaXplX3QgYnl0ZXMpIHsgcmV0dXJuIG1fb2JqZWN0U3BhY2UuaW1tb3J0YWxT
dHJ1Y3R1cmVEZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGJ5dGVzKTsgfQogICAgICAgICBDb3BpZWRB
bGxvY2F0b3ImIHN0b3JhZ2VBbGxvY2F0b3IoKSB7IHJldHVybiBtX3N0b3JhZ2VTcGFjZS5hbGxv
Y2F0b3IoKTsgfQotICAgICAgICBDaGVja2VkQm9vbGVhbiB0cnlBbGxvY2F0ZVN0b3JhZ2Uoc2l6
ZV90LCB2b2lkKiopOwotICAgICAgICBDaGVja2VkQm9vbGVhbiB0cnlSZWFsbG9jYXRlU3RvcmFn
ZSh2b2lkKiosIHNpemVfdCwgc2l6ZV90KTsKKyAgICAgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5QWxs
b2NhdGVTdG9yYWdlKEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90LCB2b2lkKiopOworICAg
ICAgICBDaGVja2VkQm9vbGVhbiB0cnlSZWFsbG9jYXRlU3RvcmFnZShKU0NlbGwqIGludGVuZGVk
T3duZXIsIHZvaWQqKiwgc2l6ZV90LCBzaXplX3QpOworICAgICAgICB2b2lkIGFzY3JpYmVPd25l
cihKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqKTsKIAogICAgICAgICB0eXBlZGVmIHZvaWQg
KCpGaW5hbGl6ZXIpKEpTQ2VsbCopOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFk
ZEZpbmFsaXplcihKU0NlbGwqLCBGaW5hbGl6ZXIpOwpAQCAtMzgyLDMwICszODMsNjQgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVXaXRoTm9ybWFs
RGVzdHJ1Y3RvcihzaXplX3QgYnl0ZXMpCiAgICAgeworI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xP
R0dJTkcpCisgICAgICAgIGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGluZyAlbHUgYnl0ZXMgd2l0
aCBub3JtYWwgZGVzdHJ1Y3Rvci5cbiIsIGJ5dGVzKTsKKyNlbmRpZgogICAgICAgICBBU1NFUlQo
aXNWYWxpZEFsbG9jYXRpb24oYnl0ZXMpKTsKICAgICAgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uu
YWxsb2NhdGVXaXRoTm9ybWFsRGVzdHJ1Y3RvcihieXRlcyk7CiAgICAgfQogICAgIAogICAgIGlu
bGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZVdpdGhJbW1vcnRhbFN0cnVjdHVyZURlc3RydWN0b3Io
c2l6ZV90IGJ5dGVzKQogICAgIHsKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAg
ICAgICBkYXRhTG9nRigiSlNDIEdDIGFsbG9jYXRpbmcgJWx1IGJ5dGVzIHdpdGggaW1tb3J0YWwg
c3RydWN0dXJlIGRlc3RydWN0b3IuXG4iLCBieXRlcyk7CisjZW5kaWYKICAgICAgICAgQVNTRVJU
KGlzVmFsaWRBbGxvY2F0aW9uKGJ5dGVzKSk7CiAgICAgICAgIHJldHVybiBtX29iamVjdFNwYWNl
LmFsbG9jYXRlV2l0aEltbW9ydGFsU3RydWN0dXJlRGVzdHJ1Y3RvcihieXRlcyk7CiAgICAgfQog
ICAgIAogICAgIGlubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKHNp
emVfdCBieXRlcykKICAgICB7CisjaWYgRU5BQkxFKEFMTE9DQVRJT05fTE9HR0lORykKKyAgICAg
ICAgZGF0YUxvZ0YoIkpTQyBHQyBhbGxvY2F0aW5nICVsdSBieXRlcyB3aXRob3V0IGRlc3RydWN0
b3IuXG4iLCBieXRlcyk7CisjZW5kaWYKICAgICAgICAgQVNTRVJUKGlzVmFsaWRBbGxvY2F0aW9u
KGJ5dGVzKSk7CiAgICAgICAgIHJldHVybiBtX29iamVjdFNwYWNlLmFsbG9jYXRlV2l0aG91dERl
c3RydWN0b3IoYnl0ZXMpOwogICAgIH0KICAgIAotICAgIGlubGluZSBDaGVja2VkQm9vbGVhbiBI
ZWFwOjp0cnlBbGxvY2F0ZVN0b3JhZ2Uoc2l6ZV90IGJ5dGVzLCB2b2lkKiogb3V0UHRyKQorICAg
IGlubGluZSBDaGVja2VkQm9vbGVhbiBIZWFwOjp0cnlBbGxvY2F0ZVN0b3JhZ2UoSlNDZWxsKiBp
bnRlbmRlZE93bmVyLCBzaXplX3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpCiAgICAgewotICAgICAg
ICByZXR1cm4gbV9zdG9yYWdlU3BhY2UudHJ5QWxsb2NhdGUoYnl0ZXMsIG91dFB0cik7CisgICAg
ICAgIENoZWNrZWRCb29sZWFuIHJlc3VsdCA9IG1fc3RvcmFnZVNwYWNlLnRyeUFsbG9jYXRlKGJ5
dGVzLCBvdXRQdHIpOworI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCisgICAgICAgIGRh
dGFMb2dGKCJKU0MgR0MgYWxsb2NhdGluZyAlbHUgYnl0ZXMgb2Ygc3RvcmFnZSBmb3IgJXA6ICVw
LlxuIiwgYnl0ZXMsIGludGVuZGVkT3duZXIsICpvdXRQdHIpOworI2Vsc2UKKyAgICAgICAgVU5V
U0VEX1BBUkFNKGludGVuZGVkT3duZXIpOworI2VuZGlmCisgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogICAgIAotICAgIGlubGluZSBDaGVja2VkQm9vbGVhbiBIZWFwOjp0cnlSZWFsbG9j
YXRlU3RvcmFnZSh2b2lkKiogcHRyLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCisg
ICAgaW5saW5lIENoZWNrZWRCb29sZWFuIEhlYXA6OnRyeVJlYWxsb2NhdGVTdG9yYWdlKEpTQ2Vs
bCogaW50ZW5kZWRPd25lciwgdm9pZCoqIHB0ciwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdT
aXplKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc3RvcmFnZVNwYWNlLnRyeVJlYWxsb2NhdGUo
cHRyLCBvbGRTaXplLCBuZXdTaXplKTsKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQor
ICAgICAgICB2b2lkKiBvbGRQdHIgPSAqcHRyOworI2VuZGlmCisgICAgICAgIENoZWNrZWRCb29s
ZWFuIHJlc3VsdCA9IG1fc3RvcmFnZVNwYWNlLnRyeVJlYWxsb2NhdGUocHRyLCBvbGRTaXplLCBu
ZXdTaXplKTsKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgICAgICBkYXRhTG9n
RigiSlNDIEdDIHJlYWxsb2NhdGluZyAlbHUgLT4gJWx1IGJ5dGVzIG9mIHN0b3JhZ2UgZm9yICVw
OiAlcCAtPiAlcC5cbiIsIG9sZFNpemUsIG5ld1NpemUsIGludGVuZGVkT3duZXIsIG9sZFB0ciwg
KnB0cik7CisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0oaW50ZW5kZWRPd25lcik7CisjZW5k
aWYKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBpbmxpbmUgdm9pZCBIZWFw
Ojphc2NyaWJlT3duZXIoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKiBzdG9yYWdlKQorICAg
IHsKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgICAgICBkYXRhTG9nRigiSlND
IEdDIGFzY3JpYmluZyAlcCBhcyBvd25lciBvZiBzdG9yYWdlICVwLlxuIiwgaW50ZW5kZWRPd25l
ciwgc3RvcmFnZSk7CisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0oaW50ZW5kZWRPd25lcik7
CisgICAgICAgIFVOVVNFRF9QQVJBTShzdG9yYWdlKTsKKyNlbmRpZgogICAgIH0KIAogICAgIGlu
bGluZSBCbG9ja0FsbG9jYXRvciYgSGVhcDo6YmxvY2tBbGxvY2F0b3IoKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMTUwNTY5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChDb25zZXJ2YXRp
dmVSb28KICAgICBKU0NlbGwqKiByb290cyA9IGNvbnNlcnZhdGl2ZVJvb3RzLnJvb3RzKCk7CiAg
ICAgc2l6ZV90IHNpemUgPSBjb25zZXJ2YXRpdmVSb290cy5zaXplKCk7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIGludGVybmFsQXBwZW5kKHJvb3RzW2ld
KTsKKyAgICAgICAgaW50ZXJuYWxBcHBlbmQoMCwgcm9vdHNbaV0pOwogfQogCiBBTFdBWVNfSU5M
SU5FIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IEpTQ2VsbCogY2VsbCkKQEAgLTI3OSw3ICsyNzksNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNT
dHJpbmc6OnNob3VsZFRyeUhhCiAgICAgcmV0dXJuICgobGVuZ3RoKCkgPiAxKSAmJiAhaXNSb3Bl
KCkgJiYgIWlzSGFzaENvbnNTaW5nbGV0b24oKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBT
bG90VmlzaXRvcjo6aW50ZXJuYWxBcHBlbmQoSlNWYWx1ZSogc2xvdCkKK0FMV0FZU19JTkxJTkUg
dm9pZCBTbG90VmlzaXRvcjo6aW50ZXJuYWxBcHBlbmQodm9pZCogZnJvbSwgSlNWYWx1ZSogc2xv
dCkKIHsKICAgICAvLyBUaGlzIGludGVybmFsQXBwZW5kIGlzIG9ubHkgaW50ZW5kZWQgZm9yIHZp
c2l0cyB0byBvYmplY3QgYW5kIGFycmF5IGJhY2tpbmcgc3RvcmVzLgogICAgIC8vIGFzIGl0IGNh
biBjaGFuZ2UgdGhlIEpTVmFsdWUgcG9pbnRlZCB0byBiZSB0aGUgYXJndW1lbnQgd2hlbiB0aGUg
b3JpZ2luYWwgSlNWYWx1ZQpAQCAtMzE2LDcgKzMxNiw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBT
bG90VmlzaXRvcjo6aW50ZXJuYWwKICAgICAgICAgfQogICAgIH0KIAotICAgIGludGVybmFsQXBw
ZW5kKGNlbGwpOworICAgIGludGVybmFsQXBwZW5kKGZyb20sIGNlbGwpOwogfQogCiB2b2lkIFNs
b3RWaXNpdG9yOjpoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAxNTA1NjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xMDUsMTAgKzEwNSwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgYXBwZW5kKEpTVmFsdWUqKTsK
ICAgICB2b2lkIGFwcGVuZChKU1ZhbHVlKiwgc2l6ZV90IGNvdW50KTsKICAgICB2b2lkIGFwcGVu
ZChKU0NlbGwqKik7Ci0KLSAgICB2b2lkIGludGVybmFsQXBwZW5kKEpTQ2VsbCopOwotICAgIHZv
aWQgaW50ZXJuYWxBcHBlbmQoSlNWYWx1ZSk7Ci0gICAgdm9pZCBpbnRlcm5hbEFwcGVuZChKU1Zh
bHVlKik7CisgICAgCisgICAgdm9pZCBpbnRlcm5hbEFwcGVuZCh2b2lkKiBmcm9tLCBKU0NlbGwq
KTsKKyAgICB2b2lkIGludGVybmFsQXBwZW5kKHZvaWQqIGZyb20sIEpTVmFsdWUpOworICAgIHZv
aWQgaW50ZXJuYWxBcHBlbmQodm9pZCogZnJvbSwgSlNWYWx1ZSopOwogICAgIAogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgbWVyZ2VPcGFxdWVSb290cygpOwogICAgIHZvaWQgbWVyZ2VPcGFx
dWVSb290c0lmTmVjZXNzYXJ5KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMTUwNTY5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4
LDcgKzM4LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoSgogewog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICBKU1ZhbHVl
JiB2YWx1ZSA9IHNsb3RbaV07Ci0gICAgICAgIGludGVybmFsQXBwZW5kKHZhbHVlKTsKKyAgICAg
ICAgaW50ZXJuYWxBcHBlbmQoJnZhbHVlLCB2YWx1ZSk7CiAgICAgfQogfQogCkBAIC00NywyNSAr
NDcsMjUgQEAgaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcgogewogICAg
IEFTU0VSVChzbG90KTsKICAgICBKU0NlbGwqIGNlbGwgPSAqc2xvdDsKLSAgICBpbnRlcm5hbEFw
cGVuZChjZWxsKTsKKyAgICBpbnRlcm5hbEFwcGVuZChzbG90LCBjZWxsKTsKIH0KIAogQUxXQVlT
X0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoSlNWYWx1ZSogc2xvdCkKIHsKICAgICBB
U1NFUlQoc2xvdCk7Ci0gICAgaW50ZXJuYWxBcHBlbmQoKnNsb3QpOworICAgIGludGVybmFsQXBw
ZW5kKHNsb3QsICpzbG90KTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjph
cHBlbmRVbmJhcnJpZXJlZFZhbHVlKEpTVmFsdWUqIHNsb3QpCiB7CiAgICAgQVNTRVJUKHNsb3Qp
OwotICAgIGludGVybmFsQXBwZW5kKCpzbG90KTsKKyAgICBpbnRlcm5hbEFwcGVuZChzbG90LCAq
c2xvdCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKEpTQ2Vs
bCoqIHNsb3QpCiB7CiAgICAgQVNTRVJUKHNsb3QpOwotICAgIGludGVybmFsQXBwZW5kKCpzbG90
KTsKKyAgICBpbnRlcm5hbEFwcGVuZChzbG90LCAqc2xvdCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CkBAIC03MywxNCArNzMsNTAgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9y
OjphcHBlbmRVbgogewogICAgIEFTU0VSVCh3ZWFrKTsKICAgICBpZiAod2Vhay0+Z2V0KCkpCi0g
ICAgICAgIGludGVybmFsQXBwZW5kKHdlYWstPmdldCgpKTsKKyAgICAgICAgaW50ZXJuYWxBcHBl
bmQoMCwgd2Vhay0+Z2V0KCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6
OmludGVybmFsQXBwZW5kKEpTVmFsdWUgdmFsdWUpCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZp
c2l0b3I6OmludGVybmFsQXBwZW5kKHZvaWQqIGZyb20sIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAg
aWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpbnRl
cm5hbEFwcGVuZCh2YWx1ZS5hc0NlbGwoKSk7CisgICAgaW50ZXJuYWxBcHBlbmQoZnJvbSwgdmFs
dWUuYXNDZWxsKCkpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmludGVy
bmFsQXBwZW5kKHZvaWQqIGZyb20sIEpTQ2VsbCogY2VsbCkKK3sKKyAgICBBU1NFUlQoIW1faXND
aGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uKTsKKyAgICBpZiAoIWNlbGwpCisgICAgICAg
IHJldHVybjsKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgIGRhdGFMb2dGKCJK
U0MgR0Mgbm90aWNpbmcgcmVmZXJlbmNlIGZyb20gJXAgdG8gJXAuXG4iLCBmcm9tLCBjZWxsKTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGZyb20pOworI2VuZGlmCisjaWYgRU5BQkxFKEdDX1ZB
TElEQVRJT04pCisgICAgdmFsaWRhdGUoY2VsbCk7CisjZW5kaWYKKyAgICBpZiAoSGVhcDo6dGVz
dEFuZFNldE1hcmtlZChjZWxsKSB8fCAhY2VsbC0+c3RydWN0dXJlKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fdmlzaXRDb3VudCsrOworICAgICAgICAKKyAgICBNQVJLX0xPR19DSElMRCgq
dGhpcywgY2VsbCk7CisKKyAgICAvLyBTaG91bGQgbmV2ZXIgYXR0ZW1wdCB0byBtYXJrIHNvbWV0
aGluZyB0aGF0IGlzIHphcHBlZC4KKyAgICBBU1NFUlQoIWNlbGwtPmlzWmFwcGVkKCkpOworICAg
ICAgICAKKyAgICBtX3N0YWNrLmFwcGVuZChjZWxsKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChXcml0ZUJhcnJpZXJCYXNlPFQ+KiBz
bG90KQoreworICAgIGludGVybmFsQXBwZW5kKHNsb3QsICpzbG90LT5zbG90KCkpOworfQorCitB
TFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFZhbHVlcyhXcml0ZUJhcnJpZXJC
YXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6ZV90IGNvdW50KQoreworICAgIGFwcGVuZChiYXJy
aWVycy0+c2xvdCgpLCBjb3VudCk7CiB9CiAKIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphZGRX
ZWFrUmVmZXJlbmNlSGFydmVzdGVyKFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIqIHdlYWtSZWZlcmVu
Y2VIYXJ2ZXN0ZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdyaXRlQmFy
cmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV3JpdGVC
YXJyaWVyLmgJKHJldmlzaW9uIDE1MDU2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUV3JpdGVCYXJyaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw3ICsxMzcsNyBAQCBwdWJs
aWM6CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphcHBl
bmQoSklUV3JpdGVCYXJyaWVyPFQ+KiBzbG90KQogewotICAgIGludGVybmFsQXBwZW5kKHNsb3Qt
PmdldCgpKTsKKyAgICBpbnRlcm5hbEFwcGVuZCgwLCBzbG90LT5nZXQoKSk7CiB9CiAKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludENvbW1vbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludENvbW1vbi5oCShyZXZpc2lvbiAx
NTA1NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRDb21tb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzQsNyArMzQsMTEgQEAKIAogLy8gRGlzYWJsZSBpbmxpbmUgYWxsb2NhdGlv
biBpbiB0aGUgaW50ZXJwcmV0ZXIuIFRoaXMgaXMgZ3JlYXQgaWYgeW91J3JlIGNoYW5naW5nCiAv
LyBob3cgdGhlIEdDIGFsbG9jYXRlcy4KKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQor
I2RlZmluZSBMTElOVF9BTFdBWVNfQUxMT0NBVEVfU0xPVyAxCisjZWxzZQogI2RlZmluZSBMTElO
VF9BTFdBWVNfQUxMT0NBVEVfU0xPVyAwCisjZW5kaWYKIAogLy8gRGlzYWJsZSBpbmxpbmUgY2Fj
aGluZyBvZiBnZXRfYnlfaWQgYW5kIHB1dF9ieV9pZC4KICNkZWZpbmUgTExJTlRfQUxXQVlTX0FD
Q0VTU19TTE9XIDAKQEAgLTQyLDcgKzQ2LDcgQEAKIC8vIEVuYWJsZSBPU1IgaW50byB0aGUgSklU
LiBEaXNhYmxpbmcgdGhpcyB3aGlsZSB0aGUgTExJbnQgaXMgZW5hYmxlZCBlZmZlY3RpdmVseQog
Ly8gdHVybnMgb2ZmIGFsbCBKSVQnaW5nLCBzaW5jZSBpbiBMTEludCdzIHBhcmxhbmNlLCBPU1Ig
c3Vic3VtZXMgYW55IGZvcm0gb2YgSklUCiAvLyBpbnZvY2F0aW9uLgotI2lmIEVOQUJMRShKSVQp
CisjaWYgRU5BQkxFKEpJVCkgJiYgIUVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCiAjZGVmaW5l
IExMSU5UX09TUl9UT19KSVQgMQogI2Vsc2UKICNkZWZpbmUgTExJTlRfT1NSX1RPX0pJVCAwCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAkocmV2aXNpb24g
MTUwNTY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwNCwxMCArMTA0LDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mUHVibGljTGVuZ3RoKCkgeyByZXR1cm4gb2Zmc2V0T2ZJbmRleGluZ0hl
YWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mUHVibGljTGVuZ3RoKCk7IH0KICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVmVjdG9yTGVuZ3RoKCkgeyByZXR1cm4gb2Zmc2V0T2ZJ
bmRleGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCk7
IH0KICAgICAKLSAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGVVbmluaXRpYWxpemVkKFZNJiwg
c2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRl
eGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBzdGF0
aWMgQnV0dGVyZmx5KiBjcmVhdGVVbmluaXRpYWxpemVkKFZNJiwgSlNDZWxsKiBpbnRlbmRlZE93
bmVyLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhh
c0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogCi0g
ICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlKFZNJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXpl
X3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgY29uc3QgSW5kZXhp
bmdIZWFkZXImLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIHN0YXRp
YyBCdXR0ZXJmbHkqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBCdXR0ZXJm
bHkqIGNyZWF0ZShWTSYsIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90IHByZUNhcGFjaXR5
LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgY29uc3Qg
SW5kZXhpbmdIZWFkZXImLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAg
IHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZShWTSYsIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgU3Ry
dWN0dXJlKik7CiAgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlVW5pbml0aWFsaXplZER1cmlu
Z0NvbGxlY3Rpb24oQ29weVZpc2l0b3ImLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9w
ZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpOwogICAgIAogICAgIEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRl
cigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9CkBAIC0xNDcsMjAgKzE0
NywyMyBAQCBwdWJsaWM6CiAgICAgdm9pZCogYmFzZShzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVf
dCBwcm9wZXJ0eUNhcGFjaXR5KSB7IHJldHVybiBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5
Q2FwYWNpdHkgLSBwcmVDYXBhY2l0eTsgfQogICAgIHZvaWQqIGJhc2UoU3RydWN0dXJlKik7CiAK
LSAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGVPckdyb3dBcnJheVJpZ2h0KEJ1dHRlcmZseSos
IFZNJiwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBi
b29sIGhhZEluZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7IAorICAgIHN0YXRpYyBC
dXR0ZXJmbHkqIGNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCisgICAgICAgIEJ1dHRlcmZseSosIFZN
JiwgSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwKKyAgICAg
ICAgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFkSW5kZXhpbmdIZWFkZXIsCisgICAg
ICAgIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld0luZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsgCiAKICAgICAvLyBUaGUgYnV0dGVyZmx5IHJlYWxsb2Nh
dGlvbiBtZXRob2RzIHBlcmZvcm0gdGhlIHJlYWxsb2NhdGlvbiBpdHNlbGYgYnV0IGRvIG5vdCBj
aGFuZ2UgYW55CiAgICAgLy8gb2YgdGhlIG1ldGEtZGF0YSB0byByZWZsZWN0IHRoYXQgdGhlIHJl
YWxsb2NhdGlvbiBvY2N1cnJlZC4gTm90ZSB0aGF0IHRoaXMgc2V0IG9mCiAgICAgLy8gbWV0aG9k
cyBpcyBub3QgZXhoYXVzdGl2ZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGVuY2Fwc3VsYXRlIGFs
bCBwb3NzaWJsZSBhbGxvY2F0aW9uCiAgICAgLy8gbW9kZXMgb2YgYnV0dGVyZmxpZXMgLSB0aGVy
ZSBhcmUgY29kZSBwYXRocyB0aGF0IGFsbG9jYXRlIGJ1dHRlcmZsaWVzIGJ5IGNhbGxpbmcKICAg
ICAvLyBkaXJlY3RseSBpbnRvIEhlYXA6OnRyeUFsbG9jYXRlU3RvcmFnZS4KLSAgICBCdXR0ZXJm
bHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoVk0mLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBv
bGRQcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKLSAgICBC
dXR0ZXJmbHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoVk0mLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVy
ZSwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5
KTsKLSAgICBCdXR0ZXJmbHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoVk0mLCBTdHJ1Y3R1cmUqIG9s
ZFN0cnVjdHVyZSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpOwotICAgIEJ1dHRlcmZseSog
Z3Jvd0FycmF5UmlnaHQoVk0mLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IHByb3Bl
cnR5Q2FwYWNpdHksIGJvb2wgaGFkSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsg
Ly8gQXNzdW1lcyB0aGF0IHByZUNhcGFjaXR5IGlzIHplcm8sIGFuZCBhc3NlcnRzIGFzIG11Y2gu
Ci0gICAgQnV0dGVyZmx5KiBncm93QXJyYXlSaWdodChWTSYsIFN0cnVjdHVyZSosIHNpemVfdCBu
ZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgQnV0dGVyZmx5KiByZXNpemVBcnJh
eShWTSYsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIG9sZEhhc0luZGV4aW5nSGVhZGVy
LCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcmVDYXBh
Y2l0eSwgYm9vbCBuZXdIYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKTsKLSAgICBCdXR0ZXJmbHkqIHJlc2l6ZUFycmF5KFZNJiwgU3RydWN0dXJl
Kiwgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpOyAvLyBBc3N1bWVzIHRoYXQgeW91J3JlIG5vdCBjaGFuZ2luZyB3aGV0aGVyIG9yIG5v
dCB0aGUgb2JqZWN0IGhhcyBhbiBpbmRleGluZyBoZWFkZXIuCisgICAgQnV0dGVyZmx5KiBncm93
UHJvcGVydHlTdG9yYWdlKFZNJiwgSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QgcHJlQ2Fw
YWNpdHksIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVy
LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcm9wZXJ0eUNh
cGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoVk0mLCBKU0NlbGwq
IGludGVuZGVkT3duZXIsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3Qgb2xkUHJvcGVy
dHlDYXBhY2l0eSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSog
Z3Jvd1Byb3BlcnR5U3RvcmFnZShWTSYsIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgU3RydWN0dXJl
KiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJm
bHkqIGdyb3dBcnJheVJpZ2h0KFZNJiwgSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBTdHJ1Y3R1cmUq
IG9sZFN0cnVjdHVyZSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFkSW5kZXhpbmdI
ZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld0lu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsgLy8gQXNzdW1lcyB0aGF0IHByZUNhcGFjaXR5IGlz
IHplcm8sIGFuZCBhc3NlcnRzIGFzIG11Y2guCisgICAgQnV0dGVyZmx5KiBncm93QXJyYXlSaWdo
dChWTSYsIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgU3RydWN0dXJlKiwgc2l6ZV90IG5ld0luZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBCdXR0ZXJmbHkqIHJlc2l6ZUFycmF5KFZNJiwg
SlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBvbGRI
YXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBz
aXplX3QgbmV3UHJlQ2FwYWNpdHksIGJvb2wgbmV3SGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBu
ZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgQnV0dGVyZmx5KiByZXNpemVBcnJh
eShWTSYsIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgU3RydWN0dXJlKiwgc2l6ZV90IG5ld1ByZUNh
cGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOyAvLyBBc3N1bWVz
IHRoYXQgeW91J3JlIG5vdCBjaGFuZ2luZyB3aGV0aGVyIG9yIG5vdCB0aGUgb2JqZWN0IGhhcyBh
biBpbmRleGluZyBoZWFkZXIuCiAgICAgQnV0dGVyZmx5KiB1bnNoaWZ0KFN0cnVjdHVyZSosIHNp
emVfdCBudW1iZXJPZlNsb3RzKTsKICAgICBCdXR0ZXJmbHkqIHNoaWZ0KFN0cnVjdHVyZSosIHNp
emVfdCBudW1iZXJPZlNsb3RzKTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCShyZXZpc2lvbiAxNTA1NjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDI3ICszNSwzMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIEJ1dHRl
cmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKFZNJiB2bSwgc2l6ZV90IHByZUNh
cGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwg
c2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoraW5saW5lIEJ1dHRlcmZseSogQnV0
dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKFZNJiB2bSwgSlNDZWxsKiBpbnRlbmRlZE93bmVy
LCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0lu
ZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7CiAgICAg
dm9pZCogdGVtcDsKICAgICBzaXplX3Qgc2l6ZSA9IHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJv
cGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKTsKLSAgICBSRUxFQVNFX0FTU0VSVCh2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzaXpl
LCAmdGVtcCkpOworICAgIFJFTEVBU0VfQVNTRVJUKHZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdl
KGludGVuZGVkT3duZXIsIHNpemUsICZ0ZW1wKSk7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBm
cm9tQmFzZSh0ZW1wLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUoVk0mIHZt
LCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0lu
ZGV4aW5nSGVhZGVyLCBjb25zdCBJbmRleGluZ0hlYWRlciYgaW5kZXhpbmdIZWFkZXIsIHNpemVf
dCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZs
eTo6Y3JlYXRlKFZNJiB2bSwgSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QgcHJlQ2FwYWNp
dHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBjb25z
dCBJbmRleGluZ0hlYWRlciYgaW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcykKIHsKICAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6
ZWQoCi0gICAgICAgIHZtLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhp
bmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAgICAgdm0sIGludGVu
ZGVkT3duZXIsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRl
ciwKKyAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogICAgIGlmIChoYXNJbmRl
eGluZ0hlYWRlcikKICAgICAgICAgKnJlc3VsdC0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5n
SGVhZGVyOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRl
cmZseTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitpbmxpbmUgQnV0dGVy
Zmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZShWTSYgdm0sIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZSh2bSwgMCwgc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKSwgSW5kZXhpbmdIZWFkZXIoKSwgMCk7CisgICAgcmV0dXJuIGNyZWF0ZSgKKyAg
ICAgICAgdm0sIGludGVuZGVkT3duZXIsIDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSwKKyAgICAgICAgaGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSks
IEluZGV4aW5nSGVhZGVyKCksIDApOwogfQogCiBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKENvcHlWaXNpdG9yJiB2aXNpdG9y
LCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0lu
ZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCkBAIC03Miwx
MSArNzUsMTQgQEAgaW5saW5lIHZvaWQqIEJ1dHRlcmZseTo6YmFzZShTdHJ1Y3R1cmUqIAogICAg
IHJldHVybiBiYXNlKGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSksIHN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiB9CiAKLWlubGluZSBCdXR0ZXJmbHkqIEJ1
dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShWTSYgdm0sIHNpemVfdCBwcmVDYXBhY2l0eSwg
c2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVf
dCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkp
CitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoCisgICAg
Vk0mIHZtLCBKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90
IG9sZFByb3BlcnR5Q2FwYWNpdHksCisgICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90
IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkK
IHsKICAgICBSRUxFQVNFX0FTU0VSVChuZXdQcm9wZXJ0eUNhcGFjaXR5ID4gb2xkUHJvcGVydHlD
YXBhY2l0eSk7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKAot
ICAgICAgICB2bSwgcHJlQ2FwYWNpdHksIG5ld1Byb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5n
SGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgICAgIHZtLCBpbnRlbmRl
ZE93bmVyLCBwcmVDYXBhY2l0eSwgbmV3UHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFk
ZXIsCisgICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKICAgICBtZW1jcHkoCiAg
ICAgICAgIHJlc3VsdC0+cHJvcGVydHlTdG9yYWdlKCkgLSBvbGRQcm9wZXJ0eUNhcGFjaXR5LAog
ICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIG9sZFByb3BlcnR5Q2FwYWNpdHksCkBAIC04NCw1
MSArOTAsNzIgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93UHJvcGVydAogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd1By
b3BlcnR5U3RvcmFnZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qgb2xkUHJv
cGVydHlDYXBhY2l0eSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCitpbmxpbmUgQnV0dGVy
Zmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoCisgICAgVk0mIHZtLCBKU0NlbGwq
IGludGVuZGVkT3duZXIsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qgb2xkUHJvcGVydHlD
YXBhY2l0eSwKKyAgICBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKIHsKICAgICByZXR1cm4g
Z3Jvd1Byb3BlcnR5U3RvcmFnZSgKLSAgICAgICAgdm0sIGluZGV4aW5nSGVhZGVyKCktPnByZUNh
cGFjaXR5KHN0cnVjdHVyZSksIG9sZFByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgIHZtLCBpbnRl
bmRlZE93bmVyLCBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBvbGRQ
cm9wZXJ0eUNhcGFjaXR5LAogICAgICAgICBoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpKSwKICAgICAgICAgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMoc3RydWN0dXJlKSwgbmV3UHJvcGVydHlDYXBhY2l0eSk7CiB9CiAKLWlubGlu
ZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShWTSYgdm0sIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKK2lubGluZSBC
dXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZSgKKyAgICBWTSYgdm0sIEpT
Q2VsbCogaW50ZW5kZWRPd25lciwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBuZXdQ
cm9wZXJ0eUNhcGFjaXR5KQogewogICAgIHJldHVybiBncm93UHJvcGVydHlTdG9yYWdlKAotICAg
ICAgICB2bSwgb2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCks
IG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworICAgICAgICB2bSwgaW50ZW5kZWRPd25lciwgb2xkU3Ry
dWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksCisgICAgICAgIG5ld1By
b3BlcnR5Q2FwYWNpdHkpOwogfQogCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0
ZU9yR3Jvd0FycmF5UmlnaHQoQnV0dGVyZmx5KiBvbGRCdXR0ZXJmbHksIFZNJiB2bSwgU3RydWN0
dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhZEluZGV4
aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBu
ZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKLXsKLSAgICBpZiAoIW9sZEJ1dHRlcmZseSkK
LSAgICAgICAgcmV0dXJuIGNyZWF0ZSh2bSwgMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgSW5k
ZXhpbmdIZWFkZXIoKSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIHJldHVy
biBvbGRCdXR0ZXJmbHktPmdyb3dBcnJheVJpZ2h0KHZtLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5
Q2FwYWNpdHksIGhhZEluZGV4aW5nSGVhZGVyLCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cywgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotfQotCi1pbmxpbmUgQnV0dGVyZmx5
KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KFZNJiB2bSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1
cmUsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhZEluZGV4aW5nSGVhZGVyLCBzaXpl
X3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcykKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93
QXJyYXlSaWdodCgKKyAgICBCdXR0ZXJmbHkqIG9sZEJ1dHRlcmZseSwgVk0mIHZtLCBKU0NlbGwq
IGludGVuZGVkT3duZXIsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAorICAgIHNpemVfdCBwcm9w
ZXJ0eUNhcGFjaXR5LCBib29sIGhhZEluZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMsCisgICAgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKQoreworICAgIGlmICghb2xkQnV0dGVyZmx5KSB7CisgICAgICAgIHJldHVybiBjcmVhdGUo
CisgICAgICAgICAgICB2bSwgaW50ZW5kZWRPd25lciwgMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1
ZSwgSW5kZXhpbmdIZWFkZXIoKSwKKyAgICAgICAgICAgIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKTsKKyAgICB9CisgICAgcmV0dXJuIG9sZEJ1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQo
CisgICAgICAgIHZtLCBpbnRlbmRlZE93bmVyLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5Q2FwYWNp
dHksIGhhZEluZGV4aW5nSGVhZGVyLAorICAgICAgICBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcywgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworfQorCitpbmxpbmUgQnV0dGVy
Zmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KAorICAgIFZNJiB2bSwgSlNDZWxsKiBpbnRl
bmRlZE93bmVyLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNp
dHksCisgICAgYm9vbCBoYWRJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzLAorICAgIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykK
IHsKICAgICBBU1NFUlRfVU5VU0VEKG9sZFN0cnVjdHVyZSwgIWluZGV4aW5nSGVhZGVyKCktPnBy
ZUNhcGFjaXR5KG9sZFN0cnVjdHVyZSkpOwogICAgIEFTU0VSVF9VTlVTRUQob2xkU3RydWN0dXJl
LCBoYWRJbmRleGluZ0hlYWRlciA9PSBoYXNJbmRleGluZ0hlYWRlcihvbGRTdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpKSk7CiAgICAgdm9pZCogdGhlQmFzZSA9IGJhc2UoMCwgcHJvcGVydHlDYXBh
Y2l0eSk7CiAgICAgc2l6ZV90IG9sZFNpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0
eSwgaGFkSW5kZXhpbmdIZWFkZXIsIG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKICAg
ICBzaXplX3QgbmV3U2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBu
ZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgaWYgKCF2bS5oZWFwLnRyeVJlYWxs
b2NhdGVTdG9yYWdlKCZ0aGVCYXNlLCBvbGRTaXplLCBuZXdTaXplKSkKKyAgICBpZiAoIXZtLmhl
YXAudHJ5UmVhbGxvY2F0ZVN0b3JhZ2UoaW50ZW5kZWRPd25lciwgJnRoZUJhc2UsIG9sZFNpemUs
IG5ld1NpemUpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gZnJvbUJhc2UodGhlQmFz
ZSwgMCwgcHJvcGVydHlDYXBhY2l0eSk7CiB9CiAKLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZs
eTo6Z3Jvd0FycmF5UmlnaHQoVk0mIHZtLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90
IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoraW5saW5lIEJ1dHRlcmZseSogQnV0dGVy
Zmx5Ojpncm93QXJyYXlSaWdodCgKKyAgICBWTSYgdm0sIEpTQ2VsbCogaW50ZW5kZWRPd25lciwg
U3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsCisgICAgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKQogewogICAgIHJldHVybiBncm93QXJyYXlSaWdodCgKLSAgICAgICAgdm0sIG9s
ZFN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLAorICAgICAgICB2
bSwgaW50ZW5kZWRPd25lciwgb2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCksCiAgICAgICAgIGhhc0luZGV4aW5nSGVhZGVyKG9sZFN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpLAogICAgICAgICBpbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyhvbGRTdHJ1Y3R1cmUpLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiB9
CiAKLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoVk0mIHZtLCBzaXpl
X3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBvbGRIYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9s
ZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIGJvb2wg
bmV3SGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cykKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoCisgICAgVk0mIHZt
LCBKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIG9s
ZEhhc0luZGV4aW5nSGVhZGVyLAorICAgIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcywgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBib29sIG5ld0hhc0luZGV4aW5nSGVhZGVyLAor
ICAgIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKIHsKICAgICBCdXR0ZXJm
bHkqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQoCi0gICAgICAgIHZtLCBuZXdQcmVDYXBh
Y2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgbmV3SGFzSW5kZXhpbmdIZWFkZXIsIG5ld0luZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAgICAgdm0sIGludGVuZGVkT3duZXIsIG5ld1ByZUNh
cGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBuZXdIYXNJbmRleGluZ0hlYWRlciwKKyAgICAgICAg
bmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxk
IGJlIG1hZGUgbXVjaCBtb3JlIGVmZmljaWVudCBpZiB3ZSB1c2VkIHRoZSBwcm9wZXJ0eSBzaXpl
LAogICAgIC8vIG5vdCB0aGUgY2FwYWNpdHkuCiAgICAgdm9pZCogdG8gPSByZXN1bHQtPnByb3Bl
cnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eTsKQEAgLTE0MCwxMSArMTY3LDEzIEBAIGlu
bGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5ld0lu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoraW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpy
ZXNpemVBcnJheSgKKyAgICBWTSYgdm0sIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwKKyAgICBzaXplX3QgbmV3SW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7CiAgICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9IEpT
Qzo6aGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgcmV0
dXJuIHJlc2l6ZUFycmF5KAotICAgICAgICB2bSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpLCBoYXNJbmRleGluZ0hlYWRlciwKKyAgICAgICAgdm0sIGludGVuZGVkT3duZXIsIHN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgaGFzSW5kZXhpbmdIZWFkZXIsCiAgICAgICAgIGlu
ZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSksIG5l
d1ByZUNhcGFjaXR5LAogICAgICAgICBoYXNJbmRleGluZ0hlYWRlciwgbmV3SW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheS5jcHAJKHJldmlzaW9uIDE1MDU2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMCArNDgsMTEgQEAgQVNT
RVJUX0hBU19UUklWSUFMX0RFU1RSVUNUT1IoSlNBcnJheSk7CiAKIGNvbnN0IENsYXNzSW5mbyBK
U0FycmF5OjpzX2luZm8gPSB7IkFycmF5IiwgJkpTTm9uRmluYWxPYmplY3Q6OnNfaW5mbywgMCwg
MCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FycmF5KX07CiAKLUJ1dHRlcmZseSogY3JlYXRlQXJy
YXlCdXR0ZXJmbHlJbkRpY3Rpb25hcnlJbmRleGluZ01vZGUoVk0mIHZtLCB1bnNpZ25lZCBpbml0
aWFsTGVuZ3RoKQorQnV0dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseUluRGljdGlvbmFyeUlu
ZGV4aW5nTW9kZSgKKyAgICBWTSYgdm0sIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdW5zaWduZWQg
aW5pdGlhbExlbmd0aCkKIHsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6
Y3JlYXRlKAotICAgICAgICB2bSwgMCwgMCwgdHJ1ZSwgSW5kZXhpbmdIZWFkZXIoKSwgQXJyYXlT
dG9yYWdlOjpzaXplRm9yKDApKTsKKyAgICAgICAgdm0sIGludGVuZGVkT3duZXIsIDAsIDAsIHRy
dWUsIEluZGV4aW5nSGVhZGVyKCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CiAgICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICBzdG9y
YWdlLT5zZXRMZW5ndGgoaW5pdGlhbExlbmd0aCk7CiAgICAgc3RvcmFnZS0+c2V0VmVjdG9yTGVu
Z3RoKDApOwpAQCAtMjg2LDcgKzI4Nyw3IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xv
d0Nhc2UoVk0mIHYKICAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gY3VycmVudENhcGFjaXR5
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIHNpemVfdCBuZXdTaXplID0gQnV0dGVyZmx5Ojp0b3Rh
bFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGRl
c2lyZWRDYXBhY2l0eSkpOwotICAgICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdl
KG5ld1NpemUsICZuZXdBbGxvY0Jhc2UpKQorICAgICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2Nh
dGVTdG9yYWdlKHRoaXMsIG5ld1NpemUsICZuZXdBbGxvY0Jhc2UpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBkZXNpcmVkQ2FwYWNpdHk7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2
aXNpb24gMTUwNTY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsMjEgKzE3NCwyMiBAQCBwcml2YXRlOgogICAgIHZvaWQg
Y29tcGFjdEZvclNvcnRpbmcodW5zaWduZWQmIG51bURlZmluZWQsIHVuc2lnbmVkJiBuZXdSZWxl
dmFudExlbmd0aCk7CiB9OwogCi1pbmxpbmUgQnV0dGVyZmx5KiBjcmVhdGVDb250aWd1b3VzQXJy
YXlCdXR0ZXJmbHkoVk0mIHZtLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkJiB2ZWN0b3JMZW5n
dGgpCitpbmxpbmUgQnV0dGVyZmx5KiBjcmVhdGVDb250aWd1b3VzQXJyYXlCdXR0ZXJmbHkoVk0m
IHZtLCBKU0NlbGwqIGludGVuZGVkT3duZXIsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQmIHZl
Y3Rvckxlbmd0aCkKIHsKICAgICBJbmRleGluZ0hlYWRlciBoZWFkZXI7CiAgICAgdmVjdG9yTGVu
Z3RoID0gc3RkOjptYXgobGVuZ3RoLCBCQVNFX1ZFQ1RPUl9MRU4pOwogICAgIGhlYWRlci5zZXRW
ZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKICAgICBoZWFkZXIuc2V0UHVibGljTGVuZ3RoKGxl
bmd0aCk7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBCdXR0ZXJmbHk6OmNyZWF0ZSgKLSAgICAg
ICAgdm0sIDAsIDAsIHRydWUsIGhlYWRlciwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSk7CisgICAgICAgIHZtLCBpbnRlbmRlZE93bmVyLCAwLCAwLCB0cnVlLCBoZWFkZXIs
IHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLWlubGluZSBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5KFZNJiB2bSwg
dW5zaWduZWQgaW5pdGlhbExlbmd0aCkKK2lubGluZSBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0
dGVyZmx5KFZNJiB2bSwgSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB1bnNpZ25lZCBpbml0aWFsTGVu
Z3RoKQogewogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGUoCi0g
ICAgICAgIHZtLCAwLCAwLCB0cnVlLCBiYXNlSW5kZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFs
TGVuZ3RoKSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKEJBU0VfVkVDVE9SX0xFTikpOworICAgICAg
ICB2bSwgaW50ZW5kZWRPd25lciwgMCwgMCwgdHJ1ZSwgYmFzZUluZGV4aW5nSGVhZGVyRm9yQXJy
YXkoaW5pdGlhbExlbmd0aCksCisgICAgICAgIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihCQVNFX1ZF
Q1RPUl9MRU4pKTsKICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOwogICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzID0gMDsKICAgICBzdG9yYWdlLT5t
X3NwYXJzZU1hcC5jbGVhcigpOwpAQCAtMTk2LDcgKzE5Nyw4IEBAIGlubGluZSBCdXR0ZXJmbHkq
IGNyZWF0ZUFycmF5QnV0dGVyZmx5KFYKICAgICByZXR1cm4gYnV0dGVyZmx5OwogfQogCi1CdXR0
ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5SW5EaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKFZNJiwg
dW5zaWduZWQgaW5pdGlhbExlbmd0aCk7CitCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5
SW5EaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKAorICAgIFZNJiwgSlNDZWxsKiBpbnRlbmRlZE93bmVy
LCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKTsKIAogaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OmNy
ZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3Ro
KQogewpAQCAtMjA4LDcgKzIxMCw3IEBAIGlubGluZSBKU0FycmF5KiBKU0FycmF5OjpjcmVhdGUo
Vk0mIHZtLCAKICAgICAgICAgICAgIHx8IGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKQogICAgICAgICAgICAgfHwgaGFzQ29udGlndW91cyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKSk7CiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aDsKLSAgICAgICAgYnV0dGVyZmx5
ID0gY3JlYXRlQ29udGlndW91c0FycmF5QnV0dGVyZmx5KHZtLCBpbml0aWFsTGVuZ3RoLCB2ZWN0
b3JMZW5ndGgpOworICAgICAgICBidXR0ZXJmbHkgPSBjcmVhdGVDb250aWd1b3VzQXJyYXlCdXR0
ZXJmbHkodm0sIDAsIGluaXRpYWxMZW5ndGgsIHZlY3Rvckxlbmd0aCk7CiAgICAgICAgIEFTU0VS
VChpbml0aWFsTGVuZ3RoIDwgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCk7CiAgICAgICAgIGlmICho
YXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpIHsKICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKQEAgLTIxOCw3ICsyMjAsNyBA
QCBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6Y3JlYXRlKFZNJiB2bSwgCiAgICAgICAgIEFTU0VS
VCgKICAgICAgICAgICAgIHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoU2xv
d1B1dEFycmF5U3RvcmFnZQogICAgICAgICAgICAgfHwgc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSA9PSBBcnJheVdpdGhBcnJheVN0b3JhZ2UpOwotICAgICAgICBidXR0ZXJmbHkgPSBjcmVhdGVB
cnJheUJ1dHRlcmZseSh2bSwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgIGJ1dHRlcmZseSA9IGNy
ZWF0ZUFycmF5QnV0dGVyZmx5KHZtLCAwLCBpbml0aWFsTGVuZ3RoKTsKICAgICB9CiAgICAgSlNB
cnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5Pih2bS5oZWFw
KSkgSlNBcnJheSh2bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOwogICAgIGFycmF5LT5maW5pc2hD
cmVhdGlvbih2bSk7CkBAIC0yNDAsNyArMjQyLDcgQEAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6
OnRyeUNyZWF0ZVVuaW5pdAogICAgICAgICAgICAgfHwgaGFzQ29udGlndW91cyhzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpKSk7CiAKICAgICAgICAgdm9pZCogdGVtcDsKLSAgICAgICAgaWYgKCF2
bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVl
LCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgJnRlbXApKQorICAgICAg
ICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKDAsIEJ1dHRlcmZseTo6dG90YWxTaXpl
KDAsIDAsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCAmdGVt
cCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgYnV0dGVyZmx5ID0gQnV0dGVyZmx5
Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsKICAgICAgICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5n
dGgodmVjdG9yTGVuZ3RoKTsKQEAgLTI1MSw3ICsyNTMsNyBAQCBpbmxpbmUgSlNBcnJheSogSlNB
cnJheTo6dHJ5Q3JlYXRlVW5pbml0CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICB2
b2lkKiB0ZW1wOwotICAgICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKEJ1dHRl
cmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JM
ZW5ndGgpKSwgJnRlbXApKQorICAgICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdl
KDAsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZv
cih2ZWN0b3JMZW5ndGgpKSwgJnRlbXApKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
IGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgMCk7CiAgICAgICAgICpi
dXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlckZvckFycmF5KGluaXRp
YWxMZW5ndGgsIHZlY3Rvckxlbmd0aCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxNTA1NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0Myw3ICs1NDMs
NyBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJCiAgICAgICAgICAg
ICBtYXAtPmFkZCh0aGlzLCBpKS5pdGVyYXRvci0+dmFsdWUuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7
CiAgICAgfQogCi0gICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJm
bHkoKS0+cmVzaXplQXJyYXkodm0sIHN0cnVjdHVyZSgpLCAwLCBBcnJheVN0b3JhZ2U6OnNpemVG
b3IoMCkpOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5
KCktPnJlc2l6ZUFycmF5KHZtLCB0aGlzLCBzdHJ1Y3R1cmUoKSwgMCwgQXJyYXlTdG9yYWdlOjpz
aXplRm9yKDApKTsKICAgICBSRUxFQVNFX0FTU0VSVChuZXdCdXR0ZXJmbHkpOwogICAgIAogICAg
IG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OwpAQCAtNTk1LDggKzU5NSw4IEBAIEJ1dHRlcmZs
eSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxJbmRleGUKICAgICBBU1NFUlQoIXN0cnVjdHVyZSgp
LT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKTsKICAgICBBU1NFUlQoIWluZGV4aW5nU2hvdWxkQmVT
cGFyc2UoKSk7CiAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RkOjptYXgobGVuZ3RoLCBC
QVNFX1ZFQ1RPUl9MRU4pOwotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5
OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0KG1fYnV0dGVyZmx5LCAKLSAgICAgICAgdm0sIHN0cnVj
dHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsCisgICAg
QnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5Umln
aHQoCisgICAgICAgIG1fYnV0dGVyZmx5LCB2bSwgdGhpcywgc3RydWN0dXJlKCksIHN0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwKICAgICAgICAgZWxlbWVudFNpemUg
KiB2ZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0
aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKQEAg
LTY0MSw4ICs2NDEsOCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3Jh
CiB7CiAgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCk7CiAgICAgQVNTRVJUX1VOVVNFRChvbGRUeXBlLCAhaGFzSW5kZXhlZFByb3BlcnRpZXMob2xk
VHlwZSkpOwotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVP
ckdyb3dBcnJheVJpZ2h0KG1fYnV0dGVyZmx5LCAKLSAgICAgICAgdm0sIHN0cnVjdHVyZSgpLCBz
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsCisgICAgQnV0dGVyZmx5
KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCisgICAg
ICAgIG1fYnV0dGVyZmx5LCB2bSwgdGhpcywgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwKICAgICAgICAgQXJyYXlTdG9yYWdlOjpzaXplRm9y
KHZlY3Rvckxlbmd0aCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG5ld0J1dHRlcmZseSk7CiAKQEAg
LTY5NCw3ICs2OTQsNyBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb25zdHJ1Y3RDb252ZXJ0
CiAgICAgdW5zaWduZWQgcHJvcGVydHlTaXplID0gc3RydWN0dXJlKCktPm91dE9mTGluZVNpemUo
KTsKICAgICAKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRl
VW5pbml0aWFsaXplZCgKLSAgICAgICAgdm0sIDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIEFy
cmF5U3RvcmFnZTo6c2l6ZUZvcihuZWVkZWRMZW5ndGgpKTsKKyAgICAgICAgdm0sIHRoaXMsIDAs
IHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZWVkZWRMZW5n
dGgpKTsKICAgICAKICAgICBtZW1jcHkoCiAgICAgICAgIG5ld0J1dHRlcmZseS0+cHJvcGVydHlT
dG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsCkBAIC0yMzAwLDcgKzIzMDAsOSBAQCBib29sIEpTT2Jq
ZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYgCiAKICAgICAvLyBGYXN0IGNhc2UgLSB0aGVy
ZSBpcyBubyBwcmVjYXBhY2l0eS4gSW4gdGhlc2UgY2FzZXMgYSByZWFsbG9jIG1ha2VzIHNlbnNl
LgogICAgIGlmIChMSUtFTFkoIWluZGV4QmlhcykpIHsKLSAgICAgICAgQnV0dGVyZmx5KiBuZXdC
dXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+Z3Jvd0FycmF5UmlnaHQodm0sIHN0cnVj
dHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgQXJyYXlTdG9y
YWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0
b3JMZW5ndGgpKTsKKyAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBzdG9yYWdlLT5i
dXR0ZXJmbHkoKS0+Z3Jvd0FycmF5UmlnaHQoCisgICAgICAgICAgICB2bSwgdGhpcywgc3RydWN0
dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLAorICAgICAgICAg
ICAgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCksIEFycmF5U3RvcmFnZTo6c2l6
ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKICAgICAgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5
OwpAQCAtMjMxMSw3ICsyMzEzLDcgQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5n
dGgoVk0mIAogICAgIC8vIFJlbW92ZSBzb21lLCBidXQgbm90IGFsbCBvZiB0aGUgcHJlY2FwYWNp
dHkuIEF0b21pYyBkZWNheSwgJiBjYXBwZWQgdG8gbm90IG92ZXJmbG93IGFycmF5IGxlbmd0aC4K
ICAgICB1bnNpZ25lZCBuZXdJbmRleEJpYXMgPSBzdGQ6Om1pbihpbmRleEJpYXMgPj4gMSwgTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgQnV0dGVyZmx5
KiBuZXdCdXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+cmVzaXplQXJyYXkoCi0gICAg
ICAgIHZtLAorICAgICAgICB2bSwgdGhpcywKICAgICAgICAgc3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpLAog
ICAgICAgICBuZXdJbmRleEJpYXMsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0
b3JMZW5ndGgpKTsKICAgICBpZiAoIW5ld0J1dHRlcmZseSkKQEAgLTIzMzQsNyArMjMzNiw3IEBA
IHZvaWQgSlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3coVk0mIHZtLCAKICAgICAgICAgTUFYX1NU
T1JBR0VfVkVDVE9SX0xFTkdUSCk7CiAgICAgdW5zaWduZWQgb2xkVmVjdG9yTGVuZ3RoID0gbV9i
dXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwogICAgIG1fYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkt
Pmdyb3dBcnJheVJpZ2h0KAotICAgICAgICB2bSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5v
dXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLAorICAgICAgICB2bSwgdGhpcywgc3RydWN0dXJlKCks
IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLAogICAgICAgICBvbGRWZWN0
b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpLAogICAgICAgICBuZXdWZWN0b3JMZW5n
dGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKICAgICBpZiAoaGFzRG91YmxlKHN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSkpIHsKQEAgLTIzNTEsNyArMjM1Myw3IEBAIEJ1dHRlcmZseSog
SlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWcKICAgICAvLyBJdCdzIGltcG9ydGFudCB0aGF0
IHRoaXMgZnVuY3Rpb24gbm90IHJlbHkgb24gc3RydWN0dXJlKCksIGZvciB0aGUgcHJvcGVydHkK
ICAgICAvLyBjYXBhY2l0eSwgc2luY2Ugd2UgbWlnaHQgaGF2ZSBhbHJlYWR5IG11dGF0ZWQgdGhl
IHN0cnVjdHVyZSBpbi1wbGFjZS4KICAgICAKLSAgICByZXR1cm4gbV9idXR0ZXJmbHktPmdyb3dQ
cm9wZXJ0eVN0b3JhZ2Uodm0sIHN0cnVjdHVyZSgpLCBvbGRTaXplLCBuZXdTaXplKTsKKyAgICBy
ZXR1cm4gbV9idXR0ZXJmbHktPmdyb3dQcm9wZXJ0eVN0b3JhZ2Uodm0sIHRoaXMsIHN0cnVjdHVy
ZSgpLCBvbGRTaXplLCBuZXdTaXplKTsKIH0KIAogYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxNTA1Njkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJy
aSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBL
ZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
LCAyMDA5LCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAiU3RydWN0dXJlLmgi
CiAjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgotI2luY2x1ZGUgIlNsb3RW
aXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlNwYXJzZUFycmF5VmFsdWVNYXAuaCIKICNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTExMzYsNiArMTEzNSw3IEBAIGlubGluZSBK
U09iamVjdDo6SlNPYmplY3QoVk0mIHZtLCBTdHJ1Y3QKICAgICA6IEpTQ2VsbCh2bSwgc3RydWN0
dXJlKQogICAgICwgbV9idXR0ZXJmbHkoYnV0dGVyZmx5KQogeworICAgIHZtLmhlYXAuYXNjcmli
ZU93bmVyKHRoaXMsIGJ1dHRlcmZseSk7CiB9CiAKIGlubGluZSBKU1ZhbHVlIEpTT2JqZWN0Ojpw
cm90b3R5cGUoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3Bl
cmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
ZXJhdGlvbnMuaAkocmV2aXNpb24gMTUwNTY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQot
ICogIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAi
SlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU1Byb3h5LmgiCiAjaW5jbHVkZSAiSlNT
dHJpbmcuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJTdHJ1
Y3R1cmVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuY3BwCShyZXZpc2lv
biAxNTA1NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVz
QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIFJlZ0V4cE1hdGNoZXNB
cnJheSogUmVnRXhwTWF0Y2hlc0FycmF5OjoKIHsKICAgICBBU1NFUlQocmVzdWx0KTsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gY3JlYXRlQXJy
YXlCdXR0ZXJmbHkodm0sIHJlZ0V4cC0+bnVtU3VicGF0dGVybnMoKSArIDEpOworICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlCdXR0ZXJmbHkodm0sIDAsIHJlZ0V4cC0+bnVt
U3VicGF0dGVybnMoKSArIDEpOwogICAgIFJlZ0V4cE1hdGNoZXNBcnJheSogYXJyYXkgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxSZWdFeHBNYXRjaGVzQXJyYXk+KHZtLmhlYXApKSBSZWdF
eHBNYXRjaGVzQXJyYXkodm0sIGJ1dHRlcmZseSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LCBpbnB1dCwgcmVnRXhwLCByZXN1bHQpOwogICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbih2bSk7
CiAgICAgcmV0dXJuIGFycmF5OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkocmV2aXNpb24gMTUwNTY5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDksMjcgKzEwOSw2IEBAIGlubGluZSBib29sIFN0cnVjdHVyZTo6bWFzcXVlcmFkZXNBc1Vu
ZGUKICAgICByZXR1cm4gdHlwZUluZm8oKS5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKCkgJiYgZ2xv
YmFsT2JqZWN0KCkgPT0gbGV4aWNhbEdsb2JhbE9iamVjdDsKIH0KIAotQUxXQVlTX0lOTElORSB2
b2lkIFNsb3RWaXNpdG9yOjppbnRlcm5hbEFwcGVuZChKU0NlbGwqIGNlbGwpCi17Ci0gICAgQVNT
RVJUKCFtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbik7Ci0gICAgaWYgKCFjZWxs
KQotICAgICAgICByZXR1cm47Ci0jaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCi0gICAgdmFsaWRh
dGUoY2VsbCk7Ci0jZW5kaWYKLSAgICBpZiAoSGVhcDo6dGVzdEFuZFNldE1hcmtlZChjZWxsKSB8
fCAhY2VsbC0+c3RydWN0dXJlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fdmlzaXRDb3Vu
dCsrOwotICAgICAgICAKLSAgICBNQVJLX0xPR19DSElMRCgqdGhpcywgY2VsbCk7Ci0KLSAgICAv
LyBTaG91bGQgbmV2ZXIgYXR0ZW1wdCB0byBtYXJrIHNvbWV0aGluZyB0aGF0IGlzIHphcHBlZC4K
LSAgICBBU1NFUlQoIWNlbGwtPmlzWmFwcGVkKCkpOwotICAgICAgICAKLSAgICBtX3N0YWNrLmFw
cGVuZChjZWxsKTsKLX0KLQogaW5saW5lIGJvb2wgU3RydWN0dXJlOjp0cmFuc2l0aXZlbHlUcmFu
c2l0aW9uZWRGcm9tKFN0cnVjdHVyZSogc3RydWN0dXJlVG9GaW5kKQogewogICAgIGZvciAoU3Ry
dWN0dXJlKiBjdXJyZW50ID0gdGhpczsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPnByZXZp
b3VzSUQoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJy
aWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVC
YXJyaWVyLmgJKHJldmlzaW9uIDE1MDU2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dyaXRlQmFycmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMjcsMTggKzIyNyw2IEBAIHRlbXBs
YXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBpbmxpbmUKICAgICByZXR1cm4gbGhzLmdldCgp
ID09IHJocy5nZXQoKTsKIH0KIAotLy8gU2xvdFZpc2l0b3IgZnVuY3Rpb25zCi0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoV3JpdGVCYXJyaWVy
QmFzZTxUPiogc2xvdCkKLXsKLSAgICBpbnRlcm5hbEFwcGVuZCgqc2xvdC0+c2xvdCgpKTsKLX0K
LQotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRWYWx1ZXMoV3JpdGVCYXJy
aWVyQmFzZTxVbmtub3duPiogYmFycmllcnMsIHNpemVfdCBjb3VudCkKLXsKLSAgICBhcHBlbmQo
YmFycmllcnMtPnNsb3QoKSwgY291bnQpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2Vu
ZGlmIC8vIFdyaXRlQmFycmllcl9oCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTUwNzg1KQorKysgU291cmNl
L1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAxMy0wNS0y
NyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEl0IHNob3VsZCBi
ZSBwb3NzaWJsZSB0byByZWNvcmQgaGVhcCBvcGVyYXRpb25zIChib3RoIEZhc3RNYWxsb2MgYW5k
IEpTQyBHQykKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExNjg0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0RhdGFMb2cu
Y3BwOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZUxvZ0ZpbGVPbmNl
KToKKyAgICAgICAgKiB3dGYvRmFzdE1hbGxvYy5jcHA6CisgICAgICAgIChXVEY6OlRDTWFsbG9j
X1RocmVhZENhY2hlOjpDcmVhdGVDYWNoZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKiB3dGYvUGxh
dGZvcm0uaDoKKwogMjAxMy0wNS0yMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgog
CiAgICAgICAgIGZvdXJ0aFRpZXI6IERGRyBzaG91bGQgYmUgYWJsZSB0byBydW4gb24gYSBzZXBh
cmF0ZSB0aHJlYWQKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0RhdGFMb2cuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0RhdGFMb2cuY3BwCShyZXZpc2lvbiAxNTA1NjkpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9EYXRhTG9nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsOCBAQCBz
dGF0aWMgcHRocmVhZF9vbmNlX3QgaW5pdGlhbGl6ZUxvZ0ZpbGVPCiAKIHN0YXRpYyBGaWxlUHJp
bnRTdHJlYW0qIGZpbGU7CiAKK3N0YXRpYyB1aW50NjRfdCBmaWxlRGF0YVsoc2l6ZW9mKEZpbGVQ
cmludFN0cmVhbSkgKyA3KSAvIDhdOworCiBzdGF0aWMgdm9pZCBpbml0aWFsaXplTG9nRmlsZU9u
Y2UoKQogewogI2lmIERBVEFfTE9HX1RPX0ZJTEUKQEAgLTc4LDggKzgwLDExIEBAIHN0YXRpYyB2
b2lkIGluaXRpYWxpemVMb2dGaWxlT25jZSgpCiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
Ildhcm5pbmc6IENvdWxkIG5vdCBvcGVuIGxvZyBmaWxlICVzIGZvciB3cml0aW5nLlxuIiwgYWN0
dWFsRmlsZW5hbWUpOwogICAgIH0KICNlbmRpZiAvLyBEQVRBX0xPR19UT19GSUxFCi0gICAgaWYg
KCFmaWxlKQotICAgICAgICBmaWxlID0gbmV3IEZpbGVQcmludFN0cmVhbShzdGRlcnIsIEZpbGVQ
cmludFN0cmVhbTo6Qm9ycm93KTsKKyAgICBpZiAoIWZpbGUpIHsKKyAgICAgICAgLy8gVXNlIHBs
YWNlbWVudCBuZXc7IHRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIHVzZSBkYXRhTG9nKCkgdG8gZGVi
dWcKKyAgICAgICAgLy8gZmFzdE1hbGxvYy4KKyAgICAgICAgZmlsZSA9IG5ldyAoZmlsZURhdGEp
IEZpbGVQcmludFN0cmVhbShzdGRlcnIsIEZpbGVQcmludFN0cmVhbTo6Qm9ycm93KTsKKyAgICB9
CiAgICAgCiAgICAgc2V0dmJ1ZihmaWxlLT5maWxlKCksIDAsIF9JT05CRiwgMCk7IC8vIFByZWZl
ciB1bmJ1ZmZlcmVkIG91dHB1dCwgc28gdGhhdCB3ZSBnZXQgYSBmdWxsIGxvZyB1cG9uIGNyYXNo
IG9yIGRlYWRsb2NrLgogfQpJbmRleDogU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5jcHAJKHJldmlzaW9uIDE1MDU2
OSkKKysrIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
Nyw2ICs4Nyw3IEBACiAjaW5jbHVkZSA8cHRocmVhZC5oPgogI2VuZGlmCiAjaW5jbHVkZSA8c3Ry
aW5nLmg+CisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKQEAgLTQxNjMsMTIgKzQxNjQs
MjIgQEAgQUxXQVlTX0lOTElORSB2b2lkKiBtYWxsb2Moc2l6ZV90KTsKIAogdm9pZCogZmFzdE1h
bGxvYyhzaXplX3Qgc2l6ZSkKIHsKLSAgICByZXR1cm4gbWFsbG9jPHRydWU+KHNpemUpOworICAg
IHZvaWQqIHJlc3VsdCA9IG1hbGxvYzx0cnVlPihzaXplKTsKKyNpZiBFTkFCTEUoQUxMT0NBVElP
Tl9MT0dHSU5HKQorICAgIGRhdGFMb2dGKCJmYXN0TWFsbG9jIGFsbG9jYXRpbmcgJWx1IGJ5dGVz
IChmYXN0TWFsbG9jKTogJXAuXG4iLCBzaXplLCByZXN1bHQpOworI2VuZGlmCisgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogVHJ5TWFsbG9jUmV0dXJuVmFsdWUgdHJ5RmFzdE1hbGxvYyhzaXplX3Qg
c2l6ZSkKIHsKLSAgICByZXR1cm4gbWFsbG9jPGZhbHNlPihzaXplKTsKKyAgICBUcnlNYWxsb2NS
ZXR1cm5WYWx1ZSByZXN1bHQgPSBtYWxsb2M8ZmFsc2U+KHNpemUpOworI2lmIEVOQUJMRShBTExP
Q0FUSU9OX0xPR0dJTkcpCisgICAgdm9pZCogcG9pbnRlcjsKKyAgICAodm9pZClyZXN1bHQuZ2V0
VmFsdWUocG9pbnRlcik7CisgICAgZGF0YUxvZ0YoImZhc3RNYWxsb2MgYWxsb2NhdGluZyAlbHUg
Ynl0ZXMgKHRyeUZhc3RNYWxsb2MpOiAlcC5cbiIsIHNpemUsIHBvaW50ZXIpOworI2VuZGlmCisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdGVtcGxhdGUgPGJvb2wgY3Jhc2hPbkZhaWx1cmU+CkBA
IC00MjAzLDYgKzQyMTQsMTAgQEAgdm9pZCogbWFsbG9jKHNpemVfdCBzaXplKSB7CiBleHRlcm4g
IkMiIAogI2VuZGlmCiB2b2lkIGZyZWUodm9pZCogcHRyKSB7CisjaWYgRU5BQkxFKEFMTE9DQVRJ
T05fTE9HR0lORykKKyAgICBkYXRhTG9nRigiZmFzdEZyZWUgZnJlZWluZyAlcC5cbiIsIHB0cik7
CisjZW5kaWYKKyAgICAKICNpZm5kZWYgV1RGX0NIQU5HRVMKICAgTWFsbG9jSG9vazo6SW52b2tl
RGVsZXRlSG9vayhwdHIpOwogI2VuZGlmCkBAIC00MjMyLDYgKzQyNDcsOSBAQCB2b2lkKiBmYXN0
Q2FsbG9jKHNpemVfdCBuLCBzaXplX3QgZWxlbV9zCiAjaWYgRU5BQkxFKFdURl9NQUxMT0NfVkFM
SURBVElPTikKICAgICBmYXN0TWFsbG9jVmFsaWRhdGUocmVzdWx0KTsKICNlbmRpZgorI2lmIEVO
QUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCisgICAgZGF0YUxvZ0YoImZhc3RNYWxsb2MgY29udGln
dW91c2x5IGFsbG9jYXRpbmcgJWx1ICogJWx1IGJ5dGVzIChmYXN0Q2FsbG9jKTogJXAuXG4iLCBu
LCBlbGVtX3NpemUsIHJlc3VsdCk7CisjZW5kaWYKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBA
IC00MjQxLDYgKzQyNTksOSBAQCBUcnlNYWxsb2NSZXR1cm5WYWx1ZSB0cnlGYXN0Q2FsbG9jKHNp
emVfCiAjaWYgRU5BQkxFKFdURl9NQUxMT0NfVkFMSURBVElPTikKICAgICBmYXN0TWFsbG9jVmFs
aWRhdGUocmVzdWx0KTsKICNlbmRpZgorI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCisg
ICAgZGF0YUxvZ0YoImZhc3RNYWxsb2MgY29udGlndW91c2x5IGFsbG9jYXRpbmcgJWx1ICogJWx1
IGJ5dGVzICh0cnlGYXN0Q2FsbG9jKTogJXAuXG4iLCBuLCBlbGVtX3NpemUsIHJlc3VsdCk7Cisj
ZW5kaWYKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC00MzAyLDYgKzQzMjMsOSBAQCB2b2lk
KiBmYXN0UmVhbGxvYyh2b2lkKiBvbGRfcHRyLCBzaXplX3QgCiAjaWYgRU5BQkxFKFdURl9NQUxM
T0NfVkFMSURBVElPTikKICAgICBmYXN0TWFsbG9jVmFsaWRhdGUocmVzdWx0KTsKICNlbmRpZgor
I2lmIEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCisgICAgZGF0YUxvZ0YoImZhc3RNYWxsb2Mg
cmVhbGxvY2F0aW5nICVsdSBieXRlcyAoZmFzdFJlYWxsb2MpOiAlcCAtPiAlcC5cbiIsIG5ld19z
aXplLCBvbGRfcHRyLCByZXN1bHQpOworI2VuZGlmCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApA
QCAtNDMxNCw2ICs0MzM4LDkgQEAgVHJ5TWFsbG9jUmV0dXJuVmFsdWUgdHJ5RmFzdFJlYWxsb2Mo
dm9pZAogI2lmIEVOQUJMRShXVEZfTUFMTE9DX1ZBTElEQVRJT04pCiAgICAgZmFzdE1hbGxvY1Zh
bGlkYXRlKHJlc3VsdCk7CiAjZW5kaWYKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQor
ICAgIGRhdGFMb2dGKCJmYXN0TWFsbG9jIHJlYWxsb2NhdGluZyAlbHUgYnl0ZXMgKHRyeUZhc3RS
ZWFsbG9jKTogJXAgLT4gJXAuXG4iLCBuZXdfc2l6ZSwgb2xkX3B0ciwgcmVzdWx0KTsKKyNlbmRp
ZgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3Jt
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gMTUw
NTY5KQorKysgU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtODU4
LDYgKzg1OCwxNiBAQAogI2RlZmluZSBFTkFCTEVfV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcgMAog
I2VuZGlmCiAKKy8qIExvZ3MgYWxsIGFsbG9jYXRpb24tcmVsYXRlZCBhY3Rpdml0eSB0aGF0IGdv
ZXMgdGhyb3VnaCBmYXN0TWFsbG9jIG9yIHRoZQorICAgSlNDIEdDIChib3RoIGNlbGxzIGFuZCBi
dXR0ZXJmbGllcykuIEFsc28gbG9ncyBtYXJraW5nLiBOb3RlIHRoYXQgdGhpcworICAgaXNuJ3Qg
YSBjb21wbGV0ZWx5IGFjY3VyYXRlIHZpZXcgb2YgdGhlIGhlYXAgc2luY2UgaXQgZG9lc24ndCBp
bmNsdWRlIGFsbAorICAgYnV0dGVyZmx5IHJlc2l6ZSBvcGVyYXRpb25zLCBkb2Vzbid0IHRlbGwg
eW91IHdoYXQgaXMgZ29pbmcgb24gd2l0aCB3ZWFrCisgICByZWZlcmVuY2VzIChvdGhlciB0aGFu
IHRvIHRlbGwgeW91IHdoZW4gdGhleSdyZSBtYXJrZWQpLCBhbmQgZG9lc24ndAorICAgdHJhY2sg
ZGlyZWN0IG1tYXAoKSBhbGxvY2F0aW9ucyBvciB0aGluZ3MgbGlrZSBKSVQgYWxsb2NhdGlvbi4g
Ki8KKyNpZiAhZGVmaW5lZChFTkFCTEVfQUxMT0NBVElPTl9MT0dHSU5HKQorI2RlZmluZSBFTkFC
TEVfQUxMT0NBVElPTl9MT0dHSU5HIDAKKyNlbmRpZgorCiAvKiBFbmFibGUgdmVyaWZpY2F0aW9u
IHRoYXQgdGhhdCByZWdpc3RlciBhbGxvY2F0aW9ucyBhcmUgbm90IG1hZGUgd2l0aGluIGdlbmVy
YXRlZCBjb250cm9sIGZsb3cuCiAgICBUdXJuZWQgb24gZm9yIGRlYnVnIGJ1aWxkcy4gKi8KICNp
ZiAhZGVmaW5lZChFTkFCTEVfREZHX1JFR0lTVEVSX0FMTE9DQVRJT05fVkFMSURBVElPTikgJiYg
RU5BQkxFKERGR19KSVQpCg==
</data>
<flag name="review"
          id="224514"
          type_id="1"
          status="+"
          setter="mhahnenberg"
    />
    <flag name="commit-queue"
          id="224515"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
      

    </bug>

</bugzilla>