<?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>85246</bug_id>
          
          <creation_ts>2012-04-30 16:40:03 -0700</creation_ts>
          <short_desc>Bytecode dumps should contain data about the state of get_by_id caches</short_desc>
          <delta_ts>2012-05-21 15:32:21 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gustavo</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>613056</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-30 16:40:03 -0700</bug_when>
    <thetext>Currently bytecode dumping has some code to print the state of StructureStubInfo&apos;s, but that code has rotted, and is does not provide very many details - for example it will not tell you the offsets that we are using, and it will not tell you the full chains (for prototype accesses) or lists (for polymorphic accesses) being used.

As well, the old dumping code prints structure stub information out-of-line, which makes it a bit harder to grok.

The old code (which is rotten) should be axed, and replaced by something more informative.

Finally, it should be possible for the DFG to dump bytecode during parsing, so that we can see exactly what the DFG sees when making its optimization decisions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>613066</commentid>
    <comment_count>1</comment_count>
      <attachid>139545</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-30 16:47:51 -0700</bug_when>
    <thetext>Created attachment 139545
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>613075</commentid>
    <comment_count>2</comment_count>
      <attachid>139545</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-04-30 17:03:52 -0700</bug_when>
    <thetext>Comment on attachment 139545
the patch

Attachment 139545 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/12597247</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>613091</commentid>
    <comment_count>3</comment_count>
      <attachid>139545</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-04-30 17:28:24 -0700</bug_when>
    <thetext>Comment on attachment 139545
the patch

Attachment 139545 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12592402</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>613096</commentid>
    <comment_count>4</comment_count>
      <attachid>139545</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-04-30 17:37:50 -0700</bug_when>
    <thetext>Comment on attachment 139545
the patch

Attachment 139545 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12593390</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>613098</commentid>
    <comment_count>5</comment_count>
      <attachid>139545</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-04-30 17:38:42 -0700</bug_when>
    <thetext>Comment on attachment 139545
the patch

Attachment 139545 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12582472</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>613104</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-30 17:48:05 -0700</bug_when>
    <thetext>Landed (with build fixes) in http://trac.webkit.org/changeset/115694</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629564</commentid>
    <comment_count>7</comment_count>
      <attachid>143111</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-21 15:14:06 -0700</bug_when>
    <thetext>Created attachment 143111
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629602</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-21 15:32:21 -0700</bug_when>
    <thetext>Merged in http://trac.webkit.org/changeset/117823</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139545</attachid>
            <date>2012-04-30 16:47:51 -0700</date>
            <delta_ts>2012-05-21 15:14:06 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>dumpgetbyid_patch_1.diff</filename>
            <type>text/plain</type>
            <size>48458</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE1Njg4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg3IEBA
