<?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>94412</bug_id>
          
          <creation_ts>2012-08-17 22:22:01 -0700</creation_ts>
          <short_desc>The current state of the call frame should be taken into account in the DFG for both predictions and proofs</short_desc>
          <delta_ts>2012-08-19 15:03:05 -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>94205</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>698917</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-17 22:22:01 -0700</bug_when>
    <thetext>As the CFA gets smarter, we&apos;re seeing situations where it &quot;correctly&quot; proves that the OSR entrypoint through which we&apos;re trying to enter cannot possibly execute. This occurs when you have code which, in its prologue, modifies some constant object and flips it to have a new structure:

o = constant;
o.f = thing; // create new field
loop { // osr entrpoint
   things
}

o&apos;s structure at compile-time will be the structure after having created the new field.  Likely, that structure will be terminal, and so watchpointable.  Hence we will prove that o&apos;s future structure set contains only that structure.  But that means that &apos;o.f = thing&apos; cannot possibly succeed every again, which is absolutely true - it can&apos;t.  Any future execution of that statement, so long as that statement is creating a new field and nothing more, will OSR exit immediately.  But then we go and prove our own demise, as it were: we prove that the OSR entrypoint is unreachable, since the code that preceded it cannot execute.

It&apos;s useful to leverage knowledge of what the future structure set of an object can be in the future.  We use this to do good optimizations, like structure watchpointing.  That necessarily implies leveraging the fact that an object&apos;s structure cannot time-travel into the past.  But in cases where the entrypoint into the function occurs at a point that is proven unreachable by this strategy, we should, instead of disabling entry, force the analysis to be just conservative enough to allow that entry to happen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>698920</commentid>
    <comment_count>1</comment_count>
      <attachid>159262</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-17 22:40:30 -0700</bug_when>
    <thetext>Created attachment 159262
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>698934</commentid>
    <comment_count>2</comment_count>
      <attachid>159263</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-18 12:19:15 -0700</bug_when>
    <thetext>Created attachment 159263
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699084</commentid>
    <comment_count>3</comment_count>
      <attachid>159263</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-08-19 14:50:26 -0700</bug_when>
    <thetext>Comment on attachment 159263
the patch

R is me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699085</commentid>
    <comment_count>4</comment_count>
      <attachid>159263</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-08-19 14:51:33 -0700</bug_when>
    <thetext>Comment on attachment 159263
the patch

R is me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699091</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-19 15:03:05 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/125982</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159262</attachid>
            <date>2012-08-17 22:40:30 -0700</date>
            <delta_ts>2012-08-18 12:19:15 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>currentstate_patch_1.diff</filename>
            <type>text/plain</type>
            <size>32167</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI1OTYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBA
