<?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>39583</bug_id>
          
          <creation_ts>2010-05-24 01:03:30 -0700</creation_ts>
          <short_desc>Move creation of &apos;this&apos; object from caller to callee in construction.</short_desc>
          <delta_ts>2010-05-24 11:47:09 -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>PC</rep_platform>
          <op_sys>OS X 10.5</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="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>229637</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-05-24 01:03:30 -0700</bug_when>
    <thetext>Presently the caller of a constructor is responsible for providing a this
object.  Instead, move the object creation into a new op_create_this opcode,
planted in the head of the contructor bytecode for a function.  Since the
prototype for the object is provided by performing a get_by_id on the callee,
also add a new get_callee opcode (this is used to get the callee JSFunction
into a register so that a normal get_by_id can be used).

Currently the caller is also responsible for detecting when op_construct is
performed on a JSFunction representing a host function, in which case an
exception is thrown – and this check currently takes place when constructing
the this object.  Instead, mirroring the recent changes for non-host functions,
add a parallel code-path for native constructors to follow, with a thunk for
invoking native constructors provided by JITStubs, and a constructor-specific
NativeFunction on NativeExecutable.  Provide an implementation of a host
constructor which will throw an exception.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229638</commentid>
    <comment_count>1</comment_count>
      <attachid>56858</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-05-24 01:05:32 -0700</bug_when>
    <thetext>Created attachment 56858
The patch

No performance impact</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229640</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-24 01:08:13 -0700</bug_when>
    <thetext>Attachment 56858 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
JavaScriptCore/jit/JITOpcodes.cpp:221:  string_failureCases1Call is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JITOpcodes.cpp:222:  string_failureCases2Call is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JITOpcodes.cpp:223:  string_failureCases3Call is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JITOpcodes32_64.cpp:221:  string_failureCases1Call is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JITOpcodes32_64.cpp:222:  string_failureCases2Call is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JITOpcodes32_64.cpp:223:  string_failureCases3Call is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 6 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229835</commentid>
    <comment_count>3</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-05-24 11:47:09 -0700</bug_when>
    <thetext>Transmitting file data ...................
Committed revision 60075.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56858</attachid>
            <date>2010-05-24 01:05:32 -0700</date>
            <delta_ts>2010-05-24 11:43:17 -0700</delta_ts>
            <desc>The patch</desc>
            <filename>patch.op_create_this.2.txt</filename>
            <type>text/plain</type>
            <size>58136</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYwMDY0KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzQgQEAKKzIwMTAtMDUtMjQgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zOTU4MworICAgICAgICBNb3ZlIGNyZWF0aW9uIG9mICd0aGlzJyBvYmplY3Qg