CisyMDEyLTA0LTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Qnl0ZWNvZGUgZHVtcHMgc2hvdWxkIGNvbnRhaW4gZGF0YSBhYm91dCB0aGUgc3RhdGUgb2YgZ2V0
X2J5X2lkIGNhY2hlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODUyNDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAg
ICAgCisgICAgICAgIENoYW5nZWQgdGhlIERGRyBieXRlY29kZSBwYXJzZXIgKGFuZCB0aGUgY29k
ZSB0aGF0IGNhbGxzIGl0KSB0byBiZSBhYmxlCisgICAgICAgIHRvIGNhbGwgY29kZUJsb2NrLT5k
dW1wKCkgb24gdGhlIGNvZGUgYmxvY2tzIGJlaW5nIHBhcnNlZC4KKyAgICAgICAgCisgICAgICAg
IENoYW5nZWQgYnl0ZWNvZGUgZHVtcGluZyB0byBiZSBhYmxlIHRvIHByaW50IHRoZSBzdGF0ZSBv
ZiBnZXRfYnlfaWQKKyAgICAgICAgY2FjaGVzIGlubGluZSB3aXRoIHRoZSBieXRlY29kZS4KKyAg
ICAgICAgCisgICAgICAgIFJlbW92ZWQgdGhlIG9sZCBTdHJ1Y3R1cmVTdHViSW5mbyBkdW1waW5n
IGNvZGUsIHdoaWNoIG5vIGxvbmdlciB3b3JrZWQKKyAgICAgICAgcmlnaHQsIGFuZCB3YXMgaW5j
YXBhYmxlIG9mIHRlbGxpbmcgdXMgaW5mb3JtYXRpb24gYWJvdXQgY2hhaW4gYW5kIGxpc3QKKyAg
ICAgICAgYWNjZXNzZXMuCisgICAgICAgIAorICAgICAgICBUaGlzIGNoYW5nZSBkb2VzIG5vdCBh
ZGQgZHVtcGluZyBmb3IgcHV0X2J5X2lkIGNhY2hlcy4gV2UgY2FuIGFkZCB0aGF0CisgICAgICAg
IGF0IGEgbGF0ZXIgdGltZS4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJpbnRVbmFyeU9wKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpwcmludEJpbmFyeU9wKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludENv
bmRpdGlvbmFsSnVtcCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJpbnRHZXRCeUlkT3Ap
OgorICAgICAgICAoSlNDOjpkdW1wU3RydWN0dXJlKToKKyAgICAgICAgKEpTQyk6CisgICAgICAg
IChKU0M6OmR1bXBDaGFpbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJpbnRHZXRCeUlk
Q2FjaGVTdGF0dXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByaW50Q2FsbE9wKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludFB1dEJ5SWRPcCk6CisgICAgICAgIChKU0M6OnBy
aW50R2xvYmFsUmVzb2x2ZUluZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByaW50U3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludFN0cnVjdHVyZXMpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZp
c2l0U3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6OmppdENvbXBp
bGVJbXBsKToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6aml0Q29tcGlsZUltcGwpOgor
ICAgICAgICAoSlNDOjpGdW5jdGlvbkNvZGVCbG9jazo6aml0Q29tcGlsZUltcGwpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoQ29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpqaXRDb21waWxlKToKKyAgICAgICAgKFByb2dyYW1Db2RlQmxvY2sp
OgorICAgICAgICAoRXZhbENvZGVCbG9jayk6CisgICAgICAgIChGdW5jdGlvbkNvZGVCbG9jayk6
CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6Qnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoQnl0ZUNvZGVQYXJz
ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jayk6
CisgICAgICAgIChKU0M6OkRGRzo6cGFyc2UpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBh
cnNlci5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDb21waWxl
KToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDb21waWxlRnVuY3Rpb24pOgorICAgICAgICAqIGRm
Zy9ERkdEcml2ZXIuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q29t
cGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAg
KiBkZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKiBqaXQvSklURHJpdmVyLmg6
CisgICAgICAgIChKU0M6OmppdENvbXBpbGVJZkFwcHJvcHJpYXRlKToKKyAgICAgICAgKEpTQzo6
aml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0ZSk6CisgICAgICAgICogbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6aml0Q29tcGlsZUFuZFNldEhldXJp
c3RpY3MpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6
OkV2YWxFeGVjdXRhYmxlOjpqaXRDb21waWxlKToKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFi
bGU6OmNvbXBpbGVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpq
aXRDb21waWxlKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRl
cm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6aml0Q29tcGlsZUZvckNh
bGwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmppdENvbXBpbGVGb3JDb25z
dHJ1Y3QpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxs
SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JD
b25zdHJ1Y3RJbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAg
ICAgIChFdmFsRXhlY3V0YWJsZSk6CisgICAgICAgIChQcm9ncmFtRXhlY3V0YWJsZSk6CisgICAg
ICAgIChGdW5jdGlvbkV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFi
bGU6OmppdENvbXBpbGVGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0aW9uSGFybmVzcy5o
OgorICAgICAgICAoSlNDOjpwcmVwYXJlRm9yRXhlY3V0aW9uKToKKyAgICAgICAgKEpTQzo6cHJl
cGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKToKKwogMjAxMi0wNC0yOSAgRmlsaXAgUGl6bG8gIDxm
cGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFByZWRpY3RlZCB0eXBlcyBzaG91bGQga25vdyBh
Ym91dCBhcmd1bWVudHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCShyZXZpc2lvbiAxMTQ1NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQAog
I2luY2x1ZGUgIkpTU3RhdGljU2NvcGVPYmplY3QuaCIKICNpbmNsdWRlICJKU1ZhbHVlLmgiCiAj
aW5jbHVkZSAiTG93TGV2ZWxJbnRlcnByZXRlci5oIgorI2luY2x1ZGUgIk1ldGhvZENhbGxMaW5r
U3RhdHVzLmgiCiAjaW5jbHVkZSAiUmVwYXRjaEJ1ZmZlci5oIgogI2luY2x1ZGUgIlVTdHJpbmdD
b25jYXRlbmF0ZS5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC0xNTAsNyArMTUxLDcgQEAgTkVW
RVJfSU5MSU5FIHN0YXRpYyBjb25zdCBjaGFyKiBkZWJ1Z0hvbwogICAgIHJldHVybiAiIjsKIH0K
IAotdm9pZCBDb2RlQmxvY2s6OnByaW50VW5hcnlPcChFeGVjU3RhdGUqIGV4ZWMsIGludCBsb2Nh
dGlvbiwgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImIGl0LCBjb25zdCBjaGFy
KiBvcCkgY29uc3QKK3ZvaWQgQ29kZUJsb2NrOjpwcmludFVuYXJ5T3AoRXhlY1N0YXRlKiBleGVj
LCBpbnQgbG9jYXRpb24sIFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJiBpdCwg
Y29uc3QgY2hhciogb3ApCiB7CiAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAg
aW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CkBAIC0xNTgsNyArMTU5LDcgQEAgdm9pZCBDb2Rl
QmxvY2s6OnByaW50VW5hcnlPcChFeGVjU3RhdGUqIAogICAgIGRhdGFMb2coIlslNGRdICVzXHRc
dCAlcywgJXNcbiIsIGxvY2F0aW9uLCBvcCwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCks
IHJlZ2lzdGVyTmFtZShleGVjLCByMSkuZGF0YSgpKTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnBy
aW50QmluYXJ5T3AoRXhlY1N0YXRlKiBleGVjLCBpbnQgbG9jYXRpb24sIFZlY3RvcjxJbnN0cnVj
dGlvbj46OmNvbnN0X2l0ZXJhdG9yJiBpdCwgY29uc3QgY2hhciogb3ApIGNvbnN0Cit2b2lkIENv
ZGVCbG9jazo6cHJpbnRCaW5hcnlPcChFeGVjU3RhdGUqIGV4ZWMsIGludCBsb2NhdGlvbiwgVmVj
dG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImIGl0LCBjb25zdCBjaGFyKiBvcCkKIHsK
ICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICBpbnQgcjEgPSAoKytpdCktPnUu
b3BlcmFuZDsKQEAgLTE2NiwyMyArMTY3LDIxMCBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRCaW5h
cnlPcChFeGVjU3RhdGUqCiAgICAgZGF0YUxvZygiWyU0ZF0gJXNcdFx0ICVzLCAlcywgJXNcbiIs
IGxvY2F0aW9uLCBvcCwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFt
ZShleGVjLCByMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZXhlYywgcjIpLmRhdGEoKSk7CiB9CiAK
LXZvaWQgQ29kZUJsb2NrOjpwcmludENvbmRpdGlvbmFsSnVtcChFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJiwgVmVjdG9yPEluc3RydWN0
aW9uPjo6Y29uc3RfaXRlcmF0b3ImIGl0LCBpbnQgbG9jYXRpb24sIGNvbnN0IGNoYXIqIG9wKSBj
b25zdAordm9pZCBDb2RlQmxvY2s6OnByaW50Q29uZGl0aW9uYWxKdW1wKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImLCBWZWN0b3I8SW5z
dHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYgaXQsIGludCBsb2NhdGlvbiwgY29uc3QgY2hhciog
b3ApCiB7CiAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgaW50IG9mZnNldCA9
ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgIGRhdGFMb2coIlslNGRdICVzXHRcdCAlcywgJWQoLT4l
ZClcbiIsIGxvY2F0aW9uLCBvcCwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCksIG9mZnNl
dCwgbG9jYXRpb24gKyBvZmZzZXQpOwogfQogCi12b2lkIENvZGVCbG9jazo6cHJpbnRHZXRCeUlk
T3AoRXhlY1N0YXRlKiBleGVjLCBpbnQgbG9jYXRpb24sIFZlY3RvcjxJbnN0cnVjdGlvbj46OmNv
bnN0X2l0ZXJhdG9yJiBpdCwgY29uc3QgY2hhciogb3ApIGNvbnN0Cit2b2lkIENvZGVCbG9jazo6
cHJpbnRHZXRCeUlkT3AoRXhlY1N0YXRlKiBleGVjLCBpbnQgbG9jYXRpb24sIFZlY3RvcjxJbnN0
cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJiBpdCkKIHsKKyAgICBjb25zdCBjaGFyKiBvcDsKKyAg
ICBzd2l0Y2ggKGV4ZWMtPmludGVycHJldGVyKCktPmdldE9wY29kZUlEKGl0LT51Lm9wY29kZSkp
IHsKKyAgICBjYXNlIG9wX2dldF9ieV9pZDoKKyAgICAgICAgb3AgPSAiZ2V0X2J5X2lkIjsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfc2VsZjoKKyAgICAgICAgb3AgPSAi
Z2V0X2J5X2lkX3NlbGYiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9w
cm90bzoKKyAgICAgICAgb3AgPSAiZ2V0X2J5X2lkX3Byb3RvIjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9nZXRfYnlfaWRfY2hhaW46CisgICAgICAgIG9wID0gImdldF9ieV9pZF9jaGFp
biI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRlcl9zZWxmOgor
ICAgICAgICBvcCA9ICJnZXRfYnlfaWRfZ2V0dGVyX3NlbGYiOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIG9wX2dldF9ieV9pZF9nZXR0ZXJfcHJvdG86CisgICAgICAgIG9wID0gImdldF9ieV9p
ZF9nZXR0ZXJfcHJvdG8iOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9n
ZXR0ZXJfY2hhaW46CisgICAgICAgIG9wID0gImdldF9ieV9pZF9nZXR0ZXJfY2hhaW4iOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9jdXN0b21fc2VsZjoKKyAgICAgICAg
b3AgPSAiZ2V0X2J5X2lkX2N1c3RvbV9zZWxmIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9nZXRfYnlfaWRfY3VzdG9tX3Byb3RvOgorICAgICAgICBvcCA9ICJnZXRfYnlfaWRfY3VzdG9t
X3Byb3RvIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9tX2No
YWluOgorICAgICAgICBvcCA9ICJnZXRfYnlfaWRfY3VzdG9tX2NoYWluIjsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2VuZXJpYzoKKyAgICAgICAgb3AgPSAiZ2V0X2J5
X2lkX2dlbmVyaWMiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9hcnJheV9sZW5n
dGg6CisgICAgICAgIG9wID0gImFycmF5X2xlbmd0aCI7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugb3BfZ2V0X3N0cmluZ19sZW5ndGg6CisgICAgICAgIG9wID0gInN0cmluZ19sZW5ndGgiOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgb3AgPSAwOworICAgIH0KICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFu
ZDsKICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICBpbnQgaWQwID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgZGF0YUxvZygiWyU0ZF0gJXNcdCAlcywgJXMsICVzXG4iLCBsb2Nh
dGlvbiwgb3AsIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZXhl
YywgcjEpLmRhdGEoKSwgaWROYW1lKGlkMCwgbV9pZGVudGlmaWVyc1tpZDBdKS5kYXRhKCkpOwor
ICAgIGRhdGFMb2coIlslNGRdICVzXHQgJXMsICVzLCAlcyIsIGxvY2F0aW9uLCBvcCwgcmVnaXN0
ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVjLCByMSkuZGF0YSgpLCBp
ZE5hbWUoaWQwLCBtX2lkZW50aWZpZXJzW2lkMF0pLmRhdGEoKSk7CiAgICAgaXQgKz0gNTsKIH0K
IAotdm9pZCBDb2RlQmxvY2s6OnByaW50Q2FsbE9wKEV4ZWNTdGF0ZSogZXhlYywgaW50IGxvY2F0
aW9uLCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYgaXQsIGNvbnN0IGNoYXIq
IG9wKSBjb25zdAorc3RhdGljIHZvaWQgZHVtcFN0cnVjdHVyZShjb25zdCBjaGFyKiBuYW1lLCBF
eGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBJZGVudGlmaWVyJiBpZGVudCkK
K3sKKyAgICBpZiAoIXN0cnVjdHVyZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGRhdGFM
b2coIiVzID0gJXAiLCBuYW1lLCBzdHJ1Y3R1cmUpOworICAgIAorICAgIHNpemVfdCBvZmZzZXQg
PSBzdHJ1Y3R1cmUtPmdldChleGVjLT5nbG9iYWxEYXRhKCksIGlkZW50KTsKKyAgICBpZiAob2Zm
c2V0ICE9IG5vdEZvdW5kKQorICAgICAgICBkYXRhTG9nKCIgKG9mZnNldCA9ICVsdSkiLCBvZmZz
ZXQpOworfQorCitzdGF0aWMgdm9pZCBkdW1wQ2hhaW4oRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1
cmVDaGFpbiogY2hhaW4sIElkZW50aWZpZXImIGlkZW50KQoreworICAgIGRhdGFMb2coImNoYWlu
ID0gJXA6IFsiLCBjaGFpbik7CisgICAgYm9vbCBmaXJzdCA9IHRydWU7CisgICAgZm9yIChXcml0
ZUJhcnJpZXI8U3RydWN0dXJlPiogY3VycmVudFN0cnVjdHVyZSA9IGNoYWluLT5oZWFkKCk7Cisg
ICAgICAgICAqY3VycmVudFN0cnVjdHVyZTsKKyAgICAgICAgICsrY3VycmVudFN0cnVjdHVyZSkg
eworICAgICAgICBpZiAoZmlyc3QpCisgICAgICAgICAgICBmaXJzdCA9IGZhbHNlOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBkYXRhTG9nKCIsICIpOworICAgICAgICBkdW1wU3RydWN0dXJl
KCJzdHJ1Y3QiLCBleGVjLCBjdXJyZW50U3RydWN0dXJlLT5nZXQoKSwgaWRlbnQpOworICAgIH0K
KyAgICBkYXRhTG9nKCJdIik7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNo
ZVN0YXR1cyhFeGVjU3RhdGUqIGV4ZWMsIGludCBsb2NhdGlvbikKK3sKKyAgICBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgbG9jYXRpb247CisKKyAg
ICBpZiAoaW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUgPT0gbGxpbnRfb3BfbWV0aG9kX2NoZWNrKQor
ICAgICAgICBpbnN0cnVjdGlvbisrOworICAgIAorICAgIElkZW50aWZpZXImIGlkZW50ID0gaWRl
bnRpZmllcihpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgIAorI2lmIEVOQUJMRShMTElO
VCkKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGluc3RydWN0aW9uWzRdLnUuc3RydWN0dXJl
LmdldCgpOworICAgIGRhdGFMb2coIiBsbGludCgiKTsKKyAgICBkdW1wU3RydWN0dXJlKCJzdHJ1
Y3QiLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50KTsKKyAgICBkYXRhTG9nKCIpIik7CisjZW5kaWYK
KworI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKG51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKCkp
IHsKKyAgICAgICAgZGF0YUxvZygiIGppdCgiKTsKKyAgICAgICAgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvID0gZ2V0U3R1YkluZm8obG9jYXRpb24pOworICAgICAgICBpZiAoIXN0dWJJbmZv
LnNlZW4pCisgICAgICAgICAgICBkYXRhTG9nKCJub3Qgc2VlbiIpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIFN0cnVjdHVyZSogYmFzZVN0cnVjdHVyZSA9IDA7CisgICAgICAgICAgICBT
dHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSA9IDA7CisgICAgICAgICAgICBTdHJ1Y3R1cmVD
aGFpbiogY2hhaW4gPSAwOworICAgICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0KiBzdHJ1Y3R1cmVMaXN0ID0gMDsKKyAgICAgICAgICAgIGludCBsaXN0U2l6ZSA9IDA7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgewor
ICAgICAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6CisgICAgICAgICAgICAgICAg
ZGF0YUxvZygic2VsZiIpOworICAgICAgICAgICAgICAgIGJhc2VTdHJ1Y3R1cmUgPSBzdHViSW5m
by51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfcHJvdG86CisgICAg
ICAgICAgICAgICAgZGF0YUxvZygicHJvdG8iKTsKKyAgICAgICAgICAgICAgICBiYXNlU3RydWN0
dXJlID0gc3R1YkluZm8udS5nZXRCeUlkUHJvdG8uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsK
KyAgICAgICAgICAgICAgICBwcm90b3R5cGVTdHJ1Y3R1cmUgPSBzdHViSW5mby51LmdldEJ5SWRQ
cm90by5wcm90b3R5cGVTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfY2hhaW46CisgICAgICAgICAgICAgICAg
ZGF0YUxvZygiY2hhaW4iKTsKKyAgICAgICAgICAgICAgICBiYXNlU3RydWN0dXJlID0gc3R1Yklu
Zm8udS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgICAg
ICAgICBjaGFpbiA9IHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGZf
bGlzdDoKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJzZWxmX2xpc3QiKTsKKyAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmVMaXN0ID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3Quc3RydWN0dXJl
TGlzdDsKKyAgICAgICAgICAgICAgICBsaXN0U2l6ZSA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZM
aXN0Lmxpc3RTaXplOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBh
Y2Nlc3NfZ2V0X2J5X2lkX3Byb3RvX2xpc3Q6CisgICAgICAgICAgICAgICAgZGF0YUxvZygicHJv
dG9fbGlzdCIpOworICAgICAgICAgICAgICAgIHN0cnVjdHVyZUxpc3QgPSBzdHViSW5mby51Lmdl
dEJ5SWRQcm90b0xpc3Quc3RydWN0dXJlTGlzdDsKKyAgICAgICAgICAgICAgICBsaXN0U2l6ZSA9
IHN0dWJJbmZvLnUuZ2V0QnlJZFByb3RvTGlzdC5saXN0U2l6ZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgYWNjZXNzX3Vuc2V0OgorICAgICAgICAgICAgICAgIGRh
dGFMb2coInVuc2V0Iik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IGFjY2Vzc19nZXRfYnlfaWRfZ2VuZXJpYzoKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJnZW5l
cmljIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGFjY2Vzc19n
ZXRfYXJyYXlfbGVuZ3RoOgorICAgICAgICAgICAgICAgIGRhdGFMb2coImFycmF5X2xlbmd0aCIp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X3N0
cmluZ19sZW5ndGg6CisgICAgICAgICAgICAgICAgZGF0YUxvZygic3RyaW5nX2xlbmd0aCIpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGJhc2VTdHJ1Y3R1cmUpIHsK
KyAgICAgICAgICAgICAgICBkYXRhTG9nKCIsICIpOworICAgICAgICAgICAgICAgIGR1bXBTdHJ1
Y3R1cmUoInN0cnVjdCIsIGV4ZWMsIGJhc2VTdHJ1Y3R1cmUsIGlkZW50KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHByb3RvdHlwZVN0cnVjdHVyZSkgewor
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiwgIik7CisgICAgICAgICAgICAgICAgZHVtcFN0cnVj
dHVyZSgicHJvdG90eXBlU3RydWN0IiwgZXhlYywgYmFzZVN0cnVjdHVyZSwgaWRlbnQpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoY2hhaW4pIHsKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIsICIpOworICAgICAgICAgICAgICAgIGR1bXBDaGFpbihleGVj
LCBjaGFpbiwgaWRlbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAoc3RydWN0dXJlTGlzdCkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coIiwgbGlzdCA9
ICVwOiBbIiwgc3RydWN0dXJlTGlzdCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBsaXN0U2l6ZTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiLCAiKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygiKCIpOworICAgICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKCJiYXNlIiwgZXhl
Yywgc3RydWN0dXJlTGlzdC0+bGlzdFtpXS5iYXNlLmdldCgpLCBpZGVudCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChzdHJ1Y3R1cmVMaXN0LT5saXN0W2ldLmlzQ2hhaW4pIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVMaXN0LT5saXN0W2ldLnUuY2hhaW4uZ2V0KCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIsICIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGR1bXBDaGFpbihleGVjLCBzdHJ1Y3R1cmVMaXN0LT5saXN0W2ld
LnUuY2hhaW4uZ2V0KCksIGlkZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJ1
Y3R1cmVMaXN0LT5saXN0W2ldLnUucHJvdG8uZ2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIsICIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBT
dHJ1Y3R1cmUoInByb3RvIiwgZXhlYywgc3RydWN0dXJlTGlzdC0+bGlzdFtpXS51LnByb3RvLmdl
dCgpLCBpZGVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiKSIpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJdIik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgZGF0YUxvZygiKSIpOworICAgIH0KKyNlbmRpZgorfQorCit2b2lkIENvZGVC
bG9jazo6cHJpbnRDYWxsT3AoRXhlY1N0YXRlKiBleGVjLCBpbnQgbG9jYXRpb24sIFZlY3RvcjxJ
bnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJiBpdCwgY29uc3QgY2hhciogb3ApCiB7CiAgICAg
aW50IGZ1bmMgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICBpbnQgYXJnQ291bnQgPSAoKytpdCkt
PnUub3BlcmFuZDsKQEAgLTE5MSw3ICszNzksNyBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRDYWxs
T3AoRXhlY1N0YXRlKiBlCiAgICAgaXQgKz0gMjsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnByaW50
UHV0QnlJZE9wKEV4ZWNTdGF0ZSogZXhlYywgaW50IGxvY2F0aW9uLCBWZWN0b3I8SW5zdHJ1Y3Rp
b24+Ojpjb25zdF9pdGVyYXRvciYgaXQsIGNvbnN0IGNoYXIqIG9wKSBjb25zdAordm9pZCBDb2Rl
QmxvY2s6OnByaW50UHV0QnlJZE9wKEV4ZWNTdGF0ZSogZXhlYywgaW50IGxvY2F0aW9uLCBWZWN0
b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYgaXQsIGNvbnN0IGNoYXIqIG9wKQogewog
ICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgIGludCBpZDAgPSAoKytpdCktPnUu
b3BlcmFuZDsKQEAgLTIwNiwyNiArMzk0LDYgQEAgc3RhdGljIGJvb2wgaXNHbG9iYWxSZXNvbHZl
KE9wY29kZUlEIG9wYwogICAgIHJldHVybiBvcGNvZGVJRCA9PSBvcF9yZXNvbHZlX2dsb2JhbCB8
fCBvcGNvZGVJRCA9PSBvcF9yZXNvbHZlX2dsb2JhbF9keW5hbWljOwogfQogCi1zdGF0aWMgYm9v
bCBpc1Byb3BlcnR5QWNjZXNzKE9wY29kZUlEIG9wY29kZUlEKQotewotICAgIHN3aXRjaCAob3Bj
b2RlSUQpIHsKLSAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfc2VsZjoKLSAgICAgICAgY2FzZSBv
cF9nZXRfYnlfaWRfcHJvdG86Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2NoYWluOgotICAg
ICAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uOgotICAgICAgICBjYXNlIG9wX3B1dF9i
eV9pZF9yZXBsYWNlOgotICAgICAgICBjYXNlIG9wX2dldF9ieV9pZDoKLSAgICAgICAgY2FzZSBv
cF9wdXRfYnlfaWQ6Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dlbmVyaWM6Ci0gICAgICAg
IGNhc2Ugb3BfcHV0X2J5X2lkX2dlbmVyaWM6Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2FycmF5X2xl
bmd0aDoKLSAgICAgICAgY2FzZSBvcF9nZXRfc3RyaW5nX2xlbmd0aDoKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLX0KLQogc3RhdGljIHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0Rm9yTnRoKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rp
b25zLCBpbnQgbnRoLCBib29sICgqcHJlZGljYXRlKShPcGNvZGVJRCkpCiB7CiAgICAgc2l6ZV90
IGkgPSAwOwpAQCAtMjQ2LDYwICs0MTQsMTUgQEAgc3RhdGljIHZvaWQgcHJpbnRHbG9iYWxSZXNv
bHZlSW5mbyhjb25zdAogewogICAgIGRhdGFMb2coIiAgWyU0ZF0gJXM6ICVzXG4iLCBpbnN0cnVj
dGlvbk9mZnNldCwgInJlc29sdmVfZ2xvYmFsIiwgcG9pbnRlclRvU291cmNlU3RyaW5nKHJlc29s
dmVJbmZvLnN0cnVjdHVyZSkudXRmOCgpLmRhdGEoKSk7CiB9Ci0KLXN0YXRpYyB2b2lkIHByaW50
U3RydWN0dXJlU3R1YkluZm8oY29uc3QgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCB1bnNp
Z25lZCBpbnN0cnVjdGlvbk9mZnNldCkKLXsKLSAgICBzd2l0Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5
cGUpIHsKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKLSAgICAgICAgZGF0YUxvZygi
ICBbJTRkXSAlczogJXNcbiIsIGluc3RydWN0aW9uT2Zmc2V0LCAiZ2V0X2J5X2lkX3NlbGYiLCBw
b2ludGVyVG9Tb3VyY2VTdHJpbmcoc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3Ry
dWN0dXJlKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgYWNjZXNz
X2dldF9ieV9pZF9wcm90bzoKLSAgICAgICAgZGF0YUxvZygiICBbJTRkXSAlczogJXMsICVzXG4i
LCBpbnN0cnVjdGlvbk9mZnNldCwgImdldF9ieV9pZF9wcm90byIsIHBvaW50ZXJUb1NvdXJjZVN0
cmluZyhzdHViSW5mby51LmdldEJ5SWRQcm90by5iYXNlT2JqZWN0U3RydWN0dXJlKS51dGY4KCku
ZGF0YSgpLCBwb2ludGVyVG9Tb3VyY2VTdHJpbmcoc3R1YkluZm8udS5nZXRCeUlkUHJvdG8ucHJv
dG90eXBlU3RydWN0dXJlKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNh
c2UgYWNjZXNzX2dldF9ieV9pZF9jaGFpbjoKLSAgICAgICAgZGF0YUxvZygiICBbJTRkXSAlczog
JXMsICVzXG4iLCBpbnN0cnVjdGlvbk9mZnNldCwgImdldF9ieV9pZF9jaGFpbiIsIHBvaW50ZXJU
b1NvdXJjZVN0cmluZyhzdHViSW5mby51LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJl
KS51dGY4KCkuZGF0YSgpLCBwb2ludGVyVG9Tb3VyY2VTdHJpbmcoc3R1YkluZm8udS5nZXRCeUlk
Q2hhaW4uY2hhaW4pLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBh
Y2Nlc3NfZ2V0X2J5X2lkX3NlbGZfbGlzdDoKLSAgICAgICAgZGF0YUxvZygiICBbJTRkXSAlczog
JXMgKCVkKVxuIiwgaW5zdHJ1Y3Rpb25PZmZzZXQsICJvcF9nZXRfYnlfaWRfc2VsZl9saXN0Iiwg
cG9pbnRlclRvU291cmNlU3RyaW5nKHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0LnN0cnVjdHVy
ZUxpc3QpLnV0ZjgoKS5kYXRhKCksIHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0Lmxpc3RTaXpl
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9wcm90b19saXN0
OgotICAgICAgICBkYXRhTG9nKCIgIFslNGRdICVzOiAlcyAoJWQpXG4iLCBpbnN0cnVjdGlvbk9m
ZnNldCwgIm9wX2dldF9ieV9pZF9wcm90b19saXN0IiwgcG9pbnRlclRvU291cmNlU3RyaW5nKHN0
dWJJbmZvLnUuZ2V0QnlJZFByb3RvTGlzdC5zdHJ1Y3R1cmVMaXN0KS51dGY4KCkuZGF0YSgpLCBz
dHViSW5mby51LmdldEJ5SWRQcm90b0xpc3QubGlzdFNpemUpOwotICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgIGNhc2UgYWNj
ZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKLSAgICAgICAgZGF0YUxvZygiICBbJTRk
XSAlczogJXMsICVzLCAlc1xuIiwgaW5zdHJ1Y3Rpb25PZmZzZXQsICJwdXRfYnlfaWRfdHJhbnNp
dGlvbiIsIHBvaW50ZXJUb1NvdXJjZVN0cmluZyhzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9u
LnByZXZpb3VzU3RydWN0dXJlKS51dGY4KCkuZGF0YSgpLCBwb2ludGVyVG9Tb3VyY2VTdHJpbmco
c3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUpLnV0ZjgoKS5kYXRhKCksIHBv
aW50ZXJUb1NvdXJjZVN0cmluZyhzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluKS51
dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9p
ZF9yZXBsYWNlOgotICAgICAgICBkYXRhTG9nKCIgIFslNGRdICVzOiAlc1xuIiwgaW5zdHJ1Y3Rp
b25PZmZzZXQsICJwdXRfYnlfaWRfcmVwbGFjZSIsIHBvaW50ZXJUb1NvdXJjZVN0cmluZyhzdHVi
SW5mby51LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1Y3R1cmUpLnV0ZjgoKS5kYXRhKCkp
OwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBhY2Nlc3NfdW5zZXQ6Ci0gICAgICAgIGRhdGFM
b2coIiAgWyU0ZF0gJXNcbiIsIGluc3RydWN0aW9uT2Zmc2V0LCAidW5zZXQiKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9nZW5lcmljOgotICAgICAgICBkYXRh
TG9nKCIgIFslNGRdICVzXG4iLCBpbnN0cnVjdGlvbk9mZnNldCwgIm9wX2dldF9ieV9pZF9nZW5l
cmljIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfZ2VuZXJp
YzoKLSAgICAgICAgZGF0YUxvZygiICBbJTRkXSAlc1xuIiwgaW5zdHJ1Y3Rpb25PZmZzZXQsICJv
cF9wdXRfYnlfaWRfZ2VuZXJpYyIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBhY2Nlc3Nf
Z2V0X2FycmF5X2xlbmd0aDoKLSAgICAgICAgZGF0YUxvZygiICBbJTRkXSAlc1xuIiwgaW5zdHJ1
Y3Rpb25PZmZzZXQsICJvcF9nZXRfYXJyYXlfbGVuZ3RoIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICBjYXNlIGFjY2Vzc19nZXRfc3RyaW5nX2xlbmd0aDoKLSAgICAgICAgZGF0YUxvZygiICBbJTRk
XSAlc1xuIiwgaW5zdHJ1Y3Rpb25PZmZzZXQsICJvcF9nZXRfc3RyaW5nX2xlbmd0aCIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgfQotfQogI2VuZGlmCiAKLXZvaWQgQ29kZUJsb2NrOjpwcmludFN0cnVjdHVyZShjb25z
dCBjaGFyKiBuYW1lLCBjb25zdCBJbnN0cnVjdGlvbiogdlBDLCBpbnQgb3BlcmFuZCkgY29uc3QK
K3ZvaWQgQ29kZUJsb2NrOjpwcmludFN0cnVjdHVyZShjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBJ
bnN0cnVjdGlvbiogdlBDLCBpbnQgb3BlcmFuZCkKIHsKICAgICB1bnNpZ25lZCBpbnN0cnVjdGlv
bk9mZnNldCA9IHZQQyAtIGluc3RydWN0aW9ucygpLmJlZ2luKCk7CiAgICAgZGF0YUxvZygiICBb
JTRkXSAlczogJXNcbiIsIGluc3RydWN0aW9uT2Zmc2V0LCBuYW1lLCBwb2ludGVyVG9Tb3VyY2VT
dHJpbmcodlBDW29wZXJhbmRdLnUuc3RydWN0dXJlKS51dGY4KCkuZGF0YSgpKTsKIH0KIAotdm9p
ZCBDb2RlQmxvY2s6OnByaW50U3RydWN0dXJlcyhjb25zdCBJbnN0cnVjdGlvbiogdlBDKSBjb25z
dAordm9pZCBDb2RlQmxvY2s6OnByaW50U3RydWN0dXJlcyhjb25zdCBJbnN0cnVjdGlvbiogdlBD
KQogewogICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IG1fZ2xvYmFsRGF0YS0+aW50ZXJw
cmV0ZXI7CiAgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQgPSB2UEMgLSBpbnN0cnVjdGlv
bnMoKS5iZWdpbigpOwpAQCAtMzQ1LDcgKzQ2OCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludFN0
cnVjdHVyZXMoY29uc3QgSW4KICAgICBBU1NFUlQodlBDWzBdLnUub3Bjb2RlID09IGludGVycHJl
dGVyLT5nZXRPcGNvZGUob3BfZ2V0X2J5X2lkX2dlbmVyaWMpIHx8IHZQQ1swXS51Lm9wY29kZSA9
PSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlKG9wX3B1dF9ieV9pZF9nZW5lcmljKSB8fCB2UENbMF0u
dS5vcGNvZGUgPT0gaW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9jYWxsKSB8fCB2UENbMF0udS5v
cGNvZGUgPT0gaW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9jYWxsX2V2YWwpIHx8IHZQQ1swXS51
Lm9wY29kZSA9PSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlKG9wX2NvbnN0cnVjdCkpOwogfQogCi12
b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit2b2lkIENvZGVCbG9j
azo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgc2l6ZV90IGluc3RydWN0aW9uQ291bnQg
PSAwOwogCkBAIC00MDAsMTMgKzUyMyw2IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0
ZSogZXhlYykgY28KICAgICAgICAgICAgICArK2k7CiAgICAgICAgIH0gd2hpbGUgKGkgPCBtX2ds
b2JhbFJlc29sdmVJbmZvcy5zaXplKCkpOwogICAgIH0KLSAgICBpZiAoIW1fc3RydWN0dXJlU3R1
YkluZm9zLmlzRW1wdHkoKSkgewotICAgICAgICBzaXplX3QgaSA9IDA7Ci0gICAgICAgIGRvIHsK
LSAgICAgICAgICAgIHByaW50U3RydWN0dXJlU3R1YkluZm8obV9zdHJ1Y3R1cmVTdHViSW5mb3Nb
aV0sIGluc3RydWN0aW9uT2Zmc2V0Rm9yTnRoKGV4ZWMsIGluc3RydWN0aW9ucygpLCBpICsgMSwg
aXNQcm9wZXJ0eUFjY2VzcykpOwotICAgICAgICAgICAgICsraTsKLSAgICAgICAgfSB3aGlsZSAo
aSA8IG1fc3RydWN0dXJlU3R1YkluZm9zLnNpemUoKSk7Ci0gICAgfQogI2VuZGlmCiAjaWYgRU5B
QkxFKENMQVNTSUNfSU5URVJQUkVURVIpCiAgICAgaWYgKCFtX2dsb2JhbFJlc29sdmVJbnN0cnVj
dGlvbnMuaXNFbXB0eSgpIHx8ICFtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLmlzRW1wdHko
KSkKQEAgLTQ4OSw3ICs2MDUsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4
ZWMpIGNvCiAgICAgZGF0YUxvZygiXG4iKTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYg
YmVnaW4sIFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJiBpdCkgY29uc3QKK3Zv
aWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVmVjdG9yPEluc3RydWN0
aW9uPjo6Y29uc3RfaXRlcmF0b3ImIGJlZ2luLCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9p
dGVyYXRvciYgaXQpCiB7CiAgICAgaW50IGxvY2F0aW9uID0gaXQgLSBiZWdpbjsKICAgICBzd2l0
Y2ggKGV4ZWMtPmludGVycHJldGVyKCktPmdldE9wY29kZUlEKGl0LT51Lm9wY29kZSkpIHsKQEAg
LTgxOSw1NiArOTM1LDIyIEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywg
Y28KICAgICAgICAgICAgIGl0Kys7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAg
ICAgICBjYXNlIG9wX2dldF9ieV9pZDogewotICAgICAgICAgICAgcHJpbnRHZXRCeUlkT3AoZXhl
YywgbG9jYXRpb24sIGl0LCAiZ2V0X2J5X2lkIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9zZWxmOiB7Ci0gICAgICAgICAgICBwcmlu
dEdldEJ5SWRPcChleGVjLCBsb2NhdGlvbiwgaXQsICJnZXRfYnlfaWRfc2VsZiIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfcHJvdG86
IHsKLSAgICAgICAgICAgIHByaW50R2V0QnlJZE9wKGV4ZWMsIGxvY2F0aW9uLCBpdCwgImdldF9i
eV9pZF9wcm90byIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBvcF9nZXRfYnlfaWRfY2hhaW46IHsKLSAgICAgICAgICAgIHByaW50R2V0QnlJZE9wKGV4ZWMs
IGxvY2F0aW9uLCBpdCwgImdldF9ieV9pZF9jaGFpbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2V0dGVyX3NlbGY6IHsKLSAgICAg
ICAgICAgIHByaW50R2V0QnlJZE9wKGV4ZWMsIGxvY2F0aW9uLCBpdCwgImdldF9ieV9pZF9nZXR0
ZXJfc2VsZiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBv
cF9nZXRfYnlfaWRfZ2V0dGVyX3Byb3RvOiB7Ci0gICAgICAgICAgICBwcmludEdldEJ5SWRPcChl
eGVjLCBsb2NhdGlvbiwgaXQsICJnZXRfYnlfaWRfZ2V0dGVyX3Byb3RvIik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9nZXR0ZXJfY2hh
aW46IHsKLSAgICAgICAgICAgIHByaW50R2V0QnlJZE9wKGV4ZWMsIGxvY2F0aW9uLCBpdCwgImdl
dF9ieV9pZF9nZXR0ZXJfY2hhaW4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2N1c3RvbV9zZWxmOiB7Ci0gICAgICAgICAgICBwcmlu
dEdldEJ5SWRPcChleGVjLCBsb2NhdGlvbiwgaXQsICJnZXRfYnlfaWRfY3VzdG9tX3NlbGYiKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lk
X2N1c3RvbV9wcm90bzogewotICAgICAgICAgICAgcHJpbnRHZXRCeUlkT3AoZXhlYywgbG9jYXRp
b24sIGl0LCAiZ2V0X2J5X2lkX2N1c3RvbV9wcm90byIpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9tX2NoYWluOiB7Ci0gICAg
ICAgICAgICBwcmludEdldEJ5SWRPcChleGVjLCBsb2NhdGlvbiwgaXQsICJnZXRfYnlfaWRfY3Vz
dG9tX2NoYWluIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IG9wX2dldF9ieV9pZF9nZW5lcmljOiB7Ci0gICAgICAgICAgICBwcmludEdldEJ5SWRPcChleGVj
LCBsb2NhdGlvbiwgaXQsICJnZXRfYnlfaWRfZ2VuZXJpYyIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVuZ3RoOiB7Ci0gICAgICAg
ICAgICBwcmludEdldEJ5SWRPcChleGVjLCBsb2NhdGlvbiwgaXQsICJnZXRfYXJyYXlfbGVuZ3Ro
Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2dldF9i
eV9pZDoKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfc2VsZjoKKyAgICAgICAgY2FzZSBvcF9n
ZXRfYnlfaWRfcHJvdG86CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2NoYWluOgorICAgICAg
ICBjYXNlIG9wX2dldF9ieV9pZF9nZXR0ZXJfc2VsZjoKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlf
aWRfZ2V0dGVyX3Byb3RvOgorICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9nZXR0ZXJfY2hhaW46
CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2N1c3RvbV9zZWxmOgorICAgICAgICBjYXNlIG9w
X2dldF9ieV9pZF9jdXN0b21fcHJvdG86CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2N1c3Rv
bV9jaGFpbjoKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2VuZXJpYzoKKyAgICAgICAgY2Fz
ZSBvcF9nZXRfYXJyYXlfbGVuZ3RoOgogICAgICAgICBjYXNlIG9wX2dldF9zdHJpbmdfbGVuZ3Ro
OiB7Ci0gICAgICAgICAgICBwcmludEdldEJ5SWRPcChleGVjLCBsb2NhdGlvbiwgaXQsICJnZXRf
c3RyaW5nX2xlbmd0aCIpOworICAgICAgICAgICAgcHJpbnRHZXRCeUlkT3AoZXhlYywgbG9jYXRp
b24sIGl0KTsKKyAgICAgICAgICAgIHByaW50R2V0QnlJZENhY2hlU3RhdHVzKGV4ZWMsIGxvY2F0
aW9uKTsKKyAgICAgICAgICAgIGRhdGFMb2coIlxuIik7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIG9wX2dldF9hcmd1bWVudHNfbGVuZ3RoOiB7CkBAIC05MDks
NyArOTkxLDM3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY28KICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfbWV0aG9kX2NoZWNr
OiB7Ci0gICAgICAgICAgICBkYXRhTG9nKCJbJTRkXSBtZXRob2RfY2hlY2tcbiIsIGxvY2F0aW9u
KTsKKyAgICAgICAgICAgIGRhdGFMb2coIlslNGRdIG1ldGhvZF9jaGVjayIsIGxvY2F0aW9uKTsK
KyAgICAgICAgICAgIGlmIChudW1iZXJPZk1ldGhvZENhbGxMaW5rSW5mb3MoKSkgeworICAgICAg
ICAgICAgICAgIE1ldGhvZENhbGxMaW5rSW5mbyYgbWV0aG9kQ2FsbCA9IGdldE1ldGhvZENhbGxM
aW5rSW5mbyhsb2NhdGlvbik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiIGppdCgiKTsKKyAg
ICAgICAgICAgICAgICBpZiAoIW1ldGhvZENhbGwuc2VlbikKKyAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygibm90IHNlZW4iKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gVXNlIHRoZSBmYWN0IHRoYXQgTWV0aG9kQ2FsbExpbmtTdGF0dXMgYWxyZWFk
eSBkb2VzIHNtYXJ0IHRoaW5ncworICAgICAgICAgICAgICAgICAgICAvLyBmb3IgZGVjb2Rpbmcg
c2VlbiBtZXRob2QgY2FsbHMuCisgICAgICAgICAgICAgICAgICAgIE1ldGhvZENhbGxMaW5rU3Rh
dHVzIHN0YXR1cyA9IE1ldGhvZENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKHRoaXMsIGxvY2F0
aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0dXMpCisgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCJub3Qgc2V0Iik7CisgICAgICAgICAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiZnVuY3Rpb24gPSAlcCAoZXhlY3V0YWJs
ZSA9ICIsIHN0YXR1cy5mdW5jdGlvbigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEpTQ2Vs
bCogZnVuY3Rpb25Bc0NlbGwgPSBnZXRKU0Z1bmN0aW9uKHN0YXR1cy5mdW5jdGlvbigpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbkFzQ2VsbCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCIlcCIsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZnVuY3Rpb25B
c0NlbGwpLT5leGVjdXRhYmxlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk4vQSIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiKSwgc3RydWN0ID0gJXAiLCBzdGF0dXMuc3RydWN0dXJlKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5uZWVkc1Byb3RvdHlwZUNoZWNrKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiLCBwcm90b3R5cGUgPSAlcCwg
c3RydWN0ID0gJXAiLCBzdGF0dXMucHJvdG90eXBlKCksIHN0YXR1cy5wcm90b3R5cGVTdHJ1Y3R1
cmUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZGF0YUxvZygiKSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF0YUxv
ZygiXG4iKTsKKyAgICAgICAgICAgICsraXQ7CisgICAgICAgICAgICBwcmludEdldEJ5SWRPcChl
eGVjLCBsb2NhdGlvbiwgaXQpOworICAgICAgICAgICAgcHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMo
ZXhlYywgbG9jYXRpb24pOworICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfZGVsX2J5X2lkOiB7CkBAIC0xNTUx
LDcgKzE2NjMsNyBAQCB2b2lkIENvZGVCbG9jazo6YWRkUGFyYW1ldGVyKCkKICNlbmRpZgogfQog
Ci12b2lkIENvZGVCbG9jazo6dmlzaXRTdHJ1Y3R1cmVzKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBJ
bnN0cnVjdGlvbiogdlBDKSBjb25zdAordm9pZCBDb2RlQmxvY2s6OnZpc2l0U3RydWN0dXJlcyhT
bG90VmlzaXRvciYgdmlzaXRvciwgSW5zdHJ1Y3Rpb24qIHZQQykKIHsKICAgICBJbnRlcnByZXRl
ciogaW50ZXJwcmV0ZXIgPSBtX2dsb2JhbERhdGEtPmludGVycHJldGVyOwogCkBAIC0yMzQxLDI1
ICsyNDUzLDI1IEBAIHZvaWQgRnVuY3Rpb25Db2RlQmxvY2s6OmpldHRpc29uKCkKICAgICBzdGF0
aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmpldHRpc29u
T3B0aW1pemVkQ29kZUZvcigqZ2xvYmFsRGF0YSgpLCBtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9y
Q29uc3RydWN0IDogQ29kZUZvckNhbGwpOwogfQogCi1ib29sIFByb2dyYW1Db2RlQmxvY2s6Ompp
dENvbXBpbGVJbXBsKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK2Jvb2wgUHJvZ3JhbUNvZGVC
bG9jazo6aml0Q29tcGlsZUltcGwoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEFTU0VSVChnZXRK
SVRUeXBlKCkgPT0gSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuayk7CiAgICAgQVNTRVJUKHRoaXMg
PT0gcmVwbGFjZW1lbnQoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFByb2dyYW1FeGVjdXRh
YmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qaXRDb21waWxlKGdsb2JhbERhdGEpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+
aml0Q29tcGlsZShleGVjKTsKIH0KIAotYm9vbCBFdmFsQ29kZUJsb2NrOjpqaXRDb21waWxlSW1w
bChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCitib29sIEV2YWxDb2RlQmxvY2s6OmppdENvbXBp
bGVJbXBsKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBBU1NFUlQoZ2V0SklUVHlwZSgpID09IEpJ
VENvZGU6OkludGVycHJldGVyVGh1bmspOwogICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50
KCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxFdmFsRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0
YWJsZSgpKS0+aml0Q29tcGlsZShnbG9iYWxEYXRhKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
RXZhbEV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmppdENvbXBpbGUoZXhlYyk7CiB9
CiAKLWJvb2wgRnVuY3Rpb25Db2RlQmxvY2s6OmppdENvbXBpbGVJbXBsKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSkKK2Jvb2wgRnVuY3Rpb25Db2RlQmxvY2s6OmppdENvbXBpbGVJbXBsKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBBU1NFUlQoZ2V0SklUVHlwZSgpID09IEpJVENvZGU6OkludGVy
cHJldGVyVGh1bmspOwogICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50KCkpOwotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSkt
PmppdENvbXBpbGVGb3IoZ2xvYmFsRGF0YSwgbV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0
cnVjdCA6IENvZGVGb3JDYWxsKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVj
dXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qaXRDb21waWxlRm9yKGV4ZWMsIG1faXNDb25z
dHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7CiB9CiAjZW5kaWYKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNp
b24gMTE0NTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsOSArMTMyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgc3RhdGljIHZvaWQgZHVtcFN0YXRpc3RpY3MoKTsKIAotICAgICAgICB2b2lkIGR1bXAo
RXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgICAgIHZvaWQgcHJpbnRTdHJ1Y3R1cmVzKGNvbnN0IElu
c3RydWN0aW9uKikgY29uc3Q7Ci0gICAgICAgIHZvaWQgcHJpbnRTdHJ1Y3R1cmUoY29uc3QgY2hh
ciogbmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBpbnQgb3BlcmFuZCkgY29uc3Q7CisgICAgICAg
IHZvaWQgZHVtcChFeGVjU3RhdGUqKTsKKyAgICAgICAgdm9pZCBwcmludFN0cnVjdHVyZXMoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBwcmludFN0cnVjdHVyZShjb25zdCBjaGFy
KiBuYW1lLCBjb25zdCBJbnN0cnVjdGlvbiosIGludCBvcGVyYW5kKTsKIAogICAgICAgICBib29s
IGlzU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNTdHJpY3RNb2RlOyB9CiAKQEAgLTM2
OSwxOCArMzY5LDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0
KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKikgPSAwOwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24oKSA9IDA7CiAgICAgICAgIGVudW0gSklUQ29tcGls
YXRpb25SZXN1bHQgeyBBbHJlYWR5Q29tcGlsZWQsIENvdWxkTm90Q29tcGlsZSwgQ29tcGlsZWRT
dWNjZXNzZnVsbHkgfTsKLSAgICAgICAgSklUQ29tcGlsYXRpb25SZXN1bHQgaml0Q29tcGlsZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgICAgIEpJVENvbXBpbGF0aW9uUmVzdWx0IGpp
dENvbXBpbGUoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoZ2V0
SklUVHlwZSgpICE9IEpJVENvZGU6OkludGVycHJldGVyVGh1bmspIHsKICAgICAgICAgICAgICAg
ICBBU1NFUlQoZ2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gQWxyZWFkeUNvbXBpbGVkOwogICAgICAgICAgICAgfQogI2lmIEVOQUJM
RShKSVQpCi0gICAgICAgICAgICBpZiAoaml0Q29tcGlsZUltcGwoZ2xvYmFsRGF0YSkpCisgICAg
ICAgICAgICBpZiAoaml0Q29tcGlsZUltcGwoZXhlYykpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IENvbXBpbGVkU3VjY2Vzc2Z1bGx5OwogICAgICAgICAgICAgcmV0dXJuIENvdWxkTm90Q29tcGls
ZTsKICNlbHNlCi0gICAgICAgICAgICBVTlVTRURfUEFSQU0oZ2xvYmFsRGF0YSk7CisgICAgICAg
ICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAgICAgICAgICAgICByZXR1cm4gQ291bGROb3RDb21w
aWxlOwogI2VuZGlmCiAgICAgICAgIH0KQEAgLTEwNzAsNyArMTA3MCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgcHJvdGVjdGVkOgogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIHZpcnR1YWwg
Ym9vbCBqaXRDb21waWxlSW1wbChKU0dsb2JhbERhdGEmKSA9IDA7CisgICAgICAgIHZpcnR1YWwg
Ym9vbCBqaXRDb21waWxlSW1wbChFeGVjU3RhdGUqKSA9IDA7CiAjZW5kaWYKICAgICAgICAgdmly
dHVhbCB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKICAgICAgICAgdmly
dHVhbCB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCk7CkBAIC0xMDg0LDE2ICsxMDg0LDE3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMo
KSB7IH0KICNlbmRpZgogICAgICAgICAKLSAgICAgICAgdm9pZCBkdW1wKEV4ZWNTdGF0ZSosIGNv
bnN0IFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJiBiZWdpbiwgVmVjdG9yPElu
c3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImKSBjb25zdDsKKyAgICAgICAgdm9pZCBkdW1wKEV4
ZWNTdGF0ZSosIGNvbnN0IFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJiBiZWdp
biwgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImKTsKIAogICAgICAgICBDU3Ry
aW5nIHJlZ2lzdGVyTmFtZShFeGVjU3RhdGUqLCBpbnQgcikgY29uc3Q7Ci0gICAgICAgIHZvaWQg
cHJpbnRVbmFyeU9wKEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgVmVjdG9yPEluc3RydWN0aW9u
Pjo6Y29uc3RfaXRlcmF0b3ImLCBjb25zdCBjaGFyKiBvcCkgY29uc3Q7Ci0gICAgICAgIHZvaWQg
cHJpbnRCaW5hcnlPcChFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIFZlY3RvcjxJbnN0cnVjdGlv
bj46OmNvbnN0X2l0ZXJhdG9yJiwgY29uc3QgY2hhciogb3ApIGNvbnN0OwotICAgICAgICB2b2lk
IHByaW50Q29uZGl0aW9uYWxKdW1wKEV4ZWNTdGF0ZSosIGNvbnN0IFZlY3RvcjxJbnN0cnVjdGlv
bj46OmNvbnN0X2l0ZXJhdG9yJiwgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3Im
LCBpbnQgbG9jYXRpb24sIGNvbnN0IGNoYXIqIG9wKSBjb25zdDsKLSAgICAgICAgdm9pZCBwcmlu
dEdldEJ5SWRPcChFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIFZlY3RvcjxJbnN0cnVjdGlvbj46
OmNvbnN0X2l0ZXJhdG9yJiwgY29uc3QgY2hhciogb3ApIGNvbnN0OwotICAgICAgICB2b2lkIHBy
aW50Q2FsbE9wKEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgVmVjdG9yPEluc3RydWN0aW9uPjo6
Y29uc3RfaXRlcmF0b3ImLCBjb25zdCBjaGFyKiBvcCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgcHJp
bnRQdXRCeUlkT3AoRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBWZWN0b3I8SW5zdHJ1Y3Rpb24+
Ojpjb25zdF9pdGVyYXRvciYsIGNvbnN0IGNoYXIqIG9wKSBjb25zdDsKLSAgICAgICAgdm9pZCB2
aXNpdFN0cnVjdHVyZXMoU2xvdFZpc2l0b3ImLCBJbnN0cnVjdGlvbiogdlBDKSBjb25zdDsKKyAg
ICAgICAgdm9pZCBwcmludFVuYXJ5T3AoRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBWZWN0b3I8
SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYsIGNvbnN0IGNoYXIqIG9wKTsKKyAgICAgICAg
dm9pZCBwcmludEJpbmFyeU9wKEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgVmVjdG9yPEluc3Ry
dWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImLCBjb25zdCBjaGFyKiBvcCk7CisgICAgICAgIHZvaWQg
cHJpbnRDb25kaXRpb25hbEp1bXAoRXhlY1N0YXRlKiwgY29uc3QgVmVjdG9yPEluc3RydWN0aW9u
Pjo6Y29uc3RfaXRlcmF0b3ImLCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYs
IGludCBsb2NhdGlvbiwgY29uc3QgY2hhciogb3ApOworICAgICAgICB2b2lkIHByaW50R2V0QnlJ
ZE9wKEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3Rf
aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBwcmludEdldEJ5SWRDYWNoZVN0YXR1cyhFeGVjU3Rh
dGUqLCBpbnQgbG9jYXRpb24pOworICAgICAgICB2b2lkIHByaW50Q2FsbE9wKEV4ZWNTdGF0ZSos
IGludCBsb2NhdGlvbiwgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImLCBjb25z
dCBjaGFyKiBvcCk7CisgICAgICAgIHZvaWQgcHJpbnRQdXRCeUlkT3AoRXhlY1N0YXRlKiwgaW50
IGxvY2F0aW9uLCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYsIGNvbnN0IGNo
YXIqIG9wKTsKKyAgICAgICAgdm9pZCB2aXNpdFN0cnVjdHVyZXMoU2xvdFZpc2l0b3ImLCBJbnN0
cnVjdGlvbiogdlBDKTsKICAgICAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIGJv
b2wgc2hvdWxkSW1tZWRpYXRlbHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4oKQpAQCAtMTMxNyw3
ICsxMzE4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0
dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2Rl
Kik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbigpOwotICAgICAgICB2aXJ0dWFsIGJv
b2wgaml0Q29tcGlsZUltcGwoSlNHbG9iYWxEYXRhJik7CisgICAgICAgIHZpcnR1YWwgYm9vbCBq
aXRDb21waWxlSW1wbChFeGVjU3RhdGUqKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJl
cGxhY2VtZW50KCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGR0ludGVy
bmFsKCk7CiAjZW5kaWYKQEAgLTEzNTIsNyArMTM1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
IHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChF
eGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOwogICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlz
b24oKTsKLSAgICAgICAgdmlydHVhbCBib29sIGppdENvbXBpbGVJbXBsKEpTR2xvYmFsRGF0YSYp
OworICAgICAgICB2aXJ0dWFsIGJvb2wgaml0Q29tcGlsZUltcGwoRXhlY1N0YXRlKik7CiAgICAg
ICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOwogICAgICAgICB2aXJ0dWFsIGJv
b2wgY2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCgpOwogI2VuZGlmCkBAIC0xMzkwLDcgKzEzOTEs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgSlNP
YmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKICAg
ICAgICAgdmlydHVhbCB2b2lkIGpldHRpc29uKCk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBqaXRD
b21waWxlSW1wbChKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgdmlydHVhbCBib29sIGppdENvbXBp
bGVJbXBsKEV4ZWNTdGF0ZSopOwogICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1l
bnQoKTsKICAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKTsK
ICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAJKHJldmlzaW9uIDExNDU1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw4ICs0NSw5IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIC8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0
byBjb21waWxlIHRoZSBkYXRhZmxvdyBncmFwaCBmcm9tIGEgQ29kZUJsb2NrLgogY2xhc3MgQnl0
ZUNvZGVQYXJzZXIgewogcHVibGljOgotICAgIEJ5dGVDb2RlUGFyc2VyKEdyYXBoJiBncmFwaCkK
LSAgICAgICAgOiBtX2dsb2JhbERhdGEoJmdyYXBoLm1fZ2xvYmFsRGF0YSkKKyAgICBCeXRlQ29k
ZVBhcnNlcihFeGVjU3RhdGUqIGV4ZWMsIEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBtX2V4ZWMo
ZXhlYykKKyAgICAgICAgLCBtX2dsb2JhbERhdGEoJmdyYXBoLm1fZ2xvYmFsRGF0YSkKICAgICAg
ICAgLCBtX2NvZGVCbG9jayhncmFwaC5tX2NvZGVCbG9jaykKICAgICAgICAgLCBtX3Byb2ZpbGVk
QmxvY2soZ3JhcGgubV9wcm9maWxlZEJsb2NrKQogICAgICAgICAsIG1fZ3JhcGgoZ3JhcGgpCkBA
IC04MjcsNiArODI4LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGJ1aWxkT3BlcmFuZE1h
cHNJZk5lY2Vzc2FyeSgpOwogICAgIAorICAgIEV4ZWNTdGF0ZSogbV9leGVjOwogICAgIEpTR2xv
YmFsRGF0YSogbV9nbG9iYWxEYXRhOwogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAg
Q29kZUJsb2NrKiBtX3Byb2ZpbGVkQmxvY2s7CkBAIC0yNzQ4LDYgKzI3NTAsNyBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jaygpCiAgICAgICAgICAgICBjb2RlQmxvY2stPm5l
ZWRzRnVsbFNjb3BlQ2hhaW4oKT8idHJ1ZSI6ImZhbHNlIiwKICAgICAgICAgICAgIGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCktPm5lZWRzQWN0aXZhdGlvbigpPyJ0cnVlIjoiZmFsc2UiLAog
ICAgICAgICAgICAgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCk/
InRydWUiOiJmYWxzZSIpOworICAgIGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCktPmR1bXAo
bV9leGVjKTsKICNlbmRpZgogICAgIAogICAgIGZvciAodW5zaWduZWQganVtcFRhcmdldEluZGV4
ID0gMDsganVtcFRhcmdldEluZGV4IDw9IGNvZGVCbG9jay0+bnVtYmVyT2ZKdW1wVGFyZ2V0cygp
OyArK2p1bXBUYXJnZXRJbmRleCkgewpAQCAtMjg1MywxMyArMjg1NiwxNCBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZSgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgcGFyc2UoR3Jh
cGgmIGdyYXBoKQorYm9vbCBwYXJzZShFeGVjU3RhdGUqIGV4ZWMsIEdyYXBoJiBncmFwaCkKIHsK
ICNpZiBERkdfREVCVUdfTE9DQUxfRElTQkFMRQorICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICAg
ICBVTlVTRURfUEFSQU0oZ3JhcGgpOwogICAgIHJldHVybiBmYWxzZTsKICNlbHNlCi0gICAgcmV0
dXJuIEJ5dGVDb2RlUGFyc2VyKGdyYXBoKS5wYXJzZSgpOworICAgIHJldHVybiBCeXRlQ29kZVBh
cnNlcihleGVjLCBncmFwaCkucGFyc2UoKTsKICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5oCShyZXZpc2lvbiAxMTQ1NTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIERGRyB7CiAKIC8vIFBvcHVsYXRl
IHRoZSBHcmFwaCB3aXRoIGEgYmFzaWMgYmxvY2sgb2YgY29kZSBmcm9tIHRoZSBDb2RlQmxvY2ss
CiAvLyBzdGFydGluZyBhdCB0aGUgcHJvdmlkZWQgYnl0ZWNvZGUgaW5kZXguCi1ib29sIHBhcnNl
KEdyYXBoJik7Citib29sIHBhcnNlKEV4ZWNTdGF0ZSosIEdyYXBoJik7CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVy
LmNwcAkocmV2aXNpb24gMTE0NTU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
cml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBACiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKIGVudW0gQ29tcGlsZU1vZGUgeyBDb21waWxlRnVuY3Rpb24s
IENvbXBpbGVPdGhlciB9OwotaW5saW5lIGJvb2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxl
TW9kZSwgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklU
Q29kZSYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRDb2RlV2l0aEFyaXR5Q2hl
Y2spCitpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNb2RlLCBFeGVjU3Rh
dGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIqIGppdENvZGVXaXRoQXJpdHlDaGVjaykKIHsKICAgICBTYW1wbGluZ1Jl
Z2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIENvbXBpbGF0aW9uIChEcml2ZXIpIik7CiAgICAgCkBA
IC01Myw4ICs1Myw4IEBAIGlubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU0K
ICAgICBkYXRhTG9nKCJERkcgY29tcGlsaW5nIGNvZGUgYmxvY2sgJXAoJXApLCBudW1iZXIgb2Yg
aW5zdHJ1Y3Rpb25zID0gJXUuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KSwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkpOwogI2VuZGlmCiAgICAgCi0gICAgR3Jh
cGggZGZnKGdsb2JhbERhdGEsIGNvZGVCbG9jayk7Ci0gICAgaWYgKCFwYXJzZShkZmcpKQorICAg
IEdyYXBoIGRmZyhleGVjLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jayk7CisgICAgaWYgKCFwYXJz
ZShleGVjLCBkZmcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgaWYgKGNvbXBp
bGVNb2RlID09IENvbXBpbGVGdW5jdGlvbikKQEAgLTg5LDE0ICs4OSwxNCBAQCBpbmxpbmUgYm9v
bCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
Ym9vbCB0cnlDb21waWxlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEpJVENvZGUmIGppdENvZGUpCitib29sIHRyeUNvbXBpbGUoRXhlY1N0YXRlKiBleGVj
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSYgaml0Q29kZSkKIHsKLSAgICByZXR1cm4g
Y29tcGlsZShDb21waWxlT3RoZXIsIGdsb2JhbERhdGEsIGNvZGVCbG9jaywgaml0Q29kZSwgMCk7
CisgICAgcmV0dXJuIGNvbXBpbGUoQ29tcGlsZU90aGVyLCBleGVjLCBjb2RlQmxvY2ssIGppdENv
ZGUsIDApOwogfQogCi1ib29sIHRyeUNvbXBpbGVGdW5jdGlvbihKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjaykKK2Jvb2wgdHJ5Q29tcGlsZUZ1bmN0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENv
ZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrKQogewotICAg
IHJldHVybiBjb21waWxlKENvbXBpbGVGdW5jdGlvbiwgZ2xvYmFsRGF0YSwgY29kZUJsb2NrLCBq
aXRDb2RlLCAmaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyAgICByZXR1cm4gY29tcGlsZShDb21w
aWxlRnVuY3Rpb24sIGV4ZWMsIGNvZGVCbG9jaywgaml0Q29kZSwgJmppdENvZGVXaXRoQXJpdHlD
aGVjayk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEcml2ZXIuaAkocmV2aXNpb24gMTE0NTUzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBA
QAogI2lmbmRlZiBERkdEcml2ZXJfaAogI2RlZmluZSBERkdEcml2ZXJfaAogCisjaW5jbHVkZSAi
Q2FsbEZyYW1lLmgiCiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
ewpAQCAtMzgsMTEgKzM5LDExIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjsKIG5hbWVz
cGFjZSBERkcgewogCiAjaWYgRU5BQkxFKERGR19KSVQpCi1ib29sIHRyeUNvbXBpbGUoSlNHbG9i
YWxEYXRhJiwgQ29kZUJsb2NrKiwgSklUQ29kZSYpOwotYm9vbCB0cnlDb21waWxlRnVuY3Rpb24o
SlNHbG9iYWxEYXRhJiwgQ29kZUJsb2NrKiwgSklUQ29kZSYsIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKK2Jvb2wgdHJ5Q29tcGlsZShFeGVjU3RhdGUqLCBD
b2RlQmxvY2sqLCBKSVRDb2RlJik7Citib29sIHRyeUNvbXBpbGVGdW5jdGlvbihFeGVjU3RhdGUq
LCBDb2RlQmxvY2sqLCBKSVRDb2RlJiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0
aEFyaXR5Q2hlY2spOwogI2Vsc2UKLWlubGluZSBib29sIHRyeUNvbXBpbGUoSlNHbG9iYWxEYXRh
JiwgQ29kZUJsb2NrKiwgSklUQ29kZSYpIHsgcmV0dXJuIGZhbHNlOyB9Ci1pbmxpbmUgYm9vbCB0
cnlDb21waWxlRnVuY3Rpb24oSlNHbG9iYWxEYXRhJiwgQ29kZUJsb2NrKiwgSklUQ29kZSYsIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciYpIHsgcmV0dXJuIGZhbHNlOyB9CitpbmxpbmUgYm9vbCB0cnlD
b21waWxlKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIEpJVENvZGUmKSB7IHJldHVybiBmYWxzZTsg
fQoraW5saW5lIGJvb2wgdHJ5Q29tcGlsZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIENvZGVCbG9jayos
IEpJVENvZGUmLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImKSB7IHJldHVybiBmYWxzZTsgfQogI2Vu
ZGlmCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDExNDU1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCB2b2lkIGNvbXBpbGVPU1JFeGl0KEV4ZWNTdGF0
ZSogZXhlYykKICAgICBmb3IgKENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2RlT3Jp
Z2luOyBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpIHsKICAgICAgICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25F
eGVjdXRhYmxlKj4oY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkp
CiAgICAgICAgICAgICAtPmJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lLT5pc0NhbGwgPyBDb2RlRm9yQ2FsbCA6IENvZGVGb3JDb25zdHJ1Y3QpCi0gICAgICAg
ICAgICAtPmppdENvbXBpbGUoKmdsb2JhbERhdGEpOworICAgICAgICAgICAgLT5qaXRDb21waWxl
KGV4ZWMpOwogICAgIH0KICAgICAKICAgICBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSA9
IDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERyaXZlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURHJpdmVyLmgJKHJldmlzaW9uIDEx
NDU1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURHJpdmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDggKzM4LDEwIEBACiBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dHlw
ZW5hbWUgQ29kZUJsb2NrVHlwZT4KLWlubGluZSBib29sIGppdENvbXBpbGVJZkFwcHJvcHJpYXRl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgT3duUHRyPENvZGVCbG9ja1R5cGU+JiBjb2RlQmxv
Y2ssIEpJVENvZGUmIGppdENvZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgSklUQ29tcGls
YXRpb25FZmZvcnQgZWZmb3J0KQoraW5saW5lIGJvb2wgaml0Q29tcGlsZUlmQXBwcm9wcmlhdGUo
RXhlY1N0YXRlKiBleGVjLCBPd25QdHI8Q29kZUJsb2NrVHlwZT4mIGNvZGVCbG9jaywgSklUQ29k
ZSYgaml0Q29kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCBKSVRDb21waWxhdGlvbkVmZm9y
dCBlZmZvcnQpCiB7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFs
RGF0YSgpOworICAgIAogICAgIGlmIChqaXRUeXBlID09IGNvZGVCbG9jay0+Z2V0SklUVHlwZSgp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKQEAgLTUyLDcgKzU0LDcgQEAgaW5saW5lIGJv
b2wgaml0Q29tcGlsZUlmQXBwcm9wcmlhdGUoSlNHbAogICAgIAogICAgIGJvb2wgZGZnQ29tcGls
ZWQgPSBmYWxzZTsKICAgICBpZiAoaml0VHlwZSA9PSBKSVRDb2RlOjpERkdKSVQpCi0gICAgICAg
IGRmZ0NvbXBpbGVkID0gREZHOjp0cnlDb21waWxlKGdsb2JhbERhdGEsIGNvZGVCbG9jay5nZXQo
KSwgaml0Q29kZSk7CisgICAgICAgIGRmZ0NvbXBpbGVkID0gREZHOjp0cnlDb21waWxlKGV4ZWMs
IGNvZGVCbG9jay5nZXQoKSwgaml0Q29kZSk7CiAgICAgaWYgKGRmZ0NvbXBpbGVkKSB7CiAgICAg
ICAgIGlmIChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpCiAgICAgICAgICAgICBjb2RlQmxvY2st
PmFsdGVybmF0aXZlKCktPnVubGlua0luY29taW5nQ2FsbHMoKTsKQEAgLTczLDggKzc1LDEwIEBA
IGlubGluZSBib29sIGppdENvbXBpbGVJZkFwcHJvcHJpYXRlKEpTR2wKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotaW5saW5lIGJvb2wgaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0ZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4mIGNvZGVCbG9j
aywgSklUQ29kZSYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFy
aXR5Q2hlY2ssIFNoYXJlZFN5bWJvbFRhYmxlKiYgc3ltYm9sVGFibGUsIEpJVENvZGU6OkpJVFR5
cGUgaml0VHlwZSwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQoraW5saW5lIGJvb2wgaml0
Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0ZShFeGVjU3RhdGUqIGV4ZWMsIE93blB0cjxGdW5j
dGlvbkNvZGVCbG9jaz4mIGNvZGVCbG9jaywgSklUQ29kZSYgaml0Q29kZSwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIFNoYXJlZFN5bWJvbFRhYmxlKiYgc3lt
Ym9sVGFibGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgSklUQ29tcGlsYXRpb25FZmZvcnQg
ZWZmb3J0KQogeworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERh
dGEoKTsKKyAgICAKICAgICBpZiAoaml0VHlwZSA9PSBjb2RlQmxvY2stPmdldEpJVFR5cGUoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCkBAIC04OCw3ICs5Miw3IEBAIGlubGluZSBib29s
IGppdENvbXBpbGVGdW5jdGlvbklmQXBwcm9wcmkKICAgICAKICAgICBib29sIGRmZ0NvbXBpbGVk
ID0gZmFsc2U7CiAgICAgaWYgKGppdFR5cGUgPT0gSklUQ29kZTo6REZHSklUKQotICAgICAgICBk
ZmdDb21waWxlZCA9IERGRzo6dHJ5Q29tcGlsZUZ1bmN0aW9uKGdsb2JhbERhdGEsIGNvZGVCbG9j
ay5nZXQoKSwgaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgZGZnQ29t
cGlsZWQgPSBERkc6OnRyeUNvbXBpbGVGdW5jdGlvbihleGVjLCBjb2RlQmxvY2suZ2V0KCksIGpp
dENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjayk7CiAgICAgaWYgKGRmZ0NvbXBpbGVkKSB7CiAg
ICAgICAgIGlmIChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpCiAgICAgICAgICAgICBjb2RlQmxv
Y2stPmFsdGVybmF0aXZlKCktPnVubGlua0luY29taW5nQ2FsbHMoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTE0
NTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjY0LDcgKzI2NCw3IEBAIGlubGluZSBib29sIGppdENvbXBpbGVB
bmRTZXRIZXVyaXN0aWNzKEMKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAgICAg
Ci0gICAgQ29kZUJsb2NrOjpKSVRDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBjb2RlQmxvY2st
PmppdENvbXBpbGUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICBDb2RlQmxvY2s6OkpJVENvbXBp
bGF0aW9uUmVzdWx0IHJlc3VsdCA9IGNvZGVCbG9jay0+aml0Q29tcGlsZShleGVjKTsKICAgICBz
d2l0Y2ggKHJlc3VsdCkgewogICAgIGNhc2UgQ29kZUJsb2NrOjpBbHJlYWR5Q29tcGlsZWQ6CiAj
aWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAxMTQ1NTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgx
LDkgKzE4MSw5IEBAIEpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXoKIH0K
IAogI2lmIEVOQUJMRShKSVQpCi1ib29sIEV2YWxFeGVjdXRhYmxlOjpqaXRDb21waWxlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKK2Jvb2wgRXZhbEV4ZWN1dGFibGU6OmppdENvbXBpbGUoRXhl
Y1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBqaXRDb21waWxlSWZBcHByb3ByaWF0ZShnbG9i
YWxEYXRhLCBtX2V2YWxDb2RlQmxvY2ssIG1faml0Q29kZUZvckNhbGwsIEpJVENvZGU6OmJvdHRv
bVRpZXJKSVQoKSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICByZXR1cm4gaml0Q29tcGls
ZUlmQXBwcm9wcmlhdGUoZXhlYywgbV9ldmFsQ29kZUJsb2NrLCBtX2ppdENvZGVGb3JDYWxsLCBK
SVRDb2RlOjpib3R0b21UaWVySklUKCksIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiB9CiAjZW5k
aWYKIApAQCAtMjQ0LDcgKzI0NCw3IEBAIEpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGls
ZUludGVybmEKICAgICB9CiAKICNpZiBFTkFCTEUoSklUKQotICAgIGlmICghcHJlcGFyZUZvckV4
ZWN1dGlvbigqZ2xvYmFsRGF0YSwgbV9ldmFsQ29kZUJsb2NrLCBtX2ppdENvZGVGb3JDYWxsLCBq
aXRUeXBlKSkKKyAgICBpZiAoIXByZXBhcmVGb3JFeGVjdXRpb24oZXhlYywgbV9ldmFsQ29kZUJs
b2NrLCBtX2ppdENvZGVGb3JDYWxsLCBqaXRUeXBlKSkKICAgICAgICAgcmV0dXJuIDA7CiAjZW5k
aWYKIApAQCAtMzMwLDkgKzMzMCw5IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29t
cGlsZU9wdGkKIH0KIAogI2lmIEVOQUJMRShKSVQpCi1ib29sIFByb2dyYW1FeGVjdXRhYmxlOjpq
aXRDb21waWxlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK2Jvb2wgUHJvZ3JhbUV4ZWN1dGFi
bGU6OmppdENvbXBpbGUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBqaXRDb21waWxl
SWZBcHByb3ByaWF0ZShnbG9iYWxEYXRhLCBtX3Byb2dyYW1Db2RlQmxvY2ssIG1faml0Q29kZUZv
ckNhbGwsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsK
KyAgICByZXR1cm4gaml0Q29tcGlsZUlmQXBwcm9wcmlhdGUoZXhlYywgbV9wcm9ncmFtQ29kZUJs
b2NrLCBtX2ppdENvZGVGb3JDYWxsLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCksIEpJVENvbXBp
bGF0aW9uQ2FuRmFpbCk7CiB9CiAjZW5kaWYKIApAQCAtMzc2LDcgKzM3Niw3IEBAIEpTT2JqZWN0
KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZUludGUKICAgICB9CiAKICNpZiBFTkFCTEUoSklU
KQotICAgIGlmICghcHJlcGFyZUZvckV4ZWN1dGlvbigqZ2xvYmFsRGF0YSwgbV9wcm9ncmFtQ29k
ZUJsb2NrLCBtX2ppdENvZGVGb3JDYWxsLCBqaXRUeXBlKSkKKyAgICBpZiAoIXByZXBhcmVGb3JF
eGVjdXRpb24oZXhlYywgbV9wcm9ncmFtQ29kZUJsb2NrLCBtX2ppdENvZGVGb3JDYWxsLCBqaXRU
eXBlKSkKICAgICAgICAgcmV0dXJuIDA7CiAjZW5kaWYKIApAQCAtNDc5LDE0ICs0NzksMTQgQEAg
SlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdAogfQogCiAjaWYgRU5BQkxF
KEpJVCkKLWJvb2wgRnVuY3Rpb25FeGVjdXRhYmxlOjpqaXRDb21waWxlRm9yQ2FsbChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEpCitib29sIEZ1bmN0aW9uRXhlY3V0YWJsZTo6aml0Q29tcGlsZUZv
ckNhbGwoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBqaXRDb21waWxlRnVuY3Rpb25J
ZkFwcHJvcHJpYXRlKGdsb2JhbERhdGEsIG1fY29kZUJsb2NrRm9yQ2FsbCwgbV9qaXRDb2RlRm9y
Q2FsbCwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLCBtX3N5bWJvbFRhYmxlLCBKSVRD
b2RlOjpib3R0b21UaWVySklUKCksIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgcmV0dXJu
IGppdENvbXBpbGVGdW5jdGlvbklmQXBwcm9wcmlhdGUoZXhlYywgbV9jb2RlQmxvY2tGb3JDYWxs
LCBtX2ppdENvZGVGb3JDYWxsLCBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2ssIG1fc3lt
Ym9sVGFibGUsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSwgSklUQ29tcGlsYXRpb25DYW5GYWls
KTsKIH0KIAotYm9vbCBGdW5jdGlvbkV4ZWN1dGFibGU6OmppdENvbXBpbGVGb3JDb25zdHJ1Y3Qo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorYm9vbCBGdW5jdGlvbkV4ZWN1dGFibGU6OmppdENv
bXBpbGVGb3JDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBqaXRDb21w
aWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKGdsb2JhbERhdGEsIG1fY29kZUJsb2NrRm9yQ29uc3Ry
dWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3QsIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0
eUNoZWNrLCBtX3N5bWJvbFRhYmxlLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCksIEpJVENvbXBp
bGF0aW9uQ2FuRmFpbCk7CisgICAgcmV0dXJuIGppdENvbXBpbGVGdW5jdGlvbklmQXBwcm9wcmlh
dGUoZXhlYywgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QsIG1faml0Q29kZUZvckNvbnN0cnVjdCwg
bV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2ssIG1fc3ltYm9sVGFibGUsIEpJVENv
ZGU6OmJvdHRvbVRpZXJKSVQoKSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKIH0KICNlbmRpZgog
CkBAIC01NTEsNyArNTUxLDcgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGls
ZUZvcgogICAgIG1fc3ltYm9sVGFibGUgPSBtX2NvZGVCbG9ja0ZvckNhbGwtPnNoYXJlZFN5bWJv
bFRhYmxlKCk7CiAKICNpZiBFTkFCTEUoSklUKQotICAgIGlmICghcHJlcGFyZUZ1bmN0aW9uRm9y
RXhlY3V0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9jb2RlQmxvY2tGb3JDYWxsLCBtX2ppdENv
ZGVGb3JDYWxsLCBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2ssIG1fc3ltYm9sVGFibGUs
IGppdFR5cGUsIENvZGVGb3JDYWxsKSkKKyAgICBpZiAoIXByZXBhcmVGdW5jdGlvbkZvckV4ZWN1
dGlvbihleGVjLCBtX2NvZGVCbG9ja0ZvckNhbGwsIG1faml0Q29kZUZvckNhbGwsIG1faml0Q29k
ZUZvckNhbGxXaXRoQXJpdHlDaGVjaywgbV9zeW1ib2xUYWJsZSwgaml0VHlwZSwgQ29kZUZvckNh
bGwpKQogICAgICAgICByZXR1cm4gMDsKICNlbmRpZgogCkBAIC01OTMsNyArNTkzLDcgQEAgSlNP
YmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvcgogICAgIG1fc3ltYm9sVGFibGUg
PSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+c2hhcmVkU3ltYm9sVGFibGUoKTsKIAogI2lmIEVO
QUJMRShKSVQpCi0gICAgaWYgKCFwcmVwYXJlRnVuY3Rpb25Gb3JFeGVjdXRpb24oZXhlYy0+Z2xv
YmFsRGF0YSgpLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCwgbV9qaXRDb2RlRm9yQ29uc3RydWN0
LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjaywgbV9zeW1ib2xUYWJsZSwgaml0
VHlwZSwgQ29kZUZvckNvbnN0cnVjdCkpCisgICAgaWYgKCFwcmVwYXJlRnVuY3Rpb25Gb3JFeGVj
dXRpb24oZXhlYywgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QsIG1faml0Q29kZUZvckNvbnN0cnVj
dCwgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2ssIG1fc3ltYm9sVGFibGUsIGpp
dFR5cGUsIENvZGVGb3JDb25zdHJ1Y3QpKQogICAgICAgICByZXR1cm4gMDsKICNlbmRpZgogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lv
biAxMTQ1NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM0Nyw3ICszNDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgCiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGUo
SlNHbG9iYWxEYXRhJik7Ci0gICAgICAgIGJvb2wgaml0Q29tcGlsZShKU0dsb2JhbERhdGEmKTsK
KyAgICAgICAgYm9vbCBqaXRDb21waWxlKEV4ZWNTdGF0ZSopOwogI2VuZGlmCiAKICAgICAgICAg
RXZhbENvZGVCbG9jayYgZ2VuZXJhdGVkQnl0ZWNvZGUoKQpAQCAtNDIyLDcgKzQyMiw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAKICNpZiBFTkFCTEUoSklUKQogICAgICAgICB2b2lkIGpl
dHRpc29uT3B0aW1pemVkQ29kZShKU0dsb2JhbERhdGEmKTsKLSAgICAgICAgYm9vbCBqaXRDb21w
aWxlKEpTR2xvYmFsRGF0YSYpOworICAgICAgICBib29sIGppdENvbXBpbGUoRXhlY1N0YXRlKik7
CiAjZW5kaWYKIAogICAgICAgICBQcm9ncmFtQ29kZUJsb2NrJiBnZW5lcmF0ZWRCeXRlY29kZSgp
CkBAIC01MjQsNyArNTI0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogI2lmIEVOQUJM
RShKSVQpCiAgICAgICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbChKU0dsb2Jh
bERhdGEmKTsKLSAgICAgICAgYm9vbCBqaXRDb21waWxlRm9yQ2FsbChKU0dsb2JhbERhdGEmKTsK
KyAgICAgICAgYm9vbCBqaXRDb21waWxlRm9yQ2FsbChFeGVjU3RhdGUqKTsKICNlbmRpZgogCiAg
ICAgICAgIGJvb2wgaXNHZW5lcmF0ZWRGb3JDYWxsKCkgY29uc3QKQEAgLTU1Miw3ICs1NTIsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgdm9p
ZCBqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QoSlNHbG9iYWxEYXRhJik7Ci0gICAg
ICAgIGJvb2wgaml0Q29tcGlsZUZvckNvbnN0cnVjdChKU0dsb2JhbERhdGEmKTsKKyAgICAgICAg
Ym9vbCBqaXRDb21waWxlRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSopOwogI2VuZGlmCiAKICAgICAg
ICAgYm9vbCBpc0dlbmVyYXRlZEZvckNvbnN0cnVjdCgpIGNvbnN0CkBAIC02MDEsMTIgKzYwMSwx
MiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgYm9vbCBqaXRDb21waWxlRm9yKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgICAgICBib29sIGppdENvbXBpbGVGb3IoRXhl
Y1N0YXRlKiBleGVjLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQotICAgICAgICAgICAgICAgIHJldHVy
biBqaXRDb21waWxlRm9yQ2FsbChnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
aml0Q29tcGlsZUZvckNhbGwoZXhlYyk7CiAgICAgICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2Rl
Rm9yQ29uc3RydWN0KTsKLSAgICAgICAgICAgIHJldHVybiBqaXRDb21waWxlRm9yQ29uc3RydWN0
KGdsb2JhbERhdGEpOworICAgICAgICAgICAgcmV0dXJuIGppdENvbXBpbGVGb3JDb25zdHJ1Y3Qo
ZXhlYyk7CiAgICAgICAgIH0KICNlbmRpZgogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRpb25IYXJuZXNzLmgJKHJldmlzaW9uIDExNDU1
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaAko
d29ya2luZyBjb3B5KQpAQCAtMzYsMzIgKzM2LDMyIEBACiBuYW1lc3BhY2UgSlNDIHsKIAogdGVt
cGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KLWlubGluZSBib29sIHByZXBhcmVGb3JFeGVj
dXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBPd25QdHI8Q29kZUJsb2NrVHlwZT4mIGNv
ZGVCbG9jaywgSklUQ29kZSYgaml0Q29kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKQoraW5s
aW5lIGJvb2wgcHJlcGFyZUZvckV4ZWN1dGlvbihFeGVjU3RhdGUqIGV4ZWMsIE93blB0cjxDb2Rl
QmxvY2tUeXBlPiYgY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBKSVRDb2RlOjpKSVRUeXBl
IGppdFR5cGUpCiB7CiAjaWYgRU5BQkxFKExMSU5UKQogICAgIGlmIChKSVRDb2RlOjppc0Jhc2Vs
aW5lQ29kZShqaXRUeXBlKSkgewogICAgICAgICAvLyBTdGFydCBvZmYgaW4gdGhlIGxvdyBsZXZl
bCBpbnRlcnByZXRlci4KLSAgICAgICAgTExJbnQ6OmdldEVudHJ5cG9pbnQoZ2xvYmFsRGF0YSwg
Y29kZUJsb2NrLmdldCgpLCBqaXRDb2RlKTsKKyAgICAgICAgTExJbnQ6OmdldEVudHJ5cG9pbnQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2suZ2V0KCksIGppdENvZGUpOwogICAgICAgICBj
b2RlQmxvY2stPnNldEpJVENvZGUoaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKExMSU5UKQotICAg
IHJldHVybiBqaXRDb21waWxlSWZBcHByb3ByaWF0ZShnbG9iYWxEYXRhLCBjb2RlQmxvY2ssIGpp
dENvZGUsIGppdFR5cGUsIEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUpID8gSklUQ29t
cGlsYXRpb25NdXN0U3VjY2VlZCA6IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgcmV0dXJu
IGppdENvbXBpbGVJZkFwcHJvcHJpYXRlKGV4ZWMsIGNvZGVCbG9jaywgaml0Q29kZSwgaml0VHlw
ZSwgSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkgPyBKSVRDb21waWxhdGlvbk11c3RT
dWNjZWVkIDogSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKIH0KIAotaW5saW5lIGJvb2wgcHJlcGFy
ZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgT3duUHRyPEZ1
bmN0aW9uQ29kZUJsb2NrPiYgY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjaywgU2hhcmVkU3ltYm9sVGFibGUqJiBz
eW1ib2xUYWJsZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQpCitpbmxpbmUgYm9vbCBwcmVwYXJlRnVuY3Rpb25Gb3JFeGVjdXRpb24oRXhlY1N0
YXRlKiBleGVjLCBPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+JiBjb2RlQmxvY2ssIEpJVENvZGUm
IGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBT
aGFyZWRTeW1ib2xUYWJsZSomIHN5bWJvbFRhYmxlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUs
IENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKICNpZiBFTkFCTEUoTExJTlQpCiAgICAg
aWYgKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUpKSB7CiAgICAgICAgIC8vIFN0YXJ0
IG9mZiBpbiB0aGUgbG93IGxldmVsIGludGVycHJldGVyLgotICAgICAgICBMTEludDo6Z2V0RnVu
Y3Rpb25FbnRyeXBvaW50KGdsb2JhbERhdGEsIGtpbmQsIGppdENvZGUsIGppdENvZGVXaXRoQXJp
dHlDaGVjayk7CisgICAgICAgIExMSW50OjpnZXRGdW5jdGlvbkVudHJ5cG9pbnQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBraW5kLCBqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwogICAgICAg
ICBjb2RlQmxvY2stPnNldEpJVENvZGUoaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oa2lu
ZCk7CiAjZW5kaWYgLy8gRU5BQkxFKExMSU5UKQotICAgIHJldHVybiBqaXRDb21waWxlRnVuY3Rp
b25JZkFwcHJvcHJpYXRlKGdsb2JhbERhdGEsIGNvZGVCbG9jaywgaml0Q29kZSwgaml0Q29kZVdp
dGhBcml0eUNoZWNrLCBzeW1ib2xUYWJsZSwgaml0VHlwZSwgSklUQ29kZTo6aXNCYXNlbGluZUNv
ZGUoaml0VHlwZSkgPyBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkIDogSklUQ29tcGlsYXRpb25D
YW5GYWlsKTsKKyAgICByZXR1cm4gaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0ZShleGVj
LCBjb2RlQmxvY2ssIGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjaywgc3ltYm9sVGFibGUs
IGppdFR5cGUsIEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUpID8gSklUQ29tcGlsYXRp
b25NdXN0U3VjY2VlZCA6IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwo=
</data>
<flag name="review"
          id="145185"
          type_id="1"
          status="+"
          setter="barraclough"
    />
    <flag name="commit-queue"
          id="145188"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143111</attachid>
            <date>2012-05-21 15:14:06 -0700</date>
            <delta_ts>2012-05-21 15:14:06 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>putbyiddump_patch_1.diff</filename>
            <type>text/plain</type>
            <size>48564</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE3ODIyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg5IEBA