CisyMDEyLTA4LTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGNhbGwgZnJhbWUgc2hvdWxkIGJlIHRha2VuIGludG8g
YWNjb3VudCBpbiB0aGUgREZHIGZvciBib3RoIHByZWRpY3Rpb25zIGFuZCBwcm9vZnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0NDEyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV29yayBpbiBwcm9ncmVz
cy4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OlBy
b2dyYW1Db2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQpOgorICAgICAgICAoSlNDOjpFdmFsQ29k
ZUJsb2NrOjpjb21waWxlT3B0aW1pemVkKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Db2RlQmxv
Y2s6OmNvbXBpbGVPcHRpbWl6ZWQpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgor
ICAgICAgICAoQ29kZUJsb2NrKToKKyAgICAgICAgKFByb2dyYW1Db2RlQmxvY2spOgorICAgICAg
ICAoRXZhbENvZGVCbG9jayk6CisgICAgICAgIChGdW5jdGlvbkNvZGVCbG9jayk6CisgICAgICAg
ICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
U3RhdGU6OmluaXRpYWxpemUpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFZhbHVlLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6c2V0TW9zdFNwZWNpZmljKToKKyAgICAg
ICAgKEFic3RyYWN0VmFsdWUpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZpeFZhcmlhYmxlQWNjZXNzUHJl
ZGljdGlvbnMpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZSk6Cisg
ICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGlsZSk6
CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5
Q29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmg6CisgICAgICAgIChE
RkcpOgorICAgICAgICAoSlNDOjpERkc6OnRyeUNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6
OnRyeUNvbXBpbGVGdW5jdGlvbik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OkdyYXBoKToKKyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKiBq
aXQvSklURHJpdmVyLmg6CisgICAgICAgIChKU0M6OmppdENvbXBpbGVJZkFwcHJvcHJpYXRlKToK
KyAgICAgICAgKEpTQzo6aml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0ZSk6CisgICAgICAg
ICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04p
OgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OkV2YWxF
eGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkKToKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFi
bGU6OmNvbXBpbGVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpj
b21waWxlT3B0aW1pemVkKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBp
bGVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9w
dGltaXplZEZvckNhbGwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBp
bGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFi
bGU6OmNvbXBpbGVGb3JDYWxsSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1
dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9F
eGVjdXRhYmxlLmg6CisgICAgICAgIChFdmFsRXhlY3V0YWJsZSk6CisgICAgICAgIChQcm9ncmFt
RXhlY3V0YWJsZSk6CisgICAgICAgIChGdW5jdGlvbkV4ZWN1dGFibGUpOgorICAgICAgICAoSlND
OjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWRGb3IpOgorICAgICAgICAqIHJ1
bnRpbWUvRXhlY3V0aW9uSGFybmVzcy5oOgorICAgICAgICAoSlNDOjpwcmVwYXJlRm9yRXhlY3V0
aW9uKToKKyAgICAgICAgKEpTQzo6cHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKToKKwogMjAx
Mi0wOC0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBp
cyBzdGlsbCB0b28gcGVzc2ltaXN0aWMgYWJvdXQgd2hhdCBjb25zdGl0dXRlcyBhIHNpZGUtZWZm
ZWN0IG9uIGFycmF5IGFjY2Vzc2VzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTI1OTYzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2ODcsMjcg
KzI2ODcsMjcgQEAgQ29kZUJsb2NrKiBGdW5jdGlvbkNvZGVCbG9jazo6cmVwbGFjZW1lbgogICAg
IHJldHVybiAmc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxl
KCkpLT5nZW5lcmF0ZWRCeXRlY29kZUZvcihtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3Ry
dWN0IDogQ29kZUZvckNhbGwpOwogfQogCi1KU09iamVjdCogUHJvZ3JhbUNvZGVCbG9jazo6Y29t
cGlsZU9wdGltaXplZChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWlu
Tm9kZSkKK0pTT2JqZWN0KiBQcm9ncmFtQ29kZUJsb2NrOjpjb21waWxlT3B0aW1pemVkKEV4ZWNT
dGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCB1bnNpZ25lZCBieXRl
Y29kZUluZGV4KQogewogICAgIGlmIChyZXBsYWNlbWVudCgpLT5nZXRKSVRUeXBlKCkgPT0gSklU
Q29kZTo6bmV4dFRpZXJKSVQoZ2V0SklUVHlwZSgpKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
SlNPYmplY3QqIGVycm9yID0gc3RhdGljX2Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4
ZWN1dGFibGUoKSktPmNvbXBpbGVPcHRpbWl6ZWQoZXhlYywgc2NvcGVDaGFpbk5vZGUpOworICAg
IEpTT2JqZWN0KiBlcnJvciA9IHN0YXRpY19jYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJF
eGVjdXRhYmxlKCkpLT5jb21waWxlT3B0aW1pemVkKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBieXRl
Y29kZUluZGV4KTsKICAgICByZXR1cm4gZXJyb3I7CiB9CiAKLUpTT2JqZWN0KiBFdmFsQ29kZUJs
b2NrOjpjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNj
b3BlQ2hhaW5Ob2RlKQorSlNPYmplY3QqIEV2YWxDb2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQo
RXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIHVuc2lnbmVk
IGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgaWYgKHJlcGxhY2VtZW50KCktPmdldEpJVFR5cGUoKSA9
PSBKSVRDb2RlOjpuZXh0VGllckpJVChnZXRKSVRUeXBlKCkpKQogICAgICAgICByZXR1cm4gMDsK
LSAgICBKU09iamVjdCogZXJyb3IgPSBzdGF0aWNfY2FzdDxFdmFsRXhlY3V0YWJsZSo+KG93bmVy
RXhlY3V0YWJsZSgpKS0+Y29tcGlsZU9wdGltaXplZChleGVjLCBzY29wZUNoYWluTm9kZSk7Cisg
ICAgSlNPYmplY3QqIGVycm9yID0gc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihvd25lckV4
ZWN1dGFibGUoKSktPmNvbXBpbGVPcHRpbWl6ZWQoZXhlYywgc2NvcGVDaGFpbk5vZGUsIGJ5dGVj
b2RlSW5kZXgpOwogICAgIHJldHVybiBlcnJvcjsKIH0KIAotSlNPYmplY3QqIEZ1bmN0aW9uQ29k
ZUJsb2NrOjpjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUq
IHNjb3BlQ2hhaW5Ob2RlKQorSlNPYmplY3QqIEZ1bmN0aW9uQ29kZUJsb2NrOjpjb21waWxlT3B0
aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCB1
bnNpZ25lZCBieXRlY29kZUluZGV4KQogewogICAgIGlmIChyZXBsYWNlbWVudCgpLT5nZXRKSVRU
eXBlKCkgPT0gSklUQ29kZTo6bmV4dFRpZXJKSVQoZ2V0SklUVHlwZSgpKSkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgSlNPYmplY3QqIGVycm9yID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRh
YmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb21waWxlT3B0aW1pemVkRm9yKGV4ZWMsIHNjb3Bl
Q2hhaW5Ob2RlLCBtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNh
bGwpOworICAgIEpTT2JqZWN0KiBlcnJvciA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJs
ZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29tcGlsZU9wdGltaXplZEZvcihleGVjLCBzY29wZUNo
YWluTm9kZSwgYnl0ZWNvZGVJbmRleCwgbV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVj
dCA6IENvZGVGb3JDYWxsKTsKICAgICByZXR1cm4gZXJyb3I7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDEyNTk2MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtNDQyLDcgKzQ0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgZ2V0SklUQ29kZVdpdGhBcml0eUNoZWNrKCkgeyByZXR1cm4gbV9qaXRDb2Rl
V2l0aEFyaXR5Q2hlY2s7IH0KICAgICAgICAgSklUQ29kZTo6SklUVHlwZSBnZXRKSVRUeXBlKCkg
eyByZXR1cm4gbV9qaXRDb2RlLmppdFR5cGUoKTsgfQogICAgICAgICBFeGVjdXRhYmxlTWVtb3J5
SGFuZGxlKiBleGVjdXRhYmxlTWVtb3J5KCkgeyByZXR1cm4gZ2V0SklUQ29kZSgpLmdldEV4ZWN1
dGFibGVNZW1vcnkoKTsgfQotICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1p
emVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKikgPSAwOworICAgICAgICB2aXJ0dWFsIEpT
T2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleCkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24o
KSA9IDA7CiAgICAgICAgIGVudW0gSklUQ29tcGlsYXRpb25SZXN1bHQgeyBBbHJlYWR5Q29tcGls
ZWQsIENvdWxkTm90Q29tcGlsZSwgQ29tcGlsZWRTdWNjZXNzZnVsbHkgfTsKICAgICAgICAgSklU
Q29tcGlsYXRpb25SZXN1bHQgaml0Q29tcGlsZShFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xNDQ4LDcg
KzE0NDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAjaWYgRU5BQkxFKEpJVCkKICAg
ICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQo
RXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAgdmlydHVhbCBKU09iamVjdCog
Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24oKTsKICAgICAgICAg
dmlydHVhbCBib29sIGppdENvbXBpbGVJbXBsKEV4ZWNTdGF0ZSopOwogICAgICAgICB2aXJ0dWFs
IENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKQEAgLTE0ODMsNyArMTQ4Myw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAKICNpZiBFTkFCTEUoSklUKQogICAgIHByb3RlY3RlZDoKLSAgICAg
ICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNo
YWluTm9kZSopOworICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4
ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbigpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgaml0Q29t
cGlsZUltcGwoRXhlY1N0YXRlKik7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNl
bWVudCgpOwpAQCAtMTUyMSw3ICsxNTIxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAog
I2lmIEVOQUJMRShKSVQpCiAgICAgcHJvdGVjdGVkOgotICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0
KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAg
IHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFp
bk5vZGUqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGpl
dHRpc29uKCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBqaXRDb21waWxlSW1wbChFeGVjU3RhdGUq
KTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9u
IDEyNTk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw2ICsxNTgsMTYgQEAgdm9pZCBBYnN0cmFjdFN0YXRl
Ojppbml0aWFsaXplKEdyYXBoJiBncgogICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZC5s
b2NhbChpKS5jbGVhcigpOwogICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0VGFpbC5sb2NhbChp
KS5jbGVhcigpOwogICAgICAgICB9CisgICAgICAgIGlmICghYmxvY2stPmlzT1NSVGFyZ2V0KQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChibG9jay0+Ynl0ZWNvZGVCZWdpbiAh
PSBtX2dyYXBoLm1fb3NyRW50cnlCeXRlY29kZUluZGV4KQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5tX211c3RIYW5kbGVWYWx1
ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWU7CisgICAg
ICAgICAgICB2YWx1ZS5zZXRNb3N0U3BlY2lmaWMobV9ncmFwaC5tX211c3RIYW5kbGVWYWx1ZXNb
aV0pOworICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZC5vcGVyYW5kKG1fZ3JhcGgubV9t
dXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRBdEluZGV4KGkpKS5tZXJnZSh2YWx1ZSk7CisgICAgICAg
IH0KKyAgICAgICAgYmxvY2stPmNmYVNob3VsZFJldmlzaXQgPSB0cnVlOwogICAgIH0KIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJl
dmlzaW9uIDEyNTk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RW
YWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zODYsNiArMzg2LDIzIEBAIHN0cnVjdCBBYnN0cmFj
dFZhbHVlIHsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCisgICAgdm9pZCBz
ZXRNb3N0U3BlY2lmaWMoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghIXZhbHVl
ICYmIHZhbHVlLmlzQ2VsbCgpKSB7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgIG1fc3RydWN0dXJlID0g
c3RydWN0dXJlOworICAgICAgICAgICAgbV91bmNsb2JiZXJlZFN0cnVjdHVyZSA9IHN0cnVjdHVy
ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7Cisg
ICAgICAgICAgICBtX3VuY2xvYmJlcmVkU3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIG1fdHlwZSA9IHNwZWN1bGF0aW9uRnJvbVZhbHVlKHZhbHVlKTsKKyAg
ICAgICAgbV92YWx1ZSA9IHZhbHVlOworICAgICAgICAKKyAgICAgICAgY2hlY2tDb25zaXN0ZW5j
eSgpOworICAgIH0KKyAgICAKICAgICB2b2lkIHNldChKU1ZhbHVlIHZhbHVlKQogICAgIHsKICAg
ICAgICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUuaXNDZWxsKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxMjU5
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8
UGhpU3RhY2tUeXBlIHN0YWNrVHlwZT4KICAgICB2b2lkIHByb2Nlc3NQaGlTdGFjaygpOwogICAg
IAotICAgIHZvaWQgZml4VmFyaWFibGVBY2Nlc3NTcGVjdWxhdGlvbnMoKTsKKyAgICB2b2lkIGZp
eFZhcmlhYmxlQWNjZXNzUHJlZGljdGlvbnMoKTsKICAgICAvLyBBZGQgc3BpbGwgbG9jYXRpb25z
IHRvIG5vZGVzLgogICAgIHZvaWQgYWxsb2NhdGVWaXJ0dWFsUmVnaXN0ZXJzKCk7CiAgICAgCkBA
IC0zMDMwLDcgKzMwMzAsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2so
KQogICAgIH0KIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6Zml4VmFyaWFibGVBY2Nlc3NTcGVj
dWxhdGlvbnMoKQordm9pZCBCeXRlQ29kZVBhcnNlcjo6Zml4VmFyaWFibGVBY2Nlc3NQcmVkaWN0
aW9ucygpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGgubV92YXJpYWJs
ZUFjY2Vzc0RhdGEuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBk
YXRhID0gJm1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGFbaV07CkBAIC0zMzYyLDcgKzMzNjIs
MjUgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICAgICAgbV9ncmFwaC5t
X2Jsb2Nrc1tibG9ja0luZGV4XS5jbGVhcigpOwogICAgIH0KICAgICAKLSAgICBmaXhWYXJpYWJs
ZUFjY2Vzc1NwZWN1bGF0aW9ucygpOworICAgIGZpeFZhcmlhYmxlQWNjZXNzUHJlZGljdGlvbnMo
KTsKKyAgICAKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXgg
PCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAg
ICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIWJsb2Nr
LT5pc09TUlRhcmdldCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYmxvY2st
PmJ5dGVjb2RlQmVnaW4gIT0gbV9ncmFwaC5tX29zckVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ3JhcGgu
bV9tdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBOb2RlSW5kZXgg
bm9kZUluZGV4ID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKAorICAgICAgICAgICAg
ICAgIG1fZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKSk7CisgICAg
ICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICAgICAgQVNT
RVJUKG5vZGUuaGFzTG9jYWwoKSk7CisgICAgICAgICAgICBub2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5wcmVkaWN0KAorICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fZ3Jh
cGgubV9tdXN0SGFuZGxlVmFsdWVzW2ldKSk7CisgICAgICAgIH0KKyAgICB9CiAgICAgCiAgICAg
bV9ncmFwaC5tX3ByZXNlcnZlZFZhcnMgPSBtX3ByZXNlcnZlZFZhcnM7CiAgICAgbV9ncmFwaC5t
X2xvY2FsVmFycyA9IG1fbnVtTG9jYWxzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTI1OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHVuc2ln
bmVkIGdldE51bUNvbXBpbGF0aW9ucygpCiB9CiAKIGVudW0gQ29tcGlsZU1vZGUgeyBDb21waWxl
RnVuY3Rpb24sIENvbXBpbGVPdGhlciB9OwotaW5saW5lIGJvb2wgY29tcGlsZShDb21waWxlTW9k
ZSBjb21waWxlTW9kZSwgRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklU
Q29kZSYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRDb2RlV2l0aEFyaXR5Q2hl
Y2spCitpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNb2RlLCBFeGVjU3Rh
dGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIqIGppdENvZGVXaXRoQXJpdHlDaGVjaywgdW5zaWduZWQgb3NyRW50cnlC
eXRlY29kZUluZGV4KQogewogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcg
Q29tcGlsYXRpb24gKERyaXZlcikiKTsKICAgICAKQEAgLTc0LDcgKzc0LDEzIEBAIGlubGluZSBi
b29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU0KICAgICBkYXRhTG9nKCJERkcgY29tcGls
aW5nIGNvZGUgYmxvY2sgJXAoJXApIGZvciBleGVjdXRhYmxlICVwLCBudW1iZXIgb2YgaW5zdHJ1
Y3Rpb25zID0gJXUuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkp
OwogI2VuZGlmCiAgICAgCi0gICAgR3JhcGggZGZnKGV4ZWMtPmdsb2JhbERhdGEoKSwgY29kZUJs
b2NrKTsKKyAgICAvLyBEZXJpdmUgb3VyIHNldCBvZiBtdXN0LWhhbmRsZSB2YWx1ZXMuIFRoZSBj
b21waWxhdGlvbiBtdXN0IGJlIGF0IGxlYXN0IGNvbnNlcnZhdGl2ZQorICAgIC8vIGVub3VnaCB0
byBhbGxvdyBmb3IgT1NSIGVudHJ5IHdpdGggdGhlc2UgdmFsdWVzLgorICAgIE9wZXJhbmRzPEpT
VmFsdWU+IG11c3RIYW5kbGVWYWx1ZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIGNvZGVC
bG9jay0+bV9udW1WYXJzKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG11c3RIYW5kbGVW
YWx1ZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG11c3RIYW5kbGVWYWx1ZXNbaV0gPSBleGVjLT51
bmNoZWNrZWRSKG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpKTsKKyAgICAKKyAg
ICBHcmFwaCBkZmcoZXhlYy0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2ssIG9zckVudHJ5Qnl0ZWNv
ZGVJbmRleCwgbXVzdEhhbmRsZVZhbHVlcyk7CiAgICAgaWYgKCFwYXJzZShleGVjLCBkZmcpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCkBAIC0xMzcsMTQgKzE0MywxNCBAQCBpbmxpbmUg
Ym9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotYm9vbCB0cnlDb21waWxlKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpJVENvZGUmIGppdENvZGUpCitib29sIHRyeUNvbXBpbGUoRXhlY1N0YXRlKiBleGVjLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSYgaml0Q29kZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCkKIHsKLSAgICByZXR1cm4gY29tcGlsZShDb21waWxlT3RoZXIsIGV4ZWMsIGNvZGVCbG9jaywg
aml0Q29kZSwgMCk7CisgICAgcmV0dXJuIGNvbXBpbGUoQ29tcGlsZU90aGVyLCBleGVjLCBjb2Rl
QmxvY2ssIGppdENvZGUsIDAsIGJ5dGVjb2RlSW5kZXgpOwogfQogCi1ib29sIHRyeUNvbXBpbGVG
dW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlJiBq
aXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjaykKK2Jv
b2wgdHJ5Q29tcGlsZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEpJVENvZGUmIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhB
cml0eUNoZWNrLCBieXRlY29kZUluZGV4KQogewotICAgIHJldHVybiBjb21waWxlKENvbXBpbGVG
dW5jdGlvbiwgZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCAmaml0Q29kZVdpdGhBcml0eUNoZWNr
KTsKKyAgICByZXR1cm4gY29tcGlsZShDb21waWxlRnVuY3Rpb24sIGV4ZWMsIGNvZGVCbG9jaywg
aml0Q29kZSwgJmppdENvZGVXaXRoQXJpdHlDaGVjaywgYnl0ZWNvZGVJbmRleCk7CiB9CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRHJpdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
cml2ZXIuaAkocmV2aXNpb24gMTI1OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEcml2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTEgKzQxLDExIEBAIG5hbWVzcGFjZSBE
RkcgewogSlNfRVhQT1JUX1BSSVZBVEUgdW5zaWduZWQgZ2V0TnVtQ29tcGlsYXRpb25zKCk7CiAK
ICNpZiBFTkFCTEUoREZHX0pJVCkKLWJvb2wgdHJ5Q29tcGlsZShFeGVjU3RhdGUqLCBDb2RlQmxv
Y2sqLCBKSVRDb2RlJik7Ci1ib29sIHRyeUNvbXBpbGVGdW5jdGlvbihFeGVjU3RhdGUqLCBDb2Rl
QmxvY2sqLCBKSVRDb2RlJiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5
Q2hlY2spOworYm9vbCB0cnlDb21waWxlKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIEpJVENvZGUm
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKK2Jvb2wgdHJ5Q29tcGlsZUZ1bmN0aW9uKEV4ZWNT
dGF0ZSosIENvZGVCbG9jayosIEpJVENvZGUmLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENv
ZGVXaXRoQXJpdHlDaGVjaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CiAjZWxzZQotaW5saW5l
IGJvb2wgdHJ5Q29tcGlsZShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBKSVRDb2RlJikgeyByZXR1
cm4gZmFsc2U7IH0KLWlubGluZSBib29sIHRyeUNvbXBpbGVGdW5jdGlvbihFeGVjU3RhdGUqLCBD
b2RlQmxvY2sqLCBKSVRDb2RlJiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJikgeyByZXR1cm4gZmFs
c2U7IH0KK2lubGluZSBib29sIHRyeUNvbXBpbGUoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgSklU
Q29kZSYsIHVuc2lnbmVkKSB7IHJldHVybiBmYWxzZTsgfQoraW5saW5lIGJvb2wgdHJ5Q29tcGls
ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIEpJVENvZGUmLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHImLCB1bnNpZ25lZCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CShyZXZpc2lvbiAxMjU5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDExICs3NiwxMyBAQCBzdHJ1Y3QgUmVzb2x2ZUdsb2Jh
bERhdGEgewogLy8gTm9kZXMgdGhhdCBhcmUgJ2RlYWQnIHJlbWFpbiBpbiB0aGUgdmVjdG9yIHdp
dGggcmVmQ291bnQgMC4KIGNsYXNzIEdyYXBoIDogcHVibGljIFZlY3RvcjxOb2RlLCA2ND4gewog
cHVibGljOgotICAgIEdyYXBoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2spCisgICAgR3JhcGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5k
czxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcykKICAgICAgICAgOiBtX2dsb2JhbERhdGEoZ2xv
YmFsRGF0YSkKICAgICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgICAgICwgbV9w
cm9maWxlZEJsb2NrKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkKICAgICAgICAgLCBtX2hhc0Fy
Z3VtZW50cyhmYWxzZSkKKyAgICAgICAgLCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleChvc3JFbnRy
eUJ5dGVjb2RlSW5kZXgpCisgICAgICAgICwgbV9tdXN0SGFuZGxlVmFsdWVzKG11c3RIYW5kbGVW
YWx1ZXMpCiAgICAgewogICAgICAgICBBU1NFUlQobV9wcm9maWxlZEJsb2NrKTsKICAgICB9CkBA
IC03MTAsNiArNzEyLDggQEAgcHVibGljOgogICAgIERvbWluYXRvcnMgbV9kb21pbmF0b3JzOwog
ICAgIHVuc2lnbmVkIG1fbG9jYWxWYXJzOwogICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyU2xvdHM7
CisgICAgdW5zaWduZWQgbV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXg7CisgICAgT3BlcmFuZHM8SlNW
YWx1ZT4gbV9tdXN0SGFuZGxlVmFsdWVzOwogcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGhhbmRs
ZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2tJbmRleCwgMTY+JiB3b3JrbGlzdCwgQmxvY2tJbmRleCBi
bG9ja0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3NvckluZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklURHJpdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVREcml2ZXIuaAkocmV2aXNpb24gMTI1OTYzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVREcml2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBA
QAogbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Ci1p
bmxpbmUgYm9vbCBqaXRDb21waWxlSWZBcHByb3ByaWF0ZShFeGVjU3RhdGUqIGV4ZWMsIE93blB0
cjxDb2RlQmxvY2tUeXBlPiYgY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBKSVRDb2RlOjpK
SVRUeXBlIGppdFR5cGUsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKK2lubGluZSBib29s
IGppdENvbXBpbGVJZkFwcHJvcHJpYXRlKEV4ZWNTdGF0ZSogZXhlYywgT3duUHRyPENvZGVCbG9j
a1R5cGU+JiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0
VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0
KQogewogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsK
ICAgICAKQEAgLTU0LDcgKzU0LDcgQEAgaW5saW5lIGJvb2wgaml0Q29tcGlsZUlmQXBwcm9wcmlh
dGUoRXhlYwogICAgIAogICAgIGJvb2wgZGZnQ29tcGlsZWQgPSBmYWxzZTsKICAgICBpZiAoaml0
VHlwZSA9PSBKSVRDb2RlOjpERkdKSVQpCi0gICAgICAgIGRmZ0NvbXBpbGVkID0gREZHOjp0cnlD
b21waWxlKGV4ZWMsIGNvZGVCbG9jay5nZXQoKSwgaml0Q29kZSk7CisgICAgICAgIGRmZ0NvbXBp
bGVkID0gREZHOjp0cnlDb21waWxlKGV4ZWMsIGNvZGVCbG9jay5nZXQoKSwgaml0Q29kZSwgYnl0
ZWNvZGVJbmRleCk7CiAgICAgaWYgKGRmZ0NvbXBpbGVkKSB7CiAgICAgICAgIGlmIChjb2RlQmxv
Y2stPmFsdGVybmF0aXZlKCkpCiAgICAgICAgICAgICBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkt
PnVubGlua0luY29taW5nQ2FsbHMoKTsKQEAgLTc1LDcgKzc1LDcgQEAgaW5saW5lIGJvb2wgaml0
Q29tcGlsZUlmQXBwcm9wcmlhdGUoRXhlYwogICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxpbmUg
Ym9vbCBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKEV4ZWNTdGF0ZSogZXhlYywgT3du
UHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiYgY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjaywgU2hhcmVkU3ltYm9sVGFi
bGUqJiBzeW1ib2xUYWJsZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCBKSVRDb21waWxhdGlv
bkVmZm9ydCBlZmZvcnQpCitpbmxpbmUgYm9vbCBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJp
YXRlKEV4ZWNTdGF0ZSogZXhlYywgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiYgY29kZUJsb2Nr
LCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJp
dHlDaGVjaywgU2hhcmVkU3ltYm9sVGFibGUqJiBzeW1ib2xUYWJsZSwgSklUQ29kZTo6SklUVHlw
ZSBqaXRUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBKSVRDb21waWxhdGlvbkVmZm9ydCBl
ZmZvcnQpCiB7CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0
YSgpOwogICAgIApAQCAtOTIsNyArOTIsNyBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlRnVuY3Rp
b25JZkFwcHJvcHJpCiAgICAgCiAgICAgYm9vbCBkZmdDb21waWxlZCA9IGZhbHNlOwogICAgIGlm
IChqaXRUeXBlID09IEpJVENvZGU6OkRGR0pJVCkKLSAgICAgICAgZGZnQ29tcGlsZWQgPSBERkc6
OnRyeUNvbXBpbGVGdW5jdGlvbihleGVjLCBjb2RlQmxvY2suZ2V0KCksIGppdENvZGUsIGppdENv
ZGVXaXRoQXJpdHlDaGVjayk7CisgICAgICAgIGRmZ0NvbXBpbGVkID0gREZHOjp0cnlDb21waWxl
RnVuY3Rpb24oZXhlYywgY29kZUJsb2NrLmdldCgpLCBqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5
Q2hlY2ssIGJ5dGVjb2RlSW5kZXgpOwogICAgIGlmIChkZmdDb21waWxlZCkgewogICAgICAgICBp
ZiAoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKQogICAgICAgICAgICAgY29kZUJsb2NrLT5hbHRl
cm5hdGl2ZSgpLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTI1OTYzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMjIsOCArMjAyMiw3
IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplKQogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2Nv
cGVDaGFpbigpOwotICAgICAgICAKLSAgICAgICAgSlNPYmplY3QqIGVycm9yID0gY29kZUJsb2Nr
LT5jb21waWxlT3B0aW1pemVkKGNhbGxGcmFtZSwgc2NvcGVDaGFpbik7CisgICAgICAgIEpTT2Jq
ZWN0KiBlcnJvciA9IGNvZGVCbG9jay0+Y29tcGlsZU9wdGltaXplZChjYWxsRnJhbWUsIHNjb3Bl
Q2hhaW4sIGJ5dGVjb2RlSW5kZXgpOwogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCiAgICAg
ICAgIGlmIChlcnJvcikKICAgICAgICAgICAgIGRhdGFMb2coIldBUk5JTkc6IG9wdGltaXplZCBj
b21waWxhdGlvbiBmYWlsZWQuXG4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAxMjU5NjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDEz
ICsxNjAsMTMgQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmRlc3Ryb3koSlNDZWxsKgogICAg
IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpLT5GdW5jdGlvbkV4ZWN1dGFi
bGU6On5GdW5jdGlvbkV4ZWN1dGFibGUoKTsKIH0KIAotSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxl
Ojpjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3Bl
Q2hhaW5Ob2RlKQorSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkKEV4
ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCB1bnNpZ25lZCBi
eXRlY29kZUluZGV4KQogewogICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0ds
b2JhbE9iamVjdCk7CiAgICAgQVNTRVJUKCEhbV9ldmFsQ29kZUJsb2NrKTsKICAgICBKU09iamVj
dCogZXJyb3IgPSAwOwogICAgIGlmIChtX2V2YWxDb2RlQmxvY2stPmdldEpJVFR5cGUoKSAhPSBK
SVRDb2RlOjp0b3BUaWVySklUKCkpCi0gICAgICAgIGVycm9yID0gY29tcGlsZUludGVybmFsKGV4
ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpuZXh0VGllckpJVChtX2V2YWxDb2RlQmxvY2st
PmdldEpJVFR5cGUoKSkpOworICAgICAgICBlcnJvciA9IGNvbXBpbGVJbnRlcm5hbChleGVjLCBz
Y29wZUNoYWluTm9kZSwgSklUQ29kZTo6bmV4dFRpZXJKSVQobV9ldmFsQ29kZUJsb2NrLT5nZXRK
SVRUeXBlKCkpLCBieXRlY29kZUluZGV4KTsKICAgICBBU1NFUlQoISFtX2V2YWxDb2RlQmxvY2sp
OwogICAgIHJldHVybiBlcnJvcjsKIH0KQEAgLTE5Myw3ICsxOTMsNyBAQCBpbmxpbmUgY29uc3Qg
Y2hhciogc2FtcGxpbmdEZXNjcmlwdGlvbihKCiAgICAgfQogfQogCi1KU09iamVjdCogRXZhbEV4
ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2Rl
KiBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKQorSlNPYmplY3QqIEV2
YWxFeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWlu
Tm9kZSogc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCkKIHsKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbihzYW1w
bGluZ0Rlc2NyaXB0aW9uKGppdFR5cGUpKTsKICAgICAKQEAgLTIzNSw3ICsyMzUsNyBAQCBKU09i
amVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hCiAgICAgfQogCiAjaWYgRU5BQkxF
KEpJVCkKLSAgICBpZiAoIXByZXBhcmVGb3JFeGVjdXRpb24oZXhlYywgbV9ldmFsQ29kZUJsb2Nr
LCBtX2ppdENvZGVGb3JDYWxsLCBqaXRUeXBlKSkKKyAgICBpZiAoIXByZXBhcmVGb3JFeGVjdXRp
b24oZXhlYywgbV9ldmFsQ29kZUJsb2NrLCBtX2ppdENvZGVGb3JDYWxsLCBqaXRUeXBlLCBieXRl
Y29kZUluZGV4KSkKICAgICAgICAgcmV0dXJuIDA7CiAjZW5kaWYKIApAQCAtMzAxLDEzICszMDEs
MTMgQEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjaGVja1N5bnRheAogICAgIHJldHVy
biBleGNlcHRpb247CiB9CiAKLUpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZU9w
dGltaXplZChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkK
K0pTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUq
IGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCkKIHsKICAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmpl
Y3QpOwogICAgIEFTU0VSVCghIW1fcHJvZ3JhbUNvZGVCbG9jayk7CiAgICAgSlNPYmplY3QqIGVy
cm9yID0gMDsKICAgICBpZiAobV9wcm9ncmFtQ29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgIT0gSklU
Q29kZTo6dG9wVGllckpJVCgpKQotICAgICAgICBlcnJvciA9IGNvbXBpbGVJbnRlcm5hbChleGVj
LCBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6bmV4dFRpZXJKSVQobV9wcm9ncmFtQ29kZUJsb2Nr
LT5nZXRKSVRUeXBlKCkpKTsKKyAgICAgICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwoZXhlYywg
c2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6Om5leHRUaWVySklUKG1fcHJvZ3JhbUNvZGVCbG9jay0+
Z2V0SklUVHlwZSgpKSwgYnl0ZWNvZGVJbmRleCk7CiAgICAgQVNTRVJUKCEhbV9wcm9ncmFtQ29k
ZUJsb2NrKTsKICAgICByZXR1cm4gZXJyb3I7CiB9CkBAIC0zMTksNyArMzE5LDcgQEAgYm9vbCBQ
cm9ncmFtRXhlY3V0YWJsZTo6aml0Q29tcGlsZShFeGVjUwogfQogI2VuZGlmCiAKLUpTT2JqZWN0
KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgU2Nv
cGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUpCitK
U09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqIGV4
ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRU
eXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBs
aW5nUmVnaW9uKHNhbXBsaW5nRGVzY3JpcHRpb24oaml0VHlwZSkpOwogICAgIApAQCAtMzU5LDcg
KzM1OSw3IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZUludGUKICAgICB9
CiAKICNpZiBFTkFCTEUoSklUKQotICAgIGlmICghcHJlcGFyZUZvckV4ZWN1dGlvbihleGVjLCBt
X3Byb2dyYW1Db2RlQmxvY2ssIG1faml0Q29kZUZvckNhbGwsIGppdFR5cGUpKQorICAgIGlmICgh
cHJlcGFyZUZvckV4ZWN1dGlvbihleGVjLCBtX3Byb2dyYW1Db2RlQmxvY2ssIG1faml0Q29kZUZv
ckNhbGwsIGppdFR5cGUsIGJ5dGVjb2RlSW5kZXgpKQogICAgICAgICByZXR1cm4gMDsKICNlbmRp
ZgogCkBAIC00MzEsMjQgKzQzMSwyNCBAQCBGdW5jdGlvbkNvZGVCbG9jayogRnVuY3Rpb25FeGVj
dXRhYmxlOjpiCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNPYmplY3QqIEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvckNhbGwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNo
YWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCitKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpj
b21waWxlT3B0aW1pemVkRm9yQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBz
Y29wZUNoYWluTm9kZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKICAgICBBU1NFUlQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOwogICAgIEFTU0VSVCghIW1fY29k
ZUJsb2NrRm9yQ2FsbCk7CiAgICAgSlNPYmplY3QqIGVycm9yID0gMDsKICAgICBpZiAobV9jb2Rl
QmxvY2tGb3JDYWxsLT5nZXRKSVRUeXBlKCkgIT0gSklUQ29kZTo6dG9wVGllckpJVCgpKQotICAg
ICAgICBlcnJvciA9IGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUs
IEpJVENvZGU6Om5leHRUaWVySklUKG1fY29kZUJsb2NrRm9yQ2FsbC0+Z2V0SklUVHlwZSgpKSk7
CisgICAgICAgIGVycm9yID0gY29tcGlsZUZvckNhbGxJbnRlcm5hbChleGVjLCBzY29wZUNoYWlu
Tm9kZSwgSklUQ29kZTo6bmV4dFRpZXJKSVQobV9jb2RlQmxvY2tGb3JDYWxsLT5nZXRKSVRUeXBl
KCkpLCBieXRlY29kZUluZGV4KTsKICAgICBBU1NFUlQoISFtX2NvZGVCbG9ja0ZvckNhbGwpOwog
ICAgIHJldHVybiBlcnJvcjsKIH0KIAotSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29t
cGlsZU9wdGltaXplZEZvckNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2Rl
KiBzY29wZUNoYWluTm9kZSkKK0pTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVP
cHRpbWl6ZWRGb3JDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2Nv
cGVDaGFpbk5vZGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgQVNTRVJUKGV4ZWMt
Pmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKICAgICBBU1NFUlQoISFtX2NvZGVC
bG9ja0ZvckNvbnN0cnVjdCk7CiAgICAgSlNPYmplY3QqIGVycm9yID0gMDsKICAgICBpZiAobV9j
b2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjp0b3BUaWVySklU
KCkpCi0gICAgICAgIGVycm9yID0gY29tcGlsZUZvckNvbnN0cnVjdEludGVybmFsKGV4ZWMsIHNj
b3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpuZXh0VGllckpJVChtX2NvZGVCbG9ja0ZvckNvbnN0cnVj
dC0+Z2V0SklUVHlwZSgpKSk7CisgICAgICAgIGVycm9yID0gY29tcGlsZUZvckNvbnN0cnVjdElu
dGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpuZXh0VGllckpJVChtX2NvZGVC
bG9ja0ZvckNvbnN0cnVjdC0+Z2V0SklUVHlwZSgpKSwgYnl0ZWNvZGVJbmRleCk7CiAgICAgQVNT
RVJUKCEhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOwogICAgIHJldHVybiBlcnJvcjsKIH0KQEAg
LTUwMiw3ICs1MDIsNyBAQCBQYXNzT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBGdW5jdGlvbkV4
CiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKLUpTT2JqZWN0KiBGdW5jdGlvbkV4
ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNo
YWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKK0pTT2Jq
ZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRl
KiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6OkpJVFR5cGUg
aml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKICAgICBTYW1wbGluZ1JlZ2lvbiBz
YW1wbGluZ1JlZ2lvbihzYW1wbGluZ0Rlc2NyaXB0aW9uKGppdFR5cGUpKTsKICAgICAKQEAgLTUy
Niw3ICs1MjYsNyBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAg
ICAgbV9zeW1ib2xUYWJsZSA9IG1fY29kZUJsb2NrRm9yQ2FsbC0+c2hhcmVkU3ltYm9sVGFibGUo
KTsKIAogI2lmIEVOQUJMRShKSVQpCi0gICAgaWYgKCFwcmVwYXJlRnVuY3Rpb25Gb3JFeGVjdXRp
b24oZXhlYywgbV9jb2RlQmxvY2tGb3JDYWxsLCBtX2ppdENvZGVGb3JDYWxsLCBtX2ppdENvZGVG
b3JDYWxsV2l0aEFyaXR5Q2hlY2ssIG1fc3ltYm9sVGFibGUsIGppdFR5cGUsIENvZGVGb3JDYWxs
KSkKKyAgICBpZiAoIXByZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlvbihleGVjLCBtX2NvZGVCbG9j
a0ZvckNhbGwsIG1faml0Q29kZUZvckNhbGwsIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVj
aywgbV9zeW1ib2xUYWJsZSwgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCwgQ29kZUZvckNhbGwpKQog
ICAgICAgICByZXR1cm4gMDsKICNlbmRpZgogCkBAIC01NDQsNyArNTQ0LDcgQEAgSlNPYmplY3Qq
IEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvcgogICAgIHJldHVybiAwOwogfQogCi1KU09i
amVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoRXhl
Y1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6OkpJ
VFR5cGUgaml0VHlwZSkKK0pTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JD
b25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNo
YWluTm9kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4
KQogewogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKHNhbXBsaW5nRGVzY3JpcHRp
b24oaml0VHlwZSkpOwogICAgIApAQCAtNTY4LDcgKzU2OCw3IEBAIEpTT2JqZWN0KiBGdW5jdGlv
bkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKICAgICBtX3N5bWJvbFRhYmxlID0gbV9jb2RlQmxvY2tG
b3JDb25zdHJ1Y3QtPnNoYXJlZFN5bWJvbFRhYmxlKCk7CiAKICNpZiBFTkFCTEUoSklUKQotICAg
IGlmICghcHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKGV4ZWMsIG1fY29kZUJsb2NrRm9yQ29u
c3RydWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3QsIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhB
cml0eUNoZWNrLCBtX3N5bWJvbFRhYmxlLCBqaXRUeXBlLCBDb2RlRm9yQ29uc3RydWN0KSkKKyAg
ICBpZiAoIXByZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlvbihleGVjLCBtX2NvZGVCbG9ja0ZvckNv
bnN0cnVjdCwgbV9qaXRDb2RlRm9yQ29uc3RydWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRo
QXJpdHlDaGVjaywgbV9zeW1ib2xUYWJsZSwgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCwgQ29kZUZv
ckNvbnN0cnVjdCkpCiAgICAgICAgIHJldHVybiAwOwogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDEyNTk2MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzc3LDcgKzM3Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJu
IGVycm9yOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBKU09iamVjdCogY29tcGlsZU9w
dGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICBKU09iamVjdCog
Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpOwogICAgICAgICAKICNpZiBFTkFCTEUoSklUKQogICAgICAgICB2b2lkIGpl
dHRpc29uT3B0aW1pemVkQ29kZShKU0dsb2JhbERhdGEmKTsKQEAgLTQxOCw3ICs0MTgsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IFNjcmlwdEV4ZWN1dGFibGU6OlN0cnVjdHVy
ZUZsYWdzOwogICAgICAgICBFdmFsRXhlY3V0YWJsZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VD
b2RlJiwgYm9vbCk7CiAKLSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVJbnRlcm5hbChFeGVjU3Rh
dGUqLCBTY29wZUNoYWluTm9kZSosIEpJVENvZGU6OkpJVFR5cGUpOworICAgICAgICBKU09iamVj
dCogY29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgSklUQ29kZTo6
SklUVHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IFVJTlRfTUFYKTsKICAgICAgICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgICAg
IE93blB0cjxFdmFsQ29kZUJsb2NrPiBtX2V2YWxDb2RlQmxvY2s7CkBAIC00NDgsNyArNDQ4LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgICAgIH0K
IAotICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNo
YWluTm9kZSopOworICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUq
LCBTY29wZUNoYWluTm9kZSosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICAKICNp
ZiBFTkFCTEUoSklUKQogICAgICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZShKU0dsb2Jh
bERhdGEmKTsKQEAgLTQ4NSw3ICs0ODUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJl
biB8IFNjcmlwdEV4ZWN1dGFibGU6OlN0cnVjdHVyZUZsYWdzOwogICAgICAgICBQcm9ncmFtRXhl
Y3V0YWJsZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJik7CiAKLSAgICAgICAgSlNPYmpl
Y3QqIGNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIEpJVENvZGU6
OkpJVFR5cGUpOworICAgICAgICBKU09iamVjdCogY29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSos
IFNjb3BlQ2hhaW5Ob2RlKiwgSklUQ29kZTo6SklUVHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCA9IFVJTlRfTUFYKTsKICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOwogCiAgICAgICAgIE93blB0cjxQcm9ncmFtQ29kZUJsb2NrPiBtX3By
b2dyYW1Db2RlQmxvY2s7CkBAIC01NDMsNyArNTQzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgICAgIH0KIAotICAgICAgICBKU09iamVjdCogY29t
cGlsZU9wdGltaXplZEZvckNhbGwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAg
ICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3JDYWxsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hh
aW5Ob2RlKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIAogI2lmIEVOQUJMRShK
SVQpCiAgICAgICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbChKU0dsb2JhbERh
dGEmKTsKQEAgLTU3MSw3ICs1NzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJl
dHVybiBlcnJvcjsKICAgICAgICAgfQogCi0gICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1p
emVkRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIEpT
T2JqZWN0KiBjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSosIFNjb3BlQ2hh
aW5Ob2RlKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIAogI2lmIEVOQUJMRShK
SVQpCiAgICAgICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0KEpTR2xv
YmFsRGF0YSYpOwpAQCAtNjAxLDE2ICs2MDEsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICByZXR1cm4gY29tcGlsZUZvckNvbnN0cnVjdChleGVjLCBzY29wZUNoYWluTm9kZSk7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkRm9y
KEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVk
Rm9yKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCB1bnNp
Z25lZCBieXRlY29kZUluZGV4LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAgICAgICAg
IHsKICAgICAgICAgICAgIEFTU0VSVChleGVjLT5jYWxsZWUoKSk7CiAgICAgICAgICAgICBBU1NF
UlQoZXhlYy0+Y2FsbGVlKCktPmluaGVyaXRzKCZKU0Z1bmN0aW9uOjpzX2luZm8pKTsKICAgICAg
ICAgICAgIEFTU0VSVChqc0Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMtPmNhbGxlZSgpKS0+anNFeGVj
dXRhYmxlKCkgPT0gdGhpcyk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChraW5kID09
IENvZGVGb3JDYWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBjb21waWxlT3B0aW1pemVkRm9y
Q2FsbChleGVjLCBzY29wZUNoYWluTm9kZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBp
bGVPcHRpbWl6ZWRGb3JDYWxsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBieXRlY29kZUluZGV4KTsK
ICAgICAgICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgICAgICAg
ICAgcmV0dXJuIGNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QoZXhlYywgc2NvcGVDaGFpbk5v
ZGUpOworICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QoZXhl
Yywgc2NvcGVDaGFpbk5vZGUsIGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICB9CiAgICAgICAgIAog
I2lmIEVOQUJMRShKSVQpCkBAIC02OTEsOCArNjkxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIEZ1bmN0aW9uRXhlY3V0YWJsZShKU0dsb2JhbERhdGEmLCBjb25zdCBJZGVudGlmaWVyJiBu
YW1lLCBjb25zdCBJZGVudGlmaWVyJiBpbmZlcnJlZE5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmLCBi
b29sIGZvcmNlVXNlc0FyZ3VtZW50cywgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgYm9vbCk7CiAgICAg
ICAgIEZ1bmN0aW9uRXhlY3V0YWJsZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBuYW1l
LCBjb25zdCBJZGVudGlmaWVyJiBpbmZlcnJlZE5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmLCBib29s
IGZvcmNlVXNlc0FyZ3VtZW50cywgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgYm9vbCk7CiAKLSAgICAg
ICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiwgU2NvcGVDaGFp
bk5vZGUqLCBKSVRDb2RlOjpKSVRUeXBlKTsKLSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JD
b25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIEpJVENvZGU6OkpJ
VFR5cGUpOworICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNhbGxJbnRlcm5hbChFeGVjU3Rh
dGUqLCBTY29wZUNoYWluTm9kZSosIEpJVENvZGU6OkpJVFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXggPSBVSU5UX01BWCk7CisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlRm9yQ29uc3RydWN0
SW50ZXJuYWwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCBKSVRDb2RlOjpKSVRUeXBlLCB1
bnNpZ25lZCBieXRlY29kZUluZGV4ID0gVUlOVF9NQVgpOwogICAgICAgICAKICAgICAgICAgT3du
UHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiYgY29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCkKICAgICAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0aW9uSGFybmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaAkocmV2aXNpb24gMTI1OTYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0aW9uSGFybmVzcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw3ICszNiw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29k
ZUJsb2NrVHlwZT4KLWlubGluZSBib29sIHByZXBhcmVGb3JFeGVjdXRpb24oRXhlY1N0YXRlKiBl
eGVjLCBPd25QdHI8Q29kZUJsb2NrVHlwZT4mIGNvZGVCbG9jaywgSklUQ29kZSYgaml0Q29kZSwg
SklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKQoraW5saW5lIGJvb2wgcHJlcGFyZUZvckV4ZWN1dGlv
bihFeGVjU3RhdGUqIGV4ZWMsIE93blB0cjxDb2RlQmxvY2tUeXBlPiYgY29kZUJsb2NrLCBKSVRD
b2RlJiBqaXRDb2RlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgpCiB7CiAjaWYgRU5BQkxFKExMSU5UKQogICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5l
Q29kZShqaXRUeXBlKSkgewpAQCAtNDYsMTAgKzQ2LDEwIEBAIGlubGluZSBib29sIHByZXBhcmVG
b3JFeGVjdXRpb24oRXhlY1N0YXQKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlm
IC8vIEVOQUJMRShMTElOVCkKLSAgICByZXR1cm4gaml0Q29tcGlsZUlmQXBwcm9wcmlhdGUoZXhl
YywgY29kZUJsb2NrLCBqaXRDb2RlLCBqaXRUeXBlLCBKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShq
aXRUeXBlKSA/IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQgOiBKSVRDb21waWxhdGlvbkNhbkZh
aWwpOworICAgIHJldHVybiBqaXRDb21waWxlSWZBcHByb3ByaWF0ZShleGVjLCBjb2RlQmxvY2ss
IGppdENvZGUsIGppdFR5cGUsIGJ5dGVjb2RlSW5kZXgsIEpJVENvZGU6OmlzQmFzZWxpbmVDb2Rl
KGppdFR5cGUpID8gSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCA6IEpJVENvbXBpbGF0aW9uQ2Fu
RmFpbCk7CiB9CiAKLWlubGluZSBib29sIHByZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlvbihFeGVj
U3RhdGUqIGV4ZWMsIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4mIGNvZGVCbG9jaywgSklUQ29k
ZSYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ss
IFNoYXJlZFN5bWJvbFRhYmxlKiYgc3ltYm9sVGFibGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlw
ZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoraW5saW5lIGJvb2wgcHJlcGFyZUZ1bmN0
aW9uRm9yRXhlY3V0aW9uKEV4ZWNTdGF0ZSogZXhlYywgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2Nr
PiYgY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGpp
dENvZGVXaXRoQXJpdHlDaGVjaywgU2hhcmVkU3ltYm9sVGFibGUqJiBzeW1ib2xUYWJsZSwgSklU
Q29kZTo6SklUVHlwZSBqaXRUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIGtpbmQpCiB7CiAjaWYgRU5BQkxFKExMSU5UKQogICAgIGlmIChKSVRDb2Rl
Ojppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkgewpAQCAtNjEsNyArNjEsNyBAQCBpbmxpbmUgYm9v
bCBwcmVwYXJlRnVuY3Rpb25Gb3JFeGVjdXRpb24oCiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShr
aW5kKTsKICNlbmRpZiAvLyBFTkFCTEUoTExJTlQpCi0gICAgcmV0dXJuIGppdENvbXBpbGVGdW5j
dGlvbklmQXBwcm9wcmlhdGUoZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCBqaXRDb2RlV2l0aEFy
aXR5Q2hlY2ssIHN5bWJvbFRhYmxlLCBqaXRUeXBlLCBKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShq
aXRUeXBlKSA/IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQgOiBKSVRDb21waWxhdGlvbkNhbkZh
aWwpOworICAgIHJldHVybiBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKGV4ZWMsIGNv
ZGVCbG9jaywgaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBzeW1ib2xUYWJsZSwgaml0
VHlwZSwgYnl0ZWNvZGVJbmRleCwgSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkgPyBK
SVRDb21waWxhdGlvbk11c3RTdWNjZWVkIDogSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159263</attachid>
            <date>2012-08-18 12:19:15 -0700</date>
            <delta_ts>2012-08-19 14:51:33 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>currentstate_patch_2.diff</filename>
            <type>text/plain</type>
            <size>35578</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI1OTYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBA
