<?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>184552</bug_id>
          
          <creation_ts>2018-04-12 12:08:48 -0700</creation_ts>
          <short_desc>Consolidate some PtrTags.</short_desc>
          <delta_ts>2018-04-12 13:26:30 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1414126</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-12 12:08:48 -0700</bug_when>
    <thetext>Consolidate CodeEntryPtrTag and CodeEntryWithArityCheckPtrTag into CodePtrTag.
Consolidate NearCallPtrTag and NearJumpPtrTag into NearCodePtrTag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1414128</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-04-12 12:09:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/39389404&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1414137</commentid>
    <comment_count>2</comment_count>
      <attachid>337821</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-12 12:42:05 -0700</bug_when>
    <thetext>Created attachment 337821
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1414157</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-12 13:26:30 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r230592: &lt;http://trac.webkit.org/r230592&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337821</attachid>
            <date>2018-04-12 12:42:05 -0700</date>
            <delta_ts>2018-04-12 12:46:03 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-184552.patch</filename>
            <type>text/plain</type>
            <size>94760</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMwNTg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MyBA
QAorMjAxOC0wNC0xMiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
Q29uc29saWRhdGUgc29tZSBQdHJUYWdzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTg0NTUyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zOTM4OTQw
ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb25z
b2xpZGF0ZSBDb2RlRW50cnlQdHJUYWcgYW5kIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFn
IGludG8gQ29kZVB0clRhZy4KKyAgICAgICAgQ29uc29saWRhdGUgTmVhckNhbGxQdHJUYWcgYW5k
IE5lYXJKdW1wUHRyVGFnIGludG8gTmVhckNvZGVQdHJUYWcuCisKKyAgICAgICAgKiBhc3NlbWJs
ZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlckFSTS5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6cmVhZENhbGxU
YXJnZXQpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OnJlYWRDYWxsVGFyZ2V0KToKKyAgICAgICAg
KiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyTUlQUzo6cmVhZENhbGxUYXJnZXQpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlclg4Ni5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Njo6cmVhZENhbGxU
YXJnZXQpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6cmVhZENhbGxUYXJnZXQpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpn
ZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHA6CisgICAg
ICAgIChKU0M6OklubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcCk6CisgICAgICAgICogYnl0
ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0Fj
Y2Vzczo6cmVnZW5lcmF0ZSk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGls
ZXI6OmNvbXBpbGVGdW5jdGlvbik6CisgICAgICAgICogZGZnL0RGR0pJVEZpbmFsaXplci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6SklURmluYWxpemVyOjpmaW5hbGl6ZSk6CisgICAgICAgIChK
U0M6OkRGRzo6SklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcv
REZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVPU1JFbnRyeSk6Cisg
ICAgICAgICogZGZnL0RGR09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6
OmV4ZWN1dGVPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjphZGp1c3RBbmRKdW1wVG9UYXJn
ZXQpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmNvbXBpbGVPU1JFeGl0KToKKyAgICAg
ICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjphZGp1c3RBbmRKdW1wVG9UYXJnZXQpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNw
cDoKKyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6SklU
Q29kZTo6ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldCk6CisgICAgICAgICogZnRsL0ZUTEpJVEZp
bmFsaXplci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6SklURmluYWxpemVyOjpmaW5hbGl6ZUNv
bW1vbik6CisgICAgICAgICogZnRsL0ZUTExhenlTbG93UGF0aC5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6TGF6eVNsb3dQYXRoOjpnZW5lcmF0ZSk6CisgICAgICAgICogZnRsL0ZUTExpbmsuY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OmxpbmspOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1Rv
QjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ2Fs
bE9yQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29t
cGlsZURpcmVjdENhbGxPckNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmNvbXBpbGVUYWlsQ2FsbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmNvbXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzU3ByZWFkKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNhbGxPckNvbnN0cnVjdFZhcmFy
Z3MpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpsYXp5U2xvd1BhdGgp
OgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OmNvbXBpbGVGVExPU1JFeGl0KToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdEhhbmRsZS5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdEhhbmRsZTo6ZW1pdEV4aXRUaHVuayk6Cisg
ICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6ZW1pdER1bWJWaXJ0dWFsQ2FsbCk6CisgICAgICAgICogaml0L0pJVC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKToKKyAgICAgICAgKEpTQzo6
SklUOjpsaW5rKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKiBqaXQvSklUQ29kZS5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVENvZGVXaXRoQ29kZVJlZjo6ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNl
dCk6CisgICAgICAgIChKU0M6Ok5hdGl2ZUpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKToKKyAgICAg
ICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXROYWtlZENhbGwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXROYWtlZFRhaWxDYWxsKToKKyAgICAgICAgKiBqaXQv
SklUTWF0aElDLmg6CisgICAgICAgIChKU0M6OmlzUHJvZmlsZUVtcHR5KToKKyAgICAgICAgKiBq
aXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJ
bmRleGVkUHJvcGVydHkpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAg
ICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnN0cmlu
Z0dldEJ5VmFsU3R1YkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbFdp
dGhDYWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbCk6
CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZCk6
CisgICAgICAgICogaml0L0pJVFRodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6
aG9zdEZ1bmN0aW9uU3R1Yik6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAo
SlNDOjpsaW5rU2xvd0Zvcik6CisgICAgICAgIChKU0M6OmxpbmtGb3IpOgorICAgICAgICAoSlND
OjpsaW5rUG9seW1vcnBoaWNDYWxsKToKKyAgICAgICAgKiBqaXQvU3BlY2lhbGl6ZWRUaHVua0pJ
VC5oOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpmaW5hbGl6ZSk6CisgICAg
ICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OnZpcnR1YWxUaHVu
a0Zvcik6CisgICAgICAgIChKU0M6Om5hdGl2ZUZvckdlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OmJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEdlbmVyYXRvcik6CisgICAgICAgICogbGxpbnQv
TExJbnREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmluaXRpYWxpemUpOgorICAgICAg
ICAqIGxsaW50L0xMSW50RW50cnlwb2ludC5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpzZXRF
dmFsRW50cnlwb2ludCk6CisgICAgICAgIChKU0M6OkxMSW50OjpzZXRQcm9ncmFtRW50cnlwb2lu
dCk6CisgICAgICAgIChKU0M6OkxMSW50OjpzZXRNb2R1bGVQcm9ncmFtRW50cnlwb2ludCk6Cisg
ICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6
TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0VXBDYWxsKToK
KyAgICAgICAgKiBsbGludC9MTEludFRodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50Ojpn
ZW5lcmF0ZVRodW5rV2l0aEp1bXBUbyk6CisgICAgICAgIChKU0M6OkxMSW50OjpmdW5jdGlvbkZv
ckNhbGxFbnRyeVRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmZ1bmN0aW9u
Rm9yQ29uc3RydWN0RW50cnlUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkxMSW50Ojpm
dW5jdGlvbkZvckNhbGxBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpM
TEludDo6ZnVuY3Rpb25Gb3JDb25zdHJ1Y3RBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpMTEludDo6ZXZhbEVudHJ5VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpMTEludDo6cHJvZ3JhbUVudHJ5VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpMTElu
dDo6bW9kdWxlUHJvZ3JhbUVudHJ5VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGxsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmNwcDoKKyAgICAg
ICAgKEpTQzo6TmF0aXZlRXhlY3V0YWJsZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1
bnRpbWUvTmF0aXZlRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6VGFnZ2VkTmF0aXZlRnVuY3Rp
b246OlRhZ2dlZE5hdGl2ZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6VGFnZ2VkTmF0aXZlRnVu
Y3Rpb246Om9wZXJhdG9yIE5hdGl2ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1B0clRh
Zy5oOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpCQlFQbGFuOjpjb21wbGV0ZSk6CisgICAgICAgICogd2FzbS9XYXNtT01HUGxhbi5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206Ok9NR1BsYW46OndvcmspOgorICAgICAgICAqIHdhc20vV2FzbVRo
dW5rcy5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVu
a0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OnRocm93U3RhY2tPdmVyZmxvd0Zyb21X
YXNtVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjp0cmlnZ2VyT01HVGllclVw
VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAqIHdhc20vanMvV2FzbVRvSlMuY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjp3YXNtVG9KUyk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1
bmN0aW9uLmg6CisgICAgICAgICogeWFyci9ZYXJySklULmNwcDoKKyAgICAgICAgKEpTQzo6WWFy
cjo6WWFyckdlbmVyYXRvcjo6Y29tcGlsZSk6CisKIDIwMTgtMDQtMTIgIE1pY2hhZWwgQ2F0YW56
YXJvICA8bWNhdGFuemFyb0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtXUEVdIE1vdmUgbGliV1BF
V2ViSW5zcGVjdG9yUmVzb3VyY2VzLnNvIHRvIHBrZ2xpYmRpcgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVy
LmgJKHJldmlzaW9uIDIzMDU4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04OTQsNyArODk0LDcg
QEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgcmVwYXRjaE5lYXJDYWxsKENvZGVMb2NhdGlv
bk5lYXJDYWxsIG5lYXJDYWxsLCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKICAgICB7
Ci0gICAgICAgIGFzc2VydElzVGFnZ2VkV2l0aChkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVz
cygpLCBOZWFyQ2FsbFB0clRhZyk7CisgICAgICAgIGFzc2VydElzVGFnZ2VkV2l0aChkZXN0aW5h
dGlvbi5leGVjdXRhYmxlQWRkcmVzcygpLCBOZWFyQ29kZVB0clRhZyk7CiAgICAgICAgIHN3aXRj
aCAobmVhckNhbGwuY2FsbE1vZGUoKSkgewogICAgICAgICBjYXNlIE5lYXJDYWxsTW9kZTo6VGFp
bDoKICAgICAgICAgICAgIEFzc2VtYmxlclR5cGU6OnJlbGlua0p1bXAobmVhckNhbGwuZGF0YUxv
Y2F0aW9uKCksIGRlc3RpbmF0aW9uLmRhdGFMb2NhdGlvbigpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmgJKHJldmlz
aW9uIDIzMDU4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJBUk0uaAkod29ya2luZyBjb3B5KQpAQCAtMTUwNyw3ICsxNTA3LDcgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIEZ1bmN0aW9uUHRyIHJlYWRDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkNhbGwg
Y2FsbCkKICAgICB7Ci0gICAgICAgIHJldHVybiBGdW5jdGlvblB0cihyZWludGVycHJldF9jYXN0
PHZvaWQoKikoKT4oQVJNQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChjYWxsLmRhdGFMb2NhdGlv
bigpKSksIENvZGVFbnRyeVB0clRhZyk7CisgICAgICAgIHJldHVybiBGdW5jdGlvblB0cihyZWlu
dGVycHJldF9jYXN0PHZvaWQoKikoKT4oQVJNQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChjYWxs
LmRhdGFMb2NhdGlvbigpKSksIENvZGVQdHJUYWcpOwogICAgIH0KIAogICAgIHN0YXRpYyB2b2lk
IHJlcGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBDb2Rl
TG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCShyZXZpc2lvbiAyMzA1
ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJN
djcuaAkod29ya2luZyBjb3B5KQpAQCAtMTk5MSw3ICsxOTkxLDcgQEAgcHVibGljOgogICAgIAog
ICAgIHN0YXRpYyBGdW5jdGlvblB0ciByZWFkQ2FsbFRhcmdldChDb2RlTG9jYXRpb25DYWxsIGNh
bGwpCiAgICAgewotICAgICAgICByZXR1cm4gRnVuY3Rpb25QdHIocmVpbnRlcnByZXRfY2FzdDx2
b2lkKCopKCk+KEFSTXY3QXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChjYWxsLmRhdGFMb2NhdGlv
bigpKSksIENvZGVFbnRyeVB0clRhZyk7CisgICAgICAgIHJldHVybiBGdW5jdGlvblB0cihyZWlu
dGVycHJldF9jYXN0PHZvaWQoKikoKT4oQVJNdjdBc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0KGNh
bGwuZGF0YUxvY2F0aW9uKCkpKSwgQ29kZVB0clRhZyk7CiAgICAgfQogICAgIAogICAgIHN0YXRp
YyBib29sIGNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKCkgeyByZXR1
cm4gZmFsc2U7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJNSVBTLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaAkocmV2aXNpb24gMjMwNTg3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzM5MSw3ICszMzkxLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIEZ1bmN0aW9uUHRy
IHJlYWRDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkNhbGwgY2FsbCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBGdW5jdGlvblB0cihyZWludGVycHJldF9jYXN0PHZvaWQoKikoKT4oTUlQU0Fzc2VtYmxl
cjo6cmVhZENhbGxUYXJnZXQoY2FsbC5kYXRhTG9jYXRpb24oKSkpLCBDb2RlRW50cnlQdHJUYWcp
OworICAgICAgICByZXR1cm4gRnVuY3Rpb25QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKCopKCk+
KE1JUFNBc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0KGNhbGwuZGF0YUxvY2F0aW9uKCkpKSwgQ29k
ZVB0clRhZyk7CiAgICAgfQogCiAgICAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKENvZGVM
b2NhdGlvbkxhYmVsIGluc3RydWN0aW9uU3RhcnQsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0
aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
clg4Ni5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJYODYuaAkocmV2aXNpb24gMjMwNTg3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDIs
NyArMzAyLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBGdW5jdGlvblB0ciByZWFkQ2FsbFRhcmdl
dChDb2RlTG9jYXRpb25DYWxsIGNhbGwpCiAgICAgewogICAgICAgICBpbnRwdHJfdCBvZmZzZXQg
PSByZWludGVycHJldF9jYXN0PGludDMyX3QqPihjYWxsLmRhdGFMb2NhdGlvbigpKVstMV07Ci0g
ICAgICAgIHJldHVybiBGdW5jdGlvblB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4oY2FsbC5kYXRhTG9jYXRpb24oKSkgKyBvZmZzZXQpLCBDb2Rl
RW50cnlQdHJUYWcpOworICAgICAgICByZXR1cm4gRnVuY3Rpb25QdHIocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNhbGwuZGF0YUxvY2F0aW9uKCkp
ICsgb2Zmc2V0KSwgQ29kZVB0clRhZyk7CiAgICAgfQogCiAgICAgc3RhdGljIGJvb2wgY2FuSnVt
cFJlcGxhY2VQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goKSB7IHJldHVybiB0cnVlOyB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlclg4Nl82NC5oCShyZXZpc2lvbiAyMzA1ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4
ODYsNyArMTg4Niw3IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgRnVuY3Rpb25QdHIgcmVh
ZENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IEZ1bmN0aW9uUHRyKFg4NkFzc2VtYmxlcjo6cmVhZFBvaW50ZXIoY2FsbC5kYXRhTGFiZWxQdHJB
dE9mZnNldCgtUkVQQVRDSF9PRkZTRVRfQ0FMTF9SMTEpLmRhdGFMb2NhdGlvbigpKSwgQ29kZUVu
dHJ5UHRyVGFnKTsKKyAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyKFg4NkFzc2VtYmxlcjo6cmVh
ZFBvaW50ZXIoY2FsbC5kYXRhTGFiZWxQdHJBdE9mZnNldCgtUkVQQVRDSF9PRkZTRVRfQ0FMTF9S
MTEpLmRhdGFMb2NhdGlvbigpKSwgQ29kZVB0clRhZyk7CiAgICAgfQogCiAgICAgYm9vbCBoYXZl
U2NyYXRjaFJlZ2lzdGVyRm9yQmxpbmRpbmcoKSB7IHJldHVybiBtX2FsbG93U2NyYXRjaFJlZ2lz
dGVyOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCShyZXZpc2lvbiAyMzA1ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyNSw3ICs4MjUsNyBAQCB2b2lk
IEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICAgICAgUHRy
VGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua0NhbGxQdHJUYWcsICZ2bSk7CiAgICAgICAgICAgICAg
ICAgbGlua0J1ZmZlci5saW5rKAogICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwsCi0g
ICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIobGlua0Nh
bGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2RlKGxpbmtUYWcsIE5lYXJDYWxsUHRyVGFnKSkp
OworICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKGxp
bmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZShsaW5rVGFnLCBOZWFyQ29kZVB0clRh
ZykpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNT
RVJUKG1fdHlwZSA9PSBDdXN0b21WYWx1ZUdldHRlciB8fCBtX3R5cGUgPT0gQ3VzdG9tQWNjZXNz
b3JHZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbVZhbHVlU2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0
b21BY2Nlc3NvclNldHRlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5saW5lQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkocmV2aXNpb24gMjMwNTg3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
MCw3ICsyOTAsNyBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcChTdHJ1CiAg
ICAgUkVMRUFTRV9BU1NFUlQobGlua0J1ZmZlci5pc1ZhbGlkKCkpOwogICAgIGxpbmtCdWZmZXIu
bGluayhqdW1wLCB0YXJnZXQpOwogCi0gICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOZWFy
SnVtcFB0clRhZywgIklubGluZUFjY2VzczogbGlua2luZyBjb25zdGFudCBqdW1wIik7CisgICAg
RklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOZWFyQ29kZVB0clRhZywgIklubGluZUFjY2Vzczog
bGlua2luZyBjb25zdGFudCBqdW1wIik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nl
c3MuY3BwCShyZXZpc2lvbiAyMzA1ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjksNyArNTY5LDcg
QEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2VzcwogICAgICAgICBkYXRh
TG9nKEZ1bGxDb2RlT3JpZ2luKGNvZGVCbG9jaywgc3R1YkluZm8uY29kZU9yaWdpbiksICI6IEdl
bmVyYXRpbmcgcG9seW1vcnBoaWMgYWNjZXNzIHN0dWIgZm9yICIsIGxpc3REdW1wKGNhc2VzKSwg
IlxuIik7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZSA9IEZJTkFMSVpFX0NPREVf
Rk9SKAotICAgICAgICBjb2RlQmxvY2ssIGxpbmtCdWZmZXIsIE5lYXJKdW1wUHRyVGFnLAorICAg
ICAgICBjb2RlQmxvY2ssIGxpbmtCdWZmZXIsIE5lYXJDb2RlUHRyVGFnLAogICAgICAgICAiJXMi
LCB0b0NTdHJpbmcoIkFjY2VzcyBzdHViIGZvciAiLCAqY29kZUJsb2NrLCAiICIsIHN0dWJJbmZv
LmNvZGVPcmlnaW4sICIgd2l0aCByZXR1cm4gcG9pbnQgIiwgc3VjY2Vzc0xhYmVsLCAiOiAiLCBs
aXN0RHVtcChjYXNlcykpLmRhdGEoKSk7CiAKICAgICBib29sIGRvZXNDYWxscyA9IGZhbHNlOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJl
dmlzaW9uIDIzMDU4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgSklUQ29tcGlsZXI6
OmxpbmtPU1JFeGl0cygpCiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRU
aHVuayA9IHZtKCktPmdldENUSVN0dWIob3NyRXhpdFRodW5rR2VuZXJhdG9yKTsKICAgICBQdHJU
YWcgb3NyRXhpdFRodW5rVGFnID0gcHRyVGFnKERGR09TUkV4aXRQdHJUYWcsIHZtKCkpOwotICAg
IENvZGVMb2NhdGlvbkxhYmVsIG9zckV4aXRUaHVua0xhYmVsID0gQ29kZUxvY2F0aW9uTGFiZWwo
b3NyRXhpdFRodW5rLnJldGFnZ2VkQ29kZShvc3JFeGl0VGh1bmtUYWcsIE5lYXJKdW1wUHRyVGFn
KSk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgb3NyRXhpdFRodW5rTGFiZWwgPSBDb2RlTG9jYXRp
b25MYWJlbChvc3JFeGl0VGh1bmsucmV0YWdnZWRDb2RlKG9zckV4aXRUaHVua1RhZywgTmVhckNv
ZGVQdHJUYWcpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qaXRDb2RlLT5vc3JF
eGl0LnNpemUoKTsgKytpKSB7CiAgICAgICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8g
PSBtX2V4aXRDb21waWxhdGlvbkluZm9baV07CiAgICAgICAgIEp1bXBMaXN0JiBmYWlsdXJlSnVt
cHMgPSBpbmZvLm1fZmFpbHVyZUp1bXBzOwpAQCAtMjkzLDcgKzI5Myw3IEBAIHZvaWQgSklUQ29t
cGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICB9CiAgICAgCiAgICAgUHRyVGFnIGxp
bmtUYWcgPSBwdHJUYWcoTGlua0NhbGxQdHJUYWcsIHZtKCkpOwotICAgIGF1dG8gbGlua0NhbGxU
aHVuayA9IEZ1bmN0aW9uUHRyKHZtKCktPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRv
cikucmV0YWdnZWRDb2RlKGxpbmtUYWcsIE5lYXJDYWxsUHRyVGFnKSk7CisgICAgYXV0byBsaW5r
Q2FsbFRodW5rID0gRnVuY3Rpb25QdHIodm0oKS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGUobGlua1RhZywgTmVhckNvZGVQdHJUYWcpKTsKICAgICBmb3Ig
KGF1dG8mIHJlY29yZCA6IG1fanNDYWxscykgewogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8g
PSAqcmVjb3JkLmluZm87CiAgICAgICAgIGxpbmtCdWZmZXIubGluayhyZWNvcmQuc2xvd0NhbGws
IGxpbmtDYWxsVGh1bmspOwpAQCAtMzA1LDEwICszMDUsMTAgQEAgdm9pZCBKSVRDb21waWxlcjo6
bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgIAogICAgIGZvciAoSlNEaXJlY3RDYWxsUmVjb3Jk
JiByZWNvcmQgOiBtX2pzRGlyZWN0Q2FsbHMpIHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZv
ID0gKnJlY29yZC5pbmZvOwotICAgICAgICBsaW5rQnVmZmVyLmxpbmsocmVjb3JkLmNhbGwsIGxp
bmtCdWZmZXIubG9jYXRpb25PZihyZWNvcmQuc2xvd1BhdGgsIE5lYXJDYWxsUHRyVGFnKSk7Cisg
ICAgICAgIGxpbmtCdWZmZXIubGluayhyZWNvcmQuY2FsbCwgbGlua0J1ZmZlci5sb2NhdGlvbk9m
KHJlY29yZC5zbG93UGF0aCwgTmVhckNvZGVQdHJUYWcpKTsKICAgICAgICAgaW5mby5zZXRDYWxs
TG9jYXRpb25zKAogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoKSwKLSAgICAgICAgICAg
IGxpbmtCdWZmZXIubG9jYXRpb25PZihyZWNvcmQuc2xvd1BhdGgsIE5lYXJDYWxsUHRyVGFnKSwK
KyAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihyZWNvcmQuc2xvd1BhdGgsIE5lYXJD
b2RlUHRyVGFnKSwKICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHJl
Y29yZC5jYWxsKSk7CiAgICAgfQogICAgIApAQCAtMzE2LDEzICszMTYsMTMgQEAgdm9pZCBKSVRD
b21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICBDYWxsTGlua0luZm8mIGlu
Zm8gPSAqcmVjb3JkLmluZm87CiAgICAgICAgIGluZm8uc2V0Q2FsbExvY2F0aW9ucygKICAgICAg
ICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihyZWNvcmQucGF0Y2hhYmxlSnVtcCksCi0gICAg
ICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocmVjb3JkLnNsb3dQYXRoLCBOZWFyQ2FsbFB0
clRhZyksCisgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocmVjb3JkLnNsb3dQYXRo
LCBOZWFyQ29kZVB0clRhZyksCiAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFy
Q2FsbChyZWNvcmQuY2FsbCkpOwogICAgIH0KICAgICAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgb3NyRXhpdFRodW5rID0gdm0oKS0+Z2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlvblRodW5r
R2VuZXJhdG9yKTsKICAgICBQdHJUYWcgb3NyRXhpdFRodW5rVGFnID0gcHRyVGFnKERGR09TUkV4
aXRQdHJUYWcsIHZtKCkpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIHRhcmdldCA9IENvZGVMb2Nh
dGlvbkxhYmVsKG9zckV4aXRUaHVuay5yZXRhZ2dlZENvZGUob3NyRXhpdFRodW5rVGFnLCBOZWFy
SnVtcFB0clRhZykpOworICAgIENvZGVMb2NhdGlvbkxhYmVsIHRhcmdldCA9IENvZGVMb2NhdGlv
bkxhYmVsKG9zckV4aXRUaHVuay5yZXRhZ2dlZENvZGUob3NyRXhpdFRodW5rVGFnLCBOZWFyQ29k
ZVB0clRhZykpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ppdENvZGUtPm9zckV4
aXQuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9
IG1fZXhpdENvbXBpbGF0aW9uSW5mb1tpXTsKICAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VQcm9i
ZU9TUkV4aXQoKSkgewpAQCAtMzMyLDggKzMzMiw4IEBAIHZvaWQgSklUQ29tcGlsZXI6Omxpbmso
TGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgfQogICAgICAgICBpZiAoaW5mby5tX3JlcGxhY2Vt
ZW50U291cmNlLmlzU2V0KCkpIHsKICAgICAgICAgICAgIG1faml0Q29kZS0+Y29tbW9uLmp1bXBS
ZXBsYWNlbWVudHMuYXBwZW5kKEp1bXBSZXBsYWNlbWVudCgKLSAgICAgICAgICAgICAgICBsaW5r
QnVmZmVyLmxvY2F0aW9uT2YoaW5mby5tX3JlcGxhY2VtZW50U291cmNlLCBOZWFySnVtcFB0clRh
ZyksCi0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGluZm8ubV9yZXBsYWNl
bWVudERlc3RpbmF0aW9uLCBOZWFySnVtcFB0clRhZykpKTsKKyAgICAgICAgICAgICAgICBsaW5r
QnVmZmVyLmxvY2F0aW9uT2YoaW5mby5tX3JlcGxhY2VtZW50U291cmNlLCBOZWFyQ29kZVB0clRh
ZyksCisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGluZm8ubV9yZXBsYWNl
bWVudERlc3RpbmF0aW9uLCBOZWFyQ29kZVB0clRhZykpKTsKICAgICAgICAgfQogICAgIH0KICAg
ICAKQEAgLTUzOSwxMSArNTM5LDExIEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlv
bigpCiAgICAgbV9qaXRDb2RlLT5zaHJpbmtUb0ZpdCgpOwogICAgIGNvZGVCbG9jaygpLT5zaHJp
bmtUb0ZpdChDb2RlQmxvY2s6OkxhdGVTaHJpbmspOwogCi0gICAgbGlua0J1ZmZlci0+bGluayhj
YWxsQXJpdHlGaXh1cCwgRnVuY3Rpb25QdHIodm0oKS0+Z2V0Q1RJU3R1Yihhcml0eUZpeHVwR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGUocHRyVGFnKEFyaXR5Rml4dXBQdHJUYWcsIHZtKCkpLCBOZWFy
Q2FsbFB0clRhZykpKTsKKyAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxBcml0eUZpeHVwLCBGdW5j
dGlvblB0cih2bSgpLT5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZShwdHJUYWcoQXJpdHlGaXh1cFB0clRhZywgdm0oKSksIE5lYXJDb2RlUHRyVGFnKSkpOwogCiAg
ICAgZGlzYXNzZW1ibGUoKmxpbmtCdWZmZXIpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IHdpdGhBcml0eUNoZWNrID0gbGlua0J1ZmZlci0+bG9jYXRpb25PZihtX2FyaXR5Q2hlY2ssIENv
ZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
d2l0aEFyaXR5Q2hlY2sgPSBsaW5rQnVmZmVyLT5sb2NhdGlvbk9mKG1fYXJpdHlDaGVjaywgQ29k
ZVB0clRhZyk7CiAKICAgICBtX2dyYXBoLm1fcGxhbi5maW5hbGl6ZXIgPSBzdGQ6Om1ha2VfdW5p
cXVlPEpJVEZpbmFsaXplcj4oCiAgICAgICAgIG1fZ3JhcGgubV9wbGFuLCBtX2ppdENvZGUucmVs
ZWFzZU5vbk51bGwoKSwgV1RGTW92ZShsaW5rQnVmZmVyKSwgd2l0aEFyaXR5Q2hlY2spOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAkocmV2
aXNpb24gMjMwNTg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw4ICs1Niw4IEBAIHNpemVfdCBKSVRGaW5hbGl6
ZXI6OmNvZGVTaXplKCkKIAogYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplKCkKIHsKLSAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZiA9IEZJTkFMSVpFX0RGR19DT0RFKCptX2xpbmtC
dWZmZXIsIENvZGVFbnRyeVB0clRhZywgIkRGRyBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmco
Q29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywgSklUQ29kZTo6REZHSklUKSku
ZGF0YSgpKTsKLSAgICBtX2ppdENvZGUtPmluaXRpYWxpemVDb2RlUmVmKGNvZGVSZWYsIGNvZGVS
ZWYucmV0YWdnZWRDb2RlKENvZGVFbnRyeVB0clRhZywgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQ
dHJUYWcpKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZiA9IEZJTkFMSVpFX0RG
R19DT0RFKCptX2xpbmtCdWZmZXIsIENvZGVQdHJUYWcsICJERkcgSklUIGNvZGUgZm9yICVzIiwg
dG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJVENvZGU6
OkRGR0pJVCkpLmRhdGEoKSk7CisgICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZVJlZihjb2Rl
UmVmLCBjb2RlUmVmLmNvZGUoKSk7CiAgICAgCiAgICAgbV9wbGFuLmNvZGVCbG9jay0+c2V0SklU
Q29kZShtX2ppdENvZGUuY29weVJlZigpKTsKICAgICAKQEAgLTcwLDcgKzcwLDcgQEAgYm9vbCBK
SVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFt
X3dpdGhBcml0eUNoZWNrLmlzRW1wdHlWYWx1ZSgpKTsKICAgICBtX2ppdENvZGUtPmluaXRpYWxp
emVDb2RlUmVmKAotICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgqbV9saW5rQnVmZmVyLCBDb2Rl
RW50cnlQdHJUYWcsICJERkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dp
dGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCkpLmRhdGEoKSksCisg
ICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKCptX2xpbmtCdWZmZXIsIENvZGVQdHJUYWcsICJERkcg
SklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5j
b2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCkpLmRhdGEoKSksCiAgICAgICAgIG1fd2l0aEFyaXR5
Q2hlY2spOwogICAgIG1fcGxhbi5jb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlLmNvcHlS
ZWYoKSk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
LmNwcAkocmV2aXNpb24gMjMwNTg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Myw3ICsyNzMsNyBAQCB2b2lkKiBwcmVw
YXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSkKICAgICAgICAgZGF0YUxvZ0YoIiAgICBPU1IgdXNpbmcgdGFyZ2V0IFBDICVwLlxuIiwg
dGFyZ2V0UEMpOwogICAgIFJFTEVBU0VfQVNTRVJUKHRhcmdldFBDKTsKLSAgICAqYml0d2lzZV9j
YXN0PHZvaWQqKj4oc2NyYXRjaCArIDEpID0gcmV0YWdDb2RlUHRyKHRhcmdldFBDLCBDb2RlRW50
cnlQdHJUYWcsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KGV4ZWMpKTsKKyAgICAqYml0d2lzZV9jYXN0
PHZvaWQqKj4oc2NyYXRjaCArIDEpID0gcmV0YWdDb2RlUHRyKHRhcmdldFBDLCBDb2RlUHRyVGFn
LCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihleGVjKSk7CiAKICAgICBSZWdpc3RlciogcGl2b3QgPSBz
Y3JhdGNoICsgMiArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzOwogICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCShyZXZpc2lvbiAyMzA1
ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOTMsOCArMzkzLDggQEAgdm9pZCBPU1JFeGl0OjpleGVjdXRlT1NSRXhpdChD
b250ZXh0JiBjbwogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBjb2RlTG9jYXRpb24gPSBjb2Rl
TWFwLmZpbmQoZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIEFTU0VS
VChjb2RlTG9jYXRpb24pOwogCi0gICAgICAgIFB0clRhZyBsb2NhdGlvblRhZyA9IHB0clRhZyhD
b2RlRW50cnlQdHJUYWcsIGNvZGVCbG9ja0ZvckV4aXQsIGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVj
b2RlSW5kZXgpOwotICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gY29kZUxvY2F0aW9uLnJldGFn
Z2VkKGxvY2F0aW9uVGFnLCBDb2RlRW50cnlQdHJUYWcpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Cisg
ICAgICAgIFB0clRhZyBsb2NhdGlvblRhZyA9IHB0clRhZyhDb2RlUHRyVGFnLCBjb2RlQmxvY2tG
b3JFeGl0LCBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgdm9pZCog
anVtcFRhcmdldCA9IGNvZGVMb2NhdGlvbi5yZXRhZ2dlZChsb2NhdGlvblRhZywgQ29kZVB0clRh
ZykuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIAogICAgICAgICAvLyBDb21wdXRlIHRoZSB2YWx1ZSBy
ZWNvdmVyaWVzLgogICAgICAgICBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiBvcGVyYW5kczsKQEAg
LTg2Niw3ICs4NjYsNyBAQCBzdGF0aWMgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoQ29udGV4
CiAgICAgfQogCiAgICAgdm0udG9wQ2FsbEZyYW1lID0gY29udGV4dC5mcDxFeGVjU3RhdGUqPigp
OwotICAgIGNvbnRleHQucGMoKSA9IHVudGFnQ29kZVB0cihqdW1wVGFyZ2V0LCBDb2RlRW50cnlQ
dHJUYWcpOworICAgIGNvbnRleHQucGMoKSA9IHVudGFnQ29kZVB0cihqdW1wVGFyZ2V0LCBDb2Rl
UHRyVGFnKTsKIH0KIAogc3RhdGljIHZvaWQgcHJpbnRPU1JFeGl0KENvbnRleHQmIGNvbnRleHQs
IHVpbnQzMl90IG9zckV4aXRJbmRleCwgY29uc3QgT1NSRXhpdCYgZXhpdCkKQEAgLTEwODQsNyAr
MTA4NCw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBPU1JFeGl0Ojpjb21waWxlT1NSRXgKICAgICAg
ICAgICAgICAgICB0b0NTdHJpbmcoaWdub3JpbmdDb250ZXh0PER1bXBDb250ZXh0PihvcGVyYW5k
cykpLmRhdGEoKSk7CiAgICAgfQogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGV4
aXQuY29kZUxvY2F0aW9uRm9yUmVwYXRjaChjb2RlQmxvY2spLCBDb2RlTG9jYXRpb25MYWJlbChl
eGl0Lm1fY29kZS5yZXRhZ2dlZENvZGUoZXhpdFRhZywgTmVhckp1bXBQdHJUYWcpKSk7CisgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGV4aXQuY29kZUxvY2F0aW9uRm9yUmVwYXRjaChj
b2RlQmxvY2spLCBDb2RlTG9jYXRpb25MYWJlbChleGl0Lm1fY29kZS5yZXRhZ2dlZENvZGUoZXhp
dFRhZywgTmVhckNvZGVQdHJUYWcpKSk7CiAKICAgICB2bS0+b3NyRXhpdEp1bXBEZXN0aW5hdGlv
biA9IGV4aXQubV9jb2RlLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmNwcAkocmV2aXNpb24gMjMwNTg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjIsNyArMzIy
LDcgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbAogICAgIENvZGVM
b2NhdGlvbkxhYmVsIGNvZGVMb2NhdGlvbiA9IGNvZGVCbG9ja0ZvckV4aXQtPmppdENvZGVNYXAo
KS5maW5kKGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwogICAgIEFTU0VSVChjb2Rl
TG9jYXRpb24pOwogCi0gICAgUHRyVGFnIGxvY2F0aW9uVGFnID0gcHRyVGFnKENvZGVFbnRyeVB0
clRhZywgY29kZUJsb2NrRm9yRXhpdCwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7
CisgICAgUHRyVGFnIGxvY2F0aW9uVGFnID0gcHRyVGFnKENvZGVQdHJUYWcsIGNvZGVCbG9ja0Zv
ckV4aXQsIGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwogICAgIFB0clRhZyBleGl0
VGFnID0gcHRyVGFnKERGR09TUkV4aXRQdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKICAgICB2b2lk
KiBqdW1wVGFyZ2V0ID0gY29kZUxvY2F0aW9uLnJldGFnZ2VkKGxvY2F0aW9uVGFnLCBleGl0VGFn
KS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrRm9yRXhpdCkg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFzc2VtYmx5
SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMzA1ODcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MDQ0LDcgKzMwNDQsNyBAQCBzdGF0aWMgY2hhciogdGllclVwQ29tbW9uKEV4ZWNTdGF0ZSogZXhl
CiAgICAgICAgICAgICAgICAgZGF0YUxvZygiT1NSIGVudHJ5OiBGcm9tICIsIFJhd1BvaW50ZXIo
aml0Q29kZSksICIgZ290IGVudHJ5IGJsb2NrICIsIFJhd1BvaW50ZXIoZW50cnlCbG9jayksICJc
biIpOwogICAgICAgICAgICAgaWYgKHZvaWQqIGFkZHJlc3MgPSBGVEw6OnByZXBhcmVPU1JFbnRy
eShleGVjLCBjb2RlQmxvY2ssIGVudHJ5QmxvY2ssIG9yaWdpbkJ5dGVjb2RlSW5kZXgsIHN0cmVh
bUluZGV4KSkgewogICAgICAgICAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoZW50cnlCbG9j
aywgIm9zckVudHJ5IiwgKCJhdCBiYyMiLCBvcmlnaW5CeXRlY29kZUluZGV4KSk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHJldGFnQ29kZVB0cjxjaGFyKj4oYWRkcmVzcywgQ29kZUVudHJ5UHRy
VGFnLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihleGVjKSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHJldGFnQ29kZVB0cjxjaGFyKj4oYWRkcmVzcywgQ29kZVB0clRhZywgYml0d2lzZV9jYXN0PFB0
clRhZz4oZXhlYykpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMzE2Niw3
ICszMTY2LDcgQEAgc3RhdGljIGNoYXIqIHRpZXJVcENvbW1vbihFeGVjU3RhdGUqIGV4ZQogICAg
ICAgICBleGVjLCBjb2RlQmxvY2ssIGppdENvZGUtPm9zckVudHJ5QmxvY2soKSwgb3JpZ2luQnl0
ZWNvZGVJbmRleCwgc3RyZWFtSW5kZXgpOwogICAgIGlmICghYWRkcmVzcykKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHJldGFnQ29kZVB0cjxjaGFyKj4oYWRkcmVzcywgQ29k
ZUVudHJ5UHRyVGFnLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihleGVjKSk7CisgICAgcmV0dXJuIHJl
dGFnQ29kZVB0cjxjaGFyKj4oYWRkcmVzcywgQ29kZVB0clRhZywgYml0d2lzZV9jYXN0PFB0clRh
Zz4oZXhlYykpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclRpZXJVcE5vd0luTG9v
cChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJKHJldmlzaW9uIDIzMDU4NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg2LDEyICs4NiwxMiBAQCBKSVRDb2RlOjpDb2RlUHRyIEpJVENvZGU6OmFkZHJlc3NGb3JDYWxs
CiB2b2lkKiBKSVRDb2RlOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQp
CiB7CiAgICAgcmV0dXJuIG1fYWRkcmVzc0ZvckNhbGwuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+
KCkgKyBvZmZzZXQ7Ci0gICAgYXNzZXJ0SXNUYWdnZWRXaXRoKG1fYWRkcmVzc0ZvckNhbGwuZXhl
Y3V0YWJsZUFkZHJlc3MoKSwgQ29kZUVudHJ5UHRyVGFnKTsKKyAgICBhc3NlcnRJc1RhZ2dlZFdp
dGgobV9hZGRyZXNzRm9yQ2FsbC5leGVjdXRhYmxlQWRkcmVzcygpLCBDb2RlUHRyVGFnKTsKICAg
ICBpZiAoIW9mZnNldCkKICAgICAgICAgcmV0dXJuIG1fYWRkcmVzc0ZvckNhbGwuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKIAotICAgIGNoYXIqIGV4ZWN1dGFibGVBZGRyZXNzID0gdW50YWdDb2RlUHRy
PGNoYXIqPihtX2FkZHJlc3NGb3JDYWxsLmV4ZWN1dGFibGVBZGRyZXNzKCksIENvZGVFbnRyeVB0
clRhZyk7Ci0gICAgcmV0dXJuIHRhZ0NvZGVQdHIoZXhlY3V0YWJsZUFkZHJlc3MgKyBvZmZzZXQs
IENvZGVFbnRyeVB0clRhZyk7CisgICAgY2hhciogZXhlY3V0YWJsZUFkZHJlc3MgPSB1bnRhZ0Nv
ZGVQdHI8Y2hhcio+KG1fYWRkcmVzc0ZvckNhbGwuZXhlY3V0YWJsZUFkZHJlc3MoKSwgQ29kZVB0
clRhZyk7CisgICAgcmV0dXJuIHRhZ0NvZGVQdHIoZXhlY3V0YWJsZUFkZHJlc3MgKyBvZmZzZXQs
IENvZGVQdHJUYWcpOwogfQogCiB2b2lkKiBKSVRDb2RlOjpkYXRhQWRkcmVzc0F0T2Zmc2V0KHNp
emVfdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXpl
ci5jcHAJKHJldmlzaW9uIDIzMDU4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SklURmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsMTMgKzc0LDEzIEBAIGJvb2wg
SklURmluYWxpemVyOjpmaW5hbGl6ZUNvbW1vbigpCiAgICAgYm9vbCBkdW1wRGlzYXNzZW1ibHkg
PSBzaG91bGREdW1wRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjphc3luY0Rpc2Fzc2VtYmx5KCk7
CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGIzQ29kZVJlZiA9Ci0gICAgICAgIEZJ
TkFMSVpFX0NPREVfSUYoZHVtcERpc2Fzc2VtYmx5LCAqYjNDb2RlTGlua0J1ZmZlciwgQ29kZUVu
dHJ5UHRyVGFnLAorICAgICAgICBGSU5BTElaRV9DT0RFX0lGKGR1bXBEaXNhc3NlbWJseSwgKmIz
Q29kZUxpbmtCdWZmZXIsIENvZGVQdHJUYWcsCiAgICAgICAgICAgICAiRlRMIEIzIGNvZGUgZm9y
ICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJ
VENvZGU6OkZUTEpJVCkpLmRhdGEoKSk7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJp
dHlDaGVja0NvZGVSZWYgPSBlbnRyeXBvaW50TGlua0J1ZmZlcgotICAgICAgICA/IEZJTkFMSVpF
X0NPREVfSUYoZHVtcERpc2Fzc2VtYmx5LCAqZW50cnlwb2ludExpbmtCdWZmZXIsIENvZGVFbnRy
eVdpdGhBcml0eUNoZWNrUHRyVGFnLAorICAgICAgICA/IEZJTkFMSVpFX0NPREVfSUYoZHVtcERp
c2Fzc2VtYmx5LCAqZW50cnlwb2ludExpbmtCdWZmZXIsIENvZGVQdHJUYWcsCiAgICAgICAgICAg
ICAiRlRMIGVudHJ5cG9pbnQgdGh1bmsgZm9yICVzIHdpdGggQjMgZ2VuZXJhdGVkIGNvZGUgYXQg
JXAiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywgSklU
Q29kZTo6RlRMSklUKSkuZGF0YSgpLCBmdW5jdGlvbikKLSAgICAgICAgOiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihiM0NvZGVSZWYucmV0YWdnZWRDb2Rl
KENvZGVFbnRyeVB0clRhZywgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcpKTsKKyAgICAg
ICAgOiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihiM0Nv
ZGVSZWYuY29kZSgpKTsKIAogICAgIGppdENvZGUtPmluaXRpYWxpemVCM0NvZGUoYjNDb2RlUmVm
KTsKICAgICBqaXRDb2RlLT5pbml0aWFsaXplQXJpdHlDaGVja0VudHJ5cG9pbnQoYXJpdHlDaGVj
a0NvZGVSZWYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1Bh
dGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNs
b3dQYXRoLmNwcAkocmV2aXNpb24gMjMwNTg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMYXp5U2xvd1BhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSwxMiArNjUsMTIgQEAg
dm9pZCBMYXp5U2xvd1BhdGg6OmdlbmVyYXRlKENvZGVCbG9jayogYwogCiAgICAgUHRyVGFnIHNs
b3dQYXRoVGFnID0gcHRyVGFnKEZUTExhenlTbG93UGF0aFB0clRhZywgYml0d2lzZV9jYXN0PFB0
clRhZz4odGhpcykpOwogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIGNvZGVCbG9jaywg
SklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCk7Ci0gICAgbGlua0J1ZmZlci5saW5rKHBhcmFtcy5k
b25lSnVtcHMsIG1fZG9uZS5yZXRhZ2dlZChzbG93UGF0aFRhZywgTmVhckp1bXBQdHJUYWcpKTsK
KyAgICBsaW5rQnVmZmVyLmxpbmsocGFyYW1zLmRvbmVKdW1wcywgbV9kb25lLnJldGFnZ2VkKHNs
b3dQYXRoVGFnLCBOZWFyQ29kZVB0clRhZykpOwogICAgIGlmIChtX2V4Y2VwdGlvblRhcmdldCkK
LSAgICAgICAgbGlua0J1ZmZlci5saW5rKGV4Y2VwdGlvbkp1bXBzLCBtX2V4Y2VwdGlvblRhcmdl
dC5yZXRhZ2dlZChzbG93UGF0aFRhZywgTmVhckp1bXBQdHJUYWcpKTsKKyAgICAgICAgbGlua0J1
ZmZlci5saW5rKGV4Y2VwdGlvbkp1bXBzLCBtX2V4Y2VwdGlvblRhcmdldC5yZXRhZ2dlZChzbG93
UGF0aFRhZywgTmVhckNvZGVQdHJUYWcpKTsKICAgICBtX3N0dWIgPSBGSU5BTElaRV9DT0RFX0ZP
Uihjb2RlQmxvY2ssIGxpbmtCdWZmZXIsIHNsb3dQYXRoVGFnLCAiTGF6eSBzbG93IHBhdGggY2Fs
bCBzdHViIik7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAobV9wYXRjaGFibGVK
dW1wLnJldGFnZ2VkKHNsb3dQYXRoVGFnLCBOZWFySnVtcFB0clRhZyksIENvZGVMb2NhdGlvbkxh
YmVsKG1fc3R1Yi5yZXRhZ2dlZENvZGUoc2xvd1BhdGhUYWcsIE5lYXJKdW1wUHRyVGFnKSkpOwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChtX3BhdGNoYWJsZUp1bXAucmV0YWdnZWQo
c2xvd1BhdGhUYWcsIE5lYXJDb2RlUHRyVGFnKSwgQ29kZUxvY2F0aW9uTGFiZWwobV9zdHViLnJl
dGFnZ2VkQ29kZShzbG93UGF0aFRhZywgTmVhckNvZGVQdHJUYWcpKSk7CiB9CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGlu
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNw
cAkocmV2aXNpb24gMjMwNTg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5r
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc0LDEyICsxNzQsMTIgQEAgdm9pZCBsaW5rKFN0YXRl
JiBzdGF0ZSkKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsoY2Fs
bEFyaXR5Q2hlY2ssIEZ1bmN0aW9uUHRyKGNvZGVCbG9jay0+bV9pc0NvbnN0cnVjdG9yID8gb3Bl
cmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBjYWxs
VGFnKSk7CiAgICAgICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxMb29rdXBFeGNlcHRpb25I
YW5kbGVyRnJvbUNhbGxlckZyYW1lLCBGdW5jdGlvblB0cihsb29rdXBFeGNlcHRpb25IYW5kbGVy
RnJvbUNhbGxlckZyYW1lLCBsb29rdXBUYWcpKTsKLSAgICAgICAgICAgIGxpbmtCdWZmZXItPmxp
bmsoY2FsbEFyaXR5Rml4dXAsIEZ1bmN0aW9uUHRyKHZtLmdldENUSVN0dWIoYXJpdHlGaXh1cEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlKHB0clRhZyhBcml0eUZpeHVwUHRyVGFnLCAmdm0pLCBOZWFy
Q2FsbFB0clRhZykpKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbEFyaXR5Rml4
dXAsIEZ1bmN0aW9uUHRyKHZtLmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlKHB0clRhZyhBcml0eUZpeHVwUHRyVGFnLCAmdm0pLCBOZWFyQ29kZVB0clRhZykpKTsK
ICAgICAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsobWFpblBhdGhKdW1wcywgQ29kZUxvY2F0aW9u
TGFiZWwoYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbikpKTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgUHRyVGFnIGVudHJ5VGFnID0gcHRyVGFnKEZUTENv
ZGVQdHJUYWcsIGNvZGVCbG9jayk7Ci0gICAgICAgIHN0YXRlLmppdENvZGUtPmluaXRpYWxpemVB
ZGRyZXNzRm9yQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIocmV0YWdDb2RlUHRyPHZvaWQqPihz
dGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbiwgZW50cnlUYWcsIENvZGVFbnRyeVB0clRhZykpKTsKKyAg
ICAgICAgc3RhdGUuaml0Q29kZS0+aW5pdGlhbGl6ZUFkZHJlc3NGb3JDYWxsKE1hY3JvQXNzZW1i
bGVyQ29kZVB0cihyZXRhZ0NvZGVQdHI8dm9pZCo+KHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uLCBl
bnRyeVRhZywgQ29kZVB0clRhZykpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAK
QEAgLTIwMCw3ICsyMDAsNyBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgICAgICB9CiAg
ICAgICAgIGxpbmtCdWZmZXItPmxpbmsobWFpblBhdGhKdW1wLCBDb2RlTG9jYXRpb25MYWJlbChi
aXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uKSkpOwogCi0gICAgICAg
IHN0YXRlLmppdENvZGUtPmluaXRpYWxpemVBZGRyZXNzRm9yQ2FsbChsaW5rQnVmZmVyLT5sb2Nh
dGlvbk9mKHN0YXJ0LCBDb2RlRW50cnlQdHJUYWcpKTsKKyAgICAgICAgc3RhdGUuaml0Q29kZS0+
aW5pdGlhbGl6ZUFkZHJlc3NGb3JDYWxsKGxpbmtCdWZmZXItPmxvY2F0aW9uT2Yoc3RhcnQsIENv
ZGVQdHJUYWcpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIz
MDU4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzE3Miw3ICs3MTcyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhMaW5rQ2FsbFB0clRhZywgdm0pOwogICAg
ICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxpbmtDYWxsID0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGUobGlua1RhZywgTmVhckNhbGxQdHJUYWcpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZShsaW5rVGFnLCBOZWFyQ29kZVB0clRhZyk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKGxpbmtDYWxsKSk7
CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9u
cygKQEAgLTczNjgsNyArNzM2OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5r
QnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv
ZGVMb2NhdGlvbk5lYXJDYWxsIGNhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5l
YXJDYWxsKGNhbGwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbCBzbG93UGF0aExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRo
LCBOZWFyQ2FsbFB0clRhZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsIHNsb3dQYXRoTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xv
d1BhdGgsIE5lYXJDb2RlUHRyVGFnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBz
bG93UGF0aExvY2F0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC03
NDk0LDcgKzc0OTQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFB0clRhZyBsaW5r
VGFnID0gcHRyVGFnKExpbmtDYWxsUHRyVGFnLCB2bSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbGlua0NhbGwgPQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZShsaW5rVGFnLCBOZWFyQ2FsbFB0clRhZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2RlKGxpbmtU
YWcsIE5lYXJDb2RlUHRyVGFnKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHIobGlua0NhbGwpKTsKIAogICAgICAgICAgICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKApAQCAtNzc5NSw3ICs3Nzk1
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRh
ZyhMaW5rQ2FsbFB0clRhZywgdm0pOwogICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIGxpbmtDYWxsID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bS0+
Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUobGlua1RhZywg
TmVhckNhbGxQdHJUYWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLT5nZXRDVElT
dHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZShsaW5rVGFnLCBOZWFyQ29k
ZVB0clRhZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0Nh
bGwsIEZ1bmN0aW9uUHRyKGxpbmtDYWxsKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKQEAg
LTgwODAsNyArODA4MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgUHRyVGFnIGxp
bmtUYWcgPSBwdHJUYWcoTGlua0NhbGxQdHJUYWcsIHZtKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBsaW5rQ2FsbCA9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRD
b2RlKGxpbmtUYWcsIE5lYXJDYWxsUHRyVGFnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUobGlu
a1RhZywgTmVhckNvZGVQdHJUYWcpOwogICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cihsaW5rQ2FsbCkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxM
b2NhdGlvbnMoCkBAIC0xMzk5Myw3ICsxMzk5Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdlbmVyYXRvckp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXp5U2xvd1BhdGhHZW5lcmF0
aW9uVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZSh0aHVua1RhZywgTmVhckp1bXBQdHJUYWcp
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhenlTbG93
UGF0aEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2RlKHRodW5rVGFnLCBOZWFy
Q29kZVB0clRhZykpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxMYXp5U2xvd1BhdGg+IGxh
enlTbG93UGF0aCA9IHN0ZDo6bWFrZV91bmlxdWU8TGF6eVNsb3dQYXRoPigpOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCShy
ZXZpc2lvbiAyMzA1ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRD
b21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0OCw3ICs1NDgsNyBAQCBleHRlcm4gIkMi
IHZvaWQqIGNvbXBpbGVGVExPU1JFeGl0KEV4ZWNTCiAgICAgY29tcGlsZVN0dWIoZXhpdElELCBq
aXRDb2RlLCBleGl0LCAmdm0sIGNvZGVCbG9jaywgdGh1bmtUYWcpOwogCiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hKdW1wKAotICAgICAgICBleGl0LmNvZGVMb2NhdGlvbkZvclJlcGF0Y2go
Y29kZUJsb2NrKSwgQ29kZUxvY2F0aW9uTGFiZWwoZXhpdC5tX2NvZGUucmV0YWdnZWRDb2RlKHRo
dW5rVGFnLCBOZWFySnVtcFB0clRhZykpKTsKKyAgICAgICAgZXhpdC5jb2RlTG9jYXRpb25Gb3JS
ZXBhdGNoKGNvZGVCbG9jayksIENvZGVMb2NhdGlvbkxhYmVsKGV4aXQubV9jb2RlLnJldGFnZ2Vk
Q29kZSh0aHVua1RhZywgTmVhckNvZGVQdHJUYWcpKSk7CiAgICAgCiAgICAgcmV0dXJuIGV4aXQu
bV9jb2RlLnJldGFnZ2VkQ29kZSh0aHVua1RhZywgYml0d2lzZV9jYXN0PFB0clRhZz4oZXhlYykp
LmV4ZWN1dGFibGVBZGRyZXNzKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE9TUkV4aXRIYW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT1NSRXhpdEhhbmRsZS5jcHAJKHJldmlzaW9uIDIzMDU4NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdEhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUyLDcgKzUyLDcgQEAgdm9pZCBPU1JFeGl0SGFuZGxlOjplbWl0RXhpdFRodW5rKFN0YXRlJgog
ICAgICAgICAgICAgUHRyVGFnIHRodW5rVGFnID0gcHRyVGFnKEZUTE9TUkV4aXRQdHJUYWcsICZ2
bSk7CiAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoCiAgICAgICAgICAgICAgICAganVtcC5t
X2p1bXAsCi0gICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1Yihv
c3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUodGh1bmtUYWcsIE5l
YXJKdW1wUHRyVGFnKSkpOworICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdl
dENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2RlKHRo
dW5rVGFnLCBOZWFyQ29kZVB0clRhZykpKTsKICAgICAgICAgICAgIGlmIChjb21waWxhdGlvbikK
ICAgICAgICAgICAgICAgICBjb21waWxhdGlvbi0+YWRkT1NSRXhpdFNpdGUoeyBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YobXlMYWJlbCkuZXhlY3V0YWJsZUFkZHJlc3MoKSB9KTsKICAgICAgICAgfSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3Bw
CShyZXZpc2lvbiAyMzA1ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxNiw3ICs3MTYsNyBAQCB2b2lkIEFzc2Vt
Ymx5SGVscGVyczo6ZW1pdER1bWJWaXJ0dWFsQ2FsCiAgICAgICAgICAgICBQdHJUYWcgbGlua1Rh
ZyA9IHB0clRhZyhMaW5rVmlydHVhbENhbGxQdHJUYWcsICZ2bSk7CiAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbFRodW5rID0gdmlydHVhbFRodW5rRm9yKCZ2bSwgKmlu
Zm8pOwogICAgICAgICAgICAgaW5mby0+c2V0U2xvd1N0dWIoY3JlYXRlSklUU3R1YlJvdXRpbmUo
dmlydHVhbFRodW5rLCB2bSwgbnVsbHB0ciwgdHJ1ZSkpOwotICAgICAgICAgICAgbGlua0J1ZmZl
ci5saW5rKGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsKHZpcnR1YWxUaHVuay5yZXRhZ2dlZENvZGUo
bGlua1RhZywgTmVhckNhbGxQdHJUYWcpKSk7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmso
Y2FsbCwgQ29kZUxvY2F0aW9uTGFiZWwodmlydHVhbFRodW5rLnJldGFnZ2VkQ29kZShsaW5rVGFn
LCBOZWFyQ29kZVB0clRhZykpKTsKICAgICAgICAgfSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDIzMDU4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzM4LDcgKzczOCw3IEBAIHZvaWQgSklU
Ojpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGkKICAgICAgICAgICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAgICAgICAgIGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUikubGlua1Rv
KGJlZ2luTGFiZWwsIHRoaXMpOwogICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOwotICAgICAgICBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENUSVN0dWIo
YXJpdHlGaXh1cEdlbmVyYXRvcikucmV0YWdnZWRDb2RlKHB0clRhZyhBcml0eUZpeHVwUHRyVGFn
LCBtX3ZtKSwgTmVhckNhbGxQdHJUYWcpKTsKKyAgICAgICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5n
ZXRDVElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZShwdHJUYWcoQXJpdHlG
aXh1cFB0clRhZywgbV92bSksIE5lYXJDb2RlUHRyVGFnKSk7CiAKICNpZiAhQVNTRVJUX0RJU0FC
TEVECiAgICAgICAgIG1fYnl0ZWNvZGVPZmZzZXQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkPjo6bWF4KCk7IC8vIFJlc2V0IHRoaXMsIGluIG9yZGVyIHRvIGd1YXJkIGl0cyB1c2Ugd2l0
aCBBU1NFUlRzLgpAQCAtODY5LDE0ICs4NjksMTQgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjps
aW5rKCkKICAgICBKSVRDb2RlTWFwIGppdENvZGVNYXA7CiAgICAgZm9yICh1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6ZSgpOyArK2J5dGVj
b2RlT2Zmc2V0KSB7CiAgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNTZXQo
KSkgewotICAgICAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhDb2RlRW50cnlQdHJUYWcsIG1f
Y29kZUJsb2NrLCBieXRlY29kZU9mZnNldCk7CisgICAgICAgICAgICBQdHJUYWcgdGFnID0gcHRy
VGFnKENvZGVQdHJUYWcsIG1fY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCk7CiAgICAgICAgICAg
ICBqaXRDb2RlTWFwLmFwcGVuZChieXRlY29kZU9mZnNldCwgcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZihtX2xhYmVsc1tieXRlY29kZU9mZnNldF0sIHRhZykpOwogICAgICAgICB9CiAgICAgfQogICAg
IGppdENvZGVNYXAuZmluaXNoKCk7CiAgICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGVNYXAoV1RG
TW92ZShqaXRDb2RlTWFwKSk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgd2l0aEFyaXR5
Q2hlY2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fYXJpdHlDaGVjaywgQ29kZUVudHJ5V2l0
aEFyaXR5Q2hlY2tQdHJUYWcpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3aXRoQXJpdHlD
aGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9hcml0eUNoZWNrLCBDb2RlUHRyVGFnKTsK
IAogICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkgewogICAgICAgICBtX2Rpc2Fz
c2VtYmxlci0+ZHVtcChwYXRjaEJ1ZmZlcik7CkBAIC04OTIsNyArODkyLDcgQEAgQ29tcGlsYXRp
b25SZXN1bHQgSklUOjpsaW5rKCkKICAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2RlT3Jp
Z2luTWFwKHN0ZDo6bWFrZV91bmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFdURk1vdmUobV9wY1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIpLCBwYXRjaEJ1ZmZlcikpOwogICAgIAogICAgIENvZGVSZWYg
cmVzdWx0ID0gRklOQUxJWkVfQ09ERSgKLSAgICAgICAgcGF0Y2hCdWZmZXIsIENvZGVFbnRyeVB0
clRhZywKKyAgICAgICAgcGF0Y2hCdWZmZXIsIENvZGVQdHJUYWcsCiAgICAgICAgICJCYXNlbGlu
ZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2Rl
QmxvY2ssIEpJVENvZGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKICAgICAKICAgICBtX3ZtLT5t
YWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQtPmFkZCgKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjMwNTg3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjUyLDcgKzI1Miw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoT3Bjb2RlSUQK
IAogICAgIFB0clRhZyBsaW5rVGFnID0gcHRyVGFnKExpbmtDYWxsUHRyVGFnLCBtX3ZtKTsKICAg
ICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2Nh
dGlvbiA9Ci0gICAgICAgIGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRo
dW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUobGlua1RhZywgTmVhckNhbGxQdHJUYWcpKTsKKyAg
ICAgICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZShsaW5rVGFnLCBOZWFyQ29kZVB0clRhZykpOwogCiAgICAgaWYgKG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJn
cykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAkocmV2aXNpb24gMjMwNTg3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTIxLDEyICsxMjEsMTIgQEAgSklUQ29kZVdpdGhDb2RlUmVmOjp+SklUQ29kZVdpdGhD
b2RlUmVmKAogdm9pZCogSklUQ29kZVdpdGhDb2RlUmVmOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zm
c2V0KHNpemVfdCBvZmZzZXQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9yZWYpOwotICAgIGFz
c2VydElzVGFnZ2VkV2l0aChtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgQ29kZUVu
dHJ5UHRyVGFnKTsKKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGgobV9yZWYuY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCksIENvZGVQdHJUYWcpOwogICAgIGlmICghb2Zmc2V0KQogICAgICAgICByZXR1
cm4gbV9yZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAKLSAgICBjaGFyKiBleGVjdXRh
YmxlQWRkcmVzcyA9IHVudGFnQ29kZVB0cjxjaGFyKj4obV9yZWYuY29kZSgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCksIENvZGVFbnRyeVB0clRhZyk7Ci0gICAgcmV0dXJuIHRhZ0NvZGVQdHIoZXhlY3V0
YWJsZUFkZHJlc3MgKyBvZmZzZXQsIENvZGVFbnRyeVB0clRhZyk7CisgICAgY2hhciogZXhlY3V0
YWJsZUFkZHJlc3MgPSB1bnRhZ0NvZGVQdHI8Y2hhcio+KG1fcmVmLmNvZGUoKS5leGVjdXRhYmxl
QWRkcmVzcygpLCBDb2RlUHRyVGFnKTsKKyAgICByZXR1cm4gdGFnQ29kZVB0cihleGVjdXRhYmxl
QWRkcmVzcyArIG9mZnNldCwgQ29kZVB0clRhZyk7CiB9CiAKIHZvaWQqIEpJVENvZGVXaXRoQ29k
ZVJlZjo6ZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KQpAQCAtMjIzLDcgKzIyMyw3
IEBAIEpJVENvZGU6OkNvZGVQdHIgTmF0aXZlSklUQ29kZTo6YWRkcmVzc0YKICAgICBjYXNlIEFy
aXR5Q2hlY2tOb3RSZXF1aXJlZDoKICAgICAgICAgcmV0dXJuIG1fcmVmLmNvZGUoKTsKICAgICBj
YXNlIE11c3RDaGVja0FyaXR5OgotICAgICAgICByZXR1cm4gbV9yZWYucmV0YWdnZWRDb2RlKENv
ZGVFbnRyeVB0clRhZywgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcpOworICAgICAgICBy
ZXR1cm4gbV9yZWYuY29kZSgpOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIHJldHVybiBDb2RlUHRyKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZXMuaAkocmV2aXNpb24gMjMwNTg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw3ICsxMjAsNyBAQCBBTFdB
WVNfSU5MSU5FIEpJVDo6Q2FsbCBKSVQ6OmVtaXROYWtlZENhCiB7CiAgICAgQVNTRVJUKG1fYnl0
ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsgLy8g
VGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdl
bmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZU9mZnNldCBpcyBzZXQuCiAgICAgQ2FsbCBuYWtl
ZENhbGwgPSBuZWFyQ2FsbCgpOwotICAgIGFzc2VydElzTnVsbE9yVGFnZ2VkV2l0aChmdW5jdGlv
bi5leGVjdXRhYmxlQWRkcmVzcygpLCBOZWFyQ2FsbFB0clRhZyk7CisgICAgYXNzZXJ0SXNOdWxs
T3JUYWdnZWRXaXRoKGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCksIE5lYXJDb2RlUHRyVGFn
KTsKICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKG5ha2VkQ2FsbCwgbV9ieXRlY29kZU9m
ZnNldCwgRnVuY3Rpb25QdHIoZnVuY3Rpb24pKSk7CiAgICAgcmV0dXJuIG5ha2VkQ2FsbDsKIH0K
QEAgLTEyOSw3ICsxMjksNyBAQCBBTFdBWVNfSU5MSU5FIEpJVDo6Q2FsbCBKSVQ6OmVtaXROYWtl
ZFRhCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpKTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVk
IGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZU9mZnNl
dCBpcyBzZXQuCiAgICAgQ2FsbCBuYWtlZENhbGwgPSBuZWFyVGFpbENhbGwoKTsKLSAgICBhc3Nl
cnRJc051bGxPclRhZ2dlZFdpdGgoZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSwgTmVhckNh
bGxQdHJUYWcpOworICAgIGFzc2VydElzTnVsbE9yVGFnZ2VkV2l0aChmdW5jdGlvbi5leGVjdXRh
YmxlQWRkcmVzcygpLCBOZWFyQ29kZVB0clRhZyk7CiAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJl
Y29yZChuYWtlZENhbGwsIG1fYnl0ZWNvZGVPZmZzZXQsIEZ1bmN0aW9uUHRyKGZ1bmN0aW9uKSkp
OwogICAgIHJldHVybiBuYWtlZENhbGw7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE1hdGhJQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUTWF0aElDLmgJKHJldmlzaW9uIDIzMDU4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUTWF0aElDLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBtX2lubGluZVN0YXJ0LmRh
dGFMb2NhdGlvbigpLCBqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSwgSklUQ29t
cGlsYXRpb25NdXN0U3VjY2VlZCwgbmVlZHNCcmFuY2hDb21wYWN0aW9uKTsKICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGxpbmtCdWZmZXIuaXNWYWxpZCgpKTsKICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhqdW1wLCBDb2RlTG9jYXRpb25MYWJlbChtX2NvZGUuY29kZSgpKSk7Ci0gICAg
ICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIE5lYXJKdW1wUHRyVGFnLCAiSklUTWF0
aElDOiBsaW5raW5nIGNvbnN0YW50IGp1bXAgdG8gb3V0IG9mIGxpbmUgc3R1YiIpOworICAgICAg
ICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOZWFyQ29kZVB0clRhZywgIkpJVE1hdGhJ
QzogbGlua2luZyBjb25zdGFudCBqdW1wIHRvIG91dCBvZiBsaW5lIHN0dWIiKTsKICAgICAgICAg
fTsKIAogICAgICAgICBhdXRvIHJlcGxhY2VDYWxsID0gWyZdICgpIHsKQEAgLTE2OCw3ICsxNjgs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wVG9E
b25lLCBkb25lTG9jYXRpb24oKSk7CiAKICAgICAgICAgICAgICAgICAgICAgbV9jb2RlID0gRklO
QUxJWkVfQ09ERV9GT1IoCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIGxpbmtC
dWZmZXIsIE5lYXJKdW1wUHRyVGFnLCAiSklUTWF0aElDOiBnZW5lcmF0aW5nIG91dCBvZiBsaW5l
IGZhc3QgSUMgc25pcHBldCIpOworICAgICAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrLCBs
aW5rQnVmZmVyLCBOZWFyQ29kZVB0clRhZywgIkpJVE1hdGhJQzogZ2VuZXJhdGluZyBvdXQgb2Yg
bGluZSBmYXN0IElDIHNuaXBwZXQiKTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAoIWdlbmVy
YXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFdlIHdvbid0IG5lZWQgdG8gcmVnZW5lcmF0ZSwgc28gd2UgY2FuIHdpcmUgdGhlIHNs
b3cgcGF0aCBjYWxsCkBAIC0yMTAsNyArMjEwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgbGlu
a0J1ZmZlci5saW5rKHNsb3dQYXRoSnVtcExpc3QsIHNsb3dQYXRoU3RhcnRMb2NhdGlvbigpKTsK
IAogICAgICAgICAgICAgbV9jb2RlID0gRklOQUxJWkVfQ09ERV9GT1IoCi0gICAgICAgICAgICAg
ICAgY29kZUJsb2NrLCBsaW5rQnVmZmVyLCBOZWFySnVtcFB0clRhZywgIkpJVE1hdGhJQzogZ2Vu
ZXJhdGluZyBvdXQgb2YgbGluZSBJQyBzbmlwcGV0Iik7CisgICAgICAgICAgICAgICAgY29kZUJs
b2NrLCBsaW5rQnVmZmVyLCBOZWFyQ29kZVB0clRhZywgIkpJVE1hdGhJQzogZ2VuZXJhdGluZyBv
dXQgb2YgbGluZSBJQyBzbmlwcGV0Iik7CiAgICAgICAgIH0KIAogICAgICAgICBsaW5rSnVtcFRv
T3V0T2ZMaW5lU25pcHBldCgpOwpAQCAtMjE4LDcgKzIxOCw3IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgZmluYWxpemVJbmxpbmVDb2RlKGNvbnN0IE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUs
IExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCiAgICAgewotICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bCBzdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihzdGF0ZS5mYXN0UGF0aFN0YXJ0LCBOZWFy
SnVtcFB0clRhZyk7CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0ID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKHN0YXRlLmZhc3RQYXRoU3RhcnQsIE5lYXJDb2RlUHRyVGFnKTsKICAgICAg
ICAgbV9pbmxpbmVTdGFydCA9IHN0YXJ0OwogCiAgICAgICAgIG1faW5saW5lU2l6ZSA9IE1hY3Jv
QXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDIzMDU4NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNjks
NyArMTE2OSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXIKICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAubGFiZWxBdE9m
ZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CiAgICAgCiAgICAgYnlWYWxJbmZv
LT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgIG1fY29kZUJs
b2NrLCBwYXRjaEJ1ZmZlciwgTmVhckp1bXBQdHJUYWcsCisgICAgICAgIG1fY29kZUJsb2NrLCBw
YXRjaEJ1ZmZlciwgTmVhckNvZGVQdHJUYWcsCiAgICAgICAgICJCYXNlbGluZSBoYXNfaW5kZXhl
ZF9wcm9wZXJ0eSBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2Nv
ZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpOwogICAgIAogICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRp
b25MYWJlbChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIz
MDU4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwMTgsOSArMTAxOCw5IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGkKICAgICAgICAgICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25j
ZSgpKQogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0U2VlbigpOwogICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGxpbmtGb3IoZXhlY0NhbGxlZSwgKmNhbGxMaW5rSW5m
bywgbnVsbHB0ciwgaW50ZXJuYWxGdW5jdGlvbiwgY29kZVB0ciwgQ29kZUVudHJ5UHRyVGFnKTsK
KyAgICAgICAgICAgICAgICBsaW5rRm9yKGV4ZWNDYWxsZWUsICpjYWxsTGlua0luZm8sIG51bGxw
dHIsIGludGVybmFsRnVuY3Rpb24sIGNvZGVQdHIsIENvZGVQdHJUYWcpOwogCi0gICAgICAgICAg
ICB2b2lkKiBsaW5rZWRUYXJnZXQgPSByZXRhZ0NvZGVQdHIoY29kZVB0ci5leGVjdXRhYmxlQWRk
cmVzcygpLCBDb2RlRW50cnlQdHJUYWcsIGxpbmtlZFRhcmdldFRhZyk7CisgICAgICAgICAgICB2
b2lkKiBsaW5rZWRUYXJnZXQgPSByZXRhZ0NvZGVQdHIoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVz
cygpLCBDb2RlUHRyVGFnLCBsaW5rZWRUYXJnZXRUYWcpOwogICAgICAgICAgICAgcmV0dXJuIGVu
Y29kZVJlc3VsdChsaW5rZWRUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5r
SW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVw
VGhlRnJhbWUpKTsKICAgICAgICAgfQogICAgICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKQEAg
LTEwMzMsMTEgKzEwMzMsOSBAQCBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVy
YXRpCiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cjsKICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IG51bGxwdHI7Ci0gICAgUHRyVGFnIGNvZGVUYWcgPSBOb1B0clRhZzsKLSAg
ICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkgeworICAgIGlmIChleGVjdXRhYmxl
LT5pc0hvc3RGdW5jdGlvbigpKQogICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50cnlw
b2ludEZvcihraW5kLCBNdXN0Q2hlY2tBcml0eSk7Ci0gICAgICAgIGNvZGVUYWcgPSBDb2RlRW50
cnlXaXRoQXJpdHlDaGVja1B0clRhZzsKLSAgICB9IGVsc2UgeworICAgIGVsc2UgewogICAgICAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogCiAgICAgICAgIGF1dG8gaGFuZGxlVGhy
b3dFeGNlcHRpb24gPSBbJl0gKCkgewpAQCAtMTA1OCwyMSArMTA1NiwxOCBAQCBTbG93UGF0aFJl
dHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVyYXRpCiAgICAgICAgICAgICByZXR1cm4gaGFuZGxl
VGhyb3dFeGNlcHRpb24oKTsKICAgICAgICAgY29kZUJsb2NrID0gKmNvZGVCbG9ja1Nsb3Q7CiAg
ICAgICAgIEFyaXR5Q2hlY2tNb2RlIGFyaXR5OwotICAgICAgICBpZiAoZXhlY0NhbGxlZS0+YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby0+aXNWYXJhcmdzKCkpIHsKKyAgICAg
ICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSB8fCBjYWxsTGlua0luZm8t
PmlzVmFyYXJncygpKQogICAgICAgICAgICAgYXJpdHkgPSBNdXN0Q2hlY2tBcml0eTsKLSAgICAg
ICAgICAgIGNvZGVUYWcgPSBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZzsKLSAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgYXJpdHkgPSBBcml0eUNoZWNrTm90
UmVxdWlyZWQ7Ci0gICAgICAgICAgICBjb2RlVGFnID0gQ29kZUVudHJ5UHRyVGFnOwotICAgICAg
ICB9CiAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Io
a2luZCwgYXJpdHkpOwogICAgIH0KICAgICBpZiAoIWNhbGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkK
ICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRTZWVuKCk7CiAgICAgZWxzZQotICAgICAgICBsaW5r
Rm9yKGV4ZWNDYWxsZWUsICpjYWxsTGlua0luZm8sIGNvZGVCbG9jaywgY2FsbGVlLCBjb2RlUHRy
LCBjb2RlVGFnKTsKKyAgICAgICAgbGlua0ZvcihleGVjQ2FsbGVlLCAqY2FsbExpbmtJbmZvLCBj
b2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0ciwgQ29kZVB0clRhZyk7CiAKLSAgICByZXR1cm4gZW5j
b2RlUmVzdWx0KGNvZGVQdHIucmV0YWdnZWQoY29kZVRhZywgbGlua2VkVGFyZ2V0VGFnKS5leGVj
dXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNh
bGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1l
KSk7CisgICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLnJldGFnZ2VkKENvZGVQdHJUYWcs
IGxpbmtlZFRhcmdldFRhZykuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VU
aGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTGlua0RpcmVjdENhbGwoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbywgSlNGdW5jdGlvbiogY2FsbGVlKQpAQCAtMTEwNSw3ICsxMTAwLDcgQEAgdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtEaXJlY3RDYQogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBjb2RlUHRyOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbnVsbHB0cjsKICAgICBpZiAo
ZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFi
bGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgTXVzdENoZWNrQXJpdHkpLnJldGFnZ2VkKENvZGVFbnRy
eVdpdGhBcml0eUNoZWNrUHRyVGFnLCBOZWFyQ2FsbFB0clRhZyk7CisgICAgICAgIGNvZGVQdHIg
PSBleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIE11c3RDaGVja0FyaXR5KS5yZXRhZ2dl
ZChDb2RlUHRyVGFnLCBOZWFyQ29kZVB0clRhZyk7CiAgICAgZWxzZSB7CiAgICAgICAgIEZ1bmN0
aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25F
eGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CiAKQEAgLTExMTcsOSArMTExMiw5IEBAIHZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25MaW5rRGlyZWN0Q2EKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgdW5zaWduZWQgYXJndW1lbnRTdGFja1Nsb3RzID0gY2FsbExpbmtJbmZvLT5tYXhOdW1B
cmd1bWVudHMoKTsKICAgICAgICAgaWYgKGFyZ3VtZW50U3RhY2tTbG90cyA8IHN0YXRpY19jYXN0
PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKQotICAgICAgICAgICAgY29kZVB0
ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBNdXN0Q2hlY2tBcml0
eSkucmV0YWdnZWQoQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcsIE5lYXJDYWxsUHRyVGFn
KTsKKyAgICAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRG
b3Ioa2luZCwgTXVzdENoZWNrQXJpdHkpLnJldGFnZ2VkKENvZGVQdHJUYWcsIE5lYXJDb2RlUHRy
VGFnKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0
YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBBcml0eUNoZWNrTm90UmVxdWlyZWQpLnJldGFnZ2Vk
KENvZGVFbnRyeVB0clRhZywgTmVhckNhbGxQdHJUYWcpOworICAgICAgICAgICAgY29kZVB0ciA9
IGZ1bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBBcml0eUNoZWNrTm90UmVx
dWlyZWQpLnJldGFnZ2VkKENvZGVQdHJUYWcsIE5lYXJDb2RlUHRyVGFnKTsKICAgICB9CiAgICAg
CiAgICAgbGlua0RpcmVjdEZvcihleGVjLCAqY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNvZGVQ
dHIpOwpAQCAtMTE0MSw3ICsxMTM2LDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0
dWFsRm9yV2l0aAogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4o
KnZtLCBjYWxsZWVBc1ZhbHVlKSkgewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IGNvZGVQdHIgPSB2bS0+Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Ioa2luZCk7
CiAgICAgICAgICAgICBBU1NFUlQoISFjb2RlUHRyKTsKLSAgICAgICAgICAgIHJldHVybiBlbmNv
ZGVSZXN1bHQoY29kZVB0ci5yZXRhZ2dlZChDb2RlRW50cnlQdHJUYWcsIHJlc3VsdFRhZykuZXhl
Y3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5j
YWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFt
ZSkpOworICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLnJldGFnZ2VkKENv
ZGVQdHJUYWcsIHJlc3VsdFRhZykuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1
c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOwogICAgICAgICB9CiAgICAgICAgIHRocm93U2Nv
cGUucmVsZWFzZSgpOwogICAgICAgICByZXR1cm4gaGFuZGxlSG9zdENhbGwoZXhlY0NhbGxlZSwg
Y2FsbGVlQXNWYWx1ZSwgY2FsbExpbmtJbmZvLCByZXN1bHRUYWcpOwpAQCAtMTE3MSw3ICsxMTY2
LDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0dWFsRm9yV2l0aAogICAgICAgICB9
CiAgICAgfQogICAgIHJldHVybiBlbmNvZGVSZXN1bHQoZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZv
cigKLSAgICAgICAga2luZCwgTXVzdENoZWNrQXJpdHkpLnJldGFnZ2VkKENvZGVFbnRyeVdpdGhB
cml0eUNoZWNrUHRyVGFnLCByZXN1bHRUYWcpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAg
IGtpbmQsIE11c3RDaGVja0FyaXR5KS5yZXRhZ2dlZChDb2RlUHRyVGFnLCByZXN1bHRUYWcpLmV4
ZWN1dGFibGVBZGRyZXNzKCksCiAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxM
aW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBL
ZWVwVGhlRnJhbWUpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDIzMDU4NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
MSw3ICs5MSw3IEBAIEpJVDo6Q29kZVJlZiBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmUKICAg
ICBqaXQucmV0KCk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JB
TF9USFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5lYXJD
YWxsUHRyVGFnLCAiU3RyaW5nIGdldF9ieV92YWwgc3R1YiIpOworICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCBOZWFyQ29kZVB0clRhZywgIlN0cmluZyBnZXRfYnlfdmFsIHN0
dWIiKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTI4NSw3ICsxMjg1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlR2V0QnlWYWwoQnlWYWxJbgogICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJ
bmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0Rv
bmUpKTsKICAgICAKICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9G
T1JfU1RVQigKLSAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBOZWFySnVtcFB0clRh
ZywKKyAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBOZWFyQ29kZVB0clRhZywKICAg
ICAgICAgIkJhc2VsaW5lIGdldF9ieV92YWwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIs
IHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKTsK
ICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5iYWRUeXBl
SnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNv
ZGUoKSkpOwpAQCAtMTMxNyw3ICsxMzE3LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0
QnlWYWxXaXRoQ2FjaAogICAgIGdlbi5maW5hbGl6ZShwYXRjaEJ1ZmZlcik7CiAKICAgICBieVZh
bEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBOZWFySnVtcFB0clRhZywKKyAgICAgICAgbV9jb2RlQmxv
Y2ssIHBhdGNoQnVmZmVyLCBOZWFyQ29kZVB0clRhZywKICAgICAgICAgIkJhc2VsaW5lIGdldF9i
eV92YWwgd2l0aCBjYWNoZWQgcHJvcGVydHkgbmFtZSAnJXMnIHN0dWIgZm9yICVzLCByZXR1cm4g
cG9pbnQgJXAiLCBwcm9wZXJ0eU5hbWUuaW1wbCgpLT51dGY4KCkuZGF0YSgpLCB0b0NTdHJpbmco
Km1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSk7CiAgICAgYnlWYWxJ
bmZvLT5zdHViSW5mbyA9IGdlbi5zdHViSW5mbygpOwogCkBAIC0xMzcyLDEyICsxMzcyLDEyIEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW4KICAgICBib29sIGlzRGly
ZWN0ID0gSW50ZXJwcmV0ZXI6OmdldE9wY29kZUlEKGN1cnJlbnRJbnN0cnVjdGlvbi0+dS5vcGNv
ZGUpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwogICAgIGlmICghaXNEaXJlY3QpIHsKICAgICAg
ICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAg
ICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIE5lYXJKdW1wUHRyVGFnLAorICAgICAg
ICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBOZWFyQ29kZVB0clRhZywKICAgICAgICAg
ICAgICJCYXNlbGluZSBwdXRfYnlfdmFsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0
b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSk7CiAg
ICAgICAgIAogICAgIH0gZWxzZSB7CiAgICAgICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBG
SU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVm
ZmVyLCBOZWFySnVtcFB0clRhZywKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZl
ciwgTmVhckNvZGVQdHJUYWcsCiAgICAgICAgICAgICAiQmFzZWxpbmUgcHV0X2J5X3ZhbF9kaXJl
Y3Qgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2sp
LmRhdGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKTsKICAgICB9CiAgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVs
KGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKQEAgLTE0MDcsNyArMTQw
Nyw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2gKICAgICBnZW4u
ZmluYWxpemUocGF0Y2hCdWZmZXIpOwogCiAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJ
TkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwg
TmVhckp1bXBQdHJUYWcsCisgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgTmVhckNv
ZGVQdHJUYWcsCiAgICAgICAgICJCYXNlbGluZSBwdXRfYnlfdmFsJXMgd2l0aCBjYWNoZWQgcHJv
cGVydHkgbmFtZSAnJXMnIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCAocHV0S2luZCA9
PSBEaXJlY3QpID8gIl9kaXJlY3QiIDogIiIsIHByb3BlcnR5TmFtZS5pbXBsKCktPnV0ZjgoKS5k
YXRhKCksIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1
ZSgpKTsKICAgICBieVZhbEluZm8tPnN0dWJJbmZvID0gZ2VuLnN0dWJJbmZvKCk7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAJKHJldmlzaW9uIDIzMDU4NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTI0LDcgKzEyNCw3IEBAIE5hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1
bmN0aW8KICAgICBSZWZQdHI8SklUQ29kZT4gZm9yQ2FsbDsKICAgICBpZiAoZ2VuZXJhdG9yKSB7
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBlbnRyeSA9IGdlbmVyYXRvcih2bSk7Ci0g
ICAgICAgIGZvckNhbGwgPSBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShlbnRyeSwgZW50cnku
cmV0YWdnZWRDb2RlKENvZGVFbnRyeVB0clRhZywgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJU
YWcpLCBKSVRDb2RlOjpIb3N0Q2FsbFRodW5rKSk7CisgICAgICAgIGZvckNhbGwgPSBhZG9wdFJl
ZihuZXcgRGlyZWN0SklUQ29kZShlbnRyeSwgZW50cnkuY29kZSgpLCBKSVRDb2RlOjpIb3N0Q2Fs
bFRodW5rKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGZvckNhbGwgPSBhZG9wdFJlZihuZXcgTmF0
aXZlSklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJl
ZihjdGlOYXRpdmVDYWxsKHZtKSksIEpJVENvZGU6Okhvc3RDYWxsVGh1bmspKTsKICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMjMwNTg3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjkxLDcgKzY5MSw3IEBAIHZvaWQgcmVwYXRjaEluKAogCiBzdGF0aWMgdm9pZCBsaW5rU2xv
d0ZvcihWTSosIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgY29kZVJlZiwgUHRyVGFnIGxpbmtUYWcpCiB7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0
Y2hOZWFyQ2FsbChjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKCksIENvZGVMb2NhdGlv
bkxhYmVsKGNvZGVSZWYucmV0YWdnZWRDb2RlKGxpbmtUYWcsIE5lYXJDYWxsUHRyVGFnKSkpOwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbExpbmtJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbigpLCBDb2RlTG9jYXRpb25MYWJlbChjb2RlUmVmLnJldGFnZ2VkQ29kZShsaW5r
VGFnLCBOZWFyQ29kZVB0clRhZykpKTsKIH0KIAogc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0q
IHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9y
LCBQdHJUYWcgbGlua1RhZykKQEAgLTc0Myw3ICs3NDMsNyBAQCB2b2lkIGxpbmtGb3IoCiAgICAg
aWYgKHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihjYWxsZXJDb2RlQmxvY2spKQogICAgICAgICBk
YXRhTG9nKCJMaW5raW5nIGNhbGwgaW4gIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2Nr
LCBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpKSwgIiB0byAiLCBwb2ludGVyRHVtcChjYWxsZWVD
b2RlQmxvY2spLCAiLCBlbnRyeXBvaW50IGF0ICIsIGNvZGVQdHIsICJcbiIpOwogCi0gICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCks
IENvZGVMb2NhdGlvbkxhYmVsKGNvZGVQdHIucmV0YWdnZWQoY29kZVRhZywgTmVhckNhbGxQdHJU
YWcpKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTGlua0luZm8u
aG90UGF0aE90aGVyKCksIENvZGVMb2NhdGlvbkxhYmVsKGNvZGVQdHIucmV0YWdnZWQoY29kZVRh
ZywgTmVhckNvZGVQdHJUYWcpKSk7CiAKICAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQogICAgICAg
ICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUsICZjYWxsTGlu
a0luZm8pOwpAQCAtMTEwMCw3ICsxMTAwLDcgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAog
ICAgICAgICB2b2lkKiB0YXJnZXQgPSBpc1RhaWxDYWxsID8gY2FsbFRvQ29kZVB0ci5jb2RlUHRy
LmRhdGFMb2NhdGlvbigpIDogY2FsbFRvQ29kZVB0ci5jb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNz
KCk7CiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbFRvQ29kZVB0ci5jYWxsLCBGdW5jdGlv
blB0cihNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0
YXJnZXQpKSk7CiAjZWxzZQotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxUb0NvZGVQdHIu
Y2FsbCwgRnVuY3Rpb25QdHIoY2FsbFRvQ29kZVB0ci5jb2RlUHRyLnJldGFnZ2VkKENvZGVFbnRy
eVB0clRhZywgTmVhckNhbGxQdHJUYWcpKSk7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2Fs
bFRvQ29kZVB0ci5jYWxsLCBGdW5jdGlvblB0cihjYWxsVG9Db2RlUHRyLmNvZGVQdHIucmV0YWdn
ZWQoQ29kZVB0clRhZywgTmVhckNvZGVQdHJUYWcpKSk7CiAjZW5kaWYKICAgICB9CiAgICAgaWYg
KGlzV2ViQXNzZW1ibHkgfHwgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNhbGxlckNvZGVCbG9j
ay0+aml0VHlwZSgpKSkKQEAgLTExMDgsMTEgKzExMDgsMTEgQEAgdm9pZCBsaW5rUG9seW1vcnBo
aWNDYWxsKAogICAgIGVsc2UKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlu
a0luZm8uaG90UGF0aE90aGVyKCkubGFiZWxBdE9mZnNldCgwKSk7CiAgICAgUHRyVGFnIGxpbmtU
YWcgPSBwdHJUYWcoTGlua1BvbHltb3JwaGljQ2FsbFB0clRhZywgJnZtKTsKLSAgICBwYXRjaEJ1
ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIobGlua1BvbHlt
b3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUobGlua1RhZywgTmVhckNhbGxQ
dHJUYWcpKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbCh2
bS5nZXRDVElTdHViKGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRD
b2RlKGxpbmtUYWcsIE5lYXJDb2RlUHRyVGFnKSkpOwogICAgIAogICAgIGF1dG8gc3R1YlJvdXRp
bmUgPSBhZG9wdFJlZigqbmV3IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKAogICAgICAgICBG
SU5BTElaRV9DT0RFX0ZPUigKLSAgICAgICAgICAgIGNhbGxlckNvZGVCbG9jaywgcGF0Y2hCdWZm
ZXIsIE5lYXJKdW1wUHRyVGFnLAorICAgICAgICAgICAgY2FsbGVyQ29kZUJsb2NrLCBwYXRjaEJ1
ZmZlciwgTmVhckNvZGVQdHJUYWcsCiAgICAgICAgICAgICAiUG9seW1vcnBoaWMgY2FsbCBzdHVi
IGZvciAlcywgcmV0dXJuIHBvaW50ICVwLCB0YXJnZXRzICVzIiwKICAgICAgICAgICAgICAgICBp
c1dlYkFzc2VtYmx5ID8gIldlYkFzc2VtYmx5IiA6IHRvQ1N0cmluZygqY2FsbGVyQ29kZUJsb2Nr
KS5kYXRhKCksIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKS5sYWJlbEF0T2Zmc2V0
KDApLmV4ZWN1dGFibGVBZGRyZXNzKCksCiAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKGxpc3RE
dW1wKGNhbGxDYXNlcykpLmRhdGEoKSksCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1NwZWNpYWxpemVkVGh1bmtKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAkocmV2aXNpb24gMjMwNTg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgJKHdvcmtpbmcgY29weSkK
QEAgLTE3MCw3ICsxNzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHBhdGNoQnVm
ZmVyLmxpbmsobV9mYWlsdXJlcywgQ29kZUxvY2F0aW9uTGFiZWwoZmFsbGJhY2spKTsKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NhbGxzLnNpemUoKTsgaSsrKQogICAg
ICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxsc1tpXS5maXJzdCwgbV9jYWxsc1tp
XS5zZWNvbmQpOwotICAgICAgICAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIs
IENvZGVFbnRyeVB0clRhZywgIlNwZWNpYWxpemVkIHRodW5rIGZvciAlcyIsIHRodW5rS2luZCk7
CisgICAgICAgICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgQ29kZVB0clRh
ZywgIlNwZWNpYWxpemVkIHRodW5rIGZvciAlcyIsIHRodW5rS2luZCk7CiAgICAgICAgIH0KIAog
ICAgICAgICAvLyBBc3N1bWVzIHRoYXQgdGhlIHRhcmdldCBmdW5jdGlvbiB1c2VzIGZwUmVnaXN0
ZXIwIGFzIHRoZSBmaXJzdCBhcmd1bWVudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMjMwNTg3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzIsMTYgKzIzMiwxNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbFRodW5rRm9yKFZN
CiAKICAgICAvLyBNYWtlIGEgdGFpbCBjYWxsLiBUaGlzIHdpbGwgcmV0dXJuIGJhY2sgdG8gSklU
IGNvZGUuCiAgICAgSlNJbnRlcmZhY2VKSVQ6OkxhYmVsIGNhbGxDb2RlKGppdC5sYWJlbCgpKTsK
LSAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZWdUNCwgQ29kZUVudHJ5
V2l0aEFyaXR5Q2hlY2tQdHJUYWcpOworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQ
UkluZm86OnJlZ1Q0LCBDb2RlUHRyVGFnKTsKICAgICBpZiAoY2FsbExpbmtJbmZvLmlzVGFpbENh
bGwoKSkgewogICAgICAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUklu
Zm86OnJlZ1QwKTsKICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coR1BSSW5mbzo6
cmVnVDQpOwogICAgIH0KLSAgICBqaXQuanVtcChHUFJJbmZvOjpyZWdUNCwgQ29kZUVudHJ5V2l0
aEFyaXR5Q2hlY2tQdHJUYWcpOworICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1Q0LCBDb2RlUHRy
VGFnKTsKIAogICAgIG5vdEpTRnVuY3Rpb24ubGluaygmaml0KTsKICAgICBzbG93Q2FzZS5hcHBl
bmQoaml0LmJyYW5jaElmTm90VHlwZShHUFJJbmZvOjpyZWdUMCwgSW50ZXJuYWxGdW5jdGlvblR5
cGUpKTsKLSAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcyA9IHZtLT5nZXRDVElJbnRlcm5hbEZ1
bmN0aW9uVHJhbXBvbGluZUZvcihjYWxsTGlua0luZm8uc3BlY2lhbGl6YXRpb25LaW5kKCkpLnJl
dGFnZ2VkKENvZGVFbnRyeVB0clRhZywgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcpLmV4
ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3MgPSB2bS0+Z2V0
Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoY2FsbExpbmtJbmZvLnNwZWNpYWxpemF0
aW9uS2luZCgpKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIGppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihleGVjdXRhYmxlQWRkcmVzcyksIEdQUkluZm86OnJlZ1Q0KTsKICAg
ICBqaXQuanVtcCgpLmxpbmtUbyhjYWxsQ29kZSwgJmppdCk7CiAKQEAgLTMwNyw5ICszMDcsOSBA
QCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUZvckdlCiAgICAgaWYgKHRodW5r
RnVuY3Rpb25UeXBlID09IFRodW5rRnVuY3Rpb25UeXBlOjpKU0Z1bmN0aW9uKSB7CiAgICAgICAg
IGppdC5sb2FkUHRyKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpyZWdU
MSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpLCBKU0ludGVyZmFjZUpJVDo6cmVn
VDEpOwogICAgICAgICBqaXQueG9yUHRyKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKEpT
RnVuY3Rpb25Qb2lzb246OmtleSgpKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxKTsKLSAgICAgICAg
aml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBl
eGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvbiksIENvZGVFbnRyeVB0clRhZyk7CisgICAgICAgIGpp
dC5jYWxsKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgZXhl
Y3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pLCBDb2RlUHRyVGFnKTsKICAgICB9IGVsc2UKLSAgICAg
ICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1Qx
LCBJbnRlcm5hbEZ1bmN0aW9uOjpvZmZzZXRPZk5hdGl2ZUZ1bmN0aW9uRm9yKGtpbmQpKSwgQ29k
ZUVudHJ5UHRyVGFnKTsKKyAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3Mo
SlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBJbnRlcm5hbEZ1bmN0aW9uOjpvZmZzZXRPZk5hdGl2ZUZ1
bmN0aW9uRm9yKGtpbmQpKSwgQ29kZVB0clRhZyk7CiAKICAgICBqaXQuYWRkUHRyKEpTSW50ZXJm
YWNlSklUOjpUcnVzdGVkSW1tMzIoOCksIEpTSW50ZXJmYWNlSklUOjpzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAKQEAgLTMyOCw3ICszMjgsNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IG5hdGl2ZUZvckdlCiAgICAgICAgIGppdC5sb2FkUHRyKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNz
KFg4NlJlZ2lzdGVyczo6ZXNpLCBJbnRlcm5hbEZ1bmN0aW9uOjpvZmZzZXRPZk5hdGl2ZUZ1bmN0
aW9uRm9yKGtpbmQpKSwgWDg2UmVnaXN0ZXJzOjpyOSk7CiAgICAgaml0Lm1vdmUoSlNJbnRlcmZh
Y2VKSVQ6OlRydXN0ZWRJbW02NChOYXRpdmVDb2RlUG9pc29uOjprZXkoKSksIFg4NlJlZ2lzdGVy
czo6ZXNpKTsKICAgICBqaXQueG9yNjQoWDg2UmVnaXN0ZXJzOjplc2ksIFg4NlJlZ2lzdGVyczo6
cjkpOwotICAgIGppdC5jYWxsKFg4NlJlZ2lzdGVyczo6cjksIENvZGVFbnRyeVB0clRhZyk7Cisg
ICAgaml0LmNhbGwoWDg2UmVnaXN0ZXJzOjpyOSwgQ29kZVB0clRhZyk7CiAKICNlbHNlCiAgICAg
Ly8gQ2FsbGluZyBjb252ZW50aW9uOiAgICAgIGYoZWN4LCBlZHgsIHI4LCByOSwgLi4uKTsKQEAg
LTM0Myw5ICszNDMsOSBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUZvckdl
CiAgICAgaWYgKHRodW5rRnVuY3Rpb25UeXBlID09IFRodW5rRnVuY3Rpb25UeXBlOjpKU0Z1bmN0
aW9uKSB7CiAgICAgICAgIGppdC5sb2FkUHRyKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKFg4NlJl
Z2lzdGVyczo6ZWR4LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksIFg4NlJlZ2lz
dGVyczo6cjkpOwogICAgICAgICBqaXQueG9yUHRyKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1t
UHRyKEpTRnVuY3Rpb25Qb2lzb246OmtleSgpKSwgWDg2UmVnaXN0ZXJzOjpyOSk7Ci0gICAgICAg
IGppdC5jYWxsKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKFg4NlJlZ2lzdGVyczo6cjksIGV4ZWN1
dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSwgQ29kZUVudHJ5UHRyVGFnKTsKKyAgICAgICAgaml0LmNh
bGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoWDg2UmVnaXN0ZXJzOjpyOSwgZXhlY3V0YWJsZU9m
ZnNldFRvRnVuY3Rpb24pLCBDb2RlUHRyVGFnKTsKICAgICB9IGVsc2UKLSAgICAgICAgaml0LmNh
bGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplZHgsIEludGVybmFsRnVu
Y3Rpb246Om9mZnNldE9mTmF0aXZlRnVuY3Rpb25Gb3Ioa2luZCkpLCBDb2RlRW50cnlQdHJUYWcp
OworICAgICAgICBqaXQuY2FsbChKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhYODZSZWdpc3RlcnM6
OmVkeCwgSW50ZXJuYWxGdW5jdGlvbjo6b2Zmc2V0T2ZOYXRpdmVGdW5jdGlvbkZvcihraW5kKSks
IENvZGVQdHJUYWcpOwogCiAgICAgaml0LmFkZFB0cihKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZElt
bTMyKDQgKiBzaXplb2YoaW50NjRfdCkpLCBKU0ludGVyZmFjZUpJVDo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIpOwogI2VuZGlmCkBAIC0zNjcsNyArMzY3LDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBuYXRpdmVGb3JHZQogICAgICAgICBqaXQubG9hZFB0cihKU0ludGVyZmFjZUpJVDo6
QWRkcmVzcyhBUk02NFJlZ2lzdGVyczo6eDEsIEludGVybmFsRnVuY3Rpb246Om9mZnNldE9mTmF0
aXZlRnVuY3Rpb25Gb3Ioa2luZCkpLCBBUk02NFJlZ2lzdGVyczo6eDIpOwogICAgIGppdC5tb3Zl
KEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tNjQoTmF0aXZlQ29kZVBvaXNvbjo6a2V5KCkpLCBB
Uk02NFJlZ2lzdGVyczo6eDEpOwogICAgIGppdC54b3I2NChBUk02NFJlZ2lzdGVyczo6eDEsIEFS
TTY0UmVnaXN0ZXJzOjp4Mik7Ci0gICAgaml0LmNhbGwoQVJNNjRSZWdpc3RlcnM6OngyLCBDb2Rl
RW50cnlQdHJUYWcpOworICAgIGppdC5jYWxsKEFSTTY0UmVnaXN0ZXJzOjp4MiwgQ29kZVB0clRh
Zyk7CiAKICNlbGlmIENQVShBUk0pIHx8IENQVShNSVBTKQogI2lmIENQVShNSVBTKQpAQCAtMzgz
LDkgKzM4Myw5IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2UKICAg
ICBpZiAodGh1bmtGdW5jdGlvblR5cGUgPT0gVGh1bmtGdW5jdGlvblR5cGU6OkpTRnVuY3Rpb24p
IHsKICAgICAgICAgaml0LmxvYWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZh
Y2VKSVQ6OmFyZ3VtZW50R1BSMSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpLCBK
U0ludGVyZmFjZUpJVDo6cmVnVDIpOwogICAgICAgICBqaXQueG9yUHRyKEpTSW50ZXJmYWNlSklU
OjpUcnVzdGVkSW1tUHRyKEpTRnVuY3Rpb25Qb2lzb246OmtleSgpKSwgSlNJbnRlcmZhY2VKSVQ6
OnJlZ1QyKTsKLSAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRl
cmZhY2VKSVQ6OnJlZ1QyLCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvbiksIENvZGVFbnRyeVB0
clRhZyk7CisgICAgICAgIGppdC5jYWxsKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50ZXJm
YWNlSklUOjpyZWdUMiwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pLCBDb2RlUHRyVGFnKTsK
ICAgICB9IGVsc2UKLSAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJ
bnRlcmZhY2VKSVQ6OmFyZ3VtZW50R1BSMSwgSW50ZXJuYWxGdW5jdGlvbjo6b2Zmc2V0T2ZOYXRp
dmVGdW5jdGlvbkZvcihraW5kKSksIENvZGVFbnRyeVB0clRhZyk7CisgICAgICAgIGppdC5jYWxs
KEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjphcmd1bWVudEdQUjEsIElu
dGVybmFsRnVuY3Rpb246Om9mZnNldE9mTmF0aXZlRnVuY3Rpb25Gb3Ioa2luZCkpLCBDb2RlUHRy
VGFnKTsKIAogI2lmIENQVShNSVBTKQogICAgIC8vIFJlc3RvcmUgc3RhY2sgc3BhY2UKQEAgLTQ0
MSw3ICs0NDEsNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUZvckdlCiAg
ICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKIAogICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KHBhdGNoQnVmZmVyLCBDb2RlRW50cnlQdHJUYWcsICIlcyAlcyVzIHRyYW1wb2xpbmUiLCB0aHVu
a0Z1bmN0aW9uVHlwZSA9PSBUaHVua0Z1bmN0aW9uVHlwZTo6SlNGdW5jdGlvbiA/ICJuYXRpdmUi
IDogImludGVybmFsIiwgZW50cnlUeXBlID09IEVudGVyVmlhSnVtcFdpdGhTYXZlZFRhZ3MgPyAi
VGFpbCBXaXRoIFNhdmVkIFRhZ3MgIiA6IGVudHJ5VHlwZSA9PSBFbnRlclZpYUp1bXBXaXRob3V0
U2F2ZWRUYWdzID8gIlRhaWwgV2l0aG91dCBTYXZlZCBUYWdzICIgOiAiIiwgdG9DU3RyaW5nKGtp
bmQpLmRhdGEoKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIENvZGVQ
dHJUYWcsICIlcyAlcyVzIHRyYW1wb2xpbmUiLCB0aHVua0Z1bmN0aW9uVHlwZSA9PSBUaHVua0Z1
bmN0aW9uVHlwZTo6SlNGdW5jdGlvbiA/ICJuYXRpdmUiIDogImludGVybmFsIiwgZW50cnlUeXBl
ID09IEVudGVyVmlhSnVtcFdpdGhTYXZlZFRhZ3MgPyAiVGFpbCBXaXRoIFNhdmVkIFRhZ3MgIiA6
IGVudHJ5VHlwZSA9PSBFbnRlclZpYUp1bXBXaXRob3V0U2F2ZWRUYWdzID8gIlRhaWwgV2l0aG91
dCBTYXZlZCBUYWdzICIgOiAiIiwgdG9DU3RyaW5nKGtpbmQpLmRhdGEoKSk7CiB9CiAKIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVDYWxsR2VuZXJhdG9yKFZNKiB2bSkKQEAgLTEyMTcsOCAr
MTIxNyw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBib3VuZFRoaXNOb0FyZ3NGdW4KICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChKSVRDb2RlUG9pc29uOjprZXkoKSks
IEdQUkluZm86OnJlZ1QxKTsKICAgICBqaXQueG9yNjQoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86
OnJlZ1QwKTsKICNlbmRpZgotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86
OnJlZ1QwLCBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZyk7Ci0gICAgaml0LmNhbGwoR1BS
SW5mbzo6cmVnVDAsIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnKTsKKyAgICBlbWl0UG9p
bnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZWdUMCwgQ29kZVB0clRhZyk7CisgICAgaml0
LmNhbGwoR1BSSW5mbzo6cmVnVDAsIENvZGVQdHJUYWcpOwogCiAgICAgaml0LmVtaXRGdW5jdGlv
bkVwaWxvZ3VlKCk7CiAgICAgaml0LnJldCgpOwpAQCAtMTIyNiw3ICsxMjI2LDcgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGJvdW5kVGhpc05vQXJnc0Z1bgogICAgIExpbmtCdWZmZXIgbGlua0J1
ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgbGlua0J1ZmZlci5saW5rKG5vQ29kZSwg
Q29kZUxvY2F0aW9uTGFiZWwodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbFdpdGhvdXRT
YXZlZFRhZ3Modm0pKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUoCi0gICAgICAgIGxpbmtC
dWZmZXIsIENvZGVFbnRyeVB0clRhZywgIlNwZWNpYWxpemVkIHRodW5rIGZvciBib3VuZCBmdW5j
dGlvbiBjYWxscyB3aXRoIG5vIGFyZ3VtZW50cyIpOworICAgICAgICBsaW5rQnVmZmVyLCBDb2Rl
UHRyVGFnLCAiU3BlY2lhbGl6ZWQgdGh1bmsgZm9yIGJvdW5kIGZ1bmN0aW9uIGNhbGxzIHdpdGgg
bm8gYXJndW1lbnRzIik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAJKHJldmlzaW9uIDIzMDU4NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NCwyMCArNjQsMjAgQEAgdm9pZCBpbml0aWFsaXplKCkKICAgICB9CiAKICAgICBzdGF0aWMg
Y29uc3QgUHRyVGFnIHRhZ3NGb3JPcGNvZGVbXSA9IHsKLSAgICAgICAgQ29kZUVudHJ5UHRyVGFn
LCAvLyBsbGludF9wcm9ncmFtX3Byb2xvZ3VlCi0gICAgICAgIENvZGVFbnRyeVB0clRhZywgLy8g
bGxpbnRfZXZhbF9wcm9sb2d1ZQotICAgICAgICBDb2RlRW50cnlQdHJUYWcsIC8vIGxsaW50X21v
ZHVsZV9wcm9ncmFtX3Byb2xvZ3VlCi0gICAgICAgIENvZGVFbnRyeVB0clRhZywgLy8gbGxpbnRf
ZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUKLSAgICAgICAgQ29kZUVudHJ5UHRyVGFnLCAvLyBs
bGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlCi0gICAgICAgIENvZGVFbnRyeVdp
dGhBcml0eUNoZWNrUHRyVGFnLCAvLyBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVj
awotICAgICAgICBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZywgLy8gbGxpbnRfZnVuY3Rp
b25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjawotICAgICAgICBDb2RlRW50cnlQdHJUYWcsIC8v
IGxsaW50X2dlbmVyaWNfcmV0dXJuX3BvaW50CisgICAgICAgIENvZGVQdHJUYWcsIC8vIGxsaW50
X3Byb2dyYW1fcHJvbG9ndWUKKyAgICAgICAgQ29kZVB0clRhZywgLy8gbGxpbnRfZXZhbF9wcm9s
b2d1ZQorICAgICAgICBDb2RlUHRyVGFnLCAvLyBsbGludF9tb2R1bGVfcHJvZ3JhbV9wcm9sb2d1
ZQorICAgICAgICBDb2RlUHRyVGFnLCAvLyBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1
ZQorICAgICAgICBDb2RlUHRyVGFnLCAvLyBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3By
b2xvZ3VlCisgICAgICAgIENvZGVQdHJUYWcsIC8vIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2Fy
aXR5X2NoZWNrCisgICAgICAgIENvZGVQdHJUYWcsIC8vIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25z
dHJ1Y3RfYXJpdHlfY2hlY2sKKyAgICAgICAgQ29kZVB0clRhZywgLy8gbGxpbnRfZ2VuZXJpY19y
ZXR1cm5fcG9pbnQKICAgICAgICAgQnl0ZWNvZGVQdHJUYWcsIC8vIGxsaW50X3Rocm93X2Zyb21f
c2xvd19wYXRoX3RyYW1wb2xpbmUKICAgICAgICAgRXhjZXB0aW9uSGFuZGxlclB0clRhZywgLy8g
bGxpbnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJhbXBvbGluZQotICAgICAgICBDb2RlRW50cnlQdHJU
YWcsIC8vIGxsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmUKLSAgICAgICAgQ29kZUVudHJ5UHRy
VGFnLCAvLyBsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmUKLSAgICAgICAgQ29kZUVu
dHJ5UHRyVGFnLCAvLyBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmUKLSAg
ICAgICAgQ29kZUVudHJ5UHRyVGFnLCAvLyBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1
Y3RfdHJhbXBvbGluZQorICAgICAgICBDb2RlUHRyVGFnLCAvLyBsbGludF9uYXRpdmVfY2FsbF90
cmFtcG9saW5lCisgICAgICAgIENvZGVQdHJUYWcsIC8vIGxsaW50X25hdGl2ZV9jb25zdHJ1Y3Rf
dHJhbXBvbGluZQorICAgICAgICBDb2RlUHRyVGFnLCAvLyBsbGludF9pbnRlcm5hbF9mdW5jdGlv
bl9jYWxsX3RyYW1wb2xpbmUKKyAgICAgICAgQ29kZVB0clRhZywgLy8gbGxpbnRfaW50ZXJuYWxf
ZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmUKICAgICAgICAgRXhjZXB0aW9uSGFuZGxlclB0
clRhZywgLy8gaGFuZGxlVW5jYXVnaHRFeGNlcHRpb24KICAgICB9OwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50LmNwcAkocmV2aXNpb24g
MjMwNTg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgc3RhdGljIHZvaWQgc2V0RXZhbEVu
dHJ5cG9pbnQoVk0mIHZtLCBDbwogICAgIGlmIChWTTo6Y2FuVXNlSklUKCkpIHsKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYgPSB2bS5nZXRDVElTdHViKGV2YWxFbnRyeVRo
dW5rR2VuZXJhdG9yKTsKICAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICAg
ICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKGNvZGVSZWYsIGNvZGVSZWYucmV0YWdnZWRD
b2RlKENvZGVFbnRyeVB0clRhZywgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcpLCBKSVRD
b2RlOjpJbnRlcnByZXRlclRodW5rKSkpOworICAgICAgICAgICAgYWRvcHRSZWYoKm5ldyBEaXJl
Y3RKSVRDb2RlKGNvZGVSZWYsIGNvZGVSZWYuY29kZSgpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRo
dW5rKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkBA
IC04MSw3ICs4MSw3IEBAIHN0YXRpYyB2b2lkIHNldEV2YWxFbnRyeXBvaW50KFZNJiB2bSwgQ28K
ICAgICBVTlVTRURfUEFSQU0odm0pOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVm
ID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZXZhbF9w
cm9sb2d1ZSk7CiAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICBhZG9wdFJlZigq
bmV3IERpcmVjdEpJVENvZGUoY29kZVJlZiwgY29kZVJlZi5yZXRhZ2dlZENvZGUoQ29kZUVudHJ5
UHRyVGFnLCBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZyksIEpJVENvZGU6OkludGVycHJl
dGVyVGh1bmspKSk7CisgICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShjb2RlUmVm
LCBjb2RlUmVmLmNvZGUoKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKIH0KIAogc3Rh
dGljIHZvaWQgc2V0UHJvZ3JhbUVudHJ5cG9pbnQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aykKQEAgLTkwLDcgKzkwLDcgQEAgc3RhdGljIHZvaWQgc2V0UHJvZ3JhbUVudHJ5cG9pbnQoVk0m
IHZtLAogICAgIGlmIChWTTo6Y2FuVXNlSklUKCkpIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGNvZGVSZWYgPSB2bS5nZXRDVElTdHViKHByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9y
KTsKICAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICAgICAgYWRvcHRSZWYo
Km5ldyBEaXJlY3RKSVRDb2RlKGNvZGVSZWYsIGNvZGVSZWYucmV0YWdnZWRDb2RlKENvZGVFbnRy
eVB0clRhZywgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcpLCBKSVRDb2RlOjpJbnRlcnBy
ZXRlclRodW5rKSkpOworICAgICAgICAgICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKGNv
ZGVSZWYsIGNvZGVSZWYuY29kZSgpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkBAIC05OCw3ICs5OCw3
IEBAIHN0YXRpYyB2b2lkIHNldFByb2dyYW1FbnRyeXBvaW50KFZNJiB2bSwKICAgICBVTlVTRURf
UEFSQU0odm0pOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmID0gTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZSk7
CiAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVj
dEpJVENvZGUoY29kZVJlZiwgY29kZVJlZi5yZXRhZ2dlZENvZGUoQ29kZUVudHJ5UHRyVGFnLCBD
b2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZyksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmsp
KSk7CisgICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShjb2RlUmVmLCBjb2RlUmVm
LmNvZGUoKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKIH0KIAogc3RhdGljIHZvaWQg
c2V0TW9kdWxlUHJvZ3JhbUVudHJ5cG9pbnQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykK
QEAgLTEwNyw3ICsxMDcsNyBAQCBzdGF0aWMgdm9pZCBzZXRNb2R1bGVQcm9ncmFtRW50cnlwb2lu
dChWCiAgICAgaWYgKFZNOjpjYW5Vc2VKSVQoKSkgewogICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgY29kZVJlZiA9IHZtLmdldENUSVN0dWIobW9kdWxlUHJvZ3JhbUVudHJ5VGh1bmtHZW5l
cmF0b3IpOwogICAgICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCi0gICAgICAgICAgICBhZG9w
dFJlZigqbmV3IERpcmVjdEpJVENvZGUoY29kZVJlZiwgY29kZVJlZi5yZXRhZ2dlZENvZGUoQ29k
ZUVudHJ5UHRyVGFnLCBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZyksIEpJVENvZGU6Oklu
dGVycHJldGVyVGh1bmspKSk7CisgICAgICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENv
ZGUoY29kZVJlZiwgY29kZVJlZi5jb2RlKCksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKQEAgLTExNSw3
ICsxMTUsNyBAQCBzdGF0aWMgdm9pZCBzZXRNb2R1bGVQcm9ncmFtRW50cnlwb2ludChWCiAgICAg
VU5VU0VEX1BBUkFNKHZtKTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZiA9IE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X21vZHVsZV9wcm9n
cmFtX3Byb2xvZ3VlKTsKICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCi0gICAgICAgIGFkb3B0
UmVmKCpuZXcgRGlyZWN0SklUQ29kZShjb2RlUmVmLCBjb2RlUmVmLnJldGFnZ2VkQ29kZShDb2Rl
RW50cnlQdHJUYWcsIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnKSwgSklUQ29kZTo6SW50
ZXJwcmV0ZXJUaHVuaykpKTsKKyAgICAgICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKGNv
ZGVSZWYsIGNvZGVSZWYuY29kZSgpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogfQog
CiB2b2lkIHNldEVudHJ5cG9pbnQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2
aXNpb24gMjMwNTg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ3LDggKzQ0Nyw4IEBAIExMSU5UX1NMT1dfUEFU
SF9ERUNMKGxvb3Bfb3NyKQogICAgIENvZGVMb2NhdGlvbkxhYmVsIGNvZGVMb2NhdGlvbiA9IGNv
ZGVNYXAuZmluZChsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCk7CiAgICAgQVNTRVJUKGNvZGVM
b2NhdGlvbik7CiAKLSAgICBQdHJUYWcgbG9jYXRpb25UYWcgPSBwdHJUYWcoQ29kZUVudHJ5UHRy
VGFnLCBjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KTsKLSAgICB2b2lkKiBq
dW1wVGFyZ2V0ID0gY29kZUxvY2F0aW9uLnJldGFnZ2VkKGxvY2F0aW9uVGFnLCBDb2RlRW50cnlQ
dHJUYWcpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgUHRyVGFnIGxvY2F0aW9uVGFnID0gcHRy
VGFnKENvZGVQdHJUYWcsIGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQpOwor
ICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjb2RlTG9jYXRpb24ucmV0YWdnZWQobG9jYXRpb25UYWcs
IENvZGVQdHJUYWcpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgQVNTRVJUKGp1bXBUYXJnZXQp
OwogICAgIAogICAgIExMSU5UX1JFVFVSTl9UV08oanVtcFRhcmdldCwgZXhlYy0+dG9wT2ZGcmFt
ZSgpKTsKQEAgLTE0NTAsMTIgKzE0NTAsMTIgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBz
ZXRVcENhbGwoRXhlYwogICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnJlbW92ZSgp
OwogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+Y2FsbGVlLnNldCh2bSwgY2FsbGVyQ29k
ZUJsb2NrLCBpbnRlcm5hbEZ1bmN0aW9uKTsKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8t
Pmxhc3RTZWVuQ2FsbGVlLnNldCh2bSwgY2FsbGVyQ29kZUJsb2NrLCBpbnRlcm5hbEZ1bmN0aW9u
KTsKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPm1hY2hpbmVDb2RlVGFyZ2V0ID0gY29k
ZVB0ci5yZXRhZ2dlZChDb2RlRW50cnlQdHJUYWcsIExMSW50Q2FsbElDUHRyVGFnKTsKKyAgICAg
ICAgICAgICAgICBjYWxsTGlua0luZm8tPm1hY2hpbmVDb2RlVGFyZ2V0ID0gY29kZVB0ci5yZXRh
Z2dlZChDb2RlUHRyVGFnLCBMTEludENhbGxJQ1B0clRhZyk7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGFzc2VydElzVGFnZ2VkV2l0aChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCks
IENvZGVFbnRyeVB0clRhZyk7CisgICAgICAgICAgICBhc3NlcnRJc1RhZ2dlZFdpdGgoY29kZVB0
ci5leGVjdXRhYmxlQWRkcmVzcygpLCBDb2RlUHRyVGFnKTsKICAgICAgICAgICAgIFBvaXNvbmVk
TWFzbVB0cjo6YXNzZXJ0SXNOb3RQb2lzb25lZChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkp
OwotICAgICAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZXhlYywgZXhlY0NhbGxlZSwgY29kZVB0
ci5leGVjdXRhYmxlQWRkcmVzcygpLCBDb2RlRW50cnlQdHJUYWcpOworICAgICAgICAgICAgTExJ
TlRfQ0FMTF9SRVRVUk4oZXhlYywgZXhlY0NhbGxlZSwgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVz
cygpLCBDb2RlUHRyVGFnKTsKICAgICAgICAgfQogICAgICAgICB0aHJvd1Njb3BlLnJlbGVhc2Uo
KTsKICAgICAgICAgcmV0dXJuIGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUsIHBjLCBjYWxsZWVB
c1ZhbHVlLCBraW5kKTsKQEAgLTE0NjQsMTMgKzE0NjQsMTEgQEAgaW5saW5lIFNsb3dQYXRoUmV0
dXJuVHlwZSBzZXRVcENhbGwoRXhlYwogICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbGVlLT5zY29w
ZVVuY2hlY2tlZCgpOwogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gY2FsbGVlLT5l
eGVjdXRhYmxlKCk7CiAKLSAgICBQdHJUYWcgY2FsbFB0clRhZyA9IE5vUHRyVGFnOwogICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
MDsKLSAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkgeworICAgIGlmIChleGVj
dXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQogICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+
ZW50cnlwb2ludEZvcihraW5kLCBNdXN0Q2hlY2tBcml0eSk7Ci0gICAgICAgIGNhbGxQdHJUYWcg
PSBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZzsKLSAgICB9IGVsc2UgeworICAgIGVsc2Ug
ewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRp
Y19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogCiAgICAgICAgIGlmICgh
aXNDYWxsKGtpbmQpICYmIGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29uc3RydWN0QWJpbGl0eSgpID09
IENvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdCkKQEAgLTE0ODQsMTYgKzE0ODIsMTIg
QEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoRXhlYwogICAgICAgICBjb2Rl
QmxvY2sgPSAqY29kZUJsb2NrU2xvdDsKICAgICAgICAgQVNTRVJUKGNvZGVCbG9jayk7CiAgICAg
ICAgIEFyaXR5Q2hlY2tNb2RlIGFyaXR5OwotICAgICAgICBpZiAoZXhlY0NhbGxlZS0+YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCkpKSB7CisgICAgICAgIGlmIChleGVjQ2FsbGVlLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKSkpCiAgICAgICAgICAgICBhcml0eSA9IE11c3RDaGVja0FyaXR5OwotICAgICAgICAg
ICAgY2FsbFB0clRhZyA9IENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnOwotICAgICAgICB9
IGVsc2UgeworICAgICAgICBlbHNlCiAgICAgICAgICAgICBhcml0eSA9IEFyaXR5Q2hlY2tOb3RS
ZXF1aXJlZDsKLSAgICAgICAgICAgIGNhbGxQdHJUYWcgPSBDb2RlRW50cnlQdHJUYWc7Ci0gICAg
ICAgIH0KICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZv
cihraW5kLCBhcml0eSk7CiAgICAgfQotICAgIGFzc2VydElzVGFnZ2VkV2l0aChjb2RlUHRyLmV4
ZWN1dGFibGVBZGRyZXNzKCksIGNhbGxQdHJUYWcpOwogCiAgICAgQVNTRVJUKCEhY29kZVB0cik7
CiAgICAgCkBAIC0xNTA2LDE1ICsxNTAwLDE0IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUg
c2V0VXBDYWxsKEV4ZWMKICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+cmVtb3ZlKCk7CiAgICAg
ICAgIGNhbGxMaW5rSW5mby0+Y2FsbGVlLnNldCh2bSwgY2FsbGVyQ29kZUJsb2NrLCBjYWxsZWUp
OwogICAgICAgICBjYWxsTGlua0luZm8tPmxhc3RTZWVuQ2FsbGVlLnNldCh2bSwgY2FsbGVyQ29k
ZUJsb2NrLCBjYWxsZWUpOwotICAgICAgICBjYWxsTGlua0luZm8tPm1hY2hpbmVDb2RlVGFyZ2V0
ID0gY29kZVB0ci5yZXRhZ2dlZChjYWxsUHRyVGFnLCBMTEludENhbGxJQ1B0clRhZyk7Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxQdHJUYWcgIT0gTm9QdHJUYWcpOworICAgICAgICBjYWxs
TGlua0luZm8tPm1hY2hpbmVDb2RlVGFyZ2V0ID0gY29kZVB0ci5yZXRhZ2dlZChDb2RlUHRyVGFn
LCBMTEludENhbGxJQ1B0clRhZyk7CiAgICAgICAgIGlmIChjb2RlQmxvY2spCiAgICAgICAgICAg
ICBjb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoZXhlYywgY2FsbExpbmtJbmZvKTsKICAgICB9
CiAKLSAgICBhc3NlcnRJc1RhZ2dlZFdpdGgoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBj
YWxsUHRyVGFnKTsKKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGgoY29kZVB0ci5leGVjdXRhYmxlQWRk
cmVzcygpLCBDb2RlUHRyVGFnKTsKICAgICBQb2lzb25lZE1hc21QdHI6OmFzc2VydElzTm90UG9p
c29uZWQoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICBMTElOVF9DQUxMX1JFVFVS
TihleGVjLCBleGVjQ2FsbGVlLCBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIGNhbGxQdHJU
YWcpOworICAgIExMSU5UX0NBTExfUkVUVVJOKGV4ZWMsIGV4ZWNDYWxsZWUsIGNvZGVQdHIuZXhl
Y3V0YWJsZUFkZHJlc3MoKSwgQ29kZVB0clRhZyk7CiB9CiAKIGlubGluZSBTbG93UGF0aFJldHVy
blR5cGUgZ2VuZXJpY0NhbGwoRXhlY1N0YXRlKiBleGVjLCBJbnN0cnVjdGlvbiogcGMsIENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFRodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50VGh1bmtzLmNwcAkocmV2aXNpb24gMjMwNTg3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNTIgKzUx
LDUyIEBAIEVuY29kZWRKU1ZhbHVlIEpTX0VYUE9SVF9QUklWQVRFIHZtRW50cnkKIAogbmFtZXNw
YWNlIExMSW50IHsKIAotc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZW5lcmF0ZVRodW5r
V2l0aEp1bXBUbyhWTSogdm0sIE9wY29kZUlEIG9wY29kZUlELCBQdHJUYWcgdGh1bmtUYWcsIGNv
bnN0IGNoYXIgKnRodW5rS2luZCkKK3N0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2VuZXJh
dGVUaHVua1dpdGhKdW1wVG8oVk0qIHZtLCBPcGNvZGVJRCBvcGNvZGVJRCwgY29uc3QgY2hhciAq
dGh1bmtLaW5kKQogewogICAgIEpTSW50ZXJmYWNlSklUIGppdCh2bSk7CiAKICAgICAvLyBGSVhN
RTogdGhlcmUncyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gZG8gaXQgb24gWDg2LCBidXQgSSdt
IG5vdCBzdXJlIEkgY2FyZS4KICAgICBMTEludENvZGUgdGFyZ2V0ID0gTExJbnQ6OmdldENvZGVG
dW5jdGlvblB0cihvcGNvZGVJRCk7CiAgICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OlRydXN0
ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPih0YXJnZXQpKSwgSlNJbnRlcmZhY2VKSVQ6OnJl
Z1QwKTsKLSAgICBqaXQuanVtcChKU0ludGVyZmFjZUpJVDo6cmVnVDAsIHRodW5rVGFnKTsKKyAg
ICBqaXQuanVtcChKU0ludGVyZmFjZUpJVDo6cmVnVDAsIENvZGVQdHJUYWcpOwogCiAgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJ
TkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIHRodW5rVGFnLCAiTExJbnQgJXMgcHJvbG9ndWUgdGh1
bmsiLCB0aHVua0tpbmQpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBD
b2RlUHRyVGFnLCAiTExJbnQgJXMgcHJvbG9ndWUgdGh1bmsiLCB0aHVua0tpbmQpOwogfQogCiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JDYWxsRW50cnlUaHVua0dlbmVyYXRvcihW
TSogdm0pCiB7Ci0gICAgcmV0dXJuIGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKHZtLCBsbGludF9m
dW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZSwgQ29kZUVudHJ5UHRyVGFnLCAiZnVuY3Rpb24gZm9y
IGNhbGwiKTsKKyAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8odm0sIGxsaW50X2Z1
bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlLCAiZnVuY3Rpb24gZm9yIGNhbGwiKTsKIH0KIAogTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9yQ29uc3RydWN0RW50cnlUaHVua0dlbmVyYXRv
cihWTSogdm0pCiB7Ci0gICAgcmV0dXJuIGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKHZtLCBsbGlu
dF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlLCBDb2RlRW50cnlQdHJUYWcsICJmdW5j
dGlvbiBmb3IgY29uc3RydWN0Iik7CisgICAgcmV0dXJuIGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRv
KHZtLCBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlLCAiZnVuY3Rpb24gZm9y
IGNvbnN0cnVjdCIpOwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JDYWxs
QXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gZ2VuZXJhdGVU
aHVua1dpdGhKdW1wVG8odm0sIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrLCBD
b2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZywgImZ1bmN0aW9uIGZvciBjYWxsIHdpdGggYXJp
dHkgY2hlY2siKTsKKyAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8odm0sIGxsaW50
X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrLCAiZnVuY3Rpb24gZm9yIGNhbGwgd2l0aCBh
cml0eSBjaGVjayIpOwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnVuY3Rpb25Gb3JDb25z
dHJ1Y3RBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBnZW5l
cmF0ZVRodW5rV2l0aEp1bXBUbyh2bSwgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0
eV9jaGVjaywgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcsICJmdW5jdGlvbiBmb3IgY29u
c3RydWN0IHdpdGggYXJpdHkgY2hlY2siKTsKKyAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhK
dW1wVG8odm0sIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2ssICJmdW5j
dGlvbiBmb3IgY29uc3RydWN0IHdpdGggYXJpdHkgY2hlY2siKTsKIH0KIAogTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGV2YWxFbnRyeVRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4g
Z2VuZXJhdGVUaHVua1dpdGhKdW1wVG8odm0sIGxsaW50X2V2YWxfcHJvbG9ndWUsIENvZGVFbnRy
eVB0clRhZywgImV2YWwiKTsKKyAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8odm0s
IGxsaW50X2V2YWxfcHJvbG9ndWUsICJldmFsIik7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBwcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0dXJuIGdlbmVy
YXRlVGh1bmtXaXRoSnVtcFRvKHZtLCBsbGludF9wcm9ncmFtX3Byb2xvZ3VlLCBDb2RlRW50cnlQ
dHJUYWcsICJwcm9ncmFtIik7CisgICAgcmV0dXJuIGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKHZt
LCBsbGludF9wcm9ncmFtX3Byb2xvZ3VlLCAicHJvZ3JhbSIpOwogfQogCiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgbW9kdWxlUHJvZ3JhbUVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAg
IHJldHVybiBnZW5lcmF0ZVRodW5rV2l0aEp1bXBUbyh2bSwgbGxpbnRfbW9kdWxlX3Byb2dyYW1f
cHJvbG9ndWUsIENvZGVFbnRyeVB0clRhZywgIm1vZHVsZV9wcm9ncmFtIik7CisgICAgcmV0dXJu
IGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKHZtLCBsbGludF9tb2R1bGVfcHJvZ3JhbV9wcm9sb2d1
ZSwgIm1vZHVsZV9wcm9ncmFtIik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIExMSW50CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjY0LmFzbQkocmV2aXNpb24gMjMwNTg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTI1NCw3ICsyNTQs
NyBAQCBtYWNybyBtYWtlSmF2YVNjcmlwdENhbGwoZW50cnksIHRlbXApCiAgICAgaWYgQ19MT09Q
CiAgICAgICAgIGNsb29wQ2FsbEpTRnVuY3Rpb24gZW50cnkKICAgICBlbHNlCi0gICAgICAgIGNh
bGwgZW50cnksIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnCisgICAgICAgIGNhbGwgZW50
cnksIENvZGVQdHJUYWcKICAgICBlbmQKICAgICBzdWJwIDE2LCBzcAogZW5kCkBAIC0yNzAsMTAg
KzI3MCwxMCBAQCBtYWNybyBtYWtlSG9zdEZ1bmN0aW9uQ2FsbChlbnRyeSwgdGVtcCkKICAgICBl
bHNpZiBYODZfNjRfV0lOCiAgICAgICAgICMgV2UgbmVlZCB0byBhbGxvY2F0ZSAzMiBieXRlcyBv
biB0aGUgc3RhY2sgZm9yIHRoZSBzaGFkb3cgc3BhY2UuCiAgICAgICAgIHN1YnAgMzIsIHNwCi0g
ICAgICAgIGNhbGwgdGVtcCwgQ29kZUVudHJ5UHRyVGFnCisgICAgICAgIGNhbGwgdGVtcCwgQ29k
ZVB0clRhZwogICAgICAgICBhZGRwIDMyLCBzcAogICAgIGVsc2UKLSAgICAgICAgY2FsbCB0ZW1w
LCBDb2RlRW50cnlQdHJUYWcKKyAgICAgICAgY2FsbCB0ZW1wLCBDb2RlUHRyVGFnCiAgICAgZW5k
CiBlbmQKIApAQCAtMzcwLDcgKzM3MCw3IEBAIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29w
KCkKICAgICAgICAgICAgIGNDYWxsMihfbGxpbnRfbG9vcF9vc3IpCiAgICAgICAgICAgICBidHB6
IHIwLCAucmVjb3ZlcgogICAgICAgICAgICAgbW92ZSByMSwgc3AKLSAgICAgICAgICAgIGptcCBy
MCwgQ29kZUVudHJ5UHRyVGFnCisgICAgICAgICAgICBqbXAgcjAsIENvZGVQdHJUYWcKICAgICAg
ICAgLnJlY292ZXI6CiAgICAgICAgICAgICBsb2FkaSBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0
W2Nmcl0sIFBDCiAgICAgICAgIGVuZCkKQEAgLTIxOTEsMTIgKzIxOTEsMTIgQEAgbWFjcm8gbmF0
aXZlQ2FsbFRyYW1wb2xpbmUoZXhlY3V0YWJsZU9mZgogICAgIGVsc2UKICAgICAgICAgaWYgWDg2
XzY0X1dJTgogICAgICAgICAgICAgc3VicCAzMiwgc3AKLSAgICAgICAgICAgIGNhbGwgZXhlY3V0
YWJsZU9mZnNldFRvRnVuY3Rpb25bdDFdLCBDb2RlRW50cnlQdHJUYWcKKyAgICAgICAgICAgIGNh
bGwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb25bdDFdLCBDb2RlUHRyVGFnCiAgICAgICAgICAg
ICBhZGRwIDMyLCBzcAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb2FkcCBfZ19OYXRpdmVD
b2RlUG9pc29uLCB0MgogICAgICAgICAgICAgeG9ycCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlv
blt0MV0sIHQyCi0gICAgICAgICAgICBjYWxsIHQyLCBDb2RlRW50cnlQdHJUYWcKKyAgICAgICAg
ICAgIGNhbGwgdDIsIENvZGVQdHJUYWcKICAgICAgICAgZW5kCiAgICAgZW5kCiAKQEAgLTIyMzQs
MTIgKzIyMzQsMTIgQEAgbWFjcm8gaW50ZXJuYWxGdW5jdGlvbkNhbGxUcmFtcG9saW5lKG9mZgog
ICAgIGVsc2UKICAgICAgICAgaWYgWDg2XzY0X1dJTgogICAgICAgICAgICAgc3VicCAzMiwgc3AK
LSAgICAgICAgICAgIGNhbGwgb2Zmc2V0T2ZGdW5jdGlvblt0MV0sIENvZGVFbnRyeVB0clRhZwor
ICAgICAgICAgICAgY2FsbCBvZmZzZXRPZkZ1bmN0aW9uW3QxXSwgQ29kZVB0clRhZwogICAgICAg
ICAgICAgYWRkcCAzMiwgc3AKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbG9hZHAgX2dfTmF0
aXZlQ29kZVBvaXNvbiwgdDIKICAgICAgICAgICAgIHhvcnAgb2Zmc2V0T2ZGdW5jdGlvblt0MV0s
IHQyCi0gICAgICAgICAgICBjYWxsIHQyLCBDb2RlRW50cnlQdHJUYWcKKyAgICAgICAgICAgIGNh
bGwgdDIsIENvZGVQdHJUYWcKICAgICAgICAgZW5kCiAgICAgZW5kCiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJl
dmlzaW9uIDIzMDU4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMjYyLDggKzI2Miw3IEBAIGNvbnN0IEFy
aXRoUHJvZmlsZUludE51bWJlciA9IDB4NTAwMDAwCiAKICMgUG9pbnRlciBUYWdzCiBjb25zdCBC
eXRlY29kZVB0clRhZyA9IGNvbnN0ZXhwciBCeXRlY29kZVB0clRhZwotY29uc3QgQ29kZUVudHJ5
UHRyVGFnID0gY29uc3RleHByIENvZGVFbnRyeVB0clRhZwotY29uc3QgQ29kZUVudHJ5V2l0aEFy
aXR5Q2hlY2tQdHJUYWcgPSBjb25zdGV4cHIgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcK
K2NvbnN0IENvZGVQdHJUYWcgPSBjb25zdGV4cHIgQ29kZVB0clRhZwogY29uc3QgRXhjZXB0aW9u
SGFuZGxlclB0clRhZyA9IGNvbnN0ZXhwciBFeGNlcHRpb25IYW5kbGVyUHRyVGFnCiBjb25zdCBM
TEludENhbGxJQ1B0clRhZyA9IGNvbnN0ZXhwciBMTEludENhbGxJQ1B0clRhZwogY29uc3QgTm9Q
dHJUYWcgPSBjb25zdGV4cHIgTm9QdHJUYWcKQEAgLTEwMDAsNyArOTk5LDcgQEAgZW5kCiAKICMg
RG8gdGhlIGJhcmUgbWluaW11bSByZXF1aXJlZCB0byBleGVjdXRlIGNvZGUuIFNldHMgdXAgdGhl
IFBDLCBsZWF2ZSB0aGUgQ29kZUJsb2NrKgogIyBpbiB0MS4gTWF5IGFsc28gdHJpZ2dlciBwcm9s
b2d1ZSBlbnRyeSBPU1IuCi1tYWNybyBwcm9sb2d1ZShjb2RlQmxvY2tHZXR0ZXIsIGNvZGVCbG9j
a1NldHRlciwgb3NyU2xvd1BhdGgsIHRyYWNlU2xvd1BhdGgsIHRhcmdldFB0clRhZykKK21hY3Jv
IHByb2xvZ3VlKGNvZGVCbG9ja0dldHRlciwgY29kZUJsb2NrU2V0dGVyLCBvc3JTbG93UGF0aCwg
dHJhY2VTbG93UGF0aCkKICAgICAjIFNldCB1cCB0aGUgY2FsbCBmcmFtZSBhbmQgY2hlY2sgaWYg
d2Ugc2hvdWxkIE9TUi4KICAgICB0YWdSZXR1cm5BZGRyZXNzIHNwCiAgICAgcHJlc2VydmVDYWxs
ZXJQQ0FuZENGUigpCkBAIC0xMDM4LDcgKzEwMzcsNyBAQCBtYWNybyBwcm9sb2d1ZShjb2RlQmxv
Y2tHZXR0ZXIsIGNvZGVCbG9jCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHBvcCBjZnIKICAg
ICAgICAgZW5kCi0gICAgICAgIGptcCByMCwgdGFyZ2V0UHRyVGFnCisgICAgICAgIGptcCByMCwg
Q29kZVB0clRhZwogICAgIC5yZWNvdmVyOgogICAgICAgICBjb2RlQmxvY2tHZXR0ZXIodDEsIHQy
KQogICAgIC5jb250aW51ZToKQEAgLTEyODMsMzQgKzEyODIsMzQgQEAgX2xsaW50X2VudHJ5Ogog
ZW5kCiAKIF9sbGludF9wcm9ncmFtX3Byb2xvZ3VlOgotICAgIHByb2xvZ3VlKG5vdEZ1bmN0aW9u
Q29kZUJsb2NrR2V0dGVyLCBub3RGdW5jdGlvbkNvZGVCbG9ja1NldHRlciwgX2xsaW50X2VudHJ5
X29zciwgX2xsaW50X3RyYWNlX3Byb2xvZ3VlLCBDb2RlRW50cnlQdHJUYWcpCisgICAgcHJvbG9n
dWUobm90RnVuY3Rpb25Db2RlQmxvY2tHZXR0ZXIsIG5vdEZ1bmN0aW9uQ29kZUJsb2NrU2V0dGVy
LCBfbGxpbnRfZW50cnlfb3NyLCBfbGxpbnRfdHJhY2VfcHJvbG9ndWUpCiAgICAgZGlzcGF0Y2go
MCkKIAogCiBfbGxpbnRfbW9kdWxlX3Byb2dyYW1fcHJvbG9ndWU6Ci0gICAgcHJvbG9ndWUobm90
RnVuY3Rpb25Db2RlQmxvY2tHZXR0ZXIsIG5vdEZ1bmN0aW9uQ29kZUJsb2NrU2V0dGVyLCBfbGxp
bnRfZW50cnlfb3NyLCBfbGxpbnRfdHJhY2VfcHJvbG9ndWUsIENvZGVFbnRyeVB0clRhZykKKyAg
ICBwcm9sb2d1ZShub3RGdW5jdGlvbkNvZGVCbG9ja0dldHRlciwgbm90RnVuY3Rpb25Db2RlQmxv
Y2tTZXR0ZXIsIF9sbGludF9lbnRyeV9vc3IsIF9sbGludF90cmFjZV9wcm9sb2d1ZSkKICAgICBk
aXNwYXRjaCgwKQogCiAKIF9sbGludF9ldmFsX3Byb2xvZ3VlOgotICAgIHByb2xvZ3VlKG5vdEZ1
bmN0aW9uQ29kZUJsb2NrR2V0dGVyLCBub3RGdW5jdGlvbkNvZGVCbG9ja1NldHRlciwgX2xsaW50
X2VudHJ5X29zciwgX2xsaW50X3RyYWNlX3Byb2xvZ3VlLCBDb2RlRW50cnlQdHJUYWcpCisgICAg
cHJvbG9ndWUobm90RnVuY3Rpb25Db2RlQmxvY2tHZXR0ZXIsIG5vdEZ1bmN0aW9uQ29kZUJsb2Nr
U2V0dGVyLCBfbGxpbnRfZW50cnlfb3NyLCBfbGxpbnRfdHJhY2VfcHJvbG9ndWUpCiAgICAgZGlz
cGF0Y2goMCkKIAogCiBfbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWU6Ci0gICAgcHJv
bG9ndWUoZnVuY3Rpb25Gb3JDYWxsQ29kZUJsb2NrR2V0dGVyLCBmdW5jdGlvbkNvZGVCbG9ja1Nl
dHRlciwgX2xsaW50X2VudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbCwgX2xsaW50X3RyYWNlX3By
b2xvZ3VlX2Z1bmN0aW9uX2Zvcl9jYWxsLCBDb2RlRW50cnlQdHJUYWcpCisgICAgcHJvbG9ndWUo
ZnVuY3Rpb25Gb3JDYWxsQ29kZUJsb2NrR2V0dGVyLCBmdW5jdGlvbkNvZGVCbG9ja1NldHRlciwg
X2xsaW50X2VudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbCwgX2xsaW50X3RyYWNlX3Byb2xvZ3Vl
X2Z1bmN0aW9uX2Zvcl9jYWxsKQogICAgIGZ1bmN0aW9uSW5pdGlhbGl6YXRpb24oMCkKICAgICBk
aXNwYXRjaCgwKQogICAgIAogCiBfbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1
ZToKLSAgICBwcm9sb2d1ZShmdW5jdGlvbkZvckNvbnN0cnVjdENvZGVCbG9ja0dldHRlciwgZnVu
Y3Rpb25Db2RlQmxvY2tTZXR0ZXIsIF9sbGludF9lbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0
cnVjdCwgX2xsaW50X3RyYWNlX3Byb2xvZ3VlX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3QsIENvZGVF
bnRyeVB0clRhZykKKyAgICBwcm9sb2d1ZShmdW5jdGlvbkZvckNvbnN0cnVjdENvZGVCbG9ja0dl
dHRlciwgZnVuY3Rpb25Db2RlQmxvY2tTZXR0ZXIsIF9sbGludF9lbnRyeV9vc3JfZnVuY3Rpb25f
Zm9yX2NvbnN0cnVjdCwgX2xsaW50X3RyYWNlX3Byb2xvZ3VlX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1
Y3QpCiAgICAgZnVuY3Rpb25Jbml0aWFsaXphdGlvbigxKQogICAgIGRpc3BhdGNoKDApCiAgICAg
CiAKIF9sbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjazoKLSAgICBwcm9sb2d1ZShm
dW5jdGlvbkZvckNhbGxDb2RlQmxvY2tHZXR0ZXIsIGZ1bmN0aW9uQ29kZUJsb2NrU2V0dGVyLCBf
bGxpbnRfZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5Q2hlY2ssIF9sbGludF90cmFj
ZV9hcml0eUNoZWNrX2Zvcl9jYWxsLCBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZykKKyAg
ICBwcm9sb2d1ZShmdW5jdGlvbkZvckNhbGxDb2RlQmxvY2tHZXR0ZXIsIGZ1bmN0aW9uQ29kZUJs
b2NrU2V0dGVyLCBfbGxpbnRfZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5Q2hlY2ss
IF9sbGludF90cmFjZV9hcml0eUNoZWNrX2Zvcl9jYWxsKQogICAgIGZ1bmN0aW9uQXJpdHlDaGVj
ayguZnVuY3Rpb25Gb3JDYWxsQmVnaW4sIF9zbG93X3BhdGhfY2FsbF9hcml0eUNoZWNrKQogLmZ1
bmN0aW9uRm9yQ2FsbEJlZ2luOgogICAgIGZ1bmN0aW9uSW5pdGlhbGl6YXRpb24oMCkKQEAgLTEz
MTgsNyArMTMxNyw3IEBAIF9sbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjazoKIAog
CiBfbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjazoKLSAgICBwcm9sb2d1
ZShmdW5jdGlvbkZvckNvbnN0cnVjdENvZGVCbG9ja0dldHRlciwgZnVuY3Rpb25Db2RlQmxvY2tT
ZXR0ZXIsIF9sbGludF9lbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eUNoZWNr
LCBfbGxpbnRfdHJhY2VfYXJpdHlDaGVja19mb3JfY29uc3RydWN0LCBDb2RlRW50cnlXaXRoQXJp
dHlDaGVja1B0clRhZykKKyAgICBwcm9sb2d1ZShmdW5jdGlvbkZvckNvbnN0cnVjdENvZGVCbG9j
a0dldHRlciwgZnVuY3Rpb25Db2RlQmxvY2tTZXR0ZXIsIF9sbGludF9lbnRyeV9vc3JfZnVuY3Rp
b25fZm9yX2NvbnN0cnVjdF9hcml0eUNoZWNrLCBfbGxpbnRfdHJhY2VfYXJpdHlDaGVja19mb3Jf
Y29uc3RydWN0KQogICAgIGZ1bmN0aW9uQXJpdHlDaGVjayguZnVuY3Rpb25Gb3JDb25zdHJ1Y3RC
ZWdpbiwgX3Nsb3dfcGF0aF9jb25zdHJ1Y3RfYXJpdHlDaGVjaykKIC5mdW5jdGlvbkZvckNvbnN0
cnVjdEJlZ2luOgogICAgIGZ1bmN0aW9uSW5pdGlhbGl6YXRpb24oMSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuY3BwCShyZXZp
c2lvbiAyMzA1ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFeGVj
dXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTAgKzY3LDEwIEBAIHZvaWQgTmF0aXZl
RXhlY3V0YWJsZTo6ZmluaXNoQ3JlYXRpb24oVk0KICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3RX
aXRoQXJpdHlDaGVjayA9IG1faml0Q29kZUZvckNvbnN0cnVjdC0+YWRkcmVzc0ZvckNhbGwoTXVz
dENoZWNrQXJpdHkpOwogICAgIG1fbmFtZSA9IG5hbWU7CiAKLSAgICBhc3NlcnRJc1RhZ2dlZFdp
dGgobV9qaXRDb2RlRm9yQ2FsbC0+YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja05vdFJlcXVpcmVk
KS5leGVjdXRhYmxlQWRkcmVzcygpLCBDb2RlRW50cnlQdHJUYWcpOwotICAgIGFzc2VydElzVGFn
Z2VkV2l0aChtX2ppdENvZGVGb3JDb25zdHJ1Y3QtPmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tO
b3RSZXF1aXJlZCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgQ29kZUVudHJ5UHRyVGFnKTsKLSAgICBh
c3NlcnRJc1RhZ2dlZFdpdGgobV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLmV4ZWN1dGFi
bGVBZGRyZXNzKCksIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnKTsKLSAgICBhc3NlcnRJ
c1RhZ2dlZFdpdGgobV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2suZXhlY3V0YWJs
ZUFkZHJlc3MoKSwgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcpOworICAgIGFzc2VydElz
VGFnZ2VkV2l0aChtX2ppdENvZGVGb3JDYWxsLT5hZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTm90
UmVxdWlyZWQpLmV4ZWN1dGFibGVBZGRyZXNzKCksIENvZGVQdHJUYWcpOworICAgIGFzc2VydElz
VGFnZ2VkV2l0aChtX2ppdENvZGVGb3JDb25zdHJ1Y3QtPmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hl
Y2tOb3RSZXF1aXJlZCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgQ29kZVB0clRhZyk7CisgICAgYXNz
ZXJ0SXNUYWdnZWRXaXRoKG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjay5leGVjdXRhYmxl
QWRkcmVzcygpLCBDb2RlUHRyVGFnKTsKKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGgobV9qaXRDb2Rl
Rm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2suZXhlY3V0YWJsZUFkZHJlc3MoKSwgQ29kZVB0clRh
Zyk7CiB9CiAKIE5hdGl2ZUV4ZWN1dGFibGU6Ok5hdGl2ZUV4ZWN1dGFibGUoVk0mIHZtLCBUYWdn
ZWROYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0
b3IsIEludHJpbnNpYyBpbnRyaW5zaWMsIGNvbnN0IERPTUpJVDo6U2lnbmF0dXJlKiBzaWduYXR1
cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVGdW5jdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUZ1bmN0
aW9uLmgJKHJldmlzaW9uIDIzMDU4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L05hdGl2ZUZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDEwICs3MCwxMCBAQCBwdWJs
aWM6CiAgICAgZXhwbGljaXQgVGFnZ2VkTmF0aXZlRnVuY3Rpb24oaW50cHRyX3QgYml0cykgOiBt
X3B0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGJpdHMpKSB7IH0KIAogICAgIFRhZ2dlZE5hdGl2ZUZ1
bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpCi0gICAgICAgIDogbV9wdHIodGFnQ0Z1bmN0aW9u
UHRyPHZvaWQqPihmdW5jLm1fcHRyLCBDb2RlRW50cnlQdHJUYWcpKQorICAgICAgICA6IG1fcHRy
KHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4oZnVuYy5tX3B0ciwgQ29kZVB0clRhZykpCiAgICAgeyB9
CiAgICAgVGFnZ2VkTmF0aXZlRnVuY3Rpb24oUmF3TmF0aXZlRnVuY3Rpb24gZnVuYykKLSAgICAg
ICAgOiBtX3B0cih0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KGZ1bmMsIENvZGVFbnRyeVB0clRhZykp
CisgICAgICAgIDogbV9wdHIodGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPihmdW5jLCBDb2RlUHRyVGFn
KSkKICAgICB7IH0KIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVy
biAhIW1fcHRyOyB9CkBAIC04Niw3ICs4Niw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBvcGVy
YXRvciBOYXRpdmVGdW5jdGlvbigpCiAgICAgewogICAgICAgICBBU1NFUlQobV9wdHIpOwotICAg
ICAgICByZXR1cm4gdW50YWdDRnVuY3Rpb25QdHI8TmF0aXZlRnVuY3Rpb24+KG1fcHRyLCBDb2Rl
RW50cnlQdHJUYWcpOworICAgICAgICByZXR1cm4gdW50YWdDRnVuY3Rpb25QdHI8TmF0aXZlRnVu
Y3Rpb24+KG1fcHRyLCBDb2RlUHRyVGFnKTsKICAgICB9CiAKICAgICB2b2lkKiByYXdQb2ludGVy
KCkgY29uc3QgeyByZXR1cm4gbV9wdHI7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1B0clRhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1B0clRhZy5oCShyZXZpc2lvbiAyMzA1ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9QdHJUYWcuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTYgKzMxLDE0IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAjZGVmaW5lIEZPUl9FQUNIX1BUUlRBR19FTlVNKHYpIFwKICAgICB2KE5v
UHRyVGFnKSBcCi0gICAgdihOZWFyQ2FsbFB0clRhZykgXAotICAgIHYoTmVhckp1bXBQdHJUYWcp
IFwKKyAgICB2KE5lYXJDb2RlUHRyVGFnKSBcCiAgICAgdihDRnVuY3Rpb25QdHJUYWcpIFwKICAg
ICBcCiAgICAgdihBcml0eUZpeHVwUHRyVGFnKSBcCiAgICAgdihCM0NDYWxsUHRyVGFnKSBcCiAg
ICAgdihCeXRlY29kZVB0clRhZykgXAogICAgIHYoQnl0ZWNvZGVIZWxwZXJQdHJUYWcpIFwKLSAg
ICB2KENvZGVFbnRyeVB0clRhZykgXAotICAgIHYoQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJU
YWcpIFwKKyAgICB2KENvZGVQdHJUYWcpIFwKICAgICB2KERGR09TUkVudHJ5UHRyVGFnKSBcCiAg
ICAgdihERkdPU1JFeGl0UHRyVGFnKSBcCiAgICAgdihERkdPcGVyYXRpb25QdHJUYWcpIFwKQEAg
LTg3LDggKzg1LDggQEAgZW51bSBQdHJUYWcgOiB1aW50cHRyX3QgewogfTsKIAogc3RhdGljX2Fz
c2VydChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KE5vUHRyVGFnKSA9PSBzdGF0aWNfY2FzdDx1aW50
cHRyX3Q+KDApLCAiIik7Ci1zdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oTmVh
ckNhbGxQdHJUYWcpID09IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSksICIiKTsKLXN0YXRpY19h
c3NlcnQoc3RhdGljX2Nhc3Q8dWludHB0cl90PihOZWFySnVtcFB0clRhZykgPT0gc3RhdGljX2Nh
c3Q8dWludHB0cl90PigyKSwgIiIpOworc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDx1aW50cHRy
X3Q+KE5lYXJDb2RlUHRyVGFnKSA9PSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpLCAiIik7Citz
dGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oQ0Z1bmN0aW9uUHRyVGFnKSA9PSBz
dGF0aWNfY2FzdDx1aW50cHRyX3Q+KDIpLCAiIik7CiAKIGlubGluZSBjb25zdCBjaGFyKiBwdHJU
YWdOYW1lKFB0clRhZyB0YWcpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQkJRUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJCUVBsYW4uY3BwCShyZXZpc2lvbiAyMzA1ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNCw3ICszMjQsNyBA
QCB2b2lkIEJCUVBsYW46OmNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9jCiAgICAgICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICAgICAgZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9uLT5l
bnRyeXBvaW50LmNvbXBpbGF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+
KAotICAgICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIENvZGVFbnRy
eVB0clRhZywgIkVtYmVkZGVyLT5XZWJBc3NlbWJseSBlbnRyeXBvaW50WyVpXSAlcyIsIGZ1bmN0
aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSwKKyAgICAgICAg
ICAgICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBDb2RlUHRyVGFnLCAiRW1iZWRk
ZXItPldlYkFzc2VtYmx5IGVudHJ5cG9pbnRbJWldICVzIiwgZnVuY3Rpb25JbmRleCwgc2lnbmF0
dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpLAogICAgICAgICAgICAgICAgICAgICBXVEZN
b3ZlKGNvbnRleHQuZW1iZWRkZXJFbnRyeXBvaW50Qnlwcm9kdWN0cykpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkBAIC0zNDAsNyArMzQwLDcgQEAgdm9pZCBCQlFQbGFuOjpjb21wbGV0ZShj
b25zdCBBYnN0cmFjdExvYwogICAgICAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVy
ZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25J
bmRleFNwYWNlKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICAgICAgICAgICAgICBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0
dXJlSW5kZXgpOwogICAgICAgICAgICAgICAgIFB0clRhZyBvbGRUYWcgPSBwdHJUYWcoV2FzbUNh
bGxQdHJUYWcsIHNpZ25hdHVyZS5oYXNoKCkpOwotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVs
KGV4ZWN1dGFibGVBZGRyZXNzLnJldGFnZ2VkKG9sZFRhZywgTmVhckNhbGxQdHJUYWcpKSk7Cisg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxM
b2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoZXhlY3V0YWJsZUFkZHJlc3MucmV0YWdnZWQob2xk
VGFnLCBOZWFyQ29kZVB0clRhZykpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAJKHJldmlz
aW9uIDIzMDU4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgT01HUGxhbjo6d29yayhD
b21waWxhdGlvbkVmZm9ydCkKICAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUlu
ZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRl
eFNwYWNlKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICAgICAgICAgIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRl
eCk7CiAgICAgICAgICAgICBQdHJUYWcgb2xkVGFnID0gcHRyVGFnKFdhc21DYWxsUHRyVGFnLCBz
aWduYXR1cmUuaGFzaCgpKTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVh
ckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKGVudHJ5cG9pbnQucmV0
YWdnZWQob2xkVGFnLCBOZWFyQ2FsbFB0clRhZykpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVs
KGVudHJ5cG9pbnQucmV0YWdnZWQob2xkVGFnLCBOZWFyQ29kZVB0clRhZykpKTsKICAgICAgICAg
fQogICAgICAgICB1bmxpbmtlZENhbGxzID0gc3RkOjpleGNoYW5nZShtX2NvZGVCbG9jay0+bV93
YXNtVG9XYXNtQ2FsbHNpdGVzW21fZnVuY3Rpb25JbmRleF0sIHVubGlua2VkQ2FsbHMpOwogICAg
IH0KQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIE9NR1BsYW46OndvcmsoQ29tcGlsYXRpb25FZmZv
cnQpCiAgICAgICAgICAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0g
bV9tb2R1bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNl
KGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2ln
bmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUlu
ZGV4KTsKICAgICAgICAgICAgICAgICAgICAgUHRyVGFnIG9sZFRhZyA9IHB0clRhZyhXYXNtQ2Fs
bFB0clRhZywgc2lnbmF0dXJlLmhhc2goKSk7Ci0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxh
YmVsKGVudHJ5cG9pbnQucmV0YWdnZWQob2xkVGFnLCBOZWFyQ2FsbFB0clRhZykpKTsKKyAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxM
b2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoZW50cnlwb2ludC5yZXRhZ2dlZChvbGRUYWcsIE5l
YXJDb2RlUHRyVGFnKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAJKHJldmlzaW9uIDIz
MDU4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd0V4
Y2VwdGlvbkZyb20KICAgICBSRUxFQVNFX0FTU0VSVCh0aHJvd1dhc21FeGNlcHRpb24pOwogICAg
IExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgbGlua0J1
ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKHRocm93V2FzbUV4Y2VwdGlvbiwgdGFnKSk7Ci0g
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgTmVhckNhbGxQdHJUYWcsICJUaHJv
dyBleGNlcHRpb24gZnJvbSBXYXNtIik7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1
ZmZlciwgTmVhckNvZGVQdHJUYWcsICJUaHJvdyBleGNlcHRpb24gZnJvbSBXYXNtIik7CiB9CiAK
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd1N0YWNrT3ZlcmZsb3dGcm9tV2FzbVRodW5rR2Vu
ZXJhdG9yKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpCkBAIC03NSw3ICs3NSw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd1N0YWNrT3ZlcmZsb3cKICAgICBhdXRvIGp1bXBUb0V4
Y2VwdGlvbkhhbmRsZXIgPSBqaXQuanVtcCgpOwogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgbGlua0J1ZmZlci5saW5rKGp1bXBUb0V4Y2VwdGlv
bkhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsKFRodW5rczo6c2luZ2xldG9uKCkuc3R1Yihsb2Nr
ZXIsIHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7Ci0gICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgTmVhckp1bXBQdHJUYWcsICJUaHJvdyBz
dGFjayBvdmVyZmxvdyBmcm9tIFdhc20iKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5r
QnVmZmVyLCBOZWFyQ29kZVB0clRhZywgIlRocm93IHN0YWNrIG92ZXJmbG93IGZyb20gV2FzbSIp
OwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdHJpZ2dlck9NR1RpZXJVcFRodW5rR2VuZXJh
dG9yKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKQEAgLTEwMiw3ICsxMDIsNyBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgdHJpZ2dlck9NR1RpZXJVcFRoCiAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxv
Z3VlKCk7CiAgICAgaml0LnJldCgpOwogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdM
T0JBTF9USFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgTmVh
ckNhbGxQdHJUYWcsICJUcmlnZ2VyIE9NRyB0aWVyIHVwIik7CisgICAgcmV0dXJuIEZJTkFMSVpF
X0NPREUobGlua0J1ZmZlciwgTmVhckNvZGVQdHJUYWcsICJUcmlnZ2VyIE9NRyB0aWVyIHVwIik7
CiB9CiAKIHN0YXRpYyBUaHVua3MqIHRodW5rczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dhc21Ub0pTLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAJKHJldmlzaW9uIDIzMDU4NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjY0LDcg
KzY2NCw3IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0YKICAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeSk7CiAK
ICAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhMaW5rQ2FsbFB0clRhZywgdm0pOwotICAgIHBh
dGNoQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKHZtLT5nZXRDVElTdHViKGxpbmtD
YWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZShsaW5rVGFnLCBOZWFyQ2FsbFB0clRhZykp
KTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cih2bS0+Z2V0Q1RJ
U3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUobGlua1RhZywgTmVhckNv
ZGVQdHJUYWcpKSk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgY2FsbFJldHVybkxvY2F0aW9uKHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93Q2FsbCkpOwogICAgIENvZGVMb2NhdGlv
bkxhYmVsIGhvdFBhdGhCZWdpbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRvQ2hlY2sp
KTsKICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBob3RQYXRoT3RoZXIgPSBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mTmVhckNhbGwoZmFzdENhbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAkocmV2aXNpb24gMjMwNTg3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKGFy
aXR5ID09IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCkKICAgICAgICAgICAgIHJldHVybiBtX2pzRW50
cnlwb2ludDsKICAgICAgICAgQVNTRVJUKGFyaXR5ID09IE11c3RDaGVja0FyaXR5KTsKLSAgICAg
ICAgcmV0dXJuIG1fanNFbnRyeXBvaW50LnJldGFnZ2VkKENvZGVFbnRyeVB0clRhZywgQ29kZUVu
dHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcpOworICAgICAgICByZXR1cm4gbV9qc0VudHJ5cG9pbnQ7
CiAgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkVudHJ5cG9pbnRMb2FkTG9j
YXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2ViQXNzZW1ibHlGdW5jdGlvbiwgbV9p
bXBvcnRhYmxlRnVuY3Rpb24pICsgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0
T2ZFbnRyeXBvaW50TG9hZExvY2F0aW9uKCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS95YXJyL1lhcnJKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95
YXJyL1lhcnJKSVQuY3BwCShyZXZpc2lvbiAyMzA1ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUveWFyci9ZYXJySklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUwOCw3ICszNTA4LDcgQEAg
cHVibGljOgogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFtX3RyeVJlYWRVbmljb2RlQ2hhcmFj
dGVyQ2FsbHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCB0cnlS
ZWFkVW5pY29kZUNoYXJhY3RlckhlbHBlciA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3RyeVJl
YWRVbmljb2RlQ2hhcmFjdGVyRW50cnksIE5lYXJDYWxsUHRyVGFnKTsKKyAgICAgICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsIHRyeVJlYWRVbmljb2RlQ2hhcmFjdGVySGVscGVyID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKG1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJFbnRyeSwgTmVhckNvZGVQdHJU
YWcpOwogCiAgICAgICAgICAgICBmb3IgKGF1dG8gY2FsbCA6IG1fdHJ5UmVhZFVuaWNvZGVDaGFy
YWN0ZXJDYWxscykKICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgdHJ5UmVh
ZFVuaWNvZGVDaGFyYWN0ZXJIZWxwZXIpOwo=
</data>
<flag name="review"
          id="356174"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>