CisyMDEyLTA0LTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Qnl0ZWNvZGUgZHVtcHMgc2hvdWxkIGNvbnRhaW4gZGF0YSBhYm91dCB0aGUgc3RhdGUgb2YgZ2V0
X2J5X2lkIGNhY2hlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODUyNDYKKworICAgICAgICBSZXZpZXdlZCBieSBHYXZpbiBCYXJyYWNsb3VnaC4KKyAg
ICAgICAgCisgICAgICAgIE1lcmdlIHIxMTU2OTQgZnJvbSBkZmdvcHQuCisgICAgICAgIAorICAg
ICAgICBDaGFuZ2VkIHRoZSBERkcgYnl0ZWNvZGUgcGFyc2VyIChhbmQgdGhlIGNvZGUgdGhhdCBj
YWxscyBpdCkgdG8gYmUgYWJsZQorICAgICAgICB0byBjYWxsIGNvZGVCbG9jay0+ZHVtcCgpIG9u
IHRoZSBjb2RlIGJsb2NrcyBiZWluZyBwYXJzZWQuCisgICAgICAgIAorICAgICAgICBDaGFuZ2Vk
IGJ5dGVjb2RlIGR1bXBpbmcgdG8gYmUgYWJsZSB0byBwcmludCB0aGUgc3RhdGUgb2YgZ2V0X2J5
X2lkCisgICAgICAgIGNhY2hlcyBpbmxpbmUgd2l0aCB0aGUgYnl0ZWNvZGUuCisgICAgICAgIAor
ICAgICAgICBSZW1vdmVkIHRoZSBvbGQgU3RydWN0dXJlU3R1YkluZm8gZHVtcGluZyBjb2RlLCB3
aGljaCBubyBsb25nZXIgd29ya2VkCisgICAgICAgIHJpZ2h0LCBhbmQgd2FzIGluY2FwYWJsZSBv
ZiB0ZWxsaW5nIHVzIGluZm9ybWF0aW9uIGFib3V0IGNoYWluIGFuZCBsaXN0CisgICAgICAgIGFj
Y2Vzc2VzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWRkIGR1bXBp
bmcgZm9yIHB1dF9ieV9pZCBjYWNoZXMuIFdlIGNhbiBhZGQgdGhhdAorICAgICAgICBhdCBhIGxh
dGVyIHRpbWUuCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnByaW50VW5hcnlPcCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
cHJpbnRCaW5hcnlPcCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJpbnRDb25kaXRpb25h
bEp1bXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByaW50R2V0QnlJZE9wKToKKyAgICAg
ICAgKEpTQzo6ZHVtcFN0cnVjdHVyZSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpk
dW1wQ2hhaW4pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3Rh
dHVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludENhbGxPcCk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6cHJpbnRQdXRCeUlkT3ApOgorICAgICAgICAoSlNDOjpwcmludEdsb2Jh
bFJlc29sdmVJbmZvKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludFN0cnVjdHVyZSk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJpbnRTdHJ1Y3R1cmVzKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpkdW1wKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2aXNpdFN0cnVj
dHVyZXMpOgorICAgICAgICAoSlNDOjpQcm9ncmFtQ29kZUJsb2NrOjpqaXRDb21waWxlSW1wbCk6
CisgICAgICAgIChKU0M6OkV2YWxDb2RlQmxvY2s6OmppdENvbXBpbGVJbXBsKToKKyAgICAgICAg
KEpTQzo6RnVuY3Rpb25Db2RlQmxvY2s6OmppdENvbXBpbGVJbXBsKToKKyAgICAgICAgKiBieXRl
Y29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6aml0Q29tcGlsZSk6CisgICAgICAgIChQcm9ncmFtQ29kZUJsb2NrKToKKyAgICAg
ICAgKEV2YWxDb2RlQmxvY2spOgorICAgICAgICAoRnVuY3Rpb25Db2RlQmxvY2spOgorICAgICAg
ICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OkJ5dGVDb2RlUGFyc2VyKToKKyAgICAgICAgKEJ5dGVDb2RlUGFyc2VyKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2spOgorICAgICAg
ICAoSlNDOjpERkc6OnBhcnNlKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuaDoK
KyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q29tcGlsZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6dHJ5Q29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHRHJp
dmVyLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OnRyeUNvbXBpbGUpOgor
ICAgICAgICAoSlNDOjpERkc6OnRyeUNvbXBpbGVGdW5jdGlvbik6CisgICAgICAgICogZGZnL0RG
R09TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgICogaml0L0pJVERyaXZlci5oOgorICAgICAg
ICAoSlNDOjpqaXRDb21waWxlSWZBcHByb3ByaWF0ZSk6CisgICAgICAgIChKU0M6OmppdENvbXBp
bGVGdW5jdGlvbklmQXBwcm9wcmlhdGUpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhz
LmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKToK
KyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpFdmFsRXhl
Y3V0YWJsZTo6aml0Q29tcGlsZSk6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpjb21w
aWxlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6aml0Q29tcGls
ZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwpOgor
ICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmppdENvbXBpbGVGb3JDYWxsKToKKyAg
ICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpqaXRDb21waWxlRm9yQ29uc3RydWN0KToK
KyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFs
KToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3RydWN0
SW50ZXJuYWwpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoRXZh
bEV4ZWN1dGFibGUpOgorICAgICAgICAoUHJvZ3JhbUV4ZWN1dGFibGUpOgorICAgICAgICAoRnVu
Y3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpqaXRD
b21waWxlRm9yKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaDoKKyAgICAg
ICAgKEpTQzo6cHJlcGFyZUZvckV4ZWN1dGlvbik6CisgICAgICAgIChKU0M6OnByZXBhcmVGdW5j
dGlvbkZvckV4ZWN1dGlvbik6CisKIDIwMTItMDUtMjEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8
Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeCBtYWtlIGRpc3Rj
aGVjay4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCShyZXZpc2lvbiAxMTc4MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUg
IkpTU3RhdGljU2NvcGVPYmplY3QuaCIKICNpbmNsdWRlICJKU1ZhbHVlLmgiCiAjaW5jbHVkZSAi
TG93TGV2ZWxJbnRlcnByZXRlci5oIgorI2luY2x1ZGUgIk1ldGhvZENhbGxMaW5rU3RhdHVzLmgi
CiAjaW5jbHVkZSAiUmVwYXRjaEJ1ZmZlci5oIgogI2luY2x1ZGUgIlVTdHJpbmdDb25jYXRlbmF0
ZS5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC0xNTAsNyArMTUxLDcgQEAgTkVWRVJfSU5MSU5F
IHN0YXRpYyBjb25zdCBjaGFyKiBkZWJ1Z0hvbwogICAgIHJldHVybiAiIjsKIH0KIAotdm9pZCBD
b2RlQmxvY2s6OnByaW50VW5hcnlPcChFeGVjU3RhdGUqIGV4ZWMsIGludCBsb2NhdGlvbiwgVmVj
dG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImIGl0LCBjb25zdCBjaGFyKiBvcCkgY29u
c3QKK3ZvaWQgQ29kZUJsb2NrOjpwcmludFVuYXJ5T3AoRXhlY1N0YXRlKiBleGVjLCBpbnQgbG9j
YXRpb24sIFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJiBpdCwgY29uc3QgY2hh
ciogb3ApCiB7CiAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgaW50IHIxID0g
KCsraXQpLT51Lm9wZXJhbmQ7CkBAIC0xNTgsNyArMTU5LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnBy
aW50VW5hcnlPcChFeGVjU3RhdGUqIAogICAgIGRhdGFMb2coIlslNGRdICVzXHRcdCAlcywgJXNc
biIsIGxvY2F0aW9uLCBvcCwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCksIHJlZ2lzdGVy
TmFtZShleGVjLCByMSkuZGF0YSgpKTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnByaW50QmluYXJ5
T3AoRXhlY1N0YXRlKiBleGVjLCBpbnQgbG9jYXRpb24sIFZlY3RvcjxJbnN0cnVjdGlvbj46OmNv
bnN0X2l0ZXJhdG9yJiBpdCwgY29uc3QgY2hhciogb3ApIGNvbnN0Cit2b2lkIENvZGVCbG9jazo6
cHJpbnRCaW5hcnlPcChFeGVjU3RhdGUqIGV4ZWMsIGludCBsb2NhdGlvbiwgVmVjdG9yPEluc3Ry
dWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImIGl0LCBjb25zdCBjaGFyKiBvcCkKIHsKICAgICBpbnQg
cjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsK
QEAgLTE2NiwyMyArMTY3LDIxMCBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRCaW5hcnlPcChFeGVj
U3RhdGUqCiAgICAgZGF0YUxvZygiWyU0ZF0gJXNcdFx0ICVzLCAlcywgJXNcbiIsIGxvY2F0aW9u
LCBvcCwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVjLCBy
MSkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZXhlYywgcjIpLmRhdGEoKSk7CiB9CiAKLXZvaWQgQ29k
ZUJsb2NrOjpwcmludENvbmRpdGlvbmFsSnVtcChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFZlY3Rv
cjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJiwgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29u
c3RfaXRlcmF0b3ImIGl0LCBpbnQgbG9jYXRpb24sIGNvbnN0IGNoYXIqIG9wKSBjb25zdAordm9p
ZCBDb2RlQmxvY2s6OnByaW50Q29uZGl0aW9uYWxKdW1wKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
VmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImLCBWZWN0b3I8SW5zdHJ1Y3Rpb24+
Ojpjb25zdF9pdGVyYXRvciYgaXQsIGludCBsb2NhdGlvbiwgY29uc3QgY2hhciogb3ApCiB7CiAg
ICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgaW50IG9mZnNldCA9ICgrK2l0KS0+
dS5vcGVyYW5kOwogICAgIGRhdGFMb2coIlslNGRdICVzXHRcdCAlcywgJWQoLT4lZClcbiIsIGxv
Y2F0aW9uLCBvcCwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCksIG9mZnNldCwgbG9jYXRp
b24gKyBvZmZzZXQpOwogfQogCi12b2lkIENvZGVCbG9jazo6cHJpbnRHZXRCeUlkT3AoRXhlY1N0
YXRlKiBleGVjLCBpbnQgbG9jYXRpb24sIFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJh
dG9yJiBpdCwgY29uc3QgY2hhciogb3ApIGNvbnN0Cit2b2lkIENvZGVCbG9jazo6cHJpbnRHZXRC
eUlkT3AoRXhlY1N0YXRlKiBleGVjLCBpbnQgbG9jYXRpb24sIFZlY3RvcjxJbnN0cnVjdGlvbj46
OmNvbnN0X2l0ZXJhdG9yJiBpdCkKIHsKKyAgICBjb25zdCBjaGFyKiBvcDsKKyAgICBzd2l0Y2gg
KGV4ZWMtPmludGVycHJldGVyKCktPmdldE9wY29kZUlEKGl0LT51Lm9wY29kZSkpIHsKKyAgICBj
YXNlIG9wX2dldF9ieV9pZDoKKyAgICAgICAgb3AgPSAiZ2V0X2J5X2lkIjsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfc2VsZjoKKyAgICAgICAgb3AgPSAiZ2V0X2J5X2lk
X3NlbGYiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9wcm90bzoKKyAg
ICAgICAgb3AgPSAiZ2V0X2J5X2lkX3Byb3RvIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9nZXRfYnlfaWRfY2hhaW46CisgICAgICAgIG9wID0gImdldF9ieV9pZF9jaGFpbiI7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRlcl9zZWxmOgorICAgICAgICBv
cCA9ICJnZXRfYnlfaWRfZ2V0dGVyX3NlbGYiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2dldF9ieV9pZF9nZXR0ZXJfcHJvdG86CisgICAgICAgIG9wID0gImdldF9ieV9pZF9nZXR0ZXJf
cHJvdG8iOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9nZXR0ZXJfY2hh
aW46CisgICAgICAgIG9wID0gImdldF9ieV9pZF9nZXR0ZXJfY2hhaW4iOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9jdXN0b21fc2VsZjoKKyAgICAgICAgb3AgPSAiZ2V0
X2J5X2lkX2N1c3RvbV9zZWxmIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlf
aWRfY3VzdG9tX3Byb3RvOgorICAgICAgICBvcCA9ICJnZXRfYnlfaWRfY3VzdG9tX3Byb3RvIjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9tX2NoYWluOgorICAg
ICAgICBvcCA9ICJnZXRfYnlfaWRfY3VzdG9tX2NoYWluIjsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9nZXRfYnlfaWRfZ2VuZXJpYzoKKyAgICAgICAgb3AgPSAiZ2V0X2J5X2lkX2dlbmVy
aWMiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9hcnJheV9sZW5ndGg6CisgICAg
ICAgIG9wID0gImFycmF5X2xlbmd0aCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0
X3N0cmluZ19sZW5ndGg6CisgICAgICAgIG9wID0gInN0cmluZ19sZW5ndGgiOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgb3AgPSAwOworICAgIH0KICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICBp
bnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJh
bmQ7Ci0gICAgZGF0YUxvZygiWyU0ZF0gJXNcdCAlcywgJXMsICVzXG4iLCBsb2NhdGlvbiwgb3As
IHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZXhlYywgcjEpLmRh
dGEoKSwgaWROYW1lKGlkMCwgbV9pZGVudGlmaWVyc1tpZDBdKS5kYXRhKCkpOworICAgIGRhdGFM
b2coIlslNGRdICVzXHQgJXMsICVzLCAlcyIsIGxvY2F0aW9uLCBvcCwgcmVnaXN0ZXJOYW1lKGV4
ZWMsIHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVjLCByMSkuZGF0YSgpLCBpZE5hbWUoaWQw
LCBtX2lkZW50aWZpZXJzW2lkMF0pLmRhdGEoKSk7CiAgICAgaXQgKz0gNTsKIH0KIAotdm9pZCBD
b2RlQmxvY2s6OnByaW50Q2FsbE9wKEV4ZWNTdGF0ZSogZXhlYywgaW50IGxvY2F0aW9uLCBWZWN0
b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYgaXQsIGNvbnN0IGNoYXIqIG9wKSBjb25z
dAorc3RhdGljIHZvaWQgZHVtcFN0cnVjdHVyZShjb25zdCBjaGFyKiBuYW1lLCBFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBJZGVudGlmaWVyJiBpZGVudCkKK3sKKyAgICBp
ZiAoIXN0cnVjdHVyZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGRhdGFMb2coIiVzID0g
JXAiLCBuYW1lLCBzdHJ1Y3R1cmUpOworICAgIAorICAgIHNpemVfdCBvZmZzZXQgPSBzdHJ1Y3R1
cmUtPmdldChleGVjLT5nbG9iYWxEYXRhKCksIGlkZW50KTsKKyAgICBpZiAob2Zmc2V0ICE9IG5v
dEZvdW5kKQorICAgICAgICBkYXRhTG9nKCIgKG9mZnNldCA9ICVsdSkiLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBsb25nPihvZmZzZXQpKTsKK30KKworc3RhdGljIHZvaWQgZHVtcENoYWluKEV4ZWNT
dGF0ZSogZXhlYywgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBJZGVudGlmaWVyJiBpZGVudCkKK3sK
KyAgICBkYXRhTG9nKCJjaGFpbiA9ICVwOiBbIiwgY2hhaW4pOworICAgIGJvb2wgZmlyc3QgPSB0
cnVlOworICAgIGZvciAoV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGN1cnJlbnRTdHJ1Y3R1cmUg
PSBjaGFpbi0+aGVhZCgpOworICAgICAgICAgKmN1cnJlbnRTdHJ1Y3R1cmU7CisgICAgICAgICAr
K2N1cnJlbnRTdHJ1Y3R1cmUpIHsKKyAgICAgICAgaWYgKGZpcnN0KQorICAgICAgICAgICAgZmly
c3QgPSBmYWxzZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGF0YUxvZygiLCAiKTsKKyAg
ICAgICAgZHVtcFN0cnVjdHVyZSgic3RydWN0IiwgZXhlYywgY3VycmVudFN0cnVjdHVyZS0+Z2V0
KCksIGlkZW50KTsKKyAgICB9CisgICAgZGF0YUxvZygiXSIpOworfQorCit2b2lkIENvZGVCbG9j
azo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMoRXhlY1N0YXRlKiBleGVjLCBpbnQgbG9jYXRpb24p
Cit7CisgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4o
KSArIGxvY2F0aW9uOworCisgICAgaWYgKGV4ZWMtPmludGVycHJldGVyKCktPmdldE9wY29kZUlE
KGluc3RydWN0aW9uWzBdLnUub3Bjb2RlKSA9PSBvcF9tZXRob2RfY2hlY2spCisgICAgICAgIGlu
c3RydWN0aW9uKys7CisgICAgCisgICAgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKGlu
c3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgCisjaWYgRU5BQkxFKExMSU5UKQorICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gaW5zdHJ1Y3Rpb25bNF0udS5zdHJ1Y3R1cmUuZ2V0KCk7Cisg
ICAgZGF0YUxvZygiIGxsaW50KCIpOworICAgIGR1bXBTdHJ1Y3R1cmUoInN0cnVjdCIsIGV4ZWMs
IHN0cnVjdHVyZSwgaWRlbnQpOworICAgIGRhdGFMb2coIikiKTsKKyNlbmRpZgorCisjaWYgRU5B
QkxFKEpJVCkKKyAgICBpZiAobnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3MoKSkgeworICAgICAg
ICBkYXRhTG9nKCIgaml0KCIpOworICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8g
PSBnZXRTdHViSW5mbyhsb2NhdGlvbik7CisgICAgICAgIGlmICghc3R1YkluZm8uc2VlbikKKyAg
ICAgICAgICAgIGRhdGFMb2coIm5vdCBzZWVuIik7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgU3RydWN0dXJlKiBiYXNlU3RydWN0dXJlID0gMDsKKyAgICAgICAgICAgIFN0cnVjdHVyZSog
cHJvdG90eXBlU3RydWN0dXJlID0gMDsKKyAgICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBjaGFp
biA9IDA7CisgICAgICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHN0cnVj
dHVyZUxpc3QgPSAwOworICAgICAgICAgICAgaW50IGxpc3RTaXplID0gMDsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBlKSB7CisgICAgICAgICAg
ICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJz
ZWxmIik7CisgICAgICAgICAgICAgICAgYmFzZVN0cnVjdHVyZSA9IHN0dWJJbmZvLnUuZ2V0QnlJ
ZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9wcm90bzoKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nKCJwcm90byIpOworICAgICAgICAgICAgICAgIGJhc2VTdHJ1Y3R1cmUgPSBzdHVi
SW5mby51LmdldEJ5SWRQcm90by5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpOworICAgICAgICAg
ICAgICAgIHByb3RvdHlwZVN0cnVjdHVyZSA9IHN0dWJJbmZvLnUuZ2V0QnlJZFByb3RvLnByb3Rv
dHlwZVN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgYWNjZXNzX2dldF9ieV9pZF9jaGFpbjoKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJj
aGFpbiIpOworICAgICAgICAgICAgICAgIGJhc2VTdHJ1Y3R1cmUgPSBzdHViSW5mby51LmdldEJ5
SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpOworICAgICAgICAgICAgICAgIGNoYWlu
ID0gc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uY2hhaW4uZ2V0KCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZl9saXN0OgorICAg
ICAgICAgICAgICAgIGRhdGFMb2coInNlbGZfbGlzdCIpOworICAgICAgICAgICAgICAgIHN0cnVj
dHVyZUxpc3QgPSBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVMaXN0OworICAg
ICAgICAgICAgICAgIGxpc3RTaXplID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3QubGlzdFNp
emU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGFjY2Vzc19nZXRf
YnlfaWRfcHJvdG9fbGlzdDoKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJwcm90b19saXN0Iik7
CisgICAgICAgICAgICAgICAgc3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLnUuZ2V0QnlJZFByb3Rv
TGlzdC5zdHJ1Y3R1cmVMaXN0OworICAgICAgICAgICAgICAgIGxpc3RTaXplID0gc3R1YkluZm8u
dS5nZXRCeUlkUHJvdG9MaXN0Lmxpc3RTaXplOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBhY2Nlc3NfdW5zZXQ6CisgICAgICAgICAgICAgICAgZGF0YUxvZygidW5z
ZXQiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgYWNjZXNzX2dl
dF9ieV9pZF9nZW5lcmljOgorICAgICAgICAgICAgICAgIGRhdGFMb2coImdlbmVyaWMiKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgYWNjZXNzX2dldF9hcnJheV9s
ZW5ndGg6CisgICAgICAgICAgICAgICAgZGF0YUxvZygiYXJyYXlfbGVuZ3RoIik7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGFjY2Vzc19nZXRfc3RyaW5nX2xlbmd0
aDoKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJzdHJpbmdfbGVuZ3RoIik7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoYmFzZVN0cnVjdHVyZSkgeworICAgICAgICAg
ICAgICAgIGRhdGFMb2coIiwgIik7CisgICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZSgic3Ry
dWN0IiwgZXhlYywgYmFzZVN0cnVjdHVyZSwgaWRlbnQpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAocHJvdG90eXBlU3RydWN0dXJlKSB7CisgICAgICAgICAg
ICAgICAgZGF0YUxvZygiLCAiKTsKKyAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKCJwcm90
b3R5cGVTdHJ1Y3QiLCBleGVjLCBiYXNlU3RydWN0dXJlLCBpZGVudCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChjaGFpbikgeworICAgICAgICAgICAgICAg
IGRhdGFMb2coIiwgIik7CisgICAgICAgICAgICAgICAgZHVtcENoYWluKGV4ZWMsIGNoYWluLCBp
ZGVudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzdHJ1
Y3R1cmVMaXN0KSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiLCBsaXN0ID0gJXA6IFsiLCBz
dHJ1Y3R1cmVMaXN0KTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3RT
aXplOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIsICIpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIoIik7
CisgICAgICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUoImJhc2UiLCBleGVjLCBzdHJ1Y3R1
cmVMaXN0LT5saXN0W2ldLmJhc2UuZ2V0KCksIGlkZW50KTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHN0cnVjdHVyZUxpc3QtPmxpc3RbaV0uaXNDaGFpbikgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHN0cnVjdHVyZUxpc3QtPmxpc3RbaV0udS5jaGFpbi5nZXQoKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiwgIik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZHVtcENoYWluKGV4ZWMsIHN0cnVjdHVyZUxpc3QtPmxpc3RbaV0udS5jaGFpbi5n
ZXQoKSwgaWRlbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZUxpc3Qt
Pmxpc3RbaV0udS5wcm90by5nZXQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coIiwgIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZSgi
cHJvdG8iLCBleGVjLCBzdHJ1Y3R1cmVMaXN0LT5saXN0W2ldLnUucHJvdG8uZ2V0KCksIGlkZW50
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCIpIik7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGRhdGFMb2coIl0iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBkYXRhTG9nKCIpIik7CisgICAgfQorI2VuZGlmCit9CisKK3ZvaWQgQ29kZUJsb2NrOjpwcmlu
dENhbGxPcChFeGVjU3RhdGUqIGV4ZWMsIGludCBsb2NhdGlvbiwgVmVjdG9yPEluc3RydWN0aW9u
Pjo6Y29uc3RfaXRlcmF0b3ImIGl0LCBjb25zdCBjaGFyKiBvcCkKIHsKICAgICBpbnQgZnVuYyA9
ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgIGludCBhcmdDb3VudCA9ICgrK2l0KS0+dS5vcGVyYW5k
OwpAQCAtMTkxLDcgKzM3OSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludENhbGxPcChFeGVjU3Rh
dGUqIGUKICAgICBpdCArPSAyOwogfQogCi12b2lkIENvZGVCbG9jazo6cHJpbnRQdXRCeUlkT3Ao
RXhlY1N0YXRlKiBleGVjLCBpbnQgbG9jYXRpb24sIFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0
X2l0ZXJhdG9yJiBpdCwgY29uc3QgY2hhciogb3ApIGNvbnN0Cit2b2lkIENvZGVCbG9jazo6cHJp
bnRQdXRCeUlkT3AoRXhlY1N0YXRlKiBleGVjLCBpbnQgbG9jYXRpb24sIFZlY3RvcjxJbnN0cnVj
dGlvbj46OmNvbnN0X2l0ZXJhdG9yJiBpdCwgY29uc3QgY2hhciogb3ApCiB7CiAgICAgaW50IHIw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgaW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwpA
QCAtMjA2LDI2ICszOTQsNiBAQCBzdGF0aWMgYm9vbCBpc0dsb2JhbFJlc29sdmUoT3Bjb2RlSUQg
b3BjCiAgICAgcmV0dXJuIG9wY29kZUlEID09IG9wX3Jlc29sdmVfZ2xvYmFsIHx8IG9wY29kZUlE
ID09IG9wX3Jlc29sdmVfZ2xvYmFsX2R5bmFtaWM7CiB9CiAKLXN0YXRpYyBib29sIGlzUHJvcGVy
dHlBY2Nlc3MoT3Bjb2RlSUQgb3Bjb2RlSUQpCi17Ci0gICAgc3dpdGNoIChvcGNvZGVJRCkgewot
ICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9zZWxmOgotICAgICAgICBjYXNlIG9wX2dldF9ieV9p
ZF9wcm90bzoKLSAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfY2hhaW46Ci0gICAgICAgIGNhc2Ug
b3BfcHV0X2J5X2lkX3RyYW5zaXRpb246Ci0gICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3JlcGxh
Y2U6Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgotICAgICAgICBjYXNlIG9wX3B1dF9ieV9p
ZDoKLSAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2VuZXJpYzoKLSAgICAgICAgY2FzZSBvcF9w
dXRfYnlfaWRfZ2VuZXJpYzoKLSAgICAgICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVuZ3RoOgotICAg
ICAgICBjYXNlIG9wX2dldF9zdHJpbmdfbGVuZ3RoOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQot
CiBzdGF0aWMgdW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXRGb3JOdGgoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+JiBpbnN0cnVjdGlvbnMsIGludCBu
dGgsIGJvb2wgKCpwcmVkaWNhdGUpKE9wY29kZUlEKSkKIHsKICAgICBzaXplX3QgaSA9IDA7CkBA
IC0yNDYsNjAgKzQxNCwxNSBAQCBzdGF0aWMgdm9pZCBwcmludEdsb2JhbFJlc29sdmVJbmZvKGNv
bnN0CiB7CiAgICAgZGF0YUxvZygiICBbJTRkXSAlczogJXNcbiIsIGluc3RydWN0aW9uT2Zmc2V0
LCAicmVzb2x2ZV9nbG9iYWwiLCBwb2ludGVyVG9Tb3VyY2VTdHJpbmcocmVzb2x2ZUluZm8uc3Ry
dWN0dXJlKS51dGY4KCkuZGF0YSgpKTsKIH0KLQotc3RhdGljIHZvaWQgcHJpbnRTdHJ1Y3R1cmVT
dHViSW5mbyhjb25zdCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIHVuc2lnbmVkIGluc3Ry
dWN0aW9uT2Zmc2V0KQotewotICAgIHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgewotICAg
IGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgotICAgICAgICBkYXRhTG9nKCIgIFslNGRdICVz
OiAlc1xuIiwgaW5zdHJ1Y3Rpb25PZmZzZXQsICJnZXRfYnlfaWRfc2VsZiIsIHBvaW50ZXJUb1Nv
dXJjZVN0cmluZyhzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUpLnV0
ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lk
X3Byb3RvOgotICAgICAgICBkYXRhTG9nKCIgIFslNGRdICVzOiAlcywgJXNcbiIsIGluc3RydWN0
aW9uT2Zmc2V0LCAiZ2V0X2J5X2lkX3Byb3RvIiwgcG9pbnRlclRvU291cmNlU3RyaW5nKHN0dWJJ
bmZvLnUuZ2V0QnlJZFByb3RvLmJhc2VPYmplY3RTdHJ1Y3R1cmUpLnV0ZjgoKS5kYXRhKCksIHBv
aW50ZXJUb1NvdXJjZVN0cmluZyhzdHViSW5mby51LmdldEJ5SWRQcm90by5wcm90b3R5cGVTdHJ1
Y3R1cmUpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBhY2Nlc3Nf
Z2V0X2J5X2lkX2NoYWluOgotICAgICAgICBkYXRhTG9nKCIgIFslNGRdICVzOiAlcywgJXNcbiIs
IGluc3RydWN0aW9uT2Zmc2V0LCAiZ2V0X2J5X2lkX2NoYWluIiwgcG9pbnRlclRvU291cmNlU3Ry
aW5nKHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUpLnV0ZjgoKS5k
YXRhKCksIHBvaW50ZXJUb1NvdXJjZVN0cmluZyhzdHViSW5mby51LmdldEJ5SWRDaGFpbi5jaGFp
bikudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIGFjY2Vzc19nZXRf
YnlfaWRfc2VsZl9saXN0OgotICAgICAgICBkYXRhTG9nKCIgIFslNGRdICVzOiAlcyAoJWQpXG4i
LCBpbnN0cnVjdGlvbk9mZnNldCwgIm9wX2dldF9ieV9pZF9zZWxmX2xpc3QiLCBwb2ludGVyVG9T
b3VyY2VTdHJpbmcoc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3Quc3RydWN0dXJlTGlzdCkudXRm
OCgpLmRhdGEoKSwgc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3QubGlzdFNpemUpOwotICAgICAg
ICByZXR1cm47Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvX2xpc3Q6Ci0gICAgICAg
IGRhdGFMb2coIiAgWyU0ZF0gJXM6ICVzICglZClcbiIsIGluc3RydWN0aW9uT2Zmc2V0LCAib3Bf
Z2V0X2J5X2lkX3Byb3RvX2xpc3QiLCBwb2ludGVyVG9Tb3VyY2VTdHJpbmcoc3R1YkluZm8udS5n
ZXRCeUlkUHJvdG9MaXN0LnN0cnVjdHVyZUxpc3QpLnV0ZjgoKS5kYXRhKCksIHN0dWJJbmZvLnUu
Z2V0QnlJZFByb3RvTGlzdC5saXN0U2l6ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIGFj
Y2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5
X2lkX3RyYW5zaXRpb25fZGlyZWN0OgotICAgICAgICBkYXRhTG9nKCIgIFslNGRdICVzOiAlcywg
JXMsICVzXG4iLCBpbnN0cnVjdGlvbk9mZnNldCwgInB1dF9ieV9pZF90cmFuc2l0aW9uIiwgcG9p
bnRlclRvU291cmNlU3RyaW5nKHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNT
dHJ1Y3R1cmUpLnV0ZjgoKS5kYXRhKCksIHBvaW50ZXJUb1NvdXJjZVN0cmluZyhzdHViSW5mby51
LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZSkudXRmOCgpLmRhdGEoKSwgcG9pbnRlclRvU291
cmNlU3RyaW5nKHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4pLnV0ZjgoKS5kYXRh
KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6
Ci0gICAgICAgIGRhdGFMb2coIiAgWyU0ZF0gJXM6ICVzXG4iLCBpbnN0cnVjdGlvbk9mZnNldCwg
InB1dF9ieV9pZF9yZXBsYWNlIiwgcG9pbnRlclRvU291cmNlU3RyaW5nKHN0dWJJbmZvLnUucHV0
QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZSkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICBjYXNlIGFjY2Vzc191bnNldDoKLSAgICAgICAgZGF0YUxvZygiICBbJTRk
XSAlc1xuIiwgaW5zdHJ1Y3Rpb25PZmZzZXQsICJ1bnNldCIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2dlbmVyaWM6Ci0gICAgICAgIGRhdGFMb2coIiAgWyU0
ZF0gJXNcbiIsIGluc3RydWN0aW9uT2Zmc2V0LCAib3BfZ2V0X2J5X2lkX2dlbmVyaWMiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9nZW5lcmljOgotICAgICAg
ICBkYXRhTG9nKCIgIFslNGRdICVzXG4iLCBpbnN0cnVjdGlvbk9mZnNldCwgIm9wX3B1dF9ieV9p
ZF9nZW5lcmljIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIGFjY2Vzc19nZXRfYXJyYXlf
bGVuZ3RoOgotICAgICAgICBkYXRhTG9nKCIgIFslNGRdICVzXG4iLCBpbnN0cnVjdGlvbk9mZnNl
dCwgIm9wX2dldF9hcnJheV9sZW5ndGgiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgYWNj
ZXNzX2dldF9zdHJpbmdfbGVuZ3RoOgotICAgICAgICBkYXRhTG9nKCIgIFslNGRdICVzXG4iLCBp
bnN0cnVjdGlvbk9mZnNldCwgIm9wX2dldF9zdHJpbmdfbGVuZ3RoIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19
CiAjZW5kaWYKIAotdm9pZCBDb2RlQmxvY2s6OnByaW50U3RydWN0dXJlKGNvbnN0IGNoYXIqIG5h
bWUsIGNvbnN0IEluc3RydWN0aW9uKiB2UEMsIGludCBvcGVyYW5kKSBjb25zdAordm9pZCBDb2Rl
QmxvY2s6OnByaW50U3RydWN0dXJlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IEluc3RydWN0aW9u
KiB2UEMsIGludCBvcGVyYW5kKQogewogICAgIHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0ID0g
dlBDIC0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKICAgICBkYXRhTG9nKCIgIFslNGRdICVzOiAl
c1xuIiwgaW5zdHJ1Y3Rpb25PZmZzZXQsIG5hbWUsIHBvaW50ZXJUb1NvdXJjZVN0cmluZyh2UENb
b3BlcmFuZF0udS5zdHJ1Y3R1cmUpLnV0ZjgoKS5kYXRhKCkpOwogfQogCi12b2lkIENvZGVCbG9j
azo6cHJpbnRTdHJ1Y3R1cmVzKGNvbnN0IEluc3RydWN0aW9uKiB2UEMpIGNvbnN0Cit2b2lkIENv
ZGVCbG9jazo6cHJpbnRTdHJ1Y3R1cmVzKGNvbnN0IEluc3RydWN0aW9uKiB2UEMpCiB7CiAgICAg
SW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gbV9nbG9iYWxEYXRhLT5pbnRlcnByZXRlcjsKICAg
ICB1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNldCA9IHZQQyAtIGluc3RydWN0aW9ucygpLmJlZ2lu
KCk7CkBAIC0zNDUsNyArNDY4LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50U3RydWN0dXJlcyhj
b25zdCBJbgogICAgIEFTU0VSVCh2UENbMF0udS5vcGNvZGUgPT0gaW50ZXJwcmV0ZXItPmdldE9w
Y29kZShvcF9nZXRfYnlfaWRfZ2VuZXJpYykgfHwgdlBDWzBdLnUub3Bjb2RlID09IGludGVycHJl
dGVyLT5nZXRPcGNvZGUob3BfcHV0X2J5X2lkX2dlbmVyaWMpIHx8IHZQQ1swXS51Lm9wY29kZSA9
PSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlKG9wX2NhbGwpIHx8IHZQQ1swXS51Lm9wY29kZSA9PSBp
bnRlcnByZXRlci0+Z2V0T3Bjb2RlKG9wX2NhbGxfZXZhbCkgfHwgdlBDWzBdLnUub3Bjb2RlID09
IGludGVycHJldGVyLT5nZXRPcGNvZGUob3BfY29uc3RydWN0KSk7CiB9CiAKLXZvaWQgQ29kZUJs
b2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK3ZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBzaXplX3QgaW5zdHJ1Y3Rpb25Db3VudCA9IDA7CiAKQEAg
LTQwMCwxMyArNTIzLDYgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjKSBj
bwogICAgICAgICAgICAgICsraTsKICAgICAgICAgfSB3aGlsZSAoaSA8IG1fZ2xvYmFsUmVzb2x2
ZUluZm9zLnNpemUoKSk7CiAgICAgfQotICAgIGlmICghbV9zdHJ1Y3R1cmVTdHViSW5mb3MuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIHNpemVfdCBpID0gMDsKLSAgICAgICAgZG8gewotICAgICAgICAg
ICAgcHJpbnRTdHJ1Y3R1cmVTdHViSW5mbyhtX3N0cnVjdHVyZVN0dWJJbmZvc1tpXSwgaW5zdHJ1
Y3Rpb25PZmZzZXRGb3JOdGgoZXhlYywgaW5zdHJ1Y3Rpb25zKCksIGkgKyAxLCBpc1Byb3BlcnR5
QWNjZXNzKSk7Ci0gICAgICAgICAgICAgKytpOwotICAgICAgICB9IHdoaWxlIChpIDwgbV9zdHJ1
Y3R1cmVTdHViSW5mb3Muc2l6ZSgpKTsKLSAgICB9CiAjZW5kaWYKICNpZiBFTkFCTEUoQ0xBU1NJ
Q19JTlRFUlBSRVRFUikKICAgICBpZiAoIW1fZ2xvYmFsUmVzb2x2ZUluc3RydWN0aW9ucy5pc0Vt
cHR5KCkgfHwgIW1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuaXNFbXB0eSgpKQpAQCAtNDg5
LDcgKzYwNSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYykgY28KICAg
ICBkYXRhTG9nKCJcbiIpOwogfQogCi12b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJiBiZWdpbiwgVmVj
dG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImIGl0KSBjb25zdAordm9pZCBDb2RlQmxv
Y2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25z
dF9pdGVyYXRvciYgYmVnaW4sIFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJiBp
dCkKIHsKICAgICBpbnQgbG9jYXRpb24gPSBpdCAtIGJlZ2luOwogICAgIHN3aXRjaCAoZXhlYy0+
aW50ZXJwcmV0ZXIoKS0+Z2V0T3Bjb2RlSUQoaXQtPnUub3Bjb2RlKSkgewpAQCAtODEzLDU2ICs5
MjksMjIgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjbwogICAgICAg
ICAgICAgaXQrKzsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
b3BfZ2V0X2J5X2lkOiB7Ci0gICAgICAgICAgICBwcmludEdldEJ5SWRPcChleGVjLCBsb2NhdGlv
biwgaXQsICJnZXRfYnlfaWQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3NlbGY6IHsKLSAgICAgICAgICAgIHByaW50R2V0QnlJZE9w
KGV4ZWMsIGxvY2F0aW9uLCBpdCwgImdldF9ieV9pZF9zZWxmIik7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9wcm90bzogewotICAgICAg
ICAgICAgcHJpbnRHZXRCeUlkT3AoZXhlYywgbG9jYXRpb24sIGl0LCAiZ2V0X2J5X2lkX3Byb3Rv
Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2dldF9i
eV9pZF9jaGFpbjogewotICAgICAgICAgICAgcHJpbnRHZXRCeUlkT3AoZXhlYywgbG9jYXRpb24s
IGl0LCAiZ2V0X2J5X2lkX2NoYWluIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9nZXR0ZXJfc2VsZjogewotICAgICAgICAgICAgcHJp
bnRHZXRCeUlkT3AoZXhlYywgbG9jYXRpb24sIGl0LCAiZ2V0X2J5X2lkX2dldHRlcl9zZWxmIik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2dldF9ieV9p
ZF9nZXR0ZXJfcHJvdG86IHsKLSAgICAgICAgICAgIHByaW50R2V0QnlJZE9wKGV4ZWMsIGxvY2F0
aW9uLCBpdCwgImdldF9ieV9pZF9nZXR0ZXJfcHJvdG8iKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRlcl9jaGFpbjogewotICAg
ICAgICAgICAgcHJpbnRHZXRCeUlkT3AoZXhlYywgbG9jYXRpb24sIGl0LCAiZ2V0X2J5X2lkX2dl
dHRlcl9jaGFpbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBvcF9nZXRfYnlfaWRfY3VzdG9tX3NlbGY6IHsKLSAgICAgICAgICAgIHByaW50R2V0QnlJZE9w
KGV4ZWMsIGxvY2F0aW9uLCBpdCwgImdldF9ieV9pZF9jdXN0b21fc2VsZiIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9tX3By
b3RvOiB7Ci0gICAgICAgICAgICBwcmludEdldEJ5SWRPcChleGVjLCBsb2NhdGlvbiwgaXQsICJn
ZXRfYnlfaWRfY3VzdG9tX3Byb3RvIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9jdXN0b21fY2hhaW46IHsKLSAgICAgICAgICAgIHBy
aW50R2V0QnlJZE9wKGV4ZWMsIGxvY2F0aW9uLCBpdCwgImdldF9ieV9pZF9jdXN0b21fY2hhaW4i
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2J5
X2lkX2dlbmVyaWM6IHsKLSAgICAgICAgICAgIHByaW50R2V0QnlJZE9wKGV4ZWMsIGxvY2F0aW9u
LCBpdCwgImdldF9ieV9pZF9nZW5lcmljIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIG9wX2dldF9hcnJheV9sZW5ndGg6IHsKLSAgICAgICAgICAgIHByaW50
R2V0QnlJZE9wKGV4ZWMsIGxvY2F0aW9uLCBpdCwgImdldF9hcnJheV9sZW5ndGgiKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgorICAg
ICAgICBjYXNlIG9wX2dldF9ieV9pZF9zZWxmOgorICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9w
cm90bzoKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfY2hhaW46CisgICAgICAgIGNhc2Ugb3Bf
Z2V0X2J5X2lkX2dldHRlcl9zZWxmOgorICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9nZXR0ZXJf
cHJvdG86CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRlcl9jaGFpbjoKKyAgICAgICAg
Y2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9tX3NlbGY6CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lk
X2N1c3RvbV9wcm90bzoKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9tX2NoYWluOgor
ICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9nZW5lcmljOgorICAgICAgICBjYXNlIG9wX2dldF9h
cnJheV9sZW5ndGg6CiAgICAgICAgIGNhc2Ugb3BfZ2V0X3N0cmluZ19sZW5ndGg6IHsKLSAgICAg
ICAgICAgIHByaW50R2V0QnlJZE9wKGV4ZWMsIGxvY2F0aW9uLCBpdCwgImdldF9zdHJpbmdfbGVu
Z3RoIik7CisgICAgICAgICAgICBwcmludEdldEJ5SWRPcChleGVjLCBsb2NhdGlvbiwgaXQpOwor
ICAgICAgICAgICAgcHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMoZXhlYywgbG9jYXRpb24pOworICAg
ICAgICAgICAgZGF0YUxvZygiXG4iKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50c19sZW5ndGg6IHsKQEAgLTkwMyw3ICs5ODUsMzcg
QEAgdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjbwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9tZXRob2RfY2hlY2s6IHsKLSAgICAg
ICAgICAgIGRhdGFMb2coIlslNGRdIG1ldGhvZF9jaGVja1xuIiwgbG9jYXRpb24pOworICAgICAg
ICAgICAgZGF0YUxvZygiWyU0ZF0gbWV0aG9kX2NoZWNrIiwgbG9jYXRpb24pOworICAgICAgICAg
ICAgaWYgKG51bWJlck9mTWV0aG9kQ2FsbExpbmtJbmZvcygpKSB7CisgICAgICAgICAgICAgICAg
TWV0aG9kQ2FsbExpbmtJbmZvJiBtZXRob2RDYWxsID0gZ2V0TWV0aG9kQ2FsbExpbmtJbmZvKGxv
Y2F0aW9uKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgaml0KCIpOworICAgICAgICAgICAg
ICAgIGlmICghbWV0aG9kQ2FsbC5zZWVuKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJu
b3Qgc2VlbiIpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAv
LyBVc2UgdGhlIGZhY3QgdGhhdCBNZXRob2RDYWxsTGlua1N0YXR1cyBhbHJlYWR5IGRvZXMgc21h
cnQgdGhpbmdzCisgICAgICAgICAgICAgICAgICAgIC8vIGZvciBkZWNvZGluZyBzZWVuIG1ldGhv
ZCBjYWxscy4KKyAgICAgICAgICAgICAgICAgICAgTWV0aG9kQ2FsbExpbmtTdGF0dXMgc3RhdHVz
ID0gTWV0aG9kQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IodGhpcywgbG9jYXRpb24pOworICAg
ICAgICAgICAgICAgICAgICBpZiAoIXN0YXR1cykKKyAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coIm5vdCBzZXQiKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJmdW5jdGlvbiA9ICVwIChleGVjdXRhYmxlID0gIiwgc3Rh
dHVzLmZ1bmN0aW9uKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgSlNDZWxsKiBmdW5jdGlv
bkFzQ2VsbCA9IGdldEpTRnVuY3Rpb24oc3RhdHVzLmZ1bmN0aW9uKCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGZ1bmN0aW9uQXNDZWxsKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiVwIiwganNDYXN0PEpTRnVuY3Rpb24qPihmdW5jdGlvbkFzQ2VsbCktPmV4
ZWN1dGFibGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiTi9BIik7CisgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCIpLCBzdHJ1Y3QgPSAlcCIsIHN0YXR1cy5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc3RhdHVzLm5lZWRzUHJvdG90eXBlQ2hlY2soKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIsIHByb3RvdHlwZSA9ICVwLCBzdHJ1Y3QgPSAl
cCIsIHN0YXR1cy5wcm90b3R5cGUoKSwgc3RhdHVzLnByb3RvdHlwZVN0cnVjdHVyZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBk
YXRhTG9nKCIpIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOwor
ICAgICAgICAgICAgKytpdDsKKyAgICAgICAgICAgIHByaW50R2V0QnlJZE9wKGV4ZWMsIGxvY2F0
aW9uLCBpdCk7CisgICAgICAgICAgICBwcmludEdldEJ5SWRDYWNoZVN0YXR1cyhleGVjLCBsb2Nh
dGlvbik7CisgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9kZWxfYnlfaWQ6IHsKQEAgLTE1NDUsNyArMTY1Nyw3
IEBAIHZvaWQgQ29kZUJsb2NrOjphZGRQYXJhbWV0ZXIoKQogI2VuZGlmCiB9CiAKLXZvaWQgQ29k
ZUJsb2NrOjp2aXNpdFN0cnVjdHVyZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEluc3RydWN0aW9u
KiB2UEMpIGNvbnN0Cit2b2lkIENvZGVCbG9jazo6dmlzaXRTdHJ1Y3R1cmVzKFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBJbnN0cnVjdGlvbiogdlBDKQogewogICAgIEludGVycHJldGVyKiBpbnRlcnBy
ZXRlciA9IG1fZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXI7CiAKQEAgLTIzNjMsMjUgKzI0NzUsMjUg
QEAgdm9pZCBGdW5jdGlvbkNvZGVCbG9jazo6amV0dGlzb24oKQogICAgIHN0YXRpY19jYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRD
b2RlRm9yKCpnbG9iYWxEYXRhKCksIG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3Qg
OiBDb2RlRm9yQ2FsbCk7CiB9CiAKLWJvb2wgUHJvZ3JhbUNvZGVCbG9jazo6aml0Q29tcGlsZUlt
cGwoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorYm9vbCBQcm9ncmFtQ29kZUJsb2NrOjpqaXRD
b21waWxlSW1wbChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQVNTRVJUKGdldEpJVFR5cGUoKSA9
PSBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKTsKICAgICBBU1NFUlQodGhpcyA9PSByZXBsYWNl
bWVudCgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihvd25l
ckV4ZWN1dGFibGUoKSktPmppdENvbXBpbGUoZ2xvYmFsRGF0YSk7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qaXRDb21waWxl
KGV4ZWMpOwogfQogCi1ib29sIEV2YWxDb2RlQmxvY2s6OmppdENvbXBpbGVJbXBsKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSkKK2Jvb2wgRXZhbENvZGVCbG9jazo6aml0Q29tcGlsZUltcGwoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIEFTU0VSVChnZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6SW50
ZXJwcmV0ZXJUaHVuayk7CiAgICAgQVNTRVJUKHRoaXMgPT0gcmVwbGFjZW1lbnQoKSk7Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5q
aXRDb21waWxlKGdsb2JhbERhdGEpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxFdmFsRXhlY3V0
YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+aml0Q29tcGlsZShleGVjKTsKIH0KIAotYm9vbCBG
dW5jdGlvbkNvZGVCbG9jazo6aml0Q29tcGlsZUltcGwoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
KQorYm9vbCBGdW5jdGlvbkNvZGVCbG9jazo6aml0Q29tcGlsZUltcGwoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIEFTU0VSVChnZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVu
ayk7CiAgICAgQVNTRVJUKHRoaXMgPT0gcmVwbGFjZW1lbnQoKSk7Ci0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+aml0Q29tcGls
ZUZvcihnbG9iYWxEYXRhLCBtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29k
ZUZvckNhbGwpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihv
d25lckV4ZWN1dGFibGUoKSktPmppdENvbXBpbGVGb3IoZXhlYywgbV9pc0NvbnN0cnVjdG9yID8g
Q29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxMTc4MjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMiw5ICsxMzIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0
aWMgdm9pZCBkdW1wU3RhdGlzdGljcygpOwogCi0gICAgICAgIHZvaWQgZHVtcChFeGVjU3RhdGUq
KSBjb25zdDsKLSAgICAgICAgdm9pZCBwcmludFN0cnVjdHVyZXMoY29uc3QgSW5zdHJ1Y3Rpb24q
KSBjb25zdDsKLSAgICAgICAgdm9pZCBwcmludFN0cnVjdHVyZShjb25zdCBjaGFyKiBuYW1lLCBj
b25zdCBJbnN0cnVjdGlvbiosIGludCBvcGVyYW5kKSBjb25zdDsKKyAgICAgICAgdm9pZCBkdW1w
KEV4ZWNTdGF0ZSopOworICAgICAgICB2b2lkIHByaW50U3RydWN0dXJlcyhjb25zdCBJbnN0cnVj
dGlvbiopOworICAgICAgICB2b2lkIHByaW50U3RydWN0dXJlKGNvbnN0IGNoYXIqIG5hbWUsIGNv
bnN0IEluc3RydWN0aW9uKiwgaW50IG9wZXJhbmQpOwogCiAgICAgICAgIGJvb2wgaXNTdHJpY3RN
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9pc1N0cmljdE1vZGU7IH0KIApAQCAtMzY1LDE4ICszNjUs
MTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVP
cHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKSA9IDA7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBqZXR0aXNvbigpID0gMDsKICAgICAgICAgZW51bSBKSVRDb21waWxhdGlvblJlc3Vs
dCB7IEFscmVhZHlDb21waWxlZCwgQ291bGROb3RDb21waWxlLCBDb21waWxlZFN1Y2Nlc3NmdWxs
eSB9OwotICAgICAgICBKSVRDb21waWxhdGlvblJlc3VsdCBqaXRDb21waWxlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgSklUQ29tcGlsYXRpb25SZXN1bHQgaml0Q29tcGlsZShF
eGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChnZXRKSVRUeXBlKCkg
IT0gSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykgewogICAgICAgICAgICAgICAgIEFTU0VSVChn
ZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwogICAgICAgICAgICAgICAgIHJl
dHVybiBBbHJlYWR5Q29tcGlsZWQ7CiAgICAgICAgICAgICB9CiAjaWYgRU5BQkxFKEpJVCkKLSAg
ICAgICAgICAgIGlmIChqaXRDb21waWxlSW1wbChnbG9iYWxEYXRhKSkKKyAgICAgICAgICAgIGlm
IChqaXRDb21waWxlSW1wbChleGVjKSkKICAgICAgICAgICAgICAgICByZXR1cm4gQ29tcGlsZWRT
dWNjZXNzZnVsbHk7CiAgICAgICAgICAgICByZXR1cm4gQ291bGROb3RDb21waWxlOwogI2Vsc2UK
LSAgICAgICAgICAgIFVOVVNFRF9QQVJBTShnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIFVOVVNF
RF9QQVJBTShleGVjKTsKICAgICAgICAgICAgIHJldHVybiBDb3VsZE5vdENvbXBpbGU7CiAjZW5k
aWYKICAgICAgICAgfQpAQCAtMTA3NSw3ICsxMDc1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICBwcm90ZWN0ZWQ6CiAjaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgdmlydHVhbCBib29sIGppdENv
bXBpbGVJbXBsKEpTR2xvYmFsRGF0YSYpID0gMDsKKyAgICAgICAgdmlydHVhbCBib29sIGppdENv
bXBpbGVJbXBsKEV4ZWNTdGF0ZSopID0gMDsKICNlbmRpZgogICAgICAgICB2aXJ0dWFsIHZvaWQg
dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQg
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKTsKQEAgLTEwODksMTYgKzEwODksMTcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgdGFsbHlGcmVxdWVudEV4aXRTaXRlcygpIHsgfQogI2Vu
ZGlmCiAgICAgICAgIAotICAgICAgICB2b2lkIGR1bXAoRXhlY1N0YXRlKiwgY29uc3QgVmVjdG9y
PEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImIGJlZ2luLCBWZWN0b3I8SW5zdHJ1Y3Rpb24+
Ojpjb25zdF9pdGVyYXRvciYpIGNvbnN0OworICAgICAgICB2b2lkIGR1bXAoRXhlY1N0YXRlKiwg
Y29uc3QgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImIGJlZ2luLCBWZWN0b3I8
SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYpOwogCiAgICAgICAgIENTdHJpbmcgcmVnaXN0
ZXJOYW1lKEV4ZWNTdGF0ZSosIGludCByKSBjb25zdDsKLSAgICAgICAgdm9pZCBwcmludFVuYXJ5
T3AoRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9p
dGVyYXRvciYsIGNvbnN0IGNoYXIqIG9wKSBjb25zdDsKLSAgICAgICAgdm9pZCBwcmludEJpbmFy
eU9wKEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3Rf
aXRlcmF0b3ImLCBjb25zdCBjaGFyKiBvcCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgcHJpbnRDb25k
aXRpb25hbEp1bXAoRXhlY1N0YXRlKiwgY29uc3QgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3Rf
aXRlcmF0b3ImLCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYsIGludCBsb2Nh
dGlvbiwgY29uc3QgY2hhciogb3ApIGNvbnN0OwotICAgICAgICB2b2lkIHByaW50R2V0QnlJZE9w
KEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRl
cmF0b3ImLCBjb25zdCBjaGFyKiBvcCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgcHJpbnRDYWxsT3Ao
RXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVy
YXRvciYsIGNvbnN0IGNoYXIqIG9wKSBjb25zdDsKLSAgICAgICAgdm9pZCBwcmludFB1dEJ5SWRP
cChFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0
ZXJhdG9yJiwgY29uc3QgY2hhciogb3ApIGNvbnN0OwotICAgICAgICB2b2lkIHZpc2l0U3RydWN0
dXJlcyhTbG90VmlzaXRvciYsIEluc3RydWN0aW9uKiB2UEMpIGNvbnN0OworICAgICAgICB2b2lk
IHByaW50VW5hcnlPcChFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIFZlY3RvcjxJbnN0cnVjdGlv
bj46OmNvbnN0X2l0ZXJhdG9yJiwgY29uc3QgY2hhciogb3ApOworICAgICAgICB2b2lkIHByaW50
QmluYXJ5T3AoRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpj
b25zdF9pdGVyYXRvciYsIGNvbnN0IGNoYXIqIG9wKTsKKyAgICAgICAgdm9pZCBwcmludENvbmRp
dGlvbmFsSnVtcChFeGVjU3RhdGUqLCBjb25zdCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9p
dGVyYXRvciYsIFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJiwgaW50IGxvY2F0
aW9uLCBjb25zdCBjaGFyKiBvcCk7CisgICAgICAgIHZvaWQgcHJpbnRHZXRCeUlkT3AoRXhlY1N0
YXRlKiwgaW50IGxvY2F0aW9uLCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYp
OworICAgICAgICB2b2lkIHByaW50R2V0QnlJZENhY2hlU3RhdHVzKEV4ZWNTdGF0ZSosIGludCBs
b2NhdGlvbik7CisgICAgICAgIHZvaWQgcHJpbnRDYWxsT3AoRXhlY1N0YXRlKiwgaW50IGxvY2F0
aW9uLCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYsIGNvbnN0IGNoYXIqIG9w
KTsKKyAgICAgICAgdm9pZCBwcmludFB1dEJ5SWRPcChFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24s
IFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJiwgY29uc3QgY2hhciogb3ApOwor
ICAgICAgICB2b2lkIHZpc2l0U3RydWN0dXJlcyhTbG90VmlzaXRvciYsIEluc3RydWN0aW9uKiB2
UEMpOwogICAgICAgICAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgYm9vbCBzaG91bGRJ
bW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVyaW5nU2NhbigpCkBAIC0xMzIyLDcgKzEzMjMsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgSlNPYmpl
Y3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKICAgICAg
ICAgdmlydHVhbCB2b2lkIGpldHRpc29uKCk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBqaXRDb21w
aWxlSW1wbChKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgdmlydHVhbCBib29sIGppdENvbXBpbGVJ
bXBsKEV4ZWNTdGF0ZSopOwogICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQo
KTsKICAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKTsKICNl
bmRpZgpAQCAtMTM1Nyw3ICsxMzU4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHJvdGVjdGVk
OgogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSos
IFNjb3BlQ2hhaW5Ob2RlKik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbigpOwotICAg
ICAgICB2aXJ0dWFsIGJvb2wgaml0Q29tcGlsZUltcGwoSlNHbG9iYWxEYXRhJik7CisgICAgICAg
IHZpcnR1YWwgYm9vbCBqaXRDb21waWxlSW1wbChFeGVjU3RhdGUqKTsKICAgICAgICAgdmlydHVh
bCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21w
aWxlV2l0aERGR0ludGVybmFsKCk7CiAjZW5kaWYKQEAgLTEzOTUsNyArMTM5Niw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29t
cGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgamV0dGlzb24oKTsKLSAgICAgICAgdmlydHVhbCBib29sIGppdENvbXBpbGVJbXBs
KEpTR2xvYmFsRGF0YSYpOworICAgICAgICB2aXJ0dWFsIGJvb2wgaml0Q29tcGlsZUltcGwoRXhl
Y1N0YXRlKik7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOwogICAg
ICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCgpOwogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAkocmV2aXNpb24gMTE3ODIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDggKzQ1LDkgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogLy8gVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGNvbXBpbGUg
dGhlIGRhdGFmbG93IGdyYXBoIGZyb20gYSBDb2RlQmxvY2suCiBjbGFzcyBCeXRlQ29kZVBhcnNl
ciB7CiBwdWJsaWM6Ci0gICAgQnl0ZUNvZGVQYXJzZXIoR3JhcGgmIGdyYXBoKQotICAgICAgICA6
IG1fZ2xvYmFsRGF0YSgmZ3JhcGgubV9nbG9iYWxEYXRhKQorICAgIEJ5dGVDb2RlUGFyc2VyKEV4
ZWNTdGF0ZSogZXhlYywgR3JhcGgmIGdyYXBoKQorICAgICAgICA6IG1fZXhlYyhleGVjKQorICAg
ICAgICAsIG1fZ2xvYmFsRGF0YSgmZ3JhcGgubV9nbG9iYWxEYXRhKQogICAgICAgICAsIG1fY29k
ZUJsb2NrKGdyYXBoLm1fY29kZUJsb2NrKQogICAgICAgICAsIG1fcHJvZmlsZWRCbG9jayhncmFw
aC5tX3Byb2ZpbGVkQmxvY2spCiAgICAgICAgICwgbV9ncmFwaChncmFwaCkKQEAgLTg0Miw2ICs4
NDMsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgYnVpbGRPcGVyYW5kTWFwc0lmTmVjZXNz
YXJ5KCk7CiAgICAgCisgICAgRXhlY1N0YXRlKiBtX2V4ZWM7CiAgICAgSlNHbG9iYWxEYXRhKiBt
X2dsb2JhbERhdGE7CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBDb2RlQmxvY2sq
IG1fcHJvZmlsZWRCbG9jazsKQEAgLTI3MzAsNiArMjczMiw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQ29kZUJsb2NrKCkKICAgICAgICAgICAgIGNvZGVCbG9jay0+bmVlZHNGdWxsU2Nv
cGVDaGFpbigpPyJ0cnVlIjoiZmFsc2UiLAogICAgICAgICAgICAgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKS0+bmVlZHNBY3RpdmF0aW9uKCk/InRydWUiOiJmYWxzZSIsCiAgICAgICAgICAg
ICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKT8idHJ1ZSI6ImZh
bHNlIik7CisgICAgY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKS0+ZHVtcChtX2V4ZWMpOwog
I2VuZGlmCiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBqdW1wVGFyZ2V0SW5kZXggPSAwOyBqdW1w
VGFyZ2V0SW5kZXggPD0gY29kZUJsb2NrLT5udW1iZXJPZkp1bXBUYXJnZXRzKCk7ICsranVtcFRh
cmdldEluZGV4KSB7CkBAIC0yODQxLDEzICsyODQ0LDE0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBwYXJzZShHcmFwaCYgZ3JhcGgp
Citib29sIHBhcnNlKEV4ZWNTdGF0ZSogZXhlYywgR3JhcGgmIGdyYXBoKQogewogI2lmIERGR19E
RUJVR19MT0NBTF9ESVNCQUxFCisgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIFVOVVNFRF9Q
QVJBTShncmFwaCk7CiAgICAgcmV0dXJuIGZhbHNlOwogI2Vsc2UKLSAgICByZXR1cm4gQnl0ZUNv
ZGVQYXJzZXIoZ3JhcGgpLnBhcnNlKCk7CisgICAgcmV0dXJuIEJ5dGVDb2RlUGFyc2VyKGV4ZWMs
IGdyYXBoKS5wYXJzZSgpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmgJKHJldmlzaW9uIDExNzgyMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgREZHIHsKIAogLy8gUG9wdWxhdGUgdGhlIEdyYXBo
IHdpdGggYSBiYXNpYyBibG9jayBvZiBjb2RlIGZyb20gdGhlIENvZGVCbG9jaywKIC8vIHN0YXJ0
aW5nIGF0IHRoZSBwcm92aWRlZCBieXRlY29kZSBpbmRleC4KLWJvb2wgcGFyc2UoR3JhcGgmKTsK
K2Jvb2wgcGFyc2UoRXhlY1N0YXRlKiwgR3JhcGgmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZp
c2lvbiAxMTc4MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKIAogZW51bSBDb21waWxlTW9kZSB7IENvbXBpbGVGdW5jdGlvbiwgQ29tcGlsZU90
aGVyIH07Ci1pbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNb2RlLCBKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRD
b2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIqIGppdENvZGVXaXRoQXJpdHlDaGVjaykKK2lubGlu
ZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU1vZGUsIEV4ZWNTdGF0ZSogZXhlYywg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciogaml0Q29kZVdpdGhBcml0eUNoZWNrKQogewogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBs
aW5nUmVnaW9uKCJERkcgQ29tcGlsYXRpb24gKERyaXZlcikiKTsKICAgICAKQEAgLTU1LDggKzU1
LDggQEAgaW5saW5lIGJvb2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTQogICAgIGRhdGFM
b2coIkRGRyBjb21waWxpbmcgY29kZSBibG9jayAlcCglcCksIG51bWJlciBvZiBpbnN0cnVjdGlv
bnMgPSAldS5cbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCBjb2RlQmxv
Y2stPmluc3RydWN0aW9uQ291bnQoKSk7CiAjZW5kaWYKICAgICAKLSAgICBHcmFwaCBkZmcoZ2xv
YmFsRGF0YSwgY29kZUJsb2NrKTsKLSAgICBpZiAoIXBhcnNlKGRmZykpCisgICAgR3JhcGggZGZn
KGV4ZWMtPmdsb2JhbERhdGEoKSwgY29kZUJsb2NrKTsKKyAgICBpZiAoIXBhcnNlKGV4ZWMsIGRm
ZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBpZiAoY29tcGlsZU1vZGUgPT0g
Q29tcGlsZUZ1bmN0aW9uKQpAQCAtMTEwLDE0ICsxMTAsMTQgQEAgaW5saW5lIGJvb2wgY29tcGls
ZShDb21waWxlTW9kZSBjb21waWxlTQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgdHJ5
Q29tcGlsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrLCBK
SVRDb2RlJiBqaXRDb2RlKQorYm9vbCB0cnlDb21waWxlKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUpCiB7Ci0gICAgcmV0dXJuIGNvbXBpbGUo
Q29tcGlsZU90aGVyLCBnbG9iYWxEYXRhLCBjb2RlQmxvY2ssIGppdENvZGUsIDApOworICAgIHJl
dHVybiBjb21waWxlKENvbXBpbGVPdGhlciwgZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCAwKTsK
IH0KIAotYm9vbCB0cnlDb21waWxlRnVuY3Rpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spCitib29sIHRyeUNvbXBpbGVGdW5jdGlvbihFeGVj
U3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjaykKIHsKLSAgICByZXR1cm4g
Y29tcGlsZShDb21waWxlRnVuY3Rpb24sIGdsb2JhbERhdGEsIGNvZGVCbG9jaywgaml0Q29kZSwg
JmppdENvZGVXaXRoQXJpdHlDaGVjayk7CisgICAgcmV0dXJuIGNvbXBpbGUoQ29tcGlsZUZ1bmN0
aW9uLCBleGVjLCBjb2RlQmxvY2ssIGppdENvZGUsICZqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwog
fQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RyaXZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRHJpdmVyLmgJKHJldmlzaW9uIDExNzgyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRHJpdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5k
ZWYgREZHRHJpdmVyX2gKICNkZWZpbmUgREZHRHJpdmVyX2gKIAorI2luY2x1ZGUgIkNhbGxGcmFt
ZS5oIgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTM4
LDExICszOSwxMSBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI7CiBuYW1lc3BhY2UgREZH
IHsKIAogI2lmIEVOQUJMRShERkdfSklUKQotYm9vbCB0cnlDb21waWxlKEpTR2xvYmFsRGF0YSYs
IENvZGVCbG9jayosIEpJVENvZGUmKTsKLWJvb2wgdHJ5Q29tcGlsZUZ1bmN0aW9uKEpTR2xvYmFs
RGF0YSYsIENvZGVCbG9jayosIEpJVENvZGUmLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENv
ZGVXaXRoQXJpdHlDaGVjayk7Citib29sIHRyeUNvbXBpbGUoRXhlY1N0YXRlKiwgQ29kZUJsb2Nr
KiwgSklUQ29kZSYpOworYm9vbCB0cnlDb21waWxlRnVuY3Rpb24oRXhlY1N0YXRlKiwgQ29kZUJs
b2NrKiwgSklUQ29kZSYsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNo
ZWNrKTsKICNlbHNlCi1pbmxpbmUgYm9vbCB0cnlDb21waWxlKEpTR2xvYmFsRGF0YSYsIENvZGVC
bG9jayosIEpJVENvZGUmKSB7IHJldHVybiBmYWxzZTsgfQotaW5saW5lIGJvb2wgdHJ5Q29tcGls
ZUZ1bmN0aW9uKEpTR2xvYmFsRGF0YSYsIENvZGVCbG9jayosIEpJVENvZGUmLCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHImKSB7IHJldHVybiBmYWxzZTsgfQoraW5saW5lIGJvb2wgdHJ5Q29tcGlsZShF
eGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBKSVRDb2RlJikgeyByZXR1cm4gZmFsc2U7IH0KK2lubGlu
ZSBib29sIHRyeUNvbXBpbGVGdW5jdGlvbihFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBKSVRDb2Rl
JiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJikgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxMTc4MjIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMp
CiAgICAgZm9yIChDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0Lm1fY29kZU9yaWdpbjsgY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZS0+Y2FsbGVyKSB7CiAgICAgICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJs
ZSo+KGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpKQogICAgICAg
ICAgICAgLT5iYXNlbGluZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+
aXNDYWxsID8gQ29kZUZvckNhbGwgOiBDb2RlRm9yQ29uc3RydWN0KQotICAgICAgICAgICAgLT5q
aXRDb21waWxlKCpnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIC0+aml0Q29tcGlsZShleGVjKTsK
ICAgICB9CiAgICAgCiAgICAgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkgPSAwOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREcml2ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERyaXZlci5oCShyZXZpc2lvbiAxMTc4MjIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERyaXZlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw4ICszOCwxMCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENv
ZGVCbG9ja1R5cGU+Ci1pbmxpbmUgYm9vbCBqaXRDb21waWxlSWZBcHByb3ByaWF0ZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIE93blB0cjxDb2RlQmxvY2tUeXBlPiYgY29kZUJsb2NrLCBKSVRD
b2RlJiBqaXRDb2RlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIEpJVENvbXBpbGF0aW9uRWZm
b3J0IGVmZm9ydCkKK2lubGluZSBib29sIGppdENvbXBpbGVJZkFwcHJvcHJpYXRlKEV4ZWNTdGF0
ZSogZXhlYywgT3duUHRyPENvZGVCbG9ja1R5cGU+JiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENv
ZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0
KQogeworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsK
KyAgICAKICAgICBpZiAoaml0VHlwZSA9PSBjb2RlQmxvY2stPmdldEpJVFR5cGUoKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgCkBAIC01Miw3ICs1NCw3IEBAIGlubGluZSBib29sIGppdENv
bXBpbGVJZkFwcHJvcHJpYXRlKEpTR2wKICAgICAKICAgICBib29sIGRmZ0NvbXBpbGVkID0gZmFs
c2U7CiAgICAgaWYgKGppdFR5cGUgPT0gSklUQ29kZTo6REZHSklUKQotICAgICAgICBkZmdDb21w
aWxlZCA9IERGRzo6dHJ5Q29tcGlsZShnbG9iYWxEYXRhLCBjb2RlQmxvY2suZ2V0KCksIGppdENv
ZGUpOworICAgICAgICBkZmdDb21waWxlZCA9IERGRzo6dHJ5Q29tcGlsZShleGVjLCBjb2RlQmxv
Y2suZ2V0KCksIGppdENvZGUpOwogICAgIGlmIChkZmdDb21waWxlZCkgewogICAgICAgICBpZiAo
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKQogICAgICAgICAgICAgY29kZUJsb2NrLT5hbHRlcm5h
dGl2ZSgpLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7CkBAIC03Myw4ICs3NSwxMCBAQCBpbmxpbmUg
Ym9vbCBqaXRDb21waWxlSWZBcHByb3ByaWF0ZShKU0dsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWlubGluZSBib29sIGppdENvbXBpbGVGdW5jdGlvbklmQXBwcm9wcmlhdGUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+JiBjb2RlQmxvY2ssIEpJVENv
ZGUmIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNr
LCBTaGFyZWRTeW1ib2xUYWJsZSomIHN5bWJvbFRhYmxlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5
cGUsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKK2lubGluZSBib29sIGppdENvbXBpbGVG
dW5jdGlvbklmQXBwcm9wcmlhdGUoRXhlY1N0YXRlKiBleGVjLCBPd25QdHI8RnVuY3Rpb25Db2Rl
QmxvY2s+JiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBTaGFyZWRTeW1ib2xUYWJsZSomIHN5bWJvbFRhYmxl
LCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkK
IHsKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Cisg
ICAgCiAgICAgaWYgKGppdFR5cGUgPT0gY29kZUJsb2NrLT5nZXRKSVRUeXBlKCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIApAQCAtODgsNyArOTIsNyBAQCBpbmxpbmUgYm9vbCBqaXRDb21w
aWxlRnVuY3Rpb25JZkFwcHJvcHJpCiAgICAgCiAgICAgYm9vbCBkZmdDb21waWxlZCA9IGZhbHNl
OwogICAgIGlmIChqaXRUeXBlID09IEpJVENvZGU6OkRGR0pJVCkKLSAgICAgICAgZGZnQ29tcGls
ZWQgPSBERkc6OnRyeUNvbXBpbGVGdW5jdGlvbihnbG9iYWxEYXRhLCBjb2RlQmxvY2suZ2V0KCks
IGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjayk7CisgICAgICAgIGRmZ0NvbXBpbGVkID0g
REZHOjp0cnlDb21waWxlRnVuY3Rpb24oZXhlYywgY29kZUJsb2NrLmdldCgpLCBqaXRDb2RlLCBq
aXRDb2RlV2l0aEFyaXR5Q2hlY2spOwogICAgIGlmIChkZmdDb21waWxlZCkgewogICAgICAgICBp
ZiAoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKQogICAgICAgICAgICAgY29kZUJsb2NrLT5hbHRl
cm5hdGl2ZSgpLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDExNzgyMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2Myw3ICsyNjMsNyBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1
cmlzdGljcyhDCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgICAgIAotICAgIENv
ZGVCbG9jazo6SklUQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gY29kZUJsb2NrLT5qaXRDb21w
aWxlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgQ29kZUJsb2NrOjpKSVRDb21waWxhdGlvblJl
c3VsdCByZXN1bHQgPSBjb2RlQmxvY2stPmppdENvbXBpbGUoZXhlYyk7CiAgICAgc3dpdGNoIChy
ZXN1bHQpIHsKICAgICBjYXNlIENvZGVCbG9jazo6QWxyZWFkeUNvbXBpbGVkOgogI2lmIEVOQUJM
RShKSVRfVkVSQk9TRV9PU1IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMTE3ODIyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MSw5ICsxODEs
OSBAQCBKU09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6CiB9CiAKICNpZiBF
TkFCTEUoSklUKQotYm9vbCBFdmFsRXhlY3V0YWJsZTo6aml0Q29tcGlsZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEpCitib29sIEV2YWxFeGVjdXRhYmxlOjpqaXRDb21waWxlKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICByZXR1cm4gaml0Q29tcGlsZUlmQXBwcm9wcmlhdGUoZ2xvYmFsRGF0YSwg
bV9ldmFsQ29kZUJsb2NrLCBtX2ppdENvZGVGb3JDYWxsLCBKSVRDb2RlOjpib3R0b21UaWVySklU
KCksIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgcmV0dXJuIGppdENvbXBpbGVJZkFwcHJv
cHJpYXRlKGV4ZWMsIG1fZXZhbENvZGVCbG9jaywgbV9qaXRDb2RlRm9yQ2FsbCwgSklUQ29kZTo6
Ym90dG9tVGllckpJVCgpLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogfQogI2VuZGlmCiAKQEAg
LTI0NCw3ICsyNDQsNyBAQCBKU09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5h
CiAgICAgfQogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBpZiAoIXByZXBhcmVGb3JFeGVjdXRpb24o
Kmdsb2JhbERhdGEsIG1fZXZhbENvZGVCbG9jaywgbV9qaXRDb2RlRm9yQ2FsbCwgaml0VHlwZSkp
CisgICAgaWYgKCFwcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWMsIG1fZXZhbENvZGVCbG9jaywgbV9q
aXRDb2RlRm9yQ2FsbCwgaml0VHlwZSkpCiAgICAgICAgIHJldHVybiAwOwogI2VuZGlmCiAKQEAg
LTMzMCw5ICszMzAsOSBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVPcHRp
CiB9CiAKICNpZiBFTkFCTEUoSklUKQotYm9vbCBQcm9ncmFtRXhlY3V0YWJsZTo6aml0Q29tcGls
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCitib29sIFByb2dyYW1FeGVjdXRhYmxlOjpqaXRD
b21waWxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gaml0Q29tcGlsZUlmQXBwcm9w
cmlhdGUoZ2xvYmFsRGF0YSwgbV9wcm9ncmFtQ29kZUJsb2NrLCBtX2ppdENvZGVGb3JDYWxsLCBK
SVRDb2RlOjpib3R0b21UaWVySklUKCksIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgcmV0
dXJuIGppdENvbXBpbGVJZkFwcHJvcHJpYXRlKGV4ZWMsIG1fcHJvZ3JhbUNvZGVCbG9jaywgbV9q
aXRDb2RlRm9yQ2FsbCwgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpLCBKSVRDb21waWxhdGlvbkNh
bkZhaWwpOwogfQogI2VuZGlmCiAKQEAgLTM3Niw3ICszNzYsNyBAQCBKU09iamVjdCogUHJvZ3Jh
bUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlCiAgICAgfQogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBp
ZiAoIXByZXBhcmVGb3JFeGVjdXRpb24oKmdsb2JhbERhdGEsIG1fcHJvZ3JhbUNvZGVCbG9jaywg
bV9qaXRDb2RlRm9yQ2FsbCwgaml0VHlwZSkpCisgICAgaWYgKCFwcmVwYXJlRm9yRXhlY3V0aW9u
KGV4ZWMsIG1fcHJvZ3JhbUNvZGVCbG9jaywgbV9qaXRDb2RlRm9yQ2FsbCwgaml0VHlwZSkpCiAg
ICAgICAgIHJldHVybiAwOwogI2VuZGlmCiAKQEAgLTQ3OSwxNCArNDc5LDE0IEBAIEpTT2JqZWN0
KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVPcHQKIH0KIAogI2lmIEVOQUJMRShKSVQpCi1i
b29sIEZ1bmN0aW9uRXhlY3V0YWJsZTo6aml0Q29tcGlsZUZvckNhbGwoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQorYm9vbCBGdW5jdGlvbkV4ZWN1dGFibGU6OmppdENvbXBpbGVGb3JDYWxsKEV4
ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3By
aWF0ZShnbG9iYWxEYXRhLCBtX2NvZGVCbG9ja0ZvckNhbGwsIG1faml0Q29kZUZvckNhbGwsIG1f
aml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaywgbV9zeW1ib2xUYWJsZSwgSklUQ29kZTo6Ym90
dG9tVGllckpJVCgpLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIHJldHVybiBqaXRDb21w
aWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKGV4ZWMsIG1fY29kZUJsb2NrRm9yQ2FsbCwgbV9qaXRD
b2RlRm9yQ2FsbCwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLCBtX3N5bWJvbFRhYmxl
LCBKSVRDb2RlOjpib3R0b21UaWVySklUKCksIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiB9CiAK
LWJvb2wgRnVuY3Rpb25FeGVjdXRhYmxlOjpqaXRDb21waWxlRm9yQ29uc3RydWN0KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSkKK2Jvb2wgRnVuY3Rpb25FeGVjdXRhYmxlOjpqaXRDb21waWxlRm9y
Q29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gaml0Q29tcGlsZUZ1bmN0
aW9uSWZBcHByb3ByaWF0ZShnbG9iYWxEYXRhLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCwgbV9q
aXRDb2RlRm9yQ29uc3RydWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjaywg
bV9zeW1ib2xUYWJsZSwgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpLCBKSVRDb21waWxhdGlvbkNh
bkZhaWwpOworICAgIHJldHVybiBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKGV4ZWMs
IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3QsIG1faml0Q29k
ZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrLCBtX3N5bWJvbFRhYmxlLCBKSVRDb2RlOjpib3R0
b21UaWVySklUKCksIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiB9CiAjZW5kaWYKIApAQCAtNTUx
LDcgKzU1MSw3IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKICAg
ICBtX3N5bWJvbFRhYmxlID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5zaGFyZWRTeW1ib2xUYWJsZSgp
OwogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBpZiAoIXByZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlv
bihleGVjLT5nbG9iYWxEYXRhKCksIG1fY29kZUJsb2NrRm9yQ2FsbCwgbV9qaXRDb2RlRm9yQ2Fs
bCwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLCBtX3N5bWJvbFRhYmxlLCBqaXRUeXBl
LCBDb2RlRm9yQ2FsbCkpCisgICAgaWYgKCFwcmVwYXJlRnVuY3Rpb25Gb3JFeGVjdXRpb24oZXhl
YywgbV9jb2RlQmxvY2tGb3JDYWxsLCBtX2ppdENvZGVGb3JDYWxsLCBtX2ppdENvZGVGb3JDYWxs
V2l0aEFyaXR5Q2hlY2ssIG1fc3ltYm9sVGFibGUsIGppdFR5cGUsIENvZGVGb3JDYWxsKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAjZW5kaWYKIApAQCAtNTkzLDcgKzU5Myw3IEBAIEpTT2JqZWN0KiBG
dW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKICAgICBtX3N5bWJvbFRhYmxlID0gbV9jb2Rl
QmxvY2tGb3JDb25zdHJ1Y3QtPnNoYXJlZFN5bWJvbFRhYmxlKCk7CiAKICNpZiBFTkFCTEUoSklU
KQotICAgIGlmICghcHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKGV4ZWMtPmdsb2JhbERhdGEo
KSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QsIG1faml0Q29kZUZvckNvbnN0cnVjdCwgbV9qaXRD
b2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2ssIG1fc3ltYm9sVGFibGUsIGppdFR5cGUsIENv
ZGVGb3JDb25zdHJ1Y3QpKQorICAgIGlmICghcHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKGV4
ZWMsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3QsIG1faml0
Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrLCBtX3N5bWJvbFRhYmxlLCBqaXRUeXBlLCBD
b2RlRm9yQ29uc3RydWN0KSkKICAgICAgICAgcmV0dXJuIDA7CiAjZW5kaWYKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gMTE3ODIy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNDUsNyArMzQ1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogI2lm
IEVOQUJMRShKSVQpCiAgICAgICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlKEpTR2xvYmFs
RGF0YSYpOwotICAgICAgICBib29sIGppdENvbXBpbGUoSlNHbG9iYWxEYXRhJik7CisgICAgICAg
IGJvb2wgaml0Q29tcGlsZShFeGVjU3RhdGUqKTsKICNlbmRpZgogCiAgICAgICAgIEV2YWxDb2Rl
QmxvY2smIGdlbmVyYXRlZEJ5dGVjb2RlKCkKQEAgLTQyMCw3ICs0MjAsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgCiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgdm9pZCBqZXR0aXNvbk9w
dGltaXplZENvZGUoSlNHbG9iYWxEYXRhJik7Ci0gICAgICAgIGJvb2wgaml0Q29tcGlsZShKU0ds
b2JhbERhdGEmKTsKKyAgICAgICAgYm9vbCBqaXRDb21waWxlKEV4ZWNTdGF0ZSopOwogI2VuZGlm
CiAKICAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayYgZ2VuZXJhdGVkQnl0ZWNvZGUoKQpAQCAtNTIy
LDcgKzUyMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICNpZiBFTkFCTEUoSklUKQog
ICAgICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZUZvckNhbGwoSlNHbG9iYWxEYXRhJik7
Ci0gICAgICAgIGJvb2wgaml0Q29tcGlsZUZvckNhbGwoSlNHbG9iYWxEYXRhJik7CisgICAgICAg
IGJvb2wgaml0Q29tcGlsZUZvckNhbGwoRXhlY1N0YXRlKik7CiAjZW5kaWYKIAogICAgICAgICBi
b29sIGlzR2VuZXJhdGVkRm9yQ2FsbCgpIGNvbnN0CkBAIC01NTAsNyArNTUwLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIAogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIHZvaWQgamV0dGlz
b25PcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0KEpTR2xvYmFsRGF0YSYpOwotICAgICAgICBib29s
IGppdENvbXBpbGVGb3JDb25zdHJ1Y3QoSlNHbG9iYWxEYXRhJik7CisgICAgICAgIGJvb2wgaml0
Q29tcGlsZUZvckNvbnN0cnVjdChFeGVjU3RhdGUqKTsKICNlbmRpZgogCiAgICAgICAgIGJvb2wg
aXNHZW5lcmF0ZWRGb3JDb25zdHJ1Y3QoKSBjb25zdApAQCAtNTk5LDEyICs1OTksMTIgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGJvb2wgaml0Q29tcGlsZUZvcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCkKKyAgICAgICAgYm9vbCBqaXRDb21waWxlRm9yKEV4ZWNTdGF0ZSog
ZXhlYywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogICAgICAgICB7CiAgICAgICAgICAg
ICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gaml0Q29t
cGlsZUZvckNhbGwoZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGppdENvbXBp
bGVGb3JDYWxsKGV4ZWMpOwogICAgICAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0
cnVjdCk7Ci0gICAgICAgICAgICByZXR1cm4gaml0Q29tcGlsZUZvckNvbnN0cnVjdChnbG9iYWxE
YXRhKTsKKyAgICAgICAgICAgIHJldHVybiBqaXRDb21waWxlRm9yQ29uc3RydWN0KGV4ZWMpOwog
ICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRpb25IYXJuZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0aW9uSGFybmVzcy5oCShyZXZpc2lvbiAxMTc4MjIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRpb25IYXJuZXNzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDMyICszNiwzMiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIENvZGVCbG9ja1R5cGU+Ci1pbmxpbmUgYm9vbCBwcmVwYXJlRm9yRXhlY3V0aW9uKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgT3duUHRyPENvZGVCbG9ja1R5cGU+JiBjb2RlQmxvY2ss
IEpJVENvZGUmIGppdENvZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKK2lubGluZSBib29s
IHByZXBhcmVGb3JFeGVjdXRpb24oRXhlY1N0YXRlKiBleGVjLCBPd25QdHI8Q29kZUJsb2NrVHlw
ZT4mIGNvZGVCbG9jaywgSklUQ29kZSYgaml0Q29kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBl
KQogewogI2lmIEVOQUJMRShMTElOVCkKICAgICBpZiAoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUo
aml0VHlwZSkpIHsKICAgICAgICAgLy8gU3RhcnQgb2ZmIGluIHRoZSBsb3cgbGV2ZWwgaW50ZXJw
cmV0ZXIuCi0gICAgICAgIExMSW50OjpnZXRFbnRyeXBvaW50KGdsb2JhbERhdGEsIGNvZGVCbG9j
ay5nZXQoKSwgaml0Q29kZSk7CisgICAgICAgIExMSW50OjpnZXRFbnRyeXBvaW50KGV4ZWMtPmds
b2JhbERhdGEoKSwgY29kZUJsb2NrLmdldCgpLCBqaXRDb2RlKTsKICAgICAgICAgY29kZUJsb2Nr
LT5zZXRKSVRDb2RlKGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShMTElOVCkKLSAgICByZXR1cm4g
aml0Q29tcGlsZUlmQXBwcm9wcmlhdGUoZ2xvYmFsRGF0YSwgY29kZUJsb2NrLCBqaXRDb2RlLCBq
aXRUeXBlLCBKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSA/IEpJVENvbXBpbGF0aW9u
TXVzdFN1Y2NlZWQgOiBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIHJldHVybiBqaXRDb21w
aWxlSWZBcHByb3ByaWF0ZShleGVjLCBjb2RlQmxvY2ssIGppdENvZGUsIGppdFR5cGUsIEpJVENv
ZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUpID8gSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCA6
IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiB9CiAKLWlubGluZSBib29sIHByZXBhcmVGdW5jdGlv
bkZvckV4ZWN1dGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE93blB0cjxGdW5jdGlvbkNv
ZGVCbG9jaz4mIGNvZGVCbG9jaywgSklUQ29kZSYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIFNoYXJlZFN5bWJvbFRhYmxlKiYgc3ltYm9sVGFi
bGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5k
KQoraW5saW5lIGJvb2wgcHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiYgY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2Rl
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjaywgU2hhcmVkU3lt
Ym9sVGFibGUqJiBzeW1ib2xUYWJsZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAjaWYgRU5BQkxFKExMSU5UKQogICAgIGlmIChKSVRD
b2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkgewogICAgICAgICAvLyBTdGFydCBvZmYgaW4g
dGhlIGxvdyBsZXZlbCBpbnRlcnByZXRlci4KLSAgICAgICAgTExJbnQ6OmdldEZ1bmN0aW9uRW50
cnlwb2ludChnbG9iYWxEYXRhLCBraW5kLCBqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2sp
OworICAgICAgICBMTEludDo6Z2V0RnVuY3Rpb25FbnRyeXBvaW50KGV4ZWMtPmdsb2JhbERhdGEo
KSwga2luZCwgaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKICAgICAgICAgY29kZUJs
b2NrLT5zZXRKSVRDb2RlKGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjayk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGtpbmQpOwogI2Vu
ZGlmIC8vIEVOQUJMRShMTElOVCkKLSAgICByZXR1cm4gaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHBy
b3ByaWF0ZShnbG9iYWxEYXRhLCBjb2RlQmxvY2ssIGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlD
aGVjaywgc3ltYm9sVGFibGUsIGppdFR5cGUsIEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5
cGUpID8gSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCA6IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7
CisgICAgcmV0dXJuIGppdENvbXBpbGVGdW5jdGlvbklmQXBwcm9wcmlhdGUoZXhlYywgY29kZUJs
b2NrLCBqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIHN5bWJvbFRhYmxlLCBqaXRUeXBl
LCBKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSA/IEpJVENvbXBpbGF0aW9uTXVzdFN1
Y2NlZWQgOiBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
</data>

          </attachment>
      

    </bug>

</bugzilla>