ZnJvbSBjYWxsZXIgdG8gY2FsbGVlIGluIGNvbnN0cnVjdGlvbi4KKworICAgICAgICBQcmVzZW50
bHkgdGhlIGNhbGxlciBvZiBhIGNvbnN0cnVjdG9yIGlzIHJlc3BvbnNpYmxlIGZvciBwcm92aWRp
bmcgYSB0aGlzCisgICAgICAgIG9iamVjdC4gIEluc3RlYWQsIG1vdmUgdGhlIG9iamVjdCBjcmVh
dGlvbiBpbnRvIGEgbmV3IG9wX2NyZWF0ZV90aGlzIG9wY29kZSwKKyAgICAgICAgcGxhbnRlZCBp
biB0aGUgaGVhZCBvZiB0aGUgY29udHJ1Y3RvciBieXRlY29kZSBmb3IgYSBmdW5jdGlvbi4gIFNp
bmNlIHRoZQorICAgICAgICBwcm90b3R5cGUgZm9yIHRoZSBvYmplY3QgaXMgcHJvdmlkZWQgYnkg
cGVyZm9ybWluZyBhIGdldF9ieV9pZCBvbiB0aGUgY2FsbGVlLAorICAgICAgICBhbHNvIGFkZCBh
IG5ldyBnZXRfY2FsbGVlIG9wY29kZSAodGhpcyBpcyB1c2VkIHRvIGdldCB0aGUgY2FsbGVlIEpT
RnVuY3Rpb24KKyAgICAgICAgaW50byBhIHJlZ2lzdGVyIHNvIHRoYXQgYSBub3JtYWwgZ2V0X2J5
X2lkIGNhbiBiZSB1c2VkKS4KKworICAgICAgICBDdXJyZW50bHkgdGhlIGNhbGxlciBpcyBhbHNv
IHJlc3BvbnNpYmxlIGZvciBkZXRlY3Rpbmcgd2hlbiBvcF9jb25zdHJ1Y3QgaXMKKyAgICAgICAg
cGVyZm9ybWVkIG9uIGEgSlNGdW5jdGlvbiByZXByZXNlbnRpbmcgYSBob3N0IGZ1bmN0aW9uLCBp
biB3aGljaCBjYXNlIGFuCisgICAgICAgIGV4Y2VwdGlvbiBpcyB0aHJvd24g4oCTIGFuZCB0aGlz
IGNoZWNrIGN1cnJlbnRseSB0YWtlcyBwbGFjZSB3aGVuIGNvbnN0cnVjdGluZworICAgICAgICB0
aGUgdGhpcyBvYmplY3QuICBJbnN0ZWFkLCBtaXJyb3JpbmcgdGhlIHJlY2VudCBjaGFuZ2VzIGZv
ciBub24taG9zdCBmdW5jdGlvbnMsCisgICAgICAgIGFkZCBhIHBhcmFsbGVsIGNvZGUtcGF0aCBm
b3IgbmF0aXZlIGNvbnN0cnVjdG9ycyB0byBmb2xsb3csIHdpdGggYSB0aHVuayBmb3IKKyAgICAg
ICAgaW52b2tpbmcgbmF0aXZlIGNvbnN0cnVjdG9ycyBwcm92aWRlZCBieSBKSVRTdHVicywgYW5k
IGEgY29uc3RydWN0b3Itc3BlY2lmaWMKKyAgICAgICAgTmF0aXZlRnVuY3Rpb24gb24gTmF0aXZl
RXhlY3V0YWJsZS4gIFByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gb2YgYSBob3N0CisgICAgICAg
IGNvbnN0cnVjdG9yIHdoaWNoIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uLgorCisgICAgICAgICog
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRCeUlkRXhjZXB0aW9uSW5mb0ZvckJ5dGVjb2Rl
T2Zmc2V0KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRl
Y29kZS9PcGNvZGUuaDoKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0cnVjdCk6CisgICAg
ICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0QnlJZEV4Y2VwdGlvbkluZm8pOgorICAgICAgICAqIGlu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnBy
aXZhdGVFeGVjdXRlKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklU
Ojpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAg
ICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZSk6CisgICAgICAgICogaml0
L0pJVENhbGwzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKiBqaXQv
SklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNo
aW5lVHJhbXBvbGluZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0
aXZlQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXFfbnVsbCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9jb252ZXJ0X3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZ2V0X2NhbGxlZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhp
cyk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMpOgorICAgICAgICAoSlNDOjpK
SVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9nZXRfY2FsbGVlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlz
KToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RV
Ql9GVU5DVElPTik6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6aG9zdEZ1bmN0aW9uU3R1Yik6
CisgICAgICAgICogaml0L0pJVFN0dWJzLmg6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3Rp
TmF0aXZlQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6KToKKyAgICAgICAgKiBydW50aW1lL0V4
Y2VwdGlvbkhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpjcmVhdGVOb3RBbk9iamVjdEVycm9y
KToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKEpTQzo6TmF0aXZl
RXhlY3V0YWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6TmF0aXZlRXhlY3V0YWJsZTo6TmF0
aXZlRXhlY3V0YWJsZSk6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmNwcDoKKyAgICAg
ICAgKEpTQzo6Y2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNGdW5jdGlvbi5oOgorCiAyMDEwLTA1LTIzICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgRml4IHdpbmRvd3MgYnVpbGQuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDU5OTgwKQorKysgSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk5LDYgKzQ5OSwxNyBAQCB2
b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMsIGNvCiAgICAgICAgICAgICBwcmlu
dGYoIlslNGRdIGluaXRfYXJndW1lbnRzXHQgJXNcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUo
ZXhlYywgcjApLmRhdGEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAg
ICBjYXNlIG9wX2dldF9jYWxsZWU6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5v
cGVyYW5kOworICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSBvcF9nZXRfY2FsbGVlICVzXG4iLCBs
b2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9jcmVhdGVfdGhpczogeworICAgICAgICAg
ICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytp
dCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gY3JlYXRlX3RoaXMgJXMg
JXNcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKGV4ZWMsIHIxKS5kYXRhKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAg
ICAgICAgY2FzZSBvcF9jb252ZXJ0X3RoaXM6IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0
KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSBjb252ZXJ0X3RoaXMgJXNc
biIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmRhdGEoKSk7CkBAIC0xMDgzLDkg
KzEwOTQsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMsIGNvCiAgICAg
ICAgICAgICBpbnQgZnVuYyA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGFy
Z0NvdW50ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgcmVnaXN0ZXJPZmZz
ZXQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBwcm90byA9ICgrK2l0KS0+
dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHRoaXNSZWdpc3RlciA9ICgrK2l0KS0+dS5vcGVy
YW5kOwotICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSBjb25zdHJ1Y3RcdCAlcywgJWQsICVkLCAl
cywgJXNcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgZnVuYykuZGF0YSgpLCBhcmdD
b3VudCwgcmVnaXN0ZXJPZmZzZXQsIHJlZ2lzdGVyTmFtZShleGVjLCBwcm90bykuZGF0YSgpLCBy
ZWdpc3Rlck5hbWUoZXhlYywgdGhpc1JlZ2lzdGVyKS5kYXRhKCkpOworICAgICAgICAgICAgcHJp
bnRmKCJbJTRkXSBjb25zdHJ1Y3RcdCAlcywgJWQsICVkXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJO
YW1lKGV4ZWMsIGZ1bmMpLmRhdGEoKSwgYXJnQ291bnQsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3Bfc3RyY2F0OiB7CkBAIC0x
NjM2LDcgKzE2NDUsNyBAQCBib29sIENvZGVCbG9jazo6Z2V0QnlJZEV4Y2VwdGlvbkluZm9Gb3JC
CiAgICAgaWYgKCFsb3cgfHwgbV9leGNlcHRpb25JbmZvLT5tX2dldEJ5SWRFeGNlcHRpb25JbmZv
W2xvdyAtIDFdLmJ5dGVjb2RlT2Zmc2V0ICE9IGJ5dGVjb2RlT2Zmc2V0KQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBvcGNvZGVJRCA9IG1fZXhjZXB0aW9uSW5mby0+bV9nZXRCeUlkRXhj
ZXB0aW9uSW5mb1tsb3cgLSAxXS5pc09wQ29uc3RydWN0ID8gb3BfY29uc3RydWN0IDogb3BfaW5z
dGFuY2VvZjsKKyAgICBvcGNvZGVJRCA9IG1fZXhjZXB0aW9uSW5mby0+bV9nZXRCeUlkRXhjZXB0
aW9uSW5mb1tsb3cgLSAxXS5pc09wQ3JlYXRlVGhpcyA/IG9wX2NyZWF0ZV90aGlzIDogb3BfaW5z
dGFuY2VvZjsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgJKHJldmlzaW9uIDU5OTgwKQorKysgSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgLy8gdGhyb3duIGJ5IHRoZXNlIGluc3RhbmNlcyBvcF9nZXRfYnlfaWQgbmVlZCB0
byByZWZsZWN0IHRoaXMuCiAgICAgc3RydWN0IEdldEJ5SWRFeGNlcHRpb25JbmZvIHsKICAgICAg
ICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgOiAzMTsKLSAgICAgICAgYm9vbCBpc09wQ29uc3Ry
dWN0IDogMTsKKyAgICAgICAgYm9vbCBpc09wQ3JlYXRlVGhpcyA6IDE7CiAgICAgfTsKIAogI2lm
IEVOQUJMRShKSVQpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkocmV2aXNpb24gNTk5
ODApCisrKyBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDIsNiArNDIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgbWFjcm8ob3BfZW50ZXJf
d2l0aF9hY3RpdmF0aW9uLCAyKSBcCiAgICAgICAgIG1hY3JvKG9wX2luaXRfYXJndW1lbnRzLCAy
KSBcCiAgICAgICAgIG1hY3JvKG9wX2NyZWF0ZV9hcmd1bWVudHMsIDIpIFwKKyAgICAgICAgbWFj
cm8ob3BfY3JlYXRlX3RoaXMsIDMpIFwKKyAgICAgICAgbWFjcm8ob3BfZ2V0X2NhbGxlZSwgMikg
XAogICAgICAgICBtYWNybyhvcF9jb252ZXJ0X3RoaXMsIDIpIFwKICAgICAgICAgXAogICAgICAg
ICBtYWNybyhvcF9uZXdfb2JqZWN0LCAyKSBcCkBAIC0xNjQsNyArMTY2LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIG1hY3JvKG9wX3JldF9vYmplY3Rfb3JfdGhpcywgMykgXAogICAgICAg
ICBtYWNybyhvcF9tZXRob2RfY2hlY2ssIDEpIFwKICAgICAgICAgXAotICAgICAgICBtYWNybyhv
cF9jb25zdHJ1Y3QsIDYpIFwKKyAgICAgICAgbWFjcm8ob3BfY29uc3RydWN0LCA0KSBcCiAgICAg
ICAgIG1hY3JvKG9wX3N0cmNhdCwgNCkgXAogICAgICAgICBtYWNybyhvcF90b19wcmltaXRpdmUs
IDMpIFwKICAgICAgICAgXApJbmRleDogSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA1OTk4MCkKKysrIEphdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2NCwxNiArMzY0LDI5IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihG
dW4KICAgICBtX3RoaXNSZWdpc3Rlci5zZXRJbmRleChtX25leHRQYXJhbWV0ZXJJbmRleCk7CiAg
ICAgKyttX25leHRQYXJhbWV0ZXJJbmRleDsKICAgICArK21fY29kZUJsb2NrLT5tX251bVBhcmFt
ZXRlcnM7Ci0KLSAgICBpZiAoIWlzQ29uc3RydWN0b3IoKSAmJiAoZnVuY3Rpb25Cb2R5LT51c2Vz
VGhpcygpIHx8IG1fc2hvdWxkRW1pdERlYnVnSG9va3MpKSB7Ci0gICAgICAgIGVtaXRPcGNvZGUo
b3BfY29udmVydF90aGlzKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fdGhpc1Jl
Z2lzdGVyLmluZGV4KCkpOwotICAgIH0KICAgICAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHBhcmFtZXRlckNvdW50OyArK2kpCiAgICAgICAgIGFkZFBhcmFtZXRlcihwYXJhbWV0ZXJzW2ld
KTsKIAogICAgIHByZXNlcnZlTGFzdFZhcigpOworCisgICAgaWYgKGlzQ29uc3RydWN0b3IoKSkg
eworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IG5ld1RlbXBvcmFyeSgpOworICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY1Byb3RvID0gbmV3VGVtcG9yYXJ5KCk7CisKKyAg
ICAgICAgZW1pdE9wY29kZShvcF9nZXRfY2FsbGVlKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGZ1bmMtPmluZGV4KCkpOworICAgICAgICAvLyBMb2FkIHByb3RvdHlwZS4KKyAgICAg
ICAgZW1pdEdldEJ5SWRFeGNlcHRpb25JbmZvKG9wX2NyZWF0ZV90aGlzKTsKKyAgICAgICAgZW1p
dEdldEJ5SWQoZnVuY1Byb3RvLmdldCgpLCBmdW5jLmdldCgpLCBnbG9iYWxEYXRhKCktPnByb3Bl
cnR5TmFtZXMtPnByb3RvdHlwZSk7CisKKyAgICAgICAgZW1pdE9wY29kZShvcF9jcmVhdGVfdGhp
cyk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX3RoaXNSZWdpc3Rlci5pbmRleCgp
KTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZ1bmNQcm90by0+aW5kZXgoKSk7Cisg
ICAgfSBlbHNlIGlmIChmdW5jdGlvbkJvZHktPnVzZXNUaGlzKCkgfHwgbV9zaG91bGRFbWl0RGVi
dWdIb29rcykgeworICAgICAgICBlbWl0T3Bjb2RlKG9wX2NvbnZlcnRfdGhpcyk7CisgICAgICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChtX3RoaXNSZWdpc3Rlci5pbmRleCgpKTsKKyAgICB9CiB9
CiAKIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihFdmFsTm9kZSogZXZhbE5v
ZGUsIGNvbnN0IERlYnVnZ2VyKiBkZWJ1Z2dlciwgY29uc3QgU2NvcGVDaGFpbiYgc2NvcGVDaGFp
biwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBFdmFsQ29kZUJsb2NrKiBjb2RlQmxvY2spCkBA
IC0xNTgxLDggKzE1OTQsNiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENv
bnN0CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY1Byb3Rv
ID0gbmV3VGVtcG9yYXJ5KCk7Ci0KICAgICAvLyBHZW5lcmF0ZSBjb2RlIGZvciBhcmd1bWVudHMu
CiAgICAgVmVjdG9yPFJlZlB0cjxSZWdpc3RlcklEPiwgMTY+IGFyZ3Y7CiAgICAgYXJndi5hcHBl
bmQobmV3VGVtcG9yYXJ5KCkpOyAvLyByZXNlcnZlIHNwYWNlIGZvciAidGhpcyIKQEAgLTE1OTgs
MTEgKzE2MDksNiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0CiAg
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmdW5jLT5pbmRleCgpKTsKICAgICB9CiAKLSAg
ICAvLyBMb2FkIHByb3RvdHlwZS4KLSAgICBlbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QsIHN0YXJ0
T2Zmc2V0LCBlbmRPZmZzZXQpOwotICAgIGVtaXRHZXRCeUlkRXhjZXB0aW9uSW5mbyhvcF9jb25z
dHJ1Y3QpOwotICAgIGVtaXRHZXRCeUlkKGZ1bmNQcm90by5nZXQoKSwgZnVuYywgZ2xvYmFsRGF0
YSgpLT5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUpOwotCiAgICAgLy8gUmVzZXJ2ZSBzcGFjZSBm
b3IgY2FsbCBmcmFtZS4KICAgICBWZWN0b3I8UmVmUHRyPFJlZ2lzdGVySUQ+LCBSZWdpc3RlckZp
bGU6OkNhbGxGcmFtZUhlYWRlclNpemU+IGNhbGxGcmFtZTsKICAgICBmb3IgKGludCBpID0gMDsg
aSA8IFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsgKytpKQpAQCAtMTYxOCw4ICsx
NjI0LDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb25zdAogICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChmdW5jLT5pbmRleCgpKTsgLy8gZnVuYwogICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChhcmd2LnNpemUoKSk7IC8vIGFyZ0NvdW50CiAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGFyZ3ZbMF0tPmluZGV4KCkgKyBhcmd2LnNpemUoKSArIFJlZ2lzdGVyRmlsZTo6
Q2FsbEZyYW1lSGVhZGVyU2l6ZSk7IC8vIHJlZ2lzdGVyT2Zmc2V0Ci0gICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGZ1bmNQcm90by0+aW5kZXgoKSk7IC8vIHByb3RvCi0gICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGFyZ3ZbMF0tPmluZGV4KCkpOyAvLyB0aGlzUmVnaXN0ZXIKICAgICBpZiAoZHN0
ICE9IGlnbm9yZWRSZXN1bHQoKSkgewogICAgICAgICBlbWl0T3Bjb2RlKG9wX2NhbGxfcHV0X3Jl
c3VsdCk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOyAvLyBk
c3QKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oCShyZXZpc2lvbiA1OTk4MCkKKysrIEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgsMTAgKzI0OCwxMCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgLy8gT25seSBvcF9jb25zdHJ1
Y3QgYW5kIG9wX2luc3RhbmNlb2YgbmVlZCBleGNlcHRpb24gaW5mbyBmb3IKICAgICAgICAgICAg
IC8vIGEgcHJlY2VkaW5nIG9wX2dldF9ieV9pZC4KLSAgICAgICAgICAgIEFTU0VSVChvcGNvZGVJ
RCA9PSBvcF9jb25zdHJ1Y3QgfHwgb3Bjb2RlSUQgPT0gb3BfaW5zdGFuY2VvZik7CisgICAgICAg
ICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfY3JlYXRlX3RoaXMgfHwgb3Bjb2RlSUQgPT0gb3Bf
aW5zdGFuY2VvZik7CiAgICAgICAgICAgICBHZXRCeUlkRXhjZXB0aW9uSW5mbyBpbmZvOwogICAg
ICAgICAgICAgaW5mby5ieXRlY29kZU9mZnNldCA9IGluc3RydWN0aW9ucygpLnNpemUoKTsKLSAg
ICAgICAgICAgIGluZm8uaXNPcENvbnN0cnVjdCA9IChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3Qp
OworICAgICAgICAgICAgaW5mby5pc09wQ3JlYXRlVGhpcyA9IChvcGNvZGVJRCA9PSBvcF9jcmVh
dGVfdGhpcyk7CiAgICAgICAgICAgICBtX2NvZGVCbG9jay0+YWRkR2V0QnlJZEV4Y2VwdGlvbklu
Zm8oaW5mbyk7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiA1OTk4MCkKKysrIEphdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgzOSw2
ICszODM5LDcgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKIAogICAgICAgICB2UEMgPSBjYWxsRnJh
bWUtPnJldHVyblBDKCk7CiAgICAgICAgIGNhbGxGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJh
bWUoKTsKKyAgICAgICAgY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICAg
ICAgCiAgICAgICAgIGlmIChjYWxsRnJhbWUtPmhhc0hvc3RDYWxsRnJhbWVGbGFnKCkpCiAgICAg
ICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CkBAIC0zODgzLDYgKzM4ODQsNyBAQCBza2lwX2lk
X2N1c3RvbV9zZWxmOgogCiAgICAgICAgIHZQQyA9IGNhbGxGcmFtZS0+cmV0dXJuUEMoKTsKICAg
ICAgICAgY2FsbEZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOworICAgICAgICBjb2Rl
QmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgICAgICAKICAgICAgICAgaWYgKGNh
bGxGcmFtZS0+aGFzSG9zdENhbGxGcmFtZUZsYWcoKSkKICAgICAgICAgICAgIHJldHVybiByZXR1
cm5WYWx1ZTsKQEAgLTM5MzAsNiArMzkzMiw0NiBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogICAg
ICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9lbnRlcl93aXRoX2FjdGl2YXRpb24pOwogICAg
ICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgfQorICAgIERFRklORV9PUENPREUob3BfZ2V0
X2NhbGxlZSkgeworICAgICAgICAvKiBvcF9nZXRfY2FsbGVlIGNhbGxlZShyKQorCisgICAgICAg
ICAgIE1vdmUgY2FsbGVlIGludG8gYSByZWdpc3Rlci4KKyAgICAgICAgKi8KKworICAgICAgICBj
YWxsRnJhbWUtPnIodlBDWzFdLnUub3BlcmFuZCkgPSBjYWxsRnJhbWUtPmNhbGxlZSgpOworCisg
ICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2dldF9jYWxsZWUpOworICAgICAgICBORVhU
X0lOU1RSVUNUSU9OKCk7CisgICAgfQorICAgIERFRklORV9PUENPREUob3BfY3JlYXRlX3RoaXMp
IHsKKyAgICAgICAgLyogb3BfY3JlYXRlX3RoaXMgdGhpcyhyKSBwcm90byhyKQorCisgICAgICAg
ICAgIEFsbG9jYXRlIGFuIG9iamVjdCBhcyAndGhpcycsIGZyIHVzZSBpbiBjb25zdHJ1Y3Rpb24u
CisKKyAgICAgICAgICAgVGhpcyBvcGNvZGUgc2hvdWxkIG9ubHkgYmUgdXNlZCBhdCB0aGUgYmVn
aW5uaW5nIG9mIGEgY29kZQorICAgICAgICAgICBibG9jay4KKyAgICAgICAgKi8KKworICAgICAg
ICBpbnQgdGhpc1JlZ2lzdGVyID0gdlBDWzFdLnUub3BlcmFuZDsKKyAgICAgICAgaW50IHByb3Rv
UmVnaXN0ZXIgPSB2UENbMl0udS5vcGVyYW5kOworCisgICAgICAgIEpTRnVuY3Rpb24qIGNvbnN0
cnVjdG9yID0gYXNGdW5jdGlvbihjYWxsRnJhbWUtPmNhbGxlZSgpKTsKKyNpZiAhQVNTRVJUX0RJ
U0FCTEVECisgICAgICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKKyAgICAgICAgQVNT
RVJUKGNvbnN0cnVjdG9yLT5nZXRDb25zdHJ1Y3REYXRhKGNvbnN0cnVjdERhdGEpID09IENvbnN0
cnVjdFR5cGVKUyk7CisjZW5kaWYKKworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKKyAg
ICAgICAgSlNWYWx1ZSBwcm90byA9IGNhbGxGcmFtZS0+cihwcm90b1JlZ2lzdGVyKS5qc1ZhbHVl
KCk7CisgICAgICAgIGlmIChwcm90by5pc09iamVjdCgpKQorICAgICAgICAgICAgc3RydWN0dXJl
ID0gYXNPYmplY3QocHJvdG8pLT5pbmhlcml0b3JJRCgpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBzdHJ1Y3R1cmUgPSBjb25zdHJ1Y3Rvci0+c2NvcGUoKS5ub2RlKCktPmdsb2JhbE9iamVj
dC0+ZW1wdHlPYmplY3RTdHJ1Y3R1cmUoKTsKKyAgICAgICAgY2FsbEZyYW1lLT5yKHRoaXNSZWdp
c3RlcikgPSBuZXcgKCZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSkgSlNPYmplY3Qoc3RydWN0dXJl
KTsKKworICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9jcmVhdGVfdGhpcyk7CisgICAg
ICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKKyAgICB9CiAgICAgREVGSU5FX09QQ09ERShvcF9jb252
ZXJ0X3RoaXMpIHsKICAgICAgICAgLyogY29udmVydF90aGlzIHRoaXMocikKIApAQCAtNDAwMCw4
ICs0MDQyLDYgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAgICAgICAgaW50IGZ1bmMgPSB2UENb
MV0udS5vcGVyYW5kOwogICAgICAgICBpbnQgYXJnQ291bnQgPSB2UENbMl0udS5vcGVyYW5kOwog
ICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSB2UENbM10udS5vcGVyYW5kOwotICAgICAgICBp
bnQgcHJvdG8gPSB2UENbNF0udS5vcGVyYW5kOwotICAgICAgICBpbnQgdGhpc1JlZ2lzdGVyID0g
dlBDWzVdLnUub3BlcmFuZDsKIAogICAgICAgICBKU1ZhbHVlIHYgPSBjYWxsRnJhbWUtPnIoZnVu
YykuanNWYWx1ZSgpOwogCkBAIC00MDEyLDE2ICs0MDUyLDYgQEAgc2tpcF9pZF9jdXN0b21fc2Vs
ZjoKICAgICAgICAgICAgIFNjb3BlQ2hhaW5Ob2RlKiBjYWxsRGF0YVNjb3BlQ2hhaW4gPSBjb25z
dHJ1Y3REYXRhLmpzLnNjb3BlQ2hhaW47CiAgICAgICAgICAgICBDb2RlQmxvY2sqIG5ld0NvZGVC
bG9jayA9ICZjb25zdHJ1Y3REYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Ynl0ZWNvZGVGb3JD
b25zdHJ1Y3QoY2FsbEZyYW1lLCBjYWxsRGF0YVNjb3BlQ2hhaW4pOwogCi0gICAgICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZTsKLSAgICAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gY2Fs
bEZyYW1lLT5yKHByb3RvKS5qc1ZhbHVlKCk7Ci0gICAgICAgICAgICBpZiAocHJvdG90eXBlLmlz
T2JqZWN0KCkpCi0gICAgICAgICAgICAgICAgc3RydWN0dXJlID0gYXNPYmplY3QocHJvdG90eXBl
KS0+aW5oZXJpdG9ySUQoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdHJ1
Y3R1cmUgPSBjYWxsRGF0YVNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+ZW1wdHlPYmplY3RTdHJ1
Y3R1cmUoKTsKLSAgICAgICAgICAgIEpTT2JqZWN0KiBuZXdPYmplY3QgPSBuZXcgKGdsb2JhbERh
dGEpIEpTT2JqZWN0KHN0cnVjdHVyZSk7Ci0KLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cih0aGlz
UmVnaXN0ZXIpID0gSlNWYWx1ZShuZXdPYmplY3QpOyAvLyAidGhpcyIgdmFsdWUKLQogICAgICAg
ICAgICAgQ2FsbEZyYW1lKiBwcmV2aW91c0NhbGxGcmFtZSA9IGNhbGxGcmFtZTsKIAogICAgICAg
ICAgICAgY2FsbEZyYW1lID0gc2xpZGVSZWdpc3RlcldpbmRvd0ZvckNhbGwobmV3Q29kZUJsb2Nr
LCByZWdpc3RlckZpbGUsIGNhbGxGcmFtZSwgcmVnaXN0ZXJPZmZzZXQsIGFyZ0NvdW50KTsKQEAg
LTQwNDMsMTIgKzQwNzMsMTMgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAgICAgICAgfQogCiAg
ICAgICAgIGlmIChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGVIb3N0KSB7Ci0gICAgICAg
ICAgICBBcmdMaXN0IGFyZ3MoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIHRoaXNSZWdpc3RlciAr
IDEsIGFyZ0NvdW50IC0gMSk7Ci0KICAgICAgICAgICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNo
YWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7CiAgICAgICAgICAgICBDYWxsRnJhbWUqIG5l
d0NhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRlKGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBy
ZWdpc3Rlck9mZnNldCk7CiAgICAgICAgICAgICBuZXdDYWxsRnJhbWUtPmluaXQoMCwgdlBDICsg
T1BDT0RFX0xFTkdUSChvcF9jb25zdHJ1Y3QpLCBzY29wZUNoYWluLCBjYWxsRnJhbWUsIDAsIGFy
Z0NvdW50LCAwKTsKIAorICAgICAgICAgICAgUmVnaXN0ZXIqIHRoaXNSZWdpc3RlciA9IG5ld0Nh
bGxGcmFtZS0+cmVnaXN0ZXJzKCkgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUg
LSBhcmdDb3VudDsKKyAgICAgICAgICAgIEFyZ0xpc3QgYXJncyh0aGlzUmVnaXN0ZXIgKyAxLCBh
cmdDb3VudCAtIDEpOworCiAgICAgICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlOwogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIFNhbXBsaW5nVG9vbDo6SG9zdENhbGxSZWNvcmQgY2Fs
bFJlY29yZChtX3NhbXBsZXIuZ2V0KCkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDU5
OTgwKQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
MSw2ICsyMjEsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAg
IERFRklORV9PUChvcF9jYWxsX3ZhcmFyZ3MpCiAgICAgICAgIERFRklORV9PUChvcF9jYXRjaCkK
ICAgICAgICAgREVGSU5FX09QKG9wX2NvbnN0cnVjdCkKKyAgICAgICAgREVGSU5FX09QKG9wX2dl
dF9jYWxsZWUpCisgICAgICAgIERFRklORV9PUChvcF9jcmVhdGVfdGhpcykKICAgICAgICAgREVG
SU5FX09QKG9wX2NvbnZlcnRfdGhpcykKICAgICAgICAgREVGSU5FX09QKG9wX2luaXRfYXJndW1l
bnRzKQogICAgICAgICBERUZJTkVfT1Aob3BfY3JlYXRlX2FyZ3VtZW50cykKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgJKHJldmlzaW9uIDU5OTgwKQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNjksNiArMjY5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQg
cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVj
dHVyZSosIFN0cnVjdHVyZSosIHNpemVfdCBjYWNoZWRPZmZzZXQsIFN0cnVjdHVyZUNoYWluKiwg
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKIAogICAgICAgICB2b2lkIHByaXZhdGVD
b21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4qIGV4ZWN1
dGFibGVQb29sLCBKU0dsb2JhbERhdGEqIGRhdGEsIFRyYW1wb2xpbmVTdHJ1Y3R1cmUgKnRyYW1w
b2xpbmVzKTsKKyAgICAgICAgTGFiZWwgcHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKEpTR2xv
YmFsRGF0YSosIGJvb2wgaXNDb25zdHJ1Y3QgPSBmYWxzZSk7CiAgICAgICAgIENvZGVQdHIgcHJp
dmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1
dGFibGVQb29sLCBKU0dsb2JhbERhdGEqIGRhdGEsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpOwogICAg
ICAgICB2b2lkIHByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MpOwogCkBAIC02NTQsNiArNjU1LDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9jYWxsX3B1dF9yZXN1bHQoSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdm9pZCBlbWl0X29wX2NhdGNoKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9jb25zdHJ1Y3QoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2dldF9j
YWxsZWUoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2NyZWF0ZV90aGlzKElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9jb252ZXJ0X3RoaXMoSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2NyZWF0ZV9hcmd1bWVudHMoSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlYnVnKEluc3RydWN0aW9uKik7CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gNTk5ODApCisrKyBKYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsMjAgKzY3LDYg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTZXR1cEFyZ3MoSW5zdHJ1YwogICAgIGVtaXRQdXRK
SVRTdHViQXJnQ29uc3RhbnQoYXJnQ291bnQsIDIpOwogfQogICAgICAgICAgIAotdm9pZCBKSVQ6
OmNvbXBpbGVPcENvbnN0cnVjdFNldHVwQXJncyhJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCi17
Ci0gICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBy
ZWdpc3Rlck9mZnNldCA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBpbnQgcHJvdG8g
PSBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7Ci0gICAgaW50IHRoaXNSZWdpc3RlciA9IGluc3Ry
dWN0aW9uWzVdLnUub3BlcmFuZDsKLQotICAgIGVtaXRQdXRKSVRTdHViQXJnKHJlZ1QxLCByZWdU
MCwgMCk7Ci0gICAgZW1pdFB1dEpJVFN0dWJBcmdDb25zdGFudChyZWdpc3Rlck9mZnNldCwgMSk7
Ci0gICAgZW1pdFB1dEpJVFN0dWJBcmdDb25zdGFudChhcmdDb3VudCwgMik7Ci0gICAgZW1pdFB1
dEpJVFN0dWJBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHByb3RvLCAzLCByZWdUMiwgcmVnVDMpOwot
ICAgIGVtaXRQdXRKSVRTdHViQXJnQ29uc3RhbnQodGhpc1JlZ2lzdGVyLCA0KTsKLX0KLQogdm9p
ZCBKSVQ6OmNvbXBpbGVPcENhbGxWYXJhcmdzU2V0dXBBcmdzKEluc3RydWN0aW9uKikKIHsKICAg
ICBlbWl0UHV0SklUU3R1YkFyZyhyZWdUMSwgcmVnVDAsIDApOwpAQCAtMjU2LDIwICsyNDIsMTIg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogCiAgICAgZW1pdExv
YWQoY2FsbGVlLCByZWdUMSwgcmVnVDApOwogCi0gICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGwp
CisgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkKICAgICAgICAgY29tcGlsZU9wQ2Fs
bFNldHVwQXJncyhpbnN0cnVjdGlvbik7Ci0gICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfY29u
c3RydWN0KQotICAgICAgICBjb21waWxlT3BDb25zdHJ1Y3RTZXR1cEFyZ3MoaW5zdHJ1Y3Rpb24p
OwogCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGNhbGxlZSwgcmVnVDEpOwogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCksIEltbVB0ciht
X2dsb2JhbERhdGEtPmpzRnVuY3Rpb25WUHRyKSkpOwogCi0gICAgLy8gRmlyc3QsIGluIHRoZSBj
YXNlIG9mIGEgY29uc3RydWN0LCBhbGxvY2F0ZSB0aGUgbmV3IG9iamVjdC4KLSAgICBpZiAob3Bj
b2RlSUQgPT0gb3BfY29uc3RydWN0KSB7Ci0gICAgICAgIEpJVFN0dWJDYWxsKHRoaXMsIGN0aV9v
cF9jb25zdHJ1Y3RfSlNDb25zdHJ1Y3QpLmNhbGwocmVnaXN0ZXJPZmZzZXQgLSBSZWdpc3RlckZp
bGU6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBhcmdDb3VudCk7Ci0gICAgICAgIGVtaXRMb2FkKGNh
bGxlZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICB9Ci0KICAgICAvLyBTcGVjdWxhdGl2ZWx5IHJvbGwg
dGhlIGNhbGxmcmFtZSwgYXNzdW1pbmcgYXJnQ291bnQgd2lsbCBtYXRjaCB0aGUgYXJpdHkuCiAg
ICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIs
IChSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lICsgcmVnaXN0ZXJPZmZzZXQpICogc3RhdGljX2Nh
c3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwogICAgIGFkZFB0cihJbW0zMihyZWdpc3Rlck9m
ZnNldCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpLCBjYWxsRnJhbWVSZWdp
c3Rlcik7CkBAIC0zMzQsMjEgKzMxMiw2IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29k
ZUlEIG9wY29kZUkKIAogICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgdGhlIGZhc3QgY2FzZSwgb25s
eSB1c2VkIHdoYW4gYSBjYWxsZWUgY2FuIGJlIGxpbmtlZC4KIAotICAgIC8vIEluIHRoZSBjYXNl
IG9mIE9wQ29uc3RydWN0LCBjYWxsIG91dCB0byBhIGN0aV8gZnVuY3Rpb24gdG8gY3JlYXRlIHRo
ZSBuZXcgb2JqZWN0LgotICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QpIHsKLSAgICAg
ICAgaW50IHByb3RvID0gaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwotICAgICAgICBpbnQgdGhp
c1JlZ2lzdGVyID0gaW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kOwotCi0gICAgICAgIEpJVFN0dWJD
YWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9jb25zdHJ1Y3RfSlNDb25zdHJ1Y3QpOwotICAgICAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMSwgcmVnVDApOwotICAgICAgICBzdHViQ2FsbC5h
ZGRBcmd1bWVudChJbW0zMigwKSk7IC8vIEZJWE1FOiBSZW1vdmUgdGhpcyB1bnVzZWQgSklUU3R1
YiBhcmd1bWVudC4KLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tMzIoMCkpOyAvLyBG
SVhNRTogUmVtb3ZlIHRoaXMgdW51c2VkIEpJVFN0dWIgYXJndW1lbnQuCi0gICAgICAgIHN0dWJD
YWxsLmFkZEFyZ3VtZW50KHByb3RvKTsKLSAgICAgICAgc3R1YkNhbGwuY2FsbCh0aGlzUmVnaXN0
ZXIpOwotCi0gICAgICAgIGVtaXRMb2FkKGNhbGxlZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICB9Ci0K
ICAgICAvLyBGYXN0IHZlcnNpb24gb2Ygc3RhY2sgZnJhbWUgaW5pdGlhbGl6YXRpb24sIGRpcmVj
dGx5IHJlbGF0aXZlIHRvIGVkaS4KICAgICAvLyBOb3RlIHRoYXQgdGhpcyBvbWl0cyB0byBzZXQg
dXAgUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2ssIHdoaWNoIGlzIHNldCBpbiB0aGUgY2FsbGVlCiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9z
Y29wZUNoYWluKSArIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluLCBtX25vZGUpKSwgcmVnVDIp
OwpAQCAtMzcwLDcgKzMzMyw2IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9w
Y29kZUkKIAogdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVk
IGNhbGxMaW5rSW5mb0luZGV4LCBPcGNvZGVJRCBvcGNvZGVJRCkKIHsKLSAgICBpbnQgY2FsbGVl
ID0gaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgIGludCBhcmdDb3VudCA9IGluc3RydWN0
aW9uWzJdLnUub3BlcmFuZDsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBpbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQ7CiAKQEAgLTM3OCwyMSArMzQwLDEzIEBAIHZvaWQgSklUOjpjb21waWxlT3BD
YWxsU2xvd0Nhc2UoSW5zdHJ1Y3QKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAKICAgICAvLyBU
aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBzZXQgdXAgb24gdGhlIGhvdCBwYXRoIGZvciBvcF9jYWxs
X2V2YWwKLSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbCkKKyAgICBpZiAob3Bjb2RlSUQgIT0g
b3BfY2FsbF9ldmFsKQogICAgICAgICBjb21waWxlT3BDYWxsU2V0dXBBcmdzKGluc3RydWN0aW9u
KTsKLSAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QpCi0gICAgICAgIGNvbXBp
bGVPcENvbnN0cnVjdFNldHVwQXJncyhpbnN0cnVjdGlvbik7CiAKICAgICAvLyBGYXN0IGNoZWNr
IGZvciBKUyBmdW5jdGlvbi4KICAgICBKdW1wIGNhbGxMaW5rRmFpbE5vdE9iamVjdCA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMSwgSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwogICAgIEp1bXAg
Y2FsbExpbmtGYWlsTm90SlNGdW5jdGlvbiA9IGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhy
ZWdUMCksIEltbVB0cihtX2dsb2JhbERhdGEtPmpzRnVuY3Rpb25WUHRyKSk7CiAKLSAgICAvLyBG
aXJzdCwgaW4gdGhlIGNhc2Ugb2YgYSBjb25zdHJ1Y3QsIGFsbG9jYXRlIHRoZSBuZXcgb2JqZWN0
LgotICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QpIHsKLSAgICAgICAgSklUU3R1YkNh
bGwodGhpcywgY3RpX29wX2NvbnN0cnVjdF9KU0NvbnN0cnVjdCkuY2FsbChyZWdpc3Rlck9mZnNl
dCAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIGFyZ0NvdW50KTsKLSAgICAg
ICAgZW1pdExvYWQoY2FsbGVlLCByZWdUMSwgcmVnVDApOwotICAgIH0KLQogICAgIC8vIFNwZWN1
bGF0aXZlbHkgcm9sbCB0aGUgY2FsbGZyYW1lLCBhc3N1bWluZyBhcmdDb3VudCB3aWxsIG1hdGNo
IHRoZSBhcml0eS4KICAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhjYWxs
RnJhbWVSZWdpc3RlciwgKFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUgKyByZWdpc3Rlck9mZnNl
dCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CiAgICAgYWRkUHRyKElt
bTMyKHJlZ2lzdGVyT2Zmc2V0ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSks
IGNhbGxGcmFtZVJlZ2lzdGVyKTsKQEAgLTQwMCwxNCArMzU0LDEwIEBAIHZvaWQgSklUOjpjb21w
aWxlT3BDYWxsU2xvd0Nhc2UoSW5zdHJ1Y3QKIAogICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21w
aWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXRO
YWtlZENhbGwob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0ID8gbV9nbG9iYWxEYXRhLT5qaXRTdHVi
cy5jdGlWaXJ0dWFsQ29uc3RydWN0TGluaygpIDogbV9nbG9iYWxEYXRhLT5qaXRTdHVicy5jdGlW
aXJ0dWFsQ2FsbExpbmsoKSk7CiAKLSAgICAvLyBJZiBub3QsIHdlIG5lZWQgYW4gZXh0cmEgY2Fz
ZSBpbiB0aGUgaWYgYmVsb3chCi0gICAgQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0g
T1BDT0RFX0xFTkdUSChvcF9jYWxsX2V2YWwpKTsKLQogICAgIC8vIERvbmUhIC0gcmV0dXJuIGJh
Y2sgdG8gdGhlIGhvdCBwYXRoLgotICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QpCi0g
ICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9jb25zdHJ1
Y3QpKTsKLSAgICBlbHNlCi0gICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RF
X0xFTkdUSChvcF9jYWxsKSk7CisgICAgQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0g
T1BDT0RFX0xFTkdUSChvcF9jYWxsX2V2YWwpKTsKKyAgICBBU1NFUlQoT1BDT0RFX0xFTkdUSChv
cF9jYWxsKSA9PSBPUENPREVfTEVOR1RIKG9wX2NvbnN0cnVjdCkpOworICAgIGVtaXRKdW1wU2xv
d1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9jYWxsKSk7CiAKICAgICAvLyBUaGlzIGhh
bmRsZXMgaG9zdCBmdW5jdGlvbnMKICAgICBjYWxsTGlua0ZhaWxOb3RPYmplY3QubGluayh0aGlz
KTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDU5OTgwKQorKysgSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCwyMSArNzgsNiBA
QCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFZhcmFyZ3NTZXR1cEFyZ3MoCiAgICAgZW1pdFB1dEpJ
VFN0dWJBcmcocmVnVDIsIDEpOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZU9wQ29uc3RydWN0U2V0
dXBBcmdzKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgYXJnQ291bnQgPSBp
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gaW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGludCBwcm90byA9IGluc3RydWN0aW9uWzRdLnUub3Bl
cmFuZDsKLSAgICBpbnQgdGhpc1JlZ2lzdGVyID0gaW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kOwot
Ci0gICAgLy8gZWN4IGhvbGRzIGZ1bmMKLSAgICBlbWl0UHV0SklUU3R1YkFyZyhyZWdUMCwgMCk7
Ci0gICAgZW1pdFB1dEpJVFN0dWJBcmdDb25zdGFudChyZWdpc3Rlck9mZnNldCwgMSk7Ci0gICAg
ZW1pdFB1dEpJVFN0dWJBcmdDb25zdGFudChhcmdDb3VudCwgMik7Ci0gICAgZW1pdFB1dEpJVFN0
dWJBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHByb3RvLCAzLCByZWdUMik7Ci0gICAgZW1pdFB1dEpJ
VFN0dWJBcmdDb25zdGFudCh0aGlzUmVnaXN0ZXIsIDQpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9v
cF9jYWxsX3B1dF9yZXN1bHQoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewogICAgIGludCBk
c3QgPSBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CkBAIC0xNTcsMjEgKzE0MiwxMyBAQCB2b2lk
IEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGNhbGxlZSwgcmVnVDApOwogICAgIC8vIFRoZSBhcmd1bWVudHMgaGF2ZSBiZWVu
IHNldCB1cCBvbiB0aGUgaG90IHBhdGggZm9yIG9wX2NhbGxfZXZhbAotICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF9jYWxsKQorICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpCiAgICAgICAg
IGNvbXBpbGVPcENhbGxTZXR1cEFyZ3MoaW5zdHJ1Y3Rpb24pOwotICAgIGVsc2UgaWYgKG9wY29k
ZUlEID09IG9wX2NvbnN0cnVjdCkKLSAgICAgICAgY29tcGlsZU9wQ29uc3RydWN0U2V0dXBBcmdz
KGluc3RydWN0aW9uKTsKIAogICAgIC8vIENoZWNrIGZvciBKU0Z1bmN0aW9ucy4KICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0
cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCksIEltbVB0cihtX2dsb2JhbERhdGEtPmpzRnVuY3Rp
b25WUHRyKSkpOwogCi0gICAgLy8gRmlyc3QsIGluIHRoZSBjYXNlIG9mIGEgY29uc3RydWN0LCBh
bGxvY2F0ZSB0aGUgbmV3IG9iamVjdC4KLSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0
KSB7Ci0gICAgICAgIEpJVFN0dWJDYWxsKHRoaXMsIGN0aV9vcF9jb25zdHJ1Y3RfSlNDb25zdHJ1
Y3QpLmNhbGwocmVnaXN0ZXJPZmZzZXQgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNp
emUgLSBhcmdDb3VudCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBy
ZWdUMCk7Ci0gICAgfQotCiAgICAgLy8gU3BlY3VsYXRpdmVseSByb2xsIHRoZSBjYWxsZnJhbWUs
IGFzc3VtaW5nIGFyZ0NvdW50IHdpbGwgbWF0Y2ggdGhlIGFyaXR5LgogICAgIHN0b3JlUHRyKGNh
bGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAoUmVnaXN0ZXJGaWxl
OjpDYWxsZXJGcmFtZSArIHJlZ2lzdGVyT2Zmc2V0KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9m
KFJlZ2lzdGVyKSkpKTsKICAgICBhZGRQdHIoSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzdGF0aWNf
Y2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwpAQCAtMjMz
LDE4ICsyMTAsNiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAK
ICAgICAvLyBUaGUgZm9sbG93aW5nIGlzIHRoZSBmYXN0IGNhc2UsIG9ubHkgdXNlZCB3aGFuIGEg
Y2FsbGVlIGNhbiBiZSBsaW5rZWQuCiAKLSAgICAvLyBJbiB0aGUgY2FzZSBvZiBPcENvbnN0cnVj
dCwgY2FsbCBvdXQgdG8gYSBjdGlfIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgbmV3IG9iamVjdC4K
LSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0KSB7Ci0gICAgICAgIGludCBwcm90byA9
IGluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHRoaXNSZWdpc3RlciA9IGlu
c3RydWN0aW9uWzVdLnUub3BlcmFuZDsKLQotICAgICAgICBlbWl0UHV0SklUU3R1YkFyZyhyZWdU
MCwgMCk7Ci0gICAgICAgIGVtaXRQdXRKSVRTdHViQXJnRnJvbVZpcnR1YWxSZWdpc3Rlcihwcm90
bywgMywgcmVnVDIpOwotICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3Bf
Y29uc3RydWN0X0pTQ29uc3RydWN0KTsKLSAgICAgICAgc3R1YkNhbGwuY2FsbCh0aGlzUmVnaXN0
ZXIpOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgcmVnVDApOwotICAg
IH0KLQogICAgIC8vIEZhc3QgdmVyc2lvbiBvZiBzdGFjayBmcmFtZSBpbml0aWFsaXphdGlvbiwg
ZGlyZWN0bHkgcmVsYXRpdmUgdG8gZWRpLgogICAgIC8vIE5vdGUgdGhhdCB0aGlzIG9taXRzIHRv
IHNldCB1cCBSZWdpc3RlckZpbGU6OkNvZGVCbG9jaywgd2hpY2ggaXMgc2V0IGluIHRoZSBjYWxs
ZWUKIApAQCAtMjY3LDI4ICsyMzIsMTkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2Rl
SUQgb3Bjb2RlSQogCiB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5z
aWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIE9wY29kZUlEIG9wY29kZUlEKQogewotICAgIGludCBj
YWxsZWUgPSBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgaW50IGFyZ0NvdW50ID0gaW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIGludCByZWdpc3Rlck9mZnNldCA9IGluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKIAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAogICAgIC8vIFRo
ZSBhcmd1bWVudHMgaGF2ZSBiZWVuIHNldCB1cCBvbiB0aGUgaG90IHBhdGggZm9yIG9wX2NhbGxf
ZXZhbAotICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsKQorICAgIGlmIChvcGNvZGVJRCAhPSBv
cF9jYWxsX2V2YWwpCiAgICAgICAgIGNvbXBpbGVPcENhbGxTZXR1cEFyZ3MoaW5zdHJ1Y3Rpb24p
OwotICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCkKLSAgICAgICAgY29tcGls
ZU9wQ29uc3RydWN0U2V0dXBBcmdzKGluc3RydWN0aW9uKTsKIAogICAgIC8vIEZhc3QgY2hlY2sg
Zm9yIEpTIGZ1bmN0aW9uLgogICAgIEp1bXAgY2FsbExpbmtGYWlsTm90T2JqZWN0ID0gZW1pdEp1
bXBJZk5vdEpTQ2VsbChyZWdUMCk7CiAgICAgSnVtcCBjYWxsTGlua0ZhaWxOb3RKU0Z1bmN0aW9u
ID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwKSwgSW1tUHRyKG1fZ2xvYmFsRGF0
YS0+anNGdW5jdGlvblZQdHIpKTsKIAotICAgIC8vIEZpcnN0LCBpbiB0aGUgY2FzZSBvZiBhIGNv
bnN0cnVjdCwgYWxsb2NhdGUgdGhlIG5ldyBvYmplY3QuCi0gICAgaWYgKG9wY29kZUlEID09IG9w
X2NvbnN0cnVjdCkgewotICAgICAgICBKSVRTdHViQ2FsbCh0aGlzLCBjdGlfb3BfY29uc3RydWN0
X0pTQ29uc3RydWN0KS5jYWxsKHJlZ2lzdGVyT2Zmc2V0IC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJh
bWVIZWFkZXJTaXplIC0gYXJnQ291bnQpOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGNhbGxlZSwgcmVnVDApOwotICAgIH0KLQogICAgIC8vIFNwZWN1bGF0aXZlbHkgcm9sbCB0aGUg
Y2FsbGZyYW1lLCBhc3N1bWluZyBhcmdDb3VudCB3aWxsIG1hdGNoIHRoZSBhcml0eS4KICAgICBz
dG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgKFJl
Z2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUgKyByZWdpc3Rlck9mZnNldCkgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CiAgICAgYWRkUHRyKEltbTMyKHJlZ2lzdGVyT2Zmc2V0
ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSksIGNhbGxGcmFtZVJlZ2lzdGVy
KTsKQEAgLTI5OCwxNCArMjU0LDEwIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2Uo
SW5zdHJ1Y3QKIAogICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtlZENhbGwob3Bjb2RlSUQg
PT0gb3BfY29uc3RydWN0ID8gbV9nbG9iYWxEYXRhLT5qaXRTdHVicy5jdGlWaXJ0dWFsQ29uc3Ry
dWN0TGluaygpIDogbV9nbG9iYWxEYXRhLT5qaXRTdHVicy5jdGlWaXJ0dWFsQ2FsbExpbmsoKSk7
CiAKLSAgICAvLyBJZiBub3QsIHdlIG5lZWQgYW4gZXh0cmEgY2FzZSBpbiB0aGUgaWYgYmVsb3ch
Ci0gICAgQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0gT1BDT0RFX0xFTkdUSChvcF9j
YWxsX2V2YWwpKTsKLQogICAgIC8vIERvbmUhIC0gcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRo
LgotICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QpCi0gICAgICAgIGVtaXRKdW1wU2xv
d1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9jb25zdHJ1Y3QpKTsKLSAgICBlbHNlCi0g
ICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9jYWxsKSk7
CisgICAgQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0gT1BDT0RFX0xFTkdUSChvcF9j
YWxsX2V2YWwpKTsKKyAgICBBU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9jYWxsKSA9PSBPUENPREVf
TEVOR1RIKG9wX2NvbnN0cnVjdCkpOworICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BD
T0RFX0xFTkdUSChvcF9jYWxsKSk7CiAKICAgICAvLyBUaGlzIGhhbmRsZXMgaG9zdCBmdW5jdGlv
bnMKICAgICBjYWxsTGlua0ZhaWxOb3RPYmplY3QubGluayh0aGlzKTsKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiA1OTk4MCkKKysrIEphdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsOCAr
MjEzLDYyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUs
IG1faml0Q29kZUZvckNvbnN0cnVjdCkpLCByZWdUMCk7CiAgICAganVtcChyZWdUMCk7CiAKLSNp
ZiBDUFUoWDg2KSB8fCBDUFUoQVJNX1RSQURJVElPTkFMKQorICAgIC8vIE5hdGl2ZUNhbGwgVHJh
bXBvbGluZQorICAgIExhYmVsIG5hdGl2ZUNhbGxUaHVuayA9IHByaXZhdGVDb21waWxlQ1RJTmF0
aXZlQ2FsbChnbG9iYWxEYXRhKTsgICAgCisgICAgTGFiZWwgbmF0aXZlQ29uc3RydWN0VGh1bmsg
PSBwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSwgdHJ1ZSk7ICAgIAorCisj
aWYgRU5BQkxFKEpJVF9PUFRJTUlaRV9QUk9QRVJUWV9BQ0NFU1MpCisgICAgQ2FsbCBzdHJpbmdf
ZmFpbHVyZUNhc2VzMUNhbGwgPSBtYWtlVGFpbFJlY3Vyc2l2ZUNhbGwoc3RyaW5nX2ZhaWx1cmVD
YXNlczEpOworICAgIENhbGwgc3RyaW5nX2ZhaWx1cmVDYXNlczJDYWxsID0gbWFrZVRhaWxSZWN1
cnNpdmVDYWxsKHN0cmluZ19mYWlsdXJlQ2FzZXMyKTsKKyAgICBDYWxsIHN0cmluZ19mYWlsdXJl
Q2FzZXMzQ2FsbCA9IG1ha2VUYWlsUmVjdXJzaXZlQ2FsbChzdHJpbmdfZmFpbHVyZUNhc2VzMyk7
CisjZW5kaWYKKworICAgIC8vIEFsbCB0cmFtcG9saW5lcyBjb25zdHJ1Y3RlZCEgY29weSB0aGUg
Y29kZSwgbGluayB1cCBjYWxscywgYW5kIHNldCB0aGUgcG9pbnRlcnMgb24gdGhlIE1hY2hpbmUg
b2JqZWN0LgorICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIodGhpcywgbV9nbG9iYWxEYXRhLT5l
eGVjdXRhYmxlQWxsb2NhdG9yLnBvb2xGb3JTaXplKG1fYXNzZW1ibGVyLnNpemUoKSkpOworCisj
aWYgRU5BQkxFKEpJVF9PUFRJTUlaRV9QUk9QRVJUWV9BQ0NFU1MpCisgICAgcGF0Y2hCdWZmZXIu
bGluayhzdHJpbmdfZmFpbHVyZUNhc2VzMUNhbGwsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlf
aWRfc3RyaW5nX2ZhaWwpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHN0cmluZ19mYWlsdXJlQ2Fz
ZXMyQ2FsbCwgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCkpOworICAg
IHBhdGNoQnVmZmVyLmxpbmsoc3RyaW5nX2ZhaWx1cmVDYXNlczNDYWxsLCBGdW5jdGlvblB0cihj
dGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7CisjZW5kaWYKKyNpZiBFTkFCTEUoSklUX09Q
VElNSVpFX0NBTEwpCisgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsQXJpdHlDaGVjazEsIEZ1bmN0
aW9uUHRyKGN0aV9vcF9jYWxsX2FyaXR5Q2hlY2spKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGNh
bGxKU0Z1bmN0aW9uMSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfaml0Q29tcGlsZSkpOworICAg
IHBhdGNoQnVmZmVyLmxpbmsoY2FsbExhenlMaW5rQ2FsbDEsIEZ1bmN0aW9uUHRyKGN0aV92bV9s
YXp5TGlua0NhbGwpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxBcml0eUNoZWNrMiwgRnVu
Y3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9hcml0eUNoZWNrKSk7CisgICAgcGF0Y2hCdWZmZXIu
bGluayhjYWxsSlNGdW5jdGlvbjIsIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3Rfaml0Q29t
cGlsZSkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbExhenlMaW5rQ2FsbDIsIEZ1bmN0aW9u
UHRyKGN0aV92bV9sYXp5TGlua0NvbnN0cnVjdCkpOworI2VuZGlmCisgICAgcGF0Y2hCdWZmZXIu
bGluayhjYWxsQXJpdHlDaGVjazMsIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxsX2FyaXR5Q2hlY2sp
KTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxKU0Z1bmN0aW9uMywgRnVuY3Rpb25QdHIoY3Rp
X29wX2NhbGxfaml0Q29tcGlsZSkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbEFyaXR5Q2hl
Y2s0LCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X2FyaXR5Q2hlY2spKTsKKyAgICBwYXRj
aEJ1ZmZlci5saW5rKGNhbGxKU0Z1bmN0aW9uNCwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVj
dF9qaXRDb21waWxlKSk7CisKKyAgICBDb2RlUmVmIGZpbmFsQ29kZSA9IHBhdGNoQnVmZmVyLmZp
bmFsaXplQ29kZSgpOworICAgICpleGVjdXRhYmxlUG9vbCA9IGZpbmFsQ29kZS5tX2V4ZWN1dGFi
bGVQb29sOworCisgICAgdHJhbXBvbGluZXMtPmN0aVZpcnR1YWxDYWxsID0gdHJhbXBvbGluZUF0
KGZpbmFsQ29kZSwgdmlydHVhbENhbGxCZWdpbik7CisgICAgdHJhbXBvbGluZXMtPmN0aVZpcnR1
YWxDb25zdHJ1Y3QgPSB0cmFtcG9saW5lQXQoZmluYWxDb2RlLCB2aXJ0dWFsQ29uc3RydWN0QmVn
aW4pOworICAgIHRyYW1wb2xpbmVzLT5jdGlOYXRpdmVDYWxsID0gdHJhbXBvbGluZUF0KGZpbmFs
Q29kZSwgbmF0aXZlQ2FsbFRodW5rKTsKKyAgICB0cmFtcG9saW5lcy0+Y3RpTmF0aXZlQ29uc3Ry
dWN0ID0gdHJhbXBvbGluZUF0KGZpbmFsQ29kZSwgbmF0aXZlQ29uc3RydWN0VGh1bmspOworI2lm
IEVOQUJMRShKSVRfT1BUSU1JWkVfUFJPUEVSVFlfQUNDRVNTKQorICAgIHRyYW1wb2xpbmVzLT5j
dGlTdHJpbmdMZW5ndGhUcmFtcG9saW5lID0gdHJhbXBvbGluZUF0KGZpbmFsQ29kZSwgc3RyaW5n
TGVuZ3RoQmVnaW4pOworI2VuZGlmCisjaWYgRU5BQkxFKEpJVF9PUFRJTUlaRV9DQUxMKQorICAg
IHRyYW1wb2xpbmVzLT5jdGlWaXJ0dWFsQ2FsbExpbmsgPSB0cmFtcG9saW5lQXQoZmluYWxDb2Rl
LCB2aXJ0dWFsQ2FsbExpbmtCZWdpbik7CisgICAgdHJhbXBvbGluZXMtPmN0aVZpcnR1YWxDb25z
dHJ1Y3RMaW5rID0gdHJhbXBvbGluZUF0KGZpbmFsQ29kZSwgdmlydHVhbENvbnN0cnVjdExpbmtC
ZWdpbik7CisjZW5kaWYKKyNpZiBFTkFCTEUoSklUX09QVElNSVpFX01PRCkKKyAgICB0cmFtcG9s
aW5lcy0+Y3RpU29mdE1vZHVsbyA9IHRyYW1wb2xpbmVBdChmaW5hbENvZGUsIHNvZnRNb2RCZWdp
bik7CisjZW5kaWYKK30KKworSklUOjpMYWJlbCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZl
Q2FsbChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGJvb2wgaXNDb25zdHJ1Y3QpCit7CisgICAg
aW50IGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uID0gaXNDb25zdHJ1Y3QgPyBPQkpFQ1RfT0ZG
U0VUT0YoTmF0aXZlRXhlY3V0YWJsZSwgbV9jb25zdHJ1Y3RvcikgOiBPQkpFQ1RfT0ZGU0VUT0Yo
TmF0aXZlRXhlY3V0YWJsZSwgbV9mdW5jdGlvbik7CisKICAgICBMYWJlbCBuYXRpdmVDYWxsVGh1
bmsgPSBhbGlnbigpOworI2lmIENQVShYODYpIHx8IENQVShBUk1fVFJBRElUSU9OQUwpCiAgICAg
cHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QwKTsKICAgICBlbWl0UHV0VG9DYWxs
RnJhbWVIZWFkZXIocmVnVDAsIFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMpOyAvLyBQdXNoIHJldHVy
biBhZGRyZXNzCiAKQEAgLTMxMSw3ICszNjUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVD
VElNYWNoaW5lVHJhbXBvCiAgICAgbW92ZShjYWxsRnJhbWVSZWdpc3RlciwgWDg2UmVnaXN0ZXJz
OjplZHgpOwogCiAgICAgbG9hZFB0cihBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWF4LCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIFg4NlJlZ2lzdGVyczo6ZWJ4KTsK
LSAgICBjYWxsKEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplYngsIE9CSkVDVF9PRkZTRVRPRihOYXRp
dmVFeGVjdXRhYmxlLCBtX2Z1bmN0aW9uKSkpOworICAgIGNhbGwoQWRkcmVzcyhYODZSZWdpc3Rl
cnM6OmVieCwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pKTsKIAogICAgIC8vIEpTVmFsdWUg
aXMgYSBub24tUE9EIHR5cGUsIHNvIGVheCBwb2ludHMgdG8gaXQKICAgICBlbWl0TG9hZCgwLCBy
ZWdUMSwgcmVnVDAsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKQEAgLTMxOSw3ICszNzMsNyBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAgICAgZW1pdEdldEZyb21DYWxs
RnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZWUsIFg4NlJlZ2lzdGVyczo6ZWR4KTsg
Ly8gY2FsbGVlCiAgICAgbW92ZShjYWxsRnJhbWVSZWdpc3RlciwgWDg2UmVnaXN0ZXJzOjplY3gp
OyAvLyBjYWxsRnJhbWUKICAgICBsb2FkUHRyKEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplZHgsIE9C
SkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgWDg2UmVnaXN0ZXJzOjpl
YngpOwotICAgIGNhbGwoQWRkcmVzcyhYODZSZWdpc3RlcnM6OmVieCwgT0JKRUNUX09GRlNFVE9G
KE5hdGl2ZUV4ZWN1dGFibGUsIG1fZnVuY3Rpb24pKSk7CisgICAgY2FsbChBZGRyZXNzKFg4NlJl
Z2lzdGVyczo6ZWJ4LCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvbikpOwogI2VuZGlmCiAKICAg
ICAvLyBXZSd2ZSBwdXQgYSBmZXcgdGVtcG9yYXJpZXMgb24gdGhlIHN0YWNrIGluIGFkZGl0aW9u
IHRvIHRoZSBhY3R1YWwgYXJndW1lbnRzCkBAIC0zNzcsNyArNDMxLDcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wbwogICAgIG1vdmUoc3RhY2tQb2ludGVyUmVnaXN0
ZXIsIHJlZ1QwKTsKIAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9G
KEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJsZSkpLCByZWdUMyk7Ci0gICAgY2FsbChBZGRyZXNzKHJl
Z1QzLCBPQkpFQ1RfT0ZGU0VUT0YoTmF0aXZlRXhlY3V0YWJsZSwgbV9mdW5jdGlvbikpKTsKKyAg
ICBjYWxsKEFkZHJlc3MocmVnVDMsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSk7CiAKICAg
ICBsb2FkMzIoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgMCksIHJlZ1QwKTsKICAgICBs
b2FkMzIoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgNCksIHJlZ1QxKTsKQEAgLTQwNiw3
ICs0NjAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAgICAg
bW92ZShjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDEpOwogCiAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QyLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJlZ1QzKTsK
LSAgICBjYWxsKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihOYXRpdmVFeGVjdXRhYmxl
LCBtX2Z1bmN0aW9uKSkpOworICAgIGNhbGwoQWRkcmVzcyhyZWdUMywgZXhlY3V0YWJsZU9mZnNl
dFRvRnVuY3Rpb24pKTsKIAogICAgIC8vIExvYWQgcmV0dXJuIHZhbHVlCiAgICAgbG9hZDMyKEFk
ZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIDE2KSwgcmVnVDApOwpAQCAtNDQ5LDQ5ICs1MDMs
NyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAgICAgYnJlYWtw
b2ludCgpOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoSklUX09QVElNSVpFX1BST1BFUlRZX0FDQ0VT
UykKLSAgICBDYWxsIHN0cmluZ19mYWlsdXJlQ2FzZXMxQ2FsbCA9IG1ha2VUYWlsUmVjdXJzaXZl
Q2FsbChzdHJpbmdfZmFpbHVyZUNhc2VzMSk7Ci0gICAgQ2FsbCBzdHJpbmdfZmFpbHVyZUNhc2Vz
MkNhbGwgPSBtYWtlVGFpbFJlY3Vyc2l2ZUNhbGwoc3RyaW5nX2ZhaWx1cmVDYXNlczIpOwotICAg
IENhbGwgc3RyaW5nX2ZhaWx1cmVDYXNlczNDYWxsID0gbWFrZVRhaWxSZWN1cnNpdmVDYWxsKHN0
cmluZ19mYWlsdXJlQ2FzZXMzKTsKLSNlbmRpZgotCi0gICAgLy8gQWxsIHRyYW1wb2xpbmVzIGNv
bnN0cnVjdGVkISBjb3B5IHRoZSBjb2RlLCBsaW5rIHVwIGNhbGxzLCBhbmQgc2V0IHRoZSBwb2lu
dGVycyBvbiB0aGUgTWFjaGluZSBvYmplY3QuCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcih0
aGlzLCBtX2dsb2JhbERhdGEtPmV4ZWN1dGFibGVBbGxvY2F0b3IucG9vbEZvclNpemUobV9hc3Nl
bWJsZXIuc2l6ZSgpKSk7Ci0KLSNpZiBFTkFCTEUoSklUX09QVElNSVpFX1BST1BFUlRZX0FDQ0VT
UykKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN0cmluZ19mYWlsdXJlQ2FzZXMxQ2FsbCwgRnVuY3Rp
b25QdHIoY3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCkpOwotICAgIHBhdGNoQnVmZmVyLmxp
bmsoc3RyaW5nX2ZhaWx1cmVDYXNlczJDYWxsLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lk
X3N0cmluZ19mYWlsKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzdHJpbmdfZmFpbHVyZUNhc2Vz
M0NhbGwsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKLSNlbmRp
ZgotI2lmIEVOQUJMRShKSVRfT1BUSU1JWkVfQ0FMTCkKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGNh
bGxBcml0eUNoZWNrMSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfYXJpdHlDaGVjaykpOwotICAg
IHBhdGNoQnVmZmVyLmxpbmsoY2FsbEpTRnVuY3Rpb24xLCBGdW5jdGlvblB0cihjdGlfb3BfY2Fs
bF9qaXRDb21waWxlKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhjYWxsTGF6eUxpbmtDYWxsMSwg
RnVuY3Rpb25QdHIoY3RpX3ZtX2xhenlMaW5rQ2FsbCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmso
Y2FsbEFyaXR5Q2hlY2syLCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X2FyaXR5Q2hlY2sp
KTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxKU0Z1bmN0aW9uMiwgRnVuY3Rpb25QdHIoY3Rp
X29wX2NvbnN0cnVjdF9qaXRDb21waWxlKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhjYWxsTGF6
eUxpbmtDYWxsMiwgRnVuY3Rpb25QdHIoY3RpX3ZtX2xhenlMaW5rQ29uc3RydWN0KSk7Ci0jZW5k
aWYKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxBcml0eUNoZWNrMywgRnVuY3Rpb25QdHIoY3Rp
X29wX2NhbGxfYXJpdHlDaGVjaykpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbEpTRnVuY3Rp
b24zLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9qaXRDb21waWxlKSk7Ci0gICAgcGF0Y2hCdWZm
ZXIubGluayhjYWxsQXJpdHlDaGVjazQsIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3RfYXJp
dHlDaGVjaykpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbEpTRnVuY3Rpb240LCBGdW5jdGlv
blB0cihjdGlfb3BfY29uc3RydWN0X2ppdENvbXBpbGUpKTsKLQotICAgIENvZGVSZWYgZmluYWxD
b2RlID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7Ci0gICAgKmV4ZWN1dGFibGVQb29sID0g
ZmluYWxDb2RlLm1fZXhlY3V0YWJsZVBvb2w7Ci0KLSAgICB0cmFtcG9saW5lcy0+Y3RpVmlydHVh
bENhbGwgPSB0cmFtcG9saW5lQXQoZmluYWxDb2RlLCB2aXJ0dWFsQ2FsbEJlZ2luKTsKLSAgICB0
cmFtcG9saW5lcy0+Y3RpVmlydHVhbENvbnN0cnVjdCA9IHRyYW1wb2xpbmVBdChmaW5hbENvZGUs
IHZpcnR1YWxDb25zdHJ1Y3RCZWdpbik7Ci0gICAgdHJhbXBvbGluZXMtPmN0aU5hdGl2ZUNhbGwg
PSB0cmFtcG9saW5lQXQoZmluYWxDb2RlLCBuYXRpdmVDYWxsVGh1bmspOwotI2lmIEVOQUJMRShK
SVRfT1BUSU1JWkVfUFJPUEVSVFlfQUNDRVNTKQotICAgIHRyYW1wb2xpbmVzLT5jdGlTdHJpbmdM
ZW5ndGhUcmFtcG9saW5lID0gdHJhbXBvbGluZUF0KGZpbmFsQ29kZSwgc3RyaW5nTGVuZ3RoQmVn
aW4pOwotI2VuZGlmCi0jaWYgRU5BQkxFKEpJVF9PUFRJTUlaRV9DQUxMKQotICAgIHRyYW1wb2xp
bmVzLT5jdGlWaXJ0dWFsQ2FsbExpbmsgPSB0cmFtcG9saW5lQXQoZmluYWxDb2RlLCB2aXJ0dWFs
Q2FsbExpbmtCZWdpbik7Ci0gICAgdHJhbXBvbGluZXMtPmN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5r
ID0gdHJhbXBvbGluZUF0KGZpbmFsQ29kZSwgdmlydHVhbENvbnN0cnVjdExpbmtCZWdpbik7Ci0j
ZW5kaWYKLSNpZiBFTkFCTEUoSklUX09QVElNSVpFX01PRCkKLSAgICB0cmFtcG9saW5lcy0+Y3Rp
U29mdE1vZHVsbyA9IHRyYW1wb2xpbmVBdChmaW5hbENvZGUsIHNvZnRNb2RCZWdpbik7Ci0jZW5k
aWYKKyAgICByZXR1cm4gbmF0aXZlQ2FsbFRodW5rOwogfQogCiBKSVQ6OkNvZGVQdHIgSklUOjpw
cml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoUGFzc1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4gZXhl
Y3V0YWJsZVBvb2wsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVu
YykKQEAgLTE4MTQsNiArMTgyNiwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbml0X2FyZ3VtZW50
cyhJbnN0cnVjCiAgICAgZW1pdFN0b3JlKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihkc3Qp
LCBKU1ZhbHVlKCkpOwogfQogCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfY2FsbGVlKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVn
aXN0ZXJGaWxlOjpDYWxsZWUsIHJlZ1QwKTsKKyAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDAp
OworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQoreworICAgIHVuc2lnbmVkIHByb3RvUmVnaXN0ZXIgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGVtaXRMb2FkKHByb3RvUmVnaXN0ZXIsIHJlZ1Qx
LCByZWdUMCk7CisgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2NyZWF0ZV90
aGlzKTsKKyAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMSwgcmVnVDApOworICAgIHN0dWJD
YWxsLmNhbGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Cit9CisKIHZvaWQgSklU
OjplbWl0X29wX2NvbnZlcnRfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIHVuc2lnbmVkIHRoaXNSZWdpc3RlciA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiA1OTk4MCkK
KysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjEzLDcgKzIxMyw1OCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBv
CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVj
dXRhYmxlLCBtX2ppdENvZGVGb3JDb25zdHJ1Y3QpKSwgcmVnVDApOwogICAgIGp1bXAocmVnVDAp
OwogCi0gICAgLy8gTmF0aXZDYWxsIFRyYW1wb2xpbmUKKyAgICAvLyBOYXRpdmVDYWxsIFRyYW1w
b2xpbmUKKyAgICBMYWJlbCBuYXRpdmVDYWxsVGh1bmsgPSBwcml2YXRlQ29tcGlsZUNUSU5hdGl2
ZUNhbGwoZ2xvYmFsRGF0YSk7ICAgIAorICAgIExhYmVsIG5hdGl2ZUNvbnN0cnVjdFRodW5rID0g
cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKGdsb2JhbERhdGEsIHRydWUpOyAgICAKKworI2lm
IEVOQUJMRShKSVRfT1BUSU1JWkVfUFJPUEVSVFlfQUNDRVNTKQorICAgIENhbGwgc3RyaW5nX2Zh
aWx1cmVDYXNlczFDYWxsID0gbWFrZVRhaWxSZWN1cnNpdmVDYWxsKHN0cmluZ19mYWlsdXJlQ2Fz
ZXMxKTsKKyAgICBDYWxsIHN0cmluZ19mYWlsdXJlQ2FzZXMyQ2FsbCA9IG1ha2VUYWlsUmVjdXJz
aXZlQ2FsbChzdHJpbmdfZmFpbHVyZUNhc2VzMik7CisgICAgQ2FsbCBzdHJpbmdfZmFpbHVyZUNh
c2VzM0NhbGwgPSBtYWtlVGFpbFJlY3Vyc2l2ZUNhbGwoc3RyaW5nX2ZhaWx1cmVDYXNlczMpOwor
I2VuZGlmCisKKyAgICAvLyBBbGwgdHJhbXBvbGluZXMgY29uc3RydWN0ZWQhIGNvcHkgdGhlIGNv
ZGUsIGxpbmsgdXAgY2FsbHMsIGFuZCBzZXQgdGhlIHBvaW50ZXJzIG9uIHRoZSBNYWNoaW5lIG9i
amVjdC4KKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKHRoaXMsIG1fZ2xvYmFsRGF0YS0+ZXhl
Y3V0YWJsZUFsbG9jYXRvci5wb29sRm9yU2l6ZShtX2Fzc2VtYmxlci5zaXplKCkpKTsKKworI2lm
IEVOQUJMRShKSVRfT1BUSU1JWkVfUFJPUEVSVFlfQUNDRVNTKQorICAgIHBhdGNoQnVmZmVyLmxp
bmsoc3RyaW5nX2ZhaWx1cmVDYXNlczFDYWxsLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lk
X3N0cmluZ19mYWlsKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzdHJpbmdfZmFpbHVyZUNhc2Vz
MkNhbGwsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKKyAgICBw
YXRjaEJ1ZmZlci5saW5rKHN0cmluZ19mYWlsdXJlQ2FzZXMzQ2FsbCwgRnVuY3Rpb25QdHIoY3Rp
X29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCkpOworI2VuZGlmCisjaWYgRU5BQkxFKEpJVF9PUFRJ
TUlaRV9DQUxMKQorICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbEFyaXR5Q2hlY2sxLCBGdW5jdGlv
blB0cihjdGlfb3BfY2FsbF9hcml0eUNoZWNrKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhjYWxs
SlNGdW5jdGlvbjEsIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxsX2ppdENvbXBpbGUpKTsKKyAgICBw
YXRjaEJ1ZmZlci5saW5rKGNhbGxMYXp5TGlua0NhbGwxLCBGdW5jdGlvblB0cihjdGlfdm1fbGF6
eUxpbmtDYWxsKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsQXJpdHlDaGVjazIsIEZ1bmN0
aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3RfYXJpdHlDaGVjaykpOworICAgIHBhdGNoQnVmZmVyLmxp
bmsoY2FsbEpTRnVuY3Rpb24yLCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X2ppdENvbXBp
bGUpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxMYXp5TGlua0NhbGwyLCBGdW5jdGlvblB0
cihjdGlfdm1fbGF6eUxpbmtDb25zdHJ1Y3QpKTsKKyNlbmRpZgorICAgIHBhdGNoQnVmZmVyLmxp
bmsoY2FsbEFyaXR5Q2hlY2szLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9hcml0eUNoZWNrKSk7
CisgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsSlNGdW5jdGlvbjMsIEZ1bmN0aW9uUHRyKGN0aV9v
cF9jYWxsX2ppdENvbXBpbGUpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxBcml0eUNoZWNr
NCwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9hcml0eUNoZWNrKSk7CisgICAgcGF0Y2hC
dWZmZXIubGluayhjYWxsSlNGdW5jdGlvbjQsIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3Rf
aml0Q29tcGlsZSkpOworCisgICAgQ29kZVJlZiBmaW5hbENvZGUgPSBwYXRjaEJ1ZmZlci5maW5h
bGl6ZUNvZGUoKTsKKyAgICAqZXhlY3V0YWJsZVBvb2wgPSBmaW5hbENvZGUubV9leGVjdXRhYmxl
UG9vbDsKKworICAgIHRyYW1wb2xpbmVzLT5jdGlWaXJ0dWFsQ2FsbExpbmsgPSB0cmFtcG9saW5l
QXQoZmluYWxDb2RlLCB2aXJ0dWFsQ2FsbExpbmtCZWdpbik7CisgICAgdHJhbXBvbGluZXMtPmN0
aVZpcnR1YWxDb25zdHJ1Y3RMaW5rID0gdHJhbXBvbGluZUF0KGZpbmFsQ29kZSwgdmlydHVhbENv
bnN0cnVjdExpbmtCZWdpbik7CisgICAgdHJhbXBvbGluZXMtPmN0aVZpcnR1YWxDYWxsID0gdHJh
bXBvbGluZUF0KGZpbmFsQ29kZSwgdmlydHVhbENhbGxCZWdpbik7CisgICAgdHJhbXBvbGluZXMt
PmN0aVZpcnR1YWxDb25zdHJ1Y3QgPSB0cmFtcG9saW5lQXQoZmluYWxDb2RlLCB2aXJ0dWFsQ29u
c3RydWN0QmVnaW4pOworICAgIHRyYW1wb2xpbmVzLT5jdGlOYXRpdmVDYWxsID0gdHJhbXBvbGlu
ZUF0KGZpbmFsQ29kZSwgbmF0aXZlQ2FsbFRodW5rKTsKKyAgICB0cmFtcG9saW5lcy0+Y3RpTmF0
aXZlQ29uc3RydWN0ID0gdHJhbXBvbGluZUF0KGZpbmFsQ29kZSwgbmF0aXZlQ29uc3RydWN0VGh1
bmspOworI2lmIEVOQUJMRShKSVRfT1BUSU1JWkVfTU9EKQorICAgIHRyYW1wb2xpbmVzLT5jdGlT
b2Z0TW9kdWxvID0gdHJhbXBvbGluZUF0KGZpbmFsQ29kZSwgc29mdE1vZEJlZ2luKTsKKyNlbmRp
ZgorI2lmIEVOQUJMRShKSVRfT1BUSU1JWkVfUFJPUEVSVFlfQUNDRVNTKQorICAgIHRyYW1wb2xp
bmVzLT5jdGlTdHJpbmdMZW5ndGhUcmFtcG9saW5lID0gdHJhbXBvbGluZUF0KGZpbmFsQ29kZSwg
c3RyaW5nTGVuZ3RoQmVnaW4pOworI2VuZGlmCit9CisKK0pJVDo6TGFiZWwgSklUOjpwcml2YXRl
Q29tcGlsZUNUSU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBib29sIGlzQ29u
c3RydWN0KQoreworICAgIGludCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvbiA9IGlzQ29uc3Ry
dWN0ID8gT0JKRUNUX09GRlNFVE9GKE5hdGl2ZUV4ZWN1dGFibGUsIG1fY29uc3RydWN0b3IpIDog
T0JKRUNUX09GRlNFVE9GKE5hdGl2ZUV4ZWN1dGFibGUsIG1fZnVuY3Rpb24pOworCiAgICAgTGFi
ZWwgbmF0aXZlQ2FsbFRodW5rID0gYWxpZ24oKTsKICAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NB
ZnRlckNhbGwocmVnVDApOwogICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZWdUMCwgUmVn
aXN0ZXJGaWxlOjpSZXR1cm5QQyk7IC8vIFB1c2ggcmV0dXJuIGFkZHJlc3MKQEAgLTI1OSw3ICsz
MTAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAgICAgbW92
ZShjYWxsRnJhbWVSZWdpc3RlciwgWDg2UmVnaXN0ZXJzOjplZGkpOyAKIAogICAgIGxvYWRQdHIo
QWRkcmVzcyhYODZSZWdpc3RlcnM6OmVzaSwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1f
ZXhlY3V0YWJsZSkpLCBYODZSZWdpc3RlcnM6OnI5KTsKLSAgICBjYWxsKEFkZHJlc3MoWDg2UmVn
aXN0ZXJzOjpyOSwgT0JKRUNUX09GRlNFVE9GKE5hdGl2ZUV4ZWN1dGFibGUsIG1fZnVuY3Rpb24p
KSk7CisgICAgY2FsbChBZGRyZXNzKFg4NlJlZ2lzdGVyczo6cjksIGV4ZWN1dGFibGVPZmZzZXRU
b0Z1bmN0aW9uKSk7CiAgICAgCiAgICAgYWRkUHRyKEltbTMyKHNpemVvZihBcmdMaXN0KSksIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKICNlbGlmIENQVShYODYpCkBAIC0zMzgsNyArMzg5LDcgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wbwogICAgIG1vdmUoY2FsbEZy
YW1lUmVnaXN0ZXIsIFg4NlJlZ2lzdGVyczo6ZWR4KTsKIAogICAgIGxvYWRQdHIoQWRkcmVzcyhY
ODZSZWdpc3RlcnM6OmVheCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJs
ZSkpLCBYODZSZWdpc3RlcnM6OmVieCk7Ci0gICAgY2FsbChBZGRyZXNzKFg4NlJlZ2lzdGVyczo6
ZWJ4LCBPQkpFQ1RfT0ZGU0VUT0YoTmF0aXZlRXhlY3V0YWJsZSwgbV9mdW5jdGlvbikpKTsKKyAg
ICBjYWxsKEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplYngsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0
aW9uKSk7CiAKICAgICAvLyBKU1ZhbHVlIGlzIGEgbm9uLVBPRCB0eXBlCiAgICAgbG9hZFB0cihB
ZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWF4KSwgWDg2UmVnaXN0ZXJzOjplYXgpOwpAQCAtMzQ5LDcg
KzQwMCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KICAgICAv
LyBQbGFudCBjYWxsZnJhbWUKICAgICBtb3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCBYODZSZWdpc3Rl
cnM6OmVjeCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWR4LCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIFg4NlJlZ2lzdGVyczo6ZWJ4KTsK
LSAgICBjYWxsKEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplYngsIE9CSkVDVF9PRkZTRVRPRihOYXRp
dmVFeGVjdXRhYmxlLCBtX2Z1bmN0aW9uKSkpOworICAgIGNhbGwoQWRkcmVzcyhYODZSZWdpc3Rl
cnM6OmVieCwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pKTsKICNlbmRpZgogCiAgICAgLy8g
V2UndmUgcHV0IGEgZmV3IHRlbXBvcmFyaWVzIG9uIHRoZSBzdGFjayBpbiBhZGRpdGlvbiB0byB0
aGUgYWN0dWFsIGFyZ3VtZW50cwpAQCAtMzk4LDcgKzQ0OSw3IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KICAgICBzdG9yZVB0cihyZWdUMCwgQWRkcmVzcyhzdGFj
a1BvaW50ZXJSZWdpc3RlcikpOwogCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJlZ1QzKTsKLSAgICBjYWxsKEFk
ZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihOYXRpdmVFeGVjdXRhYmxlLCBtX2Z1bmN0aW9u
KSkpOworICAgIGNhbGwoQWRkcmVzcyhyZWdUMywgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24p
KTsKIAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCksIHJlZ1QwKTsKIApAQCAtNDE3LDcgKzQ2
OCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KICAgICBtb3Zl
KHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBBUk1SZWdpc3RlcnM6OnIzKTsKIAogICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJsZSkp
LCByZWdUMyk7Ci0gICAgY2FsbChBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoTmF0aXZl
RXhlY3V0YWJsZSwgbV9mdW5jdGlvbikpKTsKKyAgICBjYWxsKEFkZHJlc3MocmVnVDMsIGV4ZWN1
dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSk7CiAKICAgICBhZGRQdHIoSW1tMzIoc2l6ZW9mKEFyZ0xp
c3QpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogI2VuZGlmIC8vIE9TKFdJTkNFKQpAQCAtNDY1
LDcgKzUxNiw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KIAog
ICAgIC8vIENhbGwKICAgICBsb2FkUHRyKEFkZHJlc3MoTUlQU1JlZ2lzdGVyczo6YTIsIE9CSkVD
VF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgcmVnVDIpOwotICAgIGNhbGwo
QWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKE5hdGl2ZUV4ZWN1dGFibGUsIG1fZnVuY3Rp
b24pKSk7CisgICAgY2FsbChBZGRyZXNzKHJlZ1QyLCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlv
bikpOwogCiAgICAgLy8gR2V0IHJldHVybmVkIHZhbHVlIGZyb20gMCgkdjApIHdoaWNoIGlzIHRo
ZSBzYW1lIGFzIDIwKCRzcCkKICAgICBsb2FkUHRyKEFkZHJlc3MocmV0dXJuVmFsdWVSZWdpc3Rl
ciwgMCksIHJldHVyblZhbHVlUmVnaXN0ZXIpOwpAQCAtNTA0LDQ5ICs1NTUsOCBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAgICAgcG9rZShjYWxsRnJhbWVSZWdp
c3RlciwgT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8g
c2l6ZW9mICh2b2lkKikpOwogICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJl
Z1QyKTsKICAgICByZXQoKTsKLSAgICAKIAotI2lmIEVOQUJMRShKSVRfT1BUSU1JWkVfUFJPUEVS
VFlfQUNDRVNTKQotICAgIENhbGwgc3RyaW5nX2ZhaWx1cmVDYXNlczFDYWxsID0gbWFrZVRhaWxS
ZWN1cnNpdmVDYWxsKHN0cmluZ19mYWlsdXJlQ2FzZXMxKTsKLSAgICBDYWxsIHN0cmluZ19mYWls
dXJlQ2FzZXMyQ2FsbCA9IG1ha2VUYWlsUmVjdXJzaXZlQ2FsbChzdHJpbmdfZmFpbHVyZUNhc2Vz
Mik7Ci0gICAgQ2FsbCBzdHJpbmdfZmFpbHVyZUNhc2VzM0NhbGwgPSBtYWtlVGFpbFJlY3Vyc2l2
ZUNhbGwoc3RyaW5nX2ZhaWx1cmVDYXNlczMpOwotI2VuZGlmCi0KLSAgICAvLyBBbGwgdHJhbXBv
bGluZXMgY29uc3RydWN0ZWQhIGNvcHkgdGhlIGNvZGUsIGxpbmsgdXAgY2FsbHMsIGFuZCBzZXQg
dGhlIHBvaW50ZXJzIG9uIHRoZSBNYWNoaW5lIG9iamVjdC4KLSAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKHRoaXMsIG1fZ2xvYmFsRGF0YS0+ZXhlY3V0YWJsZUFsbG9jYXRvci5wb29sRm9yU2l6
ZShtX2Fzc2VtYmxlci5zaXplKCkpKTsKLQotI2lmIEVOQUJMRShKSVRfT1BUSU1JWkVfUFJPUEVS
VFlfQUNDRVNTKQotICAgIHBhdGNoQnVmZmVyLmxpbmsoc3RyaW5nX2ZhaWx1cmVDYXNlczFDYWxs
LCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7Ci0gICAgcGF0Y2hC
dWZmZXIubGluayhzdHJpbmdfZmFpbHVyZUNhc2VzMkNhbGwsIEZ1bmN0aW9uUHRyKGN0aV9vcF9n
ZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN0cmluZ19mYWls
dXJlQ2FzZXMzQ2FsbCwgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCkp
OwotI2VuZGlmCi0jaWYgRU5BQkxFKEpJVF9PUFRJTUlaRV9DQUxMKQotICAgIHBhdGNoQnVmZmVy
LmxpbmsoY2FsbEFyaXR5Q2hlY2sxLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9hcml0eUNoZWNr
KSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhjYWxsSlNGdW5jdGlvbjEsIEZ1bmN0aW9uUHRyKGN0
aV9vcF9jYWxsX2ppdENvbXBpbGUpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxMYXp5TGlu
a0NhbGwxLCBGdW5jdGlvblB0cihjdGlfdm1fbGF6eUxpbmtDYWxsKSk7Ci0gICAgcGF0Y2hCdWZm
ZXIubGluayhjYWxsQXJpdHlDaGVjazIsIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3RfYXJp
dHlDaGVjaykpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbEpTRnVuY3Rpb24yLCBGdW5jdGlv
blB0cihjdGlfb3BfY29uc3RydWN0X2ppdENvbXBpbGUpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5r
KGNhbGxMYXp5TGlua0NhbGwyLCBGdW5jdGlvblB0cihjdGlfdm1fbGF6eUxpbmtDb25zdHJ1Y3Qp
KTsKLSNlbmRpZgotICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbEFyaXR5Q2hlY2szLCBGdW5jdGlv
blB0cihjdGlfb3BfY2FsbF9hcml0eUNoZWNrKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhjYWxs
SlNGdW5jdGlvbjMsIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxsX2ppdENvbXBpbGUpKTsKLSAgICBw
YXRjaEJ1ZmZlci5saW5rKGNhbGxBcml0eUNoZWNrNCwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0
cnVjdF9hcml0eUNoZWNrKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhjYWxsSlNGdW5jdGlvbjQs
IEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3Rfaml0Q29tcGlsZSkpOwotCi0gICAgQ29kZVJl
ZiBmaW5hbENvZGUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKLSAgICAqZXhlY3V0YWJs
ZVBvb2wgPSBmaW5hbENvZGUubV9leGVjdXRhYmxlUG9vbDsKLQotICAgIHRyYW1wb2xpbmVzLT5j
dGlWaXJ0dWFsQ2FsbExpbmsgPSB0cmFtcG9saW5lQXQoZmluYWxDb2RlLCB2aXJ0dWFsQ2FsbExp
bmtCZWdpbik7Ci0gICAgdHJhbXBvbGluZXMtPmN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rID0gdHJh
bXBvbGluZUF0KGZpbmFsQ29kZSwgdmlydHVhbENvbnN0cnVjdExpbmtCZWdpbik7Ci0gICAgdHJh
bXBvbGluZXMtPmN0aVZpcnR1YWxDYWxsID0gdHJhbXBvbGluZUF0KGZpbmFsQ29kZSwgdmlydHVh
bENhbGxCZWdpbik7Ci0gICAgdHJhbXBvbGluZXMtPmN0aVZpcnR1YWxDb25zdHJ1Y3QgPSB0cmFt
cG9saW5lQXQoZmluYWxDb2RlLCB2aXJ0dWFsQ29uc3RydWN0QmVnaW4pOwotICAgIHRyYW1wb2xp
bmVzLT5jdGlOYXRpdmVDYWxsID0gdHJhbXBvbGluZUF0KGZpbmFsQ29kZSwgbmF0aXZlQ2FsbFRo
dW5rKTsKLSNpZiBFTkFCTEUoSklUX09QVElNSVpFX01PRCkKLSAgICB0cmFtcG9saW5lcy0+Y3Rp
U29mdE1vZHVsbyA9IHRyYW1wb2xpbmVBdChmaW5hbENvZGUsIHNvZnRNb2RCZWdpbik7Ci0jZW5k
aWYKLSNpZiBFTkFCTEUoSklUX09QVElNSVpFX1BST1BFUlRZX0FDQ0VTUykKLSAgICB0cmFtcG9s
aW5lcy0+Y3RpU3RyaW5nTGVuZ3RoVHJhbXBvbGluZSA9IHRyYW1wb2xpbmVBdChmaW5hbENvZGUs
IHN0cmluZ0xlbmd0aEJlZ2luKTsKLSNlbmRpZgorICAgIHJldHVybiBuYXRpdmVDYWxsVGh1bms7
CiB9CiAKIEpJVDo6Q29kZVB0ciBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChQYXNz
UmVmUHRyPEV4ZWN1dGFibGVQb29sPiwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVG
dW5jdGlvbikKQEAgLTE0MzAsNyArMTQ0MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxs
KEluc3RydWN0aW9uKiAKIAogICAgIGVtaXRUYWdBc0Jvb2xJbW1lZGlhdGUocmVnVDApOwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9l
bnRlcihJbnN0cnVjdGlvbiopCkBAIC0xNDg1LDcgKzE0OTQsMjAgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfY29udmVydF90aGlzKEluc3RydWN0aQogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlND
ZWxsLCBtX3N0cnVjdHVyZSkpLCByZWdUMSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgo
Tm9uWmVybywgQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV90eXBl
SW5mby5tX2ZsYWdzKSksIEltbTMyKE5lZWRzVGhpc0NvbnZlcnNpb24pKSk7Cit9CiAKK3ZvaWQg
SklUOjplbWl0X29wX2dldF9jYWxsZWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICB1bnNpZ25lZCByZXN1bHQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
OworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6Q2FsbGVl
LCByZWdUMCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQpOworfQorCit2b2lk
IEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQoreworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9jcmVhdGVfdGhpcyk7
CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZCwgcmVnVDEpOworICAgIHN0dWJDYWxsLmNhbGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfd2lsbF9jYWxsKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJl
dmlzaW9uIDU5OTgwKQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTIwMiw2ICsxMjAyLDI4IEBAIFJWQ1QoKQogI2RlZmluZSBERUZJTkVfU1RV
Ql9GVU5DVElPTihydHlwZSwgb3ApIHJ0eXBlIEpJVF9TVFVCIGN0aV8jI29wKFNUVUJfQVJHU19E
RUNMQVJBVElPTikKICNlbmRpZgogCitERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1
ZSwgb3BfY3JlYXRlX3RoaXMpCit7CisgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJh
bWUpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CisK
KyAgICBKU0Z1bmN0aW9uKiBjb25zdHJ1Y3RvciA9IGFzRnVuY3Rpb24oY2FsbEZyYW1lLT5jYWxs
ZWUoKSk7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0
RGF0YTsKKyAgICBBU1NFUlQoY29uc3RydWN0b3ItPmdldENvbnN0cnVjdERhdGEoY29uc3RydWN0
RGF0YSkgPT0gQ29uc3RydWN0VHlwZUpTKTsKKyNlbmRpZgorCisgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmU7CisgICAgSlNWYWx1ZSBwcm90byA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7
CisgICAgaWYgKHByb3RvLmlzT2JqZWN0KCkpCisgICAgICAgIHN0cnVjdHVyZSA9IGFzT2JqZWN0
KHByb3RvKS0+aW5oZXJpdG9ySUQoKTsKKyAgICBlbHNlCisgICAgICAgIHN0cnVjdHVyZSA9IGNv
bnN0cnVjdG9yLT5zY29wZSgpLm5vZGUoKS0+Z2xvYmFsT2JqZWN0LT5lbXB0eU9iamVjdFN0cnVj
dHVyZSgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gbmV3ICgmY2FsbEZyYW1lLT5nbG9iYWxEYXRh
KCkpIEpTT2JqZWN0KHN0cnVjdHVyZSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7Cit9CisKIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9jb252
ZXJ0X3RoaXMpCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwpAQCAt
MjEwMiwzMiArMjEyNCw2IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBv
cF8KICAgICBWTV9USFJPV19FWENFUFRJT04oKTsKIH0KIAotREVGSU5FX1NUVUJfRlVOQ1RJT04o
SlNPYmplY3QqLCBvcF9jb25zdHJ1Y3RfSlNDb25zdHJ1Y3QpCi17Ci0gICAgU1RVQl9JTklUX1NU
QUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0gICAgSlNGdW5jdGlvbiogY29uc3RydWN0b3IgPSBh
c0Z1bmN0aW9uKHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCkpOwotICAgIGlmIChjb25zdHJ1
Y3Rvci0+aXNIb3N0RnVuY3Rpb24oKSkgewotICAgICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgICAgIHVuc2lnbmVkIHZQQ0luZGV4ID0gY29kZUJs
b2NrLT5ieXRlY29kZU9mZnNldChjYWxsRnJhbWUsIFNUVUJfUkVUVVJOX0FERFJFU1MpOwotICAg
ICAgICBzdGFja0ZyYW1lLmdsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZU5vdEFDb25zdHJ1
Y3RvckVycm9yKGNhbGxGcmFtZSwgY29uc3RydWN0b3IsIHZQQ0luZGV4LCBjb2RlQmxvY2spOwot
ICAgICAgICBWTV9USFJPV19FWENFUFRJT04oKTsKLSAgICB9Ci0KLSNpZiAhQVNTRVJUX0RJU0FC
TEVECi0gICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOwotICAgIEFTU0VSVChjb25zdHJ1
Y3Rvci0+Z2V0Q29uc3RydWN0RGF0YShjb25zdHJ1Y3REYXRhKSA9PSBDb25zdHJ1Y3RUeXBlSlMp
OwotI2VuZGlmCi0KLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKLSAgICBpZiAoc3RhY2tGcmFt
ZS5hcmdzWzNdLmpzVmFsdWUoKS5pc09iamVjdCgpKQotICAgICAgICBzdHJ1Y3R1cmUgPSBhc09i
amVjdChzdGFja0ZyYW1lLmFyZ3NbM10uanNWYWx1ZSgpKS0+aW5oZXJpdG9ySUQoKTsKLSAgICBl
bHNlCi0gICAgICAgIHN0cnVjdHVyZSA9IGNvbnN0cnVjdG9yLT5zY29wZSgpLm5vZGUoKS0+Z2xv
YmFsT2JqZWN0LT5lbXB0eU9iamVjdFN0cnVjdHVyZSgpOwotICAgIHJldHVybiBuZXcgKHN0YWNr
RnJhbWUuZ2xvYmFsRGF0YSkgSlNPYmplY3Qoc3RydWN0dXJlKTsKLX0KLQogREVGSU5FX1NUVUJf
RlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2NvbnN0cnVjdF9Ob3RKU0NvbnN0cnVjdCkKIHsK
ICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CkBAIC0yMTM2LDEzICsyMTMy
LDE0IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KIAogICAgIEpT
VmFsdWUgY29uc3RyVmFsID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKICAgICBpbnQg
YXJnQ291bnQgPSBzdGFja0ZyYW1lLmFyZ3NbMl0uaW50MzIoKTsKLSAgICBpbnQgdGhpc1JlZ2lz
dGVyID0gc3RhY2tGcmFtZS5hcmdzWzRdLmludDMyKCk7CiAKICAgICBDb25zdHJ1Y3REYXRhIGNv
bnN0cnVjdERhdGE7CiAgICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gY29uc3RyVmFs
LmdldENvbnN0cnVjdERhdGEoY29uc3RydWN0RGF0YSk7CiAKICAgICBpZiAoY29uc3RydWN0VHlw
ZSA9PSBDb25zdHJ1Y3RUeXBlSG9zdCkgewotICAgICAgICBBcmdMaXN0IGFyZ0xpc3QoY2FsbEZy
YW1lLT5yZWdpc3RlcnMoKSArIHRoaXNSZWdpc3RlciArIDEsIGFyZ0NvdW50IC0gMSk7CisgICAg
ICAgIGludCByZWdpc3Rlck9mZnNldCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5pbnQzMigpOworICAg
ICAgICBSZWdpc3RlciogdGhpc1JlZ2lzdGVyID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIHJl
Z2lzdGVyT2Zmc2V0IC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gYXJnQ291
bnQ7CisgICAgICAgIEFyZ0xpc3QgYXJnTGlzdCh0aGlzUmVnaXN0ZXIgKyAxLCBhcmdDb3VudCAt
IDEpOwogCiAgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWU7CiAgICAgICAgIHsKQEAgLTM0MjYs
NyArMzQyMyw3IEBAIFBhc3NSZWZQdHI8TmF0aXZlRXhlY3V0YWJsZT4gSklUVGh1bmtzOjoKIHsK
ICAgICBzdGQ6OnBhaXI8SG9zdEZ1bmN0aW9uU3R1Yk1hcDo6aXRlcmF0b3IsIGJvb2w+IGVudHJ5
ID0gbV9ob3N0RnVuY3Rpb25TdHViTWFwLmFkZChmdW5jdGlvbiwgMCk7CiAgICAgaWYgKGVudHJ5
LnNlY29uZCkKLSAgICAgICAgZW50cnkuZmlyc3QtPnNlY29uZCA9IE5hdGl2ZUV4ZWN1dGFibGU6
OmNyZWF0ZShKSVQ6OmNvbXBpbGVDVElOYXRpdmVDYWxsKGdsb2JhbERhdGEsIG1fZXhlY3V0YWJs
ZVBvb2wsIGZ1bmN0aW9uKSwgZnVuY3Rpb24pOworICAgICAgICBlbnRyeS5maXJzdC0+c2Vjb25k
ID0gTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKEpJVDo6Y29tcGlsZUNUSU5hdGl2ZUNhbGwoZ2xv
YmFsRGF0YSwgbV9leGVjdXRhYmxlUG9vbCwgZnVuY3Rpb24pLCBmdW5jdGlvbiwgY3RpTmF0aXZl
Q29uc3RydWN0KCksIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKTsKICAgICByZXR1cm4g
ZW50cnkuZmlyc3QtPnNlY29uZDsKIH0KIApAQCAtMzQzNCw3ICszNDMxLDcgQEAgUGFzc1JlZlB0
cjxOYXRpdmVFeGVjdXRhYmxlPiBKSVRUaHVua3M6OgogewogICAgIHN0ZDo6cGFpcjxIb3N0RnVu
Y3Rpb25TdHViTWFwOjppdGVyYXRvciwgYm9vbD4gZW50cnkgPSBtX2hvc3RGdW5jdGlvblN0dWJN
YXAuYWRkKGZ1bmN0aW9uLCAwKTsKICAgICBpZiAoZW50cnkuc2Vjb25kKQotICAgICAgICBlbnRy
eS5maXJzdC0+c2Vjb25kID0gTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKGdlbmVyYXRvcihnbG9i
YWxEYXRhLCBtX2V4ZWN1dGFibGVQb29sLmdldCgpKSwgZnVuY3Rpb24pOworICAgICAgICBlbnRy
eS5maXJzdC0+c2Vjb25kID0gTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKGdlbmVyYXRvcihnbG9i
YWxEYXRhLCBtX2V4ZWN1dGFibGVQb29sLmdldCgpKSwgZnVuY3Rpb24sIGN0aU5hdGl2ZUNvbnN0
cnVjdCgpLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3Rvcik7CiAgICAgcmV0dXJuIGVudHJ5
LmZpcnN0LT5zZWNvbmQ7CiB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCShyZXZpc2lvbiA1
OTk4MCkKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBA
IC04Miw2ICs4Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgY3RpVmlydHVhbENhbGw7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlW
aXJ0dWFsQ29uc3RydWN0OwogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpTmF0aXZl
Q2FsbDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aU5hdGl2ZUNvbnN0cnVjdDsK
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aVNvZnRNb2R1bG87CiAgICAgfTsKIApA
QCAtMjgwLDYgKzI4MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgY3RpVmlydHVhbENhbGwoKSB7IHJldHVybiBtX3RyYW1wb2xpbmVTdHJ1Y3R1cmUu
Y3RpVmlydHVhbENhbGw7IH0KICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aVZpcnR1
YWxDb25zdHJ1Y3QoKSB7IHJldHVybiBtX3RyYW1wb2xpbmVTdHJ1Y3R1cmUuY3RpVmlydHVhbENv
bnN0cnVjdDsgfQogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpTmF0aXZlQ2FsbCgp
IHsgcmV0dXJuIG1fdHJhbXBvbGluZVN0cnVjdHVyZS5jdGlOYXRpdmVDYWxsOyB9CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlOYXRpdmVDb25zdHJ1Y3QoKSB7IHJldHVybiBtX3Ry
YW1wb2xpbmVTdHJ1Y3R1cmUuY3RpTmF0aXZlQ29uc3RydWN0OyB9CiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBjdGlTb2Z0TW9kdWxvKCkgeyByZXR1cm4gbV90cmFtcG9saW5lU3RydWN0
dXJlLmN0aVNvZnRNb2R1bG87IH0KIAogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3Rp
U3R1YihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcik7
CkBAIC0zMDUsNiArMzA3LDcgQEAgZXh0ZXJuICJDIiB7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklU
X1NUVUIgY3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbihTVFVCX0FSR1NfREVDTEFSQVRJT04pOwog
ICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9jYWxsX2V2YWwoU1RVQl9BUkdTX0RF
Q0xBUkFUSU9OKTsKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfY29uc3RydWN0
X05vdEpTQ29uc3RydWN0KFNUVUJfQVJHU19ERUNMQVJBVElPTik7CisgICAgRW5jb2RlZEpTVmFs
dWUgSklUX1NUVUIgY3RpX29wX2NyZWF0ZV90aGlzKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAg
ICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2NvbnZlcnRfdGhpcyhTVFVCX0FSR1Nf
REVDTEFSQVRJT04pOwogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9jcmVhdGVf
YXJndW1lbnRzKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklU
X1NUVUIgY3RpX29wX2NyZWF0ZV9hcmd1bWVudHNfbm9fcGFyYW1zKFNUVUJfQVJHU19ERUNMQVJB
VElPTik7CkBAIC0zNjIsNyArMzY1LDYgQEAgZXh0ZXJuICJDIiB7CiAgICAgRW5jb2RlZEpTVmFs
dWUgSklUX1NUVUIgY3RpX29wX3Vyc2hpZnQoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBF
bmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfdG9fb2JqZWN0KFNUVUJfQVJHU19ERUNMQVJBVElP
Tik7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX3ZtX3Rocm93KFNUVUJfQVJHU19E
RUNMQVJBVElPTik7Ci0gICAgSlNPYmplY3QqIEpJVF9TVFVCIGN0aV9vcF9jb25zdHJ1Y3RfSlND
b25zdHJ1Y3QoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBKU09iamVjdCogSklUX1NUVUIg
Y3RpX29wX25ld19hcnJheShTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIEpTT2JqZWN0KiBK
SVRfU1RVQiBjdGlfb3BfbmV3X2Vycm9yKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgSlNP
YmplY3QqIEpJVF9TVFVCIGN0aV9vcF9uZXdfZnVuYyhTVFVCX0FSR1NfREVDTEFSQVRJT04pOwpJ
bmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCShyZXZp
c2lvbiA1OTk4MCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MiwxMyArMTgyLDEzIEBAIEpTTm90QW5PYmplY3RFcnJv
clN0dWIqIGNyZWF0ZU5vdEFuT2JqZWMKIAogSlNPYmplY3QqIGNyZWF0ZU5vdEFuT2JqZWN0RXJy
b3IoRXhlY1N0YXRlKiBleGVjLCBKU05vdEFuT2JqZWN0RXJyb3JTdHViKiBlcnJvciwgdW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQsIENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIC8vIEJvdGgg
b3BfY29uc3RydWN0IGFuZCBvcF9pbnN0YW5jZW9mIHJlcXVpcmUgYSB1c2Ugb2Ygb3BfZ2V0X2J5
X2lkIHRvIGdldAorICAgIC8vIEJvdGggb3BfY3JlYXRlX3RoaXMgYW5kIG9wX2luc3RhbmNlb2Yg
cmVxdWlyZSBhIHVzZSBvZiBvcF9nZXRfYnlfaWQgdG8gZ2V0CiAgICAgLy8gdGhlIHByb3RvdHlw
ZSBwcm9wZXJ0eSBmcm9tIGFuIG9iamVjdC4gVGhlIGV4Y2VwdGlvbiBtZXNzYWdlcyBmb3IgZXhj
ZXB0aW9ucwogICAgIC8vIHRocm93biBieSB0aGVzZSBpbnN0YW5jZXMgb3BfZ2V0X2J5X2lkIG5l
ZWQgdG8gcmVmbGVjdCB0aGlzLgogICAgIE9wY29kZUlEIGZvbGxvd2luZ09wY29kZUlEOwogICAg
IGlmIChjb2RlQmxvY2stPmdldEJ5SWRFeGNlcHRpb25JbmZvRm9yQnl0ZWNvZGVPZmZzZXQoZXhl
YywgYnl0ZWNvZGVPZmZzZXQsIGZvbGxvd2luZ09wY29kZUlEKSkgewotICAgICAgICBBU1NFUlQo
Zm9sbG93aW5nT3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0IHx8IGZvbGxvd2luZ09wY29kZUlEID09
IG9wX2luc3RhbmNlb2YpOwotICAgICAgICBpZiAoZm9sbG93aW5nT3Bjb2RlSUQgPT0gb3BfY29u
c3RydWN0KQorICAgICAgICBBU1NFUlQoZm9sbG93aW5nT3Bjb2RlSUQgPT0gb3BfY3JlYXRlX3Ro
aXMgfHwgZm9sbG93aW5nT3Bjb2RlSUQgPT0gb3BfaW5zdGFuY2VvZik7CisgICAgICAgIGlmIChm
b2xsb3dpbmdPcGNvZGVJRCA9PSBvcF9jcmVhdGVfdGhpcykKICAgICAgICAgICAgIHJldHVybiBj
cmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihleGVjLCBlcnJvci0+aXNOdWxsKCkgPyBqc051bGwo
KSA6IGpzVW5kZWZpbmVkKCksIGJ5dGVjb2RlT2Zmc2V0LCBjb2RlQmxvY2spOwogICAgICAgICBy
ZXR1cm4gY3JlYXRlSW52YWxpZFBhcmFtRXJyb3IoZXhlYywgImluc3RhbmNlb2YiLCBlcnJvci0+
aXNOdWxsKCkgPyBqc051bGwoKSA6IGpzVW5kZWZpbmVkKCksIGJ5dGVjb2RlT2Zmc2V0LCBjb2Rl
QmxvY2spOwogICAgIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZp
c2lvbiA1OTk4MCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Myw5ICs5Myw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIE5h
dGl2ZUV4ZWN1dGFibGUgOiBwdWJsaWMgRXhlY3V0YWJsZUJhc2UgewogICAgICAgICBmcmllbmQg
Y2xhc3MgSklUOwogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TmF0aXZl
RXhlY3V0YWJsZT4gY3JlYXRlKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB0aHVuaywgTmF0aXZlRnVu
Y3Rpb24gZnVuY3Rpb24pCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE5hdGl2ZUV4ZWN1dGFi
bGU+IGNyZWF0ZShNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY2FsbFRodW5rLCBOYXRpdmVGdW5jdGlv
biBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvbnN0cnVjdFRodW5rLCBOYXRpdmVG
dW5jdGlvbiBjb25zdHJ1Y3RvcikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBOYXRpdmVFeGVjdXRhYmxlKEpJVENvZGU6Okhvc3RGdW5jdGlvbih0aHVuayksIGZ1
bmN0aW9uKSk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE5hdGl2ZUV4ZWN1dGFi
bGUoSklUQ29kZTo6SG9zdEZ1bmN0aW9uKGNhbGxUaHVuayksIGZ1bmN0aW9uLCBKSVRDb2RlOjpI
b3N0RnVuY3Rpb24oY29uc3RydWN0VGh1bmspLCBjb25zdHJ1Y3RvcikpOwogICAgICAgICB9CiAK
ICAgICAgICAgfk5hdGl2ZUV4ZWN1dGFibGUoKTsKQEAgLTEwMywxNSArMTAzLDE5IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbigpIHsgcmV0dXJuIG1f
ZnVuY3Rpb247IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUoSklU
Q29kZSB0aHVuaywgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24pCisgICAgICAgIE5hdGl2ZUV4ZWN1
dGFibGUoSklUQ29kZSBjYWxsVGh1bmssIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBKSVRDb2Rl
IGNvbnN0cnVjdFRodW5rLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKICAgICAgICAgICAg
IDogRXhlY3V0YWJsZUJhc2UoTlVNX1BBUkFNRVRFUlNfSVNfSE9TVCkKICAgICAgICAgICAgICwg
bV9mdW5jdGlvbihmdW5jdGlvbikKKyAgICAgICAgICAgICwgbV9jb25zdHJ1Y3Rvcihjb25zdHJ1
Y3RvcikKICAgICAgICAgewotICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IHRodW5rOwot
ICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0ID0gdGh1bms7CisgICAgICAgICAgICBt
X2ppdENvZGVGb3JDYWxsID0gY2FsbFRodW5rOworICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ29u
c3RydWN0ID0gY29uc3RydWN0VGh1bms7CiAgICAgICAgIH0KIAogICAgICAgICBOYXRpdmVGdW5j
dGlvbiBtX2Z1bmN0aW9uOworICAgICAgICAvLyBQcm9iYWJseSBzaG91bGQgYmUgYSBOYXRpdmVD
b25zdHJ1Y3RvciwgYnV0IHRoaXMgd2lsbCBjdXJyZW50bHkgcmVxdWlyZSByZXdyaXRpbmcgdGhl
IEpJVAorICAgICAgICAvLyB0cmFtcG9saW5lLiBJdCBtYXkgYmUgZWFzaWVyIHRvIG1ha2UgTmF0
aXZlRnVuY3Rpb24gYmUgcGFzc2VkICd0aGlzJyBhcyBhIHBhcnQgb2YgdGhlIEFyZ0xpc3QuCisg
ICAgICAgIE5hdGl2ZUZ1bmN0aW9uIG1fY29uc3RydWN0b3I7CiAgICAgfTsKICNlbmRpZgogCklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDU5OTgwKQor
KysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvbW1v
bklkZW50aWZpZXJzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiRXhjZXB0
aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAi
SlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgpAQCAtNDEsNiArNDIs
MTQgQEAgdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CiAKIG5hbWVzcGFjZSBKU0MgewogCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogY29uc3RydWN0b3IsIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQor
eworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJs
b2NrKCk7CisgICAgdW5zaWduZWQgdlBDSW5kZXggPSBjb2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0
KGV4ZWMsIGV4ZWMtPnJldHVyblBDKCkpOworICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihjcmVhdGVO
b3RBQ29uc3RydWN0b3JFcnJvcihleGVjLCBjb25zdHJ1Y3RvciwgdlBDSW5kZXgsIGNvZGVCbG9j
aykpOworICAgIHJldHVybiBKU1ZhbHVlKCk7Cit9CisKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NF
TEwoSlNGdW5jdGlvbik7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0Z1bmN0aW9uOjppbmZvID0geyAi
RnVuY3Rpb24iLCAwLCAwLCAwIH07CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVu
Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24u
aAkocmV2aXNpb24gNTk5ODApCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBj
bGFzcyBKU0dsb2JhbE9iamVjdDsKICAgICBjbGFzcyBOYXRpdmVFeGVjdXRhYmxlOwogCisgICAg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOworCiAgICAgY2xhc3Mg
SlNGdW5jdGlvbiA6IHB1YmxpYyBKU09iamVjdFdpdGhHbG9iYWxPYmplY3QgewogICAgICAgICBm
cmllbmQgY2xhc3MgSklUOwogICAgICAgICBmcmllbmQgY2xhc3MgSlNHbG9iYWxEYXRhOwo=
</data>
<flag name="review"
          id="41339"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>