CisyMDEyLTA4LTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGNhbGwgZnJhbWUgc2hvdWxkIGJlIHRha2VuIGludG8g
YWNjb3VudCBpbiB0aGUgREZHIGZvciBib3RoIHByZWRpY3Rpb25zIGFuZCBwcm9vZnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0NDEyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBlbnN1cmVzIHRo
YXQgbm8gbWF0dGVyIGhvdyBzbWFydCB0aGUgREZHIGdldHMsIGl0J2xsIGFsd2F5cyBrbm93IHRo
cm91Z2gKKyAgICAgICAgd2hpY2ggZW50cnlwb2ludCBPU1Igd2lsbCB0cnkgdG8gZW50ZXIsIGFu
ZCB3aXRoIHdoaWNoIHZhbHVlcyBpdCB3aWxsIGF0dGVtcHQKKyAgICAgICAgdG8gZG8gc28uIEZv
ciBwcm9sb2d1ZSBPU1IsIHRoaXMgaGFzIG5vIGVmZmVjdCBvdGhlciB0aGFuIGFkZGluZyB0aGUg
Y3VycmVudAorICAgICAgICBhcmd1bWVudHMgdG8gdGhlIGFyZ3VtZW50IHByZWRpY3Rpb25zLiBG
b3IgbG9vcCBPU1IsIHRoaXMgbWFrZXMgb3VyIHRyZWF0bWVudAorICAgICAgICBvZiB0aGUgbG9v
cCBzbGlnaHRseSBtb3JlIGNvbnNlcnZhdGl2ZSAtIGp1c3QgY29uc2VydmF0aXZlIGVub3VnaCB0
byBlbnN1cmUKKyAgICAgICAgdGhhdCBPU1Igc3VjY2VlZHMuCisKKyAgICAgICAgKiBieXRlY29k
ZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpQcm9ncmFtQ29kZUJsb2NrOjpjb21waWxl
T3B0aW1pemVkKToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6Y29tcGlsZU9wdGltaXpl
ZCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpjb21waWxlT3B0aW1pemVkKToK
KyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKENvZGVCbG9jayk6Cisg
ICAgICAgIChQcm9ncmFtQ29kZUJsb2NrKToKKyAgICAgICAgKEV2YWxDb2RlQmxvY2spOgorICAg
ICAgICAoRnVuY3Rpb25Db2RlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRl
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKToKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3Ry
YWN0VmFsdWU6OnNldE1vc3RTcGVjaWZpYyk6CisgICAgICAgIChBYnN0cmFjdFZhbHVlKToKKyAg
ICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpmaXhWYXJpYWJsZUFjY2Vzc1ByZWRpY3Rpb25zKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OnRy
eUNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OnRyeUNvbXBpbGVGdW5jdGlvbik6CisgICAg
ICAgICogZGZnL0RGR0RyaXZlci5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZH
Ojp0cnlDb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDb21waWxlRnVuY3Rpb24pOgor
ICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpHcmFw
aCk6CisgICAgICAgIChHcmFwaCk6CisgICAgICAgICogaml0L0pJVERyaXZlci5oOgorICAgICAg
ICAoSlNDOjpqaXRDb21waWxlSWZBcHByb3ByaWF0ZSk6CisgICAgICAgIChKU0M6OmppdENvbXBp
bGVGdW5jdGlvbklmQXBwcm9wcmlhdGUpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6Cisg
ICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0V4
ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGlt
aXplZCk6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwpOgor
ICAgICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZCk6CisgICAg
ICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwpOgorICAgICAgICAo
SlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWRGb3JDYWxsKToKKyAgICAg
ICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0
KToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbEludGVy
bmFsKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3Ry
dWN0SW50ZXJuYWwpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAo
RXZhbEV4ZWN1dGFibGUpOgorICAgICAgICAoUHJvZ3JhbUV4ZWN1dGFibGUpOgorICAgICAgICAo
RnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpj
b21waWxlT3B0aW1pemVkRm9yKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGlvbkhhcm5lc3Mu
aDoKKyAgICAgICAgKEpTQzo6cHJlcGFyZUZvckV4ZWN1dGlvbik6CisgICAgICAgIChKU0M6OnBy
ZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlvbik6CisKIDIwMTItMDgtMTcgIEZpbGlwIFBpemxvICA8
ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcgaXMgc3RpbGwgdG9vIHBlc3NpbWlzdGlj
IGFib3V0IHdoYXQgY29uc3RpdHV0ZXMgYSBzaWRlLWVmZmVjdCBvbiBhcnJheSBhY2Nlc3NlcwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJl
dmlzaW9uIDEyNTk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjg3LDI3ICsyNjg3LDI3IEBAIENvZGVCbG9jayog
RnVuY3Rpb25Db2RlQmxvY2s6OnJlcGxhY2VtZW4KICAgICByZXR1cm4gJnN0YXRpY19jYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Z2VuZXJhdGVkQnl0ZWNvZGVG
b3IobV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKIH0K
IAotSlNPYmplY3QqIFByb2dyYW1Db2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRl
KiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCitKU09iamVjdCogUHJvZ3Jh
bUNvZGVCbG9jazo6Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5O
b2RlKiBzY29wZUNoYWluTm9kZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKICAgICBpZiAo
cmVwbGFjZW1lbnQoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6Om5leHRUaWVySklUKGdldEpJ
VFR5cGUoKSkpCiAgICAgICAgIHJldHVybiAwOwotICAgIEpTT2JqZWN0KiBlcnJvciA9IHN0YXRp
Y19jYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb21waWxlT3B0
aW1pemVkKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKKyAgICBKU09iamVjdCogZXJyb3IgPSBzdGF0
aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29tcGlsZU9w
dGltaXplZChleGVjLCBzY29wZUNoYWluTm9kZSwgYnl0ZWNvZGVJbmRleCk7CiAgICAgcmV0dXJu
IGVycm9yOwogfQogCi1KU09iamVjdCogRXZhbENvZGVCbG9jazo6Y29tcGlsZU9wdGltaXplZChF
eGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKK0pTT2JqZWN0
KiBFdmFsQ29kZUJsb2NrOjpjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVD
aGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewogICAg
IGlmIChyZXBsYWNlbWVudCgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6bmV4dFRpZXJKSVQo
Z2V0SklUVHlwZSgpKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgSlNPYmplY3QqIGVycm9yID0g
c3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNvbXBpbGVP
cHRpbWl6ZWQoZXhlYywgc2NvcGVDaGFpbk5vZGUpOworICAgIEpTT2JqZWN0KiBlcnJvciA9IHN0
YXRpY19jYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb21waWxlT3B0
aW1pemVkKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBieXRlY29kZUluZGV4KTsKICAgICByZXR1cm4g
ZXJyb3I7CiB9CiAKLUpTT2JqZWN0KiBGdW5jdGlvbkNvZGVCbG9jazo6Y29tcGlsZU9wdGltaXpl
ZChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKK0pTT2Jq
ZWN0KiBGdW5jdGlvbkNvZGVCbG9jazo6Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqIGV4ZWMs
IFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkK
IHsKICAgICBpZiAocmVwbGFjZW1lbnQoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6Om5leHRU
aWVySklUKGdldEpJVFR5cGUoKSkpCiAgICAgICAgIHJldHVybiAwOwotICAgIEpTT2JqZWN0KiBl
cnJvciA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgp
KS0+Y29tcGlsZU9wdGltaXplZEZvcihleGVjLCBzY29wZUNoYWluTm9kZSwgbV9pc0NvbnN0cnVj
dG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKKyAgICBKU09iamVjdCogZXJy
b3IgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSkt
PmNvbXBpbGVPcHRpbWl6ZWRGb3IoZXhlYywgc2NvcGVDaGFpbk5vZGUsIGJ5dGVjb2RlSW5kZXgs
IG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7CiAgICAg
cmV0dXJuIGVycm9yOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCShyZXZpc2lvbiAxMjU5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0Miw3ICs0NDIsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGdldEpJVENvZGVX
aXRoQXJpdHlDaGVjaygpIHsgcmV0dXJuIG1faml0Q29kZVdpdGhBcml0eUNoZWNrOyB9CiAgICAg
ICAgIEpJVENvZGU6OkpJVFR5cGUgZ2V0SklUVHlwZSgpIHsgcmV0dXJuIG1faml0Q29kZS5qaXRU
eXBlKCk7IH0KICAgICAgICAgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogZXhlY3V0YWJsZU1lbW9y
eSgpIHsgcmV0dXJuIGdldEpJVENvZGUoKS5nZXRFeGVjdXRhYmxlTWVtb3J5KCk7IH0KLSAgICAg
ICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNo
YWluTm9kZSopID0gMDsKKyAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXpl
ZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpID0g
MDsKICAgICAgICAgdmlydHVhbCB2b2lkIGpldHRpc29uKCkgPSAwOwogICAgICAgICBlbnVtIEpJ
VENvbXBpbGF0aW9uUmVzdWx0IHsgQWxyZWFkeUNvbXBpbGVkLCBDb3VsZE5vdENvbXBpbGUsIENv
bXBpbGVkU3VjY2Vzc2Z1bGx5IH07CiAgICAgICAgIEpJVENvbXBpbGF0aW9uUmVzdWx0IGppdENv
bXBpbGUoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTQ0OCw3ICsxNDQ4LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIAogI2lmIEVOQUJMRShKSVQpCiAgICAgcHJvdGVjdGVkOgotICAgICAgICB2
aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5O
b2RlKik7CisgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0
YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKICAgICAgICAg
dmlydHVhbCB2b2lkIGpldHRpc29uKCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBqaXRDb21waWxl
SW1wbChFeGVjU3RhdGUqKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50
KCk7CkBAIC0xNDgzLDcgKzE0ODMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAjaWYg
RU5BQkxFKEpJVCkKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNv
bXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAgdmly
dHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9k
ZSosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlz
b24oKTsKICAgICAgICAgdmlydHVhbCBib29sIGppdENvbXBpbGVJbXBsKEV4ZWNTdGF0ZSopOwog
ICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKQEAgLTE1MjEsNyArMTUy
MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICNpZiBFTkFCTEUoSklUKQogICAgIHBy
b3RlY3RlZDoKLSAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVj
U3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21w
aWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgdW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbigpOwogICAgICAgICB2aXJ0
dWFsIGJvb2wgaml0Q29tcGlsZUltcGwoRXhlY1N0YXRlKik7CiAgICAgICAgIHZpcnR1YWwgQ29k
ZUJsb2NrKiByZXBsYWNlbWVudCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMjU5NjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTgsNiArMTU4LDE2IEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IK
ICAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdEhlYWQubG9jYWwoaSkuY2xlYXIoKTsKICAgICAg
ICAgICAgIGJsb2NrLT52YWx1ZXNBdFRhaWwubG9jYWwoaSkuY2xlYXIoKTsKICAgICAgICAgfQor
ICAgICAgICBpZiAoIWJsb2NrLT5pc09TUlRhcmdldCkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBpZiAoYmxvY2stPmJ5dGVjb2RlQmVnaW4gIT0gZ3JhcGgubV9vc3JFbnRyeUJ5dGVj
b2RlSW5kZXgpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBncmFwaC5tX211c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgIEFic3RyYWN0VmFsdWUgdmFsdWU7CisgICAgICAgICAgICB2YWx1ZS5zZXRNb3N0U3BlY2lm
aWMoZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzW2ldKTsKKyAgICAgICAgICAgIGJsb2NrLT52YWx1
ZXNBdEhlYWQub3BlcmFuZChncmFwaC5tX211c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4
KGkpKS5tZXJnZSh2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgYmxvY2stPmNmYVNob3VsZFJl
dmlzaXQgPSB0cnVlOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDEyNTk2MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zODYs
NiArMzg2LDIzIEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAgICAgCisgICAgdm9pZCBzZXRNb3N0U3BlY2lmaWMoSlNWYWx1ZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIGlmICghIXZhbHVlICYmIHZhbHVlLmlzQ2VsbCgpKSB7CisgICAgICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsK
KyAgICAgICAgICAgIG1fc3RydWN0dXJlID0gc3RydWN0dXJlOworICAgICAgICAgICAgbV91bmNs
b2JiZXJlZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgICAgICBtX3VuY2xvYmJlcmVkU3RydWN0
dXJlLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fdHlwZSA9IHNwZWN1
bGF0aW9uRnJvbVZhbHVlKHZhbHVlKTsKKyAgICAgICAgbV92YWx1ZSA9IHZhbHVlOworICAgICAg
ICAKKyAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIH0KKyAgICAKICAgICB2b2lkIHNl
dChKU1ZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUuaXND
ZWxsKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxMjU5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3
IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8UGhpU3RhY2tUeXBlIHN0YWNrVHlwZT4KICAgICB2
b2lkIHByb2Nlc3NQaGlTdGFjaygpOwogICAgIAotICAgIHZvaWQgZml4VmFyaWFibGVBY2Nlc3NT
cGVjdWxhdGlvbnMoKTsKKyAgICB2b2lkIGZpeFZhcmlhYmxlQWNjZXNzUHJlZGljdGlvbnMoKTsK
ICAgICAvLyBBZGQgc3BpbGwgbG9jYXRpb25zIHRvIG5vZGVzLgogICAgIHZvaWQgYWxsb2NhdGVW
aXJ0dWFsUmVnaXN0ZXJzKCk7CiAgICAgCkBAIC0zMDMwLDcgKzMwMzAsNyBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgIH0KIH0KIAotdm9pZCBCeXRlQ29kZVBh
cnNlcjo6Zml4VmFyaWFibGVBY2Nlc3NTcGVjdWxhdGlvbnMoKQordm9pZCBCeXRlQ29kZVBhcnNl
cjo6Zml4VmFyaWFibGVBY2Nlc3NQcmVkaWN0aW9ucygpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBkYXRhID0gJm1fZ3JhcGgubV92YXJpYWJsZUFjY2Vz
c0RhdGFbaV07CkBAIC0zMzYyLDcgKzMzNjIsMjcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2UoKQogICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5jbGVhcigpOwog
ICAgIH0KICAgICAKLSAgICBmaXhWYXJpYWJsZUFjY2Vzc1NwZWN1bGF0aW9ucygpOworICAgIGZp
eFZhcmlhYmxlQWNjZXNzUHJlZGljdGlvbnMoKTsKKyAgICAKKyAgICBmb3IgKEJsb2NrSW5kZXgg
YmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKyti
bG9ja0luZGV4KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nr
c1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBpZiAoIWJsb2NrLT5pc09TUlRhcmdldCkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBpZiAoYmxvY2stPmJ5dGVjb2RlQmVnaW4gIT0gbV9ncmFwaC5tX29z
ckVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5vcGVyYW5kKAorICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVz
Lm9wZXJhbmRGb3JJbmRleChpKSk7CisgICAgICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9k
ZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBt
X2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICBBU1NFUlQobm9kZS5oYXNMb2NhbCgpKTsK
KyAgICAgICAgICAgIG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QoCisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9ncmFwaC5tX211c3RIYW5kbGVWYWx1ZXNb
aV0pKTsKKyAgICAgICAgfQorICAgIH0KICAgICAKICAgICBtX2dyYXBoLm1fcHJlc2VydmVkVmFy
cyA9IG1fcHJlc2VydmVkVmFyczsKICAgICBtX2dyYXBoLm1fbG9jYWxWYXJzID0gbV9udW1Mb2Nh
bHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lv
biAxMjU5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgdW5zaWduZWQgZ2V0TnVtQ29tcGlsYXRpb25z
KCkKIH0KIAogZW51bSBDb21waWxlTW9kZSB7IENvbXBpbGVGdW5jdGlvbiwgQ29tcGlsZU90aGVy
IH07Ci1pbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNb2RlLCBFeGVjU3Rh
dGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIqIGppdENvZGVXaXRoQXJpdHlDaGVjaykKK2lubGluZSBib29sIGNvbXBp
bGUoQ29tcGlsZU1vZGUgY29tcGlsZU1vZGUsIEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciogaml0Q29k
ZVdpdGhBcml0eUNoZWNrLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CiAgICAg
U2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBDb21waWxhdGlvbiAoRHJpdmVyKSIp
OwogICAgIApAQCAtNjYsNiArNjYsOCBAQCBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2Rl
IGNvbXBpbGVNCiAgICAgQVNTRVJUKGNvZGVCbG9jayk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+Z2V0
SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICAKKyAgICBBU1NFUlQob3Ny
RW50cnlCeXRlY29kZUluZGV4ICE9IFVJTlRfTUFYKTsKIAogICAgIGlmICghT3B0aW9uczo6dXNl
REZHSklUKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTc0LDcgKzc2LDMwIEBAIGlubGlu
ZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU0KICAgICBkYXRhTG9nKCJERkcgY29t
cGlsaW5nIGNvZGUgYmxvY2sgJXAoJXApIGZvciBleGVjdXRhYmxlICVwLCBudW1iZXIgb2YgaW5z
dHJ1Y3Rpb25zID0gJXUuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50
KCkpOwogI2VuZGlmCiAgICAgCi0gICAgR3JhcGggZGZnKGV4ZWMtPmdsb2JhbERhdGEoKSwgY29k
ZUJsb2NrKTsKKyAgICAvLyBEZXJpdmUgb3VyIHNldCBvZiBtdXN0LWhhbmRsZSB2YWx1ZXMuIFRo
ZSBjb21waWxhdGlvbiBtdXN0IGJlIGF0IGxlYXN0IGNvbnNlcnZhdGl2ZQorICAgIC8vIGVub3Vn
aCB0byBhbGxvdyBmb3IgT1NSIGVudHJ5IHdpdGggdGhlc2UgdmFsdWVzLgorICAgIHVuc2lnbmVk
IG51bVZhcnNXaXRoVmFsdWVzOworICAgIGlmIChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCisgICAg
ICAgIG51bVZhcnNXaXRoVmFsdWVzID0gY29kZUJsb2NrLT5tX251bVZhcnM7CisgICAgZWxzZQor
ICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IDA7CisgICAgT3BlcmFuZHM8SlNWYWx1ZT4gbXVz
dEhhbmRsZVZhbHVlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyc1dpdGhWYWx1
ZXMpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7
ICsraSkgeworICAgICAgICBpbnQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZv
ckluZGV4KGkpOworICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkKKyAgICAg
ICAgICAgICYmICFvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKQorICAgICAgICAgICAgJiYgY29t
cGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uCisgICAgICAgICAgICAmJiBjb2RlQmxvY2stPnNw
ZWNpYWxpemF0aW9uS2luZCgpID09IENvZGVGb3JDb25zdHJ1Y3QpIHsKKyAgICAgICAgICAgIC8v
IFVnaC4gSWYgd2UncmUgaW4gYSBjb25zdHJ1Y3RvciwgdGhlICd0aGlzJyBhcmd1bWVudCBtYXkg
aG9sZCBnYXJiYWdlLiBJdCB3aWxsCisgICAgICAgICAgICAvLyBhbHNvIG5ldmVyIGJlIHVzZWQu
IEl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgd2UgcHV0IGludG8gdGhlIHZhbHVlIGZvciB0aGlzLAor
ICAgICAgICAgICAgLy8gYnV0IGl0IGhhcyB0byBiZSBhbiBhY3R1YWwgdmFsdWUgdGhhdCBjYW4g
YmUgZ3Jva2tlZCBieSBzdWJzZXF1ZW50IERGRyBwYXNzZXMsCisgICAgICAgICAgICAvLyBzbyB3
ZSBzYW5pdGl6ZSBpdCBoZXJlIGJ5IHR1cm5pbmcgaXQgaW50byBVbmRlZmluZWQuCisgICAgICAg
ICAgICBtdXN0SGFuZGxlVmFsdWVzW2ldID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBtdXN0SGFuZGxlVmFsdWVzW2ldID0gZXhlYy0+dW5jaGVja2VkUihvcGVy
YW5kKS5qc1ZhbHVlKCk7CisgICAgfQorICAgIAorICAgIEdyYXBoIGRmZyhleGVjLT5nbG9iYWxE
YXRhKCksIGNvZGVCbG9jaywgb3NyRW50cnlCeXRlY29kZUluZGV4LCBtdXN0SGFuZGxlVmFsdWVz
KTsKICAgICBpZiAoIXBhcnNlKGV4ZWMsIGRmZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKQEAgLTEzNywxNCArMTYyLDE0IEBAIGlubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUg
Y29tcGlsZU0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIHRyeUNvbXBpbGUoRXhlY1N0
YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSYgaml0Q29kZSkKK2Jvb2wg
dHJ5Q29tcGlsZShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2Rl
JiBqaXRDb2RlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewotICAgIHJldHVybiBjb21waWxl
KENvbXBpbGVPdGhlciwgZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCAwKTsKKyAgICByZXR1cm4g
Y29tcGlsZShDb21waWxlT3RoZXIsIGV4ZWMsIGNvZGVCbG9jaywgaml0Q29kZSwgMCwgYnl0ZWNv
ZGVJbmRleCk7CiB9CiAKLWJvb2wgdHJ5Q29tcGlsZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrKQorYm9vbCB0cnlDb21waWxlRnVuY3Rpb24oRXhl
Y1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSYgaml0Q29kZSwgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXgpCiB7Ci0gICAgcmV0dXJuIGNvbXBpbGUoQ29tcGlsZUZ1bmN0aW9uLCBleGVjLCBj
b2RlQmxvY2ssIGppdENvZGUsICZqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOworICAgIHJldHVybiBj
b21waWxlKENvbXBpbGVGdW5jdGlvbiwgZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCAmaml0Q29k
ZVdpdGhBcml0eUNoZWNrLCBieXRlY29kZUluZGV4KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCShyZXZpc2lv
biAxMjU5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSwxMSArNDEsMTEgQEAgbmFtZXNwYWNlIERGRyB7CiBKU19FWFBPUlRf
UFJJVkFURSB1bnNpZ25lZCBnZXROdW1Db21waWxhdGlvbnMoKTsKIAogI2lmIEVOQUJMRShERkdf
SklUKQotYm9vbCB0cnlDb21waWxlKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIEpJVENvZGUmKTsK
LWJvb2wgdHJ5Q29tcGlsZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIEpJVENvZGUm
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjayk7Citib29sIHRy
eUNvbXBpbGUoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgSklUQ29kZSYsIHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXgpOworYm9vbCB0cnlDb21waWxlRnVuY3Rpb24oRXhlY1N0YXRlKiwgQ29kZUJsb2Nr
KiwgSklUQ29kZSYsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNr
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKICNlbHNlCi1pbmxpbmUgYm9vbCB0cnlDb21waWxl
KEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIEpJVENvZGUmKSB7IHJldHVybiBmYWxzZTsgfQotaW5s
aW5lIGJvb2wgdHJ5Q29tcGlsZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIEpJVENv
ZGUmLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImKSB7IHJldHVybiBmYWxzZTsgfQoraW5saW5lIGJv
b2wgdHJ5Q29tcGlsZShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBKSVRDb2RlJiwgdW5zaWduZWQp
IHsgcmV0dXJuIGZhbHNlOyB9CitpbmxpbmUgYm9vbCB0cnlDb21waWxlRnVuY3Rpb24oRXhlY1N0
YXRlKiwgQ29kZUJsb2NrKiwgSklUQ29kZSYsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYsIHVuc2ln
bmVkKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDEyNTk2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5
KQpAQCAtNzYsMTEgKzc2LDEzIEBAIHN0cnVjdCBSZXNvbHZlR2xvYmFsRGF0YSB7CiAvLyBOb2Rl
cyB0aGF0IGFyZSAnZGVhZCcgcmVtYWluIGluIHRoZSB2ZWN0b3Igd2l0aCByZWZDb3VudCAwLgog
Y2xhc3MgR3JhcGggOiBwdWJsaWMgVmVjdG9yPE5vZGUsIDY0PiB7CiBwdWJsaWM6Ci0gICAgR3Jh
cGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICBH
cmFwaChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNp
Z25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0
SGFuZGxlVmFsdWVzKQogICAgICAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQogICAgICAg
ICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKICAgICAgICAgLCBtX3Byb2ZpbGVkQmxvY2soY29k
ZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKQogICAgICAgICAsIG1faGFzQXJndW1lbnRzKGZhbHNlKQor
ICAgICAgICAsIG1fb3NyRW50cnlCeXRlY29kZUluZGV4KG9zckVudHJ5Qnl0ZWNvZGVJbmRleCkK
KyAgICAgICAgLCBtX211c3RIYW5kbGVWYWx1ZXMobXVzdEhhbmRsZVZhbHVlcykKICAgICB7CiAg
ICAgICAgIEFTU0VSVChtX3Byb2ZpbGVkQmxvY2spOwogICAgIH0KQEAgLTcxMCw2ICs3MTIsOCBA
QCBwdWJsaWM6CiAgICAgRG9taW5hdG9ycyBtX2RvbWluYXRvcnM7CiAgICAgdW5zaWduZWQgbV9s
b2NhbFZhcnM7CiAgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJTbG90czsKKyAgICB1bnNpZ25lZCBt
X29zckVudHJ5Qnl0ZWNvZGVJbmRleDsKKyAgICBPcGVyYW5kczxKU1ZhbHVlPiBtX211c3RIYW5k
bGVWYWx1ZXM7CiBwcml2YXRlOgogICAgIAogICAgIHZvaWQgaGFuZGxlU3VjY2Vzc29yKFZlY3Rv
cjxCbG9ja0luZGV4LCAxNj4mIHdvcmtsaXN0LCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIEJsb2Nr
SW5kZXggc3VjY2Vzc29ySW5kZXgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVREcml2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERy
aXZlci5oCShyZXZpc2lvbiAxMjU5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VERyaXZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBACiBuYW1lc3BhY2UgSlND
IHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KLWlubGluZSBib29sIGppdENv
bXBpbGVJZkFwcHJvcHJpYXRlKEV4ZWNTdGF0ZSogZXhlYywgT3duUHRyPENvZGVCbG9ja1R5cGU+
JiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwg
SklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQoraW5saW5lIGJvb2wgaml0Q29tcGlsZUlmQXBw
cm9wcmlhdGUoRXhlY1N0YXRlKiBleGVjLCBPd25QdHI8Q29kZUJsb2NrVHlwZT4mIGNvZGVCbG9j
aywgSklUQ29kZSYgaml0Q29kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCB1bnNpZ25lZCBi
eXRlY29kZUluZGV4LCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAgICAgSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIApAQCAtNTQsNyAr
NTQsNyBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlSWZBcHByb3ByaWF0ZShFeGVjCiAgICAgCiAg
ICAgYm9vbCBkZmdDb21waWxlZCA9IGZhbHNlOwogICAgIGlmIChqaXRUeXBlID09IEpJVENvZGU6
OkRGR0pJVCkKLSAgICAgICAgZGZnQ29tcGlsZWQgPSBERkc6OnRyeUNvbXBpbGUoZXhlYywgY29k
ZUJsb2NrLmdldCgpLCBqaXRDb2RlKTsKKyAgICAgICAgZGZnQ29tcGlsZWQgPSBERkc6OnRyeUNv
bXBpbGUoZXhlYywgY29kZUJsb2NrLmdldCgpLCBqaXRDb2RlLCBieXRlY29kZUluZGV4KTsKICAg
ICBpZiAoZGZnQ29tcGlsZWQpIHsKICAgICAgICAgaWYgKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KSkKICAgICAgICAgICAgIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+dW5saW5rSW5jb21pbmdD
YWxscygpOwpAQCAtNzUsNyArNzUsNyBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlSWZBcHByb3By
aWF0ZShFeGVjCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSBib29sIGppdENvbXBpbGVG
dW5jdGlvbklmQXBwcm9wcmlhdGUoRXhlY1N0YXRlKiBleGVjLCBPd25QdHI8RnVuY3Rpb25Db2Rl
QmxvY2s+JiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBTaGFyZWRTeW1ib2xUYWJsZSomIHN5bWJvbFRhYmxl
LCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkK
K2lubGluZSBib29sIGppdENvbXBpbGVGdW5jdGlvbklmQXBwcm9wcmlhdGUoRXhlY1N0YXRlKiBl
eGVjLCBPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+JiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENv
ZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBTaGFyZWRT
eW1ib2xUYWJsZSomIHN5bWJvbFRhYmxlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgCkBAIC05
Miw3ICs5Miw3IEBAIGlubGluZSBib29sIGppdENvbXBpbGVGdW5jdGlvbklmQXBwcm9wcmkKICAg
ICAKICAgICBib29sIGRmZ0NvbXBpbGVkID0gZmFsc2U7CiAgICAgaWYgKGppdFR5cGUgPT0gSklU
Q29kZTo6REZHSklUKQotICAgICAgICBkZmdDb21waWxlZCA9IERGRzo6dHJ5Q29tcGlsZUZ1bmN0
aW9uKGV4ZWMsIGNvZGVCbG9jay5nZXQoKSwgaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNr
KTsKKyAgICAgICAgZGZnQ29tcGlsZWQgPSBERkc6OnRyeUNvbXBpbGVGdW5jdGlvbihleGVjLCBj
b2RlQmxvY2suZ2V0KCksIGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjaywgYnl0ZWNvZGVJ
bmRleCk7CiAgICAgaWYgKGRmZ0NvbXBpbGVkKSB7CiAgICAgICAgIGlmIChjb2RlQmxvY2stPmFs
dGVybmF0aXZlKCkpCiAgICAgICAgICAgICBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPnVubGlu
a0luY29taW5nQ2FsbHMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMu
Y3BwCShyZXZpc2lvbiAxMjU5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0
dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyMiw4ICsyMDIyLDcgQEAgREVGSU5FX1NUVUJf
RlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFNj
b3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7Ci0gICAg
ICAgIAotICAgICAgICBKU09iamVjdCogZXJyb3IgPSBjb2RlQmxvY2stPmNvbXBpbGVPcHRpbWl6
ZWQoY2FsbEZyYW1lLCBzY29wZUNoYWluKTsKKyAgICAgICAgSlNPYmplY3QqIGVycm9yID0gY29k
ZUJsb2NrLT5jb21waWxlT3B0aW1pemVkKGNhbGxGcmFtZSwgc2NvcGVDaGFpbiwgYnl0ZWNvZGVJ
bmRleCk7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKICAgICAgICAgaWYgKGVycm9yKQog
ICAgICAgICAgICAgZGF0YUxvZygiV0FSTklORzogb3B0aW1pemVkIGNvbXBpbGF0aW9uIGZhaWxl
ZC5cbiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5jcHAJKHJldmlzaW9uIDEyNTk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsMTMgKzE2MCwxMyBAQCB2b2lk
IEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqCiAgICAgc3RhdGljX2Nhc3Q8RnVu
Y3Rpb25FeGVjdXRhYmxlKj4oY2VsbCktPkZ1bmN0aW9uRXhlY3V0YWJsZTo6fkZ1bmN0aW9uRXhl
Y3V0YWJsZSgpOwogfQogCi1KU09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6
ZWQoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCitKU09i
amVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBT
Y29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7
CiAgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKICAg
ICBBU1NFUlQoISFtX2V2YWxDb2RlQmxvY2spOwogICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CiAg
ICAgaWYgKG1fZXZhbENvZGVCbG9jay0+Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJK
SVQoKSkKLSAgICAgICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5v
ZGUsIEpJVENvZGU6Om5leHRUaWVySklUKG1fZXZhbENvZGVCbG9jay0+Z2V0SklUVHlwZSgpKSk7
CisgICAgICAgIGVycm9yID0gY29tcGlsZUludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBK
SVRDb2RlOjpuZXh0VGllckpJVChtX2V2YWxDb2RlQmxvY2stPmdldEpJVFR5cGUoKSksIGJ5dGVj
b2RlSW5kZXgpOwogICAgIEFTU0VSVCghIW1fZXZhbENvZGVCbG9jayk7CiAgICAgcmV0dXJuIGVy
cm9yOwogfQpAQCAtMTc0LDcgKzE3NCw3IEBAIEpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29t
cGlsZU9wdGltaXoKICNpZiBFTkFCTEUoSklUKQogYm9vbCBFdmFsRXhlY3V0YWJsZTo6aml0Q29t
cGlsZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGppdENvbXBpbGVJZkFwcHJvcHJp
YXRlKGV4ZWMsIG1fZXZhbENvZGVCbG9jaywgbV9qaXRDb2RlRm9yQ2FsbCwgSklUQ29kZTo6Ym90
dG9tVGllckpJVCgpLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIHJldHVybiBqaXRDb21w
aWxlSWZBcHByb3ByaWF0ZShleGVjLCBtX2V2YWxDb2RlQmxvY2ssIG1faml0Q29kZUZvckNhbGws
IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSwgVUlOVF9NQVgsIEpJVENvbXBpbGF0aW9uQ2FuRmFp
bCk7CiB9CiAjZW5kaWYKIApAQCAtMTkzLDcgKzE5Myw3IEBAIGlubGluZSBjb25zdCBjaGFyKiBz
YW1wbGluZ0Rlc2NyaXB0aW9uKEoKICAgICB9CiB9CiAKLUpTT2JqZWN0KiBFdmFsRXhlY3V0YWJs
ZTo6Y29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3Bl
Q2hhaW5Ob2RlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUpCitKU09iamVjdCogRXZhbEV4ZWN1
dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBz
Y29wZUNoYWluTm9kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4KQogewogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKHNhbXBsaW5nRGVz
Y3JpcHRpb24oaml0VHlwZSkpOwogICAgIApAQCAtMjM1LDcgKzIzNSw3IEBAIEpTT2JqZWN0KiBF
dmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmEKICAgICB9CiAKICNpZiBFTkFCTEUoSklUKQot
ICAgIGlmICghcHJlcGFyZUZvckV4ZWN1dGlvbihleGVjLCBtX2V2YWxDb2RlQmxvY2ssIG1faml0
Q29kZUZvckNhbGwsIGppdFR5cGUpKQorICAgIGlmICghcHJlcGFyZUZvckV4ZWN1dGlvbihleGVj
LCBtX2V2YWxDb2RlQmxvY2ssIG1faml0Q29kZUZvckNhbGwsIGppdFR5cGUsIGJ5dGVjb2RlSW5k
ZXgpKQogICAgICAgICByZXR1cm4gMDsKICNlbmRpZgogCkBAIC0zMDEsMTMgKzMwMSwxMyBAQCBK
U09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNoZWNrU3ludGF4CiAgICAgcmV0dXJuIGV4Y2Vw
dGlvbjsKIH0KIAotSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVk
KEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQorSlNPYmpl
Y3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywg
U2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQog
ewogICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CiAg
ICAgQVNTRVJUKCEhbV9wcm9ncmFtQ29kZUJsb2NrKTsKICAgICBKU09iamVjdCogZXJyb3IgPSAw
OwogICAgIGlmIChtX3Byb2dyYW1Db2RlQmxvY2stPmdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjp0
b3BUaWVySklUKCkpCi0gICAgICAgIGVycm9yID0gY29tcGlsZUludGVybmFsKGV4ZWMsIHNjb3Bl
Q2hhaW5Ob2RlLCBKSVRDb2RlOjpuZXh0VGllckpJVChtX3Byb2dyYW1Db2RlQmxvY2stPmdldEpJ
VFR5cGUoKSkpOworICAgICAgICBlcnJvciA9IGNvbXBpbGVJbnRlcm5hbChleGVjLCBzY29wZUNo
YWluTm9kZSwgSklUQ29kZTo6bmV4dFRpZXJKSVQobV9wcm9ncmFtQ29kZUJsb2NrLT5nZXRKSVRU
eXBlKCkpLCBieXRlY29kZUluZGV4KTsKICAgICBBU1NFUlQoISFtX3Byb2dyYW1Db2RlQmxvY2sp
OwogICAgIHJldHVybiBlcnJvcjsKIH0KQEAgLTMxNSwxMSArMzE1LDExIEBAIEpTT2JqZWN0KiBQ
cm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGkKICNpZiBFTkFCTEUoSklUKQogYm9vbCBQcm9n
cmFtRXhlY3V0YWJsZTo6aml0Q29tcGlsZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJu
IGppdENvbXBpbGVJZkFwcHJvcHJpYXRlKGV4ZWMsIG1fcHJvZ3JhbUNvZGVCbG9jaywgbV9qaXRD
b2RlRm9yQ2FsbCwgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpLCBKSVRDb21waWxhdGlvbkNhbkZh
aWwpOworICAgIHJldHVybiBqaXRDb21waWxlSWZBcHByb3ByaWF0ZShleGVjLCBtX3Byb2dyYW1D
b2RlQmxvY2ssIG1faml0Q29kZUZvckNhbGwsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSwgVUlO
VF9NQVgsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiB9CiAjZW5kaWYKIAotSlNPYmplY3QqIFBy
b2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNo
YWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKK0pTT2Jq
ZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywg
U2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUs
IHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdS
ZWdpb24oc2FtcGxpbmdEZXNjcmlwdGlvbihqaXRUeXBlKSk7CiAgICAgCkBAIC0zNTksNyArMzU5
LDcgQEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZQogICAgIH0KIAog
I2lmIEVOQUJMRShKSVQpCi0gICAgaWYgKCFwcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWMsIG1fcHJv
Z3JhbUNvZGVCbG9jaywgbV9qaXRDb2RlRm9yQ2FsbCwgaml0VHlwZSkpCisgICAgaWYgKCFwcmVw
YXJlRm9yRXhlY3V0aW9uKGV4ZWMsIG1fcHJvZ3JhbUNvZGVCbG9jaywgbV9qaXRDb2RlRm9yQ2Fs
bCwgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCkpCiAgICAgICAgIHJldHVybiAwOwogI2VuZGlmCiAK
QEAgLTQzMSwyNCArNDMxLDI0IEBAIEZ1bmN0aW9uQ29kZUJsb2NrKiBGdW5jdGlvbkV4ZWN1dGFi
bGU6OmIKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU09iamVjdCogRnVuY3Rpb25FeGVjdXRh
YmxlOjpjb21waWxlT3B0aW1pemVkRm9yQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5O
b2RlKiBzY29wZUNoYWluTm9kZSkKK0pTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBp
bGVPcHRpbWl6ZWRGb3JDYWxsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3Bl
Q2hhaW5Ob2RlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewogICAgIEFTU0VSVChleGVjLT5n
bG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CiAgICAgQVNTRVJUKCEhbV9jb2RlQmxv
Y2tGb3JDYWxsKTsKICAgICBKU09iamVjdCogZXJyb3IgPSAwOwogICAgIGlmIChtX2NvZGVCbG9j
a0ZvckNhbGwtPmdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjp0b3BUaWVySklUKCkpCi0gICAgICAg
IGVycm9yID0gY29tcGlsZUZvckNhbGxJbnRlcm5hbChleGVjLCBzY29wZUNoYWluTm9kZSwgSklU
Q29kZTo6bmV4dFRpZXJKSVQobV9jb2RlQmxvY2tGb3JDYWxsLT5nZXRKSVRUeXBlKCkpKTsKKyAg
ICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ2FsbEludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2Rl
LCBKSVRDb2RlOjpuZXh0VGllckpJVChtX2NvZGVCbG9ja0ZvckNhbGwtPmdldEpJVFR5cGUoKSks
IGJ5dGVjb2RlSW5kZXgpOwogICAgIEFTU0VSVCghIW1fY29kZUJsb2NrRm9yQ2FsbCk7CiAgICAg
cmV0dXJuIGVycm9yOwogfQogCi1KU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxl
T3B0aW1pemVkRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNj
b3BlQ2hhaW5Ob2RlKQorSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGlt
aXplZEZvckNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNo
YWluTm9kZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKICAgICBBU1NFUlQoZXhlYy0+Z2xv
YmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOwogICAgIEFTU0VSVCghIW1fY29kZUJsb2Nr
Rm9yQ29uc3RydWN0KTsKICAgICBKU09iamVjdCogZXJyb3IgPSAwOwogICAgIGlmIChtX2NvZGVC
bG9ja0ZvckNvbnN0cnVjdC0+Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkK
LSAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoZXhlYywgc2NvcGVD
aGFpbk5vZGUsIEpJVENvZGU6Om5leHRUaWVySklUKG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5n
ZXRKSVRUeXBlKCkpKTsKKyAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJu
YWwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6Om5leHRUaWVySklUKG1fY29kZUJsb2Nr
Rm9yQ29uc3RydWN0LT5nZXRKSVRUeXBlKCkpLCBieXRlY29kZUluZGV4KTsKICAgICBBU1NFUlQo
ISFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7CiAgICAgcmV0dXJuIGVycm9yOwogfQpAQCAtNDU2
LDEyICs0NTYsMTIgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdAog
I2lmIEVOQUJMRShKSVQpCiBib29sIEZ1bmN0aW9uRXhlY3V0YWJsZTo6aml0Q29tcGlsZUZvckNh
bGwoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBqaXRDb21waWxlRnVuY3Rpb25JZkFw
cHJvcHJpYXRlKGV4ZWMsIG1fY29kZUJsb2NrRm9yQ2FsbCwgbV9qaXRDb2RlRm9yQ2FsbCwgbV9q
aXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLCBtX3N5bWJvbFRhYmxlLCBKSVRDb2RlOjpib3R0
b21UaWVySklUKCksIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgcmV0dXJuIGppdENvbXBp
bGVGdW5jdGlvbklmQXBwcm9wcmlhdGUoZXhlYywgbV9jb2RlQmxvY2tGb3JDYWxsLCBtX2ppdENv
ZGVGb3JDYWxsLCBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2ssIG1fc3ltYm9sVGFibGUs
IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSwgVUlOVF9NQVgsIEpJVENvbXBpbGF0aW9uQ2FuRmFp
bCk7CiB9CiAKIGJvb2wgRnVuY3Rpb25FeGVjdXRhYmxlOjpqaXRDb21waWxlRm9yQ29uc3RydWN0
KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHBy
b3ByaWF0ZShleGVjLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCwgbV9qaXRDb2RlRm9yQ29uc3Ry
dWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjaywgbV9zeW1ib2xUYWJsZSwg
SklUQ29kZTo6Ym90dG9tVGllckpJVCgpLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIHJl
dHVybiBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKGV4ZWMsIG1fY29kZUJsb2NrRm9y
Q29uc3RydWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3QsIG1faml0Q29kZUZvckNvbnN0cnVjdFdp
dGhBcml0eUNoZWNrLCBtX3N5bWJvbFRhYmxlLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCksIFVJ
TlRfTUFYLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogfQogI2VuZGlmCiAKQEAgLTUwMiw3ICs1
MDIsNyBAQCBQYXNzT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBGdW5jdGlvbkV4CiAgICAgcmV0
dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKLUpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6
OmNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSog
c2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKK0pTT2JqZWN0KiBGdW5j
dGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBT
Y29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1Jl
Z2lvbihzYW1wbGluZ0Rlc2NyaXB0aW9uKGppdFR5cGUpKTsKICAgICAKQEAgLTUyNiw3ICs1MjYs
NyBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAgICAgbV9zeW1i
b2xUYWJsZSA9IG1fY29kZUJsb2NrRm9yQ2FsbC0+c2hhcmVkU3ltYm9sVGFibGUoKTsKIAogI2lm
IEVOQUJMRShKSVQpCi0gICAgaWYgKCFwcmVwYXJlRnVuY3Rpb25Gb3JFeGVjdXRpb24oZXhlYywg
bV9jb2RlQmxvY2tGb3JDYWxsLCBtX2ppdENvZGVGb3JDYWxsLCBtX2ppdENvZGVGb3JDYWxsV2l0
aEFyaXR5Q2hlY2ssIG1fc3ltYm9sVGFibGUsIGppdFR5cGUsIENvZGVGb3JDYWxsKSkKKyAgICBp
ZiAoIXByZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlvbihleGVjLCBtX2NvZGVCbG9ja0ZvckNhbGws
IG1faml0Q29kZUZvckNhbGwsIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaywgbV9zeW1i
b2xUYWJsZSwgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCwgQ29kZUZvckNhbGwpKQogICAgICAgICBy
ZXR1cm4gMDsKICNlbmRpZgogCkBAIC01NDQsNyArNTQ0LDcgQEAgSlNPYmplY3QqIEZ1bmN0aW9u
RXhlY3V0YWJsZTo6Y29tcGlsZUZvcgogICAgIHJldHVybiAwOwogfQogCi1KU09iamVjdCogRnVu
Y3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoRXhlY1N0YXRlKiBl
eGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0
VHlwZSkKK0pTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJ
bnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwg
SklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewogICAg
IFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKHNhbXBsaW5nRGVzY3JpcHRpb24oaml0VHlw
ZSkpOwogICAgIApAQCAtNTY4LDcgKzU2OCw3IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFi
bGU6OmNvbXBpbGVGb3IKICAgICBtX3N5bWJvbFRhYmxlID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1
Y3QtPnNoYXJlZFN5bWJvbFRhYmxlKCk7CiAKICNpZiBFTkFCTEUoSklUKQotICAgIGlmICghcHJl
cGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKGV4ZWMsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LCBt
X2ppdENvZGVGb3JDb25zdHJ1Y3QsIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNr
LCBtX3N5bWJvbFRhYmxlLCBqaXRUeXBlLCBDb2RlRm9yQ29uc3RydWN0KSkKKyAgICBpZiAoIXBy
ZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlvbihleGVjLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCwg
bV9qaXRDb2RlRm9yQ29uc3RydWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVj
aywgbV9zeW1ib2xUYWJsZSwgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCwgQ29kZUZvckNvbnN0cnVj
dCkpCiAgICAgICAgIHJldHVybiAwOwogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDEyNTk2MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzc3
LDcgKzM3Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGVycm9yOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChF
eGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICBKU09iamVjdCogY29tcGlsZU9w
dGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgpOwogICAgICAgICAKICNpZiBFTkFCTEUoSklUKQogICAgICAgICB2b2lkIGpldHRpc29uT3B0
aW1pemVkQ29kZShKU0dsb2JhbERhdGEmKTsKQEAgLTQxOCw3ICs0MTgsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3Zl
cnJpZGVzVmlzaXRDaGlsZHJlbiB8IFNjcmlwdEV4ZWN1dGFibGU6OlN0cnVjdHVyZUZsYWdzOwog
ICAgICAgICBFdmFsRXhlY3V0YWJsZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgYm9v
bCk7CiAKLSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqLCBTY29w
ZUNoYWluTm9kZSosIEpJVENvZGU6OkpJVFR5cGUpOworICAgICAgICBKU09iamVjdCogY29tcGls
ZUludGVybmFsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgSklUQ29kZTo6SklUVHlwZSwg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IFVJTlRfTUFYKTsKICAgICAgICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgICAgIE93blB0cjxF
dmFsQ29kZUJsb2NrPiBtX2V2YWxDb2RlQmxvY2s7CkBAIC00NDgsNyArNDQ4LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgICAgIH0KIAotICAgICAg
ICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSop
OworICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNo
YWluTm9kZSosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICAKICNpZiBFTkFCTEUo
SklUKQogICAgICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZShKU0dsb2JhbERhdGEmKTsK
QEAgLTQ4NSw3ICs0ODUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IFNjcmlw
dEV4ZWN1dGFibGU6OlN0cnVjdHVyZUZsYWdzOwogICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZShF
eGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJik7CiAKLSAgICAgICAgSlNPYmplY3QqIGNvbXBp
bGVJbnRlcm5hbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIEpJVENvZGU6OkpJVFR5cGUp
OworICAgICAgICBKU09iamVjdCogY29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hh
aW5Ob2RlKiwgSklUQ29kZTo6SklUVHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IFVJTlRf
TUFYKTsKICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOwogCiAgICAgICAgIE93blB0cjxQcm9ncmFtQ29kZUJsb2NrPiBtX3Byb2dyYW1Db2Rl
QmxvY2s7CkBAIC01NDMsNyArNTQzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3I7CiAgICAgICAgIH0KIAotICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGlt
aXplZEZvckNhbGwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAgSlNPYmpl
Y3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3JDYWxsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIAogI2lmIEVOQUJMRShKSVQpCiAgICAg
ICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbChKU0dsb2JhbERhdGEmKTsKQEAg
LTU3MSw3ICs1NzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBlcnJv
cjsKICAgICAgICAgfQogCi0gICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkRm9yQ29u
c3RydWN0KEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIEpTT2JqZWN0KiBj
b21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIAogI2lmIEVOQUJMRShKSVQpCiAgICAg
ICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0KEpTR2xvYmFsRGF0YSYp
OwpAQCAtNjAxLDE2ICs2MDEsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1
cm4gY29tcGlsZUZvckNvbnN0cnVjdChleGVjLCBzY29wZUNoYWluTm9kZSk7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkRm9yKEV4ZWNTdGF0
ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQpCisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkRm9yKEV4ZWNT
dGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCB1bnNpZ25lZCBieXRl
Y29kZUluZGV4LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIEFTU0VSVChleGVjLT5jYWxsZWUoKSk7CiAgICAgICAgICAgICBBU1NFUlQoZXhlYy0+
Y2FsbGVlKCktPmluaGVyaXRzKCZKU0Z1bmN0aW9uOjpzX2luZm8pKTsKICAgICAgICAgICAgIEFT
U0VSVChqc0Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMtPmNhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCkg
PT0gdGhpcyk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JD
YWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBjb21waWxlT3B0aW1pemVkRm9yQ2FsbChleGVj
LCBzY29wZUNoYWluTm9kZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVPcHRpbWl6
ZWRGb3JDYWxsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBieXRlY29kZUluZGV4KTsKICAgICAgICAg
ICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgICAgICAgICAgcmV0dXJu
IGNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QoZXhlYywgc2NvcGVDaGFpbk5vZGUpOworICAg
ICAgICAgICAgcmV0dXJuIGNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QoZXhlYywgc2NvcGVD
aGFpbk5vZGUsIGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICB9CiAgICAgICAgIAogI2lmIEVOQUJM
RShKSVQpCkBAIC02OTEsOCArNjkxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEZ1bmN0
aW9uRXhlY3V0YWJsZShKU0dsb2JhbERhdGEmLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBjb25z
dCBJZGVudGlmaWVyJiBpbmZlcnJlZE5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmLCBib29sIGZvcmNl
VXNlc0FyZ3VtZW50cywgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgYm9vbCk7CiAgICAgICAgIEZ1bmN0
aW9uRXhlY3V0YWJsZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBjb25zdCBJ
ZGVudGlmaWVyJiBpbmZlcnJlZE5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmLCBib29sIGZvcmNlVXNl
c0FyZ3VtZW50cywgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgYm9vbCk7CiAKLSAgICAgICAgSlNPYmpl
Y3QqIGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCBK
SVRDb2RlOjpKSVRUeXBlKTsKLSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDb25zdHJ1Y3RJ
bnRlcm5hbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIEpJVENvZGU6OkpJVFR5cGUpOwor
ICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNhbGxJbnRlcm5hbChFeGVjU3RhdGUqLCBTY29w
ZUNoYWluTm9kZSosIEpJVENvZGU6OkpJVFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBV
SU5UX01BWCk7CisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwo
RXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCBKSVRDb2RlOjpKSVRUeXBlLCB1bnNpZ25lZCBi
eXRlY29kZUluZGV4ID0gVUlOVF9NQVgpOwogICAgICAgICAKICAgICAgICAgT3duUHRyPEZ1bmN0
aW9uQ29kZUJsb2NrPiYgY29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkK
ICAgICAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0aW9u
SGFybmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
ZWN1dGlvbkhhcm5lc3MuaAkocmV2aXNpb24gMTI1OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0aW9uSGFybmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICsz
Niw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlw
ZT4KLWlubGluZSBib29sIHByZXBhcmVGb3JFeGVjdXRpb24oRXhlY1N0YXRlKiBleGVjLCBPd25Q
dHI8Q29kZUJsb2NrVHlwZT4mIGNvZGVCbG9jaywgSklUQ29kZSYgaml0Q29kZSwgSklUQ29kZTo6
SklUVHlwZSBqaXRUeXBlKQoraW5saW5lIGJvb2wgcHJlcGFyZUZvckV4ZWN1dGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIE93blB0cjxDb2RlQmxvY2tUeXBlPiYgY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRD
b2RlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7
CiAjaWYgRU5BQkxFKExMSU5UKQogICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRU
eXBlKSkgewpAQCAtNDYsMTAgKzQ2LDEwIEBAIGlubGluZSBib29sIHByZXBhcmVGb3JFeGVjdXRp
b24oRXhlY1N0YXQKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmIC8vIEVOQUJM
RShMTElOVCkKLSAgICByZXR1cm4gaml0Q29tcGlsZUlmQXBwcm9wcmlhdGUoZXhlYywgY29kZUJs
b2NrLCBqaXRDb2RlLCBqaXRUeXBlLCBKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSA/
IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQgOiBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAg
IHJldHVybiBqaXRDb21waWxlSWZBcHByb3ByaWF0ZShleGVjLCBjb2RlQmxvY2ssIGppdENvZGUs
IGppdFR5cGUsIGJ5dGVjb2RlSW5kZXgsIEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUp
ID8gSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCA6IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiB9
CiAKLWlubGluZSBib29sIHByZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlvbihFeGVjU3RhdGUqIGV4
ZWMsIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4mIGNvZGVCbG9jaywgSklUQ29kZSYgaml0Q29k
ZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIFNoYXJlZFN5
bWJvbFRhYmxlKiYgc3ltYm9sVGFibGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kKQoraW5saW5lIGJvb2wgcHJlcGFyZUZ1bmN0aW9uRm9yRXhl
Y3V0aW9uKEV4ZWNTdGF0ZSogZXhlYywgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiYgY29kZUJs
b2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRo
QXJpdHlDaGVjaywgU2hhcmVkU3ltYm9sVGFibGUqJiBzeW1ib2xUYWJsZSwgSklUQ29kZTo6SklU
VHlwZSBqaXRUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQpCiB7CiAjaWYgRU5BQkxFKExMSU5UKQogICAgIGlmIChKSVRDb2RlOjppc0Jhc2Vs
aW5lQ29kZShqaXRUeXBlKSkgewpAQCAtNjEsNyArNjEsNyBAQCBpbmxpbmUgYm9vbCBwcmVwYXJl
RnVuY3Rpb25Gb3JFeGVjdXRpb24oCiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShraW5kKTsKICNl
bmRpZiAvLyBFTkFCTEUoTExJTlQpCi0gICAgcmV0dXJuIGppdENvbXBpbGVGdW5jdGlvbklmQXBw
cm9wcmlhdGUoZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ss
IHN5bWJvbFRhYmxlLCBqaXRUeXBlLCBKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSA/
IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQgOiBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAg
IHJldHVybiBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKGV4ZWMsIGNvZGVCbG9jaywg
aml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBzeW1ib2xUYWJsZSwgaml0VHlwZSwgYnl0
ZWNvZGVJbmRleCwgSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkgPyBKSVRDb21waWxh
dGlvbk11c3RTdWNjZWVkIDogSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCg==
</data>
<flag name="review"
          id="169541"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>