<?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>231104</bug_id>
          
          <creation_ts>2021-10-01 14:39:36 -0700</creation_ts>
          <short_desc>Upgrade in-tree OSS ICU header to 64.2 because macOS Mojave build will be dropped</short_desc>
          <delta_ts>2021-10-01 21:39:16 -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>New Bugs</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="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1799558</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-10-01 14:39:36 -0700</bug_when>
    <thetext>Upgrade in-tree OSS ICU header to 64.2 because macOS Mojave build will be dropped</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799560</commentid>
    <comment_count>1</comment_count>
      <attachid>439913</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-10-01 14:41:31 -0700</bug_when>
    <thetext>Created attachment 439913
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799561</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-10-01 14:44:01 -0700</bug_when>
    <thetext>Note https://bugs.webkit.org/show_bug.cgi?id=231085</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799562</commentid>
    <comment_count>3</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-10-01 14:44:55 -0700</bug_when>
    <thetext>Let&apos;s ensure it is built in EWS bots. It is possible that JSC test failure can happen just because ICU headers are upgraded, and some features are enabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799600</commentid>
    <comment_count>4</comment_count>
      <attachid>439913</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-10-01 16:09:41 -0700</bug_when>
    <thetext>Comment on attachment 439913
Patch

yessssss</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799690</commentid>
    <comment_count>5</comment_count>
      <attachid>439913</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-10-01 20:58:46 -0700</bug_when>
    <thetext>Comment on attachment 439913
Patch

Thanks!!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799694</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-10-01 21:38:53 -0700</bug_when>
    <thetext>Committed r283433 (242420@main): &lt;https://commits.webkit.org/242420@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 439913.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799695</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-10-01 21:39:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/83792700&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439913</attachid>
            <date>2021-10-01 14:41:31 -0700</date>
            <delta_ts>2021-10-01 21:38:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231104-20211001144130.patch</filename>
            <type>text/plain</type>
            <size>1072591</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNDAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGMyMmFlZmJlZTFiN2E5M2JiYjk0MTU3
ODg4YWZlMmNhZmE0NGI3NzYuLmQ4NDEwODE2MWFmYmIxZjMxMTgyOWQ5ZTA0NmIxZGNlNDNiN2Iz
MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTMzIEBACisyMDIxLTEwLTAxICBZdXN1a2UgU3V6dWtpICA8eXN1
enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgVXBncmFkZSBpbi10cmVlIE9TUyBJQ1UgaGVhZGVy
IHRvIDY0LjIgYmVjYXVzZSBtYWNPUyBNb2phdmUgYnVpbGQgd2lsbCBiZSBkcm9wcGVkCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzExMDQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJLaXQgbm8gbG9u
Z2VyIHN1cHBvcnRzIG1hY09TIE1vamF2ZSBidWlsZC4gVGhpcyBtZWFucyB0aGF0IHdlIGNhbiB1
cGdyYWRlIGluLXRyZWUgSUNVIGhlYWRlciwKKyAgICAgICAgd2hpY2ggaXMgb25seSB1c2VkIHdo
ZW4gT1NTIFdlYktpdCBpcyBidWlsdC4gSUNVIDY0LjIgaXMgSUNVIHNoaXBwZWQgaW4gbWFjT1Mg
Q2F0YWxpbmEuCisKKyAgICAgICAgKiBpY3UvTElDRU5TRToKKyAgICAgICAgKiBpY3UvUkVBRE1F
OgorICAgICAgICAqIGljdS91bmljb2RlL2FscGhhaW5kZXguaDoKKyAgICAgICAgKiBpY3UvdW5p
Y29kZS9icmtpdGVyLmg6CisgICAgICAgICogaWN1L3VuaWNvZGUvYnl0ZXN0cmVhbS5oOgorICAg
ICAgICAoU3RyaW5nQnl0ZVNpbms6OlN0cmluZ0J5dGVTaW5rKToKKyAgICAgICAgKiBpY3UvdW5p
Y29kZS9jYWxlbmRhci5oOgorICAgICAgICAqIGljdS91bmljb2RlL2Nhbml0ZXIuaDoKKyAgICAg
ICAgKiBpY3UvdW5pY29kZS9jYXNlbWFwLmg6CisgICAgICAgICogaWN1L3VuaWNvZGUvY2hhcjE2
cHRyLmg6CisgICAgICAgIChDaGFyMTZQdHI6OkNoYXIxNlB0cik6CisgICAgICAgIChDaGFyMTZQ
dHI6On5DaGFyMTZQdHIpOgorICAgICAgICAoQ2hhcjE2UHRyOjpnZXQgY29uc3QpOgorICAgICAg
ICAoQ29uc3RDaGFyMTZQdHI6OkNvbnN0Q2hhcjE2UHRyKToKKyAgICAgICAgKENvbnN0Q2hhcjE2
UHRyOjp+Q29uc3RDaGFyMTZQdHIpOgorICAgICAgICAoQ29uc3RDaGFyMTZQdHI6OmdldCBjb25z
dCk6CisgICAgICAgICh0b1VDaGFyUHRyKToKKyAgICAgICAgKHRvT2xkVUNoYXJQdHIpOgorICAg
ICAgICAqIGljdS91bmljb2RlL2NvbGwuaDoKKyAgICAgICAgKiBpY3UvdW5pY29kZS9jb21wYWN0
ZGVjaW1hbGZvcm1hdC5oOgorICAgICAgICAqIGljdS91bmljb2RlL2N1cnJwaW5mLmg6CisgICAg
ICAgIChDdXJyZW5jeVBsdXJhbEluZm86Om9wZXJhdG9yIT0gY29uc3QpOgorICAgICAgICAqIGlj
dS91bmljb2RlL2N1cnJ1bml0Lmg6CisgICAgICAgICogaWN1L3VuaWNvZGUvZGF0ZWZtdC5oOgor
ICAgICAgICAqIGljdS91bmljb2RlL2RjZm10c3ltLmg6CisgICAgICAgICogaWN1L3VuaWNvZGUv
ZGVjaW1mbXQuaDoKKyAgICAgICAgKiBpY3UvdW5pY29kZS9kb2NtYWluLmg6CisgICAgICAgICog
aWN1L3VuaWNvZGUvZHRpbnRydi5oOgorICAgICAgICAqIGljdS91bmljb2RlL2R0aXR2Zm10Lmg6
CisgICAgICAgICogaWN1L3VuaWNvZGUvZHRpdHZpbmYuaDoKKyAgICAgICAgKiBpY3UvdW5pY29k
ZS9kdHB0bmdlbi5oOgorICAgICAgICAqIGljdS91bmljb2RlL2VkaXRzLmg6CisgICAgICAgICog
aWN1L3VuaWNvZGUvZW51bXNldC5oOgorICAgICAgICAqIGljdS91bmljb2RlL2ZpbHRlcmVkYnJr
Lmg6CisgICAgICAgICogaWN1L3VuaWNvZGUvZm10YWJsZS5oOgorICAgICAgICAqIGljdS91bmlj
b2RlL2Zvcm1hdHRlZHZhbHVlLmg6IEFkZGVkLgorICAgICAgICAqIGljdS91bmljb2RlL2dlbmRl
ci5oOgorICAgICAgICAqIGljdS91bmljb2RlL2ljdXBsdWcuaDoKKyAgICAgICAgKiBpY3UvdW5p
Y29kZS9saXN0Zm9ybWF0dGVyLmg6CisgICAgICAgICogaWN1L3VuaWNvZGUvbG9jYWxlYnVpbGRl
ci5oOiBBZGRlZC4KKyAgICAgICAgKiBpY3UvdW5pY29kZS9sb2NhbHBvaW50ZXIuaDoKKyAgICAg
ICAgKExvY2FsUG9pbnRlcjo6TG9jYWxQb2ludGVyKToKKyAgICAgICAgKExvY2FsUG9pbnRlcjo6
b3BlcmF0b3Igc3RkOjp1bmlxdWVfcHRyPFQ+ICk6CisgICAgICAgIChMb2NhbEFycmF5OjpMb2Nh
bEFycmF5KToKKyAgICAgICAgKExvY2FsQXJyYXk6Om9wZXJhdG9yIHN0ZDo6dW5pcXVlX3B0cjxU
W10+ICk6CisgICAgICAgICogaWN1L3VuaWNvZGUvbG9jZHNwbm0uaDoKKyAgICAgICAgKiBpY3Uv
dW5pY29kZS9sb2NpZC5oOgorICAgICAgICAoTG9jYWxlOjp0b0xhbmd1YWdlVGFnIGNvbnN0KToK
KyAgICAgICAgKExvY2FsZTo6Z2V0S2V5d29yZHMgY29uc3QpOgorICAgICAgICAoTG9jYWxlOjpn
ZXRVbmljb2RlS2V5d29yZHMgY29uc3QpOgorICAgICAgICAoTG9jYWxlOjpnZXRLZXl3b3JkVmFs
dWUgY29uc3QpOgorICAgICAgICAoTG9jYWxlOjpnZXRVbmljb2RlS2V5d29yZFZhbHVlIGNvbnN0
KToKKyAgICAgICAgKiBpY3UvdW5pY29kZS9tZWFzZm10Lmg6CisgICAgICAgICogaWN1L3VuaWNv
ZGUvbWVhc3VuaXQuaDoKKyAgICAgICAgKiBpY3UvdW5pY29kZS9tZXNzYWdlcGF0dGVybi5oOgor
ICAgICAgICAqIGljdS91bmljb2RlL21zZ2ZtdC5oOgorICAgICAgICAqIGljdS91bmljb2RlL25v
cm1hbGl6ZXIyLmg6CisgICAgICAgICogaWN1L3VuaWNvZGUvbm91bml0Lmg6CisgICAgICAgICog
aWN1L3VuaWNvZGUvbnVtYmVyZm9ybWF0dGVyLmg6CisgICAgICAgICogaWN1L3VuaWNvZGUvbnVt
YmVycmFuZ2Vmb3JtYXR0ZXIuaDogQWRkZWQuCisgICAgICAgICogaWN1L3VuaWNvZGUvbnVtZm10
Lmg6CisgICAgICAgICogaWN1L3VuaWNvZGUvbnVtc3lzLmg6CisgICAgICAgICogaWN1L3VuaWNv
ZGUvcGFyc2Vwb3MuaDoKKyAgICAgICAgKiBpY3UvdW5pY29kZS9wbGF0Zm9ybS5oOgorICAgICAg
ICAqIGljdS91bmljb2RlL3BsdXJmbXQuaDoKKyAgICAgICAgKiBpY3UvdW5pY29kZS9wbHVycnVs
ZS5oOgorICAgICAgICAqIGljdS91bmljb2RlL3B0eXBlcy5oOgorICAgICAgICAqIGljdS91bmlj
b2RlL3JiYmkuaDoKKyAgICAgICAgKiBpY3UvdW5pY29kZS9yYm5mLmg6CisgICAgICAgICogaWN1
L3VuaWNvZGUvcmVnZXguaDoKKyAgICAgICAgKiBpY3UvdW5pY29kZS9yZWdpb24uaDoKKyAgICAg
ICAgKiBpY3UvdW5pY29kZS9yZWxkYXRlZm10Lmg6CisgICAgICAgICogaWN1L3VuaWNvZGUvc2lt
cGxlZm9ybWF0dGVyLmg6CisgICAgICAgICogaWN1L3VuaWNvZGUvc21wZHRmbXQuaDoKKyAgICAg
ICAgKiBpY3UvdW5pY29kZS9zdHJpbmdvcHRpb25zLmg6CisgICAgICAgICogaWN1L3VuaWNvZGUv
c3RyaW5ndHJpZWJ1aWxkZXIuaDoKKyAgICAgICAgKiBpY3UvdW5pY29kZS90aW1lem9uZS5oOgor
ICAgICAgICAqIGljdS91bmljb2RlL3RyYW5zbGl0Lmg6CisgICAgICAgICogaWN1L3VuaWNvZGUv
dHpmbXQuaDoKKyAgICAgICAgKiBpY3UvdW5pY29kZS91YmlkaS5oOgorICAgICAgICAqIGljdS91
bmljb2RlL3ViaWRpdHJhbnNmb3JtLmg6CisgICAgICAgICogaWN1L3VuaWNvZGUvdWNhbC5oOgor
ICAgICAgICAqIGljdS91bmljb2RlL3VjaGFyLmg6CisgICAgICAgICogaWN1L3VuaWNvZGUvdWNu
di5oOgorICAgICAgICAqIGljdS91bmljb2RlL3Vjb2wuaDoKKyAgICAgICAgKiBpY3UvdW5pY29k
ZS91Y29uZmlnLmg6CisgICAgICAgICogaWN1L3VuaWNvZGUvdWNwbWFwLmg6IEFkZGVkLgorICAg
ICAgICAqIGljdS91bmljb2RlL3VjcHRyaWUuaDogQWRkZWQuCisgICAgICAgICogaWN1L3VuaWNv
ZGUvdWN1cnIuaDoKKyAgICAgICAgKiBpY3UvdW5pY29kZS91ZGF0Lmg6CisgICAgICAgICogaWN1
L3VuaWNvZGUvdWRhdGVpbnRlcnZhbGZvcm1hdC5oOgorICAgICAgICAqIGljdS91bmljb2RlL3Vk
YXRwZy5oOgorICAgICAgICAqIGljdS91bmljb2RlL3VlbnVtLmg6CisgICAgICAgICogaWN1L3Vu
aWNvZGUvdWZvcm1hdHRlZHZhbHVlLmg6IEFkZGVkLgorICAgICAgICAqIGljdS91bmljb2RlL3Vn
ZW5kZXIuaDoKKyAgICAgICAgKiBpY3UvdW5pY29kZS91bGlzdGZvcm1hdHRlci5oOgorICAgICAg
ICAqIGljdS91bmljb2RlL3VtYWNoaW5lLmg6CisgICAgICAgICogaWN1L3VuaWNvZGUvdW11dGFi
bGVjcHRyaWUuaDogQWRkZWQuCisgICAgICAgICogaWN1L3VuaWNvZGUvdW5pc2V0Lmg6CisgICAg
ICAgICogaWN1L3VuaWNvZGUvdW5pc3RyLmg6CisgICAgICAgICogaWN1L3VuaWNvZGUvdW51bS5o
OgorICAgICAgICAqIGljdS91bmljb2RlL3VudW1iZXJmb3JtYXR0ZXIuaDoKKyAgICAgICAgKiBp
Y3UvdW5pY29kZS91bnVtc3lzLmg6CisgICAgICAgICogaWN1L3VuaWNvZGUvdW9iamVjdC5oOgor
ICAgICAgICAqIGljdS91bmljb2RlL3VwbHVyYWxydWxlcy5oOgorICAgICAgICAqIGljdS91bmlj
b2RlL3VyZWdleC5oOgorICAgICAgICAqIGljdS91bmljb2RlL3VyZWxkYXRlZm10Lmg6CisgICAg
ICAgICogaWN1L3VuaWNvZGUvdXJlbmFtZS5oOgorICAgICAgICAqIGljdS91bmljb2RlL3VyZXMu
aDoKKyAgICAgICAgKiBpY3UvdW5pY29kZS91c2NyaXB0Lmg6CisgICAgICAgICogaWN1L3VuaWNv
ZGUvdXNlYXJjaC5oOgorICAgICAgICAqIGljdS91bmljb2RlL3VzZXQuaDoKKyAgICAgICAgKiBp
Y3UvdW5pY29kZS91c3Bvb2YuaDoKKyAgICAgICAgKiBpY3UvdW5pY29kZS91c3RyaW5nLmg6Cisg
ICAgICAgICogaWN1L3VuaWNvZGUvdXRleHQuaDoKKyAgICAgICAgKiBpY3UvdW5pY29kZS91dGYx
Ni5oOgorICAgICAgICAqIGljdS91bmljb2RlL3V0ZjguaDoKKyAgICAgICAgKiBpY3UvdW5pY29k
ZS91dHlwZXMuaDoKKyAgICAgICAgKiBpY3UvdW5pY29kZS91dmVybnVtLmg6CisKIDIwMjEtMTAt
MDEgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzdXBw
b3J0IGZvciBQdXNoRXZlbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvaWN1L0xJQ0VOU0UgYi9T
b3VyY2UvV1RGL2ljdS9MSUNFTlNFCmluZGV4IGMyNmRlNWM1ODQyYmRkOTRlZDY1M2QzYWUyYjNj
MmExMTdhMzQyZjQuLjA0YmQzNDMyNTllMzExZGQwMmRkZDcwY2NkZTQ5YzMwMGRiNjAwODkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvaWN1L0xJQ0VOU0UKKysrIGIvU291cmNlL1dURi9pY3UvTElD
RU5TRQpAQCAtMSw3ICsxLDcgQEAKIENPUFlSSUdIVCBBTkQgUEVSTUlTU0lPTiBOT1RJQ0UgKElD
VSA1OCBhbmQgbGF0ZXIpCiAKLUNvcHlyaWdodCDCqSAxOTkxLTIwMTggVW5pY29kZSwgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRlcm1zIG9mIFVzZSBp
biBodHRwOi8vd3d3LnVuaWNvZGUub3JnL2NvcHlyaWdodC5odG1sLgorQ29weXJpZ2h0IMKpIDE5
OTEtMjAxOSBVbmljb2RlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitEaXN0cmlidXRlZCB1
bmRlciB0aGUgVGVybXMgb2YgVXNlIGluIGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL2NvcHlyaWdo
dC5odG1sLgogCiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwg
dG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKIGEgY29weSBvZiB0aGUgVW5pY29kZSBkYXRhIGZpbGVz
IGFuZCBhbnkgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L2ljdS9SRUFETUUgYi9Tb3VyY2UvV1RGL2ljdS9SRUFETUUKaW5kZXggOGZlMTcxYTU2ODdlNzBm
ODFlMjg1ZmRlZWRhOGI4MTBkMzU2Y2VkMC4uMGIyMjQ4OGFlM2M0ZjI0Zjk1ZjAwN2E5M2U0M2Fm
NmJkNGViN2E0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9pY3UvUkVBRE1FCisrKyBiL1NvdXJj
ZS9XVEYvaWN1L1JFQURNRQpAQCAtMSw4ICsxLDggQEAKLVRoZSBoZWFkZXJzIGluIHRoaXMgZGly
ZWN0b3J5IGFyZSBmb3IgY29tcGlsaW5nIG9uIG1hY09TIDEwLjE0IChNb2phdmUpIGFuZCBuZXdl
ci4KK1RoZSBoZWFkZXJzIGluIHRoaXMgZGlyZWN0b3J5IGFyZSBmb3IgY29tcGlsaW5nIG9uIG1h
Y09TIDEwLjE1IChDYXRhbGluYSkgYW5kIG5ld2VyLgogbWFjT1MgcmVsZWFzZXMgaW5jbHVkZSB0
aGUgSUNVIGJpbmFyeSwgYnV0IG5vdCBJQ1UgaGVhZGVycy4KIAogRm9yIG90aGVyIHBsYXRmb3Jt
cywgaW5zdGFsbGVkIElDVSBoZWFkZXJzIHNob3VsZCBiZSB1c2VkIHJhdGhlciB0aGFuIHRoZXNl
LgogVGhleSBhcmUgc3BlY2lmaWMgdG8gdGhlIG1hY09TIHBsYXRmb3JtLgogCi1UaGUgaGVhZGVy
cyBoZXJlIGFyZSBmcm9tIElDVSB2ZXJzaW9uIDYyIGRvd25sb2FkZWQgZnJvbSB0aGUgSUNVIHBy
b2plY3QuCi1odHRwOi8vc2l0ZS5pY3UtcHJvamVjdC5vcmcvZG93bmxvYWQvNjIjVE9DLUlDVTRD
LURvd25sb2FkCitUaGUgaGVhZGVycyBoZXJlIGFyZSBmcm9tIElDVSB2ZXJzaW9uIDY0LjIgZG93
bmxvYWRlZCBmcm9tIHRoZSBJQ1UgcHJvamVjdC4KK2h0dHBzOi8vaWN1LnVuaWNvZGUub3JnL2Rv
d25sb2FkLzY0I2gudnJqbTl0eW9ldzlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2ljdS91bmlj
b2RlL2FscGhhaW5kZXguaCBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvYWxwaGFpbmRleC5oCmlu
ZGV4IDE0NDJmNzU0ZTQ2ZDc1OWYxZjEwODU2ZjNiOWU5NWQzZDlkMWNhYmYuLjkxNTI0YTFhZTUy
Yzk5NWM1YTIwMzdiOWQ3M2RiNjg5NjU4ODgzODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvaWN1
L3VuaWNvZGUvYWxwaGFpbmRleC5oCisrKyBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvYWxwaGFp
bmRleC5oCkBAIC0yNjYsNiArMjY2LDggQEAgY2xhc3MgVV9JMThOX0FQSSBBbHBoYWJldGljSW5k
ZXg6IHB1YmxpYyBVT2JqZWN0IHsKICAgICAgICAgICogVXNlIGdldEJ1Y2tldCgpIHRvIGdldCB0
aGUgYnVja2V0J3MgcHJvcGVydGllcy4KICAgICAgICAgICoKICAgICAgICAgICogQHBhcmFtIG5h
bWUgdGhlIHN0cmluZyB0byBiZSBzb3J0ZWQgaW50byBhbiBpbmRleCBidWNrZXQKKyAgICAgICAg
ICogQHBhcmFtIGVycm9yQ29kZSBFcnJvciBjb2RlLCB3aWxsIGJlIHNldCB3aXRoIHRoZSByZWFz
b24gaWYgdGhlCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIGZhaWxzLgog
ICAgICAgICAgKiBAcmV0dXJuIHRoZSBidWNrZXQgbnVtYmVyIGZvciB0aGUgbmFtZQogICAgICAg
ICAgKiBAc3RhYmxlIElDVSA1MQogICAgICAgICAgKi8KQEAgLTM3Nyw5ICszNzksMTAgQEAgY2xh
c3MgVV9JMThOX0FQSSBBbHBoYWJldGljSW5kZXg6IHB1YmxpYyBVT2JqZWN0IHsKIAogCiAgICAv
KioKLSAgICAgKiBHZXQgdGhlIGRlZmF1bHQgbGFiZWwgdXNlZCBmb3IgYWJicmV2aWF0ZWQgYnVj
a2V0cyA8aT5iZXR3ZWVuPC9pPiBvdGhlciBpbmRleCBjaGFyYWN0ZXJzLgotICAgICAqIEZvciBl
eGFtcGxlLCBjb25zaWRlciB0aGUgbGFiZWxzIHdoZW4gTGF0aW4gYW5kIEdyZWVrIGFyZSB1c2Vk
OgotICAgICAqICAgICBYIFkgWiAuLi4gJiN4MDM5MTsgJiN4MDM5MjsgJiN4MDM5MzsuCisgICAg
ICogR2V0IHRoZSBkZWZhdWx0IGxhYmVsIHVzZWQgZm9yIGFiYnJldmlhdGVkIGJ1Y2tldHMgKmJl
dHdlZW4qIG90aGVyIGluZGV4IGNoYXJhY3RlcnMuCisgICAgICogRm9yIGV4YW1wbGUsIGNvbnNp
ZGVyIHRoZSBsYWJlbHMgd2hlbiBMYXRpbiAoWCBZIFopIGFuZCBHcmVlayAozpEgzpIgzpMpIGFy
ZSB1c2VkOgorICAgICAqCisgICAgICogICAgIFggWSBaIC4uLiDOkSDOkiDOky4KICAgICAgKgog
ICAgICAqIEByZXR1cm4gaW5mbG93IGxhYmVsCiAgICAgICogQHN0YWJsZSBJQ1UgNC44CkBAIC02
NDgsNyArNjUxLDcgQEAgY2xhc3MgVV9JMThOX0FQSSBBbHBoYWJldGljSW5kZXg6IHB1YmxpYyBV
T2JqZWN0IHsKICAgICAgLyoqCiAgICAgICAqICAgTm8gYXNzaWdubWVudC4KICAgICAgICovCi0g
ICAgIEFscGhhYmV0aWNJbmRleCAmb3BlcmF0b3IgPShjb25zdCBBbHBoYWJldGljSW5kZXggJiAv
Km90aGVyKi8pIHsgcmV0dXJuICp0aGlzO307CisgICAgIEFscGhhYmV0aWNJbmRleCAmb3BlcmF0
b3IgPShjb25zdCBBbHBoYWJldGljSW5kZXggJiAvKm90aGVyKi8pIHsgcmV0dXJuICp0aGlzO30K
IAogICAgIC8qKgogICAgICAqIE5vIEVxdWFsaXR5IG9wZXJhdG9ycy4KQEAgLTcwMCw2ICs3MDMs
NyBAQCBjbGFzcyBVX0kxOE5fQVBJIEFscGhhYmV0aWNJbmRleDogcHVibGljIFVPYmplY3Qgewog
ICAgIC8qKgogICAgICAqIEEgKG5hbWUsIGRhdGEpIHBhaXIsIHRvIGJlIHNvcnRlZCBieSBuYW1l
IGludG8gb25lIG9mIHRoZSBpbmRleCBidWNrZXRzLgogICAgICAqIFRoZSB1c2VyIGRhdGEgaXMg
bm90IHVzZWQgYnkgdGhlIGluZGV4IGltcGxlbWVudGF0aW9uLgorICAgICAqIFxjb25kCiAgICAg
ICogQGludGVybmFsCiAgICAgICovCiAgICAgc3RydWN0IFJlY29yZDogcHVibGljIFVNZW1vcnkg
ewpAQCAtNzA4LDYgKzcxMiw3IEBAIGNsYXNzIFVfSTE4Tl9BUEkgQWxwaGFiZXRpY0luZGV4OiBw
dWJsaWMgVU9iamVjdCB7CiAgICAgICAgIFJlY29yZChjb25zdCBVbmljb2RlU3RyaW5nICZuYW1l
LCBjb25zdCB2b2lkICpkYXRhKTsKICAgICAgICAgflJlY29yZCgpOwogICAgIH07CisgICAgLyoq
IFxlbmRjb25kICovCiAjZW5kaWYgIC8qIFVfSElERV9JTlRFUk5BTF9BUEkgKi8KIAogcHJpdmF0
ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvYnJraXRlci5oIGIvU291cmNl
L1dURi9pY3UvdW5pY29kZS9icmtpdGVyLmgKaW5kZXggNWZhZWVkZmE5M2VjYjhlNTVlZmE1MmVl
ODZjOTMzZDljOWYzMzNmYi4uYWMxYmYxZGYyOWYyMTRkZTBlNDc5MTI4ODVjNTQ2ZDg4M2ZiODcx
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9pY3UvdW5pY29kZS9icmtpdGVyLmgKKysrIGIvU291
cmNlL1dURi9pY3UvdW5pY29kZS9icmtpdGVyLmgKQEAgLTQzMSwxMiArNDMxLDEzIEBAIGNsYXNz
IFVfQ09NTU9OX0FQSSBCcmVha0l0ZXJhdG9yIDogcHVibGljIFVPYmplY3QgewogICAgIHN0YXRp
YyBCcmVha0l0ZXJhdG9yKiBVX0VYUE9SVDIKICAgICBjcmVhdGVTZW50ZW5jZUluc3RhbmNlKGNv
bnN0IExvY2FsZSYgd2hlcmUsIFVFcnJvckNvZGUmIHN0YXR1cyk7CiAKKyNpZm5kZWYgVV9ISURF
X0RFUFJFQ0FURURfQVBJCiAgICAgLyoqCiAgICAgICogQ3JlYXRlIEJyZWFrSXRlcmF0b3IgZm9y
IHRpdGxlLWNhc2luZyBicmVha3MgdXNpbmcgdGhlIHNwZWNpZmllZCBsb2NhbGUKICAgICAgKiBS
ZXR1cm5zIGFuIGluc3RhbmNlIG9mIGEgQnJlYWtJdGVyYXRvciBpbXBsZW1lbnRpbmcgdGl0bGUg
YnJlYWtzLgogICAgICAqIFRoZSBpdGVyYXRvciByZXR1cm5lZCBsb2NhdGVzIHRpdGxlIGJvdW5k
YXJpZXMgYXMgZGVzY3JpYmVkIGZvcgogICAgICAqIFVuaWNvZGUgMy4yIG9ubHkuIEZvciBVbmlj
b2RlIDQuMCBhbmQgYWJvdmUgdGl0bGUgYm91bmRhcnkgaXRlcmF0aW9uLAotICAgICAqIHBsZWFz
ZSB1c2UgV29yZCBCb3VuZGFyeSBpdGVyYXRvci57QGxpbmsgI2NyZWF0ZVdvcmRJbnN0YW5jZSB9
CisgICAgICogcGxlYXNlIHVzZSBhIHdvcmQgYm91bmRhcnkgaXRlcmF0b3IuIFNlZSB7QGxpbmsg
I2NyZWF0ZVdvcmRJbnN0YW5jZSB9LgogICAgICAqCiAgICAgICogQHBhcmFtIHdoZXJlIHRoZSBs
b2NhbGUuCiAgICAgICogQHBhcmFtIHN0YXR1cyBUaGUgZXJyb3IgY29kZS4KQEAgLTQ1MSwxMCAr
NDUyLDExIEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBCcmVha0l0ZXJhdG9yIDogcHVibGljIFVPYmpl
Y3QgewogICAgICAqIHVzZWQ7IG5laXRoZXIgdGhlIHJlcXVlc3RlZCBsb2NhbGUgbm9yIGFueSBv
ZiBpdHMgZmFsbCBiYWNrIGxvY2FsZXMKICAgICAgKiBjb3VsZCBiZSBmb3VuZC4KICAgICAgKiBU
aGUgY2FsbGVyIG93bnMgdGhlIHJldHVybmVkIG9iamVjdCBhbmQgaXMgcmVzcG9uc2libGUgZm9y
IGRlbGV0aW5nIGl0LgotICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqIEBkZXByZWNhdGVk
IElDVSA2NCBVc2UgY3JlYXRlV29yZEluc3RhbmNlIGluc3RlYWQuCiAgICAgICovCiAgICAgc3Rh
dGljIEJyZWFrSXRlcmF0b3IqIFVfRVhQT1JUMgogICAgIGNyZWF0ZVRpdGxlSW5zdGFuY2UoY29u
c3QgTG9jYWxlJiB3aGVyZSwgVUVycm9yQ29kZSYgc3RhdHVzKTsKKyNlbmRpZiAvKiBVX0hJREVf
REVQUkVDQVRFRF9BUEkgKi8KIAogICAgIC8qKgogICAgICAqIEdldCB0aGUgc2V0IG9mIExvY2Fs
ZXMgZm9yIHdoaWNoIFRleHRCb3VuZGFyaWVzIGFyZSBpbnN0YWxsZWQuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL2ljdS91bmljb2RlL2J5dGVzdHJlYW0uaCBiL1NvdXJjZS9XVEYvaWN1L3VuaWNv
ZGUvYnl0ZXN0cmVhbS5oCmluZGV4IDZmNjFjMzg0Zjc5NTg2NmIxNjVjZTk1ZTliNWEyNjM4MWYw
NDNhMjEuLjQ5MzExNWY3MWM3ZDM1NWZlY2Y0NmIxYWYyNzczMGEwZTMyYzMzOTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvYnl0ZXN0cmVhbS5oCisrKyBiL1NvdXJjZS9XVEYv
aWN1L3VuaWNvZGUvYnl0ZXN0cmVhbS5oCkBAIC0yMzcsMTMgKzIzNywxMiBAQCBjbGFzcyBTdHJp
bmdCeXRlU2luayA6IHB1YmxpYyBCeXRlU2luayB7CiAgICAqIEBzdGFibGUgSUNVIDQuMgogICAg
Ki8KICAgU3RyaW5nQnl0ZVNpbmsoU3RyaW5nQ2xhc3MqIGRlc3QpIDogZGVzdF8oZGVzdCkgeyB9
Ci0jaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKICAgLyoqCiAgICAqIENvbnN0cnVjdHMgYSBCeXRl
U2luayB0aGF0IHJlc2VydmVzIGFwcGVuZCBjYXBhY2l0eSBhbmQgd2lsbCBhcHBlbmQgYnl0ZXMg
dG8gdGhlIGRlc3Qgc3RyaW5nLgogICAgKiAKICAgICogQHBhcmFtIGRlc3QgcG9pbnRlciB0byBz
dHJpbmcgb2JqZWN0IHRvIGFwcGVuZCB0bwogICAgKiBAcGFyYW0gaW5pdGlhbEFwcGVuZENhcGFj
aXR5IGNhcGFjaXR5IGJleW9uZCBkZXN0LT5sZW5ndGgoKSB0byBiZSByZXNlcnZlKClkCi0gICAq
IEBkcmFmdCBJQ1UgNjAKKyAgICogQHN0YWJsZSBJQ1UgNjAKICAgICovCiAgIFN0cmluZ0J5dGVT
aW5rKFN0cmluZ0NsYXNzKiBkZXN0LCBpbnQzMl90IGluaXRpYWxBcHBlbmRDYXBhY2l0eSkgOiBk
ZXN0XyhkZXN0KSB7CiAgICAgaWYgKGluaXRpYWxBcHBlbmRDYXBhY2l0eSA+IDAgJiYKQEAgLTI1
MSw3ICsyNTAsNiBAQCBjbGFzcyBTdHJpbmdCeXRlU2luayA6IHB1YmxpYyBCeXRlU2luayB7CiAg
ICAgICBkZXN0LT5yZXNlcnZlKGRlc3QtPmxlbmd0aCgpICsgaW5pdGlhbEFwcGVuZENhcGFjaXR5
KTsKICAgICB9CiAgIH0KLSNlbmRpZiAgLy8gVV9ISURFX0RSQUZUX0FQSQogICAvKioKICAgICog
QXBwZW5kICJieXRlc1swLG4tMV0iIHRvIHRoaXMuCiAgICAqIEBwYXJhbSBkYXRhIHRoZSBwb2lu
dGVyIHRvIHRoZSBieXRlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9pY3UvdW5pY29kZS9jYWxl
bmRhci5oIGIvU291cmNlL1dURi9pY3UvdW5pY29kZS9jYWxlbmRhci5oCmluZGV4IGY0NzhlNWNh
N2RmYTIzNzVhNTcwYTBiZTNhMGVkYWM0NTQyMGY1ZjMuLjAyM2NmMDUzZjI1NGZiMmU1YjYyZTQw
YjQwYTMyMzg3YjI3MGNhOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvY2Fs
ZW5kYXIuaAorKysgYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL2NhbGVuZGFyLmgKQEAgLTUyLDgz
ICs1Miw2NCBAQCB0eXBlZGVmIGludDMyX3QgVUZpZWxkUmVzb2x1dGlvblRhYmxlWzEyXVs4XTsK
IAogY2xhc3MgQmFzaWNUaW1lWm9uZTsKIC8qKgotICogPGNvZGU+Q2FsZW5kYXI8L2NvZGU+IGlz
IGFuIGFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbgotICogYSA8Y29k
ZT5VRGF0ZTwvY29kZT4gb2JqZWN0IGFuZCBhIHNldCBvZiBpbnRlZ2VyIGZpZWxkcyBzdWNoIGFz
Ci0gKiA8Y29kZT5ZRUFSPC9jb2RlPiwgPGNvZGU+TU9OVEg8L2NvZGU+LCA8Y29kZT5EQVk8L2Nv
ZGU+LCA8Y29kZT5IT1VSPC9jb2RlPiwKLSAqIGFuZCBzbyBvbi4gKEEgPGNvZGU+VURhdGU8L2Nv
ZGU+IG9iamVjdCByZXByZXNlbnRzIGEgc3BlY2lmaWMgaW5zdGFudCBpbgorICogYENhbGVuZGFy
YCBpcyBhbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBjb252ZXJ0aW5nIGJldHdlZW4KKyAqIGEg
YFVEYXRlYCBvYmplY3QgYW5kIGEgc2V0IG9mIGludGVnZXIgZmllbGRzIHN1Y2ggYXMKKyAqIGBZ
RUFSYCwgYE1PTlRIYCwgYERBWWAsIGBIT1VSYCwgYW5kIHNvIG9uLgorICogKEEgYFVEYXRlYCBv
YmplY3QgcmVwcmVzZW50cyBhIHNwZWNpZmljIGluc3RhbnQgaW4KICAqIHRpbWUgd2l0aCBtaWxs
aXNlY29uZCBwcmVjaXNpb24uIFNlZSBVRGF0ZQotICogZm9yIGluZm9ybWF0aW9uIGFib3V0IHRo
ZSA8Y29kZT5VRGF0ZTwvY29kZT4gY2xhc3MuKQorICogZm9yIGluZm9ybWF0aW9uIGFib3V0IHRo
ZSBgVURhdGVgIGNsYXNzLikKICAqCi0gKiA8cD4KLSAqIFN1YmNsYXNzZXMgb2YgPGNvZGU+Q2Fs
ZW5kYXI8L2NvZGU+IGludGVycHJldCBhIDxjb2RlPlVEYXRlPC9jb2RlPgorICogU3ViY2xhc3Nl
cyBvZiBgQ2FsZW5kYXJgIGludGVycHJldCBhIGBVRGF0ZWAKICAqIGFjY29yZGluZyB0byB0aGUg
cnVsZXMgb2YgYSBzcGVjaWZpYyBjYWxlbmRhciBzeXN0ZW0uCi0gKiBUaGUgbW9zdCBjb21tb25s
eSB1c2VkIHN1YmNsYXNzIG9mIDxjb2RlPkNhbGVuZGFyPC9jb2RlPiBpcwotICogPGNvZGU+R3Jl
Z29yaWFuQ2FsZW5kYXI8L2NvZGU+LiBPdGhlciBzdWJjbGFzc2VzIGNvdWxkIHJlcHJlc2VudAor
ICogVGhlIG1vc3QgY29tbW9ubHkgdXNlZCBzdWJjbGFzcyBvZiBgQ2FsZW5kYXJgIGlzCisgKiBg
R3JlZ29yaWFuQ2FsZW5kYXJgLiBPdGhlciBzdWJjbGFzc2VzIGNvdWxkIHJlcHJlc2VudAogICog
dGhlIHZhcmlvdXMgdHlwZXMgb2YgbHVuYXIgY2FsZW5kYXJzIGluIHVzZSBpbiBtYW55IHBhcnRz
IG9mIHRoZSB3b3JsZC4KICAqCi0gKiA8cD4KLSAqIDxiPk5PVEU8L2I+OiAoSUNVIDIuNikgVGhl
IHN1YmNsYXNzIGludGVyZmFjZSBzaG91bGQgYmUgY29uc2lkZXJlZCB1bnN0YWJsZQotICogLSBp
dCBXSUxMIGNoYW5nZS4KKyAqICoqTk9URSoqOiAoSUNVIDIuNikgVGhlIHN1YmNsYXNzIGludGVy
ZmFjZSBzaG91bGQgYmUgY29uc2lkZXJlZCB1bnN0YWJsZSAtCisgKiBpdCBXSUxMIGNoYW5nZS4K
ICAqCi0gKiA8cD4KLSAqIExpa2Ugb3RoZXIgbG9jYWxlLXNlbnNpdGl2ZSBjbGFzc2VzLCA8Y29k
ZT5DYWxlbmRhcjwvY29kZT4gcHJvdmlkZXMgYQotICogc3RhdGljIG1ldGhvZCwgPGNvZGU+Y3Jl
YXRlSW5zdGFuY2U8L2NvZGU+LCBmb3IgZ2V0dGluZyBhIGdlbmVyYWxseSB1c2VmdWwKLSAqIG9i
amVjdCBvZiB0aGlzIHR5cGUuIDxjb2RlPkNhbGVuZGFyPC9jb2RlPidzIDxjb2RlPmNyZWF0ZUlu
c3RhbmNlPC9jb2RlPiBtZXRob2QKLSAqIHJldHVybnMgdGhlIGFwcHJvcHJpYXRlIDxjb2RlPkNh
bGVuZGFyPC9jb2RlPiBzdWJjbGFzcyB3aG9zZQorICogTGlrZSBvdGhlciBsb2NhbGUtc2Vuc2l0
aXZlIGNsYXNzZXMsIGBDYWxlbmRhcmAgcHJvdmlkZXMgYQorICogc3RhdGljIG1ldGhvZCwgYGNy
ZWF0ZUluc3RhbmNlYCwgZm9yIGdldHRpbmcgYSBnZW5lcmFsbHkgdXNlZnVsCisgKiBvYmplY3Qg
b2YgdGhpcyB0eXBlLiBgQ2FsZW5kYXJgJ3MgYGNyZWF0ZUluc3RhbmNlYCBtZXRob2QKKyAqIHJl
dHVybnMgdGhlIGFwcHJvcHJpYXRlIGBDYWxlbmRhcmAgc3ViY2xhc3Mgd2hvc2UKICAqIHRpbWUg
ZmllbGRzIGhhdmUgYmVlbiBpbml0aWFsaXplZCB3aXRoIHRoZSBjdXJyZW50IGRhdGUgYW5kIHRp
bWU6Ci0gKiBcaHRtbG9ubHk8YmxvY2txdW90ZT5cZW5kaHRtbG9ubHkKLSAqIDxwcmU+Ci0gKiBD
YWxlbmRhciAqcmlnaHROb3cgPSBDYWxlbmRhcjo6Y3JlYXRlSW5zdGFuY2UoZXJyQ29kZSk7Ci0g
KiA8L3ByZT4KLSAqIFxodG1sb25seTwvYmxvY2txdW90ZT5cZW5kaHRtbG9ubHkKICAqCi0gKiA8
cD4KLSAqIEEgPGNvZGU+Q2FsZW5kYXI8L2NvZGU+IG9iamVjdCBjYW4gcHJvZHVjZSBhbGwgdGhl
IHRpbWUgZmllbGQgdmFsdWVzCisgKiAgICAgQ2FsZW5kYXIgKnJpZ2h0Tm93ID0gQ2FsZW5kYXI6
OmNyZWF0ZUluc3RhbmNlKGVyckNvZGUpOworICoKKyAqIEEgYENhbGVuZGFyYCBvYmplY3QgY2Fu
IHByb2R1Y2UgYWxsIHRoZSB0aW1lIGZpZWxkIHZhbHVlcwogICogbmVlZGVkIHRvIGltcGxlbWVu
dCB0aGUgZGF0ZS10aW1lIGZvcm1hdHRpbmcgZm9yIGEgcGFydGljdWxhciBsYW5ndWFnZQogICog
YW5kIGNhbGVuZGFyIHN0eWxlIChmb3IgZXhhbXBsZSwgSmFwYW5lc2UtR3JlZ29yaWFuLCBKYXBh
bmVzZS1UcmFkaXRpb25hbCkuCiAgKgotICogPHA+Ci0gKiBXaGVuIGNvbXB1dGluZyBhIDxjb2Rl
PlVEYXRlPC9jb2RlPiBmcm9tIHRpbWUgZmllbGRzLCBzb21lIHNwZWNpYWwgY2lyY3Vtc3RhbmNl
cworICogV2hlbiBjb21wdXRpbmcgYSBgVURhdGVgIGZyb20gdGltZSBmaWVsZHMsIHNvbWUgc3Bl
Y2lhbCBjaXJjdW1zdGFuY2VzCiAgKiBtYXkgYXJpc2U6IHRoZXJlIG1heSBiZSBpbnN1ZmZpY2ll
bnQgaW5mb3JtYXRpb24gdG8gY29tcHV0ZSB0aGUKLSAqIDxjb2RlPlVEYXRlPC9jb2RlPiAoc3Vj
aCBhcyBvbmx5IHllYXIgYW5kIG1vbnRoIGJ1dCBubyBkYXkgaW4gdGhlIG1vbnRoKSwKKyAqIGBV
RGF0ZWAgKHN1Y2ggYXMgb25seSB5ZWFyIGFuZCBtb250aCBidXQgbm8gZGF5IGluIHRoZSBtb250
aCksCiAgKiB0aGVyZSBtYXkgYmUgaW5jb25zaXN0ZW50IGluZm9ybWF0aW9uIChzdWNoIGFzICJU
dWVzZGF5LCBKdWx5IDE1LCAxOTk2IgogICogLS0gSnVseSAxNSwgMTk5NiBpcyBhY3R1YWxseSBh
IE1vbmRheSksIG9yIHRoZSBpbnB1dCB0aW1lIG1pZ2h0IGJlIGFtYmlndW91cwogICogYmVjYXVz
ZSBvZiB0aW1lIHpvbmUgdHJhbnNpdGlvbi4KICAqCi0gKiA8cD4KLSAqIDxzdHJvbmc+SW5zdWZm
aWNpZW50IGluZm9ybWF0aW9uLjwvc3Ryb25nPiBUaGUgY2FsZW5kYXIgd2lsbCB1c2UgZGVmYXVs
dAorICogKipJbnN1ZmZpY2llbnQgaW5mb3JtYXRpb24uKiogVGhlIGNhbGVuZGFyIHdpbGwgdXNl
IGRlZmF1bHQKICAqIGluZm9ybWF0aW9uIHRvIHNwZWNpZnkgdGhlIG1pc3NpbmcgZmllbGRzLiBU
aGlzIG1heSB2YXJ5IGJ5IGNhbGVuZGFyOyBmb3IKICAqIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIs
IHRoZSBkZWZhdWx0IGZvciBhIGZpZWxkIGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlCiAgKiBz
dGFydCBvZiB0aGUgZXBvY2g6IGkuZS4sIFlFQVIgPSAxOTcwLCBNT05USCA9IEpBTlVBUlksIERB
VEUgPSAxLCBldGMuCiAgKgotICogPHA+Ci0gKiA8c3Ryb25nPkluY29uc2lzdGVudCBpbmZvcm1h
dGlvbi48L3N0cm9uZz4gSWYgZmllbGRzIGNvbmZsaWN0LCB0aGUgY2FsZW5kYXIKKyAqICoqSW5j
b25zaXN0ZW50IGluZm9ybWF0aW9uLioqIElmIGZpZWxkcyBjb25mbGljdCwgdGhlIGNhbGVuZGFy
CiAgKiB3aWxsIGdpdmUgcHJlZmVyZW5jZSB0byBmaWVsZHMgc2V0IG1vcmUgcmVjZW50bHkuIEZv
ciBleGFtcGxlLCB3aGVuCiAgKiBkZXRlcm1pbmluZyB0aGUgZGF5LCB0aGUgY2FsZW5kYXIgd2ls
bCBsb29rIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZwogICogY29tYmluYXRpb25zIG9mIGZpZWxk
cy4gIFRoZSBtb3N0IHJlY2VudCBjb21iaW5hdGlvbiwgYXMgZGV0ZXJtaW5lZCBieSB0aGUKICAq
IG1vc3QgcmVjZW50bHkgc2V0IHNpbmdsZSBmaWVsZCwgd2lsbCBiZSB1c2VkLgogICoKLSAqIFxo
dG1sb25seTxibG9ja3F1b3RlPlxlbmRodG1sb25seQotICogPHByZT4KLSAqIE1PTlRIICsgREFZ
X09GX01PTlRICi0gKiBNT05USCArIFdFRUtfT0ZfTU9OVEggKyBEQVlfT0ZfV0VFSwotICogTU9O
VEggKyBEQVlfT0ZfV0VFS19JTl9NT05USCArIERBWV9PRl9XRUVLCi0gKiBEQVlfT0ZfWUVBUgot
ICogREFZX09GX1dFRUsgKyBXRUVLX09GX1lFQVIKLSAqIDwvcHJlPgotICogXGh0bWxvbmx5PC9i
bG9ja3F1b3RlPlxlbmRodG1sb25seQorICogICAgIE1PTlRIICsgREFZX09GX01PTlRICisgKiAg
ICAgTU9OVEggKyBXRUVLX09GX01PTlRIICsgREFZX09GX1dFRUsKKyAqICAgICBNT05USCArIERB
WV9PRl9XRUVLX0lOX01PTlRIICsgREFZX09GX1dFRUsKKyAqICAgICBEQVlfT0ZfWUVBUgorICog
ICAgIERBWV9PRl9XRUVLICsgV0VFS19PRl9ZRUFSCiAgKgogICogRm9yIHRoZSB0aW1lIG9mIGRh
eToKICAqCi0gKiBcaHRtbG9ubHk8YmxvY2txdW90ZT5cZW5kaHRtbG9ubHkKLSAqIDxwcmU+Ci0g
KiBIT1VSX09GX0RBWQotICogQU1fUE0gKyBIT1VSCi0gKiA8L3ByZT4KLSAqIFxodG1sb25seTwv
YmxvY2txdW90ZT5cZW5kaHRtbG9ubHkKKyAqICAgICBIT1VSX09GX0RBWQorICogICAgIEFNX1BN
ICsgSE9VUgogICoKLSAqIDxwPgotICogPHN0cm9uZz5BbWJpZ3VvdXMgV2FsbCBDbG9jayBUaW1l
Ljwvc3Ryb25nPiBXaGVuIHRpbWUgb2Zmc2V0IGZyb20gVVRDIGhhcworICogKipBbWJpZ3VvdXMg
V2FsbCBDbG9jayBUaW1lLioqIFdoZW4gdGltZSBvZmZzZXQgZnJvbSBVVEMgaGFzCiAgKiBjaGFu
Z2VkLCBpdCBwcm9kdWNlcyBhbiBhbWJpZ3VvdXMgdGltZSBzbG90IGFyb3VuZCB0aGUgdHJhbnNp
dGlvbi4gRm9yIGV4YW1wbGUsCiAgKiBtYW55IFVTIGxvY2F0aW9ucyBvYnNlcnZlIGRheWxpZ2h0
IHNhdmluZyB0aW1lLiBPbiB0aGUgZGF0ZSBzd2l0Y2hpbmcgdG8gZGF5bGlnaHQKICAqIHNhdmlu
ZyB0aW1lIGluIFVTLCB3YWxsIGNsb2NrIHRpbWUganVtcHMgZnJvbSAxMjo1OSBBTSAoc3RhbmRh
cmQpIHRvIDI6MDAgQU0KQEAgLTEzOCw2NCArMTE5LDUzIEBAIGNsYXNzIEJhc2ljVGltZVpvbmU7
CiAgKiBJbiB0aGlzIGV4YW1wbGUsIDE6MzAgQU0gaXMgaW50ZXJwcmV0ZWQgYXMgMTozMCBBTSBz
dGFuZGFyZCB0aW1lIChub24tZXhpc3QpLAogICogc28gdGhlIGZpbmFsIHJlc3VsdCB3aWxsIGJl
IDI6MzAgQU0gZGF5bGlnaHQgdGltZS4KICAqCi0gKiA8cD5PbiB0aGUgZGF0ZSBzd2l0Y2hpbmcg
YmFjayB0byBzdGFuZGFyZCB0aW1lLCB3YWxsIGNsb2NrIHRpbWUgaXMgbW92ZWQgYmFjayBvbmUK
KyAqIE9uIHRoZSBkYXRlIHN3aXRjaGluZyBiYWNrIHRvIHN0YW5kYXJkIHRpbWUsIHdhbGwgY2xv
Y2sgdGltZSBpcyBtb3ZlZCBiYWNrIG9uZQogICogaG91ciBhdCAyOjAwIEFNLiBTbyB3YWxsIGNs
b2NrIHRpbWUgZnJvbSAxOjAwIEFNIHRvIDE6NTkgQU0gb2NjdXIgdHdpY2UuIEluIHRoaXMKICAq
IGNhc2UsIHRoZSBJQ1UgQ2FsZW5kYXIgcmVzb2x2ZXMgdGhlIHRpbWUgdXNpbmcgdGhlIFVUQyBv
ZmZzZXQgYWZ0ZXIgdGhlIHRyYW5zaXRpb24KICAqIGJ5IGRlZmF1bHQuIEZvciBleGFtcGxlLCAx
OjMwIEFNIG9uIHRoZSBkYXRlIGlzIHJlc29sdmVkIGFzIDE6MzAgQU0gc3RhbmRhcmQgdGltZS4K
ICAqCi0gKiA8cD5BbWJpZ3VvdXMgd2FsbCBjbG9jayB0aW1lIHJlc29sdXRpb24gYmVoYXZpb3Jz
IGNhbiBiZSBjdXN0b21pemVkIGJ5IENhbGVuZGFyIEFQSXMKKyAqIEFtYmlndW91cyB3YWxsIGNs
b2NrIHRpbWUgcmVzb2x1dGlvbiBiZWhhdmlvcnMgY2FuIGJlIGN1c3RvbWl6ZWQgYnkgQ2FsZW5k
YXIgQVBJcwogICoge0BsaW5rICNzZXRSZXBlYXRlZFdhbGxUaW1lT3B0aW9ufSBhbmQge0BsaW5r
ICNzZXRTa2lwcGVkV2FsbFRpbWVPcHRpb259LgogICogVGhlc2UgbWV0aG9kcyBhcmUgYXZhaWxh
YmxlIGluIElDVSA0OSBvciBsYXRlciB2ZXJzaW9ucy4KICAqCi0gKiA8cD4KLSAqIDxzdHJvbmc+
Tm90ZTo8L3N0cm9uZz4gZm9yIHNvbWUgbm9uLUdyZWdvcmlhbiBjYWxlbmRhcnMsIGRpZmZlcmVu
dAorICogKipOb3RlOioqIGZvciBzb21lIG5vbi1HcmVnb3JpYW4gY2FsZW5kYXJzLCBkaWZmZXJl
bnQKICAqIGZpZWxkcyBtYXkgYmUgbmVjZXNzYXJ5IGZvciBjb21wbGV0ZSBkaXNhbWJpZ3VhdGlv
bi4gRm9yIGV4YW1wbGUsIGEgZnVsbAogICogc3BlY2lmaWNhdGlvbiBvZiB0aGUgaGlzdG9yaWNh
bCBBcmFiaWMgYXN0cm9ub21pY2FsIGNhbGVuZGFyIHJlcXVpcmVzIHllYXIsCi0gKiBtb250aCwg
ZGF5LW9mLW1vbnRoIDxlbT5hbmQ8L2VtPiBkYXktb2Ytd2VlayBpbiBzb21lIGNhc2VzLgorICog
bW9udGgsIGRheS1vZi1tb250aCAqYW5kKiBkYXktb2Ytd2VlayBpbiBzb21lIGNhc2VzLgogICoK
LSAqIDxwPgotICogPHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBUaGVyZSBhcmUgY2VydGFpbiBwb3Nz
aWJsZSBhbWJpZ3VpdGllcyBpbgorICogKipOb3RlOioqIFRoZXJlIGFyZSBjZXJ0YWluIHBvc3Np
YmxlIGFtYmlndWl0aWVzIGluCiAgKiBpbnRlcnByZXRhdGlvbiBvZiBjZXJ0YWluIHNpbmd1bGFy
IHRpbWVzLCB3aGljaCBhcmUgcmVzb2x2ZWQgaW4gdGhlCiAgKiBmb2xsb3dpbmcgd2F5czoKLSAq
IDxvbD4KLSAqICAgICA8bGk+IDI0OjAwOjAwICJiZWxvbmdzIiB0byB0aGUgZm9sbG93aW5nIGRh
eS4gVGhhdCBpcywKLSAqICAgICAgICAgIDIzOjU5IG9uIERlYyAzMSwgMTk2OSAmbHQ7IDI0OjAw
IG9uIEphbiAxLCAxOTcwICZsdDsgMjQ6MDE6MDAgb24gSmFuIDEsIDE5NzAKICAqCi0gKiAgICAg
PGxpPiBBbHRob3VnaCBoaXN0b3JpY2FsbHkgbm90IHByZWNpc2UsIG1pZG5pZ2h0IGFsc28gYmVs
b25ncyB0byAiYW0iLAotICogICAgICAgICAgYW5kIG5vb24gYmVsb25ncyB0byAicG0iLCBzbyBv
biB0aGUgc2FtZSBkYXksCi0gKiAgICAgICAgICAxMjowMCBhbSAobWlkbmlnaHQpICZsdDsgMTI6
MDEgYW0sIGFuZCAxMjowMCBwbSAobm9vbikgJmx0OyAxMjowMSBwbQotICogPC9vbD4KKyAqICAg
MS4gMjQ6MDA6MDAgImJlbG9uZ3MiIHRvIHRoZSBmb2xsb3dpbmcgZGF5LiBUaGF0IGlzLAorICog
ICAgICAyMzo1OSBvbiBEZWMgMzEsIDE5NjkgPCAyNDowMCBvbiBKYW4gMSwgMTk3MCA8IDI0OjAx
OjAwIG9uIEphbiAxLCAxOTcwCisgKiAgIDIuIEFsdGhvdWdoIGhpc3RvcmljYWxseSBub3QgcHJl
Y2lzZSwgbWlkbmlnaHQgYWxzbyBiZWxvbmdzIHRvICJhbSIsCisgKiAgICAgIGFuZCBub29uIGJl
bG9uZ3MgdG8gInBtIiwgc28gb24gdGhlIHNhbWUgZGF5LAorICogICAgICAxMjowMCBhbSAobWlk
bmlnaHQpIDwgMTI6MDEgYW0sIGFuZCAxMjowMCBwbSAobm9vbikgPCAxMjowMSBwbQogICoKLSAq
IDxwPgogICogVGhlIGRhdGUgb3IgdGltZSBmb3JtYXQgc3RyaW5ncyBhcmUgbm90IHBhcnQgb2Yg
dGhlIGRlZmluaXRpb24gb2YgYQogICogY2FsZW5kYXIsIGFzIHRob3NlIG11c3QgYmUgbW9kaWZp
YWJsZSBvciBvdmVycmlkYWJsZSBieSB0aGUgdXNlciBhdAotICogcnVudGltZS4gVXNlIHtAbGlu
ayBEYXRlRm9ybWF0fQotICogdG8gZm9ybWF0IGRhdGVzLgorICogcnVudGltZS4gVXNlIGBEYXRl
Rm9ybWF0YCB0byBmb3JtYXQgZGF0ZXMuCiAgKgotICogPHA+Ci0gKiA8Y29kZT5DYWxlbmRhcjwv
Y29kZT4gcHJvdmlkZXMgYW4gQVBJIGZvciBmaWVsZCAicm9sbGluZyIsIHdoZXJlIGZpZWxkcwor
ICogYENhbGVuZGFyYCBwcm92aWRlcyBhbiBBUEkgZm9yIGZpZWxkICJyb2xsaW5nIiwgd2hlcmUg
ZmllbGRzCiAgKiBjYW4gYmUgaW5jcmVtZW50ZWQgb3IgZGVjcmVtZW50ZWQsIGJ1dCB3cmFwIGFy
b3VuZC4gRm9yIGV4YW1wbGUsIHJvbGxpbmcgdGhlCi0gKiBtb250aCB1cCBpbiB0aGUgZGF0ZSA8
Y29kZT5EZWNlbWJlciAxMiwgPGI+MTk5NjwvYj48L2NvZGU+IHJlc3VsdHMgaW4KLSAqIDxjb2Rl
PkphbnVhcnkgMTIsIDxiPjE5OTY8L2I+PC9jb2RlPi4KKyAqIG1vbnRoIHVwIGluIHRoZSBkYXRl
IERlY2VtYmVyIDEyLCAqKjE5OTYqKiByZXN1bHRzIGluCisgKiBKYW51YXJ5IDEyLCAqKjE5OTYq
Ki4KICAqCi0gKiA8cD4KLSAqIDxjb2RlPkNhbGVuZGFyPC9jb2RlPiBhbHNvIHByb3ZpZGVzIGEg
ZGF0ZSBhcml0aG1ldGljIGZ1bmN0aW9uIGZvcgorICogYENhbGVuZGFyYCBhbHNvIHByb3ZpZGVz
IGEgZGF0ZSBhcml0aG1ldGljIGZ1bmN0aW9uIGZvcgogICogYWRkaW5nIHRoZSBzcGVjaWZpZWQg
KHNpZ25lZCkgYW1vdW50IG9mIHRpbWUgdG8gYSBwYXJ0aWN1bGFyIHRpbWUgZmllbGQuCi0gKiBG
b3IgZXhhbXBsZSwgc3VidHJhY3RpbmcgNSBkYXlzIGZyb20gdGhlIGRhdGUgPGNvZGU+U2VwdGVt
YmVyIDEyLCAxOTk2PC9jb2RlPgotICogcmVzdWx0cyBpbiA8Y29kZT5TZXB0ZW1iZXIgNywgMTk5
NjwvY29kZT4uCisgKiBGb3IgZXhhbXBsZSwgc3VidHJhY3RpbmcgNSBkYXlzIGZyb20gdGhlIGRh
dGUgYFNlcHRlbWJlciAxMiwgMTk5NmAKKyAqIHJlc3VsdHMgaW4gYFNlcHRlbWJlciA3LCAxOTk2
YC4KICAqCi0gKiA8cD48YmlnPjxiPlN1cHBvcnRlZCByYW5nZTwvYj48L2JpZz4KKyAqICoqKlN1
cHBvcnRlZCByYW5nZSoqKgogICoKLSAqIDxwPlRoZSBhbGxvd2FibGUgcmFuZ2Ugb2YgPGNvZGU+
Q2FsZW5kYXI8L2NvZGU+IGhhcyBiZWVuCi0gKiBuYXJyb3dlZC4gPGNvZGU+R3JlZ29yaWFuQ2Fs
ZW5kYXI8L2NvZGU+IHVzZWQgdG8gYXR0ZW1wdCB0byBzdXBwb3J0Ci0gKiB0aGUgcmFuZ2Ugb2Yg
ZGF0ZXMgd2l0aCBtaWxsaXNlY29uZCB2YWx1ZXMgZnJvbQotICogPGNvZGU+TG9uZy5NSU5fVkFM
VUU8L2NvZGU+IHRvIDxjb2RlPkxvbmcuTUFYX1ZBTFVFPC9jb2RlPi4KLSAqIFRoZSBuZXcgPGNv
ZGU+Q2FsZW5kYXI8L2NvZGU+IHByb3RvY29sIHNwZWNpZmllcyB0aGUKKyAqIFRoZSBhbGxvd2Fi
bGUgcmFuZ2Ugb2YgYENhbGVuZGFyYCBoYXMgYmVlbiBuYXJyb3dlZC4gYEdyZWdvcmlhbkNhbGVu
ZGFyYCB1c2VkCisgKiB0byBhdHRlbXB0IHRvIHN1cHBvcnQgdGhlIHJhbmdlIG9mIGRhdGVzIHdp
dGggbWlsbGlzZWNvbmQgdmFsdWVzIGZyb20KKyAqIGBMb25nLk1JTl9WQUxVRWAgdG8gYExvbmcu
TUFYX1ZBTFVFYC4gVGhlIG5ldyBgQ2FsZW5kYXJgIHByb3RvY29sIHNwZWNpZmllcyB0aGUKICAq
IG1heGltdW0gcmFuZ2Ugb2Ygc3VwcG9ydGFibGUgZGF0ZXMgYXMgdGhvc2UgaGF2aW5nIEp1bGlh
biBkYXkgbnVtYmVycwotICogb2YgPGNvZGU+LTB4N0YwMDAwMDA8L2NvZGU+IHRvIDxjb2RlPisw
eDdGMDAwMDAwPC9jb2RlPi4gVGhpcwotICogY29ycmVzcG9uZHMgdG8geWVhcnMgZnJvbSB+NSw4
MDAsMDAwIEJDRSB0byB+NSw4MDAsMDAwIENFLiBQcm9ncmFtbWVycwotICogc2hvdWxkIHVzZSB0
aGUgcHJvdGVjdGVkIGNvbnN0YW50cyBpbiA8Y29kZT5DYWxlbmRhcjwvY29kZT4gdG8KLSAqIHNw
ZWNpZnkgYW4gZXh0cmVtZWx5IGVhcmx5IG9yIGV4dHJlbWVseSBsYXRlIGRhdGUuPC9wPgorICog
b2YgYC0weDdGMDAwMDAwYCB0byBgKzB4N0YwMDAwMDBgLiBUaGlzIGNvcnJlc3BvbmRzIHRvIHll
YXJzIGZyb20gfjUsODAwLDAwMCBCQ0UKKyAqIHRvIH41LDgwMCwwMDAgQ0UuIFByb2dyYW1tZXJz
IHNob3VsZCB1c2UgdGhlIHByb3RlY3RlZCBjb25zdGFudHMgaW4gYENhbGVuZGFyYCB0bworICog
c3BlY2lmeSBhbiBleHRyZW1lbHkgZWFybHkgb3IgZXh0cmVtZWx5IGxhdGUgZGF0ZS4KICAqCiAg
KiA8cD4KICAqIFRoZSBKYXBhbmVzZSBjYWxlbmRhciB1c2VzIGEgY29tYmluYXRpb24gb2YgZXJh
IG5hbWUgYW5kIHllYXIgbnVtYmVyLgpAQCAtMTczMSw5ICsxNzAxLDcgQEAgY2xhc3MgVV9JMThO
X0FQSSBDYWxlbmRhciA6IHB1YmxpYyBVT2JqZWN0IHsKICAgICAvKioKICAgICAgKiBWYWxpZGF0
ZSBhIHNpbmdsZSBmaWVsZCBvZiB0aGlzIGNhbGVuZGFyLiAgU3ViY2xhc3NlcyBzaG91bGQKICAg
ICAgKiBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byB2YWxpZGF0ZSBhbnkgY2FsZW5kYXItc3BlY2lm
aWMgZmllbGRzLgotICAgICAqIEdlbmVyaWMgZmllbGRzIGNhbiBiZSBoYW5kbGVkIGJ5Ci0gICAg
ICogPGNvZGU+Q2FsZW5kYXI6OnZhbGlkYXRlRmllbGQoKTwvY29kZT4uCi0gICAgICogQHNlZSAj
dmFsaWRhdGVGaWVsZChpbnQsIGludCwgaW50LCBpbnQmKQorICAgICAqIEdlbmVyaWMgZmllbGRz
IGNhbiBiZSBoYW5kbGVkIGJ5IGBDYWxlbmRhcjo6dmFsaWRhdGVGaWVsZCgpYC4KICAgICAgKiBA
aW50ZXJuYWwKICAgICAgKi8KICAgICB2aXJ0dWFsIHZvaWQgdmFsaWRhdGVGaWVsZChVQ2FsZW5k
YXJEYXRlRmllbGRzIGZpZWxkLCBVRXJyb3JDb2RlICZzdGF0dXMpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi9pY3UvdW5pY29kZS9jYW5pdGVyLmggYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL2Nh
bml0ZXIuaAppbmRleCAxNTlkMTE2NjYzMWY3M2I2ZmUyNGFhOTQ3MWVjODU2NGU4ZGJhNDM5Li45
YjIxYmE1MmQ4OTg1NWZlYWYwMjkyNjNhOWYzYTdjNmE0YTdlOGU0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL2ljdS91bmljb2RlL2Nhbml0ZXIuaAorKysgYi9Tb3VyY2UvV1RGL2ljdS91bmljb2Rl
L2Nhbml0ZXIuaApAQCAtMTIwLDcgKzEyMCw3IEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBDYW5vbmlj
YWxJdGVyYXRvciBVX0ZJTkFMIDogcHVibGljIFVPYmplY3QgewogCiAjaWZuZGVmIFVfSElERV9J
TlRFUk5BTF9BUEkKICAgICAvKioKLSAgICAgKiBVbm9wdGltaXplZCByZWN1cnNpdmUgaW1wbGVt
ZW50YXRpb24gb2YgcGVybXV0YXRpb24uCisgICAgICogRHVtYiByZWN1cnNpdmUgaW1wbGVtZW50
YXRpb24gb2YgcGVybXV0YXRpb24uCiAgICAgICogVE9ETzogb3B0aW1pemUKICAgICAgKiBAcGFy
YW0gc291cmNlICAgICB0aGUgc3RyaW5nIHRvIGZpbmQgcGVybXV0YXRpb25zIGZvcgogICAgICAq
IEBwYXJhbSBza2lwWmVyb3MgIGRldGVybWluZSBpZiBza2lwIHplcm9zCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL2ljdS91bmljb2RlL2Nhc2VtYXAuaCBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUv
Y2FzZW1hcC5oCmluZGV4IDlkMDNhMWE0MTQzODYzOThkY2MyOTlhZWJlNDE0N2MyM2ZkMDljYWMu
LjQ3N2ViNDg0ZDEzNmI2OTcyYTczMWUxMWNlYmYzYzkxYmMwNjc2MWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvaWN1L3VuaWNvZGUvY2FzZW1hcC5oCisrKyBiL1NvdXJjZS9XVEYvaWN1L3VuaWNv
ZGUvY2FzZW1hcC5oCkBAIC0xLDQ5NCArMSw0OTIgQEAKLS8vIMKpIDIwMTcgYW5kIGxhdGVyOiBV
bmljb2RlLCBJbmMuIGFuZCBvdGhlcnMuDQotLy8gTGljZW5zZSAmIHRlcm1zIG9mIHVzZTogaHR0
cDovL3d3dy51bmljb2RlLm9yZy9jb3B5cmlnaHQuaHRtbA0KLQ0KLS8vIGNhc2VtYXAuaA0KLS8v
IGNyZWF0ZWQ6IDIwMTdqYW4xMiBNYXJrdXMgVy4gU2NoZXJlcg0KLQ0KLSNpZm5kZWYgX19DQVNF
TUFQX0hfXw0KLSNkZWZpbmUgX19DQVNFTUFQX0hfXw0KLQ0KLSNpbmNsdWRlICJ1bmljb2RlL3V0
eXBlcy5oIg0KLSNpbmNsdWRlICJ1bmljb2RlL3N0cmluZ3BpZWNlLmgiDQotI2luY2x1ZGUgInVu
aWNvZGUvdW9iamVjdC5oIg0KLQ0KLS8qKg0KLSAqIFxmaWxlDQotICogXGJyaWVmIEMrKyBBUEk6
IExvdy1sZXZlbCBDKysgY2FzZSBtYXBwaW5nIGZ1bmN0aW9ucy4NCi0gKi8NCi0NCi1VX05BTUVT
UEFDRV9CRUdJTg0KLQ0KLWNsYXNzIEJyZWFrSXRlcmF0b3I7DQotY2xhc3MgQnl0ZVNpbms7DQot
Y2xhc3MgRWRpdHM7DQotDQotLyoqDQotICogTG93LWxldmVsIEMrKyBjYXNlIG1hcHBpbmcgZnVu
Y3Rpb25zLg0KLSAqDQotICogQHN0YWJsZSBJQ1UgNTkNCi0gKi8NCi1jbGFzcyBVX0NPTU1PTl9B
UEkgQ2FzZU1hcCBVX0ZJTkFMIDogcHVibGljIFVNZW1vcnkgew0KLXB1YmxpYzoNCi0gICAgLyoq
DQotICAgICAqIExvd2VyY2FzZXMgYSBVVEYtMTYgc3RyaW5nIGFuZCBvcHRpb25hbGx5IHJlY29y
ZHMgZWRpdHMuDQotICAgICAqIENhc2luZyBpcyBsb2NhbGUtZGVwZW5kZW50IGFuZCBjb250ZXh0
LXNlbnNpdGl2ZS4NCi0gICAgICogVGhlIHJlc3VsdCBtYXkgYmUgbG9uZ2VyIG9yIHNob3J0ZXIg
dGhhbiB0aGUgb3JpZ2luYWwuDQotICAgICAqIFRoZSBzb3VyY2Ugc3RyaW5nIGFuZCB0aGUgZGVz
dGluYXRpb24gYnVmZmVyIG11c3Qgbm90IG92ZXJsYXAuDQotICAgICAqDQotICAgICAqIEBwYXJh
bSBsb2NhbGUgICAgVGhlIGxvY2FsZSBJRC4gKCIiID0gcm9vdCBsb2NhbGUsIE5VTEwgPSBkZWZh
dWx0IGxvY2FsZS4pDQotICAgICAqIEBwYXJhbSBvcHRpb25zICAgT3B0aW9ucyBiaXQgc2V0LCB1
c3VhbGx5IDAuIFNlZSBVX09NSVRfVU5DSEFOR0VEX1RFWFQgYW5kIFVfRURJVFNfTk9fUkVTRVQu
DQotICAgICAqIEBwYXJhbSBzcmMgICAgICAgVGhlIG9yaWdpbmFsIHN0cmluZy4NCi0gICAgICog
QHBhcmFtIHNyY0xlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSBvcmlnaW5hbCBzdHJpbmcuIElmIC0x
LCB0aGVuIHNyYyBtdXN0IGJlIE5VTC10ZXJtaW5hdGVkLg0KLSAgICAgKiBAcGFyYW0gZGVzdCAg
ICAgIEEgYnVmZmVyIGZvciB0aGUgcmVzdWx0IHN0cmluZy4gVGhlIHJlc3VsdCB3aWxsIGJlIE5V
TC10ZXJtaW5hdGVkIGlmDQotICAgICAqICAgICAgICAgICAgICAgICAgdGhlIGJ1ZmZlciBpcyBs
YXJnZSBlbm91Z2guDQotICAgICAqICAgICAgICAgICAgICAgICAgVGhlIGNvbnRlbnRzIGlzIHVu
ZGVmaW5lZCBpbiBjYXNlIG9mIGZhaWx1cmUuDQotICAgICAqIEBwYXJhbSBkZXN0Q2FwYWNpdHkg
VGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAobnVtYmVyIG9mIGNoYXIxNl90cykuIElmIGl0IGlzIDAs
IHRoZW4NCi0gICAgICogICAgICAgICAgICAgICAgICBkZXN0IG1heSBiZSBOVUxMIGFuZCB0aGUg
ZnVuY3Rpb24gd2lsbCBvbmx5IHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSByZXN1bHQNCi0gICAg
ICogICAgICAgICAgICAgICAgICB3aXRob3V0IHdyaXRpbmcgYW55IG9mIHRoZSByZXN1bHQgc3Ry
aW5nLg0KLSAgICAgKiBAcGFyYW0gZWRpdHMgICAgIFJlY29yZHMgZWRpdHMgZm9yIGluZGV4IG1h
cHBpbmcsIHdvcmtpbmcgd2l0aCBzdHlsZWQgdGV4dCwNCi0gICAgICogICAgICAgICAgICAgICAg
ICBhbmQgZ2V0dGluZyBvbmx5IGNoYW5nZXMgKGlmIGFueSkuDQotICAgICAqICAgICAgICAgICAg
ICAgICAgVGhlIEVkaXRzIGNvbnRlbnRzIGlzIHVuZGVmaW5lZCBpZiBhbnkgZXJyb3Igb2NjdXJz
Lg0KLSAgICAgKiAgICAgICAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gY2FsbHMgZWRpdHMtPnJl
c2V0KCkgZmlyc3QgdW5sZXNzDQotICAgICAqICAgICAgICAgICAgICAgICAgb3B0aW9ucyBpbmNs
dWRlcyBVX0VESVRTX05PX1JFU0VULiBlZGl0cyBjYW4gYmUgTlVMTC4NCi0gICAgICogQHBhcmFt
IGVycm9yQ29kZSBSZWZlcmVuY2UgdG8gYW4gaW4vb3V0IGVycm9yIGNvZGUgdmFsdWUNCi0gICAg
ICogICAgICAgICAgICAgICAgICB3aGljaCBtdXN0IG5vdCBpbmRpY2F0ZSBhIGZhaWx1cmUgYmVm
b3JlIHRoZSBmdW5jdGlvbiBjYWxsLg0KLSAgICAgKiBAcmV0dXJuIFRoZSBsZW5ndGggb2YgdGhl
IHJlc3VsdCBzdHJpbmcsIGlmIHN1Y2Nlc3NmdWwuDQotICAgICAqICAgICAgICAgV2hlbiB0aGUg
cmVzdWx0IHdvdWxkIGJlIGxvbmdlciB0aGFuIGRlc3RDYXBhY2l0eSwNCi0gICAgICogICAgICAg
ICB0aGUgZnVsbCBsZW5ndGggaXMgcmV0dXJuZWQgYW5kIGEgVV9CVUZGRVJfT1ZFUkZMT1dfRVJS
T1IgaXMgc2V0Lg0KLSAgICAgKg0KLSAgICAgKiBAc2VlIHVfc3RyVG9Mb3dlcg0KLSAgICAgKiBA
c3RhYmxlIElDVSA1OQ0KLSAgICAgKi8NCi0gICAgIHN0YXRpYyBpbnQzMl90IHRvTG93ZXIoDQot
ICAgICAgICAgICAgY29uc3QgY2hhciAqbG9jYWxlLCB1aW50MzJfdCBvcHRpb25zLA0KLSAgICAg
ICAgICAgIGNvbnN0IGNoYXIxNl90ICpzcmMsIGludDMyX3Qgc3JjTGVuZ3RoLA0KLSAgICAgICAg
ICAgIGNoYXIxNl90ICpkZXN0LCBpbnQzMl90IGRlc3RDYXBhY2l0eSwgRWRpdHMgKmVkaXRzLA0K
LSAgICAgICAgICAgIFVFcnJvckNvZGUgJmVycm9yQ29kZSk7DQotDQotICAgIC8qKg0KLSAgICAg
KiBVcHBlcmNhc2VzIGEgVVRGLTE2IHN0cmluZyBhbmQgb3B0aW9uYWxseSByZWNvcmRzIGVkaXRz
Lg0KLSAgICAgKiBDYXNpbmcgaXMgbG9jYWxlLWRlcGVuZGVudCBhbmQgY29udGV4dC1zZW5zaXRp
dmUuDQotICAgICAqIFRoZSByZXN1bHQgbWF5IGJlIGxvbmdlciBvciBzaG9ydGVyIHRoYW4gdGhl
IG9yaWdpbmFsLg0KLSAgICAgKiBUaGUgc291cmNlIHN0cmluZyBhbmQgdGhlIGRlc3RpbmF0aW9u
IGJ1ZmZlciBtdXN0IG5vdCBvdmVybGFwLg0KLSAgICAgKg0KLSAgICAgKiBAcGFyYW0gbG9jYWxl
ICAgIFRoZSBsb2NhbGUgSUQuICgiIiA9IHJvb3QgbG9jYWxlLCBOVUxMID0gZGVmYXVsdCBsb2Nh
bGUuKQ0KLSAgICAgKiBAcGFyYW0gb3B0aW9ucyAgIE9wdGlvbnMgYml0IHNldCwgdXN1YWxseSAw
LiBTZWUgVV9PTUlUX1VOQ0hBTkdFRF9URVhUIGFuZCBVX0VESVRTX05PX1JFU0VULg0KLSAgICAg
KiBAcGFyYW0gc3JjICAgICAgIFRoZSBvcmlnaW5hbCBzdHJpbmcuDQotICAgICAqIEBwYXJhbSBz
cmNMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgb3JpZ2luYWwgc3RyaW5nLiBJZiAtMSwgdGhlbiBz
cmMgbXVzdCBiZSBOVUwtdGVybWluYXRlZC4NCi0gICAgICogQHBhcmFtIGRlc3QgICAgICBBIGJ1
ZmZlciBmb3IgdGhlIHJlc3VsdCBzdHJpbmcuIFRoZSByZXN1bHQgd2lsbCBiZSBOVUwtdGVybWlu
YXRlZCBpZg0KLSAgICAgKiAgICAgICAgICAgICAgICAgIHRoZSBidWZmZXIgaXMgbGFyZ2UgZW5v
dWdoLg0KLSAgICAgKiAgICAgICAgICAgICAgICAgIFRoZSBjb250ZW50cyBpcyB1bmRlZmluZWQg
aW4gY2FzZSBvZiBmYWlsdXJlLg0KLSAgICAgKiBAcGFyYW0gZGVzdENhcGFjaXR5IFRoZSBzaXpl
IG9mIHRoZSBidWZmZXIgKG51bWJlciBvZiBjaGFyMTZfdHMpLiBJZiBpdCBpcyAwLCB0aGVuDQot
ICAgICAqICAgICAgICAgICAgICAgICAgZGVzdCBtYXkgYmUgTlVMTCBhbmQgdGhlIGZ1bmN0aW9u
IHdpbGwgb25seSByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0DQotICAgICAqICAgICAg
ICAgICAgICAgICAgd2l0aG91dCB3cml0aW5nIGFueSBvZiB0aGUgcmVzdWx0IHN0cmluZy4NCi0g
ICAgICogQHBhcmFtIGVkaXRzICAgICBSZWNvcmRzIGVkaXRzIGZvciBpbmRleCBtYXBwaW5nLCB3
b3JraW5nIHdpdGggc3R5bGVkIHRleHQsDQotICAgICAqICAgICAgICAgICAgICAgICAgYW5kIGdl
dHRpbmcgb25seSBjaGFuZ2VzIChpZiBhbnkpLg0KLSAgICAgKiAgICAgICAgICAgICAgICAgIFRo
ZSBFZGl0cyBjb250ZW50cyBpcyB1bmRlZmluZWQgaWYgYW55IGVycm9yIG9jY3Vycy4NCi0gICAg
ICogICAgICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGNhbGxzIGVkaXRzLT5yZXNldCgpIGZp
cnN0IHVubGVzcw0KLSAgICAgKiAgICAgICAgICAgICAgICAgIG9wdGlvbnMgaW5jbHVkZXMgVV9F
RElUU19OT19SRVNFVC4gZWRpdHMgY2FuIGJlIE5VTEwuDQotICAgICAqIEBwYXJhbSBlcnJvckNv
ZGUgUmVmZXJlbmNlIHRvIGFuIGluL291dCBlcnJvciBjb2RlIHZhbHVlDQotICAgICAqICAgICAg
ICAgICAgICAgICAgd2hpY2ggbXVzdCBub3QgaW5kaWNhdGUgYSBmYWlsdXJlIGJlZm9yZSB0aGUg
ZnVuY3Rpb24gY2FsbC4NCi0gICAgICogQHJldHVybiBUaGUgbGVuZ3RoIG9mIHRoZSByZXN1bHQg
c3RyaW5nLCBpZiBzdWNjZXNzZnVsLg0KLSAgICAgKiAgICAgICAgIFdoZW4gdGhlIHJlc3VsdCB3
b3VsZCBiZSBsb25nZXIgdGhhbiBkZXN0Q2FwYWNpdHksDQotICAgICAqICAgICAgICAgdGhlIGZ1
bGwgbGVuZ3RoIGlzIHJldHVybmVkIGFuZCBhIFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SIGlzIHNl
dC4NCi0gICAgICoNCi0gICAgICogQHNlZSB1X3N0clRvVXBwZXINCi0gICAgICogQHN0YWJsZSBJ
Q1UgNTkNCi0gICAgICovDQotICAgIHN0YXRpYyBpbnQzMl90IHRvVXBwZXIoDQotICAgICAgICAg
ICAgY29uc3QgY2hhciAqbG9jYWxlLCB1aW50MzJfdCBvcHRpb25zLA0KLSAgICAgICAgICAgIGNv
bnN0IGNoYXIxNl90ICpzcmMsIGludDMyX3Qgc3JjTGVuZ3RoLA0KLSAgICAgICAgICAgIGNoYXIx
Nl90ICpkZXN0LCBpbnQzMl90IGRlc3RDYXBhY2l0eSwgRWRpdHMgKmVkaXRzLA0KLSAgICAgICAg
ICAgIFVFcnJvckNvZGUgJmVycm9yQ29kZSk7DQotDQotI2lmICFVQ09ORklHX05PX0JSRUFLX0lU
RVJBVElPTg0KLQ0KLSAgICAvKioNCi0gICAgICogVGl0bGVjYXNlcyBhIFVURi0xNiBzdHJpbmcg
YW5kIG9wdGlvbmFsbHkgcmVjb3JkcyBlZGl0cy4NCi0gICAgICogQ2FzaW5nIGlzIGxvY2FsZS1k
ZXBlbmRlbnQgYW5kIGNvbnRleHQtc2Vuc2l0aXZlLg0KLSAgICAgKiBUaGUgcmVzdWx0IG1heSBi
ZSBsb25nZXIgb3Igc2hvcnRlciB0aGFuIHRoZSBvcmlnaW5hbC4NCi0gICAgICogVGhlIHNvdXJj
ZSBzdHJpbmcgYW5kIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgbXVzdCBub3Qgb3ZlcmxhcC4NCi0g
ICAgICoNCi0gICAgICogVGl0bGVjYXNpbmcgdXNlcyBhIGJyZWFrIGl0ZXJhdG9yIHRvIGZpbmQg
dGhlIGZpcnN0IGNoYXJhY3RlcnMgb2Ygd29yZHMNCi0gICAgICogdGhhdCBhcmUgdG8gYmUgdGl0
bGVjYXNlZC4gSXQgdGl0bGVjYXNlcyB0aG9zZSBjaGFyYWN0ZXJzIGFuZCBsb3dlcmNhc2VzDQot
ICAgICAqIGFsbCBvdGhlcnMuIChUaGlzIGNhbiBiZSBtb2RpZmllZCB3aXRoIG9wdGlvbnMgYml0
cy4pDQotICAgICAqDQotICAgICAqIEBwYXJhbSBsb2NhbGUgICAgVGhlIGxvY2FsZSBJRC4gKCIi
ID0gcm9vdCBsb2NhbGUsIE5VTEwgPSBkZWZhdWx0IGxvY2FsZS4pDQotICAgICAqIEBwYXJhbSBv
cHRpb25zICAgT3B0aW9ucyBiaXQgc2V0LCB1c3VhbGx5IDAuIFNlZSBVX09NSVRfVU5DSEFOR0VE
X1RFWFQsIFVfRURJVFNfTk9fUkVTRVQsDQotICAgICAqICAgICAgICAgICAgICAgICAgVV9USVRM
RUNBU0VfTk9fTE9XRVJDQVNFLA0KLSAgICAgKiAgICAgICAgICAgICAgICAgIFVfVElUTEVDQVNF
X05PX0JSRUFLX0FESlVTVE1FTlQsIFVfVElUTEVDQVNFX0FESlVTVF9UT19DQVNFRCwNCi0gICAg
ICogICAgICAgICAgICAgICAgICBVX1RJVExFQ0FTRV9XSE9MRV9TVFJJTkcsIFVfVElUTEVDQVNF
X1NFTlRFTkNFUy4NCi0gICAgICogQHBhcmFtIGl0ZXIgICAgICBBIGJyZWFrIGl0ZXJhdG9yIHRv
IGZpbmQgdGhlIGZpcnN0IGNoYXJhY3RlcnMgb2Ygd29yZHMgdGhhdCBhcmUgdG8gYmUgdGl0bGVj
YXNlZC4NCi0gICAgICogICAgICAgICAgICAgICAgICBJdCBpcyBzZXQgdG8gdGhlIHNvdXJjZSBz
dHJpbmcgKHNldFRleHQoKSkNCi0gICAgICogICAgICAgICAgICAgICAgICBhbmQgdXNlZCBvbmUg
b3IgbW9yZSB0aW1lcyBmb3IgaXRlcmF0aW9uIChmaXJzdCgpIGFuZCBuZXh0KCkpLg0KLSAgICAg
KiAgICAgICAgICAgICAgICAgIElmIE5VTEwsIHRoZW4gYSB3b3JkIGJyZWFrIGl0ZXJhdG9yIGZv
ciB0aGUgbG9jYWxlIGlzIHVzZWQNCi0gICAgICogICAgICAgICAgICAgICAgICAob3Igc29tZXRo
aW5nIGVxdWl2YWxlbnQpLg0KLSAgICAgKiBAcGFyYW0gc3JjICAgICAgIFRoZSBvcmlnaW5hbCBz
dHJpbmcuDQotICAgICAqIEBwYXJhbSBzcmNMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgb3JpZ2lu
YWwgc3RyaW5nLiBJZiAtMSwgdGhlbiBzcmMgbXVzdCBiZSBOVUwtdGVybWluYXRlZC4NCi0gICAg
ICogQHBhcmFtIGRlc3QgICAgICBBIGJ1ZmZlciBmb3IgdGhlIHJlc3VsdCBzdHJpbmcuIFRoZSBy
ZXN1bHQgd2lsbCBiZSBOVUwtdGVybWluYXRlZCBpZg0KLSAgICAgKiAgICAgICAgICAgICAgICAg
IHRoZSBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoLg0KLSAgICAgKiAgICAgICAgICAgICAgICAgIFRo
ZSBjb250ZW50cyBpcyB1bmRlZmluZWQgaW4gY2FzZSBvZiBmYWlsdXJlLg0KLSAgICAgKiBAcGFy
YW0gZGVzdENhcGFjaXR5IFRoZSBzaXplIG9mIHRoZSBidWZmZXIgKG51bWJlciBvZiBjaGFyMTZf
dHMpLiBJZiBpdCBpcyAwLCB0aGVuDQotICAgICAqICAgICAgICAgICAgICAgICAgZGVzdCBtYXkg
YmUgTlVMTCBhbmQgdGhlIGZ1bmN0aW9uIHdpbGwgb25seSByZXR1cm4gdGhlIGxlbmd0aCBvZiB0
aGUgcmVzdWx0DQotICAgICAqICAgICAgICAgICAgICAgICAgd2l0aG91dCB3cml0aW5nIGFueSBv
ZiB0aGUgcmVzdWx0IHN0cmluZy4NCi0gICAgICogQHBhcmFtIGVkaXRzICAgICBSZWNvcmRzIGVk
aXRzIGZvciBpbmRleCBtYXBwaW5nLCB3b3JraW5nIHdpdGggc3R5bGVkIHRleHQsDQotICAgICAq
ICAgICAgICAgICAgICAgICAgYW5kIGdldHRpbmcgb25seSBjaGFuZ2VzIChpZiBhbnkpLg0KLSAg
ICAgKiAgICAgICAgICAgICAgICAgIFRoZSBFZGl0cyBjb250ZW50cyBpcyB1bmRlZmluZWQgaWYg
YW55IGVycm9yIG9jY3Vycy4NCi0gICAgICogICAgICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9u
IGNhbGxzIGVkaXRzLT5yZXNldCgpIGZpcnN0IHVubGVzcw0KLSAgICAgKiAgICAgICAgICAgICAg
ICAgIG9wdGlvbnMgaW5jbHVkZXMgVV9FRElUU19OT19SRVNFVC4gZWRpdHMgY2FuIGJlIE5VTEwu
DQotICAgICAqIEBwYXJhbSBlcnJvckNvZGUgUmVmZXJlbmNlIHRvIGFuIGluL291dCBlcnJvciBj
b2RlIHZhbHVlDQotICAgICAqICAgICAgICAgICAgICAgICAgd2hpY2ggbXVzdCBub3QgaW5kaWNh
dGUgYSBmYWlsdXJlIGJlZm9yZSB0aGUgZnVuY3Rpb24gY2FsbC4NCi0gICAgICogQHJldHVybiBU
aGUgbGVuZ3RoIG9mIHRoZSByZXN1bHQgc3RyaW5nLCBpZiBzdWNjZXNzZnVsLg0KLSAgICAgKiAg
ICAgICAgIFdoZW4gdGhlIHJlc3VsdCB3b3VsZCBiZSBsb25nZXIgdGhhbiBkZXN0Q2FwYWNpdHks
DQotICAgICAqICAgICAgICAgdGhlIGZ1bGwgbGVuZ3RoIGlzIHJldHVybmVkIGFuZCBhIFVfQlVG
RkVSX09WRVJGTE9XX0VSUk9SIGlzIHNldC4NCi0gICAgICoNCi0gICAgICogQHNlZSB1X3N0clRv
VGl0bGUNCi0gICAgICogQHNlZSB1Y2FzZW1hcF90b1RpdGxlDQotICAgICAqIEBzdGFibGUgSUNV
IDU5DQotICAgICAqLw0KLSAgICBzdGF0aWMgaW50MzJfdCB0b1RpdGxlKA0KLSAgICAgICAgICAg
IGNvbnN0IGNoYXIgKmxvY2FsZSwgdWludDMyX3Qgb3B0aW9ucywgQnJlYWtJdGVyYXRvciAqaXRl
ciwNCi0gICAgICAgICAgICBjb25zdCBjaGFyMTZfdCAqc3JjLCBpbnQzMl90IHNyY0xlbmd0aCwN
Ci0gICAgICAgICAgICBjaGFyMTZfdCAqZGVzdCwgaW50MzJfdCBkZXN0Q2FwYWNpdHksIEVkaXRz
ICplZGl0cywNCi0gICAgICAgICAgICBVRXJyb3JDb2RlICZlcnJvckNvZGUpOw0KLQ0KLSNlbmRp
ZiAgLy8gVUNPTkZJR19OT19CUkVBS19JVEVSQVRJT04NCi0NCi0gICAgLyoqDQotICAgICAqIENh
c2UtZm9sZHMgYSBVVEYtMTYgc3RyaW5nIGFuZCBvcHRpb25hbGx5IHJlY29yZHMgZWRpdHMuDQot
ICAgICAqDQotICAgICAqIENhc2UgZm9sZGluZyBpcyBsb2NhbGUtaW5kZXBlbmRlbnQgYW5kIG5v
dCBjb250ZXh0LXNlbnNpdGl2ZSwNCi0gICAgICogYnV0IHRoZXJlIGlzIGFuIG9wdGlvbiBmb3Ig
d2hldGhlciB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUgbWFwcGluZ3MgZm9yIGRvdHRlZCBJDQotICAg
ICAqIGFuZCBkb3RsZXNzIGkgdGhhdCBhcmUgbWFya2VkIHdpdGggJ1QnIGluIENhc2VGb2xkaW5n
LnR4dC4NCi0gICAgICoNCi0gICAgICogVGhlIHJlc3VsdCBtYXkgYmUgbG9uZ2VyIG9yIHNob3J0
ZXIgdGhhbiB0aGUgb3JpZ2luYWwuDQotICAgICAqIFRoZSBzb3VyY2Ugc3RyaW5nIGFuZCB0aGUg
ZGVzdGluYXRpb24gYnVmZmVyIG11c3Qgbm90IG92ZXJsYXAuDQotICAgICAqDQotICAgICAqIEBw
YXJhbSBvcHRpb25zICAgT3B0aW9ucyBiaXQgc2V0LCB1c3VhbGx5IDAuIFNlZSBVX09NSVRfVU5D
SEFOR0VEX1RFWFQsIFVfRURJVFNfTk9fUkVTRVQsDQotICAgICAqICAgICAgICAgICAgICAgICAg
VV9GT0xEX0NBU0VfREVGQVVMVCwgVV9GT0xEX0NBU0VfRVhDTFVERV9TUEVDSUFMX0kuDQotICAg
ICAqIEBwYXJhbSBzcmMgICAgICAgVGhlIG9yaWdpbmFsIHN0cmluZy4NCi0gICAgICogQHBhcmFt
IHNyY0xlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSBvcmlnaW5hbCBzdHJpbmcuIElmIC0xLCB0aGVu
IHNyYyBtdXN0IGJlIE5VTC10ZXJtaW5hdGVkLg0KLSAgICAgKiBAcGFyYW0gZGVzdCAgICAgIEEg
YnVmZmVyIGZvciB0aGUgcmVzdWx0IHN0cmluZy4gVGhlIHJlc3VsdCB3aWxsIGJlIE5VTC10ZXJt
aW5hdGVkIGlmDQotICAgICAqICAgICAgICAgICAgICAgICAgdGhlIGJ1ZmZlciBpcyBsYXJnZSBl
bm91Z2guDQotICAgICAqICAgICAgICAgICAgICAgICAgVGhlIGNvbnRlbnRzIGlzIHVuZGVmaW5l
ZCBpbiBjYXNlIG9mIGZhaWx1cmUuDQotICAgICAqIEBwYXJhbSBkZXN0Q2FwYWNpdHkgVGhlIHNp
emUgb2YgdGhlIGJ1ZmZlciAobnVtYmVyIG9mIGNoYXIxNl90cykuIElmIGl0IGlzIDAsIHRoZW4N
Ci0gICAgICogICAgICAgICAgICAgICAgICBkZXN0IG1heSBiZSBOVUxMIGFuZCB0aGUgZnVuY3Rp
b24gd2lsbCBvbmx5IHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSByZXN1bHQNCi0gICAgICogICAg
ICAgICAgICAgICAgICB3aXRob3V0IHdyaXRpbmcgYW55IG9mIHRoZSByZXN1bHQgc3RyaW5nLg0K
LSAgICAgKiBAcGFyYW0gZWRpdHMgICAgIFJlY29yZHMgZWRpdHMgZm9yIGluZGV4IG1hcHBpbmcs
IHdvcmtpbmcgd2l0aCBzdHlsZWQgdGV4dCwNCi0gICAgICogICAgICAgICAgICAgICAgICBhbmQg
Z2V0dGluZyBvbmx5IGNoYW5nZXMgKGlmIGFueSkuDQotICAgICAqICAgICAgICAgICAgICAgICAg
VGhlIEVkaXRzIGNvbnRlbnRzIGlzIHVuZGVmaW5lZCBpZiBhbnkgZXJyb3Igb2NjdXJzLg0KLSAg
ICAgKiAgICAgICAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gY2FsbHMgZWRpdHMtPnJlc2V0KCkg
Zmlyc3QgdW5sZXNzDQotICAgICAqICAgICAgICAgICAgICAgICAgb3B0aW9ucyBpbmNsdWRlcyBV
X0VESVRTX05PX1JFU0VULiBlZGl0cyBjYW4gYmUgTlVMTC4NCi0gICAgICogQHBhcmFtIGVycm9y
Q29kZSBSZWZlcmVuY2UgdG8gYW4gaW4vb3V0IGVycm9yIGNvZGUgdmFsdWUNCi0gICAgICogICAg
ICAgICAgICAgICAgICB3aGljaCBtdXN0IG5vdCBpbmRpY2F0ZSBhIGZhaWx1cmUgYmVmb3JlIHRo
ZSBmdW5jdGlvbiBjYWxsLg0KLSAgICAgKiBAcmV0dXJuIFRoZSBsZW5ndGggb2YgdGhlIHJlc3Vs
dCBzdHJpbmcsIGlmIHN1Y2Nlc3NmdWwuDQotICAgICAqICAgICAgICAgV2hlbiB0aGUgcmVzdWx0
IHdvdWxkIGJlIGxvbmdlciB0aGFuIGRlc3RDYXBhY2l0eSwNCi0gICAgICogICAgICAgICB0aGUg
ZnVsbCBsZW5ndGggaXMgcmV0dXJuZWQgYW5kIGEgVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IgaXMg
c2V0Lg0KLSAgICAgKg0KLSAgICAgKiBAc2VlIHVfc3RyRm9sZENhc2UNCi0gICAgICogQHN0YWJs
ZSBJQ1UgNTkNCi0gICAgICovDQotICAgIHN0YXRpYyBpbnQzMl90IGZvbGQoDQotICAgICAgICAg
ICAgdWludDMyX3Qgb3B0aW9ucywNCi0gICAgICAgICAgICBjb25zdCBjaGFyMTZfdCAqc3JjLCBp
bnQzMl90IHNyY0xlbmd0aCwNCi0gICAgICAgICAgICBjaGFyMTZfdCAqZGVzdCwgaW50MzJfdCBk
ZXN0Q2FwYWNpdHksIEVkaXRzICplZGl0cywNCi0gICAgICAgICAgICBVRXJyb3JDb2RlICZlcnJv
ckNvZGUpOw0KLQ0KLSNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQ0KLSAgICAvKioNCi0gICAgICog
TG93ZXJjYXNlcyBhIFVURi04IHN0cmluZyBhbmQgb3B0aW9uYWxseSByZWNvcmRzIGVkaXRzLg0K
LSAgICAgKiBDYXNpbmcgaXMgbG9jYWxlLWRlcGVuZGVudCBhbmQgY29udGV4dC1zZW5zaXRpdmUu
DQotICAgICAqIFRoZSByZXN1bHQgbWF5IGJlIGxvbmdlciBvciBzaG9ydGVyIHRoYW4gdGhlIG9y
aWdpbmFsLg0KLSAgICAgKg0KLSAgICAgKiBAcGFyYW0gbG9jYWxlICAgIFRoZSBsb2NhbGUgSUQu
ICgiIiA9IHJvb3QgbG9jYWxlLCBOVUxMID0gZGVmYXVsdCBsb2NhbGUuKQ0KLSAgICAgKiBAcGFy
YW0gb3B0aW9ucyAgIE9wdGlvbnMgYml0IHNldCwgdXN1YWxseSAwLiBTZWUgVV9PTUlUX1VOQ0hB
TkdFRF9URVhUIGFuZCBVX0VESVRTX05PX1JFU0VULg0KLSAgICAgKiBAcGFyYW0gc3JjICAgICAg
IFRoZSBvcmlnaW5hbCBzdHJpbmcuDQotICAgICAqIEBwYXJhbSBzaW5rICAgICAgQSBCeXRlU2lu
ayB0byB3aGljaCB0aGUgcmVzdWx0IHN0cmluZyBpcyB3cml0dGVuLg0KLSAgICAgKiAgICAgICAg
ICAgICAgICAgIHNpbmsuRmx1c2goKSBpcyBjYWxsZWQgYXQgdGhlIGVuZC4NCi0gICAgICogQHBh
cmFtIGVkaXRzICAgICBSZWNvcmRzIGVkaXRzIGZvciBpbmRleCBtYXBwaW5nLCB3b3JraW5nIHdp
dGggc3R5bGVkIHRleHQsDQotICAgICAqICAgICAgICAgICAgICAgICAgYW5kIGdldHRpbmcgb25s
eSBjaGFuZ2VzIChpZiBhbnkpLg0KLSAgICAgKiAgICAgICAgICAgICAgICAgIFRoZSBFZGl0cyBj
b250ZW50cyBpcyB1bmRlZmluZWQgaWYgYW55IGVycm9yIG9jY3Vycy4NCi0gICAgICogICAgICAg
ICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGNhbGxzIGVkaXRzLT5yZXNldCgpIGZpcnN0IHVubGVz
cw0KLSAgICAgKiAgICAgICAgICAgICAgICAgIG9wdGlvbnMgaW5jbHVkZXMgVV9FRElUU19OT19S
RVNFVC4gZWRpdHMgY2FuIGJlIE5VTEwuDQotICAgICAqIEBwYXJhbSBlcnJvckNvZGUgUmVmZXJl
bmNlIHRvIGFuIGluL291dCBlcnJvciBjb2RlIHZhbHVlDQotICAgICAqICAgICAgICAgICAgICAg
ICAgd2hpY2ggbXVzdCBub3QgaW5kaWNhdGUgYSBmYWlsdXJlIGJlZm9yZSB0aGUgZnVuY3Rpb24g
Y2FsbC4NCi0gICAgICoNCi0gICAgICogQHNlZSB1Y2FzZW1hcF91dGY4VG9Mb3dlcg0KLSAgICAg
KiBAZHJhZnQgSUNVIDYwDQotICAgICAqLw0KLSAgICBzdGF0aWMgdm9pZCB1dGY4VG9Mb3dlcigN
Ci0gICAgICAgICAgICBjb25zdCBjaGFyICpsb2NhbGUsIHVpbnQzMl90IG9wdGlvbnMsDQotICAg
ICAgICAgICAgU3RyaW5nUGllY2Ugc3JjLCBCeXRlU2luayAmc2luaywgRWRpdHMgKmVkaXRzLA0K
LSAgICAgICAgICAgIFVFcnJvckNvZGUgJmVycm9yQ29kZSk7DQotDQotICAgIC8qKg0KLSAgICAg
KiBVcHBlcmNhc2VzIGEgVVRGLTggc3RyaW5nIGFuZCBvcHRpb25hbGx5IHJlY29yZHMgZWRpdHMu
DQotICAgICAqIENhc2luZyBpcyBsb2NhbGUtZGVwZW5kZW50IGFuZCBjb250ZXh0LXNlbnNpdGl2
ZS4NCi0gICAgICogVGhlIHJlc3VsdCBtYXkgYmUgbG9uZ2VyIG9yIHNob3J0ZXIgdGhhbiB0aGUg
b3JpZ2luYWwuDQotICAgICAqDQotICAgICAqIEBwYXJhbSBsb2NhbGUgICAgVGhlIGxvY2FsZSBJ
RC4gKCIiID0gcm9vdCBsb2NhbGUsIE5VTEwgPSBkZWZhdWx0IGxvY2FsZS4pDQotICAgICAqIEBw
YXJhbSBvcHRpb25zICAgT3B0aW9ucyBiaXQgc2V0LCB1c3VhbGx5IDAuIFNlZSBVX09NSVRfVU5D
SEFOR0VEX1RFWFQgYW5kIFVfRURJVFNfTk9fUkVTRVQuDQotICAgICAqIEBwYXJhbSBzcmMgICAg
ICAgVGhlIG9yaWdpbmFsIHN0cmluZy4NCi0gICAgICogQHBhcmFtIHNpbmsgICAgICBBIEJ5dGVT
aW5rIHRvIHdoaWNoIHRoZSByZXN1bHQgc3RyaW5nIGlzIHdyaXR0ZW4uDQotICAgICAqICAgICAg
ICAgICAgICAgICAgc2luay5GbHVzaCgpIGlzIGNhbGxlZCBhdCB0aGUgZW5kLg0KLSAgICAgKiBA
cGFyYW0gZWRpdHMgICAgIFJlY29yZHMgZWRpdHMgZm9yIGluZGV4IG1hcHBpbmcsIHdvcmtpbmcg
d2l0aCBzdHlsZWQgdGV4dCwNCi0gICAgICogICAgICAgICAgICAgICAgICBhbmQgZ2V0dGluZyBv
bmx5IGNoYW5nZXMgKGlmIGFueSkuDQotICAgICAqICAgICAgICAgICAgICAgICAgVGhlIEVkaXRz
IGNvbnRlbnRzIGlzIHVuZGVmaW5lZCBpZiBhbnkgZXJyb3Igb2NjdXJzLg0KLSAgICAgKiAgICAg
ICAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gY2FsbHMgZWRpdHMtPnJlc2V0KCkgZmlyc3QgdW5s
ZXNzDQotICAgICAqICAgICAgICAgICAgICAgICAgb3B0aW9ucyBpbmNsdWRlcyBVX0VESVRTX05P
X1JFU0VULiBlZGl0cyBjYW4gYmUgTlVMTC4NCi0gICAgICogQHBhcmFtIGVycm9yQ29kZSBSZWZl
cmVuY2UgdG8gYW4gaW4vb3V0IGVycm9yIGNvZGUgdmFsdWUNCi0gICAgICogICAgICAgICAgICAg
ICAgICB3aGljaCBtdXN0IG5vdCBpbmRpY2F0ZSBhIGZhaWx1cmUgYmVmb3JlIHRoZSBmdW5jdGlv
biBjYWxsLg0KLSAgICAgKg0KLSAgICAgKiBAc2VlIHVjYXNlbWFwX3V0ZjhUb1VwcGVyDQotICAg
ICAqIEBkcmFmdCBJQ1UgNjANCi0gICAgICovDQotICAgIHN0YXRpYyB2b2lkIHV0ZjhUb1VwcGVy
KA0KLSAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxvY2FsZSwgdWludDMyX3Qgb3B0aW9ucywNCi0g
ICAgICAgICAgICBTdHJpbmdQaWVjZSBzcmMsIEJ5dGVTaW5rICZzaW5rLCBFZGl0cyAqZWRpdHMs
DQotICAgICAgICAgICAgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsNCi0NCi0jaWYgIVVDT05GSUdf
Tk9fQlJFQUtfSVRFUkFUSU9ODQotDQotICAgIC8qKg0KLSAgICAgKiBUaXRsZWNhc2VzIGEgVVRG
LTggc3RyaW5nIGFuZCBvcHRpb25hbGx5IHJlY29yZHMgZWRpdHMuDQotICAgICAqIENhc2luZyBp
cyBsb2NhbGUtZGVwZW5kZW50IGFuZCBjb250ZXh0LXNlbnNpdGl2ZS4NCi0gICAgICogVGhlIHJl
c3VsdCBtYXkgYmUgbG9uZ2VyIG9yIHNob3J0ZXIgdGhhbiB0aGUgb3JpZ2luYWwuDQotICAgICAq
DQotICAgICAqIFRpdGxlY2FzaW5nIHVzZXMgYSBicmVhayBpdGVyYXRvciB0byBmaW5kIHRoZSBm
aXJzdCBjaGFyYWN0ZXJzIG9mIHdvcmRzDQotICAgICAqIHRoYXQgYXJlIHRvIGJlIHRpdGxlY2Fz
ZWQuIEl0IHRpdGxlY2FzZXMgdGhvc2UgY2hhcmFjdGVycyBhbmQgbG93ZXJjYXNlcw0KLSAgICAg
KiBhbGwgb3RoZXJzLiAoVGhpcyBjYW4gYmUgbW9kaWZpZWQgd2l0aCBvcHRpb25zIGJpdHMuKQ0K
LSAgICAgKg0KLSAgICAgKiBAcGFyYW0gbG9jYWxlICAgIFRoZSBsb2NhbGUgSUQuICgiIiA9IHJv
b3QgbG9jYWxlLCBOVUxMID0gZGVmYXVsdCBsb2NhbGUuKQ0KLSAgICAgKiBAcGFyYW0gb3B0aW9u
cyAgIE9wdGlvbnMgYml0IHNldCwgdXN1YWxseSAwLiBTZWUgVV9PTUlUX1VOQ0hBTkdFRF9URVhU
LCBVX0VESVRTX05PX1JFU0VULA0KLSAgICAgKiAgICAgICAgICAgICAgICAgIFVfVElUTEVDQVNF
X05PX0xPV0VSQ0FTRSwNCi0gICAgICogICAgICAgICAgICAgICAgICBVX1RJVExFQ0FTRV9OT19C
UkVBS19BREpVU1RNRU5ULCBVX1RJVExFQ0FTRV9BREpVU1RfVE9fQ0FTRUQsDQotICAgICAqICAg
ICAgICAgICAgICAgICAgVV9USVRMRUNBU0VfV0hPTEVfU1RSSU5HLCBVX1RJVExFQ0FTRV9TRU5U
RU5DRVMuDQotICAgICAqIEBwYXJhbSBpdGVyICAgICAgQSBicmVhayBpdGVyYXRvciB0byBmaW5k
IHRoZSBmaXJzdCBjaGFyYWN0ZXJzIG9mIHdvcmRzIHRoYXQgYXJlIHRvIGJlIHRpdGxlY2FzZWQu
DQotICAgICAqICAgICAgICAgICAgICAgICAgSXQgaXMgc2V0IHRvIHRoZSBzb3VyY2Ugc3RyaW5n
IChzZXRVVGV4dCgpKQ0KLSAgICAgKiAgICAgICAgICAgICAgICAgIGFuZCB1c2VkIG9uZSBvciBt
b3JlIHRpbWVzIGZvciBpdGVyYXRpb24gKGZpcnN0KCkgYW5kIG5leHQoKSkuDQotICAgICAqICAg
ICAgICAgICAgICAgICAgSWYgTlVMTCwgdGhlbiBhIHdvcmQgYnJlYWsgaXRlcmF0b3IgZm9yIHRo
ZSBsb2NhbGUgaXMgdXNlZA0KLSAgICAgKiAgICAgICAgICAgICAgICAgIChvciBzb21ldGhpbmcg
ZXF1aXZhbGVudCkuDQotICAgICAqIEBwYXJhbSBzcmMgICAgICAgVGhlIG9yaWdpbmFsIHN0cmlu
Zy4NCi0gICAgICogQHBhcmFtIHNpbmsgICAgICBBIEJ5dGVTaW5rIHRvIHdoaWNoIHRoZSByZXN1
bHQgc3RyaW5nIGlzIHdyaXR0ZW4uDQotICAgICAqICAgICAgICAgICAgICAgICAgc2luay5GbHVz
aCgpIGlzIGNhbGxlZCBhdCB0aGUgZW5kLg0KLSAgICAgKiBAcGFyYW0gZWRpdHMgICAgIFJlY29y
ZHMgZWRpdHMgZm9yIGluZGV4IG1hcHBpbmcsIHdvcmtpbmcgd2l0aCBzdHlsZWQgdGV4dCwNCi0g
ICAgICogICAgICAgICAgICAgICAgICBhbmQgZ2V0dGluZyBvbmx5IGNoYW5nZXMgKGlmIGFueSku
DQotICAgICAqICAgICAgICAgICAgICAgICAgVGhlIEVkaXRzIGNvbnRlbnRzIGlzIHVuZGVmaW5l
ZCBpZiBhbnkgZXJyb3Igb2NjdXJzLg0KLSAgICAgKiAgICAgICAgICAgICAgICAgIFRoaXMgZnVu
Y3Rpb24gY2FsbHMgZWRpdHMtPnJlc2V0KCkgZmlyc3QgdW5sZXNzDQotICAgICAqICAgICAgICAg
ICAgICAgICAgb3B0aW9ucyBpbmNsdWRlcyBVX0VESVRTX05PX1JFU0VULiBlZGl0cyBjYW4gYmUg
TlVMTC4NCi0gICAgICogQHBhcmFtIGVycm9yQ29kZSBSZWZlcmVuY2UgdG8gYW4gaW4vb3V0IGVy
cm9yIGNvZGUgdmFsdWUNCi0gICAgICogICAgICAgICAgICAgICAgICB3aGljaCBtdXN0IG5vdCBp
bmRpY2F0ZSBhIGZhaWx1cmUgYmVmb3JlIHRoZSBmdW5jdGlvbiBjYWxsLg0KLSAgICAgKg0KLSAg
ICAgKiBAc2VlIHVjYXNlbWFwX3V0ZjhUb1RpdGxlDQotICAgICAqIEBkcmFmdCBJQ1UgNjANCi0g
ICAgICovDQotICAgIHN0YXRpYyB2b2lkIHV0ZjhUb1RpdGxlKA0KLSAgICAgICAgICAgIGNvbnN0
IGNoYXIgKmxvY2FsZSwgdWludDMyX3Qgb3B0aW9ucywgQnJlYWtJdGVyYXRvciAqaXRlciwNCi0g
ICAgICAgICAgICBTdHJpbmdQaWVjZSBzcmMsIEJ5dGVTaW5rICZzaW5rLCBFZGl0cyAqZWRpdHMs
DQotICAgICAgICAgICAgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsNCi0NCi0jZW5kaWYgIC8vIFVD
T05GSUdfTk9fQlJFQUtfSVRFUkFUSU9ODQotDQotICAgIC8qKg0KLSAgICAgKiBDYXNlLWZvbGRz
IGEgVVRGLTggc3RyaW5nIGFuZCBvcHRpb25hbGx5IHJlY29yZHMgZWRpdHMuDQotICAgICAqDQot
ICAgICAqIENhc2UgZm9sZGluZyBpcyBsb2NhbGUtaW5kZXBlbmRlbnQgYW5kIG5vdCBjb250ZXh0
LXNlbnNpdGl2ZSwNCi0gICAgICogYnV0IHRoZXJlIGlzIGFuIG9wdGlvbiBmb3Igd2hldGhlciB0
byBpbmNsdWRlIG9yIGV4Y2x1ZGUgbWFwcGluZ3MgZm9yIGRvdHRlZCBJDQotICAgICAqIGFuZCBk
b3RsZXNzIGkgdGhhdCBhcmUgbWFya2VkIHdpdGggJ1QnIGluIENhc2VGb2xkaW5nLnR4dC4NCi0g
ICAgICoNCi0gICAgICogVGhlIHJlc3VsdCBtYXkgYmUgbG9uZ2VyIG9yIHNob3J0ZXIgdGhhbiB0
aGUgb3JpZ2luYWwuDQotICAgICAqDQotICAgICAqIEBwYXJhbSBvcHRpb25zICAgT3B0aW9ucyBi
aXQgc2V0LCB1c3VhbGx5IDAuIFNlZSBVX09NSVRfVU5DSEFOR0VEX1RFWFQgYW5kIFVfRURJVFNf
Tk9fUkVTRVQuDQotICAgICAqIEBwYXJhbSBzcmMgICAgICAgVGhlIG9yaWdpbmFsIHN0cmluZy4N
Ci0gICAgICogQHBhcmFtIHNpbmsgICAgICBBIEJ5dGVTaW5rIHRvIHdoaWNoIHRoZSByZXN1bHQg
c3RyaW5nIGlzIHdyaXR0ZW4uDQotICAgICAqICAgICAgICAgICAgICAgICAgc2luay5GbHVzaCgp
IGlzIGNhbGxlZCBhdCB0aGUgZW5kLg0KLSAgICAgKiBAcGFyYW0gZWRpdHMgICAgIFJlY29yZHMg
ZWRpdHMgZm9yIGluZGV4IG1hcHBpbmcsIHdvcmtpbmcgd2l0aCBzdHlsZWQgdGV4dCwNCi0gICAg
ICogICAgICAgICAgICAgICAgICBhbmQgZ2V0dGluZyBvbmx5IGNoYW5nZXMgKGlmIGFueSkuDQot
ICAgICAqICAgICAgICAgICAgICAgICAgVGhlIEVkaXRzIGNvbnRlbnRzIGlzIHVuZGVmaW5lZCBp
ZiBhbnkgZXJyb3Igb2NjdXJzLg0KLSAgICAgKiAgICAgICAgICAgICAgICAgIFRoaXMgZnVuY3Rp
b24gY2FsbHMgZWRpdHMtPnJlc2V0KCkgZmlyc3QgdW5sZXNzDQotICAgICAqICAgICAgICAgICAg
ICAgICAgb3B0aW9ucyBpbmNsdWRlcyBVX0VESVRTX05PX1JFU0VULiBlZGl0cyBjYW4gYmUgTlVM
TC4NCi0gICAgICogQHBhcmFtIGVycm9yQ29kZSBSZWZlcmVuY2UgdG8gYW4gaW4vb3V0IGVycm9y
IGNvZGUgdmFsdWUNCi0gICAgICogICAgICAgICAgICAgICAgICB3aGljaCBtdXN0IG5vdCBpbmRp
Y2F0ZSBhIGZhaWx1cmUgYmVmb3JlIHRoZSBmdW5jdGlvbiBjYWxsLg0KLSAgICAgKg0KLSAgICAg
KiBAc2VlIHVjYXNlbWFwX3V0ZjhGb2xkQ2FzZQ0KLSAgICAgKiBAZHJhZnQgSUNVIDYwDQotICAg
ICAqLw0KLSAgICBzdGF0aWMgdm9pZCB1dGY4Rm9sZCgNCi0gICAgICAgICAgICB1aW50MzJfdCBv
cHRpb25zLA0KLSAgICAgICAgICAgIFN0cmluZ1BpZWNlIHNyYywgQnl0ZVNpbmsgJnNpbmssIEVk
aXRzICplZGl0cywNCi0gICAgICAgICAgICBVRXJyb3JDb2RlICZlcnJvckNvZGUpOw0KLSNlbmRp
ZiAgLy8gVV9ISURFX0RSQUZUX0FQSQ0KLQ0KLSAgICAvKioNCi0gICAgICogTG93ZXJjYXNlcyBh
IFVURi04IHN0cmluZyBhbmQgb3B0aW9uYWxseSByZWNvcmRzIGVkaXRzLg0KLSAgICAgKiBDYXNp
bmcgaXMgbG9jYWxlLWRlcGVuZGVudCBhbmQgY29udGV4dC1zZW5zaXRpdmUuDQotICAgICAqIFRo
ZSByZXN1bHQgbWF5IGJlIGxvbmdlciBvciBzaG9ydGVyIHRoYW4gdGhlIG9yaWdpbmFsLg0KLSAg
ICAgKiBUaGUgc291cmNlIHN0cmluZyBhbmQgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBtdXN0IG5v
dCBvdmVybGFwLg0KLSAgICAgKg0KLSAgICAgKiBAcGFyYW0gbG9jYWxlICAgIFRoZSBsb2NhbGUg
SUQuICgiIiA9IHJvb3QgbG9jYWxlLCBOVUxMID0gZGVmYXVsdCBsb2NhbGUuKQ0KLSAgICAgKiBA
cGFyYW0gb3B0aW9ucyAgIE9wdGlvbnMgYml0IHNldCwgdXN1YWxseSAwLiBTZWUgVV9PTUlUX1VO
Q0hBTkdFRF9URVhUIGFuZCBVX0VESVRTX05PX1JFU0VULg0KLSAgICAgKiBAcGFyYW0gc3JjICAg
ICAgIFRoZSBvcmlnaW5hbCBzdHJpbmcuDQotICAgICAqIEBwYXJhbSBzcmNMZW5ndGggVGhlIGxl
bmd0aCBvZiB0aGUgb3JpZ2luYWwgc3RyaW5nLiBJZiAtMSwgdGhlbiBzcmMgbXVzdCBiZSBOVUwt
dGVybWluYXRlZC4NCi0gICAgICogQHBhcmFtIGRlc3QgICAgICBBIGJ1ZmZlciBmb3IgdGhlIHJl
c3VsdCBzdHJpbmcuIFRoZSByZXN1bHQgd2lsbCBiZSBOVUwtdGVybWluYXRlZCBpZg0KLSAgICAg
KiAgICAgICAgICAgICAgICAgIHRoZSBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoLg0KLSAgICAgKiAg
ICAgICAgICAgICAgICAgIFRoZSBjb250ZW50cyBpcyB1bmRlZmluZWQgaW4gY2FzZSBvZiBmYWls
dXJlLg0KLSAgICAgKiBAcGFyYW0gZGVzdENhcGFjaXR5IFRoZSBzaXplIG9mIHRoZSBidWZmZXIg
KG51bWJlciBvZiBieXRlcykuIElmIGl0IGlzIDAsIHRoZW4NCi0gICAgICogICAgICAgICAgICAg
ICAgICBkZXN0IG1heSBiZSBOVUxMIGFuZCB0aGUgZnVuY3Rpb24gd2lsbCBvbmx5IHJldHVybiB0
aGUgbGVuZ3RoIG9mIHRoZSByZXN1bHQNCi0gICAgICogICAgICAgICAgICAgICAgICB3aXRob3V0
IHdyaXRpbmcgYW55IG9mIHRoZSByZXN1bHQgc3RyaW5nLg0KLSAgICAgKiBAcGFyYW0gZWRpdHMg
ICAgIFJlY29yZHMgZWRpdHMgZm9yIGluZGV4IG1hcHBpbmcsIHdvcmtpbmcgd2l0aCBzdHlsZWQg
dGV4dCwNCi0gICAgICogICAgICAgICAgICAgICAgICBhbmQgZ2V0dGluZyBvbmx5IGNoYW5nZXMg
KGlmIGFueSkuDQotICAgICAqICAgICAgICAgICAgICAgICAgVGhlIEVkaXRzIGNvbnRlbnRzIGlz
IHVuZGVmaW5lZCBpZiBhbnkgZXJyb3Igb2NjdXJzLg0KLSAgICAgKiAgICAgICAgICAgICAgICAg
IFRoaXMgZnVuY3Rpb24gY2FsbHMgZWRpdHMtPnJlc2V0KCkgZmlyc3QgdW5sZXNzDQotICAgICAq
ICAgICAgICAgICAgICAgICAgb3B0aW9ucyBpbmNsdWRlcyBVX0VESVRTX05PX1JFU0VULiBlZGl0
cyBjYW4gYmUgTlVMTC4NCi0gICAgICogQHBhcmFtIGVycm9yQ29kZSBSZWZlcmVuY2UgdG8gYW4g
aW4vb3V0IGVycm9yIGNvZGUgdmFsdWUNCi0gICAgICogICAgICAgICAgICAgICAgICB3aGljaCBt
dXN0IG5vdCBpbmRpY2F0ZSBhIGZhaWx1cmUgYmVmb3JlIHRoZSBmdW5jdGlvbiBjYWxsLg0KLSAg
ICAgKiBAcmV0dXJuIFRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdCBzdHJpbmcsIGlmIHN1Y2Nlc3Nm
dWwuDQotICAgICAqICAgICAgICAgV2hlbiB0aGUgcmVzdWx0IHdvdWxkIGJlIGxvbmdlciB0aGFu
IGRlc3RDYXBhY2l0eSwNCi0gICAgICogICAgICAgICB0aGUgZnVsbCBsZW5ndGggaXMgcmV0dXJu
ZWQgYW5kIGEgVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IgaXMgc2V0Lg0KLSAgICAgKg0KLSAgICAg
KiBAc2VlIHVjYXNlbWFwX3V0ZjhUb0xvd2VyDQotICAgICAqIEBzdGFibGUgSUNVIDU5DQotICAg
ICAqLw0KLSAgICBzdGF0aWMgaW50MzJfdCB1dGY4VG9Mb3dlcigNCi0gICAgICAgICAgICBjb25z
dCBjaGFyICpsb2NhbGUsIHVpbnQzMl90IG9wdGlvbnMsDQotICAgICAgICAgICAgY29uc3QgY2hh
ciAqc3JjLCBpbnQzMl90IHNyY0xlbmd0aCwNCi0gICAgICAgICAgICBjaGFyICpkZXN0LCBpbnQz
Ml90IGRlc3RDYXBhY2l0eSwgRWRpdHMgKmVkaXRzLA0KLSAgICAgICAgICAgIFVFcnJvckNvZGUg
JmVycm9yQ29kZSk7DQotDQotICAgIC8qKg0KLSAgICAgKiBVcHBlcmNhc2VzIGEgVVRGLTggc3Ry
aW5nIGFuZCBvcHRpb25hbGx5IHJlY29yZHMgZWRpdHMuDQotICAgICAqIENhc2luZyBpcyBsb2Nh
bGUtZGVwZW5kZW50IGFuZCBjb250ZXh0LXNlbnNpdGl2ZS4NCi0gICAgICogVGhlIHJlc3VsdCBt
YXkgYmUgbG9uZ2VyIG9yIHNob3J0ZXIgdGhhbiB0aGUgb3JpZ2luYWwuDQotICAgICAqIFRoZSBz
b3VyY2Ugc3RyaW5nIGFuZCB0aGUgZGVzdGluYXRpb24gYnVmZmVyIG11c3Qgbm90IG92ZXJsYXAu
DQotICAgICAqDQotICAgICAqIEBwYXJhbSBsb2NhbGUgICAgVGhlIGxvY2FsZSBJRC4gKCIiID0g
cm9vdCBsb2NhbGUsIE5VTEwgPSBkZWZhdWx0IGxvY2FsZS4pDQotICAgICAqIEBwYXJhbSBvcHRp
b25zICAgT3B0aW9ucyBiaXQgc2V0LCB1c3VhbGx5IDAuIFNlZSBVX09NSVRfVU5DSEFOR0VEX1RF
WFQgYW5kIFVfRURJVFNfTk9fUkVTRVQuDQotICAgICAqIEBwYXJhbSBzcmMgICAgICAgVGhlIG9y
aWdpbmFsIHN0cmluZy4NCi0gICAgICogQHBhcmFtIHNyY0xlbmd0aCBUaGUgbGVuZ3RoIG9mIHRo
ZSBvcmlnaW5hbCBzdHJpbmcuIElmIC0xLCB0aGVuIHNyYyBtdXN0IGJlIE5VTC10ZXJtaW5hdGVk
Lg0KLSAgICAgKiBAcGFyYW0gZGVzdCAgICAgIEEgYnVmZmVyIGZvciB0aGUgcmVzdWx0IHN0cmlu
Zy4gVGhlIHJlc3VsdCB3aWxsIGJlIE5VTC10ZXJtaW5hdGVkIGlmDQotICAgICAqICAgICAgICAg
ICAgICAgICAgdGhlIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2guDQotICAgICAqICAgICAgICAgICAg
ICAgICAgVGhlIGNvbnRlbnRzIGlzIHVuZGVmaW5lZCBpbiBjYXNlIG9mIGZhaWx1cmUuDQotICAg
ICAqIEBwYXJhbSBkZXN0Q2FwYWNpdHkgVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAobnVtYmVyIG9m
IGJ5dGVzKS4gSWYgaXQgaXMgMCwgdGhlbg0KLSAgICAgKiAgICAgICAgICAgICAgICAgIGRlc3Qg
bWF5IGJlIE5VTEwgYW5kIHRoZSBmdW5jdGlvbiB3aWxsIG9ubHkgcmV0dXJuIHRoZSBsZW5ndGgg
b2YgdGhlIHJlc3VsdA0KLSAgICAgKiAgICAgICAgICAgICAgICAgIHdpdGhvdXQgd3JpdGluZyBh
bnkgb2YgdGhlIHJlc3VsdCBzdHJpbmcuDQotICAgICAqIEBwYXJhbSBlZGl0cyAgICAgUmVjb3Jk
cyBlZGl0cyBmb3IgaW5kZXggbWFwcGluZywgd29ya2luZyB3aXRoIHN0eWxlZCB0ZXh0LA0KLSAg
ICAgKiAgICAgICAgICAgICAgICAgIGFuZCBnZXR0aW5nIG9ubHkgY2hhbmdlcyAoaWYgYW55KS4N
Ci0gICAgICogICAgICAgICAgICAgICAgICBUaGUgRWRpdHMgY29udGVudHMgaXMgdW5kZWZpbmVk
IGlmIGFueSBlcnJvciBvY2N1cnMuDQotICAgICAqICAgICAgICAgICAgICAgICAgVGhpcyBmdW5j
dGlvbiBjYWxscyBlZGl0cy0+cmVzZXQoKSBmaXJzdCB1bmxlc3MNCi0gICAgICogICAgICAgICAg
ICAgICAgICBvcHRpb25zIGluY2x1ZGVzIFVfRURJVFNfTk9fUkVTRVQuIGVkaXRzIGNhbiBiZSBO
VUxMLg0KLSAgICAgKiBAcGFyYW0gZXJyb3JDb2RlIFJlZmVyZW5jZSB0byBhbiBpbi9vdXQgZXJy
b3IgY29kZSB2YWx1ZQ0KLSAgICAgKiAgICAgICAgICAgICAgICAgIHdoaWNoIG11c3Qgbm90IGlu
ZGljYXRlIGEgZmFpbHVyZSBiZWZvcmUgdGhlIGZ1bmN0aW9uIGNhbGwuDQotICAgICAqIEByZXR1
cm4gVGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0IHN0cmluZywgaWYgc3VjY2Vzc2Z1bC4NCi0gICAg
ICogICAgICAgICBXaGVuIHRoZSByZXN1bHQgd291bGQgYmUgbG9uZ2VyIHRoYW4gZGVzdENhcGFj
aXR5LA0KLSAgICAgKiAgICAgICAgIHRoZSBmdWxsIGxlbmd0aCBpcyByZXR1cm5lZCBhbmQgYSBV
X0JVRkZFUl9PVkVSRkxPV19FUlJPUiBpcyBzZXQuDQotICAgICAqDQotICAgICAqIEBzZWUgdWNh
c2VtYXBfdXRmOFRvVXBwZXINCi0gICAgICogQHN0YWJsZSBJQ1UgNTkNCi0gICAgICovDQotICAg
IHN0YXRpYyBpbnQzMl90IHV0ZjhUb1VwcGVyKA0KLSAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxv
Y2FsZSwgdWludDMyX3Qgb3B0aW9ucywNCi0gICAgICAgICAgICBjb25zdCBjaGFyICpzcmMsIGlu
dDMyX3Qgc3JjTGVuZ3RoLA0KLSAgICAgICAgICAgIGNoYXIgKmRlc3QsIGludDMyX3QgZGVzdENh
cGFjaXR5LCBFZGl0cyAqZWRpdHMsDQotICAgICAgICAgICAgVUVycm9yQ29kZSAmZXJyb3JDb2Rl
KTsNCi0NCi0jaWYgIVVDT05GSUdfTk9fQlJFQUtfSVRFUkFUSU9ODQotDQotICAgIC8qKg0KLSAg
ICAgKiBUaXRsZWNhc2VzIGEgVVRGLTggc3RyaW5nIGFuZCBvcHRpb25hbGx5IHJlY29yZHMgZWRp
dHMuDQotICAgICAqIENhc2luZyBpcyBsb2NhbGUtZGVwZW5kZW50IGFuZCBjb250ZXh0LXNlbnNp
dGl2ZS4NCi0gICAgICogVGhlIHJlc3VsdCBtYXkgYmUgbG9uZ2VyIG9yIHNob3J0ZXIgdGhhbiB0
aGUgb3JpZ2luYWwuDQotICAgICAqIFRoZSBzb3VyY2Ugc3RyaW5nIGFuZCB0aGUgZGVzdGluYXRp
b24gYnVmZmVyIG11c3Qgbm90IG92ZXJsYXAuDQotICAgICAqDQotICAgICAqIFRpdGxlY2FzaW5n
IHVzZXMgYSBicmVhayBpdGVyYXRvciB0byBmaW5kIHRoZSBmaXJzdCBjaGFyYWN0ZXJzIG9mIHdv
cmRzDQotICAgICAqIHRoYXQgYXJlIHRvIGJlIHRpdGxlY2FzZWQuIEl0IHRpdGxlY2FzZXMgdGhv
c2UgY2hhcmFjdGVycyBhbmQgbG93ZXJjYXNlcw0KLSAgICAgKiBhbGwgb3RoZXJzLiAoVGhpcyBj
YW4gYmUgbW9kaWZpZWQgd2l0aCBvcHRpb25zIGJpdHMuKQ0KLSAgICAgKg0KLSAgICAgKiBAcGFy
YW0gbG9jYWxlICAgIFRoZSBsb2NhbGUgSUQuICgiIiA9IHJvb3QgbG9jYWxlLCBOVUxMID0gZGVm
YXVsdCBsb2NhbGUuKQ0KLSAgICAgKiBAcGFyYW0gb3B0aW9ucyAgIE9wdGlvbnMgYml0IHNldCwg
dXN1YWxseSAwLiBTZWUgVV9PTUlUX1VOQ0hBTkdFRF9URVhULCBVX0VESVRTX05PX1JFU0VULA0K
LSAgICAgKiAgICAgICAgICAgICAgICAgIFVfVElUTEVDQVNFX05PX0xPV0VSQ0FTRSwNCi0gICAg
ICogICAgICAgICAgICAgICAgICBVX1RJVExFQ0FTRV9OT19CUkVBS19BREpVU1RNRU5ULCBVX1RJ
VExFQ0FTRV9BREpVU1RfVE9fQ0FTRUQsDQotICAgICAqICAgICAgICAgICAgICAgICAgVV9USVRM
RUNBU0VfV0hPTEVfU1RSSU5HLCBVX1RJVExFQ0FTRV9TRU5URU5DRVMuDQotICAgICAqIEBwYXJh
bSBpdGVyICAgICAgQSBicmVhayBpdGVyYXRvciB0byBmaW5kIHRoZSBmaXJzdCBjaGFyYWN0ZXJz
IG9mIHdvcmRzIHRoYXQgYXJlIHRvIGJlIHRpdGxlY2FzZWQuDQotICAgICAqICAgICAgICAgICAg
ICAgICAgSXQgaXMgc2V0IHRvIHRoZSBzb3VyY2Ugc3RyaW5nIChzZXRVVGV4dCgpKQ0KLSAgICAg
KiAgICAgICAgICAgICAgICAgIGFuZCB1c2VkIG9uZSBvciBtb3JlIHRpbWVzIGZvciBpdGVyYXRp
b24gKGZpcnN0KCkgYW5kIG5leHQoKSkuDQotICAgICAqICAgICAgICAgICAgICAgICAgSWYgTlVM
TCwgdGhlbiBhIHdvcmQgYnJlYWsgaXRlcmF0b3IgZm9yIHRoZSBsb2NhbGUgaXMgdXNlZA0KLSAg
ICAgKiAgICAgICAgICAgICAgICAgIChvciBzb21ldGhpbmcgZXF1aXZhbGVudCkuDQotICAgICAq
IEBwYXJhbSBzcmMgICAgICAgVGhlIG9yaWdpbmFsIHN0cmluZy4NCi0gICAgICogQHBhcmFtIHNy
Y0xlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSBvcmlnaW5hbCBzdHJpbmcuIElmIC0xLCB0aGVuIHNy
YyBtdXN0IGJlIE5VTC10ZXJtaW5hdGVkLg0KLSAgICAgKiBAcGFyYW0gZGVzdCAgICAgIEEgYnVm
ZmVyIGZvciB0aGUgcmVzdWx0IHN0cmluZy4gVGhlIHJlc3VsdCB3aWxsIGJlIE5VTC10ZXJtaW5h
dGVkIGlmDQotICAgICAqICAgICAgICAgICAgICAgICAgdGhlIGJ1ZmZlciBpcyBsYXJnZSBlbm91
Z2guDQotICAgICAqICAgICAgICAgICAgICAgICAgVGhlIGNvbnRlbnRzIGlzIHVuZGVmaW5lZCBp
biBjYXNlIG9mIGZhaWx1cmUuDQotICAgICAqIEBwYXJhbSBkZXN0Q2FwYWNpdHkgVGhlIHNpemUg
b2YgdGhlIGJ1ZmZlciAobnVtYmVyIG9mIGJ5dGVzKS4gSWYgaXQgaXMgMCwgdGhlbg0KLSAgICAg
KiAgICAgICAgICAgICAgICAgIGRlc3QgbWF5IGJlIE5VTEwgYW5kIHRoZSBmdW5jdGlvbiB3aWxs
IG9ubHkgcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdA0KLSAgICAgKiAgICAgICAgICAg
ICAgICAgIHdpdGhvdXQgd3JpdGluZyBhbnkgb2YgdGhlIHJlc3VsdCBzdHJpbmcuDQotICAgICAq
IEBwYXJhbSBlZGl0cyAgICAgUmVjb3JkcyBlZGl0cyBmb3IgaW5kZXggbWFwcGluZywgd29ya2lu
ZyB3aXRoIHN0eWxlZCB0ZXh0LA0KLSAgICAgKiAgICAgICAgICAgICAgICAgIGFuZCBnZXR0aW5n
IG9ubHkgY2hhbmdlcyAoaWYgYW55KS4NCi0gICAgICogICAgICAgICAgICAgICAgICBUaGUgRWRp
dHMgY29udGVudHMgaXMgdW5kZWZpbmVkIGlmIGFueSBlcnJvciBvY2N1cnMuDQotICAgICAqICAg
ICAgICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBjYWxscyBlZGl0cy0+cmVzZXQoKSBmaXJzdCB1
bmxlc3MNCi0gICAgICogICAgICAgICAgICAgICAgICBvcHRpb25zIGluY2x1ZGVzIFVfRURJVFNf
Tk9fUkVTRVQuIGVkaXRzIGNhbiBiZSBOVUxMLg0KLSAgICAgKiBAcGFyYW0gZXJyb3JDb2RlIFJl
ZmVyZW5jZSB0byBhbiBpbi9vdXQgZXJyb3IgY29kZSB2YWx1ZQ0KLSAgICAgKiAgICAgICAgICAg
ICAgICAgIHdoaWNoIG11c3Qgbm90IGluZGljYXRlIGEgZmFpbHVyZSBiZWZvcmUgdGhlIGZ1bmN0
aW9uIGNhbGwuDQotICAgICAqIEByZXR1cm4gVGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0IHN0cmlu
ZywgaWYgc3VjY2Vzc2Z1bC4NCi0gICAgICogICAgICAgICBXaGVuIHRoZSByZXN1bHQgd291bGQg
YmUgbG9uZ2VyIHRoYW4gZGVzdENhcGFjaXR5LA0KLSAgICAgKiAgICAgICAgIHRoZSBmdWxsIGxl
bmd0aCBpcyByZXR1cm5lZCBhbmQgYSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUiBpcyBzZXQuDQot
ICAgICAqDQotICAgICAqIEBzZWUgdWNhc2VtYXBfdXRmOFRvVGl0bGUNCi0gICAgICogQHN0YWJs
ZSBJQ1UgNTkNCi0gICAgICovDQotICAgIHN0YXRpYyBpbnQzMl90IHV0ZjhUb1RpdGxlKA0KLSAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKmxvY2FsZSwgdWludDMyX3Qgb3B0aW9ucywgQnJlYWtJdGVy
YXRvciAqaXRlciwNCi0gICAgICAgICAgICBjb25zdCBjaGFyICpzcmMsIGludDMyX3Qgc3JjTGVu
Z3RoLA0KLSAgICAgICAgICAgIGNoYXIgKmRlc3QsIGludDMyX3QgZGVzdENhcGFjaXR5LCBFZGl0
cyAqZWRpdHMsDQotICAgICAgICAgICAgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsNCi0NCi0jZW5k
aWYgIC8vIFVDT05GSUdfTk9fQlJFQUtfSVRFUkFUSU9ODQotDQotICAgIC8qKg0KLSAgICAgKiBD
YXNlLWZvbGRzIGEgVVRGLTggc3RyaW5nIGFuZCBvcHRpb25hbGx5IHJlY29yZHMgZWRpdHMuDQot
ICAgICAqDQotICAgICAqIENhc2UgZm9sZGluZyBpcyBsb2NhbGUtaW5kZXBlbmRlbnQgYW5kIG5v
dCBjb250ZXh0LXNlbnNpdGl2ZSwNCi0gICAgICogYnV0IHRoZXJlIGlzIGFuIG9wdGlvbiBmb3Ig
d2hldGhlciB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUgbWFwcGluZ3MgZm9yIGRvdHRlZCBJDQotICAg
ICAqIGFuZCBkb3RsZXNzIGkgdGhhdCBhcmUgbWFya2VkIHdpdGggJ1QnIGluIENhc2VGb2xkaW5n
LnR4dC4NCi0gICAgICoNCi0gICAgICogVGhlIHJlc3VsdCBtYXkgYmUgbG9uZ2VyIG9yIHNob3J0
ZXIgdGhhbiB0aGUgb3JpZ2luYWwuDQotICAgICAqIFRoZSBzb3VyY2Ugc3RyaW5nIGFuZCB0aGUg
ZGVzdGluYXRpb24gYnVmZmVyIG11c3Qgbm90IG92ZXJsYXAuDQotICAgICAqDQotICAgICAqIEBw
YXJhbSBvcHRpb25zICAgT3B0aW9ucyBiaXQgc2V0LCB1c3VhbGx5IDAuIFNlZSBVX09NSVRfVU5D
SEFOR0VEX1RFWFQsIFVfRURJVFNfTk9fUkVTRVQsDQotICAgICAqICAgICAgICAgICAgICAgICAg
VV9GT0xEX0NBU0VfREVGQVVMVCwgVV9GT0xEX0NBU0VfRVhDTFVERV9TUEVDSUFMX0kuDQotICAg
ICAqIEBwYXJhbSBzcmMgICAgICAgVGhlIG9yaWdpbmFsIHN0cmluZy4NCi0gICAgICogQHBhcmFt
IHNyY0xlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSBvcmlnaW5hbCBzdHJpbmcuIElmIC0xLCB0aGVu
IHNyYyBtdXN0IGJlIE5VTC10ZXJtaW5hdGVkLg0KLSAgICAgKiBAcGFyYW0gZGVzdCAgICAgIEEg
YnVmZmVyIGZvciB0aGUgcmVzdWx0IHN0cmluZy4gVGhlIHJlc3VsdCB3aWxsIGJlIE5VTC10ZXJt
aW5hdGVkIGlmDQotICAgICAqICAgICAgICAgICAgICAgICAgdGhlIGJ1ZmZlciBpcyBsYXJnZSBl
bm91Z2guDQotICAgICAqICAgICAgICAgICAgICAgICAgVGhlIGNvbnRlbnRzIGlzIHVuZGVmaW5l
ZCBpbiBjYXNlIG9mIGZhaWx1cmUuDQotICAgICAqIEBwYXJhbSBkZXN0Q2FwYWNpdHkgVGhlIHNp
emUgb2YgdGhlIGJ1ZmZlciAobnVtYmVyIG9mIGJ5dGVzKS4gSWYgaXQgaXMgMCwgdGhlbg0KLSAg
ICAgKiAgICAgICAgICAgICAgICAgIGRlc3QgbWF5IGJlIE5VTEwgYW5kIHRoZSBmdW5jdGlvbiB3
aWxsIG9ubHkgcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdA0KLSAgICAgKiAgICAgICAg
ICAgICAgICAgIHdpdGhvdXQgd3JpdGluZyBhbnkgb2YgdGhlIHJlc3VsdCBzdHJpbmcuDQotICAg
ICAqIEBwYXJhbSBlZGl0cyAgICAgUmVjb3JkcyBlZGl0cyBmb3IgaW5kZXggbWFwcGluZywgd29y
a2luZyB3aXRoIHN0eWxlZCB0ZXh0LA0KLSAgICAgKiAgICAgICAgICAgICAgICAgIGFuZCBnZXR0
aW5nIG9ubHkgY2hhbmdlcyAoaWYgYW55KS4NCi0gICAgICogICAgICAgICAgICAgICAgICBUaGUg
RWRpdHMgY29udGVudHMgaXMgdW5kZWZpbmVkIGlmIGFueSBlcnJvciBvY2N1cnMuDQotICAgICAq
ICAgICAgICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBjYWxscyBlZGl0cy0+cmVzZXQoKSBmaXJz
dCB1bmxlc3MNCi0gICAgICogICAgICAgICAgICAgICAgICBvcHRpb25zIGluY2x1ZGVzIFVfRURJ
VFNfTk9fUkVTRVQuIGVkaXRzIGNhbiBiZSBOVUxMLg0KLSAgICAgKiBAcGFyYW0gZXJyb3JDb2Rl
IFJlZmVyZW5jZSB0byBhbiBpbi9vdXQgZXJyb3IgY29kZSB2YWx1ZQ0KLSAgICAgKiAgICAgICAg
ICAgICAgICAgIHdoaWNoIG11c3Qgbm90IGluZGljYXRlIGEgZmFpbHVyZSBiZWZvcmUgdGhlIGZ1
bmN0aW9uIGNhbGwuDQotICAgICAqIEByZXR1cm4gVGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0IHN0
cmluZywgaWYgc3VjY2Vzc2Z1bC4NCi0gICAgICogICAgICAgICBXaGVuIHRoZSByZXN1bHQgd291
bGQgYmUgbG9uZ2VyIHRoYW4gZGVzdENhcGFjaXR5LA0KLSAgICAgKiAgICAgICAgIHRoZSBmdWxs
IGxlbmd0aCBpcyByZXR1cm5lZCBhbmQgYSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUiBpcyBzZXQu
DQotICAgICAqDQotICAgICAqIEBzZWUgdWNhc2VtYXBfdXRmOEZvbGRDYXNlDQotICAgICAqIEBz
dGFibGUgSUNVIDU5DQotICAgICAqLw0KLSAgICBzdGF0aWMgaW50MzJfdCB1dGY4Rm9sZCgNCi0g
ICAgICAgICAgICB1aW50MzJfdCBvcHRpb25zLA0KLSAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNy
YywgaW50MzJfdCBzcmNMZW5ndGgsDQotICAgICAgICAgICAgY2hhciAqZGVzdCwgaW50MzJfdCBk
ZXN0Q2FwYWNpdHksIEVkaXRzICplZGl0cywNCi0gICAgICAgICAgICBVRXJyb3JDb2RlICZlcnJv
ckNvZGUpOw0KLQ0KLXByaXZhdGU6DQotICAgIENhc2VNYXAoKSA9IGRlbGV0ZTsNCi0gICAgQ2Fz
ZU1hcChjb25zdCBDYXNlTWFwICZvdGhlcikgPSBkZWxldGU7DQotICAgIENhc2VNYXAgJm9wZXJh
dG9yPShjb25zdCBDYXNlTWFwICZvdGhlcikgPSBkZWxldGU7DQotfTsNCi0NCi1VX05BTUVTUEFD
RV9FTkQNCi0NCi0jZW5kaWYgIC8vIF9fQ0FTRU1BUF9IX18NCisvLyDCqSAyMDE3IGFuZCBsYXRl
cjogVW5pY29kZSwgSW5jLiBhbmQgb3RoZXJzLgorLy8gTGljZW5zZSAmIHRlcm1zIG9mIHVzZTog
aHR0cDovL3d3dy51bmljb2RlLm9yZy9jb3B5cmlnaHQuaHRtbAorCisvLyBjYXNlbWFwLmgKKy8v
IGNyZWF0ZWQ6IDIwMTdqYW4xMiBNYXJrdXMgVy4gU2NoZXJlcgorCisjaWZuZGVmIF9fQ0FTRU1B
UF9IX18KKyNkZWZpbmUgX19DQVNFTUFQX0hfXworCisjaW5jbHVkZSAidW5pY29kZS91dHlwZXMu
aCIKKyNpbmNsdWRlICJ1bmljb2RlL3N0cmluZ3BpZWNlLmgiCisjaW5jbHVkZSAidW5pY29kZS91
b2JqZWN0LmgiCisKKy8qKgorICogXGZpbGUKKyAqIFxicmllZiBDKysgQVBJOiBMb3ctbGV2ZWwg
QysrIGNhc2UgbWFwcGluZyBmdW5jdGlvbnMuCisgKi8KKworVV9OQU1FU1BBQ0VfQkVHSU4KKwor
Y2xhc3MgQnJlYWtJdGVyYXRvcjsKK2NsYXNzIEJ5dGVTaW5rOworY2xhc3MgRWRpdHM7CisKKy8q
KgorICogTG93LWxldmVsIEMrKyBjYXNlIG1hcHBpbmcgZnVuY3Rpb25zLgorICoKKyAqIEBzdGFi
bGUgSUNVIDU5CisgKi8KK2NsYXNzIFVfQ09NTU9OX0FQSSBDYXNlTWFwIFVfRklOQUwgOiBwdWJs
aWMgVU1lbW9yeSB7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogTG93ZXJjYXNlcyBhIFVURi0x
NiBzdHJpbmcgYW5kIG9wdGlvbmFsbHkgcmVjb3JkcyBlZGl0cy4KKyAgICAgKiBDYXNpbmcgaXMg
bG9jYWxlLWRlcGVuZGVudCBhbmQgY29udGV4dC1zZW5zaXRpdmUuCisgICAgICogVGhlIHJlc3Vs
dCBtYXkgYmUgbG9uZ2VyIG9yIHNob3J0ZXIgdGhhbiB0aGUgb3JpZ2luYWwuCisgICAgICogVGhl
IHNvdXJjZSBzdHJpbmcgYW5kIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgbXVzdCBub3Qgb3Zlcmxh
cC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBsb2NhbGUgICAgVGhlIGxvY2FsZSBJRC4gKCIiID0g
cm9vdCBsb2NhbGUsIE5VTEwgPSBkZWZhdWx0IGxvY2FsZS4pCisgICAgICogQHBhcmFtIG9wdGlv
bnMgICBPcHRpb25zIGJpdCBzZXQsIHVzdWFsbHkgMC4gU2VlIFVfT01JVF9VTkNIQU5HRURfVEVY
VCBhbmQgVV9FRElUU19OT19SRVNFVC4KKyAgICAgKiBAcGFyYW0gc3JjICAgICAgIFRoZSBvcmln
aW5hbCBzdHJpbmcuCisgICAgICogQHBhcmFtIHNyY0xlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSBv
cmlnaW5hbCBzdHJpbmcuIElmIC0xLCB0aGVuIHNyYyBtdXN0IGJlIE5VTC10ZXJtaW5hdGVkLgor
ICAgICAqIEBwYXJhbSBkZXN0ICAgICAgQSBidWZmZXIgZm9yIHRoZSByZXN1bHQgc3RyaW5nLiBU
aGUgcmVzdWx0IHdpbGwgYmUgTlVMLXRlcm1pbmF0ZWQgaWYKKyAgICAgKiAgICAgICAgICAgICAg
ICAgIHRoZSBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoLgorICAgICAqICAgICAgICAgICAgICAgICAg
VGhlIGNvbnRlbnRzIGlzIHVuZGVmaW5lZCBpbiBjYXNlIG9mIGZhaWx1cmUuCisgICAgICogQHBh
cmFtIGRlc3RDYXBhY2l0eSBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIChudW1iZXIgb2YgY2hhcjE2
X3RzKS4gSWYgaXQgaXMgMCwgdGhlbgorICAgICAqICAgICAgICAgICAgICAgICAgZGVzdCBtYXkg
YmUgTlVMTCBhbmQgdGhlIGZ1bmN0aW9uIHdpbGwgb25seSByZXR1cm4gdGhlIGxlbmd0aCBvZiB0
aGUgcmVzdWx0CisgICAgICogICAgICAgICAgICAgICAgICB3aXRob3V0IHdyaXRpbmcgYW55IG9m
IHRoZSByZXN1bHQgc3RyaW5nLgorICAgICAqIEBwYXJhbSBlZGl0cyAgICAgUmVjb3JkcyBlZGl0
cyBmb3IgaW5kZXggbWFwcGluZywgd29ya2luZyB3aXRoIHN0eWxlZCB0ZXh0LAorICAgICAqICAg
ICAgICAgICAgICAgICAgYW5kIGdldHRpbmcgb25seSBjaGFuZ2VzIChpZiBhbnkpLgorICAgICAq
ICAgICAgICAgICAgICAgICAgVGhlIEVkaXRzIGNvbnRlbnRzIGlzIHVuZGVmaW5lZCBpZiBhbnkg
ZXJyb3Igb2NjdXJzLgorICAgICAqICAgICAgICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBjYWxs
cyBlZGl0cy0+cmVzZXQoKSBmaXJzdCB1bmxlc3MKKyAgICAgKiAgICAgICAgICAgICAgICAgIG9w
dGlvbnMgaW5jbHVkZXMgVV9FRElUU19OT19SRVNFVC4gZWRpdHMgY2FuIGJlIE5VTEwuCisgICAg
ICogQHBhcmFtIGVycm9yQ29kZSBSZWZlcmVuY2UgdG8gYW4gaW4vb3V0IGVycm9yIGNvZGUgdmFs
dWUKKyAgICAgKiAgICAgICAgICAgICAgICAgIHdoaWNoIG11c3Qgbm90IGluZGljYXRlIGEgZmFp
bHVyZSBiZWZvcmUgdGhlIGZ1bmN0aW9uIGNhbGwuCisgICAgICogQHJldHVybiBUaGUgbGVuZ3Ro
IG9mIHRoZSByZXN1bHQgc3RyaW5nLCBpZiBzdWNjZXNzZnVsLgorICAgICAqICAgICAgICAgV2hl
biB0aGUgcmVzdWx0IHdvdWxkIGJlIGxvbmdlciB0aGFuIGRlc3RDYXBhY2l0eSwKKyAgICAgKiAg
ICAgICAgIHRoZSBmdWxsIGxlbmd0aCBpcyByZXR1cm5lZCBhbmQgYSBVX0JVRkZFUl9PVkVSRkxP
V19FUlJPUiBpcyBzZXQuCisgICAgICoKKyAgICAgKiBAc2VlIHVfc3RyVG9Mb3dlcgorICAgICAq
IEBzdGFibGUgSUNVIDU5CisgICAgICovCisgICAgIHN0YXRpYyBpbnQzMl90IHRvTG93ZXIoCisg
ICAgICAgICAgICBjb25zdCBjaGFyICpsb2NhbGUsIHVpbnQzMl90IG9wdGlvbnMsCisgICAgICAg
ICAgICBjb25zdCBjaGFyMTZfdCAqc3JjLCBpbnQzMl90IHNyY0xlbmd0aCwKKyAgICAgICAgICAg
IGNoYXIxNl90ICpkZXN0LCBpbnQzMl90IGRlc3RDYXBhY2l0eSwgRWRpdHMgKmVkaXRzLAorICAg
ICAgICAgICAgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKworICAgIC8qKgorICAgICAqIFVwcGVy
Y2FzZXMgYSBVVEYtMTYgc3RyaW5nIGFuZCBvcHRpb25hbGx5IHJlY29yZHMgZWRpdHMuCisgICAg
ICogQ2FzaW5nIGlzIGxvY2FsZS1kZXBlbmRlbnQgYW5kIGNvbnRleHQtc2Vuc2l0aXZlLgorICAg
ICAqIFRoZSByZXN1bHQgbWF5IGJlIGxvbmdlciBvciBzaG9ydGVyIHRoYW4gdGhlIG9yaWdpbmFs
LgorICAgICAqIFRoZSBzb3VyY2Ugc3RyaW5nIGFuZCB0aGUgZGVzdGluYXRpb24gYnVmZmVyIG11
c3Qgbm90IG92ZXJsYXAuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbG9jYWxlICAgIFRoZSBsb2Nh
bGUgSUQuICgiIiA9IHJvb3QgbG9jYWxlLCBOVUxMID0gZGVmYXVsdCBsb2NhbGUuKQorICAgICAq
IEBwYXJhbSBvcHRpb25zICAgT3B0aW9ucyBiaXQgc2V0LCB1c3VhbGx5IDAuIFNlZSBVX09NSVRf
VU5DSEFOR0VEX1RFWFQgYW5kIFVfRURJVFNfTk9fUkVTRVQuCisgICAgICogQHBhcmFtIHNyYyAg
ICAgICBUaGUgb3JpZ2luYWwgc3RyaW5nLgorICAgICAqIEBwYXJhbSBzcmNMZW5ndGggVGhlIGxl
bmd0aCBvZiB0aGUgb3JpZ2luYWwgc3RyaW5nLiBJZiAtMSwgdGhlbiBzcmMgbXVzdCBiZSBOVUwt
dGVybWluYXRlZC4KKyAgICAgKiBAcGFyYW0gZGVzdCAgICAgIEEgYnVmZmVyIGZvciB0aGUgcmVz
dWx0IHN0cmluZy4gVGhlIHJlc3VsdCB3aWxsIGJlIE5VTC10ZXJtaW5hdGVkIGlmCisgICAgICog
ICAgICAgICAgICAgICAgICB0aGUgYnVmZmVyIGlzIGxhcmdlIGVub3VnaC4KKyAgICAgKiAgICAg
ICAgICAgICAgICAgIFRoZSBjb250ZW50cyBpcyB1bmRlZmluZWQgaW4gY2FzZSBvZiBmYWlsdXJl
LgorICAgICAqIEBwYXJhbSBkZXN0Q2FwYWNpdHkgVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAobnVt
YmVyIG9mIGNoYXIxNl90cykuIElmIGl0IGlzIDAsIHRoZW4KKyAgICAgKiAgICAgICAgICAgICAg
ICAgIGRlc3QgbWF5IGJlIE5VTEwgYW5kIHRoZSBmdW5jdGlvbiB3aWxsIG9ubHkgcmV0dXJuIHRo
ZSBsZW5ndGggb2YgdGhlIHJlc3VsdAorICAgICAqICAgICAgICAgICAgICAgICAgd2l0aG91dCB3
cml0aW5nIGFueSBvZiB0aGUgcmVzdWx0IHN0cmluZy4KKyAgICAgKiBAcGFyYW0gZWRpdHMgICAg
IFJlY29yZHMgZWRpdHMgZm9yIGluZGV4IG1hcHBpbmcsIHdvcmtpbmcgd2l0aCBzdHlsZWQgdGV4
dCwKKyAgICAgKiAgICAgICAgICAgICAgICAgIGFuZCBnZXR0aW5nIG9ubHkgY2hhbmdlcyAoaWYg
YW55KS4KKyAgICAgKiAgICAgICAgICAgICAgICAgIFRoZSBFZGl0cyBjb250ZW50cyBpcyB1bmRl
ZmluZWQgaWYgYW55IGVycm9yIG9jY3Vycy4KKyAgICAgKiAgICAgICAgICAgICAgICAgIFRoaXMg
ZnVuY3Rpb24gY2FsbHMgZWRpdHMtPnJlc2V0KCkgZmlyc3QgdW5sZXNzCisgICAgICogICAgICAg
ICAgICAgICAgICBvcHRpb25zIGluY2x1ZGVzIFVfRURJVFNfTk9fUkVTRVQuIGVkaXRzIGNhbiBi
ZSBOVUxMLgorICAgICAqIEBwYXJhbSBlcnJvckNvZGUgUmVmZXJlbmNlIHRvIGFuIGluL291dCBl
cnJvciBjb2RlIHZhbHVlCisgICAgICogICAgICAgICAgICAgICAgICB3aGljaCBtdXN0IG5vdCBp
bmRpY2F0ZSBhIGZhaWx1cmUgYmVmb3JlIHRoZSBmdW5jdGlvbiBjYWxsLgorICAgICAqIEByZXR1
cm4gVGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0IHN0cmluZywgaWYgc3VjY2Vzc2Z1bC4KKyAgICAg
KiAgICAgICAgIFdoZW4gdGhlIHJlc3VsdCB3b3VsZCBiZSBsb25nZXIgdGhhbiBkZXN0Q2FwYWNp
dHksCisgICAgICogICAgICAgICB0aGUgZnVsbCBsZW5ndGggaXMgcmV0dXJuZWQgYW5kIGEgVV9C
VUZGRVJfT1ZFUkZMT1dfRVJST1IgaXMgc2V0LgorICAgICAqCisgICAgICogQHNlZSB1X3N0clRv
VXBwZXIKKyAgICAgKiBAc3RhYmxlIElDVSA1OQorICAgICAqLworICAgIHN0YXRpYyBpbnQzMl90
IHRvVXBwZXIoCisgICAgICAgICAgICBjb25zdCBjaGFyICpsb2NhbGUsIHVpbnQzMl90IG9wdGlv
bnMsCisgICAgICAgICAgICBjb25zdCBjaGFyMTZfdCAqc3JjLCBpbnQzMl90IHNyY0xlbmd0aCwK
KyAgICAgICAgICAgIGNoYXIxNl90ICpkZXN0LCBpbnQzMl90IGRlc3RDYXBhY2l0eSwgRWRpdHMg
KmVkaXRzLAorICAgICAgICAgICAgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKworI2lmICFVQ09O
RklHX05PX0JSRUFLX0lURVJBVElPTgorCisgICAgLyoqCisgICAgICogVGl0bGVjYXNlcyBhIFVU
Ri0xNiBzdHJpbmcgYW5kIG9wdGlvbmFsbHkgcmVjb3JkcyBlZGl0cy4KKyAgICAgKiBDYXNpbmcg
aXMgbG9jYWxlLWRlcGVuZGVudCBhbmQgY29udGV4dC1zZW5zaXRpdmUuCisgICAgICogVGhlIHJl
c3VsdCBtYXkgYmUgbG9uZ2VyIG9yIHNob3J0ZXIgdGhhbiB0aGUgb3JpZ2luYWwuCisgICAgICog
VGhlIHNvdXJjZSBzdHJpbmcgYW5kIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgbXVzdCBub3Qgb3Zl
cmxhcC4KKyAgICAgKgorICAgICAqIFRpdGxlY2FzaW5nIHVzZXMgYSBicmVhayBpdGVyYXRvciB0
byBmaW5kIHRoZSBmaXJzdCBjaGFyYWN0ZXJzIG9mIHdvcmRzCisgICAgICogdGhhdCBhcmUgdG8g
YmUgdGl0bGVjYXNlZC4gSXQgdGl0bGVjYXNlcyB0aG9zZSBjaGFyYWN0ZXJzIGFuZCBsb3dlcmNh
c2VzCisgICAgICogYWxsIG90aGVycy4gKFRoaXMgY2FuIGJlIG1vZGlmaWVkIHdpdGggb3B0aW9u
cyBiaXRzLikKKyAgICAgKgorICAgICAqIEBwYXJhbSBsb2NhbGUgICAgVGhlIGxvY2FsZSBJRC4g
KCIiID0gcm9vdCBsb2NhbGUsIE5VTEwgPSBkZWZhdWx0IGxvY2FsZS4pCisgICAgICogQHBhcmFt
IG9wdGlvbnMgICBPcHRpb25zIGJpdCBzZXQsIHVzdWFsbHkgMC4gU2VlIFVfT01JVF9VTkNIQU5H
RURfVEVYVCwgVV9FRElUU19OT19SRVNFVCwKKyAgICAgKiAgICAgICAgICAgICAgICAgIFVfVElU
TEVDQVNFX05PX0xPV0VSQ0FTRSwKKyAgICAgKiAgICAgICAgICAgICAgICAgIFVfVElUTEVDQVNF
X05PX0JSRUFLX0FESlVTVE1FTlQsIFVfVElUTEVDQVNFX0FESlVTVF9UT19DQVNFRCwKKyAgICAg
KiAgICAgICAgICAgICAgICAgIFVfVElUTEVDQVNFX1dIT0xFX1NUUklORywgVV9USVRMRUNBU0Vf
U0VOVEVOQ0VTLgorICAgICAqIEBwYXJhbSBpdGVyICAgICAgQSBicmVhayBpdGVyYXRvciB0byBm
aW5kIHRoZSBmaXJzdCBjaGFyYWN0ZXJzIG9mIHdvcmRzIHRoYXQgYXJlIHRvIGJlIHRpdGxlY2Fz
ZWQuCisgICAgICogICAgICAgICAgICAgICAgICBJdCBpcyBzZXQgdG8gdGhlIHNvdXJjZSBzdHJp
bmcgKHNldFRleHQoKSkKKyAgICAgKiAgICAgICAgICAgICAgICAgIGFuZCB1c2VkIG9uZSBvciBt
b3JlIHRpbWVzIGZvciBpdGVyYXRpb24gKGZpcnN0KCkgYW5kIG5leHQoKSkuCisgICAgICogICAg
ICAgICAgICAgICAgICBJZiBOVUxMLCB0aGVuIGEgd29yZCBicmVhayBpdGVyYXRvciBmb3IgdGhl
IGxvY2FsZSBpcyB1c2VkCisgICAgICogICAgICAgICAgICAgICAgICAob3Igc29tZXRoaW5nIGVx
dWl2YWxlbnQpLgorICAgICAqIEBwYXJhbSBzcmMgICAgICAgVGhlIG9yaWdpbmFsIHN0cmluZy4K
KyAgICAgKiBAcGFyYW0gc3JjTGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIG9yaWdpbmFsIHN0cmlu
Zy4gSWYgLTEsIHRoZW4gc3JjIG11c3QgYmUgTlVMLXRlcm1pbmF0ZWQuCisgICAgICogQHBhcmFt
IGRlc3QgICAgICBBIGJ1ZmZlciBmb3IgdGhlIHJlc3VsdCBzdHJpbmcuIFRoZSByZXN1bHQgd2ls
bCBiZSBOVUwtdGVybWluYXRlZCBpZgorICAgICAqICAgICAgICAgICAgICAgICAgdGhlIGJ1ZmZl
ciBpcyBsYXJnZSBlbm91Z2guCisgICAgICogICAgICAgICAgICAgICAgICBUaGUgY29udGVudHMg
aXMgdW5kZWZpbmVkIGluIGNhc2Ugb2YgZmFpbHVyZS4KKyAgICAgKiBAcGFyYW0gZGVzdENhcGFj
aXR5IFRoZSBzaXplIG9mIHRoZSBidWZmZXIgKG51bWJlciBvZiBjaGFyMTZfdHMpLiBJZiBpdCBp
cyAwLCB0aGVuCisgICAgICogICAgICAgICAgICAgICAgICBkZXN0IG1heSBiZSBOVUxMIGFuZCB0
aGUgZnVuY3Rpb24gd2lsbCBvbmx5IHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSByZXN1bHQKKyAg
ICAgKiAgICAgICAgICAgICAgICAgIHdpdGhvdXQgd3JpdGluZyBhbnkgb2YgdGhlIHJlc3VsdCBz
dHJpbmcuCisgICAgICogQHBhcmFtIGVkaXRzICAgICBSZWNvcmRzIGVkaXRzIGZvciBpbmRleCBt
YXBwaW5nLCB3b3JraW5nIHdpdGggc3R5bGVkIHRleHQsCisgICAgICogICAgICAgICAgICAgICAg
ICBhbmQgZ2V0dGluZyBvbmx5IGNoYW5nZXMgKGlmIGFueSkuCisgICAgICogICAgICAgICAgICAg
ICAgICBUaGUgRWRpdHMgY29udGVudHMgaXMgdW5kZWZpbmVkIGlmIGFueSBlcnJvciBvY2N1cnMu
CisgICAgICogICAgICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGNhbGxzIGVkaXRzLT5yZXNl
dCgpIGZpcnN0IHVubGVzcworICAgICAqICAgICAgICAgICAgICAgICAgb3B0aW9ucyBpbmNsdWRl
cyBVX0VESVRTX05PX1JFU0VULiBlZGl0cyBjYW4gYmUgTlVMTC4KKyAgICAgKiBAcGFyYW0gZXJy
b3JDb2RlIFJlZmVyZW5jZSB0byBhbiBpbi9vdXQgZXJyb3IgY29kZSB2YWx1ZQorICAgICAqICAg
ICAgICAgICAgICAgICAgd2hpY2ggbXVzdCBub3QgaW5kaWNhdGUgYSBmYWlsdXJlIGJlZm9yZSB0
aGUgZnVuY3Rpb24gY2FsbC4KKyAgICAgKiBAcmV0dXJuIFRoZSBsZW5ndGggb2YgdGhlIHJlc3Vs
dCBzdHJpbmcsIGlmIHN1Y2Nlc3NmdWwuCisgICAgICogICAgICAgICBXaGVuIHRoZSByZXN1bHQg
d291bGQgYmUgbG9uZ2VyIHRoYW4gZGVzdENhcGFjaXR5LAorICAgICAqICAgICAgICAgdGhlIGZ1
bGwgbGVuZ3RoIGlzIHJldHVybmVkIGFuZCBhIFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SIGlzIHNl
dC4KKyAgICAgKgorICAgICAqIEBzZWUgdV9zdHJUb1RpdGxlCisgICAgICogQHNlZSB1Y2FzZW1h
cF90b1RpdGxlCisgICAgICogQHN0YWJsZSBJQ1UgNTkKKyAgICAgKi8KKyAgICBzdGF0aWMgaW50
MzJfdCB0b1RpdGxlKAorICAgICAgICAgICAgY29uc3QgY2hhciAqbG9jYWxlLCB1aW50MzJfdCBv
cHRpb25zLCBCcmVha0l0ZXJhdG9yICppdGVyLAorICAgICAgICAgICAgY29uc3QgY2hhcjE2X3Qg
KnNyYywgaW50MzJfdCBzcmNMZW5ndGgsCisgICAgICAgICAgICBjaGFyMTZfdCAqZGVzdCwgaW50
MzJfdCBkZXN0Q2FwYWNpdHksIEVkaXRzICplZGl0cywKKyAgICAgICAgICAgIFVFcnJvckNvZGUg
JmVycm9yQ29kZSk7CisKKyNlbmRpZiAgLy8gVUNPTkZJR19OT19CUkVBS19JVEVSQVRJT04KKwor
ICAgIC8qKgorICAgICAqIENhc2UtZm9sZHMgYSBVVEYtMTYgc3RyaW5nIGFuZCBvcHRpb25hbGx5
IHJlY29yZHMgZWRpdHMuCisgICAgICoKKyAgICAgKiBDYXNlIGZvbGRpbmcgaXMgbG9jYWxlLWlu
ZGVwZW5kZW50IGFuZCBub3QgY29udGV4dC1zZW5zaXRpdmUsCisgICAgICogYnV0IHRoZXJlIGlz
IGFuIG9wdGlvbiBmb3Igd2hldGhlciB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUgbWFwcGluZ3MgZm9y
IGRvdHRlZCBJCisgICAgICogYW5kIGRvdGxlc3MgaSB0aGF0IGFyZSBtYXJrZWQgd2l0aCAnVCcg
aW4gQ2FzZUZvbGRpbmcudHh0LgorICAgICAqCisgICAgICogVGhlIHJlc3VsdCBtYXkgYmUgbG9u
Z2VyIG9yIHNob3J0ZXIgdGhhbiB0aGUgb3JpZ2luYWwuCisgICAgICogVGhlIHNvdXJjZSBzdHJp
bmcgYW5kIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgbXVzdCBub3Qgb3ZlcmxhcC4KKyAgICAgKgor
ICAgICAqIEBwYXJhbSBvcHRpb25zICAgT3B0aW9ucyBiaXQgc2V0LCB1c3VhbGx5IDAuIFNlZSBV
X09NSVRfVU5DSEFOR0VEX1RFWFQsIFVfRURJVFNfTk9fUkVTRVQsCisgICAgICogICAgICAgICAg
ICAgICAgICBVX0ZPTERfQ0FTRV9ERUZBVUxULCBVX0ZPTERfQ0FTRV9FWENMVURFX1NQRUNJQUxf
SS4KKyAgICAgKiBAcGFyYW0gc3JjICAgICAgIFRoZSBvcmlnaW5hbCBzdHJpbmcuCisgICAgICog
QHBhcmFtIHNyY0xlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSBvcmlnaW5hbCBzdHJpbmcuIElmIC0x
LCB0aGVuIHNyYyBtdXN0IGJlIE5VTC10ZXJtaW5hdGVkLgorICAgICAqIEBwYXJhbSBkZXN0ICAg
ICAgQSBidWZmZXIgZm9yIHRoZSByZXN1bHQgc3RyaW5nLiBUaGUgcmVzdWx0IHdpbGwgYmUgTlVM
LXRlcm1pbmF0ZWQgaWYKKyAgICAgKiAgICAgICAgICAgICAgICAgIHRoZSBidWZmZXIgaXMgbGFy
Z2UgZW5vdWdoLgorICAgICAqICAgICAgICAgICAgICAgICAgVGhlIGNvbnRlbnRzIGlzIHVuZGVm
aW5lZCBpbiBjYXNlIG9mIGZhaWx1cmUuCisgICAgICogQHBhcmFtIGRlc3RDYXBhY2l0eSBUaGUg
c2l6ZSBvZiB0aGUgYnVmZmVyIChudW1iZXIgb2YgY2hhcjE2X3RzKS4gSWYgaXQgaXMgMCwgdGhl
bgorICAgICAqICAgICAgICAgICAgICAgICAgZGVzdCBtYXkgYmUgTlVMTCBhbmQgdGhlIGZ1bmN0
aW9uIHdpbGwgb25seSByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0CisgICAgICogICAg
ICAgICAgICAgICAgICB3aXRob3V0IHdyaXRpbmcgYW55IG9mIHRoZSByZXN1bHQgc3RyaW5nLgor
ICAgICAqIEBwYXJhbSBlZGl0cyAgICAgUmVjb3JkcyBlZGl0cyBmb3IgaW5kZXggbWFwcGluZywg
d29ya2luZyB3aXRoIHN0eWxlZCB0ZXh0LAorICAgICAqICAgICAgICAgICAgICAgICAgYW5kIGdl
dHRpbmcgb25seSBjaGFuZ2VzIChpZiBhbnkpLgorICAgICAqICAgICAgICAgICAgICAgICAgVGhl
IEVkaXRzIGNvbnRlbnRzIGlzIHVuZGVmaW5lZCBpZiBhbnkgZXJyb3Igb2NjdXJzLgorICAgICAq
ICAgICAgICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBjYWxscyBlZGl0cy0+cmVzZXQoKSBmaXJz
dCB1bmxlc3MKKyAgICAgKiAgICAgICAgICAgICAgICAgIG9wdGlvbnMgaW5jbHVkZXMgVV9FRElU
U19OT19SRVNFVC4gZWRpdHMgY2FuIGJlIE5VTEwuCisgICAgICogQHBhcmFtIGVycm9yQ29kZSBS
ZWZlcmVuY2UgdG8gYW4gaW4vb3V0IGVycm9yIGNvZGUgdmFsdWUKKyAgICAgKiAgICAgICAgICAg
ICAgICAgIHdoaWNoIG11c3Qgbm90IGluZGljYXRlIGEgZmFpbHVyZSBiZWZvcmUgdGhlIGZ1bmN0
aW9uIGNhbGwuCisgICAgICogQHJldHVybiBUaGUgbGVuZ3RoIG9mIHRoZSByZXN1bHQgc3RyaW5n
LCBpZiBzdWNjZXNzZnVsLgorICAgICAqICAgICAgICAgV2hlbiB0aGUgcmVzdWx0IHdvdWxkIGJl
IGxvbmdlciB0aGFuIGRlc3RDYXBhY2l0eSwKKyAgICAgKiAgICAgICAgIHRoZSBmdWxsIGxlbmd0
aCBpcyByZXR1cm5lZCBhbmQgYSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUiBpcyBzZXQuCisgICAg
ICoKKyAgICAgKiBAc2VlIHVfc3RyRm9sZENhc2UKKyAgICAgKiBAc3RhYmxlIElDVSA1OQorICAg
ICAqLworICAgIHN0YXRpYyBpbnQzMl90IGZvbGQoCisgICAgICAgICAgICB1aW50MzJfdCBvcHRp
b25zLAorICAgICAgICAgICAgY29uc3QgY2hhcjE2X3QgKnNyYywgaW50MzJfdCBzcmNMZW5ndGgs
CisgICAgICAgICAgICBjaGFyMTZfdCAqZGVzdCwgaW50MzJfdCBkZXN0Q2FwYWNpdHksIEVkaXRz
ICplZGl0cywKKyAgICAgICAgICAgIFVFcnJvckNvZGUgJmVycm9yQ29kZSk7CisKKyAgICAvKioK
KyAgICAgKiBMb3dlcmNhc2VzIGEgVVRGLTggc3RyaW5nIGFuZCBvcHRpb25hbGx5IHJlY29yZHMg
ZWRpdHMuCisgICAgICogQ2FzaW5nIGlzIGxvY2FsZS1kZXBlbmRlbnQgYW5kIGNvbnRleHQtc2Vu
c2l0aXZlLgorICAgICAqIFRoZSByZXN1bHQgbWF5IGJlIGxvbmdlciBvciBzaG9ydGVyIHRoYW4g
dGhlIG9yaWdpbmFsLgorICAgICAqCisgICAgICogQHBhcmFtIGxvY2FsZSAgICBUaGUgbG9jYWxl
IElELiAoIiIgPSByb290IGxvY2FsZSwgTlVMTCA9IGRlZmF1bHQgbG9jYWxlLikKKyAgICAgKiBA
cGFyYW0gb3B0aW9ucyAgIE9wdGlvbnMgYml0IHNldCwgdXN1YWxseSAwLiBTZWUgVV9PTUlUX1VO
Q0hBTkdFRF9URVhUIGFuZCBVX0VESVRTX05PX1JFU0VULgorICAgICAqIEBwYXJhbSBzcmMgICAg
ICAgVGhlIG9yaWdpbmFsIHN0cmluZy4KKyAgICAgKiBAcGFyYW0gc2luayAgICAgIEEgQnl0ZVNp
bmsgdG8gd2hpY2ggdGhlIHJlc3VsdCBzdHJpbmcgaXMgd3JpdHRlbi4KKyAgICAgKiAgICAgICAg
ICAgICAgICAgIHNpbmsuRmx1c2goKSBpcyBjYWxsZWQgYXQgdGhlIGVuZC4KKyAgICAgKiBAcGFy
YW0gZWRpdHMgICAgIFJlY29yZHMgZWRpdHMgZm9yIGluZGV4IG1hcHBpbmcsIHdvcmtpbmcgd2l0
aCBzdHlsZWQgdGV4dCwKKyAgICAgKiAgICAgICAgICAgICAgICAgIGFuZCBnZXR0aW5nIG9ubHkg
Y2hhbmdlcyAoaWYgYW55KS4KKyAgICAgKiAgICAgICAgICAgICAgICAgIFRoZSBFZGl0cyBjb250
ZW50cyBpcyB1bmRlZmluZWQgaWYgYW55IGVycm9yIG9jY3Vycy4KKyAgICAgKiAgICAgICAgICAg
ICAgICAgIFRoaXMgZnVuY3Rpb24gY2FsbHMgZWRpdHMtPnJlc2V0KCkgZmlyc3QgdW5sZXNzCisg
ICAgICogICAgICAgICAgICAgICAgICBvcHRpb25zIGluY2x1ZGVzIFVfRURJVFNfTk9fUkVTRVQu
IGVkaXRzIGNhbiBiZSBOVUxMLgorICAgICAqIEBwYXJhbSBlcnJvckNvZGUgUmVmZXJlbmNlIHRv
IGFuIGluL291dCBlcnJvciBjb2RlIHZhbHVlCisgICAgICogICAgICAgICAgICAgICAgICB3aGlj
aCBtdXN0IG5vdCBpbmRpY2F0ZSBhIGZhaWx1cmUgYmVmb3JlIHRoZSBmdW5jdGlvbiBjYWxsLgor
ICAgICAqCisgICAgICogQHNlZSB1Y2FzZW1hcF91dGY4VG9Mb3dlcgorICAgICAqIEBzdGFibGUg
SUNVIDYwCisgICAgICovCisgICAgc3RhdGljIHZvaWQgdXRmOFRvTG93ZXIoCisgICAgICAgICAg
ICBjb25zdCBjaGFyICpsb2NhbGUsIHVpbnQzMl90IG9wdGlvbnMsCisgICAgICAgICAgICBTdHJp
bmdQaWVjZSBzcmMsIEJ5dGVTaW5rICZzaW5rLCBFZGl0cyAqZWRpdHMsCisgICAgICAgICAgICBV
RXJyb3JDb2RlICZlcnJvckNvZGUpOworCisgICAgLyoqCisgICAgICogVXBwZXJjYXNlcyBhIFVU
Ri04IHN0cmluZyBhbmQgb3B0aW9uYWxseSByZWNvcmRzIGVkaXRzLgorICAgICAqIENhc2luZyBp
cyBsb2NhbGUtZGVwZW5kZW50IGFuZCBjb250ZXh0LXNlbnNpdGl2ZS4KKyAgICAgKiBUaGUgcmVz
dWx0IG1heSBiZSBsb25nZXIgb3Igc2hvcnRlciB0aGFuIHRoZSBvcmlnaW5hbC4KKyAgICAgKgor
ICAgICAqIEBwYXJhbSBsb2NhbGUgICAgVGhlIGxvY2FsZSBJRC4gKCIiID0gcm9vdCBsb2NhbGUs
IE5VTEwgPSBkZWZhdWx0IGxvY2FsZS4pCisgICAgICogQHBhcmFtIG9wdGlvbnMgICBPcHRpb25z
IGJpdCBzZXQsIHVzdWFsbHkgMC4gU2VlIFVfT01JVF9VTkNIQU5HRURfVEVYVCBhbmQgVV9FRElU
U19OT19SRVNFVC4KKyAgICAgKiBAcGFyYW0gc3JjICAgICAgIFRoZSBvcmlnaW5hbCBzdHJpbmcu
CisgICAgICogQHBhcmFtIHNpbmsgICAgICBBIEJ5dGVTaW5rIHRvIHdoaWNoIHRoZSByZXN1bHQg
c3RyaW5nIGlzIHdyaXR0ZW4uCisgICAgICogICAgICAgICAgICAgICAgICBzaW5rLkZsdXNoKCkg
aXMgY2FsbGVkIGF0IHRoZSBlbmQuCisgICAgICogQHBhcmFtIGVkaXRzICAgICBSZWNvcmRzIGVk
aXRzIGZvciBpbmRleCBtYXBwaW5nLCB3b3JraW5nIHdpdGggc3R5bGVkIHRleHQsCisgICAgICog
ICAgICAgICAgICAgICAgICBhbmQgZ2V0dGluZyBvbmx5IGNoYW5nZXMgKGlmIGFueSkuCisgICAg
ICogICAgICAgICAgICAgICAgICBUaGUgRWRpdHMgY29udGVudHMgaXMgdW5kZWZpbmVkIGlmIGFu
eSBlcnJvciBvY2N1cnMuCisgICAgICogICAgICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGNh
bGxzIGVkaXRzLT5yZXNldCgpIGZpcnN0IHVubGVzcworICAgICAqICAgICAgICAgICAgICAgICAg
b3B0aW9ucyBpbmNsdWRlcyBVX0VESVRTX05PX1JFU0VULiBlZGl0cyBjYW4gYmUgTlVMTC4KKyAg
ICAgKiBAcGFyYW0gZXJyb3JDb2RlIFJlZmVyZW5jZSB0byBhbiBpbi9vdXQgZXJyb3IgY29kZSB2
YWx1ZQorICAgICAqICAgICAgICAgICAgICAgICAgd2hpY2ggbXVzdCBub3QgaW5kaWNhdGUgYSBm
YWlsdXJlIGJlZm9yZSB0aGUgZnVuY3Rpb24gY2FsbC4KKyAgICAgKgorICAgICAqIEBzZWUgdWNh
c2VtYXBfdXRmOFRvVXBwZXIKKyAgICAgKiBAc3RhYmxlIElDVSA2MAorICAgICAqLworICAgIHN0
YXRpYyB2b2lkIHV0ZjhUb1VwcGVyKAorICAgICAgICAgICAgY29uc3QgY2hhciAqbG9jYWxlLCB1
aW50MzJfdCBvcHRpb25zLAorICAgICAgICAgICAgU3RyaW5nUGllY2Ugc3JjLCBCeXRlU2luayAm
c2luaywgRWRpdHMgKmVkaXRzLAorICAgICAgICAgICAgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsK
KworI2lmICFVQ09ORklHX05PX0JSRUFLX0lURVJBVElPTgorCisgICAgLyoqCisgICAgICogVGl0
bGVjYXNlcyBhIFVURi04IHN0cmluZyBhbmQgb3B0aW9uYWxseSByZWNvcmRzIGVkaXRzLgorICAg
ICAqIENhc2luZyBpcyBsb2NhbGUtZGVwZW5kZW50IGFuZCBjb250ZXh0LXNlbnNpdGl2ZS4KKyAg
ICAgKiBUaGUgcmVzdWx0IG1heSBiZSBsb25nZXIgb3Igc2hvcnRlciB0aGFuIHRoZSBvcmlnaW5h
bC4KKyAgICAgKgorICAgICAqIFRpdGxlY2FzaW5nIHVzZXMgYSBicmVhayBpdGVyYXRvciB0byBm
aW5kIHRoZSBmaXJzdCBjaGFyYWN0ZXJzIG9mIHdvcmRzCisgICAgICogdGhhdCBhcmUgdG8gYmUg
dGl0bGVjYXNlZC4gSXQgdGl0bGVjYXNlcyB0aG9zZSBjaGFyYWN0ZXJzIGFuZCBsb3dlcmNhc2Vz
CisgICAgICogYWxsIG90aGVycy4gKFRoaXMgY2FuIGJlIG1vZGlmaWVkIHdpdGggb3B0aW9ucyBi
aXRzLikKKyAgICAgKgorICAgICAqIEBwYXJhbSBsb2NhbGUgICAgVGhlIGxvY2FsZSBJRC4gKCIi
ID0gcm9vdCBsb2NhbGUsIE5VTEwgPSBkZWZhdWx0IGxvY2FsZS4pCisgICAgICogQHBhcmFtIG9w
dGlvbnMgICBPcHRpb25zIGJpdCBzZXQsIHVzdWFsbHkgMC4gU2VlIFVfT01JVF9VTkNIQU5HRURf
VEVYVCwgVV9FRElUU19OT19SRVNFVCwKKyAgICAgKiAgICAgICAgICAgICAgICAgIFVfVElUTEVD
QVNFX05PX0xPV0VSQ0FTRSwKKyAgICAgKiAgICAgICAgICAgICAgICAgIFVfVElUTEVDQVNFX05P
X0JSRUFLX0FESlVTVE1FTlQsIFVfVElUTEVDQVNFX0FESlVTVF9UT19DQVNFRCwKKyAgICAgKiAg
ICAgICAgICAgICAgICAgIFVfVElUTEVDQVNFX1dIT0xFX1NUUklORywgVV9USVRMRUNBU0VfU0VO
VEVOQ0VTLgorICAgICAqIEBwYXJhbSBpdGVyICAgICAgQSBicmVhayBpdGVyYXRvciB0byBmaW5k
IHRoZSBmaXJzdCBjaGFyYWN0ZXJzIG9mIHdvcmRzIHRoYXQgYXJlIHRvIGJlIHRpdGxlY2FzZWQu
CisgICAgICogICAgICAgICAgICAgICAgICBJdCBpcyBzZXQgdG8gdGhlIHNvdXJjZSBzdHJpbmcg
KHNldFVUZXh0KCkpCisgICAgICogICAgICAgICAgICAgICAgICBhbmQgdXNlZCBvbmUgb3IgbW9y
ZSB0aW1lcyBmb3IgaXRlcmF0aW9uIChmaXJzdCgpIGFuZCBuZXh0KCkpLgorICAgICAqICAgICAg
ICAgICAgICAgICAgSWYgTlVMTCwgdGhlbiBhIHdvcmQgYnJlYWsgaXRlcmF0b3IgZm9yIHRoZSBs
b2NhbGUgaXMgdXNlZAorICAgICAqICAgICAgICAgICAgICAgICAgKG9yIHNvbWV0aGluZyBlcXVp
dmFsZW50KS4KKyAgICAgKiBAcGFyYW0gc3JjICAgICAgIFRoZSBvcmlnaW5hbCBzdHJpbmcuCisg
ICAgICogQHBhcmFtIHNpbmsgICAgICBBIEJ5dGVTaW5rIHRvIHdoaWNoIHRoZSByZXN1bHQgc3Ry
aW5nIGlzIHdyaXR0ZW4uCisgICAgICogICAgICAgICAgICAgICAgICBzaW5rLkZsdXNoKCkgaXMg
Y2FsbGVkIGF0IHRoZSBlbmQuCisgICAgICogQHBhcmFtIGVkaXRzICAgICBSZWNvcmRzIGVkaXRz
IGZvciBpbmRleCBtYXBwaW5nLCB3b3JraW5nIHdpdGggc3R5bGVkIHRleHQsCisgICAgICogICAg
ICAgICAgICAgICAgICBhbmQgZ2V0dGluZyBvbmx5IGNoYW5nZXMgKGlmIGFueSkuCisgICAgICog
ICAgICAgICAgICAgICAgICBUaGUgRWRpdHMgY29udGVudHMgaXMgdW5kZWZpbmVkIGlmIGFueSBl
cnJvciBvY2N1cnMuCisgICAgICogICAgICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGNhbGxz
IGVkaXRzLT5yZXNldCgpIGZpcnN0IHVubGVzcworICAgICAqICAgICAgICAgICAgICAgICAgb3B0
aW9ucyBpbmNsdWRlcyBVX0VESVRTX05PX1JFU0VULiBlZGl0cyBjYW4gYmUgTlVMTC4KKyAgICAg
KiBAcGFyYW0gZXJyb3JDb2RlIFJlZmVyZW5jZSB0byBhbiBpbi9vdXQgZXJyb3IgY29kZSB2YWx1
ZQorICAgICAqICAgICAgICAgICAgICAgICAgd2hpY2ggbXVzdCBub3QgaW5kaWNhdGUgYSBmYWls
dXJlIGJlZm9yZSB0aGUgZnVuY3Rpb24gY2FsbC4KKyAgICAgKgorICAgICAqIEBzZWUgdWNhc2Vt
YXBfdXRmOFRvVGl0bGUKKyAgICAgKiBAc3RhYmxlIElDVSA2MAorICAgICAqLworICAgIHN0YXRp
YyB2b2lkIHV0ZjhUb1RpdGxlKAorICAgICAgICAgICAgY29uc3QgY2hhciAqbG9jYWxlLCB1aW50
MzJfdCBvcHRpb25zLCBCcmVha0l0ZXJhdG9yICppdGVyLAorICAgICAgICAgICAgU3RyaW5nUGll
Y2Ugc3JjLCBCeXRlU2luayAmc2luaywgRWRpdHMgKmVkaXRzLAorICAgICAgICAgICAgVUVycm9y
Q29kZSAmZXJyb3JDb2RlKTsKKworI2VuZGlmICAvLyBVQ09ORklHX05PX0JSRUFLX0lURVJBVElP
TgorCisgICAgLyoqCisgICAgICogQ2FzZS1mb2xkcyBhIFVURi04IHN0cmluZyBhbmQgb3B0aW9u
YWxseSByZWNvcmRzIGVkaXRzLgorICAgICAqCisgICAgICogQ2FzZSBmb2xkaW5nIGlzIGxvY2Fs
ZS1pbmRlcGVuZGVudCBhbmQgbm90IGNvbnRleHQtc2Vuc2l0aXZlLAorICAgICAqIGJ1dCB0aGVy
ZSBpcyBhbiBvcHRpb24gZm9yIHdoZXRoZXIgdG8gaW5jbHVkZSBvciBleGNsdWRlIG1hcHBpbmdz
IGZvciBkb3R0ZWQgSQorICAgICAqIGFuZCBkb3RsZXNzIGkgdGhhdCBhcmUgbWFya2VkIHdpdGgg
J1QnIGluIENhc2VGb2xkaW5nLnR4dC4KKyAgICAgKgorICAgICAqIFRoZSByZXN1bHQgbWF5IGJl
IGxvbmdlciBvciBzaG9ydGVyIHRoYW4gdGhlIG9yaWdpbmFsLgorICAgICAqCisgICAgICogQHBh
cmFtIG9wdGlvbnMgICBPcHRpb25zIGJpdCBzZXQsIHVzdWFsbHkgMC4gU2VlIFVfT01JVF9VTkNI
QU5HRURfVEVYVCBhbmQgVV9FRElUU19OT19SRVNFVC4KKyAgICAgKiBAcGFyYW0gc3JjICAgICAg
IFRoZSBvcmlnaW5hbCBzdHJpbmcuCisgICAgICogQHBhcmFtIHNpbmsgICAgICBBIEJ5dGVTaW5r
IHRvIHdoaWNoIHRoZSByZXN1bHQgc3RyaW5nIGlzIHdyaXR0ZW4uCisgICAgICogICAgICAgICAg
ICAgICAgICBzaW5rLkZsdXNoKCkgaXMgY2FsbGVkIGF0IHRoZSBlbmQuCisgICAgICogQHBhcmFt
IGVkaXRzICAgICBSZWNvcmRzIGVkaXRzIGZvciBpbmRleCBtYXBwaW5nLCB3b3JraW5nIHdpdGgg
c3R5bGVkIHRleHQsCisgICAgICogICAgICAgICAgICAgICAgICBhbmQgZ2V0dGluZyBvbmx5IGNo
YW5nZXMgKGlmIGFueSkuCisgICAgICogICAgICAgICAgICAgICAgICBUaGUgRWRpdHMgY29udGVu
dHMgaXMgdW5kZWZpbmVkIGlmIGFueSBlcnJvciBvY2N1cnMuCisgICAgICogICAgICAgICAgICAg
ICAgICBUaGlzIGZ1bmN0aW9uIGNhbGxzIGVkaXRzLT5yZXNldCgpIGZpcnN0IHVubGVzcworICAg
ICAqICAgICAgICAgICAgICAgICAgb3B0aW9ucyBpbmNsdWRlcyBVX0VESVRTX05PX1JFU0VULiBl
ZGl0cyBjYW4gYmUgTlVMTC4KKyAgICAgKiBAcGFyYW0gZXJyb3JDb2RlIFJlZmVyZW5jZSB0byBh
biBpbi9vdXQgZXJyb3IgY29kZSB2YWx1ZQorICAgICAqICAgICAgICAgICAgICAgICAgd2hpY2gg
bXVzdCBub3QgaW5kaWNhdGUgYSBmYWlsdXJlIGJlZm9yZSB0aGUgZnVuY3Rpb24gY2FsbC4KKyAg
ICAgKgorICAgICAqIEBzZWUgdWNhc2VtYXBfdXRmOEZvbGRDYXNlCisgICAgICogQHN0YWJsZSBJ
Q1UgNjAKKyAgICAgKi8KKyAgICBzdGF0aWMgdm9pZCB1dGY4Rm9sZCgKKyAgICAgICAgICAgIHVp
bnQzMl90IG9wdGlvbnMsCisgICAgICAgICAgICBTdHJpbmdQaWVjZSBzcmMsIEJ5dGVTaW5rICZz
aW5rLCBFZGl0cyAqZWRpdHMsCisgICAgICAgICAgICBVRXJyb3JDb2RlICZlcnJvckNvZGUpOwor
CisgICAgLyoqCisgICAgICogTG93ZXJjYXNlcyBhIFVURi04IHN0cmluZyBhbmQgb3B0aW9uYWxs
eSByZWNvcmRzIGVkaXRzLgorICAgICAqIENhc2luZyBpcyBsb2NhbGUtZGVwZW5kZW50IGFuZCBj
b250ZXh0LXNlbnNpdGl2ZS4KKyAgICAgKiBUaGUgcmVzdWx0IG1heSBiZSBsb25nZXIgb3Igc2hv
cnRlciB0aGFuIHRoZSBvcmlnaW5hbC4KKyAgICAgKiBUaGUgc291cmNlIHN0cmluZyBhbmQgdGhl
IGRlc3RpbmF0aW9uIGJ1ZmZlciBtdXN0IG5vdCBvdmVybGFwLgorICAgICAqCisgICAgICogQHBh
cmFtIGxvY2FsZSAgICBUaGUgbG9jYWxlIElELiAoIiIgPSByb290IGxvY2FsZSwgTlVMTCA9IGRl
ZmF1bHQgbG9jYWxlLikKKyAgICAgKiBAcGFyYW0gb3B0aW9ucyAgIE9wdGlvbnMgYml0IHNldCwg
dXN1YWxseSAwLiBTZWUgVV9PTUlUX1VOQ0hBTkdFRF9URVhUIGFuZCBVX0VESVRTX05PX1JFU0VU
LgorICAgICAqIEBwYXJhbSBzcmMgICAgICAgVGhlIG9yaWdpbmFsIHN0cmluZy4KKyAgICAgKiBA
cGFyYW0gc3JjTGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIG9yaWdpbmFsIHN0cmluZy4gSWYgLTEs
IHRoZW4gc3JjIG11c3QgYmUgTlVMLXRlcm1pbmF0ZWQuCisgICAgICogQHBhcmFtIGRlc3QgICAg
ICBBIGJ1ZmZlciBmb3IgdGhlIHJlc3VsdCBzdHJpbmcuIFRoZSByZXN1bHQgd2lsbCBiZSBOVUwt
dGVybWluYXRlZCBpZgorICAgICAqICAgICAgICAgICAgICAgICAgdGhlIGJ1ZmZlciBpcyBsYXJn
ZSBlbm91Z2guCisgICAgICogICAgICAgICAgICAgICAgICBUaGUgY29udGVudHMgaXMgdW5kZWZp
bmVkIGluIGNhc2Ugb2YgZmFpbHVyZS4KKyAgICAgKiBAcGFyYW0gZGVzdENhcGFjaXR5IFRoZSBz
aXplIG9mIHRoZSBidWZmZXIgKG51bWJlciBvZiBieXRlcykuIElmIGl0IGlzIDAsIHRoZW4KKyAg
ICAgKiAgICAgICAgICAgICAgICAgIGRlc3QgbWF5IGJlIE5VTEwgYW5kIHRoZSBmdW5jdGlvbiB3
aWxsIG9ubHkgcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdAorICAgICAqICAgICAgICAg
ICAgICAgICAgd2l0aG91dCB3cml0aW5nIGFueSBvZiB0aGUgcmVzdWx0IHN0cmluZy4KKyAgICAg
KiBAcGFyYW0gZWRpdHMgICAgIFJlY29yZHMgZWRpdHMgZm9yIGluZGV4IG1hcHBpbmcsIHdvcmtp
bmcgd2l0aCBzdHlsZWQgdGV4dCwKKyAgICAgKiAgICAgICAgICAgICAgICAgIGFuZCBnZXR0aW5n
IG9ubHkgY2hhbmdlcyAoaWYgYW55KS4KKyAgICAgKiAgICAgICAgICAgICAgICAgIFRoZSBFZGl0
cyBjb250ZW50cyBpcyB1bmRlZmluZWQgaWYgYW55IGVycm9yIG9jY3Vycy4KKyAgICAgKiAgICAg
ICAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gY2FsbHMgZWRpdHMtPnJlc2V0KCkgZmlyc3QgdW5s
ZXNzCisgICAgICogICAgICAgICAgICAgICAgICBvcHRpb25zIGluY2x1ZGVzIFVfRURJVFNfTk9f
UkVTRVQuIGVkaXRzIGNhbiBiZSBOVUxMLgorICAgICAqIEBwYXJhbSBlcnJvckNvZGUgUmVmZXJl
bmNlIHRvIGFuIGluL291dCBlcnJvciBjb2RlIHZhbHVlCisgICAgICogICAgICAgICAgICAgICAg
ICB3aGljaCBtdXN0IG5vdCBpbmRpY2F0ZSBhIGZhaWx1cmUgYmVmb3JlIHRoZSBmdW5jdGlvbiBj
YWxsLgorICAgICAqIEByZXR1cm4gVGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0IHN0cmluZywgaWYg
c3VjY2Vzc2Z1bC4KKyAgICAgKiAgICAgICAgIFdoZW4gdGhlIHJlc3VsdCB3b3VsZCBiZSBsb25n
ZXIgdGhhbiBkZXN0Q2FwYWNpdHksCisgICAgICogICAgICAgICB0aGUgZnVsbCBsZW5ndGggaXMg
cmV0dXJuZWQgYW5kIGEgVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IgaXMgc2V0LgorICAgICAqCisg
ICAgICogQHNlZSB1Y2FzZW1hcF91dGY4VG9Mb3dlcgorICAgICAqIEBzdGFibGUgSUNVIDU5Cisg
ICAgICovCisgICAgc3RhdGljIGludDMyX3QgdXRmOFRvTG93ZXIoCisgICAgICAgICAgICBjb25z
dCBjaGFyICpsb2NhbGUsIHVpbnQzMl90IG9wdGlvbnMsCisgICAgICAgICAgICBjb25zdCBjaGFy
ICpzcmMsIGludDMyX3Qgc3JjTGVuZ3RoLAorICAgICAgICAgICAgY2hhciAqZGVzdCwgaW50MzJf
dCBkZXN0Q2FwYWNpdHksIEVkaXRzICplZGl0cywKKyAgICAgICAgICAgIFVFcnJvckNvZGUgJmVy
cm9yQ29kZSk7CisKKyAgICAvKioKKyAgICAgKiBVcHBlcmNhc2VzIGEgVVRGLTggc3RyaW5nIGFu
ZCBvcHRpb25hbGx5IHJlY29yZHMgZWRpdHMuCisgICAgICogQ2FzaW5nIGlzIGxvY2FsZS1kZXBl
bmRlbnQgYW5kIGNvbnRleHQtc2Vuc2l0aXZlLgorICAgICAqIFRoZSByZXN1bHQgbWF5IGJlIGxv
bmdlciBvciBzaG9ydGVyIHRoYW4gdGhlIG9yaWdpbmFsLgorICAgICAqIFRoZSBzb3VyY2Ugc3Ry
aW5nIGFuZCB0aGUgZGVzdGluYXRpb24gYnVmZmVyIG11c3Qgbm90IG92ZXJsYXAuCisgICAgICoK
KyAgICAgKiBAcGFyYW0gbG9jYWxlICAgIFRoZSBsb2NhbGUgSUQuICgiIiA9IHJvb3QgbG9jYWxl
LCBOVUxMID0gZGVmYXVsdCBsb2NhbGUuKQorICAgICAqIEBwYXJhbSBvcHRpb25zICAgT3B0aW9u
cyBiaXQgc2V0LCB1c3VhbGx5IDAuIFNlZSBVX09NSVRfVU5DSEFOR0VEX1RFWFQgYW5kIFVfRURJ
VFNfTk9fUkVTRVQuCisgICAgICogQHBhcmFtIHNyYyAgICAgICBUaGUgb3JpZ2luYWwgc3RyaW5n
LgorICAgICAqIEBwYXJhbSBzcmNMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgb3JpZ2luYWwgc3Ry
aW5nLiBJZiAtMSwgdGhlbiBzcmMgbXVzdCBiZSBOVUwtdGVybWluYXRlZC4KKyAgICAgKiBAcGFy
YW0gZGVzdCAgICAgIEEgYnVmZmVyIGZvciB0aGUgcmVzdWx0IHN0cmluZy4gVGhlIHJlc3VsdCB3
aWxsIGJlIE5VTC10ZXJtaW5hdGVkIGlmCisgICAgICogICAgICAgICAgICAgICAgICB0aGUgYnVm
ZmVyIGlzIGxhcmdlIGVub3VnaC4KKyAgICAgKiAgICAgICAgICAgICAgICAgIFRoZSBjb250ZW50
cyBpcyB1bmRlZmluZWQgaW4gY2FzZSBvZiBmYWlsdXJlLgorICAgICAqIEBwYXJhbSBkZXN0Q2Fw
YWNpdHkgVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAobnVtYmVyIG9mIGJ5dGVzKS4gSWYgaXQgaXMg
MCwgdGhlbgorICAgICAqICAgICAgICAgICAgICAgICAgZGVzdCBtYXkgYmUgTlVMTCBhbmQgdGhl
IGZ1bmN0aW9uIHdpbGwgb25seSByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0CisgICAg
ICogICAgICAgICAgICAgICAgICB3aXRob3V0IHdyaXRpbmcgYW55IG9mIHRoZSByZXN1bHQgc3Ry
aW5nLgorICAgICAqIEBwYXJhbSBlZGl0cyAgICAgUmVjb3JkcyBlZGl0cyBmb3IgaW5kZXggbWFw
cGluZywgd29ya2luZyB3aXRoIHN0eWxlZCB0ZXh0LAorICAgICAqICAgICAgICAgICAgICAgICAg
YW5kIGdldHRpbmcgb25seSBjaGFuZ2VzIChpZiBhbnkpLgorICAgICAqICAgICAgICAgICAgICAg
ICAgVGhlIEVkaXRzIGNvbnRlbnRzIGlzIHVuZGVmaW5lZCBpZiBhbnkgZXJyb3Igb2NjdXJzLgor
ICAgICAqICAgICAgICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBjYWxscyBlZGl0cy0+cmVzZXQo
KSBmaXJzdCB1bmxlc3MKKyAgICAgKiAgICAgICAgICAgICAgICAgIG9wdGlvbnMgaW5jbHVkZXMg
VV9FRElUU19OT19SRVNFVC4gZWRpdHMgY2FuIGJlIE5VTEwuCisgICAgICogQHBhcmFtIGVycm9y
Q29kZSBSZWZlcmVuY2UgdG8gYW4gaW4vb3V0IGVycm9yIGNvZGUgdmFsdWUKKyAgICAgKiAgICAg
ICAgICAgICAgICAgIHdoaWNoIG11c3Qgbm90IGluZGljYXRlIGEgZmFpbHVyZSBiZWZvcmUgdGhl
IGZ1bmN0aW9uIGNhbGwuCisgICAgICogQHJldHVybiBUaGUgbGVuZ3RoIG9mIHRoZSByZXN1bHQg
c3RyaW5nLCBpZiBzdWNjZXNzZnVsLgorICAgICAqICAgICAgICAgV2hlbiB0aGUgcmVzdWx0IHdv
dWxkIGJlIGxvbmdlciB0aGFuIGRlc3RDYXBhY2l0eSwKKyAgICAgKiAgICAgICAgIHRoZSBmdWxs
IGxlbmd0aCBpcyByZXR1cm5lZCBhbmQgYSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUiBpcyBzZXQu
CisgICAgICoKKyAgICAgKiBAc2VlIHVjYXNlbWFwX3V0ZjhUb1VwcGVyCisgICAgICogQHN0YWJs
ZSBJQ1UgNTkKKyAgICAgKi8KKyAgICBzdGF0aWMgaW50MzJfdCB1dGY4VG9VcHBlcigKKyAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKmxvY2FsZSwgdWludDMyX3Qgb3B0aW9ucywKKyAgICAgICAgICAg
IGNvbnN0IGNoYXIgKnNyYywgaW50MzJfdCBzcmNMZW5ndGgsCisgICAgICAgICAgICBjaGFyICpk
ZXN0LCBpbnQzMl90IGRlc3RDYXBhY2l0eSwgRWRpdHMgKmVkaXRzLAorICAgICAgICAgICAgVUVy
cm9yQ29kZSAmZXJyb3JDb2RlKTsKKworI2lmICFVQ09ORklHX05PX0JSRUFLX0lURVJBVElPTgor
CisgICAgLyoqCisgICAgICogVGl0bGVjYXNlcyBhIFVURi04IHN0cmluZyBhbmQgb3B0aW9uYWxs
eSByZWNvcmRzIGVkaXRzLgorICAgICAqIENhc2luZyBpcyBsb2NhbGUtZGVwZW5kZW50IGFuZCBj
b250ZXh0LXNlbnNpdGl2ZS4KKyAgICAgKiBUaGUgcmVzdWx0IG1heSBiZSBsb25nZXIgb3Igc2hv
cnRlciB0aGFuIHRoZSBvcmlnaW5hbC4KKyAgICAgKiBUaGUgc291cmNlIHN0cmluZyBhbmQgdGhl
IGRlc3RpbmF0aW9uIGJ1ZmZlciBtdXN0IG5vdCBvdmVybGFwLgorICAgICAqCisgICAgICogVGl0
bGVjYXNpbmcgdXNlcyBhIGJyZWFrIGl0ZXJhdG9yIHRvIGZpbmQgdGhlIGZpcnN0IGNoYXJhY3Rl
cnMgb2Ygd29yZHMKKyAgICAgKiB0aGF0IGFyZSB0byBiZSB0aXRsZWNhc2VkLiBJdCB0aXRsZWNh
c2VzIHRob3NlIGNoYXJhY3RlcnMgYW5kIGxvd2VyY2FzZXMKKyAgICAgKiBhbGwgb3RoZXJzLiAo
VGhpcyBjYW4gYmUgbW9kaWZpZWQgd2l0aCBvcHRpb25zIGJpdHMuKQorICAgICAqCisgICAgICog
QHBhcmFtIGxvY2FsZSAgICBUaGUgbG9jYWxlIElELiAoIiIgPSByb290IGxvY2FsZSwgTlVMTCA9
IGRlZmF1bHQgbG9jYWxlLikKKyAgICAgKiBAcGFyYW0gb3B0aW9ucyAgIE9wdGlvbnMgYml0IHNl
dCwgdXN1YWxseSAwLiBTZWUgVV9PTUlUX1VOQ0hBTkdFRF9URVhULCBVX0VESVRTX05PX1JFU0VU
LAorICAgICAqICAgICAgICAgICAgICAgICAgVV9USVRMRUNBU0VfTk9fTE9XRVJDQVNFLAorICAg
ICAqICAgICAgICAgICAgICAgICAgVV9USVRMRUNBU0VfTk9fQlJFQUtfQURKVVNUTUVOVCwgVV9U
SVRMRUNBU0VfQURKVVNUX1RPX0NBU0VELAorICAgICAqICAgICAgICAgICAgICAgICAgVV9USVRM
RUNBU0VfV0hPTEVfU1RSSU5HLCBVX1RJVExFQ0FTRV9TRU5URU5DRVMuCisgICAgICogQHBhcmFt
IGl0ZXIgICAgICBBIGJyZWFrIGl0ZXJhdG9yIHRvIGZpbmQgdGhlIGZpcnN0IGNoYXJhY3RlcnMg
b2Ygd29yZHMgdGhhdCBhcmUgdG8gYmUgdGl0bGVjYXNlZC4KKyAgICAgKiAgICAgICAgICAgICAg
ICAgIEl0IGlzIHNldCB0byB0aGUgc291cmNlIHN0cmluZyAoc2V0VVRleHQoKSkKKyAgICAgKiAg
ICAgICAgICAgICAgICAgIGFuZCB1c2VkIG9uZSBvciBtb3JlIHRpbWVzIGZvciBpdGVyYXRpb24g
KGZpcnN0KCkgYW5kIG5leHQoKSkuCisgICAgICogICAgICAgICAgICAgICAgICBJZiBOVUxMLCB0
aGVuIGEgd29yZCBicmVhayBpdGVyYXRvciBmb3IgdGhlIGxvY2FsZSBpcyB1c2VkCisgICAgICog
ICAgICAgICAgICAgICAgICAob3Igc29tZXRoaW5nIGVxdWl2YWxlbnQpLgorICAgICAqIEBwYXJh
bSBzcmMgICAgICAgVGhlIG9yaWdpbmFsIHN0cmluZy4KKyAgICAgKiBAcGFyYW0gc3JjTGVuZ3Ro
IFRoZSBsZW5ndGggb2YgdGhlIG9yaWdpbmFsIHN0cmluZy4gSWYgLTEsIHRoZW4gc3JjIG11c3Qg
YmUgTlVMLXRlcm1pbmF0ZWQuCisgICAgICogQHBhcmFtIGRlc3QgICAgICBBIGJ1ZmZlciBmb3Ig
dGhlIHJlc3VsdCBzdHJpbmcuIFRoZSByZXN1bHQgd2lsbCBiZSBOVUwtdGVybWluYXRlZCBpZgor
ICAgICAqICAgICAgICAgICAgICAgICAgdGhlIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2guCisgICAg
ICogICAgICAgICAgICAgICAgICBUaGUgY29udGVudHMgaXMgdW5kZWZpbmVkIGluIGNhc2Ugb2Yg
ZmFpbHVyZS4KKyAgICAgKiBAcGFyYW0gZGVzdENhcGFjaXR5IFRoZSBzaXplIG9mIHRoZSBidWZm
ZXIgKG51bWJlciBvZiBieXRlcykuIElmIGl0IGlzIDAsIHRoZW4KKyAgICAgKiAgICAgICAgICAg
ICAgICAgIGRlc3QgbWF5IGJlIE5VTEwgYW5kIHRoZSBmdW5jdGlvbiB3aWxsIG9ubHkgcmV0dXJu
IHRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdAorICAgICAqICAgICAgICAgICAgICAgICAgd2l0aG91
dCB3cml0aW5nIGFueSBvZiB0aGUgcmVzdWx0IHN0cmluZy4KKyAgICAgKiBAcGFyYW0gZWRpdHMg
ICAgIFJlY29yZHMgZWRpdHMgZm9yIGluZGV4IG1hcHBpbmcsIHdvcmtpbmcgd2l0aCBzdHlsZWQg
dGV4dCwKKyAgICAgKiAgICAgICAgICAgICAgICAgIGFuZCBnZXR0aW5nIG9ubHkgY2hhbmdlcyAo
aWYgYW55KS4KKyAgICAgKiAgICAgICAgICAgICAgICAgIFRoZSBFZGl0cyBjb250ZW50cyBpcyB1
bmRlZmluZWQgaWYgYW55IGVycm9yIG9jY3Vycy4KKyAgICAgKiAgICAgICAgICAgICAgICAgIFRo
aXMgZnVuY3Rpb24gY2FsbHMgZWRpdHMtPnJlc2V0KCkgZmlyc3QgdW5sZXNzCisgICAgICogICAg
ICAgICAgICAgICAgICBvcHRpb25zIGluY2x1ZGVzIFVfRURJVFNfTk9fUkVTRVQuIGVkaXRzIGNh
biBiZSBOVUxMLgorICAgICAqIEBwYXJhbSBlcnJvckNvZGUgUmVmZXJlbmNlIHRvIGFuIGluL291
dCBlcnJvciBjb2RlIHZhbHVlCisgICAgICogICAgICAgICAgICAgICAgICB3aGljaCBtdXN0IG5v
dCBpbmRpY2F0ZSBhIGZhaWx1cmUgYmVmb3JlIHRoZSBmdW5jdGlvbiBjYWxsLgorICAgICAqIEBy
ZXR1cm4gVGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0IHN0cmluZywgaWYgc3VjY2Vzc2Z1bC4KKyAg
ICAgKiAgICAgICAgIFdoZW4gdGhlIHJlc3VsdCB3b3VsZCBiZSBsb25nZXIgdGhhbiBkZXN0Q2Fw
YWNpdHksCisgICAgICogICAgICAgICB0aGUgZnVsbCBsZW5ndGggaXMgcmV0dXJuZWQgYW5kIGEg
VV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IgaXMgc2V0LgorICAgICAqCisgICAgICogQHNlZSB1Y2Fz
ZW1hcF91dGY4VG9UaXRsZQorICAgICAqIEBzdGFibGUgSUNVIDU5CisgICAgICovCisgICAgc3Rh
dGljIGludDMyX3QgdXRmOFRvVGl0bGUoCisgICAgICAgICAgICBjb25zdCBjaGFyICpsb2NhbGUs
IHVpbnQzMl90IG9wdGlvbnMsIEJyZWFrSXRlcmF0b3IgKml0ZXIsCisgICAgICAgICAgICBjb25z
dCBjaGFyICpzcmMsIGludDMyX3Qgc3JjTGVuZ3RoLAorICAgICAgICAgICAgY2hhciAqZGVzdCwg
aW50MzJfdCBkZXN0Q2FwYWNpdHksIEVkaXRzICplZGl0cywKKyAgICAgICAgICAgIFVFcnJvckNv
ZGUgJmVycm9yQ29kZSk7CisKKyNlbmRpZiAgLy8gVUNPTkZJR19OT19CUkVBS19JVEVSQVRJT04K
KworICAgIC8qKgorICAgICAqIENhc2UtZm9sZHMgYSBVVEYtOCBzdHJpbmcgYW5kIG9wdGlvbmFs
bHkgcmVjb3JkcyBlZGl0cy4KKyAgICAgKgorICAgICAqIENhc2UgZm9sZGluZyBpcyBsb2NhbGUt
aW5kZXBlbmRlbnQgYW5kIG5vdCBjb250ZXh0LXNlbnNpdGl2ZSwKKyAgICAgKiBidXQgdGhlcmUg
aXMgYW4gb3B0aW9uIGZvciB3aGV0aGVyIHRvIGluY2x1ZGUgb3IgZXhjbHVkZSBtYXBwaW5ncyBm
b3IgZG90dGVkIEkKKyAgICAgKiBhbmQgZG90bGVzcyBpIHRoYXQgYXJlIG1hcmtlZCB3aXRoICdU
JyBpbiBDYXNlRm9sZGluZy50eHQuCisgICAgICoKKyAgICAgKiBUaGUgcmVzdWx0IG1heSBiZSBs
b25nZXIgb3Igc2hvcnRlciB0aGFuIHRoZSBvcmlnaW5hbC4KKyAgICAgKiBUaGUgc291cmNlIHN0
cmluZyBhbmQgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBtdXN0IG5vdCBvdmVybGFwLgorICAgICAq
CisgICAgICogQHBhcmFtIG9wdGlvbnMgICBPcHRpb25zIGJpdCBzZXQsIHVzdWFsbHkgMC4gU2Vl
IFVfT01JVF9VTkNIQU5HRURfVEVYVCwgVV9FRElUU19OT19SRVNFVCwKKyAgICAgKiAgICAgICAg
ICAgICAgICAgIFVfRk9MRF9DQVNFX0RFRkFVTFQsIFVfRk9MRF9DQVNFX0VYQ0xVREVfU1BFQ0lB
TF9JLgorICAgICAqIEBwYXJhbSBzcmMgICAgICAgVGhlIG9yaWdpbmFsIHN0cmluZy4KKyAgICAg
KiBAcGFyYW0gc3JjTGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIG9yaWdpbmFsIHN0cmluZy4gSWYg
LTEsIHRoZW4gc3JjIG11c3QgYmUgTlVMLXRlcm1pbmF0ZWQuCisgICAgICogQHBhcmFtIGRlc3Qg
ICAgICBBIGJ1ZmZlciBmb3IgdGhlIHJlc3VsdCBzdHJpbmcuIFRoZSByZXN1bHQgd2lsbCBiZSBO
VUwtdGVybWluYXRlZCBpZgorICAgICAqICAgICAgICAgICAgICAgICAgdGhlIGJ1ZmZlciBpcyBs
YXJnZSBlbm91Z2guCisgICAgICogICAgICAgICAgICAgICAgICBUaGUgY29udGVudHMgaXMgdW5k
ZWZpbmVkIGluIGNhc2Ugb2YgZmFpbHVyZS4KKyAgICAgKiBAcGFyYW0gZGVzdENhcGFjaXR5IFRo
ZSBzaXplIG9mIHRoZSBidWZmZXIgKG51bWJlciBvZiBieXRlcykuIElmIGl0IGlzIDAsIHRoZW4K
KyAgICAgKiAgICAgICAgICAgICAgICAgIGRlc3QgbWF5IGJlIE5VTEwgYW5kIHRoZSBmdW5jdGlv
biB3aWxsIG9ubHkgcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdAorICAgICAqICAgICAg
ICAgICAgICAgICAgd2l0aG91dCB3cml0aW5nIGFueSBvZiB0aGUgcmVzdWx0IHN0cmluZy4KKyAg
ICAgKiBAcGFyYW0gZWRpdHMgICAgIFJlY29yZHMgZWRpdHMgZm9yIGluZGV4IG1hcHBpbmcsIHdv
cmtpbmcgd2l0aCBzdHlsZWQgdGV4dCwKKyAgICAgKiAgICAgICAgICAgICAgICAgIGFuZCBnZXR0
aW5nIG9ubHkgY2hhbmdlcyAoaWYgYW55KS4KKyAgICAgKiAgICAgICAgICAgICAgICAgIFRoZSBF
ZGl0cyBjb250ZW50cyBpcyB1bmRlZmluZWQgaWYgYW55IGVycm9yIG9jY3Vycy4KKyAgICAgKiAg
ICAgICAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gY2FsbHMgZWRpdHMtPnJlc2V0KCkgZmlyc3Qg
dW5sZXNzCisgICAgICogICAgICAgICAgICAgICAgICBvcHRpb25zIGluY2x1ZGVzIFVfRURJVFNf
Tk9fUkVTRVQuIGVkaXRzIGNhbiBiZSBOVUxMLgorICAgICAqIEBwYXJhbSBlcnJvckNvZGUgUmVm
ZXJlbmNlIHRvIGFuIGluL291dCBlcnJvciBjb2RlIHZhbHVlCisgICAgICogICAgICAgICAgICAg
ICAgICB3aGljaCBtdXN0IG5vdCBpbmRpY2F0ZSBhIGZhaWx1cmUgYmVmb3JlIHRoZSBmdW5jdGlv
biBjYWxsLgorICAgICAqIEByZXR1cm4gVGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0IHN0cmluZywg
aWYgc3VjY2Vzc2Z1bC4KKyAgICAgKiAgICAgICAgIFdoZW4gdGhlIHJlc3VsdCB3b3VsZCBiZSBs
b25nZXIgdGhhbiBkZXN0Q2FwYWNpdHksCisgICAgICogICAgICAgICB0aGUgZnVsbCBsZW5ndGgg
aXMgcmV0dXJuZWQgYW5kIGEgVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IgaXMgc2V0LgorICAgICAq
CisgICAgICogQHNlZSB1Y2FzZW1hcF91dGY4Rm9sZENhc2UKKyAgICAgKiBAc3RhYmxlIElDVSA1
OQorICAgICAqLworICAgIHN0YXRpYyBpbnQzMl90IHV0ZjhGb2xkKAorICAgICAgICAgICAgdWlu
dDMyX3Qgb3B0aW9ucywKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNyYywgaW50MzJfdCBzcmNM
ZW5ndGgsCisgICAgICAgICAgICBjaGFyICpkZXN0LCBpbnQzMl90IGRlc3RDYXBhY2l0eSwgRWRp
dHMgKmVkaXRzLAorICAgICAgICAgICAgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKworcHJpdmF0
ZToKKyAgICBDYXNlTWFwKCkgPSBkZWxldGU7CisgICAgQ2FzZU1hcChjb25zdCBDYXNlTWFwICZv
dGhlcikgPSBkZWxldGU7CisgICAgQ2FzZU1hcCAmb3BlcmF0b3I9KGNvbnN0IENhc2VNYXAgJm90
aGVyKSA9IGRlbGV0ZTsKK307CisKK1VfTkFNRVNQQUNFX0VORAorCisjZW5kaWYgIC8vIF9fQ0FT
RU1BUF9IX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvY2hhcjE2cHRyLmgg
Yi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL2NoYXIxNnB0ci5oCmluZGV4IDQ4YWM2MDc4YmNhOTZj
NDBmMTY5NGZiOWM3NWQwYjE4YTQzNTMyMGUuLmE3YzVmMWEwYzVlZDU2NjMxODA4YmNiMzdmYjRl
NzliNmE5ODA2YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvY2hhcjE2cHRy
LmgKKysrIGIvU291cmNlL1dURi9pY3UvdW5pY29kZS9jaGFyMTZwdHIuaApAQCAtMSwzMDIgKzEs
MzA4IEBACi0vLyDCqSAyMDE3IGFuZCBsYXRlcjogVW5pY29kZSwgSW5jLiBhbmQgb3RoZXJzLg0K
LS8vIExpY2Vuc2UgJiB0ZXJtcyBvZiB1c2U6IGh0dHA6Ly93d3cudW5pY29kZS5vcmcvY29weXJp
Z2h0Lmh0bWwNCi0NCi0vLyBjaGFyMTZwdHIuaA0KLS8vIGNyZWF0ZWQ6IDIwMTdmZWIyOCBNYXJr
dXMgVy4gU2NoZXJlcg0KLQ0KLSNpZm5kZWYgX19DSEFSMTZQVFJfSF9fDQotI2RlZmluZSBfX0NI
QVIxNlBUUl9IX18NCi0NCi0jaW5jbHVkZSA8Y3N0ZGRlZj4NCi0jaW5jbHVkZSAidW5pY29kZS91
dHlwZXMuaCINCi0NCi0vKioNCi0gKiBcZmlsZQ0KLSAqIFxicmllZiBDKysgQVBJOiBjaGFyMTZf
dCBwb2ludGVyIHdyYXBwZXJzIHdpdGgNCi0gKiAgICAgICAgaW1wbGljaXQgY29udmVyc2lvbiBm
cm9tIGJpdC1jb21wYXRpYmxlIHJhdyBwb2ludGVyIHR5cGVzLg0KLSAqICAgICAgICBBbHNvIGNv
bnZlcnNpb24gZnVuY3Rpb25zIGZyb20gY2hhcjE2X3QgKiB0byBVQ2hhciAqIGFuZCBPbGRVQ2hh
ciAqLg0KLSAqLw0KLQ0KLVVfTkFNRVNQQUNFX0JFR0lODQotDQotLyoqDQotICogXGRlZiBVX0FM
SUFTSU5HX0JBUlJJRVINCi0gKiBCYXJyaWVyIGZvciBwb2ludGVyIGFudGktYWxpYXNpbmcgb3B0
aW1pemF0aW9ucyBldmVuIGFjcm9zcyBmdW5jdGlvbiBib3VuZGFyaWVzLg0KLSAqIEBpbnRlcm5h
bA0KLSAqLw0KLSNpZmRlZiBVX0FMSUFTSU5HX0JBUlJJRVINCi0gICAgLy8gVXNlIHRoZSBwcmVk
ZWZpbmVkIHZhbHVlLg0KLSNlbGlmIChkZWZpbmVkKF9fY2xhbmdfXykgfHwgZGVmaW5lZChfX0dO
VUNfXykpICYmIFVfUExBVEZPUk0gIT0gVV9QRl9CUk9XU0VSX05BVElWRV9DTElFTlQNCi0jICAg
ZGVmaW5lIFVfQUxJQVNJTkdfQkFSUklFUihwdHIpIGFzbSB2b2xhdGlsZSgiIiA6IDogInJtIihw
dHIpIDogIm1lbW9yeSIpDQotI2VuZGlmDQotDQotLyoqDQotICogY2hhcjE2X3QgKiB3cmFwcGVy
IHdpdGggaW1wbGljaXQgY29udmVyc2lvbiBmcm9tIGRpc3RpbmN0IGJ1dCBiaXQtY29tcGF0aWJs
ZSBwb2ludGVyIHR5cGVzLg0KLSAqIEBzdGFibGUgSUNVIDU5DQotICovDQotY2xhc3MgVV9DT01N
T05fQVBJIENoYXIxNlB0ciBVX0ZJTkFMIHsNCi1wdWJsaWM6DQotICAgIC8qKg0KLSAgICAgKiBD
b3BpZXMgdGhlIHBvaW50ZXIuDQotICAgICAqIEBwYXJhbSBwIHBvaW50ZXINCi0gICAgICogQHN0
YWJsZSBJQ1UgNTkNCi0gICAgICovDQotICAgIGlubGluZSBDaGFyMTZQdHIoY2hhcjE2X3QgKnAp
Ow0KLSNpZiAhVV9DSEFSMTZfSVNfVFlQRURFRg0KLSAgICAvKioNCi0gICAgICogQ29udmVydHMg
dGhlIHBvaW50ZXIgdG8gY2hhcjE2X3QgKi4NCi0gICAgICogQHBhcmFtIHAgcG9pbnRlciB0byBi
ZSBjb252ZXJ0ZWQNCi0gICAgICogQHN0YWJsZSBJQ1UgNTkNCi0gICAgICovDQotICAgIGlubGlu
ZSBDaGFyMTZQdHIodWludDE2X3QgKnApOw0KLSNlbmRpZg0KLSNpZiBVX1NJWkVPRl9XQ0hBUl9U
PT0yIHx8IGRlZmluZWQoVV9JTl9ET1hZR0VOKQ0KLSAgICAvKioNCi0gICAgICogQ29udmVydHMg
dGhlIHBvaW50ZXIgdG8gY2hhcjE2X3QgKi4NCi0gICAgICogKE9ubHkgZGVmaW5lZCBpZiBVX1NJ
WkVPRl9XQ0hBUl9UPT0yLikNCi0gICAgICogQHBhcmFtIHAgcG9pbnRlciB0byBiZSBjb252ZXJ0
ZWQNCi0gICAgICogQHN0YWJsZSBJQ1UgNTkNCi0gICAgICovDQotICAgIGlubGluZSBDaGFyMTZQ
dHIod2NoYXJfdCAqcCk7DQotI2VuZGlmDQotICAgIC8qKg0KLSAgICAgKiBudWxscHRyIGNvbnN0
cnVjdG9yLg0KLSAgICAgKiBAcGFyYW0gcCBudWxscHRyDQotICAgICAqIEBzdGFibGUgSUNVIDU5
DQotICAgICAqLw0KLSAgICBpbmxpbmUgQ2hhcjE2UHRyKHN0ZDo6bnVsbHB0cl90IHApOw0KLSAg
ICAvKioNCi0gICAgICogRGVzdHJ1Y3Rvci4NCi0gICAgICogQHN0YWJsZSBJQ1UgNTkNCi0gICAg
ICovDQotICAgIGlubGluZSB+Q2hhcjE2UHRyKCk7DQotDQotICAgIC8qKg0KLSAgICAgKiBQb2lu
dGVyIGFjY2Vzcy4NCi0gICAgICogQHJldHVybiB0aGUgd3JhcHBlZCBwb2ludGVyDQotICAgICAq
IEBzdGFibGUgSUNVIDU5DQotICAgICAqLw0KLSAgICBpbmxpbmUgY2hhcjE2X3QgKmdldCgpIGNv
bnN0Ow0KLSAgICAvKioNCi0gICAgICogY2hhcjE2X3QgcG9pbnRlciBhY2Nlc3MgdmlhIHR5cGUg
Y29udmVyc2lvbiAoZS5nLiwgc3RhdGljX2Nhc3QpLg0KLSAgICAgKiBAcmV0dXJuIHRoZSB3cmFw
cGVkIHBvaW50ZXINCi0gICAgICogQHN0YWJsZSBJQ1UgNTkNCi0gICAgICovDQotICAgIGlubGlu
ZSBvcGVyYXRvciBjaGFyMTZfdCAqKCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0NCi0NCi1wcml2
YXRlOg0KLSAgICBDaGFyMTZQdHIoKSA9IGRlbGV0ZTsNCi0NCi0jaWZkZWYgVV9BTElBU0lOR19C
QVJSSUVSDQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBjaGFyMTZfdCAqY2FzdChU
ICp0KSB7DQotICAgICAgICBVX0FMSUFTSU5HX0JBUlJJRVIodCk7DQotICAgICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxjaGFyMTZfdCAqPih0KTsNCi0gICAgfQ0KLQ0KLSAgICBjaGFyMTZf
dCAqcF87DQotI2Vsc2UNCi0gICAgdW5pb24gew0KLSAgICAgICAgY2hhcjE2X3QgKmNwOw0KLSAg
ICAgICAgdWludDE2X3QgKnVwOw0KLSAgICAgICAgd2NoYXJfdCAqd3A7DQotICAgIH0gdV87DQot
I2VuZGlmDQotfTsNCi0NCi0jaWZkZWYgVV9BTElBU0lOR19CQVJSSUVSDQotDQotQ2hhcjE2UHRy
OjpDaGFyMTZQdHIoY2hhcjE2X3QgKnApIDogcF8ocCkge30NCi0jaWYgIVVfQ0hBUjE2X0lTX1RZ
UEVERUYNCi1DaGFyMTZQdHI6OkNoYXIxNlB0cih1aW50MTZfdCAqcCkgOiBwXyhjYXN0KHApKSB7
fQ0KLSNlbmRpZg0KLSNpZiBVX1NJWkVPRl9XQ0hBUl9UPT0yDQotQ2hhcjE2UHRyOjpDaGFyMTZQ
dHIod2NoYXJfdCAqcCkgOiBwXyhjYXN0KHApKSB7fQ0KLSNlbmRpZg0KLUNoYXIxNlB0cjo6Q2hh
cjE2UHRyKHN0ZDo6bnVsbHB0cl90IHApIDogcF8ocCkge30NCi1DaGFyMTZQdHI6On5DaGFyMTZQ
dHIoKSB7DQotICAgIFVfQUxJQVNJTkdfQkFSUklFUihwXyk7DQotfQ0KLQ0KLWNoYXIxNl90ICpD
aGFyMTZQdHI6OmdldCgpIGNvbnN0IHsgcmV0dXJuIHBfOyB9DQotDQotI2Vsc2UNCi0NCi1DaGFy
MTZQdHI6OkNoYXIxNlB0cihjaGFyMTZfdCAqcCkgeyB1Xy5jcCA9IHA7IH0NCi0jaWYgIVVfQ0hB
UjE2X0lTX1RZUEVERUYNCi1DaGFyMTZQdHI6OkNoYXIxNlB0cih1aW50MTZfdCAqcCkgeyB1Xy51
cCA9IHA7IH0NCi0jZW5kaWYNCi0jaWYgVV9TSVpFT0ZfV0NIQVJfVD09Mg0KLUNoYXIxNlB0cjo6
Q2hhcjE2UHRyKHdjaGFyX3QgKnApIHsgdV8ud3AgPSBwOyB9DQotI2VuZGlmDQotQ2hhcjE2UHRy
OjpDaGFyMTZQdHIoc3RkOjpudWxscHRyX3QgcCkgeyB1Xy5jcCA9IHA7IH0NCi1DaGFyMTZQdHI6
On5DaGFyMTZQdHIoKSB7fQ0KLQ0KLWNoYXIxNl90ICpDaGFyMTZQdHI6OmdldCgpIGNvbnN0IHsg
cmV0dXJuIHVfLmNwOyB9DQotDQotI2VuZGlmDQotDQotLyoqDQotICogY29uc3QgY2hhcjE2X3Qg
KiB3cmFwcGVyIHdpdGggaW1wbGljaXQgY29udmVyc2lvbiBmcm9tIGRpc3RpbmN0IGJ1dCBiaXQt
Y29tcGF0aWJsZSBwb2ludGVyIHR5cGVzLg0KLSAqIEBzdGFibGUgSUNVIDU5DQotICovDQotY2xh
c3MgVV9DT01NT05fQVBJIENvbnN0Q2hhcjE2UHRyIFVfRklOQUwgew0KLXB1YmxpYzoNCi0gICAg
LyoqDQotICAgICAqIENvcGllcyB0aGUgcG9pbnRlci4NCi0gICAgICogQHBhcmFtIHAgcG9pbnRl
cg0KLSAgICAgKiBAc3RhYmxlIElDVSA1OQ0KLSAgICAgKi8NCi0gICAgaW5saW5lIENvbnN0Q2hh
cjE2UHRyKGNvbnN0IGNoYXIxNl90ICpwKTsNCi0jaWYgIVVfQ0hBUjE2X0lTX1RZUEVERUYNCi0g
ICAgLyoqDQotICAgICAqIENvbnZlcnRzIHRoZSBwb2ludGVyIHRvIGNoYXIxNl90ICouDQotICAg
ICAqIEBwYXJhbSBwIHBvaW50ZXIgdG8gYmUgY29udmVydGVkDQotICAgICAqIEBzdGFibGUgSUNV
IDU5DQotICAgICAqLw0KLSAgICBpbmxpbmUgQ29uc3RDaGFyMTZQdHIoY29uc3QgdWludDE2X3Qg
KnApOw0KLSNlbmRpZg0KLSNpZiBVX1NJWkVPRl9XQ0hBUl9UPT0yIHx8IGRlZmluZWQoVV9JTl9E
T1hZR0VOKQ0KLSAgICAvKioNCi0gICAgICogQ29udmVydHMgdGhlIHBvaW50ZXIgdG8gY2hhcjE2
X3QgKi4NCi0gICAgICogKE9ubHkgZGVmaW5lZCBpZiBVX1NJWkVPRl9XQ0hBUl9UPT0yLikNCi0g
ICAgICogQHBhcmFtIHAgcG9pbnRlciB0byBiZSBjb252ZXJ0ZWQNCi0gICAgICogQHN0YWJsZSBJ
Q1UgNTkNCi0gICAgICovDQotICAgIGlubGluZSBDb25zdENoYXIxNlB0cihjb25zdCB3Y2hhcl90
ICpwKTsNCi0jZW5kaWYNCi0gICAgLyoqDQotICAgICAqIG51bGxwdHIgY29uc3RydWN0b3IuDQot
ICAgICAqIEBwYXJhbSBwIG51bGxwdHINCi0gICAgICogQHN0YWJsZSBJQ1UgNTkNCi0gICAgICov
DQotICAgIGlubGluZSBDb25zdENoYXIxNlB0cihjb25zdCBzdGQ6Om51bGxwdHJfdCBwKTsNCi0N
Ci0gICAgLyoqDQotICAgICAqIERlc3RydWN0b3IuDQotICAgICAqIEBzdGFibGUgSUNVIDU5DQot
ICAgICAqLw0KLSAgICBpbmxpbmUgfkNvbnN0Q2hhcjE2UHRyKCk7DQotDQotICAgIC8qKg0KLSAg
ICAgKiBQb2ludGVyIGFjY2Vzcy4NCi0gICAgICogQHJldHVybiB0aGUgd3JhcHBlZCBwb2ludGVy
DQotICAgICAqIEBzdGFibGUgSUNVIDU5DQotICAgICAqLw0KLSAgICBpbmxpbmUgY29uc3QgY2hh
cjE2X3QgKmdldCgpIGNvbnN0Ow0KLSAgICAvKioNCi0gICAgICogY2hhcjE2X3QgcG9pbnRlciBh
Y2Nlc3MgdmlhIHR5cGUgY29udmVyc2lvbiAoZS5nLiwgc3RhdGljX2Nhc3QpLg0KLSAgICAgKiBA
cmV0dXJuIHRoZSB3cmFwcGVkIHBvaW50ZXINCi0gICAgICogQHN0YWJsZSBJQ1UgNTkNCi0gICAg
ICovDQotICAgIGlubGluZSBvcGVyYXRvciBjb25zdCBjaGFyMTZfdCAqKCkgY29uc3QgeyByZXR1
cm4gZ2V0KCk7IH0NCi0NCi1wcml2YXRlOg0KLSAgICBDb25zdENoYXIxNlB0cigpID0gZGVsZXRl
Ow0KLQ0KLSNpZmRlZiBVX0FMSUFTSU5HX0JBUlJJRVINCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RhdGljIGNvbnN0IGNoYXIxNl90ICpjYXN0KGNvbnN0IFQgKnQpIHsNCi0gICAgICAgIFVf
QUxJQVNJTkdfQkFSUklFUih0KTsNCi0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIxNl90ICo+KHQpOw0KLSAgICB9DQotDQotICAgIGNvbnN0IGNoYXIxNl90ICpwXzsN
Ci0jZWxzZQ0KLSAgICB1bmlvbiB7DQotICAgICAgICBjb25zdCBjaGFyMTZfdCAqY3A7DQotICAg
ICAgICBjb25zdCB1aW50MTZfdCAqdXA7DQotICAgICAgICBjb25zdCB3Y2hhcl90ICp3cDsNCi0g
ICAgfSB1XzsNCi0jZW5kaWYNCi19Ow0KLQ0KLSNpZmRlZiBVX0FMSUFTSU5HX0JBUlJJRVINCi0N
Ci1Db25zdENoYXIxNlB0cjo6Q29uc3RDaGFyMTZQdHIoY29uc3QgY2hhcjE2X3QgKnApIDogcF8o
cCkge30NCi0jaWYgIVVfQ0hBUjE2X0lTX1RZUEVERUYNCi1Db25zdENoYXIxNlB0cjo6Q29uc3RD
aGFyMTZQdHIoY29uc3QgdWludDE2X3QgKnApIDogcF8oY2FzdChwKSkge30NCi0jZW5kaWYNCi0j
aWYgVV9TSVpFT0ZfV0NIQVJfVD09Mg0KLUNvbnN0Q2hhcjE2UHRyOjpDb25zdENoYXIxNlB0cihj
b25zdCB3Y2hhcl90ICpwKSA6IHBfKGNhc3QocCkpIHt9DQotI2VuZGlmDQotQ29uc3RDaGFyMTZQ
dHI6OkNvbnN0Q2hhcjE2UHRyKGNvbnN0IHN0ZDo6bnVsbHB0cl90IHApIDogcF8ocCkge30NCi1D
b25zdENoYXIxNlB0cjo6fkNvbnN0Q2hhcjE2UHRyKCkgew0KLSAgICBVX0FMSUFTSU5HX0JBUlJJ
RVIocF8pOw0KLX0NCi0NCi1jb25zdCBjaGFyMTZfdCAqQ29uc3RDaGFyMTZQdHI6OmdldCgpIGNv
bnN0IHsgcmV0dXJuIHBfOyB9DQotDQotI2Vsc2UNCi0NCi1Db25zdENoYXIxNlB0cjo6Q29uc3RD
aGFyMTZQdHIoY29uc3QgY2hhcjE2X3QgKnApIHsgdV8uY3AgPSBwOyB9DQotI2lmICFVX0NIQVIx
Nl9JU19UWVBFREVGDQotQ29uc3RDaGFyMTZQdHI6OkNvbnN0Q2hhcjE2UHRyKGNvbnN0IHVpbnQx
Nl90ICpwKSB7IHVfLnVwID0gcDsgfQ0KLSNlbmRpZg0KLSNpZiBVX1NJWkVPRl9XQ0hBUl9UPT0y
DQotQ29uc3RDaGFyMTZQdHI6OkNvbnN0Q2hhcjE2UHRyKGNvbnN0IHdjaGFyX3QgKnApIHsgdV8u
d3AgPSBwOyB9DQotI2VuZGlmDQotQ29uc3RDaGFyMTZQdHI6OkNvbnN0Q2hhcjE2UHRyKGNvbnN0
IHN0ZDo6bnVsbHB0cl90IHApIHsgdV8uY3AgPSBwOyB9DQotQ29uc3RDaGFyMTZQdHI6On5Db25z
dENoYXIxNlB0cigpIHt9DQotDQotY29uc3QgY2hhcjE2X3QgKkNvbnN0Q2hhcjE2UHRyOjpnZXQo
KSBjb25zdCB7IHJldHVybiB1Xy5jcDsgfQ0KLQ0KLSNlbmRpZg0KLQ0KLS8qKg0KLSAqIENvbnZl
cnRzIGZyb20gY29uc3QgY2hhcjE2X3QgKiB0byBjb25zdCBVQ2hhciAqLg0KLSAqIEluY2x1ZGVz
IGFuIGFsaWFzaW5nIGJhcnJpZXIgaWYgYXZhaWxhYmxlLg0KLSAqIEBwYXJhbSBwIHBvaW50ZXIN
Ci0gKiBAcmV0dXJuIHAgYXMgY29uc3QgVUNoYXIgKg0KLSAqIEBzdGFibGUgSUNVIDU5DQotICov
DQotaW5saW5lIGNvbnN0IFVDaGFyICp0b1VDaGFyUHRyKGNvbnN0IGNoYXIxNl90ICpwKSB7DQot
I2lmZGVmIFVfQUxJQVNJTkdfQkFSUklFUg0KLSAgICBVX0FMSUFTSU5HX0JBUlJJRVIocCk7DQot
I2VuZGlmDQotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyICo+KHApOw0K
LX0NCi0NCi0vKioNCi0gKiBDb252ZXJ0cyBmcm9tIGNoYXIxNl90ICogdG8gVUNoYXIgKi4NCi0g
KiBJbmNsdWRlcyBhbiBhbGlhc2luZyBiYXJyaWVyIGlmIGF2YWlsYWJsZS4NCi0gKiBAcGFyYW0g
cCBwb2ludGVyDQotICogQHJldHVybiBwIGFzIFVDaGFyICoNCi0gKiBAc3RhYmxlIElDVSA1OQ0K
LSAqLw0KLWlubGluZSBVQ2hhciAqdG9VQ2hhclB0cihjaGFyMTZfdCAqcCkgew0KLSNpZmRlZiBV
X0FMSUFTSU5HX0JBUlJJRVINCi0gICAgVV9BTElBU0lOR19CQVJSSUVSKHApOw0KLSNlbmRpZg0K
LSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxVQ2hhciAqPihwKTsNCi19DQotDQotLyoqDQot
ICogQ29udmVydHMgZnJvbSBjb25zdCBjaGFyMTZfdCAqIHRvIGNvbnN0IE9sZFVDaGFyICouDQot
ICogSW5jbHVkZXMgYW4gYWxpYXNpbmcgYmFycmllciBpZiBhdmFpbGFibGUuDQotICogQHBhcmFt
IHAgcG9pbnRlcg0KLSAqIEByZXR1cm4gcCBhcyBjb25zdCBPbGRVQ2hhciAqDQotICogQHN0YWJs
ZSBJQ1UgNTkNCi0gKi8NCi1pbmxpbmUgY29uc3QgT2xkVUNoYXIgKnRvT2xkVUNoYXJQdHIoY29u
c3QgY2hhcjE2X3QgKnApIHsNCi0jaWZkZWYgVV9BTElBU0lOR19CQVJSSUVSDQotICAgIFVfQUxJ
QVNJTkdfQkFSUklFUihwKTsNCi0jZW5kaWYNCi0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgT2xkVUNoYXIgKj4ocCk7DQotfQ0KLQ0KLS8qKg0KLSAqIENvbnZlcnRzIGZyb20gY2hh
cjE2X3QgKiB0byBPbGRVQ2hhciAqLg0KLSAqIEluY2x1ZGVzIGFuIGFsaWFzaW5nIGJhcnJpZXIg
aWYgYXZhaWxhYmxlLg0KLSAqIEBwYXJhbSBwIHBvaW50ZXINCi0gKiBAcmV0dXJuIHAgYXMgT2xk
VUNoYXIgKg0KLSAqIEBzdGFibGUgSUNVIDU5DQotICovDQotaW5saW5lIE9sZFVDaGFyICp0b09s
ZFVDaGFyUHRyKGNoYXIxNl90ICpwKSB7DQotI2lmZGVmIFVfQUxJQVNJTkdfQkFSUklFUg0KLSAg
ICBVX0FMSUFTSU5HX0JBUlJJRVIocCk7DQotI2VuZGlmDQotICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PE9sZFVDaGFyICo+KHApOw0KLX0NCi0NCi1VX05BTUVTUEFDRV9FTkQNCi0NCi0jZW5k
aWYgIC8vIF9fQ0hBUjE2UFRSX0hfXw0KKy8vIMKpIDIwMTcgYW5kIGxhdGVyOiBVbmljb2RlLCBJ
bmMuIGFuZCBvdGhlcnMuCisvLyBMaWNlbnNlICYgdGVybXMgb2YgdXNlOiBodHRwOi8vd3d3LnVu
aWNvZGUub3JnL2NvcHlyaWdodC5odG1sCisKKy8vIGNoYXIxNnB0ci5oCisvLyBjcmVhdGVkOiAy
MDE3ZmViMjggTWFya3VzIFcuIFNjaGVyZXIKKworI2lmbmRlZiBfX0NIQVIxNlBUUl9IX18KKyNk
ZWZpbmUgX19DSEFSMTZQVFJfSF9fCisKKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgInVu
aWNvZGUvdXR5cGVzLmgiCisKKy8qKgorICogXGZpbGUKKyAqIFxicmllZiBDKysgQVBJOiBjaGFy
MTZfdCBwb2ludGVyIHdyYXBwZXJzIHdpdGgKKyAqICAgICAgICBpbXBsaWNpdCBjb252ZXJzaW9u
IGZyb20gYml0LWNvbXBhdGlibGUgcmF3IHBvaW50ZXIgdHlwZXMuCisgKiAgICAgICAgQWxzbyBj
b252ZXJzaW9uIGZ1bmN0aW9ucyBmcm9tIGNoYXIxNl90ICogdG8gVUNoYXIgKiBhbmQgT2xkVUNo
YXIgKi4KKyAqLworCitVX05BTUVTUEFDRV9CRUdJTgorCisvKioKKyAqIFxkZWYgVV9BTElBU0lO
R19CQVJSSUVSCisgKiBCYXJyaWVyIGZvciBwb2ludGVyIGFudGktYWxpYXNpbmcgb3B0aW1pemF0
aW9ucyBldmVuIGFjcm9zcyBmdW5jdGlvbiBib3VuZGFyaWVzLgorICogQGludGVybmFsCisgKi8K
KyNpZmRlZiBVX0FMSUFTSU5HX0JBUlJJRVIKKyAgICAvLyBVc2UgdGhlIHByZWRlZmluZWQgdmFs
dWUuCisjZWxpZiAoZGVmaW5lZChfX2NsYW5nX18pIHx8IGRlZmluZWQoX19HTlVDX18pKSAmJiBV
X1BMQVRGT1JNICE9IFVfUEZfQlJPV1NFUl9OQVRJVkVfQ0xJRU5UCisjICAgZGVmaW5lIFVfQUxJ
QVNJTkdfQkFSUklFUihwdHIpIGFzbSB2b2xhdGlsZSgiIiA6IDogInJtIihwdHIpIDogIm1lbW9y
eSIpCisjZWxpZiBkZWZpbmVkKFVfSU5fRE9YWUdFTikKKyMgICBkZWZpbmUgVV9BTElBU0lOR19C
QVJSSUVSKHB0cikKKyNlbmRpZgorCisvKioKKyAqIGNoYXIxNl90ICogd3JhcHBlciB3aXRoIGlt
cGxpY2l0IGNvbnZlcnNpb24gZnJvbSBkaXN0aW5jdCBidXQgYml0LWNvbXBhdGlibGUgcG9pbnRl
ciB0eXBlcy4KKyAqIEBzdGFibGUgSUNVIDU5CisgKi8KK2NsYXNzIFVfQ09NTU9OX0FQSSBDaGFy
MTZQdHIgVV9GSU5BTCB7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogQ29waWVzIHRoZSBwb2lu
dGVyLgorICAgICAqIEBwYXJhbSBwIHBvaW50ZXIKKyAgICAgKiBAc3RhYmxlIElDVSA1OQorICAg
ICAqLworICAgIGlubGluZSBDaGFyMTZQdHIoY2hhcjE2X3QgKnApOworI2lmICFVX0NIQVIxNl9J
U19UWVBFREVGCisgICAgLyoqCisgICAgICogQ29udmVydHMgdGhlIHBvaW50ZXIgdG8gY2hhcjE2
X3QgKi4KKyAgICAgKiBAcGFyYW0gcCBwb2ludGVyIHRvIGJlIGNvbnZlcnRlZAorICAgICAqIEBz
dGFibGUgSUNVIDU5CisgICAgICovCisgICAgaW5saW5lIENoYXIxNlB0cih1aW50MTZfdCAqcCk7
CisjZW5kaWYKKyNpZiBVX1NJWkVPRl9XQ0hBUl9UPT0yIHx8IGRlZmluZWQoVV9JTl9ET1hZR0VO
KQorICAgIC8qKgorICAgICAqIENvbnZlcnRzIHRoZSBwb2ludGVyIHRvIGNoYXIxNl90ICouCisg
ICAgICogKE9ubHkgZGVmaW5lZCBpZiBVX1NJWkVPRl9XQ0hBUl9UPT0yLikKKyAgICAgKiBAcGFy
YW0gcCBwb2ludGVyIHRvIGJlIGNvbnZlcnRlZAorICAgICAqIEBzdGFibGUgSUNVIDU5CisgICAg
ICovCisgICAgaW5saW5lIENoYXIxNlB0cih3Y2hhcl90ICpwKTsKKyNlbmRpZgorICAgIC8qKgor
ICAgICAqIG51bGxwdHIgY29uc3RydWN0b3IuCisgICAgICogQHBhcmFtIHAgbnVsbHB0cgorICAg
ICAqIEBzdGFibGUgSUNVIDU5CisgICAgICovCisgICAgaW5saW5lIENoYXIxNlB0cihzdGQ6Om51
bGxwdHJfdCBwKTsKKyAgICAvKioKKyAgICAgKiBEZXN0cnVjdG9yLgorICAgICAqIEBzdGFibGUg
SUNVIDU5CisgICAgICovCisgICAgaW5saW5lIH5DaGFyMTZQdHIoKTsKKworICAgIC8qKgorICAg
ICAqIFBvaW50ZXIgYWNjZXNzLgorICAgICAqIEByZXR1cm4gdGhlIHdyYXBwZWQgcG9pbnRlcgor
ICAgICAqIEBzdGFibGUgSUNVIDU5CisgICAgICovCisgICAgaW5saW5lIGNoYXIxNl90ICpnZXQo
KSBjb25zdDsKKyAgICAvKioKKyAgICAgKiBjaGFyMTZfdCBwb2ludGVyIGFjY2VzcyB2aWEgdHlw
ZSBjb252ZXJzaW9uIChlLmcuLCBzdGF0aWNfY2FzdCkuCisgICAgICogQHJldHVybiB0aGUgd3Jh
cHBlZCBwb2ludGVyCisgICAgICogQHN0YWJsZSBJQ1UgNTkKKyAgICAgKi8KKyAgICBpbmxpbmUg
b3BlcmF0b3IgY2hhcjE2X3QgKigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CisKK3ByaXZhdGU6
CisgICAgQ2hhcjE2UHRyKCkgPSBkZWxldGU7CisKKyNpZmRlZiBVX0FMSUFTSU5HX0JBUlJJRVIK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgY2hhcjE2X3QgKmNhc3QoVCAqdCkgewor
ICAgICAgICBVX0FMSUFTSU5HX0JBUlJJRVIodCk7CisgICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PGNoYXIxNl90ICo+KHQpOworICAgIH0KKworICAgIGNoYXIxNl90ICpwXzsKKyNlbHNl
CisgICAgdW5pb24geworICAgICAgICBjaGFyMTZfdCAqY3A7CisgICAgICAgIHVpbnQxNl90ICp1
cDsKKyAgICAgICAgd2NoYXJfdCAqd3A7CisgICAgfSB1XzsKKyNlbmRpZgorfTsKKworLy8vIFxj
b25kCisjaWZkZWYgVV9BTElBU0lOR19CQVJSSUVSCisKK0NoYXIxNlB0cjo6Q2hhcjE2UHRyKGNo
YXIxNl90ICpwKSA6IHBfKHApIHt9CisjaWYgIVVfQ0hBUjE2X0lTX1RZUEVERUYKK0NoYXIxNlB0
cjo6Q2hhcjE2UHRyKHVpbnQxNl90ICpwKSA6IHBfKGNhc3QocCkpIHt9CisjZW5kaWYKKyNpZiBV
X1NJWkVPRl9XQ0hBUl9UPT0yCitDaGFyMTZQdHI6OkNoYXIxNlB0cih3Y2hhcl90ICpwKSA6IHBf
KGNhc3QocCkpIHt9CisjZW5kaWYKK0NoYXIxNlB0cjo6Q2hhcjE2UHRyKHN0ZDo6bnVsbHB0cl90
IHApIDogcF8ocCkge30KK0NoYXIxNlB0cjo6fkNoYXIxNlB0cigpIHsKKyAgICBVX0FMSUFTSU5H
X0JBUlJJRVIocF8pOworfQorCitjaGFyMTZfdCAqQ2hhcjE2UHRyOjpnZXQoKSBjb25zdCB7IHJl
dHVybiBwXzsgfQorCisjZWxzZQorCitDaGFyMTZQdHI6OkNoYXIxNlB0cihjaGFyMTZfdCAqcCkg
eyB1Xy5jcCA9IHA7IH0KKyNpZiAhVV9DSEFSMTZfSVNfVFlQRURFRgorQ2hhcjE2UHRyOjpDaGFy
MTZQdHIodWludDE2X3QgKnApIHsgdV8udXAgPSBwOyB9CisjZW5kaWYKKyNpZiBVX1NJWkVPRl9X
Q0hBUl9UPT0yCitDaGFyMTZQdHI6OkNoYXIxNlB0cih3Y2hhcl90ICpwKSB7IHVfLndwID0gcDsg
fQorI2VuZGlmCitDaGFyMTZQdHI6OkNoYXIxNlB0cihzdGQ6Om51bGxwdHJfdCBwKSB7IHVfLmNw
ID0gcDsgfQorQ2hhcjE2UHRyOjp+Q2hhcjE2UHRyKCkge30KKworY2hhcjE2X3QgKkNoYXIxNlB0
cjo6Z2V0KCkgY29uc3QgeyByZXR1cm4gdV8uY3A7IH0KKworI2VuZGlmCisvLy8gXGVuZGNvbmQK
KworLyoqCisgKiBjb25zdCBjaGFyMTZfdCAqIHdyYXBwZXIgd2l0aCBpbXBsaWNpdCBjb252ZXJz
aW9uIGZyb20gZGlzdGluY3QgYnV0IGJpdC1jb21wYXRpYmxlIHBvaW50ZXIgdHlwZXMuCisgKiBA
c3RhYmxlIElDVSA1OQorICovCitjbGFzcyBVX0NPTU1PTl9BUEkgQ29uc3RDaGFyMTZQdHIgVV9G
SU5BTCB7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogQ29waWVzIHRoZSBwb2ludGVyLgorICAg
ICAqIEBwYXJhbSBwIHBvaW50ZXIKKyAgICAgKiBAc3RhYmxlIElDVSA1OQorICAgICAqLworICAg
IGlubGluZSBDb25zdENoYXIxNlB0cihjb25zdCBjaGFyMTZfdCAqcCk7CisjaWYgIVVfQ0hBUjE2
X0lTX1RZUEVERUYKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0cyB0aGUgcG9pbnRlciB0byBjaGFy
MTZfdCAqLgorICAgICAqIEBwYXJhbSBwIHBvaW50ZXIgdG8gYmUgY29udmVydGVkCisgICAgICog
QHN0YWJsZSBJQ1UgNTkKKyAgICAgKi8KKyAgICBpbmxpbmUgQ29uc3RDaGFyMTZQdHIoY29uc3Qg
dWludDE2X3QgKnApOworI2VuZGlmCisjaWYgVV9TSVpFT0ZfV0NIQVJfVD09MiB8fCBkZWZpbmVk
KFVfSU5fRE9YWUdFTikKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0cyB0aGUgcG9pbnRlciB0byBj
aGFyMTZfdCAqLgorICAgICAqIChPbmx5IGRlZmluZWQgaWYgVV9TSVpFT0ZfV0NIQVJfVD09Mi4p
CisgICAgICogQHBhcmFtIHAgcG9pbnRlciB0byBiZSBjb252ZXJ0ZWQKKyAgICAgKiBAc3RhYmxl
IElDVSA1OQorICAgICAqLworICAgIGlubGluZSBDb25zdENoYXIxNlB0cihjb25zdCB3Y2hhcl90
ICpwKTsKKyNlbmRpZgorICAgIC8qKgorICAgICAqIG51bGxwdHIgY29uc3RydWN0b3IuCisgICAg
ICogQHBhcmFtIHAgbnVsbHB0cgorICAgICAqIEBzdGFibGUgSUNVIDU5CisgICAgICovCisgICAg
aW5saW5lIENvbnN0Q2hhcjE2UHRyKGNvbnN0IHN0ZDo6bnVsbHB0cl90IHApOworCisgICAgLyoq
CisgICAgICogRGVzdHJ1Y3Rvci4KKyAgICAgKiBAc3RhYmxlIElDVSA1OQorICAgICAqLworICAg
IGlubGluZSB+Q29uc3RDaGFyMTZQdHIoKTsKKworICAgIC8qKgorICAgICAqIFBvaW50ZXIgYWNj
ZXNzLgorICAgICAqIEByZXR1cm4gdGhlIHdyYXBwZWQgcG9pbnRlcgorICAgICAqIEBzdGFibGUg
SUNVIDU5CisgICAgICovCisgICAgaW5saW5lIGNvbnN0IGNoYXIxNl90ICpnZXQoKSBjb25zdDsK
KyAgICAvKioKKyAgICAgKiBjaGFyMTZfdCBwb2ludGVyIGFjY2VzcyB2aWEgdHlwZSBjb252ZXJz
aW9uIChlLmcuLCBzdGF0aWNfY2FzdCkuCisgICAgICogQHJldHVybiB0aGUgd3JhcHBlZCBwb2lu
dGVyCisgICAgICogQHN0YWJsZSBJQ1UgNTkKKyAgICAgKi8KKyAgICBpbmxpbmUgb3BlcmF0b3Ig
Y29uc3QgY2hhcjE2X3QgKigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CisKK3ByaXZhdGU6Cisg
ICAgQ29uc3RDaGFyMTZQdHIoKSA9IGRlbGV0ZTsKKworI2lmZGVmIFVfQUxJQVNJTkdfQkFSUklF
UgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBjb25zdCBjaGFyMTZfdCAqY2FzdChj
b25zdCBUICp0KSB7CisgICAgICAgIFVfQUxJQVNJTkdfQkFSUklFUih0KTsKKyAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcjE2X3QgKj4odCk7CisgICAgfQorCisgICAg
Y29uc3QgY2hhcjE2X3QgKnBfOworI2Vsc2UKKyAgICB1bmlvbiB7CisgICAgICAgIGNvbnN0IGNo
YXIxNl90ICpjcDsKKyAgICAgICAgY29uc3QgdWludDE2X3QgKnVwOworICAgICAgICBjb25zdCB3
Y2hhcl90ICp3cDsKKyAgICB9IHVfOworI2VuZGlmCit9OworCisvLy8gXGNvbmQKKyNpZmRlZiBV
X0FMSUFTSU5HX0JBUlJJRVIKKworQ29uc3RDaGFyMTZQdHI6OkNvbnN0Q2hhcjE2UHRyKGNvbnN0
IGNoYXIxNl90ICpwKSA6IHBfKHApIHt9CisjaWYgIVVfQ0hBUjE2X0lTX1RZUEVERUYKK0NvbnN0
Q2hhcjE2UHRyOjpDb25zdENoYXIxNlB0cihjb25zdCB1aW50MTZfdCAqcCkgOiBwXyhjYXN0KHAp
KSB7fQorI2VuZGlmCisjaWYgVV9TSVpFT0ZfV0NIQVJfVD09MgorQ29uc3RDaGFyMTZQdHI6OkNv
bnN0Q2hhcjE2UHRyKGNvbnN0IHdjaGFyX3QgKnApIDogcF8oY2FzdChwKSkge30KKyNlbmRpZgor
Q29uc3RDaGFyMTZQdHI6OkNvbnN0Q2hhcjE2UHRyKGNvbnN0IHN0ZDo6bnVsbHB0cl90IHApIDog
cF8ocCkge30KK0NvbnN0Q2hhcjE2UHRyOjp+Q29uc3RDaGFyMTZQdHIoKSB7CisgICAgVV9BTElB
U0lOR19CQVJSSUVSKHBfKTsKK30KKworY29uc3QgY2hhcjE2X3QgKkNvbnN0Q2hhcjE2UHRyOjpn
ZXQoKSBjb25zdCB7IHJldHVybiBwXzsgfQorCisjZWxzZQorCitDb25zdENoYXIxNlB0cjo6Q29u
c3RDaGFyMTZQdHIoY29uc3QgY2hhcjE2X3QgKnApIHsgdV8uY3AgPSBwOyB9CisjaWYgIVVfQ0hB
UjE2X0lTX1RZUEVERUYKK0NvbnN0Q2hhcjE2UHRyOjpDb25zdENoYXIxNlB0cihjb25zdCB1aW50
MTZfdCAqcCkgeyB1Xy51cCA9IHA7IH0KKyNlbmRpZgorI2lmIFVfU0laRU9GX1dDSEFSX1Q9PTIK
K0NvbnN0Q2hhcjE2UHRyOjpDb25zdENoYXIxNlB0cihjb25zdCB3Y2hhcl90ICpwKSB7IHVfLndw
ID0gcDsgfQorI2VuZGlmCitDb25zdENoYXIxNlB0cjo6Q29uc3RDaGFyMTZQdHIoY29uc3Qgc3Rk
OjpudWxscHRyX3QgcCkgeyB1Xy5jcCA9IHA7IH0KK0NvbnN0Q2hhcjE2UHRyOjp+Q29uc3RDaGFy
MTZQdHIoKSB7fQorCitjb25zdCBjaGFyMTZfdCAqQ29uc3RDaGFyMTZQdHI6OmdldCgpIGNvbnN0
IHsgcmV0dXJuIHVfLmNwOyB9CisKKyNlbmRpZgorLy8vIFxlbmRjb25kCisKKy8qKgorICogQ29u
dmVydHMgZnJvbSBjb25zdCBjaGFyMTZfdCAqIHRvIGNvbnN0IFVDaGFyICouCisgKiBJbmNsdWRl
cyBhbiBhbGlhc2luZyBiYXJyaWVyIGlmIGF2YWlsYWJsZS4KKyAqIEBwYXJhbSBwIHBvaW50ZXIK
KyAqIEByZXR1cm4gcCBhcyBjb25zdCBVQ2hhciAqCisgKiBAc3RhYmxlIElDVSA1OQorICovCitp
bmxpbmUgY29uc3QgVUNoYXIgKnRvVUNoYXJQdHIoY29uc3QgY2hhcjE2X3QgKnApIHsKKyNpZmRl
ZiBVX0FMSUFTSU5HX0JBUlJJRVIKKyAgICBVX0FMSUFTSU5HX0JBUlJJRVIocCk7CisjZW5kaWYK
KyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhciAqPihwKTsKK30KKworLyoq
CisgKiBDb252ZXJ0cyBmcm9tIGNoYXIxNl90ICogdG8gVUNoYXIgKi4KKyAqIEluY2x1ZGVzIGFu
IGFsaWFzaW5nIGJhcnJpZXIgaWYgYXZhaWxhYmxlLgorICogQHBhcmFtIHAgcG9pbnRlcgorICog
QHJldHVybiBwIGFzIFVDaGFyICoKKyAqIEBzdGFibGUgSUNVIDU5CisgKi8KK2lubGluZSBVQ2hh
ciAqdG9VQ2hhclB0cihjaGFyMTZfdCAqcCkgeworI2lmZGVmIFVfQUxJQVNJTkdfQkFSUklFUgor
ICAgIFVfQUxJQVNJTkdfQkFSUklFUihwKTsKKyNlbmRpZgorICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PFVDaGFyICo+KHApOworfQorCisvKioKKyAqIENvbnZlcnRzIGZyb20gY29uc3QgY2hh
cjE2X3QgKiB0byBjb25zdCBPbGRVQ2hhciAqLgorICogSW5jbHVkZXMgYW4gYWxpYXNpbmcgYmFy
cmllciBpZiBhdmFpbGFibGUuCisgKiBAcGFyYW0gcCBwb2ludGVyCisgKiBAcmV0dXJuIHAgYXMg
Y29uc3QgT2xkVUNoYXIgKgorICogQHN0YWJsZSBJQ1UgNTkKKyAqLworaW5saW5lIGNvbnN0IE9s
ZFVDaGFyICp0b09sZFVDaGFyUHRyKGNvbnN0IGNoYXIxNl90ICpwKSB7CisjaWZkZWYgVV9BTElB
U0lOR19CQVJSSUVSCisgICAgVV9BTElBU0lOR19CQVJSSUVSKHApOworI2VuZGlmCisgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgT2xkVUNoYXIgKj4ocCk7Cit9CisKKy8qKgorICog
Q29udmVydHMgZnJvbSBjaGFyMTZfdCAqIHRvIE9sZFVDaGFyICouCisgKiBJbmNsdWRlcyBhbiBh
bGlhc2luZyBiYXJyaWVyIGlmIGF2YWlsYWJsZS4KKyAqIEBwYXJhbSBwIHBvaW50ZXIKKyAqIEBy
ZXR1cm4gcCBhcyBPbGRVQ2hhciAqCisgKiBAc3RhYmxlIElDVSA1OQorICovCitpbmxpbmUgT2xk
VUNoYXIgKnRvT2xkVUNoYXJQdHIoY2hhcjE2X3QgKnApIHsKKyNpZmRlZiBVX0FMSUFTSU5HX0JB
UlJJRVIKKyAgICBVX0FMSUFTSU5HX0JBUlJJRVIocCk7CisjZW5kaWYKKyAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxPbGRVQ2hhciAqPihwKTsKK30KKworVV9OQU1FU1BBQ0VfRU5ECisKKyNl
bmRpZiAgLy8gX19DSEFSMTZQVFJfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2ljdS91bmlj
b2RlL2NvbGwuaCBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvY29sbC5oCmluZGV4IGQwMzU3MDUw
OWVjZWJiZGZiZWIxY2EyMTViZDMzNzAzNzg1ZTdmOGUuLjY1MzQzNGY1NGNhNjY0ZWQ1YzlhYzVm
OWY4YTBmMGY2YWNhN2E5MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvY29s
bC5oCisrKyBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvY29sbC5oCkBAIC0yMzUsMTYgKzIzNSwx
NiBAQCBjbGFzcyBVX0kxOE5fQVBJIENvbGxhdG9yIDogcHVibGljIFVPYmplY3QgewogICAgICAq
IFJldHVybnMgVFJVRSBpZiAib3RoZXIiIGlzIHRoZSBzYW1lIGFzICJ0aGlzIi4KICAgICAgKgog
ICAgICAqIFRoZSBiYXNlIGNsYXNzIGltcGxlbWVudGF0aW9uIHJldHVybnMgVFJVRSBpZiAib3Ro
ZXIiIGhhcyB0aGUgc2FtZSB0eXBlL2NsYXNzIGFzICJ0aGlzIjoKLSAgICAgKiA8Y29kZT50eXBl
aWQoKnRoaXMpID09IHR5cGVpZChvdGhlcik8L2NvZGU+LgorICAgICAqIGB0eXBlaWQoKnRoaXMp
ID09IHR5cGVpZChvdGhlcilgLgogICAgICAqCiAgICAgICogU3ViY2xhc3MgaW1wbGVtZW50YXRp
b25zIHNob3VsZCBkbyBzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nOgotICAgICAqIDxwcmU+
Ci0gICAgICogICBpZiAodGhpcyA9PSAmb3RoZXIpIHsgcmV0dXJuIFRSVUU7IH0KLSAgICAgKiAg
IGlmICghQ29sbGF0b3I6Om9wZXJhdG9yPT0ob3RoZXIpKSB7IHJldHVybiBGQUxTRTsgfSAgLy8g
bm90IHRoZSBzYW1lIGNsYXNzCiAgICAgICoKLSAgICAgKiAgIGNvbnN0IE15Q29sbGF0b3IgJm8g
PSAoY29uc3QgTXlDb2xsYXRvciYpb3RoZXI7Ci0gICAgICogICAoY29tcGFyZSB0aGlzIHZzLiBv
J3Mgc3ViY2xhc3MgZmllbGRzKQotICAgICAqIDwvcHJlPgorICAgICAqICAgICBpZiAodGhpcyA9
PSAmb3RoZXIpIHsgcmV0dXJuIFRSVUU7IH0KKyAgICAgKiAgICAgaWYgKCFDb2xsYXRvcjo6b3Bl
cmF0b3I9PShvdGhlcikpIHsgcmV0dXJuIEZBTFNFOyB9ICAvLyBub3QgdGhlIHNhbWUgY2xhc3MK
KyAgICAgKgorICAgICAqICAgICBjb25zdCBNeUNvbGxhdG9yICZvID0gKGNvbnN0IE15Q29sbGF0
b3ImKW90aGVyOworICAgICAqICAgICAoY29tcGFyZSB0aGlzIHZzLiBvJ3Mgc3ViY2xhc3MgZmll
bGRzKQorICAgICAqCiAgICAgICogQHBhcmFtIG90aGVyIENvbGxhdG9yIG9iamVjdCB0byBiZSBj
b21wYXJlZAogICAgICAqIEByZXR1cm4gVFJVRSBpZiBvdGhlciBpcyB0aGUgc2FtZSBhcyB0aGlz
LgogICAgICAqIEBzdGFibGUgSUNVIDIuMApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9pY3UvdW5p
Y29kZS9jb21wYWN0ZGVjaW1hbGZvcm1hdC5oIGIvU291cmNlL1dURi9pY3UvdW5pY29kZS9jb21w
YWN0ZGVjaW1hbGZvcm1hdC5oCmluZGV4IDdkYzkyZjYxMDA2MmY0ZTZlMzAwNDk5OWFkMDc1ZGU5
NDFlNzMyNzguLjljMWU5MTgzZjQ2NTdiZTJmZDA2NWRiMTliMTA0NWRkNDNlMzIyMGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvY29tcGFjdGRlY2ltYWxmb3JtYXQuaAorKysg
Yi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL2NvbXBhY3RkZWNpbWFsZm9ybWF0LmgKQEAgLTMwLDMw
ICszMCwzMSBAQCBVX05BTUVTUEFDRV9CRUdJTgogY2xhc3MgUGx1cmFsUnVsZXM7CiAKIC8qKgot
ICogPHA+PHN0cm9uZz5JTVBPUlRBTlQ6PC9zdHJvbmc+IE5ldyB1c2VycyBhcmUgc3Ryb25nbHkg
ZW5jb3VyYWdlZCB0byBzZWUgaWYKKyAqICoqSU1QT1JUQU5UOioqIE5ldyB1c2VycyBhcmUgc3Ry
b25nbHkgZW5jb3VyYWdlZCB0byBzZWUgaWYKICAqIG51bWJlcmZvcm1hdHRlci5oIGZpdHMgdGhl
aXIgdXNlIGNhc2UuICBBbHRob3VnaCBub3QgZGVwcmVjYXRlZCwgdGhpcyBoZWFkZXIKICAqIGlz
IHByb3ZpZGVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBvbmx5LgotICogPGhyLz4KKyAq
CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIFRoZSBDb21wYWN0RGVjaW1hbEZvcm1h
dCBwcm9kdWNlcyBhYmJyZXZpYXRlZCBudW1iZXJzLCBzdWl0YWJsZSBmb3IgZGlzcGxheSBpbgog
ICogZW52aXJvbm1lbnRzIHdpbGwgbGltaXRlZCByZWFsIGVzdGF0ZS4gRm9yIGV4YW1wbGUsICdI
aXRzOiAxLjJCJyBpbnN0ZWFkIG9mCiAgKiAnSGl0czogMSwyMDAsMDAwLDAwMCcuIFRoZSBmb3Jt
YXQgd2lsbCBiZSBhcHByb3ByaWF0ZSBmb3IgdGhlIGdpdmVuIGxhbmd1YWdlLAogICogc3VjaCBh
cyAiMSwyIE1yZC4iIGZvciBHZXJtYW4uCi0gKiA8cD4KKyAqCiAgKiBGb3IgbnVtYmVycyB1bmRl
ciAxMDAwIHRyaWxsaW9uICh1bmRlciAxMF4xNSwgc3VjaCBhcyAxMjMsNDU2LDc4OSwwMTIsMzQ1
KSwKICAqIHRoZSByZXN1bHQgd2lsbCBiZSBzaG9ydCBmb3Igc3VwcG9ydGVkIGxhbmd1YWdlcy4g
SG93ZXZlciwgdGhlIHJlc3VsdCBtYXkKICAqIHNvbWV0aW1lcyBleGNlZWQgNyBjaGFyYWN0ZXJz
LCBzdWNoIGFzIHdoZW4gdGhlcmUgYXJlIGNvbWJpbmluZyBtYXJrcyBvciB0aGluCiAgKiBjaGFy
YWN0ZXJzLiBJbiBzdWNoIGNhc2VzLCB0aGUgdmlzdWFsIHdpZHRoIGluIGZvbnRzIHNob3VsZCBz
dGlsbCBiZSBzaG9ydC4KLSAqIDxwPgorICoKICAqIEJ5IGRlZmF1bHQsIHRoZXJlIGFyZSAzIHNp
Z25pZmljYW50IGRpZ2l0cy4gQWZ0ZXIgY3JlYXRpb24sIGlmIG1vcmUgdGhhbgogICogdGhyZWUg
c2lnbmlmaWNhbnQgZGlnaXRzIGFyZSBzZXQgKHdpdGggc2V0TWF4aW11bVNpZ25pZmljYW50RGln
aXRzKSwgb3IgaWYgYQogICogZml4ZWQgbnVtYmVyIG9mIGRpZ2l0cyBhcmUgc2V0ICh3aXRoIHNl
dE1heGltdW1JbnRlZ2VyRGlnaXRzIG9yCiAgKiBzZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMpLCB0
aGVuIHJlc3VsdCBtYXkgYmUgd2lkZXIuCi0gKiA8cD4KKyAqCiAgKiBBdCB0aGlzIHRpbWUsIHBh
cnNpbmcgaXMgbm90IHN1cHBvcnRlZCwgYW5kIHdpbGwgcHJvZHVjZSBhIFVfVU5TVVBQT1JURURf
RVJST1IuCiAgKiBSZXNldHRpbmcgdGhlIHBhdHRlcm4gcHJlZml4ZXMgb3Igc3VmZml4ZXMgaXMg
bm90IHN1cHBvcnRlZDsgdGhlIG1ldGhvZCBjYWxscwogICogYXJlIGlnbm9yZWQuCi0gKiA8cD4K
KyAqCiAgKiBAc3RhYmxlIElDVSA1MQogICovCiBjbGFzcyBVX0kxOE5fQVBJIENvbXBhY3REZWNp
bWFsRm9ybWF0IDogcHVibGljIERlY2ltYWxGb3JtYXQgewpAQCAtNjEsOSArNjIsOSBAQCBjbGFz
cyBVX0kxOE5fQVBJIENvbXBhY3REZWNpbWFsRm9ybWF0IDogcHVibGljIERlY2ltYWxGb3JtYXQg
ewogCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIGEgY29tcGFjdCBkZWNpbWFsIGluc3RhbmNl
IGZvciBzcGVjaWZpZWQgbG9jYWxlLgotICAgICAqIDxwPgotICAgICAqIDxzdHJvbmc+Tk9URTo8
L3N0cm9uZz4gTmV3IHVzZXJzIGFyZSBzdHJvbmdseSBlbmNvdXJhZ2VkIHRvIHVzZQotICAgICAq
IHtAbGluayBOdW1iZXJGb3JtYXR0ZXJ9IGluc3RlYWQgb2YgTnVtYmVyRm9ybWF0LgorICAgICAg
KgorICAgICAgKiAqKk5PVEU6KiogTmV3IHVzZXJzIGFyZSBzdHJvbmdseSBlbmNvdXJhZ2VkIHRv
IHVzZQorICAgICAgKiBgbnVtYmVyOjpOdW1iZXJGb3JtYXR0ZXJgIGluc3RlYWQgb2YgTnVtYmVy
Rm9ybWF0LgogICAgICAgKiBAcGFyYW0gaW5Mb2NhbGUgdGhlIGdpdmVuIGxvY2FsZS4KICAgICAg
ICogQHBhcmFtIHN0eWxlIHdoZXRoZXIgdG8gdXNlIHNob3J0IG9yIGxvbmcgc3R5bGUuCiAgICAg
ICAqIEBwYXJhbSBzdGF0dXMgZXJyb3IgY29kZSByZXR1cm5lZCAgaGVyZS4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvY3VycnBpbmYuaCBiL1NvdXJjZS9XVEYvaWN1L3VuaWNv
ZGUvY3VycnBpbmYuaAppbmRleCAzM2MxOGIwOGYyNGM2NjM5YzIzN2VkNmMwNzMwMjllOGU0Mjcy
MmYzLi43NzQxYzYwOGIwNzc3ZTUzMWI1ZTg5ZGVjODdjM2ZlM2EwMGIyMmVhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL2N1cnJwaW5mLmgKKysrIGIvU291cmNlL1dURi9pY3Uv
dW5pY29kZS9jdXJycGluZi5oCkBAIC0yLDcgKzIsNyBAQAogLy8gTGljZW5zZSAmIHRlcm1zIG9m
IHVzZTogaHR0cDovL3d3dy51bmljb2RlLm9yZy9jb3B5cmlnaHQuaHRtbAogLyoKICAqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNSwgSW50ZXJuYXRpb25h
bCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgICAgICAqCisgKiBDb3B5cmln
aHQgKEMpIDIwMDktMjAxNSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3Jh
dGlvbiBhbmQgICAgKgogICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqCiAgKi8KQEAgLTI0MCwxOCArMjQwLDI3IEBAIGNsYXNzICBVX0kxOE5fQVBJIEN1cnJl
bmN5UGx1cmFsSW5mbyA6IHB1YmxpYyBVT2JqZWN0IHsKICAgICAvKgogICAgICAqIFRoZSBwbHVy
YWwgcnVsZSBpcyB1c2VkIHRvIGZvcm1hdCBjdXJyZW5jeSBwbHVyYWwgbmFtZSwKICAgICAgKiBm
b3IgZXhhbXBsZTogIjMuMDAgVVMgRG9sbGFycyIuCi0gICAgICogSWYgdGhlcmUgYXJlIDMgY3Vy
cmVuY3kgc2lnbnMgaW4gdGhlIGN1cnJlbmN5IHBhdHR0ZXJuLAorICAgICAqIElmIHRoZXJlIGFy
ZSAzIGN1cnJlbmN5IHNpZ25zIGluIHRoZSBjdXJyZW5jeSBwYXR0ZXJuLAogICAgICAqIHRoZSAz
IGN1cnJlbmN5IHNpZ25zIHdpbGwgYmUgcmVwbGFjZWQgYnkgY3VycmVuY3kgcGx1cmFsIG5hbWUu
CiAgICAgICovCiAgICAgUGx1cmFsUnVsZXMqIGZQbHVyYWxSdWxlczsKIAogICAgIC8vIGxvY2Fs
ZQogICAgIExvY2FsZSogZkxvY2FsZTsKKworcHJpdmF0ZToKKyAgICAvKioKKyAgICAqIEFuIGlu
dGVybmFsIHN0YXR1cyB2YXJpYWJsZSB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIG9iamVjdCBp
cyBpbiBhbiAnaW52YWxpZCcgc3RhdGUuCisgICAgKiBVc2VkIGJ5IGNvcHkgY29uc3RydWN0b3Is
IHRoZSBhc3NpZ25tZW50IG9wZXJhdG9yIGFuZCB0aGUgY2xvbmUgbWV0aG9kLgorICAgICovCisg
ICAgVUVycm9yQ29kZSBmSW50ZXJuYWxTdGF0dXM7CiB9OwogCiAKIGlubGluZSBVQm9vbAotQ3Vy
cmVuY3lQbHVyYWxJbmZvOjpvcGVyYXRvciE9KGNvbnN0IEN1cnJlbmN5UGx1cmFsSW5mbyYgaW5m
bykgY29uc3QgeyAgICAgICAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KGluZm8pOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gIAorQ3VycmVuY3lQ
bHVyYWxJbmZvOjpvcGVyYXRvciE9KGNvbnN0IEN1cnJlbmN5UGx1cmFsSW5mbyYgaW5mbykgY29u
c3QgeworICAgIHJldHVybiAhb3BlcmF0b3I9PShpbmZvKTsKK30gIAogCiBVX05BTUVTUEFDRV9F
TkQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9pY3UvdW5pY29kZS9jdXJydW5pdC5oIGIvU291
cmNlL1dURi9pY3UvdW5pY29kZS9jdXJydW5pdC5oCmluZGV4IGNhOTBhY2I3OTE4MzMyNWYxZTBl
Yjg5NjRiOGRjNjNiMWQ2NmE5ODguLjQwOGQ4ZDM1OWYzYjYwYjYwOTZmNTA2MTNiYzg3YjU4NTUy
MjNhYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvY3VycnVuaXQuaAorKysg
Yi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL2N1cnJ1bml0LmgKQEAgLTM4LDEyICszOCwxMyBAQCBj
bGFzcyBVX0kxOE5fQVBJIEN1cnJlbmN5VW5pdDogcHVibGljIE1lYXN1cmVVbml0IHsKICBwdWJs
aWM6CiAgICAgLyoqCiAgICAgICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4gIEluaXRpYWxpemVzIGN1
cnJlbmN5IGNvZGUgdG8gIlhYWCIgKG5vIGN1cnJlbmN5KS4KLSAgICAgKiBAZHJhZnQgSUNVIDYw
CisgICAgICogQHN0YWJsZSBJQ1UgNjAKICAgICAgKi8KICAgICBDdXJyZW5jeVVuaXQoKTsKIAog
ICAgIC8qKgogICAgICAqIENvbnN0cnVjdCBhbiBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gSVNPIGN1
cnJlbmN5IGNvZGUuCisgICAgICoKICAgICAgKiBAcGFyYW0gaXNvQ29kZSB0aGUgMy1sZXR0ZXIg
SVNPIDQyMTcgY3VycmVuY3kgY29kZTsgbXVzdCBoYXZlCiAgICAgICogbGVuZ3RoIDMgYW5kIG5l
ZWQgbm90IGJlIE5VTC10ZXJtaW5hdGVkLiBJZiBOVUxMLCB0aGUgY3VycmVuY3kKICAgICAgKiBp
cyBpbml0aWFsaXplZCB0byB0aGUgdW5rbm93biBjdXJyZW5jeSBYWFguCkBAIC01MywyMyArNTQs
MzQgQEAgY2xhc3MgVV9JMThOX0FQSSBDdXJyZW5jeVVuaXQ6IHB1YmxpYyBNZWFzdXJlVW5pdCB7
CiAgICAgICovCiAgICAgQ3VycmVuY3lVbml0KENvbnN0Q2hhcjE2UHRyIGlzb0NvZGUsIFVFcnJv
ckNvZGUgJmVjKTsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLyoqCisgICAgICog
Q29uc3RydWN0IGFuIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBJU08gY3VycmVuY3kgY29kZS4KKyAg
ICAgKgorICAgICAqIEBwYXJhbSBpc29Db2RlIHRoZSAzLWxldHRlciBJU08gNDIxNyBjdXJyZW5j
eSBjb2RlOyBtdXN0IGhhdmUKKyAgICAgKiBsZW5ndGggMy4gSWYgaW52YWxpZCwgdGhlIGN1cnJl
bmN5IGlzIGluaXRpYWxpemVkIHRvIFhYWC4KKyAgICAgKiBAcGFyYW0gZWMgaW5wdXQtb3V0cHV0
IGVycm9yIGNvZGUuIElmIHRoZSBpc29Db2RlIGlzIGludmFsaWQsCisgICAgICogdGhlbiB0aGlz
IHdpbGwgYmUgc2V0IHRvIGEgZmFpbGluZyB2YWx1ZS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0Cisg
ICAgICovCisgICAgQ3VycmVuY3lVbml0KFN0cmluZ1BpZWNlIGlzb0NvZGUsIFVFcnJvckNvZGUg
JmVjKTsKKyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLworCiAgICAgLyoqCiAgICAgICog
Q29weSBjb25zdHJ1Y3RvcgogICAgICAqIEBzdGFibGUgSUNVIDMuMAogICAgICAqLwogICAgIEN1
cnJlbmN5VW5pdChjb25zdCBDdXJyZW5jeVVuaXQmIG90aGVyKTsKIAotI2lmbmRlZiBVX0hJREVf
RFJBRlRfQVBJCiAgICAgLyoqCiAgICAgICogQ29weSBjb25zdHJ1Y3RvciBmcm9tIE1lYXN1cmVV
bml0LiBUaGlzIGNvbnN0cnVjdG9yIGFsbG93cyB5b3UgdG8KICAgICAgKiByZXN0b3JlIGEgQ3Vy
cmVuY3lVbml0IHRoYXQgd2FzIHNsaWNlZCB0byBNZWFzdXJlVW5pdC4KICAgICAgKgogICAgICAq
IEBwYXJhbSBtZWFzdXJlVW5pdCBUaGUgTWVhc3VyZVVuaXQgdG8gY29weSBmcm9tLgogICAgICAq
IEBwYXJhbSBlYyBTZXQgdG8gYSBmYWlsaW5nIHZhbHVlIGlmIHRoZSBNZWFzdXJlVW5pdCBpcyBu
b3QgYSBjdXJyZW5jeS4KLSAgICAgKiBAZHJhZnQgSUNVIDYwCisgICAgICogQHN0YWJsZSBJQ1Ug
NjAKICAgICAgKi8KICAgICBDdXJyZW5jeVVuaXQoY29uc3QgTWVhc3VyZVVuaXQmIG1lYXN1cmVV
bml0LCBVRXJyb3JDb2RlICZlYyk7Ci0jZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KIAog
ICAgIC8qKgogICAgICAqIEFzc2lnbm1lbnQgb3BlcmF0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvaWN1L3VuaWNvZGUvZGF0ZWZtdC5oIGIvU291cmNlL1dURi9pY3UvdW5pY29kZS9kYXRlZm10
LmgKaW5kZXggZjhiY2Y1NGJmYjM1MWY4NjQ1NTVkNTEzYTEyODMzYzlkY2I5ZDJhNC4uODFlYjhm
OWI1MjU1ODU3ZjFmNWQzOGY2ZGUxOGJhZWJlYzk1YThlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri9pY3UvdW5pY29kZS9kYXRlZm10LmgKKysrIGIvU291cmNlL1dURi9pY3UvdW5pY29kZS9kYXRl
Zm10LmgKQEAgLTQzLDEzICs0MywxNyBAQCBVX05BTUVTUEFDRV9CRUdJTgogY2xhc3MgVGltZVpv
bmU7CiBjbGFzcyBEYXRlVGltZVBhdHRlcm5HZW5lcmF0b3I7CiAKLS8vIGV4cGxpY2l0IHRlbXBs
YXRlIGluc3RhbnRpYXRpb24uIHNlZSBkaWdpdGxzdC5oCi0vLyAoV2hlbiBidWlsZGluZyBETExz
IGZvciBXaW5kb3dzIHRoaXMgaXMgcmVxdWlyZWQuKQotI2lmIFVfUEZfV0lORE9XUyA8PSBVX1BM
QVRGT1JNICYmIFVfUExBVEZPUk0gPD0gVV9QRl9DWUdXSU4KKy8qKgorICogXGNvbmQKKyAqIEV4
cG9ydCBhbiBleHBsaWNpdCB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uLiAoU2VlIGRpZ2l0bHN0Lmgs
IGRhdGVmbXQuaCwgYW5kIG90aGVycy4pCisgKiAoV2hlbiBidWlsZGluZyBETExzIGZvciBXaW5k
b3dzIHRoaXMgaXMgcmVxdWlyZWQuKQorICovCisjaWYgVV9QRl9XSU5ET1dTIDw9IFVfUExBVEZP
Uk0gJiYgVV9QTEFURk9STSA8PSBVX1BGX0NZR1dJTiAmJiAhZGVmaW5lZChVX0lOX0RPWFlHRU4p
CiB0ZW1wbGF0ZSBjbGFzcyBVX0kxOE5fQVBJIEVudW1TZXQ8VURhdGVGb3JtYXRCb29sZWFuQXR0
cmlidXRlLAogICAgICAgICAgICAgMCwgCiAgICAgICAgICAgICBVREFUX0JPT0xFQU5fQVRUUklC
VVRFX0NPVU5UPjsKICNlbmRpZgorLyoqIFxlbmRjb25kICovCiAKIC8qKgogICogRGF0ZUZvcm1h
dCBpcyBhbiBhYnN0cmFjdCBjbGFzcyBmb3IgYSBmYW1pbHkgb2YgY2xhc3NlcyB0aGF0IGNvbnZl
cnQgZGF0ZXMgYW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL2RjZm10c3lt
LmggYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL2RjZm10c3ltLmgKaW5kZXggMmY4MjRjZWMzMDg3
ZjU5OWMwNTI4ZDExOGIzZTgzYTdjMGQ2Mzc3My4uNTVlM2Q4YTZiM2I1ZWM4NDM2ZDVmNGYzNDg4
YjQ5M2RmZTQ4MWFmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9pY3UvdW5pY29kZS9kY2ZtdHN5
bS5oCisrKyBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvZGNmbXRzeW0uaApAQCAtMTgxLDcgKzE4
MSw2IEBAIGNsYXNzIFVfSTE4Tl9BUEkgRGVjaW1hbEZvcm1hdFN5bWJvbHMgOiBwdWJsaWMgVU9i
amVjdCB7CiAgICAgICovCiAgICAgRGVjaW1hbEZvcm1hdFN5bWJvbHMoY29uc3QgTG9jYWxlJiBs
b2NhbGUsIFVFcnJvckNvZGUmIHN0YXR1cyk7CiAKLSNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQog
ICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBEZWNpbWFsRm9ybWF0U3ltYm9scyBpbnN0YW5jZSBm
b3IgdGhlIGdpdmVuIGxvY2FsZSB3aXRoIGRpZ2l0cyBhbmQgc3ltYm9scwogICAgICAqIGNvcnJl
c3BvbmRpbmcgdG8gdGhlIGdpdmVuIE51bWJlcmluZ1N5c3RlbS4KQEAgLTE5NiwxMCArMTk1LDkg
QEAgY2xhc3MgVV9JMThOX0FQSSBEZWNpbWFsRm9ybWF0U3ltYm9scyA6IHB1YmxpYyBVT2JqZWN0
IHsKICAgICAgKiBAcGFyYW0gbnMgICAgICAgIFRoZSBudW1iZXJpbmcgc3lzdGVtLgogICAgICAq
IEBwYXJhbSBzdGF0dXMgICAgSW5wdXQvb3V0cHV0IHBhcmFtZXRlciwgc2V0IHRvIHN1Y2Nlc3Mg
b3IKICAgICAgKiAgICAgICAgICAgICAgICAgIGZhaWx1cmUgY29kZSB1cG9uIHJldHVybi4KLSAg
ICAgKiBAZHJhZnQgSUNVIDYwCisgICAgICogQHN0YWJsZSBJQ1UgNjAKICAgICAgKi8KICAgICBE
ZWNpbWFsRm9ybWF0U3ltYm9scyhjb25zdCBMb2NhbGUmIGxvY2FsZSwgY29uc3QgTnVtYmVyaW5n
U3lzdGVtJiBucywgVUVycm9yQ29kZSYgc3RhdHVzKTsKLSNlbmRpZiAgLyogVV9ISURFX0RSQUZU
X0FQSSAqLwogCiAgICAgLyoqCiAgICAgICogQ3JlYXRlIGEgRGVjaW1hbEZvcm1hdFN5bWJvbHMg
b2JqZWN0IGZvciB0aGUgZGVmYXVsdCBsb2NhbGUuCkBAIC00MDYsNyArNDA0LDcgQEAgY2xhc3Mg
VV9JMThOX0FQSSBEZWNpbWFsRm9ybWF0U3ltYm9scyA6IHB1YmxpYyBVT2JqZWN0IHsKICAgICAg
KiByZXR1cm5pbmcgYSBjb25zdCByZWZlcmVuY2UgdG8gb25lIG9mIHRoZSBzeW1ib2wgc3RyaW5n
cy4KICAgICAgKiBUaGUgcmV0dXJuZWQgcmVmZXJlbmNlIGJlY29tZXMgaW52YWxpZCB3aGVuIHRo
ZSBzeW1ib2wgaXMgY2hhbmdlZAogICAgICAqIG9yIHdoZW4gdGhlIERlY2ltYWxGb3JtYXRTeW1i
b2xzIGFyZSBkZXN0cm95ZWQuCi0gICAgICogTm90ZTogbW92ZWQgI2lmbmRlZiBVX0hJREVfSU5U
RVJOQUxfQVBJIGFmdGVyIHRoaXMsIHNpbmNlIHRoaXMgaXMgbmVlZGVkIGZvciBpbmxpbmUgaW4g
RGVjaW1hbEZvcm1hdAorICAgICAqIE5vdGU6IG1vdmVkIFwjaWZuZGVmIFVfSElERV9JTlRFUk5B
TF9BUEkgYWZ0ZXIgdGhpcywgc2luY2UgdGhpcyBpcyBuZWVkZWQgZm9yIGlubGluZSBpbiBEZWNp
bWFsRm9ybWF0CiAgICAgICoKICAgICAgKiBUaGlzIGlzIG5vdCBjdXJyZW50bHkgc3RhYmxlIEFQ
SSwgYnV0IGlmIHlvdSB0aGluayBpdCBzaG91bGQgYmUgc3RhYmxlLAogICAgICAqIHBvc3QgYSBj
b21tZW50IG9uIHRoZSBmb2xsb3dpbmcgdGlja2V0IGFuZCB0aGUgSUNVIHRlYW0gd2lsbCB0YWtl
IGEgbG9vazoKQEAgLTUzMSw3ICs1MjksNyBAQCBpbmxpbmUgY29uc3QgVW5pY29kZVN0cmluZyYg
RGVjaW1hbEZvcm1hdFN5bWJvbHM6OmdldENvbnN0RGlnaXRTeW1ib2woaW50MzJfdCBkaQogICAg
IEVOdW1iZXJGb3JtYXRTeW1ib2wga2V5ID0gc3RhdGljX2Nhc3Q8RU51bWJlckZvcm1hdFN5bWJv
bD4oa09uZURpZ2l0U3ltYm9sICsgZGlnaXQgLSAxKTsKICAgICByZXR1cm4gZlN5bWJvbHNba2V5
XTsKIH0KLSNlbmRpZgorI2VuZGlmIC8qIFVfSElERV9JTlRFUk5BTF9BUEkgKi8KIAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL2ljdS91bmljb2RlL2RlY2ltZm10LmggYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL2RlY2lt
Zm10LmgKaW5kZXggMzc0N2Y1MTBmNzljNzk0ZjlhNDNiNDQ3NzAyZDA0MDM4OTJiY2U3MC4uNmI2
YTkzOTk5NjE5OThkNWQ2MTRiNGU5MWM1ZGQzMjEwMjRmNTdjYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi9pY3UvdW5pY29kZS9kZWNpbWZtdC5oCisrKyBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUv
ZGVjaW1mbXQuaApAQCAtNjMsMTkgKzYzLDEwIEBAIGNsYXNzIE51bWJlclBhcnNlckltcGw7CiB9
CiB9CiAKLS8vIGV4cGxpY2l0IHRlbXBsYXRlIGluc3RhbnRpYXRpb24uIHNlZSBkaWdpdGxzdC5o
Ci0vLyAoV2hlbiBidWlsZGluZyBETExzIGZvciBXaW5kb3dzIHRoaXMgaXMgcmVxdWlyZWQuKQot
I2lmIFVfUEZfV0lORE9XUyA8PSBVX1BMQVRGT1JNICYmIFVfUExBVEZPUk0gPD0gVV9QRl9DWUdX
SU4KLXRlbXBsYXRlIGNsYXNzIFVfSTE4Tl9BUEkgICAgRW51bVNldDxVTnVtYmVyRm9ybWF0QXR0
cmlidXRlLAotICAgICAgICAgICAgVU5VTV9NQVhfTk9OQk9PTEVBTl9BVFRSSUJVVEUrMSwKLSAg
ICAgICAgICAgIFVOVU1fTElNSVRfQk9PTEVBTl9BVFRSSUJVVEU+OwotI2VuZGlmCi0KIC8qKgot
ICogPHA+PHN0cm9uZz5JTVBPUlRBTlQ6PC9zdHJvbmc+IE5ldyB1c2VycyBhcmUgc3Ryb25nbHkg
ZW5jb3VyYWdlZCB0byBzZWUgaWYKKyAqICoqSU1QT1JUQU5UOioqIE5ldyB1c2VycyBhcmUgc3Ry
b25nbHkgZW5jb3VyYWdlZCB0byBzZWUgaWYKICAqIG51bWJlcmZvcm1hdHRlci5oIGZpdHMgdGhl
aXIgdXNlIGNhc2UuICBBbHRob3VnaCBub3QgZGVwcmVjYXRlZCwgdGhpcyBoZWFkZXIKICAqIGlz
IHByb3ZpZGVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBvbmx5LgotICogPGhyLz4KICAq
CiAgKiBEZWNpbWFsRm9ybWF0IGlzIGEgY29uY3JldGUgc3ViY2xhc3Mgb2YgTnVtYmVyRm9ybWF0
IHRoYXQgZm9ybWF0cyBkZWNpbWFsCiAgKiBudW1iZXJzLiBJdCBoYXMgYSB2YXJpZXR5IG9mIGZl
YXR1cmVzIGRlc2lnbmVkIHRvIG1ha2UgaXQgcG9zc2libGUgdG8gcGFyc2UKQEAgLTg1LDEzICs3
NiwxMyBAQCB0ZW1wbGF0ZSBjbGFzcyBVX0kxOE5fQVBJICAgIEVudW1TZXQ8VU51bWJlckZvcm1h
dEF0dHJpYnV0ZSwKICAqICgiMS4yM0U0IiksIHBlcmNlbnRhZ2VzICgiMTIlIiksIGFuZCBjdXJy
ZW5jeSBhbW91bnRzICgiJDEyMyIsICJVU0QxMjMiLAogICogIjEyMyBVUyBkb2xsYXJzIikuICBB
bGwgb2YgdGhlc2UgZmxhdm9ycyBjYW4gYmUgZWFzaWx5IGxvY2FsaXplZC4KICAqCi0gKiA8cD5U
byBvYnRhaW4gYSBOdW1iZXJGb3JtYXQgZm9yIGEgc3BlY2lmaWMgbG9jYWxlIChpbmNsdWRpbmcg
dGhlIGRlZmF1bHQKKyAqIFRvIG9idGFpbiBhIE51bWJlckZvcm1hdCBmb3IgYSBzcGVjaWZpYyBs
b2NhbGUgKGluY2x1ZGluZyB0aGUgZGVmYXVsdAogICogbG9jYWxlKSBjYWxsIG9uZSBvZiBOdW1i
ZXJGb3JtYXQncyBmYWN0b3J5IG1ldGhvZHMgc3VjaCBhcwogICogY3JlYXRlSW5zdGFuY2UoKS4g
RG8gbm90IGNhbGwgdGhlIERlY2ltYWxGb3JtYXQgY29uc3RydWN0b3JzIGRpcmVjdGx5LCB1bmxl
c3MKICAqIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZywgc2luY2UgdGhlIE51bWJlckZvcm1h
dCBmYWN0b3J5IG1ldGhvZHMgbWF5CiAgKiByZXR1cm4gc3ViY2xhc3NlcyBvdGhlciB0aGFuIERl
Y2ltYWxGb3JtYXQuCiAgKgotICogPHA+PHN0cm9uZz5FeGFtcGxlIFVzYWdlPC9zdHJvbmc+Cisg
KiAqKkV4YW1wbGUgVXNhZ2UqKgogICoKICAqIFxjb2RlCiAgKiAgICAgLy8gTm9ybWFsbHkgd2Ug
d291bGQgaGF2ZSBhIEdVSSB3aXRoIGEgbWVudSBmb3IgdGhpcwpAQCAtMTM1LDExICsxMjYsMTEg
QEAgdGVtcGxhdGUgY2xhc3MgVV9JMThOX0FQSSAgICBFbnVtU2V0PFVOdW1iZXJGb3JtYXRBdHRy
aWJ1dGUsCiAgKiAgICAgICAgIH0KICAqICAgICB9CiAgKiBcZW5kY29kZQotICogPFA+Ci0gKiBB
bm90aGVyIGV4YW1wbGUgdXNlIGNyZWF0ZUluc3RhbmNlKHN0eWxlKQotICogPFA+Ci0gKiA8cHJl
PgotICogPHN0cm9uZz4vLyBQcmludCBvdXQgYSBudW1iZXIgdXNpbmcgdGhlIGxvY2FsaXplZCBu
dW1iZXIsIGN1cnJlbmN5LAorICoKKyAqICoqQW5vdGhlciBleGFtcGxlIHVzZSBjcmVhdGVJbnN0
YW5jZShzdHlsZSkqKgorICoKKyAqIFxjb2RlCisgKiAvLyBQcmludCBvdXQgYSBudW1iZXIgdXNp
bmcgdGhlIGxvY2FsaXplZCBudW1iZXIsIGN1cnJlbmN5LAogICogLy8gcGVyY2VudCwgc2NpZW50
aWZpYywgaW50ZWdlciwgaXNvIGN1cnJlbmN5LCBhbmQgcGx1cmFsIGN1cnJlbmN5CiAgKiAvLyBm
b3JtYXQgZm9yIGVhY2ggbG9jYWxlPC9zdHJvbmc+CiAgKiBMb2NhbGUqIGxvY2FsZSA9IG5ldyBM
b2NhbGUoImVuIiwgIlVTIik7CkBAIC0xNTAsMTEgKzE0MSwxMyBAQCB0ZW1wbGF0ZSBjbGFzcyBV
X0kxOE5fQVBJICAgIEVudW1TZXQ8VU51bWJlckZvcm1hdEF0dHJpYnV0ZSwKICAqIGZvciAoaW50
IGo9TnVtYmVyRm9ybWF0OjprTnVtYmVyU3R5bGU7CiAgKiAgICAgIGo8PU51bWJlckZvcm1hdDo6
a1BsdXJhbEN1cnJlbmN5U3R5bGU7CiAgKiAgICAgICsraikgewotICogICAgIE51bWJlckZvcm1h
dCogZm9ybWF0ID0gTnVtYmVyRm9ybWF0OjpjcmVhdGVJbnN0YW5jZShsb2NhbGUsIGosIHN1Y2Nl
c3MpOworICogICAgIE51bWJlckZvcm1hdCogZm9ybSA9IE51bWJlckZvcm1hdDo6Y3JlYXRlSW5z
dGFuY2UobG9jYWxlLCBqLCBzdWNjZXNzKTsKICAqICAgICBzdHIucmVtb3ZlKCk7CiAgKiAgICAg
Y291dCA8PCAiZm9ybWF0IHJlc3VsdCAiIDw8IGZvcm0tPmZvcm1hdChteU51bWJlciwgc3RyKSA8
PCBlbmRsOwogICogICAgIGZvcm1hdC0+cGFyc2UoZm9ybS0+Zm9ybWF0KG15TnVtYmVyLCBzdHIp
LCBmbXRhYmxlLCBzdWNjZXNzKTsKLSAqIH08L3ByZT4KKyAqICAgICBkZWxldGUgZm9ybTsKKyAq
IH0KKyAqIFxlbmRjb2RlCiAgKgogICoKICAqIDxwPjxzdHJvbmc+UGF0dGVybnM8L3N0cm9uZz4K
QEAgLTI4Myw3ICsyNzYsNyBAQCB0ZW1wbGF0ZSBjbGFzcyBVX0kxOE5fQVBJICAgIEVudW1TZXQ8
VU51bWJlckZvcm1hdEF0dHJpYnV0ZSwKICAqICAgICA8dGQ+UGFkIGVzY2FwZSwgcHJlY2VkZXMg
cGFkIGNoYXJhY3RlcgogICogPC90YWJsZT4KICAqCi0gKiA8cD5BIERlY2ltYWxGb3JtYXQgcGF0
dGVybiBjb250YWlucyBhIHBvc3RpdmUgYW5kIG5lZ2F0aXZlCisgKiA8cD5BIERlY2ltYWxGb3Jt
YXQgcGF0dGVybiBjb250YWlucyBhIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZQogICogc3VicGF0dGVy
biwgZm9yIGV4YW1wbGUsICIjLCMjMC4wMDsoIywjIzAuMDApIi4gIEVhY2ggc3VicGF0dGVybiBo
YXMgYQogICogcHJlZml4LCBhIG51bWVyaWMgcGFydCwgYW5kIGEgc3VmZml4LiAgSWYgdGhlcmUg
aXMgbm8gZXhwbGljaXQgbmVnYXRpdmUKICAqIHN1YnBhdHRlcm4sIHRoZSBuZWdhdGl2ZSBzdWJw
YXR0ZXJuIGlzIHRoZSBsb2NhbGl6ZWQgbWludXMgc2lnbiBwcmVmaXhlZCB0byB0aGUKQEAgLTQx
OCw3ICs0MTEsNyBAQCB0ZW1wbGF0ZSBjbGFzcyBVX0kxOE5fQVBJICAgIEVudW1TZXQ8VU51bWJl
ckZvcm1hdEF0dHJpYnV0ZSwKICAqCiAgKiA8bGk+SWYgdGhlIG51bWJlciBvZiBhY3R1YWwgZnJh
Y3Rpb24gZGlnaXRzIGlzIGxlc3MgdGhhbiB0aGUKICAqIDxlbT5taW5pbXVtIGZyYWN0aW9uIGRp
Z2l0czwvZW0+LCB0aGVuIHRyYWlsaW5nIHplcm9zIGFyZSBhZGRlZC4KLSAqIEZvciBleGFtcGxl
LCAwLjEyNSBpcyBmb3JtYXR0ZWQgYXMgIjAuMTI1MCIgaWYgdGhlIG1pbWltdW0gZnJhY3Rpb24K
KyAqIEZvciBleGFtcGxlLCAwLjEyNSBpcyBmb3JtYXR0ZWQgYXMgIjAuMTI1MCIgaWYgdGhlIG1p
bmltdW0gZnJhY3Rpb24KICAqIGRpZ2l0cyBpcyBzZXQgdG8gNC4KICAqCiAgKiA8bGk+VHJhaWxp
bmcgZnJhY3Rpb25hbCB6ZXJvcyBhcmUgbm90IGRpc3BsYXllZCBpZiB0aGV5IG9jY3VyCkBAIC01
ODMsOSArNTc2LDkgQEAgdGVtcGxhdGUgY2xhc3MgVV9JMThOX0FQSSAgICBFbnVtU2V0PFVOdW1i
ZXJGb3JtYXRBdHRyaWJ1dGUsCiAgKiBjb3VudCBvZiA8Y29kZT5nZXRNYXhpbXVtU2lnbmlmaWNh
bnREaWdpdHMoKSAtIDE8L2NvZGU+LiBGb3IgZXhhbXBsZSwgdGhlCiAgKiBwYXR0ZXJuIDxjb2Rl
PiJAQCMjI0UwIjwvY29kZT4gaXMgZXF1aXZhbGVudCB0byA8Y29kZT4iMC4wIyMjRTAiPC9jb2Rl
Pi4KICAqCi0gKiA8bGk+SWYgc2lnbmZpY2FudCBkaWdpdHMgYXJlIGluIHVzZSwgdGhlbiB0aGUg
aW50ZWdlciBhbmQgZnJhY3Rpb24KKyAqIDxsaT5JZiBzaWduaWZpY2FudCBkaWdpdHMgYXJlIGlu
IHVzZSwgdGhlbiB0aGUgaW50ZWdlciBhbmQgZnJhY3Rpb24KICAqIGRpZ2l0IGNvdW50cywgYXMg
c2V0IHZpYSB0aGUgQVBJLCBhcmUgaWdub3JlZC4gIElmIHNpZ25pZmljYW50Ci0gKiBkaWdpdHMg
YXJlIG5vdCBpbiB1c2UsIHRoZW4gdGhlIHNpZ25maWNhbnQgZGlnaXQgY291bnRzLCBhcyBzZXQg
dmlhCisgKiBkaWdpdHMgYXJlIG5vdCBpbiB1c2UsIHRoZW4gdGhlIHNpZ25pZmljYW50IGRpZ2l0
IGNvdW50cywgYXMgc2V0IHZpYQogICogdGhlIEFQSSwgYXJlIGlnbm9yZWQuCiAgKgogICogPC91
bD4KQEAgLTYzOSw3ICs2MzIsNyBAQCB0ZW1wbGF0ZSBjbGFzcyBVX0kxOE5fQVBJICAgIEVudW1T
ZXQ8VU51bWJlckZvcm1hdEF0dHJpYnV0ZSwKICAqIGluY3JlbWVudCBpbiB0aGUgcGF0dGVybiBp
dHNlbGYuICAiIywjNTAiIHNwZWNpZmllcyBhIHJvdW5kaW5nIGluY3JlbWVudCBvZgogICogNTAu
ICAiIywjIzAuMDUiIHNwZWNpZmllcyBhIHJvdW5kaW5nIGluY3JlbWVudCBvZiAwLjA1LgogICoK
LSAqIDxwPkluIHRoZSBhYnNlbnNlIG9mIGFuIGV4cGxpY2l0IHJvdW5kaW5nIGluY3JlbWVudCBu
dW1iZXJzIGFyZQorICogPHA+SW4gdGhlIGFic2VuY2Ugb2YgYW4gZXhwbGljaXQgcm91bmRpbmcg
aW5jcmVtZW50IG51bWJlcnMgYXJlCiAgKiByb3VuZGVkIHRvIHRoZWlyIGZvcm1hdHRlZCB3aWR0
aC4KICAqCiAgKiA8dWw+CkBAIC02OTAsNyArNjgzLDcgQEAgY2xhc3MgVV9JMThOX0FQSSBEZWNp
bWFsRm9ybWF0IDogcHVibGljIE51bWJlckZvcm1hdCB7CiAgICAgICogbG9jYWxlLgogICAgICAq
IDxwPgogICAgICAqIDxzdHJvbmc+Tk9URTo8L3N0cm9uZz4gTmV3IHVzZXJzIGFyZSBzdHJvbmds
eSBlbmNvdXJhZ2VkIHRvIHVzZQotICAgICAqIHtAbGluayBOdW1iZXJGb3JtYXR0ZXJ9IGluc3Rl
YWQgb2YgRGVjaW1hbEZvcm1hdC4KKyAgICAgKiAjaWN1OjpudW1iZXI6Ok51bWJlckZvcm1hdHRl
ciBpbnN0ZWFkIG9mIERlY2ltYWxGb3JtYXQuCiAgICAgICogQHBhcmFtIHN0YXR1cyAgICBPdXRw
dXQgcGFyYW0gc2V0IHRvIHN1Y2Nlc3MvZmFpbHVyZSBjb2RlLiBJZiB0aGUKICAgICAgKiAgICAg
ICAgICAgICAgICAgIHBhdHRlcm4gaXMgaW52YWxpZCB0aGlzIHdpbGwgYmUgc2V0IHRvIGEgZmFp
bHVyZSBjb2RlLgogICAgICAqIEBzdGFibGUgSUNVIDIuMApAQCAtNzA4LDcgKzcwMSw3IEBAIGNs
YXNzIFVfSTE4Tl9BUEkgRGVjaW1hbEZvcm1hdCA6IHB1YmxpYyBOdW1iZXJGb3JtYXQgewogICAg
ICAqIGxvY2FsZS4KICAgICAgKiA8cD4KICAgICAgKiA8c3Ryb25nPk5PVEU6PC9zdHJvbmc+IE5l
dyB1c2VycyBhcmUgc3Ryb25nbHkgZW5jb3VyYWdlZCB0byB1c2UKLSAgICAgKiB7QGxpbmsgTnVt
YmVyRm9ybWF0dGVyfSBpbnN0ZWFkIG9mIERlY2ltYWxGb3JtYXQuCisgICAgICogI2ljdTo6bnVt
YmVyOjpOdW1iZXJGb3JtYXR0ZXIgaW5zdGVhZCBvZiBEZWNpbWFsRm9ybWF0LgogICAgICAqIEBw
YXJhbSBwYXR0ZXJuICAgQSBub24tbG9jYWxpemVkIHBhdHRlcm4gc3RyaW5nLgogICAgICAqIEBw
YXJhbSBzdGF0dXMgICAgT3V0cHV0IHBhcmFtIHNldCB0byBzdWNjZXNzL2ZhaWx1cmUgY29kZS4g
SWYgdGhlCiAgICAgICogICAgICAgICAgICAgICAgICBwYXR0ZXJuIGlzIGludmFsaWQgdGhpcyB3
aWxsIGJlIHNldCB0byBhIGZhaWx1cmUgY29kZS4KQEAgLTcyOCw3ICs3MjEsNyBAQCBjbGFzcyBV
X0kxOE5fQVBJIERlY2ltYWxGb3JtYXQgOiBwdWJsaWMgTnVtYmVyRm9ybWF0IHsKICAgICAgKiBh
IE51bWJlckZvcm1hdCBmYWN0b3J5IG1ldGhvZC4KICAgICAgKiA8cD4KICAgICAgKiA8c3Ryb25n
Pk5PVEU6PC9zdHJvbmc+IE5ldyB1c2VycyBhcmUgc3Ryb25nbHkgZW5jb3VyYWdlZCB0byB1c2UK
LSAgICAgKiB7QGxpbmsgTnVtYmVyRm9ybWF0dGVyfSBpbnN0ZWFkIG9mIERlY2ltYWxGb3JtYXQu
CisgICAgICogI2ljdTo6bnVtYmVyOjpOdW1iZXJGb3JtYXR0ZXIgaW5zdGVhZCBvZiBEZWNpbWFs
Rm9ybWF0LgogICAgICAqCiAgICAgICogQHBhcmFtIHBhdHRlcm4gICAgICAgICAgIGEgbm9uLWxv
Y2FsaXplZCBwYXR0ZXJuIHN0cmluZwogICAgICAqIEBwYXJhbSBzeW1ib2xzVG9BZG9wdCAgICB0
aGUgc2V0IG9mIHN5bWJvbHMgdG8gYmUgdXNlZC4gIFRoZSBjYWxsZXIgc2hvdWxkIG5vdApAQCAt
NzgyLDcgKzc3NSw3IEBAIGNsYXNzIFVfSTE4Tl9BUEkgRGVjaW1hbEZvcm1hdCA6IHB1YmxpYyBO
dW1iZXJGb3JtYXQgewogICAgICAqIE1heSByZXR1cm4gVV9VTlNVUFBPUlRFRF9FUlJPUiBpZiB0
aGlzIGluc3RhbmNlIGRvZXMgbm90IHN1cHBvcnQKICAgICAgKiB0aGUgc3BlY2lmaWVkIGF0dHJp
YnV0ZS4KICAgICAgKiBAcGFyYW0gYXR0ciB0aGUgYXR0cmlidXRlIHRvIHNldAotICAgICAqIEBw
YXJhbSBuZXd2YWx1ZSBuZXcgdmFsdWUKKyAgICAgKiBAcGFyYW0gbmV3VmFsdWUgbmV3IHZhbHVl
CiAgICAgICogQHBhcmFtIHN0YXR1cyB0aGUgZXJyb3IgdHlwZQogICAgICAqIEByZXR1cm4gKnRo
aXMgLSBmb3IgY2hhaW5pbmcgKGV4YW1wbGU6IGZvcm1hdC5zZXRBdHRyaWJ1dGUoLi4uKS5zZXRB
dHRyaWJ1dGUoLi4uKSApCiAgICAgICogQHN0YWJsZSBJQ1UgNTEKQEAgLTgzOSwxMiArODMyLDEy
IEBAIGNsYXNzIFVfSTE4Tl9BUEkgRGVjaW1hbEZvcm1hdCA6IHB1YmxpYyBOdW1iZXJGb3JtYXQg
ewogICAgICAqIGEgTnVtYmVyRm9ybWF0IGZhY3RvcnkgbWV0aG9kLgogICAgICAqIDxwPgogICAg
ICAqIDxzdHJvbmc+Tk9URTo8L3N0cm9uZz4gTmV3IHVzZXJzIGFyZSBzdHJvbmdseSBlbmNvdXJh
Z2VkIHRvIHVzZQotICAgICAqIHtAbGluayBOdW1iZXJGb3JtYXR0ZXJ9IGluc3RlYWQgb2YgRGVj
aW1hbEZvcm1hdC4KKyAgICAgKiAjaWN1OjpudW1iZXI6Ok51bWJlckZvcm1hdHRlciBpbnN0ZWFk
IG9mIERlY2ltYWxGb3JtYXQuCiAgICAgICoKICAgICAgKiBAcGFyYW0gcGF0dGVybiAgICAgICAg
ICAgYSBub24tbG9jYWxpemVkIHBhdHRlcm4gc3RyaW5nCiAgICAgICogQHBhcmFtIHN5bWJvbHNU
b0Fkb3B0ICAgIHRoZSBzZXQgb2Ygc3ltYm9scyB0byBiZSB1c2VkLiAgVGhlIGNhbGxlciBzaG91
bGQgbm90CiAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzIG9iamVj
dCBhZnRlciBtYWtpbmcgdGhpcyBjYWxsLgotICAgICAqIEBwYXJhbSBwYXJzZUVycm9yICAgICAg
ICBPdXRwdXQgcGFyYW0gdG8gcmVjZWl2ZSBlcnJvcnMgb2NjdXJlZCBkdXJpbmcgcGFyc2luZwor
ICAgICAqIEBwYXJhbSBwYXJzZUVycm9yICAgICAgICBPdXRwdXQgcGFyYW0gdG8gcmVjZWl2ZSBl
cnJvcnMgb2NjdXJyZWQgZHVyaW5nIHBhcnNpbmcKICAgICAgKiBAcGFyYW0gc3RhdHVzICAgICAg
ICAgICAgT3V0cHV0IHBhcmFtIHNldCB0byBzdWNjZXNzL2ZhaWx1cmUgY29kZS4gSWYgdGhlCiAg
ICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gaXMgaW52YWxpZCB0aGlzIHdp
bGwgYmUgc2V0IHRvIGEgZmFpbHVyZSBjb2RlLgogICAgICAqIEBzdGFibGUgSUNVIDIuMApAQCAt
ODY0LDcgKzg1Nyw3IEBAIGNsYXNzIFVfSTE4Tl9BUEkgRGVjaW1hbEZvcm1hdCA6IHB1YmxpYyBO
dW1iZXJGb3JtYXQgewogICAgICAqIGEgTnVtYmVyRm9ybWF0IGZhY3RvcnkgbWV0aG9kLgogICAg
ICAqIDxwPgogICAgICAqIDxzdHJvbmc+Tk9URTo8L3N0cm9uZz4gTmV3IHVzZXJzIGFyZSBzdHJv
bmdseSBlbmNvdXJhZ2VkIHRvIHVzZQotICAgICAqIHtAbGluayBOdW1iZXJGb3JtYXR0ZXJ9IGlu
c3RlYWQgb2YgRGVjaW1hbEZvcm1hdC4KKyAgICAgKiAjaWN1OjpudW1iZXI6Ok51bWJlckZvcm1h
dHRlciBpbnN0ZWFkIG9mIERlY2ltYWxGb3JtYXQuCiAgICAgICoKICAgICAgKiBAcGFyYW0gcGF0
dGVybiAgICAgICAgICAgYSBub24tbG9jYWxpemVkIHBhdHRlcm4gc3RyaW5nCiAgICAgICogQHBh
cmFtIHN5bWJvbHMgICB0aGUgc2V0IG9mIHN5bWJvbHMgdG8gYmUgdXNlZApAQCAtOTg2LDYgKzk3
OSw3IEBAIGNsYXNzIFVfSTE4Tl9BUEkgRGVjaW1hbEZvcm1hdCA6IHB1YmxpYyBOdW1iZXJGb3Jt
YXQgewogICAgICAqICAgICAgICAgICAgICAgICAgUmVzdWx0IGlzIGFwcGVuZGVkIHRvIGV4aXN0
aW5nIGNvbnRlbnRzLgogICAgICAqIEBwYXJhbSBwb3MgICAgICAgT24gaW5wdXQ6IGFuIGFsaWdu
bWVudCBmaWVsZCwgaWYgZGVzaXJlZC4KICAgICAgKiAgICAgICAgICAgICAgICAgIE9uIG91dHB1
dDogdGhlIG9mZnNldHMgb2YgdGhlIGFsaWdubWVudCBmaWVsZC4KKyAgICAgKiBAcGFyYW0gc3Rh
dHVzICAgIE91dHB1dCBwYXJhbSBmaWxsZWQgd2l0aCBzdWNjZXNzL2ZhaWx1cmUgc3RhdHVzLgog
ICAgICAqIEByZXR1cm4gICAgICAgICAgUmVmZXJlbmNlIHRvICdhcHBlbmRUbycgcGFyYW1ldGVy
LgogICAgICAqIEBpbnRlcm5hbAogICAgICAqLwpAQCAtMTAzMSw2ICsxMDI1LDcgQEAgY2xhc3Mg
VV9JMThOX0FQSSBEZWNpbWFsRm9ybWF0IDogcHVibGljIE51bWJlckZvcm1hdCB7CiAgICAgICog
ICAgICAgICAgICAgICAgICBSZXN1bHQgaXMgYXBwZW5kZWQgdG8gZXhpc3RpbmcgY29udGVudHMu
CiAgICAgICogQHBhcmFtIHBvcyAgICAgICBPbiBpbnB1dDogYW4gYWxpZ25tZW50IGZpZWxkLCBp
ZiBkZXNpcmVkLgogICAgICAqICAgICAgICAgICAgICAgICAgT24gb3V0cHV0OiB0aGUgb2Zmc2V0
cyBvZiB0aGUgYWxpZ25tZW50IGZpZWxkLgorICAgICAqIEBwYXJhbSBzdGF0dXMgICAgT3V0cHV0
IHBhcmFtIGZpbGxlZCB3aXRoIHN1Y2Nlc3MvZmFpbHVyZSBzdGF0dXMuCiAgICAgICogQHJldHVy
biAgICAgICAgICBSZWZlcmVuY2UgdG8gJ2FwcGVuZFRvJyBwYXJhbWV0ZXIuCiAgICAgICogQGlu
dGVybmFsCiAgICAgICovCkBAIC0xMTIwLDcgKzExMTUsNyBAQCBjbGFzcyBVX0kxOE5fQVBJIERl
Y2ltYWxGb3JtYXQgOiBwdWJsaWMgTnVtYmVyRm9ybWF0IHsKICAgICAgKiBkb2VzIHN0cmluZyBj
b21wYXJpc29ucyB0byB0cnkgdG8gZmluZCBhbiBvcHRpbWFsIG1hdGNoLgogICAgICAqIElmIG5v
IG9iamVjdCBjYW4gYmUgcGFyc2VkLCBpbmRleCBpcyB1bmNoYW5nZWQsIGFuZCBOVUxMIGlzCiAg
ICAgICogcmV0dXJuZWQuICBUaGUgcmVzdWx0IGlzIHJldHVybmVkIGFzIHRoZSBtb3N0IHBhcnNp
bW9uaW91cwotICAgICAqIHR5cGUgb2YgRm9ybWF0dGFibGUgdGhhdCB3aWxsIGFjY29tb2RhdGUg
YWxsIG9mIHRoZQorICAgICAqIHR5cGUgb2YgRm9ybWF0dGFibGUgdGhhdCB3aWxsIGFjY29tbW9k
YXRlIGFsbCBvZiB0aGUKICAgICAgKiBuZWNlc3NhcnkgcHJlY2lzaW9uLiAgRm9yIGV4YW1wbGUs
IGlmIHRoZSByZXN1bHQgaXMgZXhhY3RseSAxMiwKICAgICAgKiBpdCB3aWxsIGJlIHJldHVybmVk
IGFzIGEgbG9uZy4gIEhvd2V2ZXIsIGlmIGl0IGlzIDEuNSwgaXQgd2lsbAogICAgICAqIGJlIHJl
dHVybmVkIGFzIGEgZG91YmxlLgpAQCAtMTI4NSwyMCArMTI4MCwyNyBAQCBjbGFzcyBVX0kxOE5f
QVBJIERlY2ltYWxGb3JtYXQgOiBwdWJsaWMgTnVtYmVyRm9ybWF0IHsKICAgICAgKi8KICAgICB2
aXJ0dWFsIHZvaWQgc2V0TmVnYXRpdmVTdWZmaXgoY29uc3QgVW5pY29kZVN0cmluZyYgbmV3VmFs
dWUpOwogCi0jaWZuZGVmIFVfSElERV9JTlRFUk5BTF9BUEkKKyNpZm5kZWYgVV9ISURFX0RSQUZU
X0FQSQogICAgIC8qKgogICAgICAqIFdoZXRoZXIgdG8gc2hvdyB0aGUgcGx1cyBzaWduIG9uIHBv
c2l0aXZlIChub24tbmVnYXRpdmUpIG51bWJlcnM7IGZvciBleGFtcGxlLCAiKzEyIgotICAgICAq
IEBpbnRlcm5hbCBUZWNobmljYWwgUHJldmlldworICAgICAqCisgICAgICogRm9yIG1vcmUgY29u
dHJvbCBvdmVyIHNpZ24gZGlzcGxheSwgdXNlIE51bWJlckZvcm1hdHRlci4KKyAgICAgKgorICAg
ICAqIEByZXR1cm4gV2hldGhlciB0aGUgc2lnbiBpcyBzaG93biBvbiBwb3NpdGl2ZSBudW1iZXJz
IGFuZCB6ZXJvLgorICAgICAqIEBkcmFmdCBJQ1UgNjQKICAgICAgKi8KICAgICBVQm9vbCBpc1Np
Z25BbHdheXNTaG93bigpIGNvbnN0OwotI2VuZGlmICAvKiBVX0hJREVfSU5URVJOQUxfQVBJICov
CiAKICAgICAvKioKLSAgICAgKiBTZXQgd2hldGhlciB0byBzaG93IHRoZSBwbHVzIHNpZ24gb24g
cG9zaXRpdmUgKG5vbi1uZWdhdGl2ZSkgbnVtYmVyczsgZm9yIGV4YW1wbGUsICIrMTIiCi0gICAg
ICogQHBhcmFtIHZhbHVlIFRoZSBuZXcgc2V0dGluZyBmb3Igd2hldGhlciB0byBzaG93IHBsdXMg
c2lnbiBvbiBwb3NpdGl2ZSBudW1iZXJzCi0gICAgICogQGludGVybmFsIFRlY2huaWNhbCBQcmV2
aWV3CisgICAgICogU2V0IHdoZXRoZXIgdG8gc2hvdyB0aGUgcGx1cyBzaWduIG9uIHBvc2l0aXZl
IChub24tbmVnYXRpdmUpIG51bWJlcnM7IGZvciBleGFtcGxlLCAiKzEyIi4KKyAgICAgKgorICAg
ICAqIEZvciBtb3JlIGNvbnRyb2wgb3ZlciBzaWduIGRpc3BsYXksIHVzZSBOdW1iZXJGb3JtYXR0
ZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSB0byBhbHdheXMgc2hvdyBhIHNp
Z247IGZhbHNlIHRvIGhpZGUgdGhlIHNpZ24gb24gcG9zaXRpdmUgbnVtYmVycyBhbmQgemVyby4K
KyAgICAgKiBAZHJhZnQgSUNVIDY0CiAgICAgICovCi0gICAgdmlydHVhbCB2b2lkIHNldFNpZ25B
bHdheXNTaG93bihVQm9vbCB2YWx1ZSk7CisgICAgdm9pZCBzZXRTaWduQWx3YXlzU2hvd24oVUJv
b2wgdmFsdWUpOworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCiAKICAgICAvKioKICAg
ICAgKiBHZXQgdGhlIG11bHRpcGxpZXIgZm9yIHVzZSBpbiBwZXJjZW50LCBwZXJtaWxsLCBldGMu
CkBAIC0xMzQzLDcgKzEzNDUsNiBAQCBjbGFzcyBVX0kxOE5fQVBJIERlY2ltYWxGb3JtYXQgOiBw
dWJsaWMgTnVtYmVyRm9ybWF0IHsKICAgICAgKiBAZHJhZnQgSUNVIDYyCiAgICAgICovCiAgICAg
aW50MzJfdCBnZXRNdWx0aXBsaWVyU2NhbGUodm9pZCkgY29uc3Q7Ci0jZW5kaWYgIC8qIFVfSElE
RV9EUkFGVF9BUEkgKi8KIAogICAgIC8qKgogICAgICAqIFNldHMgYSBwb3dlciBvZiB0ZW4gYnkg
d2hpY2ggbnVtYmVyIHNob3VsZCBiZSBtdWx0aXBsaWVkIGJlZm9yZSBmb3JtYXR0aW5nLCB3aGlj
aApAQCAtMTM2NCw3ICsxMzY1LDggQEAgY2xhc3MgVV9JMThOX0FQSSBEZWNpbWFsRm9ybWF0IDog
cHVibGljIE51bWJlckZvcm1hdCB7CiAgICAgICogQHBhcmFtIG5ld1ZhbHVlICAgIHRoZSBuZXcg
dmFsdWUgb2YgdGhlIHBvd2VyLW9mLXRlbiBtdWx0aXBsaWVyLgogICAgICAqIEBkcmFmdCBJQ1Ug
NjIKICAgICAgKi8KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TXVsdGlwbGllclNjYWxlKGludDMyX3Qg
bmV3VmFsdWUpOworICAgIHZvaWQgc2V0TXVsdGlwbGllclNjYWxlKGludDMyX3QgbmV3VmFsdWUp
OworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCiAKICAgICAvKioKICAgICAgKiBHZXQg
dGhlIHJvdW5kaW5nIGluY3JlbWVudC4KQEAgLTE0NTcsOCArMTQ1OSw4IEBAIGNsYXNzIFVfSTE4
Tl9BUEkgRGVjaW1hbEZvcm1hdCA6IHB1YmxpYyBOdW1iZXJGb3JtYXQgewogICAgICAqIFNldCB0
aGUgY2hhcmFjdGVyIHVzZWQgdG8gcGFkIHRvIHRoZSBmb3JtYXQgd2lkdGguICBJZiBwYWRkaW5n
CiAgICAgICogaXMgbm90IGVuYWJsZWQsIHRoZW4gdGhpcyB3aWxsIHRha2UgZWZmZWN0IGlmIHBh
ZGRpbmcgaXMgbGF0ZXIKICAgICAgKiBlbmFibGVkLgotICAgICAqIEBwYXJhbSBwYWRDaGFyIGEg
c3RyaW5nIGNvbnRhaW5pbmcgdGhlIHBhZCBjaGFyY3Rlci4gSWYgdGhlIHN0cmluZwotICAgICAq
IGhhcyBsZW5ndGggMCwgdGhlbiB0aGUgcGFkIGNoYXJhY2VyIGlzIHNldCB0byAnICcuICBPdGhl
cndpc2UKKyAgICAgKiBAcGFyYW0gcGFkQ2hhciBhIHN0cmluZyBjb250YWluaW5nIHRoZSBwYWQg
Y2hhcmFjdGVyLiBJZiB0aGUgc3RyaW5nCisgICAgICogaGFzIGxlbmd0aCAwLCB0aGVuIHRoZSBw
YWQgY2hhcmFjdGVyIGlzIHNldCB0byAnICcuICBPdGhlcndpc2UKICAgICAgKiBwYWRDaGFyLmNo
YXIzMkF0KDApIHdpbGwgYmUgdXNlZCBhcyB0aGUgcGFkIGNoYXJhY3Rlci4KICAgICAgKiBAc2Vl
ICNzZXRGb3JtYXRXaWR0aAogICAgICAqIEBzZWUgI2dldEZvcm1hdFdpZHRoCkBAIC0xNjQ3LDgg
KzE2NDksNyBAQCBjbGFzcyBVX0kxOE5fQVBJIERlY2ltYWxGb3JtYXQgOiBwdWJsaWMgTnVtYmVy
Rm9ybWF0IHsKICAgICAgKi8KICAgICB2aXJ0dWFsIHZvaWQgc2V0U2Vjb25kYXJ5R3JvdXBpbmdT
aXplKGludDMyX3QgbmV3VmFsdWUpOwogCi0jaWZuZGVmIFVfSElERV9JTlRFUk5BTF9BUEkKLQor
I2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgbWlu
aW11bSBudW1iZXIgb2YgZ3JvdXBpbmcgZGlnaXRzLgogICAgICAqIEdyb3VwaW5nIHNlcGFyYXRv
cnMgYXJlIG91dHB1dCBpZiB0aGVyZSBhcmUgYXQgbGVhc3QgdGhpcyBtYW55CkBAIC0xNjU5LDMx
ICsxNjYwLDMzIEBAIGNsYXNzIFVfSTE4Tl9BUEkgRGVjaW1hbEZvcm1hdCA6IHB1YmxpYyBOdW1i
ZXJGb3JtYXQgewogICAgICAqIEZvciBleGFtcGxlLCBpZiB0aGlzIHZhbHVlIGlzIDIsIGFuZCB0
aGUgZ3JvdXBpbmcgc2l6ZSBpcyAzLCB0aGVuCiAgICAgICogOTk5OSAtPiAiOTk5OSIgYW5kIDEw
MDAwIC0+ICIxMCwwMDAiCiAgICAgICoKLSAgICAgKiBUaGlzIGlzIGEgdGVjaG5vbG9neSBwcmV2
aWV3LiBUaGlzIEFQSSBtYXkgY2hhbmdlIGJlaGF2aW9yIG9yIG1heSBiZSByZW1vdmVkLgotICAg
ICAqCiAgICAgICogVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgYXR0cmlidXRlIGlzIDAuCiAg
ICAgICogQSB2YWx1ZSBvZiAxLCAwLCBvciBsb3dlciwgbWVhbnMgdGhhdCB0aGUgdXNlIG9mIGdy
b3VwaW5nIHNlcGFyYXRvcnMKICAgICAgKiBvbmx5IGRlcGVuZHMgb24gdGhlIGdyb3VwaW5nIHNp
emUgKGFuZCBvbiBpc0dyb3VwaW5nVXNlZCgpKS4KLSAgICAgKiBDdXJyZW50bHksIHRoZSBjb3Jy
ZXNwb25kaW5nIENMRFIgZGF0YSBpcyBub3QgdXNlZDsgdGhpcyBpcyBsaWtlbHkgdG8gY2hhbmdl
LgorICAgICAqCisgICAgICogTk9URTogVGhlIENMRFIgZGF0YSBpcyB1c2VkIGluIE51bWJlckZv
cm1hdHRlciBidXQgbm90IGluIERlY2ltYWxGb3JtYXQuCisgICAgICogVGhpcyBpcyBmb3IgYmFj
a3dhcmRzIGNvbXBhdGliaWxpdHkgcmVhc29ucy4KKyAgICAgKgorICAgICAqIEZvciBtb3JlIGNv
bnRyb2wgb3ZlciBncm91cGluZyBzdHJhdGVnaWVzLCB1c2UgTnVtYmVyRm9ybWF0dGVyLgogICAg
ICAqCiAgICAgICogQHNlZSBzZXRNaW5pbXVtR3JvdXBpbmdEaWdpdHMKICAgICAgKiBAc2VlIGdl
dEdyb3VwaW5nU2l6ZQotICAgICAqIEBpbnRlcm5hbCB0ZWNobm9sb2d5IHByZXZpZXcKKyAgICAg
KiBAZHJhZnQgSUNVIDY0CiAgICAgICovCiAgICAgaW50MzJfdCBnZXRNaW5pbXVtR3JvdXBpbmdE
aWdpdHMoKSBjb25zdDsKIAotI2VuZGlmICAvKiBVX0hJREVfSU5URVJOQUxfQVBJICovCi0KLSAg
ICAvKiBDYW5ub3QgdXNlICNpZm5kZWYgVV9ISURFX0lOVEVSTkFMX0FQSSBmb3IgdGhlIGZvbGxv
d2luZyBkcmFmdCBtZXRob2Qgc2luY2UgaXQgaXMgdmlydHVhbC4gKi8KICAgICAvKioKICAgICAg
KiBTZXRzIHRoZSBtaW5pbXVtIGdyb3VwaW5nIGRpZ2l0cy4gU2V0dGluZyB0byBhIHZhbHVlIGxl
c3MgdGhhbiBvcgogICAgICAqIGVxdWFsIHRvIDEgdHVybnMgb2ZmIG1pbmltdW0gZ3JvdXBpbmcg
ZGlnaXRzLgogICAgICAqCisgICAgICogRm9yIG1vcmUgY29udHJvbCBvdmVyIGdyb3VwaW5nIHN0
cmF0ZWdpZXMsIHVzZSBOdW1iZXJGb3JtYXR0ZXIuCisgICAgICoKICAgICAgKiBAcGFyYW0gbmV3
VmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiBtaW5pbXVtIGdyb3VwaW5nIGRpZ2l0cy4KICAgICAgKiBA
c2VlIGdldE1pbmltdW1Hcm91cGluZ0RpZ2l0cwotICAgICAqIEBpbnRlcm5hbCB0ZWNobm9sb2d5
IHByZXZpZXcKKyAgICAgKiBAZHJhZnQgSUNVIDY0CiAgICAgICovCi0gICAgdmlydHVhbCB2b2lk
IHNldE1pbmltdW1Hcm91cGluZ0RpZ2l0cyhpbnQzMl90IG5ld1ZhbHVlKTsKKyAgICB2b2lkIHNl
dE1pbmltdW1Hcm91cGluZ0RpZ2l0cyhpbnQzMl90IG5ld1ZhbHVlKTsKKyNlbmRpZiAgLyogVV9I
SURFX0RSQUZUX0FQSSAqLwogCiAKICAgICAvKioKQEAgLTE3MjUsNTkgKzE3MjgsNjcgQEAgY2xh
c3MgVV9JMThOX0FQSSBEZWNpbWFsRm9ybWF0IDogcHVibGljIE51bWJlckZvcm1hdCB7CiAgICAg
ICovCiAgICAgdmlydHVhbCB2b2lkIHNldERlY2ltYWxQYXR0ZXJuTWF0Y2hSZXF1aXJlZChVQm9v
bCBuZXdWYWx1ZSk7CiAKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQogICAgIC8qKgotICAgICAq
IHtAaWN1fSBSZXR1cm5zIHdoZXRoZXIgdG8gaWdub3JlIGV4cG9uZW50cyB3aGVuIHBhcnNpbmcu
CisgICAgICogUmV0dXJucyB3aGV0aGVyIHRvIGlnbm9yZSBleHBvbmVudHMgd2hlbiBwYXJzaW5n
LgogICAgICAqCisgICAgICogQHJldHVybiBXaGV0aGVyIHRvIGlnbm9yZSBleHBvbmVudHMgd2hl
biBwYXJzaW5nLgogICAgICAqIEBzZWUgI3NldFBhcnNlTm9FeHBvbmVudAotICAgICAqIEBpbnRl
cm5hbCBUaGlzIEFQSSBpcyBhIHRlY2huaWNhbCBwcmV2aWV3LiBJdCBtYXkgY2hhbmdlIGluIGFu
IHVwY29taW5nIHJlbGVhc2UuCisgICAgICogQGRyYWZ0IElDVSA2NAogICAgICAqLwotICAgIHZp
cnR1YWwgVUJvb2wgaXNQYXJzZU5vRXhwb25lbnQoKSBjb25zdDsKKyAgICBVQm9vbCBpc1BhcnNl
Tm9FeHBvbmVudCgpIGNvbnN0OwogCiAgICAgLyoqCi0gICAgICoge0BpY3V9IFNwZWNpZmllcyB3
aGV0aGVyIHRvIHN0b3AgcGFyc2luZyB3aGVuIGFuIGV4cG9uZW50IHNlcGFyYXRvciBpcyBlbmNv
dW50ZXJlZC4gRm9yCisgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gc3RvcCBwYXJzaW5nIHdo
ZW4gYW4gZXhwb25lbnQgc2VwYXJhdG9yIGlzIGVuY291bnRlcmVkLiBGb3IKICAgICAgKiBleGFt
cGxlLCBwYXJzZXMgIjEyM0U0IiB0byAxMjMgKHdpdGggcGFyc2UgcG9zaXRpb24gMykgaW5zdGVh
ZCBvZiAxMjMwMDAwICh3aXRoIHBhcnNlIHBvc2l0aW9uCiAgICAgICogNSkuCiAgICAgICoKICAg
ICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSB0byBwcmV2ZW50IGV4cG9uZW50cyBmcm9tIGJlaW5nIHBh
cnNlZDsgZmFsc2UgdG8gYWxsb3cgdGhlbSB0byBiZSBwYXJzZWQuCi0gICAgICogQGludGVybmFs
IFRoaXMgQVBJIGlzIGEgdGVjaG5pY2FsIHByZXZpZXcuIEl0IG1heSBjaGFuZ2UgaW4gYW4gdXBj
b21pbmcgcmVsZWFzZS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CiAgICAgICovCi0gICAgdmlydHVh
bCB2b2lkIHNldFBhcnNlTm9FeHBvbmVudChVQm9vbCB2YWx1ZSk7CisgICAgdm9pZCBzZXRQYXJz
ZU5vRXhwb25lbnQoVUJvb2wgdmFsdWUpOwogCiAgICAgLyoqCi0gICAgICoge0BpY3V9IFJldHVy
bnMgd2hldGhlciBwYXJzaW5nIGlzIHNlbnNpdGl2ZSB0byBjYXNlIChsb3dlcmNhc2UvdXBwZXJj
YXNlKS4KKyAgICAgKiBSZXR1cm5zIHdoZXRoZXIgcGFyc2luZyBpcyBzZW5zaXRpdmUgdG8gY2Fz
ZSAobG93ZXJjYXNlL3VwcGVyY2FzZSkuCiAgICAgICoKKyAgICAgKiBAcmV0dXJuIFdoZXRoZXIg
cGFyc2luZyBpcyBjYXNlLXNlbnNpdGl2ZS4KICAgICAgKiBAc2VlICNzZXRQYXJzZUNhc2VTZW5z
aXRpdmUKLSAgICAgKiBAaW50ZXJuYWwgVGhpcyBBUEkgaXMgYSB0ZWNobmljYWwgcHJldmlldy4g
SXQgbWF5IGNoYW5nZSBpbiBhbiB1cGNvbWluZyByZWxlYXNlLgorICAgICAqIEBkcmFmdCBJQ1Ug
NjQKICAgICAgKi8KLSAgICB2aXJ0dWFsIFVCb29sIGlzUGFyc2VDYXNlU2Vuc2l0aXZlKCkgY29u
c3Q7CisgICAgVUJvb2wgaXNQYXJzZUNhc2VTZW5zaXRpdmUoKSBjb25zdDsKIAogICAgIC8qKgot
ICAgICAqIHtAaWN1fSBXaGV0aGVyIHRvIHBheSBhdHRlbnRpb24gdG8gY2FzZSB3aGVuIHBhcnNp
bmc7IGRlZmF1bHQgaXMgdG8gaWdub3JlIGNhc2UgKHBlcmZvcm0KKyAgICAgKiBXaGV0aGVyIHRv
IHBheSBhdHRlbnRpb24gdG8gY2FzZSB3aGVuIHBhcnNpbmc7IGRlZmF1bHQgaXMgdG8gaWdub3Jl
IGNhc2UgKHBlcmZvcm0KICAgICAgKiBjYXNlLWZvbGRpbmcpLiBGb3IgZXhhbXBsZSwgIkEiID09
ICJhIiBpbiBjYXNlLWluc2Vuc2l0aXZlIGJ1dCBub3QgY2FzZS1zZW5zaXRpdmUgbW9kZS4KICAg
ICAgKgogICAgICAqIEN1cnJlbmN5IHN5bWJvbHMgYXJlIG5ldmVyIGNhc2UtZm9sZGVkLiBGb3Ig
ZXhhbXBsZSwgInVzJDEuMDAiIHdpbGwgbm90IHBhcnNlIGluIGNhc2UtaW5zZW5zaXRpdmUKICAg
ICAgKiBtb2RlLCBldmVuIHRob3VnaCAiVVMkMS4wMCIgcGFyc2VzLgogICAgICAqCi0gICAgICog
QGludGVybmFsIFRoaXMgQVBJIGlzIGEgdGVjaG5pY2FsIHByZXZpZXcuIEl0IG1heSBjaGFuZ2Ug
aW4gYW4gdXBjb21pbmcgcmVsZWFzZS4KKyAgICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSB0byBlbmFi
bGUgY2FzZS1zZW5zaXRpdmUgcGFyc2luZyAodGhlIGRlZmF1bHQpOyBmYWxzZSB0byBmb3JjZQor
ICAgICAqICAgICAgICAgICAgICBjYXNlLXNlbnNpdGl2ZSBwYXJzaW5nIGJlaGF2aW9yLgorICAg
ICAqIEBkcmFmdCBJQ1UgNjQKICAgICAgKi8KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UGFyc2VDYXNl
U2Vuc2l0aXZlKFVCb29sIHZhbHVlKTsKKyAgICB2b2lkIHNldFBhcnNlQ2FzZVNlbnNpdGl2ZShV
Qm9vbCB2YWx1ZSk7CiAKICAgICAvKioKLSAgICAgKiB7QGljdX0gUmV0dXJucyB3aGV0aGVyIHRy
dW5jYXRpb24gb2YgaGlnaC1vcmRlciBpbnRlZ2VyIGRpZ2l0cyBzaG91bGQgcmVzdWx0IGluIGFu
IGVycm9yLgorICAgICAqIFJldHVybnMgd2hldGhlciB0cnVuY2F0aW9uIG9mIGhpZ2gtb3JkZXIg
aW50ZWdlciBkaWdpdHMgc2hvdWxkIHJlc3VsdCBpbiBhbiBlcnJvci4KICAgICAgKiBCeSBkZWZh
dWx0LCBzZXRNYXhpbXVtSW50ZWdlckRpZ2l0cyB0cnVuY2F0ZXMgaGlnaC1vcmRlciBkaWdpdHMg
c2lsZW50bHkuCiAgICAgICoKKyAgICAgKiBAcmV0dXJuIFdoZXRoZXIgYW4gZXJyb3IgY29kZSBp
cyBzZXQgaWYgaGlnaC1vcmRlciBkaWdpdHMgYXJlIHRydW5jYXRlZC4KICAgICAgKiBAc2VlIHNl
dEZvcm1hdEZhaWxJZk1vcmVUaGFuTWF4RGlnaXRzCi0gICAgICogQGludGVybmFsIFRoaXMgQVBJ
IGlzIGEgdGVjaG5pY2FsIHByZXZpZXcuIEl0IG1heSBjaGFuZ2UgaW4gYW4gdXBjb21pbmcgcmVs
ZWFzZS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CiAgICAgICovCi0gICAgdmlydHVhbCBVQm9vbCBp
c0Zvcm1hdEZhaWxJZk1vcmVUaGFuTWF4RGlnaXRzKCkgY29uc3Q7CisgICAgVUJvb2wgaXNGb3Jt
YXRGYWlsSWZNb3JlVGhhbk1heERpZ2l0cygpIGNvbnN0OwogCiAgICAgLyoqCi0gICAgICoge0Bp
Y3V9IFNldHMgd2hldGhlciB0cnVuY2F0aW9uIG9mIGhpZ2gtb3JkZXIgaW50ZWdlciBkaWdpdHMg
c2hvdWxkIHJlc3VsdCBpbiBhbiBlcnJvci4KKyAgICAgKiBTZXRzIHdoZXRoZXIgdHJ1bmNhdGlv
biBvZiBoaWdoLW9yZGVyIGludGVnZXIgZGlnaXRzIHNob3VsZCByZXN1bHQgaW4gYW4gZXJyb3Iu
CiAgICAgICogQnkgZGVmYXVsdCwgc2V0TWF4aW11bUludGVnZXJEaWdpdHMgdHJ1bmNhdGVzIGhp
Z2gtb3JkZXIgZGlnaXRzIHNpbGVudGx5LgogICAgICAqCi0gICAgICogQGludGVybmFsIFRoaXMg
QVBJIGlzIGEgdGVjaG5pY2FsIHByZXZpZXcuIEl0IG1heSBjaGFuZ2UgaW4gYW4gdXBjb21pbmcg
cmVsZWFzZS4KKyAgICAgKiBAcGFyYW0gdmFsdWUgV2hldGhlciB0byBzZXQgYW4gZXJyb3IgY29k
ZSBpZiBoaWdoLW9yZGVyIGRpZ2l0cyBhcmUgdHJ1bmNhdGVkLgorICAgICAqIEBkcmFmdCBJQ1Ug
NjQKICAgICAgKi8KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9ybWF0RmFpbElmTW9yZVRoYW5NYXhE
aWdpdHMoVUJvb2wgdmFsdWUpOworICAgIHZvaWQgc2V0Rm9ybWF0RmFpbElmTW9yZVRoYW5NYXhE
aWdpdHMoVUJvb2wgdmFsdWUpOworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCiAKIAog
ICAgIC8qKgpAQCAtMjAxNywxNiArMjAyOCwxNyBAQCBjbGFzcyBVX0kxOE5fQVBJIERlY2ltYWxG
b3JtYXQgOiBwdWJsaWMgTnVtYmVyRm9ybWF0IHsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3VycmVu
Y3koY29uc3QgY2hhcjE2X3QqIHRoZUN1cnJlbmN5KTsKIAogICAgIC8qKgotICAgICAqIFNldHMg
dGhlIDx0dD5DdXJyZW5jeSBDb250ZXh0PC90dD4gb2JqZWN0IHVzZWQgdG8gZGlzcGxheSBjdXJy
ZW5jeS4KKyAgICAgKiBTZXRzIHRoZSBgQ3VycmVuY3kgVXNhZ2VgIG9iamVjdCB1c2VkIHRvIGRp
c3BsYXkgY3VycmVuY3kuCiAgICAgICogVGhpcyB0YWtlcyBlZmZlY3QgaW1tZWRpYXRlbHksIGlm
IHRoaXMgZm9ybWF0IGlzIGEKICAgICAgKiBjdXJyZW5jeSBmb3JtYXQuCi0gICAgICogQHBhcmFt
IGN1cnJlbmN5Q29udGV4dCBuZXcgY3VycmVuY3kgY29udGV4dCBvYmplY3QgdG8gdXNlLgorICAg
ICAqIEBwYXJhbSBuZXdVc2FnZSBuZXcgY3VycmVuY3kgdXNhZ2Ugb2JqZWN0IHRvIHVzZS4KKyAg
ICAgKiBAcGFyYW0gZWMgaW5wdXQtb3V0cHV0IGVycm9yIGNvZGUKICAgICAgKiBAc3RhYmxlIElD
VSA1NAogICAgICAqLwogICAgIHZvaWQgc2V0Q3VycmVuY3lVc2FnZShVQ3VycmVuY3lVc2FnZSBu
ZXdVc2FnZSwgVUVycm9yQ29kZSogZWMpOwogCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUg
PHR0PkN1cnJlbmN5IENvbnRleHQ8L3R0PiBvYmplY3QgdXNlZCB0byBkaXNwbGF5IGN1cnJlbmN5
CisgICAgICogUmV0dXJucyB0aGUgYEN1cnJlbmN5IFVzYWdlYCBvYmplY3QgdXNlZCB0byBkaXNw
bGF5IGN1cnJlbmN5CiAgICAgICogQHN0YWJsZSBJQ1UgNTQKICAgICAgKi8KICAgICBVQ3VycmVu
Y3lVc2FnZSBnZXRDdXJyZW5jeVVzYWdlKCkgY29uc3Q7CkBAIC0yMDUwLDEyICsyMDYyLDM2IEBA
IGNsYXNzIFVfSTE4Tl9BUEkgRGVjaW1hbEZvcm1hdCA6IHB1YmxpYyBOdW1iZXJGb3JtYXQgewog
ICAgIHZvaWQgZm9ybWF0VG9EZWNpbWFsUXVhbnRpdHkoY29uc3QgRm9ybWF0dGFibGUmIG51bWJl
ciwgbnVtYmVyOjppbXBsOjpEZWNpbWFsUXVhbnRpdHkmIG91dHB1dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUmIHN0YXR1cykgY29uc3Q7CiAKLSNlbmRpZgor
I2VuZGlmICAvKiBVX0hJREVfSU5URVJOQUxfQVBJICovCiAKICNpZm5kZWYgVV9ISURFX0RSQUZU
X0FQSQogICAgIC8qKgotICAgICAqIENvbnZlcnRzIHRoaXMgRGVjaW1hbEZvcm1hdCB0byBhIE51
bWJlckZvcm1hdHRlci4gIFN0YXJ0aW5nIGluIElDVSA2MCwKLSAgICAgKiBOdW1iZXJGb3JtYXR0
ZXIgaXMgdGhlIHJlY29tbWVuZGVkIHdheSB0byBmb3JtYXQgbnVtYmVycy4KKyAgICAgKiBDb252
ZXJ0cyB0aGlzIERlY2ltYWxGb3JtYXQgdG8gYSAoTG9jYWxpemVkKU51bWJlckZvcm1hdHRlci4g
U3RhcnRpbmcKKyAgICAgKiBpbiBJQ1UgNjAsIE51bWJlckZvcm1hdHRlciBpcyB0aGUgcmVjb21t
ZW5kZWQgd2F5IHRvIGZvcm1hdCBudW1iZXJzLgorICAgICAqIFlvdSBjYW4gdXNlIHRoZSByZXR1
cm5lZCBMb2NhbGl6ZWROdW1iZXJGb3JtYXR0ZXIgdG8gZm9ybWF0IG51bWJlcnMgYW5kCisgICAg
ICogZ2V0IGEgRm9ybWF0dGVkTnVtYmVyLCB3aGljaCBjb250YWlucyBhIHN0cmluZyBhcyB3ZWxs
IGFzIGFkZGl0aW9uYWwKKyAgICAgKiBhbm5vdGF0aW9ucyBhYm91dCB0aGUgZm9ybWF0dGVkIHZh
bHVlLgorICAgICAqIAorICAgICAqIElmIGEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBvY2N1
cnMsIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBtZXRob2QKKyAgICAgKiBtaWdodCBiZSBudWxs
LiBJZiB5b3UgYXJlIGNvbmNlcm5lZCBhYm91dCBjb3JyZWN0IHJlY292ZXJ5IGZyb20KKyAgICAg
KiBvdXQtb2YtbWVtb3J5IHNpdHVhdGlvbnMsIHVzZSB0aGlzIHBhdHRlcm46CisgICAgICoKKyAg
ICAgKiA8cHJlPgorICAgICAqIEZvcm1hdHRlZE51bWJlciByZXN1bHQ7CisgICAgICogaWYgKGF1
dG8qIHB0ciA9IGRmLT50b051bWJlckZvcm1hdHRlcihzdGF0dXMpKSB7CisgICAgICogICAgIHJl
c3VsdCA9IHB0ci0+Zm9ybWF0RG91YmxlKDEyMywgc3RhdHVzKTsKKyAgICAgKiB9CisgICAgICog
PC9wcmU+CisgICAgICoKKyAgICAgKiBJZiB5b3UgYXJlIG5vdCBjb25jZXJuZWQgYWJvdXQgb3V0
LW9mLW1lbW9yeSBzaXR1YXRpb25zLCBvciBpZiB5b3VyCisgICAgICogZW52aXJvbm1lbnQgdGhy
b3dzIGV4Y2VwdGlvbnMgd2hlbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIG9jY3VycywKKyAg
ICAgKiB5b3UgY2FuIGNoYWluIHRoZSBtZXRob2RzLCBsaWtlIHRoaXM6CisgICAgICoKKyAgICAg
KiA8cHJlPgorICAgICAqIEZvcm1hdHRlZE51bWJlciByZXN1bHQgPSBkZgorICAgICAqICAgICAt
PnRvTnVtYmVyRm9ybWF0dGVyKHN0YXR1cykKKyAgICAgKiAgICAgLT5mb3JtYXREb3VibGUoMTIz
LCBzdGF0dXMpOworICAgICAqIDwvcHJlPgogICAgICAqCiAgICAgICogTk9URTogVGhlIHJldHVy
bmVkIExvY2FsaXplZE51bWJlckZvcm1hdHRlciBpcyBvd25lZCBieSB0aGlzIERlY2ltYWxGb3Jt
YXQuCiAgICAgICogSWYgYSBub24tY29uc3QgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgRGVjaW1h
bEZvcm1hdCwgb3IgaWYgdGhlIERlY2ltYWxGb3JtYXQKQEAgLTIwNjMsMjEgKzIwOTksMzUgQEAg
Y2xhc3MgVV9JMThOX0FQSSBEZWNpbWFsRm9ybWF0IDogcHVibGljIE51bWJlckZvcm1hdCB7CiAg
ICAgICogYmV5b25kIHRoZSBsaWZldGltZSBvZiB0aGUgRGVjaW1hbEZvcm1hdCwgY29weSBpdCB0
byBhIGxvY2FsIHZhcmlhYmxlOgogICAgICAqCiAgICAgICogPHByZT4KLSAgICAgKiBMb2NhbGl6
ZWROdW1iZXJGb3JtYXR0ZXIgZiA9IGRmLT50b051bWJlckZvcm1hdHRlcigpOworICAgICAqIExv
Y2FsaXplZE51bWJlckZvcm1hdHRlciBsbmY7CisgICAgICogaWYgKGF1dG8qIHB0ciA9IGRmLT50
b051bWJlckZvcm1hdHRlcihzdGF0dXMpKSB7CisgICAgICogICAgIGxuZiA9ICpwdHI7CisgICAg
ICogfQogICAgICAqIDwvcHJlPgogICAgICAqCi0gICAgICogSXQgaXMsIGhvd2V2ZXIsIHNhZmUg
dG8gdXNlIHRoZSByZXR1cm4gdmFsdWUgZm9yIGNoYWluaW5nOgorICAgICAqIEBwYXJhbSBzdGF0
dXMgU2V0IG9uIGZhaWx1cmUsIGxpa2UgVV9NRU1PUllfQUxMT0NBVElPTl9FUlJPUi4KKyAgICAg
KiBAcmV0dXJuIEEgcG9pbnRlciB0byBhbiBpbnRlcm5hbCBvYmplY3QsIG9yIG51bGxwdHIgb24g
ZmFpbHVyZS4KKyAgICAgKiAgICAgICAgIERvIG5vdCBkZWxldGUgdGhlIHJldHVybiB2YWx1ZSEK
KyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgY29uc3QgbnVtYmVyOjpMb2NhbGl6
ZWROdW1iZXJGb3JtYXR0ZXIqIHRvTnVtYmVyRm9ybWF0dGVyKFVFcnJvckNvZGUmIHN0YXR1cykg
Y29uc3Q7CisjZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKworI2lmbmRlZiBVX0hJREVf
REVQUkVDQVRFRF9BUEkKKyAgICAvKioKKyAgICAgKiBEZXByZWNhdGVkOiBMaWtlIHtAbGluayAj
dG9OdW1iZXJGb3JtYXR0ZXIoVUVycm9yQ29kZSYpIGNvbnN0fSwKKyAgICAgKiBidXQgZG9lcyBu
b3QgdGFrZSBhbiBlcnJvciBjb2RlLgogICAgICAqCi0gICAgICogPHByZT4KLSAgICAgKiBGb3Jt
YXR0ZWROdW1iZXIgcmVzdWx0ID0gZGYtPnRvTnVtYmVyRm9ybWF0dGVyKCkuZm9ybWF0RG91Ymxl
KDEyMywgc3RhdHVzKTsKLSAgICAgKiA8L3ByZT4KKyAgICAgKiBUaGUgbmV3IHNpZ25hdHVyZSBz
aG91bGQgYmUgdXNlZCBpbiBjYXNlIGFuIGVycm9yIG9jY3VycyB3aGlsZSByZXR1cm5pbmcgdGhl
CisgICAgICogTG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyLgogICAgICAqCi0gICAgICogQHBhcmFt
IG91dHB1dCBUaGUgdmFyaWFibGUgaW50byB3aGljaCB0byBzdG9yZSB0aGUgTG9jYWxpemVkTnVt
YmVyRm9ybWF0dGVyLgotICAgICAqIEByZXR1cm4gVGhlIG91dHB1dCB2YXJpYWJsZSwgZm9yIGNo
YWluaW5nLgotICAgICAqIEBkcmFmdCBJQ1UgNjIKKyAgICAgKiBUaGlzIG9sZCBzaWduYXR1cmUg
d2lsbCBiZSByZW1vdmVkIGluIElDVSA2NS4KKyAgICAgKgorICAgICAqIEByZXR1cm4gQSByZWZl
cmVuY2UgdG8gYW4gaW50ZXJuYWwgb2JqZWN0LgorICAgICAqIEBkZXByZWNhdGVkIElDVSA2NAog
ICAgICAqLwogICAgIGNvbnN0IG51bWJlcjo6TG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyJiB0b051
bWJlckZvcm1hdHRlcigpIGNvbnN0OwotI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCisj
ZW5kaWYgIC8qIFVfSElERV9ERVBSRUNBVEVEX0FQSSAqLwogCiAgICAgLyoqCiAgICAgICogUmV0
dXJuIHRoZSBjbGFzcyBJRCBmb3IgdGhpcyBjbGFzcy4gIFRoaXMgaXMgdXNlZnVsIG9ubHkgZm9y
CkBAIC0yMTEwLDcgKzIxNjAsNyBAQCBjbGFzcyBVX0kxOE5fQVBJIERlY2ltYWxGb3JtYXQgOiBw
dWJsaWMgTnVtYmVyRm9ybWF0IHsKICAgICAvKiogUmVidWlsZHMgdGhlIGZvcm1hdHRlciBvYmpl
Y3QgZnJvbSB0aGUgcHJvcGVydHkgYmFnLiAqLwogICAgIHZvaWQgdG91Y2goVUVycm9yQ29kZSYg
c3RhdHVzKTsKIAotICAgIC8qKiBSZWJ1aWxkcyB0aGUgZm9ybWF0dGVyIG9iamVjdCwgaGlkaW5n
IHRoZSBlcnJvciBjb2RlLiAqLworICAgIC8qKiBSZWJ1aWxkcyB0aGUgZm9ybWF0dGVyIG9iamVj
dCwgaWdub3JpbmcgYW55IGVycm9yIGNvZGUuICovCiAgICAgdm9pZCB0b3VjaE5vRXJyb3IoKTsK
IAogICAgIC8qKgpAQCAtMjE0OSwxMiArMjE5OSwxNyBAQCBjbGFzcyBVX0kxOE5fQVBJIERlY2lt
YWxGb3JtYXQgOiBwdWJsaWMgTnVtYmVyRm9ybWF0IHsKICAgICAvLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgSU5TVEFOQ0UgRklFTERTICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLwogICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCiAKLSAg
ICAvLyBPbmx5IG9uZSBpbnN0YW5jZSBmaWVsZDoga2VlcCBhbGwgZmllbGRzIGluc2lkZSBvZiBh
biBpbXBsZW1lbnRhdGlvbiBjbGFzcyBkZWZpbmVkIGluIG51bWJlcl9tYXBwZXIuaAotICAgIG51
bWJlcjo6aW1wbDo6RGVjaW1hbEZvcm1hdEZpZWxkcyogZmllbGRzOworCisgICAgLy8gT25lIGlu
c3RhbmNlIGZpZWxkIGZvciB0aGUgaW1wbGVtZW50YXRpb24sIGtlZXAgYWxsIGZpZWxkcyBpbnNp
ZGUgb2YgYW4gaW1wbGVtZW50YXRpb24KKyAgICAvLyBjbGFzcyBkZWZpbmVkIGluIG51bWJlcl9t
YXBwZXIuaAorICAgIG51bWJlcjo6aW1wbDo6RGVjaW1hbEZvcm1hdEZpZWxkcyogZmllbGRzID0g
bnVsbHB0cjsKIAogICAgIC8vIEFsbG93IGNoaWxkIGNsYXNzIENvbXBhY3REZWNpbWFsRm9ybWF0
IHRvIGFjY2VzcyBmUHJvcGVydGllczoKICAgICBmcmllbmQgY2xhc3MgQ29tcGFjdERlY2ltYWxG
b3JtYXQ7CiAKKyAgICAvLyBBbGxvdyBNZWFzdXJlRm9ybWF0IHRvIHVzZSBmaWVsZFBvc2l0aW9u
SGVscGVyOgorICAgIGZyaWVuZCBjbGFzcyBNZWFzdXJlRm9ybWF0OworCiB9OwogCiBVX05BTUVT
UEFDRV9FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvZG9jbWFpbi5oIGIv
U291cmNlL1dURi9pY3UvdW5pY29kZS9kb2NtYWluLmgKaW5kZXggYjk4ZGEyOGMxOTJmNjgyNjUz
MjgxM2VkOWQ2YWIwYzQwOGViMjQ4ZC4uMWU5NTljYjM1OWUzZDY0OTgwNjg3M2Q3MjY1ZDEwMjg2
ZDc2MDRkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9pY3UvdW5pY29kZS9kb2NtYWluLmgKKysr
IGIvU291cmNlL1dURi9pY3UvdW5pY29kZS9kb2NtYWluLmgKQEAgLTMzLDcgKzMzLDcgQEAKICAq
IHRoZW4gZGV0YWlsZWQgbWVtYmVyIGRlc2NyaXB0aW9ucy48L3A+CiAgKiAKICAqIDxoMz5DIFBy
b2dyYW1tZXJzOjwvaDM+Ci0gKiA8cD5Vc2UgPGEgaHJlZj0iI01vZHVsZSI+TW9kdWxlIExpc3Q8
L2E+IG9yIDxhIGhyZWY9Imdsb2JhbHMuaHRtbCI+RmlsZSBNZW1iZXJzPC9hPgorICogPHA+VXNl
IDxhIGhyZWY9IiNNb2R1bGUiPk1vZHVsZSBMaXN0PC9hPiBvciA8YSBocmVmPSJnbG9iYWxzX3Uu
aHRtbCI+RmlsZSBNZW1iZXJzPC9hPgogICogdG8gZmluZCBhIGxpc3Qgb2YgYWxsIHRoZSBmdW5j
dGlvbnMgYW5kIGNvbnN0YW50cy4KICAqIEZvciBleGFtcGxlLCB0byBmaW5kIEJyZWFrSXRlcmF0
b3IgZnVuY3Rpb25zIHlvdSB3b3VsZCBjbGljayBvbgogICogPGEgaHJlZj0iZmlsZXMuaHRtbCI+
IEZpbGUgTGlzdDwvYT4sCkBAIC04OCw2ICs4OCwxMSBAQAogICogICAgIDx0ZD5pY3U6OlVuaWNv
ZGVTZXQ8L3RkPgogICogICA8L3RyPgogICogICA8dHI+CisgKiAgICAgPHRkPk1hcHMgZnJvbSBV
bmljb2RlIENvZGUgUG9pbnRzIHRvIEludGVnZXIgVmFsdWVzPC90ZD4KKyAqICAgICA8dGQ+dWNw
dHJpZS5oLCB1bXV0YWJsZWNwdHJpZS5oPC90ZD4KKyAqICAgICA8dGQ+QyBBUEk8L3RkPgorICog
ICA8L3RyPgorICogICA8dHI+CiAgKiAgICAgPHRkPk1hcHMgZnJvbSBTdHJpbmdzIHRvIEludGVn
ZXIgVmFsdWVzPC90ZD4KICAqICAgICA8dGQ+KG5vIEMgQVBJKTwvdGQ+CiAgKiAgICAgPHRkPmlj
dTo6Qnl0ZXNUcmllLCBpY3U6OlVDaGFyc1RyaWU8L3RkPgpAQCAtMTEwLDcgKzExNSw3IEBACiAg
KiAgIDx0cj4KICAqICAgICA8dGQ+TG9jYWxlcyA8L3RkPgogICogICAgIDx0ZD51bG9jLmg8L2E+
PC90ZD4KLSAqICAgICA8dGQ+aWN1OjpMb2NhbGU8L3RkPgorICogICAgIDx0ZD5pY3U6OkxvY2Fs
ZSwgaWN1OjpMb2NhbGVCdWlsZGVyPC90ZD4KICAqICAgPC90cj4KICAqICAgPHRyPgogICogICAg
IDx0ZD5SZXNvdXJjZSBCdW5kbGVzPC90ZD4KQEAgLTEzOCwxMSArMTQzLDE2IEBACiAgKiAgICAg
PHRkPmljdTo6TWVzc2FnZUZvcm1hdDwvdGQ+CiAgKiAgIDwvdHI+CiAgKiAgIDx0cj4KLSAqICAg
ICA8dGQ+TnVtYmVyIEZvcm1hdHRpbmc8L3RkPgorICogICAgIDx0ZD5OdW1iZXIgRm9ybWF0dGlu
Zzxici8+KGluY2x1ZGVzIGN1cnJlbmN5IGFuZCB1bml0IGZvcm1hdHRpbmcpPC90ZD4KICAqICAg
ICA8dGQ+dW51bWJlcmZvcm1hdHRlci5oLCB1bnVtLmg8L3RkPgogICogICAgIDx0ZD5pY3U6Om51
bWJlcjo6TnVtYmVyRm9ybWF0dGVyIChJQ1UgNjArKSBvciBpY3U6Ok51bWJlckZvcm1hdCAob2xk
ZXIgdmVyc2lvbnMpPC90ZD4KICAqICAgPC90cj4KICAqICAgPHRyPgorICogICAgIDx0ZD5OdW1i
ZXIgUmFuZ2UgRm9ybWF0dGluZzxiciAvPihpbmNsdWRlcyBjdXJyZW5jeSBhbmQgdW5pdCByYW5n
ZXMpPC90ZD4KKyAqICAgICA8dGQ+KG5vIEMgQVBJKTwvdGQ+CisgKiAgICAgPHRkPmljdTo6bnVt
YmVyOjpOdW1iZXJSYW5nZUZvcm1hdHRlcjwvdGQ+CisgKiAgIDwvdHI+CisgKiAgIDx0cj4KICAq
ICAgICA8dGQ+TnVtYmVyIFNwZWxsb3V0PGJyLz4oUnVsZSBCYXNlZCBOdW1iZXIgRm9ybWF0dGlu
Zyk8L3RkPgogICogICAgIDx0ZD51bnVtLmg8YnIvPih1c2UgVU5VTV9TUEVMTE9VVCk8L3RkPgog
ICogICAgIDx0ZD5pY3U6OlJ1bGVCYXNlZE51bWJlckZvcm1hdDwvdGQ+CkBAIC0yMDgsOSArMjE4
LDkgQEAKICAqICAgICA8dGQ+QyBBUEk8L3RkPgogICogICA8L3RyPgogICogICA8dHI+Ci0gKiAg
ICAgPHRkPkxheW91dCBFbmdpbmUvQ29tcGxleCBUZXh0IExheW91dDwvdGQ+Ci0gKiAgICAgPHRk
PmxvZW5naW5lLmg8L3RkPgotICogICAgIDx0ZD5pY3U6OkxheW91dEVuZ2luZSxpY3U6OlBhcmFn
cmFwaExheW91dDwvdGQ+CisgKiAgICAgPHRkPlBhcmFncmFwaCBMYXlvdXQgLyBDb21wbGV4IFRl
eHQgTGF5b3V0PC90ZD4KKyAqICAgICA8dGQ+cGxheW91dC5oPC90ZD4KKyAqICAgICA8dGQ+aWN1
OjpQYXJhZ3JhcGhMYXlvdXQ8L3RkPgogICogICA8L3RyPgogICogICA8dHI+CiAgKiAgICAgPHRk
PklDVSBJL088L3RkPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9pY3UvdW5pY29kZS9kdGludHJ2
LmggYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL2R0aW50cnYuaAppbmRleCBjM2YxMDU4YzA2Njhm
NWZlMzBkMjY4YTllZTFhYTE3NDI4MmYxODZmLi5hYTZjYTcxZjIzZGM0ODllMTFhNjIyMmVlM2U5
ZjM0MjE1Zjg4ZWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL2R0aW50cnYu
aAorKysgYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL2R0aW50cnYuaApAQCAtNTMsMTQgKzUzLDE0
IEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBEYXRlSW50ZXJ2YWwgOiBwdWJsaWMgVU9iamVjdCB7CiAg
ICAgICogQHJldHVybiAgdGhlIGZyb20gZGF0ZSBpbiBkYXRlSW50ZXJ2YWwuCiAgICAgICogQHN0
YWJsZSBJQ1UgNC4wCiAgICAgICovCi0gICAgVURhdGUgZ2V0RnJvbURhdGUoKSBjb25zdDsKKyAg
ICBpbmxpbmUgVURhdGUgZ2V0RnJvbURhdGUoKSBjb25zdDsKIAogICAgIC8qKiAKICAgICAgKiBH
ZXQgdGhlIHRvIGRhdGUuCiAgICAgICogQHJldHVybiAgdGhlIHRvIGRhdGUgaW4gZGF0ZUludGVy
dmFsLgogICAgICAqIEBzdGFibGUgSUNVIDQuMAogICAgICAqLwotICAgIFVEYXRlIGdldFRvRGF0
ZSgpIGNvbnN0OworICAgIGlubGluZSBVRGF0ZSBnZXRUb0RhdGUoKSBjb25zdDsKIAogCiAgICAg
LyoqCkBAIC0xMTQsNyArMTE0LDcgQEAgY2xhc3MgVV9DT01NT05fQVBJIERhdGVJbnRlcnZhbCA6
IHB1YmxpYyBVT2JqZWN0IHsKICAgICAgKiBAcmV0dXJuIFRSVUUgaWYgdGhlIHR3byBEYXRlSW50
ZXJ2YWxzIGFyZSBub3QgdGhlIHNhbWUKICAgICAgKiBAc3RhYmxlIElDVSA0LjAKICAgICAgKi8K
LSAgICBVQm9vbCBvcGVyYXRvciE9KGNvbnN0IERhdGVJbnRlcnZhbCYgb3RoZXIpIGNvbnN0Owor
ICAgIGlubGluZSBVQm9vbCBvcGVyYXRvciE9KGNvbnN0IERhdGVJbnRlcnZhbCYgb3RoZXIpIGNv
bnN0OwogCiAKICAgICAvKioKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvZHRp
dHZmbXQuaCBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvZHRpdHZmbXQuaAppbmRleCA1ZWFhNTU5
ZDBlYWY0OGE0MTZlY2IwMzQwNmFmNzU4ZjI3OTAxMGFmLi40MmQ3N2QwNDFmOGIyODU3NGEzZTJm
N2IwN2U5NGFmOWNlYmQyMDVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL2R0
aXR2Zm10LmgKKysrIGIvU291cmNlL1dURi9pY3UvdW5pY29kZS9kdGl0dmZtdC5oCkBAIC0yOCwx
MCArMjgsODcgQEAKICNpbmNsdWRlICJ1bmljb2RlL2R0aW50cnYuaCIKICNpbmNsdWRlICJ1bmlj
b2RlL2R0aXR2aW5mLmgiCiAjaW5jbHVkZSAidW5pY29kZS9kdHB0bmdlbi5oIgorI2luY2x1ZGUg
InVuaWNvZGUvZm9ybWF0dGVkdmFsdWUuaCIKIAogVV9OQU1FU1BBQ0VfQkVHSU4KIAogCitjbGFz
cyBGb3JtYXR0ZWREYXRlSW50ZXJ2YWxEYXRhOworY2xhc3MgRGF0ZUludGVydmFsRm9ybWF0Owor
CisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKy8qKgorICogQW4gaW1tdXRhYmxlIGNsYXNzIGNv
bnRhaW5pbmcgdGhlIHJlc3VsdCBvZiBhIGRhdGUgaW50ZXJ2YWwgZm9ybWF0dGluZyBvcGVyYXRp
b24uCisgKgorICogSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgYXJlIGltbXV0YWJsZSBhbmQgdGhy
ZWFkLXNhZmUuCisgKgorICogV2hlbiBjYWxsaW5nIG5leHRQb3NpdGlvbigpOgorICogVGhlIGZp
ZWxkcyBhcmUgcmV0dXJuZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LiBUaGUgc3BlY2lhbCBmaWVsZCBj
YXRlZ29yeQorICogVUZJRUxEX0NBVEVHT1JZX0RBVEVfSU5URVJWQUxfU1BBTiBpcyB1c2VkIHRv
IGluZGljYXRlIHdoaWNoIGRhdGV0aW1lCisgKiBwcmltaXRpdmVzIGNhbWUgZnJvbSB3aGljaCBh
cmd1bWVudHM6IDAgbWVhbnMgZnJvbUNhbGVuZGFyLCBhbmQgMSBtZWFucworICogdG9DYWxlbmRh
ci4gVGhlIHNwYW4gY2F0ZWdvcnkgd2lsbCBhbHdheXMgb2NjdXIgYmVmb3JlIHRoZQorICogY29y
cmVzcG9uZGluZyBmaWVsZHMgaW4gVUZJRUxEX0NBVEVHT1JZX0RBVEUKKyAqIGluIHRoZSBuZXh0
UG9zaXRpb24oKSBpdGVyYXRvci4KKyAqCisgKiBOb3QgaW50ZW5kZWQgZm9yIHB1YmxpYyBzdWJj
bGFzc2luZy4KKyAqCisgKiBAZHJhZnQgSUNVIDY0CisgKi8KK2NsYXNzIFVfSTE4Tl9BUEkgRm9y
bWF0dGVkRGF0ZUludGVydmFsIDogcHVibGljIFVNZW1vcnksIHB1YmxpYyBGb3JtYXR0ZWRWYWx1
ZSB7CisgIHB1YmxpYzoKKyAgICAvKioKKyAgICAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yOyBtYWtl
cyBhbiBlbXB0eSBGb3JtYXR0ZWREYXRlSW50ZXJ2YWwuCisgICAgICogQGRyYWZ0IElDVSA2NAor
ICAgICAqLworICAgIEZvcm1hdHRlZERhdGVJbnRlcnZhbCgpIDogZkRhdGEobnVsbHB0ciksIGZF
cnJvckNvZGUoVV9JTlZBTElEX1NUQVRFX0VSUk9SKSB7fQorCisgICAgLyoqCisgICAgICogTW92
ZSBjb25zdHJ1Y3RvcjogTGVhdmVzIHRoZSBzb3VyY2UgRm9ybWF0dGVkRGF0ZUludGVydmFsIGlu
IGFuIHVuZGVmaW5lZCBzdGF0ZS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAg
Rm9ybWF0dGVkRGF0ZUludGVydmFsKEZvcm1hdHRlZERhdGVJbnRlcnZhbCYmIHNyYykgVV9OT0VY
Q0VQVDsKKworICAgIC8qKgorICAgICAqIERlc3RydWN0IGFuIGluc3RhbmNlIG9mIEZvcm1hdHRl
ZERhdGVJbnRlcnZhbC4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgdmlydHVh
bCB+Rm9ybWF0dGVkRGF0ZUludGVydmFsKCkgVV9PVkVSUklERTsKKworICAgIC8qKiBDb3B5aW5n
IG5vdCBzdXBwb3J0ZWQ7IHVzZSBtb3ZlIGNvbnN0cnVjdG9yIGluc3RlYWQuICovCisgICAgRm9y
bWF0dGVkRGF0ZUludGVydmFsKGNvbnN0IEZvcm1hdHRlZERhdGVJbnRlcnZhbCYpID0gZGVsZXRl
OworCisgICAgLyoqIENvcHlpbmcgbm90IHN1cHBvcnRlZDsgdXNlIG1vdmUgYXNzaWdubWVudCBp
bnN0ZWFkLiAqLworICAgIEZvcm1hdHRlZERhdGVJbnRlcnZhbCYgb3BlcmF0b3I9KGNvbnN0IEZv
cm1hdHRlZERhdGVJbnRlcnZhbCYpID0gZGVsZXRlOworCisgICAgLyoqCisgICAgICogTW92ZSBh
c3NpZ25tZW50OiBMZWF2ZXMgdGhlIHNvdXJjZSBGb3JtYXR0ZWREYXRlSW50ZXJ2YWwgaW4gYW4g
dW5kZWZpbmVkIHN0YXRlLgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBGb3Jt
YXR0ZWREYXRlSW50ZXJ2YWwmIG9wZXJhdG9yPShGb3JtYXR0ZWREYXRlSW50ZXJ2YWwmJiBzcmMp
IFVfTk9FWENFUFQ7CisKKyAgICAvKiogQGNvcHlkb2MgRm9ybWF0dGVkVmFsdWU6OnRvU3RyaW5n
KCkgKi8KKyAgICBVbmljb2RlU3RyaW5nIHRvU3RyaW5nKFVFcnJvckNvZGUmIHN0YXR1cykgY29u
c3QgVV9PVkVSUklERTsKKworICAgIC8qKiBAY29weWRvYyBGb3JtYXR0ZWRWYWx1ZTo6dG9UZW1w
U3RyaW5nKCkgKi8KKyAgICBVbmljb2RlU3RyaW5nIHRvVGVtcFN0cmluZyhVRXJyb3JDb2RlJiBz
dGF0dXMpIGNvbnN0IFVfT1ZFUlJJREU7CisKKyAgICAvKiogQGNvcHlkb2MgRm9ybWF0dGVkVmFs
dWU6OmFwcGVuZFRvKCkgKi8KKyAgICBBcHBlbmRhYmxlICZhcHBlbmRUbyhBcHBlbmRhYmxlJiBh
cHBlbmRhYmxlLCBVRXJyb3JDb2RlJiBzdGF0dXMpIGNvbnN0IFVfT1ZFUlJJREU7CisKKyAgICAv
KiogQGNvcHlkb2MgRm9ybWF0dGVkVmFsdWU6Om5leHRQb3NpdGlvbigpICovCisgICAgVUJvb2wg
bmV4dFBvc2l0aW9uKENvbnN0cmFpbmVkRmllbGRQb3NpdGlvbiYgY2Zwb3MsIFVFcnJvckNvZGUm
IHN0YXR1cykgY29uc3QgVV9PVkVSUklERTsKKworICBwcml2YXRlOgorICAgIEZvcm1hdHRlZERh
dGVJbnRlcnZhbERhdGEgKmZEYXRhOworICAgIFVFcnJvckNvZGUgZkVycm9yQ29kZTsKKyAgICBl
eHBsaWNpdCBGb3JtYXR0ZWREYXRlSW50ZXJ2YWwoRm9ybWF0dGVkRGF0ZUludGVydmFsRGF0YSAq
cmVzdWx0cykKKyAgICAgICAgOiBmRGF0YShyZXN1bHRzKSwgZkVycm9yQ29kZShVX1pFUk9fRVJS
T1IpIHt9CisgICAgZXhwbGljaXQgRm9ybWF0dGVkRGF0ZUludGVydmFsKFVFcnJvckNvZGUgZXJy
b3JDb2RlKQorICAgICAgICA6IGZEYXRhKG51bGxwdHIpLCBmRXJyb3JDb2RlKGVycm9yQ29kZSkg
e30KKyAgICBmcmllbmQgY2xhc3MgRGF0ZUludGVydmFsRm9ybWF0OworfTsKKyNlbmRpZiAvKiBV
X0hJREVfRFJBRlRfQVBJICovCisKIAogLyoqCiAgKiBEYXRlSW50ZXJ2YWxGb3JtYXQgaXMgYSBj
bGFzcyBmb3IgZm9ybWF0dGluZyBhbmQgcGFyc2luZyBkYXRlCkBAIC0yMTgsNyArMjk1LDYgQEAg
VV9OQU1FU1BBQ0VfQkVHSU4KICAqIFxlbmRjb2RlCiAgKiA8L3ByZT4KICAqLwotCiBjbGFzcyBV
X0kxOE5fQVBJIERhdGVJbnRlcnZhbEZvcm1hdCA6IHB1YmxpYyBGb3JtYXQgewogcHVibGljOgog
CkBAIC00MjUsNiArNTAxLDIxIEBAIGNsYXNzIFVfSTE4Tl9BUEkgRGF0ZUludGVydmFsRm9ybWF0
IDogcHVibGljIEZvcm1hdCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkUG9zaXRp
b24mIGZpZWxkUG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUm
IHN0YXR1cykgY29uc3QgOwogCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKyAgICAvKioKKyAg
ICAgKiBGb3JtYXQgYSBEYXRlSW50ZXJ2YWwgdG8gcHJvZHVjZSBhIEZvcm1hdHRlZERhdGVJbnRl
cnZhbC4KKyAgICAgKgorICAgICAqIFRoZSBGb3JtYXR0ZWREYXRlSW50ZXJ2YWwgZXhwb3NlcyBm
aWVsZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZm9ybWF0dGVkIHN0cmluZy4KKyAgICAgKgorICAg
ICAqIEBwYXJhbSBkdEludGVydmFsICAgICAgICBEYXRlSW50ZXJ2YWwgdG8gYmUgZm9ybWF0dGVk
LgorICAgICAqIEBwYXJhbSBzdGF0dXMgICAgICAgICAgICBTZXQgaWYgYW4gZXJyb3Igb2NjdXJz
LgorICAgICAqIEByZXR1cm4gICAgICAgICAgICAgICAgICBBIEZvcm1hdHRlZERhdGVJbnRlcnZh
bCBjb250YWluaW5nIHRoZSBmb3JtYXQgcmVzdWx0LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAg
ICAgKi8KKyAgICBGb3JtYXR0ZWREYXRlSW50ZXJ2YWwgZm9ybWF0VG9WYWx1ZSgKKyAgICAgICAg
Y29uc3QgRGF0ZUludGVydmFsJiBkdEludGVydmFsLAorICAgICAgICBVRXJyb3JDb2RlJiBzdGF0
dXMpIGNvbnN0OworI2VuZGlmIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KIAogICAgIC8qKgogICAg
ICAqIEZvcm1hdCAyIENhbGVuZGFycyB0byBwcm9kdWNlIGEgc3RyaW5nLgpAQCAtNDU1LDYgKzU0
NiwyOSBAQCBjbGFzcyBVX0kxOE5fQVBJIERhdGVJbnRlcnZhbEZvcm1hdCA6IHB1YmxpYyBGb3Jt
YXQgewogICAgICAgICAgICAgICAgICAgICAgICAgICBGaWVsZFBvc2l0aW9uJiBmaWVsZFBvc2l0
aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlJiBzdGF0dXMpIGNvbnN0
IDsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLyoqCisgICAgICogRm9ybWF0IDIg
Q2FsZW5kYXJzIHRvIHByb2R1Y2UgYSBGb3JtYXR0ZWREYXRlSW50ZXJ2YWwuCisgICAgICoKKyAg
ICAgKiBUaGUgRm9ybWF0dGVkRGF0ZUludGVydmFsIGV4cG9zZXMgZmllbGQgaW5mb3JtYXRpb24g
YWJvdXQgdGhlIGZvcm1hdHRlZCBzdHJpbmcuCisgICAgICoKKyAgICAgKiBOb3RlOiAiZnJvbUNh
bGVuZGFyIiBhbmQgInRvQ2FsZW5kYXIiIGFyZSBub3QgY29uc3QsCisgICAgICogc2luY2UgY2Fs
ZW5kYXIgaXMgbm90IGNvbnN0IGluICBTaW1wbGVEYXRlRm9ybWF0Ojpmb3JtYXQoQ2FsZW5kYXIm
KSwKKyAgICAgKgorICAgICAqIEBwYXJhbSBmcm9tQ2FsZW5kYXIgICAgICBjYWxlbmRhciBzZXQg
dG8gdGhlIGZyb20gZGF0ZSBpbiBkYXRlIGludGVydmFsCisgICAgICogICAgICAgICAgICAgICAg
ICAgICAgICAgIHRvIGJlIGZvcm1hdHRlZCBpbnRvIGRhdGUgaW50ZXJ2YWwgc3RyaW5nCisgICAg
ICogQHBhcmFtIHRvQ2FsZW5kYXIgICAgICAgIGNhbGVuZGFyIHNldCB0byB0aGUgdG8gZGF0ZSBp
biBkYXRlIGludGVydmFsCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIGZv
cm1hdHRlZCBpbnRvIGRhdGUgaW50ZXJ2YWwgc3RyaW5nCisgICAgICogQHBhcmFtIHN0YXR1cyAg
ICAgICAgICAgIFNldCBpZiBhbiBlcnJvciBvY2N1cnMuCisgICAgICogQHJldHVybiAgICAgICAg
ICAgICAgICAgIEEgRm9ybWF0dGVkRGF0ZUludGVydmFsIGNvbnRhaW5pbmcgdGhlIGZvcm1hdCBy
ZXN1bHQuCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIEZvcm1hdHRlZERhdGVJ
bnRlcnZhbCBmb3JtYXRUb1ZhbHVlKAorICAgICAgICBDYWxlbmRhciYgZnJvbUNhbGVuZGFyLAor
ICAgICAgICBDYWxlbmRhciYgdG9DYWxlbmRhciwKKyAgICAgICAgVUVycm9yQ29kZSYgc3RhdHVz
KSBjb25zdDsKKyNlbmRpZiAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKICAgICAvKioKICAgICAg
KiBEYXRlIGludGVydmFsIHBhcnNpbmcgaXMgbm90IHN1cHBvcnRlZC4gUGxlYXNlIGRvIG5vdCB1
c2UuCiAgICAgICogPFA+CkBAIC02NjQsMjggKzc3OCwxNCBAQCBjbGFzcyBVX0kxOE5fQVBJIERh
dGVJbnRlcnZhbEZvcm1hdCA6IHB1YmxpYyBGb3JtYXQgewogICAgICAqICBCZWxvdyBhcmUgZm9y
IGdlbmVyYXRpbmcgaW50ZXJ2YWwgcGF0dGVybnMgbG9jYWwgdG8gdGhlIGZvcm1hdHRlcgogICAg
ICAqLwogCi0gICAgLyoqCi0gICAgICogUHJvdmlkZSBhbiB1cGRhdGVkIEZpZWxkUG9zaXRpb24g
cG9zUmVzdWx0IGJhc2VkIG9uIHR3byBmb3JtYXRzLAotICAgICAqIHRoZSBGaWVsZFBvc2l0aW9u
IHZhbHVlcyBmb3IgZWFjaCBvZiB0aGVtLCBhbmQgdGhlIHBhdHRlcm4gdXNlZAotICAgICAqIHRv
IGNvbWJpbmUgdGhlbS4gVGhlIGlkZWEgaXMgZm9yIHBvc1Jlc3VsdCB0byBpbmRpY2F0ZSB0aGUg
Zmlyc3QKLSAgICAgKiBpbnN0YW5jZSAoaWYgYW55KSBvZiB0aGUgc3BlY2lmaWVkIGZpZWxkIGlu
IHRoZSBjb21iaW5lZCByZXN1bHQsCi0gICAgICogd2l0aCBjb3JyZWN0IG9mZnNldHMuCi0gICAg
ICoKLSAgICAgKiBAcGFyYW0gY29tYmluaW5nUGF0dGVybiAgUGF0dGVybiB1c2VkIHRvIGNvbWJp
bmUgcGF0MCBhbmQgcGF0MQotICAgICAqIEBwYXJhbSBwYXQwICAgICAgICAgICAgICBGb3JtYXR0
ZWQgZGF0ZS90aW1lIHZhbHVlIHRvIHJlcGxhY2UgezB9Ci0gICAgICogQHBhcmFtIHBvczAgICAg
ICAgICAgICAgIEZpZWxkUG9zaXRpb24gd2l0aGluIHBhdDAKLSAgICAgKiBAcGFyYW0gcGF0MSAg
ICAgICAgICAgICAgRm9ybWF0dGVkIGRhdGUvdGltZSB2YWx1ZSB0byByZXBsYWNlIHsxfQotICAg
ICAqIEBwYXJhbSBwb3MxICAgICAgICAgICAgICBGaWVsZFBvc2l0aW9uIHdpdGhpbiBwYXQxCi0g
ICAgICogQHBhcmFtIHBvc1Jlc3VsdCAgICAgICAgIEZpZWxkUG9zaXRpb24gdG8gYmUgc2V0IHRv
IHRoZSBjb3JyZWN0Ci0gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uIG9m
IHRoZSBmaXJzdCBmaWVsZCBpbnN0YW5jZSB3aGVuCi0gICAgICogICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhdDAgYW5kIHBhdDEgYXJlIGNvbWJpbmVkIHVzaW5nIGNvbWJpbmluZ1BhdHRlcm4K
LSAgICAgKi8KLSAgICBzdGF0aWMgdm9pZAotICAgIGFkanVzdFBvc2l0aW9uKFVuaWNvZGVTdHJp
bmcmIGNvbWJpbmluZ1BhdHRlcm4sIC8vIGhhcyB7MH0gYW5kIHsxfSBpbiBpdAotICAgICAgICAg
ICAgICAgICAgIFVuaWNvZGVTdHJpbmcmIHBhdDAsIEZpZWxkUG9zaXRpb24mIHBvczAsIC8vIHBh
dHRlcm4gYW5kIHBvcyBjb3JyZXNwb25kaW5nIHRvIHswfQotICAgICAgICAgICAgICAgICAgIFVu
aWNvZGVTdHJpbmcmIHBhdDEsIEZpZWxkUG9zaXRpb24mIHBvczEsIC8vIHBhdHRlcm4gYW5kIHBv
cyBjb3JyZXNwb25kaW5nIHRvIHsxfQotICAgICAgICAgICAgICAgICAgIEZpZWxkUG9zaXRpb24m
IHBvc1Jlc3VsdCk7Ci0KKyAgICAvKiogTGlrZSBmYWxsYmFja0Zvcm1hdCwgYnV0IG9ubHkgZm9y
bWF0cyB0aGUgcmFuZ2UgcGFydCBvZiB0aGUgZmFsbGJhY2suICovCisgICAgdm9pZCBmYWxsYmFj
a0Zvcm1hdFJhbmdlKAorICAgICAgICBDYWxlbmRhciYgZnJvbUNhbGVuZGFyLAorICAgICAgICBD
YWxlbmRhciYgdG9DYWxlbmRhciwKKyAgICAgICAgVW5pY29kZVN0cmluZyYgYXBwZW5kVG8sCisg
ICAgICAgIGludDhfdCYgZmlyc3RJbmRleCwKKyAgICAgICAgRmllbGRQb3NpdGlvbkhhbmRsZXIm
IGZwaGFuZGxlciwKKyAgICAgICAgVUVycm9yQ29kZSYgc3RhdHVzKSBjb25zdDsKIAogICAgIC8q
KgogICAgICAqIEZvcm1hdCAyIENhbGVuZGFycyB1c2luZyBmYWxsLWJhY2sgaW50ZXJ2YWwgcGF0
dGVybgpAQCAtNzAzLDggKzgwMyw4IEBAIGNsYXNzIFVfSTE4Tl9BUEkgRGF0ZUludGVydmFsRm9y
bWF0IDogcHVibGljIEZvcm1hdCB7CiAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChh
bnkgZGlmZmVyZW5jZSBpcyBpbiBhbXBtL2hvdXJzIG9yIGJlbG93KQogICAgICAqIEBwYXJhbSBh
cHBlbmRUbyAgICAgICAgICBPdXRwdXQgcGFyYW1ldGVyIHRvIHJlY2VpdmUgcmVzdWx0LgogICAg
ICAqICAgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQgaXMgYXBwZW5kZWQgdG8gZXhpc3Rp
bmcgY29udGVudHMuCi0gICAgICogQHBhcmFtIHBvcyAgICAgICAgICAgICAgIE9uIGlucHV0OiBh
biBhbGlnbm1lbnQgZmllbGQsIGlmIGRlc2lyZWQuCi0gICAgICogICAgICAgICAgICAgICAgICAg
ICAgICAgIE9uIG91dHB1dDogdGhlIG9mZnNldHMgb2YgdGhlIGFsaWdubWVudCBmaWVsZC4KKyAg
ICAgKiBAcGFyYW0gZmlyc3RJbmRleCAgICAgICAgU2VlIGZvcm1hdEltcGwgZm9yIG1vcmUgaW5m
b3JtYXRpb24uCisgICAgICogQHBhcmFtIGZwaGFuZGxlciAgICAgICAgIFNlZSBmb3JtYXRJbXBs
IGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgICAqIEBwYXJhbSBzdGF0dXMgICAgICAgICAgICBv
dXRwdXQgcGFyYW0gc2V0IHRvIHN1Y2Nlc3MvZmFpbHVyZSBjb2RlIG9uIGV4aXQKICAgICAgKiBA
cmV0dXJuICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlIHRvICdhcHBlbmRUbycgcGFyYW1ldGVy
LgogICAgICAqIEBpbnRlcm5hbCAocHJpdmF0ZSkKQEAgLTcxMyw3ICs4MTMsOCBAQCBjbGFzcyBV
X0kxOE5fQVBJIERhdGVJbnRlcnZhbEZvcm1hdCA6IHB1YmxpYyBGb3JtYXQgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENhbGVuZGFyJiB0b0NhbGVuZGFyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFVCb29sIGZyb21Ub09uU2FtZURheSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBVbmljb2RlU3RyaW5nJiBhcHBlbmRUbywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWVsZFBvc2l0aW9uJiBwb3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50OF90JiBmaXJzdEluZGV4LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkUG9zaXRpb25IYW5kbGVyJiBmcGhhbmRsZXIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSYgc3RhdHVzKSBj
b25zdDsKIAogCkBAIC05NzcsMTEgKzEwNzgsMTEgQEAgY2xhc3MgVV9JMThOX0FQSSBEYXRlSW50
ZXJ2YWxGb3JtYXQgOiBwdWJsaWMgRm9ybWF0IHsKICAgICAgKiAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG8gYmUgZm9ybWF0dGVkIGludG8gZGF0ZSBpbnRlcnZhbCBzdHJpbmcKICAgICAgKiBA
cGFyYW0gYXBwZW5kVG8gICAgICAgICAgT3V0cHV0IHBhcmFtZXRlciB0byByZWNlaXZlIHJlc3Vs
dC4KICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0IGlzIGFwcGVuZGVkIHRv
IGV4aXN0aW5nIGNvbnRlbnRzLgotICAgICAqIEBwYXJhbSBmaWVsZFBvc2l0aW9uICAgICBPbiBp
bnB1dDogYW4gYWxpZ25tZW50IGZpZWxkLCBpZiBkZXNpcmVkLgotICAgICAqICAgICAgICAgICAg
ICAgICAgICAgICAgICBPbiBvdXRwdXQ6IHRoZSBvZmZzZXRzIG9mIHRoZSBhbGlnbm1lbnQgZmll
bGQuCi0gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIFRoZXJlIG1heSBiZSBtdWx0aXBs
ZSBpbnN0YW5jZXMgb2YgYSBnaXZlbiBmaWVsZCB0eXBlCi0gICAgICogICAgICAgICAgICAgICAg
ICAgICAgICAgIGluIGFuIGludGVydmFsIGZvcm1hdDsgaW4gdGhpcyBjYXNlIHRoZSBmaWVsZFBv
c2l0aW9uCi0gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldHMgcmVmZXIgdG8g
dGhlIGZpcnN0IGluc3RhbmNlLgorICAgICAqIEBwYXJhbSBmaXJzdEluZGV4ICAgICAgICAwIGlm
IHRoZSBmaXJzdCBvdXRwdXQgZGF0ZSBpcyBmcm9tQ2FsZW5kYXI7CisgICAgICogICAgICAgICAg
ICAgICAgICAgICAgICAgIDEgaWYgaXQgY29ycmVzcG9uZHMgdG8gdG9DYWxlbmRhcjsKKyAgICAg
KiAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgaWYgdGhlcmUgaXMgb25seSBvbmUgZGF0ZSBw
cmludGVkLgorICAgICAqIEBwYXJhbSBmcGhhbmRsZXIgICAgICAgICBIYW5kbGVyIGZvciBmaWVs
ZCBwb3NpdGlvbiBpbmZvcm1hdGlvbi4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAg
VGhlIGZpZWxkcyB3aWxsIGJlIGZyb20gdGhlIFVEYXRlRm9ybWF0RmllbGQgZW51bS4KICAgICAg
KiBAcGFyYW0gc3RhdHVzICAgICAgICAgICAgT3V0cHV0IHBhcmFtIGZpbGxlZCB3aXRoIHN1Y2Nl
c3MvZmFpbHVyZSBzdGF0dXMuCiAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxl
ciBuZWVkcyB0byBtYWtlIHN1cmUgaXQgaXMgU1VDQ0VTUwogICAgICAqICAgICAgICAgICAgICAg
ICAgICAgICAgICBhdCB0aGUgZnVuY3Rpb24gZW50cmFuY2UKQEAgLTk5MSw5ICsxMDkyLDE3IEBA
IGNsYXNzIFVfSTE4Tl9BUEkgRGF0ZUludGVydmFsRm9ybWF0IDogcHVibGljIEZvcm1hdCB7CiAg
ICAgVW5pY29kZVN0cmluZyYgZm9ybWF0SW1wbChDYWxlbmRhciYgZnJvbUNhbGVuZGFyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsZW5kYXImIHRvQ2FsZW5kYXIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBVbmljb2RlU3RyaW5nJiBhcHBlbmRUbywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEZpZWxkUG9zaXRpb24mIGZpZWxkUG9zaXRpb24sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ4X3QmIGZpcnN0SW5kZXgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBGaWVsZFBvc2l0aW9uSGFuZGxlciYgZnBoYW5kbGVyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSYgc3RhdHVzKSBjb25zdCA7CiAK
KyAgICAvKiogVmVyc2lvbiBvZiBmb3JtYXRJbXBsIGZvciBEYXRlSW50ZXJ2YWwuICovCisgICAg
VW5pY29kZVN0cmluZyYgZm9ybWF0SW50ZXJ2YWxJbXBsKGNvbnN0IERhdGVJbnRlcnZhbCYgZHRJ
bnRlcnZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaWNvZGVTdHJpbmcmIGFw
cGVuZFRvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50OF90JiBmaXJzdEluZGV4
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmllbGRQb3NpdGlvbkhhbmRsZXImIGZw
aGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUmIHN0YXR1
cykgY29uc3Q7CisKIAogICAgIC8vIGZyb20gY2FsZW5kYXIgZmllbGQgdG8gcGF0dGVybiBsZXR0
ZXIKICAgICBzdGF0aWMgY29uc3QgY2hhcjE2X3QgZmdDYWxlbmRhckZpZWxkVG9QYXR0ZXJuTGV0
dGVyW107CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL2R0aXR2aW5mLmggYi9T
b3VyY2UvV1RGL2ljdS91bmljb2RlL2R0aXR2aW5mLmgKaW5kZXggNzI2ZTM0YTc0NWEyZWMzMGJh
NTY3YjU5ZWZiMzcxMzlmNmYxM2QzMS4uYTViN2Y4Zjc5N2Y4ZGVkOTcwMGNkZWM5ZWRmYzhlMmI3
MjY2MTM0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9pY3UvdW5pY29kZS9kdGl0dmluZi5oCisr
KyBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvZHRpdHZpbmYuaApAQCAtMTQ5LDcgKzE0OSw2IEBA
IFVfTkFNRVNQQUNFX0JFR0lOCiAgKiBjYWxlbmRhcjsgbm9uLUdyZWdvcmlhbiBjYWxlbmRhcnMg
YXJlIHN1cHBvcnRlZCBmcm9tIElDVSA0LjQuMS4KICAqIEBzdGFibGUgSUNVIDQuMAogKiovCi0K
IGNsYXNzIFVfSTE4Tl9BUEkgRGF0ZUludGVydmFsSW5mbyBVX0ZJTkFMIDogcHVibGljIFVPYmpl
Y3QgewogcHVibGljOgogICAgIC8qKgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9pY3UvdW5pY29k
ZS9kdHB0bmdlbi5oIGIvU291cmNlL1dURi9pY3UvdW5pY29kZS9kdHB0bmdlbi5oCmluZGV4IGZl
YjQ2NWU3OTk3NDAxMzZhNTI4YjdmMTZjZTE1OTc5MWQzZjYwMTcuLmU1MGMwMWI0ZTM2MGM5MDhl
YzhhNWQyZjkxZjBkNmIwZjQxNzgzYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvaWN1L3VuaWNv
ZGUvZHRwdG5nZW4uaAorKysgYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL2R0cHRuZ2VuLmgKQEAg
LTI3Myw3ICsyNzMsNiBAQCBjbGFzcyBVX0kxOE5fQVBJIERhdGVUaW1lUGF0dGVybkdlbmVyYXRv
ciA6IHB1YmxpYyBVT2JqZWN0IHsKICAgICAgKi8KICAgICBjb25zdCBVbmljb2RlU3RyaW5nJiBn
ZXRBcHBlbmRJdGVtTmFtZShVRGF0ZVRpbWVQYXR0ZXJuRmllbGQgZmllbGQpIGNvbnN0OwogCi0j
aWZuZGVmIFVfSElERV9EUkFGVF9BUEkKICAgICAvKioKICAgICAgKiBUaGUgZ2VuZXJhbCBpbnRl
cmZhY2UgdG8gZ2V0IGEgZGlzcGxheSBuYW1lIGZvciBhIHBhcnRpY3VsYXIgZGF0ZS90aW1lIGZp
ZWxkLAogICAgICAqIGluIG9uZSBvZiBzZXZlcmFsIHBvc3NpYmxlIGRpc3BsYXkgd2lkdGhzLgpA
QCAtMjgxLDEwICsyODAsOSBAQCBjbGFzcyBVX0kxOE5fQVBJIERhdGVUaW1lUGF0dGVybkdlbmVy
YXRvciA6IHB1YmxpYyBVT2JqZWN0IHsKICAgICAgKiBAcGFyYW0gZmllbGQgIFRoZSBkZXNpcmVk
IFVEYXRlVGltZVBhdHRlcm5GaWVsZCwgc3VjaCBhcyBVREFUUEdfRVJBX0ZJRUxELgogICAgICAq
IEBwYXJhbSB3aWR0aCAgVGhlIGRlc2lyZWQgVURhdGVUaW1lUEdEaXNwbGF5V2lkdGgsIHN1Y2gg
YXMgVURBVFBHX0FCQlJFVklBVEVELgogICAgICAqIEByZXR1cm4uICAgICAgVGhlIGRpc3BsYXkg
bmFtZSBmb3IgZmllbGQKLSAgICAgKiBAZHJhZnQgSUNVIDYxCisgICAgICogQHN0YWJsZSBJQ1Ug
NjEKICAgICAgKi8KICAgICBVbmljb2RlU3RyaW5nIGdldEZpZWxkRGlzcGxheU5hbWUoVURhdGVU
aW1lUGF0dGVybkZpZWxkIGZpZWxkLCBVRGF0ZVRpbWVQR0Rpc3BsYXlXaWR0aCB3aWR0aCkgY29u
c3Q7Ci0jZW5kaWYgIC8vIFVfSElERV9EUkFGVF9BUEkKIAogICAgIC8qKgogICAgICAqIFRoZSBE
YXRlVGltZUZvcm1hdCBpcyBhIG1lc3NhZ2UgZm9ybWF0IHBhdHRlcm4gdXNlZCB0byBjb21wb3Nl
IGRhdGUgYW5kCkBAIC00OTgsMjcgKzQ5NiwyMyBAQCBjbGFzcyBVX0kxOE5fQVBJIERhdGVUaW1l
UGF0dGVybkdlbmVyYXRvciA6IHB1YmxpYyBVT2JqZWN0IHsKIHByaXZhdGU6CiAgICAgLyoqCiAg
ICAgICogQ29uc3RydWN0b3IuCi0gICAgICogQHN0YWJsZSBJQ1UgMy44CiAgICAgICovCiAgICAg
RGF0ZVRpbWVQYXR0ZXJuR2VuZXJhdG9yKFVFcnJvckNvZGUgJiBzdGF0dXMpOwogCiAgICAgLyoq
CiAgICAgICogQ29uc3RydWN0b3IuCi0gICAgICogQHN0YWJsZSBJQ1UgMy44CiAgICAgICovCiAg
ICAgRGF0ZVRpbWVQYXR0ZXJuR2VuZXJhdG9yKGNvbnN0IExvY2FsZSYgbG9jYWxlLCBVRXJyb3JD
b2RlICYgc3RhdHVzKTsKIAogICAgIC8qKgogICAgICAqIENvcHkgY29uc3RydWN0b3IuCiAgICAg
ICogQHBhcmFtIG90aGVyIERhdGVUaW1lUGF0dGVybkdlbmVyYXRvciB0byBjb3B5Ci0gICAgICog
QHN0YWJsZSBJQ1UgMy44CiAgICAgICovCiAgICAgRGF0ZVRpbWVQYXR0ZXJuR2VuZXJhdG9yKGNv
bnN0IERhdGVUaW1lUGF0dGVybkdlbmVyYXRvciYgb3RoZXIpOwogCiAgICAgLyoqCiAgICAgICog
RGVmYXVsdCBhc3NpZ25tZW50IG9wZXJhdG9yLgogICAgICAqIEBwYXJhbSBvdGhlciBEYXRlVGlt
ZVBhdHRlcm5HZW5lcmF0b3IgdG8gY29weQotICAgICAqIEBzdGFibGUgSUNVIDMuOAogICAgICAq
LwogICAgIERhdGVUaW1lUGF0dGVybkdlbmVyYXRvciYgb3BlcmF0b3I9KGNvbnN0IERhdGVUaW1l
UGF0dGVybkdlbmVyYXRvciYgb3RoZXIpOwogCkBAIC01NDIsNiArNTM2LDExIEBAIGNsYXNzIFVf
STE4Tl9BUEkgRGF0ZVRpbWVQYXR0ZXJuR2VuZXJhdG9yIDogcHVibGljIFVPYmplY3QgewogCiAg
ICAgaW50MzJfdCBmQWxsb3dlZEhvdXJGb3JtYXRzWzddOyAgLy8gQWN0dWFsbHkgYW4gYXJyYXkg
b2YgQWxsb3dlZEhvdXJGb3JtYXQgZW51bSB0eXBlLCBlbmRpbmcgd2l0aCBVTktOT1dOLgogCisg
ICAgLy8gSW50ZXJuYWwgZXJyb3IgY29kZSB1c2VkIGZvciByZWNvcmRpbmcvcmVwb3J0aW5nIGVy
cm9ycyB0aGF0IG9jY3VyIGR1cmluZyBtZXRob2RzIHRoYXQgZG8gbm90CisgICAgLy8gaGF2ZSBh
IFVFcnJvckNvZGUgcGFyYW1ldGVyLiBGb3IgZXhhbXBsZTogdGhlIENvcHkgQ29uc3RydWN0b3Is
IG9yIHRoZSA6OmNsb25lKCkgbWV0aG9kLgorICAgIC8vIFdoZW4gdGhpcyBpcyBzZXQgdG8gYW4g
ZXJyb3IgdGhlIG9iamVjdCBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlLgorICAgIFVFcnJvckNvZGUg
aW50ZXJuYWxFcnJvckNvZGU7CisKICAgICAvKiBpbnRlcm5hbCBmbGFncyBtYXNrcyBmb3IgYWRq
dXN0RmllbGRUeXBlcyBldGMuICovCiAgICAgZW51bSB7CiAgICAgICAgIGtEVFBHTm9GbGFncyA9
IDAsCkBAIC01NjMsMTcgKzU2MiwxNyBAQCBjbGFzcyBVX0kxOE5fQVBJIERhdGVUaW1lUGF0dGVy
bkdlbmVyYXRvciA6IHB1YmxpYyBVT2JqZWN0IHsKICAgICB2b2lkIHNldERlY2ltYWxTeW1ib2xz
KGNvbnN0IExvY2FsZSYgbG9jYWxlLCBVRXJyb3JDb2RlJiBzdGF0dXMpOwogICAgIFVEYXRlVGlt
ZVBhdHRlcm5GaWVsZCBnZXRBcHBlbmRGb3JtYXROdW1iZXIoY29uc3QgY2hhciogZmllbGQpIGNv
bnN0OwogI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLy8gVGhlIGZvbGxvd2luZyB0aHJl
ZSBoYXZlIHRvIGJlIFVfSElERV9EUkFGVF9BUEkgKHRob3VnaCBwcml2YXRlKSBiZWNhdXNlIFVE
YXRlVGltZVBHRGlzcGxheVdpZHRoIGlzCiAgICAgVURhdGVUaW1lUGF0dGVybkZpZWxkIGdldEZp
ZWxkQW5kV2lkdGhJbmRpY2VzKGNvbnN0IGNoYXIqIGtleSwgVURhdGVUaW1lUEdEaXNwbGF5V2lk
dGgqIHdpZHRoUCkgY29uc3Q7CiAgICAgdm9pZCBzZXRGaWVsZERpc3BsYXlOYW1lKFVEYXRlVGlt
ZVBhdHRlcm5GaWVsZCBmaWVsZCwgVURhdGVUaW1lUEdEaXNwbGF5V2lkdGggd2lkdGgsIGNvbnN0
IFVuaWNvZGVTdHJpbmcmIHZhbHVlKTsKICAgICBVbmljb2RlU3RyaW5nJiBnZXRNdXRhYmxlRmll
bGREaXNwbGF5TmFtZShVRGF0ZVRpbWVQYXR0ZXJuRmllbGQgZmllbGQsIFVEYXRlVGltZVBHRGlz
cGxheVdpZHRoIHdpZHRoKTsKICNlbmRpZiAgLy8gVV9ISURFX0RSQUZUX0FQSQogICAgIHZvaWQg
Z2V0QXBwZW5kTmFtZShVRGF0ZVRpbWVQYXR0ZXJuRmllbGQgZmllbGQsIFVuaWNvZGVTdHJpbmcm
IHZhbHVlKTsKICAgICBVbmljb2RlU3RyaW5nIG1hcFNrZWxldG9uTWV0YWNoYXJhY3RlcnMoY29u
c3QgVW5pY29kZVN0cmluZyYgcGF0dGVybkZvcm0sIGludDMyX3QqIGZsYWdzLCBVRXJyb3JDb2Rl
JiBzdGF0dXMpOwotICAgIGludDMyX3QgZ2V0Q2Fub25pY2FsSW5kZXgoY29uc3QgVW5pY29kZVN0
cmluZyYgZmllbGQpOwotICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcqIGdldEJlc3RSYXcoRGF0ZVRp
bWVNYXRjaGVyJiBzb3VyY2UsIGludDMyX3QgaW5jbHVkZU1hc2ssIERpc3RhbmNlSW5mbyogbWlz
c2luZ0ZpZWxkcywgY29uc3QgUHRuU2tlbGV0b24qKiBzcGVjaWZpZWRTa2VsZXRvblB0ciA9IDAp
OworICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcqIGdldEJlc3RSYXcoRGF0ZVRpbWVNYXRjaGVyJiBz
b3VyY2UsIGludDMyX3QgaW5jbHVkZU1hc2ssIERpc3RhbmNlSW5mbyogbWlzc2luZ0ZpZWxkcywg
VUVycm9yQ29kZSYgc3RhdHVzLCBjb25zdCBQdG5Ta2VsZXRvbioqIHNwZWNpZmllZFNrZWxldG9u
UHRyID0gMCk7CiAgICAgVW5pY29kZVN0cmluZyBhZGp1c3RGaWVsZFR5cGVzKGNvbnN0IFVuaWNv
ZGVTdHJpbmcmIHBhdHRlcm4sIGNvbnN0IFB0blNrZWxldG9uKiBzcGVjaWZpZWRTa2VsZXRvbiwg
aW50MzJfdCBmbGFncywgVURhdGVUaW1lUGF0dGVybk1hdGNoT3B0aW9ucyBvcHRpb25zID0gVURB
VFBHX01BVENIX05PX09QVElPTlMpOwotICAgIFVuaWNvZGVTdHJpbmcgZ2V0QmVzdEFwcGVuZGlu
ZyhpbnQzMl90IG1pc3NpbmdGaWVsZHMsIGludDMyX3QgZmxhZ3MsIFVEYXRlVGltZVBhdHRlcm5N
YXRjaE9wdGlvbnMgb3B0aW9ucyA9IFVEQVRQR19NQVRDSF9OT19PUFRJT05TKTsKLSAgICBpbnQz
Ml90IGdldFRvcEJpdE51bWJlcihpbnQzMl90IGZvdW5kTWFzayk7CisgICAgVW5pY29kZVN0cmlu
ZyBnZXRCZXN0QXBwZW5kaW5nKGludDMyX3QgbWlzc2luZ0ZpZWxkcywgaW50MzJfdCBmbGFncywg
VUVycm9yQ29kZSYgc3RhdHVzLCBVRGF0ZVRpbWVQYXR0ZXJuTWF0Y2hPcHRpb25zIG9wdGlvbnMg
PSBVREFUUEdfTUFUQ0hfTk9fT1BUSU9OUyk7CisgICAgaW50MzJfdCBnZXRUb3BCaXROdW1iZXIo
aW50MzJfdCBmb3VuZE1hc2spIGNvbnN0OwogICAgIHZvaWQgc2V0QXZhaWxhYmxlRm9ybWF0KGNv
bnN0IFVuaWNvZGVTdHJpbmcgJmtleSwgVUVycm9yQ29kZSYgc3RhdHVzKTsKICAgICBVQm9vbCBp
c0F2YWlsYWJsZUZvcm1hdFNldChjb25zdCBVbmljb2RlU3RyaW5nICZrZXkpIGNvbnN0OwogICAg
IHZvaWQgY29weUhhc2h0YWJsZShIYXNodGFibGUgKm90aGVyLCBVRXJyb3JDb2RlICZzdGF0dXMp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9pY3UvdW5pY29kZS9lZGl0cy5oIGIvU291cmNlL1dU
Ri9pY3UvdW5pY29kZS9lZGl0cy5oCmluZGV4IDQ4NGI2MjBlNGUyYTA2MDM3OTg0MjRmZTY4ZGQ1
M2E4NWVhNzdkOGUuLjc5ZTk4YjBjYzI3YWM2NzE2OTEzZjEwYjkxNzdiNjlkYWQwMzI4M2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvZWRpdHMuaAorKysgYi9Tb3VyY2UvV1RG
L2ljdS91bmljb2RlL2VkaXRzLmgKQEAgLTEsNTMyICsxLDUyNiBAQAotLy8gwqkgMjAxNiBhbmQg
bGF0ZXI6IFVuaWNvZGUsIEluYy4gYW5kIG90aGVycy4NCi0vLyBMaWNlbnNlICYgdGVybXMgb2Yg
dXNlOiBodHRwOi8vd3d3LnVuaWNvZGUub3JnL2NvcHlyaWdodC5odG1sDQotDQotLy8gZWRpdHMu
aA0KLS8vIGNyZWF0ZWQ6IDIwMTZkZWMzMCBNYXJrdXMgVy4gU2NoZXJlcg0KLQ0KLSNpZm5kZWYg
X19FRElUU19IX18NCi0jZGVmaW5lIF9fRURJVFNfSF9fDQotDQotI2luY2x1ZGUgInVuaWNvZGUv
dXR5cGVzLmgiDQotI2luY2x1ZGUgInVuaWNvZGUvdW9iamVjdC5oIg0KLQ0KLS8qKg0KLSAqIFxm
aWxlDQotICogXGJyaWVmIEMrKyBBUEk6IEMrKyBjbGFzcyBFZGl0cyBmb3IgbG93LWxldmVsIHN0
cmluZyB0cmFuc2Zvcm1hdGlvbnMgb24gc3R5bGVkIHRleHQuDQotICovDQotDQotVV9OQU1FU1BB
Q0VfQkVHSU4NCi0NCi1jbGFzcyBVbmljb2RlU3RyaW5nOw0KLQ0KLS8qKg0KLSAqIFJlY29yZHMg
bGVuZ3RocyBvZiBzdHJpbmcgZWRpdHMgYnV0IG5vdCByZXBsYWNlbWVudCB0ZXh0LiBTdXBwb3J0
cyByZXBsYWNlbWVudHMsIGluc2VydGlvbnMsIGRlbGV0aW9ucw0KLSAqIGluIGxpbmVhciBwcm9n
cmVzc2lvbi4gRG9lcyBub3Qgc3VwcG9ydCBtb3ZpbmcvcmVvcmRlcmluZyBvZiB0ZXh0Lg0KLSAq
DQotICogVGhlcmUgYXJlIHR3byB0eXBlcyBvZiBlZGl0czogPGVtPmNoYW5nZSBlZGl0czwvZW0+
IGFuZCA8ZW0+bm8tY2hhbmdlIGVkaXRzPC9lbT4uIEFkZCBlZGl0cyB0bw0KLSAqIGluc3RhbmNl
cyBvZiB0aGlzIGNsYXNzIHVzaW5nIHtAbGluayAjYWRkUmVwbGFjZShpbnQsIGludCl9IChmb3Ig
Y2hhbmdlIGVkaXRzKSBhbmQNCi0gKiB7QGxpbmsgI2FkZFVuY2hhbmdlZChpbnQpfSAoZm9yIG5v
LWNoYW5nZSBlZGl0cykuIENoYW5nZSBlZGl0cyBhcmUgcmV0YWluZWQgd2l0aCBmdWxsIGdyYW51
bGFyaXR5LA0KLSAqIHdoZXJlYXMgYWRqYWNlbnQgbm8tY2hhbmdlIGVkaXRzIGFyZSBhbHdheXMg
bWVyZ2VkIHRvZ2V0aGVyLiBJbiBuby1jaGFuZ2UgZWRpdHMsIHRoZXJlIGlzIGEgb25lLXRvLW9u
ZQ0KLSAqIG1hcHBpbmcgYmV0d2VlbiBjb2RlIHBvaW50cyBpbiB0aGUgc291cmNlIGFuZCBkZXN0
aW5hdGlvbiBzdHJpbmdzLg0KLSAqDQotICogQWZ0ZXIgYWxsIGVkaXRzIGhhdmUgYmVlbiBhZGRl
ZCwgaW5zdGFuY2VzIG9mIHRoaXMgY2xhc3Mgc2hvdWxkIGJlIGNvbnNpZGVyZWQgaW1tdXRhYmxl
LCBhbmQgYW4NCi0gKiB7QGxpbmsgRWRpdHM6Okl0ZXJhdG9yfSBjYW4gYmUgdXNlZCBmb3IgcXVl
cmllcy4NCi0gKg0KLSAqIFRoZXJlIGFyZSBmb3VyIGZsYXZvcnMgb2YgRWRpdHM6Okl0ZXJhdG9y
Og0KLSAqDQotICogPHVsPg0KLSAqIDxsaT57QGxpbmsgI2dldEZpbmVJdGVyYXRvcigpfSByZXRh
aW5zIGZ1bGwgZ3JhbnVsYXJpdHkgb2YgY2hhbmdlIGVkaXRzLg0KLSAqIDxsaT57QGxpbmsgI2dl
dEZpbmVDaGFuZ2VzSXRlcmF0b3IoKX0gcmV0YWlucyBmdWxsIGdyYW51bGFyaXR5IG9mIGNoYW5n
ZSBlZGl0cywgYW5kIHdoZW4gY2FsbGluZw0KLSAqIG5leHQoKSBvbiB0aGUgaXRlcmF0b3IsIHNr
aXBzIG92ZXIgbm8tY2hhbmdlIGVkaXRzICh1bmNoYW5nZWQgcmVnaW9ucykuDQotICogPGxpPntA
bGluayAjZ2V0Q29hcnNlSXRlcmF0b3IoKX0gdHJlYXRzIGFkamFjZW50IGNoYW5nZSBlZGl0cyBh
cyBhIHNpbmdsZSBlZGl0LiAoQWRqYWNlbnQgbm8tY2hhbmdlDQotICogZWRpdHMgYXJlIGF1dG9t
YXRpY2FsbHkgbWVyZ2VkIGR1cmluZyB0aGUgY29uc3RydWN0aW9uIHBoYXNlLikNCi0gKiA8bGk+
e0BsaW5rICNnZXRDb2Fyc2VDaGFuZ2VzSXRlcmF0b3IoKX0gdHJlYXRzIGFkamFjZW50IGNoYW5n
ZSBlZGl0cyBhcyBhIHNpbmdsZSBlZGl0LCBhbmQgd2hlbg0KLSAqIGNhbGxpbmcgbmV4dCgpIG9u
IHRoZSBpdGVyYXRvciwgc2tpcHMgb3ZlciBuby1jaGFuZ2UgZWRpdHMgKHVuY2hhbmdlZCByZWdp
b25zKS4NCi0gKiA8L3VsPg0KLSAqDQotICogRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSBzdHJp
bmcgImFiY8OfRGVGIiwgd2hpY2ggY2FzZS1mb2xkcyB0byAiYWJjc3NkZWYiLiBUaGlzIHN0cmlu
ZyBoYXMgdGhlDQotICogZm9sbG93aW5nIGZpbmUgZWRpdHM6DQotICogPHVsPg0KLSAqIDxsaT5h
YmMg4oeoIGFiYyAobm8tY2hhbmdlKQ0KLSAqIDxsaT7DnyDih6ggc3MgKGNoYW5nZSkNCi0gKiA8
bGk+RCDih6ggZCAoY2hhbmdlKQ0KLSAqIDxsaT5lIOKHqCBlIChuby1jaGFuZ2UpDQotICogPGxp
PkYg4oeoIGYgKGNoYW5nZSkNCi0gKiA8L3VsPg0KLSAqIGFuZCB0aGUgZm9sbG93aW5nIGNvYXJz
ZSBlZGl0cyAobm90ZSBob3cgYWRqYWNlbnQgY2hhbmdlIGVkaXRzIGdldCBtZXJnZWQgdG9nZXRo
ZXIpOg0KLSAqIDx1bD4NCi0gKiA8bGk+YWJjIOKHqCBhYmMgKG5vLWNoYW5nZSkNCi0gKiA8bGk+
w59EIOKHqCBzc2QgKGNoYW5nZSkNCi0gKiA8bGk+ZSDih6ggZSAobm8tY2hhbmdlKQ0KLSAqIDxs
aT5GIOKHqCBmIChjaGFuZ2UpDQotICogPC91bD4NCi0gKg0KLSAqIFRoZSAiZmluZSBjaGFuZ2Vz
IiBhbmQgImNvYXJzZSBjaGFuZ2VzIiBpdGVyYXRvcnMgd2lsbCBzdGVwIHRocm91Z2ggb25seSB0
aGUgY2hhbmdlIGVkaXRzIHdoZW4gdGhlaXINCi0gKiB7QGxpbmsgRWRpdHM6Okl0ZXJhdG9yI25l
eHQoKX0gbWV0aG9kcyBhcmUgY2FsbGVkLiBUaGV5IGFyZSBpZGVudGljYWwgdG8gdGhlIG5vbi1j
aGFuZ2UgaXRlcmF0b3JzIHdoZW4NCi0gKiB0aGVpciB7QGxpbmsgRWRpdHM6Okl0ZXJhdG9yI2Zp
bmRTb3VyY2VJbmRleChpbnQpfSBvciB7QGxpbmsgRWRpdHM6Okl0ZXJhdG9yI2ZpbmREZXN0aW5h
dGlvbkluZGV4KGludCl9DQotICogbWV0aG9kcyBhcmUgdXNlZCB0byB3YWxrIHRocm91Z2ggdGhl
IHN0cmluZy4NCi0gKg0KLSAqIEZvciBleGFtcGxlcyBvZiBob3cgdG8gdXNlIHRoaXMgY2xhc3Ms
IHNlZSB0aGUgdGVzdCA8Y29kZT5UZXN0Q2FzZU1hcEVkaXRzSXRlcmF0b3JEb2NzPC9jb2RlPiBp
bg0KLSAqIFVDaGFyYWN0ZXJDYXNlVGVzdC5qYXZhLg0KLSAqDQotICogQW4gRWRpdHMgb2JqZWN0
IHRyYWNrcyBhIHNlcGFyYXRlIFVFcnJvckNvZGUsIGJ1dCBJQ1Ugc3RyaW5nIHRyYW5zZm9ybWF0
aW9uIGZ1bmN0aW9ucw0KLSAqIChlLmcuLCBjYXNlIG1hcHBpbmcgZnVuY3Rpb25zKSBtZXJnZSBh
bnkgc3VjaCBlcnJvcnMgaW50byB0aGVpciBBUEkncyBVRXJyb3JDb2RlLg0KLSAqDQotICogQHN0
YWJsZSBJQ1UgNTkNCi0gKi8NCi1jbGFzcyBVX0NPTU1PTl9BUEkgRWRpdHMgVV9GSU5BTCA6IHB1
YmxpYyBVTWVtb3J5IHsNCi1wdWJsaWM6DQotICAgIC8qKg0KLSAgICAgKiBDb25zdHJ1Y3RzIGFu
IGVtcHR5IG9iamVjdC4NCi0gICAgICogQHN0YWJsZSBJQ1UgNTkNCi0gICAgICovDQotICAgIEVk
aXRzKCkgOg0KLSAgICAgICAgICAgIGFycmF5KHN0YWNrQXJyYXkpLCBjYXBhY2l0eShTVEFDS19D
QVBBQ0lUWSksIGxlbmd0aCgwKSwgZGVsdGEoMCksIG51bUNoYW5nZXMoMCksDQotICAgICAgICAg
ICAgZXJyb3JDb2RlXyhVX1pFUk9fRVJST1IpIHt9DQotICAgIC8qKg0KLSAgICAgKiBDb3B5IGNv
bnN0cnVjdG9yLg0KLSAgICAgKiBAcGFyYW0gb3RoZXIgc291cmNlIGVkaXRzDQotICAgICAqIEBk
cmFmdCBJQ1UgNjANCi0gICAgICovDQotICAgIEVkaXRzKGNvbnN0IEVkaXRzICZvdGhlcikgOg0K
LSAgICAgICAgICAgIGFycmF5KHN0YWNrQXJyYXkpLCBjYXBhY2l0eShTVEFDS19DQVBBQ0lUWSks
IGxlbmd0aChvdGhlci5sZW5ndGgpLA0KLSAgICAgICAgICAgIGRlbHRhKG90aGVyLmRlbHRhKSwg
bnVtQ2hhbmdlcyhvdGhlci5udW1DaGFuZ2VzKSwNCi0gICAgICAgICAgICBlcnJvckNvZGVfKG90
aGVyLmVycm9yQ29kZV8pIHsNCi0gICAgICAgIGNvcHlBcnJheShvdGhlcik7DQotICAgIH0NCi0g
ICAgLyoqDQotICAgICAqIE1vdmUgY29uc3RydWN0b3IsIG1pZ2h0IGxlYXZlIHNyYyBlbXB0eS4N
Ci0gICAgICogVGhpcyBvYmplY3Qgd2lsbCBoYXZlIHRoZSBzYW1lIGNvbnRlbnRzIHRoYXQgdGhl
IHNvdXJjZSBvYmplY3QgaGFkLg0KLSAgICAgKiBAcGFyYW0gc3JjIHNvdXJjZSBlZGl0cw0KLSAg
ICAgKiBAZHJhZnQgSUNVIDYwDQotICAgICAqLw0KLSAgICBFZGl0cyhFZGl0cyAmJnNyYykgVV9O
T0VYQ0VQVCA6DQotICAgICAgICAgICAgYXJyYXkoc3RhY2tBcnJheSksIGNhcGFjaXR5KFNUQUNL
X0NBUEFDSVRZKSwgbGVuZ3RoKHNyYy5sZW5ndGgpLA0KLSAgICAgICAgICAgIGRlbHRhKHNyYy5k
ZWx0YSksIG51bUNoYW5nZXMoc3JjLm51bUNoYW5nZXMpLA0KLSAgICAgICAgICAgIGVycm9yQ29k
ZV8oc3JjLmVycm9yQ29kZV8pIHsNCi0gICAgICAgIG1vdmVBcnJheShzcmMpOw0KLSAgICB9DQot
DQotICAgIC8qKg0KLSAgICAgKiBEZXN0cnVjdG9yLg0KLSAgICAgKiBAc3RhYmxlIElDVSA1OQ0K
LSAgICAgKi8NCi0gICAgfkVkaXRzKCk7DQotDQotICAgIC8qKg0KLSAgICAgKiBBc3NpZ25tZW50
IG9wZXJhdG9yLg0KLSAgICAgKiBAcGFyYW0gb3RoZXIgc291cmNlIGVkaXRzDQotICAgICAqIEBy
ZXR1cm4gKnRoaXMNCi0gICAgICogQGRyYWZ0IElDVSA2MA0KLSAgICAgKi8NCi0gICAgRWRpdHMg
Jm9wZXJhdG9yPShjb25zdCBFZGl0cyAmb3RoZXIpOw0KLQ0KLSAgICAvKioNCi0gICAgICogTW92
ZSBhc3NpZ25tZW50IG9wZXJhdG9yLCBtaWdodCBsZWF2ZSBzcmMgZW1wdHkuDQotICAgICAqIFRo
aXMgb2JqZWN0IHdpbGwgaGF2ZSB0aGUgc2FtZSBjb250ZW50cyB0aGF0IHRoZSBzb3VyY2Ugb2Jq
ZWN0IGhhZC4NCi0gICAgICogVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZCBpZiAqdGhpcyBhbmQg
c3JjIGFyZSB0aGUgc2FtZSBvYmplY3QuDQotICAgICAqIEBwYXJhbSBzcmMgc291cmNlIGVkaXRz
DQotICAgICAqIEByZXR1cm4gKnRoaXMNCi0gICAgICogQGRyYWZ0IElDVSA2MA0KLSAgICAgKi8N
Ci0gICAgRWRpdHMgJm9wZXJhdG9yPShFZGl0cyAmJnNyYykgVV9OT0VYQ0VQVDsNCi0NCi0gICAg
LyoqDQotICAgICAqIFJlc2V0cyB0aGUgZGF0YSBidXQgbWF5IG5vdCByZWxlYXNlIG1lbW9yeS4N
Ci0gICAgICogQHN0YWJsZSBJQ1UgNTkNCi0gICAgICovDQotICAgIHZvaWQgcmVzZXQoKSBVX05P
RVhDRVBUOw0KLQ0KLSAgICAvKioNCi0gICAgICogQWRkcyBhIG5vLWNoYW5nZSBlZGl0OiBhIHJl
Y29yZCBmb3IgYW4gdW5jaGFuZ2VkIHNlZ21lbnQgb2YgdGV4dC4NCi0gICAgICogTm9ybWFsbHkg
Y2FsbGVkIGZyb20gaW5zaWRlIElDVSBzdHJpbmcgdHJhbnNmb3JtYXRpb24gZnVuY3Rpb25zLCBu
b3QgdXNlciBjb2RlLg0KLSAgICAgKiBAc3RhYmxlIElDVSA1OQ0KLSAgICAgKi8NCi0gICAgdm9p
ZCBhZGRVbmNoYW5nZWQoaW50MzJfdCB1bmNoYW5nZWRMZW5ndGgpOw0KLSAgICAvKioNCi0gICAg
ICogQWRkcyBhIGNoYW5nZSBlZGl0OiBhIHJlY29yZCBmb3IgYSB0ZXh0IHJlcGxhY2VtZW50L2lu
c2VydGlvbi9kZWxldGlvbi4NCi0gICAgICogTm9ybWFsbHkgY2FsbGVkIGZyb20gaW5zaWRlIElD
VSBzdHJpbmcgdHJhbnNmb3JtYXRpb24gZnVuY3Rpb25zLCBub3QgdXNlciBjb2RlLg0KLSAgICAg
KiBAc3RhYmxlIElDVSA1OQ0KLSAgICAgKi8NCi0gICAgdm9pZCBhZGRSZXBsYWNlKGludDMyX3Qg
b2xkTGVuZ3RoLCBpbnQzMl90IG5ld0xlbmd0aCk7DQotICAgIC8qKg0KLSAgICAgKiBTZXRzIHRo
ZSBVRXJyb3JDb2RlIGlmIGFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlY29yZGluZyBlZGl0cy4N
Ci0gICAgICogUHJlc2VydmVzIG9sZGVyIGVycm9yIGNvZGVzIGluIHRoZSBvdXRFcnJvckNvZGUu
DQotICAgICAqIE5vcm1hbGx5IGNhbGxlZCBmcm9tIGluc2lkZSBJQ1Ugc3RyaW5nIHRyYW5zZm9y
bWF0aW9uIGZ1bmN0aW9ucywgbm90IHVzZXIgY29kZS4NCi0gICAgICogQHBhcmFtIG91dEVycm9y
Q29kZSBTZXQgdG8gYW4gZXJyb3IgY29kZSBpZiBpdCBkb2VzIG5vdCBjb250YWluIG9uZSBhbHJl
YWR5DQotICAgICAqICAgICAgICAgICAgICAgICAgYW5kIGFuIGVycm9yIG9jY3VycmVkIHdoaWxl
IHJlY29yZGluZyBlZGl0cy4NCi0gICAgICogICAgICAgICAgICAgICAgICBPdGhlcndpc2UgdW5j
aGFuZ2VkLg0KLSAgICAgKiBAcmV0dXJuIFRSVUUgaWYgVV9GQUlMVVJFKG91dEVycm9yQ29kZSkN
Ci0gICAgICogQHN0YWJsZSBJQ1UgNTkNCi0gICAgICovDQotICAgIFVCb29sIGNvcHlFcnJvclRv
KFVFcnJvckNvZGUgJm91dEVycm9yQ29kZSk7DQotDQotICAgIC8qKg0KLSAgICAgKiBIb3cgbXVj
aCBsb25nZXIgaXMgdGhlIG5ldyB0ZXh0IGNvbXBhcmVkIHdpdGggdGhlIG9sZCB0ZXh0Pw0KLSAg
ICAgKiBAcmV0dXJuIG5ldyBsZW5ndGggbWludXMgb2xkIGxlbmd0aA0KLSAgICAgKiBAc3RhYmxl
IElDVSA1OQ0KLSAgICAgKi8NCi0gICAgaW50MzJfdCBsZW5ndGhEZWx0YSgpIGNvbnN0IHsgcmV0
dXJuIGRlbHRhOyB9DQotICAgIC8qKg0KLSAgICAgKiBAcmV0dXJuIFRSVUUgaWYgdGhlcmUgYXJl
IGFueSBjaGFuZ2UgZWRpdHMNCi0gICAgICogQHN0YWJsZSBJQ1UgNTkNCi0gICAgICovDQotICAg
IFVCb29sIGhhc0NoYW5nZXMoKSBjb25zdCB7IHJldHVybiBudW1DaGFuZ2VzICE9IDA7IH0NCi0N
Ci0jaWZuZGVmIFVfSElERV9EUkFGVF9BUEkNCi0gICAgLyoqDQotICAgICAqIEByZXR1cm4gdGhl
IG51bWJlciBvZiBjaGFuZ2UgZWRpdHMNCi0gICAgICogQGRyYWZ0IElDVSA2MA0KLSAgICAgKi8N
Ci0gICAgaW50MzJfdCBudW1iZXJPZkNoYW5nZXMoKSBjb25zdCB7IHJldHVybiBudW1DaGFuZ2Vz
OyB9DQotI2VuZGlmICAvLyBVX0hJREVfRFJBRlRfQVBJDQotDQotICAgIC8qKg0KLSAgICAgKiBB
Y2Nlc3MgdG8gdGhlIGxpc3Qgb2YgZWRpdHMuDQotICAgICAqDQotICAgICAqIEF0IGFueSBtb21l
bnQgaW4gdGltZSwgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBwb2ludHMgdG8gYSBzaW5nbGUg
ZWRpdDogYSAid2luZG93IiBpbnRvIGEgc3Bhbg0KLSAgICAgKiBvZiB0aGUgc291cmNlIHN0cmlu
ZyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgc3BhbiBvZiB0aGUgZGVzdGluYXRpb24gc3RyaW5nLiBU
aGUgc291cmNlIHN0cmluZyBzcGFuDQotICAgICAqIHN0YXJ0cyBhdCB7QGxpbmsgI3NvdXJjZUlu
ZGV4KCl9IGFuZCBydW5zIGZvciB7QGxpbmsgI29sZExlbmd0aCgpfSBjaGFyczsgdGhlIGRlc3Rp
bmF0aW9uIHN0cmluZw0KLSAgICAgKiBzcGFuIHN0YXJ0cyBhdCB7QGxpbmsgI2Rlc3RpbmF0aW9u
SW5kZXgoKX0gYW5kIHJ1bnMgZm9yIHtAbGluayAjbmV3TGVuZ3RoKCl9IGNoYXJzLg0KLSAgICAg
Kg0KLSAgICAgKiBUaGUgaXRlcmF0b3IgY2FuIGJlIG1vdmVkIGJldHdlZW4gZWRpdHMgdXNpbmcg
dGhlIHtAbGluayAjbmV4dCgpfSwge0BsaW5rICNmaW5kU291cmNlSW5kZXgoaW50KX0sDQotICAg
ICAqIGFuZCB7QGxpbmsgI2ZpbmREZXN0aW5hdGlvbkluZGV4KGludCl9IG1ldGhvZHMuIENhbGxp
bmcgYW55IG9mIHRoZXNlIG1ldGhvZHMgbXV0YXRlcyB0aGUgaXRlcmF0b3INCi0gICAgICogdG8g
bWFrZSBpdCBwb2ludCB0byB0aGUgY29ycmVzcG9uZGluZyBlZGl0Lg0KLSAgICAgKg0KLSAgICAg
KiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB7QGxpbmsg
RWRpdHN9Lg0KLSAgICAgKg0KLSAgICAgKiBAc2VlIGdldENvYXJzZUl0ZXJhdG9yDQotICAgICAq
IEBzZWUgZ2V0RmluZUl0ZXJhdG9yDQotICAgICAqIEBzdGFibGUgSUNVIDU5DQotICAgICAqLw0K
LSAgICBzdHJ1Y3QgVV9DT01NT05fQVBJIEl0ZXJhdG9yIFVfRklOQUwgOiBwdWJsaWMgVU1lbW9y
eSB7DQotICAgICAgICAvKioNCi0gICAgICAgICAqIERlZmF1bHQgY29uc3RydWN0b3IsIGVtcHR5
IGl0ZXJhdG9yLg0KLSAgICAgICAgICogQGRyYWZ0IElDVSA2MA0KLSAgICAgICAgICovDQotICAg
ICAgICBJdGVyYXRvcigpIDoNCi0gICAgICAgICAgICAgICAgYXJyYXkobnVsbHB0ciksIGluZGV4
KDApLCBsZW5ndGgoMCksDQotICAgICAgICAgICAgICAgIHJlbWFpbmluZygwKSwgb25seUNoYW5n
ZXNfKEZBTFNFKSwgY29hcnNlKEZBTFNFKSwNCi0gICAgICAgICAgICAgICAgZGlyKDApLCBjaGFu
Z2VkKEZBTFNFKSwgb2xkTGVuZ3RoXygwKSwgbmV3TGVuZ3RoXygwKSwNCi0gICAgICAgICAgICAg
ICAgc3JjSW5kZXgoMCksIHJlcGxJbmRleCgwKSwgZGVzdEluZGV4KDApIHt9DQotICAgICAgICAv
KioNCi0gICAgICAgICAqIENvcHkgY29uc3RydWN0b3IuDQotICAgICAgICAgKiBAc3RhYmxlIElD
VSA1OQ0KLSAgICAgICAgICovDQotICAgICAgICBJdGVyYXRvcihjb25zdCBJdGVyYXRvciAmb3Ro
ZXIpID0gZGVmYXVsdDsNCi0gICAgICAgIC8qKg0KLSAgICAgICAgICogQXNzaWdubWVudCBvcGVy
YXRvci4NCi0gICAgICAgICAqIEBzdGFibGUgSUNVIDU5DQotICAgICAgICAgKi8NCi0gICAgICAg
IEl0ZXJhdG9yICZvcGVyYXRvcj0oY29uc3QgSXRlcmF0b3IgJm90aGVyKSA9IGRlZmF1bHQ7DQot
DQotICAgICAgICAvKioNCi0gICAgICAgICAqIEFkdmFuY2VzIHRoZSBpdGVyYXRvciB0byB0aGUg
bmV4dCBlZGl0Lg0KLSAgICAgICAgICogQHBhcmFtIGVycm9yQ29kZSBJQ1UgZXJyb3IgY29kZS4g
SXRzIGlucHV0IHZhbHVlIG11c3QgcGFzcyB0aGUgVV9TVUNDRVNTKCkgdGVzdCwNCi0gICAgICAg
ICAqICAgICAgICAgICAgICAgICAgb3IgZWxzZSB0aGUgZnVuY3Rpb24gcmV0dXJucyBpbW1lZGlh
dGVseS4gQ2hlY2sgZm9yIFVfRkFJTFVSRSgpDQotICAgICAgICAgKiAgICAgICAgICAgICAgICAg
IG9uIG91dHB1dCBvciB1c2Ugd2l0aCBmdW5jdGlvbiBjaGFpbmluZy4gKFNlZSBVc2VyIEd1aWRl
IGZvciBkZXRhaWxzLikNCi0gICAgICAgICAqIEByZXR1cm4gVFJVRSBpZiB0aGVyZSBpcyBhbm90
aGVyIGVkaXQNCi0gICAgICAgICAqIEBzdGFibGUgSUNVIDU5DQotICAgICAgICAgKi8NCi0gICAg
ICAgIFVCb29sIG5leHQoVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7IHJldHVybiBuZXh0KG9ubHlD
aGFuZ2VzXywgZXJyb3JDb2RlKTsgfQ0KLQ0KLSAgICAgICAgLyoqDQotICAgICAgICAgKiBNb3Zl
cyB0aGUgaXRlcmF0b3IgdG8gdGhlIGVkaXQgdGhhdCBjb250YWlucyB0aGUgc291cmNlIGluZGV4
Lg0KLSAgICAgICAgICogVGhlIHNvdXJjZSBpbmRleCBtYXkgYmUgZm91bmQgaW4gYSBuby1jaGFu
Z2UgZWRpdA0KLSAgICAgICAgICogZXZlbiBpZiBub3JtYWwgaXRlcmF0aW9uIHdvdWxkIHNraXAg
bm8tY2hhbmdlIGVkaXRzLg0KLSAgICAgICAgICogTm9ybWFsIGl0ZXJhdGlvbiBjYW4gY29udGlu
dWUgZnJvbSBhIGZvdW5kIGVkaXQuDQotICAgICAgICAgKg0KLSAgICAgICAgICogVGhlIGl0ZXJh
dG9yIHN0YXRlIGJlZm9yZSB0aGlzIHNlYXJjaCBsb2dpY2FsbHkgZG9lcyBub3QgbWF0dGVyLg0K
LSAgICAgICAgICogKEl0IG1heSBhZmZlY3QgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBzZWFyY2gu
KQ0KLSAgICAgICAgICoNCi0gICAgICAgICAqIFRoZSBpdGVyYXRvciBzdGF0ZSBhZnRlciB0aGlz
IHNlYXJjaCBpcyB1bmRlZmluZWQNCi0gICAgICAgICAqIGlmIHRoZSBzb3VyY2UgaW5kZXggaXMg
b3V0IG9mIGJvdW5kcyBmb3IgdGhlIHNvdXJjZSBzdHJpbmcuDQotICAgICAgICAgKg0KLSAgICAg
ICAgICogQHBhcmFtIGkgc291cmNlIGluZGV4DQotICAgICAgICAgKiBAcGFyYW0gZXJyb3JDb2Rl
IElDVSBlcnJvciBjb2RlLiBJdHMgaW5wdXQgdmFsdWUgbXVzdCBwYXNzIHRoZSBVX1NVQ0NFU1Mo
KSB0ZXN0LA0KLSAgICAgICAgICogICAgICAgICAgICAgICAgICBvciBlbHNlIHRoZSBmdW5jdGlv
biByZXR1cm5zIGltbWVkaWF0ZWx5LiBDaGVjayBmb3IgVV9GQUlMVVJFKCkNCi0gICAgICAgICAq
ICAgICAgICAgICAgICAgICAgb24gb3V0cHV0IG9yIHVzZSB3aXRoIGZ1bmN0aW9uIGNoYWluaW5n
LiAoU2VlIFVzZXIgR3VpZGUgZm9yIGRldGFpbHMuKQ0KLSAgICAgICAgICogQHJldHVybiBUUlVF
IGlmIHRoZSBlZGl0IGZvciB0aGUgc291cmNlIGluZGV4IHdhcyBmb3VuZA0KLSAgICAgICAgICog
QHN0YWJsZSBJQ1UgNTkNCi0gICAgICAgICAqLw0KLSAgICAgICAgVUJvb2wgZmluZFNvdXJjZUlu
ZGV4KGludDMyX3QgaSwgVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7DQotICAgICAgICAgICAgcmV0
dXJuIGZpbmRJbmRleChpLCBUUlVFLCBlcnJvckNvZGUpID09IDA7DQotICAgICAgICB9DQotDQot
I2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJDQotICAgICAgICAvKioNCi0gICAgICAgICAqIE1vdmVz
IHRoZSBpdGVyYXRvciB0byB0aGUgZWRpdCB0aGF0IGNvbnRhaW5zIHRoZSBkZXN0aW5hdGlvbiBp
bmRleC4NCi0gICAgICAgICAqIFRoZSBkZXN0aW5hdGlvbiBpbmRleCBtYXkgYmUgZm91bmQgaW4g
YSBuby1jaGFuZ2UgZWRpdA0KLSAgICAgICAgICogZXZlbiBpZiBub3JtYWwgaXRlcmF0aW9uIHdv
dWxkIHNraXAgbm8tY2hhbmdlIGVkaXRzLg0KLSAgICAgICAgICogTm9ybWFsIGl0ZXJhdGlvbiBj
YW4gY29udGludWUgZnJvbSBhIGZvdW5kIGVkaXQuDQotICAgICAgICAgKg0KLSAgICAgICAgICog
VGhlIGl0ZXJhdG9yIHN0YXRlIGJlZm9yZSB0aGlzIHNlYXJjaCBsb2dpY2FsbHkgZG9lcyBub3Qg
bWF0dGVyLg0KLSAgICAgICAgICogKEl0IG1heSBhZmZlY3QgdGhlIHBlcmZvcm1hbmNlIG9mIHRo
ZSBzZWFyY2guKQ0KLSAgICAgICAgICoNCi0gICAgICAgICAqIFRoZSBpdGVyYXRvciBzdGF0ZSBh
ZnRlciB0aGlzIHNlYXJjaCBpcyB1bmRlZmluZWQNCi0gICAgICAgICAqIGlmIHRoZSBzb3VyY2Ug
aW5kZXggaXMgb3V0IG9mIGJvdW5kcyBmb3IgdGhlIHNvdXJjZSBzdHJpbmcuDQotICAgICAgICAg
Kg0KLSAgICAgICAgICogQHBhcmFtIGkgZGVzdGluYXRpb24gaW5kZXgNCi0gICAgICAgICAqIEBw
YXJhbSBlcnJvckNvZGUgSUNVIGVycm9yIGNvZGUuIEl0cyBpbnB1dCB2YWx1ZSBtdXN0IHBhc3Mg
dGhlIFVfU1VDQ0VTUygpIHRlc3QsDQotICAgICAgICAgKiAgICAgICAgICAgICAgICAgIG9yIGVs
c2UgdGhlIGZ1bmN0aW9uIHJldHVybnMgaW1tZWRpYXRlbHkuIENoZWNrIGZvciBVX0ZBSUxVUkUo
KQ0KLSAgICAgICAgICogICAgICAgICAgICAgICAgICBvbiBvdXRwdXQgb3IgdXNlIHdpdGggZnVu
Y3Rpb24gY2hhaW5pbmcuIChTZWUgVXNlciBHdWlkZSBmb3IgZGV0YWlscy4pDQotICAgICAgICAg
KiBAcmV0dXJuIFRSVUUgaWYgdGhlIGVkaXQgZm9yIHRoZSBkZXN0aW5hdGlvbiBpbmRleCB3YXMg
Zm91bmQNCi0gICAgICAgICAqIEBkcmFmdCBJQ1UgNjANCi0gICAgICAgICAqLw0KLSAgICAgICAg
VUJvb2wgZmluZERlc3RpbmF0aW9uSW5kZXgoaW50MzJfdCBpLCBVRXJyb3JDb2RlICZlcnJvckNv
ZGUpIHsNCi0gICAgICAgICAgICByZXR1cm4gZmluZEluZGV4KGksIEZBTFNFLCBlcnJvckNvZGUp
ID09IDA7DQotICAgICAgICB9DQotDQotICAgICAgICAvKioNCi0gICAgICAgICAqIENvbXB1dGVz
IHRoZSBkZXN0aW5hdGlvbiBpbmRleCBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBzb3VyY2Ug
aW5kZXguDQotICAgICAgICAgKiBJZiB0aGUgc291cmNlIGluZGV4IGlzIGluc2lkZSBhIGNoYW5n
ZSBlZGl0IChub3QgYXQgaXRzIHN0YXJ0KSwNCi0gICAgICAgICAqIHRoZW4gdGhlIGRlc3RpbmF0
aW9uIGluZGV4IGF0IHRoZSBlbmQgb2YgdGhhdCBlZGl0IGlzIHJldHVybmVkLA0KLSAgICAgICAg
ICogc2luY2UgdGhlcmUgaXMgbm8gaW5mb3JtYXRpb24gYWJvdXQgaW5kZXggbWFwcGluZyBpbnNp
ZGUgYSBjaGFuZ2UgZWRpdC4NCi0gICAgICAgICAqDQotICAgICAgICAgKiAoVGhpcyBtZWFucyB0
aGF0IGluZGV4ZXMgdG8gdGhlIHN0YXJ0IGFuZCBtaWRkbGUgb2YgYW4gZWRpdCwNCi0gICAgICAg
ICAqIGZvciBleGFtcGxlIGFyb3VuZCBhIGdyYXBoZW1lIGNsdXN0ZXIsIGFyZSBtYXBwZWQgdG8g
aW5kZXhlcw0KLSAgICAgICAgICogZW5jb21wYXNzaW5nIHRoZSBlbnRpcmUgZWRpdC4NCi0gICAg
ICAgICAqIFRoZSBhbHRlcm5hdGl2ZSwgbWFwcGluZyBhbiBpbnRlcmlvciBpbmRleCB0byB0aGUg
c3RhcnQsDQotICAgICAgICAgKiB3b3VsZCBtYXAgc3VjaCBhbiBpbnRlcnZhbCB0byBhbiBlbXB0
eSBvbmUuKQ0KLSAgICAgICAgICoNCi0gICAgICAgICAqIFRoaXMgb3BlcmF0aW9uIHdpbGwgdXN1
YWxseSBidXQgbm90IGFsd2F5cyBtb2RpZnkgdGhpcyBvYmplY3QuDQotICAgICAgICAgKiBUaGUg
aXRlcmF0b3Igc3RhdGUgYWZ0ZXIgdGhpcyBzZWFyY2ggaXMgdW5kZWZpbmVkLg0KLSAgICAgICAg
ICoNCi0gICAgICAgICAqIEBwYXJhbSBpIHNvdXJjZSBpbmRleA0KLSAgICAgICAgICogQHBhcmFt
IGVycm9yQ29kZSBJQ1UgZXJyb3IgY29kZS4gSXRzIGlucHV0IHZhbHVlIG11c3QgcGFzcyB0aGUg
VV9TVUNDRVNTKCkgdGVzdCwNCi0gICAgICAgICAqICAgICAgICAgICAgICAgICAgb3IgZWxzZSB0
aGUgZnVuY3Rpb24gcmV0dXJucyBpbW1lZGlhdGVseS4gQ2hlY2sgZm9yIFVfRkFJTFVSRSgpDQot
ICAgICAgICAgKiAgICAgICAgICAgICAgICAgIG9uIG91dHB1dCBvciB1c2Ugd2l0aCBmdW5jdGlv
biBjaGFpbmluZy4gKFNlZSBVc2VyIEd1aWRlIGZvciBkZXRhaWxzLikNCi0gICAgICAgICAqIEBy
ZXR1cm4gZGVzdGluYXRpb24gaW5kZXg7IHVuZGVmaW5lZCBpZiBpIGlzIG5vdCAwLi5zdHJpbmcg
bGVuZ3RoDQotICAgICAgICAgKiBAZHJhZnQgSUNVIDYwDQotICAgICAgICAgKi8NCi0gICAgICAg
IGludDMyX3QgZGVzdGluYXRpb25JbmRleEZyb21Tb3VyY2VJbmRleChpbnQzMl90IGksIFVFcnJv
ckNvZGUgJmVycm9yQ29kZSk7DQotDQotICAgICAgICAvKioNCi0gICAgICAgICAqIENvbXB1dGVz
IHRoZSBzb3VyY2UgaW5kZXggY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gZGVzdGluYXRpb24g
aW5kZXguDQotICAgICAgICAgKiBJZiB0aGUgZGVzdGluYXRpb24gaW5kZXggaXMgaW5zaWRlIGEg
Y2hhbmdlIGVkaXQgKG5vdCBhdCBpdHMgc3RhcnQpLA0KLSAgICAgICAgICogdGhlbiB0aGUgc291
cmNlIGluZGV4IGF0IHRoZSBlbmQgb2YgdGhhdCBlZGl0IGlzIHJldHVybmVkLA0KLSAgICAgICAg
ICogc2luY2UgdGhlcmUgaXMgbm8gaW5mb3JtYXRpb24gYWJvdXQgaW5kZXggbWFwcGluZyBpbnNp
ZGUgYSBjaGFuZ2UgZWRpdC4NCi0gICAgICAgICAqDQotICAgICAgICAgKiAoVGhpcyBtZWFucyB0
aGF0IGluZGV4ZXMgdG8gdGhlIHN0YXJ0IGFuZCBtaWRkbGUgb2YgYW4gZWRpdCwNCi0gICAgICAg
ICAqIGZvciBleGFtcGxlIGFyb3VuZCBhIGdyYXBoZW1lIGNsdXN0ZXIsIGFyZSBtYXBwZWQgdG8g
aW5kZXhlcw0KLSAgICAgICAgICogZW5jb21wYXNzaW5nIHRoZSBlbnRpcmUgZWRpdC4NCi0gICAg
ICAgICAqIFRoZSBhbHRlcm5hdGl2ZSwgbWFwcGluZyBhbiBpbnRlcmlvciBpbmRleCB0byB0aGUg
c3RhcnQsDQotICAgICAgICAgKiB3b3VsZCBtYXAgc3VjaCBhbiBpbnRlcnZhbCB0byBhbiBlbXB0
eSBvbmUuKQ0KLSAgICAgICAgICoNCi0gICAgICAgICAqIFRoaXMgb3BlcmF0aW9uIHdpbGwgdXN1
YWxseSBidXQgbm90IGFsd2F5cyBtb2RpZnkgdGhpcyBvYmplY3QuDQotICAgICAgICAgKiBUaGUg
aXRlcmF0b3Igc3RhdGUgYWZ0ZXIgdGhpcyBzZWFyY2ggaXMgdW5kZWZpbmVkLg0KLSAgICAgICAg
ICoNCi0gICAgICAgICAqIEBwYXJhbSBpIGRlc3RpbmF0aW9uIGluZGV4DQotICAgICAgICAgKiBA
cGFyYW0gZXJyb3JDb2RlIElDVSBlcnJvciBjb2RlLiBJdHMgaW5wdXQgdmFsdWUgbXVzdCBwYXNz
IHRoZSBVX1NVQ0NFU1MoKSB0ZXN0LA0KLSAgICAgICAgICogICAgICAgICAgICAgICAgICBvciBl
bHNlIHRoZSBmdW5jdGlvbiByZXR1cm5zIGltbWVkaWF0ZWx5LiBDaGVjayBmb3IgVV9GQUlMVVJF
KCkNCi0gICAgICAgICAqICAgICAgICAgICAgICAgICAgb24gb3V0cHV0IG9yIHVzZSB3aXRoIGZ1
bmN0aW9uIGNoYWluaW5nLiAoU2VlIFVzZXIgR3VpZGUgZm9yIGRldGFpbHMuKQ0KLSAgICAgICAg
ICogQHJldHVybiBzb3VyY2UgaW5kZXg7IHVuZGVmaW5lZCBpZiBpIGlzIG5vdCAwLi5zdHJpbmcg
bGVuZ3RoDQotICAgICAgICAgKiBAZHJhZnQgSUNVIDYwDQotICAgICAgICAgKi8NCi0gICAgICAg
IGludDMyX3Qgc291cmNlSW5kZXhGcm9tRGVzdGluYXRpb25JbmRleChpbnQzMl90IGksIFVFcnJv
ckNvZGUgJmVycm9yQ29kZSk7DQotI2VuZGlmICAvLyBVX0hJREVfRFJBRlRfQVBJDQotDQotICAg
ICAgICAvKioNCi0gICAgICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgZWRpdCBjdXJyZW50bHkg
cmVwcmVzZW50ZWQgYnkgdGhlIGl0ZXJhdG9yIGlzIGEgY2hhbmdlIGVkaXQuDQotICAgICAgICAg
Kg0KLSAgICAgICAgICogQHJldHVybiBUUlVFIGlmIHRoaXMgZWRpdCByZXBsYWNlcyBvbGRMZW5n
dGgoKSB1bml0cyB3aXRoIG5ld0xlbmd0aCgpIGRpZmZlcmVudCBvbmVzLg0KLSAgICAgICAgICog
ICAgICAgICBGQUxTRSBpZiBvbGRMZW5ndGggdW5pdHMgcmVtYWluIHVuY2hhbmdlZC4NCi0gICAg
ICAgICAqIEBzdGFibGUgSUNVIDU5DQotICAgICAgICAgKi8NCi0gICAgICAgIFVCb29sIGhhc0No
YW5nZSgpIGNvbnN0IHsgcmV0dXJuIGNoYW5nZWQ7IH0NCi0NCi0gICAgICAgIC8qKg0KLSAgICAg
ICAgICogVGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudCBzcGFuIGluIHRoZSBzb3VyY2Ugc3RyaW5n
LCB3aGljaCBzdGFydHMgYXQge0BsaW5rICNzb3VyY2VJbmRleH0uDQotICAgICAgICAgKg0KLSAg
ICAgICAgICogQHJldHVybiB0aGUgbnVtYmVyIG9mIHVuaXRzIGluIHRoZSBvcmlnaW5hbCBzdHJp
bmcgd2hpY2ggYXJlIHJlcGxhY2VkIG9yIHJlbWFpbiB1bmNoYW5nZWQuDQotICAgICAgICAgKiBA
c3RhYmxlIElDVSA1OQ0KLSAgICAgICAgICovDQotICAgICAgICBpbnQzMl90IG9sZExlbmd0aCgp
IGNvbnN0IHsgcmV0dXJuIG9sZExlbmd0aF87IH0NCi0NCi0gICAgICAgIC8qKg0KLSAgICAgICAg
ICogVGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudCBzcGFuIGluIHRoZSBkZXN0aW5hdGlvbiBzdHJp
bmcsIHdoaWNoIHN0YXJ0cyBhdA0KLSAgICAgICAgICoge0BsaW5rICNkZXN0aW5hdGlvbkluZGV4
fSwgb3IgaW4gdGhlIHJlcGxhY2VtZW50IHN0cmluZywgd2hpY2ggc3RhcnRzIGF0DQotICAgICAg
ICAgKiB7QGxpbmsgI3JlcGxhY2VtZW50SW5kZXh9Lg0KLSAgICAgICAgICoNCi0gICAgICAgICAq
IEByZXR1cm4gdGhlIG51bWJlciBvZiB1bml0cyBpbiB0aGUgbW9kaWZpZWQgc3RyaW5nLCBpZiBo
YXNDaGFuZ2UoKSBpcyBUUlVFLg0KLSAgICAgICAgICogICAgICAgICBTYW1lIGFzIG9sZExlbmd0
aCBpZiBoYXNDaGFuZ2UoKSBpcyBGQUxTRS4NCi0gICAgICAgICAqIEBzdGFibGUgSUNVIDU5DQot
ICAgICAgICAgKi8NCi0gICAgICAgIGludDMyX3QgbmV3TGVuZ3RoKCkgY29uc3QgeyByZXR1cm4g
bmV3TGVuZ3RoXzsgfQ0KLQ0KLSAgICAgICAgLyoqDQotICAgICAgICAgKiBUaGUgc3RhcnQgaW5k
ZXggb2YgdGhlIGN1cnJlbnQgc3BhbiBpbiB0aGUgc291cmNlIHN0cmluZzsgdGhlIHNwYW4gaGFz
IGxlbmd0aA0KLSAgICAgICAgICoge0BsaW5rICNvbGRMZW5ndGh9Lg0KLSAgICAgICAgICoNCi0g
ICAgICAgICAqIEByZXR1cm4gdGhlIGN1cnJlbnQgaW5kZXggaW50byB0aGUgc291cmNlIHN0cmlu
Zw0KLSAgICAgICAgICogQHN0YWJsZSBJQ1UgNTkNCi0gICAgICAgICAqLw0KLSAgICAgICAgaW50
MzJfdCBzb3VyY2VJbmRleCgpIGNvbnN0IHsgcmV0dXJuIHNyY0luZGV4OyB9DQotDQotICAgICAg
ICAvKioNCi0gICAgICAgICAqIFRoZSBzdGFydCBpbmRleCBvZiB0aGUgY3VycmVudCBzcGFuIGlu
IHRoZSByZXBsYWNlbWVudCBzdHJpbmc7IHRoZSBzcGFuIGhhcyBsZW5ndGgNCi0gICAgICAgICAq
IHtAbGluayAjbmV3TGVuZ3RofS4gV2VsbC1kZWZpbmVkIG9ubHkgaWYgdGhlIGN1cnJlbnQgZWRp
dCBpcyBhIGNoYW5nZSBlZGl0Lg0KLSAgICAgICAgICogPHA+DQotICAgICAgICAgKiBUaGUgPGVt
PnJlcGxhY2VtZW50IHN0cmluZzwvZW0+IGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIGFsbCBzdWJz
dHJpbmdzIG9mIHRoZSBkZXN0aW5hdGlvbg0KLSAgICAgICAgICogc3RyaW5nIGNvcnJlc3BvbmRp
bmcgdG8gY2hhbmdlIGVkaXRzLg0KLSAgICAgICAgICogPHA+DQotICAgICAgICAgKiBUaGlzIG1l
dGhvZCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggb3BlcmF0aW9ucyB0aGF0
IHdyaXRlIG9ubHkgcmVwbGFjZW1lbnQNCi0gICAgICAgICAqIGNoYXJhY3RlcnMgKGUuZy4sIHtA
bGluayBDYXNlTWFwI29taXRVbmNoYW5nZWRUZXh0KCl9KS4gVGhlIHNvdXJjZSBzdHJpbmcgY2Fu
IHRoZW4gYmUgbW9kaWZpZWQNCi0gICAgICAgICAqIGluLXBsYWNlLg0KLSAgICAgICAgICoNCi0g
ICAgICAgICAqIEByZXR1cm4gdGhlIGN1cnJlbnQgaW5kZXggaW50byB0aGUgcmVwbGFjZW1lbnQt
Y2hhcmFjdGVycy1vbmx5IHN0cmluZywNCi0gICAgICAgICAqICAgICAgICAgbm90IGNvdW50aW5n
IHVuY2hhbmdlZCBzcGFucw0KLSAgICAgICAgICogQHN0YWJsZSBJQ1UgNTkNCi0gICAgICAgICAq
Lw0KLSAgICAgICAgaW50MzJfdCByZXBsYWNlbWVudEluZGV4KCkgY29uc3Qgew0KLSAgICAgICAg
ICAgIC8vIFRPRE86IFRocm93IGFuIGV4Y2VwdGlvbiBpZiB3ZSBhcmVuJ3QgaW4gYSBjaGFuZ2Ug
ZWRpdD8NCi0gICAgICAgICAgICByZXR1cm4gcmVwbEluZGV4Ow0KLSAgICAgICAgfQ0KLQ0KLSAg
ICAgICAgLyoqDQotICAgICAgICAgKiBUaGUgc3RhcnQgaW5kZXggb2YgdGhlIGN1cnJlbnQgc3Bh
biBpbiB0aGUgZGVzdGluYXRpb24gc3RyaW5nOyB0aGUgc3BhbiBoYXMgbGVuZ3RoDQotICAgICAg
ICAgKiB7QGxpbmsgI25ld0xlbmd0aH0uDQotICAgICAgICAgKg0KLSAgICAgICAgICogQHJldHVy
biB0aGUgY3VycmVudCBpbmRleCBpbnRvIHRoZSBmdWxsIGRlc3RpbmF0aW9uIHN0cmluZw0KLSAg
ICAgICAgICogQHN0YWJsZSBJQ1UgNTkNCi0gICAgICAgICAqLw0KLSAgICAgICAgaW50MzJfdCBk
ZXN0aW5hdGlvbkluZGV4KCkgY29uc3QgeyByZXR1cm4gZGVzdEluZGV4OyB9DQotDQotI2lmbmRl
ZiBVX0hJREVfSU5URVJOQUxfQVBJDQotICAgICAgICAvKioNCi0gICAgICAgICAqIEEgc3RyaW5n
IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IGVkaXQgcmVwcmVzZW50ZWQgYnkgdGhlIGl0
ZXJhdG9yIGZvciBkZWJ1Z2dpbmcuIFlvdQ0KLSAgICAgICAgICogc2hvdWxkIG5vdCBkZXBlbmQg
b24gdGhlIGNvbnRlbnRzIG9mIHRoZSByZXR1cm4gc3RyaW5nLg0KLSAgICAgICAgICogQGludGVy
bmFsDQotICAgICAgICAgKi8NCi0gICAgICAgIFVuaWNvZGVTdHJpbmcmIHRvU3RyaW5nKFVuaWNv
ZGVTdHJpbmcmIGFwcGVuZFRvKSBjb25zdDsNCi0jZW5kaWYgIC8vIFVfSElERV9JTlRFUk5BTF9B
UEkNCi0NCi0gICAgcHJpdmF0ZToNCi0gICAgICAgIGZyaWVuZCBjbGFzcyBFZGl0czsNCi0NCi0g
ICAgICAgIEl0ZXJhdG9yKGNvbnN0IHVpbnQxNl90ICphLCBpbnQzMl90IGxlbiwgVUJvb2wgb2Ms
IFVCb29sIGNycyk7DQotDQotICAgICAgICBpbnQzMl90IHJlYWRMZW5ndGgoaW50MzJfdCBoZWFk
KTsNCi0gICAgICAgIHZvaWQgdXBkYXRlTmV4dEluZGV4ZXMoKTsNCi0gICAgICAgIHZvaWQgdXBk
YXRlUHJldmlvdXNJbmRleGVzKCk7DQotICAgICAgICBVQm9vbCBub05leHQoKTsNCi0gICAgICAg
IFVCb29sIG5leHQoVUJvb2wgb25seUNoYW5nZXMsIFVFcnJvckNvZGUgJmVycm9yQ29kZSk7DQot
ICAgICAgICBVQm9vbCBwcmV2aW91cyhVRXJyb3JDb2RlICZlcnJvckNvZGUpOw0KLSAgICAgICAg
LyoqIEByZXR1cm4gLTE6IGVycm9yIG9yIGk8MDsgMDogZm91bmQ7IDE6IGk+PXN0cmluZyBsZW5n
dGggKi8NCi0gICAgICAgIGludDMyX3QgZmluZEluZGV4KGludDMyX3QgaSwgVUJvb2wgZmluZFNv
dXJjZSwgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsNCi0NCi0gICAgICAgIGNvbnN0IHVpbnQxNl90
ICphcnJheTsNCi0gICAgICAgIGludDMyX3QgaW5kZXgsIGxlbmd0aDsNCi0gICAgICAgIC8vIDAg
aWYgd2UgYXJlIG5vdCB3aXRoaW4gY29tcHJlc3NlZCBlcXVhbC1sZW5ndGggY2hhbmdlcy4NCi0g
ICAgICAgIC8vIE90aGVyd2lzZSB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZyBjaGFuZ2VzLCBpbmNs
dWRpbmcgdGhlIGN1cnJlbnQgb25lLg0KLSAgICAgICAgaW50MzJfdCByZW1haW5pbmc7DQotICAg
ICAgICBVQm9vbCBvbmx5Q2hhbmdlc18sIGNvYXJzZTsNCi0NCi0gICAgICAgIGludDhfdCBkaXI7
ICAvLyBpdGVyYXRpb24gZGlyZWN0aW9uOiBiYWNrKDwwKSwgaW5pdGlhbCgwKSwgZm9yd2FyZCg+
MCkNCi0gICAgICAgIFVCb29sIGNoYW5nZWQ7DQotICAgICAgICBpbnQzMl90IG9sZExlbmd0aF8s
IG5ld0xlbmd0aF87DQotICAgICAgICBpbnQzMl90IHNyY0luZGV4LCByZXBsSW5kZXgsIGRlc3RJ
bmRleDsNCi0gICAgfTsNCi0NCi0gICAgLyoqDQotICAgICAqIFJldHVybnMgYW4gSXRlcmF0b3Ig
Zm9yIGNvYXJzZS1ncmFpbmVkIGNoYW5nZSBlZGl0cw0KLSAgICAgKiAoYWRqYWNlbnQgY2hhbmdl
IGVkaXRzIGFyZSB0cmVhdGVkIGFzIG9uZSkuDQotICAgICAqIENhbiBiZSB1c2VkIHRvIHBlcmZv
cm0gc2ltcGxlIHN0cmluZyB1cGRhdGVzLg0KLSAgICAgKiBTa2lwcyBuby1jaGFuZ2UgZWRpdHMu
DQotICAgICAqIEByZXR1cm4gYW4gSXRlcmF0b3IgdGhhdCBtZXJnZXMgYWRqYWNlbnQgY2hhbmdl
cy4NCi0gICAgICogQHN0YWJsZSBJQ1UgNTkNCi0gICAgICovDQotICAgIEl0ZXJhdG9yIGdldENv
YXJzZUNoYW5nZXNJdGVyYXRvcigpIGNvbnN0IHsNCi0gICAgICAgIHJldHVybiBJdGVyYXRvcihh
cnJheSwgbGVuZ3RoLCBUUlVFLCBUUlVFKTsNCi0gICAgfQ0KLQ0KLSAgICAvKioNCi0gICAgICog
UmV0dXJucyBhbiBJdGVyYXRvciBmb3IgY29hcnNlLWdyYWluZWQgY2hhbmdlIGFuZCBuby1jaGFu
Z2UgZWRpdHMNCi0gICAgICogKGFkamFjZW50IGNoYW5nZSBlZGl0cyBhcmUgdHJlYXRlZCBhcyBv
bmUpLg0KLSAgICAgKiBDYW4gYmUgdXNlZCB0byBwZXJmb3JtIHNpbXBsZSBzdHJpbmcgdXBkYXRl
cy4NCi0gICAgICogQWRqYWNlbnQgY2hhbmdlIGVkaXRzIGFyZSB0cmVhdGVkIGFzIG9uZSBlZGl0
Lg0KLSAgICAgKiBAcmV0dXJuIGFuIEl0ZXJhdG9yIHRoYXQgbWVyZ2VzIGFkamFjZW50IGNoYW5n
ZXMuDQotICAgICAqIEBzdGFibGUgSUNVIDU5DQotICAgICAqLw0KLSAgICBJdGVyYXRvciBnZXRD
b2Fyc2VJdGVyYXRvcigpIGNvbnN0IHsNCi0gICAgICAgIHJldHVybiBJdGVyYXRvcihhcnJheSwg
bGVuZ3RoLCBGQUxTRSwgVFJVRSk7DQotICAgIH0NCi0NCi0gICAgLyoqDQotICAgICAqIFJldHVy
bnMgYW4gSXRlcmF0b3IgZm9yIGZpbmUtZ3JhaW5lZCBjaGFuZ2UgZWRpdHMNCi0gICAgICogKGZ1
bGwgZ3JhbnVsYXJpdHkgb2YgY2hhbmdlIGVkaXRzIGlzIHJldGFpbmVkKS4NCi0gICAgICogQ2Fu
IGJlIHVzZWQgZm9yIG1vZGlmeWluZyBzdHlsZWQgdGV4dC4NCi0gICAgICogU2tpcHMgbm8tY2hh
bmdlIGVkaXRzLg0KLSAgICAgKiBAcmV0dXJuIGFuIEl0ZXJhdG9yIHRoYXQgc2VwYXJhdGVzIGFk
amFjZW50IGNoYW5nZXMuDQotICAgICAqIEBzdGFibGUgSUNVIDU5DQotICAgICAqLw0KLSAgICBJ
dGVyYXRvciBnZXRGaW5lQ2hhbmdlc0l0ZXJhdG9yKCkgY29uc3Qgew0KLSAgICAgICAgcmV0dXJu
IEl0ZXJhdG9yKGFycmF5LCBsZW5ndGgsIFRSVUUsIEZBTFNFKTsNCi0gICAgfQ0KLQ0KLSAgICAv
KioNCi0gICAgICogUmV0dXJucyBhbiBJdGVyYXRvciBmb3IgZmluZS1ncmFpbmVkIGNoYW5nZSBh
bmQgbm8tY2hhbmdlIGVkaXRzDQotICAgICAqIChmdWxsIGdyYW51bGFyaXR5IG9mIGNoYW5nZSBl
ZGl0cyBpcyByZXRhaW5lZCkuDQotICAgICAqIENhbiBiZSB1c2VkIGZvciBtb2RpZnlpbmcgc3R5
bGVkIHRleHQuDQotICAgICAqIEByZXR1cm4gYW4gSXRlcmF0b3IgdGhhdCBzZXBhcmF0ZXMgYWRq
YWNlbnQgY2hhbmdlcy4NCi0gICAgICogQHN0YWJsZSBJQ1UgNTkNCi0gICAgICovDQotICAgIEl0
ZXJhdG9yIGdldEZpbmVJdGVyYXRvcigpIGNvbnN0IHsNCi0gICAgICAgIHJldHVybiBJdGVyYXRv
cihhcnJheSwgbGVuZ3RoLCBGQUxTRSwgRkFMU0UpOw0KLSAgICB9DQotDQotI2lmbmRlZiBVX0hJ
REVfRFJBRlRfQVBJDQotICAgIC8qKg0KLSAgICAgKiBNZXJnZXMgdGhlIHR3byBpbnB1dCBFZGl0
cyBhbmQgYXBwZW5kcyB0aGUgcmVzdWx0IHRvIHRoaXMgb2JqZWN0Lg0KLSAgICAgKg0KLSAgICAg
KiBDb25zaWRlciB0d28gc3RyaW5nIHRyYW5zZm9ybWF0aW9ucyAoZm9yIGV4YW1wbGUsIG5vcm1h
bGl6YXRpb24gYW5kIGNhc2UgbWFwcGluZykNCi0gICAgICogd2hlcmUgZWFjaCByZWNvcmRzIEVk
aXRzIGluIGFkZGl0aW9uIHRvIHdyaXRpbmcgYW4gb3V0cHV0IHN0cmluZy48YnI+DQotICAgICAq
IEVkaXRzIGFiIHJlZmxlY3QgaG93IHN1YnN0cmluZ3Mgb2YgaW5wdXQgc3RyaW5nIGENCi0gICAg
ICogbWFwIHRvIHN1YnN0cmluZ3Mgb2YgaW50ZXJtZWRpYXRlIHN0cmluZyBiLjxicj4NCi0gICAg
ICogRWRpdHMgYmMgcmVmbGVjdCBob3cgc3Vic3RyaW5ncyBvZiBpbnRlcm1lZGlhdGUgc3RyaW5n
IGINCi0gICAgICogbWFwIHRvIHN1YnN0cmluZ3Mgb2Ygb3V0cHV0IHN0cmluZyBjLjxicj4NCi0g
ICAgICogVGhpcyBmdW5jdGlvbiBtZXJnZXMgYWIgYW5kIGJjIHN1Y2ggdGhhdCB0aGUgYWRkaXRp
b25hbCBlZGl0cw0KLSAgICAgKiByZWNvcmRlZCBpbiB0aGlzIG9iamVjdCByZWZsZWN0IGhvdyBz
dWJzdHJpbmdzIG9mIGlucHV0IHN0cmluZyBhDQotICAgICAqIG1hcCB0byBzdWJzdHJpbmdzIG9m
IG91dHB1dCBzdHJpbmcgYy4NCi0gICAgICoNCi0gICAgICogSWYgdW5yZWxhdGVkIEVkaXRzIGFy
ZSBwYXNzZWQgaW4gd2hlcmUgdGhlIG91dHB1dCBzdHJpbmcgb2YgdGhlIGZpcnN0DQotICAgICAq
IGhhcyBhIGRpZmZlcmVudCBsZW5ndGggdGhhbiB0aGUgaW5wdXQgc3RyaW5nIG9mIHRoZSBzZWNv
bmQsDQotICAgICAqIHRoZW4gYSBVX0lMTEVHQUxfQVJHVU1FTlRfRVJST1IgaXMgcmVwb3J0ZWQu
DQotICAgICAqDQotICAgICAqIEBwYXJhbSBhYiByZWZsZWN0cyBob3cgc3Vic3RyaW5ncyBvZiBp
bnB1dCBzdHJpbmcgYQ0KLSAgICAgKiAgICAgbWFwIHRvIHN1YnN0cmluZ3Mgb2YgaW50ZXJtZWRp
YXRlIHN0cmluZyBiLg0KLSAgICAgKiBAcGFyYW0gYmMgcmVmbGVjdHMgaG93IHN1YnN0cmluZ3Mg
b2YgaW50ZXJtZWRpYXRlIHN0cmluZyBiDQotICAgICAqICAgICBtYXAgdG8gc3Vic3RyaW5ncyBv
ZiBvdXRwdXQgc3RyaW5nIGMuDQotICAgICAqIEBwYXJhbSBlcnJvckNvZGUgSUNVIGVycm9yIGNv
ZGUuIEl0cyBpbnB1dCB2YWx1ZSBtdXN0IHBhc3MgdGhlIFVfU1VDQ0VTUygpIHRlc3QsDQotICAg
ICAqICAgICAgICAgICAgICAgICAgb3IgZWxzZSB0aGUgZnVuY3Rpb24gcmV0dXJucyBpbW1lZGlh
dGVseS4gQ2hlY2sgZm9yIFVfRkFJTFVSRSgpDQotICAgICAqICAgICAgICAgICAgICAgICAgb24g
b3V0cHV0IG9yIHVzZSB3aXRoIGZ1bmN0aW9uIGNoYWluaW5nLiAoU2VlIFVzZXIgR3VpZGUgZm9y
IGRldGFpbHMuKQ0KLSAgICAgKiBAcmV0dXJuICp0aGlzLCB3aXRoIHRoZSBtZXJnZWQgZWRpdHMg
YXBwZW5kZWQNCi0gICAgICogQGRyYWZ0IElDVSA2MA0KLSAgICAgKi8NCi0gICAgRWRpdHMgJm1l
cmdlQW5kQXBwZW5kKGNvbnN0IEVkaXRzICZhYiwgY29uc3QgRWRpdHMgJmJjLCBVRXJyb3JDb2Rl
ICZlcnJvckNvZGUpOw0KLSNlbmRpZiAgLy8gVV9ISURFX0RSQUZUX0FQSQ0KLQ0KLXByaXZhdGU6
DQotICAgIHZvaWQgcmVsZWFzZUFycmF5KCkgVV9OT0VYQ0VQVDsNCi0gICAgRWRpdHMgJmNvcHlB
cnJheShjb25zdCBFZGl0cyAmb3RoZXIpOw0KLSAgICBFZGl0cyAmbW92ZUFycmF5KEVkaXRzICZz
cmMpIFVfTk9FWENFUFQ7DQotDQotICAgIHZvaWQgc2V0TGFzdFVuaXQoaW50MzJfdCBsYXN0KSB7
IGFycmF5W2xlbmd0aCAtIDFdID0gKHVpbnQxNl90KWxhc3Q7IH0NCi0gICAgaW50MzJfdCBsYXN0
VW5pdCgpIGNvbnN0IHsgcmV0dXJuIGxlbmd0aCA+IDAgPyBhcnJheVtsZW5ndGggLSAxXSA6IDB4
ZmZmZjsgfQ0KLQ0KLSAgICB2b2lkIGFwcGVuZChpbnQzMl90IHIpOw0KLSAgICBVQm9vbCBncm93
QXJyYXkoKTsNCi0NCi0gICAgc3RhdGljIGNvbnN0IGludDMyX3QgU1RBQ0tfQ0FQQUNJVFkgPSAx
MDA7DQotICAgIHVpbnQxNl90ICphcnJheTsNCi0gICAgaW50MzJfdCBjYXBhY2l0eTsNCi0gICAg
aW50MzJfdCBsZW5ndGg7DQotICAgIGludDMyX3QgZGVsdGE7DQotICAgIGludDMyX3QgbnVtQ2hh
bmdlczsNCi0gICAgVUVycm9yQ29kZSBlcnJvckNvZGVfOw0KLSAgICB1aW50MTZfdCBzdGFja0Fy
cmF5W1NUQUNLX0NBUEFDSVRZXTsNCi19Ow0KLQ0KLVVfTkFNRVNQQUNFX0VORA0KLQ0KLSNlbmRp
ZiAgLy8gX19FRElUU19IX18NCisvLyDCqSAyMDE2IGFuZCBsYXRlcjogVW5pY29kZSwgSW5jLiBh
bmQgb3RoZXJzLgorLy8gTGljZW5zZSAmIHRlcm1zIG9mIHVzZTogaHR0cDovL3d3dy51bmljb2Rl
Lm9yZy9jb3B5cmlnaHQuaHRtbAorCisvLyBlZGl0cy5oCisvLyBjcmVhdGVkOiAyMDE2ZGVjMzAg
TWFya3VzIFcuIFNjaGVyZXIKKworI2lmbmRlZiBfX0VESVRTX0hfXworI2RlZmluZSBfX0VESVRT
X0hfXworCisjaW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3Vv
YmplY3QuaCIKKworLyoqCisgKiBcZmlsZQorICogXGJyaWVmIEMrKyBBUEk6IEMrKyBjbGFzcyBF
ZGl0cyBmb3IgbG93LWxldmVsIHN0cmluZyB0cmFuc2Zvcm1hdGlvbnMgb24gc3R5bGVkIHRleHQu
CisgKi8KKworVV9OQU1FU1BBQ0VfQkVHSU4KKworY2xhc3MgVW5pY29kZVN0cmluZzsKKworLyoq
CisgKiBSZWNvcmRzIGxlbmd0aHMgb2Ygc3RyaW5nIGVkaXRzIGJ1dCBub3QgcmVwbGFjZW1lbnQg
dGV4dC4gU3VwcG9ydHMgcmVwbGFjZW1lbnRzLCBpbnNlcnRpb25zLCBkZWxldGlvbnMKKyAqIGlu
IGxpbmVhciBwcm9ncmVzc2lvbi4gRG9lcyBub3Qgc3VwcG9ydCBtb3ZpbmcvcmVvcmRlcmluZyBv
ZiB0ZXh0LgorICoKKyAqIFRoZXJlIGFyZSB0d28gdHlwZXMgb2YgZWRpdHM6IDxlbT5jaGFuZ2Ug
ZWRpdHM8L2VtPiBhbmQgPGVtPm5vLWNoYW5nZSBlZGl0czwvZW0+LiBBZGQgZWRpdHMgdG8KKyAq
IGluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIHVzaW5nIHtAbGluayAjYWRkUmVwbGFjZShpbnQzMl90
LCBpbnQzMl90KX0gKGZvciBjaGFuZ2UgZWRpdHMpIGFuZAorICoge0BsaW5rICNhZGRVbmNoYW5n
ZWQoaW50MzJfdCl9IChmb3Igbm8tY2hhbmdlIGVkaXRzKS4gQ2hhbmdlIGVkaXRzIGFyZSByZXRh
aW5lZCB3aXRoIGZ1bGwgZ3JhbnVsYXJpdHksCisgKiB3aGVyZWFzIGFkamFjZW50IG5vLWNoYW5n
ZSBlZGl0cyBhcmUgYWx3YXlzIG1lcmdlZCB0b2dldGhlci4gSW4gbm8tY2hhbmdlIGVkaXRzLCB0
aGVyZSBpcyBhIG9uZS10by1vbmUKKyAqIG1hcHBpbmcgYmV0d2VlbiBjb2RlIHBvaW50cyBpbiB0
aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBzdHJpbmdzLgorICoKKyAqIEFmdGVyIGFsbCBlZGl0
cyBoYXZlIGJlZW4gYWRkZWQsIGluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIHNob3VsZCBiZSBjb25z
aWRlcmVkIGltbXV0YWJsZSwgYW5kIGFuCisgKiB7QGxpbmsgRWRpdHM6Okl0ZXJhdG9yfSBjYW4g
YmUgdXNlZCBmb3IgcXVlcmllcy4KKyAqCisgKiBUaGVyZSBhcmUgZm91ciBmbGF2b3JzIG9mIEVk
aXRzOjpJdGVyYXRvcjoKKyAqCisgKiA8dWw+CisgKiA8bGk+e0BsaW5rICNnZXRGaW5lSXRlcmF0
b3IoKX0gcmV0YWlucyBmdWxsIGdyYW51bGFyaXR5IG9mIGNoYW5nZSBlZGl0cy4KKyAqIDxsaT57
QGxpbmsgI2dldEZpbmVDaGFuZ2VzSXRlcmF0b3IoKX0gcmV0YWlucyBmdWxsIGdyYW51bGFyaXR5
IG9mIGNoYW5nZSBlZGl0cywgYW5kIHdoZW4gY2FsbGluZworICogbmV4dCgpIG9uIHRoZSBpdGVy
YXRvciwgc2tpcHMgb3ZlciBuby1jaGFuZ2UgZWRpdHMgKHVuY2hhbmdlZCByZWdpb25zKS4KKyAq
IDxsaT57QGxpbmsgI2dldENvYXJzZUl0ZXJhdG9yKCl9IHRyZWF0cyBhZGphY2VudCBjaGFuZ2Ug
ZWRpdHMgYXMgYSBzaW5nbGUgZWRpdC4gKEFkamFjZW50IG5vLWNoYW5nZQorICogZWRpdHMgYXJl
IGF1dG9tYXRpY2FsbHkgbWVyZ2VkIGR1cmluZyB0aGUgY29uc3RydWN0aW9uIHBoYXNlLikKKyAq
IDxsaT57QGxpbmsgI2dldENvYXJzZUNoYW5nZXNJdGVyYXRvcigpfSB0cmVhdHMgYWRqYWNlbnQg
Y2hhbmdlIGVkaXRzIGFzIGEgc2luZ2xlIGVkaXQsIGFuZCB3aGVuCisgKiBjYWxsaW5nIG5leHQo
KSBvbiB0aGUgaXRlcmF0b3IsIHNraXBzIG92ZXIgbm8tY2hhbmdlIGVkaXRzICh1bmNoYW5nZWQg
cmVnaW9ucykuCisgKiA8L3VsPgorICoKKyAqIEZvciBleGFtcGxlLCBjb25zaWRlciB0aGUgc3Ry
aW5nICJhYmPDn0RlRiIsIHdoaWNoIGNhc2UtZm9sZHMgdG8gImFiY3NzZGVmIi4gVGhpcyBzdHJp
bmcgaGFzIHRoZQorICogZm9sbG93aW5nIGZpbmUgZWRpdHM6CisgKiA8dWw+CisgKiA8bGk+YWJj
IOKHqCBhYmMgKG5vLWNoYW5nZSkKKyAqIDxsaT7DnyDih6ggc3MgKGNoYW5nZSkKKyAqIDxsaT5E
IOKHqCBkIChjaGFuZ2UpCisgKiA8bGk+ZSDih6ggZSAobm8tY2hhbmdlKQorICogPGxpPkYg4oeo
IGYgKGNoYW5nZSkKKyAqIDwvdWw+CisgKiBhbmQgdGhlIGZvbGxvd2luZyBjb2Fyc2UgZWRpdHMg
KG5vdGUgaG93IGFkamFjZW50IGNoYW5nZSBlZGl0cyBnZXQgbWVyZ2VkIHRvZ2V0aGVyKToKKyAq
IDx1bD4KKyAqIDxsaT5hYmMg4oeoIGFiYyAobm8tY2hhbmdlKQorICogPGxpPsOfRCDih6ggc3Nk
IChjaGFuZ2UpCisgKiA8bGk+ZSDih6ggZSAobm8tY2hhbmdlKQorICogPGxpPkYg4oeoIGYgKGNo
YW5nZSkKKyAqIDwvdWw+CisgKgorICogVGhlICJmaW5lIGNoYW5nZXMiIGFuZCAiY29hcnNlIGNo
YW5nZXMiIGl0ZXJhdG9ycyB3aWxsIHN0ZXAgdGhyb3VnaCBvbmx5IHRoZSBjaGFuZ2UgZWRpdHMg
d2hlbiB0aGVpcgorICogYEVkaXRzOjpJdGVyYXRvcjo6bmV4dCgpYCBtZXRob2RzIGFyZSBjYWxs
ZWQuIFRoZXkgYXJlIGlkZW50aWNhbCB0byB0aGUgbm9uLWNoYW5nZSBpdGVyYXRvcnMgd2hlbgor
ICogdGhlaXIgYEVkaXRzOjpJdGVyYXRvcjo6ZmluZFNvdXJjZUluZGV4KClgIG9yIGBFZGl0czo6
SXRlcmF0b3I6OmZpbmREZXN0aW5hdGlvbkluZGV4KClgCisgKiBtZXRob2RzIGFyZSB1c2VkIHRv
IHdhbGsgdGhyb3VnaCB0aGUgc3RyaW5nLgorICoKKyAqIEZvciBleGFtcGxlcyBvZiBob3cgdG8g
dXNlIHRoaXMgY2xhc3MsIHNlZSB0aGUgdGVzdCBgVGVzdENhc2VNYXBFZGl0c0l0ZXJhdG9yRG9j
c2AgaW4KKyAqIFVDaGFyYWN0ZXJDYXNlVGVzdC5qYXZhLgorICoKKyAqIEFuIEVkaXRzIG9iamVj
dCB0cmFja3MgYSBzZXBhcmF0ZSBVRXJyb3JDb2RlLCBidXQgSUNVIHN0cmluZyB0cmFuc2Zvcm1h
dGlvbiBmdW5jdGlvbnMKKyAqIChlLmcuLCBjYXNlIG1hcHBpbmcgZnVuY3Rpb25zKSBtZXJnZSBh
bnkgc3VjaCBlcnJvcnMgaW50byB0aGVpciBBUEkncyBVRXJyb3JDb2RlLgorICoKKyAqIEBzdGFi
bGUgSUNVIDU5CisgKi8KK2NsYXNzIFVfQ09NTU9OX0FQSSBFZGl0cyBVX0ZJTkFMIDogcHVibGlj
IFVNZW1vcnkgeworcHVibGljOgorICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYW4gZW1wdHkg
b2JqZWN0LgorICAgICAqIEBzdGFibGUgSUNVIDU5CisgICAgICovCisgICAgRWRpdHMoKSA6Cisg
ICAgICAgICAgICBhcnJheShzdGFja0FycmF5KSwgY2FwYWNpdHkoU1RBQ0tfQ0FQQUNJVFkpLCBs
ZW5ndGgoMCksIGRlbHRhKDApLCBudW1DaGFuZ2VzKDApLAorICAgICAgICAgICAgZXJyb3JDb2Rl
XyhVX1pFUk9fRVJST1IpIHt9CisgICAgLyoqCisgICAgICogQ29weSBjb25zdHJ1Y3Rvci4KKyAg
ICAgKiBAcGFyYW0gb3RoZXIgc291cmNlIGVkaXRzCisgICAgICogQHN0YWJsZSBJQ1UgNjAKKyAg
ICAgKi8KKyAgICBFZGl0cyhjb25zdCBFZGl0cyAmb3RoZXIpIDoKKyAgICAgICAgICAgIGFycmF5
KHN0YWNrQXJyYXkpLCBjYXBhY2l0eShTVEFDS19DQVBBQ0lUWSksIGxlbmd0aChvdGhlci5sZW5n
dGgpLAorICAgICAgICAgICAgZGVsdGEob3RoZXIuZGVsdGEpLCBudW1DaGFuZ2VzKG90aGVyLm51
bUNoYW5nZXMpLAorICAgICAgICAgICAgZXJyb3JDb2RlXyhvdGhlci5lcnJvckNvZGVfKSB7Cisg
ICAgICAgIGNvcHlBcnJheShvdGhlcik7CisgICAgfQorICAgIC8qKgorICAgICAqIE1vdmUgY29u
c3RydWN0b3IsIG1pZ2h0IGxlYXZlIHNyYyBlbXB0eS4KKyAgICAgKiBUaGlzIG9iamVjdCB3aWxs
IGhhdmUgdGhlIHNhbWUgY29udGVudHMgdGhhdCB0aGUgc291cmNlIG9iamVjdCBoYWQuCisgICAg
ICogQHBhcmFtIHNyYyBzb3VyY2UgZWRpdHMKKyAgICAgKiBAc3RhYmxlIElDVSA2MAorICAgICAq
LworICAgIEVkaXRzKEVkaXRzICYmc3JjKSBVX05PRVhDRVBUIDoKKyAgICAgICAgICAgIGFycmF5
KHN0YWNrQXJyYXkpLCBjYXBhY2l0eShTVEFDS19DQVBBQ0lUWSksIGxlbmd0aChzcmMubGVuZ3Ro
KSwKKyAgICAgICAgICAgIGRlbHRhKHNyYy5kZWx0YSksIG51bUNoYW5nZXMoc3JjLm51bUNoYW5n
ZXMpLAorICAgICAgICAgICAgZXJyb3JDb2RlXyhzcmMuZXJyb3JDb2RlXykgeworICAgICAgICBt
b3ZlQXJyYXkoc3JjKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZXN0cnVjdG9yLgorICAg
ICAqIEBzdGFibGUgSUNVIDU5CisgICAgICovCisgICAgfkVkaXRzKCk7CisKKyAgICAvKioKKyAg
ICAgKiBBc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAqIEBwYXJhbSBvdGhlciBzb3VyY2UgZWRp
dHMKKyAgICAgKiBAcmV0dXJuICp0aGlzCisgICAgICogQHN0YWJsZSBJQ1UgNjAKKyAgICAgKi8K
KyAgICBFZGl0cyAmb3BlcmF0b3I9KGNvbnN0IEVkaXRzICZvdGhlcik7CisKKyAgICAvKioKKyAg
ICAgKiBNb3ZlIGFzc2lnbm1lbnQgb3BlcmF0b3IsIG1pZ2h0IGxlYXZlIHNyYyBlbXB0eS4KKyAg
ICAgKiBUaGlzIG9iamVjdCB3aWxsIGhhdmUgdGhlIHNhbWUgY29udGVudHMgdGhhdCB0aGUgc291
cmNlIG9iamVjdCBoYWQuCisgICAgICogVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZCBpZiAqdGhp
cyBhbmQgc3JjIGFyZSB0aGUgc2FtZSBvYmplY3QuCisgICAgICogQHBhcmFtIHNyYyBzb3VyY2Ug
ZWRpdHMKKyAgICAgKiBAcmV0dXJuICp0aGlzCisgICAgICogQHN0YWJsZSBJQ1UgNjAKKyAgICAg
Ki8KKyAgICBFZGl0cyAmb3BlcmF0b3I9KEVkaXRzICYmc3JjKSBVX05PRVhDRVBUOworCisgICAg
LyoqCisgICAgICogUmVzZXRzIHRoZSBkYXRhIGJ1dCBtYXkgbm90IHJlbGVhc2UgbWVtb3J5Lgor
ICAgICAqIEBzdGFibGUgSUNVIDU5CisgICAgICovCisgICAgdm9pZCByZXNldCgpIFVfTk9FWENF
UFQ7CisKKyAgICAvKioKKyAgICAgKiBBZGRzIGEgbm8tY2hhbmdlIGVkaXQ6IGEgcmVjb3JkIGZv
ciBhbiB1bmNoYW5nZWQgc2VnbWVudCBvZiB0ZXh0LgorICAgICAqIE5vcm1hbGx5IGNhbGxlZCBm
cm9tIGluc2lkZSBJQ1Ugc3RyaW5nIHRyYW5zZm9ybWF0aW9uIGZ1bmN0aW9ucywgbm90IHVzZXIg
Y29kZS4KKyAgICAgKiBAc3RhYmxlIElDVSA1OQorICAgICAqLworICAgIHZvaWQgYWRkVW5jaGFu
Z2VkKGludDMyX3QgdW5jaGFuZ2VkTGVuZ3RoKTsKKyAgICAvKioKKyAgICAgKiBBZGRzIGEgY2hh
bmdlIGVkaXQ6IGEgcmVjb3JkIGZvciBhIHRleHQgcmVwbGFjZW1lbnQvaW5zZXJ0aW9uL2RlbGV0
aW9uLgorICAgICAqIE5vcm1hbGx5IGNhbGxlZCBmcm9tIGluc2lkZSBJQ1Ugc3RyaW5nIHRyYW5z
Zm9ybWF0aW9uIGZ1bmN0aW9ucywgbm90IHVzZXIgY29kZS4KKyAgICAgKiBAc3RhYmxlIElDVSA1
OQorICAgICAqLworICAgIHZvaWQgYWRkUmVwbGFjZShpbnQzMl90IG9sZExlbmd0aCwgaW50MzJf
dCBuZXdMZW5ndGgpOworICAgIC8qKgorICAgICAqIFNldHMgdGhlIFVFcnJvckNvZGUgaWYgYW4g
ZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVjb3JkaW5nIGVkaXRzLgorICAgICAqIFByZXNlcnZlcyBv
bGRlciBlcnJvciBjb2RlcyBpbiB0aGUgb3V0RXJyb3JDb2RlLgorICAgICAqIE5vcm1hbGx5IGNh
bGxlZCBmcm9tIGluc2lkZSBJQ1Ugc3RyaW5nIHRyYW5zZm9ybWF0aW9uIGZ1bmN0aW9ucywgbm90
IHVzZXIgY29kZS4KKyAgICAgKiBAcGFyYW0gb3V0RXJyb3JDb2RlIFNldCB0byBhbiBlcnJvciBj
b2RlIGlmIGl0IGRvZXMgbm90IGNvbnRhaW4gb25lIGFscmVhZHkKKyAgICAgKiAgICAgICAgICAg
ICAgICAgIGFuZCBhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWNvcmRpbmcgZWRpdHMuCisgICAg
ICogICAgICAgICAgICAgICAgICBPdGhlcndpc2UgdW5jaGFuZ2VkLgorICAgICAqIEByZXR1cm4g
VFJVRSBpZiBVX0ZBSUxVUkUob3V0RXJyb3JDb2RlKQorICAgICAqIEBzdGFibGUgSUNVIDU5Cisg
ICAgICovCisgICAgVUJvb2wgY29weUVycm9yVG8oVUVycm9yQ29kZSAmb3V0RXJyb3JDb2RlKTsK
KworICAgIC8qKgorICAgICAqIEhvdyBtdWNoIGxvbmdlciBpcyB0aGUgbmV3IHRleHQgY29tcGFy
ZWQgd2l0aCB0aGUgb2xkIHRleHQ/CisgICAgICogQHJldHVybiBuZXcgbGVuZ3RoIG1pbnVzIG9s
ZCBsZW5ndGgKKyAgICAgKiBAc3RhYmxlIElDVSA1OQorICAgICAqLworICAgIGludDMyX3QgbGVu
Z3RoRGVsdGEoKSBjb25zdCB7IHJldHVybiBkZWx0YTsgfQorICAgIC8qKgorICAgICAqIEByZXR1
cm4gVFJVRSBpZiB0aGVyZSBhcmUgYW55IGNoYW5nZSBlZGl0cworICAgICAqIEBzdGFibGUgSUNV
IDU5CisgICAgICovCisgICAgVUJvb2wgaGFzQ2hhbmdlcygpIGNvbnN0IHsgcmV0dXJuIG51bUNo
YW5nZXMgIT0gMDsgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiB0aGUgbnVtYmVyIG9mIGNo
YW5nZSBlZGl0cworICAgICAqIEBzdGFibGUgSUNVIDYwCisgICAgICovCisgICAgaW50MzJfdCBu
dW1iZXJPZkNoYW5nZXMoKSBjb25zdCB7IHJldHVybiBudW1DaGFuZ2VzOyB9CisKKyAgICAvKioK
KyAgICAgKiBBY2Nlc3MgdG8gdGhlIGxpc3Qgb2YgZWRpdHMuCisgICAgICoKKyAgICAgKiBBdCBh
bnkgbW9tZW50IGluIHRpbWUsIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgcG9pbnRzIHRvIGEg
c2luZ2xlIGVkaXQ6IGEgIndpbmRvdyIgaW50byBhIHNwYW4KKyAgICAgKiBvZiB0aGUgc291cmNl
IHN0cmluZyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgc3BhbiBvZiB0aGUgZGVzdGluYXRpb24gc3Ry
aW5nLiBUaGUgc291cmNlIHN0cmluZyBzcGFuCisgICAgICogc3RhcnRzIGF0IHtAbGluayAjc291
cmNlSW5kZXgoKX0gYW5kIHJ1bnMgZm9yIHtAbGluayAjb2xkTGVuZ3RoKCl9IGNoYXJzOyB0aGUg
ZGVzdGluYXRpb24gc3RyaW5nCisgICAgICogc3BhbiBzdGFydHMgYXQge0BsaW5rICNkZXN0aW5h
dGlvbkluZGV4KCl9IGFuZCBydW5zIGZvciB7QGxpbmsgI25ld0xlbmd0aCgpfSBjaGFycy4KKyAg
ICAgKgorICAgICAqIFRoZSBpdGVyYXRvciBjYW4gYmUgbW92ZWQgYmV0d2VlbiBlZGl0cyB1c2lu
ZyB0aGUgYG5leHQoKWAsIGBmaW5kU291cmNlSW5kZXgoaW50MzJfdCwgVUVycm9yQ29kZSAmKWAs
CisgICAgICogYW5kIGBmaW5kRGVzdGluYXRpb25JbmRleChpbnQzMl90LCBVRXJyb3JDb2RlICYp
YCBtZXRob2RzLgorICAgICAqIENhbGxpbmcgYW55IG9mIHRoZXNlIG1ldGhvZHMgbXV0YXRlcyB0
aGUgaXRlcmF0b3IgdG8gbWFrZSBpdCBwb2ludCB0byB0aGUgY29ycmVzcG9uZGluZyBlZGl0Lgor
ICAgICAqCisgICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgZG9jdW1lbnRhdGlv
biBmb3Ige0BsaW5rIEVkaXRzfS4KKyAgICAgKgorICAgICAqIEBzZWUgZ2V0Q29hcnNlSXRlcmF0
b3IKKyAgICAgKiBAc2VlIGdldEZpbmVJdGVyYXRvcgorICAgICAqIEBzdGFibGUgSUNVIDU5Cisg
ICAgICovCisgICAgc3RydWN0IFVfQ09NTU9OX0FQSSBJdGVyYXRvciBVX0ZJTkFMIDogcHVibGlj
IFVNZW1vcnkgeworICAgICAgICAvKioKKyAgICAgICAgICogRGVmYXVsdCBjb25zdHJ1Y3Rvciwg
ZW1wdHkgaXRlcmF0b3IuCisgICAgICAgICAqIEBzdGFibGUgSUNVIDYwCisgICAgICAgICAqLwor
ICAgICAgICBJdGVyYXRvcigpIDoKKyAgICAgICAgICAgICAgICBhcnJheShudWxscHRyKSwgaW5k
ZXgoMCksIGxlbmd0aCgwKSwKKyAgICAgICAgICAgICAgICByZW1haW5pbmcoMCksIG9ubHlDaGFu
Z2VzXyhGQUxTRSksIGNvYXJzZShGQUxTRSksCisgICAgICAgICAgICAgICAgZGlyKDApLCBjaGFu
Z2VkKEZBTFNFKSwgb2xkTGVuZ3RoXygwKSwgbmV3TGVuZ3RoXygwKSwKKyAgICAgICAgICAgICAg
ICBzcmNJbmRleCgwKSwgcmVwbEluZGV4KDApLCBkZXN0SW5kZXgoMCkge30KKyAgICAgICAgLyoq
CisgICAgICAgICAqIENvcHkgY29uc3RydWN0b3IuCisgICAgICAgICAqIEBzdGFibGUgSUNVIDU5
CisgICAgICAgICAqLworICAgICAgICBJdGVyYXRvcihjb25zdCBJdGVyYXRvciAmb3RoZXIpID0g
ZGVmYXVsdDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFzc2lnbm1lbnQgb3BlcmF0b3IuCisg
ICAgICAgICAqIEBzdGFibGUgSUNVIDU5CisgICAgICAgICAqLworICAgICAgICBJdGVyYXRvciAm
b3BlcmF0b3I9KGNvbnN0IEl0ZXJhdG9yICZvdGhlcikgPSBkZWZhdWx0OworCisgICAgICAgIC8q
KgorICAgICAgICAgKiBBZHZhbmNlcyB0aGUgaXRlcmF0b3IgdG8gdGhlIG5leHQgZWRpdC4KKyAg
ICAgICAgICogQHBhcmFtIGVycm9yQ29kZSBJQ1UgZXJyb3IgY29kZS4gSXRzIGlucHV0IHZhbHVl
IG11c3QgcGFzcyB0aGUgVV9TVUNDRVNTKCkgdGVzdCwKKyAgICAgICAgICogICAgICAgICAgICAg
ICAgICBvciBlbHNlIHRoZSBmdW5jdGlvbiByZXR1cm5zIGltbWVkaWF0ZWx5LiBDaGVjayBmb3Ig
VV9GQUlMVVJFKCkKKyAgICAgICAgICogICAgICAgICAgICAgICAgICBvbiBvdXRwdXQgb3IgdXNl
IHdpdGggZnVuY3Rpb24gY2hhaW5pbmcuIChTZWUgVXNlciBHdWlkZSBmb3IgZGV0YWlscy4pCisg
ICAgICAgICAqIEByZXR1cm4gVFJVRSBpZiB0aGVyZSBpcyBhbm90aGVyIGVkaXQKKyAgICAgICAg
ICogQHN0YWJsZSBJQ1UgNTkKKyAgICAgICAgICovCisgICAgICAgIFVCb29sIG5leHQoVUVycm9y
Q29kZSAmZXJyb3JDb2RlKSB7IHJldHVybiBuZXh0KG9ubHlDaGFuZ2VzXywgZXJyb3JDb2RlKTsg
fQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBNb3ZlcyB0aGUgaXRlcmF0b3IgdG8gdGhlIGVk
aXQgdGhhdCBjb250YWlucyB0aGUgc291cmNlIGluZGV4LgorICAgICAgICAgKiBUaGUgc291cmNl
IGluZGV4IG1heSBiZSBmb3VuZCBpbiBhIG5vLWNoYW5nZSBlZGl0CisgICAgICAgICAqIGV2ZW4g
aWYgbm9ybWFsIGl0ZXJhdGlvbiB3b3VsZCBza2lwIG5vLWNoYW5nZSBlZGl0cy4KKyAgICAgICAg
ICogTm9ybWFsIGl0ZXJhdGlvbiBjYW4gY29udGludWUgZnJvbSBhIGZvdW5kIGVkaXQuCisgICAg
ICAgICAqCisgICAgICAgICAqIFRoZSBpdGVyYXRvciBzdGF0ZSBiZWZvcmUgdGhpcyBzZWFyY2gg
bG9naWNhbGx5IGRvZXMgbm90IG1hdHRlci4KKyAgICAgICAgICogKEl0IG1heSBhZmZlY3QgdGhl
IHBlcmZvcm1hbmNlIG9mIHRoZSBzZWFyY2guKQorICAgICAgICAgKgorICAgICAgICAgKiBUaGUg
aXRlcmF0b3Igc3RhdGUgYWZ0ZXIgdGhpcyBzZWFyY2ggaXMgdW5kZWZpbmVkCisgICAgICAgICAq
IGlmIHRoZSBzb3VyY2UgaW5kZXggaXMgb3V0IG9mIGJvdW5kcyBmb3IgdGhlIHNvdXJjZSBzdHJp
bmcuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBpIHNvdXJjZSBpbmRleAorICAgICAg
ICAgKiBAcGFyYW0gZXJyb3JDb2RlIElDVSBlcnJvciBjb2RlLiBJdHMgaW5wdXQgdmFsdWUgbXVz
dCBwYXNzIHRoZSBVX1NVQ0NFU1MoKSB0ZXN0LAorICAgICAgICAgKiAgICAgICAgICAgICAgICAg
IG9yIGVsc2UgdGhlIGZ1bmN0aW9uIHJldHVybnMgaW1tZWRpYXRlbHkuIENoZWNrIGZvciBVX0ZB
SUxVUkUoKQorICAgICAgICAgKiAgICAgICAgICAgICAgICAgIG9uIG91dHB1dCBvciB1c2Ugd2l0
aCBmdW5jdGlvbiBjaGFpbmluZy4gKFNlZSBVc2VyIEd1aWRlIGZvciBkZXRhaWxzLikKKyAgICAg
ICAgICogQHJldHVybiBUUlVFIGlmIHRoZSBlZGl0IGZvciB0aGUgc291cmNlIGluZGV4IHdhcyBm
b3VuZAorICAgICAgICAgKiBAc3RhYmxlIElDVSA1OQorICAgICAgICAgKi8KKyAgICAgICAgVUJv
b2wgZmluZFNvdXJjZUluZGV4KGludDMyX3QgaSwgVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7Cisg
ICAgICAgICAgICByZXR1cm4gZmluZEluZGV4KGksIFRSVUUsIGVycm9yQ29kZSkgPT0gMDsKKyAg
ICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBNb3ZlcyB0aGUgaXRlcmF0b3IgdG8g
dGhlIGVkaXQgdGhhdCBjb250YWlucyB0aGUgZGVzdGluYXRpb24gaW5kZXguCisgICAgICAgICAq
IFRoZSBkZXN0aW5hdGlvbiBpbmRleCBtYXkgYmUgZm91bmQgaW4gYSBuby1jaGFuZ2UgZWRpdAor
ICAgICAgICAgKiBldmVuIGlmIG5vcm1hbCBpdGVyYXRpb24gd291bGQgc2tpcCBuby1jaGFuZ2Ug
ZWRpdHMuCisgICAgICAgICAqIE5vcm1hbCBpdGVyYXRpb24gY2FuIGNvbnRpbnVlIGZyb20gYSBm
b3VuZCBlZGl0LgorICAgICAgICAgKgorICAgICAgICAgKiBUaGUgaXRlcmF0b3Igc3RhdGUgYmVm
b3JlIHRoaXMgc2VhcmNoIGxvZ2ljYWxseSBkb2VzIG5vdCBtYXR0ZXIuCisgICAgICAgICAqIChJ
dCBtYXkgYWZmZWN0IHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgc2VhcmNoLikKKyAgICAgICAgICoK
KyAgICAgICAgICogVGhlIGl0ZXJhdG9yIHN0YXRlIGFmdGVyIHRoaXMgc2VhcmNoIGlzIHVuZGVm
aW5lZAorICAgICAgICAgKiBpZiB0aGUgc291cmNlIGluZGV4IGlzIG91dCBvZiBib3VuZHMgZm9y
IHRoZSBzb3VyY2Ugc3RyaW5nLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gaSBkZXN0
aW5hdGlvbiBpbmRleAorICAgICAgICAgKiBAcGFyYW0gZXJyb3JDb2RlIElDVSBlcnJvciBjb2Rl
LiBJdHMgaW5wdXQgdmFsdWUgbXVzdCBwYXNzIHRoZSBVX1NVQ0NFU1MoKSB0ZXN0LAorICAgICAg
ICAgKiAgICAgICAgICAgICAgICAgIG9yIGVsc2UgdGhlIGZ1bmN0aW9uIHJldHVybnMgaW1tZWRp
YXRlbHkuIENoZWNrIGZvciBVX0ZBSUxVUkUoKQorICAgICAgICAgKiAgICAgICAgICAgICAgICAg
IG9uIG91dHB1dCBvciB1c2Ugd2l0aCBmdW5jdGlvbiBjaGFpbmluZy4gKFNlZSBVc2VyIEd1aWRl
IGZvciBkZXRhaWxzLikKKyAgICAgICAgICogQHJldHVybiBUUlVFIGlmIHRoZSBlZGl0IGZvciB0
aGUgZGVzdGluYXRpb24gaW5kZXggd2FzIGZvdW5kCisgICAgICAgICAqIEBzdGFibGUgSUNVIDYw
CisgICAgICAgICAqLworICAgICAgICBVQm9vbCBmaW5kRGVzdGluYXRpb25JbmRleChpbnQzMl90
IGksIFVFcnJvckNvZGUgJmVycm9yQ29kZSkgeworICAgICAgICAgICAgcmV0dXJuIGZpbmRJbmRl
eChpLCBGQUxTRSwgZXJyb3JDb2RlKSA9PSAwOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIENvbXB1dGVzIHRoZSBkZXN0aW5hdGlvbiBpbmRleCBjb3JyZXNwb25kaW5nIHRv
IHRoZSBnaXZlbiBzb3VyY2UgaW5kZXguCisgICAgICAgICAqIElmIHRoZSBzb3VyY2UgaW5kZXgg
aXMgaW5zaWRlIGEgY2hhbmdlIGVkaXQgKG5vdCBhdCBpdHMgc3RhcnQpLAorICAgICAgICAgKiB0
aGVuIHRoZSBkZXN0aW5hdGlvbiBpbmRleCBhdCB0aGUgZW5kIG9mIHRoYXQgZWRpdCBpcyByZXR1
cm5lZCwKKyAgICAgICAgICogc2luY2UgdGhlcmUgaXMgbm8gaW5mb3JtYXRpb24gYWJvdXQgaW5k
ZXggbWFwcGluZyBpbnNpZGUgYSBjaGFuZ2UgZWRpdC4KKyAgICAgICAgICoKKyAgICAgICAgICog
KFRoaXMgbWVhbnMgdGhhdCBpbmRleGVzIHRvIHRoZSBzdGFydCBhbmQgbWlkZGxlIG9mIGFuIGVk
aXQsCisgICAgICAgICAqIGZvciBleGFtcGxlIGFyb3VuZCBhIGdyYXBoZW1lIGNsdXN0ZXIsIGFy
ZSBtYXBwZWQgdG8gaW5kZXhlcworICAgICAgICAgKiBlbmNvbXBhc3NpbmcgdGhlIGVudGlyZSBl
ZGl0LgorICAgICAgICAgKiBUaGUgYWx0ZXJuYXRpdmUsIG1hcHBpbmcgYW4gaW50ZXJpb3IgaW5k
ZXggdG8gdGhlIHN0YXJ0LAorICAgICAgICAgKiB3b3VsZCBtYXAgc3VjaCBhbiBpbnRlcnZhbCB0
byBhbiBlbXB0eSBvbmUuKQorICAgICAgICAgKgorICAgICAgICAgKiBUaGlzIG9wZXJhdGlvbiB3
aWxsIHVzdWFsbHkgYnV0IG5vdCBhbHdheXMgbW9kaWZ5IHRoaXMgb2JqZWN0LgorICAgICAgICAg
KiBUaGUgaXRlcmF0b3Igc3RhdGUgYWZ0ZXIgdGhpcyBzZWFyY2ggaXMgdW5kZWZpbmVkLgorICAg
ICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gaSBzb3VyY2UgaW5kZXgKKyAgICAgICAgICogQHBh
cmFtIGVycm9yQ29kZSBJQ1UgZXJyb3IgY29kZS4gSXRzIGlucHV0IHZhbHVlIG11c3QgcGFzcyB0
aGUgVV9TVUNDRVNTKCkgdGVzdCwKKyAgICAgICAgICogICAgICAgICAgICAgICAgICBvciBlbHNl
IHRoZSBmdW5jdGlvbiByZXR1cm5zIGltbWVkaWF0ZWx5LiBDaGVjayBmb3IgVV9GQUlMVVJFKCkK
KyAgICAgICAgICogICAgICAgICAgICAgICAgICBvbiBvdXRwdXQgb3IgdXNlIHdpdGggZnVuY3Rp
b24gY2hhaW5pbmcuIChTZWUgVXNlciBHdWlkZSBmb3IgZGV0YWlscy4pCisgICAgICAgICAqIEBy
ZXR1cm4gZGVzdGluYXRpb24gaW5kZXg7IHVuZGVmaW5lZCBpZiBpIGlzIG5vdCAwLi5zdHJpbmcg
bGVuZ3RoCisgICAgICAgICAqIEBzdGFibGUgSUNVIDYwCisgICAgICAgICAqLworICAgICAgICBp
bnQzMl90IGRlc3RpbmF0aW9uSW5kZXhGcm9tU291cmNlSW5kZXgoaW50MzJfdCBpLCBVRXJyb3JD
b2RlICZlcnJvckNvZGUpOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBDb21wdXRlcyB0aGUg
c291cmNlIGluZGV4IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGRlc3RpbmF0aW9uIGluZGV4
LgorICAgICAgICAgKiBJZiB0aGUgZGVzdGluYXRpb24gaW5kZXggaXMgaW5zaWRlIGEgY2hhbmdl
IGVkaXQgKG5vdCBhdCBpdHMgc3RhcnQpLAorICAgICAgICAgKiB0aGVuIHRoZSBzb3VyY2UgaW5k
ZXggYXQgdGhlIGVuZCBvZiB0aGF0IGVkaXQgaXMgcmV0dXJuZWQsCisgICAgICAgICAqIHNpbmNl
IHRoZXJlIGlzIG5vIGluZm9ybWF0aW9uIGFib3V0IGluZGV4IG1hcHBpbmcgaW5zaWRlIGEgY2hh
bmdlIGVkaXQuCisgICAgICAgICAqCisgICAgICAgICAqIChUaGlzIG1lYW5zIHRoYXQgaW5kZXhl
cyB0byB0aGUgc3RhcnQgYW5kIG1pZGRsZSBvZiBhbiBlZGl0LAorICAgICAgICAgKiBmb3IgZXhh
bXBsZSBhcm91bmQgYSBncmFwaGVtZSBjbHVzdGVyLCBhcmUgbWFwcGVkIHRvIGluZGV4ZXMKKyAg
ICAgICAgICogZW5jb21wYXNzaW5nIHRoZSBlbnRpcmUgZWRpdC4KKyAgICAgICAgICogVGhlIGFs
dGVybmF0aXZlLCBtYXBwaW5nIGFuIGludGVyaW9yIGluZGV4IHRvIHRoZSBzdGFydCwKKyAgICAg
ICAgICogd291bGQgbWFwIHN1Y2ggYW4gaW50ZXJ2YWwgdG8gYW4gZW1wdHkgb25lLikKKyAgICAg
ICAgICoKKyAgICAgICAgICogVGhpcyBvcGVyYXRpb24gd2lsbCB1c3VhbGx5IGJ1dCBub3QgYWx3
YXlzIG1vZGlmeSB0aGlzIG9iamVjdC4KKyAgICAgICAgICogVGhlIGl0ZXJhdG9yIHN0YXRlIGFm
dGVyIHRoaXMgc2VhcmNoIGlzIHVuZGVmaW5lZC4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBh
cmFtIGkgZGVzdGluYXRpb24gaW5kZXgKKyAgICAgICAgICogQHBhcmFtIGVycm9yQ29kZSBJQ1Ug
ZXJyb3IgY29kZS4gSXRzIGlucHV0IHZhbHVlIG11c3QgcGFzcyB0aGUgVV9TVUNDRVNTKCkgdGVz
dCwKKyAgICAgICAgICogICAgICAgICAgICAgICAgICBvciBlbHNlIHRoZSBmdW5jdGlvbiByZXR1
cm5zIGltbWVkaWF0ZWx5LiBDaGVjayBmb3IgVV9GQUlMVVJFKCkKKyAgICAgICAgICogICAgICAg
ICAgICAgICAgICBvbiBvdXRwdXQgb3IgdXNlIHdpdGggZnVuY3Rpb24gY2hhaW5pbmcuIChTZWUg
VXNlciBHdWlkZSBmb3IgZGV0YWlscy4pCisgICAgICAgICAqIEByZXR1cm4gc291cmNlIGluZGV4
OyB1bmRlZmluZWQgaWYgaSBpcyBub3QgMC4uc3RyaW5nIGxlbmd0aAorICAgICAgICAgKiBAc3Rh
YmxlIElDVSA2MAorICAgICAgICAgKi8KKyAgICAgICAgaW50MzJfdCBzb3VyY2VJbmRleEZyb21E
ZXN0aW5hdGlvbkluZGV4KGludDMyX3QgaSwgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKworICAg
ICAgICAvKioKKyAgICAgICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBlZGl0IGN1cnJlbnRseSBy
ZXByZXNlbnRlZCBieSB0aGUgaXRlcmF0b3IgaXMgYSBjaGFuZ2UgZWRpdC4KKyAgICAgICAgICoK
KyAgICAgICAgICogQHJldHVybiBUUlVFIGlmIHRoaXMgZWRpdCByZXBsYWNlcyBvbGRMZW5ndGgo
KSB1bml0cyB3aXRoIG5ld0xlbmd0aCgpIGRpZmZlcmVudCBvbmVzLgorICAgICAgICAgKiAgICAg
ICAgIEZBTFNFIGlmIG9sZExlbmd0aCB1bml0cyByZW1haW4gdW5jaGFuZ2VkLgorICAgICAgICAg
KiBAc3RhYmxlIElDVSA1OQorICAgICAgICAgKi8KKyAgICAgICAgVUJvb2wgaGFzQ2hhbmdlKCkg
Y29uc3QgeyByZXR1cm4gY2hhbmdlZDsgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUg
bGVuZ3RoIG9mIHRoZSBjdXJyZW50IHNwYW4gaW4gdGhlIHNvdXJjZSBzdHJpbmcsIHdoaWNoIHN0
YXJ0cyBhdCB7QGxpbmsgI3NvdXJjZUluZGV4fS4KKyAgICAgICAgICoKKyAgICAgICAgICogQHJl
dHVybiB0aGUgbnVtYmVyIG9mIHVuaXRzIGluIHRoZSBvcmlnaW5hbCBzdHJpbmcgd2hpY2ggYXJl
IHJlcGxhY2VkIG9yIHJlbWFpbiB1bmNoYW5nZWQuCisgICAgICAgICAqIEBzdGFibGUgSUNVIDU5
CisgICAgICAgICAqLworICAgICAgICBpbnQzMl90IG9sZExlbmd0aCgpIGNvbnN0IHsgcmV0dXJu
IG9sZExlbmd0aF87IH0KKworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGxlbmd0aCBvZiB0
aGUgY3VycmVudCBzcGFuIGluIHRoZSBkZXN0aW5hdGlvbiBzdHJpbmcsIHdoaWNoIHN0YXJ0cyBh
dAorICAgICAgICAgKiB7QGxpbmsgI2Rlc3RpbmF0aW9uSW5kZXh9LCBvciBpbiB0aGUgcmVwbGFj
ZW1lbnQgc3RyaW5nLCB3aGljaCBzdGFydHMgYXQKKyAgICAgICAgICoge0BsaW5rICNyZXBsYWNl
bWVudEluZGV4fS4KKyAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybiB0aGUgbnVtYmVyIG9m
IHVuaXRzIGluIHRoZSBtb2RpZmllZCBzdHJpbmcsIGlmIGhhc0NoYW5nZSgpIGlzIFRSVUUuCisg
ICAgICAgICAqICAgICAgICAgU2FtZSBhcyBvbGRMZW5ndGggaWYgaGFzQ2hhbmdlKCkgaXMgRkFM
U0UuCisgICAgICAgICAqIEBzdGFibGUgSUNVIDU5CisgICAgICAgICAqLworICAgICAgICBpbnQz
Ml90IG5ld0xlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG5ld0xlbmd0aF87IH0KKworICAgICAgICAv
KioKKyAgICAgICAgICogVGhlIHN0YXJ0IGluZGV4IG9mIHRoZSBjdXJyZW50IHNwYW4gaW4gdGhl
IHNvdXJjZSBzdHJpbmc7IHRoZSBzcGFuIGhhcyBsZW5ndGgKKyAgICAgICAgICoge0BsaW5rICNv
bGRMZW5ndGh9LgorICAgICAgICAgKgorICAgICAgICAgKiBAcmV0dXJuIHRoZSBjdXJyZW50IGlu
ZGV4IGludG8gdGhlIHNvdXJjZSBzdHJpbmcKKyAgICAgICAgICogQHN0YWJsZSBJQ1UgNTkKKyAg
ICAgICAgICovCisgICAgICAgIGludDMyX3Qgc291cmNlSW5kZXgoKSBjb25zdCB7IHJldHVybiBz
cmNJbmRleDsgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgc3RhcnQgaW5kZXggb2Yg
dGhlIGN1cnJlbnQgc3BhbiBpbiB0aGUgcmVwbGFjZW1lbnQgc3RyaW5nOyB0aGUgc3BhbiBoYXMg
bGVuZ3RoCisgICAgICAgICAqIHtAbGluayAjbmV3TGVuZ3RofS4gV2VsbC1kZWZpbmVkIG9ubHkg
aWYgdGhlIGN1cnJlbnQgZWRpdCBpcyBhIGNoYW5nZSBlZGl0LgorICAgICAgICAgKgorICAgICAg
ICAgKiBUaGUgKnJlcGxhY2VtZW50IHN0cmluZyogaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgYWxs
IHN1YnN0cmluZ3Mgb2YgdGhlIGRlc3RpbmF0aW9uCisgICAgICAgICAqIHN0cmluZyBjb3JyZXNw
b25kaW5nIHRvIGNoYW5nZSBlZGl0cy4KKyAgICAgICAgICoKKyAgICAgICAgICogVGhpcyBtZXRo
b2QgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoIG9wZXJhdGlvbnMgdGhhdCB3
cml0ZSBvbmx5IHJlcGxhY2VtZW50CisgICAgICAgICAqIGNoYXJhY3RlcnMgKGUuZy4gb3BlcmF0
aW9ucyBzcGVjaWZ5aW5nIHRoZSBccmVmIFVfT01JVF9VTkNIQU5HRURfVEVYVCBvcHRpb24pLgor
ICAgICAgICAgKiBUaGUgc291cmNlIHN0cmluZyBjYW4gdGhlbiBiZSBtb2RpZmllZCBpbi1wbGFj
ZS4KKyAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybiB0aGUgY3VycmVudCBpbmRleCBpbnRv
IHRoZSByZXBsYWNlbWVudC1jaGFyYWN0ZXJzLW9ubHkgc3RyaW5nLAorICAgICAgICAgKiAgICAg
ICAgIG5vdCBjb3VudGluZyB1bmNoYW5nZWQgc3BhbnMKKyAgICAgICAgICogQHN0YWJsZSBJQ1Ug
NTkKKyAgICAgICAgICovCisgICAgICAgIGludDMyX3QgcmVwbGFjZW1lbnRJbmRleCgpIGNvbnN0
IHsKKyAgICAgICAgICAgIC8vIFRPRE86IFRocm93IGFuIGV4Y2VwdGlvbiBpZiB3ZSBhcmVuJ3Qg
aW4gYSBjaGFuZ2UgZWRpdD8KKyAgICAgICAgICAgIHJldHVybiByZXBsSW5kZXg7CisgICAgICAg
IH0KKworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHN0YXJ0IGluZGV4IG9mIHRoZSBjdXJy
ZW50IHNwYW4gaW4gdGhlIGRlc3RpbmF0aW9uIHN0cmluZzsgdGhlIHNwYW4gaGFzIGxlbmd0aAor
ICAgICAgICAgKiB7QGxpbmsgI25ld0xlbmd0aH0uCisgICAgICAgICAqCisgICAgICAgICAqIEBy
ZXR1cm4gdGhlIGN1cnJlbnQgaW5kZXggaW50byB0aGUgZnVsbCBkZXN0aW5hdGlvbiBzdHJpbmcK
KyAgICAgICAgICogQHN0YWJsZSBJQ1UgNTkKKyAgICAgICAgICovCisgICAgICAgIGludDMyX3Qg
ZGVzdGluYXRpb25JbmRleCgpIGNvbnN0IHsgcmV0dXJuIGRlc3RJbmRleDsgfQorCisjaWZuZGVm
IFVfSElERV9JTlRFUk5BTF9BUEkKKyAgICAgICAgLyoqCisgICAgICAgICAqIEEgc3RyaW5nIHJl
cHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IGVkaXQgcmVwcmVzZW50ZWQgYnkgdGhlIGl0ZXJh
dG9yIGZvciBkZWJ1Z2dpbmcuIFlvdQorICAgICAgICAgKiBzaG91bGQgbm90IGRlcGVuZCBvbiB0
aGUgY29udGVudHMgb2YgdGhlIHJldHVybiBzdHJpbmcuCisgICAgICAgICAqIEBpbnRlcm5hbAor
ICAgICAgICAgKi8KKyAgICAgICAgVW5pY29kZVN0cmluZyYgdG9TdHJpbmcoVW5pY29kZVN0cmlu
ZyYgYXBwZW5kVG8pIGNvbnN0OworI2VuZGlmICAvLyBVX0hJREVfSU5URVJOQUxfQVBJCisKKyAg
ICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgRWRpdHM7CisKKyAgICAgICAgSXRlcmF0
b3IoY29uc3QgdWludDE2X3QgKmEsIGludDMyX3QgbGVuLCBVQm9vbCBvYywgVUJvb2wgY3JzKTsK
KworICAgICAgICBpbnQzMl90IHJlYWRMZW5ndGgoaW50MzJfdCBoZWFkKTsKKyAgICAgICAgdm9p
ZCB1cGRhdGVOZXh0SW5kZXhlcygpOworICAgICAgICB2b2lkIHVwZGF0ZVByZXZpb3VzSW5kZXhl
cygpOworICAgICAgICBVQm9vbCBub05leHQoKTsKKyAgICAgICAgVUJvb2wgbmV4dChVQm9vbCBv
bmx5Q2hhbmdlcywgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKyAgICAgICAgVUJvb2wgcHJldmlv
dXMoVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKyAgICAgICAgLyoqIEByZXR1cm4gLTE6IGVycm9y
IG9yIGk8MDsgMDogZm91bmQ7IDE6IGk+PXN0cmluZyBsZW5ndGggKi8KKyAgICAgICAgaW50MzJf
dCBmaW5kSW5kZXgoaW50MzJfdCBpLCBVQm9vbCBmaW5kU291cmNlLCBVRXJyb3JDb2RlICZlcnJv
ckNvZGUpOworCisgICAgICAgIGNvbnN0IHVpbnQxNl90ICphcnJheTsKKyAgICAgICAgaW50MzJf
dCBpbmRleCwgbGVuZ3RoOworICAgICAgICAvLyAwIGlmIHdlIGFyZSBub3Qgd2l0aGluIGNvbXBy
ZXNzZWQgZXF1YWwtbGVuZ3RoIGNoYW5nZXMuCisgICAgICAgIC8vIE90aGVyd2lzZSB0aGUgbnVt
YmVyIG9mIHJlbWFpbmluZyBjaGFuZ2VzLCBpbmNsdWRpbmcgdGhlIGN1cnJlbnQgb25lLgorICAg
ICAgICBpbnQzMl90IHJlbWFpbmluZzsKKyAgICAgICAgVUJvb2wgb25seUNoYW5nZXNfLCBjb2Fy
c2U7CisKKyAgICAgICAgaW50OF90IGRpcjsgIC8vIGl0ZXJhdGlvbiBkaXJlY3Rpb246IGJhY2so
PDApLCBpbml0aWFsKDApLCBmb3J3YXJkKD4wKQorICAgICAgICBVQm9vbCBjaGFuZ2VkOworICAg
ICAgICBpbnQzMl90IG9sZExlbmd0aF8sIG5ld0xlbmd0aF87CisgICAgICAgIGludDMyX3Qgc3Jj
SW5kZXgsIHJlcGxJbmRleCwgZGVzdEluZGV4OworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBS
ZXR1cm5zIGFuIEl0ZXJhdG9yIGZvciBjb2Fyc2UtZ3JhaW5lZCBjaGFuZ2UgZWRpdHMKKyAgICAg
KiAoYWRqYWNlbnQgY2hhbmdlIGVkaXRzIGFyZSB0cmVhdGVkIGFzIG9uZSkuCisgICAgICogQ2Fu
IGJlIHVzZWQgdG8gcGVyZm9ybSBzaW1wbGUgc3RyaW5nIHVwZGF0ZXMuCisgICAgICogU2tpcHMg
bm8tY2hhbmdlIGVkaXRzLgorICAgICAqIEByZXR1cm4gYW4gSXRlcmF0b3IgdGhhdCBtZXJnZXMg
YWRqYWNlbnQgY2hhbmdlcy4KKyAgICAgKiBAc3RhYmxlIElDVSA1OQorICAgICAqLworICAgIEl0
ZXJhdG9yIGdldENvYXJzZUNoYW5nZXNJdGVyYXRvcigpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJu
IEl0ZXJhdG9yKGFycmF5LCBsZW5ndGgsIFRSVUUsIFRSVUUpOworICAgIH0KKworICAgIC8qKgor
ICAgICAqIFJldHVybnMgYW4gSXRlcmF0b3IgZm9yIGNvYXJzZS1ncmFpbmVkIGNoYW5nZSBhbmQg
bm8tY2hhbmdlIGVkaXRzCisgICAgICogKGFkamFjZW50IGNoYW5nZSBlZGl0cyBhcmUgdHJlYXRl
ZCBhcyBvbmUpLgorICAgICAqIENhbiBiZSB1c2VkIHRvIHBlcmZvcm0gc2ltcGxlIHN0cmluZyB1
cGRhdGVzLgorICAgICAqIEFkamFjZW50IGNoYW5nZSBlZGl0cyBhcmUgdHJlYXRlZCBhcyBvbmUg
ZWRpdC4KKyAgICAgKiBAcmV0dXJuIGFuIEl0ZXJhdG9yIHRoYXQgbWVyZ2VzIGFkamFjZW50IGNo
YW5nZXMuCisgICAgICogQHN0YWJsZSBJQ1UgNTkKKyAgICAgKi8KKyAgICBJdGVyYXRvciBnZXRD
b2Fyc2VJdGVyYXRvcigpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIEl0ZXJhdG9yKGFycmF5LCBs
ZW5ndGgsIEZBTFNFLCBUUlVFKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGFu
IEl0ZXJhdG9yIGZvciBmaW5lLWdyYWluZWQgY2hhbmdlIGVkaXRzCisgICAgICogKGZ1bGwgZ3Jh
bnVsYXJpdHkgb2YgY2hhbmdlIGVkaXRzIGlzIHJldGFpbmVkKS4KKyAgICAgKiBDYW4gYmUgdXNl
ZCBmb3IgbW9kaWZ5aW5nIHN0eWxlZCB0ZXh0LgorICAgICAqIFNraXBzIG5vLWNoYW5nZSBlZGl0
cy4KKyAgICAgKiBAcmV0dXJuIGFuIEl0ZXJhdG9yIHRoYXQgc2VwYXJhdGVzIGFkamFjZW50IGNo
YW5nZXMuCisgICAgICogQHN0YWJsZSBJQ1UgNTkKKyAgICAgKi8KKyAgICBJdGVyYXRvciBnZXRG
aW5lQ2hhbmdlc0l0ZXJhdG9yKCkgY29uc3QgeworICAgICAgICByZXR1cm4gSXRlcmF0b3IoYXJy
YXksIGxlbmd0aCwgVFJVRSwgRkFMU0UpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVy
bnMgYW4gSXRlcmF0b3IgZm9yIGZpbmUtZ3JhaW5lZCBjaGFuZ2UgYW5kIG5vLWNoYW5nZSBlZGl0
cworICAgICAqIChmdWxsIGdyYW51bGFyaXR5IG9mIGNoYW5nZSBlZGl0cyBpcyByZXRhaW5lZCku
CisgICAgICogQ2FuIGJlIHVzZWQgZm9yIG1vZGlmeWluZyBzdHlsZWQgdGV4dC4KKyAgICAgKiBA
cmV0dXJuIGFuIEl0ZXJhdG9yIHRoYXQgc2VwYXJhdGVzIGFkamFjZW50IGNoYW5nZXMuCisgICAg
ICogQHN0YWJsZSBJQ1UgNTkKKyAgICAgKi8KKyAgICBJdGVyYXRvciBnZXRGaW5lSXRlcmF0b3Io
KSBjb25zdCB7CisgICAgICAgIHJldHVybiBJdGVyYXRvcihhcnJheSwgbGVuZ3RoLCBGQUxTRSwg
RkFMU0UpOworICAgIH0KKworICAgIC8qKgorICAgICAqIE1lcmdlcyB0aGUgdHdvIGlucHV0IEVk
aXRzIGFuZCBhcHBlbmRzIHRoZSByZXN1bHQgdG8gdGhpcyBvYmplY3QuCisgICAgICoKKyAgICAg
KiBDb25zaWRlciB0d28gc3RyaW5nIHRyYW5zZm9ybWF0aW9ucyAoZm9yIGV4YW1wbGUsIG5vcm1h
bGl6YXRpb24gYW5kIGNhc2UgbWFwcGluZykKKyAgICAgKiB3aGVyZSBlYWNoIHJlY29yZHMgRWRp
dHMgaW4gYWRkaXRpb24gdG8gd3JpdGluZyBhbiBvdXRwdXQgc3RyaW5nLjxicj4KKyAgICAgKiBF
ZGl0cyBhYiByZWZsZWN0IGhvdyBzdWJzdHJpbmdzIG9mIGlucHV0IHN0cmluZyBhCisgICAgICog
bWFwIHRvIHN1YnN0cmluZ3Mgb2YgaW50ZXJtZWRpYXRlIHN0cmluZyBiLjxicj4KKyAgICAgKiBF
ZGl0cyBiYyByZWZsZWN0IGhvdyBzdWJzdHJpbmdzIG9mIGludGVybWVkaWF0ZSBzdHJpbmcgYgor
ICAgICAqIG1hcCB0byBzdWJzdHJpbmdzIG9mIG91dHB1dCBzdHJpbmcgYy48YnI+CisgICAgICog
VGhpcyBmdW5jdGlvbiBtZXJnZXMgYWIgYW5kIGJjIHN1Y2ggdGhhdCB0aGUgYWRkaXRpb25hbCBl
ZGl0cworICAgICAqIHJlY29yZGVkIGluIHRoaXMgb2JqZWN0IHJlZmxlY3QgaG93IHN1YnN0cmlu
Z3Mgb2YgaW5wdXQgc3RyaW5nIGEKKyAgICAgKiBtYXAgdG8gc3Vic3RyaW5ncyBvZiBvdXRwdXQg
c3RyaW5nIGMuCisgICAgICoKKyAgICAgKiBJZiB1bnJlbGF0ZWQgRWRpdHMgYXJlIHBhc3NlZCBp
biB3aGVyZSB0aGUgb3V0cHV0IHN0cmluZyBvZiB0aGUgZmlyc3QKKyAgICAgKiBoYXMgYSBkaWZm
ZXJlbnQgbGVuZ3RoIHRoYW4gdGhlIGlucHV0IHN0cmluZyBvZiB0aGUgc2Vjb25kLAorICAgICAq
IHRoZW4gYSBVX0lMTEVHQUxfQVJHVU1FTlRfRVJST1IgaXMgcmVwb3J0ZWQuCisgICAgICoKKyAg
ICAgKiBAcGFyYW0gYWIgcmVmbGVjdHMgaG93IHN1YnN0cmluZ3Mgb2YgaW5wdXQgc3RyaW5nIGEK
KyAgICAgKiAgICAgbWFwIHRvIHN1YnN0cmluZ3Mgb2YgaW50ZXJtZWRpYXRlIHN0cmluZyBiLgor
ICAgICAqIEBwYXJhbSBiYyByZWZsZWN0cyBob3cgc3Vic3RyaW5ncyBvZiBpbnRlcm1lZGlhdGUg
c3RyaW5nIGIKKyAgICAgKiAgICAgbWFwIHRvIHN1YnN0cmluZ3Mgb2Ygb3V0cHV0IHN0cmluZyBj
LgorICAgICAqIEBwYXJhbSBlcnJvckNvZGUgSUNVIGVycm9yIGNvZGUuIEl0cyBpbnB1dCB2YWx1
ZSBtdXN0IHBhc3MgdGhlIFVfU1VDQ0VTUygpIHRlc3QsCisgICAgICogICAgICAgICAgICAgICAg
ICBvciBlbHNlIHRoZSBmdW5jdGlvbiByZXR1cm5zIGltbWVkaWF0ZWx5LiBDaGVjayBmb3IgVV9G
QUlMVVJFKCkKKyAgICAgKiAgICAgICAgICAgICAgICAgIG9uIG91dHB1dCBvciB1c2Ugd2l0aCBm
dW5jdGlvbiBjaGFpbmluZy4gKFNlZSBVc2VyIEd1aWRlIGZvciBkZXRhaWxzLikKKyAgICAgKiBA
cmV0dXJuICp0aGlzLCB3aXRoIHRoZSBtZXJnZWQgZWRpdHMgYXBwZW5kZWQKKyAgICAgKiBAc3Rh
YmxlIElDVSA2MAorICAgICAqLworICAgIEVkaXRzICZtZXJnZUFuZEFwcGVuZChjb25zdCBFZGl0
cyAmYWIsIGNvbnN0IEVkaXRzICZiYywgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKworcHJpdmF0
ZToKKyAgICB2b2lkIHJlbGVhc2VBcnJheSgpIFVfTk9FWENFUFQ7CisgICAgRWRpdHMgJmNvcHlB
cnJheShjb25zdCBFZGl0cyAmb3RoZXIpOworICAgIEVkaXRzICZtb3ZlQXJyYXkoRWRpdHMgJnNy
YykgVV9OT0VYQ0VQVDsKKworICAgIHZvaWQgc2V0TGFzdFVuaXQoaW50MzJfdCBsYXN0KSB7IGFy
cmF5W2xlbmd0aCAtIDFdID0gKHVpbnQxNl90KWxhc3Q7IH0KKyAgICBpbnQzMl90IGxhc3RVbml0
KCkgY29uc3QgeyByZXR1cm4gbGVuZ3RoID4gMCA/IGFycmF5W2xlbmd0aCAtIDFdIDogMHhmZmZm
OyB9CisKKyAgICB2b2lkIGFwcGVuZChpbnQzMl90IHIpOworICAgIFVCb29sIGdyb3dBcnJheSgp
OworCisgICAgc3RhdGljIGNvbnN0IGludDMyX3QgU1RBQ0tfQ0FQQUNJVFkgPSAxMDA7CisgICAg
dWludDE2X3QgKmFycmF5OworICAgIGludDMyX3QgY2FwYWNpdHk7CisgICAgaW50MzJfdCBsZW5n
dGg7CisgICAgaW50MzJfdCBkZWx0YTsKKyAgICBpbnQzMl90IG51bUNoYW5nZXM7CisgICAgVUVy
cm9yQ29kZSBlcnJvckNvZGVfOworICAgIHVpbnQxNl90IHN0YWNrQXJyYXlbU1RBQ0tfQ0FQQUNJ
VFldOworfTsKKworVV9OQU1FU1BBQ0VfRU5ECisKKyNlbmRpZiAgLy8gX19FRElUU19IX18KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvZW51bXNldC5oIGIvU291cmNlL1dURi9p
Y3UvdW5pY29kZS9lbnVtc2V0LmgKaW5kZXggZjYzZGQxNjIyZTIwYzRhNTc3ODA4MGM1MWJlOWJj
YTUzM2UwNWY1ZS4uYmRlOGM0NTVjMGRkMmJkODBmNTcxMDFkYzk1ZDBlZjA5NDM1MmI3MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi9pY3UvdW5pY29kZS9lbnVtc2V0LmgKKysrIGIvU291cmNlL1dU
Ri9pY3UvdW5pY29kZS9lbnVtc2V0LmgKQEAgLTI4LDYgKzI4LDcgQEAgVV9OQU1FU1BBQ0VfQkVH
SU4KICAqIGVudW0gYml0c2V0IGZvciBib29sZWFuIGZpZWxkcy4gU2ltaWxhciB0byBKYXZhIEVu
dW1TZXQ8Pi4gCiAgKiBOZWVkcyB0byByYW5nZSBjaGVjay4gVXNlZCBmb3IgcHJpdmF0ZSBpbnN0
YW5jZSB2YXJpYWJsZXMuCiAgKiBAaW50ZXJuYWwKKyAqIFxjb25kCiAgKi8KIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHVpbnQzMl90IG1pblZhbHVlLCB1aW50MzJfdCBsaW1pdFZhbHVlPgogY2xhc3Mg
RW51bVNldCB7CkBAIC02MCw2ICs2MSw4IEBAIGNsYXNzIEVudW1TZXQgewogICAgIHVpbnQzMl90
IGZCb29sczsKIH07CiAKKy8qKiBcZW5kY29uZCAqLworCiBVX05BTUVTUEFDRV9FTkQKIAogI2Vu
ZGlmIC8qIFVfU0hPV19DUExVU1BMVVNfQVBJICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2lj
dS91bmljb2RlL2ZpbHRlcmVkYnJrLmggYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL2ZpbHRlcmVk
YnJrLmgKaW5kZXggNzUxZDFmYWY0MDQ1NGZhMzQ3NWJjZmY5NzQ4ZjU2MWYzOWFkNzIwNS4uMjQ0
NDExNGU5YTE0YmZkNDdmM2IxMmY1ZWEyZTkxYTc1ZTYzNzAzZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi9pY3UvdW5pY29kZS9maWx0ZXJlZGJyay5oCisrKyBiL1NvdXJjZS9XVEYvaWN1L3VuaWNv
ZGUvZmlsdGVyZWRicmsuaApAQCAtNjcsMTYgKzY3LDE0IEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBG
aWx0ZXJlZEJyZWFrSXRlcmF0b3JCdWlsZGVyIDogcHVibGljIFVPYmplY3QgewogICBzdGF0aWMg
RmlsdGVyZWRCcmVha0l0ZXJhdG9yQnVpbGRlciAqY3JlYXRlSW5zdGFuY2UoVUVycm9yQ29kZSAm
c3RhdHVzKTsKICNlbmRpZiAgLyogVV9ISURFX0RFUFJFQ0FURURfQVBJICovCiAKLSNpZm5kZWYg
VV9ISURFX0RSQUZUX0FQSQogICAvKioKICAgICogQ29uc3RydWN0IGFuIGVtcHR5IEZpbHRlcmVk
QnJlYWtJdGVyYXRvckJ1aWxkZXIuCiAgICAqIEluIHRoaXMgc3RhdGUsIGl0IHdpbGwgbm90IHN1
cHByZXNzIGFueSBzZWdtZW50IGJvdW5kYXJpZXMuCiAgICAqIEBwYXJhbSBzdGF0dXMgVGhlIGVy
cm9yIGNvZGUuCiAgICAqIEByZXR1cm4gdGhlIG5ldyBidWlsZGVyCi0gICAqIEBkcmFmdCBJQ1Ug
NjAKKyAgICogQHN0YWJsZSBJQ1UgNjAKICAgICovCiAgIHN0YXRpYyBGaWx0ZXJlZEJyZWFrSXRl
cmF0b3JCdWlsZGVyICpjcmVhdGVFbXB0eUluc3RhbmNlKFVFcnJvckNvZGUgJnN0YXR1cyk7Ci0j
ZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KIAogICAvKioKICAgICogU3VwcHJlc3MgYSBj
ZXJ0YWluIHN0cmluZyBmcm9tIGJlaW5nIHRoZSBlbmQgb2YgYSBzZWdtZW50LgpAQCAtOTUsNyAr
OTMsNyBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgRmlsdGVyZWRCcmVha0l0ZXJhdG9yQnVpbGRlciA6
IHB1YmxpYyBVT2JqZWN0IHsKICAgICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjcmVhdGUgYW55
IG5ldyBzZWdtZW50IGJvdW5kYXJpZXMsIGJ1dCBvbmx5IHNlcnZlcyB0byB1bi1kbwogICAgKiB0
aGUgZWZmZWN0IG9mIGVhcmxpZXIgY2FsbHMgdG8gc3VwcHJlc3NCcmVha0FmdGVyLCBvciB0byB1
bi1kbyB0aGUgZWZmZWN0IG9mCiAgICAqIGxvY2FsZSBkYXRhIHdoaWNoIG1heSBiZSBzdXBwcmVz
c2luZyBjZXJ0YWluIHN0cmluZ3MuCi0gICAqIEBwYXJhbSBleGNlcHRpb24gdGhlIGV4Y2VwdGlv
biB0byByZW1vdmUKKyAgICogQHBhcmFtIHN0cmluZyB0aGUgZXhjZXB0aW9uIHRvIHJlbW92ZQog
ICAgKiBAcGFyYW0gc3RhdHVzIGVycm9yIGNvZGUKICAgICogQHJldHVybiByZXR1cm5zIFRSVUUg
aWYgdGhlIHN0cmluZyB3YXMgcHJlc2VudCBhbmQgbm93IHJlbW92ZWQsCiAgICAqIEZBTFNFIGlm
IHRoZSBjYWxsIHdhcyBhIG5vLW9wIGJlY2F1c2UgdGhlIHN0cmluZyB3YXMgbm90IGJlaW5nIHN1
cHByZXNzZWQuCkBAIC0xMTQsNyArMTEyLDYgQEAgY2xhc3MgVV9DT01NT05fQVBJIEZpbHRlcmVk
QnJlYWtJdGVyYXRvckJ1aWxkZXIgOiBwdWJsaWMgVU9iamVjdCB7CiAgICAqLwogICB2aXJ0dWFs
IEJyZWFrSXRlcmF0b3IgKmJ1aWxkKEJyZWFrSXRlcmF0b3IqIGFkb3B0QnJlYWtJdGVyYXRvciwg
VUVycm9yQ29kZSYgc3RhdHVzKSA9IDA7CiAKLSNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQogICAv
KioKICAgICogV3JhcCAoYWRvcHQpIGFuIGV4aXN0aW5nIGJyZWFrIGl0ZXJhdG9yIGluIGEgbmV3
IGZpbHRlcmVkIGluc3RhbmNlLgogICAgKiBUaGUgcmVzdWx0aW5nIEJyZWFrSXRlcmF0b3IgaXMg
b3duZWQgYnkgdGhlIGNhbGxlci4KQEAgLTEyNiwxMiArMTIzLDExIEBAIGNsYXNzIFVfQ09NTU9O
X0FQSSBGaWx0ZXJlZEJyZWFrSXRlcmF0b3JCdWlsZGVyIDogcHVibGljIFVPYmplY3QgewogICAg
KiBAcGFyYW0gYWRvcHRCcmVha0l0ZXJhdG9yIHRoZSBicmVhayBpdGVyYXRvciB0byBhZG9wdAog
ICAgKiBAcGFyYW0gc3RhdHVzIGVycm9yIGNvZGUKICAgICogQHJldHVybiB0aGUgbmV3IEJyZWFr
SXRlcmF0b3IsIG93bmVkIGJ5IHRoZSBjYWxsZXIuCi0gICAqIEBkcmFmdCBJQ1UgNjAKKyAgICog
QHN0YWJsZSBJQ1UgNjAKICAgICovCiAgIGlubGluZSBCcmVha0l0ZXJhdG9yICp3cmFwSXRlcmF0
b3JXaXRoRmlsdGVyKEJyZWFrSXRlcmF0b3IqIGFkb3B0QnJlYWtJdGVyYXRvciwgVUVycm9yQ29k
ZSYgc3RhdHVzKSB7CiAgICAgcmV0dXJuIGJ1aWxkKGFkb3B0QnJlYWtJdGVyYXRvciwgc3RhdHVz
KTsKICAgfQotI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCiAKICBwcm90ZWN0ZWQ6CiAg
IC8qKgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9pY3UvdW5pY29kZS9mbXRhYmxlLmggYi9Tb3Vy
Y2UvV1RGL2ljdS91bmljb2RlL2ZtdGFibGUuaAppbmRleCAyMzU5YjYxZDQ2MTg2ZWU1ZjQyODM2
ZTdmMzBjZGVlN2RjYTkzOTUxLi5hMDZjMjNkYzNiZDUzMjU4YTA5ZDk4Y2MyMzgwN2UzZDY1Yjcx
YWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL2ZtdGFibGUuaAorKysgYi9T
b3VyY2UvV1RGL2ljdS91bmljb2RlL2ZtdGFibGUuaApAQCAtNjU4LDcgKzY1OCw3IEBAIGNsYXNz
IFVfSTE4Tl9BUEkgRm9ybWF0dGFibGUgOiBwdWJsaWMgVU9iamVjdCB7CiAgICAgLyoqCiAgICAg
ICogIEFkb3B0LCBhbmQgc2V0IHZhbHVlIGZyb20sIGEgRGVjaW1hbFF1YW50aXR5CiAgICAgICog
ICAgIEludGVybmFsIEZ1bmN0aW9uLCBkbyBub3QgdXNlLgotICAgICAqICBAcGFyYW0gZGwgdGhl
IERlY2ltYWxRdWFudGl0eSB0byBiZSBhZG9wdGVkCisgICAgICogIEBwYXJhbSBkcSB0aGUgRGVj
aW1hbFF1YW50aXR5IHRvIGJlIGFkb3B0ZWQKICAgICAgKiAgQGludGVybmFsCiAgICAgICovCiAg
ICAgdm9pZCBhZG9wdERlY2ltYWxRdWFudGl0eShudW1iZXI6OmltcGw6OkRlY2ltYWxRdWFudGl0
eSAqZHEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9pY3UvdW5pY29kZS9mb3JtYXR0ZWR2YWx1
ZS5oIGIvU291cmNlL1dURi9pY3UvdW5pY29kZS9mb3JtYXR0ZWR2YWx1ZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjYwZjk3ZWRkNGIyNjg2ODY1YjFiMDE4YWM4ZGU4MmUzMWIxYmMxN2QKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL2Zvcm1hdHRlZHZhbHVlLmgKQEAgLTAsMCArMSwz
MTcgQEAKKy8vIMKpIDIwMTggYW5kIGxhdGVyOiBVbmljb2RlLCBJbmMuIGFuZCBvdGhlcnMuCisv
LyBMaWNlbnNlICYgdGVybXMgb2YgdXNlOiBodHRwOi8vd3d3LnVuaWNvZGUub3JnL2NvcHlyaWdo
dC5odG1sCisKKyNpZm5kZWYgX19GT1JNQVRURURWQUxVRV9IX18KKyNkZWZpbmUgX19GT1JNQVRU
RURWQUxVRV9IX18KKworI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCisjaWYgIVVDT05GSUdf
Tk9fRk9STUFUVElORworI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisKKyNpbmNsdWRlICJ1bmlj
b2RlL2FwcGVuZGFibGUuaCIKKyNpbmNsdWRlICJ1bmljb2RlL2Zwb3NpdGVyLmgiCisjaW5jbHVk
ZSAidW5pY29kZS91bmlzdHIuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3Vmb3JtYXR0ZWR2YWx1ZS5o
IgorCitVX05BTUVTUEFDRV9CRUdJTgorCisvKioKKyAqIFxmaWxlCisgKiBcYnJpZWYgQysrIEFQ
STogQWJzdHJhY3Qgb3BlcmF0aW9ucyBmb3IgbG9jYWxpemVkIHN0cmluZ3MuCisgKiAKKyAqIFRo
aXMgZmlsZSBjb250YWlucyBkZWNsYXJhdGlvbnMgZm9yIGNsYXNzZXMgdGhhdCBkZWFsIHdpdGgg
Zm9ybWF0dGVkIHN0cmluZ3MuIEEgbnVtYmVyCisgKiBvZiBBUElzIHRocm91Z2hvdXQgSUNVIHVz
ZSB0aGVzZSBjbGFzc2VzIGZvciBleHByZXNzaW5nIHRoZWlyIGxvY2FsaXplZCBvdXRwdXQuCisg
Ki8KKworCisvKioKKyAqIFJlcHJlc2VudHMgYSBzcGFuIG9mIGEgc3RyaW5nIGNvbnRhaW5pbmcg
YSBnaXZlbiBmaWVsZC4KKyAqCisgKiBUaGlzIGNsYXNzIGRpZmZlcnMgZnJvbSBGaWVsZFBvc2l0
aW9uIGluIHRoZSBmb2xsb3dpbmcgd2F5czoKKyAqCisgKiAgIDEuIEl0IGhhcyBpbmZvcm1hdGlv
biBvbiB0aGUgZmllbGQgY2F0ZWdvcnkuCisgKiAgIDIuIEl0IGFsbG93cyB5b3UgdG8gc2V0IGNv
bnN0cmFpbnRzIHRvIHVzZSB3aGVuIGl0ZXJhdGluZyBvdmVyIGZpZWxkIHBvc2l0aW9ucy4KKyAq
ICAgMy4gSXQgaXMgdXNlZCBmb3IgdGhlIG5ld2VyIEZvcm1hdHRlZFZhbHVlIEFQSXMuCisgKgor
ICogVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgZm9yIHB1YmxpYyBzdWJjbGFzc2luZy4KKyAq
CisgKiBAZHJhZnQgSUNVIDY0CisgKi8KK2NsYXNzIFVfSTE4Tl9BUEkgQ29uc3RyYWluZWRGaWVs
ZFBvc2l0aW9uIDogcHVibGljIFVNZW1vcnkgeworICBwdWJsaWM6CisKKyAgICAvKioKKyAgICAg
KiBJbml0aWFsaXplcyBhIENvbnN0cmFpbmVkRmllbGRQb3NpdGlvbi4KKyAgICAgKgorICAgICAq
IEJ5IGRlZmF1bHQsIHRoZSBDb25zdHJhaW5lZEZpZWxkUG9zaXRpb24gaGFzIG5vIGl0ZXJhdGlv
biBjb25zdHJhaW50cy4KKyAgICAgKgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAg
ICBDb25zdHJhaW5lZEZpZWxkUG9zaXRpb24oKTsKKworICAgIC8qKiBAZHJhZnQgSUNVIDY0ICov
CisgICAgfkNvbnN0cmFpbmVkRmllbGRQb3NpdGlvbigpOworCisgICAgLyoqCisgICAgICogUmVz
ZXRzIHRoaXMgQ29uc3RyYWluZWRGaWVsZFBvc2l0aW9uIHRvIGl0cyBpbml0aWFsIHN0YXRlLCBh
cyBpZiBpdCB3ZXJlIG5ld2x5IGNyZWF0ZWQ6CisgICAgICoKKyAgICAgKiAtIFJlbW92ZXMgYW55
IGNvbnN0cmFpbnRzIHRoYXQgbWF5IGhhdmUgYmVlbiBzZXQgb24gdGhlIGluc3RhbmNlLgorICAg
ICAqIC0gUmVzZXRzIHRoZSBpdGVyYXRpb24gcG9zaXRpb24uCisgICAgICoKKyAgICAgKiBAZHJh
ZnQgSUNVIDY0CisgICAgICovCisgICAgdm9pZCByZXNldCgpOworCisgICAgLyoqCisgICAgICog
U2V0cyBhIGNvbnN0cmFpbnQgb24gdGhlIGZpZWxkIGNhdGVnb3J5LgorICAgICAqIAorICAgICAq
IFdoZW4gdGhpcyBpbnN0YW5jZSBvZiBDb25zdHJhaW5lZEZpZWxkUG9zaXRpb24gaXMgcGFzc2Vk
IHRvIEZvcm1hdHRlZFZhbHVlI25leHRQb3NpdGlvbiwKKyAgICAgKiBwb3NpdGlvbnMgYXJlIHNr
aXBwZWQgdW5sZXNzIHRoZXkgaGF2ZSB0aGUgZ2l2ZW4gY2F0ZWdvcnkuCisgICAgICoKKyAgICAg
KiBBbnkgcHJldmlvdXNseSBzZXQgY29uc3RyYWludHMgYXJlIGNsZWFyZWQuCisgICAgICoKKyAg
ICAgKiBGb3IgZXhhbXBsZSwgdG8gbG9vcCBvdmVyIG9ubHkgdGhlIG51bWJlci1yZWxhdGVkIGZp
ZWxkczoKKyAgICAgKgorICAgICAqICAgICBDb25zdHJhaW5lZEZpZWxkUG9zaXRpb24gY2Zwb3M7
CisgICAgICogICAgIGNmcG9zLmNvbnN0cmFpbkNhdGVnb3J5KFVGSUVMRENBVEVHT1JZX05VTUJF
Ul9GT1JNQVQpOworICAgICAqICAgICB3aGlsZSAoZm10dmFsLm5leHRQb3NpdGlvbihjZnBvcywg
c3RhdHVzKSkgeworICAgICAqICAgICAgICAgLy8gaGFuZGxlIHRoZSBudW1iZXItcmVsYXRlZCBm
aWVsZCBwb3NpdGlvbgorICAgICAqICAgICB9CisgICAgICoKKyAgICAgKiBDaGFuZ2luZyB0aGUg
Y29uc3RyYWludCB3aGlsZSBpbiB0aGUgbWlkZGxlIG9mIGl0ZXJhdGluZyBvdmVyIGEgRm9ybWF0
dGVkVmFsdWUKKyAgICAgKiBkb2VzIG5vdCBnZW5lcmFsbHkgaGF2ZSB3ZWxsLWRlZmluZWQgYmVo
YXZpb3IuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY2F0ZWdvcnkgVGhlIGZpZWxkIGNhdGVnb3J5
IHRvIGZpeCB3aGVuIGl0ZXJhdGluZy4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisg
ICAgdm9pZCBjb25zdHJhaW5DYXRlZ29yeShpbnQzMl90IGNhdGVnb3J5KTsKKworICAgIC8qKgor
ICAgICAqIFNldHMgYSBjb25zdHJhaW50IG9uIHRoZSBjYXRlZ29yeSBhbmQgZmllbGQuCisgICAg
ICogCisgICAgICogV2hlbiB0aGlzIGluc3RhbmNlIG9mIENvbnN0cmFpbmVkRmllbGRQb3NpdGlv
biBpcyBwYXNzZWQgdG8gRm9ybWF0dGVkVmFsdWUjbmV4dFBvc2l0aW9uLAorICAgICAqIHBvc2l0
aW9ucyBhcmUgc2tpcHBlZCB1bmxlc3MgdGhleSBoYXZlIHRoZSBnaXZlbiBjYXRlZ29yeSBhbmQg
ZmllbGQuCisgICAgICoKKyAgICAgKiBBbnkgcHJldmlvdXNseSBzZXQgY29uc3RyYWludHMgYXJl
IGNsZWFyZWQuCisgICAgICoKKyAgICAgKiBGb3IgZXhhbXBsZSwgdG8gbG9vcCBvdmVyIGFsbCBn
cm91cGluZyBzZXBhcmF0b3JzOgorICAgICAqCisgICAgICogICAgIENvbnN0cmFpbmVkRmllbGRQ
b3NpdGlvbiBjZnBvczsKKyAgICAgKiAgICAgY2Zwb3MuY29uc3RyYWluRmllbGQoVUZJRUxEQ0FU
RUdPUllfTlVNQkVSX0ZPUk1BVCwgVU5VTV9HUk9VUElOR19TRVBBUkFUT1JfRklFTEQpOworICAg
ICAqICAgICB3aGlsZSAoZm10dmFsLm5leHRQb3NpdGlvbihjZnBvcywgc3RhdHVzKSkgeworICAg
ICAqICAgICAgICAgLy8gaGFuZGxlIHRoZSBncm91cGluZyBzZXBhcmF0b3IgcG9zaXRpb24KKyAg
ICAgKiAgICAgfQorICAgICAqCisgICAgICogQ2hhbmdpbmcgdGhlIGNvbnN0cmFpbnQgd2hpbGUg
aW4gdGhlIG1pZGRsZSBvZiBpdGVyYXRpbmcgb3ZlciBhIEZvcm1hdHRlZFZhbHVlCisgICAgICog
ZG9lcyBub3QgZ2VuZXJhbGx5IGhhdmUgd2VsbC1kZWZpbmVkIGJlaGF2aW9yLgorICAgICAqCisg
ICAgICogQHBhcmFtIGNhdGVnb3J5IFRoZSBmaWVsZCBjYXRlZ29yeSB0byBmaXggd2hlbiBpdGVy
YXRpbmcuCisgICAgICogQHBhcmFtIGZpZWxkIFRoZSBmaWVsZCB0byBmaXggd2hlbiBpdGVyYXRp
bmcuCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHZvaWQgY29uc3RyYWluRmll
bGQoaW50MzJfdCBjYXRlZ29yeSwgaW50MzJfdCBmaWVsZCk7CisKKyAgICAvKioKKyAgICAgKiBH
ZXRzIHRoZSBmaWVsZCBjYXRlZ29yeSBmb3IgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgICAgICoK
KyAgICAgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHdlbGwtZGVmaW5lZCBvbmx5IGFmdGVyCisgICAg
ICogRm9ybWF0dGVkVmFsdWUjbmV4dFBvc2l0aW9uIHJldHVybnMgVFJVRS4KKyAgICAgKgorICAg
ICAqIEByZXR1cm4gVGhlIGZpZWxkIGNhdGVnb3J5IHNhdmVkIGluIHRoZSBpbnN0YW5jZS4KKyAg
ICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgaW5saW5lIGludDMyX3QgZ2V0Q2F0ZWdv
cnkoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBmQ2F0ZWdvcnk7CisgICAgfQorCisgICAgLyoq
CisgICAgICogR2V0cyB0aGUgZmllbGQgZm9yIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICAgICAq
CisgICAgICogVGhlIHJldHVybiB2YWx1ZSBpcyB3ZWxsLWRlZmluZWQgb25seSBhZnRlcgorICAg
ICAqIEZvcm1hdHRlZFZhbHVlI25leHRQb3NpdGlvbiByZXR1cm5zIFRSVUUuCisgICAgICoKKyAg
ICAgKiBAcmV0dXJuIFRoZSBmaWVsZCBzYXZlZCBpbiB0aGUgaW5zdGFuY2UuCisgICAgICogQGRy
YWZ0IElDVSA2NAorICAgICAqLworICAgIGlubGluZSBpbnQzMl90IGdldEZpZWxkKCkgY29uc3Qg
eworICAgICAgICByZXR1cm4gZkZpZWxkOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMg
dGhlIElOQ0xVU0lWRSBzdGFydCBpbmRleCBmb3IgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgICAg
ICoKKyAgICAgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHdlbGwtZGVmaW5lZCBvbmx5IGFmdGVyIEZv
cm1hdHRlZFZhbHVlI25leHRQb3NpdGlvbiByZXR1cm5zIFRSVUUuCisgICAgICoKKyAgICAgKiBA
cmV0dXJuIFRoZSBzdGFydCBpbmRleCBzYXZlZCBpbiB0aGUgaW5zdGFuY2UuCisgICAgICogQGRy
YWZ0IElDVSA2NAorICAgICAqLworICAgIGlubGluZSBpbnQzMl90IGdldFN0YXJ0KCkgY29uc3Qg
eworICAgICAgICByZXR1cm4gZlN0YXJ0OworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMg
dGhlIEVYQ0xVU0lWRSBlbmQgaW5kZXggc3RvcmVkIGZvciB0aGUgY3VycmVudCBwb3NpdGlvbi4K
KyAgICAgKgorICAgICAqIFRoZSByZXR1cm4gdmFsdWUgaXMgd2VsbC1kZWZpbmVkIG9ubHkgYWZ0
ZXIgRm9ybWF0dGVkVmFsdWUjbmV4dFBvc2l0aW9uIHJldHVybnMgVFJVRS4KKyAgICAgKgorICAg
ICAqIEByZXR1cm4gVGhlIGVuZCBpbmRleCBzYXZlZCBpbiB0aGUgaW5zdGFuY2UuCisgICAgICog
QGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIGlubGluZSBpbnQzMl90IGdldExpbWl0KCkgY29u
c3QgeworICAgICAgICByZXR1cm4gZkxpbWl0OworICAgIH0KKworICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisg
ICAgLy8vLyBUaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIGZvciBGb3JtYXR0ZWRWYWx1ZSBpbXBs
ZW1lbnRlcnM7IC8vLy8KKyAgICAvLy8vIG1vc3QgdXNlcnMgY2FuIGlnbm9yZSB0aGVtLiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICAv
KioKKyAgICAgKiBHZXRzIGFuIGludDY0IHRoYXQgRm9ybWF0dGVkVmFsdWUgaW1wbGVtZW50YXRp
b25zIG1heSB1c2UgZm9yIHN0b3JhZ2UuCisgICAgICoKKyAgICAgKiBUaGUgaW5pdGlhbCB2YWx1
ZSBpcyB6ZXJvLgorICAgICAqCisgICAgICogVXNlcnMgb2YgRm9ybWF0dGVkVmFsdWUgc2hvdWxk
IG5vdCBuZWVkIHRvIGNhbGwgdGhpcyBtZXRob2QuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFRo
ZSBjdXJyZW50IGl0ZXJhdGlvbiBjb250ZXh0IGZyb20ge0BsaW5rICNzZXRJbnQ2NEl0ZXJhdGlv
bkNvbnRleHR9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBpbmxpbmUgaW50
NjRfdCBnZXRJbnQ2NEl0ZXJhdGlvbkNvbnRleHQoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBm
Q29udGV4dDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIGFuIGludDY0IHRoYXQgRm9y
bWF0dGVkVmFsdWUgaW1wbGVtZW50YXRpb25zIG1heSB1c2UgZm9yIHN0b3JhZ2UuCisgICAgICoK
KyAgICAgKiBJbnRlbmRlZCB0byBiZSB1c2VkIGJ5IEZvcm1hdHRlZFZhbHVlIGltcGxlbWVudGF0
aW9ucy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjb250ZXh0IFRoZSBuZXcgaXRlcmF0aW9uIGNv
bnRleHQuCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHZvaWQgc2V0SW50NjRJ
dGVyYXRpb25Db250ZXh0KGludDY0X3QgY29udGV4dCk7CisKKyAgICAvKioKKyAgICAgKiBEZXRl
cm1pbmVzIHdoZXRoZXIgYSBnaXZlbiBmaWVsZCBzaG91bGQgYmUgaW5jbHVkZWQgZ2l2ZW4gdGhl
CisgICAgICogY29uc3RyYWludHMuCisgICAgICoKKyAgICAgKiBJbnRlbmRlZCB0byBiZSB1c2Vk
IGJ5IEZvcm1hdHRlZFZhbHVlIGltcGxlbWVudGF0aW9ucy4KKyAgICAgKgorICAgICAqIEBwYXJh
bSBjYXRlZ29yeSBUaGUgY2F0ZWdvcnkgdG8gdGVzdC4KKyAgICAgKiBAcGFyYW0gZmllbGQgVGhl
IGZpZWxkIHRvIHRlc3QuCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIFVCb29s
IG1hdGNoZXNGaWVsZChpbnQzMl90IGNhdGVnb3J5LCBpbnQzMl90IGZpZWxkKSBjb25zdDsKKwor
ICAgIC8qKgorICAgICAqIFNldHMgbmV3IHZhbHVlcyBmb3IgdGhlIHByaW1hcnkgcHVibGljIGdl
dHRlcnMuCisgICAgICoKKyAgICAgKiBJbnRlbmRlZCB0byBiZSB1c2VkIGJ5IEZvcm1hdHRlZFZh
bHVlIGltcGxlbWVudGF0aW9ucy4KKyAgICAgKgorICAgICAqIEl0IGlzIHVwIHRvIHRoZSBpbXBs
ZW1lbnRhdGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgdXNlci1yZXF1ZXN0ZWQKKyAgICAgKiBjb25z
dHJhaW50cyBhcmUgc2F0aXNmaWVkLiBUaGlzIG1ldGhvZCBkb2VzIG5vdCBjaGVjayEKKyAgICAg
KgorICAgICAqIEBwYXJhbSBjYXRlZ29yeSBUaGUgbmV3IGZpZWxkIGNhdGVnb3J5LgorICAgICAq
IEBwYXJhbSBmaWVsZCBUaGUgbmV3IGZpZWxkLgorICAgICAqIEBwYXJhbSBzdGFydCBUaGUgbmV3
IGluY2x1c2l2ZSBzdGFydCBpbmRleC4KKyAgICAgKiBAcGFyYW0gbGltaXQgVGhlIG5ldyBleGNs
dXNpdmUgZW5kIGluZGV4LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICB2b2lk
IHNldFN0YXRlKAorICAgICAgICBpbnQzMl90IGNhdGVnb3J5LAorICAgICAgICBpbnQzMl90IGZp
ZWxkLAorICAgICAgICBpbnQzMl90IHN0YXJ0LAorICAgICAgICBpbnQzMl90IGxpbWl0KTsKKwor
ICBwcml2YXRlOgorICAgIGludDY0X3QgZkNvbnRleHQgPSAwTEw7CisgICAgaW50MzJfdCBmRmll
bGQgPSAwOworICAgIGludDMyX3QgZlN0YXJ0ID0gMDsKKyAgICBpbnQzMl90IGZMaW1pdCA9IDA7
CisgICAgaW50MzJfdCBmQ2F0ZWdvcnkgPSBVRklFTERfQ0FURUdPUllfVU5ERUZJTkVEOworICAg
IGludDhfdCBmQ29uc3RyYWludCA9IDA7Cit9OworCisKKy8qKgorICogQW4gYWJzdHJhY3QgZm9y
bWF0dGVkIHZhbHVlOiBhIHN0cmluZyB3aXRoIGFzc29jaWF0ZWQgZmllbGQgYXR0cmlidXRlcy4K
KyAqIE1hbnkgZm9ybWF0dGVycyBmb3JtYXQgdG8gY2xhc3NlcyBpbXBsZW1lbnRpbmcgRm9ybWF0
dGVkVmFsdWUuCisgKgorICogQGRyYWZ0IElDVSA2NAorICovCitjbGFzcyBVX0kxOE5fQVBJIEZv
cm1hdHRlZFZhbHVlIC8qIG5vdCA6IHB1YmxpYyBVT2JqZWN0IGJlY2F1c2UgdGhpcyBpcyBhbiBp
bnRlcmZhY2UvbWl4aW4gY2xhc3MgKi8geworICBwdWJsaWM6CisgICAgLyoqIEBkcmFmdCBJQ1Ug
NjQgKi8KKyAgICB2aXJ0dWFsIH5Gb3JtYXR0ZWRWYWx1ZSgpOworCisgICAgLyoqCisgICAgICog
UmV0dXJucyB0aGUgZm9ybWF0dGVkIHN0cmluZyBhcyBhIHNlbGYtY29udGFpbmVkIFVuaWNvZGVT
dHJpbmcuCisgICAgICoKKyAgICAgKiBJZiB5b3UgbmVlZCB0aGUgc3RyaW5nIHdpdGhpbiB0aGUg
Y3VycmVudCBzY29wZSBvbmx5LCBjb25zaWRlciAjdG9UZW1wU3RyaW5nLgorICAgICAqCisgICAg
ICogQHBhcmFtIHN0YXR1cyBTZXQgaWYgYW4gZXJyb3Igb2NjdXJzLgorICAgICAqIEByZXR1cm4g
YSBVbmljb2RlU3RyaW5nIGNvbnRhaW5pbmcgdGhlIGZvcm1hdHRlZCBzdHJpbmcuCisgICAgICoK
KyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgdmlydHVhbCBVbmljb2RlU3RyaW5n
IHRvU3RyaW5nKFVFcnJvckNvZGUmIHN0YXR1cykgY29uc3QgPSAwOworCisgICAgLyoqCisgICAg
ICogUmV0dXJucyB0aGUgZm9ybWF0dGVkIHN0cmluZyBhcyBhIHJlYWQtb25seSBhbGlhcyB0byBt
ZW1vcnkgb3duZWQgYnkgdGhlIEZvcm1hdHRlZFZhbHVlLgorICAgICAqCisgICAgICogVGhlIHJl
dHVybiB2YWx1ZSBpcyB2YWxpZCBvbmx5IGFzIGxvbmcgYXMgdGhpcyBGb3JtYXR0ZWRWYWx1ZSBp
cyBwcmVzZW50IGFuZCB1bmNoYW5nZWQgaW4KKyAgICAgKiBtZW1vcnkuIElmIHlvdSBuZWVkIHRo
ZSBzdHJpbmcgb3V0c2lkZSB0aGUgY3VycmVudCBzY29wZSwgY29uc2lkZXIgI3RvU3RyaW5nLgor
ICAgICAqCisgICAgICogVGhlIGJ1ZmZlciByZXR1cm5lZCBieSBjYWxsaW5nIFVuaWNvZGVTdHJp
bmcjZ2V0QnVmZmVyKCkgb24gdGhlIHJldHVybiB2YWx1ZSBpcworICAgICAqIGd1YXJhbnRlZWQg
dG8gYmUgTlVMLXRlcm1pbmF0ZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gc3RhdHVzIFNldCBp
ZiBhbiBlcnJvciBvY2N1cnMuCisgICAgICogQHJldHVybiBhIHRlbXBvcmFyeSBVbmljb2RlU3Ry
aW5nIGNvbnRhaW5pbmcgdGhlIGZvcm1hdHRlZCBzdHJpbmcuCisgICAgICoKKyAgICAgKiBAZHJh
ZnQgSUNVIDY0CisgICAgICovCisgICAgdmlydHVhbCBVbmljb2RlU3RyaW5nIHRvVGVtcFN0cmlu
ZyhVRXJyb3JDb2RlJiBzdGF0dXMpIGNvbnN0ID0gMDsKKworICAgIC8qKgorICAgICAqIEFwcGVu
ZHMgdGhlIGZvcm1hdHRlZCBzdHJpbmcgdG8gYW4gQXBwZW5kYWJsZS4KKyAgICAgKgorICAgICAq
IEBwYXJhbSBhcHBlbmRhYmxlCisgICAgICogICAgICAgICBUaGUgQXBwZW5kYWJsZSB0byB3aGlj
aCB0byBhcHBlbmQgdGhlIHN0cmluZyBvdXRwdXQuCisgICAgICogQHBhcmFtIHN0YXR1cyBTZXQg
aWYgYW4gZXJyb3Igb2NjdXJzLgorICAgICAqIEByZXR1cm4gVGhlIHNhbWUgQXBwZW5kYWJsZSwg
Zm9yIGNoYWluaW5nLgorICAgICAqCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqIEBzZWUg
QXBwZW5kYWJsZQorICAgICAqLworICAgIHZpcnR1YWwgQXBwZW5kYWJsZSYgYXBwZW5kVG8oQXBw
ZW5kYWJsZSYgYXBwZW5kYWJsZSwgVUVycm9yQ29kZSYgc3RhdHVzKSBjb25zdCA9IDA7CisKKyAg
ICAvKioKKyAgICAgKiBJdGVyYXRlcyBvdmVyIGZpZWxkIHBvc2l0aW9ucyBpbiB0aGUgRm9ybWF0
dGVkVmFsdWUuIFRoaXMgbGV0cyB5b3UgZGV0ZXJtaW5lIHRoZSBwb3NpdGlvbgorICAgICAqIG9m
IHNwZWNpZmljIHR5cGVzIG9mIHN1YnN0cmluZ3MsIGxpa2UgYSBtb250aCBvciBhIGRlY2ltYWwg
c2VwYXJhdG9yLgorICAgICAqCisgICAgICogVG8gbG9vcCBvdmVyIGFsbCBmaWVsZCBwb3NpdGlv
bnM6CisgICAgICoKKyAgICAgKiAgICAgQ29uc3RyYWluZWRGaWVsZFBvc2l0aW9uIGNmcG9zOwor
ICAgICAqICAgICB3aGlsZSAoZm10dmFsLm5leHRQb3NpdGlvbihjZnBvcywgc3RhdHVzKSkgewor
ICAgICAqICAgICAgICAgLy8gaGFuZGxlIHRoZSBmaWVsZCBwb3NpdGlvbjsgZ2V0IGluZm9ybWF0
aW9uIGZyb20gY2Zwb3MKKyAgICAgKiAgICAgfQorICAgICAqCisgICAgICogQHBhcmFtIGNmcG9z
CisgICAgICogICAgICAgICBUaGUgb2JqZWN0IHVzZWQgZm9yIGl0ZXJhdGlvbiBzdGF0ZS4gVGhp
cyBjYW4gcHJvdmlkZSBjb25zdHJhaW50cyB0byBpdGVyYXRlIG92ZXIKKyAgICAgKiAgICAgICAg
IG9ubHkgb25lIHNwZWNpZmljIGNhdGVnb3J5IG9yIGZpZWxkOworICAgICAqICAgICAgICAgc2Vl
IENvbnN0cmFpbmVkRmllbGRQb3NpdGlvbiNjb25zdHJhaW5DYXRlZ29yeQorICAgICAqICAgICAg
ICAgYW5kIENvbnN0cmFpbmVkRmllbGRQb3NpdGlvbiNjb25zdHJhaW5GaWVsZC4KKyAgICAgKiBA
cGFyYW0gc3RhdHVzIFNldCBpZiBhbiBlcnJvciBvY2N1cnMuCisgICAgICogQHJldHVybiBUUlVF
IGlmIGEgbmV3IG9jY3VycmVuY2Ugb2YgdGhlIGZpZWxkIHdhcyBmb3VuZDsKKyAgICAgKiAgICAg
ICAgIEZBTFNFIG90aGVyd2lzZSBvciBpZiBhbiBlcnJvciB3YXMgc2V0LgorICAgICAqCisgICAg
ICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHZpcnR1YWwgVUJvb2wgbmV4dFBvc2l0aW9u
KENvbnN0cmFpbmVkRmllbGRQb3NpdGlvbiYgY2Zwb3MsIFVFcnJvckNvZGUmIHN0YXR1cykgY29u
c3QgPSAwOworfTsKKworCitVX05BTUVTUEFDRV9FTkQKKworI2VuZGlmICAvKiBVX0hJREVfRFJB
RlRfQVBJICovCisjZW5kaWYgLyogI2lmICFVQ09ORklHX05PX0ZPUk1BVFRJTkcgKi8KKyNlbmRp
ZiAvLyBfX0ZPUk1BVFRFRFZBTFVFX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9pY3UvdW5p
Y29kZS9nZW5kZXIuaCBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvZ2VuZGVyLmgKaW5kZXggZTNj
MjdkMDI0ZTA5NDMxMzIxZTQyNmVlMjU3YWZhODE4ODNlYTJlOC4uZDI3NzNlYmQwNTFjNDkwYzBl
YmI1M2IzYzQxM2YyYTRmNDlmNzliNCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9pY3UvdW5pY29k
ZS9nZW5kZXIuaAorKysgYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL2dlbmRlci5oCkBAIC0xOCw2
ICsxOCwxMSBAQAogI2lmbmRlZiBfR0VOREVSCiAjZGVmaW5lIF9HRU5ERVIKIAorLyoqCisgKiBc
ZmlsZQorICogXGJyaWVmIEMrKyBBUEk6IEdlbmRlckluZm8gY29tcHV0ZXMgdGhlIGdlbmRlciBv
ZiBhIGxpc3QuCisgKi8KKwogI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCiAKICNpZiAhVUNP
TkZJR19OT19GT1JNQVRUSU5HCkBAIC0zMCw3ICszNSw3IEBAIGNsYXNzIEdlbmRlckluZm9UZXN0
OwogCiBVX05BTUVTUEFDRV9CRUdJTgogCi0vLyBGb3J3YXJkIERlY2xhcmF0aW9uCisvKiogXGlu
dGVybmFsIEZvcndhcmQgRGVjbGFyYXRpb24gICovCiB2b2lkIFVfQ0FMTENPTlYgR2VuZGVySW5m
b19pbml0Q2FjaGUoVUVycm9yQ29kZSAmc3RhdHVzKTsKIAogLyoqCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL2ljdS91bmljb2RlL2ljdXBsdWcuaCBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvaWN1
cGx1Zy5oCmluZGV4IDFhODk0YTcxYzRhZTg4OTljYzVmNzVlMzljNTExMmFmOTZmM2ZkNTIuLjJl
NTdiMTQ5ZTE0ZWRlNTZhODY1YzJjNjY5NTkwMWJiMzA2NjNmMTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvaWN1L3VuaWNvZGUvaWN1cGx1Zy5oCisrKyBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUv
aWN1cGx1Zy5oCkBAIC0xMTAsNyArMTEwLDcgQEAKICNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5o
IgogCiAKLSNpZiBVQ09ORklHX0VOQUJMRV9QTFVHSU5TCisjaWYgVUNPTkZJR19FTkFCTEVfUExV
R0lOUyB8fCBkZWZpbmVkKFVfSU5fRE9YWUdFTikKIAogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvaWN1L3VuaWNvZGUvbGlzdGZvcm1hdHRlci5oIGIvU291cmNlL1dURi9pY3UvdW5pY29kZS9s
aXN0Zm9ybWF0dGVyLmgKaW5kZXggMTgwZmJjYjVjZGU1Yjc0M2E5ZmFmOGM4NGRjZGZkOGNhMjA3
NDdkNC4uOWNlOGVjODYxN2NlODAwZDRlZDAzYzI2MzYxMDI2NjkzYWI3MmZhMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi9pY3UvdW5pY29kZS9saXN0Zm9ybWF0dGVyLmgKKysrIGIvU291cmNlL1dU
Ri9pY3UvdW5pY29kZS9saXN0Zm9ybWF0dGVyLmgKQEAgLTIzLDkgKzIzLDE1IEBACiAKICNpbmNs
dWRlICJ1bmljb2RlL3VuaXN0ci5oIgogI2luY2x1ZGUgInVuaWNvZGUvbG9jaWQuaCIKKyNpbmNs
dWRlICJ1bmljb2RlL2Zvcm1hdHRlZHZhbHVlLmgiCiAKIFVfTkFNRVNQQUNFX0JFR0lOCiAKK2Ns
YXNzIEZpZWxkUG9zaXRpb25JdGVyYXRvcjsKK2NsYXNzIEZpZWxkUG9zaXRpb25IYW5kbGVyOwor
Y2xhc3MgRm9ybWF0dGVkTGlzdERhdGE7CitjbGFzcyBMaXN0Rm9ybWF0dGVyOworCiAvKiogQGlu
dGVybmFsICovCiBjbGFzcyBIYXNodGFibGU7CiAKQEAgLTMzLDcgKzM5LDEwIEBAIGNsYXNzIEhh
c2h0YWJsZTsKIHN0cnVjdCBMaXN0Rm9ybWF0SW50ZXJuYWw7CiAKIC8qIFRoZSBmb2xsb3dpbmcg
Y2FuJ3QgYmUgI2lmbmRlZiBVX0hJREVfSU5URVJOQUxfQVBJLCBuZWVkZWQgZm9yIG90aGVyIC5o
IGZpbGUgZGVjbGFyYXRpb25zICovCi0vKiogQGludGVybmFsICovCisvKioKKyAqIEBpbnRlcm5h
bAorICogXGNvbmQKKyAqLwogc3RydWN0IExpc3RGb3JtYXREYXRhIDogcHVibGljIFVNZW1vcnkg
ewogICAgIFVuaWNvZGVTdHJpbmcgdHdvUGF0dGVybjsKICAgICBVbmljb2RlU3RyaW5nIHN0YXJ0
UGF0dGVybjsKQEAgLTQzLDYgKzUyLDcgQEAgc3RydWN0IExpc3RGb3JtYXREYXRhIDogcHVibGlj
IFVNZW1vcnkgewogICBMaXN0Rm9ybWF0RGF0YShjb25zdCBVbmljb2RlU3RyaW5nJiB0d28sIGNv
bnN0IFVuaWNvZGVTdHJpbmcmIHN0YXJ0LCBjb25zdCBVbmljb2RlU3RyaW5nJiBtaWRkbGUsIGNv
bnN0IFVuaWNvZGVTdHJpbmcmIGVuZCkgOgogICAgICAgdHdvUGF0dGVybih0d28pLCBzdGFydFBh
dHRlcm4oc3RhcnQpLCBtaWRkbGVQYXR0ZXJuKG1pZGRsZSksIGVuZFBhdHRlcm4oZW5kKSB7fQog
fTsKKy8qKiBcZW5kY29uZCAqLwogCiAKIC8qKgpAQCAtNTEsNiArNjEsODEgQEAgc3RydWN0IExp
c3RGb3JtYXREYXRhIDogcHVibGljIFVNZW1vcnkgewogICovCiAKIAorI2lmICFVQ09ORklHX05P
X0ZPUk1BVFRJTkcKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQorLyoqCisgKiBBbiBpbW11dGFi
bGUgY2xhc3MgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIGEgbGlzdCBmb3JtYXR0aW5nIG9wZXJh
dGlvbi4KKyAqCisgKiBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBhcmUgaW1tdXRhYmxlIGFuZCB0
aHJlYWQtc2FmZS4KKyAqCisgKiBXaGVuIGNhbGxpbmcgbmV4dFBvc2l0aW9uKCk6CisgKiBUaGUg
ZmllbGRzIGFyZSByZXR1cm5lZCBmcm9tIHN0YXJ0IHRvIGVuZC4gVGhlIHNwZWNpYWwgZmllbGQg
Y2F0ZWdvcnkKKyAqIFVGSUVMRF9DQVRFR09SWV9MSVNUX1NQQU4gaXMgdXNlZCB0byBpbmRpY2F0
ZSB3aGljaCBhcmd1bWVudAorICogd2FzIGluc2VydGVkIGF0IHRoZSBnaXZlbiBwb3NpdGlvbi4g
VGhlIHNwYW4gY2F0ZWdvcnkgd2lsbAorICogYWx3YXlzIG9jY3VyIGJlZm9yZSB0aGUgY29ycmVz
cG9uZGluZyBpbnN0YW5jZSBvZiBVRklFTERfQ0FURUdPUllfTElTVAorICogaW4gdGhlIG5leHRQ
b3NpdGlvbigpIGl0ZXJhdG9yLgorICoKKyAqIE5vdCBpbnRlbmRlZCBmb3IgcHVibGljIHN1YmNs
YXNzaW5nLgorICoKKyAqIEBkcmFmdCBJQ1UgNjQKKyAqLworY2xhc3MgVV9JMThOX0FQSSBGb3Jt
YXR0ZWRMaXN0IDogcHVibGljIFVNZW1vcnksIHB1YmxpYyBGb3JtYXR0ZWRWYWx1ZSB7CisgIHB1
YmxpYzoKKyAgICAvKioKKyAgICAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yOyBtYWtlcyBhbiBlbXB0
eSBGb3JtYXR0ZWRMaXN0LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBGb3Jt
YXR0ZWRMaXN0KCkgOiBmRGF0YShudWxscHRyKSwgZkVycm9yQ29kZShVX0lOVkFMSURfU1RBVEVf
RVJST1IpIHt9CisKKyAgICAvKioKKyAgICAgKiBNb3ZlIGNvbnN0cnVjdG9yOiBMZWF2ZXMgdGhl
IHNvdXJjZSBGb3JtYXR0ZWRMaXN0IGluIGFuIHVuZGVmaW5lZCBzdGF0ZS4KKyAgICAgKiBAZHJh
ZnQgSUNVIDY0CisgICAgICovCisgICAgRm9ybWF0dGVkTGlzdChGb3JtYXR0ZWRMaXN0JiYgc3Jj
KSBVX05PRVhDRVBUOworCisgICAgLyoqCisgICAgICogRGVzdHJ1Y3QgYW4gaW5zdGFuY2Ugb2Yg
Rm9ybWF0dGVkTGlzdC4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgdmlydHVh
bCB+Rm9ybWF0dGVkTGlzdCgpIFVfT1ZFUlJJREU7CisKKyAgICAvKiogQ29weWluZyBub3Qgc3Vw
cG9ydGVkOyB1c2UgbW92ZSBjb25zdHJ1Y3RvciBpbnN0ZWFkLiAqLworICAgIEZvcm1hdHRlZExp
c3QoY29uc3QgRm9ybWF0dGVkTGlzdCYpID0gZGVsZXRlOworCisgICAgLyoqIENvcHlpbmcgbm90
IHN1cHBvcnRlZDsgdXNlIG1vdmUgYXNzaWdubWVudCBpbnN0ZWFkLiAqLworICAgIEZvcm1hdHRl
ZExpc3QmIG9wZXJhdG9yPShjb25zdCBGb3JtYXR0ZWRMaXN0JikgPSBkZWxldGU7CisKKyAgICAv
KioKKyAgICAgKiBNb3ZlIGFzc2lnbm1lbnQ6IExlYXZlcyB0aGUgc291cmNlIEZvcm1hdHRlZExp
c3QgaW4gYW4gdW5kZWZpbmVkIHN0YXRlLgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8K
KyAgICBGb3JtYXR0ZWRMaXN0JiBvcGVyYXRvcj0oRm9ybWF0dGVkTGlzdCYmIHNyYykgVV9OT0VY
Q0VQVDsKKworICAgIC8qKiBAY29weWRvYyBGb3JtYXR0ZWRWYWx1ZTo6dG9TdHJpbmcoKSAqLwor
ICAgIFVuaWNvZGVTdHJpbmcgdG9TdHJpbmcoVUVycm9yQ29kZSYgc3RhdHVzKSBjb25zdCBVX09W
RVJSSURFOworCisgICAgLyoqIEBjb3B5ZG9jIEZvcm1hdHRlZFZhbHVlOjp0b1RlbXBTdHJpbmco
KSAqLworICAgIFVuaWNvZGVTdHJpbmcgdG9UZW1wU3RyaW5nKFVFcnJvckNvZGUmIHN0YXR1cykg
Y29uc3QgVV9PVkVSUklERTsKKworICAgIC8qKiBAY29weWRvYyBGb3JtYXR0ZWRWYWx1ZTo6YXBw
ZW5kVG8oKSAqLworICAgIEFwcGVuZGFibGUgJmFwcGVuZFRvKEFwcGVuZGFibGUmIGFwcGVuZGFi
bGUsIFVFcnJvckNvZGUmIHN0YXR1cykgY29uc3QgVV9PVkVSUklERTsKKworICAgIC8qKiBAY29w
eWRvYyBGb3JtYXR0ZWRWYWx1ZTo6bmV4dFBvc2l0aW9uKCkgKi8KKyAgICBVQm9vbCBuZXh0UG9z
aXRpb24oQ29uc3RyYWluZWRGaWVsZFBvc2l0aW9uJiBjZnBvcywgVUVycm9yQ29kZSYgc3RhdHVz
KSBjb25zdCBVX09WRVJSSURFOworCisgIHByaXZhdGU6CisgICAgRm9ybWF0dGVkTGlzdERhdGEg
KmZEYXRhOworICAgIFVFcnJvckNvZGUgZkVycm9yQ29kZTsKKyAgICBleHBsaWNpdCBGb3JtYXR0
ZWRMaXN0KEZvcm1hdHRlZExpc3REYXRhICpyZXN1bHRzKQorICAgICAgICA6IGZEYXRhKHJlc3Vs
dHMpLCBmRXJyb3JDb2RlKFVfWkVST19FUlJPUikge30KKyAgICBleHBsaWNpdCBGb3JtYXR0ZWRM
aXN0KFVFcnJvckNvZGUgZXJyb3JDb2RlKQorICAgICAgICA6IGZEYXRhKG51bGxwdHIpLCBmRXJy
b3JDb2RlKGVycm9yQ29kZSkge30KKyAgICBmcmllbmQgY2xhc3MgTGlzdEZvcm1hdHRlcjsKK307
CisjZW5kaWYgLyogVV9ISURFX0RSQUZUX0FQSSAqLworI2VuZGlmIC8vICFVQ09ORklHX05PX0ZP
Uk1BVFRJTkcKKworCiAvKioKICAqIEFuIGltbXV0YWJsZSBjbGFzcyBmb3IgZm9ybWF0dGluZyBh
IGxpc3QsIHVzaW5nIGRhdGEgZnJvbSBDTERSIChvciBzdXBwbGllZAogICogc2VwYXJhdGVseSku
CkBAIC02MSw3ICsxNDYsNyBAQCBzdHJ1Y3QgTGlzdEZvcm1hdERhdGEgOiBwdWJsaWMgVU1lbW9y
eSB7CiAgKiBUaGUgTGlzdEZvcm1hdHRlciBjbGFzcyBpcyBub3QgaW50ZW5kZWQgZm9yIHB1Ymxp
YyBzdWJjbGFzc2luZy4KICAqIEBzdGFibGUgSUNVIDUwCiAgKi8KLWNsYXNzIFVfQ09NTU9OX0FQ
SSBMaXN0Rm9ybWF0dGVyIDogcHVibGljIFVPYmplY3R7CitjbGFzcyBVX0kxOE5fQVBJIExpc3RG
b3JtYXR0ZXIgOiBwdWJsaWMgVU9iamVjdHsKIAogICBwdWJsaWM6CiAKQEAgLTEwMyw3ICsxODgs
NyBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgTGlzdEZvcm1hdHRlciA6IHB1YmxpYyBVT2JqZWN0ewog
ICAgICAqIENyZWF0ZXMgYSBMaXN0Rm9ybWF0dGVyIGFwcHJvcHJpYXRlIGZvciBhIGxvY2FsZSBh
bmQgc3R5bGUuCiAgICAgICoKICAgICAgKiBAcGFyYW0gbG9jYWxlIFRoZSBsb2NhbGUuCi0gICAg
ICogQHBhcmFtIHN0eWxlIHRoZSBzdHlsZSwgZWl0aGVyICJzdGFuZGFyZCIsICJkdXJhdGlvbiIs
IG9yICJkdXJhdGlvbi1zaG9ydCIKKyAgICAgKiBAcGFyYW0gc3R5bGUgdGhlIHN0eWxlLCBlaXRo
ZXIgInN0YW5kYXJkIiwgIm9yIiwgInVuaXQiLCAidW5pdC1uYXJyb3ciLCBvciAidW5pdC1zaG9y
dCIKICAgICAgKiBAcGFyYW0gZXJyb3JDb2RlIElDVSBlcnJvciBjb2RlLCBzZXQgaWYgbm8gZGF0
YSBhdmFpbGFibGUgZm9yIHRoZSBnaXZlbiBsb2NhbGUuCiAgICAgICogQHJldHVybiBBIExpc3RG
b3JtYXR0ZXIgb2JqZWN0IGNyZWF0ZWQgZnJvbSBpbnRlcm5hbCBkYXRhIGRlcml2ZWQgZnJvbQog
ICAgICAqICAgICBDTERSIGRhdGEuCkBAIC0xMzMsNiArMjE4LDQ3IEBAIGNsYXNzIFVfQ09NTU9O
X0FQSSBMaXN0Rm9ybWF0dGVyIDogcHVibGljIFVPYmplY3R7CiAgICAgVW5pY29kZVN0cmluZyYg
Zm9ybWF0KGNvbnN0IFVuaWNvZGVTdHJpbmcgaXRlbXNbXSwgaW50MzJfdCBuX2l0ZW1zLAogICAg
ICAgICBVbmljb2RlU3RyaW5nJiBhcHBlbmRUbywgVUVycm9yQ29kZSYgZXJyb3JDb2RlKSBjb25z
dDsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLyoqCisgICAgICogRm9ybWF0IGEg
bGlzdCBvZiBzdHJpbmdzLgorICAgICAqCisgICAgICogQHBhcmFtIGl0ZW1zICAgICBBbiBhcnJh
eSBvZiBzdHJpbmdzIHRvIGJlIGNvbWJpbmVkIGFuZCBmb3JtYXR0ZWQuCisgICAgICogQHBhcmFt
IG5faXRlbXMgICBMZW5ndGggb2YgdGhlIGFycmF5IGl0ZW1zLgorICAgICAqIEBwYXJhbSBhcHBl
bmRUbyAgVGhlIHN0cmluZyB0byB3aGljaCB0aGUgZm9ybWF0dGVkIHJlc3VsdCB3aWxsIGJlCisg
ICAgICogICAgICAgICAgICAgICAgICBhcHBlbmRlZC4KKyAgICAgKiBAcGFyYW0gcG9zSXRlciAg
IE9uIHJldHVybiwgY2FuIGJlIHVzZWQgdG8gaXRlcmF0ZSBvdmVyIHBvc2l0aW9ucyBvZgorICAg
ICAqICAgICAgICAgICAgICAgICAgZmllbGRzIGdlbmVyYXRlZCBieSB0aGlzIGZvcm1hdCBjYWxs
LiBGaWVsZCB2YWx1ZXMgYXJlCisgICAgICogICAgICAgICAgICAgICAgICBkZWZpbmVkIGluIFVM
aXN0Rm9ybWF0dGVyRmllbGQuIENhbiBiZSBOVUxMLgorICAgICAqIEBwYXJhbSBlcnJvckNvZGUg
SUNVIGVycm9yIGNvZGUgcmV0dXJuZWQgaGVyZS4KKyAgICAgKiBAcmV0dXJuICAgICAgICAgIEZv
cm1hdHRlZCBzdHJpbmcgY29tYmluaW5nIHRoZSBlbGVtZW50cyBvZiBpdGVtcywKKyAgICAgKiAg
ICAgICAgICAgICAgICAgIGFwcGVuZGVkIHRvIGFwcGVuZFRvLgorICAgICAqIEBkcmFmdCBJQ1Ug
NjMKKyAgICAgKi8KKyAgICBVbmljb2RlU3RyaW5nJiBmb3JtYXQoY29uc3QgVW5pY29kZVN0cmlu
ZyBpdGVtc1tdLCBpbnQzMl90IG5faXRlbXMsCisgICAgICAgIFVuaWNvZGVTdHJpbmcgJiBhcHBl
bmRUbywgRmllbGRQb3NpdGlvbkl0ZXJhdG9yKiBwb3NJdGVyLAorICAgICAgICBVRXJyb3JDb2Rl
JiBlcnJvckNvZGUpIGNvbnN0OworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKKyNp
ZiAhVUNPTkZJR19OT19GT1JNQVRUSU5HCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKyAgICAv
KioKKyAgICAgKiBGb3JtYXRzIGEgbGlzdCBvZiBzdHJpbmdzIHRvIGEgRm9ybWF0dGVkTGlzdCwg
d2hpY2ggZXhwb3NlcyBmaWVsZAorICAgICAqIHBvc2l0aW9uIGluZm9ybWF0aW9uLiBUaGUgRm9y
bWF0dGVkTGlzdCBjb250YWlucyBtb3JlIGluZm9ybWF0aW9uIHRoYW4KKyAgICAgKiBhIEZpZWxk
UG9zaXRpb25JdGVyYXRvci4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpdGVtcyAgICAgQW4gYXJy
YXkgb2Ygc3RyaW5ncyB0byBiZSBjb21iaW5lZCBhbmQgZm9ybWF0dGVkLgorICAgICAqIEBwYXJh
bSBuX2l0ZW1zICAgTGVuZ3RoIG9mIHRoZSBhcnJheSBpdGVtcy4KKyAgICAgKiBAcGFyYW0gZXJy
b3JDb2RlIElDVSBlcnJvciBjb2RlIHJldHVybmVkIGhlcmUuCisgICAgICogQHJldHVybiAgICAg
ICAgICBBIEZvcm1hdHRlZExpc3QgY29udGFpbmluZyBmaWVsZCBpbmZvcm1hdGlvbi4KKyAgICAg
KiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgRm9ybWF0dGVkTGlzdCBmb3JtYXRTdHJpbmdz
VG9WYWx1ZSgKKyAgICAgICAgY29uc3QgVW5pY29kZVN0cmluZyBpdGVtc1tdLAorICAgICAgICBp
bnQzMl90IG5faXRlbXMsCisgICAgICAgIFVFcnJvckNvZGUmIGVycm9yQ29kZSkgY29uc3Q7Cisj
ZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKyNlbmRpZiAvLyAhVUNPTkZJR19OT19GT1JN
QVRUSU5HCisKICNpZm5kZWYgVV9ISURFX0lOVEVSTkFMX0FQSQogICAgIC8qKgogICAgICAgQGlu
dGVybmFsIGZvciBNZWFzdXJlRm9ybWF0CkBAIC0xNjAsNiArMjg2LDEwIEBAIGNsYXNzIFVfQ09N
TU9OX0FQSSBMaXN0Rm9ybWF0dGVyIDogcHVibGljIFVPYmplY3R7CiAgICAgc3RydWN0IExpc3RQ
YXR0ZXJuc1Npbms7CiAgICAgc3RhdGljIExpc3RGb3JtYXRJbnRlcm5hbCogbG9hZExpc3RGb3Jt
YXRJbnRlcm5hbChjb25zdCBMb2NhbGUmIGxvY2FsZSwgY29uc3QgY2hhciogc3R5bGUsIFVFcnJv
ckNvZGUmIGVycm9yQ29kZSk7CiAKKyAgICBVbmljb2RlU3RyaW5nJiBmb3JtYXRfKAorICAgICAg
ICBjb25zdCBVbmljb2RlU3RyaW5nIGl0ZW1zW10sIGludDMyX3Qgbl9pdGVtcywgVW5pY29kZVN0
cmluZyYgYXBwZW5kVG8sCisgICAgICAgIGludDMyX3QgaW5kZXgsIGludDMyX3QgJm9mZnNldCwg
RmllbGRQb3NpdGlvbkhhbmRsZXIqIGhhbmRsZXIsIFVFcnJvckNvZGUmIGVycm9yQ29kZSkgY29u
c3Q7CisKICAgICBMaXN0Rm9ybWF0dGVyKCk7CiAKICAgICBMaXN0Rm9ybWF0SW50ZXJuYWwqIG93
bmVkOwpAQCAtMTY4LDQgKzI5OCw0IEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBMaXN0Rm9ybWF0dGVy
IDogcHVibGljIFVPYmplY3R7CiAKIFVfTkFNRVNQQUNFX0VORAogCi0jZW5kaWYKKyNlbmRpZiAv
LyBfX0xJU1RGT1JNQVRURVJfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2ljdS91bmljb2Rl
L2xvY2FsZWJ1aWxkZXIuaCBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvbG9jYWxlYnVpbGRlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjk2MGU1OTgwYzAzYzJlMWUwYmM1MDUzNzljMzM5MGQwOTg2NmJjNzEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL2xvY2FsZWJ1aWxkZXIuaApA
QCAtMCwwICsxLDI5MiBAQAorLy8gwqkgMjAxOCBhbmQgbGF0ZXI6IFVuaWNvZGUsIEluYy4gYW5k
IG90aGVycy4KKy8vIExpY2Vuc2UgJiB0ZXJtcyBvZiB1c2U6IGh0dHA6Ly93d3cudW5pY29kZS5v
cmcvY29weXJpZ2h0Lmh0bWwjTGljZW5zZQorI2lmbmRlZiBfX0xPQ0FMRUJVSUxERVJfSF9fCisj
ZGVmaW5lIF9fTE9DQUxFQlVJTERFUl9IX18KKworI2luY2x1ZGUgInVuaWNvZGUvbG9jaWQuaCIK
KyNpbmNsdWRlICJ1bmljb2RlL3N0cmluZ3BpZWNlLmgiCisjaW5jbHVkZSAidW5pY29kZS91b2Jq
ZWN0LmgiCisjaW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKKworCisjaWZuZGVmIFVfSElERV9E
UkFGVF9BUEkKKy8qKgorICogXGZpbGUKKyAqIFxicmllZiBDKysgQVBJOiBCdWlsZGVyIEFQSSBm
b3IgTG9jYWxlCisgKi8KKworVV9OQU1FU1BBQ0VfQkVHSU4KK2NsYXNzIENoYXJTdHJpbmc7CisK
Ky8qKgorICogPGNvZGU+TG9jYWxlQnVpbGRlcjwvY29kZT4gaXMgdXNlZCB0byBidWlsZCBpbnN0
YW5jZXMgb2YgPGNvZGU+TG9jYWxlPC9jb2RlPgorICogZnJvbSB2YWx1ZXMgY29uZmlndXJlZCBi
eSB0aGUgc2V0dGVycy4gIFVubGlrZSB0aGUgPGNvZGU+TG9jYWxlPC9jb2RlPgorICogY29uc3Ry
dWN0b3JzLCB0aGUgPGNvZGU+TG9jYWxlQnVpbGRlcjwvY29kZT4gY2hlY2tzIGlmIGEgdmFsdWUg
Y29uZmlndXJlZCBieSBhCisgKiBzZXR0ZXIgc2F0aXNmaWVzIHRoZSBzeW50YXggcmVxdWlyZW1l
bnRzIGRlZmluZWQgYnkgdGhlIDxjb2RlPkxvY2FsZTwvY29kZT4KKyAqIGNsYXNzLiAgQSA8Y29k
ZT5Mb2NhbGU8L2NvZGU+IG9iamVjdCBjcmVhdGVkIGJ5IGEgPGNvZGU+TG9jYWxlQnVpbGRlcjwv
Y29kZT4gaXMKKyAqIHdlbGwtZm9ybWVkIGFuZCBjYW4gYmUgdHJhbnNmb3JtZWQgdG8gYSB3ZWxs
LWZvcm1lZCBJRVRGIEJDUCA0NyBsYW5ndWFnZSB0YWcKKyAqIHdpdGhvdXQgbG9zaW5nIGluZm9y
bWF0aW9uLgorICoKKyAqIDxwPlRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gY3Jl
YXRlIGEgPGNvZGU+TG9jYWxlPC9jb2RlPiBvYmplY3QKKyAqIHdpdGggdGhlIDxjb2RlPkxvY2Fs
ZUJ1aWxkZXI8L2NvZGU+LgorICogPGJsb2NrcXVvdGU+CisgKiA8cHJlPgorICogICAgIFVFcnJv
ckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICogICAgIExvY2FsZSBhTG9jYWxlID0gTG9j
YWxlQnVpbGRlcigpCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldExhbmd1YWdlKCJz
ciIpCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFNjcmlwdCgiTGF0biIpCisgKiAg
ICAgICAgICAgICAgICAgICAgICAgICAgLnNldFJlZ2lvbigiUlMiKQorICogICAgICAgICAgICAg
ICAgICAgICAgICAgIC5idWlsZChzdGF0dXMpOworICogICAgIGlmIChVX1NVQ0NFU1Moc3RhdHVz
KSkgeworICogICAgICAgLy8gLi4uCisgKiAgICAgfQorICogPC9wcmU+CisgKiA8L2Jsb2NrcXVv
dGU+CisgKgorICogPHA+TG9jYWxlQnVpbGRlcnMgY2FuIGJlIHJldXNlZDsgPGNvZGU+Y2xlYXIo
KTwvY29kZT4gcmVzZXRzIGFsbAorICogZmllbGRzIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgor
ICoKKyAqIDxwPkxvY2FsZUJ1aWxkZXIgdHJhY2tzIGVycm9ycyBpbiBhbiBpbnRlcm5hbCBVRXJy
b3JDb2RlLiBGb3IgYWxsIHNldHRlcnMsCisgKiBleGNlcHQgc2V0TGFuZ3VhZ2VUYWcgYW5kIHNl
dExvY2FsZSwgTG9jYWxlQnVpbGRlciB3aWxsIHJldHVybiBpbW1lZGlhdGVseQorICogaWYgdGhl
IGludGVybmFsIFVFcnJvckNvZGUgaXMgaW4gZXJyb3Igc3RhdGUuCisgKiBUbyByZXNldCBpbnRl
cm5hbCBzdGF0ZSBhbmQgZXJyb3IgY29kZSwgY2FsbCBjbGVhciBtZXRob2QuCisgKiBUaGUgc2V0
TGFuZ3VhZ2VUYWcgYW5kIHNldExvY2FsZSBtZXRob2Qgd2lsbCBmaXJzdCBjbGVhciB0aGUgaW50
ZXJuYWwKKyAqIFVFcnJvckNvZGUsIHRoZW4gdHJhY2sgdGhlIGVycm9yIG9mIHRoZSB2YWxpZGF0
aW9uIG9mIHRoZSBpbnB1dCBwYXJhbWV0ZXIKKyAqIGludG8gdGhlIGludGVybmFsIFVFcnJvckNv
ZGUuCisgKgorICogQGRyYWZ0IElDVSA2NAorICovCitjbGFzcyBVX0NPTU1PTl9BUEkgTG9jYWxl
QnVpbGRlciA6IHB1YmxpYyBVT2JqZWN0IHsKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBDb25z
dHJ1Y3RzIGFuIGVtcHR5IExvY2FsZUJ1aWxkZXIuIFRoZSBkZWZhdWx0IHZhbHVlIG9mIGFsbAor
ICAgICAqIGZpZWxkcywgZXh0ZW5zaW9ucywgYW5kIHByaXZhdGUgdXNlIGluZm9ybWF0aW9uIGlz
IHRoZQorICAgICAqIGVtcHR5IHN0cmluZy4KKyAgICAgKgorICAgICAqIEBkcmFmdCBJQ1UgNjQK
KyAgICAgKi8KKyAgICBMb2NhbGVCdWlsZGVyKCk7CisKKyAgICAvKioKKyAgICAgKiBEZXN0cnVj
dG9yCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHZpcnR1YWwgfkxvY2FsZUJ1
aWxkZXIoKTsKKworICAgIC8qKgorICAgICAqIFJlc2V0cyB0aGUgPGNvZGU+TG9jYWxlQnVpbGRl
cjwvY29kZT4gdG8gbWF0Y2ggdGhlIHByb3ZpZGVkCisgICAgICogPGNvZGU+bG9jYWxlPC9jb2Rl
Pi4gIEV4aXN0aW5nIHN0YXRlIGlzIGRpc2NhcmRlZC4KKyAgICAgKgorICAgICAqIDxwPkFsbCBm
aWVsZHMgb2YgdGhlIGxvY2FsZSBtdXN0IGJlIHdlbGwtZm9ybWVkLgorICAgICAqIDxwPlRoaXMg
bWV0aG9kIGNsZWFycyB0aGUgaW50ZXJuYWwgVUVycm9yQ29kZS4KKyAgICAgKgorICAgICAqIEBw
YXJhbSBsb2NhbGUgdGhlIGxvY2FsZQorICAgICAqIEByZXR1cm4gVGhpcyBidWlsZGVyLgorICAg
ICAqCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIExvY2FsZUJ1aWxkZXImIHNl
dExvY2FsZShjb25zdCBMb2NhbGUmIGxvY2FsZSk7CisKKyAgICAvKioKKyAgICAgKiBSZXNldHMg
dGhlIExvY2FsZUJ1aWxkZXIgdG8gbWF0Y2ggdGhlIHByb3ZpZGVkCisgICAgICogW1VuaWNvZGUg
TG9jYWxlIElkZW50aWZpZXJdKGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM1L3Ry
MzUuaHRtbCN1bmljb2RlX2xvY2FsZV9pZCkgLgorICAgICAqIERpc2NhcmRzIHRoZSBleGlzdGlu
ZyBzdGF0ZS4gdGhlIGVtcHR5IHN0cmluZyBjYXVzZSB0aGUgYnVpbGRlciB0byBiZQorICAgICAq
IHJlc2V0LCBsaWtlIHtAbGluayAjY2xlYXJ9LiAgR3JhbmRmYXRoZXJlZCB0YWdzIGFyZSBjb252
ZXJ0ZWQgdG8gdGhlaXIKKyAgICAgKiBjYW5vbmljYWwgZm9ybSBiZWZvcmUgYmVpbmcgcHJvY2Vz
c2VkLiAgT3RoZXJ3aXNlLCB0aGUgPGNvZGU+bGFuZ3VhZ2UKKyAgICAgKiB0YWc8L2NvZGU+IG11
c3QgYmUgd2VsbC1mb3JtZWQsIG9yIGVsc2UgdGhlIGJ1aWxkKCkgbWV0aG9kIHdpbGwgbGF0ZXIK
KyAgICAgKiByZXBvcnQgYW4gVV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SLgorICAgICAqCisgICAg
ICogPHA+VGhpcyBtZXRob2QgY2xlYXJzIHRoZSBpbnRlcm5hbCBVRXJyb3JDb2RlLgorICAgICAq
CisgICAgICogQHBhcmFtIHRhZyB0aGUgbGFuZ3VhZ2UgdGFnLCBkZWZpbmVkIGFzCisgICAgICog
ICBbdW5pY29kZV9sb2NhbGVfaWRdKGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM1
L3RyMzUuaHRtbCN1bmljb2RlX2xvY2FsZV9pZCkuCisgICAgICogQHJldHVybiBUaGlzIGJ1aWxk
ZXIuCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIExvY2FsZUJ1aWxkZXImIHNl
dExhbmd1YWdlVGFnKFN0cmluZ1BpZWNlIHRhZyk7CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRo
ZSBsYW5ndWFnZS4gIElmIDxjb2RlPmxhbmd1YWdlPC9jb2RlPiBpcyB0aGUgZW1wdHkgc3RyaW5n
LCB0aGUKKyAgICAgKiBsYW5ndWFnZSBpbiB0aGlzIDxjb2RlPkxvY2FsZUJ1aWxkZXI8L2NvZGU+
IGlzIHJlbW92ZWQuIE90aGVyd2lzZSwgdGhlCisgICAgICogPGNvZGU+bGFuZ3VhZ2U8L2NvZGU+
IG11c3QgYmUgd2VsbC1mb3JtZWQsIG9yIGVsc2UgdGhlIGJ1aWxkKCkgbWV0aG9kIHdpbGwKKyAg
ICAgKiBsYXRlciByZXBvcnQgYW4gVV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SLgorICAgICAqCisg
ICAgICogPHA+VGhlIHN5bnRheCBvZiBsYW5ndWFnZSB2YWx1ZSBpcyBkZWZpbmVkIGFzCisgICAg
ICogW3VuaWNvZGVfbGFuZ3VhZ2Vfc3VidGFnXShodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9y
dHMvdHIzNS90cjM1Lmh0bWwjdW5pY29kZV9sYW5ndWFnZV9zdWJ0YWcpLgorICAgICAqCisgICAg
ICogQHBhcmFtIGxhbmd1YWdlIHRoZSBsYW5ndWFnZQorICAgICAqIEByZXR1cm4gVGhpcyBidWls
ZGVyLgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBMb2NhbGVCdWlsZGVyJiBz
ZXRMYW5ndWFnZShTdHJpbmdQaWVjZSBsYW5ndWFnZSk7CisKKyAgICAvKioKKyAgICAgKiBTZXRz
IHRoZSBzY3JpcHQuIElmIDxjb2RlPnNjcmlwdDwvY29kZT4gaXMgdGhlIGVtcHR5IHN0cmluZywg
dGhlIHNjcmlwdCBpbgorICAgICAqIHRoaXMgPGNvZGU+TG9jYWxlQnVpbGRlcjwvY29kZT4gaXMg
cmVtb3ZlZC4KKyAgICAgKiBPdGhlcndpc2UsIHRoZSA8Y29kZT5zY3JpcHQ8L2NvZGU+IG11c3Qg
YmUgd2VsbC1mb3JtZWQsIG9yIGVsc2UgdGhlIGJ1aWxkKCkKKyAgICAgKiBtZXRob2Qgd2lsbCBs
YXRlciByZXBvcnQgYW4gVV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SLgorICAgICAqCisgICAgICog
PHA+VGhlIHNjcmlwdCB2YWx1ZSBpcyBhIGZvdXItbGV0dGVyIHNjcmlwdCBjb2RlIGFzCisgICAg
ICogW3VuaWNvZGVfc2NyaXB0X3N1YnRhZ10oaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRz
L3RyMzUvdHIzNS5odG1sI3VuaWNvZGVfc2NyaXB0X3N1YnRhZykKKyAgICAgKiBkZWZpbmVkIGJ5
IElTTyAxNTkyNAorICAgICAqCisgICAgICogQHBhcmFtIHNjcmlwdCB0aGUgc2NyaXB0CisgICAg
ICogQHJldHVybiBUaGlzIGJ1aWxkZXIuCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLwor
ICAgIExvY2FsZUJ1aWxkZXImIHNldFNjcmlwdChTdHJpbmdQaWVjZSBzY3JpcHQpOworCisgICAg
LyoqCisgICAgICogU2V0cyB0aGUgcmVnaW9uLiAgSWYgcmVnaW9uIGlzIHRoZSBlbXB0eSBzdHJp
bmcsIHRoZSByZWdpb24gaW4gdGhpcworICAgICAqIDxjb2RlPkxvY2FsZUJ1aWxkZXI8L2NvZGU+
IGlzIHJlbW92ZWQuIE90aGVyd2lzZSwgdGhlIDxjb2RlPnJlZ2lvbjwvY29kZT4KKyAgICAgKiBt
dXN0IGJlIHdlbGwtZm9ybWVkLCBvciBlbHNlIHRoZSBidWlsZCgpIG1ldGhvZCB3aWxsIGxhdGVy
IHJlcG9ydCBhbgorICAgICAqIFVfSUxMRUdBTF9BUkdVTUVOVF9FUlJPUi4KKyAgICAgKgorICAg
ICAqIDxwPlRoZSByZWdpb24gdmFsdWUgaXMgZGVmaW5lZCBieQorICAgICAqICBbdW5pY29kZV9y
ZWdpb25fc3VidGFnXShodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1Lmh0
bWwjdW5pY29kZV9yZWdpb25fc3VidGFnKQorICAgICAqIGFzIGEgdHdvLWxldHRlciBJU08gMzE2
NiBjb2RlIG9yIGEgdGhyZWUtZGlnaXQgVU4gTS40OSBhcmVhIGNvZGUuCisgICAgICoKKyAgICAg
KiA8cD5UaGUgcmVnaW9uIHZhbHVlIGluIHRoZSA8Y29kZT5Mb2NhbGU8L2NvZGU+IGNyZWF0ZWQg
YnkgdGhlCisgICAgICogPGNvZGU+TG9jYWxlQnVpbGRlcjwvY29kZT4gaXMgYWx3YXlzIG5vcm1h
bGl6ZWQgdG8gdXBwZXIgY2FzZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSByZWdpb24gdGhlIHJl
Z2lvbgorICAgICAqIEByZXR1cm4gVGhpcyBidWlsZGVyLgorICAgICAqIEBkcmFmdCBJQ1UgNjQK
KyAgICAgKi8KKyAgICBMb2NhbGVCdWlsZGVyJiBzZXRSZWdpb24oU3RyaW5nUGllY2UgcmVnaW9u
KTsKKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIHZhcmlhbnQuICBJZiB2YXJpYW50IGlzIHRo
ZSBlbXB0eSBzdHJpbmcsIHRoZSB2YXJpYW50IGluIHRoaXMKKyAgICAgKiA8Y29kZT5Mb2NhbGVC
dWlsZGVyPC9jb2RlPiBpcyByZW1vdmVkLiAgT3RoZXJ3aXNlLCB0aGUgPGNvZGU+dmFyaWFudDwv
Y29kZT4KKyAgICAgKiBtdXN0IGJlIHdlbGwtZm9ybWVkLCBvciBlbHNlIHRoZSBidWlsZCgpIG1l
dGhvZCB3aWxsIGxhdGVyIHJlcG9ydCBhbgorICAgICAqIFVfSUxMRUdBTF9BUkdVTUVOVF9FUlJP
Ui4KKyAgICAgKgorICAgICAqIDxwPjxiPk5vdGU6PC9iPiBUaGlzIG1ldGhvZCBjaGVja3MgaWYg
PGNvZGU+dmFyaWFudDwvY29kZT4KKyAgICAgKiBzYXRpc2ZpZXMgdGhlCisgICAgICogW3VuaWNv
ZGVfdmFyaWFudF9zdWJ0YWddKGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM1L3Ry
MzUuaHRtbCN1bmljb2RlX3ZhcmlhbnRfc3VidGFnKQorICAgICAqIHN5bnRheCByZXF1aXJlbWVu
dHMsIGFuZCBub3JtYWxpemVzIHRoZSB2YWx1ZSB0byBsb3dlcmNhc2UgbGV0dGVycy4gSG93ZXZl
ciwKKyAgICAgKiB0aGUgPGNvZGU+TG9jYWxlPC9jb2RlPiBjbGFzcyBkb2VzIG5vdCBpbXBvc2Ug
YW55IHN5bnRhY3RpYworICAgICAqIHJlc3RyaWN0aW9uIG9uIHZhcmlhbnQuIFRvIHNldCBhbiBp
bGwtZm9ybWVkIHZhcmlhbnQsIHVzZSBhIExvY2FsZSBjb25zdHJ1Y3Rvci4KKyAgICAgKiBJZiB0
aGVyZSBhcmUgbXVsdGlwbGUgdW5pY29kZV92YXJpYW50X3N1YnRhZywgdGhlIGNhbGxlciBtdXN0
IGNvbmNhdGVuYXRlCisgICAgICogdGhlbSB3aXRoICctJyBhcyBzZXBhcmF0b3IgKGV4OiAiZm9v
YmFyLWZpYmFyIikuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdmFyaWFudCB0aGUgdmFyaWFudAor
ICAgICAqIEByZXR1cm4gVGhpcyBidWlsZGVyLgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAg
Ki8KKyAgICBMb2NhbGVCdWlsZGVyJiBzZXRWYXJpYW50KFN0cmluZ1BpZWNlIHZhcmlhbnQpOwor
CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgZXh0ZW5zaW9uIGZvciB0aGUgZ2l2ZW4ga2V5LiBJ
ZiB0aGUgdmFsdWUgaXMgdGhlIGVtcHR5IHN0cmluZywKKyAgICAgKiB0aGUgZXh0ZW5zaW9uIGlz
IHJlbW92ZWQuICBPdGhlcndpc2UsIHRoZSA8Y29kZT5rZXk8L2NvZGU+IGFuZAorICAgICAqIDxj
b2RlPnZhbHVlPC9jb2RlPiBtdXN0IGJlIHdlbGwtZm9ybWVkLCBvciBlbHNlIHRoZSBidWlsZCgp
IG1ldGhvZCB3aWxsCisgICAgICogbGF0ZXIgcmVwb3J0IGFuIFVfSUxMRUdBTF9BUkdVTUVOVF9F
UlJPUi4KKyAgICAgKgorICAgICAqIDxwPjxiPk5vdGU6PC9iPiBUaGUga2V5ICgndScpIGlzIHVz
ZWQgZm9yIHRoZSBVbmljb2RlIGxvY2FsZSBleHRlbnNpb24uCisgICAgICogU2V0dGluZyBhIHZh
bHVlIGZvciB0aGlzIGtleSByZXBsYWNlcyBhbnkgZXhpc3RpbmcgVW5pY29kZSBsb2NhbGUga2V5
L3R5cGUKKyAgICAgKiBwYWlycyB3aXRoIHRob3NlIGRlZmluZWQgaW4gdGhlIGV4dGVuc2lvbi4K
KyAgICAgKgorICAgICAqIDxwPjxiPk5vdGU6PC9iPiBUaGUga2V5ICgneCcpIGlzIHVzZWQgZm9y
IHRoZSBwcml2YXRlIHVzZSBjb2RlLiBUbyBiZQorICAgICAqIHdlbGwtZm9ybWVkLCB0aGUgdmFs
dWUgZm9yIHRoaXMga2V5IG5lZWRzIG9ubHkgdG8gaGF2ZSBzdWJ0YWdzIG9mIG9uZSB0bworICAg
ICAqIGVpZ2h0IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLCBub3QgdHdvIHRvIGVpZ2h0IGFzIGlu
IHRoZSBnZW5lcmFsIGNhc2UuCisgICAgICoKKyAgICAgKiBAcGFyYW0ga2V5IHRoZSBleHRlbnNp
b24ga2V5CisgICAgICogQHBhcmFtIHZhbHVlIHRoZSBleHRlbnNpb24gdmFsdWUKKyAgICAgKiBA
cmV0dXJuIFRoaXMgYnVpbGRlci4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAg
TG9jYWxlQnVpbGRlciYgc2V0RXh0ZW5zaW9uKGNoYXIga2V5LCBTdHJpbmdQaWVjZSB2YWx1ZSk7
CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBVbmljb2RlIGxvY2FsZSBrZXl3b3JkIHR5cGUg
Zm9yIHRoZSBnaXZlbiBrZXkuIElmIHRoZSB0eXBlCisgICAgICogU3RyaW5nUGllY2UgaXMgY29u
c3RydWN0ZWQgd2l0aCBhIG51bGxwdHIsIHRoZSBrZXl3b3JkIGlzIHJlbW92ZWQuCisgICAgICog
SWYgdGhlIHR5cGUgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlIGtleXdvcmQgaXMgc2V0IHdpdGhv
dXQgdHlwZSBzdWJ0YWdzLgorICAgICAqIE90aGVyd2lzZSwgdGhlIGtleSBhbmQgdHlwZSBtdXN0
IGJlIHdlbGwtZm9ybWVkLCBvciBlbHNlIHRoZSBidWlsZCgpCisgICAgICogbWV0aG9kIHdpbGwg
bGF0ZXIgcmVwb3J0IGFuIFVfSUxMRUdBTF9BUkdVTUVOVF9FUlJPUi4KKyAgICAgKgorICAgICAq
IDxwPktleXMgYW5kIHR5cGVzIGFyZSBjb252ZXJ0ZWQgdG8gbG93ZXIgY2FzZS4KKyAgICAgKgor
ICAgICAqIDxwPjxiPk5vdGU8L2I+OlNldHRpbmcgdGhlICd1JyBleHRlbnNpb24gdmlhIHtAbGlu
ayAjc2V0RXh0ZW5zaW9ufQorICAgICAqIHJlcGxhY2VzIGFsbCBVbmljb2RlIGxvY2FsZSBrZXl3
b3JkcyB3aXRoIHRob3NlIGRlZmluZWQgaW4gdGhlCisgICAgICogZXh0ZW5zaW9uLgorICAgICAq
CisgICAgICogQHBhcmFtIGtleSB0aGUgVW5pY29kZSBsb2NhbGUga2V5CisgICAgICogQHBhcmFt
IHR5cGUgdGhlIFVuaWNvZGUgbG9jYWxlIHR5cGUKKyAgICAgKiBAcmV0dXJuIFRoaXMgYnVpbGRl
ci4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgTG9jYWxlQnVpbGRlciYgc2V0
VW5pY29kZUxvY2FsZUtleXdvcmQoCisgICAgICAgIFN0cmluZ1BpZWNlIGtleSwgU3RyaW5nUGll
Y2UgdHlwZSk7CisKKyAgICAvKioKKyAgICAgKiBBZGRzIGEgdW5pY29kZSBsb2NhbGUgYXR0cmli
dXRlLCBpZiBub3QgYWxyZWFkeSBwcmVzZW50LCBvdGhlcndpc2UKKyAgICAgKiBoYXMgbm8gZWZm
ZWN0LiAgVGhlIGF0dHJpYnV0ZSBtdXN0IG5vdCBiZSBlbXB0eSBzdHJpbmcgYW5kIG11c3QgYmUK
KyAgICAgKiB3ZWxsLWZvcm1lZCBvciBVX0lMTEVHQUxfQVJHVU1FTlRfRVJST1Igd2lsbCBiZSBz
ZXQgdG8gc3RhdHVzCisgICAgICogZHVyaW5nIHRoZSBidWlsZCgpIGNhbGwuCisgICAgICoKKyAg
ICAgKiBAcGFyYW0gYXR0cmlidXRlIHRoZSBhdHRyaWJ1dGUKKyAgICAgKiBAcmV0dXJuIFRoaXMg
YnVpbGRlci4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgTG9jYWxlQnVpbGRl
ciYgYWRkVW5pY29kZUxvY2FsZUF0dHJpYnV0ZShTdHJpbmdQaWVjZSBhdHRyaWJ1dGUpOworCisg
ICAgLyoqCisgICAgICogUmVtb3ZlcyBhIHVuaWNvZGUgbG9jYWxlIGF0dHJpYnV0ZSwgaWYgcHJl
c2VudCwgb3RoZXJ3aXNlIGhhcyBubworICAgICAqIGVmZmVjdC4gIFRoZSBhdHRyaWJ1dGUgbXVz
dCBub3QgYmUgZW1wdHkgc3RyaW5nIGFuZCBtdXN0IGJlIHdlbGwtZm9ybWVkCisgICAgICogb3Ig
VV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SIHdpbGwgYmUgc2V0IHRvIHN0YXR1cyBkdXJpbmcgdGhl
IGJ1aWxkKCkgY2FsbC4KKyAgICAgKgorICAgICAqIDxwPkF0dHJpYnV0ZSBjb21wYXJpc29uIGZv
ciByZW1vdmFsIGlzIGNhc2UtaW5zZW5zaXRpdmUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYXR0
cmlidXRlIHRoZSBhdHRyaWJ1dGUKKyAgICAgKiBAcmV0dXJuIFRoaXMgYnVpbGRlci4KKyAgICAg
KiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgTG9jYWxlQnVpbGRlciYgcmVtb3ZlVW5pY29k
ZUxvY2FsZUF0dHJpYnV0ZShTdHJpbmdQaWVjZSBhdHRyaWJ1dGUpOworCisgICAgLyoqCisgICAg
ICogUmVzZXRzIHRoZSBidWlsZGVyIHRvIGl0cyBpbml0aWFsLCBlbXB0eSBzdGF0ZS4KKyAgICAg
KiA8cD5UaGlzIG1ldGhvZCBjbGVhcnMgdGhlIGludGVybmFsIFVFcnJvckNvZGUuCisgICAgICoK
KyAgICAgKiBAcmV0dXJuIHRoaXMgYnVpbGRlcgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAg
Ki8KKyAgICBMb2NhbGVCdWlsZGVyJiBjbGVhcigpOworCisgICAgLyoqCisgICAgICogUmVzZXRz
IHRoZSBleHRlbnNpb25zIHRvIHRoZWlyIGluaXRpYWwsIGVtcHR5IHN0YXRlLgorICAgICAqIExh
bmd1YWdlLCBzY3JpcHQsIHJlZ2lvbiBhbmQgdmFyaWFudCBhcmUgdW5jaGFuZ2VkLgorICAgICAq
CisgICAgICogQHJldHVybiB0aGlzIGJ1aWxkZXIKKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAg
ICovCisgICAgTG9jYWxlQnVpbGRlciYgY2xlYXJFeHRlbnNpb25zKCk7CisKKyAgICAvKioKKyAg
ICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIDxjb2RlPkxvY2FsZTwvY29kZT4gY3JlYXRlZCBm
cm9tIHRoZSBmaWVsZHMgc2V0CisgICAgICogb24gdGhpcyBidWlsZGVyLgorICAgICAqIElmIGFu
eSBzZXQgbWV0aG9kcyBvciBkdXJpbmcgdGhlIGJ1aWxkKCkgY2FsbCByZXF1aXJlIG1lbW9yeSBh
bGxvY2F0aW9uCisgICAgICogYnV0IGZhaWwgVV9NRU1PUllfQUxMT0NBVElPTl9FUlJPUiB3aWxs
IGJlIHNldCB0byBzdGF0dXMuCisgICAgICogSWYgYW55IG9mIHRoZSBmaWVsZHMgc2V0IGJ5IHRo
ZSBzZXR0ZXJzIGFyZSBub3Qgd2VsbC1mb3JtZWQsIHRoZSBzdGF0dXMKKyAgICAgKiB3aWxsIGJl
IHNldCB0byBVX0lMTEVHQUxfQVJHVU1FTlRfRVJST1IuIFRoZSBzdGF0ZSBvZiB0aGUgYnVpbGRl
ciB3aWxsCisgICAgICogbm90IGNoYW5nZSBhZnRlciB0aGUgYnVpbGQoKSBjYWxsIGFuZCB0aGUg
Y2FsbGVyIGlzIGZyZWUgdG8ga2VlcCB1c2luZworICAgICAqIHRoZSBzYW1lIGJ1aWxkZXIgdG8g
YnVpbGQgbW9yZSBsb2NhbGVzLgorICAgICAqCisgICAgICogQHJldHVybiBhIG5ldyBMb2NhbGUK
KyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgTG9jYWxlIGJ1aWxkKFVFcnJvckNv
ZGUmIHN0YXR1cyk7CisKK3ByaXZhdGU6CisgICAgVUVycm9yQ29kZSBzdGF0dXNfOworICAgIGNo
YXIgbGFuZ3VhZ2VfWzldOworICAgIGNoYXIgc2NyaXB0X1s1XTsKKyAgICBjaGFyIHJlZ2lvbl9b
NF07CisgICAgQ2hhclN0cmluZyAqdmFyaWFudF87ICAvLyBQb2ludGVyIG5vdCBvYmplY3Qgc28g
d2UgbmVlZCBub3QgI2luY2x1ZGUgaW50ZXJuYWwgY2hhcnN0ci5oLgorICAgIGljdTo6TG9jYWxl
ICpleHRlbnNpb25zXzsgIC8vIFBvaW50ZXIgbm90IG9iamVjdC4gU3RvcmFnZSBmb3IgYWxsIG90
aGVyIGZpZWxkcy4KKworfTsKKworVV9OQU1FU1BBQ0VfRU5ECisKKyNlbmRpZiAgLy8gVV9ISURF
X0RSQUZUX0FQSQorI2VuZGlmICAvLyBfX0xPQ0FMRUJVSUxERVJfSF9fCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL2ljdS91bmljb2RlL2xvY2FscG9pbnRlci5oIGIvU291cmNlL1dURi9pY3UvdW5p
Y29kZS9sb2NhbHBvaW50ZXIuaAppbmRleCBlMTdlZTNkODg2ZWYzNGRmMDRmODkxY2ViOGUwYjdj
ZmI4OGMwNWE5Li5lMDExNjg4YjFhNTRkZjYxNjk2Yzg2OGRjODU3NTRjNjVjY2I5ZjhiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL2xvY2FscG9pbnRlci5oCisrKyBiL1NvdXJj
ZS9XVEYvaWN1L3VuaWNvZGUvbG9jYWxwb2ludGVyLmgKQEAgLTQyLDYgKzQyLDggQEAKIAogI2lm
IFVfU0hPV19DUExVU1BMVVNfQVBJCiAKKyNpbmNsdWRlIDxtZW1vcnk+CisKIFVfTkFNRVNQQUNF
X0JFR0lOCiAKIC8qKgpAQCAtNjUsNiArNjcsMTMgQEAgVV9OQU1FU1BBQ0VfQkVHSU4KIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CiBjbGFzcyBMb2NhbFBvaW50ZXJCYXNlIHsKIHB1YmxpYzoKKyAgICAv
LyBObyBoZWFwIGFsbG9jYXRpb24uIFVzZSBvbmx5IG9uIHRoZSBzdGFjay4KKyAgICBzdGF0aWMg
dm9pZCogVV9FWFBPUlQyIG9wZXJhdG9yIG5ldyhzaXplX3QpID0gZGVsZXRlOworICAgIHN0YXRp
YyB2b2lkKiBVX0VYUE9SVDIgb3BlcmF0b3IgbmV3W10oc2l6ZV90KSA9IGRlbGV0ZTsKKyNpZiBV
X0hBVkVfUExBQ0VNRU5UX05FVworICAgIHN0YXRpYyB2b2lkKiBVX0VYUE9SVDIgb3BlcmF0b3Ig
bmV3KHNpemVfdCwgdm9pZCopID0gZGVsZXRlOworI2VuZGlmCisKICAgICAvKioKICAgICAgKiBD
b25zdHJ1Y3RvciB0YWtlcyBvd25lcnNoaXAuCiAgICAgICogQHBhcmFtIHAgc2ltcGxlIHBvaW50
ZXIgdG8gYW4gb2JqZWN0IHRoYXQgaXMgYWRvcHRlZApAQCAtMTU4LDEyICsxNjcsNiBAQCBjbGFz
cyBMb2NhbFBvaW50ZXJCYXNlIHsKICAgICAvLyBObyBvd25lcnNoaXAgc2hhcmluZzogTm8gY29w
eSBjb25zdHJ1Y3Rvciwgbm8gYXNzaWdubWVudCBvcGVyYXRvci4KICAgICBMb2NhbFBvaW50ZXJC
YXNlKGNvbnN0IExvY2FsUG9pbnRlckJhc2U8VD4gJm90aGVyKTsKICAgICB2b2lkIG9wZXJhdG9y
PShjb25zdCBMb2NhbFBvaW50ZXJCYXNlPFQ+ICZvdGhlcik7Ci0gICAgLy8gTm8gaGVhcCBhbGxv
Y2F0aW9uLiBVc2Ugb25seSBvbiB0aGUgc3RhY2suCi0gICAgc3RhdGljIHZvaWQgKiBVX0VYUE9S
VDIgb3BlcmF0b3IgbmV3KHNpemVfdCBzaXplKTsKLSAgICBzdGF0aWMgdm9pZCAqIFVfRVhQT1JU
MiBvcGVyYXRvciBuZXdbXShzaXplX3Qgc2l6ZSk7Ci0jaWYgVV9IQVZFX1BMQUNFTUVOVF9ORVcK
LSAgICBzdGF0aWMgdm9pZCAqIFVfRVhQT1JUMiBvcGVyYXRvciBuZXcoc2l6ZV90LCB2b2lkICpw
dHIpOwotI2VuZGlmCiB9OwogCiAvKioKQEAgLTIyMSw2ICsyMjQsMjIgQEAgY2xhc3MgTG9jYWxQ
b2ludGVyIDogcHVibGljIExvY2FsUG9pbnRlckJhc2U8VD4gewogICAgIExvY2FsUG9pbnRlcihM
b2NhbFBvaW50ZXI8VD4gJiZzcmMpIFVfTk9FWENFUFQgOiBMb2NhbFBvaW50ZXJCYXNlPFQ+KHNy
Yy5wdHIpIHsKICAgICAgICAgc3JjLnB0cj1OVUxMOwogICAgIH0KKworI2lmbmRlZiBVX0hJREVf
RFJBRlRfQVBJCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIExvY2FsUG9pbnRlciBmcm9t
IGEgQysrMTEgc3RkOjp1bmlxdWVfcHRyLgorICAgICAqIFRoZSBMb2NhbFBvaW50ZXIgc3RlYWxz
IHRoZSBvYmplY3Qgb3duZWQgYnkgdGhlIHN0ZDo6dW5pcXVlX3B0ci4KKyAgICAgKgorICAgICAq
IFRoaXMgY29uc3RydWN0b3Igd29ya3MgdmlhIG1vdmUgc2VtYW50aWNzLiBJZiB5b3VyIHN0ZDo6
dW5pcXVlX3B0ciBpcworICAgICAqIGluIGEgbG9jYWwgdmFyaWFibGUsIHlvdSBtdXN0IHVzZSBz
dGQ6Om1vdmUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcCBUaGUgc3RkOjp1bmlxdWVfcHRyIGZy
b20gd2hpY2ggdGhlIHBvaW50ZXIgd2lsbCBiZSBzdG9sZW4uCisgICAgICogQGRyYWZ0IElDVSA2
NAorICAgICAqLworICAgIGV4cGxpY2l0IExvY2FsUG9pbnRlcihzdGQ6OnVuaXF1ZV9wdHI8VD4g
JiZwKQorICAgICAgICA6IExvY2FsUG9pbnRlckJhc2U8VD4ocC5yZWxlYXNlKCkpIHt9CisjZW5k
aWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKwogICAgIC8qKgogICAgICAqIERlc3RydWN0b3Ig
ZGVsZXRlcyB0aGUgb2JqZWN0IGl0IG93bnMuCiAgICAgICogQHN0YWJsZSBJQ1UgNC40CkBAIC0y
MzYsMjQgKzI1NSwyNyBAQCBjbGFzcyBMb2NhbFBvaW50ZXIgOiBwdWJsaWMgTG9jYWxQb2ludGVy
QmFzZTxUPiB7CiAgICAgICogQHN0YWJsZSBJQ1UgNTYKICAgICAgKi8KICAgICBMb2NhbFBvaW50
ZXI8VD4gJm9wZXJhdG9yPShMb2NhbFBvaW50ZXI8VD4gJiZzcmMpIFVfTk9FWENFUFQgewotICAg
ICAgICByZXR1cm4gbW92ZUZyb20oc3JjKTsKKyAgICAgICAgZGVsZXRlIExvY2FsUG9pbnRlckJh
c2U8VD46OnB0cjsKKyAgICAgICAgTG9jYWxQb2ludGVyQmFzZTxUPjo6cHRyPXNyYy5wdHI7Cisg
ICAgICAgIHNyYy5wdHI9TlVMTDsKKyAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KLSAgICAv
LyBkbyBub3QgdXNlICNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSSBmb3IgbW92ZUZyb20sIG5lZWRl
ZCBieSBub24tZHJhZnQgQVBJCisKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQogICAgIC8qKgot
ICAgICAqIE1vdmUgYXNzaWdubWVudCwgbGVhdmVzIHNyYyB3aXRoIGlzTnVsbCgpLgotICAgICAq
IFRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQgaWYgKnRoaXMgYW5kIHNyYyBhcmUgdGhlIHNhbWUg
b2JqZWN0LgorICAgICAqIE1vdmUtYXNzaWduIGZyb20gYW4gc3RkOjp1bmlxdWVfcHRyIHRvIHRo
aXMgTG9jYWxQb2ludGVyLgorICAgICAqIFN0ZWFscyB0aGUgcG9pbnRlciBmcm9tIHRoZSBzdGQ6
OnVuaXF1ZV9wdHIuCiAgICAgICoKLSAgICAgKiBDYW4gYmUgY2FsbGVkIGV4cGxpY2l0bHksIGRv
ZXMgbm90IG5lZWQgQysrMTEgc3VwcG9ydC4KLSAgICAgKiBAcGFyYW0gc3JjIHNvdXJjZSBzbWFy
dCBwb2ludGVyCisgICAgICogQHBhcmFtIHAgVGhlIHN0ZDo6dW5pcXVlX3B0ciBmcm9tIHdoaWNo
IHRoZSBwb2ludGVyIHdpbGwgYmUgc3RvbGVuLgogICAgICAqIEByZXR1cm4gKnRoaXMKLSAgICAg
KiBAZHJhZnQgSUNVIDU2CisgICAgICogQGRyYWZ0IElDVSA2NAogICAgICAqLwotICAgIExvY2Fs
UG9pbnRlcjxUPiAmbW92ZUZyb20oTG9jYWxQb2ludGVyPFQ+ICZzcmMpIFVfTk9FWENFUFQgewot
ICAgICAgICBkZWxldGUgTG9jYWxQb2ludGVyQmFzZTxUPjo6cHRyOwotICAgICAgICBMb2NhbFBv
aW50ZXJCYXNlPFQ+OjpwdHI9c3JjLnB0cjsKLSAgICAgICAgc3JjLnB0cj1OVUxMOworICAgIExv
Y2FsUG9pbnRlcjxUPiAmb3BlcmF0b3I9KHN0ZDo6dW5pcXVlX3B0cjxUPiAmJnApIFVfTk9FWENF
UFQgeworICAgICAgICBhZG9wdEluc3RlYWQocC5yZWxlYXNlKCkpOwogICAgICAgICByZXR1cm4g
KnRoaXM7CiAgICAgfQorI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKICAgICAvKioK
ICAgICAgKiBTd2FwIHBvaW50ZXJzLgogICAgICAqIEBwYXJhbSBvdGhlciBvdGhlciBzbWFydCBw
b2ludGVyCkBAIC0zMDksNiArMzMxLDIzIEBAIGNsYXNzIExvY2FsUG9pbnRlciA6IHB1YmxpYyBM
b2NhbFBvaW50ZXJCYXNlPFQ+IHsKICAgICAgICAgICAgIGRlbGV0ZSBwOwogICAgICAgICB9CiAg
ICAgfQorCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKyAgICAvKioKKyAgICAgKiBDb252ZXJz
aW9uIG9wZXJhdG9yIHRvIGEgQysrMTEgc3RkOjp1bmlxdWVfcHRyLgorICAgICAqIERpc293bnMg
dGhlIG9iamVjdCBhbmQgZ2l2ZXMgaXQgdG8gdGhlIHJldHVybmVkIHN0ZDo6dW5pcXVlX3B0ci4K
KyAgICAgKgorICAgICAqIFRoaXMgb3BlcmF0b3Igd29ya3MgdmlhIG1vdmUgc2VtYW50aWNzLiBJ
ZiB5b3VyIExvY2FsUG9pbnRlciBpcworICAgICAqIGluIGEgbG9jYWwgdmFyaWFibGUsIHlvdSBt
dXN0IHVzZSBzdGQ6Om1vdmUuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIEFuIHN0ZDo6dW5pcXVl
X3B0ciBvd25pbmcgdGhlIHBvaW50ZXIgcHJldmlvdXNseSBvd25lZCBieSB0aGlzCisgICAgICog
ICAgICAgICBpY3U6OkxvY2FsUG9pbnRlci4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICov
CisgICAgb3BlcmF0b3Igc3RkOjp1bmlxdWVfcHRyPFQ+ICgpICYmIHsKKyAgICAgICAgcmV0dXJu
IHN0ZDo6dW5pcXVlX3B0cjxUPihMb2NhbFBvaW50ZXJCYXNlPFQ+OjpvcnBoYW4oKSk7CisgICAg
fQorI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCiB9OwogCiAvKioKQEAgLTM2Niw2ICs0
MDUsMjIgQEAgY2xhc3MgTG9jYWxBcnJheSA6IHB1YmxpYyBMb2NhbFBvaW50ZXJCYXNlPFQ+IHsK
ICAgICBMb2NhbEFycmF5KExvY2FsQXJyYXk8VD4gJiZzcmMpIFVfTk9FWENFUFQgOiBMb2NhbFBv
aW50ZXJCYXNlPFQ+KHNyYy5wdHIpIHsKICAgICAgICAgc3JjLnB0cj1OVUxMOwogICAgIH0KKwor
I2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIExv
Y2FsQXJyYXkgZnJvbSBhIEMrKzExIHN0ZDo6dW5pcXVlX3B0ciBvZiBhbiBhcnJheSB0eXBlLgor
ICAgICAqIFRoZSBMb2NhbFBvaW50ZXIgc3RlYWxzIHRoZSBhcnJheSBvd25lZCBieSB0aGUgc3Rk
Ojp1bmlxdWVfcHRyLgorICAgICAqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciB3b3JrcyB2aWEg
bW92ZSBzZW1hbnRpY3MuIElmIHlvdXIgc3RkOjp1bmlxdWVfcHRyIGlzCisgICAgICogaW4gYSBs
b2NhbCB2YXJpYWJsZSwgeW91IG11c3QgdXNlIHN0ZDo6bW92ZS4KKyAgICAgKgorICAgICAqIEBw
YXJhbSBwIFRoZSBzdGQ6OnVuaXF1ZV9wdHIgZnJvbSB3aGljaCB0aGUgYXJyYXkgd2lsbCBiZSBz
dG9sZW4uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIGV4cGxpY2l0IExvY2Fs
QXJyYXkoc3RkOjp1bmlxdWVfcHRyPFRbXT4gJiZwKQorICAgICAgICA6IExvY2FsUG9pbnRlckJh
c2U8VD4ocC5yZWxlYXNlKCkpIHt9CisjZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKwog
ICAgIC8qKgogICAgICAqIERlc3RydWN0b3IgZGVsZXRlcyB0aGUgYXJyYXkgaXQgb3ducy4KICAg
ICAgKiBAc3RhYmxlIElDVSA0LjQKQEAgLTM4MSwyNCArNDM2LDI3IEBAIGNsYXNzIExvY2FsQXJy
YXkgOiBwdWJsaWMgTG9jYWxQb2ludGVyQmFzZTxUPiB7CiAgICAgICogQHN0YWJsZSBJQ1UgNTYK
ICAgICAgKi8KICAgICBMb2NhbEFycmF5PFQ+ICZvcGVyYXRvcj0oTG9jYWxBcnJheTxUPiAmJnNy
YykgVV9OT0VYQ0VQVCB7Ci0gICAgICAgIHJldHVybiBtb3ZlRnJvbShzcmMpOworICAgICAgICBk
ZWxldGVbXSBMb2NhbFBvaW50ZXJCYXNlPFQ+OjpwdHI7CisgICAgICAgIExvY2FsUG9pbnRlckJh
c2U8VD46OnB0cj1zcmMucHRyOworICAgICAgICBzcmMucHRyPU5VTEw7CisgICAgICAgIHJldHVy
biAqdGhpczsKICAgICB9Ci0gICAgLy8gZG8gbm90IHVzZSAjaWZuZGVmIFVfSElERV9EUkFGVF9B
UEkgZm9yIG1vdmVGcm9tLCBuZWVkZWQgYnkgbm9uLWRyYWZ0IEFQSQorCisjaWZuZGVmIFVfSElE
RV9EUkFGVF9BUEkKICAgICAvKioKLSAgICAgKiBNb3ZlIGFzc2lnbm1lbnQsIGxlYXZlcyBzcmMg
d2l0aCBpc051bGwoKS4KLSAgICAgKiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkIGlmICp0aGlz
IGFuZCBzcmMgYXJlIHRoZSBzYW1lIG9iamVjdC4KKyAgICAgKiBNb3ZlLWFzc2lnbiBmcm9tIGFu
IHN0ZDo6dW5pcXVlX3B0ciB0byB0aGlzIExvY2FsUG9pbnRlci4KKyAgICAgKiBTdGVhbHMgdGhl
IGFycmF5IGZyb20gdGhlIHN0ZDo6dW5pcXVlX3B0ci4KICAgICAgKgotICAgICAqIENhbiBiZSBj
YWxsZWQgZXhwbGljaXRseSwgZG9lcyBub3QgbmVlZCBDKysxMSBzdXBwb3J0LgotICAgICAqIEBw
YXJhbSBzcmMgc291cmNlIHNtYXJ0IHBvaW50ZXIKKyAgICAgKiBAcGFyYW0gcCBUaGUgc3RkOjp1
bmlxdWVfcHRyIGZyb20gd2hpY2ggdGhlIGFycmF5IHdpbGwgYmUgc3RvbGVuLgogICAgICAqIEBy
ZXR1cm4gKnRoaXMKLSAgICAgKiBAZHJhZnQgSUNVIDU2CisgICAgICogQGRyYWZ0IElDVSA2NAog
ICAgICAqLwotICAgIExvY2FsQXJyYXk8VD4gJm1vdmVGcm9tKExvY2FsQXJyYXk8VD4gJnNyYykg
VV9OT0VYQ0VQVCB7Ci0gICAgICAgIGRlbGV0ZVtdIExvY2FsUG9pbnRlckJhc2U8VD46OnB0cjsK
LSAgICAgICAgTG9jYWxQb2ludGVyQmFzZTxUPjo6cHRyPXNyYy5wdHI7Ci0gICAgICAgIHNyYy5w
dHI9TlVMTDsKKyAgICBMb2NhbEFycmF5PFQ+ICZvcGVyYXRvcj0oc3RkOjp1bmlxdWVfcHRyPFRb
XT4gJiZwKSBVX05PRVhDRVBUIHsKKyAgICAgICAgYWRvcHRJbnN0ZWFkKHAucmVsZWFzZSgpKTsK
ICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KKyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQ
SSAqLworCiAgICAgLyoqCiAgICAgICogU3dhcCBwb2ludGVycy4KICAgICAgKiBAcGFyYW0gb3Ro
ZXIgb3RoZXIgc21hcnQgcG9pbnRlcgpAQCAtNDYyLDYgKzUyMCwyMyBAQCBjbGFzcyBMb2NhbEFy
cmF5IDogcHVibGljIExvY2FsUG9pbnRlckJhc2U8VD4gewogICAgICAqIEBzdGFibGUgSUNVIDQu
NAogICAgICAqLwogICAgIFQgJm9wZXJhdG9yW10ocHRyZGlmZl90IGkpIGNvbnN0IHsgcmV0dXJu
IExvY2FsUG9pbnRlckJhc2U8VD46OnB0cltpXTsgfQorCisjaWZuZGVmIFVfSElERV9EUkFGVF9B
UEkKKyAgICAvKioKKyAgICAgKiBDb252ZXJzaW9uIG9wZXJhdG9yIHRvIGEgQysrMTEgc3RkOjp1
bmlxdWVfcHRyLgorICAgICAqIERpc293bnMgdGhlIG9iamVjdCBhbmQgZ2l2ZXMgaXQgdG8gdGhl
IHJldHVybmVkIHN0ZDo6dW5pcXVlX3B0ci4KKyAgICAgKgorICAgICAqIFRoaXMgb3BlcmF0b3Ig
d29ya3MgdmlhIG1vdmUgc2VtYW50aWNzLiBJZiB5b3VyIExvY2FsUG9pbnRlciBpcworICAgICAq
IGluIGEgbG9jYWwgdmFyaWFibGUsIHlvdSBtdXN0IHVzZSBzdGQ6Om1vdmUuCisgICAgICoKKyAg
ICAgKiBAcmV0dXJuIEFuIHN0ZDo6dW5pcXVlX3B0ciBvd25pbmcgdGhlIHBvaW50ZXIgcHJldmlv
dXNseSBvd25lZCBieSB0aGlzCisgICAgICogICAgICAgICBpY3U6OkxvY2FsUG9pbnRlci4KKyAg
ICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgb3BlcmF0b3Igc3RkOjp1bmlxdWVfcHRy
PFRbXT4gKCkgJiYgeworICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFRbXT4oTG9jYWxQ
b2ludGVyQmFzZTxUPjo6b3JwaGFuKCkpOworICAgIH0KKyNlbmRpZiAgLyogVV9ISURFX0RSQUZU
X0FQSSAqLwogfTsKIAogLyoqCkBAIC00OTQsMTYgKzU2OSwyMSBAQCBjbGFzcyBMb2NhbEFycmF5
IDogcHVibGljIExvY2FsUG9pbnRlckJhc2U8VD4gewogICAgICAgICAgICAgICAgIDogTG9jYWxQ
b2ludGVyQmFzZTxUeXBlPihzcmMucHRyKSB7IFwKICAgICAgICAgICAgIHNyYy5wdHI9TlVMTDsg
XAogICAgICAgICB9IFwKKyAgICAgICAgLyogVE9ETzogQmUgYWdub3N0aWMgb2YgdGhlIGRlbGV0
ZXIgZnVuY3Rpb24gc2lnbmF0dXJlIGZyb20gdGhlIHVzZXItcHJvdmlkZWQgc3RkOjp1bmlxdWVf
cHRyPyAqLyBcCisgICAgICAgIGV4cGxpY2l0IExvY2FsUG9pbnRlckNsYXNzTmFtZShzdGQ6OnVu
aXF1ZV9wdHI8VHlwZSwgZGVjbHR5cGUoJmNsb3NlRnVuY3Rpb24pPiAmJnApIFwKKyAgICAgICAg
ICAgICAgICA6IExvY2FsUG9pbnRlckJhc2U8VHlwZT4ocC5yZWxlYXNlKCkpIHt9IFwKICAgICAg
ICAgfkxvY2FsUG9pbnRlckNsYXNzTmFtZSgpIHsgaWYgKHB0ciAhPSBOVUxMKSB7IGNsb3NlRnVu
Y3Rpb24ocHRyKTsgfSB9IFwKICAgICAgICAgTG9jYWxQb2ludGVyQ2xhc3NOYW1lICZvcGVyYXRv
cj0oTG9jYWxQb2ludGVyQ2xhc3NOYW1lICYmc3JjKSBVX05PRVhDRVBUIHsgXAotICAgICAgICAg
ICAgcmV0dXJuIG1vdmVGcm9tKHNyYyk7IFwKLSAgICAgICAgfSBcCi0gICAgICAgIExvY2FsUG9p
bnRlckNsYXNzTmFtZSAmbW92ZUZyb20oTG9jYWxQb2ludGVyQ2xhc3NOYW1lICZzcmMpIFVfTk9F
WENFUFQgeyBcCiAgICAgICAgICAgICBpZiAocHRyICE9IE5VTEwpIHsgY2xvc2VGdW5jdGlvbihw
dHIpOyB9IFwKICAgICAgICAgICAgIExvY2FsUG9pbnRlckJhc2U8VHlwZT46OnB0cj1zcmMucHRy
OyBcCiAgICAgICAgICAgICBzcmMucHRyPU5VTEw7IFwKICAgICAgICAgICAgIHJldHVybiAqdGhp
czsgXAogICAgICAgICB9IFwKKyAgICAgICAgLyogVE9ETzogQmUgYWdub3N0aWMgb2YgdGhlIGRl
bGV0ZXIgZnVuY3Rpb24gc2lnbmF0dXJlIGZyb20gdGhlIHVzZXItcHJvdmlkZWQgc3RkOjp1bmlx
dWVfcHRyPyAqLyBcCisgICAgICAgIExvY2FsUG9pbnRlckNsYXNzTmFtZSAmb3BlcmF0b3I9KHN0
ZDo6dW5pcXVlX3B0cjxUeXBlLCBkZWNsdHlwZSgmY2xvc2VGdW5jdGlvbik+ICYmcCkgeyBcCisg
ICAgICAgICAgICBhZG9wdEluc3RlYWQocC5yZWxlYXNlKCkpOyBcCisgICAgICAgICAgICByZXR1
cm4gKnRoaXM7IFwKKyAgICAgICAgfSBcCiAgICAgICAgIHZvaWQgc3dhcChMb2NhbFBvaW50ZXJD
bGFzc05hbWUgJm90aGVyKSBVX05PRVhDRVBUIHsgXAogICAgICAgICAgICAgVHlwZSAqdGVtcD1M
b2NhbFBvaW50ZXJCYXNlPFR5cGU+OjpwdHI7IFwKICAgICAgICAgICAgIExvY2FsUG9pbnRlckJh
c2U8VHlwZT46OnB0cj1vdGhlci5wdHI7IFwKQEAgLTUxNiw2ICs1OTYsOSBAQCBjbGFzcyBMb2Nh
bEFycmF5IDogcHVibGljIExvY2FsUG9pbnRlckJhc2U8VD4gewogICAgICAgICAgICAgaWYgKHB0
ciAhPSBOVUxMKSB7IGNsb3NlRnVuY3Rpb24ocHRyKTsgfSBcCiAgICAgICAgICAgICBwdHI9cDsg
XAogICAgICAgICB9IFwKKyAgICAgICAgb3BlcmF0b3Igc3RkOjp1bmlxdWVfcHRyPFR5cGUsIGRl
Y2x0eXBlKCZjbG9zZUZ1bmN0aW9uKT4gKCkgJiYgeyBcCisgICAgICAgICAgICByZXR1cm4gc3Rk
Ojp1bmlxdWVfcHRyPFR5cGUsIGRlY2x0eXBlKCZjbG9zZUZ1bmN0aW9uKT4oTG9jYWxQb2ludGVy
QmFzZTxUeXBlPjo6b3JwaGFuKCksIGNsb3NlRnVuY3Rpb24pOyBcCisgICAgICAgIH0gXAogICAg
IH0KIAogVV9OQU1FU1BBQ0VfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2ljdS91bmljb2Rl
L2xvY2RzcG5tLmggYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL2xvY2RzcG5tLmgKaW5kZXggN2Yy
Mjc4MjliNGNjMDBkNGU3YzU1NjNjZDkxYzg1MzU3MzQ0ZTM2Yy4uZjZlNzc4MzU2ZmVjZWQ4MWY4
MmE3NjBjYTA1NGUzZjZhOTFmZmE4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9pY3UvdW5pY29k
ZS9sb2Nkc3BubS5oCisrKyBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvbG9jZHNwbm0uaApAQCAt
NDksNyArNDksNyBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgTG9jYWxlRGlzcGxheU5hbWVzIDogcHVi
bGljIFVPYmplY3QgewogICAgICAqIEByZXR1cm4gYSBMb2NhbGVEaXNwbGF5TmFtZXMgaW5zdGFu
Y2UKICAgICAgKiBAc3RhYmxlIElDVSA0LjQKICAgICAgKi8KLSAgICBzdGF0aWMgTG9jYWxlRGlz
cGxheU5hbWVzKiBVX0VYUE9SVDIgY3JlYXRlSW5zdGFuY2UoY29uc3QgTG9jYWxlJiBsb2NhbGUp
OworICAgIGlubGluZSBzdGF0aWMgTG9jYWxlRGlzcGxheU5hbWVzKiBVX0VYUE9SVDIgY3JlYXRl
SW5zdGFuY2UoY29uc3QgTG9jYWxlJiBsb2NhbGUpOwogCiAgICAgLyoqCiAgICAgICogUmV0dXJu
cyBhbiBpbnN0YW5jZSBvZiBMb2NhbGVEaXNwbGF5TmFtZXMgdGhhdCByZXR1cm5zIG5hbWVzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL2xvY2lkLmggYi9Tb3VyY2UvV1RGL2lj
dS91bmljb2RlL2xvY2lkLmgKaW5kZXggOWNjZjQ3MTVhZmZmYjdmNGE4YzZhZjAyYTg1ZWMzNzAw
MzkwMmJhNi4uN2U0MTBlNTNjNzQxNGQ0OTA1YTE1NjZlYTQxOWNiZWEzY2Q5Mjg3ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi9pY3UvdW5pY29kZS9sb2NpZC5oCisrKyBiL1NvdXJjZS9XVEYvaWN1
L3VuaWNvZGUvbG9jaWQuaApAQCAtMzEsNiArMzEsMTAgQEAKICNpZm5kZWYgTE9DSURfSAogI2Rl
ZmluZSBMT0NJRF9ICiAKKyNpbmNsdWRlICJ1bmljb2RlL2J5dGVzdHJlYW0uaCIKKyNpbmNsdWRl
ICJ1bmljb2RlL2xvY2FscG9pbnRlci5oIgorI2luY2x1ZGUgInVuaWNvZGUvc3RyZW51bS5oIgor
I2luY2x1ZGUgInVuaWNvZGUvc3RyaW5ncGllY2UuaCIKICNpbmNsdWRlICJ1bmljb2RlL3V0eXBl
cy5oIgogI2luY2x1ZGUgInVuaWNvZGUvdW9iamVjdC5oIgogI2luY2x1ZGUgInVuaWNvZGUvcHV0
aWwuaCIKQEAgLTI4MCw2ICsyODQsMTYgQEAgY2xhc3MgVV9DT01NT05fQVBJIExvY2FsZSA6IHB1
YmxpYyBVT2JqZWN0IHsKICAgICAgKi8KICAgICBMb2NhbGUoY29uc3QgICAgTG9jYWxlJiBvdGhl
cik7CiAKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQorICAgIC8qKgorICAgICAqIE1vdmUgY29u
c3RydWN0b3I7IG1pZ2h0IGxlYXZlIHNvdXJjZSBpbiBib2d1cyBzdGF0ZS4KKyAgICAgKiBUaGlz
IGxvY2FsZSB3aWxsIGhhdmUgdGhlIHNhbWUgY29udGVudHMgdGhhdCB0aGUgc291cmNlIGxvY2Fs
ZSBoYWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gb3RoZXIgVGhlIExvY2FsZSBvYmplY3QgYmVp
bmcgbW92ZWQgaW4uCisgICAgICogQGRyYWZ0IElDVSA2MworICAgICAqLworICAgIExvY2FsZShM
b2NhbGUmJiBvdGhlcikgVV9OT0VYQ0VQVDsKKyNlbmRpZiAgLy8gVV9ISURFX0RSQUZUX0FQSQog
CiAgICAgLyoqCiAgICAgICogRGVzdHJ1Y3RvcgpAQCAtMjk2LDYgKzMxMCwxOSBAQCBjbGFzcyBV
X0NPTU1PTl9BUEkgTG9jYWxlIDogcHVibGljIFVPYmplY3QgewogICAgICAqLwogICAgIExvY2Fs
ZSYgb3BlcmF0b3I9KGNvbnN0IExvY2FsZSYgb3RoZXIpOwogCisjaWZuZGVmIFVfSElERV9EUkFG
VF9BUEkKKyAgICAvKioKKyAgICAgKiBNb3ZlIGFzc2lnbm1lbnQgb3BlcmF0b3I7IG1pZ2h0IGxl
YXZlIHNvdXJjZSBpbiBib2d1cyBzdGF0ZS4KKyAgICAgKiBUaGlzIGxvY2FsZSB3aWxsIGhhdmUg
dGhlIHNhbWUgY29udGVudHMgdGhhdCB0aGUgc291cmNlIGxvY2FsZSBoYWQuCisgICAgICogVGhl
IGJlaGF2aW9yIGlzIHVuZGVmaW5lZCBpZiAqdGhpcyBhbmQgdGhlIHNvdXJjZSBhcmUgdGhlIHNh
bWUgb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtIG90aGVyIFRoZSBMb2NhbGUgb2JqZWN0
IGJlaW5nIG1vdmVkIGluLgorICAgICAqIEByZXR1cm4gICAgICAqdGhpcworICAgICAqIEBkcmFm
dCBJQ1UgNjMKKyAgICAgKi8KKyAgICBMb2NhbGUmIG9wZXJhdG9yPShMb2NhbGUmJiBvdGhlcikg
VV9OT0VYQ0VQVDsKKyNlbmRpZiAgLy8gVV9ISURFX0RSQUZUX0FQSQorCiAgICAgLyoqCiAgICAg
ICogQ2hlY2tzIGlmIHR3byBsb2NhbGUga2V5cyBhcmUgdGhlIHNhbWUuCiAgICAgICoKQEAgLTMx
Myw3ICszNDAsNyBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgTG9jYWxlIDogcHVibGljIFVPYmplY3Qg
ewogICAgICAqICAgICAgICAgICAgICBvdGhlcndpc2UuCiAgICAgICogQHN0YWJsZSBJQ1UgMi4w
CiAgICAgICovCi0gICAgVUJvb2wgICBvcGVyYXRvciE9KGNvbnN0ICAgIExvY2FsZSYgICAgIG90
aGVyKSBjb25zdDsKKyAgICBpbmxpbmUgVUJvb2wgICBvcGVyYXRvciE9KGNvbnN0ICAgIExvY2Fs
ZSYgICAgIG90aGVyKSBjb25zdDsKIAogICAgIC8qKgogICAgICAqIENsb25lIHRoaXMgb2JqZWN0
LgpAQCAtMzYyLDYgKzM4OSw1NSBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgTG9jYWxlIDogcHVibGlj
IFVPYmplY3QgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNv
ZGUmICAgc3VjY2Vzcyk7CiAjZW5kaWYgIC8qIFVfSElERV9TWVNURU1fQVBJICovCiAKKyNpZm5k
ZWYgVV9ISURFX0RSQUZUX0FQSQorICAgIC8qKgorICAgICAqIFJldHVybnMgYSBMb2NhbGUgZm9y
IHRoZSBzcGVjaWZpZWQgQkNQNDcgbGFuZ3VhZ2UgdGFnIHN0cmluZy4KKyAgICAgKiBJZiB0aGUg
c3BlY2lmaWVkIGxhbmd1YWdlIHRhZyBjb250YWlucyBhbnkgaWxsLWZvcm1lZCBzdWJ0YWdzLAor
ICAgICAqIHRoZSBmaXJzdCBzdWNoIHN1YnRhZyBhbmQgYWxsIGZvbGxvd2luZyBzdWJ0YWdzIGFy
ZSBpZ25vcmVkLgorICAgICAqIDxwPgorICAgICAqIFRoaXMgaW1wbGVtZW50cyB0aGUgJ0xhbmd1
YWdlLVRhZycgcHJvZHVjdGlvbiBvZiBCQ1A0NywgYW5kIHNvCisgICAgICogc3VwcG9ydHMgZ3Jh
bmRmYXRoZXJlZCAocmVndWxhciBhbmQgaXJyZWd1bGFyKSBhcyB3ZWxsIGFzIHByaXZhdGUKKyAg
ICAgKiB1c2UgbGFuZ3VhZ2UgdGFncy4gIFByaXZhdGUgdXNlIHRhZ3MgYXJlIHJlcHJlc2VudGVk
IGFzICd4LXdoYXRldmVyJywKKyAgICAgKiBhbmQgZ3JhbmRmYXRoZXJlZCB0YWdzIGFyZSBjb252
ZXJ0ZWQgdG8gdGhlaXIgY2Fub25pY2FsIHJlcGxhY2VtZW50cworICAgICAqIHdoZXJlIHRoZXkg
ZXhpc3QuICBOb3RlIHRoYXQgYSBmZXcgZ3JhbmRmYXRoZXJlZCB0YWdzIGhhdmUgbm8gbW9kZXJu
CisgICAgICogcmVwbGFjZW1lbnQsIHRoZXNlIHdpbGwgYmUgY29udmVydGVkIHVzaW5nIHRoZSBm
YWxsYmFjayBkZXNjcmliZWQgaW4KKyAgICAgKiB0aGUgZmlyc3QgcGFyYWdyYXBoLCBzbyBzb21l
IGluZm9ybWF0aW9uIG1pZ2h0IGJlIGxvc3QuCisgICAgICogQHBhcmFtIHRhZyAgICAgdGhlIGlu
cHV0IEJDUDQ3IGxhbmd1YWdlIHRhZy4KKyAgICAgKiBAcGFyYW0gc3RhdHVzICBlcnJvciBpbmZv
cm1hdGlvbiBpZiBjcmVhdGluZyB0aGUgTG9jYWxlIGZhaWxlZC4KKyAgICAgKiBAcmV0dXJuICAg
ICAgICB0aGUgTG9jYWxlIGZvciB0aGUgc3BlY2lmaWVkIEJDUDQ3IGxhbmd1YWdlIHRhZy4KKyAg
ICAgKiBAZHJhZnQgSUNVIDYzCisgICAgICovCisgICAgc3RhdGljIExvY2FsZSBVX0VYUE9SVDIg
Zm9yTGFuZ3VhZ2VUYWcoU3RyaW5nUGllY2UgdGFnLCBVRXJyb3JDb2RlJiBzdGF0dXMpOworCisg
ICAgLyoqCisgICAgICogUmV0dXJucyBhIHdlbGwtZm9ybWVkIGxhbmd1YWdlIHRhZyBmb3IgdGhp
cyBMb2NhbGUuCisgICAgICogPHA+CisgICAgICogPGI+Tm90ZTwvYj46IEFueSBsb2NhbGUgZmll
bGRzIHdoaWNoIGRvIG5vdCBzYXRpc2Z5IHRoZSBCQ1A0NyBzeW50YXgKKyAgICAgKiByZXF1aXJl
bWVudCB3aWxsIGJlIHNpbGVudGx5IG9taXR0ZWQgZnJvbSB0aGUgcmVzdWx0LgorICAgICAqCisg
ICAgICogSWYgdGhpcyBmdW5jdGlvbiBmYWlscywgcGFydGlhbCBvdXRwdXQgbWF5IGhhdmUgYmVl
biB3cml0dGVuIHRvIHRoZSBzaW5rLgorICAgICAqCisgICAgICogQHBhcmFtIHNpbmsgICAgdGhl
IG91dHB1dCBzaW5rIHJlY2VpdmluZyB0aGUgQkNQNDcgbGFuZ3VhZ2UKKyAgICAgKiAgICAgICAg
ICAgICAgICB0YWcgZm9yIHRoaXMgTG9jYWxlLgorICAgICAqIEBwYXJhbSBzdGF0dXMgIGVycm9y
IGluZm9ybWF0aW9uIGlmIGNyZWF0aW5nIHRoZSBsYW5ndWFnZSB0YWcgZmFpbGVkLgorICAgICAq
IEBkcmFmdCBJQ1UgNjMKKyAgICAgKi8KKyAgICB2b2lkIHRvTGFuZ3VhZ2VUYWcoQnl0ZVNpbmsm
IHNpbmssIFVFcnJvckNvZGUmIHN0YXR1cykgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBSZXR1
cm5zIGEgd2VsbC1mb3JtZWQgbGFuZ3VhZ2UgdGFnIGZvciB0aGlzIExvY2FsZS4KKyAgICAgKiA8
cD4KKyAgICAgKiA8Yj5Ob3RlPC9iPjogQW55IGxvY2FsZSBmaWVsZHMgd2hpY2ggZG8gbm90IHNh
dGlzZnkgdGhlIEJDUDQ3IHN5bnRheAorICAgICAqIHJlcXVpcmVtZW50IHdpbGwgYmUgc2lsZW50
bHkgb21pdHRlZCBmcm9tIHRoZSByZXN1bHQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gc3RhdHVz
ICBlcnJvciBpbmZvcm1hdGlvbiBpZiBjcmVhdGluZyB0aGUgbGFuZ3VhZ2UgdGFnIGZhaWxlZC4K
KyAgICAgKiBAcmV0dXJuICAgICAgICB0aGUgQkNQNDcgbGFuZ3VhZ2UgdGFnIGZvciB0aGlzIExv
Y2FsZS4KKyAgICAgKiBAZHJhZnQgSUNVIDYzCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgU3RyaW5nQ2xhc3M+CisgICAgaW5saW5lIFN0cmluZ0NsYXNzIHRvTGFuZ3VhZ2VUYWcoVUVy
cm9yQ29kZSYgc3RhdHVzKSBjb25zdDsKKyNlbmRpZiAgLy8gVV9ISURFX0RSQUZUX0FQSQorCiAg
ICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIGxvY2FsZSB3aGljaCBoYXMgaGFkIG1pbmltYWwgY2Fu
b25pY2FsaXphdGlvbgogICAgICAqIGFzIHBlciB1bG9jX2dldE5hbWUoKS4KQEAgLTQzMiw2ICs1
MDgsNjkgQEAgY2xhc3MgVV9DT01NT05fQVBJIExvY2FsZSA6IHB1YmxpYyBVT2JqZWN0IHsKICAg
ICAgKi8KICAgICBjb25zdCBjaGFyICogZ2V0QmFzZU5hbWUoKSBjb25zdDsKIAorI2lmbmRlZiBV
X0hJREVfRFJBRlRfQVBJCisgICAgLyoqCisgICAgICogQWRkIHRoZSBsaWtlbHkgc3VidGFncyBm
b3IgdGhpcyBMb2NhbGUsIHBlciB0aGUgYWxnb3JpdGhtIGRlc2NyaWJlZAorICAgICAqIGluIHRo
ZSBmb2xsb3dpbmcgQ0xEUiB0ZWNobmljYWwgcmVwb3J0OgorICAgICAqCisgICAgICogICBodHRw
Oi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS8jTGlrZWx5X1N1YnRhZ3MKKyAgICAgKgor
ICAgICAqIElmIHRoaXMgTG9jYWxlIGlzIGFscmVhZHkgaW4gdGhlIG1heGltYWwgZm9ybSwgb3Ig
bm90IHZhbGlkLCBvciB0aGVyZSBpcworICAgICAqIG5vIGRhdGEgYXZhaWxhYmxlIGZvciBtYXhp
bWl6YXRpb24sIHRoZSBMb2NhbGUgd2lsbCBiZSB1bmNoYW5nZWQuCisgICAgICoKKyAgICAgKiBG
b3IgZXhhbXBsZSwgInVuZC1aenp6IiBjYW5ub3QgYmUgbWF4aW1pemVkLCBzaW5jZSB0aGVyZSBp
cyBubworICAgICAqIHJlYXNvbmFibGUgbWF4aW1pemF0aW9uLgorICAgICAqCisgICAgICogRXhh
bXBsZXM6CisgICAgICoKKyAgICAgKiAiZW4iIG1heGltaXplcyB0byAiZW5fTGF0bl9VUyIKKyAg
ICAgKgorICAgICAqICJkZSIgbWF4aW1pemVzIHRvICJkZV9MYXRuX1VTIgorICAgICAqCisgICAg
ICogInNyIiBtYXhpbWl6ZXMgdG8gInNyX0N5cmxfUlMiCisgICAgICoKKyAgICAgKiAic2giIG1h
eGltaXplcyB0byAic3JfTGF0bl9SUyIgKE5vdGUgdGhpcyB3aWxsIG5vdCByZXZlcnNlLikKKyAg
ICAgKgorICAgICAqICJ6aF9IYW5pIiBtYXhpbWl6ZXMgdG8gInpoX0hhbnNfQ04iIChOb3RlIHRo
aXMgd2lsbCBub3QgcmV2ZXJzZS4pCisgICAgICoKKyAgICAgKiBAcGFyYW0gc3RhdHVzICBlcnJv
ciBpbmZvcm1hdGlvbiBpZiBtYXhpbWl6aW5nIHRoaXMgTG9jYWxlIGZhaWxlZC4KKyAgICAgKiAg
ICAgICAgICAgICAgICBJZiB0aGlzIExvY2FsZSBpcyBub3Qgd2VsbC1mb3JtZWQsIHRoZSBlcnJv
ciBjb2RlIGlzCisgICAgICogICAgICAgICAgICAgICAgVV9JTExFR0FMX0FSR1VNRU5UX0VSUk9S
LgorICAgICAqIEBkcmFmdCBJQ1UgNjMKKyAgICAgKi8KKyAgICB2b2lkIGFkZExpa2VseVN1YnRh
Z3MoVUVycm9yQ29kZSYgc3RhdHVzKTsKKworICAgIC8qKgorICAgICAqIE1pbmltaXplIHRoZSBz
dWJ0YWdzIGZvciB0aGlzIExvY2FsZSwgcGVyIHRoZSBhbGdvcml0aG0gZGVzY3JpYmVkCisgICAg
ICogaW4gdGhlIGZvbGxvd2luZyBDTERSIHRlY2huaWNhbCByZXBvcnQ6CisgICAgICoKKyAgICAg
KiAgIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM1LyNMaWtlbHlfU3VidGFncwor
ICAgICAqCisgICAgICogSWYgdGhpcyBMb2NhbGUgaXMgYWxyZWFkeSBpbiB0aGUgbWluaW1hbCBm
b3JtLCBvciBub3QgdmFsaWQsIG9yIHRoZXJlIGlzCisgICAgICogbm8gZGF0YSBhdmFpbGFibGUg
Zm9yIG1pbmltaXphdGlvbiwgdGhlIExvY2FsZSB3aWxsIGJlIHVuY2hhbmdlZC4KKyAgICAgKgor
ICAgICAqIFNpbmNlIHRoZSBtaW5pbWl6YXRpb24gYWxnb3JpdGhtIHJlbGllcyBvbiBwcm9wZXIg
bWF4aW1pemF0aW9uLCBzZWUgdGhlCisgICAgICogY29tbWVudHMgZm9yIGFkZExpa2VseVN1YnRh
Z3MgZm9yIHJlYXNvbnMgd2h5IHRoZXJlIG1pZ2h0IG5vdCBiZSBhbnkKKyAgICAgKiBkYXRhLgor
ICAgICAqCisgICAgICogRXhhbXBsZXM6CisgICAgICoKKyAgICAgKiAiZW5fTGF0bl9VUyIgbWlu
aW1pemVzIHRvICJlbiIKKyAgICAgKgorICAgICAqICJkZV9MYXRuX1VTIiBtaW5pbWl6ZXMgdG8g
ImRlIgorICAgICAqCisgICAgICogInNyX0N5cmxfUlMiIG1pbmltaXplcyB0byAic3IiCisgICAg
ICoKKyAgICAgKiAiemhfSGFudF9UVyIgbWluaW1pemVzIHRvICJ6aF9UVyIgKFRoZSByZWdpb24g
aXMgcHJlZmVycmVkIHRvIHRoZQorICAgICAqIHNjcmlwdCwgYW5kIG1pbmltaXppbmcgdG8gInpo
IiB3b3VsZCBpbXBseSAiemhfSGFuc19DTiIuKQorICAgICAqCisgICAgICogQHBhcmFtIHN0YXR1
cyAgZXJyb3IgaW5mb3JtYXRpb24gaWYgbWF4aW1pemluZyB0aGlzIExvY2FsZSBmYWlsZWQuCisg
ICAgICogICAgICAgICAgICAgICAgSWYgdGhpcyBMb2NhbGUgaXMgbm90IHdlbGwtZm9ybWVkLCB0
aGUgZXJyb3IgY29kZSBpcworICAgICAqICAgICAgICAgICAgICAgIFVfSUxMRUdBTF9BUkdVTUVO
VF9FUlJPUi4KKyAgICAgKiBAZHJhZnQgSUNVIDYzCisgICAgICovCisgICAgdm9pZCBtaW5pbWl6
ZVN1YnRhZ3MoVUVycm9yQ29kZSYgc3RhdHVzKTsKKyNlbmRpZiAgLy8gVV9ISURFX0RSQUZUX0FQ
SQogCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbGlzdCBvZiBrZXl3b3JkcyBmb3IgdGhlIHNw
ZWNpZmllZCBsb2NhbGUuCkBAIC00MzksMTMgKzU3OCw2MiBAQCBjbGFzcyBVX0NPTU1PTl9BUEkg
TG9jYWxlIDogcHVibGljIFVPYmplY3QgewogICAgICAqIEBwYXJhbSBzdGF0dXMgdGhlIHN0YXR1
cyBjb2RlCiAgICAgICogQHJldHVybiBwb2ludGVyIHRvIFN0cmluZ0VudW1lcmF0aW9uIGNsYXNz
LCBvciBOVUxMIGlmIHRoZXJlIGFyZSBubyBrZXl3b3Jkcy4gCiAgICAgICogQ2xpZW50IG11c3Qg
ZGlzcG9zZSBvZiBpdCBieSBjYWxsaW5nIGRlbGV0ZS4KKyAgICAgKiBAc2VlIGdldEtleXdvcmRz
CiAgICAgICogQHN0YWJsZSBJQ1UgMi44CiAgICAgICovCiAgICAgU3RyaW5nRW51bWVyYXRpb24g
KiBjcmVhdGVLZXl3b3JkcyhVRXJyb3JDb2RlICZzdGF0dXMpIGNvbnN0OwogCisjaWZuZGVmIFVf
SElERV9EUkFGVF9BUEkKKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGxpc3Qgb2YgVW5pY29k
ZSBrZXl3b3JkcyBmb3IgdGhlIHNwZWNpZmllZCBsb2NhbGUuCisgICAgICoKKyAgICAgKiBAcGFy
YW0gc3RhdHVzIHRoZSBzdGF0dXMgY29kZQorICAgICAqIEByZXR1cm4gcG9pbnRlciB0byBTdHJp
bmdFbnVtZXJhdGlvbiBjbGFzcywgb3IgTlVMTCBpZiB0aGVyZSBhcmUgbm8ga2V5d29yZHMuCisg
ICAgICogQ2xpZW50IG11c3QgZGlzcG9zZSBvZiBpdCBieSBjYWxsaW5nIGRlbGV0ZS4KKyAgICAg
KiBAc2VlIGdldFVuaWNvZGVLZXl3b3JkcworICAgICAqIEBkcmFmdCBJQ1UgNjMKKyAgICAgKi8K
KyAgICBTdHJpbmdFbnVtZXJhdGlvbiAqIGNyZWF0ZVVuaWNvZGVLZXl3b3JkcyhVRXJyb3JDb2Rl
ICZzdGF0dXMpIGNvbnN0OworCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgc2V0IG9mIGtleXdv
cmRzIGZvciB0aGlzIExvY2FsZS4KKyAgICAgKgorICAgICAqIEEgd3JhcHBlciB0byBjYWxsIGNy
ZWF0ZUtleXdvcmRzKCkgYW5kIHdyaXRlIHRoZSByZXN1bHRpbmcKKyAgICAgKiBrZXl3b3JkcyBh
cyBzdGFuZGFyZCBzdHJpbmdzIChvciBjb21wYXRpYmxlIG9iamVjdHMpIGludG8gYW55IGtpbmQg
b2YKKyAgICAgKiBjb250YWluZXIgdGhhdCBjYW4gYmUgd3JpdHRlbiB0byBieSBhbiBTVEwgc3R5
bGUgb3V0cHV0IGl0ZXJhdG9yLgorICAgICAqCisgICAgICogQHBhcmFtIGl0ZXJhdG9yICBhbiBT
VEwgc3R5bGUgb3V0cHV0IGl0ZXJhdG9yIHRvIHdyaXRlIHRoZSBrZXl3b3JkcyB0by4KKyAgICAg
KiBAcGFyYW0gc3RhdHVzICAgIGVycm9yIGluZm9ybWF0aW9uIGlmIGNyZWF0aW5nIHNldCBvZiBr
ZXl3b3JkcyBmYWlsZWQuCisgICAgICogQGRyYWZ0IElDVSA2MworICAgICAqLworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFN0cmluZ0NsYXNzLCB0eXBlbmFtZSBPdXRwdXRJdGVyYXRvcj4KKyAgICBp
bmxpbmUgdm9pZCBnZXRLZXl3b3JkcyhPdXRwdXRJdGVyYXRvciBpdGVyYXRvciwgVUVycm9yQ29k
ZSYgc3RhdHVzKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIHNldCBvZiBVbmlj
b2RlIGtleXdvcmRzIGZvciB0aGlzIExvY2FsZS4KKyAgICAgKgorICAgICAqIEEgd3JhcHBlciB0
byBjYWxsIGNyZWF0ZVVuaWNvZGVLZXl3b3JkcygpIGFuZCB3cml0ZSB0aGUgcmVzdWx0aW5nCisg
ICAgICoga2V5d29yZHMgYXMgc3RhbmRhcmQgc3RyaW5ncyAob3IgY29tcGF0aWJsZSBvYmplY3Rz
KSBpbnRvIGFueSBraW5kIG9mCisgICAgICogY29udGFpbmVyIHRoYXQgY2FuIGJlIHdyaXR0ZW4g
dG8gYnkgYW4gU1RMIHN0eWxlIG91dHB1dCBpdGVyYXRvci4KKyAgICAgKgorICAgICAqIEBwYXJh
bSBpdGVyYXRvciAgYW4gU1RMIHN0eWxlIG91dHB1dCBpdGVyYXRvciB0byB3cml0ZSB0aGUga2V5
d29yZHMgdG8uCisgICAgICogQHBhcmFtIHN0YXR1cyAgICBlcnJvciBpbmZvcm1hdGlvbiBpZiBj
cmVhdGluZyBzZXQgb2Yga2V5d29yZHMgZmFpbGVkLgorICAgICAqIEBkcmFmdCBJQ1UgNjMKKyAg
ICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdDbGFzcywgdHlwZW5hbWUgT3V0cHV0
SXRlcmF0b3I+CisgICAgaW5saW5lIHZvaWQgZ2V0VW5pY29kZUtleXdvcmRzKE91dHB1dEl0ZXJh
dG9yIGl0ZXJhdG9yLCBVRXJyb3JDb2RlJiBzdGF0dXMpIGNvbnN0OworCisjZW5kaWYgIC8vIFVf
SElERV9EUkFGVF9BUEkKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHZhbHVlIGZvciBhIGtl
eXdvcmQuCiAgICAgICoKKyAgICAgKiBUaGlzIHVzZXMgbGVnYWN5IGtleXdvcmQ9dmFsdWUgcGFp
cnMsIGxpa2UgImNvbGxhdGlvbj1waG9uZWJvb2siLgorICAgICAqCisgICAgICogSUNVNEMgZG9l
c24ndCBkbyBhdXRvbWF0aWMgY29udmVyc2lvbiBiZXR3ZWVuIGxlZ2FjeSBhbmQgVW5pY29kZQor
ICAgICAqIGtleXdvcmRzIGFuZCB2YWx1ZXMgaW4gZ2V0dGVycyBhbmQgc2V0dGVycyAoYXMgb3Bw
b3NlZCB0byBJQ1U0SikuCisgICAgICoKICAgICAgKiBAcGFyYW0ga2V5d29yZE5hbWUgbmFtZSBv
ZiB0aGUga2V5d29yZCBmb3Igd2hpY2ggd2Ugd2FudCB0aGUgdmFsdWUuIENhc2UgaW5zZW5zaXRp
dmUuCiAgICAgICogQHBhcmFtIGJ1ZmZlciBUaGUgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIGtleXdv
cmQgdmFsdWUuCiAgICAgICogQHBhcmFtIGJ1ZmZlckNhcGFjaXR5IFRoZSBjYXBhY2l0eSBvZiBy
ZWNlaXZpbmcgYnVmZmVyCkBAIC00NTYsMTIgKzY0NCw4MSBAQCBjbGFzcyBVX0NPTU1PTl9BUEkg
TG9jYWxlIDogcHVibGljIFVPYmplY3QgewogICAgICAqLwogICAgIGludDMyX3QgZ2V0S2V5d29y
ZFZhbHVlKGNvbnN0IGNoYXIqIGtleXdvcmROYW1lLCBjaGFyICpidWZmZXIsIGludDMyX3QgYnVm
ZmVyQ2FwYWNpdHksIFVFcnJvckNvZGUgJnN0YXR1cykgY29uc3Q7CiAKKyNpZm5kZWYgVV9ISURF
X0RSQUZUX0FQSQorICAgIC8qKgorICAgICAqIEdldHMgdGhlIHZhbHVlIGZvciBhIGtleXdvcmQu
CisgICAgICoKKyAgICAgKiBUaGlzIHVzZXMgbGVnYWN5IGtleXdvcmQ9dmFsdWUgcGFpcnMsIGxp
a2UgImNvbGxhdGlvbj1waG9uZWJvb2siLgorICAgICAqCisgICAgICogSUNVNEMgZG9lc24ndCBk
byBhdXRvbWF0aWMgY29udmVyc2lvbiBiZXR3ZWVuIGxlZ2FjeSBhbmQgVW5pY29kZQorICAgICAq
IGtleXdvcmRzIGFuZCB2YWx1ZXMgaW4gZ2V0dGVycyBhbmQgc2V0dGVycyAoYXMgb3Bwb3NlZCB0
byBJQ1U0SikuCisgICAgICoKKyAgICAgKiBAcGFyYW0ga2V5d29yZE5hbWUgIG5hbWUgb2YgdGhl
IGtleXdvcmQgZm9yIHdoaWNoIHdlIHdhbnQgdGhlIHZhbHVlLgorICAgICAqIEBwYXJhbSBzaW5r
ICAgICAgICAgdGhlIHNpbmsgdG8gcmVjZWl2ZSB0aGUga2V5d29yZCB2YWx1ZS4KKyAgICAgKiBA
cGFyYW0gc3RhdHVzICAgICAgIGVycm9yIGluZm9ybWF0aW9uIGlmIGdldHRpbmcgdGhlIHZhbHVl
IGZhaWxlZC4KKyAgICAgKiBAZHJhZnQgSUNVIDYzCisgICAgICovCisgICAgdm9pZCBnZXRLZXl3
b3JkVmFsdWUoU3RyaW5nUGllY2Uga2V5d29yZE5hbWUsIEJ5dGVTaW5rJiBzaW5rLCBVRXJyb3JD
b2RlJiBzdGF0dXMpIGNvbnN0OworCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgdmFsdWUgZm9y
IGEga2V5d29yZC4KKyAgICAgKgorICAgICAqIFRoaXMgdXNlcyBsZWdhY3kga2V5d29yZD12YWx1
ZSBwYWlycywgbGlrZSAiY29sbGF0aW9uPXBob25lYm9vayIuCisgICAgICoKKyAgICAgKiBJQ1U0
QyBkb2Vzbid0IGRvIGF1dG9tYXRpYyBjb252ZXJzaW9uIGJldHdlZW4gbGVnYWN5IGFuZCBVbmlj
b2RlCisgICAgICoga2V5d29yZHMgYW5kIHZhbHVlcyBpbiBnZXR0ZXJzIGFuZCBzZXR0ZXJzIChh
cyBvcHBvc2VkIHRvIElDVTRKKS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBrZXl3b3JkTmFtZSAg
bmFtZSBvZiB0aGUga2V5d29yZCBmb3Igd2hpY2ggd2Ugd2FudCB0aGUgdmFsdWUuCisgICAgICog
QHBhcmFtIHN0YXR1cyAgICAgICBlcnJvciBpbmZvcm1hdGlvbiBpZiBnZXR0aW5nIHRoZSB2YWx1
ZSBmYWlsZWQuCisgICAgICogQHJldHVybiAgICAgICAgICAgICB0aGUga2V5d29yZCB2YWx1ZS4K
KyAgICAgKiBAZHJhZnQgSUNVIDYzCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgU3Ry
aW5nQ2xhc3M+CisgICAgaW5saW5lIFN0cmluZ0NsYXNzIGdldEtleXdvcmRWYWx1ZShTdHJpbmdQ
aWVjZSBrZXl3b3JkTmFtZSwgVUVycm9yQ29kZSYgc3RhdHVzKSBjb25zdDsKKworICAgIC8qKgor
ICAgICAqIEdldHMgdGhlIFVuaWNvZGUgdmFsdWUgZm9yIGEgVW5pY29kZSBrZXl3b3JkLgorICAg
ICAqCisgICAgICogVGhpcyB1c2VzIFVuaWNvZGUga2V5LXZhbHVlIHBhaXJzLCBsaWtlICJjby1w
aG9uZWJrIi4KKyAgICAgKgorICAgICAqIElDVTRDIGRvZXNuJ3QgZG8gYXV0b21hdGljIGNvbnZl
cnNpb24gYmV0d2VlbiBsZWdhY3kgYW5kIFVuaWNvZGUKKyAgICAgKiBrZXl3b3JkcyBhbmQgdmFs
dWVzIGluIGdldHRlcnMgYW5kIHNldHRlcnMgKGFzIG9wcG9zZWQgdG8gSUNVNEopLgorICAgICAq
CisgICAgICogQHBhcmFtIGtleXdvcmROYW1lICBuYW1lIG9mIHRoZSBrZXl3b3JkIGZvciB3aGlj
aCB3ZSB3YW50IHRoZSB2YWx1ZS4KKyAgICAgKiBAcGFyYW0gc2luayAgICAgICAgIHRoZSBzaW5r
IHRvIHJlY2VpdmUgdGhlIGtleXdvcmQgdmFsdWUuCisgICAgICogQHBhcmFtIHN0YXR1cyAgICAg
ICBlcnJvciBpbmZvcm1hdGlvbiBpZiBnZXR0aW5nIHRoZSB2YWx1ZSBmYWlsZWQuCisgICAgICog
QGRyYWZ0IElDVSA2MworICAgICAqLworICAgIHZvaWQgZ2V0VW5pY29kZUtleXdvcmRWYWx1ZShT
dHJpbmdQaWVjZSBrZXl3b3JkTmFtZSwgQnl0ZVNpbmsmIHNpbmssIFVFcnJvckNvZGUmIHN0YXR1
cykgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBVbmljb2RlIHZhbHVlIGZvciBh
IFVuaWNvZGUga2V5d29yZC4KKyAgICAgKgorICAgICAqIFRoaXMgdXNlcyBVbmljb2RlIGtleS12
YWx1ZSBwYWlycywgbGlrZSAiY28tcGhvbmViayIuCisgICAgICoKKyAgICAgKiBJQ1U0QyBkb2Vz
bid0IGRvIGF1dG9tYXRpYyBjb252ZXJzaW9uIGJldHdlZW4gbGVnYWN5IGFuZCBVbmljb2RlCisg
ICAgICoga2V5d29yZHMgYW5kIHZhbHVlcyBpbiBnZXR0ZXJzIGFuZCBzZXR0ZXJzIChhcyBvcHBv
c2VkIHRvIElDVTRKKS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBrZXl3b3JkTmFtZSAgbmFtZSBv
ZiB0aGUga2V5d29yZCBmb3Igd2hpY2ggd2Ugd2FudCB0aGUgdmFsdWUuCisgICAgICogQHBhcmFt
IHN0YXR1cyAgICAgICBlcnJvciBpbmZvcm1hdGlvbiBpZiBnZXR0aW5nIHRoZSB2YWx1ZSBmYWls
ZWQuCisgICAgICogQHJldHVybiAgICAgICAgICAgICB0aGUga2V5d29yZCB2YWx1ZS4KKyAgICAg
KiBAZHJhZnQgSUNVIDYzCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nQ2xh
c3M+CisgICAgaW5saW5lIFN0cmluZ0NsYXNzIGdldFVuaWNvZGVLZXl3b3JkVmFsdWUoU3RyaW5n
UGllY2Uga2V5d29yZE5hbWUsIFVFcnJvckNvZGUmIHN0YXR1cykgY29uc3Q7CisjZW5kaWYgIC8v
IFVfSElERV9EUkFGVF9BUEkKKwogICAgIC8qKgogICAgICAqIFNldHMgb3IgcmVtb3ZlcyB0aGUg
dmFsdWUgZm9yIGEga2V5d29yZC4KICAgICAgKgogICAgICAqIEZvciByZW1vdmluZyBhbGwga2V5
d29yZHMsIHVzZSBnZXRCYXNlTmFtZSgpLAogICAgICAqIGFuZCBjb25zdHJ1Y3QgYSBuZXcgTG9j
YWxlIGlmIGl0IGRpZmZlcnMgZnJvbSBnZXROYW1lKCkuCiAgICAgICoKKyAgICAgKiBUaGlzIHVz
ZXMgbGVnYWN5IGtleXdvcmQ9dmFsdWUgcGFpcnMsIGxpa2UgImNvbGxhdGlvbj1waG9uZWJvb2si
LgorICAgICAqCisgICAgICogSUNVNEMgZG9lc24ndCBkbyBhdXRvbWF0aWMgY29udmVyc2lvbiBi
ZXR3ZWVuIGxlZ2FjeSBhbmQgVW5pY29kZQorICAgICAqIGtleXdvcmRzIGFuZCB2YWx1ZXMgaW4g
Z2V0dGVycyBhbmQgc2V0dGVycyAoYXMgb3Bwb3NlZCB0byBJQ1U0SikuCisgICAgICoKICAgICAg
KiBAcGFyYW0ga2V5d29yZE5hbWUgbmFtZSBvZiB0aGUga2V5d29yZCB0byBiZSBzZXQuIENhc2Ug
aW5zZW5zaXRpdmUuCiAgICAgICogQHBhcmFtIGtleXdvcmRWYWx1ZSB2YWx1ZSBvZiB0aGUga2V5
d29yZCB0byBiZSBzZXQuIElmIDAtbGVuZ3RoIG9yCiAgICAgICogIE5VTEwsIHdpbGwgcmVzdWx0
IGluIHRoZSBrZXl3b3JkIGJlaW5nIHJlbW92ZWQuIE5vIGVycm9yIGlzIGdpdmVuIGlmCkBAIC00
NzIsNiArNzI5LDQ4IEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBMb2NhbGUgOiBwdWJsaWMgVU9iamVj
dCB7CiAgICAgICovCiAgICAgdm9pZCBzZXRLZXl3b3JkVmFsdWUoY29uc3QgY2hhcioga2V5d29y
ZE5hbWUsIGNvbnN0IGNoYXIqIGtleXdvcmRWYWx1ZSwgVUVycm9yQ29kZSAmc3RhdHVzKTsKIAor
I2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLyoqCisgICAgICogU2V0cyBvciByZW1vdmVz
IHRoZSB2YWx1ZSBmb3IgYSBrZXl3b3JkLgorICAgICAqCisgICAgICogRm9yIHJlbW92aW5nIGFs
bCBrZXl3b3JkcywgdXNlIGdldEJhc2VOYW1lKCksCisgICAgICogYW5kIGNvbnN0cnVjdCBhIG5l
dyBMb2NhbGUgaWYgaXQgZGlmZmVycyBmcm9tIGdldE5hbWUoKS4KKyAgICAgKgorICAgICAqIFRo
aXMgdXNlcyBsZWdhY3kga2V5d29yZD12YWx1ZSBwYWlycywgbGlrZSAiY29sbGF0aW9uPXBob25l
Ym9vayIuCisgICAgICoKKyAgICAgKiBJQ1U0QyBkb2Vzbid0IGRvIGF1dG9tYXRpYyBjb252ZXJz
aW9uIGJldHdlZW4gbGVnYWN5IGFuZCBVbmljb2RlCisgICAgICoga2V5d29yZHMgYW5kIHZhbHVl
cyBpbiBnZXR0ZXJzIGFuZCBzZXR0ZXJzIChhcyBvcHBvc2VkIHRvIElDVTRKKS4KKyAgICAgKgor
ICAgICAqIEBwYXJhbSBrZXl3b3JkTmFtZSBuYW1lIG9mIHRoZSBrZXl3b3JkIHRvIGJlIHNldC4K
KyAgICAgKiBAcGFyYW0ga2V5d29yZFZhbHVlIHZhbHVlIG9mIHRoZSBrZXl3b3JkIHRvIGJlIHNl
dC4gSWYgMC1sZW5ndGggb3IKKyAgICAgKiAgTlVMTCwgd2lsbCByZXN1bHQgaW4gdGhlIGtleXdv
cmQgYmVpbmcgcmVtb3ZlZC4gTm8gZXJyb3IgaXMgZ2l2ZW4gaWYKKyAgICAgKiAgdGhhdCBrZXl3
b3JkIGRvZXMgbm90IGV4aXN0LgorICAgICAqIEBwYXJhbSBzdGF0dXMgUmV0dXJucyBhbnkgZXJy
b3IgaW5mb3JtYXRpb24gd2hpbGUgcGVyZm9ybWluZyB0aGlzIG9wZXJhdGlvbi4KKyAgICAgKiBA
ZHJhZnQgSUNVIDYzCisgICAgICovCisgICAgdm9pZCBzZXRLZXl3b3JkVmFsdWUoU3RyaW5nUGll
Y2Uga2V5d29yZE5hbWUsIFN0cmluZ1BpZWNlIGtleXdvcmRWYWx1ZSwgVUVycm9yQ29kZSYgc3Rh
dHVzKTsKKworICAgIC8qKgorICAgICAqIFNldHMgb3IgcmVtb3ZlcyB0aGUgVW5pY29kZSB2YWx1
ZSBmb3IgYSBVbmljb2RlIGtleXdvcmQuCisgICAgICoKKyAgICAgKiBGb3IgcmVtb3ZpbmcgYWxs
IGtleXdvcmRzLCB1c2UgZ2V0QmFzZU5hbWUoKSwKKyAgICAgKiBhbmQgY29uc3RydWN0IGEgbmV3
IExvY2FsZSBpZiBpdCBkaWZmZXJzIGZyb20gZ2V0TmFtZSgpLgorICAgICAqCisgICAgICogVGhp
cyB1c2VzIFVuaWNvZGUga2V5LXZhbHVlIHBhaXJzLCBsaWtlICJjby1waG9uZWJrIi4KKyAgICAg
KgorICAgICAqIElDVTRDIGRvZXNuJ3QgZG8gYXV0b21hdGljIGNvbnZlcnNpb24gYmV0d2VlbiBs
ZWdhY3kgYW5kIFVuaWNvZGUKKyAgICAgKiBrZXl3b3JkcyBhbmQgdmFsdWVzIGluIGdldHRlcnMg
YW5kIHNldHRlcnMgKGFzIG9wcG9zZWQgdG8gSUNVNEopLgorICAgICAqCisgICAgICogQHBhcmFt
IGtleXdvcmROYW1lIG5hbWUgb2YgdGhlIGtleXdvcmQgdG8gYmUgc2V0LgorICAgICAqIEBwYXJh
bSBrZXl3b3JkVmFsdWUgdmFsdWUgb2YgdGhlIGtleXdvcmQgdG8gYmUgc2V0LiBJZiAwLWxlbmd0
aCBvcgorICAgICAqICBOVUxMLCB3aWxsIHJlc3VsdCBpbiB0aGUga2V5d29yZCBiZWluZyByZW1v
dmVkLiBObyBlcnJvciBpcyBnaXZlbiBpZgorICAgICAqICB0aGF0IGtleXdvcmQgZG9lcyBub3Qg
ZXhpc3QuCisgICAgICogQHBhcmFtIHN0YXR1cyBSZXR1cm5zIGFueSBlcnJvciBpbmZvcm1hdGlv
biB3aGlsZSBwZXJmb3JtaW5nIHRoaXMgb3BlcmF0aW9uLgorICAgICAqIEBkcmFmdCBJQ1UgNjMK
KyAgICAgKi8KKyAgICB2b2lkIHNldFVuaWNvZGVLZXl3b3JkVmFsdWUoU3RyaW5nUGllY2Uga2V5
d29yZE5hbWUsIFN0cmluZ1BpZWNlIGtleXdvcmRWYWx1ZSwgVUVycm9yQ29kZSYgc3RhdHVzKTsK
KyNlbmRpZiAgLy8gVV9ISURFX0RSQUZUX0FQSQorCiAgICAgLyoqCiAgICAgICogcmV0dXJucyB0
aGUgbG9jYWxlJ3MgdGhyZWUtbGV0dGVyIGxhbmd1YWdlIGNvZGUsIGFzIHNwZWNpZmllZAogICAg
ICAqIGluIElTTyBkcmFmdCBzdGFuZGFyZCBJU08tNjM5LTIuCkBAIC02NjMsNyArOTYyLDcgQEAg
Y2xhc3MgVV9DT01NT05fQVBJIExvY2FsZSA6IHB1YmxpYyBVT2JqZWN0IHsKICAgICAgKiBAcmV0
dXJuIEZBTFNFIGlmIGl0IGlzIGEgcmVhbCBsb2NhbGUsIFRSVUUgaWYgaXQgaXMgYSBib2d1cyBs
b2NhbGUKICAgICAgKiBAc3RhYmxlIElDVSAyLjEKICAgICAgKi8KLSAgICBVQm9vbCBpc0JvZ3Vz
KHZvaWQpIGNvbnN0OworICAgIGlubGluZSBVQm9vbCBpc0JvZ3VzKHZvaWQpIGNvbnN0OwogCiAg
ICAgLyoqCiAgICAgICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIGluc3RhbGxlZCBsb2NhbGVzLgpA
QCAtNzU5LDEyICsxMDU4LDEyIEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBMb2NhbGUgOiBwdWJsaWMg
VU9iamVjdCB7CiAKICAgICAvKioKICAgICAgKiBBIGZyaWVuZCB0byBhbGxvdyB0aGUgZGVmYXVs
dCBsb2NhbGUgdG8gYmUgc2V0IGJ5IGVpdGhlciB0aGUgQyBvciBDKysgQVBJLgotICAgICAqIEBp
bnRlcm5hbAorICAgICAqIEBpbnRlcm5hbCAocHJpdmF0ZSkKICAgICAgKi8KICAgICBmcmllbmQg
TG9jYWxlICpsb2NhbGVfc2V0X2RlZmF1bHRfaW50ZXJuYWwoY29uc3QgY2hhciAqLCBVRXJyb3JD
b2RlJiBzdGF0dXMpOwogCiAgICAgLyoqCi0gICAgICogQGludGVybmFsCisgICAgICogQGludGVy
bmFsIChwcml2YXRlKQogICAgICAqLwogICAgIGZyaWVuZCB2b2lkIFVfQ0FMTENPTlYgbG9jYWxl
X2F2YWlsYWJsZV9pbml0KCk7CiB9OwpAQCAtNzc1LDYgKzEwNzQsMTcgQEAgTG9jYWxlOjpvcGVy
YXRvciE9KGNvbnN0ICAgIExvY2FsZSYgICAgIG90aGVyKSBjb25zdAogICAgIHJldHVybiAhb3Bl
cmF0b3I9PShvdGhlcik7CiB9CiAKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQordGVtcGxhdGU8
dHlwZW5hbWUgU3RyaW5nQ2xhc3M+IGlubGluZSBTdHJpbmdDbGFzcworTG9jYWxlOjp0b0xhbmd1
YWdlVGFnKFVFcnJvckNvZGUmIHN0YXR1cykgY29uc3QKK3sKKyAgICBTdHJpbmdDbGFzcyByZXN1
bHQ7CisgICAgU3RyaW5nQnl0ZVNpbms8U3RyaW5nQ2xhc3M+IHNpbmsoJnJlc3VsdCk7CisgICAg
dG9MYW5ndWFnZVRhZyhzaW5rLCBzdGF0dXMpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5k
aWYgIC8vIFVfSElERV9EUkFGVF9BUEkKKwogaW5saW5lIGNvbnN0IGNoYXIgKgogTG9jYWxlOjpn
ZXRDb3VudHJ5KCkgY29uc3QKIHsKQEAgLTgwNSw2ICsxMTE1LDYyIEBAIExvY2FsZTo6Z2V0TmFt
ZSgpIGNvbnN0CiAgICAgcmV0dXJuIGZ1bGxOYW1lOwogfQogCisjaWZuZGVmIFVfSElERV9EUkFG
VF9BUEkKKwordGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nQ2xhc3MsIHR5cGVuYW1lIE91dHB1dEl0
ZXJhdG9yPiBpbmxpbmUgdm9pZAorTG9jYWxlOjpnZXRLZXl3b3JkcyhPdXRwdXRJdGVyYXRvciBp
dGVyYXRvciwgVUVycm9yQ29kZSYgc3RhdHVzKSBjb25zdAoreworICAgIExvY2FsUG9pbnRlcjxT
dHJpbmdFbnVtZXJhdGlvbj4ga2V5cyhjcmVhdGVLZXl3b3JkcyhzdGF0dXMpKTsKKyAgICBpZiAo
VV9GQUlMVVJFKHN0YXR1cykpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmb3IgKDs7
KSB7CisgICAgICAgIGludDMyX3QgcmVzdWx0TGVuZ3RoOworICAgICAgICBjb25zdCBjaGFyKiBi
dWZmZXIgPSBrZXlzLT5uZXh0KCZyZXN1bHRMZW5ndGgsIHN0YXR1cyk7CisgICAgICAgIGlmIChV
X0ZBSUxVUkUoc3RhdHVzKSB8fCBidWZmZXIgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgICppdGVyYXRvcisrID0gU3RyaW5nQ2xhc3MoYnVmZmVy
LCByZXN1bHRMZW5ndGgpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nQ2xh
c3MsIHR5cGVuYW1lIE91dHB1dEl0ZXJhdG9yPiBpbmxpbmUgdm9pZAorTG9jYWxlOjpnZXRVbmlj
b2RlS2V5d29yZHMoT3V0cHV0SXRlcmF0b3IgaXRlcmF0b3IsIFVFcnJvckNvZGUmIHN0YXR1cykg
Y29uc3QKK3sKKyAgICBMb2NhbFBvaW50ZXI8U3RyaW5nRW51bWVyYXRpb24+IGtleXMoY3JlYXRl
VW5pY29kZUtleXdvcmRzKHN0YXR1cykpOworICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkgewor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZvciAoOzspIHsKKyAgICAgICAgaW50MzJfdCBy
ZXN1bHRMZW5ndGg7CisgICAgICAgIGNvbnN0IGNoYXIqIGJ1ZmZlciA9IGtleXMtPm5leHQoJnJl
c3VsdExlbmd0aCwgc3RhdHVzKTsKKyAgICAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpIHx8IGJ1
ZmZlciA9PSBudWxscHRyKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgKml0ZXJhdG9yKysgPSBTdHJpbmdDbGFzcyhidWZmZXIsIHJlc3VsdExlbmd0aCk7CisgICAg
fQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdDbGFzcz4gaW5saW5lIFN0cmluZ0NsYXNz
CitMb2NhbGU6OmdldEtleXdvcmRWYWx1ZShTdHJpbmdQaWVjZSBrZXl3b3JkTmFtZSwgVUVycm9y
Q29kZSYgc3RhdHVzKSBjb25zdAoreworICAgIFN0cmluZ0NsYXNzIHJlc3VsdDsKKyAgICBTdHJp
bmdCeXRlU2luazxTdHJpbmdDbGFzcz4gc2luaygmcmVzdWx0KTsKKyAgICBnZXRLZXl3b3JkVmFs
dWUoa2V5d29yZE5hbWUsIHNpbmssIHN0YXR1cyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nQ2xhc3M+IGlubGluZSBTdHJpbmdDbGFzcworTG9jYWxl
OjpnZXRVbmljb2RlS2V5d29yZFZhbHVlKFN0cmluZ1BpZWNlIGtleXdvcmROYW1lLCBVRXJyb3JD
b2RlJiBzdGF0dXMpIGNvbnN0Cit7CisgICAgU3RyaW5nQ2xhc3MgcmVzdWx0OworICAgIFN0cmlu
Z0J5dGVTaW5rPFN0cmluZ0NsYXNzPiBzaW5rKCZyZXN1bHQpOworICAgIGdldFVuaWNvZGVLZXl3
b3JkVmFsdWUoa2V5d29yZE5hbWUsIHNpbmssIHN0YXR1cyk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworI2VuZGlmICAvLyBVX0hJREVfRFJBRlRfQVBJCisKIGlubGluZSBVQm9vbAogTG9jYWxl
Ojppc0JvZ3VzKHZvaWQpIGNvbnN0IHsKICAgICByZXR1cm4gZklzQm9ndXM7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL21lYXNmbXQuaCBiL1NvdXJjZS9XVEYvaWN1L3VuaWNv
ZGUvbWVhc2ZtdC5oCmluZGV4IDAwZjJkNDdhMDA0YTNjNjQxNmM2MGEzOGQ2ZmI5NDU1N2VhMTNj
ZTEuLjEyMTAxZDZlMjhiZmU3NzNmODE4YWY4ZjBmYTQ3MDViMTYyMjQ3YjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvbWVhc2ZtdC5oCisrKyBiL1NvdXJjZS9XVEYvaWN1L3Vu
aWNvZGUvbWVhc2ZtdC5oCkBAIC0xMDQsNyArMTA0LDcgQEAgY2xhc3MgVV9JMThOX0FQSSBNZWFz
dXJlRm9ybWF0IDogcHVibGljIEZvcm1hdCB7CiAgICAgICogQ29uc3RydWN0b3IuCiAgICAgICog
PHA+CiAgICAgICogPHN0cm9uZz5OT1RFOjwvc3Ryb25nPiBOZXcgdXNlcnMgYXJlIHN0cm9uZ2x5
IGVuY291cmFnZWQgdG8gdXNlCi0gICAgICoge0BsaW5rIE51bWJlckZvcm1hdHRlcn0gaW5zdGVh
ZCBvZiBOdW1iZXJGb3JtYXQuCisgICAgICoge0BsaW5rIGljdTo6bnVtYmVyOjpOdW1iZXJGb3Jt
YXR0ZXJ9IGluc3RlYWQgb2YgTnVtYmVyRm9ybWF0LgogICAgICAqIEBzdGFibGUgSUNVIDUzCiAg
ICAgICovCiAgICAgTWVhc3VyZUZvcm1hdCgKQEAgLTExNCw3ICsxMTQsNyBAQCBjbGFzcyBVX0kx
OE5fQVBJIE1lYXN1cmVGb3JtYXQgOiBwdWJsaWMgRm9ybWF0IHsKICAgICAgKiBDb25zdHJ1Y3Rv
ci4KICAgICAgKiA8cD4KICAgICAgKiA8c3Ryb25nPk5PVEU6PC9zdHJvbmc+IE5ldyB1c2VycyBh
cmUgc3Ryb25nbHkgZW5jb3VyYWdlZCB0byB1c2UKLSAgICAgKiB7QGxpbmsgTnVtYmVyRm9ybWF0
dGVyfSBpbnN0ZWFkIG9mIE51bWJlckZvcm1hdC4KKyAgICAgKiB7QGxpbmsgaWN1OjpudW1iZXI6
Ok51bWJlckZvcm1hdHRlcn0gaW5zdGVhZCBvZiBOdW1iZXJGb3JtYXQuCiAgICAgICogQHN0YWJs
ZSBJQ1UgNTMKICAgICAgKi8KICAgICBNZWFzdXJlRm9ybWF0KApAQCAtMjAyLDcgKzIwMiw3IEBA
IGNsYXNzIFVfSTE4Tl9BUEkgTWVhc3VyZUZvcm1hdCA6IHB1YmxpYyBGb3JtYXQgewogICAgICAq
IGZvcm1hdHRlZCBzdHJpbmcgaXMgMy41IG1ldGVycyBwZXIgc2Vjb25kLgogICAgICAqIEBwYXJh
bSBtZWFzdXJlIFRoZSBtZWFzdXJlIG9iamVjdC4gSW4gYWJvdmUgZXhhbXBsZSwgMy41IG1ldGVy
cy4KICAgICAgKiBAcGFyYW0gcGVyVW5pdCBUaGUgcGVyIHVuaXQuIEluIGFib3ZlIGV4YW1wbGUs
IGl0IGlzCi0gICAgICogICAgICAgICpNZWFzdXJlVW5pdDo6Y3JlYXRlU2Vjb25kKHN0YXR1cyku
CisgICAgICogICAgICAgIGAqJU1lYXN1cmVVbml0OjpjcmVhdGVTZWNvbmQoc3RhdHVzKWAuCiAg
ICAgICogQHBhcmFtIGFwcGVuZFRvIGZvcm1hdHRlZCBzdHJpbmcgYXBwZW5kZWQgaGVyZS4KICAg
ICAgKiBAcGFyYW0gcG9zIHRoZSBmaWVsZCBwb3NpdGlvbi4KICAgICAgKiBAcGFyYW0gc3RhdHVz
IHRoZSBlcnJvci4KQEAgLTIyMyw3ICsyMjMsNyBAQCBjbGFzcyBVX0kxOE5fQVBJIE1lYXN1cmVG
b3JtYXQgOiBwdWJsaWMgRm9ybWF0IHsKICAgICAgKiBAcGFyYW0gdW5pdCAgVGhlIHVuaXQgZm9y
IHdoaWNoIHRvIGdldCBhIGRpc3BsYXkgbmFtZS4KICAgICAgKiBAcGFyYW0gc3RhdHVzIHRoZSBl
cnJvci4KICAgICAgKiBAcmV0dXJuICBUaGUgZGlzcGxheSBuYW1lIGluIHRoZSBsb2NhbGUgYW5k
IHdpZHRoIHNwZWNpZmllZCBpbgotICAgICAqICAgICAgICAgIHtAbGluayBNZWFzdXJlRm9ybWF0
I2dldEluc3RhbmNlfSwgb3IgbnVsbCBpZiB0aGVyZSBpcyBubyBkaXNwbGF5IG5hbWUgYXZhaWxh
YmxlCisgICAgICogICAgICAgICAgdGhlIE1lYXN1cmVGb3JtYXQgY29uc3RydWN0b3IsIG9yIG51
bGwgaWYgdGhlcmUgaXMgbm8gZGlzcGxheSBuYW1lIGF2YWlsYWJsZQogICAgICAqICAgICAgICAg
IGZvciB0aGUgc3BlY2lmaWVkIHVuaXQuCiAgICAgICoKICAgICAgKiBAc3RhYmxlIElDVSA1OApA
QCAtMjM2LDcgKzIzNiw3IEBAIGNsYXNzIFVfSTE4Tl9BUEkgTWVhc3VyZUZvcm1hdCA6IHB1Ymxp
YyBGb3JtYXQgewogICAgICAqIGxvY2FsZS4KICAgICAgKiA8cD4KICAgICAgKiA8c3Ryb25nPk5P
VEU6PC9zdHJvbmc+IE5ldyB1c2VycyBhcmUgc3Ryb25nbHkgZW5jb3VyYWdlZCB0byB1c2UKLSAg
ICAgKiB7QGxpbmsgTnVtYmVyRm9ybWF0dGVyfSBpbnN0ZWFkIG9mIE51bWJlckZvcm1hdC4KKyAg
ICAgKiB7QGxpbmsgaWN1OjpudW1iZXI6Ok51bWJlckZvcm1hdHRlcn0gaW5zdGVhZCBvZiBOdW1i
ZXJGb3JtYXQuCiAgICAgICogQHBhcmFtIGxvY2FsZSBkZXNpcmVkIGxvY2FsZQogICAgICAqIEBw
YXJhbSBlYyBpbnB1dC1vdXRwdXQgZXJyb3IgY29kZQogICAgICAqIEByZXR1cm4gYSBmb3JtYXR0
ZXIgb2JqZWN0LCBvciBOVUxMIHVwb24gZXJyb3IKQEAgLTI1MCw3ICsyNTAsNyBAQCBjbGFzcyBV
X0kxOE5fQVBJIE1lYXN1cmVGb3JtYXQgOiBwdWJsaWMgRm9ybWF0IHsKICAgICAgKiBsb2NhbGUu
CiAgICAgICogPHA+CiAgICAgICogPHN0cm9uZz5OT1RFOjwvc3Ryb25nPiBOZXcgdXNlcnMgYXJl
IHN0cm9uZ2x5IGVuY291cmFnZWQgdG8gdXNlCi0gICAgICoge0BsaW5rIE51bWJlckZvcm1hdHRl
cn0gaW5zdGVhZCBvZiBOdW1iZXJGb3JtYXQuCisgICAgICoge0BsaW5rIGljdTo6bnVtYmVyOjpO
dW1iZXJGb3JtYXR0ZXJ9IGluc3RlYWQgb2YgTnVtYmVyRm9ybWF0LgogICAgICAqIEBwYXJhbSBl
YyBpbnB1dC1vdXRwdXQgZXJyb3IgY29kZQogICAgICAqIEByZXR1cm4gYSBmb3JtYXR0ZXIgb2Jq
ZWN0LCBvciBOVUxMIHVwb24gZXJyb3IKICAgICAgKiBAc3RhYmxlIElDVSAzLjAKQEAgLTMyMiw3
ICszMjIsMTQgQEAgY2xhc3MgVV9JMThOX0FQSSBNZWFzdXJlRm9ybWF0IDogcHVibGljIEZvcm1h
dCB7CiAgICAgICogSUNVIHVzZSBvbmx5LgogICAgICAqIEBpbnRlcm5hbC4KICAgICAgKi8KLSAg
ICBjb25zdCBOdW1iZXJGb3JtYXQgJmdldE51bWJlckZvcm1hdCgpIGNvbnN0OworICAgIGNvbnN0
IE51bWJlckZvcm1hdCAmZ2V0TnVtYmVyRm9ybWF0SW50ZXJuYWwoKSBjb25zdDsKKworICAgIC8q
KgorICAgICAqIElDVSB1c2Ugb25seS4KKyAgICAgKiBBbHdheXMgcmV0dXJucyB0aGUgc2hvcnQg
Zm9ybSBjdXJyZW5jeSBmb3JtYXR0ZXIuCisgICAgICogQGludGVybmFsLgorICAgICAqLworICAg
IGNvbnN0IE51bWJlckZvcm1hdCYgZ2V0Q3VycmVuY3lGb3JtYXRJbnRlcm5hbCgpIGNvbnN0Owog
CiAgICAgLyoqCiAgICAgICogSUNVIHVzZSBvbmx5LgpAQCAtMzQ4LDM0ICszNTUsMTMgQEAgY2xh
c3MgVV9JMThOX0FQSSBNZWFzdXJlRm9ybWF0IDogcHVibGljIEZvcm1hdCB7CiAgICAgY29uc3Qg
TWVhc3VyZUZvcm1hdENhY2hlRGF0YSAqY2FjaGU7CiAgICAgY29uc3QgU2hhcmVkTnVtYmVyRm9y
bWF0ICpudW1iZXJGb3JtYXQ7CiAgICAgY29uc3QgU2hhcmVkUGx1cmFsUnVsZXMgKnBsdXJhbFJ1
bGVzOwotICAgIFVNZWFzdXJlRm9ybWF0V2lkdGggd2lkdGg7ICAgIAorICAgIFVNZWFzdXJlRm9y
bWF0V2lkdGggZldpZHRoOyAgICAKIAogICAgIC8vIERlY2xhcmVkIG91dHNpZGUgb2YgTWVhc3Vy
ZUZvcm1hdFNoYXJlZERhdGEgYmVjYXVzZSBMaXN0Rm9ybWF0dGVyCiAgICAgLy8gb2JqZWN0cyBh
cmUgcmVsYXRpdmVseSBjaGVhcCB0byBjb3B5OyB0aGVyZWZvcmUsIHRoZXkgZG9uJ3QgbmVlZCB0
byBiZQogICAgIC8vIHNoYXJlZCBhY3Jvc3MgaW5zdGFuY2VzLgogICAgIExpc3RGb3JtYXR0ZXIg
Kmxpc3RGb3JtYXR0ZXI7CiAKLSAgICBjb25zdCBTaW1wbGVGb3JtYXR0ZXIgKmdldEZvcm1hdHRl
ck9yTnVsbCgKLSAgICAgICAgICAgIGNvbnN0IE1lYXN1cmVVbml0ICZ1bml0LCBVTWVhc3VyZUZv
cm1hdFdpZHRoIHdpZHRoLCBpbnQzMl90IGluZGV4KSBjb25zdDsKLQotICAgIGNvbnN0IFNpbXBs
ZUZvcm1hdHRlciAqZ2V0Rm9ybWF0dGVyKAotICAgICAgICAgICAgY29uc3QgTWVhc3VyZVVuaXQg
JnVuaXQsIFVNZWFzdXJlRm9ybWF0V2lkdGggd2lkdGgsIGludDMyX3QgaW5kZXgsCi0gICAgICAg
ICAgICBVRXJyb3JDb2RlICZlcnJvckNvZGUpIGNvbnN0OwotCi0gICAgY29uc3QgU2ltcGxlRm9y
bWF0dGVyICpnZXRQbHVyYWxGb3JtYXR0ZXIoCi0gICAgICAgICAgICBjb25zdCBNZWFzdXJlVW5p
dCAmdW5pdCwgVU1lYXN1cmVGb3JtYXRXaWR0aCB3aWR0aCwgaW50MzJfdCBpbmRleCwKLSAgICAg
ICAgICAgIFVFcnJvckNvZGUgJmVycm9yQ29kZSkgY29uc3Q7Ci0KLSAgICBjb25zdCBTaW1wbGVG
b3JtYXR0ZXIgKmdldFBlckZvcm1hdHRlcigKLSAgICAgICAgICAgIFVNZWFzdXJlRm9ybWF0V2lk
dGggd2lkdGgsCi0gICAgICAgICAgICBVRXJyb3JDb2RlICZzdGF0dXMpIGNvbnN0OwotCi0gICAg
aW50MzJfdCB3aXRoUGVyVW5pdEFuZEFwcGVuZCgKLSAgICAgICAgY29uc3QgVW5pY29kZVN0cmlu
ZyAmZm9ybWF0dGVkLAotICAgICAgICBjb25zdCBNZWFzdXJlVW5pdCAmcGVyVW5pdCwKLSAgICAg
ICAgVW5pY29kZVN0cmluZyAmYXBwZW5kVG8sCi0gICAgICAgIFVFcnJvckNvZGUgJnN0YXR1cykg
Y29uc3Q7Ci0KICAgICBVbmljb2RlU3RyaW5nICZmb3JtYXRNZWFzdXJlKAogICAgICAgICBjb25z
dCBNZWFzdXJlICZtZWFzdXJlLAogICAgICAgICBjb25zdCBOdW1iZXJGb3JtYXQgJm5mLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi9pY3UvdW5pY29kZS9tZWFzdW5pdC5oIGIvU291cmNlL1dURi9p
Y3UvdW5pY29kZS9tZWFzdW5pdC5oCmluZGV4IGE5MmQyNGIxZTJhMDlhYmU3ZjVlMGRiM2Y5MWMx
NDFmYjBjOTdlNjguLjkzZDliMDc5NDk2YWU4MGIwNWIwN2MzODY4OTBjMGQyZjFmYTE1ZDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvbWVhc3VuaXQuaAorKysgYi9Tb3VyY2Uv
V1RGL2ljdS91bmljb2RlL21lYXN1bml0LmgKQEAgLTIwOSwxMDg1ICsyMDksMjkxOSBAQCBjbGFz
cyBVX0kxOE5fQVBJIE1lYXN1cmVVbml0OiBwdWJsaWMgVU9iamVjdCB7CiAvLyBTdGFydCBnZW5l
cmF0ZWQgY3JlYXRlWFhYIG1ldGhvZHMKIAogICAgIC8qKgotICAgICAqIFJldHVybnMgdW5pdCBv
ZiBhY2NlbGVyYXRpb246IGctZm9yY2UuCisgICAgICogUmV0dXJucyBieSBwb2ludGVyLCB1bml0
IG9mIGFjY2VsZXJhdGlvbjogZy1mb3JjZS4KICAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2
YWx1ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0R0ZvcmNl
KCl9LgogICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCiAgICAgICogQHN0YWJs
ZSBJQ1UgNTMKICAgICAgKi8KICAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZUdGb3JjZShV
RXJyb3JDb2RlICZzdGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKICAgICAvKioK
LSAgICAgKiBSZXR1cm5zIHVuaXQgb2YgYWNjZWxlcmF0aW9uOiBtZXRlci1wZXItc2Vjb25kLXNx
dWFyZWQuCisgICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBhY2NlbGVyYXRpb246IGct
Zm9yY2UuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNjcmVhdGVHRm9yY2UoKX0uCisgICAgICog
QGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRHRm9yY2Uo
KTsKKyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLworCisgICAgLyoqCisgICAgICogUmV0
dXJucyBieSBwb2ludGVyLCB1bml0IG9mIGFjY2VsZXJhdGlvbjogbWV0ZXItcGVyLXNlY29uZC1z
cXVhcmVkLgogICAgICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUg
aXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRNZXRlclBlclNlY29uZFNxdWFyZWQoKX0u
CiAgICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KICAgICAgKiBAc3RhYmxlIElD
VSA1NAogICAgICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlTWV0ZXJQZXJTZWNv
bmRTcXVhcmVkKFVFcnJvckNvZGUgJnN0YXR1cyk7CiAKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQ
SQogICAgIC8qKgotICAgICAqIFJldHVybnMgdW5pdCBvZiBhbmdsZTogYXJjLW1pbnV0ZS4KKyAg
ICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9mIGFjY2VsZXJhdGlvbjogbWV0ZXItcGVyLXNl
Y29uZC1zcXVhcmVkLgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlTWV0ZXJQZXJTZWNv
bmRTcXVhcmVkKCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMg
TWVhc3VyZVVuaXQgZ2V0TWV0ZXJQZXJTZWNvbmRTcXVhcmVkKCk7CisjZW5kaWYgIC8qIFVfSElE
RV9EUkFGVF9BUEkgKi8KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5p
dCBvZiBhbmdsZTogYXJjLW1pbnV0ZS4KICAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1
ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0QXJjTWludXRl
KCl9LgogICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCiAgICAgICogQHN0YWJs
ZSBJQ1UgNTMKICAgICAgKi8KICAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZUFyY01pbnV0
ZShVRXJyb3JDb2RlICZzdGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKICAgICAv
KioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2YgYW5nbGU6IGFyYy1zZWNvbmQuCisgICAgICogUmV0
dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBhbmdsZTogYXJjLW1pbnV0ZS4KKyAgICAgKiBBbHNvIHNl
ZSB7QGxpbmsgI2NyZWF0ZUFyY01pbnV0ZSgpfS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAg
ICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0IGdldEFyY01pbnV0ZSgpOworI2VuZGlmICAvKiBV
X0hJREVfRFJBRlRfQVBJICovCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIs
IHVuaXQgb2YgYW5nbGU6IGFyYy1zZWNvbmQuCiAgICAgICogQ2FsbGVyIG93bnMgcmV0dXJuZWQg
dmFsdWUgYW5kIG11c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dldEFyY1Nl
Y29uZCgpfS4KICAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgogICAgICAqIEBz
dGFibGUgSUNVIDUzCiAgICAgICovCiAgICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVBcmNT
ZWNvbmQoVUVycm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisg
ICAgLyoqCisgICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBhbmdsZTogYXJjLXNlY29u
ZC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2NyZWF0ZUFyY1NlY29uZCgpfS4KKyAgICAgKiBA
ZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0IGdldEFyY1NlY29u
ZCgpOworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKICAgICAvKioKLSAgICAgKiBS
ZXR1cm5zIHVuaXQgb2YgYW5nbGU6IGRlZ3JlZS4KKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIs
IHVuaXQgb2YgYW5nbGU6IGRlZ3JlZS4KICAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1
ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0RGVncmVlKCl9
LgogICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCiAgICAgICogQHN0YWJsZSBJ
Q1UgNTMKICAgICAgKi8KICAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZURlZ3JlZShVRXJy
b3JDb2RlICZzdGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKICAgICAvKioKLSAg
ICAgKiBSZXR1cm5zIHVuaXQgb2YgYW5nbGU6IHJhZGlhbi4KKyAgICAgKiBSZXR1cm5zIGJ5IHZh
bHVlLCB1bml0IG9mIGFuZ2xlOiBkZWdyZWUuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNjcmVh
dGVEZWdyZWUoKX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBN
ZWFzdXJlVW5pdCBnZXREZWdyZWUoKTsKKyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLwor
CisgICAgLyoqCisgICAgICogUmV0dXJucyBieSBwb2ludGVyLCB1bml0IG9mIGFuZ2xlOiByYWRp
YW4uCiAgICAgICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUgYW5kIG11c3QgZnJlZSBpdC4K
KyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dldFJhZGlhbigpfS4KICAgICAgKiBAcGFyYW0gc3Rh
dHVzIElDVSBlcnJvciBjb2RlLgogICAgICAqIEBzdGFibGUgSUNVIDU0CiAgICAgICovCiAgICAg
c3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVSYWRpYW4oVUVycm9yQ29kZSAmc3RhdHVzKTsKIAor
I2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSB2YWx1
ZSwgdW5pdCBvZiBhbmdsZTogcmFkaWFuLgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRl
UmFkaWFuKCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVh
c3VyZVVuaXQgZ2V0UmFkaWFuKCk7CisjZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKwog
ICAgIC8qKgotICAgICAqIFJldHVybnMgdW5pdCBvZiBhbmdsZTogcmV2b2x1dGlvbi4KKyAgICAg
KiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2YgYW5nbGU6IHJldm9sdXRpb24uCiAgICAgICog
Q2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUgYW5kIG11c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNv
IHNlZSB7QGxpbmsgI2dldFJldm9sdXRpb25BbmdsZSgpfS4KICAgICAgKiBAcGFyYW0gc3RhdHVz
IElDVSBlcnJvciBjb2RlLgogICAgICAqIEBzdGFibGUgSUNVIDU2CiAgICAgICovCiAgICAgc3Rh
dGljIE1lYXN1cmVVbml0ICpjcmVhdGVSZXZvbHV0aW9uQW5nbGUoVUVycm9yQ29kZSAmc3RhdHVz
KTsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLyoqCisgICAgICogUmV0dXJucyBi
eSB2YWx1ZSwgdW5pdCBvZiBhbmdsZTogcmV2b2x1dGlvbi4KKyAgICAgKiBBbHNvIHNlZSB7QGxp
bmsgI2NyZWF0ZVJldm9sdXRpb25BbmdsZSgpfS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAg
ICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0IGdldFJldm9sdXRpb25BbmdsZSgpOworI2VuZGlm
ICAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHVuaXQg
b2YgYXJlYTogYWNyZS4KKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2YgYXJlYTog
YWNyZS4KICAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBmcmVlIGl0
LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0QWNyZSgpfS4KICAgICAgKiBAcGFyYW0gc3Rh
dHVzIElDVSBlcnJvciBjb2RlLgogICAgICAqIEBzdGFibGUgSUNVIDUzCiAgICAgICovCiAgICAg
c3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVBY3JlKFVFcnJvckNvZGUgJnN0YXR1cyk7CiAKKyNp
Zm5kZWYgVV9ISURFX0RSQUZUX0FQSQorICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgdmFsdWUs
IHVuaXQgb2YgYXJlYTogYWNyZS4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2NyZWF0ZUFjcmUo
KX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5p
dCBnZXRBY3JlKCk7CisjZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKworI2lmbmRlZiBV
X0hJREVfRFJBRlRfQVBJCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSBwb2ludGVyLCB1bml0
IG9mIGFyZWE6IGR1bmFtLgorICAgICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBt
dXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXREdW5hbSgpfS4KKyAgICAg
KiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAg
ICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZUR1bmFtKFVFcnJvckNvZGUgJnN0
YXR1cyk7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9mIGFyZWE6
IGR1bmFtLgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlRHVuYW0oKX0uCisgICAgICog
QGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXREdW5hbSgp
OworI2VuZGlmIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKwogICAgIC8qKgotICAgICAqIFJldHVy
bnMgdW5pdCBvZiBhcmVhOiBoZWN0YXJlLgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5p
dCBvZiBhcmVhOiBoZWN0YXJlLgogICAgICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFu
ZCBtdXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRIZWN0YXJlKCl9Lgog
ICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCiAgICAgICogQHN0YWJsZSBJQ1Ug
NTMKICAgICAgKi8KICAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZUhlY3RhcmUoVUVycm9y
Q29kZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCiAgICAgLyoqCi0gICAg
ICogUmV0dXJucyB1bml0IG9mIGFyZWE6IHNxdWFyZS1jZW50aW1ldGVyLgorICAgICAqIFJldHVy
bnMgYnkgdmFsdWUsIHVuaXQgb2YgYXJlYTogaGVjdGFyZS4KKyAgICAgKiBBbHNvIHNlZSB7QGxp
bmsgI2NyZWF0ZUhlY3RhcmUoKX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAg
IHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRIZWN0YXJlKCk7CisjZW5kaWYgIC8qIFVfSElERV9EUkFG
VF9BUEkgKi8KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiBh
cmVhOiBzcXVhcmUtY2VudGltZXRlci4KICAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1
ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0U3F1YXJlQ2Vu
dGltZXRlcigpfS4KICAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgogICAgICAq
IEBzdGFibGUgSUNVIDU0CiAgICAgICovCiAgICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVT
cXVhcmVDZW50aW1ldGVyKFVFcnJvckNvZGUgJnN0YXR1cyk7CiAKKyNpZm5kZWYgVV9ISURFX0RS
QUZUX0FQSQorICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgdmFsdWUsIHVuaXQgb2YgYXJlYTog
c3F1YXJlLWNlbnRpbWV0ZXIuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNjcmVhdGVTcXVhcmVD
ZW50aW1ldGVyKCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMg
TWVhc3VyZVVuaXQgZ2V0U3F1YXJlQ2VudGltZXRlcigpOworI2VuZGlmICAvKiBVX0hJREVfRFJB
RlRfQVBJICovCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2YgYXJlYTogc3F1YXJl
LWZvb3QuCisgICAgICogUmV0dXJucyBieSBwb2ludGVyLCB1bml0IG9mIGFyZWE6IHNxdWFyZS1m
b290LgogICAgICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQu
CisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRTcXVhcmVGb290KCl9LgogICAgICAqIEBwYXJh
bSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCiAgICAgICogQHN0YWJsZSBJQ1UgNTMKICAgICAgKi8K
ICAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZVNxdWFyZUZvb3QoVUVycm9yQ29kZSAmc3Rh
dHVzKTsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCiAgICAgLyoqCi0gICAgICogUmV0dXJu
cyB1bml0IG9mIGFyZWE6IHNxdWFyZS1pbmNoLgorICAgICAqIFJldHVybnMgYnkgdmFsdWUsIHVu
aXQgb2YgYXJlYTogc3F1YXJlLWZvb3QuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNjcmVhdGVT
cXVhcmVGb290KCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMg
TWVhc3VyZVVuaXQgZ2V0U3F1YXJlRm9vdCgpOworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJ
ICovCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2YgYXJlYTog
c3F1YXJlLWluY2guCiAgICAgICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUgYW5kIG11c3Qg
ZnJlZSBpdC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dldFNxdWFyZUluY2goKX0uCiAgICAg
ICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KICAgICAgKiBAc3RhYmxlIElDVSA1NAog
ICAgICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlU3F1YXJlSW5jaChVRXJyb3JD
b2RlICZzdGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKyAgICAvKioKKyAgICAg
KiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9mIGFyZWE6IHNxdWFyZS1pbmNoLgorICAgICAqIEFs
c28gc2VlIHtAbGluayAjY3JlYXRlU3F1YXJlSW5jaCgpfS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0
CisgICAgICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0IGdldFNxdWFyZUluY2goKTsKKyNlbmRp
ZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLworCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB1bml0
IG9mIGFyZWE6IHNxdWFyZS1raWxvbWV0ZXIuCisgICAgICogUmV0dXJucyBieSBwb2ludGVyLCB1
bml0IG9mIGFyZWE6IHNxdWFyZS1raWxvbWV0ZXIuCiAgICAgICogQ2FsbGVyIG93bnMgcmV0dXJu
ZWQgdmFsdWUgYW5kIG11c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dldFNx
dWFyZUtpbG9tZXRlcigpfS4KICAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgog
ICAgICAqIEBzdGFibGUgSUNVIDUzCiAgICAgICovCiAgICAgc3RhdGljIE1lYXN1cmVVbml0ICpj
cmVhdGVTcXVhcmVLaWxvbWV0ZXIoVUVycm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJ
REVfRFJBRlRfQVBJCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB1bml0IG9mIGFyZWE6IHNxdWFy
ZS1tZXRlci4KKyAgICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9mIGFyZWE6IHNxdWFyZS1r
aWxvbWV0ZXIuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNjcmVhdGVTcXVhcmVLaWxvbWV0ZXIo
KX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5p
dCBnZXRTcXVhcmVLaWxvbWV0ZXIoKTsKKyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLwor
CisgICAgLyoqCisgICAgICogUmV0dXJucyBieSBwb2ludGVyLCB1bml0IG9mIGFyZWE6IHNxdWFy
ZS1tZXRlci4KICAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBmcmVl
IGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0U3F1YXJlTWV0ZXIoKX0uCiAgICAgICog
QHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KICAgICAgKiBAc3RhYmxlIElDVSA1MwogICAg
ICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlU3F1YXJlTWV0ZXIoVUVycm9yQ29k
ZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLyoqCisgICAgICog
UmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBhcmVhOiBzcXVhcmUtbWV0ZXIuCisgICAgICogQWxz
byBzZWUge0BsaW5rICNjcmVhdGVTcXVhcmVNZXRlcigpfS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0
CisgICAgICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0IGdldFNxdWFyZU1ldGVyKCk7CisjZW5k
aWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKwogICAgIC8qKgotICAgICAqIFJldHVybnMgdW5p
dCBvZiBhcmVhOiBzcXVhcmUtbWlsZS4KKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQg
b2YgYXJlYTogc3F1YXJlLW1pbGUuCiAgICAgICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUg
YW5kIG11c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dldFNxdWFyZU1pbGUo
KX0uCiAgICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KICAgICAgKiBAc3RhYmxl
IElDVSA1MwogICAgICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlU3F1YXJlTWls
ZShVRXJyb3JDb2RlICZzdGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKICAgICAv
KioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2YgYXJlYTogc3F1YXJlLXlhcmQuCisgICAgICogUmV0
dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBhcmVhOiBzcXVhcmUtbWlsZS4KKyAgICAgKiBBbHNvIHNl
ZSB7QGxpbmsgI2NyZWF0ZVNxdWFyZU1pbGUoKX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAg
ICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRTcXVhcmVNaWxlKCk7CisjZW5kaWYgIC8q
IFVfSElERV9EUkFGVF9BUEkgKi8KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgcG9pbnRl
ciwgdW5pdCBvZiBhcmVhOiBzcXVhcmUteWFyZC4KICAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5l
ZCB2YWx1ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0U3F1
YXJlWWFyZCgpfS4KICAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgogICAgICAq
IEBzdGFibGUgSUNVIDU0CiAgICAgICovCiAgICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVT
cXVhcmVZYXJkKFVFcnJvckNvZGUgJnN0YXR1cyk7CiAKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQ
SQogICAgIC8qKgotICAgICAqIFJldHVybnMgdW5pdCBvZiBjb25jZW50cjoga2FyYXQuCisgICAg
ICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBhcmVhOiBzcXVhcmUteWFyZC4KKyAgICAgKiBB
bHNvIHNlZSB7QGxpbmsgI2NyZWF0ZVNxdWFyZVlhcmQoKX0uCisgICAgICogQGRyYWZ0IElDVSA2
NAorICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRTcXVhcmVZYXJkKCk7CisjZW5k
aWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYnkg
cG9pbnRlciwgdW5pdCBvZiBjb25jZW50cjoga2FyYXQuCiAgICAgICogQ2FsbGVyIG93bnMgcmV0
dXJuZWQgdmFsdWUgYW5kIG11c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dl
dEthcmF0KCl9LgogICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCiAgICAgICog
QHN0YWJsZSBJQ1UgNTQKICAgICAgKi8KICAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZUth
cmF0KFVFcnJvckNvZGUgJnN0YXR1cyk7CiAKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQogICAg
IC8qKgotICAgICAqIFJldHVybnMgdW5pdCBvZiBjb25jZW50cjogbWlsbGlncmFtLXBlci1kZWNp
bGl0ZXIuCisgICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBjb25jZW50cjoga2FyYXQu
CisgICAgICogQWxzbyBzZWUge0BsaW5rICNjcmVhdGVLYXJhdCgpfS4KKyAgICAgKiBAZHJhZnQg
SUNVIDY0CisgICAgICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0IGdldEthcmF0KCk7CisjZW5k
aWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYnkg
cG9pbnRlciwgdW5pdCBvZiBjb25jZW50cjogbWlsbGlncmFtLXBlci1kZWNpbGl0ZXIuCiAgICAg
ICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUgYW5kIG11c3QgZnJlZSBpdC4KKyAgICAgKiBB
bHNvIHNlZSB7QGxpbmsgI2dldE1pbGxpZ3JhbVBlckRlY2lsaXRlcigpfS4KICAgICAgKiBAcGFy
YW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgogICAgICAqIEBzdGFibGUgSUNVIDU3CiAgICAgICov
CiAgICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVNaWxsaWdyYW1QZXJEZWNpbGl0ZXIoVUVy
cm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLyoqCisg
ICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBjb25jZW50cjogbWlsbGlncmFtLXBlci1k
ZWNpbGl0ZXIuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNjcmVhdGVNaWxsaWdyYW1QZXJEZWNp
bGl0ZXIoKX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBNZWFz
dXJlVW5pdCBnZXRNaWxsaWdyYW1QZXJEZWNpbGl0ZXIoKTsKKyNlbmRpZiAgLyogVV9ISURFX0RS
QUZUX0FQSSAqLworCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB1bml0IG9mIGNvbmNlbnRyOiBt
aWxsaW1vbGUtcGVyLWxpdGVyLgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiBj
b25jZW50cjogbWlsbGltb2xlLXBlci1saXRlci4KICAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5l
ZCB2YWx1ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0TWls
bGltb2xlUGVyTGl0ZXIoKX0uCiAgICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4K
ICAgICAgKiBAc3RhYmxlIElDVSA1NwogICAgICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAq
Y3JlYXRlTWlsbGltb2xlUGVyTGl0ZXIoVUVycm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBV
X0hJREVfRFJBRlRfQVBJCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB1bml0IG9mIGNvbmNlbnRy
OiBwYXJ0LXBlci1taWxsaW9uLgorICAgICAqIFJldHVybnMgYnkgdmFsdWUsIHVuaXQgb2YgY29u
Y2VudHI6IG1pbGxpbW9sZS1wZXItbGl0ZXIuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNjcmVh
dGVNaWxsaW1vbGVQZXJMaXRlcigpfS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisg
ICAgc3RhdGljIE1lYXN1cmVVbml0IGdldE1pbGxpbW9sZVBlckxpdGVyKCk7CisjZW5kaWYgIC8q
IFVfSElERV9EUkFGVF9BUEkgKi8KKworI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLyoq
CisgICAgICogUmV0dXJucyBieSBwb2ludGVyLCB1bml0IG9mIGNvbmNlbnRyOiBtb2xlLgorICAg
ICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAgICog
QWxzbyBzZWUge0BsaW5rICNnZXRNb2xlKCl9LgorICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVy
cm9yIGNvZGUuCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBNZWFz
dXJlVW5pdCAqY3JlYXRlTW9sZShVRXJyb3JDb2RlICZzdGF0dXMpOworCisgICAgLyoqCisgICAg
ICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBjb25jZW50cjogbW9sZS4KKyAgICAgKiBBbHNv
IHNlZSB7QGxpbmsgI2NyZWF0ZU1vbGUoKX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAq
LworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRNb2xlKCk7CisjZW5kaWYgLyogVV9ISURFX0RS
QUZUX0FQSSAqLworCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSBwb2ludGVyLCB1bml0IG9m
IGNvbmNlbnRyOiBwYXJ0LXBlci1taWxsaW9uLgogICAgICAqIENhbGxlciBvd25zIHJldHVybmVk
IHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRQYXJ0
UGVyTWlsbGlvbigpfS4KICAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgogICAg
ICAqIEBzdGFibGUgSUNVIDU3CiAgICAgICovCiAgICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVh
dGVQYXJ0UGVyTWlsbGlvbihVRXJyb3JDb2RlICZzdGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9E
UkFGVF9BUEkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9mIGNvbmNl
bnRyOiBwYXJ0LXBlci1taWxsaW9uLgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlUGFy
dFBlck1pbGxpb24oKX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRp
YyBNZWFzdXJlVW5pdCBnZXRQYXJ0UGVyTWlsbGlvbigpOworI2VuZGlmICAvKiBVX0hJREVfRFJB
RlRfQVBJICovCisKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQorICAgIC8qKgorICAgICAqIFJl
dHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiBjb25jZW50cjogcGVyY2VudC4KKyAgICAgKiBDYWxs
ZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAqIEFsc28gc2Vl
IHtAbGluayAjZ2V0UGVyY2VudCgpfS4KKyAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBj
b2RlLgorICAgICAqIEBkcmFmdCBJQ1UgNjMKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVu
aXQgKmNyZWF0ZVBlcmNlbnQoVUVycm9yQ29kZSAmc3RhdHVzKTsKKyNlbmRpZiAgLyogVV9ISURF
X0RSQUZUX0FQSSAqLworCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKyAgICAvKioKKyAgICAg
KiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9mIGNvbmNlbnRyOiBwZXJjZW50LgorICAgICAqIEFs
c28gc2VlIHtAbGluayAjY3JlYXRlUGVyY2VudCgpfS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0Cisg
ICAgICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0IGdldFBlcmNlbnQoKTsKKyNlbmRpZiAvKiBV
X0hJREVfRFJBRlRfQVBJICovCisKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQorICAgIC8qKgor
ICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiBjb25jZW50cjogcGVybWlsbGUuCisg
ICAgICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUgYW5kIG11c3QgZnJlZSBpdC4KKyAgICAg
KiBBbHNvIHNlZSB7QGxpbmsgI2dldFBlcm1pbGxlKCl9LgorICAgICAqIEBwYXJhbSBzdGF0dXMg
SUNVIGVycm9yIGNvZGUuCisgICAgICogQGRyYWZ0IElDVSA2MworICAgICAqLworICAgIHN0YXRp
YyBNZWFzdXJlVW5pdCAqY3JlYXRlUGVybWlsbGUoVUVycm9yQ29kZSAmc3RhdHVzKTsKKyNlbmRp
ZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLworCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKyAg
ICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9mIGNvbmNlbnRyOiBwZXJtaWxs
ZS4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2NyZWF0ZVBlcm1pbGxlKCl9LgorICAgICAqIEBk
cmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgZ2V0UGVybWlsbGUo
KTsKKyNlbmRpZiAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKKyNpZm5kZWYgVV9ISURFX0RSQUZU
X0FQSQorICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiBjb25jZW50
cjogcGVybXlyaWFkLgorICAgICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0
IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRQZXJteXJpYWQoKX0uCisgICAg
ICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0Cisg
ICAgICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVQZXJteXJpYWQoVUVycm9yQ29k
ZSAmc3RhdHVzKTsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgdmFsdWUsIHVuaXQgb2Yg
Y29uY2VudHI6IHBlcm15cmlhZC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2NyZWF0ZVBlcm15
cmlhZCgpfS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgc3RhdGljIE1lYXN1
cmVVbml0IGdldFBlcm15cmlhZCgpOworI2VuZGlmIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKwog
ICAgIC8qKgotICAgICAqIFJldHVybnMgdW5pdCBvZiBjb25zdW1wdGlvbjogbGl0ZXItcGVyLTEw
MGtpbG9tZXRlcnMuCisgICAgICogUmV0dXJucyBieSBwb2ludGVyLCB1bml0IG9mIGNvbnN1bXB0
aW9uOiBsaXRlci1wZXItMTAwa2lsb21ldGVycy4KICAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5l
ZCB2YWx1ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0TGl0
ZXJQZXIxMDBLaWxvbWV0ZXJzKCl9LgogICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNv
ZGUuCiAgICAgICogQHN0YWJsZSBJQ1UgNTYKICAgICAgKi8KICAgICBzdGF0aWMgTWVhc3VyZVVu
aXQgKmNyZWF0ZUxpdGVyUGVyMTAwS2lsb21ldGVycyhVRXJyb3JDb2RlICZzdGF0dXMpOwogCisj
aWZuZGVmIFVfSElERV9EUkFGVF9BUEkKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2Yg
Y29uc3VtcHRpb246IGxpdGVyLXBlci1raWxvbWV0ZXIuCisgICAgICogUmV0dXJucyBieSB2YWx1
ZSwgdW5pdCBvZiBjb25zdW1wdGlvbjogbGl0ZXItcGVyLTEwMGtpbG9tZXRlcnMuCisgICAgICog
QWxzbyBzZWUge0BsaW5rICNjcmVhdGVMaXRlclBlcjEwMEtpbG9tZXRlcnMoKX0uCisgICAgICog
QGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRMaXRlclBl
cjEwMEtpbG9tZXRlcnMoKTsKKyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLworCisgICAg
LyoqCisgICAgICogUmV0dXJucyBieSBwb2ludGVyLCB1bml0IG9mIGNvbnN1bXB0aW9uOiBsaXRl
ci1wZXIta2lsb21ldGVyLgogICAgICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBt
dXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRMaXRlclBlcktpbG9tZXRl
cigpfS4KICAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgogICAgICAqIEBzdGFi
bGUgSUNVIDU0CiAgICAgICovCiAgICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVMaXRlclBl
cktpbG9tZXRlcihVRXJyb3JDb2RlICZzdGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9EUkFGVF9B
UEkKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2YgY29uc3VtcHRpb246IG1pbGUtcGVy
LWdhbGxvbi4KKyAgICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9mIGNvbnN1bXB0aW9uOiBs
aXRlci1wZXIta2lsb21ldGVyLgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlTGl0ZXJQ
ZXJLaWxvbWV0ZXIoKX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRp
YyBNZWFzdXJlVW5pdCBnZXRMaXRlclBlcktpbG9tZXRlcigpOworI2VuZGlmICAvKiBVX0hJREVf
RFJBRlRfQVBJICovCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQg
b2YgY29uc3VtcHRpb246IG1pbGUtcGVyLWdhbGxvbi4KICAgICAgKiBDYWxsZXIgb3ducyByZXR1
cm5lZCB2YWx1ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0
TWlsZVBlckdhbGxvbigpfS4KICAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgog
ICAgICAqIEBzdGFibGUgSUNVIDU0CiAgICAgICovCiAgICAgc3RhdGljIE1lYXN1cmVVbml0ICpj
cmVhdGVNaWxlUGVyR2FsbG9uKFVFcnJvckNvZGUgJnN0YXR1cyk7CiAKKyNpZm5kZWYgVV9ISURF
X0RSQUZUX0FQSQogICAgIC8qKgotICAgICAqIFJldHVybnMgdW5pdCBvZiBjb25zdW1wdGlvbjog
bWlsZS1wZXItZ2FsbG9uLWltcGVyaWFsLgorICAgICAqIFJldHVybnMgYnkgdmFsdWUsIHVuaXQg
b2YgY29uc3VtcHRpb246IG1pbGUtcGVyLWdhbGxvbi4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsg
I2NyZWF0ZU1pbGVQZXJHYWxsb24oKX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLwor
ICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRNaWxlUGVyR2FsbG9uKCk7CisjZW5kaWYgIC8qIFVf
SElERV9EUkFGVF9BUEkgKi8KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwg
dW5pdCBvZiBjb25zdW1wdGlvbjogbWlsZS1wZXItZ2FsbG9uLWltcGVyaWFsLgogICAgICAqIENh
bGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBz
ZWUge0BsaW5rICNnZXRNaWxlUGVyR2FsbG9uSW1wZXJpYWwoKX0uCiAgICAgICogQHBhcmFtIHN0
YXR1cyBJQ1UgZXJyb3IgY29kZS4KICAgICAgKiBAc3RhYmxlIElDVSA1NwogICAgICAqLwogICAg
IHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlTWlsZVBlckdhbGxvbkltcGVyaWFsKFVFcnJvckNv
ZGUgJnN0YXR1cyk7CiAKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQorICAgIC8qKgorICAgICAq
IFJldHVybnMgYnkgdmFsdWUsIHVuaXQgb2YgY29uc3VtcHRpb246IG1pbGUtcGVyLWdhbGxvbi1p
bXBlcmlhbC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2NyZWF0ZU1pbGVQZXJHYWxsb25JbXBl
cmlhbCgpfS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgc3RhdGljIE1lYXN1
cmVVbml0IGdldE1pbGVQZXJHYWxsb25JbXBlcmlhbCgpOworI2VuZGlmICAvKiBVX0hJREVfRFJB
RlRfQVBJICovCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2YgZGlnaXRhbDogYml0
LgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiBkaWdpdGFsOiBiaXQuCiAgICAg
ICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUgYW5kIG11c3QgZnJlZSBpdC4KKyAgICAgKiBB
bHNvIHNlZSB7QGxpbmsgI2dldEJpdCgpfS4KICAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJv
ciBjb2RlLgogICAgICAqIEBzdGFibGUgSUNVIDU0CiAgICAgICovCiAgICAgc3RhdGljIE1lYXN1
cmVVbml0ICpjcmVhdGVCaXQoVUVycm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJREVf
RFJBRlRfQVBJCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB1bml0IG9mIGRpZ2l0YWw6IGJ5dGUu
CisgICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBkaWdpdGFsOiBiaXQuCisgICAgICog
QWxzbyBzZWUge0BsaW5rICNjcmVhdGVCaXQoKX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAg
ICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRCaXQoKTsKKyNlbmRpZiAgLyogVV9ISURF
X0RSQUZUX0FQSSAqLworCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSBwb2ludGVyLCB1bml0
IG9mIGRpZ2l0YWw6IGJ5dGUuCiAgICAgICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUgYW5k
IG11c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dldEJ5dGUoKX0uCiAgICAg
ICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KICAgICAgKiBAc3RhYmxlIElDVSA1NAog
ICAgICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlQnl0ZShVRXJyb3JDb2RlICZz
dGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKyAgICAvKioKKyAgICAgKiBSZXR1
cm5zIGJ5IHZhbHVlLCB1bml0IG9mIGRpZ2l0YWw6IGJ5dGUuCisgICAgICogQWxzbyBzZWUge0Bs
aW5rICNjcmVhdGVCeXRlKCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBz
dGF0aWMgTWVhc3VyZVVuaXQgZ2V0Qnl0ZSgpOworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJ
ICovCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2YgZGlnaXRhbDogZ2lnYWJpdC4K
KyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2YgZGlnaXRhbDogZ2lnYWJpdC4KICAg
ICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAq
IEFsc28gc2VlIHtAbGluayAjZ2V0R2lnYWJpdCgpfS4KICAgICAgKiBAcGFyYW0gc3RhdHVzIElD
VSBlcnJvciBjb2RlLgogICAgICAqIEBzdGFibGUgSUNVIDU0CiAgICAgICovCiAgICAgc3RhdGlj
IE1lYXN1cmVVbml0ICpjcmVhdGVHaWdhYml0KFVFcnJvckNvZGUgJnN0YXR1cyk7CiAKKyNpZm5k
ZWYgVV9ISURFX0RSQUZUX0FQSQorICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgdmFsdWUsIHVu
aXQgb2YgZGlnaXRhbDogZ2lnYWJpdC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2NyZWF0ZUdp
Z2FiaXQoKX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBNZWFz
dXJlVW5pdCBnZXRHaWdhYml0KCk7CisjZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKwog
ICAgIC8qKgotICAgICAqIFJldHVybnMgdW5pdCBvZiBkaWdpdGFsOiBnaWdhYnl0ZS4KKyAgICAg
KiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2YgZGlnaXRhbDogZ2lnYWJ5dGUuCiAgICAgICog
Q2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUgYW5kIG11c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNv
IHNlZSB7QGxpbmsgI2dldEdpZ2FieXRlKCl9LgogICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVy
cm9yIGNvZGUuCiAgICAgICogQHN0YWJsZSBJQ1UgNTQKICAgICAgKi8KICAgICBzdGF0aWMgTWVh
c3VyZVVuaXQgKmNyZWF0ZUdpZ2FieXRlKFVFcnJvckNvZGUgJnN0YXR1cyk7CiAKKyNpZm5kZWYg
VV9ISURFX0RSQUZUX0FQSQorICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgdmFsdWUsIHVuaXQg
b2YgZGlnaXRhbDogZ2lnYWJ5dGUuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNjcmVhdGVHaWdh
Ynl0ZSgpfS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgc3RhdGljIE1lYXN1
cmVVbml0IGdldEdpZ2FieXRlKCk7CisjZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKwog
ICAgIC8qKgotICAgICAqIFJldHVybnMgdW5pdCBvZiBkaWdpdGFsOiBraWxvYml0LgorICAgICAq
IFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiBkaWdpdGFsOiBraWxvYml0LgogICAgICAqIENh
bGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBz
ZWUge0BsaW5rICNnZXRLaWxvYml0KCl9LgogICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVycm9y
IGNvZGUuCiAgICAgICogQHN0YWJsZSBJQ1UgNTQKICAgICAgKi8KICAgICBzdGF0aWMgTWVhc3Vy
ZVVuaXQgKmNyZWF0ZUtpbG9iaXQoVUVycm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJ
REVfRFJBRlRfQVBJCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBk
aWdpdGFsOiBraWxvYml0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlS2lsb2JpdCgp
fS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0
IGdldEtpbG9iaXQoKTsKKyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLworCiAgICAgLyoq
Ci0gICAgICogUmV0dXJucyB1bml0IG9mIGRpZ2l0YWw6IGtpbG9ieXRlLgorICAgICAqIFJldHVy
bnMgYnkgcG9pbnRlciwgdW5pdCBvZiBkaWdpdGFsOiBraWxvYnl0ZS4KICAgICAgKiBDYWxsZXIg
b3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtA
bGluayAjZ2V0S2lsb2J5dGUoKX0uCiAgICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29k
ZS4KICAgICAgKiBAc3RhYmxlIElDVSA1NAogICAgICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5p
dCAqY3JlYXRlS2lsb2J5dGUoVUVycm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJREVf
RFJBRlRfQVBJCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB1bml0IG9mIGRpZ2l0YWw6IG1lZ2Fi
aXQuCisgICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBkaWdpdGFsOiBraWxvYnl0ZS4K
KyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2NyZWF0ZUtpbG9ieXRlKCl9LgorICAgICAqIEBkcmFm
dCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgZ2V0S2lsb2J5dGUoKTsK
KyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLworCisgICAgLyoqCisgICAgICogUmV0dXJu
cyBieSBwb2ludGVyLCB1bml0IG9mIGRpZ2l0YWw6IG1lZ2FiaXQuCiAgICAgICogQ2FsbGVyIG93
bnMgcmV0dXJuZWQgdmFsdWUgYW5kIG11c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNvIHNlZSB7QGxp
bmsgI2dldE1lZ2FiaXQoKX0uCiAgICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4K
ICAgICAgKiBAc3RhYmxlIElDVSA1NAogICAgICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAq
Y3JlYXRlTWVnYWJpdChVRXJyb3JDb2RlICZzdGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9EUkFG
VF9BUEkKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2YgZGlnaXRhbDogbWVnYWJ5dGUu
CisgICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBkaWdpdGFsOiBtZWdhYml0LgorICAg
ICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlTWVnYWJpdCgpfS4KKyAgICAgKiBAZHJhZnQgSUNV
IDY0CisgICAgICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0IGdldE1lZ2FiaXQoKTsKKyNlbmRp
ZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLworCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSBw
b2ludGVyLCB1bml0IG9mIGRpZ2l0YWw6IG1lZ2FieXRlLgogICAgICAqIENhbGxlciBvd25zIHJl
dHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNn
ZXRNZWdhYnl0ZSgpfS4KICAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgogICAg
ICAqIEBzdGFibGUgSUNVIDU0CiAgICAgICovCiAgICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVh
dGVNZWdhYnl0ZShVRXJyb3JDb2RlICZzdGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9EUkFGVF9B
UEkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9mIGRpZ2l0YWw6IG1l
Z2FieXRlLgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlTWVnYWJ5dGUoKX0uCisgICAg
ICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRNZWdh
Ynl0ZSgpOworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKKyNpZm5kZWYgVV9ISURF
X0RSQUZUX0FQSQogICAgIC8qKgotICAgICAqIFJldHVybnMgdW5pdCBvZiBkaWdpdGFsOiB0ZXJh
Yml0LgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiBkaWdpdGFsOiBwZXRhYnl0
ZS4KICAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBmcmVlIGl0Lgor
ICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0UGV0YWJ5dGUoKX0uCisgICAgICogQHBhcmFtIHN0
YXR1cyBJQ1UgZXJyb3IgY29kZS4KKyAgICAgKiBAZHJhZnQgSUNVIDYzCisgICAgICovCisgICAg
c3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVQZXRhYnl0ZShVRXJyb3JDb2RlICZzdGF0dXMpOwor
I2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQ
SQorICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgdmFsdWUsIHVuaXQgb2YgZGlnaXRhbDogcGV0
YWJ5dGUuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNjcmVhdGVQZXRhYnl0ZSgpfS4KKyAgICAg
KiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0IGdldFBldGFi
eXRlKCk7CisjZW5kaWYgLyogVV9ISURFX0RSQUZUX0FQSSAqLworCisgICAgLyoqCisgICAgICog
UmV0dXJucyBieSBwb2ludGVyLCB1bml0IG9mIGRpZ2l0YWw6IHRlcmFiaXQuCisgICAgICogQ2Fs
bGVyIG93bnMgcmV0dXJuZWQgdmFsdWUgYW5kIG11c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNvIHNl
ZSB7QGxpbmsgI2dldFRlcmFiaXQoKX0uCiAgICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3Ig
Y29kZS4KICAgICAgKiBAc3RhYmxlIElDVSA1NAogICAgICAqLwogICAgIHN0YXRpYyBNZWFzdXJl
VW5pdCAqY3JlYXRlVGVyYWJpdChVRXJyb3JDb2RlICZzdGF0dXMpOwogCisjaWZuZGVmIFVfSElE
RV9EUkFGVF9BUEkKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2YgZGlnaXRhbDogdGVy
YWJ5dGUuCisgICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBkaWdpdGFsOiB0ZXJhYml0
LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlVGVyYWJpdCgpfS4KKyAgICAgKiBAZHJh
ZnQgSUNVIDY0CisgICAgICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0IGdldFRlcmFiaXQoKTsK
KyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLworCisgICAgLyoqCisgICAgICogUmV0dXJu
cyBieSBwb2ludGVyLCB1bml0IG9mIGRpZ2l0YWw6IHRlcmFieXRlLgogICAgICAqIENhbGxlciBv
d25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUge0Bs
aW5rICNnZXRUZXJhYnl0ZSgpfS4KICAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2Rl
LgogICAgICAqIEBzdGFibGUgSUNVIDU0CiAgICAgICovCiAgICAgc3RhdGljIE1lYXN1cmVVbml0
ICpjcmVhdGVUZXJhYnl0ZShVRXJyb3JDb2RlICZzdGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9E
UkFGVF9BUEkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9mIGRpZ2l0
YWw6IHRlcmFieXRlLgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlVGVyYWJ5dGUoKX0u
CisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBn
ZXRUZXJhYnl0ZSgpOworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKICAgICAvKioK
LSAgICAgKiBSZXR1cm5zIHVuaXQgb2YgZHVyYXRpb246IGNlbnR1cnkuCisgICAgICogUmV0dXJu
cyBieSBwb2ludGVyLCB1bml0IG9mIGR1cmF0aW9uOiBjZW50dXJ5LgogICAgICAqIENhbGxlciBv
d25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUge0Bs
aW5rICNnZXRDZW50dXJ5KCl9LgogICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUu
CiAgICAgICogQHN0YWJsZSBJQ1UgNTYKICAgICAgKi8KICAgICBzdGF0aWMgTWVhc3VyZVVuaXQg
KmNyZWF0ZUNlbnR1cnkoVUVycm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJREVfRFJB
RlRfQVBJCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB1bml0IG9mIGR1cmF0aW9uOiBkYXkuCisg
ICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBkdXJhdGlvbjogY2VudHVyeS4KKyAgICAg
KiBBbHNvIHNlZSB7QGxpbmsgI2NyZWF0ZUNlbnR1cnkoKX0uCisgICAgICogQGRyYWZ0IElDVSA2
NAorICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRDZW50dXJ5KCk7CisjZW5kaWYg
IC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgcG9p
bnRlciwgdW5pdCBvZiBkdXJhdGlvbjogZGF5LgogICAgICAqIENhbGxlciBvd25zIHJldHVybmVk
IHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXREYXko
KX0uCiAgICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KICAgICAgKiBAc3RhYmxl
IElDVSA1MwogICAgICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlRGF5KFVFcnJv
ckNvZGUgJnN0YXR1cyk7CiAKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQogICAgIC8qKgotICAg
ICAqIFJldHVybnMgdW5pdCBvZiBkdXJhdGlvbjogaG91ci4KKyAgICAgKiBSZXR1cm5zIGJ5IHZh
bHVlLCB1bml0IG9mIGR1cmF0aW9uOiBkYXkuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNjcmVh
dGVEYXkoKX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBNZWFz
dXJlVW5pdCBnZXREYXkoKTsKKyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLworCisjaWZu
ZGVmIFVfSElERV9EUkFGVF9BUEkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIs
IHVuaXQgb2YgZHVyYXRpb246IGRheS1wZXJzb24uCiAgICAgICogQ2FsbGVyIG93bnMgcmV0dXJu
ZWQgdmFsdWUgYW5kIG11c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dldERh
eVBlcnNvbigpfS4KKyAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgorICAgICAq
IEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZURh
eVBlcnNvbihVRXJyb3JDb2RlICZzdGF0dXMpOworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJ
ICovCisKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQorICAgIC8qKgorICAgICAqIFJldHVybnMg
YnkgdmFsdWUsIHVuaXQgb2YgZHVyYXRpb246IGRheS1wZXJzb24uCisgICAgICogQWxzbyBzZWUg
e0BsaW5rICNjcmVhdGVEYXlQZXJzb24oKX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAq
LworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXREYXlQZXJzb24oKTsKKyNlbmRpZiAvKiBVX0hJ
REVfRFJBRlRfQVBJICovCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVu
aXQgb2YgZHVyYXRpb246IGhvdXIuCisgICAgICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUg
YW5kIG11c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dldEhvdXIoKX0uCiAg
ICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KICAgICAgKiBAc3RhYmxlIElDVSA1
MwogICAgICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlSG91cihVRXJyb3JDb2Rl
ICZzdGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKyAgICAvKioKKyAgICAgKiBS
ZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9mIGR1cmF0aW9uOiBob3VyLgorICAgICAqIEFsc28gc2Vl
IHtAbGluayAjY3JlYXRlSG91cigpfS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisg
ICAgc3RhdGljIE1lYXN1cmVVbml0IGdldEhvdXIoKTsKKyNlbmRpZiAgLyogVV9ISURFX0RSQUZU
X0FQSSAqLworCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB1bml0IG9mIGR1cmF0aW9uOiBtaWNy
b3NlY29uZC4KKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2YgZHVyYXRpb246IG1p
Y3Jvc2Vjb25kLgogICAgICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZy
ZWUgaXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRNaWNyb3NlY29uZCgpfS4KICAgICAg
KiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgogICAgICAqIEBzdGFibGUgSUNVIDU0CiAg
ICAgICovCiAgICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVNaWNyb3NlY29uZChVRXJyb3JD
b2RlICZzdGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKyAgICAvKioKKyAgICAg
KiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9mIGR1cmF0aW9uOiBtaWNyb3NlY29uZC4KKyAgICAg
KiBBbHNvIHNlZSB7QGxpbmsgI2NyZWF0ZU1pY3Jvc2Vjb25kKCl9LgorICAgICAqIEBkcmFmdCBJ
Q1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgZ2V0TWljcm9zZWNvbmQoKTsK
KyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLworCiAgICAgLyoqCi0gICAgICogUmV0dXJu
cyB1bml0IG9mIGR1cmF0aW9uOiBtaWxsaXNlY29uZC4KKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50
ZXIsIHVuaXQgb2YgZHVyYXRpb246IG1pbGxpc2Vjb25kLgogICAgICAqIENhbGxlciBvd25zIHJl
dHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNn
ZXRNaWxsaXNlY29uZCgpfS4KICAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgog
ICAgICAqIEBzdGFibGUgSUNVIDUzCiAgICAgICovCiAgICAgc3RhdGljIE1lYXN1cmVVbml0ICpj
cmVhdGVNaWxsaXNlY29uZChVRXJyb3JDb2RlICZzdGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9E
UkFGVF9BUEkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9mIGR1cmF0
aW9uOiBtaWxsaXNlY29uZC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2NyZWF0ZU1pbGxpc2Vj
b25kKCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3Vy
ZVVuaXQgZ2V0TWlsbGlzZWNvbmQoKTsKKyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLwor
CiAgICAgLyoqCi0gICAgICogUmV0dXJucyB1bml0IG9mIGR1cmF0aW9uOiBtaW51dGUuCisgICAg
ICogUmV0dXJucyBieSBwb2ludGVyLCB1bml0IG9mIGR1cmF0aW9uOiBtaW51dGUuCiAgICAgICog
Q2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUgYW5kIG11c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNv
IHNlZSB7QGxpbmsgI2dldE1pbnV0ZSgpfS4KICAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJv
ciBjb2RlLgogICAgICAqIEBzdGFibGUgSUNVIDUzCiAgICAgICovCiAgICAgc3RhdGljIE1lYXN1
cmVVbml0ICpjcmVhdGVNaW51dGUoVUVycm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJ
REVfRFJBRlRfQVBJCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBk
dXJhdGlvbjogbWludXRlLgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlTWludXRlKCl9
LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQg
Z2V0TWludXRlKCk7CisjZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKwogICAgIC8qKgot
ICAgICAqIFJldHVybnMgdW5pdCBvZiBkdXJhdGlvbjogbW9udGguCisgICAgICogUmV0dXJucyBi
eSBwb2ludGVyLCB1bml0IG9mIGR1cmF0aW9uOiBtb250aC4KICAgICAgKiBDYWxsZXIgb3ducyBy
ZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAj
Z2V0TW9udGgoKX0uCiAgICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KICAgICAg
KiBAc3RhYmxlIElDVSA1MwogICAgICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRl
TW9udGgoVUVycm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisg
ICAgLyoqCisgICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBkdXJhdGlvbjogbW9udGgu
CisgICAgICogQWxzbyBzZWUge0BsaW5rICNjcmVhdGVNb250aCgpfS4KKyAgICAgKiBAZHJhZnQg
SUNVIDY0CisgICAgICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0IGdldE1vbnRoKCk7CisjZW5k
aWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKworI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCiAg
ICAgLyoqCi0gICAgICogUmV0dXJucyB1bml0IG9mIGR1cmF0aW9uOiBuYW5vc2Vjb25kLgorICAg
ICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiBkdXJhdGlvbjogbW9udGgtcGVyc29uLgog
ICAgICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAg
ICogQWxzbyBzZWUge0BsaW5rICNnZXRNb250aFBlcnNvbigpfS4KKyAgICAgKiBAcGFyYW0gc3Rh
dHVzIElDVSBlcnJvciBjb2RlLgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBz
dGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZU1vbnRoUGVyc29uKFVFcnJvckNvZGUgJnN0YXR1cyk7
CisjZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKworI2lmbmRlZiBVX0hJREVfRFJBRlRf
QVBJCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBkdXJhdGlvbjog
bW9udGgtcGVyc29uLgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlTW9udGhQZXJzb24o
KX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5p
dCBnZXRNb250aFBlcnNvbigpOworI2VuZGlmIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKworICAg
IC8qKgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiBkdXJhdGlvbjogbmFub3Nl
Y29uZC4KKyAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBmcmVlIGl0
LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0TmFub3NlY29uZCgpfS4KICAgICAgKiBAcGFy
YW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgogICAgICAqIEBzdGFibGUgSUNVIDU0CiAgICAgICov
CiAgICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVOYW5vc2Vjb25kKFVFcnJvckNvZGUgJnN0
YXR1cyk7CiAKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQogICAgIC8qKgotICAgICAqIFJldHVy
bnMgdW5pdCBvZiBkdXJhdGlvbjogc2Vjb25kLgorICAgICAqIFJldHVybnMgYnkgdmFsdWUsIHVu
aXQgb2YgZHVyYXRpb246IG5hbm9zZWNvbmQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNjcmVh
dGVOYW5vc2Vjb25kKCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0
aWMgTWVhc3VyZVVuaXQgZ2V0TmFub3NlY29uZCgpOworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRf
QVBJICovCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2YgZHVy
YXRpb246IHNlY29uZC4KICAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVz
dCBmcmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0U2Vjb25kKCl9LgogICAgICAq
IEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCiAgICAgICogQHN0YWJsZSBJQ1UgNTMKICAg
ICAgKi8KICAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZVNlY29uZChVRXJyb3JDb2RlICZz
dGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKyAgICAvKioKKyAgICAgKiBSZXR1
cm5zIGJ5IHZhbHVlLCB1bml0IG9mIGR1cmF0aW9uOiBzZWNvbmQuCisgICAgICogQWxzbyBzZWUg
e0BsaW5rICNjcmVhdGVTZWNvbmQoKX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLwor
ICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRTZWNvbmQoKTsKKyNlbmRpZiAgLyogVV9ISURFX0RS
QUZUX0FQSSAqLworCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB1bml0IG9mIGR1cmF0aW9uOiB3
ZWVrLgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiBkdXJhdGlvbjogd2Vlay4K
ICAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAg
ICAqIEFsc28gc2VlIHtAbGluayAjZ2V0V2VlaygpfS4KICAgICAgKiBAcGFyYW0gc3RhdHVzIElD
VSBlcnJvciBjb2RlLgogICAgICAqIEBzdGFibGUgSUNVIDUzCiAgICAgICovCiAgICAgc3RhdGlj
IE1lYXN1cmVVbml0ICpjcmVhdGVXZWVrKFVFcnJvckNvZGUgJnN0YXR1cyk7CiAKKyNpZm5kZWYg
VV9ISURFX0RSQUZUX0FQSQorICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgdmFsdWUsIHVuaXQg
b2YgZHVyYXRpb246IHdlZWsuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNjcmVhdGVXZWVrKCl9
LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQg
Z2V0V2VlaygpOworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKKyNpZm5kZWYgVV9I
SURFX0RSQUZUX0FQSQogICAgIC8qKgotICAgICAqIFJldHVybnMgdW5pdCBvZiBkdXJhdGlvbjog
eWVhci4KKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2YgZHVyYXRpb246IHdlZWst
cGVyc29uLgogICAgICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUg
aXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRXZWVrUGVyc29uKCl9LgorICAgICAqIEBw
YXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAq
LworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlV2Vla1BlcnNvbihVRXJyb3JDb2RlICZz
dGF0dXMpOworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKKyNpZm5kZWYgVV9ISURF
X0RSQUZUX0FQSQorICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgdmFsdWUsIHVuaXQgb2YgZHVy
YXRpb246IHdlZWstcGVyc29uLgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlV2Vla1Bl
cnNvbigpfS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgc3RhdGljIE1lYXN1
cmVVbml0IGdldFdlZWtQZXJzb24oKTsKKyNlbmRpZiAvKiBVX0hJREVfRFJBRlRfQVBJICovCisK
KyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2YgZHVyYXRpb246IHll
YXIuCisgICAgICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUgYW5kIG11c3QgZnJlZSBpdC4K
KyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dldFllYXIoKX0uCiAgICAgICogQHBhcmFtIHN0YXR1
cyBJQ1UgZXJyb3IgY29kZS4KICAgICAgKiBAc3RhYmxlIElDVSA1MwogICAgICAqLwogICAgIHN0
YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlWWVhcihVRXJyb3JDb2RlICZzdGF0dXMpOwogCisjaWZu
ZGVmIFVfSElERV9EUkFGVF9BUEkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1
bml0IG9mIGR1cmF0aW9uOiB5ZWFyLgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlWWVh
cigpfS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgc3RhdGljIE1lYXN1cmVV
bml0IGdldFllYXIoKTsKKyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLworCisjaWZuZGVm
IFVfSElERV9EUkFGVF9BUEkKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2YgZWxlY3Ry
aWM6IGFtcGVyZS4KKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2YgZHVyYXRpb246
IHllYXItcGVyc29uLgogICAgICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0
IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRZZWFyUGVyc29uKCl9LgorICAg
ICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCisgICAgICogQGRyYWZ0IElDVSA2NAor
ICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlWWVhclBlcnNvbihVRXJyb3JD
b2RlICZzdGF0dXMpOworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKKyNpZm5kZWYg
VV9ISURFX0RSQUZUX0FQSQorICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgdmFsdWUsIHVuaXQg
b2YgZHVyYXRpb246IHllYXItcGVyc29uLgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRl
WWVhclBlcnNvbigpfS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgc3RhdGlj
IE1lYXN1cmVVbml0IGdldFllYXJQZXJzb24oKTsKKyNlbmRpZiAvKiBVX0hJREVfRFJBRlRfQVBJ
ICovCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2YgZWxlY3Ry
aWM6IGFtcGVyZS4KKyAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBm
cmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0QW1wZXJlKCl9LgogICAgICAqIEBw
YXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCiAgICAgICogQHN0YWJsZSBJQ1UgNTQKICAgICAg
Ki8KICAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZUFtcGVyZShVRXJyb3JDb2RlICZzdGF0
dXMpOwogCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5z
IGJ5IHZhbHVlLCB1bml0IG9mIGVsZWN0cmljOiBhbXBlcmUuCisgICAgICogQWxzbyBzZWUge0Bs
aW5rICNjcmVhdGVBbXBlcmUoKX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAg
IHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRBbXBlcmUoKTsKKyNlbmRpZiAgLyogVV9ISURFX0RSQUZU
X0FQSSAqLworCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB1bml0IG9mIGVsZWN0cmljOiBtaWxs
aWFtcGVyZS4KKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2YgZWxlY3RyaWM6IG1p
bGxpYW1wZXJlLgogICAgICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZy
ZWUgaXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRNaWxsaWFtcGVyZSgpfS4KICAgICAg
KiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgogICAgICAqIEBzdGFibGUgSUNVIDU0CiAg
ICAgICovCiAgICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVNaWxsaWFtcGVyZShVRXJyb3JD
b2RlICZzdGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKyAgICAvKioKKyAgICAg
KiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9mIGVsZWN0cmljOiBtaWxsaWFtcGVyZS4KKyAgICAg
KiBBbHNvIHNlZSB7QGxpbmsgI2NyZWF0ZU1pbGxpYW1wZXJlKCl9LgorICAgICAqIEBkcmFmdCBJ
Q1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgZ2V0TWlsbGlhbXBlcmUoKTsK
KyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLworCiAgICAgLyoqCi0gICAgICogUmV0dXJu
cyB1bml0IG9mIGVsZWN0cmljOiBvaG0uCisgICAgICogUmV0dXJucyBieSBwb2ludGVyLCB1bml0
IG9mIGVsZWN0cmljOiBvaG0uCiAgICAgICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUgYW5k
IG11c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dldE9obSgpfS4KICAgICAg
KiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgogICAgICAqIEBzdGFibGUgSUNVIDU0CiAg
ICAgICovCiAgICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVPaG0oVUVycm9yQ29kZSAmc3Rh
dHVzKTsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLyoqCisgICAgICogUmV0dXJu
cyBieSB2YWx1ZSwgdW5pdCBvZiBlbGVjdHJpYzogb2htLgorICAgICAqIEFsc28gc2VlIHtAbGlu
ayAjY3JlYXRlT2htKCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0
aWMgTWVhc3VyZVVuaXQgZ2V0T2htKCk7CisjZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8K
KwogICAgIC8qKgotICAgICAqIFJldHVybnMgdW5pdCBvZiBlbGVjdHJpYzogdm9sdC4KKyAgICAg
KiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2YgZWxlY3RyaWM6IHZvbHQuCiAgICAgICogQ2Fs
bGVyIG93bnMgcmV0dXJuZWQgdmFsdWUgYW5kIG11c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNvIHNl
ZSB7QGxpbmsgI2dldFZvbHQoKX0uCiAgICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29k
ZS4KICAgICAgKiBAc3RhYmxlIElDVSA1NAogICAgICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5p
dCAqY3JlYXRlVm9sdChVRXJyb3JDb2RlICZzdGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9EUkFG
VF9BUEkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9mIGVsZWN0cmlj
OiB2b2x0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlVm9sdCgpfS4KKyAgICAgKiBA
ZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0IGdldFZvbHQoKTsK
KyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLworCisjaWZuZGVmIFVfSElERV9EUkFGVF9B
UEkKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2YgZW5lcmd5OiBjYWxvcmllLgorICAg
ICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiBlbmVyZ3k6IGJyaXRpc2gtdGhlcm1hbC11
bml0LgogICAgICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQu
CisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRCcml0aXNoVGhlcm1hbFVuaXQoKX0uCisgICAg
ICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0Cisg
ICAgICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVCcml0aXNoVGhlcm1hbFVuaXQo
VUVycm9yQ29kZSAmc3RhdHVzKTsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgdmFsdWUs
IHVuaXQgb2YgZW5lcmd5OiBicml0aXNoLXRoZXJtYWwtdW5pdC4KKyAgICAgKiBBbHNvIHNlZSB7
QGxpbmsgI2NyZWF0ZUJyaXRpc2hUaGVybWFsVW5pdCgpfS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0
CisgICAgICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0IGdldEJyaXRpc2hUaGVybWFsVW5pdCgp
OworI2VuZGlmIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKworICAgIC8qKgorICAgICAqIFJldHVy
bnMgYnkgcG9pbnRlciwgdW5pdCBvZiBlbmVyZ3k6IGNhbG9yaWUuCisgICAgICogQ2FsbGVyIG93
bnMgcmV0dXJuZWQgdmFsdWUgYW5kIG11c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNvIHNlZSB7QGxp
bmsgI2dldENhbG9yaWUoKX0uCiAgICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4K
ICAgICAgKiBAc3RhYmxlIElDVSA1NAogICAgICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAq
Y3JlYXRlQ2Fsb3JpZShVRXJyb3JDb2RlICZzdGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9EUkFG
VF9BUEkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9mIGVuZXJneTog
Y2Fsb3JpZS4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2NyZWF0ZUNhbG9yaWUoKX0uCisgICAg
ICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRDYWxv
cmllKCk7CisjZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKworI2lmbmRlZiBVX0hJREVf
RFJBRlRfQVBJCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB1bml0IG9mIGVuZXJneTogZm9vZGNh
bG9yaWUuCisgICAgICogUmV0dXJucyBieSBwb2ludGVyLCB1bml0IG9mIGVuZXJneTogZWxlY3Ry
b252b2x0LgogICAgICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUg
aXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRFbGVjdHJvbnZvbHQoKX0uCisgICAgICog
QHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAg
ICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVFbGVjdHJvbnZvbHQoVUVycm9yQ29k
ZSAmc3RhdHVzKTsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgdmFsdWUsIHVuaXQgb2Yg
ZW5lcmd5OiBlbGVjdHJvbnZvbHQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNjcmVhdGVFbGVj
dHJvbnZvbHQoKX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBN
ZWFzdXJlVW5pdCBnZXRFbGVjdHJvbnZvbHQoKTsKKyNlbmRpZiAvKiBVX0hJREVfRFJBRlRfQVBJ
ICovCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2YgZW5lcmd5
OiBmb29kY2Fsb3JpZS4KKyAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVz
dCBmcmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0Rm9vZGNhbG9yaWUoKX0uCiAg
ICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KICAgICAgKiBAc3RhYmxlIElDVSA1
NAogICAgICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlRm9vZGNhbG9yaWUoVUVy
cm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLyoqCisg
ICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBlbmVyZ3k6IGZvb2RjYWxvcmllLgorICAg
ICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlRm9vZGNhbG9yaWUoKX0uCisgICAgICogQGRyYWZ0
IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRGb29kY2Fsb3JpZSgp
OworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKICAgICAvKioKLSAgICAgKiBSZXR1
cm5zIHVuaXQgb2YgZW5lcmd5OiBqb3VsZS4KKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVu
aXQgb2YgZW5lcmd5OiBqb3VsZS4KICAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBh
bmQgbXVzdCBmcmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0Sm91bGUoKX0uCiAg
ICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KICAgICAgKiBAc3RhYmxlIElDVSA1
NAogICAgICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlSm91bGUoVUVycm9yQ29k
ZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLyoqCisgICAgICog
UmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBlbmVyZ3k6IGpvdWxlLgorICAgICAqIEFsc28gc2Vl
IHtAbGluayAjY3JlYXRlSm91bGUoKX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLwor
ICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRKb3VsZSgpOworI2VuZGlmICAvKiBVX0hJREVfRFJB
RlRfQVBJICovCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2YgZW5lcmd5OiBraWxv
Y2Fsb3JpZS4KKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2YgZW5lcmd5OiBraWxv
Y2Fsb3JpZS4KICAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBmcmVl
IGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0S2lsb2NhbG9yaWUoKX0uCiAgICAgICog
QHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KICAgICAgKiBAc3RhYmxlIElDVSA1NAogICAg
ICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlS2lsb2NhbG9yaWUoVUVycm9yQ29k
ZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCiAgICAgLyoqCi0gICAgICog
UmV0dXJucyB1bml0IG9mIGVuZXJneToga2lsb2pvdWxlLgorICAgICAqIFJldHVybnMgYnkgdmFs
dWUsIHVuaXQgb2YgZW5lcmd5OiBraWxvY2Fsb3JpZS4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsg
I2NyZWF0ZUtpbG9jYWxvcmllKCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAg
ICBzdGF0aWMgTWVhc3VyZVVuaXQgZ2V0S2lsb2NhbG9yaWUoKTsKKyNlbmRpZiAgLyogVV9ISURF
X0RSQUZUX0FQSSAqLworCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSBwb2ludGVyLCB1bml0
IG9mIGVuZXJneToga2lsb2pvdWxlLgogICAgICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVl
IGFuZCBtdXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRLaWxvam91bGUo
KX0uCiAgICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KICAgICAgKiBAc3RhYmxl
IElDVSA1NAogICAgICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlS2lsb2pvdWxl
KFVFcnJvckNvZGUgJnN0YXR1cyk7CiAKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQogICAgIC8q
KgotICAgICAqIFJldHVybnMgdW5pdCBvZiBlbmVyZ3k6IGtpbG93YXR0LWhvdXIuCisgICAgICog
UmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBlbmVyZ3k6IGtpbG9qb3VsZS4KKyAgICAgKiBBbHNv
IHNlZSB7QGxpbmsgI2NyZWF0ZUtpbG9qb3VsZSgpfS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0Cisg
ICAgICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0IGdldEtpbG9qb3VsZSgpOworI2VuZGlmICAv
KiBVX0hJREVfRFJBRlRfQVBJICovCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50
ZXIsIHVuaXQgb2YgZW5lcmd5OiBraWxvd2F0dC1ob3VyLgogICAgICAqIENhbGxlciBvd25zIHJl
dHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNn
ZXRLaWxvd2F0dEhvdXIoKX0uCiAgICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4K
ICAgICAgKiBAc3RhYmxlIElDVSA1NAogICAgICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAq
Y3JlYXRlS2lsb3dhdHRIb3VyKFVFcnJvckNvZGUgJnN0YXR1cyk7CiAKKyNpZm5kZWYgVV9ISURF
X0RSQUZUX0FQSQorICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgdmFsdWUsIHVuaXQgb2YgZW5l
cmd5OiBraWxvd2F0dC1ob3VyLgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlS2lsb3dh
dHRIb3VyKCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVh
c3VyZVVuaXQgZ2V0S2lsb3dhdHRIb3VyKCk7CisjZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkg
Ki8KKworI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLyoqCisgICAgICogUmV0dXJucyBi
eSBwb2ludGVyLCB1bml0IG9mIGZvcmNlOiBuZXd0b24uCisgICAgICogQ2FsbGVyIG93bnMgcmV0
dXJuZWQgdmFsdWUgYW5kIG11c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dl
dE5ld3RvbigpfS4KKyAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgorICAgICAq
IEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZU5l
d3RvbihVRXJyb3JDb2RlICZzdGF0dXMpOworCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSB2
YWx1ZSwgdW5pdCBvZiBmb3JjZTogbmV3dG9uLgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3Jl
YXRlTmV3dG9uKCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMg
TWVhc3VyZVVuaXQgZ2V0TmV3dG9uKCk7CisjZW5kaWYgLyogVV9ISURFX0RSQUZUX0FQSSAqLwor
CisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHBv
aW50ZXIsIHVuaXQgb2YgZm9yY2U6IHBvdW5kLWZvcmNlLgorICAgICAqIENhbGxlciBvd25zIHJl
dHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNn
ZXRQb3VuZEZvcmNlKCl9LgorICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCisg
ICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3Jl
YXRlUG91bmRGb3JjZShVRXJyb3JDb2RlICZzdGF0dXMpOworCisgICAgLyoqCisgICAgICogUmV0
dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBmb3JjZTogcG91bmQtZm9yY2UuCisgICAgICogQWxzbyBz
ZWUge0BsaW5rICNjcmVhdGVQb3VuZEZvcmNlKCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAg
ICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgZ2V0UG91bmRGb3JjZSgpOworI2VuZGlmIC8q
IFVfSElERV9EUkFGVF9BUEkgKi8KKwogICAgIC8qKgotICAgICAqIFJldHVybnMgdW5pdCBvZiBm
cmVxdWVuY3k6IGdpZ2FoZXJ0ei4KKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2Yg
ZnJlcXVlbmN5OiBnaWdhaGVydHouCiAgICAgICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUg
YW5kIG11c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dldEdpZ2FoZXJ0eigp
fS4KICAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgogICAgICAqIEBzdGFibGUg
SUNVIDU0CiAgICAgICovCiAgICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVHaWdhaGVydHoo
VUVycm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCiAgICAgLyoq
Ci0gICAgICogUmV0dXJucyB1bml0IG9mIGZyZXF1ZW5jeTogaGVydHouCisgICAgICogUmV0dXJu
cyBieSB2YWx1ZSwgdW5pdCBvZiBmcmVxdWVuY3k6IGdpZ2FoZXJ0ei4KKyAgICAgKiBBbHNvIHNl
ZSB7QGxpbmsgI2NyZWF0ZUdpZ2FoZXJ0eigpfS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAg
ICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0IGdldEdpZ2FoZXJ0eigpOworI2VuZGlmICAvKiBV
X0hJREVfRFJBRlRfQVBJICovCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIs
IHVuaXQgb2YgZnJlcXVlbmN5OiBoZXJ0ei4KICAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2
YWx1ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0SGVydHoo
KX0uCiAgICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KICAgICAgKiBAc3RhYmxl
IElDVSA1NAogICAgICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlSGVydHooVUVy
cm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCiAgICAgLyoqCi0g
ICAgICogUmV0dXJucyB1bml0IG9mIGZyZXF1ZW5jeToga2lsb2hlcnR6LgorICAgICAqIFJldHVy
bnMgYnkgdmFsdWUsIHVuaXQgb2YgZnJlcXVlbmN5OiBoZXJ0ei4KKyAgICAgKiBBbHNvIHNlZSB7
QGxpbmsgI2NyZWF0ZUhlcnR6KCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAg
ICBzdGF0aWMgTWVhc3VyZVVuaXQgZ2V0SGVydHooKTsKKyNlbmRpZiAgLyogVV9ISURFX0RSQUZU
X0FQSSAqLworCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSBwb2ludGVyLCB1bml0IG9mIGZy
ZXF1ZW5jeToga2lsb2hlcnR6LgogICAgICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFu
ZCBtdXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRLaWxvaGVydHooKX0u
CiAgICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KICAgICAgKiBAc3RhYmxlIElD
VSA1NAogICAgICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlS2lsb2hlcnR6KFVF
cnJvckNvZGUgJnN0YXR1cyk7CiAKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQorICAgIC8qKgor
ICAgICAqIFJldHVybnMgYnkgdmFsdWUsIHVuaXQgb2YgZnJlcXVlbmN5OiBraWxvaGVydHouCisg
ICAgICogQWxzbyBzZWUge0BsaW5rICNjcmVhdGVLaWxvaGVydHooKX0uCisgICAgICogQGRyYWZ0
IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRLaWxvaGVydHooKTsK
KyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLworCiAgICAgLyoqCi0gICAgICogUmV0dXJu
cyB1bml0IG9mIGZyZXF1ZW5jeTogbWVnYWhlcnR6LgorICAgICAqIFJldHVybnMgYnkgcG9pbnRl
ciwgdW5pdCBvZiBmcmVxdWVuY3k6IG1lZ2FoZXJ0ei4KICAgICAgKiBDYWxsZXIgb3ducyByZXR1
cm5lZCB2YWx1ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0
TWVnYWhlcnR6KCl9LgogICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCiAgICAg
ICogQHN0YWJsZSBJQ1UgNTQKICAgICAgKi8KICAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0
ZU1lZ2FoZXJ0eihVRXJyb3JDb2RlICZzdGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9EUkFGVF9B
UEkKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2YgbGVuZ3RoOiBhc3Ryb25vbWljYWwt
dW5pdC4KKyAgICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9mIGZyZXF1ZW5jeTogbWVnYWhl
cnR6LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlTWVnYWhlcnR6KCl9LgorICAgICAq
IEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgZ2V0TWVnYWhl
cnR6KCk7CisjZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKworICAgIC8qKgorICAgICAq
IFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiBsZW5ndGg6IGFzdHJvbm9taWNhbC11bml0Lgog
ICAgICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAg
ICogQWxzbyBzZWUge0BsaW5rICNnZXRBc3Ryb25vbWljYWxVbml0KCl9LgogICAgICAqIEBwYXJh
bSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCiAgICAgICogQHN0YWJsZSBJQ1UgNTQKICAgICAgKi8K
ICAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZUFzdHJvbm9taWNhbFVuaXQoVUVycm9yQ29k
ZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLyoqCisgICAgICog
UmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBsZW5ndGg6IGFzdHJvbm9taWNhbC11bml0LgorICAg
ICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlQXN0cm9ub21pY2FsVW5pdCgpfS4KKyAgICAgKiBA
ZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0IGdldEFzdHJvbm9t
aWNhbFVuaXQoKTsKKyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLworCiAgICAgLyoqCi0g
ICAgICogUmV0dXJucyB1bml0IG9mIGxlbmd0aDogY2VudGltZXRlci4KKyAgICAgKiBSZXR1cm5z
IGJ5IHBvaW50ZXIsIHVuaXQgb2YgbGVuZ3RoOiBjZW50aW1ldGVyLgogICAgICAqIENhbGxlciBv
d25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUge0Bs
aW5rICNnZXRDZW50aW1ldGVyKCl9LgogICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNv
ZGUuCiAgICAgICogQHN0YWJsZSBJQ1UgNTMKICAgICAgKi8KICAgICBzdGF0aWMgTWVhc3VyZVVu
aXQgKmNyZWF0ZUNlbnRpbWV0ZXIoVUVycm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJ
REVfRFJBRlRfQVBJCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBs
ZW5ndGg6IGNlbnRpbWV0ZXIuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNjcmVhdGVDZW50aW1l
dGVyKCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3Vy
ZVVuaXQgZ2V0Q2VudGltZXRlcigpOworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCisK
ICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2YgbGVuZ3RoOiBkZWNpbWV0ZXIuCisgICAg
ICogUmV0dXJucyBieSBwb2ludGVyLCB1bml0IG9mIGxlbmd0aDogZGVjaW1ldGVyLgogICAgICAq
IENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAgICogQWxz
byBzZWUge0BsaW5rICNnZXREZWNpbWV0ZXIoKX0uCiAgICAgICogQHBhcmFtIHN0YXR1cyBJQ1Ug
ZXJyb3IgY29kZS4KICAgICAgKiBAc3RhYmxlIElDVSA1NAogICAgICAqLwogICAgIHN0YXRpYyBN
ZWFzdXJlVW5pdCAqY3JlYXRlRGVjaW1ldGVyKFVFcnJvckNvZGUgJnN0YXR1cyk7CiAKKyNpZm5k
ZWYgVV9ISURFX0RSQUZUX0FQSQorICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgdmFsdWUsIHVu
aXQgb2YgbGVuZ3RoOiBkZWNpbWV0ZXIuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNjcmVhdGVE
ZWNpbWV0ZXIoKX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBN
ZWFzdXJlVW5pdCBnZXREZWNpbWV0ZXIoKTsKKyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAq
LworCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB1bml0IG9mIGxlbmd0aDogZmF0aG9tLgorICAg
ICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiBsZW5ndGg6IGZhdGhvbS4KICAgICAgKiBD
YWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAqIEFsc28g
c2VlIHtAbGluayAjZ2V0RmF0aG9tKCl9LgogICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVycm9y
IGNvZGUuCiAgICAgICogQHN0YWJsZSBJQ1UgNTQKICAgICAgKi8KICAgICBzdGF0aWMgTWVhc3Vy
ZVVuaXQgKmNyZWF0ZUZhdGhvbShVRXJyb3JDb2RlICZzdGF0dXMpOwogCisjaWZuZGVmIFVfSElE
RV9EUkFGVF9BUEkKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2YgbGVuZ3RoOiBmb290
LgorICAgICAqIFJldHVybnMgYnkgdmFsdWUsIHVuaXQgb2YgbGVuZ3RoOiBmYXRob20uCisgICAg
ICogQWxzbyBzZWUge0BsaW5rICNjcmVhdGVGYXRob20oKX0uCisgICAgICogQGRyYWZ0IElDVSA2
NAorICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRGYXRob20oKTsKKyNlbmRpZiAg
LyogVV9ISURFX0RSQUZUX0FQSSAqLworCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSBwb2lu
dGVyLCB1bml0IG9mIGxlbmd0aDogZm9vdC4KICAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2
YWx1ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0Rm9vdCgp
fS4KICAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgogICAgICAqIEBzdGFibGUg
SUNVIDUzCiAgICAgICovCiAgICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVGb290KFVFcnJv
ckNvZGUgJnN0YXR1cyk7CiAKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQorICAgIC8qKgorICAg
ICAqIFJldHVybnMgYnkgdmFsdWUsIHVuaXQgb2YgbGVuZ3RoOiBmb290LgorICAgICAqIEFsc28g
c2VlIHtAbGluayAjY3JlYXRlRm9vdCgpfS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICov
CisgICAgc3RhdGljIE1lYXN1cmVVbml0IGdldEZvb3QoKTsKKyNlbmRpZiAgLyogVV9ISURFX0RS
QUZUX0FQSSAqLworCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB1bml0IG9mIGxlbmd0aDogZnVy
bG9uZy4KKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2YgbGVuZ3RoOiBmdXJsb25n
LgogICAgICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisg
ICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRGdXJsb25nKCl9LgogICAgICAqIEBwYXJhbSBzdGF0
dXMgSUNVIGVycm9yIGNvZGUuCiAgICAgICogQHN0YWJsZSBJQ1UgNTQKICAgICAgKi8KICAgICBz
dGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZUZ1cmxvbmcoVUVycm9yQ29kZSAmc3RhdHVzKTsKIAor
I2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSB2YWx1
ZSwgdW5pdCBvZiBsZW5ndGg6IGZ1cmxvbmcuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNjcmVh
dGVGdXJsb25nKCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMg
TWVhc3VyZVVuaXQgZ2V0RnVybG9uZygpOworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICov
CisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2YgbGVuZ3RoOiBpbmNoLgorICAgICAq
IFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiBsZW5ndGg6IGluY2guCiAgICAgICogQ2FsbGVy
IG93bnMgcmV0dXJuZWQgdmFsdWUgYW5kIG11c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNvIHNlZSB7
QGxpbmsgI2dldEluY2goKX0uCiAgICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4K
ICAgICAgKiBAc3RhYmxlIElDVSA1MwogICAgICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAq
Y3JlYXRlSW5jaChVRXJyb3JDb2RlICZzdGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9EUkFGVF9B
UEkKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2YgbGVuZ3RoOiBraWxvbWV0ZXIuCisg
ICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBsZW5ndGg6IGluY2guCisgICAgICogQWxz
byBzZWUge0BsaW5rICNjcmVhdGVJbmNoKCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAg
Ki8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgZ2V0SW5jaCgpOworI2VuZGlmICAvKiBVX0hJREVf
RFJBRlRfQVBJICovCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQg
b2YgbGVuZ3RoOiBraWxvbWV0ZXIuCiAgICAgICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUg
YW5kIG11c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dldEtpbG9tZXRlcigp
fS4KICAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgogICAgICAqIEBzdGFibGUg
SUNVIDUzCiAgICAgICovCiAgICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVLaWxvbWV0ZXIo
VUVycm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLyoq
CisgICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBsZW5ndGg6IGtpbG9tZXRlci4KKyAg
ICAgKiBBbHNvIHNlZSB7QGxpbmsgI2NyZWF0ZUtpbG9tZXRlcigpfS4KKyAgICAgKiBAZHJhZnQg
SUNVIDY0CisgICAgICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0IGdldEtpbG9tZXRlcigpOwor
I2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5z
IHVuaXQgb2YgbGVuZ3RoOiBsaWdodC15ZWFyLgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwg
dW5pdCBvZiBsZW5ndGg6IGxpZ2h0LXllYXIuCiAgICAgICogQ2FsbGVyIG93bnMgcmV0dXJuZWQg
dmFsdWUgYW5kIG11c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dldExpZ2h0
WWVhcigpfS4KICAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgogICAgICAqIEBz
dGFibGUgSUNVIDUzCiAgICAgICovCiAgICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVMaWdo
dFllYXIoVUVycm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCiAg
ICAgLyoqCi0gICAgICogUmV0dXJucyB1bml0IG9mIGxlbmd0aDogbWV0ZXIuCisgICAgICogUmV0
dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBsZW5ndGg6IGxpZ2h0LXllYXIuCisgICAgICogQWxzbyBz
ZWUge0BsaW5rICNjcmVhdGVMaWdodFllYXIoKX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAg
ICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRMaWdodFllYXIoKTsKKyNlbmRpZiAgLyog
VV9ISURFX0RSQUZUX0FQSSAqLworCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSBwb2ludGVy
LCB1bml0IG9mIGxlbmd0aDogbWV0ZXIuCiAgICAgICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFs
dWUgYW5kIG11c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dldE1ldGVyKCl9
LgogICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCiAgICAgICogQHN0YWJsZSBJ
Q1UgNTMKICAgICAgKi8KICAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZU1ldGVyKFVFcnJv
ckNvZGUgJnN0YXR1cyk7CiAKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQorICAgIC8qKgorICAg
ICAqIFJldHVybnMgYnkgdmFsdWUsIHVuaXQgb2YgbGVuZ3RoOiBtZXRlci4KKyAgICAgKiBBbHNv
IHNlZSB7QGxpbmsgI2NyZWF0ZU1ldGVyKCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAg
Ki8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgZ2V0TWV0ZXIoKTsKKyNlbmRpZiAgLyogVV9ISURF
X0RSQUZUX0FQSSAqLworCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB1bml0IG9mIGxlbmd0aDog
bWljcm9tZXRlci4KKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2YgbGVuZ3RoOiBt
aWNyb21ldGVyLgogICAgICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZy
ZWUgaXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRNaWNyb21ldGVyKCl9LgogICAgICAq
IEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCiAgICAgICogQHN0YWJsZSBJQ1UgNTQKICAg
ICAgKi8KICAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZU1pY3JvbWV0ZXIoVUVycm9yQ29k
ZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCiAgICAgLyoqCi0gICAgICog
UmV0dXJucyB1bml0IG9mIGxlbmd0aDogbWlsZS4KKyAgICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1
bml0IG9mIGxlbmd0aDogbWljcm9tZXRlci4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2NyZWF0
ZU1pY3JvbWV0ZXIoKX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRp
YyBNZWFzdXJlVW5pdCBnZXRNaWNyb21ldGVyKCk7CisjZW5kaWYgIC8qIFVfSElERV9EUkFGVF9B
UEkgKi8KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiBsZW5n
dGg6IG1pbGUuCiAgICAgICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUgYW5kIG11c3QgZnJl
ZSBpdC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dldE1pbGUoKX0uCiAgICAgICogQHBhcmFt
IHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KICAgICAgKiBAc3RhYmxlIElDVSA1MwogICAgICAqLwog
ICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlTWlsZShVRXJyb3JDb2RlICZzdGF0dXMpOwog
CisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHZh
bHVlLCB1bml0IG9mIGxlbmd0aDogbWlsZS4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2NyZWF0
ZU1pbGUoKX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBNZWFz
dXJlVW5pdCBnZXRNaWxlKCk7CisjZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKwogICAg
IC8qKgotICAgICAqIFJldHVybnMgdW5pdCBvZiBsZW5ndGg6IG1pbGUtc2NhbmRpbmF2aWFuLgor
ICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiBsZW5ndGg6IG1pbGUtc2NhbmRpbmF2
aWFuLgogICAgICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQu
CisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRNaWxlU2NhbmRpbmF2aWFuKCl9LgogICAgICAq
IEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCiAgICAgICogQHN0YWJsZSBJQ1UgNTYKICAg
ICAgKi8KICAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZU1pbGVTY2FuZGluYXZpYW4oVUVy
cm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCiAgICAgLyoqCi0g
ICAgICogUmV0dXJucyB1bml0IG9mIGxlbmd0aDogbWlsbGltZXRlci4KKyAgICAgKiBSZXR1cm5z
IGJ5IHZhbHVlLCB1bml0IG9mIGxlbmd0aDogbWlsZS1zY2FuZGluYXZpYW4uCisgICAgICogQWxz
byBzZWUge0BsaW5rICNjcmVhdGVNaWxlU2NhbmRpbmF2aWFuKCl9LgorICAgICAqIEBkcmFmdCBJ
Q1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgZ2V0TWlsZVNjYW5kaW5hdmlh
bigpOworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKKyAgICAvKioKKyAgICAgKiBS
ZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2YgbGVuZ3RoOiBtaWxsaW1ldGVyLgogICAgICAqIENh
bGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBz
ZWUge0BsaW5rICNnZXRNaWxsaW1ldGVyKCl9LgogICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVy
cm9yIGNvZGUuCiAgICAgICogQHN0YWJsZSBJQ1UgNTMKICAgICAgKi8KLSAgICBzdGF0aWMgTWVh
c3VyZVVuaXQgKmNyZWF0ZU1pbGxpbWV0ZXIoVUVycm9yQ29kZSAmc3RhdHVzKTsKKyAgICBzdGF0
aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZU1pbGxpbWV0ZXIoVUVycm9yQ29kZSAmc3RhdHVzKTsKKwor
I2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSB2YWx1
ZSwgdW5pdCBvZiBsZW5ndGg6IG1pbGxpbWV0ZXIuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNj
cmVhdGVNaWxsaW1ldGVyKCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBz
dGF0aWMgTWVhc3VyZVVuaXQgZ2V0TWlsbGltZXRlcigpOworI2VuZGlmICAvKiBVX0hJREVfRFJB
RlRfQVBJICovCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2Yg
bGVuZ3RoOiBuYW5vbWV0ZXIuCisgICAgICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUgYW5k
IG11c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dldE5hbm9tZXRlcigpfS4K
KyAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgorICAgICAqIEBzdGFibGUgSUNV
IDU0CisgICAgICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVOYW5vbWV0ZXIoVUVy
cm9yQ29kZSAmc3RhdHVzKTsKKworI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLyoqCisg
ICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBsZW5ndGg6IG5hbm9tZXRlci4KKyAgICAg
KiBBbHNvIHNlZSB7QGxpbmsgI2NyZWF0ZU5hbm9tZXRlcigpfS4KKyAgICAgKiBAZHJhZnQgSUNV
IDY0CisgICAgICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0IGdldE5hbm9tZXRlcigpOworI2Vu
ZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5
IHBvaW50ZXIsIHVuaXQgb2YgbGVuZ3RoOiBuYXV0aWNhbC1taWxlLgorICAgICAqIENhbGxlciBv
d25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUge0Bs
aW5rICNnZXROYXV0aWNhbE1pbGUoKX0uCisgICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3Ig
Y29kZS4KKyAgICAgKiBAc3RhYmxlIElDVSA1NAorICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJl
VW5pdCAqY3JlYXRlTmF1dGljYWxNaWxlKFVFcnJvckNvZGUgJnN0YXR1cyk7CisKKyNpZm5kZWYg
VV9ISURFX0RSQUZUX0FQSQorICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgdmFsdWUsIHVuaXQg
b2YgbGVuZ3RoOiBuYXV0aWNhbC1taWxlLgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRl
TmF1dGljYWxNaWxlKCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0
aWMgTWVhc3VyZVVuaXQgZ2V0TmF1dGljYWxNaWxlKCk7CisjZW5kaWYgIC8qIFVfSElERV9EUkFG
VF9BUEkgKi8KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiBs
ZW5ndGg6IHBhcnNlYy4KKyAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVz
dCBmcmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0UGFyc2VjKCl9LgorICAgICAq
IEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCisgICAgICogQHN0YWJsZSBJQ1UgNTQKKyAg
ICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZVBhcnNlYyhVRXJyb3JDb2RlICZz
dGF0dXMpOworCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKyAgICAvKioKKyAgICAgKiBSZXR1
cm5zIGJ5IHZhbHVlLCB1bml0IG9mIGxlbmd0aDogcGFyc2VjLgorICAgICAqIEFsc28gc2VlIHtA
bGluayAjY3JlYXRlUGFyc2VjKCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAg
ICBzdGF0aWMgTWVhc3VyZVVuaXQgZ2V0UGFyc2VjKCk7CisjZW5kaWYgIC8qIFVfSElERV9EUkFG
VF9BUEkgKi8KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiBs
ZW5ndGg6IHBpY29tZXRlci4KKyAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQg
bXVzdCBmcmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0UGljb21ldGVyKCl9Lgor
ICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCisgICAgICogQHN0YWJsZSBJQ1Ug
NTMKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZVBpY29tZXRlcihVRXJy
b3JDb2RlICZzdGF0dXMpOworCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKyAgICAvKioKKyAg
ICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9mIGxlbmd0aDogcGljb21ldGVyLgorICAgICAq
IEFsc28gc2VlIHtAbGluayAjY3JlYXRlUGljb21ldGVyKCl9LgorICAgICAqIEBkcmFmdCBJQ1Ug
NjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgZ2V0UGljb21ldGVyKCk7CisjZW5k
aWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYnkg
cG9pbnRlciwgdW5pdCBvZiBsZW5ndGg6IHBvaW50LgorICAgICAqIENhbGxlciBvd25zIHJldHVy
bmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRQ
b2ludCgpfS4KKyAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgorICAgICAqIEBz
dGFibGUgSUNVIDU5CisgICAgICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVQb2lu
dChVRXJyb3JDb2RlICZzdGF0dXMpOworCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKyAgICAv
KioKKyAgICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9mIGxlbmd0aDogcG9pbnQuCisgICAg
ICogQWxzbyBzZWUge0BsaW5rICNjcmVhdGVQb2ludCgpfS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0
CisgICAgICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0IGdldFBvaW50KCk7CisjZW5kaWYgIC8q
IFVfSElERV9EUkFGVF9BUEkgKi8KKworI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLyoq
CisgICAgICogUmV0dXJucyBieSBwb2ludGVyLCB1bml0IG9mIGxlbmd0aDogc29sYXItcmFkaXVz
LgorICAgICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisg
ICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRTb2xhclJhZGl1cygpfS4KKyAgICAgKiBAcGFyYW0g
c3RhdHVzIElDVSBlcnJvciBjb2RlLgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAg
ICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZVNvbGFyUmFkaXVzKFVFcnJvckNvZGUgJnN0YXR1
cyk7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9mIGxlbmd0aDog
c29sYXItcmFkaXVzLgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlU29sYXJSYWRpdXMo
KX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5p
dCBnZXRTb2xhclJhZGl1cygpOworI2VuZGlmIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKworICAg
IC8qKgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiBsZW5ndGg6IHlhcmQuCisg
ICAgICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUgYW5kIG11c3QgZnJlZSBpdC4KKyAgICAg
KiBBbHNvIHNlZSB7QGxpbmsgI2dldFlhcmQoKX0uCisgICAgICogQHBhcmFtIHN0YXR1cyBJQ1Ug
ZXJyb3IgY29kZS4KKyAgICAgKiBAc3RhYmxlIElDVSA1MworICAgICAqLworICAgIHN0YXRpYyBN
ZWFzdXJlVW5pdCAqY3JlYXRlWWFyZChVRXJyb3JDb2RlICZzdGF0dXMpOworCisjaWZuZGVmIFVf
SElERV9EUkFGVF9BUEkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9m
IGxlbmd0aDogeWFyZC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2NyZWF0ZVlhcmQoKX0uCisg
ICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRZ
YXJkKCk7CisjZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KIAogICAgIC8qKgotICAgICAq
IFJldHVybnMgdW5pdCBvZiBsZW5ndGg6IG5hbm9tZXRlci4KKyAgICAgKiBSZXR1cm5zIGJ5IHBv
aW50ZXIsIHVuaXQgb2YgbGlnaHQ6IGx1eC4KICAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2
YWx1ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0THV4KCl9
LgogICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCiAgICAgICogQHN0YWJsZSBJ
Q1UgNTQKICAgICAgKi8KLSAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZU5hbm9tZXRlcihV
RXJyb3JDb2RlICZzdGF0dXMpOworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlTHV4KFVF
cnJvckNvZGUgJnN0YXR1cyk7CiAKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQogICAgIC8qKgot
ICAgICAqIFJldHVybnMgdW5pdCBvZiBsZW5ndGg6IG5hdXRpY2FsLW1pbGUuCisgICAgICogUmV0
dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBsaWdodDogbHV4LgorICAgICAqIEFsc28gc2VlIHtAbGlu
ayAjY3JlYXRlTHV4KCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0
aWMgTWVhc3VyZVVuaXQgZ2V0THV4KCk7CisjZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8K
KworI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSBw
b2ludGVyLCB1bml0IG9mIGxpZ2h0OiBzb2xhci1sdW1pbm9zaXR5LgogICAgICAqIENhbGxlciBv
d25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUge0Bs
aW5rICNnZXRTb2xhckx1bWlub3NpdHkoKX0uCiAgICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJy
b3IgY29kZS4KLSAgICAgKiBAc3RhYmxlIElDVSA1NAorICAgICAqIEBkcmFmdCBJQ1UgNjQKICAg
ICAgKi8KLSAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZU5hdXRpY2FsTWlsZShVRXJyb3JD
b2RlICZzdGF0dXMpOworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlU29sYXJMdW1pbm9z
aXR5KFVFcnJvckNvZGUgJnN0YXR1cyk7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHZh
bHVlLCB1bml0IG9mIGxpZ2h0OiBzb2xhci1sdW1pbm9zaXR5LgorICAgICAqIEFsc28gc2VlIHtA
bGluayAjY3JlYXRlU29sYXJMdW1pbm9zaXR5KCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAg
ICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgZ2V0U29sYXJMdW1pbm9zaXR5KCk7CisjZW5k
aWYgLyogVV9ISURFX0RSQUZUX0FQSSAqLwogCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB1bml0
IG9mIGxlbmd0aDogcGFyc2VjLgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiBt
YXNzOiBjYXJhdC4KICAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBm
cmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0Q2FyYXQoKX0uCiAgICAgICogQHBh
cmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KICAgICAgKiBAc3RhYmxlIElDVSA1NAogICAgICAq
LwotICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlUGFyc2VjKFVFcnJvckNvZGUgJnN0YXR1
cyk7CisgICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVDYXJhdChVRXJyb3JDb2RlICZzdGF0
dXMpOwogCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKICAgICAvKioKLSAgICAgKiBSZXR1cm5z
IHVuaXQgb2YgbGVuZ3RoOiBwaWNvbWV0ZXIuCi0gICAgICogQ2FsbGVyIG93bnMgcmV0dXJuZWQg
dmFsdWUgYW5kIG11c3QgZnJlZSBpdC4KLSAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBj
b2RlLgotICAgICAqIEBzdGFibGUgSUNVIDUzCisgICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5p
dCBvZiBtYXNzOiBjYXJhdC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2NyZWF0ZUNhcmF0KCl9
LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKICAgICAgKi8KLSAgICBzdGF0aWMgTWVhc3VyZVVuaXQg
KmNyZWF0ZVBpY29tZXRlcihVRXJyb3JDb2RlICZzdGF0dXMpOworICAgIHN0YXRpYyBNZWFzdXJl
VW5pdCBnZXRDYXJhdCgpOworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCiAKKyNpZm5k
ZWYgVV9ISURFX0RSQUZUX0FQSQogICAgIC8qKgotICAgICAqIFJldHVybnMgdW5pdCBvZiBsZW5n
dGg6IHBvaW50LgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiBtYXNzOiBkYWx0
b24uCiAgICAgICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUgYW5kIG11c3QgZnJlZSBpdC4K
KyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dldERhbHRvbigpfS4KICAgICAgKiBAcGFyYW0gc3Rh
dHVzIElDVSBlcnJvciBjb2RlLgotICAgICAqIEBzdGFibGUgSUNVIDU5CisgICAgICogQGRyYWZ0
IElDVSA2NAogICAgICAqLwotICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlUG9pbnQoVUVy
cm9yQ29kZSAmc3RhdHVzKTsKKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZURhbHRvbihV
RXJyb3JDb2RlICZzdGF0dXMpOwogCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB1bml0IG9mIGxl
bmd0aDogeWFyZC4KLSAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBm
cmVlIGl0LgotICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCi0gICAgICogQHN0
YWJsZSBJQ1UgNTMKKyAgICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9mIG1hc3M6IGRhbHRv
bi4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2NyZWF0ZURhbHRvbigpfS4KKyAgICAgKiBAZHJh
ZnQgSUNVIDY0CiAgICAgICovCi0gICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVZYXJkKFVF
cnJvckNvZGUgJnN0YXR1cyk7CisgICAgc3RhdGljIE1lYXN1cmVVbml0IGdldERhbHRvbigpOwor
I2VuZGlmIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJ
CiAgICAgLyoqCi0gICAgICogUmV0dXJucyB1bml0IG9mIGxpZ2h0OiBsdXguCisgICAgICogUmV0
dXJucyBieSBwb2ludGVyLCB1bml0IG9mIG1hc3M6IGVhcnRoLW1hc3MuCiAgICAgICogQ2FsbGVy
IG93bnMgcmV0dXJuZWQgdmFsdWUgYW5kIG11c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNvIHNlZSB7
QGxpbmsgI2dldEVhcnRoTWFzcygpfS4KICAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBj
b2RlLgotICAgICAqIEBzdGFibGUgSUNVIDU0CisgICAgICogQGRyYWZ0IElDVSA2NAogICAgICAq
LwotICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlTHV4KFVFcnJvckNvZGUgJnN0YXR1cyk7
CisgICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVFYXJ0aE1hc3MoVUVycm9yQ29kZSAmc3Rh
dHVzKTsKIAogICAgIC8qKgotICAgICAqIFJldHVybnMgdW5pdCBvZiBtYXNzOiBjYXJhdC4KLSAg
ICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBmcmVlIGl0LgotICAgICAq
IEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCi0gICAgICogQHN0YWJsZSBJQ1UgNTQKKyAg
ICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9mIG1hc3M6IGVhcnRoLW1hc3MuCisgICAgICog
QWxzbyBzZWUge0BsaW5rICNjcmVhdGVFYXJ0aE1hc3MoKX0uCisgICAgICogQGRyYWZ0IElDVSA2
NAogICAgICAqLwotICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlQ2FyYXQoVUVycm9yQ29k
ZSAmc3RhdHVzKTsKKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgZ2V0RWFydGhNYXNzKCk7CisjZW5k
aWYgLyogVV9ISURFX0RSQUZUX0FQSSAqLwogCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB1bml0
IG9mIG1hc3M6IGdyYW0uCisgICAgICogUmV0dXJucyBieSBwb2ludGVyLCB1bml0IG9mIG1hc3M6
IGdyYW0uCiAgICAgICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUgYW5kIG11c3QgZnJlZSBp
dC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dldEdyYW0oKX0uCiAgICAgICogQHBhcmFtIHN0
YXR1cyBJQ1UgZXJyb3IgY29kZS4KICAgICAgKiBAc3RhYmxlIElDVSA1MwogICAgICAqLwogICAg
IHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlR3JhbShVRXJyb3JDb2RlICZzdGF0dXMpOwogCisj
aWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHZhbHVl
LCB1bml0IG9mIG1hc3M6IGdyYW0uCisgICAgICogQWxzbyBzZWUge0BsaW5rICNjcmVhdGVHcmFt
KCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVu
aXQgZ2V0R3JhbSgpOworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKICAgICAvKioK
LSAgICAgKiBSZXR1cm5zIHVuaXQgb2YgbWFzczoga2lsb2dyYW0uCisgICAgICogUmV0dXJucyBi
eSBwb2ludGVyLCB1bml0IG9mIG1hc3M6IGtpbG9ncmFtLgogICAgICAqIENhbGxlciBvd25zIHJl
dHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNn
ZXRLaWxvZ3JhbSgpfS4KICAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgogICAg
ICAqIEBzdGFibGUgSUNVIDUzCiAgICAgICovCiAgICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVh
dGVLaWxvZ3JhbShVRXJyb3JDb2RlICZzdGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9EUkFGVF9B
UEkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9mIG1hc3M6IGtpbG9n
cmFtLgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlS2lsb2dyYW0oKX0uCisgICAgICog
QGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRLaWxvZ3Jh
bSgpOworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKICAgICAvKioKLSAgICAgKiBS
ZXR1cm5zIHVuaXQgb2YgbWFzczogbWV0cmljLXRvbi4KKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50
ZXIsIHVuaXQgb2YgbWFzczogbWV0cmljLXRvbi4KICAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5l
ZCB2YWx1ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0TWV0
cmljVG9uKCl9LgogICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCiAgICAgICog
QHN0YWJsZSBJQ1UgNTQKICAgICAgKi8KICAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZU1l
dHJpY1RvbihVRXJyb3JDb2RlICZzdGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkK
ICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2YgbWFzczogbWljcm9ncmFtLgorICAgICAq
IFJldHVybnMgYnkgdmFsdWUsIHVuaXQgb2YgbWFzczogbWV0cmljLXRvbi4KKyAgICAgKiBBbHNv
IHNlZSB7QGxpbmsgI2NyZWF0ZU1ldHJpY1RvbigpfS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0Cisg
ICAgICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0IGdldE1ldHJpY1RvbigpOworI2VuZGlmICAv
KiBVX0hJREVfRFJBRlRfQVBJICovCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50
ZXIsIHVuaXQgb2YgbWFzczogbWljcm9ncmFtLgogICAgICAqIENhbGxlciBvd25zIHJldHVybmVk
IHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRNaWNy
b2dyYW0oKX0uCiAgICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KICAgICAgKiBA
c3RhYmxlIElDVSA1NAogICAgICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlTWlj
cm9ncmFtKFVFcnJvckNvZGUgJnN0YXR1cyk7CiAKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQor
ICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgdmFsdWUsIHVuaXQgb2YgbWFzczogbWljcm9ncmFt
LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlTWljcm9ncmFtKCl9LgorICAgICAqIEBk
cmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgZ2V0TWljcm9ncmFt
KCk7CisjZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKwogICAgIC8qKgotICAgICAqIFJl
dHVybnMgdW5pdCBvZiBtYXNzOiBtaWxsaWdyYW0uCisgICAgICogUmV0dXJucyBieSBwb2ludGVy
LCB1bml0IG9mIG1hc3M6IG1pbGxpZ3JhbS4KICAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2
YWx1ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0TWlsbGln
cmFtKCl9LgogICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCiAgICAgICogQHN0
YWJsZSBJQ1UgNTQKICAgICAgKi8KICAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZU1pbGxp
Z3JhbShVRXJyb3JDb2RlICZzdGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKyAg
ICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9mIG1hc3M6IG1pbGxpZ3JhbS4K
KyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2NyZWF0ZU1pbGxpZ3JhbSgpfS4KKyAgICAgKiBAZHJh
ZnQgSUNVIDY0CisgICAgICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0IGdldE1pbGxpZ3JhbSgp
OworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKICAgICAvKioKLSAgICAgKiBSZXR1
cm5zIHVuaXQgb2YgbWFzczogb3VuY2UuCisgICAgICogUmV0dXJucyBieSBwb2ludGVyLCB1bml0
IG9mIG1hc3M6IG91bmNlLgogICAgICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBt
dXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRPdW5jZSgpfS4KICAgICAg
KiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgogICAgICAqIEBzdGFibGUgSUNVIDUzCiAg
ICAgICovCiAgICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVPdW5jZShVRXJyb3JDb2RlICZz
dGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKyAgICAvKioKKyAgICAgKiBSZXR1
cm5zIGJ5IHZhbHVlLCB1bml0IG9mIG1hc3M6IG91bmNlLgorICAgICAqIEFsc28gc2VlIHtAbGlu
ayAjY3JlYXRlT3VuY2UoKX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0
YXRpYyBNZWFzdXJlVW5pdCBnZXRPdW5jZSgpOworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJ
ICovCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2YgbWFzczogb3VuY2UtdHJveS4K
KyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2YgbWFzczogb3VuY2UtdHJveS4KICAg
ICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAq
IEFsc28gc2VlIHtAbGluayAjZ2V0T3VuY2VUcm95KCl9LgogICAgICAqIEBwYXJhbSBzdGF0dXMg
SUNVIGVycm9yIGNvZGUuCiAgICAgICogQHN0YWJsZSBJQ1UgNTQKICAgICAgKi8KICAgICBzdGF0
aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZU91bmNlVHJveShVRXJyb3JDb2RlICZzdGF0dXMpOwogCisj
aWZuZGVmIFVfSElERV9EUkFGVF9BUEkKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2Yg
bWFzczogcG91bmQuCisgICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBtYXNzOiBvdW5j
ZS10cm95LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlT3VuY2VUcm95KCl9LgorICAg
ICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgZ2V0T3Vu
Y2VUcm95KCk7CisjZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKworICAgIC8qKgorICAg
ICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiBtYXNzOiBwb3VuZC4KICAgICAgKiBDYWxs
ZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAqIEFsc28gc2Vl
IHtAbGluayAjZ2V0UG91bmQoKX0uCiAgICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29k
ZS4KICAgICAgKiBAc3RhYmxlIElDVSA1MwogICAgICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5p
dCAqY3JlYXRlUG91bmQoVUVycm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJREVfRFJB
RlRfQVBJCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBtYXNzOiBw
b3VuZC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2NyZWF0ZVBvdW5kKCl9LgorICAgICAqIEBk
cmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgZ2V0UG91bmQoKTsK
KyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLworCisjaWZuZGVmIFVfSElERV9EUkFGVF9B
UEkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2YgbWFzczogc29s
YXItbWFzcy4KKyAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBmcmVl
IGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0U29sYXJNYXNzKCl9LgorICAgICAqIEBw
YXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAq
LworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlU29sYXJNYXNzKFVFcnJvckNvZGUgJnN0
YXR1cyk7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9mIG1hc3M6
IHNvbGFyLW1hc3MuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNjcmVhdGVTb2xhck1hc3MoKX0u
CisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBn
ZXRTb2xhck1hc3MoKTsKKyNlbmRpZiAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKICAgICAvKioK
LSAgICAgKiBSZXR1cm5zIHVuaXQgb2YgbWFzczogc3RvbmUuCisgICAgICogUmV0dXJucyBieSBw
b2ludGVyLCB1bml0IG9mIG1hc3M6IHN0b25lLgogICAgICAqIENhbGxlciBvd25zIHJldHVybmVk
IHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRTdG9u
ZSgpfS4KICAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgogICAgICAqIEBzdGFi
bGUgSUNVIDU0CiAgICAgICovCiAgICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVTdG9uZShV
RXJyb3JDb2RlICZzdGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKyAgICAvKioK
KyAgICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9mIG1hc3M6IHN0b25lLgorICAgICAqIEFs
c28gc2VlIHtAbGluayAjY3JlYXRlU3RvbmUoKX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAg
ICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRTdG9uZSgpOworI2VuZGlmICAvKiBVX0hJ
REVfRFJBRlRfQVBJICovCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2YgbWFzczog
dG9uLgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiBtYXNzOiB0b24uCiAgICAg
ICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUgYW5kIG11c3QgZnJlZSBpdC4KKyAgICAgKiBB
bHNvIHNlZSB7QGxpbmsgI2dldFRvbigpfS4KICAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJv
ciBjb2RlLgogICAgICAqIEBzdGFibGUgSUNVIDU0CiAgICAgICovCiAgICAgc3RhdGljIE1lYXN1
cmVVbml0ICpjcmVhdGVUb24oVUVycm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJREVf
RFJBRlRfQVBJCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBtYXNz
OiB0b24uCisgICAgICogQWxzbyBzZWUge0BsaW5rICNjcmVhdGVUb24oKX0uCisgICAgICogQGRy
YWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRUb24oKTsKKyNl
bmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLworCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB1
bml0IG9mIHBvd2VyOiBnaWdhd2F0dC4KKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQg
b2YgcG93ZXI6IGdpZ2F3YXR0LgogICAgICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFu
ZCBtdXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRHaWdhd2F0dCgpfS4K
ICAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgogICAgICAqIEBzdGFibGUgSUNV
IDU0CiAgICAgICovCiAgICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVHaWdhd2F0dChVRXJy
b3JDb2RlICZzdGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKICAgICAvKioKLSAg
ICAgKiBSZXR1cm5zIHVuaXQgb2YgcG93ZXI6IGhvcnNlcG93ZXIuCisgICAgICogUmV0dXJucyBi
eSB2YWx1ZSwgdW5pdCBvZiBwb3dlcjogZ2lnYXdhdHQuCisgICAgICogQWxzbyBzZWUge0BsaW5r
ICNjcmVhdGVHaWdhd2F0dCgpfS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAg
c3RhdGljIE1lYXN1cmVVbml0IGdldEdpZ2F3YXR0KCk7CisjZW5kaWYgIC8qIFVfSElERV9EUkFG
VF9BUEkgKi8KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiBw
b3dlcjogaG9yc2Vwb3dlci4KICAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQg
bXVzdCBmcmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0SG9yc2Vwb3dlcigpfS4K
ICAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgogICAgICAqIEBzdGFibGUgSUNV
IDUzCiAgICAgICovCiAgICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVIb3JzZXBvd2VyKFVF
cnJvckNvZGUgJnN0YXR1cyk7CiAKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQorICAgIC8qKgor
ICAgICAqIFJldHVybnMgYnkgdmFsdWUsIHVuaXQgb2YgcG93ZXI6IGhvcnNlcG93ZXIuCisgICAg
ICogQWxzbyBzZWUge0BsaW5rICNjcmVhdGVIb3JzZXBvd2VyKCl9LgorICAgICAqIEBkcmFmdCBJ
Q1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgZ2V0SG9yc2Vwb3dlcigpOwor
I2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5z
IHVuaXQgb2YgcG93ZXI6IGtpbG93YXR0LgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5p
dCBvZiBwb3dlcjoga2lsb3dhdHQuCiAgICAgICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUg
YW5kIG11c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dldEtpbG93YXR0KCl9
LgogICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCiAgICAgICogQHN0YWJsZSBJ
Q1UgNTMKICAgICAgKi8KICAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZUtpbG93YXR0KFVF
cnJvckNvZGUgJnN0YXR1cyk7CiAKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQorICAgIC8qKgor
ICAgICAqIFJldHVybnMgYnkgdmFsdWUsIHVuaXQgb2YgcG93ZXI6IGtpbG93YXR0LgorICAgICAq
IEFsc28gc2VlIHtAbGluayAjY3JlYXRlS2lsb3dhdHQoKX0uCisgICAgICogQGRyYWZ0IElDVSA2
NAorICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRLaWxvd2F0dCgpOworI2VuZGlm
ICAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHVuaXQg
b2YgcG93ZXI6IG1lZ2F3YXR0LgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiBw
b3dlcjogbWVnYXdhdHQuCiAgICAgICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUgYW5kIG11
c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dldE1lZ2F3YXR0KCl9LgogICAg
ICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCiAgICAgICogQHN0YWJsZSBJQ1UgNTQK
ICAgICAgKi8KICAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZU1lZ2F3YXR0KFVFcnJvckNv
ZGUgJnN0YXR1cyk7CiAKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQorICAgIC8qKgorICAgICAq
IFJldHVybnMgYnkgdmFsdWUsIHVuaXQgb2YgcG93ZXI6IG1lZ2F3YXR0LgorICAgICAqIEFsc28g
c2VlIHtAbGluayAjY3JlYXRlTWVnYXdhdHQoKX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAg
ICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRNZWdhd2F0dCgpOworI2VuZGlmICAvKiBV
X0hJREVfRFJBRlRfQVBJICovCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2YgcG93
ZXI6IG1pbGxpd2F0dC4KKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2YgcG93ZXI6
IG1pbGxpd2F0dC4KICAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBm
cmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0TWlsbGl3YXR0KCl9LgogICAgICAq
IEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCiAgICAgICogQHN0YWJsZSBJQ1UgNTQKICAg
ICAgKi8KICAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZU1pbGxpd2F0dChVRXJyb3JDb2Rl
ICZzdGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKICAgICAvKioKLSAgICAgKiBS
ZXR1cm5zIHVuaXQgb2YgcG93ZXI6IHdhdHQuCisgICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5p
dCBvZiBwb3dlcjogbWlsbGl3YXR0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlTWls
bGl3YXR0KCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVh
c3VyZVVuaXQgZ2V0TWlsbGl3YXR0KCk7CisjZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8K
KworICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiBwb3dlcjogd2F0
dC4KICAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBmcmVlIGl0Lgor
ICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0V2F0dCgpfS4KICAgICAgKiBAcGFyYW0gc3RhdHVz
IElDVSBlcnJvciBjb2RlLgogICAgICAqIEBzdGFibGUgSUNVIDUzCiAgICAgICovCiAgICAgc3Rh
dGljIE1lYXN1cmVVbml0ICpjcmVhdGVXYXR0KFVFcnJvckNvZGUgJnN0YXR1cyk7CiAKKyNpZm5k
ZWYgVV9ISURFX0RSQUZUX0FQSQorICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgdmFsdWUsIHVu
aXQgb2YgcG93ZXI6IHdhdHQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNjcmVhdGVXYXR0KCl9
LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQg
Z2V0V2F0dCgpOworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKKyNpZm5kZWYgVV9I
SURFX0RSQUZUX0FQSQorICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBv
ZiBwcmVzc3VyZTogYXRtb3NwaGVyZS4KKyAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1
ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0QXRtb3NwaGVy
ZSgpfS4KKyAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgorICAgICAqIEBkcmFm
dCBJQ1UgNjMKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZUF0bW9zcGhl
cmUoVUVycm9yQ29kZSAmc3RhdHVzKTsKKyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLwor
CisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHZh
bHVlLCB1bml0IG9mIHByZXNzdXJlOiBhdG1vc3BoZXJlLgorICAgICAqIEFsc28gc2VlIHtAbGlu
ayAjY3JlYXRlQXRtb3NwaGVyZSgpfS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisg
ICAgc3RhdGljIE1lYXN1cmVVbml0IGdldEF0bW9zcGhlcmUoKTsKKyNlbmRpZiAvKiBVX0hJREVf
RFJBRlRfQVBJICovCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2YgcHJlc3N1cmU6
IGhlY3RvcGFzY2FsLgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiBwcmVzc3Vy
ZTogaGVjdG9wYXNjYWwuCiAgICAgICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUgYW5kIG11
c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dldEhlY3RvcGFzY2FsKCl9Lgog
ICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCiAgICAgICogQHN0YWJsZSBJQ1Ug
NTMKICAgICAgKi8KICAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZUhlY3RvcGFzY2FsKFVF
cnJvckNvZGUgJnN0YXR1cyk7CiAKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQorICAgIC8qKgor
ICAgICAqIFJldHVybnMgYnkgdmFsdWUsIHVuaXQgb2YgcHJlc3N1cmU6IGhlY3RvcGFzY2FsLgor
ICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlSGVjdG9wYXNjYWwoKX0uCisgICAgICogQGRy
YWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRIZWN0b3Bhc2Nh
bCgpOworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKICAgICAvKioKLSAgICAgKiBS
ZXR1cm5zIHVuaXQgb2YgcHJlc3N1cmU6IGluY2gtaGcuCisgICAgICogUmV0dXJucyBieSBwb2lu
dGVyLCB1bml0IG9mIHByZXNzdXJlOiBpbmNoLWhnLgogICAgICAqIENhbGxlciBvd25zIHJldHVy
bmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRJ
bmNoSGcoKX0uCiAgICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KICAgICAgKiBA
c3RhYmxlIElDVSA1MwogICAgICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlSW5j
aEhnKFVFcnJvckNvZGUgJnN0YXR1cyk7CiAKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQorICAg
IC8qKgorICAgICAqIFJldHVybnMgYnkgdmFsdWUsIHVuaXQgb2YgcHJlc3N1cmU6IGluY2gtaGcu
CisgICAgICogQWxzbyBzZWUge0BsaW5rICNjcmVhdGVJbmNoSGcoKX0uCisgICAgICogQGRyYWZ0
IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRJbmNoSGcoKTsKKyNl
bmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLworCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkK
KyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2YgcHJlc3N1cmU6IGtp
bG9wYXNjYWwuCisgICAgICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUgYW5kIG11c3QgZnJl
ZSBpdC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dldEtpbG9wYXNjYWwoKX0uCisgICAgICog
QHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAg
ICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVLaWxvcGFzY2FsKFVFcnJvckNvZGUg
JnN0YXR1cyk7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9mIHBy
ZXNzdXJlOiBraWxvcGFzY2FsLgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlS2lsb3Bh
c2NhbCgpfS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgc3RhdGljIE1lYXN1
cmVVbml0IGdldEtpbG9wYXNjYWwoKTsKKyNlbmRpZiAvKiBVX0hJREVfRFJBRlRfQVBJICovCisK
KyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQorICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgcG9p
bnRlciwgdW5pdCBvZiBwcmVzc3VyZTogbWVnYXBhc2NhbC4KKyAgICAgKiBDYWxsZXIgb3ducyBy
ZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAj
Z2V0TWVnYXBhc2NhbCgpfS4KKyAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgor
ICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNy
ZWF0ZU1lZ2FwYXNjYWwoVUVycm9yQ29kZSAmc3RhdHVzKTsKKworICAgIC8qKgorICAgICAqIFJl
dHVybnMgYnkgdmFsdWUsIHVuaXQgb2YgcHJlc3N1cmU6IG1lZ2FwYXNjYWwuCisgICAgICogQWxz
byBzZWUge0BsaW5rICNjcmVhdGVNZWdhcGFzY2FsKCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQK
KyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgZ2V0TWVnYXBhc2NhbCgpOworI2VuZGlm
IC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKwogICAgIC8qKgotICAgICAqIFJldHVybnMgdW5pdCBv
ZiBwcmVzc3VyZTogbWlsbGliYXIuCisgICAgICogUmV0dXJucyBieSBwb2ludGVyLCB1bml0IG9m
IHByZXNzdXJlOiBtaWxsaWJhci4KICAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBh
bmQgbXVzdCBmcmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0TWlsbGliYXIoKX0u
CiAgICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KICAgICAgKiBAc3RhYmxlIElD
VSA1MwogICAgICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlTWlsbGliYXIoVUVy
cm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCiAgICAgLyoqCi0g
ICAgICogUmV0dXJucyB1bml0IG9mIHByZXNzdXJlOiBtaWxsaW1ldGVyLW9mLW1lcmN1cnkuCisg
ICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBwcmVzc3VyZTogbWlsbGliYXIuCisgICAg
ICogQWxzbyBzZWUge0BsaW5rICNjcmVhdGVNaWxsaWJhcigpfS4KKyAgICAgKiBAZHJhZnQgSUNV
IDY0CisgICAgICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0IGdldE1pbGxpYmFyKCk7CisjZW5k
aWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYnkg
cG9pbnRlciwgdW5pdCBvZiBwcmVzc3VyZTogbWlsbGltZXRlci1vZi1tZXJjdXJ5LgogICAgICAq
IENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAgICogQWxz
byBzZWUge0BsaW5rICNnZXRNaWxsaW1ldGVyT2ZNZXJjdXJ5KCl9LgogICAgICAqIEBwYXJhbSBz
dGF0dXMgSUNVIGVycm9yIGNvZGUuCiAgICAgICogQHN0YWJsZSBJQ1UgNTQKICAgICAgKi8KICAg
ICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZU1pbGxpbWV0ZXJPZk1lcmN1cnkoVUVycm9yQ29k
ZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLyoqCisgICAgICog
UmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBwcmVzc3VyZTogbWlsbGltZXRlci1vZi1tZXJjdXJ5
LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlTWlsbGltZXRlck9mTWVyY3VyeSgpfS4K
KyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0IGdl
dE1pbGxpbWV0ZXJPZk1lcmN1cnkoKTsKKyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLwor
CiAgICAgLyoqCi0gICAgICogUmV0dXJucyB1bml0IG9mIHByZXNzdXJlOiBwb3VuZC1wZXItc3F1
YXJlLWluY2guCisgICAgICogUmV0dXJucyBieSBwb2ludGVyLCB1bml0IG9mIHByZXNzdXJlOiBw
b3VuZC1wZXItc3F1YXJlLWluY2guCiAgICAgICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUg
YW5kIG11c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dldFBvdW5kUGVyU3F1
YXJlSW5jaCgpfS4KICAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgogICAgICAq
IEBzdGFibGUgSUNVIDU0CiAgICAgICovCiAgICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVQ
b3VuZFBlclNxdWFyZUluY2goVUVycm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJREVf
RFJBRlRfQVBJCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiBwcmVz
c3VyZTogcG91bmQtcGVyLXNxdWFyZS1pbmNoLgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3Jl
YXRlUG91bmRQZXJTcXVhcmVJbmNoKCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8K
KyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgZ2V0UG91bmRQZXJTcXVhcmVJbmNoKCk7CisjZW5kaWYg
IC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKwogICAgIC8qKgotICAgICAqIFJldHVybnMgdW5pdCBv
ZiBzcGVlZDoga2lsb21ldGVyLXBlci1ob3VyLgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwg
dW5pdCBvZiBzcGVlZDoga2lsb21ldGVyLXBlci1ob3VyLgogICAgICAqIENhbGxlciBvd25zIHJl
dHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNn
ZXRLaWxvbWV0ZXJQZXJIb3VyKCl9LgogICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNv
ZGUuCiAgICAgICogQHN0YWJsZSBJQ1UgNTMKICAgICAgKi8KICAgICBzdGF0aWMgTWVhc3VyZVVu
aXQgKmNyZWF0ZUtpbG9tZXRlclBlckhvdXIoVUVycm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRl
ZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5p
dCBvZiBzcGVlZDoga2lsb21ldGVyLXBlci1ob3VyLgorICAgICAqIEFsc28gc2VlIHtAbGluayAj
Y3JlYXRlS2lsb21ldGVyUGVySG91cigpfS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICov
CisgICAgc3RhdGljIE1lYXN1cmVVbml0IGdldEtpbG9tZXRlclBlckhvdXIoKTsKKyNlbmRpZiAg
LyogVV9ISURFX0RSQUZUX0FQSSAqLworCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB1bml0IG9m
IHNwZWVkOiBrbm90LgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiBzcGVlZDog
a25vdC4KICAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBmcmVlIGl0
LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0S25vdCgpfS4KICAgICAgKiBAcGFyYW0gc3Rh
dHVzIElDVSBlcnJvciBjb2RlLgogICAgICAqIEBzdGFibGUgSUNVIDU2CiAgICAgICovCiAgICAg
c3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVLbm90KFVFcnJvckNvZGUgJnN0YXR1cyk7CiAKKyNp
Zm5kZWYgVV9ISURFX0RSQUZUX0FQSQogICAgIC8qKgotICAgICAqIFJldHVybnMgdW5pdCBvZiBz
cGVlZDogbWV0ZXItcGVyLXNlY29uZC4KKyAgICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9m
IHNwZWVkOiBrbm90LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlS25vdCgpfS4KKyAg
ICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0IGdldEtu
b3QoKTsKKyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLworCisgICAgLyoqCisgICAgICog
UmV0dXJucyBieSBwb2ludGVyLCB1bml0IG9mIHNwZWVkOiBtZXRlci1wZXItc2Vjb25kLgogICAg
ICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAgICog
QWxzbyBzZWUge0BsaW5rICNnZXRNZXRlclBlclNlY29uZCgpfS4KICAgICAgKiBAcGFyYW0gc3Rh
dHVzIElDVSBlcnJvciBjb2RlLgogICAgICAqIEBzdGFibGUgSUNVIDUzCiAgICAgICovCiAgICAg
c3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVNZXRlclBlclNlY29uZChVRXJyb3JDb2RlICZzdGF0
dXMpOwogCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5z
IGJ5IHZhbHVlLCB1bml0IG9mIHNwZWVkOiBtZXRlci1wZXItc2Vjb25kLgorICAgICAqIEFsc28g
c2VlIHtAbGluayAjY3JlYXRlTWV0ZXJQZXJTZWNvbmQoKX0uCisgICAgICogQGRyYWZ0IElDVSA2
NAorICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRNZXRlclBlclNlY29uZCgpOwor
I2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5z
IHVuaXQgb2Ygc3BlZWQ6IG1pbGUtcGVyLWhvdXIuCisgICAgICogUmV0dXJucyBieSBwb2ludGVy
LCB1bml0IG9mIHNwZWVkOiBtaWxlLXBlci1ob3VyLgogICAgICAqIENhbGxlciBvd25zIHJldHVy
bmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRN
aWxlUGVySG91cigpfS4KICAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgogICAg
ICAqIEBzdGFibGUgSUNVIDUzCiAgICAgICovCiAgICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVh
dGVNaWxlUGVySG91cihVRXJyb3JDb2RlICZzdGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9EUkFG
VF9BUEkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9mIHNwZWVkOiBt
aWxlLXBlci1ob3VyLgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlTWlsZVBlckhvdXIo
KX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5p
dCBnZXRNaWxlUGVySG91cigpOworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKICAg
ICAvKioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2YgdGVtcGVyYXR1cmU6IGNlbHNpdXMuCisgICAg
ICogUmV0dXJucyBieSBwb2ludGVyLCB1bml0IG9mIHRlbXBlcmF0dXJlOiBjZWxzaXVzLgogICAg
ICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAgICog
QWxzbyBzZWUge0BsaW5rICNnZXRDZWxzaXVzKCl9LgogICAgICAqIEBwYXJhbSBzdGF0dXMgSUNV
IGVycm9yIGNvZGUuCiAgICAgICogQHN0YWJsZSBJQ1UgNTMKICAgICAgKi8KICAgICBzdGF0aWMg
TWVhc3VyZVVuaXQgKmNyZWF0ZUNlbHNpdXMoVUVycm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRl
ZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5p
dCBvZiB0ZW1wZXJhdHVyZTogY2Vsc2l1cy4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2NyZWF0
ZUNlbHNpdXMoKX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBN
ZWFzdXJlVW5pdCBnZXRDZWxzaXVzKCk7CisjZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8K
KwogICAgIC8qKgotICAgICAqIFJldHVybnMgdW5pdCBvZiB0ZW1wZXJhdHVyZTogZmFocmVuaGVp
dC4KKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2YgdGVtcGVyYXR1cmU6IGZhaHJl
bmhlaXQuCiAgICAgICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUgYW5kIG11c3QgZnJlZSBp
dC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dldEZhaHJlbmhlaXQoKX0uCiAgICAgICogQHBh
cmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KICAgICAgKiBAc3RhYmxlIElDVSA1MwogICAgICAq
LwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlRmFocmVuaGVpdChVRXJyb3JDb2RlICZz
dGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKICAgICAvKioKLSAgICAgKiBSZXR1
cm5zIHVuaXQgb2YgdGVtcGVyYXR1cmU6IGdlbmVyaWMuCisgICAgICogUmV0dXJucyBieSB2YWx1
ZSwgdW5pdCBvZiB0ZW1wZXJhdHVyZTogZmFocmVuaGVpdC4KKyAgICAgKiBBbHNvIHNlZSB7QGxp
bmsgI2NyZWF0ZUZhaHJlbmhlaXQoKX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLwor
ICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRGYWhyZW5oZWl0KCk7CisjZW5kaWYgIC8qIFVfSElE
RV9EUkFGVF9BUEkgKi8KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5p
dCBvZiB0ZW1wZXJhdHVyZTogZ2VuZXJpYy4KICAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2
YWx1ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0R2VuZXJp
Y1RlbXBlcmF0dXJlKCl9LgogICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCiAg
ICAgICogQHN0YWJsZSBJQ1UgNTYKICAgICAgKi8KICAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNy
ZWF0ZUdlbmVyaWNUZW1wZXJhdHVyZShVRXJyb3JDb2RlICZzdGF0dXMpOwogCisjaWZuZGVmIFVf
SElERV9EUkFGVF9BUEkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9m
IHRlbXBlcmF0dXJlOiBnZW5lcmljLgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlR2Vu
ZXJpY1RlbXBlcmF0dXJlKCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBz
dGF0aWMgTWVhc3VyZVVuaXQgZ2V0R2VuZXJpY1RlbXBlcmF0dXJlKCk7CisjZW5kaWYgIC8qIFVf
SElERV9EUkFGVF9BUEkgKi8KKwogICAgIC8qKgotICAgICAqIFJldHVybnMgdW5pdCBvZiB0ZW1w
ZXJhdHVyZToga2VsdmluLgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiB0ZW1w
ZXJhdHVyZToga2VsdmluLgogICAgICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBt
dXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRLZWx2aW4oKX0uCiAgICAg
ICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KICAgICAgKiBAc3RhYmxlIElDVSA1NAog
ICAgICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlS2VsdmluKFVFcnJvckNvZGUg
JnN0YXR1cyk7CiAKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQorICAgIC8qKgorICAgICAqIFJl
dHVybnMgYnkgdmFsdWUsIHVuaXQgb2YgdGVtcGVyYXR1cmU6IGtlbHZpbi4KKyAgICAgKiBBbHNv
IHNlZSB7QGxpbmsgI2NyZWF0ZUtlbHZpbigpfS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAg
ICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0IGdldEtlbHZpbigpOworI2VuZGlmICAvKiBVX0hJ
REVfRFJBRlRfQVBJICovCisKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQorICAgIC8qKgorICAg
ICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiB0b3JxdWU6IG5ld3Rvbi1tZXRlci4KKyAg
ICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAq
IEFsc28gc2VlIHtAbGluayAjZ2V0TmV3dG9uTWV0ZXIoKX0uCisgICAgICogQHBhcmFtIHN0YXR1
cyBJQ1UgZXJyb3IgY29kZS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgc3Rh
dGljIE1lYXN1cmVVbml0ICpjcmVhdGVOZXd0b25NZXRlcihVRXJyb3JDb2RlICZzdGF0dXMpOwor
CisgICAgLyoqCisgICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiB0b3JxdWU6IG5ld3Rv
bi1tZXRlci4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2NyZWF0ZU5ld3Rvbk1ldGVyKCl9Lgor
ICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgZ2V0
TmV3dG9uTWV0ZXIoKTsKKyNlbmRpZiAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKKyNpZm5kZWYg
VV9ISURFX0RSQUZUX0FQSQorICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5p
dCBvZiB0b3JxdWU6IHBvdW5kLWZvb3QuCisgICAgICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFs
dWUgYW5kIG11c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dldFBvdW5kRm9v
dCgpfS4KKyAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgorICAgICAqIEBkcmFm
dCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZVBvdW5kRm9v
dChVRXJyb3JDb2RlICZzdGF0dXMpOworCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSB2YWx1
ZSwgdW5pdCBvZiB0b3JxdWU6IHBvdW5kLWZvb3QuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNj
cmVhdGVQb3VuZEZvb3QoKX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0
YXRpYyBNZWFzdXJlVW5pdCBnZXRQb3VuZEZvb3QoKTsKKyNlbmRpZiAvKiBVX0hJREVfRFJBRlRf
QVBJICovCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2Ygdm9sdW1lOiBhY3JlLWZv
b3QuCisgICAgICogUmV0dXJucyBieSBwb2ludGVyLCB1bml0IG9mIHZvbHVtZTogYWNyZS1mb290
LgogICAgICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisg
ICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRBY3JlRm9vdCgpfS4KICAgICAgKiBAcGFyYW0gc3Rh
dHVzIElDVSBlcnJvciBjb2RlLgogICAgICAqIEBzdGFibGUgSUNVIDU0CiAgICAgICovCiAgICAg
c3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVBY3JlRm9vdChVRXJyb3JDb2RlICZzdGF0dXMpOwog
CisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHZh
bHVlLCB1bml0IG9mIHZvbHVtZTogYWNyZS1mb290LgorICAgICAqIEFsc28gc2VlIHtAbGluayAj
Y3JlYXRlQWNyZUZvb3QoKX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0
YXRpYyBNZWFzdXJlVW5pdCBnZXRBY3JlRm9vdCgpOworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRf
QVBJICovCisKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQorICAgIC8qKgorICAgICAqIFJldHVy
bnMgYnkgcG9pbnRlciwgdW5pdCBvZiB2b2x1bWU6IGJhcnJlbC4KKyAgICAgKiBDYWxsZXIgb3du
cyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGlu
ayAjZ2V0QmFycmVsKCl9LgorICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCisg
ICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3Jl
YXRlQmFycmVsKFVFcnJvckNvZGUgJnN0YXR1cyk7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5z
IGJ5IHZhbHVlLCB1bml0IG9mIHZvbHVtZTogYmFycmVsLgorICAgICAqIEFsc28gc2VlIHtAbGlu
ayAjY3JlYXRlQmFycmVsKCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBz
dGF0aWMgTWVhc3VyZVVuaXQgZ2V0QmFycmVsKCk7CisjZW5kaWYgLyogVV9ISURFX0RSQUZUX0FQ
SSAqLworCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB1bml0IG9mIHZvbHVtZTogYnVzaGVsLgor
ICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiB2b2x1bWU6IGJ1c2hlbC4KICAgICAg
KiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAqIEFs
c28gc2VlIHtAbGluayAjZ2V0QnVzaGVsKCl9LgogICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVy
cm9yIGNvZGUuCiAgICAgICogQHN0YWJsZSBJQ1UgNTQKICAgICAgKi8KICAgICBzdGF0aWMgTWVh
c3VyZVVuaXQgKmNyZWF0ZUJ1c2hlbChVRXJyb3JDb2RlICZzdGF0dXMpOwogCisjaWZuZGVmIFVf
SElERV9EUkFGVF9BUEkKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2Ygdm9sdW1lOiBj
ZW50aWxpdGVyLgorICAgICAqIFJldHVybnMgYnkgdmFsdWUsIHVuaXQgb2Ygdm9sdW1lOiBidXNo
ZWwuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNjcmVhdGVCdXNoZWwoKX0uCisgICAgICogQGRy
YWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRCdXNoZWwoKTsK
KyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLworCisgICAgLyoqCisgICAgICogUmV0dXJu
cyBieSBwb2ludGVyLCB1bml0IG9mIHZvbHVtZTogY2VudGlsaXRlci4KICAgICAgKiBDYWxsZXIg
b3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtA
bGluayAjZ2V0Q2VudGlsaXRlcigpfS4KICAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBj
b2RlLgogICAgICAqIEBzdGFibGUgSUNVIDU0CiAgICAgICovCiAgICAgc3RhdGljIE1lYXN1cmVV
bml0ICpjcmVhdGVDZW50aWxpdGVyKFVFcnJvckNvZGUgJnN0YXR1cyk7CiAKKyNpZm5kZWYgVV9I
SURFX0RSQUZUX0FQSQorICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgdmFsdWUsIHVuaXQgb2Yg
dm9sdW1lOiBjZW50aWxpdGVyLgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlQ2VudGls
aXRlcigpfS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgc3RhdGljIE1lYXN1
cmVVbml0IGdldENlbnRpbGl0ZXIoKTsKKyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLwor
CiAgICAgLyoqCi0gICAgICogUmV0dXJucyB1bml0IG9mIHZvbHVtZTogY3ViaWMtY2VudGltZXRl
ci4KKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2Ygdm9sdW1lOiBjdWJpYy1jZW50
aW1ldGVyLgogICAgICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUg
aXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRDdWJpY0NlbnRpbWV0ZXIoKX0uCiAgICAg
ICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KICAgICAgKiBAc3RhYmxlIElDVSA1NAog
ICAgICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlQ3ViaWNDZW50aW1ldGVyKFVF
cnJvckNvZGUgJnN0YXR1cyk7CiAKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQorICAgIC8qKgor
ICAgICAqIFJldHVybnMgYnkgdmFsdWUsIHVuaXQgb2Ygdm9sdW1lOiBjdWJpYy1jZW50aW1ldGVy
LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlQ3ViaWNDZW50aW1ldGVyKCl9LgorICAg
ICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgZ2V0Q3Vi
aWNDZW50aW1ldGVyKCk7CisjZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKwogICAgIC8q
KgotICAgICAqIFJldHVybnMgdW5pdCBvZiB2b2x1bWU6IGN1YmljLWZvb3QuCisgICAgICogUmV0
dXJucyBieSBwb2ludGVyLCB1bml0IG9mIHZvbHVtZTogY3ViaWMtZm9vdC4KICAgICAgKiBDYWxs
ZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAqIEFsc28gc2Vl
IHtAbGluayAjZ2V0Q3ViaWNGb290KCl9LgogICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVycm9y
IGNvZGUuCiAgICAgICogQHN0YWJsZSBJQ1UgNTQKICAgICAgKi8KICAgICBzdGF0aWMgTWVhc3Vy
ZVVuaXQgKmNyZWF0ZUN1YmljRm9vdChVRXJyb3JDb2RlICZzdGF0dXMpOwogCisjaWZuZGVmIFVf
SElERV9EUkFGVF9BUEkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9m
IHZvbHVtZTogY3ViaWMtZm9vdC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2NyZWF0ZUN1Ymlj
Rm9vdCgpfS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgc3RhdGljIE1lYXN1
cmVVbml0IGdldEN1YmljRm9vdCgpOworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCisK
ICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2Ygdm9sdW1lOiBjdWJpYy1pbmNoLgorICAg
ICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiB2b2x1bWU6IGN1YmljLWluY2guCiAgICAg
ICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUgYW5kIG11c3QgZnJlZSBpdC4KKyAgICAgKiBB
bHNvIHNlZSB7QGxpbmsgI2dldEN1YmljSW5jaCgpfS4KICAgICAgKiBAcGFyYW0gc3RhdHVzIElD
VSBlcnJvciBjb2RlLgogICAgICAqIEBzdGFibGUgSUNVIDU0CiAgICAgICovCiAgICAgc3RhdGlj
IE1lYXN1cmVVbml0ICpjcmVhdGVDdWJpY0luY2goVUVycm9yQ29kZSAmc3RhdHVzKTsKIAorI2lm
bmRlZiBVX0hJREVfRFJBRlRfQVBJCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB1bml0IG9mIHZv
bHVtZTogY3ViaWMta2lsb21ldGVyLgorICAgICAqIFJldHVybnMgYnkgdmFsdWUsIHVuaXQgb2Yg
dm9sdW1lOiBjdWJpYy1pbmNoLgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlQ3ViaWNJ
bmNoKCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3Vy
ZVVuaXQgZ2V0Q3ViaWNJbmNoKCk7CisjZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKwor
ICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiB2b2x1bWU6IGN1Ymlj
LWtpbG9tZXRlci4KICAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBm
cmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0Q3ViaWNLaWxvbWV0ZXIoKX0uCiAg
ICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KICAgICAgKiBAc3RhYmxlIElDVSA1
MwogICAgICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlQ3ViaWNLaWxvbWV0ZXIo
VUVycm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLyoq
CisgICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiB2b2x1bWU6IGN1YmljLWtpbG9tZXRl
ci4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2NyZWF0ZUN1YmljS2lsb21ldGVyKCl9LgorICAg
ICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgZ2V0Q3Vi
aWNLaWxvbWV0ZXIoKTsKKyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLworCiAgICAgLyoq
Ci0gICAgICogUmV0dXJucyB1bml0IG9mIHZvbHVtZTogY3ViaWMtbWV0ZXIuCisgICAgICogUmV0
dXJucyBieSBwb2ludGVyLCB1bml0IG9mIHZvbHVtZTogY3ViaWMtbWV0ZXIuCiAgICAgICogQ2Fs
bGVyIG93bnMgcmV0dXJuZWQgdmFsdWUgYW5kIG11c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNvIHNl
ZSB7QGxpbmsgI2dldEN1YmljTWV0ZXIoKX0uCiAgICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJy
b3IgY29kZS4KICAgICAgKiBAc3RhYmxlIElDVSA1NAogICAgICAqLwogICAgIHN0YXRpYyBNZWFz
dXJlVW5pdCAqY3JlYXRlQ3ViaWNNZXRlcihVRXJyb3JDb2RlICZzdGF0dXMpOwogCisjaWZuZGVm
IFVfSElERV9EUkFGVF9BUEkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0
IG9mIHZvbHVtZTogY3ViaWMtbWV0ZXIuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNjcmVhdGVD
dWJpY01ldGVyKCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMg
TWVhc3VyZVVuaXQgZ2V0Q3ViaWNNZXRlcigpOworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJ
ICovCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2Ygdm9sdW1lOiBjdWJpYy1taWxl
LgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiB2b2x1bWU6IGN1YmljLW1pbGUu
CiAgICAgICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUgYW5kIG11c3QgZnJlZSBpdC4KKyAg
ICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dldEN1YmljTWlsZSgpfS4KICAgICAgKiBAcGFyYW0gc3Rh
dHVzIElDVSBlcnJvciBjb2RlLgogICAgICAqIEBzdGFibGUgSUNVIDUzCiAgICAgICovCiAgICAg
c3RhdGljIE1lYXN1cmVVbml0ICpjcmVhdGVDdWJpY01pbGUoVUVycm9yQ29kZSAmc3RhdHVzKTsK
IAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSB2
YWx1ZSwgdW5pdCBvZiB2b2x1bWU6IGN1YmljLW1pbGUuCisgICAgICogQWxzbyBzZWUge0BsaW5r
ICNjcmVhdGVDdWJpY01pbGUoKX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAg
IHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRDdWJpY01pbGUoKTsKKyNlbmRpZiAgLyogVV9ISURFX0RS
QUZUX0FQSSAqLworCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB1bml0IG9mIHZvbHVtZTogY3Vi
aWMteWFyZC4KKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2Ygdm9sdW1lOiBjdWJp
Yy15YXJkLgogICAgICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUg
aXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRDdWJpY1lhcmQoKX0uCiAgICAgICogQHBh
cmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KICAgICAgKiBAc3RhYmxlIElDVSA1NAogICAgICAq
LwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlQ3ViaWNZYXJkKFVFcnJvckNvZGUgJnN0
YXR1cyk7CiAKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQogICAgIC8qKgotICAgICAqIFJldHVy
bnMgdW5pdCBvZiB2b2x1bWU6IGN1cC4KKyAgICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9m
IHZvbHVtZTogY3ViaWMteWFyZC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2NyZWF0ZUN1Ymlj
WWFyZCgpfS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgc3RhdGljIE1lYXN1
cmVVbml0IGdldEN1YmljWWFyZCgpOworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCisK
KyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2Ygdm9sdW1lOiBjdXAu
CiAgICAgICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUgYW5kIG11c3QgZnJlZSBpdC4KKyAg
ICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dldEN1cCgpfS4KICAgICAgKiBAcGFyYW0gc3RhdHVzIElD
VSBlcnJvciBjb2RlLgogICAgICAqIEBzdGFibGUgSUNVIDU0CiAgICAgICovCiAgICAgc3RhdGlj
IE1lYXN1cmVVbml0ICpjcmVhdGVDdXAoVUVycm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBV
X0hJREVfRFJBRlRfQVBJCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBv
ZiB2b2x1bWU6IGN1cC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2NyZWF0ZUN1cCgpfS4KKyAg
ICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgc3RhdGljIE1lYXN1cmVVbml0IGdldEN1
cCgpOworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKICAgICAvKioKLSAgICAgKiBS
ZXR1cm5zIHVuaXQgb2Ygdm9sdW1lOiBjdXAtbWV0cmljLgorICAgICAqIFJldHVybnMgYnkgcG9p
bnRlciwgdW5pdCBvZiB2b2x1bWU6IGN1cC1tZXRyaWMuCiAgICAgICogQ2FsbGVyIG93bnMgcmV0
dXJuZWQgdmFsdWUgYW5kIG11c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dl
dEN1cE1ldHJpYygpfS4KICAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBlcnJvciBjb2RlLgogICAg
ICAqIEBzdGFibGUgSUNVIDU2CiAgICAgICovCiAgICAgc3RhdGljIE1lYXN1cmVVbml0ICpjcmVh
dGVDdXBNZXRyaWMoVUVycm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRf
QVBJCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiB2b2x1bWU6IGN1
cC1tZXRyaWMuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNjcmVhdGVDdXBNZXRyaWMoKX0uCisg
ICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRD
dXBNZXRyaWMoKTsKKyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLworCiAgICAgLyoqCi0g
ICAgICogUmV0dXJucyB1bml0IG9mIHZvbHVtZTogZGVjaWxpdGVyLgorICAgICAqIFJldHVybnMg
YnkgcG9pbnRlciwgdW5pdCBvZiB2b2x1bWU6IGRlY2lsaXRlci4KICAgICAgKiBDYWxsZXIgb3du
cyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGlu
ayAjZ2V0RGVjaWxpdGVyKCl9LgogICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUu
CiAgICAgICogQHN0YWJsZSBJQ1UgNTQKICAgICAgKi8KICAgICBzdGF0aWMgTWVhc3VyZVVuaXQg
KmNyZWF0ZURlY2lsaXRlcihVRXJyb3JDb2RlICZzdGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9E
UkFGVF9BUEkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9mIHZvbHVt
ZTogZGVjaWxpdGVyLgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlRGVjaWxpdGVyKCl9
LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQg
Z2V0RGVjaWxpdGVyKCk7CisjZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKwogICAgIC8q
KgotICAgICAqIFJldHVybnMgdW5pdCBvZiB2b2x1bWU6IGZsdWlkLW91bmNlLgorICAgICAqIFJl
dHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiB2b2x1bWU6IGZsdWlkLW91bmNlLgogICAgICAqIENh
bGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBz
ZWUge0BsaW5rICNnZXRGbHVpZE91bmNlKCl9LgogICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVy
cm9yIGNvZGUuCiAgICAgICogQHN0YWJsZSBJQ1UgNTQKICAgICAgKi8KICAgICBzdGF0aWMgTWVh
c3VyZVVuaXQgKmNyZWF0ZUZsdWlkT3VuY2UoVUVycm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRl
ZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5p
dCBvZiB2b2x1bWU6IGZsdWlkLW91bmNlLgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRl
Rmx1aWRPdW5jZSgpfS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgc3RhdGlj
IE1lYXN1cmVVbml0IGdldEZsdWlkT3VuY2UoKTsKKyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQ
SSAqLworCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5z
IGJ5IHBvaW50ZXIsIHVuaXQgb2Ygdm9sdW1lOiBmbHVpZC1vdW5jZS1pbXBlcmlhbC4KKyAgICAg
KiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAqIEFs
c28gc2VlIHtAbGluayAjZ2V0Rmx1aWRPdW5jZUltcGVyaWFsKCl9LgorICAgICAqIEBwYXJhbSBz
dGF0dXMgSUNVIGVycm9yIGNvZGUuCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAg
IHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlRmx1aWRPdW5jZUltcGVyaWFsKFVFcnJvckNvZGUg
JnN0YXR1cyk7CisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2Ygdm9sdW1lOiBnYWxs
b24uCisgICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiB2b2x1bWU6IGZsdWlkLW91bmNl
LWltcGVyaWFsLgorICAgICAqIEFsc28gc2VlIHtAbGluayAjY3JlYXRlRmx1aWRPdW5jZUltcGVy
aWFsKCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3Vy
ZVVuaXQgZ2V0Rmx1aWRPdW5jZUltcGVyaWFsKCk7CisjZW5kaWYgLyogVV9ISURFX0RSQUZUX0FQ
SSAqLworCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSBwb2ludGVyLCB1bml0IG9mIHZvbHVt
ZTogZ2FsbG9uLgogICAgICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZy
ZWUgaXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRHYWxsb24oKX0uCiAgICAgICogQHBh
cmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KICAgICAgKiBAc3RhYmxlIElDVSA1NAogICAgICAq
LwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlR2FsbG9uKFVFcnJvckNvZGUgJnN0YXR1
cyk7CiAKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQorICAgIC8qKgorICAgICAqIFJldHVybnMg
YnkgdmFsdWUsIHVuaXQgb2Ygdm9sdW1lOiBnYWxsb24uCisgICAgICogQWxzbyBzZWUge0BsaW5r
ICNjcmVhdGVHYWxsb24oKX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0
YXRpYyBNZWFzdXJlVW5pdCBnZXRHYWxsb24oKTsKKyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQ
SSAqLworCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB1bml0IG9mIHZvbHVtZTogZ2FsbG9uLWlt
cGVyaWFsLgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiB2b2x1bWU6IGdhbGxv
bi1pbXBlcmlhbC4KICAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBm
cmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0R2FsbG9uSW1wZXJpYWwoKX0uCiAg
ICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KICAgICAgKiBAc3RhYmxlIElDVSA1
NwogICAgICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlR2FsbG9uSW1wZXJpYWwo
VUVycm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLyoq
CisgICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiB2b2x1bWU6IGdhbGxvbi1pbXBlcmlh
bC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2NyZWF0ZUdhbGxvbkltcGVyaWFsKCl9LgorICAg
ICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgZ2V0R2Fs
bG9uSW1wZXJpYWwoKTsKKyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLworCiAgICAgLyoq
Ci0gICAgICogUmV0dXJucyB1bml0IG9mIHZvbHVtZTogaGVjdG9saXRlci4KKyAgICAgKiBSZXR1
cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2Ygdm9sdW1lOiBoZWN0b2xpdGVyLgogICAgICAqIENhbGxl
ciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUg
e0BsaW5rICNnZXRIZWN0b2xpdGVyKCl9LgogICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVycm9y
IGNvZGUuCiAgICAgICogQHN0YWJsZSBJQ1UgNTQKICAgICAgKi8KICAgICBzdGF0aWMgTWVhc3Vy
ZVVuaXQgKmNyZWF0ZUhlY3RvbGl0ZXIoVUVycm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBV
X0hJREVfRFJBRlRfQVBJCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBv
ZiB2b2x1bWU6IGhlY3RvbGl0ZXIuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNjcmVhdGVIZWN0
b2xpdGVyKCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVh
c3VyZVVuaXQgZ2V0SGVjdG9saXRlcigpOworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICov
CisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2Ygdm9sdW1lOiBsaXRlci4KKyAgICAg
KiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2Ygdm9sdW1lOiBsaXRlci4KICAgICAgKiBDYWxs
ZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBmcmVlIGl0LgorICAgICAqIEFsc28gc2Vl
IHtAbGluayAjZ2V0TGl0ZXIoKX0uCiAgICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29k
ZS4KICAgICAgKiBAc3RhYmxlIElDVSA1MwogICAgICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5p
dCAqY3JlYXRlTGl0ZXIoVUVycm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJREVfRFJB
RlRfQVBJCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB1bml0IG9mIHZvbHVtZTogbWVnYWxpdGVy
LgorICAgICAqIFJldHVybnMgYnkgdmFsdWUsIHVuaXQgb2Ygdm9sdW1lOiBsaXRlci4KKyAgICAg
KiBBbHNvIHNlZSB7QGxpbmsgI2NyZWF0ZUxpdGVyKCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQK
KyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgZ2V0TGl0ZXIoKTsKKyNlbmRpZiAgLyog
VV9ISURFX0RSQUZUX0FQSSAqLworCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSBwb2ludGVy
LCB1bml0IG9mIHZvbHVtZTogbWVnYWxpdGVyLgogICAgICAqIENhbGxlciBvd25zIHJldHVybmVk
IHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRNZWdh
bGl0ZXIoKX0uCiAgICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KICAgICAgKiBA
c3RhYmxlIElDVSA1NAogICAgICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlTWVn
YWxpdGVyKFVFcnJvckNvZGUgJnN0YXR1cyk7CiAKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQor
ICAgIC8qKgorICAgICAqIFJldHVybnMgYnkgdmFsdWUsIHVuaXQgb2Ygdm9sdW1lOiBtZWdhbGl0
ZXIuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNjcmVhdGVNZWdhbGl0ZXIoKX0uCisgICAgICog
QGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRNZWdhbGl0
ZXIoKTsKKyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLworCiAgICAgLyoqCi0gICAgICog
UmV0dXJucyB1bml0IG9mIHZvbHVtZTogbWlsbGlsaXRlci4KKyAgICAgKiBSZXR1cm5zIGJ5IHBv
aW50ZXIsIHVuaXQgb2Ygdm9sdW1lOiBtaWxsaWxpdGVyLgogICAgICAqIENhbGxlciBvd25zIHJl
dHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNn
ZXRNaWxsaWxpdGVyKCl9LgogICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCiAg
ICAgICogQHN0YWJsZSBJQ1UgNTQKICAgICAgKi8KICAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNy
ZWF0ZU1pbGxpbGl0ZXIoVUVycm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJREVfRFJB
RlRfQVBJCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSB2YWx1ZSwgdW5pdCBvZiB2b2x1bWU6
IG1pbGxpbGl0ZXIuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNjcmVhdGVNaWxsaWxpdGVyKCl9
LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQg
Z2V0TWlsbGlsaXRlcigpOworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKICAgICAv
KioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2Ygdm9sdW1lOiBwaW50LgorICAgICAqIFJldHVybnMg
YnkgcG9pbnRlciwgdW5pdCBvZiB2b2x1bWU6IHBpbnQuCiAgICAgICogQ2FsbGVyIG93bnMgcmV0
dXJuZWQgdmFsdWUgYW5kIG11c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dl
dFBpbnQoKX0uCiAgICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KICAgICAgKiBA
c3RhYmxlIElDVSA1NAogICAgICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlUGlu
dChVRXJyb3JDb2RlICZzdGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKyAgICAv
KioKKyAgICAgKiBSZXR1cm5zIGJ5IHZhbHVlLCB1bml0IG9mIHZvbHVtZTogcGludC4KKyAgICAg
KiBBbHNvIHNlZSB7QGxpbmsgI2NyZWF0ZVBpbnQoKX0uCisgICAgICogQGRyYWZ0IElDVSA2NAor
ICAgICAqLworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRQaW50KCk7CisjZW5kaWYgIC8qIFVf
SElERV9EUkFGVF9BUEkgKi8KKwogICAgIC8qKgotICAgICAqIFJldHVybnMgdW5pdCBvZiB2b2x1
bWU6IHBpbnQtbWV0cmljLgorICAgICAqIFJldHVybnMgYnkgcG9pbnRlciwgdW5pdCBvZiB2b2x1
bWU6IHBpbnQtbWV0cmljLgogICAgICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBt
dXN0IGZyZWUgaXQuCisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRQaW50TWV0cmljKCl9Lgog
ICAgICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCiAgICAgICogQHN0YWJsZSBJQ1Ug
NTYKICAgICAgKi8KICAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZVBpbnRNZXRyaWMoVUVy
cm9yQ29kZSAmc3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCiAgICAgLyoqCi0g
ICAgICogUmV0dXJucyB1bml0IG9mIHZvbHVtZTogcXVhcnQuCisgICAgICogUmV0dXJucyBieSB2
YWx1ZSwgdW5pdCBvZiB2b2x1bWU6IHBpbnQtbWV0cmljLgorICAgICAqIEFsc28gc2VlIHtAbGlu
ayAjY3JlYXRlUGludE1ldHJpYygpfS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisg
ICAgc3RhdGljIE1lYXN1cmVVbml0IGdldFBpbnRNZXRyaWMoKTsKKyNlbmRpZiAgLyogVV9ISURF
X0RSQUZUX0FQSSAqLworCisgICAgLyoqCisgICAgICogUmV0dXJucyBieSBwb2ludGVyLCB1bml0
IG9mIHZvbHVtZTogcXVhcnQuCiAgICAgICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUgYW5k
IG11c3QgZnJlZSBpdC4KKyAgICAgKiBBbHNvIHNlZSB7QGxpbmsgI2dldFF1YXJ0KCl9LgogICAg
ICAqIEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCiAgICAgICogQHN0YWJsZSBJQ1UgNTQK
ICAgICAgKi8KICAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZVF1YXJ0KFVFcnJvckNvZGUg
JnN0YXR1cyk7CiAKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQorICAgIC8qKgorICAgICAqIFJl
dHVybnMgYnkgdmFsdWUsIHVuaXQgb2Ygdm9sdW1lOiBxdWFydC4KKyAgICAgKiBBbHNvIHNlZSB7
QGxpbmsgI2NyZWF0ZVF1YXJ0KCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAg
ICBzdGF0aWMgTWVhc3VyZVVuaXQgZ2V0UXVhcnQoKTsKKyNlbmRpZiAgLyogVV9ISURFX0RSQUZU
X0FQSSAqLworCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB1bml0IG9mIHZvbHVtZTogdGFibGVz
cG9vbi4KKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2Ygdm9sdW1lOiB0YWJsZXNw
b29uLgogICAgICAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIGFuZCBtdXN0IGZyZWUgaXQu
CisgICAgICogQWxzbyBzZWUge0BsaW5rICNnZXRUYWJsZXNwb29uKCl9LgogICAgICAqIEBwYXJh
bSBzdGF0dXMgSUNVIGVycm9yIGNvZGUuCiAgICAgICogQHN0YWJsZSBJQ1UgNTQKICAgICAgKi8K
ICAgICBzdGF0aWMgTWVhc3VyZVVuaXQgKmNyZWF0ZVRhYmxlc3Bvb24oVUVycm9yQ29kZSAmc3Rh
dHVzKTsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLyoqCisgICAgICogUmV0dXJu
cyBieSB2YWx1ZSwgdW5pdCBvZiB2b2x1bWU6IHRhYmxlc3Bvb24uCisgICAgICogQWxzbyBzZWUg
e0BsaW5rICNjcmVhdGVUYWJsZXNwb29uKCl9LgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAg
Ki8KKyAgICBzdGF0aWMgTWVhc3VyZVVuaXQgZ2V0VGFibGVzcG9vbigpOworI2VuZGlmICAvKiBV
X0hJREVfRFJBRlRfQVBJICovCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHVuaXQgb2Ygdm9s
dW1lOiB0ZWFzcG9vbi4KKyAgICAgKiBSZXR1cm5zIGJ5IHBvaW50ZXIsIHVuaXQgb2Ygdm9sdW1l
OiB0ZWFzcG9vbi4KICAgICAgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZSBhbmQgbXVzdCBm
cmVlIGl0LgorICAgICAqIEFsc28gc2VlIHtAbGluayAjZ2V0VGVhc3Bvb24oKX0uCiAgICAgICog
QHBhcmFtIHN0YXR1cyBJQ1UgZXJyb3IgY29kZS4KICAgICAgKiBAc3RhYmxlIElDVSA1NAogICAg
ICAqLwogICAgIHN0YXRpYyBNZWFzdXJlVW5pdCAqY3JlYXRlVGVhc3Bvb24oVUVycm9yQ29kZSAm
c3RhdHVzKTsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLyoqCisgICAgICogUmV0
dXJucyBieSB2YWx1ZSwgdW5pdCBvZiB2b2x1bWU6IHRlYXNwb29uLgorICAgICAqIEFsc28gc2Vl
IHtAbGluayAjY3JlYXRlVGVhc3Bvb24oKX0uCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAq
LworICAgIHN0YXRpYyBNZWFzdXJlVW5pdCBnZXRUZWFzcG9vbigpOworI2VuZGlmICAvKiBVX0hJ
REVfRFJBRlRfQVBJICovCisKIAogLy8gRW5kIGdlbmVyYXRlZCBjcmVhdGVYWFggbWV0aG9kcwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL21lc3NhZ2VwYXR0ZXJuLmggYi9T
b3VyY2UvV1RGL2ljdS91bmljb2RlL21lc3NhZ2VwYXR0ZXJuLmgKaW5kZXggZjI4YWRhZmVlMGQy
YWNkNDgxZmY0MGJiNjg0ODU1YjY4ZjdiMmMzZC4uOWYyYTg2NTUxY2E0MTdkZDhhYjAwYTEyMTg5
ZGEwNjI3NTdiNDRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9pY3UvdW5pY29kZS9tZXNzYWdl
cGF0dGVybi5oCisrKyBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvbWVzc2FnZXBhdHRlcm4uaApA
QCAtNzcxLDggKzc3MSw4IEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBNZXNzYWdlUGF0dGVybiA6IHB1
YmxpYyBVT2JqZWN0IHsKICAgICAgICAgICogQHN0YWJsZSBJQ1UgNC44CiAgICAgICAgICAqLwog
ICAgICAgICBVTWVzc2FnZVBhdHRlcm5BcmdUeXBlIGdldEFyZ1R5cGUoKSBjb25zdCB7Ci0gICAg
ICAgICAgICBVTWVzc2FnZVBhdHRlcm5QYXJ0VHlwZSB0eXBlPWdldFR5cGUoKTsKLSAgICAgICAg
ICAgIGlmKHR5cGU9PVVNU0dQQVRfUEFSVF9UWVBFX0FSR19TVEFSVCB8fCB0eXBlPT1VTVNHUEFU
X1BBUlRfVFlQRV9BUkdfTElNSVQpIHsKKyAgICAgICAgICAgIFVNZXNzYWdlUGF0dGVyblBhcnRU
eXBlIG1zZ1R5cGU9Z2V0VHlwZSgpOworICAgICAgICAgICAgaWYobXNnVHlwZSA9PVVNU0dQQVRf
UEFSVF9UWVBFX0FSR19TVEFSVCB8fCBtc2dUeXBlID09VU1TR1BBVF9QQVJUX1RZUEVfQVJHX0xJ
TUlUKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIChVTWVzc2FnZVBhdHRlcm5BcmdUeXBlKXZh
bHVlOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICByZXR1cm4gVU1TR1BB
VF9BUkdfVFlQRV9OT05FOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9pY3UvdW5pY29kZS9tc2dm
bXQuaCBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvbXNnZm10LmgKaW5kZXggZmVmODAxMDc3NDdi
Zjg0NzNmM2RiY2NhYzMzMWIyMWNmZjI5OGRkYy4uOGUxYmY5YjQ1ZjkxODRjMTdjZjMxMTg3MDgx
YzAyYTkxNjcxYzNhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9pY3UvdW5pY29kZS9tc2dmbXQu
aAorKysgYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL21zZ2ZtdC5oCkBAIC02OSw5ICs2OSw4IEBA
IGNsYXNzIE51bWJlckZvcm1hdDsKICAqIGlmIHRoZSBwYXR0ZXJuIGhhcyBuYW1lZCBhcmd1bWVu
dHMgKHNlZSB7QGxpbmsgI3VzZXNOYW1lZEFyZ3VtZW50cygpfSkuCiAgKgogICogPHA+QW4gYXJn
dW1lbnQgbWlnaHQgbm90IHNwZWNpZnkgYW55IGZvcm1hdCB0eXBlLiBJbiB0aGlzIGNhc2UsCi0g
KiBhIE51bWJlciB2YWx1ZSBpcyBmb3JtYXR0ZWQgd2l0aCBhIGRlZmF1bHQgKGZvciB0aGUgbG9j
YWxlKSBOdW1iZXJGb3JtYXQsCi0gKiBhIERhdGUgdmFsdWUgaXMgZm9ybWF0dGVkIHdpdGggYSBk
ZWZhdWx0IChmb3IgdGhlIGxvY2FsZSkgRGF0ZUZvcm1hdCwKLSAqIGFuZCBmb3IgYW55IG90aGVy
IHZhbHVlIGl0cyB0b1N0cmluZygpIHZhbHVlIGlzIHVzZWQuCisgKiBhIG51bWVyaWMgdmFsdWUg
aXMgZm9ybWF0dGVkIHdpdGggYSBkZWZhdWx0IChmb3IgdGhlIGxvY2FsZSkgTnVtYmVyRm9ybWF0
LAorICogYW5kIGEgZGF0ZS90aW1lIHZhbHVlIGlzIGZvcm1hdHRlZCB3aXRoIGEgZGVmYXVsdCAo
Zm9yIHRoZSBsb2NhbGUpIERhdGVGb3JtYXQuCiAgKgogICogPHA+QW4gYXJndW1lbnQgbWlnaHQg
c3BlY2lmeSBhICJzaW1wbGUiIHR5cGUgZm9yIHdoaWNoIHRoZSBzcGVjaWZpZWQKICAqIEZvcm1h
dCBvYmplY3QgaXMgY3JlYXRlZCwgY2FjaGVkIGFuZCB1c2VkLgpAQCAtMTI0LDcgKzEyMyw3IEBA
IGNsYXNzIE51bWJlckZvcm1hdDsKICAqIGFyZ051bWJlciA9ICcwJyB8ICgnMScuLic5JyAoJzAn
Li4nOScpKikKICAqCiAgKiBhcmdUeXBlID0gIm51bWJlciIgfCAiZGF0ZSIgfCAidGltZSIgfCAi
c3BlbGxvdXQiIHwgIm9yZGluYWwiIHwgImR1cmF0aW9uIgotICogYXJnU3R5bGUgPSAic2hvcnQi
IHwgIm1lZGl1bSIgfCAibG9uZyIgfCAiZnVsbCIgfCAiaW50ZWdlciIgfCAiY3VycmVuY3kiIHwg
InBlcmNlbnQiIHwgYXJnU3R5bGVUZXh0CisgKiBhcmdTdHlsZSA9ICJzaG9ydCIgfCAibWVkaXVt
IiB8ICJsb25nIiB8ICJmdWxsIiB8ICJpbnRlZ2VyIiB8ICJjdXJyZW5jeSIgfCAicGVyY2VudCIg
fCBhcmdTdHlsZVRleHQgfCAiOjoiIGFyZ1NrZWxldG9uVGV4dAogICogPC9wcmU+CiAgKgogICog
PHVsPgpAQCAtMTY2LDcgKzE2NSw3IEBAIGNsYXNzIE51bWJlckZvcm1hdDsKICAqICAgICAgIDx0
ZCBjb2xzcGFuPTI+PGk+KG5vbmUpPC9pPgogICogICAgICAgPHRkPjxjb2RlPm51bGw8L2NvZGU+
CiAgKiAgICA8dHI+Ci0gKiAgICAgICA8dGQgcm93c3Bhbj01Pjxjb2RlPm51bWJlcjwvY29kZT4K
KyAqICAgICAgIDx0ZCByb3dzcGFuPTY+PGNvZGU+bnVtYmVyPC9jb2RlPgogICogICAgICAgPHRk
PjxpPihub25lKTwvaT4KICAqICAgICAgIDx0ZD48Y29kZT5OdW1iZXJGb3JtYXQuY3JlYXRlSW5z
dGFuY2UoZ2V0TG9jYWxlKCksIHN0YXR1cyk8L2NvZGU+CiAgKiAgICA8dHI+CkBAIC0xODIsNiAr
MTgxLDkgQEAgY2xhc3MgTnVtYmVyRm9ybWF0OwogICogICAgICAgPHRkPjxpPmFyZ1N0eWxlVGV4
dDwvaT4KICAqICAgICAgIDx0ZD48Y29kZT5uZXcgRGVjaW1hbEZvcm1hdChhcmdTdHlsZVRleHQs
IG5ldyBEZWNpbWFsRm9ybWF0U3ltYm9scyhnZXRMb2NhbGUoKSwgc3RhdHVzKSwgc3RhdHVzKTwv
Y29kZT4KICAqICAgIDx0cj4KKyAqICAgICAgIDx0ZD48aT5hcmdTa2VsZXRvblRleHQ8L2k+Cisg
KiAgICAgICA8dGQ+PGNvZGU+TnVtYmVyRm9ybWF0dGVyOjpmb3JTa2VsZXRvbihhcmdTa2VsZXRv
blRleHQsIHN0YXR1cykubG9jYWxlKGdldExvY2FsZSgpKS50b0Zvcm1hdChzdGF0dXMpPC9jb2Rl
PgorICogICAgPHRyPgogICogICAgICAgPHRkIHJvd3NwYW49Nj48Y29kZT5kYXRlPC9jb2RlPgog
ICogICAgICAgPHRkPjxpPihub25lKTwvaT4KICAqICAgICAgIDx0ZD48Y29kZT5EYXRlRm9ybWF0
LmNyZWF0ZURhdGVJbnN0YW5jZShrRGVmYXVsdCwgZ2V0TG9jYWxlKCksIHN0YXR1cyk8L2NvZGU+
CkBAIC0xOTksNyArMjAxLDEwIEBAIGNsYXNzIE51bWJlckZvcm1hdDsKICAqICAgICAgIDx0ZD48
Y29kZT5EYXRlRm9ybWF0LmNyZWF0ZURhdGVJbnN0YW5jZShrRnVsbCwgZ2V0TG9jYWxlKCksIHN0
YXR1cyk8L2NvZGU+CiAgKiAgICA8dHI+CiAgKiAgICAgICA8dGQ+PGk+YXJnU3R5bGVUZXh0PC9p
PgotICogICAgICAgPHRkPjxjb2RlPm5ldyBTaW1wbGVEYXRlRm9ybWF0KGFyZ1N0eWxlVGV4dCwg
Z2V0TG9jYWxlKCksIHN0YXR1cykKKyAqICAgICAgIDx0ZD48Y29kZT5uZXcgU2ltcGxlRGF0ZUZv
cm1hdChhcmdTdHlsZVRleHQsIGdldExvY2FsZSgpLCBzdGF0dXMpPC9jb2RlPgorICogICAgPHRy
PgorICogICAgICAgPHRkPjxpPmFyZ1NrZWxldG9uVGV4dDwvaT4KKyAqICAgICAgIDx0ZD48Y29k
ZT5EYXRlRm9ybWF0OjpjcmVhdGVJbnN0YW5jZUZvclNrZWxldG9uKGFyZ1NrZWxldG9uVGV4dCwg
Z2V0TG9jYWxlKCksIHN0YXR1cyk8L2NvZGU+CiAgKiAgICA8dHI+CiAgKiAgICAgICA8dGQgcm93
c3Bhbj02Pjxjb2RlPnRpbWU8L2NvZGU+CiAgKiAgICAgICA8dGQ+PGk+KG5vbmUpPC9pPgpAQCAt
MjE4LDcgKzIyMyw3IEBAIGNsYXNzIE51bWJlckZvcm1hdDsKICAqICAgICAgIDx0ZD48Y29kZT5E
YXRlRm9ybWF0LmNyZWF0ZVRpbWVJbnN0YW5jZShrRnVsbCwgZ2V0TG9jYWxlKCksIHN0YXR1cyk8
L2NvZGU+CiAgKiAgICA8dHI+CiAgKiAgICAgICA8dGQ+PGk+YXJnU3R5bGVUZXh0PC9pPgotICog
ICAgICAgPHRkPjxjb2RlPm5ldyBTaW1wbGVEYXRlRm9ybWF0KGFyZ1N0eWxlVGV4dCwgZ2V0TG9j
YWxlKCksIHN0YXR1cykKKyAqICAgICAgIDx0ZD48Y29kZT5uZXcgU2ltcGxlRGF0ZUZvcm1hdChh
cmdTdHlsZVRleHQsIGdldExvY2FsZSgpLCBzdGF0dXMpPC9jb2RlPgogICogICAgPHRyPgogICog
ICAgICAgPHRkPjxjb2RlPnNwZWxsb3V0PC9jb2RlPgogICogICAgICAgPHRkPjxpPmFyZ1N0eWxl
VGV4dCAob3B0aW9uYWwpPC9pPgpAQCAtMjM3LDYgKzI0MiwxOSBAQCBjbGFzcyBOdW1iZXJGb3Jt
YXQ7CiAgKiA8L3RhYmxlPgogICogPHA+CiAgKgorICogPGg0PkFyZ3VtZW50IGZvcm1hdHRpbmc8
L2g0PgorICoKKyAqIDxwPkFyZ3VtZW50cyBhcmUgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGVp
ciB0eXBlLCB1c2luZyB0aGUgZGVmYXVsdAorICogSUNVIGZvcm1hdHRlcnMgZm9yIHRob3NlIHR5
cGVzLCB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZC48L3A+CisgKgorICogPHA+VGhlcmUgYXJl
IGFsc28gc2V2ZXJhbCB3YXlzIHRvIGNvbnRyb2wgdGhlIGZvcm1hdHRpbmcuPC9wPgorICoKKyAq
IDxwPldlIHJlY29tbWVuZCB5b3UgdXNlIGRlZmF1bHQgc3R5bGVzLCBwcmVkZWZpbmVkIHN0eWxl
IHZhbHVlcywgc2tlbGV0b25zLAorICogb3IgcHJlZm9ybWF0dGVkIHZhbHVlcywgYnV0IG5vdCBw
YXR0ZXJuIHN0cmluZ3Mgb3IgY3VzdG9tIGZvcm1hdCBvYmplY3RzLjwvcD4KKyAqCisgKiA8cD5G
b3IgbW9yZSBkZXRhaWxzLCBzZWUgdGhlCisgKiA8YSBocmVmPSJodHRwOi8vdXNlcmd1aWRlLmlj
dS1wcm9qZWN0Lm9yZy9mb3JtYXRwYXJzZS9tZXNzYWdlcyI+SUNVIFVzZXIgR3VpZGU8L2E+Ljwv
cD4KKyAqCiAgKiA8aDQ+VXNhZ2UgSW5mb3JtYXRpb248L2g0PgogICoKICAqIDxwPkhlcmUgYXJl
IHNvbWUgZXhhbXBsZXMgb2YgdXNhZ2U6CkBAIC0yNTQsMTEgKzI3MiwxMSBAQCBjbGFzcyBOdW1i
ZXJGb3JtYXQ7CiAgKgogICogICAgIFVuaWNvZGVTdHJpbmcgcmVzdWx0OwogICogICAgIE1lc3Nh
Z2VGb3JtYXQ6OmZvcm1hdCgKLSAqICAgICAgICAgICJBdCB7MSx0aW1lfSBvbiB7MSxkYXRlfSwg
dGhlcmUgd2FzIHsyfSBvbiBwbGFuZXQgezAsbnVtYmVyfS4iLAorICogICAgICAgICAgIkF0IHsx
LHRpbWUsOjpqbW19IG9uIHsxLGRhdGUsOjpkTU1NTX0sIHRoZXJlIHdhcyB7Mn0gb24gcGxhbmV0
IHswLG51bWJlcn0uIiwKICAqICAgICAgICAgIGFyZ3VtZW50cywgMywgcmVzdWx0LCBzdWNjZXNz
ICk7CiAgKgogICogICAgIGNvdXQgPDwgInJlc3VsdDogIiA8PCByZXN1bHQgPDwgZW5kbDsKLSAq
ICAgICAvLzxvdXRwdXQ+OiBBdCA0OjM0OjIwIFBNIG9uIDIzLU1hci05OCwgdGhlcmUgd2FzIGEg
ZGlzdHVyYmFuY2UKKyAqICAgICAvLzxvdXRwdXQ+OiBBdCA0OjM0IFBNIG9uIE1hcmNoIDIzLCB0
aGVyZSB3YXMgYSBkaXN0dXJiYW5jZQogICogICAgIC8vICAgICAgICAgICAgIGluIHRoZSBGb3Jj
ZSBvbiBwbGFuZXQgNy4KICAqIFxlbmRjb2RlCiAgKiA8L3ByZT4KQEAgLTk5MSw2ICsxMDA5LDgg
QEAgY2xhc3MgVV9JMThOX0FQSSBNZXNzYWdlRm9ybWF0IDogcHVibGljIEZvcm1hdCB7CiAKICAg
ICB2b2lkIGNhY2hlRXhwbGljaXRGb3JtYXRzKFVFcnJvckNvZGUmIHN0YXR1cyk7CiAKKyAgICBp
bnQzMl90IHNraXBMZWFkaW5nU3BhY2VzKFVuaWNvZGVTdHJpbmcmIHN0eWxlKTsKKwogICAgIEZv
cm1hdCogY3JlYXRlQXBwcm9wcmlhdGVGb3JtYXQoVW5pY29kZVN0cmluZyYgdHlwZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaWNvZGVTdHJpbmcmIHN0eWxlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9ybWF0dGFibGU6OlR5cGUmIGZvcm1h
dHRhYmxlVHlwZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvbm9ybWFsaXpl
cjIuaCBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvbm9ybWFsaXplcjIuaAppbmRleCA4YTZkNzEz
ODAyMWI1NjZjOGE5M2Q4MjdhOTM5ODhiZDI1ZGM4NDk1Li40Y2FhMGUzMTAzNGIyZGI2NWY3NWIw
YjcyYWI4ZWMyZDkwNGYwOTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL25v
cm1hbGl6ZXIyLmgKKysrIGIvU291cmNlL1dURi9pY3UvdW5pY29kZS9ub3JtYWxpemVyMi5oCkBA
IC0yNDEsNyArMjQxLDcgQEAgY2xhc3MgVV9DT01NT05fQVBJIE5vcm1hbGl6ZXIyIDogcHVibGlj
IFVPYmplY3QgewogICAgICAqICAgICAgICAgICAgICAgICAgcGFzcyB0aGUgVV9TVUNDRVNTKCkg
dGVzdCwgb3IgZWxzZSB0aGUgZnVuY3Rpb24gcmV0dXJucwogICAgICAqICAgICAgICAgICAgICAg
ICAgaW1tZWRpYXRlbHkuIENoZWNrIGZvciBVX0ZBSUxVUkUoKSBvbiBvdXRwdXQgb3IgdXNlIHdp
dGgKICAgICAgKiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNoYWluaW5nLiAoU2VlIFVzZXIg
R3VpZGUgZm9yIGRldGFpbHMuKQotICAgICAqIEBkcmFmdCBJQ1UgNjAKKyAgICAgKiBAc3RhYmxl
IElDVSA2MAogICAgICAqLwogICAgIHZpcnR1YWwgdm9pZAogICAgIG5vcm1hbGl6ZVVURjgodWlu
dDMyX3Qgb3B0aW9ucywgU3RyaW5nUGllY2Ugc3JjLCBCeXRlU2luayAmc2luaywKQEAgLTM5MSw3
ICszOTEsNyBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgTm9ybWFsaXplcjIgOiBwdWJsaWMgVU9iamVj
dCB7CiAgICAgICogICAgICAgICAgICAgICAgICBpbW1lZGlhdGVseS4gQ2hlY2sgZm9yIFVfRkFJ
TFVSRSgpIG9uIG91dHB1dCBvciB1c2Ugd2l0aAogICAgICAqICAgICAgICAgICAgICAgICAgZnVu
Y3Rpb24gY2hhaW5pbmcuIChTZWUgVXNlciBHdWlkZSBmb3IgZGV0YWlscy4pCiAgICAgICogQHJl
dHVybiBUUlVFIGlmIHMgaXMgbm9ybWFsaXplZAotICAgICAqIEBkcmFmdCBJQ1UgNjAKKyAgICAg
KiBAc3RhYmxlIElDVSA2MAogICAgICAqLwogICAgIHZpcnR1YWwgVUJvb2wKICAgICBpc05vcm1h
bGl6ZWRVVEY4KFN0cmluZ1BpZWNlIHMsIFVFcnJvckNvZGUgJmVycm9yQ29kZSkgY29uc3Q7CkBA
IC01NTksNyArNTU5LDcgQEAgY2xhc3MgVV9DT01NT05fQVBJIEZpbHRlcmVkTm9ybWFsaXplcjIg
OiBwdWJsaWMgTm9ybWFsaXplcjIgewogICAgICAqICAgICAgICAgICAgICAgICAgcGFzcyB0aGUg
VV9TVUNDRVNTKCkgdGVzdCwgb3IgZWxzZSB0aGUgZnVuY3Rpb24gcmV0dXJucwogICAgICAqICAg
ICAgICAgICAgICAgICAgaW1tZWRpYXRlbHkuIENoZWNrIGZvciBVX0ZBSUxVUkUoKSBvbiBvdXRw
dXQgb3IgdXNlIHdpdGgKICAgICAgKiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNoYWluaW5n
LiAoU2VlIFVzZXIgR3VpZGUgZm9yIGRldGFpbHMuKQotICAgICAqIEBkcmFmdCBJQ1UgNjAKKyAg
ICAgKiBAc3RhYmxlIElDVSA2MAogICAgICAqLwogICAgIHZpcnR1YWwgdm9pZAogICAgIG5vcm1h
bGl6ZVVURjgodWludDMyX3Qgb3B0aW9ucywgU3RyaW5nUGllY2Ugc3JjLCBCeXRlU2luayAmc2lu
aywKQEAgLTY4Niw3ICs2ODYsNyBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgRmlsdGVyZWROb3JtYWxp
emVyMiA6IHB1YmxpYyBOb3JtYWxpemVyMiB7CiAgICAgICogICAgICAgICAgICAgICAgICBpbW1l
ZGlhdGVseS4gQ2hlY2sgZm9yIFVfRkFJTFVSRSgpIG9uIG91dHB1dCBvciB1c2Ugd2l0aAogICAg
ICAqICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY2hhaW5pbmcuIChTZWUgVXNlciBHdWlkZSBm
b3IgZGV0YWlscy4pCiAgICAgICogQHJldHVybiBUUlVFIGlmIHMgaXMgbm9ybWFsaXplZAotICAg
ICAqIEBkcmFmdCBJQ1UgNjAKKyAgICAgKiBAc3RhYmxlIElDVSA2MAogICAgICAqLwogICAgIHZp
cnR1YWwgVUJvb2wKICAgICBpc05vcm1hbGl6ZWRVVEY4KFN0cmluZ1BpZWNlIHMsIFVFcnJvckNv
ZGUgJmVycm9yQ29kZSkgY29uc3QgVV9PVkVSUklERTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
aWN1L3VuaWNvZGUvbm91bml0LmggYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL25vdW5pdC5oCmlu
ZGV4IDU4Njk5NmMyZWU0MTMzNDU5YTljZTdjZTZkMDFkZDliNzM1OWZhZGIuLjg3OTg0OWIxNmJk
OGUwYmUxOWRjMmQ3OTRiMzkxNzA1NWIzOTMxMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvaWN1
L3VuaWNvZGUvbm91bml0LmgKKysrIGIvU291cmNlL1dURi9pY3UvdW5pY29kZS9ub3VuaXQuaApA
QCAtMSwxMTEgKzEsMTExIEBACi0vLyDCqSAyMDE3IGFuZCBsYXRlcjogVW5pY29kZSwgSW5jLiBh
bmQgb3RoZXJzLg0KLS8vIExpY2Vuc2UgJiB0ZXJtcyBvZiB1c2U6IGh0dHA6Ly93d3cudW5pY29k
ZS5vcmcvY29weXJpZ2h0Lmh0bWwNCi0vKg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICog
Q29weXJpZ2h0IChDKSAyMDA5LTIwMTcsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMg
Q29ycG9yYXRpb24sICAgICAgICoNCi0gKiBHb29nbGUsIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KLSAqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqDQotICovDQotDQotI2lmbmRlZiBfX05PVU5JVF9IX18NCi0jZGVmaW5l
IF9fTk9VTklUX0hfXw0KLQ0KLSNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIg0KLQ0KLSNpZiAh
VUNPTkZJR19OT19GT1JNQVRUSU5HDQotDQotI2luY2x1ZGUgInVuaWNvZGUvbWVhc3VuaXQuaCIN
Ci0NCi0vKioNCi0gKiBcZmlsZQ0KLSAqIFxicmllZiBDKysgQVBJOiB1bml0cyBmb3IgcGVyY2Vu
dCBhbmQgcGVybWlsbGUNCi0gKi8NCi0NCi1VX05BTUVTUEFDRV9CRUdJTg0KLQ0KLSNpZm5kZWYg
VV9ISURFX0RSQUZUX0FQSQ0KLS8qKg0KLSAqIERpbWVuc2lvbmxlc3MgdW5pdCBmb3IgcGVyY2Vu
dCBhbmQgcGVybWlsbGUuDQotICogQHNlZSBOdW1iZXJGb3JtYXR0ZXINCi0gKiBAZHJhZnQgSUNV
IDYwDQotICovDQotY2xhc3MgVV9JMThOX0FQSSBOb1VuaXQ6IHB1YmxpYyBNZWFzdXJlVW5pdCB7
DQotcHVibGljOg0KLSAgICAvKioNCi0gICAgICogUmV0dXJucyBhbiBpbnN0YW5jZSBmb3IgdGhl
IGJhc2UgdW5pdCAoZGltZW5zaW9ubGVzcyBhbmQgbm8gc2NhbGluZykuDQotICAgICAqDQotICAg
ICAqIEByZXR1cm4gICAgICAgICAgICAgICBhIE5vVW5pdCBpbnN0YW5jZQ0KLSAgICAgKiBAZHJh
ZnQgSUNVIDYwDQotICAgICAqLw0KLSAgICBzdGF0aWMgTm9Vbml0IFVfRVhQT1JUMiBiYXNlKCk7
DQotDQotICAgIC8qKg0KLSAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIGZvciBwZXJjZW50LCBv
ciAxLzEwMCBvZiBhIGJhc2UgdW5pdC4NCi0gICAgICoNCi0gICAgICogQHJldHVybiAgICAgICAg
ICAgICAgIGEgTm9Vbml0IGluc3RhbmNlDQotICAgICAqIEBkcmFmdCBJQ1UgNjANCi0gICAgICov
DQotICAgIHN0YXRpYyBOb1VuaXQgVV9FWFBPUlQyIHBlcmNlbnQoKTsNCi0NCi0gICAgLyoqDQot
ICAgICAqIFJldHVybnMgYW4gaW5zdGFuY2UgZm9yIHBlcm1pbGxlLCBvciAxLzEwMDAgb2YgYSBi
YXNlIHVuaXQuDQotICAgICAqDQotICAgICAqIEByZXR1cm4gICAgICAgICAgICAgICBhIE5vVW5p
dCBpbnN0YW5jZQ0KLSAgICAgKiBAZHJhZnQgSUNVIDYwDQotICAgICAqLw0KLSAgICBzdGF0aWMg
Tm9Vbml0IFVfRVhQT1JUMiBwZXJtaWxsZSgpOw0KLQ0KLSAgICAvKioNCi0gICAgICogQ29weSBv
cGVyYXRvci4NCi0gICAgICogQGRyYWZ0IElDVSA2MA0KLSAgICAgKi8NCi0gICAgTm9Vbml0KGNv
bnN0IE5vVW5pdCYgb3RoZXIpOw0KLQ0KLSAgICAvKioNCi0gICAgICogRGVzdHJ1Y3Rvci4NCi0g
ICAgICogQGRyYWZ0IElDVSA2MA0KLSAgICAgKi8NCi0gICAgdmlydHVhbCB+Tm9Vbml0KCk7DQot
DQotICAgIC8qKg0KLSAgICAgKiBSZXR1cm4gYSBwb2x5bW9ycGhpYyBjbG9uZSBvZiB0aGlzIG9i
amVjdC4gIFRoZSByZXN1bHQgd2lsbA0KLSAgICAgKiBoYXZlIHRoZSBzYW1lIGNsYXNzIGFzIHJl
dHVybmVkIGJ5IGdldER5bmFtaWNDbGFzc0lEKCkuDQotICAgICAqIEBkcmFmdCBJQ1UgNjANCi0g
ICAgICovDQotICAgIHZpcnR1YWwgVU9iamVjdCogY2xvbmUoKSBjb25zdDsNCi0NCi0gICAgLyoq
DQotICAgICAqIFJldHVybnMgYSB1bmlxdWUgY2xhc3MgSUQgZm9yIHRoaXMgb2JqZWN0IFBPTFlN
T1JQSElDQUxMWS4NCi0gICAgICogVGhpcyBtZXRob2QgaW1wbGVtZW50cyBhIHNpbXBsZSBmb3Jt
IG9mIFJUVEkgdXNlZCBieSBJQ1UuDQotICAgICAqIEByZXR1cm4gVGhlIGNsYXNzIElEIGZvciB0
aGlzIG9iamVjdC4gQWxsIG9iamVjdHMgb2YgYSBnaXZlbg0KLSAgICAgKiBjbGFzcyBoYXZlIHRo
ZSBzYW1lIGNsYXNzIElELiAgT2JqZWN0cyBvZiBvdGhlciBjbGFzc2VzIGhhdmUNCi0gICAgICog
ZGlmZmVyZW50IGNsYXNzIElEcy4NCi0gICAgICogQGRyYWZ0IElDVSA2MA0KLSAgICAgKi8NCi0g
ICAgdmlydHVhbCBVQ2xhc3NJRCBnZXREeW5hbWljQ2xhc3NJRCgpIGNvbnN0Ow0KLQ0KLSAgICAv
KioNCi0gICAgICogUmV0dXJucyB0aGUgY2xhc3MgSUQgZm9yIHRoaXMgY2xhc3MuIFRoaXMgaXMg
dXNlZCB0byBjb21wYXJlIHRvDQotICAgICAqIHRoZSByZXR1cm4gdmFsdWUgb2YgZ2V0RHluYW1p
Y0NsYXNzSUQoKS4NCi0gICAgICogQHJldHVybiBUaGUgY2xhc3MgSUQgZm9yIGFsbCBvYmplY3Rz
IG9mIHRoaXMgY2xhc3MuDQotICAgICAqIEBkcmFmdCBJQ1UgNjANCi0gICAgICovDQotICAgIHN0
YXRpYyBVQ2xhc3NJRCBVX0VYUE9SVDIgZ2V0U3RhdGljQ2xhc3NJRCgpOw0KLQ0KLXByaXZhdGU6
DQotICAgIC8qKg0KLSAgICAgKiBDb25zdHJ1Y3Rvcg0KLSAgICAgKiBAaW50ZXJuYWwgKHByaXZh
dGUpDQotICAgICAqLw0KLSAgICBOb1VuaXQoY29uc3QgY2hhciogc3VidHlwZSk7DQotDQotfTsN
Ci0jZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8NCi0NCi1VX05BTUVTUEFDRV9FTkQNCi0N
Ci0jZW5kaWYgLyogI2lmICFVQ09ORklHX05PX0ZPUk1BVFRJTkcgKi8NCi0NCi0jZW5kaWYgLy8g
X19OT1VOSVRfSF9fDQotLy9lb2YNCi0vLw0KKy8vIMKpIDIwMTcgYW5kIGxhdGVyOiBVbmljb2Rl
LCBJbmMuIGFuZCBvdGhlcnMuCisvLyBMaWNlbnNlICYgdGVybXMgb2YgdXNlOiBodHRwOi8vd3d3
LnVuaWNvZGUub3JnL2NvcHlyaWdodC5odG1sCisvKgorICoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK
KyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE3LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hp
bmVzIENvcnBvcmF0aW9uLCAgICAgICAqCisgKiBHb29nbGUsIGFuZCBvdGhlcnMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioKKyAqLworCisjaWZuZGVmIF9fTk9VTklUX0hfXworI2RlZmluZSBf
X05PVU5JVF9IX18KKworI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCisKKyNpZiAhVUNPTkZJ
R19OT19GT1JNQVRUSU5HCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKworI2luY2x1ZGUgInVu
aWNvZGUvbWVhc3VuaXQuaCIKKworLyoqCisgKiBcZmlsZQorICogXGJyaWVmIEMrKyBBUEk6IHVu
aXRzIGZvciBwZXJjZW50IGFuZCBwZXJtaWxsZQorICovCisKK1VfTkFNRVNQQUNFX0JFR0lOCisK
Ky8qKgorICogRGltZW5zaW9ubGVzcyB1bml0IGZvciBwZXJjZW50IGFuZCBwZXJtaWxsZS4KKyAq
IEBzZWUgTnVtYmVyRm9ybWF0dGVyCisgKiBAZHJhZnQgSUNVIDYwCisgKi8KK2NsYXNzIFVfSTE4
Tl9BUEkgTm9Vbml0OiBwdWJsaWMgTWVhc3VyZVVuaXQgeworcHVibGljOgorICAgIC8qKgorICAg
ICAqIFJldHVybnMgYW4gaW5zdGFuY2UgZm9yIHRoZSBiYXNlIHVuaXQgKGRpbWVuc2lvbmxlc3Mg
YW5kIG5vIHNjYWxpbmcpLgorICAgICAqCisgICAgICogQHJldHVybiAgICAgICAgICAgICAgIGEg
Tm9Vbml0IGluc3RhbmNlCisgICAgICogQGRyYWZ0IElDVSA2MAorICAgICAqLworICAgIHN0YXRp
YyBOb1VuaXQgVV9FWFBPUlQyIGJhc2UoKTsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgYW4g
aW5zdGFuY2UgZm9yIHBlcmNlbnQsIG9yIDEvMTAwIG9mIGEgYmFzZSB1bml0LgorICAgICAqCisg
ICAgICogQHJldHVybiAgICAgICAgICAgICAgIGEgTm9Vbml0IGluc3RhbmNlCisgICAgICogQGRy
YWZ0IElDVSA2MAorICAgICAqLworICAgIHN0YXRpYyBOb1VuaXQgVV9FWFBPUlQyIHBlcmNlbnQo
KTsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgYW4gaW5zdGFuY2UgZm9yIHBlcm1pbGxlLCBv
ciAxLzEwMDAgb2YgYSBiYXNlIHVuaXQuCisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgICAgICAg
ICAgICAgYSBOb1VuaXQgaW5zdGFuY2UKKyAgICAgKiBAZHJhZnQgSUNVIDYwCisgICAgICovCisg
ICAgc3RhdGljIE5vVW5pdCBVX0VYUE9SVDIgcGVybWlsbGUoKTsKKworICAgIC8qKgorICAgICAq
IENvcHkgb3BlcmF0b3IuCisgICAgICogQGRyYWZ0IElDVSA2MAorICAgICAqLworICAgIE5vVW5p
dChjb25zdCBOb1VuaXQmIG90aGVyKTsKKworICAgIC8qKgorICAgICAqIERlc3RydWN0b3IuCisg
ICAgICogQGRyYWZ0IElDVSA2MAorICAgICAqLworICAgIHZpcnR1YWwgfk5vVW5pdCgpOworCisg
ICAgLyoqCisgICAgICogUmV0dXJuIGEgcG9seW1vcnBoaWMgY2xvbmUgb2YgdGhpcyBvYmplY3Qu
ICBUaGUgcmVzdWx0IHdpbGwKKyAgICAgKiBoYXZlIHRoZSBzYW1lIGNsYXNzIGFzIHJldHVybmVk
IGJ5IGdldER5bmFtaWNDbGFzc0lEKCkuCisgICAgICogQGRyYWZ0IElDVSA2MAorICAgICAqLwor
ICAgIHZpcnR1YWwgVU9iamVjdCogY2xvbmUoKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFJl
dHVybnMgYSB1bmlxdWUgY2xhc3MgSUQgZm9yIHRoaXMgb2JqZWN0IFBPTFlNT1JQSElDQUxMWS4K
KyAgICAgKiBUaGlzIG1ldGhvZCBpbXBsZW1lbnRzIGEgc2ltcGxlIGZvcm0gb2YgUlRUSSB1c2Vk
IGJ5IElDVS4KKyAgICAgKiBAcmV0dXJuIFRoZSBjbGFzcyBJRCBmb3IgdGhpcyBvYmplY3QuIEFs
bCBvYmplY3RzIG9mIGEgZ2l2ZW4KKyAgICAgKiBjbGFzcyBoYXZlIHRoZSBzYW1lIGNsYXNzIElE
LiAgT2JqZWN0cyBvZiBvdGhlciBjbGFzc2VzIGhhdmUKKyAgICAgKiBkaWZmZXJlbnQgY2xhc3Mg
SURzLgorICAgICAqIEBkcmFmdCBJQ1UgNjAKKyAgICAgKi8KKyAgICB2aXJ0dWFsIFVDbGFzc0lE
IGdldER5bmFtaWNDbGFzc0lEKCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRo
ZSBjbGFzcyBJRCBmb3IgdGhpcyBjbGFzcy4gVGhpcyBpcyB1c2VkIHRvIGNvbXBhcmUgdG8KKyAg
ICAgKiB0aGUgcmV0dXJuIHZhbHVlIG9mIGdldER5bmFtaWNDbGFzc0lEKCkuCisgICAgICogQHJl
dHVybiBUaGUgY2xhc3MgSUQgZm9yIGFsbCBvYmplY3RzIG9mIHRoaXMgY2xhc3MuCisgICAgICog
QGRyYWZ0IElDVSA2MAorICAgICAqLworICAgIHN0YXRpYyBVQ2xhc3NJRCBVX0VYUE9SVDIgZ2V0
U3RhdGljQ2xhc3NJRCgpOworCitwcml2YXRlOgorICAgIC8qKgorICAgICAqIENvbnN0cnVjdG9y
CisgICAgICogQGludGVybmFsIChwcml2YXRlKQorICAgICAqLworICAgIE5vVW5pdChjb25zdCBj
aGFyKiBzdWJ0eXBlKTsKKworfTsKKworVV9OQU1FU1BBQ0VfRU5ECisKKyNlbmRpZiAgLyogVV9I
SURFX0RSQUZUX0FQSSAqLworI2VuZGlmIC8qICNpZiAhVUNPTkZJR19OT19GT1JNQVRUSU5HICov
CisKKyNlbmRpZiAvLyBfX05PVU5JVF9IX18KKy8vZW9mCisvLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi9pY3UvdW5pY29kZS9udW1iZXJmb3JtYXR0ZXIuaCBiL1NvdXJjZS9XVEYvaWN1L3VuaWNv
ZGUvbnVtYmVyZm9ybWF0dGVyLmgKaW5kZXggNjY4MGQwZGQ2ZjU1ODZlZDI5N2Q4MDQwYTc4MWE1
NjAyMTNhNGJhZi4uZTlmZTM5YTkzMTY2NjU0NjM1N2NkYmNmMjJlYzVkZTI3OWM0OGRmMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi9pY3UvdW5pY29kZS9udW1iZXJmb3JtYXR0ZXIuaAorKysgYi9T
b3VyY2UvV1RGL2ljdS91bmljb2RlL251bWJlcmZvcm1hdHRlci5oCkBAIC0xLDI2NDYgKzEsMjYz
NiBAQAotLy8gwqkgMjAxNyBhbmQgbGF0ZXI6IFVuaWNvZGUsIEluYy4gYW5kIG90aGVycy4NCi0v
LyBMaWNlbnNlICYgdGVybXMgb2YgdXNlOiBodHRwOi8vd3d3LnVuaWNvZGUub3JnL2NvcHlyaWdo
dC5odG1sDQotDQotI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiDQotDQotI2lmICFVQ09ORklH
X05PX0ZPUk1BVFRJTkcNCi0jaWZuZGVmIF9fTlVNQkVSRk9STUFUVEVSX0hfXw0KLSNkZWZpbmUg
X19OVU1CRVJGT1JNQVRURVJfSF9fDQotDQotI2luY2x1ZGUgInVuaWNvZGUvYXBwZW5kYWJsZS5o
Ig0KLSNpbmNsdWRlICJ1bmljb2RlL2RjZm10c3ltLmgiDQotI2luY2x1ZGUgInVuaWNvZGUvY3Vy
cnVuaXQuaCINCi0jaW5jbHVkZSAidW5pY29kZS9maWVsZHBvcy5oIg0KLSNpbmNsdWRlICJ1bmlj
b2RlL2Zwb3NpdGVyLmgiDQotI2luY2x1ZGUgInVuaWNvZGUvbWVhc3VuaXQuaCINCi0jaW5jbHVk
ZSAidW5pY29kZS9ub3VuaXQuaCINCi0jaW5jbHVkZSAidW5pY29kZS9wbHVycnVsZS5oIg0KLSNp
bmNsdWRlICJ1bmljb2RlL3VjdXJyLmgiDQotI2luY2x1ZGUgInVuaWNvZGUvdW51bS5oIg0KLSNp
bmNsdWRlICJ1bmljb2RlL3VudW1iZXJmb3JtYXR0ZXIuaCINCi0jaW5jbHVkZSAidW5pY29kZS91
b2JqZWN0LmgiDQotDQotI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJDQotDQotLyoqDQotICogXGZp
bGUNCi0gKiBcYnJpZWYgQysrIEFQSTogTGlicmFyeSBmb3IgbG9jYWxpemVkIG51bWJlciBmb3Jt
YXR0aW5nIGludHJvZHVjZWQgaW4gSUNVIDYwLg0KLSAqDQotICogVGhpcyBsaWJyYXJ5IHdhcyBp
bnRyb2R1Y2VkIGluIElDVSA2MCB0byBzaW1wbGlmeSB0aGUgcHJvY2VzcyBvZiBmb3JtYXR0aW5n
IGxvY2FsaXplZCBudW1iZXIgc3RyaW5ncy4NCi0gKiBCYXNpYyB1c2FnZSBleGFtcGxlczoNCi0g
Kg0KLSAqIDxwcmU+DQotICogLy8gTW9zdCBiYXNpYyB1c2FnZToNCi0gKiBOdW1iZXJGb3JtYXR0
ZXI6OndpdGhMb2NhbGUoLi4uKS5mb3JtYXQoMTIzKS50b1N0cmluZygpOyAgLy8gMSwyMzQgaW4g
ZW4tVVMNCi0gKg0KLSAqIC8vIEN1c3RvbSBub3RhdGlvbiwgdW5pdCwgYW5kIHJvdW5kaW5nIHBy
ZWNpc2lvbjoNCi0gKiBOdW1iZXJGb3JtYXR0ZXI6OndpdGgoKQ0KLSAqICAgICAubm90YXRpb24o
Tm90YXRpb246OmNvbXBhY3RTaG9ydCgpKQ0KLSAqICAgICAudW5pdChDdXJyZW5jeVVuaXQoIkVV
UiIsIHN0YXR1cykpDQotICogICAgIC5wcmVjaXNpb24oUHJlY2lzaW9uOjptYXhEaWdpdHMoMikp
DQotICogICAgIC5sb2NhbGUoLi4uKQ0KLSAqICAgICAuZm9ybWF0KDEyMzQpDQotICogICAgIC50
b1N0cmluZygpOyAgLy8g4oKsMS4ySyBpbiBlbi1VUw0KLSAqDQotICogLy8gQ3JlYXRlIGEgZm9y
bWF0dGVyIGluIGEgc2luZ2xldG9uIGZvciB1c2UgbGF0ZXI6DQotICogc3RhdGljIGNvbnN0IExv
Y2FsaXplZE51bWJlckZvcm1hdHRlciBmb3JtYXR0ZXIgPSBOdW1iZXJGb3JtYXR0ZXI6OndpdGhM
b2NhbGUoLi4uKQ0KLSAqICAgICAudW5pdChOb1VuaXQ6OnBlcmNlbnQoKSkNCi0gKiAgICAgLnBy
ZWNpc2lvbihQcmVjaXNpb246OmZpeGVkRnJhY3Rpb24oMykpOw0KLSAqIGZvcm1hdHRlci5mb3Jt
YXQoNS45ODMxKS50b1N0cmluZygpOyAgLy8gNS45ODMlIGluIGVuLVVTDQotICoNCi0gKiAvLyBD
cmVhdGUgYSAidGVtcGxhdGUiIGluIGEgc2luZ2xldG9uIGJ1dCB3aXRob3V0IHNldHRpbmcgYSBs
b2NhbGUgdW50aWwgdGhlIGNhbGwgc2l0ZToNCi0gKiBzdGF0aWMgY29uc3QgVW5sb2NhbGl6ZWRO
dW1iZXJGb3JtYXR0ZXIgdGVtcGxhdGUgPSBOdW1iZXJGb3JtYXR0ZXI6OndpdGgoKQ0KLSAqICAg
ICAuc2lnbihVTnVtYmVyU2lnbkRpc3BsYXk6OlVOVU1fU0lHTl9BTFdBWVMpDQotICogICAgIC5h
ZG9wdFVuaXQoTWVhc3VyZVVuaXQ6OmNyZWF0ZU1ldGVyKHN0YXR1cykpDQotICogICAgIC51bml0
V2lkdGgoVU51bWJlclVuaXRXaWR0aDo6VU5VTV9VTklUX1dJRFRIX0ZVTExfTkFNRSk7DQotICog
dGVtcGxhdGUubG9jYWxlKC4uLikuZm9ybWF0KDEyMzQpLnRvU3RyaW5nKCk7ICAvLyArMSwyMzQg
bWV0ZXJzIGluIGVuLVVTDQotICogPC9wcmU+DQotICoNCi0gKiA8cD4NCi0gKiBUaGlzIEFQSSBv
ZmZlcnMgbW9yZSBmZWF0dXJlcyB0aGFuIERlY2ltYWxGb3JtYXQgYW5kIGlzIGdlYXJlZCB0b3dh
cmQgbmV3IHVzZXJzIG9mIElDVS4NCi0gKg0KLSAqIDxwPg0KLSAqIE51bWJlckZvcm1hdHRlciBp
bnN0YW5jZXMgYXJlIGltbXV0YWJsZSBhbmQgdGhyZWFkIHNhZmUuIFRoaXMgbWVhbnMgdGhhdCBp
bnZva2luZyBhIGNvbmZpZ3VyYXRpb24gbWV0aG9kIGhhcyBubw0KLSAqIGVmZmVjdCBvbiB0aGUg
cmVjZWl2aW5nIGluc3RhbmNlOyB5b3UgbXVzdCBzdG9yZSBhbmQgdXNlIHRoZSBuZXcgbnVtYmVy
IGZvcm1hdHRlciBpbnN0YW5jZSBpdCByZXR1cm5zIGluc3RlYWQuDQotICoNCi0gKiA8cHJlPg0K
LSAqIFVubG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyIGZvcm1hdHRlciA9IFVubG9jYWxpemVkTnVt
YmVyRm9ybWF0dGVyOjp3aXRoKCkubm90YXRpb24oTm90YXRpb246OnNjaWVudGlmaWMoKSk7DQot
ICogZm9ybWF0dGVyLnByZWNpc2lvbihQcmVjaXNpb24ubWF4RnJhY3Rpb24oMikpOyAvLyBkb2Vz
IG5vdGhpbmchDQotICogZm9ybWF0dGVyLmxvY2FsZShMb2NhbGUuZ2V0RW5nbGlzaCgpKS5mb3Jt
YXQoOS44NzY1KS50b1N0cmluZygpOyAvLyBwcmludHMgIjkuODc2NUUwIiwgbm90ICI5Ljg4RTAi
DQotICogPC9wcmU+DQotICoNCi0gKiA8cD4NCi0gKiBUaGlzIEFQSSBpcyBiYXNlZCBvbiB0aGUg
PGVtPmZsdWVudDwvZW0+IGRlc2lnbiBwYXR0ZXJuIHBvcHVsYXJpemVkIGJ5IGxpYnJhcmllcyBz
dWNoIGFzIEdvb2dsZSdzIEd1YXZhLiBGb3INCi0gKiBleHRlbnNpdmUgZGV0YWlscyBvbiB0aGUg
ZGVzaWduIG9mIHRoaXMgQVBJLCByZWFkIDxhIGhyZWY9Imh0dHBzOi8vZ29vLmdsL3N6aTVWQiI+
dGhlIGRlc2lnbiBkb2M8L2E+Lg0KLSAqDQotICogQGF1dGhvciBTaGFuZSBDYXJyDQotICovDQot
DQotVV9OQU1FU1BBQ0VfQkVHSU4NCi0NCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9uczoNCi1jbGFz
cyBJRml4ZWREZWNpbWFsOw0KLWNsYXNzIEZpZWxkUG9zaXRpb25JdGVyYXRvckhhbmRsZXI7DQot
DQotbmFtZXNwYWNlIG51bXBhcnNlIHsNCi1uYW1lc3BhY2UgaW1wbCB7DQotDQotLy8gRm9yd2Fy
ZCBkZWNsYXJhdGlvbnM6DQotY2xhc3MgTnVtYmVyUGFyc2VySW1wbDsNCi1jbGFzcyBNdWx0aXBs
aWVyUGFyc2VIYW5kbGVyOw0KLQ0KLX0NCi19DQotDQotbmFtZXNwYWNlIG51bWJlciB7ICAvLyBp
Y3U6Om51bWJlcg0KLQ0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zOg0KLWNsYXNzIFVubG9jYWxp
emVkTnVtYmVyRm9ybWF0dGVyOw0KLWNsYXNzIExvY2FsaXplZE51bWJlckZvcm1hdHRlcjsNCi1j
bGFzcyBGb3JtYXR0ZWROdW1iZXI7DQotY2xhc3MgTm90YXRpb247DQotY2xhc3MgU2NpZW50aWZp
Y05vdGF0aW9uOw0KLWNsYXNzIFByZWNpc2lvbjsNCi1jbGFzcyBGcmFjdGlvblByZWNpc2lvbjsN
Ci1jbGFzcyBDdXJyZW5jeVByZWNpc2lvbjsNCi1jbGFzcyBJbmNyZW1lbnRQcmVjaXNpb247DQot
Y2xhc3MgSW50ZWdlcldpZHRoOw0KLQ0KLW5hbWVzcGFjZSBpbXBsIHsNCi0NCi0vKioNCi0gKiBE
YXRhdHlwZSBmb3IgbWluaW11bS9tYXhpbXVtIGZyYWN0aW9uIGRpZ2l0cy4gTXVzdCBiZSBhYmxl
IHRvIGhvbGQga01heEludEZyYWNTaWcuDQotICoNCi0gKiBAaW50ZXJuYWwNCi0gKi8NCi10eXBl
ZGVmIGludDE2X3QgZGlnaXRzX3Q7DQotDQotLyoqDQotICogVXNlIGEgZGVmYXVsdCB0aHJlc2hv
bGQgb2YgMy4gVGhpcyBtZWFucyB0aGF0IHRoZSB0aGlyZCB0aW1lIC5mb3JtYXQoKSBpcyBjYWxs
ZWQsIHRoZSBkYXRhIHN0cnVjdHVyZXMgZ2V0IGJ1aWx0DQotICogdXNpbmcgdGhlICJzYWZlIiBj
b2RlIHBhdGguIFRoZSBmaXJzdCB0d28gY2FsbHMgdG8gLmZvcm1hdCgpIHdpbGwgdHJpZ2dlciB0
aGUgdW5zYWZlIGNvZGUgcGF0aC4NCi0gKg0KLSAqIEBpbnRlcm5hbA0KLSAqLw0KLXN0YXRpYyBj
b25zdGV4cHIgaW50MzJfdCBERUZBVUxUX1RIUkVTSE9MRCA9IDM7DQotDQotLy8gRm9yd2FyZCBk
ZWNsYXJhdGlvbnM6DQotY2xhc3MgUGFkZGVyOw0KLXN0cnVjdCBNYWNyb1Byb3BzOw0KLXN0cnVj
dCBNaWNyb1Byb3BzOw0KLWNsYXNzIERlY2ltYWxRdWFudGl0eTsNCi1zdHJ1Y3QgVUZvcm1hdHRl
ZE51bWJlckRhdGE7DQotY2xhc3MgTnVtYmVyRm9ybWF0dGVySW1wbDsNCi1zdHJ1Y3QgUGFyc2Vk
UGF0dGVybkluZm87DQotY2xhc3MgU2NpZW50aWZpY01vZGlmaWVyOw0KLWNsYXNzIE11bHRpcGxp
ZXJQcm9kdWNlcjsNCi1jbGFzcyBSb3VuZGluZ0ltcGw7DQotY2xhc3MgU2NpZW50aWZpY0hhbmRs
ZXI7DQotY2xhc3MgTW9kaWZpZXI7DQotY2xhc3MgTnVtYmVyU3RyaW5nQnVpbGRlcjsNCi1jbGFz
cyBBZmZpeFBhdHRlcm5Qcm92aWRlcjsNCi1jbGFzcyBOdW1iZXJQcm9wZXJ0eU1hcHBlcjsNCi1z
dHJ1Y3QgRGVjaW1hbEZvcm1hdFByb3BlcnRpZXM7DQotY2xhc3MgTXVsdGlwbGllckZvcm1hdEhh
bmRsZXI7DQotY2xhc3MgQ3VycmVuY3lTeW1ib2xzOw0KLWNsYXNzIEdlbmVyYXRvckhlbHBlcnM7
DQotY2xhc3MgRGVjTnVtOw0KLQ0KLX0gLy8gbmFtZXNwYWNlIGltcGwNCi0NCi0vLyBSZXNlcnZl
IGV4dHJhIG5hbWVzIGluIGNhc2UgdGhleSBhcmUgYWRkZWQgYXMgY2xhc3NlcyBpbiB0aGUgZnV0
dXJlOg0KLXR5cGVkZWYgTm90YXRpb24gQ29tcGFjdE5vdGF0aW9uOw0KLXR5cGVkZWYgTm90YXRp
b24gU2ltcGxlTm90YXRpb247DQotDQotLyoqDQotICogQSBjbGFzcyB0aGF0IGRlZmluZXMgdGhl
IG5vdGF0aW9uIHN0eWxlIHRvIGJlIHVzZWQgd2hlbiBmb3JtYXR0aW5nIG51bWJlcnMgaW4gTnVt
YmVyRm9ybWF0dGVyLg0KLSAqDQotICogQGRyYWZ0IElDVSA2MA0KLSAqLw0KLWNsYXNzIFVfSTE4
Tl9BUEkgTm90YXRpb24gOiBwdWJsaWMgVU1lbW9yeSB7DQotICBwdWJsaWM6DQotICAgIC8qKg0K
LSAgICAgKiBQcmludCB0aGUgbnVtYmVyIHVzaW5nIHNjaWVudGlmaWMgbm90YXRpb24gKGFsc28g
a25vd24gYXMgc2NpZW50aWZpYyBmb3JtLCBzdGFuZGFyZCBpbmRleCBmb3JtLCBvciBzdGFuZGFy
ZCBmb3JtDQotICAgICAqIGluIHRoZSBVSykuIFRoZSBmb3JtYXQgZm9yIHNjaWVudGlmaWMgbm90
YXRpb24gdmFyaWVzIGJ5IGxvY2FsZTsgZm9yIGV4YW1wbGUsIG1hbnkgV2VzdGVybiBsb2NhbGVz
IGRpc3BsYXkgdGhlDQotICAgICAqIG51bWJlciBpbiB0aGUgZm9ybSAiI0UwIiwgd2hlcmUgdGhl
IG51bWJlciBpcyBkaXNwbGF5ZWQgd2l0aCBvbmUgZGlnaXQgYmVmb3JlIHRoZSBkZWNpbWFsIHNl
cGFyYXRvciwgemVybyBvciBtb3JlDQotICAgICAqIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbCBz
ZXBhcmF0b3IsIGFuZCB0aGUgY29ycmVzcG9uZGluZyBwb3dlciBvZiAxMCBkaXNwbGF5ZWQgYWZ0
ZXIgdGhlICJFIi4NCi0gICAgICoNCi0gICAgICogPHA+DQotICAgICAqIEV4YW1wbGUgb3V0cHV0
cyBpbiA8ZW0+ZW4tVVM8L2VtPiB3aGVuIHByaW50aW5nIDguNzY1RTQgdGhyb3VnaCA4Ljc2NUUt
MzoNCi0gICAgICoNCi0gICAgICogPHByZT4NCi0gICAgICogOC43NjVFNA0KLSAgICAgKiA4Ljc2
NUUzDQotICAgICAqIDguNzY1RTINCi0gICAgICogOC43NjVFMQ0KLSAgICAgKiA4Ljc2NUUwDQot
ICAgICAqIDguNzY1RS0xDQotICAgICAqIDguNzY1RS0yDQotICAgICAqIDguNzY1RS0zDQotICAg
ICAqIDBFMA0KLSAgICAgKiA8L3ByZT4NCi0gICAgICoNCi0gICAgICogQHJldHVybiBBIFNjaWVu
dGlmaWNOb3RhdGlvbiBmb3IgY2hhaW5pbmcgb3IgcGFzc2luZyB0byB0aGUgTnVtYmVyRm9ybWF0
dGVyIG5vdGF0aW9uKCkgc2V0dGVyLg0KLSAgICAgKiBAZHJhZnQgSUNVIDYwDQotICAgICAqLw0K
LSAgICBzdGF0aWMgU2NpZW50aWZpY05vdGF0aW9uIHNjaWVudGlmaWMoKTsNCi0NCi0gICAgLyoq
DQotICAgICAqIFByaW50IHRoZSBudW1iZXIgdXNpbmcgZW5naW5lZXJpbmcgbm90YXRpb24sIGEg
dmFyaWFudCBvZiBzY2llbnRpZmljIG5vdGF0aW9uIGluIHdoaWNoIHRoZSBleHBvbmVudCBtdXN0
IGJlDQotICAgICAqIGRpdmlzaWJsZSBieSAzLg0KLSAgICAgKg0KLSAgICAgKiA8cD4NCi0gICAg
ICogRXhhbXBsZSBvdXRwdXRzIGluIDxlbT5lbi1VUzwvZW0+IHdoZW4gcHJpbnRpbmcgOC43NjVF
NCB0aHJvdWdoIDguNzY1RS0zOg0KLSAgICAgKg0KLSAgICAgKiA8cHJlPg0KLSAgICAgKiA4Ny42
NUUzDQotICAgICAqIDguNzY1RTMNCi0gICAgICogODc2LjVFMA0KLSAgICAgKiA4Ny42NUUwDQot
ICAgICAqIDguNzY1RTANCi0gICAgICogODc2LjVFLTMNCi0gICAgICogODcuNjVFLTMNCi0gICAg
ICogOC43NjVFLTMNCi0gICAgICogMEUwDQotICAgICAqIDwvcHJlPg0KLSAgICAgKg0KLSAgICAg
KiBAcmV0dXJuIEEgU2NpZW50aWZpY05vdGF0aW9uIGZvciBjaGFpbmluZyBvciBwYXNzaW5nIHRv
IHRoZSBOdW1iZXJGb3JtYXR0ZXIgbm90YXRpb24oKSBzZXR0ZXIuDQotICAgICAqIEBkcmFmdCBJ
Q1UgNjANCi0gICAgICovDQotICAgIHN0YXRpYyBTY2llbnRpZmljTm90YXRpb24gZW5naW5lZXJp
bmcoKTsNCi0NCi0gICAgLyoqDQotICAgICAqIFByaW50IHRoZSBudW1iZXIgdXNpbmcgc2hvcnQt
Zm9ybSBjb21wYWN0IG5vdGF0aW9uLg0KLSAgICAgKg0KLSAgICAgKiA8cD4NCi0gICAgICogPGVt
PkNvbXBhY3Qgbm90YXRpb248L2VtPiwgZGVmaW5lZCBpbiBVbmljb2RlIFRlY2huaWNhbCBTdGFu
ZGFyZCAjMzUgUGFydCAzIFNlY3Rpb24gMi40LjEsIHByaW50cyBudW1iZXJzIHdpdGgNCi0gICAg
ICogbG9jYWxpemVkIHByZWZpeGVzIG9yIHN1ZmZpeGVzIGNvcnJlc3BvbmRpbmcgdG8gZGlmZmVy
ZW50IHBvd2VycyBvZiB0ZW4uIENvbXBhY3Qgbm90YXRpb24gaXMgc2ltaWxhciB0bw0KLSAgICAg
KiBlbmdpbmVlcmluZyBub3RhdGlvbiBpbiBob3cgaXQgc2NhbGVzIG51bWJlcnMuDQotICAgICAq
DQotICAgICAqIDxwPg0KLSAgICAgKiBDb21wYWN0IG5vdGF0aW9uIGlzIGlkZWFsIGZvciBkaXNw
bGF5aW5nIGxhcmdlIG51bWJlcnMgKG92ZXIgfjEwMDApIHRvIGh1bWFucyB3aGlsZSBhdCB0aGUg
c2FtZSB0aW1lIG1pbmltaXppbmcNCi0gICAgICogc2NyZWVuIHJlYWwgZXN0YXRlLg0KLSAgICAg
Kg0KLSAgICAgKiA8cD4NCi0gICAgICogSW4gc2hvcnQgZm9ybSwgdGhlIHBvd2VycyBvZiB0ZW4g
YXJlIGFiYnJldmlhdGVkLiBJbiA8ZW0+ZW4tVVM8L2VtPiwgdGhlIGFiYnJldmlhdGlvbnMgYXJl
ICJLIiBmb3IgdGhvdXNhbmRzLCAiTSINCi0gICAgICogZm9yIG1pbGxpb25zLCAiQiIgZm9yIGJp
bGxpb25zLCBhbmQgIlQiIGZvciB0cmlsbGlvbnMuIEV4YW1wbGUgb3V0cHV0cyBpbiA8ZW0+ZW4t
VVM8L2VtPiB3aGVuIHByaW50aW5nIDguNzY1RTcNCi0gICAgICogdGhyb3VnaCA4Ljc2NUUwOg0K
LSAgICAgKg0KLSAgICAgKiA8cHJlPg0KLSAgICAgKiA4OE0NCi0gICAgICogOC44TQ0KLSAgICAg
KiA4NzZLDQotICAgICAqIDg4Sw0KLSAgICAgKiA4LjhLDQotICAgICAqIDg3Ng0KLSAgICAgKiA4
OA0KLSAgICAgKiA4LjgNCi0gICAgICogPC9wcmU+DQotICAgICAqDQotICAgICAqIDxwPg0KLSAg
ICAgKiBXaGVuIGNvbXBhY3Qgbm90YXRpb24gaXMgc3BlY2lmaWVkIHdpdGhvdXQgYW4gZXhwbGlj
aXQgcm91bmRpbmcgcHJlY2lzaW9uLCBudW1iZXJzIGFyZSByb3VuZGVkIG9mZiB0byB0aGUgY2xv
c2VzdA0KLSAgICAgKiBpbnRlZ2VyIGFmdGVyIHNjYWxpbmcgdGhlIG51bWJlciBieSB0aGUgY29y
cmVzcG9uZGluZyBwb3dlciBvZiAxMCwgYnV0IHdpdGggYSBkaWdpdCBzaG93biBhZnRlciB0aGUg
ZGVjaW1hbA0KLSAgICAgKiBzZXBhcmF0b3IgaWYgdGhlcmUgaXMgb25seSBvbmUgZGlnaXQgYmVm
b3JlIHRoZSBkZWNpbWFsIHNlcGFyYXRvci4gVGhlIGRlZmF1bHQgY29tcGFjdCBub3RhdGlvbiBy
b3VuZGluZyBwcmVjaXNpb24NCi0gICAgICogaXMgZXF1aXZhbGVudCB0bzoNCi0gICAgICoNCi0g
ICAgICogPHByZT4NCi0gICAgICogUHJlY2lzaW9uOjppbnRlZ2VyKCkud2l0aE1pbkRpZ2l0cygy
KQ0KLSAgICAgKiA8L3ByZT4NCi0gICAgICoNCi0gICAgICogQHJldHVybiBBIENvbXBhY3ROb3Rh
dGlvbiBmb3IgcGFzc2luZyB0byB0aGUgTnVtYmVyRm9ybWF0dGVyIG5vdGF0aW9uKCkgc2V0dGVy
Lg0KLSAgICAgKiBAZHJhZnQgSUNVIDYwDQotICAgICAqLw0KLSAgICBzdGF0aWMgQ29tcGFjdE5v
dGF0aW9uIGNvbXBhY3RTaG9ydCgpOw0KLQ0KLSAgICAvKioNCi0gICAgICogUHJpbnQgdGhlIG51
bWJlciB1c2luZyBsb25nLWZvcm0gY29tcGFjdCBub3RhdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRp
b24gb24gY29tcGFjdCBub3RhdGlvbiwgc2VlDQotICAgICAqIHtAbGluayAjY29tcGFjdFNob3J0
fS4NCi0gICAgICoNCi0gICAgICogPHA+DQotICAgICAqIEluIGxvbmcgZm9ybSwgdGhlIHBvd2Vy
cyBvZiB0ZW4gYXJlIHNwZWxsZWQgb3V0IGZ1bGx5LiBFeGFtcGxlIG91dHB1dHMgaW4gPGVtPmVu
LVVTPC9lbT4gd2hlbiBwcmludGluZyA4Ljc2NUU3DQotICAgICAqIHRocm91Z2ggOC43NjVFMDoN
Ci0gICAgICoNCi0gICAgICogPHByZT4NCi0gICAgICogODggbWlsbGlvbg0KLSAgICAgKiA4Ljgg
bWlsbGlvbg0KLSAgICAgKiA4NzYgdGhvdXNhbmQNCi0gICAgICogODggdGhvdXNhbmQNCi0gICAg
ICogOC44IHRob3VzYW5kDQotICAgICAqIDg3Ng0KLSAgICAgKiA4OA0KLSAgICAgKiA4LjgNCi0g
ICAgICogPC9wcmU+DQotICAgICAqDQotICAgICAqIEByZXR1cm4gQSBDb21wYWN0Tm90YXRpb24g
Zm9yIHBhc3NpbmcgdG8gdGhlIE51bWJlckZvcm1hdHRlciBub3RhdGlvbigpIHNldHRlci4NCi0g
ICAgICogQGRyYWZ0IElDVSA2MA0KLSAgICAgKi8NCi0gICAgc3RhdGljIENvbXBhY3ROb3RhdGlv
biBjb21wYWN0TG9uZygpOw0KLQ0KLSAgICAvKioNCi0gICAgICogUHJpbnQgdGhlIG51bWJlciB1
c2luZyBzaW1wbGUgbm90YXRpb24gd2l0aG91dCBhbnkgc2NhbGluZyBieSBwb3dlcnMgb2YgdGVu
LiBUaGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLg0KLSAgICAgKg0KLSAgICAgKiA8cD4NCi0g
ICAgICogU2luY2UgdGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvciwgdGhpcyBtZXRob2QgbmVl
ZHMgdG8gYmUgY2FsbGVkIG9ubHkgd2hlbiBpdCBpcyBuZWNlc3NhcnkgdG8gb3ZlcnJpZGUgYQ0K
LSAgICAgKiBwcmV2aW91cyBzZXR0aW5nLg0KLSAgICAgKg0KLSAgICAgKiA8cD4NCi0gICAgICog
RXhhbXBsZSBvdXRwdXRzIGluIDxlbT5lbi1VUzwvZW0+IHdoZW4gcHJpbnRpbmcgOC43NjVFNyB0
aHJvdWdoIDguNzY1RTA6DQotICAgICAqDQotICAgICAqIDxwcmU+DQotICAgICAqIDg3LDY1MCww
MDANCi0gICAgICogOCw3NjUsMDAwDQotICAgICAqIDg3Niw1MDANCi0gICAgICogODcsNjUwDQot
ICAgICAqIDgsNzY1DQotICAgICAqIDg3Ni41DQotICAgICAqIDg3LjY1DQotICAgICAqIDguNzY1
DQotICAgICAqIDwvcHJlPg0KLSAgICAgKg0KLSAgICAgKiBAcmV0dXJuIEEgU2ltcGxlTm90YXRp
b24gZm9yIHBhc3NpbmcgdG8gdGhlIE51bWJlckZvcm1hdHRlciBub3RhdGlvbigpIHNldHRlci4N
Ci0gICAgICogQGRyYWZ0IElDVSA2MA0KLSAgICAgKi8NCi0gICAgc3RhdGljIFNpbXBsZU5vdGF0
aW9uIHNpbXBsZSgpOw0KLQ0KLSAgcHJpdmF0ZToNCi0gICAgZW51bSBOb3RhdGlvblR5cGUgew0K
LSAgICAgICAgTlROX1NDSUVOVElGSUMsIE5UTl9DT01QQUNULCBOVE5fU0lNUExFLCBOVE5fRVJS
T1INCi0gICAgfSBmVHlwZTsNCi0NCi0gICAgdW5pb24gTm90YXRpb25VbmlvbiB7DQotICAgICAg
ICAvLyBGb3IgTlROX1NDSUVOVElGSUMNCi0gICAgICAgIHN0cnVjdCBTY2llbnRpZmljU2V0dGlu
Z3Mgew0KLSAgICAgICAgICAgIGludDhfdCBmRW5naW5lZXJpbmdJbnRlcnZhbDsNCi0gICAgICAg
ICAgICBib29sIGZSZXF1aXJlTWluSW50Ow0KLSAgICAgICAgICAgIGltcGw6OmRpZ2l0c190IGZN
aW5FeHBvbmVudERpZ2l0czsNCi0gICAgICAgICAgICBVTnVtYmVyU2lnbkRpc3BsYXkgZkV4cG9u
ZW50U2lnbkRpc3BsYXk7DQotICAgICAgICB9IHNjaWVudGlmaWM7DQotDQotICAgICAgICAvLyBG
b3IgTlROX0NPTVBBQ1QNCi0gICAgICAgIFVOdW1iZXJDb21wYWN0U3R5bGUgY29tcGFjdFN0eWxl
Ow0KLQ0KLSAgICAgICAgLy8gRm9yIE5UTl9FUlJPUg0KLSAgICAgICAgVUVycm9yQ29kZSBlcnJv
ckNvZGU7DQotICAgIH0gZlVuaW9uOw0KLQ0KLSAgICB0eXBlZGVmIE5vdGF0aW9uVW5pb246OlNj
aWVudGlmaWNTZXR0aW5ncyBTY2llbnRpZmljU2V0dGluZ3M7DQotDQotICAgIE5vdGF0aW9uKGNv
bnN0IE5vdGF0aW9uVHlwZSAmdHlwZSwgY29uc3QgTm90YXRpb25VbmlvbiAmdW5pb25fKSA6IGZU
eXBlKHR5cGUpLCBmVW5pb24odW5pb25fKSB7fQ0KLQ0KLSAgICBOb3RhdGlvbihVRXJyb3JDb2Rl
IGVycm9yQ29kZSkgOiBmVHlwZShOVE5fRVJST1IpIHsNCi0gICAgICAgIGZVbmlvbi5lcnJvckNv
ZGUgPSBlcnJvckNvZGU7DQotICAgIH0NCi0NCi0gICAgTm90YXRpb24oKSA6IGZUeXBlKE5UTl9T
SU1QTEUpLCBmVW5pb24oKSB7fQ0KLQ0KLSAgICBVQm9vbCBjb3B5RXJyb3JUbyhVRXJyb3JDb2Rl
ICZzdGF0dXMpIGNvbnN0IHsNCi0gICAgICAgIGlmIChmVHlwZSA9PSBOVE5fRVJST1IpIHsNCi0g
ICAgICAgICAgICBzdGF0dXMgPSBmVW5pb24uZXJyb3JDb2RlOw0KLSAgICAgICAgICAgIHJldHVy
biBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotDQot
ICAgIC8vIFRvIGFsbG93IE1hY3JvUHJvcHMgdG8gaW5pdGlhbGl6ZSBlbXB0eSBpbnN0YW5jZXM6
DQotICAgIGZyaWVuZCBzdHJ1Y3QgaW1wbDo6TWFjcm9Qcm9wczsNCi0gICAgZnJpZW5kIGNsYXNz
IFNjaWVudGlmaWNOb3RhdGlvbjsNCi0NCi0gICAgLy8gVG8gYWxsb3cgaW1wbGVtZW50YXRpb24g
dG8gYWNjZXNzIGludGVybmFsIHR5cGVzOg0KLSAgICBmcmllbmQgY2xhc3MgaW1wbDo6TnVtYmVy
Rm9ybWF0dGVySW1wbDsNCi0gICAgZnJpZW5kIGNsYXNzIGltcGw6OlNjaWVudGlmaWNNb2RpZmll
cjsNCi0gICAgZnJpZW5kIGNsYXNzIGltcGw6OlNjaWVudGlmaWNIYW5kbGVyOw0KLQ0KLSAgICAv
LyBUbyBhbGxvdyBhY2Nlc3MgdG8gdGhlIHNrZWxldG9uIGdlbmVyYXRpb24gY29kZToNCi0gICAg
ZnJpZW5kIGNsYXNzIGltcGw6OkdlbmVyYXRvckhlbHBlcnM7DQotfTsNCi0NCi0vKioNCi0gKiBB
IGNsYXNzIHRoYXQgZGVmaW5lcyB0aGUgc2NpZW50aWZpYyBub3RhdGlvbiBzdHlsZSB0byBiZSB1
c2VkIHdoZW4gZm9ybWF0dGluZyBudW1iZXJzIGluIE51bWJlckZvcm1hdHRlci4NCi0gKg0KLSAq
IDxwPg0KLSAqIFRvIGNyZWF0ZSBhIFNjaWVudGlmaWNOb3RhdGlvbiwgdXNlIG9uZSBvZiB0aGUg
ZmFjdG9yeSBtZXRob2RzIGluIHtAbGluayBOb3RhdGlvbn0uDQotICoNCi0gKiBAZHJhZnQgSUNV
IDYwDQotICovDQotY2xhc3MgVV9JMThOX0FQSSBTY2llbnRpZmljTm90YXRpb24gOiBwdWJsaWMg
Tm90YXRpb24gew0KLSAgcHVibGljOg0KLSAgICAvKioNCi0gICAgICogU2V0cyB0aGUgbWluaW11
bSBudW1iZXIgb2YgZGlnaXRzIHRvIHNob3cgaW4gdGhlIGV4cG9uZW50IG9mIHNjaWVudGlmaWMg
bm90YXRpb24sIHBhZGRpbmcgd2l0aCB6ZXJvcyBpZg0KLSAgICAgKiBuZWNlc3NhcnkuIFVzZWZ1
bCBmb3IgZml4ZWQtd2lkdGggZGlzcGxheS4NCi0gICAgICoNCi0gICAgICogPHA+DQotICAgICAq
IEZvciBleGFtcGxlLCB3aXRoIG1pbkV4cG9uZW50RGlnaXRzPTIsIHRoZSBudW1iZXIgMTIzIHdp
bGwgYmUgcHJpbnRlZCBhcyAiMS4yM0UwMiIgaW4gPGVtPmVuLVVTPC9lbT4gaW5zdGVhZCBvZg0K
LSAgICAgKiB0aGUgZGVmYXVsdCAiMS4yM0UyIi4NCi0gICAgICoNCi0gICAgICogQHBhcmFtIG1p
bkV4cG9uZW50RGlnaXRzDQotICAgICAqICAgICAgICAgICAgVGhlIG1pbmltdW0gbnVtYmVyIG9m
IGRpZ2l0cyB0byBzaG93IGluIHRoZSBleHBvbmVudC4NCi0gICAgICogQHJldHVybiBBIFNjaWVu
dGlmaWNOb3RhdGlvbiwgZm9yIGNoYWluaW5nLg0KLSAgICAgKiBAZHJhZnQgSUNVIDYwDQotICAg
ICAqLw0KLSAgICBTY2llbnRpZmljTm90YXRpb24gd2l0aE1pbkV4cG9uZW50RGlnaXRzKGludDMy
X3QgbWluRXhwb25lbnREaWdpdHMpIGNvbnN0Ow0KLQ0KLSAgICAvKioNCi0gICAgICogU2V0cyB3
aGV0aGVyIHRvIHNob3cgdGhlIHNpZ24gb24gcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGV4cG9uZW50
cyBpbiBzY2llbnRpZmljIG5vdGF0aW9uLiBUaGUgZGVmYXVsdCBpcyBBVVRPLA0KLSAgICAgKiBz
aG93aW5nIHRoZSBtaW51cyBzaWduIGJ1dCBub3QgdGhlIHBsdXMgc2lnbi4NCi0gICAgICoNCi0g
ICAgICogPHA+DQotICAgICAqIEZvciBleGFtcGxlLCB3aXRoIGV4cG9uZW50U2lnbkRpc3BsYXk9
QUxXQVlTLCB0aGUgbnVtYmVyIDEyMyB3aWxsIGJlIHByaW50ZWQgYXMgIjEuMjNFKzIiIGluIDxl
bT5lbi1VUzwvZW0+DQotICAgICAqIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgIjEuMjNFMiIuDQot
ICAgICAqDQotICAgICAqIEBwYXJhbSBleHBvbmVudFNpZ25EaXNwbGF5DQotICAgICAqICAgICAg
ICAgICAgVGhlIHN0cmF0ZWd5IGZvciBkaXNwbGF5aW5nIHRoZSBzaWduIGluIHRoZSBleHBvbmVu
dC4NCi0gICAgICogQHJldHVybiBBIFNjaWVudGlmaWNOb3RhdGlvbiwgZm9yIGNoYWluaW5nLg0K
LSAgICAgKiBAZHJhZnQgSUNVIDYwDQotICAgICAqLw0KLSAgICBTY2llbnRpZmljTm90YXRpb24g
d2l0aEV4cG9uZW50U2lnbkRpc3BsYXkoVU51bWJlclNpZ25EaXNwbGF5IGV4cG9uZW50U2lnbkRp
c3BsYXkpIGNvbnN0Ow0KLQ0KLSAgcHJpdmF0ZToNCi0gICAgLy8gSW5oZXJpdCBjb25zdHJ1Y3Rv
cg0KLSAgICB1c2luZyBOb3RhdGlvbjo6Tm90YXRpb247DQotDQotICAgIC8vIFJhdyBjb25zdHJ1
Y3RvciBmb3IgTnVtYmVyUHJvcGVydHlNYXBwZXINCi0gICAgU2NpZW50aWZpY05vdGF0aW9uKGlu
dDhfdCBmRW5naW5lZXJpbmdJbnRlcnZhbCwgYm9vbCBmUmVxdWlyZU1pbkludCwgaW1wbDo6ZGln
aXRzX3QgZk1pbkV4cG9uZW50RGlnaXRzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgVU51bWJl
clNpZ25EaXNwbGF5IGZFeHBvbmVudFNpZ25EaXNwbGF5KTsNCi0NCi0gICAgZnJpZW5kIGNsYXNz
IE5vdGF0aW9uOw0KLQ0KLSAgICAvLyBTbyB0aGF0IE51bWJlclByb3BlcnR5TWFwcGVyIGNhbiBj
cmVhdGUgaW5zdGFuY2VzDQotICAgIGZyaWVuZCBjbGFzcyBpbXBsOjpOdW1iZXJQcm9wZXJ0eU1h
cHBlcjsNCi19Ow0KLQ0KLS8vIFJlc2VydmUgZXh0cmEgbmFtZXMgaW4gY2FzZSB0aGV5IGFyZSBh
ZGRlZCBhcyBjbGFzc2VzIGluIHRoZSBmdXR1cmU6DQotdHlwZWRlZiBQcmVjaXNpb24gU2lnbmlm
aWNhbnREaWdpdHNQcmVjaXNpb247DQotDQotLy8gVHlwZWRlZnMgZm9yIElDVSA2MC82MSBjb21w
YXRpYmlsaXR5Lg0KLS8vIFRoZXNlIHdpbGwgYmUgcmVtb3ZlZCBpbiBJQ1UgNjQuDQotLy8gU2Vl
IGh0dHA6Ly9idWdzLmljdS1wcm9qZWN0Lm9yZy90cmFjL3RpY2tldC8xMzc0Ng0KLXR5cGVkZWYg
UHJlY2lzaW9uIFJvdW5kZXI7DQotdHlwZWRlZiBGcmFjdGlvblByZWNpc2lvbiBGcmFjdGlvblJv
dW5kZXI7DQotdHlwZWRlZiBJbmNyZW1lbnRQcmVjaXNpb24gSW5jcmVtZW50Um91bmRlcjsNCi10
eXBlZGVmIEN1cnJlbmN5UHJlY2lzaW9uIEN1cnJlbmN5Um91bmRlcjsNCi0NCi0vKioNCi0gKiBB
IGNsYXNzIHRoYXQgZGVmaW5lcyB0aGUgcm91bmRpbmcgcHJlY2lzaW9uIHRvIGJlIHVzZWQgd2hl
biBmb3JtYXR0aW5nIG51bWJlcnMgaW4gTnVtYmVyRm9ybWF0dGVyLg0KLSAqDQotICogPHA+DQot
ICogVG8gY3JlYXRlIGEgUHJlY2lzaW9uLCB1c2Ugb25lIG9mIHRoZSBmYWN0b3J5IG1ldGhvZHMu
DQotICoNCi0gKiBAZHJhZnQgSUNVIDYwDQotICovDQotY2xhc3MgVV9JMThOX0FQSSBQcmVjaXNp
b24gOiBwdWJsaWMgVU1lbW9yeSB7DQotDQotICBwdWJsaWM6DQotICAgIC8qKg0KLSAgICAgKiBT
aG93IGFsbCBhdmFpbGFibGUgZGlnaXRzIHRvIGZ1bGwgcHJlY2lzaW9uLg0KLSAgICAgKg0KLSAg
ICAgKiA8cD4NCi0gICAgICogPHN0cm9uZz5OT1RFOjwvc3Ryb25nPiBXaGVuIGZvcm1hdHRpbmcg
YSA8ZW0+ZG91YmxlPC9lbT4sIHRoaXMgbWV0aG9kLCBhbG9uZyB3aXRoIHtAbGluayAjbWluRnJh
Y3Rpb259IGFuZA0KLSAgICAgKiB7QGxpbmsgI21pbkRpZ2l0c30sIHdpbGwgdHJpZ2dlciBjb21w
bGV4IGFsZ29yaXRobSBzaW1pbGFyIHRvIDxlbT5EcmFnb240PC9lbT4gdG8gZGV0ZXJtaW5lIHRo
ZSBsb3ctb3JkZXIgZGlnaXRzDQotICAgICAqIGFuZCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyB0byBk
aXNwbGF5IGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgZG91YmxlLiBJZiB0aGUgbnVtYmVyIG9m
IGZyYWN0aW9uIHBsYWNlcyBvcg0KLSAgICAgKiBzaWduaWZpY2FudCBkaWdpdHMgY2FuIGJlIGJv
dW5kZWQsIGNvbnNpZGVyIHVzaW5nIHtAbGluayAjbWF4RnJhY3Rpb259IG9yIHtAbGluayAjbWF4
RGlnaXRzfSBpbnN0ZWFkIHRvIG1heGltaXplDQotICAgICAqIHBlcmZvcm1hbmNlLiBGb3IgbW9y
ZSBpbmZvcm1hdGlvbiwgcmVhZCB0aGUgZm9sbG93aW5nIGJsb2cgcG9zdC4NCi0gICAgICoNCi0g
ICAgICogPHA+DQotICAgICAqIGh0dHA6Ly93d3cuc2VycGVudGluZS5jb20vYmxvZy8yMDExLzA2
LzI5L2hlcmUtYmUtZHJhZ29ucy1hZHZhbmNlcy1pbi1wcm9ibGVtcy15b3UtZGlkbnQtZXZlbi1r
bm93LXlvdS1oYWQvDQotICAgICAqDQotICAgICAqIEByZXR1cm4gQSBQcmVjaXNpb24gZm9yIGNo
YWluaW5nIG9yIHBhc3NpbmcgdG8gdGhlIE51bWJlckZvcm1hdHRlciBwcmVjaXNpb24oKSBzZXR0
ZXIuDQotICAgICAqIEBkcmFmdCBJQ1UgNjANCi0gICAgICovDQotICAgIHN0YXRpYyBQcmVjaXNp
b24gdW5saW1pdGVkKCk7DQotDQotICAgIC8qKg0KLSAgICAgKiBTaG93IG51bWJlcnMgcm91bmRl
ZCBpZiBuZWNlc3NhcnkgdG8gdGhlIG5lYXJlc3QgaW50ZWdlci4NCi0gICAgICoNCi0gICAgICog
QHJldHVybiBBIEZyYWN0aW9uUHJlY2lzaW9uIGZvciBjaGFpbmluZyBvciBwYXNzaW5nIHRvIHRo
ZSBOdW1iZXJGb3JtYXR0ZXIgcHJlY2lzaW9uKCkgc2V0dGVyLg0KLSAgICAgKiBAZHJhZnQgSUNV
IDYwDQotICAgICAqLw0KLSAgICBzdGF0aWMgRnJhY3Rpb25QcmVjaXNpb24gaW50ZWdlcigpOw0K
LQ0KLSAgICAvKioNCi0gICAgICogU2hvdyBudW1iZXJzIHJvdW5kZWQgaWYgbmVjZXNzYXJ5IHRv
IGEgY2VydGFpbiBudW1iZXIgb2YgZnJhY3Rpb24gcGxhY2VzIChudW1lcmFscyBhZnRlciB0aGUg
ZGVjaW1hbCBzZXBhcmF0b3IpLg0KLSAgICAgKiBBZGRpdGlvbmFsbHksIHBhZCB3aXRoIHplcm9z
IHRvIGVuc3VyZSB0aGF0IHRoaXMgbnVtYmVyIG9mIHBsYWNlcyBhcmUgYWx3YXlzIHNob3duLg0K
LSAgICAgKg0KLSAgICAgKiA8cD4NCi0gICAgICogRXhhbXBsZSBvdXRwdXQgd2l0aCBtaW5NYXhG
cmFjdGlvblBsYWNlcyA9IDM6DQotICAgICAqDQotICAgICAqIDxwPg0KLSAgICAgKiA4Nyw2NTAu
MDAwPGJyPg0KLSAgICAgKiA4LDc2NS4wMDA8YnI+DQotICAgICAqIDg3Ni41MDA8YnI+DQotICAg
ICAqIDg3LjY1MDxicj4NCi0gICAgICogOC43NjU8YnI+DQotICAgICAqIDAuODc2PGJyPg0KLSAg
ICAgKiAwLjA4ODxicj4NCi0gICAgICogMC4wMDk8YnI+DQotICAgICAqIDAuMDAwICh6ZXJvKQ0K
LSAgICAgKg0KLSAgICAgKiA8cD4NCi0gICAgICogVGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0
byB7QGxpbmsgI21pbk1heEZyYWN0aW9ufSB3aXRoIGJvdGggYXJndW1lbnRzIGVxdWFsLg0KLSAg
ICAgKg0KLSAgICAgKiBAcGFyYW0gbWluTWF4RnJhY3Rpb25QbGFjZXMNCi0gICAgICogICAgICAg
ICAgICBUaGUgbWluaW11bSBhbmQgbWF4aW11bSBudW1iZXIgb2YgbnVtZXJhbHMgdG8gZGlzcGxh
eSBhZnRlciB0aGUgZGVjaW1hbCBzZXBhcmF0b3IgKHJvdW5kaW5nIGlmIHRvbw0KLSAgICAgKiAg
ICAgICAgICAgIGxvbmcgb3IgcGFkZGluZyB3aXRoIHplcm9zIGlmIHRvbyBzaG9ydCkuDQotICAg
ICAqIEByZXR1cm4gQSBGcmFjdGlvblByZWNpc2lvbiBmb3IgY2hhaW5pbmcgb3IgcGFzc2luZyB0
byB0aGUgTnVtYmVyRm9ybWF0dGVyIHByZWNpc2lvbigpIHNldHRlci4NCi0gICAgICogQGRyYWZ0
IElDVSA2MA0KLSAgICAgKi8NCi0gICAgc3RhdGljIEZyYWN0aW9uUHJlY2lzaW9uIGZpeGVkRnJh
Y3Rpb24oaW50MzJfdCBtaW5NYXhGcmFjdGlvblBsYWNlcyk7DQotDQotICAgIC8qKg0KLSAgICAg
KiBBbHdheXMgc2hvdyBhdCBsZWFzdCBhIGNlcnRhaW4gbnVtYmVyIG9mIGZyYWN0aW9uIHBsYWNl
cyBhZnRlciB0aGUgZGVjaW1hbCBzZXBhcmF0b3IsIHBhZGRpbmcgd2l0aCB6ZXJvcyBpZg0KLSAg
ICAgKiBuZWNlc3NhcnkuIERvIG5vdCBwZXJmb3JtIHJvdW5kaW5nIChkaXNwbGF5IG51bWJlcnMg
dG8gdGhlaXIgZnVsbCBwcmVjaXNpb24pLg0KLSAgICAgKg0KLSAgICAgKiA8cD4NCi0gICAgICog
PHN0cm9uZz5OT1RFOjwvc3Ryb25nPiBJZiB5b3UgYXJlIGZvcm1hdHRpbmcgPGVtPmRvdWJsZXM8
L2VtPiwgc2VlIHRoZSBwZXJmb3JtYW5jZSBub3RlIGluIHtAbGluayAjdW5saW1pdGVkfS4NCi0g
ICAgICoNCi0gICAgICogQHBhcmFtIG1pbkZyYWN0aW9uUGxhY2VzDQotICAgICAqICAgICAgICAg
ICAgVGhlIG1pbmltdW0gbnVtYmVyIG9mIG51bWVyYWxzIHRvIGRpc3BsYXkgYWZ0ZXIgdGhlIGRl
Y2ltYWwgc2VwYXJhdG9yIChwYWRkaW5nIHdpdGggemVyb3MgaWYNCi0gICAgICogICAgICAgICAg
ICBuZWNlc3NhcnkpLg0KLSAgICAgKiBAcmV0dXJuIEEgRnJhY3Rpb25QcmVjaXNpb24gZm9yIGNo
YWluaW5nIG9yIHBhc3NpbmcgdG8gdGhlIE51bWJlckZvcm1hdHRlciBwcmVjaXNpb24oKSBzZXR0
ZXIuDQotICAgICAqIEBkcmFmdCBJQ1UgNjANCi0gICAgICovDQotICAgIHN0YXRpYyBGcmFjdGlv
blByZWNpc2lvbiBtaW5GcmFjdGlvbihpbnQzMl90IG1pbkZyYWN0aW9uUGxhY2VzKTsNCi0NCi0g
ICAgLyoqDQotICAgICAqIFNob3cgbnVtYmVycyByb3VuZGVkIGlmIG5lY2Vzc2FyeSB0byBhIGNl
cnRhaW4gbnVtYmVyIG9mIGZyYWN0aW9uIHBsYWNlcyAobnVtZXJhbHMgYWZ0ZXIgdGhlIGRlY2lt
YWwgc2VwYXJhdG9yKS4NCi0gICAgICogVW5saWtlIHRoZSBvdGhlciBmcmFjdGlvbiByb3VuZGlu
ZyBzdHJhdGVnaWVzLCB0aGlzIHN0cmF0ZWd5IGRvZXMgPGVtPm5vdDwvZW0+IHBhZCB6ZXJvcyB0
byB0aGUgZW5kIG9mIHRoZQ0KLSAgICAgKiBudW1iZXIuDQotICAgICAqDQotICAgICAqIEBwYXJh
bSBtYXhGcmFjdGlvblBsYWNlcw0KLSAgICAgKiAgICAgICAgICAgIFRoZSBtYXhpbXVtIG51bWJl
ciBvZiBudW1lcmFscyB0byBkaXNwbGF5IGFmdGVyIHRoZSBkZWNpbWFsIG1hcmsgKHJvdW5kaW5n
IGlmIG5lY2Vzc2FyeSkuDQotICAgICAqIEByZXR1cm4gQSBGcmFjdGlvblByZWNpc2lvbiBmb3Ig
Y2hhaW5pbmcgb3IgcGFzc2luZyB0byB0aGUgTnVtYmVyRm9ybWF0dGVyIHByZWNpc2lvbigpIHNl
dHRlci4NCi0gICAgICogQGRyYWZ0IElDVSA2MA0KLSAgICAgKi8NCi0gICAgc3RhdGljIEZyYWN0
aW9uUHJlY2lzaW9uIG1heEZyYWN0aW9uKGludDMyX3QgbWF4RnJhY3Rpb25QbGFjZXMpOw0KLQ0K
LSAgICAvKioNCi0gICAgICogU2hvdyBudW1iZXJzIHJvdW5kZWQgaWYgbmVjZXNzYXJ5IHRvIGEg
Y2VydGFpbiBudW1iZXIgb2YgZnJhY3Rpb24gcGxhY2VzIChudW1lcmFscyBhZnRlciB0aGUgZGVj
aW1hbCBzZXBhcmF0b3IpOw0KLSAgICAgKiBpbiBhZGRpdGlvbiwgYWx3YXlzIHNob3cgYXQgbGVh
c3QgYSBjZXJ0YWluIG51bWJlciBvZiBwbGFjZXMgYWZ0ZXIgdGhlIGRlY2ltYWwgc2VwYXJhdG9y
LCBwYWRkaW5nIHdpdGggemVyb3MgaWYNCi0gICAgICogbmVjZXNzYXJ5Lg0KLSAgICAgKg0KLSAg
ICAgKiBAcGFyYW0gbWluRnJhY3Rpb25QbGFjZXMNCi0gICAgICogICAgICAgICAgICBUaGUgbWlu
aW11bSBudW1iZXIgb2YgbnVtZXJhbHMgdG8gZGlzcGxheSBhZnRlciB0aGUgZGVjaW1hbCBzZXBh
cmF0b3IgKHBhZGRpbmcgd2l0aCB6ZXJvcyBpZg0KLSAgICAgKiAgICAgICAgICAgIG5lY2Vzc2Fy
eSkuDQotICAgICAqIEBwYXJhbSBtYXhGcmFjdGlvblBsYWNlcw0KLSAgICAgKiAgICAgICAgICAg
IFRoZSBtYXhpbXVtIG51bWJlciBvZiBudW1lcmFscyB0byBkaXNwbGF5IGFmdGVyIHRoZSBkZWNp
bWFsIHNlcGFyYXRvciAocm91bmRpbmcgaWYgbmVjZXNzYXJ5KS4NCi0gICAgICogQHJldHVybiBB
IEZyYWN0aW9uUHJlY2lzaW9uIGZvciBjaGFpbmluZyBvciBwYXNzaW5nIHRvIHRoZSBOdW1iZXJG
b3JtYXR0ZXIgcHJlY2lzaW9uKCkgc2V0dGVyLg0KLSAgICAgKiBAZHJhZnQgSUNVIDYwDQotICAg
ICAqLw0KLSAgICBzdGF0aWMgRnJhY3Rpb25QcmVjaXNpb24gbWluTWF4RnJhY3Rpb24oaW50MzJf
dCBtaW5GcmFjdGlvblBsYWNlcywgaW50MzJfdCBtYXhGcmFjdGlvblBsYWNlcyk7DQotDQotICAg
IC8qKg0KLSAgICAgKiBTaG93IG51bWJlcnMgcm91bmRlZCBpZiBuZWNlc3NhcnkgdG8gYSBjZXJ0
YWluIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgb3Igc2lnbmlmaWNhbnQgZmlndXJlcy4g
QWRkaXRpb25hbGx5LA0KLSAgICAgKiBwYWQgd2l0aCB6ZXJvcyB0byBlbnN1cmUgdGhhdCB0aGlz
IG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMvZmlndXJlcyBhcmUgYWx3YXlzIHNob3duLg0K
LSAgICAgKg0KLSAgICAgKiA8cD4NCi0gICAgICogVGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0
byB7QGxpbmsgI21pbk1heERpZ2l0c30gd2l0aCBib3RoIGFyZ3VtZW50cyBlcXVhbC4NCi0gICAg
ICoNCi0gICAgICogQHBhcmFtIG1pbk1heFNpZ25pZmljYW50RGlnaXRzDQotICAgICAqICAgICAg
ICAgICAgVGhlIG1pbmltdW0gYW5kIG1heGltdW0gbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0
cyB0byBkaXNwbGF5IChyb3VuZGluZyBpZiB0b28gbG9uZyBvciBwYWRkaW5nIHdpdGgNCi0gICAg
ICogICAgICAgICAgICB6ZXJvcyBpZiB0b28gc2hvcnQpLg0KLSAgICAgKiBAcmV0dXJuIEEgcHJl
Y2lzaW9uIGZvciBjaGFpbmluZyBvciBwYXNzaW5nIHRvIHRoZSBOdW1iZXJGb3JtYXR0ZXIgcHJl
Y2lzaW9uKCkgc2V0dGVyLg0KLSAgICAgKiBAZHJhZnQgSUNVIDYyDQotICAgICAqLw0KLSAgICBz
dGF0aWMgU2lnbmlmaWNhbnREaWdpdHNQcmVjaXNpb24gZml4ZWRTaWduaWZpY2FudERpZ2l0cyhp
bnQzMl90IG1pbk1heFNpZ25pZmljYW50RGlnaXRzKTsNCi0NCi0gICAgLyoqDQotICAgICAqIEFs
d2F5cyBzaG93IGF0IGxlYXN0IGEgY2VydGFpbiBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRz
L2ZpZ3VyZXMsIHBhZGRpbmcgd2l0aCB6ZXJvcyBpZiBuZWNlc3NhcnkuIERvIG5vdA0KLSAgICAg
KiBwZXJmb3JtIHJvdW5kaW5nIChkaXNwbGF5IG51bWJlcnMgdG8gdGhlaXIgZnVsbCBwcmVjaXNp
b24pLg0KLSAgICAgKg0KLSAgICAgKiA8cD4NCi0gICAgICogPHN0cm9uZz5OT1RFOjwvc3Ryb25n
PiBJZiB5b3UgYXJlIGZvcm1hdHRpbmcgPGVtPmRvdWJsZXM8L2VtPiwgc2VlIHRoZSBwZXJmb3Jt
YW5jZSBub3RlIGluIHtAbGluayAjdW5saW1pdGVkfS4NCi0gICAgICoNCi0gICAgICogQHBhcmFt
IG1pblNpZ25pZmljYW50RGlnaXRzDQotICAgICAqICAgICAgICAgICAgVGhlIG1pbmltdW0gbnVt
YmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyB0byBkaXNwbGF5IChwYWRkaW5nIHdpdGggemVyb3Mg
aWYgdG9vIHNob3J0KS4NCi0gICAgICogQHJldHVybiBBIHByZWNpc2lvbiBmb3IgY2hhaW5pbmcg
b3IgcGFzc2luZyB0byB0aGUgTnVtYmVyRm9ybWF0dGVyIHByZWNpc2lvbigpIHNldHRlci4NCi0g
ICAgICogQGRyYWZ0IElDVSA2Mg0KLSAgICAgKi8NCi0gICAgc3RhdGljIFNpZ25pZmljYW50RGln
aXRzUHJlY2lzaW9uIG1pblNpZ25pZmljYW50RGlnaXRzKGludDMyX3QgbWluU2lnbmlmaWNhbnRE
aWdpdHMpOw0KLQ0KLSAgICAvKioNCi0gICAgICogU2hvdyBudW1iZXJzIHJvdW5kZWQgaWYgbmVj
ZXNzYXJ5IHRvIGEgY2VydGFpbiBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzL2ZpZ3VyZXMu
DQotICAgICAqDQotICAgICAqIEBwYXJhbSBtYXhTaWduaWZpY2FudERpZ2l0cw0KLSAgICAgKiAg
ICAgICAgICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgdG8gZGlz
cGxheSAocm91bmRpbmcgaWYgdG9vIGxvbmcpLg0KLSAgICAgKiBAcmV0dXJuIEEgcHJlY2lzaW9u
IGZvciBjaGFpbmluZyBvciBwYXNzaW5nIHRvIHRoZSBOdW1iZXJGb3JtYXR0ZXIgcHJlY2lzaW9u
KCkgc2V0dGVyLg0KLSAgICAgKiBAZHJhZnQgSUNVIDYyDQotICAgICAqLw0KLSAgICBzdGF0aWMg
U2lnbmlmaWNhbnREaWdpdHNQcmVjaXNpb24gbWF4U2lnbmlmaWNhbnREaWdpdHMoaW50MzJfdCBt
YXhTaWduaWZpY2FudERpZ2l0cyk7DQotDQotICAgIC8qKg0KLSAgICAgKiBTaG93IG51bWJlcnMg
cm91bmRlZCBpZiBuZWNlc3NhcnkgdG8gYSBjZXJ0YWluIG51bWJlciBvZiBzaWduaWZpY2FudCBk
aWdpdHMvZmlndXJlczsgaW4gYWRkaXRpb24sIGFsd2F5cyBzaG93IGF0DQotICAgICAqIGxlYXN0
IGEgY2VydGFpbiBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzLCBwYWRkaW5nIHdpdGggemVy
b3MgaWYgbmVjZXNzYXJ5Lg0KLSAgICAgKg0KLSAgICAgKiBAcGFyYW0gbWluU2lnbmlmaWNhbnRE
aWdpdHMNCi0gICAgICogICAgICAgICAgICBUaGUgbWluaW11bSBudW1iZXIgb2Ygc2lnbmlmaWNh
bnQgZGlnaXRzIHRvIGRpc3BsYXkgKHBhZGRpbmcgd2l0aCB6ZXJvcyBpZiBuZWNlc3NhcnkpLg0K
LSAgICAgKiBAcGFyYW0gbWF4U2lnbmlmaWNhbnREaWdpdHMNCi0gICAgICogICAgICAgICAgICBU
aGUgbWF4aW11bSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIHRvIGRpc3BsYXkgKHJvdW5k
aW5nIGlmIG5lY2Vzc2FyeSkuDQotICAgICAqIEByZXR1cm4gQSBwcmVjaXNpb24gZm9yIGNoYWlu
aW5nIG9yIHBhc3NpbmcgdG8gdGhlIE51bWJlckZvcm1hdHRlciBwcmVjaXNpb24oKSBzZXR0ZXIu
DQotICAgICAqIEBkcmFmdCBJQ1UgNjINCi0gICAgICovDQotICAgIHN0YXRpYyBTaWduaWZpY2Fu
dERpZ2l0c1ByZWNpc2lvbiBtaW5NYXhTaWduaWZpY2FudERpZ2l0cyhpbnQzMl90IG1pblNpZ25p
ZmljYW50RGlnaXRzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBtYXhTaWduaWZpY2FudERpZ2l0cyk7DQotDQot
I2lmbmRlZiBVX0hJREVfREVQUkVDQVRFRF9BUEkNCi0gICAgLy8gQ29tcGF0aWJsaXR5IG1ldGhv
ZHMgdGhhdCB3aWxsIGJlIHJlbW92ZWQgaW4gSUNVIDY0Lg0KLSAgICAvLyBTZWUgaHR0cDovL2J1
Z3MuaWN1LXByb2plY3Qub3JnL3RyYWMvdGlja2V0LzEzNzQ2DQotDQotICAgIC8qKiBAZGVwcmVj
YXRlZCBJQ1UgNjIgKi8NCi0gICAgc3RhdGljIGlubGluZSBTaWduaWZpY2FudERpZ2l0c1ByZWNp
c2lvbiBmaXhlZERpZ2l0cyhpbnQzMl90IGEpIHsNCi0gICAgICAgIHJldHVybiBmaXhlZFNpZ25p
ZmljYW50RGlnaXRzKGEpOw0KLSAgICB9DQotDQotICAgIC8qKiBAZGVwcmVjYXRlZCBJQ1UgNjIg
Ki8NCi0gICAgc3RhdGljIGlubGluZSBTaWduaWZpY2FudERpZ2l0c1ByZWNpc2lvbiBtaW5EaWdp
dHMoaW50MzJfdCBhKSB7DQotICAgICAgICByZXR1cm4gbWluU2lnbmlmaWNhbnREaWdpdHMoYSk7
DQotICAgIH0NCi0NCi0gICAgLyoqIEBkZXByZWNhdGVkIElDVSA2MiAqLw0KLSAgICBzdGF0aWMg
aW5saW5lIFNpZ25pZmljYW50RGlnaXRzUHJlY2lzaW9uIG1heERpZ2l0cyhpbnQzMl90IGEpIHsN
Ci0gICAgICAgIHJldHVybiBtYXhTaWduaWZpY2FudERpZ2l0cyhhKTsNCi0gICAgfQ0KLQ0KLSAg
ICAvKiogQGRlcHJlY2F0ZWQgSUNVIDYyICovDQotICAgIHN0YXRpYyBpbmxpbmUgU2lnbmlmaWNh
bnREaWdpdHNQcmVjaXNpb24gbWluTWF4RGlnaXRzKGludDMyX3QgYSwgaW50MzJfdCBiKSB7DQot
ICAgICAgICByZXR1cm4gbWluTWF4U2lnbmlmaWNhbnREaWdpdHMoYSwgYik7DQotICAgIH0NCi0j
ZW5kaWYgIC8qIFVfSElERV9ERVBSRUNBVEVEX0FQSSAqLw0KLQ0KLSAgICAvKioNCi0gICAgICog
U2hvdyBudW1iZXJzIHJvdW5kZWQgaWYgbmVjZXNzYXJ5IHRvIHRoZSBjbG9zZXN0IG11bHRpcGxl
IG9mIGEgY2VydGFpbiByb3VuZGluZyBpbmNyZW1lbnQuIEZvciBleGFtcGxlLCBpZiB0aGUNCi0g
ICAgICogcm91bmRpbmcgaW5jcmVtZW50IGlzIDAuNSwgdGhlbiByb3VuZCAxLjIgdG8gMSBhbmQg
cm91bmQgMS4zIHRvIDEuNS4NCi0gICAgICoNCi0gICAgICogPHA+DQotICAgICAqIEluIG9yZGVy
IHRvIGVuc3VyZSB0aGF0IG51bWJlcnMgYXJlIHBhZGRlZCB0byB0aGUgYXBwcm9wcmlhdGUgbnVt
YmVyIG9mIGZyYWN0aW9uIHBsYWNlcywgY2FsbA0KLSAgICAgKiB3aXRoTWluRnJhY3Rpb24oKSBv
biB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgbWV0aG9kLg0KLSAgICAgKiBGb3IgZXhhbXBsZSwg
dG8gcm91bmQgdG8gdGhlIG5lYXJlc3QgMC41IGFuZCBhbHdheXMgZGlzcGxheSAyIG51bWVyYWxz
IGFmdGVyIHRoZQ0KLSAgICAgKiBkZWNpbWFsIHNlcGFyYXRvciAodG8gZGlzcGxheSAxLjIgYXMg
IjEuMDAiIGFuZCAxLjMgYXMgIjEuNTAiKSwgeW91IGNhbiBydW46DQotICAgICAqDQotICAgICAq
IDxwcmU+DQotICAgICAqIFByZWNpc2lvbjo6aW5jcmVtZW50KDAuNSkud2l0aE1pbkZyYWN0aW9u
KDIpDQotICAgICAqIDwvcHJlPg0KLSAgICAgKg0KLSAgICAgKiBAcGFyYW0gcm91bmRpbmdJbmNy
ZW1lbnQNCi0gICAgICogICAgICAgICAgICBUaGUgaW5jcmVtZW50IHRvIHdoaWNoIHRvIHJvdW5k
IG51bWJlcnMuDQotICAgICAqIEByZXR1cm4gQSBwcmVjaXNpb24gZm9yIGNoYWluaW5nIG9yIHBh
c3NpbmcgdG8gdGhlIE51bWJlckZvcm1hdHRlciBwcmVjaXNpb24oKSBzZXR0ZXIuDQotICAgICAq
IEBkcmFmdCBJQ1UgNjANCi0gICAgICovDQotICAgIHN0YXRpYyBJbmNyZW1lbnRQcmVjaXNpb24g
aW5jcmVtZW50KGRvdWJsZSByb3VuZGluZ0luY3JlbWVudCk7DQotDQotICAgIC8qKg0KLSAgICAg
KiBTaG93IG51bWJlcnMgcm91bmRlZCBhbmQgcGFkZGVkIGFjY29yZGluZyB0byB0aGUgcnVsZXMg
Zm9yIHRoZSBjdXJyZW5jeSB1bml0LiBUaGUgbW9zdCBjb21tb24NCi0gICAgICogcm91bmRpbmcg
cHJlY2lzaW9uIHNldHRpbmdzIGZvciBjdXJyZW5jaWVzIGluY2x1ZGUgPGNvZGU+UHJlY2lzaW9u
OjpmaXhlZEZyYWN0aW9uKDIpPC9jb2RlPiwNCi0gICAgICogPGNvZGU+UHJlY2lzaW9uOjppbnRl
Z2VyKCk8L2NvZGU+LCBhbmQgPGNvZGU+UHJlY2lzaW9uOjppbmNyZW1lbnQoMC4wNSk8L2NvZGU+
IGZvciBjYXNoIHRyYW5zYWN0aW9ucw0KLSAgICAgKiAoIm5pY2tlbCByb3VuZGluZyIpLg0KLSAg
ICAgKg0KLSAgICAgKiA8cD4NCi0gICAgICogVGhlIGV4YWN0IHJvdW5kaW5nIGRldGFpbHMgd2ls
bCBiZSByZXNvbHZlZCBhdCBydW50aW1lIGJhc2VkIG9uIHRoZSBjdXJyZW5jeSB1bml0IHNwZWNp
ZmllZCBpbiB0aGUNCi0gICAgICogTnVtYmVyRm9ybWF0dGVyIGNoYWluLiBUbyByb3VuZCBhY2Nv
cmRpbmcgdG8gdGhlIHJ1bGVzIGZvciBvbmUgY3VycmVuY3kgd2hpbGUgZGlzcGxheWluZyB0aGUg
c3ltYm9sIGZvciBhbm90aGVyDQotICAgICAqIGN1cnJlbmN5LCB0aGUgd2l0aEN1cnJlbmN5KCkg
bWV0aG9kIGNhbiBiZSBjYWxsZWQgb24gdGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIG1ldGhvZC4N
Ci0gICAgICoNCi0gICAgICogQHBhcmFtIGN1cnJlbmN5VXNhZ2UNCi0gICAgICogICAgICAgICAg
ICBFaXRoZXIgU1RBTkRBUkQgKGZvciBkaWdpdGFsIHRyYW5zYWN0aW9ucykgb3IgQ0FTSCAoZm9y
IHRyYW5zYWN0aW9ucyB3aGVyZSB0aGUgcm91bmRpbmcgaW5jcmVtZW50IG1heQ0KLSAgICAgKiAg
ICAgICAgICAgIGJlIGxpbWl0ZWQgYnkgdGhlIGF2YWlsYWJsZSBkZW5vbWluYXRpb25zIG9mIGNh
c2ggb3IgY29pbnMpLg0KLSAgICAgKiBAcmV0dXJuIEEgQ3VycmVuY3lQcmVjaXNpb24gZm9yIGNo
YWluaW5nIG9yIHBhc3NpbmcgdG8gdGhlIE51bWJlckZvcm1hdHRlciBwcmVjaXNpb24oKSBzZXR0
ZXIuDQotICAgICAqIEBkcmFmdCBJQ1UgNjANCi0gICAgICovDQotICAgIHN0YXRpYyBDdXJyZW5j
eVByZWNpc2lvbiBjdXJyZW5jeShVQ3VycmVuY3lVc2FnZSBjdXJyZW5jeVVzYWdlKTsNCi0NCi0j
aWZuZGVmIFVfSElERV9ERVBSRUNBVEVEX0FQSQ0KLSAgICAvKioNCi0gICAgICogU2V0cyB0aGUg
cm91bmRpbmcgbW9kZSB0byB1c2Ugd2hlbiBwaWNraW5nIHRoZSBkaXJlY3Rpb24gdG8gcm91bmQg
KHVwIG9yIGRvd24pLiBDb21tb24gdmFsdWVzDQotICAgICAqIGluY2x1ZGUgSEFMRl9FVkVOLCBI
QUxGX1VQLCBhbmQgRkxPT1IuIFRoZSBkZWZhdWx0IGlzIEhBTEZfRVZFTi4NCi0gICAgICoNCi0g
ICAgICogQHBhcmFtIHJvdW5kaW5nTW9kZQ0KLSAgICAgKiAgICAgICAgICAgIFRoZSBSb3VuZGlu
Z01vZGUgdG8gdXNlLg0KLSAgICAgKiBAcmV0dXJuIEEgUHJlY2lzaW9uIGZvciBwYXNzaW5nIHRv
IHRoZSBOdW1iZXJGb3JtYXR0ZXIgcHJlY2lzaW9uKCkgc2V0dGVyLg0KLSAgICAgKiBAZGVwcmVj
YXRlZCBJQ1UgNjIgVXNlIHRoZSB0b3AtbGV2ZWwgcm91bmRpbmdNb2RlKCkgc2V0dGluZyBpbnN0
ZWFkLg0KLSAgICAgKiAgICAgICAgICAgIFRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiBJ
Q1UgNjQuDQotICAgICAqICAgICAgICAgICAgU2VlIGh0dHA6Ly9idWdzLmljdS1wcm9qZWN0Lm9y
Zy90cmFjL3RpY2tldC8xMzc0Ng0KLSAgICAgKi8NCi0gICAgUHJlY2lzaW9uIHdpdGhNb2RlKFVO
dW1iZXJGb3JtYXRSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKSBjb25zdDsNCi0jZW5kaWYgIC8q
IFVfSElERV9ERVBSRUNBVEVEX0FQSSAqLw0KLQ0KLSAgcHJpdmF0ZToNCi0gICAgZW51bSBQcmVj
aXNpb25UeXBlIHsNCi0gICAgICAgIFJORF9CT0dVUywNCi0gICAgICAgIFJORF9OT05FLA0KLSAg
ICAgICAgUk5EX0ZSQUNUSU9OLA0KLSAgICAgICAgUk5EX1NJR05JRklDQU5ULA0KLSAgICAgICAg
Uk5EX0ZSQUNUSU9OX1NJR05JRklDQU5ULA0KLSAgICAgICAgUk5EX0lOQ1JFTUVOVCwNCi0gICAg
ICAgIFJORF9DVVJSRU5DWSwNCi0gICAgICAgIFJORF9FUlJPUg0KLSAgICB9IGZUeXBlOw0KLQ0K
LSAgICB1bmlvbiBQcmVjaXNpb25VbmlvbiB7DQotICAgICAgICBzdHJ1Y3QgRnJhY3Rpb25TaWdu
aWZpY2FudFNldHRpbmdzIHsNCi0gICAgICAgICAgICAvLyBGb3IgUk5EX0ZSQUNUSU9OLCBSTkRf
U0lHTklGSUNBTlQsIGFuZCBSTkRfRlJBQ1RJT05fU0lHTklGSUNBTlQNCi0gICAgICAgICAgICBp
bXBsOjpkaWdpdHNfdCBmTWluRnJhYzsNCi0gICAgICAgICAgICBpbXBsOjpkaWdpdHNfdCBmTWF4
RnJhYzsNCi0gICAgICAgICAgICBpbXBsOjpkaWdpdHNfdCBmTWluU2lnOw0KLSAgICAgICAgICAg
IGltcGw6OmRpZ2l0c190IGZNYXhTaWc7DQotICAgICAgICB9IGZyYWNTaWc7DQotICAgICAgICBz
dHJ1Y3QgSW5jcmVtZW50U2V0dGluZ3Mgew0KLSAgICAgICAgICAgIGRvdWJsZSBmSW5jcmVtZW50
Ow0KLSAgICAgICAgICAgIGltcGw6OmRpZ2l0c190IGZNaW5GcmFjOw0KLSAgICAgICAgICAgIGlt
cGw6OmRpZ2l0c190IGZNYXhGcmFjOw0KLSAgICAgICAgfSBpbmNyZW1lbnQ7IC8vIEZvciBSTkRf
SU5DUkVNRU5UDQotICAgICAgICBVQ3VycmVuY3lVc2FnZSBjdXJyZW5jeVVzYWdlOyAvLyBGb3Ig
Uk5EX0NVUlJFTkNZDQotICAgICAgICBVRXJyb3JDb2RlIGVycm9yQ29kZTsgLy8gRm9yIFJORF9F
UlJPUg0KLSAgICB9IGZVbmlvbjsNCi0NCi0gICAgdHlwZWRlZiBQcmVjaXNpb25Vbmlvbjo6RnJh
Y3Rpb25TaWduaWZpY2FudFNldHRpbmdzIEZyYWN0aW9uU2lnbmlmaWNhbnRTZXR0aW5nczsNCi0g
ICAgdHlwZWRlZiBQcmVjaXNpb25Vbmlvbjo6SW5jcmVtZW50U2V0dGluZ3MgSW5jcmVtZW50U2V0
dGluZ3M7DQotDQotICAgIC8qKiBUaGUgUHJlY2lzaW9uIGVuY2Fwc3VsYXRlcyB0aGUgUm91bmRp
bmdNb2RlIHdoZW4gdXNlZCB3aXRoaW4gdGhlIGltcGxlbWVudGF0aW9uLiAqLw0KLSAgICBVTnVt
YmVyRm9ybWF0Um91bmRpbmdNb2RlIGZSb3VuZGluZ01vZGU7DQotDQotICAgIFByZWNpc2lvbihj
b25zdCBQcmVjaXNpb25UeXBlJiB0eXBlLCBjb25zdCBQcmVjaXNpb25VbmlvbiYgdW5pb25fLA0K
LSAgICAgICAgICAgICAgVU51bWJlckZvcm1hdFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpDQot
ICAgICAgICAgICAgOiBmVHlwZSh0eXBlKSwgZlVuaW9uKHVuaW9uXyksIGZSb3VuZGluZ01vZGUo
cm91bmRpbmdNb2RlKSB7fQ0KLQ0KLSAgICBQcmVjaXNpb24oVUVycm9yQ29kZSBlcnJvckNvZGUp
IDogZlR5cGUoUk5EX0VSUk9SKSB7DQotICAgICAgICBmVW5pb24uZXJyb3JDb2RlID0gZXJyb3JD
b2RlOw0KLSAgICB9DQotDQotICAgIFByZWNpc2lvbigpIDogZlR5cGUoUk5EX0JPR1VTKSB7fQ0K
LQ0KLSAgICBib29sIGlzQm9ndXMoKSBjb25zdCB7DQotICAgICAgICByZXR1cm4gZlR5cGUgPT0g
Uk5EX0JPR1VTOw0KLSAgICB9DQotDQotICAgIFVCb29sIGNvcHlFcnJvclRvKFVFcnJvckNvZGUg
JnN0YXR1cykgY29uc3Qgew0KLSAgICAgICAgaWYgKGZUeXBlID09IFJORF9FUlJPUikgew0KLSAg
ICAgICAgICAgIHN0YXR1cyA9IGZVbmlvbi5lcnJvckNvZGU7DQotICAgICAgICAgICAgcmV0dXJu
IFRSVUU7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0NCi0g
ICAgLy8gT24gdGhlIHBhcmVudCB0eXBlIHNvIHRoYXQgdGhpcyBtZXRob2QgY2FuIGJlIGNhbGxl
ZCBpbnRlcm5hbGx5IG9uIFByZWNpc2lvbiBpbnN0YW5jZXMuDQotICAgIFByZWNpc2lvbiB3aXRo
Q3VycmVuY3koY29uc3QgQ3VycmVuY3lVbml0ICZjdXJyZW5jeSwgVUVycm9yQ29kZSAmc3RhdHVz
KSBjb25zdDsNCi0NCi0gICAgc3RhdGljIEZyYWN0aW9uUHJlY2lzaW9uIGNvbnN0cnVjdEZyYWN0
aW9uKGludDMyX3QgbWluRnJhYywgaW50MzJfdCBtYXhGcmFjKTsNCi0NCi0gICAgc3RhdGljIFBy
ZWNpc2lvbiBjb25zdHJ1Y3RTaWduaWZpY2FudChpbnQzMl90IG1pblNpZywgaW50MzJfdCBtYXhT
aWcpOw0KLQ0KLSAgICBzdGF0aWMgUHJlY2lzaW9uDQotICAgIGNvbnN0cnVjdEZyYWN0aW9uU2ln
bmlmaWNhbnQoY29uc3QgRnJhY3Rpb25QcmVjaXNpb24gJmJhc2UsIGludDMyX3QgbWluU2lnLCBp
bnQzMl90IG1heFNpZyk7DQotDQotICAgIHN0YXRpYyBJbmNyZW1lbnRQcmVjaXNpb24gY29uc3Ry
dWN0SW5jcmVtZW50KGRvdWJsZSBpbmNyZW1lbnQsIGludDMyX3QgbWluRnJhYyk7DQotDQotICAg
IHN0YXRpYyBDdXJyZW5jeVByZWNpc2lvbiBjb25zdHJ1Y3RDdXJyZW5jeShVQ3VycmVuY3lVc2Fn
ZSB1c2FnZSk7DQotDQotICAgIHN0YXRpYyBQcmVjaXNpb24gY29uc3RydWN0UGFzc1Rocm91Z2go
KTsNCi0NCi0gICAgLy8gVG8gYWxsb3cgTWFjcm9Qcm9wcy9NaWNyb1Byb3BzIHRvIGluaXRpYWxp
emUgYm9ndXMgaW5zdGFuY2VzOg0KLSAgICBmcmllbmQgc3RydWN0IGltcGw6Ok1hY3JvUHJvcHM7
DQotICAgIGZyaWVuZCBzdHJ1Y3QgaW1wbDo6TWljcm9Qcm9wczsNCi0NCi0gICAgLy8gVG8gYWxs
b3cgTnVtYmVyRm9ybWF0dGVySW1wbCB0byBhY2Nlc3MgaXNCb2d1cygpIGFuZCBvdGhlciBpbnRl
cm5hbCBtZXRob2RzOg0KLSAgICBmcmllbmQgY2xhc3MgaW1wbDo6TnVtYmVyRm9ybWF0dGVySW1w
bDsNCi0NCi0gICAgLy8gVG8gYWxsb3cgTnVtYmVyUHJvcGVydHlNYXBwZXIgdG8gY3JlYXRlIGlu
c3RhbmNlcyBmcm9tIERlY2ltYWxGb3JtYXRQcm9wZXJ0aWVzOg0KLSAgICBmcmllbmQgY2xhc3Mg
aW1wbDo6TnVtYmVyUHJvcGVydHlNYXBwZXI7DQotDQotICAgIC8vIFRvIGFsbG93IGFjY2VzcyB0
byB0aGUgbWFpbiBpbXBsZW1lbnRhdGlvbiBjbGFzczoNCi0gICAgZnJpZW5kIGNsYXNzIGltcGw6
OlJvdW5kaW5nSW1wbDsNCi0NCi0gICAgLy8gVG8gYWxsb3cgY2hpbGQgY2xhc3NlcyB0byBjYWxs
IHByaXZhdGUgbWV0aG9kczoNCi0gICAgZnJpZW5kIGNsYXNzIEZyYWN0aW9uUHJlY2lzaW9uOw0K
LSAgICBmcmllbmQgY2xhc3MgQ3VycmVuY3lQcmVjaXNpb247DQotICAgIGZyaWVuZCBjbGFzcyBJ
bmNyZW1lbnRQcmVjaXNpb247DQotDQotICAgIC8vIFRvIGFsbG93IGFjY2VzcyB0byB0aGUgc2tl
bGV0b24gZ2VuZXJhdGlvbiBjb2RlOg0KLSAgICBmcmllbmQgY2xhc3MgaW1wbDo6R2VuZXJhdG9y
SGVscGVyczsNCi19Ow0KLQ0KLS8qKg0KLSAqIEEgY2xhc3MgdGhhdCBkZWZpbmVzIGEgcm91bmRp
bmcgcHJlY2lzaW9uIGJhc2VkIG9uIGEgbnVtYmVyIG9mIGZyYWN0aW9uIHBsYWNlcyBhbmQgb3B0
aW9uYWxseSBzaWduaWZpY2FudCBkaWdpdHMgdG8gYmUNCi0gKiB1c2VkIHdoZW4gZm9ybWF0dGlu
ZyBudW1iZXJzIGluIE51bWJlckZvcm1hdHRlci4NCi0gKg0KLSAqIDxwPg0KLSAqIFRvIGNyZWF0
ZSBhIEZyYWN0aW9uUHJlY2lzaW9uLCB1c2Ugb25lIG9mIHRoZSBmYWN0b3J5IG1ldGhvZHMgb24g
UHJlY2lzaW9uLg0KLSAqDQotICogQGRyYWZ0IElDVSA2MA0KLSAqLw0KLWNsYXNzIFVfSTE4Tl9B
UEkgRnJhY3Rpb25QcmVjaXNpb24gOiBwdWJsaWMgUHJlY2lzaW9uIHsNCi0gIHB1YmxpYzoNCi0g
ICAgLyoqDQotICAgICAqIEVuc3VyZSB0aGF0IG5vIGxlc3MgdGhhbiB0aGlzIG51bWJlciBvZiBz
aWduaWZpY2FudCBkaWdpdHMgYXJlIHJldGFpbmVkIHdoZW4gcm91bmRpbmcgYWNjb3JkaW5nIHRv
IGZyYWN0aW9uDQotICAgICAqIHJ1bGVzLg0KLSAgICAgKg0KLSAgICAgKiA8cD4NCi0gICAgICog
Rm9yIGV4YW1wbGUsIHdpdGggaW50ZWdlciByb3VuZGluZywgdGhlIG51bWJlciAzLjE0MSBiZWNv
bWVzICIzIi4gSG93ZXZlciwgd2l0aCBtaW5pbXVtIGZpZ3VyZXMgc2V0IHRvIDIsIDMuMTQxDQot
ICAgICAqIGJlY29tZXMgIjMuMSIgaW5zdGVhZC4NCi0gICAgICoNCi0gICAgICogPHA+DQotICAg
ICAqIFRoaXMgc2V0dGluZyBkb2VzIG5vdCBhZmZlY3QgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6
ZXJvcy4gRm9yIGV4YW1wbGUsIDMuMDEgd291bGQgcHJpbnQgYXMgIjMiLCBub3QgIjMuMCIuDQot
ICAgICAqDQotICAgICAqIEBwYXJhbSBtaW5TaWduaWZpY2FudERpZ2l0cw0KLSAgICAgKiAgICAg
ICAgICAgIFRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZmlndXJlcyB0byBndWFyYW50ZWUuDQot
ICAgICAqIEByZXR1cm4gQSBwcmVjaXNpb24gZm9yIGNoYWluaW5nIG9yIHBhc3NpbmcgdG8gdGhl
IE51bWJlckZvcm1hdHRlciBwcmVjaXNpb24oKSBzZXR0ZXIuDQotICAgICAqIEBkcmFmdCBJQ1Ug
NjANCi0gICAgICovDQotICAgIFByZWNpc2lvbiB3aXRoTWluRGlnaXRzKGludDMyX3QgbWluU2ln
bmlmaWNhbnREaWdpdHMpIGNvbnN0Ow0KLQ0KLSAgICAvKioNCi0gICAgICogRW5zdXJlIHRoYXQg
bm8gbW9yZSB0aGFuIHRoaXMgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBhcmUgcmV0YWlu
ZWQgd2hlbiByb3VuZGluZyBhY2NvcmRpbmcgdG8gZnJhY3Rpb24NCi0gICAgICogcnVsZXMuDQot
ICAgICAqDQotICAgICAqIDxwPg0KLSAgICAgKiBGb3IgZXhhbXBsZSwgd2l0aCBpbnRlZ2VyIHJv
dW5kaW5nLCB0aGUgbnVtYmVyIDEyMy40IGJlY29tZXMgIjEyMyIuIEhvd2V2ZXIsIHdpdGggbWF4
aW11bSBmaWd1cmVzIHNldCB0byAyLCAxMjMuNA0KLSAgICAgKiBiZWNvbWVzICIxMjAiIGluc3Rl
YWQuDQotICAgICAqDQotICAgICAqIDxwPg0KLSAgICAgKiBUaGlzIHNldHRpbmcgZG9lcyBub3Qg
YWZmZWN0IHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgemVyb3MuIEZvciBleGFtcGxlLCB3aXRoIGZp
eGVkIGZyYWN0aW9uIG9mIDIsIDEyMy40IHdvdWxkDQotICAgICAqIGJlY29tZSAiMTIwLjAwIi4N
Ci0gICAgICoNCi0gICAgICogQHBhcmFtIG1heFNpZ25pZmljYW50RGlnaXRzDQotICAgICAqICAg
ICAgICAgICAgUm91bmQgdGhlIG51bWJlciB0byBubyBtb3JlIHRoYW4gdGhpcyBudW1iZXIgb2Yg
c2lnbmlmaWNhbnQgZmlndXJlcy4NCi0gICAgICogQHJldHVybiBBIHByZWNpc2lvbiBmb3IgY2hh
aW5pbmcgb3IgcGFzc2luZyB0byB0aGUgTnVtYmVyRm9ybWF0dGVyIHByZWNpc2lvbigpIHNldHRl
ci4NCi0gICAgICogQGRyYWZ0IElDVSA2MA0KLSAgICAgKi8NCi0gICAgUHJlY2lzaW9uIHdpdGhN
YXhEaWdpdHMoaW50MzJfdCBtYXhTaWduaWZpY2FudERpZ2l0cykgY29uc3Q7DQotDQotICBwcml2
YXRlOg0KLSAgICAvLyBJbmhlcml0IGNvbnN0cnVjdG9yDQotICAgIHVzaW5nIFByZWNpc2lvbjo6
UHJlY2lzaW9uOw0KLQ0KLSAgICAvLyBUbyBhbGxvdyBwYXJlbnQgY2xhc3MgdG8gY2FsbCB0aGlz
IGNsYXNzJ3MgY29uc3RydWN0b3I6DQotICAgIGZyaWVuZCBjbGFzcyBQcmVjaXNpb247DQotfTsN
Ci0NCi0vKioNCi0gKiBBIGNsYXNzIHRoYXQgZGVmaW5lcyBhIHJvdW5kaW5nIHByZWNpc2lvbiBw
YXJhbWV0ZXJpemVkIGJ5IGEgY3VycmVuY3kgdG8gYmUgdXNlZCB3aGVuIGZvcm1hdHRpbmcgbnVt
YmVycyBpbg0KLSAqIE51bWJlckZvcm1hdHRlci4NCi0gKg0KLSAqIDxwPg0KLSAqIFRvIGNyZWF0
ZSBhIEN1cnJlbmN5UHJlY2lzaW9uLCB1c2Ugb25lIG9mIHRoZSBmYWN0b3J5IG1ldGhvZHMgb24g
UHJlY2lzaW9uLg0KLSAqDQotICogQGRyYWZ0IElDVSA2MA0KLSAqLw0KLWNsYXNzIFVfSTE4Tl9B
UEkgQ3VycmVuY3lQcmVjaXNpb24gOiBwdWJsaWMgUHJlY2lzaW9uIHsNCi0gIHB1YmxpYzoNCi0g
ICAgLyoqDQotICAgICAgKiBBc3NvY2lhdGVzIGEgY3VycmVuY3kgd2l0aCB0aGlzIHJvdW5kaW5n
IHByZWNpc2lvbi4NCi0gICAgICAqDQotICAgICAgKiA8cD4NCi0gICAgICAqIDxzdHJvbmc+Q2Fs
bGluZyB0aGlzIG1ldGhvZCBpcyA8ZW0+bm90IHJlcXVpcmVkPC9lbT48L3N0cm9uZz4sIGJlY2F1
c2UgdGhlIGN1cnJlbmN5IHNwZWNpZmllZCBpbiB1bml0KCkNCi0gICAgICAqIGlzIGF1dG9tYXRp
Y2FsbHkgYXBwbGllZCB0byBjdXJyZW5jeSByb3VuZGluZyBwcmVjaXNpb25zLiBIb3dldmVyLA0K
LSAgICAgICogdGhpcyBtZXRob2QgZW5hYmxlcyB5b3UgdG8gb3ZlcnJpZGUgdGhhdCBhdXRvbWF0
aWMgYXNzb2NpYXRpb24uDQotICAgICAgKg0KLSAgICAgICogPHA+DQotICAgICAgKiBUaGlzIG1l
dGhvZCBhbHNvIGVuYWJsZXMgbnVtYmVycyB0byBiZSBmb3JtYXR0ZWQgdXNpbmcgY3VycmVuY3kg
cm91bmRpbmcgcnVsZXMgd2l0aG91dCBleHBsaWNpdGx5IHVzaW5nIGENCi0gICAgICAqIGN1cnJl
bmN5IGZvcm1hdC4NCi0gICAgICAqDQotICAgICAgKiBAcGFyYW0gY3VycmVuY3kNCi0gICAgICAq
ICAgICAgICAgICAgVGhlIGN1cnJlbmN5IHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgcm91bmRpbmcg
cHJlY2lzaW9uLg0KLSAgICAgICogQHJldHVybiBBIHByZWNpc2lvbiBmb3IgY2hhaW5pbmcgb3Ig
cGFzc2luZyB0byB0aGUgTnVtYmVyRm9ybWF0dGVyIHByZWNpc2lvbigpIHNldHRlci4NCi0gICAg
ICAqIEBkcmFmdCBJQ1UgNjANCi0gICAgICAqLw0KLSAgICBQcmVjaXNpb24gd2l0aEN1cnJlbmN5
KGNvbnN0IEN1cnJlbmN5VW5pdCAmY3VycmVuY3kpIGNvbnN0Ow0KLQ0KLSAgcHJpdmF0ZToNCi0g
ICAgLy8gSW5oZXJpdCBjb25zdHJ1Y3Rvcg0KLSAgICB1c2luZyBQcmVjaXNpb246OlByZWNpc2lv
bjsNCi0NCi0gICAgLy8gVG8gYWxsb3cgcGFyZW50IGNsYXNzIHRvIGNhbGwgdGhpcyBjbGFzcydz
IGNvbnN0cnVjdG9yOg0KLSAgICBmcmllbmQgY2xhc3MgUHJlY2lzaW9uOw0KLX07DQotDQotLyoq
DQotICogQSBjbGFzcyB0aGF0IGRlZmluZXMgYSByb3VuZGluZyBwcmVjaXNpb24gcGFyYW1ldGVy
aXplZCBieSBhIHJvdW5kaW5nIGluY3JlbWVudCB0byBiZSB1c2VkIHdoZW4gZm9ybWF0dGluZyBu
dW1iZXJzIGluDQotICogTnVtYmVyRm9ybWF0dGVyLg0KLSAqDQotICogPHA+DQotICogVG8gY3Jl
YXRlIGFuIEluY3JlbWVudFByZWNpc2lvbiwgdXNlIG9uZSBvZiB0aGUgZmFjdG9yeSBtZXRob2Rz
IG9uIFByZWNpc2lvbi4NCi0gKg0KLSAqIEBkcmFmdCBJQ1UgNjANCi0gKi8NCi1jbGFzcyBVX0kx
OE5fQVBJIEluY3JlbWVudFByZWNpc2lvbiA6IHB1YmxpYyBQcmVjaXNpb24gew0KLSAgcHVibGlj
Og0KLSAgICAvKioNCi0gICAgICogU3BlY2lmaWVzIHRoZSBtaW5pbXVtIG51bWJlciBvZiBmcmFj
dGlvbiBkaWdpdHMgdG8gcmVuZGVyIGFmdGVyIHRoZSBkZWNpbWFsIHNlcGFyYXRvciwgcGFkZGlu
ZyB3aXRoIHplcm9zIGlmDQotICAgICAqIG5lY2Vzc2FyeS4gIEJ5IGRlZmF1bHQsIG5vIHRyYWls
aW5nIHplcm9zIGFyZSBhZGRlZC4NCi0gICAgICoNCi0gICAgICogPHA+DQotICAgICAqIEZvciBl
eGFtcGxlLCBpZiB0aGUgcm91bmRpbmcgaW5jcmVtZW50IGlzIDAuNSBhbmQgbWluRnJhYyBpcyAy
LCB0aGVuIHRoZSByZXN1bHRpbmcgc3RyaW5ncyBpbmNsdWRlICIwLjAwIiwNCi0gICAgICogIjAu
NTAiLCAiMS4wMCIsIGFuZCAiMS41MCIuDQotICAgICAqDQotICAgICAqIDxwPg0KLSAgICAgKiBO
b3RlOiBJbiBJQ1U0SiwgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGFjY29tcGxpc2hlZCB2aWEgdGhl
IHNjYWxlIG9mIHRoZSBCaWdEZWNpbWFsIHJvdW5kaW5nIGluY3JlbWVudC4NCi0gICAgICoNCi0g
ICAgICogQHBhcmFtIG1pbkZyYWMgVGhlIG1pbmltdW0gbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciB0
aGUgZGVjaW1hbCBzZXBhcmF0b3IuDQotICAgICAqIEByZXR1cm4gQSBwcmVjaXNpb24gZm9yIGNo
YWluaW5nIG9yIHBhc3NpbmcgdG8gdGhlIE51bWJlckZvcm1hdHRlciBwcmVjaXNpb24oKSBzZXR0
ZXIuDQotICAgICAqIEBkcmFmdCBJQ1UgNjANCi0gICAgICovDQotICAgIFByZWNpc2lvbiB3aXRo
TWluRnJhY3Rpb24oaW50MzJfdCBtaW5GcmFjKSBjb25zdDsNCi0NCi0gIHByaXZhdGU6DQotICAg
IC8vIEluaGVyaXQgY29uc3RydWN0b3INCi0gICAgdXNpbmcgUHJlY2lzaW9uOjpQcmVjaXNpb247
DQotDQotICAgIC8vIFRvIGFsbG93IHBhcmVudCBjbGFzcyB0byBjYWxsIHRoaXMgY2xhc3MncyBj
b25zdHJ1Y3RvcjoNCi0gICAgZnJpZW5kIGNsYXNzIFByZWNpc2lvbjsNCi19Ow0KLQ0KLS8qKg0K
LSAqIEEgY2xhc3MgdGhhdCBkZWZpbmVzIHRoZSBzdHJhdGVneSBmb3IgcGFkZGluZyBhbmQgdHJ1
bmNhdGluZyBpbnRlZ2VycyBiZWZvcmUgdGhlIGRlY2ltYWwgc2VwYXJhdG9yLg0KLSAqDQotICog
PHA+DQotICogVG8gY3JlYXRlIGFuIEludGVnZXJXaWR0aCwgdXNlIG9uZSBvZiB0aGUgZmFjdG9y
eSBtZXRob2RzLg0KLSAqDQotICogQGRyYWZ0IElDVSA2MA0KLSAqIEBzZWUgTnVtYmVyRm9ybWF0
dGVyDQotICovDQotY2xhc3MgVV9JMThOX0FQSSBJbnRlZ2VyV2lkdGggOiBwdWJsaWMgVU1lbW9y
eSB7DQotICBwdWJsaWM6DQotICAgIC8qKg0KLSAgICAgKiBQYWQgbnVtYmVycyBhdCB0aGUgYmVn
aW5uaW5nIHdpdGggemVyb3MgdG8gZ3VhcmFudGVlIGEgY2VydGFpbiBudW1iZXIgb2YgbnVtZXJh
bHMgYmVmb3JlIHRoZSBkZWNpbWFsIHNlcGFyYXRvci4NCi0gICAgICoNCi0gICAgICogPHA+DQot
ICAgICAqIEZvciBleGFtcGxlLCB3aXRoIG1pbkludD0zLCB0aGUgbnVtYmVyIDU1IHdpbGwgZ2V0
IHByaW50ZWQgYXMgIjA1NSIuDQotICAgICAqDQotICAgICAqIEBwYXJhbSBtaW5JbnQNCi0gICAg
ICogICAgICAgICAgICBUaGUgbWluaW11bSBudW1iZXIgb2YgcGxhY2VzIGJlZm9yZSB0aGUgZGVj
aW1hbCBzZXBhcmF0b3IuDQotICAgICAqIEByZXR1cm4gQW4gSW50ZWdlcldpZHRoIGZvciBjaGFp
bmluZyBvciBwYXNzaW5nIHRvIHRoZSBOdW1iZXJGb3JtYXR0ZXIgaW50ZWdlcldpZHRoKCkgc2V0
dGVyLg0KLSAgICAgKiBAZHJhZnQgSUNVIDYwDQotICAgICAqLw0KLSAgICBzdGF0aWMgSW50ZWdl
cldpZHRoIHplcm9GaWxsVG8oaW50MzJfdCBtaW5JbnQpOw0KLQ0KLSAgICAvKioNCi0gICAgICog
VHJ1bmNhdGUgbnVtYmVycyBleGNlZWRpbmcgYSBjZXJ0YWluIG51bWJlciBvZiBudW1lcmFscyBi
ZWZvcmUgdGhlIGRlY2ltYWwgc2VwYXJhdG9yLg0KLSAgICAgKg0KLSAgICAgKiBGb3IgZXhhbXBs
ZSwgd2l0aCBtYXhJbnQ9MywgdGhlIG51bWJlciAxMjM0IHdpbGwgZ2V0IHByaW50ZWQgYXMgIjIz
NCIuDQotICAgICAqDQotICAgICAqIEBwYXJhbSBtYXhJbnQNCi0gICAgICogICAgICAgICAgICBU
aGUgbWF4aW11bSBudW1iZXIgb2YgcGxhY2VzIGJlZm9yZSB0aGUgZGVjaW1hbCBzZXBhcmF0b3Iu
IG1heEludCA9PSAtMSBtZWFucyBubw0KLSAgICAgKiAgICAgICAgICAgIHRydW5jYXRpb24uDQot
ICAgICAqIEByZXR1cm4gQW4gSW50ZWdlcldpZHRoIGZvciBwYXNzaW5nIHRvIHRoZSBOdW1iZXJG
b3JtYXR0ZXIgaW50ZWdlcldpZHRoKCkgc2V0dGVyLg0KLSAgICAgKiBAZHJhZnQgSUNVIDYwDQot
ICAgICAqLw0KLSAgICBJbnRlZ2VyV2lkdGggdHJ1bmNhdGVBdChpbnQzMl90IG1heEludCk7DQot
DQotICBwcml2YXRlOg0KLSAgICB1bmlvbiB7DQotICAgICAgICBzdHJ1Y3Qgew0KLSAgICAgICAg
ICAgIGltcGw6OmRpZ2l0c190IGZNaW5JbnQ7DQotICAgICAgICAgICAgaW1wbDo6ZGlnaXRzX3Qg
Zk1heEludDsNCi0gICAgICAgICAgICBib29sIGZGb3JtYXRGYWlsSWZNb3JlVGhhbk1heERpZ2l0
czsNCi0gICAgICAgIH0gbWluTWF4SW50Ow0KLSAgICAgICAgVUVycm9yQ29kZSBlcnJvckNvZGU7
DQotICAgIH0gZlVuaW9uOw0KLSAgICBib29sIGZIYXNFcnJvciA9IGZhbHNlOw0KLQ0KLSAgICBJ
bnRlZ2VyV2lkdGgoaW1wbDo6ZGlnaXRzX3QgbWluSW50LCBpbXBsOjpkaWdpdHNfdCBtYXhJbnQs
IGJvb2wgZm9ybWF0RmFpbElmTW9yZVRoYW5NYXhEaWdpdHMpOw0KLQ0KLSAgICBJbnRlZ2VyV2lk
dGgoVUVycm9yQ29kZSBlcnJvckNvZGUpIHsgLy8gTk9MSU5UDQotICAgICAgICBmVW5pb24uZXJy
b3JDb2RlID0gZXJyb3JDb2RlOw0KLSAgICAgICAgZkhhc0Vycm9yID0gdHJ1ZTsNCi0gICAgfQ0K
LQ0KLSAgICBJbnRlZ2VyV2lkdGgoKSB7IC8vIE5PTElOVA0KLSAgICAgICAgZlVuaW9uLm1pbk1h
eEludC5mTWluSW50ID0gLTE7DQotICAgIH0NCi0NCi0gICAgLyoqIFJldHVybnMgdGhlIGRlZmF1
bHQgaW5zdGFuY2UuICovDQotICAgIHN0YXRpYyBJbnRlZ2VyV2lkdGggc3RhbmRhcmQoKSB7DQot
ICAgICAgICByZXR1cm4gSW50ZWdlcldpZHRoOjp6ZXJvRmlsbFRvKDEpOw0KLSAgICB9DQotDQot
ICAgIGJvb2wgaXNCb2d1cygpIGNvbnN0IHsNCi0gICAgICAgIHJldHVybiAhZkhhc0Vycm9yICYm
IGZVbmlvbi5taW5NYXhJbnQuZk1pbkludCA9PSAtMTsNCi0gICAgfQ0KLQ0KLSAgICBVQm9vbCBj
b3B5RXJyb3JUbyhVRXJyb3JDb2RlICZzdGF0dXMpIGNvbnN0IHsNCi0gICAgICAgIGlmIChmSGFz
RXJyb3IpIHsNCi0gICAgICAgICAgICBzdGF0dXMgPSBmVW5pb24uZXJyb3JDb2RlOw0KLSAgICAg
ICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0K
LSAgICB9DQotDQotICAgIHZvaWQgYXBwbHkoaW1wbDo6RGVjaW1hbFF1YW50aXR5ICZxdWFudGl0
eSwgVUVycm9yQ29kZSAmc3RhdHVzKSBjb25zdDsNCi0NCi0gICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEludGVnZXJXaWR0aCYgb3RoZXIpIGNvbnN0Ow0KLQ0KLSAgICAvLyBUbyBhbGxvdyBNYWNy
b1Byb3BzL01pY3JvUHJvcHMgdG8gaW5pdGlhbGl6ZSBlbXB0eSBpbnN0YW5jZXM6DQotICAgIGZy
aWVuZCBzdHJ1Y3QgaW1wbDo6TWFjcm9Qcm9wczsNCi0gICAgZnJpZW5kIHN0cnVjdCBpbXBsOjpN
aWNyb1Byb3BzOw0KLQ0KLSAgICAvLyBUbyBhbGxvdyBOdW1iZXJGb3JtYXR0ZXJJbXBsIHRvIGFj
Y2VzcyBpc0JvZ3VzKCkgYW5kIHBlcmZvcm0gb3RoZXIgb3BlcmF0aW9uczoNCi0gICAgZnJpZW5k
IGNsYXNzIGltcGw6Ok51bWJlckZvcm1hdHRlckltcGw7DQotDQotICAgIC8vIFNvIHRoYXQgTnVt
YmVyUHJvcGVydHlNYXBwZXIgY2FuIGNyZWF0ZSBpbnN0YW5jZXMNCi0gICAgZnJpZW5kIGNsYXNz
IGltcGw6Ok51bWJlclByb3BlcnR5TWFwcGVyOw0KLQ0KLSAgICAvLyBUbyBhbGxvdyBhY2Nlc3Mg
dG8gdGhlIHNrZWxldG9uIGdlbmVyYXRpb24gY29kZToNCi0gICAgZnJpZW5kIGNsYXNzIGltcGw6
OkdlbmVyYXRvckhlbHBlcnM7DQotfTsNCi0NCi0vKioNCi0gKiBBIGNsYXNzIHRoYXQgZGVmaW5l
cyBhIHF1YW50aXR5IGJ5IHdoaWNoIGEgbnVtYmVyIHNob3VsZCBiZSBtdWx0aXBsaWVkIHdoZW4g
Zm9ybWF0dGluZy4NCi0gKg0KLSAqIDxwPg0KLSAqIFRvIGNyZWF0ZSBhIFNjYWxlLCB1c2Ugb25l
IG9mIHRoZSBmYWN0b3J5IG1ldGhvZHMuDQotICoNCi0gKiBAZHJhZnQgSUNVIDYyDQotICovDQot
Y2xhc3MgVV9JMThOX0FQSSBTY2FsZSA6IHB1YmxpYyBVTWVtb3J5IHsNCi0gIHB1YmxpYzoNCi0g
ICAgLyoqDQotICAgICAqIERvIG5vdCBjaGFuZ2UgdGhlIHZhbHVlIG9mIG51bWJlcnMgd2hlbiBm
b3JtYXR0aW5nIG9yIHBhcnNpbmcuDQotICAgICAqDQotICAgICAqIEByZXR1cm4gQSBTY2FsZSB0
byBwcmV2ZW50IGFueSBtdWx0aXBsaWNhdGlvbi4NCi0gICAgICogQGRyYWZ0IElDVSA2Mg0KLSAg
ICAgKi8NCi0gICAgc3RhdGljIFNjYWxlIG5vbmUoKTsNCi0NCi0gICAgLyoqDQotICAgICAqIE11
bHRpcGx5IG51bWJlcnMgYnkgYSBwb3dlciBvZiB0ZW4gYmVmb3JlIGZvcm1hdHRpbmcuIFVzZWZ1
bCBmb3IgY29tYmluaW5nIHdpdGggYSBwZXJjZW50IHVuaXQ6DQotICAgICAqDQotICAgICAqIDxw
cmU+DQotICAgICAqIE51bWJlckZvcm1hdHRlcjo6d2l0aCgpLnVuaXQoTm9Vbml0OjpwZXJjZW50
KCkpLm11bHRpcGxpZXIoU2NhbGU6OnBvd2VyT2ZUZW4oMikpDQotICAgICAqIDwvcHJlPg0KLSAg
ICAgKg0KLSAgICAgKiBAcmV0dXJuIEEgU2NhbGUgZm9yIHBhc3NpbmcgdG8gdGhlIHNldHRlciBp
biBOdW1iZXJGb3JtYXR0ZXIuDQotICAgICAqIEBkcmFmdCBJQ1UgNjINCi0gICAgICovDQotICAg
IHN0YXRpYyBTY2FsZSBwb3dlck9mVGVuKGludDMyX3QgcG93ZXIpOw0KLQ0KLSAgICAvKioNCi0g
ICAgICogTXVsdGlwbHkgbnVtYmVycyBieSBhbiBhcmJpdHJhcnkgdmFsdWUgYmVmb3JlIGZvcm1h
dHRpbmcuIFVzZWZ1bCBmb3IgdW5pdCBjb252ZXJzaW9ucy4NCi0gICAgICoNCi0gICAgICogVGhp
cyBtZXRob2QgdGFrZXMgYSBzdHJpbmcgaW4gYSBkZWNpbWFsIG51bWJlciBmb3JtYXQgd2l0aCBz
eW50YXgNCi0gICAgICogYXMgZGVmaW5lZCBpbiB0aGUgRGVjaW1hbCBBcml0aG1ldGljIFNwZWNp
ZmljYXRpb24sIGF2YWlsYWJsZSBhdA0KLSAgICAgKiBodHRwOi8vc3BlbGVvdHJvdmUuY29tL2Rl
Y2ltYWwNCi0gICAgICoNCi0gICAgICogQWxzbyBzZWUgdGhlIHZlcnNpb24gb2YgdGhpcyBtZXRo
b2QgdGhhdCB0YWtlcyBhIGRvdWJsZS4NCi0gICAgICoNCi0gICAgICogQHJldHVybiBBIFNjYWxl
IGZvciBwYXNzaW5nIHRvIHRoZSBzZXR0ZXIgaW4gTnVtYmVyRm9ybWF0dGVyLg0KLSAgICAgKiBA
ZHJhZnQgSUNVIDYyDQotICAgICAqLw0KLSAgICBzdGF0aWMgU2NhbGUgYnlEZWNpbWFsKFN0cmlu
Z1BpZWNlIG11bHRpcGxpY2FuZCk7DQotDQotICAgIC8qKg0KLSAgICAgKiBNdWx0aXBseSBudW1i
ZXJzIGJ5IGFuIGFyYml0cmFyeSB2YWx1ZSBiZWZvcmUgZm9ybWF0dGluZy4gVXNlZnVsIGZvciB1
bml0IGNvbnZlcnNpb25zLg0KLSAgICAgKg0KLSAgICAgKiBUaGlzIG1ldGhvZCB0YWtlcyBhIGRv
dWJsZTsgYWxzbyBzZWUgdGhlIHZlcnNpb24gb2YgdGhpcyBtZXRob2QgdGhhdCB0YWtlcyBhbiBl
eGFjdCBkZWNpbWFsLg0KLSAgICAgKg0KLSAgICAgKiBAcmV0dXJuIEEgU2NhbGUgZm9yIHBhc3Np
bmcgdG8gdGhlIHNldHRlciBpbiBOdW1iZXJGb3JtYXR0ZXIuDQotICAgICAqIEBkcmFmdCBJQ1Ug
NjINCi0gICAgICovDQotICAgIHN0YXRpYyBTY2FsZSBieURvdWJsZShkb3VibGUgbXVsdGlwbGlj
YW5kKTsNCi0NCi0gICAgLyoqDQotICAgICAqIE11bHRpcGx5IGEgbnVtYmVyIGJ5IGJvdGggYSBw
b3dlciBvZiB0ZW4gYW5kIGJ5IGFuIGFyYml0cmFyeSBkb3VibGUgdmFsdWUuDQotICAgICAqDQot
ICAgICAqIEByZXR1cm4gQSBTY2FsZSBmb3IgcGFzc2luZyB0byB0aGUgc2V0dGVyIGluIE51bWJl
ckZvcm1hdHRlci4NCi0gICAgICogQGRyYWZ0IElDVSA2Mg0KLSAgICAgKi8NCi0gICAgc3RhdGlj
IFNjYWxlIGJ5RG91YmxlQW5kUG93ZXJPZlRlbihkb3VibGUgbXVsdGlwbGljYW5kLCBpbnQzMl90
IHBvd2VyKTsNCi0NCi0gICAgLy8gV2UgbmVlZCBhIGN1c3RvbSBkZXN0cnVjdG9yIGZvciB0aGUg
RGVjTnVtLCB3aGljaCBtZWFucyB3ZSBuZWVkIHRvIGRlY2xhcmUNCi0gICAgLy8gdGhlIGNvcHkv
bW92ZSBjb25zdHJ1Y3Rvci9hc3NpZ25tZW50IHF1YXJ0ZXQuDQotDQotICAgIC8qKiBAZHJhZnQg
SUNVIDYyICovDQotICAgIFNjYWxlKGNvbnN0IFNjYWxlJiBvdGhlcik7DQotDQotICAgIC8qKiBA
ZHJhZnQgSUNVIDYyICovDQotICAgIFNjYWxlJiBvcGVyYXRvcj0oY29uc3QgU2NhbGUmIG90aGVy
KTsNCi0NCi0gICAgLyoqIEBkcmFmdCBJQ1UgNjIgKi8NCi0gICAgU2NhbGUoU2NhbGUmJiBzcmMp
IFVfTk9FWENFUFQ7DQotDQotICAgIC8qKiBAZHJhZnQgSUNVIDYyICovDQotICAgIFNjYWxlJiBv
cGVyYXRvcj0oU2NhbGUmJiBzcmMpIFVfTk9FWENFUFQ7DQotDQotICAgIC8qKiBAZHJhZnQgSUNV
IDYyICovDQotICAgIH5TY2FsZSgpOw0KLQ0KLSNpZm5kZWYgVV9ISURFX0lOVEVSTkFMX0FQSQ0K
LSAgICAvKiogQGludGVybmFsICovDQotICAgIFNjYWxlKGludDMyX3QgbWFnbml0dWRlLCBpbXBs
OjpEZWNOdW0qIGFyYml0cmFyeVRvQWRvcHQpOw0KLSNlbmRpZiAgLyogVV9ISURFX0lOVEVSTkFM
X0FQSSAqLw0KLQ0KLSAgcHJpdmF0ZToNCi0gICAgaW50MzJfdCBmTWFnbml0dWRlOw0KLSAgICBp
bXBsOjpEZWNOdW0qIGZBcmJpdHJhcnk7DQotICAgIFVFcnJvckNvZGUgZkVycm9yOw0KLQ0KLSAg
ICBTY2FsZShVRXJyb3JDb2RlIGVycm9yKSA6IGZNYWduaXR1ZGUoMCksIGZBcmJpdHJhcnkobnVs
bHB0ciksIGZFcnJvcihlcnJvcikge30NCi0NCi0gICAgU2NhbGUoKSA6IGZNYWduaXR1ZGUoMCks
IGZBcmJpdHJhcnkobnVsbHB0ciksIGZFcnJvcihVX1pFUk9fRVJST1IpIHt9DQotDQotICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0IHsNCi0gICAgICAgIHJldHVybiBmTWFnbml0dWRlICE9IDAgfHwg
ZkFyYml0cmFyeSAhPSBudWxscHRyOw0KLSAgICB9DQotDQotICAgIFVCb29sIGNvcHlFcnJvclRv
KFVFcnJvckNvZGUgJnN0YXR1cykgY29uc3Qgew0KLSAgICAgICAgaWYgKGZFcnJvciAhPSBVX1pF
Uk9fRVJST1IpIHsNCi0gICAgICAgICAgICBzdGF0dXMgPSBmRXJyb3I7DQotICAgICAgICAgICAg
cmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0N
Ci0NCi0gICAgdm9pZCBhcHBseVRvKGltcGw6OkRlY2ltYWxRdWFudGl0eSYgcXVhbnRpdHkpIGNv
bnN0Ow0KLQ0KLSAgICB2b2lkIGFwcGx5UmVjaXByb2NhbFRvKGltcGw6OkRlY2ltYWxRdWFudGl0
eSYgcXVhbnRpdHkpIGNvbnN0Ow0KLQ0KLSAgICAvLyBUbyBhbGxvdyBNYWNyb1Byb3BzL01pY3Jv
UHJvcHMgdG8gaW5pdGlhbGl6ZSBlbXB0eSBpbnN0YW5jZXM6DQotICAgIGZyaWVuZCBzdHJ1Y3Qg
aW1wbDo6TWFjcm9Qcm9wczsNCi0gICAgZnJpZW5kIHN0cnVjdCBpbXBsOjpNaWNyb1Byb3BzOw0K
LQ0KLSAgICAvLyBUbyBhbGxvdyBOdW1iZXJGb3JtYXR0ZXJJbXBsIHRvIGFjY2VzcyBpc0JvZ3Vz
KCkgYW5kIHBlcmZvcm0gb3RoZXIgb3BlcmF0aW9uczoNCi0gICAgZnJpZW5kIGNsYXNzIGltcGw6
Ok51bWJlckZvcm1hdHRlckltcGw7DQotDQotICAgIC8vIFRvIGFsbG93IHRoZSBoZWxwZXIgY2xh
c3MgTXVsdGlwbGllckZvcm1hdEhhbmRsZXIgYWNjZXNzIHRvIHByaXZhdGUgZmllbGRzOg0KLSAg
ICBmcmllbmQgY2xhc3MgaW1wbDo6TXVsdGlwbGllckZvcm1hdEhhbmRsZXI7DQotDQotICAgIC8v
IFRvIGFsbG93IGFjY2VzcyB0byB0aGUgc2tlbGV0b24gZ2VuZXJhdGlvbiBjb2RlOg0KLSAgICBm
cmllbmQgY2xhc3MgaW1wbDo6R2VuZXJhdG9ySGVscGVyczsNCi0NCi0gICAgLy8gVG8gYWxsb3cg
YWNjZXNzIHRvIHBhcnNpbmcgY29kZToNCi0gICAgZnJpZW5kIGNsYXNzIDo6aWN1OjpudW1wYXJz
ZTo6aW1wbDo6TnVtYmVyUGFyc2VySW1wbDsNCi0gICAgZnJpZW5kIGNsYXNzIDo6aWN1OjpudW1w
YXJzZTo6aW1wbDo6TXVsdGlwbGllclBhcnNlSGFuZGxlcjsNCi19Ow0KLQ0KLW5hbWVzcGFjZSBp
bXBsIHsNCi0NCi0vLyBEbyBub3QgZW5jbG9zZSBlbnRpcmUgU3ltYm9sc1dyYXBwZXIgd2l0aCAj
aWZuZGVmIFVfSElERV9JTlRFUk5BTF9BUEksIG5lZWRlZCBmb3IgYSBwcm90ZWN0ZWQgZmllbGQN
Ci0vKiogQGludGVybmFsICovDQotY2xhc3MgVV9JMThOX0FQSSBTeW1ib2xzV3JhcHBlciA6IHB1
YmxpYyBVTWVtb3J5IHsNCi0gIHB1YmxpYzoNCi0gICAgLyoqIEBpbnRlcm5hbCAqLw0KLSAgICBT
eW1ib2xzV3JhcHBlcigpIDogZlR5cGUoU1lNUFRSX05PTkUpLCBmUHRye251bGxwdHJ9IHt9DQot
DQotICAgIC8qKiBAaW50ZXJuYWwgKi8NCi0gICAgU3ltYm9sc1dyYXBwZXIoY29uc3QgU3ltYm9s
c1dyYXBwZXIgJm90aGVyKTsNCi0NCi0gICAgLyoqIEBpbnRlcm5hbCAqLw0KLSAgICBTeW1ib2xz
V3JhcHBlciAmb3BlcmF0b3I9KGNvbnN0IFN5bWJvbHNXcmFwcGVyICZvdGhlcik7DQotDQotICAg
IC8qKiBAaW50ZXJuYWwgKi8NCi0gICAgU3ltYm9sc1dyYXBwZXIoU3ltYm9sc1dyYXBwZXImJiBz
cmMpIFVfTk9FWENFUFQ7DQotDQotICAgIC8qKiBAaW50ZXJuYWwgKi8NCi0gICAgU3ltYm9sc1dy
YXBwZXIgJm9wZXJhdG9yPShTeW1ib2xzV3JhcHBlciYmIHNyYykgVV9OT0VYQ0VQVDsNCi0NCi0g
ICAgLyoqIEBpbnRlcm5hbCAqLw0KLSAgICB+U3ltYm9sc1dyYXBwZXIoKTsNCi0NCi0jaWZuZGVm
IFVfSElERV9JTlRFUk5BTF9BUEkNCi0NCi0gICAgLyoqDQotICAgICAqIFRoZSBwcm92aWRlZCBv
YmplY3QgaXMgY29waWVkLCBidXQgd2UgZG8gbm90IGFkb3B0IGl0Lg0KLSAgICAgKiBAaW50ZXJu
YWwNCi0gICAgICovDQotICAgIHZvaWQgc2V0VG8oY29uc3QgRGVjaW1hbEZvcm1hdFN5bWJvbHMg
JmRmcyk7DQotDQotICAgIC8qKg0KLSAgICAgKiBBZG9wdCB0aGUgcHJvdmlkZWQgb2JqZWN0Lg0K
LSAgICAgKiBAaW50ZXJuYWwNCi0gICAgICovDQotICAgIHZvaWQgc2V0VG8oY29uc3QgTnVtYmVy
aW5nU3lzdGVtICpucyk7DQotDQotICAgIC8qKg0KLSAgICAgKiBXaGV0aGVyIHRoZSBvYmplY3Qg
aXMgY3VycmVudGx5IGhvbGRpbmcgYSBEZWNpbWFsRm9ybWF0U3ltYm9scy4NCi0gICAgICogQGlu
dGVybmFsDQotICAgICAqLw0KLSAgICBib29sIGlzRGVjaW1hbEZvcm1hdFN5bWJvbHMoKSBjb25z
dDsNCi0NCi0gICAgLyoqDQotICAgICAqIFdoZXRoZXIgdGhlIG9iamVjdCBpcyBjdXJyZW50bHkg
aG9sZGluZyBhIE51bWJlcmluZ1N5c3RlbS4NCi0gICAgICogQGludGVybmFsDQotICAgICAqLw0K
LSAgICBib29sIGlzTnVtYmVyaW5nU3lzdGVtKCkgY29uc3Q7DQotDQotICAgIC8qKg0KLSAgICAg
KiBHZXQgdGhlIERlY2ltYWxGb3JtYXRTeW1ib2xzIHBvaW50ZXIuIE5vIG93bmVyc2hpcCBjaGFu
Z2UuDQotICAgICAqIEBpbnRlcm5hbA0KLSAgICAgKi8NCi0gICAgY29uc3QgRGVjaW1hbEZvcm1h
dFN5bWJvbHMgKmdldERlY2ltYWxGb3JtYXRTeW1ib2xzKCkgY29uc3Q7DQotDQotICAgIC8qKg0K
LSAgICAgKiBHZXQgdGhlIE51bWJlcmluZ1N5c3RlbSBwb2ludGVyLiBObyBvd25lcnNoaXAgY2hh
bmdlLg0KLSAgICAgKiBAaW50ZXJuYWwNCi0gICAgICovDQotICAgIGNvbnN0IE51bWJlcmluZ1N5
c3RlbSAqZ2V0TnVtYmVyaW5nU3lzdGVtKCkgY29uc3Q7DQotDQotI2VuZGlmICAvLyBVX0hJREVf
SU5URVJOQUxfQVBJDQotDQotICAgIC8qKiBAaW50ZXJuYWwgKi8NCi0gICAgVUJvb2wgY29weUVy
cm9yVG8oVUVycm9yQ29kZSAmc3RhdHVzKSBjb25zdCB7DQotICAgICAgICBpZiAoZlR5cGUgPT0g
U1lNUFRSX0RGUyAmJiBmUHRyLmRmcyA9PSBudWxscHRyKSB7DQotICAgICAgICAgICAgc3RhdHVz
ID0gVV9NRU1PUllfQUxMT0NBVElPTl9FUlJPUjsNCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsN
Ci0gICAgICAgIH0gZWxzZSBpZiAoZlR5cGUgPT0gU1lNUFRSX05TICYmIGZQdHIubnMgPT0gbnVs
bHB0cikgew0KLSAgICAgICAgICAgIHN0YXR1cyA9IFVfTUVNT1JZX0FMTE9DQVRJT05fRVJST1I7
DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4g
RkFMU0U7DQotICAgIH0NCi0NCi0gIHByaXZhdGU6DQotICAgIGVudW0gU3ltYm9sc1BvaW50ZXJU
eXBlIHsNCi0gICAgICAgIFNZTVBUUl9OT05FLCBTWU1QVFJfREZTLCBTWU1QVFJfTlMNCi0gICAg
fSBmVHlwZTsNCi0NCi0gICAgdW5pb24gew0KLSAgICAgICAgY29uc3QgRGVjaW1hbEZvcm1hdFN5
bWJvbHMgKmRmczsNCi0gICAgICAgIGNvbnN0IE51bWJlcmluZ1N5c3RlbSAqbnM7DQotICAgIH0g
ZlB0cjsNCi0NCi0gICAgdm9pZCBkb0NvcHlGcm9tKGNvbnN0IFN5bWJvbHNXcmFwcGVyICZvdGhl
cik7DQotDQotICAgIHZvaWQgZG9Nb3ZlRnJvbShTeW1ib2xzV3JhcHBlciYmIHNyYyk7DQotDQot
ICAgIHZvaWQgZG9DbGVhbnVwKCk7DQotfTsNCi0NCi0vLyBEbyBub3QgZW5jbG9zZSBlbnRpcmUg
R3JvdXBlciB3aXRoICNpZm5kZWYgVV9ISURFX0lOVEVSTkFMX0FQSSwgbmVlZGVkIGZvciBhIHBy
b3RlY3RlZCBmaWVsZA0KLS8qKiBAaW50ZXJuYWwgKi8NCi1jbGFzcyBVX0kxOE5fQVBJIEdyb3Vw
ZXIgOiBwdWJsaWMgVU1lbW9yeSB7DQotICBwdWJsaWM6DQotI2lmbmRlZiBVX0hJREVfSU5URVJO
QUxfQVBJDQotICAgIC8qKiBAaW50ZXJuYWwgKi8NCi0gICAgc3RhdGljIEdyb3VwZXIgZm9yU3Ry
YXRlZ3koVUdyb3VwaW5nU3RyYXRlZ3kgZ3JvdXBpbmcpOw0KLQ0KLSAgICAvKioNCi0gICAgICog
UmVzb2x2ZSB0aGUgdmFsdWVzIGluIFByb3BlcnRpZXMgdG8gYSBHcm91cGVyIG9iamVjdC4NCi0g
ICAgICogQGludGVybmFsDQotICAgICAqLw0KLSAgICBzdGF0aWMgR3JvdXBlciBmb3JQcm9wZXJ0
aWVzKGNvbnN0IERlY2ltYWxGb3JtYXRQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzKTsNCi0NCi0gICAg
Ly8gRnV0dXJlOiBzdGF0aWMgR3JvdXBlciBmb3JQcm9wZXJ0aWVzKERlY2ltYWxGb3JtYXRQcm9w
ZXJ0aWVzJiBwcm9wZXJ0aWVzKTsNCi0NCi0gICAgLyoqIEBpbnRlcm5hbCAqLw0KLSAgICBHcm91
cGVyKGludDE2X3QgZ3JvdXBpbmcxLCBpbnQxNl90IGdyb3VwaW5nMiwgaW50MTZfdCBtaW5Hcm91
cGluZywgVUdyb3VwaW5nU3RyYXRlZ3kgc3RyYXRlZ3kpDQotICAgICAgICAgICAgOiBmR3JvdXBp
bmcxKGdyb3VwaW5nMSksDQotICAgICAgICAgICAgICBmR3JvdXBpbmcyKGdyb3VwaW5nMiksDQot
ICAgICAgICAgICAgICBmTWluR3JvdXBpbmcobWluR3JvdXBpbmcpLA0KLSAgICAgICAgICAgICAg
ZlN0cmF0ZWd5KHN0cmF0ZWd5KSB7fQ0KLSNlbmRpZiAgLy8gVV9ISURFX0lOVEVSTkFMX0FQSQ0K
LQ0KLSAgICAvKiogQGludGVybmFsICovDQotICAgIGludDE2X3QgZ2V0UHJpbWFyeSgpIGNvbnN0
Ow0KLQ0KLSAgICAvKiogQGludGVybmFsICovDQotICAgIGludDE2X3QgZ2V0U2Vjb25kYXJ5KCkg
Y29uc3Q7DQotDQotICBwcml2YXRlOg0KLSAgICAvKioNCi0gICAgICogVGhlIGdyb3VwaW5nIHNp
emVzLCB3aXRoIHRoZSBmb2xsb3dpbmcgc3BlY2lhbCB2YWx1ZXM6DQotICAgICAqIDx1bD4NCi0g
ICAgICogPGxpPi0xID0gbm8gZ3JvdXBpbmcNCi0gICAgICogPGxpPi0yID0gbmVlZHMgbG9jYWxl
IGRhdGENCi0gICAgICogPGxpPi00ID0gZmFsbCBiYWNrIHRvIFdlc3Rlcm4gZ3JvdXBpbmcgaWYg
bm90IGluIGxvY2FsZQ0KLSAgICAgKiA8L3VsPg0KLSAgICAgKi8NCi0gICAgaW50MTZfdCBmR3Jv
dXBpbmcxOw0KLSAgICBpbnQxNl90IGZHcm91cGluZzI7DQotDQotICAgIC8qKg0KLSAgICAgKiBU
aGUgbWluaW11bSBncm91cGluZyBzaXplLCB3aXRoIHRoZSBmb2xsb3dpbmcgc3BlY2lhbCB2YWx1
ZXM6DQotICAgICAqIDx1bD4NCi0gICAgICogPGxpPi0yID0gbmVlZHMgbG9jYWxlIGRhdGENCi0g
ICAgICogPGxpPi0zID0gbm8gbGVzcyB0aGFuIDINCi0gICAgICogPC91bD4NCi0gICAgICovDQot
ICAgIGludDE2X3QgZk1pbkdyb3VwaW5nOw0KLQ0KLSAgICAvKioNCi0gICAgICogVGhlIFVHcm91
cGluZ1N0cmF0ZWd5IHRoYXQgd2FzIHVzZWQgdG8gY3JlYXRlIHRoaXMgR3JvdXBlciwgb3IgVU5V
TV9HUk9VUElOR19DT1VOVCBpZiB0aGlzDQotICAgICAqIHdhcyBub3QgY3JlYXRlZCBmcm9tIGEg
VUdyb3VwaW5nU3RyYXRlZ3kuDQotICAgICAqLw0KLSAgICBVR3JvdXBpbmdTdHJhdGVneSBmU3Ry
YXRlZ3k7DQotDQotICAgIEdyb3VwZXIoKSA6IGZHcm91cGluZzEoLTMpIHt9Ow0KLQ0KLSAgICBi
b29sIGlzQm9ndXMoKSBjb25zdCB7DQotICAgICAgICByZXR1cm4gZkdyb3VwaW5nMSA9PSAtMzsN
Ci0gICAgfQ0KLQ0KLSAgICAvKiogTk9OLUNPTlNUOiBtdXRhdGVzIHRoZSBjdXJyZW50IGluc3Rh
bmNlLiAqLw0KLSAgICB2b2lkIHNldExvY2FsZURhdGEoY29uc3QgaW1wbDo6UGFyc2VkUGF0dGVy
bkluZm8gJnBhdHRlcm5JbmZvLCBjb25zdCBMb2NhbGUmIGxvY2FsZSk7DQotDQotICAgIGJvb2wg
Z3JvdXBBdFBvc2l0aW9uKGludDMyX3QgcG9zaXRpb24sIGNvbnN0IGltcGw6OkRlY2ltYWxRdWFu
dGl0eSAmdmFsdWUpIGNvbnN0Ow0KLQ0KLSAgICAvLyBUbyBhbGxvdyBNYWNyb1Byb3BzL01pY3Jv
UHJvcHMgdG8gaW5pdGlhbGl6ZSBlbXB0eSBpbnN0YW5jZXM6DQotICAgIGZyaWVuZCBzdHJ1Y3Qg
TWFjcm9Qcm9wczsNCi0gICAgZnJpZW5kIHN0cnVjdCBNaWNyb1Byb3BzOw0KLQ0KLSAgICAvLyBU
byBhbGxvdyBOdW1iZXJGb3JtYXR0ZXJJbXBsIHRvIGFjY2VzcyBpc0JvZ3VzKCkgYW5kIHBlcmZv
cm0gb3RoZXIgb3BlcmF0aW9uczoNCi0gICAgZnJpZW5kIGNsYXNzIE51bWJlckZvcm1hdHRlcklt
cGw7DQotDQotICAgIC8vIFRvIGFsbG93IE51bWJlclBhcnNlckltcGwgdG8gcGVyZm9ybSBzZXRM
b2NhbGVEYXRhKCk6DQotICAgIGZyaWVuZCBjbGFzcyA6OmljdTo6bnVtcGFyc2U6OmltcGw6Ok51
bWJlclBhcnNlckltcGw7DQotDQotICAgIC8vIFRvIGFsbG93IGFjY2VzcyB0byB0aGUgc2tlbGV0
b24gZ2VuZXJhdGlvbiBjb2RlOg0KLSAgICBmcmllbmQgY2xhc3MgaW1wbDo6R2VuZXJhdG9ySGVs
cGVyczsNCi19Ow0KLQ0KLS8vIERvIG5vdCBlbmNsb3NlIGVudGlyZSBQYWRkZXIgd2l0aCAjaWZu
ZGVmIFVfSElERV9JTlRFUk5BTF9BUEksIG5lZWRlZCBmb3IgYSBwcm90ZWN0ZWQgZmllbGQNCi0v
KiogQGludGVybmFsICovDQotY2xhc3MgVV9JMThOX0FQSSBQYWRkZXIgOiBwdWJsaWMgVU1lbW9y
eSB7DQotICBwdWJsaWM6DQotI2lmbmRlZiBVX0hJREVfSU5URVJOQUxfQVBJDQotICAgIC8qKiBA
aW50ZXJuYWwgKi8NCi0gICAgc3RhdGljIFBhZGRlciBub25lKCk7DQotDQotICAgIC8qKiBAaW50
ZXJuYWwgKi8NCi0gICAgc3RhdGljIFBhZGRlciBjb2RlUG9pbnRzKFVDaGFyMzIgY3AsIGludDMy
X3QgdGFyZ2V0V2lkdGgsIFVOdW1iZXJGb3JtYXRQYWRQb3NpdGlvbiBwb3NpdGlvbik7DQotI2Vu
ZGlmICAvLyBVX0hJREVfSU5URVJOQUxfQVBJDQotDQotICAgIC8qKiBAaW50ZXJuYWwgKi8NCi0g
ICAgc3RhdGljIFBhZGRlciBmb3JQcm9wZXJ0aWVzKGNvbnN0IERlY2ltYWxGb3JtYXRQcm9wZXJ0
aWVzJiBwcm9wZXJ0aWVzKTsNCi0NCi0gIHByaXZhdGU6DQotICAgIFVDaGFyMzIgZldpZHRoOyAg
Ly8gLTMgPSBlcnJvcjsgLTIgPSBib2d1czsgLTEgPSBubyBwYWRkaW5nDQotICAgIHVuaW9uIHsN
Ci0gICAgICAgIHN0cnVjdCB7DQotICAgICAgICAgICAgaW50MzJfdCBmQ3A7DQotICAgICAgICAg
ICAgVU51bWJlckZvcm1hdFBhZFBvc2l0aW9uIGZQb3NpdGlvbjsNCi0gICAgICAgIH0gcGFkZGlu
ZzsNCi0gICAgICAgIFVFcnJvckNvZGUgZXJyb3JDb2RlOw0KLSAgICB9IGZVbmlvbjsNCi0NCi0g
ICAgUGFkZGVyKFVDaGFyMzIgY3AsIGludDMyX3Qgd2lkdGgsIFVOdW1iZXJGb3JtYXRQYWRQb3Np
dGlvbiBwb3NpdGlvbik7DQotDQotICAgIFBhZGRlcihpbnQzMl90IHdpZHRoKTsNCi0NCi0gICAg
UGFkZGVyKFVFcnJvckNvZGUgZXJyb3JDb2RlKSA6IGZXaWR0aCgtMykgeyAvLyBOT0xJTlQNCi0g
ICAgICAgIGZVbmlvbi5lcnJvckNvZGUgPSBlcnJvckNvZGU7DQotICAgIH0NCi0NCi0gICAgUGFk
ZGVyKCkgOiBmV2lkdGgoLTIpIHt9IC8vIE5PTElOVA0KLQ0KLSAgICBib29sIGlzQm9ndXMoKSBj
b25zdCB7DQotICAgICAgICByZXR1cm4gZldpZHRoID09IC0yOw0KLSAgICB9DQotDQotICAgIFVC
b29sIGNvcHlFcnJvclRvKFVFcnJvckNvZGUgJnN0YXR1cykgY29uc3Qgew0KLSAgICAgICAgaWYg
KGZXaWR0aCA9PSAtMykgew0KLSAgICAgICAgICAgIHN0YXR1cyA9IGZVbmlvbi5lcnJvckNvZGU7
DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4g
RkFMU0U7DQotICAgIH0NCi0NCi0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Qgew0KLSAgICAgICAg
cmV0dXJuIGZXaWR0aCA+IDA7DQotICAgIH0NCi0NCi0gICAgaW50MzJfdCBwYWRBbmRBcHBseShj
b25zdCBpbXBsOjpNb2RpZmllciAmbW9kMSwgY29uc3QgaW1wbDo6TW9kaWZpZXIgJm1vZDIsDQot
ICAgICAgICAgICAgICAgICAgICAgICAgaW1wbDo6TnVtYmVyU3RyaW5nQnVpbGRlciAmc3RyaW5n
LCBpbnQzMl90IGxlZnRJbmRleCwgaW50MzJfdCByaWdodEluZGV4LA0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIFVFcnJvckNvZGUgJnN0YXR1cykgY29uc3Q7DQotDQotICAgIC8vIFRvIGFsbG93
IE1hY3JvUHJvcHMvTWljcm9Qcm9wcyB0byBpbml0aWFsaXplIGVtcHR5IGluc3RhbmNlczoNCi0g
ICAgZnJpZW5kIHN0cnVjdCBNYWNyb1Byb3BzOw0KLSAgICBmcmllbmQgc3RydWN0IE1pY3JvUHJv
cHM7DQotDQotICAgIC8vIFRvIGFsbG93IE51bWJlckZvcm1hdHRlckltcGwgdG8gYWNjZXNzIGlz
Qm9ndXMoKSBhbmQgcGVyZm9ybSBvdGhlciBvcGVyYXRpb25zOg0KLSAgICBmcmllbmQgY2xhc3Mg
aW1wbDo6TnVtYmVyRm9ybWF0dGVySW1wbDsNCi0NCi0gICAgLy8gVG8gYWxsb3cgYWNjZXNzIHRv
IHRoZSBza2VsZXRvbiBnZW5lcmF0aW9uIGNvZGU6DQotICAgIGZyaWVuZCBjbGFzcyBpbXBsOjpH
ZW5lcmF0b3JIZWxwZXJzOw0KLX07DQotDQotLy8gRG8gbm90IGVuY2xvc2UgZW50aXJlIE1hY3Jv
UHJvcHMgd2l0aCAjaWZuZGVmIFVfSElERV9JTlRFUk5BTF9BUEksIG5lZWRlZCBmb3IgYSBwcm90
ZWN0ZWQgZmllbGQNCi0vKiogQGludGVybmFsICovDQotc3RydWN0IFVfSTE4Tl9BUEkgTWFjcm9Q
cm9wcyA6IHB1YmxpYyBVTWVtb3J5IHsNCi0gICAgLyoqIEBpbnRlcm5hbCAqLw0KLSAgICBOb3Rh
dGlvbiBub3RhdGlvbjsNCi0NCi0gICAgLyoqIEBpbnRlcm5hbCAqLw0KLSAgICBNZWFzdXJlVW5p
dCB1bml0OyAvLyA9IE5vVW5pdDo6YmFzZSgpOw0KLQ0KLSAgICAvKiogQGludGVybmFsICovDQot
ICAgIE1lYXN1cmVVbml0IHBlclVuaXQ7IC8vID0gTm9Vbml0OjpiYXNlKCk7DQotDQotICAgIC8q
KiBAaW50ZXJuYWwgKi8NCi0gICAgUHJlY2lzaW9uIHByZWNpc2lvbjsgIC8vID0gUHJlY2lzaW9u
KCk7ICAoYm9ndXMpDQotDQotICAgIC8qKiBAaW50ZXJuYWwgKi8NCi0gICAgVU51bWJlckZvcm1h
dFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUgPSBVTlVNX1JPVU5EX0hBTEZFVkVOOw0KLQ0KLSAg
ICAvKiogQGludGVybmFsICovDQotICAgIEdyb3VwZXIgZ3JvdXBlcjsgIC8vID0gR3JvdXBlcigp
OyAgKGJvZ3VzKQ0KLQ0KLSAgICAvKiogQGludGVybmFsICovDQotICAgIFBhZGRlciBwYWRkZXI7
ICAgIC8vID0gUGFkZGVyKCk7ICAgKGJvZ3VzKQ0KLQ0KLSAgICAvKiogQGludGVybmFsICovDQot
ICAgIEludGVnZXJXaWR0aCBpbnRlZ2VyV2lkdGg7IC8vID0gSW50ZWdlcldpZHRoKCk7IChib2d1
cykNCi0NCi0gICAgLyoqIEBpbnRlcm5hbCAqLw0KLSAgICBTeW1ib2xzV3JhcHBlciBzeW1ib2xz
Ow0KLQ0KLSAgICAvLyBVTlVNX1hZWl9DT1VOVCBkZW5vdGVzIG51bGwgKGJvZ3VzKSB2YWx1ZXMu
DQotDQotICAgIC8qKiBAaW50ZXJuYWwgKi8NCi0gICAgVU51bWJlclVuaXRXaWR0aCB1bml0V2lk
dGggPSBVTlVNX1VOSVRfV0lEVEhfQ09VTlQ7DQotDQotICAgIC8qKiBAaW50ZXJuYWwgKi8NCi0g
ICAgVU51bWJlclNpZ25EaXNwbGF5IHNpZ24gPSBVTlVNX1NJR05fQ09VTlQ7DQotDQotICAgIC8q
KiBAaW50ZXJuYWwgKi8NCi0gICAgVU51bWJlckRlY2ltYWxTZXBhcmF0b3JEaXNwbGF5IGRlY2lt
YWwgPSBVTlVNX0RFQ0lNQUxfU0VQQVJBVE9SX0NPVU5UOw0KLQ0KLSAgICAvKiogQGludGVybmFs
ICovDQotICAgIFNjYWxlIHNjYWxlOyAgLy8gPSBTY2FsZSgpOyAgKGJlbmlnbiB2YWx1ZSkNCi0N
Ci0gICAgLyoqIEBpbnRlcm5hbCAqLw0KLSAgICBjb25zdCBBZmZpeFBhdHRlcm5Qcm92aWRlciog
YWZmaXhQcm92aWRlciA9IG51bGxwdHI7ICAvLyBubyBvd25lcnNoaXANCi0NCi0gICAgLyoqIEBp
bnRlcm5hbCAqLw0KLSAgICBjb25zdCBQbHVyYWxSdWxlcyogcnVsZXMgPSBudWxscHRyOyAgLy8g
bm8gb3duZXJzaGlwDQotDQotICAgIC8qKiBAaW50ZXJuYWwgKi8NCi0gICAgY29uc3QgQ3VycmVu
Y3lTeW1ib2xzKiBjdXJyZW5jeVN5bWJvbHMgPSBudWxscHRyOyAgLy8gbm8gb3duZXJzaGlwDQot
DQotICAgIC8qKiBAaW50ZXJuYWwgKi8NCi0gICAgaW50MzJfdCB0aHJlc2hvbGQgPSBERUZBVUxU
X1RIUkVTSE9MRDsNCi0NCi0gICAgLyoqIEBpbnRlcm5hbCAqLw0KLSAgICBMb2NhbGUgbG9jYWxl
Ow0KLQ0KLSAgICAvLyBOT1RFOiBVc2VzIGRlZmF1bHQgY29weSBhbmQgbW92ZSBjb25zdHJ1Y3Rv
cnMuDQotDQotICAgIC8qKg0KLSAgICAgKiBDaGVjayBhbGwgbWVtYmVycyBmb3IgZXJyb3JzLg0K
LSAgICAgKiBAaW50ZXJuYWwNCi0gICAgICovDQotICAgIGJvb2wgY29weUVycm9yVG8oVUVycm9y
Q29kZSAmc3RhdHVzKSBjb25zdCB7DQotICAgICAgICByZXR1cm4gbm90YXRpb24uY29weUVycm9y
VG8oc3RhdHVzKSB8fCBwcmVjaXNpb24uY29weUVycm9yVG8oc3RhdHVzKSB8fA0KLSAgICAgICAg
ICAgICAgIHBhZGRlci5jb3B5RXJyb3JUbyhzdGF0dXMpIHx8IGludGVnZXJXaWR0aC5jb3B5RXJy
b3JUbyhzdGF0dXMpIHx8DQotICAgICAgICAgICAgICAgc3ltYm9scy5jb3B5RXJyb3JUbyhzdGF0
dXMpIHx8IHNjYWxlLmNvcHlFcnJvclRvKHN0YXR1cyk7DQotICAgIH0NCi19Ow0KLQ0KLX0gLy8g
bmFtZXNwYWNlIGltcGwNCi0NCi0vKioNCi0gKiBBbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBz
cGVjaWZ5aW5nIHNldHRpbmdzIHJlbGF0ZWQgdG8gbnVtYmVyIGZvcm1hdHRpbmcuIFRoaXMgY2xh
c3MgaXMgaW1wbGVtZW50ZWQgYnkNCi0gKiB7QGxpbmsgVW5sb2NhbGl6ZWROdW1iZXJGb3JtYXR0
ZXJ9IGFuZCB7QGxpbmsgTG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyfS4NCi0gKi8NCi10ZW1wbGF0
ZTx0eXBlbmFtZSBEZXJpdmVkPg0KLWNsYXNzIFVfSTE4Tl9BUEkgTnVtYmVyRm9ybWF0dGVyU2V0
dGluZ3Mgew0KLSAgcHVibGljOg0KLSAgICAvKioNCi0gICAgICogU3BlY2lmaWVzIHRoZSBub3Rh
dGlvbiBzdHlsZSAoc2ltcGxlLCBzY2llbnRpZmljLCBvciBjb21wYWN0KSBmb3IgcmVuZGVyaW5n
IG51bWJlcnMuDQotICAgICAqDQotICAgICAqIDx1bD4NCi0gICAgICogPGxpPlNpbXBsZSBub3Rh
dGlvbjogIjEyLDMwMCINCi0gICAgICogPGxpPlNjaWVudGlmaWMgbm90YXRpb246ICIxLjIzRTQi
DQotICAgICAqIDxsaT5Db21wYWN0IG5vdGF0aW9uOiAiMTJLIg0KLSAgICAgKiA8L3VsPg0KLSAg
ICAgKg0KLSAgICAgKiA8cD4NCi0gICAgICogQWxsIG5vdGF0aW9uIHN0eWxlcyB3aWxsIGJlIHBy
b3Blcmx5IGxvY2FsaXplZCB3aXRoIGxvY2FsZSBkYXRhLCBhbmQgYWxsIG5vdGF0aW9uIHN0eWxl
cyBhcmUgY29tcGF0aWJsZSB3aXRoDQotICAgICAqIHVuaXRzLCByb3VuZGluZyBwcmVjaXNpb25z
LCBhbmQgb3RoZXIgbnVtYmVyIGZvcm1hdHRlciBzZXR0aW5ncy4NCi0gICAgICoNCi0gICAgICog
PHA+DQotICAgICAqIFBhc3MgdGhpcyBtZXRob2QgdGhlIHJldHVybiB2YWx1ZSBvZiBhIHtAbGlu
ayBOb3RhdGlvbn0gZmFjdG9yeSBtZXRob2QuIEZvciBleGFtcGxlOg0KLSAgICAgKg0KLSAgICAg
KiA8cHJlPg0KLSAgICAgKiBOdW1iZXJGb3JtYXR0ZXI6OndpdGgoKS5ub3RhdGlvbihOb3RhdGlv
bjo6Y29tcGFjdFNob3J0KCkpDQotICAgICAqIDwvcHJlPg0KLSAgICAgKg0KLSAgICAgKiBUaGUg
ZGVmYXVsdCBpcyB0byB1c2Ugc2ltcGxlIG5vdGF0aW9uLg0KLSAgICAgKg0KLSAgICAgKiBAcGFy
YW0gbm90YXRpb24NCi0gICAgICogICAgICAgICAgICBUaGUgbm90YXRpb24gc3RyYXRlZ3kgdG8g
dXNlLg0KLSAgICAgKiBAcmV0dXJuIFRoZSBmbHVlbnQgY2hhaW4uDQotICAgICAqIEBzZWUgTm90
YXRpb24NCi0gICAgICogQGRyYWZ0IElDVSA2MA0KLSAgICAgKi8NCi0gICAgRGVyaXZlZCBub3Rh
dGlvbihjb25zdCBOb3RhdGlvbiAmbm90YXRpb24pIGNvbnN0ICY7DQotDQotICAgIC8qKg0KLSAg
ICAgKiBPdmVybG9hZCBvZiBub3RhdGlvbigpIGZvciB1c2Ugb24gYW4gcnZhbHVlIHJlZmVyZW5j
ZS4NCi0gICAgICoNCi0gICAgICogQHBhcmFtIG5vdGF0aW9uDQotICAgICAqICAgICAgICAgICAg
VGhlIG5vdGF0aW9uIHN0cmF0ZWd5IHRvIHVzZS4NCi0gICAgICogQHJldHVybiBUaGUgZmx1ZW50
IGNoYWluLg0KLSAgICAgKiBAc2VlICNub3RhdGlvbg0KLSAgICAgKiBAZHJhZnQgSUNVIDYyDQot
ICAgICAqLw0KLSAgICBEZXJpdmVkIG5vdGF0aW9uKGNvbnN0IE5vdGF0aW9uICZub3RhdGlvbikg
JiY7DQotDQotICAgIC8qKg0KLSAgICAgKiBTcGVjaWZpZXMgdGhlIHVuaXQgKHVuaXQgb2YgbWVh
c3VyZSwgY3VycmVuY3ksIG9yIHBlcmNlbnQpIHRvIGFzc29jaWF0ZSB3aXRoIHJlbmRlcmVkIG51
bWJlcnMuDQotICAgICAqDQotICAgICAqIDx1bD4NCi0gICAgICogPGxpPlVuaXQgb2YgbWVhc3Vy
ZTogIjEyLjMgbWV0ZXJzIg0KLSAgICAgKiA8bGk+Q3VycmVuY3k6ICIkMTIuMzAiDQotICAgICAq
IDxsaT5QZXJjZW50OiAiMTIuMyUiDQotICAgICAqIDwvdWw+DQotICAgICAqDQotICAgICAqIEFs
bCB1bml0cyB3aWxsIGJlIHByb3Blcmx5IGxvY2FsaXplZCB3aXRoIGxvY2FsZSBkYXRhLCBhbmQg
YWxsIHVuaXRzIGFyZSBjb21wYXRpYmxlIHdpdGggbm90YXRpb24gc3R5bGVzLA0KLSAgICAgKiBy
b3VuZGluZyBwcmVjaXNpb25zLCBhbmQgb3RoZXIgbnVtYmVyIGZvcm1hdHRlciBzZXR0aW5ncy4N
Ci0gICAgICoNCi0gICAgICogUGFzcyB0aGlzIG1ldGhvZCBhbnkgaW5zdGFuY2Ugb2Yge0BsaW5r
IE1lYXN1cmVVbml0fS4gRm9yIHVuaXRzIG9mIG1lYXN1cmUgKHdoaWNoIG9mdGVuIGludm9sdmUg
dGhlDQotICAgICAqIGZhY3RvcnkgbWV0aG9kcyB0aGF0IHJldHVybiBhIHBvaW50ZXIpOg0KLSAg
ICAgKg0KLSAgICAgKiA8cHJlPg0KLSAgICAgKiBOdW1iZXJGb3JtYXR0ZXI6OndpdGgoKS5hZG9w
dFVuaXQoTWVhc3VyZVVuaXQ6OmNyZWF0ZU1ldGVyKHN0YXR1cykpDQotICAgICAqIDwvcHJlPg0K
LSAgICAgKg0KLSAgICAgKiBDdXJyZW5jeToNCi0gICAgICoNCi0gICAgICogPHByZT4NCi0gICAg
ICogTnVtYmVyRm9ybWF0dGVyOjp3aXRoKCkudW5pdChDdXJyZW5jeVVuaXQodSJVU0QiLCBzdGF0
dXMpKQ0KLSAgICAgKiA8L3ByZT4NCi0gICAgICoNCi0gICAgICogUGVyY2VudDoNCi0gICAgICoN
Ci0gICAgICogPHByZT4NCi0gICAgICogTnVtYmVyRm9ybWF0dGVyOjp3aXRoKCkudW5pdChOb1Vu
aXQucGVyY2VudCgpKQ0KLSAgICAgKiA8L3ByZT4NCi0gICAgICoNCi0gICAgICogU2VlIHtAbGlu
ayAjcGVyVW5pdH0gZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBmb3JtYXQgc3RyaW5ncyBsaWtl
ICI1IG1ldGVycyBwZXIgc2Vjb25kIi4NCi0gICAgICoNCi0gICAgICogVGhlIGRlZmF1bHQgaXMg
dG8gcmVuZGVyIHdpdGhvdXQgdW5pdHMgKGVxdWl2YWxlbnQgdG8gTm9Vbml0LmJhc2UoKSkuDQot
ICAgICAqDQotICAgICAqIEBwYXJhbSB1bml0DQotICAgICAqICAgICAgICAgICAgVGhlIHVuaXQg
dG8gcmVuZGVyLg0KLSAgICAgKiBAcmV0dXJuIFRoZSBmbHVlbnQgY2hhaW4uDQotICAgICAqIEBz
ZWUgTWVhc3VyZVVuaXQNCi0gICAgICogQHNlZSBDdXJyZW5jeQ0KLSAgICAgKiBAc2VlIE5vVW5p
dA0KLSAgICAgKiBAc2VlICNwZXJVbml0DQotICAgICAqIEBkcmFmdCBJQ1UgNjANCi0gICAgICov
DQotICAgIERlcml2ZWQgdW5pdChjb25zdCBpY3U6Ok1lYXN1cmVVbml0ICZ1bml0KSBjb25zdCAm
Ow0KLQ0KLSAgICAvKioNCi0gICAgICogT3ZlcmxvYWQgb2YgdW5pdCgpIGZvciB1c2Ugb24gYW4g
cnZhbHVlIHJlZmVyZW5jZS4NCi0gICAgICoNCi0gICAgICogQHBhcmFtIHVuaXQNCi0gICAgICog
ICAgICAgICAgICBUaGUgdW5pdCB0byByZW5kZXIuDQotICAgICAqIEByZXR1cm4gVGhlIGZsdWVu
dCBjaGFpbi4NCi0gICAgICogQHNlZSAjdW5pdA0KLSAgICAgKiBAZHJhZnQgSUNVIDYyDQotICAg
ICAqLw0KLSAgICBEZXJpdmVkIHVuaXQoY29uc3QgaWN1OjpNZWFzdXJlVW5pdCAmdW5pdCkgJiY7
DQotDQotICAgIC8qKg0KLSAgICAgKiBMaWtlIHVuaXQoKSwgYnV0IHRha2VzIG93bmVyc2hpcCBv
ZiBhIHBvaW50ZXIuICBDb252ZW5pZW50IGZvciB1c2Ugd2l0aCB0aGUgTWVhc3VyZUZvcm1hdCBm
YWN0b3J5DQotICAgICAqIG1ldGhvZHMsIHdoaWNoIHJldHVybiBwb2ludGVycyB0aGF0IG5lZWQg
b3duZXJzaGlwLiAgRXhhbXBsZToNCi0gICAgICoNCi0gICAgICogPHByZT4NCi0gICAgICogTnVt
YmVyRm9ybWF0dGVyOjp3aXRoKCkuYWRvcHRVbml0KE1lYXN1cmVVbml0OjpjcmVhdGVNZXRlcihz
dGF0dXMpKQ0KLSAgICAgKiA8L3ByZT4NCi0gICAgICoNCi0gICAgICogQHBhcmFtIHVuaXQNCi0g
ICAgICogICAgICAgICAgICBUaGUgdW5pdCB0byByZW5kZXIuDQotICAgICAqIEByZXR1cm4gVGhl
IGZsdWVudCBjaGFpbi4NCi0gICAgICogQHNlZSAjdW5pdA0KLSAgICAgKiBAc2VlIE1lYXN1cmVV
bml0DQotICAgICAqIEBkcmFmdCBJQ1UgNjANCi0gICAgICovDQotICAgIERlcml2ZWQgYWRvcHRV
bml0KGljdTo6TWVhc3VyZVVuaXQgKnVuaXQpIGNvbnN0ICY7DQotDQotICAgIC8qKg0KLSAgICAg
KiBPdmVybG9hZCBvZiBhZG9wdFVuaXQoKSBmb3IgdXNlIG9uIGFuIHJ2YWx1ZSByZWZlcmVuY2Uu
DQotICAgICAqDQotICAgICAqIEBwYXJhbSB1bml0DQotICAgICAqICAgICAgICAgICAgVGhlIHVu
aXQgdG8gcmVuZGVyLg0KLSAgICAgKiBAcmV0dXJuIFRoZSBmbHVlbnQgY2hhaW4uDQotICAgICAq
IEBzZWUgI2Fkb3B0VW5pdA0KLSAgICAgKiBAZHJhZnQgSUNVIDYyDQotICAgICAqLw0KLSAgICBE
ZXJpdmVkIGFkb3B0VW5pdChpY3U6Ok1lYXN1cmVVbml0ICp1bml0KSAmJjsNCi0NCi0gICAgLyoq
DQotICAgICAqIFNldHMgYSB1bml0IHRvIGJlIHVzZWQgaW4gdGhlIGRlbm9taW5hdG9yLiBGb3Ig
ZXhhbXBsZSwgdG8gZm9ybWF0ICIzIG0vcyIsIHBhc3MgTUVURVIgdG8gdGhlIHVuaXQgYW5kIFNF
Q09ORCB0bw0KLSAgICAgKiB0aGUgcGVyVW5pdC4NCi0gICAgICoNCi0gICAgICogUGFzcyB0aGlz
IG1ldGhvZCBhbnkgaW5zdGFuY2Ugb2Yge0BsaW5rIE1lYXN1cmVVbml0fS4gIFNpbmNlIE1lYXN1
cmVVbml0IGZhY3RvcnkgbWV0aG9kcyByZXR1cm4gcG9pbnRlcnMsIHRoZQ0KLSAgICAgKiB7QGxp
bmsgI2Fkb3B0UGVyVW5pdH0gdmVyc2lvbiBvZiB0aGlzIG1ldGhvZCBpcyBvZnRlbiBtb3JlIHVz
ZWZ1bC4NCi0gICAgICoNCi0gICAgICogVGhlIGRlZmF1bHQgaXMgbm90IHRvIGRpc3BsYXkgYW55
IHVuaXQgaW4gdGhlIGRlbm9taW5hdG9yLg0KLSAgICAgKg0KLSAgICAgKiBJZiBhIHBlci11bml0
IGlzIHNwZWNpZmllZCB3aXRob3V0IGEgcHJpbWFyeSB1bml0IHZpYSB7QGxpbmsgI3VuaXR9LCB0
aGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkLg0KLSAgICAgKg0KLSAgICAgKiBAcGFyYW0gcGVyVW5p
dA0KLSAgICAgKiAgICAgICAgICAgIFRoZSB1bml0IHRvIHJlbmRlciBpbiB0aGUgZGVub21pbmF0
b3IuDQotICAgICAqIEByZXR1cm4gVGhlIGZsdWVudCBjaGFpbg0KLSAgICAgKiBAc2VlICN1bml0
DQotICAgICAqIEBkcmFmdCBJQ1UgNjENCi0gICAgICovDQotICAgIERlcml2ZWQgcGVyVW5pdChj
b25zdCBpY3U6Ok1lYXN1cmVVbml0ICZwZXJVbml0KSBjb25zdCAmOw0KLQ0KLSAgICAvKioNCi0g
ICAgICogT3ZlcmxvYWQgb2YgcGVyVW5pdCgpIGZvciB1c2Ugb24gYW4gcnZhbHVlIHJlZmVyZW5j
ZS4NCi0gICAgICoNCi0gICAgICogQHBhcmFtIHBlclVuaXQNCi0gICAgICogICAgICAgICAgICBU
aGUgdW5pdCB0byByZW5kZXIgaW4gdGhlIGRlbm9taW5hdG9yLg0KLSAgICAgKiBAcmV0dXJuIFRo
ZSBmbHVlbnQgY2hhaW4uDQotICAgICAqIEBzZWUgI3BlclVuaXQNCi0gICAgICogQGRyYWZ0IElD
VSA2Mg0KLSAgICAgKi8NCi0gICAgRGVyaXZlZCBwZXJVbml0KGNvbnN0IGljdTo6TWVhc3VyZVVu
aXQgJnBlclVuaXQpICYmOw0KLQ0KLSAgICAvKioNCi0gICAgICogTGlrZSBwZXJVbml0KCksIGJ1
dCB0YWtlcyBvd25lcnNoaXAgb2YgYSBwb2ludGVyLiAgQ29udmVuaWVudCBmb3IgdXNlIHdpdGgg
dGhlIE1lYXN1cmVGb3JtYXQgZmFjdG9yeQ0KLSAgICAgKiBtZXRob2RzLCB3aGljaCByZXR1cm4g
cG9pbnRlcnMgdGhhdCBuZWVkIG93bmVyc2hpcC4gIEV4YW1wbGU6DQotICAgICAqDQotICAgICAq
IDxwcmU+DQotICAgICAqIE51bWJlckZvcm1hdHRlcjo6d2l0aCgpDQotICAgICAqICAgICAgLmFk
b3B0VW5pdChNZWFzdXJlVW5pdDo6Y3JlYXRlTWV0ZXIoc3RhdHVzKSkNCi0gICAgICogICAgICAu
YWRvcHRQZXJVbml0KE1lYXN1cmVVbml0OjpjcmVhdGVTZWNvbmQoc3RhdHVzKSkNCi0gICAgICog
PC9wcmU+DQotICAgICAqDQotICAgICAqIEBwYXJhbSBwZXJVbml0DQotICAgICAqICAgICAgICAg
ICAgVGhlIHVuaXQgdG8gcmVuZGVyIGluIHRoZSBkZW5vbWluYXRvci4NCi0gICAgICogQHJldHVy
biBUaGUgZmx1ZW50IGNoYWluLg0KLSAgICAgKiBAc2VlICNwZXJVbml0DQotICAgICAqIEBzZWUg
TWVhc3VyZVVuaXQNCi0gICAgICogQGRyYWZ0IElDVSA2MQ0KLSAgICAgKi8NCi0gICAgRGVyaXZl
ZCBhZG9wdFBlclVuaXQoaWN1OjpNZWFzdXJlVW5pdCAqcGVyVW5pdCkgY29uc3QgJjsNCi0NCi0g
ICAgLyoqDQotICAgICAqIE92ZXJsb2FkIG9mIGFkb3B0UGVyVW5pdCgpIGZvciB1c2Ugb24gYW4g
cnZhbHVlIHJlZmVyZW5jZS4NCi0gICAgICoNCi0gICAgICogQHBhcmFtIHBlclVuaXQNCi0gICAg
ICogICAgICAgICAgICBUaGUgdW5pdCB0byByZW5kZXIgaW4gdGhlIGRlbm9taW5hdG9yLg0KLSAg
ICAgKiBAcmV0dXJuIFRoZSBmbHVlbnQgY2hhaW4uDQotICAgICAqIEBzZWUgI2Fkb3B0UGVyVW5p
dA0KLSAgICAgKiBAZHJhZnQgSUNVIDYyDQotICAgICAqLw0KLSAgICBEZXJpdmVkIGFkb3B0UGVy
VW5pdChpY3U6Ok1lYXN1cmVVbml0ICpwZXJVbml0KSAmJjsNCi0NCi0gICAgLyoqDQotICAgICAq
IFNwZWNpZmllcyB0aGUgcm91bmRpbmcgcHJlY2lzaW9uIHRvIHVzZSB3aGVuIGZvcm1hdHRpbmcg
bnVtYmVycy4NCi0gICAgICoNCi0gICAgICogPHVsPg0KLSAgICAgKiA8bGk+Um91bmQgdG8gMyBk
ZWNpbWFsIHBsYWNlczogIjMuMTQyIg0KLSAgICAgKiA8bGk+Um91bmQgdG8gMyBzaWduaWZpY2Fu
dCBmaWd1cmVzOiAiMy4xNCINCi0gICAgICogPGxpPlJvdW5kIHRvIHRoZSBjbG9zZXN0IG5pY2tl
bDogIjMuMTUiDQotICAgICAqIDxsaT5EbyBub3QgcGVyZm9ybSByb3VuZGluZzogIjMuMTQxNTky
Ni4uLiINCi0gICAgICogPC91bD4NCi0gICAgICoNCi0gICAgICogPHA+DQotICAgICAqIFBhc3Mg
dGhpcyBtZXRob2QgdGhlIHJldHVybiB2YWx1ZSBvZiBvbmUgb2YgdGhlIGZhY3RvcnkgbWV0aG9k
cyBvbiB7QGxpbmsgUHJlY2lzaW9ufS4gRm9yIGV4YW1wbGU6DQotICAgICAqDQotICAgICAqIDxw
cmU+DQotICAgICAqIE51bWJlckZvcm1hdHRlcjo6d2l0aCgpLnByZWNpc2lvbihQcmVjaXNpb246
OmZpeGVkRnJhY3Rpb24oMikpDQotICAgICAqIDwvcHJlPg0KLSAgICAgKg0KLSAgICAgKiA8cD4N
Ci0gICAgICogSW4gbW9zdCBjYXNlcywgdGhlIGRlZmF1bHQgcm91bmRpbmcgc3RyYXRlZ3kgaXMg
dG8gcm91bmQgdG8gNiBmcmFjdGlvbiBwbGFjZXM7IGkuZS4sDQotICAgICAqIDxjb2RlPlByZWNp
c2lvbi5tYXhGcmFjdGlvbig2KTwvY29kZT4uIFRoZSBleGNlcHRpb25zIGFyZSBpZiBjb21wYWN0
IG5vdGF0aW9uIGlzIGJlaW5nIHVzZWQsIHRoZW4gdGhlIGNvbXBhY3QNCi0gICAgICogbm90YXRp
b24gcm91bmRpbmcgc3RyYXRlZ3kgaXMgdXNlZCAoc2VlIHtAbGluayBOb3RhdGlvbiNjb21wYWN0
U2hvcnR9IGZvciBkZXRhaWxzKSwgb3IgaWYgdGhlIHVuaXQgaXMgYSBjdXJyZW5jeSwNCi0gICAg
ICogdGhlbiBzdGFuZGFyZCBjdXJyZW5jeSByb3VuZGluZyBpcyB1c2VkLCB3aGljaCB2YXJpZXMg
ZnJvbSBjdXJyZW5jeSB0byBjdXJyZW5jeSAoc2VlIHtAbGluayBQcmVjaXNpb24jY3VycmVuY3l9
IGZvcg0KLSAgICAgKiBkZXRhaWxzKS4NCi0gICAgICoNCi0gICAgICogQHBhcmFtIHByZWNpc2lv
bg0KLSAgICAgKiAgICAgICAgICAgIFRoZSByb3VuZGluZyBwcmVjaXNpb24gdG8gdXNlLg0KLSAg
ICAgKiBAcmV0dXJuIFRoZSBmbHVlbnQgY2hhaW4uDQotICAgICAqIEBzZWUgUHJlY2lzaW9uDQot
ICAgICAqIEBkcmFmdCBJQ1UgNjINCi0gICAgICovDQotICAgIERlcml2ZWQgcHJlY2lzaW9uKGNv
bnN0IFByZWNpc2lvbiYgcHJlY2lzaW9uKSBjb25zdCAmOw0KLQ0KLSAgICAvKioNCi0gICAgICog
T3ZlcmxvYWQgb2YgcHJlY2lzaW9uKCkgZm9yIHVzZSBvbiBhbiBydmFsdWUgcmVmZXJlbmNlLg0K
LSAgICAgKg0KLSAgICAgKiBAcGFyYW0gcHJlY2lzaW9uDQotICAgICAqICAgICAgICAgICAgVGhl
IHJvdW5kaW5nIHByZWNpc2lvbiB0byB1c2UuDQotICAgICAqIEByZXR1cm4gVGhlIGZsdWVudCBj
aGFpbi4NCi0gICAgICogQHNlZSAjcHJlY2lzaW9uDQotICAgICAqIEBkcmFmdCBJQ1UgNjINCi0g
ICAgICovDQotICAgIERlcml2ZWQgcHJlY2lzaW9uKGNvbnN0IFByZWNpc2lvbiYgcHJlY2lzaW9u
KSAmJjsNCi0NCi0jaWZuZGVmIFVfSElERV9ERVBSRUNBVEVEX0FQSQ0KLSAgICAvLyBDb21wYXRp
YmlsaXR5IG1ldGhvZCB0aGF0IHdpbGwgYmUgcmVtb3ZlZCBpbiBJQ1UgNjQuDQotICAgIC8vIFVz
ZSBwcmVjaXNpb24oKSBpbnN0ZWFkLg0KLSAgICAvLyBTZWUgaHR0cDovL2J1Z3MuaWN1LXByb2pl
Y3Qub3JnL3RyYWMvdGlja2V0LzEzNzQ2DQotICAgIC8qKiBAZGVwcmVjYXRlZCBJQ1UgNjIgKi8N
Ci0gICAgRGVyaXZlZCByb3VuZGluZyhjb25zdCBSb3VuZGVyJiByb3VuZGVyKSBjb25zdCAmIHsN
Ci0gICAgICAgIHJldHVybiBwcmVjaXNpb24ocm91bmRlcik7DQotICAgIH0NCi0jZW5kaWYgIC8q
IFVfSElERV9ERVBSRUNBVEVEX0FQSSAqLw0KLQ0KLSAgICAvKioNCi0gICAgICogU3BlY2lmaWVz
IGhvdyB0byBkZXRlcm1pbmUgdGhlIGRpcmVjdGlvbiB0byByb3VuZCBhIG51bWJlciB3aGVuIGl0
IGhhcyBtb3JlIGRpZ2l0cyB0aGFuIGZpdCBpbiB0aGUNCi0gICAgICogZGVzaXJlZCBwcmVjaXNp
b24uICBXaGVuIGZvcm1hdHRpbmcgMS4yMzU6DQotICAgICAqDQotICAgICAqIDx1bD4NCi0gICAg
ICogPGxpPkNlaWxpbmcgcm91bmRpbmcgbW9kZSB3aXRoIGludGVnZXIgcHJlY2lzaW9uOiAiMiIN
Ci0gICAgICogPGxpPkhhbGYtZG93biByb3VuZGluZyBtb2RlIHdpdGggMiBmaXhlZCBmcmFjdGlv
biBkaWdpdHM6ICIxLjIzIg0KLSAgICAgKiA8bGk+SGFsZi11cCByb3VuZGluZyBtb2RlIHdpdGgg
MiBmaXhlZCBmcmFjdGlvbiBkaWdpdHM6ICIxLjI0Ig0KLSAgICAgKiA8L3VsPg0KLSAgICAgKg0K
LSAgICAgKiBUaGUgZGVmYXVsdCBpcyBIQUxGX0VWRU4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9u
IHJvdW5kaW5nIG1vZGUsIHNlZSB0aGUgSUNVIHVzZXJndWlkZSBoZXJlOg0KLSAgICAgKg0KLSAg
ICAgKiBodHRwOi8vdXNlcmd1aWRlLmljdS1wcm9qZWN0Lm9yZy9mb3JtYXRwYXJzZS9udW1iZXJz
L3JvdW5kaW5nLW1vZGVzDQotICAgICAqDQotICAgICAqIEBwYXJhbSByb3VuZGluZ01vZGUgVGhl
IHJvdW5kaW5nIG1vZGUgdG8gdXNlLg0KLSAgICAgKiBAcmV0dXJuIFRoZSBmbHVlbnQgY2hhaW4u
DQotICAgICAqIEBkcmFmdCBJQ1UgNjINCi0gICAgICovDQotICAgIERlcml2ZWQgcm91bmRpbmdN
b2RlKFVOdW1iZXJGb3JtYXRSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKSBjb25zdCAmOw0KLQ0K
LSAgICAvKioNCi0gICAgICogT3ZlcmxvYWQgb2Ygcm91bmRpbmdNb2RlKCkgZm9yIHVzZSBvbiBh
biBydmFsdWUgcmVmZXJlbmNlLg0KLSAgICAgKg0KLSAgICAgKiBAcGFyYW0gcm91bmRpbmdNb2Rl
IFRoZSByb3VuZGluZyBtb2RlIHRvIHVzZS4NCi0gICAgICogQHJldHVybiBUaGUgZmx1ZW50IGNo
YWluLg0KLSAgICAgKiBAc2VlICNyb3VuZGluZ01vZGUNCi0gICAgICogQGRyYWZ0IElDVSA2Mg0K
LSAgICAgKi8NCi0gICAgRGVyaXZlZCByb3VuZGluZ01vZGUoVU51bWJlckZvcm1hdFJvdW5kaW5n
TW9kZSByb3VuZGluZ01vZGUpICYmOw0KLQ0KLSAgICAvKioNCi0gICAgICogU3BlY2lmaWVzIHRo
ZSBncm91cGluZyBzdHJhdGVneSB0byB1c2Ugd2hlbiBmb3JtYXR0aW5nIG51bWJlcnMuDQotICAg
ICAqDQotICAgICAqIDx1bD4NCi0gICAgICogPGxpPkRlZmF1bHQgZ3JvdXBpbmc6ICIxMiwzMDAi
IGFuZCAiMSwyMzAiDQotICAgICAqIDxsaT5Hcm91cGluZyB3aXRoIGF0IGxlYXN0IDIgZGlnaXRz
OiAiMTIsMzAwIiBhbmQgIjEyMzAiDQotICAgICAqIDxsaT5ObyBncm91cGluZzogIjEyMzAwIiBh
bmQgIjEyMzAiDQotICAgICAqIDwvdWw+DQotICAgICAqDQotICAgICAqIDxwPg0KLSAgICAgKiBU
aGUgZXhhY3QgZ3JvdXBpbmcgd2lkdGhzIHdpbGwgYmUgY2hvc2VuIGJhc2VkIG9uIHRoZSBsb2Nh
bGUuDQotICAgICAqDQotICAgICAqIDxwPg0KLSAgICAgKiBQYXNzIHRoaXMgbWV0aG9kIGFuIGVs
ZW1lbnQgZnJvbSB0aGUge0BsaW5rIFVHcm91cGluZ1N0cmF0ZWd5fSBlbnVtLiBGb3IgZXhhbXBs
ZToNCi0gICAgICoNCi0gICAgICogPHByZT4NCi0gICAgICogTnVtYmVyRm9ybWF0dGVyOjp3aXRo
KCkuZ3JvdXBpbmcoVU5VTV9HUk9VUElOR19NSU4yKQ0KLSAgICAgKiA8L3ByZT4NCi0gICAgICoN
Ci0gICAgICogVGhlIGRlZmF1bHQgaXMgdG8gcGVyZm9ybSBncm91cGluZyBhY2NvcmRpbmcgdG8g
bG9jYWxlIGRhdGE7IG1vc3QgbG9jYWxlcywgYnV0IG5vdCBhbGwgbG9jYWxlcywNCi0gICAgICog
ZW5hYmxlIGl0IGJ5IGRlZmF1bHQuDQotICAgICAqDQotICAgICAqIEBwYXJhbSBzdHJhdGVneQ0K
LSAgICAgKiAgICAgICAgICAgIFRoZSBncm91cGluZyBzdHJhdGVneSB0byB1c2UuDQotICAgICAq
IEByZXR1cm4gVGhlIGZsdWVudCBjaGFpbi4NCi0gICAgICogQGRyYWZ0IElDVSA2MQ0KLSAgICAg
Ki8NCi0gICAgRGVyaXZlZCBncm91cGluZyhVR3JvdXBpbmdTdHJhdGVneSBzdHJhdGVneSkgY29u
c3QgJjsNCi0NCi0gICAgLyoqDQotICAgICAqIE92ZXJsb2FkIG9mIGdyb3VwaW5nKCkgZm9yIHVz
ZSBvbiBhbiBydmFsdWUgcmVmZXJlbmNlLg0KLSAgICAgKg0KLSAgICAgKiBAcGFyYW0gc3RyYXRl
Z3kNCi0gICAgICogICAgICAgICAgICBUaGUgZ3JvdXBpbmcgc3RyYXRlZ3kgdG8gdXNlLg0KLSAg
ICAgKiBAcmV0dXJuIFRoZSBmbHVlbnQgY2hhaW4uDQotICAgICAqIEBzZWUgI2dyb3VwaW5nDQot
ICAgICAqIEBwcm92aXNpb25hbCBUaGlzIEFQSSBtaWdodCBjaGFuZ2Ugb3IgYmUgcmVtb3ZlZCBp
biBhIGZ1dHVyZSByZWxlYXNlLg0KLSAgICAgKiBAZHJhZnQgSUNVIDYyDQotICAgICAqLw0KLSAg
ICBEZXJpdmVkIGdyb3VwaW5nKFVHcm91cGluZ1N0cmF0ZWd5IHN0cmF0ZWd5KSAmJjsNCi0NCi0g
ICAgLyoqDQotICAgICAqIFNwZWNpZmllcyB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBudW1iZXIg
b2YgZGlnaXRzIHRvIHJlbmRlciBiZWZvcmUgdGhlIGRlY2ltYWwgbWFyay4NCi0gICAgICoNCi0g
ICAgICogPHVsPg0KLSAgICAgKiA8bGk+WmVybyBtaW5pbXVtIGludGVnZXIgZGlnaXRzOiAiLjA4
Ig0KLSAgICAgKiA8bGk+T25lIG1pbmltdW0gaW50ZWdlciBkaWdpdDogIjAuMDgiDQotICAgICAq
IDxsaT5Ud28gbWluaW11bSBpbnRlZ2VyIGRpZ2l0czogIjAwLjA4Ig0KLSAgICAgKiA8L3VsPg0K
LSAgICAgKg0KLSAgICAgKiA8cD4NCi0gICAgICogUGFzcyB0aGlzIG1ldGhvZCB0aGUgcmV0dXJu
IHZhbHVlIG9mIHtAbGluayBJbnRlZ2VyV2lkdGgjemVyb0ZpbGxUbyhpbnQpfS4gRm9yIGV4YW1w
bGU6DQotICAgICAqDQotICAgICAqIDxwcmU+DQotICAgICAqIE51bWJlckZvcm1hdHRlcjo6d2l0
aCgpLmludGVnZXJXaWR0aChJbnRlZ2VyV2lkdGg6Onplcm9GaWxsVG8oMikpDQotICAgICAqIDwv
cHJlPg0KLSAgICAgKg0KLSAgICAgKiBUaGUgZGVmYXVsdCBpcyB0byBoYXZlIG9uZSBtaW5pbXVt
IGludGVnZXIgZGlnaXQuDQotICAgICAqDQotICAgICAqIEBwYXJhbSBzdHlsZQ0KLSAgICAgKiAg
ICAgICAgICAgIFRoZSBpbnRlZ2VyIHdpZHRoIHRvIHVzZS4NCi0gICAgICogQHJldHVybiBUaGUg
Zmx1ZW50IGNoYWluLg0KLSAgICAgKiBAc2VlIEludGVnZXJXaWR0aA0KLSAgICAgKiBAZHJhZnQg
SUNVIDYwDQotICAgICAqLw0KLSAgICBEZXJpdmVkIGludGVnZXJXaWR0aChjb25zdCBJbnRlZ2Vy
V2lkdGggJnN0eWxlKSBjb25zdCAmOw0KLQ0KLSAgICAvKioNCi0gICAgICogT3ZlcmxvYWQgb2Yg
aW50ZWdlcldpZHRoKCkgZm9yIHVzZSBvbiBhbiBydmFsdWUgcmVmZXJlbmNlLg0KLSAgICAgKg0K
LSAgICAgKiBAcGFyYW0gc3R5bGUNCi0gICAgICogICAgICAgICAgICBUaGUgaW50ZWdlciB3aWR0
aCB0byB1c2UuDQotICAgICAqIEByZXR1cm4gVGhlIGZsdWVudCBjaGFpbi4NCi0gICAgICogQHNl
ZSAjaW50ZWdlcldpZHRoDQotICAgICAqIEBkcmFmdCBJQ1UgNjINCi0gICAgICovDQotICAgIERl
cml2ZWQgaW50ZWdlcldpZHRoKGNvbnN0IEludGVnZXJXaWR0aCAmc3R5bGUpICYmOw0KLQ0KLSAg
ICAvKioNCi0gICAgICogU3BlY2lmaWVzIHRoZSBzeW1ib2xzIChkZWNpbWFsIHNlcGFyYXRvciwg
Z3JvdXBpbmcgc2VwYXJhdG9yLCBwZXJjZW50IHNpZ24sIG51bWVyYWxzLCBldGMuKSB0byB1c2Ug
d2hlbiByZW5kZXJpbmcNCi0gICAgICogbnVtYmVycy4NCi0gICAgICoNCi0gICAgICogPHVsPg0K
LSAgICAgKiA8bGk+PGVtPmVuX1VTPC9lbT4gc3ltYm9sczogIjEyLDM0NS42NyINCi0gICAgICog
PGxpPjxlbT5mcl9GUjwvZW0+IHN5bWJvbHM6ICIxMiZuYnNwOzM0NSw2NyINCi0gICAgICogPGxp
PjxlbT5kZV9DSDwvZW0+IHN5bWJvbHM6ICIxMuKAmTM0NS42NyINCi0gICAgICogPGxpPjxlbT5t
eV9NWTwvZW0+IHN5bWJvbHM6ICLhgYHhgYIs4YGD4YGE4YGFLuGBhuGBhyINCi0gICAgICogPC91
bD4NCi0gICAgICoNCi0gICAgICogPHA+DQotICAgICAqIFBhc3MgdGhpcyBtZXRob2QgYW4gaW5z
dGFuY2Ugb2Yge0BsaW5rIERlY2ltYWxGb3JtYXRTeW1ib2xzfS4gRm9yIGV4YW1wbGU6DQotICAg
ICAqDQotICAgICAqIDxwcmU+DQotICAgICAqIE51bWJlckZvcm1hdHRlcjo6d2l0aCgpLnN5bWJv
bHMoRGVjaW1hbEZvcm1hdFN5bWJvbHMoTG9jYWxlKCJkZV9DSCIpLCBzdGF0dXMpKQ0KLSAgICAg
KiA8L3ByZT4NCi0gICAgICoNCi0gICAgICogPHA+DQotICAgICAqIDxzdHJvbmc+Tm90ZTo8L3N0
cm9uZz4gRGVjaW1hbEZvcm1hdFN5bWJvbHMgYXV0b21hdGljYWxseSBjaG9vc2VzIHRoZSBiZXN0
IG51bWJlcmluZyBzeXN0ZW0gYmFzZWQgb24gdGhlIGxvY2FsZS4NCi0gICAgICogSW4gdGhlIGV4
YW1wbGVzIGFib3ZlLCB0aGUgZmlyc3QgdGhyZWUgYXJlIHVzaW5nIHRoZSBMYXRpbiBudW1iZXJp
bmcgc3lzdGVtLCBhbmQgdGhlIGZvdXJ0aCBpcyB1c2luZyB0aGUgTXlhbm1hcg0KLSAgICAgKiBu
dW1iZXJpbmcgc3lzdGVtLg0KLSAgICAgKg0KLSAgICAgKiA8cD4NCi0gICAgICogPHN0cm9uZz5O
b3RlOjwvc3Ryb25nPiBUaGUgaW5zdGFuY2Ugb2YgRGVjaW1hbEZvcm1hdFN5bWJvbHMgd2lsbCBi
ZSBjb3BpZWQ6IGNoYW5nZXMgbWFkZSB0byB0aGUgc3ltYm9scyBvYmplY3QNCi0gICAgICogYWZ0
ZXIgcGFzc2luZyBpdCBpbnRvIHRoZSBmbHVlbnQgY2hhaW4gd2lsbCBub3QgYmUgc2Vlbi4NCi0g
ICAgICoNCi0gICAgICogPHA+DQotICAgICAqIDxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gQ2FsbGlu
ZyB0aGlzIG1ldGhvZCB3aWxsIG92ZXJyaWRlIGFueSBwcmV2aW91c2x5IHNwZWNpZmllZCBEZWNp
bWFsRm9ybWF0U3ltYm9scw0KLSAgICAgKiBvciBOdW1iZXJpbmdTeXN0ZW0uDQotICAgICAqDQot
ICAgICAqIDxwPg0KLSAgICAgKiBUaGUgZGVmYXVsdCBpcyB0byBjaG9vc2UgdGhlIHN5bWJvbHMg
YmFzZWQgb24gdGhlIGxvY2FsZSBzcGVjaWZpZWQgaW4gdGhlIGZsdWVudCBjaGFpbi4NCi0gICAg
ICoNCi0gICAgICogQHBhcmFtIHN5bWJvbHMNCi0gICAgICogICAgICAgICAgICBUaGUgRGVjaW1h
bEZvcm1hdFN5bWJvbHMgdG8gdXNlLg0KLSAgICAgKiBAcmV0dXJuIFRoZSBmbHVlbnQgY2hhaW4u
DQotICAgICAqIEBzZWUgRGVjaW1hbEZvcm1hdFN5bWJvbHMNCi0gICAgICogQGRyYWZ0IElDVSA2
MA0KLSAgICAgKi8NCi0gICAgRGVyaXZlZCBzeW1ib2xzKGNvbnN0IERlY2ltYWxGb3JtYXRTeW1i
b2xzICZzeW1ib2xzKSBjb25zdCAmOw0KLQ0KLSAgICAvKioNCi0gICAgICogT3ZlcmxvYWQgb2Yg
c3ltYm9scygpIGZvciB1c2Ugb24gYW4gcnZhbHVlIHJlZmVyZW5jZS4NCi0gICAgICoNCi0gICAg
ICogQHBhcmFtIHN5bWJvbHMNCi0gICAgICogICAgICAgICAgICBUaGUgRGVjaW1hbEZvcm1hdFN5
bWJvbHMgdG8gdXNlLg0KLSAgICAgKiBAcmV0dXJuIFRoZSBmbHVlbnQgY2hhaW4uDQotICAgICAq
IEBzZWUgI3N5bWJvbHMNCi0gICAgICogQGRyYWZ0IElDVSA2Mg0KLSAgICAgKi8NCi0gICAgRGVy
aXZlZCBzeW1ib2xzKGNvbnN0IERlY2ltYWxGb3JtYXRTeW1ib2xzICZzeW1ib2xzKSAmJjsNCi0N
Ci0gICAgLyoqDQotICAgICAqIFNwZWNpZmllcyB0aGF0IHRoZSBnaXZlbiBudW1iZXJpbmcgc3lz
dGVtIHNob3VsZCBiZSB1c2VkIHdoZW4gZmV0Y2hpbmcgc3ltYm9scy4NCi0gICAgICoNCi0gICAg
ICogPHVsPg0KLSAgICAgKiA8bGk+TGF0aW4gbnVtYmVyaW5nIHN5c3RlbTogIjEyLDM0NSINCi0g
ICAgICogPGxpPk15YW5tYXIgbnVtYmVyaW5nIHN5c3RlbTogIuGBgeGBgizhgYPhgYThgYUiDQot
ICAgICAqIDxsaT5NYXRoIFNhbnMgQm9sZCBudW1iZXJpbmcgc3lzdGVtOiAi8J2frfCdn64s8J2f
r/Cdn7DwnZ+xIg0KLSAgICAgKiA8L3VsPg0KLSAgICAgKg0KLSAgICAgKiA8cD4NCi0gICAgICog
UGFzcyB0aGlzIG1ldGhvZCBhbiBpbnN0YW5jZSBvZiB7QGxpbmsgTnVtYmVyaW5nU3lzdGVtfS4g
Rm9yIGV4YW1wbGUsIHRvIGZvcmNlIHRoZSBsb2NhbGUgdG8gYWx3YXlzIHVzZSB0aGUgTGF0aW4N
Ci0gICAgICogYWxwaGFiZXQgbnVtYmVyaW5nIHN5c3RlbSAoQVNDSUkgZGlnaXRzKToNCi0gICAg
ICoNCi0gICAgICogPHByZT4NCi0gICAgICogTnVtYmVyRm9ybWF0dGVyOjp3aXRoKCkuYWRvcHRT
eW1ib2xzKE51bWJlcmluZ1N5c3RlbTo6Y3JlYXRlSW5zdGFuY2VCeU5hbWUoImxhdG4iLCBzdGF0
dXMpKQ0KLSAgICAgKiA8L3ByZT4NCi0gICAgICoNCi0gICAgICogPHA+DQotICAgICAqIDxzdHJv
bmc+Tm90ZTo8L3N0cm9uZz4gQ2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIG92ZXJyaWRlIGFueSBw
cmV2aW91c2x5IHNwZWNpZmllZCBEZWNpbWFsRm9ybWF0U3ltYm9scw0KLSAgICAgKiBvciBOdW1i
ZXJpbmdTeXN0ZW0uDQotICAgICAqDQotICAgICAqIDxwPg0KLSAgICAgKiBUaGUgZGVmYXVsdCBp
cyB0byBjaG9vc2UgdGhlIGJlc3QgbnVtYmVyaW5nIHN5c3RlbSBmb3IgdGhlIGxvY2FsZS4NCi0g
ICAgICoNCi0gICAgICogPHA+DQotICAgICAqIFRoaXMgbWV0aG9kIHRha2VzIG93bmVyc2hpcCBv
ZiBhIHBvaW50ZXIgaW4gb3JkZXIgdG8gd29yayBuaWNlbHkgd2l0aCB0aGUgTnVtYmVyaW5nU3lz
dGVtIGZhY3RvcnkgbWV0aG9kcy4NCi0gICAgICoNCi0gICAgICogQHBhcmFtIHN5bWJvbHMNCi0g
ICAgICogICAgICAgICAgICBUaGUgTnVtYmVyaW5nU3lzdGVtIHRvIHVzZS4NCi0gICAgICogQHJl
dHVybiBUaGUgZmx1ZW50IGNoYWluLg0KLSAgICAgKiBAc2VlIE51bWJlcmluZ1N5c3RlbQ0KLSAg
ICAgKiBAZHJhZnQgSUNVIDYwDQotICAgICAqLw0KLSAgICBEZXJpdmVkIGFkb3B0U3ltYm9scyhO
dW1iZXJpbmdTeXN0ZW0gKnN5bWJvbHMpIGNvbnN0ICY7DQotDQotICAgIC8qKg0KLSAgICAgKiBP
dmVybG9hZCBvZiBhZG9wdFN5bWJvbHMoKSBmb3IgdXNlIG9uIGFuIHJ2YWx1ZSByZWZlcmVuY2Uu
DQotICAgICAqDQotICAgICAqIEBwYXJhbSBzeW1ib2xzDQotICAgICAqICAgICAgICAgICAgVGhl
IE51bWJlcmluZ1N5c3RlbSB0byB1c2UuDQotICAgICAqIEByZXR1cm4gVGhlIGZsdWVudCBjaGFp
bi4NCi0gICAgICogQHNlZSAjYWRvcHRTeW1ib2xzDQotICAgICAqIEBkcmFmdCBJQ1UgNjINCi0g
ICAgICovDQotICAgIERlcml2ZWQgYWRvcHRTeW1ib2xzKE51bWJlcmluZ1N5c3RlbSAqc3ltYm9s
cykgJiY7DQotDQotICAgIC8qKg0KLSAgICAgKiBTZXRzIHRoZSB3aWR0aCBvZiB0aGUgdW5pdCAo
bWVhc3VyZSB1bml0IG9yIGN1cnJlbmN5KS4gIE1vc3QgY29tbW9uIHZhbHVlczoNCi0gICAgICoN
Ci0gICAgICogPHVsPg0KLSAgICAgKiA8bGk+U2hvcnQ6ICIkMTIuMDAiLCAiMTIgbSINCi0gICAg
ICogPGxpPklTTyBDb2RlOiAiVVNEIDEyLjAwIg0KLSAgICAgKiA8bGk+RnVsbCBuYW1lOiAiMTIu
MDAgVVMgZG9sbGFycyIsICIxMiBtZXRlcnMiDQotICAgICAqIDwvdWw+DQotICAgICAqDQotICAg
ICAqIDxwPg0KLSAgICAgKiBQYXNzIGFuIGVsZW1lbnQgZnJvbSB0aGUge0BsaW5rIFVOdW1iZXJV
bml0V2lkdGh9IGVudW0gdG8gdGhpcyBzZXR0ZXIuIEZvciBleGFtcGxlOg0KLSAgICAgKg0KLSAg
ICAgKiA8cHJlPg0KLSAgICAgKiBOdW1iZXJGb3JtYXR0ZXI6OndpdGgoKS51bml0V2lkdGgoVU51
bWJlclVuaXRXaWR0aDo6VU5VTV9VTklUX1dJRFRIX0ZVTExfTkFNRSkNCi0gICAgICogPC9wcmU+
DQotICAgICAqDQotICAgICAqIDxwPg0KLSAgICAgKiBUaGUgZGVmYXVsdCBpcyB0aGUgU0hPUlQg
d2lkdGguDQotICAgICAqDQotICAgICAqIEBwYXJhbSB3aWR0aA0KLSAgICAgKiAgICAgICAgICAg
IFRoZSB3aWR0aCB0byB1c2Ugd2hlbiByZW5kZXJpbmcgbnVtYmVycy4NCi0gICAgICogQHJldHVy
biBUaGUgZmx1ZW50IGNoYWluDQotICAgICAqIEBzZWUgVU51bWJlclVuaXRXaWR0aA0KLSAgICAg
KiBAZHJhZnQgSUNVIDYwDQotICAgICAqLw0KLSAgICBEZXJpdmVkIHVuaXRXaWR0aChVTnVtYmVy
VW5pdFdpZHRoIHdpZHRoKSBjb25zdCAmOw0KLQ0KLSAgICAvKioNCi0gICAgICogT3ZlcmxvYWQg
b2YgdW5pdFdpZHRoKCkgZm9yIHVzZSBvbiBhbiBydmFsdWUgcmVmZXJlbmNlLg0KLSAgICAgKg0K
LSAgICAgKiBAcGFyYW0gd2lkdGgNCi0gICAgICogICAgICAgICAgICBUaGUgd2lkdGggdG8gdXNl
IHdoZW4gcmVuZGVyaW5nIG51bWJlcnMuDQotICAgICAqIEByZXR1cm4gVGhlIGZsdWVudCBjaGFp
bi4NCi0gICAgICogQHNlZSAjdW5pdFdpZHRoDQotICAgICAqIEBkcmFmdCBJQ1UgNjINCi0gICAg
ICovDQotICAgIERlcml2ZWQgdW5pdFdpZHRoKFVOdW1iZXJVbml0V2lkdGggd2lkdGgpICYmOw0K
LQ0KLSAgICAvKioNCi0gICAgICogU2V0cyB0aGUgcGx1cy9taW51cyBzaWduIGRpc3BsYXkgc3Ry
YXRlZ3kuIE1vc3QgY29tbW9uIHZhbHVlczoNCi0gICAgICoNCi0gICAgICogPHVsPg0KLSAgICAg
KiA8bGk+QXV0bzogIjEyMyIsICItMTIzIg0KLSAgICAgKiA8bGk+QWx3YXlzOiAiKzEyMyIsICIt
MTIzIg0KLSAgICAgKiA8bGk+QWNjb3VudGluZzogIiQxMjMiLCAiKCQxMjMpIg0KLSAgICAgKiA8
L3VsPg0KLSAgICAgKg0KLSAgICAgKiA8cD4NCi0gICAgICogUGFzcyBhbiBlbGVtZW50IGZyb20g
dGhlIHtAbGluayBVTnVtYmVyU2lnbkRpc3BsYXl9IGVudW0gdG8gdGhpcyBzZXR0ZXIuIEZvciBl
eGFtcGxlOg0KLSAgICAgKg0KLSAgICAgKiA8cHJlPg0KLSAgICAgKiBOdW1iZXJGb3JtYXR0ZXI6
OndpdGgoKS5zaWduKFVOdW1iZXJTaWduRGlzcGxheTo6VU5VTV9TSUdOX0FMV0FZUykNCi0gICAg
ICogPC9wcmU+DQotICAgICAqDQotICAgICAqIDxwPg0KLSAgICAgKiBUaGUgZGVmYXVsdCBpcyBB
VVRPIHNpZ24gZGlzcGxheS4NCi0gICAgICoNCi0gICAgICogQHBhcmFtIHN0eWxlDQotICAgICAq
ICAgICAgICAgICAgVGhlIHNpZ24gZGlzcGxheSBzdHJhdGVneSB0byB1c2Ugd2hlbiByZW5kZXJp
bmcgbnVtYmVycy4NCi0gICAgICogQHJldHVybiBUaGUgZmx1ZW50IGNoYWluDQotICAgICAqIEBz
ZWUgVU51bWJlclNpZ25EaXNwbGF5DQotICAgICAqIEBkcmFmdCBJQ1UgNjANCi0gICAgICovDQot
ICAgIERlcml2ZWQgc2lnbihVTnVtYmVyU2lnbkRpc3BsYXkgc3R5bGUpIGNvbnN0ICY7DQotDQot
ICAgIC8qKg0KLSAgICAgKiBPdmVybG9hZCBvZiBzaWduKCkgZm9yIHVzZSBvbiBhbiBydmFsdWUg
cmVmZXJlbmNlLg0KLSAgICAgKg0KLSAgICAgKiBAcGFyYW0gc3R5bGUNCi0gICAgICogICAgICAg
ICAgICBUaGUgc2lnbiBkaXNwbGF5IHN0cmF0ZWd5IHRvIHVzZSB3aGVuIHJlbmRlcmluZyBudW1i
ZXJzLg0KLSAgICAgKiBAcmV0dXJuIFRoZSBmbHVlbnQgY2hhaW4uDQotICAgICAqIEBzZWUgI3Np
Z24NCi0gICAgICogQGRyYWZ0IElDVSA2Mg0KLSAgICAgKi8NCi0gICAgRGVyaXZlZCBzaWduKFVO
dW1iZXJTaWduRGlzcGxheSBzdHlsZSkgJiY7DQotDQotICAgIC8qKg0KLSAgICAgKiBTZXRzIHRo
ZSBkZWNpbWFsIHNlcGFyYXRvciBkaXNwbGF5IHN0cmF0ZWd5LiBUaGlzIGFmZmVjdHMgaW50ZWdl
ciBudW1iZXJzIHdpdGggbm8gZnJhY3Rpb24gcGFydC4gTW9zdCBjb21tb24NCi0gICAgICogdmFs
dWVzOg0KLSAgICAgKg0KLSAgICAgKiA8dWw+DQotICAgICAqIDxsaT5BdXRvOiAiMSINCi0gICAg
ICogPGxpPkFsd2F5czogIjEuIg0KLSAgICAgKiA8L3VsPg0KLSAgICAgKg0KLSAgICAgKiA8cD4N
Ci0gICAgICogUGFzcyBhbiBlbGVtZW50IGZyb20gdGhlIHtAbGluayBVTnVtYmVyRGVjaW1hbFNl
cGFyYXRvckRpc3BsYXl9IGVudW0gdG8gdGhpcyBzZXR0ZXIuIEZvciBleGFtcGxlOg0KLSAgICAg
Kg0KLSAgICAgKiA8cHJlPg0KLSAgICAgKiBOdW1iZXJGb3JtYXR0ZXI6OndpdGgoKS5kZWNpbWFs
KFVOdW1iZXJEZWNpbWFsU2VwYXJhdG9yRGlzcGxheTo6VU5VTV9ERUNJTUFMX1NFUEFSQVRPUl9B
TFdBWVMpDQotICAgICAqIDwvcHJlPg0KLSAgICAgKg0KLSAgICAgKiA8cD4NCi0gICAgICogVGhl
IGRlZmF1bHQgaXMgQVVUTyBkZWNpbWFsIHNlcGFyYXRvciBkaXNwbGF5Lg0KLSAgICAgKg0KLSAg
ICAgKiBAcGFyYW0gc3R5bGUNCi0gICAgICogICAgICAgICAgICBUaGUgZGVjaW1hbCBzZXBhcmF0
b3IgZGlzcGxheSBzdHJhdGVneSB0byB1c2Ugd2hlbiByZW5kZXJpbmcgbnVtYmVycy4NCi0gICAg
ICogQHJldHVybiBUaGUgZmx1ZW50IGNoYWluDQotICAgICAqIEBzZWUgVU51bWJlckRlY2ltYWxT
ZXBhcmF0b3JEaXNwbGF5DQotICAgICAqIEBkcmFmdCBJQ1UgNjANCi0gICAgICovDQotICAgIERl
cml2ZWQgZGVjaW1hbChVTnVtYmVyRGVjaW1hbFNlcGFyYXRvckRpc3BsYXkgc3R5bGUpIGNvbnN0
ICY7DQotDQotICAgIC8qKg0KLSAgICAgKiBPdmVybG9hZCBvZiBkZWNpbWFsKCkgZm9yIHVzZSBv
biBhbiBydmFsdWUgcmVmZXJlbmNlLg0KLSAgICAgKg0KLSAgICAgKiBAcGFyYW0gc3R5bGUNCi0g
ICAgICogICAgICAgICAgICBUaGUgZGVjaW1hbCBzZXBhcmF0b3IgZGlzcGxheSBzdHJhdGVneSB0
byB1c2Ugd2hlbiByZW5kZXJpbmcgbnVtYmVycy4NCi0gICAgICogQHJldHVybiBUaGUgZmx1ZW50
IGNoYWluLg0KLSAgICAgKiBAc2VlICNkZWNpbWFsDQotICAgICAqIEBkcmFmdCBJQ1UgNjINCi0g
ICAgICovDQotICAgIERlcml2ZWQgZGVjaW1hbChVTnVtYmVyRGVjaW1hbFNlcGFyYXRvckRpc3Bs
YXkgc3R5bGUpICYmOw0KLQ0KLSAgICAvKioNCi0gICAgICogU2V0cyBhIHNjYWxlIChtdWx0aXBs
aWVyKSB0byBiZSB1c2VkIHRvIHNjYWxlIHRoZSBudW1iZXIgYnkgYW4gYXJiaXRyYXJ5IGFtb3Vu
dCBiZWZvcmUgZm9ybWF0dGluZy4NCi0gICAgICogTW9zdCBjb21tb24gdmFsdWVzOg0KLSAgICAg
Kg0KLSAgICAgKiA8dWw+DQotICAgICAqIDxsaT5NdWx0aXBseSBieSAxMDA6IHVzZWZ1bCBmb3Ig
cGVyY2VudGFnZXMuDQotICAgICAqIDxsaT5NdWx0aXBseSBieSBhbiBhcmJpdHJhcnkgdmFsdWU6
IHVzZWZ1bCBmb3IgdW5pdCBjb252ZXJzaW9ucy4NCi0gICAgICogPC91bD4NCi0gICAgICoNCi0g
ICAgICogPHA+DQotICAgICAqIFBhc3MgYW4gZWxlbWVudCBmcm9tIGEge0BsaW5rIFNjYWxlfSBm
YWN0b3J5IG1ldGhvZCB0byB0aGlzIHNldHRlci4gRm9yIGV4YW1wbGU6DQotICAgICAqDQotICAg
ICAqIDxwcmU+DQotICAgICAqIE51bWJlckZvcm1hdHRlcjo6d2l0aCgpLnNjYWxlKFNjYWxlOjpw
b3dlck9mVGVuKDIpKQ0KLSAgICAgKiA8L3ByZT4NCi0gICAgICoNCi0gICAgICogPHA+DQotICAg
ICAqIFRoZSBkZWZhdWx0IGlzIHRvIG5vdCBhcHBseSBhbnkgbXVsdGlwbGllci4NCi0gICAgICoN
Ci0gICAgICogQHBhcmFtIHNjYWxlDQotICAgICAqICAgICAgICAgICAgVGhlIHNjYWxlIHRvIGFw
cGx5IHdoZW4gcmVuZGVyaW5nIG51bWJlcnMuDQotICAgICAqIEByZXR1cm4gVGhlIGZsdWVudCBj
aGFpbg0KLSAgICAgKiBAZHJhZnQgSUNVIDYyDQotICAgICAqLw0KLSAgICBEZXJpdmVkIHNjYWxl
KGNvbnN0IFNjYWxlICZzY2FsZSkgY29uc3QgJjsNCi0NCi0gICAgLyoqDQotICAgICAqIE92ZXJs
b2FkIG9mIHNjYWxlKCkgZm9yIHVzZSBvbiBhbiBydmFsdWUgcmVmZXJlbmNlLg0KLSAgICAgKg0K
LSAgICAgKiBAcGFyYW0gc2NhbGUNCi0gICAgICogICAgICAgICAgICBUaGUgc2NhbGUgdG8gYXBw
bHkgd2hlbiByZW5kZXJpbmcgbnVtYmVycy4NCi0gICAgICogQHJldHVybiBUaGUgZmx1ZW50IGNo
YWluLg0KLSAgICAgKiBAc2VlICNzY2FsZQ0KLSAgICAgKiBAZHJhZnQgSUNVIDYyDQotICAgICAq
Lw0KLSAgICBEZXJpdmVkIHNjYWxlKGNvbnN0IFNjYWxlICZzY2FsZSkgJiY7DQotDQotI2lmbmRl
ZiBVX0hJREVfSU5URVJOQUxfQVBJDQotDQotICAgIC8qKg0KLSAgICAgKiBTZXQgdGhlIHBhZGRp
bmcgc3RyYXRlZ3kuIE1heSBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlOyBzZWUgIzEzMzM4Lg0KLSAg
ICAgKg0KLSAgICAgKiBAaW50ZXJuYWwgSUNVIDYwOiBUaGlzIEFQSSBpcyBJQ1UgaW50ZXJuYWwg
b25seS4NCi0gICAgICovDQotICAgIERlcml2ZWQgcGFkZGluZyhjb25zdCBpbXBsOjpQYWRkZXIg
JnBhZGRlcikgY29uc3QgJjsNCi0NCi0gICAgLyoqIEBpbnRlcm5hbCAqLw0KLSAgICBEZXJpdmVk
IHBhZGRpbmcoY29uc3QgaW1wbDo6UGFkZGVyICZwYWRkZXIpICYmOw0KLQ0KLSAgICAvKioNCi0g
ICAgICogSW50ZXJuYWwgZmx1ZW50IHNldHRlciB0byBzdXBwb3J0IGEgY3VzdG9tIHJlZ3VsYXRp
b24gdGhyZXNob2xkLiBBIHRocmVzaG9sZCBvZiAxIGNhdXNlcyB0aGUgZGF0YSBzdHJ1Y3R1cmVz
IHRvDQotICAgICAqIGJlIGJ1aWx0IHJpZ2h0IGF3YXkuIEEgdGhyZXNob2xkIG9mIDAgcHJldmVu
dHMgdGhlIGRhdGEgc3RydWN0dXJlcyBmcm9tIGJlaW5nIGJ1aWx0Lg0KLSAgICAgKg0KLSAgICAg
KiBAaW50ZXJuYWwgSUNVIDYwOiBUaGlzIEFQSSBpcyBJQ1UgaW50ZXJuYWwgb25seS4NCi0gICAg
ICovDQotICAgIERlcml2ZWQgdGhyZXNob2xkKGludDMyX3QgdGhyZXNob2xkKSBjb25zdCAmOw0K
LQ0KLSAgICAvKiogQGludGVybmFsICovDQotICAgIERlcml2ZWQgdGhyZXNob2xkKGludDMyX3Qg
dGhyZXNob2xkKSAmJjsNCi0NCi0gICAgLyoqDQotICAgICAqIEludGVybmFsIGZsdWVudCBzZXR0
ZXIgdG8gb3ZlcndyaXRlIHRoZSBlbnRpcmUgbWFjcm9zIG9iamVjdC4NCi0gICAgICoNCi0gICAg
ICogQGludGVybmFsIElDVSA2MDogVGhpcyBBUEkgaXMgSUNVIGludGVybmFsIG9ubHkuDQotICAg
ICAqLw0KLSAgICBEZXJpdmVkIG1hY3Jvcyhjb25zdCBpbXBsOjpNYWNyb1Byb3BzJiBtYWNyb3Mp
IGNvbnN0ICY7DQotDQotICAgIC8qKiBAaW50ZXJuYWwgKi8NCi0gICAgRGVyaXZlZCBtYWNyb3Mo
Y29uc3QgaW1wbDo6TWFjcm9Qcm9wcyYgbWFjcm9zKSAmJjsNCi0NCi0gICAgLyoqIEBpbnRlcm5h
bCAqLw0KLSAgICBEZXJpdmVkIG1hY3JvcyhpbXBsOjpNYWNyb1Byb3BzJiYgbWFjcm9zKSBjb25z
dCAmOw0KLQ0KLSAgICAvKiogQGludGVybmFsICovDQotICAgIERlcml2ZWQgbWFjcm9zKGltcGw6
Ok1hY3JvUHJvcHMmJiBtYWNyb3MpICYmOw0KLQ0KLSNlbmRpZiAgLyogVV9ISURFX0lOVEVSTkFM
X0FQSSAqLw0KLQ0KLSAgICAvKioNCi0gICAgICogQ3JlYXRlcyBhIHNrZWxldG9uIHN0cmluZyBy
ZXByZXNlbnRhdGlvbiBvZiB0aGlzIG51bWJlciBmb3JtYXR0ZXIuIEEgc2tlbGV0b24gc3RyaW5n
IGlzIGENCi0gICAgICogbG9jYWxlLWFnbm9zdGljIHNlcmlhbGl6ZWQgZm9ybSBvZiBhIG51bWJl
ciBmb3JtYXR0ZXIuDQotICAgICAqDQotICAgICAqIE5vdCBhbGwgb3B0aW9ucyBhcmUgY2FwYWJs
ZSBvZiBiZWluZyByZXByZXNlbnRlZCBpbiB0aGUgc2tlbGV0b24gc3RyaW5nOyBmb3IgZXhhbXBs
ZSwgYQ0KLSAgICAgKiBEZWNpbWFsRm9ybWF0U3ltYm9scyBvYmplY3QuIElmIGFueSBzdWNoIG9w
dGlvbiBpcyBlbmNvdW50ZXJlZCwgdGhlIGVycm9yIGNvZGUgaXMgc2V0IHRvDQotICAgICAqIFVf
VU5TVVBQT1JURURfRVJST1IuDQotICAgICAqDQotICAgICAqIFRoZSByZXR1cm5lZCBza2VsZXRv
biBpcyBpbiBub3JtYWxpemVkIGZvcm0sIHN1Y2ggdGhhdCB0d28gbnVtYmVyIGZvcm1hdHRlcnMg
d2l0aCBlcXVpdmFsZW50DQotICAgICAqIGJlaGF2aW9yIHNob3VsZCBwcm9kdWNlIHRoZSBzYW1l
IHNrZWxldG9uLg0KLSAgICAgKg0KLSAgICAgKiBAcmV0dXJuIEEgbnVtYmVyIHNrZWxldG9uIHN0
cmluZyB3aXRoIGJlaGF2aW9yIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBudW1iZXIgZm9ybWF0dGVy
Lg0KLSAgICAgKiBAZHJhZnQgSUNVIDYyDQotICAgICAqLw0KLSAgICBVbmljb2RlU3RyaW5nIHRv
U2tlbGV0b24oVUVycm9yQ29kZSYgc3RhdHVzKSBjb25zdDsNCi0NCi0gICAgLyoqDQotICAgICAq
IFNldHMgdGhlIFVFcnJvckNvZGUgaWYgYW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlIGZsdWVudCBj
aGFpbi4NCi0gICAgICogUHJlc2VydmVzIG9sZGVyIGVycm9yIGNvZGVzIGluIHRoZSBvdXRFcnJv
ckNvZGUuDQotICAgICAqIEByZXR1cm4gVFJVRSBpZiBVX0ZBSUxVUkUob3V0RXJyb3JDb2RlKQ0K
LSAgICAgKiBAZHJhZnQgSUNVIDYwDQotICAgICAqLw0KLSAgICBVQm9vbCBjb3B5RXJyb3JUbyhV
RXJyb3JDb2RlICZvdXRFcnJvckNvZGUpIGNvbnN0IHsNCi0gICAgICAgIGlmIChVX0ZBSUxVUkUo
b3V0RXJyb3JDb2RlKSkgew0KLSAgICAgICAgICAgIC8vIERvIG5vdCBvdmVyd3JpdGUgdGhlIG9s
ZGVyIGVycm9yIGNvZGUNCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgIH0NCi0g
ICAgICAgIGZNYWNyb3MuY29weUVycm9yVG8ob3V0RXJyb3JDb2RlKTsNCi0gICAgICAgIHJldHVy
biBVX0ZBSUxVUkUob3V0RXJyb3JDb2RlKTsNCi0gICAgfTsNCi0NCi0gICAgLy8gTk9URTogVXNl
cyBkZWZhdWx0IGNvcHkgYW5kIG1vdmUgY29uc3RydWN0b3JzLg0KLQ0KLSAgcHJvdGVjdGVkOg0K
LSAgICBpbXBsOjpNYWNyb1Byb3BzIGZNYWNyb3M7DQotDQotICBwcml2YXRlOg0KLSAgICAvLyBE
b24ndCBjb25zdHJ1Y3QgbWUgZGlyZWN0bHkhICBVc2UgKFVuKUxvY2FsaXplZE51bWJlckZvcm1h
dHRlci4NCi0gICAgTnVtYmVyRm9ybWF0dGVyU2V0dGluZ3MoKSA9IGRlZmF1bHQ7DQotDQotICAg
IGZyaWVuZCBjbGFzcyBMb2NhbGl6ZWROdW1iZXJGb3JtYXR0ZXI7DQotICAgIGZyaWVuZCBjbGFz
cyBVbmxvY2FsaXplZE51bWJlckZvcm1hdHRlcjsNCi19Ow0KLQ0KLS8qKg0KLSAqIEEgTnVtYmVy
Rm9ybWF0dGVyIHRoYXQgZG9lcyBub3QgeWV0IGhhdmUgYSBsb2NhbGUuIEluIG9yZGVyIHRvIGZv
cm1hdCBudW1iZXJzLCBhIGxvY2FsZSBtdXN0IGJlIHNwZWNpZmllZC4NCi0gKg0KLSAqIEBzZWUg
TnVtYmVyRm9ybWF0dGVyDQotICogQGRyYWZ0IElDVSA2MA0KLSAqLw0KLWNsYXNzIFVfSTE4Tl9B
UEkgVW5sb2NhbGl6ZWROdW1iZXJGb3JtYXR0ZXINCi0gICAgICAgIDogcHVibGljIE51bWJlckZv
cm1hdHRlclNldHRpbmdzPFVubG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyPiwgcHVibGljIFVNZW1v
cnkgew0KLQ0KLSAgcHVibGljOg0KLSAgICAvKioNCi0gICAgICogQXNzb2NpYXRlIHRoZSBnaXZl
biBsb2NhbGUgd2l0aCB0aGUgbnVtYmVyIGZvcm1hdHRlci4gVGhlIGxvY2FsZSBpcyB1c2VkIGZv
ciBwaWNraW5nIHRoZSBhcHByb3ByaWF0ZSBzeW1ib2xzLA0KLSAgICAgKiBmb3JtYXRzLCBhbmQg
b3RoZXIgZGF0YSBmb3IgbnVtYmVyIGRpc3BsYXkuDQotICAgICAqDQotICAgICAqIDxwPg0KLSAg
ICAgKiBUbyB1c2UgdGhlIEphdmEgZGVmYXVsdCBsb2NhbGUsIGNhbGwgTG9jYWxlOjpnZXREZWZh
dWx0KCk6DQotICAgICAqDQotICAgICAqIDxwcmU+DQotICAgICAqIE51bWJlckZvcm1hdHRlcjo6
d2l0aCgpLiAuLi4gLmxvY2FsZShMb2NhbGU6OmdldERlZmF1bHQoKSkNCi0gICAgICogPC9wcmU+
DQotICAgICAqDQotICAgICAqIEBwYXJhbSBsb2NhbGUNCi0gICAgICogICAgICAgICAgICBUaGUg
bG9jYWxlIHRvIHVzZSB3aGVuIGxvYWRpbmcgZGF0YSBmb3IgbnVtYmVyIGZvcm1hdHRpbmcuDQot
ICAgICAqIEByZXR1cm4gVGhlIGZsdWVudCBjaGFpbi4NCi0gICAgICogQGRyYWZ0IElDVSA2MA0K
LSAgICAgKi8NCi0gICAgTG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyIGxvY2FsZShjb25zdCBpY3U6
OkxvY2FsZSAmbG9jYWxlKSBjb25zdCAmOw0KLQ0KLSAgICAvKioNCi0gICAgICogT3ZlcmxvYWQg
b2YgbG9jYWxlKCkgZm9yIHVzZSBvbiBhbiBydmFsdWUgcmVmZXJlbmNlLg0KLSAgICAgKg0KLSAg
ICAgKiBAcGFyYW0gbG9jYWxlDQotICAgICAqICAgICAgICAgICAgVGhlIGxvY2FsZSB0byB1c2Ug
d2hlbiBsb2FkaW5nIGRhdGEgZm9yIG51bWJlciBmb3JtYXR0aW5nLg0KLSAgICAgKiBAcmV0dXJu
IFRoZSBmbHVlbnQgY2hhaW4uDQotICAgICAqIEBzZWUgI2xvY2FsZQ0KLSAgICAgKiBAZHJhZnQg
SUNVIDYyDQotICAgICAqLw0KLSAgICBMb2NhbGl6ZWROdW1iZXJGb3JtYXR0ZXIgbG9jYWxlKGNv
bnN0IGljdTo6TG9jYWxlICZsb2NhbGUpICYmOw0KLQ0KLSAgICAvKioNCi0gICAgICogRGVmYXVs
dCBjb25zdHJ1Y3RvcjogcHV0cyB0aGUgZm9ybWF0dGVyIGludG8gYSB2YWxpZCBidXQgdW5kZWZp
bmVkIHN0YXRlLg0KLSAgICAgKg0KLSAgICAgKiBAZHJhZnQgSUNVIDYyDQotICAgICAqLw0KLSAg
ICBVbmxvY2FsaXplZE51bWJlckZvcm1hdHRlcigpID0gZGVmYXVsdDsNCi0NCi0gICAgLy8gTWFr
ZSBkZWZhdWx0IGNvcHkgY29uc3RydWN0b3IgY2FsbCB0aGUgTnVtYmVyRm9ybWF0dGVyU2V0dGlu
Z3MgY29weSBjb25zdHJ1Y3Rvci4NCi0gICAgLyoqDQotICAgICAqIFJldHVybnMgYSBjb3B5IG9m
IHRoaXMgVW5sb2NhbGl6ZWROdW1iZXJGb3JtYXR0ZXIuDQotICAgICAqIEBkcmFmdCBJQ1UgNjAN
Ci0gICAgICovDQotICAgIFVubG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyKGNvbnN0IFVubG9jYWxp
emVkTnVtYmVyRm9ybWF0dGVyICZvdGhlcik7DQotDQotICAgIC8qKg0KLSAgICAgKiBNb3ZlIGNv
bnN0cnVjdG9yOg0KLSAgICAgKiBUaGUgc291cmNlIFVubG9jYWxpemVkTnVtYmVyRm9ybWF0dGVy
IHdpbGwgYmUgbGVmdCBpbiBhIHZhbGlkIGJ1dCB1bmRlZmluZWQgc3RhdGUuDQotICAgICAqIEBk
cmFmdCBJQ1UgNjINCi0gICAgICovDQotICAgIFVubG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyKFVu
bG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyJiYgc3JjKSBVX05PRVhDRVBUOw0KLQ0KLSAgICAvKioN
Ci0gICAgICogQ29weSBhc3NpZ25tZW50IG9wZXJhdG9yLg0KLSAgICAgKiBAZHJhZnQgSUNVIDYy
DQotICAgICAqLw0KLSAgICBVbmxvY2FsaXplZE51bWJlckZvcm1hdHRlciYgb3BlcmF0b3I9KGNv
bnN0IFVubG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyJiBvdGhlcik7DQotDQotICAgIC8qKg0KLSAg
ICAgKiBNb3ZlIGFzc2lnbm1lbnQgb3BlcmF0b3I6DQotICAgICAqIFRoZSBzb3VyY2UgVW5sb2Nh
bGl6ZWROdW1iZXJGb3JtYXR0ZXIgd2lsbCBiZSBsZWZ0IGluIGEgdmFsaWQgYnV0IHVuZGVmaW5l
ZCBzdGF0ZS4NCi0gICAgICogQGRyYWZ0IElDVSA2Mg0KLSAgICAgKi8NCi0gICAgVW5sb2NhbGl6
ZWROdW1iZXJGb3JtYXR0ZXImIG9wZXJhdG9yPShVbmxvY2FsaXplZE51bWJlckZvcm1hdHRlciYm
IHNyYykgVV9OT0VYQ0VQVDsNCi0NCi0gIHByaXZhdGU6DQotICAgIGV4cGxpY2l0IFVubG9jYWxp
emVkTnVtYmVyRm9ybWF0dGVyKGNvbnN0IE51bWJlckZvcm1hdHRlclNldHRpbmdzPFVubG9jYWxp
emVkTnVtYmVyRm9ybWF0dGVyPiYgb3RoZXIpOw0KLQ0KLSAgICBleHBsaWNpdCBVbmxvY2FsaXpl
ZE51bWJlckZvcm1hdHRlcigNCi0gICAgICAgICAgICBOdW1iZXJGb3JtYXR0ZXJTZXR0aW5nczxV
bmxvY2FsaXplZE51bWJlckZvcm1hdHRlcj4mJiBzcmMpIFVfTk9FWENFUFQ7DQotDQotICAgIC8v
IFRvIGdpdmUgdGhlIGZsdWVudCBzZXR0ZXJzIGFjY2VzcyB0byB0aGlzIGNsYXNzJ3MgY29uc3Ry
dWN0b3I6DQotICAgIGZyaWVuZCBjbGFzcyBOdW1iZXJGb3JtYXR0ZXJTZXR0aW5nczxVbmxvY2Fs
aXplZE51bWJlckZvcm1hdHRlcj47DQotDQotICAgIC8vIFRvIGdpdmUgTnVtYmVyRm9ybWF0dGVy
Ojp3aXRoKCkgYWNjZXNzIHRvIHRoaXMgY2xhc3MncyBjb25zdHJ1Y3RvcjoNCi0gICAgZnJpZW5k
IGNsYXNzIE51bWJlckZvcm1hdHRlcjsNCi19Ow0KLQ0KLS8qKg0KLSAqIEEgTnVtYmVyRm9ybWF0
dGVyIHRoYXQgaGFzIGEgbG9jYWxlIGFzc29jaWF0ZWQgd2l0aCBpdDsgdGhpcyBtZWFucyAuZm9y
bWF0KCkgbWV0aG9kcyBhcmUgYXZhaWxhYmxlLg0KLSAqDQotICogQHNlZSBOdW1iZXJGb3JtYXR0
ZXINCi0gKiBAZHJhZnQgSUNVIDYwDQotICovDQotY2xhc3MgVV9JMThOX0FQSSBMb2NhbGl6ZWRO
dW1iZXJGb3JtYXR0ZXINCi0gICAgICAgIDogcHVibGljIE51bWJlckZvcm1hdHRlclNldHRpbmdz
PExvY2FsaXplZE51bWJlckZvcm1hdHRlcj4sIHB1YmxpYyBVTWVtb3J5IHsNCi0gIHB1YmxpYzoN
Ci0gICAgLyoqDQotICAgICAqIEZvcm1hdCB0aGUgZ2l2ZW4gaW50ZWdlciBudW1iZXIgdG8gYSBz
dHJpbmcgdXNpbmcgdGhlIHNldHRpbmdzIHNwZWNpZmllZCBpbiB0aGUgTnVtYmVyRm9ybWF0dGVy
IGZsdWVudA0KLSAgICAgKiBzZXR0aW5nIGNoYWluLg0KLSAgICAgKg0KLSAgICAgKiBAcGFyYW0g
dmFsdWUNCi0gICAgICogICAgICAgICAgICBUaGUgbnVtYmVyIHRvIGZvcm1hdC4NCi0gICAgICog
QHBhcmFtIHN0YXR1cw0KLSAgICAgKiAgICAgICAgICAgIFNldCB0byBhbiBFcnJvckNvZGUgaWYg
b25lIG9jY3VycmVkIGluIHRoZSBzZXR0ZXIgY2hhaW4gb3IgZHVyaW5nIGZvcm1hdHRpbmcuDQot
ICAgICAqIEByZXR1cm4gQSBGb3JtYXR0ZWROdW1iZXIgb2JqZWN0OyBjYWxsIC50b1N0cmluZygp
IHRvIGdldCB0aGUgc3RyaW5nLg0KLSAgICAgKiBAZHJhZnQgSUNVIDYwDQotICAgICAqLw0KLSAg
ICBGb3JtYXR0ZWROdW1iZXIgZm9ybWF0SW50KGludDY0X3QgdmFsdWUsIFVFcnJvckNvZGUgJnN0
YXR1cykgY29uc3Q7DQotDQotICAgIC8qKg0KLSAgICAgKiBGb3JtYXQgdGhlIGdpdmVuIGZsb2F0
IG9yIGRvdWJsZSB0byBhIHN0cmluZyB1c2luZyB0aGUgc2V0dGluZ3Mgc3BlY2lmaWVkIGluIHRo
ZSBOdW1iZXJGb3JtYXR0ZXIgZmx1ZW50IHNldHRpbmcNCi0gICAgICogY2hhaW4uDQotICAgICAq
DQotICAgICAqIEBwYXJhbSB2YWx1ZQ0KLSAgICAgKiAgICAgICAgICAgIFRoZSBudW1iZXIgdG8g
Zm9ybWF0Lg0KLSAgICAgKiBAcGFyYW0gc3RhdHVzDQotICAgICAqICAgICAgICAgICAgU2V0IHRv
IGFuIEVycm9yQ29kZSBpZiBvbmUgb2NjdXJyZWQgaW4gdGhlIHNldHRlciBjaGFpbiBvciBkdXJp
bmcgZm9ybWF0dGluZy4NCi0gICAgICogQHJldHVybiBBIEZvcm1hdHRlZE51bWJlciBvYmplY3Q7
IGNhbGwgLnRvU3RyaW5nKCkgdG8gZ2V0IHRoZSBzdHJpbmcuDQotICAgICAqIEBkcmFmdCBJQ1Ug
NjANCi0gICAgICovDQotICAgIEZvcm1hdHRlZE51bWJlciBmb3JtYXREb3VibGUoZG91YmxlIHZh
bHVlLCBVRXJyb3JDb2RlICZzdGF0dXMpIGNvbnN0Ow0KLQ0KLSAgICAvKioNCi0gICAgICogRm9y
bWF0IHRoZSBnaXZlbiBkZWNpbWFsIG51bWJlciB0byBhIHN0cmluZyB1c2luZyB0aGUgc2V0dGlu
Z3MNCi0gICAgICogc3BlY2lmaWVkIGluIHRoZSBOdW1iZXJGb3JtYXR0ZXIgZmx1ZW50IHNldHRp
bmcgY2hhaW4uDQotICAgICAqIFRoZSBzeW50YXggb2YgdGhlIHVuZm9ybWF0dGVkIG51bWJlciBp
cyBhICJudW1lcmljIHN0cmluZyINCi0gICAgICogYXMgZGVmaW5lZCBpbiB0aGUgRGVjaW1hbCBB
cml0aG1ldGljIFNwZWNpZmljYXRpb24sIGF2YWlsYWJsZSBhdA0KLSAgICAgKiBodHRwOi8vc3Bl
bGVvdHJvdmUuY29tL2RlY2ltYWwNCi0gICAgICoNCi0gICAgICogQHBhcmFtIHZhbHVlDQotICAg
ICAqICAgICAgICAgICAgVGhlIG51bWJlciB0byBmb3JtYXQuDQotICAgICAqIEBwYXJhbSBzdGF0
dXMNCi0gICAgICogICAgICAgICAgICBTZXQgdG8gYW4gRXJyb3JDb2RlIGlmIG9uZSBvY2N1cnJl
ZCBpbiB0aGUgc2V0dGVyIGNoYWluIG9yIGR1cmluZyBmb3JtYXR0aW5nLg0KLSAgICAgKiBAcmV0
dXJuIEEgRm9ybWF0dGVkTnVtYmVyIG9iamVjdDsgY2FsbCAudG9TdHJpbmcoKSB0byBnZXQgdGhl
IHN0cmluZy4NCi0gICAgICogQGRyYWZ0IElDVSA2MA0KLSAgICAgKi8NCi0gICAgRm9ybWF0dGVk
TnVtYmVyIGZvcm1hdERlY2ltYWwoU3RyaW5nUGllY2UgdmFsdWUsIFVFcnJvckNvZGUmIHN0YXR1
cykgY29uc3Q7DQotDQotI2lmbmRlZiBVX0hJREVfSU5URVJOQUxfQVBJDQotDQotICAgIC8qKiBJ
bnRlcm5hbCBtZXRob2QuDQotICAgICAqIEBpbnRlcm5hbA0KLSAgICAgKi8NCi0gICAgRm9ybWF0
dGVkTnVtYmVyIGZvcm1hdERlY2ltYWxRdWFudGl0eShjb25zdCBpbXBsOjpEZWNpbWFsUXVhbnRp
dHkmIGRxLCBVRXJyb3JDb2RlJiBzdGF0dXMpIGNvbnN0Ow0KLQ0KLSAgICAvKiogSW50ZXJuYWwg
bWV0aG9kIGZvciBEZWNpbWFsRm9ybWF0IGNvbXBhdGliaWxpdHkuDQotICAgICAqIEBpbnRlcm5h
bA0KLSAgICAgKi8NCi0gICAgdm9pZCBnZXRBZmZpeEltcGwoYm9vbCBpc1ByZWZpeCwgYm9vbCBp
c05lZ2F0aXZlLCBVbmljb2RlU3RyaW5nJiByZXN1bHQsIFVFcnJvckNvZGUmIHN0YXR1cykgY29u
c3Q7DQotDQotICAgIC8qKg0KLSAgICAgKiBJbnRlcm5hbCBtZXRob2QgZm9yIHRlc3RpbmcuDQot
ICAgICAqIEBpbnRlcm5hbA0KLSAgICAgKi8NCi0gICAgY29uc3QgaW1wbDo6TnVtYmVyRm9ybWF0
dGVySW1wbCogZ2V0Q29tcGlsZWQoKSBjb25zdDsNCi0NCi0gICAgLyoqDQotICAgICAqIEludGVy
bmFsIG1ldGhvZCBmb3IgdGVzdGluZy4NCi0gICAgICogQGludGVybmFsDQotICAgICAqLw0KLSAg
ICBpbnQzMl90IGdldENhbGxDb3VudCgpIGNvbnN0Ow0KLQ0KLSNlbmRpZg0KLQ0KLSAgICAvKioN
Ci0gICAgICogQ3JlYXRlcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgTG9jYWxpemVkTnVtYmVy
Rm9ybWF0IGFzIGFuIGljdTo6Rm9ybWF0LCBlbmFibGluZyB0aGUgdXNlDQotICAgICAqIG9mIHRo
aXMgbnVtYmVyIGZvcm1hdHRlciB3aXRoIEFQSXMgdGhhdCBuZWVkIGFuIG9iamVjdCBvZiB0aGF0
IHR5cGUsIHN1Y2ggYXMgTWVzc2FnZUZvcm1hdC4NCi0gICAgICoNCi0gICAgICogVGhpcyBBUEkg
aXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgb3RoZXIgdGhhbiBmb3IgZW5hYmxpbmcgQVBJIGNv
bXBhdGliaWxpdHkuIFRoZSBmb3JtYXREb3VibGUsDQotICAgICAqIGZvcm1hdEludCwgYW5kIGZv
cm1hdERlY2ltYWwgbWV0aG9kcyBzaG91bGQgbm9ybWFsbHkgYmUgdXNlZCB3aGVuIGZvcm1hdHRp
bmcgbnVtYmVycywgbm90IHRoZSBGb3JtYXQNCi0gICAgICogb2JqZWN0IHJldHVybmVkIGJ5IHRo
aXMgbWV0aG9kLg0KLSAgICAgKg0KLSAgICAgKiBUaGUgY2FsbGVyIG93bnMgdGhlIHJldHVybmVk
IG9iamVjdCBhbmQgbXVzdCBkZWxldGUgaXQgd2hlbiBmaW5pc2hlZC4NCi0gICAgICoNCi0gICAg
ICogQHJldHVybiBBIEZvcm1hdCB3cmFwcGluZyB0aGlzIExvY2FsaXplZE51bWJlckZvcm1hdHRl
ci4NCi0gICAgICogQGRyYWZ0IElDVSA2Mg0KLSAgICAgKi8NCi0gICAgRm9ybWF0KiB0b0Zvcm1h
dChVRXJyb3JDb2RlJiBzdGF0dXMpIGNvbnN0Ow0KLQ0KLSAgICAvKioNCi0gICAgICogRGVmYXVs
dCBjb25zdHJ1Y3RvcjogcHV0cyB0aGUgZm9ybWF0dGVyIGludG8gYSB2YWxpZCBidXQgdW5kZWZp
bmVkIHN0YXRlLg0KLSAgICAgKg0KLSAgICAgKiBAZHJhZnQgSUNVIDYyDQotICAgICAqLw0KLSAg
ICBMb2NhbGl6ZWROdW1iZXJGb3JtYXR0ZXIoKSA9IGRlZmF1bHQ7DQotDQotICAgIC8vIE1ha2Ug
ZGVmYXVsdCBjb3B5IGNvbnN0cnVjdG9yIGNhbGwgdGhlIE51bWJlckZvcm1hdHRlclNldHRpbmdz
IGNvcHkgY29uc3RydWN0b3IuDQotICAgIC8qKg0KLSAgICAgKiBSZXR1cm5zIGEgY29weSBvZiB0
aGlzIExvY2FsaXplZE51bWJlckZvcm1hdHRlci4NCi0gICAgICogQGRyYWZ0IElDVSA2MA0KLSAg
ICAgKi8NCi0gICAgTG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyKGNvbnN0IExvY2FsaXplZE51bWJl
ckZvcm1hdHRlciAmb3RoZXIpOw0KLQ0KLSAgICAvKioNCi0gICAgICogTW92ZSBjb25zdHJ1Y3Rv
cjoNCi0gICAgICogVGhlIHNvdXJjZSBMb2NhbGl6ZWROdW1iZXJGb3JtYXR0ZXIgd2lsbCBiZSBs
ZWZ0IGluIGEgdmFsaWQgYnV0IHVuZGVmaW5lZCBzdGF0ZS4NCi0gICAgICogQGRyYWZ0IElDVSA2
Mg0KLSAgICAgKi8NCi0gICAgTG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyKExvY2FsaXplZE51bWJl
ckZvcm1hdHRlciYmIHNyYykgVV9OT0VYQ0VQVDsNCi0NCi0gICAgLyoqDQotICAgICAqIENvcHkg
YXNzaWdubWVudCBvcGVyYXRvci4NCi0gICAgICogQGRyYWZ0IElDVSA2Mg0KLSAgICAgKi8NCi0g
ICAgTG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyJiBvcGVyYXRvcj0oY29uc3QgTG9jYWxpemVkTnVt
YmVyRm9ybWF0dGVyJiBvdGhlcik7DQotDQotICAgIC8qKg0KLSAgICAgKiBNb3ZlIGFzc2lnbm1l
bnQgb3BlcmF0b3I6DQotICAgICAqIFRoZSBzb3VyY2UgTG9jYWxpemVkTnVtYmVyRm9ybWF0dGVy
IHdpbGwgYmUgbGVmdCBpbiBhIHZhbGlkIGJ1dCB1bmRlZmluZWQgc3RhdGUuDQotICAgICAqIEBk
cmFmdCBJQ1UgNjINCi0gICAgICovDQotICAgIExvY2FsaXplZE51bWJlckZvcm1hdHRlciYgb3Bl
cmF0b3I9KExvY2FsaXplZE51bWJlckZvcm1hdHRlciYmIHNyYykgVV9OT0VYQ0VQVDsNCi0NCi0j
aWZuZGVmIFVfSElERV9JTlRFUk5BTF9BUEkNCi0NCi0gICAgLyoqDQotICAgICAqIFRoaXMgaXMg
dGhlIGNvcmUgZW50cnlwb2ludCB0byB0aGUgbnVtYmVyIGZvcm1hdHRpbmcgcGlwZWxpbmUuIEl0
IHBlcmZvcm1zIHNlbGYtcmVndWxhdGlvbjogYSBzdGF0aWMgY29kZSBwYXRoDQotICAgICAqIGZv
ciB0aGUgZmlyc3QgZmV3IGNhbGxzLCBhbmQgY29tcGlsaW5nIGEgbW9yZSBlZmZpY2llbnQgZGF0
YSBzdHJ1Y3R1cmUgaWYgY2FsbGVkIHJlcGVhdGVkbHkuDQotICAgICAqDQotICAgICAqIDxwPg0K
LSAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHZlcnkgaG90LCBiZWluZyBjYWxsZWQgaW4gZXZlcnkg
Y2FsbCB0byB0aGUgbnVtYmVyIGZvcm1hdHRpbmcgcGlwZWxpbmUuDQotICAgICAqDQotICAgICAq
IEBwYXJhbSByZXN1bHRzDQotICAgICAqICAgICAgICAgICAgVGhlIHJlc3VsdHMgb2JqZWN0LiBU
aGlzIG1ldGhvZCB3aWxsIG11dGF0ZSBpdCB0byBzYXZlIHRoZSByZXN1bHRzLg0KLSAgICAgKiBA
aW50ZXJuYWwNCi0gICAgICovDQotICAgIHZvaWQgZm9ybWF0SW1wbChpbXBsOjpVRm9ybWF0dGVk
TnVtYmVyRGF0YSAqcmVzdWx0cywgVUVycm9yQ29kZSAmc3RhdHVzKSBjb25zdDsNCi0NCi0jZW5k
aWYNCi0NCi0gICAgLyoqDQotICAgICAqIERlc3RydWN0IHRoaXMgTG9jYWxpemVkTnVtYmVyRm9y
bWF0dGVyLCBjbGVhbmluZyB1cCBhbnkgbWVtb3J5IGl0IG1pZ2h0IG93bi4NCi0gICAgICogQGRy
YWZ0IElDVSA2MA0KLSAgICAgKi8NCi0gICAgfkxvY2FsaXplZE51bWJlckZvcm1hdHRlcigpOw0K
LQ0KLSAgcHJpdmF0ZToNCi0gICAgLy8gTm90ZTogZkNvbXBpbGVkIGNhbid0IGJlIGEgTG9jYWxQ
b2ludGVyIGJlY2F1c2UgaW1wbDo6TnVtYmVyRm9ybWF0dGVySW1wbCBpcyBkZWZpbmVkIGluIGFu
IGludGVybmFsDQotICAgIC8vIGhlYWRlciwgYW5kIExvY2FsUG9pbnRlciBuZWVkcyB0aGUgZnVs
bCBjbGFzcyBkZWZpbml0aW9uIGluIG9yZGVyIHRvIGRlbGV0ZSB0aGUgaW5zdGFuY2UuDQotICAg
IGNvbnN0IGltcGw6Ok51bWJlckZvcm1hdHRlckltcGwqIGZDb21waWxlZCB7bnVsbHB0cn07DQot
ICAgIGNoYXIgZlVuc2FmZUNhbGxDb3VudFs4XSB7fTsgIC8vIGludGVybmFsbHkgY2FzdCB0byB1
X2F0b21pY19pbnQzMl90DQotDQotICAgIGV4cGxpY2l0IExvY2FsaXplZE51bWJlckZvcm1hdHRl
cihjb25zdCBOdW1iZXJGb3JtYXR0ZXJTZXR0aW5nczxMb2NhbGl6ZWROdW1iZXJGb3JtYXR0ZXI+
JiBvdGhlcik7DQotDQotICAgIGV4cGxpY2l0IExvY2FsaXplZE51bWJlckZvcm1hdHRlcihOdW1i
ZXJGb3JtYXR0ZXJTZXR0aW5nczxMb2NhbGl6ZWROdW1iZXJGb3JtYXR0ZXI+JiYgc3JjKSBVX05P
RVhDRVBUOw0KLQ0KLSAgICBMb2NhbGl6ZWROdW1iZXJGb3JtYXR0ZXIoY29uc3QgaW1wbDo6TWFj
cm9Qcm9wcyAmbWFjcm9zLCBjb25zdCBMb2NhbGUgJmxvY2FsZSk7DQotDQotICAgIExvY2FsaXpl
ZE51bWJlckZvcm1hdHRlcihpbXBsOjpNYWNyb1Byb3BzICYmbWFjcm9zLCBjb25zdCBMb2NhbGUg
JmxvY2FsZSk7DQotDQotICAgIHZvaWQgbG5mTW92ZUhlbHBlcihMb2NhbGl6ZWROdW1iZXJGb3Jt
YXR0ZXImJiBzcmMpOw0KLQ0KLSAgICAvKioNCi0gICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBj
b21waWxlZCBmb3JtYXR0ZXIgaXMgYXZhaWxhYmxlLg0KLSAgICAgKi8NCi0gICAgYm9vbCBjb21w
dXRlQ29tcGlsZWQoVUVycm9yQ29kZSYgc3RhdHVzKSBjb25zdDsNCi0NCi0gICAgLy8gVG8gZ2l2
ZSB0aGUgZmx1ZW50IHNldHRlcnMgYWNjZXNzIHRvIHRoaXMgY2xhc3MncyBjb25zdHJ1Y3RvcjoN
Ci0gICAgZnJpZW5kIGNsYXNzIE51bWJlckZvcm1hdHRlclNldHRpbmdzPFVubG9jYWxpemVkTnVt
YmVyRm9ybWF0dGVyPjsNCi0gICAgZnJpZW5kIGNsYXNzIE51bWJlckZvcm1hdHRlclNldHRpbmdz
PExvY2FsaXplZE51bWJlckZvcm1hdHRlcj47DQotDQotICAgIC8vIFRvIGdpdmUgVW5sb2NhbGl6
ZWROdW1iZXJGb3JtYXR0ZXI6OmxvY2FsZSgpIGFjY2VzcyB0byB0aGlzIGNsYXNzJ3MgY29uc3Ry
dWN0b3I6DQotICAgIGZyaWVuZCBjbGFzcyBVbmxvY2FsaXplZE51bWJlckZvcm1hdHRlcjsNCi19
Ow0KLQ0KLS8qKg0KLSAqIFRoZSByZXN1bHQgb2YgYSBudW1iZXIgZm9ybWF0dGluZyBvcGVyYXRp
b24uIFRoaXMgY2xhc3MgYWxsb3dzIHRoZSByZXN1bHQgdG8gYmUgZXhwb3J0ZWQgaW4gc2V2ZXJh
bCBkYXRhIHR5cGVzLA0KLSAqIGluY2x1ZGluZyBhIFVuaWNvZGVTdHJpbmcgYW5kIGEgRmllbGRQ
b3NpdGlvbkl0ZXJhdG9yLg0KLSAqDQotICogQGRyYWZ0IElDVSA2MA0KLSAqLw0KLWNsYXNzIFVf
STE4Tl9BUEkgRm9ybWF0dGVkTnVtYmVyIDogcHVibGljIFVNZW1vcnkgew0KLSAgcHVibGljOg0K
LSNpZm5kZWYgVV9ISURFX0RFUFJFQ0FURURfQVBJDQotICAgIC8qKg0KLSAgICAgKiBSZXR1cm5z
IGEgVW5pY29kZVN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZm9ybWF0dGVkIG51bWJlci4N
Ci0gICAgICoNCi0gICAgICogQHJldHVybiBhIFVuaWNvZGVTdHJpbmcgY29udGFpbmluZyB0aGUg
bG9jYWxpemVkIG51bWJlci4NCi0gICAgICogQGRlcHJlY2F0ZWQgSUNVIDYyIFVzZSB0aGUgdmVy
c2lvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGFuIGVycm9yIGNvZGUgaW5zdGVhZC4NCi0gICAgICog
ICAgICAgICAgICAgICAgVGhpcyBtZXRob2Qgd2FzIG5ldmVyIEBzdGFibGUgYW5kIHdpbGwgYmUg
cmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLg0KLSAgICAgKiAgICAgICAgICAgICAgICBTZWUg
aHR0cDovL2J1Z3MuaWN1LXByb2plY3Qub3JnL3RyYWMvdGlja2V0LzEzNzQ2DQotICAgICAqLw0K
LSAgICBVbmljb2RlU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7DQotI2VuZGlmICAvKiBVX0hJREVf
REVQUkVDQVRFRF9BUEkgKi8NCi0NCi0gICAgLyoqDQotICAgICAqIFJldHVybnMgYSBVbmljb2Rl
U3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBmb3JtYXR0ZWQgbnVtYmVyLg0KLSAgICAgKg0K
LSAgICAgKiBAcGFyYW0gc3RhdHVzDQotICAgICAqICAgICAgICAgICAgU2V0IGlmIGFuIGVycm9y
IG9jY3VycyB3aGlsZSBmb3JtYXR0aW5nIHRoZSBudW1iZXIgdG8gdGhlIFVuaWNvZGVTdHJpbmcu
DQotICAgICAqIEByZXR1cm4gYSBVbmljb2RlU3RyaW5nIGNvbnRhaW5pbmcgdGhlIGxvY2FsaXpl
ZCBudW1iZXIuDQotICAgICAqIEBkcmFmdCBJQ1UgNjINCi0gICAgICovDQotICAgIFVuaWNvZGVT
dHJpbmcgdG9TdHJpbmcoVUVycm9yQ29kZSYgc3RhdHVzKSBjb25zdDsNCi0NCi0jaWZuZGVmIFVf
SElERV9ERVBSRUNBVEVEX0FQSQ0KLSAgICAvKioNCi0gICAgICogQXBwZW5kcyB0aGUgZm9ybWF0
dGVkIG51bWJlciB0byBhbiBBcHBlbmRhYmxlLg0KLSAgICAgKg0KLSAgICAgKiBAcGFyYW0gYXBw
ZW5kYWJsZQ0KLSAgICAgKiAgICAgICAgICAgIFRoZSBBcHBlbmRhYmxlIHRvIHdoaWNoIHRvIGFw
cGVuZCB0aGUgZm9ybWF0dGVkIG51bWJlciBzdHJpbmcuDQotICAgICAqIEByZXR1cm4gVGhlIHNh
bWUgQXBwZW5kYWJsZSwgZm9yIGNoYWluaW5nLg0KLSAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgNjIg
VXNlIHRoZSB2ZXJzaW9uIG9mIHRoaXMgbWV0aG9kIHdpdGggYW4gZXJyb3IgY29kZSBpbnN0ZWFk
Lg0KLSAgICAgKiAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCB3YXMgbmV2ZXIgQHN0YWJsZSBh
bmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHJlbGVhc2UuDQotICAgICAqICAgICAgICAg
ICAgICAgIFNlZSBodHRwOi8vYnVncy5pY3UtcHJvamVjdC5vcmcvdHJhYy90aWNrZXQvMTM3NDYN
Ci0gICAgICogQHNlZSBBcHBlbmRhYmxlDQotICAgICAqLw0KLSAgICBBcHBlbmRhYmxlICZhcHBl
bmRUbyhBcHBlbmRhYmxlICZhcHBlbmRhYmxlKTsNCi0jZW5kaWYgIC8qIFVfSElERV9ERVBSRUNB
VEVEX0FQSSAqLw0KLQ0KLSAgICAvKioNCi0gICAgICogQXBwZW5kcyB0aGUgZm9ybWF0dGVkIG51
bWJlciB0byBhbiBBcHBlbmRhYmxlLg0KLSAgICAgKg0KLSAgICAgKiBAcGFyYW0gYXBwZW5kYWJs
ZQ0KLSAgICAgKiAgICAgICAgICAgIFRoZSBBcHBlbmRhYmxlIHRvIHdoaWNoIHRvIGFwcGVuZCB0
aGUgZm9ybWF0dGVkIG51bWJlciBzdHJpbmcuDQotICAgICAqIEBwYXJhbSBzdGF0dXMNCi0gICAg
ICogICAgICAgICAgICBTZXQgaWYgYW4gZXJyb3Igb2NjdXJzIHdoaWxlIGZvcm1hdHRpbmcgdGhl
IG51bWJlciB0byB0aGUgQXBwZW5kYWJsZS4NCi0gICAgICogQHJldHVybiBUaGUgc2FtZSBBcHBl
bmRhYmxlLCBmb3IgY2hhaW5pbmcuDQotICAgICAqIEBkcmFmdCBJQ1UgNjINCi0gICAgICogQHNl
ZSBBcHBlbmRhYmxlDQotICAgICAqLw0KLSAgICBBcHBlbmRhYmxlICZhcHBlbmRUbyhBcHBlbmRh
YmxlICZhcHBlbmRhYmxlLCBVRXJyb3JDb2RlJiBzdGF0dXMpOw0KLQ0KLSNpZm5kZWYgVV9ISURF
X0RFUFJFQ0FURURfQVBJDQotICAgIC8qKg0KLSAgICAgKiBEZXRlcm1pbmUgdGhlIHN0YXJ0IGFu
ZCBlbmQgaW5kaWNlcyBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgZ2l2ZW4gPGVtPmZp
ZWxkPC9lbT4gaW4gdGhlIG91dHB1dCBzdHJpbmcuDQotICAgICAqIFRoaXMgYWxsb3dzIHlvdSB0
byBkZXRlcm1pbmUgdGhlIGxvY2F0aW9ucyBvZiB0aGUgaW50ZWdlciBwYXJ0LCBmcmFjdGlvbiBw
YXJ0LCBhbmQgc2lnbi4NCi0gICAgICoNCi0gICAgICogPHA+DQotICAgICAqIElmIG11bHRpcGxl
IGRpZmZlcmVudCBmaWVsZCBhdHRyaWJ1dGVzIGFyZSBuZWVkZWQsIHRoaXMgbWV0aG9kIGNhbiBi
ZSBjYWxsZWQgcmVwZWF0ZWRseSwgb3IgaWYgPGVtPmFsbDwvZW0+IGZpZWxkDQotICAgICAqIGF0
dHJpYnV0ZXMgYXJlIG5lZWRlZCwgY29uc2lkZXIgdXNpbmcgcG9wdWxhdGVGaWVsZFBvc2l0aW9u
SXRlcmF0b3IoKS4NCi0gICAgICoNCi0gICAgICogPHA+DQotICAgICAqIElmIGEgZmllbGQgb2Nj
dXJzIG11bHRpcGxlIHRpbWVzIGluIGFuIG91dHB1dCBzdHJpbmcsIHN1Y2ggYXMgYSBncm91cGlu
ZyBzZXBhcmF0b3IsIHRoaXMgbWV0aG9kIHdpbGwgb25seSBldmVyDQotICAgICAqIHJldHVybiB0
aGUgZmlyc3Qgb2NjdXJyZW5jZS4gVXNlIHBvcHVsYXRlRmllbGRQb3NpdGlvbkl0ZXJhdG9yKCkg
dG8gYWNjZXNzIGFsbCBvY2N1cnJlbmNlcyBvZiBhbiBhdHRyaWJ1dGUuDQotICAgICAqDQotICAg
ICAqIEBwYXJhbSBmaWVsZFBvc2l0aW9uDQotICAgICAqICAgICAgICAgICAgVGhlIEZpZWxkUG9z
aXRpb24gdG8gcG9wdWxhdGUgd2l0aCB0aGUgc3RhcnQgYW5kIGVuZCBpbmRpY2VzIG9mIHRoZSBk
ZXNpcmVkIGZpZWxkLg0KLSAgICAgKiBAcGFyYW0gc3RhdHVzDQotICAgICAqICAgICAgICAgICAg
U2V0IGlmIGFuIGVycm9yIG9jY3VycyB3aGlsZSBwb3B1bGF0aW5nIHRoZSBGaWVsZFBvc2l0aW9u
Lg0KLSAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgNjIgVXNlIHtAbGluayAjbmV4dEZpZWxkUG9zaXRp
b259IGluc3RlYWQuIFRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZQ0KLSAg
ICAgKiAgICAgICAgICAgICByZWxlYXNlLiBTZWUgaHR0cDovL2J1Z3MuaWN1LXByb2plY3Qub3Jn
L3RyYWMvdGlja2V0LzEzNzQ2DQotICAgICAqIEBzZWUgVU51bWJlckZvcm1hdEZpZWxkcw0KLSAg
ICAgKi8NCi0gICAgdm9pZCBwb3B1bGF0ZUZpZWxkUG9zaXRpb24oRmllbGRQb3NpdGlvbiAmZmll
bGRQb3NpdGlvbiwgVUVycm9yQ29kZSAmc3RhdHVzKTsNCi0jZW5kaWYgIC8qIFVfSElERV9ERVBS
RUNBVEVEX0FQSSAqLw0KLQ0KLSAgICAvKioNCi0gICAgICogRGV0ZXJtaW5lcyB0aGUgc3RhcnQg
YW5kIGVuZCBpbmRpY2VzIG9mIHRoZSBuZXh0IG9jY3VycmVuY2Ugb2YgdGhlIGdpdmVuIDxlbT5m
aWVsZDwvZW0+IGluIHRoZQ0KLSAgICAgKiBvdXRwdXQgc3RyaW5nLiBUaGlzIGFsbG93cyB5b3Ug
dG8gZGV0ZXJtaW5lIHRoZSBsb2NhdGlvbnMgb2YsIGZvciBleGFtcGxlLCB0aGUgaW50ZWdlciBw
YXJ0LA0KLSAgICAgKiBmcmFjdGlvbiBwYXJ0LCBvciBzeW1ib2xzLg0KLSAgICAgKg0KLSAgICAg
KiBJZiBhIGZpZWxkIG9jY3VycyBqdXN0IG9uY2UsIGNhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCBm
aW5kIHRoYXQgb2NjdXJyZW5jZSBhbmQgcmV0dXJuIGl0LiBJZiBhDQotICAgICAqIGZpZWxkIG9j
Y3VycyBtdWx0aXBsZSB0aW1lcywgdGhpcyBtZXRob2QgbWF5IGJlIGNhbGxlZCByZXBlYXRlZGx5
IHdpdGggdGhlIGZvbGxvd2luZyBwYXR0ZXJuOg0KLSAgICAgKg0KLSAgICAgKiA8cHJlPg0KLSAg
ICAgKiBGaWVsZFBvc2l0aW9uIGZwb3MoVU5VTV9HUk9VUElOR19TRVBBUkFUT1JfRklFTEQpOw0K
LSAgICAgKiB3aGlsZSAoZm9ybWF0dGVkTnVtYmVyLm5leHRGaWVsZFBvc2l0aW9uKGZwb3MsIHN0
YXR1cykpIHsNCi0gICAgICogICAvLyBkbyBzb21ldGhpbmcgd2l0aCBmcG9zLg0KLSAgICAgKiB9
DQotICAgICAqIDwvcHJlPg0KLSAgICAgKg0KLSAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VmdWwg
aWYgeW91IGtub3cgd2hpY2ggZmllbGQgdG8gcXVlcnkuIElmIHlvdSB3YW50IGFsbCBhdmFpbGFi
bGUgZmllbGQgcG9zaXRpb24NCi0gICAgICogaW5mb3JtYXRpb24sIHVzZSAjZ2V0QWxsRmllbGRQ
b3NpdGlvbnMoKS4NCi0gICAgICoNCi0gICAgICogQHBhcmFtIGZpZWxkUG9zaXRpb24NCi0gICAg
ICogICAgICAgICAgICBJbnB1dCtvdXRwdXQgdmFyaWFibGUuIE9uIGlucHV0LCB0aGUgImZpZWxk
IiBwcm9wZXJ0eSBkZXRlcm1pbmVzIHdoaWNoIGZpZWxkIHRvIGxvb2sNCi0gICAgICogICAgICAg
ICAgICB1cCwgYW5kIHRoZSAiYmVnaW5JbmRleCIgYW5kICJlbmRJbmRleCIgcHJvcGVydGllcyBk
ZXRlcm1pbmUgd2hlcmUgdG8gYmVnaW4gdGhlIHNlYXJjaC4NCi0gICAgICogICAgICAgICAgICBP
biBvdXRwdXQsIHRoZSAiYmVnaW5JbmRleCIgaXMgc2V0IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhl
IGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlDQotICAgICAqICAgICAgICAgICAgZmllbGQgd2l0aCBl
aXRoZXIgYmVnaW4gb3IgZW5kIGluZGljZXMgYWZ0ZXIgdGhlIGlucHV0IGluZGljZXMsICJlbmRJ
bmRleCIgaXMgc2V0IHRvDQotICAgICAqICAgICAgICAgICAgdGhlIGVuZCBvZiB0aGF0IG9jY3Vy
cmVuY2Ugb2YgdGhlIGZpZWxkIChleGNsdXNpdmUgaW5kZXgpLiBJZiBhIGZpZWxkIHBvc2l0aW9u
IGlzIG5vdA0KLSAgICAgKiAgICAgICAgICAgIGZvdW5kLCB0aGUgbWV0aG9kIHJldHVybnMgRkFM
U0UgYW5kIHRoZSBGaWVsZFBvc2l0aW9uIG1heSBvciBtYXkgbm90IGJlIGNoYW5nZWQuDQotICAg
ICAqIEBwYXJhbSBzdGF0dXMNCi0gICAgICogICAgICAgICAgICBTZXQgaWYgYW4gZXJyb3Igb2Nj
dXJzIHdoaWxlIHBvcHVsYXRpbmcgdGhlIEZpZWxkUG9zaXRpb24uDQotICAgICAqIEByZXR1cm4g
VFJVRSBpZiBhIG5ldyBvY2N1cnJlbmNlIG9mIHRoZSBmaWVsZCB3YXMgZm91bmQ7IEZBTFNFIG90
aGVyd2lzZS4NCi0gICAgICogQGRyYWZ0IElDVSA2Mg0KLSAgICAgKiBAc2VlIFVOdW1iZXJGb3Jt
YXRGaWVsZHMNCi0gICAgICovDQotICAgIFVCb29sIG5leHRGaWVsZFBvc2l0aW9uKEZpZWxkUG9z
aXRpb24mIGZpZWxkUG9zaXRpb24sIFVFcnJvckNvZGUmIHN0YXR1cykgY29uc3Q7DQotDQotI2lm
bmRlZiBVX0hJREVfREVQUkVDQVRFRF9BUEkNCi0gICAgLyoqDQotICAgICAqIEV4cG9ydCB0aGUg
Zm9ybWF0dGVkIG51bWJlciB0byBhIEZpZWxkUG9zaXRpb25JdGVyYXRvci4gVGhpcyBhbGxvd3Mg
eW91IHRvIGRldGVybWluZSB3aGljaCBjaGFyYWN0ZXJzIGluDQotICAgICAqIHRoZSBvdXRwdXQg
c3RyaW5nIGNvcnJlc3BvbmQgdG8gd2hpY2ggPGVtPmZpZWxkczwvZW0+LCBzdWNoIGFzIHRoZSBp
bnRlZ2VyIHBhcnQsIGZyYWN0aW9uIHBhcnQsIGFuZCBzaWduLg0KLSAgICAgKg0KLSAgICAgKiA8
cD4NCi0gICAgICogSWYgaW5mb3JtYXRpb24gb24gb25seSBvbmUgZmllbGQgaXMgbmVlZGVkLCBj
b25zaWRlciB1c2luZyBwb3B1bGF0ZUZpZWxkUG9zaXRpb24oKSBpbnN0ZWFkLg0KLSAgICAgKg0K
LSAgICAgKiBAcGFyYW0gaXRlcmF0b3INCi0gICAgICogICAgICAgICAgICBUaGUgRmllbGRQb3Np
dGlvbkl0ZXJhdG9yIHRvIHBvcHVsYXRlIHdpdGggYWxsIG9mIHRoZSBmaWVsZHMgcHJlc2VudCBp
biB0aGUgZm9ybWF0dGVkIG51bWJlci4NCi0gICAgICogQHBhcmFtIHN0YXR1cw0KLSAgICAgKiAg
ICAgICAgICAgIFNldCBpZiBhbiBlcnJvciBvY2N1cnMgd2hpbGUgcG9wdWxhdGluZyB0aGUgRmll
bGRQb3NpdGlvbkl0ZXJhdG9yLg0KLSAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgNjIgVXNlIHtAbGlu
ayAjZ2V0QWxsRmllbGRQb3NpdGlvbnN9IGluc3RlYWQuIFRoaXMgbWV0aG9kIHdpbGwgYmUgcmVt
b3ZlZCBpbiBhDQotICAgICAqICAgICAgICAgICAgIGZ1dHVyZSByZWxlYXNlLiBTZWUgaHR0cDov
L2J1Z3MuaWN1LXByb2plY3Qub3JnL3RyYWMvdGlja2V0LzEzNzQ2DQotICAgICAqIEBzZWUgVU51
bWJlckZvcm1hdEZpZWxkcw0KLSAgICAgKi8NCi0gICAgdm9pZCBwb3B1bGF0ZUZpZWxkUG9zaXRp
b25JdGVyYXRvcihGaWVsZFBvc2l0aW9uSXRlcmF0b3IgJml0ZXJhdG9yLCBVRXJyb3JDb2RlICZz
dGF0dXMpOw0KLSNlbmRpZiAgLyogVV9ISURFX0RFUFJFQ0FURURfQVBJICovDQotDQotICAgIC8q
Kg0KLSAgICAgKiBFeHBvcnQgdGhlIGZvcm1hdHRlZCBudW1iZXIgdG8gYSBGaWVsZFBvc2l0aW9u
SXRlcmF0b3IuIFRoaXMgYWxsb3dzIHlvdSB0byBkZXRlcm1pbmUgd2hpY2ggY2hhcmFjdGVycyBp
bg0KLSAgICAgKiB0aGUgb3V0cHV0IHN0cmluZyBjb3JyZXNwb25kIHRvIHdoaWNoIDxlbT5maWVs
ZHM8L2VtPiwgc3VjaCBhcyB0aGUgaW50ZWdlciBwYXJ0LCBmcmFjdGlvbiBwYXJ0LCBhbmQgc2ln
bi4NCi0gICAgICoNCi0gICAgICogSWYgaW5mb3JtYXRpb24gb24gb25seSBvbmUgZmllbGQgaXMg
bmVlZGVkLCB1c2UgI25leHRGaWVsZFBvc2l0aW9uKCkgaW5zdGVhZC4NCi0gICAgICoNCi0gICAg
ICogQHBhcmFtIGl0ZXJhdG9yDQotICAgICAqICAgICAgICAgICAgVGhlIEZpZWxkUG9zaXRpb25J
dGVyYXRvciB0byBwb3B1bGF0ZSB3aXRoIGFsbCBvZiB0aGUgZmllbGRzIHByZXNlbnQgaW4gdGhl
IGZvcm1hdHRlZCBudW1iZXIuDQotICAgICAqIEBwYXJhbSBzdGF0dXMNCi0gICAgICogICAgICAg
ICAgICBTZXQgaWYgYW4gZXJyb3Igb2NjdXJzIHdoaWxlIHBvcHVsYXRpbmcgdGhlIEZpZWxkUG9z
aXRpb25JdGVyYXRvci4NCi0gICAgICogQGRyYWZ0IElDVSA2Mg0KLSAgICAgKiBAc2VlIFVOdW1i
ZXJGb3JtYXRGaWVsZHMNCi0gICAgICovDQotICAgIHZvaWQgZ2V0QWxsRmllbGRQb3NpdGlvbnMo
RmllbGRQb3NpdGlvbkl0ZXJhdG9yICZpdGVyYXRvciwgVUVycm9yQ29kZSAmc3RhdHVzKSBjb25z
dDsNCi0NCi0jaWZuZGVmIFVfSElERV9JTlRFUk5BTF9BUEkNCi0NCi0gICAgLyoqDQotICAgICAq
ICBHZXRzIHRoZSByYXcgRGVjaW1hbFF1YW50aXR5IGZvciBwbHVyYWwgcnVsZSBzZWxlY3Rpb24u
DQotICAgICAqICBAaW50ZXJuYWwNCi0gICAgICovDQotICAgIHZvaWQgZ2V0RGVjaW1hbFF1YW50
aXR5KGltcGw6OkRlY2ltYWxRdWFudGl0eSYgb3V0cHV0LCBVRXJyb3JDb2RlJiBzdGF0dXMpIGNv
bnN0Ow0KLQ0KLSAgICAvKioNCi0gICAgICogUG9wdWxhdGVzIHRoZSBtdXRhYmxlIGJ1aWxkZXIg
dHlwZSBGaWVsZFBvc2l0aW9uSXRlcmF0b3JIYW5kbGVyLg0KLSAgICAgKiBAaW50ZXJuYWwNCi0g
ICAgICovDQotICAgIHZvaWQgZ2V0QWxsRmllbGRQb3NpdGlvbnNJbXBsKEZpZWxkUG9zaXRpb25J
dGVyYXRvckhhbmRsZXImIGZwaWgsIFVFcnJvckNvZGUmIHN0YXR1cykgY29uc3Q7DQotDQotI2Vu
ZGlmDQotDQotICAgIC8qKg0KLSAgICAgKiBDb3B5aW5nIG5vdCBzdXBwb3J0ZWQ7IHVzZSBtb3Zl
IGNvbnN0cnVjdG9yIGluc3RlYWQuDQotICAgICAqLw0KLSAgICBGb3JtYXR0ZWROdW1iZXIoY29u
c3QgRm9ybWF0dGVkTnVtYmVyJikgPSBkZWxldGU7DQotDQotICAgIC8qKg0KLSAgICAgKiBDb3B5
aW5nIG5vdCBzdXBwb3J0ZWQ7IHVzZSBtb3ZlIGFzc2lnbm1lbnQgaW5zdGVhZC4NCi0gICAgICov
DQotICAgIEZvcm1hdHRlZE51bWJlciYgb3BlcmF0b3I9KGNvbnN0IEZvcm1hdHRlZE51bWJlciYp
ID0gZGVsZXRlOw0KLQ0KLSAgICAvKioNCi0gICAgICogTW92ZSBjb25zdHJ1Y3RvcjoNCi0gICAg
ICogTGVhdmVzIHRoZSBzb3VyY2UgRm9ybWF0dGVkTnVtYmVyIGluIGFuIHVuZGVmaW5lZCBzdGF0
ZS4NCi0gICAgICogQGRyYWZ0IElDVSA2Mg0KLSAgICAgKi8NCi0gICAgRm9ybWF0dGVkTnVtYmVy
KEZvcm1hdHRlZE51bWJlciYmIHNyYykgVV9OT0VYQ0VQVDsNCi0NCi0gICAgLyoqDQotICAgICAq
IE1vdmUgYXNzaWdubWVudDoNCi0gICAgICogTGVhdmVzIHRoZSBzb3VyY2UgRm9ybWF0dGVkTnVt
YmVyIGluIGFuIHVuZGVmaW5lZCBzdGF0ZS4NCi0gICAgICogQGRyYWZ0IElDVSA2Mg0KLSAgICAg
Ki8NCi0gICAgRm9ybWF0dGVkTnVtYmVyJiBvcGVyYXRvcj0oRm9ybWF0dGVkTnVtYmVyJiYgc3Jj
KSBVX05PRVhDRVBUOw0KLQ0KLSAgICAvKioNCi0gICAgICogRGVzdHJ1Y3QgYW4gaW5zdGFuY2Ug
b2YgRm9ybWF0dGVkTnVtYmVyLCBjbGVhbmluZyB1cCBhbnkgbWVtb3J5IGl0IG1pZ2h0IG93bi4N
Ci0gICAgICogQGRyYWZ0IElDVSA2MA0KLSAgICAgKi8NCi0gICAgfkZvcm1hdHRlZE51bWJlcigp
Ow0KLQ0KLSAgcHJpdmF0ZToNCi0gICAgLy8gQ2FuJ3QgdXNlIExvY2FsUG9pbnRlciBiZWNhdXNl
IFVGb3JtYXR0ZWROdW1iZXJEYXRhIGlzIGZvcndhcmQtZGVjbGFyZWQNCi0gICAgY29uc3QgaW1w
bDo6VUZvcm1hdHRlZE51bWJlckRhdGEgKmZSZXN1bHRzOw0KLQ0KLSAgICAvLyBFcnJvciBjb2Rl
IGZvciB0aGUgdGVybWluYWwgbWV0aG9kcw0KLSAgICBVRXJyb3JDb2RlIGZFcnJvckNvZGU7DQot
DQotICAgIC8qKg0KLSAgICAgKiBJbnRlcm5hbCBjb25zdHJ1Y3RvciBmcm9tIGRhdGEgdHlwZS4g
QWRvcHRzIHRoZSBkYXRhIHBvaW50ZXIuDQotICAgICAqIEBpbnRlcm5hbA0KLSAgICAgKi8NCi0g
ICAgZXhwbGljaXQgRm9ybWF0dGVkTnVtYmVyKGltcGw6OlVGb3JtYXR0ZWROdW1iZXJEYXRhICpy
ZXN1bHRzKQ0KLSAgICAgICAgOiBmUmVzdWx0cyhyZXN1bHRzKSwgZkVycm9yQ29kZShVX1pFUk9f
RVJST1IpIHt9Ow0KLQ0KLSAgICBleHBsaWNpdCBGb3JtYXR0ZWROdW1iZXIoVUVycm9yQ29kZSBl
cnJvckNvZGUpDQotICAgICAgICA6IGZSZXN1bHRzKG51bGxwdHIpLCBmRXJyb3JDb2RlKGVycm9y
Q29kZSkge307DQotDQotICAgIC8vIFRvIGdpdmUgTG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyIGZv
cm1hdCBtZXRob2RzIGFjY2VzcyB0byB0aGlzIGNsYXNzJ3MgY29uc3RydWN0b3I6DQotICAgIGZy
aWVuZCBjbGFzcyBMb2NhbGl6ZWROdW1iZXJGb3JtYXR0ZXI7DQotfTsNCi0NCi0vKioNCi0gKiBT
ZWUgdGhlIG1haW4gZGVzY3JpcHRpb24gaW4gbnVtYmVyZm9ybWF0dGVyLmggZm9yIGRvY3VtZW50
YXRpb24gYW5kIGV4YW1wbGVzLg0KLSAqDQotICogQGRyYWZ0IElDVSA2MA0KLSAqLw0KLWNsYXNz
IFVfSTE4Tl9BUEkgTnVtYmVyRm9ybWF0dGVyIGZpbmFsIHsNCi0gIHB1YmxpYzoNCi0gICAgLyoq
DQotICAgICAqIENhbGwgdGhpcyBtZXRob2QgYXQgdGhlIGJlZ2lubmluZyBvZiBhIE51bWJlckZv
cm1hdHRlciBmbHVlbnQgY2hhaW4gaW4gd2hpY2ggdGhlIGxvY2FsZSBpcyBub3QgY3VycmVudGx5
IGtub3duIGF0DQotICAgICAqIHRoZSBjYWxsIHNpdGUuDQotICAgICAqDQotICAgICAqIEByZXR1
cm4gQW4ge0BsaW5rIFVubG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyfSwgdG8gYmUgdXNlZCBmb3Ig
Y2hhaW5pbmcuDQotICAgICAqIEBkcmFmdCBJQ1UgNjANCi0gICAgICovDQotICAgIHN0YXRpYyBV
bmxvY2FsaXplZE51bWJlckZvcm1hdHRlciB3aXRoKCk7DQotDQotICAgIC8qKg0KLSAgICAgKiBD
YWxsIHRoaXMgbWV0aG9kIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBOdW1iZXJGb3JtYXR0ZXIgZmx1
ZW50IGNoYWluIGluIHdoaWNoIHRoZSBsb2NhbGUgaXMga25vd24gYXQgdGhlIGNhbGwNCi0gICAg
ICogc2l0ZS4NCi0gICAgICoNCi0gICAgICogQHBhcmFtIGxvY2FsZQ0KLSAgICAgKiAgICAgICAg
ICAgIFRoZSBsb2NhbGUgZnJvbSB3aGljaCB0byBsb2FkIGZvcm1hdHMgYW5kIHN5bWJvbHMgZm9y
IG51bWJlciBmb3JtYXR0aW5nLg0KLSAgICAgKiBAcmV0dXJuIEEge0BsaW5rIExvY2FsaXplZE51
bWJlckZvcm1hdHRlcn0sIHRvIGJlIHVzZWQgZm9yIGNoYWluaW5nLg0KLSAgICAgKiBAZHJhZnQg
SUNVIDYwDQotICAgICAqLw0KLSAgICBzdGF0aWMgTG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyIHdp
dGhMb2NhbGUoY29uc3QgTG9jYWxlICZsb2NhbGUpOw0KLQ0KLSAgICAvKioNCi0gICAgICogQ2Fs
bCB0aGlzIG1ldGhvZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgTnVtYmVyRm9ybWF0dGVyIGZsdWVu
dCBjaGFpbiB0byBjcmVhdGUgYW4gaW5zdGFuY2UgYmFzZWQNCi0gICAgICogb24gYSBnaXZlbiBu
dW1iZXIgc2tlbGV0b24gc3RyaW5nLg0KLSAgICAgKg0KLSAgICAgKiBAcGFyYW0gc2tlbGV0b24N
Ci0gICAgICogICAgICAgICAgICBUaGUgc2tlbGV0b24gc3RyaW5nIG9mZiBvZiB3aGljaCB0byBi
YXNlIHRoaXMgTnVtYmVyRm9ybWF0dGVyLg0KLSAgICAgKiBAcGFyYW0gc3RhdHVzDQotICAgICAq
ICAgICAgICAgICAgU2V0IHRvIFVfTlVNQkVSX1NLRUxFVE9OX1NZTlRBWF9FUlJPUiBpZiB0aGUg
c2tlbGV0b24gd2FzIGludmFsaWQuDQotICAgICAqIEByZXR1cm4gQW4gVW5sb2NhbGl6ZWROdW1i
ZXJGb3JtYXR0ZXIsIHRvIGJlIHVzZWQgZm9yIGNoYWluaW5nLg0KLSAgICAgKiBAZHJhZnQgSUNV
IDYyDQotICAgICAqLw0KLSAgICBzdGF0aWMgVW5sb2NhbGl6ZWROdW1iZXJGb3JtYXR0ZXIgZm9y
U2tlbGV0b24oY29uc3QgVW5pY29kZVN0cmluZyYgc2tlbGV0b24sIFVFcnJvckNvZGUmIHN0YXR1
cyk7DQotDQotICAgIC8qKg0KLSAgICAgKiBVc2UgZmFjdG9yeSBtZXRob2RzIGluc3RlYWQgb2Yg
dGhlIGNvbnN0cnVjdG9yIHRvIGNyZWF0ZSBhIE51bWJlckZvcm1hdHRlci4NCi0gICAgICovDQot
ICAgIE51bWJlckZvcm1hdHRlcigpID0gZGVsZXRlOw0KLX07DQotDQotfSAgLy8gbmFtZXNwYWNl
IG51bWJlcg0KLVVfTkFNRVNQQUNFX0VORA0KLQ0KLSNlbmRpZiAgLy8gVV9ISURFX0RSQUZUX0FQ
SQ0KLQ0KLSNlbmRpZiAvLyBfX05VTUJFUkZPUk1BVFRFUl9IX18NCi0NCi0jZW5kaWYgLyogI2lm
ICFVQ09ORklHX05PX0ZPUk1BVFRJTkcgKi8NCisvLyDCqSAyMDE3IGFuZCBsYXRlcjogVW5pY29k
ZSwgSW5jLiBhbmQgb3RoZXJzLgorLy8gTGljZW5zZSAmIHRlcm1zIG9mIHVzZTogaHR0cDovL3d3
dy51bmljb2RlLm9yZy9jb3B5cmlnaHQuaHRtbAorCisjaW5jbHVkZSAidW5pY29kZS91dHlwZXMu
aCIKKworI2lmICFVQ09ORklHX05PX0ZPUk1BVFRJTkcKKyNpZm5kZWYgX19OVU1CRVJGT1JNQVRU
RVJfSF9fCisjZGVmaW5lIF9fTlVNQkVSRk9STUFUVEVSX0hfXworCisjaW5jbHVkZSAidW5pY29k
ZS9hcHBlbmRhYmxlLmgiCisjaW5jbHVkZSAidW5pY29kZS9kY2ZtdHN5bS5oIgorI2luY2x1ZGUg
InVuaWNvZGUvY3VycnVuaXQuaCIKKyNpbmNsdWRlICJ1bmljb2RlL2ZpZWxkcG9zLmgiCisjaW5j
bHVkZSAidW5pY29kZS9mb3JtYXR0ZWR2YWx1ZS5oIgorI2luY2x1ZGUgInVuaWNvZGUvZnBvc2l0
ZXIuaCIKKyNpbmNsdWRlICJ1bmljb2RlL21lYXN1bml0LmgiCisjaW5jbHVkZSAidW5pY29kZS9u
b3VuaXQuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3BhcnNlZXJyLmgiCisjaW5jbHVkZSAidW5pY29k
ZS9wbHVycnVsZS5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWN1cnIuaCIKKyNpbmNsdWRlICJ1bmlj
b2RlL3VudW0uaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VudW1iZXJmb3JtYXR0ZXIuaCIKKyNpbmNs
dWRlICJ1bmljb2RlL3VvYmplY3QuaCIKKworI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisKKy8q
KgorICogXGZpbGUKKyAqIFxicmllZiBDKysgQVBJOiBMaWJyYXJ5IGZvciBsb2NhbGl6ZWQgbnVt
YmVyIGZvcm1hdHRpbmcgaW50cm9kdWNlZCBpbiBJQ1UgNjAuCisgKgorICogVGhpcyBsaWJyYXJ5
IHdhcyBpbnRyb2R1Y2VkIGluIElDVSA2MCB0byBzaW1wbGlmeSB0aGUgcHJvY2VzcyBvZiBmb3Jt
YXR0aW5nIGxvY2FsaXplZCBudW1iZXIgc3RyaW5ncy4KKyAqIEJhc2ljIHVzYWdlIGV4YW1wbGVz
OgorICoKKyAqIDxwcmU+CisgKiAvLyBNb3N0IGJhc2ljIHVzYWdlOgorICogTnVtYmVyRm9ybWF0
dGVyOjp3aXRoTG9jYWxlKC4uLikuZm9ybWF0KDEyMykudG9TdHJpbmcoKTsgIC8vIDEsMjM0IGlu
IGVuLVVTCisgKgorICogLy8gQ3VzdG9tIG5vdGF0aW9uLCB1bml0LCBhbmQgcm91bmRpbmcgcHJl
Y2lzaW9uOgorICogTnVtYmVyRm9ybWF0dGVyOjp3aXRoKCkKKyAqICAgICAubm90YXRpb24oTm90
YXRpb246OmNvbXBhY3RTaG9ydCgpKQorICogICAgIC51bml0KEN1cnJlbmN5VW5pdCgiRVVSIiwg
c3RhdHVzKSkKKyAqICAgICAucHJlY2lzaW9uKFByZWNpc2lvbjo6bWF4RGlnaXRzKDIpKQorICog
ICAgIC5sb2NhbGUoLi4uKQorICogICAgIC5mb3JtYXQoMTIzNCkKKyAqICAgICAudG9TdHJpbmco
KTsgIC8vIOKCrDEuMksgaW4gZW4tVVMKKyAqCisgKiAvLyBDcmVhdGUgYSBmb3JtYXR0ZXIgaW4g
YSBzaW5nbGV0b24gYnkgdmFsdWUgZm9yIHVzZSBsYXRlcjoKKyAqIHN0YXRpYyBjb25zdCBMb2Nh
bGl6ZWROdW1iZXJGb3JtYXR0ZXIgZm9ybWF0dGVyID0gTnVtYmVyRm9ybWF0dGVyOjp3aXRoTG9j
YWxlKC4uLikKKyAqICAgICAudW5pdChOb1VuaXQ6OnBlcmNlbnQoKSkKKyAqICAgICAucHJlY2lz
aW9uKFByZWNpc2lvbjo6Zml4ZWRGcmFjdGlvbigzKSk7CisgKiBmb3JtYXR0ZXIuZm9ybWF0KDUu
OTgzMSkudG9TdHJpbmcoKTsgIC8vIDUuOTgzJSBpbiBlbi1VUworICoKKyAqIC8vIENyZWF0ZSBh
ICJ0ZW1wbGF0ZSIgaW4gYSBzaW5nbGV0b24gdW5pcXVlX3B0ciBidXQgd2l0aG91dCBzZXR0aW5n
IGEgbG9jYWxlIHVudGlsIHRoZSBjYWxsIHNpdGU6CisgKiBzdGQ6OnVuaXF1ZV9wdHI8VW5sb2Nh
bGl6ZWROdW1iZXJGb3JtYXR0ZXI+IHRlbXBsYXRlID0gTnVtYmVyRm9ybWF0dGVyOjp3aXRoKCkK
KyAqICAgICAuc2lnbihVTnVtYmVyU2lnbkRpc3BsYXk6OlVOVU1fU0lHTl9BTFdBWVMpCisgKiAg
ICAgLnVuaXQoTWVhc3VyZVVuaXQ6OmdldE1ldGVyKCkpCisgKiAgICAgLnVuaXRXaWR0aChVTnVt
YmVyVW5pdFdpZHRoOjpVTlVNX1VOSVRfV0lEVEhfRlVMTF9OQU1FKQorICogICAgIC5jbG9uZSgp
OworICogdGVtcGxhdGUtPmxvY2FsZSguLi4pLmZvcm1hdCgxMjM0KS50b1N0cmluZygpOyAgLy8g
KzEsMjM0IG1ldGVycyBpbiBlbi1VUworICogPC9wcmU+CisgKgorICogPHA+CisgKiBUaGlzIEFQ
SSBvZmZlcnMgbW9yZSBmZWF0dXJlcyB0aGFuIERlY2ltYWxGb3JtYXQgYW5kIGlzIGdlYXJlZCB0
b3dhcmQgbmV3IHVzZXJzIG9mIElDVS4KKyAqCisgKiA8cD4KKyAqIE51bWJlckZvcm1hdHRlciBp
bnN0YW5jZXMgKGkuZS4sIExvY2FsaXplZE51bWJlckZvcm1hdHRlciBhbmQgVW5sb2NhbGl6ZWRO
dW1iZXJGb3JtYXR0ZXIpCisgKiBhcmUgaW1tdXRhYmxlIGFuZCB0aHJlYWQgc2FmZS4gVGhpcyBt
ZWFucyB0aGF0IGludm9raW5nIGEgY29uZmlndXJhdGlvbiBtZXRob2QgaGFzIG5vCisgKiBlZmZl
Y3Qgb24gdGhlIHJlY2VpdmluZyBpbnN0YW5jZTsgeW91IG11c3Qgc3RvcmUgYW5kIHVzZSB0aGUg
bmV3IG51bWJlciBmb3JtYXR0ZXIgaW5zdGFuY2UgaXQgcmV0dXJucyBpbnN0ZWFkLgorICoKKyAq
IDxwcmU+CisgKiBVbmxvY2FsaXplZE51bWJlckZvcm1hdHRlciBmb3JtYXR0ZXIgPSBVbmxvY2Fs
aXplZE51bWJlckZvcm1hdHRlcjo6d2l0aCgpLm5vdGF0aW9uKE5vdGF0aW9uOjpzY2llbnRpZmlj
KCkpOworICogZm9ybWF0dGVyLnByZWNpc2lvbihQcmVjaXNpb24ubWF4RnJhY3Rpb24oMikpOyAv
LyBkb2VzIG5vdGhpbmchCisgKiBmb3JtYXR0ZXIubG9jYWxlKExvY2FsZS5nZXRFbmdsaXNoKCkp
LmZvcm1hdCg5Ljg3NjUpLnRvU3RyaW5nKCk7IC8vIHByaW50cyAiOS44NzY1RTAiLCBub3QgIjku
ODhFMCIKKyAqIDwvcHJlPgorICoKKyAqIDxwPgorICogVGhpcyBBUEkgaXMgYmFzZWQgb24gdGhl
IDxlbT5mbHVlbnQ8L2VtPiBkZXNpZ24gcGF0dGVybiBwb3B1bGFyaXplZCBieSBsaWJyYXJpZXMg
c3VjaCBhcyBHb29nbGUncyBHdWF2YS4gRm9yCisgKiBleHRlbnNpdmUgZGV0YWlscyBvbiB0aGUg
ZGVzaWduIG9mIHRoaXMgQVBJLCByZWFkIDxhIGhyZWY9Imh0dHBzOi8vZ29vLmdsL3N6aTVWQiI+
dGhlIGRlc2lnbiBkb2M8L2E+LgorICoKKyAqIEBhdXRob3IgU2hhbmUgQ2FycgorICovCisKK1Vf
TkFNRVNQQUNFX0JFR0lOCisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zOgorY2xhc3MgSUZpeGVk
RGVjaW1hbDsKK2NsYXNzIEZpZWxkUG9zaXRpb25JdGVyYXRvckhhbmRsZXI7CisKK25hbWVzcGFj
ZSBudW1wYXJzZSB7CituYW1lc3BhY2UgaW1wbCB7CisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25z
OgorY2xhc3MgTnVtYmVyUGFyc2VySW1wbDsKK2NsYXNzIE11bHRpcGxpZXJQYXJzZUhhbmRsZXI7
CisKK30KK30KKworbmFtZXNwYWNlIG51bWJlciB7ICAvLyBpY3U6Om51bWJlcgorCisvLyBGb3J3
YXJkIGRlY2xhcmF0aW9uczoKK2NsYXNzIFVubG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyOworY2xh
c3MgTG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyOworY2xhc3MgRm9ybWF0dGVkTnVtYmVyOworY2xh
c3MgTm90YXRpb247CitjbGFzcyBTY2llbnRpZmljTm90YXRpb247CitjbGFzcyBQcmVjaXNpb247
CitjbGFzcyBGcmFjdGlvblByZWNpc2lvbjsKK2NsYXNzIEN1cnJlbmN5UHJlY2lzaW9uOworY2xh
c3MgSW5jcmVtZW50UHJlY2lzaW9uOworY2xhc3MgSW50ZWdlcldpZHRoOworCituYW1lc3BhY2Ug
aW1wbCB7CisKKy8vIGNhbid0IGJlICNpZm5kZWYgVV9ISURFX0lOVEVSTkFMX0FQSTsgcmVmZXJl
bmNlZCB0aHJvdWdob3V0IHRoaXMgZmlsZSBpbiBwdWJsaWMgY2xhc3NlcworLyoqCisgKiBEYXRh
dHlwZSBmb3IgbWluaW11bS9tYXhpbXVtIGZyYWN0aW9uIGRpZ2l0cy4gTXVzdCBiZSBhYmxlIHRv
IGhvbGQga01heEludEZyYWNTaWcuCisgKgorICogQGludGVybmFsCisgKi8KK3R5cGVkZWYgaW50
MTZfdCBkaWdpdHNfdDsKKworLy8gY2FuJ3QgYmUgI2lmbmRlZiBVX0hJREVfSU5URVJOQUxfQVBJ
OyBuZWVkZWQgZm9yIHN0cnVjdCBpbml0aWFsaXphdGlvbgorLyoqCisgKiBVc2UgYSBkZWZhdWx0
IHRocmVzaG9sZCBvZiAzLiBUaGlzIG1lYW5zIHRoYXQgdGhlIHRoaXJkIHRpbWUgLmZvcm1hdCgp
IGlzIGNhbGxlZCwgdGhlIGRhdGEgc3RydWN0dXJlcyBnZXQgYnVpbHQKKyAqIHVzaW5nIHRoZSAi
c2FmZSIgY29kZSBwYXRoLiBUaGUgZmlyc3QgdHdvIGNhbGxzIHRvIC5mb3JtYXQoKSB3aWxsIHRy
aWdnZXIgdGhlIHVuc2FmZSBjb2RlIHBhdGguCisgKgorICogQGludGVybmFsCisgKi8KK3N0YXRp
YyBjb25zdGV4cHIgaW50MzJfdCBrSW50ZXJuYWxEZWZhdWx0VGhyZXNob2xkID0gMzsKKworLy8g
Rm9yd2FyZCBkZWNsYXJhdGlvbnM6CitjbGFzcyBQYWRkZXI7CitzdHJ1Y3QgTWFjcm9Qcm9wczsK
K3N0cnVjdCBNaWNyb1Byb3BzOworY2xhc3MgRGVjaW1hbFF1YW50aXR5OworY2xhc3MgVUZvcm1h
dHRlZE51bWJlckRhdGE7CitjbGFzcyBOdW1iZXJGb3JtYXR0ZXJJbXBsOworc3RydWN0IFBhcnNl
ZFBhdHRlcm5JbmZvOworY2xhc3MgU2NpZW50aWZpY01vZGlmaWVyOworY2xhc3MgTXVsdGlwbGll
clByb2R1Y2VyOworY2xhc3MgUm91bmRpbmdJbXBsOworY2xhc3MgU2NpZW50aWZpY0hhbmRsZXI7
CitjbGFzcyBNb2RpZmllcjsKK2NsYXNzIE51bWJlclN0cmluZ0J1aWxkZXI7CitjbGFzcyBBZmZp
eFBhdHRlcm5Qcm92aWRlcjsKK2NsYXNzIE51bWJlclByb3BlcnR5TWFwcGVyOworc3RydWN0IERl
Y2ltYWxGb3JtYXRQcm9wZXJ0aWVzOworY2xhc3MgTXVsdGlwbGllckZvcm1hdEhhbmRsZXI7Citj
bGFzcyBDdXJyZW5jeVN5bWJvbHM7CitjbGFzcyBHZW5lcmF0b3JIZWxwZXJzOworY2xhc3MgRGVj
TnVtOworY2xhc3MgTnVtYmVyUmFuZ2VGb3JtYXR0ZXJJbXBsOworc3RydWN0IFJhbmdlTWFjcm9Q
cm9wczsKK3N0cnVjdCBVRm9ybWF0dGVkTnVtYmVySW1wbDsKKworLyoqCisgKiBVc2VkIGZvciBO
dW1iZXJSYW5nZUZvcm1hdHRlciBhbmQgaW1wbGVtZW50ZWQgaW4gbnVtcmFuZ2VfZmx1ZW50LmNw
cC4KKyAqIERlY2xhcmVkIGhlcmUgc28gaXQgY2FuIGJlIGZyaWVuZGVkLgorICoKKyAqIEBpbnRl
cm5hbAorICovCit2b2lkIHRvdWNoUmFuZ2VMb2NhbGVzKGltcGw6OlJhbmdlTWFjcm9Qcm9wcyYg
bWFjcm9zKTsKKworfSAvLyBuYW1lc3BhY2UgaW1wbAorCisvKioKKyAqIEV4dHJhIG5hbWUgcmVz
ZXJ2ZWQgaW4gY2FzZSBpdCBpcyBuZWVkZWQgaW4gdGhlIGZ1dHVyZS4KKyAqCisgKiBAZHJhZnQg
SUNVIDYzCisgKi8KK3R5cGVkZWYgTm90YXRpb24gQ29tcGFjdE5vdGF0aW9uOworCisvKioKKyAq
IEV4dHJhIG5hbWUgcmVzZXJ2ZWQgaW4gY2FzZSBpdCBpcyBuZWVkZWQgaW4gdGhlIGZ1dHVyZS4K
KyAqCisgKiBAZHJhZnQgSUNVIDYzCisgKi8KK3R5cGVkZWYgTm90YXRpb24gU2ltcGxlTm90YXRp
b247CisKKy8qKgorICogQSBjbGFzcyB0aGF0IGRlZmluZXMgdGhlIG5vdGF0aW9uIHN0eWxlIHRv
IGJlIHVzZWQgd2hlbiBmb3JtYXR0aW5nIG51bWJlcnMgaW4gTnVtYmVyRm9ybWF0dGVyLgorICoK
KyAqIEBkcmFmdCBJQ1UgNjAKKyAqLworY2xhc3MgVV9JMThOX0FQSSBOb3RhdGlvbiA6IHB1Ymxp
YyBVTWVtb3J5IHsKKyAgcHVibGljOgorICAgIC8qKgorICAgICAqIFByaW50IHRoZSBudW1iZXIg
dXNpbmcgc2NpZW50aWZpYyBub3RhdGlvbiAoYWxzbyBrbm93biBhcyBzY2llbnRpZmljIGZvcm0s
IHN0YW5kYXJkIGluZGV4IGZvcm0sIG9yIHN0YW5kYXJkIGZvcm0KKyAgICAgKiBpbiB0aGUgVUsp
LiBUaGUgZm9ybWF0IGZvciBzY2llbnRpZmljIG5vdGF0aW9uIHZhcmllcyBieSBsb2NhbGU7IGZv
ciBleGFtcGxlLCBtYW55IFdlc3Rlcm4gbG9jYWxlcyBkaXNwbGF5IHRoZQorICAgICAqIG51bWJl
ciBpbiB0aGUgZm9ybSAiI0UwIiwgd2hlcmUgdGhlIG51bWJlciBpcyBkaXNwbGF5ZWQgd2l0aCBv
bmUgZGlnaXQgYmVmb3JlIHRoZSBkZWNpbWFsIHNlcGFyYXRvciwgemVybyBvciBtb3JlCisgICAg
ICogZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHNlcGFyYXRvciwgYW5kIHRoZSBjb3JyZXNwb25k
aW5nIHBvd2VyIG9mIDEwIGRpc3BsYXllZCBhZnRlciB0aGUgIkUiLgorICAgICAqCisgICAgICog
PHA+CisgICAgICogRXhhbXBsZSBvdXRwdXRzIGluIDxlbT5lbi1VUzwvZW0+IHdoZW4gcHJpbnRp
bmcgOC43NjVFNCB0aHJvdWdoIDguNzY1RS0zOgorICAgICAqCisgICAgICogPHByZT4KKyAgICAg
KiA4Ljc2NUU0CisgICAgICogOC43NjVFMworICAgICAqIDguNzY1RTIKKyAgICAgKiA4Ljc2NUUx
CisgICAgICogOC43NjVFMAorICAgICAqIDguNzY1RS0xCisgICAgICogOC43NjVFLTIKKyAgICAg
KiA4Ljc2NUUtMworICAgICAqIDBFMAorICAgICAqIDwvcHJlPgorICAgICAqCisgICAgICogQHJl
dHVybiBBIFNjaWVudGlmaWNOb3RhdGlvbiBmb3IgY2hhaW5pbmcgb3IgcGFzc2luZyB0byB0aGUg
TnVtYmVyRm9ybWF0dGVyIG5vdGF0aW9uKCkgc2V0dGVyLgorICAgICAqIEBkcmFmdCBJQ1UgNjAK
KyAgICAgKi8KKyAgICBzdGF0aWMgU2NpZW50aWZpY05vdGF0aW9uIHNjaWVudGlmaWMoKTsKKwor
ICAgIC8qKgorICAgICAqIFByaW50IHRoZSBudW1iZXIgdXNpbmcgZW5naW5lZXJpbmcgbm90YXRp
b24sIGEgdmFyaWFudCBvZiBzY2llbnRpZmljIG5vdGF0aW9uIGluIHdoaWNoIHRoZSBleHBvbmVu
dCBtdXN0IGJlCisgICAgICogZGl2aXNpYmxlIGJ5IDMuCisgICAgICoKKyAgICAgKiA8cD4KKyAg
ICAgKiBFeGFtcGxlIG91dHB1dHMgaW4gPGVtPmVuLVVTPC9lbT4gd2hlbiBwcmludGluZyA4Ljc2
NUU0IHRocm91Z2ggOC43NjVFLTM6CisgICAgICoKKyAgICAgKiA8cHJlPgorICAgICAqIDg3LjY1
RTMKKyAgICAgKiA4Ljc2NUUzCisgICAgICogODc2LjVFMAorICAgICAqIDg3LjY1RTAKKyAgICAg
KiA4Ljc2NUUwCisgICAgICogODc2LjVFLTMKKyAgICAgKiA4Ny42NUUtMworICAgICAqIDguNzY1
RS0zCisgICAgICogMEUwCisgICAgICogPC9wcmU+CisgICAgICoKKyAgICAgKiBAcmV0dXJuIEEg
U2NpZW50aWZpY05vdGF0aW9uIGZvciBjaGFpbmluZyBvciBwYXNzaW5nIHRvIHRoZSBOdW1iZXJG
b3JtYXR0ZXIgbm90YXRpb24oKSBzZXR0ZXIuCisgICAgICogQGRyYWZ0IElDVSA2MAorICAgICAq
LworICAgIHN0YXRpYyBTY2llbnRpZmljTm90YXRpb24gZW5naW5lZXJpbmcoKTsKKworICAgIC8q
KgorICAgICAqIFByaW50IHRoZSBudW1iZXIgdXNpbmcgc2hvcnQtZm9ybSBjb21wYWN0IG5vdGF0
aW9uLgorICAgICAqCisgICAgICogPHA+CisgICAgICogPGVtPkNvbXBhY3Qgbm90YXRpb248L2Vt
PiwgZGVmaW5lZCBpbiBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzUgUGFydCAzIFNlY3Rp
b24gMi40LjEsIHByaW50cyBudW1iZXJzIHdpdGgKKyAgICAgKiBsb2NhbGl6ZWQgcHJlZml4ZXMg
b3Igc3VmZml4ZXMgY29ycmVzcG9uZGluZyB0byBkaWZmZXJlbnQgcG93ZXJzIG9mIHRlbi4gQ29t
cGFjdCBub3RhdGlvbiBpcyBzaW1pbGFyIHRvCisgICAgICogZW5naW5lZXJpbmcgbm90YXRpb24g
aW4gaG93IGl0IHNjYWxlcyBudW1iZXJzLgorICAgICAqCisgICAgICogPHA+CisgICAgICogQ29t
cGFjdCBub3RhdGlvbiBpcyBpZGVhbCBmb3IgZGlzcGxheWluZyBsYXJnZSBudW1iZXJzIChvdmVy
IH4xMDAwKSB0byBodW1hbnMgd2hpbGUgYXQgdGhlIHNhbWUgdGltZSBtaW5pbWl6aW5nCisgICAg
ICogc2NyZWVuIHJlYWwgZXN0YXRlLgorICAgICAqCisgICAgICogPHA+CisgICAgICogSW4gc2hv
cnQgZm9ybSwgdGhlIHBvd2VycyBvZiB0ZW4gYXJlIGFiYnJldmlhdGVkLiBJbiA8ZW0+ZW4tVVM8
L2VtPiwgdGhlIGFiYnJldmlhdGlvbnMgYXJlICJLIiBmb3IgdGhvdXNhbmRzLCAiTSIKKyAgICAg
KiBmb3IgbWlsbGlvbnMsICJCIiBmb3IgYmlsbGlvbnMsIGFuZCAiVCIgZm9yIHRyaWxsaW9ucy4g
RXhhbXBsZSBvdXRwdXRzIGluIDxlbT5lbi1VUzwvZW0+IHdoZW4gcHJpbnRpbmcgOC43NjVFNwor
ICAgICAqIHRocm91Z2ggOC43NjVFMDoKKyAgICAgKgorICAgICAqIDxwcmU+CisgICAgICogODhN
CisgICAgICogOC44TQorICAgICAqIDg3NksKKyAgICAgKiA4OEsKKyAgICAgKiA4LjhLCisgICAg
ICogODc2CisgICAgICogODgKKyAgICAgKiA4LjgKKyAgICAgKiA8L3ByZT4KKyAgICAgKgorICAg
ICAqIDxwPgorICAgICAqIFdoZW4gY29tcGFjdCBub3RhdGlvbiBpcyBzcGVjaWZpZWQgd2l0aG91
dCBhbiBleHBsaWNpdCByb3VuZGluZyBwcmVjaXNpb24sIG51bWJlcnMgYXJlIHJvdW5kZWQgb2Zm
IHRvIHRoZSBjbG9zZXN0CisgICAgICogaW50ZWdlciBhZnRlciBzY2FsaW5nIHRoZSBudW1iZXIg
YnkgdGhlIGNvcnJlc3BvbmRpbmcgcG93ZXIgb2YgMTAsIGJ1dCB3aXRoIGEgZGlnaXQgc2hvd24g
YWZ0ZXIgdGhlIGRlY2ltYWwKKyAgICAgKiBzZXBhcmF0b3IgaWYgdGhlcmUgaXMgb25seSBvbmUg
ZGlnaXQgYmVmb3JlIHRoZSBkZWNpbWFsIHNlcGFyYXRvci4gVGhlIGRlZmF1bHQgY29tcGFjdCBu
b3RhdGlvbiByb3VuZGluZyBwcmVjaXNpb24KKyAgICAgKiBpcyBlcXVpdmFsZW50IHRvOgorICAg
ICAqCisgICAgICogPHByZT4KKyAgICAgKiBQcmVjaXNpb246OmludGVnZXIoKS53aXRoTWluRGln
aXRzKDIpCisgICAgICogPC9wcmU+CisgICAgICoKKyAgICAgKiBAcmV0dXJuIEEgQ29tcGFjdE5v
dGF0aW9uIGZvciBwYXNzaW5nIHRvIHRoZSBOdW1iZXJGb3JtYXR0ZXIgbm90YXRpb24oKSBzZXR0
ZXIuCisgICAgICogQGRyYWZ0IElDVSA2MAorICAgICAqLworICAgIHN0YXRpYyBDb21wYWN0Tm90
YXRpb24gY29tcGFjdFNob3J0KCk7CisKKyAgICAvKioKKyAgICAgKiBQcmludCB0aGUgbnVtYmVy
IHVzaW5nIGxvbmctZm9ybSBjb21wYWN0IG5vdGF0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBv
biBjb21wYWN0IG5vdGF0aW9uLCBzZWUKKyAgICAgKiB7QGxpbmsgI2NvbXBhY3RTaG9ydH0uCisg
ICAgICoKKyAgICAgKiA8cD4KKyAgICAgKiBJbiBsb25nIGZvcm0sIHRoZSBwb3dlcnMgb2YgdGVu
IGFyZSBzcGVsbGVkIG91dCBmdWxseS4gRXhhbXBsZSBvdXRwdXRzIGluIDxlbT5lbi1VUzwvZW0+
IHdoZW4gcHJpbnRpbmcgOC43NjVFNworICAgICAqIHRocm91Z2ggOC43NjVFMDoKKyAgICAgKgor
ICAgICAqIDxwcmU+CisgICAgICogODggbWlsbGlvbgorICAgICAqIDguOCBtaWxsaW9uCisgICAg
ICogODc2IHRob3VzYW5kCisgICAgICogODggdGhvdXNhbmQKKyAgICAgKiA4LjggdGhvdXNhbmQK
KyAgICAgKiA4NzYKKyAgICAgKiA4OAorICAgICAqIDguOAorICAgICAqIDwvcHJlPgorICAgICAq
CisgICAgICogQHJldHVybiBBIENvbXBhY3ROb3RhdGlvbiBmb3IgcGFzc2luZyB0byB0aGUgTnVt
YmVyRm9ybWF0dGVyIG5vdGF0aW9uKCkgc2V0dGVyLgorICAgICAqIEBkcmFmdCBJQ1UgNjAKKyAg
ICAgKi8KKyAgICBzdGF0aWMgQ29tcGFjdE5vdGF0aW9uIGNvbXBhY3RMb25nKCk7CisKKyAgICAv
KioKKyAgICAgKiBQcmludCB0aGUgbnVtYmVyIHVzaW5nIHNpbXBsZSBub3RhdGlvbiB3aXRob3V0
IGFueSBzY2FsaW5nIGJ5IHBvd2VycyBvZiB0ZW4uIFRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZp
b3IuCisgICAgICoKKyAgICAgKiA8cD4KKyAgICAgKiBTaW5jZSB0aGlzIGlzIHRoZSBkZWZhdWx0
IGJlaGF2aW9yLCB0aGlzIG1ldGhvZCBuZWVkcyB0byBiZSBjYWxsZWQgb25seSB3aGVuIGl0IGlz
IG5lY2Vzc2FyeSB0byBvdmVycmlkZSBhCisgICAgICogcHJldmlvdXMgc2V0dGluZy4KKyAgICAg
KgorICAgICAqIDxwPgorICAgICAqIEV4YW1wbGUgb3V0cHV0cyBpbiA8ZW0+ZW4tVVM8L2VtPiB3
aGVuIHByaW50aW5nIDguNzY1RTcgdGhyb3VnaCA4Ljc2NUUwOgorICAgICAqCisgICAgICogPHBy
ZT4KKyAgICAgKiA4Nyw2NTAsMDAwCisgICAgICogOCw3NjUsMDAwCisgICAgICogODc2LDUwMAor
ICAgICAqIDg3LDY1MAorICAgICAqIDgsNzY1CisgICAgICogODc2LjUKKyAgICAgKiA4Ny42NQor
ICAgICAqIDguNzY1CisgICAgICogPC9wcmU+CisgICAgICoKKyAgICAgKiBAcmV0dXJuIEEgU2lt
cGxlTm90YXRpb24gZm9yIHBhc3NpbmcgdG8gdGhlIE51bWJlckZvcm1hdHRlciBub3RhdGlvbigp
IHNldHRlci4KKyAgICAgKiBAZHJhZnQgSUNVIDYwCisgICAgICovCisgICAgc3RhdGljIFNpbXBs
ZU5vdGF0aW9uIHNpbXBsZSgpOworCisgIHByaXZhdGU6CisgICAgZW51bSBOb3RhdGlvblR5cGUg
eworICAgICAgICBOVE5fU0NJRU5USUZJQywgTlROX0NPTVBBQ1QsIE5UTl9TSU1QTEUsIE5UTl9F
UlJPUgorICAgIH0gZlR5cGU7CisKKyAgICB1bmlvbiBOb3RhdGlvblVuaW9uIHsKKyAgICAgICAg
Ly8gRm9yIE5UTl9TQ0lFTlRJRklDCisgICAgICAgIC8qKiBAaW50ZXJuYWwgKi8KKyAgICAgICAg
c3RydWN0IFNjaWVudGlmaWNTZXR0aW5ncyB7CisgICAgICAgICAgICAvKiogQGludGVybmFsICov
CisgICAgICAgICAgICBpbnQ4X3QgZkVuZ2luZWVyaW5nSW50ZXJ2YWw7CisgICAgICAgICAgICAv
KiogQGludGVybmFsICovCisgICAgICAgICAgICBib29sIGZSZXF1aXJlTWluSW50OworICAgICAg
ICAgICAgLyoqIEBpbnRlcm5hbCAqLworICAgICAgICAgICAgaW1wbDo6ZGlnaXRzX3QgZk1pbkV4
cG9uZW50RGlnaXRzOworICAgICAgICAgICAgLyoqIEBpbnRlcm5hbCAqLworICAgICAgICAgICAg
VU51bWJlclNpZ25EaXNwbGF5IGZFeHBvbmVudFNpZ25EaXNwbGF5OworICAgICAgICB9IHNjaWVu
dGlmaWM7CisKKyAgICAgICAgLy8gRm9yIE5UTl9DT01QQUNUCisgICAgICAgIFVOdW1iZXJDb21w
YWN0U3R5bGUgY29tcGFjdFN0eWxlOworCisgICAgICAgIC8vIEZvciBOVE5fRVJST1IKKyAgICAg
ICAgVUVycm9yQ29kZSBlcnJvckNvZGU7CisgICAgfSBmVW5pb247CisKKyAgICB0eXBlZGVmIE5v
dGF0aW9uVW5pb246OlNjaWVudGlmaWNTZXR0aW5ncyBTY2llbnRpZmljU2V0dGluZ3M7CisKKyAg
ICBOb3RhdGlvbihjb25zdCBOb3RhdGlvblR5cGUgJnR5cGUsIGNvbnN0IE5vdGF0aW9uVW5pb24g
JnVuaW9uXykgOiBmVHlwZSh0eXBlKSwgZlVuaW9uKHVuaW9uXykge30KKworICAgIE5vdGF0aW9u
KFVFcnJvckNvZGUgZXJyb3JDb2RlKSA6IGZUeXBlKE5UTl9FUlJPUikgeworICAgICAgICBmVW5p
b24uZXJyb3JDb2RlID0gZXJyb3JDb2RlOworICAgIH0KKworICAgIE5vdGF0aW9uKCkgOiBmVHlw
ZShOVE5fU0lNUExFKSwgZlVuaW9uKCkge30KKworICAgIFVCb29sIGNvcHlFcnJvclRvKFVFcnJv
ckNvZGUgJnN0YXR1cykgY29uc3QgeworICAgICAgICBpZiAoZlR5cGUgPT0gTlROX0VSUk9SKSB7
CisgICAgICAgICAgICBzdGF0dXMgPSBmVW5pb24uZXJyb3JDb2RlOworICAgICAgICAgICAgcmV0
dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAg
IC8vIFRvIGFsbG93IE1hY3JvUHJvcHMgdG8gaW5pdGlhbGl6ZSBlbXB0eSBpbnN0YW5jZXM6Cisg
ICAgZnJpZW5kIHN0cnVjdCBpbXBsOjpNYWNyb1Byb3BzOworICAgIGZyaWVuZCBjbGFzcyBTY2ll
bnRpZmljTm90YXRpb247CisKKyAgICAvLyBUbyBhbGxvdyBpbXBsZW1lbnRhdGlvbiB0byBhY2Nl
c3MgaW50ZXJuYWwgdHlwZXM6CisgICAgZnJpZW5kIGNsYXNzIGltcGw6Ok51bWJlckZvcm1hdHRl
ckltcGw7CisgICAgZnJpZW5kIGNsYXNzIGltcGw6OlNjaWVudGlmaWNNb2RpZmllcjsKKyAgICBm
cmllbmQgY2xhc3MgaW1wbDo6U2NpZW50aWZpY0hhbmRsZXI7CisKKyAgICAvLyBUbyBhbGxvdyBh
Y2Nlc3MgdG8gdGhlIHNrZWxldG9uIGdlbmVyYXRpb24gY29kZToKKyAgICBmcmllbmQgY2xhc3Mg
aW1wbDo6R2VuZXJhdG9ySGVscGVyczsKK307CisKKy8qKgorICogQSBjbGFzcyB0aGF0IGRlZmlu
ZXMgdGhlIHNjaWVudGlmaWMgbm90YXRpb24gc3R5bGUgdG8gYmUgdXNlZCB3aGVuIGZvcm1hdHRp
bmcgbnVtYmVycyBpbiBOdW1iZXJGb3JtYXR0ZXIuCisgKgorICogPHA+CisgKiBUbyBjcmVhdGUg
YSBTY2llbnRpZmljTm90YXRpb24sIHVzZSBvbmUgb2YgdGhlIGZhY3RvcnkgbWV0aG9kcyBpbiB7
QGxpbmsgTm90YXRpb259LgorICoKKyAqIEBkcmFmdCBJQ1UgNjAKKyAqLworY2xhc3MgVV9JMThO
X0FQSSBTY2llbnRpZmljTm90YXRpb24gOiBwdWJsaWMgTm90YXRpb24geworICBwdWJsaWM6Cisg
ICAgLyoqCisgICAgICogU2V0cyB0aGUgbWluaW11bSBudW1iZXIgb2YgZGlnaXRzIHRvIHNob3cg
aW4gdGhlIGV4cG9uZW50IG9mIHNjaWVudGlmaWMgbm90YXRpb24sIHBhZGRpbmcgd2l0aCB6ZXJv
cyBpZgorICAgICAqIG5lY2Vzc2FyeS4gVXNlZnVsIGZvciBmaXhlZC13aWR0aCBkaXNwbGF5Lgor
ICAgICAqCisgICAgICogPHA+CisgICAgICogRm9yIGV4YW1wbGUsIHdpdGggbWluRXhwb25lbnRE
aWdpdHM9MiwgdGhlIG51bWJlciAxMjMgd2lsbCBiZSBwcmludGVkIGFzICIxLjIzRTAyIiBpbiA8
ZW0+ZW4tVVM8L2VtPiBpbnN0ZWFkIG9mCisgICAgICogdGhlIGRlZmF1bHQgIjEuMjNFMiIuCisg
ICAgICoKKyAgICAgKiBAcGFyYW0gbWluRXhwb25lbnREaWdpdHMKKyAgICAgKiAgICAgICAgICAg
IFRoZSBtaW5pbXVtIG51bWJlciBvZiBkaWdpdHMgdG8gc2hvdyBpbiB0aGUgZXhwb25lbnQuCisg
ICAgICogQHJldHVybiBBIFNjaWVudGlmaWNOb3RhdGlvbiwgZm9yIGNoYWluaW5nLgorICAgICAq
IEBkcmFmdCBJQ1UgNjAKKyAgICAgKi8KKyAgICBTY2llbnRpZmljTm90YXRpb24gd2l0aE1pbkV4
cG9uZW50RGlnaXRzKGludDMyX3QgbWluRXhwb25lbnREaWdpdHMpIGNvbnN0OworCisgICAgLyoq
CisgICAgICogU2V0cyB3aGV0aGVyIHRvIHNob3cgdGhlIHNpZ24gb24gcG9zaXRpdmUgYW5kIG5l
Z2F0aXZlIGV4cG9uZW50cyBpbiBzY2llbnRpZmljIG5vdGF0aW9uLiBUaGUgZGVmYXVsdCBpcyBB
VVRPLAorICAgICAqIHNob3dpbmcgdGhlIG1pbnVzIHNpZ24gYnV0IG5vdCB0aGUgcGx1cyBzaWdu
LgorICAgICAqCisgICAgICogPHA+CisgICAgICogRm9yIGV4YW1wbGUsIHdpdGggZXhwb25lbnRT
aWduRGlzcGxheT1BTFdBWVMsIHRoZSBudW1iZXIgMTIzIHdpbGwgYmUgcHJpbnRlZCBhcyAiMS4y
M0UrMiIgaW4gPGVtPmVuLVVTPC9lbT4KKyAgICAgKiBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0ICIx
LjIzRTIiLgorICAgICAqCisgICAgICogQHBhcmFtIGV4cG9uZW50U2lnbkRpc3BsYXkKKyAgICAg
KiAgICAgICAgICAgIFRoZSBzdHJhdGVneSBmb3IgZGlzcGxheWluZyB0aGUgc2lnbiBpbiB0aGUg
ZXhwb25lbnQuCisgICAgICogQHJldHVybiBBIFNjaWVudGlmaWNOb3RhdGlvbiwgZm9yIGNoYWlu
aW5nLgorICAgICAqIEBkcmFmdCBJQ1UgNjAKKyAgICAgKi8KKyAgICBTY2llbnRpZmljTm90YXRp
b24gd2l0aEV4cG9uZW50U2lnbkRpc3BsYXkoVU51bWJlclNpZ25EaXNwbGF5IGV4cG9uZW50U2ln
bkRpc3BsYXkpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgLy8gSW5oZXJpdCBjb25zdHJ1Y3Rv
cgorICAgIHVzaW5nIE5vdGF0aW9uOjpOb3RhdGlvbjsKKworICAgIC8vIFJhdyBjb25zdHJ1Y3Rv
ciBmb3IgTnVtYmVyUHJvcGVydHlNYXBwZXIKKyAgICBTY2llbnRpZmljTm90YXRpb24oaW50OF90
IGZFbmdpbmVlcmluZ0ludGVydmFsLCBib29sIGZSZXF1aXJlTWluSW50LCBpbXBsOjpkaWdpdHNf
dCBmTWluRXhwb25lbnREaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgIFVOdW1iZXJTaWdu
RGlzcGxheSBmRXhwb25lbnRTaWduRGlzcGxheSk7CisKKyAgICBmcmllbmQgY2xhc3MgTm90YXRp
b247CisKKyAgICAvLyBTbyB0aGF0IE51bWJlclByb3BlcnR5TWFwcGVyIGNhbiBjcmVhdGUgaW5z
dGFuY2VzCisgICAgZnJpZW5kIGNsYXNzIGltcGw6Ok51bWJlclByb3BlcnR5TWFwcGVyOworfTsK
KworLyoqCisgKiBFeHRyYSBuYW1lIHJlc2VydmVkIGluIGNhc2UgaXQgaXMgbmVlZGVkIGluIHRo
ZSBmdXR1cmUuCisgKgorICogQGRyYWZ0IElDVSA2MworICovCit0eXBlZGVmIFByZWNpc2lvbiBT
aWduaWZpY2FudERpZ2l0c1ByZWNpc2lvbjsKKworLyoqCisgKiBBIGNsYXNzIHRoYXQgZGVmaW5l
cyB0aGUgcm91bmRpbmcgcHJlY2lzaW9uIHRvIGJlIHVzZWQgd2hlbiBmb3JtYXR0aW5nIG51bWJl
cnMgaW4gTnVtYmVyRm9ybWF0dGVyLgorICoKKyAqIDxwPgorICogVG8gY3JlYXRlIGEgUHJlY2lz
aW9uLCB1c2Ugb25lIG9mIHRoZSBmYWN0b3J5IG1ldGhvZHMuCisgKgorICogQGRyYWZ0IElDVSA2
MAorICovCitjbGFzcyBVX0kxOE5fQVBJIFByZWNpc2lvbiA6IHB1YmxpYyBVTWVtb3J5IHsKKwor
ICBwdWJsaWM6CisgICAgLyoqCisgICAgICogU2hvdyBhbGwgYXZhaWxhYmxlIGRpZ2l0cyB0byBm
dWxsIHByZWNpc2lvbi4KKyAgICAgKgorICAgICAqIDxwPgorICAgICAqIDxzdHJvbmc+Tk9URTo8
L3N0cm9uZz4gV2hlbiBmb3JtYXR0aW5nIGEgPGVtPmRvdWJsZTwvZW0+LCB0aGlzIG1ldGhvZCwg
YWxvbmcgd2l0aCB7QGxpbmsgI21pbkZyYWN0aW9ufSBhbmQKKyAgICAgKiB7QGxpbmsgI21pblNp
Z25pZmljYW50RGlnaXRzfSwgd2lsbCB0cmlnZ2VyIGNvbXBsZXggYWxnb3JpdGhtIHNpbWlsYXIg
dG8gPGVtPkRyYWdvbjQ8L2VtPiB0byBkZXRlcm1pbmUgdGhlCisgICAgICogbG93LW9yZGVyIGRp
Z2l0cyBhbmQgdGhlIG51bWJlciBvZiBkaWdpdHMgdG8gZGlzcGxheSBiYXNlZCBvbiB0aGUgdmFs
dWUgb2YgdGhlIGRvdWJsZS4KKyAgICAgKiBJZiB0aGUgbnVtYmVyIG9mIGZyYWN0aW9uIHBsYWNl
cyBvciBzaWduaWZpY2FudCBkaWdpdHMgY2FuIGJlIGJvdW5kZWQsIGNvbnNpZGVyIHVzaW5nIHtA
bGluayAjbWF4RnJhY3Rpb259CisgICAgICogb3Ige0BsaW5rICNtYXhTaWduaWZpY2FudERpZ2l0
c30gaW5zdGVhZCB0byBtYXhpbWl6ZSBwZXJmb3JtYW5jZS4KKyAgICAgKiBGb3IgbW9yZSBpbmZv
cm1hdGlvbiwgcmVhZCB0aGUgZm9sbG93aW5nIGJsb2cgcG9zdC4KKyAgICAgKgorICAgICAqIDxw
PgorICAgICAqIGh0dHA6Ly93d3cuc2VycGVudGluZS5jb20vYmxvZy8yMDExLzA2LzI5L2hlcmUt
YmUtZHJhZ29ucy1hZHZhbmNlcy1pbi1wcm9ibGVtcy15b3UtZGlkbnQtZXZlbi1rbm93LXlvdS1o
YWQvCisgICAgICoKKyAgICAgKiBAcmV0dXJuIEEgUHJlY2lzaW9uIGZvciBjaGFpbmluZyBvciBw
YXNzaW5nIHRvIHRoZSBOdW1iZXJGb3JtYXR0ZXIgcHJlY2lzaW9uKCkgc2V0dGVyLgorICAgICAq
IEBkcmFmdCBJQ1UgNjAKKyAgICAgKi8KKyAgICBzdGF0aWMgUHJlY2lzaW9uIHVubGltaXRlZCgp
OworCisgICAgLyoqCisgICAgICogU2hvdyBudW1iZXJzIHJvdW5kZWQgaWYgbmVjZXNzYXJ5IHRv
IHRoZSBuZWFyZXN0IGludGVnZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIEEgRnJhY3Rpb25Q
cmVjaXNpb24gZm9yIGNoYWluaW5nIG9yIHBhc3NpbmcgdG8gdGhlIE51bWJlckZvcm1hdHRlciBw
cmVjaXNpb24oKSBzZXR0ZXIuCisgICAgICogQGRyYWZ0IElDVSA2MAorICAgICAqLworICAgIHN0
YXRpYyBGcmFjdGlvblByZWNpc2lvbiBpbnRlZ2VyKCk7CisKKyAgICAvKioKKyAgICAgKiBTaG93
IG51bWJlcnMgcm91bmRlZCBpZiBuZWNlc3NhcnkgdG8gYSBjZXJ0YWluIG51bWJlciBvZiBmcmFj
dGlvbiBwbGFjZXMgKG51bWVyYWxzIGFmdGVyIHRoZSBkZWNpbWFsIHNlcGFyYXRvcikuCisgICAg
ICogQWRkaXRpb25hbGx5LCBwYWQgd2l0aCB6ZXJvcyB0byBlbnN1cmUgdGhhdCB0aGlzIG51bWJl
ciBvZiBwbGFjZXMgYXJlIGFsd2F5cyBzaG93bi4KKyAgICAgKgorICAgICAqIDxwPgorICAgICAq
IEV4YW1wbGUgb3V0cHV0IHdpdGggbWluTWF4RnJhY3Rpb25QbGFjZXMgPSAzOgorICAgICAqCisg
ICAgICogPHA+CisgICAgICogODcsNjUwLjAwMDxicj4KKyAgICAgKiA4LDc2NS4wMDA8YnI+Cisg
ICAgICogODc2LjUwMDxicj4KKyAgICAgKiA4Ny42NTA8YnI+CisgICAgICogOC43NjU8YnI+Cisg
ICAgICogMC44NzY8YnI+CisgICAgICogMC4wODg8YnI+CisgICAgICogMC4wMDk8YnI+CisgICAg
ICogMC4wMDAgKHplcm8pCisgICAgICoKKyAgICAgKiA8cD4KKyAgICAgKiBUaGlzIG1ldGhvZCBp
cyBlcXVpdmFsZW50IHRvIHtAbGluayAjbWluTWF4RnJhY3Rpb259IHdpdGggYm90aCBhcmd1bWVu
dHMgZXF1YWwuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbWluTWF4RnJhY3Rpb25QbGFjZXMKKyAg
ICAgKiAgICAgICAgICAgIFRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIG51bWJlciBvZiBudW1lcmFs
cyB0byBkaXNwbGF5IGFmdGVyIHRoZSBkZWNpbWFsIHNlcGFyYXRvciAocm91bmRpbmcgaWYgdG9v
CisgICAgICogICAgICAgICAgICBsb25nIG9yIHBhZGRpbmcgd2l0aCB6ZXJvcyBpZiB0b28gc2hv
cnQpLgorICAgICAqIEByZXR1cm4gQSBGcmFjdGlvblByZWNpc2lvbiBmb3IgY2hhaW5pbmcgb3Ig
cGFzc2luZyB0byB0aGUgTnVtYmVyRm9ybWF0dGVyIHByZWNpc2lvbigpIHNldHRlci4KKyAgICAg
KiBAZHJhZnQgSUNVIDYwCisgICAgICovCisgICAgc3RhdGljIEZyYWN0aW9uUHJlY2lzaW9uIGZp
eGVkRnJhY3Rpb24oaW50MzJfdCBtaW5NYXhGcmFjdGlvblBsYWNlcyk7CisKKyAgICAvKioKKyAg
ICAgKiBBbHdheXMgc2hvdyBhdCBsZWFzdCBhIGNlcnRhaW4gbnVtYmVyIG9mIGZyYWN0aW9uIHBs
YWNlcyBhZnRlciB0aGUgZGVjaW1hbCBzZXBhcmF0b3IsIHBhZGRpbmcgd2l0aCB6ZXJvcyBpZgor
ICAgICAqIG5lY2Vzc2FyeS4gRG8gbm90IHBlcmZvcm0gcm91bmRpbmcgKGRpc3BsYXkgbnVtYmVy
cyB0byB0aGVpciBmdWxsIHByZWNpc2lvbikuCisgICAgICoKKyAgICAgKiA8cD4KKyAgICAgKiA8
c3Ryb25nPk5PVEU6PC9zdHJvbmc+IElmIHlvdSBhcmUgZm9ybWF0dGluZyA8ZW0+ZG91Ymxlczwv
ZW0+LCBzZWUgdGhlIHBlcmZvcm1hbmNlIG5vdGUgaW4ge0BsaW5rICN1bmxpbWl0ZWR9LgorICAg
ICAqCisgICAgICogQHBhcmFtIG1pbkZyYWN0aW9uUGxhY2VzCisgICAgICogICAgICAgICAgICBU
aGUgbWluaW11bSBudW1iZXIgb2YgbnVtZXJhbHMgdG8gZGlzcGxheSBhZnRlciB0aGUgZGVjaW1h
bCBzZXBhcmF0b3IgKHBhZGRpbmcgd2l0aCB6ZXJvcyBpZgorICAgICAqICAgICAgICAgICAgbmVj
ZXNzYXJ5KS4KKyAgICAgKiBAcmV0dXJuIEEgRnJhY3Rpb25QcmVjaXNpb24gZm9yIGNoYWluaW5n
IG9yIHBhc3NpbmcgdG8gdGhlIE51bWJlckZvcm1hdHRlciBwcmVjaXNpb24oKSBzZXR0ZXIuCisg
ICAgICogQGRyYWZ0IElDVSA2MAorICAgICAqLworICAgIHN0YXRpYyBGcmFjdGlvblByZWNpc2lv
biBtaW5GcmFjdGlvbihpbnQzMl90IG1pbkZyYWN0aW9uUGxhY2VzKTsKKworICAgIC8qKgorICAg
ICAqIFNob3cgbnVtYmVycyByb3VuZGVkIGlmIG5lY2Vzc2FyeSB0byBhIGNlcnRhaW4gbnVtYmVy
IG9mIGZyYWN0aW9uIHBsYWNlcyAobnVtZXJhbHMgYWZ0ZXIgdGhlIGRlY2ltYWwgc2VwYXJhdG9y
KS4KKyAgICAgKiBVbmxpa2UgdGhlIG90aGVyIGZyYWN0aW9uIHJvdW5kaW5nIHN0cmF0ZWdpZXMs
IHRoaXMgc3RyYXRlZ3kgZG9lcyA8ZW0+bm90PC9lbT4gcGFkIHplcm9zIHRvIHRoZSBlbmQgb2Yg
dGhlCisgICAgICogbnVtYmVyLgorICAgICAqCisgICAgICogQHBhcmFtIG1heEZyYWN0aW9uUGxh
Y2VzCisgICAgICogICAgICAgICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgbnVtZXJhbHMgdG8g
ZGlzcGxheSBhZnRlciB0aGUgZGVjaW1hbCBtYXJrIChyb3VuZGluZyBpZiBuZWNlc3NhcnkpLgor
ICAgICAqIEByZXR1cm4gQSBGcmFjdGlvblByZWNpc2lvbiBmb3IgY2hhaW5pbmcgb3IgcGFzc2lu
ZyB0byB0aGUgTnVtYmVyRm9ybWF0dGVyIHByZWNpc2lvbigpIHNldHRlci4KKyAgICAgKiBAZHJh
ZnQgSUNVIDYwCisgICAgICovCisgICAgc3RhdGljIEZyYWN0aW9uUHJlY2lzaW9uIG1heEZyYWN0
aW9uKGludDMyX3QgbWF4RnJhY3Rpb25QbGFjZXMpOworCisgICAgLyoqCisgICAgICogU2hvdyBu
dW1iZXJzIHJvdW5kZWQgaWYgbmVjZXNzYXJ5IHRvIGEgY2VydGFpbiBudW1iZXIgb2YgZnJhY3Rp
b24gcGxhY2VzIChudW1lcmFscyBhZnRlciB0aGUgZGVjaW1hbCBzZXBhcmF0b3IpOworICAgICAq
IGluIGFkZGl0aW9uLCBhbHdheXMgc2hvdyBhdCBsZWFzdCBhIGNlcnRhaW4gbnVtYmVyIG9mIHBs
YWNlcyBhZnRlciB0aGUgZGVjaW1hbCBzZXBhcmF0b3IsIHBhZGRpbmcgd2l0aCB6ZXJvcyBpZgor
ICAgICAqIG5lY2Vzc2FyeS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBtaW5GcmFjdGlvblBsYWNl
cworICAgICAqICAgICAgICAgICAgVGhlIG1pbmltdW0gbnVtYmVyIG9mIG51bWVyYWxzIHRvIGRp
c3BsYXkgYWZ0ZXIgdGhlIGRlY2ltYWwgc2VwYXJhdG9yIChwYWRkaW5nIHdpdGggemVyb3MgaWYK
KyAgICAgKiAgICAgICAgICAgIG5lY2Vzc2FyeSkuCisgICAgICogQHBhcmFtIG1heEZyYWN0aW9u
UGxhY2VzCisgICAgICogICAgICAgICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgbnVtZXJhbHMg
dG8gZGlzcGxheSBhZnRlciB0aGUgZGVjaW1hbCBzZXBhcmF0b3IgKHJvdW5kaW5nIGlmIG5lY2Vz
c2FyeSkuCisgICAgICogQHJldHVybiBBIEZyYWN0aW9uUHJlY2lzaW9uIGZvciBjaGFpbmluZyBv
ciBwYXNzaW5nIHRvIHRoZSBOdW1iZXJGb3JtYXR0ZXIgcHJlY2lzaW9uKCkgc2V0dGVyLgorICAg
ICAqIEBkcmFmdCBJQ1UgNjAKKyAgICAgKi8KKyAgICBzdGF0aWMgRnJhY3Rpb25QcmVjaXNpb24g
bWluTWF4RnJhY3Rpb24oaW50MzJfdCBtaW5GcmFjdGlvblBsYWNlcywgaW50MzJfdCBtYXhGcmFj
dGlvblBsYWNlcyk7CisKKyAgICAvKioKKyAgICAgKiBTaG93IG51bWJlcnMgcm91bmRlZCBpZiBu
ZWNlc3NhcnkgdG8gYSBjZXJ0YWluIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgb3Igc2ln
bmlmaWNhbnQgZmlndXJlcy4gQWRkaXRpb25hbGx5LAorICAgICAqIHBhZCB3aXRoIHplcm9zIHRv
IGVuc3VyZSB0aGF0IHRoaXMgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cy9maWd1cmVzIGFy
ZSBhbHdheXMgc2hvd24uCisgICAgICoKKyAgICAgKiA8cD4KKyAgICAgKiBUaGlzIG1ldGhvZCBp
cyBlcXVpdmFsZW50IHRvIHtAbGluayAjbWluTWF4U2lnbmlmaWNhbnREaWdpdHN9IHdpdGggYm90
aCBhcmd1bWVudHMgZXF1YWwuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbWluTWF4U2lnbmlmaWNh
bnREaWdpdHMKKyAgICAgKiAgICAgICAgICAgIFRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIG51bWJl
ciBvZiBzaWduaWZpY2FudCBkaWdpdHMgdG8gZGlzcGxheSAocm91bmRpbmcgaWYgdG9vIGxvbmcg
b3IgcGFkZGluZyB3aXRoCisgICAgICogICAgICAgICAgICB6ZXJvcyBpZiB0b28gc2hvcnQpLgor
ICAgICAqIEByZXR1cm4gQSBwcmVjaXNpb24gZm9yIGNoYWluaW5nIG9yIHBhc3NpbmcgdG8gdGhl
IE51bWJlckZvcm1hdHRlciBwcmVjaXNpb24oKSBzZXR0ZXIuCisgICAgICogQGRyYWZ0IElDVSA2
MgorICAgICAqLworICAgIHN0YXRpYyBTaWduaWZpY2FudERpZ2l0c1ByZWNpc2lvbiBmaXhlZFNp
Z25pZmljYW50RGlnaXRzKGludDMyX3QgbWluTWF4U2lnbmlmaWNhbnREaWdpdHMpOworCisgICAg
LyoqCisgICAgICogQWx3YXlzIHNob3cgYXQgbGVhc3QgYSBjZXJ0YWluIG51bWJlciBvZiBzaWdu
aWZpY2FudCBkaWdpdHMvZmlndXJlcywgcGFkZGluZyB3aXRoIHplcm9zIGlmIG5lY2Vzc2FyeS4g
RG8gbm90CisgICAgICogcGVyZm9ybSByb3VuZGluZyAoZGlzcGxheSBudW1iZXJzIHRvIHRoZWly
IGZ1bGwgcHJlY2lzaW9uKS4KKyAgICAgKgorICAgICAqIDxwPgorICAgICAqIDxzdHJvbmc+Tk9U
RTo8L3N0cm9uZz4gSWYgeW91IGFyZSBmb3JtYXR0aW5nIDxlbT5kb3VibGVzPC9lbT4sIHNlZSB0
aGUgcGVyZm9ybWFuY2Ugbm90ZSBpbiB7QGxpbmsgI3VubGltaXRlZH0uCisgICAgICoKKyAgICAg
KiBAcGFyYW0gbWluU2lnbmlmaWNhbnREaWdpdHMKKyAgICAgKiAgICAgICAgICAgIFRoZSBtaW5p
bXVtIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgdG8gZGlzcGxheSAocGFkZGluZyB3aXRo
IHplcm9zIGlmIHRvbyBzaG9ydCkuCisgICAgICogQHJldHVybiBBIHByZWNpc2lvbiBmb3IgY2hh
aW5pbmcgb3IgcGFzc2luZyB0byB0aGUgTnVtYmVyRm9ybWF0dGVyIHByZWNpc2lvbigpIHNldHRl
ci4KKyAgICAgKiBAZHJhZnQgSUNVIDYyCisgICAgICovCisgICAgc3RhdGljIFNpZ25pZmljYW50
RGlnaXRzUHJlY2lzaW9uIG1pblNpZ25pZmljYW50RGlnaXRzKGludDMyX3QgbWluU2lnbmlmaWNh
bnREaWdpdHMpOworCisgICAgLyoqCisgICAgICogU2hvdyBudW1iZXJzIHJvdW5kZWQgaWYgbmVj
ZXNzYXJ5IHRvIGEgY2VydGFpbiBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzL2ZpZ3VyZXMu
CisgICAgICoKKyAgICAgKiBAcGFyYW0gbWF4U2lnbmlmaWNhbnREaWdpdHMKKyAgICAgKiAgICAg
ICAgICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgdG8gZGlzcGxh
eSAocm91bmRpbmcgaWYgdG9vIGxvbmcpLgorICAgICAqIEByZXR1cm4gQSBwcmVjaXNpb24gZm9y
IGNoYWluaW5nIG9yIHBhc3NpbmcgdG8gdGhlIE51bWJlckZvcm1hdHRlciBwcmVjaXNpb24oKSBz
ZXR0ZXIuCisgICAgICogQGRyYWZ0IElDVSA2MgorICAgICAqLworICAgIHN0YXRpYyBTaWduaWZp
Y2FudERpZ2l0c1ByZWNpc2lvbiBtYXhTaWduaWZpY2FudERpZ2l0cyhpbnQzMl90IG1heFNpZ25p
ZmljYW50RGlnaXRzKTsKKworICAgIC8qKgorICAgICAqIFNob3cgbnVtYmVycyByb3VuZGVkIGlm
IG5lY2Vzc2FyeSB0byBhIGNlcnRhaW4gbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cy9maWd1
cmVzOyBpbiBhZGRpdGlvbiwgYWx3YXlzIHNob3cgYXQKKyAgICAgKiBsZWFzdCBhIGNlcnRhaW4g
bnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cywgcGFkZGluZyB3aXRoIHplcm9zIGlmIG5lY2Vz
c2FyeS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBtaW5TaWduaWZpY2FudERpZ2l0cworICAgICAq
ICAgICAgICAgICAgVGhlIG1pbmltdW0gbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyB0byBk
aXNwbGF5IChwYWRkaW5nIHdpdGggemVyb3MgaWYgbmVjZXNzYXJ5KS4KKyAgICAgKiBAcGFyYW0g
bWF4U2lnbmlmaWNhbnREaWdpdHMKKyAgICAgKiAgICAgICAgICAgIFRoZSBtYXhpbXVtIG51bWJl
ciBvZiBzaWduaWZpY2FudCBkaWdpdHMgdG8gZGlzcGxheSAocm91bmRpbmcgaWYgbmVjZXNzYXJ5
KS4KKyAgICAgKiBAcmV0dXJuIEEgcHJlY2lzaW9uIGZvciBjaGFpbmluZyBvciBwYXNzaW5nIHRv
IHRoZSBOdW1iZXJGb3JtYXR0ZXIgcHJlY2lzaW9uKCkgc2V0dGVyLgorICAgICAqIEBkcmFmdCBJ
Q1UgNjIKKyAgICAgKi8KKyAgICBzdGF0aWMgU2lnbmlmaWNhbnREaWdpdHNQcmVjaXNpb24gbWlu
TWF4U2lnbmlmaWNhbnREaWdpdHMoaW50MzJfdCBtaW5TaWduaWZpY2FudERpZ2l0cywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50MzJfdCBtYXhTaWduaWZpY2FudERpZ2l0cyk7CisKKyAgICAvKioKKyAgICAgKiBTaG93IG51
bWJlcnMgcm91bmRlZCBpZiBuZWNlc3NhcnkgdG8gdGhlIGNsb3Nlc3QgbXVsdGlwbGUgb2YgYSBj
ZXJ0YWluIHJvdW5kaW5nIGluY3JlbWVudC4gRm9yIGV4YW1wbGUsIGlmIHRoZQorICAgICAqIHJv
dW5kaW5nIGluY3JlbWVudCBpcyAwLjUsIHRoZW4gcm91bmQgMS4yIHRvIDEgYW5kIHJvdW5kIDEu
MyB0byAxLjUuCisgICAgICoKKyAgICAgKiA8cD4KKyAgICAgKiBJbiBvcmRlciB0byBlbnN1cmUg
dGhhdCBudW1iZXJzIGFyZSBwYWRkZWQgdG8gdGhlIGFwcHJvcHJpYXRlIG51bWJlciBvZiBmcmFj
dGlvbiBwbGFjZXMsIGNhbGwKKyAgICAgKiB3aXRoTWluRnJhY3Rpb24oKSBvbiB0aGUgcmV0dXJu
IHZhbHVlIG9mIHRoaXMgbWV0aG9kLgorICAgICAqIEZvciBleGFtcGxlLCB0byByb3VuZCB0byB0
aGUgbmVhcmVzdCAwLjUgYW5kIGFsd2F5cyBkaXNwbGF5IDIgbnVtZXJhbHMgYWZ0ZXIgdGhlCisg
ICAgICogZGVjaW1hbCBzZXBhcmF0b3IgKHRvIGRpc3BsYXkgMS4yIGFzICIxLjAwIiBhbmQgMS4z
IGFzICIxLjUwIiksIHlvdSBjYW4gcnVuOgorICAgICAqCisgICAgICogPHByZT4KKyAgICAgKiBQ
cmVjaXNpb246OmluY3JlbWVudCgwLjUpLndpdGhNaW5GcmFjdGlvbigyKQorICAgICAqIDwvcHJl
PgorICAgICAqCisgICAgICogQHBhcmFtIHJvdW5kaW5nSW5jcmVtZW50CisgICAgICogICAgICAg
ICAgICBUaGUgaW5jcmVtZW50IHRvIHdoaWNoIHRvIHJvdW5kIG51bWJlcnMuCisgICAgICogQHJl
dHVybiBBIHByZWNpc2lvbiBmb3IgY2hhaW5pbmcgb3IgcGFzc2luZyB0byB0aGUgTnVtYmVyRm9y
bWF0dGVyIHByZWNpc2lvbigpIHNldHRlci4KKyAgICAgKiBAZHJhZnQgSUNVIDYwCisgICAgICov
CisgICAgc3RhdGljIEluY3JlbWVudFByZWNpc2lvbiBpbmNyZW1lbnQoZG91YmxlIHJvdW5kaW5n
SW5jcmVtZW50KTsKKworICAgIC8qKgorICAgICAqIFNob3cgbnVtYmVycyByb3VuZGVkIGFuZCBw
YWRkZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBmb3IgdGhlIGN1cnJlbmN5IHVuaXQuIFRoZSBt
b3N0IGNvbW1vbgorICAgICAqIHJvdW5kaW5nIHByZWNpc2lvbiBzZXR0aW5ncyBmb3IgY3VycmVu
Y2llcyBpbmNsdWRlIDxjb2RlPlByZWNpc2lvbjo6Zml4ZWRGcmFjdGlvbigyKTwvY29kZT4sCisg
ICAgICogPGNvZGU+UHJlY2lzaW9uOjppbnRlZ2VyKCk8L2NvZGU+LCBhbmQgPGNvZGU+UHJlY2lz
aW9uOjppbmNyZW1lbnQoMC4wNSk8L2NvZGU+IGZvciBjYXNoIHRyYW5zYWN0aW9ucworICAgICAq
ICgibmlja2VsIHJvdW5kaW5nIikuCisgICAgICoKKyAgICAgKiA8cD4KKyAgICAgKiBUaGUgZXhh
Y3Qgcm91bmRpbmcgZGV0YWlscyB3aWxsIGJlIHJlc29sdmVkIGF0IHJ1bnRpbWUgYmFzZWQgb24g
dGhlIGN1cnJlbmN5IHVuaXQgc3BlY2lmaWVkIGluIHRoZQorICAgICAqIE51bWJlckZvcm1hdHRl
ciBjaGFpbi4gVG8gcm91bmQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBmb3Igb25lIGN1cnJlbmN5
IHdoaWxlIGRpc3BsYXlpbmcgdGhlIHN5bWJvbCBmb3IgYW5vdGhlcgorICAgICAqIGN1cnJlbmN5
LCB0aGUgd2l0aEN1cnJlbmN5KCkgbWV0aG9kIGNhbiBiZSBjYWxsZWQgb24gdGhlIHJldHVybiB2
YWx1ZSBvZiB0aGlzIG1ldGhvZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjdXJyZW5jeVVzYWdl
CisgICAgICogICAgICAgICAgICBFaXRoZXIgU1RBTkRBUkQgKGZvciBkaWdpdGFsIHRyYW5zYWN0
aW9ucykgb3IgQ0FTSCAoZm9yIHRyYW5zYWN0aW9ucyB3aGVyZSB0aGUgcm91bmRpbmcgaW5jcmVt
ZW50IG1heQorICAgICAqICAgICAgICAgICAgYmUgbGltaXRlZCBieSB0aGUgYXZhaWxhYmxlIGRl
bm9taW5hdGlvbnMgb2YgY2FzaCBvciBjb2lucykuCisgICAgICogQHJldHVybiBBIEN1cnJlbmN5
UHJlY2lzaW9uIGZvciBjaGFpbmluZyBvciBwYXNzaW5nIHRvIHRoZSBOdW1iZXJGb3JtYXR0ZXIg
cHJlY2lzaW9uKCkgc2V0dGVyLgorICAgICAqIEBkcmFmdCBJQ1UgNjAKKyAgICAgKi8KKyAgICBz
dGF0aWMgQ3VycmVuY3lQcmVjaXNpb24gY3VycmVuY3koVUN1cnJlbmN5VXNhZ2UgY3VycmVuY3lV
c2FnZSk7CisKKyAgcHJpdmF0ZToKKyAgICBlbnVtIFByZWNpc2lvblR5cGUgeworICAgICAgICBS
TkRfQk9HVVMsCisgICAgICAgIFJORF9OT05FLAorICAgICAgICBSTkRfRlJBQ1RJT04sCisgICAg
ICAgIFJORF9TSUdOSUZJQ0FOVCwKKyAgICAgICAgUk5EX0ZSQUNUSU9OX1NJR05JRklDQU5ULAor
CisgICAgICAgIC8vIFVzZWQgZm9yIHN0cmFuZ2UgaW5jcmVtZW50cyBsaWtlIDMuMTQuCisgICAg
ICAgIFJORF9JTkNSRU1FTlQsCisKKyAgICAgICAgLy8gVXNlZCBmb3IgaW5jcmVtZW50cyB3aXRo
IDEgYXMgdGhlIG9ubHkgZGlnaXQuIFRoaXMgaXMgZGlmZmVyZW50IHRoYW4gZnJhY3Rpb24KKyAg
ICAgICAgLy8gcm91bmRpbmcgYmVjYXVzZSBpdCBzdXBwb3J0cyBoYXZpbmcgYWRkaXRpb25hbCB0
cmFpbGluZyB6ZXJvcy4gRm9yIGV4YW1wbGUsIHRoaXMKKyAgICAgICAgLy8gY2xhc3MgaXMgdXNl
ZCB0byByb3VuZCB3aXRoIHRoZSBpbmNyZW1lbnQgMC4wMTAuCisgICAgICAgIFJORF9JTkNSRU1F
TlRfT05FLAorCisgICAgICAgIC8vIFVzZWQgZm9yIGluY3JlbWVudHMgd2l0aCA1IGFzIHRoZSBv
bmx5IGRpZ2l0IChuaWNrZWwgcm91bmRpbmcpLgorICAgICAgICBSTkRfSU5DUkVNRU5UX0ZJVkUs
CisKKyAgICAgICAgUk5EX0NVUlJFTkNZLAorICAgICAgICBSTkRfRVJST1IKKyAgICB9IGZUeXBl
OworCisgICAgdW5pb24gUHJlY2lzaW9uVW5pb24geworICAgICAgICAvKiogQGludGVybmFsICov
CisgICAgICAgIHN0cnVjdCBGcmFjdGlvblNpZ25pZmljYW50U2V0dGluZ3MgeworICAgICAgICAg
ICAgLy8gRm9yIFJORF9GUkFDVElPTiwgUk5EX1NJR05JRklDQU5ULCBhbmQgUk5EX0ZSQUNUSU9O
X1NJR05JRklDQU5UCisgICAgICAgICAgICAvKiogQGludGVybmFsICovCisgICAgICAgICAgICBp
bXBsOjpkaWdpdHNfdCBmTWluRnJhYzsKKyAgICAgICAgICAgIC8qKiBAaW50ZXJuYWwgKi8KKyAg
ICAgICAgICAgIGltcGw6OmRpZ2l0c190IGZNYXhGcmFjOworICAgICAgICAgICAgLyoqIEBpbnRl
cm5hbCAqLworICAgICAgICAgICAgaW1wbDo6ZGlnaXRzX3QgZk1pblNpZzsKKyAgICAgICAgICAg
IC8qKiBAaW50ZXJuYWwgKi8KKyAgICAgICAgICAgIGltcGw6OmRpZ2l0c190IGZNYXhTaWc7Cisg
ICAgICAgIH0gZnJhY1NpZzsKKyAgICAgICAgLyoqIEBpbnRlcm5hbCAqLworICAgICAgICBzdHJ1
Y3QgSW5jcmVtZW50U2V0dGluZ3MgeworICAgICAgICAgICAgLy8gRm9yIFJORF9JTkNSRU1FTlQs
IFJORF9JTkNSRU1FTlRfT05FLCBhbmQgUk5EX0lOQ1JFTUVOVF9GSVZFCisgICAgICAgICAgICAv
KiogQGludGVybmFsICovCisgICAgICAgICAgICBkb3VibGUgZkluY3JlbWVudDsKKyAgICAgICAg
ICAgIC8qKiBAaW50ZXJuYWwgKi8KKyAgICAgICAgICAgIGltcGw6OmRpZ2l0c190IGZNaW5GcmFj
OworICAgICAgICAgICAgLyoqIEBpbnRlcm5hbCAqLworICAgICAgICAgICAgaW1wbDo6ZGlnaXRz
X3QgZk1heEZyYWM7CisgICAgICAgIH0gaW5jcmVtZW50OworICAgICAgICBVQ3VycmVuY3lVc2Fn
ZSBjdXJyZW5jeVVzYWdlOyAvLyBGb3IgUk5EX0NVUlJFTkNZCisgICAgICAgIFVFcnJvckNvZGUg
ZXJyb3JDb2RlOyAvLyBGb3IgUk5EX0VSUk9SCisgICAgfSBmVW5pb247CisKKyAgICB0eXBlZGVm
IFByZWNpc2lvblVuaW9uOjpGcmFjdGlvblNpZ25pZmljYW50U2V0dGluZ3MgRnJhY3Rpb25TaWdu
aWZpY2FudFNldHRpbmdzOworICAgIHR5cGVkZWYgUHJlY2lzaW9uVW5pb246OkluY3JlbWVudFNl
dHRpbmdzIEluY3JlbWVudFNldHRpbmdzOworCisgICAgLyoqIFRoZSBQcmVjaXNpb24gZW5jYXBz
dWxhdGVzIHRoZSBSb3VuZGluZ01vZGUgd2hlbiB1c2VkIHdpdGhpbiB0aGUgaW1wbGVtZW50YXRp
b24uICovCisgICAgVU51bWJlckZvcm1hdFJvdW5kaW5nTW9kZSBmUm91bmRpbmdNb2RlOworCisg
ICAgUHJlY2lzaW9uKGNvbnN0IFByZWNpc2lvblR5cGUmIHR5cGUsIGNvbnN0IFByZWNpc2lvblVu
aW9uJiB1bmlvbl8sCisgICAgICAgICAgICAgIFVOdW1iZXJGb3JtYXRSb3VuZGluZ01vZGUgcm91
bmRpbmdNb2RlKQorICAgICAgICAgICAgOiBmVHlwZSh0eXBlKSwgZlVuaW9uKHVuaW9uXyksIGZS
b3VuZGluZ01vZGUocm91bmRpbmdNb2RlKSB7fQorCisgICAgUHJlY2lzaW9uKFVFcnJvckNvZGUg
ZXJyb3JDb2RlKSA6IGZUeXBlKFJORF9FUlJPUikgeworICAgICAgICBmVW5pb24uZXJyb3JDb2Rl
ID0gZXJyb3JDb2RlOworICAgIH0KKworICAgIFByZWNpc2lvbigpIDogZlR5cGUoUk5EX0JPR1VT
KSB7fQorCisgICAgYm9vbCBpc0JvZ3VzKCkgY29uc3QgeworICAgICAgICByZXR1cm4gZlR5cGUg
PT0gUk5EX0JPR1VTOworICAgIH0KKworICAgIFVCb29sIGNvcHlFcnJvclRvKFVFcnJvckNvZGUg
JnN0YXR1cykgY29uc3QgeworICAgICAgICBpZiAoZlR5cGUgPT0gUk5EX0VSUk9SKSB7CisgICAg
ICAgICAgICBzdGF0dXMgPSBmVW5pb24uZXJyb3JDb2RlOworICAgICAgICAgICAgcmV0dXJuIFRS
VUU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIC8vIE9u
IHRoZSBwYXJlbnQgdHlwZSBzbyB0aGF0IHRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgaW50ZXJu
YWxseSBvbiBQcmVjaXNpb24gaW5zdGFuY2VzLgorICAgIFByZWNpc2lvbiB3aXRoQ3VycmVuY3ko
Y29uc3QgQ3VycmVuY3lVbml0ICZjdXJyZW5jeSwgVUVycm9yQ29kZSAmc3RhdHVzKSBjb25zdDsK
KworICAgIHN0YXRpYyBGcmFjdGlvblByZWNpc2lvbiBjb25zdHJ1Y3RGcmFjdGlvbihpbnQzMl90
IG1pbkZyYWMsIGludDMyX3QgbWF4RnJhYyk7CisKKyAgICBzdGF0aWMgUHJlY2lzaW9uIGNvbnN0
cnVjdFNpZ25pZmljYW50KGludDMyX3QgbWluU2lnLCBpbnQzMl90IG1heFNpZyk7CisKKyAgICBz
dGF0aWMgUHJlY2lzaW9uCisgICAgY29uc3RydWN0RnJhY3Rpb25TaWduaWZpY2FudChjb25zdCBG
cmFjdGlvblByZWNpc2lvbiAmYmFzZSwgaW50MzJfdCBtaW5TaWcsIGludDMyX3QgbWF4U2lnKTsK
KworICAgIHN0YXRpYyBJbmNyZW1lbnRQcmVjaXNpb24gY29uc3RydWN0SW5jcmVtZW50KGRvdWJs
ZSBpbmNyZW1lbnQsIGludDMyX3QgbWluRnJhYyk7CisKKyAgICBzdGF0aWMgQ3VycmVuY3lQcmVj
aXNpb24gY29uc3RydWN0Q3VycmVuY3koVUN1cnJlbmN5VXNhZ2UgdXNhZ2UpOworCisgICAgc3Rh
dGljIFByZWNpc2lvbiBjb25zdHJ1Y3RQYXNzVGhyb3VnaCgpOworCisgICAgLy8gVG8gYWxsb3cg
TWFjcm9Qcm9wcy9NaWNyb1Byb3BzIHRvIGluaXRpYWxpemUgYm9ndXMgaW5zdGFuY2VzOgorICAg
IGZyaWVuZCBzdHJ1Y3QgaW1wbDo6TWFjcm9Qcm9wczsKKyAgICBmcmllbmQgc3RydWN0IGltcGw6
Ok1pY3JvUHJvcHM7CisKKyAgICAvLyBUbyBhbGxvdyBOdW1iZXJGb3JtYXR0ZXJJbXBsIHRvIGFj
Y2VzcyBpc0JvZ3VzKCkgYW5kIG90aGVyIGludGVybmFsIG1ldGhvZHM6CisgICAgZnJpZW5kIGNs
YXNzIGltcGw6Ok51bWJlckZvcm1hdHRlckltcGw7CisKKyAgICAvLyBUbyBhbGxvdyBOdW1iZXJQ
cm9wZXJ0eU1hcHBlciB0byBjcmVhdGUgaW5zdGFuY2VzIGZyb20gRGVjaW1hbEZvcm1hdFByb3Bl
cnRpZXM6CisgICAgZnJpZW5kIGNsYXNzIGltcGw6Ok51bWJlclByb3BlcnR5TWFwcGVyOworCisg
ICAgLy8gVG8gYWxsb3cgYWNjZXNzIHRvIHRoZSBtYWluIGltcGxlbWVudGF0aW9uIGNsYXNzOgor
ICAgIGZyaWVuZCBjbGFzcyBpbXBsOjpSb3VuZGluZ0ltcGw7CisKKyAgICAvLyBUbyBhbGxvdyBj
aGlsZCBjbGFzc2VzIHRvIGNhbGwgcHJpdmF0ZSBtZXRob2RzOgorICAgIGZyaWVuZCBjbGFzcyBG
cmFjdGlvblByZWNpc2lvbjsKKyAgICBmcmllbmQgY2xhc3MgQ3VycmVuY3lQcmVjaXNpb247Cisg
ICAgZnJpZW5kIGNsYXNzIEluY3JlbWVudFByZWNpc2lvbjsKKworICAgIC8vIFRvIGFsbG93IGFj
Y2VzcyB0byB0aGUgc2tlbGV0b24gZ2VuZXJhdGlvbiBjb2RlOgorICAgIGZyaWVuZCBjbGFzcyBp
bXBsOjpHZW5lcmF0b3JIZWxwZXJzOworfTsKKworLyoqCisgKiBBIGNsYXNzIHRoYXQgZGVmaW5l
cyBhIHJvdW5kaW5nIHByZWNpc2lvbiBiYXNlZCBvbiBhIG51bWJlciBvZiBmcmFjdGlvbiBwbGFj
ZXMgYW5kIG9wdGlvbmFsbHkgc2lnbmlmaWNhbnQgZGlnaXRzIHRvIGJlCisgKiB1c2VkIHdoZW4g
Zm9ybWF0dGluZyBudW1iZXJzIGluIE51bWJlckZvcm1hdHRlci4KKyAqCisgKiA8cD4KKyAqIFRv
IGNyZWF0ZSBhIEZyYWN0aW9uUHJlY2lzaW9uLCB1c2Ugb25lIG9mIHRoZSBmYWN0b3J5IG1ldGhv
ZHMgb24gUHJlY2lzaW9uLgorICoKKyAqIEBkcmFmdCBJQ1UgNjAKKyAqLworY2xhc3MgVV9JMThO
X0FQSSBGcmFjdGlvblByZWNpc2lvbiA6IHB1YmxpYyBQcmVjaXNpb24geworICBwdWJsaWM6Cisg
ICAgLyoqCisgICAgICogRW5zdXJlIHRoYXQgbm8gbGVzcyB0aGFuIHRoaXMgbnVtYmVyIG9mIHNp
Z25pZmljYW50IGRpZ2l0cyBhcmUgcmV0YWluZWQgd2hlbiByb3VuZGluZyBhY2NvcmRpbmcgdG8g
ZnJhY3Rpb24KKyAgICAgKiBydWxlcy4KKyAgICAgKgorICAgICAqIDxwPgorICAgICAqIEZvciBl
eGFtcGxlLCB3aXRoIGludGVnZXIgcm91bmRpbmcsIHRoZSBudW1iZXIgMy4xNDEgYmVjb21lcyAi
MyIuIEhvd2V2ZXIsIHdpdGggbWluaW11bSBmaWd1cmVzIHNldCB0byAyLCAzLjE0MQorICAgICAq
IGJlY29tZXMgIjMuMSIgaW5zdGVhZC4KKyAgICAgKgorICAgICAqIDxwPgorICAgICAqIFRoaXMg
c2V0dGluZyBkb2VzIG5vdCBhZmZlY3QgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvcy4gRm9y
IGV4YW1wbGUsIDMuMDEgd291bGQgcHJpbnQgYXMgIjMiLCBub3QgIjMuMCIuCisgICAgICoKKyAg
ICAgKiBAcGFyYW0gbWluU2lnbmlmaWNhbnREaWdpdHMKKyAgICAgKiAgICAgICAgICAgIFRoZSBu
dW1iZXIgb2Ygc2lnbmlmaWNhbnQgZmlndXJlcyB0byBndWFyYW50ZWUuCisgICAgICogQHJldHVy
biBBIHByZWNpc2lvbiBmb3IgY2hhaW5pbmcgb3IgcGFzc2luZyB0byB0aGUgTnVtYmVyRm9ybWF0
dGVyIHByZWNpc2lvbigpIHNldHRlci4KKyAgICAgKiBAZHJhZnQgSUNVIDYwCisgICAgICovCisg
ICAgUHJlY2lzaW9uIHdpdGhNaW5EaWdpdHMoaW50MzJfdCBtaW5TaWduaWZpY2FudERpZ2l0cykg
Y29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBFbnN1cmUgdGhhdCBubyBtb3JlIHRoYW4gdGhpcyBu
dW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIGFyZSByZXRhaW5lZCB3aGVuIHJvdW5kaW5nIGFj
Y29yZGluZyB0byBmcmFjdGlvbgorICAgICAqIHJ1bGVzLgorICAgICAqCisgICAgICogPHA+Cisg
ICAgICogRm9yIGV4YW1wbGUsIHdpdGggaW50ZWdlciByb3VuZGluZywgdGhlIG51bWJlciAxMjMu
NCBiZWNvbWVzICIxMjMiLiBIb3dldmVyLCB3aXRoIG1heGltdW0gZmlndXJlcyBzZXQgdG8gMiwg
MTIzLjQKKyAgICAgKiBiZWNvbWVzICIxMjAiIGluc3RlYWQuCisgICAgICoKKyAgICAgKiA8cD4K
KyAgICAgKiBUaGlzIHNldHRpbmcgZG9lcyBub3QgYWZmZWN0IHRoZSBudW1iZXIgb2YgdHJhaWxp
bmcgemVyb3MuIEZvciBleGFtcGxlLCB3aXRoIGZpeGVkIGZyYWN0aW9uIG9mIDIsIDEyMy40IHdv
dWxkCisgICAgICogYmVjb21lICIxMjAuMDAiLgorICAgICAqCisgICAgICogQHBhcmFtIG1heFNp
Z25pZmljYW50RGlnaXRzCisgICAgICogICAgICAgICAgICBSb3VuZCB0aGUgbnVtYmVyIHRvIG5v
IG1vcmUgdGhhbiB0aGlzIG51bWJlciBvZiBzaWduaWZpY2FudCBmaWd1cmVzLgorICAgICAqIEBy
ZXR1cm4gQSBwcmVjaXNpb24gZm9yIGNoYWluaW5nIG9yIHBhc3NpbmcgdG8gdGhlIE51bWJlckZv
cm1hdHRlciBwcmVjaXNpb24oKSBzZXR0ZXIuCisgICAgICogQGRyYWZ0IElDVSA2MAorICAgICAq
LworICAgIFByZWNpc2lvbiB3aXRoTWF4RGlnaXRzKGludDMyX3QgbWF4U2lnbmlmaWNhbnREaWdp
dHMpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgLy8gSW5oZXJpdCBjb25zdHJ1Y3RvcgorICAg
IHVzaW5nIFByZWNpc2lvbjo6UHJlY2lzaW9uOworCisgICAgLy8gVG8gYWxsb3cgcGFyZW50IGNs
YXNzIHRvIGNhbGwgdGhpcyBjbGFzcydzIGNvbnN0cnVjdG9yOgorICAgIGZyaWVuZCBjbGFzcyBQ
cmVjaXNpb247Cit9OworCisvKioKKyAqIEEgY2xhc3MgdGhhdCBkZWZpbmVzIGEgcm91bmRpbmcg
cHJlY2lzaW9uIHBhcmFtZXRlcml6ZWQgYnkgYSBjdXJyZW5jeSB0byBiZSB1c2VkIHdoZW4gZm9y
bWF0dGluZyBudW1iZXJzIGluCisgKiBOdW1iZXJGb3JtYXR0ZXIuCisgKgorICogPHA+CisgKiBU
byBjcmVhdGUgYSBDdXJyZW5jeVByZWNpc2lvbiwgdXNlIG9uZSBvZiB0aGUgZmFjdG9yeSBtZXRo
b2RzIG9uIFByZWNpc2lvbi4KKyAqCisgKiBAZHJhZnQgSUNVIDYwCisgKi8KK2NsYXNzIFVfSTE4
Tl9BUEkgQ3VycmVuY3lQcmVjaXNpb24gOiBwdWJsaWMgUHJlY2lzaW9uIHsKKyAgcHVibGljOgor
ICAgIC8qKgorICAgICAgKiBBc3NvY2lhdGVzIGEgY3VycmVuY3kgd2l0aCB0aGlzIHJvdW5kaW5n
IHByZWNpc2lvbi4KKyAgICAgICoKKyAgICAgICogPHA+CisgICAgICAqIDxzdHJvbmc+Q2FsbGlu
ZyB0aGlzIG1ldGhvZCBpcyA8ZW0+bm90IHJlcXVpcmVkPC9lbT48L3N0cm9uZz4sIGJlY2F1c2Ug
dGhlIGN1cnJlbmN5IHNwZWNpZmllZCBpbiB1bml0KCkKKyAgICAgICogaXMgYXV0b21hdGljYWxs
eSBhcHBsaWVkIHRvIGN1cnJlbmN5IHJvdW5kaW5nIHByZWNpc2lvbnMuIEhvd2V2ZXIsCisgICAg
ICAqIHRoaXMgbWV0aG9kIGVuYWJsZXMgeW91IHRvIG92ZXJyaWRlIHRoYXQgYXV0b21hdGljIGFz
c29jaWF0aW9uLgorICAgICAgKgorICAgICAgKiA8cD4KKyAgICAgICogVGhpcyBtZXRob2QgYWxz
byBlbmFibGVzIG51bWJlcnMgdG8gYmUgZm9ybWF0dGVkIHVzaW5nIGN1cnJlbmN5IHJvdW5kaW5n
IHJ1bGVzIHdpdGhvdXQgZXhwbGljaXRseSB1c2luZyBhCisgICAgICAqIGN1cnJlbmN5IGZvcm1h
dC4KKyAgICAgICoKKyAgICAgICogQHBhcmFtIGN1cnJlbmN5CisgICAgICAqICAgICAgICAgICAg
VGhlIGN1cnJlbmN5IHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgcm91bmRpbmcgcHJlY2lzaW9uLgor
ICAgICAgKiBAcmV0dXJuIEEgcHJlY2lzaW9uIGZvciBjaGFpbmluZyBvciBwYXNzaW5nIHRvIHRo
ZSBOdW1iZXJGb3JtYXR0ZXIgcHJlY2lzaW9uKCkgc2V0dGVyLgorICAgICAgKiBAZHJhZnQgSUNV
IDYwCisgICAgICAqLworICAgIFByZWNpc2lvbiB3aXRoQ3VycmVuY3koY29uc3QgQ3VycmVuY3lV
bml0ICZjdXJyZW5jeSkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICAvLyBJbmhlcml0IGNvbnN0
cnVjdG9yCisgICAgdXNpbmcgUHJlY2lzaW9uOjpQcmVjaXNpb247CisKKyAgICAvLyBUbyBhbGxv
dyBwYXJlbnQgY2xhc3MgdG8gY2FsbCB0aGlzIGNsYXNzJ3MgY29uc3RydWN0b3I6CisgICAgZnJp
ZW5kIGNsYXNzIFByZWNpc2lvbjsKK307CisKKy8qKgorICogQSBjbGFzcyB0aGF0IGRlZmluZXMg
YSByb3VuZGluZyBwcmVjaXNpb24gcGFyYW1ldGVyaXplZCBieSBhIHJvdW5kaW5nIGluY3JlbWVu
dCB0byBiZSB1c2VkIHdoZW4gZm9ybWF0dGluZyBudW1iZXJzIGluCisgKiBOdW1iZXJGb3JtYXR0
ZXIuCisgKgorICogPHA+CisgKiBUbyBjcmVhdGUgYW4gSW5jcmVtZW50UHJlY2lzaW9uLCB1c2Ug
b25lIG9mIHRoZSBmYWN0b3J5IG1ldGhvZHMgb24gUHJlY2lzaW9uLgorICoKKyAqIEBkcmFmdCBJ
Q1UgNjAKKyAqLworY2xhc3MgVV9JMThOX0FQSSBJbmNyZW1lbnRQcmVjaXNpb24gOiBwdWJsaWMg
UHJlY2lzaW9uIHsKKyAgcHVibGljOgorICAgIC8qKgorICAgICAqIFNwZWNpZmllcyB0aGUgbWlu
aW11bSBudW1iZXIgb2YgZnJhY3Rpb24gZGlnaXRzIHRvIHJlbmRlciBhZnRlciB0aGUgZGVjaW1h
bCBzZXBhcmF0b3IsIHBhZGRpbmcgd2l0aCB6ZXJvcyBpZgorICAgICAqIG5lY2Vzc2FyeS4gIEJ5
IGRlZmF1bHQsIG5vIHRyYWlsaW5nIHplcm9zIGFyZSBhZGRlZC4KKyAgICAgKgorICAgICAqIDxw
PgorICAgICAqIEZvciBleGFtcGxlLCBpZiB0aGUgcm91bmRpbmcgaW5jcmVtZW50IGlzIDAuNSBh
bmQgbWluRnJhYyBpcyAyLCB0aGVuIHRoZSByZXN1bHRpbmcgc3RyaW5ncyBpbmNsdWRlICIwLjAw
IiwKKyAgICAgKiAiMC41MCIsICIxLjAwIiwgYW5kICIxLjUwIi4KKyAgICAgKgorICAgICAqIDxw
PgorICAgICAqIE5vdGU6IEluIElDVTRKLCB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgYWNjb21wbGlz
aGVkIHZpYSB0aGUgc2NhbGUgb2YgdGhlIEJpZ0RlY2ltYWwgcm91bmRpbmcgaW5jcmVtZW50Lgor
ICAgICAqCisgICAgICogQHBhcmFtIG1pbkZyYWMgVGhlIG1pbmltdW0gbnVtYmVyIG9mIGRpZ2l0
cyBhZnRlciB0aGUgZGVjaW1hbCBzZXBhcmF0b3IuCisgICAgICogQHJldHVybiBBIHByZWNpc2lv
biBmb3IgY2hhaW5pbmcgb3IgcGFzc2luZyB0byB0aGUgTnVtYmVyRm9ybWF0dGVyIHByZWNpc2lv
bigpIHNldHRlci4KKyAgICAgKiBAZHJhZnQgSUNVIDYwCisgICAgICovCisgICAgUHJlY2lzaW9u
IHdpdGhNaW5GcmFjdGlvbihpbnQzMl90IG1pbkZyYWMpIGNvbnN0OworCisgIHByaXZhdGU6Cisg
ICAgLy8gSW5oZXJpdCBjb25zdHJ1Y3RvcgorICAgIHVzaW5nIFByZWNpc2lvbjo6UHJlY2lzaW9u
OworCisgICAgLy8gVG8gYWxsb3cgcGFyZW50IGNsYXNzIHRvIGNhbGwgdGhpcyBjbGFzcydzIGNv
bnN0cnVjdG9yOgorICAgIGZyaWVuZCBjbGFzcyBQcmVjaXNpb247Cit9OworCisvKioKKyAqIEEg
Y2xhc3MgdGhhdCBkZWZpbmVzIHRoZSBzdHJhdGVneSBmb3IgcGFkZGluZyBhbmQgdHJ1bmNhdGlu
ZyBpbnRlZ2VycyBiZWZvcmUgdGhlIGRlY2ltYWwgc2VwYXJhdG9yLgorICoKKyAqIDxwPgorICog
VG8gY3JlYXRlIGFuIEludGVnZXJXaWR0aCwgdXNlIG9uZSBvZiB0aGUgZmFjdG9yeSBtZXRob2Rz
LgorICoKKyAqIEBkcmFmdCBJQ1UgNjAKKyAqIEBzZWUgTnVtYmVyRm9ybWF0dGVyCisgKi8KK2Ns
YXNzIFVfSTE4Tl9BUEkgSW50ZWdlcldpZHRoIDogcHVibGljIFVNZW1vcnkgeworICBwdWJsaWM6
CisgICAgLyoqCisgICAgICogUGFkIG51bWJlcnMgYXQgdGhlIGJlZ2lubmluZyB3aXRoIHplcm9z
IHRvIGd1YXJhbnRlZSBhIGNlcnRhaW4gbnVtYmVyIG9mIG51bWVyYWxzIGJlZm9yZSB0aGUgZGVj
aW1hbCBzZXBhcmF0b3IuCisgICAgICoKKyAgICAgKiA8cD4KKyAgICAgKiBGb3IgZXhhbXBsZSwg
d2l0aCBtaW5JbnQ9MywgdGhlIG51bWJlciA1NSB3aWxsIGdldCBwcmludGVkIGFzICIwNTUiLgor
ICAgICAqCisgICAgICogQHBhcmFtIG1pbkludAorICAgICAqICAgICAgICAgICAgVGhlIG1pbmlt
dW0gbnVtYmVyIG9mIHBsYWNlcyBiZWZvcmUgdGhlIGRlY2ltYWwgc2VwYXJhdG9yLgorICAgICAq
IEByZXR1cm4gQW4gSW50ZWdlcldpZHRoIGZvciBjaGFpbmluZyBvciBwYXNzaW5nIHRvIHRoZSBO
dW1iZXJGb3JtYXR0ZXIgaW50ZWdlcldpZHRoKCkgc2V0dGVyLgorICAgICAqIEBkcmFmdCBJQ1Ug
NjAKKyAgICAgKi8KKyAgICBzdGF0aWMgSW50ZWdlcldpZHRoIHplcm9GaWxsVG8oaW50MzJfdCBt
aW5JbnQpOworCisgICAgLyoqCisgICAgICogVHJ1bmNhdGUgbnVtYmVycyBleGNlZWRpbmcgYSBj
ZXJ0YWluIG51bWJlciBvZiBudW1lcmFscyBiZWZvcmUgdGhlIGRlY2ltYWwgc2VwYXJhdG9yLgor
ICAgICAqCisgICAgICogRm9yIGV4YW1wbGUsIHdpdGggbWF4SW50PTMsIHRoZSBudW1iZXIgMTIz
NCB3aWxsIGdldCBwcmludGVkIGFzICIyMzQiLgorICAgICAqCisgICAgICogQHBhcmFtIG1heElu
dAorICAgICAqICAgICAgICAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIHBsYWNlcyBiZWZvcmUg
dGhlIGRlY2ltYWwgc2VwYXJhdG9yLiBtYXhJbnQgPT0gLTEgbWVhbnMgbm8KKyAgICAgKiAgICAg
ICAgICAgIHRydW5jYXRpb24uCisgICAgICogQHJldHVybiBBbiBJbnRlZ2VyV2lkdGggZm9yIHBh
c3NpbmcgdG8gdGhlIE51bWJlckZvcm1hdHRlciBpbnRlZ2VyV2lkdGgoKSBzZXR0ZXIuCisgICAg
ICogQGRyYWZ0IElDVSA2MAorICAgICAqLworICAgIEludGVnZXJXaWR0aCB0cnVuY2F0ZUF0KGlu
dDMyX3QgbWF4SW50KTsKKworICBwcml2YXRlOgorICAgIHVuaW9uIHsKKyAgICAgICAgc3RydWN0
IHsKKyAgICAgICAgICAgIGltcGw6OmRpZ2l0c190IGZNaW5JbnQ7CisgICAgICAgICAgICBpbXBs
OjpkaWdpdHNfdCBmTWF4SW50OworICAgICAgICAgICAgYm9vbCBmRm9ybWF0RmFpbElmTW9yZVRo
YW5NYXhEaWdpdHM7CisgICAgICAgIH0gbWluTWF4SW50OworICAgICAgICBVRXJyb3JDb2RlIGVy
cm9yQ29kZTsKKyAgICB9IGZVbmlvbjsKKyAgICBib29sIGZIYXNFcnJvciA9IGZhbHNlOworCisg
ICAgSW50ZWdlcldpZHRoKGltcGw6OmRpZ2l0c190IG1pbkludCwgaW1wbDo6ZGlnaXRzX3QgbWF4
SW50LCBib29sIGZvcm1hdEZhaWxJZk1vcmVUaGFuTWF4RGlnaXRzKTsKKworICAgIEludGVnZXJX
aWR0aChVRXJyb3JDb2RlIGVycm9yQ29kZSkgeyAvLyBOT0xJTlQKKyAgICAgICAgZlVuaW9uLmVy
cm9yQ29kZSA9IGVycm9yQ29kZTsKKyAgICAgICAgZkhhc0Vycm9yID0gdHJ1ZTsKKyAgICB9CisK
KyAgICBJbnRlZ2VyV2lkdGgoKSB7IC8vIE5PTElOVAorICAgICAgICBmVW5pb24ubWluTWF4SW50
LmZNaW5JbnQgPSAtMTsKKyAgICB9CisKKyAgICAvKiogUmV0dXJucyB0aGUgZGVmYXVsdCBpbnN0
YW5jZS4gKi8KKyAgICBzdGF0aWMgSW50ZWdlcldpZHRoIHN0YW5kYXJkKCkgeworICAgICAgICBy
ZXR1cm4gSW50ZWdlcldpZHRoOjp6ZXJvRmlsbFRvKDEpOworICAgIH0KKworICAgIGJvb2wgaXNC
b2d1cygpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuICFmSGFzRXJyb3IgJiYgZlVuaW9uLm1pbk1h
eEludC5mTWluSW50ID09IC0xOworICAgIH0KKworICAgIFVCb29sIGNvcHlFcnJvclRvKFVFcnJv
ckNvZGUgJnN0YXR1cykgY29uc3QgeworICAgICAgICBpZiAoZkhhc0Vycm9yKSB7CisgICAgICAg
ICAgICBzdGF0dXMgPSBmVW5pb24uZXJyb3JDb2RlOworICAgICAgICAgICAgcmV0dXJuIFRSVUU7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIHZvaWQgYXBw
bHkoaW1wbDo6RGVjaW1hbFF1YW50aXR5ICZxdWFudGl0eSwgVUVycm9yQ29kZSAmc3RhdHVzKSBj
b25zdDsKKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJbnRlZ2VyV2lkdGgmIG90aGVyKSBj
b25zdDsKKworICAgIC8vIFRvIGFsbG93IE1hY3JvUHJvcHMvTWljcm9Qcm9wcyB0byBpbml0aWFs
aXplIGVtcHR5IGluc3RhbmNlczoKKyAgICBmcmllbmQgc3RydWN0IGltcGw6Ok1hY3JvUHJvcHM7
CisgICAgZnJpZW5kIHN0cnVjdCBpbXBsOjpNaWNyb1Byb3BzOworCisgICAgLy8gVG8gYWxsb3cg
TnVtYmVyRm9ybWF0dGVySW1wbCB0byBhY2Nlc3MgaXNCb2d1cygpIGFuZCBwZXJmb3JtIG90aGVy
IG9wZXJhdGlvbnM6CisgICAgZnJpZW5kIGNsYXNzIGltcGw6Ok51bWJlckZvcm1hdHRlckltcGw7
CisKKyAgICAvLyBTbyB0aGF0IE51bWJlclByb3BlcnR5TWFwcGVyIGNhbiBjcmVhdGUgaW5zdGFu
Y2VzCisgICAgZnJpZW5kIGNsYXNzIGltcGw6Ok51bWJlclByb3BlcnR5TWFwcGVyOworCisgICAg
Ly8gVG8gYWxsb3cgYWNjZXNzIHRvIHRoZSBza2VsZXRvbiBnZW5lcmF0aW9uIGNvZGU6CisgICAg
ZnJpZW5kIGNsYXNzIGltcGw6OkdlbmVyYXRvckhlbHBlcnM7Cit9OworCisvKioKKyAqIEEgY2xh
c3MgdGhhdCBkZWZpbmVzIGEgcXVhbnRpdHkgYnkgd2hpY2ggYSBudW1iZXIgc2hvdWxkIGJlIG11
bHRpcGxpZWQgd2hlbiBmb3JtYXR0aW5nLgorICoKKyAqIDxwPgorICogVG8gY3JlYXRlIGEgU2Nh
bGUsIHVzZSBvbmUgb2YgdGhlIGZhY3RvcnkgbWV0aG9kcy4KKyAqCisgKiBAZHJhZnQgSUNVIDYy
CisgKi8KK2NsYXNzIFVfSTE4Tl9BUEkgU2NhbGUgOiBwdWJsaWMgVU1lbW9yeSB7CisgIHB1Ymxp
YzoKKyAgICAvKioKKyAgICAgKiBEbyBub3QgY2hhbmdlIHRoZSB2YWx1ZSBvZiBudW1iZXJzIHdo
ZW4gZm9ybWF0dGluZyBvciBwYXJzaW5nLgorICAgICAqCisgICAgICogQHJldHVybiBBIFNjYWxl
IHRvIHByZXZlbnQgYW55IG11bHRpcGxpY2F0aW9uLgorICAgICAqIEBkcmFmdCBJQ1UgNjIKKyAg
ICAgKi8KKyAgICBzdGF0aWMgU2NhbGUgbm9uZSgpOworCisgICAgLyoqCisgICAgICogTXVsdGlw
bHkgbnVtYmVycyBieSBhIHBvd2VyIG9mIHRlbiBiZWZvcmUgZm9ybWF0dGluZy4gVXNlZnVsIGZv
ciBjb21iaW5pbmcgd2l0aCBhIHBlcmNlbnQgdW5pdDoKKyAgICAgKgorICAgICAqIDxwcmU+Cisg
ICAgICogTnVtYmVyRm9ybWF0dGVyOjp3aXRoKCkudW5pdChOb1VuaXQ6OnBlcmNlbnQoKSkubXVs
dGlwbGllcihTY2FsZTo6cG93ZXJPZlRlbigyKSkKKyAgICAgKiA8L3ByZT4KKyAgICAgKgorICAg
ICAqIEByZXR1cm4gQSBTY2FsZSBmb3IgcGFzc2luZyB0byB0aGUgc2V0dGVyIGluIE51bWJlckZv
cm1hdHRlci4KKyAgICAgKiBAZHJhZnQgSUNVIDYyCisgICAgICovCisgICAgc3RhdGljIFNjYWxl
IHBvd2VyT2ZUZW4oaW50MzJfdCBwb3dlcik7CisKKyAgICAvKioKKyAgICAgKiBNdWx0aXBseSBu
dW1iZXJzIGJ5IGFuIGFyYml0cmFyeSB2YWx1ZSBiZWZvcmUgZm9ybWF0dGluZy4gVXNlZnVsIGZv
ciB1bml0IGNvbnZlcnNpb25zLgorICAgICAqCisgICAgICogVGhpcyBtZXRob2QgdGFrZXMgYSBz
dHJpbmcgaW4gYSBkZWNpbWFsIG51bWJlciBmb3JtYXQgd2l0aCBzeW50YXgKKyAgICAgKiBhcyBk
ZWZpbmVkIGluIHRoZSBEZWNpbWFsIEFyaXRobWV0aWMgU3BlY2lmaWNhdGlvbiwgYXZhaWxhYmxl
IGF0CisgICAgICogaHR0cDovL3NwZWxlb3Ryb3ZlLmNvbS9kZWNpbWFsCisgICAgICoKKyAgICAg
KiBBbHNvIHNlZSB0aGUgdmVyc2lvbiBvZiB0aGlzIG1ldGhvZCB0aGF0IHRha2VzIGEgZG91Ymxl
LgorICAgICAqCisgICAgICogQHJldHVybiBBIFNjYWxlIGZvciBwYXNzaW5nIHRvIHRoZSBzZXR0
ZXIgaW4gTnVtYmVyRm9ybWF0dGVyLgorICAgICAqIEBkcmFmdCBJQ1UgNjIKKyAgICAgKi8KKyAg
ICBzdGF0aWMgU2NhbGUgYnlEZWNpbWFsKFN0cmluZ1BpZWNlIG11bHRpcGxpY2FuZCk7CisKKyAg
ICAvKioKKyAgICAgKiBNdWx0aXBseSBudW1iZXJzIGJ5IGFuIGFyYml0cmFyeSB2YWx1ZSBiZWZv
cmUgZm9ybWF0dGluZy4gVXNlZnVsIGZvciB1bml0IGNvbnZlcnNpb25zLgorICAgICAqCisgICAg
ICogVGhpcyBtZXRob2QgdGFrZXMgYSBkb3VibGU7IGFsc28gc2VlIHRoZSB2ZXJzaW9uIG9mIHRo
aXMgbWV0aG9kIHRoYXQgdGFrZXMgYW4gZXhhY3QgZGVjaW1hbC4KKyAgICAgKgorICAgICAqIEBy
ZXR1cm4gQSBTY2FsZSBmb3IgcGFzc2luZyB0byB0aGUgc2V0dGVyIGluIE51bWJlckZvcm1hdHRl
ci4KKyAgICAgKiBAZHJhZnQgSUNVIDYyCisgICAgICovCisgICAgc3RhdGljIFNjYWxlIGJ5RG91
YmxlKGRvdWJsZSBtdWx0aXBsaWNhbmQpOworCisgICAgLyoqCisgICAgICogTXVsdGlwbHkgYSBu
dW1iZXIgYnkgYm90aCBhIHBvd2VyIG9mIHRlbiBhbmQgYnkgYW4gYXJiaXRyYXJ5IGRvdWJsZSB2
YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm4gQSBTY2FsZSBmb3IgcGFzc2luZyB0byB0aGUg
c2V0dGVyIGluIE51bWJlckZvcm1hdHRlci4KKyAgICAgKiBAZHJhZnQgSUNVIDYyCisgICAgICov
CisgICAgc3RhdGljIFNjYWxlIGJ5RG91YmxlQW5kUG93ZXJPZlRlbihkb3VibGUgbXVsdGlwbGlj
YW5kLCBpbnQzMl90IHBvd2VyKTsKKworICAgIC8vIFdlIG5lZWQgYSBjdXN0b20gZGVzdHJ1Y3Rv
ciBmb3IgdGhlIERlY051bSwgd2hpY2ggbWVhbnMgd2UgbmVlZCB0byBkZWNsYXJlCisgICAgLy8g
dGhlIGNvcHkvbW92ZSBjb25zdHJ1Y3Rvci9hc3NpZ25tZW50IHF1YXJ0ZXQuCisKKyAgICAvKiog
QGRyYWZ0IElDVSA2MiAqLworICAgIFNjYWxlKGNvbnN0IFNjYWxlJiBvdGhlcik7CisKKyAgICAv
KiogQGRyYWZ0IElDVSA2MiAqLworICAgIFNjYWxlJiBvcGVyYXRvcj0oY29uc3QgU2NhbGUmIG90
aGVyKTsKKworICAgIC8qKiBAZHJhZnQgSUNVIDYyICovCisgICAgU2NhbGUoU2NhbGUmJiBzcmMp
IFVfTk9FWENFUFQ7CisKKyAgICAvKiogQGRyYWZ0IElDVSA2MiAqLworICAgIFNjYWxlJiBvcGVy
YXRvcj0oU2NhbGUmJiBzcmMpIFVfTk9FWENFUFQ7CisKKyAgICAvKiogQGRyYWZ0IElDVSA2MiAq
LworICAgIH5TY2FsZSgpOworCisjaWZuZGVmIFVfSElERV9JTlRFUk5BTF9BUEkKKyAgICAvKiog
QGludGVybmFsICovCisgICAgU2NhbGUoaW50MzJfdCBtYWduaXR1ZGUsIGltcGw6OkRlY051bSog
YXJiaXRyYXJ5VG9BZG9wdCk7CisjZW5kaWYgIC8qIFVfSElERV9JTlRFUk5BTF9BUEkgKi8KKwor
ICBwcml2YXRlOgorICAgIGludDMyX3QgZk1hZ25pdHVkZTsKKyAgICBpbXBsOjpEZWNOdW0qIGZB
cmJpdHJhcnk7CisgICAgVUVycm9yQ29kZSBmRXJyb3I7CisKKyAgICBTY2FsZShVRXJyb3JDb2Rl
IGVycm9yKSA6IGZNYWduaXR1ZGUoMCksIGZBcmJpdHJhcnkobnVsbHB0ciksIGZFcnJvcihlcnJv
cikge30KKworICAgIFNjYWxlKCkgOiBmTWFnbml0dWRlKDApLCBmQXJiaXRyYXJ5KG51bGxwdHIp
LCBmRXJyb3IoVV9aRVJPX0VSUk9SKSB7fQorCisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Qgewor
ICAgICAgICByZXR1cm4gZk1hZ25pdHVkZSAhPSAwIHx8IGZBcmJpdHJhcnkgIT0gbnVsbHB0cjsK
KyAgICB9CisKKyAgICBVQm9vbCBjb3B5RXJyb3JUbyhVRXJyb3JDb2RlICZzdGF0dXMpIGNvbnN0
IHsKKyAgICAgICAgaWYgKGZFcnJvciAhPSBVX1pFUk9fRVJST1IpIHsKKyAgICAgICAgICAgIHN0
YXR1cyA9IGZFcnJvcjsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGx5VG8oaW1wbDo6RGVjaW1h
bFF1YW50aXR5JiBxdWFudGl0eSkgY29uc3Q7CisKKyAgICB2b2lkIGFwcGx5UmVjaXByb2NhbFRv
KGltcGw6OkRlY2ltYWxRdWFudGl0eSYgcXVhbnRpdHkpIGNvbnN0OworCisgICAgLy8gVG8gYWxs
b3cgTWFjcm9Qcm9wcy9NaWNyb1Byb3BzIHRvIGluaXRpYWxpemUgZW1wdHkgaW5zdGFuY2VzOgor
ICAgIGZyaWVuZCBzdHJ1Y3QgaW1wbDo6TWFjcm9Qcm9wczsKKyAgICBmcmllbmQgc3RydWN0IGlt
cGw6Ok1pY3JvUHJvcHM7CisKKyAgICAvLyBUbyBhbGxvdyBOdW1iZXJGb3JtYXR0ZXJJbXBsIHRv
IGFjY2VzcyBpc0JvZ3VzKCkgYW5kIHBlcmZvcm0gb3RoZXIgb3BlcmF0aW9uczoKKyAgICBmcmll
bmQgY2xhc3MgaW1wbDo6TnVtYmVyRm9ybWF0dGVySW1wbDsKKworICAgIC8vIFRvIGFsbG93IHRo
ZSBoZWxwZXIgY2xhc3MgTXVsdGlwbGllckZvcm1hdEhhbmRsZXIgYWNjZXNzIHRvIHByaXZhdGUg
ZmllbGRzOgorICAgIGZyaWVuZCBjbGFzcyBpbXBsOjpNdWx0aXBsaWVyRm9ybWF0SGFuZGxlcjsK
KworICAgIC8vIFRvIGFsbG93IGFjY2VzcyB0byB0aGUgc2tlbGV0b24gZ2VuZXJhdGlvbiBjb2Rl
OgorICAgIGZyaWVuZCBjbGFzcyBpbXBsOjpHZW5lcmF0b3JIZWxwZXJzOworCisgICAgLy8gVG8g
YWxsb3cgYWNjZXNzIHRvIHBhcnNpbmcgY29kZToKKyAgICBmcmllbmQgY2xhc3MgOjppY3U6Om51
bXBhcnNlOjppbXBsOjpOdW1iZXJQYXJzZXJJbXBsOworICAgIGZyaWVuZCBjbGFzcyA6OmljdTo6
bnVtcGFyc2U6OmltcGw6Ok11bHRpcGxpZXJQYXJzZUhhbmRsZXI7Cit9OworCituYW1lc3BhY2Ug
aW1wbCB7CisKKy8vIERvIG5vdCBlbmNsb3NlIGVudGlyZSBTeW1ib2xzV3JhcHBlciB3aXRoICNp
Zm5kZWYgVV9ISURFX0lOVEVSTkFMX0FQSSwgbmVlZGVkIGZvciBhIHByb3RlY3RlZCBmaWVsZAor
LyoqIEBpbnRlcm5hbCAqLworY2xhc3MgVV9JMThOX0FQSSBTeW1ib2xzV3JhcHBlciA6IHB1Ymxp
YyBVTWVtb3J5IHsKKyAgcHVibGljOgorICAgIC8qKiBAaW50ZXJuYWwgKi8KKyAgICBTeW1ib2xz
V3JhcHBlcigpIDogZlR5cGUoU1lNUFRSX05PTkUpLCBmUHRye251bGxwdHJ9IHt9CisKKyAgICAv
KiogQGludGVybmFsICovCisgICAgU3ltYm9sc1dyYXBwZXIoY29uc3QgU3ltYm9sc1dyYXBwZXIg
Jm90aGVyKTsKKworICAgIC8qKiBAaW50ZXJuYWwgKi8KKyAgICBTeW1ib2xzV3JhcHBlciAmb3Bl
cmF0b3I9KGNvbnN0IFN5bWJvbHNXcmFwcGVyICZvdGhlcik7CisKKyAgICAvKiogQGludGVybmFs
ICovCisgICAgU3ltYm9sc1dyYXBwZXIoU3ltYm9sc1dyYXBwZXImJiBzcmMpIFVfTk9FWENFUFQ7
CisKKyAgICAvKiogQGludGVybmFsICovCisgICAgU3ltYm9sc1dyYXBwZXIgJm9wZXJhdG9yPShT
eW1ib2xzV3JhcHBlciYmIHNyYykgVV9OT0VYQ0VQVDsKKworICAgIC8qKiBAaW50ZXJuYWwgKi8K
KyAgICB+U3ltYm9sc1dyYXBwZXIoKTsKKworI2lmbmRlZiBVX0hJREVfSU5URVJOQUxfQVBJCisK
KyAgICAvKioKKyAgICAgKiBUaGUgcHJvdmlkZWQgb2JqZWN0IGlzIGNvcGllZCwgYnV0IHdlIGRv
IG5vdCBhZG9wdCBpdC4KKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAgICB2b2lkIHNldFRv
KGNvbnN0IERlY2ltYWxGb3JtYXRTeW1ib2xzICZkZnMpOworCisgICAgLyoqCisgICAgICogQWRv
cHQgdGhlIHByb3ZpZGVkIG9iamVjdC4KKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAgICB2
b2lkIHNldFRvKGNvbnN0IE51bWJlcmluZ1N5c3RlbSAqbnMpOworCisgICAgLyoqCisgICAgICog
V2hldGhlciB0aGUgb2JqZWN0IGlzIGN1cnJlbnRseSBob2xkaW5nIGEgRGVjaW1hbEZvcm1hdFN5
bWJvbHMuCisgICAgICogQGludGVybmFsCisgICAgICovCisgICAgYm9vbCBpc0RlY2ltYWxGb3Jt
YXRTeW1ib2xzKCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBXaGV0aGVyIHRoZSBvYmplY3Qg
aXMgY3VycmVudGx5IGhvbGRpbmcgYSBOdW1iZXJpbmdTeXN0ZW0uCisgICAgICogQGludGVybmFs
CisgICAgICovCisgICAgYm9vbCBpc051bWJlcmluZ1N5c3RlbSgpIGNvbnN0OworCisgICAgLyoq
CisgICAgICogR2V0IHRoZSBEZWNpbWFsRm9ybWF0U3ltYm9scyBwb2ludGVyLiBObyBvd25lcnNo
aXAgY2hhbmdlLgorICAgICAqIEBpbnRlcm5hbAorICAgICAqLworICAgIGNvbnN0IERlY2ltYWxG
b3JtYXRTeW1ib2xzICpnZXREZWNpbWFsRm9ybWF0U3ltYm9scygpIGNvbnN0OworCisgICAgLyoq
CisgICAgICogR2V0IHRoZSBOdW1iZXJpbmdTeXN0ZW0gcG9pbnRlci4gTm8gb3duZXJzaGlwIGNo
YW5nZS4KKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAgICBjb25zdCBOdW1iZXJpbmdTeXN0
ZW0gKmdldE51bWJlcmluZ1N5c3RlbSgpIGNvbnN0OworCisjZW5kaWYgIC8vIFVfSElERV9JTlRF
Uk5BTF9BUEkKKworICAgIC8qKiBAaW50ZXJuYWwgKi8KKyAgICBVQm9vbCBjb3B5RXJyb3JUbyhV
RXJyb3JDb2RlICZzdGF0dXMpIGNvbnN0IHsKKyAgICAgICAgaWYgKGZUeXBlID09IFNZTVBUUl9E
RlMgJiYgZlB0ci5kZnMgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgc3RhdHVzID0gVV9NRU1P
UllfQUxMT0NBVElPTl9FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9
IGVsc2UgaWYgKGZUeXBlID09IFNZTVBUUl9OUyAmJiBmUHRyLm5zID09IG51bGxwdHIpIHsKKyAg
ICAgICAgICAgIHN0YXR1cyA9IFVfTUVNT1JZX0FMTE9DQVRJT05fRVJST1I7CisgICAgICAgICAg
ICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQor
CisgIHByaXZhdGU6CisgICAgZW51bSBTeW1ib2xzUG9pbnRlclR5cGUgeworICAgICAgICBTWU1Q
VFJfTk9ORSwgU1lNUFRSX0RGUywgU1lNUFRSX05TCisgICAgfSBmVHlwZTsKKworICAgIHVuaW9u
IHsKKyAgICAgICAgY29uc3QgRGVjaW1hbEZvcm1hdFN5bWJvbHMgKmRmczsKKyAgICAgICAgY29u
c3QgTnVtYmVyaW5nU3lzdGVtICpuczsKKyAgICB9IGZQdHI7CisKKyAgICB2b2lkIGRvQ29weUZy
b20oY29uc3QgU3ltYm9sc1dyYXBwZXIgJm90aGVyKTsKKworICAgIHZvaWQgZG9Nb3ZlRnJvbShT
eW1ib2xzV3JhcHBlciYmIHNyYyk7CisKKyAgICB2b2lkIGRvQ2xlYW51cCgpOworfTsKKworLy8g
RG8gbm90IGVuY2xvc2UgZW50aXJlIEdyb3VwZXIgd2l0aCAjaWZuZGVmIFVfSElERV9JTlRFUk5B
TF9BUEksIG5lZWRlZCBmb3IgYSBwcm90ZWN0ZWQgZmllbGQKKy8qKiBAaW50ZXJuYWwgKi8KK2Ns
YXNzIFVfSTE4Tl9BUEkgR3JvdXBlciA6IHB1YmxpYyBVTWVtb3J5IHsKKyAgcHVibGljOgorI2lm
bmRlZiBVX0hJREVfSU5URVJOQUxfQVBJCisgICAgLyoqIEBpbnRlcm5hbCAqLworICAgIHN0YXRp
YyBHcm91cGVyIGZvclN0cmF0ZWd5KFVOdW1iZXJHcm91cGluZ1N0cmF0ZWd5IGdyb3VwaW5nKTsK
KworICAgIC8qKgorICAgICAqIFJlc29sdmUgdGhlIHZhbHVlcyBpbiBQcm9wZXJ0aWVzIHRvIGEg
R3JvdXBlciBvYmplY3QuCisgICAgICogQGludGVybmFsCisgICAgICovCisgICAgc3RhdGljIEdy
b3VwZXIgZm9yUHJvcGVydGllcyhjb25zdCBEZWNpbWFsRm9ybWF0UHJvcGVydGllcyYgcHJvcGVy
dGllcyk7CisKKyAgICAvLyBGdXR1cmU6IHN0YXRpYyBHcm91cGVyIGZvclByb3BlcnRpZXMoRGVj
aW1hbEZvcm1hdFByb3BlcnRpZXMmIHByb3BlcnRpZXMpOworCisgICAgLyoqIEBpbnRlcm5hbCAq
LworICAgIEdyb3VwZXIoaW50MTZfdCBncm91cGluZzEsIGludDE2X3QgZ3JvdXBpbmcyLCBpbnQx
Nl90IG1pbkdyb3VwaW5nLCBVTnVtYmVyR3JvdXBpbmdTdHJhdGVneSBzdHJhdGVneSkKKyAgICAg
ICAgICAgIDogZkdyb3VwaW5nMShncm91cGluZzEpLAorICAgICAgICAgICAgICBmR3JvdXBpbmcy
KGdyb3VwaW5nMiksCisgICAgICAgICAgICAgIGZNaW5Hcm91cGluZyhtaW5Hcm91cGluZyksCisg
ICAgICAgICAgICAgIGZTdHJhdGVneShzdHJhdGVneSkge30KKyNlbmRpZiAgLy8gVV9ISURFX0lO
VEVSTkFMX0FQSQorCisgICAgLyoqIEBpbnRlcm5hbCAqLworICAgIGludDE2X3QgZ2V0UHJpbWFy
eSgpIGNvbnN0OworCisgICAgLyoqIEBpbnRlcm5hbCAqLworICAgIGludDE2X3QgZ2V0U2Vjb25k
YXJ5KCkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICAvKioKKyAgICAgKiBUaGUgZ3JvdXBpbmcg
c2l6ZXMsIHdpdGggdGhlIGZvbGxvd2luZyBzcGVjaWFsIHZhbHVlczoKKyAgICAgKiA8dWw+Cisg
ICAgICogPGxpPi0xID0gbm8gZ3JvdXBpbmcKKyAgICAgKiA8bGk+LTIgPSBuZWVkcyBsb2NhbGUg
ZGF0YQorICAgICAqIDxsaT4tNCA9IGZhbGwgYmFjayB0byBXZXN0ZXJuIGdyb3VwaW5nIGlmIG5v
dCBpbiBsb2NhbGUKKyAgICAgKiA8L3VsPgorICAgICAqLworICAgIGludDE2X3QgZkdyb3VwaW5n
MTsKKyAgICBpbnQxNl90IGZHcm91cGluZzI7CisKKyAgICAvKioKKyAgICAgKiBUaGUgbWluaW11
bSBncm91cGluZyBzaXplLCB3aXRoIHRoZSBmb2xsb3dpbmcgc3BlY2lhbCB2YWx1ZXM6CisgICAg
ICogPHVsPgorICAgICAqIDxsaT4tMiA9IG5lZWRzIGxvY2FsZSBkYXRhCisgICAgICogPGxpPi0z
ID0gbm8gbGVzcyB0aGFuIDIKKyAgICAgKiA8L3VsPgorICAgICAqLworICAgIGludDE2X3QgZk1p
bkdyb3VwaW5nOworCisgICAgLyoqCisgICAgICogVGhlIFVOdW1iZXJHcm91cGluZ1N0cmF0ZWd5
IHRoYXQgd2FzIHVzZWQgdG8gY3JlYXRlIHRoaXMgR3JvdXBlciwgb3IgVU5VTV9HUk9VUElOR19D
T1VOVCBpZiB0aGlzCisgICAgICogd2FzIG5vdCBjcmVhdGVkIGZyb20gYSBVTnVtYmVyR3JvdXBp
bmdTdHJhdGVneS4KKyAgICAgKi8KKyAgICBVTnVtYmVyR3JvdXBpbmdTdHJhdGVneSBmU3RyYXRl
Z3k7CisKKyAgICBHcm91cGVyKCkgOiBmR3JvdXBpbmcxKC0zKSB7fQorCisgICAgYm9vbCBpc0Jv
Z3VzKCkgY29uc3QgeworICAgICAgICByZXR1cm4gZkdyb3VwaW5nMSA9PSAtMzsKKyAgICB9CisK
KyAgICAvKiogTk9OLUNPTlNUOiBtdXRhdGVzIHRoZSBjdXJyZW50IGluc3RhbmNlLiAqLworICAg
IHZvaWQgc2V0TG9jYWxlRGF0YShjb25zdCBpbXBsOjpQYXJzZWRQYXR0ZXJuSW5mbyAmcGF0dGVy
bkluZm8sIGNvbnN0IExvY2FsZSYgbG9jYWxlKTsKKworICAgIGJvb2wgZ3JvdXBBdFBvc2l0aW9u
KGludDMyX3QgcG9zaXRpb24sIGNvbnN0IGltcGw6OkRlY2ltYWxRdWFudGl0eSAmdmFsdWUpIGNv
bnN0OworCisgICAgLy8gVG8gYWxsb3cgTWFjcm9Qcm9wcy9NaWNyb1Byb3BzIHRvIGluaXRpYWxp
emUgZW1wdHkgaW5zdGFuY2VzOgorICAgIGZyaWVuZCBzdHJ1Y3QgTWFjcm9Qcm9wczsKKyAgICBm
cmllbmQgc3RydWN0IE1pY3JvUHJvcHM7CisKKyAgICAvLyBUbyBhbGxvdyBOdW1iZXJGb3JtYXR0
ZXJJbXBsIHRvIGFjY2VzcyBpc0JvZ3VzKCkgYW5kIHBlcmZvcm0gb3RoZXIgb3BlcmF0aW9uczoK
KyAgICBmcmllbmQgY2xhc3MgTnVtYmVyRm9ybWF0dGVySW1wbDsKKworICAgIC8vIFRvIGFsbG93
IE51bWJlclBhcnNlckltcGwgdG8gcGVyZm9ybSBzZXRMb2NhbGVEYXRhKCk6CisgICAgZnJpZW5k
IGNsYXNzIDo6aWN1OjpudW1wYXJzZTo6aW1wbDo6TnVtYmVyUGFyc2VySW1wbDsKKworICAgIC8v
IFRvIGFsbG93IGFjY2VzcyB0byB0aGUgc2tlbGV0b24gZ2VuZXJhdGlvbiBjb2RlOgorICAgIGZy
aWVuZCBjbGFzcyBpbXBsOjpHZW5lcmF0b3JIZWxwZXJzOworfTsKKworLy8gRG8gbm90IGVuY2xv
c2UgZW50aXJlIFBhZGRlciB3aXRoICNpZm5kZWYgVV9ISURFX0lOVEVSTkFMX0FQSSwgbmVlZGVk
IGZvciBhIHByb3RlY3RlZCBmaWVsZAorLyoqIEBpbnRlcm5hbCAqLworY2xhc3MgVV9JMThOX0FQ
SSBQYWRkZXIgOiBwdWJsaWMgVU1lbW9yeSB7CisgIHB1YmxpYzoKKyNpZm5kZWYgVV9ISURFX0lO
VEVSTkFMX0FQSQorICAgIC8qKiBAaW50ZXJuYWwgKi8KKyAgICBzdGF0aWMgUGFkZGVyIG5vbmUo
KTsKKworICAgIC8qKiBAaW50ZXJuYWwgKi8KKyAgICBzdGF0aWMgUGFkZGVyIGNvZGVQb2ludHMo
VUNoYXIzMiBjcCwgaW50MzJfdCB0YXJnZXRXaWR0aCwgVU51bWJlckZvcm1hdFBhZFBvc2l0aW9u
IHBvc2l0aW9uKTsKKyNlbmRpZiAgLy8gVV9ISURFX0lOVEVSTkFMX0FQSQorCisgICAgLyoqIEBp
bnRlcm5hbCAqLworICAgIHN0YXRpYyBQYWRkZXIgZm9yUHJvcGVydGllcyhjb25zdCBEZWNpbWFs
Rm9ybWF0UHJvcGVydGllcyYgcHJvcGVydGllcyk7CisKKyAgcHJpdmF0ZToKKyAgICBVQ2hhcjMy
IGZXaWR0aDsgIC8vIC0zID0gZXJyb3I7IC0yID0gYm9ndXM7IC0xID0gbm8gcGFkZGluZworICAg
IHVuaW9uIHsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIGludDMyX3QgZkNwOworICAg
ICAgICAgICAgVU51bWJlckZvcm1hdFBhZFBvc2l0aW9uIGZQb3NpdGlvbjsKKyAgICAgICAgfSBw
YWRkaW5nOworICAgICAgICBVRXJyb3JDb2RlIGVycm9yQ29kZTsKKyAgICB9IGZVbmlvbjsKKwor
ICAgIFBhZGRlcihVQ2hhcjMyIGNwLCBpbnQzMl90IHdpZHRoLCBVTnVtYmVyRm9ybWF0UGFkUG9z
aXRpb24gcG9zaXRpb24pOworCisgICAgUGFkZGVyKGludDMyX3Qgd2lkdGgpOworCisgICAgUGFk
ZGVyKFVFcnJvckNvZGUgZXJyb3JDb2RlKSA6IGZXaWR0aCgtMykgeyAvLyBOT0xJTlQKKyAgICAg
ICAgZlVuaW9uLmVycm9yQ29kZSA9IGVycm9yQ29kZTsKKyAgICB9CisKKyAgICBQYWRkZXIoKSA6
IGZXaWR0aCgtMikge30gLy8gTk9MSU5UCisKKyAgICBib29sIGlzQm9ndXMoKSBjb25zdCB7Cisg
ICAgICAgIHJldHVybiBmV2lkdGggPT0gLTI7CisgICAgfQorCisgICAgVUJvb2wgY29weUVycm9y
VG8oVUVycm9yQ29kZSAmc3RhdHVzKSBjb25zdCB7CisgICAgICAgIGlmIChmV2lkdGggPT0gLTMp
IHsKKyAgICAgICAgICAgIHN0YXR1cyA9IGZVbmlvbi5lcnJvckNvZGU7CisgICAgICAgICAgICBy
ZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisg
ICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeworICAgICAgICByZXR1cm4gZldpZHRoID4gMDsKKyAg
ICB9CisKKyAgICBpbnQzMl90IHBhZEFuZEFwcGx5KGNvbnN0IGltcGw6Ok1vZGlmaWVyICZtb2Qx
LCBjb25zdCBpbXBsOjpNb2RpZmllciAmbW9kMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlt
cGw6Ok51bWJlclN0cmluZ0J1aWxkZXIgJnN0cmluZywgaW50MzJfdCBsZWZ0SW5kZXgsIGludDMy
X3QgcmlnaHRJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgJnN0YXR1
cykgY29uc3Q7CisKKyAgICAvLyBUbyBhbGxvdyBNYWNyb1Byb3BzL01pY3JvUHJvcHMgdG8gaW5p
dGlhbGl6ZSBlbXB0eSBpbnN0YW5jZXM6CisgICAgZnJpZW5kIHN0cnVjdCBNYWNyb1Byb3BzOwor
ICAgIGZyaWVuZCBzdHJ1Y3QgTWljcm9Qcm9wczsKKworICAgIC8vIFRvIGFsbG93IE51bWJlckZv
cm1hdHRlckltcGwgdG8gYWNjZXNzIGlzQm9ndXMoKSBhbmQgcGVyZm9ybSBvdGhlciBvcGVyYXRp
b25zOgorICAgIGZyaWVuZCBjbGFzcyBpbXBsOjpOdW1iZXJGb3JtYXR0ZXJJbXBsOworCisgICAg
Ly8gVG8gYWxsb3cgYWNjZXNzIHRvIHRoZSBza2VsZXRvbiBnZW5lcmF0aW9uIGNvZGU6CisgICAg
ZnJpZW5kIGNsYXNzIGltcGw6OkdlbmVyYXRvckhlbHBlcnM7Cit9OworCisvLyBEbyBub3QgZW5j
bG9zZSBlbnRpcmUgTWFjcm9Qcm9wcyB3aXRoICNpZm5kZWYgVV9ISURFX0lOVEVSTkFMX0FQSSwg
bmVlZGVkIGZvciBhIHByb3RlY3RlZCBmaWVsZAorLyoqIEBpbnRlcm5hbCAqLworc3RydWN0IFVf
STE4Tl9BUEkgTWFjcm9Qcm9wcyA6IHB1YmxpYyBVTWVtb3J5IHsKKyAgICAvKiogQGludGVybmFs
ICovCisgICAgTm90YXRpb24gbm90YXRpb247CisKKyAgICAvKiogQGludGVybmFsICovCisgICAg
TWVhc3VyZVVuaXQgdW5pdDsgLy8gPSBOb1VuaXQ6OmJhc2UoKTsKKworICAgIC8qKiBAaW50ZXJu
YWwgKi8KKyAgICBNZWFzdXJlVW5pdCBwZXJVbml0OyAvLyA9IE5vVW5pdDo6YmFzZSgpOworCisg
ICAgLyoqIEBpbnRlcm5hbCAqLworICAgIFByZWNpc2lvbiBwcmVjaXNpb247ICAvLyA9IFByZWNp
c2lvbigpOyAgKGJvZ3VzKQorCisgICAgLyoqIEBpbnRlcm5hbCAqLworICAgIFVOdW1iZXJGb3Jt
YXRSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlID0gVU5VTV9ST1VORF9IQUxGRVZFTjsKKworICAg
IC8qKiBAaW50ZXJuYWwgKi8KKyAgICBHcm91cGVyIGdyb3VwZXI7ICAvLyA9IEdyb3VwZXIoKTsg
IChib2d1cykKKworICAgIC8qKiBAaW50ZXJuYWwgKi8KKyAgICBQYWRkZXIgcGFkZGVyOyAgICAv
LyA9IFBhZGRlcigpOyAgIChib2d1cykKKworICAgIC8qKiBAaW50ZXJuYWwgKi8KKyAgICBJbnRl
Z2VyV2lkdGggaW50ZWdlcldpZHRoOyAvLyA9IEludGVnZXJXaWR0aCgpOyAoYm9ndXMpCisKKyAg
ICAvKiogQGludGVybmFsICovCisgICAgU3ltYm9sc1dyYXBwZXIgc3ltYm9sczsKKworICAgIC8v
IFVOVU1fWFlaX0NPVU5UIGRlbm90ZXMgbnVsbCAoYm9ndXMpIHZhbHVlcy4KKworICAgIC8qKiBA
aW50ZXJuYWwgKi8KKyAgICBVTnVtYmVyVW5pdFdpZHRoIHVuaXRXaWR0aCA9IFVOVU1fVU5JVF9X
SURUSF9DT1VOVDsKKworICAgIC8qKiBAaW50ZXJuYWwgKi8KKyAgICBVTnVtYmVyU2lnbkRpc3Bs
YXkgc2lnbiA9IFVOVU1fU0lHTl9DT1VOVDsKKworICAgIC8qKiBAaW50ZXJuYWwgKi8KKyAgICBV
TnVtYmVyRGVjaW1hbFNlcGFyYXRvckRpc3BsYXkgZGVjaW1hbCA9IFVOVU1fREVDSU1BTF9TRVBB
UkFUT1JfQ09VTlQ7CisKKyAgICAvKiogQGludGVybmFsICovCisgICAgU2NhbGUgc2NhbGU7ICAv
LyA9IFNjYWxlKCk7ICAoYmVuaWduIHZhbHVlKQorCisgICAgLyoqIEBpbnRlcm5hbCAqLworICAg
IGNvbnN0IEFmZml4UGF0dGVyblByb3ZpZGVyKiBhZmZpeFByb3ZpZGVyID0gbnVsbHB0cjsgIC8v
IG5vIG93bmVyc2hpcAorCisgICAgLyoqIEBpbnRlcm5hbCAqLworICAgIGNvbnN0IFBsdXJhbFJ1
bGVzKiBydWxlcyA9IG51bGxwdHI7ICAvLyBubyBvd25lcnNoaXAKKworICAgIC8qKiBAaW50ZXJu
YWwgKi8KKyAgICBjb25zdCBDdXJyZW5jeVN5bWJvbHMqIGN1cnJlbmN5U3ltYm9scyA9IG51bGxw
dHI7ICAvLyBubyBvd25lcnNoaXAKKworICAgIC8qKiBAaW50ZXJuYWwgKi8KKyAgICBpbnQzMl90
IHRocmVzaG9sZCA9IGtJbnRlcm5hbERlZmF1bHRUaHJlc2hvbGQ7CisKKyAgICAvKiogQGludGVy
bmFsICovCisgICAgTG9jYWxlIGxvY2FsZTsKKworICAgIC8vIE5PVEU6IFVzZXMgZGVmYXVsdCBj
b3B5IGFuZCBtb3ZlIGNvbnN0cnVjdG9ycy4KKworICAgIC8qKgorICAgICAqIENoZWNrIGFsbCBt
ZW1iZXJzIGZvciBlcnJvcnMuCisgICAgICogQGludGVybmFsCisgICAgICovCisgICAgYm9vbCBj
b3B5RXJyb3JUbyhVRXJyb3JDb2RlICZzdGF0dXMpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG5v
dGF0aW9uLmNvcHlFcnJvclRvKHN0YXR1cykgfHwgcHJlY2lzaW9uLmNvcHlFcnJvclRvKHN0YXR1
cykgfHwKKyAgICAgICAgICAgICAgIHBhZGRlci5jb3B5RXJyb3JUbyhzdGF0dXMpIHx8IGludGVn
ZXJXaWR0aC5jb3B5RXJyb3JUbyhzdGF0dXMpIHx8CisgICAgICAgICAgICAgICBzeW1ib2xzLmNv
cHlFcnJvclRvKHN0YXR1cykgfHwgc2NhbGUuY29weUVycm9yVG8oc3RhdHVzKTsKKyAgICB9Cit9
OworCit9IC8vIG5hbWVzcGFjZSBpbXBsCisKKy8qKgorICogQW4gYWJzdHJhY3QgYmFzZSBjbGFz
cyBmb3Igc3BlY2lmeWluZyBzZXR0aW5ncyByZWxhdGVkIHRvIG51bWJlciBmb3JtYXR0aW5nLiBU
aGlzIGNsYXNzIGlzIGltcGxlbWVudGVkIGJ5CisgKiB7QGxpbmsgVW5sb2NhbGl6ZWROdW1iZXJG
b3JtYXR0ZXJ9IGFuZCB7QGxpbmsgTG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyfS4gVGhpcyBjbGFz
cyBpcyBub3QgaW50ZW5kZWQgZm9yCisgKiBwdWJsaWMgc3ViY2xhc3NpbmcuCisgKi8KK3RlbXBs
YXRlPHR5cGVuYW1lIERlcml2ZWQ+CitjbGFzcyBVX0kxOE5fQVBJIE51bWJlckZvcm1hdHRlclNl
dHRpbmdzIHsKKyAgcHVibGljOgorICAgIC8qKgorICAgICAqIFNwZWNpZmllcyB0aGUgbm90YXRp
b24gc3R5bGUgKHNpbXBsZSwgc2NpZW50aWZpYywgb3IgY29tcGFjdCkgZm9yIHJlbmRlcmluZyBu
dW1iZXJzLgorICAgICAqCisgICAgICogPHVsPgorICAgICAqIDxsaT5TaW1wbGUgbm90YXRpb246
ICIxMiwzMDAiCisgICAgICogPGxpPlNjaWVudGlmaWMgbm90YXRpb246ICIxLjIzRTQiCisgICAg
ICogPGxpPkNvbXBhY3Qgbm90YXRpb246ICIxMksiCisgICAgICogPC91bD4KKyAgICAgKgorICAg
ICAqIDxwPgorICAgICAqIEFsbCBub3RhdGlvbiBzdHlsZXMgd2lsbCBiZSBwcm9wZXJseSBsb2Nh
bGl6ZWQgd2l0aCBsb2NhbGUgZGF0YSwgYW5kIGFsbCBub3RhdGlvbiBzdHlsZXMgYXJlIGNvbXBh
dGlibGUgd2l0aAorICAgICAqIHVuaXRzLCByb3VuZGluZyBwcmVjaXNpb25zLCBhbmQgb3RoZXIg
bnVtYmVyIGZvcm1hdHRlciBzZXR0aW5ncy4KKyAgICAgKgorICAgICAqIDxwPgorICAgICAqIFBh
c3MgdGhpcyBtZXRob2QgdGhlIHJldHVybiB2YWx1ZSBvZiBhIHtAbGluayBOb3RhdGlvbn0gZmFj
dG9yeSBtZXRob2QuIEZvciBleGFtcGxlOgorICAgICAqCisgICAgICogPHByZT4KKyAgICAgKiBO
dW1iZXJGb3JtYXR0ZXI6OndpdGgoKS5ub3RhdGlvbihOb3RhdGlvbjo6Y29tcGFjdFNob3J0KCkp
CisgICAgICogPC9wcmU+CisgICAgICoKKyAgICAgKiBUaGUgZGVmYXVsdCBpcyB0byB1c2Ugc2lt
cGxlIG5vdGF0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIG5vdGF0aW9uCisgICAgICogICAg
ICAgICAgICBUaGUgbm90YXRpb24gc3RyYXRlZ3kgdG8gdXNlLgorICAgICAqIEByZXR1cm4gVGhl
IGZsdWVudCBjaGFpbi4KKyAgICAgKiBAc2VlIE5vdGF0aW9uCisgICAgICogQGRyYWZ0IElDVSA2
MAorICAgICAqLworICAgIERlcml2ZWQgbm90YXRpb24oY29uc3QgTm90YXRpb24gJm5vdGF0aW9u
KSBjb25zdCAmOworCisgICAgLyoqCisgICAgICogT3ZlcmxvYWQgb2Ygbm90YXRpb24oKSBmb3Ig
dXNlIG9uIGFuIHJ2YWx1ZSByZWZlcmVuY2UuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbm90YXRp
b24KKyAgICAgKiAgICAgICAgICAgIFRoZSBub3RhdGlvbiBzdHJhdGVneSB0byB1c2UuCisgICAg
ICogQHJldHVybiBUaGUgZmx1ZW50IGNoYWluLgorICAgICAqIEBzZWUgI25vdGF0aW9uCisgICAg
ICogQGRyYWZ0IElDVSA2MgorICAgICAqLworICAgIERlcml2ZWQgbm90YXRpb24oY29uc3QgTm90
YXRpb24gJm5vdGF0aW9uKSAmJjsKKworICAgIC8qKgorICAgICAqIFNwZWNpZmllcyB0aGUgdW5p
dCAodW5pdCBvZiBtZWFzdXJlLCBjdXJyZW5jeSwgb3IgcGVyY2VudCkgdG8gYXNzb2NpYXRlIHdp
dGggcmVuZGVyZWQgbnVtYmVycy4KKyAgICAgKgorICAgICAqIDx1bD4KKyAgICAgKiA8bGk+VW5p
dCBvZiBtZWFzdXJlOiAiMTIuMyBtZXRlcnMiCisgICAgICogPGxpPkN1cnJlbmN5OiAiJDEyLjMw
IgorICAgICAqIDxsaT5QZXJjZW50OiAiMTIuMyUiCisgICAgICogPC91bD4KKyAgICAgKgorICAg
ICAqIEFsbCB1bml0cyB3aWxsIGJlIHByb3Blcmx5IGxvY2FsaXplZCB3aXRoIGxvY2FsZSBkYXRh
LCBhbmQgYWxsIHVuaXRzIGFyZSBjb21wYXRpYmxlIHdpdGggbm90YXRpb24gc3R5bGVzLAorICAg
ICAqIHJvdW5kaW5nIHByZWNpc2lvbnMsIGFuZCBvdGhlciBudW1iZXIgZm9ybWF0dGVyIHNldHRp
bmdzLgorICAgICAqCisgICAgICogUGFzcyB0aGlzIG1ldGhvZCBhbnkgaW5zdGFuY2Ugb2Yge0Bs
aW5rIE1lYXN1cmVVbml0fS4gRm9yIHVuaXRzIG9mIG1lYXN1cmU6CisgICAgICoKKyAgICAgKiA8
cHJlPgorICAgICAqIE51bWJlckZvcm1hdHRlcjo6d2l0aCgpLnVuaXQoTWVhc3VyZVVuaXQ6Omdl
dE1ldGVyKCkpCisgICAgICogPC9wcmU+CisgICAgICoKKyAgICAgKiBDdXJyZW5jeToKKyAgICAg
KgorICAgICAqIDxwcmU+CisgICAgICogTnVtYmVyRm9ybWF0dGVyOjp3aXRoKCkudW5pdChDdXJy
ZW5jeVVuaXQodSJVU0QiLCBzdGF0dXMpKQorICAgICAqIDwvcHJlPgorICAgICAqCisgICAgICog
UGVyY2VudDoKKyAgICAgKgorICAgICAqIDxwcmU+CisgICAgICogTnVtYmVyRm9ybWF0dGVyOjp3
aXRoKCkudW5pdChOb1VuaXQucGVyY2VudCgpKQorICAgICAqIDwvcHJlPgorICAgICAqCisgICAg
ICogU2VlIHtAbGluayAjcGVyVW5pdH0gZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBmb3JtYXQg
c3RyaW5ncyBsaWtlICI1IG1ldGVycyBwZXIgc2Vjb25kIi4KKyAgICAgKgorICAgICAqIFRoZSBk
ZWZhdWx0IGlzIHRvIHJlbmRlciB3aXRob3V0IHVuaXRzIChlcXVpdmFsZW50IHRvIE5vVW5pdC5i
YXNlKCkpLgorICAgICAqCisgICAgICogQHBhcmFtIHVuaXQKKyAgICAgKiAgICAgICAgICAgIFRo
ZSB1bml0IHRvIHJlbmRlci4KKyAgICAgKiBAcmV0dXJuIFRoZSBmbHVlbnQgY2hhaW4uCisgICAg
ICogQHNlZSBNZWFzdXJlVW5pdAorICAgICAqIEBzZWUgQ3VycmVuY3kKKyAgICAgKiBAc2VlIE5v
VW5pdAorICAgICAqIEBzZWUgI3BlclVuaXQKKyAgICAgKiBAZHJhZnQgSUNVIDYwCisgICAgICov
CisgICAgRGVyaXZlZCB1bml0KGNvbnN0IGljdTo6TWVhc3VyZVVuaXQgJnVuaXQpIGNvbnN0ICY7
CisKKyAgICAvKioKKyAgICAgKiBPdmVybG9hZCBvZiB1bml0KCkgZm9yIHVzZSBvbiBhbiBydmFs
dWUgcmVmZXJlbmNlLgorICAgICAqCisgICAgICogQHBhcmFtIHVuaXQKKyAgICAgKiAgICAgICAg
ICAgIFRoZSB1bml0IHRvIHJlbmRlci4KKyAgICAgKiBAcmV0dXJuIFRoZSBmbHVlbnQgY2hhaW4u
CisgICAgICogQHNlZSAjdW5pdAorICAgICAqIEBkcmFmdCBJQ1UgNjIKKyAgICAgKi8KKyAgICBE
ZXJpdmVkIHVuaXQoY29uc3QgaWN1OjpNZWFzdXJlVW5pdCAmdW5pdCkgJiY7CisKKyAgICAvKioK
KyAgICAgKiBMaWtlIHVuaXQoKSwgYnV0IHRha2VzIG93bmVyc2hpcCBvZiBhIHBvaW50ZXIuICBD
b252ZW5pZW50IGZvciB1c2Ugd2l0aCB0aGUgTWVhc3VyZUZvcm1hdCBmYWN0b3J5CisgICAgICog
bWV0aG9kcyB0aGF0IHJldHVybiBwb2ludGVycyB0aGF0IG5lZWQgb3duZXJzaGlwLgorICAgICAq
CisgICAgICogTm90ZTogY29uc2lkZXIgdXNpbmcgdGhlIE1lYXN1cmVGb3JtYXQgZmFjdG9yeSBt
ZXRob2RzIHRoYXQgcmV0dXJuIGJ5IHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtIHVuaXQK
KyAgICAgKiAgICAgICAgICAgIFRoZSB1bml0IHRvIHJlbmRlci4KKyAgICAgKiBAcmV0dXJuIFRo
ZSBmbHVlbnQgY2hhaW4uCisgICAgICogQHNlZSAjdW5pdAorICAgICAqIEBzZWUgTWVhc3VyZVVu
aXQKKyAgICAgKiBAZHJhZnQgSUNVIDYwCisgICAgICovCisgICAgRGVyaXZlZCBhZG9wdFVuaXQo
aWN1OjpNZWFzdXJlVW5pdCAqdW5pdCkgY29uc3QgJjsKKworICAgIC8qKgorICAgICAqIE92ZXJs
b2FkIG9mIGFkb3B0VW5pdCgpIGZvciB1c2Ugb24gYW4gcnZhbHVlIHJlZmVyZW5jZS4KKyAgICAg
KgorICAgICAqIEBwYXJhbSB1bml0CisgICAgICogICAgICAgICAgICBUaGUgdW5pdCB0byByZW5k
ZXIuCisgICAgICogQHJldHVybiBUaGUgZmx1ZW50IGNoYWluLgorICAgICAqIEBzZWUgI2Fkb3B0
VW5pdAorICAgICAqIEBkcmFmdCBJQ1UgNjIKKyAgICAgKi8KKyAgICBEZXJpdmVkIGFkb3B0VW5p
dChpY3U6Ok1lYXN1cmVVbml0ICp1bml0KSAmJjsKKworICAgIC8qKgorICAgICAqIFNldHMgYSB1
bml0IHRvIGJlIHVzZWQgaW4gdGhlIGRlbm9taW5hdG9yLiBGb3IgZXhhbXBsZSwgdG8gZm9ybWF0
ICIzIG0vcyIsIHBhc3MgTUVURVIgdG8gdGhlIHVuaXQgYW5kIFNFQ09ORCB0bworICAgICAqIHRo
ZSBwZXJVbml0LgorICAgICAqCisgICAgICogUGFzcyB0aGlzIG1ldGhvZCBhbnkgaW5zdGFuY2Ug
b2Yge0BsaW5rIE1lYXN1cmVVbml0fS4gRXhhbXBsZToKKyAgICAgKgorICAgICAqIDxwcmU+Cisg
ICAgICogTnVtYmVyRm9ybWF0dGVyOjp3aXRoKCkKKyAgICAgKiAgICAgIC51bml0KE1lYXN1cmVV
bml0OjpnZXRNZXRlcigpKQorICAgICAqICAgICAgLnBlclVuaXQoTWVhc3VyZVVuaXQ6OmdldFNl
Y29uZCgpKQorICAgICAqIDwvcHJlPgorICAgICAqCisgICAgICogVGhlIGRlZmF1bHQgaXMgbm90
IHRvIGRpc3BsYXkgYW55IHVuaXQgaW4gdGhlIGRlbm9taW5hdG9yLgorICAgICAqCisgICAgICog
SWYgYSBwZXItdW5pdCBpcyBzcGVjaWZpZWQgd2l0aG91dCBhIHByaW1hcnkgdW5pdCB2aWEge0Bs
aW5rICN1bml0fSwgdGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZC4KKyAgICAgKgorICAgICAqIEBw
YXJhbSBwZXJVbml0CisgICAgICogICAgICAgICAgICBUaGUgdW5pdCB0byByZW5kZXIgaW4gdGhl
IGRlbm9taW5hdG9yLgorICAgICAqIEByZXR1cm4gVGhlIGZsdWVudCBjaGFpbgorICAgICAqIEBz
ZWUgI3VuaXQKKyAgICAgKiBAZHJhZnQgSUNVIDYxCisgICAgICovCisgICAgRGVyaXZlZCBwZXJV
bml0KGNvbnN0IGljdTo6TWVhc3VyZVVuaXQgJnBlclVuaXQpIGNvbnN0ICY7CisKKyAgICAvKioK
KyAgICAgKiBPdmVybG9hZCBvZiBwZXJVbml0KCkgZm9yIHVzZSBvbiBhbiBydmFsdWUgcmVmZXJl
bmNlLgorICAgICAqCisgICAgICogQHBhcmFtIHBlclVuaXQKKyAgICAgKiAgICAgICAgICAgIFRo
ZSB1bml0IHRvIHJlbmRlciBpbiB0aGUgZGVub21pbmF0b3IuCisgICAgICogQHJldHVybiBUaGUg
Zmx1ZW50IGNoYWluLgorICAgICAqIEBzZWUgI3BlclVuaXQKKyAgICAgKiBAZHJhZnQgSUNVIDYy
CisgICAgICovCisgICAgRGVyaXZlZCBwZXJVbml0KGNvbnN0IGljdTo6TWVhc3VyZVVuaXQgJnBl
clVuaXQpICYmOworCisgICAgLyoqCisgICAgICogTGlrZSBwZXJVbml0KCksIGJ1dCB0YWtlcyBv
d25lcnNoaXAgb2YgYSBwb2ludGVyLiAgQ29udmVuaWVudCBmb3IgdXNlIHdpdGggdGhlIE1lYXN1
cmVGb3JtYXQgZmFjdG9yeQorICAgICAqIG1ldGhvZHMgdGhhdCByZXR1cm4gcG9pbnRlcnMgdGhh
dCBuZWVkIG93bmVyc2hpcC4KKyAgICAgKgorICAgICAqIE5vdGU6IGNvbnNpZGVyIHVzaW5nIHRo
ZSBNZWFzdXJlRm9ybWF0IGZhY3RvcnkgbWV0aG9kcyB0aGF0IHJldHVybiBieSB2YWx1ZS4KKyAg
ICAgKgorICAgICAqIEBwYXJhbSBwZXJVbml0CisgICAgICogICAgICAgICAgICBUaGUgdW5pdCB0
byByZW5kZXIgaW4gdGhlIGRlbm9taW5hdG9yLgorICAgICAqIEByZXR1cm4gVGhlIGZsdWVudCBj
aGFpbi4KKyAgICAgKiBAc2VlICNwZXJVbml0CisgICAgICogQHNlZSBNZWFzdXJlVW5pdAorICAg
ICAqIEBkcmFmdCBJQ1UgNjEKKyAgICAgKi8KKyAgICBEZXJpdmVkIGFkb3B0UGVyVW5pdChpY3U6
Ok1lYXN1cmVVbml0ICpwZXJVbml0KSBjb25zdCAmOworCisgICAgLyoqCisgICAgICogT3Zlcmxv
YWQgb2YgYWRvcHRQZXJVbml0KCkgZm9yIHVzZSBvbiBhbiBydmFsdWUgcmVmZXJlbmNlLgorICAg
ICAqCisgICAgICogQHBhcmFtIHBlclVuaXQKKyAgICAgKiAgICAgICAgICAgIFRoZSB1bml0IHRv
IHJlbmRlciBpbiB0aGUgZGVub21pbmF0b3IuCisgICAgICogQHJldHVybiBUaGUgZmx1ZW50IGNo
YWluLgorICAgICAqIEBzZWUgI2Fkb3B0UGVyVW5pdAorICAgICAqIEBkcmFmdCBJQ1UgNjIKKyAg
ICAgKi8KKyAgICBEZXJpdmVkIGFkb3B0UGVyVW5pdChpY3U6Ok1lYXN1cmVVbml0ICpwZXJVbml0
KSAmJjsKKworICAgIC8qKgorICAgICAqIFNwZWNpZmllcyB0aGUgcm91bmRpbmcgcHJlY2lzaW9u
IHRvIHVzZSB3aGVuIGZvcm1hdHRpbmcgbnVtYmVycy4KKyAgICAgKgorICAgICAqIDx1bD4KKyAg
ICAgKiA8bGk+Um91bmQgdG8gMyBkZWNpbWFsIHBsYWNlczogIjMuMTQyIgorICAgICAqIDxsaT5S
b3VuZCB0byAzIHNpZ25pZmljYW50IGZpZ3VyZXM6ICIzLjE0IgorICAgICAqIDxsaT5Sb3VuZCB0
byB0aGUgY2xvc2VzdCBuaWNrZWw6ICIzLjE1IgorICAgICAqIDxsaT5EbyBub3QgcGVyZm9ybSBy
b3VuZGluZzogIjMuMTQxNTkyNi4uLiIKKyAgICAgKiA8L3VsPgorICAgICAqCisgICAgICogPHA+
CisgICAgICogUGFzcyB0aGlzIG1ldGhvZCB0aGUgcmV0dXJuIHZhbHVlIG9mIG9uZSBvZiB0aGUg
ZmFjdG9yeSBtZXRob2RzIG9uIHtAbGluayBQcmVjaXNpb259LiBGb3IgZXhhbXBsZToKKyAgICAg
KgorICAgICAqIDxwcmU+CisgICAgICogTnVtYmVyRm9ybWF0dGVyOjp3aXRoKCkucHJlY2lzaW9u
KFByZWNpc2lvbjo6Zml4ZWRGcmFjdGlvbigyKSkKKyAgICAgKiA8L3ByZT4KKyAgICAgKgorICAg
ICAqIDxwPgorICAgICAqIEluIG1vc3QgY2FzZXMsIHRoZSBkZWZhdWx0IHJvdW5kaW5nIHN0cmF0
ZWd5IGlzIHRvIHJvdW5kIHRvIDYgZnJhY3Rpb24gcGxhY2VzOyBpLmUuLAorICAgICAqIDxjb2Rl
PlByZWNpc2lvbi5tYXhGcmFjdGlvbig2KTwvY29kZT4uIFRoZSBleGNlcHRpb25zIGFyZSBpZiBj
b21wYWN0IG5vdGF0aW9uIGlzIGJlaW5nIHVzZWQsIHRoZW4gdGhlIGNvbXBhY3QKKyAgICAgKiBu
b3RhdGlvbiByb3VuZGluZyBzdHJhdGVneSBpcyB1c2VkIChzZWUge0BsaW5rIE5vdGF0aW9uI2Nv
bXBhY3RTaG9ydH0gZm9yIGRldGFpbHMpLCBvciBpZiB0aGUgdW5pdCBpcyBhIGN1cnJlbmN5LAor
ICAgICAqIHRoZW4gc3RhbmRhcmQgY3VycmVuY3kgcm91bmRpbmcgaXMgdXNlZCwgd2hpY2ggdmFy
aWVzIGZyb20gY3VycmVuY3kgdG8gY3VycmVuY3kgKHNlZSB7QGxpbmsgUHJlY2lzaW9uI2N1cnJl
bmN5fSBmb3IKKyAgICAgKiBkZXRhaWxzKS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwcmVjaXNp
b24KKyAgICAgKiAgICAgICAgICAgIFRoZSByb3VuZGluZyBwcmVjaXNpb24gdG8gdXNlLgorICAg
ICAqIEByZXR1cm4gVGhlIGZsdWVudCBjaGFpbi4KKyAgICAgKiBAc2VlIFByZWNpc2lvbgorICAg
ICAqIEBkcmFmdCBJQ1UgNjIKKyAgICAgKi8KKyAgICBEZXJpdmVkIHByZWNpc2lvbihjb25zdCBQ
cmVjaXNpb24mIHByZWNpc2lvbikgY29uc3QgJjsKKworICAgIC8qKgorICAgICAqIE92ZXJsb2Fk
IG9mIHByZWNpc2lvbigpIGZvciB1c2Ugb24gYW4gcnZhbHVlIHJlZmVyZW5jZS4KKyAgICAgKgor
ICAgICAqIEBwYXJhbSBwcmVjaXNpb24KKyAgICAgKiAgICAgICAgICAgIFRoZSByb3VuZGluZyBw
cmVjaXNpb24gdG8gdXNlLgorICAgICAqIEByZXR1cm4gVGhlIGZsdWVudCBjaGFpbi4KKyAgICAg
KiBAc2VlICNwcmVjaXNpb24KKyAgICAgKiBAZHJhZnQgSUNVIDYyCisgICAgICovCisgICAgRGVy
aXZlZCBwcmVjaXNpb24oY29uc3QgUHJlY2lzaW9uJiBwcmVjaXNpb24pICYmOworCisgICAgLyoq
CisgICAgICogU3BlY2lmaWVzIGhvdyB0byBkZXRlcm1pbmUgdGhlIGRpcmVjdGlvbiB0byByb3Vu
ZCBhIG51bWJlciB3aGVuIGl0IGhhcyBtb3JlIGRpZ2l0cyB0aGFuIGZpdCBpbiB0aGUKKyAgICAg
KiBkZXNpcmVkIHByZWNpc2lvbi4gIFdoZW4gZm9ybWF0dGluZyAxLjIzNToKKyAgICAgKgorICAg
ICAqIDx1bD4KKyAgICAgKiA8bGk+Q2VpbGluZyByb3VuZGluZyBtb2RlIHdpdGggaW50ZWdlciBw
cmVjaXNpb246ICIyIgorICAgICAqIDxsaT5IYWxmLWRvd24gcm91bmRpbmcgbW9kZSB3aXRoIDIg
Zml4ZWQgZnJhY3Rpb24gZGlnaXRzOiAiMS4yMyIKKyAgICAgKiA8bGk+SGFsZi11cCByb3VuZGlu
ZyBtb2RlIHdpdGggMiBmaXhlZCBmcmFjdGlvbiBkaWdpdHM6ICIxLjI0IgorICAgICAqIDwvdWw+
CisgICAgICoKKyAgICAgKiBUaGUgZGVmYXVsdCBpcyBIQUxGX0VWRU4uIEZvciBtb3JlIGluZm9y
bWF0aW9uIG9uIHJvdW5kaW5nIG1vZGUsIHNlZSB0aGUgSUNVIHVzZXJndWlkZSBoZXJlOgorICAg
ICAqCisgICAgICogaHR0cDovL3VzZXJndWlkZS5pY3UtcHJvamVjdC5vcmcvZm9ybWF0cGFyc2Uv
bnVtYmVycy9yb3VuZGluZy1tb2RlcworICAgICAqCisgICAgICogQHBhcmFtIHJvdW5kaW5nTW9k
ZSBUaGUgcm91bmRpbmcgbW9kZSB0byB1c2UuCisgICAgICogQHJldHVybiBUaGUgZmx1ZW50IGNo
YWluLgorICAgICAqIEBkcmFmdCBJQ1UgNjIKKyAgICAgKi8KKyAgICBEZXJpdmVkIHJvdW5kaW5n
TW9kZShVTnVtYmVyRm9ybWF0Um91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkgY29uc3QgJjsKKwor
ICAgIC8qKgorICAgICAqIE92ZXJsb2FkIG9mIHJvdW5kaW5nTW9kZSgpIGZvciB1c2Ugb24gYW4g
cnZhbHVlIHJlZmVyZW5jZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSByb3VuZGluZ01vZGUgVGhl
IHJvdW5kaW5nIG1vZGUgdG8gdXNlLgorICAgICAqIEByZXR1cm4gVGhlIGZsdWVudCBjaGFpbi4K
KyAgICAgKiBAc2VlICNyb3VuZGluZ01vZGUKKyAgICAgKiBAZHJhZnQgSUNVIDYyCisgICAgICov
CisgICAgRGVyaXZlZCByb3VuZGluZ01vZGUoVU51bWJlckZvcm1hdFJvdW5kaW5nTW9kZSByb3Vu
ZGluZ01vZGUpICYmOworCisgICAgLyoqCisgICAgICogU3BlY2lmaWVzIHRoZSBncm91cGluZyBz
dHJhdGVneSB0byB1c2Ugd2hlbiBmb3JtYXR0aW5nIG51bWJlcnMuCisgICAgICoKKyAgICAgKiA8
dWw+CisgICAgICogPGxpPkRlZmF1bHQgZ3JvdXBpbmc6ICIxMiwzMDAiIGFuZCAiMSwyMzAiCisg
ICAgICogPGxpPkdyb3VwaW5nIHdpdGggYXQgbGVhc3QgMiBkaWdpdHM6ICIxMiwzMDAiIGFuZCAi
MTIzMCIKKyAgICAgKiA8bGk+Tm8gZ3JvdXBpbmc6ICIxMjMwMCIgYW5kICIxMjMwIgorICAgICAq
IDwvdWw+CisgICAgICoKKyAgICAgKiA8cD4KKyAgICAgKiBUaGUgZXhhY3QgZ3JvdXBpbmcgd2lk
dGhzIHdpbGwgYmUgY2hvc2VuIGJhc2VkIG9uIHRoZSBsb2NhbGUuCisgICAgICoKKyAgICAgKiA8
cD4KKyAgICAgKiBQYXNzIHRoaXMgbWV0aG9kIGFuIGVsZW1lbnQgZnJvbSB0aGUge0BsaW5rIFVO
dW1iZXJHcm91cGluZ1N0cmF0ZWd5fSBlbnVtLiBGb3IgZXhhbXBsZToKKyAgICAgKgorICAgICAq
IDxwcmU+CisgICAgICogTnVtYmVyRm9ybWF0dGVyOjp3aXRoKCkuZ3JvdXBpbmcoVU5VTV9HUk9V
UElOR19NSU4yKQorICAgICAqIDwvcHJlPgorICAgICAqCisgICAgICogVGhlIGRlZmF1bHQgaXMg
dG8gcGVyZm9ybSBncm91cGluZyBhY2NvcmRpbmcgdG8gbG9jYWxlIGRhdGE7IG1vc3QgbG9jYWxl
cywgYnV0IG5vdCBhbGwgbG9jYWxlcywKKyAgICAgKiBlbmFibGUgaXQgYnkgZGVmYXVsdC4KKyAg
ICAgKgorICAgICAqIEBwYXJhbSBzdHJhdGVneQorICAgICAqICAgICAgICAgICAgVGhlIGdyb3Vw
aW5nIHN0cmF0ZWd5IHRvIHVzZS4KKyAgICAgKiBAcmV0dXJuIFRoZSBmbHVlbnQgY2hhaW4uCisg
ICAgICogQGRyYWZ0IElDVSA2MQorICAgICAqLworICAgIERlcml2ZWQgZ3JvdXBpbmcoVU51bWJl
ckdyb3VwaW5nU3RyYXRlZ3kgc3RyYXRlZ3kpIGNvbnN0ICY7CisKKyAgICAvKioKKyAgICAgKiBP
dmVybG9hZCBvZiBncm91cGluZygpIGZvciB1c2Ugb24gYW4gcnZhbHVlIHJlZmVyZW5jZS4KKyAg
ICAgKgorICAgICAqIEBwYXJhbSBzdHJhdGVneQorICAgICAqICAgICAgICAgICAgVGhlIGdyb3Vw
aW5nIHN0cmF0ZWd5IHRvIHVzZS4KKyAgICAgKiBAcmV0dXJuIFRoZSBmbHVlbnQgY2hhaW4uCisg
ICAgICogQHNlZSAjZ3JvdXBpbmcKKyAgICAgKiBAZHJhZnQgSUNVIDYyCisgICAgICovCisgICAg
RGVyaXZlZCBncm91cGluZyhVTnVtYmVyR3JvdXBpbmdTdHJhdGVneSBzdHJhdGVneSkgJiY7CisK
KyAgICAvKioKKyAgICAgKiBTcGVjaWZpZXMgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gbnVtYmVy
IG9mIGRpZ2l0cyB0byByZW5kZXIgYmVmb3JlIHRoZSBkZWNpbWFsIG1hcmsuCisgICAgICoKKyAg
ICAgKiA8dWw+CisgICAgICogPGxpPlplcm8gbWluaW11bSBpbnRlZ2VyIGRpZ2l0czogIi4wOCIK
KyAgICAgKiA8bGk+T25lIG1pbmltdW0gaW50ZWdlciBkaWdpdDogIjAuMDgiCisgICAgICogPGxp
PlR3byBtaW5pbXVtIGludGVnZXIgZGlnaXRzOiAiMDAuMDgiCisgICAgICogPC91bD4KKyAgICAg
KgorICAgICAqIDxwPgorICAgICAqIFBhc3MgdGhpcyBtZXRob2QgdGhlIHJldHVybiB2YWx1ZSBv
ZiB7QGxpbmsgSW50ZWdlcldpZHRoI3plcm9GaWxsVG99LiBGb3IgZXhhbXBsZToKKyAgICAgKgor
ICAgICAqIDxwcmU+CisgICAgICogTnVtYmVyRm9ybWF0dGVyOjp3aXRoKCkuaW50ZWdlcldpZHRo
KEludGVnZXJXaWR0aDo6emVyb0ZpbGxUbygyKSkKKyAgICAgKiA8L3ByZT4KKyAgICAgKgorICAg
ICAqIFRoZSBkZWZhdWx0IGlzIHRvIGhhdmUgb25lIG1pbmltdW0gaW50ZWdlciBkaWdpdC4KKyAg
ICAgKgorICAgICAqIEBwYXJhbSBzdHlsZQorICAgICAqICAgICAgICAgICAgVGhlIGludGVnZXIg
d2lkdGggdG8gdXNlLgorICAgICAqIEByZXR1cm4gVGhlIGZsdWVudCBjaGFpbi4KKyAgICAgKiBA
c2VlIEludGVnZXJXaWR0aAorICAgICAqIEBkcmFmdCBJQ1UgNjAKKyAgICAgKi8KKyAgICBEZXJp
dmVkIGludGVnZXJXaWR0aChjb25zdCBJbnRlZ2VyV2lkdGggJnN0eWxlKSBjb25zdCAmOworCisg
ICAgLyoqCisgICAgICogT3ZlcmxvYWQgb2YgaW50ZWdlcldpZHRoKCkgZm9yIHVzZSBvbiBhbiBy
dmFsdWUgcmVmZXJlbmNlLgorICAgICAqCisgICAgICogQHBhcmFtIHN0eWxlCisgICAgICogICAg
ICAgICAgICBUaGUgaW50ZWdlciB3aWR0aCB0byB1c2UuCisgICAgICogQHJldHVybiBUaGUgZmx1
ZW50IGNoYWluLgorICAgICAqIEBzZWUgI2ludGVnZXJXaWR0aAorICAgICAqIEBkcmFmdCBJQ1Ug
NjIKKyAgICAgKi8KKyAgICBEZXJpdmVkIGludGVnZXJXaWR0aChjb25zdCBJbnRlZ2VyV2lkdGgg
JnN0eWxlKSAmJjsKKworICAgIC8qKgorICAgICAqIFNwZWNpZmllcyB0aGUgc3ltYm9scyAoZGVj
aW1hbCBzZXBhcmF0b3IsIGdyb3VwaW5nIHNlcGFyYXRvciwgcGVyY2VudCBzaWduLCBudW1lcmFs
cywgZXRjLikgdG8gdXNlIHdoZW4gcmVuZGVyaW5nCisgICAgICogbnVtYmVycy4KKyAgICAgKgor
ICAgICAqIDx1bD4KKyAgICAgKiA8bGk+PGVtPmVuX1VTPC9lbT4gc3ltYm9sczogIjEyLDM0NS42
NyIKKyAgICAgKiA8bGk+PGVtPmZyX0ZSPC9lbT4gc3ltYm9sczogIjEyJm5ic3A7MzQ1LDY3Igor
ICAgICAqIDxsaT48ZW0+ZGVfQ0g8L2VtPiBzeW1ib2xzOiAiMTLigJkzNDUuNjciCisgICAgICog
PGxpPjxlbT5teV9NWTwvZW0+IHN5bWJvbHM6ICLhgYHhgYIs4YGD4YGE4YGFLuGBhuGBhyIKKyAg
ICAgKiA8L3VsPgorICAgICAqCisgICAgICogPHA+CisgICAgICogUGFzcyB0aGlzIG1ldGhvZCBh
biBpbnN0YW5jZSBvZiB7QGxpbmsgRGVjaW1hbEZvcm1hdFN5bWJvbHN9LiBGb3IgZXhhbXBsZToK
KyAgICAgKgorICAgICAqIDxwcmU+CisgICAgICogTnVtYmVyRm9ybWF0dGVyOjp3aXRoKCkuc3lt
Ym9scyhEZWNpbWFsRm9ybWF0U3ltYm9scyhMb2NhbGUoImRlX0NIIiksIHN0YXR1cykpCisgICAg
ICogPC9wcmU+CisgICAgICoKKyAgICAgKiA8cD4KKyAgICAgKiA8c3Ryb25nPk5vdGU6PC9zdHJv
bmc+IERlY2ltYWxGb3JtYXRTeW1ib2xzIGF1dG9tYXRpY2FsbHkgY2hvb3NlcyB0aGUgYmVzdCBu
dW1iZXJpbmcgc3lzdGVtIGJhc2VkIG9uIHRoZSBsb2NhbGUuCisgICAgICogSW4gdGhlIGV4YW1w
bGVzIGFib3ZlLCB0aGUgZmlyc3QgdGhyZWUgYXJlIHVzaW5nIHRoZSBMYXRpbiBudW1iZXJpbmcg
c3lzdGVtLCBhbmQgdGhlIGZvdXJ0aCBpcyB1c2luZyB0aGUgTXlhbm1hcgorICAgICAqIG51bWJl
cmluZyBzeXN0ZW0uCisgICAgICoKKyAgICAgKiA8cD4KKyAgICAgKiA8c3Ryb25nPk5vdGU6PC9z
dHJvbmc+IFRoZSBpbnN0YW5jZSBvZiBEZWNpbWFsRm9ybWF0U3ltYm9scyB3aWxsIGJlIGNvcGll
ZDogY2hhbmdlcyBtYWRlIHRvIHRoZSBzeW1ib2xzIG9iamVjdAorICAgICAqIGFmdGVyIHBhc3Np
bmcgaXQgaW50byB0aGUgZmx1ZW50IGNoYWluIHdpbGwgbm90IGJlIHNlZW4uCisgICAgICoKKyAg
ICAgKiA8cD4KKyAgICAgKiA8c3Ryb25nPk5vdGU6PC9zdHJvbmc+IENhbGxpbmcgdGhpcyBtZXRo
b2Qgd2lsbCBvdmVycmlkZSBhbnkgcHJldmlvdXNseSBzcGVjaWZpZWQgRGVjaW1hbEZvcm1hdFN5
bWJvbHMKKyAgICAgKiBvciBOdW1iZXJpbmdTeXN0ZW0uCisgICAgICoKKyAgICAgKiA8cD4KKyAg
ICAgKiBUaGUgZGVmYXVsdCBpcyB0byBjaG9vc2UgdGhlIHN5bWJvbHMgYmFzZWQgb24gdGhlIGxv
Y2FsZSBzcGVjaWZpZWQgaW4gdGhlIGZsdWVudCBjaGFpbi4KKyAgICAgKgorICAgICAqIEBwYXJh
bSBzeW1ib2xzCisgICAgICogICAgICAgICAgICBUaGUgRGVjaW1hbEZvcm1hdFN5bWJvbHMgdG8g
dXNlLgorICAgICAqIEByZXR1cm4gVGhlIGZsdWVudCBjaGFpbi4KKyAgICAgKiBAc2VlIERlY2lt
YWxGb3JtYXRTeW1ib2xzCisgICAgICogQGRyYWZ0IElDVSA2MAorICAgICAqLworICAgIERlcml2
ZWQgc3ltYm9scyhjb25zdCBEZWNpbWFsRm9ybWF0U3ltYm9scyAmc3ltYm9scykgY29uc3QgJjsK
KworICAgIC8qKgorICAgICAqIE92ZXJsb2FkIG9mIHN5bWJvbHMoKSBmb3IgdXNlIG9uIGFuIHJ2
YWx1ZSByZWZlcmVuY2UuCisgICAgICoKKyAgICAgKiBAcGFyYW0gc3ltYm9scworICAgICAqICAg
ICAgICAgICAgVGhlIERlY2ltYWxGb3JtYXRTeW1ib2xzIHRvIHVzZS4KKyAgICAgKiBAcmV0dXJu
IFRoZSBmbHVlbnQgY2hhaW4uCisgICAgICogQHNlZSAjc3ltYm9scworICAgICAqIEBkcmFmdCBJ
Q1UgNjIKKyAgICAgKi8KKyAgICBEZXJpdmVkIHN5bWJvbHMoY29uc3QgRGVjaW1hbEZvcm1hdFN5
bWJvbHMgJnN5bWJvbHMpICYmOworCisgICAgLyoqCisgICAgICogU3BlY2lmaWVzIHRoYXQgdGhl
IGdpdmVuIG51bWJlcmluZyBzeXN0ZW0gc2hvdWxkIGJlIHVzZWQgd2hlbiBmZXRjaGluZyBzeW1i
b2xzLgorICAgICAqCisgICAgICogPHVsPgorICAgICAqIDxsaT5MYXRpbiBudW1iZXJpbmcgc3lz
dGVtOiAiMTIsMzQ1IgorICAgICAqIDxsaT5NeWFubWFyIG51bWJlcmluZyBzeXN0ZW06ICLhgYHh
gYIs4YGD4YGE4YGFIgorICAgICAqIDxsaT5NYXRoIFNhbnMgQm9sZCBudW1iZXJpbmcgc3lzdGVt
OiAi8J2frfCdn64s8J2fr/Cdn7DwnZ+xIgorICAgICAqIDwvdWw+CisgICAgICoKKyAgICAgKiA8
cD4KKyAgICAgKiBQYXNzIHRoaXMgbWV0aG9kIGFuIGluc3RhbmNlIG9mIHtAbGluayBOdW1iZXJp
bmdTeXN0ZW19LiBGb3IgZXhhbXBsZSwgdG8gZm9yY2UgdGhlIGxvY2FsZSB0byBhbHdheXMgdXNl
IHRoZSBMYXRpbgorICAgICAqIGFscGhhYmV0IG51bWJlcmluZyBzeXN0ZW0gKEFTQ0lJIGRpZ2l0
cyk6CisgICAgICoKKyAgICAgKiA8cHJlPgorICAgICAqIE51bWJlckZvcm1hdHRlcjo6d2l0aCgp
LmFkb3B0U3ltYm9scyhOdW1iZXJpbmdTeXN0ZW06OmNyZWF0ZUluc3RhbmNlQnlOYW1lKCJsYXRu
Iiwgc3RhdHVzKSkKKyAgICAgKiA8L3ByZT4KKyAgICAgKgorICAgICAqIDxwPgorICAgICAqIDxz
dHJvbmc+Tm90ZTo8L3N0cm9uZz4gQ2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIG92ZXJyaWRlIGFu
eSBwcmV2aW91c2x5IHNwZWNpZmllZCBEZWNpbWFsRm9ybWF0U3ltYm9scworICAgICAqIG9yIE51
bWJlcmluZ1N5c3RlbS4KKyAgICAgKgorICAgICAqIDxwPgorICAgICAqIFRoZSBkZWZhdWx0IGlz
IHRvIGNob29zZSB0aGUgYmVzdCBudW1iZXJpbmcgc3lzdGVtIGZvciB0aGUgbG9jYWxlLgorICAg
ICAqCisgICAgICogPHA+CisgICAgICogVGhpcyBtZXRob2QgdGFrZXMgb3duZXJzaGlwIG9mIGEg
cG9pbnRlciBpbiBvcmRlciB0byB3b3JrIG5pY2VseSB3aXRoIHRoZSBOdW1iZXJpbmdTeXN0ZW0g
ZmFjdG9yeSBtZXRob2RzLgorICAgICAqCisgICAgICogQHBhcmFtIHN5bWJvbHMKKyAgICAgKiAg
ICAgICAgICAgIFRoZSBOdW1iZXJpbmdTeXN0ZW0gdG8gdXNlLgorICAgICAqIEByZXR1cm4gVGhl
IGZsdWVudCBjaGFpbi4KKyAgICAgKiBAc2VlIE51bWJlcmluZ1N5c3RlbQorICAgICAqIEBkcmFm
dCBJQ1UgNjAKKyAgICAgKi8KKyAgICBEZXJpdmVkIGFkb3B0U3ltYm9scyhOdW1iZXJpbmdTeXN0
ZW0gKnN5bWJvbHMpIGNvbnN0ICY7CisKKyAgICAvKioKKyAgICAgKiBPdmVybG9hZCBvZiBhZG9w
dFN5bWJvbHMoKSBmb3IgdXNlIG9uIGFuIHJ2YWx1ZSByZWZlcmVuY2UuCisgICAgICoKKyAgICAg
KiBAcGFyYW0gc3ltYm9scworICAgICAqICAgICAgICAgICAgVGhlIE51bWJlcmluZ1N5c3RlbSB0
byB1c2UuCisgICAgICogQHJldHVybiBUaGUgZmx1ZW50IGNoYWluLgorICAgICAqIEBzZWUgI2Fk
b3B0U3ltYm9scworICAgICAqIEBkcmFmdCBJQ1UgNjIKKyAgICAgKi8KKyAgICBEZXJpdmVkIGFk
b3B0U3ltYm9scyhOdW1iZXJpbmdTeXN0ZW0gKnN5bWJvbHMpICYmOworCisgICAgLyoqCisgICAg
ICogU2V0cyB0aGUgd2lkdGggb2YgdGhlIHVuaXQgKG1lYXN1cmUgdW5pdCBvciBjdXJyZW5jeSku
ICBNb3N0IGNvbW1vbiB2YWx1ZXM6CisgICAgICoKKyAgICAgKiA8dWw+CisgICAgICogPGxpPlNo
b3J0OiAiJDEyLjAwIiwgIjEyIG0iCisgICAgICogPGxpPklTTyBDb2RlOiAiVVNEIDEyLjAwIgor
ICAgICAqIDxsaT5GdWxsIG5hbWU6ICIxMi4wMCBVUyBkb2xsYXJzIiwgIjEyIG1ldGVycyIKKyAg
ICAgKiA8L3VsPgorICAgICAqCisgICAgICogPHA+CisgICAgICogUGFzcyBhbiBlbGVtZW50IGZy
b20gdGhlIHtAbGluayBVTnVtYmVyVW5pdFdpZHRofSBlbnVtIHRvIHRoaXMgc2V0dGVyLiBGb3Ig
ZXhhbXBsZToKKyAgICAgKgorICAgICAqIDxwcmU+CisgICAgICogTnVtYmVyRm9ybWF0dGVyOjp3
aXRoKCkudW5pdFdpZHRoKFVOdW1iZXJVbml0V2lkdGg6OlVOVU1fVU5JVF9XSURUSF9GVUxMX05B
TUUpCisgICAgICogPC9wcmU+CisgICAgICoKKyAgICAgKiA8cD4KKyAgICAgKiBUaGUgZGVmYXVs
dCBpcyB0aGUgU0hPUlQgd2lkdGguCisgICAgICoKKyAgICAgKiBAcGFyYW0gd2lkdGgKKyAgICAg
KiAgICAgICAgICAgIFRoZSB3aWR0aCB0byB1c2Ugd2hlbiByZW5kZXJpbmcgbnVtYmVycy4KKyAg
ICAgKiBAcmV0dXJuIFRoZSBmbHVlbnQgY2hhaW4KKyAgICAgKiBAc2VlIFVOdW1iZXJVbml0V2lk
dGgKKyAgICAgKiBAZHJhZnQgSUNVIDYwCisgICAgICovCisgICAgRGVyaXZlZCB1bml0V2lkdGgo
VU51bWJlclVuaXRXaWR0aCB3aWR0aCkgY29uc3QgJjsKKworICAgIC8qKgorICAgICAqIE92ZXJs
b2FkIG9mIHVuaXRXaWR0aCgpIGZvciB1c2Ugb24gYW4gcnZhbHVlIHJlZmVyZW5jZS4KKyAgICAg
KgorICAgICAqIEBwYXJhbSB3aWR0aAorICAgICAqICAgICAgICAgICAgVGhlIHdpZHRoIHRvIHVz
ZSB3aGVuIHJlbmRlcmluZyBudW1iZXJzLgorICAgICAqIEByZXR1cm4gVGhlIGZsdWVudCBjaGFp
bi4KKyAgICAgKiBAc2VlICN1bml0V2lkdGgKKyAgICAgKiBAZHJhZnQgSUNVIDYyCisgICAgICov
CisgICAgRGVyaXZlZCB1bml0V2lkdGgoVU51bWJlclVuaXRXaWR0aCB3aWR0aCkgJiY7CisKKyAg
ICAvKioKKyAgICAgKiBTZXRzIHRoZSBwbHVzL21pbnVzIHNpZ24gZGlzcGxheSBzdHJhdGVneS4g
TW9zdCBjb21tb24gdmFsdWVzOgorICAgICAqCisgICAgICogPHVsPgorICAgICAqIDxsaT5BdXRv
OiAiMTIzIiwgIi0xMjMiCisgICAgICogPGxpPkFsd2F5czogIisxMjMiLCAiLTEyMyIKKyAgICAg
KiA8bGk+QWNjb3VudGluZzogIiQxMjMiLCAiKCQxMjMpIgorICAgICAqIDwvdWw+CisgICAgICoK
KyAgICAgKiA8cD4KKyAgICAgKiBQYXNzIGFuIGVsZW1lbnQgZnJvbSB0aGUge0BsaW5rIFVOdW1i
ZXJTaWduRGlzcGxheX0gZW51bSB0byB0aGlzIHNldHRlci4gRm9yIGV4YW1wbGU6CisgICAgICoK
KyAgICAgKiA8cHJlPgorICAgICAqIE51bWJlckZvcm1hdHRlcjo6d2l0aCgpLnNpZ24oVU51bWJl
clNpZ25EaXNwbGF5OjpVTlVNX1NJR05fQUxXQVlTKQorICAgICAqIDwvcHJlPgorICAgICAqCisg
ICAgICogPHA+CisgICAgICogVGhlIGRlZmF1bHQgaXMgQVVUTyBzaWduIGRpc3BsYXkuCisgICAg
ICoKKyAgICAgKiBAcGFyYW0gc3R5bGUKKyAgICAgKiAgICAgICAgICAgIFRoZSBzaWduIGRpc3Bs
YXkgc3RyYXRlZ3kgdG8gdXNlIHdoZW4gcmVuZGVyaW5nIG51bWJlcnMuCisgICAgICogQHJldHVy
biBUaGUgZmx1ZW50IGNoYWluCisgICAgICogQHNlZSBVTnVtYmVyU2lnbkRpc3BsYXkKKyAgICAg
KiBAZHJhZnQgSUNVIDYwCisgICAgICovCisgICAgRGVyaXZlZCBzaWduKFVOdW1iZXJTaWduRGlz
cGxheSBzdHlsZSkgY29uc3QgJjsKKworICAgIC8qKgorICAgICAqIE92ZXJsb2FkIG9mIHNpZ24o
KSBmb3IgdXNlIG9uIGFuIHJ2YWx1ZSByZWZlcmVuY2UuCisgICAgICoKKyAgICAgKiBAcGFyYW0g
c3R5bGUKKyAgICAgKiAgICAgICAgICAgIFRoZSBzaWduIGRpc3BsYXkgc3RyYXRlZ3kgdG8gdXNl
IHdoZW4gcmVuZGVyaW5nIG51bWJlcnMuCisgICAgICogQHJldHVybiBUaGUgZmx1ZW50IGNoYWlu
LgorICAgICAqIEBzZWUgI3NpZ24KKyAgICAgKiBAZHJhZnQgSUNVIDYyCisgICAgICovCisgICAg
RGVyaXZlZCBzaWduKFVOdW1iZXJTaWduRGlzcGxheSBzdHlsZSkgJiY7CisKKyAgICAvKioKKyAg
ICAgKiBTZXRzIHRoZSBkZWNpbWFsIHNlcGFyYXRvciBkaXNwbGF5IHN0cmF0ZWd5LiBUaGlzIGFm
ZmVjdHMgaW50ZWdlciBudW1iZXJzIHdpdGggbm8gZnJhY3Rpb24gcGFydC4gTW9zdCBjb21tb24K
KyAgICAgKiB2YWx1ZXM6CisgICAgICoKKyAgICAgKiA8dWw+CisgICAgICogPGxpPkF1dG86ICIx
IgorICAgICAqIDxsaT5BbHdheXM6ICIxLiIKKyAgICAgKiA8L3VsPgorICAgICAqCisgICAgICog
PHA+CisgICAgICogUGFzcyBhbiBlbGVtZW50IGZyb20gdGhlIHtAbGluayBVTnVtYmVyRGVjaW1h
bFNlcGFyYXRvckRpc3BsYXl9IGVudW0gdG8gdGhpcyBzZXR0ZXIuIEZvciBleGFtcGxlOgorICAg
ICAqCisgICAgICogPHByZT4KKyAgICAgKiBOdW1iZXJGb3JtYXR0ZXI6OndpdGgoKS5kZWNpbWFs
KFVOdW1iZXJEZWNpbWFsU2VwYXJhdG9yRGlzcGxheTo6VU5VTV9ERUNJTUFMX1NFUEFSQVRPUl9B
TFdBWVMpCisgICAgICogPC9wcmU+CisgICAgICoKKyAgICAgKiA8cD4KKyAgICAgKiBUaGUgZGVm
YXVsdCBpcyBBVVRPIGRlY2ltYWwgc2VwYXJhdG9yIGRpc3BsYXkuCisgICAgICoKKyAgICAgKiBA
cGFyYW0gc3R5bGUKKyAgICAgKiAgICAgICAgICAgIFRoZSBkZWNpbWFsIHNlcGFyYXRvciBkaXNw
bGF5IHN0cmF0ZWd5IHRvIHVzZSB3aGVuIHJlbmRlcmluZyBudW1iZXJzLgorICAgICAqIEByZXR1
cm4gVGhlIGZsdWVudCBjaGFpbgorICAgICAqIEBzZWUgVU51bWJlckRlY2ltYWxTZXBhcmF0b3JE
aXNwbGF5CisgICAgICogQGRyYWZ0IElDVSA2MAorICAgICAqLworICAgIERlcml2ZWQgZGVjaW1h
bChVTnVtYmVyRGVjaW1hbFNlcGFyYXRvckRpc3BsYXkgc3R5bGUpIGNvbnN0ICY7CisKKyAgICAv
KioKKyAgICAgKiBPdmVybG9hZCBvZiBkZWNpbWFsKCkgZm9yIHVzZSBvbiBhbiBydmFsdWUgcmVm
ZXJlbmNlLgorICAgICAqCisgICAgICogQHBhcmFtIHN0eWxlCisgICAgICogICAgICAgICAgICBU
aGUgZGVjaW1hbCBzZXBhcmF0b3IgZGlzcGxheSBzdHJhdGVneSB0byB1c2Ugd2hlbiByZW5kZXJp
bmcgbnVtYmVycy4KKyAgICAgKiBAcmV0dXJuIFRoZSBmbHVlbnQgY2hhaW4uCisgICAgICogQHNl
ZSAjZGVjaW1hbAorICAgICAqIEBkcmFmdCBJQ1UgNjIKKyAgICAgKi8KKyAgICBEZXJpdmVkIGRl
Y2ltYWwoVU51bWJlckRlY2ltYWxTZXBhcmF0b3JEaXNwbGF5IHN0eWxlKSAmJjsKKworICAgIC8q
KgorICAgICAqIFNldHMgYSBzY2FsZSAobXVsdGlwbGllcikgdG8gYmUgdXNlZCB0byBzY2FsZSB0
aGUgbnVtYmVyIGJ5IGFuIGFyYml0cmFyeSBhbW91bnQgYmVmb3JlIGZvcm1hdHRpbmcuCisgICAg
ICogTW9zdCBjb21tb24gdmFsdWVzOgorICAgICAqCisgICAgICogPHVsPgorICAgICAqIDxsaT5N
dWx0aXBseSBieSAxMDA6IHVzZWZ1bCBmb3IgcGVyY2VudGFnZXMuCisgICAgICogPGxpPk11bHRp
cGx5IGJ5IGFuIGFyYml0cmFyeSB2YWx1ZTogdXNlZnVsIGZvciB1bml0IGNvbnZlcnNpb25zLgor
ICAgICAqIDwvdWw+CisgICAgICoKKyAgICAgKiA8cD4KKyAgICAgKiBQYXNzIGFuIGVsZW1lbnQg
ZnJvbSBhIHtAbGluayBTY2FsZX0gZmFjdG9yeSBtZXRob2QgdG8gdGhpcyBzZXR0ZXIuIEZvciBl
eGFtcGxlOgorICAgICAqCisgICAgICogPHByZT4KKyAgICAgKiBOdW1iZXJGb3JtYXR0ZXI6Ondp
dGgoKS5zY2FsZShTY2FsZTo6cG93ZXJPZlRlbigyKSkKKyAgICAgKiA8L3ByZT4KKyAgICAgKgor
ICAgICAqIDxwPgorICAgICAqIFRoZSBkZWZhdWx0IGlzIHRvIG5vdCBhcHBseSBhbnkgbXVsdGlw
bGllci4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzY2FsZQorICAgICAqICAgICAgICAgICAgVGhl
IHNjYWxlIHRvIGFwcGx5IHdoZW4gcmVuZGVyaW5nIG51bWJlcnMuCisgICAgICogQHJldHVybiBU
aGUgZmx1ZW50IGNoYWluCisgICAgICogQGRyYWZ0IElDVSA2MgorICAgICAqLworICAgIERlcml2
ZWQgc2NhbGUoY29uc3QgU2NhbGUgJnNjYWxlKSBjb25zdCAmOworCisgICAgLyoqCisgICAgICog
T3ZlcmxvYWQgb2Ygc2NhbGUoKSBmb3IgdXNlIG9uIGFuIHJ2YWx1ZSByZWZlcmVuY2UuCisgICAg
ICoKKyAgICAgKiBAcGFyYW0gc2NhbGUKKyAgICAgKiAgICAgICAgICAgIFRoZSBzY2FsZSB0byBh
cHBseSB3aGVuIHJlbmRlcmluZyBudW1iZXJzLgorICAgICAqIEByZXR1cm4gVGhlIGZsdWVudCBj
aGFpbi4KKyAgICAgKiBAc2VlICNzY2FsZQorICAgICAqIEBkcmFmdCBJQ1UgNjIKKyAgICAgKi8K
KyAgICBEZXJpdmVkIHNjYWxlKGNvbnN0IFNjYWxlICZzY2FsZSkgJiY7CisKKyNpZm5kZWYgVV9I
SURFX0lOVEVSTkFMX0FQSQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBwYWRkaW5nIHN0cmF0
ZWd5LiBNYXkgYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZTsgc2VlICMxMzMzOC4KKyAgICAgKgorICAg
ICAqIEBpbnRlcm5hbCBJQ1UgNjA6IFRoaXMgQVBJIGlzIElDVSBpbnRlcm5hbCBvbmx5LgorICAg
ICAqLworICAgIERlcml2ZWQgcGFkZGluZyhjb25zdCBpbXBsOjpQYWRkZXIgJnBhZGRlcikgY29u
c3QgJjsKKworICAgIC8qKiBAaW50ZXJuYWwgKi8KKyAgICBEZXJpdmVkIHBhZGRpbmcoY29uc3Qg
aW1wbDo6UGFkZGVyICZwYWRkZXIpICYmOworCisgICAgLyoqCisgICAgICogSW50ZXJuYWwgZmx1
ZW50IHNldHRlciB0byBzdXBwb3J0IGEgY3VzdG9tIHJlZ3VsYXRpb24gdGhyZXNob2xkLiBBIHRo
cmVzaG9sZCBvZiAxIGNhdXNlcyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHRvCisgICAgICogYmUgYnVp
bHQgcmlnaHQgYXdheS4gQSB0aHJlc2hvbGQgb2YgMCBwcmV2ZW50cyB0aGUgZGF0YSBzdHJ1Y3R1
cmVzIGZyb20gYmVpbmcgYnVpbHQuCisgICAgICoKKyAgICAgKiBAaW50ZXJuYWwgSUNVIDYwOiBU
aGlzIEFQSSBpcyBJQ1UgaW50ZXJuYWwgb25seS4KKyAgICAgKi8KKyAgICBEZXJpdmVkIHRocmVz
aG9sZChpbnQzMl90IHRocmVzaG9sZCkgY29uc3QgJjsKKworICAgIC8qKiBAaW50ZXJuYWwgKi8K
KyAgICBEZXJpdmVkIHRocmVzaG9sZChpbnQzMl90IHRocmVzaG9sZCkgJiY7CisKKyAgICAvKioK
KyAgICAgKiBJbnRlcm5hbCBmbHVlbnQgc2V0dGVyIHRvIG92ZXJ3cml0ZSB0aGUgZW50aXJlIG1h
Y3JvcyBvYmplY3QuCisgICAgICoKKyAgICAgKiBAaW50ZXJuYWwgSUNVIDYwOiBUaGlzIEFQSSBp
cyBJQ1UgaW50ZXJuYWwgb25seS4KKyAgICAgKi8KKyAgICBEZXJpdmVkIG1hY3Jvcyhjb25zdCBp
bXBsOjpNYWNyb1Byb3BzJiBtYWNyb3MpIGNvbnN0ICY7CisKKyAgICAvKiogQGludGVybmFsICov
CisgICAgRGVyaXZlZCBtYWNyb3MoY29uc3QgaW1wbDo6TWFjcm9Qcm9wcyYgbWFjcm9zKSAmJjsK
KworICAgIC8qKiBAaW50ZXJuYWwgKi8KKyAgICBEZXJpdmVkIG1hY3JvcyhpbXBsOjpNYWNyb1By
b3BzJiYgbWFjcm9zKSBjb25zdCAmOworCisgICAgLyoqIEBpbnRlcm5hbCAqLworICAgIERlcml2
ZWQgbWFjcm9zKGltcGw6Ok1hY3JvUHJvcHMmJiBtYWNyb3MpICYmOworCisjZW5kaWYgIC8qIFVf
SElERV9JTlRFUk5BTF9BUEkgKi8KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBza2VsZXRv
biBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBudW1iZXIgZm9ybWF0dGVyLiBBIHNrZWxl
dG9uIHN0cmluZyBpcyBhCisgICAgICogbG9jYWxlLWFnbm9zdGljIHNlcmlhbGl6ZWQgZm9ybSBv
ZiBhIG51bWJlciBmb3JtYXR0ZXIuCisgICAgICoKKyAgICAgKiBOb3QgYWxsIG9wdGlvbnMgYXJl
IGNhcGFibGUgb2YgYmVpbmcgcmVwcmVzZW50ZWQgaW4gdGhlIHNrZWxldG9uIHN0cmluZzsgZm9y
IGV4YW1wbGUsIGEKKyAgICAgKiBEZWNpbWFsRm9ybWF0U3ltYm9scyBvYmplY3QuIElmIGFueSBz
dWNoIG9wdGlvbiBpcyBlbmNvdW50ZXJlZCwgdGhlIGVycm9yIGNvZGUgaXMgc2V0IHRvCisgICAg
ICogVV9VTlNVUFBPUlRFRF9FUlJPUi4KKyAgICAgKgorICAgICAqIFRoZSByZXR1cm5lZCBza2Vs
ZXRvbiBpcyBpbiBub3JtYWxpemVkIGZvcm0sIHN1Y2ggdGhhdCB0d28gbnVtYmVyIGZvcm1hdHRl
cnMgd2l0aCBlcXVpdmFsZW50CisgICAgICogYmVoYXZpb3Igc2hvdWxkIHByb2R1Y2UgdGhlIHNh
bWUgc2tlbGV0b24uCisgICAgICoKKyAgICAgKiBAcmV0dXJuIEEgbnVtYmVyIHNrZWxldG9uIHN0
cmluZyB3aXRoIGJlaGF2aW9yIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBudW1iZXIgZm9ybWF0dGVy
LgorICAgICAqIEBkcmFmdCBJQ1UgNjIKKyAgICAgKi8KKyAgICBVbmljb2RlU3RyaW5nIHRvU2tl
bGV0b24oVUVycm9yQ29kZSYgc3RhdHVzKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFJldHVy
bnMgdGhlIGN1cnJlbnQgKFVuKUxvY2FsaXplZE51bWJlckZvcm1hdHRlciBhcyBhIExvY2FsUG9p
bnRlcgorICAgICAqIHdyYXBwaW5nIGEgaGVhcC1hbGxvY2F0ZWQgY29weSBvZiB0aGUgY3VycmVu
dCBvYmplY3QuCisgICAgICoKKyAgICAgKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gbmV3LWluZyB0
aGUgbW92ZSBjb25zdHJ1Y3RvciB3aXRoIGEgdmFsdWUgb2JqZWN0CisgICAgICogYXMgdGhlIGFy
Z3VtZW50LgorICAgICAqCisgICAgICogQHJldHVybiBBIHdyYXBwZWQgKFVuKUxvY2FsaXplZE51
bWJlckZvcm1hdHRlciBwb2ludGVyLCBvciBhIHdyYXBwZWQKKyAgICAgKiAgICAgICAgIG51bGxw
dHIgb24gZmFpbHVyZS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgTG9jYWxQ
b2ludGVyPERlcml2ZWQ+IGNsb25lKCkgY29uc3QgJjsKKworICAgIC8qKgorICAgICAqIE92ZXJs
b2FkIG9mIGNsb25lIGZvciB1c2Ugb24gYW4gcnZhbHVlIHJlZmVyZW5jZS4KKyAgICAgKgorICAg
ICAqIEByZXR1cm4gQSB3cmFwcGVkIChVbilMb2NhbGl6ZWROdW1iZXJGb3JtYXR0ZXIgcG9pbnRl
ciwgb3IgYSB3cmFwcGVkCisgICAgICogICAgICAgICBudWxscHRyIG9uIGZhaWx1cmUuCisgICAg
ICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIExvY2FsUG9pbnRlcjxEZXJpdmVkPiBjbG9u
ZSgpICYmOworCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgVUVycm9yQ29kZSBpZiBhbiBlcnJv
ciBvY2N1cnJlZCBpbiB0aGUgZmx1ZW50IGNoYWluLgorICAgICAqIFByZXNlcnZlcyBvbGRlciBl
cnJvciBjb2RlcyBpbiB0aGUgb3V0RXJyb3JDb2RlLgorICAgICAqIEByZXR1cm4gVFJVRSBpZiBV
X0ZBSUxVUkUob3V0RXJyb3JDb2RlKQorICAgICAqIEBkcmFmdCBJQ1UgNjAKKyAgICAgKi8KKyAg
ICBVQm9vbCBjb3B5RXJyb3JUbyhVRXJyb3JDb2RlICZvdXRFcnJvckNvZGUpIGNvbnN0IHsKKyAg
ICAgICAgaWYgKFVfRkFJTFVSRShvdXRFcnJvckNvZGUpKSB7CisgICAgICAgICAgICAvLyBEbyBu
b3Qgb3ZlcndyaXRlIHRoZSBvbGRlciBlcnJvciBjb2RlCisgICAgICAgICAgICByZXR1cm4gVFJV
RTsKKyAgICAgICAgfQorICAgICAgICBmTWFjcm9zLmNvcHlFcnJvclRvKG91dEVycm9yQ29kZSk7
CisgICAgICAgIHJldHVybiBVX0ZBSUxVUkUob3V0RXJyb3JDb2RlKTsKKyAgICB9CisKKyAgICAv
LyBOT1RFOiBVc2VzIGRlZmF1bHQgY29weSBhbmQgbW92ZSBjb25zdHJ1Y3RvcnMuCisKKyAgcHJp
dmF0ZToKKyAgICBpbXBsOjpNYWNyb1Byb3BzIGZNYWNyb3M7CisKKyAgICAvLyBEb24ndCBjb25z
dHJ1Y3QgbWUgZGlyZWN0bHkhICBVc2UgKFVuKUxvY2FsaXplZE51bWJlckZvcm1hdHRlci4KKyAg
ICBOdW1iZXJGb3JtYXR0ZXJTZXR0aW5ncygpID0gZGVmYXVsdDsKKworICAgIGZyaWVuZCBjbGFz
cyBMb2NhbGl6ZWROdW1iZXJGb3JtYXR0ZXI7CisgICAgZnJpZW5kIGNsYXNzIFVubG9jYWxpemVk
TnVtYmVyRm9ybWF0dGVyOworCisgICAgLy8gR2l2ZSBOdW1iZXJSYW5nZUZvcm1hdHRlciBhY2Nl
c3MgdG8gdGhlIE1hY3JvUHJvcHMKKyAgICBmcmllbmQgdm9pZCBpbXBsOjp0b3VjaFJhbmdlTG9j
YWxlcyhpbXBsOjpSYW5nZU1hY3JvUHJvcHMmIG1hY3Jvcyk7CisgICAgZnJpZW5kIGNsYXNzIGlt
cGw6Ok51bWJlclJhbmdlRm9ybWF0dGVySW1wbDsKK307CisKKy8qKgorICogQSBOdW1iZXJGb3Jt
YXR0ZXIgdGhhdCBkb2VzIG5vdCB5ZXQgaGF2ZSBhIGxvY2FsZS4gSW4gb3JkZXIgdG8gZm9ybWF0
IG51bWJlcnMsIGEgbG9jYWxlIG11c3QgYmUgc3BlY2lmaWVkLgorICoKKyAqIEluc3RhbmNlcyBv
ZiB0aGlzIGNsYXNzIGFyZSBpbW11dGFibGUgYW5kIHRocmVhZC1zYWZlLgorICoKKyAqIEBzZWUg
TnVtYmVyRm9ybWF0dGVyCisgKiBAZHJhZnQgSUNVIDYwCisgKi8KK2NsYXNzIFVfSTE4Tl9BUEkg
VW5sb2NhbGl6ZWROdW1iZXJGb3JtYXR0ZXIKKyAgICAgICAgOiBwdWJsaWMgTnVtYmVyRm9ybWF0
dGVyU2V0dGluZ3M8VW5sb2NhbGl6ZWROdW1iZXJGb3JtYXR0ZXI+LCBwdWJsaWMgVU1lbW9yeSB7
CisKKyAgcHVibGljOgorICAgIC8qKgorICAgICAqIEFzc29jaWF0ZSB0aGUgZ2l2ZW4gbG9jYWxl
IHdpdGggdGhlIG51bWJlciBmb3JtYXR0ZXIuIFRoZSBsb2NhbGUgaXMgdXNlZCBmb3IgcGlja2lu
ZyB0aGUgYXBwcm9wcmlhdGUgc3ltYm9scywKKyAgICAgKiBmb3JtYXRzLCBhbmQgb3RoZXIgZGF0
YSBmb3IgbnVtYmVyIGRpc3BsYXkuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbG9jYWxlCisgICAg
ICogICAgICAgICAgICBUaGUgbG9jYWxlIHRvIHVzZSB3aGVuIGxvYWRpbmcgZGF0YSBmb3IgbnVt
YmVyIGZvcm1hdHRpbmcuCisgICAgICogQHJldHVybiBUaGUgZmx1ZW50IGNoYWluLgorICAgICAq
IEBkcmFmdCBJQ1UgNjAKKyAgICAgKi8KKyAgICBMb2NhbGl6ZWROdW1iZXJGb3JtYXR0ZXIgbG9j
YWxlKGNvbnN0IGljdTo6TG9jYWxlICZsb2NhbGUpIGNvbnN0ICY7CisKKyAgICAvKioKKyAgICAg
KiBPdmVybG9hZCBvZiBsb2NhbGUoKSBmb3IgdXNlIG9uIGFuIHJ2YWx1ZSByZWZlcmVuY2UuCisg
ICAgICoKKyAgICAgKiBAcGFyYW0gbG9jYWxlCisgICAgICogICAgICAgICAgICBUaGUgbG9jYWxl
IHRvIHVzZSB3aGVuIGxvYWRpbmcgZGF0YSBmb3IgbnVtYmVyIGZvcm1hdHRpbmcuCisgICAgICog
QHJldHVybiBUaGUgZmx1ZW50IGNoYWluLgorICAgICAqIEBzZWUgI2xvY2FsZQorICAgICAqIEBk
cmFmdCBJQ1UgNjIKKyAgICAgKi8KKyAgICBMb2NhbGl6ZWROdW1iZXJGb3JtYXR0ZXIgbG9jYWxl
KGNvbnN0IGljdTo6TG9jYWxlICZsb2NhbGUpICYmOworCisgICAgLyoqCisgICAgICogRGVmYXVs
dCBjb25zdHJ1Y3RvcjogcHV0cyB0aGUgZm9ybWF0dGVyIGludG8gYSB2YWxpZCBidXQgdW5kZWZp
bmVkIHN0YXRlLgorICAgICAqCisgICAgICogQGRyYWZ0IElDVSA2MgorICAgICAqLworICAgIFVu
bG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyKCkgPSBkZWZhdWx0OworCisgICAgLyoqCisgICAgICog
UmV0dXJucyBhIGNvcHkgb2YgdGhpcyBVbmxvY2FsaXplZE51bWJlckZvcm1hdHRlci4KKyAgICAg
KiBAZHJhZnQgSUNVIDYwCisgICAgICovCisgICAgVW5sb2NhbGl6ZWROdW1iZXJGb3JtYXR0ZXIo
Y29uc3QgVW5sb2NhbGl6ZWROdW1iZXJGb3JtYXR0ZXIgJm90aGVyKTsKKworICAgIC8qKgorICAg
ICAqIE1vdmUgY29uc3RydWN0b3I6CisgICAgICogVGhlIHNvdXJjZSBVbmxvY2FsaXplZE51bWJl
ckZvcm1hdHRlciB3aWxsIGJlIGxlZnQgaW4gYSB2YWxpZCBidXQgdW5kZWZpbmVkIHN0YXRlLgor
ICAgICAqIEBkcmFmdCBJQ1UgNjIKKyAgICAgKi8KKyAgICBVbmxvY2FsaXplZE51bWJlckZvcm1h
dHRlcihVbmxvY2FsaXplZE51bWJlckZvcm1hdHRlciYmIHNyYykgVV9OT0VYQ0VQVDsKKworICAg
IC8qKgorICAgICAqIENvcHkgYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAgKiBAZHJhZnQgSUNV
IDYyCisgICAgICovCisgICAgVW5sb2NhbGl6ZWROdW1iZXJGb3JtYXR0ZXImIG9wZXJhdG9yPShj
b25zdCBVbmxvY2FsaXplZE51bWJlckZvcm1hdHRlciYgb3RoZXIpOworCisgICAgLyoqCisgICAg
ICogTW92ZSBhc3NpZ25tZW50IG9wZXJhdG9yOgorICAgICAqIFRoZSBzb3VyY2UgVW5sb2NhbGl6
ZWROdW1iZXJGb3JtYXR0ZXIgd2lsbCBiZSBsZWZ0IGluIGEgdmFsaWQgYnV0IHVuZGVmaW5lZCBz
dGF0ZS4KKyAgICAgKiBAZHJhZnQgSUNVIDYyCisgICAgICovCisgICAgVW5sb2NhbGl6ZWROdW1i
ZXJGb3JtYXR0ZXImIG9wZXJhdG9yPShVbmxvY2FsaXplZE51bWJlckZvcm1hdHRlciYmIHNyYykg
VV9OT0VYQ0VQVDsKKworICBwcml2YXRlOgorICAgIGV4cGxpY2l0IFVubG9jYWxpemVkTnVtYmVy
Rm9ybWF0dGVyKGNvbnN0IE51bWJlckZvcm1hdHRlclNldHRpbmdzPFVubG9jYWxpemVkTnVtYmVy
Rm9ybWF0dGVyPiYgb3RoZXIpOworCisgICAgZXhwbGljaXQgVW5sb2NhbGl6ZWROdW1iZXJGb3Jt
YXR0ZXIoCisgICAgICAgICAgICBOdW1iZXJGb3JtYXR0ZXJTZXR0aW5nczxVbmxvY2FsaXplZE51
bWJlckZvcm1hdHRlcj4mJiBzcmMpIFVfTk9FWENFUFQ7CisKKyAgICAvLyBUbyBnaXZlIHRoZSBm
bHVlbnQgc2V0dGVycyBhY2Nlc3MgdG8gdGhpcyBjbGFzcydzIGNvbnN0cnVjdG9yOgorICAgIGZy
aWVuZCBjbGFzcyBOdW1iZXJGb3JtYXR0ZXJTZXR0aW5nczxVbmxvY2FsaXplZE51bWJlckZvcm1h
dHRlcj47CisKKyAgICAvLyBUbyBnaXZlIE51bWJlckZvcm1hdHRlcjo6d2l0aCgpIGFjY2VzcyB0
byB0aGlzIGNsYXNzJ3MgY29uc3RydWN0b3I6CisgICAgZnJpZW5kIGNsYXNzIE51bWJlckZvcm1h
dHRlcjsKK307CisKKy8qKgorICogQSBOdW1iZXJGb3JtYXR0ZXIgdGhhdCBoYXMgYSBsb2NhbGUg
YXNzb2NpYXRlZCB3aXRoIGl0OyB0aGlzIG1lYW5zIC5mb3JtYXQoKSBtZXRob2RzIGFyZSBhdmFp
bGFibGUuCisgKgorICogSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgYXJlIGltbXV0YWJsZSBhbmQg
dGhyZWFkLXNhZmUuCisgKgorICogQHNlZSBOdW1iZXJGb3JtYXR0ZXIKKyAqIEBkcmFmdCBJQ1Ug
NjAKKyAqLworY2xhc3MgVV9JMThOX0FQSSBMb2NhbGl6ZWROdW1iZXJGb3JtYXR0ZXIKKyAgICAg
ICAgOiBwdWJsaWMgTnVtYmVyRm9ybWF0dGVyU2V0dGluZ3M8TG9jYWxpemVkTnVtYmVyRm9ybWF0
dGVyPiwgcHVibGljIFVNZW1vcnkgeworICBwdWJsaWM6CisgICAgLyoqCisgICAgICogRm9ybWF0
IHRoZSBnaXZlbiBpbnRlZ2VyIG51bWJlciB0byBhIHN0cmluZyB1c2luZyB0aGUgc2V0dGluZ3Mg
c3BlY2lmaWVkIGluIHRoZSBOdW1iZXJGb3JtYXR0ZXIgZmx1ZW50CisgICAgICogc2V0dGluZyBj
aGFpbi4KKyAgICAgKgorICAgICAqIEBwYXJhbSB2YWx1ZQorICAgICAqICAgICAgICAgICAgVGhl
IG51bWJlciB0byBmb3JtYXQuCisgICAgICogQHBhcmFtIHN0YXR1cworICAgICAqICAgICAgICAg
ICAgU2V0IHRvIGFuIEVycm9yQ29kZSBpZiBvbmUgb2NjdXJyZWQgaW4gdGhlIHNldHRlciBjaGFp
biBvciBkdXJpbmcgZm9ybWF0dGluZy4KKyAgICAgKiBAcmV0dXJuIEEgRm9ybWF0dGVkTnVtYmVy
IG9iamVjdDsgY2FsbCAudG9TdHJpbmcoKSB0byBnZXQgdGhlIHN0cmluZy4KKyAgICAgKiBAZHJh
ZnQgSUNVIDYwCisgICAgICovCisgICAgRm9ybWF0dGVkTnVtYmVyIGZvcm1hdEludChpbnQ2NF90
IHZhbHVlLCBVRXJyb3JDb2RlICZzdGF0dXMpIGNvbnN0OworCisgICAgLyoqCisgICAgICogRm9y
bWF0IHRoZSBnaXZlbiBmbG9hdCBvciBkb3VibGUgdG8gYSBzdHJpbmcgdXNpbmcgdGhlIHNldHRp
bmdzIHNwZWNpZmllZCBpbiB0aGUgTnVtYmVyRm9ybWF0dGVyIGZsdWVudCBzZXR0aW5nCisgICAg
ICogY2hhaW4uCisgICAgICoKKyAgICAgKiBAcGFyYW0gdmFsdWUKKyAgICAgKiAgICAgICAgICAg
IFRoZSBudW1iZXIgdG8gZm9ybWF0LgorICAgICAqIEBwYXJhbSBzdGF0dXMKKyAgICAgKiAgICAg
ICAgICAgIFNldCB0byBhbiBFcnJvckNvZGUgaWYgb25lIG9jY3VycmVkIGluIHRoZSBzZXR0ZXIg
Y2hhaW4gb3IgZHVyaW5nIGZvcm1hdHRpbmcuCisgICAgICogQHJldHVybiBBIEZvcm1hdHRlZE51
bWJlciBvYmplY3Q7IGNhbGwgLnRvU3RyaW5nKCkgdG8gZ2V0IHRoZSBzdHJpbmcuCisgICAgICog
QGRyYWZ0IElDVSA2MAorICAgICAqLworICAgIEZvcm1hdHRlZE51bWJlciBmb3JtYXREb3VibGUo
ZG91YmxlIHZhbHVlLCBVRXJyb3JDb2RlICZzdGF0dXMpIGNvbnN0OworCisgICAgLyoqCisgICAg
ICogRm9ybWF0IHRoZSBnaXZlbiBkZWNpbWFsIG51bWJlciB0byBhIHN0cmluZyB1c2luZyB0aGUg
c2V0dGluZ3MKKyAgICAgKiBzcGVjaWZpZWQgaW4gdGhlIE51bWJlckZvcm1hdHRlciBmbHVlbnQg
c2V0dGluZyBjaGFpbi4KKyAgICAgKiBUaGUgc3ludGF4IG9mIHRoZSB1bmZvcm1hdHRlZCBudW1i
ZXIgaXMgYSAibnVtZXJpYyBzdHJpbmciCisgICAgICogYXMgZGVmaW5lZCBpbiB0aGUgRGVjaW1h
bCBBcml0aG1ldGljIFNwZWNpZmljYXRpb24sIGF2YWlsYWJsZSBhdAorICAgICAqIGh0dHA6Ly9z
cGVsZW90cm92ZS5jb20vZGVjaW1hbAorICAgICAqCisgICAgICogQHBhcmFtIHZhbHVlCisgICAg
ICogICAgICAgICAgICBUaGUgbnVtYmVyIHRvIGZvcm1hdC4KKyAgICAgKiBAcGFyYW0gc3RhdHVz
CisgICAgICogICAgICAgICAgICBTZXQgdG8gYW4gRXJyb3JDb2RlIGlmIG9uZSBvY2N1cnJlZCBp
biB0aGUgc2V0dGVyIGNoYWluIG9yIGR1cmluZyBmb3JtYXR0aW5nLgorICAgICAqIEByZXR1cm4g
QSBGb3JtYXR0ZWROdW1iZXIgb2JqZWN0OyBjYWxsIC50b1N0cmluZygpIHRvIGdldCB0aGUgc3Ry
aW5nLgorICAgICAqIEBkcmFmdCBJQ1UgNjAKKyAgICAgKi8KKyAgICBGb3JtYXR0ZWROdW1iZXIg
Zm9ybWF0RGVjaW1hbChTdHJpbmdQaWVjZSB2YWx1ZSwgVUVycm9yQ29kZSYgc3RhdHVzKSBjb25z
dDsKKworI2lmbmRlZiBVX0hJREVfSU5URVJOQUxfQVBJCisKKyAgICAvKiogSW50ZXJuYWwgbWV0
aG9kLgorICAgICAqIEBpbnRlcm5hbAorICAgICAqLworICAgIEZvcm1hdHRlZE51bWJlciBmb3Jt
YXREZWNpbWFsUXVhbnRpdHkoY29uc3QgaW1wbDo6RGVjaW1hbFF1YW50aXR5JiBkcSwgVUVycm9y
Q29kZSYgc3RhdHVzKSBjb25zdDsKKworICAgIC8qKiBJbnRlcm5hbCBtZXRob2QgZm9yIERlY2lt
YWxGb3JtYXQgY29tcGF0aWJpbGl0eS4KKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAgICB2
b2lkIGdldEFmZml4SW1wbChib29sIGlzUHJlZml4LCBib29sIGlzTmVnYXRpdmUsIFVuaWNvZGVT
dHJpbmcmIHJlc3VsdCwgVUVycm9yQ29kZSYgc3RhdHVzKSBjb25zdDsKKworICAgIC8qKgorICAg
ICAqIEludGVybmFsIG1ldGhvZCBmb3IgdGVzdGluZy4KKyAgICAgKiBAaW50ZXJuYWwKKyAgICAg
Ki8KKyAgICBjb25zdCBpbXBsOjpOdW1iZXJGb3JtYXR0ZXJJbXBsKiBnZXRDb21waWxlZCgpIGNv
bnN0OworCisgICAgLyoqCisgICAgICogSW50ZXJuYWwgbWV0aG9kIGZvciB0ZXN0aW5nLgorICAg
ICAqIEBpbnRlcm5hbAorICAgICAqLworICAgIGludDMyX3QgZ2V0Q2FsbENvdW50KCkgY29uc3Q7
CisKKyNlbmRpZiAgLyogVV9ISURFX0lOVEVSTkFMX0FQSSAqLworCisgICAgLyoqCisgICAgICog
Q3JlYXRlcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgTG9jYWxpemVkTnVtYmVyRm9ybWF0IGFz
IGFuIGljdTo6Rm9ybWF0LCBlbmFibGluZyB0aGUgdXNlCisgICAgICogb2YgdGhpcyBudW1iZXIg
Zm9ybWF0dGVyIHdpdGggQVBJcyB0aGF0IG5lZWQgYW4gb2JqZWN0IG9mIHRoYXQgdHlwZSwgc3Vj
aCBhcyBNZXNzYWdlRm9ybWF0LgorICAgICAqCisgICAgICogVGhpcyBBUEkgaXMgbm90IGludGVu
ZGVkIHRvIGJlIHVzZWQgb3RoZXIgdGhhbiBmb3IgZW5hYmxpbmcgQVBJIGNvbXBhdGliaWxpdHku
IFRoZSBmb3JtYXREb3VibGUsCisgICAgICogZm9ybWF0SW50LCBhbmQgZm9ybWF0RGVjaW1hbCBt
ZXRob2RzIHNob3VsZCBub3JtYWxseSBiZSB1c2VkIHdoZW4gZm9ybWF0dGluZyBudW1iZXJzLCBu
b3QgdGhlIEZvcm1hdAorICAgICAqIG9iamVjdCByZXR1cm5lZCBieSB0aGlzIG1ldGhvZC4KKyAg
ICAgKgorICAgICAqIFRoZSBjYWxsZXIgb3ducyB0aGUgcmV0dXJuZWQgb2JqZWN0IGFuZCBtdXN0
IGRlbGV0ZSBpdCB3aGVuIGZpbmlzaGVkLgorICAgICAqCisgICAgICogQHJldHVybiBBIEZvcm1h
dCB3cmFwcGluZyB0aGlzIExvY2FsaXplZE51bWJlckZvcm1hdHRlci4KKyAgICAgKiBAZHJhZnQg
SUNVIDYyCisgICAgICovCisgICAgRm9ybWF0KiB0b0Zvcm1hdChVRXJyb3JDb2RlJiBzdGF0dXMp
IGNvbnN0OworCisgICAgLyoqCisgICAgICogRGVmYXVsdCBjb25zdHJ1Y3RvcjogcHV0cyB0aGUg
Zm9ybWF0dGVyIGludG8gYSB2YWxpZCBidXQgdW5kZWZpbmVkIHN0YXRlLgorICAgICAqCisgICAg
ICogQGRyYWZ0IElDVSA2MgorICAgICAqLworICAgIExvY2FsaXplZE51bWJlckZvcm1hdHRlcigp
ID0gZGVmYXVsdDsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBjb3B5IG9mIHRoaXMgTG9j
YWxpemVkTnVtYmVyRm9ybWF0dGVyLgorICAgICAqIEBkcmFmdCBJQ1UgNjAKKyAgICAgKi8KKyAg
ICBMb2NhbGl6ZWROdW1iZXJGb3JtYXR0ZXIoY29uc3QgTG9jYWxpemVkTnVtYmVyRm9ybWF0dGVy
ICZvdGhlcik7CisKKyAgICAvKioKKyAgICAgKiBNb3ZlIGNvbnN0cnVjdG9yOgorICAgICAqIFRo
ZSBzb3VyY2UgTG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyIHdpbGwgYmUgbGVmdCBpbiBhIHZhbGlk
IGJ1dCB1bmRlZmluZWQgc3RhdGUuCisgICAgICogQGRyYWZ0IElDVSA2MgorICAgICAqLworICAg
IExvY2FsaXplZE51bWJlckZvcm1hdHRlcihMb2NhbGl6ZWROdW1iZXJGb3JtYXR0ZXImJiBzcmMp
IFVfTk9FWENFUFQ7CisKKyAgICAvKioKKyAgICAgKiBDb3B5IGFzc2lnbm1lbnQgb3BlcmF0b3Iu
CisgICAgICogQGRyYWZ0IElDVSA2MgorICAgICAqLworICAgIExvY2FsaXplZE51bWJlckZvcm1h
dHRlciYgb3BlcmF0b3I9KGNvbnN0IExvY2FsaXplZE51bWJlckZvcm1hdHRlciYgb3RoZXIpOwor
CisgICAgLyoqCisgICAgICogTW92ZSBhc3NpZ25tZW50IG9wZXJhdG9yOgorICAgICAqIFRoZSBz
b3VyY2UgTG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyIHdpbGwgYmUgbGVmdCBpbiBhIHZhbGlkIGJ1
dCB1bmRlZmluZWQgc3RhdGUuCisgICAgICogQGRyYWZ0IElDVSA2MgorICAgICAqLworICAgIExv
Y2FsaXplZE51bWJlckZvcm1hdHRlciYgb3BlcmF0b3I9KExvY2FsaXplZE51bWJlckZvcm1hdHRl
ciYmIHNyYykgVV9OT0VYQ0VQVDsKKworI2lmbmRlZiBVX0hJREVfSU5URVJOQUxfQVBJCisKKyAg
ICAvKioKKyAgICAgKiBUaGlzIGlzIHRoZSBjb3JlIGVudHJ5cG9pbnQgdG8gdGhlIG51bWJlciBm
b3JtYXR0aW5nIHBpcGVsaW5lLiBJdCBwZXJmb3JtcyBzZWxmLXJlZ3VsYXRpb246IGEgc3RhdGlj
IGNvZGUgcGF0aAorICAgICAqIGZvciB0aGUgZmlyc3QgZmV3IGNhbGxzLCBhbmQgY29tcGlsaW5n
IGEgbW9yZSBlZmZpY2llbnQgZGF0YSBzdHJ1Y3R1cmUgaWYgY2FsbGVkIHJlcGVhdGVkbHkuCisg
ICAgICoKKyAgICAgKiA8cD4KKyAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHZlcnkgaG90LCBiZWlu
ZyBjYWxsZWQgaW4gZXZlcnkgY2FsbCB0byB0aGUgbnVtYmVyIGZvcm1hdHRpbmcgcGlwZWxpbmUu
CisgICAgICoKKyAgICAgKiBAcGFyYW0gcmVzdWx0cworICAgICAqICAgICAgICAgICAgVGhlIHJl
c3VsdHMgb2JqZWN0LiBUaGlzIG1ldGhvZCB3aWxsIG11dGF0ZSBpdCB0byBzYXZlIHRoZSByZXN1
bHRzLgorICAgICAqIEBwYXJhbSBzdGF0dXMKKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAg
ICB2b2lkIGZvcm1hdEltcGwoaW1wbDo6VUZvcm1hdHRlZE51bWJlckRhdGEgKnJlc3VsdHMsIFVF
cnJvckNvZGUgJnN0YXR1cykgY29uc3Q7CisKKyNlbmRpZiAgLyogVV9ISURFX0lOVEVSTkFMX0FQ
SSAqLworCisgICAgLyoqCisgICAgICogRGVzdHJ1Y3QgdGhpcyBMb2NhbGl6ZWROdW1iZXJGb3Jt
YXR0ZXIsIGNsZWFuaW5nIHVwIGFueSBtZW1vcnkgaXQgbWlnaHQgb3duLgorICAgICAqIEBkcmFm
dCBJQ1UgNjAKKyAgICAgKi8KKyAgICB+TG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyKCk7CisKKyAg
cHJpdmF0ZToKKyAgICAvLyBOb3RlOiBmQ29tcGlsZWQgY2FuJ3QgYmUgYSBMb2NhbFBvaW50ZXIg
YmVjYXVzZSBpbXBsOjpOdW1iZXJGb3JtYXR0ZXJJbXBsIGlzIGRlZmluZWQgaW4gYW4gaW50ZXJu
YWwKKyAgICAvLyBoZWFkZXIsIGFuZCBMb2NhbFBvaW50ZXIgbmVlZHMgdGhlIGZ1bGwgY2xhc3Mg
ZGVmaW5pdGlvbiBpbiBvcmRlciB0byBkZWxldGUgdGhlIGluc3RhbmNlLgorICAgIGNvbnN0IGlt
cGw6Ok51bWJlckZvcm1hdHRlckltcGwqIGZDb21waWxlZCB7bnVsbHB0cn07CisgICAgY2hhciBm
VW5zYWZlQ2FsbENvdW50WzhdIHt9OyAgLy8gaW50ZXJuYWxseSBjYXN0IHRvIHVfYXRvbWljX2lu
dDMyX3QKKworICAgIGV4cGxpY2l0IExvY2FsaXplZE51bWJlckZvcm1hdHRlcihjb25zdCBOdW1i
ZXJGb3JtYXR0ZXJTZXR0aW5nczxMb2NhbGl6ZWROdW1iZXJGb3JtYXR0ZXI+JiBvdGhlcik7CisK
KyAgICBleHBsaWNpdCBMb2NhbGl6ZWROdW1iZXJGb3JtYXR0ZXIoTnVtYmVyRm9ybWF0dGVyU2V0
dGluZ3M8TG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyPiYmIHNyYykgVV9OT0VYQ0VQVDsKKworICAg
IExvY2FsaXplZE51bWJlckZvcm1hdHRlcihjb25zdCBpbXBsOjpNYWNyb1Byb3BzICZtYWNyb3Ms
IGNvbnN0IExvY2FsZSAmbG9jYWxlKTsKKworICAgIExvY2FsaXplZE51bWJlckZvcm1hdHRlcihp
bXBsOjpNYWNyb1Byb3BzICYmbWFjcm9zLCBjb25zdCBMb2NhbGUgJmxvY2FsZSk7CisKKyAgICB2
b2lkIGNsZWFyKCk7CisKKyAgICB2b2lkIGxuZk1vdmVIZWxwZXIoTG9jYWxpemVkTnVtYmVyRm9y
bWF0dGVyJiYgc3JjKTsKKworICAgIC8qKgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29t
cGlsZWQgZm9ybWF0dGVyIGlzIGF2YWlsYWJsZS4KKyAgICAgKi8KKyAgICBib29sIGNvbXB1dGVD
b21waWxlZChVRXJyb3JDb2RlJiBzdGF0dXMpIGNvbnN0OworCisgICAgLy8gVG8gZ2l2ZSB0aGUg
Zmx1ZW50IHNldHRlcnMgYWNjZXNzIHRvIHRoaXMgY2xhc3MncyBjb25zdHJ1Y3RvcjoKKyAgICBm
cmllbmQgY2xhc3MgTnVtYmVyRm9ybWF0dGVyU2V0dGluZ3M8VW5sb2NhbGl6ZWROdW1iZXJGb3Jt
YXR0ZXI+OworICAgIGZyaWVuZCBjbGFzcyBOdW1iZXJGb3JtYXR0ZXJTZXR0aW5nczxMb2NhbGl6
ZWROdW1iZXJGb3JtYXR0ZXI+OworCisgICAgLy8gVG8gZ2l2ZSBVbmxvY2FsaXplZE51bWJlckZv
cm1hdHRlcjo6bG9jYWxlKCkgYWNjZXNzIHRvIHRoaXMgY2xhc3MncyBjb25zdHJ1Y3RvcjoKKyAg
ICBmcmllbmQgY2xhc3MgVW5sb2NhbGl6ZWROdW1iZXJGb3JtYXR0ZXI7Cit9OworCisvKioKKyAq
IFRoZSByZXN1bHQgb2YgYSBudW1iZXIgZm9ybWF0dGluZyBvcGVyYXRpb24uIFRoaXMgY2xhc3Mg
YWxsb3dzIHRoZSByZXN1bHQgdG8gYmUgZXhwb3J0ZWQgaW4gc2V2ZXJhbCBkYXRhIHR5cGVzLAor
ICogaW5jbHVkaW5nIGEgVW5pY29kZVN0cmluZyBhbmQgYSBGaWVsZFBvc2l0aW9uSXRlcmF0b3Iu
CisgKgorICogSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgYXJlIGltbXV0YWJsZSBhbmQgdGhyZWFk
LXNhZmUuCisgKgorICogQGRyYWZ0IElDVSA2MAorICovCitjbGFzcyBVX0kxOE5fQVBJIEZvcm1h
dHRlZE51bWJlciA6IHB1YmxpYyBVTWVtb3J5LCBwdWJsaWMgRm9ybWF0dGVkVmFsdWUgeworICBw
dWJsaWM6CisKKyAgICAvKioKKyAgICAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yOyBtYWtlcyBhbiBl
bXB0eSBGb3JtYXR0ZWROdW1iZXIuCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAg
IEZvcm1hdHRlZE51bWJlcigpCisgICAgICAgIDogZkRhdGEobnVsbHB0ciksIGZFcnJvckNvZGUo
VV9JTlZBTElEX1NUQVRFX0VSUk9SKSB7fQorCisgICAgLyoqCisgICAgICogTW92ZSBjb25zdHJ1
Y3RvcjogTGVhdmVzIHRoZSBzb3VyY2UgRm9ybWF0dGVkTnVtYmVyIGluIGFuIHVuZGVmaW5lZCBz
dGF0ZS4KKyAgICAgKiBAZHJhZnQgSUNVIDYyCisgICAgICovCisgICAgRm9ybWF0dGVkTnVtYmVy
KEZvcm1hdHRlZE51bWJlciYmIHNyYykgVV9OT0VYQ0VQVDsKKworICAgIC8qKgorICAgICAqIERl
c3RydWN0IGFuIGluc3RhbmNlIG9mIEZvcm1hdHRlZE51bWJlci4KKyAgICAgKiBAZHJhZnQgSUNV
IDYwCisgICAgICovCisgICAgdmlydHVhbCB+Rm9ybWF0dGVkTnVtYmVyKCkgVV9PVkVSUklERTsK
KworICAgIC8qKiBDb3B5aW5nIG5vdCBzdXBwb3J0ZWQ7IHVzZSBtb3ZlIGNvbnN0cnVjdG9yIGlu
c3RlYWQuICovCisgICAgRm9ybWF0dGVkTnVtYmVyKGNvbnN0IEZvcm1hdHRlZE51bWJlciYpID0g
ZGVsZXRlOworCisgICAgLyoqIENvcHlpbmcgbm90IHN1cHBvcnRlZDsgdXNlIG1vdmUgYXNzaWdu
bWVudCBpbnN0ZWFkLiAqLworICAgIEZvcm1hdHRlZE51bWJlciYgb3BlcmF0b3I9KGNvbnN0IEZv
cm1hdHRlZE51bWJlciYpID0gZGVsZXRlOworCisgICAgLyoqCisgICAgICogTW92ZSBhc3NpZ25t
ZW50OiBMZWF2ZXMgdGhlIHNvdXJjZSBGb3JtYXR0ZWROdW1iZXIgaW4gYW4gdW5kZWZpbmVkIHN0
YXRlLgorICAgICAqIEBkcmFmdCBJQ1UgNjIKKyAgICAgKi8KKyAgICBGb3JtYXR0ZWROdW1iZXIm
IG9wZXJhdG9yPShGb3JtYXR0ZWROdW1iZXImJiBzcmMpIFVfTk9FWENFUFQ7CisKKyAgICAvLyBD
b3B5YnJpZWY6IHRoaXMgbWV0aG9kIGlzIG9sZGVyIHRoYW4gdGhlIHBhcmVudCBtZXRob2QKKyAg
ICAvKioKKyAgICAgKiBAY29weWJyaWVmIEZvcm1hdHRlZFZhbHVlOjp0b1N0cmluZygpCisgICAg
ICoKKyAgICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIEZvcm1hdHRlZFZhbHVlOjp0b1N0
cmluZygpCisgICAgICoKKyAgICAgKiBAZHJhZnQgSUNVIDYyCisgICAgICovCisgICAgVW5pY29k
ZVN0cmluZyB0b1N0cmluZyhVRXJyb3JDb2RlJiBzdGF0dXMpIGNvbnN0IFVfT1ZFUlJJREU7CisK
KyAgICAvLyBDb3B5ZG9jOiB0aGlzIG1ldGhvZCBpcyBuZXcgaW4gSUNVIDY0CisgICAgLyoqIEBj
b3B5ZG9jIEZvcm1hdHRlZFZhbHVlOjp0b1RlbXBTdHJpbmcoKSAqLworICAgIFVuaWNvZGVTdHJp
bmcgdG9UZW1wU3RyaW5nKFVFcnJvckNvZGUmIHN0YXR1cykgY29uc3QgVV9PVkVSUklERTsKKwor
ICAgIC8vIENvcHlicmllZjogdGhpcyBtZXRob2QgaXMgb2xkZXIgdGhhbiB0aGUgcGFyZW50IG1l
dGhvZAorICAgIC8qKgorICAgICAqIEBjb3B5YnJpZWYgRm9ybWF0dGVkVmFsdWU6OmFwcGVuZFRv
KCkKKyAgICAgKgorICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgRm9ybWF0dGVkVmFs
dWU6OmFwcGVuZFRvKCkKKyAgICAgKgorICAgICAqIEBkcmFmdCBJQ1UgNjIKKyAgICAgKi8KKyAg
ICBBcHBlbmRhYmxlICZhcHBlbmRUbyhBcHBlbmRhYmxlJiBhcHBlbmRhYmxlLCBVRXJyb3JDb2Rl
JiBzdGF0dXMpIGNvbnN0IFVfT1ZFUlJJREU7CisKKyAgICAvLyBDb3B5ZG9jOiB0aGlzIG1ldGhv
ZCBpcyBuZXcgaW4gSUNVIDY0CisgICAgLyoqIEBjb3B5ZG9jIEZvcm1hdHRlZFZhbHVlOjpuZXh0
UG9zaXRpb24oKSAqLworICAgIFVCb29sIG5leHRQb3NpdGlvbihDb25zdHJhaW5lZEZpZWxkUG9z
aXRpb24mIGNmcG9zLCBVRXJyb3JDb2RlJiBzdGF0dXMpIGNvbnN0IFVfT1ZFUlJJREU7CisKKyAg
ICAvKioKKyAgICAgKiBEZXRlcm1pbmVzIHRoZSBzdGFydCAoaW5jbHVzaXZlKSBhbmQgZW5kIChl
eGNsdXNpdmUpIGluZGljZXMgb2YgdGhlIG5leHQgb2NjdXJyZW5jZSBvZiB0aGUgZ2l2ZW4KKyAg
ICAgKiA8ZW0+ZmllbGQ8L2VtPiBpbiB0aGUgb3V0cHV0IHN0cmluZy4gVGhpcyBhbGxvd3MgeW91
IHRvIGRldGVybWluZSB0aGUgbG9jYXRpb25zIG9mLCBmb3IgZXhhbXBsZSwKKyAgICAgKiB0aGUg
aW50ZWdlciBwYXJ0LCBmcmFjdGlvbiBwYXJ0LCBvciBzeW1ib2xzLgorICAgICAqCisgICAgICog
VGhpcyBpcyBhIHNpbXBsZXIgYnV0IGxlc3MgcG93ZXJmdWwgYWx0ZXJuYXRpdmUgdG8ge0BsaW5r
ICNuZXh0UG9zaXRpb259LgorICAgICAqCisgICAgICogSWYgYSBmaWVsZCBvY2N1cnMganVzdCBv
bmNlLCBjYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgZmluZCB0aGF0IG9jY3VycmVuY2UgYW5kIHJl
dHVybiBpdC4gSWYgYQorICAgICAqIGZpZWxkIG9jY3VycyBtdWx0aXBsZSB0aW1lcywgdGhpcyBt
ZXRob2QgbWF5IGJlIGNhbGxlZCByZXBlYXRlZGx5IHdpdGggdGhlIGZvbGxvd2luZyBwYXR0ZXJu
OgorICAgICAqCisgICAgICogPHByZT4KKyAgICAgKiBGaWVsZFBvc2l0aW9uIGZwb3MoVU5VTV9H
Uk9VUElOR19TRVBBUkFUT1JfRklFTEQpOworICAgICAqIHdoaWxlIChmb3JtYXR0ZWROdW1iZXIu
bmV4dEZpZWxkUG9zaXRpb24oZnBvcywgc3RhdHVzKSkgeworICAgICAqICAgLy8gZG8gc29tZXRo
aW5nIHdpdGggZnBvcy4KKyAgICAgKiB9CisgICAgICogPC9wcmU+CisgICAgICoKKyAgICAgKiBU
aGlzIG1ldGhvZCBpcyB1c2VmdWwgaWYgeW91IGtub3cgd2hpY2ggZmllbGQgdG8gcXVlcnkuIElm
IHlvdSB3YW50IGFsbCBhdmFpbGFibGUgZmllbGQgcG9zaXRpb24KKyAgICAgKiBpbmZvcm1hdGlv
biwgdXNlIHtAbGluayAjbmV4dFBvc2l0aW9ufSBvciB7QGxpbmsgI2dldEFsbEZpZWxkUG9zaXRp
b25zfS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBmaWVsZFBvc2l0aW9uCisgICAgICogICAgICAg
ICAgICBJbnB1dCtvdXRwdXQgdmFyaWFibGUuIE9uIGlucHV0LCB0aGUgImZpZWxkIiBwcm9wZXJ0
eSBkZXRlcm1pbmVzIHdoaWNoIGZpZWxkIHRvIGxvb2sKKyAgICAgKiAgICAgICAgICAgIHVwLCBh
bmQgdGhlICJiZWdpbkluZGV4IiBhbmQgImVuZEluZGV4IiBwcm9wZXJ0aWVzIGRldGVybWluZSB3
aGVyZSB0byBiZWdpbiB0aGUgc2VhcmNoLgorICAgICAqICAgICAgICAgICAgT24gb3V0cHV0LCB0
aGUgImJlZ2luSW5kZXgiIGlzIHNldCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaXJzdCBvY2N1
cnJlbmNlIG9mIHRoZQorICAgICAqICAgICAgICAgICAgZmllbGQgd2l0aCBlaXRoZXIgYmVnaW4g
b3IgZW5kIGluZGljZXMgYWZ0ZXIgdGhlIGlucHV0IGluZGljZXM7ICJlbmRJbmRleCIgaXMgc2V0
IHRvCisgICAgICogICAgICAgICAgICB0aGUgZW5kIG9mIHRoYXQgb2NjdXJyZW5jZSBvZiB0aGUg
ZmllbGQgKGV4Y2x1c2l2ZSBpbmRleCkuIElmIGEgZmllbGQgcG9zaXRpb24gaXMgbm90CisgICAg
ICogICAgICAgICAgICBmb3VuZCwgdGhlIG1ldGhvZCByZXR1cm5zIEZBTFNFIGFuZCB0aGUgRmll
bGRQb3NpdGlvbiBtYXkgb3IgbWF5IG5vdCBiZSBjaGFuZ2VkLgorICAgICAqIEBwYXJhbSBzdGF0
dXMKKyAgICAgKiAgICAgICAgICAgIFNldCBpZiBhbiBlcnJvciBvY2N1cnMgd2hpbGUgcG9wdWxh
dGluZyB0aGUgRmllbGRQb3NpdGlvbi4KKyAgICAgKiBAcmV0dXJuIFRSVUUgaWYgYSBuZXcgb2Nj
dXJyZW5jZSBvZiB0aGUgZmllbGQgd2FzIGZvdW5kOyBGQUxTRSBvdGhlcndpc2UuCisgICAgICog
QGRyYWZ0IElDVSA2MgorICAgICAqIEBzZWUgVU51bWJlckZvcm1hdEZpZWxkcworICAgICAqLwor
ICAgIFVCb29sIG5leHRGaWVsZFBvc2l0aW9uKEZpZWxkUG9zaXRpb24mIGZpZWxkUG9zaXRpb24s
IFVFcnJvckNvZGUmIHN0YXR1cykgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBFeHBvcnQgdGhl
IGZvcm1hdHRlZCBudW1iZXIgdG8gYSBGaWVsZFBvc2l0aW9uSXRlcmF0b3IuIFRoaXMgYWxsb3dz
IHlvdSB0byBkZXRlcm1pbmUgd2hpY2ggY2hhcmFjdGVycyBpbgorICAgICAqIHRoZSBvdXRwdXQg
c3RyaW5nIGNvcnJlc3BvbmQgdG8gd2hpY2ggPGVtPmZpZWxkczwvZW0+LCBzdWNoIGFzIHRoZSBp
bnRlZ2VyIHBhcnQsIGZyYWN0aW9uIHBhcnQsIGFuZCBzaWduLgorICAgICAqCisgICAgICogVGhp
cyBpcyBhbiBhbHRlcm5hdGl2ZSB0byB0aGUgbW9yZSBwb3dlcmZ1bCAjbmV4dFBvc2l0aW9uKCkg
QVBJLgorICAgICAqCisgICAgICogSWYgaW5mb3JtYXRpb24gb24gb25seSBvbmUgZmllbGQgaXMg
bmVlZGVkLCB1c2UgI25leHRQb3NpdGlvbigpIG9yICNuZXh0RmllbGRQb3NpdGlvbigpIGluc3Rl
YWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gaXRlcmF0b3IKKyAgICAgKiAgICAgICAgICAgIFRo
ZSBGaWVsZFBvc2l0aW9uSXRlcmF0b3IgdG8gcG9wdWxhdGUgd2l0aCBhbGwgb2YgdGhlIGZpZWxk
cyBwcmVzZW50IGluIHRoZSBmb3JtYXR0ZWQgbnVtYmVyLgorICAgICAqIEBwYXJhbSBzdGF0dXMK
KyAgICAgKiAgICAgICAgICAgIFNldCBpZiBhbiBlcnJvciBvY2N1cnMgd2hpbGUgcG9wdWxhdGlu
ZyB0aGUgRmllbGRQb3NpdGlvbkl0ZXJhdG9yLgorICAgICAqIEBkcmFmdCBJQ1UgNjIKKyAgICAg
KiBAc2VlIFVOdW1iZXJGb3JtYXRGaWVsZHMKKyAgICAgKi8KKyAgICB2b2lkIGdldEFsbEZpZWxk
UG9zaXRpb25zKEZpZWxkUG9zaXRpb25JdGVyYXRvciAmaXRlcmF0b3IsIFVFcnJvckNvZGUgJnN0
YXR1cykgY29uc3Q7CisKKyNpZm5kZWYgVV9ISURFX0lOVEVSTkFMX0FQSQorCisgICAgLyoqCisg
ICAgICogIEdldHMgdGhlIHJhdyBEZWNpbWFsUXVhbnRpdHkgZm9yIHBsdXJhbCBydWxlIHNlbGVj
dGlvbi4KKyAgICAgKiAgQGludGVybmFsCisgICAgICovCisgICAgdm9pZCBnZXREZWNpbWFsUXVh
bnRpdHkoaW1wbDo6RGVjaW1hbFF1YW50aXR5JiBvdXRwdXQsIFVFcnJvckNvZGUmIHN0YXR1cykg
Y29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBQb3B1bGF0ZXMgdGhlIG11dGFibGUgYnVpbGRlciB0
eXBlIEZpZWxkUG9zaXRpb25JdGVyYXRvckhhbmRsZXIuCisgICAgICogQGludGVybmFsCisgICAg
ICovCisgICAgdm9pZCBnZXRBbGxGaWVsZFBvc2l0aW9uc0ltcGwoRmllbGRQb3NpdGlvbkl0ZXJh
dG9ySGFuZGxlciYgZnBpaCwgVUVycm9yQ29kZSYgc3RhdHVzKSBjb25zdDsKKworI2VuZGlmICAv
KiBVX0hJREVfSU5URVJOQUxfQVBJICovCisKKyAgcHJpdmF0ZToKKyAgICAvLyBDYW4ndCB1c2Ug
TG9jYWxQb2ludGVyIGJlY2F1c2UgVUZvcm1hdHRlZE51bWJlckRhdGEgaXMgZm9yd2FyZC1kZWNs
YXJlZAorICAgIGNvbnN0IGltcGw6OlVGb3JtYXR0ZWROdW1iZXJEYXRhICpmRGF0YTsKKworICAg
IC8vIEVycm9yIGNvZGUgZm9yIHRoZSB0ZXJtaW5hbCBtZXRob2RzCisgICAgVUVycm9yQ29kZSBm
RXJyb3JDb2RlOworCisgICAgLyoqCisgICAgICogSW50ZXJuYWwgY29uc3RydWN0b3IgZnJvbSBk
YXRhIHR5cGUuIEFkb3B0cyB0aGUgZGF0YSBwb2ludGVyLgorICAgICAqIEBpbnRlcm5hbAorICAg
ICAqLworICAgIGV4cGxpY2l0IEZvcm1hdHRlZE51bWJlcihpbXBsOjpVRm9ybWF0dGVkTnVtYmVy
RGF0YSAqcmVzdWx0cykKKyAgICAgICAgOiBmRGF0YShyZXN1bHRzKSwgZkVycm9yQ29kZShVX1pF
Uk9fRVJST1IpIHt9CisKKyAgICBleHBsaWNpdCBGb3JtYXR0ZWROdW1iZXIoVUVycm9yQ29kZSBl
cnJvckNvZGUpCisgICAgICAgIDogZkRhdGEobnVsbHB0ciksIGZFcnJvckNvZGUoZXJyb3JDb2Rl
KSB7fQorCisgICAgLy8gVG8gZ2l2ZSBMb2NhbGl6ZWROdW1iZXJGb3JtYXR0ZXIgZm9ybWF0IG1l
dGhvZHMgYWNjZXNzIHRvIHRoaXMgY2xhc3MncyBjb25zdHJ1Y3RvcjoKKyAgICBmcmllbmQgY2xh
c3MgTG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyOworCisgICAgLy8gVG8gZ2l2ZSBDIEFQSSBhY2Nl
c3MgdG8gaW50ZXJuYWxzCisgICAgZnJpZW5kIHN0cnVjdCBpbXBsOjpVRm9ybWF0dGVkTnVtYmVy
SW1wbDsKK307CisKKy8qKgorICogU2VlIHRoZSBtYWluIGRlc2NyaXB0aW9uIGluIG51bWJlcmZv
cm1hdHRlci5oIGZvciBkb2N1bWVudGF0aW9uIGFuZCBleGFtcGxlcy4KKyAqCisgKiBAZHJhZnQg
SUNVIDYwCisgKi8KK2NsYXNzIFVfSTE4Tl9BUEkgTnVtYmVyRm9ybWF0dGVyIGZpbmFsIHsKKyAg
cHVibGljOgorICAgIC8qKgorICAgICAqIENhbGwgdGhpcyBtZXRob2QgYXQgdGhlIGJlZ2lubmlu
ZyBvZiBhIE51bWJlckZvcm1hdHRlciBmbHVlbnQgY2hhaW4gaW4gd2hpY2ggdGhlIGxvY2FsZSBp
cyBub3QgY3VycmVudGx5IGtub3duIGF0CisgICAgICogdGhlIGNhbGwgc2l0ZS4KKyAgICAgKgor
ICAgICAqIEByZXR1cm4gQW4ge0BsaW5rIFVubG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyfSwgdG8g
YmUgdXNlZCBmb3IgY2hhaW5pbmcuCisgICAgICogQGRyYWZ0IElDVSA2MAorICAgICAqLworICAg
IHN0YXRpYyBVbmxvY2FsaXplZE51bWJlckZvcm1hdHRlciB3aXRoKCk7CisKKyAgICAvKioKKyAg
ICAgKiBDYWxsIHRoaXMgbWV0aG9kIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBOdW1iZXJGb3JtYXR0
ZXIgZmx1ZW50IGNoYWluIGluIHdoaWNoIHRoZSBsb2NhbGUgaXMga25vd24gYXQgdGhlIGNhbGwK
KyAgICAgKiBzaXRlLgorICAgICAqCisgICAgICogQHBhcmFtIGxvY2FsZQorICAgICAqICAgICAg
ICAgICAgVGhlIGxvY2FsZSBmcm9tIHdoaWNoIHRvIGxvYWQgZm9ybWF0cyBhbmQgc3ltYm9scyBm
b3IgbnVtYmVyIGZvcm1hdHRpbmcuCisgICAgICogQHJldHVybiBBIHtAbGluayBMb2NhbGl6ZWRO
dW1iZXJGb3JtYXR0ZXJ9LCB0byBiZSB1c2VkIGZvciBjaGFpbmluZy4KKyAgICAgKiBAZHJhZnQg
SUNVIDYwCisgICAgICovCisgICAgc3RhdGljIExvY2FsaXplZE51bWJlckZvcm1hdHRlciB3aXRo
TG9jYWxlKGNvbnN0IExvY2FsZSAmbG9jYWxlKTsKKworICAgIC8qKgorICAgICAqIENhbGwgdGhp
cyBtZXRob2QgYXQgdGhlIGJlZ2lubmluZyBvZiBhIE51bWJlckZvcm1hdHRlciBmbHVlbnQgY2hh
aW4gdG8gY3JlYXRlIGFuIGluc3RhbmNlIGJhc2VkCisgICAgICogb24gYSBnaXZlbiBudW1iZXIg
c2tlbGV0b24gc3RyaW5nLgorICAgICAqCisgICAgICogSXQgaXMgcG9zc2libGUgZm9yIGFuIGVy
cm9yIHRvIG9jY3VyIHdoaWxlIHBhcnNpbmcuIFNlZSB0aGUgb3ZlcmxvYWQgb2YgdGhpcyBtZXRo
b2QgaWYgeW91IGFyZQorICAgICAqIGludGVyZXN0ZWQgaW4gdGhlIGxvY2F0aW9uIG9mIGEgcG9z
c2libGUgcGFyc2UgZXJyb3IuCisgICAgICoKKyAgICAgKiBAcGFyYW0gc2tlbGV0b24KKyAgICAg
KiAgICAgICAgICAgIFRoZSBza2VsZXRvbiBzdHJpbmcgb2ZmIG9mIHdoaWNoIHRvIGJhc2UgdGhp
cyBOdW1iZXJGb3JtYXR0ZXIuCisgICAgICogQHBhcmFtIHN0YXR1cworICAgICAqICAgICAgICAg
ICAgU2V0IHRvIFVfTlVNQkVSX1NLRUxFVE9OX1NZTlRBWF9FUlJPUiBpZiB0aGUgc2tlbGV0b24g
d2FzIGludmFsaWQuCisgICAgICogQHJldHVybiBBbiBVbmxvY2FsaXplZE51bWJlckZvcm1hdHRl
ciwgdG8gYmUgdXNlZCBmb3IgY2hhaW5pbmcuCisgICAgICogQGRyYWZ0IElDVSA2MgorICAgICAq
LworICAgIHN0YXRpYyBVbmxvY2FsaXplZE51bWJlckZvcm1hdHRlciBmb3JTa2VsZXRvbihjb25z
dCBVbmljb2RlU3RyaW5nJiBza2VsZXRvbiwgVUVycm9yQ29kZSYgc3RhdHVzKTsKKworICAgIC8q
KgorICAgICAqIENhbGwgdGhpcyBtZXRob2QgYXQgdGhlIGJlZ2lubmluZyBvZiBhIE51bWJlckZv
cm1hdHRlciBmbHVlbnQgY2hhaW4gdG8gY3JlYXRlIGFuIGluc3RhbmNlIGJhc2VkCisgICAgICog
b24gYSBnaXZlbiBudW1iZXIgc2tlbGV0b24gc3RyaW5nLgorICAgICAqCisgICAgICogSWYgYW4g
ZXJyb3Igb2NjdXJzIHdoaWxlIHBhcnNpbmcgdGhlIHNrZWxldG9uIHN0cmluZywgdGhlIG9mZnNl
dCBpbnRvIHRoZSBza2VsZXRvbiBzdHJpbmcgYXQKKyAgICAgKiB3aGljaCB0aGUgZXJyb3Igb2Nj
dXJyZWQgd2lsbCBiZSBzYXZlZCBpbnRvIHRoZSBVUGFyc2VFcnJvciwgaWYgcHJvdmlkZWQuCisg
ICAgICoKKyAgICAgKiBAcGFyYW0gc2tlbGV0b24KKyAgICAgKiAgICAgICAgICAgIFRoZSBza2Vs
ZXRvbiBzdHJpbmcgb2ZmIG9mIHdoaWNoIHRvIGJhc2UgdGhpcyBOdW1iZXJGb3JtYXR0ZXIuCisg
ICAgICogQHBhcmFtIHBlcnJvcgorICAgICAqICAgICAgICAgICAgQSBwYXJzZSBlcnJvciBzdHJ1
Y3QgcG9wdWxhdGVkIGlmIGFuIGVycm9yIG9jY3VycyB3aGVuIHBhcnNpbmcuCisgKiAgICAgICAg
ICAgICAgICBJZiBubyBlcnJvciBvY2N1cnMsIHBlcnJvci5vZmZzZXQgd2lsbCBiZSBzZXQgdG8g
LTEuCisgICAgICogQHBhcmFtIHN0YXR1cworICAgICAqICAgICAgICAgICAgU2V0IHRvIFVfTlVN
QkVSX1NLRUxFVE9OX1NZTlRBWF9FUlJPUiBpZiB0aGUgc2tlbGV0b24gd2FzIGludmFsaWQuCisg
ICAgICogQHJldHVybiBBbiBVbmxvY2FsaXplZE51bWJlckZvcm1hdHRlciwgdG8gYmUgdXNlZCBm
b3IgY2hhaW5pbmcuCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIHN0YXRpYyBV
bmxvY2FsaXplZE51bWJlckZvcm1hdHRlciBmb3JTa2VsZXRvbihjb25zdCBVbmljb2RlU3RyaW5n
JiBza2VsZXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVVBhcnNlRXJyb3ImIHBlcnJvciwgVUVycm9yQ29kZSYgc3RhdHVzKTsKKworICAgIC8q
KgorICAgICAqIFVzZSBmYWN0b3J5IG1ldGhvZHMgaW5zdGVhZCBvZiB0aGUgY29uc3RydWN0b3Ig
dG8gY3JlYXRlIGEgTnVtYmVyRm9ybWF0dGVyLgorICAgICAqLworICAgIE51bWJlckZvcm1hdHRl
cigpID0gZGVsZXRlOworfTsKKworfSAgLy8gbmFtZXNwYWNlIG51bWJlcgorVV9OQU1FU1BBQ0Vf
RU5ECisKKyNlbmRpZiAgLy8gVV9ISURFX0RSQUZUX0FQSQorCisjZW5kaWYgLy8gX19OVU1CRVJG
T1JNQVRURVJfSF9fCisKKyNlbmRpZiAvKiAjaWYgIVVDT05GSUdfTk9fRk9STUFUVElORyAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi9pY3UvdW5pY29kZS9udW1iZXJyYW5nZWZvcm1hdHRlci5o
IGIvU291cmNlL1dURi9pY3UvdW5pY29kZS9udW1iZXJyYW5nZWZvcm1hdHRlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmE2N2VlNzI2NjZlYThhODZlMWRlOTFiOGUxNzEwNGI1YjMzNGVlYWUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL251bWJlcnJhbmdlZm9ybWF0dGVyLmgKQEAg
LTAsMCArMSw5MDcgQEAKKy8vIMKpIDIwMTggYW5kIGxhdGVyOiBVbmljb2RlLCBJbmMuIGFuZCBv
dGhlcnMuCisvLyBMaWNlbnNlICYgdGVybXMgb2YgdXNlOiBodHRwOi8vd3d3LnVuaWNvZGUub3Jn
L2NvcHlyaWdodC5odG1sCisKKyNpZiAhVUNPTkZJR19OT19GT1JNQVRUSU5HCisjaWZuZGVmIF9f
TlVNQkVSUkFOR0VGT1JNQVRURVJfSF9fCisjZGVmaW5lIF9fTlVNQkVSUkFOR0VGT1JNQVRURVJf
SF9fCisKKyNpbmNsdWRlIDxhdG9taWM+CisjaW5jbHVkZSAidW5pY29kZS9hcHBlbmRhYmxlLmgi
CisjaW5jbHVkZSAidW5pY29kZS9maWVsZHBvcy5oIgorI2luY2x1ZGUgInVuaWNvZGUvZm9ybWF0
dGVkdmFsdWUuaCIKKyNpbmNsdWRlICJ1bmljb2RlL2Zwb3NpdGVyLmgiCisjaW5jbHVkZSAidW5p
Y29kZS9udW1iZXJmb3JtYXR0ZXIuaCIKKworI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisKKy8q
KgorICogXGZpbGUKKyAqIFxicmllZiBDKysgQVBJOiBMaWJyYXJ5IGZvciBsb2NhbGl6ZWQgZm9y
bWF0dGluZyBvZiBudW1iZXIsIGN1cnJlbmN5LCBhbmQgdW5pdCByYW5nZXMuCisgKgorICogVGhl
IG1haW4gZW50cnlwb2ludCB0byB0aGUgZm9ybWF0dGluZyBvZiByYW5nZXMgb2YgbnVtYmVycywg
aW5jbHVkaW5nIGN1cnJlbmNpZXMgYW5kIG90aGVyIHVuaXRzIG9mIG1lYXN1cmVtZW50LgorICog
PHA+CisgKiBVc2FnZSBleGFtcGxlOgorICogPHA+CisgKiA8cHJlPgorICogTnVtYmVyUmFuZ2VG
b3JtYXR0ZXI6OndpdGgoKQorICogICAgIC5pZGVudGl0eUZhbGxiYWNrKFVOVU1fSURFTlRJVFlf
RkFMTEJBQ0tfQVBQUk9YSU1BVEVMWV9PUl9TSU5HTEVfVkFMVUUpCisgKiAgICAgLm51bWJlckZv
cm1hdHRlckZpcnN0KE51bWJlckZvcm1hdHRlcjo6d2l0aCgpLmFkb3B0VW5pdChNZWFzdXJlVW5p
dDo6Y3JlYXRlTWV0ZXIoKSkpCisgKiAgICAgLm51bWJlckZvcm1hdHRlclNlY29uZChOdW1iZXJG
b3JtYXR0ZXI6OndpdGgoKS5hZG9wdFVuaXQoTWVhc3VyZVVuaXQ6OmNyZWF0ZUtpbG9tZXRlcigp
KSkKKyAqICAgICAubG9jYWxlKCJlbi1HQiIpCisgKiAgICAgLmZvcm1hdFJhbmdlKDc1MCwgMS4y
LCBzdGF0dXMpCisgKiAgICAgLnRvU3RyaW5nKHN0YXR1cyk7CisgKiAvLyA9PiAiNzUwIG0gLSAx
LjIga20iCisgKiA8L3ByZT4KKyAqIDxwPgorICogTGlrZSBOdW1iZXJGb3JtYXR0ZXIsIE51bWJl
clJhbmdlRm9ybWF0dGVyIGluc3RhbmNlcyAoaS5lLiwgTG9jYWxpemVkTnVtYmVyUmFuZ2VGb3Jt
YXR0ZXIKKyAqIGFuZCBVbmxvY2FsaXplZE51bWJlclJhbmdlRm9ybWF0dGVyKSBhcmUgaW1tdXRh
YmxlIGFuZCB0aHJlYWQtc2FmZS4gVGhpcyBBUEkgaXMgYmFzZWQgb24gdGhlCisgKiA8ZW0+Zmx1
ZW50PC9lbT4gZGVzaWduIHBhdHRlcm4gcG9wdWxhcml6ZWQgYnkgbGlicmFyaWVzIHN1Y2ggYXMg
R29vZ2xlJ3MgR3VhdmEuCisgKgorICogQGF1dGhvciBTaGFuZSBDYXJyCisgKi8KKworCisvKioK
KyAqIERlZmluZXMgaG93IHRvIG1lcmdlIGZpZWxkcyB0aGF0IGFyZSBpZGVudGljYWwgYWNyb3Nz
IHRoZSByYW5nZSBzaWduLgorICoKKyAqIEBkcmFmdCBJQ1UgNjMKKyAqLwordHlwZWRlZiBlbnVt
IFVOdW1iZXJSYW5nZUNvbGxhcHNlIHsKKyAgICAvKioKKyAgICAgKiBVc2UgbG9jYWxlIGRhdGEg
YW5kIGhldXJpc3RpY3MgdG8gZGV0ZXJtaW5lIGhvdyBtdWNoIG9mIHRoZSBzdHJpbmcgdG8gY29s
bGFwc2UuIENvdWxkIGVuZCB1cCBjb2xsYXBzaW5nIG5vbmUsCisgICAgICogc29tZSwgb3IgYWxs
IHJlcGVhdGVkIHBpZWNlcyBpbiBhIGxvY2FsZS1zZW5zaXRpdmUgd2F5LgorICAgICAqCisgICAg
ICogVGhlIGhldXJpc3RpY3MgdXNlZCBmb3IgdGhpcyBvcHRpb24gYXJlIHN1YmplY3QgdG8gY2hh
bmdlIG92ZXIgdGltZS4KKyAgICAgKgorICAgICAqIEBkcmFmdCBJQ1UgNjMKKyAgICAgKi8KKyAg
ICBVTlVNX1JBTkdFX0NPTExBUFNFX0FVVE8sCisKKyAgICAvKioKKyAgICAgKiBEbyBub3QgY29s
bGFwc2UgYW55IHBhcnQgb2YgdGhlIG51bWJlci4gRXhhbXBsZTogIjMuMiB0aG91c2FuZCBraWxv
Z3JhbXMg4oCTIDUuMyB0aG91c2FuZCBraWxvZ3JhbXMiCisgICAgICoKKyAgICAgKiBAZHJhZnQg
SUNVIDYzCisgICAgICovCisgICAgVU5VTV9SQU5HRV9DT0xMQVBTRV9OT05FLAorCisgICAgLyoq
CisgICAgICogQ29sbGFwc2UgdGhlIHVuaXQgcGFydCBvZiB0aGUgbnVtYmVyLCBidXQgbm90IHRo
ZSBub3RhdGlvbiwgaWYgcHJlc2VudC4gRXhhbXBsZTogIjMuMiB0aG91c2FuZCDigJMgNS4zIHRo
b3VzYW5kCisgICAgICoga2lsb2dyYW1zIgorICAgICAqCisgICAgICogQGRyYWZ0IElDVSA2Mwor
ICAgICAqLworICAgIFVOVU1fUkFOR0VfQ09MTEFQU0VfVU5JVCwKKworICAgIC8qKgorICAgICAq
IENvbGxhcHNlIGFueSBmaWVsZCB0aGF0IGlzIGVxdWFsIGFjcm9zcyB0aGUgcmFuZ2Ugc2lnbi4g
TWF5IGludHJvZHVjZSBhbWJpZ3VpdHkgb24gdGhlIG1hZ25pdHVkZSBvZiB0aGUKKyAgICAgKiBu
dW1iZXIuIEV4YW1wbGU6ICIzLjIg4oCTIDUuMyB0aG91c2FuZCBraWxvZ3JhbXMiCisgICAgICoK
KyAgICAgKiBAZHJhZnQgSUNVIDYzCisgICAgICovCisgICAgVU5VTV9SQU5HRV9DT0xMQVBTRV9B
TEwKK30gVU51bWJlclJhbmdlQ29sbGFwc2U7CisKKy8qKgorICogRGVmaW5lcyB0aGUgYmVoYXZp
b3Igd2hlbiB0aGUgdHdvIG51bWJlcnMgaW4gdGhlIHJhbmdlIGFyZSBpZGVudGljYWwgYWZ0ZXIg
cm91bmRpbmcuIFRvIHByb2dyYW1tYXRpY2FsbHkgZGV0ZWN0CisgKiB3aGVuIHRoZSBpZGVudGl0
eSBmYWxsYmFjayBpcyB1c2VkLCBjb21wYXJlIHRoZSBsb3dlciBhbmQgdXBwZXIgQmlnRGVjaW1h
bHMgdmlhIEZvcm1hdHRlZE51bWJlci4KKyAqCisgKiBAZHJhZnQgSUNVIDYzCisgKiBAc2VlIE51
bWJlclJhbmdlRm9ybWF0dGVyCisgKi8KK3R5cGVkZWYgZW51bSBVTnVtYmVyUmFuZ2VJZGVudGl0
eUZhbGxiYWNrIHsKKyAgICAvKioKKyAgICAgKiBTaG93IHRoZSBudW1iZXIgYXMgYSBzaW5nbGUg
dmFsdWUgcmF0aGVyIHRoYW4gYSByYW5nZS4gRXhhbXBsZTogIiQ1IgorICAgICAqCisgICAgICog
QGRyYWZ0IElDVSA2MworICAgICAqLworICAgIFVOVU1fSURFTlRJVFlfRkFMTEJBQ0tfU0lOR0xF
X1ZBTFVFLAorCisgICAgLyoqCisgICAgICogU2hvdyB0aGUgbnVtYmVyIHVzaW5nIGEgbG9jYWxl
LXNlbnNpdGl2ZSBhcHByb3hpbWF0aW9uIHBhdHRlcm4uIElmIHRoZSBudW1iZXJzIHdlcmUgdGhl
IHNhbWUgYmVmb3JlIHJvdW5kaW5nLAorICAgICAqIHNob3cgdGhlIHNpbmdsZSB2YWx1ZS4gRXhh
bXBsZTogIn4kNSIgb3IgIiQ1IgorICAgICAqCisgICAgICogQGRyYWZ0IElDVSA2MworICAgICAq
LworICAgIFVOVU1fSURFTlRJVFlfRkFMTEJBQ0tfQVBQUk9YSU1BVEVMWV9PUl9TSU5HTEVfVkFM
VUUsCisKKyAgICAvKioKKyAgICAgKiBTaG93IHRoZSBudW1iZXIgdXNpbmcgYSBsb2NhbGUtc2Vu
c2l0aXZlIGFwcHJveGltYXRpb24gcGF0dGVybi4gVXNlIHRoZSByYW5nZSBwYXR0ZXJuIGFsd2F5
cywgZXZlbiBpZiB0aGUKKyAgICAgKiBpbnB1dHMgYXJlIHRoZSBzYW1lLiBFeGFtcGxlOiAifiQ1
IgorICAgICAqCisgICAgICogQGRyYWZ0IElDVSA2MworICAgICAqLworICAgIFVOVU1fSURFTlRJ
VFlfRkFMTEJBQ0tfQVBQUk9YSU1BVEVMWSwKKworICAgIC8qKgorICAgICAqIFNob3cgdGhlIG51
bWJlciBhcyB0aGUgcmFuZ2Ugb2YgdHdvIGVxdWFsIHZhbHVlcy4gVXNlIHRoZSByYW5nZSBwYXR0
ZXJuIGFsd2F5cywgZXZlbiBpZiB0aGUgaW5wdXRzIGFyZSB0aGUKKyAgICAgKiBzYW1lLiBFeGFt
cGxlICh3aXRoIFJhbmdlQ29sbGFwc2UuTk9ORSk6ICIkNSDigJMgJDUiCisgICAgICoKKyAgICAg
KiBAZHJhZnQgSUNVIDYzCisgICAgICovCisgICAgVU5VTV9JREVOVElUWV9GQUxMQkFDS19SQU5H
RQorfSBVTnVtYmVyUmFuZ2VJZGVudGl0eUZhbGxiYWNrOworCisvKioKKyAqIFVzZWQgaW4gdGhl
IHJlc3VsdCBjbGFzcyBGb3JtYXR0ZWROdW1iZXJSYW5nZSB0byBpbmRpY2F0ZSB0byB0aGUgdXNl
ciB3aGV0aGVyIHRoZSBudW1iZXJzIGZvcm1hdHRlZCBpbiB0aGUgcmFuZ2UKKyAqIHdlcmUgZXF1
YWwgb3Igbm90LCBhbmQgd2hldGhlciBvciBub3QgdGhlIGlkZW50aXR5IGZhbGxiYWNrIHdhcyBh
cHBsaWVkLgorICoKKyAqIEBkcmFmdCBJQ1UgNjMKKyAqIEBzZWUgTnVtYmVyUmFuZ2VGb3JtYXR0
ZXIKKyAqLwordHlwZWRlZiBlbnVtIFVOdW1iZXJSYW5nZUlkZW50aXR5UmVzdWx0IHsKKyAgICAv
KioKKyAgICAgKiBVc2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHR3byBudW1iZXJzIGluIHRoZSBy
YW5nZSB3ZXJlIGVxdWFsLCBldmVuIGJlZm9yZSBhbnkgcm91bmRpbmcgcnVsZXMgd2VyZSBhcHBs
aWVkLgorICAgICAqCisgICAgICogQGRyYWZ0IElDVSA2MworICAgICAqIEBzZWUgTnVtYmVyUmFu
Z2VGb3JtYXR0ZXIKKyAgICAgKi8KKyAgICBVTlVNX0lERU5USVRZX1JFU1VMVF9FUVVBTF9CRUZP
UkVfUk9VTkRJTkcsCisKKyAgICAvKioKKyAgICAgKiBVc2VkIHRvIGluZGljYXRlIHRoYXQgdGhl
IHR3byBudW1iZXJzIGluIHRoZSByYW5nZSB3ZXJlIGVxdWFsLCBidXQgb25seSBhZnRlciByb3Vu
ZGluZyBydWxlcyB3ZXJlIGFwcGxpZWQuCisgICAgICoKKyAgICAgKiBAZHJhZnQgSUNVIDYzCisg
ICAgICogQHNlZSBOdW1iZXJSYW5nZUZvcm1hdHRlcgorICAgICAqLworICAgIFVOVU1fSURFTlRJ
VFlfUkVTVUxUX0VRVUFMX0FGVEVSX1JPVU5ESU5HLAorCisgICAgLyoqCisgICAgICogVXNlZCB0
byBpbmRpY2F0ZSB0aGF0IHRoZSB0d28gbnVtYmVycyBpbiB0aGUgcmFuZ2Ugd2VyZSBub3QgZXF1
YWwsIGV2ZW4gYWZ0ZXIgcm91bmRpbmcgcnVsZXMgd2VyZSBhcHBsaWVkLgorICAgICAqCisgICAg
ICogQGRyYWZ0IElDVSA2MworICAgICAqIEBzZWUgTnVtYmVyUmFuZ2VGb3JtYXR0ZXIKKyAgICAg
Ki8KKyAgICBVTlVNX0lERU5USVRZX1JFU1VMVF9OT1RfRVFVQUwsCisKKyNpZm5kZWYgVV9ISURF
X0lOVEVSTkFMX0FQSQorICAgIC8qKgorICAgICAqIFRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0
aGlzIGVudW0uCisgICAgICogQGludGVybmFsCisgICAgICovCisgICAgVU5VTV9JREVOVElUWV9S
RVNVTFRfQ09VTlQKKyNlbmRpZgorCit9IFVOdW1iZXJSYW5nZUlkZW50aXR5UmVzdWx0OworCitV
X05BTUVTUEFDRV9CRUdJTgorCituYW1lc3BhY2UgbnVtYmVyIHsgIC8vIGljdTo6bnVtYmVyCisK
Ky8vIEZvcndhcmQgZGVjbGFyYXRpb25zOgorY2xhc3MgVW5sb2NhbGl6ZWROdW1iZXJSYW5nZUZv
cm1hdHRlcjsKK2NsYXNzIExvY2FsaXplZE51bWJlclJhbmdlRm9ybWF0dGVyOworY2xhc3MgRm9y
bWF0dGVkTnVtYmVyUmFuZ2U7CisKK25hbWVzcGFjZSBpbXBsIHsKKworLy8gRm9yd2FyZCBkZWNs
YXJhdGlvbnM6CitzdHJ1Y3QgUmFuZ2VNYWNyb1Byb3BzOworY2xhc3MgRGVjaW1hbFF1YW50aXR5
OworY2xhc3MgVUZvcm1hdHRlZE51bWJlclJhbmdlRGF0YTsKK2NsYXNzIE51bWJlclJhbmdlRm9y
bWF0dGVySW1wbDsKKworfSAvLyBuYW1lc3BhY2UgaW1wbAorCisvKioKKyAqIFxjb25kCisgKiBF
eHBvcnQgYW4gZXhwbGljaXQgdGVtcGxhdGUgaW5zdGFudGlhdGlvbi4gU2VlIGRhdGVmbXQuaAor
ICogKFdoZW4gYnVpbGRpbmcgRExMcyBmb3IgV2luZG93cyB0aGlzIGlzIHJlcXVpcmVkLikKKyAq
LworI2lmIFVfUExBVEZPUk0gPT0gVV9QRl9XSU5ET1dTICYmICFkZWZpbmVkKFVfSU5fRE9YWUdF
TikKK30gLy8gbmFtZXNwYWNlIGljdTo6bnVtYmVyCitVX05BTUVTUEFDRV9FTkQKKwordGVtcGxh
dGUgc3RydWN0IFVfSTE4Tl9BUEkgc3RkOjphdG9taWM8IFVfTkFNRVNQQUNFX1FVQUxJRklFUiBu
dW1iZXI6OmltcGw6Ok51bWJlclJhbmdlRm9ybWF0dGVySW1wbCo+OworCitVX05BTUVTUEFDRV9C
RUdJTgorbmFtZXNwYWNlIG51bWJlciB7ICAvLyBpY3U6Om51bWJlcgorI2VuZGlmCisvKiogXGVu
ZGNvbmQgKi8KKworLy8gT3RoZXIgaGVscGVyIGNsYXNzZXMgd291bGQgZ28gaGVyZSwgYnV0IHRo
ZXJlIGFyZSBub25lLgorCituYW1lc3BhY2UgaW1wbCB7ICAvLyBpY3U6Om51bWJlcjo6aW1wbAor
CisvLyBEbyBub3QgZW5jbG9zZSBlbnRpcmUgTWFjcm9Qcm9wcyB3aXRoICNpZm5kZWYgVV9ISURF
X0lOVEVSTkFMX0FQSSwgbmVlZGVkIGZvciBhIHByb3RlY3RlZCBmaWVsZAorLyoqIEBpbnRlcm5h
bCAqLworc3RydWN0IFVfSTE4Tl9BUEkgUmFuZ2VNYWNyb1Byb3BzIDogcHVibGljIFVNZW1vcnkg
eworICAgIC8qKiBAaW50ZXJuYWwgKi8KKyAgICBVbmxvY2FsaXplZE51bWJlckZvcm1hdHRlciBm
b3JtYXR0ZXIxOyAvLyA9IE51bWJlckZvcm1hdHRlcjo6d2l0aCgpOworCisgICAgLyoqIEBpbnRl
cm5hbCAqLworICAgIFVubG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyIGZvcm1hdHRlcjI7IC8vID0g
TnVtYmVyRm9ybWF0dGVyOjp3aXRoKCk7CisKKyAgICAvKiogQGludGVybmFsICovCisgICAgYm9v
bCBzaW5nbGVGb3JtYXR0ZXIgPSB0cnVlOworCisgICAgLyoqIEBpbnRlcm5hbCAqLworICAgIFVO
dW1iZXJSYW5nZUNvbGxhcHNlIGNvbGxhcHNlID0gVU5VTV9SQU5HRV9DT0xMQVBTRV9BVVRPOwor
CisgICAgLyoqIEBpbnRlcm5hbCAqLworICAgIFVOdW1iZXJSYW5nZUlkZW50aXR5RmFsbGJhY2sg
aWRlbnRpdHlGYWxsYmFjayA9IFVOVU1fSURFTlRJVFlfRkFMTEJBQ0tfQVBQUk9YSU1BVEVMWTsK
KworICAgIC8qKiBAaW50ZXJuYWwgKi8KKyAgICBMb2NhbGUgbG9jYWxlOworCisgICAgLy8gTk9U
RTogVXNlcyBkZWZhdWx0IGNvcHkgYW5kIG1vdmUgY29uc3RydWN0b3JzLgorCisgICAgLyoqCisg
ICAgICogQ2hlY2sgYWxsIG1lbWJlcnMgZm9yIGVycm9ycy4KKyAgICAgKiBAaW50ZXJuYWwKKyAg
ICAgKi8KKyAgICBib29sIGNvcHlFcnJvclRvKFVFcnJvckNvZGUgJnN0YXR1cykgY29uc3Qgewor
ICAgICAgICByZXR1cm4gZm9ybWF0dGVyMS5jb3B5RXJyb3JUbyhzdGF0dXMpIHx8IGZvcm1hdHRl
cjIuY29weUVycm9yVG8oc3RhdHVzKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBpbXBs
CisKKy8qKgorICogQW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBmb3Igc3BlY2lmeWluZyBzZXR0aW5n
cyByZWxhdGVkIHRvIG51bWJlciBmb3JtYXR0aW5nLiBUaGlzIGNsYXNzIGlzIGltcGxlbWVudGVk
IGJ5CisgKiB7QGxpbmsgVW5sb2NhbGl6ZWROdW1iZXJSYW5nZUZvcm1hdHRlcn0gYW5kIHtAbGlu
ayBMb2NhbGl6ZWROdW1iZXJSYW5nZUZvcm1hdHRlcn0uIFRoaXMgY2xhc3MgaXMgbm90IGludGVu
ZGVkIGZvcgorICogcHVibGljIHN1YmNsYXNzaW5nLgorICovCit0ZW1wbGF0ZTx0eXBlbmFtZSBE
ZXJpdmVkPgorY2xhc3MgVV9JMThOX0FQSSBOdW1iZXJSYW5nZUZvcm1hdHRlclNldHRpbmdzIHsK
KyAgcHVibGljOgorICAgIC8qKgorICAgICAqIFNldHMgdGhlIE51bWJlckZvcm1hdHRlciBpbnN0
YW5jZSB0byB1c2UgZm9yIHRoZSBudW1iZXJzIGluIHRoZSByYW5nZS4gVGhlIHNhbWUgZm9ybWF0
dGVyIGlzIGFwcGxpZWQgdG8gYm90aAorICAgICAqIHNpZGVzIG9mIHRoZSByYW5nZS4KKyAgICAg
KiA8cD4KKyAgICAgKiBUaGUgTnVtYmVyRm9ybWF0dGVyIGluc3RhbmNlcyBtdXN0IG5vdCBoYXZl
IGEgbG9jYWxlIGFwcGxpZWQgeWV0OyB0aGUgbG9jYWxlIHNwZWNpZmllZCBvbiB0aGUKKyAgICAg
KiBOdW1iZXJSYW5nZUZvcm1hdHRlciB3aWxsIGJlIHVzZWQuCisgICAgICoKKyAgICAgKiBAcGFy
YW0gZm9ybWF0dGVyCisgICAgICogICAgICAgICAgICBUaGUgZm9ybWF0dGVyIHRvIHVzZSBmb3Ig
Ym90aCBudW1iZXJzIGluIHRoZSByYW5nZS4KKyAgICAgKiBAcmV0dXJuIFRoZSBmbHVlbnQgY2hh
aW4uCisgICAgICogQGRyYWZ0IElDVSA2MworICAgICAqLworICAgIERlcml2ZWQgbnVtYmVyRm9y
bWF0dGVyQm90aChjb25zdCBVbmxvY2FsaXplZE51bWJlckZvcm1hdHRlciAmZm9ybWF0dGVyKSBj
b25zdCAmOworCisgICAgLyoqCisgICAgICogT3ZlcmxvYWQgb2YgbnVtYmVyRm9ybWF0dGVyQm90
aCgpIGZvciB1c2Ugb24gYW4gcnZhbHVlIHJlZmVyZW5jZS4KKyAgICAgKgorICAgICAqIEBwYXJh
bSBmb3JtYXR0ZXIKKyAgICAgKiAgICAgICAgICAgIFRoZSBmb3JtYXR0ZXIgdG8gdXNlIGZvciBi
b3RoIG51bWJlcnMgaW4gdGhlIHJhbmdlLgorICAgICAqIEByZXR1cm4gVGhlIGZsdWVudCBjaGFp
bi4KKyAgICAgKiBAc2VlICNudW1iZXJGb3JtYXR0ZXJCb3RoCisgICAgICogQGRyYWZ0IElDVSA2
MworICAgICAqLworICAgIERlcml2ZWQgbnVtYmVyRm9ybWF0dGVyQm90aChjb25zdCBVbmxvY2Fs
aXplZE51bWJlckZvcm1hdHRlciAmZm9ybWF0dGVyKSAmJjsKKworICAgIC8qKgorICAgICAqIE92
ZXJsb2FkIG9mIG51bWJlckZvcm1hdHRlckJvdGgoKSBmb3IgdXNlIG9uIGFuIHJ2YWx1ZSByZWZl
cmVuY2UuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZm9ybWF0dGVyCisgICAgICogICAgICAgICAg
ICBUaGUgZm9ybWF0dGVyIHRvIHVzZSBmb3IgYm90aCBudW1iZXJzIGluIHRoZSByYW5nZS4KKyAg
ICAgKiBAcmV0dXJuIFRoZSBmbHVlbnQgY2hhaW4uCisgICAgICogQHNlZSAjbnVtYmVyRm9ybWF0
dGVyQm90aAorICAgICAqIEBkcmFmdCBJQ1UgNjMKKyAgICAgKi8KKyAgICBEZXJpdmVkIG51bWJl
ckZvcm1hdHRlckJvdGgoVW5sb2NhbGl6ZWROdW1iZXJGb3JtYXR0ZXIgJiZmb3JtYXR0ZXIpIGNv
bnN0ICY7CisKKyAgICAvKioKKyAgICAgKiBPdmVybG9hZCBvZiBudW1iZXJGb3JtYXR0ZXJCb3Ro
KCkgZm9yIHVzZSBvbiBhbiBydmFsdWUgcmVmZXJlbmNlLgorICAgICAqCisgICAgICogQHBhcmFt
IGZvcm1hdHRlcgorICAgICAqICAgICAgICAgICAgVGhlIGZvcm1hdHRlciB0byB1c2UgZm9yIGJv
dGggbnVtYmVycyBpbiB0aGUgcmFuZ2UuCisgICAgICogQHJldHVybiBUaGUgZmx1ZW50IGNoYWlu
LgorICAgICAqIEBzZWUgI251bWJlckZvcm1hdHRlckJvdGgKKyAgICAgKiBAZHJhZnQgSUNVIDYz
CisgICAgICovCisgICAgRGVyaXZlZCBudW1iZXJGb3JtYXR0ZXJCb3RoKFVubG9jYWxpemVkTnVt
YmVyRm9ybWF0dGVyICYmZm9ybWF0dGVyKSAmJjsKKworICAgIC8qKgorICAgICAqIFNldHMgdGhl
IE51bWJlckZvcm1hdHRlciBpbnN0YW5jZSB0byB1c2UgZm9yIHRoZSBmaXJzdCBudW1iZXIgaW4g
dGhlIHJhbmdlLgorICAgICAqIDxwPgorICAgICAqIFRoZSBOdW1iZXJGb3JtYXR0ZXIgaW5zdGFu
Y2VzIG11c3Qgbm90IGhhdmUgYSBsb2NhbGUgYXBwbGllZCB5ZXQ7IHRoZSBsb2NhbGUgc3BlY2lm
aWVkIG9uIHRoZQorICAgICAqIE51bWJlclJhbmdlRm9ybWF0dGVyIHdpbGwgYmUgdXNlZC4KKyAg
ICAgKgorICAgICAqIEBwYXJhbSBmb3JtYXR0ZXJGaXJzdAorICAgICAqICAgICAgICAgICAgVGhl
IGZvcm1hdHRlciB0byB1c2UgZm9yIHRoZSBmaXJzdCBudW1iZXIgaW4gdGhlIHJhbmdlLgorICAg
ICAqIEByZXR1cm4gVGhlIGZsdWVudCBjaGFpbi4KKyAgICAgKiBAZHJhZnQgSUNVIDYzCisgICAg
ICovCisgICAgRGVyaXZlZCBudW1iZXJGb3JtYXR0ZXJGaXJzdChjb25zdCBVbmxvY2FsaXplZE51
bWJlckZvcm1hdHRlciAmZm9ybWF0dGVyRmlyc3QpIGNvbnN0ICY7CisKKyAgICAvKioKKyAgICAg
KiBPdmVybG9hZCBvZiBudW1iZXJGb3JtYXR0ZXJGaXJzdCgpIGZvciB1c2Ugb24gYW4gcnZhbHVl
IHJlZmVyZW5jZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBmb3JtYXR0ZXJGaXJzdAorICAgICAq
ICAgICAgICAgICAgVGhlIGZvcm1hdHRlciB0byB1c2UgZm9yIHRoZSBmaXJzdCBudW1iZXIgaW4g
dGhlIHJhbmdlLgorICAgICAqIEByZXR1cm4gVGhlIGZsdWVudCBjaGFpbi4KKyAgICAgKiBAc2Vl
ICNudW1iZXJGb3JtYXR0ZXJGaXJzdAorICAgICAqIEBkcmFmdCBJQ1UgNjMKKyAgICAgKi8KKyAg
ICBEZXJpdmVkIG51bWJlckZvcm1hdHRlckZpcnN0KGNvbnN0IFVubG9jYWxpemVkTnVtYmVyRm9y
bWF0dGVyICZmb3JtYXR0ZXJGaXJzdCkgJiY7CisKKyAgICAvKioKKyAgICAgKiBPdmVybG9hZCBv
ZiBudW1iZXJGb3JtYXR0ZXJGaXJzdCgpIGZvciB1c2Ugb24gYW4gcnZhbHVlIHJlZmVyZW5jZS4K
KyAgICAgKgorICAgICAqIEBwYXJhbSBmb3JtYXR0ZXJGaXJzdAorICAgICAqICAgICAgICAgICAg
VGhlIGZvcm1hdHRlciB0byB1c2UgZm9yIHRoZSBmaXJzdCBudW1iZXIgaW4gdGhlIHJhbmdlLgor
ICAgICAqIEByZXR1cm4gVGhlIGZsdWVudCBjaGFpbi4KKyAgICAgKiBAc2VlICNudW1iZXJGb3Jt
YXR0ZXJGaXJzdAorICAgICAqIEBkcmFmdCBJQ1UgNjMKKyAgICAgKi8KKyAgICBEZXJpdmVkIG51
bWJlckZvcm1hdHRlckZpcnN0KFVubG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyICYmZm9ybWF0dGVy
Rmlyc3QpIGNvbnN0ICY7CisKKyAgICAvKioKKyAgICAgKiBPdmVybG9hZCBvZiBudW1iZXJGb3Jt
YXR0ZXJGaXJzdCgpIGZvciB1c2Ugb24gYW4gcnZhbHVlIHJlZmVyZW5jZS4KKyAgICAgKgorICAg
ICAqIEBwYXJhbSBmb3JtYXR0ZXJGaXJzdAorICAgICAqICAgICAgICAgICAgVGhlIGZvcm1hdHRl
ciB0byB1c2UgZm9yIHRoZSBmaXJzdCBudW1iZXIgaW4gdGhlIHJhbmdlLgorICAgICAqIEByZXR1
cm4gVGhlIGZsdWVudCBjaGFpbi4KKyAgICAgKiBAc2VlICNudW1iZXJGb3JtYXR0ZXJGaXJzdAor
ICAgICAqIEBkcmFmdCBJQ1UgNjMKKyAgICAgKi8KKyAgICBEZXJpdmVkIG51bWJlckZvcm1hdHRl
ckZpcnN0KFVubG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyICYmZm9ybWF0dGVyRmlyc3QpICYmOwor
CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgTnVtYmVyRm9ybWF0dGVyIGluc3RhbmNlIHRvIHVz
ZSBmb3IgdGhlIHNlY29uZCBudW1iZXIgaW4gdGhlIHJhbmdlLgorICAgICAqIDxwPgorICAgICAq
IFRoZSBOdW1iZXJGb3JtYXR0ZXIgaW5zdGFuY2VzIG11c3Qgbm90IGhhdmUgYSBsb2NhbGUgYXBw
bGllZCB5ZXQ7IHRoZSBsb2NhbGUgc3BlY2lmaWVkIG9uIHRoZQorICAgICAqIE51bWJlclJhbmdl
Rm9ybWF0dGVyIHdpbGwgYmUgdXNlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBmb3JtYXR0ZXJT
ZWNvbmQKKyAgICAgKiAgICAgICAgICAgIFRoZSBmb3JtYXR0ZXIgdG8gdXNlIGZvciB0aGUgc2Vj
b25kIG51bWJlciBpbiB0aGUgcmFuZ2UuCisgICAgICogQHJldHVybiBUaGUgZmx1ZW50IGNoYWlu
LgorICAgICAqIEBkcmFmdCBJQ1UgNjMKKyAgICAgKi8KKyAgICBEZXJpdmVkIG51bWJlckZvcm1h
dHRlclNlY29uZChjb25zdCBVbmxvY2FsaXplZE51bWJlckZvcm1hdHRlciAmZm9ybWF0dGVyU2Vj
b25kKSBjb25zdCAmOworCisgICAgLyoqCisgICAgICogT3ZlcmxvYWQgb2YgbnVtYmVyRm9ybWF0
dGVyU2Vjb25kKCkgZm9yIHVzZSBvbiBhbiBydmFsdWUgcmVmZXJlbmNlLgorICAgICAqCisgICAg
ICogQHBhcmFtIGZvcm1hdHRlclNlY29uZAorICAgICAqICAgICAgICAgICAgVGhlIGZvcm1hdHRl
ciB0byB1c2UgZm9yIHRoZSBzZWNvbmQgbnVtYmVyIGluIHRoZSByYW5nZS4KKyAgICAgKiBAcmV0
dXJuIFRoZSBmbHVlbnQgY2hhaW4uCisgICAgICogQHNlZSAjbnVtYmVyRm9ybWF0dGVyU2Vjb25k
CisgICAgICogQGRyYWZ0IElDVSA2MworICAgICAqLworICAgIERlcml2ZWQgbnVtYmVyRm9ybWF0
dGVyU2Vjb25kKGNvbnN0IFVubG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyICZmb3JtYXR0ZXJTZWNv
bmQpICYmOworCisgICAgLyoqCisgICAgICogT3ZlcmxvYWQgb2YgbnVtYmVyRm9ybWF0dGVyU2Vj
b25kKCkgZm9yIHVzZSBvbiBhbiBydmFsdWUgcmVmZXJlbmNlLgorICAgICAqCisgICAgICogQHBh
cmFtIGZvcm1hdHRlclNlY29uZAorICAgICAqICAgICAgICAgICAgVGhlIGZvcm1hdHRlciB0byB1
c2UgZm9yIHRoZSBzZWNvbmQgbnVtYmVyIGluIHRoZSByYW5nZS4KKyAgICAgKiBAcmV0dXJuIFRo
ZSBmbHVlbnQgY2hhaW4uCisgICAgICogQHNlZSAjbnVtYmVyRm9ybWF0dGVyU2Vjb25kCisgICAg
ICogQGRyYWZ0IElDVSA2MworICAgICAqLworICAgIERlcml2ZWQgbnVtYmVyRm9ybWF0dGVyU2Vj
b25kKFVubG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyICYmZm9ybWF0dGVyU2Vjb25kKSBjb25zdCAm
OworCisgICAgLyoqCisgICAgICogT3ZlcmxvYWQgb2YgbnVtYmVyRm9ybWF0dGVyU2Vjb25kKCkg
Zm9yIHVzZSBvbiBhbiBydmFsdWUgcmVmZXJlbmNlLgorICAgICAqCisgICAgICogQHBhcmFtIGZv
cm1hdHRlclNlY29uZAorICAgICAqICAgICAgICAgICAgVGhlIGZvcm1hdHRlciB0byB1c2UgZm9y
IHRoZSBzZWNvbmQgbnVtYmVyIGluIHRoZSByYW5nZS4KKyAgICAgKiBAcmV0dXJuIFRoZSBmbHVl
bnQgY2hhaW4uCisgICAgICogQHNlZSAjbnVtYmVyRm9ybWF0dGVyU2Vjb25kCisgICAgICogQGRy
YWZ0IElDVSA2MworICAgICAqLworICAgIERlcml2ZWQgbnVtYmVyRm9ybWF0dGVyU2Vjb25kKFVu
bG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyICYmZm9ybWF0dGVyU2Vjb25kKSAmJjsKKworICAgIC8q
KgorICAgICAqIFNldHMgdGhlIGFnZ3Jlc3NpdmVuZXNzIG9mICJjb2xsYXBzaW5nIiBmaWVsZHMg
YWNyb3NzIHRoZSByYW5nZSBzZXBhcmF0b3IuIFBvc3NpYmxlIHZhbHVlczoKKyAgICAgKiA8cD4K
KyAgICAgKiA8dWw+CisgICAgICogPGxpPkFMTDogIjMtNUsgbWlsZXMiPC9saT4KKyAgICAgKiA8
bGk+VU5JVDogIjNLIC0gNUsgbWlsZXMiPC9saT4KKyAgICAgKiA8bGk+Tk9ORTogIjNLIG1pbGVz
IC0gNUsgbWlsZXMiPC9saT4KKyAgICAgKiA8bGk+QVVUTzogdXN1YWxseSBVTklUIG9yIE5PTkUs
IGRlcGVuZGluZyBvbiB0aGUgbG9jYWxlIGFuZCBmb3JtYXR0ZXIgc2V0dGluZ3M8L2xpPgorICAg
ICAqIDwvdWw+CisgICAgICogPHA+CisgICAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgQVVUTy4K
KyAgICAgKgorICAgICAqIEBwYXJhbSBjb2xsYXBzZQorICAgICAqICAgICAgICAgICAgVGhlIGNv
bGxhcHNpbmcgc3RyYXRlZ3kgdG8gdXNlIGZvciB0aGlzIHJhbmdlLgorICAgICAqIEByZXR1cm4g
VGhlIGZsdWVudCBjaGFpbi4KKyAgICAgKiBAZHJhZnQgSUNVIDYzCisgICAgICovCisgICAgRGVy
aXZlZCBjb2xsYXBzZShVTnVtYmVyUmFuZ2VDb2xsYXBzZSBjb2xsYXBzZSkgY29uc3QgJjsKKwor
ICAgIC8qKgorICAgICAqIE92ZXJsb2FkIG9mIGNvbGxhcHNlKCkgZm9yIHVzZSBvbiBhbiBydmFs
dWUgcmVmZXJlbmNlLgorICAgICAqCisgICAgICogQHBhcmFtIGNvbGxhcHNlCisgICAgICogICAg
ICAgICAgICBUaGUgY29sbGFwc2luZyBzdHJhdGVneSB0byB1c2UgZm9yIHRoaXMgcmFuZ2UuCisg
ICAgICogQHJldHVybiBUaGUgZmx1ZW50IGNoYWluLgorICAgICAqIEBzZWUgI2NvbGxhcHNlCisg
ICAgICogQGRyYWZ0IElDVSA2MworICAgICAqLworICAgIERlcml2ZWQgY29sbGFwc2UoVU51bWJl
clJhbmdlQ29sbGFwc2UgY29sbGFwc2UpICYmOworCisgICAgLyoqCisgICAgICogU2V0cyB0aGUg
YmVoYXZpb3Igd2hlbiB0aGUgdHdvIHNpZGVzIG9mIHRoZSByYW5nZSBhcmUgdGhlIHNhbWUuIFRo
aXMgY291bGQgaGFwcGVuIGlmIHRoZSBzYW1lIHR3byBudW1iZXJzIGFyZQorICAgICAqIHBhc3Nl
ZCB0byB0aGUgZm9ybWF0UmFuZ2UgZnVuY3Rpb24sIG9yIGlmIGRpZmZlcmVudCBudW1iZXJzIGFy
ZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIGJ1dCB0aGV5IGJlY29tZSB0aGUgc2FtZQorICAgICAq
IGFmdGVyIHJvdW5kaW5nIHJ1bGVzIGFyZSBhcHBsaWVkLiBQb3NzaWJsZSB2YWx1ZXM6CisgICAg
ICogPHA+CisgICAgICogPHVsPgorICAgICAqIDxsaT5TSU5HTEVfVkFMVUU6ICI1IG1pbGVzIjwv
bGk+CisgICAgICogPGxpPkFQUFJPWElNQVRFTFlfT1JfU0lOR0xFX1ZBTFVFOiAifjUgbWlsZXMi
IG9yICI1IG1pbGVzIiwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIG51bWJlciB3YXMgdGhlIHNh
bWUgYmVmb3JlCisgICAgICogcm91bmRpbmcgd2FzIGFwcGxpZWQ8L2xpPgorICAgICAqIDxsaT5B
UFBST1hJTUFURUxZOiAifjUgbWlsZXMiPC9saT4KKyAgICAgKiA8bGk+UkFOR0U6ICI1LTUgbWls
ZXMiICh3aXRoIGNvbGxhcHNlPVVOSVQpPC9saT4KKyAgICAgKiA8L3VsPgorICAgICAqIDxwPgor
ICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIEFQUFJPWElNQVRFTFkuCisgICAgICoKKyAgICAg
KiBAcGFyYW0gaWRlbnRpdHlGYWxsYmFjaworICAgICAqICAgICAgICAgICAgVGhlIHN0cmF0ZWd5
IHRvIHVzZSB3aGVuIGZvcm1hdHRpbmcgdHdvIG51bWJlcnMgdGhhdCBlbmQgdXAgYmVpbmcgdGhl
IHNhbWUuCisgICAgICogQHJldHVybiBUaGUgZmx1ZW50IGNoYWluLgorICAgICAqIEBkcmFmdCBJ
Q1UgNjMKKyAgICAgKi8KKyAgICBEZXJpdmVkIGlkZW50aXR5RmFsbGJhY2soVU51bWJlclJhbmdl
SWRlbnRpdHlGYWxsYmFjayBpZGVudGl0eUZhbGxiYWNrKSBjb25zdCAmOworCisgICAgLyoqCisg
ICAgICogT3ZlcmxvYWQgb2YgaWRlbnRpdHlGYWxsYmFjaygpIGZvciB1c2Ugb24gYW4gcnZhbHVl
IHJlZmVyZW5jZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpZGVudGl0eUZhbGxiYWNrCisgICAg
ICogICAgICAgICAgICBUaGUgc3RyYXRlZ3kgdG8gdXNlIHdoZW4gZm9ybWF0dGluZyB0d28gbnVt
YmVycyB0aGF0IGVuZCB1cCBiZWluZyB0aGUgc2FtZS4KKyAgICAgKiBAcmV0dXJuIFRoZSBmbHVl
bnQgY2hhaW4uCisgICAgICogQHNlZSAjaWRlbnRpdHlGYWxsYmFjaworICAgICAqIEBkcmFmdCBJ
Q1UgNjMKKyAgICAgKi8KKyAgICBEZXJpdmVkIGlkZW50aXR5RmFsbGJhY2soVU51bWJlclJhbmdl
SWRlbnRpdHlGYWxsYmFjayBpZGVudGl0eUZhbGxiYWNrKSAmJjsKKworICAgIC8qKgorICAgICAq
IFJldHVybnMgdGhlIGN1cnJlbnQgKFVuKUxvY2FsaXplZE51bWJlclJhbmdlRm9ybWF0dGVyIGFz
IGEgTG9jYWxQb2ludGVyCisgICAgICogd3JhcHBpbmcgYSBoZWFwLWFsbG9jYXRlZCBjb3B5IG9m
IHRoZSBjdXJyZW50IG9iamVjdC4KKyAgICAgKgorICAgICAqIFRoaXMgaXMgZXF1aXZhbGVudCB0
byBuZXctaW5nIHRoZSBtb3ZlIGNvbnN0cnVjdG9yIHdpdGggYSB2YWx1ZSBvYmplY3QKKyAgICAg
KiBhcyB0aGUgYXJndW1lbnQuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIEEgd3JhcHBlZCAoVW4p
TG9jYWxpemVkTnVtYmVyUmFuZ2VGb3JtYXR0ZXIgcG9pbnRlciwgb3IgYSB3cmFwcGVkCisgICAg
ICogICAgICAgICBudWxscHRyIG9uIGZhaWx1cmUuCisgICAgICogQGRyYWZ0IElDVSA2NAorICAg
ICAqLworICAgIExvY2FsUG9pbnRlcjxEZXJpdmVkPiBjbG9uZSgpIGNvbnN0ICY7CisKKyAgICAv
KioKKyAgICAgKiBPdmVybG9hZCBvZiBjbG9uZSBmb3IgdXNlIG9uIGFuIHJ2YWx1ZSByZWZlcmVu
Y2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIEEgd3JhcHBlZCAoVW4pTG9jYWxpemVkTnVtYmVy
UmFuZ2VGb3JtYXR0ZXIgcG9pbnRlciwgb3IgYSB3cmFwcGVkCisgICAgICogICAgICAgICBudWxs
cHRyIG9uIGZhaWx1cmUuCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIExvY2Fs
UG9pbnRlcjxEZXJpdmVkPiBjbG9uZSgpICYmOworCisgICAgLyoqCisgICAgICogU2V0cyB0aGUg
VUVycm9yQ29kZSBpZiBhbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgZmx1ZW50IGNoYWluLgorICAg
ICAqIFByZXNlcnZlcyBvbGRlciBlcnJvciBjb2RlcyBpbiB0aGUgb3V0RXJyb3JDb2RlLgorICAg
ICAqIEByZXR1cm4gVFJVRSBpZiBVX0ZBSUxVUkUob3V0RXJyb3JDb2RlKQorICAgICAqIEBkcmFm
dCBJQ1UgNjMKKyAgICAgKi8KKyAgICBVQm9vbCBjb3B5RXJyb3JUbyhVRXJyb3JDb2RlICZvdXRF
cnJvckNvZGUpIGNvbnN0IHsKKyAgICAgICAgaWYgKFVfRkFJTFVSRShvdXRFcnJvckNvZGUpKSB7
CisgICAgICAgICAgICAvLyBEbyBub3Qgb3ZlcndyaXRlIHRoZSBvbGRlciBlcnJvciBjb2RlCisg
ICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBmTWFjcm9zLmNvcHlF
cnJvclRvKG91dEVycm9yQ29kZSk7CisgICAgICAgIHJldHVybiBVX0ZBSUxVUkUob3V0RXJyb3JD
b2RlKTsKKyAgICB9CisKKyAgICAvLyBOT1RFOiBVc2VzIGRlZmF1bHQgY29weSBhbmQgbW92ZSBj
b25zdHJ1Y3RvcnMuCisKKyAgcHJpdmF0ZToKKyAgICBpbXBsOjpSYW5nZU1hY3JvUHJvcHMgZk1h
Y3JvczsKKworICAgIC8vIERvbid0IGNvbnN0cnVjdCBtZSBkaXJlY3RseSEgIFVzZSAoVW4pTG9j
YWxpemVkTnVtYmVyRm9ybWF0dGVyLgorICAgIE51bWJlclJhbmdlRm9ybWF0dGVyU2V0dGluZ3Mo
KSA9IGRlZmF1bHQ7CisKKyAgICBmcmllbmQgY2xhc3MgTG9jYWxpemVkTnVtYmVyUmFuZ2VGb3Jt
YXR0ZXI7CisgICAgZnJpZW5kIGNsYXNzIFVubG9jYWxpemVkTnVtYmVyUmFuZ2VGb3JtYXR0ZXI7
Cit9OworCisvKioKKyAqIEEgTnVtYmVyUmFuZ2VGb3JtYXR0ZXIgdGhhdCBkb2VzIG5vdCB5ZXQg
aGF2ZSBhIGxvY2FsZS4gSW4gb3JkZXIgdG8gZm9ybWF0LCBhIGxvY2FsZSBtdXN0IGJlIHNwZWNp
ZmllZC4KKyAqCisgKiBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBhcmUgaW1tdXRhYmxlIGFuZCB0
aHJlYWQtc2FmZS4KKyAqCisgKiBAc2VlIE51bWJlclJhbmdlRm9ybWF0dGVyCisgKiBAZHJhZnQg
SUNVIDYzCisgKi8KK2NsYXNzIFVfSTE4Tl9BUEkgVW5sb2NhbGl6ZWROdW1iZXJSYW5nZUZvcm1h
dHRlcgorICAgICAgICA6IHB1YmxpYyBOdW1iZXJSYW5nZUZvcm1hdHRlclNldHRpbmdzPFVubG9j
YWxpemVkTnVtYmVyUmFuZ2VGb3JtYXR0ZXI+LCBwdWJsaWMgVU1lbW9yeSB7CisKKyAgcHVibGlj
OgorICAgIC8qKgorICAgICAqIEFzc29jaWF0ZSB0aGUgZ2l2ZW4gbG9jYWxlIHdpdGggdGhlIG51
bWJlciByYW5nZSBmb3JtYXR0ZXIuIFRoZSBsb2NhbGUgaXMgdXNlZCBmb3IgcGlja2luZyB0aGUK
KyAgICAgKiBhcHByb3ByaWF0ZSBzeW1ib2xzLCBmb3JtYXRzLCBhbmQgb3RoZXIgZGF0YSBmb3Ig
bnVtYmVyIGRpc3BsYXkuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbG9jYWxlCisgICAgICogICAg
ICAgICAgICBUaGUgbG9jYWxlIHRvIHVzZSB3aGVuIGxvYWRpbmcgZGF0YSBmb3IgbnVtYmVyIGZv
cm1hdHRpbmcuCisgICAgICogQHJldHVybiBUaGUgZmx1ZW50IGNoYWluLgorICAgICAqIEBkcmFm
dCBJQ1UgNjMKKyAgICAgKi8KKyAgICBMb2NhbGl6ZWROdW1iZXJSYW5nZUZvcm1hdHRlciBsb2Nh
bGUoY29uc3QgaWN1OjpMb2NhbGUgJmxvY2FsZSkgY29uc3QgJjsKKworICAgIC8qKgorICAgICAq
IE92ZXJsb2FkIG9mIGxvY2FsZSgpIGZvciB1c2Ugb24gYW4gcnZhbHVlIHJlZmVyZW5jZS4KKyAg
ICAgKgorICAgICAqIEBwYXJhbSBsb2NhbGUKKyAgICAgKiAgICAgICAgICAgIFRoZSBsb2NhbGUg
dG8gdXNlIHdoZW4gbG9hZGluZyBkYXRhIGZvciBudW1iZXIgZm9ybWF0dGluZy4KKyAgICAgKiBA
cmV0dXJuIFRoZSBmbHVlbnQgY2hhaW4uCisgICAgICogQHNlZSAjbG9jYWxlCisgICAgICogQGRy
YWZ0IElDVSA2MworICAgICAqLworICAgIExvY2FsaXplZE51bWJlclJhbmdlRm9ybWF0dGVyIGxv
Y2FsZShjb25zdCBpY3U6OkxvY2FsZSAmbG9jYWxlKSAmJjsKKworICAgIC8qKgorICAgICAqIERl
ZmF1bHQgY29uc3RydWN0b3I6IHB1dHMgdGhlIGZvcm1hdHRlciBpbnRvIGEgdmFsaWQgYnV0IHVu
ZGVmaW5lZCBzdGF0ZS4KKyAgICAgKgorICAgICAqIEBkcmFmdCBJQ1UgNjMKKyAgICAgKi8KKyAg
ICBVbmxvY2FsaXplZE51bWJlclJhbmdlRm9ybWF0dGVyKCkgPSBkZWZhdWx0OworCisgICAgLyoq
CisgICAgICogUmV0dXJucyBhIGNvcHkgb2YgdGhpcyBVbmxvY2FsaXplZE51bWJlclJhbmdlRm9y
bWF0dGVyLgorICAgICAqIEBkcmFmdCBJQ1UgNjMKKyAgICAgKi8KKyAgICBVbmxvY2FsaXplZE51
bWJlclJhbmdlRm9ybWF0dGVyKGNvbnN0IFVubG9jYWxpemVkTnVtYmVyUmFuZ2VGb3JtYXR0ZXIg
Jm90aGVyKTsKKworICAgIC8qKgorICAgICAqIE1vdmUgY29uc3RydWN0b3I6CisgICAgICogVGhl
IHNvdXJjZSBVbmxvY2FsaXplZE51bWJlclJhbmdlRm9ybWF0dGVyIHdpbGwgYmUgbGVmdCBpbiBh
IHZhbGlkIGJ1dCB1bmRlZmluZWQgc3RhdGUuCisgICAgICogQGRyYWZ0IElDVSA2MworICAgICAq
LworICAgIFVubG9jYWxpemVkTnVtYmVyUmFuZ2VGb3JtYXR0ZXIoVW5sb2NhbGl6ZWROdW1iZXJS
YW5nZUZvcm1hdHRlciYmIHNyYykgVV9OT0VYQ0VQVDsKKworICAgIC8qKgorICAgICAqIENvcHkg
YXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAgKiBAZHJhZnQgSUNVIDYzCisgICAgICovCisgICAg
VW5sb2NhbGl6ZWROdW1iZXJSYW5nZUZvcm1hdHRlciYgb3BlcmF0b3I9KGNvbnN0IFVubG9jYWxp
emVkTnVtYmVyUmFuZ2VGb3JtYXR0ZXImIG90aGVyKTsKKworICAgIC8qKgorICAgICAqIE1vdmUg
YXNzaWdubWVudCBvcGVyYXRvcjoKKyAgICAgKiBUaGUgc291cmNlIFVubG9jYWxpemVkTnVtYmVy
UmFuZ2VGb3JtYXR0ZXIgd2lsbCBiZSBsZWZ0IGluIGEgdmFsaWQgYnV0IHVuZGVmaW5lZCBzdGF0
ZS4KKyAgICAgKiBAZHJhZnQgSUNVIDYzCisgICAgICovCisgICAgVW5sb2NhbGl6ZWROdW1iZXJS
YW5nZUZvcm1hdHRlciYgb3BlcmF0b3I9KFVubG9jYWxpemVkTnVtYmVyUmFuZ2VGb3JtYXR0ZXIm
JiBzcmMpIFVfTk9FWENFUFQ7CisKKyAgcHJpdmF0ZToKKyAgICBleHBsaWNpdCBVbmxvY2FsaXpl
ZE51bWJlclJhbmdlRm9ybWF0dGVyKAorICAgICAgICAgICAgY29uc3QgTnVtYmVyUmFuZ2VGb3Jt
YXR0ZXJTZXR0aW5nczxVbmxvY2FsaXplZE51bWJlclJhbmdlRm9ybWF0dGVyPiYgb3RoZXIpOwor
CisgICAgZXhwbGljaXQgVW5sb2NhbGl6ZWROdW1iZXJSYW5nZUZvcm1hdHRlcigKKyAgICAgICAg
ICAgIE51bWJlclJhbmdlRm9ybWF0dGVyU2V0dGluZ3M8VW5sb2NhbGl6ZWROdW1iZXJSYW5nZUZv
cm1hdHRlcj4mJiBzcmMpIFVfTk9FWENFUFQ7CisKKyAgICAvLyBUbyBnaXZlIHRoZSBmbHVlbnQg
c2V0dGVycyBhY2Nlc3MgdG8gdGhpcyBjbGFzcydzIGNvbnN0cnVjdG9yOgorICAgIGZyaWVuZCBj
bGFzcyBOdW1iZXJSYW5nZUZvcm1hdHRlclNldHRpbmdzPFVubG9jYWxpemVkTnVtYmVyUmFuZ2VG
b3JtYXR0ZXI+OworCisgICAgLy8gVG8gZ2l2ZSBOdW1iZXJSYW5nZUZvcm1hdHRlcjo6d2l0aCgp
IGFjY2VzcyB0byB0aGlzIGNsYXNzJ3MgY29uc3RydWN0b3I6CisgICAgZnJpZW5kIGNsYXNzIE51
bWJlclJhbmdlRm9ybWF0dGVyOworfTsKKworLyoqCisgKiBBIE51bWJlclJhbmdlRm9ybWF0dGVy
IHRoYXQgaGFzIGEgbG9jYWxlIGFzc29jaWF0ZWQgd2l0aCBpdDsgdGhpcyBtZWFucyAuZm9ybWF0
UmFuZ2UoKSBtZXRob2RzIGFyZSBhdmFpbGFibGUuCisgKgorICogSW5zdGFuY2VzIG9mIHRoaXMg
Y2xhc3MgYXJlIGltbXV0YWJsZSBhbmQgdGhyZWFkLXNhZmUuCisgKgorICogQHNlZSBOdW1iZXJG
b3JtYXR0ZXIKKyAqIEBkcmFmdCBJQ1UgNjMKKyAqLworY2xhc3MgVV9JMThOX0FQSSBMb2NhbGl6
ZWROdW1iZXJSYW5nZUZvcm1hdHRlcgorICAgICAgICA6IHB1YmxpYyBOdW1iZXJSYW5nZUZvcm1h
dHRlclNldHRpbmdzPExvY2FsaXplZE51bWJlclJhbmdlRm9ybWF0dGVyPiwgcHVibGljIFVNZW1v
cnkgeworICBwdWJsaWM6CisgICAgLyoqCisgICAgICogRm9ybWF0IHRoZSBnaXZlbiBGb3JtYXR0
YWJsZXMgdG8gYSBzdHJpbmcgdXNpbmcgdGhlIHNldHRpbmdzIHNwZWNpZmllZCBpbiB0aGUgTnVt
YmVyUmFuZ2VGb3JtYXR0ZXIgZmx1ZW50IHNldHRpbmcKKyAgICAgKiBjaGFpbi4KKyAgICAgKgor
ICAgICAqIEBwYXJhbSBmaXJzdAorICAgICAqICAgICAgICAgICAgVGhlIGZpcnN0IG51bWJlciBp
biB0aGUgcmFuZ2UsIHVzdWFsbHkgdG8gdGhlIGxlZnQgaW4gTFRSIGxvY2FsZXMuCisgICAgICog
QHBhcmFtIHNlY29uZAorICAgICAqICAgICAgICAgICAgVGhlIHNlY29uZCBudW1iZXIgaW4gdGhl
IHJhbmdlLCB1c3VhbGx5IHRvIHRoZSByaWdodCBpbiBMVFIgbG9jYWxlcy4KKyAgICAgKiBAcGFy
YW0gc3RhdHVzCisgICAgICogICAgICAgICAgICBTZXQgaWYgYW4gZXJyb3Igb2NjdXJzIHdoaWxl
IGZvcm1hdHRpbmcuCisgICAgICogQHJldHVybiBBIEZvcm1hdHRlZE51bWJlclJhbmdlIG9iamVj
dDsgY2FsbCAudG9TdHJpbmcoKSB0byBnZXQgdGhlIHN0cmluZy4KKyAgICAgKiBAZHJhZnQgSUNV
IDYzCisgICAgICovCisgICAgRm9ybWF0dGVkTnVtYmVyUmFuZ2UgZm9ybWF0Rm9ybWF0dGFibGVS
YW5nZSgKKyAgICAgICAgY29uc3QgRm9ybWF0dGFibGUmIGZpcnN0LCBjb25zdCBGb3JtYXR0YWJs
ZSYgc2Vjb25kLCBVRXJyb3JDb2RlJiBzdGF0dXMpIGNvbnN0OworCisgICAgLyoqCisgICAgICog
RGVmYXVsdCBjb25zdHJ1Y3RvcjogcHV0cyB0aGUgZm9ybWF0dGVyIGludG8gYSB2YWxpZCBidXQg
dW5kZWZpbmVkIHN0YXRlLgorICAgICAqCisgICAgICogQGRyYWZ0IElDVSA2MworICAgICAqLwor
ICAgIExvY2FsaXplZE51bWJlclJhbmdlRm9ybWF0dGVyKCkgPSBkZWZhdWx0OworCisgICAgLyoq
CisgICAgICogUmV0dXJucyBhIGNvcHkgb2YgdGhpcyBMb2NhbGl6ZWROdW1iZXJSYW5nZUZvcm1h
dHRlci4KKyAgICAgKiBAZHJhZnQgSUNVIDYzCisgICAgICovCisgICAgTG9jYWxpemVkTnVtYmVy
UmFuZ2VGb3JtYXR0ZXIoY29uc3QgTG9jYWxpemVkTnVtYmVyUmFuZ2VGb3JtYXR0ZXIgJm90aGVy
KTsKKworICAgIC8qKgorICAgICAqIE1vdmUgY29uc3RydWN0b3I6CisgICAgICogVGhlIHNvdXJj
ZSBMb2NhbGl6ZWROdW1iZXJSYW5nZUZvcm1hdHRlciB3aWxsIGJlIGxlZnQgaW4gYSB2YWxpZCBi
dXQgdW5kZWZpbmVkIHN0YXRlLgorICAgICAqIEBkcmFmdCBJQ1UgNjMKKyAgICAgKi8KKyAgICBM
b2NhbGl6ZWROdW1iZXJSYW5nZUZvcm1hdHRlcihMb2NhbGl6ZWROdW1iZXJSYW5nZUZvcm1hdHRl
ciYmIHNyYykgVV9OT0VYQ0VQVDsKKworICAgIC8qKgorICAgICAqIENvcHkgYXNzaWdubWVudCBv
cGVyYXRvci4KKyAgICAgKiBAZHJhZnQgSUNVIDYzCisgICAgICovCisgICAgTG9jYWxpemVkTnVt
YmVyUmFuZ2VGb3JtYXR0ZXImIG9wZXJhdG9yPShjb25zdCBMb2NhbGl6ZWROdW1iZXJSYW5nZUZv
cm1hdHRlciYgb3RoZXIpOworCisgICAgLyoqCisgICAgICogTW92ZSBhc3NpZ25tZW50IG9wZXJh
dG9yOgorICAgICAqIFRoZSBzb3VyY2UgTG9jYWxpemVkTnVtYmVyUmFuZ2VGb3JtYXR0ZXIgd2ls
bCBiZSBsZWZ0IGluIGEgdmFsaWQgYnV0IHVuZGVmaW5lZCBzdGF0ZS4KKyAgICAgKiBAZHJhZnQg
SUNVIDYzCisgICAgICovCisgICAgTG9jYWxpemVkTnVtYmVyUmFuZ2VGb3JtYXR0ZXImIG9wZXJh
dG9yPShMb2NhbGl6ZWROdW1iZXJSYW5nZUZvcm1hdHRlciYmIHNyYykgVV9OT0VYQ0VQVDsKKwor
I2lmbmRlZiBVX0hJREVfSU5URVJOQUxfQVBJCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0gcmVz
dWx0cworICAgICAqICAgICAgICAgICAgVGhlIHJlc3VsdHMgb2JqZWN0LiBUaGlzIG1ldGhvZCB3
aWxsIG11dGF0ZSBpdCB0byBzYXZlIHRoZSByZXN1bHRzLgorICAgICAqIEBwYXJhbSBlcXVhbEJl
Zm9yZVJvdW5kaW5nCisgICAgICogICAgICAgICAgICBXaGV0aGVyIHRoZSBudW1iZXIgd2FzIGVx
dWFsIGJlZm9yZSBjb3B5aW5nIGl0IGludG8gYSBEZWNpbWFsUXVhbnRpdHkuCisgICAgICogICAg
ICAgICAgICBVc2VkIGZvciBkZXRlcm1pbmluZyB0aGUgaWRlbnRpdHkgZmFsbGJhY2sgYmVoYXZp
b3IuCisgICAgICogQHBhcmFtIHN0YXR1cworICAgICAqICAgICAgICAgICAgU2V0IGlmIGFuIGVy
cm9yIG9jY3VycyB3aGlsZSBmb3JtYXR0aW5nLgorICAgICAqIEBpbnRlcm5hbAorICAgICAqLwor
ICAgIHZvaWQgZm9ybWF0SW1wbChpbXBsOjpVRm9ybWF0dGVkTnVtYmVyUmFuZ2VEYXRhJiByZXN1
bHRzLCBib29sIGVxdWFsQmVmb3JlUm91bmRpbmcsCisgICAgICAgICAgICAgICAgICAgIFVFcnJv
ckNvZGUmIHN0YXR1cykgY29uc3Q7CisKKyNlbmRpZgorCisgICAgLyoqCisgICAgICogRGVzdHJ1
Y3QgdGhpcyBMb2NhbGl6ZWROdW1iZXJSYW5nZUZvcm1hdHRlciwgY2xlYW5pbmcgdXAgYW55IG1l
bW9yeSBpdCBtaWdodCBvd24uCisgICAgICogQGRyYWZ0IElDVSA2MworICAgICAqLworICAgIH5M
b2NhbGl6ZWROdW1iZXJSYW5nZUZvcm1hdHRlcigpOworCisgIHByaXZhdGU6CisgICAgc3RkOjph
dG9taWM8aW1wbDo6TnVtYmVyUmFuZ2VGb3JtYXR0ZXJJbXBsKj4gZkF0b21pY0Zvcm1hdHRlciA9
IHt9OworCisgICAgY29uc3QgaW1wbDo6TnVtYmVyUmFuZ2VGb3JtYXR0ZXJJbXBsKiBnZXRGb3Jt
YXR0ZXIoVUVycm9yQ29kZSYgc3RhdXRzKSBjb25zdDsKKworICAgIGV4cGxpY2l0IExvY2FsaXpl
ZE51bWJlclJhbmdlRm9ybWF0dGVyKAorICAgICAgICBjb25zdCBOdW1iZXJSYW5nZUZvcm1hdHRl
clNldHRpbmdzPExvY2FsaXplZE51bWJlclJhbmdlRm9ybWF0dGVyPiYgb3RoZXIpOworCisgICAg
ZXhwbGljaXQgTG9jYWxpemVkTnVtYmVyUmFuZ2VGb3JtYXR0ZXIoCisgICAgICAgIE51bWJlclJh
bmdlRm9ybWF0dGVyU2V0dGluZ3M8TG9jYWxpemVkTnVtYmVyUmFuZ2VGb3JtYXR0ZXI+JiYgc3Jj
KSBVX05PRVhDRVBUOworCisgICAgTG9jYWxpemVkTnVtYmVyUmFuZ2VGb3JtYXR0ZXIoY29uc3Qg
aW1wbDo6UmFuZ2VNYWNyb1Byb3BzICZtYWNyb3MsIGNvbnN0IExvY2FsZSAmbG9jYWxlKTsKKwor
ICAgIExvY2FsaXplZE51bWJlclJhbmdlRm9ybWF0dGVyKGltcGw6OlJhbmdlTWFjcm9Qcm9wcyAm
Jm1hY3JvcywgY29uc3QgTG9jYWxlICZsb2NhbGUpOworCisgICAgdm9pZCBjbGVhcigpOworCisg
ICAgLy8gVG8gZ2l2ZSB0aGUgZmx1ZW50IHNldHRlcnMgYWNjZXNzIHRvIHRoaXMgY2xhc3MncyBj
b25zdHJ1Y3RvcjoKKyAgICBmcmllbmQgY2xhc3MgTnVtYmVyUmFuZ2VGb3JtYXR0ZXJTZXR0aW5n
czxVbmxvY2FsaXplZE51bWJlclJhbmdlRm9ybWF0dGVyPjsKKyAgICBmcmllbmQgY2xhc3MgTnVt
YmVyUmFuZ2VGb3JtYXR0ZXJTZXR0aW5nczxMb2NhbGl6ZWROdW1iZXJSYW5nZUZvcm1hdHRlcj47
CisKKyAgICAvLyBUbyBnaXZlIFVubG9jYWxpemVkTnVtYmVyUmFuZ2VGb3JtYXR0ZXI6OmxvY2Fs
ZSgpIGFjY2VzcyB0byB0aGlzIGNsYXNzJ3MgY29uc3RydWN0b3I6CisgICAgZnJpZW5kIGNsYXNz
IFVubG9jYWxpemVkTnVtYmVyUmFuZ2VGb3JtYXR0ZXI7Cit9OworCisvKioKKyAqIFRoZSByZXN1
bHQgb2YgYSBudW1iZXIgcmFuZ2UgZm9ybWF0dGluZyBvcGVyYXRpb24uIFRoaXMgY2xhc3MgYWxs
b3dzIHRoZSByZXN1bHQgdG8gYmUgZXhwb3J0ZWQgaW4gc2V2ZXJhbCBkYXRhIHR5cGVzLAorICog
aW5jbHVkaW5nIGEgVW5pY29kZVN0cmluZyBhbmQgYSBGaWVsZFBvc2l0aW9uSXRlcmF0b3IuCisg
KgorICogSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgYXJlIGltbXV0YWJsZSBhbmQgdGhyZWFkLXNh
ZmUuCisgKgorICogQGRyYWZ0IElDVSA2MworICovCitjbGFzcyBVX0kxOE5fQVBJIEZvcm1hdHRl
ZE51bWJlclJhbmdlIDogcHVibGljIFVNZW1vcnksIHB1YmxpYyBGb3JtYXR0ZWRWYWx1ZSB7Cisg
IHB1YmxpYzoKKyAgICAvLyBDb3B5YnJpZWY6IHRoaXMgbWV0aG9kIGlzIG9sZGVyIHRoYW4gdGhl
IHBhcmVudCBtZXRob2QKKyAgICAvKioKKyAgICAgKiBAY29weWJyaWVmIEZvcm1hdHRlZFZhbHVl
Ojp0b1N0cmluZygpCisgICAgICoKKyAgICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIEZv
cm1hdHRlZFZhbHVlOjp0b1N0cmluZygpCisgICAgICoKKyAgICAgKiBAZHJhZnQgSUNVIDYzCisg
ICAgICovCisgICAgVW5pY29kZVN0cmluZyB0b1N0cmluZyhVRXJyb3JDb2RlJiBzdGF0dXMpIGNv
bnN0IFVfT1ZFUlJJREU7CisKKyAgICAvLyBDb3B5ZG9jOiB0aGlzIG1ldGhvZCBpcyBuZXcgaW4g
SUNVIDY0CisgICAgLyoqIEBjb3B5ZG9jIEZvcm1hdHRlZFZhbHVlOjp0b1RlbXBTdHJpbmcoKSAq
LworICAgIFVuaWNvZGVTdHJpbmcgdG9UZW1wU3RyaW5nKFVFcnJvckNvZGUmIHN0YXR1cykgY29u
c3QgVV9PVkVSUklERTsKKworICAgIC8vIENvcHlicmllZjogdGhpcyBtZXRob2QgaXMgb2xkZXIg
dGhhbiB0aGUgcGFyZW50IG1ldGhvZAorICAgIC8qKgorICAgICAqIEBjb3B5YnJpZWYgRm9ybWF0
dGVkVmFsdWU6OmFwcGVuZFRvKCkKKyAgICAgKgorICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9u
LCBzZWUgRm9ybWF0dGVkVmFsdWU6OmFwcGVuZFRvKCkKKyAgICAgKgorICAgICAqIEBkcmFmdCBJ
Q1UgNjMKKyAgICAgKi8KKyAgICBBcHBlbmRhYmxlICZhcHBlbmRUbyhBcHBlbmRhYmxlICZhcHBl
bmRhYmxlLCBVRXJyb3JDb2RlJiBzdGF0dXMpIGNvbnN0IFVfT1ZFUlJJREU7CisKKyAgICAvLyBD
b3B5ZG9jOiB0aGlzIG1ldGhvZCBpcyBuZXcgaW4gSUNVIDY0CisgICAgLyoqIEBjb3B5ZG9jIEZv
cm1hdHRlZFZhbHVlOjpuZXh0UG9zaXRpb24oKSAqLworICAgIFVCb29sIG5leHRQb3NpdGlvbihD
b25zdHJhaW5lZEZpZWxkUG9zaXRpb24mIGNmcG9zLCBVRXJyb3JDb2RlJiBzdGF0dXMpIGNvbnN0
IFVfT1ZFUlJJREU7CisKKyAgICAvKioKKyAgICAgKiBEZXRlcm1pbmVzIHRoZSBzdGFydCAoaW5j
bHVzaXZlKSBhbmQgZW5kIChleGNsdXNpdmUpIGluZGljZXMgb2YgdGhlIG5leHQgb2NjdXJyZW5j
ZSBvZiB0aGUgZ2l2ZW4KKyAgICAgKiA8ZW0+ZmllbGQ8L2VtPiBpbiB0aGUgb3V0cHV0IHN0cmlu
Zy4gVGhpcyBhbGxvd3MgeW91IHRvIGRldGVybWluZSB0aGUgbG9jYXRpb25zIG9mLCBmb3IgZXhh
bXBsZSwKKyAgICAgKiB0aGUgaW50ZWdlciBwYXJ0LCBmcmFjdGlvbiBwYXJ0LCBvciBzeW1ib2xz
LgorICAgICAqCisgICAgICogSWYgYm90aCBzaWRlcyBvZiB0aGUgcmFuZ2UgaGF2ZSB0aGUgc2Ft
ZSBmaWVsZCwgdGhlIGZpZWxkIHdpbGwgb2NjdXIgdHdpY2UsIG9uY2UgYmVmb3JlIHRoZQorICAg
ICAqIHJhbmdlIHNlcGFyYXRvciBhbmQgb25jZSBhZnRlciB0aGUgcmFuZ2Ugc2VwYXJhdG9yLCBp
ZiBhcHBsaWNhYmxlLgorICAgICAqCisgICAgICogSWYgYSBmaWVsZCBvY2N1cnMganVzdCBvbmNl
LCBjYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgZmluZCB0aGF0IG9jY3VycmVuY2UgYW5kIHJldHVy
biBpdC4gSWYgYQorICAgICAqIGZpZWxkIG9jY3VycyBtdWx0aXBsZSB0aW1lcywgdGhpcyBtZXRo
b2QgbWF5IGJlIGNhbGxlZCByZXBlYXRlZGx5IHdpdGggdGhlIGZvbGxvd2luZyBwYXR0ZXJuOgor
ICAgICAqCisgICAgICogPHByZT4KKyAgICAgKiBGaWVsZFBvc2l0aW9uIGZwb3MoVU5VTV9JTlRF
R0VSX0ZJRUxEKTsKKyAgICAgKiB3aGlsZSAoZm9ybWF0dGVkTnVtYmVyUmFuZ2UubmV4dEZpZWxk
UG9zaXRpb24oZnBvcywgc3RhdHVzKSkgeworICAgICAqICAgLy8gZG8gc29tZXRoaW5nIHdpdGgg
ZnBvcy4KKyAgICAgKiB9CisgICAgICogPC9wcmU+CisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhv
ZCBpcyB1c2VmdWwgaWYgeW91IGtub3cgd2hpY2ggZmllbGQgdG8gcXVlcnkuIElmIHlvdSB3YW50
IGFsbCBhdmFpbGFibGUgZmllbGQgcG9zaXRpb24KKyAgICAgKiBpbmZvcm1hdGlvbiwgdXNlICNn
ZXRBbGxGaWVsZFBvc2l0aW9ucygpLgorICAgICAqCisgICAgICogQHBhcmFtIGZpZWxkUG9zaXRp
b24KKyAgICAgKiAgICAgICAgICAgIElucHV0K291dHB1dCB2YXJpYWJsZS4gU2VlIHtAbGluayBG
b3JtYXR0ZWROdW1iZXIjbmV4dEZpZWxkUG9zaXRpb259LgorICAgICAqIEBwYXJhbSBzdGF0dXMK
KyAgICAgKiAgICAgICAgICAgIFNldCBpZiBhbiBlcnJvciBvY2N1cnMgd2hpbGUgcG9wdWxhdGlu
ZyB0aGUgRmllbGRQb3NpdGlvbi4KKyAgICAgKiBAcmV0dXJuIFRSVUUgaWYgYSBuZXcgb2NjdXJy
ZW5jZSBvZiB0aGUgZmllbGQgd2FzIGZvdW5kOyBGQUxTRSBvdGhlcndpc2UuCisgICAgICogQGRy
YWZ0IElDVSA2MworICAgICAqIEBzZWUgVU51bWJlckZvcm1hdEZpZWxkcworICAgICAqLworICAg
IFVCb29sIG5leHRGaWVsZFBvc2l0aW9uKEZpZWxkUG9zaXRpb24mIGZpZWxkUG9zaXRpb24sIFVF
cnJvckNvZGUmIHN0YXR1cykgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBFeHBvcnQgdGhlIGZv
cm1hdHRlZCBudW1iZXIgcmFuZ2UgdG8gYSBGaWVsZFBvc2l0aW9uSXRlcmF0b3IuIFRoaXMgYWxs
b3dzIHlvdSB0byBkZXRlcm1pbmUgd2hpY2ggY2hhcmFjdGVycyBpbgorICAgICAqIHRoZSBvdXRw
dXQgc3RyaW5nIGNvcnJlc3BvbmQgdG8gd2hpY2ggPGVtPmZpZWxkczwvZW0+LCBzdWNoIGFzIHRo
ZSBpbnRlZ2VyIHBhcnQsIGZyYWN0aW9uIHBhcnQsIGFuZCBzaWduLgorICAgICAqCisgICAgICog
SWYgaW5mb3JtYXRpb24gb24gb25seSBvbmUgZmllbGQgaXMgbmVlZGVkLCB1c2UgI25leHRGaWVs
ZFBvc2l0aW9uKCkgaW5zdGVhZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpdGVyYXRvcgorICAg
ICAqICAgICAgICAgICAgVGhlIEZpZWxkUG9zaXRpb25JdGVyYXRvciB0byBwb3B1bGF0ZSB3aXRo
IGFsbCBvZiB0aGUgZmllbGRzIHByZXNlbnQgaW4gdGhlIGZvcm1hdHRlZCBudW1iZXIuCisgICAg
ICogQHBhcmFtIHN0YXR1cworICAgICAqICAgICAgICAgICAgU2V0IGlmIGFuIGVycm9yIG9jY3Vy
cyB3aGlsZSBwb3B1bGF0aW5nIHRoZSBGaWVsZFBvc2l0aW9uSXRlcmF0b3IuCisgICAgICogQGRy
YWZ0IElDVSA2MworICAgICAqIEBzZWUgVU51bWJlckZvcm1hdEZpZWxkcworICAgICAqLworICAg
IHZvaWQgZ2V0QWxsRmllbGRQb3NpdGlvbnMoRmllbGRQb3NpdGlvbkl0ZXJhdG9yICZpdGVyYXRv
ciwgVUVycm9yQ29kZSAmc3RhdHVzKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIEV4cG9ydCB0
aGUgZmlyc3QgZm9ybWF0dGVkIG51bWJlciBhcyBhIGRlY2ltYWwgbnVtYmVyLiBUaGlzIGVuZHBv
aW50CisgICAgICogaXMgdXNlZnVsIGZvciBvYnRhaW5pbmcgdGhlIGV4YWN0IG51bWJlciBiZWlu
ZyBwcmludGVkIGFmdGVyIHNjYWxpbmcKKyAgICAgKiBhbmQgcm91bmRpbmcgaGF2ZSBiZWVuIGFw
cGxpZWQgYnkgdGhlIG51bWJlciByYW5nZSBmb3JtYXR0aW5nIHBpcGVsaW5lLgorICAgICAqIAor
ICAgICAqIFRoZSBzeW50YXggb2YgdGhlIHVuZm9ybWF0dGVkIG51bWJlciBpcyBhICJudW1lcmlj
IHN0cmluZyIKKyAgICAgKiBhcyBkZWZpbmVkIGluIHRoZSBEZWNpbWFsIEFyaXRobWV0aWMgU3Bl
Y2lmaWNhdGlvbiwgYXZhaWxhYmxlIGF0CisgICAgICogaHR0cDovL3NwZWxlb3Ryb3ZlLmNvbS9k
ZWNpbWFsCisgICAgICoKKyAgICAgKiBAcmV0dXJuIEEgZGVjaW1hbCByZXByZXNlbnRhdGlvbiBv
ZiB0aGUgZmlyc3QgZm9ybWF0dGVkIG51bWJlci4KKyAgICAgKiBAZHJhZnQgSUNVIDYzCisgICAg
ICogQHNlZSBOdW1iZXJSYW5nZUZvcm1hdHRlcgorICAgICAqIEBzZWUgI2dldFNlY29uZERlY2lt
YWwKKyAgICAgKi8KKyAgICBVbmljb2RlU3RyaW5nIGdldEZpcnN0RGVjaW1hbChVRXJyb3JDb2Rl
JiBzdGF0dXMpIGNvbnN0OworCisgICAgLyoqCisgICAgICogRXhwb3J0IHRoZSBzZWNvbmQgZm9y
bWF0dGVkIG51bWJlciBhcyBhIGRlY2ltYWwgbnVtYmVyLiBUaGlzIGVuZHBvaW50CisgICAgICog
aXMgdXNlZnVsIGZvciBvYnRhaW5pbmcgdGhlIGV4YWN0IG51bWJlciBiZWluZyBwcmludGVkIGFm
dGVyIHNjYWxpbmcKKyAgICAgKiBhbmQgcm91bmRpbmcgaGF2ZSBiZWVuIGFwcGxpZWQgYnkgdGhl
IG51bWJlciByYW5nZSBmb3JtYXR0aW5nIHBpcGVsaW5lLgorICAgICAqIAorICAgICAqIFRoZSBz
eW50YXggb2YgdGhlIHVuZm9ybWF0dGVkIG51bWJlciBpcyBhICJudW1lcmljIHN0cmluZyIKKyAg
ICAgKiBhcyBkZWZpbmVkIGluIHRoZSBEZWNpbWFsIEFyaXRobWV0aWMgU3BlY2lmaWNhdGlvbiwg
YXZhaWxhYmxlIGF0CisgICAgICogaHR0cDovL3NwZWxlb3Ryb3ZlLmNvbS9kZWNpbWFsCisgICAg
ICoKKyAgICAgKiBAcmV0dXJuIEEgZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2Vjb25k
IGZvcm1hdHRlZCBudW1iZXIuCisgICAgICogQGRyYWZ0IElDVSA2MworICAgICAqIEBzZWUgTnVt
YmVyUmFuZ2VGb3JtYXR0ZXIKKyAgICAgKiBAc2VlICNnZXRGaXJzdERlY2ltYWwKKyAgICAgKi8K
KyAgICBVbmljb2RlU3RyaW5nIGdldFNlY29uZERlY2ltYWwoVUVycm9yQ29kZSYgc3RhdHVzKSBj
b25zdDsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgcGFpciBvZiBudW1i
ZXJzIHdhcyBzdWNjZXNzZnVsbHkgZm9ybWF0dGVkIGFzIGEgcmFuZ2Ugb3Igd2hldGhlciBhbiBp
ZGVudGl0eSBmYWxsYmFjayB3YXMKKyAgICAgKiB1c2VkLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGZp
cnN0IGFuZCBzZWNvbmQgbnVtYmVyIHdlcmUgdGhlIHNhbWUgZWl0aGVyIGJlZm9yZSBvciBhZnRl
ciByb3VuZGluZyBvY2N1cnJlZCwgYW4KKyAgICAgKiBpZGVudGl0eSBmYWxsYmFjayB3YXMgdXNl
ZC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gQW4gaW5kaWNhdGlvbiB0aGUgcmVzdWx0aW5nIGlk
ZW50aXR5IHNpdHVhdGlvbiBpbiB0aGUgZm9ybWF0dGVkIG51bWJlciByYW5nZS4KKyAgICAgKiBA
ZHJhZnQgSUNVIDYzCisgICAgICogQHNlZSBVTnVtYmVyUmFuZ2VJZGVudGl0eUZhbGxiYWNrCisg
ICAgICovCisgICAgVU51bWJlclJhbmdlSWRlbnRpdHlSZXN1bHQgZ2V0SWRlbnRpdHlSZXN1bHQo
VUVycm9yQ29kZSYgc3RhdHVzKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIENvcHlpbmcgbm90
IHN1cHBvcnRlZDsgdXNlIG1vdmUgY29uc3RydWN0b3IgaW5zdGVhZC4KKyAgICAgKi8KKyAgICBG
b3JtYXR0ZWROdW1iZXJSYW5nZShjb25zdCBGb3JtYXR0ZWROdW1iZXJSYW5nZSYpID0gZGVsZXRl
OworCisgICAgLyoqCisgICAgICogQ29weWluZyBub3Qgc3VwcG9ydGVkOyB1c2UgbW92ZSBhc3Np
Z25tZW50IGluc3RlYWQuCisgICAgICovCisgICAgRm9ybWF0dGVkTnVtYmVyUmFuZ2UmIG9wZXJh
dG9yPShjb25zdCBGb3JtYXR0ZWROdW1iZXJSYW5nZSYpID0gZGVsZXRlOworCisgICAgLyoqCisg
ICAgICogTW92ZSBjb25zdHJ1Y3RvcjoKKyAgICAgKiBMZWF2ZXMgdGhlIHNvdXJjZSBGb3JtYXR0
ZWROdW1iZXJSYW5nZSBpbiBhbiB1bmRlZmluZWQgc3RhdGUuCisgICAgICogQGRyYWZ0IElDVSA2
MworICAgICAqLworICAgIEZvcm1hdHRlZE51bWJlclJhbmdlKEZvcm1hdHRlZE51bWJlclJhbmdl
JiYgc3JjKSBVX05PRVhDRVBUOworCisgICAgLyoqCisgICAgICogTW92ZSBhc3NpZ25tZW50Ogor
ICAgICAqIExlYXZlcyB0aGUgc291cmNlIEZvcm1hdHRlZE51bWJlclJhbmdlIGluIGFuIHVuZGVm
aW5lZCBzdGF0ZS4KKyAgICAgKiBAZHJhZnQgSUNVIDYzCisgICAgICovCisgICAgRm9ybWF0dGVk
TnVtYmVyUmFuZ2UmIG9wZXJhdG9yPShGb3JtYXR0ZWROdW1iZXJSYW5nZSYmIHNyYykgVV9OT0VY
Q0VQVDsKKworICAgIC8qKgorICAgICAqIERlc3RydWN0IGFuIGluc3RhbmNlIG9mIEZvcm1hdHRl
ZE51bWJlclJhbmdlLCBjbGVhbmluZyB1cCBhbnkgbWVtb3J5IGl0IG1pZ2h0IG93bi4KKyAgICAg
KiBAZHJhZnQgSUNVIDYzCisgICAgICovCisgICAgfkZvcm1hdHRlZE51bWJlclJhbmdlKCk7CisK
KyAgcHJpdmF0ZToKKyAgICAvLyBDYW4ndCB1c2UgTG9jYWxQb2ludGVyIGJlY2F1c2UgVUZvcm1h
dHRlZE51bWJlclJhbmdlRGF0YSBpcyBmb3J3YXJkLWRlY2xhcmVkCisgICAgY29uc3QgaW1wbDo6
VUZvcm1hdHRlZE51bWJlclJhbmdlRGF0YSAqZkRhdGE7CisKKyAgICAvLyBFcnJvciBjb2RlIGZv
ciB0aGUgdGVybWluYWwgbWV0aG9kcworICAgIFVFcnJvckNvZGUgZkVycm9yQ29kZTsKKworICAg
IC8qKgorICAgICAqIEludGVybmFsIGNvbnN0cnVjdG9yIGZyb20gZGF0YSB0eXBlLiBBZG9wdHMg
dGhlIGRhdGEgcG9pbnRlci4KKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAgICBleHBsaWNp
dCBGb3JtYXR0ZWROdW1iZXJSYW5nZShpbXBsOjpVRm9ybWF0dGVkTnVtYmVyUmFuZ2VEYXRhICpy
ZXN1bHRzKQorICAgICAgICA6IGZEYXRhKHJlc3VsdHMpLCBmRXJyb3JDb2RlKFVfWkVST19FUlJP
Uikge30KKworICAgIGV4cGxpY2l0IEZvcm1hdHRlZE51bWJlclJhbmdlKFVFcnJvckNvZGUgZXJy
b3JDb2RlKQorICAgICAgICA6IGZEYXRhKG51bGxwdHIpLCBmRXJyb3JDb2RlKGVycm9yQ29kZSkg
e30KKworICAgIHZvaWQgZ2V0QWxsRmllbGRQb3NpdGlvbnNJbXBsKEZpZWxkUG9zaXRpb25JdGVy
YXRvckhhbmRsZXImIGZwaWgsIFVFcnJvckNvZGUmIHN0YXR1cykgY29uc3Q7CisKKyAgICAvLyBU
byBnaXZlIExvY2FsaXplZE51bWJlclJhbmdlRm9ybWF0dGVyIGZvcm1hdCBtZXRob2RzIGFjY2Vz
cyB0byB0aGlzIGNsYXNzJ3MgY29uc3RydWN0b3I6CisgICAgZnJpZW5kIGNsYXNzIExvY2FsaXpl
ZE51bWJlclJhbmdlRm9ybWF0dGVyOworfTsKKworLyoqCisgKiBTZWUgdGhlIG1haW4gZGVzY3Jp
cHRpb24gaW4gbnVtYmVycmFuZ2Vmb3JtYXR0ZXIuaCBmb3IgZG9jdW1lbnRhdGlvbiBhbmQgZXhh
bXBsZXMuCisgKgorICogQGRyYWZ0IElDVSA2MworICovCitjbGFzcyBVX0kxOE5fQVBJIE51bWJl
clJhbmdlRm9ybWF0dGVyIGZpbmFsIHsKKyAgcHVibGljOgorICAgIC8qKgorICAgICAqIENhbGwg
dGhpcyBtZXRob2QgYXQgdGhlIGJlZ2lubmluZyBvZiBhIE51bWJlclJhbmdlRm9ybWF0dGVyIGZs
dWVudCBjaGFpbiBpbiB3aGljaCB0aGUgbG9jYWxlIGlzIG5vdCBjdXJyZW50bHkKKyAgICAgKiBr
bm93biBhdCB0aGUgY2FsbCBzaXRlLgorICAgICAqCisgICAgICogQHJldHVybiBBbiB7QGxpbmsg
VW5sb2NhbGl6ZWROdW1iZXJSYW5nZUZvcm1hdHRlcn0sIHRvIGJlIHVzZWQgZm9yIGNoYWluaW5n
LgorICAgICAqIEBkcmFmdCBJQ1UgNjMKKyAgICAgKi8KKyAgICBzdGF0aWMgVW5sb2NhbGl6ZWRO
dW1iZXJSYW5nZUZvcm1hdHRlciB3aXRoKCk7CisKKyAgICAvKioKKyAgICAgKiBDYWxsIHRoaXMg
bWV0aG9kIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBOdW1iZXJSYW5nZUZvcm1hdHRlciBmbHVlbnQg
Y2hhaW4gaW4gd2hpY2ggdGhlIGxvY2FsZSBpcyBrbm93biBhdCB0aGUgY2FsbAorICAgICAqIHNp
dGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbG9jYWxlCisgICAgICogICAgICAgICAgICBUaGUg
bG9jYWxlIGZyb20gd2hpY2ggdG8gbG9hZCBmb3JtYXRzIGFuZCBzeW1ib2xzIGZvciBudW1iZXIg
cmFuZ2UgZm9ybWF0dGluZy4KKyAgICAgKiBAcmV0dXJuIEEge0BsaW5rIExvY2FsaXplZE51bWJl
clJhbmdlRm9ybWF0dGVyfSwgdG8gYmUgdXNlZCBmb3IgY2hhaW5pbmcuCisgICAgICogQGRyYWZ0
IElDVSA2MworICAgICAqLworICAgIHN0YXRpYyBMb2NhbGl6ZWROdW1iZXJSYW5nZUZvcm1hdHRl
ciB3aXRoTG9jYWxlKGNvbnN0IExvY2FsZSAmbG9jYWxlKTsKKworICAgIC8qKgorICAgICAqIFVz
ZSBmYWN0b3J5IG1ldGhvZHMgaW5zdGVhZCBvZiB0aGUgY29uc3RydWN0b3IgdG8gY3JlYXRlIGEg
TnVtYmVyRm9ybWF0dGVyLgorICAgICAqLworICAgIE51bWJlclJhbmdlRm9ybWF0dGVyKCkgPSBk
ZWxldGU7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgbnVtYmVyCitVX05BTUVTUEFDRV9FTkQKKwor
I2VuZGlmICAvLyBVX0hJREVfRFJBRlRfQVBJCisKKyNlbmRpZiAvLyBfX05VTUJFUlJBTkdFRk9S
TUFUVEVSX0hfXworCisjZW5kaWYgLyogI2lmICFVQ09ORklHX05PX0ZPUk1BVFRJTkcgKi8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvbnVtZm10LmggYi9Tb3VyY2UvV1RGL2lj
dS91bmljb2RlL251bWZtdC5oCmluZGV4IDgwY2UwYzAwYjU5MWI1YjY0YThmNzA1OWE4NjUxYTYy
YTZhMDA4NTguLmJhMmI3ZDE5NjRiYWViNDMwZDJkYzAzYmFlM2VlMTgxYjc2NDM1NGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvbnVtZm10LmgKKysrIGIvU291cmNlL1dURi9p
Y3UvdW5pY29kZS9udW1mbXQuaApAQCAtNTYsNyArNTYsNiBAQCBjbGFzcyBTdHJpbmdFbnVtZXJh
dGlvbjsKICAqIDxwPjxzdHJvbmc+SU1QT1JUQU5UOjwvc3Ryb25nPiBOZXcgdXNlcnMgYXJlIHN0
cm9uZ2x5IGVuY291cmFnZWQgdG8gc2VlIGlmCiAgKiBudW1iZXJmb3JtYXR0ZXIuaCBmaXRzIHRo
ZWlyIHVzZSBjYXNlLiAgQWx0aG91Z2ggbm90IGRlcHJlY2F0ZWQsIHRoaXMgaGVhZGVyCiAgKiBp
cyBwcm92aWRlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgb25seS4KLSAqIDxoci8+CiAg
KgogICogQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgYWxsIG51bWJlciBmb3JtYXRzLiAgUHJvdmlk
ZXMgaW50ZXJmYWNlIGZvcgogICogZm9ybWF0dGluZyBhbmQgcGFyc2luZyBhIG51bWJlci4gIEFs
c28gcHJvdmlkZXMgbWV0aG9kcyBmb3IKQEAgLTIzOCw2ICsyMzcsMTIgQEAgY2xhc3MgVV9JMThO
X0FQSSBOdW1iZXJGb3JtYXQgOiBwdWJsaWMgRm9ybWF0IHsKICAgICAgICAga1Blcm1pbGxGaWVs
ZCA9IFVOVU1fUEVSTUlMTF9GSUVMRCwKICAgICAgICAgLyoqIEBzdGFibGUgSUNVIDIuMCAqLwog
ICAgICAgICBrU2lnbkZpZWxkID0gVU5VTV9TSUdOX0ZJRUxELAorI2lmbmRlZiBVX0hJREVfRFJB
RlRfQVBJCisgICAgICAgIC8qKiBAZHJhZnQgSUNVIDY0ICovCisgICAgICAgIGtNZWFzdXJlVW5p
dEZpZWxkID0gVU5VTV9NRUFTVVJFX1VOSVRfRklFTEQsCisgICAgICAgIC8qKiBAZHJhZnQgSUNV
IDY0ICovCisgICAgICAgIGtDb21wYWN0RmllbGQgPSBVTlVNX0NPTVBBQ1RfRklFTEQsCisjZW5k
aWYgIC8vIFVfSElERV9EUkFGVF9BUEkKIAogICAgIC8qKgogICAgICAqIFRoZXNlIGNvbnN0YW50
cyBhcmUgcHJvdmlkZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IG9ubHkuCkBAIC03MTAs
NyArNzE1LDcgQEAgY2xhc3MgVV9JMThOX0FQSSBOdW1iZXJGb3JtYXQgOiBwdWJsaWMgRm9ybWF0
IHsKICAgICAgKiBUaGUgZGVmYXVsdCBmb3JtYXR0aW5nIHN0eWxlIGlzIGxvY2FsZSBkZXBlbmRl
bnQuCiAgICAgICogPHA+CiAgICAgICogPHN0cm9uZz5OT1RFOjwvc3Ryb25nPiBOZXcgdXNlcnMg
YXJlIHN0cm9uZ2x5IGVuY291cmFnZWQgdG8gdXNlCi0gICAgICoge0BsaW5rIE51bWJlckZvcm1h
dHRlcn0gaW5zdGVhZCBvZiBOdW1iZXJGb3JtYXQuCisgICAgICoge0BsaW5rIGljdTo6bnVtYmVy
OjpOdW1iZXJGb3JtYXR0ZXJ9IGluc3RlYWQgb2YgTnVtYmVyRm9ybWF0LgogICAgICAqIEBzdGFi
bGUgSUNVIDIuMAogICAgICAqLwogICAgIHN0YXRpYyBOdW1iZXJGb3JtYXQqIFVfRVhQT1JUMiBj
cmVhdGVJbnN0YW5jZShVRXJyb3JDb2RlJik7CkBAIC03MjEsNyArNzI2LDcgQEAgY2xhc3MgVV9J
MThOX0FQSSBOdW1iZXJGb3JtYXQgOiBwdWJsaWMgRm9ybWF0IHsKICAgICAgKiBAcGFyYW0gaW5M
b2NhbGUgICAgdGhlIGdpdmVuIGxvY2FsZS4KICAgICAgKiA8cD4KICAgICAgKiA8c3Ryb25nPk5P
VEU6PC9zdHJvbmc+IE5ldyB1c2VycyBhcmUgc3Ryb25nbHkgZW5jb3VyYWdlZCB0byB1c2UKLSAg
ICAgKiB7QGxpbmsgTnVtYmVyRm9ybWF0dGVyfSBpbnN0ZWFkIG9mIE51bWJlckZvcm1hdC4KKyAg
ICAgKiB7QGxpbmsgaWN1OjpudW1iZXI6Ok51bWJlckZvcm1hdHRlcn0gaW5zdGVhZCBvZiBOdW1i
ZXJGb3JtYXQuCiAgICAgICogQHN0YWJsZSBJQ1UgMi4wCiAgICAgICovCiAgICAgc3RhdGljIE51
bWJlckZvcm1hdCogVV9FWFBPUlQyIGNyZWF0ZUluc3RhbmNlKGNvbnN0IExvY2FsZSYgaW5Mb2Nh
bGUsCkBAIC03MzEsNyArNzM2LDcgQEAgY2xhc3MgVV9JMThOX0FQSSBOdW1iZXJGb3JtYXQgOiBw
dWJsaWMgRm9ybWF0IHsKICAgICAgKiBDcmVhdGUgYSBzcGVjaWZpYyBzdHlsZSBOdW1iZXJGb3Jt
YXQgZm9yIHRoZSBzcGVjaWZpZWQgbG9jYWxlLgogICAgICAqIDxwPgogICAgICAqIDxzdHJvbmc+
Tk9URTo8L3N0cm9uZz4gTmV3IHVzZXJzIGFyZSBzdHJvbmdseSBlbmNvdXJhZ2VkIHRvIHVzZQot
ICAgICAqIHtAbGluayBOdW1iZXJGb3JtYXR0ZXJ9IGluc3RlYWQgb2YgTnVtYmVyRm9ybWF0Lgor
ICAgICAqIHtAbGluayBpY3U6Om51bWJlcjo6TnVtYmVyRm9ybWF0dGVyfSBpbnN0ZWFkIG9mIE51
bWJlckZvcm1hdC4KICAgICAgKiBAcGFyYW0gZGVzaXJlZExvY2FsZSAgICB0aGUgZ2l2ZW4gbG9j
YWxlLgogICAgICAqIEBwYXJhbSBzdHlsZSAgICAgICAgICAgIHRoZSBnaXZlbiBzdHlsZS4KICAg
ICAgKiBAcGFyYW0gZXJyb3JDb2RlICAgICAgICBPdXRwdXQgcGFyYW0gZmlsbGVkIHdpdGggc3Vj
Y2Vzcy9mYWlsdXJlIHN0YXR1cy4KQEAgLTc3MCw3ICs3NzUsNyBAQCBjbGFzcyBVX0kxOE5fQVBJ
IE51bWJlckZvcm1hdCA6IHB1YmxpYyBGb3JtYXQgewogICAgICAqIFJldHVybnMgYSBjdXJyZW5j
eSBmb3JtYXQgZm9yIHRoZSBjdXJyZW50IGRlZmF1bHQgbG9jYWxlLgogICAgICAqIDxwPgogICAg
ICAqIDxzdHJvbmc+Tk9URTo8L3N0cm9uZz4gTmV3IHVzZXJzIGFyZSBzdHJvbmdseSBlbmNvdXJh
Z2VkIHRvIHVzZQotICAgICAqIHtAbGluayBOdW1iZXJGb3JtYXR0ZXJ9IGluc3RlYWQgb2YgTnVt
YmVyRm9ybWF0LgorICAgICAqIHtAbGluayBpY3U6Om51bWJlcjo6TnVtYmVyRm9ybWF0dGVyfSBp
bnN0ZWFkIG9mIE51bWJlckZvcm1hdC4KICAgICAgKiBAc3RhYmxlIElDVSAyLjAKICAgICAgKi8K
ICAgICBzdGF0aWMgTnVtYmVyRm9ybWF0KiBVX0VYUE9SVDIgY3JlYXRlQ3VycmVuY3lJbnN0YW5j
ZShVRXJyb3JDb2RlJik7CkBAIC03NzksNyArNzg0LDcgQEAgY2xhc3MgVV9JMThOX0FQSSBOdW1i
ZXJGb3JtYXQgOiBwdWJsaWMgRm9ybWF0IHsKICAgICAgKiBSZXR1cm5zIGEgY3VycmVuY3kgZm9y
bWF0IGZvciB0aGUgc3BlY2lmaWVkIGxvY2FsZS4KICAgICAgKiA8cD4KICAgICAgKiA8c3Ryb25n
Pk5PVEU6PC9zdHJvbmc+IE5ldyB1c2VycyBhcmUgc3Ryb25nbHkgZW5jb3VyYWdlZCB0byB1c2UK
LSAgICAgKiB7QGxpbmsgTnVtYmVyRm9ybWF0dGVyfSBpbnN0ZWFkIG9mIE51bWJlckZvcm1hdC4K
KyAgICAgKiB7QGxpbmsgaWN1OjpudW1iZXI6Ok51bWJlckZvcm1hdHRlcn0gaW5zdGVhZCBvZiBO
dW1iZXJGb3JtYXQuCiAgICAgICogQHBhcmFtIGluTG9jYWxlICAgIHRoZSBnaXZlbiBsb2NhbGUu
CiAgICAgICogQHN0YWJsZSBJQ1UgMi4wCiAgICAgICovCkBAIC03OTAsNyArNzk1LDcgQEAgY2xh
c3MgVV9JMThOX0FQSSBOdW1iZXJGb3JtYXQgOiBwdWJsaWMgRm9ybWF0IHsKICAgICAgKiBSZXR1
cm5zIGEgcGVyY2VudGFnZSBmb3JtYXQgZm9yIHRoZSBjdXJyZW50IGRlZmF1bHQgbG9jYWxlLgog
ICAgICAqIDxwPgogICAgICAqIDxzdHJvbmc+Tk9URTo8L3N0cm9uZz4gTmV3IHVzZXJzIGFyZSBz
dHJvbmdseSBlbmNvdXJhZ2VkIHRvIHVzZQotICAgICAqIHtAbGluayBOdW1iZXJGb3JtYXR0ZXJ9
IGluc3RlYWQgb2YgTnVtYmVyRm9ybWF0LgorICAgICAqIHtAbGluayBpY3U6Om51bWJlcjo6TnVt
YmVyRm9ybWF0dGVyfSBpbnN0ZWFkIG9mIE51bWJlckZvcm1hdC4KICAgICAgKiBAc3RhYmxlIElD
VSAyLjAKICAgICAgKi8KICAgICBzdGF0aWMgTnVtYmVyRm9ybWF0KiBVX0VYUE9SVDIgY3JlYXRl
UGVyY2VudEluc3RhbmNlKFVFcnJvckNvZGUmKTsKQEAgLTc5OSw3ICs4MDQsNyBAQCBjbGFzcyBV
X0kxOE5fQVBJIE51bWJlckZvcm1hdCA6IHB1YmxpYyBGb3JtYXQgewogICAgICAqIFJldHVybnMg
YSBwZXJjZW50YWdlIGZvcm1hdCBmb3IgdGhlIHNwZWNpZmllZCBsb2NhbGUuCiAgICAgICogPHA+
CiAgICAgICogPHN0cm9uZz5OT1RFOjwvc3Ryb25nPiBOZXcgdXNlcnMgYXJlIHN0cm9uZ2x5IGVu
Y291cmFnZWQgdG8gdXNlCi0gICAgICoge0BsaW5rIE51bWJlckZvcm1hdHRlcn0gaW5zdGVhZCBv
ZiBOdW1iZXJGb3JtYXQuCisgICAgICoge0BsaW5rIGljdTo6bnVtYmVyOjpOdW1iZXJGb3JtYXR0
ZXJ9IGluc3RlYWQgb2YgTnVtYmVyRm9ybWF0LgogICAgICAqIEBwYXJhbSBpbkxvY2FsZSAgICB0
aGUgZ2l2ZW4gbG9jYWxlLgogICAgICAqIEBzdGFibGUgSUNVIDIuMAogICAgICAqLwpAQCAtODEw
LDcgKzgxNSw3IEBAIGNsYXNzIFVfSTE4Tl9BUEkgTnVtYmVyRm9ybWF0IDogcHVibGljIEZvcm1h
dCB7CiAgICAgICogUmV0dXJucyBhIHNjaWVudGlmaWMgZm9ybWF0IGZvciB0aGUgY3VycmVudCBk
ZWZhdWx0IGxvY2FsZS4KICAgICAgKiA8cD4KICAgICAgKiA8c3Ryb25nPk5PVEU6PC9zdHJvbmc+
IE5ldyB1c2VycyBhcmUgc3Ryb25nbHkgZW5jb3VyYWdlZCB0byB1c2UKLSAgICAgKiB7QGxpbmsg
TnVtYmVyRm9ybWF0dGVyfSBpbnN0ZWFkIG9mIE51bWJlckZvcm1hdC4KKyAgICAgKiB7QGxpbmsg
aWN1OjpudW1iZXI6Ok51bWJlckZvcm1hdHRlcn0gaW5zdGVhZCBvZiBOdW1iZXJGb3JtYXQuCiAg
ICAgICogQHN0YWJsZSBJQ1UgMi4wCiAgICAgICovCiAgICAgc3RhdGljIE51bWJlckZvcm1hdCog
VV9FWFBPUlQyIGNyZWF0ZVNjaWVudGlmaWNJbnN0YW5jZShVRXJyb3JDb2RlJik7CkBAIC04MTks
NyArODI0LDcgQEAgY2xhc3MgVV9JMThOX0FQSSBOdW1iZXJGb3JtYXQgOiBwdWJsaWMgRm9ybWF0
IHsKICAgICAgKiBSZXR1cm5zIGEgc2NpZW50aWZpYyBmb3JtYXQgZm9yIHRoZSBzcGVjaWZpZWQg
bG9jYWxlLgogICAgICAqIDxwPgogICAgICAqIDxzdHJvbmc+Tk9URTo8L3N0cm9uZz4gTmV3IHVz
ZXJzIGFyZSBzdHJvbmdseSBlbmNvdXJhZ2VkIHRvIHVzZQotICAgICAqIHtAbGluayBOdW1iZXJG
b3JtYXR0ZXJ9IGluc3RlYWQgb2YgTnVtYmVyRm9ybWF0LgorICAgICAqIHtAbGluayBpY3U6Om51
bWJlcjo6TnVtYmVyRm9ybWF0dGVyfSBpbnN0ZWFkIG9mIE51bWJlckZvcm1hdC4KICAgICAgKiBA
cGFyYW0gaW5Mb2NhbGUgICAgdGhlIGdpdmVuIGxvY2FsZS4KICAgICAgKiBAc3RhYmxlIElDVSAy
LjAKICAgICAgKi8KQEAgLTEwMjgsMTQgKzEwMzMsMTQgQEAgY2xhc3MgVV9JMThOX0FQSSBOdW1i
ZXJGb3JtYXQgOiBwdWJsaWMgRm9ybWF0IHsKICAgICAgKiBHZXQgdGhlIHJvdW5kaW5nIG1vZGUu
IFRoaXMgd2lsbCBhbHdheXMgcmV0dXJuIE51bWJlckZvcm1hdDo6RVJvdW5kaW5nTW9kZTo6a1Jv
dW5kVW5uZWNlc3NhcnkKICAgICAgKiBpZiB0aGUgc3ViY2xhc3MgZG9lcyBub3Qgc3VwcG9ydCBy
b3VuZGluZy4gCiAgICAgICogQHJldHVybiBBIHJvdW5kaW5nIG1vZGUKLSAgICAgKiBAZHJhZnQg
SUNVIDYwCisgICAgICogQHN0YWJsZSBJQ1UgNjAKICAgICAgKi8KICAgICB2aXJ0dWFsIEVSb3Vu
ZGluZ01vZGUgZ2V0Um91bmRpbmdNb2RlKHZvaWQpIGNvbnN0OwogCiAgICAgLyoqCiAgICAgICog
U2V0IHRoZSByb3VuZGluZyBtb2RlLiBJZiBhIHN1YmNsYXNzIGRvZXMgbm90IHN1cHBvcnQgcm91
bmRpbmcsIHRoaXMgd2lsbCBkbyBub3RoaW5nLgogICAgICAqIEBwYXJhbSByb3VuZGluZ01vZGUg
QSByb3VuZGluZyBtb2RlCi0gICAgICogQGRyYWZ0IElDVSA2MAorICAgICAqIEBzdGFibGUgSUNV
IDYwCiAgICAgICovCiAgICAgdmlydHVhbCB2b2lkIHNldFJvdW5kaW5nTW9kZShFUm91bmRpbmdN
b2RlIHJvdW5kaW5nTW9kZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUv
bnVtc3lzLmggYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL251bXN5cy5oCmluZGV4IDllYzNmMTNm
ZDEwYjNlMTVkYmE4MmI2ZWVlMzlhYzM0YzAzNDI2ZTEuLjBjZWQ2ZjRjZmE2ZjY4NzAxZTc0NmE5
OTdjNWZlMWI5MDBjZjM2MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvbnVt
c3lzLmgKKysrIGIvU291cmNlL1dURi9pY3UvdW5pY29kZS9udW1zeXMuaApAQCAtMjAsMTQgKzIw
LDYgQEAKIAogI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCiAKLS8qKgotICogXGRlZiBOVU1T
WVNfTkFNRV9DQVBBQ0lUWQotICogU2l6ZSBvZiBhIG51bWJlcmluZyBzeXN0ZW0gbmFtZS4KLSAq
IEBpbnRlcm5hbAotICovCi0jZGVmaW5lIE5VTVNZU19OQU1FX0NBUEFDSVRZIDgKLQotCiAvKioK
ICAqIFxmaWxlCiAgKiBcYnJpZWYgQysrIEFQSTogTnVtYmVyaW5nU3lzdGVtIG9iamVjdApAQCAt
MzUsMTIgKzI3LDE4IEBACiAKICNpZiAhVUNPTkZJR19OT19GT1JNQVRUSU5HCiAKLQogI2luY2x1
ZGUgInVuaWNvZGUvZm9ybWF0LmgiCiAjaW5jbHVkZSAidW5pY29kZS91b2JqZWN0LmgiCiAKIFVf
TkFNRVNQQUNFX0JFR0lOCiAKKy8vIGNhbid0IGJlICNpZm5kZWYgVV9ISURFX0lOVEVSTkFMX0FQ
STsgbmVlZGVkIGZvciBjaGFyW10gZmllbGQgc2l6ZQorLyoqCisgKiBTaXplIG9mIGEgbnVtYmVy
aW5nIHN5c3RlbSBuYW1lLgorICogQGludGVybmFsCisgKi8KK2NvbnN0ZXhwciBjb25zdCBzaXpl
X3Qga0ludGVybmFsTnVtU3lzTmFtZUNhcGFjaXR5ID0gODsKKwogLyoqCiAgKiBEZWZpbmVzIG51
bWJlcmluZyBzeXN0ZW1zLiBBIG51bWJlcmluZyBzeXN0ZW0gZGVzY3JpYmVzIHRoZSBzY2hlbWUg
Ynkgd2hpY2ggCiAgKiBudW1iZXJzIGFyZSB0byBiZSBwcmVzZW50ZWQgdG8gdGhlIGVuZCB1c2Vy
LiAgSW4gaXRzIHNpbXBsZXN0IGZvcm0sIGEgbnVtYmVyaW5nCkBAIC0xMDYsOSArMTA0LDEzIEBA
IGNsYXNzIFVfSTE4Tl9BUEkgTnVtYmVyaW5nU3lzdGVtIDogcHVibGljIFVPYmplY3QgewogCiAg
ICAgLyoqCiAgICAgICogUmV0dXJuIGEgU3RyaW5nRW51bWVyYXRpb24gb3ZlciBhbGwgdGhlIG5h
bWVzIG9mIG51bWJlcmluZyBzeXN0ZW1zIGtub3duIHRvIElDVS4KKyAgICAgKiBUaGUgbnVtYmVy
aW5nIHN5c3RlbSBuYW1lcyB3aWxsIGJlIGluIGFscGhhYmV0aWNhbCAoaW52YXJpYW50KSBvcmRl
ci4KKyAgICAgKgorICAgICAqIFRoZSByZXR1cm5lZCBTdHJpbmdFbnVtZXJhdGlvbiBpcyBvd25l
ZCBieSB0aGUgY2FsbGVyLCB3aG8gbXVzdCBkZWxldGUgaXQgd2hlbgorICAgICAqIGZpbmlzaGVk
IHdpdGggaXQuCisgICAgICoKICAgICAgKiBAc3RhYmxlIElDVSA0LjIKICAgICAgKi8KLQogICAg
ICBzdGF0aWMgU3RyaW5nRW51bWVyYXRpb24gKiBVX0VYUE9SVDIgZ2V0QXZhaWxhYmxlTmFtZXMo
VUVycm9yQ29kZSYgc3RhdHVzKTsKIAogICAgIC8qKgpAQCAtMTE5LDggKzEyMSwxMCBAQCBjbGFz
cyBVX0kxOE5fQVBJIE51bWJlcmluZ1N5c3RlbSA6IHB1YmxpYyBVT2JqZWN0IHsKICAgICAgKiBk
ZWZhdWx0LCBuYXRpdmUsIHRyYWRpdGlvbmFsLCBmaW5hbmNlIC0gZG8gbm90IGlkZW50aWZ5IHNw
ZWNpZmljIG51bWJlcmluZyBzeXN0ZW1zLAogICAgICAqIGJ1dCByYXRoZXIga2V5IHZhbHVlcyB0
aGF0IG1heSBvbmx5IGJlIHVzZWQgYXMgcGFydCBvZiBhIGxvY2FsZSwgd2hpY2ggaW4gdHVybgog
ICAgICAqIGRlZmluZXMgaG93IHRoZXkgYXJlIG1hcHBlZCB0byBhIHNwZWNpZmljIG51bWJlcmlu
ZyBzeXN0ZW0gc3VjaCBhcyAibGF0biIgb3IgImhhbnQiLgorICAgICAqCiAgICAgICogQHBhcmFt
IG5hbWUgICBUaGUgbmFtZSBvZiB0aGUgbnVtYmVyaW5nIHN5c3RlbS4KLSAgICAgKiBAcGFyYW0g
c3RhdHVzIElDVSBzdGF0dXMKKyAgICAgKiBAcGFyYW0gc3RhdHVzIElDVSBzdGF0dXM7IHNldCB0
byBVX1VOU1VQUE9SVEVEX0VSUk9SIGlmIG51bWJlcmluZyBzeXN0ZW0gbm90IGZvdW5kLgorICAg
ICAqIEByZXR1cm4gVGhlIE51bWJlcmluZ1N5c3RlbSBpbnN0YW5jZSwgb3IgbnVsbHB0ciBpZiBu
b3QgZm91bmQuCiAgICAgICogQHN0YWJsZSBJQ1UgNC4yCiAgICAgICovCiAgICAgc3RhdGljIE51
bWJlcmluZ1N5c3RlbSogVV9FWFBPUlQyIGNyZWF0ZUluc3RhbmNlQnlOYW1lKGNvbnN0IGNoYXIq
IG5hbWUsIFVFcnJvckNvZGUmIHN0YXR1cyk7CkBAIC0xODcsNyArMTkxLDcgQEAgY2xhc3MgVV9J
MThOX0FQSSBOdW1iZXJpbmdTeXN0ZW0gOiBwdWJsaWMgVU9iamVjdCB7CiAgICAgVW5pY29kZVN0
cmluZyAgIGRlc2M7CiAgICAgaW50MzJfdCAgICAgICAgIHJhZGl4OwogICAgIFVCb29sICAgICAg
ICAgICBhbGdvcml0aG1pYzsKLSAgICBjaGFyICAgICAgICAgICAgbmFtZVtOVU1TWVNfTkFNRV9D
QVBBQ0lUWSsxXTsKKyAgICBjaGFyICAgICAgICAgICAgbmFtZVtrSW50ZXJuYWxOdW1TeXNOYW1l
Q2FwYWNpdHkrMV07CiAKICAgICB2b2lkIHNldFJhZGl4KGludDMyX3QgcmFkaXgpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3BhcnNlcG9zLmggYi9Tb3VyY2UvV1RGL2lj
dS91bmljb2RlL3BhcnNlcG9zLmgKaW5kZXggYmJlYmNhN2I1NzEzYTJhYTEyZDJmYTFmZDQzMzFj
MWUzMjFhNDQ5ZC4uYjYzYjg0ZjI5NDQ0NmZkYjRkZDY2ZjFkOTVjMzBhNjU2NzE3OGJkOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi9pY3UvdW5pY29kZS9wYXJzZXBvcy5oCisrKyBiL1NvdXJjZS9X
VEYvaWN1L3VuaWNvZGUvcGFyc2Vwb3MuaApAQCAtOTAsMjEgKzkwLDIxIEBAIGNsYXNzIFVfQ09N
TU9OX0FQSSBQYXJzZVBvc2l0aW9uIDogcHVibGljIFVPYmplY3QgewogICAgICAqIEFzc2lnbm1l
bnQgb3BlcmF0b3IKICAgICAgKiBAc3RhYmxlIElDVSAyLjAKICAgICAgKi8KLSAgICBQYXJzZVBv
c2l0aW9uJiAgICAgIG9wZXJhdG9yPShjb25zdCBQYXJzZVBvc2l0aW9uJiBjb3B5KTsKKyAgICBp
bmxpbmUgUGFyc2VQb3NpdGlvbiYgICAgICBvcGVyYXRvcj0oY29uc3QgUGFyc2VQb3NpdGlvbiYg
Y29weSk7CiAKICAgICAvKioKICAgICAgKiBFcXVhbGl0eSBvcGVyYXRvci4KICAgICAgKiBAcmV0
dXJuIFRSVUUgaWYgdGhlIHR3byBwYXJzZSBwb3NpdGlvbnMgYXJlIGVxdWFsLCBGQUxTRSBvdGhl
cndpc2UuCiAgICAgICogQHN0YWJsZSBJQ1UgMi4wCiAgICAgICovCi0gICAgVUJvb2wgICAgICAg
ICAgICAgIG9wZXJhdG9yPT0oY29uc3QgUGFyc2VQb3NpdGlvbiYgdGhhdCkgY29uc3Q7CisgICAg
aW5saW5lIFVCb29sICAgICAgICAgICAgICBvcGVyYXRvcj09KGNvbnN0IFBhcnNlUG9zaXRpb24m
IHRoYXQpIGNvbnN0OwogCiAgICAgLyoqCiAgICAgICogRXF1YWxpdHkgb3BlcmF0b3IuCiAgICAg
ICogQHJldHVybiBUUlVFIGlmIHRoZSB0d28gcGFyc2UgcG9zaXRpb25zIGFyZSBub3QgZXF1YWws
IEZBTFNFIG90aGVyd2lzZS4KICAgICAgKiBAc3RhYmxlIElDVSAyLjAKICAgICAgKi8KLSAgICBV
Qm9vbCAgICAgICAgICAgICAgb3BlcmF0b3IhPShjb25zdCBQYXJzZVBvc2l0aW9uJiB0aGF0KSBj
b25zdDsKKyAgICBpbmxpbmUgVUJvb2wgICAgICAgICAgICAgIG9wZXJhdG9yIT0oY29uc3QgUGFy
c2VQb3NpdGlvbiYgdGhhdCkgY29uc3Q7CiAKICAgICAvKioKICAgICAgKiBDbG9uZSB0aGlzIG9i
amVjdC4KQEAgLTEyNiwxNCArMTI2LDE0IEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBQYXJzZVBvc2l0
aW9uIDogcHVibGljIFVPYmplY3QgewogICAgICAqIEByZXR1cm4gdGhlIGN1cnJlbnQgaW5kZXgu
CiAgICAgICogQHN0YWJsZSBJQ1UgMi4wCiAgICAgICovCi0gICAgaW50MzJfdCBnZXRJbmRleCh2
b2lkKSBjb25zdDsKKyAgICBpbmxpbmUgaW50MzJfdCBnZXRJbmRleCh2b2lkKSBjb25zdDsKIAog
ICAgIC8qKgogICAgICAqIFNldCB0aGUgY3VycmVudCBwYXJzZSBwb3NpdGlvbi4KICAgICAgKiBA
cGFyYW0gaW5kZXggdGhlIG5ldyBpbmRleC4KICAgICAgKiBAc3RhYmxlIElDVSAyLjAKICAgICAg
Ki8KLSAgICB2b2lkIHNldEluZGV4KGludDMyX3QgaW5kZXgpOworICAgIGlubGluZSB2b2lkIHNl
dEluZGV4KGludDMyX3QgaW5kZXgpOwogCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBpbmRleCBh
dCB3aGljaCBhIHBhcnNlIGVycm9yIG9jY3VycmVkLiAgRm9ybWF0dGVycwpAQCAtMTQyLDE0ICsx
NDIsMTQgQEAgY2xhc3MgVV9DT01NT05fQVBJIFBhcnNlUG9zaXRpb24gOiBwdWJsaWMgVU9iamVj
dCB7CiAgICAgICogc2V0LgogICAgICAqIEBzdGFibGUgSUNVIDIuMAogICAgICAqLwotICAgIHZv
aWQgc2V0RXJyb3JJbmRleChpbnQzMl90IGVpKTsKKyAgICBpbmxpbmUgdm9pZCBzZXRFcnJvcklu
ZGV4KGludDMyX3QgZWkpOwogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmUgdGhlIGluZGV4IGF0
IHdoaWNoIGFuIGVycm9yIG9jY3VycmVkLCBvciAtMSBpZiB0aGUKICAgICAgKiBlcnJvciBpbmRl
eCBoYXMgbm90IGJlZW4gc2V0LgogICAgICAqIEBzdGFibGUgSUNVIDIuMAogICAgICAqLwotICAg
IGludDMyX3QgZ2V0RXJyb3JJbmRleCh2b2lkKSBjb25zdDsKKyAgICBpbmxpbmUgaW50MzJfdCBn
ZXRFcnJvckluZGV4KHZvaWQpIGNvbnN0OwogCiAgICAgLyoqCiAgICAgICogSUNVICJwb29yIG1h
bidzIFJUVEkiLCByZXR1cm5zIGEgVUNsYXNzSUQgZm9yIHRoaXMgY2xhc3MuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3BsYXRmb3JtLmggYi9Tb3VyY2UvV1RGL2ljdS91bmlj
b2RlL3BsYXRmb3JtLmgKaW5kZXggN2EzYTg3YTA4ZDJlMjE1MTYwOGIwZWEyZjBjYmZiMzQ4OGU0
YTVjZS4uYTM2MjNmNWRhNmE3NWE1MWU5MWJhZGRmNjc3OTA3ZTllNTIyZTE4OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi9pY3UvdW5pY29kZS9wbGF0Zm9ybS5oCisrKyBiL1NvdXJjZS9XVEYvaWN1
L3VuaWNvZGUvcGxhdGZvcm0uaApAQCAtMzgsNyArMzgsNyBAQAogICogYW5kL29yIGZyb20gb3Ro
ZXIgbWFjcm9zIHRoYXQgYXJlIHByZWRlZmluZWQgYnkgdGhlIGNvbXBpbGVyCiAgKiBvciBkZWZp
bmVkIGluIHN0YW5kYXJkIChQT1NJWCBvciBwbGF0Zm9ybSBvciBjb21waWxlcikgaGVhZGVycy4K
ICAqCi0gKiBBcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kLCB5b3UgY2FuIGFkZCBhbiBleHBsaWNp
dCA8Y29kZT4jZGVmaW5lPC9jb2RlPiBmb3Igc29tZSBtYWNyb3MKKyAqIEFzIGEgdGVtcG9yYXJ5
IHdvcmthcm91bmQsIHlvdSBjYW4gYWRkIGFuIGV4cGxpY2l0IFwjZGVmaW5lIGZvciBzb21lIG1h
Y3JvcwogICogYmVmb3JlIGl0IGlzIGZpcnN0IHRlc3RlZCwgb3IgYWRkIGFuIGVxdWl2YWxlbnQg
LUQgbWFjcm8gZGVmaW5pdGlvbgogICogdG8gdGhlIGNvbXBpbGVyJ3MgY29tbWFuZCBsaW5lLgog
ICoKQEAgLTIwNyw2ICsyMDcsOSBAQAogIyAgIGRlZmluZSBDWUdXSU5NU1ZDCiAjZW5kaWYKICov
CisjaWZkZWYgVV9JTl9ET1hZR0VOCisjICAgZGVmaW5lIENZR1dJTk1TVkMKKyNlbmRpZgogCiAv
KioKICAqIFxkZWYgVV9QTEFURk9STV9VU0VTX09OTFlfV0lOMzJfQVBJCkBAIC00MTcsNiArNDIw
LDkgQEAKICNpZm5kZWYgX19oYXNfY3BwX2F0dHJpYnV0ZQogIyAgICBkZWZpbmUgX19oYXNfY3Bw
X2F0dHJpYnV0ZSh4KSAwCiAjZW5kaWYKKyNpZm5kZWYgX19oYXNfZGVjbHNwZWNfYXR0cmlidXRl
CisjICAgIGRlZmluZSBfX2hhc19kZWNsc3BlY19hdHRyaWJ1dGUoeCkgMAorI2VuZGlmCiAjaWZu
ZGVmIF9faGFzX2J1aWx0aW4KICMgICAgZGVmaW5lIF9faGFzX2J1aWx0aW4oeCkgMAogI2VuZGlm
CkBAIC00OTMsMTMgKzQ5OSw4IEBAIG5hbWVzcGFjZSBzdGQgewogICovCiAjaWZkZWYgVV9OT0VY
Q0VQVAogICAgIC8qIFVzZSB0aGUgcHJlZGVmaW5lZCB2YWx1ZS4gKi8KLSNlbGlmIGRlZmluZWQo
X0hBU19FWENFUFRJT05TKSAmJiAhX0hBU19FWENFUFRJT05TICAvKiBWaXN1YWwgU3R1ZGlvICov
Ci0jICAgZGVmaW5lIFVfTk9FWENFUFQKLSNlbGlmIFVfQ1BMVVNQTFVTX1ZFUlNJT04gPj0gMTEg
fHwgX19oYXNfZmVhdHVyZShjeHhfbm9leGNlcHQpIHx8IF9faGFzX2V4dGVuc2lvbihjeHhfbm9l
eGNlcHQpIFwKLSAgICAgICAgfHwgKGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSID49IDE5
MDApICAvKiBWaXN1YWwgU3R1ZGlvIDIwMTUgKi8KLSMgICBkZWZpbmUgVV9OT0VYQ0VQVCBub2V4
Y2VwdAogI2Vsc2UKLSMgICBkZWZpbmUgVV9OT0VYQ0VQVAorIyAgIGRlZmluZSBVX05PRVhDRVBU
IG5vZXhjZXB0CiAjZW5kaWYKIAogLyoqCkBAIC01MTksNiArNTIwLDggQEAgbmFtZXNwYWNlIHN0
ZCB7CiAgICAgICAgICAgICAoX19oYXNfZmVhdHVyZShjeHhfYXR0cmlidXRlcykgJiYgX19oYXNf
d2FybmluZygiLVdpbXBsaWNpdC1mYWxsdGhyb3VnaCIpKQogIyAgICAgICBkZWZpbmUgVV9GQUxM
VEhST1VHSCBbW2NsYW5nOjpmYWxsdGhyb3VnaF1dCiAjICAgZW5kaWYKKyNlbGlmIGRlZmluZWQo
X19HTlVDX18pICYmIChfX0dOVUNfXyA+PSA3KQorIyAgIGRlZmluZSBVX0ZBTExUSFJPVUdIIF9f
YXR0cmlidXRlX18oKGZhbGx0aHJvdWdoKSkKICNlbmRpZgogCiAjaWZuZGVmIFVfRkFMTFRIUk9V
R0gKQEAgLTc2Myw3ICs3NjYsOCBAQCBuYW1lc3BhY2Ugc3RkIHsKICNlbGlmIFVfSEFWRV9DSEFS
MTZfVCBcCiAgICAgfHwgKGRlZmluZWQoX194bENfXykgJiYgZGVmaW5lZChfX0lCTV9VVEZfTElU
RVJBTCkgJiYgVV9TSVpFT0ZfV0NIQVJfVCAhPSAyKSBcCiAgICAgfHwgKGRlZmluZWQoX19IUF9h
Q0MpICYmIF9fSFBfYUNDID49IDAzNTAwMCkgXAotICAgIHx8IChkZWZpbmVkKF9fSFBfY2MpICYm
IF9fSFBfY2MgPj0gMTExMTA2KQorICAgIHx8IChkZWZpbmVkKF9fSFBfY2MpICYmIF9fSFBfY2Mg
Pj0gMTExMTA2KSBcCisgICAgfHwgKGRlZmluZWQoVV9JTl9ET1hZR0VOKSkKICMgICBkZWZpbmUg
VV9ERUNMQVJFX1VURjE2KHN0cmluZykgdSAjIyBzdHJpbmcKICNlbGlmIFVfU0laRU9GX1dDSEFS
X1QgPT0gMiBcCiAgICAgJiYgKFVfQ0hBUlNFVF9GQU1JTFkgPT0gMCB8fCAoVV9QRl9PUzM5MCA8
PSBVX1BMQVRGT1JNICYmIFVfUExBVEZPUk0gPD0gVV9QRl9PUzQwMCAmJiBkZWZpbmVkKF9fVUNT
Ml9fKSkpCkBAIC03ODIsNiArNzg2LDggQEAgbmFtZXNwYWNlIHN0ZCB7CiAgICAgLyogVXNlIHRo
ZSBwcmVkZWZpbmVkIHZhbHVlLiAqLwogI2VsaWYgZGVmaW5lZChVX1NUQVRJQ19JTVBMRU1FTlRB
VElPTikKICMgICBkZWZpbmUgVV9FWFBPUlQKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpIHx8IChf
X2hhc19kZWNsc3BlY19hdHRyaWJ1dGUoZGxsZXhwb3J0KSAmJiBfX2hhc19kZWNsc3BlY19hdHRy
aWJ1dGUoZGxsaW1wb3J0KSkKKyMgICBkZWZpbmUgVV9FWFBPUlQgX19kZWNsc3BlYyhkbGxleHBv
cnQpCiAjZWxpZiBkZWZpbmVkKF9fR05VQ19fKQogIyAgIGRlZmluZSBVX0VYUE9SVCBfX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKQogI2VsaWYgKGRlZmluZWQoX19TVU5QUk9f
Q0MpICYmIF9fU1VOUFJPX0NDID49IDB4NTUwKSBcCkBAIC03ODksOCArNzk1LDYgQEAgbmFtZXNw
YWNlIHN0ZCB7CiAjICAgZGVmaW5lIFVfRVhQT1JUIF9fZ2xvYmFsCiAvKiNlbGlmIGRlZmluZWQo
X19IUF9hQ0MpIHx8IGRlZmluZWQoX19IUF9jYykKICMgICBkZWZpbmUgVV9FWFBPUlQgX19kZWNs
c3BlYyhkbGxleHBvcnQpKi8KLSNlbGlmIGRlZmluZWQoX01TQ19WRVIpCi0jICAgZGVmaW5lIFVf
RVhQT1JUIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQogI2Vsc2UKICMgICBkZWZpbmUgVV9FWFBPUlQK
ICNlbmRpZgpAQCAtODA2LDcgKzgxMCw3IEBAIG5hbWVzcGFjZSBzdGQgewogCiAjaWZkZWYgVV9J
TVBPUlQKICAgICAvKiBVc2UgdGhlIHByZWRlZmluZWQgdmFsdWUuICovCi0jZWxpZiBkZWZpbmVk
KF9NU0NfVkVSKQorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikgfHwgKF9faGFzX2RlY2xzcGVjX2F0
dHJpYnV0ZShkbGxleHBvcnQpICYmIF9faGFzX2RlY2xzcGVjX2F0dHJpYnV0ZShkbGxpbXBvcnQp
KQogICAgIC8qIFdpbmRvd3MgbmVlZHMgdG8gZXhwb3J0L2ltcG9ydCBkYXRhLiAqLwogIyAgIGRl
ZmluZSBVX0lNUE9SVCBfX2RlY2xzcGVjKGRsbGltcG9ydCkKICNlbHNlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL2ljdS91bmljb2RlL3BsdXJmbXQuaCBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUv
cGx1cmZtdC5oCmluZGV4IGZkNTM3YzI0YzIxYjVkYTVjMWFjYTEyNjMxMDFmMzI5MWQ4MzJiMDEu
LmNiOTAxYjBjN2I1YmVjYzQxZmRmM2E5YjVkZTUyYWRmZGM3NzQxYzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvaWN1L3VuaWNvZGUvcGx1cmZtdC5oCisrKyBiL1NvdXJjZS9XVEYvaWN1L3VuaWNv
ZGUvcGx1cmZtdC5oCkBAIC01MjAsMTUgKzUyMCw3IEBAIGNsYXNzIFVfSTE4Tl9BUEkgUGx1cmFs
Rm9ybWF0IDogcHVibGljIEZvcm1hdCB7CiAgICAgICovCiAgICAgIHZpcnR1YWwgVUNsYXNzSUQg
Z2V0RHluYW1pY0NsYXNzSUQoKSBjb25zdDsKIAotI2lmIChkZWZpbmVkKF9feGxDX18pICYmIChf
X3hsQ19fIDwgMHgwQzAwKSkgfHwgKFVfUExBVEZPUk0gPT0gVV9QRl9PUzM5MCkgfHwgKFVfUExB
VEZPUk0gPT1VX1BGX09TNDAwKQotLy8gV29yayBhcm91bmQgYSBjb21waWxlciBidWcgb24geGxD
IDExLjEgb24gQUlYIDcuMSB0aGF0IHdvdWxkCi0vLyBwcmV2ZW50IFBsdXJhbFNlbGVjdG9yQWRh
cHRlciBmcm9tIGltcGxlbWVudGluZyBwcml2YXRlIFBsdXJhbFNlbGVjdG9yLgotLy8geGxDIGVy
cm9yIG1lc3NhZ2U6Ci0vLyAxNTQwLTAzMDAgKFMpIFRoZSAicHJpdmF0ZSIgbWVtYmVyICJjbGFz
cyBpY3VfNDk6OlBsdXJhbEZvcm1hdDo6UGx1cmFsU2VsZWN0b3IiIGNhbm5vdCBiZSBhY2Nlc3Nl
ZC4KLXB1YmxpYzoKLSNlbHNlCiBwcml2YXRlOgotI2VuZGlmCiAgICAgIC8qKgogICAgICAgKiBA
aW50ZXJuYWwKICAgICAgICovCkBAIC01NjQsMTAgKzU1Niw2IEBAIGNsYXNzIFVfSTE4Tl9BUEkg
UGx1cmFsRm9ybWF0IDogcHVibGljIEZvcm1hdCB7CiAgICAgICAgIFBsdXJhbFJ1bGVzKiBwbHVy
YWxSdWxlczsKICAgICB9OwogCi0jaWYgZGVmaW5lZChfX3hsQ19fKQotLy8gRW5kIG9mIHhsQyBi
dWcgd29ya2Fyb3VuZCwga2VlcCByZW1haW5pbmcgZGVmaW5pdGlvbnMgcHJpdmF0ZS4KLXByaXZh
dGU6Ci0jZW5kaWYKICAgICBMb2NhbGUgIGxvY2FsZTsKICAgICBNZXNzYWdlUGF0dGVybiBtc2dQ
YXR0ZXJuOwogICAgIE51bWJlckZvcm1hdCogIG51bWJlckZvcm1hdDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvaWN1L3VuaWNvZGUvcGx1cnJ1bGUuaCBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUv
cGx1cnJ1bGUuaAppbmRleCAwM2RlYTNmMWI5Mjk4ODBkNzVjZjRhMjA0MzU2ZThhY2M5ZmNhMTVl
Li4wNGJmMzk3MGJhMDgyNTdkNGFjNGRmY2EwYzFjNWQyNThjNDZmOTA0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL2ljdS91bmljb2RlL3BsdXJydWxlLmgKKysrIGIvU291cmNlL1dURi9pY3UvdW5p
Y29kZS9wbHVycnVsZS5oCkBAIC01MCw2ICs1MCwxMCBAQCBjbGFzcyBQbHVyYWxLZXl3b3JkRW51
bWVyYXRpb247CiBjbGFzcyBBbmRDb25zdHJhaW50OwogY2xhc3MgU2hhcmVkUGx1cmFsUnVsZXM7
CiAKK25hbWVzcGFjZSBudW1iZXIgeworY2xhc3MgRm9ybWF0dGVkTnVtYmVyOworfQorCiAvKioK
ICAqIERlZmluZXMgcnVsZXMgZm9yIG1hcHBpbmcgbm9uLW5lZ2F0aXZlIG51bWVyaWMgdmFsdWVz
IG9udG8gYSBzbWFsbCBzZXQgb2YKICAqIGtleXdvcmRzLiBSdWxlcyBhcmUgY29uc3RydWN0ZWQg
ZnJvbSBhIHRleHQgZGVzY3JpcHRpb24sIGNvbnNpc3RpbmcKQEAgLTExOCw3ICsxMjIsNiBAQCBj
bGFzcyBTaGFyZWRQbHVyYWxSdWxlczsKICAqIEV4YW1wbGVzIGFyZSBpbiB0aGUgZm9sbG93aW5n
IHRhYmxlOgogICogPC9wPgogICogPHRhYmxlIGJvcmRlcj0nMScgc3R5bGU9ImJvcmRlci1jb2xs
YXBzZTpjb2xsYXBzZSI+Ci0gKiA8dGJvZHk+CiAgKiA8dHI+CiAgKiA8dGg+bjwvdGg+CiAgKiA8
dGg+aTwvdGg+CkBAIC0xNTUsNyArMTU4LDYgQEAgY2xhc3MgU2hhcmVkUGx1cmFsUnVsZXM7CiAg
KiA8dGQgYWxpZ249InJpZ2h0Ij4yMzwvdGQ+CiAgKiA8dGQ+MjwvdGQ+CiAgKiA8L3RyPgotICog
PC90Ym9keT4KICAqIDwvdGFibGU+CiAgKiA8cD4KICAqIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4g
J2luJyBhbmQgJ3dpdGhpbicgaXMgdGhhdCAnaW4nIG9ubHkgaW5jbHVkZXMgaW50ZWdlcnMgaW4g
dGhlIHNwZWNpZmllZCByYW5nZSwgd2hpbGUgJ3dpdGhpbicKQEAgLTMyNSw5ICszMjcsOSBAQCBj
bGFzcyBVX0kxOE5fQVBJIFBsdXJhbFJ1bGVzIDogcHVibGljIFVPYmplY3QgewogI2VuZGlmICAv
KiBVX0hJREVfSU5URVJOQUxfQVBJICovCiAKICAgICAvKioKLSAgICAgKiBHaXZlbiBhIG51bWJl
ciwgcmV0dXJucyB0aGUga2V5d29yZCBvZiB0aGUgZmlyc3QgcnVsZSB0aGF0IGFwcGxpZXMgdG8K
LSAgICAgKiB0aGUgbnVtYmVyLiAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB3aXRoIGlzS2V5
d29yZCogZnVuY3Rpb25zIHRvCi0gICAgICogZGV0ZXJtaW5lIHRoZSBrZXl3b3JkIGZvciBkZWZh
dWx0IHBsdXJhbCBydWxlcy4KKyAgICAgKiBHaXZlbiBhbiBpbnRlZ2VyLCByZXR1cm5zIHRoZSBr
ZXl3b3JkIG9mIHRoZSBmaXJzdCBydWxlCisgICAgICogdGhhdCBhcHBsaWVzIHRvICB0aGUgbnVt
YmVyLiAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB3aXRoCisgICAgICogaXNLZXl3b3JkKiBm
dW5jdGlvbnMgdG8gZGV0ZXJtaW5lIHRoZSBrZXl3b3JkIGZvciBkZWZhdWx0IHBsdXJhbCBydWxl
cy4KICAgICAgKgogICAgICAqIEBwYXJhbSBudW1iZXIgIFRoZSBudW1iZXIgZm9yIHdoaWNoIHRo
ZSBydWxlIGhhcyB0byBiZSBkZXRlcm1pbmVkLgogICAgICAqIEByZXR1cm4gICAgICAgIFRoZSBr
ZXl3b3JkIG9mIHRoZSBzZWxlY3RlZCBydWxlLgpAQCAtMzM2LDkgKzMzOCw5IEBAIGNsYXNzIFVf
STE4Tl9BUEkgUGx1cmFsUnVsZXMgOiBwdWJsaWMgVU9iamVjdCB7CiAgICAgVW5pY29kZVN0cmlu
ZyBzZWxlY3QoaW50MzJfdCBudW1iZXIpIGNvbnN0OwogCiAgICAgLyoqCi0gICAgICogR2l2ZW4g
YSBudW1iZXIsIHJldHVybnMgdGhlIGtleXdvcmQgb2YgdGhlIGZpcnN0IHJ1bGUgdGhhdCBhcHBs
aWVzIHRvCi0gICAgICogdGhlIG51bWJlci4gIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgd2l0
aCBpc0tleXdvcmQqIGZ1bmN0aW9ucyB0bwotICAgICAqIGRldGVybWluZSB0aGUga2V5d29yZCBm
b3IgZGVmYXVsdCBwbHVyYWwgcnVsZXMuCisgICAgICogR2l2ZW4gYSBmbG9hdGluZy1wb2ludCBu
dW1iZXIsIHJldHVybnMgdGhlIGtleXdvcmQgb2YgdGhlIGZpcnN0IHJ1bGUKKyAgICAgKiB0aGF0
IGFwcGxpZXMgdG8gIHRoZSBudW1iZXIuICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHdpdGgK
KyAgICAgKiBpc0tleXdvcmQqIGZ1bmN0aW9ucyB0byBkZXRlcm1pbmUgdGhlIGtleXdvcmQgZm9y
IGRlZmF1bHQgcGx1cmFsIHJ1bGVzLgogICAgICAqCiAgICAgICogQHBhcmFtIG51bWJlciAgVGhl
IG51bWJlciBmb3Igd2hpY2ggdGhlIHJ1bGUgaGFzIHRvIGJlIGRldGVybWluZWQuCiAgICAgICog
QHJldHVybiAgICAgICAgVGhlIGtleXdvcmQgb2YgdGhlIHNlbGVjdGVkIHJ1bGUuCkBAIC0zNDYs
NiArMzQ4LDI1IEBAIGNsYXNzIFVfSTE4Tl9BUEkgUGx1cmFsUnVsZXMgOiBwdWJsaWMgVU9iamVj
dCB7CiAgICAgICovCiAgICAgVW5pY29kZVN0cmluZyBzZWxlY3QoZG91YmxlIG51bWJlcikgY29u
c3Q7CiAKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQorICAgIC8qKgorICAgICAqIEdpdmVuIGEg
Zm9ybWF0dGVkIG51bWJlciwgcmV0dXJucyB0aGUga2V5d29yZCBvZiB0aGUgZmlyc3QgcnVsZQor
ICAgICAqIHRoYXQgYXBwbGllcyB0byAgdGhlIG51bWJlci4gIFRoaXMgZnVuY3Rpb24gY2FuIGJl
IHVzZWQgd2l0aAorICAgICAqIGlzS2V5d29yZCogZnVuY3Rpb25zIHRvIGRldGVybWluZSB0aGUg
a2V5d29yZCBmb3IgZGVmYXVsdCBwbHVyYWwgcnVsZXMuCisgICAgICoKKyAgICAgKiBBIEZvcm1h
dHRlZE51bWJlciBhbGxvd3MgeW91IHRvIHNwZWNpZnkgYW4gZXhwb25lbnQgb3IgdHJhaWxpbmcg
emVyb3MsCisgICAgICogd2hpY2ggY2FuIGFmZmVjdCB0aGUgcGx1cmFsIGNhdGVnb3J5LiBUbyBn
ZXQgYSBGb3JtYXR0ZWROdW1iZXIsIHNlZQorICAgICAqIE51bWJlckZvcm1hdHRlci4KKyAgICAg
KgorICAgICAqIEBwYXJhbSBudW1iZXIgIFRoZSBudW1iZXIgZm9yIHdoaWNoIHRoZSBydWxlIGhh
cyB0byBiZSBkZXRlcm1pbmVkLgorICAgICAqIEBwYXJhbSBzdGF0dXMgIFNldCBpZiBhbiBlcnJv
ciBvY2N1cnMgd2hpbGUgc2VsZWN0aW5nIHBsdXJhbCBrZXl3b3JkLgorICAgICAqICAgICAgICAg
ICAgICAgIFRoaXMgY291bGQgaGFwcGVuIGlmIHRoZSBGb3JtYXR0ZWROdW1iZXIgaXMgaW52YWxp
ZC4KKyAgICAgKiBAcmV0dXJuICAgICAgICBUaGUga2V5d29yZCBvZiB0aGUgc2VsZWN0ZWQgcnVs
ZS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgVW5pY29kZVN0cmluZyBzZWxl
Y3QoY29uc3QgbnVtYmVyOjpGb3JtYXR0ZWROdW1iZXImIG51bWJlciwgVUVycm9yQ29kZSYgc3Rh
dHVzKSBjb25zdDsKKyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLworCiAjaWZuZGVmIFVf
SElERV9JTlRFUk5BTF9BUEkKICAgICAvKioKICAgICAgICogQGludGVybmFsCkBAIC00OTksNiAr
NTIwLDEyIEBAIGNsYXNzIFVfSTE4Tl9BUEkgUGx1cmFsUnVsZXMgOiBwdWJsaWMgVU9iamVjdCB7
CiAgICAgVW5pY29kZVN0cmluZyAgIGdldFJ1bGVGcm9tUmVzb3VyY2UoY29uc3QgTG9jYWxlJiBs
b2NhbGUsIFVQbHVyYWxUeXBlIHR5cGUsIFVFcnJvckNvZGUmIHN0YXR1cyk7CiAgICAgUnVsZUNo
YWluICAgICAgKnJ1bGVzRm9yS2V5d29yZChjb25zdCBVbmljb2RlU3RyaW5nICZrZXl3b3JkKSBj
b25zdDsKIAorICAgIC8qKgorICAgICogQW4gaW50ZXJuYWwgc3RhdHVzIHZhcmlhYmxlIHVzZWQg
dG8gaW5kaWNhdGUgdGhhdCB0aGUgb2JqZWN0IGlzIGluIGFuICdpbnZhbGlkJyBzdGF0ZS4KKyAg
ICAqIFVzZWQgYnkgY29weSBjb25zdHJ1Y3RvciwgdGhlIGFzc2lnbm1lbnQgb3BlcmF0b3IgYW5k
IHRoZSBjbG9uZSBtZXRob2QuCisgICAgKi8KKyAgICBVRXJyb3JDb2RlIG1JbnRlcm5hbFN0YXR1
czsKKwogICAgIGZyaWVuZCBjbGFzcyBQbHVyYWxSdWxlUGFyc2VyOwogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi9pY3UvdW5pY29kZS9wdHlwZXMuaCBiL1NvdXJjZS9XVEYvaWN1L3VuaWNv
ZGUvcHR5cGVzLmgKaW5kZXggNmVhZjJkYmYwMzU3MjU2ODEwMjI4M2M1Nzk1N2RlOGJmOTVhNmY5
Zi4uNzAzMjRmZmVlM2I5YzRmMWQyMzk5ZTJjMWRmYjJjMTRkZjI2ZTY1MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi9pY3UvdW5pY29kZS9wdHlwZXMuaAorKysgYi9Tb3VyY2UvV1RGL2ljdS91bmlj
b2RlL3B0eXBlcy5oCkBAIC04Myw2ICs4Myw3IEBAIHR5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50
OF90OwogCiAjZWxzZSAvKiBuZWl0aGVyIFVfSEFWRV9TVERJTlRfSCBub3IgVV9IQVZFX0lOVFRZ
UEVTX0ggKi8KIAorLy8vIFxjb25kCiAjaWYgISBVX0hBVkVfSU5UOF9UCiB0eXBlZGVmIHNpZ25l
ZCBjaGFyIGludDhfdDsKICNlbmRpZgpAQCAtMTIyLDYgKzEyMyw3IEBAIHR5cGVkZWYgdW5zaWdu
ZWQgaW50IHVpbnQzMl90OwogICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVpbnQ2NF90
OwogI2VuZGlmCiAjZW5kaWYKKy8vLyBcZW5kY29uZAogCiAjZW5kaWYgLyogVV9IQVZFX1NURElO
VF9IIC8gVV9IQVZFX0lOVFRZUEVTX0ggKi8KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9pY3Uv
dW5pY29kZS9yYmJpLmggYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3JiYmkuaAppbmRleCBlOWI4
MmNkNTIwNzM2YmI5M2Y2YzU2YWRiNmZjYjIwY2FmOGMzOTA3Li4zNjVhZTJkM2QyYWM3NWE0ZTIz
MzUwODg5ZGM3NGE2OTVjMWQ4ZTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL2ljdS91bmljb2Rl
L3JiYmkuaAorKysgYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3JiYmkuaApAQCAtOTksNyArOTks
NyBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgUnVsZUJhc2VkQnJlYWtJdGVyYXRvciAvKlVfRklOQUwq
LyA6IHB1YmxpYyBCcmVha0l0ZXJhdG9yIHsKICAgICAgKiBJZiBwcmVzZW50LCBVU3RhY2sgb2Yg
TGFuZ3VhZ2VCcmVha0VuZ2luZSBvYmplY3RzIHRoYXQgbWlnaHQgaGFuZGxlCiAgICAgICogZGlj
dGlvbmFyeSBjaGFyYWN0ZXJzLiBTZWFyY2hlZCBmcm9tIHRvcCB0byBib3R0b20gdG8gZmluZCBh
biBvYmplY3QgdG8KICAgICAgKiBoYW5kbGUgYSBnaXZlbiBjaGFyYWN0ZXIuCi0gICAgICogQGlu
dGVybmFsCisgICAgICogQGludGVybmFsIChwcml2YXRlKQogICAgICAqLwogICAgIFVTdGFjayAg
ICAgICAgICAgICAgKmZMYW5ndWFnZUJyZWFrRW5naW5lczsKIApAQCAtMTA3LDE1ICsxMDcsMTUg
QEAgY2xhc3MgVV9DT01NT05fQVBJIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IgLypVX0ZJTkFMKi8g
OiBwdWJsaWMgQnJlYWtJdGVyYXRvciB7CiAgICAgICoKICAgICAgKiBJZiBwcmVzZW50LCB0aGUg
c3BlY2lhbCBMYW5ndWFnZUJyZWFrRW5naW5lIHVzZWQgZm9yIGhhbmRsaW5nCiAgICAgICogY2hh
cmFjdGVycyB0aGF0IGFyZSBpbiB0aGUgZGljdGlvbmFyeSBzZXQsIGJ1dCBub3QgaGFuZGxlZCBi
eSBhbnkKLSAgICAgKiBMYW5ndWdhZ2VCcmVha0VuZ2luZS4KLSAgICAgKiBAaW50ZXJuYWwKKyAg
ICAgKiBMYW5ndWFnZUJyZWFrRW5naW5lLgorICAgICAqIEBpbnRlcm5hbCAocHJpdmF0ZSkKICAg
ICAgKi8KICAgICBVbmhhbmRsZWRFbmdpbmUgICAgICpmVW5oYW5kbGVkQnJlYWtFbmdpbmU7CiAK
ICAgICAvKioKICAgICAgKiBDb3VudGVyIGZvciB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZW5j
b3VudGVyZWQgd2l0aCB0aGUgImRpY3Rpb25hcnkiCiAgICAgICogICBmbGFnIHNldC4KLSAgICAg
KiBAaW50ZXJuYWwKKyAgICAgKiBAaW50ZXJuYWwgKHByaXZhdGUpCiAgICAgICovCiAgICAgdWlu
dDMyX3QgICAgICAgICAgICBmRGljdGlvbmFyeUNoYXJDb3VudDsKIApAQCAtMTUwLDcgKzE1MCw3
IEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yIC8qVV9GSU5BTCov
IDogcHVibGljIEJyZWFrSXRlcmF0b3IgewogICAgICAqCiAgICAgICogICAgICAgICAgICAgVGhl
IGJyZWFrIGl0ZXJhdG9yIGFkb3B0cyB0aGUgbWVtb3J5LCBhbmQgd2lsbAogICAgICAqICAgICAg
ICAgICAgIGZyZWUgaXQgd2hlbiBkb25lLgotICAgICAqIEBpbnRlcm5hbAorICAgICAqIEBpbnRl
cm5hbCAocHJpdmF0ZSkKICAgICAgKi8KICAgICBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yKFJCQklE
YXRhSGVhZGVyKiBkYXRhLCBVRXJyb3JDb2RlICZzdGF0dXMpOwogCkBAIC0yNjAsNyArMjYwLDcg
QEAgY2xhc3MgVV9DT01NT05fQVBJIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IgLypVX0ZJTkFMKi8g
OiBwdWJsaWMgQnJlYWtJdGVyYXRvciB7CiAgICAgICogQHJldHVybiBUUlVFIGlmIGJvdGggQnJl
YWtJdGVyYXRvcnMgYXJlIG5vdCBzYW1lLgogICAgICAqICBAc3RhYmxlIElDVSAyLjAKICAgICAg
Ki8KLSAgICBVQm9vbCBvcGVyYXRvciE9KGNvbnN0IEJyZWFrSXRlcmF0b3ImIHRoYXQpIGNvbnN0
OworICAgIGlubGluZSBVQm9vbCBvcGVyYXRvciE9KGNvbnN0IEJyZWFrSXRlcmF0b3ImIHRoYXQp
IGNvbnN0OwogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIFJ1
bGVCYXNlZEJyZWFrSXRlcmF0b3Igd2l0aCB0aGUgc2FtZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri9pY3UvdW5pY29kZS9yYm5mLmggYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3JibmYuaAppbmRl
eCBhYjVhMDE5ZGUzMGQyMzNiOTk0ODllYTQ2MzAzY2ZkMjhlZGM2M2Q4Li5kNmJhNTIzYjc4MDVm
OTFiNTgxNGYxMzg4Mjg1YWQzNTgxOGU3ZjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL2ljdS91
bmljb2RlL3JibmYuaAorKysgYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3JibmYuaApAQCAtMzEz
LDcgKzMxMyw2IEBAIGVudW0gVVJCTkZSdWxlU2V0VGFnIHsKICAqICAgICA8dGQ+VGhlIHJ1bGUg
Zm9yIGFuIElFRUUgNzU0IE5hTiAobm90IGEgbnVtYmVyKS48L3RkPgogICogICA8L3RyPgogICog
ICA8dHI+Ci0gKiAgIDx0cj4KICAqICAgICA8dGQ+PGVtPm5vdGhpbmc8L2VtPjwvdGQ+CiAgKiAg
ICAgPHRkPklmIHRoZSBydWxlJ3MgcnVsZSBkZXNjcmlwdG9yIGlzIGxlZnQgb3V0LCB0aGUgYmFz
ZSB2YWx1ZSBpcyBvbmUgcGx1cyB0aGUKICAqICAgICBwcmVjZWRpbmcgcnVsZSdzIGJhc2UgdmFs
dWUgKG9yIHplcm8gaWYgdGhpcyBpcyB0aGUgZmlyc3QgcnVsZSBpbiB0aGUgbGlzdCkgaW4gYSBu
b3JtYWwKQEAgLTEwMTMsMTQgKzEwMTIsMTQgQEAgY2xhc3MgVV9JMThOX0FQSSBSdWxlQmFzZWRO
dW1iZXJGb3JtYXQgOiBwdWJsaWMgTnVtYmVyRm9ybWF0IHsKICAgICAvKioKICAgICAgKiBHZXQg
dGhlIHJvdW5kaW5nIG1vZGUuCiAgICAgICogQHJldHVybiBBIHJvdW5kaW5nIG1vZGUKLSAgICAg
KiBAZHJhZnQgSUNVIDYwCisgICAgICogQHN0YWJsZSBJQ1UgNjAKICAgICAgKi8KICAgICB2aXJ0
dWFsIEVSb3VuZGluZ01vZGUgZ2V0Um91bmRpbmdNb2RlKHZvaWQpIGNvbnN0OwogCiAgICAgLyoq
CiAgICAgICogU2V0IHRoZSByb3VuZGluZyBtb2RlLgogICAgICAqIEBwYXJhbSByb3VuZGluZ01v
ZGUgQSByb3VuZGluZyBtb2RlCi0gICAgICogQGRyYWZ0IElDVSA2MAorICAgICAqIEBzdGFibGUg
SUNVIDYwCiAgICAgICovCiAgICAgdmlydHVhbCB2b2lkIHNldFJvdW5kaW5nTW9kZShFUm91bmRp
bmdNb2RlIHJvdW5kaW5nTW9kZSk7CiAKQEAgLTEwOTUsNyArMTA5NCw3IEBAIGNsYXNzIFVfSTE4
Tl9BUEkgUnVsZUJhc2VkTnVtYmVyRm9ybWF0IDogcHVibGljIE51bWJlckZvcm1hdCB7CiAgICAg
dm9pZCBmb3JtYXQoZG91YmxlIG51bWJlciwgTkZSdWxlU2V0JiBycywgVW5pY29kZVN0cmluZyYg
dG9BcHBlbmRUbywgVUVycm9yQ29kZSYgc3RhdHVzKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBO
RlJ1bGVTZXQgKipydWxlU2V0czsKKyAgICBORlJ1bGVTZXQgKipmUnVsZVNldHM7CiAgICAgVW5p
Y29kZVN0cmluZyogcnVsZVNldERlc2NyaXB0aW9uczsKICAgICBpbnQzMl90IG51bVJ1bGVTZXRz
OwogICAgIE5GUnVsZVNldCAqZGVmYXVsdFJ1bGVTZXQ7CkBAIC0xMTA0LDcgKzExMDMsNyBAQCBj
bGFzcyBVX0kxOE5fQVBJIFJ1bGVCYXNlZE51bWJlckZvcm1hdCA6IHB1YmxpYyBOdW1iZXJGb3Jt
YXQgewogICAgIERlY2ltYWxGb3JtYXRTeW1ib2xzKiBkZWNpbWFsRm9ybWF0U3ltYm9sczsKICAg
ICBORlJ1bGUgKmRlZmF1bHRJbmZpbml0eVJ1bGU7CiAgICAgTkZSdWxlICpkZWZhdWx0TmFOUnVs
ZTsKLSAgICBFUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZTsKKyAgICBFUm91bmRpbmdNb2RlIGZS
b3VuZGluZ01vZGU7CiAgICAgVUJvb2wgbGVuaWVudDsKICAgICBVbmljb2RlU3RyaW5nKiBsZW5p
ZW50UGFyc2VSdWxlczsKICAgICBMb2NhbGl6YXRpb25JbmZvKiBsb2NhbGl6YXRpb25zOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi9pY3UvdW5pY29kZS9yZWdleC5oIGIvU291cmNlL1dURi9pY3Uv
dW5pY29kZS9yZWdleC5oCmluZGV4IDY4MjlmN2JhNDcyNTVmZjY1ZGVkZTg2Mjg2NzE3NmQyNWQ0
MWRhZDIuLjA3YzU5MjdhZmJmMDNlNzk1Yzk1YTRkMzU1NDBjOWNmMDVmNGYyMWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvcmVnZXguaAorKysgYi9Tb3VyY2UvV1RGL2ljdS91
bmljb2RlL3JlZ2V4LmgKQEAgLTI0LDI0ICsyNCwyMiBAQAogICogXGZpbGUKICAqIFxicmllZiAg
QysrIEFQSTogIFJlZ3VsYXIgRXhwcmVzc2lvbnMKICAqCi0gKiA8aDI+UmVndWxhciBFeHByZXNz
aW9uIEFQSTwvaDI+Ci0gKgotICogPHA+VGhlIElDVSBBUEkgZm9yIHByb2Nlc3NpbmcgcmVndWxh
ciBleHByZXNzaW9ucyBjb25zaXN0cyBvZiB0d28gY2xhc3NlcywKLSAqICA8Y29kZT5SZWdleFBh
dHRlcm48L2NvZGU+IGFuZCA8Y29kZT5SZWdleE1hdGNoZXI8L2NvZGU+LgotICogIDxjb2RlPlJl
Z2V4UGF0dGVybjwvY29kZT4gb2JqZWN0cyByZXByZXNlbnQgYSBwcmUtcHJvY2Vzc2VkLCBvciBj
b21waWxlZAorICogVGhlIElDVSBBUEkgZm9yIHByb2Nlc3NpbmcgcmVndWxhciBleHByZXNzaW9u
cyBjb25zaXN0cyBvZiB0d28gY2xhc3NlcywKKyAqICBgUmVnZXhQYXR0ZXJuYCBhbmQgYFJlZ2V4
TWF0Y2hlcmAuCisgKiAgYFJlZ2V4UGF0dGVybmAgb2JqZWN0cyByZXByZXNlbnQgYSBwcmUtcHJv
Y2Vzc2VkLCBvciBjb21waWxlZAogICogIHJlZ3VsYXIgZXhwcmVzc2lvbi4gIFRoZXkgYXJlIGNy
ZWF0ZWQgZnJvbSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIHN0cmluZywKLSAqICBhbmQg
Y2FuIGJlIHVzZWQgdG8gY3JlYXRlIDxjb2RlPlJlZ2V4TWF0Y2hlcjwvY29kZT4gb2JqZWN0cyBm
b3IgdGhlIHBhdHRlcm4uPC9wPgorICogIGFuZCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYFJlZ2V4
TWF0Y2hlcmAgb2JqZWN0cyBmb3IgdGhlIHBhdHRlcm4uCiAgKgotICogPHA+Q2xhc3MgPGNvZGU+
UmVnZXhNYXRjaGVyPC9jb2RlPiBidW5kbGVzIHRvZ2V0aGVyIGEgcmVndWxhciBleHByZXNzaW9u
CisgKiBDbGFzcyBgUmVnZXhNYXRjaGVyYCBidW5kbGVzIHRvZ2V0aGVyIGEgcmVndWxhciBleHBy
ZXNzaW9uCiAgKiAgcGF0dGVybiBhbmQgYSB0YXJnZXQgc3RyaW5nIHRvIHdoaWNoIHRoZSBzZWFy
Y2ggcGF0dGVybiB3aWxsIGJlIGFwcGxpZWQuCi0gKiAgPGNvZGU+UmVnZXhNYXRjaGVyPC9jb2Rl
PiBpbmNsdWRlcyBBUEkgZm9yIGRvaW5nIHBsYWluIGZpbmQgb3Igc2VhcmNoCisgKiAgYFJlZ2V4
TWF0Y2hlcmAgaW5jbHVkZXMgQVBJIGZvciBkb2luZyBwbGFpbiBmaW5kIG9yIHNlYXJjaAogICog
IG9wZXJhdGlvbnMsIGZvciBzZWFyY2ggYW5kIHJlcGxhY2Ugb3BlcmF0aW9ucywgYW5kIGZvciBv
YnRhaW5pbmcgZGV0YWlsZWQKLSAqICBpbmZvcm1hdGlvbiBhYm91dCBib3VuZHMgb2YgYSBtYXRj
aC4gPC9wPgorICogIGluZm9ybWF0aW9uIGFib3V0IGJvdW5kcyBvZiBhIG1hdGNoLgogICoKLSAq
IDxwPk5vdGUgdGhhdCBieSBjb25zdHJ1Y3RpbmcgPGNvZGU+UmVnZXhNYXRjaGVyPC9jb2RlPiBv
YmplY3RzIGRpcmVjdGx5IGZyb20gcmVndWxhcgorICogTm90ZSB0aGF0IGJ5IGNvbnN0cnVjdGlu
ZyBgUmVnZXhNYXRjaGVyYCBvYmplY3RzIGRpcmVjdGx5IGZyb20gcmVndWxhcgogICogZXhwcmVz
c2lvbiBwYXR0ZXJuIHN0cmluZ3MgYXBwbGljYXRpb24gY29kZSBjYW4gYmUgc2ltcGxpZmllZCBh
bmQgdGhlIGV4cGxpY2l0Ci0gKiBuZWVkIGZvciA8Y29kZT5SZWdleFBhdHRlcm48L2NvZGU+IG9i
amVjdHMgY2FuIHVzdWFsbHkgYmUgZWxpbWluYXRlZC4KLSAqIDwvcD4KKyAqIG5lZWQgZm9yIGBS
ZWdleFBhdHRlcm5gIG9iamVjdHMgY2FuIHVzdWFsbHkgYmUgZWxpbWluYXRlZC4KKyAqCiAgKi8K
IAogI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCkBAIC03NCwxMyArNzIsMTMgQEAgY2xhc3Mg
IFVWZWN0b3I2NDsKIAogCiAvKioKLSAgKiBDbGFzcyA8Y29kZT5SZWdleFBhdHRlcm48L2NvZGU+
IHJlcHJlc2VudHMgYSBjb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb24uICBJdCBpbmNsdWRlcwor
ICAqIENsYXNzIGBSZWdleFBhdHRlcm5gIHJlcHJlc2VudHMgYSBjb21waWxlZCByZWd1bGFyIGV4
cHJlc3Npb24uICBJdCBpbmNsdWRlcwogICAqIGZhY3RvcnkgbWV0aG9kcyBmb3IgY3JlYXRpbmcg
YSBSZWdleFBhdHRlcm4gb2JqZWN0IGZyb20gdGhlIHNvdXJjZSAoc3RyaW5nKSBmb3JtCiAgICog
b2YgYSByZWd1bGFyIGV4cHJlc3Npb24sIG1ldGhvZHMgZm9yIGNyZWF0aW5nIFJlZ2V4TWF0Y2hl
cnMgdGhhdCBhbGxvdyB0aGUgcGF0dGVybgogICAqIHRvIGJlIGFwcGxpZWQgdG8gaW5wdXQgdGV4
dCwgYW5kIGEgZmV3IGNvbnZlbmllbmNlIG1ldGhvZHMgZm9yIHNpbXBsZSBjb21tb24KICAgKiB1
c2VzIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCiAgICoKLSAgKiA8cD5DbGFzcyBSZWdleFBhdHRl
cm4gaXMgbm90IGludGVuZGVkIHRvIGJlIHN1YmNsYXNzZWQuPC9wPgorICAqIENsYXNzIFJlZ2V4
UGF0dGVybiBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc3ViY2xhc3NlZC4KICAgKgogICAqIEBzdGFi
bGUgSUNVIDIuNAogICAqLwpAQCAtOTAsNyArODgsNyBAQCBjbGFzcyBVX0kxOE5fQVBJIFJlZ2V4
UGF0dGVybiBVX0ZJTkFMIDogcHVibGljIFVPYmplY3QgewogICAgIC8qKgogICAgICAqIGRlZmF1
bHQgY29uc3RydWN0b3IuICBDcmVhdGUgYSBSZWdleFBhdHRlcm4gb2JqZWN0IHRoYXQgcmVmZXJz
IHRvIG5vIGFjdHVhbAogICAgICAqICAgcGF0dGVybi4gIE5vdCBub3JtYWxseSBuZWVkZWQ7IFJl
Z2V4UGF0dGVybiBvYmplY3RzIGFyZSB1c3VhbGx5Ci0gICAgICogICBjcmVhdGVkIHVzaW5nIHRo
ZSBmYWN0b3J5IG1ldGhvZCA8Y29kZT5jb21waWxlKCk8L2NvZGU+LgorICAgICAqICAgY3JlYXRl
ZCB1c2luZyB0aGUgZmFjdG9yeSBtZXRob2QgYGNvbXBpbGUoKWAuCiAgICAgICoKICAgICAgKiBA
c3RhYmxlIElDVSAyLjQKICAgICAgKi8KQEAgLTExMyw3ICsxMTEsNyBAQCBjbGFzcyBVX0kxOE5f
QVBJIFJlZ2V4UGF0dGVybiBVX0ZJTkFMIDogcHVibGljIFVPYmplY3QgewogCiAgICAgLyoqCiAg
ICAgICogQ29tcGFyaXNvbiBvcGVyYXRvci4gIFR3byBSZWdleFBhdHRlcm4gb2JqZWN0cyBhcmUg
Y29uc2lkZXJlZCBlcXVhbCBpZiB0aGV5Ci0gICAgICogd2VyZSBjb25zdHJ1Y3RlZCBmcm9tIGlk
ZW50aWNhbCBzb3VyY2UgcGF0dGVybnMgdXNpbmcgdGhlIHNhbWUgbWF0Y2ggZmxhZworICAgICAq
IHdlcmUgY29uc3RydWN0ZWQgZnJvbSBpZGVudGljYWwgc291cmNlIHBhdHRlcm5zIHVzaW5nIHRo
ZSBzYW1lICNVUmVnZXhwRmxhZwogICAgICAqIHNldHRpbmdzLgogICAgICAqIEBwYXJhbSB0aGF0
IGEgUmVnZXhQYXR0ZXJuIG9iamVjdCB0byBjb21wYXJlIHdpdGggInRoaXMiLgogICAgICAqIEBy
ZXR1cm4gVFJVRSBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudC4KQEAgLTEyMyw3ICsxMjEs
NyBAQCBjbGFzcyBVX0kxOE5fQVBJIFJlZ2V4UGF0dGVybiBVX0ZJTkFMIDogcHVibGljIFVPYmpl
Y3QgewogCiAgICAgLyoqCiAgICAgICogQ29tcGFyaXNvbiBvcGVyYXRvci4gIFR3byBSZWdleFBh
dHRlcm4gb2JqZWN0cyBhcmUgY29uc2lkZXJlZCBlcXVhbCBpZiB0aGV5Ci0gICAgICogd2VyZSBj
b25zdHJ1Y3RlZCBmcm9tIGlkZW50aWNhbCBzb3VyY2UgcGF0dGVybnMgdXNpbmcgdGhlIHNhbWUg
bWF0Y2ggZmxhZworICAgICAqIHdlcmUgY29uc3RydWN0ZWQgZnJvbSBpZGVudGljYWwgc291cmNl
IHBhdHRlcm5zIHVzaW5nIHRoZSBzYW1lICNVUmVnZXhwRmxhZwogICAgICAqIHNldHRpbmdzLgog
ICAgICAqIEBwYXJhbSB0aGF0IGEgUmVnZXhQYXR0ZXJuIG9iamVjdCB0byBjb21wYXJlIHdpdGgg
InRoaXMiLgogICAgICAqIEByZXR1cm4gVFJVRSBpZiB0aGUgb2JqZWN0cyBhcmUgZGlmZmVyZW50
LgpAQCAtMTUzLDE2ICsxNTEsMTYgQEAgY2xhc3MgVV9JMThOX0FQSSBSZWdleFBhdHRlcm4gVV9G
SU5BTCA6IHB1YmxpYyBVT2JqZWN0IHsKICAgICAqIG9iamVjdC4gIFRoZXNlIGNvbXBpbGUgbWV0
aG9kcywgcmF0aGVyIHRoYW4gdGhlIGNvbnN0cnVjdG9ycywgYXJlIHRoZSB1c3VhbAogICAgICog
d2F5IHRoYXQgUmVnZXhQYXR0ZXJuIG9iamVjdHMgYXJlIGNyZWF0ZWQuCiAgICAgKgotICAgICog
PHA+Tm90ZSB0aGF0IFJlZ2V4UGF0dGVybiBvYmplY3RzIG11c3Qgbm90IGJlIGRlbGV0ZWQgd2hp
bGUgUmVnZXhNYXRjaGVyCisgICAgKiBOb3RlIHRoYXQgUmVnZXhQYXR0ZXJuIG9iamVjdHMgbXVz
dCBub3QgYmUgZGVsZXRlZCB3aGlsZSBSZWdleE1hdGNoZXIKICAgICAqIG9iamVjdHMgY3JlYXRl
ZCBmcm9tIHRoZSBwYXR0ZXJuIGFyZSBhY3RpdmUuICBSZWdleE1hdGNoZXJzIGtlZXAgYSBwb2lu
dGVyCiAgICAgKiBiYWNrIHRvIHRoZWlyIHBhdHRlcm4sIHNvIHByZW1hdHVyZSBkZWxldGlvbiBv
ZiB0aGUgcGF0dGVybiBpcyBhCi0gICAgKiBjYXRhc3Ryb3BoaWMgZXJyb3IuPC9wPgorICAgICog
Y2F0YXN0cm9waGljIGVycm9yLgogICAgICoKLSAgICAqIDxwPkFsbCBwYXR0ZXJuIG1hdGNoIG1v
ZGUgZmxhZ3MgYXJlIHNldCB0byB0aGVpciBkZWZhdWx0IHZhbHVlcy48L3A+CisgICAgKiBBbGwg
I1VSZWdleHBGbGFnIHBhdHRlcm4gbWF0Y2ggbW9kZSBmbGFncyBhcmUgc2V0IHRvIHRoZWlyIGRl
ZmF1bHQgdmFsdWVzLgogICAgICoKLSAgICAqIDxwPk5vdGUgdGhhdCBpdCBpcyBvZnRlbiBtb3Jl
IGNvbnZlbmllbnQgdG8gY29uc3RydWN0IGEgUmVnZXhNYXRjaGVyIGRpcmVjdGx5CisgICAgKiBO
b3RlIHRoYXQgaXQgaXMgb2Z0ZW4gbW9yZSBjb252ZW5pZW50IHRvIGNvbnN0cnVjdCBhIFJlZ2V4
TWF0Y2hlciBkaXJlY3RseQogICAgICogICAgZnJvbSBhIHBhdHRlcm4gc3RyaW5nIHJhdGhlciB0
aGFuIHNlcGFyYXRlbHkgY29tcGlsaW5nIHRoZSBwYXR0ZXJuIGFuZAotICAgICogICAgdGhlbiBj
cmVhdGluZyBhIFJlZ2V4TWF0Y2hlciBvYmplY3QgZnJvbSB0aGUgcGF0dGVybi48L3A+CisgICAg
KiAgICB0aGVuIGNyZWF0aW5nIGEgUmVnZXhNYXRjaGVyIG9iamVjdCBmcm9tIHRoZSBwYXR0ZXJu
LgogICAgICoKICAgICAqIEBwYXJhbSByZWdleCBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIGJl
IGNvbXBpbGVkLgogICAgICogQHBhcmFtIHBlICAgIFJlY2VpdmVzIHRoZSBwb3NpdGlvbiAobGlu
ZSBhbmQgY29sdW1uIG51YmVycykgb2YgYW55IGVycm9yCkBAIC0xODEsMTYgKzE3OSwxNiBAQCBj
bGFzcyBVX0kxOE5fQVBJIFJlZ2V4UGF0dGVybiBVX0ZJTkFMIDogcHVibGljIFVPYmplY3Qgewog
ICAgICogb2JqZWN0LiAgVGhlc2UgY29tcGlsZSBtZXRob2RzLCByYXRoZXIgdGhhbiB0aGUgY29u
c3RydWN0b3JzLCBhcmUgdGhlIHVzdWFsCiAgICAgKiB3YXkgdGhhdCBSZWdleFBhdHRlcm4gb2Jq
ZWN0cyBhcmUgY3JlYXRlZC4KICAgICAqCi0gICAgKiA8cD5Ob3RlIHRoYXQgUmVnZXhQYXR0ZXJu
IG9iamVjdHMgbXVzdCBub3QgYmUgZGVsZXRlZCB3aGlsZSBSZWdleE1hdGNoZXIKKyAgICAqIE5v
dGUgdGhhdCBSZWdleFBhdHRlcm4gb2JqZWN0cyBtdXN0IG5vdCBiZSBkZWxldGVkIHdoaWxlIFJl
Z2V4TWF0Y2hlcgogICAgICogb2JqZWN0cyBjcmVhdGVkIGZyb20gdGhlIHBhdHRlcm4gYXJlIGFj
dGl2ZS4gIFJlZ2V4TWF0Y2hlcnMga2VlcCBhIHBvaW50ZXIKICAgICAqIGJhY2sgdG8gdGhlaXIg
cGF0dGVybiwgc28gcHJlbWF0dXJlIGRlbGV0aW9uIG9mIHRoZSBwYXR0ZXJuIGlzIGEKLSAgICAq
IGNhdGFzdHJvcGhpYyBlcnJvci48L3A+CisgICAgKiBjYXRhc3Ryb3BoaWMgZXJyb3IuCiAgICAg
KgotICAgICogPHA+QWxsIHBhdHRlcm4gbWF0Y2ggbW9kZSBmbGFncyBhcmUgc2V0IHRvIHRoZWly
IGRlZmF1bHQgdmFsdWVzLjwvcD4KKyAgICAqIEFsbCAjVVJlZ2V4cEZsYWcgcGF0dGVybiBtYXRj
aCBtb2RlIGZsYWdzIGFyZSBzZXQgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCiAgICAgKgotICAg
ICogPHA+Tm90ZSB0aGF0IGl0IGlzIG9mdGVuIG1vcmUgY29udmVuaWVudCB0byBjb25zdHJ1Y3Qg
YSBSZWdleE1hdGNoZXIgZGlyZWN0bHkKKyAgICAqIE5vdGUgdGhhdCBpdCBpcyBvZnRlbiBtb3Jl
IGNvbnZlbmllbnQgdG8gY29uc3RydWN0IGEgUmVnZXhNYXRjaGVyIGRpcmVjdGx5CiAgICAgKiAg
ICBmcm9tIGEgcGF0dGVybiBzdHJpbmcgcmF0aGVyIHRoYW4gc2VwYXJhdGVseSBjb21waWxpbmcg
dGhlIHBhdHRlcm4gYW5kCi0gICAgKiAgICB0aGVuIGNyZWF0aW5nIGEgUmVnZXhNYXRjaGVyIG9i
amVjdCBmcm9tIHRoZSBwYXR0ZXJuLjwvcD4KKyAgICAqICAgIHRoZW4gY3JlYXRpbmcgYSBSZWdl
eE1hdGNoZXIgb2JqZWN0IGZyb20gdGhlIHBhdHRlcm4uCiAgICAgKgogICAgICogQHBhcmFtIHJl
Z2V4IFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gYmUgY29tcGlsZWQuIE5vdGUsIHRoZSB0ZXh0
IHJlZmVycmVkCiAgICAgKiAgICAgICAgICAgICAgdG8gYnkgdGhpcyBVVGV4dCBtdXN0IG5vdCBi
ZSBkZWxldGVkIGR1cmluZyB0aGUgbGlmZXRpbWUgb2YgdGhlCkBAIC0yMDgsMjEgKzIwNiwyMSBA
QCBjbGFzcyBVX0kxOE5fQVBJIFJlZ2V4UGF0dGVybiBVX0ZJTkFMIDogcHVibGljIFVPYmplY3Qg
ewogCiAgICAvKioKICAgICAqIENvbXBpbGVzIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gaW4gc3Ry
aW5nIGZvcm0gaW50byBhIFJlZ2V4UGF0dGVybgotICAgICogb2JqZWN0IHVzaW5nIHRoZSBzcGVj
aWZpZWQgbWF0Y2ggbW9kZSBmbGFncy4gIFRoZXNlIGNvbXBpbGUgbWV0aG9kcywKKyAgICAqIG9i
amVjdCB1c2luZyB0aGUgc3BlY2lmaWVkICNVUmVnZXhwRmxhZyBtYXRjaCBtb2RlIGZsYWdzLiAg
VGhlc2UgY29tcGlsZSBtZXRob2RzLAogICAgICogcmF0aGVyIHRoYW4gdGhlIGNvbnN0cnVjdG9y
cywgYXJlIHRoZSB1c3VhbCB3YXkgdGhhdCBSZWdleFBhdHRlcm4gb2JqZWN0cwogICAgICogYXJl
IGNyZWF0ZWQuCiAgICAgKgotICAgICogPHA+Tm90ZSB0aGF0IFJlZ2V4UGF0dGVybiBvYmplY3Rz
IG11c3Qgbm90IGJlIGRlbGV0ZWQgd2hpbGUgUmVnZXhNYXRjaGVyCisgICAgKiBOb3RlIHRoYXQg
UmVnZXhQYXR0ZXJuIG9iamVjdHMgbXVzdCBub3QgYmUgZGVsZXRlZCB3aGlsZSBSZWdleE1hdGNo
ZXIKICAgICAqIG9iamVjdHMgY3JlYXRlZCBmcm9tIHRoZSBwYXR0ZXJuIGFyZSBhY3RpdmUuICBS
ZWdleE1hdGNoZXJzIGtlZXAgYSBwb2ludGVyCiAgICAgKiBiYWNrIHRvIHRoZWlyIHBhdHRlcm4s
IHNvIHByZW1hdHVyZSBkZWxldGlvbiBvZiB0aGUgcGF0dGVybiBpcyBhCi0gICAgKiBjYXRhc3Ry
b3BoaWMgZXJyb3IuPC9wPgorICAgICogY2F0YXN0cm9waGljIGVycm9yLgogICAgICoKLSAgICAq
IDxwPk5vdGUgdGhhdCBpdCBpcyBvZnRlbiBtb3JlIGNvbnZlbmllbnQgdG8gY29uc3RydWN0IGEg
UmVnZXhNYXRjaGVyIGRpcmVjdGx5CisgICAgKiBOb3RlIHRoYXQgaXQgaXMgb2Z0ZW4gbW9yZSBj
b252ZW5pZW50IHRvIGNvbnN0cnVjdCBhIFJlZ2V4TWF0Y2hlciBkaXJlY3RseQogICAgICogICAg
ZnJvbSBhIHBhdHRlcm4gc3RyaW5nIGluc3RlYWQgb2YgdGhhbiBzZXBhcmF0ZWx5IGNvbXBpbGlu
ZyB0aGUgcGF0dGVybiBhbmQKLSAgICAqICAgIHRoZW4gY3JlYXRpbmcgYSBSZWdleE1hdGNoZXIg
b2JqZWN0IGZyb20gdGhlIHBhdHRlcm4uPC9wPgorICAgICogICAgdGhlbiBjcmVhdGluZyBhIFJl
Z2V4TWF0Y2hlciBvYmplY3QgZnJvbSB0aGUgcGF0dGVybi4KICAgICAqCiAgICAgKiBAcGFyYW0g
cmVnZXggVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBiZSBjb21waWxlZC4KLSAgICAqIEBwYXJh
bSBmbGFncyBUaGUgbWF0Y2ggbW9kZSBmbGFncyB0byBiZSB1c2VkLgorICAgICogQHBhcmFtIGZs
YWdzIFRoZSAjVVJlZ2V4cEZsYWcgbWF0Y2ggbW9kZSBmbGFncyB0byBiZSB1c2VkLCBlLmcuICNV
UkVHRVhfQ0FTRV9JTlNFTlNJVElWRS4KICAgICAqIEBwYXJhbSBwZSAgICBSZWNlaXZlcyB0aGUg
cG9zaXRpb24gKGxpbmUgYW5kIGNvbHVtbiBudW1iZXJzKSBvZiBhbnkgZXJyb3IKICAgICAqICAg
ICAgICAgICAgICB3aXRoaW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi4pCiAgICAgKiBAcGFyYW0g
c3RhdHVzICAgQSByZWZlcmVuY2UgdG8gYSBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9y
cy4KQEAgLTIzNywyMyArMjM1LDIzIEBAIGNsYXNzIFVfSTE4Tl9BUEkgUmVnZXhQYXR0ZXJuIFVf
RklOQUwgOiBwdWJsaWMgVU9iamVjdCB7CiAKICAgIC8qKgogICAgICogQ29tcGlsZXMgdGhlIHJl
Z3VsYXIgZXhwcmVzc2lvbiBpbiBzdHJpbmcgZm9ybSBpbnRvIGEgUmVnZXhQYXR0ZXJuCi0gICAg
KiBvYmplY3QgdXNpbmcgdGhlIHNwZWNpZmllZCBtYXRjaCBtb2RlIGZsYWdzLiAgVGhlc2UgY29t
cGlsZSBtZXRob2RzLAorICAgICogb2JqZWN0IHVzaW5nIHRoZSBzcGVjaWZpZWQgI1VSZWdleHBG
bGFnIG1hdGNoIG1vZGUgZmxhZ3MuICBUaGVzZSBjb21waWxlIG1ldGhvZHMsCiAgICAgKiByYXRo
ZXIgdGhhbiB0aGUgY29uc3RydWN0b3JzLCBhcmUgdGhlIHVzdWFsIHdheSB0aGF0IFJlZ2V4UGF0
dGVybiBvYmplY3RzCiAgICAgKiBhcmUgY3JlYXRlZC4KICAgICAqCi0gICAgKiA8cD5Ob3RlIHRo
YXQgUmVnZXhQYXR0ZXJuIG9iamVjdHMgbXVzdCBub3QgYmUgZGVsZXRlZCB3aGlsZSBSZWdleE1h
dGNoZXIKKyAgICAqIE5vdGUgdGhhdCBSZWdleFBhdHRlcm4gb2JqZWN0cyBtdXN0IG5vdCBiZSBk
ZWxldGVkIHdoaWxlIFJlZ2V4TWF0Y2hlcgogICAgICogb2JqZWN0cyBjcmVhdGVkIGZyb20gdGhl
IHBhdHRlcm4gYXJlIGFjdGl2ZS4gIFJlZ2V4TWF0Y2hlcnMga2VlcCBhIHBvaW50ZXIKICAgICAq
IGJhY2sgdG8gdGhlaXIgcGF0dGVybiwgc28gcHJlbWF0dXJlIGRlbGV0aW9uIG9mIHRoZSBwYXR0
ZXJuIGlzIGEKLSAgICAqIGNhdGFzdHJvcGhpYyBlcnJvci48L3A+CisgICAgKiBjYXRhc3Ryb3Bo
aWMgZXJyb3IuCiAgICAgKgotICAgICogPHA+Tm90ZSB0aGF0IGl0IGlzIG9mdGVuIG1vcmUgY29u
dmVuaWVudCB0byBjb25zdHJ1Y3QgYSBSZWdleE1hdGNoZXIgZGlyZWN0bHkKKyAgICAqIE5vdGUg
dGhhdCBpdCBpcyBvZnRlbiBtb3JlIGNvbnZlbmllbnQgdG8gY29uc3RydWN0IGEgUmVnZXhNYXRj
aGVyIGRpcmVjdGx5CiAgICAgKiAgICBmcm9tIGEgcGF0dGVybiBzdHJpbmcgaW5zdGVhZCBvZiB0
aGFuIHNlcGFyYXRlbHkgY29tcGlsaW5nIHRoZSBwYXR0ZXJuIGFuZAotICAgICogICAgdGhlbiBj
cmVhdGluZyBhIFJlZ2V4TWF0Y2hlciBvYmplY3QgZnJvbSB0aGUgcGF0dGVybi48L3A+CisgICAg
KiAgICB0aGVuIGNyZWF0aW5nIGEgUmVnZXhNYXRjaGVyIG9iamVjdCBmcm9tIHRoZSBwYXR0ZXJu
LgogICAgICoKICAgICAqIEBwYXJhbSByZWdleCBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIGJl
IGNvbXBpbGVkLiBOb3RlLCB0aGUgdGV4dCByZWZlcnJlZAogICAgICogICAgICAgICAgICAgIHRv
IGJ5IHRoaXMgVVRleHQgbXVzdCBub3QgYmUgZGVsZXRlZCBkdXJpbmcgdGhlIGxpZmV0aW1lIG9m
IHRoZQogICAgICogICAgICAgICAgICAgIFJlZ2V4UGF0dGVybiBvYmplY3Qgb3IgYW55IFJlZ2V4
TWF0Y2hlciBvYmplY3QgY3JlYXRlZCBmcm9tIGl0LgotICAgICogQHBhcmFtIGZsYWdzIFRoZSBt
YXRjaCBtb2RlIGZsYWdzIHRvIGJlIHVzZWQuCisgICAgKiBAcGFyYW0gZmxhZ3MgVGhlICNVUmVn
ZXhwRmxhZyBtYXRjaCBtb2RlIGZsYWdzIHRvIGJlIHVzZWQsIGUuZy4gI1VSRUdFWF9DQVNFX0lO
U0VOU0lUSVZFLgogICAgICogQHBhcmFtIHBlICAgIFJlY2VpdmVzIHRoZSBwb3NpdGlvbiAobGlu
ZSBhbmQgY29sdW1uIG51bWJlcnMpIG9mIGFueSBlcnJvcgogICAgICogICAgICAgICAgICAgIHdp
dGhpbiB0aGUgcmVndWxhciBleHByZXNzaW9uLikKICAgICAqIEBwYXJhbSBzdGF0dXMgICBBIHJl
ZmVyZW5jZSB0byBhIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzLgpAQCAtMjY4LDIx
ICsyNjYsMjEgQEAgY2xhc3MgVV9JMThOX0FQSSBSZWdleFBhdHRlcm4gVV9GSU5BTCA6IHB1Ymxp
YyBVT2JqZWN0IHsKIAogICAgLyoqCiAgICAgKiBDb21waWxlcyB0aGUgcmVndWxhciBleHByZXNz
aW9uIGluIHN0cmluZyBmb3JtIGludG8gYSBSZWdleFBhdHRlcm4KLSAgICAqIG9iamVjdCB1c2lu
ZyB0aGUgc3BlY2lmaWVkIG1hdGNoIG1vZGUgZmxhZ3MuICBUaGVzZSBjb21waWxlIG1ldGhvZHMs
CisgICAgKiBvYmplY3QgdXNpbmcgdGhlIHNwZWNpZmllZCAjVVJlZ2V4cEZsYWcgbWF0Y2ggbW9k
ZSBmbGFncy4gIFRoZXNlIGNvbXBpbGUgbWV0aG9kcywKICAgICAqIHJhdGhlciB0aGFuIHRoZSBj
b25zdHJ1Y3RvcnMsIGFyZSB0aGUgdXN1YWwgd2F5IHRoYXQgUmVnZXhQYXR0ZXJuIG9iamVjdHMK
ICAgICAqIGFyZSBjcmVhdGVkLgogICAgICoKLSAgICAqIDxwPk5vdGUgdGhhdCBSZWdleFBhdHRl
cm4gb2JqZWN0cyBtdXN0IG5vdCBiZSBkZWxldGVkIHdoaWxlIFJlZ2V4TWF0Y2hlcgorICAgICog
Tm90ZSB0aGF0IFJlZ2V4UGF0dGVybiBvYmplY3RzIG11c3Qgbm90IGJlIGRlbGV0ZWQgd2hpbGUg
UmVnZXhNYXRjaGVyCiAgICAgKiBvYmplY3RzIGNyZWF0ZWQgZnJvbSB0aGUgcGF0dGVybiBhcmUg
YWN0aXZlLiAgUmVnZXhNYXRjaGVycyBrZWVwIGEgcG9pbnRlcgogICAgICogYmFjayB0byB0aGVp
ciBwYXR0ZXJuLCBzbyBwcmVtYXR1cmUgZGVsZXRpb24gb2YgdGhlIHBhdHRlcm4gaXMgYQotICAg
ICogY2F0YXN0cm9waGljIGVycm9yLjwvcD4KKyAgICAqIGNhdGFzdHJvcGhpYyBlcnJvci4KICAg
ICAqCi0gICAgKiA8cD5Ob3RlIHRoYXQgaXQgaXMgb2Z0ZW4gbW9yZSBjb252ZW5pZW50IHRvIGNv
bnN0cnVjdCBhIFJlZ2V4TWF0Y2hlciBkaXJlY3RseQorICAgICogTm90ZSB0aGF0IGl0IGlzIG9m
dGVuIG1vcmUgY29udmVuaWVudCB0byBjb25zdHJ1Y3QgYSBSZWdleE1hdGNoZXIgZGlyZWN0bHkK
ICAgICAqICAgIGZyb20gYSBwYXR0ZXJuIHN0cmluZyBpbnN0ZWFkIG9mIHRoYW4gc2VwYXJhdGVs
eSBjb21waWxpbmcgdGhlIHBhdHRlcm4gYW5kCi0gICAgKiAgICB0aGVuIGNyZWF0aW5nIGEgUmVn
ZXhNYXRjaGVyIG9iamVjdCBmcm9tIHRoZSBwYXR0ZXJuLjwvcD4KKyAgICAqICAgIHRoZW4gY3Jl
YXRpbmcgYSBSZWdleE1hdGNoZXIgb2JqZWN0IGZyb20gdGhlIHBhdHRlcm4uCiAgICAgKgogICAg
ICogQHBhcmFtIHJlZ2V4IFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gYmUgY29tcGlsZWQuCi0g
ICAgKiBAcGFyYW0gZmxhZ3MgVGhlIG1hdGNoIG1vZGUgZmxhZ3MgdG8gYmUgdXNlZC4KKyAgICAq
IEBwYXJhbSBmbGFncyBUaGUgI1VSZWdleHBGbGFnIG1hdGNoIG1vZGUgZmxhZ3MgdG8gYmUgdXNl
ZCwgZS5nLiAjVVJFR0VYX0NBU0VfSU5TRU5TSVRJVkUuCiAgICAgKiBAcGFyYW0gc3RhdHVzICAg
QSByZWZlcmVuY2UgdG8gYSBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycy4KICAgICAq
IEByZXR1cm4gICAgICBBIHJlZ2V4UGF0dGVybiBvYmplY3QgZm9yIHRoZSBjb21waWxlZCBwYXR0
ZXJuLgogICAgICoKQEAgLTI5NCwyMyArMjkyLDIzIEBAIGNsYXNzIFVfSTE4Tl9BUEkgUmVnZXhQ
YXR0ZXJuIFVfRklOQUwgOiBwdWJsaWMgVU9iamVjdCB7CiAKICAgIC8qKgogICAgICogQ29tcGls
ZXMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpbiBzdHJpbmcgZm9ybSBpbnRvIGEgUmVnZXhQYXR0
ZXJuCi0gICAgKiBvYmplY3QgdXNpbmcgdGhlIHNwZWNpZmllZCBtYXRjaCBtb2RlIGZsYWdzLiAg
VGhlc2UgY29tcGlsZSBtZXRob2RzLAorICAgICogb2JqZWN0IHVzaW5nIHRoZSBzcGVjaWZpZWQg
I1VSZWdleHBGbGFnIG1hdGNoIG1vZGUgZmxhZ3MuICBUaGVzZSBjb21waWxlIG1ldGhvZHMsCiAg
ICAgKiByYXRoZXIgdGhhbiB0aGUgY29uc3RydWN0b3JzLCBhcmUgdGhlIHVzdWFsIHdheSB0aGF0
IFJlZ2V4UGF0dGVybiBvYmplY3RzCiAgICAgKiBhcmUgY3JlYXRlZC4KICAgICAqCi0gICAgKiA8
cD5Ob3RlIHRoYXQgUmVnZXhQYXR0ZXJuIG9iamVjdHMgbXVzdCBub3QgYmUgZGVsZXRlZCB3aGls
ZSBSZWdleE1hdGNoZXIKKyAgICAqIE5vdGUgdGhhdCBSZWdleFBhdHRlcm4gb2JqZWN0cyBtdXN0
IG5vdCBiZSBkZWxldGVkIHdoaWxlIFJlZ2V4TWF0Y2hlcgogICAgICogb2JqZWN0cyBjcmVhdGVk
IGZyb20gdGhlIHBhdHRlcm4gYXJlIGFjdGl2ZS4gIFJlZ2V4TWF0Y2hlcnMga2VlcCBhIHBvaW50
ZXIKICAgICAqIGJhY2sgdG8gdGhlaXIgcGF0dGVybiwgc28gcHJlbWF0dXJlIGRlbGV0aW9uIG9m
IHRoZSBwYXR0ZXJuIGlzIGEKLSAgICAqIGNhdGFzdHJvcGhpYyBlcnJvci48L3A+CisgICAgKiBj
YXRhc3Ryb3BoaWMgZXJyb3IuCiAgICAgKgotICAgICogPHA+Tm90ZSB0aGF0IGl0IGlzIG9mdGVu
IG1vcmUgY29udmVuaWVudCB0byBjb25zdHJ1Y3QgYSBSZWdleE1hdGNoZXIgZGlyZWN0bHkKKyAg
ICAqIE5vdGUgdGhhdCBpdCBpcyBvZnRlbiBtb3JlIGNvbnZlbmllbnQgdG8gY29uc3RydWN0IGEg
UmVnZXhNYXRjaGVyIGRpcmVjdGx5CiAgICAgKiAgICBmcm9tIGEgcGF0dGVybiBzdHJpbmcgaW5z
dGVhZCBvZiB0aGFuIHNlcGFyYXRlbHkgY29tcGlsaW5nIHRoZSBwYXR0ZXJuIGFuZAotICAgICog
ICAgdGhlbiBjcmVhdGluZyBhIFJlZ2V4TWF0Y2hlciBvYmplY3QgZnJvbSB0aGUgcGF0dGVybi48
L3A+CisgICAgKiAgICB0aGVuIGNyZWF0aW5nIGEgUmVnZXhNYXRjaGVyIG9iamVjdCBmcm9tIHRo
ZSBwYXR0ZXJuLgogICAgICoKICAgICAqIEBwYXJhbSByZWdleCBUaGUgcmVndWxhciBleHByZXNz
aW9uIHRvIGJlIGNvbXBpbGVkLiBOb3RlLCB0aGUgdGV4dCByZWZlcnJlZAogICAgICogICAgICAg
ICAgICAgIHRvIGJ5IHRoaXMgVVRleHQgbXVzdCBub3QgYmUgZGVsZXRlZCBkdXJpbmcgdGhlIGxp
ZmV0aW1lIG9mIHRoZQogICAgICogICAgICAgICAgICAgIFJlZ2V4UGF0dGVybiBvYmplY3Qgb3Ig
YW55IFJlZ2V4TWF0Y2hlciBvYmplY3QgY3JlYXRlZCBmcm9tIGl0LgotICAgICogQHBhcmFtIGZs
YWdzIFRoZSBtYXRjaCBtb2RlIGZsYWdzIHRvIGJlIHVzZWQuCisgICAgKiBAcGFyYW0gZmxhZ3Mg
VGhlICNVUmVnZXhwRmxhZyBtYXRjaCBtb2RlIGZsYWdzIHRvIGJlIHVzZWQsIGUuZy4gI1VSRUdF
WF9DQVNFX0lOU0VOU0lUSVZFLgogICAgICogQHBhcmFtIHN0YXR1cyAgIEEgcmVmZXJlbmNlIHRv
IGEgVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMuCiAgICAgKiBAcmV0dXJuICAgICAg
QSByZWdleFBhdHRlcm4gb2JqZWN0IGZvciB0aGUgY29tcGlsZWQgcGF0dGVybi4KICAgICAqCkBA
IC0zMjEsOCArMzE5LDggQEAgY2xhc3MgVV9JMThOX0FQSSBSZWdleFBhdHRlcm4gVV9GSU5BTCA6
IHB1YmxpYyBVT2JqZWN0IHsKICAgICAgICAgVUVycm9yQ29kZSAgICAgICAgICAgJnN0YXR1cyk7
CiAKICAgIC8qKgotICAgICogR2V0IHRoZSBtYXRjaCBtb2RlIGZsYWdzIHRoYXQgd2VyZSB1c2Vk
IHdoZW4gY29tcGlsaW5nIHRoaXMgcGF0dGVybi4KLSAgICAqIEByZXR1cm4gIHRoZSBtYXRjaCBt
b2RlIGZsYWdzCisgICAgKiBHZXQgdGhlICNVUmVnZXhwRmxhZyBtYXRjaCBtb2RlIGZsYWdzIHRo
YXQgd2VyZSB1c2VkIHdoZW4gY29tcGlsaW5nIHRoaXMgcGF0dGVybi4KKyAgICAqIEByZXR1cm4g
IHRoZSAjVVJlZ2V4cEZsYWcgbWF0Y2ggbW9kZSBmbGFncwogICAgICogQHN0YWJsZSBJQ1UgMi40
CiAgICAgKi8KICAgICB2aXJ0dWFsIHVpbnQzMl90IGZsYWdzKCkgY29uc3Q7CkBAIC0zMzIsNyAr
MzMwLDcgQEAgY2xhc3MgVV9JMThOX0FQSSBSZWdleFBhdHRlcm4gVV9GSU5BTCA6IHB1YmxpYyBV
T2JqZWN0IHsKICAgICAqIFJlZ2V4TWF0Y2hlciBjYW4gdGhlbiBiZSB1c2VkIHRvIHBlcmZvcm0g
bWF0Y2gsIGZpbmQgb3IgcmVwbGFjZSBvcGVyYXRpb25zCiAgICAgKiBvbiB0aGUgaW5wdXQuICBO
b3RlIHRoYXQgYSBSZWdleFBhdHRlcm4gb2JqZWN0IG11c3Qgbm90IGJlIGRlbGV0ZWQgd2hpbGUK
ICAgICAqIFJlZ2V4TWF0Y2hlcnMgY3JlYXRlZCBmcm9tIGl0IHN0aWxsIGV4aXN0IGFuZCBtaWdo
dCBwb3NzaWJseSBiZSB1c2VkIGFnYWluLgotICAgICogPHA+CisgICAgKgogICAgICogVGhlIG1h
dGNoZXIgd2lsbCByZXRhaW4gYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIGlucHV0IHN0cmlu
ZywgYW5kIGFsbCByZWdleHAKICAgICAqIHBhdHRlcm4gbWF0Y2hpbmcgb3BlcmF0aW9ucyBoYXBw
ZW4gZGlyZWN0bHkgb24gdGhpcyBvcmlnaW5hbCBzdHJpbmcuICBJdCBpcwogICAgICogY3JpdGlj
YWwgdGhhdCB0aGUgc3RyaW5nIG5vdCBiZSBhbHRlcmVkIG9yIGRlbGV0ZWQgYmVmb3JlIHVzZSBi
eSB0aGUgcmVndWxhcgpAQCAtMzUyLDEyICszNTAsMTIgQEAgY2xhc3MgVV9JMThOX0FQSSBSZWdl
eFBhdHRlcm4gVV9GSU5BTCA6IHB1YmxpYyBVT2JqZWN0IHsKICAgICAgKiBDYXVzZSBhIGNvbXBp
bGF0aW9uIGVycm9yIGlmIGFuIGFwcGxpY2F0aW9uIGFjY2lkZW50YWxseSBhdHRlbXB0cyB0bwog
ICAgICAqICAgY3JlYXRlIGEgbWF0Y2hlciB3aXRoIGEgKGNoYXIxNl90ICopIHN0cmluZyBhcyBp
bnB1dCByYXRoZXIgdGhhbgogICAgICAqICAgYSBVbmljb2RlU3RyaW5nLiAgQXZvaWRzIGEgZGFu
Z2xpbmcgcmVmZXJlbmNlIHRvIGEgdGVtcG9yYXJ5IHN0cmluZy4KLSAgICAgKiA8cD4KKyAgICAg
KgogICAgICAqIFRvIGVmZmljaWVudGx5IHdvcmsgd2l0aCBjaGFyMTZfdCAqc3RyaW5ncywgd3Jh
cCB0aGUgZGF0YSBpbiBhIFVuaWNvZGVTdHJpbmcKICAgICAgKiB1c2luZyBvbmUgb2YgdGhlIGFs
aWFzaW5nIGNvbnN0cnVjdG9ycywgc3VjaCBhcwotICAgICAqIDxjb2RlPlVuaWNvZGVTdHJpbmco
VUJvb2wgaXNUZXJtaW5hdGVkLCBjb25zdCBjaGFyMTZfdCAqdGV4dCwgaW50MzJfdCB0ZXh0TGVu
Z3RoKTs8L2NvZGU+CisgICAgICogYFVuaWNvZGVTdHJpbmcoVUJvb2wgaXNUZXJtaW5hdGVkLCBj
b25zdCBjaGFyMTZfdCAqdGV4dCwgaW50MzJfdCB0ZXh0TGVuZ3RoKTtgCiAgICAgICogb3IgaW4g
YSBVVGV4dCwgdXNpbmcKLSAgICAgKiA8Y29kZT51dGV4dF9vcGVuVUNoYXJzKFVUZXh0ICp1dCwg
Y29uc3QgY2hhcjE2X3QgKnRleHQsIGludDY0X3QgdGV4dExlbmd0aCwgVUVycm9yQ29kZSAqc3Rh
dHVzKTs8L2NvZGU+CisgICAgICogYHV0ZXh0X29wZW5VQ2hhcnMoVVRleHQgKnV0LCBjb25zdCBj
aGFyMTZfdCAqdGV4dCwgaW50NjRfdCB0ZXh0TGVuZ3RoLCBVRXJyb3JDb2RlICpzdGF0dXMpO2AK
ICAgICAgKgogICAgICAqLwogICAgIFJlZ2V4TWF0Y2hlciAqbWF0Y2hlcihjb25zdCBjaGFyMTZf
dCAqaW5wdXQsCkBAIC01MjEsNyArNTE5LDcgQEAgY2xhc3MgVV9JMThOX0FQSSBSZWdleFBhdHRl
cm4gVV9GSU5BTCA6IHB1YmxpYyBVT2JqZWN0IHsKIAogCiAgICAgLyoqCi0gICAgICogU3BsaXQg
YSBzdHJpbmcgaW50byBmaWVsZHMuICBTb21ld2hhdCBsaWtlIHNwbGl0KCkgZnJvbSBQZXJsIG9y
IEphdmEuCisgICAgICogU3BsaXQgYSBzdHJpbmcgaW50byBmaWVsZHMuICBTb21ld2hhdCBsaWtl
ICVzcGxpdCgpIGZyb20gUGVybCBvciBKYXZhLgogICAgICAqIFBhdHRlcm4gbWF0Y2hlcyBpZGVu
dGlmeSBkZWxpbWl0ZXJzIHRoYXQgc2VwYXJhdGUgdGhlIGlucHV0CiAgICAgICogaW50byBmaWVs
ZHMuICBUaGUgaW5wdXQgZGF0YSBiZXR3ZWVuIHRoZSBkZWxpbWl0ZXJzIGJlY29tZXMgdGhlCiAg
ICAgICogZmllbGRzIHRoZW1zZWx2ZXMuCkBAIC01NDAsNyArNTM4LDcgQEAgY2xhc3MgVV9JMThO
X0FQSSBSZWdleFBhdHRlcm4gVV9GSU5BTCA6IHB1YmxpYyBVT2JqZWN0IHsKICAgICAgKiBUaGlz
IGJlaGF2aW9yIGRpZmZlcnMgZnJvbSBKYXZhLCB3aGljaCBpZ25vcmVzIGNhcHR1cmUgZ3JvdXBz
LgogICAgICAqCiAgICAgICogIEZvciB0aGUgYmVzdCBwZXJmb3JtYW5jZSBvbiBzcGxpdCgpIG9w
ZXJhdGlvbnMsCi0gICAgICogIDxjb2RlPlJlZ2V4TWF0Y2hlcjo6c3BsaXQ8L2NvZGU+IGlzIHBy
ZWZlcmFibGUgdG8gdGhpcyBmdW5jdGlvbgorICAgICAqICBgUmVnZXhNYXRjaGVyOjpzcGxpdCgp
YCBpcyBwcmVmZXJhYmxlIHRvIHRoaXMgZnVuY3Rpb24KICAgICAgKgogICAgICAqIEBwYXJhbSBp
bnB1dCAgIFRoZSBzdHJpbmcgdG8gYmUgc3BsaXQgaW50byBmaWVsZHMuICBUaGUgZmllbGQgZGVs
aW1pdGVycwogICAgICAqICAgICAgICAgICAgICAgIG1hdGNoIHRoZSBwYXR0ZXJuIChpbiB0aGUg
InRoaXMiIG9iamVjdCkKQEAgLTY3Myw4ICs2NzEsNyBAQCBjbGFzcyBVX0kxOE5fQVBJIFJlZ2V4
TWF0Y2hlciBVX0ZJTkFMIDogcHVibGljIFVPYmplY3QgewogICAgICAgKiBpdHMgbWF0Y2hlcigp
IG1ldGhvZCB0byBjcmVhdGUgdGhlIFJlZ2V4TWF0Y2hlciBvYmplY3RzLgogICAgICAgKgogICAg
ICAgKiAgQHBhcmFtIHJlZ2V4cCBUaGUgUmVndWxhciBFeHByZXNzaW9uIHRvIGJlIGNvbXBpbGVk
LgotICAgICAgKiAgQHBhcmFtIGZsYWdzICBSZWd1bGFyIGV4cHJlc3Npb24gb3B0aW9ucywgc3Vj
aCBhcyBjYXNlIGluc2Vuc2l0aXZlIG1hdGNoaW5nLgotICAgICAgKiAgICAgICAgICAgICAgICBA
c2VlIFVSRUdFWF9DQVNFX0lOU0VOU0lUSVZFCisgICAgICAqICBAcGFyYW0gZmxhZ3MgICNVUmVn
ZXhwRmxhZyBvcHRpb25zLCBzdWNoIGFzICNVUkVHRVhfQ0FTRV9JTlNFTlNJVElWRS4KICAgICAg
ICogIEBwYXJhbSBzdGF0dXMgQW55IGVycm9ycyBhcmUgcmVwb3J0ZWQgYnkgc2V0dGluZyB0aGlz
IFVFcnJvckNvZGUgdmFyaWFibGUuCiAgICAgICAqICBAc3RhYmxlIElDVSAyLjYKICAgICAgICov
CkBAIC02ODksOCArNjg2LDcgQEAgY2xhc3MgVV9JMThOX0FQSSBSZWdleE1hdGNoZXIgVV9GSU5B
TCA6IHB1YmxpYyBVT2JqZWN0IHsKICAgICAgICogaXRzIG1hdGNoZXIoKSBtZXRob2QgdG8gY3Jl
YXRlIHRoZSBSZWdleE1hdGNoZXIgb2JqZWN0cy4KICAgICAgICoKICAgICAgICogIEBwYXJhbSBy
ZWdleHAgVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBiZSBjb21waWxlZC4KLSAgICAgICogIEBw
YXJhbSBmbGFncyAgUmVndWxhciBleHByZXNzaW9uIG9wdGlvbnMsIHN1Y2ggYXMgY2FzZSBpbnNl
bnNpdGl2ZSBtYXRjaGluZy4KLSAgICAgICogICAgICAgICAgICAgICAgQHNlZSBVUkVHRVhfQ0FT
RV9JTlNFTlNJVElWRQorICAgICAgKiAgQHBhcmFtIGZsYWdzICAjVVJlZ2V4cEZsYWcgb3B0aW9u
cywgc3VjaCBhcyAjVVJFR0VYX0NBU0VfSU5TRU5TSVRJVkUuCiAgICAgICAqICBAcGFyYW0gc3Rh
dHVzIEFueSBlcnJvcnMgYXJlIHJlcG9ydGVkIGJ5IHNldHRpbmcgdGhpcyBVRXJyb3JDb2RlIHZh
cmlhYmxlLgogICAgICAgKgogICAgICAgKiAgQHN0YWJsZSBJQ1UgNC42CkBAIC03MDQsNyArNzAw
LDcgQEAgY2xhc3MgVV9JMThOX0FQSSBSZWdleE1hdGNoZXIgVV9GSU5BTCA6IHB1YmxpYyBVT2Jq
ZWN0IHsKICAgICAgICogY3JlYXRlZCBmb3IgdGhlIHNhbWUgZXhwcmVzc2lvbiwgaXQgd2lsbCBi
ZSBtb3JlIGVmZmljaWVudCB0bwogICAgICAgKiBzZXBhcmF0ZWx5IGNyZWF0ZSBhbmQgY2FjaGUg
YSBSZWdleFBhdHRlcm4gb2JqZWN0LCBhbmQgdXNlCiAgICAgICAqIGl0cyBtYXRjaGVyKCkgbWV0
aG9kIHRvIGNyZWF0ZSB0aGUgUmVnZXhNYXRjaGVyIG9iamVjdHMuCi0gICAgICAqIDxwPgorICAg
ICAgKgogICAgICAgKiBUaGUgbWF0Y2hlciB3aWxsIHJldGFpbiBhIHJlZmVyZW5jZSB0byB0aGUg
c3VwcGxpZWQgaW5wdXQgc3RyaW5nLCBhbmQgYWxsIHJlZ2V4cAogICAgICAgKiBwYXR0ZXJuIG1h
dGNoaW5nIG9wZXJhdGlvbnMgaGFwcGVuIGRpcmVjdGx5IG9uIHRoZSBvcmlnaW5hbCBzdHJpbmcu
ICBJdCBpcwogICAgICAgKiBjcml0aWNhbCB0aGF0IHRoZSBzdHJpbmcgbm90IGJlIGFsdGVyZWQg
b3IgZGVsZXRlZCBiZWZvcmUgdXNlIGJ5IHRoZSByZWd1bGFyCkBAIC03MTMsOCArNzA5LDcgQEAg
Y2xhc3MgVV9JMThOX0FQSSBSZWdleE1hdGNoZXIgVV9GSU5BTCA6IHB1YmxpYyBVT2JqZWN0IHsK
ICAgICAgICogIEBwYXJhbSByZWdleHAgVGhlIFJlZ3VsYXIgRXhwcmVzc2lvbiB0byBiZSBjb21w
aWxlZC4KICAgICAgICogIEBwYXJhbSBpbnB1dCAgVGhlIHN0cmluZyB0byBtYXRjaC4gIFRoZSBt
YXRjaGVyIHJldGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlCiAgICAgICAqICAgICAgICAgICAgICAg
IGNhbGxlcidzIHN0cmluZzsgbW8gY29weSBpcyBtYWRlLgotICAgICAgKiAgQHBhcmFtIGZsYWdz
ICBSZWd1bGFyIGV4cHJlc3Npb24gb3B0aW9ucywgc3VjaCBhcyBjYXNlIGluc2Vuc2l0aXZlIG1h
dGNoaW5nLgotICAgICAgKiAgICAgICAgICAgICAgICBAc2VlIFVSRUdFWF9DQVNFX0lOU0VOU0lU
SVZFCisgICAgICAqICBAcGFyYW0gZmxhZ3MgICNVUmVnZXhwRmxhZyBvcHRpb25zLCBzdWNoIGFz
ICNVUkVHRVhfQ0FTRV9JTlNFTlNJVElWRS4KICAgICAgICogIEBwYXJhbSBzdGF0dXMgQW55IGVy
cm9ycyBhcmUgcmVwb3J0ZWQgYnkgc2V0dGluZyB0aGlzIFVFcnJvckNvZGUgdmFyaWFibGUuCiAg
ICAgICAqICBAc3RhYmxlIElDVSAyLjYKICAgICAgICovCkBAIC03MjgsNyArNzIzLDcgQEAgY2xh
c3MgVV9JMThOX0FQSSBSZWdleE1hdGNoZXIgVV9GSU5BTCA6IHB1YmxpYyBVT2JqZWN0IHsKICAg
ICAgICogY3JlYXRlZCBmb3IgdGhlIHNhbWUgZXhwcmVzc2lvbiwgaXQgd2lsbCBiZSBtb3JlIGVm
ZmljaWVudCB0bwogICAgICAgKiBzZXBhcmF0ZWx5IGNyZWF0ZSBhbmQgY2FjaGUgYSBSZWdleFBh
dHRlcm4gb2JqZWN0LCBhbmQgdXNlCiAgICAgICAqIGl0cyBtYXRjaGVyKCkgbWV0aG9kIHRvIGNy
ZWF0ZSB0aGUgUmVnZXhNYXRjaGVyIG9iamVjdHMuCi0gICAgICAqIDxwPgorICAgICAgKgogICAg
ICAgKiBUaGUgbWF0Y2hlciB3aWxsIG1ha2UgYSBzaGFsbG93IGNsb25lIG9mIHRoZSBzdXBwbGll
ZCBpbnB1dCB0ZXh0LCBhbmQgYWxsIHJlZ2V4cAogICAgICAgKiBwYXR0ZXJuIG1hdGNoaW5nIG9w
ZXJhdGlvbnMgaGFwcGVuIG9uIHRoaXMgY2xvbmUuICBXaGlsZSByZWFkLW9ubHkgb3BlcmF0aW9u
cyBvbgogICAgICAgKiB0aGUgc3VwcGxpZWQgdGV4dCBhcmUgcGVybWl0dGVkLCBpdCBpcyBjcml0
aWNhbCB0aGF0IHRoZSB1bmRlcmx5aW5nIHN0cmluZyBub3QgYmUKQEAgLTczNiw4ICs3MzEsNyBA
QCBjbGFzcyBVX0kxOE5fQVBJIFJlZ2V4TWF0Y2hlciBVX0ZJTkFMIDogcHVibGljIFVPYmplY3Qg
ewogICAgICAgKgogICAgICAgKiAgQHBhcmFtIHJlZ2V4cCBUaGUgUmVndWxhciBFeHByZXNzaW9u
IHRvIGJlIGNvbXBpbGVkLgogICAgICAgKiAgQHBhcmFtIGlucHV0ICBUaGUgc3RyaW5nIHRvIG1h
dGNoLiAgVGhlIG1hdGNoZXIgcmV0YWlucyBhIHNoYWxsb3cgY2xvbmUgb2YgdGhlIHRleHQuCi0g
ICAgICAqICBAcGFyYW0gZmxhZ3MgIFJlZ3VsYXIgZXhwcmVzc2lvbiBvcHRpb25zLCBzdWNoIGFz
IGNhc2UgaW5zZW5zaXRpdmUgbWF0Y2hpbmcuCi0gICAgICAqICAgICAgICAgICAgICAgIEBzZWUg
VVJFR0VYX0NBU0VfSU5TRU5TSVRJVkUKKyAgICAgICogIEBwYXJhbSBmbGFncyAgI1VSZWdleHBG
bGFnIG9wdGlvbnMsIHN1Y2ggYXMgI1VSRUdFWF9DQVNFX0lOU0VOU0lUSVZFLgogICAgICAgKiAg
QHBhcmFtIHN0YXR1cyBBbnkgZXJyb3JzIGFyZSByZXBvcnRlZCBieSBzZXR0aW5nIHRoaXMgVUVy
cm9yQ29kZSB2YXJpYWJsZS4KICAgICAgICoKICAgICAgICogIEBzdGFibGUgSUNVIDQuNgpAQCAt
NzUwLDEzICs3NDQsMTIgQEAgY2xhc3MgVV9JMThOX0FQSSBSZWdleE1hdGNoZXIgVV9GSU5BTCA6
IHB1YmxpYyBVT2JqZWN0IHsKICAgICAgKiBDYXVzZSBhIGNvbXBpbGF0aW9uIGVycm9yIGlmIGFu
IGFwcGxpY2F0aW9uIGFjY2lkZW50YWxseSBhdHRlbXB0cyB0bwogICAgICAqICAgY3JlYXRlIGEg
bWF0Y2hlciB3aXRoIGEgKGNoYXIxNl90ICopIHN0cmluZyBhcyBpbnB1dCByYXRoZXIgdGhhbgog
ICAgICAqICAgYSBVbmljb2RlU3RyaW5nLiAgICBBdm9pZHMgYSBkYW5nbGluZyByZWZlcmVuY2Ug
dG8gYSB0ZW1wb3Jhcnkgc3RyaW5nLgotICAgICAqIDxwPgorICAgICAqCiAgICAgICogVG8gZWZm
aWNpZW50bHkgd29yayB3aXRoIGNoYXIxNl90ICpzdHJpbmdzLCB3cmFwIHRoZSBkYXRhIGluIGEg
VW5pY29kZVN0cmluZwogICAgICAqIHVzaW5nIG9uZSBvZiB0aGUgYWxpYXNpbmcgY29uc3RydWN0
b3JzLCBzdWNoIGFzCi0gICAgICogPGNvZGU+VW5pY29kZVN0cmluZyhVQm9vbCBpc1Rlcm1pbmF0
ZWQsIGNvbnN0IGNoYXIxNl90ICp0ZXh0LCBpbnQzMl90IHRleHRMZW5ndGgpOzwvY29kZT4KKyAg
ICAgKiBgVW5pY29kZVN0cmluZyhVQm9vbCBpc1Rlcm1pbmF0ZWQsIGNvbnN0IGNoYXIxNl90ICp0
ZXh0LCBpbnQzMl90IHRleHRMZW5ndGgpO2AKICAgICAgKiBvciBpbiBhIFVUZXh0LCB1c2luZwot
ICAgICAqIDxjb2RlPnV0ZXh0X29wZW5VQ2hhcnMoVVRleHQgKnV0LCBjb25zdCBjaGFyMTZfdCAq
dGV4dCwgaW50NjRfdCB0ZXh0TGVuZ3RoLCBVRXJyb3JDb2RlICpzdGF0dXMpOzwvY29kZT4KLSAg
ICAgKgorICAgICAqIGB1dGV4dF9vcGVuVUNoYXJzKFVUZXh0ICp1dCwgY29uc3QgY2hhcjE2X3Qg
KnRleHQsIGludDY0X3QgdGV4dExlbmd0aCwgVUVycm9yQ29kZSAqc3RhdHVzKTtgCiAgICAgICov
CiAgICAgUmVnZXhNYXRjaGVyKGNvbnN0IFVuaWNvZGVTdHJpbmcgJnJlZ2V4cCwgY29uc3QgY2hh
cjE2X3QgKmlucHV0LAogICAgICAgICB1aW50MzJfdCBmbGFncywgVUVycm9yQ29kZSAmc3RhdHVz
KTsKQEAgLTc5OSw4ICs3OTIsOCBAQCBjbGFzcyBVX0kxOE5fQVBJIFJlZ2V4TWF0Y2hlciBVX0ZJ
TkFMIDogcHVibGljIFVPYmplY3QgewogICAgICogICBhbHdheXMgc3RhcnRzIGF0IHRoZSBiZWdp
bm5pbmcgb2YgdGhlIGlucHV0IHJlZ2lvbjsKICAgICAqICAgdW5saWtlIHRoYXQgZnVuY3Rpb24s
IGl0IGRvZXMgbm90IHJlcXVpcmUgdGhhdCB0aGUgZW50aXJlIHJlZ2lvbiBiZSBtYXRjaGVkLgog
ICAgICoKLSAgICAqICAgPHA+SWYgdGhlIG1hdGNoIHN1Y2NlZWRzIHRoZW4gbW9yZSBpbmZvcm1h
dGlvbiBjYW4gYmUgb2J0YWluZWQgdmlhIHRoZSA8Y29kZT5zdGFydCgpPC9jb2RlPiwKLSAgICAq
ICAgICA8Y29kZT5lbmQoKTwvY29kZT4sIGFuZCA8Y29kZT5ncm91cCgpPC9jb2RlPiBmdW5jdGlv
bnMuPC9wPgorICAgICogICBJZiB0aGUgbWF0Y2ggc3VjY2VlZHMgdGhlbiBtb3JlIGluZm9ybWF0
aW9uIGNhbiBiZSBvYnRhaW5lZCB2aWEgdGhlIHN0YXJ0KCksCisgICAgKiAgIGVuZCgpLCBhbmQg
Z3JvdXAoKSBmdW5jdGlvbnMuCiAgICAgKgogICAgICogICAgQHBhcmFtICAgc3RhdHVzICAgICBB
IHJlZmVyZW5jZSB0byBhIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzLgogICAgICog
ICAgQHJldHVybiAgVFJVRSBpZiB0aGVyZSBpcyBhIG1hdGNoIGF0IHRoZSBzdGFydCBvZiB0aGUg
aW5wdXQgc3RyaW5nLgpAQCAtODE0LDggKzgwNyw4IEBAIGNsYXNzIFVfSTE4Tl9BUEkgUmVnZXhN
YXRjaGVyIFVfRklOQUwgOiBwdWJsaWMgVU9iamVjdCB7CiAgICAgKiAgIFRoZSBtYXRjaCBtYXkg
YmUgb2YgYW55IGxlbmd0aCwgYW5kIGlzIG5vdCByZXF1aXJlZCB0byBleHRlbmQgdG8gdGhlIGVu
ZAogICAgICogICBvZiB0aGUgaW5wdXQgc3RyaW5nLiAgQ29udHJhc3Qgd2l0aCBtYXRjaCgpLgog
ICAgICoKLSAgICAqICAgPHA+SWYgdGhlIG1hdGNoIHN1Y2NlZWRzIHRoZW4gbW9yZSBpbmZvcm1h
dGlvbiBjYW4gYmUgb2J0YWluZWQgdmlhIHRoZSA8Y29kZT5zdGFydCgpPC9jb2RlPiwKLSAgICAq
ICAgICA8Y29kZT5lbmQoKTwvY29kZT4sIGFuZCA8Y29kZT5ncm91cCgpPC9jb2RlPiBmdW5jdGlv
bnMuPC9wPgorICAgICogICBJZiB0aGUgbWF0Y2ggc3VjY2VlZHMgdGhlbiBtb3JlIGluZm9ybWF0
aW9uIGNhbiBiZSBvYnRhaW5lZCB2aWEgdGhlIHN0YXJ0KCksCisgICAgKiAgIGVuZCgpLCBhbmQg
Z3JvdXAoKSBmdW5jdGlvbnMuCiAgICAgKgogICAgICogICAgQHBhcmFtICAgc3RhcnRJbmRleCBU
aGUgaW5wdXQgc3RyaW5nIChuYXRpdmUpIGluZGV4IGF0IHdoaWNoIHRvIGJlZ2luIG1hdGNoaW5n
LgogICAgICogICAgQHBhcmFtICAgc3RhdHVzICAgICBBIHJlZmVyZW5jZSB0byBhIFVFcnJvckNv
ZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzLgpAQCAtODI5LDExICs4MjIsMTEgQEAgY2xhc3MgVV9J
MThOX0FQSSBSZWdleE1hdGNoZXIgVV9GSU5BTCA6IHB1YmxpYyBVT2JqZWN0IHsKICAgICAqICBG
aW5kIHRoZSBuZXh0IHBhdHRlcm4gbWF0Y2ggaW4gdGhlIGlucHV0IHN0cmluZy4KICAgICAqICBU
aGUgZmluZCBiZWdpbnMgc2VhcmNoaW5nIHRoZSBpbnB1dCBhdCB0aGUgbG9jYXRpb24gZm9sbG93
aW5nIHRoZSBlbmQgb2YKICAgICAqICB0aGUgcHJldmlvdXMgbWF0Y2gsIG9yIGF0IHRoZSBzdGFy
dCBvZiB0aGUgc3RyaW5nIGlmIHRoZXJlIGlzIG5vIHByZXZpb3VzIG1hdGNoLgotICAgICogIElm
IGEgbWF0Y2ggaXMgZm91bmQsIDxjb2RlPnN0YXJ0KCksIGVuZCgpPC9jb2RlPiBhbmQgPGNvZGU+
Z3JvdXAoKTwvY29kZT4KKyAgICAqICBJZiBhIG1hdGNoIGlzIGZvdW5kLCBgc3RhcnQoKWAsIGBl
bmQoKWAgYW5kIGBncm91cCgpYAogICAgICogIHdpbGwgcHJvdmlkZSBtb3JlIGluZm9ybWF0aW9u
IHJlZ2FyZGluZyB0aGUgbWF0Y2guCi0gICAgKiAgPHA+Tm90ZSB0aGF0IGlmIHRoZSBpbnB1dCBz
dHJpbmcgaXMgY2hhbmdlZCBieSB0aGUgYXBwbGljYXRpb24sCisgICAgKiAgTm90ZSB0aGF0IGlm
IHRoZSBpbnB1dCBzdHJpbmcgaXMgY2hhbmdlZCBieSB0aGUgYXBwbGljYXRpb24sCiAgICAgKiAg
ICAgdXNlIGZpbmQoc3RhcnRQb3MsIHN0YXR1cykgaW5zdGVhZCBvZiBmaW5kKCksIGJlY2F1c2Ug
dGhlIHNhdmVkIHN0YXJ0aW5nCi0gICAgKiAgICAgcG9zaXRpb24gbWF5IG5vdCBiZSB2YWxpZCB3
aXRoIHRoZSBhbHRlcmVkIGlucHV0IHN0cmluZy48L3A+CisgICAgKiAgICAgcG9zaXRpb24gbWF5
IG5vdCBiZSB2YWxpZCB3aXRoIHRoZSBhbHRlcmVkIGlucHV0IHN0cmluZy4KICAgICAqICBAcmV0
dXJuICBUUlVFIGlmIGEgbWF0Y2ggaXMgZm91bmQuCiAgICAgKiAgQHN0YWJsZSBJQ1UgMi40CiAg
ICAgKi8KQEAgLTg0NCwxMSArODM3LDEyIEBAIGNsYXNzIFVfSTE4Tl9BUEkgUmVnZXhNYXRjaGVy
IFVfRklOQUwgOiBwdWJsaWMgVU9iamVjdCB7CiAgICAgKiAgRmluZCB0aGUgbmV4dCBwYXR0ZXJu
IG1hdGNoIGluIHRoZSBpbnB1dCBzdHJpbmcuCiAgICAgKiAgVGhlIGZpbmQgYmVnaW5zIHNlYXJj
aGluZyB0aGUgaW5wdXQgYXQgdGhlIGxvY2F0aW9uIGZvbGxvd2luZyB0aGUgZW5kIG9mCiAgICAg
KiAgdGhlIHByZXZpb3VzIG1hdGNoLCBvciBhdCB0aGUgc3RhcnQgb2YgdGhlIHN0cmluZyBpZiB0
aGVyZSBpcyBubyBwcmV2aW91cyBtYXRjaC4KLSAgICAqICBJZiBhIG1hdGNoIGlzIGZvdW5kLCA8
Y29kZT5zdGFydCgpLCBlbmQoKTwvY29kZT4gYW5kIDxjb2RlPmdyb3VwKCk8L2NvZGU+CisgICAg
KiAgSWYgYSBtYXRjaCBpcyBmb3VuZCwgYHN0YXJ0KClgLCBgZW5kKClgIGFuZCBgZ3JvdXAoKWAK
ICAgICAqICB3aWxsIHByb3ZpZGUgbW9yZSBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlIG1hdGNo
LgotICAgICogIDxwPk5vdGUgdGhhdCBpZiB0aGUgaW5wdXQgc3RyaW5nIGlzIGNoYW5nZWQgYnkg
dGhlIGFwcGxpY2F0aW9uLAotICAgICogICAgIHVzZSBmaW5kKHN0YXJ0UG9zLCBzdGF0dXMpIGlu
c3RlYWQgb2YgZmluZCgpLCBiZWNhdXNlIHRoZSBzYXZlZCBzdGFydGluZwotICAgICogICAgIHBv
c2l0aW9uIG1heSBub3QgYmUgdmFsaWQgd2l0aCB0aGUgYWx0ZXJlZCBpbnB1dCBzdHJpbmcuPC9w
PgorICAgICoKKyAgICAqICBOb3RlIHRoYXQgaWYgdGhlIGlucHV0IHN0cmluZyBpcyBjaGFuZ2Vk
IGJ5IHRoZSBhcHBsaWNhdGlvbiwKKyAgICAqICB1c2UgZmluZChzdGFydFBvcywgc3RhdHVzKSBp
bnN0ZWFkIG9mIGZpbmQoKSwgYmVjYXVzZSB0aGUgc2F2ZWQgc3RhcnRpbmcKKyAgICAqICBwb3Np
dGlvbiBtYXkgbm90IGJlIHZhbGlkIHdpdGggdGhlIGFsdGVyZWQgaW5wdXQgc3RyaW5nLgogICAg
ICogIEBwYXJhbSAgIHN0YXR1cyAgQSByZWZlcmVuY2UgdG8gYSBVRXJyb3JDb2RlIHRvIHJlY2Vp
dmUgYW55IGVycm9ycy4KICAgICAqICBAcmV0dXJuICBUUlVFIGlmIGEgbWF0Y2ggaXMgZm91bmQu
CiAgICAgKiBAc3RhYmxlIElDVSA1NQpAQCAtMTA3OCwxMCArMTA3MiwxMCBAQCBjbGFzcyBVX0kx
OE5fQVBJIFJlZ2V4TWF0Y2hlciBVX0ZJTkFMIDogcHVibGljIFVPYmplY3QgewogICAgICogICBU
aGUgZWZmZWN0IGlzIHRvIHJlbW92ZSBhbnkgbWVtb3J5IG9mIHByZXZpb3VzIG1hdGNoZXMsCiAg
ICAgKiAgICAgICBhbmQgdG8gY2F1c2Ugc3Vic2VxdWVudCBmaW5kKCkgb3BlcmF0aW9ucyB0byBi
ZWdpbiBhdAogICAgICogICAgICAgdGhlIHNwZWNpZmllZCAobmF0aXZlKSBwb3NpdGlvbiBpbiB0
aGUgaW5wdXQgc3RyaW5nLgotICAgICogPHA+CisgICAgKgogICAgICogICBUaGUgbWF0Y2hlcidz
IHJlZ2lvbiBpcyByZXNldCB0byBpdHMgZGVmYXVsdCwgd2hpY2ggaXMgdGhlIGVudGlyZQogICAg
ICogICBpbnB1dCBzdHJpbmcuCi0gICAgKiA8cD4KKyAgICAqCiAgICAgKiAgIEFuIGFsdGVybmF0
aXZlIHRvIHRoaXMgZnVuY3Rpb24gaXMgdG8gc2V0IGEgbWF0Y2ggcmVnaW9uCiAgICAgKiAgIGJl
Z2lubmluZyBhdCB0aGUgZGVzaXJlZCBpbmRleC4KICAgICAqCkBAIC0xMTU4LDEyICsxMTUyLDEy
IEBAIGNsYXNzIFVfSTE4Tl9BUEkgUmVnZXhNYXRjaGVyIFVfRklOQUwgOiBwdWJsaWMgVU9iamVj
dCB7CiAgICAgICogQ2F1c2UgYSBjb21waWxhdGlvbiBlcnJvciBpZiBhbiBhcHBsaWNhdGlvbiBh
Y2NpZGVudGFsbHkgYXR0ZW1wdHMgdG8KICAgICAgKiAgIHJlc2V0IGEgbWF0Y2hlciB3aXRoIGEg
KGNoYXIxNl90ICopIHN0cmluZyBhcyBpbnB1dCByYXRoZXIgdGhhbgogICAgICAqICAgYSBVbmlj
b2RlU3RyaW5nLiAgICBBdm9pZHMgYSBkYW5nbGluZyByZWZlcmVuY2UgdG8gYSB0ZW1wb3Jhcnkg
c3RyaW5nLgotICAgICAqIDxwPgorICAgICAqCiAgICAgICogVG8gZWZmaWNpZW50bHkgd29yayB3
aXRoIGNoYXIxNl90ICpzdHJpbmdzLCB3cmFwIHRoZSBkYXRhIGluIGEgVW5pY29kZVN0cmluZwog
ICAgICAqIHVzaW5nIG9uZSBvZiB0aGUgYWxpYXNpbmcgY29uc3RydWN0b3JzLCBzdWNoIGFzCi0g
ICAgICogPGNvZGU+VW5pY29kZVN0cmluZyhVQm9vbCBpc1Rlcm1pbmF0ZWQsIGNvbnN0IGNoYXIx
Nl90ICp0ZXh0LCBpbnQzMl90IHRleHRMZW5ndGgpOzwvY29kZT4KKyAgICAgKiBgVW5pY29kZVN0
cmluZyhVQm9vbCBpc1Rlcm1pbmF0ZWQsIGNvbnN0IGNoYXIxNl90ICp0ZXh0LCBpbnQzMl90IHRl
eHRMZW5ndGgpO2AKICAgICAgKiBvciBpbiBhIFVUZXh0LCB1c2luZwotICAgICAqIDxjb2RlPnV0
ZXh0X29wZW5VQ2hhcnMoVVRleHQgKnV0LCBjb25zdCBjaGFyMTZfdCAqdGV4dCwgaW50NjRfdCB0
ZXh0TGVuZ3RoLCBVRXJyb3JDb2RlICpzdGF0dXMpOzwvY29kZT4KKyAgICAgKiBgdXRleHRfb3Bl
blVDaGFycyhVVGV4dCAqdXQsIGNvbnN0IGNoYXIxNl90ICp0ZXh0LCBpbnQ2NF90IHRleHRMZW5n
dGgsIFVFcnJvckNvZGUgKnN0YXR1cyk7YAogICAgICAqCiAgICAgICovCiAgICAgUmVnZXhNYXRj
aGVyICZyZXNldChjb25zdCBjaGFyMTZfdCAqaW5wdXQpOwpAQCAtMTQxMiwxNSArMTQwNiwxNSBA
QCBjbGFzcyBVX0kxOE5fQVBJIFJlZ2V4TWF0Y2hlciBVX0ZJTkFMIDogcHVibGljIFVPYmplY3Qg
ewogICAgICogdGhlIHBhdHRlcm4gd2l0aCB0aGUgcmVwbGFjZW1lbnQgc3RyaW5nLiAgIFRoaXMg
aXMgYSBjb252ZW5pZW5jZQogICAgICogZnVuY3Rpb24gdGhhdCBwcm92aWRlcyBhIGNvbXBsZXRl
IGZpbmQtYW5kLXJlcGxhY2Ugb3BlcmF0aW9uLgogICAgICoKLSAgICAqIDxwPlRoaXMgZnVuY3Rp
b24gZmlyc3QgcmVzZXRzIHRoaXMgUmVnZXhNYXRjaGVyLiBJdCB0aGVuIHNjYW5zIHRoZSBpbnB1
dCBzdHJpbmcKKyAgICAqIFRoaXMgZnVuY3Rpb24gZmlyc3QgcmVzZXRzIHRoaXMgUmVnZXhNYXRj
aGVyLiBJdCB0aGVuIHNjYW5zIHRoZSBpbnB1dCBzdHJpbmcKICAgICAqIGxvb2tpbmcgZm9yIGEg
bWF0Y2ggb2YgdGhlIHBhdHRlcm4uIElucHV0IHRoYXQgaXMgbm90IHBhcnQKICAgICAqIG9mIHRo
ZSBtYXRjaCBpcyBhcHBlbmRlZCBkaXJlY3RseSB0byB0aGUgcmVzdWx0IHN0cmluZzsgdGhlIG1h
dGNoIGlzIHJlcGxhY2VkCiAgICAgKiBpbiB0aGUgcmVzdWx0IGJ5IHRoZSByZXBsYWNlbWVudCBz
dHJpbmcuIFRoZSByZXBsYWNlbWVudCBzdHJpbmcgbWF5IGNvbnRhaW4KLSAgICAqIHJlZmVyZW5j
ZXMgdG8gY2FwdHVyZWQgZ3JvdXBzLjwvcD4KKyAgICAqIHJlZmVyZW5jZXMgdG8gY2FwdHVyZWQg
Z3JvdXBzLgogICAgICoKLSAgICAqIDxwPlRoZSBzdGF0ZSBvZiB0aGUgbWF0Y2hlciAodGhlIHBv
c2l0aW9uIGF0IHdoaWNoIGEgc3Vic2VxdWVudCBmaW5kKCkKKyAgICAqIFRoZSBzdGF0ZSBvZiB0
aGUgbWF0Y2hlciAodGhlIHBvc2l0aW9uIGF0IHdoaWNoIGEgc3Vic2VxdWVudCBmaW5kKCkKICAg
ICAqICAgIHdvdWxkIGJlZ2luKSBhZnRlciBjb21wbGV0aW5nIGEgcmVwbGFjZUZpcnN0KCkgaXMg
bm90IHNwZWNpZmllZC4gIFRoZQotICAgICogICAgUmVnZXhNYXRjaGVyIHNob3VsZCBiZSByZXNl
dCBiZWZvcmUgZG9pbmcgYWRkaXRpb25hbCBmaW5kKCkgb3BlcmF0aW9ucy48L3A+CisgICAgKiAg
ICBSZWdleE1hdGNoZXIgc2hvdWxkIGJlIHJlc2V0IGJlZm9yZSBkb2luZyBhZGRpdGlvbmFsIGZp
bmQoKSBvcGVyYXRpb25zLgogICAgICoKICAgICAqICAgIEBwYXJhbSAgIHJlcGxhY2VtZW50IGEg
c3RyaW5nIGNvbnRhaW5pbmcgdGhlIHJlcGxhY2VtZW50IHRleHQuCiAgICAgKiAgICBAcGFyYW0g
ICBzdGF0dXMgICAgICBhIHJlZmVyZW5jZSB0byBhIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkg
ZXJyb3JzLgpAQCAtMTQzNSwxNSArMTQyOSwxNSBAQCBjbGFzcyBVX0kxOE5fQVBJIFJlZ2V4TWF0
Y2hlciBVX0ZJTkFMIDogcHVibGljIFVPYmplY3QgewogICAgICogdGhlIHBhdHRlcm4gd2l0aCB0
aGUgcmVwbGFjZW1lbnQgc3RyaW5nLiAgIFRoaXMgaXMgYSBjb252ZW5pZW5jZQogICAgICogZnVu
Y3Rpb24gdGhhdCBwcm92aWRlcyBhIGNvbXBsZXRlIGZpbmQtYW5kLXJlcGxhY2Ugb3BlcmF0aW9u
LgogICAgICoKLSAgICAqIDxwPlRoaXMgZnVuY3Rpb24gZmlyc3QgcmVzZXRzIHRoaXMgUmVnZXhN
YXRjaGVyLiBJdCB0aGVuIHNjYW5zIHRoZSBpbnB1dCBzdHJpbmcKKyAgICAqIFRoaXMgZnVuY3Rp
b24gZmlyc3QgcmVzZXRzIHRoaXMgUmVnZXhNYXRjaGVyLiBJdCB0aGVuIHNjYW5zIHRoZSBpbnB1
dCBzdHJpbmcKICAgICAqIGxvb2tpbmcgZm9yIGEgbWF0Y2ggb2YgdGhlIHBhdHRlcm4uIElucHV0
IHRoYXQgaXMgbm90IHBhcnQKICAgICAqIG9mIHRoZSBtYXRjaCBpcyBhcHBlbmRlZCBkaXJlY3Rs
eSB0byB0aGUgcmVzdWx0IHN0cmluZzsgdGhlIG1hdGNoIGlzIHJlcGxhY2VkCiAgICAgKiBpbiB0
aGUgcmVzdWx0IGJ5IHRoZSByZXBsYWNlbWVudCBzdHJpbmcuIFRoZSByZXBsYWNlbWVudCBzdHJp
bmcgbWF5IGNvbnRhaW4KLSAgICAqIHJlZmVyZW5jZXMgdG8gY2FwdHVyZWQgZ3JvdXBzLjwvcD4K
KyAgICAqIHJlZmVyZW5jZXMgdG8gY2FwdHVyZWQgZ3JvdXBzLgogICAgICoKLSAgICAqIDxwPlRo
ZSBzdGF0ZSBvZiB0aGUgbWF0Y2hlciAodGhlIHBvc2l0aW9uIGF0IHdoaWNoIGEgc3Vic2VxdWVu
dCBmaW5kKCkKKyAgICAqIFRoZSBzdGF0ZSBvZiB0aGUgbWF0Y2hlciAodGhlIHBvc2l0aW9uIGF0
IHdoaWNoIGEgc3Vic2VxdWVudCBmaW5kKCkKICAgICAqICAgIHdvdWxkIGJlZ2luKSBhZnRlciBj
b21wbGV0aW5nIGEgcmVwbGFjZUZpcnN0KCkgaXMgbm90IHNwZWNpZmllZC4gIFRoZQotICAgICog
ICAgUmVnZXhNYXRjaGVyIHNob3VsZCBiZSByZXNldCBiZWZvcmUgZG9pbmcgYWRkaXRpb25hbCBm
aW5kKCkgb3BlcmF0aW9ucy48L3A+CisgICAgKiAgICBSZWdleE1hdGNoZXIgc2hvdWxkIGJlIHJl
c2V0IGJlZm9yZSBkb2luZyBhZGRpdGlvbmFsIGZpbmQoKSBvcGVyYXRpb25zLgogICAgICoKICAg
ICAqICAgIEBwYXJhbSAgIHJlcGxhY2VtZW50IGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHJlcGxh
Y2VtZW50IHRleHQuCiAgICAgKiAgICBAcGFyYW0gICBkZXN0ICAgICAgICBhIG11dGFibGUgVVRl
eHQgaW4gd2hpY2ggdGhlIHJlc3VsdHMgYXJlIHBsYWNlZC4KQEAgLTE0NjEsMTMgKzE0NTUsMTMg
QEAgY2xhc3MgVV9JMThOX0FQSSBSZWdleE1hdGNoZXIgVV9GSU5BTCA6IHB1YmxpYyBVT2JqZWN0
IHsKICAgICAqICAgSW1wbGVtZW50cyBhIHJlcGxhY2Ugb3BlcmF0aW9uIGludGVuZGVkIHRvIGJl
IHVzZWQgYXMgcGFydCBvZiBhbgogICAgICogICBpbmNyZW1lbnRhbCBmaW5kLWFuZC1yZXBsYWNl
LgogICAgICoKLSAgICAqICAgPHA+VGhlIGlucHV0IHN0cmluZywgc3RhcnRpbmcgZnJvbSB0aGUg
ZW5kIG9mIHRoZSBwcmV2aW91cyByZXBsYWNlbWVudCBhbmQgZW5kaW5nIGF0CisgICAgKiAgIFRo
ZSBpbnB1dCBzdHJpbmcsIHN0YXJ0aW5nIGZyb20gdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgcmVw
bGFjZW1lbnQgYW5kIGVuZGluZyBhdAogICAgICogICB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQg
bWF0Y2gsIGlzIGFwcGVuZGVkIHRvIHRoZSBkZXN0aW5hdGlvbiBzdHJpbmcuICBUaGVuIHRoZQog
ICAgICogICByZXBsYWNlbWVudCBzdHJpbmcgaXMgYXBwZW5kZWQgdG8gdGhlIG91dHB1dCBzdHJp
bmcsCi0gICAgKiAgIGluY2x1ZGluZyBoYW5kbGluZyBhbnkgc3Vic3RpdHV0aW9ucyBvZiBjYXB0
dXJlZCB0ZXh0LjwvcD4KKyAgICAqICAgaW5jbHVkaW5nIGhhbmRsaW5nIGFueSBzdWJzdGl0dXRp
b25zIG9mIGNhcHR1cmVkIHRleHQuCiAgICAgKgotICAgICogICA8cD5Gb3Igc2ltcGxlLCBwcmVw
YWNrYWdlZCwgbm9uLWluY3JlbWVudGFsIGZpbmQtYW5kLXJlcGxhY2UKLSAgICAqICAgb3BlcmF0
aW9ucywgc2VlIHJlcGxhY2VGaXJzdCgpIG9yIHJlcGxhY2VBbGwoKS48L3A+CisgICAgKiAgIEZv
ciBzaW1wbGUsIHByZXBhY2thZ2VkLCBub24taW5jcmVtZW50YWwgZmluZC1hbmQtcmVwbGFjZQor
ICAgICogICBvcGVyYXRpb25zLCBzZWUgcmVwbGFjZUZpcnN0KCkgb3IgcmVwbGFjZUFsbCgpLgog
ICAgICoKICAgICAqICAgQHBhcmFtICAgZGVzdCAgICAgICAgQSBVbmljb2RlU3RyaW5nIHRvIHdo
aWNoIHRoZSByZXN1bHRzIG9mIHRoZSBmaW5kLWFuZC1yZXBsYWNlIGFyZSBhcHBlbmRlZC4KICAg
ICAqICAgQHBhcmFtICAgcmVwbGFjZW1lbnQgQSBVbmljb2RlU3RyaW5nIHRoYXQgcHJvdmlkZXMg
dGhlIHRleHQgdG8gYmUgc3Vic3RpdHV0ZWQgZm9yCkBAIC0xNDkyLDEzICsxNDg2LDEzIEBAIGNs
YXNzIFVfSTE4Tl9BUEkgUmVnZXhNYXRjaGVyIFVfRklOQUwgOiBwdWJsaWMgVU9iamVjdCB7CiAg
ICAgKiAgIEltcGxlbWVudHMgYSByZXBsYWNlIG9wZXJhdGlvbiBpbnRlbmRlZCB0byBiZSB1c2Vk
IGFzIHBhcnQgb2YgYW4KICAgICAqICAgaW5jcmVtZW50YWwgZmluZC1hbmQtcmVwbGFjZS4KICAg
ICAqCi0gICAgKiAgIDxwPlRoZSBpbnB1dCBzdHJpbmcsIHN0YXJ0aW5nIGZyb20gdGhlIGVuZCBv
ZiB0aGUgcHJldmlvdXMgcmVwbGFjZW1lbnQgYW5kIGVuZGluZyBhdAorICAgICogICBUaGUgaW5w
dXQgc3RyaW5nLCBzdGFydGluZyBmcm9tIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIHJlcGxhY2Vt
ZW50IGFuZCBlbmRpbmcgYXQKICAgICAqICAgdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IG1hdGNo
LCBpcyBhcHBlbmRlZCB0byB0aGUgZGVzdGluYXRpb24gc3RyaW5nLiAgVGhlbiB0aGUKICAgICAq
ICAgcmVwbGFjZW1lbnQgc3RyaW5nIGlzIGFwcGVuZGVkIHRvIHRoZSBvdXRwdXQgc3RyaW5nLAot
ICAgICogICBpbmNsdWRpbmcgaGFuZGxpbmcgYW55IHN1YnN0aXR1dGlvbnMgb2YgY2FwdHVyZWQg
dGV4dC48L3A+CisgICAgKiAgIGluY2x1ZGluZyBoYW5kbGluZyBhbnkgc3Vic3RpdHV0aW9ucyBv
ZiBjYXB0dXJlZCB0ZXh0LgogICAgICoKLSAgICAqICAgPHA+Rm9yIHNpbXBsZSwgcHJlcGFja2Fn
ZWQsIG5vbi1pbmNyZW1lbnRhbCBmaW5kLWFuZC1yZXBsYWNlCi0gICAgKiAgIG9wZXJhdGlvbnMs
IHNlZSByZXBsYWNlRmlyc3QoKSBvciByZXBsYWNlQWxsKCkuPC9wPgorICAgICogICBGb3Igc2lt
cGxlLCBwcmVwYWNrYWdlZCwgbm9uLWluY3JlbWVudGFsIGZpbmQtYW5kLXJlcGxhY2UKKyAgICAq
ICAgb3BlcmF0aW9ucywgc2VlIHJlcGxhY2VGaXJzdCgpIG9yIHJlcGxhY2VBbGwoKS4KICAgICAq
CiAgICAgKiAgIEBwYXJhbSAgIGRlc3QgICAgICAgIEEgbXV0YWJsZSBVVGV4dCB0byB3aGljaCB0
aGUgcmVzdWx0cyBvZiB0aGUgZmluZC1hbmQtcmVwbGFjZSBhcmUgYXBwZW5kZWQuCiAgICAgKiAg
ICAgICAgICAgICAgICAgICAgICAgICBNdXN0IG5vdCBiZSBOVUxMLgpAQCAtMTUyMiw4ICsxNTE2
LDggQEAgY2xhc3MgVV9JMThOX0FQSSBSZWdleE1hdGNoZXIgVV9GSU5BTCA6IHB1YmxpYyBVT2Jq
ZWN0IHsKICAgIC8qKgogICAgICogQXMgdGhlIGZpbmFsIHN0ZXAgaW4gYSBmaW5kLWFuZC1yZXBs
YWNlIG9wZXJhdGlvbiwgYXBwZW5kIHRoZSByZW1haW5kZXIKICAgICAqIG9mIHRoZSBpbnB1dCBz
dHJpbmcsIHN0YXJ0aW5nIGF0IHRoZSBwb3NpdGlvbiBmb2xsb3dpbmcgdGhlIGxhc3QgYXBwZW5k
UmVwbGFjZW1lbnQoKSwKLSAgICAqIHRvIHRoZSBkZXN0aW5hdGlvbiBzdHJpbmcuIDxjb2RlPmFw
cGVuZFRhaWwoKTwvY29kZT4gaXMgaW50ZW5kZWQgdG8gYmUgaW52b2tlZCBhZnRlciBvbmUKLSAg
ICAqIG9yIG1vcmUgaW52b2NhdGlvbnMgb2YgdGhlIDxjb2RlPlJlZ2V4TWF0Y2hlcjo6YXBwZW5k
UmVwbGFjZW1lbnQoKTwvY29kZT4uCisgICAgKiB0byB0aGUgZGVzdGluYXRpb24gc3RyaW5nLiBg
YXBwZW5kVGFpbCgpYCBpcyBpbnRlbmRlZCB0byBiZSBpbnZva2VkIGFmdGVyIG9uZQorICAgICog
b3IgbW9yZSBpbnZvY2F0aW9ucyBvZiB0aGUgYFJlZ2V4TWF0Y2hlcjo6YXBwZW5kUmVwbGFjZW1l
bnQoKWAuCiAgICAgKgogICAgICogIEBwYXJhbSBkZXN0IEEgVW5pY29kZVN0cmluZyB0byB3aGlj
aCB0aGUgcmVzdWx0cyBvZiB0aGUgZmluZC1hbmQtcmVwbGFjZSBhcmUgYXBwZW5kZWQuCiAgICAg
KiAgQHJldHVybiAgdGhlIGRlc3RpbmF0aW9uIHN0cmluZy4KQEAgLTE1MzUsOCArMTUyOSw4IEBA
IGNsYXNzIFVfSTE4Tl9BUEkgUmVnZXhNYXRjaGVyIFVfRklOQUwgOiBwdWJsaWMgVU9iamVjdCB7
CiAgICAvKioKICAgICAqIEFzIHRoZSBmaW5hbCBzdGVwIGluIGEgZmluZC1hbmQtcmVwbGFjZSBv
cGVyYXRpb24sIGFwcGVuZCB0aGUgcmVtYWluZGVyCiAgICAgKiBvZiB0aGUgaW5wdXQgc3RyaW5n
LCBzdGFydGluZyBhdCB0aGUgcG9zaXRpb24gZm9sbG93aW5nIHRoZSBsYXN0IGFwcGVuZFJlcGxh
Y2VtZW50KCksCi0gICAgKiB0byB0aGUgZGVzdGluYXRpb24gc3RyaW5nLiA8Y29kZT5hcHBlbmRU
YWlsKCk8L2NvZGU+IGlzIGludGVuZGVkIHRvIGJlIGludm9rZWQgYWZ0ZXIgb25lCi0gICAgKiBv
ciBtb3JlIGludm9jYXRpb25zIG9mIHRoZSA8Y29kZT5SZWdleE1hdGNoZXI6OmFwcGVuZFJlcGxh
Y2VtZW50KCk8L2NvZGU+LgorICAgICogdG8gdGhlIGRlc3RpbmF0aW9uIHN0cmluZy4gYGFwcGVu
ZFRhaWwoKWAgaXMgaW50ZW5kZWQgdG8gYmUgaW52b2tlZCBhZnRlciBvbmUKKyAgICAqIG9yIG1v
cmUgaW52b2NhdGlvbnMgb2YgdGhlIGBSZWdleE1hdGNoZXI6OmFwcGVuZFJlcGxhY2VtZW50KClg
LgogICAgICoKICAgICAqICBAcGFyYW0gZGVzdCBBIG11dGFibGUgVVRleHQgdG8gd2hpY2ggdGhl
IHJlc3VsdHMgb2YgdGhlIGZpbmQtYW5kLXJlcGxhY2UgYXJlIGFwcGVuZGVkLgogICAgICogICAg
ICAgICAgICAgICBNdXN0IG5vdCBiZSBOVUxMLgpAQCAtMTU0OSw3ICsxNTQzLDcgQEAgY2xhc3Mg
VV9JMThOX0FQSSBSZWdleE1hdGNoZXIgVV9GSU5BTCA6IHB1YmxpYyBVT2JqZWN0IHsKIAogCiAg
ICAgLyoqCi0gICAgICogU3BsaXQgYSBzdHJpbmcgaW50byBmaWVsZHMuICBTb21ld2hhdCBsaWtl
IHNwbGl0KCkgZnJvbSBQZXJsLgorICAgICAqIFNwbGl0IGEgc3RyaW5nIGludG8gZmllbGRzLiAg
U29tZXdoYXQgbGlrZSAlc3BsaXQoKSBmcm9tIFBlcmwuCiAgICAgICogVGhlIHBhdHRlcm4gbWF0
Y2hlcyBpZGVudGlmeSBkZWxpbWl0ZXJzIHRoYXQgc2VwYXJhdGUgdGhlIGlucHV0CiAgICAgICog
IGludG8gZmllbGRzLiAgVGhlIGlucHV0IGRhdGEgYmV0d2VlbiB0aGUgbWF0Y2hlcyBiZWNvbWVz
IHRoZQogICAgICAqICBmaWVsZHMgdGhlbXNlbHZlcy4KQEAgLTE1NzgsNyArMTU3Miw3IEBAIGNs
YXNzIFVfSTE4Tl9BUEkgUmVnZXhNYXRjaGVyIFVfRklOQUwgOiBwdWJsaWMgVU9iamVjdCB7CiAK
IAogICAgIC8qKgotICAgICAqIFNwbGl0IGEgc3RyaW5nIGludG8gZmllbGRzLiAgU29tZXdoYXQg
bGlrZSBzcGxpdCgpIGZyb20gUGVybC4KKyAgICAgKiBTcGxpdCBhIHN0cmluZyBpbnRvIGZpZWxk
cy4gIFNvbWV3aGF0IGxpa2UgJXNwbGl0KCkgZnJvbSBQZXJsLgogICAgICAqIFRoZSBwYXR0ZXJu
IG1hdGNoZXMgaWRlbnRpZnkgZGVsaW1pdGVycyB0aGF0IHNlcGFyYXRlIHRoZSBpbnB1dAogICAg
ICAqICBpbnRvIGZpZWxkcy4gIFRoZSBpbnB1dCBkYXRhIGJldHdlZW4gdGhlIG1hdGNoZXMgYmVj
b21lcyB0aGUKICAgICAgKiAgZmllbGRzIHRoZW1zZWx2ZXMuCkBAIC0xNjEzLDE0ICsxNjA3LDE0
IEBAIGNsYXNzIFVfSTE4Tl9BUEkgUmVnZXhNYXRjaGVyIFVfRklOQUwgOiBwdWJsaWMgVU9iamVj
dCB7CiAgICAgKiAgIGluZmluaXRlIGxvb3AuCiAgICAgKiAgIFdoZW4gYSBsaW1pdCBpcyBzZXQg
YSBtYXRjaCBvcGVyYXRpb24gd2lsbCBmYWlsIHdpdGggYW4gZXJyb3IgaWYgdGhlCiAgICAgKiAg
IGxpbWl0IGlzIGV4Y2VlZGVkLgotICAgICogICA8cD4KKyAgICAqCiAgICAgKiAgIFRoZSB1bml0
cyBvZiB0aGUgbGltaXQgYXJlIHN0ZXBzIG9mIHRoZSBtYXRjaCBlbmdpbmUuCiAgICAgKiAgIENv
cnJlc3BvbmRlbmNlIHdpdGggYWN0dWFsIHByb2Nlc3NvciB0aW1lIHdpbGwgZGVwZW5kIG9uIHRo
ZSBzcGVlZAogICAgICogICBvZiB0aGUgcHJvY2Vzc29yIGFuZCB0aGUgZGV0YWlscyBvZiB0aGUg
c3BlY2lmaWMgcGF0dGVybiwgYnV0IHdpbGwKICAgICAqICAgdHlwaWNhbGx5IGJlIG9uIHRoZSBv
cmRlciBvZiBtaWxsaXNlY29uZHMuCi0gICAgKiAgIDxwPgorICAgICoKICAgICAqICAgQnkgZGVm
YXVsdCwgdGhlIG1hdGNoaW5nIHRpbWUgaXMgbm90IGxpbWl0ZWQuCi0gICAgKiAgIDxwPgorICAg
ICoKICAgICAqCiAgICAgKiAgIEBwYXJhbSAgIGxpbWl0ICAgICAgIFRoZSBsaW1pdCB2YWx1ZSwg
b3IgMCBmb3Igbm8gbGltaXQuCiAgICAgKiAgIEBwYXJhbSAgIHN0YXR1cyAgICAgIEEgcmVmZXJl
bmNlIHRvIGEgVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMuCkBAIC0xNjM5LDE2ICsx
NjMzLDE2IEBAIGNsYXNzIFVfSTE4Tl9BUEkgUmVnZXhNYXRjaGVyIFVfRklOQUwgOiBwdWJsaWMg
VU9iamVjdCB7CiAgIC8qKgogICAgICogIFNldCB0aGUgYW1vdW50IG9mIGhlYXAgc3RvcmFnZSBh
dmFpbGFibGUgZm9yIHVzZSBieSB0aGUgbWF0Y2ggYmFja3RyYWNraW5nIHN0YWNrLgogICAgICog
IFRoZSBtYXRjaGVyIGlzIGFsc28gcmVzZXQsIGRpc2NhcmRpbmcgYW55IHJlc3VsdHMgZnJvbSBw
cmV2aW91cyBtYXRjaGVzLgotICAgICogIDxwPgorICAgICoKICAgICAqICBJQ1UgdXNlcyBhIGJh
Y2t0cmFja2luZyByZWd1bGFyIGV4cHJlc3Npb24gZW5naW5lLCB3aXRoIHRoZSBiYWNrdHJhY2sg
c3RhY2sKICAgICAqICBtYWludGFpbmVkIG9uIHRoZSBoZWFwLiAgVGhpcyBmdW5jdGlvbiBzZXRz
IHRoZSBsaW1pdCB0byB0aGUgYW1vdW50IG9mIG1lbW9yeQotICAgICogIHRoYXQgY2FuIGJlIHVz
ZWQgIGZvciB0aGlzIHB1cnBvc2UuICBBIGJhY2t0cmFja2luZyBzdGFjayBvdmVyZmxvdyB3aWxs
CisgICAgKiAgdGhhdCBjYW4gYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLiAgQSBiYWNrdHJhY2tp
bmcgc3RhY2sgb3ZlcmZsb3cgd2lsbAogICAgICogIHJlc3VsdCBpbiBhbiBlcnJvciBmcm9tIHRo
ZSBtYXRjaCBvcGVyYXRpb24gdGhhdCBjYXVzZWQgaXQuCi0gICAgKiAgPHA+CisgICAgKgogICAg
ICogIEEgbGltaXQgaXMgZGVzaXJhYmxlIGJlY2F1c2UgYSBtYWxpY2lvdXMgb3IgcG9vcmx5IGRl
c2lnbmVkIHBhdHRlcm4gY2FuIHVzZQogICAgICogIGV4Y2Vzc2l2ZSBtZW1vcnksIHBvdGVudGlh
bGx5IGNyYXNoaW5nIHRoZSBwcm9jZXNzLiAgQSBsaW1pdCBpcyBlbmFibGVkCiAgICAgKiAgYnkg
ZGVmYXVsdC4KLSAgICAqICA8cD4KKyAgICAqCiAgICAgKiAgQHBhcmFtIGxpbWl0ICBUaGUgbWF4
aW11bSBzaXplLCBpbiBieXRlcywgb2YgdGhlIG1hdGNoaW5nIGJhY2t0cmFjayBzdGFjay4KICAg
ICAqICAgICAgICAgICAgICAgIEEgdmFsdWUgb2YgemVybyBtZWFucyBubyBsaW1pdC4KICAgICAq
ICAgICAgICAgICAgICAgIFRoZSBsaW1pdCBtdXN0IGJlIGdyZWF0ZXIgb3IgZXF1YWwgdG8gemVy
by4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvcmVnaW9uLmggYi9Tb3VyY2Uv
V1RGL2ljdS91bmljb2RlL3JlZ2lvbi5oCmluZGV4IDgwYjI5MjllOWYwMGMzYzYzYjFkZTYzMjM1
OGExZTEwNGQ0MTkwNGQuLjQwMTQwMjVmNmYyMzcxNTVmMDMxZDNkN2JiMmU0ODMwOTg5YTU2MjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvcmVnaW9uLmgKKysrIGIvU291cmNl
L1dURi9pY3UvdW5pY29kZS9yZWdpb24uaApAQCAtMTkyLDcgKzE5Miw3IEBAIGNsYXNzIFVfSTE4
Tl9BUEkgUmVnaW9uIDogcHVibGljIFVPYmplY3QgewogICAgIGNoYXIgaWRbNF07CiAgICAgVW5p
Y29kZVN0cmluZyBpZFN0cjsKICAgICBpbnQzMl90IGNvZGU7Ci0gICAgVVJlZ2lvblR5cGUgdHlw
ZTsKKyAgICBVUmVnaW9uVHlwZSBmVHlwZTsKICAgICBSZWdpb24gKmNvbnRhaW5pbmdSZWdpb247
CiAgICAgVVZlY3RvciAqY29udGFpbmVkUmVnaW9uczsKICAgICBVVmVjdG9yICpwcmVmZXJyZWRW
YWx1ZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3JlbGRhdGVmbXQuaCBi
L1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvcmVsZGF0ZWZtdC5oCmluZGV4IDA5ZDk2MjBiZTViMDYz
MWRmODdiMGU0NGNhM2QxZDMzMzdkMTIwM2QuLjE2YWU5MWFkMDM0YzM2MjJjYmU1NTRjMzhiOGNl
ZTJhNWQ3MzllMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvcmVsZGF0ZWZt
dC5oCisrKyBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvcmVsZGF0ZWZtdC5oCkBAIC0xOSw2ICsx
OSw3IEBACiAjaW5jbHVkZSAidW5pY29kZS91ZGlzcGxheWNvbnRleHQuaCIKICNpbmNsdWRlICJ1
bmljb2RlL3VyZWxkYXRlZm10LmgiCiAjaW5jbHVkZSAidW5pY29kZS9sb2NpZC5oIgorI2luY2x1
ZGUgInVuaWNvZGUvZm9ybWF0dGVkdmFsdWUuaCIKIAogLyoqCiAgKiBcZmlsZQpAQCAtMTY1LDEy
ICsxNjYsMjAgQEAgdHlwZWRlZiBlbnVtIFVEYXRlQWJzb2x1dGVVbml0IHsKICAgICAgKi8KICAg
ICBVREFUX0FCU09MVVRFX05PVywKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisgICAgLyoq
CisgICAgICogUXVhcnRlcgorICAgICAqIEBkcmFmdCBJQ1UgNjMKKyAgICAgKi8KKyAgICBVREFU
X0FCU09MVVRFX1FVQVJURVIsCisjZW5kaWYgLy8gVV9ISURFX0RSQUZUX0FQSQorCiAjaWZuZGVm
IFVfSElERV9ERVBSRUNBVEVEX0FQSQogICAgIC8qKgogICAgICAqIE9uZSBtb3JlIHRoYW4gdGhl
IGhpZ2hlc3Qgbm9ybWFsIFVEYXRlQWJzb2x1dGVVbml0IHZhbHVlLgogICAgICAqIEBkZXByZWNh
dGVkIElDVSA1OCBUaGUgbnVtZXJpYyB2YWx1ZSBtYXkgY2hhbmdlIG92ZXIgdGltZSwgc2VlIElD
VSB0aWNrZXQgIzEyNDIwLgogICAgICAqLwotICAgIFVEQVRfQUJTT0xVVEVfVU5JVF9DT1VOVAor
ICAgIFVEQVRfQUJTT0xVVEVfVU5JVF9DT1VOVCA9IFVEQVRfQUJTT0xVVEVfTk9XICsgMgogI2Vu
ZGlmICAvLyBVX0hJREVfREVQUkVDQVRFRF9BUEkKIH0gVURhdGVBYnNvbHV0ZVVuaXQ7CiAKQEAg
LTIzNyw2ICsyNDYsNzIgQEAgY2xhc3MgU2hhcmVkUGx1cmFsUnVsZXM7CiBjbGFzcyBTaGFyZWRC
cmVha0l0ZXJhdG9yOwogY2xhc3MgTnVtYmVyRm9ybWF0OwogY2xhc3MgVW5pY29kZVN0cmluZzsK
K2NsYXNzIEZvcm1hdHRlZFJlbGF0aXZlRGF0ZVRpbWVEYXRhOworCisjaWZuZGVmIFVfSElERV9E
UkFGVF9BUEkKKy8qKgorICogQW4gaW1tdXRhYmxlIGNsYXNzIGNvbnRhaW5pbmcgdGhlIHJlc3Vs
dCBvZiBhIHJlbGF0aXZlIGRhdGV0aW1lIGZvcm1hdHRpbmcgb3BlcmF0aW9uLgorICoKKyAqIElu
c3RhbmNlcyBvZiB0aGlzIGNsYXNzIGFyZSBpbW11dGFibGUgYW5kIHRocmVhZC1zYWZlLgorICoK
KyAqIE5vdCBpbnRlbmRlZCBmb3IgcHVibGljIHN1YmNsYXNzaW5nLgorICoKKyAqIEBkcmFmdCBJ
Q1UgNjQKKyAqLworY2xhc3MgVV9JMThOX0FQSSBGb3JtYXR0ZWRSZWxhdGl2ZURhdGVUaW1lIDog
cHVibGljIFVNZW1vcnksIHB1YmxpYyBGb3JtYXR0ZWRWYWx1ZSB7CisgIHB1YmxpYzoKKyAgICAv
KioKKyAgICAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yOyBtYWtlcyBhbiBlbXB0eSBGb3JtYXR0ZWRS
ZWxhdGl2ZURhdGVUaW1lLgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBGb3Jt
YXR0ZWRSZWxhdGl2ZURhdGVUaW1lKCkgOiBmRGF0YShudWxscHRyKSwgZkVycm9yQ29kZShVX0lO
VkFMSURfU1RBVEVfRVJST1IpIHt9CisKKyAgICAvKioKKyAgICAgKiBNb3ZlIGNvbnN0cnVjdG9y
OiBMZWF2ZXMgdGhlIHNvdXJjZSBGb3JtYXR0ZWRSZWxhdGl2ZURhdGVUaW1lIGluIGFuIHVuZGVm
aW5lZCBzdGF0ZS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgRm9ybWF0dGVk
UmVsYXRpdmVEYXRlVGltZShGb3JtYXR0ZWRSZWxhdGl2ZURhdGVUaW1lJiYgc3JjKSBVX05PRVhD
RVBUOworCisgICAgLyoqCisgICAgICogRGVzdHJ1Y3QgYW4gaW5zdGFuY2Ugb2YgRm9ybWF0dGVk
UmVsYXRpdmVEYXRlVGltZS4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgdmly
dHVhbCB+Rm9ybWF0dGVkUmVsYXRpdmVEYXRlVGltZSgpIFVfT1ZFUlJJREU7CisKKyAgICAvKiog
Q29weWluZyBub3Qgc3VwcG9ydGVkOyB1c2UgbW92ZSBjb25zdHJ1Y3RvciBpbnN0ZWFkLiAqLwor
ICAgIEZvcm1hdHRlZFJlbGF0aXZlRGF0ZVRpbWUoY29uc3QgRm9ybWF0dGVkUmVsYXRpdmVEYXRl
VGltZSYpID0gZGVsZXRlOworCisgICAgLyoqIENvcHlpbmcgbm90IHN1cHBvcnRlZDsgdXNlIG1v
dmUgYXNzaWdubWVudCBpbnN0ZWFkLiAqLworICAgIEZvcm1hdHRlZFJlbGF0aXZlRGF0ZVRpbWUm
IG9wZXJhdG9yPShjb25zdCBGb3JtYXR0ZWRSZWxhdGl2ZURhdGVUaW1lJikgPSBkZWxldGU7CisK
KyAgICAvKioKKyAgICAgKiBNb3ZlIGFzc2lnbm1lbnQ6IExlYXZlcyB0aGUgc291cmNlIEZvcm1h
dHRlZFJlbGF0aXZlRGF0ZVRpbWUgaW4gYW4gdW5kZWZpbmVkIHN0YXRlLgorICAgICAqIEBkcmFm
dCBJQ1UgNjQKKyAgICAgKi8KKyAgICBGb3JtYXR0ZWRSZWxhdGl2ZURhdGVUaW1lJiBvcGVyYXRv
cj0oRm9ybWF0dGVkUmVsYXRpdmVEYXRlVGltZSYmIHNyYykgVV9OT0VYQ0VQVDsKKworICAgIC8q
KiBAY29weWRvYyBGb3JtYXR0ZWRWYWx1ZTo6dG9TdHJpbmcoKSAqLworICAgIFVuaWNvZGVTdHJp
bmcgdG9TdHJpbmcoVUVycm9yQ29kZSYgc3RhdHVzKSBjb25zdCBVX09WRVJSSURFOworCisgICAg
LyoqIEBjb3B5ZG9jIEZvcm1hdHRlZFZhbHVlOjp0b1RlbXBTdHJpbmcoKSAqLworICAgIFVuaWNv
ZGVTdHJpbmcgdG9UZW1wU3RyaW5nKFVFcnJvckNvZGUmIHN0YXR1cykgY29uc3QgVV9PVkVSUklE
RTsKKworICAgIC8qKiBAY29weWRvYyBGb3JtYXR0ZWRWYWx1ZTo6YXBwZW5kVG8oKSAqLworICAg
IEFwcGVuZGFibGUgJmFwcGVuZFRvKEFwcGVuZGFibGUmIGFwcGVuZGFibGUsIFVFcnJvckNvZGUm
IHN0YXR1cykgY29uc3QgVV9PVkVSUklERTsKKworICAgIC8qKiBAY29weWRvYyBGb3JtYXR0ZWRW
YWx1ZTo6bmV4dFBvc2l0aW9uKCkgKi8KKyAgICBVQm9vbCBuZXh0UG9zaXRpb24oQ29uc3RyYWlu
ZWRGaWVsZFBvc2l0aW9uJiBjZnBvcywgVUVycm9yQ29kZSYgc3RhdHVzKSBjb25zdCBVX09WRVJS
SURFOworCisgIHByaXZhdGU6CisgICAgRm9ybWF0dGVkUmVsYXRpdmVEYXRlVGltZURhdGEgKmZE
YXRhOworICAgIFVFcnJvckNvZGUgZkVycm9yQ29kZTsKKyAgICBleHBsaWNpdCBGb3JtYXR0ZWRS
ZWxhdGl2ZURhdGVUaW1lKEZvcm1hdHRlZFJlbGF0aXZlRGF0ZVRpbWVEYXRhICpyZXN1bHRzKQor
ICAgICAgICA6IGZEYXRhKHJlc3VsdHMpLCBmRXJyb3JDb2RlKFVfWkVST19FUlJPUikge30KKyAg
ICBleHBsaWNpdCBGb3JtYXR0ZWRSZWxhdGl2ZURhdGVUaW1lKFVFcnJvckNvZGUgZXJyb3JDb2Rl
KQorICAgICAgICA6IGZEYXRhKG51bGxwdHIpLCBmRXJyb3JDb2RlKGVycm9yQ29kZSkge30KKyAg
ICBmcmllbmQgY2xhc3MgUmVsYXRpdmVEYXRlVGltZUZvcm1hdHRlcjsKK307CisjZW5kaWYgIC8q
IFVfSElERV9EUkFGVF9BUEkgKi8KIAogLyoqCiAgKiBGb3JtYXRzIHNpbXBsZSByZWxhdGl2ZSBk
YXRlcy4gVGhlcmUgYXJlIHR3byB0eXBlcyBvZiByZWxhdGl2ZSBkYXRlcyB0aGF0CkBAIC0zMjgs
NyArNDAzLDcgQEAgY2xhc3MgVV9JMThOX0FQSSBSZWxhdGl2ZURhdGVUaW1lRm9ybWF0dGVyIDog
cHVibGljIFVPYmplY3QgewogICAgICAqIEBwYXJhbSBuZlRvQWRvcHQgQ29uc3RydWN0ZWQgb2Jq
ZWN0IHRha2VzIG93bmVyc2hpcCBvZiB0aGlzIHBvaW50ZXIuCiAgICAgICogICBJdCBpcyBhbiBl
cnJvciBmb3IgY2FsbGVyIHRvIGRlbGV0ZSB0aGlzIHBvaW50ZXIgb3IgY2hhbmdlIGl0cwogICAg
ICAqICAgY29udGVudHMgYWZ0ZXIgY2FsbGluZyB0aGlzIGNvbnN0cnVjdG9yLgotICAgICAqIEBz
dGF0dXMgQW55IGVycm9yIGlzIHJldHVybmVkIGhlcmUuCisgICAgICogQHBhcmFtIHN0YXR1cyBB
bnkgZXJyb3IgaXMgcmV0dXJuZWQgaGVyZS4KICAgICAgKiBAc3RhYmxlIElDVSA1MwogICAgICAq
LwogICAgIFJlbGF0aXZlRGF0ZVRpbWVGb3JtYXR0ZXIoCkBAIC0zNDYsNyArNDIxLDcgQEAgY2xh
c3MgVV9JMThOX0FQSSBSZWxhdGl2ZURhdGVUaW1lRm9ybWF0dGVyIDogcHVibGljIFVPYmplY3Qg
ewogICAgICAqIEBwYXJhbSBzdHlsZSB0aGUgZm9ybWF0IHN0eWxlLiBUaGUgVURBVF9SRUxBVElW
RSBiaXQgZmllbGQgaGFzIG5vIGVmZmVjdC4KICAgICAgKiBAcGFyYW0gY2FwaXRhbGl6YXRpb25D
b250ZXh0IEEgdmFsdWUgZnJvbSBVRGlzcGxheUNvbnRleHQgdGhhdCBwZXJ0YWlucyB0bwogICAg
ICAqIGNhcGl0YWxpemF0aW9uLgotICAgICAqIEBzdGF0dXMgQW55IGVycm9yIGlzIHJldHVybmVk
IGhlcmUuIAorICAgICAqIEBwYXJhbSBzdGF0dXMgQW55IGVycm9yIGlzIHJldHVybmVkIGhlcmUu
CiAgICAgICogQHN0YWJsZSBJQ1UgNTQKICAgICAgKi8KICAgICBSZWxhdGl2ZURhdGVUaW1lRm9y
bWF0dGVyKApAQCAtMzc4LDYgKzQ1MywxMCBAQCBjbGFzcyBVX0kxOE5fQVBJIFJlbGF0aXZlRGF0
ZVRpbWVGb3JtYXR0ZXIgOiBwdWJsaWMgVU9iamVjdCB7CiAgICAgLyoqCiAgICAgICogRm9ybWF0
cyBhIHJlbGF0aXZlIGRhdGUgd2l0aCBhIHF1YW50aXR5IHN1Y2ggYXMgImluIDUgZGF5cyIgb3IK
ICAgICAgKiAiMyBtb250aHMgYWdvIgorICAgICAqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJu
cyBhIFN0cmluZy4gVG8gZ2V0IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisgICAgICogZm9y
bWF0dGluZyByZXN1bHQsIHVzZSBmb3JtYXRUb1ZhbHVlKCkuCisgICAgICoKICAgICAgKiBAcGFy
YW0gcXVhbnRpdHkgVGhlIG51bWVyaWNhbCBhbW91bnQgZS5nIDUuIFRoaXMgdmFsdWUgaXMgZm9y
bWF0dGVkCiAgICAgICogYWNjb3JkaW5nIHRvIHRoaXMgb2JqZWN0J3MgTnVtYmVyRm9ybWF0IG9i
amVjdC4KICAgICAgKiBAcGFyYW0gZGlyZWN0aW9uIE5FWFQgbWVhbnMgYSBmdXR1cmUgcmVsYXRp
dmUgZGF0ZTsgTEFTVCBtZWFucyBhIHBhc3QKQEAgLTM5Nyw4ICs0NzYsMzcgQEAgY2xhc3MgVV9J
MThOX0FQSSBSZWxhdGl2ZURhdGVUaW1lRm9ybWF0dGVyIDogcHVibGljIFVPYmplY3QgewogICAg
ICAgICAgICAgVW5pY29kZVN0cmluZyYgYXBwZW5kVG8sCiAgICAgICAgICAgICBVRXJyb3JDb2Rl
JiBzdGF0dXMpIGNvbnN0OwogCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKyAgICAvKioKKyAg
ICAgKiBGb3JtYXRzIGEgcmVsYXRpdmUgZGF0ZSB3aXRoIGEgcXVhbnRpdHkgc3VjaCBhcyAiaW4g
NSBkYXlzIiBvcgorICAgICAqICIzIG1vbnRocyBhZ28iCisgICAgICoKKyAgICAgKiBUaGlzIG1l
dGhvZCByZXR1cm5zIGEgRm9ybWF0dGVkUmVsYXRpdmVEYXRlVGltZSwgd2hpY2ggZXhwb3NlcyBt
b3JlCisgICAgICogaW5mb3JtYXRpb24gdGhhbiB0aGUgU3RyaW5nIHJldHVybmVkIGJ5IGZvcm1h
dCgpLgorICAgICAqCisgICAgICogQHBhcmFtIHF1YW50aXR5IFRoZSBudW1lcmljYWwgYW1vdW50
IGUuZyA1LiBUaGlzIHZhbHVlIGlzIGZvcm1hdHRlZAorICAgICAqIGFjY29yZGluZyB0byB0aGlz
IG9iamVjdCdzIE51bWJlckZvcm1hdCBvYmplY3QuCisgICAgICogQHBhcmFtIGRpcmVjdGlvbiBO
RVhUIG1lYW5zIGEgZnV0dXJlIHJlbGF0aXZlIGRhdGU7IExBU1QgbWVhbnMgYSBwYXN0CisgICAg
ICogcmVsYXRpdmUgZGF0ZS4gSWYgZGlyZWN0aW9uIGlzIGFueXRoaW5nIGVsc2UsIHRoaXMgbWV0
aG9kIHNldHMKKyAgICAgKiBzdGF0dXMgdG8gVV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SLgorICAg
ICAqIEBwYXJhbSB1bml0IHRoZSB1bml0IGUuZyBkYXk/IG1vbnRoPyB5ZWFyPworICAgICAqIEBw
YXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUgcmV0dXJuZWQgaGVyZS4KKyAgICAgKiBAcmV0dXJu
IFRoZSBmb3JtYXR0ZWQgcmVsYXRpdmUgZGF0ZXRpbWUKKyAgICAgKiBAZHJhZnQgSUNVIDY0Cisg
ICAgICovCisgICAgRm9ybWF0dGVkUmVsYXRpdmVEYXRlVGltZSBmb3JtYXRUb1ZhbHVlKAorICAg
ICAgICAgICAgZG91YmxlIHF1YW50aXR5LAorICAgICAgICAgICAgVURhdGVEaXJlY3Rpb24gZGly
ZWN0aW9uLAorICAgICAgICAgICAgVURhdGVSZWxhdGl2ZVVuaXQgdW5pdCwKKyAgICAgICAgICAg
IFVFcnJvckNvZGUmIHN0YXR1cykgY29uc3Q7CisjZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkg
Ki8KKwogICAgIC8qKgogICAgICAqIEZvcm1hdHMgYSByZWxhdGl2ZSBkYXRlIHdpdGhvdXQgYSBx
dWFudGl0eS4KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBTdHJpbmcuIFRv
IGdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZQorICAgICAqIGZvcm1hdHRpbmcgcmVzdWx0
LCB1c2UgZm9ybWF0VG9WYWx1ZSgpLgorICAgICAqCiAgICAgICogQHBhcmFtIGRpcmVjdGlvbiBO
RVhULCBMQVNULCBUSElTLCBldGMuCiAgICAgICogQHBhcmFtIHVuaXQgZS5nIFNBVFVSREFZLCBE
QVksIE1PTlRICiAgICAgICogQHBhcmFtIGFwcGVuZFRvIFRoZSBzdHJpbmcgdG8gd2hpY2ggdGhl
IGZvcm1hdHRlZCByZXN1bHQgd2lsbCBiZQpAQCAtNDE1LDEwICs1MjMsMzUgQEAgY2xhc3MgVV9J
MThOX0FQSSBSZWxhdGl2ZURhdGVUaW1lRm9ybWF0dGVyIDogcHVibGljIFVPYmplY3QgewogICAg
ICAgICAgICAgVW5pY29kZVN0cmluZyYgYXBwZW5kVG8sCiAgICAgICAgICAgICBVRXJyb3JDb2Rl
JiBzdGF0dXMpIGNvbnN0OwogCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKyAgICAvKioKKyAg
ICAgKiBGb3JtYXRzIGEgcmVsYXRpdmUgZGF0ZSB3aXRob3V0IGEgcXVhbnRpdHkuCisgICAgICoK
KyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgRm9ybWF0dGVkUmVsYXRpdmVEYXRlVGltZSwg
d2hpY2ggZXhwb3NlcyBtb3JlCisgICAgICogaW5mb3JtYXRpb24gdGhhbiB0aGUgU3RyaW5nIHJl
dHVybmVkIGJ5IGZvcm1hdCgpLgorICAgICAqCisgICAgICogSWYgdGhlIHN0cmluZyBpcyBub3Qg
YXZhaWxhYmxlIGluIHRoZSByZXF1ZXN0ZWQgbG9jYWxlLCB0aGUgcmV0dXJuCisgICAgICogdmFs
dWUgd2lsbCBiZSBlbXB0eSAoY2FsbGluZyB0b1N0cmluZyB3aWxsIGdpdmUgYW4gZW1wdHkgc3Ry
aW5nKS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBkaXJlY3Rpb24gTkVYVCwgTEFTVCwgVEhJUywg
ZXRjLgorICAgICAqIEBwYXJhbSB1bml0IGUuZyBTQVRVUkRBWSwgREFZLCBNT05USAorICAgICAq
IEBwYXJhbSBzdGF0dXMgSUNVIGVycm9yIGNvZGUgcmV0dXJuZWQgaGVyZS4KKyAgICAgKiBAcmV0
dXJuIFRoZSBmb3JtYXR0ZWQgcmVsYXRpdmUgZGF0ZXRpbWUKKyAgICAgKiBAZHJhZnQgSUNVIDY0
CisgICAgICovCisgICAgRm9ybWF0dGVkUmVsYXRpdmVEYXRlVGltZSBmb3JtYXRUb1ZhbHVlKAor
ICAgICAgICAgICAgVURhdGVEaXJlY3Rpb24gZGlyZWN0aW9uLAorICAgICAgICAgICAgVURhdGVB
YnNvbHV0ZVVuaXQgdW5pdCwKKyAgICAgICAgICAgIFVFcnJvckNvZGUmIHN0YXR1cykgY29uc3Q7
CisjZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKwogICAgIC8qKgogICAgICAqIEZvcm1h
dCBhIGNvbWJpbmF0aW9uIG9mIFVSZWxhdGl2ZURhdGVUaW1lVW5pdCBhbmQgbnVtZXJpYyBvZmZz
ZXQKICAgICAgKiB1c2luZyBhIG51bWVyaWMgc3R5bGUsIGUuZy4gIjEgd2VlayBhZ28iLCAiaW4g
MSB3ZWVrIiwKICAgICAgKiAiNSB3ZWVrcyBhZ28iLCAiaW4gNSB3ZWVrcyIuCisgICAgICoKKyAg
ICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgU3RyaW5nLiBUbyBnZXQgbW9yZSBpbmZvcm1hdGlv
biBhYm91dCB0aGUKKyAgICAgKiBmb3JtYXR0aW5nIHJlc3VsdCwgdXNlIGZvcm1hdE51bWVyaWNU
b1ZhbHVlKCkuCiAgICAgICogCiAgICAgICogQHBhcmFtIG9mZnNldCAgICBUaGUgc2lnbmVkIG9m
ZnNldCBmb3IgdGhlIHNwZWNpZmllZCB1bml0LiBUaGlzCiAgICAgICogICAgICAgICAgICAgICAg
ICB3aWxsIGJlIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhpcyBvYmplY3QncwpAQCAtNDM4LDYg
KzU3MSwzMSBAQCBjbGFzcyBVX0kxOE5fQVBJIFJlbGF0aXZlRGF0ZVRpbWVGb3JtYXR0ZXIgOiBw
dWJsaWMgVU9iamVjdCB7CiAgICAgICAgICAgICBVbmljb2RlU3RyaW5nJiBhcHBlbmRUbywKICAg
ICAgICAgICAgIFVFcnJvckNvZGUmIHN0YXR1cykgY29uc3Q7CiAKKyNpZm5kZWYgVV9ISURFX0RS
QUZUX0FQSQorICAgIC8qKgorICAgICAqIEZvcm1hdCBhIGNvbWJpbmF0aW9uIG9mIFVSZWxhdGl2
ZURhdGVUaW1lVW5pdCBhbmQgbnVtZXJpYyBvZmZzZXQKKyAgICAgKiB1c2luZyBhIG51bWVyaWMg
c3R5bGUsIGUuZy4gIjEgd2VlayBhZ28iLCAiaW4gMSB3ZWVrIiwKKyAgICAgKiAiNSB3ZWVrcyBh
Z28iLCAiaW4gNSB3ZWVrcyIuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEg
Rm9ybWF0dGVkUmVsYXRpdmVEYXRlVGltZSwgd2hpY2ggZXhwb3NlcyBtb3JlCisgICAgICogaW5m
b3JtYXRpb24gdGhhbiB0aGUgU3RyaW5nIHJldHVybmVkIGJ5IGZvcm1hdE51bWVyaWMoKS4KKyAg
ICAgKiAKKyAgICAgKiBAcGFyYW0gb2Zmc2V0ICAgIFRoZSBzaWduZWQgb2Zmc2V0IGZvciB0aGUg
c3BlY2lmaWVkIHVuaXQuIFRoaXMKKyAgICAgKiAgICAgICAgICAgICAgICAgIHdpbGwgYmUgZm9y
bWF0dGVkIGFjY29yZGluZyB0byB0aGlzIG9iamVjdCdzCisgICAgICogICAgICAgICAgICAgICAg
ICBOdW1iZXJGb3JtYXQgb2JqZWN0LgorICAgICAqIEBwYXJhbSB1bml0ICAgICAgVGhlIHVuaXQg
dG8gdXNlIHdoZW4gZm9ybWF0dGluZyB0aGUgcmVsYXRpdmUKKyAgICAgKiAgICAgICAgICAgICAg
ICAgIGRhdGUsIGUuZy4gVURBVF9SRUxfVU5JVF9XRUVLLAorICAgICAqICAgICAgICAgICAgICAg
ICAgVURBVF9SRUxfVU5JVF9GUklEQVkuCisgICAgICogQHBhcmFtIHN0YXR1cyAgICBJQ1UgZXJy
b3IgY29kZSByZXR1cm5lZCBoZXJlLgorICAgICAqIEByZXR1cm4gICAgICAgICAgVGhlIGZvcm1h
dHRlZCByZWxhdGl2ZSBkYXRldGltZQorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAg
ICBGb3JtYXR0ZWRSZWxhdGl2ZURhdGVUaW1lIGZvcm1hdE51bWVyaWNUb1ZhbHVlKAorICAgICAg
ICAgICAgZG91YmxlIG9mZnNldCwKKyAgICAgICAgICAgIFVSZWxhdGl2ZURhdGVUaW1lVW5pdCB1
bml0LAorICAgICAgICAgICAgVUVycm9yQ29kZSYgc3RhdHVzKSBjb25zdDsKKyNlbmRpZiAgLyog
VV9ISURFX0RSQUZUX0FQSSAqLworCiAgICAgLyoqCiAgICAgICogRm9ybWF0IGEgY29tYmluYXRp
b24gb2YgVVJlbGF0aXZlRGF0ZVRpbWVVbml0IGFuZCBudW1lcmljIG9mZnNldAogICAgICAqIHVz
aW5nIGEgdGV4dCBzdHlsZSBpZiBwb3NzaWJsZSwgZS5nLiAibGFzdCB3ZWVrIiwgInRoaXMgd2Vl
ayIsCkBAIC00NDUsNiArNjAzLDkgQEAgY2xhc3MgVV9JMThOX0FQSSBSZWxhdGl2ZURhdGVUaW1l
Rm9ybWF0dGVyIDogcHVibGljIFVPYmplY3QgewogICAgICAqIHN0eWxlIGlmIG5vIGFwcHJvcHJp
YXRlIHRleHQgdGVybSBpcyBhdmFpbGFibGUgZm9yIHRoZSBzcGVjaWZpZWQKICAgICAgKiBvZmZz
ZXQgaW4gdGhlIG9iamVjdCdzIGxvY2FsZS4KICAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIHJl
dHVybnMgYSBTdHJpbmcuIFRvIGdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZQorICAgICAq
IGZvcm1hdHRpbmcgcmVzdWx0LCB1c2UgZm9ybWF0VG9WYWx1ZSgpLgorICAgICAqCiAgICAgICog
QHBhcmFtIG9mZnNldCAgICBUaGUgc2lnbmVkIG9mZnNldCBmb3IgdGhlIHNwZWNpZmllZCB1bml0
LgogICAgICAqIEBwYXJhbSB1bml0ICAgICAgVGhlIHVuaXQgdG8gdXNlIHdoZW4gZm9ybWF0dGlu
ZyB0aGUgcmVsYXRpdmUKICAgICAgKiAgICAgICAgICAgICAgICAgIGRhdGUsIGUuZy4gVURBVF9S
RUxfVU5JVF9XRUVLLApAQCAtNDYxLDYgKzYyMiwzMSBAQCBjbGFzcyBVX0kxOE5fQVBJIFJlbGF0
aXZlRGF0ZVRpbWVGb3JtYXR0ZXIgOiBwdWJsaWMgVU9iamVjdCB7CiAgICAgICAgICAgICBVbmlj
b2RlU3RyaW5nJiBhcHBlbmRUbywKICAgICAgICAgICAgIFVFcnJvckNvZGUmIHN0YXR1cykgY29u
c3Q7CiAKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQorICAgIC8qKgorICAgICAqIEZvcm1hdCBh
IGNvbWJpbmF0aW9uIG9mIFVSZWxhdGl2ZURhdGVUaW1lVW5pdCBhbmQgbnVtZXJpYyBvZmZzZXQK
KyAgICAgKiB1c2luZyBhIHRleHQgc3R5bGUgaWYgcG9zc2libGUsIGUuZy4gImxhc3Qgd2VlayIs
ICJ0aGlzIHdlZWsiLAorICAgICAqICJuZXh0IHdlZWsiLCAieWVzdGVyZGF5IiwgInRvbW9ycm93
Ii4gRmFsbHMgYmFjayB0byBudW1lcmljCisgICAgICogc3R5bGUgaWYgbm8gYXBwcm9wcmlhdGUg
dGV4dCB0ZXJtIGlzIGF2YWlsYWJsZSBmb3IgdGhlIHNwZWNpZmllZAorICAgICAqIG9mZnNldCBp
biB0aGUgb2JqZWN0J3MgbG9jYWxlLgorICAgICAqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJu
cyBhIEZvcm1hdHRlZFJlbGF0aXZlRGF0ZVRpbWUsIHdoaWNoIGV4cG9zZXMgbW9yZQorICAgICAq
IGluZm9ybWF0aW9uIHRoYW4gdGhlIFN0cmluZyByZXR1cm5lZCBieSBmb3JtYXQoKS4KKyAgICAg
KgorICAgICAqIEBwYXJhbSBvZmZzZXQgICAgVGhlIHNpZ25lZCBvZmZzZXQgZm9yIHRoZSBzcGVj
aWZpZWQgdW5pdC4KKyAgICAgKiBAcGFyYW0gdW5pdCAgICAgIFRoZSB1bml0IHRvIHVzZSB3aGVu
IGZvcm1hdHRpbmcgdGhlIHJlbGF0aXZlCisgICAgICogICAgICAgICAgICAgICAgICBkYXRlLCBl
LmcuIFVEQVRfUkVMX1VOSVRfV0VFSywKKyAgICAgKiAgICAgICAgICAgICAgICAgIFVEQVRfUkVM
X1VOSVRfRlJJREFZLgorICAgICAqIEBwYXJhbSBzdGF0dXMgICAgSUNVIGVycm9yIGNvZGUgcmV0
dXJuZWQgaGVyZS4KKyAgICAgKiBAcmV0dXJuICAgICAgICAgIFRoZSBmb3JtYXR0ZWQgcmVsYXRp
dmUgZGF0ZXRpbWUKKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgRm9ybWF0dGVk
UmVsYXRpdmVEYXRlVGltZSBmb3JtYXRUb1ZhbHVlKAorICAgICAgICAgICAgZG91YmxlIG9mZnNl
dCwKKyAgICAgICAgICAgIFVSZWxhdGl2ZURhdGVUaW1lVW5pdCB1bml0LAorICAgICAgICAgICAg
VUVycm9yQ29kZSYgc3RhdHVzKSBjb25zdDsKKyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAq
LworCiAgICAgLyoqCiAgICAgICogQ29tYmluZXMgYSByZWxhdGl2ZSBkYXRlIHN0cmluZyBhbmQg
YSB0aW1lIHN0cmluZyBpbiB0aGlzIG9iamVjdCdzCiAgICAgICogbG9jYWxlLiBUaGlzIGlzIGRv
bmUgd2l0aCB0aGUgc2FtZSBkYXRlLXRpbWUgc2VwYXJhdG9yIHVzZWQgZm9yIHRoZQpAQCAtNTEy
LDcgKzY5OCw0NSBAQCBjbGFzcyBVX0kxOE5fQVBJIFJlbGF0aXZlRGF0ZVRpbWVGb3JtYXR0ZXIg
OiBwdWJsaWMgVU9iamVjdCB7CiAgICAgICAgICAgICBOdW1iZXJGb3JtYXQgKm5mVG9BZG9wdCwK
ICAgICAgICAgICAgIEJyZWFrSXRlcmF0b3IgKmJya0l0ZXIsCiAgICAgICAgICAgICBVRXJyb3JD
b2RlICZzdGF0dXMpOwotICAgIHZvaWQgYWRqdXN0Rm9yQ29udGV4dChVbmljb2RlU3RyaW5nICYp
IGNvbnN0OworICAgIFVuaWNvZGVTdHJpbmcmIGFkanVzdEZvckNvbnRleHQoVW5pY29kZVN0cmlu
ZyAmKSBjb25zdDsKKyAgICBVQm9vbCBjaGVja05vQWRqdXN0Rm9yQ29udGV4dChVRXJyb3JDb2Rl
JiBzdGF0dXMpIGNvbnN0OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRiwgdHlwZW5hbWUuLi4g
QXJncz4KKyAgICBVbmljb2RlU3RyaW5nJiBkb0Zvcm1hdCgKKyAgICAgICAgICAgIEYgY2FsbGJh
Y2ssCisgICAgICAgICAgICBVbmljb2RlU3RyaW5nJiBhcHBlbmRUbywKKyAgICAgICAgICAgIFVF
cnJvckNvZGUmIHN0YXR1cywKKyAgICAgICAgICAgIEFyZ3MuLi4gYXJncykgY29uc3Q7CisKKyNp
Zm5kZWYgVV9ISURFX0RSQUZUX0FQSSAgLy8gZm9yIEZvcm1hdHRlZFJlbGF0aXZlRGF0ZVRpbWUK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgIEZvcm1hdHRl
ZFJlbGF0aXZlRGF0ZVRpbWUgZG9Gb3JtYXRUb1ZhbHVlKAorICAgICAgICAgICAgRiBjYWxsYmFj
aywKKyAgICAgICAgICAgIFVFcnJvckNvZGUmIHN0YXR1cywKKyAgICAgICAgICAgIEFyZ3MuLi4g
YXJncykgY29uc3Q7CisjZW5kaWYgIC8vIFVfSElERV9EUkFGVF9BUEkKKworICAgIHZvaWQgZm9y
bWF0SW1wbCgKKyAgICAgICAgICAgIGRvdWJsZSBxdWFudGl0eSwKKyAgICAgICAgICAgIFVEYXRl
RGlyZWN0aW9uIGRpcmVjdGlvbiwKKyAgICAgICAgICAgIFVEYXRlUmVsYXRpdmVVbml0IHVuaXQs
CisgICAgICAgICAgICBGb3JtYXR0ZWRSZWxhdGl2ZURhdGVUaW1lRGF0YSYgb3V0cHV0LAorICAg
ICAgICAgICAgVUVycm9yQ29kZSYgc3RhdHVzKSBjb25zdDsKKyAgICB2b2lkIGZvcm1hdEFic29s
dXRlSW1wbCgKKyAgICAgICAgICAgIFVEYXRlRGlyZWN0aW9uIGRpcmVjdGlvbiwKKyAgICAgICAg
ICAgIFVEYXRlQWJzb2x1dGVVbml0IHVuaXQsCisgICAgICAgICAgICBGb3JtYXR0ZWRSZWxhdGl2
ZURhdGVUaW1lRGF0YSYgb3V0cHV0LAorICAgICAgICAgICAgVUVycm9yQ29kZSYgc3RhdHVzKSBj
b25zdDsKKyAgICB2b2lkIGZvcm1hdE51bWVyaWNJbXBsKAorICAgICAgICAgICAgZG91YmxlIG9m
ZnNldCwKKyAgICAgICAgICAgIFVSZWxhdGl2ZURhdGVUaW1lVW5pdCB1bml0LAorICAgICAgICAg
ICAgRm9ybWF0dGVkUmVsYXRpdmVEYXRlVGltZURhdGEmIG91dHB1dCwKKyAgICAgICAgICAgIFVF
cnJvckNvZGUmIHN0YXR1cykgY29uc3Q7CisgICAgdm9pZCBmb3JtYXRSZWxhdGl2ZUltcGwoCisg
ICAgICAgICAgICBkb3VibGUgb2Zmc2V0LAorICAgICAgICAgICAgVVJlbGF0aXZlRGF0ZVRpbWVV
bml0IHVuaXQsCisgICAgICAgICAgICBGb3JtYXR0ZWRSZWxhdGl2ZURhdGVUaW1lRGF0YSYgb3V0
cHV0LAorICAgICAgICAgICAgVUVycm9yQ29kZSYgc3RhdHVzKSBjb25zdDsKIH07CiAKIFVfTkFN
RVNQQUNFX0VORApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9pY3UvdW5pY29kZS9zaW1wbGVmb3Jt
YXR0ZXIuaCBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvc2ltcGxlZm9ybWF0dGVyLmgKaW5kZXgg
ZGYwYzZmZDU3Y2FhYTc3NTE0OWIwY2U1YWNjOGNhMGJjODU5MTdlNi4uM2Y3ZDkzZGMwOTRhMThl
YmViNmYzNzEzODNhZGM4NTUwZGNjNmVlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9pY3UvdW5p
Y29kZS9zaW1wbGVmb3JtYXR0ZXIuaAorKysgYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3NpbXBs
ZWZvcm1hdHRlci5oCkBAIC0xLDMwMyArMSwzMzYgQEAKLS8vIMKpIDIwMTYgYW5kIGxhdGVyOiBV
bmljb2RlLCBJbmMuIGFuZCBvdGhlcnMuDQotLy8gTGljZW5zZSAmIHRlcm1zIG9mIHVzZTogaHR0
cDovL3d3dy51bmljb2RlLm9yZy9jb3B5cmlnaHQuaHRtbA0KLS8qDQotKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqDQotKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiwgSW50ZXJuYXRpb25hbCBCdXNpbmVz
cyBNYWNoaW5lcw0KLSogQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiBzaW1wbGVmb3JtYXR0ZXIuaA0KLSovDQot
DQotI2lmbmRlZiBfX1NJTVBMRUZPUk1BVFRFUl9IX18NCi0jZGVmaW5lIF9fU0lNUExFRk9STUFU
VEVSX0hfXw0KLQ0KLS8qKg0KLSAqIFxmaWxlDQotICogXGJyaWVmIEMrKyBBUEk6IFNpbXBsZSBm
b3JtYXR0ZXIsIG1pbmltYWwgc3Vic2V0IG9mIE1lc3NhZ2VGb3JtYXQuDQotICovDQotDQotI2lu
Y2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiDQotI2luY2x1ZGUgInVuaWNvZGUvdW5pc3RyLmgiDQot
DQotVV9OQU1FU1BBQ0VfQkVHSU4NCi0NCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9uOg0KLW5hbWVz
cGFjZSBudW1iZXIgew0KLW5hbWVzcGFjZSBpbXBsIHsNCi1jbGFzcyBTaW1wbGVNb2RpZmllcjsN
Ci19DQotfQ0KLQ0KLS8qKg0KLSAqIEZvcm1hdHMgc2ltcGxlIHBhdHRlcm5zIGxpa2UgInsxfSB3
YXMgYm9ybiBpbiB7MH0iLg0KLSAqIE1pbmltYWwgc3Vic2V0IG9mIE1lc3NhZ2VGb3JtYXQ7IGZh
c3QsIHNpbXBsZSwgbWluaW1hbCBkZXBlbmRlbmNpZXMuDQotICogU3VwcG9ydHMgb25seSBudW1i
ZXJlZCBhcmd1bWVudHMgd2l0aCBubyB0eXBlIG5vciBzdHlsZSBwYXJhbWV0ZXJzLA0KLSAqIGFu
ZCBmb3JtYXRzIG9ubHkgc3RyaW5nIHZhbHVlcy4NCi0gKiBRdW90aW5nIHZpYSBBU0NJSSBhcG9z
dHJvcGhlIGNvbXBhdGlibGUgd2l0aCBJQ1UgTWVzc2FnZUZvcm1hdCBkZWZhdWx0IGJlaGF2aW9y
Lg0KLSAqDQotICogRmFjdG9yeSBtZXRob2RzIHNldCBlcnJvciBjb2RlcyBmb3Igc3ludGF4IGVy
cm9ycw0KLSAqIGFuZCBmb3IgdG9vIGZldyBvciB0b28gbWFueSBhcmd1bWVudHMvcGxhY2Vob2xk
ZXJzLg0KLSAqDQotICogU2ltcGxlRm9ybWF0dGVyIG9iamVjdHMgYXJlIHRocmVhZC1zYWZlIGV4
Y2VwdCBmb3IgYXNzaWdubWVudCBhbmQgYXBwbHlpbmcgbmV3IHBhdHRlcm5zLg0KLSAqDQotICog
RXhhbXBsZToNCi0gKiA8cHJlPg0KLSAqIFVFcnJvckNvZGUgZXJyb3JDb2RlID0gVV9aRVJPX0VS
Uk9SOw0KLSAqIFNpbXBsZUZvcm1hdHRlciBmbXQoInsxfSAne2Jvcm59JyBpbiB7MH0iLCBlcnJv
ckNvZGUpOw0KLSAqIFVuaWNvZGVTdHJpbmcgcmVzdWx0Ow0KLSAqDQotICogLy8gT3V0cHV0OiAi
cGF1bCB7Ym9ybn0gaW4gZW5nbGFuZCINCi0gKiBmbXQuZm9ybWF0KCJlbmdsYW5kIiwgInBhdWwi
LCByZXN1bHQsIGVycm9yQ29kZSk7DQotICogPC9wcmU+DQotICoNCi0gKiBUaGlzIGNsYXNzIGlz
IG5vdCBpbnRlbmRlZCBmb3IgcHVibGljIHN1YmNsYXNzaW5nLg0KLSAqDQotICogQHNlZSBNZXNz
YWdlRm9ybWF0DQotICogQHNlZSBVTWVzc2FnZVBhdHRlcm5BcG9zdHJvcGhlTW9kZQ0KLSAqIEBz
dGFibGUgSUNVIDU3DQotICovDQotY2xhc3MgVV9DT01NT05fQVBJIFNpbXBsZUZvcm1hdHRlciBV
X0ZJTkFMIDogcHVibGljIFVNZW1vcnkgew0KLXB1YmxpYzoNCi0gICAgLyoqDQotICAgICAqIERl
ZmF1bHQgY29uc3RydWN0b3IuDQotICAgICAqIEBzdGFibGUgSUNVIDU3DQotICAgICAqLw0KLSAg
ICBTaW1wbGVGb3JtYXR0ZXIoKSA6IGNvbXBpbGVkUGF0dGVybigoY2hhcjE2X3QpMCkge30NCi0N
Ci0gICAgLyoqDQotICAgICAqIENvbnN0cnVjdHMgYSBmb3JtYXR0ZXIgZnJvbSB0aGUgcGF0dGVy
biBzdHJpbmcuDQotICAgICAqDQotICAgICAqIEBwYXJhbSBwYXR0ZXJuIFRoZSBwYXR0ZXJuIHN0
cmluZy4NCi0gICAgICogQHBhcmFtIGVycm9yQ29kZSBJQ1UgZXJyb3IgY29kZSBpbi9vdXQgcGFy
YW1ldGVyLg0KLSAgICAgKiAgICAgICAgICAgICAgICAgIE11c3QgZnVsZmlsbCBVX1NVQ0NFU1Mg
YmVmb3JlIHRoZSBmdW5jdGlvbiBjYWxsLg0KLSAgICAgKiAgICAgICAgICAgICAgICAgIFNldCB0
byBVX0lMTEVHQUxfQVJHVU1FTlRfRVJST1IgZm9yIGJhZCBhcmd1bWVudCBzeW50YXguDQotICAg
ICAqIEBzdGFibGUgSUNVIDU3DQotICAgICAqLw0KLSAgICBTaW1wbGVGb3JtYXR0ZXIoY29uc3Qg
VW5pY29kZVN0cmluZyYgcGF0dGVybiwgVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7DQotICAgICAg
ICBhcHBseVBhdHRlcm4ocGF0dGVybiwgZXJyb3JDb2RlKTsNCi0gICAgfQ0KLQ0KLSAgICAvKioN
Ci0gICAgICogQ29uc3RydWN0cyBhIGZvcm1hdHRlciBmcm9tIHRoZSBwYXR0ZXJuIHN0cmluZy4N
Ci0gICAgICogVGhlIG51bWJlciBvZiBhcmd1bWVudHMgY2hlY2tlZCBhZ2FpbnN0IHRoZSBnaXZl
biBsaW1pdHMgaXMgdGhlDQotICAgICAqIGhpZ2hlc3QgYXJndW1lbnQgbnVtYmVyIHBsdXMgb25l
LCBub3QgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiBhcmd1bWVudHMuDQotICAgICAqDQot
ICAgICAqIEBwYXJhbSBwYXR0ZXJuIFRoZSBwYXR0ZXJuIHN0cmluZy4NCi0gICAgICogQHBhcmFt
IG1pbiBUaGUgcGF0dGVybiBtdXN0IGhhdmUgYXQgbGVhc3QgdGhpcyBtYW55IGFyZ3VtZW50cy4N
Ci0gICAgICogQHBhcmFtIG1heCBUaGUgcGF0dGVybiBtdXN0IGhhdmUgYXQgbW9zdCB0aGlzIG1h
bnkgYXJndW1lbnRzLg0KLSAgICAgKiBAcGFyYW0gZXJyb3JDb2RlIElDVSBlcnJvciBjb2RlIGlu
L291dCBwYXJhbWV0ZXIuDQotICAgICAqICAgICAgICAgICAgICAgICAgTXVzdCBmdWxmaWxsIFVf
U1VDQ0VTUyBiZWZvcmUgdGhlIGZ1bmN0aW9uIGNhbGwuDQotICAgICAqICAgICAgICAgICAgICAg
ICAgU2V0IHRvIFVfSUxMRUdBTF9BUkdVTUVOVF9FUlJPUiBmb3IgYmFkIGFyZ3VtZW50IHN5bnRh
eCBhbmQNCi0gICAgICogICAgICAgICAgICAgICAgICB0b28gZmV3IG9yIHRvbyBtYW55IGFyZ3Vt
ZW50cy4NCi0gICAgICogQHN0YWJsZSBJQ1UgNTcNCi0gICAgICovDQotICAgIFNpbXBsZUZvcm1h
dHRlcihjb25zdCBVbmljb2RlU3RyaW5nJiBwYXR0ZXJuLCBpbnQzMl90IG1pbiwgaW50MzJfdCBt
YXgsDQotICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsNCi0gICAg
ICAgIGFwcGx5UGF0dGVybk1pbk1heEFyZ3VtZW50cyhwYXR0ZXJuLCBtaW4sIG1heCwgZXJyb3JD
b2RlKTsNCi0gICAgfQ0KLQ0KLSAgICAvKioNCi0gICAgICogQ29weSBjb25zdHJ1Y3Rvci4NCi0g
ICAgICogQHN0YWJsZSBJQ1UgNTcNCi0gICAgICovDQotICAgIFNpbXBsZUZvcm1hdHRlcihjb25z
dCBTaW1wbGVGb3JtYXR0ZXImIG90aGVyKQ0KLSAgICAgICAgICAgIDogY29tcGlsZWRQYXR0ZXJu
KG90aGVyLmNvbXBpbGVkUGF0dGVybikge30NCi0NCi0gICAgLyoqDQotICAgICAqIEFzc2lnbm1l
bnQgb3BlcmF0b3IuDQotICAgICAqIEBzdGFibGUgSUNVIDU3DQotICAgICAqLw0KLSAgICBTaW1w
bGVGb3JtYXR0ZXIgJm9wZXJhdG9yPShjb25zdCBTaW1wbGVGb3JtYXR0ZXImIG90aGVyKTsNCi0N
Ci0gICAgLyoqDQotICAgICAqIERlc3RydWN0b3IuDQotICAgICAqIEBzdGFibGUgSUNVIDU3DQot
ICAgICAqLw0KLSAgICB+U2ltcGxlRm9ybWF0dGVyKCk7DQotDQotICAgIC8qKg0KLSAgICAgKiBD
aGFuZ2VzIHRoaXMgb2JqZWN0IGFjY29yZGluZyB0byB0aGUgbmV3IHBhdHRlcm4uDQotICAgICAq
DQotICAgICAqIEBwYXJhbSBwYXR0ZXJuIFRoZSBwYXR0ZXJuIHN0cmluZy4NCi0gICAgICogQHBh
cmFtIGVycm9yQ29kZSBJQ1UgZXJyb3IgY29kZSBpbi9vdXQgcGFyYW1ldGVyLg0KLSAgICAgKiAg
ICAgICAgICAgICAgICAgIE11c3QgZnVsZmlsbCBVX1NVQ0NFU1MgYmVmb3JlIHRoZSBmdW5jdGlv
biBjYWxsLg0KLSAgICAgKiAgICAgICAgICAgICAgICAgIFNldCB0byBVX0lMTEVHQUxfQVJHVU1F
TlRfRVJST1IgZm9yIGJhZCBhcmd1bWVudCBzeW50YXguDQotICAgICAqIEByZXR1cm4gVFJVRSBp
ZiBVX1NVQ0NFU1MoZXJyb3JDb2RlKS4NCi0gICAgICogQHN0YWJsZSBJQ1UgNTcNCi0gICAgICov
DQotICAgIFVCb29sIGFwcGx5UGF0dGVybihjb25zdCBVbmljb2RlU3RyaW5nICZwYXR0ZXJuLCBV
RXJyb3JDb2RlICZlcnJvckNvZGUpIHsNCi0gICAgICAgIHJldHVybiBhcHBseVBhdHRlcm5NaW5N
YXhBcmd1bWVudHMocGF0dGVybiwgMCwgSU5UMzJfTUFYLCBlcnJvckNvZGUpOw0KLSAgICB9DQot
DQotICAgIC8qKg0KLSAgICAgKiBDaGFuZ2VzIHRoaXMgb2JqZWN0IGFjY29yZGluZyB0byB0aGUg
bmV3IHBhdHRlcm4uDQotICAgICAqIFRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGNoZWNrZWQgYWdh
aW5zdCB0aGUgZ2l2ZW4gbGltaXRzIGlzIHRoZQ0KLSAgICAgKiBoaWdoZXN0IGFyZ3VtZW50IG51
bWJlciBwbHVzIG9uZSwgbm90IHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgYXJndW1lbnRz
Lg0KLSAgICAgKg0KLSAgICAgKiBAcGFyYW0gcGF0dGVybiBUaGUgcGF0dGVybiBzdHJpbmcuDQot
ICAgICAqIEBwYXJhbSBtaW4gVGhlIHBhdHRlcm4gbXVzdCBoYXZlIGF0IGxlYXN0IHRoaXMgbWFu
eSBhcmd1bWVudHMuDQotICAgICAqIEBwYXJhbSBtYXggVGhlIHBhdHRlcm4gbXVzdCBoYXZlIGF0
IG1vc3QgdGhpcyBtYW55IGFyZ3VtZW50cy4NCi0gICAgICogQHBhcmFtIGVycm9yQ29kZSBJQ1Ug
ZXJyb3IgY29kZSBpbi9vdXQgcGFyYW1ldGVyLg0KLSAgICAgKiAgICAgICAgICAgICAgICAgIE11
c3QgZnVsZmlsbCBVX1NVQ0NFU1MgYmVmb3JlIHRoZSBmdW5jdGlvbiBjYWxsLg0KLSAgICAgKiAg
ICAgICAgICAgICAgICAgIFNldCB0byBVX0lMTEVHQUxfQVJHVU1FTlRfRVJST1IgZm9yIGJhZCBh
cmd1bWVudCBzeW50YXggYW5kDQotICAgICAqICAgICAgICAgICAgICAgICAgdG9vIGZldyBvciB0
b28gbWFueSBhcmd1bWVudHMuDQotICAgICAqIEByZXR1cm4gVFJVRSBpZiBVX1NVQ0NFU1MoZXJy
b3JDb2RlKS4NCi0gICAgICogQHN0YWJsZSBJQ1UgNTcNCi0gICAgICovDQotICAgIFVCb29sIGFw
cGx5UGF0dGVybk1pbk1heEFyZ3VtZW50cyhjb25zdCBVbmljb2RlU3RyaW5nICZwYXR0ZXJuLA0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBtaW4sIGludDMy
X3QgbWF4LCBVRXJyb3JDb2RlICZlcnJvckNvZGUpOw0KLQ0KLSAgICAvKioNCi0gICAgICogQHJl
dHVybiBUaGUgbWF4IGFyZ3VtZW50IG51bWJlciArIDEuDQotICAgICAqIEBzdGFibGUgSUNVIDU3
DQotICAgICAqLw0KLSAgICBpbnQzMl90IGdldEFyZ3VtZW50TGltaXQoKSBjb25zdCB7DQotICAg
ICAgICByZXR1cm4gZ2V0QXJndW1lbnRMaW1pdChjb21waWxlZFBhdHRlcm4uZ2V0QnVmZmVyKCks
IGNvbXBpbGVkUGF0dGVybi5sZW5ndGgoKSk7DQotICAgIH0NCi0NCi0gICAgLyoqDQotICAgICAq
IEZvcm1hdHMgdGhlIGdpdmVuIHZhbHVlLCBhcHBlbmRpbmcgdG8gdGhlIGFwcGVuZFRvIGJ1aWxk
ZXIuDQotICAgICAqIFRoZSBhcmd1bWVudCB2YWx1ZSBtdXN0IG5vdCBiZSB0aGUgc2FtZSBvYmpl
Y3QgYXMgYXBwZW5kVG8uDQotICAgICAqIGdldEFyZ3VtZW50TGltaXQoKSBtdXN0IGJlIGF0IG1v
c3QgMS4NCi0gICAgICoNCi0gICAgICogQHBhcmFtIHZhbHVlMCBWYWx1ZSBmb3IgYXJndW1lbnQg
ezB9Lg0KLSAgICAgKiBAcGFyYW0gYXBwZW5kVG8gR2V0cyB0aGUgZm9ybWF0dGVkIHBhdHRlcm4g
YW5kIHZhbHVlIGFwcGVuZGVkLg0KLSAgICAgKiBAcGFyYW0gZXJyb3JDb2RlIElDVSBlcnJvciBj
b2RlIGluL291dCBwYXJhbWV0ZXIuDQotICAgICAqICAgICAgICAgICAgICAgICAgTXVzdCBmdWxm
aWxsIFVfU1VDQ0VTUyBiZWZvcmUgdGhlIGZ1bmN0aW9uIGNhbGwuDQotICAgICAqIEByZXR1cm4g
YXBwZW5kVG8NCi0gICAgICogQHN0YWJsZSBJQ1UgNTcNCi0gICAgICovDQotICAgIFVuaWNvZGVT
dHJpbmcgJmZvcm1hdCgNCi0gICAgICAgICAgICBjb25zdCBVbmljb2RlU3RyaW5nICZ2YWx1ZTAs
DQotICAgICAgICAgICAgVW5pY29kZVN0cmluZyAmYXBwZW5kVG8sIFVFcnJvckNvZGUgJmVycm9y
Q29kZSkgY29uc3Q7DQotDQotICAgIC8qKg0KLSAgICAgKiBGb3JtYXRzIHRoZSBnaXZlbiB2YWx1
ZXMsIGFwcGVuZGluZyB0byB0aGUgYXBwZW5kVG8gYnVpbGRlci4NCi0gICAgICogQW4gYXJndW1l
bnQgdmFsdWUgbXVzdCBub3QgYmUgdGhlIHNhbWUgb2JqZWN0IGFzIGFwcGVuZFRvLg0KLSAgICAg
KiBnZXRBcmd1bWVudExpbWl0KCkgbXVzdCBiZSBhdCBtb3N0IDIuDQotICAgICAqDQotICAgICAq
IEBwYXJhbSB2YWx1ZTAgVmFsdWUgZm9yIGFyZ3VtZW50IHswfS4NCi0gICAgICogQHBhcmFtIHZh
bHVlMSBWYWx1ZSBmb3IgYXJndW1lbnQgezF9Lg0KLSAgICAgKiBAcGFyYW0gYXBwZW5kVG8gR2V0
cyB0aGUgZm9ybWF0dGVkIHBhdHRlcm4gYW5kIHZhbHVlcyBhcHBlbmRlZC4NCi0gICAgICogQHBh
cmFtIGVycm9yQ29kZSBJQ1UgZXJyb3IgY29kZSBpbi9vdXQgcGFyYW1ldGVyLg0KLSAgICAgKiAg
ICAgICAgICAgICAgICAgIE11c3QgZnVsZmlsbCBVX1NVQ0NFU1MgYmVmb3JlIHRoZSBmdW5jdGlv
biBjYWxsLg0KLSAgICAgKiBAcmV0dXJuIGFwcGVuZFRvDQotICAgICAqIEBzdGFibGUgSUNVIDU3
DQotICAgICAqLw0KLSAgICBVbmljb2RlU3RyaW5nICZmb3JtYXQoDQotICAgICAgICAgICAgY29u
c3QgVW5pY29kZVN0cmluZyAmdmFsdWUwLA0KLSAgICAgICAgICAgIGNvbnN0IFVuaWNvZGVTdHJp
bmcgJnZhbHVlMSwNCi0gICAgICAgICAgICBVbmljb2RlU3RyaW5nICZhcHBlbmRUbywgVUVycm9y
Q29kZSAmZXJyb3JDb2RlKSBjb25zdDsNCi0NCi0gICAgLyoqDQotICAgICAqIEZvcm1hdHMgdGhl
IGdpdmVuIHZhbHVlcywgYXBwZW5kaW5nIHRvIHRoZSBhcHBlbmRUbyBidWlsZGVyLg0KLSAgICAg
KiBBbiBhcmd1bWVudCB2YWx1ZSBtdXN0IG5vdCBiZSB0aGUgc2FtZSBvYmplY3QgYXMgYXBwZW5k
VG8uDQotICAgICAqIGdldEFyZ3VtZW50TGltaXQoKSBtdXN0IGJlIGF0IG1vc3QgMy4NCi0gICAg
ICoNCi0gICAgICogQHBhcmFtIHZhbHVlMCBWYWx1ZSBmb3IgYXJndW1lbnQgezB9Lg0KLSAgICAg
KiBAcGFyYW0gdmFsdWUxIFZhbHVlIGZvciBhcmd1bWVudCB7MX0uDQotICAgICAqIEBwYXJhbSB2
YWx1ZTIgVmFsdWUgZm9yIGFyZ3VtZW50IHsyfS4NCi0gICAgICogQHBhcmFtIGFwcGVuZFRvIEdl
dHMgdGhlIGZvcm1hdHRlZCBwYXR0ZXJuIGFuZCB2YWx1ZXMgYXBwZW5kZWQuDQotICAgICAqIEBw
YXJhbSBlcnJvckNvZGUgSUNVIGVycm9yIGNvZGUgaW4vb3V0IHBhcmFtZXRlci4NCi0gICAgICog
ICAgICAgICAgICAgICAgICBNdXN0IGZ1bGZpbGwgVV9TVUNDRVNTIGJlZm9yZSB0aGUgZnVuY3Rp
b24gY2FsbC4NCi0gICAgICogQHJldHVybiBhcHBlbmRUbw0KLSAgICAgKiBAc3RhYmxlIElDVSA1
Nw0KLSAgICAgKi8NCi0gICAgVW5pY29kZVN0cmluZyAmZm9ybWF0KA0KLSAgICAgICAgICAgIGNv
bnN0IFVuaWNvZGVTdHJpbmcgJnZhbHVlMCwNCi0gICAgICAgICAgICBjb25zdCBVbmljb2RlU3Ry
aW5nICZ2YWx1ZTEsDQotICAgICAgICAgICAgY29uc3QgVW5pY29kZVN0cmluZyAmdmFsdWUyLA0K
LSAgICAgICAgICAgIFVuaWNvZGVTdHJpbmcgJmFwcGVuZFRvLCBVRXJyb3JDb2RlICZlcnJvckNv
ZGUpIGNvbnN0Ow0KLQ0KLSAgICAvKioNCi0gICAgICogRm9ybWF0cyB0aGUgZ2l2ZW4gdmFsdWVz
LCBhcHBlbmRpbmcgdG8gdGhlIGFwcGVuZFRvIHN0cmluZy4NCi0gICAgICoNCi0gICAgICogQHBh
cmFtIHZhbHVlcyBUaGUgYXJndW1lbnQgdmFsdWVzLg0KLSAgICAgKiAgICAgICAgICAgICAgIEFu
IGFyZ3VtZW50IHZhbHVlIG11c3Qgbm90IGJlIHRoZSBzYW1lIG9iamVjdCBhcyBhcHBlbmRUby4N
Ci0gICAgICogICAgICAgICAgICAgICBDYW4gYmUgTlVMTCBpZiB2YWx1ZXNMZW5ndGg9PWdldEFy
Z3VtZW50TGltaXQoKT09MC4NCi0gICAgICogQHBhcmFtIHZhbHVlc0xlbmd0aCBUaGUgbGVuZ3Ro
IG9mIHRoZSB2YWx1ZXMgYXJyYXkuDQotICAgICAqICAgICAgICAgICAgICAgICAgICAgTXVzdCBi
ZSBhdCBsZWFzdCBnZXRBcmd1bWVudExpbWl0KCkuDQotICAgICAqIEBwYXJhbSBhcHBlbmRUbyBH
ZXRzIHRoZSBmb3JtYXR0ZWQgcGF0dGVybiBhbmQgdmFsdWVzIGFwcGVuZGVkLg0KLSAgICAgKiBA
cGFyYW0gb2Zmc2V0cyBvZmZzZXRzW2ldIHJlY2VpdmVzIHRoZSBvZmZzZXQgb2Ygd2hlcmUNCi0g
ICAgICogICAgICAgICAgICAgICAgdmFsdWVzW2ldIHJlcGxhY2VkIHBhdHRlcm4gYXJndW1lbnQg
e2l9Lg0KLSAgICAgKiAgICAgICAgICAgICAgICBDYW4gYmUgc2hvcnRlciBvciBsb25nZXIgdGhh
biB2YWx1ZXMuIENhbiBiZSBOVUxMIGlmIG9mZnNldHNMZW5ndGg9PTAuDQotICAgICAqICAgICAg
ICAgICAgICAgIElmIHRoZXJlIGlzIG5vIHtpfSBpbiB0aGUgcGF0dGVybiwgdGhlbiBvZmZzZXRz
W2ldIGlzIHNldCB0byAtMS4NCi0gICAgICogQHBhcmFtIG9mZnNldHNMZW5ndGggVGhlIGxlbmd0
aCBvZiB0aGUgb2Zmc2V0cyBhcnJheS4NCi0gICAgICogQHBhcmFtIGVycm9yQ29kZSBJQ1UgZXJy
b3IgY29kZSBpbi9vdXQgcGFyYW1ldGVyLg0KLSAgICAgKiAgICAgICAgICAgICAgICAgIE11c3Qg
ZnVsZmlsbCBVX1NVQ0NFU1MgYmVmb3JlIHRoZSBmdW5jdGlvbiBjYWxsLg0KLSAgICAgKiBAcmV0
dXJuIGFwcGVuZFRvDQotICAgICAqIEBzdGFibGUgSUNVIDU3DQotICAgICAqLw0KLSAgICBVbmlj
b2RlU3RyaW5nICZmb3JtYXRBbmRBcHBlbmQoDQotICAgICAgICAgICAgY29uc3QgVW5pY29kZVN0
cmluZyAqY29uc3QgKnZhbHVlcywgaW50MzJfdCB2YWx1ZXNMZW5ndGgsDQotICAgICAgICAgICAg
VW5pY29kZVN0cmluZyAmYXBwZW5kVG8sDQotICAgICAgICAgICAgaW50MzJfdCAqb2Zmc2V0cywg
aW50MzJfdCBvZmZzZXRzTGVuZ3RoLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpIGNvbnN0Ow0KLQ0K
LSAgICAvKioNCi0gICAgICogRm9ybWF0cyB0aGUgZ2l2ZW4gdmFsdWVzLCByZXBsYWNpbmcgdGhl
IGNvbnRlbnRzIG9mIHRoZSByZXN1bHQgc3RyaW5nLg0KLSAgICAgKiBNYXkgb3B0aW1pemUgYnkg
YWN0dWFsbHkgYXBwZW5kaW5nIHRvIHRoZSByZXN1bHQgaWYgaXQgaXMgdGhlIHNhbWUgb2JqZWN0
DQotICAgICAqIGFzIHRoZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbml0aWFsIGFyZ3Vt
ZW50IGluIHRoZSBwYXR0ZXJuLg0KLSAgICAgKg0KLSAgICAgKiBAcGFyYW0gdmFsdWVzIFRoZSBh
cmd1bWVudCB2YWx1ZXMuDQotICAgICAqICAgICAgICAgICAgICAgQW4gYXJndW1lbnQgdmFsdWUg
bWF5IGJlIHRoZSBzYW1lIG9iamVjdCBhcyByZXN1bHQuDQotICAgICAqICAgICAgICAgICAgICAg
Q2FuIGJlIE5VTEwgaWYgdmFsdWVzTGVuZ3RoPT1nZXRBcmd1bWVudExpbWl0KCk9PTAuDQotICAg
ICAqIEBwYXJhbSB2YWx1ZXNMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgdmFsdWVzIGFycmF5Lg0K
LSAgICAgKiAgICAgICAgICAgICAgICAgICAgIE11c3QgYmUgYXQgbGVhc3QgZ2V0QXJndW1lbnRM
aW1pdCgpLg0KLSAgICAgKiBAcGFyYW0gcmVzdWx0IEdldHMgaXRzIGNvbnRlbnRzIHJlcGxhY2Vk
IGJ5IHRoZSBmb3JtYXR0ZWQgcGF0dGVybiBhbmQgdmFsdWVzLg0KLSAgICAgKiBAcGFyYW0gb2Zm
c2V0cyBvZmZzZXRzW2ldIHJlY2VpdmVzIHRoZSBvZmZzZXQgb2Ygd2hlcmUNCi0gICAgICogICAg
ICAgICAgICAgICAgdmFsdWVzW2ldIHJlcGxhY2VkIHBhdHRlcm4gYXJndW1lbnQge2l9Lg0KLSAg
ICAgKiAgICAgICAgICAgICAgICBDYW4gYmUgc2hvcnRlciBvciBsb25nZXIgdGhhbiB2YWx1ZXMu
IENhbiBiZSBOVUxMIGlmIG9mZnNldHNMZW5ndGg9PTAuDQotICAgICAqICAgICAgICAgICAgICAg
IElmIHRoZXJlIGlzIG5vIHtpfSBpbiB0aGUgcGF0dGVybiwgdGhlbiBvZmZzZXRzW2ldIGlzIHNl
dCB0byAtMS4NCi0gICAgICogQHBhcmFtIG9mZnNldHNMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUg
b2Zmc2V0cyBhcnJheS4NCi0gICAgICogQHBhcmFtIGVycm9yQ29kZSBJQ1UgZXJyb3IgY29kZSBp
bi9vdXQgcGFyYW1ldGVyLg0KLSAgICAgKiAgICAgICAgICAgICAgICAgIE11c3QgZnVsZmlsbCBV
X1NVQ0NFU1MgYmVmb3JlIHRoZSBmdW5jdGlvbiBjYWxsLg0KLSAgICAgKiBAcmV0dXJuIHJlc3Vs
dA0KLSAgICAgKiBAc3RhYmxlIElDVSA1Nw0KLSAgICAgKi8NCi0gICAgVW5pY29kZVN0cmluZyAm
Zm9ybWF0QW5kUmVwbGFjZSgNCi0gICAgICAgICAgICBjb25zdCBVbmljb2RlU3RyaW5nICpjb25z
dCAqdmFsdWVzLCBpbnQzMl90IHZhbHVlc0xlbmd0aCwNCi0gICAgICAgICAgICBVbmljb2RlU3Ry
aW5nICZyZXN1bHQsDQotICAgICAgICAgICAgaW50MzJfdCAqb2Zmc2V0cywgaW50MzJfdCBvZmZz
ZXRzTGVuZ3RoLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpIGNvbnN0Ow0KLQ0KLSAgICAvKioNCi0g
ICAgICogUmV0dXJucyB0aGUgcGF0dGVybiB0ZXh0IHdpdGggbm9uZSBvZiB0aGUgYXJndW1lbnRz
Lg0KLSAgICAgKiBMaWtlIGZvcm1hdHRpbmcgd2l0aCBhbGwtZW1wdHkgc3RyaW5nIHZhbHVlcy4N
Ci0gICAgICogQHN0YWJsZSBJQ1UgNTcNCi0gICAgICovDQotICAgIFVuaWNvZGVTdHJpbmcgZ2V0
VGV4dFdpdGhOb0FyZ3VtZW50cygpIGNvbnN0IHsNCi0gICAgICAgIHJldHVybiBnZXRUZXh0V2l0
aE5vQXJndW1lbnRzKGNvbXBpbGVkUGF0dGVybi5nZXRCdWZmZXIoKSwgY29tcGlsZWRQYXR0ZXJu
Lmxlbmd0aCgpKTsNCi0gICAgfQ0KLQ0KLXByaXZhdGU6DQotICAgIC8qKg0KLSAgICAgKiBCaW5h
cnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbXBpbGVkIHBhdHRlcm4uDQotICAgICAqIEluZGV4
IDA6IE9uZSBtb3JlIHRoYW4gdGhlIGhpZ2hlc3QgYXJndW1lbnQgbnVtYmVyLg0KLSAgICAgKiBG
b2xsb3dlZCBieSB6ZXJvIG9yIG1vcmUgYXJndW1lbnRzIG9yIGxpdGVyYWwtdGV4dCBzZWdtZW50
cy4NCi0gICAgICoNCi0gICAgICogQW4gYXJndW1lbnQgaXMgc3RvcmVkIGFzIGl0cyBudW1iZXIs
IGxlc3MgdGhhbiBBUkdfTlVNX0xJTUlULg0KLSAgICAgKiBBIGxpdGVyYWwtdGV4dCBzZWdtZW50
IGlzIHN0b3JlZCBhcyBpdHMgbGVuZ3RoIChhdCBsZWFzdCAxKSBvZmZzZXQgYnkgQVJHX05VTV9M
SU1JVCwNCi0gICAgICogZm9sbG93ZWQgYnkgdGhhdCBtYW55IGNoYXJzLg0KLSAgICAgKi8NCi0g
ICAgVW5pY29kZVN0cmluZyBjb21waWxlZFBhdHRlcm47DQotDQotICAgIHN0YXRpYyBpbmxpbmUg
aW50MzJfdCBnZXRBcmd1bWVudExpbWl0KGNvbnN0IGNoYXIxNl90ICpjb21waWxlZFBhdHRlcm4s
DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qg
Y29tcGlsZWRQYXR0ZXJuTGVuZ3RoKSB7DQotICAgICAgICByZXR1cm4gY29tcGlsZWRQYXR0ZXJu
TGVuZ3RoID09IDAgPyAwIDogY29tcGlsZWRQYXR0ZXJuWzBdOw0KLSAgICB9DQotDQotICAgIHN0
YXRpYyBVbmljb2RlU3RyaW5nIGdldFRleHRXaXRoTm9Bcmd1bWVudHMoY29uc3QgY2hhcjE2X3Qg
KmNvbXBpbGVkUGF0dGVybiwgaW50MzJfdCBjb21waWxlZFBhdHRlcm5MZW5ndGgpOw0KLQ0KLSAg
ICBzdGF0aWMgVW5pY29kZVN0cmluZyAmZm9ybWF0KA0KLSAgICAgICAgICAgIGNvbnN0IGNoYXIx
Nl90ICpjb21waWxlZFBhdHRlcm4sIGludDMyX3QgY29tcGlsZWRQYXR0ZXJuTGVuZ3RoLA0KLSAg
ICAgICAgICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcgKmNvbnN0ICp2YWx1ZXMsDQotICAgICAgICAg
ICAgVW5pY29kZVN0cmluZyAmcmVzdWx0LCBjb25zdCBVbmljb2RlU3RyaW5nICpyZXN1bHRDb3B5
LCBVQm9vbCBmb3JiaWRSZXN1bHRBc1ZhbHVlLA0KLSAgICAgICAgICAgIGludDMyX3QgKm9mZnNl
dHMsIGludDMyX3Qgb2Zmc2V0c0xlbmd0aCwNCi0gICAgICAgICAgICBVRXJyb3JDb2RlICZlcnJv
ckNvZGUpOw0KLQ0KLSAgICAvLyBHaXZlIGFjY2VzcyB0byBpbnRlcm5hbHMgdG8gU2ltcGxlTW9k
aWZpZXIgZm9yIG51bWJlciBmb3JtYXR0aW5nDQotICAgIGZyaWVuZCBjbGFzcyBudW1iZXI6Omlt
cGw6OlNpbXBsZU1vZGlmaWVyOw0KLX07DQotDQotVV9OQU1FU1BBQ0VfRU5EDQotDQotI2VuZGlm
ICAvLyBfX1NJTVBMRUZPUk1BVFRFUl9IX18NCisvLyDCqSAyMDE2IGFuZCBsYXRlcjogVW5pY29k
ZSwgSW5jLiBhbmQgb3RoZXJzLgorLy8gTGljZW5zZSAmIHRlcm1zIG9mIHVzZTogaHR0cDovL3d3
dy51bmljb2RlLm9yZy9jb3B5cmlnaHQuaHRtbAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgor
KiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5l
cworKiBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKgorKiBzaW1wbGVmb3JtYXR0ZXIuaAorKi8KKworI2lmbmRlZiBfX1NJ
TVBMRUZPUk1BVFRFUl9IX18KKyNkZWZpbmUgX19TSU1QTEVGT1JNQVRURVJfSF9fCisKKy8qKgor
ICogXGZpbGUKKyAqIFxicmllZiBDKysgQVBJOiBTaW1wbGUgZm9ybWF0dGVyLCBtaW5pbWFsIHN1
YnNldCBvZiBNZXNzYWdlRm9ybWF0LgorICovCisKKyNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5o
IgorI2luY2x1ZGUgInVuaWNvZGUvdW5pc3RyLmgiCisKK1VfTkFNRVNQQUNFX0JFR0lOCisKKy8v
IEZvcndhcmQgZGVjbGFyYXRpb246CituYW1lc3BhY2UgbnVtYmVyIHsKK25hbWVzcGFjZSBpbXBs
IHsKK2NsYXNzIFNpbXBsZU1vZGlmaWVyOworfQorfQorCisvKioKKyAqIEZvcm1hdHMgc2ltcGxl
IHBhdHRlcm5zIGxpa2UgInsxfSB3YXMgYm9ybiBpbiB7MH0iLgorICogTWluaW1hbCBzdWJzZXQg
b2YgTWVzc2FnZUZvcm1hdDsgZmFzdCwgc2ltcGxlLCBtaW5pbWFsIGRlcGVuZGVuY2llcy4KKyAq
IFN1cHBvcnRzIG9ubHkgbnVtYmVyZWQgYXJndW1lbnRzIHdpdGggbm8gdHlwZSBub3Igc3R5bGUg
cGFyYW1ldGVycywKKyAqIGFuZCBmb3JtYXRzIG9ubHkgc3RyaW5nIHZhbHVlcy4KKyAqIFF1b3Rp
bmcgdmlhIEFTQ0lJIGFwb3N0cm9waGUgY29tcGF0aWJsZSB3aXRoIElDVSBNZXNzYWdlRm9ybWF0
IGRlZmF1bHQgYmVoYXZpb3IuCisgKgorICogRmFjdG9yeSBtZXRob2RzIHNldCBlcnJvciBjb2Rl
cyBmb3Igc3ludGF4IGVycm9ycworICogYW5kIGZvciB0b28gZmV3IG9yIHRvbyBtYW55IGFyZ3Vt
ZW50cy9wbGFjZWhvbGRlcnMuCisgKgorICogU2ltcGxlRm9ybWF0dGVyIG9iamVjdHMgYXJlIHRo
cmVhZC1zYWZlIGV4Y2VwdCBmb3IgYXNzaWdubWVudCBhbmQgYXBwbHlpbmcgbmV3IHBhdHRlcm5z
LgorICoKKyAqIEV4YW1wbGU6CisgKiA8cHJlPgorICogVUVycm9yQ29kZSBlcnJvckNvZGUgPSBV
X1pFUk9fRVJST1I7CisgKiBTaW1wbGVGb3JtYXR0ZXIgZm10KCJ7MX0gJ3tib3JufScgaW4gezB9
IiwgZXJyb3JDb2RlKTsKKyAqIFVuaWNvZGVTdHJpbmcgcmVzdWx0OworICoKKyAqIC8vIE91dHB1
dDogInBhdWwge2Jvcm59IGluIGVuZ2xhbmQiCisgKiBmbXQuZm9ybWF0KCJlbmdsYW5kIiwgInBh
dWwiLCByZXN1bHQsIGVycm9yQ29kZSk7CisgKiA8L3ByZT4KKyAqCisgKiBUaGlzIGNsYXNzIGlz
IG5vdCBpbnRlbmRlZCBmb3IgcHVibGljIHN1YmNsYXNzaW5nLgorICoKKyAqIEBzZWUgTWVzc2Fn
ZUZvcm1hdAorICogQHNlZSBVTWVzc2FnZVBhdHRlcm5BcG9zdHJvcGhlTW9kZQorICogQHN0YWJs
ZSBJQ1UgNTcKKyAqLworY2xhc3MgVV9DT01NT05fQVBJIFNpbXBsZUZvcm1hdHRlciBVX0ZJTkFM
IDogcHVibGljIFVNZW1vcnkgeworcHVibGljOgorICAgIC8qKgorICAgICAqIERlZmF1bHQgY29u
c3RydWN0b3IuCisgICAgICogQHN0YWJsZSBJQ1UgNTcKKyAgICAgKi8KKyAgICBTaW1wbGVGb3Jt
YXR0ZXIoKSA6IGNvbXBpbGVkUGF0dGVybigoY2hhcjE2X3QpMCkge30KKworICAgIC8qKgorICAg
ICAqIENvbnN0cnVjdHMgYSBmb3JtYXR0ZXIgZnJvbSB0aGUgcGF0dGVybiBzdHJpbmcuCisgICAg
ICoKKyAgICAgKiBAcGFyYW0gcGF0dGVybiBUaGUgcGF0dGVybiBzdHJpbmcuCisgICAgICogQHBh
cmFtIGVycm9yQ29kZSBJQ1UgZXJyb3IgY29kZSBpbi9vdXQgcGFyYW1ldGVyLgorICAgICAqICAg
ICAgICAgICAgICAgICAgTXVzdCBmdWxmaWxsIFVfU1VDQ0VTUyBiZWZvcmUgdGhlIGZ1bmN0aW9u
IGNhbGwuCisgICAgICogICAgICAgICAgICAgICAgICBTZXQgdG8gVV9JTExFR0FMX0FSR1VNRU5U
X0VSUk9SIGZvciBiYWQgYXJndW1lbnQgc3ludGF4LgorICAgICAqIEBzdGFibGUgSUNVIDU3Cisg
ICAgICovCisgICAgU2ltcGxlRm9ybWF0dGVyKGNvbnN0IFVuaWNvZGVTdHJpbmcmIHBhdHRlcm4s
IFVFcnJvckNvZGUgJmVycm9yQ29kZSkgeworICAgICAgICBhcHBseVBhdHRlcm4ocGF0dGVybiwg
ZXJyb3JDb2RlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgZm9ybWF0
dGVyIGZyb20gdGhlIHBhdHRlcm4gc3RyaW5nLgorICAgICAqIFRoZSBudW1iZXIgb2YgYXJndW1l
bnRzIGNoZWNrZWQgYWdhaW5zdCB0aGUgZ2l2ZW4gbGltaXRzIGlzIHRoZQorICAgICAqIGhpZ2hl
c3QgYXJndW1lbnQgbnVtYmVyIHBsdXMgb25lLCBub3QgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNl
cyBvZiBhcmd1bWVudHMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcGF0dGVybiBUaGUgcGF0dGVy
biBzdHJpbmcuCisgICAgICogQHBhcmFtIG1pbiBUaGUgcGF0dGVybiBtdXN0IGhhdmUgYXQgbGVh
c3QgdGhpcyBtYW55IGFyZ3VtZW50cy4KKyAgICAgKiBAcGFyYW0gbWF4IFRoZSBwYXR0ZXJuIG11
c3QgaGF2ZSBhdCBtb3N0IHRoaXMgbWFueSBhcmd1bWVudHMuCisgICAgICogQHBhcmFtIGVycm9y
Q29kZSBJQ1UgZXJyb3IgY29kZSBpbi9vdXQgcGFyYW1ldGVyLgorICAgICAqICAgICAgICAgICAg
ICAgICAgTXVzdCBmdWxmaWxsIFVfU1VDQ0VTUyBiZWZvcmUgdGhlIGZ1bmN0aW9uIGNhbGwuCisg
ICAgICogICAgICAgICAgICAgICAgICBTZXQgdG8gVV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SIGZv
ciBiYWQgYXJndW1lbnQgc3ludGF4IGFuZAorICAgICAqICAgICAgICAgICAgICAgICAgdG9vIGZl
dyBvciB0b28gbWFueSBhcmd1bWVudHMuCisgICAgICogQHN0YWJsZSBJQ1UgNTcKKyAgICAgKi8K
KyAgICBTaW1wbGVGb3JtYXR0ZXIoY29uc3QgVW5pY29kZVN0cmluZyYgcGF0dGVybiwgaW50MzJf
dCBtaW4sIGludDMyX3QgbWF4LAorICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICZlcnJv
ckNvZGUpIHsKKyAgICAgICAgYXBwbHlQYXR0ZXJuTWluTWF4QXJndW1lbnRzKHBhdHRlcm4sIG1p
biwgbWF4LCBlcnJvckNvZGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvcHkgY29uc3Ry
dWN0b3IuCisgICAgICogQHN0YWJsZSBJQ1UgNTcKKyAgICAgKi8KKyAgICBTaW1wbGVGb3JtYXR0
ZXIoY29uc3QgU2ltcGxlRm9ybWF0dGVyJiBvdGhlcikKKyAgICAgICAgICAgIDogY29tcGlsZWRQ
YXR0ZXJuKG90aGVyLmNvbXBpbGVkUGF0dGVybikge30KKworICAgIC8qKgorICAgICAqIEFzc2ln
bm1lbnQgb3BlcmF0b3IuCisgICAgICogQHN0YWJsZSBJQ1UgNTcKKyAgICAgKi8KKyAgICBTaW1w
bGVGb3JtYXR0ZXIgJm9wZXJhdG9yPShjb25zdCBTaW1wbGVGb3JtYXR0ZXImIG90aGVyKTsKKwor
ICAgIC8qKgorICAgICAqIERlc3RydWN0b3IuCisgICAgICogQHN0YWJsZSBJQ1UgNTcKKyAgICAg
Ki8KKyAgICB+U2ltcGxlRm9ybWF0dGVyKCk7CisKKyAgICAvKioKKyAgICAgKiBDaGFuZ2VzIHRo
aXMgb2JqZWN0IGFjY29yZGluZyB0byB0aGUgbmV3IHBhdHRlcm4uCisgICAgICoKKyAgICAgKiBA
cGFyYW0gcGF0dGVybiBUaGUgcGF0dGVybiBzdHJpbmcuCisgICAgICogQHBhcmFtIGVycm9yQ29k
ZSBJQ1UgZXJyb3IgY29kZSBpbi9vdXQgcGFyYW1ldGVyLgorICAgICAqICAgICAgICAgICAgICAg
ICAgTXVzdCBmdWxmaWxsIFVfU1VDQ0VTUyBiZWZvcmUgdGhlIGZ1bmN0aW9uIGNhbGwuCisgICAg
ICogICAgICAgICAgICAgICAgICBTZXQgdG8gVV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SIGZvciBi
YWQgYXJndW1lbnQgc3ludGF4LgorICAgICAqIEByZXR1cm4gVFJVRSBpZiBVX1NVQ0NFU1MoZXJy
b3JDb2RlKS4KKyAgICAgKiBAc3RhYmxlIElDVSA1NworICAgICAqLworICAgIFVCb29sIGFwcGx5
UGF0dGVybihjb25zdCBVbmljb2RlU3RyaW5nICZwYXR0ZXJuLCBVRXJyb3JDb2RlICZlcnJvckNv
ZGUpIHsKKyAgICAgICAgcmV0dXJuIGFwcGx5UGF0dGVybk1pbk1heEFyZ3VtZW50cyhwYXR0ZXJu
LCAwLCBJTlQzMl9NQVgsIGVycm9yQ29kZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hh
bmdlcyB0aGlzIG9iamVjdCBhY2NvcmRpbmcgdG8gdGhlIG5ldyBwYXR0ZXJuLgorICAgICAqIFRo
ZSBudW1iZXIgb2YgYXJndW1lbnRzIGNoZWNrZWQgYWdhaW5zdCB0aGUgZ2l2ZW4gbGltaXRzIGlz
IHRoZQorICAgICAqIGhpZ2hlc3QgYXJndW1lbnQgbnVtYmVyIHBsdXMgb25lLCBub3QgdGhlIG51
bWJlciBvZiBvY2N1cnJlbmNlcyBvZiBhcmd1bWVudHMuCisgICAgICoKKyAgICAgKiBAcGFyYW0g
cGF0dGVybiBUaGUgcGF0dGVybiBzdHJpbmcuCisgICAgICogQHBhcmFtIG1pbiBUaGUgcGF0dGVy
biBtdXN0IGhhdmUgYXQgbGVhc3QgdGhpcyBtYW55IGFyZ3VtZW50cy4KKyAgICAgKiBAcGFyYW0g
bWF4IFRoZSBwYXR0ZXJuIG11c3QgaGF2ZSBhdCBtb3N0IHRoaXMgbWFueSBhcmd1bWVudHMuCisg
ICAgICogQHBhcmFtIGVycm9yQ29kZSBJQ1UgZXJyb3IgY29kZSBpbi9vdXQgcGFyYW1ldGVyLgor
ICAgICAqICAgICAgICAgICAgICAgICAgTXVzdCBmdWxmaWxsIFVfU1VDQ0VTUyBiZWZvcmUgdGhl
IGZ1bmN0aW9uIGNhbGwuCisgICAgICogICAgICAgICAgICAgICAgICBTZXQgdG8gVV9JTExFR0FM
X0FSR1VNRU5UX0VSUk9SIGZvciBiYWQgYXJndW1lbnQgc3ludGF4IGFuZAorICAgICAqICAgICAg
ICAgICAgICAgICAgdG9vIGZldyBvciB0b28gbWFueSBhcmd1bWVudHMuCisgICAgICogQHJldHVy
biBUUlVFIGlmIFVfU1VDQ0VTUyhlcnJvckNvZGUpLgorICAgICAqIEBzdGFibGUgSUNVIDU3Cisg
ICAgICovCisgICAgVUJvb2wgYXBwbHlQYXR0ZXJuTWluTWF4QXJndW1lbnRzKGNvbnN0IFVuaWNv
ZGVTdHJpbmcgJnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludDMyX3QgbWluLCBpbnQzMl90IG1heCwgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKworICAg
IC8qKgorICAgICAqIEByZXR1cm4gVGhlIG1heCBhcmd1bWVudCBudW1iZXIgKyAxLgorICAgICAq
IEBzdGFibGUgSUNVIDU3CisgICAgICovCisgICAgaW50MzJfdCBnZXRBcmd1bWVudExpbWl0KCkg
Y29uc3QgeworICAgICAgICByZXR1cm4gZ2V0QXJndW1lbnRMaW1pdChjb21waWxlZFBhdHRlcm4u
Z2V0QnVmZmVyKCksIGNvbXBpbGVkUGF0dGVybi5sZW5ndGgoKSk7CisgICAgfQorCisgICAgLyoq
CisgICAgICogRm9ybWF0cyB0aGUgZ2l2ZW4gdmFsdWUsIGFwcGVuZGluZyB0byB0aGUgYXBwZW5k
VG8gYnVpbGRlci4KKyAgICAgKiBUaGUgYXJndW1lbnQgdmFsdWUgbXVzdCBub3QgYmUgdGhlIHNh
bWUgb2JqZWN0IGFzIGFwcGVuZFRvLgorICAgICAqIGdldEFyZ3VtZW50TGltaXQoKSBtdXN0IGJl
IGF0IG1vc3QgMS4KKyAgICAgKgorICAgICAqIEBwYXJhbSB2YWx1ZTAgVmFsdWUgZm9yIGFyZ3Vt
ZW50IHswfS4KKyAgICAgKiBAcGFyYW0gYXBwZW5kVG8gR2V0cyB0aGUgZm9ybWF0dGVkIHBhdHRl
cm4gYW5kIHZhbHVlIGFwcGVuZGVkLgorICAgICAqIEBwYXJhbSBlcnJvckNvZGUgSUNVIGVycm9y
IGNvZGUgaW4vb3V0IHBhcmFtZXRlci4KKyAgICAgKiAgICAgICAgICAgICAgICAgIE11c3QgZnVs
ZmlsbCBVX1NVQ0NFU1MgYmVmb3JlIHRoZSBmdW5jdGlvbiBjYWxsLgorICAgICAqIEByZXR1cm4g
YXBwZW5kVG8KKyAgICAgKiBAc3RhYmxlIElDVSA1NworICAgICAqLworICAgIFVuaWNvZGVTdHJp
bmcgJmZvcm1hdCgKKyAgICAgICAgICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcgJnZhbHVlMCwKKyAg
ICAgICAgICAgIFVuaWNvZGVTdHJpbmcgJmFwcGVuZFRvLCBVRXJyb3JDb2RlICZlcnJvckNvZGUp
IGNvbnN0OworCisgICAgLyoqCisgICAgICogRm9ybWF0cyB0aGUgZ2l2ZW4gdmFsdWVzLCBhcHBl
bmRpbmcgdG8gdGhlIGFwcGVuZFRvIGJ1aWxkZXIuCisgICAgICogQW4gYXJndW1lbnQgdmFsdWUg
bXVzdCBub3QgYmUgdGhlIHNhbWUgb2JqZWN0IGFzIGFwcGVuZFRvLgorICAgICAqIGdldEFyZ3Vt
ZW50TGltaXQoKSBtdXN0IGJlIGF0IG1vc3QgMi4KKyAgICAgKgorICAgICAqIEBwYXJhbSB2YWx1
ZTAgVmFsdWUgZm9yIGFyZ3VtZW50IHswfS4KKyAgICAgKiBAcGFyYW0gdmFsdWUxIFZhbHVlIGZv
ciBhcmd1bWVudCB7MX0uCisgICAgICogQHBhcmFtIGFwcGVuZFRvIEdldHMgdGhlIGZvcm1hdHRl
ZCBwYXR0ZXJuIGFuZCB2YWx1ZXMgYXBwZW5kZWQuCisgICAgICogQHBhcmFtIGVycm9yQ29kZSBJ
Q1UgZXJyb3IgY29kZSBpbi9vdXQgcGFyYW1ldGVyLgorICAgICAqICAgICAgICAgICAgICAgICAg
TXVzdCBmdWxmaWxsIFVfU1VDQ0VTUyBiZWZvcmUgdGhlIGZ1bmN0aW9uIGNhbGwuCisgICAgICog
QHJldHVybiBhcHBlbmRUbworICAgICAqIEBzdGFibGUgSUNVIDU3CisgICAgICovCisgICAgVW5p
Y29kZVN0cmluZyAmZm9ybWF0KAorICAgICAgICAgICAgY29uc3QgVW5pY29kZVN0cmluZyAmdmFs
dWUwLAorICAgICAgICAgICAgY29uc3QgVW5pY29kZVN0cmluZyAmdmFsdWUxLAorICAgICAgICAg
ICAgVW5pY29kZVN0cmluZyAmYXBwZW5kVG8sIFVFcnJvckNvZGUgJmVycm9yQ29kZSkgY29uc3Q7
CisKKyAgICAvKioKKyAgICAgKiBGb3JtYXRzIHRoZSBnaXZlbiB2YWx1ZXMsIGFwcGVuZGluZyB0
byB0aGUgYXBwZW5kVG8gYnVpbGRlci4KKyAgICAgKiBBbiBhcmd1bWVudCB2YWx1ZSBtdXN0IG5v
dCBiZSB0aGUgc2FtZSBvYmplY3QgYXMgYXBwZW5kVG8uCisgICAgICogZ2V0QXJndW1lbnRMaW1p
dCgpIG11c3QgYmUgYXQgbW9zdCAzLgorICAgICAqCisgICAgICogQHBhcmFtIHZhbHVlMCBWYWx1
ZSBmb3IgYXJndW1lbnQgezB9LgorICAgICAqIEBwYXJhbSB2YWx1ZTEgVmFsdWUgZm9yIGFyZ3Vt
ZW50IHsxfS4KKyAgICAgKiBAcGFyYW0gdmFsdWUyIFZhbHVlIGZvciBhcmd1bWVudCB7Mn0uCisg
ICAgICogQHBhcmFtIGFwcGVuZFRvIEdldHMgdGhlIGZvcm1hdHRlZCBwYXR0ZXJuIGFuZCB2YWx1
ZXMgYXBwZW5kZWQuCisgICAgICogQHBhcmFtIGVycm9yQ29kZSBJQ1UgZXJyb3IgY29kZSBpbi9v
dXQgcGFyYW1ldGVyLgorICAgICAqICAgICAgICAgICAgICAgICAgTXVzdCBmdWxmaWxsIFVfU1VD
Q0VTUyBiZWZvcmUgdGhlIGZ1bmN0aW9uIGNhbGwuCisgICAgICogQHJldHVybiBhcHBlbmRUbwor
ICAgICAqIEBzdGFibGUgSUNVIDU3CisgICAgICovCisgICAgVW5pY29kZVN0cmluZyAmZm9ybWF0
KAorICAgICAgICAgICAgY29uc3QgVW5pY29kZVN0cmluZyAmdmFsdWUwLAorICAgICAgICAgICAg
Y29uc3QgVW5pY29kZVN0cmluZyAmdmFsdWUxLAorICAgICAgICAgICAgY29uc3QgVW5pY29kZVN0
cmluZyAmdmFsdWUyLAorICAgICAgICAgICAgVW5pY29kZVN0cmluZyAmYXBwZW5kVG8sIFVFcnJv
ckNvZGUgJmVycm9yQ29kZSkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBGb3JtYXRzIHRoZSBn
aXZlbiB2YWx1ZXMsIGFwcGVuZGluZyB0byB0aGUgYXBwZW5kVG8gc3RyaW5nLgorICAgICAqCisg
ICAgICogQHBhcmFtIHZhbHVlcyBUaGUgYXJndW1lbnQgdmFsdWVzLgorICAgICAqICAgICAgICAg
ICAgICAgQW4gYXJndW1lbnQgdmFsdWUgbXVzdCBub3QgYmUgdGhlIHNhbWUgb2JqZWN0IGFzIGFw
cGVuZFRvLgorICAgICAqICAgICAgICAgICAgICAgQ2FuIGJlIE5VTEwgaWYgdmFsdWVzTGVuZ3Ro
PT1nZXRBcmd1bWVudExpbWl0KCk9PTAuCisgICAgICogQHBhcmFtIHZhbHVlc0xlbmd0aCBUaGUg
bGVuZ3RoIG9mIHRoZSB2YWx1ZXMgYXJyYXkuCisgICAgICogICAgICAgICAgICAgICAgICAgICBN
dXN0IGJlIGF0IGxlYXN0IGdldEFyZ3VtZW50TGltaXQoKS4KKyAgICAgKiBAcGFyYW0gYXBwZW5k
VG8gR2V0cyB0aGUgZm9ybWF0dGVkIHBhdHRlcm4gYW5kIHZhbHVlcyBhcHBlbmRlZC4KKyAgICAg
KiBAcGFyYW0gb2Zmc2V0cyBvZmZzZXRzW2ldIHJlY2VpdmVzIHRoZSBvZmZzZXQgb2Ygd2hlcmUK
KyAgICAgKiAgICAgICAgICAgICAgICB2YWx1ZXNbaV0gcmVwbGFjZWQgcGF0dGVybiBhcmd1bWVu
dCB7aX0uCisgICAgICogICAgICAgICAgICAgICAgQ2FuIGJlIHNob3J0ZXIgb3IgbG9uZ2VyIHRo
YW4gdmFsdWVzLiBDYW4gYmUgTlVMTCBpZiBvZmZzZXRzTGVuZ3RoPT0wLgorICAgICAqICAgICAg
ICAgICAgICAgIElmIHRoZXJlIGlzIG5vIHtpfSBpbiB0aGUgcGF0dGVybiwgdGhlbiBvZmZzZXRz
W2ldIGlzIHNldCB0byAtMS4KKyAgICAgKiBAcGFyYW0gb2Zmc2V0c0xlbmd0aCBUaGUgbGVuZ3Ro
IG9mIHRoZSBvZmZzZXRzIGFycmF5LgorICAgICAqIEBwYXJhbSBlcnJvckNvZGUgSUNVIGVycm9y
IGNvZGUgaW4vb3V0IHBhcmFtZXRlci4KKyAgICAgKiAgICAgICAgICAgICAgICAgIE11c3QgZnVs
ZmlsbCBVX1NVQ0NFU1MgYmVmb3JlIHRoZSBmdW5jdGlvbiBjYWxsLgorICAgICAqIEByZXR1cm4g
YXBwZW5kVG8KKyAgICAgKiBAc3RhYmxlIElDVSA1NworICAgICAqLworICAgIFVuaWNvZGVTdHJp
bmcgJmZvcm1hdEFuZEFwcGVuZCgKKyAgICAgICAgICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcgKmNv
bnN0ICp2YWx1ZXMsIGludDMyX3QgdmFsdWVzTGVuZ3RoLAorICAgICAgICAgICAgVW5pY29kZVN0
cmluZyAmYXBwZW5kVG8sCisgICAgICAgICAgICBpbnQzMl90ICpvZmZzZXRzLCBpbnQzMl90IG9m
ZnNldHNMZW5ndGgsIFVFcnJvckNvZGUgJmVycm9yQ29kZSkgY29uc3Q7CisKKyAgICAvKioKKyAg
ICAgKiBGb3JtYXRzIHRoZSBnaXZlbiB2YWx1ZXMsIHJlcGxhY2luZyB0aGUgY29udGVudHMgb2Yg
dGhlIHJlc3VsdCBzdHJpbmcuCisgICAgICogTWF5IG9wdGltaXplIGJ5IGFjdHVhbGx5IGFwcGVu
ZGluZyB0byB0aGUgcmVzdWx0IGlmIGl0IGlzIHRoZSBzYW1lIG9iamVjdAorICAgICAqIGFzIHRo
ZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbml0aWFsIGFyZ3VtZW50IGluIHRoZSBwYXR0
ZXJuLgorICAgICAqCisgICAgICogQHBhcmFtIHZhbHVlcyBUaGUgYXJndW1lbnQgdmFsdWVzLgor
ICAgICAqICAgICAgICAgICAgICAgQW4gYXJndW1lbnQgdmFsdWUgbWF5IGJlIHRoZSBzYW1lIG9i
amVjdCBhcyByZXN1bHQuCisgICAgICogICAgICAgICAgICAgICBDYW4gYmUgTlVMTCBpZiB2YWx1
ZXNMZW5ndGg9PWdldEFyZ3VtZW50TGltaXQoKT09MC4KKyAgICAgKiBAcGFyYW0gdmFsdWVzTGVu
Z3RoIFRoZSBsZW5ndGggb2YgdGhlIHZhbHVlcyBhcnJheS4KKyAgICAgKiAgICAgICAgICAgICAg
ICAgICAgIE11c3QgYmUgYXQgbGVhc3QgZ2V0QXJndW1lbnRMaW1pdCgpLgorICAgICAqIEBwYXJh
bSByZXN1bHQgR2V0cyBpdHMgY29udGVudHMgcmVwbGFjZWQgYnkgdGhlIGZvcm1hdHRlZCBwYXR0
ZXJuIGFuZCB2YWx1ZXMuCisgICAgICogQHBhcmFtIG9mZnNldHMgb2Zmc2V0c1tpXSByZWNlaXZl
cyB0aGUgb2Zmc2V0IG9mIHdoZXJlCisgICAgICogICAgICAgICAgICAgICAgdmFsdWVzW2ldIHJl
cGxhY2VkIHBhdHRlcm4gYXJndW1lbnQge2l9LgorICAgICAqICAgICAgICAgICAgICAgIENhbiBi
ZSBzaG9ydGVyIG9yIGxvbmdlciB0aGFuIHZhbHVlcy4gQ2FuIGJlIE5VTEwgaWYgb2Zmc2V0c0xl
bmd0aD09MC4KKyAgICAgKiAgICAgICAgICAgICAgICBJZiB0aGVyZSBpcyBubyB7aX0gaW4gdGhl
IHBhdHRlcm4sIHRoZW4gb2Zmc2V0c1tpXSBpcyBzZXQgdG8gLTEuCisgICAgICogQHBhcmFtIG9m
ZnNldHNMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgb2Zmc2V0cyBhcnJheS4KKyAgICAgKiBAcGFy
YW0gZXJyb3JDb2RlIElDVSBlcnJvciBjb2RlIGluL291dCBwYXJhbWV0ZXIuCisgICAgICogICAg
ICAgICAgICAgICAgICBNdXN0IGZ1bGZpbGwgVV9TVUNDRVNTIGJlZm9yZSB0aGUgZnVuY3Rpb24g
Y2FsbC4KKyAgICAgKiBAcmV0dXJuIHJlc3VsdAorICAgICAqIEBzdGFibGUgSUNVIDU3CisgICAg
ICovCisgICAgVW5pY29kZVN0cmluZyAmZm9ybWF0QW5kUmVwbGFjZSgKKyAgICAgICAgICAgIGNv
bnN0IFVuaWNvZGVTdHJpbmcgKmNvbnN0ICp2YWx1ZXMsIGludDMyX3QgdmFsdWVzTGVuZ3RoLAor
ICAgICAgICAgICAgVW5pY29kZVN0cmluZyAmcmVzdWx0LAorICAgICAgICAgICAgaW50MzJfdCAq
b2Zmc2V0cywgaW50MzJfdCBvZmZzZXRzTGVuZ3RoLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpIGNv
bnN0OworCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgcGF0dGVybiB0ZXh0IHdpdGggbm9u
ZSBvZiB0aGUgYXJndW1lbnRzLgorICAgICAqIExpa2UgZm9ybWF0dGluZyB3aXRoIGFsbC1lbXB0
eSBzdHJpbmcgdmFsdWVzLgorICAgICAqIEBzdGFibGUgSUNVIDU3CisgICAgICovCisgICAgVW5p
Y29kZVN0cmluZyBnZXRUZXh0V2l0aE5vQXJndW1lbnRzKCkgY29uc3QgeworICAgICAgICByZXR1
cm4gZ2V0VGV4dFdpdGhOb0FyZ3VtZW50cygKKyAgICAgICAgICAgIGNvbXBpbGVkUGF0dGVybi5n
ZXRCdWZmZXIoKSwKKyAgICAgICAgICAgIGNvbXBpbGVkUGF0dGVybi5sZW5ndGgoKSwKKyAgICAg
ICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICAwKTsKKyAgICB9CisKKyNpZm5kZWYgVV9ISURF
X0lOVEVSTkFMX0FQSQorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHBhdHRlcm4gdGV4dCB3
aXRoIG5vbmUgb2YgdGhlIGFyZ3VtZW50cy4KKyAgICAgKiBMaWtlIGZvcm1hdHRpbmcgd2l0aCBh
bGwtZW1wdHkgc3RyaW5nIHZhbHVlcy4KKyAgICAgKgorICAgICAqIFRPRE8oSUNVLTIwNDA2KTog
UmVwbGFjZSB0aGlzIHdpdGggYW4gSXRlcmF0b3IgaW50ZXJmYWNlLgorICAgICAqCisgICAgICog
QHBhcmFtIG9mZnNldHMgb2Zmc2V0c1tpXSByZWNlaXZlcyB0aGUgb2Zmc2V0IG9mIHdoZXJlIHtp
fSB3YXMgbG9jYXRlZAorICAgICAqICAgICAgICAgICAgICAgIGJlZm9yZSBpdCB3YXMgcmVwbGFj
ZWQgYnkgYW4gZW1wdHkgc3RyaW5nLgorICAgICAqICAgICAgICAgICAgICAgIEZvciBleGFtcGxl
LCAiYXswfWJ7MX0iIHByb2R1Y2VzIG9mZnNldCAxIGZvciBpPTAgYW5kIDIgZm9yIGk9MS4KKyAg
ICAgKiAgICAgICAgICAgICAgICBDYW4gYmUgbnVsbHB0ciBpZiBvZmZzZXRzTGVuZ3RoPT0wLgor
ICAgICAqICAgICAgICAgICAgICAgIElmIHRoZXJlIGlzIG5vIHtpfSBpbiB0aGUgcGF0dGVybiwg
dGhlbiBvZmZzZXRzW2ldIGlzIHNldCB0byAtMS4KKyAgICAgKiBAcGFyYW0gb2Zmc2V0c0xlbmd0
aCBUaGUgbGVuZ3RoIG9mIHRoZSBvZmZzZXRzIGFycmF5LgorICAgICAqCisgICAgICogQGludGVy
bmFsCisgICAgICovCisgICAgVW5pY29kZVN0cmluZyBnZXRUZXh0V2l0aE5vQXJndW1lbnRzKGlu
dDMyX3QgKm9mZnNldHMsIGludDMyX3Qgb2Zmc2V0c0xlbmd0aCkgY29uc3QgeworICAgICAgICBy
ZXR1cm4gZ2V0VGV4dFdpdGhOb0FyZ3VtZW50cygKKyAgICAgICAgICAgIGNvbXBpbGVkUGF0dGVy
bi5nZXRCdWZmZXIoKSwKKyAgICAgICAgICAgIGNvbXBpbGVkUGF0dGVybi5sZW5ndGgoKSwKKyAg
ICAgICAgICAgIG9mZnNldHMsCisgICAgICAgICAgICBvZmZzZXRzTGVuZ3RoKTsKKyAgICB9Cisj
ZW5kaWYgLy8gVV9ISURFX0lOVEVSTkFMX0FQSQorCitwcml2YXRlOgorICAgIC8qKgorICAgICAq
IEJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29tcGlsZWQgcGF0dGVybi4KKyAgICAgKiBJ
bmRleCAwOiBPbmUgbW9yZSB0aGFuIHRoZSBoaWdoZXN0IGFyZ3VtZW50IG51bWJlci4KKyAgICAg
KiBGb2xsb3dlZCBieSB6ZXJvIG9yIG1vcmUgYXJndW1lbnRzIG9yIGxpdGVyYWwtdGV4dCBzZWdt
ZW50cy4KKyAgICAgKgorICAgICAqIEFuIGFyZ3VtZW50IGlzIHN0b3JlZCBhcyBpdHMgbnVtYmVy
LCBsZXNzIHRoYW4gQVJHX05VTV9MSU1JVC4KKyAgICAgKiBBIGxpdGVyYWwtdGV4dCBzZWdtZW50
IGlzIHN0b3JlZCBhcyBpdHMgbGVuZ3RoIChhdCBsZWFzdCAxKSBvZmZzZXQgYnkgQVJHX05VTV9M
SU1JVCwKKyAgICAgKiBmb2xsb3dlZCBieSB0aGF0IG1hbnkgY2hhcnMuCisgICAgICovCisgICAg
VW5pY29kZVN0cmluZyBjb21waWxlZFBhdHRlcm47CisKKyAgICBzdGF0aWMgaW5saW5lIGludDMy
X3QgZ2V0QXJndW1lbnRMaW1pdChjb25zdCBjaGFyMTZfdCAqY29tcGlsZWRQYXR0ZXJuLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgY29tcGls
ZWRQYXR0ZXJuTGVuZ3RoKSB7CisgICAgICAgIHJldHVybiBjb21waWxlZFBhdHRlcm5MZW5ndGgg
PT0gMCA/IDAgOiBjb21waWxlZFBhdHRlcm5bMF07CisgICAgfQorCisgICAgc3RhdGljIFVuaWNv
ZGVTdHJpbmcgZ2V0VGV4dFdpdGhOb0FyZ3VtZW50cygKKyAgICAgICAgY29uc3QgY2hhcjE2X3Qg
KmNvbXBpbGVkUGF0dGVybiwKKyAgICAgICAgaW50MzJfdCBjb21waWxlZFBhdHRlcm5MZW5ndGgs
CisgICAgICAgIGludDMyX3QgKm9mZnNldHMsCisgICAgICAgIGludDMyX3Qgb2Zmc2V0c0xlbmd0
aCk7CisKKyAgICBzdGF0aWMgVW5pY29kZVN0cmluZyAmZm9ybWF0KAorICAgICAgICAgICAgY29u
c3QgY2hhcjE2X3QgKmNvbXBpbGVkUGF0dGVybiwgaW50MzJfdCBjb21waWxlZFBhdHRlcm5MZW5n
dGgsCisgICAgICAgICAgICBjb25zdCBVbmljb2RlU3RyaW5nICpjb25zdCAqdmFsdWVzLAorICAg
ICAgICAgICAgVW5pY29kZVN0cmluZyAmcmVzdWx0LCBjb25zdCBVbmljb2RlU3RyaW5nICpyZXN1
bHRDb3B5LCBVQm9vbCBmb3JiaWRSZXN1bHRBc1ZhbHVlLAorICAgICAgICAgICAgaW50MzJfdCAq
b2Zmc2V0cywgaW50MzJfdCBvZmZzZXRzTGVuZ3RoLAorICAgICAgICAgICAgVUVycm9yQ29kZSAm
ZXJyb3JDb2RlKTsKKworICAgIC8vIEdpdmUgYWNjZXNzIHRvIGludGVybmFscyB0byBTaW1wbGVN
b2RpZmllciBmb3IgbnVtYmVyIGZvcm1hdHRpbmcKKyAgICBmcmllbmQgY2xhc3MgbnVtYmVyOjpp
bXBsOjpTaW1wbGVNb2RpZmllcjsKK307CisKK1VfTkFNRVNQQUNFX0VORAorCisjZW5kaWYgIC8v
IF9fU0lNUExFRk9STUFUVEVSX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9pY3UvdW5pY29k
ZS9zbXBkdGZtdC5oIGIvU291cmNlL1dURi9pY3UvdW5pY29kZS9zbXBkdGZtdC5oCmluZGV4IDMw
NTQxMmI4ZDE1MzVmN2JiNjAwZTUxZDBiOWRlZmNlZTU1N2M0M2EuLmEwMTVjNWJlNWM4NzdhMTkz
ZGVhZTdhOTU1YjZjMTkyMjg3OGVjN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvaWN1L3VuaWNv
ZGUvc21wZHRmbXQuaAorKysgYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3NtcGR0Zm10LmgKQEAg
LTQ5LDYgKzQ5LDcgQEAgY2xhc3MgRmllbGRQb3NpdGlvbkhhbmRsZXI7CiBjbGFzcyBUaW1lWm9u
ZUZvcm1hdDsKIGNsYXNzIFNoYXJlZE51bWJlckZvcm1hdDsKIGNsYXNzIFNpbXBsZURhdGVGb3Jt
YXRNdXRhYmxlTkZzOworY2xhc3MgRGF0ZUludGVydmFsRm9ybWF0OwogCiBuYW1lc3BhY2UgbnVt
YmVyIHsKIGNsYXNzIExvY2FsaXplZE51bWJlckZvcm1hdHRlcjsKQEAgLTExNDcsNyArMTE0OCw3
IEBAIGNsYXNzIFVfSTE4Tl9BUEkgU2ltcGxlRGF0ZUZvcm1hdDogcHVibGljIERhdGVGb3JtYXQg
ewogICAgICAqIE92ZXJyaWRlcyBiYXNlIGNsYXNzIG1ldGhvZCBhbmQKICAgICAgKiBUaGlzIG1l
dGhvZCBjbGVhcnMgcGVyIGZpZWxkIE51bWJlckZvcm1hdCBpbnN0YW5jZXMKICAgICAgKiBwcmV2
aW91c2x5IHNldCBieSB7QHNlZSBhZG9wdE51bWJlckZvcm1hdChjb25zdCBVbmljb2RlU3RyaW5n
JiwgTnVtYmVyRm9ybWF0KiwgVUVycm9yQ29kZSl9Ci0gICAgICogQHBhcmFtIGFkb3B0TkYgdGhl
IE51bWJlZmVyRm9ybWF0IHVzZWQKKyAgICAgKiBAcGFyYW0gZm9ybWF0VG9BZG9wdCB0aGUgTnVt
YmVmZXJGb3JtYXQgdXNlZAogICAgICAqIEBzdGFibGUgSUNVIDU0CiAgICAgICovCiAgICAgdm9p
ZCBhZG9wdE51bWJlckZvcm1hdChOdW1iZXJGb3JtYXQgKmZvcm1hdFRvQWRvcHQpOwpAQCAtMTE2
Miw3ICsxMTYzLDcgQEAgY2xhc3MgVV9JMThOX0FQSSBTaW1wbGVEYXRlRm9ybWF0OiBwdWJsaWMg
RGF0ZUZvcm1hdCB7CiAgICAgICogUGVyIGZpZWxkIE51bWJlckZvcm1hdCBjYW4gYWxzbyBiZSBj
bGVhcmVkIGluIHtAc2VlIERhdGVGb3JtYXQ6OnNldE51bWJlckZvcm1hdChjb25zdCBOdW1iZXJG
b3JtYXQmIG5ld051bWJlckZvcm1hdCl9CiAgICAgICoKICAgICAgKiBAcGFyYW0gZmllbGRzICB0
aGUgZmllbGRzIHRvIG92ZXJyaWRlKGxpa2UgeSkKLSAgICAgKiBAcGFyYW0gYWRvcHRORiB0aGUg
TnVtYmVmZXJGb3JtYXQgdXNlZAorICAgICAqIEBwYXJhbSBmb3JtYXRUb0Fkb3B0IHRoZSBOdW1i
ZWZlckZvcm1hdCB1c2VkCiAgICAgICogQHBhcmFtIHN0YXR1cyAgUmVjZWl2ZXMgYSBzdGF0dXMg
Y29kZSwgd2hpY2ggd2lsbCBiZSBVX1pFUk9fRVJST1IKICAgICAgKiAgICAgICAgICAgICAgICBp
ZiB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRzLgogICAgICAqIEBzdGFibGUgSUNVIDU0CkBAIC0xMjE3
LDYgKzEyMTgsNyBAQCBjbGFzcyBVX0kxOE5fQVBJIFNpbXBsZURhdGVGb3JtYXQ6IHB1YmxpYyBE
YXRlRm9ybWF0IHsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgRGF0ZUZvcm1hdDsKKyAg
ICBmcmllbmQgY2xhc3MgRGF0ZUludGVydmFsRm9ybWF0OwogCiAgICAgdm9pZCBpbml0aWFsaXpl
RGVmYXVsdENlbnR1cnkodm9pZCk7CiAKQEAgLTE1OTcsNiArMTU5OSw3IEBAIGNsYXNzIFVfSTE4
Tl9BUEkgU2ltcGxlRGF0ZUZvcm1hdDogcHVibGljIERhdGVGb3JtYXQgewogCiAgICAgVUJvb2wg
ICAgICAgICAgICAgICAgZkhhc01pbnV0ZTsKICAgICBVQm9vbCAgICAgICAgICAgICAgICBmSGFz
U2Vjb25kOworICAgIFVCb29sICAgICAgICAgICAgICAgIGZIYXNIYW5ZZWFyQ2hhcjsgLy8gcGF0
dGVybiBjb250YWlucyB0aGUgSGFuIHllYXIgY2hhcmFjdGVyIFx1NUU3NAogCiAgICAgLyoqCiAg
ICAgICogU2V0cyBmSGFzTWludXRlcyBhbmQgZkhhc1NlY29uZHMuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL2ljdS91bmljb2RlL3N0cmluZ29wdGlvbnMuaCBiL1NvdXJjZS9XVEYvaWN1L3VuaWNv
ZGUvc3RyaW5nb3B0aW9ucy5oCmluZGV4IDg0NDI4ZjY3MTExNGNjNGFiZGZhNWViYWZiMDg1YjRk
MmQ1MDY0NzAuLjdiOWY3MDk0NGY2MmRiNjk5OTcwNTdmNWY2NzkxMjU2NmNkZGUyMjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvc3RyaW5nb3B0aW9ucy5oCisrKyBiL1NvdXJj
ZS9XVEYvaWN1L3VuaWNvZGUvc3RyaW5nb3B0aW9ucy5oCkBAIC0xLDE5OCArMSwxOTAgQEAKLS8v
IMKpIDIwMTcgYW5kIGxhdGVyOiBVbmljb2RlLCBJbmMuIGFuZCBvdGhlcnMuDQotLy8gTGljZW5z
ZSAmIHRlcm1zIG9mIHVzZTogaHR0cDovL3d3dy51bmljb2RlLm9yZy9jb3B5cmlnaHQuaHRtbA0K
LQ0KLS8vIHN0cmluZ29wdGlvbnMuaA0KLS8vIGNyZWF0ZWQ6IDIwMTdqdW4wOCBNYXJrdXMgVy4g
U2NoZXJlcg0KLQ0KLSNpZm5kZWYgX19TVFJJTkdPUFRJT05TX0hfXw0KLSNkZWZpbmUgX19TVFJJ
TkdPUFRJT05TX0hfXw0KLQ0KLSNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIg0KLQ0KLS8qKg0K
LSAqIFxmaWxlDQotICogXGJyaWVmIEMgQVBJOiBCaXQgc2V0IG9wdGlvbiBiaXQgY29uc3RhbnRz
IGZvciB2YXJpb3VzIHN0cmluZyBhbmQgY2hhcmFjdGVyIHByb2Nlc3NpbmcgZnVuY3Rpb25zLg0K
LSAqLw0KLQ0KLS8qKg0KLSAqIE9wdGlvbiB2YWx1ZSBmb3IgY2FzZSBmb2xkaW5nOiBVc2UgZGVm
YXVsdCBtYXBwaW5ncyBkZWZpbmVkIGluIENhc2VGb2xkaW5nLnR4dC4NCi0gKg0KLSAqIEBzdGFi
bGUgSUNVIDIuMA0KLSAqLw0KLSNkZWZpbmUgVV9GT0xEX0NBU0VfREVGQVVMVCAwDQotDQotLyoq
DQotICogT3B0aW9uIHZhbHVlIGZvciBjYXNlIGZvbGRpbmc6DQotICoNCi0gKiBVc2UgdGhlIG1v
ZGlmaWVkIHNldCBvZiBtYXBwaW5ncyBwcm92aWRlZCBpbiBDYXNlRm9sZGluZy50eHQgdG8gaGFu
ZGxlIGRvdHRlZCBJDQotICogYW5kIGRvdGxlc3MgaSBhcHByb3ByaWF0ZWx5IGZvciBUdXJraWMg
bGFuZ3VhZ2VzICh0ciwgYXopLg0KLSAqDQotICogQmVmb3JlIFVuaWNvZGUgMy4yLCBDYXNlRm9s
ZGluZy50eHQgY29udGFpbnMgbWFwcGluZ3MgbWFya2VkIHdpdGggJ0knIHRoYXQNCi0gKiBhcmUg
dG8gYmUgaW5jbHVkZWQgZm9yIGRlZmF1bHQgbWFwcGluZ3MgYW5kDQotICogZXhjbHVkZWQgZm9y
IHRoZSBUdXJraWMtc3BlY2lmaWMgbWFwcGluZ3MuDQotICoNCi0gKiBVbmljb2RlIDMuMiBDYXNl
Rm9sZGluZy50eHQgaW5zdGVhZCBjb250YWlucyBtYXBwaW5ncyBtYXJrZWQgd2l0aCAnVCcgdGhh
dA0KLSAqIGFyZSB0byBiZSBleGNsdWRlZCBmb3IgZGVmYXVsdCBtYXBwaW5ncyBhbmQNCi0gKiBp
bmNsdWRlZCBmb3IgdGhlIFR1cmtpYy1zcGVjaWZpYyBtYXBwaW5ncy4NCi0gKg0KLSAqIEBzdGFi
bGUgSUNVIDIuMA0KLSAqLw0KLSNkZWZpbmUgVV9GT0xEX0NBU0VfRVhDTFVERV9TUEVDSUFMX0kg
MQ0KLQ0KLSNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQ0KLQ0KLS8qKg0KLSAqIFRpdGxlY2FzZSB0
aGUgc3RyaW5nIGFzIGEgd2hvbGUgcmF0aGVyIHRoYW4gZWFjaCB3b3JkLg0KLSAqIChUaXRsZWNh
c2Ugb25seSB0aGUgY2hhcmFjdGVyIGF0IGluZGV4IDAsIHBvc3NpYmx5IGFkanVzdGVkLikNCi0g
KiBPcHRpb24gYml0cyB2YWx1ZSBmb3IgdGl0bGVjYXNpbmcgQVBJcyB0aGF0IHRha2UgYW4gb3B0
aW9ucyBiaXQgc2V0Lg0KLSAqDQotICogSXQgaXMgYW4gZXJyb3IgdG8gc3BlY2lmeSBtdWx0aXBs
ZSB0aXRsZWNhc2luZyBpdGVyYXRvciBvcHRpb25zIHRvZ2V0aGVyLA0KLSAqIGluY2x1ZGluZyBi
b3RoIGFuIG9wdGlvbnMgYml0IGFuZCBhbiBleHBsaWNpdCBCcmVha0l0ZXJhdG9yLg0KLSAqDQot
ICogQHNlZSBVX1RJVExFQ0FTRV9BREpVU1RfVE9fQ0FTRUQNCi0gKiBAZHJhZnQgSUNVIDYwDQot
ICovDQotI2RlZmluZSBVX1RJVExFQ0FTRV9XSE9MRV9TVFJJTkcgMHgyMA0KLQ0KLS8qKg0KLSAq
IFRpdGxlY2FzZSBzZW50ZW5jZXMgcmF0aGVyIHRoYW4gd29yZHMuDQotICogKFRpdGxlY2FzZSBv
bmx5IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgZWFjaCBzZW50ZW5jZSwgcG9zc2libHkgYWRqdXN0
ZWQuKQ0KLSAqIE9wdGlvbiBiaXRzIHZhbHVlIGZvciB0aXRsZWNhc2luZyBBUElzIHRoYXQgdGFr
ZSBhbiBvcHRpb25zIGJpdCBzZXQuDQotICoNCi0gKiBJdCBpcyBhbiBlcnJvciB0byBzcGVjaWZ5
IG11bHRpcGxlIHRpdGxlY2FzaW5nIGl0ZXJhdG9yIG9wdGlvbnMgdG9nZXRoZXIsDQotICogaW5j
bHVkaW5nIGJvdGggYW4gb3B0aW9ucyBiaXQgYW5kIGFuIGV4cGxpY2l0IEJyZWFrSXRlcmF0b3Iu
DQotICoNCi0gKiBAc2VlIFVfVElUTEVDQVNFX0FESlVTVF9UT19DQVNFRA0KLSAqIEBkcmFmdCBJ
Q1UgNjANCi0gKi8NCi0jZGVmaW5lIFVfVElUTEVDQVNFX1NFTlRFTkNFUyAweDQwDQotDQotI2Vu
ZGlmICAvLyBVX0hJREVfRFJBRlRfQVBJDQotDQotLyoqDQotICogRG8gbm90IGxvd2VyY2FzZSBu
b24taW5pdGlhbCBwYXJ0cyBvZiB3b3JkcyB3aGVuIHRpdGxlY2FzaW5nLg0KLSAqIE9wdGlvbiBi
aXQgZm9yIHRpdGxlY2FzaW5nIEFQSXMgdGhhdCB0YWtlIGFuIG9wdGlvbnMgYml0IHNldC4NCi0g
Kg0KLSAqIEJ5IGRlZmF1bHQsIHRpdGxlY2FzaW5nIHdpbGwgdGl0bGVjYXNlIHRoZSBjaGFyYWN0
ZXIgYXQgZWFjaA0KLSAqIChwb3NzaWJseSBhZGp1c3RlZCkgQnJlYWtJdGVyYXRvciBpbmRleCBh
bmQNCi0gKiBsb3dlcmNhc2UgYWxsIG90aGVyIGNoYXJhY3RlcnMgdXAgdG8gdGhlIG5leHQgaXRl
cmF0b3IgaW5kZXguDQotICogV2l0aCB0aGlzIG9wdGlvbiwgdGhlIG90aGVyIGNoYXJhY3RlcnMg
d2lsbCBub3QgYmUgbW9kaWZpZWQuDQotICoNCi0gKiBAc2VlIFVfVElUTEVDQVNFX0FESlVTVF9U
T19DQVNFRA0KLSAqIEBzZWUgVW5pY29kZVN0cmluZzo6dG9UaXRsZQ0KLSAqIEBzZWUgQ2FzZU1h
cDo6dG9UaXRsZQ0KLSAqIEBzZWUgdWNhc2VtYXBfc2V0T3B0aW9ucw0KLSAqIEBzZWUgdWNhc2Vt
YXBfdG9UaXRsZQ0KLSAqIEBzZWUgdWNhc2VtYXBfdXRmOFRvVGl0bGUNCi0gKiBAc3RhYmxlIElD
VSAzLjgNCi0gKi8NCi0jZGVmaW5lIFVfVElUTEVDQVNFX05PX0xPV0VSQ0FTRSAweDEwMA0KLQ0K
LS8qKg0KLSAqIERvIG5vdCBhZGp1c3QgdGhlIHRpdGxlY2FzaW5nIEJyZWFrSXRlcmF0b3IgaW5k
ZXhlczsNCi0gKiB0aXRsZWNhc2UgZXhhY3RseSB0aGUgY2hhcmFjdGVycyBhdCBicmVha3MgZnJv
bSB0aGUgaXRlcmF0b3IuDQotICogT3B0aW9uIGJpdCBmb3IgdGl0bGVjYXNpbmcgQVBJcyB0aGF0
IHRha2UgYW4gb3B0aW9ucyBiaXQgc2V0Lg0KLSAqDQotICogQnkgZGVmYXVsdCwgdGl0bGVjYXNp
bmcgd2lsbCB0YWtlIGVhY2ggYnJlYWsgaXRlcmF0b3IgaW5kZXgsDQotICogYWRqdXN0IGl0IHRv
IHRoZSBuZXh0IHJlbGV2YW50IGNoYXJhY3RlciAoc2VlIFVfVElUTEVDQVNFX0FESlVTVF9UT19D
QVNFRCksDQotICogYW5kIHRpdGxlY2FzZSB0aGF0IG9uZS4NCi0gKg0KLSAqIE90aGVyIGNoYXJh
Y3RlcnMgYXJlIGxvd2VyY2FzZWQuDQotICoNCi0gKiBJdCBpcyBhbiBlcnJvciB0byBzcGVjaWZ5
IG11bHRpcGxlIHRpdGxlY2FzaW5nIGFkanVzdG1lbnQgb3B0aW9ucyB0b2dldGhlci4NCi0gKg0K
LSAqIEBzZWUgVV9USVRMRUNBU0VfQURKVVNUX1RPX0NBU0VEDQotICogQHNlZSBVX1RJVExFQ0FT
RV9OT19MT1dFUkNBU0UNCi0gKiBAc2VlIFVuaWNvZGVTdHJpbmc6OnRvVGl0bGUNCi0gKiBAc2Vl
IENhc2VNYXA6OnRvVGl0bGUNCi0gKiBAc2VlIHVjYXNlbWFwX3NldE9wdGlvbnMNCi0gKiBAc2Vl
IHVjYXNlbWFwX3RvVGl0bGUNCi0gKiBAc2VlIHVjYXNlbWFwX3V0ZjhUb1RpdGxlDQotICogQHN0
YWJsZSBJQ1UgMy44DQotICovDQotI2RlZmluZSBVX1RJVExFQ0FTRV9OT19CUkVBS19BREpVU1RN
RU5UIDB4MjAwDQotDQotI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJDQotDQotLyoqDQotICogQWRq
dXN0IGVhY2ggdGl0bGVjYXNpbmcgQnJlYWtJdGVyYXRvciBpbmRleCB0byB0aGUgbmV4dCBjYXNl
ZCBjaGFyYWN0ZXIuDQotICogKFNlZSB0aGUgVW5pY29kZSBTdGFuZGFyZCwgY2hhcHRlciAzLCBE
ZWZhdWx0IENhc2UgQ29udmVyc2lvbiwgUjMgdG9UaXRsZWNhc2UoWCkuKQ0KLSAqIE9wdGlvbiBi
aXQgZm9yIHRpdGxlY2FzaW5nIEFQSXMgdGhhdCB0YWtlIGFuIG9wdGlvbnMgYml0IHNldC4NCi0g
Kg0KLSAqIFRoaXMgdXNlZCB0byBiZSB0aGUgZGVmYXVsdCBpbmRleCBhZGp1c3RtZW50IGluIElD
VS4NCi0gKiBTaW5jZSBJQ1UgNjAsIHRoZSBkZWZhdWx0IGluZGV4IGFkanVzdG1lbnQgaXMgdG8g
dGhlIG5leHQgY2hhcmFjdGVyIHRoYXQgaXMNCi0gKiBhIGxldHRlciwgbnVtYmVyLCBzeW1ib2ws
IG9yIHByaXZhdGUgdXNlIGNvZGUgcG9pbnQuDQotICogKFVuY2FzZWQgbW9kaWZpZXIgbGV0dGVy
cyBhcmUgc2tpcHBlZC4pDQotICogVGhlIGRpZmZlcmVuY2UgaW4gYmVoYXZpb3IgaXMgc21hbGwg
Zm9yIHdvcmQgdGl0bGVjYXNpbmcsDQotICogYnV0IHRoZSBuZXcgYWRqdXN0bWVudCBpcyBtdWNo
IGJldHRlciBmb3Igd2hvbGUtc3RyaW5nIGFuZCBzZW50ZW5jZSB0aXRsZWNhc2luZzoNCi0gKiBJ
dCB5aWVsZHMgIjQ5ZXJzIiBhbmQgIsKr5LiwKGFiYynCuyIgaW5zdGVhZCBvZiAiNDlFcnMiIGFu
ZCAiwqvkuLAoQWJjKcK7Ii4NCi0gKg0KLSAqIEl0IGlzIGFuIGVycm9yIHRvIHNwZWNpZnkgbXVs
dGlwbGUgdGl0bGVjYXNpbmcgYWRqdXN0bWVudCBvcHRpb25zIHRvZ2V0aGVyLg0KLSAqDQotICog
QHNlZSBVX1RJVExFQ0FTRV9OT19CUkVBS19BREpVU1RNRU5UDQotICogQGRyYWZ0IElDVSA2MA0K
LSAqLw0KLSNkZWZpbmUgVV9USVRMRUNBU0VfQURKVVNUX1RPX0NBU0VEIDB4NDAwDQotDQotLyoq
DQotICogT3B0aW9uIGZvciBzdHJpbmcgdHJhbnNmb3JtYXRpb24gZnVuY3Rpb25zIHRvIG5vdCBm
aXJzdCByZXNldCB0aGUgRWRpdHMgb2JqZWN0Lg0KLSAqIFVzZWQgZm9yIGV4YW1wbGUgaW4gc29t
ZSBjYXNlLW1hcHBpbmcgYW5kIG5vcm1hbGl6YXRpb24gZnVuY3Rpb25zLg0KLSAqDQotICogQHNl
ZSBDYXNlTWFwDQotICogQHNlZSBFZGl0cw0KLSAqIEBzZWUgTm9ybWFsaXplcjINCi0gKiBAZHJh
ZnQgSUNVIDYwDQotICovDQotI2RlZmluZSBVX0VESVRTX05PX1JFU0VUIDB4MjAwMA0KLQ0KLS8q
Kg0KLSAqIE9taXQgdW5jaGFuZ2VkIHRleHQgd2hlbiByZWNvcmRpbmcgaG93IHNvdXJjZSBzdWJz
dHJpbmdzDQotICogcmVsYXRlIHRvIGNoYW5nZWQgYW5kIHVuY2hhbmdlZCByZXN1bHQgc3Vic3Ry
aW5ncy4NCi0gKiBVc2VkIGZvciBleGFtcGxlIGluIHNvbWUgY2FzZS1tYXBwaW5nIGFuZCBub3Jt
YWxpemF0aW9uIGZ1bmN0aW9ucy4NCi0gKg0KLSAqIEBzZWUgQ2FzZU1hcA0KLSAqIEBzZWUgRWRp
dHMNCi0gKiBAc2VlIE5vcm1hbGl6ZXIyDQotICogQGRyYWZ0IElDVSA2MA0KLSAqLw0KLSNkZWZp
bmUgVV9PTUlUX1VOQ0hBTkdFRF9URVhUIDB4NDAwMA0KLQ0KLSNlbmRpZiAgLy8gVV9ISURFX0RS
QUZUX0FQSQ0KLQ0KLS8qKg0KLSAqIE9wdGlvbiBiaXQgZm9yIHVfc3RyQ2FzZUNvbXBhcmUsIHVf
c3RyY2FzZWNtcCwgdW5vcm1fY29tcGFyZSwgZXRjOg0KLSAqIENvbXBhcmUgc3RyaW5ncyBpbiBj
b2RlIHBvaW50IG9yZGVyIGluc3RlYWQgb2YgY29kZSB1bml0IG9yZGVyLg0KLSAqIEBzdGFibGUg
SUNVIDIuMg0KLSAqLw0KLSNkZWZpbmUgVV9DT01QQVJFX0NPREVfUE9JTlRfT1JERVIgIDB4ODAw
MA0KLQ0KLS8qKg0KLSAqIE9wdGlvbiBiaXQgZm9yIHVub3JtX2NvbXBhcmU6DQotICogUGVyZm9y
bSBjYXNlLWluc2Vuc2l0aXZlIGNvbXBhcmlzb24uDQotICogQHN0YWJsZSBJQ1UgMi4yDQotICov
DQotI2RlZmluZSBVX0NPTVBBUkVfSUdOT1JFX0NBU0UgICAgICAgMHgxMDAwMA0KLQ0KLS8qKg0K
LSAqIE9wdGlvbiBiaXQgZm9yIHVub3JtX2NvbXBhcmU6DQotICogQm90aCBpbnB1dCBzdHJpbmdz
IGFyZSBhc3N1bWVkIHRvIGZ1bGZpbGwgRkNEIGNvbmRpdGlvbnMuDQotICogQHN0YWJsZSBJQ1Ug
Mi4yDQotICovDQotI2RlZmluZSBVTk9STV9JTlBVVF9JU19GQ0QgICAgICAgICAgMHgyMDAwMA0K
LQ0KLS8vIFJlbGF0ZWQgZGVmaW5pdGlvbnMgZWxzZXdoZXJlLg0KLS8vIE9wdGlvbnMgdGhhdCBh
cmUgbm90IG1lYW5pbmdmdWwgaW4gdGhlIHNhbWUgZnVuY3Rpb25zDQotLy8gY2FuIHNoYXJlIHRo
ZSBzYW1lIGJpdHMuDQotLy8NCi0vLyBQdWJsaWM6DQotLy8gdW5pY29kZS91bm9ybS5oICNkZWZp
bmUgVU5PUk1fQ09NUEFSRV9OT1JNX09QVElPTlNfU0hJRlQgMjANCi0vLw0KLS8vIEludGVybmFs
OiAobWF5IGNoYW5nZSBvciBiZSByZW1vdmVkKQ0KLS8vIHVjYXNlLmggI2RlZmluZSBfU1RSQ0FT
RUNNUF9PUFRJT05TX01BU0sgMHhmZmZmDQotLy8gdWNhc2UuaCAjZGVmaW5lIF9GT0xEX0NBU0Vf
T1BUSU9OU19NQVNLIDcNCi0vLyB1Y2FzZW1hcF9pbXAuaCAjZGVmaW5lIFVfVElUTEVDQVNFX0lU
RVJBVE9SX01BU0sgMHhlMA0KLS8vIHVjYXNlbWFwX2ltcC5oICNkZWZpbmUgVV9USVRMRUNBU0Vf
QURKVVNUTUVOVF9NQVNLIDB4NjAwDQotLy8gdXN0cl9pbXAuaCAjZGVmaW5lIF9TVFJOQ01QX1NU
WUxFIDB4MTAwMA0KLS8vIHVub3JtY21wLmNwcCAjZGVmaW5lIF9DT01QQVJFX0VRVUlWIDB4ODAw
MDANCi0NCi0jZW5kaWYgIC8vIF9fU1RSSU5HT1BUSU9OU19IX18NCisvLyDCqSAyMDE3IGFuZCBs
YXRlcjogVW5pY29kZSwgSW5jLiBhbmQgb3RoZXJzLgorLy8gTGljZW5zZSAmIHRlcm1zIG9mIHVz
ZTogaHR0cDovL3d3dy51bmljb2RlLm9yZy9jb3B5cmlnaHQuaHRtbAorCisvLyBzdHJpbmdvcHRp
b25zLmgKKy8vIGNyZWF0ZWQ6IDIwMTdqdW4wOCBNYXJrdXMgVy4gU2NoZXJlcgorCisjaWZuZGVm
IF9fU1RSSU5HT1BUSU9OU19IX18KKyNkZWZpbmUgX19TVFJJTkdPUFRJT05TX0hfXworCisjaW5j
bHVkZSAidW5pY29kZS91dHlwZXMuaCIKKworLyoqCisgKiBcZmlsZQorICogXGJyaWVmIEMgQVBJ
OiBCaXQgc2V0IG9wdGlvbiBiaXQgY29uc3RhbnRzIGZvciB2YXJpb3VzIHN0cmluZyBhbmQgY2hh
cmFjdGVyIHByb2Nlc3NpbmcgZnVuY3Rpb25zLgorICovCisKKy8qKgorICogT3B0aW9uIHZhbHVl
IGZvciBjYXNlIGZvbGRpbmc6IFVzZSBkZWZhdWx0IG1hcHBpbmdzIGRlZmluZWQgaW4gQ2FzZUZv
bGRpbmcudHh0LgorICoKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCisjZGVmaW5lIFVfRk9MRF9D
QVNFX0RFRkFVTFQgMAorCisvKioKKyAqIE9wdGlvbiB2YWx1ZSBmb3IgY2FzZSBmb2xkaW5nOgor
ICoKKyAqIFVzZSB0aGUgbW9kaWZpZWQgc2V0IG9mIG1hcHBpbmdzIHByb3ZpZGVkIGluIENhc2VG
b2xkaW5nLnR4dCB0byBoYW5kbGUgZG90dGVkIEkKKyAqIGFuZCBkb3RsZXNzIGkgYXBwcm9wcmlh
dGVseSBmb3IgVHVya2ljIGxhbmd1YWdlcyAodHIsIGF6KS4KKyAqCisgKiBCZWZvcmUgVW5pY29k
ZSAzLjIsIENhc2VGb2xkaW5nLnR4dCBjb250YWlucyBtYXBwaW5ncyBtYXJrZWQgd2l0aCAnSScg
dGhhdAorICogYXJlIHRvIGJlIGluY2x1ZGVkIGZvciBkZWZhdWx0IG1hcHBpbmdzIGFuZAorICog
ZXhjbHVkZWQgZm9yIHRoZSBUdXJraWMtc3BlY2lmaWMgbWFwcGluZ3MuCisgKgorICogVW5pY29k
ZSAzLjIgQ2FzZUZvbGRpbmcudHh0IGluc3RlYWQgY29udGFpbnMgbWFwcGluZ3MgbWFya2VkIHdp
dGggJ1QnIHRoYXQKKyAqIGFyZSB0byBiZSBleGNsdWRlZCBmb3IgZGVmYXVsdCBtYXBwaW5ncyBh
bmQKKyAqIGluY2x1ZGVkIGZvciB0aGUgVHVya2ljLXNwZWNpZmljIG1hcHBpbmdzLgorICoKKyAq
IEBzdGFibGUgSUNVIDIuMAorICovCisjZGVmaW5lIFVfRk9MRF9DQVNFX0VYQ0xVREVfU1BFQ0lB
TF9JIDEKKworLyoqCisgKiBUaXRsZWNhc2UgdGhlIHN0cmluZyBhcyBhIHdob2xlIHJhdGhlciB0
aGFuIGVhY2ggd29yZC4KKyAqIChUaXRsZWNhc2Ugb25seSB0aGUgY2hhcmFjdGVyIGF0IGluZGV4
IDAsIHBvc3NpYmx5IGFkanVzdGVkLikKKyAqIE9wdGlvbiBiaXRzIHZhbHVlIGZvciB0aXRsZWNh
c2luZyBBUElzIHRoYXQgdGFrZSBhbiBvcHRpb25zIGJpdCBzZXQuCisgKgorICogSXQgaXMgYW4g
ZXJyb3IgdG8gc3BlY2lmeSBtdWx0aXBsZSB0aXRsZWNhc2luZyBpdGVyYXRvciBvcHRpb25zIHRv
Z2V0aGVyLAorICogaW5jbHVkaW5nIGJvdGggYW4gb3B0aW9ucyBiaXQgYW5kIGFuIGV4cGxpY2l0
IEJyZWFrSXRlcmF0b3IuCisgKgorICogQHNlZSBVX1RJVExFQ0FTRV9BREpVU1RfVE9fQ0FTRUQK
KyAqIEBzdGFibGUgSUNVIDYwCisgKi8KKyNkZWZpbmUgVV9USVRMRUNBU0VfV0hPTEVfU1RSSU5H
IDB4MjAKKworLyoqCisgKiBUaXRsZWNhc2Ugc2VudGVuY2VzIHJhdGhlciB0aGFuIHdvcmRzLgor
ICogKFRpdGxlY2FzZSBvbmx5IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgZWFjaCBzZW50ZW5jZSwg
cG9zc2libHkgYWRqdXN0ZWQuKQorICogT3B0aW9uIGJpdHMgdmFsdWUgZm9yIHRpdGxlY2FzaW5n
IEFQSXMgdGhhdCB0YWtlIGFuIG9wdGlvbnMgYml0IHNldC4KKyAqCisgKiBJdCBpcyBhbiBlcnJv
ciB0byBzcGVjaWZ5IG11bHRpcGxlIHRpdGxlY2FzaW5nIGl0ZXJhdG9yIG9wdGlvbnMgdG9nZXRo
ZXIsCisgKiBpbmNsdWRpbmcgYm90aCBhbiBvcHRpb25zIGJpdCBhbmQgYW4gZXhwbGljaXQgQnJl
YWtJdGVyYXRvci4KKyAqCisgKiBAc2VlIFVfVElUTEVDQVNFX0FESlVTVF9UT19DQVNFRAorICog
QHN0YWJsZSBJQ1UgNjAKKyAqLworI2RlZmluZSBVX1RJVExFQ0FTRV9TRU5URU5DRVMgMHg0MAor
CisvKioKKyAqIERvIG5vdCBsb3dlcmNhc2Ugbm9uLWluaXRpYWwgcGFydHMgb2Ygd29yZHMgd2hl
biB0aXRsZWNhc2luZy4KKyAqIE9wdGlvbiBiaXQgZm9yIHRpdGxlY2FzaW5nIEFQSXMgdGhhdCB0
YWtlIGFuIG9wdGlvbnMgYml0IHNldC4KKyAqCisgKiBCeSBkZWZhdWx0LCB0aXRsZWNhc2luZyB3
aWxsIHRpdGxlY2FzZSB0aGUgY2hhcmFjdGVyIGF0IGVhY2gKKyAqIChwb3NzaWJseSBhZGp1c3Rl
ZCkgQnJlYWtJdGVyYXRvciBpbmRleCBhbmQKKyAqIGxvd2VyY2FzZSBhbGwgb3RoZXIgY2hhcmFj
dGVycyB1cCB0byB0aGUgbmV4dCBpdGVyYXRvciBpbmRleC4KKyAqIFdpdGggdGhpcyBvcHRpb24s
IHRoZSBvdGhlciBjaGFyYWN0ZXJzIHdpbGwgbm90IGJlIG1vZGlmaWVkLgorICoKKyAqIEBzZWUg
VV9USVRMRUNBU0VfQURKVVNUX1RPX0NBU0VECisgKiBAc2VlIFVuaWNvZGVTdHJpbmc6OnRvVGl0
bGUKKyAqIEBzZWUgQ2FzZU1hcDo6dG9UaXRsZQorICogQHNlZSB1Y2FzZW1hcF9zZXRPcHRpb25z
CisgKiBAc2VlIHVjYXNlbWFwX3RvVGl0bGUKKyAqIEBzZWUgdWNhc2VtYXBfdXRmOFRvVGl0bGUK
KyAqIEBzdGFibGUgSUNVIDMuOAorICovCisjZGVmaW5lIFVfVElUTEVDQVNFX05PX0xPV0VSQ0FT
RSAweDEwMAorCisvKioKKyAqIERvIG5vdCBhZGp1c3QgdGhlIHRpdGxlY2FzaW5nIEJyZWFrSXRl
cmF0b3IgaW5kZXhlczsKKyAqIHRpdGxlY2FzZSBleGFjdGx5IHRoZSBjaGFyYWN0ZXJzIGF0IGJy
ZWFrcyBmcm9tIHRoZSBpdGVyYXRvci4KKyAqIE9wdGlvbiBiaXQgZm9yIHRpdGxlY2FzaW5nIEFQ
SXMgdGhhdCB0YWtlIGFuIG9wdGlvbnMgYml0IHNldC4KKyAqCisgKiBCeSBkZWZhdWx0LCB0aXRs
ZWNhc2luZyB3aWxsIHRha2UgZWFjaCBicmVhayBpdGVyYXRvciBpbmRleCwKKyAqIGFkanVzdCBp
dCB0byB0aGUgbmV4dCByZWxldmFudCBjaGFyYWN0ZXIgKHNlZSBVX1RJVExFQ0FTRV9BREpVU1Rf
VE9fQ0FTRUQpLAorICogYW5kIHRpdGxlY2FzZSB0aGF0IG9uZS4KKyAqCisgKiBPdGhlciBjaGFy
YWN0ZXJzIGFyZSBsb3dlcmNhc2VkLgorICoKKyAqIEl0IGlzIGFuIGVycm9yIHRvIHNwZWNpZnkg
bXVsdGlwbGUgdGl0bGVjYXNpbmcgYWRqdXN0bWVudCBvcHRpb25zIHRvZ2V0aGVyLgorICoKKyAq
IEBzZWUgVV9USVRMRUNBU0VfQURKVVNUX1RPX0NBU0VECisgKiBAc2VlIFVfVElUTEVDQVNFX05P
X0xPV0VSQ0FTRQorICogQHNlZSBVbmljb2RlU3RyaW5nOjp0b1RpdGxlCisgKiBAc2VlIENhc2VN
YXA6OnRvVGl0bGUKKyAqIEBzZWUgdWNhc2VtYXBfc2V0T3B0aW9ucworICogQHNlZSB1Y2FzZW1h
cF90b1RpdGxlCisgKiBAc2VlIHVjYXNlbWFwX3V0ZjhUb1RpdGxlCisgKiBAc3RhYmxlIElDVSAz
LjgKKyAqLworI2RlZmluZSBVX1RJVExFQ0FTRV9OT19CUkVBS19BREpVU1RNRU5UIDB4MjAwCisK
Ky8qKgorICogQWRqdXN0IGVhY2ggdGl0bGVjYXNpbmcgQnJlYWtJdGVyYXRvciBpbmRleCB0byB0
aGUgbmV4dCBjYXNlZCBjaGFyYWN0ZXIuCisgKiAoU2VlIHRoZSBVbmljb2RlIFN0YW5kYXJkLCBj
aGFwdGVyIDMsIERlZmF1bHQgQ2FzZSBDb252ZXJzaW9uLCBSMyB0b1RpdGxlY2FzZShYKS4pCisg
KiBPcHRpb24gYml0IGZvciB0aXRsZWNhc2luZyBBUElzIHRoYXQgdGFrZSBhbiBvcHRpb25zIGJp
dCBzZXQuCisgKgorICogVGhpcyB1c2VkIHRvIGJlIHRoZSBkZWZhdWx0IGluZGV4IGFkanVzdG1l
bnQgaW4gSUNVLgorICogU2luY2UgSUNVIDYwLCB0aGUgZGVmYXVsdCBpbmRleCBhZGp1c3RtZW50
IGlzIHRvIHRoZSBuZXh0IGNoYXJhY3RlciB0aGF0IGlzCisgKiBhIGxldHRlciwgbnVtYmVyLCBz
eW1ib2wsIG9yIHByaXZhdGUgdXNlIGNvZGUgcG9pbnQuCisgKiAoVW5jYXNlZCBtb2RpZmllciBs
ZXR0ZXJzIGFyZSBza2lwcGVkLikKKyAqIFRoZSBkaWZmZXJlbmNlIGluIGJlaGF2aW9yIGlzIHNt
YWxsIGZvciB3b3JkIHRpdGxlY2FzaW5nLAorICogYnV0IHRoZSBuZXcgYWRqdXN0bWVudCBpcyBt
dWNoIGJldHRlciBmb3Igd2hvbGUtc3RyaW5nIGFuZCBzZW50ZW5jZSB0aXRsZWNhc2luZzoKKyAq
IEl0IHlpZWxkcyAiNDllcnMiIGFuZCAiwqvkuLAoYWJjKcK7IiBpbnN0ZWFkIG9mICI0OUVycyIg
YW5kICLCq+S4sChBYmMpwrsiLgorICoKKyAqIEl0IGlzIGFuIGVycm9yIHRvIHNwZWNpZnkgbXVs
dGlwbGUgdGl0bGVjYXNpbmcgYWRqdXN0bWVudCBvcHRpb25zIHRvZ2V0aGVyLgorICoKKyAqIEBz
ZWUgVV9USVRMRUNBU0VfTk9fQlJFQUtfQURKVVNUTUVOVAorICogQHN0YWJsZSBJQ1UgNjAKKyAq
LworI2RlZmluZSBVX1RJVExFQ0FTRV9BREpVU1RfVE9fQ0FTRUQgMHg0MDAKKworLyoqCisgKiBP
cHRpb24gZm9yIHN0cmluZyB0cmFuc2Zvcm1hdGlvbiBmdW5jdGlvbnMgdG8gbm90IGZpcnN0IHJl
c2V0IHRoZSBFZGl0cyBvYmplY3QuCisgKiBVc2VkIGZvciBleGFtcGxlIGluIHNvbWUgY2FzZS1t
YXBwaW5nIGFuZCBub3JtYWxpemF0aW9uIGZ1bmN0aW9ucy4KKyAqCisgKiBAc2VlIENhc2VNYXAK
KyAqIEBzZWUgRWRpdHMKKyAqIEBzZWUgTm9ybWFsaXplcjIKKyAqIEBzdGFibGUgSUNVIDYwCisg
Ki8KKyNkZWZpbmUgVV9FRElUU19OT19SRVNFVCAweDIwMDAKKworLyoqCisgKiBPbWl0IHVuY2hh
bmdlZCB0ZXh0IHdoZW4gcmVjb3JkaW5nIGhvdyBzb3VyY2Ugc3Vic3RyaW5ncworICogcmVsYXRl
IHRvIGNoYW5nZWQgYW5kIHVuY2hhbmdlZCByZXN1bHQgc3Vic3RyaW5ncy4KKyAqIFVzZWQgZm9y
IGV4YW1wbGUgaW4gc29tZSBjYXNlLW1hcHBpbmcgYW5kIG5vcm1hbGl6YXRpb24gZnVuY3Rpb25z
LgorICoKKyAqIEBzZWUgQ2FzZU1hcAorICogQHNlZSBFZGl0cworICogQHNlZSBOb3JtYWxpemVy
MgorICogQHN0YWJsZSBJQ1UgNjAKKyAqLworI2RlZmluZSBVX09NSVRfVU5DSEFOR0VEX1RFWFQg
MHg0MDAwCisKKy8qKgorICogT3B0aW9uIGJpdCBmb3IgdV9zdHJDYXNlQ29tcGFyZSwgdV9zdHJj
YXNlY21wLCB1bm9ybV9jb21wYXJlLCBldGM6CisgKiBDb21wYXJlIHN0cmluZ3MgaW4gY29kZSBw
b2ludCBvcmRlciBpbnN0ZWFkIG9mIGNvZGUgdW5pdCBvcmRlci4KKyAqIEBzdGFibGUgSUNVIDIu
MgorICovCisjZGVmaW5lIFVfQ09NUEFSRV9DT0RFX1BPSU5UX09SREVSICAweDgwMDAKKworLyoq
CisgKiBPcHRpb24gYml0IGZvciB1bm9ybV9jb21wYXJlOgorICogUGVyZm9ybSBjYXNlLWluc2Vu
c2l0aXZlIGNvbXBhcmlzb24uCisgKiBAc3RhYmxlIElDVSAyLjIKKyAqLworI2RlZmluZSBVX0NP
TVBBUkVfSUdOT1JFX0NBU0UgICAgICAgMHgxMDAwMAorCisvKioKKyAqIE9wdGlvbiBiaXQgZm9y
IHVub3JtX2NvbXBhcmU6CisgKiBCb3RoIGlucHV0IHN0cmluZ3MgYXJlIGFzc3VtZWQgdG8gZnVs
ZmlsbCBGQ0QgY29uZGl0aW9ucy4KKyAqIEBzdGFibGUgSUNVIDIuMgorICovCisjZGVmaW5lIFVO
T1JNX0lOUFVUX0lTX0ZDRCAgICAgICAgICAweDIwMDAwCisKKy8vIFJlbGF0ZWQgZGVmaW5pdGlv
bnMgZWxzZXdoZXJlLgorLy8gT3B0aW9ucyB0aGF0IGFyZSBub3QgbWVhbmluZ2Z1bCBpbiB0aGUg
c2FtZSBmdW5jdGlvbnMKKy8vIGNhbiBzaGFyZSB0aGUgc2FtZSBiaXRzLgorLy8KKy8vIFB1Ymxp
YzoKKy8vIHVuaWNvZGUvdW5vcm0uaCAjZGVmaW5lIFVOT1JNX0NPTVBBUkVfTk9STV9PUFRJT05T
X1NISUZUIDIwCisvLworLy8gSW50ZXJuYWw6IChtYXkgY2hhbmdlIG9yIGJlIHJlbW92ZWQpCisv
LyB1Y2FzZS5oICNkZWZpbmUgX1NUUkNBU0VDTVBfT1BUSU9OU19NQVNLIDB4ZmZmZgorLy8gdWNh
c2UuaCAjZGVmaW5lIF9GT0xEX0NBU0VfT1BUSU9OU19NQVNLIDcKKy8vIHVjYXNlbWFwX2ltcC5o
ICNkZWZpbmUgVV9USVRMRUNBU0VfSVRFUkFUT1JfTUFTSyAweGUwCisvLyB1Y2FzZW1hcF9pbXAu
aCAjZGVmaW5lIFVfVElUTEVDQVNFX0FESlVTVE1FTlRfTUFTSyAweDYwMAorLy8gdXN0cl9pbXAu
aCAjZGVmaW5lIF9TVFJOQ01QX1NUWUxFIDB4MTAwMAorLy8gdW5vcm1jbXAuY3BwICNkZWZpbmUg
X0NPTVBBUkVfRVFVSVYgMHg4MDAwMAorCisjZW5kaWYgIC8vIF9fU1RSSU5HT1BUSU9OU19IX18K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvc3RyaW5ndHJpZWJ1aWxkZXIuaCBi
L1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvc3RyaW5ndHJpZWJ1aWxkZXIuaAppbmRleCBjYWVhZTUx
YTQ3MjIyMDg3MDMzOTMxYTE5YTIyNDU2MDRhNWI5Mzk0Li5mZTk5ZmRiNDFmZGQ0ZjVhM2NiN2Zm
ZmYxZWIzYjJkMDY3MTZmZTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3N0
cmluZ3RyaWVidWlsZGVyLmgKKysrIGIvU291cmNlL1dURi9pY3UvdW5pY29kZS9zdHJpbmd0cmll
YnVpbGRlci5oCkBAIC0yNiw4ICsyNiwxMCBAQAogICovCiAKIC8vIEZvcndhcmQgZGVjbGFyYXRp
b24uCisvLy8gXGNvbmQKIHN0cnVjdCBVSGFzaHRhYmxlOwogdHlwZWRlZiBzdHJ1Y3QgVUhhc2h0
YWJsZSBVSGFzaHRhYmxlOworLy8vIFxlbmRjb25kCiAKIC8qKgogICogQnVpbGQgb3B0aW9ucyBm
b3IgQnl0ZXNUcmllQnVpbGRlciBhbmQgQ2hhcnNUcmllQnVpbGRlci4KQEAgLTY0LDcgKzY2LDcg
QEAgY2xhc3MgVV9DT01NT05fQVBJIFN0cmluZ1RyaWVCdWlsZGVyIDogcHVibGljIFVPYmplY3Qg
ewogcHVibGljOgogI2lmbmRlZiBVX0hJREVfSU5URVJOQUxfQVBJCiAgICAgLyoqIEBpbnRlcm5h
bCAqLwotICAgIHN0YXRpYyBVQm9vbCBoYXNoTm9kZShjb25zdCB2b2lkICpub2RlKTsKKyAgICBz
dGF0aWMgaW50MzJfdCBoYXNoTm9kZShjb25zdCB2b2lkICpub2RlKTsKICAgICAvKiogQGludGVy
bmFsICovCiAgICAgc3RhdGljIFVCb29sIGVxdWFsTm9kZXMoY29uc3Qgdm9pZCAqbGVmdCwgY29u
c3Qgdm9pZCAqcmlnaHQpOwogI2VuZGlmICAvKiBVX0hJREVfSU5URVJOQUxfQVBJICovCkBAIC0x
ODgsNyArMTkwLDEwIEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBTdHJpbmdUcmllQnVpbGRlciA6IHB1
YmxpYyBVT2JqZWN0IHsKIAogICAgIC8vIERvIG5vdCBjb25kaXRpb25hbGl6ZSB0aGUgZm9sbG93
aW5nIHdpdGggI2lmbmRlZiBVX0hJREVfSU5URVJOQUxfQVBJLAogICAgIC8vIGl0IGlzIG5lZWRl
ZCBmb3IgbGF5b3V0IG9mIG90aGVyIG9iamVjdHMuCi0gICAgLyoqIEBpbnRlcm5hbCAqLworICAg
IC8qKgorICAgICAqIEBpbnRlcm5hbAorICAgICAqIFxjb25kCisgICAgICovCiAgICAgY2xhc3Mg
Tm9kZSA6IHB1YmxpYyBVT2JqZWN0IHsKICAgICBwdWJsaWM6CiAgICAgICAgIE5vZGUoaW50MzJf
dCBpbml0aWFsSGFzaCkgOiBoYXNoKGluaXRpYWxIYXNoKSwgb2Zmc2V0KDApIHt9CkBAIC0zOTEs
NyArMzk2LDkgQEAgY2xhc3MgVV9DT01NT05fQVBJIFN0cmluZ1RyaWVCdWlsZGVyIDogcHVibGlj
IFVPYmplY3QgewogICAgICAgICBpbnQzMl90IGxlbmd0aDsKICAgICAgICAgTm9kZSAqbmV4dDsg
IC8vIEEgYnJhbmNoIHN1Yi1ub2RlLgogICAgIH07CisKICNlbmRpZiAgLyogVV9ISURFX0lOVEVS
TkFMX0FQSSAqLworICAgIC8vLyBcZW5kY29uZAogCiAgICAgLyoqIEBpbnRlcm5hbCAqLwogICAg
IHZpcnR1YWwgTm9kZSAqY3JlYXRlTGluZWFyTWF0Y2hOb2RlKGludDMyX3QgaSwgaW50MzJfdCB1
bml0SW5kZXgsIGludDMyX3QgbGVuZ3RoLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9pY3UvdW5p
Y29kZS90aW1lem9uZS5oIGIvU291cmNlL1dURi9pY3UvdW5pY29kZS90aW1lem9uZS5oCmluZGV4
IDA2NDcwM2UxNTg3Mzk3YWE4YzExMzE0ODg0ZGJiMmQ5M2IzOWUyZTkuLmRlNTU4ZjkxYWM5OWQ1
ZmE5YzlhNWZjM2QwYjMzOWViNDhmNmE3NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvaWN1L3Vu
aWNvZGUvdGltZXpvbmUuaAorKysgYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3RpbWV6b25lLmgK
QEAgLTI3NywxNyArMjc3LDI1IEBAIGNsYXNzIFVfSTE4Tl9BUEkgVGltZVpvbmUgOiBwdWJsaWMg
VU9iamVjdCB7CiAKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFRpbWVa
b25lIGRldGVjdGVkIGZyb20gdGhlIGN1cnJlbnQgaG9zdAotICAgICAqIHN5c3RlbSBjb25maWd1
cmF0aW9uLiBOb3RlIHRoYXQgSUNVNEMgZG9lcyBub3QgY2hhbmdlIHRoZSBkZWZhdWx0Ci0gICAg
ICogdGltZSB6b25lIHVubGVzcyBUaW1lWm9uZTo6YWRvcHREZWZhdWx0KFRpbWVab25lKikgb3IK
LSAgICAgKiBUaW1lWm9uZTo6c2V0RGVmYXVsdChjb25zdCBUaW1lWm9uZSYpIGlzIGV4cGxpY2l0
bHkgY2FsbGVkIGJ5IGEKKyAgICAgKiBzeXN0ZW0gY29uZmlndXJhdGlvbi4gSWYgdGhlIGhvc3Qg
c3lzdGVtIGRldGVjdGlvbiByb3V0aW5lcyBmYWlsLAorICAgICAqIG9yIGlmIHRoZXkgc3BlY2lm
eSBhIFRpbWVab25lIG9yIFRpbWVab25lIG9mZnNldCB3aGljaCBpcyBub3QKKyAgICAgKiByZWNv
Z25pemVkLCB0aGVuIHRoZSBzcGVjaWFsIFRpbWVab25lICJFdGMvVW5rbm93biIgaXMgcmV0dXJu
ZWQuCisgICAgICogCisgICAgICogTm90ZSB0aGF0IElDVTRDIGRvZXMgbm90IGNoYW5nZSB0aGUg
ZGVmYXVsdCB0aW1lIHpvbmUgdW5sZXNzCisgICAgICogYFRpbWVab25lOjphZG9wdERlZmF1bHQo
VGltZVpvbmUqKWAgb3IgCisgICAgICogYFRpbWVab25lOjpzZXREZWZhdWx0KGNvbnN0IFRpbWVa
b25lJilgIGlzIGV4cGxpY2l0bHkgY2FsbGVkIGJ5IGEKICAgICAgKiB1c2VyLiBUaGlzIG1ldGhv
ZCBkb2VzIG5vdCB1cGRhdGUgdGhlIGN1cnJlbnQgSUNVJ3MgZGVmYXVsdCwKICAgICAgKiBhbmQg
bWF5IHJldHVybiBhIGRpZmZlcmVudCBUaW1lWm9uZSBmcm9tIHRoZSBvbmUgcmV0dXJuZWQgYnkK
LSAgICAgKiBUaW1lWm9uZTo6Y3JlYXRlRGVmYXVsdCgpLgorICAgICAqIGBUaW1lWm9uZTo6Y3Jl
YXRlRGVmYXVsdCgpYC4KICAgICAgKgogICAgICAqIDxwPlRoaXMgZnVuY3Rpb24gaXMgbm90IHRo
cmVhZCBzYWZlLjwvcD4KICAgICAgKgogICAgICAqIEByZXR1cm4gIEEgbmV3IGluc3RhbmNlIG9m
IFRpbWVab25lIGRldGVjdGVkIGZyb20gdGhlIGN1cnJlbnQgaG9zdCBzeXN0ZW0KICAgICAgKiAg
ICAgICAgICBjb25maWd1cmF0aW9uLgorICAgICAqIEBzZWUgYWRvcHREZWZhdWx0CisgICAgICog
QHNlZSBzZXREZWZhdWx0CisgICAgICogQHNlZSBjcmVhdGVEZWZhdWx0CisgICAgICogQHNlZSBn
ZXRVbmtub3duCiAgICAgICogQHN0YWJsZSBJQ1UgNTUKICAgICAgKi8KICAgICBzdGF0aWMgVGlt
ZVpvbmUqIFVfRVhQT1JUMiBkZXRlY3RIb3N0VGltZVpvbmUoKTsKQEAgLTI5NSwxMyArMzAzLDE0
IEBAIGNsYXNzIFVfSTE4Tl9BUEkgVGltZVpvbmUgOiBwdWJsaWMgVU9iamVjdCB7CiAgICAgLyoq
CiAgICAgICogQ3JlYXRlcyBhIG5ldyBjb3B5IG9mIHRoZSBkZWZhdWx0IFRpbWVab25lIGZvciB0
aGlzIGhvc3QuIFVubGVzcyB0aGUgZGVmYXVsdCB0aW1lCiAgICAgICogem9uZSBoYXMgYWxyZWFk
eSBiZWVuIHNldCB1c2luZyBhZG9wdERlZmF1bHQoKSBvciBzZXREZWZhdWx0KCksIHRoZSBkZWZh
dWx0IGlzCi0gICAgICogZGV0ZXJtaW5lZCBieSBxdWVyeWluZyB0aGUgc3lzdGVtIHVzaW5nIG1l
dGhvZHMgaW4gVFBsYXRmb3JtVXRpbGl0aWVzLiBJZiB0aGUKLSAgICAgKiBzeXN0ZW0gcm91dGlu
ZXMgZmFpbCwgb3IgaWYgdGhleSBzcGVjaWZ5IGEgVGltZVpvbmUgb3IgVGltZVpvbmUgb2Zmc2V0
IHdoaWNoIGlzIG5vdAotICAgICAqIHJlY29nbml6ZWQsIHRoZSBUaW1lWm9uZSBpbmRpY2F0ZWQg
YnkgdGhlIElEIGtMYXN0UmVzb3J0SUQgaXMgaW5zdGFudGlhdGVkCi0gICAgICogYW5kIG1hZGUg
dGhlIGRlZmF1bHQuCisgICAgICogZGV0ZXJtaW5lZCBieSBxdWVyeWluZyB0aGUgaG9zdCBzeXN0
ZW0gY29uZmlndXJhdGlvbi4gSWYgdGhlIGhvc3Qgc3lzdGVtIGRldGVjdGlvbgorICAgICAqIHJv
dXRpbmVzIGZhaWwsIG9yIGlmIHRoZXkgc3BlY2lmeSBhIFRpbWVab25lIG9yIFRpbWVab25lIG9m
ZnNldCB3aGljaCBpcyBub3QKKyAgICAgKiByZWNvZ25pemVkLCB0aGVuIHRoZSBzcGVjaWFsIFRp
bWVab25lICJFdGMvVW5rbm93biIgaXMgaW5zdGFudGlhdGVkIGFuZCBtYWRlIHRoZQorICAgICAq
IGRlZmF1bHQuCiAgICAgICoKICAgICAgKiBAcmV0dXJuICAgQSBkZWZhdWx0IFRpbWVab25lLiBD
bGllbnRzIGFyZSByZXNwb25zaWJsZSBmb3IgZGVsZXRpbmcgdGhlIHRpbWUgem9uZQogICAgICAq
ICAgICAgICAgICBvYmplY3QgcmV0dXJuZWQuCisgICAgICogQHNlZSBnZXRVbmtub3duCiAgICAg
ICogQHN0YWJsZSBJQ1UgMi4wCiAgICAgICovCiAgICAgc3RhdGljIFRpbWVab25lKiBVX0VYUE9S
VDIgY3JlYXRlRGVmYXVsdCh2b2lkKTsKQEAgLTY1NywxMyArNjY2LDEzIEBAIGNsYXNzIFVfSTE4
Tl9BUEkgVGltZVpvbmUgOiBwdWJsaWMgVU9iamVjdCB7CiAgICAgICogSWYgdGhlIGRpc3BsYXkg
bmFtZSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGUgbG9jYWxlLAogICAgICAqIHRoZW4gdGhpcyBt
ZXRob2QgcmV0dXJucyBhIHN0cmluZyBpbiB0aGUgbG9jYWxpemVkIEdNVCBvZmZzZXQgZm9ybWF0
CiAgICAgICogc3VjaCBhcyA8Y29kZT5HTVRbKy1dSEg6bW08L2NvZGU+LgotICAgICAqIEBwYXJh
bSBkYXlsaWdodCBpZiB0cnVlLCByZXR1cm4gdGhlIGRheWxpZ2h0IHNhdmluZ3MgbmFtZS4KKyAg
ICAgKiBAcGFyYW0gaW5EYXlsaWdodCBpZiB0cnVlLCByZXR1cm4gdGhlIGRheWxpZ2h0IHNhdmlu
Z3MgbmFtZS4KICAgICAgKiBAcGFyYW0gc3R5bGUKICAgICAgKiBAcGFyYW0gcmVzdWx0IHRoZSBo
dW1hbi1yZWFkYWJsZSBuYW1lIG9mIHRoaXMgdGltZSB6b25lIGluIHRoZSBkZWZhdWx0IGxvY2Fs
ZS4KICAgICAgKiBAcmV0dXJuICAgICAgIEEgcmVmZXJlbmNlIHRvICdyZXN1bHQnLgogICAgICAq
IEBzdGFibGUgSUNVIDIuMAogICAgICAqLwotICAgIFVuaWNvZGVTdHJpbmcmIGdldERpc3BsYXlO
YW1lKFVCb29sIGRheWxpZ2h0LCBFRGlzcGxheVR5cGUgc3R5bGUsIFVuaWNvZGVTdHJpbmcmIHJl
c3VsdCkgY29uc3Q7CisgICAgVW5pY29kZVN0cmluZyYgZ2V0RGlzcGxheU5hbWUoVUJvb2wgaW5E
YXlsaWdodCwgRURpc3BsYXlUeXBlIHN0eWxlLCBVbmljb2RlU3RyaW5nJiByZXN1bHQpIGNvbnN0
OwogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBhIG5hbWUgb2YgdGhpcyB0aW1lIHpvbmUgc3Vp
dGFibGUgZm9yIHByZXNlbnRhdGlvbiB0byB0aGUgdXNlcgpAQCAtNjcxLDE1ICs2ODAsMTUgQEAg
Y2xhc3MgVV9JMThOX0FQSSBUaW1lWm9uZSA6IHB1YmxpYyBVT2JqZWN0IHsKICAgICAgKiBJZiB0
aGUgZGlzcGxheSBuYW1lIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBsb2NhbGUsCiAgICAgICog
dGhlbiB0aGlzIG1ldGhvZCByZXR1cm5zIGEgc3RyaW5nIGluIHRoZSBsb2NhbGl6ZWQgR01UIG9m
ZnNldCBmb3JtYXQKICAgICAgKiBzdWNoIGFzIDxjb2RlPkdNVFsrLV1ISDptbTwvY29kZT4uCi0g
ICAgICogQHBhcmFtIGRheWxpZ2h0IGlmIHRydWUsIHJldHVybiB0aGUgZGF5bGlnaHQgc2F2aW5n
cyBuYW1lLgorICAgICAqIEBwYXJhbSBpbkRheWxpZ2h0IGlmIHRydWUsIHJldHVybiB0aGUgZGF5
bGlnaHQgc2F2aW5ncyBuYW1lLgogICAgICAqIEBwYXJhbSBzdHlsZQogICAgICAqIEBwYXJhbSBs
b2NhbGUgdGhlIGxvY2FsZSBpbiB3aGljaCB0byBzdXBwbHkgdGhlIGRpc3BsYXkgbmFtZS4KICAg
ICAgKiBAcGFyYW0gcmVzdWx0IHRoZSBodW1hbi1yZWFkYWJsZSBuYW1lIG9mIHRoaXMgdGltZSB6
b25lIGluIHRoZSBnaXZlbiBsb2NhbGUKICAgICAgKiAgICAgICAgICAgICAgIG9yIGluIHRoZSBk
ZWZhdWx0IGxvY2FsZSBpZiB0aGUgZ2l2ZW4gbG9jYWxlIGlzIG5vdCByZWNvZ25pemVkLgotICAg
ICAqIEByZXR1cm4gICAgICAgQSByZWZlbmNlIHRvICdyZXN1bHQnLgorICAgICAqIEByZXR1cm4g
ICAgICAgQSByZWZlcmVuY2UgdG8gJ3Jlc3VsdCcuCiAgICAgICogQHN0YWJsZSBJQ1UgMi4wCiAg
ICAgICovCi0gICAgVW5pY29kZVN0cmluZyYgZ2V0RGlzcGxheU5hbWUoVUJvb2wgZGF5bGlnaHQs
IEVEaXNwbGF5VHlwZSBzdHlsZSwgY29uc3QgTG9jYWxlJiBsb2NhbGUsIFVuaWNvZGVTdHJpbmcm
IHJlc3VsdCkgY29uc3Q7CisgICAgVW5pY29kZVN0cmluZyYgZ2V0RGlzcGxheU5hbWUoVUJvb2wg
aW5EYXlsaWdodCwgRURpc3BsYXlUeXBlIHN0eWxlLCBjb25zdCBMb2NhbGUmIGxvY2FsZSwgVW5p
Y29kZVN0cmluZyYgcmVzdWx0KSBjb25zdDsKICAgICAKICAgICAvKioKICAgICAgKiBRdWVyaWVz
IGlmIHRoaXMgdGltZSB6b25lIHVzZXMgZGF5bGlnaHQgc2F2aW5ncyB0aW1lLgpAQCAtOTI2LDcg
KzkzNSw3IEBAIGNsYXNzIFVfSTE4Tl9BUEkgVGltZVpvbmUgOiBwdWJsaWMgVU9iamVjdCB7CiAg
ICAgICAgIFVFcnJvckNvZGUmIHN0YXR1cyk7CiAKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRo
ZSBub3JtYWxpemVkIGN1c3RvbWUgdGltZSB6b25lIElEIGZvciB0aGUgZ2l2ZW4gb2Zmc2V0IGZp
ZWxkcy4KKyAgICAgKiBSZXR1cm5zIHRoZSBub3JtYWxpemVkIGN1c3RvbSB0aW1lIHpvbmUgSUQg
Zm9yIHRoZSBnaXZlbiBvZmZzZXQgZmllbGRzLgogICAgICAqIEBwYXJhbSBob3VyIG9mZnNldCBo
b3VycwogICAgICAqIEBwYXJhbSBtaW4gb2Zmc2V0IG1pbnV0ZXMKICAgICAgKiBAcGFyYW0gc2Vj
IG9mZnNldCBzZWNvbmRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3RyYW5z
bGl0LmggYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3RyYW5zbGl0LmgKaW5kZXggYmNjYmE1NDgw
MjQyNDY3ZTYzYTgyZGM3MDRkMWJjOTI0N2YwNzU2Ni4uNmI0ODg4MTQ1ZjFiZTUxMzY0YjA1MDBh
ZjI1YzA4MGJhZDlmOWMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9pY3UvdW5pY29kZS90cmFu
c2xpdC5oCisrKyBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdHJhbnNsaXQuaApAQCAtMTUsMTAg
KzE1LDEwIEBACiAjaW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKIAogLyoqCi0gKiBcZmlsZSAK
KyAqIFxmaWxlCiAgKiBcYnJpZWYgQysrIEFQSTogVHJhbmZvcm1zIHRleHQgZnJvbSBvbmUgZm9y
bWF0IHRvIGFub3RoZXIuCiAgKi8KLSAKKwogI2lmICFVQ09ORklHX05PX1RSQU5TTElURVJBVElP
TgogCiAjaW5jbHVkZSAidW5pY29kZS91b2JqZWN0LmgiCkBAIC0zMSw3ICszMSw2IEBAIFVfTkFN
RVNQQUNFX0JFR0lOCiAKIGNsYXNzIFVuaWNvZGVGaWx0ZXI7CiBjbGFzcyBVbmljb2RlU2V0Owot
Y2xhc3MgQ29tcG91bmRUcmFuc2xpdGVyYXRvcjsKIGNsYXNzIFRyYW5zbGl0ZXJhdG9yUGFyc2Vy
OwogY2xhc3MgTm9ybWFsaXphdGlvblRyYW5zbGl0ZXJhdG9yOwogY2xhc3MgVHJhbnNsaXRlcmF0
b3JJRFBhcnNlcjsKQEAgLTc3LDggKzc2LDcgQEAgY2xhc3MgVHJhbnNsaXRlcmF0b3JJRFBhcnNl
cjsKICAqIHRyYW5zbGl0ZXJhdGlvbi4gIEZvciBleGFtcGxlLCBnaXZlbiBhIHN0cmluZyA8Y29k
ZT5pbnB1dDwvY29kZT4KICAqIGFuZCBhIHRyYW5zbGl0ZXJhdG9yIDxjb2RlPnQ8L2NvZGU+LCB0
aGUgY2FsbAogICoKLSAqIFxodG1sb25seTxibG9ja3F1b3RlPlxlbmRodG1sb25seTxjb2RlPlN0
cmluZyByZXN1bHQgPSB0LnRyYW5zbGl0ZXJhdGUoaW5wdXQpOwotICogPC9jb2RlPlxodG1sb25s
eTwvYmxvY2txdW90ZT5cZW5kaHRtbG9ubHkKKyAqICAgICBTdHJpbmcgcmVzdWx0ID0gdC50cmFu
c2xpdGVyYXRlKGlucHV0KTsKICAqCiAgKiB3aWxsIHRyYW5zbGl0ZXJhdGUgaXQgYW5kIHJldHVy
biB0aGUgcmVzdWx0LiAgT3RoZXIgbWV0aG9kcyBhbGxvdwogICogdGhlIGNsaWVudCB0byBzcGVj
aWZ5IGEgc3Vic3RyaW5nIHRvIGJlIHRyYW5zbGl0ZXJhdGVkIGFuZCB0byB1c2UKQEAgLTk4LDIy
ICs5NiwyMCBAQCBjbGFzcyBUcmFuc2xpdGVyYXRvcklEUGFyc2VyOwogICogY29udGVudHMgb2Yg
dGhlIGJ1ZmZlciBtYXkgc2hvdyB0ZXh0IGJlaW5nIG1vZGlmaWVkIGFzIGVhY2ggbmV3CiAgKiBj
aGFyYWN0ZXIgYXJyaXZlcy4KICAqCi0gKiA8cD5Db25zaWRlciB0aGUgc2ltcGxlIDxjb2RlPlJ1
bGVCYXNlZFRyYW5zbGl0ZXJhdG9yPC9jb2RlPjoKLSAqCi0gKiBcaHRtbG9ubHk8YmxvY2txdW90
ZT5cZW5kaHRtbG9ubHk8Y29kZT4KLSAqIHRoJmd0O3t0aGV0YX08YnI+Ci0gKiB0Jmd0O3t0YXV9
Ci0gKiA8L2NvZGU+XGh0bWxvbmx5PC9ibG9ja3F1b3RlPlxlbmRodG1sb25seQorICogPHA+Q29u
c2lkZXIgdGhlIHNpbXBsZSBydWxlLWJhc2VkIFRyYW5zbGl0ZXJhdG9yOgorICogPHByZT4KKyAq
ICAgICB0aD57dGhldGF9CisgKiAgICAgdD57dGF1fQorICogPC9wcmU+CiAgKgogICogV2hlbiB0
aGUgdXNlciB0eXBlcyAndCcsIG5vdGhpbmcgd2lsbCBoYXBwZW4sIHNpbmNlIHRoZQogICogdHJh
bnNsaXRlcmF0b3IgaXMgd2FpdGluZyB0byBzZWUgaWYgdGhlIG5leHQgY2hhcmFjdGVyIGlzICdo
Jy4gIFRvCiAgKiByZW1lZHkgdGhpcywgd2UgaW50cm9kdWNlIHRoZSBub3Rpb24gb2YgYSBjdXJz
b3IsIG1hcmtlZCBieSBhICd8JwogICogaW4gdGhlIG91dHB1dCBzdHJpbmc6Ci0gKgotICogXGh0
bWxvbmx5PGJsb2NrcXVvdGU+XGVuZGh0bWxvbmx5PGNvZGU+Ci0gKiB0Jmd0O3x7dGF1fTxicj4K
LSAqIHt0YXV9aCZndDt7dGhldGF9Ci0gKiA8L2NvZGU+XGh0bWxvbmx5PC9ibG9ja3F1b3RlPlxl
bmRodG1sb25seQorICogPHByZT4KKyAqICAgICB0Pnx7dGF1fQorICogICAgIHt0YXV9aD57dGhl
dGF9CisgKiA8L3ByZT4KICAqCiAgKiBOb3cgd2hlbiB0aGUgdXNlciB0eXBlcyAndCcsIHRhdSBh
cHBlYXJzLCBhbmQgaWYgdGhlIG5leHQgY2hhcmFjdGVyCiAgKiBpcyAnaCcsIHRoZSB0YXUgY2hh
bmdlcyB0byBhIHRoZXRhLiAgVGhpcyBpcyBhY2NvbXBsaXNoZWQgYnkKQEAgLTEzNSw3ICsxMzEs
NyBAQCBjbGFzcyBUcmFuc2xpdGVyYXRvcklEUGFyc2VyOwogICogd2hpY2ggdGhlIHRyYW5zbGl0
ZXJhdG9yIGxhc3Qgc3RvcHBlZCwgZWl0aGVyIGJlY2F1c2UgaXQgcmVhY2hlZAogICogdGhlIGVu
ZCwgb3IgYmVjYXVzZSBpdCByZXF1aXJlZCBtb3JlIGNoYXJhY3RlcnMgdG8gZGlzYW1iaWd1YXRl
CiAgKiBiZXR3ZWVuIHBvc3NpYmxlIGlucHV0cy4gIFRoZSA8Y29kZT5DVVJTT1I8L2NvZGU+IGNh
biBhbHNvIGJlCi0gKiBleHBsaWNpdGx5IHNldCBieSBydWxlcyBpbiBhIDxjb2RlPlJ1bGVCYXNl
ZFRyYW5zbGl0ZXJhdG9yPC9jb2RlPi4KKyAqIGV4cGxpY2l0bHkgc2V0IGJ5IHJ1bGVzIGluIGEg
cnVsZS1iYXNlZCBUcmFuc2xpdGVyYXRvci4KICAqIEFueSBjaGFyYWN0ZXJzIGJlZm9yZSB0aGUg
PGNvZGU+Q1VSU09SPC9jb2RlPiBpbmRleCBhcmUgZnJvemVuOwogICogZnV0dXJlIGtleWJvYXJk
IHRyYW5zbGl0ZXJhdGlvbiBjYWxscyB3aXRoaW4gdGhpcyBpbnB1dCBzZXF1ZW5jZQogICogd2ls
bCBub3QgY2hhbmdlIHRoZW0uICBOZXcgdGV4dCBpcyBpbnNlcnRlZCBhdCB0aGUKQEAgLTIzNyw2
ICsyMzMsMjU1IEBAIGNsYXNzIFRyYW5zbGl0ZXJhdG9ySURQYXJzZXI7CiAgKiBpZiB0aGUgcGVy
Zm9ybWFuY2Ugb2YgdGhlc2UgbWV0aG9kcyBjYW4gYmUgaW1wcm92ZWQgb3ZlciB0aGUKICAqIHBl
cmZvcm1hbmNlIG9idGFpbmVkIGJ5IHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9ucyBpbiB0aGlz
IGNsYXNzLgogICoKKyAqIDxwPjxiPlJ1bGUgc3ludGF4PC9iPgorICoKKyAqIDxwPkEgc2V0IG9m
IHJ1bGVzIGRldGVybWluZXMgaG93IHRvIHBlcmZvcm0gdHJhbnNsYXRpb25zLgorICogUnVsZXMg
d2l0aGluIGEgcnVsZSBzZXQgYXJlIHNlcGFyYXRlZCBieSBzZW1pY29sb25zICgnOycpLgorICog
VG8gaW5jbHVkZSBhIGxpdGVyYWwgc2VtaWNvbG9uLCBwcmVmaXggaXQgd2l0aCBhIGJhY2tzbGFz
aCAoJ1wnKS4KKyAqIFVuaWNvZGUgUGF0dGVybl9XaGl0ZV9TcGFjZSBpcyBpZ25vcmVkLgorICog
SWYgdGhlIGZpcnN0IG5vbi1ibGFuayBjaGFyYWN0ZXIgb24gYSBsaW5lIGlzICcjJywKKyAqIHRo
ZSBlbnRpcmUgbGluZSBpcyBpZ25vcmVkIGFzIGEgY29tbWVudC4KKyAqCisgKiA8cD5FYWNoIHNl
dCBvZiBydWxlcyBjb25zaXN0cyBvZiB0d28gZ3JvdXBzLCBvbmUgZm9yd2FyZCwgYW5kIG9uZQor
ICogcmV2ZXJzZS4gVGhpcyBpcyBhIGNvbnZlbnRpb24gdGhhdCBpcyBub3QgZW5mb3JjZWQ7IHJ1
bGVzIGZvciBvbmUKKyAqIGRpcmVjdGlvbiBtYXkgYmUgb21pdHRlZCwgd2l0aCB0aGUgcmVzdWx0
IHRoYXQgdHJhbnNsYXRpb25zIGluCisgKiB0aGF0IGRpcmVjdGlvbiB3aWxsIG5vdCBtb2RpZnkg
dGhlIHNvdXJjZSB0ZXh0LiBJbiBhZGRpdGlvbiwKKyAqIGJpZGlyZWN0aW9uYWwgZm9yd2FyZC1y
ZXZlcnNlIHJ1bGVzIG1heSBiZSBzcGVjaWZpZWQgZm9yCisgKiBzeW1tZXRyaWNhbCB0cmFuc2Zv
cm1hdGlvbnMuCisgKgorICogPHA+Tm90ZTogQW5vdGhlciBkZXNjcmlwdGlvbiBvZiB0aGUgVHJh
bnNsaXRlcmF0b3IgcnVsZSBzeW50YXggaXMgYXZhaWxhYmxlIGluCisgKiA8YSBocmVmPSJodHRw
czovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS1nZW5lcmFsLmh0bWwjVHJhbnNm
b3JtX1J1bGVzX1N5bnRheCI+c2VjdGlvbgorICogVHJhbnNmb3JtIFJ1bGVzIFN5bnRheCBvZiBV
VFMgIzM1OiBVbmljb2RlIExETUw8L2E+LgorICogVGhlIHJ1bGVzIGFyZSBzaG93biB0aGVyZSB1
c2luZyBhcnJvdyBzeW1ib2xzIOKGkCBhbmQg4oaSIGFuZCDihpQuCisgKiBJQ1Ugc3VwcG9ydHMg
Ym90aCB0aG9zZSBhbmQgdGhlIGVxdWl2YWxlbnQgQVNDSUkgc3ltYm9scyAmbHQ7IGFuZCAmZ3Q7
IGFuZCAmbHQ7Jmd0Oy4KKyAqCisgKiA8cD5SdWxlIHN0YXRlbWVudHMgdGFrZSBvbmUgb2YgdGhl
IGZvbGxvd2luZyBmb3JtczoKKyAqCisgKiA8ZGw+CisgKiAgICAgPGR0Pjxjb2RlPiRhbGVmbWFk
ZGE9XFx1MDYyMjs8L2NvZGU+PC9kdD4KKyAqICAgICA8ZGQ+PHN0cm9uZz5WYXJpYWJsZSBkZWZp
bml0aW9uLjwvc3Ryb25nPiBUaGUgbmFtZSBvbiB0aGUKKyAqICAgICAgICAgbGVmdCBpcyBhc3Np
Z25lZCB0aGUgdGV4dCBvbiB0aGUgcmlnaHQuIEluIHRoaXMgZXhhbXBsZSwKKyAqICAgICAgICAg
YWZ0ZXIgdGhpcyBzdGF0ZW1lbnQsIGluc3RhbmNlcyBvZiB0aGUgbGVmdCBoYW5kIG5hbWUsCisg
KiAgICAgICAgICZxdW90Ozxjb2RlPiRhbGVmbWFkZGE8L2NvZGU+JnF1b3Q7LCB3aWxsIGJlIHJl
cGxhY2VkIGJ5CisgKiAgICAgICAgIHRoZSBVbmljb2RlIGNoYXJhY3RlciBVKzA2MjIuIFZhcmlh
YmxlIG5hbWVzIG11c3QgYmVnaW4KKyAqICAgICAgICAgd2l0aCBhIGxldHRlciBhbmQgY29uc2lz
dCBvbmx5IG9mIGxldHRlcnMsIGRpZ2l0cywgYW5kCisgKiAgICAgICAgIHVuZGVyc2NvcmVzLiBD
YXNlIGlzIHNpZ25pZmljYW50LiBEdXBsaWNhdGUgbmFtZXMgY2F1c2UKKyAqICAgICAgICAgYW4g
ZXhjZXB0aW9uIHRvIGJlIHRocm93biwgdGhhdCBpcywgdmFyaWFibGVzIGNhbm5vdCBiZQorICog
ICAgICAgICByZWRlZmluZWQuIFRoZSByaWdodCBoYW5kIHNpZGUgbWF5IGNvbnRhaW4gd2VsbC1m
b3JtZWQKKyAqICAgICAgICAgdGV4dCBvZiBhbnkgbGVuZ3RoLCBpbmNsdWRpbmcgbm8gdGV4dCBh
dCBhbGwgKCZxdW90Ozxjb2RlPiRlbXB0eT07PC9jb2RlPiZxdW90OykuCisgKiAgICAgICAgIFRo
ZSByaWdodCBoYW5kIHNpZGUgbWF5IGNvbnRhaW4gZW1iZWRkZWQgPGNvZGU+VW5pY29kZVNldDwv
Y29kZT4KKyAqICAgICAgICAgcGF0dGVybnMsIGZvciBleGFtcGxlLCAmcXVvdDs8Y29kZT4kc29m
dHZvd2VsPVtlaXlFSVldPC9jb2RlPiZxdW90Oy48L2RkPgorICogICAgIDxkdD48Y29kZT5haSZn
dDskYWxlZm1hZGRhOzwvY29kZT48L2R0PgorICogICAgIDxkZD48c3Ryb25nPkZvcndhcmQgdHJh
bnNsYXRpb24gcnVsZS48L3N0cm9uZz4gVGhpcyBydWxlCisgKiAgICAgICAgIHN0YXRlcyB0aGF0
IHRoZSBzdHJpbmcgb24gdGhlIGxlZnQgd2lsbCBiZSBjaGFuZ2VkIHRvIHRoZQorICogICAgICAg
ICBzdHJpbmcgb24gdGhlIHJpZ2h0IHdoZW4gcGVyZm9ybWluZyBmb3J3YXJkCisgKiAgICAgICAg
IHRyYW5zbGl0ZXJhdGlvbi48L2RkPgorICogICAgIDxkdD48Y29kZT5haSZsdDskYWxlZm1hZGRh
OzwvY29kZT48L2R0PgorICogICAgIDxkZD48c3Ryb25nPlJldmVyc2UgdHJhbnNsYXRpb24gcnVs
ZS48L3N0cm9uZz4gVGhpcyBydWxlCisgKiAgICAgICAgIHN0YXRlcyB0aGF0IHRoZSBzdHJpbmcg
b24gdGhlIHJpZ2h0IHdpbGwgYmUgY2hhbmdlZCB0bworICogICAgICAgICB0aGUgc3RyaW5nIG9u
IHRoZSBsZWZ0IHdoZW4gcGVyZm9ybWluZyByZXZlcnNlCisgKiAgICAgICAgIHRyYW5zbGl0ZXJh
dGlvbi48L2RkPgorICogPC9kbD4KKyAqCisgKiA8ZGw+CisgKiAgICAgPGR0Pjxjb2RlPmFpJmx0
OyZndDskYWxlZm1hZGRhOzwvY29kZT48L2R0PgorICogICAgIDxkZD48c3Ryb25nPkJpZGlyZWN0
aW9uYWwgdHJhbnNsYXRpb24gcnVsZS48L3N0cm9uZz4gVGhpcworICogICAgICAgICBydWxlIHN0
YXRlcyB0aGF0IHRoZSBzdHJpbmcgb24gdGhlIHJpZ2h0IHdpbGwgYmUgY2hhbmdlZAorICogICAg
ICAgICB0byB0aGUgc3RyaW5nIG9uIHRoZSBsZWZ0IHdoZW4gcGVyZm9ybWluZyBmb3J3YXJkCisg
KiAgICAgICAgIHRyYW5zbGl0ZXJhdGlvbiwgYW5kIHZpY2UgdmVyc2Egd2hlbiBwZXJmb3JtaW5n
IHJldmVyc2UKKyAqICAgICAgICAgdHJhbnNsaXRlcmF0aW9uLjwvZGQ+CisgKiA8L2RsPgorICoK
KyAqIDxwPlRyYW5zbGF0aW9uIHJ1bGVzIGNvbnNpc3Qgb2YgYSA8ZW0+bWF0Y2ggcGF0dGVybjwv
ZW0+IGFuZCBhbiA8ZW0+b3V0cHV0CisgKiBzdHJpbmc8L2VtPi4gVGhlIG1hdGNoIHBhdHRlcm4g
Y29uc2lzdHMgb2YgbGl0ZXJhbCBjaGFyYWN0ZXJzLAorICogb3B0aW9uYWxseSBwcmVjZWRlZCBi
eSBjb250ZXh0LCBhbmQgb3B0aW9uYWxseSBmb2xsb3dlZCBieQorICogY29udGV4dC4gQ29udGV4
dCBjaGFyYWN0ZXJzLCBsaWtlIGxpdGVyYWwgcGF0dGVybiBjaGFyYWN0ZXJzLAorICogbXVzdCBi
ZSBtYXRjaGVkIGluIHRoZSB0ZXh0IGJlaW5nIHRyYW5zbGl0ZXJhdGVkLiBIb3dldmVyLCB1bmxp
a2UKKyAqIGxpdGVyYWwgcGF0dGVybiBjaGFyYWN0ZXJzLCB0aGV5IGFyZSBub3QgcmVwbGFjZWQg
YnkgdGhlIG91dHB1dAorICogdGV4dC4gRm9yIGV4YW1wbGUsIHRoZSBwYXR0ZXJuICZxdW90Ozxj
b2RlPmFiY3tkZWZ9PC9jb2RlPiZxdW90OworICogaW5kaWNhdGVzIHRoZSBjaGFyYWN0ZXJzICZx
dW90Ozxjb2RlPmRlZjwvY29kZT4mcXVvdDsgbXVzdCBiZQorICogcHJlY2VkZWQgYnkgJnF1b3Q7
PGNvZGU+YWJjPC9jb2RlPiZxdW90OyBmb3IgYSBzdWNjZXNzZnVsIG1hdGNoLgorICogSWYgdGhl
cmUgaXMgYSBzdWNjZXNzZnVsIG1hdGNoLCAmcXVvdDs8Y29kZT5kZWY8L2NvZGU+JnF1b3Q7IHdp
bGwKKyAqIGJlIHJlcGxhY2VkLCBidXQgbm90ICZxdW90Ozxjb2RlPmFiYzwvY29kZT4mcXVvdDsu
IFRoZSBmaW5hbCAnPGNvZGU+fTwvY29kZT4nCisgKiBpcyBvcHRpb25hbCwgc28gJnF1b3Q7PGNv
ZGU+YWJje2RlZjwvY29kZT4mcXVvdDsgaXMgZXF1aXZhbGVudCB0bworICogJnF1b3Q7PGNvZGU+
YWJje2RlZn08L2NvZGU+JnF1b3Q7LiBBbm90aGVyIGV4YW1wbGUgaXMgJnF1b3Q7PGNvZGU+ezEy
M300NTY8L2NvZGU+JnF1b3Q7CisgKiAob3IgJnF1b3Q7PGNvZGU+MTIzfTQ1NjwvY29kZT4mcXVv
dDspIGluIHdoaWNoIHRoZSBsaXRlcmFsCisgKiBwYXR0ZXJuICZxdW90Ozxjb2RlPjEyMzwvY29k
ZT4mcXVvdDsgbXVzdCBiZSBmb2xsb3dlZCBieSAmcXVvdDs8Y29kZT40NTY8L2NvZGU+JnF1b3Q7
LgorICoKKyAqIDxwPlRoZSBvdXRwdXQgc3RyaW5nIG9mIGEgZm9yd2FyZCBvciByZXZlcnNlIHJ1
bGUgY29uc2lzdHMgb2YKKyAqIGNoYXJhY3RlcnMgdG8gcmVwbGFjZSB0aGUgbGl0ZXJhbCBwYXR0
ZXJuIGNoYXJhY3RlcnMuIElmIHRoZQorICogb3V0cHV0IHN0cmluZyBjb250YWlucyB0aGUgY2hh
cmFjdGVyICc8Y29kZT58PC9jb2RlPicsIHRoaXMgaXMKKyAqIHRha2VuIHRvIGluZGljYXRlIHRo
ZSBsb2NhdGlvbiBvZiB0aGUgPGVtPmN1cnNvcjwvZW0+IGFmdGVyCisgKiByZXBsYWNlbWVudC4g
VGhlIGN1cnNvciBpcyB0aGUgcG9pbnQgaW4gdGhlIHRleHQgYXQgd2hpY2ggdGhlCisgKiBuZXh0
IHJlcGxhY2VtZW50LCBpZiBhbnksIHdpbGwgYmUgYXBwbGllZC4gVGhlIGN1cnNvciBpcyB1c3Vh
bGx5CisgKiBwbGFjZWQgd2l0aGluIHRoZSByZXBsYWNlbWVudCB0ZXh0OyBob3dldmVyLCBpdCBj
YW4gYWN0dWFsbHkgYmUKKyAqIHBsYWNlZCBpbnRvIHRoZSBwcmVjZW5kaW5nIG9yIGZvbGxvd2lu
ZyBjb250ZXh0IGJ5IHVzaW5nIHRoZQorICogc3BlY2lhbCBjaGFyYWN0ZXIgJ0AnLiBFeGFtcGxl
czoKKyAqCisgKiA8cHJlPgorICogICAgIGEge2Zvb30geiAmZ3Q7IHwgQCBiYXI7ICMgZm9vIC0m
Z3Q7IGJhciwgbW92ZSBjdXJzb3IgYmVmb3JlIGEKKyAqICAgICB7Zm9vfSB4eXogJmd0OyBiYXIg
QEB8OyAjJm5ic3A7Zm9vIC0mZ3Q7IGJhciwgY3Vyc29yIGJldHdlZW4geSBhbmQgegorICogPC9w
cmU+CisgKgorICogPHA+PGI+VW5pY29kZVNldDwvYj4KKyAqCisgKiA8cD48Y29kZT5Vbmljb2Rl
U2V0PC9jb2RlPiBwYXR0ZXJucyBtYXkgYXBwZWFyIGFueXdoZXJlIHRoYXQKKyAqIG1ha2VzIHNl
bnNlLiBUaGV5IG1heSBhcHBlYXIgaW4gdmFyaWFibGUgZGVmaW5pdGlvbnMuCisgKiBDb250cmFy
aXdpc2UsIDxjb2RlPlVuaWNvZGVTZXQ8L2NvZGU+IHBhdHRlcm5zIG1heSB0aGVtc2VsdmVzCisg
KiBjb250YWluIHZhcmlhYmxlIHJlZmVyZW5jZXMsIHN1Y2ggYXMgJnF1b3Q7PGNvZGU+JGE9W2Et
el07JG5vdF9hPVteJGFdPC9jb2RlPiZxdW90OywKKyAqIG9yICZxdW90Ozxjb2RlPiRyYW5nZT1h
LXo7JGxsPVskcmFuZ2VdPC9jb2RlPiZxdW90Oy4KKyAqCisgKiA8cD48Y29kZT5Vbmljb2RlU2V0
PC9jb2RlPiBwYXR0ZXJucyBtYXkgYWxzbyBiZSBlbWJlZGRlZCBkaXJlY3RseQorICogaW50byBy
dWxlIHN0cmluZ3MuIFRodXMsIHRoZSBmb2xsb3dpbmcgdHdvIHJ1bGVzIGFyZSBlcXVpdmFsZW50
OgorICoKKyAqIDxwcmU+CisgKiAgICAgJHZvd2VsPVthZWlvdV07ICR2b3dlbCZndDsnKic7ICMg
T25lIHdheSB0byBkbyB0aGlzCisgKiAgICAgW2FlaW91XSZndDsnKic7ICMgQW5vdGhlciB3YXkK
KyAqIDwvcHJlPgorICoKKyAqIDxwPlNlZSB7QGxpbmsgVW5pY29kZVNldH0gZm9yIG1vcmUgZG9j
dW1lbnRhdGlvbiBhbmQgZXhhbXBsZXMuCisgKgorICogPHA+PGI+U2VnbWVudHM8L2I+CisgKgor
ICogPHA+U2VnbWVudHMgb2YgdGhlIGlucHV0IHN0cmluZyBjYW4gYmUgbWF0Y2hlZCBhbmQgY29w
aWVkIHRvIHRoZQorICogb3V0cHV0IHN0cmluZy4gVGhpcyBtYWtlcyBjZXJ0YWluIHNldHMgb2Yg
cnVsZXMgc2ltcGxlciBhbmQgbW9yZQorICogZ2VuZXJhbCwgYW5kIG1ha2VzIHJlb3JkZXJpbmcg
cG9zc2libGUuIEZvciBleGFtcGxlOgorICoKKyAqIDxwcmU+CisgKiAgICAgKFthLXpdKSAmZ3Q7
ICQxICQxOyAjIGRvdWJsZSBsb3dlcmNhc2UgbGV0dGVycworICogICAgIChbOkx1Ol0pIChbOkxs
Ol0pICZndDsgJDIgJDE7ICMgcmV2ZXJzZSBvcmRlciBvZiBMdS1MbCBwYWlycworICogPC9wcmU+
CisgKgorICogPHA+VGhlIHNlZ21lbnQgb2YgdGhlIGlucHV0IHN0cmluZyB0byBiZSBjb3BpZWQg
aXMgZGVsaW1pdGVkIGJ5CisgKiAmcXVvdDs8Y29kZT4oPC9jb2RlPiZxdW90OyBhbmQgJnF1b3Q7
PGNvZGU+KTwvY29kZT4mcXVvdDsuIFVwIHRvCisgKiBuaW5lIHNlZ21lbnRzIG1heSBiZSBkZWZp
bmVkLiBTZWdtZW50cyBtYXkgbm90IG92ZXJsYXAuIEluIHRoZQorICogb3V0cHV0IHN0cmluZywg
JnF1b3Q7PGNvZGU+JDE8L2NvZGU+JnF1b3Q7IHRocm91Z2ggJnF1b3Q7PGNvZGU+JDk8L2NvZGU+
JnF1b3Q7CisgKiByZXByZXNlbnQgdGhlIGlucHV0IHN0cmluZyBzZWdtZW50cywgaW4gbGVmdC10
by1yaWdodCBvcmRlciBvZgorICogZGVmaW5pdGlvbi4KKyAqCisgKiA8cD48Yj5BbmNob3JzPC9i
PgorICoKKyAqIDxwPlBhdHRlcm5zIGNhbiBiZSBhbmNob3JlZCB0byB0aGUgYmVnaW5uaW5nIG9y
IHRoZSBlbmQgb2YgdGhlIHRleHQuIFRoaXMgaXMgZG9uZSB3aXRoIHRoZQorICogc3BlY2lhbCBj
aGFyYWN0ZXJzICc8Y29kZT5ePC9jb2RlPicgYW5kICc8Y29kZT4kPC9jb2RlPicuIEZvciBleGFt
cGxlOgorICoKKyAqIDxwcmU+CisgKiAgIF4gYSZuYnNwOyZuYnNwOyAmZ3Q7ICdCRUdfQSc7ICZu
YnNwOyZuYnNwOyMgbWF0Y2ggJ2EnIGF0IHN0YXJ0IG9mIHRleHQKKyAqICAgJm5ic3A7IGEmbmJz
cDsmbmJzcDsgJmd0OyAnQSc7ICMgbWF0Y2ggb3RoZXIgaW5zdGFuY2VzIG9mICdhJworICogICAm
bmJzcDsgeiAkICZndDsgJ0VORF9aJzsgJm5ic3A7Jm5ic3A7IyBtYXRjaCAneicgYXQgZW5kIG9m
IHRleHQKKyAqICAgJm5ic3A7IHombmJzcDsmbmJzcDsgJmd0OyAnWic7Jm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICMgbWF0Y2ggb3RoZXIgaW5zdGFuY2VzIG9mICd6JworICog
PC9wcmU+CisgKgorICogPHA+SXQgaXMgYWxzbyBwb3NzaWJsZSB0byBtYXRjaCB0aGUgYmVnaW5u
aW5nIG9yIHRoZSBlbmQgb2YgdGhlIHRleHQgdXNpbmcgYSA8Y29kZT5Vbmljb2RlU2V0PC9jb2Rl
Pi4KKyAqIFRoaXMgaXMgZG9uZSBieSBpbmNsdWRpbmcgYSB2aXJ0dWFsIGFuY2hvciBjaGFyYWN0
ZXIgJzxjb2RlPiQ8L2NvZGU+JyBhdCB0aGUgZW5kIG9mIHRoZQorICogc2V0IHBhdHRlcm4uIEFs
dGhvdWdoIHRoaXMgaXMgdXN1YWxseSB0aGUgbWF0Y2ggY2hhZmFjdGVyIGZvciB0aGUgZW5kIGFu
Y2hvciwgdGhlIHNldCB3aWxsCisgKiBtYXRjaCBlaXRoZXIgdGhlIGJlZ2lubmluZyBvciB0aGUg
ZW5kIG9mIHRoZSB0ZXh0LCBkZXBlbmRpbmcgb24gaXRzIHBsYWNlbWVudC4gRm9yCisgKiBleGFt
cGxlOgorICoKKyAqIDxwcmU+CisgKiAgICR4ID0gW2EteiRdOyAmbmJzcDsmbmJzcDsjIG1hdGNo
ICdhJyB0aHJvdWdoICd6JyBPUiBhbmNob3IKKyAqICAgJHggMSZuYnNwOyZuYnNwOyZuYnNwOyAm
Z3Q7IDI7Jm5ic3A7Jm5ic3A7ICMgbWF0Y2ggJzEnIGFmdGVyIGEteiBvciBhdCB0aGUgc3RhcnQK
KyAqICAgJm5ic3A7Jm5ic3A7IDMgJHggJmd0OyA0OyAmbmJzcDsmbmJzcDsjIG1hdGNoICczJyBi
ZWZvcmUgYS16IG9yIGF0IHRoZSBlbmQKKyAqIDwvcHJlPgorICoKKyAqIDxwPjxiPkV4YW1wbGU8
L2I+CisgKgorICogPHA+VGhlIGZvbGxvd2luZyBleGFtcGxlIHJ1bGVzIGlsbHVzdHJhdGUgbWFu
eSBvZiB0aGUgZmVhdHVyZXMgb2YKKyAqIHRoZSBydWxlIGxhbmd1YWdlLgorICoKKyAqIDx0YWJs
ZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI0Ij4KKyAqICAgICA8dHI+CisgKiAgICAgICAgIDx0
ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsiPlJ1bGUgMS48L3RkPgorICogICAgICAgICA8
dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IHdyaXRlLXNwYWNlOiBub3dyYXA7Ij48Y29k
ZT5hYmN7ZGVmfSZndDt4fHk8L2NvZGU+PC90ZD4KKyAqICAgICA8L3RyPgorICogICAgIDx0cj4K
KyAqICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyI+UnVsZSAyLjwvdGQ+
CisgKiAgICAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgd3JpdGUtc3BhY2U6
IG5vd3JhcDsiPjxjb2RlPnh5eiZndDtyPC9jb2RlPjwvdGQ+CisgKiAgICAgPC90cj4KKyAqICAg
ICA8dHI+CisgKiAgICAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsiPlJ1bGUg
My48L3RkPgorICogICAgICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IHdyaXRl
LXNwYWNlOiBub3dyYXA7Ij48Y29kZT55eiZndDtxPC9jb2RlPjwvdGQ+CisgKiAgICAgPC90cj4K
KyAqIDwvdGFibGU+CisgKgorICogPHA+QXBwbHlpbmcgdGhlc2UgcnVsZXMgdG8gdGhlIHN0cmlu
ZyAmcXVvdDs8Y29kZT5hZGVmYWJjZGVmejwvY29kZT4mcXVvdDsKKyAqIHlpZWxkcyB0aGUgZm9s
bG93aW5nIHJlc3VsdHM6CisgKgorICogPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjQi
PgorICogICAgIDx0cj4KKyAqICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9w
OyB3cml0ZS1zcGFjZTogbm93cmFwOyI+PGNvZGU+fGFkZWZhYmNkZWZ6PC9jb2RlPjwvdGQ+Cisg
KiAgICAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsiPkluaXRpYWwgc3RhdGUs
IG5vIHJ1bGVzIG1hdGNoLiBBZHZhbmNlCisgKiAgICAgICAgIGN1cnNvci48L3RkPgorICogICAg
IDwvdHI+CisgKiAgICAgPHRyPgorICogICAgICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWdu
OiB0b3A7IHdyaXRlLXNwYWNlOiBub3dyYXA7Ij48Y29kZT5hfGRlZmFiY2RlZno8L2NvZGU+PC90
ZD4KKyAqICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyI+U3RpbGwgbm8g
bWF0Y2guIFJ1bGUgMSBkb2VzIG5vdCBtYXRjaAorICogICAgICAgICBiZWNhdXNlIHRoZSBwcmVj
ZWRpbmcgY29udGV4dCBpcyBub3QgcHJlc2VudC48L3RkPgorICogICAgIDwvdHI+CisgKiAgICAg
PHRyPgorICogICAgICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IHdyaXRlLXNw
YWNlOiBub3dyYXA7Ij48Y29kZT5hZHxlZmFiY2RlZno8L2NvZGU+PC90ZD4KKyAqICAgICAgICAg
PHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyI+U3RpbGwgbm8gbWF0Y2guIEtlZXAgYWR2
YW5jaW5nIHVudGlsCisgKiAgICAgICAgIHRoZXJlIGlzIGEgbWF0Y2guLi48L3RkPgorICogICAg
IDwvdHI+CisgKiAgICAgPHRyPgorICogICAgICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWdu
OiB0b3A7IHdyaXRlLXNwYWNlOiBub3dyYXA7Ij48Y29kZT5hZGV8ZmFiY2RlZno8L2NvZGU+PC90
ZD4KKyAqICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyI+Li4uPC90ZD4K
KyAqICAgICA8L3RyPgorICogICAgIDx0cj4KKyAqICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNh
bC1hbGlnbjogdG9wOyB3cml0ZS1zcGFjZTogbm93cmFwOyI+PGNvZGU+YWRlZnxhYmNkZWZ6PC9j
b2RlPjwvdGQ+CisgKiAgICAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsiPi4u
LjwvdGQ+CisgKiAgICAgPC90cj4KKyAqICAgICA8dHI+CisgKiAgICAgICAgIDx0ZCBzdHlsZT0i
dmVydGljYWwtYWxpZ246IHRvcDsgd3JpdGUtc3BhY2U6IG5vd3JhcDsiPjxjb2RlPmFkZWZhfGJj
ZGVmejwvY29kZT48L3RkPgorICogICAgICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0
b3A7Ij4uLi48L3RkPgorICogICAgIDwvdHI+CisgKiAgICAgPHRyPgorICogICAgICAgICA8dGQg
c3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IHdyaXRlLXNwYWNlOiBub3dyYXA7Ij48Y29kZT5h
ZGVmYWJ8Y2RlZno8L2NvZGU+PC90ZD4KKyAqICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1h
bGlnbjogdG9wOyI+Li4uPC90ZD4KKyAqICAgICA8L3RyPgorICogICAgIDx0cj4KKyAqICAgICAg
ICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyB3cml0ZS1zcGFjZTogbm93cmFwOyI+
PGNvZGU+YWRlZmFiY3xkZWZ6PC9jb2RlPjwvdGQ+CisgKiAgICAgICAgIDx0ZCBzdHlsZT0idmVy
dGljYWwtYWxpZ246IHRvcDsiPlJ1bGUgMSBtYXRjaGVzOyByZXBsYWNlICZxdW90Ozxjb2RlPmRl
ZjwvY29kZT4mcXVvdDsKKyAqICAgICAgICAgd2l0aCAmcXVvdDs8Y29kZT54eTwvY29kZT4mcXVv
dDsgYW5kIGJhY2sgdXAgdGhlIGN1cnNvcgorICogICAgICAgICB0byBiZWZvcmUgdGhlICc8Y29k
ZT55PC9jb2RlPicuPC90ZD4KKyAqICAgICA8L3RyPgorICogICAgIDx0cj4KKyAqICAgICAgICAg
PHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyB3cml0ZS1zcGFjZTogbm93cmFwOyI+PGNv
ZGU+YWRlZmFiY3h8eXo8L2NvZGU+PC90ZD4KKyAqICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNh
bC1hbGlnbjogdG9wOyI+QWx0aG91Z2ggJnF1b3Q7PGNvZGU+eHl6PC9jb2RlPiZxdW90OyBpcwor
ICogICAgICAgICBwcmVzZW50LCBydWxlIDIgZG9lcyBub3QgbWF0Y2ggYmVjYXVzZSB0aGUgY3Vy
c29yIGlzCisgKiAgICAgICAgIGJlZm9yZSB0aGUgJzxjb2RlPnk8L2NvZGU+Jywgbm90IGJlZm9y
ZSB0aGUgJzxjb2RlPng8L2NvZGU+Jy4KKyAqICAgICAgICAgUnVsZSAzIGRvZXMgbWF0Y2guIFJl
cGxhY2UgJnF1b3Q7PGNvZGU+eXo8L2NvZGU+JnF1b3Q7CisgKiAgICAgICAgIHdpdGggJnF1b3Q7
PGNvZGU+cTwvY29kZT4mcXVvdDsuPC90ZD4KKyAqICAgICA8L3RyPgorICogICAgIDx0cj4KKyAq
ICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyB3cml0ZS1zcGFjZTogbm93
cmFwOyI+PGNvZGU+YWRlZmFiY3hxfDwvY29kZT48L3RkPgorICogICAgICAgICA8dGQgc3R5bGU9
InZlcnRpY2FsLWFsaWduOiB0b3A7Ij5UaGUgY3Vyc29yIGlzIGF0IHRoZSBlbmQ7CisgKiAgICAg
ICAgIHRyYW5zbGl0ZXJhdGlvbiBpcyBjb21wbGV0ZS48L3RkPgorICogICAgIDwvdHI+CisgKiA8
L3RhYmxlPgorICoKKyAqIDxwPlRoZSBvcmRlciBvZiBydWxlcyBpcyBzaWduaWZpY2FudC4gSWYg
bXVsdGlwbGUgcnVsZXMgbWF5IG1hdGNoCisgKiBhdCBzb21lIHBvaW50LCB0aGUgZmlyc3QgbWF0
Y2hpbmcgcnVsZSBpcyBhcHBsaWVkLgorICoKKyAqIDxwPkZvcndhcmQgYW5kIHJldmVyc2UgcnVs
ZXMgbWF5IGhhdmUgYW4gZW1wdHkgb3V0cHV0IHN0cmluZy4KKyAqIE90aGVyd2lzZSwgYW4gZW1w
dHkgbGVmdCBvciByaWdodCBoYW5kIHNpZGUgb2YgYW55IHN0YXRlbWVudCBpcyBhCisgKiBzeW50
YXggZXJyb3IuCisgKgorICogPHA+U2luZ2xlIHF1b3RlcyBhcmUgdXNlZCB0byBxdW90ZSBhbnkg
Y2hhcmFjdGVyIG90aGVyIHRoYW4gYQorICogZGlnaXQgb3IgbGV0dGVyLiBUbyBzcGVjaWZ5IGEg
c2luZ2xlIHF1b3RlIGl0c2VsZiwgaW5zaWRlIG9yCisgKiBvdXRzaWRlIG9mIHF1b3RlcywgdXNl
IHR3byBzaW5nbGUgcXVvdGVzIGluIGEgcm93LiBGb3IgZXhhbXBsZSwKKyAqIHRoZSBydWxlICZx
dW90Ozxjb2RlPicmZ3Q7JyZndDtvJydjbG9jazwvY29kZT4mcXVvdDsgY2hhbmdlcyB0aGUKKyAq
IHN0cmluZyAmcXVvdDs8Y29kZT4mZ3Q7PC9jb2RlPiZxdW90OyB0byB0aGUgc3RyaW5nICZxdW90
Ozxjb2RlPm8nY2xvY2s8L2NvZGU+JnF1b3Q7LgorICoKKyAqIDxwPjxiPk5vdGVzPC9iPgorICoK
KyAqIDxwPldoaWxlIGEgVHJhbnNsaXRlcmF0b3IgaXMgYmVpbmcgYnVpbHQgZnJvbSBydWxlcywg
aXQgY2hlY2tzIHRoYXQKKyAqIHRoZSBydWxlcyBhcmUgYWRkZWQgaW4gcHJvcGVyIG9yZGVyLiBG
b3IgZXhhbXBsZSwgaWYgdGhlIHJ1bGUKKyAqICZxdW90O2EmZ3Q7eCZxdW90OyBpcyBmb2xsb3dl
ZCBieSB0aGUgcnVsZSAmcXVvdDthYiZndDt5JnF1b3Q7LAorICogdGhlbiB0aGUgc2Vjb25kIHJ1
bGUgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24uIFRoZSByZWFzb24gaXMgdGhhdAorICogdGhlIHNl
Y29uZCBydWxlIGNhbiBuZXZlciBiZSB0cmlnZ2VyZWQsIHNpbmNlIHRoZSBmaXJzdCBydWxlCisg
KiBhbHdheXMgbWF0Y2hlcyBhbnl0aGluZyBpdCBtYXRjaGVzLiBJbiBvdGhlciB3b3JkcywgdGhl
IGZpcnN0CisgKiBydWxlIDxlbT5tYXNrczwvZW0+IHRoZSBzZWNvbmQgcnVsZS4KKyAqCiAgKiBA
YXV0aG9yIEFsYW4gTGl1CiAgKiBAc3RhYmxlIElDVSAyLjAKICAqLwpAQCAtNDk5LDkgKzc0NCw5
IEBAIGNsYXNzIFVfSTE4Tl9BUEkgVHJhbnNsaXRlcmF0b3IgOiBwdWJsaWMgVU9iamVjdCB7CiAg
ICAgICogZm9yIGRldGFpbHMuCiAgICAgICogQHBhcmFtIHRleHQgdGhlIGJ1ZmZlciBob2xkaW5n
IHRyYW5zbGl0ZXJhdGVkIGFuZAogICAgICAqIHVudHJhbnNsaXRlcmF0ZWQgdGV4dAotICAgICAq
IEBwYXJhbSBpbmRleCBhbiBhcnJheSBvZiB0aHJlZSBpbnRlZ2Vycy4gIFNlZSB7QGxpbmsgI3Ry
YW5zbGl0ZXJhdGUoUmVwbGFjZWFibGUmLCBVVHJhbnNQb3NpdGlvbiYsIGNvbnN0IFVuaWNvZGVT
dHJpbmcqLCBVRXJyb3JDb2RlJikgY29uc3QgfS4KKyAgICAgKiBAcGFyYW0gaW5kZXggYW4gYXJy
YXkgb2YgdGhyZWUgaW50ZWdlcnMuCiAgICAgICogQHBhcmFtIHN0YXR1cyAgICBPdXRwdXQgcGFy
YW0gdG8gZmlsbGVkIGluIHdpdGggYSBzdWNjZXNzIG9yIGFuIGVycm9yLgotICAgICAqIEBzZWUg
I3RyYW5zbGl0ZXJhdGUoUmVwbGFjZWFibGUsIGludFtdLCBTdHJpbmcpCisgICAgICogQHNlZSAj
dHJhbnNsaXRlcmF0ZShSZXBsYWNlYWJsZSYsIFVUcmFuc1Bvc2l0aW9uJiwgY29uc3QgVW5pY29k
ZVN0cmluZyYsIFVFcnJvckNvZGUgJikgY29uc3QKICAgICAgKiBAc3RhYmxlIElDVSAyLjAKICAg
ICAgKi8KICAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsaXRlcmF0ZShSZXBsYWNlYWJsZSYgdGV4dCwg
VVRyYW5zUG9zaXRpb24mIGluZGV4LApAQCAtNjMyLDcgKzg3Nyw3IEBAIGNsYXNzIFVfSTE4Tl9B
UEkgVHJhbnNsaXRlcmF0b3IgOiBwdWJsaWMgVU9iamVjdCB7CiAgICAgLyoqCiAgICAgICogVHJh
bnNsaXRlcmF0ZSBhIHN1YnN0cmluZyBvZiB0ZXh0LCBhcyBzcGVjaWZpZWQgYnkgaW5kZXgsIHRh
a2luZyBmaWx0ZXJzCiAgICAgICogaW50byBhY2NvdW50LiAgVGhpcyBtZXRob2QgaXMgZm9yIHN1
YmNsYXNzZXMgdGhhdCBuZWVkIHRvIGRlbGVnYXRlIHRvCi0gICAgICogYW5vdGhlciB0cmFuc2xp
dGVyYXRvciwgc3VjaCBhcyBDb21wb3VuZFRyYW5zbGl0ZXJhdG9yLgorICAgICAqIGFub3RoZXIg
dHJhbnNsaXRlcmF0b3IuCiAgICAgICogQHBhcmFtIHRleHQgdGhlIHRleHQgdG8gYmUgdHJhbnNs
aXRlcmF0ZWQKICAgICAgKiBAcGFyYW0gaW5kZXggdGhlIHBvc2l0aW9uIGluZGljZXMKICAgICAg
KiBAcGFyYW0gaW5jcmVtZW50YWwgaWYgVFJVRSwgdGhlbiBhc3N1bWUgbW9yZSBjaGFyYWN0ZXJz
IG1heSBiZSBpbnNlcnRlZApAQCAtODQ2LDE3ICsxMDkxLDE5IEBAIGNsYXNzIFVfSTE4Tl9BUEkg
VHJhbnNsaXRlcmF0b3IgOiBwdWJsaWMgVU9iamVjdCB7CiAKICAgICAvKioKICAgICAgKiBSZXR1
cm5zIGEgPGNvZGU+VHJhbnNsaXRlcmF0b3I8L2NvZGU+IG9iamVjdCBjb25zdHJ1Y3RlZCBmcm9t
Ci0gICAgICogdGhlIGdpdmVuIHJ1bGUgc3RyaW5nLiAgVGhpcyB3aWxsIGJlIGEgUnVsZUJhc2Vk
VHJhbnNsaXRlcmF0b3IsCisgICAgICogdGhlIGdpdmVuIHJ1bGUgc3RyaW5nLiAgVGhpcyB3aWxs
IGJlIGEgcnVsZS1iYXNlZCBUcmFuc2xpdGVyYXRvciwKICAgICAgKiBpZiB0aGUgcnVsZSBzdHJp
bmcgY29udGFpbnMgb25seSBydWxlcywgb3IgYQotICAgICAqIENvbXBvdW5kVHJhbnNsaXRlcmF0
b3IsIGlmIGl0IGNvbnRhaW5zIElEIGJsb2Nrcywgb3IgYQotICAgICAqIE51bGxUcmFuc2xpdGVy
YXRvciwgaWYgaXQgY29udGFpbnMgSUQgYmxvY2tzIHdoaWNoIHBhcnNlIGFzCisgICAgICogY29t
cG91bmQgVHJhbnNsaXRlcmF0b3IsIGlmIGl0IGNvbnRhaW5zIElEIGJsb2Nrcywgb3IgYQorICAg
ICAqIG51bGwgVHJhbnNsaXRlcmF0b3IsIGlmIGl0IGNvbnRhaW5zIElEIGJsb2NrcyB3aGljaCBw
YXJzZSBhcwogICAgICAqIGVtcHR5IGZvciB0aGUgZ2l2ZW4gZGlyZWN0aW9uLgorICAgICAqCiAg
ICAgICogQHBhcmFtIElEICAgICAgICAgICAgdGhlIGlkIGZvciB0aGUgdHJhbnNsaXRlcmF0b3Iu
CiAgICAgICogQHBhcmFtIHJ1bGVzICAgICAgICAgcnVsZXMsIHNlcGFyYXRlZCBieSAnOycKICAg
ICAgKiBAcGFyYW0gZGlyICAgICAgICAgICBlaXRoZXIgRk9SV0FSRCBvciBSRVZFUlNFLgotICAg
ICAqIEBwYXJhbSBwYXJzZUVycm9yICAgIFN0cnVjdCB0byByZWNpZXZlIGluZm9ybWF0aW9uIG9u
IHBvc2l0aW9uCisgICAgICogQHBhcmFtIHBhcnNlRXJyb3IgICAgU3RydWN0IHRvIHJlY2VpdmUg
aW5mb3JtYXRpb24gb24gcG9zaXRpb24KICAgICAgKiAgICAgICAgICAgICAgICAgICAgICBvZiBl
cnJvciBpZiBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZAogICAgICAqIEBwYXJhbSBzdGF0dXMgICAg
ICAgIE91dHB1dCBwYXJhbSBzZXQgdG8gc3VjY2Vzcy9mYWlsdXJlIGNvZGUuCisgICAgICogQHJl
dHVybiBhIG5ld2x5IGNyZWF0ZWQgVHJhbnNsaXRlcmF0b3IKICAgICAgKiBAc3RhYmxlIElDVSAy
LjAKICAgICAgKi8KICAgICBzdGF0aWMgVHJhbnNsaXRlcmF0b3IqIFVfRVhQT1JUMiBjcmVhdGVG
cm9tUnVsZXMoY29uc3QgVW5pY29kZVN0cmluZyYgSUQsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L2ljdS91bmljb2RlL3R6Zm10LmggYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3R6Zm10LmgKaW5k
ZXggNzI0ZmY0ZDg1YmIyNjU3OTY2MTFlZWRhNGQyY2E2ODU1OGYyZDY5OC4uZDJhYTc2OGI4Yzhi
MzRkZjQ3NjMzYTlkMzBkNTE2YzNiNTc2Y2ZkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9pY3Uv
dW5pY29kZS90emZtdC5oCisrKyBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdHpmbXQuaApAQCAt
MjM3LDEwICsyMzcsMTAgQEAgdHlwZWRlZiBlbnVtIFVUaW1lWm9uZUZvcm1hdFBhcnNlT3B0aW9u
IHsKICAgICAgKi8KICAgICBVVFpGTVRfUEFSU0VfT1BUSU9OX0FMTF9TVFlMRVMgID0gMHgwMSwK
ICAgICAgLyoqCi0gICAgICAqIFdoZW4gcGFyc2luZyBhIHRpbWUgem9uZSBkaXNwbGF5IG5hbWUg
aW4gVVRaRk1UX1NUWUxFX1NQRUNJRklDX1NIT1JULAorICAgICAgKiBXaGVuIHBhcnNpbmcgYSB0
aW1lIHpvbmUgZGlzcGxheSBuYW1lIGluIFxsaW5rIFVUWkZNVF9TVFlMRV9TUEVDSUZJQ19TSE9S
VCBcZW5kbGluaywKICAgICAgICogbG9vayBmb3IgdGhlIElBTkEgdHogZGF0YWJhc2UgY29tcGF0
aWJsZSB6b25lIGFiYnJldmlhdGlvbnMgaW4gYWRkaXRpb24KLSAgICAgICogdG8gdGhlIGxvY2Fs
aXplZCBuYW1lcyBjb21pbmcgZnJvbSB0aGUge0BsaW5rIFRpbWVab25lTmFtZXN9IGN1cnJlbnRs
eQotICAgICAgKiB1c2VkIGJ5IHRoZSB7QGxpbmsgVGltZVpvbmVGb3JtYXR9LiAKKyAgICAgICog
dG8gdGhlIGxvY2FsaXplZCBuYW1lcyBjb21pbmcgZnJvbSB0aGUgaWN1OjpUaW1lWm9uZU5hbWVz
IGN1cnJlbnRseQorICAgICAgKiB1c2VkIGJ5IHRoZSBpY3U6OlRpbWVab25lRm9ybWF0LgogICAg
ICAgKiBAc3RhYmxlIElDVSA1NAogICAgICAgKi8KICAgICBVVFpGTVRfUEFSU0VfT1BUSU9OX1Ra
X0RBVEFCQVNFX0FCQlJFVklBVElPTlMgPSAweDAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2lj
dS91bmljb2RlL3ViaWRpLmggYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3ViaWRpLmgKaW5kZXgg
MjU0YTViZjllZjQ2OWYxNjFkZDJjMThlNmFjMGE1MWRjMGVlZTQwNy4uZjQ4NzVjODgwMWVmZDZj
NTg5NjNjMjY2YzkzNTlmOTM3YTljZTllNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9pY3UvdW5p
Y29kZS91YmlkaS5oCisrKyBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdWJpZGkuaApAQCAtMzIz
LDYgKzMyMywxMCBAQAogICogdGhlc2Ugc3BlY2lhbCB2YWx1ZXMgYXJlIGRlc2lnbmVkIHRoYXQg
d2F5LiBBbHNvLCB0aGUgaW1wbGVtZW50YXRpb24KICAqIGFzc3VtZXMgdGhhdCBVQklESV9NQVhf
RVhQTElDSVRfTEVWRUwgaXMgb2RkLgogICoKKyAqIE5vdGU6IFRoZSBudW1lcmljIHZhbHVlcyBv
ZiB0aGUgcmVsYXRlZCBjb25zdGFudHMgd2lsbCBub3QgY2hhbmdlOgorICogVGhleSBhcmUgdGll
ZCB0byB0aGUgdXNlIG9mIDctYml0IGJ5dGUgdmFsdWVzIChwbHVzIHRoZSBvdmVycmlkZSBiaXQp
CisgKiBhbmQgb2YgdGhlIFVCaURpTGV2ZWw9dWludDhfdCBkYXRhIHR5cGUgaW4gdGhpcyBBUEku
CisgKgogICogQHNlZSBVQklESV9ERUZBVUxUX0xUUgogICogQHNlZSBVQklESV9ERUZBVUxUX1JU
TAogICogQHNlZSBVQklESV9MRVZFTF9PVkVSUklERQpAQCAtMzg2LDYgKzM5MCw4IEBAIHR5cGVk
ZWYgdWludDhfdCBVQmlEaUxldmVsOwogCiAvKioKICAqIE1heGltdW0gZXhwbGljaXQgZW1iZWRk
aW5nIGxldmVsLgorICogU2FtZSBhcyB0aGUgbWF4X2RlcHRoIHZhbHVlIGluIHRoZQorICogPGEg
aHJlZj0iaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyOS8jQkQyIj5Vbmljb2RlIEJp
ZGlyZWN0aW9uYWwgQWxnb3JpdGhtPC9hPi4KICAqIChUaGUgbWF4aW11bSByZXNvbHZlZCBsZXZl
bCBjYW4gYmUgdXAgdG8gPGNvZGU+VUJJRElfTUFYX0VYUExJQ0lUX0xFVkVMKzE8L2NvZGU+KS4K
ICAqIEBzdGFibGUgSUNVIDIuMAogICovCkBAIC0xOTk2LDcgKzIwMDIsNyBAQCBVX0NERUNMX0JF
R0lOCiAgKgogICogQHJldHVybiBUaGUgZGlyZWN0aW9uYWwgcHJvcGVydHkgLyBCaWRpIGNsYXNz
IGZvciB0aGUgZ2l2ZW4gY29kZSBwb2ludAogICogICAgICAgICA8Y29kZT5jPC9jb2RlPiBpZiB0
aGUgZGVmYXVsdCBjbGFzcyBoYXMgYmVlbiBvdmVycmlkZGVuLCBvcgotICogICAgICAgICA8Y29k
ZT4jVV9CSURJX0NMQVNTX0RFRkFVTFQ9dV9nZXRJbnRQcm9wZXJ0eU1heFZhbHVlKFVDSEFSX0JJ
RElfQ0xBU1MpKzE8L2NvZGU+CisgKiAgICAgICAgIDxjb2RlPnVfZ2V0SW50UHJvcGVydHlNYXhW
YWx1ZShVQ0hBUl9CSURJX0NMQVNTKSsxPC9jb2RlPgogICogICAgICAgICBpZiB0aGUgc3RhbmRh
cmQgQmlkaSBjbGFzcyB2YWx1ZSBmb3IgPGNvZGU+YzwvY29kZT4gaXMgdG8gYmUgdXNlZC4KICAq
IEBzZWUgdWJpZGlfc2V0Q2xhc3NDYWxsYmFjawogICogQHNlZSB1YmlkaV9nZXRDbGFzc0NhbGxi
YWNrCkBAIC0yMDEwLDcgKzIwMTYsNyBAQCBVX0NERUNMX0VORAogLyoqCiAgKiBSZXRyaWV2ZSB0
aGUgQmlkaSBjbGFzcyBmb3IgYSBnaXZlbiBjb2RlIHBvaW50LgogICogPHA+SWYgYSA8Y29kZT4j
VUJpRGlDbGFzc0NhbGxiYWNrPC9jb2RlPiBjYWxsYmFjayBpcyBkZWZpbmVkIGFuZCByZXR1cm5z
IGEKLSAqIHZhbHVlIG90aGVyIHRoYW4gPGNvZGU+I1VfQklESV9DTEFTU19ERUZBVUxUPXVfZ2V0
SW50UHJvcGVydHlNYXhWYWx1ZShVQ0hBUl9CSURJX0NMQVNTKSsxPC9jb2RlPiwKKyAqIHZhbHVl
IG90aGVyIHRoYW4gPGNvZGU+dV9nZXRJbnRQcm9wZXJ0eU1heFZhbHVlKFVDSEFSX0JJRElfQ0xB
U1MpKzE8L2NvZGU+LAogICogdGhhdCB2YWx1ZSBpcyB1c2VkOyBvdGhlcndpc2UgdGhlIGRlZmF1
bHQgY2xhc3MgZGV0ZXJtaW5hdGlvbiBtZWNoYW5pc20gaXMgaW52b2tlZC48L3A+CiAgKgogICog
QHBhcmFtIHBCaURpIGlzIHRoZSBwYXJhZ3JhcGggPGNvZGU+VUJpRGk8L2NvZGU+IG9iamVjdC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdWJpZGl0cmFuc2Zvcm0uaCBiL1Nv
dXJjZS9XVEYvaWN1L3VuaWNvZGUvdWJpZGl0cmFuc2Zvcm0uaAppbmRleCBiNTM2NDUzZTY5MTUw
ZmY3YTA4YmFmYmVjNDRjMjliOTAxYWMxYjk4Li41YzA4ZWQ1ZGYwZmQ5MGJkMGE1NzFjY2VkM2Uy
ODU1MWRmYzkzMzM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3ViaWRpdHJh
bnNmb3JtLmgKKysrIGIvU291cmNlL1dURi9pY3UvdW5pY29kZS91YmlkaXRyYW5zZm9ybS5oCkBA
IC0xLDMxOCArMSwzMjMgQEAKLS8qDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKg0KLSogwqkg
MjAxNiBhbmQgbGF0ZXI6IFVuaWNvZGUsIEluYy4gYW5kIG90aGVycy4NCi0qIExpY2Vuc2UgJiB0
ZXJtcyBvZiB1c2U6IGh0dHA6Ly93d3cudW5pY29kZS5vcmcvY29weXJpZ2h0Lmh0bWwNCi0qDQot
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqDQotKiAgIGZpbGUgbmFtZTogIHViaWRpdHJhbnNmb3JtLmgN
Ci0qICAgZW5jb2Rpbmc6ICAgVVRGLTgNCi0qICAgdGFiIHNpemU6ICAgOCAobm90IHVzZWQpDQot
KiAgIGluZGVudGF0aW9uOjQNCi0qDQotKiAgIGNyZWF0ZWQgb246IDIwMTZqdWwyNA0KLSogICBj
cmVhdGVkIGJ5OiBMaW5hIEtlbW1lbA0KLSoNCi0qLw0KLQ0KLSNpZm5kZWYgVUJJRElUUkFOU0ZP
Uk1fSA0KLSNkZWZpbmUgVUJJRElUUkFOU0ZPUk1fSA0KLQ0KLSNpbmNsdWRlICJ1bmljb2RlL3V0
eXBlcy5oIg0KLSNpbmNsdWRlICJ1bmljb2RlL3ViaWRpLmgiDQotI2luY2x1ZGUgInVuaWNvZGUv
dWNoYXIuaCINCi0jaW5jbHVkZSAidW5pY29kZS9sb2NhbHBvaW50ZXIuaCINCi0NCi0vKioNCi0g
KiBcZmlsZQ0KLSAqIFxicmllZiBCaWRpIFRyYW5zZm9ybWF0aW9ucw0KLSAqDQotICogPGNvZGU+
VUJpRGlPcmRlcjwvY29kZT4gaW5kaWNhdGVzIHRoZSBvcmRlciBvZiB0ZXh0LjxwPg0KLSAqIFRo
aXMgYmlkaSB0cmFuc2Zvcm1hdGlvbiBlbmdpbmUgc3VwcG9ydHMgYWxsIHBvc3NpYmxlIGNvbWJp
bmF0aW9ucyAoNCBpbg0KLSAqIHRvdGFsKSBvZiBpbnB1dCBhbmQgb3V0cHV0IHRleHQgb3JkZXI6
DQotICogPHVsPg0KLSAqIDxsaT48bG9naWNhbCBpbnB1dCwgdmlzdWFsIG91dHB1dD46IHVubGVz
cyB0aGUgb3V0cHV0IGRpcmVjdGlvbiBpcyBSVEwsIHRoaXMNCi0gKiBjb3JyZXNwb25kcyB0byBh
IG5vcm1hbCBvcGVyYXRpb24gb2YgdGhlIEJpZGkgYWxnb3JpdGhtIGFzIGRlc2NyaWJlZCBpbiB0
aGUNCi0gKiBVbmljb2RlIFRlY2huaWNhbCBSZXBvcnQgYW5kIGltcGxlbWVudGVkIGJ5IDxjb2Rl
PlVCaURpPC9jb2RlPiB3aGVuIHRoZQ0KLSAqIHJlb3JkZXJpbmcgbW9kZSBpcyBzZXQgdG8gPGNv
ZGU+VUJJRElfUkVPUkRFUl9ERUZBVUxUPC9jb2RlPi4gVmlzdWFsIFJUTA0KLSAqIG1vZGUgaXMg
bm90IHN1cHBvcnRlZCBieSA8Y29kZT5VQmlEaTwvY29kZT4gYW5kIGlzIGFjY29tcGxpc2hlZCB0
aHJvdWdoDQotICogcmV2ZXJzaW5nIGEgdmlzdWFsIExUUiBzdHJpbmcsPC9saT4NCi0gKiA8bGk+
PHZpc3VhbCBpbnB1dCwgbG9naWNhbCBvdXRwdXQ+OiB1bmxlc3MgdGhlIGlucHV0IGRpcmVjdGlv
biBpcyBSVEwsIHRoaXMNCi0gKiBjb3JyZXNwb25kcyB0byBhbiAiaW52ZXJzZSBiaWRpIGFsZ29y
aXRobSIgaW4gPGNvZGU+VUJpRGk8L2NvZGU+IHdpdGggdGhlDQotICogcmVvcmRlcmluZyBtb2Rl
IHNldCB0byA8Y29kZT5VQklESV9SRU9SREVSX0lOVkVSU0VfTElLRV9ESVJFQ1Q8L2NvZGU+Lg0K
LSAqIFZpc3VhbCBSVEwgbW9kZSBpcyBub3Qgbm90IHN1cHBvcnRlZCBieSA8Y29kZT5VQmlEaTwv
Y29kZT4gYW5kIGlzDQotICogYWNjb21wbGlzaGVkIHRocm91Z2ggcmV2ZXJzaW5nIGEgdmlzdWFs
IExUUiBzdHJpbmcsPC9saT4NCi0gKiA8bGk+PGxvZ2ljYWwgaW5wdXQsIGxvZ2ljYWwgb3V0cHV0
PjogaWYgdGhlIGlucHV0IGFuZCBvdXRwdXQgYmFzZSBkaXJlY3Rpb25zDQotICogbWlzbWF0Y2gs
IHRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIDxjb2RlPlVCaURpPC9jb2RlPiBpbXBsZW1lbnRhdGlv
biB3aXRoIHRoZQ0KLSAqIHJlb3JkZXJpbmcgbW9kZSBzZXQgdG8gPGNvZGU+VUJJRElfUkVPUkRF
Ul9SVU5TX09OTFk8L2NvZGU+OyBhbmQgaWYgdGhlDQotICogaW5wdXQgYW5kIG91dHB1dCBiYXNl
IGRpcmVjdGlvbnMgYXJlIGlkZW50aWNhbCwgdGhlIHRyYW5zZm9ybWF0aW9uIGVuZ2luZQ0KLSAq
IHdpbGwgb25seSBoYW5kbGUgY2hhcmFjdGVyIG1pcnJvcmluZyBhbmQgQXJhYmljIHNoYXBpbmcg
b3BlcmF0aW9ucyB3aXRob3V0DQotICogcmVvcmRlcmluZyw8L2xpPg0KLSAqIDxsaT48dmlzdWFs
IGlucHV0LCB2aXN1YWwgb3V0cHV0PjogdGhpcyByZW9yZGVyaW5nIG1vZGUgaXMgbm90IHN1cHBv
cnRlZCBieQ0KLSAqIHRoZSA8Y29kZT5VQmlEaTwvY29kZT4gZW5naW5lOyBpdCBpbXBsaWVzIGNo
YXJhY3RlciBtaXJyb3JpbmcsIEFyYWJpYw0KLSAqIHNoYXBpbmcsIGFuZCAtIGlmIHRoZSBpbnB1
dC9vdXRwdXQgYmFzZSBkaXJlY3Rpb25zIG1pc21hdGNoIC0gIHN0cmluZw0KLSAqIHJldmVyc2Ug
b3BlcmF0aW9ucy48L2xpPg0KLSAqIDwvdWw+DQotICogQHNlZSB1YmlkaV9zZXRJbnZlcnNlDQot
ICogQHNlZSB1YmlkaV9zZXRSZW9yZGVyaW5nTW9kZQ0KLSAqIEBzZWUgVUJJRElfUkVPUkRFUl9E
RUZBVUxUDQotICogQHNlZSBVQklESV9SRU9SREVSX0lOVkVSU0VfTElLRV9ESVJFQ1QNCi0gKiBA
c2VlIFVCSURJX1JFT1JERVJfUlVOU19PTkxZDQotICogQHN0YWJsZSBJQ1UgNTgNCi0gKi8NCi10
eXBlZGVmIGVudW0gew0KLSAgICAvKiogMDogQ29uc3RhbnQgaW5kaWNhdGluZyBhIGxvZ2ljYWwg
b3JkZXIuDQotICAgICAgKiBUaGlzIGlzIHRoZSBkZWZhdWx0IGZvciBpbnB1dCB0ZXh0Lg0KLSAg
ICAgICogQHN0YWJsZSBJQ1UgNTgNCi0gICAgICAqLw0KLSAgICBVQklESV9MT0dJQ0FMID0gMCwN
Ci0gICAgLyoqIDE6IENvbnN0YW50IGluZGljYXRpbmcgYSB2aXN1YWwgb3JkZXIuDQotICAgICAg
KiBUaGlzIGlzIGEgZGVmYXVsdCBmb3Igb3V0cHV0IHRleHQuDQotICAgICAgKiBAc3RhYmxlIElD
VSA1OA0KLSAgICAgICovDQotICAgIFVCSURJX1ZJU1VBTA0KLX0gVUJpRGlPcmRlcjsNCi0NCi0v
KioNCi0gKiA8Y29kZT5VQmlEaU1pcnJvcmluZzwvY29kZT4gaW5kaWNhdGVzIHdoZXRoZXIgb3Ig
bm90IGNoYXJhY3RlcnMgd2l0aCB0aGUNCi0gKiAibWlycm9yZWQiIHByb3BlcnR5IGluIFJUTCBy
dW5zIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIHRoZWlyIG1pcnJvci1pbWFnZQ0KLSAqIGNvdW50
ZXJwYXJ0cy4NCi0gKiBAc2VlIFVCSURJX0RPX01JUlJPUklORw0KLSAqIEBzZWUgdWJpZGlfc2V0
UmVvcmRlcmluZ09wdGlvbnMNCi0gKiBAc2VlIHViaWRpX3dyaXRlUmVvcmRlcmVkDQotICogQHNl
ZSB1YmlkaV93cml0ZVJldmVyc2UNCi0gKiBAc3RhYmxlIElDVSA1OA0KLSAqLw0KLXR5cGVkZWYg
ZW51bSB7DQotICAgIC8qKiAwOiBDb25zdGFudCBpbmRpY2F0aW5nIHRoYXQgY2hhcmFjdGVyIG1p
cnJvcmluZyBzaG91bGQgbm90IGJlDQotICAgICAgKiBwZXJmb3JtZWQuDQotICAgICAgKiBUaGlz
IGlzIHRoZSBkZWZhdWx0Lg0KLSAgICAgICogQHN0YWJsZSBJQ1UgNTgNCi0gICAgICAqLw0KLSAg
ICBVQklESV9NSVJST1JJTkdfT0ZGID0gMCwNCi0gICAgLyoqIDE6IENvbnN0YW50IGluZGljYXRp
bmcgdGhhdCBjaGFyYWN0ZXIgbWlycm9yaW5nIHNob3VsZCBiZSBwZXJmb3JtZWQuDQotICAgICAg
KiBUaGlzIGNvcnJlc3BvbmRzIHRvIGNhbGxpbmcgPGNvZGU+dWJpZGlfd3JpdGVSZW9yZGVyZWQ8
L2NvZGU+IG9yDQotICAgICAgKiA8Y29kZT51YmlkaV93cml0ZVJldmVyc2U8L2NvZGU+IHdpdGgg
dGhlDQotICAgICAgKiA8Y29kZT5VQklESV9ET19NSVJST1JJTkc8L2NvZGU+IG9wdGlvbiBiaXQg
c2V0Lg0KLSAgICAgICogQHN0YWJsZSBJQ1UgNTgNCi0gICAgICAqLw0KLSAgICBVQklESV9NSVJS
T1JJTkdfT04NCi19IFVCaURpTWlycm9yaW5nOw0KLQ0KLS8qKg0KLSAqIEZvcndhcmQgZGVjbGFy
YXRpb24gb2YgdGhlIDxjb2RlPlVCaURpVHJhbnNmb3JtPC9jb2RlPiBzdHJ1Y3R1cmUgdGhhdCBz
dG9yZXMNCi0gKiBpbmZvcm1hdGlvbiB1c2VkIGJ5IHRoZSBsYXlvdXQgdHJhbnNmb3JtYXRpb24g
ZW5naW5lLg0KLSAqIEBzdGFibGUgSUNVIDU4DQotICovDQotdHlwZWRlZiBzdHJ1Y3QgVUJpRGlU
cmFuc2Zvcm0gVUJpRGlUcmFuc2Zvcm07DQotDQotLyoqDQotICogUGVyZm9ybXMgdHJhbnNmb3Jt
YXRpb24gb2YgdGV4dCBmcm9tIHRoZSBiaWRpIGxheW91dCBkZWZpbmVkIGJ5IHRoZSBpbnB1dA0K
LSAqIG9yZGVyaW5nIHNjaGVtZSB0byB0aGUgYmlkaSBsYXlvdXQgZGVmaW5lZCBieSB0aGUgb3V0
cHV0IG9yZGVyaW5nIHNjaGVtZSwNCi0gKiBhbmQgYXBwbGllcyBjaGFyYWN0ZXIgbWlycm9yaW5n
IGFuZCBBcmFiaWMgc2hhcGluZyBvcGVyYXRpb25zLjxwPg0KLSAqIEluIHRlcm1zIG9mIDxjb2Rl
PlVCaURpPC9jb2RlPiwgc3VjaCBhIHRyYW5zZm9ybWF0aW9uIGltcGxpZXM6DQotICogPHVsPg0K
LSAqIDxsaT5jYWxsaW5nIDxjb2RlPnViaWRpX3NldFJlb3JkZXJpbmdNb2RlPC9jb2RlPiBhcyBu
ZWVkZWQgKHdoZW4gdGhlDQotICogcmVvcmRlcmluZyBtb2RlIGlzIG90aGVyIHRoYW4gbm9ybWFs
KSw8L2xpPg0KLSAqIDxsaT5jYWxsaW5nIDxjb2RlPnViaWRpX3NldEludmVyc2U8L2NvZGU+IGFz
IG5lZWRlZCAod2hlbiB0ZXh0IHNob3VsZCBiZQ0KLSAqIHRyYW5zZm9ybWVkIGZyb20gYSB2aXN1
YWwgdG8gYSBsb2dpY2FsIGZvcm0pLDwvbGk+DQotICogPGxpPnJlc29sdmluZyBlbWJlZGRpbmcg
bGV2ZWxzIG9mIGVhY2ggY2hhcmFjdGVyIGluIHRoZSBpbnB1dCB0ZXh0IGJ5DQotICogY2FsbGlu
ZyA8Y29kZT51YmlkaV9zZXRQYXJhPC9jb2RlPiw8L2xpPg0KLSAqIDxsaT5yZW9yZGVyaW5nIHRo
ZSBjaGFyYWN0ZXJzIGJhc2VkIG9uIHRoZSBjb21wdXRlZCBlbWJlZGRpbmcgbGV2ZWxzLCBhbHNv
DQotICogcGVyZm9ybWluZyBjaGFyYWN0ZXIgbWlycm9yaW5nIGFzIG5lZWRlZCwgYW5kIHN0cmVh
bWluZyB0aGUgcmVzdWx0IHRvIHRoZQ0KLSAqIG91dHB1dCwgYnkgY2FsbGluZyA8Y29kZT51Ymlk
aV93cml0ZVJlb3JkZXJlZDwvY29kZT4sPC9saT4NCi0gKiA8bGk+cGVyZm9ybWluZyBBcmFiaWMg
ZGlnaXQgYW5kIGxldHRlciBzaGFwaW5nIG9uIHRoZSBvdXRwdXQgdGV4dCBieSBjYWxsaW5nDQot
ICogPGNvZGU+dV9zaGFwZUFyYWJpYzwvY29kZT4uPC9saT4NCi0gKiA8L3VsPg0KLSAqIEFuICJv
cmRlcmluZyBzY2hlbWUiIGVuY29tcGFzc2VzIHRoZSBiYXNlIGRpcmVjdGlvbiBhbmQgdGhlIG9y
ZGVyIG9mIHRleHQsDQotICogYW5kIHRoZXNlIGNoYXJhY3RlcmlzdGljcyBtdXN0IGJlIGRlZmlu
ZWQgYnkgdGhlIGNhbGxlciBmb3IgYm90aCBpbnB1dCBhbmQNCi0gKiBvdXRwdXQgZXhwbGljaXRs
eSAuPHA+DQotICogVGhlcmUgYXJlIDM2IHBvc3NpYmxlIGNvbWJpbmF0aW9ucyBvZiA8aW5wdXQs
IG91dHB1dD4gb3JkZXJpbmcgc2NoZW1lcywNCi0gKiB3aGljaCBhcmUgcGFydGlhbGx5IHN1cHBv
cnRlZCBieSA8Y29kZT5VQmlEaTwvY29kZT4gYWxyZWFkeS4gRXhhbXBsZXMgb2YgdGhlDQotICog
Y3VycmVudGx5IHN1cHBvcnRlZCBjb21iaW5hdGlvbnM6DQotICogPHVsPg0KLSAqIDxsaT48TG9n
aWNhbCBMVFIsIFZpc3VhbCBMVFI+OiB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZw0KLSAq
IDxjb2RlPnViaWRpX3NldFBhcmE8L2NvZGU+IHdpdGggPGNvZGU+cGFyYUxldmVsID09IFVCSURJ
X0xUUjwvY29kZT4sPC9saT4NCi0gKiA8bGk+PExvZ2ljYWwgUlRMLCBWaXN1YWwgTFRSPjogdGhp
cyBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcNCi0gKiA8Y29kZT51YmlkaV9zZXRQYXJhPC9jb2Rl
PiB3aXRoIDxjb2RlPnBhcmFMZXZlbCA9PSBVQklESV9SVEw8L2NvZGU+LDwvbGk+DQotICogPGxp
PjxMb2dpY2FsIERlZmF1bHQgKCJBdXRvIikgTFRSLCBWaXN1YWwgTFRSPjogdGhpcyBpcyBlcXVp
dmFsZW50IHRvDQotICogY2FsbGluZyA8Y29kZT51YmlkaV9zZXRQYXJhPC9jb2RlPiB3aXRoDQot
ICogPGNvZGU+cGFyYUxldmVsID09IFVCSURJX0RFRkFVTFRfTFRSPC9jb2RlPiw8L2xpPg0KLSAq
IDxsaT48TG9naWNhbCBEZWZhdWx0ICgiQXV0byIpIFJUTCwgVmlzdWFsIExUUj46IHRoaXMgaXMg
ZXF1aXZhbGVudCB0bw0KLSAqIGNhbGxpbmcgPGNvZGU+dWJpZGlfc2V0UGFyYTwvY29kZT4gd2l0
aA0KLSAqIDxjb2RlPnBhcmFMZXZlbCA9PSBVQklESV9ERUZBVUxUX1JUTDwvY29kZT4sPC9saT4N
Ci0gKiA8bGk+PFZpc3VhbCBMVFIsIExvZ2ljYWwgTFRSPjogdGhpcyBpcyBlcXVpdmFsZW50IHRv
DQotICogY2FsbGluZyA8Y29kZT51YmlkaV9zZXRJbnZlcnNlKFVCaURpKiwgVFJVRSk8L2NvZGU+
IGFuZCB0aGVuDQotICogPGNvZGU+dWJpZGlfc2V0UGFyYTwvY29kZT4gd2l0aCA8Y29kZT5wYXJh
TGV2ZWwgPT0gVUJJRElfTFRSPC9jb2RlPiw8L2xpPg0KLSAqIDxsaT48VmlzdWFsIExUUiwgTG9n
aWNhbCBSVEw+OiB0aGlzIGlzIGVxdWl2YWxlbnQgdG8NCi0gKiBjYWxsaW5nIDxjb2RlPnViaWRp
X3NldEludmVyc2UoVUJpRGkqLCBUUlVFKTwvY29kZT4gYW5kIHRoZW4NCi0gKiA8Y29kZT51Ymlk
aV9zZXRQYXJhPC9jb2RlPiB3aXRoIDxjb2RlPnBhcmFMZXZlbCA9PSBVQklESV9SVEw8L2NvZGU+
LjwvbGk+DQotICogPC91bD4NCi0gKiBBbGwgY29tYmluYXRpb25zIHRoYXQgaW52b2x2ZSB0aGUg
VmlzdWFsIFJUTCBzY2hlbWUgYXJlIHVuc3VwcG9ydGVkIGJ5DQotICogPGNvZGU+VUJpRGk8L2Nv
ZGU+LCBmb3IgaW5zdGFuY2U6DQotICogPHVsPg0KLSAqIDxsaT48TG9naWNhbCBMVFIsIFZpc3Vh
bCBSVEw+LDwvbGk+DQotICogPGxpPjxWaXN1YWwgUlRMLCBMb2dpY2FsIFJUTD4uPC9saT4NCi0g
KiA8L3VsPg0KLSAqIDxwPkV4YW1wbGUgb2YgdXNhZ2Ugb2YgdGhlIHRyYW5zZm9ybWF0aW9uIGVu
Z2luZTo8YnI+DQotICogPHByZT4NCi0gKiBcY29kZQ0KLSAqIFVDaGFyIHRleHQxW10gPSB7J2En
LCAnYicsICdjJywgMHgwNjI1LCAnMScsIDB9Ow0KLSAqIFVDaGFyIHRleHQyW10gPSB7J2EnLCAn
YicsICdjJywgMHgwNjI1LCAnMScsIDB9Ow0KLSAqIFVFcnJvckNvZGUgZXJyb3JDb2RlID0gVV9a
RVJPX0VSUk9SOw0KLSAqIC8vIFJ1biBhIHRyYW5zZm9ybWF0aW9uLg0KLSAqIHViaWRpdHJhbnNm
b3JtX3RyYW5zZm9ybShwQmlkaVRyYW5zZm9ybSwNCi0gKiAgICAgICAgICB0ZXh0MSwgLTEsIHRl
eHQyLCAtMSwNCi0gKiAgICAgICAgICBVQklESV9MVFIsIFVCSURJX1ZJU1VBTCwNCi0gKiAgICAg
ICAgICBVQklESV9SVEwsIFVCSURJX0xPR0lDQUwsDQotICogICAgICAgICAgVUJJRElfTUlSUk9S
SU5HX09GRiwNCi0gKiAgICAgICAgICBVX1NIQVBFX0RJR0lUU19BTjJFTiB8IFVfU0hBUEVfRElH
SVRfVFlQRV9BTl9FWFRFTkRFRCwNCi0gKiAgICAgICAgICAmZXJyb3JDb2RlKTsNCi0gKiAvLyBE
byBzb21ldGhpbmcgd2l0aCB0ZXh0Mi4NCi0gKiAgdGV4dDJbNF0gPSAnMic7DQotICogLy8gUnVu
IGEgcmV2ZXJzZSB0cmFuc2Zvcm1hdGlvbi4NCi0gKiB1YmlkaXRyYW5zZm9ybV90cmFuc2Zvcm0o
cEJpZGlUcmFuc2Zvcm0sDQotICogICAgICAgICAgdGV4dDIsIC0xLCB0ZXh0MSwgLTEsDQotICog
ICAgICAgICAgVUJJRElfUlRMLCBVQklESV9MT0dJQ0FMLA0KLSAqICAgICAgICAgIFVCSURJX0xU
UiwgVUJJRElfVklTVUFMLA0KLSAqICAgICAgICAgIFVCSURJX01JUlJPUklOR19PRkYsDQotICog
ICAgICAgICAgVV9TSEFQRV9ESUdJVFNfRU4yQU4gfCBVX1NIQVBFX0RJR0lUX1RZUEVfQU5fRVhU
RU5ERUQsDQotICogICAgICAgICAgJmVycm9yQ29kZSk7DQotICpcZW5kY29kZQ0KLSAqIDwvcHJl
Pg0KLSAqIDwvcD4NCi0gKg0KLSAqIEBwYXJhbSBwQmlEaVRyYW5zZm9ybSBBIHBvaW50ZXIgdG8g
YSA8Y29kZT5VQmlEaVRyYW5zZm9ybTwvY29kZT4gb2JqZWN0DQotICogICAgICAgIGFsbG9jYXRl
ZCB3aXRoIDxjb2RlPnViaWRpdHJhbnNmb3JtX29wZW4oKTwvY29kZT4gb3INCi0gKiAgICAgICAg
PGNvZGU+TlVMTDwvY29kZT4uPHA+DQotICogICAgICAgIFRoaXMgb2JqZWN0IHNlcnZlcyBmb3Ig
b25lLXRpbWUgc2V0dXAgdG8gYW1vcnRpemUgaW5pdGlhbGl6YXRpb24NCi0gKiAgICAgICAgb3Zl
cmhlYWRzLiBVc2Ugb2YgdGhpcyBvYmplY3QgaXMgbm90IHRocmVhZC1zYWZlLiBBbGwgb3RoZXIg
dGhyZWFkcw0KLSAqICAgICAgICBzaG91bGQgYWxsb2NhdGUgYSBuZXcgPGNvZGU+VUJpRGlUcmFu
c2Zvcm08L2NvZGU+IG9iamVjdCBieSBjYWxsaW5nDQotICogICAgICAgIDxjb2RlPnViaWRpdHJh
bnNmb3JtX29wZW4oKTwvY29kZT4gYmVmb3JlIHVzaW5nIGl0LiBBbHRlcm5hdGl2ZWx5LA0KLSAq
ICAgICAgICBhIGNhbGxlciBjYW4gc2V0IHRoaXMgcGFyYW1ldGVyIHRvIDxjb2RlPk5VTEw8L2Nv
ZGU+LCBpbiB3aGljaCBjYXNlDQotICogICAgICAgIHRoZSBvYmplY3Qgd2lsbCBiZSBhbGxvY2F0
ZWQgYnkgdGhlIGVuZ2luZSBvbiB0aGUgZmx5LjwvcD4NCi0gKiBAcGFyYW0gc3JjIEEgcG9pbnRl
ciB0byB0aGUgdGV4dCB0aGF0IHRoZSBCaWRpIGxheW91dCB0cmFuc2Zvcm1hdGlvbnMgd2lsbA0K
LSAqICAgICAgICBiZSBwZXJmb3JtZWQgb24uDQotICogICAgICAgIDxwPjxzdHJvbmc+Tm90ZTo8
L3N0cm9uZz4gdGhlIHRleHQgbXVzdCBiZSAoYXQgbGVhc3QpDQotICogICAgICAgIDxjb2RlPnNy
Y0xlbmd0aDwvY29kZT4gbG9uZy48L3A+DQotICogQHBhcmFtIHNyY0xlbmd0aCBUaGUgbGVuZ3Ro
IG9mIHRoZSB0ZXh0LCBpbiBudW1iZXIgb2YgVUNoYXJzLiBJZg0KLSAqICAgICAgICA8Y29kZT5s
ZW5ndGggPT0gLTE8L2NvZGU+IHRoZW4gdGhlIHRleHQgbXVzdCBiZSB6ZXJvLXRlcm1pbmF0ZWQu
DQotICogQHBhcmFtIGRlc3QgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBwcm9jZXNzZWQgdGV4dCBp
cyB0byBiZSBjb3BpZWQuDQotICogQHBhcmFtIGRlc3RTaXplIFRoZSBzaXplIG9mIHRoZSA8Y29k
ZT5kZXN0PC9jb2RlPiBidWZmZXIsIGluIG51bWJlciBvZg0KLSAqICAgICAgICBVQ2hhcnMuIElm
IHRoZSA8Y29kZT5VX1NIQVBFX0xFVFRFUlNfVU5TSEFQRTwvY29kZT4gb3B0aW9uIGlzIHNldCwN
Ci0gKiAgICAgICAgdGhlbiB0aGUgZGVzdGluYXRpb24gbGVuZ3RoIGNvdWxkIGJlIGFzIGxhcmdl
IGFzDQotICogICAgICAgIDxjb2RlPnNyY0xlbmd0aCAqIDI8L2NvZGU+LiBPdGhlcndpc2UsIHRo
ZSBkZXN0aW5hdGlvbiBsZW5ndGggd2lsbA0KLSAqICAgICAgICBub3QgZXhjZWVkIDxjb2RlPnNy
Y0xlbmd0aDwvY29kZT4uIElmIHRoZSBjYWxsZXIgcmVzZXJ2ZXMgdGhlIGxhc3QNCi0gKiAgICAg
ICAgcG9zaXRpb24gZm9yIHplcm8tdGVybWluYXRpb24sIGl0IHNob3VsZCBiZSBleGNsdWRlZCBm
cm9tDQotICogICAgICAgIDxjb2RlPmRlc3RTaXplPC9jb2RlPi4NCi0gKiAgICAgICAgPHA+PGNv
ZGU+ZGVzdFNpemUgPT0gLTE8L2NvZGU+IGlzIGFsbG93ZWQgYW5kIG1ha2VzIHNlbnNlIHdoZW4N
Ci0gKiAgICAgICAgPGNvZGU+ZGVzdDwvY29kZT4gd2FzIGhvbGRzIHNvbWUgbWVhbmluZ2Z1bCB2
YWx1ZSwgZS5nLiB0aGF0IG9mDQotICogICAgICAgIDxjb2RlPnNyYzwvY29kZT4uIEluIHRoaXMg
Y2FzZSA8Y29kZT5kZXN0PC9jb2RlPiBtdXN0IGJlDQotICogICAgICAgIHplcm8tdGVybWluYXRl
ZC48L3A+DQotICogQHBhcmFtIGluUGFyYUxldmVsIEEgYmFzZSBlbWJlZGRpbmcgbGV2ZWwgb2Yg
dGhlIGlucHV0IGFzIGRlZmluZWQgaW4NCi0gKiAgICAgICAgPGNvZGU+dWJpZGlfc2V0UGFyYTwv
Y29kZT4gZG9jdW1lbnRhdGlvbiBmb3IgdGhlDQotICogICAgICAgIDxjb2RlPnBhcmFMZXZlbDwv
Y29kZT4gcGFyYW1ldGVyLg0KLSAqIEBwYXJhbSBpbk9yZGVyIEFuIG9yZGVyIG9mIHRoZSBpbnB1
dCwgd2hpY2ggY2FuIGJlIG9uZSBvZiB0aGUNCi0gKiAgICAgICAgPGNvZGU+VUJpRGlPcmRlcjwv
Y29kZT4gdmFsdWVzLg0KLSAqIEBwYXJhbSBvdXRQYXJhTGV2ZWwgQSBiYXNlIGVtYmVkZGluZyBs
ZXZlbCBvZiB0aGUgb3V0cHV0IGFzIGRlZmluZWQgaW4NCi0gKiAgICAgICAgPGNvZGU+dWJpZGlf
c2V0UGFyYTwvY29kZT4gZG9jdW1lbnRhdGlvbiBmb3IgdGhlDQotICogICAgICAgIDxjb2RlPnBh
cmFMZXZlbDwvY29kZT4gcGFyYW1ldGVyLg0KLSAqIEBwYXJhbSBvdXRPcmRlciBBbiBvcmRlciBv
ZiB0aGUgb3V0cHV0LCB3aGljaCBjYW4gYmUgb25lIG9mIHRoZQ0KLSAqICAgICAgICA8Y29kZT5V
QmlEaU9yZGVyPC9jb2RlPiB2YWx1ZXMuDQotICogQHBhcmFtIGRvTWlycm9yaW5nIEluZGljYXRl
cyB3aGV0aGVyIG9yIG5vdCB0byBwZXJmb3JtIGNoYXJhY3RlciBtaXJyb3JpbmcsDQotICogICAg
ICAgIGFuZCBjYW4gYWNjZXB0IG9uZSBvZiB0aGUgPGNvZGU+VUJpRGlNaXJyb3Jpbmc8L2NvZGU+
IHZhbHVlcy4NCi0gKiBAcGFyYW0gc2hhcGluZ09wdGlvbnMgQXJhYmljIGRpZ2l0IGFuZCBsZXR0
ZXIgc2hhcGluZyBvcHRpb25zIGRlZmluZWQgaW4gdGhlDQotICogICAgICAgIHVzaGFwZS5oIGRv
Y3VtZW50YXRpb24uDQotICogICAgICAgIDxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gRGlyZWN0
aW9uIGluZGljYXRvciBvcHRpb25zIGFyZSBjb21wdXRlZCBieQ0KLSAqICAgICAgICB0aGUgdHJh
bnNmb3JtYXRpb24gZW5naW5lIGJhc2VkIG9uIHRoZSBlZmZlY3RpdmUgb3JkZXJpbmcgc2NoZW1l
cywgc28NCi0gKiAgICAgICAgdXNlci1kZWZpbmVkIGRpcmVjdGlvbiBpbmRpY2F0b3JzIHdpbGwg
YmUgaWdub3JlZC48L3A+DQotICogQHBhcmFtIHBFcnJvckNvZGUgQSBwb2ludGVyIHRvIGFuIGVy
cm9yIGNvZGUgdmFsdWUuDQotICoNCi0gKiBAcmV0dXJuIFRoZSBkZXN0aW5hdGlvbiBsZW5ndGgs
IGkuZS4gdGhlIG51bWJlciBvZiBVQ2hhcnMgd3JpdHRlbiB0bw0KLSAqICAgICAgICAgPGNvZGU+
ZGVzdDwvY29kZT4uIElmIHRoZSB0cmFuc2Zvcm1hdGlvbiBmYWlscywgdGhlIHJldHVybiB2YWx1
ZQ0KLSAqICAgICAgICAgd2lsbCBiZSAwIChhbmQgdGhlIGVycm9yIGNvZGUgd2lsbCBiZSB3cml0
dGVuIHRvDQotICogICAgICAgICA8Y29kZT5wRXJyb3JDb2RlPC9jb2RlPikuDQotICoNCi0gKiBA
c2VlIFVCaURpTGV2ZWwNCi0gKiBAc2VlIFVCaURpT3JkZXINCi0gKiBAc2VlIFVCaURpTWlycm9y
aW5nDQotICogQHNlZSB1YmlkaV9zZXRQYXJhDQotICogQHNlZSB1X3NoYXBlQXJhYmljDQotICog
QHN0YWJsZSBJQ1UgNTgNCi0gKi8NCi1VX1NUQUJMRSB1aW50MzJfdCBVX0VYUE9SVDINCi11Ymlk
aXRyYW5zZm9ybV90cmFuc2Zvcm0oVUJpRGlUcmFuc2Zvcm0gKnBCaURpVHJhbnNmb3JtLA0KLSAg
ICAgICAgICAgIGNvbnN0IFVDaGFyICpzcmMsIGludDMyX3Qgc3JjTGVuZ3RoLA0KLSAgICAgICAg
ICAgIFVDaGFyICpkZXN0LCBpbnQzMl90IGRlc3RTaXplLA0KLSAgICAgICAgICAgIFVCaURpTGV2
ZWwgaW5QYXJhTGV2ZWwsIFVCaURpT3JkZXIgaW5PcmRlciwNCi0gICAgICAgICAgICBVQmlEaUxl
dmVsIG91dFBhcmFMZXZlbCwgVUJpRGlPcmRlciBvdXRPcmRlciwNCi0gICAgICAgICAgICBVQmlE
aU1pcnJvcmluZyBkb01pcnJvcmluZywgdWludDMyX3Qgc2hhcGluZ09wdGlvbnMsDQotICAgICAg
ICAgICAgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7DQotDQotLyoqDQotICogQWxsb2NhdGVzIGEg
PGNvZGU+VUJpRGlUcmFuc2Zvcm08L2NvZGU+IG9iamVjdC4gVGhpcyBvYmplY3QgY2FuIGJlIHJl
dXNlZCwNCi0gKiBlLmcuIHdpdGggZGlmZmVyZW50IG9yZGVyaW5nIHNjaGVtZXMsIG1pcnJvcmlu
ZyBvciBzaGFwaW5nIG9wdGlvbnMuPHA+DQotICogPHN0cm9uZz5Ob3RlOjwvc3Ryb25nPlRoZSBv
YmplY3QgY2FuIG9ubHkgYmUgcmV1c2VkIGluIHRoZSBzYW1lIHRocmVhZC4NCi0gKiBBbGwgb3Ro
ZXIgdGhyZWFkcyBzaG91bGQgYWxsb2NhdGUgYSBuZXcgPGNvZGU+VUJpRGlUcmFuc2Zvcm08L2Nv
ZGU+IG9iamVjdA0KLSAqIGJlZm9yZSB1c2luZyBpdC48cD4NCi0gKiBFeGFtcGxlIG9mIHVzYWdl
OjxwPg0KLSAqIDxwcmU+DQotICogXGNvZGUNCi0gKiBVRXJyb3JDb2RlIGVycm9yQ29kZSA9IFVf
WkVST19FUlJPUjsNCi0gKiAvLyBPcGVuIGEgbmV3IFVCaURpVHJhbnNmb3JtLg0KLSAqIFVCaURp
VHJhbnNmb3JtKiB0cmFuc2Zvcm0gPSB1YmlkaXRyYW5zZm9ybV9vcGVuKCZlcnJvckNvZGUpOw0K
LSAqIC8vIFJ1biBhIHRyYW5zZm9ybWF0aW9uLg0KLSAqIHViaWRpdHJhbnNmb3JtX3RyYW5zZm9y
bSh0cmFuc2Zvcm0sDQotICogICAgICAgICAgdGV4dDEsIC0xLCB0ZXh0MiwgLTEsDQotICogICAg
ICAgICAgVUJJRElfUlRMLCBVQklESV9MT0dJQ0FMLA0KLSAqICAgICAgICAgIFVCSURJX0xUUiwg
VUJJRElfVklTVUFMLA0KLSAqICAgICAgICAgIFVCSURJX01JUlJPUklOR19PTiwNCi0gKiAgICAg
ICAgICBVX1NIQVBFX0RJR0lUU19FTjJBTiwNCi0gKiAgICAgICAgICAmZXJyb3JDb2RlKTsNCi0g
KiAvLyBEbyBzb21ldGhpbmcgd2l0aCB0aGUgb3V0cHV0IHRleHQgYW5kIGludm9rZSBhbm90aGVy
IHRyYW5zZm9ybWF0aW9uIHVzaW5nDQotICogLy8gICB0aGF0IHRleHQgYXMgaW5wdXQuDQotICog
dWJpZGl0cmFuc2Zvcm1fdHJhbnNmb3JtKHRyYW5zZm9ybSwNCi0gKiAgICAgICAgICB0ZXh0Miwg
LTEsIHRleHQzLCAtMSwNCi0gKiAgICAgICAgICBVQklESV9MVFIsIFVCSURJX1ZJU1VBTCwNCi0g
KiAgICAgICAgICBVQklESV9SVEwsIFVCSURJX1ZJU1VBTCwNCi0gKiAgICAgICAgICBVQklESV9N
SVJST1JJTkdfT04sDQotICogICAgICAgICAgMCwgJmVycm9yQ29kZSk7DQotICpcZW5kY29kZQ0K
LSAqIDwvcHJlPg0KLSAqIDxwPg0KLSAqIFRoZSA8Y29kZT5VQmlEaVRyYW5zZm9ybTwvY29kZT4g
b2JqZWN0IG11c3QgYmUgZGVhbGxvY2F0ZWQgYnkgY2FsbGluZw0KLSAqIDxjb2RlPnViaWRpdHJh
bnNmb3JtX2Nsb3NlKCk8L2NvZGU+Lg0KLSAqDQotICogQHJldHVybiBBbiBlbXB0eSA8Y29kZT5V
QmlEaVRyYW5zZm9ybTwvY29kZT4gb2JqZWN0Lg0KLSAqIEBzdGFibGUgSUNVIDU4DQotICovDQot
VV9TVEFCTEUgVUJpRGlUcmFuc2Zvcm0qIFVfRVhQT1JUMg0KLXViaWRpdHJhbnNmb3JtX29wZW4o
VUVycm9yQ29kZSAqcEVycm9yQ29kZSk7DQotDQotLyoqDQotICogRGVhbGxvY2F0ZXMgdGhlIGdp
dmVuIDxjb2RlPlVCaURpVHJhbnNmb3JtPC9jb2RlPiBvYmplY3QuDQotICogQHN0YWJsZSBJQ1Ug
NTgNCi0gKi8NCi1VX1NUQUJMRSB2b2lkIFVfRVhQT1JUMg0KLXViaWRpdHJhbnNmb3JtX2Nsb3Nl
KFVCaURpVHJhbnNmb3JtICpwQmlkaVRyYW5zZm9ybSk7DQotDQotI2lmIFVfU0hPV19DUExVU1BM
VVNfQVBJDQotDQotVV9OQU1FU1BBQ0VfQkVHSU4NCi0NCi0vKioNCi0gKiBcY2xhc3MgTG9jYWxV
QmlEaVRyYW5zZm9ybVBvaW50ZXINCi0gKiAiU21hcnQgcG9pbnRlciIgY2xhc3MsIGNsb3NlcyBh
IFVCaURpVHJhbnNmb3JtIHZpYSB1YmlkaXRyYW5zZm9ybV9jbG9zZSgpLg0KLSAqIEZvciBtb3N0
IG1ldGhvZHMgc2VlIHRoZSBMb2NhbFBvaW50ZXJCYXNlIGJhc2UgY2xhc3MuDQotICoNCi0gKiBA
c2VlIExvY2FsUG9pbnRlckJhc2UNCi0gKiBAc2VlIExvY2FsUG9pbnRlcg0KLSAqIEBzdGFibGUg
SUNVIDU4DQotICovDQotVV9ERUZJTkVfTE9DQUxfT1BFTl9QT0lOVEVSKExvY2FsVUJpRGlUcmFu
c2Zvcm1Qb2ludGVyLCBVQmlEaVRyYW5zZm9ybSwgdWJpZGl0cmFuc2Zvcm1fY2xvc2UpOw0KLQ0K
LVVfTkFNRVNQQUNFX0VORA0KLQ0KLSNlbmRpZg0KLQ0KLSNlbmRpZg0KKy8qCisqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioKKyoKKyogwqkgMjAxNiBhbmQgbGF0ZXI6IFVuaWNvZGUsIEluYy4gYW5kIG90
aGVycy4KKyogTGljZW5zZSAmIHRlcm1zIG9mIHVzZTogaHR0cDovL3d3dy51bmljb2RlLm9yZy9j
b3B5cmlnaHQuaHRtbAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgZmlsZSBuYW1lOiAg
dWJpZGl0cmFuc2Zvcm0uaAorKiAgIGVuY29kaW5nOiAgIFVURi04CisqICAgdGFiIHNpemU6ICAg
OCAobm90IHVzZWQpCisqICAgaW5kZW50YXRpb246NAorKgorKiAgIGNyZWF0ZWQgb246IDIwMTZq
dWwyNAorKiAgIGNyZWF0ZWQgYnk6IExpbmEgS2VtbWVsCisqCisqLworCisjaWZuZGVmIFVCSURJ
VFJBTlNGT1JNX0gKKyNkZWZpbmUgVUJJRElUUkFOU0ZPUk1fSAorCisjaW5jbHVkZSAidW5pY29k
ZS91dHlwZXMuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3ViaWRpLmgiCisjaW5jbHVkZSAidW5pY29k
ZS91Y2hhci5oIgorI2luY2x1ZGUgInVuaWNvZGUvbG9jYWxwb2ludGVyLmgiCisKKy8qKgorICog
XGZpbGUKKyAqIFxicmllZiBCaWRpIFRyYW5zZm9ybWF0aW9ucworICovCisKKy8qKgorICogYFVC
aURpT3JkZXJgIGluZGljYXRlcyB0aGUgb3JkZXIgb2YgdGV4dC4KKyAqCisgKiBUaGlzIGJpZGkg
dHJhbnNmb3JtYXRpb24gZW5naW5lIHN1cHBvcnRzIGFsbCBwb3NzaWJsZSBjb21iaW5hdGlvbnMg
KDQgaW4KKyAqIHRvdGFsKSBvZiBpbnB1dCBhbmQgb3V0cHV0IHRleHQgb3JkZXI6CisgKgorICog
ICAtIDxsb2dpY2FsIGlucHV0LCB2aXN1YWwgb3V0cHV0PjogdW5sZXNzIHRoZSBvdXRwdXQgZGly
ZWN0aW9uIGlzIFJUTCwgdGhpcworICogICAgIGNvcnJlc3BvbmRzIHRvIGEgbm9ybWFsIG9wZXJh
dGlvbiBvZiB0aGUgQmlkaSBhbGdvcml0aG0gYXMgZGVzY3JpYmVkIGluIHRoZQorICogICAgIFVu
aWNvZGUgVGVjaG5pY2FsIFJlcG9ydCBhbmQgaW1wbGVtZW50ZWQgYnkgYFVCaURpYCB3aGVuIHRo
ZQorICogICAgIHJlb3JkZXJpbmcgbW9kZSBpcyBzZXQgdG8gYFVCSURJX1JFT1JERVJfREVGQVVM
VGAuIFZpc3VhbCBSVEwKKyAqICAgICBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYFVCaURpYCBh
bmQgaXMgYWNjb21wbGlzaGVkIHRocm91Z2gKKyAqICAgICByZXZlcnNpbmcgYSB2aXN1YWwgTFRS
IHN0cmluZywKKyAqCisgKiAgIC0gPHZpc3VhbCBpbnB1dCwgbG9naWNhbCBvdXRwdXQ+OiB1bmxl
c3MgdGhlIGlucHV0IGRpcmVjdGlvbiBpcyBSVEwsIHRoaXMKKyAqICAgICBjb3JyZXNwb25kcyB0
byBhbiAiaW52ZXJzZSBiaWRpIGFsZ29yaXRobSIgaW4gYFVCaURpYCB3aXRoIHRoZQorICogICAg
IHJlb3JkZXJpbmcgbW9kZSBzZXQgdG8gYFVCSURJX1JFT1JERVJfSU5WRVJTRV9MSUtFX0RJUkVD
VGAuCisgKiAgICAgVmlzdWFsIFJUTCBtb2RlIGlzIG5vdCBub3Qgc3VwcG9ydGVkIGJ5IGBVQmlE
aWAgYW5kIGlzCisgKiAgICAgYWNjb21wbGlzaGVkIHRocm91Z2ggcmV2ZXJzaW5nIGEgdmlzdWFs
IExUUiBzdHJpbmcsCisgKgorICogICAtIDxsb2dpY2FsIGlucHV0LCBsb2dpY2FsIG91dHB1dD46
IGlmIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGJhc2UgZGlyZWN0aW9ucworICogICAgIG1pc21hdGNo
LCB0aGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBgVUJpRGlgIGltcGxlbWVudGF0aW9uIHdpdGggdGhl
CisgKiAgICAgcmVvcmRlcmluZyBtb2RlIHNldCB0byBgVUJJRElfUkVPUkRFUl9SVU5TX09OTFlg
OyBhbmQgaWYgdGhlCisgKiAgICAgaW5wdXQgYW5kIG91dHB1dCBiYXNlIGRpcmVjdGlvbnMgYXJl
IGlkZW50aWNhbCwgdGhlIHRyYW5zZm9ybWF0aW9uIGVuZ2luZQorICogICAgIHdpbGwgb25seSBo
YW5kbGUgY2hhcmFjdGVyIG1pcnJvcmluZyBhbmQgQXJhYmljIHNoYXBpbmcgb3BlcmF0aW9ucyB3
aXRob3V0CisgKiAgICAgcmVvcmRlcmluZywKKyAqCisgKiAgIC0gPHZpc3VhbCBpbnB1dCwgdmlz
dWFsIG91dHB1dD46IHRoaXMgcmVvcmRlcmluZyBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQgYnkKKyAq
ICAgICB0aGUgYFVCaURpYCBlbmdpbmU7IGl0IGltcGxpZXMgY2hhcmFjdGVyIG1pcnJvcmluZywg
QXJhYmljCisgKiAgICAgc2hhcGluZywgYW5kIC0gaWYgdGhlIGlucHV0L291dHB1dCBiYXNlIGRp
cmVjdGlvbnMgbWlzbWF0Y2ggLSAgc3RyaW5nCisgKiAgICAgcmV2ZXJzZSBvcGVyYXRpb25zLgor
ICogQHNlZSB1YmlkaV9zZXRJbnZlcnNlCisgKiBAc2VlIHViaWRpX3NldFJlb3JkZXJpbmdNb2Rl
CisgKiBAc2VlIFVCSURJX1JFT1JERVJfREVGQVVMVAorICogQHNlZSBVQklESV9SRU9SREVSX0lO
VkVSU0VfTElLRV9ESVJFQ1QKKyAqIEBzZWUgVUJJRElfUkVPUkRFUl9SVU5TX09OTFkKKyAqIEBz
dGFibGUgSUNVIDU4CisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgLyoqIDA6IENvbnN0YW50IGlu
ZGljYXRpbmcgYSBsb2dpY2FsIG9yZGVyLgorICAgICAgKiBUaGlzIGlzIHRoZSBkZWZhdWx0IGZv
ciBpbnB1dCB0ZXh0LgorICAgICAgKiBAc3RhYmxlIElDVSA1OAorICAgICAgKi8KKyAgICBVQklE
SV9MT0dJQ0FMID0gMCwKKyAgICAvKiogMTogQ29uc3RhbnQgaW5kaWNhdGluZyBhIHZpc3VhbCBv
cmRlci4KKyAgICAgICogVGhpcyBpcyBhIGRlZmF1bHQgZm9yIG91dHB1dCB0ZXh0LgorICAgICAg
KiBAc3RhYmxlIElDVSA1OAorICAgICAgKi8KKyAgICBVQklESV9WSVNVQUwKK30gVUJpRGlPcmRl
cjsKKworLyoqCisgKiA8Y29kZT5VQmlEaU1pcnJvcmluZzwvY29kZT4gaW5kaWNhdGVzIHdoZXRo
ZXIgb3Igbm90IGNoYXJhY3RlcnMgd2l0aCB0aGUKKyAqICJtaXJyb3JlZCIgcHJvcGVydHkgaW4g
UlRMIHJ1bnMgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggdGhlaXIgbWlycm9yLWltYWdlCisgKiBj
b3VudGVycGFydHMuCisgKiBAc2VlIFVCSURJX0RPX01JUlJPUklORworICogQHNlZSB1YmlkaV9z
ZXRSZW9yZGVyaW5nT3B0aW9ucworICogQHNlZSB1YmlkaV93cml0ZVJlb3JkZXJlZAorICogQHNl
ZSB1YmlkaV93cml0ZVJldmVyc2UKKyAqIEBzdGFibGUgSUNVIDU4CisgKi8KK3R5cGVkZWYgZW51
bSB7CisgICAgLyoqIDA6IENvbnN0YW50IGluZGljYXRpbmcgdGhhdCBjaGFyYWN0ZXIgbWlycm9y
aW5nIHNob3VsZCBub3QgYmUKKyAgICAgICogcGVyZm9ybWVkLgorICAgICAgKiBUaGlzIGlzIHRo
ZSBkZWZhdWx0LgorICAgICAgKiBAc3RhYmxlIElDVSA1OAorICAgICAgKi8KKyAgICBVQklESV9N
SVJST1JJTkdfT0ZGID0gMCwKKyAgICAvKiogMTogQ29uc3RhbnQgaW5kaWNhdGluZyB0aGF0IGNo
YXJhY3RlciBtaXJyb3Jpbmcgc2hvdWxkIGJlIHBlcmZvcm1lZC4KKyAgICAgICogVGhpcyBjb3Jy
ZXNwb25kcyB0byBjYWxsaW5nIDxjb2RlPnViaWRpX3dyaXRlUmVvcmRlcmVkPC9jb2RlPiBvcgor
ICAgICAgKiA8Y29kZT51YmlkaV93cml0ZVJldmVyc2U8L2NvZGU+IHdpdGggdGhlCisgICAgICAq
IDxjb2RlPlVCSURJX0RPX01JUlJPUklORzwvY29kZT4gb3B0aW9uIGJpdCBzZXQuCisgICAgICAq
IEBzdGFibGUgSUNVIDU4CisgICAgICAqLworICAgIFVCSURJX01JUlJPUklOR19PTgorfSBVQmlE
aU1pcnJvcmluZzsKKworLyoqCisgKiBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIHRoZSA8Y29kZT5V
QmlEaVRyYW5zZm9ybTwvY29kZT4gc3RydWN0dXJlIHRoYXQgc3RvcmVzCisgKiBpbmZvcm1hdGlv
biB1c2VkIGJ5IHRoZSBsYXlvdXQgdHJhbnNmb3JtYXRpb24gZW5naW5lLgorICogQHN0YWJsZSBJ
Q1UgNTgKKyAqLwordHlwZWRlZiBzdHJ1Y3QgVUJpRGlUcmFuc2Zvcm0gVUJpRGlUcmFuc2Zvcm07
CisKKy8qKgorICogUGVyZm9ybXMgdHJhbnNmb3JtYXRpb24gb2YgdGV4dCBmcm9tIHRoZSBiaWRp
IGxheW91dCBkZWZpbmVkIGJ5IHRoZSBpbnB1dAorICogb3JkZXJpbmcgc2NoZW1lIHRvIHRoZSBi
aWRpIGxheW91dCBkZWZpbmVkIGJ5IHRoZSBvdXRwdXQgb3JkZXJpbmcgc2NoZW1lLAorICogYW5k
IGFwcGxpZXMgY2hhcmFjdGVyIG1pcnJvcmluZyBhbmQgQXJhYmljIHNoYXBpbmcgb3BlcmF0aW9u
cy48cD4KKyAqIEluIHRlcm1zIG9mIDxjb2RlPlVCaURpPC9jb2RlPiwgc3VjaCBhIHRyYW5zZm9y
bWF0aW9uIGltcGxpZXM6CisgKiA8dWw+CisgKiA8bGk+Y2FsbGluZyA8Y29kZT51YmlkaV9zZXRS
ZW9yZGVyaW5nTW9kZTwvY29kZT4gYXMgbmVlZGVkICh3aGVuIHRoZQorICogcmVvcmRlcmluZyBt
b2RlIGlzIG90aGVyIHRoYW4gbm9ybWFsKSw8L2xpPgorICogPGxpPmNhbGxpbmcgPGNvZGU+dWJp
ZGlfc2V0SW52ZXJzZTwvY29kZT4gYXMgbmVlZGVkICh3aGVuIHRleHQgc2hvdWxkIGJlCisgKiB0
cmFuc2Zvcm1lZCBmcm9tIGEgdmlzdWFsIHRvIGEgbG9naWNhbCBmb3JtKSw8L2xpPgorICogPGxp
PnJlc29sdmluZyBlbWJlZGRpbmcgbGV2ZWxzIG9mIGVhY2ggY2hhcmFjdGVyIGluIHRoZSBpbnB1
dCB0ZXh0IGJ5CisgKiBjYWxsaW5nIDxjb2RlPnViaWRpX3NldFBhcmE8L2NvZGU+LDwvbGk+Cisg
KiA8bGk+cmVvcmRlcmluZyB0aGUgY2hhcmFjdGVycyBiYXNlZCBvbiB0aGUgY29tcHV0ZWQgZW1i
ZWRkaW5nIGxldmVscywgYWxzbworICogcGVyZm9ybWluZyBjaGFyYWN0ZXIgbWlycm9yaW5nIGFz
IG5lZWRlZCwgYW5kIHN0cmVhbWluZyB0aGUgcmVzdWx0IHRvIHRoZQorICogb3V0cHV0LCBieSBj
YWxsaW5nIDxjb2RlPnViaWRpX3dyaXRlUmVvcmRlcmVkPC9jb2RlPiw8L2xpPgorICogPGxpPnBl
cmZvcm1pbmcgQXJhYmljIGRpZ2l0IGFuZCBsZXR0ZXIgc2hhcGluZyBvbiB0aGUgb3V0cHV0IHRl
eHQgYnkgY2FsbGluZworICogPGNvZGU+dV9zaGFwZUFyYWJpYzwvY29kZT4uPC9saT4KKyAqIDwv
dWw+CisgKiBBbiAib3JkZXJpbmcgc2NoZW1lIiBlbmNvbXBhc3NlcyB0aGUgYmFzZSBkaXJlY3Rp
b24gYW5kIHRoZSBvcmRlciBvZiB0ZXh0LAorICogYW5kIHRoZXNlIGNoYXJhY3RlcmlzdGljcyBt
dXN0IGJlIGRlZmluZWQgYnkgdGhlIGNhbGxlciBmb3IgYm90aCBpbnB1dCBhbmQKKyAqIG91dHB1
dCBleHBsaWNpdGx5IC48cD4KKyAqIFRoZXJlIGFyZSAzNiBwb3NzaWJsZSBjb21iaW5hdGlvbnMg
b2YgPGlucHV0LCBvdXRwdXQ+IG9yZGVyaW5nIHNjaGVtZXMsCisgKiB3aGljaCBhcmUgcGFydGlh
bGx5IHN1cHBvcnRlZCBieSA8Y29kZT5VQmlEaTwvY29kZT4gYWxyZWFkeS4gRXhhbXBsZXMgb2Yg
dGhlCisgKiBjdXJyZW50bHkgc3VwcG9ydGVkIGNvbWJpbmF0aW9uczoKKyAqIDx1bD4KKyAqIDxs
aT48TG9naWNhbCBMVFIsIFZpc3VhbCBMVFI+OiB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGlu
ZworICogPGNvZGU+dWJpZGlfc2V0UGFyYTwvY29kZT4gd2l0aCA8Y29kZT5wYXJhTGV2ZWwgPT0g
VUJJRElfTFRSPC9jb2RlPiw8L2xpPgorICogPGxpPjxMb2dpY2FsIFJUTCwgVmlzdWFsIExUUj46
IHRoaXMgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nCisgKiA8Y29kZT51YmlkaV9zZXRQYXJhPC9j
b2RlPiB3aXRoIDxjb2RlPnBhcmFMZXZlbCA9PSBVQklESV9SVEw8L2NvZGU+LDwvbGk+CisgKiA8
bGk+PExvZ2ljYWwgRGVmYXVsdCAoIkF1dG8iKSBMVFIsIFZpc3VhbCBMVFI+OiB0aGlzIGlzIGVx
dWl2YWxlbnQgdG8KKyAqIGNhbGxpbmcgPGNvZGU+dWJpZGlfc2V0UGFyYTwvY29kZT4gd2l0aAor
ICogPGNvZGU+cGFyYUxldmVsID09IFVCSURJX0RFRkFVTFRfTFRSPC9jb2RlPiw8L2xpPgorICog
PGxpPjxMb2dpY2FsIERlZmF1bHQgKCJBdXRvIikgUlRMLCBWaXN1YWwgTFRSPjogdGhpcyBpcyBl
cXVpdmFsZW50IHRvCisgKiBjYWxsaW5nIDxjb2RlPnViaWRpX3NldFBhcmE8L2NvZGU+IHdpdGgK
KyAqIDxjb2RlPnBhcmFMZXZlbCA9PSBVQklESV9ERUZBVUxUX1JUTDwvY29kZT4sPC9saT4KKyAq
IDxsaT48VmlzdWFsIExUUiwgTG9naWNhbCBMVFI+OiB0aGlzIGlzIGVxdWl2YWxlbnQgdG8KKyAq
IGNhbGxpbmcgPGNvZGU+dWJpZGlfc2V0SW52ZXJzZShVQmlEaSosIFRSVUUpPC9jb2RlPiBhbmQg
dGhlbgorICogPGNvZGU+dWJpZGlfc2V0UGFyYTwvY29kZT4gd2l0aCA8Y29kZT5wYXJhTGV2ZWwg
PT0gVUJJRElfTFRSPC9jb2RlPiw8L2xpPgorICogPGxpPjxWaXN1YWwgTFRSLCBMb2dpY2FsIFJU
TD46IHRoaXMgaXMgZXF1aXZhbGVudCB0bworICogY2FsbGluZyA8Y29kZT51YmlkaV9zZXRJbnZl
cnNlKFVCaURpKiwgVFJVRSk8L2NvZGU+IGFuZCB0aGVuCisgKiA8Y29kZT51YmlkaV9zZXRQYXJh
PC9jb2RlPiB3aXRoIDxjb2RlPnBhcmFMZXZlbCA9PSBVQklESV9SVEw8L2NvZGU+LjwvbGk+Cisg
KiA8L3VsPgorICogQWxsIGNvbWJpbmF0aW9ucyB0aGF0IGludm9sdmUgdGhlIFZpc3VhbCBSVEwg
c2NoZW1lIGFyZSB1bnN1cHBvcnRlZCBieQorICogPGNvZGU+VUJpRGk8L2NvZGU+LCBmb3IgaW5z
dGFuY2U6CisgKiA8dWw+CisgKiA8bGk+PExvZ2ljYWwgTFRSLCBWaXN1YWwgUlRMPiw8L2xpPgor
ICogPGxpPjxWaXN1YWwgUlRMLCBMb2dpY2FsIFJUTD4uPC9saT4KKyAqIDwvdWw+CisgKiA8cD5F
eGFtcGxlIG9mIHVzYWdlIG9mIHRoZSB0cmFuc2Zvcm1hdGlvbiBlbmdpbmU6PGJyPgorICogPHBy
ZT4KKyAqIFxjb2RlCisgKiBVQ2hhciB0ZXh0MVtdID0geydhJywgJ2InLCAnYycsIDB4MDYyNSwg
JzEnLCAwfTsKKyAqIFVDaGFyIHRleHQyW10gPSB7J2EnLCAnYicsICdjJywgMHgwNjI1LCAnMScs
IDB9OworICogVUVycm9yQ29kZSBlcnJvckNvZGUgPSBVX1pFUk9fRVJST1I7CisgKiAvLyBSdW4g
YSB0cmFuc2Zvcm1hdGlvbi4KKyAqIHViaWRpdHJhbnNmb3JtX3RyYW5zZm9ybShwQmlkaVRyYW5z
Zm9ybSwKKyAqICAgICAgICAgIHRleHQxLCAtMSwgdGV4dDIsIC0xLAorICogICAgICAgICAgVUJJ
RElfTFRSLCBVQklESV9WSVNVQUwsCisgKiAgICAgICAgICBVQklESV9SVEwsIFVCSURJX0xPR0lD
QUwsCisgKiAgICAgICAgICBVQklESV9NSVJST1JJTkdfT0ZGLAorICogICAgICAgICAgVV9TSEFQ
RV9ESUdJVFNfQU4yRU4gfCBVX1NIQVBFX0RJR0lUX1RZUEVfQU5fRVhURU5ERUQsCisgKiAgICAg
ICAgICAmZXJyb3JDb2RlKTsKKyAqIC8vIERvIHNvbWV0aGluZyB3aXRoIHRleHQyLgorICogIHRl
eHQyWzRdID0gJzInOworICogLy8gUnVuIGEgcmV2ZXJzZSB0cmFuc2Zvcm1hdGlvbi4KKyAqIHVi
aWRpdHJhbnNmb3JtX3RyYW5zZm9ybShwQmlkaVRyYW5zZm9ybSwKKyAqICAgICAgICAgIHRleHQy
LCAtMSwgdGV4dDEsIC0xLAorICogICAgICAgICAgVUJJRElfUlRMLCBVQklESV9MT0dJQ0FMLAor
ICogICAgICAgICAgVUJJRElfTFRSLCBVQklESV9WSVNVQUwsCisgKiAgICAgICAgICBVQklESV9N
SVJST1JJTkdfT0ZGLAorICogICAgICAgICAgVV9TSEFQRV9ESUdJVFNfRU4yQU4gfCBVX1NIQVBF
X0RJR0lUX1RZUEVfQU5fRVhURU5ERUQsCisgKiAgICAgICAgICAmZXJyb3JDb2RlKTsKKyAqXGVu
ZGNvZGUKKyAqIDwvcHJlPgorICogPC9wPgorICoKKyAqIEBwYXJhbSBwQmlEaVRyYW5zZm9ybSBB
IHBvaW50ZXIgdG8gYSA8Y29kZT5VQmlEaVRyYW5zZm9ybTwvY29kZT4gb2JqZWN0CisgKiAgICAg
ICAgYWxsb2NhdGVkIHdpdGggPGNvZGU+dWJpZGl0cmFuc2Zvcm1fb3BlbigpPC9jb2RlPiBvcgor
ICogICAgICAgIDxjb2RlPk5VTEw8L2NvZGU+LjxwPgorICogICAgICAgIFRoaXMgb2JqZWN0IHNl
cnZlcyBmb3Igb25lLXRpbWUgc2V0dXAgdG8gYW1vcnRpemUgaW5pdGlhbGl6YXRpb24KKyAqICAg
ICAgICBvdmVyaGVhZHMuIFVzZSBvZiB0aGlzIG9iamVjdCBpcyBub3QgdGhyZWFkLXNhZmUuIEFs
bCBvdGhlciB0aHJlYWRzCisgKiAgICAgICAgc2hvdWxkIGFsbG9jYXRlIGEgbmV3IDxjb2RlPlVC
aURpVHJhbnNmb3JtPC9jb2RlPiBvYmplY3QgYnkgY2FsbGluZworICogICAgICAgIDxjb2RlPnVi
aWRpdHJhbnNmb3JtX29wZW4oKTwvY29kZT4gYmVmb3JlIHVzaW5nIGl0LiBBbHRlcm5hdGl2ZWx5
LAorICogICAgICAgIGEgY2FsbGVyIGNhbiBzZXQgdGhpcyBwYXJhbWV0ZXIgdG8gPGNvZGU+TlVM
TDwvY29kZT4sIGluIHdoaWNoIGNhc2UKKyAqICAgICAgICB0aGUgb2JqZWN0IHdpbGwgYmUgYWxs
b2NhdGVkIGJ5IHRoZSBlbmdpbmUgb24gdGhlIGZseS48L3A+CisgKiBAcGFyYW0gc3JjIEEgcG9p
bnRlciB0byB0aGUgdGV4dCB0aGF0IHRoZSBCaWRpIGxheW91dCB0cmFuc2Zvcm1hdGlvbnMgd2ls
bAorICogICAgICAgIGJlIHBlcmZvcm1lZCBvbi4KKyAqICAgICAgICA8cD48c3Ryb25nPk5vdGU6
PC9zdHJvbmc+IHRoZSB0ZXh0IG11c3QgYmUgKGF0IGxlYXN0KQorICogICAgICAgIDxjb2RlPnNy
Y0xlbmd0aDwvY29kZT4gbG9uZy48L3A+CisgKiBAcGFyYW0gc3JjTGVuZ3RoIFRoZSBsZW5ndGgg
b2YgdGhlIHRleHQsIGluIG51bWJlciBvZiBVQ2hhcnMuIElmCisgKiAgICAgICAgPGNvZGU+bGVu
Z3RoID09IC0xPC9jb2RlPiB0aGVuIHRoZSB0ZXh0IG11c3QgYmUgemVyby10ZXJtaW5hdGVkLgor
ICogQHBhcmFtIGRlc3QgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBwcm9jZXNzZWQgdGV4dCBpcyB0
byBiZSBjb3BpZWQuCisgKiBAcGFyYW0gZGVzdFNpemUgVGhlIHNpemUgb2YgdGhlIDxjb2RlPmRl
c3Q8L2NvZGU+IGJ1ZmZlciwgaW4gbnVtYmVyIG9mCisgKiAgICAgICAgVUNoYXJzLiBJZiB0aGUg
PGNvZGU+VV9TSEFQRV9MRVRURVJTX1VOU0hBUEU8L2NvZGU+IG9wdGlvbiBpcyBzZXQsCisgKiAg
ICAgICAgdGhlbiB0aGUgZGVzdGluYXRpb24gbGVuZ3RoIGNvdWxkIGJlIGFzIGxhcmdlIGFzCisg
KiAgICAgICAgPGNvZGU+c3JjTGVuZ3RoICogMjwvY29kZT4uIE90aGVyd2lzZSwgdGhlIGRlc3Rp
bmF0aW9uIGxlbmd0aCB3aWxsCisgKiAgICAgICAgbm90IGV4Y2VlZCA8Y29kZT5zcmNMZW5ndGg8
L2NvZGU+LiBJZiB0aGUgY2FsbGVyIHJlc2VydmVzIHRoZSBsYXN0CisgKiAgICAgICAgcG9zaXRp
b24gZm9yIHplcm8tdGVybWluYXRpb24sIGl0IHNob3VsZCBiZSBleGNsdWRlZCBmcm9tCisgKiAg
ICAgICAgPGNvZGU+ZGVzdFNpemU8L2NvZGU+LgorICogICAgICAgIDxwPjxjb2RlPmRlc3RTaXpl
ID09IC0xPC9jb2RlPiBpcyBhbGxvd2VkIGFuZCBtYWtlcyBzZW5zZSB3aGVuCisgKiAgICAgICAg
PGNvZGU+ZGVzdDwvY29kZT4gd2FzIGhvbGRzIHNvbWUgbWVhbmluZ2Z1bCB2YWx1ZSwgZS5nLiB0
aGF0IG9mCisgKiAgICAgICAgPGNvZGU+c3JjPC9jb2RlPi4gSW4gdGhpcyBjYXNlIDxjb2RlPmRl
c3Q8L2NvZGU+IG11c3QgYmUKKyAqICAgICAgICB6ZXJvLXRlcm1pbmF0ZWQuPC9wPgorICogQHBh
cmFtIGluUGFyYUxldmVsIEEgYmFzZSBlbWJlZGRpbmcgbGV2ZWwgb2YgdGhlIGlucHV0IGFzIGRl
ZmluZWQgaW4KKyAqICAgICAgICA8Y29kZT51YmlkaV9zZXRQYXJhPC9jb2RlPiBkb2N1bWVudGF0
aW9uIGZvciB0aGUKKyAqICAgICAgICA8Y29kZT5wYXJhTGV2ZWw8L2NvZGU+IHBhcmFtZXRlci4K
KyAqIEBwYXJhbSBpbk9yZGVyIEFuIG9yZGVyIG9mIHRoZSBpbnB1dCwgd2hpY2ggY2FuIGJlIG9u
ZSBvZiB0aGUKKyAqICAgICAgICA8Y29kZT5VQmlEaU9yZGVyPC9jb2RlPiB2YWx1ZXMuCisgKiBA
cGFyYW0gb3V0UGFyYUxldmVsIEEgYmFzZSBlbWJlZGRpbmcgbGV2ZWwgb2YgdGhlIG91dHB1dCBh
cyBkZWZpbmVkIGluCisgKiAgICAgICAgPGNvZGU+dWJpZGlfc2V0UGFyYTwvY29kZT4gZG9jdW1l
bnRhdGlvbiBmb3IgdGhlCisgKiAgICAgICAgPGNvZGU+cGFyYUxldmVsPC9jb2RlPiBwYXJhbWV0
ZXIuCisgKiBAcGFyYW0gb3V0T3JkZXIgQW4gb3JkZXIgb2YgdGhlIG91dHB1dCwgd2hpY2ggY2Fu
IGJlIG9uZSBvZiB0aGUKKyAqICAgICAgICA8Y29kZT5VQmlEaU9yZGVyPC9jb2RlPiB2YWx1ZXMu
CisgKiBAcGFyYW0gZG9NaXJyb3JpbmcgSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRvIHBlcmZv
cm0gY2hhcmFjdGVyIG1pcnJvcmluZywKKyAqICAgICAgICBhbmQgY2FuIGFjY2VwdCBvbmUgb2Yg
dGhlIDxjb2RlPlVCaURpTWlycm9yaW5nPC9jb2RlPiB2YWx1ZXMuCisgKiBAcGFyYW0gc2hhcGlu
Z09wdGlvbnMgQXJhYmljIGRpZ2l0IGFuZCBsZXR0ZXIgc2hhcGluZyBvcHRpb25zIGRlZmluZWQg
aW4gdGhlCisgKiAgICAgICAgdXNoYXBlLmggZG9jdW1lbnRhdGlvbi4KKyAqICAgICAgICA8cD48
c3Ryb25nPk5vdGU6PC9zdHJvbmc+IERpcmVjdGlvbiBpbmRpY2F0b3Igb3B0aW9ucyBhcmUgY29t
cHV0ZWQgYnkKKyAqICAgICAgICB0aGUgdHJhbnNmb3JtYXRpb24gZW5naW5lIGJhc2VkIG9uIHRo
ZSBlZmZlY3RpdmUgb3JkZXJpbmcgc2NoZW1lcywgc28KKyAqICAgICAgICB1c2VyLWRlZmluZWQg
ZGlyZWN0aW9uIGluZGljYXRvcnMgd2lsbCBiZSBpZ25vcmVkLjwvcD4KKyAqIEBwYXJhbSBwRXJy
b3JDb2RlIEEgcG9pbnRlciB0byBhbiBlcnJvciBjb2RlIHZhbHVlLgorICoKKyAqIEByZXR1cm4g
VGhlIGRlc3RpbmF0aW9uIGxlbmd0aCwgaS5lLiB0aGUgbnVtYmVyIG9mIFVDaGFycyB3cml0dGVu
IHRvCisgKiAgICAgICAgIDxjb2RlPmRlc3Q8L2NvZGU+LiBJZiB0aGUgdHJhbnNmb3JtYXRpb24g
ZmFpbHMsIHRoZSByZXR1cm4gdmFsdWUKKyAqICAgICAgICAgd2lsbCBiZSAwIChhbmQgdGhlIGVy
cm9yIGNvZGUgd2lsbCBiZSB3cml0dGVuIHRvCisgKiAgICAgICAgIDxjb2RlPnBFcnJvckNvZGU8
L2NvZGU+KS4KKyAqCisgKiBAc2VlIFVCaURpTGV2ZWwKKyAqIEBzZWUgVUJpRGlPcmRlcgorICog
QHNlZSBVQmlEaU1pcnJvcmluZworICogQHNlZSB1YmlkaV9zZXRQYXJhCisgKiBAc2VlIHVfc2hh
cGVBcmFiaWMKKyAqIEBzdGFibGUgSUNVIDU4CisgKi8KK1VfU1RBQkxFIHVpbnQzMl90IFVfRVhQ
T1JUMgordWJpZGl0cmFuc2Zvcm1fdHJhbnNmb3JtKFVCaURpVHJhbnNmb3JtICpwQmlEaVRyYW5z
Zm9ybSwKKyAgICAgICAgICAgIGNvbnN0IFVDaGFyICpzcmMsIGludDMyX3Qgc3JjTGVuZ3RoLAor
ICAgICAgICAgICAgVUNoYXIgKmRlc3QsIGludDMyX3QgZGVzdFNpemUsCisgICAgICAgICAgICBV
QmlEaUxldmVsIGluUGFyYUxldmVsLCBVQmlEaU9yZGVyIGluT3JkZXIsCisgICAgICAgICAgICBV
QmlEaUxldmVsIG91dFBhcmFMZXZlbCwgVUJpRGlPcmRlciBvdXRPcmRlciwKKyAgICAgICAgICAg
IFVCaURpTWlycm9yaW5nIGRvTWlycm9yaW5nLCB1aW50MzJfdCBzaGFwaW5nT3B0aW9ucywKKyAg
ICAgICAgICAgIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOworCisvKioKKyAqIEFsbG9jYXRlcyBh
IDxjb2RlPlVCaURpVHJhbnNmb3JtPC9jb2RlPiBvYmplY3QuIFRoaXMgb2JqZWN0IGNhbiBiZSBy
ZXVzZWQsCisgKiBlLmcuIHdpdGggZGlmZmVyZW50IG9yZGVyaW5nIHNjaGVtZXMsIG1pcnJvcmlu
ZyBvciBzaGFwaW5nIG9wdGlvbnMuPHA+CisgKiA8c3Ryb25nPk5vdGU6PC9zdHJvbmc+VGhlIG9i
amVjdCBjYW4gb25seSBiZSByZXVzZWQgaW4gdGhlIHNhbWUgdGhyZWFkLgorICogQWxsIG90aGVy
IHRocmVhZHMgc2hvdWxkIGFsbG9jYXRlIGEgbmV3IDxjb2RlPlVCaURpVHJhbnNmb3JtPC9jb2Rl
PiBvYmplY3QKKyAqIGJlZm9yZSB1c2luZyBpdC48cD4KKyAqIEV4YW1wbGUgb2YgdXNhZ2U6PHA+
CisgKiA8cHJlPgorICogXGNvZGUKKyAqIFVFcnJvckNvZGUgZXJyb3JDb2RlID0gVV9aRVJPX0VS
Uk9SOworICogLy8gT3BlbiBhIG5ldyBVQmlEaVRyYW5zZm9ybS4KKyAqIFVCaURpVHJhbnNmb3Jt
KiB0cmFuc2Zvcm0gPSB1YmlkaXRyYW5zZm9ybV9vcGVuKCZlcnJvckNvZGUpOworICogLy8gUnVu
IGEgdHJhbnNmb3JtYXRpb24uCisgKiB1YmlkaXRyYW5zZm9ybV90cmFuc2Zvcm0odHJhbnNmb3Jt
LAorICogICAgICAgICAgdGV4dDEsIC0xLCB0ZXh0MiwgLTEsCisgKiAgICAgICAgICBVQklESV9S
VEwsIFVCSURJX0xPR0lDQUwsCisgKiAgICAgICAgICBVQklESV9MVFIsIFVCSURJX1ZJU1VBTCwK
KyAqICAgICAgICAgIFVCSURJX01JUlJPUklOR19PTiwKKyAqICAgICAgICAgIFVfU0hBUEVfRElH
SVRTX0VOMkFOLAorICogICAgICAgICAgJmVycm9yQ29kZSk7CisgKiAvLyBEbyBzb21ldGhpbmcg
d2l0aCB0aGUgb3V0cHV0IHRleHQgYW5kIGludm9rZSBhbm90aGVyIHRyYW5zZm9ybWF0aW9uIHVz
aW5nCisgKiAvLyAgIHRoYXQgdGV4dCBhcyBpbnB1dC4KKyAqIHViaWRpdHJhbnNmb3JtX3RyYW5z
Zm9ybSh0cmFuc2Zvcm0sCisgKiAgICAgICAgICB0ZXh0MiwgLTEsIHRleHQzLCAtMSwKKyAqICAg
ICAgICAgIFVCSURJX0xUUiwgVUJJRElfVklTVUFMLAorICogICAgICAgICAgVUJJRElfUlRMLCBV
QklESV9WSVNVQUwsCisgKiAgICAgICAgICBVQklESV9NSVJST1JJTkdfT04sCisgKiAgICAgICAg
ICAwLCAmZXJyb3JDb2RlKTsKKyAqXGVuZGNvZGUKKyAqIDwvcHJlPgorICogPHA+CisgKiBUaGUg
PGNvZGU+VUJpRGlUcmFuc2Zvcm08L2NvZGU+IG9iamVjdCBtdXN0IGJlIGRlYWxsb2NhdGVkIGJ5
IGNhbGxpbmcKKyAqIDxjb2RlPnViaWRpdHJhbnNmb3JtX2Nsb3NlKCk8L2NvZGU+LgorICoKKyAq
IEByZXR1cm4gQW4gZW1wdHkgPGNvZGU+VUJpRGlUcmFuc2Zvcm08L2NvZGU+IG9iamVjdC4KKyAq
IEBzdGFibGUgSUNVIDU4CisgKi8KK1VfU1RBQkxFIFVCaURpVHJhbnNmb3JtKiBVX0VYUE9SVDIK
K3ViaWRpdHJhbnNmb3JtX29wZW4oVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7CisKKy8qKgorICog
RGVhbGxvY2F0ZXMgdGhlIGdpdmVuIDxjb2RlPlVCaURpVHJhbnNmb3JtPC9jb2RlPiBvYmplY3Qu
CisgKiBAc3RhYmxlIElDVSA1OAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMgordWJpZGl0
cmFuc2Zvcm1fY2xvc2UoVUJpRGlUcmFuc2Zvcm0gKnBCaWRpVHJhbnNmb3JtKTsKKworI2lmIFVf
U0hPV19DUExVU1BMVVNfQVBJCisKK1VfTkFNRVNQQUNFX0JFR0lOCisKKy8qKgorICogXGNsYXNz
IExvY2FsVUJpRGlUcmFuc2Zvcm1Qb2ludGVyCisgKiAiU21hcnQgcG9pbnRlciIgY2xhc3MsIGNs
b3NlcyBhIFVCaURpVHJhbnNmb3JtIHZpYSB1YmlkaXRyYW5zZm9ybV9jbG9zZSgpLgorICogRm9y
IG1vc3QgbWV0aG9kcyBzZWUgdGhlIExvY2FsUG9pbnRlckJhc2UgYmFzZSBjbGFzcy4KKyAqCisg
KiBAc2VlIExvY2FsUG9pbnRlckJhc2UKKyAqIEBzZWUgTG9jYWxQb2ludGVyCisgKiBAc3RhYmxl
IElDVSA1OAorICovCitVX0RFRklORV9MT0NBTF9PUEVOX1BPSU5URVIoTG9jYWxVQmlEaVRyYW5z
Zm9ybVBvaW50ZXIsIFVCaURpVHJhbnNmb3JtLCB1YmlkaXRyYW5zZm9ybV9jbG9zZSk7CisKK1Vf
TkFNRVNQQUNFX0VORAorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L2ljdS91bmljb2RlL3VjYWwuaCBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdWNhbC5oCmluZGV4
IGZiN2MzODdjMmQ3YTU0MGVmY2UzYTAxYjRmMDBlMmVlMWE2ZTIzNDQuLmYzMWEyNTczMmRjZmM2
ZmEyZGM1MmY5Yjc1NzM0OTdjYWY2ODVkZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvaWN1L3Vu
aWNvZGUvdWNhbC5oCisrKyBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdWNhbC5oCkBAIC0xMDUs
NyArMTA1LDcgQEAKICAqIDxwPgogICogPHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBmb3Igc29tZSBu
b24tR3JlZ29yaWFuIGNhbGVuZGFycywgZGlmZmVyZW50CiAgKiBmaWVsZHMgbWF5IGJlIG5lY2Vz
c2FyeSBmb3IgY29tcGxldGUgZGlzYW1iaWd1YXRpb24uIEZvciBleGFtcGxlLCBhIGZ1bGwKLSAq
IHNwZWNpZmljYXRpb24gb2YgdGhlIGhpc3RvcmlhbCBBcmFiaWMgYXN0cm9ub21pY2FsIGNhbGVu
ZGFyIHJlcXVpcmVzIHllYXIsCisgKiBzcGVjaWZpY2F0aW9uIG9mIHRoZSBoaXN0b3JpY2FsIEFy
YWJpYyBhc3Ryb25vbWljYWwgY2FsZW5kYXIgcmVxdWlyZXMgeWVhciwKICAqIG1vbnRoLCBkYXkt
b2YtbW9udGggPGVtPmFuZDwvZW0+IGRheS1vZi13ZWVrIGluIHNvbWUgY2FzZXMuCiAgKgogICog
PHA+CkBAIC0xNTcsNiArMTU3LDcgQEAKIAogLyoqCiAgKiBUaGUgdGltZSB6b25lIElEIHJlc2Vy
dmVkIGZvciB1bmtub3duIHRpbWUgem9uZS4KKyAqIEl0IGJlaGF2ZXMgbGlrZSB0aGUgR01UL1VU
QyB0aW1lIHpvbmUgYnV0IGhhcyB0aGUgc3BlY2lhbCBJRCAiRXRjL1Vua25vd24iLgogICogQHN0
YWJsZSBJQ1UgNC44CiAgKi8KICNkZWZpbmUgVUNBTF9VTktOT1dOX1pPTkVfSUQgIkV0Yy9Vbmtu
b3duIgpAQCAtNjIwLDggKzYyMSwxMyBAQCB1Y2FsX29wZW5Db3VudHJ5VGltZVpvbmVzKGNvbnN0
IGNoYXIqIGNvdW50cnksIFVFcnJvckNvZGUqIGVjKTsKIAogLyoqCiAgKiBSZXR1cm4gdGhlIGRl
ZmF1bHQgdGltZSB6b25lLiBUaGUgZGVmYXVsdCBpcyBkZXRlcm1pbmVkIGluaXRpYWxseQotICog
YnkgcXVlcnlpbmcgdGhlIGhvc3Qgb3BlcmF0aW5nIHN5c3RlbS4gSXQgbWF5IGJlIGNoYW5nZWQg
d2l0aAotICogdWNhbF9zZXREZWZhdWx0VGltZVpvbmUoKSBvciB3aXRoIHRoZSBDKysgVGltZVpv
bmUgQVBJLgorICogYnkgcXVlcnlpbmcgdGhlIGhvc3Qgb3BlcmF0aW5nIHN5c3RlbS4gSWYgdGhl
IGhvc3Qgc3lzdGVtIGRldGVjdGlvbgorICogcm91dGluZXMgZmFpbCwgb3IgaWYgdGhleSBzcGVj
aWZ5IGEgVGltZVpvbmUgb3IgVGltZVpvbmUgb2Zmc2V0CisgKiB3aGljaCBpcyBub3QgcmVjb2du
aXplZCwgdGhlbiB0aGUgc3BlY2lhbCBUaW1lWm9uZSAiRXRjL1Vua25vd24iCisgKiBpcyByZXR1
cm5lZC4KKyAqIAorICogVGhlIGRlZmF1bHQgbWF5IGJlIGNoYW5nZWQgd2l0aCBgdWNhbF9zZXRE
ZWZhdWx0VGltZVpvbmUoKWAgb3Igd2l0aAorICogdGhlIEMrKyBUaW1lWm9uZSBBUEksIGBUaW1l
Wm9uZTo6YWRvcHREZWZhdWx0KFRpbWVab25lKilgLgogICoKICAqIEBwYXJhbSByZXN1bHQgQSBi
dWZmZXIgdG8gcmVjZWl2ZSB0aGUgcmVzdWx0LCBvciBOVUxMCiAgKgpAQCAtNjMxLDcgKzYzNyw5
IEBAIHVjYWxfb3BlbkNvdW50cnlUaW1lWm9uZXMoY29uc3QgY2hhciogY291bnRyeSwgVUVycm9y
Q29kZSogZWMpOwogICoKICAqIEByZXR1cm4gVGhlIHJlc3VsdCBzdHJpbmcgbGVuZ3RoLCBub3Qg
aW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZwogICogbnVsbAotICoKKyAqIAorICogQHNlZSAjVUNB
TF9VTktOT1dOX1pPTkVfSUQKKyAqIAogICogQHN0YWJsZSBJQ1UgMi42CiAgKi8KIFVfU1RBQkxF
IGludDMyX3QgVV9FWFBPUlQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3Vj
aGFyLmggYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3VjaGFyLmgKaW5kZXggNmQzMTA4M2U2NmVl
MGRlMDMyNTk3YWExZDI4YzIyOTIwNmNiZDhlNy4uZDcwYzk2NGUzOGU1Yjg1ZDUxYzlkMjk5Y2Q2
ZmE4NjYzNTBlNmNmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9pY3UvdW5pY29kZS91Y2hhci5o
CisrKyBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdWNoYXIuaApAQCAtMjcsNiArMjcsMjQgQEAK
IAogI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCiAjaW5jbHVkZSAidW5pY29kZS9zdHJpbmdv
cHRpb25zLmgiCisjaW5jbHVkZSAidW5pY29kZS91Y3BtYXAuaCIKKworI2lmICFkZWZpbmVkKFVT
RVRfREVGSU5FRCkgJiYgIWRlZmluZWQoVV9JTl9ET1hZR0VOKQorCisjZGVmaW5lIFVTRVRfREVG
SU5FRAorCisvKioKKyAqIFVTZXQgaXMgdGhlIEMgQVBJIHR5cGUgY29ycmVzcG9uZGluZyB0byBD
KysgY2xhc3MgVW5pY29kZVNldC4KKyAqIEl0IGlzIGZvcndhcmQtZGVjbGFyZWQgaGVyZSB0byBh
dm9pZCBpbmNsdWRpbmcgdW5pY29kZS91c2V0LmggZmlsZSBpZiByZWxhdGVkCisgKiBBUElzIGFy
ZSBub3QgdXNlZC4KKyAqCisgKiBAc2VlIHVjbnZfZ2V0VW5pY29kZVNldAorICogQHN0YWJsZSBJ
Q1UgMi40CisgKi8KK3R5cGVkZWYgc3RydWN0IFVTZXQgVVNldDsKKworI2VuZGlmCisKIAogVV9D
REVDTF9CRUdJTgogCkBAIC00Miw3ICs2MCw3IEBAIFVfQ0RFQ0xfQkVHSU4KICAqIEBzZWUgdV9n
ZXRVbmljb2RlVmVyc2lvbgogICogQHN0YWJsZSBJQ1UgMi4wCiAgKi8KLSNkZWZpbmUgVV9VTklD
T0RFX1ZFUlNJT04gIjExLjAiCisjZGVmaW5lIFVfVU5JQ09ERV9WRVJTSU9OICIxMi4xIgogCiAv
KioKICAqIFxmaWxlCkBAIC02MSw2ICs3OSwxOCBAQCBVX0NERUNMX0JFR0lOCiAgKiAiQWJvdXQg
dGhlIFVuaWNvZGUgQ2hhcmFjdGVyIERhdGFiYXNlIiAoaHR0cDovL3d3dy51bmljb2RlLm9yZy91
Y2QvKQogICogYW5kIHRoZSBJQ1UgVXNlciBHdWlkZSBjaGFwdGVyIG9uIFByb3BlcnRpZXMgKGh0
dHA6Ly9pY3UtcHJvamVjdC5vcmcvdXNlcmd1aWRlL3Byb3BlcnRpZXMuaHRtbCkuCiAgKgorICog
TWFueSBwcm9wZXJ0aWVzIGFyZSBhY2Nlc3NpYmxlIHZpYSBnZW5lcmljIGZ1bmN0aW9ucyB0aGF0
IHRha2UgYSBVUHJvcGVydHkgc2VsZWN0b3IuCisgKiAtIHVfaGFzQmluYXJ5UHJvcGVydHkoKSBy
ZXR1cm5zIGEgYmluYXJ5IHZhbHVlIChUUlVFL0ZBTFNFKSBwZXIgcHJvcGVydHkgYW5kIGNvZGUg
cG9pbnQuCisgKiAtIHVfZ2V0SW50UHJvcGVydHlWYWx1ZSgpIHJldHVybnMgYW4gaW50ZWdlciB2
YWx1ZSBwZXIgcHJvcGVydHkgYW5kIGNvZGUgcG9pbnQuCisgKiAgIEZvciBlYWNoIHN1cHBvcnRl
ZCBlbnVtZXJhdGVkIG9yIGNhdGFsb2cgcHJvcGVydHksIHRoZXJlIGlzCisgKiAgIGFuIGVudW0g
dHlwZSBmb3IgYWxsIG9mIHRoZSBwcm9wZXJ0eSdzIHZhbHVlcywgYW5kCisgKiAgIHVfZ2V0SW50
UHJvcGVydHlWYWx1ZSgpIHJldHVybnMgdGhlIG51bWVyaWMgdmFsdWVzIG9mIHRob3NlIGNvbnN0
YW50cy4KKyAqIC0gdV9nZXRCaW5hcnlQcm9wZXJ0eVNldCgpIHJldHVybnMgYSBzZXQgZm9yIGVh
Y2ggSUNVLXN1cHBvcnRlZCBiaW5hcnkgcHJvcGVydHkgd2l0aAorICogICBhbGwgY29kZSBwb2lu
dHMgZm9yIHdoaWNoIHRoZSBwcm9wZXJ0eSBpcyB0cnVlLgorICogLSB1X2dldEludFByb3BlcnR5
TWFwKCkgcmV0dXJucyBhIG1hcCBmb3IgZWFjaAorICogICBJQ1Utc3VwcG9ydGVkIGVudW1lcmF0
ZWQvY2F0YWxvZy9pbnQtdmFsdWVkIHByb3BlcnR5IHdoaWNoCisgKiAgIG1hcHMgYWxsIFVuaWNv
ZGUgY29kZSBwb2ludHMgdG8gdGhlaXIgdmFsdWVzIGZvciB0aGF0IHByb3BlcnR5LgorICoKICAq
IE1hbnkgZnVuY3Rpb25zIGFyZSBkZXNpZ25lZCB0byBtYXRjaCBqYXZhLmxhbmcuQ2hhcmFjdGVy
IGZ1bmN0aW9ucy4KICAqIFNlZSB0aGUgaW5kaXZpZHVhbCBmdW5jdGlvbiBkb2N1bWVudGF0aW9u
LAogICogYW5kIHNlZSB0aGUgSkRLIDEuNCBqYXZhLmxhbmcuQ2hhcmFjdGVyIGRvY3VtZW50YXRp
b24KQEAgLTU0NiwxMiArNTc2LDM0IEBAIHR5cGVkZWYgZW51bSBVUHJvcGVydHkgewogICAgICAg
ICAoaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyOS8pCiAgICAgICAgIFJldHVybnMg
VUJpZGlQYWlyZWRCcmFja2V0VHlwZSB2YWx1ZXMuIEBzdGFibGUgSUNVIDUyICovCiAgICAgVUNI
QVJfQklESV9QQUlSRURfQlJBQ0tFVF9UWVBFPTB4MTAxNSwKKyAgICAvKioKKyAgICAgKiBFbnVt
ZXJhdGVkIHByb3BlcnR5IEluZGljX1Bvc2l0aW9uYWxfQ2F0ZWdvcnkuCisgICAgICogTmV3IGlu
IFVuaWNvZGUgNi4wIGFzIHByb3Zpc2lvbmFsIHByb3BlcnR5IEluZGljX01hdHJhX0NhdGVnb3J5
OworICAgICAqIHJlbmFtZWQgYW5kIGNoYW5nZWQgdG8gaW5mb3JtYXRpdmUgaW4gVW5pY29kZSA4
LjAuCisgICAgICogU2VlIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjQ0LyNJbmRp
Y1Bvc2l0aW9uYWxDYXRlZ29yeS50eHQKKyAgICAgKiBAc3RhYmxlIElDVSA2MworICAgICAqLwor
ICAgIFVDSEFSX0lORElDX1BPU0lUSU9OQUxfQ0FURUdPUlk9MHgxMDE2LAorICAgIC8qKgorICAg
ICAqIEVudW1lcmF0ZWQgcHJvcGVydHkgSW5kaWNfU3lsbGFiaWNfQ2F0ZWdvcnkuCisgICAgICog
TmV3IGluIFVuaWNvZGUgNi4wIGFzIHByb3Zpc2lvbmFsOyBpbmZvcm1hdGl2ZSBzaW5jZSBVbmlj
b2RlIDguMC4KKyAgICAgKiBTZWUgaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyNDQv
I0luZGljU3lsbGFiaWNDYXRlZ29yeS50eHQKKyAgICAgKiBAc3RhYmxlIElDVSA2MworICAgICAq
LworICAgIFVDSEFSX0lORElDX1NZTExBQklDX0NBVEVHT1JZPTB4MTAxNywKKyAgICAvKioKKyAg
ICAgKiBFbnVtZXJhdGVkIHByb3BlcnR5IFZlcnRpY2FsX09yaWVudGF0aW9uLgorICAgICAqIFVz
ZWQgZm9yIFVBWCAjNTAgVW5pY29kZSBWZXJ0aWNhbCBUZXh0IExheW91dCAoaHR0cHM6Ly93d3cu
dW5pY29kZS5vcmcvcmVwb3J0cy90cjUwLykuCisgICAgICogTmV3IGFzIGEgVUNEIHByb3BlcnR5
IGluIFVuaWNvZGUgMTAuMC4KKyAgICAgKiBAc3RhYmxlIElDVSA2MworICAgICAqLworICAgIFVD
SEFSX1ZFUlRJQ0FMX09SSUVOVEFUSU9OPTB4MTAxOCwKICNpZm5kZWYgVV9ISURFX0RFUFJFQ0FU
RURfQVBJCiAgICAgLyoqCiAgICAgICogT25lIG1vcmUgdGhhbiB0aGUgbGFzdCBjb25zdGFudCBm
b3IgZW51bWVyYXRlZC9pbnRlZ2VyIFVuaWNvZGUgcHJvcGVydGllcy4KICAgICAgKiBAZGVwcmVj
YXRlZCBJQ1UgNTggVGhlIG51bWVyaWMgdmFsdWUgbWF5IGNoYW5nZSBvdmVyIHRpbWUsIHNlZSBJ
Q1UgdGlja2V0ICMxMjQyMC4KICAgICAgKi8KLSAgICBVQ0hBUl9JTlRfTElNSVQ9MHgxMDE2LAor
ICAgIFVDSEFSX0lOVF9MSU1JVD0weDEwMTksCiAjZW5kaWYgIC8vIFVfSElERV9ERVBSRUNBVEVE
X0FQSQogCiAgICAgLyoqIEJpdG1hc2sgcHJvcGVydHkgR2VuZXJhbF9DYXRlZ29yeV9NYXNrLgpA
QCAtMTcxNSw2ICsxNzY3LDI3IEBAIGVudW0gVUJsb2NrQ29kZSB7CiAgICAgLyoqIEBzdGFibGUg
SUNVIDYyICovCiAgICAgVUJMT0NLX1NPR0RJQU4gPSAyOTEsIC8qWzEwRjMwXSovCiAKKyAgICAv
LyBOZXcgYmxvY2tzIGluIFVuaWNvZGUgMTIuMAorCisgICAgLyoqIEBzdGFibGUgSUNVIDY0ICov
CisgICAgVUJMT0NLX0VHWVBUSUFOX0hJRVJPR0xZUEhfRk9STUFUX0NPTlRST0xTID0gMjkyLCAv
KlsxMzQzMF0qLworICAgIC8qKiBAc3RhYmxlIElDVSA2NCAqLworICAgIFVCTE9DS19FTFlNQUlD
ID0gMjkzLCAvKlsxMEZFMF0qLworICAgIC8qKiBAc3RhYmxlIElDVSA2NCAqLworICAgIFVCTE9D
S19OQU5ESU5BR0FSSSA9IDI5NCwgLypbMTE5QTBdKi8KKyAgICAvKiogQHN0YWJsZSBJQ1UgNjQg
Ki8KKyAgICBVQkxPQ0tfTllJQUtFTkdfUFVBQ0hVRV9ITU9ORyA9IDI5NSwgLypbMUUxMDBdKi8K
KyAgICAvKiogQHN0YWJsZSBJQ1UgNjQgKi8KKyAgICBVQkxPQ0tfT1RUT01BTl9TSVlBUV9OVU1C
RVJTID0gMjk2LCAvKlsxRUQwMF0qLworICAgIC8qKiBAc3RhYmxlIElDVSA2NCAqLworICAgIFVC
TE9DS19TTUFMTF9LQU5BX0VYVEVOU0lPTiA9IDI5NywgLypbMUIxMzBdKi8KKyAgICAvKiogQHN0
YWJsZSBJQ1UgNjQgKi8KKyAgICBVQkxPQ0tfU1lNQk9MU19BTkRfUElDVE9HUkFQSFNfRVhURU5E
RURfQSA9IDI5OCwgLypbMUZBNzBdKi8KKyAgICAvKiogQHN0YWJsZSBJQ1UgNjQgKi8KKyAgICBV
QkxPQ0tfVEFNSUxfU1VQUExFTUVOVCA9IDI5OSwgLypbMTFGQzBdKi8KKyAgICAvKiogQHN0YWJs
ZSBJQ1UgNjQgKi8KKyAgICBVQkxPQ0tfV0FOQ0hPID0gMzAwLCAvKlsxRTJDMF0qLworCiAjaWZu
ZGVmIFVfSElERV9ERVBSRUNBVEVEX0FQSQogICAgIC8qKgogICAgICAqIE9uZSBtb3JlIHRoYW4g
dGhlIGhpZ2hlc3Qgbm9ybWFsIFVCbG9ja0NvZGUgdmFsdWUuCkBAIC0xNzIyLDcgKzE3OTUsNyBA
QCBlbnVtIFVCbG9ja0NvZGUgewogICAgICAqCiAgICAgICogQGRlcHJlY2F0ZWQgSUNVIDU4IFRo
ZSBudW1lcmljIHZhbHVlIG1heSBjaGFuZ2Ugb3ZlciB0aW1lLCBzZWUgSUNVIHRpY2tldCAjMTI0
MjAuCiAgICAgICovCi0gICAgVUJMT0NLX0NPVU5UID0gMjkyLAorICAgIFVCTE9DS19DT1VOVCA9
IDMwMSwKICNlbmRpZiAgLy8gVV9ISURFX0RFUFJFQ0FURURfQVBJCiAKICAgICAvKiogQHN0YWJs
ZSBJQ1UgMi4wICovCkBAIC0yMzIwLDYgKzIzOTMsMTYxIEBAIHR5cGVkZWYgZW51bSBVSGFuZ3Vs
U3lsbGFibGVUeXBlIHsKICNlbmRpZiAgLy8gVV9ISURFX0RFUFJFQ0FURURfQVBJCiB9IFVIYW5n
dWxTeWxsYWJsZVR5cGU7CiAKKy8qKgorICogSW5kaWMgUG9zaXRpb25hbCBDYXRlZ29yeSBjb25z
dGFudHMuCisgKgorICogQHNlZSBVQ0hBUl9JTkRJQ19QT1NJVElPTkFMX0NBVEVHT1JZCisgKiBA
c3RhYmxlIElDVSA2MworICovCit0eXBlZGVmIGVudW0gVUluZGljUG9zaXRpb25hbENhdGVnb3J5
IHsKKyAgICAvKgorICAgICAqIE5vdGU6IFVJbmRpY1Bvc2l0aW9uYWxDYXRlZ29yeSBjb25zdGFu
dHMgYXJlIHBhcnNlZCBieSBwcmVwYXJzZXVjZC5weS4KKyAgICAgKiBJdCBtYXRjaGVzIGxpbmVz
IGxpa2UKKyAgICAgKiAgICAgVV9JTlBDXzxVbmljb2RlIEluZGljX1Bvc2l0aW9uYWxfQ2F0ZWdv
cnkgdmFsdWUgbmFtZT4KKyAgICAgKi8KKworICAgIC8qKiBAc3RhYmxlIElDVSA2MyAqLworICAg
IFVfSU5QQ19OQSwKKyAgICAvKiogQHN0YWJsZSBJQ1UgNjMgKi8KKyAgICBVX0lOUENfQk9UVE9N
LAorICAgIC8qKiBAc3RhYmxlIElDVSA2MyAqLworICAgIFVfSU5QQ19CT1RUT01fQU5EX0xFRlQs
CisgICAgLyoqIEBzdGFibGUgSUNVIDYzICovCisgICAgVV9JTlBDX0JPVFRPTV9BTkRfUklHSFQs
CisgICAgLyoqIEBzdGFibGUgSUNVIDYzICovCisgICAgVV9JTlBDX0xFRlQsCisgICAgLyoqIEBz
dGFibGUgSUNVIDYzICovCisgICAgVV9JTlBDX0xFRlRfQU5EX1JJR0hULAorICAgIC8qKiBAc3Rh
YmxlIElDVSA2MyAqLworICAgIFVfSU5QQ19PVkVSU1RSVUNLLAorICAgIC8qKiBAc3RhYmxlIElD
VSA2MyAqLworICAgIFVfSU5QQ19SSUdIVCwKKyAgICAvKiogQHN0YWJsZSBJQ1UgNjMgKi8KKyAg
ICBVX0lOUENfVE9QLAorICAgIC8qKiBAc3RhYmxlIElDVSA2MyAqLworICAgIFVfSU5QQ19UT1Bf
QU5EX0JPVFRPTSwKKyAgICAvKiogQHN0YWJsZSBJQ1UgNjMgKi8KKyAgICBVX0lOUENfVE9QX0FO
RF9CT1RUT01fQU5EX1JJR0hULAorICAgIC8qKiBAc3RhYmxlIElDVSA2MyAqLworICAgIFVfSU5Q
Q19UT1BfQU5EX0xFRlQsCisgICAgLyoqIEBzdGFibGUgSUNVIDYzICovCisgICAgVV9JTlBDX1RP
UF9BTkRfTEVGVF9BTkRfUklHSFQsCisgICAgLyoqIEBzdGFibGUgSUNVIDYzICovCisgICAgVV9J
TlBDX1RPUF9BTkRfUklHSFQsCisgICAgLyoqIEBzdGFibGUgSUNVIDYzICovCisgICAgVV9JTlBD
X1ZJU1VBTF9PUkRFUl9MRUZULAorfSBVSW5kaWNQb3NpdGlvbmFsQ2F0ZWdvcnk7CisKKy8qKgor
ICogSW5kaWMgU3lsbGFiaWMgQ2F0ZWdvcnkgY29uc3RhbnRzLgorICoKKyAqIEBzZWUgVUNIQVJf
SU5ESUNfU1lMTEFCSUNfQ0FURUdPUlkKKyAqIEBzdGFibGUgSUNVIDYzCisgKi8KK3R5cGVkZWYg
ZW51bSBVSW5kaWNTeWxsYWJpY0NhdGVnb3J5IHsKKyAgICAvKgorICAgICAqIE5vdGU6IFVJbmRp
Y1N5bGxhYmljQ2F0ZWdvcnkgY29uc3RhbnRzIGFyZSBwYXJzZWQgYnkgcHJlcGFyc2V1Y2QucHku
CisgICAgICogSXQgbWF0Y2hlcyBsaW5lcyBsaWtlCisgICAgICogICAgIFVfSU5TQ188VW5pY29k
ZSBJbmRpY19TeWxsYWJpY19DYXRlZ29yeSB2YWx1ZSBuYW1lPgorICAgICAqLworCisgICAgLyoq
IEBzdGFibGUgSUNVIDYzICovCisgICAgVV9JTlNDX09USEVSLAorICAgIC8qKiBAc3RhYmxlIElD
VSA2MyAqLworICAgIFVfSU5TQ19BVkFHUkFIQSwKKyAgICAvKiogQHN0YWJsZSBJQ1UgNjMgKi8K
KyAgICBVX0lOU0NfQklORFUsCisgICAgLyoqIEBzdGFibGUgSUNVIDYzICovCisgICAgVV9JTlND
X0JSQUhNSV9KT0lOSU5HX05VTUJFUiwKKyAgICAvKiogQHN0YWJsZSBJQ1UgNjMgKi8KKyAgICBV
X0lOU0NfQ0FOVElMTEFUSU9OX01BUkssCisgICAgLyoqIEBzdGFibGUgSUNVIDYzICovCisgICAg
VV9JTlNDX0NPTlNPTkFOVCwKKyAgICAvKiogQHN0YWJsZSBJQ1UgNjMgKi8KKyAgICBVX0lOU0Nf
Q09OU09OQU5UX0RFQUQsCisgICAgLyoqIEBzdGFibGUgSUNVIDYzICovCisgICAgVV9JTlNDX0NP
TlNPTkFOVF9GSU5BTCwKKyAgICAvKiogQHN0YWJsZSBJQ1UgNjMgKi8KKyAgICBVX0lOU0NfQ09O
U09OQU5UX0hFQURfTEVUVEVSLAorICAgIC8qKiBAc3RhYmxlIElDVSA2MyAqLworICAgIFVfSU5T
Q19DT05TT05BTlRfSU5JVElBTF9QT1NURklYRUQsCisgICAgLyoqIEBzdGFibGUgSUNVIDYzICov
CisgICAgVV9JTlNDX0NPTlNPTkFOVF9LSUxMRVIsCisgICAgLyoqIEBzdGFibGUgSUNVIDYzICov
CisgICAgVV9JTlNDX0NPTlNPTkFOVF9NRURJQUwsCisgICAgLyoqIEBzdGFibGUgSUNVIDYzICov
CisgICAgVV9JTlNDX0NPTlNPTkFOVF9QTEFDRUhPTERFUiwKKyAgICAvKiogQHN0YWJsZSBJQ1Ug
NjMgKi8KKyAgICBVX0lOU0NfQ09OU09OQU5UX1BSRUNFRElOR19SRVBIQSwKKyAgICAvKiogQHN0
YWJsZSBJQ1UgNjMgKi8KKyAgICBVX0lOU0NfQ09OU09OQU5UX1BSRUZJWEVELAorICAgIC8qKiBA
c3RhYmxlIElDVSA2MyAqLworICAgIFVfSU5TQ19DT05TT05BTlRfU1VCSk9JTkVELAorICAgIC8q
KiBAc3RhYmxlIElDVSA2MyAqLworICAgIFVfSU5TQ19DT05TT05BTlRfU1VDQ0VFRElOR19SRVBI
QSwKKyAgICAvKiogQHN0YWJsZSBJQ1UgNjMgKi8KKyAgICBVX0lOU0NfQ09OU09OQU5UX1dJVEhf
U1RBQ0tFUiwKKyAgICAvKiogQHN0YWJsZSBJQ1UgNjMgKi8KKyAgICBVX0lOU0NfR0VNSU5BVElP
Tl9NQVJLLAorICAgIC8qKiBAc3RhYmxlIElDVSA2MyAqLworICAgIFVfSU5TQ19JTlZJU0lCTEVf
U1RBQ0tFUiwKKyAgICAvKiogQHN0YWJsZSBJQ1UgNjMgKi8KKyAgICBVX0lOU0NfSk9JTkVSLAor
ICAgIC8qKiBAc3RhYmxlIElDVSA2MyAqLworICAgIFVfSU5TQ19NT0RJRllJTkdfTEVUVEVSLAor
ICAgIC8qKiBAc3RhYmxlIElDVSA2MyAqLworICAgIFVfSU5TQ19OT05fSk9JTkVSLAorICAgIC8q
KiBAc3RhYmxlIElDVSA2MyAqLworICAgIFVfSU5TQ19OVUtUQSwKKyAgICAvKiogQHN0YWJsZSBJ
Q1UgNjMgKi8KKyAgICBVX0lOU0NfTlVNQkVSLAorICAgIC8qKiBAc3RhYmxlIElDVSA2MyAqLwor
ICAgIFVfSU5TQ19OVU1CRVJfSk9JTkVSLAorICAgIC8qKiBAc3RhYmxlIElDVSA2MyAqLworICAg
IFVfSU5TQ19QVVJFX0tJTExFUiwKKyAgICAvKiogQHN0YWJsZSBJQ1UgNjMgKi8KKyAgICBVX0lO
U0NfUkVHSVNURVJfU0hJRlRFUiwKKyAgICAvKiogQHN0YWJsZSBJQ1UgNjMgKi8KKyAgICBVX0lO
U0NfU1lMTEFCTEVfTU9ESUZJRVIsCisgICAgLyoqIEBzdGFibGUgSUNVIDYzICovCisgICAgVV9J
TlNDX1RPTkVfTEVUVEVSLAorICAgIC8qKiBAc3RhYmxlIElDVSA2MyAqLworICAgIFVfSU5TQ19U
T05FX01BUkssCisgICAgLyoqIEBzdGFibGUgSUNVIDYzICovCisgICAgVV9JTlNDX1ZJUkFNQSwK
KyAgICAvKiogQHN0YWJsZSBJQ1UgNjMgKi8KKyAgICBVX0lOU0NfVklTQVJHQSwKKyAgICAvKiog
QHN0YWJsZSBJQ1UgNjMgKi8KKyAgICBVX0lOU0NfVk9XRUwsCisgICAgLyoqIEBzdGFibGUgSUNV
IDYzICovCisgICAgVV9JTlNDX1ZPV0VMX0RFUEVOREVOVCwKKyAgICAvKiogQHN0YWJsZSBJQ1Ug
NjMgKi8KKyAgICBVX0lOU0NfVk9XRUxfSU5ERVBFTkRFTlQsCit9IFVJbmRpY1N5bGxhYmljQ2F0
ZWdvcnk7CisKKy8qKgorICogVmVydGljYWwgT3JpZW50YXRpb24gY29uc3RhbnRzLgorICoKKyAq
IEBzZWUgVUNIQVJfVkVSVElDQUxfT1JJRU5UQVRJT04KKyAqIEBzdGFibGUgSUNVIDYzCisgKi8K
K3R5cGVkZWYgZW51bSBVVmVydGljYWxPcmllbnRhdGlvbiB7CisgICAgLyoKKyAgICAgKiBOb3Rl
OiBVVmVydGljYWxPcmllbnRhdGlvbiBjb25zdGFudHMgYXJlIHBhcnNlZCBieSBwcmVwYXJzZXVj
ZC5weS4KKyAgICAgKiBJdCBtYXRjaGVzIGxpbmVzIGxpa2UKKyAgICAgKiAgICAgVV9WT188VW5p
Y29kZSBWZXJ0aWNhbF9PcmllbnRhdGlvbiB2YWx1ZSBuYW1lPgorICAgICAqLworCisgICAgLyoq
IEBzdGFibGUgSUNVIDYzICovCisgICAgVV9WT19ST1RBVEVELAorICAgIC8qKiBAc3RhYmxlIElD
VSA2MyAqLworICAgIFVfVk9fVFJBTlNGT1JNRURfUk9UQVRFRCwKKyAgICAvKiogQHN0YWJsZSBJ
Q1UgNjMgKi8KKyAgICBVX1ZPX1RSQU5TRk9STUVEX1VQUklHSFQsCisgICAgLyoqIEBzdGFibGUg
SUNVIDYzICovCisgICAgVV9WT19VUFJJR0hULAorfSBVVmVydGljYWxPcmllbnRhdGlvbjsKKwog
LyoqCiAgKiBDaGVjayBhIGJpbmFyeSBVbmljb2RlIHByb3BlcnR5IGZvciBhIGNvZGUgcG9pbnQu
CiAgKgpAQCAtMjM0Miw2ICsyNTcwLDcgQEAgdHlwZWRlZiBlbnVtIFVIYW5ndWxTeWxsYWJsZVR5
cGUgewogICogICAgICAgICBkb2VzIG5vdCBoYXZlIGRhdGEgZm9yIHRoZSBwcm9wZXJ0eSBhdCBh
bGwsIG9yIG5vdCBmb3IgdGhpcyBjb2RlIHBvaW50LgogICoKICAqIEBzZWUgVVByb3BlcnR5Cisg
KiBAc2VlIHVfZ2V0QmluYXJ5UHJvcGVydHlTZXQKICAqIEBzZWUgdV9nZXRJbnRQcm9wZXJ0eVZh
bHVlCiAgKiBAc2VlIHVfZ2V0VW5pY29kZVZlcnNpb24KICAqIEBzdGFibGUgSUNVIDIuMQpAQCAt
MjM0OSw2ICsyNTc4LDI4IEBAIHR5cGVkZWYgZW51bSBVSGFuZ3VsU3lsbGFibGVUeXBlIHsKIFVf
U1RBQkxFIFVCb29sIFVfRVhQT1JUMgogdV9oYXNCaW5hcnlQcm9wZXJ0eShVQ2hhcjMyIGMsIFVQ
cm9wZXJ0eSB3aGljaCk7CiAKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQorCisvKioKKyAqIFJl
dHVybnMgYSBmcm96ZW4gVVNldCBmb3IgYSBiaW5hcnkgcHJvcGVydHkuCisgKiBUaGUgbGlicmFy
eSByZXRhaW5zIG93bmVyc2hpcCBvdmVyIHRoZSByZXR1cm5lZCBvYmplY3QuCisgKiBTZXRzIGFu
IGVycm9yIGNvZGUgaWYgdGhlIHByb3BlcnR5IG51bWJlciBpcyBub3Qgb25lIGZvciBhIGJpbmFy
eSBwcm9wZXJ0eS4KKyAqCisgKiBUaGUgcmV0dXJuZWQgc2V0IGNvbnRhaW5zIGFsbCBjb2RlIHBv
aW50cyBmb3Igd2hpY2ggdGhlIHByb3BlcnR5IGlzIHRydWUuCisgKgorICogQHBhcmFtIHByb3Bl
cnR5IFVDSEFSX0JJTkFSWV9TVEFSVC4uVUNIQVJfQklOQVJZX0xJTUlULTEKKyAqIEBwYXJhbSBw
RXJyb3JDb2RlIGFuIGluL291dCBJQ1UgVUVycm9yQ29kZQorICogQHJldHVybiB0aGUgcHJvcGVy
dHkgYXMgYSBzZXQKKyAqIEBzZWUgVVByb3BlcnR5CisgKiBAc2VlIHVfaGFzQmluYXJ5UHJvcGVy
dHkKKyAqIEBzZWUgVW5pY29kZTo6ZnJvbVVTZXQKKyAqIEBkcmFmdCBJQ1UgNjMKKyAqLworVV9D
QVBJIGNvbnN0IFVTZXQgKiBVX0VYUE9SVDIKK3VfZ2V0QmluYXJ5UHJvcGVydHlTZXQoVVByb3Bl
cnR5IHByb3BlcnR5LCBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKKworI2VuZGlmICAvLyBVX0hJ
REVfRFJBRlRfQVBJCisKIC8qKgogICogQ2hlY2sgaWYgYSBjb2RlIHBvaW50IGhhcyB0aGUgQWxw
aGFiZXRpYyBVbmljb2RlIHByb3BlcnR5LgogICogU2FtZSBhcyB1X2hhc0JpbmFyeVByb3BlcnR5
KGMsIFVDSEFSX0FMUEhBQkVUSUMpLgpAQCAtMjQ0OSw2ICsyNzAwLDcgQEAgdV9pc1VXaGl0ZVNw
YWNlKFVDaGFyMzIgYyk7CiAgKiBAc2VlIHVfaGFzQmluYXJ5UHJvcGVydHkKICAqIEBzZWUgdV9n
ZXRJbnRQcm9wZXJ0eU1pblZhbHVlCiAgKiBAc2VlIHVfZ2V0SW50UHJvcGVydHlNYXhWYWx1ZQor
ICogQHNlZSB1X2dldEludFByb3BlcnR5TWFwCiAgKiBAc2VlIHVfZ2V0VW5pY29kZVZlcnNpb24K
ICAqIEBzdGFibGUgSUNVIDIuMgogICovCkBAIC0yNTA1LDYgKzI3NTcsMjggQEAgdV9nZXRJbnRQ
cm9wZXJ0eU1pblZhbHVlKFVQcm9wZXJ0eSB3aGljaCk7CiBVX1NUQUJMRSBpbnQzMl90IFVfRVhQ
T1JUMgogdV9nZXRJbnRQcm9wZXJ0eU1heFZhbHVlKFVQcm9wZXJ0eSB3aGljaCk7CiAKKyNpZm5k
ZWYgVV9ISURFX0RSQUZUX0FQSQorCisvKioKKyAqIFJldHVybnMgYW4gaW1tdXRhYmxlIFVDUE1h
cCBmb3IgYW4gZW51bWVyYXRlZC9jYXRhbG9nL2ludC12YWx1ZWQgcHJvcGVydHkuCisgKiBUaGUg
bGlicmFyeSByZXRhaW5zIG93bmVyc2hpcCBvdmVyIHRoZSByZXR1cm5lZCBvYmplY3QuCisgKiBT
ZXRzIGFuIGVycm9yIGNvZGUgaWYgdGhlIHByb3BlcnR5IG51bWJlciBpcyBub3Qgb25lIGZvciBh
biAiaW50IHByb3BlcnR5Ii4KKyAqCisgKiBUaGUgcmV0dXJuZWQgb2JqZWN0IG1hcHMgYWxsIFVu
aWNvZGUgY29kZSBwb2ludHMgdG8gdGhlaXIgdmFsdWVzIGZvciB0aGF0IHByb3BlcnR5LgorICog
Rm9yIGRvY3VtZW50YXRpb24gb2YgdGhlIGludGVnZXIgdmFsdWVzIHNlZSB1X2dldEludFByb3Bl
cnR5VmFsdWUoKS4KKyAqCisgKiBAcGFyYW0gcHJvcGVydHkgVUNIQVJfSU5UX1NUQVJULi5VQ0hB
Ul9JTlRfTElNSVQtMQorICogQHBhcmFtIHBFcnJvckNvZGUgYW4gaW4vb3V0IElDVSBVRXJyb3JD
b2RlCisgKiBAcmV0dXJuIHRoZSBwcm9wZXJ0eSBhcyBhIG1hcAorICogQHNlZSBVUHJvcGVydHkK
KyAqIEBzZWUgdV9nZXRJbnRQcm9wZXJ0eVZhbHVlCisgKiBAZHJhZnQgSUNVIDYzCisgKi8KK1Vf
Q0FQSSBjb25zdCBVQ1BNYXAgKiBVX0VYUE9SVDIKK3VfZ2V0SW50UHJvcGVydHlNYXAoVVByb3Bl
cnR5IHByb3BlcnR5LCBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKKworI2VuZGlmICAvLyBVX0hJ
REVfRFJBRlRfQVBJCisKIC8qKgogICogR2V0IHRoZSBudW1lcmljIHZhbHVlIGZvciBhIFVuaWNv
ZGUgY29kZSBwb2ludCBhcyBkZWZpbmVkIGluIHRoZQogICogVW5pY29kZSBDaGFyYWN0ZXIgRGF0
YWJhc2UuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3VjbnYuaCBiL1NvdXJj
ZS9XVEYvaWN1L3VuaWNvZGUvdWNudi5oCmluZGV4IDUzYjRjNmYwNzMzYWNhNjVmNWM2ZTEyMWQw
MWE4MDIxYzYzYjkwMzguLmVjN2M1ZjM1MGI0OTczNzgyOTg4NzRkZDg2OWE4MzcxMzc5NjQzNTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdWNudi5oCisrKyBiL1NvdXJjZS9X
VEYvaWN1L3VuaWNvZGUvdWNudi5oCkBAIC01MywxOSArNTMsMTggQEAKICNpbmNsdWRlICJ1bmlj
b2RlL3VlbnVtLmgiCiAjaW5jbHVkZSAidW5pY29kZS9sb2NhbHBvaW50ZXIuaCIKIAotI2lmbmRl
ZiBfX1VTRVRfSF9fCisjaWYgIWRlZmluZWQoVVNFVF9ERUZJTkVEKSAmJiAhZGVmaW5lZChVX0lO
X0RPWFlHRU4pCisKKyNkZWZpbmUgVVNFVF9ERUZJTkVECiAKIC8qKgotICogVVNldCBpcyB0aGUg
QyBBUEkgdHlwZSBmb3IgVW5pY29kZSBzZXRzLgotICogSXQgaXMgZm9yd2FyZC1kZWNsYXJlZCBo
ZXJlIHRvIGF2b2lkIGluY2x1ZGluZyB0aGUgaGVhZGVyIGZpbGUgaWYgcmVsYXRlZAorICogVVNl
dCBpcyB0aGUgQyBBUEkgdHlwZSBjb3JyZXNwb25kaW5nIHRvIEMrKyBjbGFzcyBVbmljb2RlU2V0
LgorICogSXQgaXMgZm9yd2FyZC1kZWNsYXJlZCBoZXJlIHRvIGF2b2lkIGluY2x1ZGluZyB1bmlj
b2RlL3VzZXQuaCBmaWxlIGlmIHJlbGF0ZWQKICAqIGNvbnZlcnNpb24gQVBJcyBhcmUgbm90IHVz
ZWQuCi0gKiBTZWUgdW5pY29kZS91c2V0LmgKICAqCiAgKiBAc2VlIHVjbnZfZ2V0VW5pY29kZVNl
dAotICogQHN0YWJsZSBJQ1UgMi42CisgKiBAc3RhYmxlIElDVSAyLjQKICAqLwotc3RydWN0IFVT
ZXQ7Ci0vKiogQHN0YWJsZSBJQ1UgMi42ICovCiB0eXBlZGVmIHN0cnVjdCBVU2V0IFVTZXQ7CiAK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9pY3UvdW5pY29kZS91Y29sLmggYi9Tb3Vy
Y2UvV1RGL2ljdS91bmljb2RlL3Vjb2wuaAppbmRleCBlY2FiZDllMDliOWQ3YTljZGQzNjVmNjk0
NTU1MjE0NzY3MzY2YWVmLi5kYmFjNDhlM2U0OThiNDdiMmNjYjE0ODUwMDA1YzhlMzg2OTY2NGNh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3Vjb2wuaAorKysgYi9Tb3VyY2Uv
V1RGL2ljdS91bmljb2RlL3Vjb2wuaApAQCAtMTE0OSw3ICsxMTQ5LDcgQEAgdWNvbF9nZXRVQ0FW
ZXJzaW9uKGNvbnN0IFVDb2xsYXRvciogY29sbCwgVVZlcnNpb25JbmZvIGluZm8pOwogICogVGhl
IHJlY29tbWVuZGVkIHdheSB0byBhY2hpZXZlICJtZXJnZWQiIHNvcnRpbmcgaXMgYnkKICAqIGNv
bmNhdGVuYXRpbmcgc3RyaW5ncyB3aXRoIFUrRkZGRSBiZXR3ZWVuIHRoZW0uCiAgKiBUaGUgY29u
Y2F0ZW5hdGlvbiBoYXMgdGhlIHNhbWUgc29ydCBvcmRlciBhcyB0aGUgbWVyZ2VkIHNvcnQga2V5
cywKLSAqIGJ1dCBtZXJnZShnZXRTb3J0S2V5KHN0cjEpLCBnZXRTb3J0S2V5KHN0cjIpKSBtYXkg
ZGlmZmVyIGZyb20gZ2V0U29ydEtleShzdHIxICsgJ1x1RkZGRScgKyBzdHIyKS4KKyAqIGJ1dCBt
ZXJnZShnZXRTb3J0S2V5KHN0cjEpLCBnZXRTb3J0S2V5KHN0cjIpKSBtYXkgZGlmZmVyIGZyb20g
Z2V0U29ydEtleShzdHIxICsgJ1xcdUZGRkUnICsgc3RyMikuCiAgKiBVc2luZyBzdHJpbmdzIHdp
dGggVStGRkZFIG1heSB5aWVsZCBzaG9ydGVyIHNvcnQga2V5cy4KICAqCiAgKiBGb3IgZGV0YWls
cyBhYm91dCBTb3J0IEtleSBGZWF0dXJlcyBzZWUKQEAgLTEyOTQsNiArMTI5NCw3IEBAIFVfU1RB
QkxFIHVpbnQzMl90IFVfRVhQT1JUMiB1Y29sX2dldFZhcmlhYmxlVG9wKGNvbnN0IFVDb2xsYXRv
ciAqY29sbCwgVUVycm9yQ29kCiAgKiB0aGUgdG9wIG9mIG9uZSBvZiB0aGUgc3VwcG9ydGVkIHJl
b3JkZXJpbmcgZ3JvdXBzLAogICogYW5kIGl0IG11c3Qgbm90IGJlIGJleW9uZCB0aGUgbGFzdCBv
ZiB0aG9zZSBncm91cHMuCiAgKiBTZWUgdWNvbF9zZXRNYXhWYXJpYWJsZSgpLgorICogQHBhcmFt
IGNvbGwgY29sbGF0b3IgdG8gYmUgc2V0CiAgKiBAcGFyYW0gdmFyVG9wIHByaW1hcnkgd2VpZ2h0
LCBhcyByZXR1cm5lZCBieSB1Y29sX3NldFZhcmlhYmxlVG9wIG9yIHVjb2xfZ2V0VmFyaWFibGVU
b3AKICAqIEBwYXJhbSBzdGF0dXMgZXJyb3IgY29kZQogICogQHNlZSB1Y29sX2dldFZhcmlhYmxl
VG9wCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3Vjb25maWcuaCBiL1NvdXJj
ZS9XVEYvaWN1L3VuaWNvZGUvdWNvbmZpZy5oCmluZGV4IDdkZGY0ZTZhZGZiODYyYWI4MjE5OThj
ZmNmOTQxMGViYjAyOGQ1MDEuLmU2MWViNTc5NWM2OGFiZmM2NDE3MzQzYjNkOWUxNzcwYzE0MTky
OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdWNvbmZpZy5oCisrKyBiL1Nv
dXJjZS9XVEYvaWN1L3VuaWNvZGUvdWNvbmZpZy5oCkBAIC0xODMsNyArMTgzLDcgQEAKICAqLwog
I2lmZGVmIFVfSEFWRV9MSUJfU1VGRklYCiAgICAgLyogVXNlIHRoZSBwcmVkZWZpbmVkIHZhbHVl
LiAqLwotI2VsaWYgZGVmaW5lZChVX0xJQl9TVUZGSVhfQ19OQU1FKQorI2VsaWYgZGVmaW5lZChV
X0xJQl9TVUZGSVhfQ19OQU1FKSB8fCBkZWZpbmVkKFVfSU5fRE9YWUdFTikKICMgICBkZWZpbmUg
VV9IQVZFX0xJQl9TVUZGSVggMQogI2VuZGlmCiAKQEAgLTM2OSw2ICszNjksMTggQEAKICMgICBk
ZWZpbmUgVUNPTkZJR19NU0dQQVRfREVGQVVMVF9BUE9TVFJPUEhFX01PREUgVU1TR1BBVF9BUE9T
X0RPVUJMRV9PUFRJT05BTAogI2VuZGlmCiAKKy8qKgorICogXGRlZiBVQ09ORklHX1VTRV9XSU5E
T1dTX0xDSURfTUFQUElOR19BUEkKKyAqIE9uIHBsYXRmb3JtcyB3aGVyZSBVX1BMQVRGT1JNX0hB
U19XSU4zMl9BUEkgaXMgdHJ1ZSwgdGhpcyBzd2l0Y2ggZGV0ZXJtaW5lcworICogaWYgdGhlIFdp
bmRvd3MgcGxhdGZvcm0gQVBJcyBhcmUgdXNlZCBmb3IgTENJRDwtPkxvY2FsZSBOYW1lIGNvbnZl
cnNpb25zLgorICogT3RoZXJ3aXNlLCBvbmx5IHRoZSBidWlsdC1pbiBJQ1UgdGFibGVzIGFyZSB1
c2VkLgorICogCisgKiBAaW50ZXJuYWwgSUNVIDY0CisgKi8KKyNpZm5kZWYgVUNPTkZJR19VU0Vf
V0lORE9XU19MQ0lEX01BUFBJTkdfQVBJCisjICAgZGVmaW5lIFVDT05GSUdfVVNFX1dJTkRPV1Nf
TENJRF9NQVBQSU5HX0FQSSAxCisjZW5kaWYKKwogLyogaTE4biBsaWJyYXJ5IHN3aXRjaGVzIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAog
LyoqCkBAIC00MzEsMTcgKzQ0Myw2IEBACiAjICAgZGVmaW5lIFVDT05GSUdfSEFWRV9QQVJTRUFM
TElOUFVUIDEKICNlbmRpZgogCi0KLS8qKgotICogXGRlZiBVQ09ORklHX0ZPUk1BVF9GQVNUUEFU
SFNfNDkKLSAqIFRoaXMgc3dpdGNoIHR1cm5zIG9uIG90aGVyIGZvcm1hdHRpbmcgZmFzdHBhdGhz
LiBCaW5hcnkgaW5jb21wYXRpYmxlIGluIG9iamVjdCBEZWNpbWFsRm9ybWF0IGFuZCBEZWNpbWFs
Rm9ybWF0U3ltYm9scwotICoKLSAqIEBpbnRlcm5hbAotICovCi0jaWZuZGVmIFVDT05GSUdfRk9S
TUFUX0ZBU1RQQVRIU180OQotIyAgIGRlZmluZSBVQ09ORklHX0ZPUk1BVF9GQVNUUEFUSFNfNDkg
MQotI2VuZGlmCi0KIC8qKgogICogXGRlZiBVQ09ORklHX05PX0ZJTFRFUkVEX0JSRUFLX0lURVJB
VElPTgogICogVGhpcyBzd2l0Y2ggdHVybnMgb2ZmIGZpbHRlcmVkIGJyZWFrIGl0ZXJhdGlvbiBj
b2RlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9pY3UvdW5pY29kZS91Y3BtYXAuaCBiL1NvdXJj
ZS9XVEYvaWN1L3VuaWNvZGUvdWNwbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjJjNDJiNmI3ZjRiZWVkYjI1
NmM1NDM3YjgwNzJkMTZmNjQ1NDUwYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvaWN1
L3VuaWNvZGUvdWNwbWFwLmgKQEAgLTAsMCArMSwxNjIgQEAKKy8vIMKpIDIwMTggYW5kIGxhdGVy
OiBVbmljb2RlLCBJbmMuIGFuZCBvdGhlcnMuCisvLyBMaWNlbnNlICYgdGVybXMgb2YgdXNlOiBo
dHRwOi8vd3d3LnVuaWNvZGUub3JnL2NvcHlyaWdodC5odG1sCisKKy8vIHVjcG1hcC5oCisvLyBj
cmVhdGVkOiAyMDE4c2VwMDMgTWFya3VzIFcuIFNjaGVyZXIKKworI2lmbmRlZiBfX1VDUE1BUF9I
X18KKyNkZWZpbmUgX19VQ1BNQVBfSF9fCisKKyNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgor
CisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKworVV9DREVDTF9CRUdJTgorCisvKioKKyAqIFxm
aWxlCisgKgorICogVGhpcyBmaWxlIGRlZmluZXMgYW4gYWJzdHJhY3QgbWFwIGZyb20gVW5pY29k
ZSBjb2RlIHBvaW50cyB0byBpbnRlZ2VyIHZhbHVlcy4KKyAqCisgKiBAc2VlIFVDUE1hcAorICog
QHNlZSBVQ1BUcmllCisgKiBAc2VlIFVNdXRhYmxlQ1BUcmllCisgKi8KKworLyoqCisgKiBBYnN0
cmFjdCBtYXAgZnJvbSBVbmljb2RlIGNvZGUgcG9pbnRzIChVKzAwMDAuLlUrMTBGRkZGKSB0byBp
bnRlZ2VyIHZhbHVlcy4KKyAqCisgKiBAc2VlIFVDUFRyaWUKKyAqIEBzZWUgVU11dGFibGVDUFRy
aWUKKyAqIEBkcmFmdCBJQ1UgNjMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgVUNQTWFwIFVDUE1hcDsK
KworLyoqCisgKiBTZWxlY3RvcnMgZm9yIGhvdyB1Y3BtYXBfZ2V0UmFuZ2UoKSBldGMuIHNob3Vs
ZCByZXBvcnQgdmFsdWUgcmFuZ2VzIG92ZXJsYXBwaW5nIHdpdGggc3Vycm9nYXRlcy4KKyAqIE1v
c3QgdXNlcnMgc2hvdWxkIHVzZSBVQ1BNQVBfUkFOR0VfTk9STUFMLgorICoKKyAqIEBzZWUgdWNw
bWFwX2dldFJhbmdlCisgKiBAc2VlIHVjcHRyaWVfZ2V0UmFuZ2UKKyAqIEBzZWUgdW11dGFibGVj
cHRyaWVfZ2V0UmFuZ2UKKyAqIEBkcmFmdCBJQ1UgNjMKKyAqLworZW51bSBVQ1BNYXBSYW5nZU9w
dGlvbiB7CisgICAgLyoqCisgICAgICogdWNwbWFwX2dldFJhbmdlKCkgZW51bWVyYXRlcyBhbGwg
c2FtZS12YWx1ZSByYW5nZXMgYXMgc3RvcmVkIGluIHRoZSBtYXAuCisgICAgICogTW9zdCB1c2Vy
cyBzaG91bGQgdXNlIHRoaXMgb3B0aW9uLgorICAgICAqIEBkcmFmdCBJQ1UgNjMKKyAgICAgKi8K
KyAgICBVQ1BNQVBfUkFOR0VfTk9STUFMLAorICAgIC8qKgorICAgICAqIHVjcG1hcF9nZXRSYW5n
ZSgpIGVudW1lcmF0ZXMgYWxsIHNhbWUtdmFsdWUgcmFuZ2VzIGFzIHN0b3JlZCBpbiB0aGUgbWFw
LAorICAgICAqIGV4Y2VwdCB0aGF0IGxlYWQgc3Vycm9nYXRlcyAoVStEODAwLi5VK0RCRkYpIGFy
ZSB0cmVhdGVkIGFzIGhhdmluZyB0aGUKKyAgICAgKiBzdXJyb2dhdGVWYWx1ZSwgd2hpY2ggaXMg
cGFzc2VkIHRvIGdldFJhbmdlKCkgYXMgYSBzZXBhcmF0ZSBwYXJhbWV0ZXIuCisgICAgICogVGhl
IHN1cnJvZ2F0ZVZhbHVlIGlzIG5vdCB0cmFuc2Zvcm1lZCB2aWEgZmlsdGVyKCkuCisgICAgICog
U2VlIFVfSVNfTEVBRChjKS4KKyAgICAgKgorICAgICAqIE1vc3QgdXNlcnMgc2hvdWxkIHVzZSBV
Q1BNQVBfUkFOR0VfTk9STUFMIGluc3RlYWQuCisgICAgICoKKyAgICAgKiBUaGlzIG9wdGlvbiBp
cyB1c2VmdWwgZm9yIG1hcHMgdGhhdCBtYXAgc3Vycm9nYXRlIGNvZGUgKnVuaXRzKiB0bworICAg
ICAqIHNwZWNpYWwgdmFsdWVzIG9wdGltaXplZCBmb3IgVVRGLTE2IHN0cmluZyBwcm9jZXNzaW5n
CisgICAgICogb3IgZm9yIHNwZWNpYWwgZXJyb3IgYmVoYXZpb3IgZm9yIHVucGFpcmVkIHN1cnJv
Z2F0ZXMsCisgICAgICogYnV0IHRob3NlIHZhbHVlcyBhcmUgbm90IHRvIGJlIGFzc29jaWF0ZWQg
d2l0aCB0aGUgbGVhZCBzdXJyb2dhdGUgY29kZSAqcG9pbnRzKi4KKyAgICAgKiBAZHJhZnQgSUNV
IDYzCisgICAgICovCisgICAgVUNQTUFQX1JBTkdFX0ZJWEVEX0xFQURfU1VSUk9HQVRFUywKKyAg
ICAvKioKKyAgICAgKiB1Y3BtYXBfZ2V0UmFuZ2UoKSBlbnVtZXJhdGVzIGFsbCBzYW1lLXZhbHVl
IHJhbmdlcyBhcyBzdG9yZWQgaW4gdGhlIG1hcCwKKyAgICAgKiBleGNlcHQgdGhhdCBhbGwgc3Vy
cm9nYXRlcyAoVStEODAwLi5VK0RGRkYpIGFyZSB0cmVhdGVkIGFzIGhhdmluZyB0aGUKKyAgICAg
KiBzdXJyb2dhdGVWYWx1ZSwgd2hpY2ggaXMgcGFzc2VkIHRvIGdldFJhbmdlKCkgYXMgYSBzZXBh
cmF0ZSBwYXJhbWV0ZXIuCisgICAgICogVGhlIHN1cnJvZ2F0ZVZhbHVlIGlzIG5vdCB0cmFuc2Zv
cm1lZCB2aWEgZmlsdGVyKCkuCisgICAgICogU2VlIFVfSVNfU1VSUk9HQVRFKGMpLgorICAgICAq
CisgICAgICogTW9zdCB1c2VycyBzaG91bGQgdXNlIFVDUE1BUF9SQU5HRV9OT1JNQUwgaW5zdGVh
ZC4KKyAgICAgKgorICAgICAqIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCBmb3IgbWFwcyB0aGF0IG1h
cCBzdXJyb2dhdGUgY29kZSAqdW5pdHMqIHRvCisgICAgICogc3BlY2lhbCB2YWx1ZXMgb3B0aW1p
emVkIGZvciBVVEYtMTYgc3RyaW5nIHByb2Nlc3NpbmcKKyAgICAgKiBvciBmb3Igc3BlY2lhbCBl
cnJvciBiZWhhdmlvciBmb3IgdW5wYWlyZWQgc3Vycm9nYXRlcywKKyAgICAgKiBidXQgdGhvc2Ug
dmFsdWVzIGFyZSBub3QgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBsZWFkIHN1cnJvZ2F0ZSBj
b2RlICpwb2ludHMqLgorICAgICAqIEBkcmFmdCBJQ1UgNjMKKyAgICAgKi8KKyAgICBVQ1BNQVBf
UkFOR0VfRklYRURfQUxMX1NVUlJPR0FURVMKK307CisjaWZuZGVmIFVfSU5fRE9YWUdFTgordHlw
ZWRlZiBlbnVtIFVDUE1hcFJhbmdlT3B0aW9uIFVDUE1hcFJhbmdlT3B0aW9uOworI2VuZGlmCisK
Ky8qKgorICogUmV0dXJucyB0aGUgdmFsdWUgZm9yIGEgY29kZSBwb2ludCBhcyBzdG9yZWQgaW4g
dGhlIG1hcCwgd2l0aCByYW5nZSBjaGVja2luZy4KKyAqIFJldHVybnMgYW4gaW1wbGVtZW50YXRp
b24tZGVmaW5lZCBlcnJvciB2YWx1ZSBpZiBjIGlzIG5vdCBpbiB0aGUgcmFuZ2UgMC4uVSsxMEZG
RkYuCisgKgorICogQHBhcmFtIG1hcCB0aGUgbWFwCisgKiBAcGFyYW0gYyB0aGUgY29kZSBwb2lu
dAorICogQHJldHVybiB0aGUgbWFwIHZhbHVlLAorICogICAgICAgICBvciBhbiBpbXBsZW1lbnRh
dGlvbi1kZWZpbmVkIGVycm9yIHZhbHVlIGlmIHRoZSBjb2RlIHBvaW50IGlzIG5vdCBpbiB0aGUg
cmFuZ2UgMC4uVSsxMEZGRkYKKyAqIEBkcmFmdCBJQ1UgNjMKKyAqLworVV9DQVBJIHVpbnQzMl90
IFVfRVhQT1JUMgordWNwbWFwX2dldChjb25zdCBVQ1BNYXAgKm1hcCwgVUNoYXIzMiBjKTsKKwor
LyoqCisgKiBDYWxsYmFjayBmdW5jdGlvbiB0eXBlOiBNb2RpZmllcyBhIG1hcCB2YWx1ZS4KKyAq
IE9wdGlvbmFsbHkgY2FsbGVkIGJ5IHVjcG1hcF9nZXRSYW5nZSgpL3VjcHRyaWVfZ2V0UmFuZ2Uo
KS91bXV0YWJsZWNwdHJpZV9nZXRSYW5nZSgpLgorICogVGhlIG1vZGlmaWVkIHZhbHVlIHdpbGwg
YmUgcmV0dXJuZWQgYnkgdGhlIGdldFJhbmdlIGZ1bmN0aW9uLgorICoKKyAqIENhbiBiZSB1c2Vk
IHRvIGlnbm9yZSBzb21lIG9mIHRoZSB2YWx1ZSBiaXRzLAorICogbWFrZSBhIGZpbHRlciBmb3Ig
b25lIG9mIHNldmVyYWwgdmFsdWVzLAorICogcmV0dXJuIGEgdmFsdWUgaW5kZXggY29tcHV0ZWQg
ZnJvbSB0aGUgbWFwIHZhbHVlLCBldGMuCisgKgorICogQHBhcmFtIGNvbnRleHQgYW4gb3BhcXVl
IHBvaW50ZXIsIGFzIHBhc3NlZCBpbnRvIHRoZSBnZXRSYW5nZSBmdW5jdGlvbgorICogQHBhcmFt
IHZhbHVlIGEgdmFsdWUgZnJvbSB0aGUgbWFwCisgKiBAcmV0dXJuIHRoZSBtb2RpZmllZCB2YWx1
ZQorICogQGRyYWZ0IElDVSA2MworICovCit0eXBlZGVmIHVpbnQzMl90IFVfQ0FMTENPTlYKK1VD
UE1hcFZhbHVlRmlsdGVyKGNvbnN0IHZvaWQgKmNvbnRleHQsIHVpbnQzMl90IHZhbHVlKTsKKwor
LyoqCisgKiBSZXR1cm5zIHRoZSBsYXN0IGNvZGUgcG9pbnQgc3VjaCB0aGF0IGFsbCB0aG9zZSBm
cm9tIHN0YXJ0IHRvIHRoZXJlIGhhdmUgdGhlIHNhbWUgdmFsdWUuCisgKiBDYW4gYmUgdXNlZCB0
byBlZmZpY2llbnRseSBpdGVyYXRlIG92ZXIgYWxsIHNhbWUtdmFsdWUgcmFuZ2VzIGluIGEgbWFw
LgorICogKFRoaXMgaXMgbm9ybWFsbHkgZmFzdGVyIHRoYW4gaXRlcmF0aW5nIG92ZXIgY29kZSBw
b2ludHMgYW5kIGdldCgpdGluZyBlYWNoIHZhbHVlLAorICogYnV0IG11Y2ggc2xvd2VyIHRoYW4g
YSBkYXRhIHN0cnVjdHVyZSB0aGF0IHN0b3JlcyByYW5nZXMgZGlyZWN0bHkuKQorICoKKyAqIElm
IHRoZSBVQ1BNYXBWYWx1ZUZpbHRlciBmdW5jdGlvbiBwb2ludGVyIGlzIG5vdCBOVUxMLCB0aGVu
CisgKiB0aGUgdmFsdWUgdG8gYmUgZGVsaXZlcmVkIGlzIHBhc3NlZCB0aHJvdWdoIHRoYXQgZnVu
Y3Rpb24sIGFuZCB0aGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBlbmQKKyAqIG9mIHRoZSByYW5nZSB3
aGVyZSBhbGwgdmFsdWVzIGFyZSBtb2RpZmllZCB0byB0aGUgc2FtZSBhY3R1YWwgdmFsdWUuCisg
KiBUaGUgdmFsdWUgaXMgdW5jaGFuZ2VkIGlmIHRoYXQgZnVuY3Rpb24gcG9pbnRlciBpcyBOVUxM
LgorICoKKyAqIEV4YW1wbGU6CisgKiBcY29kZQorICogVUNoYXIzMiBzdGFydCA9IDAsIGVuZDsK
KyAqIHVpbnQzMl90IHZhbHVlOworICogd2hpbGUgKChlbmQgPSB1Y3BtYXBfZ2V0UmFuZ2UobWFw
LCBzdGFydCwgVUNQTUFQX1JBTkdFX05PUk1BTCwgMCwKKyAqICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5VTEwsIE5VTEwsICZ2YWx1ZSkpID49IDApIHsKKyAqICAgICAvLyBXb3JrIHdp
dGggdGhlIHJhbmdlIHN0YXJ0Li5lbmQgYW5kIGl0cyB2YWx1ZS4KKyAqICAgICBzdGFydCA9IGVu
ZCArIDE7CisgKiB9CisgKiBcZW5kY29kZQorICoKKyAqIEBwYXJhbSBtYXAgdGhlIG1hcAorICog
QHBhcmFtIHN0YXJ0IHJhbmdlIHN0YXJ0CisgKiBAcGFyYW0gb3B0aW9uIGRlZmluZXMgd2hldGhl
ciBzdXJyb2dhdGVzIGFyZSB0cmVhdGVkIG5vcm1hbGx5LAorICogICAgICAgICAgICAgICBvciBh
cyBoYXZpbmcgdGhlIHN1cnJvZ2F0ZVZhbHVlOyB1c3VhbGx5IFVDUE1BUF9SQU5HRV9OT1JNQUwK
KyAqIEBwYXJhbSBzdXJyb2dhdGVWYWx1ZSB2YWx1ZSBmb3Igc3Vycm9nYXRlczsgaWdub3JlZCBp
ZiBvcHRpb249PVVDUE1BUF9SQU5HRV9OT1JNQUwKKyAqIEBwYXJhbSBmaWx0ZXIgYSBwb2ludGVy
IHRvIGEgZnVuY3Rpb24gdGhhdCBtYXkgbW9kaWZ5IHRoZSBtYXAgZGF0YSB2YWx1ZSwKKyAqICAg
ICBvciBOVUxMIGlmIHRoZSB2YWx1ZXMgZnJvbSB0aGUgbWFwIGFyZSB0byBiZSB1c2VkIHVubW9k
aWZpZWQKKyAqIEBwYXJhbSBjb250ZXh0IGFuIG9wYXF1ZSBwb2ludGVyIHRoYXQgaXMgcGFzc2Vk
IG9uIHRvIHRoZSBmaWx0ZXIgZnVuY3Rpb24KKyAqIEBwYXJhbSBwVmFsdWUgaWYgbm90IE5VTEws
IHJlY2VpdmVzIHRoZSB2YWx1ZSB0aGF0IGV2ZXJ5IGNvZGUgcG9pbnQgc3RhcnQuLmVuZCBoYXM7
CisgKiAgICAgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBieSBmaWx0ZXIoY29udGV4dCwgbWFwIHZh
bHVlKQorICogICAgIGlmIHRoYXQgZnVuY3Rpb24gcG9pbnRlciBpcyBub3QgTlVMTAorICogQHJl
dHVybiB0aGUgcmFuZ2UgZW5kIGNvZGUgcG9pbnQsIG9yIC0xIGlmIHN0YXJ0IGlzIG5vdCBhIHZh
bGlkIGNvZGUgcG9pbnQKKyAqIEBkcmFmdCBJQ1UgNjMKKyAqLworVV9DQVBJIFVDaGFyMzIgVV9F
WFBPUlQyCit1Y3BtYXBfZ2V0UmFuZ2UoY29uc3QgVUNQTWFwICptYXAsIFVDaGFyMzIgc3RhcnQs
CisgICAgICAgICAgICAgICAgVUNQTWFwUmFuZ2VPcHRpb24gb3B0aW9uLCB1aW50MzJfdCBzdXJy
b2dhdGVWYWx1ZSwKKyAgICAgICAgICAgICAgICBVQ1BNYXBWYWx1ZUZpbHRlciAqZmlsdGVyLCBj
b25zdCB2b2lkICpjb250ZXh0LCB1aW50MzJfdCAqcFZhbHVlKTsKKworVV9DREVDTF9FTkQKKwor
I2VuZGlmICAvLyBVX0hJREVfRFJBRlRfQVBJCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvaWN1L3VuaWNvZGUvdWNwdHJpZS5oIGIvU291cmNlL1dURi9pY3UvdW5pY29kZS91Y3B0cmll
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMjcxOGM5ODRlNDMxOTc5ZjRhYTYzMTBlY2FkMDdmNzJlMzcxZTJlNwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdWNwdHJpZS5oCkBAIC0w
LDAgKzEsNjQ2IEBACisvLyDCqSAyMDE3IGFuZCBsYXRlcjogVW5pY29kZSwgSW5jLiBhbmQgb3Ro
ZXJzLgorLy8gTGljZW5zZSAmIHRlcm1zIG9mIHVzZTogaHR0cDovL3d3dy51bmljb2RlLm9yZy9j
b3B5cmlnaHQuaHRtbAorCisvLyB1Y3B0cmllLmggKG1vZGlmaWVkIGZyb20gdXRyaWUyLmgpCisv
LyBjcmVhdGVkOiAyMDE3ZGVjMjkgTWFya3VzIFcuIFNjaGVyZXIKKworI2lmbmRlZiBfX1VDUFRS
SUVfSF9fCisjZGVmaW5lIF9fVUNQVFJJRV9IX18KKworI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVz
LmgiCisKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQorCisjaW5jbHVkZSAidW5pY29kZS9sb2Nh
bHBvaW50ZXIuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VjcG1hcC5oIgorI2luY2x1ZGUgInVuaWNv
ZGUvdXRmOC5oIgorCitVX0NERUNMX0JFR0lOCisKKy8qKgorICogXGZpbGUKKyAqCisgKiBUaGlz
IGZpbGUgZGVmaW5lcyBhbiBpbW11dGFibGUgVW5pY29kZSBjb2RlIHBvaW50IHRyaWUuCisgKgor
ICogQHNlZSBVQ1BUcmllCisgKiBAc2VlIFVNdXRhYmxlQ1BUcmllCisgKi8KKworI2lmbmRlZiBV
X0lOX0RPWFlHRU4KKy8qKiBAaW50ZXJuYWwgKi8KK3R5cGVkZWYgdW5pb24gVUNQVHJpZURhdGEg
eworICAgIC8qKiBAaW50ZXJuYWwgKi8KKyAgICBjb25zdCB2b2lkICpwdHIwOworICAgIC8qKiBA
aW50ZXJuYWwgKi8KKyAgICBjb25zdCB1aW50MTZfdCAqcHRyMTY7CisgICAgLyoqIEBpbnRlcm5h
bCAqLworICAgIGNvbnN0IHVpbnQzMl90ICpwdHIzMjsKKyAgICAvKiogQGludGVybmFsICovCisg
ICAgY29uc3QgdWludDhfdCAqcHRyODsKK30gVUNQVHJpZURhdGE7CisjZW5kaWYKKworLyoqCisg
KiBJbW11dGFibGUgVW5pY29kZSBjb2RlIHBvaW50IHRyaWUgc3RydWN0dXJlLgorICogRmFzdCwg
cmVhc29uYWJseSBjb21wYWN0LCBtYXAgZnJvbSBVbmljb2RlIGNvZGUgcG9pbnRzIChVKzAwMDAu
LlUrMTBGRkZGKSB0byBpbnRlZ2VyIHZhbHVlcy4KKyAqIEZvciBkZXRhaWxzIHNlZSBodHRwOi8v
c2l0ZS5pY3UtcHJvamVjdC5vcmcvZGVzaWduL3N0cnVjdC91dHJpZQorICoKKyAqIERvIG5vdCBh
Y2Nlc3MgVUNQVHJpZSBmaWVsZHMgZGlyZWN0bHk7IHVzZSBwdWJsaWMgZnVuY3Rpb25zIGFuZCBt
YWNyb3MuCisgKiBGdW5jdGlvbnMgYXJlIGVhc3kgdG8gdXNlOiBUaGV5IHN1cHBvcnQgYWxsIHRy
aWUgdHlwZXMgYW5kIHZhbHVlIHdpZHRocy4KKyAqCisgKiBXaGVuIHBlcmZvcm1hbmNlIGlzIHJl
YWxseSBpbXBvcnRhbnQsIG1hY3JvcyBwcm92aWRlIGZhc3RlciBhY2Nlc3MuCisgKiBNb3N0IG1h
Y3JvcyBhcmUgc3BlY2lmaWMgdG8gZWl0aGVyICJmYXN0IiBvciAic21hbGwiIHRyaWVzLCBzZWUg
VUNQVHJpZVR5cGUuCisgKiBUaGVyZSBhcmUgImZhc3QiIG1hY3JvcyBmb3Igc3BlY2lhbCBvcHRp
bWl6ZWQgdXNlIGNhc2VzLgorICoKKyAqIFRoZSBtYWNyb3Mgd2lsbCByZXR1cm4gYm9ndXMgdmFs
dWVzLCBvciBtYXkgY3Jhc2gsIGlmIHVzZWQgb24gdGhlIHdyb25nIHR5cGUgb3IgdmFsdWUgd2lk
dGguCisgKgorICogQHNlZSBVTXV0YWJsZUNQVHJpZQorICogQGRyYWZ0IElDVSA2MworICovCitz
dHJ1Y3QgVUNQVHJpZSB7CisjaWZuZGVmIFVfSU5fRE9YWUdFTgorICAgIC8qKiBAaW50ZXJuYWwg
Ki8KKyAgICBjb25zdCB1aW50MTZfdCAqaW5kZXg7CisgICAgLyoqIEBpbnRlcm5hbCAqLworICAg
IFVDUFRyaWVEYXRhIGRhdGE7CisKKyAgICAvKiogQGludGVybmFsICovCisgICAgaW50MzJfdCBp
bmRleExlbmd0aDsKKyAgICAvKiogQGludGVybmFsICovCisgICAgaW50MzJfdCBkYXRhTGVuZ3Ro
OworICAgIC8qKiBTdGFydCBvZiB0aGUgbGFzdCByYW5nZSB3aGljaCBlbmRzIGF0IFUrMTBGRkZG
LiBAaW50ZXJuYWwgKi8KKyAgICBVQ2hhcjMyIGhpZ2hTdGFydDsKKyAgICAvKiogaGlnaFN0YXJ0
Pj4xMiBAaW50ZXJuYWwgKi8KKyAgICB1aW50MTZfdCBzaGlmdGVkMTJIaWdoU3RhcnQ7CisKKyAg
ICAvKiogQGludGVybmFsICovCisgICAgaW50OF90IHR5cGU7ICAvLyBVQ1BUcmllVHlwZQorICAg
IC8qKiBAaW50ZXJuYWwgKi8KKyAgICBpbnQ4X3QgdmFsdWVXaWR0aDsgIC8vIFVDUFRyaWVWYWx1
ZVdpZHRoCisKKyAgICAvKiogcGFkZGluZy9yZXNlcnZlZCBAaW50ZXJuYWwgKi8KKyAgICB1aW50
MzJfdCByZXNlcnZlZDMyOworICAgIC8qKiBwYWRkaW5nL3Jlc2VydmVkIEBpbnRlcm5hbCAqLwor
ICAgIHVpbnQxNl90IHJlc2VydmVkMTY7CisKKyAgICAvKioKKyAgICAgKiBJbnRlcm5hbCBpbmRl
eC0zIG51bGwgYmxvY2sgb2Zmc2V0LgorICAgICAqIFNldCB0byBhbiBpbXBvc3NpYmx5IGhpZ2gg
dmFsdWUgKGUuZy4sIDB4ZmZmZikgaWYgdGhlcmUgaXMgbm8gZGVkaWNhdGVkIGluZGV4LTMgbnVs
bCBibG9jay4KKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAgICB1aW50MTZfdCBpbmRleDNO
dWxsT2Zmc2V0OworICAgIC8qKgorICAgICAqIEludGVybmFsIGRhdGEgbnVsbCBibG9jayBvZmZz
ZXQsIG5vdCBzaGlmdGVkLgorICAgICAqIFNldCB0byBhbiBpbXBvc3NpYmx5IGhpZ2ggdmFsdWUg
KGUuZy4sIDB4ZmZmZmYpIGlmIHRoZXJlIGlzIG5vIGRlZGljYXRlZCBkYXRhIG51bGwgYmxvY2su
CisgICAgICogQGludGVybmFsCisgICAgICovCisgICAgaW50MzJfdCBkYXRhTnVsbE9mZnNldDsK
KyAgICAvKiogQGludGVybmFsICovCisgICAgdWludDMyX3QgbnVsbFZhbHVlOworCisjaWZkZWYg
VUNQVFJJRV9ERUJVRworICAgIC8qKiBAaW50ZXJuYWwgKi8KKyAgICBjb25zdCBjaGFyICpuYW1l
OworI2VuZGlmCisjZW5kaWYKK307CisjaWZuZGVmIFVfSU5fRE9YWUdFTgordHlwZWRlZiBzdHJ1
Y3QgVUNQVHJpZSBVQ1BUcmllOworI2VuZGlmCisKKy8qKgorICogU2VsZWN0b3JzIGZvciB0aGUg
dHlwZSBvZiBhIFVDUFRyaWUuCisgKiBEaWZmZXJlbnQgdHJhZGUtb2ZmcyBmb3Igc2l6ZSB2cy4g
c3BlZWQuCisgKgorICogQHNlZSB1bXV0YWJsZWNwdHJpZV9idWlsZEltbXV0YWJsZQorICogQHNl
ZSB1Y3B0cmllX29wZW5Gcm9tQmluYXJ5CisgKiBAc2VlIHVjcHRyaWVfZ2V0VHlwZQorICogQGRy
YWZ0IElDVSA2MworICovCitlbnVtIFVDUFRyaWVUeXBlIHsKKyAgICAvKioKKyAgICAgKiBGb3Ig
dWNwdHJpZV9vcGVuRnJvbUJpbmFyeSgpIHRvIGFjY2VwdCBhbnkgdHlwZS4KKyAgICAgKiB1Y3B0
cmllX2dldFR5cGUoKSB3aWxsIHJldHVybiB0aGUgYWN0dWFsIHR5cGUuCisgICAgICogQGRyYWZ0
IElDVSA2MworICAgICAqLworICAgIFVDUFRSSUVfVFlQRV9BTlkgPSAtMSwKKyAgICAvKioKKyAg
ICAgKiBGYXN0L3NpbXBsZS9sYXJnZXIgQk1QIGRhdGEgc3RydWN0dXJlLiBVc2UgZnVuY3Rpb25z
IGFuZCAiZmFzdCIgbWFjcm9zLgorICAgICAqIEBkcmFmdCBJQ1UgNjMKKyAgICAgKi8KKyAgICBV
Q1BUUklFX1RZUEVfRkFTVCwKKyAgICAvKioKKyAgICAgKiBTbWFsbC9zbG93ZXIgQk1QIGRhdGEg
c3RydWN0dXJlLiBVc2UgZnVuY3Rpb25zIGFuZCAic21hbGwiIG1hY3Jvcy4KKyAgICAgKiBAZHJh
ZnQgSUNVIDYzCisgICAgICovCisgICAgVUNQVFJJRV9UWVBFX1NNQUxMCit9OworI2lmbmRlZiBV
X0lOX0RPWFlHRU4KK3R5cGVkZWYgZW51bSBVQ1BUcmllVHlwZSBVQ1BUcmllVHlwZTsKKyNlbmRp
ZgorCisvKioKKyAqIFNlbGVjdG9ycyBmb3IgdGhlIG51bWJlciBvZiBiaXRzIGluIGEgVUNQVHJp
ZSBkYXRhIHZhbHVlLgorICoKKyAqIEBzZWUgdW11dGFibGVjcHRyaWVfYnVpbGRJbW11dGFibGUK
KyAqIEBzZWUgdWNwdHJpZV9vcGVuRnJvbUJpbmFyeQorICogQHNlZSB1Y3B0cmllX2dldFZhbHVl
V2lkdGgKKyAqIEBkcmFmdCBJQ1UgNjMKKyAqLworZW51bSBVQ1BUcmllVmFsdWVXaWR0aCB7Cisg
ICAgLyoqCisgICAgICogRm9yIHVjcHRyaWVfb3BlbkZyb21CaW5hcnkoKSB0byBhY2NlcHQgYW55
IGRhdGEgdmFsdWUgd2lkdGguCisgICAgICogdWNwdHJpZV9nZXRWYWx1ZVdpZHRoKCkgd2lsbCBy
ZXR1cm4gdGhlIGFjdHVhbCBkYXRhIHZhbHVlIHdpZHRoLgorICAgICAqIEBkcmFmdCBJQ1UgNjMK
KyAgICAgKi8KKyAgICBVQ1BUUklFX1ZBTFVFX0JJVFNfQU5ZID0gLTEsCisgICAgLyoqCisgICAg
ICogVGhlIHRyaWUgc3RvcmVzIDE2IGJpdHMgcGVyIGRhdGEgdmFsdWUuCisgICAgICogSXQgcmV0
dXJucyB0aGVtIGFzIHVuc2lnbmVkIHZhbHVlcyAwLi4weGZmZmY9NjU1MzUuCisgICAgICogQGRy
YWZ0IElDVSA2MworICAgICAqLworICAgIFVDUFRSSUVfVkFMVUVfQklUU18xNiwKKyAgICAvKioK
KyAgICAgKiBUaGUgdHJpZSBzdG9yZXMgMzIgYml0cyBwZXIgZGF0YSB2YWx1ZS4KKyAgICAgKiBA
ZHJhZnQgSUNVIDYzCisgICAgICovCisgICAgVUNQVFJJRV9WQUxVRV9CSVRTXzMyLAorICAgIC8q
KgorICAgICAqIFRoZSB0cmllIHN0b3JlcyA4IGJpdHMgcGVyIGRhdGEgdmFsdWUuCisgICAgICog
SXQgcmV0dXJucyB0aGVtIGFzIHVuc2lnbmVkIHZhbHVlcyAwLi4weGZmPTI1NS4KKyAgICAgKiBA
ZHJhZnQgSUNVIDYzCisgICAgICovCisgICAgVUNQVFJJRV9WQUxVRV9CSVRTXzgKK307CisjaWZu
ZGVmIFVfSU5fRE9YWUdFTgordHlwZWRlZiBlbnVtIFVDUFRyaWVWYWx1ZVdpZHRoIFVDUFRyaWVW
YWx1ZVdpZHRoOworI2VuZGlmCisKKy8qKgorICogT3BlbnMgYSB0cmllIGZyb20gaXRzIGJpbmFy
eSBmb3JtLCBzdG9yZWQgaW4gMzItYml0LWFsaWduZWQgbWVtb3J5LgorICogSW52ZXJzZSBvZiB1
Y3B0cmllX3RvQmluYXJ5KCkuCisgKgorICogVGhlIG1lbW9yeSBtdXN0IHJlbWFpbiB2YWxpZCBh
bmQgdW5jaGFuZ2VkIGFzIGxvbmcgYXMgdGhlIHRyaWUgaXMgdXNlZC4KKyAqIFlvdSBtdXN0IHVj
cHRyaWVfY2xvc2UoKSB0aGUgdHJpZSBvbmNlIHlvdSBhcmUgZG9uZSB1c2luZyBpdC4KKyAqCisg
KiBAcGFyYW0gdHlwZSBzZWxlY3RzIHRoZSB0cmllIHR5cGU7IHJlc3VsdHMgaW4gYW4KKyAqICAg
ICAgICAgICAgIFVfSU5WQUxJRF9GT1JNQVRfRVJST1IgaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhl
IGJpbmFyeSBkYXRhOworICogICAgICAgICAgICAgdXNlIFVDUFRSSUVfVFlQRV9BTlkgdG8gYWNj
ZXB0IGFueSB0eXBlCisgKiBAcGFyYW0gdmFsdWVXaWR0aCBzZWxlY3RzIHRoZSBudW1iZXIgb2Yg
Yml0cyBpbiBhIGRhdGEgdmFsdWU7IHJlc3VsdHMgaW4gYW4KKyAqICAgICAgICAgICAgICAgICAg
VV9JTlZBTElEX0ZPUk1BVF9FUlJPUiBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUgYmluYXJ5IGRh
dGE7CisgKiAgICAgICAgICAgICAgICAgIHVzZSBVQ1BUUklFX1ZBTFVFX0JJVFNfQU5ZIHRvIGFj
Y2VwdCBhbnkgZGF0YSB2YWx1ZSB3aWR0aAorICogQHBhcmFtIGRhdGEgYSBwb2ludGVyIHRvIDMy
LWJpdC1hbGlnbmVkIG1lbW9yeSBjb250YWluaW5nIHRoZSBiaW5hcnkgZGF0YSBvZiBhIFVDUFRy
aWUKKyAqIEBwYXJhbSBsZW5ndGggdGhlIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgYXQgZGF0
YTsKKyAqICAgICAgICAgICAgICAgY2FuIGJlIG1vcmUgdGhhbiBuZWNlc3NhcnkKKyAqIEBwYXJh
bSBwQWN0dWFsTGVuZ3RoIHJlY2VpdmVzIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzIGF0IGRh
dGEgdGFrZW4gdXAgYnkgdGhlIHRyaWUgZGF0YTsKKyAqICAgICAgICAgICAgICAgICAgICAgIGNh
biBiZSBOVUxMCisgKiBAcGFyYW0gcEVycm9yQ29kZSBhbiBpbi9vdXQgSUNVIFVFcnJvckNvZGUK
KyAqIEByZXR1cm4gdGhlIHRyaWUKKyAqCisgKiBAc2VlIHVtdXRhYmxlY3B0cmllX29wZW4KKyAq
IEBzZWUgdW11dGFibGVjcHRyaWVfYnVpbGRJbW11dGFibGUKKyAqIEBzZWUgdWNwdHJpZV90b0Jp
bmFyeQorICogQGRyYWZ0IElDVSA2MworICovCitVX0NBUEkgVUNQVHJpZSAqIFVfRVhQT1JUMgor
dWNwdHJpZV9vcGVuRnJvbUJpbmFyeShVQ1BUcmllVHlwZSB0eXBlLCBVQ1BUcmllVmFsdWVXaWR0
aCB2YWx1ZVdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpkYXRhLCBp
bnQzMl90IGxlbmd0aCwgaW50MzJfdCAqcEFjdHVhbExlbmd0aCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7CisKKy8qKgorICogQ2xvc2VzIGEgdHJpZSBh
bmQgcmVsZWFzZXMgYXNzb2NpYXRlZCBtZW1vcnkuCisgKgorICogQHBhcmFtIHRyaWUgdGhlIHRy
aWUKKyAqIEBkcmFmdCBJQ1UgNjMKKyAqLworVV9DQVBJIHZvaWQgVV9FWFBPUlQyCit1Y3B0cmll
X2Nsb3NlKFVDUFRyaWUgKnRyaWUpOworCisjaWYgVV9TSE9XX0NQTFVTUExVU19BUEkKKworVV9O
QU1FU1BBQ0VfQkVHSU4KKworLyoqCisgKiBcY2xhc3MgTG9jYWxVQ1BUcmllUG9pbnRlcgorICog
IlNtYXJ0IHBvaW50ZXIiIGNsYXNzLCBjbG9zZXMgYSBVQ1BUcmllIHZpYSB1Y3B0cmllX2Nsb3Nl
KCkuCisgKiBGb3IgbW9zdCBtZXRob2RzIHNlZSB0aGUgTG9jYWxQb2ludGVyQmFzZSBiYXNlIGNs
YXNzLgorICoKKyAqIEBzZWUgTG9jYWxQb2ludGVyQmFzZQorICogQHNlZSBMb2NhbFBvaW50ZXIK
KyAqIEBkcmFmdCBJQ1UgNjMKKyAqLworVV9ERUZJTkVfTE9DQUxfT1BFTl9QT0lOVEVSKExvY2Fs
VUNQVHJpZVBvaW50ZXIsIFVDUFRyaWUsIHVjcHRyaWVfY2xvc2UpOworCitVX05BTUVTUEFDRV9F
TkQKKworI2VuZGlmCisKKy8qKgorICogUmV0dXJucyB0aGUgdHJpZSB0eXBlLgorICoKKyAqIEBw
YXJhbSB0cmllIHRoZSB0cmllCisgKiBAcmV0dXJuIHRoZSB0cmllIHR5cGUKKyAqIEBzZWUgdWNw
dHJpZV9vcGVuRnJvbUJpbmFyeQorICogQHNlZSBVQ1BUUklFX1RZUEVfQU5ZCisgKiBAZHJhZnQg
SUNVIDYzCisgKi8KK1VfQ0FQSSBVQ1BUcmllVHlwZSBVX0VYUE9SVDIKK3VjcHRyaWVfZ2V0VHlw
ZShjb25zdCBVQ1BUcmllICp0cmllKTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Yg
Yml0cyBpbiBhIHRyaWUgZGF0YSB2YWx1ZS4KKyAqCisgKiBAcGFyYW0gdHJpZSB0aGUgdHJpZQor
ICogQHJldHVybiB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gYSB0cmllIGRhdGEgdmFsdWUKKyAqIEBz
ZWUgdWNwdHJpZV9vcGVuRnJvbUJpbmFyeQorICogQHNlZSBVQ1BUUklFX1ZBTFVFX0JJVFNfQU5Z
CisgKiBAZHJhZnQgSUNVIDYzCisgKi8KK1VfQ0FQSSBVQ1BUcmllVmFsdWVXaWR0aCBVX0VYUE9S
VDIKK3VjcHRyaWVfZ2V0VmFsdWVXaWR0aChjb25zdCBVQ1BUcmllICp0cmllKTsKKworLyoqCisg
KiBSZXR1cm5zIHRoZSB2YWx1ZSBmb3IgYSBjb2RlIHBvaW50IGFzIHN0b3JlZCBpbiB0aGUgdHJp
ZSwgd2l0aCByYW5nZSBjaGVja2luZy4KKyAqIFJldHVybnMgdGhlIHRyaWUgZXJyb3IgdmFsdWUg
aWYgYyBpcyBub3QgaW4gdGhlIHJhbmdlIDAuLlUrMTBGRkZGLgorICoKKyAqIEVhc2llciB0byB1
c2UgdGhhbiBVQ1BUUklFX0ZBU1RfR0VUKCkgYW5kIHNpbWlsYXIgbWFjcm9zIGJ1dCBzbG93ZXIu
CisgKiBFYXNpZXIgdG8gdXNlIGJlY2F1c2UsIHVubGlrZSB0aGUgbWFjcm9zLCB0aGlzIGZ1bmN0
aW9uIHdvcmtzIG9uIGFsbCBVQ1BUcmllCisgKiBvYmplY3RzLCBmb3IgYWxsIHR5cGVzIGFuZCB2
YWx1ZSB3aWR0aHMuCisgKgorICogQHBhcmFtIHRyaWUgdGhlIHRyaWUKKyAqIEBwYXJhbSBjIHRo
ZSBjb2RlIHBvaW50CisgKiBAcmV0dXJuIHRoZSB0cmllIHZhbHVlLAorICogICAgICAgICBvciB0
aGUgdHJpZSBlcnJvciB2YWx1ZSBpZiB0aGUgY29kZSBwb2ludCBpcyBub3QgaW4gdGhlIHJhbmdl
IDAuLlUrMTBGRkZGCisgKiBAZHJhZnQgSUNVIDYzCisgKi8KK1VfQ0FQSSB1aW50MzJfdCBVX0VY
UE9SVDIKK3VjcHRyaWVfZ2V0KGNvbnN0IFVDUFRyaWUgKnRyaWUsIFVDaGFyMzIgYyk7CisKKy8q
KgorICogUmV0dXJucyB0aGUgbGFzdCBjb2RlIHBvaW50IHN1Y2ggdGhhdCBhbGwgdGhvc2UgZnJv
bSBzdGFydCB0byB0aGVyZSBoYXZlIHRoZSBzYW1lIHZhbHVlLgorICogQ2FuIGJlIHVzZWQgdG8g
ZWZmaWNpZW50bHkgaXRlcmF0ZSBvdmVyIGFsbCBzYW1lLXZhbHVlIHJhbmdlcyBpbiBhIHRyaWUu
CisgKiAoVGhpcyBpcyBub3JtYWxseSBmYXN0ZXIgdGhhbiBpdGVyYXRpbmcgb3ZlciBjb2RlIHBv
aW50cyBhbmQgZ2V0KCl0aW5nIGVhY2ggdmFsdWUsCisgKiBidXQgbXVjaCBzbG93ZXIgdGhhbiBh
IGRhdGEgc3RydWN0dXJlIHRoYXQgc3RvcmVzIHJhbmdlcyBkaXJlY3RseS4pCisgKgorICogSWYg
dGhlIFVDUE1hcFZhbHVlRmlsdGVyIGZ1bmN0aW9uIHBvaW50ZXIgaXMgbm90IE5VTEwsIHRoZW4K
KyAqIHRoZSB2YWx1ZSB0byBiZSBkZWxpdmVyZWQgaXMgcGFzc2VkIHRocm91Z2ggdGhhdCBmdW5j
dGlvbiwgYW5kIHRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIGVuZAorICogb2YgdGhlIHJhbmdlIHdo
ZXJlIGFsbCB2YWx1ZXMgYXJlIG1vZGlmaWVkIHRvIHRoZSBzYW1lIGFjdHVhbCB2YWx1ZS4KKyAq
IFRoZSB2YWx1ZSBpcyB1bmNoYW5nZWQgaWYgdGhhdCBmdW5jdGlvbiBwb2ludGVyIGlzIE5VTEwu
CisgKgorICogRXhhbXBsZToKKyAqIFxjb2RlCisgKiBVQ2hhcjMyIHN0YXJ0ID0gMCwgZW5kOwor
ICogdWludDMyX3QgdmFsdWU7CisgKiB3aGlsZSAoKGVuZCA9IHVjcHRyaWVfZ2V0UmFuZ2UodHJp
ZSwgc3RhcnQsIFVDUE1BUF9SQU5HRV9OT1JNQUwsIDAsCisgKiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTlVMTCwgTlVMTCwgJnZhbHVlKSkgPj0gMCkgeworICogICAgIC8vIFdvcmsg
d2l0aCB0aGUgcmFuZ2Ugc3RhcnQuLmVuZCBhbmQgaXRzIHZhbHVlLgorICogICAgIHN0YXJ0ID0g
ZW5kICsgMTsKKyAqIH0KKyAqIFxlbmRjb2RlCisgKgorICogQHBhcmFtIHRyaWUgdGhlIHRyaWUK
KyAqIEBwYXJhbSBzdGFydCByYW5nZSBzdGFydAorICogQHBhcmFtIG9wdGlvbiBkZWZpbmVzIHdo
ZXRoZXIgc3Vycm9nYXRlcyBhcmUgdHJlYXRlZCBub3JtYWxseSwKKyAqICAgICAgICAgICAgICAg
b3IgYXMgaGF2aW5nIHRoZSBzdXJyb2dhdGVWYWx1ZTsgdXN1YWxseSBVQ1BNQVBfUkFOR0VfTk9S
TUFMCisgKiBAcGFyYW0gc3Vycm9nYXRlVmFsdWUgdmFsdWUgZm9yIHN1cnJvZ2F0ZXM7IGlnbm9y
ZWQgaWYgb3B0aW9uPT1VQ1BNQVBfUkFOR0VfTk9STUFMCisgKiBAcGFyYW0gZmlsdGVyIGEgcG9p
bnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgbWF5IG1vZGlmeSB0aGUgdHJpZSBkYXRhIHZhbHVlLAor
ICogICAgIG9yIE5VTEwgaWYgdGhlIHZhbHVlcyBmcm9tIHRoZSB0cmllIGFyZSB0byBiZSB1c2Vk
IHVubW9kaWZpZWQKKyAqIEBwYXJhbSBjb250ZXh0IGFuIG9wYXF1ZSBwb2ludGVyIHRoYXQgaXMg
cGFzc2VkIG9uIHRvIHRoZSBmaWx0ZXIgZnVuY3Rpb24KKyAqIEBwYXJhbSBwVmFsdWUgaWYgbm90
IE5VTEwsIHJlY2VpdmVzIHRoZSB2YWx1ZSB0aGF0IGV2ZXJ5IGNvZGUgcG9pbnQgc3RhcnQuLmVu
ZCBoYXM7CisgKiAgICAgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBieSBmaWx0ZXIoY29udGV4dCwg
dHJpZSB2YWx1ZSkKKyAqICAgICBpZiB0aGF0IGZ1bmN0aW9uIHBvaW50ZXIgaXMgbm90IE5VTEwK
KyAqIEByZXR1cm4gdGhlIHJhbmdlIGVuZCBjb2RlIHBvaW50LCBvciAtMSBpZiBzdGFydCBpcyBu
b3QgYSB2YWxpZCBjb2RlIHBvaW50CisgKiBAZHJhZnQgSUNVIDYzCisgKi8KK1VfQ0FQSSBVQ2hh
cjMyIFVfRVhQT1JUMgordWNwdHJpZV9nZXRSYW5nZShjb25zdCBVQ1BUcmllICp0cmllLCBVQ2hh
cjMyIHN0YXJ0LAorICAgICAgICAgICAgICAgICBVQ1BNYXBSYW5nZU9wdGlvbiBvcHRpb24sIHVp
bnQzMl90IHN1cnJvZ2F0ZVZhbHVlLAorICAgICAgICAgICAgICAgICBVQ1BNYXBWYWx1ZUZpbHRl
ciAqZmlsdGVyLCBjb25zdCB2b2lkICpjb250ZXh0LCB1aW50MzJfdCAqcFZhbHVlKTsKKworLyoq
CisgKiBXcml0ZXMgYSBtZW1vcnktbWFwcGFibGUgZm9ybSBvZiB0aGUgdHJpZSBpbnRvIDMyLWJp
dCBhbGlnbmVkIG1lbW9yeS4KKyAqIEludmVyc2Ugb2YgdWNwdHJpZV9vcGVuRnJvbUJpbmFyeSgp
LgorICoKKyAqIEBwYXJhbSB0cmllIHRoZSB0cmllCisgKiBAcGFyYW0gZGF0YSBhIHBvaW50ZXIg
dG8gMzItYml0LWFsaWduZWQgbWVtb3J5IHRvIGJlIGZpbGxlZCB3aXRoIHRoZSB0cmllIGRhdGE7
CisgKiAgICAgICAgICAgICBjYW4gYmUgTlVMTCBpZiBjYXBhY2l0eT09MAorICogQHBhcmFtIGNh
cGFjaXR5IHRoZSBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGF0IGRhdGEsIG9yIDAgZm9yIHB1
cmUgcHJlZmxpZ2h0aW5nCisgKiBAcGFyYW0gcEVycm9yQ29kZSBhbiBpbi9vdXQgSUNVIFVFcnJv
ckNvZGU7CisgKiAgICAgICAgICAgICAgICAgICBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUiBpZiB0
aGUgY2FwYWNpdHkgaXMgdG9vIHNtYWxsCisgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMg
d3JpdHRlbiBvciAoaWYgYnVmZmVyIG92ZXJmbG93KSBuZWVkZWQgZm9yIHRoZSB0cmllCisgKgor
ICogQHNlZSB1Y3B0cmllX29wZW5Gcm9tQmluYXJ5KCkKKyAqIEBkcmFmdCBJQ1UgNjMKKyAqLwor
VV9DQVBJIGludDMyX3QgVV9FWFBPUlQyCit1Y3B0cmllX3RvQmluYXJ5KGNvbnN0IFVDUFRyaWUg
KnRyaWUsIHZvaWQgKmRhdGEsIGludDMyX3QgY2FwYWNpdHksIFVFcnJvckNvZGUgKnBFcnJvckNv
ZGUpOworCisvKioKKyAqIE1hY3JvIHBhcmFtZXRlciB2YWx1ZSBmb3IgYSB0cmllIHdpdGggMTYt
Yml0IGRhdGEgdmFsdWVzLgorICogVXNlIHRoZSBuYW1lIG9mIHRoaXMgbWFjcm8gYXMgYSAiZGF0
YUFjY2VzcyIgcGFyYW1ldGVyIGluIG90aGVyIG1hY3Jvcy4KKyAqIERvIG5vdCB1c2UgdGhpcyBt
YWNybyBpbiBhbnkgb3RoZXIgd2F5LgorICoKKyAqIEBzZWUgVUNQVFJJRV9WQUxVRV9CSVRTXzE2
CisgKiBAZHJhZnQgSUNVIDYzCisgKi8KKyNkZWZpbmUgVUNQVFJJRV8xNih0cmllLCBpKSAoKHRy
aWUpLT5kYXRhLnB0cjE2W2ldKQorCisvKioKKyAqIE1hY3JvIHBhcmFtZXRlciB2YWx1ZSBmb3Ig
YSB0cmllIHdpdGggMzItYml0IGRhdGEgdmFsdWVzLgorICogVXNlIHRoZSBuYW1lIG9mIHRoaXMg
bWFjcm8gYXMgYSAiZGF0YUFjY2VzcyIgcGFyYW1ldGVyIGluIG90aGVyIG1hY3Jvcy4KKyAqIERv
IG5vdCB1c2UgdGhpcyBtYWNybyBpbiBhbnkgb3RoZXIgd2F5LgorICoKKyAqIEBzZWUgVUNQVFJJ
RV9WQUxVRV9CSVRTXzMyCisgKiBAZHJhZnQgSUNVIDYzCisgKi8KKyNkZWZpbmUgVUNQVFJJRV8z
Mih0cmllLCBpKSAoKHRyaWUpLT5kYXRhLnB0cjMyW2ldKQorCisvKioKKyAqIE1hY3JvIHBhcmFt
ZXRlciB2YWx1ZSBmb3IgYSB0cmllIHdpdGggOC1iaXQgZGF0YSB2YWx1ZXMuCisgKiBVc2UgdGhl
IG5hbWUgb2YgdGhpcyBtYWNybyBhcyBhICJkYXRhQWNjZXNzIiBwYXJhbWV0ZXIgaW4gb3RoZXIg
bWFjcm9zLgorICogRG8gbm90IHVzZSB0aGlzIG1hY3JvIGluIGFueSBvdGhlciB3YXkuCisgKgor
ICogQHNlZSBVQ1BUUklFX1ZBTFVFX0JJVFNfOAorICogQGRyYWZ0IElDVSA2MworICovCisjZGVm
aW5lIFVDUFRSSUVfOCh0cmllLCBpKSAoKHRyaWUpLT5kYXRhLnB0cjhbaV0pCisKKy8qKgorICog
UmV0dXJucyBhIHRyaWUgdmFsdWUgZm9yIGEgY29kZSBwb2ludCwgd2l0aCByYW5nZSBjaGVja2lu
Zy4KKyAqIFJldHVybnMgdGhlIHRyaWUgZXJyb3IgdmFsdWUgaWYgYyBpcyBub3QgaW4gdGhlIHJh
bmdlIDAuLlUrMTBGRkZGLgorICoKKyAqIEBwYXJhbSB0cmllIChjb25zdCBVQ1BUcmllICosIGlu
KSB0aGUgdHJpZTsgbXVzdCBoYXZlIHR5cGUgVUNQVFJJRV9UWVBFX0ZBU1QKKyAqIEBwYXJhbSBk
YXRhQWNjZXNzIFVDUFRSSUVfMTYsIFVDUFRSSUVfMzIsIG9yIFVDUFRSSUVfOCBhY2NvcmRpbmcg
dG8gdGhlIHRyaWXigJlzIHZhbHVlIHdpZHRoCisgKiBAcGFyYW0gYyAoVUNoYXIzMiwgaW4pIHRo
ZSBpbnB1dCBjb2RlIHBvaW50CisgKiBAcmV0dXJuIFRoZSBjb2RlIHBvaW50J3MgdHJpZSB2YWx1
ZS4KKyAqIEBkcmFmdCBJQ1UgNjMKKyAqLworI2RlZmluZSBVQ1BUUklFX0ZBU1RfR0VUKHRyaWUs
IGRhdGFBY2Nlc3MsIGMpIGRhdGFBY2Nlc3ModHJpZSwgX1VDUFRSSUVfQ1BfSU5ERVgodHJpZSwg
MHhmZmZmLCBjKSkKKworLyoqCisgKiBSZXR1cm5zIGEgMTYtYml0IHRyaWUgdmFsdWUgZm9yIGEg
Y29kZSBwb2ludCwgd2l0aCByYW5nZSBjaGVja2luZy4KKyAqIFJldHVybnMgdGhlIHRyaWUgZXJy
b3IgdmFsdWUgaWYgYyBpcyBub3QgaW4gdGhlIHJhbmdlIFUrMDAwMC4uVSsxMEZGRkYuCisgKgor
ICogQHBhcmFtIHRyaWUgKGNvbnN0IFVDUFRyaWUgKiwgaW4pIHRoZSB0cmllOyBtdXN0IGhhdmUg
dHlwZSBVQ1BUUklFX1RZUEVfU01BTEwKKyAqIEBwYXJhbSBkYXRhQWNjZXNzIFVDUFRSSUVfMTYs
IFVDUFRSSUVfMzIsIG9yIFVDUFRSSUVfOCBhY2NvcmRpbmcgdG8gdGhlIHRyaWXigJlzIHZhbHVl
IHdpZHRoCisgKiBAcGFyYW0gYyAoVUNoYXIzMiwgaW4pIHRoZSBpbnB1dCBjb2RlIHBvaW50Cisg
KiBAcmV0dXJuIFRoZSBjb2RlIHBvaW50J3MgdHJpZSB2YWx1ZS4KKyAqIEBkcmFmdCBJQ1UgNjMK
KyAqLworI2RlZmluZSBVQ1BUUklFX1NNQUxMX0dFVCh0cmllLCBkYXRhQWNjZXNzLCBjKSBcCisg
ICAgZGF0YUFjY2Vzcyh0cmllLCBfVUNQVFJJRV9DUF9JTkRFWCh0cmllLCBVQ1BUUklFX1NNQUxM
X01BWCwgYykpCisKKy8qKgorICogVVRGLTE2OiBSZWFkcyB0aGUgbmV4dCBjb2RlIHBvaW50IChV
Q2hhcjMyIGMsIG91dCksIHBvc3QtaW5jcmVtZW50cyBzcmMsCisgKiBhbmQgZ2V0cyBhIHZhbHVl
IGZyb20gdGhlIHRyaWUuCisgKiBTZXRzIHRoZSB0cmllIGVycm9yIHZhbHVlIGlmIGMgaXMgYW4g
dW5wYWlyZWQgc3Vycm9nYXRlLgorICoKKyAqIEBwYXJhbSB0cmllIChjb25zdCBVQ1BUcmllICos
IGluKSB0aGUgdHJpZTsgbXVzdCBoYXZlIHR5cGUgVUNQVFJJRV9UWVBFX0ZBU1QKKyAqIEBwYXJh
bSBkYXRhQWNjZXNzIFVDUFRSSUVfMTYsIFVDUFRSSUVfMzIsIG9yIFVDUFRSSUVfOCBhY2NvcmRp
bmcgdG8gdGhlIHRyaWXigJlzIHZhbHVlIHdpZHRoCisgKiBAcGFyYW0gc3JjIChjb25zdCBVQ2hh
ciAqLCBpbi9vdXQpIHRoZSBzb3VyY2UgdGV4dCBwb2ludGVyCisgKiBAcGFyYW0gbGltaXQgKGNv
bnN0IFVDaGFyICosIGluKSB0aGUgbGltaXQgcG9pbnRlciBmb3IgdGhlIHRleHQsIG9yIE5VTEwg
aWYgTlVMLXRlcm1pbmF0ZWQKKyAqIEBwYXJhbSBjIChVQ2hhcjMyLCBvdXQpIHZhcmlhYmxlIGZv
ciB0aGUgY29kZSBwb2ludAorICogQHBhcmFtIHJlc3VsdCAob3V0KSB2YXJpYWJsZSBmb3IgdGhl
IHRyaWUgbG9va3VwIHJlc3VsdAorICogQGRyYWZ0IElDVSA2MworICovCisjZGVmaW5lIFVDUFRS
SUVfRkFTVF9VMTZfTkVYVCh0cmllLCBkYXRhQWNjZXNzLCBzcmMsIGxpbWl0LCBjLCByZXN1bHQp
IHsgXAorICAgIChjKSA9ICooc3JjKSsrOyBcCisgICAgaW50MzJfdCBfX2luZGV4OyBcCisgICAg
aWYgKCFVMTZfSVNfU1VSUk9HQVRFKGMpKSB7IFwKKyAgICAgICAgX19pbmRleCA9IF9VQ1BUUklF
X0ZBU1RfSU5ERVgodHJpZSwgYyk7IFwKKyAgICB9IGVsc2UgeyBcCisgICAgICAgIHVpbnQxNl90
IF9fYzI7IFwKKyAgICAgICAgaWYgKFUxNl9JU19TVVJST0dBVEVfTEVBRChjKSAmJiAoc3JjKSAh
PSAobGltaXQpICYmIFUxNl9JU19UUkFJTChfX2MyID0gKihzcmMpKSkgeyBcCisgICAgICAgICAg
ICArKyhzcmMpOyBcCisgICAgICAgICAgICAoYykgPSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkoKGMp
LCBfX2MyKTsgXAorICAgICAgICAgICAgX19pbmRleCA9IF9VQ1BUUklFX1NNQUxMX0lOREVYKHRy
aWUsIGMpOyBcCisgICAgICAgIH0gZWxzZSB7IFwKKyAgICAgICAgICAgIF9faW5kZXggPSAodHJp
ZSktPmRhdGFMZW5ndGggLSBVQ1BUUklFX0VSUk9SX1ZBTFVFX05FR19EQVRBX09GRlNFVDsgXAor
ICAgICAgICB9IFwKKyAgICB9IFwKKyAgICAocmVzdWx0KSA9IGRhdGFBY2Nlc3ModHJpZSwgX19p
bmRleCk7IFwKK30KKworLyoqCisgKiBVVEYtMTY6IFJlYWRzIHRoZSBwcmV2aW91cyBjb2RlIHBv
aW50IChVQ2hhcjMyIGMsIG91dCksIHByZS1kZWNyZW1lbnRzIHNyYywKKyAqIGFuZCBnZXRzIGEg
dmFsdWUgZnJvbSB0aGUgdHJpZS4KKyAqIFNldHMgdGhlIHRyaWUgZXJyb3IgdmFsdWUgaWYgYyBp
cyBhbiB1bnBhaXJlZCBzdXJyb2dhdGUuCisgKgorICogQHBhcmFtIHRyaWUgKGNvbnN0IFVDUFRy
aWUgKiwgaW4pIHRoZSB0cmllOyBtdXN0IGhhdmUgdHlwZSBVQ1BUUklFX1RZUEVfRkFTVAorICog
QHBhcmFtIGRhdGFBY2Nlc3MgVUNQVFJJRV8xNiwgVUNQVFJJRV8zMiwgb3IgVUNQVFJJRV84IGFj
Y29yZGluZyB0byB0aGUgdHJpZeKAmXMgdmFsdWUgd2lkdGgKKyAqIEBwYXJhbSBzdGFydCAoY29u
c3QgVUNoYXIgKiwgaW4pIHRoZSBzdGFydCBwb2ludGVyIGZvciB0aGUgdGV4dAorICogQHBhcmFt
IHNyYyAoY29uc3QgVUNoYXIgKiwgaW4vb3V0KSB0aGUgc291cmNlIHRleHQgcG9pbnRlcgorICog
QHBhcmFtIGMgKFVDaGFyMzIsIG91dCkgdmFyaWFibGUgZm9yIHRoZSBjb2RlIHBvaW50CisgKiBA
cGFyYW0gcmVzdWx0IChvdXQpIHZhcmlhYmxlIGZvciB0aGUgdHJpZSBsb29rdXAgcmVzdWx0Cisg
KiBAZHJhZnQgSUNVIDYzCisgKi8KKyNkZWZpbmUgVUNQVFJJRV9GQVNUX1UxNl9QUkVWKHRyaWUs
IGRhdGFBY2Nlc3MsIHN0YXJ0LCBzcmMsIGMsIHJlc3VsdCkgeyBcCisgICAgKGMpID0gKi0tKHNy
Yyk7IFwKKyAgICBpbnQzMl90IF9faW5kZXg7IFwKKyAgICBpZiAoIVUxNl9JU19TVVJST0dBVEUo
YykpIHsgXAorICAgICAgICBfX2luZGV4ID0gX1VDUFRSSUVfRkFTVF9JTkRFWCh0cmllLCBjKTsg
XAorICAgIH0gZWxzZSB7IFwKKyAgICAgICAgdWludDE2X3QgX19jMjsgXAorICAgICAgICBpZiAo
VTE2X0lTX1NVUlJPR0FURV9UUkFJTChjKSAmJiAoc3JjKSAhPSAoc3RhcnQpICYmIFUxNl9JU19M
RUFEKF9fYzIgPSAqKChzcmMpIC0gMSkpKSB7IFwKKyAgICAgICAgICAgIC0tKHNyYyk7IFwKKyAg
ICAgICAgICAgIChjKSA9IFUxNl9HRVRfU1VQUExFTUVOVEFSWShfX2MyLCAoYykpOyBcCisgICAg
ICAgICAgICBfX2luZGV4ID0gX1VDUFRSSUVfU01BTExfSU5ERVgodHJpZSwgYyk7IFwKKyAgICAg
ICAgfSBlbHNlIHsgXAorICAgICAgICAgICAgX19pbmRleCA9ICh0cmllKS0+ZGF0YUxlbmd0aCAt
IFVDUFRSSUVfRVJST1JfVkFMVUVfTkVHX0RBVEFfT0ZGU0VUOyBcCisgICAgICAgIH0gXAorICAg
IH0gXAorICAgIChyZXN1bHQpID0gZGF0YUFjY2Vzcyh0cmllLCBfX2luZGV4KTsgXAorfQorCisv
KioKKyAqIFVURi04OiBQb3N0LWluY3JlbWVudHMgc3JjIGFuZCBnZXRzIGEgdmFsdWUgZnJvbSB0
aGUgdHJpZS4KKyAqIFNldHMgdGhlIHRyaWUgZXJyb3IgdmFsdWUgZm9yIGFuIGlsbC1mb3JtZWQg
Ynl0ZSBzZXF1ZW5jZS4KKyAqCisgKiBVbmxpa2UgVUNQVFJJRV9GQVNUX1UxNl9ORVhUKCkgdGhp
cyBVVEYtOCBtYWNybyBkb2VzIG5vdCBwcm92aWRlIHRoZSBjb2RlIHBvaW50CisgKiBiZWNhdXNl
IGl0IHdvdWxkIGJlIG1vcmUgd29yayB0byBkbyBzbyBhbmQgaXMgb2Z0ZW4gbm90IG5lZWRlZC4K
KyAqIElmIHRoZSB0cmllIHZhbHVlIGRpZmZlcnMgZnJvbSB0aGUgZXJyb3IgdmFsdWUsIHRoZW4g
dGhlIGJ5dGUgc2VxdWVuY2UgaXMgd2VsbC1mb3JtZWQsCisgKiBhbmQgdGhlIGNvZGUgcG9pbnQg
Y2FuIGJlIGFzc2VtYmxlZCB3aXRob3V0IHJldmFsaWRhdGlvbi4KKyAqCisgKiBAcGFyYW0gdHJp
ZSAoY29uc3QgVUNQVHJpZSAqLCBpbikgdGhlIHRyaWU7IG11c3QgaGF2ZSB0eXBlIFVDUFRSSUVf
VFlQRV9GQVNUCisgKiBAcGFyYW0gZGF0YUFjY2VzcyBVQ1BUUklFXzE2LCBVQ1BUUklFXzMyLCBv
ciBVQ1BUUklFXzggYWNjb3JkaW5nIHRvIHRoZSB0cmll4oCZcyB2YWx1ZSB3aWR0aAorICogQHBh
cmFtIHNyYyAoY29uc3QgY2hhciAqLCBpbi9vdXQpIHRoZSBzb3VyY2UgdGV4dCBwb2ludGVyCisg
KiBAcGFyYW0gbGltaXQgKGNvbnN0IGNoYXIgKiwgaW4pIHRoZSBsaW1pdCBwb2ludGVyIGZvciB0
aGUgdGV4dCAobXVzdCBub3QgYmUgTlVMTCkKKyAqIEBwYXJhbSByZXN1bHQgKG91dCkgdmFyaWFi
bGUgZm9yIHRoZSB0cmllIGxvb2t1cCByZXN1bHQKKyAqIEBkcmFmdCBJQ1UgNjMKKyAqLworI2Rl
ZmluZSBVQ1BUUklFX0ZBU1RfVThfTkVYVCh0cmllLCBkYXRhQWNjZXNzLCBzcmMsIGxpbWl0LCBy
ZXN1bHQpIHsgXAorICAgIGludDMyX3QgX19sZWFkID0gKHVpbnQ4X3QpKihzcmMpKys7IFwKKyAg
ICBpZiAoIVU4X0lTX1NJTkdMRShfX2xlYWQpKSB7IFwKKyAgICAgICAgdWludDhfdCBfX3QxLCBf
X3QyLCBfX3QzOyBcCisgICAgICAgIGlmICgoc3JjKSAhPSAobGltaXQpICYmIFwKKyAgICAgICAg
ICAgIChfX2xlYWQgPj0gMHhlMCA/IFwKKyAgICAgICAgICAgICAgICBfX2xlYWQgPCAweGYwID8g
IC8qIFUrMDgwMC4uVStGRkZGIGV4Y2VwdCBzdXJyb2dhdGVzICovIFwKKyAgICAgICAgICAgICAg
ICAgICAgVThfTEVBRDNfVDFfQklUU1tfX2xlYWQgJj0gMHhmXSAmICgxIDw8ICgoX190MSA9ICoo
c3JjKSkgPj4gNSkpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgKysoc3JjKSAhPSAobGltaXQp
ICYmIChfX3QyID0gKihzcmMpIC0gMHg4MCkgPD0gMHgzZiAmJiBcCisgICAgICAgICAgICAgICAg
ICAgIChfX2xlYWQgPSAoKGludDMyX3QpKHRyaWUpLT5pbmRleFsoX19sZWFkIDw8IDYpICsgKF9f
dDEgJiAweDNmKV0pICsgX190MiwgMSkgXAorICAgICAgICAgICAgICAgIDogIC8qIFUrMTAwMDAu
LlUrMTBGRkZGICovIFwKKyAgICAgICAgICAgICAgICAgICAgKF9fbGVhZCAtPSAweGYwKSA8PSA0
ICYmIFwKKyAgICAgICAgICAgICAgICAgICAgVThfTEVBRDRfVDFfQklUU1soX190MSA9ICooc3Jj
KSkgPj4gNF0gJiAoMSA8PCBfX2xlYWQpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgKF9fbGVh
ZCA9IChfX2xlYWQgPDwgNikgfCAoX190MSAmIDB4M2YpLCArKyhzcmMpICE9IChsaW1pdCkpICYm
IFwKKyAgICAgICAgICAgICAgICAgICAgKF9fdDIgPSAqKHNyYykgLSAweDgwKSA8PSAweDNmICYm
IFwKKyAgICAgICAgICAgICAgICAgICAgKysoc3JjKSAhPSAobGltaXQpICYmIChfX3QzID0gKihz
cmMpIC0gMHg4MCkgPD0gMHgzZiAmJiBcCisgICAgICAgICAgICAgICAgICAgIChfX2xlYWQgPSBf
X2xlYWQgPj0gKHRyaWUpLT5zaGlmdGVkMTJIaWdoU3RhcnQgPyBcCisgICAgICAgICAgICAgICAg
ICAgICAgICAodHJpZSktPmRhdGFMZW5ndGggLSBVQ1BUUklFX0hJR0hfVkFMVUVfTkVHX0RBVEFf
T0ZGU0VUIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgdWNwdHJpZV9pbnRlcm5hbFNtYWxs
VThJbmRleCgodHJpZSksIF9fbGVhZCwgX190MiwgX190MyksIDEpIFwKKyAgICAgICAgICAgIDog
IC8qIFUrMDA4MC4uVSswN0ZGICovIFwKKyAgICAgICAgICAgICAgICBfX2xlYWQgPj0gMHhjMiAm
JiAoX190MSA9ICooc3JjKSAtIDB4ODApIDw9IDB4M2YgJiYgXAorICAgICAgICAgICAgICAgIChf
X2xlYWQgPSAoaW50MzJfdCkodHJpZSktPmluZGV4W19fbGVhZCAmIDB4MWZdICsgX190MSwgMSkp
KSB7IFwKKyAgICAgICAgICAgICsrKHNyYyk7IFwKKyAgICAgICAgfSBlbHNlIHsgXAorICAgICAg
ICAgICAgX19sZWFkID0gKHRyaWUpLT5kYXRhTGVuZ3RoIC0gVUNQVFJJRV9FUlJPUl9WQUxVRV9O
RUdfREFUQV9PRkZTRVQ7ICAvKiBpbGwtZm9ybWVkKi8gXAorICAgICAgICB9IFwKKyAgICB9IFwK
KyAgICAocmVzdWx0KSA9IGRhdGFBY2Nlc3ModHJpZSwgX19sZWFkKTsgXAorfQorCisvKioKKyAq
IFVURi04OiBQcmUtZGVjcmVtZW50cyBzcmMgYW5kIGdldHMgYSB2YWx1ZSBmcm9tIHRoZSB0cmll
LgorICogU2V0cyB0aGUgdHJpZSBlcnJvciB2YWx1ZSBmb3IgYW4gaWxsLWZvcm1lZCBieXRlIHNl
cXVlbmNlLgorICoKKyAqIFVubGlrZSBVQ1BUUklFX0ZBU1RfVTE2X1BSRVYoKSB0aGlzIFVURi04
IG1hY3JvIGRvZXMgbm90IHByb3ZpZGUgdGhlIGNvZGUgcG9pbnQKKyAqIGJlY2F1c2UgaXQgd291
bGQgYmUgbW9yZSB3b3JrIHRvIGRvIHNvIGFuZCBpcyBvZnRlbiBub3QgbmVlZGVkLgorICogSWYg
dGhlIHRyaWUgdmFsdWUgZGlmZmVycyBmcm9tIHRoZSBlcnJvciB2YWx1ZSwgdGhlbiB0aGUgYnl0
ZSBzZXF1ZW5jZSBpcyB3ZWxsLWZvcm1lZCwKKyAqIGFuZCB0aGUgY29kZSBwb2ludCBjYW4gYmUg
YXNzZW1ibGVkIHdpdGhvdXQgcmV2YWxpZGF0aW9uLgorICoKKyAqIEBwYXJhbSB0cmllIChjb25z
dCBVQ1BUcmllICosIGluKSB0aGUgdHJpZTsgbXVzdCBoYXZlIHR5cGUgVUNQVFJJRV9UWVBFX0ZB
U1QKKyAqIEBwYXJhbSBkYXRhQWNjZXNzIFVDUFRSSUVfMTYsIFVDUFRSSUVfMzIsIG9yIFVDUFRS
SUVfOCBhY2NvcmRpbmcgdG8gdGhlIHRyaWXigJlzIHZhbHVlIHdpZHRoCisgKiBAcGFyYW0gc3Rh
cnQgKGNvbnN0IGNoYXIgKiwgaW4pIHRoZSBzdGFydCBwb2ludGVyIGZvciB0aGUgdGV4dAorICog
QHBhcmFtIHNyYyAoY29uc3QgY2hhciAqLCBpbi9vdXQpIHRoZSBzb3VyY2UgdGV4dCBwb2ludGVy
CisgKiBAcGFyYW0gcmVzdWx0IChvdXQpIHZhcmlhYmxlIGZvciB0aGUgdHJpZSBsb29rdXAgcmVz
dWx0CisgKiBAZHJhZnQgSUNVIDYzCisgKi8KKyNkZWZpbmUgVUNQVFJJRV9GQVNUX1U4X1BSRVYo
dHJpZSwgZGF0YUFjY2Vzcywgc3RhcnQsIHNyYywgcmVzdWx0KSB7IFwKKyAgICBpbnQzMl90IF9f
aW5kZXggPSAodWludDhfdCkqLS0oc3JjKTsgXAorICAgIGlmICghVThfSVNfU0lOR0xFKF9faW5k
ZXgpKSB7IFwKKyAgICAgICAgX19pbmRleCA9IHVjcHRyaWVfaW50ZXJuYWxVOFByZXZJbmRleCgo
dHJpZSksIF9faW5kZXgsIChjb25zdCB1aW50OF90ICopKHN0YXJ0KSwgXAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1aW50OF90ICopKHNyYykp
OyBcCisgICAgICAgIChzcmMpIC09IF9faW5kZXggJiA3OyBcCisgICAgICAgIF9faW5kZXggPj49
IDM7IFwKKyAgICB9IFwKKyAgICAocmVzdWx0KSA9IGRhdGFBY2Nlc3ModHJpZSwgX19pbmRleCk7
IFwKK30KKworLyoqCisgKiBSZXR1cm5zIGEgdHJpZSB2YWx1ZSBmb3IgYW4gQVNDSUkgY29kZSBw
b2ludCwgd2l0aG91dCByYW5nZSBjaGVja2luZy4KKyAqCisgKiBAcGFyYW0gdHJpZSAoY29uc3Qg
VUNQVHJpZSAqLCBpbikgdGhlIHRyaWUgKG9mIGVpdGhlciBmYXN0IG9yIHNtYWxsIHR5cGUpCisg
KiBAcGFyYW0gZGF0YUFjY2VzcyBVQ1BUUklFXzE2LCBVQ1BUUklFXzMyLCBvciBVQ1BUUklFXzgg
YWNjb3JkaW5nIHRvIHRoZSB0cmll4oCZcyB2YWx1ZSB3aWR0aAorICogQHBhcmFtIGMgKFVDaGFy
MzIsIGluKSB0aGUgaW5wdXQgY29kZSBwb2ludDsgbXVzdCBiZSBVKzAwMDAuLlUrMDA3RgorICog
QHJldHVybiBUaGUgQVNDSUkgY29kZSBwb2ludCdzIHRyaWUgdmFsdWUuCisgKiBAZHJhZnQgSUNV
IDYzCisgKi8KKyNkZWZpbmUgVUNQVFJJRV9BU0NJSV9HRVQodHJpZSwgZGF0YUFjY2VzcywgYykg
ZGF0YUFjY2Vzcyh0cmllLCBjKQorCisvKioKKyAqIFJldHVybnMgYSB0cmllIHZhbHVlIGZvciBh
IEJNUCBjb2RlIHBvaW50IChVKzAwMDAuLlUrRkZGRiksIHdpdGhvdXQgcmFuZ2UgY2hlY2tpbmcu
CisgKiBDYW4gYmUgdXNlZCB0byBsb29rIHVwIGEgdmFsdWUgZm9yIGEgVVRGLTE2IGNvZGUgdW5p
dCBpZiBvdGhlciBwYXJ0cyBvZgorICogdGhlIHN0cmluZyBwcm9jZXNzaW5nIGNoZWNrIGZvciBz
dXJyb2dhdGVzLgorICoKKyAqIEBwYXJhbSB0cmllIChjb25zdCBVQ1BUcmllICosIGluKSB0aGUg
dHJpZTsgbXVzdCBoYXZlIHR5cGUgVUNQVFJJRV9UWVBFX0ZBU1QKKyAqIEBwYXJhbSBkYXRhQWNj
ZXNzIFVDUFRSSUVfMTYsIFVDUFRSSUVfMzIsIG9yIFVDUFRSSUVfOCBhY2NvcmRpbmcgdG8gdGhl
IHRyaWXigJlzIHZhbHVlIHdpZHRoCisgKiBAcGFyYW0gYyAoVUNoYXIzMiwgaW4pIHRoZSBpbnB1
dCBjb2RlIHBvaW50LCBtdXN0IGJlIFUrMDAwMC4uVStGRkZGCisgKiBAcmV0dXJuIFRoZSBCTVAg
Y29kZSBwb2ludCdzIHRyaWUgdmFsdWUuCisgKiBAZHJhZnQgSUNVIDYzCisgKi8KKyNkZWZpbmUg
VUNQVFJJRV9GQVNUX0JNUF9HRVQodHJpZSwgZGF0YUFjY2VzcywgYykgZGF0YUFjY2Vzcyh0cmll
LCBfVUNQVFJJRV9GQVNUX0lOREVYKHRyaWUsIGMpKQorCisvKioKKyAqIFJldHVybnMgYSB0cmll
IHZhbHVlIGZvciBhIHN1cHBsZW1lbnRhcnkgY29kZSBwb2ludCAoVSsxMDAwMC4uVSsxMEZGRkYp
LAorICogd2l0aG91dCByYW5nZSBjaGVja2luZy4KKyAqCisgKiBAcGFyYW0gdHJpZSAoY29uc3Qg
VUNQVHJpZSAqLCBpbikgdGhlIHRyaWU7IG11c3QgaGF2ZSB0eXBlIFVDUFRSSUVfVFlQRV9GQVNU
CisgKiBAcGFyYW0gZGF0YUFjY2VzcyBVQ1BUUklFXzE2LCBVQ1BUUklFXzMyLCBvciBVQ1BUUklF
XzggYWNjb3JkaW5nIHRvIHRoZSB0cmll4oCZcyB2YWx1ZSB3aWR0aAorICogQHBhcmFtIGMgKFVD
aGFyMzIsIGluKSB0aGUgaW5wdXQgY29kZSBwb2ludCwgbXVzdCBiZSBVKzEwMDAwLi5VKzEwRkZG
RgorICogQHJldHVybiBUaGUgc3VwcGxlbWVudGFyeSBjb2RlIHBvaW50J3MgdHJpZSB2YWx1ZS4K
KyAqIEBkcmFmdCBJQ1UgNjMKKyAqLworI2RlZmluZSBVQ1BUUklFX0ZBU1RfU1VQUF9HRVQodHJp
ZSwgZGF0YUFjY2VzcywgYykgZGF0YUFjY2Vzcyh0cmllLCBfVUNQVFJJRV9TTUFMTF9JTkRFWCh0
cmllLCBjKSkKKworLyogSW50ZXJuYWwgZGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmbmRlZiBVX0lOX0RPWFlH
RU4KKworLyoqCisgKiBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBjb25zdGFudHMuCisgKiBUaGVz
ZSBhcmUgbmVlZGVkIGZvciB0aGUgQVBJIG1hY3JvcywgYnV0IHVzZXJzIHNob3VsZCBub3QgdXNl
IHRoZXNlIGRpcmVjdGx5LgorICogQGludGVybmFsCisgKi8KK2VudW0geworICAgIC8qKiBAaW50
ZXJuYWwgKi8KKyAgICBVQ1BUUklFX0ZBU1RfU0hJRlQgPSA2LAorCisgICAgLyoqIE51bWJlciBv
ZiBlbnRyaWVzIGluIGEgZGF0YSBibG9jayBmb3IgY29kZSBwb2ludHMgYmVsb3cgdGhlIGZhc3Qg
bGltaXQuIDY0PTB4NDAgQGludGVybmFsICovCisgICAgVUNQVFJJRV9GQVNUX0RBVEFfQkxPQ0tf
TEVOR1RIID0gMSA8PCBVQ1BUUklFX0ZBU1RfU0hJRlQsCisKKyAgICAvKiogTWFzayBmb3IgZ2V0
dGluZyB0aGUgbG93ZXIgYml0cyBmb3IgdGhlIGluLWZhc3QtZGF0YS1ibG9jayBvZmZzZXQuIEBp
bnRlcm5hbCAqLworICAgIFVDUFRSSUVfRkFTVF9EQVRBX01BU0sgPSBVQ1BUUklFX0ZBU1RfREFU
QV9CTE9DS19MRU5HVEggLSAxLAorCisgICAgLyoqIEBpbnRlcm5hbCAqLworICAgIFVDUFRSSUVf
U01BTExfTUFYID0gMHhmZmYsCisKKyAgICAvKioKKyAgICAgKiBPZmZzZXQgZnJvbSBkYXRhTGVu
Z3RoICh0byBiZSBzdWJ0cmFjdGVkKSBmb3IgZmV0Y2hpbmcgdGhlCisgICAgICogdmFsdWUgcmV0
dXJuZWQgZm9yIG91dC1vZi1yYW5nZSBjb2RlIHBvaW50cyBhbmQgaWxsLWZvcm1lZCBVVEYtOC8x
Ni4KKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAgICBVQ1BUUklFX0VSUk9SX1ZBTFVFX05F
R19EQVRBX09GRlNFVCA9IDEsCisgICAgLyoqCisgICAgICogT2Zmc2V0IGZyb20gZGF0YUxlbmd0
aCAodG8gYmUgc3VidHJhY3RlZCkgZm9yIGZldGNoaW5nIHRoZQorICAgICAqIHZhbHVlIHJldHVy
bmVkIGZvciBjb2RlIHBvaW50cyBoaWdoU3RhcnQuLlUrMTBGRkZGLgorICAgICAqIEBpbnRlcm5h
bAorICAgICAqLworICAgIFVDUFRSSUVfSElHSF9WQUxVRV9ORUdfREFUQV9PRkZTRVQgPSAyCit9
OworCisvKiBJbnRlcm5hbCBmdW5jdGlvbnMgYW5kIG1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLy8gRG8gbm90IGNvbmRpdGlvbmFsaXplIHdp
dGggI2lmbmRlZiBVX0hJREVfSU5URVJOQUxfQVBJLCBuZWVkZWQgZm9yIHB1YmxpYyBBUEkKKwor
LyoqIEBpbnRlcm5hbCAqLworVV9JTlRFUk5BTCBpbnQzMl90IFVfRVhQT1JUMgordWNwdHJpZV9p
bnRlcm5hbFNtYWxsSW5kZXgoY29uc3QgVUNQVHJpZSAqdHJpZSwgVUNoYXIzMiBjKTsKKworLyoq
IEBpbnRlcm5hbCAqLworVV9JTlRFUk5BTCBpbnQzMl90IFVfRVhQT1JUMgordWNwdHJpZV9pbnRl
cm5hbFNtYWxsVThJbmRleChjb25zdCBVQ1BUcmllICp0cmllLCBpbnQzMl90IGx0MSwgdWludDhf
dCB0MiwgdWludDhfdCB0Myk7CisKKy8qKgorICogSW50ZXJuYWwgZnVuY3Rpb24gZm9yIHBhcnQg
b2YgdGhlIFVDUFRSSUVfRkFTVF9VOF9QUkVWeHgoKSBtYWNybyBpbXBsZW1lbnRhdGlvbnMuCisg
KiBEbyBub3QgY2FsbCBkaXJlY3RseS4KKyAqIEBpbnRlcm5hbAorICovCitVX0lOVEVSTkFMIGlu
dDMyX3QgVV9FWFBPUlQyCit1Y3B0cmllX2ludGVybmFsVThQcmV2SW5kZXgoY29uc3QgVUNQVHJp
ZSAqdHJpZSwgVUNoYXIzMiBjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVp
bnQ4X3QgKnN0YXJ0LCBjb25zdCB1aW50OF90ICpzcmMpOworCisvKiogSW50ZXJuYWwgdHJpZSBn
ZXR0ZXIgZm9yIGEgY29kZSBwb2ludCBiZWxvdyB0aGUgZmFzdCBsaW1pdC4gUmV0dXJucyB0aGUg
ZGF0YSBpbmRleC4gQGludGVybmFsICovCisjZGVmaW5lIF9VQ1BUUklFX0ZBU1RfSU5ERVgodHJp
ZSwgYykgXAorICAgICgoaW50MzJfdCkodHJpZSktPmluZGV4WyhjKSA+PiBVQ1BUUklFX0ZBU1Rf
U0hJRlRdICsgKChjKSAmIFVDUFRSSUVfRkFTVF9EQVRBX01BU0spKQorCisvKiogSW50ZXJuYWwg
dHJpZSBnZXR0ZXIgZm9yIGEgY29kZSBwb2ludCBhdCBvciBhYm92ZSB0aGUgZmFzdCBsaW1pdC4g
UmV0dXJucyB0aGUgZGF0YSBpbmRleC4gQGludGVybmFsICovCisjZGVmaW5lIF9VQ1BUUklFX1NN
QUxMX0lOREVYKHRyaWUsIGMpIFwKKyAgICAoKGMpID49ICh0cmllKS0+aGlnaFN0YXJ0ID8gXAor
ICAgICAgICAodHJpZSktPmRhdGFMZW5ndGggLSBVQ1BUUklFX0hJR0hfVkFMVUVfTkVHX0RBVEFf
T0ZGU0VUIDogXAorICAgICAgICB1Y3B0cmllX2ludGVybmFsU21hbGxJbmRleCh0cmllLCBjKSkK
KworLyoqCisgKiBJbnRlcm5hbCB0cmllIGdldHRlciBmb3IgYSBjb2RlIHBvaW50LCB3aXRoIGNo
ZWNraW5nIHRoYXQgYyBpcyBpbiBVKzAwMDAuLjEwRkZGRi4KKyAqIFJldHVybnMgdGhlIGRhdGEg
aW5kZXguCisgKiBAaW50ZXJuYWwKKyAqLworI2RlZmluZSBfVUNQVFJJRV9DUF9JTkRFWCh0cmll
LCBmYXN0TWF4LCBjKSBcCisgICAgKCh1aW50MzJfdCkoYykgPD0gKHVpbnQzMl90KShmYXN0TWF4
KSA/IFwKKyAgICAgICAgX1VDUFRSSUVfRkFTVF9JTkRFWCh0cmllLCBjKSA6IFwKKyAgICAgICAg
KHVpbnQzMl90KShjKSA8PSAweDEwZmZmZiA/IFwKKyAgICAgICAgICAgIF9VQ1BUUklFX1NNQUxM
X0lOREVYKHRyaWUsIGMpIDogXAorICAgICAgICAgICAgKHRyaWUpLT5kYXRhTGVuZ3RoIC0gVUNQ
VFJJRV9FUlJPUl9WQUxVRV9ORUdfREFUQV9PRkZTRVQpCisKK1VfQ0RFQ0xfRU5ECisKKyNlbmRp
ZiAgLy8gVV9JTl9ET1hZR0VOCisjZW5kaWYgIC8vIFVfSElERV9EUkFGVF9BUEkKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi9pY3UvdW5pY29kZS91Y3Vyci5oIGIvU291cmNlL1dURi9p
Y3UvdW5pY29kZS91Y3Vyci5oCmluZGV4IDE5MmJjMjk4Y2Y3MWI5M2FmN2Y4ZDE1NGM3MDhiZWE3
MjliNmI3YjAuLmM5MTUzMjdkMzg3OWU0YWUzYmU2ZDI5ODgwODBkZDI5YjQyYmZiNWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdWN1cnIuaAorKysgYi9Tb3VyY2UvV1RGL2lj
dS91bmljb2RlL3VjdXJyLmgKQEAgLTYwLDYgKzYwLDcgQEAgZW51bSBVQ3VycmVuY3lVc2FnZSB7
CiAgICAgVUNVUlJfVVNBR0VfQ09VTlQ9MgogI2VuZGlmICAvLyBVX0hJREVfREVQUkVDQVRFRF9B
UEkKIH07CisvKiogQ3VycmVuY3kgVXNhZ2UgdXNlZCBmb3IgRGVjaW1hbCBGb3JtYXQgKi8KIHR5
cGVkZWYgZW51bSBVQ3VycmVuY3lVc2FnZSBVQ3VycmVuY3lVc2FnZTsgCiAKIC8qKgpAQCAtMTAy
LDIwICsxMDMsMTcgQEAgdHlwZWRlZiBlbnVtIFVDdXJyTmFtZVN0eWxlIHsKICAgICAgKiBjdXJy
ZW5jeSwgc3VjaCBhcyAiVVMgRG9sbGFyIiBmb3IgVVNELgogICAgICAqIEBzdGFibGUgSUNVIDIu
NgogICAgICAqLwotICAgIFVDVVJSX0xPTkdfTkFNRQorICAgIFVDVVJSX0xPTkdfTkFNRSwKIAot
I2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCi0gICAgLAogICAgIC8qKgogICAgICAqIFNlbGVjdG9y
IGZvciBnZXROYW1lKCkgaW5kaWNhdGluZyB0aGUgbmFycm93IGN1cnJlbmN5IHN5bWJvbC4KICAg
ICAgKiBUaGUgbmFycm93IGN1cnJlbmN5IHN5bWJvbCBpcyBzaW1pbGFyIHRvIHRoZSByZWd1bGFy
IGN1cnJlbmN5CiAgICAgICogc3ltYm9sLCBidXQgaXQgYWx3YXlzIHRha2VzIHRoZSBzaG9ydGVz
dCBmb3JtOiBmb3IgZXhhbXBsZSwKICAgICAgKiAiJCIgaW5zdGVhZCBvZiAiVVMkIiBmb3IgVVNE
IGluIGVuLUNBLgogICAgICAqCi0gICAgICogQGRyYWZ0IElDVSA2MQorICAgICAqIEBzdGFibGUg
SUNVIDYxCiAgICAgICovCiAgICAgVUNVUlJfTkFSUk9XX1NZTUJPTF9OQU1FCi0jZW5kaWYgIC8v
IFVfSElERV9EUkFGVF9BUEkKIH0gVUN1cnJOYW1lU3R5bGU7CiAKICNpZiAhVUNPTkZJR19OT19T
RVJWSUNFCkBAIC0yMDcsNiArMjA1LDEzIEBAIHVjdXJyX2dldFBsdXJhbE5hbWUoY29uc3QgVUNo
YXIqIGN1cnJlbmN5LAogICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBudW1iZXIgb2YgZnJh
Y3Rpb24gZGlnaXRzIHRoYXQgc2hvdWxkCiAgKiBiZSBkaXNwbGF5ZWQgZm9yIHRoZSBnaXZlbiBj
dXJyZW5jeS4KICAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byB1Y3Vycl9nZXREZWZhdWx0RnJhY3Rp
b25EaWdpdHNGb3JVc2FnZShjdXJyZW5jeSxVQ1VSUl9VU0FHRV9TVEFOREFSRCxlYyk7CisgKgor
ICogSW1wb3J0YW50OiBUaGUgbnVtYmVyIG9mIGZyYWN0aW9uIGRpZ2l0cyBmb3IgYSBnaXZlbiBj
dXJyZW5jeSBpcyBOT1QKKyAqIGd1YXJhbnRlZWQgdG8gYmUgY29uc3RhbnQgYWNyb3NzIHZlcnNp
b25zIG9mIElDVSBvciBDTERSLiBGb3IgZXhhbXBsZSwKKyAqIGRvIE5PVCB1c2UgdGhpcyB2YWx1
ZSBhcyBhIG1lY2hhbmlzbSBmb3IgZGVjaWRpbmcgdGhlIG1hZ25pdHVkZSB1c2VkCisgKiB0byBz
dG9yZSBjdXJyZW5jeSB2YWx1ZXMgaW4gYSBkYXRhYmFzZS4gWW91IHNob3VsZCB1c2UgdGhpcyB2
YWx1ZSBmb3IKKyAqIGRpc3BsYXkgcHVycG9zZXMgb25seS4KKyAqCiAgKiBAcGFyYW0gY3VycmVu
Y3kgbnVsbC10ZXJtaW5hdGVkIDMtbGV0dGVyIElTTyA0MjE3IGNvZGUKICAqIEBwYXJhbSBlYyBp
bnB1dC1vdXRwdXQgZXJyb3IgY29kZQogICogQHJldHVybiBhIG5vbi1uZWdhdGl2ZSBudW1iZXIg
b2YgZnJhY3Rpb24gZGlnaXRzIHRvIGJlCkBAIC0yMjAsNiArMjI1LDEzIEBAIHVjdXJyX2dldERl
ZmF1bHRGcmFjdGlvbkRpZ2l0cyhjb25zdCBVQ2hhciogY3VycmVuY3ksCiAvKioKICAqIFJldHVy
bnMgdGhlIG51bWJlciBvZiB0aGUgbnVtYmVyIG9mIGZyYWN0aW9uIGRpZ2l0cyB0aGF0IHNob3Vs
ZAogICogYmUgZGlzcGxheWVkIGZvciB0aGUgZ2l2ZW4gY3VycmVuY3kgd2l0aCB1c2FnZS4KKyAq
CisgKiBJbXBvcnRhbnQ6IFRoZSBudW1iZXIgb2YgZnJhY3Rpb24gZGlnaXRzIGZvciBhIGdpdmVu
IGN1cnJlbmN5IGlzIE5PVAorICogZ3VhcmFudGVlZCB0byBiZSBjb25zdGFudCBhY3Jvc3MgdmVy
c2lvbnMgb2YgSUNVIG9yIENMRFIuIEZvciBleGFtcGxlLAorICogZG8gTk9UIHVzZSB0aGlzIHZh
bHVlIGFzIGEgbWVjaGFuaXNtIGZvciBkZWNpZGluZyB0aGUgbWFnbml0dWRlIHVzZWQKKyAqIHRv
IHN0b3JlIGN1cnJlbmN5IHZhbHVlcyBpbiBhIGRhdGFiYXNlLiBZb3Ugc2hvdWxkIHVzZSB0aGlz
IHZhbHVlIGZvcgorICogZGlzcGxheSBwdXJwb3NlcyBvbmx5LgorICoKICAqIEBwYXJhbSBjdXJy
ZW5jeSBudWxsLXRlcm1pbmF0ZWQgMy1sZXR0ZXIgSVNPIDQyMTcgY29kZQogICogQHBhcmFtIHVz
YWdlIGVudW0gdXNhZ2UgZm9yIHRoZSBjdXJyZW5jeQogICogQHBhcmFtIGVjIGlucHV0LW91dHB1
dCBlcnJvciBjb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3VkYXQuaCBi
L1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdWRhdC5oCmluZGV4IDkwYWZmMjBkZjJhMTIyYjc2NDI4
ZjkwMzA2MmQwNzc2Nzg5OGQ4ZDEuLmM2N2E2ZDZkNGIzYTc5N2M3NDFlOGVhNTVkOTZlZDJiYTM5
MGU3MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdWRhdC5oCisrKyBiL1Nv
dXJjZS9XVEYvaWN1L3VuaWNvZGUvdWRhdC5oCkBAIC00ODIsNiArNDgyLDI3IEBAIHR5cGVkZWYg
ZW51bSBVRGF0ZUZvcm1hdFN0eWxlIHsKICNkZWZpbmUgVURBVF9IT1VSX1RaICAgICAgICAgICAg
ICAgICAgICAianoiCiAjZW5kaWYgIC8qIFVfSElERV9ERVBSRUNBVEVEX0FQSSAqLwogCisjaWZu
ZGVmIFVfSElERV9JTlRFUk5BTF9BUEkKKy8qKgorICogQ29uc3RhbnQgZm9yIFVuaWNvZGUgc3Ry
aW5nIG5hbWUgb2YgbmV3IChpbiAyMDE5KSBKYXBhbmVzZSBjYWxlbmRhciBlcmEsCisgKiByb290
L0VuZ2xpc2ggYWJicmV2aWF0ZWQgdmVyc2lvbiAoQVNDSUktcmFuZ2UgY2hhcmFjdGVycykuCisg
KiBAaW50ZXJuYWwKKyAqLworI2RlZmluZSBKUF9FUkFfMjAxOV9ST09UICAgICAgICAgICAgICAg
ICJSZWl3YSIKKy8qKgorICogQ29uc3RhbnQgZm9yIFVuaWNvZGUgc3RyaW5nIG5hbWUgb2YgbmV3
IChpbiAyMDE5KSBKYXBhbmVzZSBjYWxlbmRhciBlcmEsCisgKiBKYXBhbmVzZSBhYmJyZXZpYXRl
ZCB2ZXJzaW9uIChIYW4sIG9yIGZ1bGx3aWR0aCBMYXRpbiBmb3IgdGVzdGluZykuCisgKiBAaW50
ZXJuYWwKKyAqLworI2RlZmluZSBKUF9FUkFfMjAxOV9KQSAgICAgICAgICAgICAgICAgICJcXHU0
RUU0XFx1NTQ4QyIKKy8qKgorICogQ29uc3RhbnQgZm9yIFVuaWNvZGUgc3RyaW5nIG5hbWUgb2Yg
bmV3IChpbiAyMDE5KSBKYXBhbmVzZSBjYWxlbmRhciBlcmEsCisgKiByb290IGFuZCBKYXBhbmVz
ZSBuYXJyb3cgdmVyc2lvbiAoQVNDSUktcmFuZ2UgY2hhcmFjdGVycykuCisgKiBAaW50ZXJuYWwK
KyAqLworI2RlZmluZSBKUF9FUkFfMjAxOV9OQVJST1cgICAgICAgICAgICAgICJSIgorI2VuZGlm
ICAvLyBVX0hJREVfSU5URVJOQUxfQVBJCisKIC8qKgogICogRmllbGRQb3NpdGlvbiBhbmQgVUZp
ZWxkUG9zaXRpb24gc2VsZWN0b3JzIGZvciBmb3JtYXQgZmllbGRzCiAgKiBkZWZpbmVkIGJ5IERh
dGVGb3JtYXQgYW5kIFVEYXRlRm9ybWF0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9pY3UvdW5p
Y29kZS91ZGF0ZWludGVydmFsZm9ybWF0LmggYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3VkYXRl
aW50ZXJ2YWxmb3JtYXQuaAppbmRleCA5MzAwZGRjZjgyYjk2NTZjY2UwNjMwZGQ3ZDc4MWVhMzE0
OTJiMzdiLi5iNDIyMjNhNWRiMzRhMzZlYmMwMDAzNzMxZmUxODFiNDgxYjU1NjRjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3VkYXRlaW50ZXJ2YWxmb3JtYXQuaAorKysgYi9T
b3VyY2UvV1RGL2ljdS91bmljb2RlL3VkYXRlaW50ZXJ2YWxmb3JtYXQuaApAQCAtMTYsNiArMTYs
NyBAQAogCiAjaW5jbHVkZSAidW5pY29kZS91bWlzYy5oIgogI2luY2x1ZGUgInVuaWNvZGUvbG9j
YWxwb2ludGVyLmgiCisjaW5jbHVkZSAidW5pY29kZS91Zm9ybWF0dGVkdmFsdWUuaCIKIAogLyoq
CiAgKiBcZmlsZQpAQCAtODEsNiArODIsMTUgQEAKIHN0cnVjdCBVRGF0ZUludGVydmFsRm9ybWF0
OwogdHlwZWRlZiBzdHJ1Y3QgVURhdGVJbnRlcnZhbEZvcm1hdCBVRGF0ZUludGVydmFsRm9ybWF0
OyAgLyoqPCBDIHR5cGVkZWYgZm9yIHN0cnVjdCBVRGF0ZUludGVydmFsRm9ybWF0LiBAc3RhYmxl
IElDVSA0LjggKi8KIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCitzdHJ1Y3QgVUZvcm1hdHRl
ZERhdGVJbnRlcnZhbDsKKy8qKgorICogT3BhcXVlIHN0cnVjdCB0byBjb250YWluIHRoZSByZXN1
bHRzIG9mIGEgVURhdGVJbnRlcnZhbEZvcm1hdCBvcGVyYXRpb24uCisgKiBAZHJhZnQgSUNVIDY0
CisgKi8KK3R5cGVkZWYgc3RydWN0IFVGb3JtYXR0ZWREYXRlSW50ZXJ2YWwgVUZvcm1hdHRlZERh
dGVJbnRlcnZhbDsKKyNlbmRpZiAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKIC8qKgogICogT3Bl
biBhIG5ldyBVRGF0ZUludGVydmFsRm9ybWF0IG9iamVjdCB1c2luZyB0aGUgcHJlZGVmaW5lZCBy
dWxlcyBmb3IgYQogICogZ2l2ZW4gbG9jYWxlIHBsdXMgYSBzcGVjaWZpZWQgc2tlbGV0b24uCkBA
IC0xMjMsNiArMTMzLDU1IEBAIFVfU1RBQkxFIHZvaWQgVV9FWFBPUlQyCiB1ZHRpdHZmbXRfY2xv
c2UoVURhdGVJbnRlcnZhbEZvcm1hdCAqZm9ybWF0dGVyKTsKIAogCisjaWZuZGVmIFVfSElERV9E
UkFGVF9BUEkKKy8qKgorICogQ3JlYXRlcyBhbiBvYmplY3QgdG8gaG9sZCB0aGUgcmVzdWx0IG9m
IGEgVURhdGVJbnRlcnZhbEZvcm1hdAorICogb3BlcmF0aW9uLiBUaGUgb2JqZWN0IGNhbiBiZSB1
c2VkIHJlcGVhdGVkbHk7IGl0IGlzIGNsZWFyZWQgd2hlbmV2ZXIKKyAqIHBhc3NlZCB0byBhIGZv
cm1hdCBmdW5jdGlvbi4KKyAqCisgKiBAcGFyYW0gZWMgU2V0IGlmIGFuIGVycm9yIG9jY3Vycy4K
KyAqIEByZXR1cm4gQSBwb2ludGVyIG5lZWRpbmcgb3duZXJzaGlwLgorICogQGRyYWZ0IElDVSA2
NAorICovCitVX0NBUEkgVUZvcm1hdHRlZERhdGVJbnRlcnZhbCogVV9FWFBPUlQyCit1ZHRpdHZm
bXRfb3BlblJlc3VsdChVRXJyb3JDb2RlKiBlYyk7CisKKy8qKgorICogUmV0dXJucyBhIHJlcHJl
c2VudGF0aW9uIG9mIGEgVUZvcm1hdHRlZERhdGVJbnRlcnZhbCBhcyBhIFVGb3JtYXR0ZWRWYWx1
ZSwKKyAqIHdoaWNoIGNhbiBiZSBzdWJzZXF1ZW50bHkgcGFzc2VkIHRvIGFueSBBUEkgcmVxdWly
aW5nIHRoYXQgdHlwZS4KKyAqCisgKiBUaGUgcmV0dXJuZWQgb2JqZWN0IGlzIG93bmVkIGJ5IHRo
ZSBVRm9ybWF0dGVkRGF0ZUludGVydmFsIGFuZCBpcyB2YWxpZAorICogb25seSBhcyBsb25nIGFz
IHRoZSBVRm9ybWF0dGVkRGF0ZUludGVydmFsIGlzIHByZXNlbnQgYW5kIHVuY2hhbmdlZCBpbiBt
ZW1vcnkuCisgKgorICogWW91IGNhbiB0aGluayBvZiB0aGlzIG1ldGhvZCBhcyBhIGNhc3QgYmV0
d2VlbiB0eXBlcy4KKyAqCisgKiBXaGVuIGNhbGxpbmcgdWZtdHZhbF9uZXh0UG9zaXRpb24oKToK
KyAqIFRoZSBmaWVsZHMgYXJlIHJldHVybmVkIGZyb20gbGVmdCB0byByaWdodC4gVGhlIHNwZWNp
YWwgZmllbGQgY2F0ZWdvcnkKKyAqIFVGSUVMRF9DQVRFR09SWV9EQVRFX0lOVEVSVkFMX1NQQU4g
aXMgdXNlZCB0byBpbmRpY2F0ZSB3aGljaCBkYXRldGltZQorICogcHJpbWl0aXZlcyBjYW1lIGZy
b20gd2hpY2ggYXJndW1lbnRzOiAwIG1lYW5zIGZyb21DYWxlbmRhciwgYW5kIDEgbWVhbnMKKyAq
IHRvQ2FsZW5kYXIuIFRoZSBzcGFuIGNhdGVnb3J5IHdpbGwgYWx3YXlzIG9jY3VyIGJlZm9yZSB0
aGUKKyAqIGNvcnJlc3BvbmRpbmcgZmllbGRzIGluIFVGSUVMRF9DQVRFR09SWV9EQVRFCisgKiBp
biB0aGUgdWZtdHZhbF9uZXh0UG9zaXRpb24oKSBpdGVyYXRvci4KKyAqCisgKiBAcGFyYW0gdXJl
c3VsdCBUaGUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZvcm1hdHRlZCBzdHJpbmcuCisgKiBAcGFy
YW0gZWMgU2V0IGlmIGFuIGVycm9yIG9jY3Vycy4KKyAqIEByZXR1cm4gQSBVRm9ybWF0dGVkVmFs
dWUgb3duZWQgYnkgdGhlIGlucHV0IG9iamVjdC4KKyAqIEBkcmFmdCBJQ1UgNjQKKyAqLworVV9D
QVBJIGNvbnN0IFVGb3JtYXR0ZWRWYWx1ZSogVV9FWFBPUlQyCit1ZHRpdHZmbXRfcmVzdWx0QXNW
YWx1ZShjb25zdCBVRm9ybWF0dGVkRGF0ZUludGVydmFsKiB1cmVzdWx0LCBVRXJyb3JDb2RlKiBl
Yyk7CisKKy8qKgorICogUmVsZWFzZXMgdGhlIFVGb3JtYXR0ZWREYXRlSW50ZXJ2YWwgY3JlYXRl
ZCBieSB1ZHRpdHZmbXRfb3BlblJlc3VsdCgpLgorICoKKyAqIEBwYXJhbSB1cmVzdWx0IFRoZSBv
YmplY3QgdG8gcmVsZWFzZS4KKyAqIEBkcmFmdCBJQ1UgNjQKKyAqLworVV9DQVBJIHZvaWQgVV9F
WFBPUlQyCit1ZHRpdHZmbXRfY2xvc2VSZXN1bHQoVUZvcm1hdHRlZERhdGVJbnRlcnZhbCogdXJl
c3VsdCk7CisjZW5kaWYgLyogVV9ISURFX0RSQUZUX0FQSSAqLworCisKICNpZiBVX1NIT1dfQ1BM
VVNQTFVTX0FQSQogCiBVX05BTUVTUEFDRV9CRUdJTgpAQCAtMTM4LDYgKzE5NywxOSBAQCBVX05B
TUVTUEFDRV9CRUdJTgogICovCiBVX0RFRklORV9MT0NBTF9PUEVOX1BPSU5URVIoTG9jYWxVRGF0
ZUludGVydmFsRm9ybWF0UG9pbnRlciwgVURhdGVJbnRlcnZhbEZvcm1hdCwgdWR0aXR2Zm10X2Ns
b3NlKTsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisvKioKKyAqIFxjbGFzcyBMb2NhbFVG
b3JtYXR0ZWREYXRlSW50ZXJ2YWxQb2ludGVyCisgKiAiU21hcnQgcG9pbnRlciIgY2xhc3MsIGNs
b3NlcyBhIFVGb3JtYXR0ZWREYXRlSW50ZXJ2YWwgdmlhIHVkdGl0dmZtdF9jbG9zZSgpLgorICog
Rm9yIG1vc3QgbWV0aG9kcyBzZWUgdGhlIExvY2FsUG9pbnRlckJhc2UgYmFzZSBjbGFzcy4KKyAq
CisgKiBAc2VlIExvY2FsUG9pbnRlckJhc2UKKyAqIEBzZWUgTG9jYWxQb2ludGVyCisgKiBAZHJh
ZnQgSUNVIDY0CisgKi8KK1VfREVGSU5FX0xPQ0FMX09QRU5fUE9JTlRFUihMb2NhbFVGb3JtYXR0
ZWREYXRlSW50ZXJ2YWxQb2ludGVyLCBVRm9ybWF0dGVkRGF0ZUludGVydmFsLCB1ZHRpdHZmbXRf
Y2xvc2VSZXN1bHQpOworI2VuZGlmIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKwogVV9OQU1FU1BB
Q0VfRU5ECiAKICNlbmRpZgpAQCAtMTgxLDYgKzI1MywzNCBAQCB1ZHRpdHZmbXRfZm9ybWF0KGNv
bnN0IFVEYXRlSW50ZXJ2YWxGb3JtYXQqIGZvcm1hdHRlciwKICAgICAgICAgICAgICAgICBVRmll
bGRQb3NpdGlvbiogcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSogICAgIHN0
YXR1cyk7CiAKKworI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisvKioKKyAqIEZvcm1hdHMgYSBk
YXRlL3RpbWUgcmFuZ2UgdXNpbmcgdGhlIGNvbnZlbnRpb25zIGVzdGFibGlzaGVkIGZvciB0aGUK
KyAqIFVEYXRlSW50ZXJ2YWxGb3JtYXQgb2JqZWN0LgorICogQHBhcmFtIGZvcm1hdHRlcgorICog
ICAgICAgICAgICBUaGUgVURhdGVJbnRlcnZhbEZvcm1hdCBvYmplY3Qgc3BlY2lmeWluZyB0aGUg
Zm9ybWF0IGNvbnZlbnRpb25zLgorICogQHBhcmFtIHJlc3VsdAorICogICAgICAgICAgICBUaGUg
VUZvcm1hdHRlZERhdGVJbnRlcnZhbCB0byBjb250YWluIHRoZSByZXN1bHQgb2YgdGhlCisgKiAg
ICAgICAgICAgIGZvcm1hdHRpbmcgb3BlcmF0aW9uLgorICogQHBhcmFtIGZyb21EYXRlCisgKiAg
ICAgICAgICAgIFRoZSBzdGFydGluZyBwb2ludCBvZiB0aGUgcmFuZ2UuCisgKiBAcGFyYW0gdG9E
YXRlCisgKiAgICAgICAgICAgIFRoZSBlbmRpbmcgcG9pbnQgb2YgdGhlIHJhbmdlLgorICogQHBh
cmFtIHN0YXR1cworICogICAgICAgICAgICBBIHBvaW50ZXIgdG8gYSBVRXJyb3JDb2RlIHRvIHJl
Y2VpdmUgYW55IGVycm9ycy4KKyAqIEBkcmFmdCBJQ1UgNjQKKyAqLworVV9EUkFGVCB2b2lkIFVf
RVhQT1JUMgordWR0aXR2Zm10X2Zvcm1hdFRvUmVzdWx0KAorICAgICAgICAgICAgICAgIGNvbnN0
IFVEYXRlSW50ZXJ2YWxGb3JtYXQqIGZvcm1hdHRlciwKKyAgICAgICAgICAgICAgICBVRm9ybWF0
dGVkRGF0ZUludGVydmFsKiByZXN1bHQsCisgICAgICAgICAgICAgICAgVURhdGUgICAgICAgICAg
IGZyb21EYXRlLAorICAgICAgICAgICAgICAgIFVEYXRlICAgICAgICAgICB0b0RhdGUsCisgICAg
ICAgICAgICAgICAgVUVycm9yQ29kZSogICAgIHN0YXR1cyk7CisjZW5kaWYgLyogVV9ISURFX0RS
QUZUX0FQSSAqLworCisKICNlbmRpZiAvKiAjaWYgIVVDT05GSUdfTk9fRk9STUFUVElORyAqLwog
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdWRhdHBnLmggYi9T
b3VyY2UvV1RGL2ljdS91bmljb2RlL3VkYXRwZy5oCmluZGV4IGJlYWU3NTZkODdkZGQ4MTQ5MGVl
Nzg5MTNiMmYyYWMwYzVkNDZhYzYuLmZjMjVkNTc5ZmY4MmNkNTg2Y2I2MjI1MTE0MjQ5NjRjY2Yx
YzQ3MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdWRhdHBnLmgKKysrIGIv
U291cmNlL1dURi9pY3UvdW5pY29kZS91ZGF0cGcuaApAQCAtOTUsMjAgKzk1LDE4IEBAIHR5cGVk
ZWYgZW51bSBVRGF0ZVRpbWVQYXR0ZXJuRmllbGQgewogICAgIFVEQVRQR19GSUVMRF9DT1VOVAog
fSBVRGF0ZVRpbWVQYXR0ZXJuRmllbGQ7CiAKLSNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQogLyoq
CiAgKiBGaWVsZCBkaXNwbGF5IG5hbWUgd2lkdGggY29uc3RhbnRzIGZvciB1ZGF0cGdfZ2V0Rmll
bGREaXNwbGF5TmFtZSgpLgotICogQGRyYWZ0IElDVSA2MQorICogQHN0YWJsZSBJQ1UgNjEKICAq
LwogdHlwZWRlZiBlbnVtIFVEYXRlVGltZVBHRGlzcGxheVdpZHRoIHsKLSAgICAvKiogQGRyYWZ0
IElDVSA2MSAqLworICAgIC8qKiBAc3RhYmxlIElDVSA2MSAqLwogICAgIFVEQVRQR19XSURFLAot
ICAgIC8qKiBAZHJhZnQgSUNVIDYxICovCisgICAgLyoqIEBzdGFibGUgSUNVIDYxICovCiAgICAg
VURBVFBHX0FCQlJFVklBVEVELAotICAgIC8qKiBAZHJhZnQgSUNVIDYxICovCisgICAgLyoqIEBz
dGFibGUgSUNVIDYxICovCiAgICAgVURBVFBHX05BUlJPVwogfSBVRGF0ZVRpbWVQR0Rpc3BsYXlX
aWR0aDsKLSNlbmRpZiAgLy8gVV9ISURFX0RSQUZUX0FQSQogCiAvKioKICAqIE1hc2tzIHRvIGNv
bnRyb2wgZm9yY2luZyB0aGUgbGVuZ3RoIG9mIHNwZWNpZmllZCBmaWVsZHMgaW4gdGhlIHJldHVy
bmVkCkBAIC00NDAsNyArNDM4LDYgQEAgdWRhdHBnX2dldEFwcGVuZEl0ZW1OYW1lKGNvbnN0IFVE
YXRlVGltZVBhdHRlcm5HZW5lcmF0b3IgKmR0cGcsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
VURhdGVUaW1lUGF0dGVybkZpZWxkIGZpZWxkLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dDMyX3QgKnBMZW5ndGgpOwogCi0jaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKIC8qKgogICogVGhl
IGdlbmVyYWwgaW50ZXJmYWNlIHRvIGdldCBhIGRpc3BsYXkgbmFtZSBmb3IgYSBwYXJ0aWN1bGFy
IGRhdGUvdGltZSBmaWVsZCwKICAqIGluIG9uZSBvZiBzZXZlcmFsIHBvc3NpYmxlIGRpc3BsYXkg
d2lkdGhzLgpAQCAtNDY0LDE1ICs0NjEsMTQgQEAgdWRhdHBnX2dldEFwcGVuZEl0ZW1OYW1lKGNv
bnN0IFVEYXRlVGltZVBhdHRlcm5HZW5lcmF0b3IgKmR0cGcsCiAgKiBAcmV0dXJuCiAgKiAgICAg
ICAgIFRoZSBmdWxsIGxlbmd0aCBvZiB0aGUgbmFtZTsgaWYgZ3JlYXRlciB0aGFuIGNhcGFjaXR5
LCBmaWVsZE5hbWUgY29udGFpbnMgYQogICogICAgICAgICB0cnVuY2F0ZWQgcmVzdWx0LgotICog
QGRyYWZ0IElDVSA2MQorICogQHN0YWJsZSBJQ1UgNjEKICAqLwotVV9EUkFGVCBpbnQzMl90IFVf
RVhQT1JUMgorVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIKIHVkYXRwZ19nZXRGaWVsZERpc3Bs
YXlOYW1lKGNvbnN0IFVEYXRlVGltZVBhdHRlcm5HZW5lcmF0b3IgKmR0cGcsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBVRGF0ZVRpbWVQYXR0ZXJuRmllbGQgZmllbGQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBVRGF0ZVRpbWVQR0Rpc3BsYXlXaWR0aCB3aWR0aCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFVDaGFyICpmaWVsZE5hbWUsIGludDMyX3QgY2FwYWNpdHksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKLSNlbmRp
ZiAgLy8gVV9ISURFX0RSQUZUX0FQSQogCiAvKioKICAqIFRoZSBEYXRlVGltZUZvcm1hdCBpcyBh
IG1lc3NhZ2UgZm9ybWF0IHBhdHRlcm4gdXNlZCB0byBjb21wb3NlIGRhdGUgYW5kCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3VlbnVtLmggYi9Tb3VyY2UvV1RGL2ljdS91bmlj
b2RlL3VlbnVtLmgKaW5kZXggZmM2ZWZhMjQ1MGRiMTdkN2U2OWNhYTY0NTJjOTU2MjU3YTk3MGJi
OC4uYzY3MGVlYWZiMTYyNmIyYjdiNGZlMzZlNGZhMGQ2NzJkNjUwOWZkNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi9pY3UvdW5pY29kZS91ZW51bS5oCisrKyBiL1NvdXJjZS9XVEYvaWN1L3VuaWNv
ZGUvdWVudW0uaApAQCAtMTkwLDggKzE5MCw2IEBAIFVfU1RBQkxFIFVFbnVtZXJhdGlvbiogVV9F
WFBPUlQyCiB1ZW51bV9vcGVuVUNoYXJTdHJpbmdzRW51bWVyYXRpb24oY29uc3QgVUNoYXIqIGNv
bnN0IHN0cmluZ3NbXSwgaW50MzJfdCBjb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFVFcnJvckNvZGUqIGVjKTsKIAotLyogTm90ZTogIG5leHQgZnVuY3Rpb24gaXMgbm90
IGhpZGRlbiBhcyBkcmFmdCwgYXMgaXQgaXMgdXNlZCBpbnRlcm5hbGx5IChpdCB3YXMgZm9ybWVy
bHkgYW4gaW50ZXJuYWwgZnVuY3Rpb24pLiAqLwotCiAvKioKICAqIEdpdmVuIGFuIGFycmF5IG9m
IGNvbnN0IGNoYXIqIHN0cmluZ3MgKGludmFyaWFudCBjaGFycyBvbmx5KSwgcmV0dXJuIGEgVUVu
dW1lcmF0aW9uLiAgU3RyaW5nIHBvaW50ZXJzIGZyb20gMC4uY291bnQtMSBtdXN0IG5vdCBiZSBu
dWxsLgogICogRG8gbm90IGZyZWUgb3IgbW9kaWZ5IGVpdGhlciB0aGUgc3RyaW5nIGFycmF5IG9y
IHRoZSBjaGFyYWN0ZXJzIGl0IHBvaW50cyB0byB1bnRpbCB0aGlzIG9iamVjdCBoYXMgYmVlbiBk
ZXN0cm95ZWQgd2l0aCB1ZW51bV9jbG9zZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvaWN1L3Vu
aWNvZGUvdWZvcm1hdHRlZHZhbHVlLmggYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3Vmb3JtYXR0
ZWR2YWx1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVhYTRmMjg4OTNhMDc2NTRkNDYxMTJhZmRmNTE1YmQyZDA1
Njg4YmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3Vmb3JtYXR0
ZWR2YWx1ZS5oCkBAIC0wLDAgKzEsNDQwIEBACisvLyDCqSAyMDE4IGFuZCBsYXRlcjogVW5pY29k
ZSwgSW5jLiBhbmQgb3RoZXJzLgorLy8gTGljZW5zZSAmIHRlcm1zIG9mIHVzZTogaHR0cDovL3d3
dy51bmljb2RlLm9yZy9jb3B5cmlnaHQuaHRtbAorCisjaWZuZGVmIF9fVUZPUk1BVFRFRFZBTFVF
X0hfXworI2RlZmluZSBfX1VGT1JNQVRURURWQUxVRV9IX18KKworI2luY2x1ZGUgInVuaWNvZGUv
dXR5cGVzLmgiCisKKyNpZiAhVUNPTkZJR19OT19GT1JNQVRUSU5HCisjaWZuZGVmIFVfSElERV9E
UkFGVF9BUEkKKworI2luY2x1ZGUgInVuaWNvZGUvdWZpZWxkcG9zaXRlci5oIgorCisvKioKKyAq
IFxmaWxlCisgKiBcYnJpZWYgQyBBUEk6IEFic3RyYWN0IG9wZXJhdGlvbnMgZm9yIGxvY2FsaXpl
ZCBzdHJpbmdzLgorICogCisgKiBUaGlzIGZpbGUgY29udGFpbnMgZGVjbGFyYXRpb25zIGZvciBj
bGFzc2VzIHRoYXQgZGVhbCB3aXRoIGZvcm1hdHRlZCBzdHJpbmdzLiBBIG51bWJlcgorICogb2Yg
QVBJcyB0aHJvdWdob3V0IElDVSB1c2UgdGhlc2UgY2xhc3NlcyBmb3IgZXhwcmVzc2luZyB0aGVp
ciBsb2NhbGl6ZWQgb3V0cHV0LgorICovCisKKworLyoqCisgKiBBbGwgcG9zc2libGUgZmllbGQg
Y2F0ZWdvcmllcyBpbiBJQ1UuIEV2ZXJ5IGVudHJ5IGluIHRoaXMgZW51bSBjb3JyZXNwb25kcwor
ICogdG8gYW5vdGhlciBlbnVtIHRoYXQgZXhpc3RzIGluIElDVS4KKyAqIAorICogSW4gdGhlIEFQ
SXMgdGhhdCB0YWtlIGEgVUZpZWxkQ2F0ZWdvcnksIGFuIGludDMyX3QgdHlwZSBpcyB1c2VkLiBG
aWVsZAorICogY2F0ZWdvcmllcyBoYXZpbmcgYW55IG9mIHRoZSB0b3AgZm91ciBiaXRzIHR1cm5l
ZCBvbiBhcmUgcmVzZXJ2ZWQgYXMKKyAqIHByaXZhdGUtdXNlIGZvciBleHRlcm5hbCBBUElzIGlt
cGxlbWVudGluZyBGb3JtYXR0ZWRWYWx1ZS4gVGhpcyBtZWFucyB0aGF0CisgKiBjYXRlZ29yaWVz
IDJeMjggYW5kIGhpZ2hlciBvciBiZWxvdyB6ZXJvICh3aXRoIHRoZSBoaWdoZXN0IGJpdCB0dXJu
ZWQgb24pCisgKiBhcmUgcHJpdmF0ZS11c2UgYW5kIHdpbGwgbm90IGJlIHVzZWQgYnkgSUNVIGlu
IHRoZSBmdXR1cmUuCisgKgorICogQGRyYWZ0IElDVSA2NAorICovCit0eXBlZGVmIGVudW0gVUZp
ZWxkQ2F0ZWdvcnkgeworICAgIC8qKgorICAgICAqIEZvciBhbiB1bmRlZmluZWQgZmllbGQgY2F0
ZWdvcnkuCisgICAgICogCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIFVGSUVM
RF9DQVRFR09SWV9VTkRFRklORUQgPSAwLAorCisgICAgLyoqCisgICAgICogRm9yIGZpZWxkcyBp
biBVRGF0ZUZvcm1hdEZpZWxkICh1ZGF0LmgpLCBmcm9tIElDVSAzLjAuCisgICAgICoKKyAgICAg
KiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgVUZJRUxEX0NBVEVHT1JZX0RBVEUsCisKKyAg
ICAvKioKKyAgICAgKiBGb3IgZmllbGRzIGluIFVOdW1iZXJGb3JtYXRGaWVsZHMgKHVudW0uaCks
IGZyb20gSUNVIDQ5LgorICAgICAqCisgICAgICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAg
IFVGSUVMRF9DQVRFR09SWV9OVU1CRVIsCisKKyAgICAvKioKKyAgICAgKiBGb3IgZmllbGRzIGlu
IFVMaXN0Rm9ybWF0dGVyRmllbGQgKHVsaXN0Zm9ybWF0dGVyLmgpLCBmcm9tIElDVSA2My4KKyAg
ICAgKgorICAgICAqIEBkcmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBVRklFTERfQ0FURUdPUllf
TElTVCwKKworICAgIC8qKgorICAgICAqIEZvciBmaWVsZHMgaW4gVVJlbGF0aXZlRGF0ZVRpbWVG
b3JtYXR0ZXJGaWVsZCAodXJlbGRhdGVmbXQuaCksIGZyb20gSUNVIDY0LgorICAgICAqCisgICAg
ICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIFVGSUVMRF9DQVRFR09SWV9SRUxBVElWRV9E
QVRFVElNRSwKKworICAgIC8qKgorICAgICAqIFJlc2VydmVkIGZvciBwb3NzaWJsZSBmdXR1cmUg
ZmllbGRzIGluIFVEYXRlSW50ZXJ2YWxGb3JtYXRGaWVsZC4KKyAgICAgKgorICAgICAqIEBpbnRl
cm5hbAorICAgICAqLworICAgIFVGSUVMRF9DQVRFR09SWV9EQVRFX0lOVEVSVkFMLAorCisjaWZu
ZGVmIFVfSElERV9JTlRFUk5BTF9BUEkKKyAgICAvKiogQGludGVybmFsICovCisgICAgVUZJRUxE
X0NBVEVHT1JZX0NPVU5ULAorI2VuZGlmICAvKiBVX0hJREVfSU5URVJOQUxfQVBJICovCisKKyAg
ICAvKioKKyAgICAgKiBDYXRlZ29yeSBmb3Igc3BhbnMgaW4gYSBsaXN0LgorICAgICAqCisgICAg
ICogQGRyYWZ0IElDVSA2NAorICAgICAqLworICAgIFVGSUVMRF9DQVRFR09SWV9MSVNUX1NQQU4g
PSAweDEwMDAgKyBVRklFTERfQ0FURUdPUllfTElTVCwKKworICAgIC8qKgorICAgICAqIENhdGVn
b3J5IGZvciBzcGFucyBpbiBhIGRhdGUgaW50ZXJ2YWwuCisgICAgICoKKyAgICAgKiBAZHJhZnQg
SUNVIDY0CisgICAgICovCisgICAgVUZJRUxEX0NBVEVHT1JZX0RBVEVfSU5URVJWQUxfU1BBTiA9
IDB4MTAwMCArIFVGSUVMRF9DQVRFR09SWV9EQVRFX0lOVEVSVkFMLAorCit9IFVGaWVsZENhdGVn
b3J5OworCisKK3N0cnVjdCBVQ29uc3RyYWluZWRGaWVsZFBvc2l0aW9uOworLyoqCisgKiBSZXBy
ZXNlbnRzIGEgc3BhbiBvZiBhIHN0cmluZyBjb250YWluaW5nIGEgZ2l2ZW4gZmllbGQuCisgKgor
ICogVGhpcyBzdHJ1Y3QgZGlmZmVycyBmcm9tIFVGaWVsZFBvc2l0aW9uIGluIHRoZSBmb2xsb3dp
bmcgd2F5czoKKyAqCisgKiAgIDEuIEl0IGhhcyBpbmZvcm1hdGlvbiBvbiB0aGUgZmllbGQgY2F0
ZWdvcnkuCisgKiAgIDIuIEl0IGFsbG93cyB5b3UgdG8gc2V0IGNvbnN0cmFpbnRzIHRvIHVzZSB3
aGVuIGl0ZXJhdGluZyBvdmVyIGZpZWxkIHBvc2l0aW9ucy4KKyAqICAgMy4gSXQgaXMgdXNlZCBm
b3IgdGhlIG5ld2VyIEZvcm1hdHRlZFZhbHVlIEFQSXMuCisgKgorICogQGRyYWZ0IElDVSA2NAor
ICovCit0eXBlZGVmIHN0cnVjdCBVQ29uc3RyYWluZWRGaWVsZFBvc2l0aW9uIFVDb25zdHJhaW5l
ZEZpZWxkUG9zaXRpb247CisKKworLyoqCisgKiBDcmVhdGVzIGEgbmV3IFVDb25zdHJhaW5lZEZp
ZWxkUG9zaXRpb24uCisgKgorICogQnkgZGVmYXVsdCwgdGhlIFVDb25zdHJhaW5lZEZpZWxkUG9z
aXRpb24gaGFzIG5vIGl0ZXJhdGlvbiBjb25zdHJhaW50cy4KKyAqCisgKiBAcGFyYW0gZWMgU2V0
IGlmIGFuIGVycm9yIG9jY3Vycy4KKyAqIEByZXR1cm4gVGhlIG5ldyBvYmplY3QsIG9yIE5VTEwg
aWYgYW4gZXJyb3Igb2NjdXJzLgorICogQGRyYWZ0IElDVSA2NAorICovCitVX0RSQUZUIFVDb25z
dHJhaW5lZEZpZWxkUG9zaXRpb24qIFVfRVhQT1JUMgordWNmcG9zX29wZW4oVUVycm9yQ29kZSog
ZWMpOworCisKKy8qKgorICogUmVzZXRzIGEgVUNvbnN0cmFpbmVkRmllbGRQb3NpdGlvbiB0byBp
dHMgaW5pdGlhbCBzdGF0ZSwgYXMgaWYgaXQgd2VyZSBuZXdseSBjcmVhdGVkLgorICoKKyAqIFJl
bW92ZXMgYW55IGNvbnN0cmFpbnRzIHRoYXQgbWF5IGhhdmUgYmVlbiBzZXQgb24gdGhlIGluc3Rh
bmNlLgorICoKKyAqIEBwYXJhbSB1Y2Zwb3MgVGhlIGluc3RhbmNlIG9mIFVDb25zdHJhaW5lZEZp
ZWxkUG9zaXRpb24uCisgKiBAcGFyYW0gZWMgU2V0IGlmIGFuIGVycm9yIG9jY3Vycy4KKyAqIEBk
cmFmdCBJQ1UgNjQKKyAqLworVV9EUkFGVCB2b2lkIFVfRVhQT1JUMgordWNmcG9zX3Jlc2V0KAor
ICAgIFVDb25zdHJhaW5lZEZpZWxkUG9zaXRpb24qIHVjZnBvcywKKyAgICBVRXJyb3JDb2RlKiBl
Yyk7CisKKworLyoqCisgKiBEZXN0cm95cyBhIFVDb25zdHJhaW5lZEZpZWxkUG9zaXRpb24gYW5k
IHJlbGVhc2VzIGl0cyBtZW1vcnkuCisgKgorICogQHBhcmFtIHVjZnBvcyBUaGUgaW5zdGFuY2Ug
b2YgVUNvbnN0cmFpbmVkRmllbGRQb3NpdGlvbi4KKyAqIEBkcmFmdCBJQ1UgNjQKKyAqLworVV9E
UkFGVCB2b2lkIFVfRVhQT1JUMgordWNmcG9zX2Nsb3NlKFVDb25zdHJhaW5lZEZpZWxkUG9zaXRp
b24qIHVjZnBvcyk7CisKKworLyoqCisgKiBTZXRzIGEgY29uc3RyYWludCBvbiB0aGUgZmllbGQg
Y2F0ZWdvcnkuCisgKiAKKyAqIFdoZW4gdGhpcyBpbnN0YW5jZSBvZiBVQ29uc3RyYWluZWRGaWVs
ZFBvc2l0aW9uIGlzIHBhc3NlZCB0byB1Zm10dmFsX25leHRQb3NpdGlvbiwKKyAqIHBvc2l0aW9u
cyBhcmUgc2tpcHBlZCB1bmxlc3MgdGhleSBoYXZlIHRoZSBnaXZlbiBjYXRlZ29yeS4KKyAqCisg
KiBBbnkgcHJldmlvdXNseSBzZXQgY29uc3RyYWludHMgYXJlIGNsZWFyZWQuCisgKgorICogRm9y
IGV4YW1wbGUsIHRvIGxvb3Agb3ZlciBvbmx5IHRoZSBudW1iZXItcmVsYXRlZCBmaWVsZHM6Cisg
KgorICogICAgIFVDb25zdHJhaW5lZEZpZWxkUG9zaXRpb24qIHVjZnBvcyA9IHVjZnBvc19vcGVu
KGVjKTsKKyAqICAgICB1Y2Zwb3NfY29uc3RyYWluQ2F0ZWdvcnkodWNmcG9zLCBVRklFTERDQVRF
R09SWV9OVU1CRVJfRk9STUFULCBlYyk7CisgKiAgICAgd2hpbGUgKHVmbXR2YWxfbmV4dFBvc2l0
aW9uKHVmbXR2YWwsIHVjZnBvcywgZWMpKSB7CisgKiAgICAgICAgIC8vIGhhbmRsZSB0aGUgbnVt
YmVyLXJlbGF0ZWQgZmllbGQgcG9zaXRpb24KKyAqICAgICB9CisgKiAgICAgdWNmcG9zX2Nsb3Nl
KHVjZnBvcyk7CisgKgorICogQ2hhbmdpbmcgdGhlIGNvbnN0cmFpbnQgd2hpbGUgaW4gdGhlIG1p
ZGRsZSBvZiBpdGVyYXRpbmcgb3ZlciBhIEZvcm1hdHRlZFZhbHVlCisgKiBkb2VzIG5vdCBnZW5l
cmFsbHkgaGF2ZSB3ZWxsLWRlZmluZWQgYmVoYXZpb3IuCisgKgorICogQHBhcmFtIHVjZnBvcyBU
aGUgaW5zdGFuY2Ugb2YgVUNvbnN0cmFpbmVkRmllbGRQb3NpdGlvbi4KKyAqIEBwYXJhbSBjYXRl
Z29yeSBUaGUgZmllbGQgY2F0ZWdvcnkgdG8gZml4IHdoZW4gaXRlcmF0aW5nLgorICogQHBhcmFt
IGVjIFNldCBpZiBhbiBlcnJvciBvY2N1cnMuCisgKiBAZHJhZnQgSUNVIDY0CisgKi8KK1VfRFJB
RlQgdm9pZCBVX0VYUE9SVDIKK3VjZnBvc19jb25zdHJhaW5DYXRlZ29yeSgKKyAgICBVQ29uc3Ry
YWluZWRGaWVsZFBvc2l0aW9uKiB1Y2Zwb3MsCisgICAgaW50MzJfdCBjYXRlZ29yeSwKKyAgICBV
RXJyb3JDb2RlKiBlYyk7CisKKworLyoqCisgKiBTZXRzIGEgY29uc3RyYWludCBvbiB0aGUgY2F0
ZWdvcnkgYW5kIGZpZWxkLgorICogCisgKiBXaGVuIHRoaXMgaW5zdGFuY2Ugb2YgVUNvbnN0cmFp
bmVkRmllbGRQb3NpdGlvbiBpcyBwYXNzZWQgdG8gdWZtdHZhbF9uZXh0UG9zaXRpb24sCisgKiBw
b3NpdGlvbnMgYXJlIHNraXBwZWQgdW5sZXNzIHRoZXkgaGF2ZSB0aGUgZ2l2ZW4gY2F0ZWdvcnkg
YW5kIGZpZWxkLgorICoKKyAqIEFueSBwcmV2aW91c2x5IHNldCBjb25zdHJhaW50cyBhcmUgY2xl
YXJlZC4KKyAqCisgKiBGb3IgZXhhbXBsZSwgdG8gbG9vcCBvdmVyIGFsbCBncm91cGluZyBzZXBh
cmF0b3JzOgorICoKKyAqICAgICBVQ29uc3RyYWluZWRGaWVsZFBvc2l0aW9uKiB1Y2Zwb3MgPSB1
Y2Zwb3Nfb3BlbihlYyk7CisgKiAgICAgdWNmcG9zX2NvbnN0cmFpbkZpZWxkKHVjZnBvcywgVUZJ
RUxEQ0FURUdPUllfTlVNQkVSX0ZPUk1BVCwgVU5VTV9HUk9VUElOR19TRVBBUkFUT1JfRklFTEQs
IGVjKTsKKyAqICAgICB3aGlsZSAodWZtdHZhbF9uZXh0UG9zaXRpb24odWZtdHZhbCwgdWNmcG9z
LCBlYykpIHsKKyAqICAgICAgICAgLy8gaGFuZGxlIHRoZSBncm91cGluZyBzZXBhcmF0b3IgcG9z
aXRpb24KKyAqICAgICB9CisgKiAgICAgdWNmcG9zX2Nsb3NlKHVjZnBvcyk7CisgKgorICogQ2hh
bmdpbmcgdGhlIGNvbnN0cmFpbnQgd2hpbGUgaW4gdGhlIG1pZGRsZSBvZiBpdGVyYXRpbmcgb3Zl
ciBhIEZvcm1hdHRlZFZhbHVlCisgKiBkb2VzIG5vdCBnZW5lcmFsbHkgaGF2ZSB3ZWxsLWRlZmlu
ZWQgYmVoYXZpb3IuCisgKgorICogQHBhcmFtIHVjZnBvcyBUaGUgaW5zdGFuY2Ugb2YgVUNvbnN0
cmFpbmVkRmllbGRQb3NpdGlvbi4KKyAqIEBwYXJhbSBjYXRlZ29yeSBUaGUgZmllbGQgY2F0ZWdv
cnkgdG8gZml4IHdoZW4gaXRlcmF0aW5nLgorICogQHBhcmFtIGZpZWxkIFRoZSBmaWVsZCB0byBm
aXggd2hlbiBpdGVyYXRpbmcuCisgKiBAcGFyYW0gZWMgU2V0IGlmIGFuIGVycm9yIG9jY3Vycy4K
KyAqIEBkcmFmdCBJQ1UgNjQKKyAqLworVV9EUkFGVCB2b2lkIFVfRVhQT1JUMgordWNmcG9zX2Nv
bnN0cmFpbkZpZWxkKAorICAgIFVDb25zdHJhaW5lZEZpZWxkUG9zaXRpb24qIHVjZnBvcywKKyAg
ICBpbnQzMl90IGNhdGVnb3J5LAorICAgIGludDMyX3QgZmllbGQsCisgICAgVUVycm9yQ29kZSog
ZWMpOworCisKKy8qKgorICogR2V0cyB0aGUgZmllbGQgY2F0ZWdvcnkgZm9yIHRoZSBjdXJyZW50
IHBvc2l0aW9uLgorICoKKyAqIElmIGEgY2F0ZWdvcnkgb3IgZmllbGQgY29uc3RyYWludCB3YXMg
c2V0LCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNvbnN0cmFpbmVkCisgKiBjYXRlZ29yeS4g
T3RoZXJ3aXNlLCB0aGUgcmV0dXJuIHZhbHVlIGlzIHdlbGwtZGVmaW5lZCBvbmx5IGFmdGVyCisg
KiB1Zm10dmFsX25leHRQb3NpdGlvbiByZXR1cm5zIFRSVUUuCisgKgorICogQHBhcmFtIHVjZnBv
cyBUaGUgaW5zdGFuY2Ugb2YgVUNvbnN0cmFpbmVkRmllbGRQb3NpdGlvbi4KKyAqIEBwYXJhbSBl
YyBTZXQgaWYgYW4gZXJyb3Igb2NjdXJzLgorICogQHJldHVybiBUaGUgZmllbGQgY2F0ZWdvcnkg
c2F2ZWQgaW4gdGhlIGluc3RhbmNlLgorICogQGRyYWZ0IElDVSA2NAorICovCitVX0RSQUZUIGlu
dDMyX3QgVV9FWFBPUlQyCit1Y2Zwb3NfZ2V0Q2F0ZWdvcnkoCisgICAgY29uc3QgVUNvbnN0cmFp
bmVkRmllbGRQb3NpdGlvbiogdWNmcG9zLAorICAgIFVFcnJvckNvZGUqIGVjKTsKKworCisvKioK
KyAqIEdldHMgdGhlIGZpZWxkIGZvciB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKiBJZiBh
IGZpZWxkIGNvbnN0cmFpbnQgd2FzIHNldCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjb25z
dHJhaW5lZAorICogZmllbGQuIE90aGVyd2lzZSwgdGhlIHJldHVybiB2YWx1ZSBpcyB3ZWxsLWRl
ZmluZWQgb25seSBhZnRlcgorICogdWZtdHZhbF9uZXh0UG9zaXRpb24gcmV0dXJucyBUUlVFLgor
ICoKKyAqIEBwYXJhbSB1Y2Zwb3MgVGhlIGluc3RhbmNlIG9mIFVDb25zdHJhaW5lZEZpZWxkUG9z
aXRpb24uCisgKiBAcGFyYW0gZWMgU2V0IGlmIGFuIGVycm9yIG9jY3Vycy4KKyAqIEByZXR1cm4g
VGhlIGZpZWxkIHNhdmVkIGluIHRoZSBpbnN0YW5jZS4KKyAqIEBkcmFmdCBJQ1UgNjQKKyAqLwor
VV9EUkFGVCBpbnQzMl90IFVfRVhQT1JUMgordWNmcG9zX2dldEZpZWxkKAorICAgIGNvbnN0IFVD
b25zdHJhaW5lZEZpZWxkUG9zaXRpb24qIHVjZnBvcywKKyAgICBVRXJyb3JDb2RlKiBlYyk7CisK
KworLyoqCisgKiBHZXRzIHRoZSBJTkNMVVNJVkUgc3RhcnQgYW5kIEVYQ0xVU0lWRSBlbmQgaW5k
ZXggc3RvcmVkIGZvciB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKiBUaGUgb3V0cHV0IHZh
bHVlcyBhcmUgd2VsbC1kZWZpbmVkIG9ubHkgYWZ0ZXIgdWZtdHZhbF9uZXh0UG9zaXRpb24gcmV0
dXJucyBUUlVFLgorICoKKyAqIEBwYXJhbSB1Y2Zwb3MgVGhlIGluc3RhbmNlIG9mIFVDb25zdHJh
aW5lZEZpZWxkUG9zaXRpb24uCisgKiBAcGFyYW0gcFN0YXJ0IFNldCB0byB0aGUgc3RhcnQgaW5k
ZXggc2F2ZWQgaW4gdGhlIGluc3RhbmNlLiBJZ25vcmVkIGlmIG51bGxwdHIuCisgKiBAcGFyYW0g
cExpbWl0IFNldCB0byB0aGUgZW5kIGluZGV4IHNhdmVkIGluIHRoZSBpbnN0YW5jZS4gSWdub3Jl
ZCBpZiBudWxscHRyLgorICogQHBhcmFtIGVjIFNldCBpZiBhbiBlcnJvciBvY2N1cnMuCisgKiBA
ZHJhZnQgSUNVIDY0CisgKi8KK1VfRFJBRlQgdm9pZCBVX0VYUE9SVDIKK3VjZnBvc19nZXRJbmRl
eGVzKAorICAgIGNvbnN0IFVDb25zdHJhaW5lZEZpZWxkUG9zaXRpb24qIHVjZnBvcywKKyAgICBp
bnQzMl90KiBwU3RhcnQsCisgICAgaW50MzJfdCogcExpbWl0LAorICAgIFVFcnJvckNvZGUqIGVj
KTsKKworCisvKioKKyAqIEdldHMgYW4gaW50NjQgdGhhdCBGb3JtYXR0ZWRWYWx1ZSBpbXBsZW1l
bnRhdGlvbnMgbWF5IHVzZSBmb3Igc3RvcmFnZS4KKyAqCisgKiBUaGUgaW5pdGlhbCB2YWx1ZSBp
cyB6ZXJvLgorICoKKyAqIFVzZXJzIG9mIEZvcm1hdHRlZFZhbHVlIHNob3VsZCBub3QgbmVlZCB0
byBjYWxsIHRoaXMgbWV0aG9kLgorICoKKyAqIEBwYXJhbSB1Y2Zwb3MgVGhlIGluc3RhbmNlIG9m
IFVDb25zdHJhaW5lZEZpZWxkUG9zaXRpb24uCisgKiBAcGFyYW0gZWMgU2V0IGlmIGFuIGVycm9y
IG9jY3Vycy4KKyAqIEByZXR1cm4gVGhlIGN1cnJlbnQgaXRlcmF0aW9uIGNvbnRleHQgZnJvbSB1
Y2Zwb3Nfc2V0SW50NjRJdGVyYXRpb25Db250ZXh0LgorICogQGRyYWZ0IElDVSA2NAorICovCitV
X0RSQUZUIGludDY0X3QgVV9FWFBPUlQyCit1Y2Zwb3NfZ2V0SW50NjRJdGVyYXRpb25Db250ZXh0
KAorICAgIGNvbnN0IFVDb25zdHJhaW5lZEZpZWxkUG9zaXRpb24qIHVjZnBvcywKKyAgICBVRXJy
b3JDb2RlKiBlYyk7CisKKworLyoqCisgKiBTZXRzIGFuIGludDY0IHRoYXQgRm9ybWF0dGVkVmFs
dWUgaW1wbGVtZW50YXRpb25zIG1heSB1c2UgZm9yIHN0b3JhZ2UuCisgKgorICogSW50ZW5kZWQg
dG8gYmUgdXNlZCBieSBGb3JtYXR0ZWRWYWx1ZSBpbXBsZW1lbnRhdGlvbnMuCisgKgorICogQHBh
cmFtIHVjZnBvcyBUaGUgaW5zdGFuY2Ugb2YgVUNvbnN0cmFpbmVkRmllbGRQb3NpdGlvbi4KKyAq
IEBwYXJhbSBjb250ZXh0IFRoZSBuZXcgaXRlcmF0aW9uIGNvbnRleHQuCisgKiBAcGFyYW0gZWMg
U2V0IGlmIGFuIGVycm9yIG9jY3Vycy4KKyAqIEBkcmFmdCBJQ1UgNjQKKyAqLworVV9EUkFGVCB2
b2lkIFVfRVhQT1JUMgordWNmcG9zX3NldEludDY0SXRlcmF0aW9uQ29udGV4dCgKKyAgICBVQ29u
c3RyYWluZWRGaWVsZFBvc2l0aW9uKiB1Y2Zwb3MsCisgICAgaW50NjRfdCBjb250ZXh0LAorICAg
IFVFcnJvckNvZGUqIGVjKTsKKworCisvKioKKyAqIERldGVybWluZXMgd2hldGhlciBhIGdpdmVu
IGZpZWxkIHNob3VsZCBiZSBpbmNsdWRlZCBnaXZlbiB0aGUKKyAqIGNvbnN0cmFpbnRzLgorICoK
KyAqIEludGVuZGVkIHRvIGJlIHVzZWQgYnkgRm9ybWF0dGVkVmFsdWUgaW1wbGVtZW50YXRpb25z
LgorICoKKyAqIEBwYXJhbSB1Y2Zwb3MgVGhlIGluc3RhbmNlIG9mIFVDb25zdHJhaW5lZEZpZWxk
UG9zaXRpb24uCisgKiBAcGFyYW0gY2F0ZWdvcnkgVGhlIGNhdGVnb3J5IHRvIHRlc3QuCisgKiBA
cGFyYW0gZmllbGQgVGhlIGZpZWxkIHRvIHRlc3QuCisgKiBAcGFyYW0gZWMgU2V0IGlmIGFuIGVy
cm9yIG9jY3Vycy4KKyAqIEBkcmFmdCBJQ1UgNjQKKyAqLworVV9EUkFGVCBVQm9vbCBVX0VYUE9S
VDIKK3VjZnBvc19tYXRjaGVzRmllbGQoCisgICAgY29uc3QgVUNvbnN0cmFpbmVkRmllbGRQb3Np
dGlvbiogdWNmcG9zLAorICAgIGludDMyX3QgY2F0ZWdvcnksCisgICAgaW50MzJfdCBmaWVsZCwK
KyAgICBVRXJyb3JDb2RlKiBlYyk7CisKKworLyoqCisgKiBTZXRzIG5ldyB2YWx1ZXMgZm9yIHRo
ZSBwcmltYXJ5IHB1YmxpYyBnZXR0ZXJzLgorICoKKyAqIEludGVuZGVkIHRvIGJlIHVzZWQgYnkg
Rm9ybWF0dGVkVmFsdWUgaW1wbGVtZW50YXRpb25zLgorICoKKyAqIEl0IGlzIHVwIHRvIHRoZSBp
bXBsZW1lbnRhdGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgdXNlci1yZXF1ZXN0ZWQKKyAqIGNvbnN0
cmFpbnRzIGFyZSBzYXRpc2ZpZWQuIFRoaXMgbWV0aG9kIGRvZXMgbm90IGNoZWNrIQorICoKKyAq
IEBwYXJhbSB1Y2Zwb3MgVGhlIGluc3RhbmNlIG9mIFVDb25zdHJhaW5lZEZpZWxkUG9zaXRpb24u
CisgKiBAcGFyYW0gY2F0ZWdvcnkgVGhlIG5ldyBmaWVsZCBjYXRlZ29yeS4KKyAqIEBwYXJhbSBm
aWVsZCBUaGUgbmV3IGZpZWxkLgorICogQHBhcmFtIHN0YXJ0IFRoZSBuZXcgaW5jbHVzaXZlIHN0
YXJ0IGluZGV4LgorICogQHBhcmFtIGxpbWl0IFRoZSBuZXcgZXhjbHVzaXZlIGVuZCBpbmRleC4K
KyAqIEBwYXJhbSBlYyBTZXQgaWYgYW4gZXJyb3Igb2NjdXJzLgorICogQGRyYWZ0IElDVSA2NAor
ICovCitVX0RSQUZUIHZvaWQgVV9FWFBPUlQyCit1Y2Zwb3Nfc2V0U3RhdGUoCisgICAgVUNvbnN0
cmFpbmVkRmllbGRQb3NpdGlvbiogdWNmcG9zLAorICAgIGludDMyX3QgY2F0ZWdvcnksCisgICAg
aW50MzJfdCBmaWVsZCwKKyAgICBpbnQzMl90IHN0YXJ0LAorICAgIGludDMyX3QgbGltaXQsCisg
ICAgVUVycm9yQ29kZSogZWMpOworCisKK3N0cnVjdCBVRm9ybWF0dGVkVmFsdWU7CisvKioKKyAq
IEFuIGFic3RyYWN0IGZvcm1hdHRlZCB2YWx1ZTogYSBzdHJpbmcgd2l0aCBhc3NvY2lhdGVkIGZp
ZWxkIGF0dHJpYnV0ZXMuCisgKiBNYW55IGZvcm1hdHRlcnMgZm9ybWF0IHRvIHR5cGVzIGNvbXBh
dGlibGUgd2l0aCBVRm9ybWF0dGVkVmFsdWUuCisgKgorICogQGRyYWZ0IElDVSA2NAorICovCit0
eXBlZGVmIHN0cnVjdCBVRm9ybWF0dGVkVmFsdWUgVUZvcm1hdHRlZFZhbHVlOworCisKKy8qKgor
ICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGZvcm1hdHRlZCBzdHJpbmcuIFRoZSBwb2ludGVy
IGlzIG93bmVkIGJ5IHRoZSBVRm9ybWF0dGVkVmFsdWUuIFRoZQorICogcmV0dXJuIHZhbHVlIGlz
IHZhbGlkIG9ubHkgYXMgbG9uZyBhcyB0aGUgVUZvcm1hdHRlZFZhbHVlIGlzIHByZXNlbnQgYW5k
IHVuY2hhbmdlZCBpbiBtZW1vcnkuCisgKgorICogVGhlIHJldHVybiB2YWx1ZSBpcyBOVUwtdGVy
bWluYXRlZCBidXQgY291bGQgY29udGFpbiBpbnRlcm5hbCBOVUxzLgorICoKKyAqIEBwYXJhbSB1
Zm10dmFsCisgKiAgICAgICAgIFRoZSBvYmplY3QgY29udGFpbmluZyB0aGUgZm9ybWF0dGVkIHN0
cmluZyBhbmQgYXR0cmlidXRlcy4KKyAqIEBwYXJhbSBwTGVuZ3RoIE91dHB1dCB2YXJpYWJsZSBm
b3IgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLiBJZ25vcmVkIGlmIE5VTEwuCisgKiBAcGFyYW0g
ZWMgU2V0IGlmIGFuIGVycm9yIG9jY3Vycy4KKyAqIEByZXR1cm4gQSBOVUwtdGVybWluYXRlZCBj
aGFyMTYgc3RyaW5nIG93bmVkIGJ5IHRoZSBVRm9ybWF0dGVkVmFsdWUuCisgKiBAZHJhZnQgSUNV
IDY0CisgKi8KK1VfRFJBRlQgY29uc3QgVUNoYXIqIFVfRVhQT1JUMgordWZtdHZhbF9nZXRTdHJp
bmcoCisgICAgY29uc3QgVUZvcm1hdHRlZFZhbHVlKiB1Zm10dmFsLAorICAgIGludDMyX3QqIHBM
ZW5ndGgsCisgICAgVUVycm9yQ29kZSogZWMpOworCisKKy8qKgorICogSXRlcmF0ZXMgb3ZlciBm
aWVsZCBwb3NpdGlvbnMgaW4gdGhlIFVGb3JtYXR0ZWRWYWx1ZS4gVGhpcyBsZXRzIHlvdSBkZXRl
cm1pbmUgdGhlIHBvc2l0aW9uCisgKiBvZiBzcGVjaWZpYyB0eXBlcyBvZiBzdWJzdHJpbmdzLCBs
aWtlIGEgbW9udGggb3IgYSBkZWNpbWFsIHNlcGFyYXRvci4KKyAqCisgKiBUbyBsb29wIG92ZXIg
YWxsIGZpZWxkIHBvc2l0aW9uczoKKyAqCisgKiAgICAgVUNvbnN0cmFpbmVkRmllbGRQb3NpdGlv
biogdWNmcG9zID0gdWNmcG9zX29wZW4oZWMpOworICogICAgIHdoaWxlICh1Zm10dmFsX25leHRQ
b3NpdGlvbih1Zm10dmFsLCB1Y2Zwb3MsIGVjKSkgeworICogICAgICAgICAvLyBoYW5kbGUgdGhl
IGZpZWxkIHBvc2l0aW9uOyBnZXQgaW5mb3JtYXRpb24gZnJvbSB1Y2Zwb3MKKyAqICAgICB9Cisg
KiAgICAgdWNmcG9zX2Nsb3NlKHVjZnBvcyk7CisgKgorICogQHBhcmFtIHVmbXR2YWwKKyAqICAg
ICAgICAgVGhlIG9iamVjdCBjb250YWluaW5nIHRoZSBmb3JtYXR0ZWQgc3RyaW5nIGFuZCBhdHRy
aWJ1dGVzLgorICogQHBhcmFtIHVjZnBvcworICogICAgICAgICBUaGUgb2JqZWN0IHVzZWQgZm9y
IGl0ZXJhdGlvbiBzdGF0ZTsgY2FuIHByb3ZpZGUgY29uc3RyYWludHMgdG8gaXRlcmF0ZSBvdmVy
IG9ubHkKKyAqICAgICAgICAgb25lIHNwZWNpZmljIGNhdGVnb3J5IG9yIGZpZWxkOworICogICAg
ICAgICBzZWUgdWNmcG9zX2NvbnN0cmFpbkNhdGVnb3J5CisgKiAgICAgICAgIGFuZCB1Y2Zwb3Nf
Y29uc3RyYWluRmllbGQuCisgKiBAcGFyYW0gZWMgU2V0IGlmIGFuIGVycm9yIG9jY3Vycy4KKyAq
IEByZXR1cm4gVFJVRSBpZiBhbm90aGVyIHBvc2l0aW9uIHdhcyBmb3VuZDsgRkFMU0Ugb3RoZXJ3
aXNlLgorICogQGRyYWZ0IElDVSA2NAorICovCitVX0RSQUZUIFVCb29sIFVfRVhQT1JUMgordWZt
dHZhbF9uZXh0UG9zaXRpb24oCisgICAgY29uc3QgVUZvcm1hdHRlZFZhbHVlKiB1Zm10dmFsLAor
ICAgIFVDb25zdHJhaW5lZEZpZWxkUG9zaXRpb24qIHVjZnBvcywKKyAgICBVRXJyb3JDb2RlKiBl
Yyk7CisKKworI2lmIFVfU0hPV19DUExVU1BMVVNfQVBJCitVX05BTUVTUEFDRV9CRUdJTgorCisv
KioKKyAqIFxjbGFzcyBMb2NhbFVDb25zdHJhaW5lZEZpZWxkUG9zaXRpb25Qb2ludGVyCisgKiAi
U21hcnQgcG9pbnRlciIgY2xhc3M7IGNsb3NlcyBhIFVDb25zdHJhaW5lZEZpZWxkUG9zaXRpb24g
dmlhIHVjZnBvc19jbG9zZSgpLgorICogRm9yIG1vc3QgbWV0aG9kcyBzZWUgdGhlIExvY2FsUG9p
bnRlckJhc2UgYmFzZSBjbGFzcy4KKyAqCisgKiBVc2FnZToKKyAqCisgKiAgICAgTG9jYWxVQ29u
c3RyYWluZWRGaWVsZFBvc2l0aW9uUG9pbnRlciB1Y2Zwb3ModWNmcG9zX29wZW4oZWMpKTsKKyAq
ICAgICAvLyBubyBuZWVkIHRvIGV4cGxpY2l0bHkgY2FsbCB1Y2Zwb3NfY2xvc2UoKQorICoKKyAq
IEBkcmFmdCBJQ1UgNjQKKyAqLworVV9ERUZJTkVfTE9DQUxfT1BFTl9QT0lOVEVSKExvY2FsVUNv
bnN0cmFpbmVkRmllbGRQb3NpdGlvblBvaW50ZXIsCisgICAgVUNvbnN0cmFpbmVkRmllbGRQb3Np
dGlvbiwKKyAgICB1Y2Zwb3NfY2xvc2UpOworCitVX05BTUVTUEFDRV9FTkQKKyNlbmRpZiAvLyBV
X1NIT1dfQ1BMVVNQTFVTX0FQSQorCisKKyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLwor
I2VuZGlmIC8qICNpZiAhVUNPTkZJR19OT19GT1JNQVRUSU5HICovCisjZW5kaWYgLy8gX19VRk9S
TUFUVEVEVkFMVUVfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3VnZW5k
ZXIuaCBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdWdlbmRlci5oCmluZGV4IGQwMTVhMjMwMGNm
NmQ2YWYxMjk1ZTkzYjg3MjBjZjg2MjA4OTg3OWIuLjkwM2YzZGQ1ZGVlYmJlNmQ1MTMzOTE1NTEw
OGMzNDliYmQxMGQ1YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdWdlbmRl
ci5oCisrKyBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdWdlbmRlci5oCkBAIC00OSwxMSArNDks
MTEgQEAgZW51bSBVR2VuZGVyIHsKICAqLwogdHlwZWRlZiBlbnVtIFVHZW5kZXIgVUdlbmRlcjsK
IAorc3RydWN0IFVHZW5kZXJJbmZvOwogLyoqCiAgKiBPcGFxdWUgVUdlbmRlckluZm8gb2JqZWN0
IGZvciB1c2UgaW4gQyBwcm9ncmFtcy4KICAqIEBzdGFibGUgSUNVIDUwCiAgKi8KLXN0cnVjdCBV
R2VuZGVySW5mbzsKIHR5cGVkZWYgc3RydWN0IFVHZW5kZXJJbmZvIFVHZW5kZXJJbmZvOwogCiAv
KioKQEAgLTc3LDcgKzc3LDcgQEAgdWdlbmRlcl9nZXRJbnN0YW5jZShjb25zdCBjaGFyICpsb2Nh
bGUsIFVFcnJvckNvZGUgKnN0YXR1cyk7CiAgKiBAc3RhYmxlIElDVSA1MAogICovCiBVX1NUQUJM
RSBVR2VuZGVyIFVfRVhQT1JUMgotdWdlbmRlcl9nZXRMaXN0R2VuZGVyKGNvbnN0IFVHZW5kZXJJ
bmZvKiBnZW5kZXJpbmZvLCBjb25zdCBVR2VuZGVyICpnZW5kZXJzLCBpbnQzMl90IHNpemUsIFVF
cnJvckNvZGUgKnN0YXR1cyk7Cit1Z2VuZGVyX2dldExpc3RHZW5kZXIoY29uc3QgVUdlbmRlcklu
Zm8qIGdlbmRlckluZm8sIGNvbnN0IFVHZW5kZXIgKmdlbmRlcnMsIGludDMyX3Qgc2l6ZSwgVUVy
cm9yQ29kZSAqc3RhdHVzKTsKIAogI2VuZGlmIC8qICNpZiAhVUNPTkZJR19OT19GT1JNQVRUSU5H
ICovCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdWxpc3Rmb3JtYXR0ZXIu
aCBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdWxpc3Rmb3JtYXR0ZXIuaAppbmRleCA5ZmUyNGY3
YzdiNWVmY2JkYTgxMmQ2Mjk1MzJjODZlZGRhYjUzNTI0Li4yYWZjNTBkODQ3YmQ2NDY3YjVlNDI2
ZjUxNmFmZDI4MTZkN2NmYTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3Vs
aXN0Zm9ybWF0dGVyLmgKKysrIGIvU291cmNlL1dURi9pY3UvdW5pY29kZS91bGlzdGZvcm1hdHRl
ci5oCkBAIC0xNSw2ICsxNSw3IEBACiAjaWYgIVVDT05GSUdfTk9fRk9STUFUVElORwogCiAjaW5j
bHVkZSAidW5pY29kZS9sb2NhbHBvaW50ZXIuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3Vmb3JtYXR0
ZWR2YWx1ZS5oIgogCiAvKioKICAqIFxmaWxlCkBAIC0zMyw2ICszNCwzNSBAQAogc3RydWN0IFVM
aXN0Rm9ybWF0dGVyOwogdHlwZWRlZiBzdHJ1Y3QgVUxpc3RGb3JtYXR0ZXIgVUxpc3RGb3JtYXR0
ZXI7ICAvKio8IEMgdHlwZWRlZiBmb3Igc3RydWN0IFVMaXN0Rm9ybWF0dGVyLiBAc3RhYmxlIElD
VSA1NSAqLwogCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKK3N0cnVjdCBVRm9ybWF0dGVkTGlz
dDsKKy8qKgorICogT3BhcXVlIHN0cnVjdCB0byBjb250YWluIHRoZSByZXN1bHRzIG9mIGEgVUxp
c3RGb3JtYXR0ZXIgb3BlcmF0aW9uLgorICogQGRyYWZ0IElDVSA2NAorICovCit0eXBlZGVmIHN0
cnVjdCBVRm9ybWF0dGVkTGlzdCBVRm9ybWF0dGVkTGlzdDsKKyNlbmRpZiAvKiBVX0hJREVfRFJB
RlRfQVBJICovCisKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQorLyoqCisgKiBGaWVsZFBvc2l0
aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvcnMgZm9yIGZvcm1hdCBmaWVsZHMKKyAqIGRl
ZmluZWQgYnkgTGlzdEZvcm1hdHRlci4KKyAqIEBkcmFmdCBJQ1UgNjMKKyAqLwordHlwZWRlZiBl
bnVtIFVMaXN0Rm9ybWF0dGVyRmllbGQgeworICAgIC8qKgorICAgICAqIFRoZSBsaXRlcmFsIHRl
eHQgaW4gdGhlIHJlc3VsdCB3aGljaCBjYW1lIGZyb20gdGhlIHJlc291cmNlcy4KKyAgICAgKiBA
ZHJhZnQgSUNVIDYzCisgICAgICovCisgICAgVUxJU1RGTVRfTElURVJBTF9GSUVMRCwKKyAgICAv
KioKKyAgICAgKiBUaGUgZWxlbWVudCB0ZXh0IGluIHRoZSByZXN1bHQgd2hpY2ggY2FtZSBmcm9t
IHRoZSBpbnB1dCBzdHJpbmdzLgorICAgICAqIEBkcmFmdCBJQ1UgNjMKKyAgICAgKi8KKyAgICBV
TElTVEZNVF9FTEVNRU5UX0ZJRUxECit9IFVMaXN0Rm9ybWF0dGVyRmllbGQ7CisjZW5kaWYgLy8g
VV9ISURFX0RSQUZUX0FQSQorCiAvKioKICAqIE9wZW4gYSBuZXcgVUxpc3RGb3JtYXR0ZXIgb2Jq
ZWN0IHVzaW5nIHRoZSBydWxlcyBmb3IgYSBnaXZlbiBsb2NhbGUuCiAgKiBAcGFyYW0gbG9jYWxl
CkBAIC02Miw2ICs5Miw1MyBAQCB1bGlzdGZtdF9vcGVuKGNvbnN0IGNoYXIqICBsb2NhbGUsCiBV
X0NBUEkgdm9pZCBVX0VYUE9SVDIKIHVsaXN0Zm10X2Nsb3NlKFVMaXN0Rm9ybWF0dGVyICpsaXN0
Zm10KTsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisvKioKKyAqIENyZWF0ZXMgYW4gb2Jq
ZWN0IHRvIGhvbGQgdGhlIHJlc3VsdCBvZiBhIFVMaXN0Rm9ybWF0dGVyCisgKiBvcGVyYXRpb24u
IFRoZSBvYmplY3QgY2FuIGJlIHVzZWQgcmVwZWF0ZWRseTsgaXQgaXMgY2xlYXJlZCB3aGVuZXZl
cgorICogcGFzc2VkIHRvIGEgZm9ybWF0IGZ1bmN0aW9uLgorICoKKyAqIEBwYXJhbSBlYyBTZXQg
aWYgYW4gZXJyb3Igb2NjdXJzLgorICogQHJldHVybiBBIHBvaW50ZXIgbmVlZGluZyBvd25lcnNo
aXAuCisgKiBAZHJhZnQgSUNVIDY0CisgKi8KK1VfQ0FQSSBVRm9ybWF0dGVkTGlzdCogVV9FWFBP
UlQyCit1bGlzdGZtdF9vcGVuUmVzdWx0KFVFcnJvckNvZGUqIGVjKTsKKworLyoqCisgKiBSZXR1
cm5zIGEgcmVwcmVzZW50YXRpb24gb2YgYSBVRm9ybWF0dGVkTGlzdCBhcyBhIFVGb3JtYXR0ZWRW
YWx1ZSwKKyAqIHdoaWNoIGNhbiBiZSBzdWJzZXF1ZW50bHkgcGFzc2VkIHRvIGFueSBBUEkgcmVx
dWlyaW5nIHRoYXQgdHlwZS4KKyAqCisgKiBUaGUgcmV0dXJuZWQgb2JqZWN0IGlzIG93bmVkIGJ5
IHRoZSBVRm9ybWF0dGVkTGlzdCBhbmQgaXMgdmFsaWQKKyAqIG9ubHkgYXMgbG9uZyBhcyB0aGUg
VUZvcm1hdHRlZExpc3QgaXMgcHJlc2VudCBhbmQgdW5jaGFuZ2VkIGluIG1lbW9yeS4KKyAqCisg
KiBZb3UgY2FuIHRoaW5rIG9mIHRoaXMgbWV0aG9kIGFzIGEgY2FzdCBiZXR3ZWVuIHR5cGVzLgor
ICoKKyAqIFdoZW4gY2FsbGluZyB1Zm10dmFsX25leHRQb3NpdGlvbigpOgorICogVGhlIGZpZWxk
cyBhcmUgcmV0dXJuZWQgZnJvbSBzdGFydCB0byBlbmQuIFRoZSBzcGVjaWFsIGZpZWxkIGNhdGVn
b3J5CisgKiBVRklFTERfQ0FURUdPUllfTElTVF9TUEFOIGlzIHVzZWQgdG8gaW5kaWNhdGUgd2hp
Y2ggYXJndW1lbnQKKyAqIHdhcyBpbnNlcnRlZCBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24uIFRoZSBz
cGFuIGNhdGVnb3J5IHdpbGwKKyAqIGFsd2F5cyBvY2N1ciBiZWZvcmUgdGhlIGNvcnJlc3BvbmRp
bmcgaW5zdGFuY2Ugb2YgVUZJRUxEX0NBVEVHT1JZX0xJU1QKKyAqIGluIHRoZSB1Zm10dmFsX25l
eHRQb3NpdGlvbigpIGl0ZXJhdG9yLgorICoKKyAqIEBwYXJhbSB1cmVzdWx0IFRoZSBvYmplY3Qg
Y29udGFpbmluZyB0aGUgZm9ybWF0dGVkIHN0cmluZy4KKyAqIEBwYXJhbSBlYyBTZXQgaWYgYW4g
ZXJyb3Igb2NjdXJzLgorICogQHJldHVybiBBIFVGb3JtYXR0ZWRWYWx1ZSBvd25lZCBieSB0aGUg
aW5wdXQgb2JqZWN0LgorICogQGRyYWZ0IElDVSA2NAorICovCitVX0NBUEkgY29uc3QgVUZvcm1h
dHRlZFZhbHVlKiBVX0VYUE9SVDIKK3VsaXN0Zm10X3Jlc3VsdEFzVmFsdWUoY29uc3QgVUZvcm1h
dHRlZExpc3QqIHVyZXN1bHQsIFVFcnJvckNvZGUqIGVjKTsKKworLyoqCisgKiBSZWxlYXNlcyB0
aGUgVUZvcm1hdHRlZExpc3QgY3JlYXRlZCBieSB1bGlzdGZtdF9vcGVuUmVzdWx0KCkuCisgKgor
ICogQHBhcmFtIHVyZXN1bHQgVGhlIG9iamVjdCB0byByZWxlYXNlLgorICogQGRyYWZ0IElDVSA2
NAorICovCitVX0NBUEkgdm9pZCBVX0VYUE9SVDIKK3VsaXN0Zm10X2Nsb3NlUmVzdWx0KFVGb3Jt
YXR0ZWRMaXN0KiB1cmVzdWx0KTsKKyNlbmRpZiAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKIAog
I2lmIFVfU0hPV19DUExVU1BMVVNfQVBJCiAKQEAgLTc4LDYgKzE1NSwxOSBAQCBVX05BTUVTUEFD
RV9CRUdJTgogICovCiBVX0RFRklORV9MT0NBTF9PUEVOX1BPSU5URVIoTG9jYWxVTGlzdEZvcm1h
dHRlclBvaW50ZXIsIFVMaXN0Rm9ybWF0dGVyLCB1bGlzdGZtdF9jbG9zZSk7CiAKKyNpZm5kZWYg
VV9ISURFX0RSQUZUX0FQSQorLyoqCisgKiBcY2xhc3MgTG9jYWxVRm9ybWF0dGVkTGlzdFBvaW50
ZXIKKyAqICJTbWFydCBwb2ludGVyIiBjbGFzcywgY2xvc2VzIGEgVUZvcm1hdHRlZExpc3Qgdmlh
IHVsaXN0Zm10X2Nsb3NlUmVzdWx0KCkuCisgKiBGb3IgbW9zdCBtZXRob2RzIHNlZSB0aGUgTG9j
YWxQb2ludGVyQmFzZSBiYXNlIGNsYXNzLgorICoKKyAqIEBzZWUgTG9jYWxQb2ludGVyQmFzZQor
ICogQHNlZSBMb2NhbFBvaW50ZXIKKyAqIEBkcmFmdCBJQ1UgNjQKKyAqLworVV9ERUZJTkVfTE9D
QUxfT1BFTl9QT0lOVEVSKExvY2FsVUZvcm1hdHRlZExpc3RQb2ludGVyLCBVRm9ybWF0dGVkTGlz
dCwgdWxpc3RmbXRfY2xvc2VSZXN1bHQpOworI2VuZGlmIC8qIFVfSElERV9EUkFGVF9BUEkgKi8K
KwogVV9OQU1FU1BBQ0VfRU5ECiAKICNlbmRpZgpAQCAtMTI1LDYgKzIxNSw0MyBAQCB1bGlzdGZt
dF9mb3JtYXQoY29uc3QgVUxpc3RGb3JtYXR0ZXIqIGxpc3RmbXQsCiAgICAgICAgICAgICAgICAg
aW50MzJfdCAgICAgICAgICAgIHJlc3VsdENhcGFjaXR5LAogICAgICAgICAgICAgICAgIFVFcnJv
ckNvZGUqICAgICAgICBzdGF0dXMpOwogCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKy8qKgor
ICogRm9ybWF0cyBhIGxpc3Qgb2Ygc3RyaW5ncyB0byBhIFVGb3JtYXR0ZWRMaXN0LCB3aGljaCBl
eHBvc2VzIG1vcmUKKyAqIGluZm9ybWF0aW9uIHRoYW4gdGhlIHN0cmluZyBleHBvcnRlZCBieSB1
bGlzdGZtdF9mb3JtYXQoKS4KKyAqCisgKiBAcGFyYW0gbGlzdGZtdAorICogICAgICAgICAgICBU
aGUgVUxpc3RGb3JtYXR0ZXIgb2JqZWN0IHNwZWNpZnlpbmcgdGhlIGxpc3QgY29udmVudGlvbnMu
CisgKiBAcGFyYW0gc3RyaW5ncworICogICAgICAgICAgICBBbiBhcnJheSBvZiBwb2ludGVycyB0
byBVQ2hhciBzdHJpbmdzOyB0aGUgYXJyYXkgbGVuZ3RoIGlzCisgKiAgICAgICAgICAgIHNwZWNp
ZmllZCBieSBzdHJpbmdDb3VudC4gTXVzdCBiZSBub24tTlVMTCBpZiBzdHJpbmdDb3VudCA+IDAu
CisgKiBAcGFyYW0gc3RyaW5nTGVuZ3RocworICogICAgICAgICAgICBBbiBhcnJheSBvZiBzdHJp
bmcgbGVuZ3RocyBjb3JyZXNwb25kaW5nIHRvIHRoZSBzdHJpbmdzW10KKyAqICAgICAgICAgICAg
cGFyYW1ldGVyOyBhbnkgaW5kaXZpZHVhbCBsZW5ndGggdmFsdWUgbWF5IGJlIG5lZ2F0aXZlIHRv
IGluZGljYXRlCisgKiAgICAgICAgICAgIHRoYXQgdGhlIGNvcnJlc3BvbmRpbmcgc3RyaW5nc1td
IGVudHJ5IGlzIDAtdGVybWluYXRlZCwgb3IKKyAqICAgICAgICAgICAgc3RyaW5nTGVuZ3RocyBp
dHNlbGYgbWF5IGJlIE5VTEwgaWYgYWxsIG9mIHRoZSBzdHJpbmdzIGFyZQorICogICAgICAgICAg
ICAwLXRlcm1pbmF0ZWQuIElmIG5vbi1OVUxMLCB0aGUgc3RyaW5nTGVuZ3RocyBhcnJheSBtdXN0
IGhhdmUKKyAqICAgICAgICAgICAgc3RyaW5nQ291bnQgZW50cmllcy4KKyAqIEBwYXJhbSBzdHJp
bmdDb3VudAorICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gc3RyaW5nc1td
LCBhbmQgdGhlIG51bWJlciBvZiBlbnRyaWVzCisgKiAgICAgICAgICAgIGluIHRoZSBzdHJpbmdM
ZW5ndGhzIGFycmF5IGlmIGl0IGlzIG5vdCBOVUxMLiBNdXN0IGJlID49IDAuCisgKiBAcGFyYW0g
dXJlc3VsdAorICogICAgICAgICAgICBUaGUgb2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSBy
ZXN1bHQgb2YgdGhlIGxpc3QgZm9ybWF0dGluZworICogICAgICAgICAgICBvcGVyYXRpb24uIFNl
ZSB1bGlzdGZtdF9vcGVuUmVzdWx0KCkuCisgKiBAcGFyYW0gc3RhdHVzCisgKiAgICAgICAgICAg
IEVycm9yIGNvZGUgc2V0IGlmIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBmb3JtYXR0aW5nLgor
ICogQGRyYWZ0IElDVSA2NAorICovCitVX0NBUEkgdm9pZCBVX0VYUE9SVDIKK3VsaXN0Zm10X2Zv
cm1hdFN0cmluZ3NUb1Jlc3VsdCgKKyAgICAgICAgICAgICAgICBjb25zdCBVTGlzdEZvcm1hdHRl
ciogbGlzdGZtdCwKKyAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogY29uc3Qgc3RyaW5nc1td
LAorICAgICAgICAgICAgICAgIGNvbnN0IGludDMyX3QgKiAgICBzdHJpbmdMZW5ndGhzLAorICAg
ICAgICAgICAgICAgIGludDMyX3QgICAgICAgICAgICBzdHJpbmdDb3VudCwKKyAgICAgICAgICAg
ICAgICBVRm9ybWF0dGVkTGlzdCogICAgdXJlc3VsdCwKKyAgICAgICAgICAgICAgICBVRXJyb3JD
b2RlKiAgICAgICAgc3RhdHVzKTsKKyNlbmRpZiAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKICNl
bmRpZiAvKiAjaWYgIVVDT05GSUdfTk9fRk9STUFUVElORyAqLwogCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdW1hY2hpbmUuaCBiL1NvdXJjZS9XVEYvaWN1L3Vu
aWNvZGUvdW1hY2hpbmUuaAppbmRleCAyYmNhYWY0MDUwYTY5NmY0YzI0ZjdkODk1NjU2YTQ2OTFm
MDMxNzcwLi4wMjA1ZGE2MmViNGUxYWRkOWQ2ZjRkMzM4OTRmMWFmNTA5YmMxZmQwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3VtYWNoaW5lLmgKKysrIGIvU291cmNlL1dURi9p
Y3UvdW5pY29kZS91bWFjaGluZS5oCkBAIC0xMjUsNiArMTI1LDkgQEAKICAqIE1heSByZXN1bHQg
aW4gYW4gZXJyb3IgaWYgaXQgYXBwbGllZCB0byBzb21ldGhpbmcgbm90IGFuIG92ZXJyaWRlLgog
ICogQGludGVybmFsCiAgKi8KKyNpZm5kZWYgVV9PVkVSUklERQorI2RlZmluZSBVX09WRVJSSURF
IG92ZXJyaWRlCisjZW5kaWYKIAogLyoqCiAgKiBcZGVmIFVfRklOQUwKQEAgLTEzMywyNCArMTM2
LDEwIEBACiAgKiBNYXkgcmVzdWx0IGluIGFuIGVycm9yIGlmIHN1YmNsYXNzZXMgYXR0ZW1wdCB0
byBvdmVycmlkZS4KICAqIEBpbnRlcm5hbAogICovCi0KLSNpZiBVX0NQTFVTUExVU19WRVJTSU9O
ID49IDExCi0vKiBDKysxMSAqLwotI2lmbmRlZiBVX09WRVJSSURFCi0jZGVmaW5lIFVfT1ZFUlJJ
REUgb3ZlcnJpZGUKLSNlbmRpZgotI2lmbmRlZiBVX0ZJTkFMCisjaWYgIWRlZmluZWQoVV9GSU5B
TCkgfHwgZGVmaW5lZChVX0lOX0RPWFlHRU4pCiAjZGVmaW5lIFVfRklOQUwgZmluYWwKICNlbmRp
ZgotI2Vsc2UKLS8qIG5vdCBDKysxMSAtIGRlZmluZSB0byBub3RoaW5nICovCi0jaWZuZGVmIFVf
T1ZFUlJJREUKLSNkZWZpbmUgVV9PVkVSUklERQotI2VuZGlmCi0jaWZuZGVmIFVfRklOQUwKLSNk
ZWZpbmUgVV9GSU5BTAotI2VuZGlmCi0jZW5kaWYKKwogCiAvKj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8K
IC8qIGxpbWl0cyBmb3IgaW50MzJfdCBldGMuLCBsaWtlIGluIFBPU0lYIGludHR5cGVzLmggICAg
ICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMzE4LDcgKzMwNyw3IEBAIHR5cGVkZWYgaW50OF90
IFVCb29sOwogICogVUNoYXIgaXMgY29uZmlndXJhYmxlIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBV
Q0hBUl9UWVBFCiAgKiBvbiB0aGUgcHJlcHJvY2Vzc29yIG9yIGNvbXBpbGVyIGNvbW1hbmQgbGlu
ZToKICAqIC1EVUNIQVJfVFlQRT11aW50MTZfdCBvciAtRFVDSEFSX1RZUEU9d2NoYXJfdCAoaWYg
VV9TSVpFT0ZfV0NIQVJfVD09MikgZXRjLgotICogKFRoZSBVQ0hBUl9UWVBFIGNhbiBhbHNvIGJl
ICNkZWZpbmVkIGVhcmxpZXIgaW4gdGhpcyBmaWxlLCBmb3Igb3V0c2lkZSB0aGUgSUNVIGxpYnJh
cnkgY29kZS4pCisgKiAoVGhlIFVDSEFSX1RZUEUgY2FuIGFsc28gYmUgXCNkZWZpbmVkIGVhcmxp
ZXIgaW4gdGhpcyBmaWxlLCBmb3Igb3V0c2lkZSB0aGUgSUNVIGxpYnJhcnkgY29kZS4pCiAgKiBU
aGlzIGlzIGZvciB0cmFuc2l0aW9uYWwgdXNlIGZyb20gYXBwbGljYXRpb24gY29kZSB0aGF0IHVz
ZXMgdWludDE2X3Qgb3Igd2NoYXJfdCBmb3IgVVRGLTE2LgogICoKICAqIFRoZSBkZWZhdWx0IGlz
IFVDaGFyPWNoYXIxNl90LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9pY3UvdW5pY29kZS91bXV0
YWJsZWNwdHJpZS5oIGIvU291cmNlL1dURi9pY3UvdW5pY29kZS91bXV0YWJsZWNwdHJpZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmU3NTE5MWE0NDk1MjA5ZmI0Zjk4Mjc4ZmQ1ZWUzNTNhZThmODRiZDUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3VtdXRhYmxlY3B0cmllLmgKQEAg
LTAsMCArMSwyNDEgQEAKKy8vIMKpIDIwMTcgYW5kIGxhdGVyOiBVbmljb2RlLCBJbmMuIGFuZCBv
dGhlcnMuCisvLyBMaWNlbnNlICYgdGVybXMgb2YgdXNlOiBodHRwOi8vd3d3LnVuaWNvZGUub3Jn
L2NvcHlyaWdodC5odG1sCisKKy8vIHVtdXRhYmxlY3B0cmllLmggKHNwbGl0IG91dCBvZiB1Y3B0
cmllLmgpCisvLyBjcmVhdGVkOiAyMDE4amFuMjQgTWFya3VzIFcuIFNjaGVyZXIKKworI2lmbmRl
ZiBfX1VNVVRBQkxFQ1BUUklFX0hfXworI2RlZmluZSBfX1VNVVRBQkxFQ1BUUklFX0hfXworCisj
aW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKKworI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisK
KyNpbmNsdWRlICJ1bmljb2RlL2xvY2FscG9pbnRlci5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWNw
bWFwLmgiCisjaW5jbHVkZSAidW5pY29kZS91Y3B0cmllLmgiCisjaW5jbHVkZSAidW5pY29kZS91
dGY4LmgiCisKK1VfQ0RFQ0xfQkVHSU4KKworLyoqCisgKiBcZmlsZQorICoKKyAqIFRoaXMgZmls
ZSBkZWZpbmVzIGEgbXV0YWJsZSBVbmljb2RlIGNvZGUgcG9pbnQgdHJpZS4KKyAqCisgKiBAc2Vl
IFVDUFRyaWUKKyAqIEBzZWUgVU11dGFibGVDUFRyaWUKKyAqLworCisvKioKKyAqIE11dGFibGUg
VW5pY29kZSBjb2RlIHBvaW50IHRyaWUuCisgKiBGYXN0IG1hcCBmcm9tIFVuaWNvZGUgY29kZSBw
b2ludHMgKFUrMDAwMC4uVSsxMEZGRkYpIHRvIDMyLWJpdCBpbnRlZ2VyIHZhbHVlcy4KKyAqIEZv
ciBkZXRhaWxzIHNlZSBodHRwOi8vc2l0ZS5pY3UtcHJvamVjdC5vcmcvZGVzaWduL3N0cnVjdC91
dHJpZQorICoKKyAqIFNldHRpbmcgdmFsdWVzIChlc3BlY2lhbGx5IHJhbmdlcykgYW5kIGxvb2t1
cCBpcyBmYXN0LgorICogVGhlIG11dGFibGUgdHJpZSBpcyBvbmx5IHNvbWV3aGF0IHNwYWNlLWVm
ZmljaWVudC4KKyAqIEl0IGJ1aWxkcyBhIGNvbXBhY3RlZCwgaW1tdXRhYmxlIFVDUFRyaWUuCisg
KgorICogVGhpcyB0cmllIGNhbiBiZSBtb2RpZmllZCB3aGlsZSBpdGVyYXRpbmcgb3ZlciBpdHMg
Y29udGVudHMuCisgKiBGb3IgZXhhbXBsZSwgaXQgaXMgcG9zc2libGUgdG8gbWVyZ2UgaXRzIHZh
bHVlcyB3aXRoIHRob3NlIGZyb20gYW5vdGhlcgorICogc2V0IG9mIHJhbmdlcyAoZS5nLiwgYW5v
dGhlciBtdXRhYmxlIG9yIGltbXV0YWJsZSB0cmllKToKKyAqIEl0ZXJhdGUgb3ZlciB0aG9zZSBz
b3VyY2UgcmFuZ2VzOyBmb3IgZWFjaCBvZiB0aGVtIGl0ZXJhdGUgb3ZlciB0aGlzIHRyaWU7Cisg
KiBhZGQgdGhlIHNvdXJjZSB2YWx1ZSBpbnRvIHRoZSB2YWx1ZSBvZiBlYWNoIHRyaWUgcmFuZ2Uu
CisgKgorICogQHNlZSBVQ1BUcmllCisgKiBAc2VlIHVtdXRhYmxlY3B0cmllX2J1aWxkSW1tdXRh
YmxlCisgKiBAZHJhZnQgSUNVIDYzCisgKi8KK3R5cGVkZWYgc3RydWN0IFVNdXRhYmxlQ1BUcmll
IFVNdXRhYmxlQ1BUcmllOworCisvKioKKyAqIENyZWF0ZXMgYSBtdXRhYmxlIHRyaWUgdGhhdCBp
bml0aWFsbHkgbWFwcyBlYWNoIFVuaWNvZGUgY29kZSBwb2ludCB0byB0aGUgc2FtZSB2YWx1ZS4K
KyAqIEl0IHVzZXMgMzItYml0IGRhdGEgdmFsdWVzIHVudGlsIHVtdXRhYmxlY3B0cmllX2J1aWxk
SW1tdXRhYmxlKCkgaXMgY2FsbGVkLgorICogdW11dGFibGVjcHRyaWVfYnVpbGRJbW11dGFibGUo
KSB0YWtlcyBhIHZhbHVlV2lkdGggcGFyYW1ldGVyIHdoaWNoCisgKiBkZXRlcm1pbmVzIHRoZSBu
dW1iZXIgb2YgYml0cyBpbiB0aGUgZGF0YSB2YWx1ZSBpbiB0aGUgcmVzdWx0aW5nIFVDUFRyaWUu
CisgKiBZb3UgbXVzdCB1bXV0YWJsZWNwdHJpZV9jbG9zZSgpIHRoZSB0cmllIG9uY2UgeW91IGFy
ZSBkb25lIHVzaW5nIGl0LgorICoKKyAqIEBwYXJhbSBpbml0aWFsVmFsdWUgdGhlIGluaXRpYWwg
dmFsdWUgdGhhdCBpcyBzZXQgZm9yIGFsbCBjb2RlIHBvaW50cworICogQHBhcmFtIGVycm9yVmFs
dWUgdGhlIHZhbHVlIGZvciBvdXQtb2YtcmFuZ2UgY29kZSBwb2ludHMgYW5kIGlsbC1mb3JtZWQg
VVRGLTgvMTYKKyAqIEBwYXJhbSBwRXJyb3JDb2RlIGFuIGluL291dCBJQ1UgVUVycm9yQ29kZQor
ICogQHJldHVybiB0aGUgdHJpZQorICogQGRyYWZ0IElDVSA2MworICovCitVX0NBUEkgVU11dGFi
bGVDUFRyaWUgKiBVX0VYUE9SVDIKK3VtdXRhYmxlY3B0cmllX29wZW4odWludDMyX3QgaW5pdGlh
bFZhbHVlLCB1aW50MzJfdCBlcnJvclZhbHVlLCBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKKwor
LyoqCisgKiBDbG9uZXMgYSBtdXRhYmxlIHRyaWUuCisgKiBZb3UgbXVzdCB1bXV0YWJsZWNwdHJp
ZV9jbG9zZSgpIHRoZSBjbG9uZSBvbmNlIHlvdSBhcmUgZG9uZSB1c2luZyBpdC4KKyAqCisgKiBA
cGFyYW0gb3RoZXIgdGhlIHRyaWUgdG8gY2xvbmUKKyAqIEBwYXJhbSBwRXJyb3JDb2RlIGFuIGlu
L291dCBJQ1UgVUVycm9yQ29kZQorICogQHJldHVybiB0aGUgdHJpZSBjbG9uZQorICogQGRyYWZ0
IElDVSA2MworICovCitVX0NBUEkgVU11dGFibGVDUFRyaWUgKiBVX0VYUE9SVDIKK3VtdXRhYmxl
Y3B0cmllX2Nsb25lKGNvbnN0IFVNdXRhYmxlQ1BUcmllICpvdGhlciwgVUVycm9yQ29kZSAqcEVy
cm9yQ29kZSk7CisKKy8qKgorICogQ2xvc2VzIGEgbXV0YWJsZSB0cmllIGFuZCByZWxlYXNlcyBh
c3NvY2lhdGVkIG1lbW9yeS4KKyAqCisgKiBAcGFyYW0gdHJpZSB0aGUgdHJpZQorICogQGRyYWZ0
IElDVSA2MworICovCitVX0NBUEkgdm9pZCBVX0VYUE9SVDIKK3VtdXRhYmxlY3B0cmllX2Nsb3Nl
KFVNdXRhYmxlQ1BUcmllICp0cmllKTsKKworI2lmIFVfU0hPV19DUExVU1BMVVNfQVBJCisKK1Vf
TkFNRVNQQUNFX0JFR0lOCisKKy8qKgorICogXGNsYXNzIExvY2FsVU11dGFibGVDUFRyaWVQb2lu
dGVyCisgKiAiU21hcnQgcG9pbnRlciIgY2xhc3MsIGNsb3NlcyBhIFVNdXRhYmxlQ1BUcmllIHZp
YSB1bXV0YWJsZWNwdHJpZV9jbG9zZSgpLgorICogRm9yIG1vc3QgbWV0aG9kcyBzZWUgdGhlIExv
Y2FsUG9pbnRlckJhc2UgYmFzZSBjbGFzcy4KKyAqCisgKiBAc2VlIExvY2FsUG9pbnRlckJhc2UK
KyAqIEBzZWUgTG9jYWxQb2ludGVyCisgKiBAZHJhZnQgSUNVIDYzCisgKi8KK1VfREVGSU5FX0xP
Q0FMX09QRU5fUE9JTlRFUihMb2NhbFVNdXRhYmxlQ1BUcmllUG9pbnRlciwgVU11dGFibGVDUFRy
aWUsIHVtdXRhYmxlY3B0cmllX2Nsb3NlKTsKKworVV9OQU1FU1BBQ0VfRU5ECisKKyNlbmRpZgor
CisvKioKKyAqIENyZWF0ZXMgYSBtdXRhYmxlIHRyaWUgd2l0aCB0aGUgc2FtZSBjb250ZW50cyBh
cyB0aGUgVUNQTWFwLgorICogWW91IG11c3QgdW11dGFibGVjcHRyaWVfY2xvc2UoKSB0aGUgbXV0
YWJsZSB0cmllIG9uY2UgeW91IGFyZSBkb25lIHVzaW5nIGl0LgorICoKKyAqIEBwYXJhbSBtYXAg
dGhlIHNvdXJjZSBtYXAKKyAqIEBwYXJhbSBwRXJyb3JDb2RlIGFuIGluL291dCBJQ1UgVUVycm9y
Q29kZQorICogQHJldHVybiB0aGUgbXV0YWJsZSB0cmllCisgKiBAZHJhZnQgSUNVIDYzCisgKi8K
K1VfQ0FQSSBVTXV0YWJsZUNQVHJpZSAqIFVfRVhQT1JUMgordW11dGFibGVjcHRyaWVfZnJvbVVD
UE1hcChjb25zdCBVQ1BNYXAgKm1hcCwgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7CisKKy8qKgor
ICogQ3JlYXRlcyBhIG11dGFibGUgdHJpZSB3aXRoIHRoZSBzYW1lIGNvbnRlbnRzIGFzIHRoZSBp
bW11dGFibGUgb25lLgorICogWW91IG11c3QgdW11dGFibGVjcHRyaWVfY2xvc2UoKSB0aGUgbXV0
YWJsZSB0cmllIG9uY2UgeW91IGFyZSBkb25lIHVzaW5nIGl0LgorICoKKyAqIEBwYXJhbSB0cmll
IHRoZSBpbW11dGFibGUgdHJpZQorICogQHBhcmFtIHBFcnJvckNvZGUgYW4gaW4vb3V0IElDVSBV
RXJyb3JDb2RlCisgKiBAcmV0dXJuIHRoZSBtdXRhYmxlIHRyaWUKKyAqIEBkcmFmdCBJQ1UgNjMK
KyAqLworVV9DQVBJIFVNdXRhYmxlQ1BUcmllICogVV9FWFBPUlQyCit1bXV0YWJsZWNwdHJpZV9m
cm9tVUNQVHJpZShjb25zdCBVQ1BUcmllICp0cmllLCBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsK
KworLyoqCisgKiBSZXR1cm5zIHRoZSB2YWx1ZSBmb3IgYSBjb2RlIHBvaW50IGFzIHN0b3JlZCBp
biB0aGUgdHJpZS4KKyAqCisgKiBAcGFyYW0gdHJpZSB0aGUgdHJpZQorICogQHBhcmFtIGMgdGhl
IGNvZGUgcG9pbnQKKyAqIEByZXR1cm4gdGhlIHZhbHVlCisgKiBAZHJhZnQgSUNVIDYzCisgKi8K
K1VfQ0FQSSB1aW50MzJfdCBVX0VYUE9SVDIKK3VtdXRhYmxlY3B0cmllX2dldChjb25zdCBVTXV0
YWJsZUNQVHJpZSAqdHJpZSwgVUNoYXIzMiBjKTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSBsYXN0
IGNvZGUgcG9pbnQgc3VjaCB0aGF0IGFsbCB0aG9zZSBmcm9tIHN0YXJ0IHRvIHRoZXJlIGhhdmUg
dGhlIHNhbWUgdmFsdWUuCisgKiBDYW4gYmUgdXNlZCB0byBlZmZpY2llbnRseSBpdGVyYXRlIG92
ZXIgYWxsIHNhbWUtdmFsdWUgcmFuZ2VzIGluIGEgdHJpZS4KKyAqIChUaGlzIGlzIG5vcm1hbGx5
IGZhc3RlciB0aGFuIGl0ZXJhdGluZyBvdmVyIGNvZGUgcG9pbnRzIGFuZCBnZXQoKXRpbmcgZWFj
aCB2YWx1ZSwKKyAqIGJ1dCBtdWNoIHNsb3dlciB0aGFuIGEgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBz
dG9yZXMgcmFuZ2VzIGRpcmVjdGx5LikKKyAqCisgKiBUaGUgdHJpZSBjYW4gYmUgbW9kaWZpZWQg
YmV0d2VlbiBjYWxscyB0byB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIElmIHRoZSBVQ1BNYXBWYWx1
ZUZpbHRlciBmdW5jdGlvbiBwb2ludGVyIGlzIG5vdCBOVUxMLCB0aGVuCisgKiB0aGUgdmFsdWUg
dG8gYmUgZGVsaXZlcmVkIGlzIHBhc3NlZCB0aHJvdWdoIHRoYXQgZnVuY3Rpb24sIGFuZCB0aGUg
cmV0dXJuIHZhbHVlIGlzIHRoZSBlbmQKKyAqIG9mIHRoZSByYW5nZSB3aGVyZSBhbGwgdmFsdWVz
IGFyZSBtb2RpZmllZCB0byB0aGUgc2FtZSBhY3R1YWwgdmFsdWUuCisgKiBUaGUgdmFsdWUgaXMg
dW5jaGFuZ2VkIGlmIHRoYXQgZnVuY3Rpb24gcG9pbnRlciBpcyBOVUxMLgorICoKKyAqIFNlZSB0
aGUgc2FtZS1zaWduYXR1cmUgdWNwdHJpZV9nZXRSYW5nZSgpIGZvciBhIGNvZGUgc2FtcGxlLgor
ICoKKyAqIEBwYXJhbSB0cmllIHRoZSB0cmllCisgKiBAcGFyYW0gc3RhcnQgcmFuZ2Ugc3RhcnQK
KyAqIEBwYXJhbSBvcHRpb24gZGVmaW5lcyB3aGV0aGVyIHN1cnJvZ2F0ZXMgYXJlIHRyZWF0ZWQg
bm9ybWFsbHksCisgKiAgICAgICAgICAgICAgIG9yIGFzIGhhdmluZyB0aGUgc3Vycm9nYXRlVmFs
dWU7IHVzdWFsbHkgVUNQTUFQX1JBTkdFX05PUk1BTAorICogQHBhcmFtIHN1cnJvZ2F0ZVZhbHVl
IHZhbHVlIGZvciBzdXJyb2dhdGVzOyBpZ25vcmVkIGlmIG9wdGlvbj09VUNQTUFQX1JBTkdFX05P
Uk1BTAorICogQHBhcmFtIGZpbHRlciBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0aGF0IG1heSBt
b2RpZnkgdGhlIHRyaWUgZGF0YSB2YWx1ZSwKKyAqICAgICBvciBOVUxMIGlmIHRoZSB2YWx1ZXMg
ZnJvbSB0aGUgdHJpZSBhcmUgdG8gYmUgdXNlZCB1bm1vZGlmaWVkCisgKiBAcGFyYW0gY29udGV4
dCBhbiBvcGFxdWUgcG9pbnRlciB0aGF0IGlzIHBhc3NlZCBvbiB0byB0aGUgZmlsdGVyIGZ1bmN0
aW9uCisgKiBAcGFyYW0gcFZhbHVlIGlmIG5vdCBOVUxMLCByZWNlaXZlcyB0aGUgdmFsdWUgdGhh
dCBldmVyeSBjb2RlIHBvaW50IHN0YXJ0Li5lbmQgaGFzOworICogICAgIG1heSBoYXZlIGJlZW4g
bW9kaWZpZWQgYnkgZmlsdGVyKGNvbnRleHQsIHRyaWUgdmFsdWUpCisgKiAgICAgaWYgdGhhdCBm
dW5jdGlvbiBwb2ludGVyIGlzIG5vdCBOVUxMCisgKiBAcmV0dXJuIHRoZSByYW5nZSBlbmQgY29k
ZSBwb2ludCwgb3IgLTEgaWYgc3RhcnQgaXMgbm90IGEgdmFsaWQgY29kZSBwb2ludAorICogQGRy
YWZ0IElDVSA2MworICovCitVX0NBUEkgVUNoYXIzMiBVX0VYUE9SVDIKK3VtdXRhYmxlY3B0cmll
X2dldFJhbmdlKGNvbnN0IFVNdXRhYmxlQ1BUcmllICp0cmllLCBVQ2hhcjMyIHN0YXJ0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgVUNQTWFwUmFuZ2VPcHRpb24gb3B0aW9uLCB1aW50MzJfdCBz
dXJyb2dhdGVWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFVDUE1hcFZhbHVlRmlsdGVy
ICpmaWx0ZXIsIGNvbnN0IHZvaWQgKmNvbnRleHQsIHVpbnQzMl90ICpwVmFsdWUpOworCisvKioK
KyAqIFNldHMgYSB2YWx1ZSBmb3IgYSBjb2RlIHBvaW50LgorICoKKyAqIEBwYXJhbSB0cmllIHRo
ZSB0cmllCisgKiBAcGFyYW0gYyB0aGUgY29kZSBwb2ludAorICogQHBhcmFtIHZhbHVlIHRoZSB2
YWx1ZQorICogQHBhcmFtIHBFcnJvckNvZGUgYW4gaW4vb3V0IElDVSBVRXJyb3JDb2RlCisgKiBA
ZHJhZnQgSUNVIDYzCisgKi8KK1VfQ0FQSSB2b2lkIFVfRVhQT1JUMgordW11dGFibGVjcHRyaWVf
c2V0KFVNdXRhYmxlQ1BUcmllICp0cmllLCBVQ2hhcjMyIGMsIHVpbnQzMl90IHZhbHVlLCBVRXJy
b3JDb2RlICpwRXJyb3JDb2RlKTsKKworLyoqCisgKiBTZXRzIGEgdmFsdWUgZm9yIGVhY2ggY29k
ZSBwb2ludCBbc3RhcnQuLmVuZF0uCisgKiBGYXN0ZXIgYW5kIG1vcmUgc3BhY2UtZWZmaWNpZW50
IHRoYW4gc2V0dGluZyB0aGUgdmFsdWUgZm9yIGVhY2ggY29kZSBwb2ludCBzZXBhcmF0ZWx5Lgor
ICoKKyAqIEBwYXJhbSB0cmllIHRoZSB0cmllCisgKiBAcGFyYW0gc3RhcnQgdGhlIGZpcnN0IGNv
ZGUgcG9pbnQgdG8gZ2V0IHRoZSB2YWx1ZQorICogQHBhcmFtIGVuZCB0aGUgbGFzdCBjb2RlIHBv
aW50IHRvIGdldCB0aGUgdmFsdWUgKGluY2x1c2l2ZSkKKyAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFs
dWUKKyAqIEBwYXJhbSBwRXJyb3JDb2RlIGFuIGluL291dCBJQ1UgVUVycm9yQ29kZQorICogQGRy
YWZ0IElDVSA2MworICovCitVX0NBUEkgdm9pZCBVX0VYUE9SVDIKK3VtdXRhYmxlY3B0cmllX3Nl
dFJhbmdlKFVNdXRhYmxlQ1BUcmllICp0cmllLAorICAgICAgICAgICAgICAgICAgICAgICAgVUNo
YXIzMiBzdGFydCwgVUNoYXIzMiBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf
dCB2YWx1ZSwgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7CisKKy8qKgorICogQ29tcGFjdHMgdGhl
IGRhdGEgYW5kIGJ1aWxkcyBhbiBpbW11dGFibGUgVUNQVHJpZSBhY2NvcmRpbmcgdG8gdGhlIHBh
cmFtZXRlcnMuCisgKiBBZnRlciB0aGlzLCB0aGUgbXV0YWJsZSB0cmllIHdpbGwgYmUgZW1wdHku
CisgKgorICogVGhlIG11dGFibGUgdHJpZSBzdG9yZXMgMzItYml0IHZhbHVlcyB1bnRpbCBidWls
ZEltbXV0YWJsZSgpIGlzIGNhbGxlZC4KKyAqIElmIHZhbHVlcyBzaG9ydGVyIHRoYW4gMzIgYml0
cyBhcmUgdG8gYmUgc3RvcmVkIGluIHRoZSBpbW11dGFibGUgdHJpZSwKKyAqIHRoZW4gdGhlIHVw
cGVyIGJpdHMgYXJlIGRpc2NhcmRlZC4KKyAqIEZvciBleGFtcGxlLCB3aGVuIHRoZSBtdXRhYmxl
IHRyaWUgY29udGFpbnMgdmFsdWVzIDB4ODEsIC0weDdmLCBhbmQgMHhhNTgxLAorICogYW5kIHRo
ZSB2YWx1ZSB3aWR0aCBpcyA4IGJpdHMsIHRoZW4gZWFjaCBvZiB0aGVzZSBpcyBzdG9yZWQgYXMg
MHg4MQorICogYW5kIHRoZSBpbW11dGFibGUgdHJpZSB3aWxsIHJldHVybiB0aGF0IGFzIGFuIHVu
c2lnbmVkIHZhbHVlLgorICogKFNvbWUgaW1wbGVtZW50YXRpb25zIG1heSB3YW50IHRvIG1ha2Ug
cHJvZHVjdGl2ZSB0ZW1wb3JhcnkgdXNlIG9mIHRoZSB1cHBlciBiaXRzCisgKiB1bnRpbCBidWls
ZEltbXV0YWJsZSgpIGRpc2NhcmRzIHRoZW0uKQorICoKKyAqIE5vdCBldmVyeSBwb3NzaWJsZSBz
ZXQgb2YgbWFwcGluZ3MgY2FuIGJlIGJ1aWx0IGludG8gYSBVQ1BUcmllLAorICogYmVjYXVzZSBv
ZiBsaW1pdGF0aW9ucyByZXN1bHRpbmcgZnJvbSBzcGVlZCBhbmQgc3BhY2Ugb3B0aW1pemF0aW9u
cy4KKyAqIEV2ZXJ5IFVuaWNvZGUgYXNzaWduZWQgY2hhcmFjdGVyIGNhbiBiZSBtYXBwZWQgdG8g
YSB1bmlxdWUgdmFsdWUuCisgKiBUeXBpY2FsIGRhdGEgeWllbGRzIGRhdGEgc3RydWN0dXJlcyBm
YXIgc21hbGxlciB0aGFuIHRoZSBsaW1pdGF0aW9ucy4KKyAqCisgKiBJdCBpcyBwb3NzaWJsZSB0
byBjb25zdHJ1Y3QgZXh0cmVtZWx5IHVudXN1YWwgbWFwcGluZ3MgdGhhdCBleGNlZWQgdGhlIGRh
dGEgc3RydWN0dXJlIGxpbWl0cy4KKyAqIEluIHN1Y2ggYSBjYXNlIHRoaXMgZnVuY3Rpb24gd2ls
bCBmYWlsIHdpdGggYSBVX0lOREVYX09VVE9GQk9VTkRTX0VSUk9SLgorICoKKyAqIEBwYXJhbSB0
cmllIHRoZSB0cmllIHRyaWUKKyAqIEBwYXJhbSB0eXBlIHNlbGVjdHMgdGhlIHRyaWUgdHlwZQor
ICogQHBhcmFtIHZhbHVlV2lkdGggc2VsZWN0cyB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gYSB0cmll
IGRhdGEgdmFsdWU7IGlmIHNtYWxsZXIgdGhhbiAzMiBiaXRzLAorICogICAgICAgICAgICAgICAg
ICAgdGhlbiB0aGUgdmFsdWVzIHN0b3JlZCBpbiB0aGUgdHJpZSB3aWxsIGJlIHRydW5jYXRlZCBm
aXJzdAorICogQHBhcmFtIHBFcnJvckNvZGUgYW4gaW4vb3V0IElDVSBVRXJyb3JDb2RlCisgKgor
ICogQHNlZSB1bXV0YWJsZWNwdHJpZV9mcm9tVUNQVHJpZQorICogQGRyYWZ0IElDVSA2MworICov
CitVX0NBUEkgVUNQVHJpZSAqIFVfRVhQT1JUMgordW11dGFibGVjcHRyaWVfYnVpbGRJbW11dGFi
bGUoVU11dGFibGVDUFRyaWUgKnRyaWUsIFVDUFRyaWVUeXBlIHR5cGUsIFVDUFRyaWVWYWx1ZVdp
ZHRoIHZhbHVlV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2Rl
ICpwRXJyb3JDb2RlKTsKKworVV9DREVDTF9FTkQKKworI2VuZGlmICAvLyBVX0hJREVfRFJBRlRf
QVBJCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdW5pc2V0Lmgg
Yi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3VuaXNldC5oCmluZGV4IGVkOWEzZWI3MmZmM2FlYTBi
NDljZDM2ZTZjNzU1YTg5Yzk2N2U2YjIuLjRhOTRkNjI0YzdhMjY0NzY3MTY0M2VmNzJmNmMwYjU5
YzllNjczNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdW5pc2V0LmgKKysr
IGIvU291cmNlL1dURi9pY3UvdW5pY29kZS91bmlzZXQuaApAQCAtMTMsNiArMTMsNyBAQAogI2lm
bmRlZiBVTklDT0RFU0VUX0gKICNkZWZpbmUgVU5JQ09ERVNFVF9ICiAKKyNpbmNsdWRlICJ1bmlj
b2RlL3VjcG1hcC5oIgogI2luY2x1ZGUgInVuaWNvZGUvdW5pZmlsdC5oIgogI2luY2x1ZGUgInVu
aWNvZGUvdW5pc3RyLmgiCiAjaW5jbHVkZSAidW5pY29kZS91c2V0LmgiCkBAIC0yNSw4ICsyNiw2
IEBACiBVX05BTUVTUEFDRV9CRUdJTgogCiAvLyBGb3J3YXJkIERlY2xhcmF0aW9ucy4KLXZvaWQg
VV9DQUxMQ09OViBVbmljb2RlU2V0X2luaXRJbmNsdXNpb24oaW50MzJfdCBzcmMsIFVFcnJvckNv
ZGUgJnN0YXR1cyk7IC8qKjwgQGludGVybmFsICovCi0KIGNsYXNzIEJNUFNldDsKIGNsYXNzIFBh
cnNlUG9zaXRpb247CiBjbGFzcyBSQkJJUnVsZVNjYW5uZXI7CkBAIC0yNzYsMTQgKzI3NSwyMyBA
QCBjbGFzcyBSdWxlQ2hhcmFjdGVySXRlcmF0b3I7CiAgKiBAc3RhYmxlIElDVSAyLjAKICAqLwog
Y2xhc3MgVV9DT01NT05fQVBJIFVuaWNvZGVTZXQgVV9GSU5BTCA6IHB1YmxpYyBVbmljb2RlRmls
dGVyIHsKK3ByaXZhdGU6CisgICAgLyoqCisgICAgICogRW5vdWdoIGZvciBzZXRzIHdpdGggZmV3
IHJhbmdlcy4KKyAgICAgKiBGb3IgZXhhbXBsZSwgV2hpdGVfU3BhY2UgaGFzIDEwIHJhbmdlcywg
bGlzdCBsZW5ndGggMjEuCisgICAgICovCisgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQzMl90IElO
SVRJQUxfQ0FQQUNJVFkgPSAyNTsKKyAgICAvLyBmRmxhZ3MgY29uc3RhbnQKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVpbnQ4X3Qga0lzQm9ndXMgPSAxOyAgLy8gVGhpcyBzZXQgaXMgYm9ndXMgKGku
ZS4gbm90IHZhbGlkKQogCi0gICAgaW50MzJfdCBsZW47IC8vIGxlbmd0aCBvZiBsaXN0IHVzZWQ7
IDAgPD0gbGVuIDw9IGNhcGFjaXR5Ci0gICAgaW50MzJfdCBjYXBhY2l0eTsgLy8gY2FwYWNpdHkg
b2YgbGlzdAotICAgIFVDaGFyMzIqIGxpc3Q7IC8vIE1VU1QgYmUgdGVybWluYXRlZCB3aXRoIEhJ
R0gKLSAgICBCTVBTZXQgKmJtcFNldDsgLy8gVGhlIHNldCBpcyBmcm96ZW4gaWZmIGVpdGhlciBi
bXBTZXQgb3Igc3RyaW5nU3BhbiBpcyBub3QgTlVMTC4KLSAgICBVQ2hhcjMyKiBidWZmZXI7IC8v
IGludGVybmFsIGJ1ZmZlciwgbWF5IGJlIE5VTEwKLSAgICBpbnQzMl90IGJ1ZmZlckNhcGFjaXR5
OyAvLyBjYXBhY2l0eSBvZiBidWZmZXIKLSAgICBpbnQzMl90IHBhdExlbjsKKyAgICBVQ2hhcjMy
KiBsaXN0ID0gc3RhY2tMaXN0OyAvLyBNVVNUIGJlIHRlcm1pbmF0ZWQgd2l0aCBISUdICisgICAg
aW50MzJfdCBjYXBhY2l0eSA9IElOSVRJQUxfQ0FQQUNJVFk7IC8vIGNhcGFjaXR5IG9mIGxpc3QK
KyAgICBpbnQzMl90IGxlbiA9IDE7IC8vIGxlbmd0aCBvZiBsaXN0IHVzZWQ7IDEgPD0gbGVuIDw9
IGNhcGFjaXR5CisgICAgdWludDhfdCBmRmxhZ3MgPSAwOyAgICAgICAgIC8vIEJpdCBmbGFnIChz
ZWUgY29uc3RhbnRzIGFib3ZlKQorCisgICAgQk1QU2V0ICpibXBTZXQgPSBudWxscHRyOyAvLyBU
aGUgc2V0IGlzIGZyb3plbiBpZmYgZWl0aGVyIGJtcFNldCBvciBzdHJpbmdTcGFuIGlzIG5vdCBO
VUxMLgorICAgIFVDaGFyMzIqIGJ1ZmZlciA9IG51bGxwdHI7IC8vIGludGVybmFsIGJ1ZmZlciwg
bWF5IGJlIE5VTEwKKyAgICBpbnQzMl90IGJ1ZmZlckNhcGFjaXR5ID0gMDsgLy8gY2FwYWNpdHkg
b2YgYnVmZmVyCiAKICAgICAvKioKICAgICAgKiBUaGUgcGF0dGVybiByZXByZXNlbnRhdGlvbiBv
ZiB0aGlzIHNldC4gIFRoaXMgbWF5IG5vdCBiZSB0aGUKQEAgLTI5NCwxNSArMzAyLDE5IEBAIGNs
YXNzIFVfQ09NTU9OX0FQSSBVbmljb2RlU2V0IFVfRklOQUwgOiBwdWJsaWMgVW5pY29kZUZpbHRl
ciB7CiAgICAgICogaW5kaWNhdGluZyB0aGF0IHRvUGF0dGVybigpIG11c3QgZ2VuZXJhdGUgYSBw
YXR0ZXJuCiAgICAgICogcmVwcmVzZW50YXRpb24gZnJvbSB0aGUgaW52ZXJzaW9uIGxpc3QuCiAg
ICAgICovCi0gICAgY2hhcjE2X3QgKnBhdDsKLSAgICBVVmVjdG9yKiBzdHJpbmdzOyAvLyBtYWlu
dGFpbmVkIGluIHNvcnRlZCBvcmRlcgotICAgIFVuaWNvZGVTZXRTdHJpbmdTcGFuICpzdHJpbmdT
cGFuOworICAgIGNoYXIxNl90ICpwYXQgPSBudWxscHRyOworICAgIGludDMyX3QgcGF0TGVuID0g
MDsKKworICAgIFVWZWN0b3IqIHN0cmluZ3MgPSBudWxscHRyOyAvLyBtYWludGFpbmVkIGluIHNv
cnRlZCBvcmRlcgorICAgIFVuaWNvZGVTZXRTdHJpbmdTcGFuICpzdHJpbmdTcGFuID0gbnVsbHB0
cjsKKworICAgIC8qKgorICAgICAqIEluaXRpYWwgbGlzdCBhcnJheS4KKyAgICAgKiBBdm9pZHMg
c29tZSBoZWFwIGFsbG9jYXRpb25zLCBhbmQgbGlzdCBpcyBuZXZlciBudWxscHRyLgorICAgICAq
IEluY3JlYXNlcyB0aGUgb2JqZWN0IHNpemUgYSBiaXQuCisgICAgICovCisgICAgVUNoYXIzMiBz
dGFja0xpc3RbSU5JVElBTF9DQVBBQ0lUWV07CiAKLXByaXZhdGU6Ci0gICAgZW51bSB7IC8vIGNv
bnN0YW50cwotICAgICAgICBrSXNCb2d1cyA9IDEgICAgICAgLy8gVGhpcyBzZXQgaXMgYm9ndXMg
KGkuZS4gbm90IHZhbGlkKQotICAgIH07Ci0gICAgdWludDhfdCBmRmxhZ3M7ICAgICAgICAgLy8g
Qml0IGZsYWcgKHNlZSBjb25zdGFudHMgYWJvdmUpCiBwdWJsaWM6CiAgICAgLyoqCiAgICAgICog
RGV0ZXJtaW5lIGlmIHRoaXMgb2JqZWN0IGNvbnRhaW5zIGEgdmFsaWQgc2V0LgpAQCAtNDc4LDcg
KzQ5MCw3IEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBVbmljb2RlU2V0IFVfRklOQUwgOiBwdWJsaWMg
VW5pY29kZUZpbHRlciB7CiAgICAgICogPHR0PnRydWU8L3R0PiBpZiB0aGUgc3BlY2lmaWVkIHNl
dCBpcyBub3QgZXF1YWwgdG8gdGhpcyBzZXQuCiAgICAgICogQHN0YWJsZSBJQ1UgMi4wCiAgICAg
ICovCi0gICAgVUJvb2wgb3BlcmF0b3IhPShjb25zdCBVbmljb2RlU2V0JiBvKSBjb25zdDsKKyAg
ICBpbmxpbmUgVUJvb2wgb3BlcmF0b3IhPShjb25zdCBVbmljb2RlU2V0JiBvKSBjb25zdDsKIAog
ICAgIC8qKgogICAgICAqIFJldHVybnMgYSBjb3B5IG9mIHRoaXMgb2JqZWN0LiAgQWxsIFVuaWNv
ZGVGdW5jdG9yIG9iamVjdHMgaGF2ZQpAQCAtNTg0LDkgKzU5Niw4IEBAIGNsYXNzIFVfQ09NTU9O
X0FQSSBVbmljb2RlU2V0IFVfRklOQUwgOiBwdWJsaWMgVW5pY29kZUZpbHRlciB7CiAgICAgLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKICAgICAvKioKLSAgICAgKiBNYWtlIHRoaXMgb2JqZWN0IHJlcHJlc2VudCB0aGUg
cmFuZ2UgPGNvZGU+c3RhcnQgLSBlbmQ8L2NvZGU+LgotICAgICAqIElmIDxjb2RlPmVuZCA+IHN0
YXJ0PC9jb2RlPiB0aGVuIHRoaXMgb2JqZWN0IGlzIHNldCB0byBhbgotICAgICAqIGFuIGVtcHR5
IHJhbmdlLgorICAgICAqIE1ha2UgdGhpcyBvYmplY3QgcmVwcmVzZW50IHRoZSByYW5nZSBgc3Rh
cnQgLSBlbmRgLgorICAgICAqIElmIGBlbmQgPiBzdGFydGAgdGhlbiB0aGlzIG9iamVjdCBpcyBz
ZXQgdG8gYW4gZW1wdHkgcmFuZ2UuCiAgICAgICogQSBmcm96ZW4gc2V0IHdpbGwgbm90IGJlIG1v
ZGlmaWVkLgogICAgICAqCiAgICAgICogQHBhcmFtIHN0YXJ0IGZpcnN0IGNoYXJhY3RlciBpbiB0
aGUgc2V0LCBpbmNsdXNpdmUKQEAgLTE0ODEsOCArMTQ5Miw2IEBAIGNsYXNzIFVfQ09NTU9OX0FQ
SSBVbmljb2RlU2V0IFVfRklOQUwgOiBwdWJsaWMgVW5pY29kZUZpbHRlciB7CiAKICAgICBmcmll
bmQgY2xhc3MgVVNldEFjY2VzczsKIAotICAgIGludDMyX3QgZ2V0U3RyaW5nQ291bnQoKSBjb25z
dDsKLQogICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcqIGdldFN0cmluZyhpbnQzMl90IGluZGV4KSBj
b25zdDsKIAogICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTUwNiw2ICsxNTE1LDcgQEAgY2xhc3MgVV9DT01N
T05fQVBJIFVuaWNvZGVTZXQgVV9GSU5BTCA6IHB1YmxpYyBVbmljb2RlRmlsdGVyIHsKICAgICAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIAogICAgIFVuaWNvZGVTZXQoY29uc3QgVW5pY29kZVNldCYgbywgVUJvb2wgLyog
YXNUaGF3ZWQgKi8pOworICAgIFVuaWNvZGVTZXQmIGNvcHlGcm9tKGNvbnN0IFVuaWNvZGVTZXQm
IG8sIFVCb29sIGFzVGhhd2VkKTsKIAogICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIC8vIEltcGxlbWVudGF0
aW9uOiBQYXR0ZXJuIHBhcnNpbmcKQEAgLTE1MjgsMTMgKzE1MzgsMTggQEAgY2xhc3MgVV9DT01N
T05fQVBJIFVuaWNvZGVTZXQgVV9GSU5BTCA6IHB1YmxpYyBVbmljb2RlRmlsdGVyIHsKICAgICAv
LyBJbXBsZW1lbnRhdGlvbjogVXRpbGl0eSBtZXRob2RzCiAgICAgLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICB2
b2lkIGVuc3VyZUNhcGFjaXR5KGludDMyX3QgbmV3TGVuLCBVRXJyb3JDb2RlJiBlYyk7CisgICAg
c3RhdGljIGludDMyX3QgbmV4dENhcGFjaXR5KGludDMyX3QgbWluQ2FwYWNpdHkpOwogCi0gICAg
dm9pZCBlbnN1cmVCdWZmZXJDYXBhY2l0eShpbnQzMl90IG5ld0xlbiwgVUVycm9yQ29kZSYgZWMp
OworICAgIGJvb2wgZW5zdXJlQ2FwYWNpdHkoaW50MzJfdCBuZXdMZW4pOworCisgICAgYm9vbCBl
bnN1cmVCdWZmZXJDYXBhY2l0eShpbnQzMl90IG5ld0xlbik7CiAKICAgICB2b2lkIHN3YXBCdWZm
ZXJzKHZvaWQpOwogCiAgICAgVUJvb2wgYWxsb2NhdGVTdHJpbmdzKFVFcnJvckNvZGUgJnN0YXR1
cyk7CisgICAgVUJvb2wgaGFzU3RyaW5ncygpIGNvbnN0OworICAgIGludDMyX3Qgc3RyaW5nc1Np
emUoKSBjb25zdDsKKyAgICBVQm9vbCBzdHJpbmdzQ29udGFpbnMoY29uc3QgVW5pY29kZVN0cmlu
ZyAmcykgY29uc3Q7CiAKICAgICBVbmljb2RlU3RyaW5nJiBfdG9QYXR0ZXJuKFVuaWNvZGVTdHJp
bmcmIHJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVCb29sIGVzY2FwZVVu
cHJpbnRhYmxlKSBjb25zdDsKQEAgLTE2MTQsNyArMTYyOSw2IEBAIGNsYXNzIFVfQ09NTU9OX0FQ
SSBVbmljb2RlU2V0IFVfRklOQUwgOiBwdWJsaWMgVW5pY29kZUZpbHRlciB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBVbmljb2RlU3RyaW5nJiByZWJ1aWx0UGF0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSYgZWMpOwogCi0gICAgZnJpZW5kIHZvaWQg
VV9DQUxMQ09OViBVbmljb2RlU2V0X2luaXRJbmNsdXNpb24oaW50MzJfdCBzcmMsIFVFcnJvckNv
ZGUgJnN0YXR1cyk7CiAgICAgc3RhdGljIGNvbnN0IFVuaWNvZGVTZXQqIGdldEluY2x1c2lvbnMo
aW50MzJfdCBzcmMsIFVFcnJvckNvZGUgJnN0YXR1cyk7CiAKICAgICAvKioKQEAgLTE2MzQsMTMg
KzE2NDgsMjIgQEAgY2xhc3MgVV9DT01NT05fQVBJIFVuaWNvZGVTZXQgVV9GSU5BTCA6IHB1Ymxp
YyBVbmljb2RlRmlsdGVyIHsKICAgICAgKi8KICAgICB2b2lkIGFwcGx5RmlsdGVyKEZpbHRlciBm
aWx0ZXIsCiAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBjb250ZXh0LAotICAgICAgICAgICAg
ICAgICAgICAgaW50MzJfdCBzcmMsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBVbmljb2Rl
U2V0KiBpbmNsdXNpb25zLAogICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAmc3RhdHVz
KTsKIAorI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJICAgLy8gU2tpcHBlZDogdWNwbWFwLmggaXMg
ZHJhZnQgb25seS4KKyAgICB2b2lkIGFwcGx5SW50UHJvcGVydHlWYWx1ZShjb25zdCBVQ1BNYXAg
Km1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ1BNYXBWYWx1ZUZpbHRlciAq
ZmlsdGVyLCBjb25zdCB2b2lkICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFVFcnJvckNvZGUgJmVycm9yQ29kZSk7CisjZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkg
Ki8KKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgbmV3IHBhdHRlcm4gdG8gY2FjaGUuCiAgICAg
ICovCi0gICAgdm9pZCBzZXRQYXR0ZXJuKGNvbnN0IFVuaWNvZGVTdHJpbmcmIG5ld1BhdCk7Cisg
ICAgdm9pZCBzZXRQYXR0ZXJuKGNvbnN0IFVuaWNvZGVTdHJpbmcmIG5ld1BhdCkgeworICAgICAg
ICBzZXRQYXR0ZXJuKG5ld1BhdC5nZXRCdWZmZXIoKSwgbmV3UGF0Lmxlbmd0aCgpKTsKKyAgICB9
CisgICAgdm9pZCBzZXRQYXR0ZXJuKGNvbnN0IGNoYXIxNl90ICpuZXdQYXQsIGludDMyX3QgbmV3
UGF0TGVuKTsKICAgICAvKioKICAgICAgKiBSZWxlYXNlIGV4aXN0aW5nIGNhY2hlZCBwYXR0ZXJu
LgogICAgICAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9pY3UvdW5pY29kZS91bmlzdHIuaCBi
L1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdW5pc3RyLmgKaW5kZXggYjg0ZjQwYmQ0NDljZWRlMjAz
ODA5MDA1MTM0OTA1MDA3Yjk4ZjhiYi4uOGZkMTQ0NDI1ZTg3YzAxNzFkODFkZjUyNjNlMzFmNTcx
Zjg4NjQ1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9pY3UvdW5pY29kZS91bmlzdHIuaAorKysg
Yi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3VuaXN0ci5oCkBAIC0xMDYsNyArMTA2LDcgQEAgY2xh
c3MgVW5pY29kZVN0cmluZ0FwcGVuZGFibGU7ICAvLyB1bmljb2RlL2FwcGVuZGFibGUuaAogICoK
ICAqIFRoZSBzdHJpbmcgcGFyYW1ldGVyIG11c3QgYmUgYSBDIHN0cmluZyBsaXRlcmFsLgogICog
VGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLCBub3QgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZwot
ICogPGNvZGU+TlVMPC9jb2RlPiwgbXVzdCBiZSBzcGVjaWZpZWQgYXMgYSBjb25zdGFudC4KKyAq
IGBOVUxgLCBtdXN0IGJlIHNwZWNpZmllZCBhcyBhIGNvbnN0YW50LgogICogQHN0YWJsZSBJQ1Ug
Mi4wCiAgKi8KICNpZiAhVV9DSEFSMTZfSVNfVFlQRURFRgpAQCAtMjIxLDMyICsyMjEsMzUgQEAg
Y2xhc3MgVW5pY29kZVN0cmluZ0FwcGVuZGFibGU7ICAvLyB1bmljb2RlL2FwcGVuZGFibGUuaAog
ICoKICAqIFRoZSBVbmljb2RlU3RyaW5nIGNsYXNzIGlzIG5vdCBzdWl0YWJsZSBmb3Igc3ViY2xh
c3NpbmcuCiAgKgotICogPHA+Rm9yIGFuIG92ZXJ2aWV3IG9mIFVuaWNvZGUgc3RyaW5ncyBpbiBD
IGFuZCBDKysgc2VlIHRoZQotICogPGEgaHJlZj0iaHR0cDovL3VzZXJndWlkZS5pY3UtcHJvamVj
dC5vcmcvc3RyaW5ncyNUT0MtU3RyaW5ncy1pbi1DLUMtIj5Vc2VyIEd1aWRlIFN0cmluZ3MgY2hh
cHRlcjwvYT4uPC9wPgorICogRm9yIGFuIG92ZXJ2aWV3IG9mIFVuaWNvZGUgc3RyaW5ncyBpbiBD
IGFuZCBDKysgc2VlIHRoZQorICogW1VzZXIgR3VpZGUgU3RyaW5ncyBjaGFwdGVyXShodHRwOi8v
dXNlcmd1aWRlLmljdS1wcm9qZWN0Lm9yZy9zdHJpbmdzI1RPQy1TdHJpbmdzLWluLUMtQy0pLgog
ICoKLSAqIDxwPkluIElDVSwgYSBVbmljb2RlIHN0cmluZyBjb25zaXN0cyBvZiAxNi1iaXQgVW5p
Y29kZSA8ZW0+Y29kZSB1bml0czwvZW0+LgorICogSW4gSUNVLCBhIFVuaWNvZGUgc3RyaW5nIGNv
bnNpc3RzIG9mIDE2LWJpdCBVbmljb2RlICpjb2RlIHVuaXRzKi4KICAqIEEgVW5pY29kZSBjaGFy
YWN0ZXIgbWF5IGJlIHN0b3JlZCB3aXRoIGVpdGhlciBvbmUgY29kZSB1bml0CiAgKiAodGhlIG1v
c3QgY29tbW9uIGNhc2UpIG9yIHdpdGggYSBtYXRjaGVkIHBhaXIgb2Ygc3BlY2lhbCBjb2RlIHVu
aXRzCiAgKiAoInN1cnJvZ2F0ZXMiKS4gVGhlIGRhdGEgdHlwZSBmb3IgY29kZSB1bml0cyBpcyBj
aGFyMTZfdC4KLSAqIEZvciBzaW5nbGUtY2hhcmFjdGVyIGhhbmRsaW5nLCBhIFVuaWNvZGUgY2hh
cmFjdGVyIGNvZGUgPGVtPnBvaW50PC9lbT4gaXMgYSB2YWx1ZQotICogaW4gdGhlIHJhbmdlIDAu
LjB4MTBmZmZmLiBJQ1UgdXNlcyB0aGUgVUNoYXIzMiB0eXBlIGZvciBjb2RlIHBvaW50cy48L3A+
CisgKiBGb3Igc2luZ2xlLWNoYXJhY3RlciBoYW5kbGluZywgYSBVbmljb2RlIGNoYXJhY3RlciBj
b2RlICpwb2ludCogaXMgYSB2YWx1ZQorICogaW4gdGhlIHJhbmdlIDAuLjB4MTBmZmZmLiBJQ1Ug
dXNlcyB0aGUgVUNoYXIzMiB0eXBlIGZvciBjb2RlIHBvaW50cy4KICAqCi0gKiA8cD5JbmRleGVz
IGFuZCBvZmZzZXRzIGludG8gYW5kIGxlbmd0aHMgb2Ygc3RyaW5ncyBhbHdheXMgY291bnQgY29k
ZSB1bml0cywgbm90IGNvZGUgcG9pbnRzLgorICogSW5kZXhlcyBhbmQgb2Zmc2V0cyBpbnRvIGFu
ZCBsZW5ndGhzIG9mIHN0cmluZ3MgYWx3YXlzIGNvdW50IGNvZGUgdW5pdHMsIG5vdCBjb2RlIHBv
aW50cy4KICAqIFRoaXMgaXMgdGhlIHNhbWUgYXMgd2l0aCBtdWx0aS1ieXRlIGNoYXIqIHN0cmlu
Z3MgaW4gdHJhZGl0aW9uYWwgc3RyaW5nIGhhbmRsaW5nLgogICogT3BlcmF0aW9ucyBvbiBwYXJ0
aWFsIHN0cmluZ3MgdHlwaWNhbGx5IGRvIG5vdCB0ZXN0IGZvciBjb2RlIHBvaW50IGJvdW5kYXJp
ZXMuCiAgKiBJZiBuZWNlc3NhcnksIHRoZSB1c2VyIG5lZWRzIHRvIHRha2UgY2FyZSBvZiBzdWNo
IGJvdW5kYXJpZXMgYnkgdGVzdGluZyBmb3IgdGhlIGNvZGUgdW5pdAogICogdmFsdWVzIG9yIGJ5
IHVzaW5nIGZ1bmN0aW9ucyBsaWtlCiAgKiBVbmljb2RlU3RyaW5nOjpnZXRDaGFyMzJTdGFydCgp
IGFuZCBVbmljb2RlU3RyaW5nOjpnZXRDaGFyMzJMaW1pdCgpCi0gKiAob3IsIGluIEMsIHRoZSBl
cXVpdmFsZW50IG1hY3JvcyBVMTZfU0VUX0NQX1NUQVJUKCkgYW5kIFUxNl9TRVRfQ1BfTElNSVQo
KSwgc2VlIHV0Zi5oKS48L3A+CisgKiAob3IsIGluIEMsIHRoZSBlcXVpdmFsZW50IG1hY3JvcyBV
MTZfU0VUX0NQX1NUQVJUKCkgYW5kIFUxNl9TRVRfQ1BfTElNSVQoKSwgc2VlIHV0Zi5oKS4KICAq
CiAgKiBVbmljb2RlU3RyaW5nIG1ldGhvZHMgYXJlIG1vcmUgbGVuaWVudCB3aXRoIHJlZ2FyZCB0
byBpbnB1dCBwYXJhbWV0ZXIgdmFsdWVzCiAgKiB0aGFuIG90aGVyIElDVSBBUElzLiBJbiBwYXJ0
aWN1bGFyOgogICogLSBJZiBpbmRleGVzIGFyZSBvdXQgb2YgYm91bmRzIGZvciBhIFVuaWNvZGVT
dHJpbmcgb2JqZWN0Ci0gKiAgICg8MCBvciA+bGVuZ3RoKCkpIHRoZW4gdGhleSBhcmUgInBpbm5l
ZCIgdG8gdGhlIG5lYXJlc3QgYm91bmRhcnkuCisgKiAgICg8IDAgb3IgPiBsZW5ndGgoKSkgdGhl
biB0aGV5IGFyZSAicGlubmVkIiB0byB0aGUgbmVhcmVzdCBib3VuZGFyeS4KKyAqIC0gSWYgdGhl
IGJ1ZmZlciBwYXNzZWQgdG8gYW4gaW5zZXJ0L2FwcGVuZC9yZXBsYWNlIG9wZXJhdGlvbiBpcyBv
d25lZCBieSB0aGUKKyAqICAgdGFyZ2V0IG9iamVjdCwgZS5nLiwgY2FsbGluZyBzdHIuYXBwZW5k
KHN0ciksIGFuIGV4dHJhIGNvcHkgbWF5IHRha2UgcGxhY2UKKyAqICAgdG8gZW5zdXJlIHNhZmV0
eS4KICAqIC0gSWYgcHJpbWl0aXZlIHN0cmluZyBwb2ludGVyIHZhbHVlcyAoZS5nLiwgY29uc3Qg
Y2hhcjE2X3QgKiBvciBjaGFyICopCiAgKiAgIGZvciBpbnB1dCBzdHJpbmdzIGFyZSBOVUxMLCB0
aGVuIHRob3NlIGlucHV0IHN0cmluZyBwYXJhbWV0ZXJzIGFyZSB0cmVhdGVkCiAgKiAgIGFzIGlm
IHRoZXkgcG9pbnRlZCB0byBhbiBlbXB0eSBzdHJpbmcuCi0gKiAgIEhvd2V2ZXIsIHRoaXMgaXMg
PGVtPm5vdDwvZW0+IHRoZSBjYXNlIGZvciBjaGFyICogcGFyYW1ldGVycyBmb3IgY2hhcnNldCBu
YW1lcworICogICBIb3dldmVyLCB0aGlzIGlzICpub3QqIHRoZSBjYXNlIGZvciBjaGFyICogcGFy
YW1ldGVycyBmb3IgY2hhcnNldCBuYW1lcwogICogICBvciBvdGhlciBJRHMuCiAgKiAtIE1vc3Qg
VW5pY29kZVN0cmluZyBtZXRob2RzIGRvIG5vdCB0YWtlIGEgVUVycm9yQ29kZSBwYXJhbWV0ZXIg
YmVjYXVzZQogICogICB0aGVyZSBhcmUgdXN1YWxseSB2ZXJ5IGZldyBvcHBvcnR1bml0aWVzIGZv
ciBmYWlsdXJlIG90aGVyIHRoYW4gYSBzaG9ydGFnZQpAQCAtMjcwLDE0ICsyNzMsMTQgQEAgY2xh
c3MgVW5pY29kZVN0cmluZ0FwcGVuZGFibGU7ICAvLyB1bmljb2RlL2FwcGVuZGFibGUuaAogICog
VGhpcyBpbmNsdWRlcyB0aGUgY29uc3QgVW5pY29kZVN0cmluZyAmIHBhcmFtZXRlcnMgZm9yCiAg
KiBjb3B5IGNvbnN0cnVjdGlvbiwgYXNzaWdubWVudCwgYW5kIGNsb25pbmcuCiAgKgotICogPHA+
VW5pY29kZVN0cmluZyB1c2VzIHNldmVyYWwgc3RvcmFnZSBtZXRob2RzLgorICogVW5pY29kZVN0
cmluZyB1c2VzIHNldmVyYWwgc3RvcmFnZSBtZXRob2RzLgogICogU3RyaW5nIGNvbnRlbnRzIGNh
biBiZSBzdG9yZWQgaW5zaWRlIHRoZSBVbmljb2RlU3RyaW5nIG9iamVjdCBpdHNlbGYsCiAgKiBp
biBhbiBhbGxvY2F0ZWQgYW5kIHNoYXJlZCBidWZmZXIsIG9yIGluIGFuIG91dHNpZGUgYnVmZmVy
IHRoYXQgaXMgImFsaWFzZWQiLgogICogTW9zdCBvZiB0aGlzIGlzIGRvbmUgdHJhbnNwYXJlbnRs
eSwgYnV0IGNhcmVmdWwgYWxpYXNpbmcgaW4gcGFydGljdWxhciBwcm92aWRlcwogICogc2lnbmlm
aWNhbnQgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzLgogICogQWxzbywgdGhlIGludGVybmFsIGJ1
ZmZlciBpcyBhY2Nlc3NpYmxlIHZpYSBzcGVjaWFsIGZ1bmN0aW9ucy4KICAqIEZvciBkZXRhaWxz
IHNlZSB0aGUKLSAqIDxhIGhyZWY9Imh0dHA6Ly91c2VyZ3VpZGUuaWN1LXByb2plY3Qub3JnL3N0
cmluZ3MjVE9DLU1heGltaXppbmctUGVyZm9ybWFuY2Utd2l0aC10aGUtVW5pY29kZVN0cmluZy1T
dG9yYWdlLU1vZGVsIj5Vc2VyIEd1aWRlIFN0cmluZ3MgY2hhcHRlcjwvYT4uPC9wPgorICogW1Vz
ZXIgR3VpZGUgU3RyaW5ncyBjaGFwdGVyXShodHRwOi8vdXNlcmd1aWRlLmljdS1wcm9qZWN0Lm9y
Zy9zdHJpbmdzI1RPQy1NYXhpbWl6aW5nLVBlcmZvcm1hbmNlLXdpdGgtdGhlLVVuaWNvZGVTdHJp
bmctU3RvcmFnZS1Nb2RlbCkuCiAgKgogICogQHNlZSB1dGYuaAogICogQHNlZSBDaGFyYWN0ZXJJ
dGVyYXRvcgpAQCAtMzEyLDcgKzMxNSw3IEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBVbmljb2RlU3Ry
aW5nIDogcHVibGljIFJlcGxhY2VhYmxlCiAgIC8qKgogICAgKiBFcXVhbGl0eSBvcGVyYXRvci4g
UGVyZm9ybXMgb25seSBiaXR3aXNlIGNvbXBhcmlzb24uCiAgICAqIEBwYXJhbSB0ZXh0IFRoZSBV
bmljb2RlU3RyaW5nIHRvIGNvbXBhcmUgdG8gdGhpcyBvbmUuCi0gICAqIEByZXR1cm4gVFJVRSBp
ZiA8VFQ+dGV4dDwvVFQ+IGNvbnRhaW5zIHRoZSBzYW1lIGNoYXJhY3RlcnMgYXMgdGhpcyBvbmUs
CisgICAqIEByZXR1cm4gVFJVRSBpZiBgdGV4dGAgY29udGFpbnMgdGhlIHNhbWUgY2hhcmFjdGVy
cyBhcyB0aGlzIG9uZSwKICAgICogRkFMU0Ugb3RoZXJ3aXNlLgogICAgKiBAc3RhYmxlIElDVSAy
LjAKICAgICovCkBAIC0zMjEsNyArMzI0LDcgQEAgY2xhc3MgVV9DT01NT05fQVBJIFVuaWNvZGVT
dHJpbmcgOiBwdWJsaWMgUmVwbGFjZWFibGUKICAgLyoqCiAgICAqIEluZXF1YWxpdHkgb3BlcmF0
b3IuIFBlcmZvcm1zIG9ubHkgYml0d2lzZSBjb21wYXJpc29uLgogICAgKiBAcGFyYW0gdGV4dCBU
aGUgVW5pY29kZVN0cmluZyB0byBjb21wYXJlIHRvIHRoaXMgb25lLgotICAgKiBAcmV0dXJuIEZB
TFNFIGlmIDxUVD50ZXh0PC9UVD4gY29udGFpbnMgdGhlIHNhbWUgY2hhcmFjdGVycyBhcyB0aGlz
IG9uZSwKKyAgICogQHJldHVybiBGQUxTRSBpZiBgdGV4dGAgY29udGFpbnMgdGhlIHNhbWUgY2hh
cmFjdGVycyBhcyB0aGlzIG9uZSwKICAgICogVFJVRSBvdGhlcndpc2UuCiAgICAqIEBzdGFibGUg
SUNVIDIuMAogICAgKi8KQEAgLTMzMSw3ICszMzQsNyBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgVW5p
Y29kZVN0cmluZyA6IHB1YmxpYyBSZXBsYWNlYWJsZQogICAgKiBHcmVhdGVyIHRoYW4gb3BlcmF0
b3IuIFBlcmZvcm1zIG9ubHkgYml0d2lzZSBjb21wYXJpc29uLgogICAgKiBAcGFyYW0gdGV4dCBU
aGUgVW5pY29kZVN0cmluZyB0byBjb21wYXJlIHRvIHRoaXMgb25lLgogICAgKiBAcmV0dXJuIFRS
VUUgaWYgdGhlIGNoYXJhY3RlcnMgaW4gdGhpcyBhcmUgYml0d2lzZQotICAgKiBncmVhdGVyIHRo
YW4gdGhlIGNoYXJhY3RlcnMgaW4gPGNvZGU+dGV4dDwvY29kZT4sIEZBTFNFIG90aGVyd2lzZQor
ICAgKiBncmVhdGVyIHRoYW4gdGhlIGNoYXJhY3RlcnMgaW4gYHRleHRgLCBGQUxTRSBvdGhlcndp
c2UKICAgICogQHN0YWJsZSBJQ1UgMi4wCiAgICAqLwogICBpbmxpbmUgVUJvb2wgb3BlcmF0b3I+
IChjb25zdCBVbmljb2RlU3RyaW5nJiB0ZXh0KSBjb25zdDsKQEAgLTM0MCw3ICszNDMsNyBAQCBj
bGFzcyBVX0NPTU1PTl9BUEkgVW5pY29kZVN0cmluZyA6IHB1YmxpYyBSZXBsYWNlYWJsZQogICAg
KiBMZXNzIHRoYW4gb3BlcmF0b3IuIFBlcmZvcm1zIG9ubHkgYml0d2lzZSBjb21wYXJpc29uLgog
ICAgKiBAcGFyYW0gdGV4dCBUaGUgVW5pY29kZVN0cmluZyB0byBjb21wYXJlIHRvIHRoaXMgb25l
LgogICAgKiBAcmV0dXJuIFRSVUUgaWYgdGhlIGNoYXJhY3RlcnMgaW4gdGhpcyBhcmUgYml0d2lz
ZQotICAgKiBsZXNzIHRoYW4gdGhlIGNoYXJhY3RlcnMgaW4gPGNvZGU+dGV4dDwvY29kZT4sIEZB
TFNFIG90aGVyd2lzZQorICAgKiBsZXNzIHRoYW4gdGhlIGNoYXJhY3RlcnMgaW4gYHRleHRgLCBG
QUxTRSBvdGhlcndpc2UKICAgICogQHN0YWJsZSBJQ1UgMi4wCiAgICAqLwogICBpbmxpbmUgVUJv
b2wgb3BlcmF0b3I8IChjb25zdCBVbmljb2RlU3RyaW5nJiB0ZXh0KSBjb25zdDsKQEAgLTM0OSw3
ICszNTIsNyBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgVW5pY29kZVN0cmluZyA6IHB1YmxpYyBSZXBs
YWNlYWJsZQogICAgKiBHcmVhdGVyIHRoYW4gb3IgZXF1YWwgb3BlcmF0b3IuIFBlcmZvcm1zIG9u
bHkgYml0d2lzZSBjb21wYXJpc29uLgogICAgKiBAcGFyYW0gdGV4dCBUaGUgVW5pY29kZVN0cmlu
ZyB0byBjb21wYXJlIHRvIHRoaXMgb25lLgogICAgKiBAcmV0dXJuIFRSVUUgaWYgdGhlIGNoYXJh
Y3RlcnMgaW4gdGhpcyBhcmUgYml0d2lzZQotICAgKiBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8g
dGhlIGNoYXJhY3RlcnMgaW4gPGNvZGU+dGV4dDwvY29kZT4sIEZBTFNFIG90aGVyd2lzZQorICAg
KiBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGNoYXJhY3RlcnMgaW4gYHRleHRgLCBGQUxT
RSBvdGhlcndpc2UKICAgICogQHN0YWJsZSBJQ1UgMi4wCiAgICAqLwogICBpbmxpbmUgVUJvb2wg
b3BlcmF0b3I+PSAoY29uc3QgVW5pY29kZVN0cmluZyYgdGV4dCkgY29uc3Q7CkBAIC0zNTgsMzcg
KzM2MSwzNyBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgVW5pY29kZVN0cmluZyA6IHB1YmxpYyBSZXBs
YWNlYWJsZQogICAgKiBMZXNzIHRoYW4gb3IgZXF1YWwgb3BlcmF0b3IuIFBlcmZvcm1zIG9ubHkg
Yml0d2lzZSBjb21wYXJpc29uLgogICAgKiBAcGFyYW0gdGV4dCBUaGUgVW5pY29kZVN0cmluZyB0
byBjb21wYXJlIHRvIHRoaXMgb25lLgogICAgKiBAcmV0dXJuIFRSVUUgaWYgdGhlIGNoYXJhY3Rl
cnMgaW4gdGhpcyBhcmUgYml0d2lzZQotICAgKiBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGNo
YXJhY3RlcnMgaW4gPGNvZGU+dGV4dDwvY29kZT4sIEZBTFNFIG90aGVyd2lzZQorICAgKiBsZXNz
IHRoYW4gb3IgZXF1YWwgdG8gdGhlIGNoYXJhY3RlcnMgaW4gYHRleHRgLCBGQUxTRSBvdGhlcndp
c2UKICAgICogQHN0YWJsZSBJQ1UgMi4wCiAgICAqLwogICBpbmxpbmUgVUJvb2wgb3BlcmF0b3I8
PSAoY29uc3QgVW5pY29kZVN0cmluZyYgdGV4dCkgY29uc3Q7CiAKICAgLyoqCiAgICAqIENvbXBh
cmUgdGhlIGNoYXJhY3RlcnMgYml0d2lzZSBpbiB0aGlzIFVuaWNvZGVTdHJpbmcgdG8KLSAgICog
dGhlIGNoYXJhY3RlcnMgaW4gPGNvZGU+dGV4dDwvY29kZT4uCisgICAqIHRoZSBjaGFyYWN0ZXJz
IGluIGB0ZXh0YC4KICAgICogQHBhcmFtIHRleHQgVGhlIFVuaWNvZGVTdHJpbmcgdG8gY29tcGFy
ZSB0byB0aGlzIG9uZS4KICAgICogQHJldHVybiBUaGUgcmVzdWx0IG9mIGJpdHdpc2UgY2hhcmFj
dGVyIGNvbXBhcmlzb246IDAgaWYgdGhpcwotICAgKiBjb250YWlucyB0aGUgc2FtZSBjaGFyYWN0
ZXJzIGFzIDxjb2RlPnRleHQ8L2NvZGU+LCAtMSBpZiB0aGUgY2hhcmFjdGVycyBpbgotICAgKiB0
aGlzIGFyZSBiaXR3aXNlIGxlc3MgdGhhbiB0aGUgY2hhcmFjdGVycyBpbiA8Y29kZT50ZXh0PC9j
b2RlPiwgKzEgaWYgdGhlCisgICAqIGNvbnRhaW5zIHRoZSBzYW1lIGNoYXJhY3RlcnMgYXMgYHRl
eHRgLCAtMSBpZiB0aGUgY2hhcmFjdGVycyBpbgorICAgKiB0aGlzIGFyZSBiaXR3aXNlIGxlc3Mg
dGhhbiB0aGUgY2hhcmFjdGVycyBpbiBgdGV4dGAsICsxIGlmIHRoZQogICAgKiBjaGFyYWN0ZXJz
IGluIHRoaXMgYXJlIGJpdHdpc2UgZ3JlYXRlciB0aGFuIHRoZSBjaGFyYWN0ZXJzCi0gICAqIGlu
IDxjb2RlPnRleHQ8L2NvZGU+LgorICAgKiBpbiBgdGV4dGAuCiAgICAqIEBzdGFibGUgSUNVIDIu
MAogICAgKi8KICAgaW5saW5lIGludDhfdCBjb21wYXJlKGNvbnN0IFVuaWNvZGVTdHJpbmcmIHRl
eHQpIGNvbnN0OwogCiAgIC8qKgogICAgKiBDb21wYXJlIHRoZSBjaGFyYWN0ZXJzIGJpdHdpc2Ug
aW4gdGhlIHJhbmdlCi0gICAqIFs8VFQ+c3RhcnQ8L1RUPiwgPFRUPnN0YXJ0ICsgbGVuZ3RoPC9U
VD4pIHdpdGggdGhlIGNoYXJhY3RlcnMKLSAgICogaW4gdGhlIDxiPmVudGlyZSBzdHJpbmc8L2I+
IDxUVD50ZXh0PC9UVD4uCisgICAqIFtgc3RhcnRgLCBgc3RhcnQgKyBsZW5ndGhgKSB3aXRoIHRo
ZSBjaGFyYWN0ZXJzCisgICAqIGluIHRoZSAqKmVudGlyZSBzdHJpbmcqKiBgdGV4dGAuCiAgICAq
IChUaGUgcGFyYW1ldGVycyAic3RhcnQiIGFuZCAibGVuZ3RoIiBhcmUgbm90IGFwcGxpZWQgdG8g
dGhlIG90aGVyIHRleHQgInRleHQiLikKICAgICogQHBhcmFtIHN0YXJ0IHRoZSBvZmZzZXQgYXQg
d2hpY2ggdGhlIGNvbXBhcmUgb3BlcmF0aW9uIGJlZ2lucwogICAgKiBAcGFyYW0gbGVuZ3RoIHRo
ZSBudW1iZXIgb2YgY2hhcmFjdGVycyBvZiB0ZXh0IHRvIGNvbXBhcmUuCiAgICAqIEBwYXJhbSB0
ZXh0IHRoZSBvdGhlciB0ZXh0IHRvIGJlIGNvbXBhcmVkIGFnYWluc3QgdGhpcyBzdHJpbmcuCiAg
ICAqIEByZXR1cm4gVGhlIHJlc3VsdCBvZiBiaXR3aXNlIGNoYXJhY3RlciBjb21wYXJpc29uOiAw
IGlmIHRoaXMKLSAgICogY29udGFpbnMgdGhlIHNhbWUgY2hhcmFjdGVycyBhcyA8Y29kZT50ZXh0
PC9jb2RlPiwgLTEgaWYgdGhlIGNoYXJhY3RlcnMgaW4KLSAgICogdGhpcyBhcmUgYml0d2lzZSBs
ZXNzIHRoYW4gdGhlIGNoYXJhY3RlcnMgaW4gPGNvZGU+dGV4dDwvY29kZT4sICsxIGlmIHRoZQor
ICAgKiBjb250YWlucyB0aGUgc2FtZSBjaGFyYWN0ZXJzIGFzIGB0ZXh0YCwgLTEgaWYgdGhlIGNo
YXJhY3RlcnMgaW4KKyAgICogdGhpcyBhcmUgYml0d2lzZSBsZXNzIHRoYW4gdGhlIGNoYXJhY3Rl
cnMgaW4gYHRleHRgLCArMSBpZiB0aGUKICAgICogY2hhcmFjdGVycyBpbiB0aGlzIGFyZSBiaXR3
aXNlIGdyZWF0ZXIgdGhhbiB0aGUgY2hhcmFjdGVycwotICAgKiBpbiA8Y29kZT50ZXh0PC9jb2Rl
Pi4KKyAgICogaW4gYHRleHRgLgogICAgKiBAc3RhYmxlIElDVSAyLjAKICAgICovCiAgIGlubGlu
ZSBpbnQ4X3QgY29tcGFyZShpbnQzMl90IHN0YXJ0LApAQCAtMzk3LDE5ICs0MDAsMTkgQEAgY2xh
c3MgVV9DT01NT05fQVBJIFVuaWNvZGVTdHJpbmcgOiBwdWJsaWMgUmVwbGFjZWFibGUKIAogICAv
KioKICAgICogQ29tcGFyZSB0aGUgY2hhcmFjdGVycyBiaXR3aXNlIGluIHRoZSByYW5nZQotICAg
KiBbPFRUPnN0YXJ0PC9UVD4sIDxUVD5zdGFydCArIGxlbmd0aDwvVFQ+KSB3aXRoIHRoZSBjaGFy
YWN0ZXJzCi0gICAqIGluIDxUVD5zcmNUZXh0PC9UVD4gaW4gdGhlIHJhbmdlCi0gICAqIFs8VFQ+
c3JjU3RhcnQ8L1RUPiwgPFRUPnNyY1N0YXJ0ICsgc3JjTGVuZ3RoPC9UVD4pLgorICAgKiBbYHN0
YXJ0YCwgYHN0YXJ0ICsgbGVuZ3RoYCkgd2l0aCB0aGUgY2hhcmFjdGVycworICAgKiBpbiBgc3Jj
VGV4dGAgaW4gdGhlIHJhbmdlCisgICAqIFtgc3JjU3RhcnRgLCBgc3JjU3RhcnQgKyBzcmNMZW5n
dGhgKS4KICAgICogQHBhcmFtIHN0YXJ0IHRoZSBvZmZzZXQgYXQgd2hpY2ggdGhlIGNvbXBhcmUg
b3BlcmF0aW9uIGJlZ2lucwogICAgKiBAcGFyYW0gbGVuZ3RoIHRoZSBudW1iZXIgb2YgY2hhcmFj
dGVycyBpbiB0aGlzIHRvIGNvbXBhcmUuCiAgICAqIEBwYXJhbSBzcmNUZXh0IHRoZSB0ZXh0IHRv
IGJlIGNvbXBhcmVkCi0gICAqIEBwYXJhbSBzcmNTdGFydCB0aGUgb2Zmc2V0IGludG8gPFRUPnNy
Y1RleHQ8L1RUPiB0byBzdGFydCBjb21wYXJpc29uCi0gICAqIEBwYXJhbSBzcmNMZW5ndGggdGhl
IG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIDxUVD5zcmM8L1RUPiB0byBjb21wYXJlCisgICAqIEBw
YXJhbSBzcmNTdGFydCB0aGUgb2Zmc2V0IGludG8gYHNyY1RleHRgIHRvIHN0YXJ0IGNvbXBhcmlz
b24KKyAgICogQHBhcmFtIHNyY0xlbmd0aCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gYHNy
Y2AgdG8gY29tcGFyZQogICAgKiBAcmV0dXJuIFRoZSByZXN1bHQgb2YgYml0d2lzZSBjaGFyYWN0
ZXIgY29tcGFyaXNvbjogMCBpZiB0aGlzCi0gICAqIGNvbnRhaW5zIHRoZSBzYW1lIGNoYXJhY3Rl
cnMgYXMgPGNvZGU+c3JjVGV4dDwvY29kZT4sIC0xIGlmIHRoZSBjaGFyYWN0ZXJzIGluCi0gICAq
IHRoaXMgYXJlIGJpdHdpc2UgbGVzcyB0aGFuIHRoZSBjaGFyYWN0ZXJzIGluIDxjb2RlPnNyY1Rl
eHQ8L2NvZGU+LCArMSBpZiB0aGUKKyAgICogY29udGFpbnMgdGhlIHNhbWUgY2hhcmFjdGVycyBh
cyBgc3JjVGV4dGAsIC0xIGlmIHRoZSBjaGFyYWN0ZXJzIGluCisgICAqIHRoaXMgYXJlIGJpdHdp
c2UgbGVzcyB0aGFuIHRoZSBjaGFyYWN0ZXJzIGluIGBzcmNUZXh0YCwgKzEgaWYgdGhlCiAgICAq
IGNoYXJhY3RlcnMgaW4gdGhpcyBhcmUgYml0d2lzZSBncmVhdGVyIHRoYW4gdGhlIGNoYXJhY3Rl
cnMKLSAgICogaW4gPGNvZGU+c3JjVGV4dDwvY29kZT4uCisgICAqIGluIGBzcmNUZXh0YC4KICAg
ICogQHN0YWJsZSBJQ1UgMi4wCiAgICAqLwogICAgaW5saW5lIGludDhfdCBjb21wYXJlKGludDMy
X3Qgc3RhcnQsCkBAIC00MjAsMTQgKzQyMywxNCBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgVW5pY29k
ZVN0cmluZyA6IHB1YmxpYyBSZXBsYWNlYWJsZQogCiAgIC8qKgogICAgKiBDb21wYXJlIHRoZSBj
aGFyYWN0ZXJzIGJpdHdpc2UgaW4gdGhpcyBVbmljb2RlU3RyaW5nIHdpdGggdGhlIGZpcnN0Ci0g
ICAqIDxUVD5zcmNMZW5ndGg8L1RUPiBjaGFyYWN0ZXJzIGluIDxUVD5zcmNDaGFyczwvVFQ+Lgor
ICAgKiBgc3JjTGVuZ3RoYCBjaGFyYWN0ZXJzIGluIGBzcmNDaGFyc2AuCiAgICAqIEBwYXJhbSBz
cmNDaGFycyBUaGUgY2hhcmFjdGVycyB0byBjb21wYXJlIHRvIHRoaXMgVW5pY29kZVN0cmluZy4K
LSAgICogQHBhcmFtIHNyY0xlbmd0aCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gPFRUPnNy
Y0NoYXJzPC9UVD4gdG8gY29tcGFyZQorICAgKiBAcGFyYW0gc3JjTGVuZ3RoIHRoZSBudW1iZXIg
b2YgY2hhcmFjdGVycyBpbiBgc3JjQ2hhcnNgIHRvIGNvbXBhcmUKICAgICogQHJldHVybiBUaGUg
cmVzdWx0IG9mIGJpdHdpc2UgY2hhcmFjdGVyIGNvbXBhcmlzb246IDAgaWYgdGhpcwotICAgKiBj
b250YWlucyB0aGUgc2FtZSBjaGFyYWN0ZXJzIGFzIDxjb2RlPnNyY0NoYXJzPC9jb2RlPiwgLTEg
aWYgdGhlIGNoYXJhY3RlcnMgaW4KLSAgICogdGhpcyBhcmUgYml0d2lzZSBsZXNzIHRoYW4gdGhl
IGNoYXJhY3RlcnMgaW4gPGNvZGU+c3JjQ2hhcnM8L2NvZGU+LCArMSBpZiB0aGUKKyAgICogY29u
dGFpbnMgdGhlIHNhbWUgY2hhcmFjdGVycyBhcyBgc3JjQ2hhcnNgLCAtMSBpZiB0aGUgY2hhcmFj
dGVycyBpbgorICAgKiB0aGlzIGFyZSBiaXR3aXNlIGxlc3MgdGhhbiB0aGUgY2hhcmFjdGVycyBp
biBgc3JjQ2hhcnNgLCArMSBpZiB0aGUKICAgICogY2hhcmFjdGVycyBpbiB0aGlzIGFyZSBiaXR3
aXNlIGdyZWF0ZXIgdGhhbiB0aGUgY2hhcmFjdGVycwotICAgKiBpbiA8Y29kZT5zcmNDaGFyczwv
Y29kZT4uCisgICAqIGluIGBzcmNDaGFyc2AuCiAgICAqIEBzdGFibGUgSUNVIDIuMAogICAgKi8K
ICAgaW5saW5lIGludDhfdCBjb21wYXJlKENvbnN0Q2hhcjE2UHRyIHNyY0NoYXJzLApAQCAtNDM1
LDE2ICs0MzgsMTYgQEAgY2xhc3MgVV9DT01NT05fQVBJIFVuaWNvZGVTdHJpbmcgOiBwdWJsaWMg
UmVwbGFjZWFibGUKIAogICAvKioKICAgICogQ29tcGFyZSB0aGUgY2hhcmFjdGVycyBiaXR3aXNl
IGluIHRoZSByYW5nZQotICAgKiBbPFRUPnN0YXJ0PC9UVD4sIDxUVD5zdGFydCArIGxlbmd0aDwv
VFQ+KSB3aXRoIHRoZSBmaXJzdAotICAgKiA8VFQ+bGVuZ3RoPC9UVD4gY2hhcmFjdGVycyBpbiA8
VFQ+c3JjQ2hhcnM8L1RUPgorICAgKiBbYHN0YXJ0YCwgYHN0YXJ0ICsgbGVuZ3RoYCkgd2l0aCB0
aGUgZmlyc3QKKyAgICogYGxlbmd0aGAgY2hhcmFjdGVycyBpbiBgc3JjQ2hhcnNgCiAgICAqIEBw
YXJhbSBzdGFydCB0aGUgb2Zmc2V0IGF0IHdoaWNoIHRoZSBjb21wYXJlIG9wZXJhdGlvbiBiZWdp
bnMKICAgICogQHBhcmFtIGxlbmd0aCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gY29tcGFy
ZS4KICAgICogQHBhcmFtIHNyY0NoYXJzIHRoZSBjaGFyYWN0ZXJzIHRvIGJlIGNvbXBhcmVkCiAg
ICAqIEByZXR1cm4gVGhlIHJlc3VsdCBvZiBiaXR3aXNlIGNoYXJhY3RlciBjb21wYXJpc29uOiAw
IGlmIHRoaXMKLSAgICogY29udGFpbnMgdGhlIHNhbWUgY2hhcmFjdGVycyBhcyA8Y29kZT5zcmND
aGFyczwvY29kZT4sIC0xIGlmIHRoZSBjaGFyYWN0ZXJzIGluCi0gICAqIHRoaXMgYXJlIGJpdHdp
c2UgbGVzcyB0aGFuIHRoZSBjaGFyYWN0ZXJzIGluIDxjb2RlPnNyY0NoYXJzPC9jb2RlPiwgKzEg
aWYgdGhlCisgICAqIGNvbnRhaW5zIHRoZSBzYW1lIGNoYXJhY3RlcnMgYXMgYHNyY0NoYXJzYCwg
LTEgaWYgdGhlIGNoYXJhY3RlcnMgaW4KKyAgICogdGhpcyBhcmUgYml0d2lzZSBsZXNzIHRoYW4g
dGhlIGNoYXJhY3RlcnMgaW4gYHNyY0NoYXJzYCwgKzEgaWYgdGhlCiAgICAqIGNoYXJhY3RlcnMg
aW4gdGhpcyBhcmUgYml0d2lzZSBncmVhdGVyIHRoYW4gdGhlIGNoYXJhY3RlcnMKLSAgICogaW4g
PGNvZGU+c3JjQ2hhcnM8L2NvZGU+LgorICAgKiBpbiBgc3JjQ2hhcnNgLgogICAgKiBAc3RhYmxl
IElDVSAyLjAKICAgICovCiAgIGlubGluZSBpbnQ4X3QgY29tcGFyZShpbnQzMl90IHN0YXJ0LApA
QCAtNDUzLDE5ICs0NTYsMTkgQEAgY2xhc3MgVV9DT01NT05fQVBJIFVuaWNvZGVTdHJpbmcgOiBw
dWJsaWMgUmVwbGFjZWFibGUKIAogICAvKioKICAgICogQ29tcGFyZSB0aGUgY2hhcmFjdGVycyBi
aXR3aXNlIGluIHRoZSByYW5nZQotICAgKiBbPFRUPnN0YXJ0PC9UVD4sIDxUVD5zdGFydCArIGxl
bmd0aDwvVFQ+KSB3aXRoIHRoZSBjaGFyYWN0ZXJzCi0gICAqIGluIDxUVD5zcmNDaGFyczwvVFQ+
IGluIHRoZSByYW5nZQotICAgKiBbPFRUPnNyY1N0YXJ0PC9UVD4sIDxUVD5zcmNTdGFydCArIHNy
Y0xlbmd0aDwvVFQ+KS4KKyAgICogW2BzdGFydGAsIGBzdGFydCArIGxlbmd0aGApIHdpdGggdGhl
IGNoYXJhY3RlcnMKKyAgICogaW4gYHNyY0NoYXJzYCBpbiB0aGUgcmFuZ2UKKyAgICogW2BzcmNT
dGFydGAsIGBzcmNTdGFydCArIHNyY0xlbmd0aGApLgogICAgKiBAcGFyYW0gc3RhcnQgdGhlIG9m
ZnNldCBhdCB3aGljaCB0aGUgY29tcGFyZSBvcGVyYXRpb24gYmVnaW5zCiAgICAqIEBwYXJhbSBs
ZW5ndGggdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoaXMgdG8gY29tcGFyZQogICAgKiBA
cGFyYW0gc3JjQ2hhcnMgdGhlIGNoYXJhY3RlcnMgdG8gYmUgY29tcGFyZWQKLSAgICogQHBhcmFt
IHNyY1N0YXJ0IHRoZSBvZmZzZXQgaW50byA8VFQ+c3JjQ2hhcnM8L1RUPiB0byBzdGFydCBjb21w
YXJpc29uCi0gICAqIEBwYXJhbSBzcmNMZW5ndGggdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGlu
IDxUVD5zcmNDaGFyczwvVFQ+IHRvIGNvbXBhcmUKKyAgICogQHBhcmFtIHNyY1N0YXJ0IHRoZSBv
ZmZzZXQgaW50byBgc3JjQ2hhcnNgIHRvIHN0YXJ0IGNvbXBhcmlzb24KKyAgICogQHBhcmFtIHNy
Y0xlbmd0aCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gYHNyY0NoYXJzYCB0byBjb21wYXJl
CiAgICAqIEByZXR1cm4gVGhlIHJlc3VsdCBvZiBiaXR3aXNlIGNoYXJhY3RlciBjb21wYXJpc29u
OiAwIGlmIHRoaXMKLSAgICogY29udGFpbnMgdGhlIHNhbWUgY2hhcmFjdGVycyBhcyA8Y29kZT5z
cmNDaGFyczwvY29kZT4sIC0xIGlmIHRoZSBjaGFyYWN0ZXJzIGluCi0gICAqIHRoaXMgYXJlIGJp
dHdpc2UgbGVzcyB0aGFuIHRoZSBjaGFyYWN0ZXJzIGluIDxjb2RlPnNyY0NoYXJzPC9jb2RlPiwg
KzEgaWYgdGhlCisgICAqIGNvbnRhaW5zIHRoZSBzYW1lIGNoYXJhY3RlcnMgYXMgYHNyY0NoYXJz
YCwgLTEgaWYgdGhlIGNoYXJhY3RlcnMgaW4KKyAgICogdGhpcyBhcmUgYml0d2lzZSBsZXNzIHRo
YW4gdGhlIGNoYXJhY3RlcnMgaW4gYHNyY0NoYXJzYCwgKzEgaWYgdGhlCiAgICAqIGNoYXJhY3Rl
cnMgaW4gdGhpcyBhcmUgYml0d2lzZSBncmVhdGVyIHRoYW4gdGhlIGNoYXJhY3RlcnMKLSAgICog
aW4gPGNvZGU+c3JjQ2hhcnM8L2NvZGU+LgorICAgKiBpbiBgc3JjQ2hhcnNgLgogICAgKiBAc3Rh
YmxlIElDVSAyLjAKICAgICovCiAgIGlubGluZSBpbnQ4X3QgY29tcGFyZShpbnQzMl90IHN0YXJ0
LApAQCAtNDc2LDE5ICs0NzksMTkgQEAgY2xhc3MgVV9DT01NT05fQVBJIFVuaWNvZGVTdHJpbmcg
OiBwdWJsaWMgUmVwbGFjZWFibGUKIAogICAvKioKICAgICogQ29tcGFyZSB0aGUgY2hhcmFjdGVy
cyBiaXR3aXNlIGluIHRoZSByYW5nZQotICAgKiBbPFRUPnN0YXJ0PC9UVD4sIDxUVD5saW1pdDwv
VFQ+KSB3aXRoIHRoZSBjaGFyYWN0ZXJzCi0gICAqIGluIDxUVD5zcmNUZXh0PC9UVD4gaW4gdGhl
IHJhbmdlCi0gICAqIFs8VFQ+c3JjU3RhcnQ8L1RUPiwgPFRUPnNyY0xpbWl0PC9UVD4pLgorICAg
KiBbYHN0YXJ0YCwgYGxpbWl0YCkgd2l0aCB0aGUgY2hhcmFjdGVycworICAgKiBpbiBgc3JjVGV4
dGAgaW4gdGhlIHJhbmdlCisgICAqIFtgc3JjU3RhcnRgLCBgc3JjTGltaXRgKS4KICAgICogQHBh
cmFtIHN0YXJ0IHRoZSBvZmZzZXQgYXQgd2hpY2ggdGhlIGNvbXBhcmUgb3BlcmF0aW9uIGJlZ2lu
cwogICAgKiBAcGFyYW0gbGltaXQgdGhlIG9mZnNldCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhl
IGNvbXBhcmUgb3BlcmF0aW9uCiAgICAqIEBwYXJhbSBzcmNUZXh0IHRoZSB0ZXh0IHRvIGJlIGNv
bXBhcmVkCi0gICAqIEBwYXJhbSBzcmNTdGFydCB0aGUgb2Zmc2V0IGludG8gPFRUPnNyY1RleHQ8
L1RUPiB0byBzdGFydCBjb21wYXJpc29uCi0gICAqIEBwYXJhbSBzcmNMaW1pdCB0aGUgb2Zmc2V0
IGludG8gPFRUPnNyY1RleHQ8L1RUPiB0byBsaW1pdCBjb21wYXJpc29uCisgICAqIEBwYXJhbSBz
cmNTdGFydCB0aGUgb2Zmc2V0IGludG8gYHNyY1RleHRgIHRvIHN0YXJ0IGNvbXBhcmlzb24KKyAg
ICogQHBhcmFtIHNyY0xpbWl0IHRoZSBvZmZzZXQgaW50byBgc3JjVGV4dGAgdG8gbGltaXQgY29t
cGFyaXNvbgogICAgKiBAcmV0dXJuIFRoZSByZXN1bHQgb2YgYml0d2lzZSBjaGFyYWN0ZXIgY29t
cGFyaXNvbjogMCBpZiB0aGlzCi0gICAqIGNvbnRhaW5zIHRoZSBzYW1lIGNoYXJhY3RlcnMgYXMg
PGNvZGU+c3JjVGV4dDwvY29kZT4sIC0xIGlmIHRoZSBjaGFyYWN0ZXJzIGluCi0gICAqIHRoaXMg
YXJlIGJpdHdpc2UgbGVzcyB0aGFuIHRoZSBjaGFyYWN0ZXJzIGluIDxjb2RlPnNyY1RleHQ8L2Nv
ZGU+LCArMSBpZiB0aGUKKyAgICogY29udGFpbnMgdGhlIHNhbWUgY2hhcmFjdGVycyBhcyBgc3Jj
VGV4dGAsIC0xIGlmIHRoZSBjaGFyYWN0ZXJzIGluCisgICAqIHRoaXMgYXJlIGJpdHdpc2UgbGVz
cyB0aGFuIHRoZSBjaGFyYWN0ZXJzIGluIGBzcmNUZXh0YCwgKzEgaWYgdGhlCiAgICAqIGNoYXJh
Y3RlcnMgaW4gdGhpcyBhcmUgYml0d2lzZSBncmVhdGVyIHRoYW4gdGhlIGNoYXJhY3RlcnMKLSAg
ICogaW4gPGNvZGU+c3JjVGV4dDwvY29kZT4uCisgICAqIGluIGBzcmNUZXh0YC4KICAgICogQHN0
YWJsZSBJQ1UgMi4wCiAgICAqLwogICBpbmxpbmUgaW50OF90IGNvbXBhcmVCZXR3ZWVuKGludDMy
X3Qgc3RhcnQsCkBAIC04NDUsMjEgKzg0OCwyMSBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgVW5pY29k
ZVN0cmluZyA6IHB1YmxpYyBSZXBsYWNlYWJsZQogICAgICAgICAgICAgdWludDMyX3Qgb3B0aW9u
cykgY29uc3Q7CiAKICAgLyoqCi0gICAqIERldGVybWluZSBpZiB0aGlzIHN0YXJ0cyB3aXRoIHRo
ZSBjaGFyYWN0ZXJzIGluIDxUVD50ZXh0PC9UVD4KKyAgICogRGV0ZXJtaW5lIGlmIHRoaXMgc3Rh
cnRzIHdpdGggdGhlIGNoYXJhY3RlcnMgaW4gYHRleHRgCiAgICAqIEBwYXJhbSB0ZXh0IFRoZSB0
ZXh0IHRvIG1hdGNoLgotICAgKiBAcmV0dXJuIFRSVUUgaWYgdGhpcyBzdGFydHMgd2l0aCB0aGUg
Y2hhcmFjdGVycyBpbiA8VFQ+dGV4dDwvVFQ+LAorICAgKiBAcmV0dXJuIFRSVUUgaWYgdGhpcyBz
dGFydHMgd2l0aCB0aGUgY2hhcmFjdGVycyBpbiBgdGV4dGAsCiAgICAqIEZBTFNFIG90aGVyd2lz
ZQogICAgKiBAc3RhYmxlIElDVSAyLjAKICAgICovCiAgIGlubGluZSBVQm9vbCBzdGFydHNXaXRo
KGNvbnN0IFVuaWNvZGVTdHJpbmcmIHRleHQpIGNvbnN0OwogCiAgIC8qKgotICAgKiBEZXRlcm1p
bmUgaWYgdGhpcyBzdGFydHMgd2l0aCB0aGUgY2hhcmFjdGVycyBpbiA8VFQ+c3JjVGV4dDwvVFQ+
Ci0gICAqIGluIHRoZSByYW5nZSBbPFRUPnNyY1N0YXJ0PC9UVD4sIDxUVD5zcmNTdGFydCArIHNy
Y0xlbmd0aDwvVFQ+KS4KKyAgICogRGV0ZXJtaW5lIGlmIHRoaXMgc3RhcnRzIHdpdGggdGhlIGNo
YXJhY3RlcnMgaW4gYHNyY1RleHRgCisgICAqIGluIHRoZSByYW5nZSBbYHNyY1N0YXJ0YCwgYHNy
Y1N0YXJ0ICsgc3JjTGVuZ3RoYCkuCiAgICAqIEBwYXJhbSBzcmNUZXh0IFRoZSB0ZXh0IHRvIG1h
dGNoLgotICAgKiBAcGFyYW0gc3JjU3RhcnQgdGhlIG9mZnNldCBpbnRvIDxUVD5zcmNUZXh0PC9U
VD4gdG8gc3RhcnQgbWF0Y2hpbmcKLSAgICogQHBhcmFtIHNyY0xlbmd0aCB0aGUgbnVtYmVyIG9m
IGNoYXJhY3RlcnMgaW4gPFRUPnNyY1RleHQ8L1RUPiB0byBtYXRjaAotICAgKiBAcmV0dXJuIFRS
VUUgaWYgdGhpcyBzdGFydHMgd2l0aCB0aGUgY2hhcmFjdGVycyBpbiA8VFQ+dGV4dDwvVFQ+LAor
ICAgKiBAcGFyYW0gc3JjU3RhcnQgdGhlIG9mZnNldCBpbnRvIGBzcmNUZXh0YCB0byBzdGFydCBt
YXRjaGluZworICAgKiBAcGFyYW0gc3JjTGVuZ3RoIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBp
biBgc3JjVGV4dGAgdG8gbWF0Y2gKKyAgICogQHJldHVybiBUUlVFIGlmIHRoaXMgc3RhcnRzIHdp
dGggdGhlIGNoYXJhY3RlcnMgaW4gYHRleHRgLAogICAgKiBGQUxTRSBvdGhlcndpc2UKICAgICog
QHN0YWJsZSBJQ1UgMi4wCiAgICAqLwpAQCAtODY4LDEwICs4NzEsMTAgQEAgY2xhc3MgVV9DT01N
T05fQVBJIFVuaWNvZGVTdHJpbmcgOiBwdWJsaWMgUmVwbGFjZWFibGUKICAgICAgICAgICAgIGlu
dDMyX3Qgc3JjTGVuZ3RoKSBjb25zdDsKIAogICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIHRoaXMg
c3RhcnRzIHdpdGggdGhlIGNoYXJhY3RlcnMgaW4gPFRUPnNyY0NoYXJzPC9UVD4KKyAgICogRGV0
ZXJtaW5lIGlmIHRoaXMgc3RhcnRzIHdpdGggdGhlIGNoYXJhY3RlcnMgaW4gYHNyY0NoYXJzYAog
ICAgKiBAcGFyYW0gc3JjQ2hhcnMgVGhlIGNoYXJhY3RlcnMgdG8gbWF0Y2guCi0gICAqIEBwYXJh
bSBzcmNMZW5ndGggdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIDxUVD5zcmNDaGFyczwvVFQ+
Ci0gICAqIEByZXR1cm4gVFJVRSBpZiB0aGlzIHN0YXJ0cyB3aXRoIHRoZSBjaGFyYWN0ZXJzIGlu
IDxUVD5zcmNDaGFyczwvVFQ+LAorICAgKiBAcGFyYW0gc3JjTGVuZ3RoIHRoZSBudW1iZXIgb2Yg
Y2hhcmFjdGVycyBpbiBgc3JjQ2hhcnNgCisgICAqIEByZXR1cm4gVFJVRSBpZiB0aGlzIHN0YXJ0
cyB3aXRoIHRoZSBjaGFyYWN0ZXJzIGluIGBzcmNDaGFyc2AsCiAgICAqIEZBTFNFIG90aGVyd2lz
ZQogICAgKiBAc3RhYmxlIElDVSAyLjAKICAgICovCkBAIC04NzksMTIgKzg4MiwxMiBAQCBjbGFz
cyBVX0NPTU1PTl9BUEkgVW5pY29kZVN0cmluZyA6IHB1YmxpYyBSZXBsYWNlYWJsZQogICAgICAg
ICAgICAgaW50MzJfdCBzcmNMZW5ndGgpIGNvbnN0OwogCiAgIC8qKgotICAgKiBEZXRlcm1pbmUg
aWYgdGhpcyBlbmRzIHdpdGggdGhlIGNoYXJhY3RlcnMgaW4gPFRUPnNyY0NoYXJzPC9UVD4KLSAg
ICogaW4gdGhlIHJhbmdlICBbPFRUPnNyY1N0YXJ0PC9UVD4sIDxUVD5zcmNTdGFydCArIHNyY0xl
bmd0aDwvVFQ+KS4KKyAgICogRGV0ZXJtaW5lIGlmIHRoaXMgZW5kcyB3aXRoIHRoZSBjaGFyYWN0
ZXJzIGluIGBzcmNDaGFyc2AKKyAgICogaW4gdGhlIHJhbmdlICBbYHNyY1N0YXJ0YCwgYHNyY1N0
YXJ0ICsgc3JjTGVuZ3RoYCkuCiAgICAqIEBwYXJhbSBzcmNDaGFycyBUaGUgY2hhcmFjdGVycyB0
byBtYXRjaC4KLSAgICogQHBhcmFtIHNyY1N0YXJ0IHRoZSBvZmZzZXQgaW50byA8VFQ+c3JjVGV4
dDwvVFQ+IHRvIHN0YXJ0IG1hdGNoaW5nCi0gICAqIEBwYXJhbSBzcmNMZW5ndGggdGhlIG51bWJl
ciBvZiBjaGFyYWN0ZXJzIGluIDxUVD5zcmNDaGFyczwvVFQ+IHRvIG1hdGNoCi0gICAqIEByZXR1
cm4gVFJVRSBpZiB0aGlzIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBpbiA8VFQ+c3JjQ2hhcnM8
L1RUPiwgRkFMU0Ugb3RoZXJ3aXNlCisgICAqIEBwYXJhbSBzcmNTdGFydCB0aGUgb2Zmc2V0IGlu
dG8gYHNyY1RleHRgIHRvIHN0YXJ0IG1hdGNoaW5nCisgICAqIEBwYXJhbSBzcmNMZW5ndGggdGhl
IG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIGBzcmNDaGFyc2AgdG8gbWF0Y2gKKyAgICogQHJldHVy
biBUUlVFIGlmIHRoaXMgZW5kcyB3aXRoIHRoZSBjaGFyYWN0ZXJzIGluIGBzcmNDaGFyc2AsIEZB
TFNFIG90aGVyd2lzZQogICAgKiBAc3RhYmxlIElDVSAyLjAKICAgICovCiAgIGlubGluZSBVQm9v
bCBzdGFydHNXaXRoKGNvbnN0IGNoYXIxNl90ICpzcmNDaGFycywKQEAgLTg5MiwyMSArODk1LDIx
IEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBVbmljb2RlU3RyaW5nIDogcHVibGljIFJlcGxhY2VhYmxl
CiAgICAgICAgICAgICBpbnQzMl90IHNyY0xlbmd0aCkgY29uc3Q7CiAKICAgLyoqCi0gICAqIERl
dGVybWluZSBpZiB0aGlzIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBpbiA8VFQ+dGV4dDwvVFQ+
CisgICAqIERldGVybWluZSBpZiB0aGlzIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBpbiBgdGV4
dGAKICAgICogQHBhcmFtIHRleHQgVGhlIHRleHQgdG8gbWF0Y2guCi0gICAqIEByZXR1cm4gVFJV
RSBpZiB0aGlzIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBpbiA8VFQ+dGV4dDwvVFQ+LAorICAg
KiBAcmV0dXJuIFRSVUUgaWYgdGhpcyBlbmRzIHdpdGggdGhlIGNoYXJhY3RlcnMgaW4gYHRleHRg
LAogICAgKiBGQUxTRSBvdGhlcndpc2UKICAgICogQHN0YWJsZSBJQ1UgMi4wCiAgICAqLwogICBp
bmxpbmUgVUJvb2wgZW5kc1dpdGgoY29uc3QgVW5pY29kZVN0cmluZyYgdGV4dCkgY29uc3Q7CiAK
ICAgLyoqCi0gICAqIERldGVybWluZSBpZiB0aGlzIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBp
biA8VFQ+c3JjVGV4dDwvVFQ+Ci0gICAqIGluIHRoZSByYW5nZSBbPFRUPnNyY1N0YXJ0PC9UVD4s
IDxUVD5zcmNTdGFydCArIHNyY0xlbmd0aDwvVFQ+KS4KKyAgICogRGV0ZXJtaW5lIGlmIHRoaXMg
ZW5kcyB3aXRoIHRoZSBjaGFyYWN0ZXJzIGluIGBzcmNUZXh0YAorICAgKiBpbiB0aGUgcmFuZ2Ug
W2BzcmNTdGFydGAsIGBzcmNTdGFydCArIHNyY0xlbmd0aGApLgogICAgKiBAcGFyYW0gc3JjVGV4
dCBUaGUgdGV4dCB0byBtYXRjaC4KLSAgICogQHBhcmFtIHNyY1N0YXJ0IHRoZSBvZmZzZXQgaW50
byA8VFQ+c3JjVGV4dDwvVFQ+IHRvIHN0YXJ0IG1hdGNoaW5nCi0gICAqIEBwYXJhbSBzcmNMZW5n
dGggdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIDxUVD5zcmNUZXh0PC9UVD4gdG8gbWF0Y2gK
LSAgICogQHJldHVybiBUUlVFIGlmIHRoaXMgZW5kcyB3aXRoIHRoZSBjaGFyYWN0ZXJzIGluIDxU
VD50ZXh0PC9UVD4sCisgICAqIEBwYXJhbSBzcmNTdGFydCB0aGUgb2Zmc2V0IGludG8gYHNyY1Rl
eHRgIHRvIHN0YXJ0IG1hdGNoaW5nCisgICAqIEBwYXJhbSBzcmNMZW5ndGggdGhlIG51bWJlciBv
ZiBjaGFyYWN0ZXJzIGluIGBzcmNUZXh0YCB0byBtYXRjaAorICAgKiBAcmV0dXJuIFRSVUUgaWYg
dGhpcyBlbmRzIHdpdGggdGhlIGNoYXJhY3RlcnMgaW4gYHRleHRgLAogICAgKiBGQUxTRSBvdGhl
cndpc2UKICAgICogQHN0YWJsZSBJQ1UgMi4wCiAgICAqLwpAQCAtOTE1LDEwICs5MTgsMTAgQEAg
Y2xhc3MgVV9DT01NT05fQVBJIFVuaWNvZGVTdHJpbmcgOiBwdWJsaWMgUmVwbGFjZWFibGUKICAg
ICAgICAgICBpbnQzMl90IHNyY0xlbmd0aCkgY29uc3Q7CiAKICAgLyoqCi0gICAqIERldGVybWlu
ZSBpZiB0aGlzIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBpbiA8VFQ+c3JjQ2hhcnM8L1RUPgor
ICAgKiBEZXRlcm1pbmUgaWYgdGhpcyBlbmRzIHdpdGggdGhlIGNoYXJhY3RlcnMgaW4gYHNyY0No
YXJzYAogICAgKiBAcGFyYW0gc3JjQ2hhcnMgVGhlIGNoYXJhY3RlcnMgdG8gbWF0Y2guCi0gICAq
IEBwYXJhbSBzcmNMZW5ndGggdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIDxUVD5zcmNDaGFy
czwvVFQ+Ci0gICAqIEByZXR1cm4gVFJVRSBpZiB0aGlzIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVy
cyBpbiA8VFQ+c3JjQ2hhcnM8L1RUPiwKKyAgICogQHBhcmFtIHNyY0xlbmd0aCB0aGUgbnVtYmVy
IG9mIGNoYXJhY3RlcnMgaW4gYHNyY0NoYXJzYAorICAgKiBAcmV0dXJuIFRSVUUgaWYgdGhpcyBl
bmRzIHdpdGggdGhlIGNoYXJhY3RlcnMgaW4gYHNyY0NoYXJzYCwKICAgICogRkFMU0Ugb3RoZXJ3
aXNlCiAgICAqIEBzdGFibGUgSUNVIDIuMAogICAgKi8KQEAgLTkyNiwxMiArOTI5LDEyIEBAIGNs
YXNzIFVfQ09NTU9OX0FQSSBVbmljb2RlU3RyaW5nIDogcHVibGljIFJlcGxhY2VhYmxlCiAgICAg
ICAgICAgaW50MzJfdCBzcmNMZW5ndGgpIGNvbnN0OwogCiAgIC8qKgotICAgKiBEZXRlcm1pbmUg
aWYgdGhpcyBlbmRzIHdpdGggdGhlIGNoYXJhY3RlcnMgaW4gPFRUPnNyY0NoYXJzPC9UVD4KLSAg
ICogaW4gdGhlIHJhbmdlICBbPFRUPnNyY1N0YXJ0PC9UVD4sIDxUVD5zcmNTdGFydCArIHNyY0xl
bmd0aDwvVFQ+KS4KKyAgICogRGV0ZXJtaW5lIGlmIHRoaXMgZW5kcyB3aXRoIHRoZSBjaGFyYWN0
ZXJzIGluIGBzcmNDaGFyc2AKKyAgICogaW4gdGhlIHJhbmdlICBbYHNyY1N0YXJ0YCwgYHNyY1N0
YXJ0ICsgc3JjTGVuZ3RoYCkuCiAgICAqIEBwYXJhbSBzcmNDaGFycyBUaGUgY2hhcmFjdGVycyB0
byBtYXRjaC4KLSAgICogQHBhcmFtIHNyY1N0YXJ0IHRoZSBvZmZzZXQgaW50byA8VFQ+c3JjVGV4
dDwvVFQ+IHRvIHN0YXJ0IG1hdGNoaW5nCi0gICAqIEBwYXJhbSBzcmNMZW5ndGggdGhlIG51bWJl
ciBvZiBjaGFyYWN0ZXJzIGluIDxUVD5zcmNDaGFyczwvVFQ+IHRvIG1hdGNoCi0gICAqIEByZXR1
cm4gVFJVRSBpZiB0aGlzIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBpbiA8VFQ+c3JjQ2hhcnM8
L1RUPiwKKyAgICogQHBhcmFtIHNyY1N0YXJ0IHRoZSBvZmZzZXQgaW50byBgc3JjVGV4dGAgdG8g
c3RhcnQgbWF0Y2hpbmcKKyAgICogQHBhcmFtIHNyY0xlbmd0aCB0aGUgbnVtYmVyIG9mIGNoYXJh
Y3RlcnMgaW4gYHNyY0NoYXJzYCB0byBtYXRjaAorICAgKiBAcmV0dXJuIFRSVUUgaWYgdGhpcyBl
bmRzIHdpdGggdGhlIGNoYXJhY3RlcnMgaW4gYHNyY0NoYXJzYCwKICAgICogRkFMU0Ugb3RoZXJ3
aXNlCiAgICAqIEBzdGFibGUgSUNVIDIuMAogICAgKi8KQEAgLTk0MywyMSArOTQ2LDIxIEBAIGNs
YXNzIFVfQ09NTU9OX0FQSSBVbmljb2RlU3RyaW5nIDogcHVibGljIFJlcGxhY2VhYmxlCiAgIC8q
IFNlYXJjaGluZyAtIGJpdHdpc2Ugb25seSAqLwogCiAgIC8qKgotICAgKiBMb2NhdGUgaW4gdGhp
cyB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgY2hhcmFjdGVycyBpbiA8VFQ+dGV4dDwvVFQ+
LAorICAgKiBMb2NhdGUgaW4gdGhpcyB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgY2hhcmFj
dGVycyBpbiBgdGV4dGAsCiAgICAqIHVzaW5nIGJpdHdpc2UgY29tcGFyaXNvbi4KICAgICogQHBh
cmFtIHRleHQgVGhlIHRleHQgdG8gc2VhcmNoIGZvci4KLSAgICogQHJldHVybiBUaGUgb2Zmc2V0
IGludG8gdGhpcyBvZiB0aGUgc3RhcnQgb2YgPFRUPnRleHQ8L1RUPiwKKyAgICogQHJldHVybiBU
aGUgb2Zmc2V0IGludG8gdGhpcyBvZiB0aGUgc3RhcnQgb2YgYHRleHRgLAogICAgKiBvciAtMSBp
ZiBub3QgZm91bmQuCiAgICAqIEBzdGFibGUgSUNVIDIuMAogICAgKi8KICAgaW5saW5lIGludDMy
X3QgaW5kZXhPZihjb25zdCBVbmljb2RlU3RyaW5nJiB0ZXh0KSBjb25zdDsKIAogICAvKioKLSAg
ICogTG9jYXRlIGluIHRoaXMgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIGNoYXJhY3RlcnMg
aW4gPFRUPnRleHQ8L1RUPgotICAgKiBzdGFydGluZyBhdCBvZmZzZXQgPFRUPnN0YXJ0PC9UVD4s
IHVzaW5nIGJpdHdpc2UgY29tcGFyaXNvbi4KKyAgICogTG9jYXRlIGluIHRoaXMgdGhlIGZpcnN0
IG9jY3VycmVuY2Ugb2YgdGhlIGNoYXJhY3RlcnMgaW4gYHRleHRgCisgICAqIHN0YXJ0aW5nIGF0
IG9mZnNldCBgc3RhcnRgLCB1c2luZyBiaXR3aXNlIGNvbXBhcmlzb24uCiAgICAqIEBwYXJhbSB0
ZXh0IFRoZSB0ZXh0IHRvIHNlYXJjaCBmb3IuCiAgICAqIEBwYXJhbSBzdGFydCBUaGUgb2Zmc2V0
IGF0IHdoaWNoIHNlYXJjaGluZyB3aWxsIHN0YXJ0LgotICAgKiBAcmV0dXJuIFRoZSBvZmZzZXQg
aW50byB0aGlzIG9mIHRoZSBzdGFydCBvZiA8VFQ+dGV4dDwvVFQ+LAorICAgKiBAcmV0dXJuIFRo
ZSBvZmZzZXQgaW50byB0aGlzIG9mIHRoZSBzdGFydCBvZiBgdGV4dGAsCiAgICAqIG9yIC0xIGlm
IG5vdCBmb3VuZC4KICAgICogQHN0YWJsZSBJQ1UgMi4wCiAgICAqLwpAQCAtOTY2LDEyICs5Njks
MTIgQEAgY2xhc3MgVV9DT01NT05fQVBJIFVuaWNvZGVTdHJpbmcgOiBwdWJsaWMgUmVwbGFjZWFi
bGUKIAogICAvKioKICAgICogTG9jYXRlIGluIHRoaXMgdGhlIGZpcnN0IG9jY3VycmVuY2UgaW4g
dGhlIHJhbmdlCi0gICAqIFs8VFQ+c3RhcnQ8L1RUPiwgPFRUPnN0YXJ0ICsgbGVuZ3RoPC9UVD4p
IG9mIHRoZSBjaGFyYWN0ZXJzCi0gICAqIGluIDxUVD50ZXh0PC9UVD4sIHVzaW5nIGJpdHdpc2Ug
Y29tcGFyaXNvbi4KKyAgICogW2BzdGFydGAsIGBzdGFydCArIGxlbmd0aGApIG9mIHRoZSBjaGFy
YWN0ZXJzCisgICAqIGluIGB0ZXh0YCwgdXNpbmcgYml0d2lzZSBjb21wYXJpc29uLgogICAgKiBA
cGFyYW0gdGV4dCBUaGUgdGV4dCB0byBzZWFyY2ggZm9yLgogICAgKiBAcGFyYW0gc3RhcnQgVGhl
IG9mZnNldCBhdCB3aGljaCBzZWFyY2hpbmcgd2lsbCBzdGFydC4KICAgICogQHBhcmFtIGxlbmd0
aCBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gc2VhcmNoCi0gICAqIEByZXR1cm4gVGhlIG9m
ZnNldCBpbnRvIHRoaXMgb2YgdGhlIHN0YXJ0IG9mIDxUVD50ZXh0PC9UVD4sCisgICAqIEByZXR1
cm4gVGhlIG9mZnNldCBpbnRvIHRoaXMgb2YgdGhlIHN0YXJ0IG9mIGB0ZXh0YCwKICAgICogb3Ig
LTEgaWYgbm90IGZvdW5kLgogICAgKiBAc3RhYmxlIElDVSAyLjAKICAgICovCkBAIC05ODEsMTcg
Kzk4NCwxNyBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgVW5pY29kZVN0cmluZyA6IHB1YmxpYyBSZXBs
YWNlYWJsZQogCiAgIC8qKgogICAgKiBMb2NhdGUgaW4gdGhpcyB0aGUgZmlyc3Qgb2NjdXJyZW5j
ZSBpbiB0aGUgcmFuZ2UKLSAgICogWzxUVD5zdGFydDwvVFQ+LCA8VFQ+c3RhcnQgKyBsZW5ndGg8
L1RUPikgb2YgdGhlIGNoYXJhY3RlcnMKLSAgICogIGluIDxUVD5zcmNUZXh0PC9UVD4gaW4gdGhl
IHJhbmdlCi0gICAqIFs8VFQ+c3JjU3RhcnQ8L1RUPiwgPFRUPnNyY1N0YXJ0ICsgc3JjTGVuZ3Ro
PC9UVD4pLAorICAgKiBbYHN0YXJ0YCwgYHN0YXJ0ICsgbGVuZ3RoYCkgb2YgdGhlIGNoYXJhY3Rl
cnMKKyAgICogIGluIGBzcmNUZXh0YCBpbiB0aGUgcmFuZ2UKKyAgICogW2BzcmNTdGFydGAsIGBz
cmNTdGFydCArIHNyY0xlbmd0aGApLAogICAgKiB1c2luZyBiaXR3aXNlIGNvbXBhcmlzb24uCiAg
ICAqIEBwYXJhbSBzcmNUZXh0IFRoZSB0ZXh0IHRvIHNlYXJjaCBmb3IuCi0gICAqIEBwYXJhbSBz
cmNTdGFydCB0aGUgb2Zmc2V0IGludG8gPFRUPnNyY1RleHQ8L1RUPiBhdCB3aGljaAorICAgKiBA
cGFyYW0gc3JjU3RhcnQgdGhlIG9mZnNldCBpbnRvIGBzcmNUZXh0YCBhdCB3aGljaAogICAgKiB0
byBzdGFydCBtYXRjaGluZwotICAgKiBAcGFyYW0gc3JjTGVuZ3RoIHRoZSBudW1iZXIgb2YgY2hh
cmFjdGVycyBpbiA8VFQ+c3JjVGV4dDwvVFQ+IHRvIG1hdGNoCisgICAqIEBwYXJhbSBzcmNMZW5n
dGggdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIGBzcmNUZXh0YCB0byBtYXRjaAogICAgKiBA
cGFyYW0gc3RhcnQgdGhlIG9mZnNldCBpbnRvIHRoaXMgYXQgd2hpY2ggdG8gc3RhcnQgbWF0Y2hp
bmcKICAgICogQHBhcmFtIGxlbmd0aCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdGhpcyB0
byBzZWFyY2gKLSAgICogQHJldHVybiBUaGUgb2Zmc2V0IGludG8gdGhpcyBvZiB0aGUgc3RhcnQg
b2YgPFRUPnRleHQ8L1RUPiwKKyAgICogQHJldHVybiBUaGUgb2Zmc2V0IGludG8gdGhpcyBvZiB0
aGUgc3RhcnQgb2YgYHRleHRgLAogICAgKiBvciAtMSBpZiBub3QgZm91bmQuCiAgICAqIEBzdGFi
bGUgSUNVIDIuMAogICAgKi8KQEAgLTEwMDMsMTIgKzEwMDYsMTIgQEAgY2xhc3MgVV9DT01NT05f
QVBJIFVuaWNvZGVTdHJpbmcgOiBwdWJsaWMgUmVwbGFjZWFibGUKIAogICAvKioKICAgICogTG9j
YXRlIGluIHRoaXMgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIGNoYXJhY3RlcnMgaW4KLSAg
ICogPFRUPnNyY0NoYXJzPC9UVD4KLSAgICogc3RhcnRpbmcgYXQgb2Zmc2V0IDxUVD5zdGFydDwv
VFQ+LCB1c2luZyBiaXR3aXNlIGNvbXBhcmlzb24uCisgICAqIGBzcmNDaGFyc2AKKyAgICogc3Rh
cnRpbmcgYXQgb2Zmc2V0IGBzdGFydGAsIHVzaW5nIGJpdHdpc2UgY29tcGFyaXNvbi4KICAgICog
QHBhcmFtIHNyY0NoYXJzIFRoZSB0ZXh0IHRvIHNlYXJjaCBmb3IuCi0gICAqIEBwYXJhbSBzcmNM
ZW5ndGggdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIDxUVD5zcmNDaGFyczwvVFQ+IHRvIG1h
dGNoCisgICAqIEBwYXJhbSBzcmNMZW5ndGggdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIGBz
cmNDaGFyc2AgdG8gbWF0Y2gKICAgICogQHBhcmFtIHN0YXJ0IHRoZSBvZmZzZXQgaW50byB0aGlz
IGF0IHdoaWNoIHRvIHN0YXJ0IG1hdGNoaW5nCi0gICAqIEByZXR1cm4gVGhlIG9mZnNldCBpbnRv
IHRoaXMgb2YgdGhlIHN0YXJ0IG9mIDxUVD50ZXh0PC9UVD4sCisgICAqIEByZXR1cm4gVGhlIG9m
ZnNldCBpbnRvIHRoaXMgb2YgdGhlIHN0YXJ0IG9mIGB0ZXh0YCwKICAgICogb3IgLTEgaWYgbm90
IGZvdW5kLgogICAgKiBAc3RhYmxlIElDVSAyLjAKICAgICovCkBAIC0xMDE4LDEzICsxMDIxLDEz
IEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBVbmljb2RlU3RyaW5nIDogcHVibGljIFJlcGxhY2VhYmxl
CiAKICAgLyoqCiAgICAqIExvY2F0ZSBpbiB0aGlzIHRoZSBmaXJzdCBvY2N1cnJlbmNlIGluIHRo
ZSByYW5nZQotICAgKiBbPFRUPnN0YXJ0PC9UVD4sIDxUVD5zdGFydCArIGxlbmd0aDwvVFQ+KSBv
ZiB0aGUgY2hhcmFjdGVycwotICAgKiBpbiA8VFQ+c3JjQ2hhcnM8L1RUPiwgdXNpbmcgYml0d2lz
ZSBjb21wYXJpc29uLgorICAgKiBbYHN0YXJ0YCwgYHN0YXJ0ICsgbGVuZ3RoYCkgb2YgdGhlIGNo
YXJhY3RlcnMKKyAgICogaW4gYHNyY0NoYXJzYCwgdXNpbmcgYml0d2lzZSBjb21wYXJpc29uLgog
ICAgKiBAcGFyYW0gc3JjQ2hhcnMgVGhlIHRleHQgdG8gc2VhcmNoIGZvci4KLSAgICogQHBhcmFt
IHNyY0xlbmd0aCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gPFRUPnNyY0NoYXJzPC9UVD4K
KyAgICogQHBhcmFtIHNyY0xlbmd0aCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gYHNyY0No
YXJzYAogICAgKiBAcGFyYW0gc3RhcnQgVGhlIG9mZnNldCBhdCB3aGljaCBzZWFyY2hpbmcgd2ls
bCBzdGFydC4KICAgICogQHBhcmFtIGxlbmd0aCBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8g
c2VhcmNoCi0gICAqIEByZXR1cm4gVGhlIG9mZnNldCBpbnRvIHRoaXMgb2YgdGhlIHN0YXJ0IG9m
IDxUVD5zcmNDaGFyczwvVFQ+LAorICAgKiBAcmV0dXJuIFRoZSBvZmZzZXQgaW50byB0aGlzIG9m
IHRoZSBzdGFydCBvZiBgc3JjQ2hhcnNgLAogICAgKiBvciAtMSBpZiBub3QgZm91bmQuCiAgICAq
IEBzdGFibGUgSUNVIDIuMAogICAgKi8KQEAgLTEwMzUsMTcgKzEwMzgsMTcgQEAgY2xhc3MgVV9D
T01NT05fQVBJIFVuaWNvZGVTdHJpbmcgOiBwdWJsaWMgUmVwbGFjZWFibGUKIAogICAvKioKICAg
ICogTG9jYXRlIGluIHRoaXMgdGhlIGZpcnN0IG9jY3VycmVuY2UgaW4gdGhlIHJhbmdlCi0gICAq
IFs8VFQ+c3RhcnQ8L1RUPiwgPFRUPnN0YXJ0ICsgbGVuZ3RoPC9UVD4pIG9mIHRoZSBjaGFyYWN0
ZXJzCi0gICAqIGluIDxUVD5zcmNDaGFyczwvVFQ+IGluIHRoZSByYW5nZQotICAgKiBbPFRUPnNy
Y1N0YXJ0PC9UVD4sIDxUVD5zcmNTdGFydCArIHNyY0xlbmd0aDwvVFQ+KSwKKyAgICogW2BzdGFy
dGAsIGBzdGFydCArIGxlbmd0aGApIG9mIHRoZSBjaGFyYWN0ZXJzCisgICAqIGluIGBzcmNDaGFy
c2AgaW4gdGhlIHJhbmdlCisgICAqIFtgc3JjU3RhcnRgLCBgc3JjU3RhcnQgKyBzcmNMZW5ndGhg
KSwKICAgICogdXNpbmcgYml0d2lzZSBjb21wYXJpc29uLgogICAgKiBAcGFyYW0gc3JjQ2hhcnMg
VGhlIHRleHQgdG8gc2VhcmNoIGZvci4KLSAgICogQHBhcmFtIHNyY1N0YXJ0IHRoZSBvZmZzZXQg
aW50byA8VFQ+c3JjQ2hhcnM8L1RUPiBhdCB3aGljaAorICAgKiBAcGFyYW0gc3JjU3RhcnQgdGhl
IG9mZnNldCBpbnRvIGBzcmNDaGFyc2AgYXQgd2hpY2gKICAgICogdG8gc3RhcnQgbWF0Y2hpbmcK
LSAgICogQHBhcmFtIHNyY0xlbmd0aCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gPFRUPnNy
Y0NoYXJzPC9UVD4gdG8gbWF0Y2gKKyAgICogQHBhcmFtIHNyY0xlbmd0aCB0aGUgbnVtYmVyIG9m
IGNoYXJhY3RlcnMgaW4gYHNyY0NoYXJzYCB0byBtYXRjaAogICAgKiBAcGFyYW0gc3RhcnQgdGhl
IG9mZnNldCBpbnRvIHRoaXMgYXQgd2hpY2ggdG8gc3RhcnQgbWF0Y2hpbmcKICAgICogQHBhcmFt
IGxlbmd0aCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdGhpcyB0byBzZWFyY2gKLSAgICog
QHJldHVybiBUaGUgb2Zmc2V0IGludG8gdGhpcyBvZiB0aGUgc3RhcnQgb2YgPFRUPnRleHQ8L1RU
PiwKKyAgICogQHJldHVybiBUaGUgb2Zmc2V0IGludG8gdGhpcyBvZiB0aGUgc3RhcnQgb2YgYHRl
eHRgLAogICAgKiBvciAtMSBpZiBub3QgZm91bmQuCiAgICAqIEBzdGFibGUgSUNVIDIuMAogICAg
Ki8KQEAgLTEwNTYsNTUgKzEwNTksNTUgQEAgY2xhc3MgVV9DT01NT05fQVBJIFVuaWNvZGVTdHJp
bmcgOiBwdWJsaWMgUmVwbGFjZWFibGUKICAgICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgpIGNv
bnN0OwogCiAgIC8qKgotICAgKiBMb2NhdGUgaW4gdGhpcyB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBv
ZiB0aGUgQk1QIGNvZGUgcG9pbnQgPGNvZGU+YzwvY29kZT4sCisgICAqIExvY2F0ZSBpbiB0aGlz
IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBCTVAgY29kZSBwb2ludCBgY2AsCiAgICAqIHVz
aW5nIGJpdHdpc2UgY29tcGFyaXNvbi4KICAgICogQHBhcmFtIGMgVGhlIGNvZGUgdW5pdCB0byBz
ZWFyY2ggZm9yLgotICAgKiBAcmV0dXJuIFRoZSBvZmZzZXQgaW50byB0aGlzIG9mIDxUVD5jPC9U
VD4sIG9yIC0xIGlmIG5vdCBmb3VuZC4KKyAgICogQHJldHVybiBUaGUgb2Zmc2V0IGludG8gdGhp
cyBvZiBgY2AsIG9yIC0xIGlmIG5vdCBmb3VuZC4KICAgICogQHN0YWJsZSBJQ1UgMi4wCiAgICAq
LwogICBpbmxpbmUgaW50MzJfdCBpbmRleE9mKGNoYXIxNl90IGMpIGNvbnN0OwogCiAgIC8qKgot
ICAgKiBMb2NhdGUgaW4gdGhpcyB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgY29kZSBwb2lu
dCA8VFQ+YzwvVFQ+LAorICAgKiBMb2NhdGUgaW4gdGhpcyB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBv
ZiB0aGUgY29kZSBwb2ludCBgY2AsCiAgICAqIHVzaW5nIGJpdHdpc2UgY29tcGFyaXNvbi4KICAg
ICoKICAgICogQHBhcmFtIGMgVGhlIGNvZGUgcG9pbnQgdG8gc2VhcmNoIGZvci4KLSAgICogQHJl
dHVybiBUaGUgb2Zmc2V0IGludG8gdGhpcyBvZiA8VFQ+YzwvVFQ+LCBvciAtMSBpZiBub3QgZm91
bmQuCisgICAqIEByZXR1cm4gVGhlIG9mZnNldCBpbnRvIHRoaXMgb2YgYGNgLCBvciAtMSBpZiBu
b3QgZm91bmQuCiAgICAqIEBzdGFibGUgSUNVIDIuMAogICAgKi8KICAgaW5saW5lIGludDMyX3Qg
aW5kZXhPZihVQ2hhcjMyIGMpIGNvbnN0OwogCiAgIC8qKgotICAgKiBMb2NhdGUgaW4gdGhpcyB0
aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgQk1QIGNvZGUgcG9pbnQgPGNvZGU+YzwvY29kZT4s
Ci0gICAqIHN0YXJ0aW5nIGF0IG9mZnNldCA8VFQ+c3RhcnQ8L1RUPiwgdXNpbmcgYml0d2lzZSBj
b21wYXJpc29uLgorICAgKiBMb2NhdGUgaW4gdGhpcyB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0
aGUgQk1QIGNvZGUgcG9pbnQgYGNgLAorICAgKiBzdGFydGluZyBhdCBvZmZzZXQgYHN0YXJ0YCwg
dXNpbmcgYml0d2lzZSBjb21wYXJpc29uLgogICAgKiBAcGFyYW0gYyBUaGUgY29kZSB1bml0IHRv
IHNlYXJjaCBmb3IuCiAgICAqIEBwYXJhbSBzdGFydCBUaGUgb2Zmc2V0IGF0IHdoaWNoIHNlYXJj
aGluZyB3aWxsIHN0YXJ0LgotICAgKiBAcmV0dXJuIFRoZSBvZmZzZXQgaW50byB0aGlzIG9mIDxU
VD5jPC9UVD4sIG9yIC0xIGlmIG5vdCBmb3VuZC4KKyAgICogQHJldHVybiBUaGUgb2Zmc2V0IGlu
dG8gdGhpcyBvZiBgY2AsIG9yIC0xIGlmIG5vdCBmb3VuZC4KICAgICogQHN0YWJsZSBJQ1UgMi4w
CiAgICAqLwogICBpbmxpbmUgaW50MzJfdCBpbmRleE9mKGNoYXIxNl90IGMsCiAgICAgICAgICAg
ICAgIGludDMyX3Qgc3RhcnQpIGNvbnN0OwogCiAgIC8qKgotICAgKiBMb2NhdGUgaW4gdGhpcyB0
aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgY29kZSBwb2ludCA8VFQ+YzwvVFQ+Ci0gICAqIHN0
YXJ0aW5nIGF0IG9mZnNldCA8VFQ+c3RhcnQ8L1RUPiwgdXNpbmcgYml0d2lzZSBjb21wYXJpc29u
LgorICAgKiBMb2NhdGUgaW4gdGhpcyB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgY29kZSBw
b2ludCBgY2AKKyAgICogc3RhcnRpbmcgYXQgb2Zmc2V0IGBzdGFydGAsIHVzaW5nIGJpdHdpc2Ug
Y29tcGFyaXNvbi4KICAgICoKICAgICogQHBhcmFtIGMgVGhlIGNvZGUgcG9pbnQgdG8gc2VhcmNo
IGZvci4KICAgICogQHBhcmFtIHN0YXJ0IFRoZSBvZmZzZXQgYXQgd2hpY2ggc2VhcmNoaW5nIHdp
bGwgc3RhcnQuCi0gICAqIEByZXR1cm4gVGhlIG9mZnNldCBpbnRvIHRoaXMgb2YgPFRUPmM8L1RU
Piwgb3IgLTEgaWYgbm90IGZvdW5kLgorICAgKiBAcmV0dXJuIFRoZSBvZmZzZXQgaW50byB0aGlz
IG9mIGBjYCwgb3IgLTEgaWYgbm90IGZvdW5kLgogICAgKiBAc3RhYmxlIElDVSAyLjAKICAgICov
CiAgIGlubGluZSBpbnQzMl90IGluZGV4T2YoVUNoYXIzMiBjLAogICAgICAgICAgICAgICBpbnQz
Ml90IHN0YXJ0KSBjb25zdDsKIAogICAvKioKLSAgICogTG9jYXRlIGluIHRoaXMgdGhlIGZpcnN0
IG9jY3VycmVuY2Ugb2YgdGhlIEJNUCBjb2RlIHBvaW50IDxjb2RlPmM8L2NvZGU+Ci0gICAqIGlu
IHRoZSByYW5nZSBbPFRUPnN0YXJ0PC9UVD4sIDxUVD5zdGFydCArIGxlbmd0aDwvVFQ+KSwKKyAg
ICogTG9jYXRlIGluIHRoaXMgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIEJNUCBjb2RlIHBv
aW50IGBjYAorICAgKiBpbiB0aGUgcmFuZ2UgW2BzdGFydGAsIGBzdGFydCArIGxlbmd0aGApLAog
ICAgKiB1c2luZyBiaXR3aXNlIGNvbXBhcmlzb24uCiAgICAqIEBwYXJhbSBjIFRoZSBjb2RlIHVu
aXQgdG8gc2VhcmNoIGZvci4KICAgICogQHBhcmFtIHN0YXJ0IHRoZSBvZmZzZXQgaW50byB0aGlz
IGF0IHdoaWNoIHRvIHN0YXJ0IG1hdGNoaW5nCiAgICAqIEBwYXJhbSBsZW5ndGggdGhlIG51bWJl
ciBvZiBjaGFyYWN0ZXJzIGluIHRoaXMgdG8gc2VhcmNoCi0gICAqIEByZXR1cm4gVGhlIG9mZnNl
dCBpbnRvIHRoaXMgb2YgPFRUPmM8L1RUPiwgb3IgLTEgaWYgbm90IGZvdW5kLgorICAgKiBAcmV0
dXJuIFRoZSBvZmZzZXQgaW50byB0aGlzIG9mIGBjYCwgb3IgLTEgaWYgbm90IGZvdW5kLgogICAg
KiBAc3RhYmxlIElDVSAyLjAKICAgICovCiAgIGlubGluZSBpbnQzMl90IGluZGV4T2YoY2hhcjE2
X3QgYywKQEAgLTExMTIsMTQgKzExMTUsMTQgQEAgY2xhc3MgVV9DT01NT05fQVBJIFVuaWNvZGVT
dHJpbmcgOiBwdWJsaWMgUmVwbGFjZWFibGUKICAgICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgp
IGNvbnN0OwogCiAgIC8qKgotICAgKiBMb2NhdGUgaW4gdGhpcyB0aGUgZmlyc3Qgb2NjdXJyZW5j
ZSBvZiB0aGUgY29kZSBwb2ludCA8VFQ+YzwvVFQ+Ci0gICAqIGluIHRoZSByYW5nZSBbPFRUPnN0
YXJ0PC9UVD4sIDxUVD5zdGFydCArIGxlbmd0aDwvVFQ+KSwKKyAgICogTG9jYXRlIGluIHRoaXMg
dGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIGNvZGUgcG9pbnQgYGNgCisgICAqIGluIHRoZSBy
YW5nZSBbYHN0YXJ0YCwgYHN0YXJ0ICsgbGVuZ3RoYCksCiAgICAqIHVzaW5nIGJpdHdpc2UgY29t
cGFyaXNvbi4KICAgICoKICAgICogQHBhcmFtIGMgVGhlIGNvZGUgcG9pbnQgdG8gc2VhcmNoIGZv
ci4KICAgICogQHBhcmFtIHN0YXJ0IHRoZSBvZmZzZXQgaW50byB0aGlzIGF0IHdoaWNoIHRvIHN0
YXJ0IG1hdGNoaW5nCiAgICAqIEBwYXJhbSBsZW5ndGggdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJz
IGluIHRoaXMgdG8gc2VhcmNoCi0gICAqIEByZXR1cm4gVGhlIG9mZnNldCBpbnRvIHRoaXMgb2Yg
PFRUPmM8L1RUPiwgb3IgLTEgaWYgbm90IGZvdW5kLgorICAgKiBAcmV0dXJuIFRoZSBvZmZzZXQg
aW50byB0aGlzIG9mIGBjYCwgb3IgLTEgaWYgbm90IGZvdW5kLgogICAgKiBAc3RhYmxlIElDVSAy
LjAKICAgICovCiAgIGlubGluZSBpbnQzMl90IGluZGV4T2YoVUNoYXIzMiBjLApAQCAtMTEyNywy
MSArMTEzMCwyMSBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgVW5pY29kZVN0cmluZyA6IHB1YmxpYyBS
ZXBsYWNlYWJsZQogICAgICAgICAgICAgICBpbnQzMl90IGxlbmd0aCkgY29uc3Q7CiAKICAgLyoq
Ci0gICAqIExvY2F0ZSBpbiB0aGlzIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgdGhlIGNoYXJhY3Rl
cnMgaW4gPFRUPnRleHQ8L1RUPiwKKyAgICogTG9jYXRlIGluIHRoaXMgdGhlIGxhc3Qgb2NjdXJy
ZW5jZSBvZiB0aGUgY2hhcmFjdGVycyBpbiBgdGV4dGAsCiAgICAqIHVzaW5nIGJpdHdpc2UgY29t
cGFyaXNvbi4KICAgICogQHBhcmFtIHRleHQgVGhlIHRleHQgdG8gc2VhcmNoIGZvci4KLSAgICog
QHJldHVybiBUaGUgb2Zmc2V0IGludG8gdGhpcyBvZiB0aGUgc3RhcnQgb2YgPFRUPnRleHQ8L1RU
PiwKKyAgICogQHJldHVybiBUaGUgb2Zmc2V0IGludG8gdGhpcyBvZiB0aGUgc3RhcnQgb2YgYHRl
eHRgLAogICAgKiBvciAtMSBpZiBub3QgZm91bmQuCiAgICAqIEBzdGFibGUgSUNVIDIuMAogICAg
Ki8KICAgaW5saW5lIGludDMyX3QgbGFzdEluZGV4T2YoY29uc3QgVW5pY29kZVN0cmluZyYgdGV4
dCkgY29uc3Q7CiAKICAgLyoqCi0gICAqIExvY2F0ZSBpbiB0aGlzIHRoZSBsYXN0IG9jY3VycmVu
Y2Ugb2YgdGhlIGNoYXJhY3RlcnMgaW4gPFRUPnRleHQ8L1RUPgotICAgKiBzdGFydGluZyBhdCBv
ZmZzZXQgPFRUPnN0YXJ0PC9UVD4sIHVzaW5nIGJpdHdpc2UgY29tcGFyaXNvbi4KKyAgICogTG9j
YXRlIGluIHRoaXMgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiB0aGUgY2hhcmFjdGVycyBpbiBgdGV4
dGAKKyAgICogc3RhcnRpbmcgYXQgb2Zmc2V0IGBzdGFydGAsIHVzaW5nIGJpdHdpc2UgY29tcGFy
aXNvbi4KICAgICogQHBhcmFtIHRleHQgVGhlIHRleHQgdG8gc2VhcmNoIGZvci4KICAgICogQHBh
cmFtIHN0YXJ0IFRoZSBvZmZzZXQgYXQgd2hpY2ggc2VhcmNoaW5nIHdpbGwgc3RhcnQuCi0gICAq
IEByZXR1cm4gVGhlIG9mZnNldCBpbnRvIHRoaXMgb2YgdGhlIHN0YXJ0IG9mIDxUVD50ZXh0PC9U
VD4sCisgICAqIEByZXR1cm4gVGhlIG9mZnNldCBpbnRvIHRoaXMgb2YgdGhlIHN0YXJ0IG9mIGB0
ZXh0YCwKICAgICogb3IgLTEgaWYgbm90IGZvdW5kLgogICAgKiBAc3RhYmxlIElDVSAyLjAKICAg
ICovCkBAIC0xMTUwLDEyICsxMTUzLDEyIEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBVbmljb2RlU3Ry
aW5nIDogcHVibGljIFJlcGxhY2VhYmxlCiAKICAgLyoqCiAgICAqIExvY2F0ZSBpbiB0aGlzIHRo
ZSBsYXN0IG9jY3VycmVuY2UgaW4gdGhlIHJhbmdlCi0gICAqIFs8VFQ+c3RhcnQ8L1RUPiwgPFRU
PnN0YXJ0ICsgbGVuZ3RoPC9UVD4pIG9mIHRoZSBjaGFyYWN0ZXJzCi0gICAqIGluIDxUVD50ZXh0
PC9UVD4sIHVzaW5nIGJpdHdpc2UgY29tcGFyaXNvbi4KKyAgICogW2BzdGFydGAsIGBzdGFydCAr
IGxlbmd0aGApIG9mIHRoZSBjaGFyYWN0ZXJzCisgICAqIGluIGB0ZXh0YCwgdXNpbmcgYml0d2lz
ZSBjb21wYXJpc29uLgogICAgKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBzZWFyY2ggZm9yLgog
ICAgKiBAcGFyYW0gc3RhcnQgVGhlIG9mZnNldCBhdCB3aGljaCBzZWFyY2hpbmcgd2lsbCBzdGFy
dC4KICAgICogQHBhcmFtIGxlbmd0aCBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gc2VhcmNo
Ci0gICAqIEByZXR1cm4gVGhlIG9mZnNldCBpbnRvIHRoaXMgb2YgdGhlIHN0YXJ0IG9mIDxUVD50
ZXh0PC9UVD4sCisgICAqIEByZXR1cm4gVGhlIG9mZnNldCBpbnRvIHRoaXMgb2YgdGhlIHN0YXJ0
IG9mIGB0ZXh0YCwKICAgICogb3IgLTEgaWYgbm90IGZvdW5kLgogICAgKiBAc3RhYmxlIElDVSAy
LjAKICAgICovCkBAIC0xMTY1LDE3ICsxMTY4LDE3IEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBVbmlj
b2RlU3RyaW5nIDogcHVibGljIFJlcGxhY2VhYmxlCiAKICAgLyoqCiAgICAqIExvY2F0ZSBpbiB0
aGlzIHRoZSBsYXN0IG9jY3VycmVuY2UgaW4gdGhlIHJhbmdlCi0gICAqIFs8VFQ+c3RhcnQ8L1RU
PiwgPFRUPnN0YXJ0ICsgbGVuZ3RoPC9UVD4pIG9mIHRoZSBjaGFyYWN0ZXJzCi0gICAqIGluIDxU
VD5zcmNUZXh0PC9UVD4gaW4gdGhlIHJhbmdlCi0gICAqIFs8VFQ+c3JjU3RhcnQ8L1RUPiwgPFRU
PnNyY1N0YXJ0ICsgc3JjTGVuZ3RoPC9UVD4pLAorICAgKiBbYHN0YXJ0YCwgYHN0YXJ0ICsgbGVu
Z3RoYCkgb2YgdGhlIGNoYXJhY3RlcnMKKyAgICogaW4gYHNyY1RleHRgIGluIHRoZSByYW5nZQor
ICAgKiBbYHNyY1N0YXJ0YCwgYHNyY1N0YXJ0ICsgc3JjTGVuZ3RoYCksCiAgICAqIHVzaW5nIGJp
dHdpc2UgY29tcGFyaXNvbi4KICAgICogQHBhcmFtIHNyY1RleHQgVGhlIHRleHQgdG8gc2VhcmNo
IGZvci4KLSAgICogQHBhcmFtIHNyY1N0YXJ0IHRoZSBvZmZzZXQgaW50byA8VFQ+c3JjVGV4dDwv
VFQ+IGF0IHdoaWNoCisgICAqIEBwYXJhbSBzcmNTdGFydCB0aGUgb2Zmc2V0IGludG8gYHNyY1Rl
eHRgIGF0IHdoaWNoCiAgICAqIHRvIHN0YXJ0IG1hdGNoaW5nCi0gICAqIEBwYXJhbSBzcmNMZW5n
dGggdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIDxUVD5zcmNUZXh0PC9UVD4gdG8gbWF0Y2gK
KyAgICogQHBhcmFtIHNyY0xlbmd0aCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gYHNyY1Rl
eHRgIHRvIG1hdGNoCiAgICAqIEBwYXJhbSBzdGFydCB0aGUgb2Zmc2V0IGludG8gdGhpcyBhdCB3
aGljaCB0byBzdGFydCBtYXRjaGluZwogICAgKiBAcGFyYW0gbGVuZ3RoIHRoZSBudW1iZXIgb2Yg
Y2hhcmFjdGVycyBpbiB0aGlzIHRvIHNlYXJjaAotICAgKiBAcmV0dXJuIFRoZSBvZmZzZXQgaW50
byB0aGlzIG9mIHRoZSBzdGFydCBvZiA8VFQ+dGV4dDwvVFQ+LAorICAgKiBAcmV0dXJuIFRoZSBv
ZmZzZXQgaW50byB0aGlzIG9mIHRoZSBzdGFydCBvZiBgdGV4dGAsCiAgICAqIG9yIC0xIGlmIG5v
dCBmb3VuZC4KICAgICogQHN0YWJsZSBJQ1UgMi4wCiAgICAqLwpAQCAtMTE4NiwxMiArMTE4OSwx
MiBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgVW5pY29kZVN0cmluZyA6IHB1YmxpYyBSZXBsYWNlYWJs
ZQogICAgICAgICAgICAgICBpbnQzMl90IGxlbmd0aCkgY29uc3Q7CiAKICAgLyoqCi0gICAqIExv
Y2F0ZSBpbiB0aGlzIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgdGhlIGNoYXJhY3RlcnMgaW4gPFRU
PnNyY0NoYXJzPC9UVD4KLSAgICogc3RhcnRpbmcgYXQgb2Zmc2V0IDxUVD5zdGFydDwvVFQ+LCB1
c2luZyBiaXR3aXNlIGNvbXBhcmlzb24uCisgICAqIExvY2F0ZSBpbiB0aGlzIHRoZSBsYXN0IG9j
Y3VycmVuY2Ugb2YgdGhlIGNoYXJhY3RlcnMgaW4gYHNyY0NoYXJzYAorICAgKiBzdGFydGluZyBh
dCBvZmZzZXQgYHN0YXJ0YCwgdXNpbmcgYml0d2lzZSBjb21wYXJpc29uLgogICAgKiBAcGFyYW0g
c3JjQ2hhcnMgVGhlIHRleHQgdG8gc2VhcmNoIGZvci4KLSAgICogQHBhcmFtIHNyY0xlbmd0aCB0
aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gPFRUPnNyY0NoYXJzPC9UVD4gdG8gbWF0Y2gKKyAg
ICogQHBhcmFtIHNyY0xlbmd0aCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gYHNyY0NoYXJz
YCB0byBtYXRjaAogICAgKiBAcGFyYW0gc3RhcnQgdGhlIG9mZnNldCBpbnRvIHRoaXMgYXQgd2hp
Y2ggdG8gc3RhcnQgbWF0Y2hpbmcKLSAgICogQHJldHVybiBUaGUgb2Zmc2V0IGludG8gdGhpcyBv
ZiB0aGUgc3RhcnQgb2YgPFRUPnRleHQ8L1RUPiwKKyAgICogQHJldHVybiBUaGUgb2Zmc2V0IGlu
dG8gdGhpcyBvZiB0aGUgc3RhcnQgb2YgYHRleHRgLAogICAgKiBvciAtMSBpZiBub3QgZm91bmQu
CiAgICAqIEBzdGFibGUgSUNVIDIuMAogICAgKi8KQEAgLTEyMDEsMTMgKzEyMDQsMTMgQEAgY2xh
c3MgVV9DT01NT05fQVBJIFVuaWNvZGVTdHJpbmcgOiBwdWJsaWMgUmVwbGFjZWFibGUKIAogICAv
KioKICAgICogTG9jYXRlIGluIHRoaXMgdGhlIGxhc3Qgb2NjdXJyZW5jZSBpbiB0aGUgcmFuZ2UK
LSAgICogWzxUVD5zdGFydDwvVFQ+LCA8VFQ+c3RhcnQgKyBsZW5ndGg8L1RUPikgb2YgdGhlIGNo
YXJhY3RlcnMKLSAgICogaW4gPFRUPnNyY0NoYXJzPC9UVD4sIHVzaW5nIGJpdHdpc2UgY29tcGFy
aXNvbi4KKyAgICogW2BzdGFydGAsIGBzdGFydCArIGxlbmd0aGApIG9mIHRoZSBjaGFyYWN0ZXJz
CisgICAqIGluIGBzcmNDaGFyc2AsIHVzaW5nIGJpdHdpc2UgY29tcGFyaXNvbi4KICAgICogQHBh
cmFtIHNyY0NoYXJzIFRoZSB0ZXh0IHRvIHNlYXJjaCBmb3IuCi0gICAqIEBwYXJhbSBzcmNMZW5n
dGggdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIDxUVD5zcmNDaGFyczwvVFQ+CisgICAqIEBw
YXJhbSBzcmNMZW5ndGggdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIGBzcmNDaGFyc2AKICAg
ICogQHBhcmFtIHN0YXJ0IFRoZSBvZmZzZXQgYXQgd2hpY2ggc2VhcmNoaW5nIHdpbGwgc3RhcnQu
CiAgICAqIEBwYXJhbSBsZW5ndGggVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHNlYXJjaAot
ICAgKiBAcmV0dXJuIFRoZSBvZmZzZXQgaW50byB0aGlzIG9mIHRoZSBzdGFydCBvZiA8VFQ+c3Jj
Q2hhcnM8L1RUPiwKKyAgICogQHJldHVybiBUaGUgb2Zmc2V0IGludG8gdGhpcyBvZiB0aGUgc3Rh
cnQgb2YgYHNyY0NoYXJzYCwKICAgICogb3IgLTEgaWYgbm90IGZvdW5kLgogICAgKiBAc3RhYmxl
IElDVSAyLjAKICAgICovCkBAIC0xMjE4LDE3ICsxMjIxLDE3IEBAIGNsYXNzIFVfQ09NTU9OX0FQ
SSBVbmljb2RlU3RyaW5nIDogcHVibGljIFJlcGxhY2VhYmxlCiAKICAgLyoqCiAgICAqIExvY2F0
ZSBpbiB0aGlzIHRoZSBsYXN0IG9jY3VycmVuY2UgaW4gdGhlIHJhbmdlCi0gICAqIFs8VFQ+c3Rh
cnQ8L1RUPiwgPFRUPnN0YXJ0ICsgbGVuZ3RoPC9UVD4pIG9mIHRoZSBjaGFyYWN0ZXJzCi0gICAq
IGluIDxUVD5zcmNDaGFyczwvVFQ+IGluIHRoZSByYW5nZQotICAgKiBbPFRUPnNyY1N0YXJ0PC9U
VD4sIDxUVD5zcmNTdGFydCArIHNyY0xlbmd0aDwvVFQ+KSwKKyAgICogW2BzdGFydGAsIGBzdGFy
dCArIGxlbmd0aGApIG9mIHRoZSBjaGFyYWN0ZXJzCisgICAqIGluIGBzcmNDaGFyc2AgaW4gdGhl
IHJhbmdlCisgICAqIFtgc3JjU3RhcnRgLCBgc3JjU3RhcnQgKyBzcmNMZW5ndGhgKSwKICAgICog
dXNpbmcgYml0d2lzZSBjb21wYXJpc29uLgogICAgKiBAcGFyYW0gc3JjQ2hhcnMgVGhlIHRleHQg
dG8gc2VhcmNoIGZvci4KLSAgICogQHBhcmFtIHNyY1N0YXJ0IHRoZSBvZmZzZXQgaW50byA8VFQ+
c3JjQ2hhcnM8L1RUPiBhdCB3aGljaAorICAgKiBAcGFyYW0gc3JjU3RhcnQgdGhlIG9mZnNldCBp
bnRvIGBzcmNDaGFyc2AgYXQgd2hpY2gKICAgICogdG8gc3RhcnQgbWF0Y2hpbmcKLSAgICogQHBh
cmFtIHNyY0xlbmd0aCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gPFRUPnNyY0NoYXJzPC9U
VD4gdG8gbWF0Y2gKKyAgICogQHBhcmFtIHNyY0xlbmd0aCB0aGUgbnVtYmVyIG9mIGNoYXJhY3Rl
cnMgaW4gYHNyY0NoYXJzYCB0byBtYXRjaAogICAgKiBAcGFyYW0gc3RhcnQgdGhlIG9mZnNldCBp
bnRvIHRoaXMgYXQgd2hpY2ggdG8gc3RhcnQgbWF0Y2hpbmcKICAgICogQHBhcmFtIGxlbmd0aCB0
aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdGhpcyB0byBzZWFyY2gKLSAgICogQHJldHVybiBU
aGUgb2Zmc2V0IGludG8gdGhpcyBvZiB0aGUgc3RhcnQgb2YgPFRUPnRleHQ8L1RUPiwKKyAgICog
QHJldHVybiBUaGUgb2Zmc2V0IGludG8gdGhpcyBvZiB0aGUgc3RhcnQgb2YgYHRleHRgLAogICAg
KiBvciAtMSBpZiBub3QgZm91bmQuCiAgICAqIEBzdGFibGUgSUNVIDIuMAogICAgKi8KQEAgLTEy
MzksNTUgKzEyNDIsNTUgQEAgY2xhc3MgVV9DT01NT05fQVBJIFVuaWNvZGVTdHJpbmcgOiBwdWJs
aWMgUmVwbGFjZWFibGUKICAgICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgpIGNvbnN0OwogCiAg
IC8qKgotICAgKiBMb2NhdGUgaW4gdGhpcyB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIHRoZSBCTVAg
Y29kZSBwb2ludCA8Y29kZT5jPC9jb2RlPiwKKyAgICogTG9jYXRlIGluIHRoaXMgdGhlIGxhc3Qg
b2NjdXJyZW5jZSBvZiB0aGUgQk1QIGNvZGUgcG9pbnQgYGNgLAogICAgKiB1c2luZyBiaXR3aXNl
IGNvbXBhcmlzb24uCiAgICAqIEBwYXJhbSBjIFRoZSBjb2RlIHVuaXQgdG8gc2VhcmNoIGZvci4K
LSAgICogQHJldHVybiBUaGUgb2Zmc2V0IGludG8gdGhpcyBvZiA8VFQ+YzwvVFQ+LCBvciAtMSBp
ZiBub3QgZm91bmQuCisgICAqIEByZXR1cm4gVGhlIG9mZnNldCBpbnRvIHRoaXMgb2YgYGNgLCBv
ciAtMSBpZiBub3QgZm91bmQuCiAgICAqIEBzdGFibGUgSUNVIDIuMAogICAgKi8KICAgaW5saW5l
IGludDMyX3QgbGFzdEluZGV4T2YoY2hhcjE2X3QgYykgY29uc3Q7CiAKICAgLyoqCi0gICAqIExv
Y2F0ZSBpbiB0aGlzIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgdGhlIGNvZGUgcG9pbnQgPFRUPmM8
L1RUPiwKKyAgICogTG9jYXRlIGluIHRoaXMgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiB0aGUgY29k
ZSBwb2ludCBgY2AsCiAgICAqIHVzaW5nIGJpdHdpc2UgY29tcGFyaXNvbi4KICAgICoKICAgICog
QHBhcmFtIGMgVGhlIGNvZGUgcG9pbnQgdG8gc2VhcmNoIGZvci4KLSAgICogQHJldHVybiBUaGUg
b2Zmc2V0IGludG8gdGhpcyBvZiA8VFQ+YzwvVFQ+LCBvciAtMSBpZiBub3QgZm91bmQuCisgICAq
IEByZXR1cm4gVGhlIG9mZnNldCBpbnRvIHRoaXMgb2YgYGNgLCBvciAtMSBpZiBub3QgZm91bmQu
CiAgICAqIEBzdGFibGUgSUNVIDIuMAogICAgKi8KICAgaW5saW5lIGludDMyX3QgbGFzdEluZGV4
T2YoVUNoYXIzMiBjKSBjb25zdDsKIAogICAvKioKLSAgICogTG9jYXRlIGluIHRoaXMgdGhlIGxh
c3Qgb2NjdXJyZW5jZSBvZiB0aGUgQk1QIGNvZGUgcG9pbnQgPGNvZGU+YzwvY29kZT4KLSAgICog
c3RhcnRpbmcgYXQgb2Zmc2V0IDxUVD5zdGFydDwvVFQ+LCB1c2luZyBiaXR3aXNlIGNvbXBhcmlz
b24uCisgICAqIExvY2F0ZSBpbiB0aGlzIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgdGhlIEJNUCBj
b2RlIHBvaW50IGBjYAorICAgKiBzdGFydGluZyBhdCBvZmZzZXQgYHN0YXJ0YCwgdXNpbmcgYml0
d2lzZSBjb21wYXJpc29uLgogICAgKiBAcGFyYW0gYyBUaGUgY29kZSB1bml0IHRvIHNlYXJjaCBm
b3IuCiAgICAqIEBwYXJhbSBzdGFydCBUaGUgb2Zmc2V0IGF0IHdoaWNoIHNlYXJjaGluZyB3aWxs
IHN0YXJ0LgotICAgKiBAcmV0dXJuIFRoZSBvZmZzZXQgaW50byB0aGlzIG9mIDxUVD5jPC9UVD4s
IG9yIC0xIGlmIG5vdCBmb3VuZC4KKyAgICogQHJldHVybiBUaGUgb2Zmc2V0IGludG8gdGhpcyBv
ZiBgY2AsIG9yIC0xIGlmIG5vdCBmb3VuZC4KICAgICogQHN0YWJsZSBJQ1UgMi4wCiAgICAqLwog
ICBpbmxpbmUgaW50MzJfdCBsYXN0SW5kZXhPZihjaGFyMTZfdCBjLAogICAgICAgICAgICAgICBp
bnQzMl90IHN0YXJ0KSBjb25zdDsKIAogICAvKioKLSAgICogTG9jYXRlIGluIHRoaXMgdGhlIGxh
c3Qgb2NjdXJyZW5jZSBvZiB0aGUgY29kZSBwb2ludCA8VFQ+YzwvVFQ+Ci0gICAqIHN0YXJ0aW5n
IGF0IG9mZnNldCA8VFQ+c3RhcnQ8L1RUPiwgdXNpbmcgYml0d2lzZSBjb21wYXJpc29uLgorICAg
KiBMb2NhdGUgaW4gdGhpcyB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIHRoZSBjb2RlIHBvaW50IGBj
YAorICAgKiBzdGFydGluZyBhdCBvZmZzZXQgYHN0YXJ0YCwgdXNpbmcgYml0d2lzZSBjb21wYXJp
c29uLgogICAgKgogICAgKiBAcGFyYW0gYyBUaGUgY29kZSBwb2ludCB0byBzZWFyY2ggZm9yLgog
ICAgKiBAcGFyYW0gc3RhcnQgVGhlIG9mZnNldCBhdCB3aGljaCBzZWFyY2hpbmcgd2lsbCBzdGFy
dC4KLSAgICogQHJldHVybiBUaGUgb2Zmc2V0IGludG8gdGhpcyBvZiA8VFQ+YzwvVFQ+LCBvciAt
MSBpZiBub3QgZm91bmQuCisgICAqIEByZXR1cm4gVGhlIG9mZnNldCBpbnRvIHRoaXMgb2YgYGNg
LCBvciAtMSBpZiBub3QgZm91bmQuCiAgICAqIEBzdGFibGUgSUNVIDIuMAogICAgKi8KICAgaW5s
aW5lIGludDMyX3QgbGFzdEluZGV4T2YoVUNoYXIzMiBjLAogICAgICAgICAgICAgICBpbnQzMl90
IHN0YXJ0KSBjb25zdDsKIAogICAvKioKLSAgICogTG9jYXRlIGluIHRoaXMgdGhlIGxhc3Qgb2Nj
dXJyZW5jZSBvZiB0aGUgQk1QIGNvZGUgcG9pbnQgPGNvZGU+YzwvY29kZT4KLSAgICogaW4gdGhl
IHJhbmdlIFs8VFQ+c3RhcnQ8L1RUPiwgPFRUPnN0YXJ0ICsgbGVuZ3RoPC9UVD4pLAorICAgKiBM
b2NhdGUgaW4gdGhpcyB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIHRoZSBCTVAgY29kZSBwb2ludCBg
Y2AKKyAgICogaW4gdGhlIHJhbmdlIFtgc3RhcnRgLCBgc3RhcnQgKyBsZW5ndGhgKSwKICAgICog
dXNpbmcgYml0d2lzZSBjb21wYXJpc29uLgogICAgKiBAcGFyYW0gYyBUaGUgY29kZSB1bml0IHRv
IHNlYXJjaCBmb3IuCiAgICAqIEBwYXJhbSBzdGFydCB0aGUgb2Zmc2V0IGludG8gdGhpcyBhdCB3
aGljaCB0byBzdGFydCBtYXRjaGluZwogICAgKiBAcGFyYW0gbGVuZ3RoIHRoZSBudW1iZXIgb2Yg
Y2hhcmFjdGVycyBpbiB0aGlzIHRvIHNlYXJjaAotICAgKiBAcmV0dXJuIFRoZSBvZmZzZXQgaW50
byB0aGlzIG9mIDxUVD5jPC9UVD4sIG9yIC0xIGlmIG5vdCBmb3VuZC4KKyAgICogQHJldHVybiBU
aGUgb2Zmc2V0IGludG8gdGhpcyBvZiBgY2AsIG9yIC0xIGlmIG5vdCBmb3VuZC4KICAgICogQHN0
YWJsZSBJQ1UgMi4wCiAgICAqLwogICBpbmxpbmUgaW50MzJfdCBsYXN0SW5kZXhPZihjaGFyMTZf
dCBjLApAQCAtMTI5NSwxNCArMTI5OCwxNCBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgVW5pY29kZVN0
cmluZyA6IHB1YmxpYyBSZXBsYWNlYWJsZQogICAgICAgICAgICAgICBpbnQzMl90IGxlbmd0aCkg
Y29uc3Q7CiAKICAgLyoqCi0gICAqIExvY2F0ZSBpbiB0aGlzIHRoZSBsYXN0IG9jY3VycmVuY2Ug
b2YgdGhlIGNvZGUgcG9pbnQgPFRUPmM8L1RUPgotICAgKiBpbiB0aGUgcmFuZ2UgWzxUVD5zdGFy
dDwvVFQ+LCA8VFQ+c3RhcnQgKyBsZW5ndGg8L1RUPiksCisgICAqIExvY2F0ZSBpbiB0aGlzIHRo
ZSBsYXN0IG9jY3VycmVuY2Ugb2YgdGhlIGNvZGUgcG9pbnQgYGNgCisgICAqIGluIHRoZSByYW5n
ZSBbYHN0YXJ0YCwgYHN0YXJ0ICsgbGVuZ3RoYCksCiAgICAqIHVzaW5nIGJpdHdpc2UgY29tcGFy
aXNvbi4KICAgICoKICAgICogQHBhcmFtIGMgVGhlIGNvZGUgcG9pbnQgdG8gc2VhcmNoIGZvci4K
ICAgICogQHBhcmFtIHN0YXJ0IHRoZSBvZmZzZXQgaW50byB0aGlzIGF0IHdoaWNoIHRvIHN0YXJ0
IG1hdGNoaW5nCiAgICAqIEBwYXJhbSBsZW5ndGggdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGlu
IHRoaXMgdG8gc2VhcmNoCi0gICAqIEByZXR1cm4gVGhlIG9mZnNldCBpbnRvIHRoaXMgb2YgPFRU
PmM8L1RUPiwgb3IgLTEgaWYgbm90IGZvdW5kLgorICAgKiBAcmV0dXJuIFRoZSBvZmZzZXQgaW50
byB0aGlzIG9mIGBjYCwgb3IgLTEgaWYgbm90IGZvdW5kLgogICAgKiBAc3RhYmxlIElDVSAyLjAK
ICAgICovCiAgIGlubGluZSBpbnQzMl90IGxhc3RJbmRleE9mKFVDaGFyMzIgYywKQEAgLTEzMTMs
MzIgKzEzMTYsMzIgQEAgY2xhc3MgVV9DT01NT05fQVBJIFVuaWNvZGVTdHJpbmcgOiBwdWJsaWMg
UmVwbGFjZWFibGUKICAgLyogQ2hhcmFjdGVyIGFjY2VzcyAqLwogCiAgIC8qKgotICAgKiBSZXR1
cm4gdGhlIGNvZGUgdW5pdCBhdCBvZmZzZXQgPHR0Pm9mZnNldDwvdHQ+LgorICAgKiBSZXR1cm4g
dGhlIGNvZGUgdW5pdCBhdCBvZmZzZXQgYG9mZnNldGAuCiAgICAqIElmIHRoZSBvZmZzZXQgaXMg
bm90IHZhbGlkICgwLi5sZW5ndGgoKS0xKSB0aGVuIFUrZmZmZiBpcyByZXR1cm5lZC4KICAgICog
QHBhcmFtIG9mZnNldCBhIHZhbGlkIG9mZnNldCBpbnRvIHRoZSB0ZXh0Ci0gICAqIEByZXR1cm4g
dGhlIGNvZGUgdW5pdCBhdCBvZmZzZXQgPHR0Pm9mZnNldDwvdHQ+CisgICAqIEByZXR1cm4gdGhl
IGNvZGUgdW5pdCBhdCBvZmZzZXQgYG9mZnNldGAKICAgICogICAgICAgICBvciAweGZmZmYgaWYg
dGhlIG9mZnNldCBpcyBub3QgdmFsaWQgZm9yIHRoaXMgc3RyaW5nCiAgICAqIEBzdGFibGUgSUNV
IDIuMAogICAgKi8KICAgaW5saW5lIGNoYXIxNl90IGNoYXJBdChpbnQzMl90IG9mZnNldCkgY29u
c3Q7CiAKICAgLyoqCi0gICAqIFJldHVybiB0aGUgY29kZSB1bml0IGF0IG9mZnNldCA8dHQ+b2Zm
c2V0PC90dD4uCisgICAqIFJldHVybiB0aGUgY29kZSB1bml0IGF0IG9mZnNldCBgb2Zmc2V0YC4K
ICAgICogSWYgdGhlIG9mZnNldCBpcyBub3QgdmFsaWQgKDAuLmxlbmd0aCgpLTEpIHRoZW4gVStm
ZmZmIGlzIHJldHVybmVkLgogICAgKiBAcGFyYW0gb2Zmc2V0IGEgdmFsaWQgb2Zmc2V0IGludG8g
dGhlIHRleHQKLSAgICogQHJldHVybiB0aGUgY29kZSB1bml0IGF0IG9mZnNldCA8dHQ+b2Zmc2V0
PC90dD4KKyAgICogQHJldHVybiB0aGUgY29kZSB1bml0IGF0IG9mZnNldCBgb2Zmc2V0YAogICAg
KiBAc3RhYmxlIElDVSAyLjAKICAgICovCiAgIGlubGluZSBjaGFyMTZfdCBvcGVyYXRvcltdIChp
bnQzMl90IG9mZnNldCkgY29uc3Q7CiAKICAgLyoqCiAgICAqIFJldHVybiB0aGUgY29kZSBwb2lu
dCB0aGF0IGNvbnRhaW5zIHRoZSBjb2RlIHVuaXQKLSAgICogYXQgb2Zmc2V0IDx0dD5vZmZzZXQ8
L3R0Pi4KKyAgICogYXQgb2Zmc2V0IGBvZmZzZXRgLgogICAgKiBJZiB0aGUgb2Zmc2V0IGlzIG5v
dCB2YWxpZCAoMC4ubGVuZ3RoKCktMSkgdGhlbiBVK2ZmZmYgaXMgcmV0dXJuZWQuCiAgICAqIEBw
YXJhbSBvZmZzZXQgYSB2YWxpZCBvZmZzZXQgaW50byB0aGUgdGV4dAogICAgKiB0aGF0IGluZGlj
YXRlcyB0aGUgdGV4dCBvZmZzZXQgb2YgYW55IG9mIHRoZSBjb2RlIHVuaXRzCiAgICAqIHRoYXQg
d2lsbCBiZSBhc3NlbWJsZWQgaW50byBhIGNvZGUgcG9pbnQgKDIxLWJpdCB2YWx1ZSkgYW5kIHJl
dHVybmVkCi0gICAqIEByZXR1cm4gdGhlIGNvZGUgcG9pbnQgb2YgdGV4dCBhdCA8dHQ+b2Zmc2V0
PC90dD4KKyAgICogQHJldHVybiB0aGUgY29kZSBwb2ludCBvZiB0ZXh0IGF0IGBvZmZzZXRgCiAg
ICAqICAgICAgICAgb3IgMHhmZmZmIGlmIHRoZSBvZmZzZXQgaXMgbm90IHZhbGlkIGZvciB0aGlz
IHN0cmluZwogICAgKiBAc3RhYmxlIElDVSAyLjAKICAgICovCkBAIC0xMzk1LDMzICsxMzk4LDMz
IEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBVbmljb2RlU3RyaW5nIDogcHVibGljIFJlcGxhY2VhYmxl
CiAgICAqIFRoaXMgYmVoYXZlcyBsaWtlIENoYXJhY3Rlckl0ZXJhdG9yOjptb3ZlMzIoZGVsdGEs
IGtDdXJyZW50KS4KICAgICoKICAgICogQmVoYXZpb3IgZm9yIG91dC1vZi1ib3VuZHMgaW5kZXhl
czoKLSAgICogPGNvZGU+bW92ZUluZGV4MzI8L2NvZGU+IHBpbnMgdGhlIGlucHV0IGluZGV4IHRv
IDAuLmxlbmd0aCgpLCBpLmUuLAorICAgKiBgbW92ZUluZGV4MzJgIHBpbnMgdGhlIGlucHV0IGlu
ZGV4IHRvIDAuLmxlbmd0aCgpLCBpLmUuLAogICAgKiBpZiB0aGUgaW5wdXQgaW5kZXg8MCB0aGVu
IGl0IGlzIHBpbm5lZCB0byAwOwogICAgKiBpZiBpdCBpcyBpbmRleD5sZW5ndGgoKSB0aGVuIGl0
IGlzIHBpbm5lZCB0byBsZW5ndGgoKS4KLSAgICogQWZ0ZXJ3YXJkcywgdGhlIGluZGV4IGlzIG1v
dmVkIGJ5IDxjb2RlPmRlbHRhPC9jb2RlPiBjb2RlIHBvaW50cworICAgKiBBZnRlcndhcmRzLCB0
aGUgaW5kZXggaXMgbW92ZWQgYnkgYGRlbHRhYCBjb2RlIHBvaW50cwogICAgKiBmb3J3YXJkIG9y
IGJhY2t3YXJkLAogICAgKiBidXQgbm8gZnVydGhlciBiYWNrd2FyZCB0aGFuIHRvIDAgYW5kIG5v
IGZ1cnRoZXIgZm9yd2FyZCB0aGFuIHRvIGxlbmd0aCgpLgogICAgKiBUaGUgcmVzdWx0aW5nIGlu
ZGV4IHJldHVybiB2YWx1ZSB3aWxsIGJlIGluIGJldHdlZW4gMCBhbmQgbGVuZ3RoKCksIGluY2x1
c2l2ZWx5LgogICAgKgogICAgKiBFeGFtcGxlczoKLSAgICogPHByZT4KLSAgICogLy8gcyBoYXMg
Y29kZSBwb2ludHMgJ2EnIFUrMTAwMDAgJ2InIFUrMTBmZmZmIFUrMjAyOQotICAgKiBVbmljb2Rl
U3RyaW5nIHM9VU5JQ09ERV9TVFJJTkcoImFcXFUwMDAxMDAwMGJcXFUwMDEwZmZmZlxcdTIwMjki
LCAzMSkudW5lc2NhcGUoKTsKKyAgICogXGNvZGUKKyAgICogICAgIC8vIHMgaGFzIGNvZGUgcG9p
bnRzICdhJyBVKzEwMDAwICdiJyBVKzEwZmZmZiBVKzIwMjkKKyAgICogICAgIFVuaWNvZGVTdHJp
bmcgcyh1ImFcVTAwMDEwMDAwYlxVMDAxMGZmZmZcdTIwMjkiKTsKICAgICoKLSAgICogLy8gaW5p
dGlhbCBpbmRleDogcG9zaXRpb24gb2YgVSsxMDAwMAotICAgKiBpbnQzMl90IGluZGV4PTE7Cisg
ICAqICAgICAvLyBpbml0aWFsIGluZGV4OiBwb3NpdGlvbiBvZiBVKzEwMDAwCisgICAqICAgICBp
bnQzMl90IGluZGV4PTE7CiAgICAqCi0gICAqIC8vIHRoZSBmb2xsb3dpbmcgZXhhbXBsZXMgd2ls
bCBhbGwgcmVzdWx0IGluIGluZGV4PT00LCBwb3NpdGlvbiBvZiBVKzEwZmZmZgorICAgKiAgICAg
Ly8gdGhlIGZvbGxvd2luZyBleGFtcGxlcyB3aWxsIGFsbCByZXN1bHQgaW4gaW5kZXg9PTQsIHBv
c2l0aW9uIG9mIFUrMTBmZmZmCiAgICAqCi0gICAqIC8vIHNraXAgMiBjb2RlIHBvaW50cyBmcm9t
IHNvbWUgcG9zaXRpb24gaW4gdGhlIHN0cmluZwotICAgKiBpbmRleD1zLm1vdmVJbmRleDMyKGlu
ZGV4LCAyKTsgLy8gc2tpcHMgVSsxMDAwMCBhbmQgJ2InCisgICAqICAgICAvLyBza2lwIDIgY29k
ZSBwb2ludHMgZnJvbSBzb21lIHBvc2l0aW9uIGluIHRoZSBzdHJpbmcKKyAgICogICAgIGluZGV4
PXMubW92ZUluZGV4MzIoaW5kZXgsIDIpOyAvLyBza2lwcyBVKzEwMDAwIGFuZCAnYicKICAgICoK
LSAgICogLy8gZ28gdG8gdGhlIDNyZCBjb2RlIHBvaW50IGZyb20gdGhlIHN0YXJ0IG9mIHMgKDAt
YmFzZWQpCi0gICAqIGluZGV4PXMubW92ZUluZGV4MzIoMCwgMyk7IC8vIHNraXBzICdhJywgVSsx
MDAwMCwgYW5kICdiJworICAgKiAgICAgLy8gZ28gdG8gdGhlIDNyZCBjb2RlIHBvaW50IGZyb20g
dGhlIHN0YXJ0IG9mIHMgKDAtYmFzZWQpCisgICAqICAgICBpbmRleD1zLm1vdmVJbmRleDMyKDAs
IDMpOyAvLyBza2lwcyAnYScsIFUrMTAwMDAsIGFuZCAnYicKICAgICoKLSAgICogLy8gZ28gdG8g
dGhlIG5leHQtdG8tbGFzdCBjb2RlIHBvaW50IG9mIHMKLSAgICogaW5kZXg9cy5tb3ZlSW5kZXgz
MihzLmxlbmd0aCgpLCAtMik7IC8vIGJhY2t3YXJkLXNraXBzIFUrMjAyOSBhbmQgVSsxMGZmZmYK
LSAgICogPC9wcmU+CisgICAqICAgICAvLyBnbyB0byB0aGUgbmV4dC10by1sYXN0IGNvZGUgcG9p
bnQgb2YgcworICAgKiAgICAgaW5kZXg9cy5tb3ZlSW5kZXgzMihzLmxlbmd0aCgpLCAtMik7IC8v
IGJhY2t3YXJkLXNraXBzIFUrMjAyOSBhbmQgVSsxMGZmZmYKKyAgICogXGVuZGNvZGUKICAgICoK
ICAgICogQHBhcmFtIGluZGV4IGlucHV0IGNvZGUgdW5pdCBpbmRleAogICAgKiBAcGFyYW0gZGVs
dGEgKHNpZ25lZCkgY29kZSBwb2ludCBjb3VudCB0byBtb3ZlIHRoZSBpbmRleCBmb3J3YXJkIG9y
IGJhY2t3YXJkCkBAIC0xNDM1LDE2ICsxNDM4LDE2IEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBVbmlj
b2RlU3RyaW5nIDogcHVibGljIFJlcGxhY2VhYmxlCiAKICAgLyoqCiAgICAqIENvcHkgdGhlIGNo
YXJhY3RlcnMgaW4gdGhlIHJhbmdlCi0gICAqIFs8dHQ+c3RhcnQ8L3R0PiwgPHR0PnN0YXJ0ICsg
bGVuZ3RoPC90dD4pIGludG8gdGhlIGFycmF5IDx0dD5kc3Q8L3R0PiwKLSAgICogYmVnaW5uaW5n
IGF0IDx0dD5kc3RTdGFydDwvdHQ+LgotICAgKiBJZiB0aGUgc3RyaW5nIGFsaWFzZXMgdG8gPGNv
ZGU+ZHN0PC9jb2RlPiBpdHNlbGYgYXMgYW4gZXh0ZXJuYWwgYnVmZmVyLAorICAgKiBbYHN0YXJ0
YCwgYHN0YXJ0ICsgbGVuZ3RoYCkgaW50byB0aGUgYXJyYXkgYGRzdGAsCisgICAqIGJlZ2lubmlu
ZyBhdCBgZHN0U3RhcnRgLgorICAgKiBJZiB0aGUgc3RyaW5nIGFsaWFzZXMgdG8gYGRzdGAgaXRz
ZWxmIGFzIGFuIGV4dGVybmFsIGJ1ZmZlciwKICAgICogdGhlbiBleHRyYWN0KCkgd2lsbCBub3Qg
Y29weSB0aGUgY29udGVudHMuCiAgICAqCiAgICAqIEBwYXJhbSBzdGFydCBvZmZzZXQgb2YgZmly
c3QgY2hhcmFjdGVyIHdoaWNoIHdpbGwgYmUgY29waWVkIGludG8gdGhlIGFycmF5CiAgICAqIEBw
YXJhbSBsZW5ndGggdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGV4dHJhY3QKLSAgICogQHBh
cmFtIGRzdCBhcnJheSBpbiB3aGljaCB0byBjb3B5IGNoYXJhY3RlcnMuICBUaGUgbGVuZ3RoIG9m
IDx0dD5kc3Q8L3R0PgotICAgKiBtdXN0IGJlIGF0IGxlYXN0ICg8dHQ+ZHN0U3RhcnQgKyBsZW5n
dGg8L3R0PikuCi0gICAqIEBwYXJhbSBkc3RTdGFydCB0aGUgb2Zmc2V0IGluIDxUVD5kc3Q8L1RU
PiB3aGVyZSB0aGUgZmlyc3QgY2hhcmFjdGVyCisgICAqIEBwYXJhbSBkc3QgYXJyYXkgaW4gd2hp
Y2ggdG8gY29weSBjaGFyYWN0ZXJzLiAgVGhlIGxlbmd0aCBvZiBgZHN0YAorICAgKiBtdXN0IGJl
IGF0IGxlYXN0IChgZHN0U3RhcnQgKyBsZW5ndGhgKS4KKyAgICogQHBhcmFtIGRzdFN0YXJ0IHRo
ZSBvZmZzZXQgaW4gYGRzdGAgd2hlcmUgdGhlIGZpcnN0IGNoYXJhY3RlcgogICAgKiB3aWxsIGJl
IGV4dHJhY3RlZAogICAgKiBAc3RhYmxlIElDVSAyLjAKICAgICovCkBAIC0xNDY1LDcgKzE0Njgs
NyBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgVW5pY29kZVN0cmluZyA6IHB1YmxpYyBSZXBsYWNlYWJs
ZQogICAgKiBJZiB0aGUgc3RyaW5nIGl0c2VsZiBkb2VzIG5vdCBmaXQgaW50byBkZXN0CiAgICAq
IChsZW5ndGgoKT5kZXN0Q2FwYWNpdHkpIHRoZW4gdGhlIGVycm9yIGNvZGUgaXMgc2V0IHRvIFVf
QlVGRkVSX09WRVJGTE9XX0VSUk9SLgogICAgKgotICAgKiBJZiB0aGUgc3RyaW5nIGFsaWFzZXMg
dG8gPGNvZGU+ZGVzdDwvY29kZT4gaXRzZWxmIGFzIGFuIGV4dGVybmFsIGJ1ZmZlciwKKyAgICog
SWYgdGhlIHN0cmluZyBhbGlhc2VzIHRvIGBkZXN0YCBpdHNlbGYgYXMgYW4gZXh0ZXJuYWwgYnVm
ZmVyLAogICAgKiB0aGVuIGV4dHJhY3QoKSB3aWxsIG5vdCBjb3B5IHRoZSBjb250ZW50cy4KICAg
ICoKICAgICogQHBhcmFtIGRlc3QgRGVzdGluYXRpb24gc3RyaW5nIGJ1ZmZlci4KQEAgLTE0ODAs
MTIgKzE0ODMsMTEgQEAgY2xhc3MgVV9DT01NT05fQVBJIFVuaWNvZGVTdHJpbmcgOiBwdWJsaWMg
UmVwbGFjZWFibGUKIAogICAvKioKICAgICogQ29weSB0aGUgY2hhcmFjdGVycyBpbiB0aGUgcmFu
Z2UKLSAgICogWzx0dD5zdGFydDwvdHQ+LCA8dHQ+c3RhcnQgKyBsZW5ndGg8L3R0PikgaW50byB0
aGUgIFVuaWNvZGVTdHJpbmcKLSAgICogPHR0PnRhcmdldDwvdHQ+LgorICAgKiBbYHN0YXJ0YCwg
YHN0YXJ0ICsgbGVuZ3RoYCkgaW50byB0aGUgIFVuaWNvZGVTdHJpbmcKKyAgICogYHRhcmdldGAu
CiAgICAqIEBwYXJhbSBzdGFydCBvZmZzZXQgb2YgZmlyc3QgY2hhcmFjdGVyIHdoaWNoIHdpbGwg
YmUgY29waWVkCiAgICAqIEBwYXJhbSBsZW5ndGggdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRv
IGV4dHJhY3QKICAgICogQHBhcmFtIHRhcmdldCBVbmljb2RlU3RyaW5nIGludG8gd2hpY2ggdG8g
Y29weSBjaGFyYWN0ZXJzLgotICAgKiBAcmV0dXJuIEEgcmVmZXJlbmNlIHRvIDxUVD50YXJnZXQ8
L1RUPgogICAgKiBAc3RhYmxlIElDVSAyLjAKICAgICovCiAgIGlubGluZSB2b2lkIGV4dHJhY3Qo
aW50MzJfdCBzdGFydCwKQEAgLTE0OTMsMTMgKzE0OTUsMTMgQEAgY2xhc3MgVV9DT01NT05fQVBJ
IFVuaWNvZGVTdHJpbmcgOiBwdWJsaWMgUmVwbGFjZWFibGUKICAgICAgICAgICAgVW5pY29kZVN0
cmluZyYgdGFyZ2V0KSBjb25zdDsKIAogICAvKioKLSAgICogQ29weSB0aGUgY2hhcmFjdGVycyBp
biB0aGUgcmFuZ2UgWzx0dD5zdGFydDwvdHQ+LCA8dHQ+bGltaXQ8L3R0PikKLSAgICogaW50byB0
aGUgYXJyYXkgPHR0PmRzdDwvdHQ+LCBiZWdpbm5pbmcgYXQgPHR0PmRzdFN0YXJ0PC90dD4uCisg
ICAqIENvcHkgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFtgc3RhcnRgLCBgbGltaXRgKQor
ICAgKiBpbnRvIHRoZSBhcnJheSBgZHN0YCwgYmVnaW5uaW5nIGF0IGBkc3RTdGFydGAuCiAgICAq
IEBwYXJhbSBzdGFydCBvZmZzZXQgb2YgZmlyc3QgY2hhcmFjdGVyIHdoaWNoIHdpbGwgYmUgY29w
aWVkIGludG8gdGhlIGFycmF5CiAgICAqIEBwYXJhbSBsaW1pdCBvZmZzZXQgaW1tZWRpYXRlbHkg
Zm9sbG93aW5nIHRoZSBsYXN0IGNoYXJhY3RlciB0byBiZSBjb3BpZWQKLSAgICogQHBhcmFtIGRz
dCBhcnJheSBpbiB3aGljaCB0byBjb3B5IGNoYXJhY3RlcnMuICBUaGUgbGVuZ3RoIG9mIDx0dD5k
c3Q8L3R0PgotICAgKiBtdXN0IGJlIGF0IGxlYXN0ICg8dHQ+ZHN0U3RhcnQgKyAobGltaXQgLSBz
dGFydCk8L3R0PikuCi0gICAqIEBwYXJhbSBkc3RTdGFydCB0aGUgb2Zmc2V0IGluIDxUVD5kc3Q8
L1RUPiB3aGVyZSB0aGUgZmlyc3QgY2hhcmFjdGVyCisgICAqIEBwYXJhbSBkc3QgYXJyYXkgaW4g
d2hpY2ggdG8gY29weSBjaGFyYWN0ZXJzLiAgVGhlIGxlbmd0aCBvZiBgZHN0YAorICAgKiBtdXN0
IGJlIGF0IGxlYXN0IChgZHN0U3RhcnQgKyAobGltaXQgLSBzdGFydClgKS4KKyAgICogQHBhcmFt
IGRzdFN0YXJ0IHRoZSBvZmZzZXQgaW4gYGRzdGAgd2hlcmUgdGhlIGZpcnN0IGNoYXJhY3Rlcgog
ICAgKiB3aWxsIGJlIGV4dHJhY3RlZAogICAgKiBAc3RhYmxlIElDVSAyLjAKICAgICovCkBAIC0x
NTA5LDEyICsxNTExLDExIEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBVbmljb2RlU3RyaW5nIDogcHVi
bGljIFJlcGxhY2VhYmxlCiAgICAgICAgICAgICAgIGludDMyX3QgZHN0U3RhcnQgPSAwKSBjb25z
dDsKIAogICAvKioKLSAgICogQ29weSB0aGUgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgWzx0dD5z
dGFydDwvdHQ+LCA8dHQ+bGltaXQ8L3R0PikKLSAgICogaW50byB0aGUgVW5pY29kZVN0cmluZyA8
dHQ+dGFyZ2V0PC90dD4uICBSZXBsYWNlYWJsZSBBUEkuCisgICAqIENvcHkgdGhlIGNoYXJhY3Rl
cnMgaW4gdGhlIHJhbmdlIFtgc3RhcnRgLCBgbGltaXRgKQorICAgKiBpbnRvIHRoZSBVbmljb2Rl
U3RyaW5nIGB0YXJnZXRgLiAgUmVwbGFjZWFibGUgQVBJLgogICAgKiBAcGFyYW0gc3RhcnQgb2Zm
c2V0IG9mIGZpcnN0IGNoYXJhY3RlciB3aGljaCB3aWxsIGJlIGNvcGllZAogICAgKiBAcGFyYW0g
bGltaXQgb2Zmc2V0IGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgbGFzdCBjaGFyYWN0ZXIgdG8g
YmUgY29waWVkCiAgICAqIEBwYXJhbSB0YXJnZXQgVW5pY29kZVN0cmluZyBpbnRvIHdoaWNoIHRv
IGNvcHkgY2hhcmFjdGVycy4KLSAgICogQHJldHVybiBBIHJlZmVyZW5jZSB0byA8VFQ+dGFyZ2V0
PC9UVD4KICAgICogQHN0YWJsZSBJQ1UgMi4wCiAgICAqLwogICB2aXJ0dWFsIHZvaWQgZXh0cmFj
dEJldHdlZW4oaW50MzJfdCBzdGFydCwKQEAgLTE1MjMsMTEgKzE1MjQsMTEgQEAgY2xhc3MgVV9D
T01NT05fQVBJIFVuaWNvZGVTdHJpbmcgOiBwdWJsaWMgUmVwbGFjZWFibGUKIAogICAvKioKICAg
ICogQ29weSB0aGUgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UKLSAgICogWzx0dD5zdGFydDwvVFQ+
LCA8dHQ+c3RhcnQgKyBzdGFydExlbmd0aDwvVFQ+KSBpbnRvIGFuIGFycmF5IG9mIGNoYXJhY3Rl
cnMuCisgICAqIFtgc3RhcnRgLCBgc3RhcnQgKyBzdGFydExlbmd0aGApIGludG8gYW4gYXJyYXkg
b2YgY2hhcmFjdGVycy4KICAgICogQWxsIGNoYXJhY3RlcnMgbXVzdCBiZSBpbnZhcmlhbnQgKHNl
ZSB1dHlwZXMuaCkuCiAgICAqIFVzZSBVU19JTlYgYXMgdGhlIGxhc3QsIHNpZ25hdHVyZS1kaXN0
aW5ndWlzaGluZyBwYXJhbWV0ZXIuCiAgICAqCi0gICAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qg
d3JpdGUgYW55IG1vcmUgdGhhbiA8Y29kZT50YXJnZXRDYXBhY2l0eTwvY29kZT4KKyAgICogVGhp
cyBmdW5jdGlvbiBkb2VzIG5vdCB3cml0ZSBhbnkgbW9yZSB0aGFuIGB0YXJnZXRDYXBhY2l0eWAK
ICAgICogY2hhcmFjdGVycyBidXQgcmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBlbnRpcmUgb3V0
cHV0IHN0cmluZwogICAgKiBzbyB0aGF0IG9uZSBjYW4gYWxsb2NhdGUgYSBsYXJnZXIgYnVmZmVy
IGFuZCBjYWxsIHRoZSBmdW5jdGlvbiBhZ2FpbgogICAgKiBpZiBuZWNlc3NhcnkuCkBAIC0xNTUy
LDkgKzE1NTMsOSBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgVW5pY29kZVN0cmluZyA6IHB1YmxpYyBS
ZXBsYWNlYWJsZQogCiAgIC8qKgogICAgKiBDb3B5IHRoZSBjaGFyYWN0ZXJzIGluIHRoZSByYW5n
ZQotICAgKiBbPHR0PnN0YXJ0PC9UVD4sIDx0dD5zdGFydCArIGxlbmd0aDwvVFQ+KSBpbnRvIGFu
IGFycmF5IG9mIGNoYXJhY3RlcnMKKyAgICogW2BzdGFydGAsIGBzdGFydCArIGxlbmd0aGApIGlu
dG8gYW4gYXJyYXkgb2YgY2hhcmFjdGVycwogICAgKiBpbiB0aGUgcGxhdGZvcm0ncyBkZWZhdWx0
IGNvZGVwYWdlLgotICAgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHdyaXRlIGFueSBtb3JlIHRo
YW4gPGNvZGU+dGFyZ2V0TGVuZ3RoPC9jb2RlPgorICAgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90
IHdyaXRlIGFueSBtb3JlIHRoYW4gYHRhcmdldExlbmd0aGAKICAgICogY2hhcmFjdGVycyBidXQg
cmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBlbnRpcmUgb3V0cHV0IHN0cmluZwogICAgKiBzbyB0
aGF0IG9uZSBjYW4gYWxsb2NhdGUgYSBsYXJnZXIgYnVmZmVyIGFuZCBjYWxsIHRoZSBmdW5jdGlv
biBhZ2FpbgogICAgKiBpZiBuZWNlc3NhcnkuCkBAIC0xNTY0LDggKzE1NjUsOCBAQCBjbGFzcyBV
X0NPTU1PTl9BUEkgVW5pY29kZVN0cmluZyA6IHB1YmxpYyBSZXBsYWNlYWJsZQogICAgKiBAcGFy
YW0gc3RhcnRMZW5ndGggdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGV4dHJhY3QKICAgICog
QHBhcmFtIHRhcmdldCB0aGUgdGFyZ2V0IGJ1ZmZlciBmb3IgZXh0cmFjdGlvbgogICAgKiBAcGFy
YW0gdGFyZ2V0TGVuZ3RoIHRoZSBsZW5ndGggb2YgdGhlIHRhcmdldCBidWZmZXIKLSAgICogSWYg
PFRUPnRhcmdldDwvVFQ+IGlzIE5VTEwsIHRoZW4gdGhlIG51bWJlciBvZiBieXRlcyByZXF1aXJl
ZCBmb3IKLSAgICogPFRUPnRhcmdldDwvVFQ+IGlzIHJldHVybmVkLgorICAgKiBJZiBgdGFyZ2V0
YCBpcyBOVUxMLCB0aGVuIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVxdWlyZWQgZm9yCisgICAqIGB0
YXJnZXRgIGlzIHJldHVybmVkLgogICAgKiBAcmV0dXJuIHRoZSBvdXRwdXQgc3RyaW5nIGxlbmd0
aCwgbm90IGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgTlVMCiAgICAqIEBzdGFibGUgSUNVIDIu
MAogICAgKi8KQEAgLTE1ODAsNyArMTU4MSw3IEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBVbmljb2Rl
U3RyaW5nIDogcHVibGljIFJlcGxhY2VhYmxlCiAKICAgLyoqCiAgICAqIENvcHkgdGhlIGNoYXJh
Y3RlcnMgaW4gdGhlIHJhbmdlCi0gICAqIFs8dHQ+c3RhcnQ8L1RUPiwgPHR0PnN0YXJ0ICsgbGVu
Z3RoPC9UVD4pIGludG8gYW4gYXJyYXkgb2YgY2hhcmFjdGVycworICAgKiBbYHN0YXJ0YCwgYHN0
YXJ0ICsgbGVuZ3RoYCkgaW50byBhbiBhcnJheSBvZiBjaGFyYWN0ZXJzCiAgICAqIGluIGEgc3Bl
Y2lmaWVkIGNvZGVwYWdlLgogICAgKiBUaGUgb3V0cHV0IHN0cmluZyBpcyBOVUwtdGVybWluYXRl
ZC4KICAgICoKQEAgLTE1OTQsMTEgKzE1OTUsMTEgQEAgY2xhc3MgVV9DT01NT05fQVBJIFVuaWNv
ZGVTdHJpbmcgOiBwdWJsaWMgUmVwbGFjZWFibGUKICAgICogQHBhcmFtIHRhcmdldCB0aGUgdGFy
Z2V0IGJ1ZmZlciBmb3IgZXh0cmFjdGlvbgogICAgKiBAcGFyYW0gY29kZXBhZ2UgdGhlIGRlc2ly
ZWQgY29kZXBhZ2UgZm9yIHRoZSBjaGFyYWN0ZXJzLiAgMCBoYXMKICAgICogdGhlIHNwZWNpYWwg
bWVhbmluZyBvZiB0aGUgZGVmYXVsdCBjb2RlcGFnZQotICAgKiBJZiA8Y29kZT5jb2RlcGFnZTwv
Y29kZT4gaXMgYW4gZW1wdHkgc3RyaW5nICg8Y29kZT4iIjwvY29kZT4pLAorICAgKiBJZiBgY29k
ZXBhZ2VgIGlzIGFuIGVtcHR5IHN0cmluZyAoYCIiYCksCiAgICAqIHRoZW4gYSBzaW1wbGUgY29u
dmVyc2lvbiBpcyBwZXJmb3JtZWQgb24gdGhlIGNvZGVwYWdlLWludmFyaWFudAogICAgKiBzdWJz
ZXQgKCJpbnZhcmlhbnQgY2hhcmFjdGVycyIpIG9mIHRoZSBwbGF0Zm9ybSBlbmNvZGluZy4gU2Vl
IHV0eXBlcy5oLgotICAgKiBJZiA8VFQ+dGFyZ2V0PC9UVD4gaXMgTlVMTCwgdGhlbiB0aGUgbnVt
YmVyIG9mIGJ5dGVzIHJlcXVpcmVkIGZvcgotICAgKiA8VFQ+dGFyZ2V0PC9UVD4gaXMgcmV0dXJu
ZWQuIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgdGFyZ2V0IGlzIGJpZyBlbm91Z2gKKyAgICogSWYg
YHRhcmdldGAgaXMgTlVMTCwgdGhlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlcXVpcmVkIGZvcgor
ICAgKiBgdGFyZ2V0YCBpcyByZXR1cm5lZC4gSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSB0YXJnZXQg
aXMgYmlnIGVub3VnaAogICAgKiB0byBmaXQgYWxsIG9mIHRoZSBjaGFyYWN0ZXJzLgogICAgKiBA
cmV0dXJuIHRoZSBvdXRwdXQgc3RyaW5nIGxlbmd0aCwgbm90IGluY2x1ZGluZyB0aGUgdGVybWlu
YXRpbmcgTlVMCiAgICAqIEBzdGFibGUgSUNVIDIuMApAQCAtMTYxMCw5ICsxNjExLDkgQEAgY2xh
c3MgVV9DT01NT05fQVBJIFVuaWNvZGVTdHJpbmcgOiBwdWJsaWMgUmVwbGFjZWFibGUKIAogICAv
KioKICAgICogQ29weSB0aGUgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UKLSAgICogWzx0dD5zdGFy
dDwvVFQ+LCA8dHQ+c3RhcnQgKyBsZW5ndGg8L1RUPikgaW50byBhbiBhcnJheSBvZiBjaGFyYWN0
ZXJzCisgICAqIFtgc3RhcnRgLCBgc3RhcnQgKyBsZW5ndGhgKSBpbnRvIGFuIGFycmF5IG9mIGNo
YXJhY3RlcnMKICAgICogaW4gYSBzcGVjaWZpZWQgY29kZXBhZ2UuCi0gICAqIFRoaXMgZnVuY3Rp
b24gZG9lcyBub3Qgd3JpdGUgYW55IG1vcmUgdGhhbiA8Y29kZT50YXJnZXRMZW5ndGg8L2NvZGU+
CisgICAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgd3JpdGUgYW55IG1vcmUgdGhhbiBgdGFyZ2V0
TGVuZ3RoYAogICAgKiBjaGFyYWN0ZXJzIGJ1dCByZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGVu
dGlyZSBvdXRwdXQgc3RyaW5nCiAgICAqIHNvIHRoYXQgb25lIGNhbiBhbGxvY2F0ZSBhIGxhcmdl
ciBidWZmZXIgYW5kIGNhbGwgdGhlIGZ1bmN0aW9uIGFnYWluCiAgICAqIGlmIG5lY2Vzc2FyeS4K
QEAgLTE2MjksMTEgKzE2MzAsMTEgQEAgY2xhc3MgVV9DT01NT05fQVBJIFVuaWNvZGVTdHJpbmcg
OiBwdWJsaWMgUmVwbGFjZWFibGUKICAgICogQHBhcmFtIHRhcmdldExlbmd0aCB0aGUgbGVuZ3Ro
IG9mIHRoZSB0YXJnZXQgYnVmZmVyCiAgICAqIEBwYXJhbSBjb2RlcGFnZSB0aGUgZGVzaXJlZCBj
b2RlcGFnZSBmb3IgdGhlIGNoYXJhY3RlcnMuICAwIGhhcwogICAgKiB0aGUgc3BlY2lhbCBtZWFu
aW5nIG9mIHRoZSBkZWZhdWx0IGNvZGVwYWdlCi0gICAqIElmIDxjb2RlPmNvZGVwYWdlPC9jb2Rl
PiBpcyBhbiBlbXB0eSBzdHJpbmcgKDxjb2RlPiIiPC9jb2RlPiksCisgICAqIElmIGBjb2RlcGFn
ZWAgaXMgYW4gZW1wdHkgc3RyaW5nIChgIiJgKSwKICAgICogdGhlbiBhIHNpbXBsZSBjb252ZXJz
aW9uIGlzIHBlcmZvcm1lZCBvbiB0aGUgY29kZXBhZ2UtaW52YXJpYW50CiAgICAqIHN1YnNldCAo
ImludmFyaWFudCBjaGFyYWN0ZXJzIikgb2YgdGhlIHBsYXRmb3JtIGVuY29kaW5nLiBTZWUgdXR5
cGVzLmguCi0gICAqIElmIDxUVD50YXJnZXQ8L1RUPiBpcyBOVUxMLCB0aGVuIHRoZSBudW1iZXIg
b2YgYnl0ZXMgcmVxdWlyZWQgZm9yCi0gICAqIDxUVD50YXJnZXQ8L1RUPiBpcyByZXR1cm5lZC4K
KyAgICogSWYgYHRhcmdldGAgaXMgTlVMTCwgdGhlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlcXVp
cmVkIGZvcgorICAgKiBgdGFyZ2V0YCBpcyByZXR1cm5lZC4KICAgICogQHJldHVybiB0aGUgb3V0
cHV0IHN0cmluZyBsZW5ndGgsIG5vdCBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIE5VTAogICAg
KiBAc3RhYmxlIElDVSAyLjAKICAgICovCkBAIC0xODQ2LDcgKzE4NDcsNyBAQCBjbGFzcyBVX0NP
TU1PTl9BUEkgVW5pY29kZVN0cmluZyA6IHB1YmxpYyBSZXBsYWNlYWJsZQogCiAgIC8qKgogICAg
KiBBc3NpZ25tZW50IG9wZXJhdG9yLiAgUmVwbGFjZSB0aGUgY2hhcmFjdGVycyBpbiB0aGlzIFVu
aWNvZGVTdHJpbmcKLSAgICogd2l0aCB0aGUgY2hhcmFjdGVycyBmcm9tIDxUVD5zcmNUZXh0PC9U
VD4uCisgICAqIHdpdGggdGhlIGNoYXJhY3RlcnMgZnJvbSBgc3JjVGV4dGAuCiAgICAqCiAgICAq
IFN0YXJ0aW5nIHdpdGggSUNVIDIuNCwgdGhlIGFzc2lnbm1lbnQgb3BlcmF0b3IgYW5kIHRoZSBj
b3B5IGNvbnN0cnVjdG9yCiAgICAqIGFsbG9jYXRlIGEgbmV3IGJ1ZmZlciBhbmQgY29weSB0aGUg
YnVmZmVyIGNvbnRlbnRzIGV2ZW4gZm9yIHJlYWRvbmx5IGFsaWFzZXMuCkBAIC0xODY3LDcgKzE4
NjgsNyBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgVW5pY29kZVN0cmluZyA6IHB1YmxpYyBSZXBsYWNl
YWJsZQogICAvKioKICAgICogQWxtb3N0IHRoZSBzYW1lIGFzIHRoZSBhc3NpZ25tZW50IG9wZXJh
dG9yLgogICAgKiBSZXBsYWNlIHRoZSBjaGFyYWN0ZXJzIGluIHRoaXMgVW5pY29kZVN0cmluZwot
ICAgKiB3aXRoIHRoZSBjaGFyYWN0ZXJzIGZyb20gPGNvZGU+c3JjVGV4dDwvY29kZT4uCisgICAq
IHdpdGggdGhlIGNoYXJhY3RlcnMgZnJvbSBgc3JjVGV4dGAuCiAgICAqCiAgICAqIFRoaXMgZnVu
Y3Rpb24gd29ya3MgdGhlIHNhbWUgYXMgdGhlIGFzc2lnbm1lbnQgb3BlcmF0b3IKICAgICogZm9y
IGFsbCBzdHJpbmdzIGV4Y2VwdCBmb3Igb25lcyB0aGF0IGFyZSByZWFkb25seSBhbGlhc2VzLgpA
QCAtMTg5OSwyMiArMTkwMCw3IEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBVbmljb2RlU3RyaW5nIDog
cHVibGljIFJlcGxhY2VhYmxlCiAgICAqIEByZXR1cm4gKnRoaXMKICAgICogQHN0YWJsZSBJQ1Ug
NTYKICAgICovCi0gIFVuaWNvZGVTdHJpbmcgJm9wZXJhdG9yPShVbmljb2RlU3RyaW5nICYmc3Jj
KSBVX05PRVhDRVBUIHsKLSAgICByZXR1cm4gbW92ZUZyb20oc3JjKTsKLSAgfQotCi0gIC8vIGRv
IG5vdCB1c2UgI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJIGZvciBtb3ZlRnJvbSwgbmVlZGVkIGJ5
IG5vbi1kcmFmdCBBUEkKLSAgLyoqCi0gICAqIE1vdmUgYXNzaWdubWVudDsgbWlnaHQgbGVhdmUg
c3JjIGluIGJvZ3VzIHN0YXRlLgotICAgKiBUaGlzIHN0cmluZyB3aWxsIGhhdmUgdGhlIHNhbWUg
Y29udGVudHMgYW5kIHN0YXRlIHRoYXQgdGhlIHNvdXJjZSBzdHJpbmcgaGFkLgotICAgKiBUaGUg
YmVoYXZpb3IgaXMgdW5kZWZpbmVkIGlmICp0aGlzIGFuZCBzcmMgYXJlIHRoZSBzYW1lIG9iamVj
dC4KLSAgICoKLSAgICogQ2FuIGJlIGNhbGxlZCBleHBsaWNpdGx5LCBkb2VzIG5vdCBuZWVkIEMr
KzExIHN1cHBvcnQuCi0gICAqIEBwYXJhbSBzcmMgc291cmNlIHN0cmluZwotICAgKiBAcmV0dXJu
ICp0aGlzCi0gICAqIEBkcmFmdCBJQ1UgNTYKLSAgICovCi0gIFVuaWNvZGVTdHJpbmcgJm1vdmVG
cm9tKFVuaWNvZGVTdHJpbmcgJnNyYykgVV9OT0VYQ0VQVDsKKyAgVW5pY29kZVN0cmluZyAmb3Bl
cmF0b3I9KFVuaWNvZGVTdHJpbmcgJiZzcmMpIFVfTk9FWENFUFQ7CiAKICAgLyoqCiAgICAqIFN3
YXAgc3RyaW5ncy4KQEAgLTE5MjksMTQgKzE5MTUsMTQgQEAgY2xhc3MgVV9DT01NT05fQVBJIFVu
aWNvZGVTdHJpbmcgOiBwdWJsaWMgUmVwbGFjZWFibGUKICAgICogQHBhcmFtIHMyIHdpbGwgZ2V0
IHMxJ3MgY29udGVudHMgYW5kIHN0YXRlCiAgICAqIEBzdGFibGUgSUNVIDU2CiAgICAqLwotICBm
cmllbmQgVV9DT01NT05fQVBJIGlubGluZSB2b2lkIFVfRVhQT1JUMgorICBmcmllbmQgaW5saW5l
IHZvaWQgVV9FWFBPUlQyCiAgIHN3YXAoVW5pY29kZVN0cmluZyAmczEsIFVuaWNvZGVTdHJpbmcg
JnMyKSBVX05PRVhDRVBUIHsKICAgICBzMS5zd2FwKHMyKTsKICAgfQogCiAgIC8qKgogICAgKiBB
c3NpZ25tZW50IG9wZXJhdG9yLiAgUmVwbGFjZSB0aGUgY2hhcmFjdGVycyBpbiB0aGlzIFVuaWNv
ZGVTdHJpbmcKLSAgICogd2l0aCB0aGUgY29kZSB1bml0IDxUVD5jaDwvVFQ+LgorICAgKiB3aXRo
IHRoZSBjb2RlIHVuaXQgYGNoYC4KICAgICogQHBhcmFtIGNoIHRoZSBjb2RlIHVuaXQgdG8gcmVw
bGFjZQogICAgKiBAcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoaXMKICAgICogQHN0YWJsZSBJQ1Ug
Mi4wCkBAIC0xOTQ1LDcgKzE5MzEsNyBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgVW5pY29kZVN0cmlu
ZyA6IHB1YmxpYyBSZXBsYWNlYWJsZQogCiAgIC8qKgogICAgKiBBc3NpZ25tZW50IG9wZXJhdG9y
LiAgUmVwbGFjZSB0aGUgY2hhcmFjdGVycyBpbiB0aGlzIFVuaWNvZGVTdHJpbmcKLSAgICogd2l0
aCB0aGUgY29kZSBwb2ludCA8VFQ+Y2g8L1RUPi4KKyAgICogd2l0aCB0aGUgY29kZSBwb2ludCBg
Y2hgLgogICAgKiBAcGFyYW0gY2ggdGhlIGNvZGUgcG9pbnQgdG8gcmVwbGFjZQogICAgKiBAcmV0
dXJuIGEgcmVmZXJlbmNlIHRvIHRoaXMKICAgICogQHN0YWJsZSBJQ1UgMi4wCkBAIC0xOTU0LDEx
ICsxOTQwLDExIEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBVbmljb2RlU3RyaW5nIDogcHVibGljIFJl
cGxhY2VhYmxlCiAKICAgLyoqCiAgICAqIFNldCB0aGUgdGV4dCBpbiB0aGUgVW5pY29kZVN0cmlu
ZyBvYmplY3QgdG8gdGhlIGNoYXJhY3RlcnMKLSAgICogaW4gPFRUPnNyY1RleHQ8L1RUPiBpbiB0
aGUgcmFuZ2UKLSAgICogWzxUVD5zcmNTdGFydDwvVFQ+LCA8VFQ+c3JjVGV4dC5sZW5ndGgoKTwv
VFQ+KS4KLSAgICogPFRUPnNyY1RleHQ8L1RUPiBpcyBub3QgbW9kaWZpZWQuCisgICAqIGluIGBz
cmNUZXh0YCBpbiB0aGUgcmFuZ2UKKyAgICogW2BzcmNTdGFydGAsIGBzcmNUZXh0Lmxlbmd0aCgp
YCkuCisgICAqIGBzcmNUZXh0YCBpcyBub3QgbW9kaWZpZWQuCiAgICAqIEBwYXJhbSBzcmNUZXh0
IHRoZSBzb3VyY2UgZm9yIHRoZSBuZXcgY2hhcmFjdGVycwotICAgKiBAcGFyYW0gc3JjU3RhcnQg
dGhlIG9mZnNldCBpbnRvIDxUVD5zcmNUZXh0PC9UVD4gd2hlcmUgbmV3IGNoYXJhY3RlcnMKKyAg
ICogQHBhcmFtIHNyY1N0YXJ0IHRoZSBvZmZzZXQgaW50byBgc3JjVGV4dGAgd2hlcmUgbmV3IGNo
YXJhY3RlcnMKICAgICogd2lsbCBiZSBvYnRhaW5lZAogICAgKiBAcmV0dXJuIGEgcmVmZXJlbmNl
IHRvIHRoaXMKICAgICogQHN0YWJsZSBJQ1UgMi4yCkBAIC0xOTY4LDEzICsxOTU0LDEzIEBAIGNs
YXNzIFVfQ09NTU9OX0FQSSBVbmljb2RlU3RyaW5nIDogcHVibGljIFJlcGxhY2VhYmxlCiAKICAg
LyoqCiAgICAqIFNldCB0aGUgdGV4dCBpbiB0aGUgVW5pY29kZVN0cmluZyBvYmplY3QgdG8gdGhl
IGNoYXJhY3RlcnMKLSAgICogaW4gPFRUPnNyY1RleHQ8L1RUPiBpbiB0aGUgcmFuZ2UKLSAgICog
WzxUVD5zcmNTdGFydDwvVFQ+LCA8VFQ+c3JjU3RhcnQgKyBzcmNMZW5ndGg8L1RUPikuCi0gICAq
IDxUVD5zcmNUZXh0PC9UVD4gaXMgbm90IG1vZGlmaWVkLgorICAgKiBpbiBgc3JjVGV4dGAgaW4g
dGhlIHJhbmdlCisgICAqIFtgc3JjU3RhcnRgLCBgc3JjU3RhcnQgKyBzcmNMZW5ndGhgKS4KKyAg
ICogYHNyY1RleHRgIGlzIG5vdCBtb2RpZmllZC4KICAgICogQHBhcmFtIHNyY1RleHQgdGhlIHNv
dXJjZSBmb3IgdGhlIG5ldyBjaGFyYWN0ZXJzCi0gICAqIEBwYXJhbSBzcmNTdGFydCB0aGUgb2Zm
c2V0IGludG8gPFRUPnNyY1RleHQ8L1RUPiB3aGVyZSBuZXcgY2hhcmFjdGVycworICAgKiBAcGFy
YW0gc3JjU3RhcnQgdGhlIG9mZnNldCBpbnRvIGBzcmNUZXh0YCB3aGVyZSBuZXcgY2hhcmFjdGVy
cwogICAgKiB3aWxsIGJlIG9idGFpbmVkCi0gICAqIEBwYXJhbSBzcmNMZW5ndGggdGhlIG51bWJl
ciBvZiBjaGFyYWN0ZXJzIGluIDxUVD5zcmNUZXh0PC9UVD4gaW4gdGhlCisgICAqIEBwYXJhbSBz
cmNMZW5ndGggdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIGBzcmNUZXh0YCBpbiB0aGUKICAg
ICogcmVwbGFjZSBzdHJpbmcuCiAgICAqIEByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhpcwogICAg
KiBAc3RhYmxlIElDVSAyLjAKQEAgLTE5ODUsOCArMTk3MSw4IEBAIGNsYXNzIFVfQ09NTU9OX0FQ
SSBVbmljb2RlU3RyaW5nIDogcHVibGljIFJlcGxhY2VhYmxlCiAKICAgLyoqCiAgICAqIFNldCB0
aGUgdGV4dCBpbiB0aGUgVW5pY29kZVN0cmluZyBvYmplY3QgdG8gdGhlIGNoYXJhY3RlcnMgaW4K
LSAgICogPFRUPnNyY1RleHQ8L1RUPi4KLSAgICogPFRUPnNyY1RleHQ8L1RUPiBpcyBub3QgbW9k
aWZpZWQuCisgICAqIGBzcmNUZXh0YC4KKyAgICogYHNyY1RleHRgIGlzIG5vdCBtb2RpZmllZC4K
ICAgICogQHBhcmFtIHNyY1RleHQgdGhlIHNvdXJjZSBmb3IgdGhlIG5ldyBjaGFyYWN0ZXJzCiAg
ICAqIEByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhpcwogICAgKiBAc3RhYmxlIElDVSAyLjAKQEAg
LTE5OTUsNyArMTk4MSw3IEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBVbmljb2RlU3RyaW5nIDogcHVi
bGljIFJlcGxhY2VhYmxlCiAKICAgLyoqCiAgICAqIFNldCB0aGUgY2hhcmFjdGVycyBpbiB0aGUg
VW5pY29kZVN0cmluZyBvYmplY3QgdG8gdGhlIGNoYXJhY3RlcnMKLSAgICogaW4gPFRUPnNyY0No
YXJzPC9UVD4uIDxUVD5zcmNDaGFyczwvVFQ+IGlzIG5vdCBtb2RpZmllZC4KKyAgICogaW4gYHNy
Y0NoYXJzYC4gYHNyY0NoYXJzYCBpcyBub3QgbW9kaWZpZWQuCiAgICAqIEBwYXJhbSBzcmNDaGFy
cyB0aGUgc291cmNlIGZvciB0aGUgbmV3IGNoYXJhY3RlcnMKICAgICogQHBhcmFtIHNyY0xlbmd0
aCB0aGUgbnVtYmVyIG9mIFVuaWNvZGUgY2hhcmFjdGVycyBpbiBzcmNDaGFycy4KICAgICogQHJl
dHVybiBhIHJlZmVyZW5jZSB0byB0aGlzCkBAIC0yMDA2LDIzICsxOTkyLDIzIEBAIGNsYXNzIFVf
Q09NTU9OX0FQSSBVbmljb2RlU3RyaW5nIDogcHVibGljIFJlcGxhY2VhYmxlCiAKICAgLyoqCiAg
ICAqIFNldCB0aGUgY2hhcmFjdGVycyBpbiB0aGUgVW5pY29kZVN0cmluZyBvYmplY3QgdG8gdGhl
IGNvZGUgdW5pdAotICAgKiA8VFQ+c3JjQ2hhcjwvVFQ+LgorICAgKiBgc3JjQ2hhcmAuCiAgICAq
IEBwYXJhbSBzcmNDaGFyIHRoZSBjb2RlIHVuaXQgd2hpY2ggYmVjb21lcyB0aGUgVW5pY29kZVN0
cmluZydzIGNoYXJhY3RlcgogICAgKiBjb250ZW50CiAgICAqIEByZXR1cm4gYSByZWZlcmVuY2Ug
dG8gdGhpcwogICAgKiBAc3RhYmxlIElDVSAyLjAKICAgICovCi0gIFVuaWNvZGVTdHJpbmcmIHNl
dFRvKGNoYXIxNl90IHNyY0NoYXIpOworICBpbmxpbmUgVW5pY29kZVN0cmluZyYgc2V0VG8oY2hh
cjE2X3Qgc3JjQ2hhcik7CiAKICAgLyoqCiAgICAqIFNldCB0aGUgY2hhcmFjdGVycyBpbiB0aGUg
VW5pY29kZVN0cmluZyBvYmplY3QgdG8gdGhlIGNvZGUgcG9pbnQKLSAgICogPFRUPnNyY0NoYXI8
L1RUPi4KKyAgICogYHNyY0NoYXJgLgogICAgKiBAcGFyYW0gc3JjQ2hhciB0aGUgY29kZSBwb2lu
dCB3aGljaCBiZWNvbWVzIHRoZSBVbmljb2RlU3RyaW5nJ3MgY2hhcmFjdGVyCiAgICAqIGNvbnRl
bnQKICAgICogQHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGlzCiAgICAqIEBzdGFibGUgSUNVIDIu
MAogICAgKi8KLSAgVW5pY29kZVN0cmluZyYgc2V0VG8oVUNoYXIzMiBzcmNDaGFyKTsKKyAgaW5s
aW5lIFVuaWNvZGVTdHJpbmcmIHNldFRvKFVDaGFyMzIgc3JjQ2hhcik7CiAKICAgLyoqCiAgICAq
IEFsaWFzaW5nIHNldFRvKCkgZnVuY3Rpb24sIGFuYWxvZ291cyB0byB0aGUgcmVhZG9ubHktYWxp
YXNpbmcgY2hhcjE2X3QqIGNvbnN0cnVjdG9yLgpAQCAtMjAzOCwxMiArMjAyNCwxMiBAQCBjbGFz
cyBVX0NPTU1PTl9BUEkgVW5pY29kZVN0cmluZyA6IHB1YmxpYyBSZXBsYWNlYWJsZQogICAgKiBX
aGVuIHVzaW5nIGZhc3RDb3B5RnJvbSgpLCB0aGUgdGV4dCB3aWxsIGJlIGFsaWFzZWQgYWdhaW4s
CiAgICAqIHNvIHRoYXQgYm90aCBzdHJpbmdzIHRoZW4gYWxpYXMgdGhlIHNhbWUgcmVhZG9ubHkt
dGV4dC4KICAgICoKLSAgICogQHBhcmFtIGlzVGVybWluYXRlZCBzcGVjaWZpZXMgaWYgPGNvZGU+
dGV4dDwvY29kZT4gaXMgPGNvZGU+TlVMPC9jb2RlPi10ZXJtaW5hdGVkLgotICAgKiAgICAgICAg
ICAgICAgICAgICAgIFRoaXMgbXVzdCBiZSB0cnVlIGlmIDxjb2RlPnRleHRMZW5ndGg9PS0xPC9j
b2RlPi4KKyAgICogQHBhcmFtIGlzVGVybWluYXRlZCBzcGVjaWZpZXMgaWYgYHRleHRgIGlzIGBO
VUxgLXRlcm1pbmF0ZWQuCisgICAqICAgICAgICAgICAgICAgICAgICAgVGhpcyBtdXN0IGJlIHRy
dWUgaWYgYHRleHRMZW5ndGg9PS0xYC4KICAgICogQHBhcmFtIHRleHQgVGhlIGNoYXJhY3RlcnMg
dG8gYWxpYXMgZm9yIHRoZSBVbmljb2RlU3RyaW5nLgotICAgKiBAcGFyYW0gdGV4dExlbmd0aCBU
aGUgbnVtYmVyIG9mIFVuaWNvZGUgY2hhcmFjdGVycyBpbiA8Y29kZT50ZXh0PC9jb2RlPiB0byBh
bGlhcy4KKyAgICogQHBhcmFtIHRleHRMZW5ndGggVGhlIG51bWJlciBvZiBVbmljb2RlIGNoYXJh
Y3RlcnMgaW4gYHRleHRgIHRvIGFsaWFzLgogICAgKiAgICAgICAgICAgICAgICAgICBJZiAtMSwg
dGhlbiB0aGlzIGNvbnN0cnVjdG9yIHdpbGwgZGV0ZXJtaW5lIHRoZSBsZW5ndGgKLSAgICogICAg
ICAgICAgICAgICAgICAgYnkgY2FsbGluZyA8Y29kZT51X3N0cmxlbigpPC9jb2RlPi4KKyAgICog
ICAgICAgICAgICAgICAgICAgYnkgY2FsbGluZyBgdV9zdHJsZW4oKWAuCiAgICAqIEByZXR1cm4g
YSByZWZlcmVuY2UgdG8gdGhpcwogICAgKiBAc3RhYmxlIElDVSAyLjAKICAgICovCkBAIC0yMDY1
LDggKzIwNTEsOCBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgVW5pY29kZVN0cmluZyA6IHB1YmxpYyBS
ZXBsYWNlYWJsZQogICAgKiBhcyB0aGUgc3RyaW5nIGJ1ZmZlciBpdHNlbGYgYW5kIHdpbGwgaW4g
dGhpcyBjYXNlIG5vdCBjb3B5IHRoZSBjb250ZW50cy4KICAgICoKICAgICogQHBhcmFtIGJ1ZmZl
ciBUaGUgY2hhcmFjdGVycyB0byBhbGlhcyBmb3IgdGhlIFVuaWNvZGVTdHJpbmcuCi0gICAqIEBw
YXJhbSBidWZmTGVuZ3RoIFRoZSBudW1iZXIgb2YgVW5pY29kZSBjaGFyYWN0ZXJzIGluIDxjb2Rl
PmJ1ZmZlcjwvY29kZT4gdG8gYWxpYXMuCi0gICAqIEBwYXJhbSBidWZmQ2FwYWNpdHkgVGhlIHNp
emUgb2YgPGNvZGU+YnVmZmVyPC9jb2RlPiBpbiBjaGFyMTZfdHMuCisgICAqIEBwYXJhbSBidWZm
TGVuZ3RoIFRoZSBudW1iZXIgb2YgVW5pY29kZSBjaGFyYWN0ZXJzIGluIGBidWZmZXJgIHRvIGFs
aWFzLgorICAgKiBAcGFyYW0gYnVmZkNhcGFjaXR5IFRoZSBzaXplIG9mIGBidWZmZXJgIGluIGNo
YXIxNl90cy4KICAgICogQHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGlzCiAgICAqIEBzdGFibGUg
SUNVIDIuMAogICAgKi8KQEAgLTIxMzAsNyArMjExNiw3IEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBV
bmljb2RlU3RyaW5nIDogcHVibGljIFJlcGxhY2VhYmxlCiAgIC8qIEFwcGVuZCBvcGVyYXRpb25z
ICovCiAKICAgLyoqCi0gICAqIEFwcGVuZCBvcGVyYXRvci4gQXBwZW5kIHRoZSBjb2RlIHVuaXQg
PFRUPmNoPC9UVD4gdG8gdGhlIFVuaWNvZGVTdHJpbmcKKyAgICogQXBwZW5kIG9wZXJhdG9yLiBB
cHBlbmQgdGhlIGNvZGUgdW5pdCBgY2hgIHRvIHRoZSBVbmljb2RlU3RyaW5nCiAgICAqIG9iamVj
dC4KICAgICogQHBhcmFtIGNoIHRoZSBjb2RlIHVuaXQgdG8gYmUgYXBwZW5kZWQKICAgICogQHJl
dHVybiBhIHJlZmVyZW5jZSB0byB0aGlzCkBAIC0yMTM5LDcgKzIxMjUsNyBAQCBjbGFzcyBVX0NP
TU1PTl9BUEkgVW5pY29kZVN0cmluZyA6IHB1YmxpYyBSZXBsYWNlYWJsZQogIGlubGluZSAgVW5p
Y29kZVN0cmluZyYgb3BlcmF0b3IrPSAoY2hhcjE2X3QgY2gpOwogCiAgIC8qKgotICAgKiBBcHBl
bmQgb3BlcmF0b3IuIEFwcGVuZCB0aGUgY29kZSBwb2ludCA8VFQ+Y2g8L1RUPiB0byB0aGUgVW5p
Y29kZVN0cmluZworICAgKiBBcHBlbmQgb3BlcmF0b3IuIEFwcGVuZCB0aGUgY29kZSBwb2ludCBg
Y2hgIHRvIHRoZSBVbmljb2RlU3RyaW5nCiAgICAqIG9iamVjdC4KICAgICogQHBhcmFtIGNoIHRo
ZSBjb2RlIHBvaW50IHRvIGJlIGFwcGVuZGVkCiAgICAqIEByZXR1cm4gYSByZWZlcmVuY2UgdG8g
dGhpcwpAQCAtMjE0OCw4ICsyMTM0LDggQEAgY2xhc3MgVV9DT01NT05fQVBJIFVuaWNvZGVTdHJp
bmcgOiBwdWJsaWMgUmVwbGFjZWFibGUKICBpbmxpbmUgIFVuaWNvZGVTdHJpbmcmIG9wZXJhdG9y
Kz0gKFVDaGFyMzIgY2gpOwogCiAgIC8qKgotICAgKiBBcHBlbmQgb3BlcmF0b3IuIEFwcGVuZCB0
aGUgY2hhcmFjdGVycyBpbiA8VFQ+c3JjVGV4dDwvVFQ+IHRvIHRoZQotICAgKiBVbmljb2RlU3Ry
aW5nIG9iamVjdC4gPFRUPnNyY1RleHQ8L1RUPiBpcyBub3QgbW9kaWZpZWQuCisgICAqIEFwcGVu
ZCBvcGVyYXRvci4gQXBwZW5kIHRoZSBjaGFyYWN0ZXJzIGluIGBzcmNUZXh0YCB0byB0aGUKKyAg
ICogVW5pY29kZVN0cmluZyBvYmplY3QuIGBzcmNUZXh0YCBpcyBub3QgbW9kaWZpZWQuCiAgICAq
IEBwYXJhbSBzcmNUZXh0IHRoZSBzb3VyY2UgZm9yIHRoZSBuZXcgY2hhcmFjdGVycwogICAgKiBA
cmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoaXMKICAgICogQHN0YWJsZSBJQ1UgMi4wCkBAIC0yMTU4
LDE0ICsyMTQ0LDE0IEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBVbmljb2RlU3RyaW5nIDogcHVibGlj
IFJlcGxhY2VhYmxlCiAKICAgLyoqCiAgICAqIEFwcGVuZCB0aGUgY2hhcmFjdGVycwotICAgKiBp
biA8VFQ+c3JjVGV4dDwvVFQ+IGluIHRoZSByYW5nZQotICAgKiBbPFRUPnNyY1N0YXJ0PC9UVD4s
IDxUVD5zcmNTdGFydCArIHNyY0xlbmd0aDwvVFQ+KSB0byB0aGUKLSAgICogVW5pY29kZVN0cmlu
ZyBvYmplY3QgYXQgb2Zmc2V0IDxUVD5zdGFydDwvVFQ+LiA8VFQ+c3JjVGV4dDwvVFQ+CisgICAq
IGluIGBzcmNUZXh0YCBpbiB0aGUgcmFuZ2UKKyAgICogW2BzcmNTdGFydGAsIGBzcmNTdGFydCAr
IHNyY0xlbmd0aGApIHRvIHRoZQorICAgKiBVbmljb2RlU3RyaW5nIG9iamVjdCBhdCBvZmZzZXQg
YHN0YXJ0YC4gYHNyY1RleHRgCiAgICAqIGlzIG5vdCBtb2RpZmllZC4KICAgICogQHBhcmFtIHNy
Y1RleHQgdGhlIHNvdXJjZSBmb3IgdGhlIG5ldyBjaGFyYWN0ZXJzCi0gICAqIEBwYXJhbSBzcmNT
dGFydCB0aGUgb2Zmc2V0IGludG8gPFRUPnNyY1RleHQ8L1RUPiB3aGVyZSBuZXcgY2hhcmFjdGVy
cworICAgKiBAcGFyYW0gc3JjU3RhcnQgdGhlIG9mZnNldCBpbnRvIGBzcmNUZXh0YCB3aGVyZSBu
ZXcgY2hhcmFjdGVycwogICAgKiB3aWxsIGJlIG9idGFpbmVkCi0gICAqIEBwYXJhbSBzcmNMZW5n
dGggdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIDxUVD5zcmNUZXh0PC9UVD4gaW4KKyAgICog
QHBhcmFtIHNyY0xlbmd0aCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gYHNyY1RleHRgIGlu
CiAgICAqIHRoZSBhcHBlbmQgc3RyaW5nCiAgICAqIEByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhp
cwogICAgKiBAc3RhYmxlIElDVSAyLjAKQEAgLTIxNzUsOCArMjE2MSw4IEBAIGNsYXNzIFVfQ09N
TU9OX0FQSSBVbmljb2RlU3RyaW5nIDogcHVibGljIFJlcGxhY2VhYmxlCiAgICAgICAgICAgICBp
bnQzMl90IHNyY0xlbmd0aCk7CiAKICAgLyoqCi0gICAqIEFwcGVuZCB0aGUgY2hhcmFjdGVycyBp
biA8VFQ+c3JjVGV4dDwvVFQ+IHRvIHRoZSBVbmljb2RlU3RyaW5nIG9iamVjdC4KLSAgICogPFRU
PnNyY1RleHQ8L1RUPiBpcyBub3QgbW9kaWZpZWQuCisgICAqIEFwcGVuZCB0aGUgY2hhcmFjdGVy
cyBpbiBgc3JjVGV4dGAgdG8gdGhlIFVuaWNvZGVTdHJpbmcgb2JqZWN0LgorICAgKiBgc3JjVGV4
dGAgaXMgbm90IG1vZGlmaWVkLgogICAgKiBAcGFyYW0gc3JjVGV4dCB0aGUgc291cmNlIGZvciB0
aGUgbmV3IGNoYXJhY3RlcnMKICAgICogQHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGlzCiAgICAq
IEBzdGFibGUgSUNVIDIuMApAQCAtMjE4NCwxNSArMjE3MCwxNSBAQCBjbGFzcyBVX0NPTU1PTl9B
UEkgVW5pY29kZVN0cmluZyA6IHB1YmxpYyBSZXBsYWNlYWJsZQogICBpbmxpbmUgVW5pY29kZVN0
cmluZyYgYXBwZW5kKGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNyY1RleHQpOwogCiAgIC8qKgotICAg
KiBBcHBlbmQgdGhlIGNoYXJhY3RlcnMgaW4gPFRUPnNyY0NoYXJzPC9UVD4gaW4gdGhlIHJhbmdl
Ci0gICAqIFs8VFQ+c3JjU3RhcnQ8L1RUPiwgPFRUPnNyY1N0YXJ0ICsgc3JjTGVuZ3RoPC9UVD4p
IHRvIHRoZSBVbmljb2RlU3RyaW5nCisgICAqIEFwcGVuZCB0aGUgY2hhcmFjdGVycyBpbiBgc3Jj
Q2hhcnNgIGluIHRoZSByYW5nZQorICAgKiBbYHNyY1N0YXJ0YCwgYHNyY1N0YXJ0ICsgc3JjTGVu
Z3RoYCkgdG8gdGhlIFVuaWNvZGVTdHJpbmcKICAgICogb2JqZWN0IGF0IG9mZnNldAotICAgKiA8
VFQ+c3RhcnQ8L1RUPi4gPFRUPnNyY0NoYXJzPC9UVD4gaXMgbm90IG1vZGlmaWVkLgorICAgKiBg
c3RhcnRgLiBgc3JjQ2hhcnNgIGlzIG5vdCBtb2RpZmllZC4KICAgICogQHBhcmFtIHNyY0NoYXJz
IHRoZSBzb3VyY2UgZm9yIHRoZSBuZXcgY2hhcmFjdGVycwotICAgKiBAcGFyYW0gc3JjU3RhcnQg
dGhlIG9mZnNldCBpbnRvIDxUVD5zcmNDaGFyczwvVFQ+IHdoZXJlIG5ldyBjaGFyYWN0ZXJzCisg
ICAqIEBwYXJhbSBzcmNTdGFydCB0aGUgb2Zmc2V0IGludG8gYHNyY0NoYXJzYCB3aGVyZSBuZXcg
Y2hhcmFjdGVycwogICAgKiB3aWxsIGJlIG9idGFpbmVkCi0gICAqIEBwYXJhbSBzcmNMZW5ndGgg
dGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIDxUVD5zcmNDaGFyczwvVFQ+IGluCi0gICAqICAg
ICAgICAgICAgICAgICAgdGhlIGFwcGVuZCBzdHJpbmc7IGNhbiBiZSAtMSBpZiA8VFQ+c3JjQ2hh
cnM8L1RUPiBpcyBOVUwtdGVybWluYXRlZAorICAgKiBAcGFyYW0gc3JjTGVuZ3RoIHRoZSBudW1i
ZXIgb2YgY2hhcmFjdGVycyBpbiBgc3JjQ2hhcnNgIGluCisgICAqICAgICAgICAgICAgICAgICAg
dGhlIGFwcGVuZCBzdHJpbmc7IGNhbiBiZSAtMSBpZiBgc3JjQ2hhcnNgIGlzIE5VTC10ZXJtaW5h
dGVkCiAgICAqIEByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhpcwogICAgKiBAc3RhYmxlIElDVSAy
LjAKICAgICovCkBAIC0yMjAxLDExICsyMTg3LDExIEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBVbmlj
b2RlU3RyaW5nIDogcHVibGljIFJlcGxhY2VhYmxlCiAgICAgICAgICAgICBpbnQzMl90IHNyY0xl
bmd0aCk7CiAKICAgLyoqCi0gICAqIEFwcGVuZCB0aGUgY2hhcmFjdGVycyBpbiA8VFQ+c3JjQ2hh
cnM8L1RUPiB0byB0aGUgVW5pY29kZVN0cmluZyBvYmplY3QKLSAgICogYXQgb2Zmc2V0IDxUVD5z
dGFydDwvVFQ+LiA8VFQ+c3JjQ2hhcnM8L1RUPiBpcyBub3QgbW9kaWZpZWQuCisgICAqIEFwcGVu
ZCB0aGUgY2hhcmFjdGVycyBpbiBgc3JjQ2hhcnNgIHRvIHRoZSBVbmljb2RlU3RyaW5nIG9iamVj
dAorICAgKiBhdCBvZmZzZXQgYHN0YXJ0YC4gYHNyY0NoYXJzYCBpcyBub3QgbW9kaWZpZWQuCiAg
ICAqIEBwYXJhbSBzcmNDaGFycyB0aGUgc291cmNlIGZvciB0aGUgbmV3IGNoYXJhY3RlcnMKLSAg
ICogQHBhcmFtIHNyY0xlbmd0aCB0aGUgbnVtYmVyIG9mIFVuaWNvZGUgY2hhcmFjdGVycyBpbiA8
VFQ+c3JjQ2hhcnM8L1RUPjsKLSAgICogICAgICAgICAgICAgICAgICBjYW4gYmUgLTEgaWYgPFRU
PnNyY0NoYXJzPC9UVD4gaXMgTlVMLXRlcm1pbmF0ZWQKKyAgICogQHBhcmFtIHNyY0xlbmd0aCB0
aGUgbnVtYmVyIG9mIFVuaWNvZGUgY2hhcmFjdGVycyBpbiBgc3JjQ2hhcnNgOworICAgKiAgICAg
ICAgICAgICAgICAgIGNhbiBiZSAtMSBpZiBgc3JjQ2hhcnNgIGlzIE5VTC10ZXJtaW5hdGVkCiAg
ICAqIEByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhpcwogICAgKiBAc3RhYmxlIElDVSAyLjAKICAg
ICovCkBAIC0yMjEzLDcgKzIxOTksNyBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgVW5pY29kZVN0cmlu
ZyA6IHB1YmxpYyBSZXBsYWNlYWJsZQogICAgICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgpOwog
CiAgIC8qKgotICAgKiBBcHBlbmQgdGhlIGNvZGUgdW5pdCA8VFQ+c3JjQ2hhcjwvVFQ+IHRvIHRo
ZSBVbmljb2RlU3RyaW5nIG9iamVjdC4KKyAgICogQXBwZW5kIHRoZSBjb2RlIHVuaXQgYHNyY0No
YXJgIHRvIHRoZSBVbmljb2RlU3RyaW5nIG9iamVjdC4KICAgICogQHBhcmFtIHNyY0NoYXIgdGhl
IGNvZGUgdW5pdCB0byBhcHBlbmQKICAgICogQHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGlzCiAg
ICAqIEBzdGFibGUgSUNVIDIuMApAQCAtMjIyMSw3ICsyMjA3LDcgQEAgY2xhc3MgVV9DT01NT05f
QVBJIFVuaWNvZGVTdHJpbmcgOiBwdWJsaWMgUmVwbGFjZWFibGUKICAgaW5saW5lIFVuaWNvZGVT
dHJpbmcmIGFwcGVuZChjaGFyMTZfdCBzcmNDaGFyKTsKIAogICAvKioKLSAgICogQXBwZW5kIHRo
ZSBjb2RlIHBvaW50IDxUVD5zcmNDaGFyPC9UVD4gdG8gdGhlIFVuaWNvZGVTdHJpbmcgb2JqZWN0
LgorICAgKiBBcHBlbmQgdGhlIGNvZGUgcG9pbnQgYHNyY0NoYXJgIHRvIHRoZSBVbmljb2RlU3Ry
aW5nIG9iamVjdC4KICAgICogQHBhcmFtIHNyY0NoYXIgdGhlIGNvZGUgcG9pbnQgdG8gYXBwZW5k
CiAgICAqIEByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhpcwogICAgKiBAc3RhYmxlIElDVSAyLjAK
QEAgLTIyMzIsMTQgKzIyMTgsMTQgQEAgY2xhc3MgVV9DT01NT05fQVBJIFVuaWNvZGVTdHJpbmcg
OiBwdWJsaWMgUmVwbGFjZWFibGUKICAgLyogSW5zZXJ0IG9wZXJhdGlvbnMgKi8KIAogICAvKioK
LSAgICogSW5zZXJ0IHRoZSBjaGFyYWN0ZXJzIGluIDxUVD5zcmNUZXh0PC9UVD4gaW4gdGhlIHJh
bmdlCi0gICAqIFs8VFQ+c3JjU3RhcnQ8L1RUPiwgPFRUPnNyY1N0YXJ0ICsgc3JjTGVuZ3RoPC9U
VD4pIGludG8gdGhlIFVuaWNvZGVTdHJpbmcKLSAgICogb2JqZWN0IGF0IG9mZnNldCA8VFQ+c3Rh
cnQ8L1RUPi4gPFRUPnNyY1RleHQ8L1RUPiBpcyBub3QgbW9kaWZpZWQuCisgICAqIEluc2VydCB0
aGUgY2hhcmFjdGVycyBpbiBgc3JjVGV4dGAgaW4gdGhlIHJhbmdlCisgICAqIFtgc3JjU3RhcnRg
LCBgc3JjU3RhcnQgKyBzcmNMZW5ndGhgKSBpbnRvIHRoZSBVbmljb2RlU3RyaW5nCisgICAqIG9i
amVjdCBhdCBvZmZzZXQgYHN0YXJ0YC4gYHNyY1RleHRgIGlzIG5vdCBtb2RpZmllZC4KICAgICog
QHBhcmFtIHN0YXJ0IHRoZSBvZmZzZXQgd2hlcmUgdGhlIGluc2VydGlvbiBiZWdpbnMKICAgICog
QHBhcmFtIHNyY1RleHQgdGhlIHNvdXJjZSBmb3IgdGhlIG5ldyBjaGFyYWN0ZXJzCi0gICAqIEBw
YXJhbSBzcmNTdGFydCB0aGUgb2Zmc2V0IGludG8gPFRUPnNyY1RleHQ8L1RUPiB3aGVyZSBuZXcg
Y2hhcmFjdGVycworICAgKiBAcGFyYW0gc3JjU3RhcnQgdGhlIG9mZnNldCBpbnRvIGBzcmNUZXh0
YCB3aGVyZSBuZXcgY2hhcmFjdGVycwogICAgKiB3aWxsIGJlIG9idGFpbmVkCi0gICAqIEBwYXJh
bSBzcmNMZW5ndGggdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIDxUVD5zcmNUZXh0PC9UVD4g
aW4KKyAgICogQHBhcmFtIHNyY0xlbmd0aCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gYHNy
Y1RleHRgIGluCiAgICAqIHRoZSBpbnNlcnQgc3RyaW5nCiAgICAqIEByZXR1cm4gYSByZWZlcmVu
Y2UgdG8gdGhpcwogICAgKiBAc3RhYmxlIElDVSAyLjAKQEAgLTIyNTAsOCArMjIzNiw4IEBAIGNs
YXNzIFVfQ09NTU9OX0FQSSBVbmljb2RlU3RyaW5nIDogcHVibGljIFJlcGxhY2VhYmxlCiAgICAg
ICAgICAgICBpbnQzMl90IHNyY0xlbmd0aCk7CiAKICAgLyoqCi0gICAqIEluc2VydCB0aGUgY2hh
cmFjdGVycyBpbiA8VFQ+c3JjVGV4dDwvVFQ+IGludG8gdGhlIFVuaWNvZGVTdHJpbmcgb2JqZWN0
Ci0gICAqIGF0IG9mZnNldCA8VFQ+c3RhcnQ8L1RUPi4gPFRUPnNyY1RleHQ8L1RUPiBpcyBub3Qg
bW9kaWZpZWQuCisgICAqIEluc2VydCB0aGUgY2hhcmFjdGVycyBpbiBgc3JjVGV4dGAgaW50byB0
aGUgVW5pY29kZVN0cmluZyBvYmplY3QKKyAgICogYXQgb2Zmc2V0IGBzdGFydGAuIGBzcmNUZXh0
YCBpcyBub3QgbW9kaWZpZWQuCiAgICAqIEBwYXJhbSBzdGFydCB0aGUgb2Zmc2V0IHdoZXJlIHRo
ZSBpbnNlcnRpb24gYmVnaW5zCiAgICAqIEBwYXJhbSBzcmNUZXh0IHRoZSBzb3VyY2UgZm9yIHRo
ZSBuZXcgY2hhcmFjdGVycwogICAgKiBAcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoaXMKQEAgLTIy
NjEsMTQgKzIyNDcsMTQgQEAgY2xhc3MgVV9DT01NT05fQVBJIFVuaWNvZGVTdHJpbmcgOiBwdWJs
aWMgUmVwbGFjZWFibGUKICAgICAgICAgICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNyY1RleHQp
OwogCiAgIC8qKgotICAgKiBJbnNlcnQgdGhlIGNoYXJhY3RlcnMgaW4gPFRUPnNyY0NoYXJzPC9U
VD4gaW4gdGhlIHJhbmdlCi0gICAqIFs8VFQ+c3JjU3RhcnQ8L1RUPiwgPFRUPnNyY1N0YXJ0ICsg
c3JjTGVuZ3RoPC9UVD4pIGludG8gdGhlIFVuaWNvZGVTdHJpbmcKLSAgICogIG9iamVjdCBhdCBv
ZmZzZXQgPFRUPnN0YXJ0PC9UVD4uIDxUVD5zcmNDaGFyczwvVFQ+IGlzIG5vdCBtb2RpZmllZC4K
KyAgICogSW5zZXJ0IHRoZSBjaGFyYWN0ZXJzIGluIGBzcmNDaGFyc2AgaW4gdGhlIHJhbmdlCisg
ICAqIFtgc3JjU3RhcnRgLCBgc3JjU3RhcnQgKyBzcmNMZW5ndGhgKSBpbnRvIHRoZSBVbmljb2Rl
U3RyaW5nCisgICAqICBvYmplY3QgYXQgb2Zmc2V0IGBzdGFydGAuIGBzcmNDaGFyc2AgaXMgbm90
IG1vZGlmaWVkLgogICAgKiBAcGFyYW0gc3RhcnQgdGhlIG9mZnNldCBhdCB3aGljaCB0aGUgaW5z
ZXJ0aW9uIGJlZ2lucwogICAgKiBAcGFyYW0gc3JjQ2hhcnMgdGhlIHNvdXJjZSBmb3IgdGhlIG5l
dyBjaGFyYWN0ZXJzCi0gICAqIEBwYXJhbSBzcmNTdGFydCB0aGUgb2Zmc2V0IGludG8gPFRUPnNy
Y0NoYXJzPC9UVD4gd2hlcmUgbmV3IGNoYXJhY3RlcnMKKyAgICogQHBhcmFtIHNyY1N0YXJ0IHRo
ZSBvZmZzZXQgaW50byBgc3JjQ2hhcnNgIHdoZXJlIG5ldyBjaGFyYWN0ZXJzCiAgICAqIHdpbGwg
YmUgb2J0YWluZWQKLSAgICogQHBhcmFtIHNyY0xlbmd0aCB0aGUgbnVtYmVyIG9mIGNoYXJhY3Rl
cnMgaW4gPFRUPnNyY0NoYXJzPC9UVD4KKyAgICogQHBhcmFtIHNyY0xlbmd0aCB0aGUgbnVtYmVy
IG9mIGNoYXJhY3RlcnMgaW4gYHNyY0NoYXJzYAogICAgKiBpbiB0aGUgaW5zZXJ0IHN0cmluZwog
ICAgKiBAcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoaXMKICAgICogQHN0YWJsZSBJQ1UgMi4wCkBA
IC0yMjc5LDggKzIyNjUsOCBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgVW5pY29kZVN0cmluZyA6IHB1
YmxpYyBSZXBsYWNlYWJsZQogICAgICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgpOwogCiAgIC8q
KgotICAgKiBJbnNlcnQgdGhlIGNoYXJhY3RlcnMgaW4gPFRUPnNyY0NoYXJzPC9UVD4gaW50byB0
aGUgVW5pY29kZVN0cmluZyBvYmplY3QKLSAgICogYXQgb2Zmc2V0IDxUVD5zdGFydDwvVFQ+LiA8
VFQ+c3JjQ2hhcnM8L1RUPiBpcyBub3QgbW9kaWZpZWQuCisgICAqIEluc2VydCB0aGUgY2hhcmFj
dGVycyBpbiBgc3JjQ2hhcnNgIGludG8gdGhlIFVuaWNvZGVTdHJpbmcgb2JqZWN0CisgICAqIGF0
IG9mZnNldCBgc3RhcnRgLiBgc3JjQ2hhcnNgIGlzIG5vdCBtb2RpZmllZC4KICAgICogQHBhcmFt
IHN0YXJ0IHRoZSBvZmZzZXQgd2hlcmUgdGhlIGluc2VydGlvbiBiZWdpbnMKICAgICogQHBhcmFt
IHNyY0NoYXJzIHRoZSBzb3VyY2UgZm9yIHRoZSBuZXcgY2hhcmFjdGVycwogICAgKiBAcGFyYW0g
c3JjTGVuZ3RoIHRoZSBudW1iZXIgb2YgVW5pY29kZSBjaGFyYWN0ZXJzIGluIHNyY0NoYXJzLgpA
QCAtMjI5Miw4ICsyMjc4LDggQEAgY2xhc3MgVV9DT01NT05fQVBJIFVuaWNvZGVTdHJpbmcgOiBw
dWJsaWMgUmVwbGFjZWFibGUKICAgICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoKTsKIAogICAv
KioKLSAgICogSW5zZXJ0IHRoZSBjb2RlIHVuaXQgPFRUPnNyY0NoYXI8L1RUPiBpbnRvIHRoZSBV
bmljb2RlU3RyaW5nIG9iamVjdCBhdAotICAgKiBvZmZzZXQgPFRUPnN0YXJ0PC9UVD4uCisgICAq
IEluc2VydCB0aGUgY29kZSB1bml0IGBzcmNDaGFyYCBpbnRvIHRoZSBVbmljb2RlU3RyaW5nIG9i
amVjdCBhdAorICAgKiBvZmZzZXQgYHN0YXJ0YC4KICAgICogQHBhcmFtIHN0YXJ0IHRoZSBvZmZz
ZXQgYXQgd2hpY2ggdGhlIGluc2VydGlvbiBvY2N1cnMKICAgICogQHBhcmFtIHNyY0NoYXIgdGhl
IGNvZGUgdW5pdCB0byBpbnNlcnQKICAgICogQHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGlzCkBA
IC0yMzAzLDggKzIyODksOCBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgVW5pY29kZVN0cmluZyA6IHB1
YmxpYyBSZXBsYWNlYWJsZQogICAgICAgICAgICAgY2hhcjE2X3Qgc3JjQ2hhcik7CiAKICAgLyoq
Ci0gICAqIEluc2VydCB0aGUgY29kZSBwb2ludCA8VFQ+c3JjQ2hhcjwvVFQ+IGludG8gdGhlIFVu
aWNvZGVTdHJpbmcgb2JqZWN0IGF0Ci0gICAqIG9mZnNldCA8VFQ+c3RhcnQ8L1RUPi4KKyAgICog
SW5zZXJ0IHRoZSBjb2RlIHBvaW50IGBzcmNDaGFyYCBpbnRvIHRoZSBVbmljb2RlU3RyaW5nIG9i
amVjdCBhdAorICAgKiBvZmZzZXQgYHN0YXJ0YC4KICAgICogQHBhcmFtIHN0YXJ0IHRoZSBvZmZz
ZXQgYXQgd2hpY2ggdGhlIGluc2VydGlvbiBvY2N1cnMKICAgICogQHBhcmFtIHNyY0NoYXIgdGhl
IGNvZGUgcG9pbnQgdG8gaW5zZXJ0CiAgICAqIEByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhpcwpA
QCAtMjMxOCwyMiArMjMwNCwyMiBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgVW5pY29kZVN0cmluZyA6
IHB1YmxpYyBSZXBsYWNlYWJsZQogCiAgIC8qKgogICAgKiBSZXBsYWNlIHRoZSBjaGFyYWN0ZXJz
IGluIHRoZSByYW5nZQotICAgKiBbPFRUPnN0YXJ0PC9UVD4sIDxUVD5zdGFydCArIGxlbmd0aDwv
VFQ+KSB3aXRoIHRoZSBjaGFyYWN0ZXJzIGluCi0gICAqIDxUVD5zcmNUZXh0PC9UVD4gaW4gdGhl
IHJhbmdlCi0gICAqIFs8VFQ+c3JjU3RhcnQ8L1RUPiwgPFRUPnNyY1N0YXJ0ICsgc3JjTGVuZ3Ro
PC9UVD4pLgotICAgKiA8VFQ+c3JjVGV4dDwvVFQ+IGlzIG5vdCBtb2RpZmllZC4KKyAgICogW2Bz
dGFydGAsIGBzdGFydCArIGxlbmd0aGApIHdpdGggdGhlIGNoYXJhY3RlcnMgaW4KKyAgICogYHNy
Y1RleHRgIGluIHRoZSByYW5nZQorICAgKiBbYHNyY1N0YXJ0YCwgYHNyY1N0YXJ0ICsgc3JjTGVu
Z3RoYCkuCisgICAqIGBzcmNUZXh0YCBpcyBub3QgbW9kaWZpZWQuCiAgICAqIEBwYXJhbSBzdGFy
dCB0aGUgb2Zmc2V0IGF0IHdoaWNoIHRoZSByZXBsYWNlIG9wZXJhdGlvbiBiZWdpbnMKICAgICog
QHBhcmFtIGxlbmd0aCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gcmVwbGFjZS4gVGhlIGNo
YXJhY3RlciBhdAotICAgKiA8VFQ+c3RhcnQgKyBsZW5ndGg8L1RUPiBpcyBub3QgbW9kaWZpZWQu
CisgICAqIGBzdGFydCArIGxlbmd0aGAgaXMgbm90IG1vZGlmaWVkLgogICAgKiBAcGFyYW0gc3Jj
VGV4dCB0aGUgc291cmNlIGZvciB0aGUgbmV3IGNoYXJhY3RlcnMKLSAgICogQHBhcmFtIHNyY1N0
YXJ0IHRoZSBvZmZzZXQgaW50byA8VFQ+c3JjVGV4dDwvVFQ+IHdoZXJlIG5ldyBjaGFyYWN0ZXJz
CisgICAqIEBwYXJhbSBzcmNTdGFydCB0aGUgb2Zmc2V0IGludG8gYHNyY1RleHRgIHdoZXJlIG5l
dyBjaGFyYWN0ZXJzCiAgICAqIHdpbGwgYmUgb2J0YWluZWQKLSAgICogQHBhcmFtIHNyY0xlbmd0
aCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gPFRUPnNyY1RleHQ8L1RUPiBpbgorICAgKiBA
cGFyYW0gc3JjTGVuZ3RoIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiBgc3JjVGV4dGAgaW4K
ICAgICogdGhlIHJlcGxhY2Ugc3RyaW5nCiAgICAqIEByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhp
cwogICAgKiBAc3RhYmxlIElDVSAyLjAKICAgICovCi0gIFVuaWNvZGVTdHJpbmcmIHJlcGxhY2Uo
aW50MzJfdCBzdGFydCwKKyAgaW5saW5lIFVuaWNvZGVTdHJpbmcmIHJlcGxhY2UoaW50MzJfdCBz
dGFydCwKICAgICAgICAgICAgICBpbnQzMl90IGxlbmd0aCwKICAgICAgICAgICAgICBjb25zdCBV
bmljb2RlU3RyaW5nJiBzcmNUZXh0LAogICAgICAgICAgICAgIGludDMyX3Qgc3JjU3RhcnQsCkBA
IC0yMzQxLDM4ICsyMzI3LDM4IEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBVbmljb2RlU3RyaW5nIDog
cHVibGljIFJlcGxhY2VhYmxlCiAKICAgLyoqCiAgICAqIFJlcGxhY2UgdGhlIGNoYXJhY3RlcnMg
aW4gdGhlIHJhbmdlCi0gICAqIFs8VFQ+c3RhcnQ8L1RUPiwgPFRUPnN0YXJ0ICsgbGVuZ3RoPC9U
VD4pCi0gICAqIHdpdGggdGhlIGNoYXJhY3RlcnMgaW4gPFRUPnNyY1RleHQ8L1RUPi4gIDxUVD5z
cmNUZXh0PC9UVD4gaXMKKyAgICogW2BzdGFydGAsIGBzdGFydCArIGxlbmd0aGApCisgICAqIHdp
dGggdGhlIGNoYXJhY3RlcnMgaW4gYHNyY1RleHRgLiAgYHNyY1RleHRgIGlzCiAgICAqICBub3Qg
bW9kaWZpZWQuCiAgICAqIEBwYXJhbSBzdGFydCB0aGUgb2Zmc2V0IGF0IHdoaWNoIHRoZSByZXBs
YWNlIG9wZXJhdGlvbiBiZWdpbnMKICAgICogQHBhcmFtIGxlbmd0aCB0aGUgbnVtYmVyIG9mIGNo
YXJhY3RlcnMgdG8gcmVwbGFjZS4gVGhlIGNoYXJhY3RlciBhdAotICAgKiA8VFQ+c3RhcnQgKyBs
ZW5ndGg8L1RUPiBpcyBub3QgbW9kaWZpZWQuCisgICAqIGBzdGFydCArIGxlbmd0aGAgaXMgbm90
IG1vZGlmaWVkLgogICAgKiBAcGFyYW0gc3JjVGV4dCB0aGUgc291cmNlIGZvciB0aGUgbmV3IGNo
YXJhY3RlcnMKICAgICogQHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGlzCiAgICAqIEBzdGFibGUg
SUNVIDIuMAogICAgKi8KLSAgVW5pY29kZVN0cmluZyYgcmVwbGFjZShpbnQzMl90IHN0YXJ0LAor
ICBpbmxpbmUgVW5pY29kZVN0cmluZyYgcmVwbGFjZShpbnQzMl90IHN0YXJ0LAogICAgICAgICAg
ICAgIGludDMyX3QgbGVuZ3RoLAogICAgICAgICAgICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNy
Y1RleHQpOwogCiAgIC8qKgogICAgKiBSZXBsYWNlIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSByYW5n
ZQotICAgKiBbPFRUPnN0YXJ0PC9UVD4sIDxUVD5zdGFydCArIGxlbmd0aDwvVFQ+KSB3aXRoIHRo
ZSBjaGFyYWN0ZXJzIGluCi0gICAqIDxUVD5zcmNDaGFyczwvVFQ+IGluIHRoZSByYW5nZQotICAg
KiBbPFRUPnNyY1N0YXJ0PC9UVD4sIDxUVD5zcmNTdGFydCArIHNyY0xlbmd0aDwvVFQ+KS4gPFRU
PnNyY0NoYXJzPC9UVD4KKyAgICogW2BzdGFydGAsIGBzdGFydCArIGxlbmd0aGApIHdpdGggdGhl
IGNoYXJhY3RlcnMgaW4KKyAgICogYHNyY0NoYXJzYCBpbiB0aGUgcmFuZ2UKKyAgICogW2BzcmNT
dGFydGAsIGBzcmNTdGFydCArIHNyY0xlbmd0aGApLiBgc3JjQ2hhcnNgCiAgICAqIGlzIG5vdCBt
b2RpZmllZC4KICAgICogQHBhcmFtIHN0YXJ0IHRoZSBvZmZzZXQgYXQgd2hpY2ggdGhlIHJlcGxh
Y2Ugb3BlcmF0aW9uIGJlZ2lucwogICAgKiBAcGFyYW0gbGVuZ3RoIHRoZSBudW1iZXIgb2YgY2hh
cmFjdGVycyB0byByZXBsYWNlLiAgVGhlIGNoYXJhY3RlciBhdAotICAgKiA8VFQ+c3RhcnQgKyBs
ZW5ndGg8L1RUPiBpcyBub3QgbW9kaWZpZWQuCisgICAqIGBzdGFydCArIGxlbmd0aGAgaXMgbm90
IG1vZGlmaWVkLgogICAgKiBAcGFyYW0gc3JjQ2hhcnMgdGhlIHNvdXJjZSBmb3IgdGhlIG5ldyBj
aGFyYWN0ZXJzCi0gICAqIEBwYXJhbSBzcmNTdGFydCB0aGUgb2Zmc2V0IGludG8gPFRUPnNyY0No
YXJzPC9UVD4gd2hlcmUgbmV3IGNoYXJhY3RlcnMKKyAgICogQHBhcmFtIHNyY1N0YXJ0IHRoZSBv
ZmZzZXQgaW50byBgc3JjQ2hhcnNgIHdoZXJlIG5ldyBjaGFyYWN0ZXJzCiAgICAqIHdpbGwgYmUg
b2J0YWluZWQKLSAgICogQHBhcmFtIHNyY0xlbmd0aCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMg
aW4gPFRUPnNyY0NoYXJzPC9UVD4KKyAgICogQHBhcmFtIHNyY0xlbmd0aCB0aGUgbnVtYmVyIG9m
IGNoYXJhY3RlcnMgaW4gYHNyY0NoYXJzYAogICAgKiBpbiB0aGUgcmVwbGFjZSBzdHJpbmcKICAg
ICogQHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGlzCiAgICAqIEBzdGFibGUgSUNVIDIuMAogICAg
Ki8KLSAgVW5pY29kZVN0cmluZyYgcmVwbGFjZShpbnQzMl90IHN0YXJ0LAorICBpbmxpbmUgVW5p
Y29kZVN0cmluZyYgcmVwbGFjZShpbnQzMl90IHN0YXJ0LAogICAgICAgICAgICAgIGludDMyX3Qg
bGVuZ3RoLAogICAgICAgICAgICAgIGNvbnN0IGNoYXIxNl90ICpzcmNDaGFycywKICAgICAgICAg
ICAgICBpbnQzMl90IHNyY1N0YXJ0LApAQCAtMjM4MCwxMSArMjM2NiwxMSBAQCBjbGFzcyBVX0NP
TU1PTl9BUEkgVW5pY29kZVN0cmluZyA6IHB1YmxpYyBSZXBsYWNlYWJsZQogCiAgIC8qKgogICAg
KiBSZXBsYWNlIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZQotICAgKiBbPFRUPnN0YXJ0PC9U
VD4sIDxUVD5zdGFydCArIGxlbmd0aDwvVFQ+KSB3aXRoIHRoZSBjaGFyYWN0ZXJzIGluCi0gICAq
IDxUVD5zcmNDaGFyczwvVFQ+LiAgPFRUPnNyY0NoYXJzPC9UVD4gaXMgbm90IG1vZGlmaWVkLgor
ICAgKiBbYHN0YXJ0YCwgYHN0YXJ0ICsgbGVuZ3RoYCkgd2l0aCB0aGUgY2hhcmFjdGVycyBpbgor
ICAgKiBgc3JjQ2hhcnNgLiAgYHNyY0NoYXJzYCBpcyBub3QgbW9kaWZpZWQuCiAgICAqIEBwYXJh
bSBzdGFydCB0aGUgb2Zmc2V0IGF0IHdoaWNoIHRoZSByZXBsYWNlIG9wZXJhdGlvbiBiZWdpbnMK
ICAgICogQHBhcmFtIGxlbmd0aCBudW1iZXIgb2YgY2hhcmFjdGVycyB0byByZXBsYWNlLiAgVGhl
IGNoYXJhY3RlciBhdAotICAgKiA8VFQ+c3RhcnQgKyBsZW5ndGg8L1RUPiBpcyBub3QgbW9kaWZp
ZWQuCisgICAqIGBzdGFydCArIGxlbmd0aGAgaXMgbm90IG1vZGlmaWVkLgogICAgKiBAcGFyYW0g
c3JjQ2hhcnMgdGhlIHNvdXJjZSBmb3IgdGhlIG5ldyBjaGFyYWN0ZXJzCiAgICAqIEBwYXJhbSBz
cmNMZW5ndGggdGhlIG51bWJlciBvZiBVbmljb2RlIGNoYXJhY3RlcnMgaW4gc3JjQ2hhcnMKICAg
ICogQHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGlzCkBAIC0yMzk3LDExICsyMzgzLDExIEBAIGNs
YXNzIFVfQ09NTU9OX0FQSSBVbmljb2RlU3RyaW5nIDogcHVibGljIFJlcGxhY2VhYmxlCiAKICAg
LyoqCiAgICAqIFJlcGxhY2UgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlCi0gICAqIFs8VFQ+
c3RhcnQ8L1RUPiwgPFRUPnN0YXJ0ICsgbGVuZ3RoPC9UVD4pIHdpdGggdGhlIGNvZGUgdW5pdAot
ICAgKiA8VFQ+c3JjQ2hhcjwvVFQ+LgorICAgKiBbYHN0YXJ0YCwgYHN0YXJ0ICsgbGVuZ3RoYCkg
d2l0aCB0aGUgY29kZSB1bml0CisgICAqIGBzcmNDaGFyYC4KICAgICogQHBhcmFtIHN0YXJ0IHRo
ZSBvZmZzZXQgYXQgd2hpY2ggdGhlIHJlcGxhY2Ugb3BlcmF0aW9uIGJlZ2lucwogICAgKiBAcGFy
YW0gbGVuZ3RoIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byByZXBsYWNlLiAgVGhlIGNoYXJh
Y3RlciBhdAotICAgKiA8VFQ+c3RhcnQgKyBsZW5ndGg8L1RUPiBpcyBub3QgbW9kaWZpZWQuCisg
ICAqIGBzdGFydCArIGxlbmd0aGAgaXMgbm90IG1vZGlmaWVkLgogICAgKiBAcGFyYW0gc3JjQ2hh
ciB0aGUgbmV3IGNvZGUgdW5pdAogICAgKiBAcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoaXMKICAg
ICogQHN0YWJsZSBJQ1UgMi4wCkBAIC0yNDEyLDExICsyMzk4LDExIEBAIGNsYXNzIFVfQ09NTU9O
X0FQSSBVbmljb2RlU3RyaW5nIDogcHVibGljIFJlcGxhY2VhYmxlCiAKICAgLyoqCiAgICAqIFJl
cGxhY2UgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlCi0gICAqIFs8VFQ+c3RhcnQ8L1RUPiwg
PFRUPnN0YXJ0ICsgbGVuZ3RoPC9UVD4pIHdpdGggdGhlIGNvZGUgcG9pbnQKLSAgICogPFRUPnNy
Y0NoYXI8L1RUPi4KKyAgICogW2BzdGFydGAsIGBzdGFydCArIGxlbmd0aGApIHdpdGggdGhlIGNv
ZGUgcG9pbnQKKyAgICogYHNyY0NoYXJgLgogICAgKiBAcGFyYW0gc3RhcnQgdGhlIG9mZnNldCBh
dCB3aGljaCB0aGUgcmVwbGFjZSBvcGVyYXRpb24gYmVnaW5zCiAgICAqIEBwYXJhbSBsZW5ndGgg
dGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHJlcGxhY2UuICBUaGUgY2hhcmFjdGVyIGF0Ci0g
ICAqIDxUVD5zdGFydCArIGxlbmd0aDwvVFQ+IGlzIG5vdCBtb2RpZmllZC4KKyAgICogYHN0YXJ0
ICsgbGVuZ3RoYCBpcyBub3QgbW9kaWZpZWQuCiAgICAqIEBwYXJhbSBzcmNDaGFyIHRoZSBuZXcg
Y29kZSBwb2ludAogICAgKiBAcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoaXMKICAgICogQHN0YWJs
ZSBJQ1UgMi4wCkBAIC0yNDI0LDggKzI0MTAsOCBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgVW5pY29k
ZVN0cmluZyA6IHB1YmxpYyBSZXBsYWNlYWJsZQogICBVbmljb2RlU3RyaW5nJiByZXBsYWNlKGlu
dDMyX3Qgc3RhcnQsIGludDMyX3QgbGVuZ3RoLCBVQ2hhcjMyIHNyY0NoYXIpOwogCiAgIC8qKgot
ICAgKiBSZXBsYWNlIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBbPFRUPnN0YXJ0PC9UVD4s
IDxUVD5saW1pdDwvVFQ+KQotICAgKiB3aXRoIHRoZSBjaGFyYWN0ZXJzIGluIDxUVD5zcmNUZXh0
PC9UVD4uIDxUVD5zcmNUZXh0PC9UVD4gaXMgbm90IG1vZGlmaWVkLgorICAgKiBSZXBsYWNlIHRo
ZSBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBbYHN0YXJ0YCwgYGxpbWl0YCkKKyAgICogd2l0aCB0
aGUgY2hhcmFjdGVycyBpbiBgc3JjVGV4dGAuIGBzcmNUZXh0YCBpcyBub3QgbW9kaWZpZWQuCiAg
ICAqIEBwYXJhbSBzdGFydCB0aGUgb2Zmc2V0IGF0IHdoaWNoIHRoZSByZXBsYWNlIG9wZXJhdGlv
biBiZWdpbnMKICAgICogQHBhcmFtIGxpbWl0IHRoZSBvZmZzZXQgaW1tZWRpYXRlbHkgZm9sbG93
aW5nIHRoZSByZXBsYWNlIHJhbmdlCiAgICAqIEBwYXJhbSBzcmNUZXh0IHRoZSBzb3VyY2UgZm9y
IHRoZSBuZXcgY2hhcmFjdGVycwpAQCAtMjQzNywxNiArMjQyMywxNiBAQCBjbGFzcyBVX0NPTU1P
Tl9BUEkgVW5pY29kZVN0cmluZyA6IHB1YmxpYyBSZXBsYWNlYWJsZQogICAgICAgICAgICAgICAg
IGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNyY1RleHQpOwogCiAgIC8qKgotICAgKiBSZXBsYWNlIHRo
ZSBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBbPFRUPnN0YXJ0PC9UVD4sIDxUVD5saW1pdDwvVFQ+
KQotICAgKiB3aXRoIHRoZSBjaGFyYWN0ZXJzIGluIDxUVD5zcmNUZXh0PC9UVD4gaW4gdGhlIHJh
bmdlCi0gICAqIFs8VFQ+c3JjU3RhcnQ8L1RUPiwgPFRUPnNyY0xpbWl0PC9UVD4pLiA8VFQ+c3Jj
VGV4dDwvVFQ+IGlzIG5vdCBtb2RpZmllZC4KKyAgICogUmVwbGFjZSB0aGUgY2hhcmFjdGVycyBp
biB0aGUgcmFuZ2UgW2BzdGFydGAsIGBsaW1pdGApCisgICAqIHdpdGggdGhlIGNoYXJhY3RlcnMg
aW4gYHNyY1RleHRgIGluIHRoZSByYW5nZQorICAgKiBbYHNyY1N0YXJ0YCwgYHNyY0xpbWl0YCku
IGBzcmNUZXh0YCBpcyBub3QgbW9kaWZpZWQuCiAgICAqIEBwYXJhbSBzdGFydCB0aGUgb2Zmc2V0
IGF0IHdoaWNoIHRoZSByZXBsYWNlIG9wZXJhdGlvbiBiZWdpbnMKICAgICogQHBhcmFtIGxpbWl0
IHRoZSBvZmZzZXQgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSByZXBsYWNlIHJhbmdlCiAgICAq
IEBwYXJhbSBzcmNUZXh0IHRoZSBzb3VyY2UgZm9yIHRoZSBuZXcgY2hhcmFjdGVycwotICAgKiBA
cGFyYW0gc3JjU3RhcnQgdGhlIG9mZnNldCBpbnRvIDxUVD5zcmNDaGFyczwvVFQ+IHdoZXJlIG5l
dyBjaGFyYWN0ZXJzCisgICAqIEBwYXJhbSBzcmNTdGFydCB0aGUgb2Zmc2V0IGludG8gYHNyY0No
YXJzYCB3aGVyZSBuZXcgY2hhcmFjdGVycwogICAgKiB3aWxsIGJlIG9idGFpbmVkCiAgICAqIEBw
YXJhbSBzcmNMaW1pdCB0aGUgb2Zmc2V0IGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgcmFuZ2Ug
dG8gY29weQotICAgKiBpbiA8VFQ+c3JjVGV4dDwvVFQ+CisgICAqIGluIGBzcmNUZXh0YAogICAg
KiBAcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoaXMKICAgICogQHN0YWJsZSBJQ1UgMi4wCiAgICAq
LwpAQCAtMjQ1OCwxMiArMjQ0NCw5IEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBVbmljb2RlU3RyaW5n
IDogcHVibGljIFJlcGxhY2VhYmxlCiAKICAgLyoqCiAgICAqIFJlcGxhY2UgYSBzdWJzdHJpbmcg
b2YgdGhpcyBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gdGV4dC4KLSAgICogQHBhcmFtIHN0YXJ0IHRo
ZSBiZWdpbm5pbmcgaW5kZXgsIGluY2x1c2l2ZTsgPGNvZGU+MCA8PSBzdGFydAotICAgKiA8PSBs
aW1pdDwvY29kZT4uCi0gICAqIEBwYXJhbSBsaW1pdCB0aGUgZW5kaW5nIGluZGV4LCBleGNsdXNp
dmU7IDxjb2RlPnN0YXJ0IDw9IGxpbWl0Ci0gICAqIDw9IGxlbmd0aCgpPC9jb2RlPi4KLSAgICog
QHBhcmFtIHRleHQgdGhlIHRleHQgdG8gcmVwbGFjZSBjaGFyYWN0ZXJzIDxjb2RlPnN0YXJ0PC9j
b2RlPgotICAgKiB0byA8Y29kZT5saW1pdCAtIDE8L2NvZGU+CisgICAqIEBwYXJhbSBzdGFydCB0
aGUgYmVnaW5uaW5nIGluZGV4LCBpbmNsdXNpdmU7IGAwIDw9IHN0YXJ0IDw9IGxpbWl0YC4KKyAg
ICogQHBhcmFtIGxpbWl0IHRoZSBlbmRpbmcgaW5kZXgsIGV4Y2x1c2l2ZTsgYHN0YXJ0IDw9IGxp
bWl0IDw9IGxlbmd0aCgpYC4KKyAgICogQHBhcmFtIHRleHQgdGhlIHRleHQgdG8gcmVwbGFjZSBj
aGFyYWN0ZXJzIGBzdGFydGAgdG8gYGxpbWl0IC0gMWAKICAgICogQHN0YWJsZSBJQ1UgMi4wCiAg
ICAqLwogICB2aXJ0dWFsIHZvaWQgaGFuZGxlUmVwbGFjZUJldHdlZW4oaW50MzJfdCBzdGFydCwK
QEAgLTI0ODIsMTQgKzI0NjUsMTIgQEAgY2xhc3MgVV9DT01NT05fQVBJIFVuaWNvZGVTdHJpbmcg
OiBwdWJsaWMgUmVwbGFjZWFibGUKICAgICogaW5mb3JtYXRpb24uICBUaGlzIG1ldGhvZCBpcyB1
c2VkIHRvIGR1cGxpY2F0ZSBvciByZW9yZGVyIHN1YnN0cmluZ3MuCiAgICAqIFRoZSBkZXN0aW5h
dGlvbiBpbmRleCBtdXN0IG5vdCBvdmVybGFwIHRoZSBzb3VyY2UgcmFuZ2UuCiAgICAqCi0gICAq
IEBwYXJhbSBzdGFydCB0aGUgYmVnaW5uaW5nIGluZGV4LCBpbmNsdXNpdmU7IDxjb2RlPjAgPD0g
c3RhcnQgPD0KLSAgICogbGltaXQ8L2NvZGU+LgotICAgKiBAcGFyYW0gbGltaXQgdGhlIGVuZGlu
ZyBpbmRleCwgZXhjbHVzaXZlOyA8Y29kZT5zdGFydCA8PSBsaW1pdCA8PQotICAgKiBsZW5ndGgo
KTwvY29kZT4uCisgICAqIEBwYXJhbSBzdGFydCB0aGUgYmVnaW5uaW5nIGluZGV4LCBpbmNsdXNp
dmU7IGAwIDw9IHN0YXJ0IDw9IGxpbWl0YC4KKyAgICogQHBhcmFtIGxpbWl0IHRoZSBlbmRpbmcg
aW5kZXgsIGV4Y2x1c2l2ZTsgYHN0YXJ0IDw9IGxpbWl0IDw9IGxlbmd0aCgpYC4KICAgICogQHBh
cmFtIGRlc3QgdGhlIGRlc3RpbmF0aW9uIGluZGV4LiAgVGhlIGNoYXJhY3RlcnMgZnJvbQotICAg
KiA8Y29kZT5zdGFydC4ubGltaXQtMTwvY29kZT4gd2lsbCBiZSBjb3BpZWQgdG8gPGNvZGU+ZGVz
dDwvY29kZT4uCi0gICAqIEltcGxlbWVudGF0aW9ucyBvZiB0aGlzIG1ldGhvZCBtYXkgYXNzdW1l
IHRoYXQgPGNvZGU+ZGVzdCA8PSBzdGFydCB8fAotICAgKiBkZXN0ID49IGxpbWl0PC9jb2RlPi4K
KyAgICogICAgICAgICAgICAgYHN0YXJ0Li5saW1pdC0xYCB3aWxsIGJlIGNvcGllZCB0byBgZGVz
dGAuCisgICAqIEltcGxlbWVudGF0aW9ucyBvZiB0aGlzIG1ldGhvZCBtYXkgYXNzdW1lIHRoYXQg
YGRlc3QgPD0gc3RhcnQgfHwKKyAgICogZGVzdCA+PSBsaW1pdGAuCiAgICAqIEBzdGFibGUgSUNV
IDIuMAogICAgKi8KICAgdmlydHVhbCB2b2lkIGNvcHkoaW50MzJfdCBzdGFydCwgaW50MzJfdCBs
aW1pdCwgaW50MzJfdCBkZXN0KTsKQEAgLTI1MTAsNyArMjQ5MSw3IEBAIGNsYXNzIFVfQ09NTU9O
X0FQSSBVbmljb2RlU3RyaW5nIDogcHVibGljIFJlcGxhY2VhYmxlCiAgIC8qKgogICAgKiBSZXBs
YWNlIGFsbCBvY2N1cnJlbmNlcyBvZiBjaGFyYWN0ZXJzIGluIG9sZFRleHQgd2l0aCBjaGFyYWN0
ZXJzCiAgICAqIGluIG5ld1RleHQKLSAgICogaW4gdGhlIHJhbmdlIFs8VFQ+c3RhcnQ8L1RUPiwg
PFRUPnN0YXJ0ICsgbGVuZ3RoPC9UVD4pLgorICAgKiBpbiB0aGUgcmFuZ2UgW2BzdGFydGAsIGBz
dGFydCArIGxlbmd0aGApLgogICAgKiBAcGFyYW0gc3RhcnQgdGhlIHN0YXJ0IG9mIHRoZSByYW5n
ZSBpbiB3aGljaCByZXBsYWNlIHdpbGwgcGVyZm9ybWVkCiAgICAqIEBwYXJhbSBsZW5ndGggdGhl
IGxlbmd0aCBvZiB0aGUgcmFuZ2UgaW4gd2hpY2ggcmVwbGFjZSB3aWxsIGJlIHBlcmZvcm1lZAog
ICAgKiBAcGFyYW0gb2xkVGV4dCB0aGUgdGV4dCBjb250YWluaW5nIHRoZSBzZWFyY2ggdGV4dApA
QCAtMjUyNSwxOCArMjUwNiwxOCBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgVW5pY29kZVN0cmluZyA6
IHB1YmxpYyBSZXBsYWNlYWJsZQogCiAgIC8qKgogICAgKiBSZXBsYWNlIGFsbCBvY2N1cnJlbmNl
cyBvZiBjaGFyYWN0ZXJzIGluIG9sZFRleHQgaW4gdGhlIHJhbmdlCi0gICAqIFs8VFQ+b2xkU3Rh
cnQ8L1RUPiwgPFRUPm9sZFN0YXJ0ICsgb2xkTGVuZ3RoPC9UVD4pIHdpdGggdGhlIGNoYXJhY3Rl
cnMKKyAgICogW2BvbGRTdGFydGAsIGBvbGRTdGFydCArIG9sZExlbmd0aGApIHdpdGggdGhlIGNo
YXJhY3RlcnMKICAgICogaW4gbmV3VGV4dCBpbiB0aGUgcmFuZ2UKLSAgICogWzxUVD5uZXdTdGFy
dDwvVFQ+LCA8VFQ+bmV3U3RhcnQgKyBuZXdMZW5ndGg8L1RUPikKLSAgICogaW4gdGhlIHJhbmdl
IFs8VFQ+c3RhcnQ8L1RUPiwgPFRUPnN0YXJ0ICsgbGVuZ3RoPC9UVD4pLgorICAgKiBbYG5ld1N0
YXJ0YCwgYG5ld1N0YXJ0ICsgbmV3TGVuZ3RoYCkKKyAgICogaW4gdGhlIHJhbmdlIFtgc3RhcnRg
LCBgc3RhcnQgKyBsZW5ndGhgKS4KICAgICogQHBhcmFtIHN0YXJ0IHRoZSBzdGFydCBvZiB0aGUg
cmFuZ2UgaW4gd2hpY2ggcmVwbGFjZSB3aWxsIHBlcmZvcm1lZAogICAgKiBAcGFyYW0gbGVuZ3Ro
IHRoZSBsZW5ndGggb2YgdGhlIHJhbmdlIGluIHdoaWNoIHJlcGxhY2Ugd2lsbCBiZSBwZXJmb3Jt
ZWQKICAgICogQHBhcmFtIG9sZFRleHQgdGhlIHRleHQgY29udGFpbmluZyB0aGUgc2VhcmNoIHRl
eHQKLSAgICogQHBhcmFtIG9sZFN0YXJ0IHRoZSBzdGFydCBvZiB0aGUgc2VhcmNoIHJhbmdlIGlu
IDxUVD5vbGRUZXh0PC9UVD4KLSAgICogQHBhcmFtIG9sZExlbmd0aCB0aGUgbGVuZ3RoIG9mIHRo
ZSBzZWFyY2ggcmFuZ2UgaW4gPFRUPm9sZFRleHQ8L1RUPgorICAgKiBAcGFyYW0gb2xkU3RhcnQg
dGhlIHN0YXJ0IG9mIHRoZSBzZWFyY2ggcmFuZ2UgaW4gYG9sZFRleHRgCisgICAqIEBwYXJhbSBv
bGRMZW5ndGggdGhlIGxlbmd0aCBvZiB0aGUgc2VhcmNoIHJhbmdlIGluIGBvbGRUZXh0YAogICAg
KiBAcGFyYW0gbmV3VGV4dCB0aGUgdGV4dCBjb250YWluaW5nIHRoZSByZXBsYWNlbWVudCB0ZXh0
Ci0gICAqIEBwYXJhbSBuZXdTdGFydCB0aGUgc3RhcnQgb2YgdGhlIHJlcGxhY2VtZW50IHJhbmdl
IGluIDxUVD5uZXdUZXh0PC9UVD4KLSAgICogQHBhcmFtIG5ld0xlbmd0aCB0aGUgbGVuZ3RoIG9m
IHRoZSByZXBsYWNlbWVudCByYW5nZSBpbiA8VFQ+bmV3VGV4dDwvVFQ+CisgICAqIEBwYXJhbSBu
ZXdTdGFydCB0aGUgc3RhcnQgb2YgdGhlIHJlcGxhY2VtZW50IHJhbmdlIGluIGBuZXdUZXh0YAor
ICAgKiBAcGFyYW0gbmV3TGVuZ3RoIHRoZSBsZW5ndGggb2YgdGhlIHJlcGxhY2VtZW50IHJhbmdl
IGluIGBuZXdUZXh0YAogICAgKiBAcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoaXMKICAgICogQHN0
YWJsZSBJQ1UgMi4wCiAgICAqLwpAQCAtMjU2MSw3ICsyNTQyLDcgQEAgY2xhc3MgVV9DT01NT05f
QVBJIFVuaWNvZGVTdHJpbmcgOiBwdWJsaWMgUmVwbGFjZWFibGUKIAogICAvKioKICAgICogUmVt
b3ZlIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZQotICAgKiBbPFRUPnN0YXJ0PC9UVD4sIDxU
VD5zdGFydCArIGxlbmd0aDwvVFQ+KSBmcm9tIHRoZSBVbmljb2RlU3RyaW5nIG9iamVjdC4KKyAg
ICogW2BzdGFydGAsIGBzdGFydCArIGxlbmd0aGApIGZyb20gdGhlIFVuaWNvZGVTdHJpbmcgb2Jq
ZWN0LgogICAgKiBAcGFyYW0gc3RhcnQgdGhlIG9mZnNldCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVy
IHRvIHJlbW92ZQogICAgKiBAcGFyYW0gbGVuZ3RoIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0
byByZW1vdmUKICAgICogQHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGlzCkBAIC0yNTcyLDcgKzI1
NTMsNyBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgVW5pY29kZVN0cmluZyA6IHB1YmxpYyBSZXBsYWNl
YWJsZQogCiAgIC8qKgogICAgKiBSZW1vdmUgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlCi0g
ICAqIFs8VFQ+c3RhcnQ8L1RUPiwgPFRUPmxpbWl0PC9UVD4pIGZyb20gdGhlIFVuaWNvZGVTdHJp
bmcgb2JqZWN0LgorICAgKiBbYHN0YXJ0YCwgYGxpbWl0YCkgZnJvbSB0aGUgVW5pY29kZVN0cmlu
ZyBvYmplY3QuCiAgICAqIEBwYXJhbSBzdGFydCB0aGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCBjaGFy
YWN0ZXIgdG8gcmVtb3ZlCiAgICAqIEBwYXJhbSBsaW1pdCB0aGUgb2Zmc2V0IGltbWVkaWF0ZWx5
IGZvbGxvd2luZyB0aGUgcmFuZ2UgdG8gcmVtb3ZlCiAgICAqIEByZXR1cm4gYSByZWZlcmVuY2Ug
dG8gdGhpcwpAQCAtMjU4Myw4ICsyNTY0LDggQEAgY2xhc3MgVV9DT01NT05fQVBJIFVuaWNvZGVT
dHJpbmcgOiBwdWJsaWMgUmVwbGFjZWFibGUKIAogICAvKioKICAgICogUmV0YWluIG9ubHkgdGhl
IGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlCi0gICAqIFs8Y29kZT5zdGFydDwvY29kZT4sIDxjb2Rl
PmxpbWl0PC9jb2RlPikgZnJvbSB0aGUgVW5pY29kZVN0cmluZyBvYmplY3QuCi0gICAqIFJlbW92
ZXMgY2hhcmFjdGVycyBiZWZvcmUgPGNvZGU+c3RhcnQ8L2NvZGU+IGFuZCBhdCBhbmQgYWZ0ZXIg
PGNvZGU+bGltaXQ8L2NvZGU+LgorICAgKiBbYHN0YXJ0YCwgYGxpbWl0YCkgZnJvbSB0aGUgVW5p
Y29kZVN0cmluZyBvYmplY3QuCisgICAqIFJlbW92ZXMgY2hhcmFjdGVycyBiZWZvcmUgYHN0YXJ0
YCBhbmQgYXQgYW5kIGFmdGVyIGBsaW1pdGAuCiAgICAqIEBwYXJhbSBzdGFydCB0aGUgb2Zmc2V0
IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgdG8gcmV0YWluCiAgICAqIEBwYXJhbSBsaW1pdCB0aGUg
b2Zmc2V0IGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgcmFuZ2UgdG8gcmV0YWluCiAgICAqIEBy
ZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhpcwpAQCAtMjU5NSw3ICsyNTc2LDcgQEAgY2xhc3MgVV9D
T01NT05fQVBJIFVuaWNvZGVTdHJpbmcgOiBwdWJsaWMgUmVwbGFjZWFibGUKICAgLyogTGVuZ3Ro
IG9wZXJhdGlvbnMgKi8KIAogICAvKioKLSAgICogUGFkIHRoZSBzdGFydCBvZiB0aGlzIFVuaWNv
ZGVTdHJpbmcgd2l0aCB0aGUgY2hhcmFjdGVyIDxUVD5wYWRDaGFyPC9UVD4uCisgICAqIFBhZCB0
aGUgc3RhcnQgb2YgdGhpcyBVbmljb2RlU3RyaW5nIHdpdGggdGhlIGNoYXJhY3RlciBgcGFkQ2hh
cmAuCiAgICAqIElmIHRoZSBsZW5ndGggb2YgdGhpcyBVbmljb2RlU3RyaW5nIGlzIGxlc3MgdGhh
biB0YXJnZXRMZW5ndGgsCiAgICAqIGxlbmd0aCgpIC0gdGFyZ2V0TGVuZ3RoIGNvcGllcyBvZiBw
YWRDaGFyIHdpbGwgYmUgYWRkZWQgdG8gdGhlCiAgICAqIGJlZ2lubmluZyBvZiB0aGlzIFVuaWNv
ZGVTdHJpbmcuCkBAIC0yNjA5LDcgKzI1OTAsNyBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgVW5pY29k
ZVN0cmluZyA6IHB1YmxpYyBSZXBsYWNlYWJsZQogICAgICAgICAgICAgICAgICAgICBjaGFyMTZf
dCBwYWRDaGFyID0gMHgwMDIwKTsKIAogICAvKioKLSAgICogUGFkIHRoZSBlbmQgb2YgdGhpcyBV
bmljb2RlU3RyaW5nIHdpdGggdGhlIGNoYXJhY3RlciA8VFQ+cGFkQ2hhcjwvVFQ+LgorICAgKiBQ
YWQgdGhlIGVuZCBvZiB0aGlzIFVuaWNvZGVTdHJpbmcgd2l0aCB0aGUgY2hhcmFjdGVyIGBwYWRD
aGFyYC4KICAgICogSWYgdGhlIGxlbmd0aCBvZiB0aGlzIFVuaWNvZGVTdHJpbmcgaXMgbGVzcyB0
aGFuIHRhcmdldExlbmd0aCwKICAgICogbGVuZ3RoKCkgLSB0YXJnZXRMZW5ndGggY29waWVzIG9m
IHBhZENoYXIgd2lsbCBiZSBhZGRlZCB0byB0aGUKICAgICogZW5kIG9mIHRoaXMgVW5pY29kZVN0
cmluZy4KQEAgLTI2MjMsNyArMjYwNCw3IEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBVbmljb2RlU3Ry
aW5nIDogcHVibGljIFJlcGxhY2VhYmxlCiAgICAgICAgICAgICAgICAgICAgICBjaGFyMTZfdCBw
YWRDaGFyID0gMHgwMDIwKTsKIAogICAvKioKLSAgICogVHJ1bmNhdGUgdGhpcyBVbmljb2RlU3Ry
aW5nIHRvIHRoZSA8VFQ+dGFyZ2V0TGVuZ3RoPC9UVD4uCisgICAqIFRydW5jYXRlIHRoaXMgVW5p
Y29kZVN0cmluZyB0byB0aGUgYHRhcmdldExlbmd0aGAuCiAgICAqIEBwYXJhbSB0YXJnZXRMZW5n
dGggdGhlIGRlc2lyZWQgbGVuZ3RoIG9mIHRoaXMgVW5pY29kZVN0cmluZy4KICAgICogQHJldHVy
biBUUlVFIGlmIHRoZSB0ZXh0IHdhcyB0cnVuY2F0ZWQsIEZBTFNFIG90aGVyd2lzZQogICAgKiBA
c3RhYmxlIElDVSAyLjAKQEAgLTI2NDgsNyArMjYyOSw3IEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBV
bmljb2RlU3RyaW5nIDogcHVibGljIFJlcGxhY2VhYmxlCiAgIGlubGluZSBVbmljb2RlU3RyaW5n
JiByZXZlcnNlKHZvaWQpOwogCiAgIC8qKgotICAgKiBSZXZlcnNlIHRoZSByYW5nZSBbPFRUPnN0
YXJ0PC9UVD4sIDxUVD5zdGFydCArIGxlbmd0aDwvVFQ+KSBpbgorICAgKiBSZXZlcnNlIHRoZSBy
YW5nZSBbYHN0YXJ0YCwgYHN0YXJ0ICsgbGVuZ3RoYCkgaW4KICAgICogdGhpcyBVbmljb2RlU3Ry
aW5nLgogICAgKiBAcGFyYW0gc3RhcnQgdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSB0byByZXZlcnNl
CiAgICAqIEBwYXJhbSBsZW5ndGggdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHRvIHJldmVy
c2UKQEAgLTI4MzMsNyArMjgxNCw3IEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBVbmljb2RlU3RyaW5n
IDogcHVibGljIFJlcGxhY2VhYmxlCiAgICAqICAgSWYgdGhlIGxlbmd0aCgpIHdhcyBncmVhdGVy
IHRoYW4gbWluQ2FwYWNpdHksIHRoZW4gYW55IGNvbnRlbnRzIGFmdGVyIG1pbkNhcGFjaXR5CiAg
ICAqICAgbWF5IGJlIGxvc3QuCiAgICAqICAgVGhlIGJ1ZmZlciBjb250ZW50cyBpcyBub3QgTlVM
LXRlcm1pbmF0ZWQgYnkgZ2V0QnVmZmVyKCkuCi0gICAqICAgSWYgbGVuZ3RoKCk8Z2V0Q2FwYWNp
dHkoKSB0aGVuIHlvdSBjYW4gdGVybWluYXRlIGl0IGJ5IHdyaXRpbmcgYSBOVUwKKyAgICogICBJ
ZiBsZW5ndGgoKSA8IGdldENhcGFjaXR5KCkgdGhlbiB5b3UgY2FuIHRlcm1pbmF0ZSBpdCBieSB3
cml0aW5nIGEgTlVMCiAgICAqICAgYXQgaW5kZXggbGVuZ3RoKCkuCiAgICAqIC0gWW91IG11c3Qg
Y2FsbCByZWxlYXNlQnVmZmVyKG5ld0xlbmd0aCkgYmVmb3JlIGFuZCBpbiBvcmRlciB0bwogICAg
KiAgIHJldHVybiB0byBub3JtYWwgVW5pY29kZVN0cmluZyBvcGVyYXRpb24uCkBAIC0yODg5LDcg
KzI4NzAsNyBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgVW5pY29kZVN0cmluZyA6IHB1YmxpYyBSZXBs
YWNlYWJsZQogICAgKgogICAgKiBUaGUgYnVmZmVyIGNvbnRlbnRzIGlzIChwcm9iYWJseSkgbm90
IE5VTC10ZXJtaW5hdGVkLgogICAgKiBZb3UgY2FuIGNoZWNrIGlmIGl0IGlzIHdpdGgKLSAgICog
PGNvZGU+KHMubGVuZ3RoKCk8cy5nZXRDYXBhY2l0eSgpICYmIGJ1ZmZlcltzLmxlbmd0aCgpXT09
MCk8L2NvZGU+LgorICAgKiBgKHMubGVuZ3RoKCkgPCBzLmdldENhcGFjaXR5KCkgJiYgYnVmZmVy
W3MubGVuZ3RoKCldPT0wKWAuCiAgICAqIChTZWUgZ2V0VGVybWluYXRlZEJ1ZmZlcigpLikKICAg
ICoKICAgICogVGhlIGJ1ZmZlciBtYXkgcmVzaWRlIGluIHJlYWQtb25seSBtZW1vcnkuIEl0cyBj
b250ZW50cyBtdXN0IG5vdApAQCAtMjk0OSw3ICsyOTMwLDcgQEAgY2xhc3MgVV9DT01NT05fQVBJ
IFVuaWNvZGVTdHJpbmcgOiBwdWJsaWMgUmVwbGFjZWFibGUKICAgaW5saW5lIFVuaWNvZGVTdHJp
bmcoKTsKIAogICAvKioKLSAgICogQ29uc3RydWN0IGEgVW5pY29kZVN0cmluZyB3aXRoIGNhcGFj
aXR5IHRvIGhvbGQgPFRUPmNhcGFjaXR5PC9UVD4gY2hhcjE2X3RzCisgICAqIENvbnN0cnVjdCBh
IFVuaWNvZGVTdHJpbmcgd2l0aCBjYXBhY2l0eSB0byBob2xkIGBjYXBhY2l0eWAgY2hhcjE2X3Rz
CiAgICAqIEBwYXJhbSBjYXBhY2l0eSB0aGUgbnVtYmVyIG9mIGNoYXIxNl90cyB0aGlzIFVuaWNv
ZGVTdHJpbmcgc2hvdWxkIGhvbGQKICAgICogYmVmb3JlIGEgcmVzaXplIGlzIG5lY2Vzc2FyeTsg
aWYgY291bnQgaXMgZ3JlYXRlciB0aGFuIDAgYW5kIGNvdW50CiAgICAqIGNvZGUgcG9pbnRzIGMg
dGFrZSB1cCBtb3JlIHNwYWNlIHRoYW4gY2FwYWNpdHksIHRoZW4gY2FwYWNpdHkgaXMgYWRqdXN0
ZWQKQEAgLTI5NjUsNyArMjk0Niw3IEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBVbmljb2RlU3RyaW5n
IDogcHVibGljIFJlcGxhY2VhYmxlCiAgICAqIFNpbmdsZSBjaGFyMTZfdCAoY29kZSB1bml0KSBj
b25zdHJ1Y3Rvci4KICAgICoKICAgICogSXQgaXMgcmVjb21tZW5kZWQgdG8gbWFyayB0aGlzIGNv
bnN0cnVjdG9yICJleHBsaWNpdCIgYnkKLSAgICogPGNvZGU+LURVTklTVFJfRlJPTV9DSEFSX0VY
UExJQ0lUPWV4cGxpY2l0PC9jb2RlPgorICAgKiBgLURVTklTVFJfRlJPTV9DSEFSX0VYUExJQ0lU
PWV4cGxpY2l0YAogICAgKiBvbiB0aGUgY29tcGlsZXIgY29tbWFuZCBsaW5lIG9yIHNpbWlsYXIu
CiAgICAqIEBwYXJhbSBjaCB0aGUgY2hhcmFjdGVyIHRvIHBsYWNlIGluIHRoZSBVbmljb2RlU3Ry
aW5nCiAgICAqIEBzdGFibGUgSUNVIDIuMApAQCAtMjk3Niw3ICsyOTU3LDcgQEAgY2xhc3MgVV9D
T01NT05fQVBJIFVuaWNvZGVTdHJpbmcgOiBwdWJsaWMgUmVwbGFjZWFibGUKICAgICogU2luZ2xl
IFVDaGFyMzIgKGNvZGUgcG9pbnQpIGNvbnN0cnVjdG9yLgogICAgKgogICAgKiBJdCBpcyByZWNv
bW1lbmRlZCB0byBtYXJrIHRoaXMgY29uc3RydWN0b3IgImV4cGxpY2l0IiBieQotICAgKiA8Y29k
ZT4tRFVOSVNUUl9GUk9NX0NIQVJfRVhQTElDSVQ9ZXhwbGljaXQ8L2NvZGU+CisgICAqIGAtRFVO
SVNUUl9GUk9NX0NIQVJfRVhQTElDSVQ9ZXhwbGljaXRgCiAgICAqIG9uIHRoZSBjb21waWxlciBj
b21tYW5kIGxpbmUgb3Igc2ltaWxhci4KICAgICogQHBhcmFtIGNoIHRoZSBjaGFyYWN0ZXIgdG8g
cGxhY2UgaW4gdGhlIFVuaWNvZGVTdHJpbmcKICAgICogQHN0YWJsZSBJQ1UgMi4wCkBAIC0yOTg3
LDkgKzI5NjgsOSBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgVW5pY29kZVN0cmluZyA6IHB1YmxpYyBS
ZXBsYWNlYWJsZQogICAgKiBjaGFyMTZfdCogY29uc3RydWN0b3IuCiAgICAqCiAgICAqIEl0IGlz
IHJlY29tbWVuZGVkIHRvIG1hcmsgdGhpcyBjb25zdHJ1Y3RvciAiZXhwbGljaXQiIGJ5Ci0gICAq
IDxjb2RlPi1EVU5JU1RSX0ZST01fU1RSSU5HX0VYUExJQ0lUPWV4cGxpY2l0PC9jb2RlPgorICAg
KiBgLURVTklTVFJfRlJPTV9TVFJJTkdfRVhQTElDSVQ9ZXhwbGljaXRgCiAgICAqIG9uIHRoZSBj
b21waWxlciBjb21tYW5kIGxpbmUgb3Igc2ltaWxhci4KLSAgICogQHBhcmFtIHRleHQgVGhlIGNo
YXJhY3RlcnMgdG8gcGxhY2UgaW4gdGhlIFVuaWNvZGVTdHJpbmcuICA8VFQ+dGV4dDwvVFQ+Cisg
ICAqIEBwYXJhbSB0ZXh0IFRoZSBjaGFyYWN0ZXJzIHRvIHBsYWNlIGluIHRoZSBVbmljb2RlU3Ry
aW5nLiAgYHRleHRgCiAgICAqIG11c3QgYmUgTlVMTCAoVSswMDAwKSB0ZXJtaW5hdGVkLgogICAg
KiBAc3RhYmxlIElDVSAyLjAKICAgICovCkBAIC0zMDAxLDcgKzI5ODIsNyBAQCBjbGFzcyBVX0NP
TU1PTl9BUEkgVW5pY29kZVN0cmluZyA6IHB1YmxpYyBSZXBsYWNlYWJsZQogICAgKiBEZWxlZ2F0
ZXMgdG8gVW5pY29kZVN0cmluZyhjb25zdCBjaGFyMTZfdCAqKS4KICAgICoKICAgICogSXQgaXMg
cmVjb21tZW5kZWQgdG8gbWFyayB0aGlzIGNvbnN0cnVjdG9yICJleHBsaWNpdCIgYnkKLSAgICog
PGNvZGU+LURVTklTVFJfRlJPTV9TVFJJTkdfRVhQTElDSVQ9ZXhwbGljaXQ8L2NvZGU+CisgICAq
IGAtRFVOSVNUUl9GUk9NX1NUUklOR19FWFBMSUNJVD1leHBsaWNpdGAKICAgICogb24gdGhlIGNv
bXBpbGVyIGNvbW1hbmQgbGluZSBvciBzaW1pbGFyLgogICAgKiBAcGFyYW0gdGV4dCBOVUwtdGVy
bWluYXRlZCBVVEYtMTYgc3RyaW5nCiAgICAqIEBzdGFibGUgSUNVIDU5CkBAIC0zMDE3LDcgKzI5
OTgsNyBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgVW5pY29kZVN0cmluZyA6IHB1YmxpYyBSZXBsYWNl
YWJsZQogICAgKiBEZWxlZ2F0ZXMgdG8gVW5pY29kZVN0cmluZyhjb25zdCBjaGFyMTZfdCAqKS4K
ICAgICoKICAgICogSXQgaXMgcmVjb21tZW5kZWQgdG8gbWFyayB0aGlzIGNvbnN0cnVjdG9yICJl
eHBsaWNpdCIgYnkKLSAgICogPGNvZGU+LURVTklTVFJfRlJPTV9TVFJJTkdfRVhQTElDSVQ9ZXhw
bGljaXQ8L2NvZGU+CisgICAqIGAtRFVOSVNUUl9GUk9NX1NUUklOR19FWFBMSUNJVD1leHBsaWNp
dGAKICAgICogb24gdGhlIGNvbXBpbGVyIGNvbW1hbmQgbGluZSBvciBzaW1pbGFyLgogICAgKiBA
cGFyYW0gdGV4dCBOVUwtdGVybWluYXRlZCBVVEYtMTYgc3RyaW5nCiAgICAqIEBzdGFibGUgSUNV
IDU5CkBAIC0zMDMxLDcgKzMwMTIsNyBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgVW5pY29kZVN0cmlu
ZyA6IHB1YmxpYyBSZXBsYWNlYWJsZQogICAgKiBFZmZlY3RpdmVseSB0aGUgc2FtZSBhcyB0aGUg
ZGVmYXVsdCBjb25zdHJ1Y3RvciwgbWFrZXMgYW4gZW1wdHkgc3RyaW5nIG9iamVjdC4KICAgICoK
ICAgICogSXQgaXMgcmVjb21tZW5kZWQgdG8gbWFyayB0aGlzIGNvbnN0cnVjdG9yICJleHBsaWNp
dCIgYnkKLSAgICogPGNvZGU+LURVTklTVFJfRlJPTV9TVFJJTkdfRVhQTElDSVQ9ZXhwbGljaXQ8
L2NvZGU+CisgICAqIGAtRFVOSVNUUl9GUk9NX1NUUklOR19FWFBMSUNJVD1leHBsaWNpdGAKICAg
ICogb24gdGhlIGNvbXBpbGVyIGNvbW1hbmQgbGluZSBvciBzaW1pbGFyLgogICAgKiBAcGFyYW0g
dGV4dCBudWxscHRyCiAgICAqIEBzdGFibGUgSUNVIDU5CkBAIC0zMDQxLDcgKzMwMjIsNyBAQCBj
bGFzcyBVX0NPTU1PTl9BUEkgVW5pY29kZVN0cmluZyA6IHB1YmxpYyBSZXBsYWNlYWJsZQogICAv
KioKICAgICogY2hhcjE2X3QqIGNvbnN0cnVjdG9yLgogICAgKiBAcGFyYW0gdGV4dCBUaGUgY2hh
cmFjdGVycyB0byBwbGFjZSBpbiB0aGUgVW5pY29kZVN0cmluZy4KLSAgICogQHBhcmFtIHRleHRM
ZW5ndGggVGhlIG51bWJlciBvZiBVbmljb2RlIGNoYXJhY3RlcnMgaW4gPFRUPnRleHQ8L1RUPgor
ICAgKiBAcGFyYW0gdGV4dExlbmd0aCBUaGUgbnVtYmVyIG9mIFVuaWNvZGUgY2hhcmFjdGVycyBp
biBgdGV4dGAKICAgICogdG8gY29weS4KICAgICogQHN0YWJsZSBJQ1UgMi4wCiAgICAqLwpAQCAt
MzA5NiwxMiArMzA3NywxMiBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgVW5pY29kZVN0cmluZyA6IHB1
YmxpYyBSZXBsYWNlYWJsZQogICAgKiBXaGVuIHVzaW5nIGZhc3RDb3B5RnJvbSgpLCB0aGUgdGV4
dCB3aWxsIGJlIGFsaWFzZWQgYWdhaW4sCiAgICAqIHNvIHRoYXQgYm90aCBzdHJpbmdzIHRoZW4g
YWxpYXMgdGhlIHNhbWUgcmVhZG9ubHktdGV4dC4KICAgICoKLSAgICogQHBhcmFtIGlzVGVybWlu
YXRlZCBzcGVjaWZpZXMgaWYgPGNvZGU+dGV4dDwvY29kZT4gaXMgPGNvZGU+TlVMPC9jb2RlPi10
ZXJtaW5hdGVkLgotICAgKiAgICAgICAgICAgICAgICAgICAgIFRoaXMgbXVzdCBiZSB0cnVlIGlm
IDxjb2RlPnRleHRMZW5ndGg9PS0xPC9jb2RlPi4KKyAgICogQHBhcmFtIGlzVGVybWluYXRlZCBz
cGVjaWZpZXMgaWYgYHRleHRgIGlzIGBOVUxgLXRlcm1pbmF0ZWQuCisgICAqICAgICAgICAgICAg
ICAgICAgICAgVGhpcyBtdXN0IGJlIHRydWUgaWYgYHRleHRMZW5ndGg9PS0xYC4KICAgICogQHBh
cmFtIHRleHQgVGhlIGNoYXJhY3RlcnMgdG8gYWxpYXMgZm9yIHRoZSBVbmljb2RlU3RyaW5nLgot
ICAgKiBAcGFyYW0gdGV4dExlbmd0aCBUaGUgbnVtYmVyIG9mIFVuaWNvZGUgY2hhcmFjdGVycyBp
biA8Y29kZT50ZXh0PC9jb2RlPiB0byBhbGlhcy4KKyAgICogQHBhcmFtIHRleHRMZW5ndGggVGhl
IG51bWJlciBvZiBVbmljb2RlIGNoYXJhY3RlcnMgaW4gYHRleHRgIHRvIGFsaWFzLgogICAgKiAg
ICAgICAgICAgICAgICAgICBJZiAtMSwgdGhlbiB0aGlzIGNvbnN0cnVjdG9yIHdpbGwgZGV0ZXJt
aW5lIHRoZSBsZW5ndGgKLSAgICogICAgICAgICAgICAgICAgICAgYnkgY2FsbGluZyA8Y29kZT51
X3N0cmxlbigpPC9jb2RlPi4KKyAgICogICAgICAgICAgICAgICAgICAgYnkgY2FsbGluZyBgdV9z
dHJsZW4oKWAuCiAgICAqIEBzdGFibGUgSUNVIDIuMAogICAgKi8KICAgVW5pY29kZVN0cmluZyhV
Qm9vbCBpc1Rlcm1pbmF0ZWQsCkBAIC0zMTIyLDggKzMxMDMsOCBAQCBjbGFzcyBVX0NPTU1PTl9B
UEkgVW5pY29kZVN0cmluZyA6IHB1YmxpYyBSZXBsYWNlYWJsZQogICAgKiBhcyB0aGUgc3RyaW5n
IGJ1ZmZlciBpdHNlbGYgYW5kIHdpbGwgaW4gdGhpcyBjYXNlIG5vdCBjb3B5IHRoZSBjb250ZW50
cy4KICAgICoKICAgICogQHBhcmFtIGJ1ZmZlciBUaGUgY2hhcmFjdGVycyB0byBhbGlhcyBmb3Ig
dGhlIFVuaWNvZGVTdHJpbmcuCi0gICAqIEBwYXJhbSBidWZmTGVuZ3RoIFRoZSBudW1iZXIgb2Yg
VW5pY29kZSBjaGFyYWN0ZXJzIGluIDxjb2RlPmJ1ZmZlcjwvY29kZT4gdG8gYWxpYXMuCi0gICAq
IEBwYXJhbSBidWZmQ2FwYWNpdHkgVGhlIHNpemUgb2YgPGNvZGU+YnVmZmVyPC9jb2RlPiBpbiBj
aGFyMTZfdHMuCisgICAqIEBwYXJhbSBidWZmTGVuZ3RoIFRoZSBudW1iZXIgb2YgVW5pY29kZSBj
aGFyYWN0ZXJzIGluIGBidWZmZXJgIHRvIGFsaWFzLgorICAgKiBAcGFyYW0gYnVmZkNhcGFjaXR5
IFRoZSBzaXplIG9mIGBidWZmZXJgIGluIGNoYXIxNl90cy4KICAgICogQHN0YWJsZSBJQ1UgMi4w
CiAgICAqLwogICBVbmljb2RlU3RyaW5nKGNoYXIxNl90ICpidWZmZXIsIGludDMyX3QgYnVmZkxl
bmd0aCwgaW50MzJfdCBidWZmQ2FwYWNpdHkpOwpAQCAtMzE3OCw3ICszMTU5LDcgQEAgY2xhc3Mg
VV9DT01NT05fQVBJIFVuaWNvZGVTdHJpbmcgOiBwdWJsaWMgUmVwbGFjZWFibGUKICAgICogVU5J
Q09ERV9TVFJJTkdfU0lNUExFLgogICAgKgogICAgKiBJdCBpcyByZWNvbW1lbmRlZCB0byBtYXJr
IHRoaXMgY29uc3RydWN0b3IgImV4cGxpY2l0IiBieQotICAgKiA8Y29kZT4tRFVOSVNUUl9GUk9N
X1NUUklOR19FWFBMSUNJVD1leHBsaWNpdDwvY29kZT4KKyAgICogYC1EVU5JU1RSX0ZST01fU1RS
SU5HX0VYUExJQ0lUPWV4cGxpY2l0YAogICAgKiBvbiB0aGUgY29tcGlsZXIgY29tbWFuZCBsaW5l
IG9yIHNpbWlsYXIuCiAgICAqIEBwYXJhbSBjb2RlcGFnZURhdGEgYW4gYXJyYXkgb2YgYnl0ZXMs
IG51bGwtdGVybWluYXRlZCwKICAgICogICAgICAgICAgICAgICAgICAgICBpbiB0aGUgcGxhdGZv
cm0ncyBkZWZhdWx0IGNvZGVwYWdlLgpAQCAtMzE5Myw3ICszMTc0LDcgQEAgY2xhc3MgVV9DT01N
T05fQVBJIFVuaWNvZGVTdHJpbmcgOiBwdWJsaWMgUmVwbGFjZWFibGUKICAgICogVXNlcyB0aGUg
ZGVmYXVsdCBjb252ZXJ0ZXIgKGFuZCB0aHVzIGRlcGVuZHMgb24gdGhlIElDVSBjb252ZXJzaW9u
IGNvZGUpCiAgICAqIHVubGVzcyBVX0NIQVJTRVRfSVNfVVRGOCBpcyBzZXQgdG8gMS4KICAgICog
QHBhcmFtIGNvZGVwYWdlRGF0YSBhbiBhcnJheSBvZiBieXRlcyBpbiB0aGUgcGxhdGZvcm0ncyBk
ZWZhdWx0IGNvZGVwYWdlLgotICAgKiBAcGFyYW0gZGF0YUxlbmd0aCBUaGUgbnVtYmVyIG9mIGJ5
dGVzIGluIDxUVD5jb2RlcGFnZURhdGE8L1RUPi4KKyAgICogQHBhcmFtIGRhdGFMZW5ndGggVGhl
IG51bWJlciBvZiBieXRlcyBpbiBgY29kZXBhZ2VEYXRhYC4KICAgICogQHN0YWJsZSBJQ1UgMi4w
CiAgICAqLwogICBVbmljb2RlU3RyaW5nKGNvbnN0IGNoYXIgKmNvZGVwYWdlRGF0YSwgaW50MzJf
dCBkYXRhTGVuZ3RoKTsKQEAgLTMyMDUsMTEgKzMxODYsMTEgQEAgY2xhc3MgVV9DT01NT05fQVBJ
IFVuaWNvZGVTdHJpbmcgOiBwdWJsaWMgUmVwbGFjZWFibGUKICAgLyoqCiAgICAqIGNoYXIqIGNv
bnN0cnVjdG9yLgogICAgKiBAcGFyYW0gY29kZXBhZ2VEYXRhIGFuIGFycmF5IG9mIGJ5dGVzLCBu
dWxsLXRlcm1pbmF0ZWQKLSAgICogQHBhcmFtIGNvZGVwYWdlIHRoZSBlbmNvZGluZyBvZiA8VFQ+
Y29kZXBhZ2VEYXRhPC9UVD4uICBUaGUgc3BlY2lhbAotICAgKiB2YWx1ZSAwIGZvciA8VFQ+Y29k
ZXBhZ2U8L1RUPiBpbmRpY2F0ZXMgdGhhdCB0aGUgdGV4dCBpcyBpbiB0aGUKKyAgICogQHBhcmFt
IGNvZGVwYWdlIHRoZSBlbmNvZGluZyBvZiBgY29kZXBhZ2VEYXRhYC4gIFRoZSBzcGVjaWFsCisg
ICAqIHZhbHVlIDAgZm9yIGBjb2RlcGFnZWAgaW5kaWNhdGVzIHRoYXQgdGhlIHRleHQgaXMgaW4g
dGhlCiAgICAqIHBsYXRmb3JtJ3MgZGVmYXVsdCBjb2RlcGFnZS4KICAgICoKLSAgICogSWYgPGNv
ZGU+Y29kZXBhZ2U8L2NvZGU+IGlzIGFuIGVtcHR5IHN0cmluZyAoPGNvZGU+IiI8L2NvZGU+KSwK
KyAgICogSWYgYGNvZGVwYWdlYCBpcyBhbiBlbXB0eSBzdHJpbmcgKGAiImApLAogICAgKiB0aGVu
IGEgc2ltcGxlIGNvbnZlcnNpb24gaXMgcGVyZm9ybWVkIG9uIHRoZSBjb2RlcGFnZS1pbnZhcmlh
bnQKICAgICogc3Vic2V0ICgiaW52YXJpYW50IGNoYXJhY3RlcnMiKSBvZiB0aGUgcGxhdGZvcm0g
ZW5jb2RpbmcuIFNlZSB1dHlwZXMuaC4KICAgICogUmVjb21tZW5kYXRpb246IEZvciBpbnZhcmlh
bnQtY2hhcmFjdGVyIHN0cmluZ3MgdXNlIHRoZSBjb25zdHJ1Y3RvcgpAQCAtMzIyNCwxMSArMzIw
NSwxMSBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgVW5pY29kZVN0cmluZyA6IHB1YmxpYyBSZXBsYWNl
YWJsZQogICAvKioKICAgICogY2hhciogY29uc3RydWN0b3IuCiAgICAqIEBwYXJhbSBjb2RlcGFn
ZURhdGEgYW4gYXJyYXkgb2YgYnl0ZXMuCi0gICAqIEBwYXJhbSBkYXRhTGVuZ3RoIFRoZSBudW1i
ZXIgb2YgYnl0ZXMgaW4gPFRUPmNvZGVwYWdlRGF0YTwvVFQ+LgotICAgKiBAcGFyYW0gY29kZXBh
Z2UgdGhlIGVuY29kaW5nIG9mIDxUVD5jb2RlcGFnZURhdGE8L1RUPi4gIFRoZSBzcGVjaWFsCi0g
ICAqIHZhbHVlIDAgZm9yIDxUVD5jb2RlcGFnZTwvVFQ+IGluZGljYXRlcyB0aGF0IHRoZSB0ZXh0
IGlzIGluIHRoZQorICAgKiBAcGFyYW0gZGF0YUxlbmd0aCBUaGUgbnVtYmVyIG9mIGJ5dGVzIGlu
IGBjb2RlcGFnZURhdGFgLgorICAgKiBAcGFyYW0gY29kZXBhZ2UgdGhlIGVuY29kaW5nIG9mIGBj
b2RlcGFnZURhdGFgLiAgVGhlIHNwZWNpYWwKKyAgICogdmFsdWUgMCBmb3IgYGNvZGVwYWdlYCBp
bmRpY2F0ZXMgdGhhdCB0aGUgdGV4dCBpcyBpbiB0aGUKICAgICogcGxhdGZvcm0ncyBkZWZhdWx0
IGNvZGVwYWdlLgotICAgKiBJZiA8Y29kZT5jb2RlcGFnZTwvY29kZT4gaXMgYW4gZW1wdHkgc3Ry
aW5nICg8Y29kZT4iIjwvY29kZT4pLAorICAgKiBJZiBgY29kZXBhZ2VgIGlzIGFuIGVtcHR5IHN0
cmluZyAoYCIiYCksCiAgICAqIHRoZW4gYSBzaW1wbGUgY29udmVyc2lvbiBpcyBwZXJmb3JtZWQg
b24gdGhlIGNvZGVwYWdlLWludmFyaWFudAogICAgKiBzdWJzZXQgKCJpbnZhcmlhbnQgY2hhcmFj
dGVycyIpIG9mIHRoZSBwbGF0Zm9ybSBlbmNvZGluZy4gU2VlIHV0eXBlcy5oLgogICAgKiBSZWNv
bW1lbmRhdGlvbjogRm9yIGludmFyaWFudC1jaGFyYWN0ZXIgc3RyaW5ncyB1c2UgdGhlIGNvbnN0
cnVjdG9yCkBAIC0zMjc5LDEyICszMjYwLDExIEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBVbmljb2Rl
U3RyaW5nIDogcHVibGljIFJlcGxhY2VhYmxlCiAgICAqCiAgICAqIEZvciBleGFtcGxlOgogICAg
KiBcY29kZQotICAgKiB2b2lkIGZuKGNvbnN0IGNoYXIgKnMpIHsKLSAgICogICBVbmljb2RlU3Ry
aW5nIHVzdHIocywgLTEsIFVTX0lOVik7Ci0gICAqICAgLy8gdXNlIHVzdHIgLi4uCi0gICAqIH0K
KyAgICogICAgIHZvaWQgZm4oY29uc3QgY2hhciAqcykgeworICAgKiAgICAgICBVbmljb2RlU3Ry
aW5nIHVzdHIocywgLTEsIFVTX0lOVik7CisgICAqICAgICAgIC8vIHVzZSB1c3RyIC4uLgorICAg
KiAgICAgfQogICAgKiBcZW5kY29kZQotICAgKgogICAgKiBAcGFyYW0gc3JjIFN0cmluZyB1c2lu
ZyBvbmx5IGludmFyaWFudCBjaGFyYWN0ZXJzLgogICAgKiBAcGFyYW0gbGVuZ3RoIExlbmd0aCBv
ZiBzcmMsIG9yIC0xIGlmIE5VTC10ZXJtaW5hdGVkLgogICAgKiBAcGFyYW0gaW52IFNpZ25hdHVy
ZS1kaXN0aW5ndWlzaGluZyBwYXJhbWF0ZXIsIHVzZSBVU19JTlYuCkBAIC0zMzI0LDcgKzMzMDQs
NyBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgVW5pY29kZVN0cmluZyA6IHB1YmxpYyBSZXBsYWNlYWJs
ZQogICAvKioKICAgICogJ1N1YnN0cmluZycgY29uc3RydWN0b3IgZnJvbSB0YWlsIG9mIHNvdXJj
ZSBzdHJpbmcuCiAgICAqIEBwYXJhbSBzcmMgVGhlIFVuaWNvZGVTdHJpbmcgb2JqZWN0IHRvIGNv
cHkuCi0gICAqIEBwYXJhbSBzcmNTdGFydCBUaGUgb2Zmc2V0IGludG8gPHR0PnNyYzwvdHQ+IGF0
IHdoaWNoIHRvIHN0YXJ0IGNvcHlpbmcuCisgICAqIEBwYXJhbSBzcmNTdGFydCBUaGUgb2Zmc2V0
IGludG8gYHNyY2AgYXQgd2hpY2ggdG8gc3RhcnQgY29weWluZy4KICAgICogQHN0YWJsZSBJQ1Ug
Mi4yCiAgICAqLwogICBVbmljb2RlU3RyaW5nKGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNyYywgaW50
MzJfdCBzcmNTdGFydCk7CkBAIC0zMzMyLDggKzMzMTIsOCBAQCBjbGFzcyBVX0NPTU1PTl9BUEkg
VW5pY29kZVN0cmluZyA6IHB1YmxpYyBSZXBsYWNlYWJsZQogICAvKioKICAgICogJ1N1YnN0cmlu
ZycgY29uc3RydWN0b3IgZnJvbSBzdWJyYW5nZSBvZiBzb3VyY2Ugc3RyaW5nLgogICAgKiBAcGFy
YW0gc3JjIFRoZSBVbmljb2RlU3RyaW5nIG9iamVjdCB0byBjb3B5LgotICAgKiBAcGFyYW0gc3Jj
U3RhcnQgVGhlIG9mZnNldCBpbnRvIDx0dD5zcmM8L3R0PiBhdCB3aGljaCB0byBzdGFydCBjb3B5
aW5nLgotICAgKiBAcGFyYW0gc3JjTGVuZ3RoIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBmcm9t
IDx0dD5zcmM8L3R0PiB0byBjb3B5LgorICAgKiBAcGFyYW0gc3JjU3RhcnQgVGhlIG9mZnNldCBp
bnRvIGBzcmNgIGF0IHdoaWNoIHRvIHN0YXJ0IGNvcHlpbmcuCisgICAqIEBwYXJhbSBzcmNMZW5n
dGggVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGZyb20gYHNyY2AgdG8gY29weS4KICAgICogQHN0
YWJsZSBJQ1UgMi4yCiAgICAqLwogICBVbmljb2RlU3RyaW5nKGNvbnN0IFVuaWNvZGVTdHJpbmcm
IHNyYywgaW50MzJfdCBzcmNTdGFydCwgaW50MzJfdCBzcmNMZW5ndGgpOwpAQCAtMzQwNSw3ICsz
Mzg1LDcgQEAgY2xhc3MgVV9DT01NT05fQVBJIFVuaWNvZGVTdHJpbmcgOiBwdWJsaWMgUmVwbGFj
ZWFibGUKICAgICoKICAgICogXFxhID0+IFUrMDAwNywgXFxiID0+IFUrMDAwOCwgXFx0ID0+IFUr
MDAwOSwgXFxuID0+IFUrMDAwQSwKICAgICogXFx2ID0+IFUrMDAwQiwgXFxmID0+IFUrMDAwQywg
XFxyID0+IFUrMDAwRCwgXFxlID0+IFUrMDAxQiwKLSAgICogXFwmcXVvdDsgPT4gVSswMDIyLCBc
XCcgPT4gVSswMDI3LCBcXD8gPT4gVSswMDNGLCBcXFxcID0+IFUrMDA1QworICAgKiBcXCIgPT4g
VSswMDIyLCBcXCcgPT4gVSswMDI3LCBcXD8gPT4gVSswMDNGLCBcXFxcID0+IFUrMDA1QwogICAg
KgogICAgKiBBbnl0aGluZyBlbHNlIGZvbGxvd2luZyBhIGJhY2tzbGFzaCBpcyBnZW5lcmljYWxs
eSBlc2NhcGVkLiAgRm9yCiAgICAqIGV4YW1wbGUsICJbYVxcLXpdIiByZXR1cm5zICJbYS16XSIu
CkBAIC0zNjUzLDkgKzM2MzMsOSBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgVW5pY29kZVN0cmluZyA6
IHB1YmxpYyBSZXBsYWNlYWJsZQogICAgKiBSZWFsIGNvbnN0cnVjdG9yIGZvciBjb252ZXJ0aW5n
IGZyb20gY29kZXBhZ2UgZGF0YS4KICAgICogSXQgYXNzdW1lcyB0aGF0IGl0IGlzIGNhbGxlZCB3
aXRoICFmUmVmQ291bnRlZC4KICAgICoKLSAgICogSWYgPGNvZGU+Y29kZXBhZ2U9PTA8L2NvZGU+
LCB0aGVuIHRoZSBkZWZhdWx0IGNvbnZlcnRlcgorICAgKiBJZiBgY29kZXBhZ2U9PTBgLCB0aGVu
IHRoZSBkZWZhdWx0IGNvbnZlcnRlcgogICAgKiBpcyB1c2VkIGZvciB0aGUgcGxhdGZvcm0gZW5j
b2RpbmcuCi0gICAqIElmIDxjb2RlPmNvZGVwYWdlPC9jb2RlPiBpcyBhbiBlbXB0eSBzdHJpbmcg
KDxjb2RlPiIiPC9jb2RlPiksCisgICAqIElmIGBjb2RlcGFnZWAgaXMgYW4gZW1wdHkgc3RyaW5n
IChgIiJgKSwKICAgICogdGhlbiBhIHNpbXBsZSBjb252ZXJzaW9uIGlzIHBlcmZvcm1lZCBvbiB0
aGUgY29kZXBhZ2UtaW52YXJpYW50CiAgICAqIHN1YnNldCAoImludmFyaWFudCBjaGFyYWN0ZXJz
Iikgb2YgdGhlIHBsYXRmb3JtIGVuY29kaW5nLiBTZWUgdXR5cGVzLmguCiAgICAqLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi9pY3UvdW5pY29kZS91bnVtLmggYi9Tb3VyY2UvV1RGL2ljdS91bmlj
b2RlL3VudW0uaAppbmRleCAxODA4YzhkMzZiOTQyZTgxZDZjYTM2ZjcwNzBhZjgzODZlZWUzN2Uw
Li4yOGUxMzA4NGMxNWE4YmU3NGZlNGI1YWEzZjU4OGJiZmZjODNkZGY2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL2ljdS91bmljb2RlL3VudW0uaAorKysgYi9Tb3VyY2UvV1RGL2ljdS91bmljb2Rl
L3VudW0uaApAQCAtMzc1LDEyICszNzUsMTkgQEAgdHlwZWRlZiBlbnVtIFVOdW1iZXJGb3JtYXRG
aWVsZHMgewogICAgIFVOVU1fUEVSTUlMTF9GSUVMRCwKICAgICAvKiogQHN0YWJsZSBJQ1UgNDkg
Ki8KICAgICBVTlVNX1NJR05fRklFTEQsCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKyAgICAv
KiogQGRyYWZ0IElDVSA2NCAqLworICAgIFVOVU1fTUVBU1VSRV9VTklUX0ZJRUxELAorICAgIC8q
KiBAZHJhZnQgSUNVIDY0ICovCisgICAgVU5VTV9DT01QQUNUX0ZJRUxELAorI2VuZGlmICAvKiBV
X0hJREVfRFJBRlRfQVBJICovCisKICNpZm5kZWYgVV9ISURFX0RFUFJFQ0FURURfQVBJCiAgICAg
LyoqCiAgICAgICogT25lIG1vcmUgdGhhbiB0aGUgaGlnaGVzdCBub3JtYWwgVU51bWJlckZvcm1h
dEZpZWxkcyB2YWx1ZS4KICAgICAgKiBAZGVwcmVjYXRlZCBJQ1UgNTggVGhlIG51bWVyaWMgdmFs
dWUgbWF5IGNoYW5nZSBvdmVyIHRpbWUsIHNlZSBJQ1UgdGlja2V0ICMxMjQyMC4KICAgICAgKi8K
LSAgICBVTlVNX0ZJRUxEX0NPVU5UCisgICAgVU5VTV9GSUVMRF9DT1VOVCA9IFVOVU1fU0lHTl9G
SUVMRCArIDMKICNlbmRpZiAgLyogVV9ISURFX0RFUFJFQ0FURURfQVBJICovCiB9IFVOdW1iZXJG
b3JtYXRGaWVsZHM7CiAKQEAgLTEwMjIsMTYgKzEwMjksMTggQEAgdHlwZWRlZiBlbnVtIFVOdW1i
ZXJGb3JtYXRBdHRyaWJ1dGUgewogICAgICoKICAgICogQHN0YWJsZSBJQ1UgNTEgKi8KICAgVU5V
TV9TQ0FMRSA9IDIxLAotI2lmbmRlZiBVX0hJREVfSU5URVJOQUxfQVBJCisKKyNpZm5kZWYgVV9I
SURFX0RSQUZUX0FQSQogICAvKioKLSAgICogTWluaW11bSBncm91cGluZyBkaWdpdHMsIHRlY2hu
b2xvZ3kgcHJldmlldy4KKyAgICogTWluaW11bSBncm91cGluZyBkaWdpdHM7IG1vc3QgY29tbW9u
bHkgc2V0IHRvIDIgdG8gcHJpbnQgIjEwMDAiIGluc3RlYWQgb2YgIjEsMDAwIi4KICAgICogU2Vl
IERlY2ltYWxGb3JtYXQ6OmdldE1pbmltdW1Hcm91cGluZ0RpZ2l0cygpLgogICAgKgotICAgKiBA
aW50ZXJuYWwgdGVjaG5vbG9neSBwcmV2aWV3CisgICAqIEZvciBiZXR0ZXIgY29udHJvbCBvdmVy
IGdyb3VwaW5nIHN0cmF0ZWdpZXMsIHVzZSBVTnVtYmVyRm9ybWF0dGVyLgorICAgKgorICAgKiBA
ZHJhZnQgSUNVIDY0CiAgICAqLwogICBVTlVNX01JTklNVU1fR1JPVVBJTkdfRElHSVRTID0gMjIs
Ci0gIC8qIFRPRE86IHRlc3QgQyBBUEkgd2hlbiBpdCBiZWNvbWVzIEBkcmFmdCAqLwotI2VuZGlm
ICAvKiBVX0hJREVfSU5URVJOQUxfQVBJICovCisjZW5kaWYgLyogVV9ISURFX0RSQUZUX0FQSSAq
LwogCiAgIC8qKiAKICAgICogaWYgdGhpcyBhdHRyaWJ1dGUgaXMgc2V0IHRvIDAsIGl0IGlzIHNl
dCB0byBVTlVNX0NVUlJFTkNZX1NUQU5EQVJEIHB1cnBvc2UsCkBAIC0xMDQxLDExICsxMDUwLDEy
IEBAIHR5cGVkZWYgZW51bSBVTnVtYmVyRm9ybWF0QXR0cmlidXRlIHsKICAgICovCiAgIFVOVU1f
Q1VSUkVOQ1lfVVNBR0UgPSAyMywKIAotICAvKiBUaGUgZm9sbG93aW5nIGNhbm5vdCBiZSAjaWZu
ZGVmIFVfSElERV9JTlRFUk5BTF9BUEksIG5lZWRlZCBpbiAuaCBmaWxlIHZhcmlhYmxlIGRlY2xh
cmFyaW9ucyAqLworI2lmbmRlZiBVX0hJREVfSU5URVJOQUxfQVBJCiAgIC8qKiBPbmUgYmVsb3cg
dGhlIGZpcnN0IGJpdGZpZWxkLWJvb2xlYW4gaXRlbS4KICAgICogQWxsIGl0ZW1zIGFmdGVyIHRo
aXMgb25lIGFyZSBzdG9yZWQgaW4gYm9vbGVhbiBmb3JtLgogICAgKiBAaW50ZXJuYWwgKi8KICAg
VU5VTV9NQVhfTk9OQk9PTEVBTl9BVFRSSUJVVEUgPSAweDBGRkYsCisjZW5kaWYgLyogVV9ISURF
X0lOVEVSTkFMX0FQSSAqLwogCiAgIC8qKiBJZiAxLCBzcGVjaWZpZXMgdGhhdCBpZiBzZXR0aW5n
IHRoZSAibWF4IGludGVnZXIgZGlnaXRzIiBhdHRyaWJ1dGUgd291bGQgdHJ1bmNhdGUgYSB2YWx1
ZSwgc2V0IGFuIGVycm9yIHN0YXR1cyByYXRoZXIgdGhhbiBzaWxlbnRseSB0cnVuY2F0aW5nLgog
ICAgKiBGb3IgZXhhbXBsZSwgIGZvcm1hdHRpbmcgdGhlIHZhbHVlIDEyMzQgd2l0aCA0IG1heCBp
bnQgZGlnaXRzIHdvdWxkIHN1Y2NlZWQsIGJ1dCBmb3JtYXR0aW5nIDEyMzQ1IHdvdWxkIGZhaWwu
IFRoZXJlIGlzIG5vIGVmZmVjdCBvbiBwYXJzaW5nLgpAQCAtMTA3MSwyNCArMTA4MSwzMyBAQCB0
eXBlZGVmIGVudW0gVU51bWJlckZvcm1hdEF0dHJpYnV0ZSB7CiAgICAqLwogICBVTlVNX1BBUlNF
X0RFQ0lNQUxfTUFSS19SRVFVSVJFRCA9IDB4MTAwMiwKIAotICAvKiBUaGUgZm9sbG93aW5nIGNh
bm5vdCBiZSAjaWZuZGVmIFVfSElERV9JTlRFUk5BTF9BUEksIG5lZWRlZCBpbiAuaCBmaWxlIHZh
cmlhYmxlIGRlY2xhcmFyaW9ucyAqLwotICAvKiogTGltaXQgb2YgYm9vbGVhbiBhdHRyaWJ1dGVz
LgotICAgKiBAaW50ZXJuYWwgKi8KLSAgVU5VTV9MSU1JVF9CT09MRUFOX0FUVFJJQlVURSA9IDB4
MTAwMywKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQogCiAgIC8qKgotICAgKiBXaGV0aGVyIHBh
cnNpbmcgaXMgc2Vuc2l0aXZlIHRvIGNhc2UgKGxvd2VyY2FzZS91cHBlcmNhc2UpLgotICAgKiBU
T0RPOiBBZGQgdG8gdGhlIHRlc3Qgc3VpdGUuCi0gICAqIEBpbnRlcm5hbCBUaGlzIEFQSSBpcyBh
IHRlY2huaWNhbCBwcmV2aWV3LiBJdCBtYXkgY2hhbmdlIGluIGFuIHVwY29taW5nIHJlbGVhc2Uu
CisgICAqIFBhcnNpbmc6IGlmIHNldCB0byAxLCBwYXJzaW5nIGlzIHNlbnNpdGl2ZSB0byBjYXNl
IChsb3dlcmNhc2UvdXBwZXJjYXNlKS4KKyAgICoKKyAgICogQGRyYWZ0IElDVSA2NAogICAgKi8K
LSAgVU5VTV9QQVJTRV9DQVNFX1NFTlNJVElWRSA9IDB4MTAwNCwKKyAgVU5VTV9QQVJTRV9DQVNF
X1NFTlNJVElWRSA9IDB4MTAwMywKIAogICAvKioKLSAgICogRm9ybWF0dGluZzogd2hldGhlciB0
byBzaG93IHRoZSBwbHVzIHNpZ24gb24gbm9uLW5lZ2F0aXZlIG51bWJlcnMuCi0gICAqIFRPRE86
IEFkZCB0byB0aGUgdGVzdCBzdWl0ZS4KLSAgICogQGludGVybmFsIFRoaXMgQVBJIGlzIGEgdGVj
aG5pY2FsIHByZXZpZXcuIEl0IG1heSBjaGFuZ2UgaW4gYW4gdXBjb21pbmcgcmVsZWFzZS4KKyAg
ICogRm9ybWF0dGluZzogaWYgc2V0IHRvIDEsIHdoZXRoZXIgdG8gc2hvdyB0aGUgcGx1cyBzaWdu
IG9uIG5vbi1uZWdhdGl2ZSBudW1iZXJzLgorICAgKgorICAgKiBGb3IgYmV0dGVyIGNvbnRyb2wg
b3ZlciBzaWduIGRpc3BsYXksIHVzZSBVTnVtYmVyRm9ybWF0dGVyLgorICAgKgorICAgKiBAZHJh
ZnQgSUNVIDY0CiAgICAqLwotICBVTlVNX1NJR05fQUxXQVlTX1NIT1dOID0gMHgxMDA1LAorICBV
TlVNX1NJR05fQUxXQVlTX1NIT1dOID0gMHgxMDA0LAorCisjZW5kaWYgLyogVV9ISURFX0RSQUZU
X0FQSSAqLworCisjaWZuZGVmIFVfSElERV9JTlRFUk5BTF9BUEkKKyAgLyoqIExpbWl0IG9mIGJv
b2xlYW4gYXR0cmlidXRlcy4gKHZhbHVlIHNob3VsZAorICAgKiBub3QgZGVwZW5kIG9uIFVfSElE
RSBjb25kaXRpb25hbHMpCisgICAqIEBpbnRlcm5hbCAqLworICBVTlVNX0xJTUlUX0JPT0xFQU5f
QVRUUklCVVRFID0gMHgxMDA1LAorI2VuZGlmIC8qIFVfSElERV9JTlRFUk5BTF9BUEkgKi8KKwog
fSBVTnVtYmVyRm9ybWF0QXR0cmlidXRlOwogCiAvKioKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
aWN1L3VuaWNvZGUvdW51bWJlcmZvcm1hdHRlci5oIGIvU291cmNlL1dURi9pY3UvdW5pY29kZS91
bnVtYmVyZm9ybWF0dGVyLmgKaW5kZXggYjhmMzBjNGZmNjdkOTJlY2UwMTBlZGI5YzBiYzhhOWZi
OGRlNDY3Zi4uZTRjMjFhNGU0YWIxZDE1YTFiY2NiOGZmNmEzOGZhMTgxNDExNzMyMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi9pY3UvdW5pY29kZS91bnVtYmVyZm9ybWF0dGVyLmgKKysrIGIvU291
cmNlL1dURi9pY3UvdW5pY29kZS91bnVtYmVyZm9ybWF0dGVyLmgKQEAgLTEsNzE3ICsxLDcxMyBA
QAotLy8gwqkgMjAxOCBhbmQgbGF0ZXI6IFVuaWNvZGUsIEluYy4gYW5kIG90aGVycy4NCi0vLyBM
aWNlbnNlICYgdGVybXMgb2YgdXNlOiBodHRwOi8vd3d3LnVuaWNvZGUub3JnL2NvcHlyaWdodC5o
dG1sDQotDQotI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiDQotDQotI2lmICFVQ09ORklHX05P
X0ZPUk1BVFRJTkcNCi0jaWZuZGVmIF9fVU5VTUJFUkZPUk1BVFRFUl9IX18NCi0jZGVmaW5lIF9f
VU5VTUJFUkZPUk1BVFRFUl9IX18NCi0NCi0jaW5jbHVkZSAidW5pY29kZS91ZmllbGRwb3NpdGVy
LmgiDQotI2luY2x1ZGUgInVuaWNvZGUvdW1pc2MuaCINCi0NCi0NCi0vKioNCi0gKiBcZmlsZQ0K
LSAqIFxicmllZiBDLWNvbXBhdGlibGUgQVBJIGZvciBsb2NhbGl6ZWQgbnVtYmVyIGZvcm1hdHRp
bmc7IG5vdCByZWNvbW1lbmRlZCBmb3IgQysrLg0KLSAqDQotICogVGhpcyBpcyB0aGUgQy1jb21w
YXRpYmxlIHZlcnNpb24gb2YgdGhlIE51bWJlckZvcm1hdHRlciBBUEkgaW50cm9kdWNlZCBpbiBJ
Q1UgNjAuIEMrKyB1c2VycyBzaG91bGQNCi0gKiBpbmNsdWRlIHVuaWNvZGUvbnVtYmVyZm9ybWF0
dGVyLmggYW5kIHVzZSB0aGUgcHJvcGVyIEMrKyBBUElzLg0KLSAqDQotICogVGhlIEMgQVBJIGFj
Y2VwdHMgYSBudW1iZXIgc2tlbGV0b24gc3RyaW5nIGZvciBzcGVjaWZ5aW5nIHRoZSBzZXR0aW5n
cyBmb3IgZm9ybWF0dGluZywgd2hpY2ggY292ZXJzIGENCi0gKiB2ZXJ5IGxhcmdlIHN1YnNldCBv
ZiBhbGwgcG9zc2libGUgbnVtYmVyIGZvcm1hdHRpbmcgZmVhdHVyZXMuIEZvciBtb3JlIGluZm9y
bWF0aW9uIG9uIG51bWJlciBza2VsZXRvbg0KLSAqIHN0cmluZ3MsIHNlZSB1bmljb2RlL251bWJl
cmZvcm1hdHRlci5oLg0KLSAqDQotICogV2hlbiB1c2luZyBVTnVtYmVyRm9ybWF0dGVyLCB3aGlj
aCBpcyB0cmVhdGVkIGFzIGltbXV0YWJsZSwgdGhlIHJlc3VsdHMgYXJlIGV4cG9ydGVkIHRvIGEg
bXV0YWJsZQ0KLSAqIFVGb3JtYXR0ZWROdW1iZXIgb2JqZWN0LCB3aGljaCB5b3Ugc3Vic2VxdWVu
dGx5IHVzZSBmb3IgcG9wdWxhdGluZyB5b3VyIHN0cmluZyBidWZmZXIgb3IgaXRlcmF0aW5nIG92
ZXINCi0gKiB0aGUgZmllbGRzLg0KLSAqDQotICogRXhhbXBsZSBjb2RlOg0KLSAqIDxwcmU+DQot
ICogLy8gU2V0dXA6DQotICogVUVycm9yQ29kZSBlYyA9IFVfWkVST19FUlJPUjsNCi0gKiBVTnVt
YmVyRm9ybWF0dGVyKiB1Zm9ybWF0dGVyID0gdW51bWZfb3BlbkZvclNrZWxldG9uQW5kTG9jYWxl
KHUicHJlY2lzaW9uLWludGVnZXIiLCAtMSwgImVuIiwgJmVjKTsNCi0gKiBVRm9ybWF0dGVkTnVt
YmVyKiB1cmVzdWx0ID0gdW51bWZfb3BlblJlc3VsdCgmZWMpOw0KLSAqIGlmIChVX0ZBSUxVUkUo
ZWMpKSB7IHJldHVybjsgfQ0KLSAqDQotICogLy8gRm9ybWF0IGEgZG91YmxlOg0KLSAqIHVudW1m
X2Zvcm1hdERvdWJsZSh1Zm9ybWF0dGVyLCA1MTQyLjMsIHVyZXN1bHQsICZlYyk7DQotICogaWYg
KFVfRkFJTFVSRShlYykpIHsgcmV0dXJuOyB9DQotICoNCi0gKiAvLyBFeHBvcnQgdGhlIHN0cmlu
ZyB0byBhIG1hbGxvYydkIGJ1ZmZlcjoNCi0gKiBpbnQzMl90IGxlbiA9IHVudW1mX3Jlc3VsdFRv
U3RyaW5nKHVyZXN1bHQsIE5VTEwsIDAsICZlYyk7DQotICogLy8gYXQgdGhpcyBwb2ludCwgZWMg
PT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1INCi0gKiBlYyA9IFVfWkVST19FUlJPUjsNCi0gKiBV
Q2hhciogYnVmZmVyID0gKFVDaGFyKikgbWFsbG9jKChsZW4rMSkqc2l6ZW9mKFVDaGFyKSk7DQot
ICogdW51bWZfcmVzdWx0VG9TdHJpbmcodXJlc3VsdCwgYnVmZmVyLCBsZW4rMSwgJmVjKTsNCi0g
KiBpZiAoVV9GQUlMVVJFKGVjKSkgeyByZXR1cm47IH0NCi0gKiAvLyBidWZmZXIgc2hvdWxkIGVx
dWFsICI1LDE0MiINCi0gKg0KLSAqIC8vIENsZWFudXA6DQotICogdW51bWZfY2xvc2UodWZvcm1h
dHRlcik7DQotICogdW51bWZfY2xvc2VSZXN1bHQodXJlc3VsdCk7DQotICogZnJlZShidWZmZXIp
Ow0KLSAqIDwvcHJlPg0KLSAqDQotICogSWYgeW91IGFyZSBhIEMrKyB1c2VyIGxpbmtpbmcgYWdh
aW5zdCB0aGUgQyBsaWJyYXJpZXMsIHlvdSBjYW4gdXNlIHRoZSBMb2NhbFBvaW50ZXIgdmVyc2lv
bnMgb2YgdGhlc2UNCi0gKiBBUElzLiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgdXNlcyBMb2NhbFBv
aW50ZXIgd2l0aCB0aGUgZGVjaW1hbCBudW1iZXIgYW5kIGZpZWxkIHBvc2l0aW9uIEFQSXM6DQot
ICoNCi0gKiA8cHJlPg0KLSAqIC8vIFNldHVwOg0KLSAqIExvY2FsVU51bWJlckZvcm1hdHRlclBv
aW50ZXIgdWZvcm1hdHRlcih1bnVtZl9vcGVuRm9yU2tlbGV0b25BbmRMb2NhbGUodSJwZXJjZW50
IiwgLTEsICJlbiIsICZlYykpOw0KLSAqIExvY2FsVUZvcm1hdHRlZE51bWJlclBvaW50ZXIgdXJl
c3VsdCh1bnVtZl9vcGVuUmVzdWx0KCZlYykpOw0KLSAqIGlmIChVX0ZBSUxVUkUoZWMpKSB7IHJl
dHVybjsgfQ0KLSAqDQotICogLy8gRm9ybWF0IGEgZGVjaW1hbCBudW1iZXI6DQotICogdW51bWZf
Zm9ybWF0RGVjaW1hbCh1Zm9ybWF0dGVyLmdldEFsaWFzKCksICI5Ljg3RS0zIiwgLTEsIHVyZXN1
bHQuZ2V0QWxpYXMoKSwgJmVjKTsNCi0gKiBpZiAoVV9GQUlMVVJFKGVjKSkgeyByZXR1cm47IH0N
Ci0gKg0KLSAqIC8vIEdldCB0aGUgbG9jYXRpb24gb2YgdGhlIHBlcmNlbnQgc2lnbjoNCi0gKiBV
RmllbGRQb3NpdGlvbiB1ZnBvcyA9IHtVTlVNX1BFUkNFTlRfRklFTEQsIDAsIDB9Ow0KLSAqIHVu
dW1mX3Jlc3VsdE5leHRGaWVsZFBvc2l0aW9uKHVyZXN1bHQuZ2V0QWxpYXMoKSwgJnVmcG9zLCAm
ZWMpOw0KLSAqIC8vIHVmcG9zIHNob3VsZCBjb250YWluIGJlZ2luSW5kZXg9NyBhbmQgZW5kSW5k
ZXg9OCBzaW5jZSB0aGUgc3RyaW5nIGlzICIwLjAwOTg3JSINCi0gKg0KLSAqIC8vIE5vIG5lZWQg
dG8gZG8gYW55IGNsZWFudXAgc2luY2Ugd2UgYXJlIHVzaW5nIExvY2FsUG9pbnRlci4NCi0gKiA8
L3ByZT4NCi0gKi8NCi0NCi0NCi0jaWZuZGVmIFVfSElERV9EUkFGVF9BUEkNCi0vKioNCi0gKiBB
biBlbnVtIGRlY2xhcmluZyBob3cgdG8gcmVuZGVyIHVuaXRzLCBpbmNsdWRpbmcgY3VycmVuY2ll
cy4gRXhhbXBsZSBvdXRwdXRzIHdoZW4gZm9ybWF0dGluZyAxMjMgVVNEIGFuZCAxMjMNCi0gKiBt
ZXRlcnMgaW4gPGVtPmVuLUNBPC9lbT46DQotICoNCi0gKiA8cD4NCi0gKiA8dWw+DQotICogPGxp
Pk5BUlJPVyo6ICIkMTIzLjAwIiBhbmQgIjEyMyBtIg0KLSAqIDxsaT5TSE9SVDogIlVTJMKgMTIz
LjAwIiBhbmQgIjEyMyBtIg0KLSAqIDxsaT5GVUxMX05BTUU6ICIxMjMuMDAgVVMgZG9sbGFycyIg
YW5kICIxMjMgbWV0ZXJzIg0KLSAqIDxsaT5JU09fQ09ERTogIlVTRMKgMTIzLjAwIiBhbmQgdW5k
ZWZpbmVkIGJlaGF2aW9yDQotICogPGxpPkhJRERFTjogIjEyMy4wMCIgYW5kICIxMjMiDQotICog
PC91bD4NCi0gKg0KLSAqIDxwPg0KLSAqIFRoaXMgZW51bSBpcyBzaW1pbGFyIHRvIHtAbGluayBj
b20uaWJtLmljdS50ZXh0Lk1lYXN1cmVGb3JtYXQuRm9ybWF0V2lkdGh9Lg0KLSAqDQotICogQGRy
YWZ0IElDVSA2MA0KLSAqLw0KLXR5cGVkZWYgZW51bSBVTnVtYmVyVW5pdFdpZHRoIHsNCi0gICAg
LyoqDQotICAgICAqIFByaW50IGFuIGFiYnJldmlhdGVkIHZlcnNpb24gb2YgdGhlIHVuaXQgbmFt
ZS4gU2ltaWxhciB0byBTSE9SVCwgYnV0IGFsd2F5cyB1c2UgdGhlIHNob3J0ZXN0IGF2YWlsYWJs
ZQ0KLSAgICAgKiBhYmJyZXZpYXRpb24gb3Igc3ltYm9sLiBUaGlzIG9wdGlvbiBjYW4gYmUgdXNl
ZCB3aGVuIHRoZSBjb250ZXh0IGhpbnRzIGF0IHRoZSBpZGVudGl0eSBvZiB0aGUgdW5pdC4gRm9y
IG1vcmUNCi0gICAgICogaW5mb3JtYXRpb24gb24gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBOQVJS
T1cgYW5kIFNIT1JULCBzZWUgU0hPUlQuDQotICAgICAqDQotICAgICAqIDxwPg0KLSAgICAgKiBJ
biBDTERSLCB0aGlzIG9wdGlvbiBjb3JyZXNwb25kcyB0byB0aGUgIk5hcnJvdyIgZm9ybWF0IGZv
ciBtZWFzdXJlIHVuaXRzIGFuZCB0aGUgIsKkwqTCpMKkwqQiIHBsYWNlaG9sZGVyIGZvcg0KLSAg
ICAgKiBjdXJyZW5jaWVzLg0KLSAgICAgKg0KLSAgICAgKiBAZHJhZnQgSUNVIDYwDQotICAgICAq
Lw0KLSAgICAgICAgICAgIFVOVU1fVU5JVF9XSURUSF9OQVJST1csDQotDQotICAgIC8qKg0KLSAg
ICAgKiBQcmludCBhbiBhYmJyZXZpYXRlZCB2ZXJzaW9uIG9mIHRoZSB1bml0IG5hbWUuIFNpbWls
YXIgdG8gTkFSUk9XLCBidXQgdXNlIGEgc2xpZ2h0bHkgd2lkZXIgYWJicmV2aWF0aW9uIG9yDQot
ICAgICAqIHN5bWJvbCB3aGVuIHRoZXJlIG1heSBiZSBhbWJpZ3VpdHkuIFRoaXMgaXMgdGhlIGRl
ZmF1bHQgYmVoYXZpb3IuDQotICAgICAqDQotICAgICAqIDxwPg0KLSAgICAgKiBGb3IgZXhhbXBs
ZSwgaW4gPGVtPmVzLVVTPC9lbT4sIHRoZSBTSE9SVCBmb3JtIGZvciBGYWhyZW5oZWl0IGlzICJ7
MH0gwrBGIiwgYnV0IHRoZSBOQVJST1cgZm9ybSBpcyAiezB9wrAiLA0KLSAgICAgKiBzaW5jZSBG
YWhyZW5oZWl0IGlzIHRoZSBjdXN0b21hcnkgdW5pdCBmb3IgdGVtcGVyYXR1cmUgaW4gdGhhdCBs
b2NhbGUuDQotICAgICAqDQotICAgICAqIDxwPg0KLSAgICAgKiBJbiBDTERSLCB0aGlzIG9wdGlv
biBjb3JyZXNwb25kcyB0byB0aGUgIlNob3J0IiBmb3JtYXQgZm9yIG1lYXN1cmUgdW5pdHMgYW5k
IHRoZSAiwqQiIHBsYWNlaG9sZGVyIGZvcg0KLSAgICAgKiBjdXJyZW5jaWVzLg0KLSAgICAgKg0K
LSAgICAgKiBAZHJhZnQgSUNVIDYwDQotICAgICAqLw0KLSAgICAgICAgICAgIFVOVU1fVU5JVF9X
SURUSF9TSE9SVCwNCi0NCi0gICAgLyoqDQotICAgICAqIFByaW50IHRoZSBmdWxsIG5hbWUgb2Yg
dGhlIHVuaXQsIHdpdGhvdXQgYW55IGFiYnJldmlhdGlvbnMuDQotICAgICAqDQotICAgICAqIDxw
Pg0KLSAgICAgKiBJbiBDTERSLCB0aGlzIG9wdGlvbiBjb3JyZXNwb25kcyB0byB0aGUgZGVmYXVs
dCBmb3JtYXQgZm9yIG1lYXN1cmUgdW5pdHMgYW5kIHRoZSAiwqTCpMKkIiBwbGFjZWhvbGRlciBm
b3INCi0gICAgICogY3VycmVuY2llcy4NCi0gICAgICoNCi0gICAgICogQGRyYWZ0IElDVSA2MA0K
LSAgICAgKi8NCi0gICAgICAgICAgICBVTlVNX1VOSVRfV0lEVEhfRlVMTF9OQU1FLA0KLQ0KLSAg
ICAvKioNCi0gICAgICogVXNlIHRoZSB0aHJlZS1kaWdpdCBJU08gWFhYIGNvZGUgaW4gcGxhY2Ug
b2YgdGhlIHN5bWJvbCBmb3IgZGlzcGxheWluZyBjdXJyZW5jaWVzLiBUaGUgYmVoYXZpb3Igb2Yg
dGhpcw0KLSAgICAgKiBvcHRpb24gaXMgY3VycmVudGx5IHVuZGVmaW5lZCBmb3IgdXNlIHdpdGgg
bWVhc3VyZSB1bml0cy4NCi0gICAgICoNCi0gICAgICogPHA+DQotICAgICAqIEluIENMRFIsIHRo
aXMgb3B0aW9uIGNvcnJlc3BvbmRzIHRvIHRoZSAiwqTCpCIgcGxhY2Vob2xkZXIgZm9yIGN1cnJl
bmNpZXMuDQotICAgICAqDQotICAgICAqIEBkcmFmdCBJQ1UgNjANCi0gICAgICovDQotICAgICAg
ICAgICAgVU5VTV9VTklUX1dJRFRIX0lTT19DT0RFLA0KLQ0KLSAgICAvKioNCi0gICAgICogRm9y
bWF0IHRoZSBudW1iZXIgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgdW5pdCwgYnV0IGRvIG5v
dCBkaXNwbGF5IHRoZSB1bml0LiBGb3IgY3VycmVuY2llcywgYXBwbHkNCi0gICAgICogbW9uZXRh
cnkgc3ltYm9scyBhbmQgZm9ybWF0cyBhcyB3aXRoIFNIT1JULCBidXQgb21pdCB0aGUgY3VycmVu
Y3kgc3ltYm9sLiBGb3IgbWVhc3VyZSB1bml0cywgdGhlIGJlaGF2aW9yIGlzDQotICAgICAqIGVx
dWl2YWxlbnQgdG8gbm90IHNwZWNpZnlpbmcgdGhlIHVuaXQgYXQgYWxsLg0KLSAgICAgKg0KLSAg
ICAgKiBAZHJhZnQgSUNVIDYwDQotICAgICAqLw0KLSAgICAgICAgICAgIFVOVU1fVU5JVF9XSURU
SF9ISURERU4sDQotDQotICAgIC8qKg0KLSAgICAgKiBPbmUgbW9yZSB0aGFuIHRoZSBoaWdoZXN0
IFVOdW1iZXJVbml0V2lkdGggdmFsdWUuDQotICAgICAqDQotICAgICAqIEBpbnRlcm5hbCBJQ1Ug
NjA6IFRoZSBudW1lcmljIHZhbHVlIG1heSBjaGFuZ2Ugb3ZlciB0aW1lOyBzZWUgSUNVIHRpY2tl
dCAjMTI0MjAuDQotICAgICAqLw0KLSAgICAgICAgICAgIFVOVU1fVU5JVF9XSURUSF9DT1VOVA0K
LX0gVU51bWJlclVuaXRXaWR0aDsNCi0jZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8NCi0N
Ci0jaWZuZGVmIFVfSElERV9EUkFGVF9BUEkNCi0vKioNCi0gKiBBbiBlbnVtIGRlY2xhcmluZyB0
aGUgc3RyYXRlZ3kgZm9yIHdoZW4gYW5kIGhvdyB0byBkaXNwbGF5IGdyb3VwaW5nIHNlcGFyYXRv
cnMgKGkuZS4sIHRoZQ0KLSAqIHNlcGFyYXRvciwgb2Z0ZW4gYSBjb21tYSBvciBwZXJpb2QsIGFm
dGVyIGV2ZXJ5IDItMyBwb3dlcnMgb2YgdGVuKS4gVGhlIGNob2ljZXMgYXJlIHNldmVyYWwNCi0g
KiBwcmUtYnVpbHQgc3RyYXRlZ2llcyBmb3IgZGlmZmVyZW50IHVzZSBjYXNlcyB0aGF0IGVtcGxv
eSBsb2NhbGUgZGF0YSB3aGVuZXZlciBwb3NzaWJsZS4gRXhhbXBsZQ0KLSAqIG91dHB1dHMgZm9y
IDEyMzQgYW5kIDEyMzQ1NjcgaW4gPGVtPmVuLUlOPC9lbT46DQotICoNCi0gKiA8dWw+DQotICog
PGxpPk9GRjogMTIzNCBhbmQgMTIzNDUNCi0gKiA8bGk+TUlOMjogMTIzNCBhbmQgMTIsMzQsNTY3
DQotICogPGxpPkFVVE86IDEsMjM0IGFuZCAxMiwzNCw1NjcNCi0gKiA8bGk+T05fQUxJR05FRDog
MSwyMzQgYW5kIDEyLDM0LDU2Nw0KLSAqIDxsaT5USE9VU0FORFM6IDEsMjM0IGFuZCAxLDIzNCw1
NjcNCi0gKiA8L3VsPg0KLSAqDQotICogPHA+DQotICogVGhlIGRlZmF1bHQgaXMgQVVUTywgd2hp
Y2ggZGlzcGxheXMgZ3JvdXBpbmcgc2VwYXJhdG9ycyB1bmxlc3MgdGhlIGxvY2FsZSBkYXRhIHNh
eXMgdGhhdCBncm91cGluZw0KLSAqIGlzIG5vdCBjdXN0b21hcnkuIFRvIGZvcmNlIGdyb3VwaW5n
IGZvciBhbGwgbnVtYmVycyBncmVhdGVyIHRoYW4gMTAwMCBjb25zaXN0ZW50bHkgYWNyb3NzIGxv
Y2FsZXMsDQotICogdXNlIE9OX0FMSUdORUQuIE9uIHRoZSBvdGhlciBoYW5kLCB0byBkaXNwbGF5
IGdyb3VwaW5nIGxlc3MgZnJlcXVlbnRseSB0aGFuIHRoZSBkZWZhdWx0LCB1c2UgTUlOMg0KLSAq
IG9yIE9GRi4gU2VlIHRoZSBkb2NzIG9mIGVhY2ggb3B0aW9uIGZvciBkZXRhaWxzLg0KLSAqDQot
ICogPHA+DQotICogTm90ZTogVGhpcyBlbnVtIHNwZWNpZmllcyB0aGUgc3RyYXRlZ3kgZm9yIGdy
b3VwaW5nIHNpemVzLiBUbyBzZXQgd2hpY2ggY2hhcmFjdGVyIHRvIHVzZSBhcyB0aGUNCi0gKiBn
cm91cGluZyBzZXBhcmF0b3IsIHVzZSB0aGUgInN5bWJvbHMiIHNldHRlci4NCi0gKg0KLSAqIEBk
cmFmdCBJQ1UgNjEgLS0gVE9ETzogVGhpcyBzaG91bGQgYmUgcmVuYW1lZCB0byBVTnVtYmVyR3Jv
dXBpbmdTdHJhdGVneSBiZWZvcmUgcHJvbW90aW5nIHRvIHN0YWJsZSwNCi0gKiBmb3IgY29uc2lz
dGVuY3kgd2l0aCB0aGUgb3RoZXIgZW51bXMuDQotICovDQotdHlwZWRlZiBlbnVtIFVHcm91cGlu
Z1N0cmF0ZWd5IHsNCi0gICAgLyoqDQotICAgICAqIERvIG5vdCBkaXNwbGF5IGdyb3VwaW5nIHNl
cGFyYXRvcnMgaW4gYW55IGxvY2FsZS4NCi0gICAgICoNCi0gICAgICogQGRyYWZ0IElDVSA2MQ0K
LSAgICAgKi8NCi0gICAgICAgICAgICBVTlVNX0dST1VQSU5HX09GRiwNCi0NCi0gICAgLyoqDQot
ICAgICAqIERpc3BsYXkgZ3JvdXBpbmcgdXNpbmcgbG9jYWxlIGRlZmF1bHRzLCBleGNlcHQgZG8g
bm90IHNob3cgZ3JvdXBpbmcgb24gdmFsdWVzIHNtYWxsZXIgdGhhbg0KLSAgICAgKiAxMDAwMCAo
c3VjaCB0aGF0IHRoZXJlIGlzIGEgPGVtPm1pbmltdW0gb2YgdHdvIGRpZ2l0czwvZW0+IGJlZm9y
ZSB0aGUgZmlyc3Qgc2VwYXJhdG9yKS4NCi0gICAgICoNCi0gICAgICogPHA+DQotICAgICAqIE5v
dGUgdGhhdCBsb2NhbGVzIG1heSByZXN0cmljdCBncm91cGluZyBzZXBhcmF0b3JzIHRvIGJlIGRp
c3BsYXllZCBvbmx5IG9uIDEgbWlsbGlvbiBvcg0KLSAgICAgKiBncmVhdGVyIChmb3IgZXhhbXBs
ZSwgZWUgYW5kIGh1KSBvciBkaXNhYmxlIGdyb3VwaW5nIGFsdG9nZXRoZXIgKGZvciBleGFtcGxl
LCBiZyBjdXJyZW5jeSkuDQotICAgICAqDQotICAgICAqIDxwPg0KLSAgICAgKiBMb2NhbGUgZGF0
YSBpcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHNlcGFyYXRlIGxhcmdlciBudW1iZXJz
IGludG8gZ3JvdXBzIG9mIDINCi0gICAgICogKGN1c3RvbWFyeSBpbiBTb3V0aCBBc2lhKSBvciBn
cm91cHMgb2YgMyAoY3VzdG9tYXJ5IGluIEV1cm9wZSBhbmQgdGhlIEFtZXJpY2FzKS4NCi0gICAg
ICoNCi0gICAgICogQGRyYWZ0IElDVSA2MQ0KLSAgICAgKi8NCi0gICAgICAgICAgICBVTlVNX0dS
T1VQSU5HX01JTjIsDQotDQotICAgIC8qKg0KLSAgICAgKiBEaXNwbGF5IGdyb3VwaW5nIHVzaW5n
IHRoZSBkZWZhdWx0IHN0cmF0ZWd5IGZvciBhbGwgbG9jYWxlcy4gVGhpcyBpcyB0aGUgZGVmYXVs
dCBiZWhhdmlvci4NCi0gICAgICoNCi0gICAgICogPHA+DQotICAgICAqIE5vdGUgdGhhdCBsb2Nh
bGVzIG1heSByZXN0cmljdCBncm91cGluZyBzZXBhcmF0b3JzIHRvIGJlIGRpc3BsYXllZCBvbmx5
IG9uIDEgbWlsbGlvbiBvcg0KLSAgICAgKiBncmVhdGVyIChmb3IgZXhhbXBsZSwgZWUgYW5kIGh1
KSBvciBkaXNhYmxlIGdyb3VwaW5nIGFsdG9nZXRoZXIgKGZvciBleGFtcGxlLCBiZyBjdXJyZW5j
eSkuDQotICAgICAqDQotICAgICAqIDxwPg0KLSAgICAgKiBMb2NhbGUgZGF0YSBpcyB1c2VkIHRv
IGRldGVybWluZSB3aGV0aGVyIHRvIHNlcGFyYXRlIGxhcmdlciBudW1iZXJzIGludG8gZ3JvdXBz
IG9mIDINCi0gICAgICogKGN1c3RvbWFyeSBpbiBTb3V0aCBBc2lhKSBvciBncm91cHMgb2YgMyAo
Y3VzdG9tYXJ5IGluIEV1cm9wZSBhbmQgdGhlIEFtZXJpY2FzKS4NCi0gICAgICoNCi0gICAgICog
QGRyYWZ0IElDVSA2MQ0KLSAgICAgKi8NCi0gICAgICAgICAgICBVTlVNX0dST1VQSU5HX0FVVE8s
DQotDQotICAgIC8qKg0KLSAgICAgKiBBbHdheXMgZGlzcGxheSB0aGUgZ3JvdXBpbmcgc2VwYXJh
dG9yIG9uIHZhbHVlcyBvZiBhdCBsZWFzdCAxMDAwLg0KLSAgICAgKg0KLSAgICAgKiA8cD4NCi0g
ICAgICogVGhpcyBvcHRpb24gaWdub3JlcyB0aGUgbG9jYWxlIGRhdGEgdGhhdCByZXN0cmljdHMg
b3IgZGlzYWJsZXMgZ3JvdXBpbmcsIGRlc2NyaWJlZCBpbiBNSU4yIGFuZA0KLSAgICAgKiBBVVRP
LiBUaGlzIG9wdGlvbiBtYXkgYmUgdXNlZnVsIHRvIG5vcm1hbGl6ZSB0aGUgYWxpZ25tZW50IG9m
IG51bWJlcnMsIHN1Y2ggYXMgaW4gYQ0KLSAgICAgKiBzcHJlYWRzaGVldC4NCi0gICAgICoNCi0g
ICAgICogPHA+DQotICAgICAqIExvY2FsZSBkYXRhIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRo
ZXIgdG8gc2VwYXJhdGUgbGFyZ2VyIG51bWJlcnMgaW50byBncm91cHMgb2YgMg0KLSAgICAgKiAo
Y3VzdG9tYXJ5IGluIFNvdXRoIEFzaWEpIG9yIGdyb3VwcyBvZiAzIChjdXN0b21hcnkgaW4gRXVy
b3BlIGFuZCB0aGUgQW1lcmljYXMpLg0KLSAgICAgKg0KLSAgICAgKiBAZHJhZnQgSUNVIDYxDQot
ICAgICAqLw0KLSAgICAgICAgICAgIFVOVU1fR1JPVVBJTkdfT05fQUxJR05FRCwNCi0NCi0gICAg
LyoqDQotICAgICAqIFVzZSB0aGUgV2VzdGVybiBkZWZhdWx0czogZ3JvdXBzIG9mIDMgYW5kIGVu
YWJsZWQgZm9yIGFsbCBudW1iZXJzIDEwMDAgb3IgZ3JlYXRlci4gRG8gbm90IHVzZQ0KLSAgICAg
KiBsb2NhbGUgZGF0YSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGdyb3VwaW5nIHN0cmF0ZWd5Lg0KLSAg
ICAgKg0KLSAgICAgKiBAZHJhZnQgSUNVIDYxDQotICAgICAqLw0KLSAgICAgICAgICAgIFVOVU1f
R1JPVVBJTkdfVEhPVVNBTkRTLA0KLQ0KLSAgICAvKioNCi0gICAgICogT25lIG1vcmUgdGhhbiB0
aGUgaGlnaGVzdCBVR3JvdXBpbmdTdHJhdGVneSB2YWx1ZS4NCi0gICAgICoNCi0gICAgICogQGlu
dGVybmFsIElDVSA2MjogVGhlIG51bWVyaWMgdmFsdWUgbWF5IGNoYW5nZSBvdmVyIHRpbWU7IHNl
ZSBJQ1UgdGlja2V0ICMxMjQyMC4NCi0gICAgICovDQotICAgICAgICAgICAgVU5VTV9HUk9VUElO
R19DT1VOVA0KLQ0KLX0gVUdyb3VwaW5nU3RyYXRlZ3k7DQotI2VuZGlmICAvKiBVX0hJREVfRFJB
RlRfQVBJICovDQotDQotI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJDQotLyoqDQotICogQW4gZW51
bSBkZWNsYXJpbmcgaG93IHRvIGRlbm90ZSBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgbnVtYmVycy4g
RXhhbXBsZSBvdXRwdXRzIHdoZW4gZm9ybWF0dGluZw0KLSAqIDEyMywgMCwgYW5kIC0xMjMgaW4g
PGVtPmVuLVVTPC9lbT46DQotICoNCi0gKiA8dWw+DQotICogPGxpPkFVVE86ICIxMjMiLCAiMCIs
IGFuZCAiLTEyMyINCi0gKiA8bGk+QUxXQVlTOiAiKzEyMyIsICIrMCIsIGFuZCAiLTEyMyINCi0g
KiA8bGk+TkVWRVI6ICIxMjMiLCAiMCIsIGFuZCAiMTIzIg0KLSAqIDxsaT5BQ0NPVU5USU5HOiAi
JDEyMyIsICIkMCIsIGFuZCAiKCQxMjMpIg0KLSAqIDxsaT5BQ0NPVU5USU5HX0FMV0FZUzogIisk
MTIzIiwgIiskMCIsIGFuZCAiKCQxMjMpIg0KLSAqIDxsaT5FWENFUFRfWkVSTzogIisxMjMiLCAi
MCIsIGFuZCAiLTEyMyINCi0gKiA8bGk+QUNDT1VOVElOR19FWENFUFRfWkVSTzogIiskMTIzIiwg
IiQwIiwgYW5kICIoJDEyMykiDQotICogPC91bD4NCi0gKg0KLSAqIDxwPg0KLSAqIFRoZSBleGFj
dCBmb3JtYXQsIGluY2x1ZGluZyB0aGUgcG9zaXRpb24gYW5kIHRoZSBjb2RlIHBvaW50IG9mIHRo
ZSBzaWduLCBkaWZmZXIgYnkgbG9jYWxlLg0KLSAqDQotICogQGRyYWZ0IElDVSA2MA0KLSAqLw0K
LXR5cGVkZWYgZW51bSBVTnVtYmVyU2lnbkRpc3BsYXkgew0KLSAgICAvKioNCi0gICAgICogU2hv
dyB0aGUgbWludXMgc2lnbiBvbiBuZWdhdGl2ZSBudW1iZXJzLCBhbmQgZG8gbm90IHNob3cgdGhl
IHNpZ24gb24gcG9zaXRpdmUgbnVtYmVycy4gVGhpcyBpcyB0aGUgZGVmYXVsdA0KLSAgICAgKiBi
ZWhhdmlvci4NCi0gICAgICoNCi0gICAgICogQGRyYWZ0IElDVSA2MA0KLSAgICAgKi8NCi0gICAg
ICAgICAgICBVTlVNX1NJR05fQVVUTywNCi0NCi0gICAgLyoqDQotICAgICAqIFNob3cgdGhlIG1p
bnVzIHNpZ24gb24gbmVnYXRpdmUgbnVtYmVycyBhbmQgdGhlIHBsdXMgc2lnbiBvbiBwb3NpdGl2
ZSBudW1iZXJzLCBpbmNsdWRpbmcgemVyby4NCi0gICAgICogVG8gaGlkZSB0aGUgc2lnbiBvbiB6
ZXJvLCBzZWUge0BsaW5rIFVOVU1fU0lHTl9FWENFUFRfWkVST30uDQotICAgICAqDQotICAgICAq
IEBkcmFmdCBJQ1UgNjANCi0gICAgICovDQotICAgICAgICAgICAgVU5VTV9TSUdOX0FMV0FZUywN
Ci0NCi0gICAgLyoqDQotICAgICAqIERvIG5vdCBzaG93IHRoZSBzaWduIG9uIHBvc2l0aXZlIG9y
IG5lZ2F0aXZlIG51bWJlcnMuDQotICAgICAqDQotICAgICAqIEBkcmFmdCBJQ1UgNjANCi0gICAg
ICovDQotICAgICAgICAgICAgVU5VTV9TSUdOX05FVkVSLA0KLQ0KLSAgICAvKioNCi0gICAgICog
VXNlIHRoZSBsb2NhbGUtZGVwZW5kZW50IGFjY291bnRpbmcgZm9ybWF0IG9uIG5lZ2F0aXZlIG51
bWJlcnMsIGFuZCBkbyBub3Qgc2hvdyB0aGUgc2lnbiBvbiBwb3NpdGl2ZSBudW1iZXJzLg0KLSAg
ICAgKg0KLSAgICAgKiA8cD4NCi0gICAgICogVGhlIGFjY291bnRpbmcgZm9ybWF0IGlzIGRlZmlu
ZWQgaW4gQ0xEUiBhbmQgdmFyaWVzIGJ5IGxvY2FsZTsgaW4gbWFueSBXZXN0ZXJuIGxvY2FsZXMs
IHRoZSBmb3JtYXQgaXMgYSBwYWlyDQotICAgICAqIG9mIHBhcmVudGhlc2VzIGFyb3VuZCB0aGUg
bnVtYmVyLg0KLSAgICAgKg0KLSAgICAgKiA8cD4NCi0gICAgICogTm90ZTogU2luY2UgQ0xEUiBk
ZWZpbmVzIHRoZSBhY2NvdW50aW5nIGZvcm1hdCBpbiB0aGUgbW9uZXRhcnkgY29udGV4dCBvbmx5
LCB0aGlzIG9wdGlvbiBmYWxscyBiYWNrIHRvIHRoZQ0KLSAgICAgKiBBVVRPIHNpZ24gZGlzcGxh
eSBzdHJhdGVneSB3aGVuIGZvcm1hdHRpbmcgd2l0aG91dCBhIGN1cnJlbmN5IHVuaXQuIFRoaXMg
bGltaXRhdGlvbiBtYXkgYmUgbGlmdGVkIGluIHRoZQ0KLSAgICAgKiBmdXR1cmUuDQotICAgICAq
DQotICAgICAqIEBkcmFmdCBJQ1UgNjANCi0gICAgICovDQotICAgICAgICAgICAgVU5VTV9TSUdO
X0FDQ09VTlRJTkcsDQotDQotICAgIC8qKg0KLSAgICAgKiBVc2UgdGhlIGxvY2FsZS1kZXBlbmRl
bnQgYWNjb3VudGluZyBmb3JtYXQgb24gbmVnYXRpdmUgbnVtYmVycywgYW5kIHNob3cgdGhlIHBs
dXMgc2lnbiBvbg0KLSAgICAgKiBwb3NpdGl2ZSBudW1iZXJzLCBpbmNsdWRpbmcgemVyby4gRm9y
IG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGFjY291bnRpbmcgZm9ybWF0LCBzZWUgdGhlDQotICAg
ICAqIEFDQ09VTlRJTkcgc2lnbiBkaXNwbGF5IHN0cmF0ZWd5LiBUbyBoaWRlIHRoZSBzaWduIG9u
IHplcm8sIHNlZQ0KLSAgICAgKiB7QGxpbmsgVU5VTV9TSUdOX0FDQ09VTlRJTkdfRVhDRVBUX1pF
Uk99Lg0KLSAgICAgKg0KLSAgICAgKiBAZHJhZnQgSUNVIDYwDQotICAgICAqLw0KLSAgICAgICAg
ICAgIFVOVU1fU0lHTl9BQ0NPVU5USU5HX0FMV0FZUywNCi0NCi0gICAgLyoqDQotICAgICAqIFNo
b3cgdGhlIG1pbnVzIHNpZ24gb24gbmVnYXRpdmUgbnVtYmVycyBhbmQgdGhlIHBsdXMgc2lnbiBv
biBwb3NpdGl2ZSBudW1iZXJzLiBEbyBub3Qgc2hvdyBhDQotICAgICAqIHNpZ24gb24gemVyby4N
Ci0gICAgICoNCi0gICAgICogQGRyYWZ0IElDVSA2MQ0KLSAgICAgKi8NCi0gICAgICAgICAgICBV
TlVNX1NJR05fRVhDRVBUX1pFUk8sDQotDQotICAgIC8qKg0KLSAgICAgKiBVc2UgdGhlIGxvY2Fs
ZS1kZXBlbmRlbnQgYWNjb3VudGluZyBmb3JtYXQgb24gbmVnYXRpdmUgbnVtYmVycywgYW5kIHNo
b3cgdGhlIHBsdXMgc2lnbiBvbg0KLSAgICAgKiBwb3NpdGl2ZSBudW1iZXJzLiBEbyBub3Qgc2hv
dyBhIHNpZ24gb24gemVyby4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGFjY291bnRpbmcg
Zm9ybWF0LA0KLSAgICAgKiBzZWUgdGhlIEFDQ09VTlRJTkcgc2lnbiBkaXNwbGF5IHN0cmF0ZWd5
Lg0KLSAgICAgKg0KLSAgICAgKiBAZHJhZnQgSUNVIDYxDQotICAgICAqLw0KLSAgICAgICAgICAg
IFVOVU1fU0lHTl9BQ0NPVU5USU5HX0VYQ0VQVF9aRVJPLA0KLQ0KLSAgICAvKioNCi0gICAgICog
T25lIG1vcmUgdGhhbiB0aGUgaGlnaGVzdCBVTnVtYmVyU2lnbkRpc3BsYXkgdmFsdWUuDQotICAg
ICAqDQotICAgICAqIEBpbnRlcm5hbCBJQ1UgNjA6IFRoZSBudW1lcmljIHZhbHVlIG1heSBjaGFu
Z2Ugb3ZlciB0aW1lOyBzZWUgSUNVIHRpY2tldCAjMTI0MjAuDQotICAgICAqLw0KLSAgICAgICAg
ICAgIFVOVU1fU0lHTl9DT1VOVA0KLX0gVU51bWJlclNpZ25EaXNwbGF5Ow0KLSNlbmRpZiAgLyog
VV9ISURFX0RSQUZUX0FQSSAqLw0KLQ0KLSNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQ0KLS8qKg0K
LSAqIEFuIGVudW0gZGVjbGFyaW5nIGhvdyB0byByZW5kZXIgdGhlIGRlY2ltYWwgc2VwYXJhdG9y
Lg0KLSAqDQotICogPHA+DQotICogPHVsPg0KLSAqIDxsaT5VTlVNX0RFQ0lNQUxfU0VQQVJBVE9S
X0FVVE86ICIxIiwgIjEuMSINCi0gKiA8bGk+VU5VTV9ERUNJTUFMX1NFUEFSQVRPUl9BTFdBWVM6
ICIxLiIsICIxLjEiDQotICogPC91bD4NCi0gKi8NCi10eXBlZGVmIGVudW0gVU51bWJlckRlY2lt
YWxTZXBhcmF0b3JEaXNwbGF5IHsNCi0gICAgLyoqDQotICAgICAqIFNob3cgdGhlIGRlY2ltYWwg
c2VwYXJhdG9yIHdoZW4gdGhlcmUgYXJlIG9uZSBvciBtb3JlIGRpZ2l0cyB0byBkaXNwbGF5IGFm
dGVyIHRoZSBzZXBhcmF0b3IsIGFuZCBkbyBub3Qgc2hvdw0KLSAgICAgKiBpdCBvdGhlcndpc2Uu
IFRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IuDQotICAgICAqDQotICAgICAqIEBkcmFmdCBJ
Q1UgNjANCi0gICAgICovDQotICAgICAgICAgICAgVU5VTV9ERUNJTUFMX1NFUEFSQVRPUl9BVVRP
LA0KLQ0KLSAgICAvKioNCi0gICAgICogQWx3YXlzIHNob3cgdGhlIGRlY2ltYWwgc2VwYXJhdG9y
LCBldmVuIGlmIHRoZXJlIGFyZSBubyBkaWdpdHMgdG8gZGlzcGxheSBhZnRlciB0aGUgc2VwYXJh
dG9yLg0KLSAgICAgKg0KLSAgICAgKiBAZHJhZnQgSUNVIDYwDQotICAgICAqLw0KLSAgICAgICAg
ICAgIFVOVU1fREVDSU1BTF9TRVBBUkFUT1JfQUxXQVlTLA0KLQ0KLSAgICAvKioNCi0gICAgICog
T25lIG1vcmUgdGhhbiB0aGUgaGlnaGVzdCBVTnVtYmVyRGVjaW1hbFNlcGFyYXRvckRpc3BsYXkg
dmFsdWUuDQotICAgICAqDQotICAgICAqIEBpbnRlcm5hbCBJQ1UgNjA6IFRoZSBudW1lcmljIHZh
bHVlIG1heSBjaGFuZ2Ugb3ZlciB0aW1lOyBzZWUgSUNVIHRpY2tldCAjMTI0MjAuDQotICAgICAq
Lw0KLSAgICAgICAgICAgIFVOVU1fREVDSU1BTF9TRVBBUkFUT1JfQ09VTlQNCi19IFVOdW1iZXJE
ZWNpbWFsU2VwYXJhdG9yRGlzcGxheTsNCi0jZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8N
Ci0NCi0jaWZuZGVmIFVfSElERV9EUkFGVF9BUEkNCi0vKioNCi0gKiBDLWNvbXBhdGlibGUgdmVy
c2lvbiBvZiBpY3U6Om51bWJlcjo6TG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyLg0KLSAqDQotICog
Tk9URTogVGhpcyBpcyBhIEMtY29tcGF0aWJsZSBBUEk7IEMrKyB1c2VycyBzaG91bGQgYnVpbGQg
YWdhaW5zdCBudW1iZXJmb3JtYXR0ZXIuaCBpbnN0ZWFkLg0KLSAqDQotICogQGRyYWZ0IElDVSA2
Mg0KLSAqLw0KLXN0cnVjdCBVTnVtYmVyRm9ybWF0dGVyOw0KLXR5cGVkZWYgc3RydWN0IFVOdW1i
ZXJGb3JtYXR0ZXIgVU51bWJlckZvcm1hdHRlcjsNCi0NCi0NCi0vKioNCi0gKiBDLWNvbXBhdGli
bGUgdmVyc2lvbiBvZiBpY3U6Om51bWJlcjo6Rm9ybWF0dGVkTnVtYmVyLg0KLSAqDQotICogTk9U
RTogVGhpcyBpcyBhIEMtY29tcGF0aWJsZSBBUEk7IEMrKyB1c2VycyBzaG91bGQgYnVpbGQgYWdh
aW5zdCBudW1iZXJmb3JtYXR0ZXIuaCBpbnN0ZWFkLg0KLSAqDQotICogQGRyYWZ0IElDVSA2Mg0K
LSAqLw0KLXN0cnVjdCBVRm9ybWF0dGVkTnVtYmVyOw0KLXR5cGVkZWYgc3RydWN0IFVGb3JtYXR0
ZWROdW1iZXIgVUZvcm1hdHRlZE51bWJlcjsNCi0NCi0NCi0vKioNCi0gKiBDcmVhdGVzIGEgbmV3
IFVOdW1iZXJGb3JtYXR0ZXIgZm9yIHRoZSBnaXZlbiBza2VsZXRvbiBzdHJpbmcgYW5kIGxvY2Fs
ZS4gVGhpcyBpcyBjdXJyZW50bHkgdGhlIG9ubHkNCi0gKiBtZXRob2QgZm9yIGNyZWF0aW5nIGEg
bmV3IFVOdW1iZXJGb3JtYXR0ZXIuDQotICoNCi0gKiBPYmplY3RzIG9mIHR5cGUgVU51bWJlckZv
cm1hdHRlciByZXR1cm5lZCBieSB0aGlzIG1ldGhvZCBhcmUgdGhyZWFkc2FmZS4NCi0gKg0KLSAq
IEZvciBtb3JlIGRldGFpbHMgb24gc2tlbGV0b24gc3RyaW5ncywgc2VlIHRoZSBkb2N1bWVudGF0
aW9uIGluIG51bWJlcmZvcm1hdHRlci5oLiBGb3IgbW9yZSBkZXRhaWxzIG9uDQotICogdGhlIHVz
YWdlIG9mIHRoaXMgQVBJLCBzZWUgdGhlIGRvY3VtZW50YXRpb24gYXQgdGhlIHRvcCBvZiB1bnVt
YmVyZm9ybWF0dGVyLmguDQotICoNCi0gKiBOT1RFOiBUaGlzIGlzIGEgQy1jb21wYXRpYmxlIEFQ
STsgQysrIHVzZXJzIHNob3VsZCBidWlsZCBhZ2FpbnN0IG51bWJlcmZvcm1hdHRlci5oIGluc3Rl
YWQuDQotICoNCi0gKiBAcGFyYW0gc2tlbGV0b24gVGhlIHNrZWxldG9uIHN0cmluZywgbGlrZSB1
InBlcmNlbnQgcHJlY2lzaW9uLWludGVnZXIiDQotICogQHBhcmFtIHNrZWxldG9uTGVuIFRoZSBu
dW1iZXIgb2YgVUNoYXJzIGluIHRoZSBza2VsZXRvbiBzdHJpbmcsIG9yIC0xIGl0IGl0IGlzIE5V
TC10ZXJtaW5hdGVkLg0KLSAqIEBwYXJhbSBsb2NhbGUgVGhlIE5VTC10ZXJtaW5hdGVkIGxvY2Fs
ZSBJRC4NCi0gKiBAcGFyYW0gZWMgU2V0IGlmIGFuIGVycm9yIG9jY3Vycy4NCi0gKiBAZHJhZnQg
SUNVIDYyDQotICovDQotVV9EUkFGVCBVTnVtYmVyRm9ybWF0dGVyKiBVX0VYUE9SVDINCi11bnVt
Zl9vcGVuRm9yU2tlbGV0b25BbmRMb2NhbGUoY29uc3QgVUNoYXIqIHNrZWxldG9uLCBpbnQzMl90
IHNrZWxldG9uTGVuLCBjb25zdCBjaGFyKiBsb2NhbGUsDQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFVFcnJvckNvZGUqIGVjKTsNCi0NCi0NCi0vKioNCi0gKiBDcmVhdGVzIGEgbmV3
IFVGb3JtYXR0ZWROdW1iZXIgZm9yIGhvbGRpbmcgdGhlIHJlc3VsdCBvZiBhIG51bWJlciBmb3Jt
YXR0aW5nIG9wZXJhdGlvbi4NCi0gKg0KLSAqIE9iamVjdHMgb2YgdHlwZSBVRm9ybWF0dGVkTnVt
YmVyIGFyZSBub3QgZ3VhcmFudGVlZCB0byBiZSB0aHJlYWRzYWZlLg0KLSAqDQotICogTk9URTog
VGhpcyBpcyBhIEMtY29tcGF0aWJsZSBBUEk7IEMrKyB1c2VycyBzaG91bGQgYnVpbGQgYWdhaW5z
dCBudW1iZXJmb3JtYXR0ZXIuaCBpbnN0ZWFkLg0KLSAqDQotICogQHBhcmFtIGVjIFNldCBpZiBh
biBlcnJvciBvY2N1cnMuDQotICogQGRyYWZ0IElDVSA2Mg0KLSAqLw0KLVVfRFJBRlQgVUZvcm1h
dHRlZE51bWJlciogVV9FWFBPUlQyDQotdW51bWZfb3BlblJlc3VsdChVRXJyb3JDb2RlKiBlYyk7
DQotDQotDQotLyoqDQotICogVXNlcyBhIFVOdW1iZXJGb3JtYXR0ZXIgdG8gZm9ybWF0IGFuIGlu
dGVnZXIgdG8gYSBVRm9ybWF0dGVkTnVtYmVyLiBBIHN0cmluZywgZmllbGQgcG9zaXRpb24sIGFu
ZCBvdGhlcg0KLSAqIGluZm9ybWF0aW9uIGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgVUZvcm1h
dHRlZE51bWJlci4NCi0gKg0KLSAqIFRoZSBVTnVtYmVyRm9ybWF0dGVyIGNhbiBiZSBzaGFyZWQg
YmV0d2VlbiB0aHJlYWRzLiBFYWNoIHRocmVhZCBzaG91bGQgaGF2ZSBpdHMgb3duIGxvY2FsDQot
ICogVUZvcm1hdHRlZE51bWJlciwgaG93ZXZlciwgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdCBvZiB0
aGUgZm9ybWF0dGluZyBvcGVyYXRpb24uDQotICoNCi0gKiBOT1RFOiBUaGlzIGlzIGEgQy1jb21w
YXRpYmxlIEFQSTsgQysrIHVzZXJzIHNob3VsZCBidWlsZCBhZ2FpbnN0IG51bWJlcmZvcm1hdHRl
ci5oIGluc3RlYWQuDQotICoNCi0gKiBAcGFyYW0gdWZvcm1hdHRlciBBIGZvcm1hdHRlciBvYmpl
Y3QgY3JlYXRlZCBieSB1bnVtZl9vcGVuRm9yU2tlbGV0b25BbmRMb2NhbGUgb3Igc2ltaWxhci4N
Ci0gKiBAcGFyYW0gdmFsdWUgVGhlIG51bWJlciB0byBiZSBmb3JtYXR0ZWQuDQotICogQHBhcmFt
IHVyZXN1bHQgVGhlIG9iamVjdCB0aGF0IHdpbGwgYmUgbXV0YXRlZCB0byBzdG9yZSB0aGUgcmVz
dWx0OyBzZWUgdW51bWZfb3BlblJlc3VsdC4NCi0gKiBAcGFyYW0gZWMgU2V0IGlmIGFuIGVycm9y
IG9jY3Vycy4NCi0gKiBAZHJhZnQgSUNVIDYyDQotICovDQotVV9EUkFGVCB2b2lkIFVfRVhQT1JU
Mg0KLXVudW1mX2Zvcm1hdEludChjb25zdCBVTnVtYmVyRm9ybWF0dGVyKiB1Zm9ybWF0dGVyLCBp
bnQ2NF90IHZhbHVlLCBVRm9ybWF0dGVkTnVtYmVyKiB1cmVzdWx0LA0KLSAgICAgICAgICAgICAg
ICBVRXJyb3JDb2RlKiBlYyk7DQotDQotDQotLyoqDQotICogVXNlcyBhIFVOdW1iZXJGb3JtYXR0
ZXIgdG8gZm9ybWF0IGEgZG91YmxlIHRvIGEgVUZvcm1hdHRlZE51bWJlci4gQSBzdHJpbmcsIGZp
ZWxkIHBvc2l0aW9uLCBhbmQgb3RoZXINCi0gKiBpbmZvcm1hdGlvbiBjYW4gYmUgcmV0cmlldmVk
IGZyb20gdGhlIFVGb3JtYXR0ZWROdW1iZXIuDQotICoNCi0gKiBUaGUgVU51bWJlckZvcm1hdHRl
ciBjYW4gYmUgc2hhcmVkIGJldHdlZW4gdGhyZWFkcy4gRWFjaCB0aHJlYWQgc2hvdWxkIGhhdmUg
aXRzIG93biBsb2NhbA0KLSAqIFVGb3JtYXR0ZWROdW1iZXIsIGhvd2V2ZXIsIGZvciBzdG9yaW5n
IHRoZSByZXN1bHQgb2YgdGhlIGZvcm1hdHRpbmcgb3BlcmF0aW9uLg0KLSAqDQotICogTk9URTog
VGhpcyBpcyBhIEMtY29tcGF0aWJsZSBBUEk7IEMrKyB1c2VycyBzaG91bGQgYnVpbGQgYWdhaW5z
dCBudW1iZXJmb3JtYXR0ZXIuaCBpbnN0ZWFkLg0KLSAqDQotICogQHBhcmFtIHVmb3JtYXR0ZXIg
QSBmb3JtYXR0ZXIgb2JqZWN0IGNyZWF0ZWQgYnkgdW51bWZfb3BlbkZvclNrZWxldG9uQW5kTG9j
YWxlIG9yIHNpbWlsYXIuDQotICogQHBhcmFtIHZhbHVlIFRoZSBudW1iZXIgdG8gYmUgZm9ybWF0
dGVkLg0KLSAqIEBwYXJhbSB1cmVzdWx0IFRoZSBvYmplY3QgdGhhdCB3aWxsIGJlIG11dGF0ZWQg
dG8gc3RvcmUgdGhlIHJlc3VsdDsgc2VlIHVudW1mX29wZW5SZXN1bHQuDQotICogQHBhcmFtIGVj
IFNldCBpZiBhbiBlcnJvciBvY2N1cnMuDQotICogQGRyYWZ0IElDVSA2Mg0KLSAqLw0KLVVfRFJB
RlQgdm9pZCBVX0VYUE9SVDINCi11bnVtZl9mb3JtYXREb3VibGUoY29uc3QgVU51bWJlckZvcm1h
dHRlciogdWZvcm1hdHRlciwgZG91YmxlIHZhbHVlLCBVRm9ybWF0dGVkTnVtYmVyKiB1cmVzdWx0
LA0KLSAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiBlYyk7DQotDQotDQotLyoqDQotICog
VXNlcyBhIFVOdW1iZXJGb3JtYXR0ZXIgdG8gZm9ybWF0IGEgZGVjaW1hbCBudW1iZXIgdG8gYSBV
Rm9ybWF0dGVkTnVtYmVyLiBBIHN0cmluZywgZmllbGQgcG9zaXRpb24sIGFuZA0KLSAqIG90aGVy
IGluZm9ybWF0aW9uIGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgVUZvcm1hdHRlZE51bWJlci4N
Ci0gKg0KLSAqIFRoZSBVTnVtYmVyRm9ybWF0dGVyIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiB0aHJl
YWRzLiBFYWNoIHRocmVhZCBzaG91bGQgaGF2ZSBpdHMgb3duIGxvY2FsDQotICogVUZvcm1hdHRl
ZE51bWJlciwgaG93ZXZlciwgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdCBvZiB0aGUgZm9ybWF0dGlu
ZyBvcGVyYXRpb24uDQotICoNCi0gKiBUaGUgc3ludGF4IG9mIHRoZSB1bmZvcm1hdHRlZCBudW1i
ZXIgaXMgYSAibnVtZXJpYyBzdHJpbmciIGFzIGRlZmluZWQgaW4gdGhlIERlY2ltYWwgQXJpdGht
ZXRpYw0KLSAqIFNwZWNpZmljYXRpb24sIGF2YWlsYWJsZSBhdCBodHRwOi8vc3BlbGVvdHJvdmUu
Y29tL2RlY2ltYWwNCi0gKg0KLSAqIE5PVEU6IFRoaXMgaXMgYSBDLWNvbXBhdGlibGUgQVBJOyBD
KysgdXNlcnMgc2hvdWxkIGJ1aWxkIGFnYWluc3QgbnVtYmVyZm9ybWF0dGVyLmggaW5zdGVhZC4N
Ci0gKg0KLSAqIEBwYXJhbSB1Zm9ybWF0dGVyIEEgZm9ybWF0dGVyIG9iamVjdCBjcmVhdGVkIGJ5
IHVudW1mX29wZW5Gb3JTa2VsZXRvbkFuZExvY2FsZSBvciBzaW1pbGFyLg0KLSAqIEBwYXJhbSB2
YWx1ZSBUaGUgbnVtZXJpYyBzdHJpbmcgdG8gYmUgZm9ybWF0dGVkLg0KLSAqIEBwYXJhbSB2YWx1
ZUxlbiBUaGUgbGVuZ3RoIG9mIHRoZSBudW1lcmljIHN0cmluZywgb3IgLTEgaWYgaXQgaXMgTlVM
LXRlcm1pbmF0ZWQuDQotICogQHBhcmFtIHVyZXN1bHQgVGhlIG9iamVjdCB0aGF0IHdpbGwgYmUg
bXV0YXRlZCB0byBzdG9yZSB0aGUgcmVzdWx0OyBzZWUgdW51bWZfb3BlblJlc3VsdC4NCi0gKiBA
cGFyYW0gZWMgU2V0IGlmIGFuIGVycm9yIG9jY3Vycy4NCi0gKiBAZHJhZnQgSUNVIDYyDQotICov
DQotVV9EUkFGVCB2b2lkIFVfRVhQT1JUMg0KLXVudW1mX2Zvcm1hdERlY2ltYWwoY29uc3QgVU51
bWJlckZvcm1hdHRlciogdWZvcm1hdHRlciwgY29uc3QgY2hhciogdmFsdWUsIGludDMyX3QgdmFs
dWVMZW4sDQotICAgICAgICAgICAgICAgICAgICBVRm9ybWF0dGVkTnVtYmVyKiB1cmVzdWx0LCBV
RXJyb3JDb2RlKiBlYyk7DQotDQotDQotLyoqDQotICogRXh0cmFjdHMgdGhlIHJlc3VsdCBudW1i
ZXIgc3RyaW5nIG91dCBvZiBhIFVGb3JtYXR0ZWROdW1iZXIgdG8gYSBVQ2hhciBidWZmZXIgaWYg
cG9zc2libGUuDQotICogSWYgYnVmZmVyQ2FwYWNpdHkgaXMgZ3JlYXRlciB0aGFuIHRoZSByZXF1
aXJlZCBsZW5ndGgsIGEgdGVybWluYXRpbmcgTlVMIGlzIHdyaXR0ZW4uDQotICogSWYgYnVmZmVy
Q2FwYWNpdHkgaXMgbGVzcyB0aGFuIHRoZSByZXF1aXJlZCBsZW5ndGgsIGFuIGVycm9yIGNvZGUg
aXMgc2V0Lg0KLSAqDQotICogTk9URTogVGhpcyBpcyBhIEMtY29tcGF0aWJsZSBBUEk7IEMrKyB1
c2VycyBzaG91bGQgYnVpbGQgYWdhaW5zdCBudW1iZXJmb3JtYXR0ZXIuaCBpbnN0ZWFkLg0KLSAq
DQotICogQHBhcmFtIHVyZXN1bHQgVGhlIG9iamVjdCBjb250YWluaW5nIHRoZSBmb3JtYXR0ZWQg
bnVtYmVyLg0KLSAqIEBwYXJhbSBidWZmZXIgV2hlcmUgdG8gc2F2ZSB0aGUgc3RyaW5nIG91dHB1
dC4NCi0gKiBAcGFyYW0gYnVmZmVyQ2FwYWNpdHkgVGhlIG51bWJlciBvZiBVQ2hhcnMgYXZhaWxh
YmxlIGluIHRoZSBidWZmZXIuDQotICogQHBhcmFtIGVjIFNldCBpZiBhbiBlcnJvciBvY2N1cnMu
DQotICogQHJldHVybiBUaGUgcmVxdWlyZWQgbGVuZ3RoLg0KLSAqIEBkcmFmdCBJQ1UgNjINCi0g
Ki8NCi1VX0RSQUZUIGludDMyX3QgVV9FWFBPUlQyDQotdW51bWZfcmVzdWx0VG9TdHJpbmcoY29u
c3QgVUZvcm1hdHRlZE51bWJlciogdXJlc3VsdCwgVUNoYXIqIGJ1ZmZlciwgaW50MzJfdCBidWZm
ZXJDYXBhY2l0eSwNCi0gICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiBlYyk7DQotDQot
DQotLyoqDQotICogRGV0ZXJtaW5lcyB0aGUgc3RhcnQgYW5kIGVuZCBpbmRpY2VzIG9mIHRoZSBu
ZXh0IG9jY3VycmVuY2Ugb2YgdGhlIGdpdmVuIDxlbT5maWVsZDwvZW0+IGluIHRoZQ0KLSAqIG91
dHB1dCBzdHJpbmcuIFRoaXMgYWxsb3dzIHlvdSB0byBkZXRlcm1pbmUgdGhlIGxvY2F0aW9ucyBv
ZiwgZm9yIGV4YW1wbGUsIHRoZSBpbnRlZ2VyIHBhcnQsDQotICogZnJhY3Rpb24gcGFydCwgb3Ig
c3ltYm9scy4NCi0gKg0KLSAqIElmIGEgZmllbGQgb2NjdXJzIGp1c3Qgb25jZSwgY2FsbGluZyB0
aGlzIG1ldGhvZCB3aWxsIGZpbmQgdGhhdCBvY2N1cnJlbmNlIGFuZCByZXR1cm4gaXQuIElmIGEN
Ci0gKiBmaWVsZCBvY2N1cnMgbXVsdGlwbGUgdGltZXMsIHRoaXMgbWV0aG9kIG1heSBiZSBjYWxs
ZWQgcmVwZWF0ZWRseSB3aXRoIHRoZSBmb2xsb3dpbmcgcGF0dGVybjoNCi0gKg0KLSAqIDxwcmU+
DQotICogVUZpZWxkUG9zaXRpb24gdWZwb3MgPSB7VU5VTV9HUk9VUElOR19TRVBBUkFUT1JfRklF
TEQsIDAsIDB9Ow0KLSAqIHdoaWxlICh1bnVtZl9yZXN1bHROZXh0RmllbGRQb3NpdGlvbih1cmVz
dWx0LCB1ZnBvcywgJmVjKSkgew0KLSAqICAgLy8gZG8gc29tZXRoaW5nIHdpdGggdWZwb3MuDQot
ICogfQ0KLSAqIDwvcHJlPg0KLSAqDQotICogVGhpcyBtZXRob2QgaXMgdXNlZnVsIGlmIHlvdSBr
bm93IHdoaWNoIGZpZWxkIHRvIHF1ZXJ5LiBJZiB5b3Ugd2FudCBhbGwgYXZhaWxhYmxlIGZpZWxk
IHBvc2l0aW9uDQotICogaW5mb3JtYXRpb24sIHVzZSB1bnVtZl9yZXN1bHRHZXRBbGxGaWVsZFBv
c2l0aW9ucygpLg0KLSAqDQotICogTk9URTogQWxsIGZpZWxkcyBvZiB0aGUgVUZpZWxkUG9zaXRp
b24gbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZC4NCi0gKg0K
LSAqIEBwYXJhbSBmaWVsZFBvc2l0aW9uDQotICogICAgICAgICAgICBJbnB1dCtvdXRwdXQgdmFy
aWFibGUuIE9uIGlucHV0LCB0aGUgImZpZWxkIiBwcm9wZXJ0eSBkZXRlcm1pbmVzIHdoaWNoIGZp
ZWxkIHRvIGxvb2sgdXAsDQotICogICAgICAgICAgICBhbmQgdGhlICJlbmRJbmRleCIgcHJvcGVy
dHkgZGV0ZXJtaW5lcyB3aGVyZSB0byBiZWdpbiB0aGUgc2VhcmNoLiBPbiBvdXRwdXQsIHRoZQ0K
LSAqICAgICAgICAgICAgImJlZ2luSW5kZXgiIGZpZWxkIGlzIHNldCB0byB0aGUgYmVnaW5uaW5n
IG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBmaWVsZCBhZnRlciB0aGUNCi0gKiAgICAg
ICAgICAgIGlucHV0ICJlbmRJbmRleCIsIGFuZCAiZW5kSW5kZXgiIGlzIHNldCB0byB0aGUgZW5k
IG9mIHRoYXQgb2NjdXJyZW5jZSBvZiB0aGUgZmllbGQNCi0gKiAgICAgICAgICAgIChleGNsdXNp
dmUgaW5kZXgpLiBJZiBhIGZpZWxkIHBvc2l0aW9uIGlzIG5vdCBmb3VuZCwgdGhlIEZpZWxkUG9z
aXRpb24gaXMgbm90IGNoYW5nZWQgYW5kDQotICogICAgICAgICAgICB0aGUgbWV0aG9kIHJldHVy
bnMgRkFMU0UuDQotICogQHBhcmFtIGVjIFNldCBpZiBhbiBlcnJvciBvY2N1cnMuDQotICogQGRy
YWZ0IElDVSA2Mg0KLSAqLw0KLVVfRFJBRlQgVUJvb2wgVV9FWFBPUlQyDQotdW51bWZfcmVzdWx0
TmV4dEZpZWxkUG9zaXRpb24oY29uc3QgVUZvcm1hdHRlZE51bWJlciogdXJlc3VsdCwgVUZpZWxk
UG9zaXRpb24qIHVmcG9zLCBVRXJyb3JDb2RlKiBlYyk7DQotDQotDQotLyoqDQotICogUG9wdWxh
dGVzIHRoZSBnaXZlbiBpdGVyYXRvciB3aXRoIGFsbCBmaWVsZHMgaW4gdGhlIGZvcm1hdHRlZCBv
dXRwdXQgc3RyaW5nLiBUaGlzIGFsbG93cyB5b3UgdG8NCi0gKiBkZXRlcm1pbmUgdGhlIGxvY2F0
aW9ucyBvZiB0aGUgaW50ZWdlciBwYXJ0LCBmcmFjdGlvbiBwYXJ0LCBhbmQgc2lnbi4NCi0gKg0K
LSAqIElmIHlvdSBuZWVkIGluZm9ybWF0aW9uIG9uIG9ubHkgb25lIGZpZWxkLCB1c2UgdW51bWZf
cmVzdWx0TmV4dEZpZWxkUG9zaXRpb24oKS4NCi0gKg0KLSAqIEBwYXJhbSB1cmVzdWx0IFRoZSBv
YmplY3QgY29udGFpbmluZyB0aGUgZm9ybWF0dGVkIG51bWJlci4NCi0gKiBAcGFyYW0gZnBvc2l0
ZXINCi0gKiAgICAgICAgIEEgcG9pbnRlciB0byBhIFVGaWVsZFBvc2l0aW9uSXRlcmF0b3IgY3Jl
YXRlZCBieSB7QGxpbmsgI3VmaWVsZHBvc2l0ZXJfb3Blbn0uIEl0ZXJhdGlvbg0KLSAqICAgICAg
ICAgaW5mb3JtYXRpb24gYWxyZWFkeSBwcmVzZW50IGluIHRoZSBVRmllbGRQb3NpdGlvbkl0ZXJh
dG9yIGlzIGRlbGV0ZWQsIGFuZCB0aGUgaXRlcmF0b3IgaXMgcmVzZXQNCi0gKiAgICAgICAgIHRv
IGFwcGx5IHRvIHRoZSBmaWVsZHMgaW4gdGhlIGZvcm1hdHRlZCBzdHJpbmcgY3JlYXRlZCBieSB0
aGlzIGZ1bmN0aW9uIGNhbGwuIFRoZSBmaWVsZCB2YWx1ZXMNCi0gKiAgICAgICAgIGFuZCBpbmRl
eGVzIHJldHVybmVkIGJ5IHtAbGluayAjdWZpZWxkcG9zaXRlcl9uZXh0fSByZXByZXNlbnQgZmll
bGRzIGRlbm90ZWQgYnkNCi0gKiAgICAgICAgIHRoZSBVTnVtYmVyRm9ybWF0RmllbGRzIGVudW0u
IEZpZWxkcyBhcmUgbm90IHJldHVybmVkIGluIGEgZ3VhcmFudGVlZCBvcmRlci4gRmllbGRzIGNh
bm5vdA0KLSAqICAgICAgICAgb3ZlcmxhcCwgYnV0IHRoZXkgbWF5IG5lc3QuIEZvciBleGFtcGxl
LCAxMjM0IGNvdWxkIGZvcm1hdCBhcyAiMSwyMzQiIHdoaWNoIG1pZ2h0IGNvbnNpc3Qgb2YgYQ0K
LSAqICAgICAgICAgZ3JvdXBpbmcgc2VwYXJhdG9yIGZpZWxkIGZvciAnLCcgYW5kIGFuIGludGVn
ZXIgZmllbGQgZW5jb21wYXNzaW5nIHRoZSBlbnRpcmUgc3RyaW5nLg0KLSAqIEBwYXJhbSBlYyBT
ZXQgaWYgYW4gZXJyb3Igb2NjdXJzLg0KLSAqIEBkcmFmdCBJQ1UgNjINCi0gKi8NCi1VX0RSQUZU
IHZvaWQgVV9FWFBPUlQyDQotdW51bWZfcmVzdWx0R2V0QWxsRmllbGRQb3NpdGlvbnMoY29uc3Qg
VUZvcm1hdHRlZE51bWJlciogdXJlc3VsdCwgVUZpZWxkUG9zaXRpb25JdGVyYXRvciogdWZwb3Np
dGVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUqIGVjKTsN
Ci0NCi0NCi0vKioNCi0gKiBSZWxlYXNlcyB0aGUgVU51bWJlckZvcm1hdHRlciBjcmVhdGVkIGJ5
IHVudW1mX29wZW5Gb3JTa2VsZXRvbkFuZExvY2FsZSgpLg0KLSAqDQotICogTk9URTogVGhpcyBp
cyBhIEMtY29tcGF0aWJsZSBBUEk7IEMrKyB1c2VycyBzaG91bGQgYnVpbGQgYWdhaW5zdCBudW1i
ZXJmb3JtYXR0ZXIuaCBpbnN0ZWFkLg0KLSAqDQotICogQHBhcmFtIHVmb3JtYXR0ZXIgQW4gb2Jq
ZWN0IGNyZWF0ZWQgYnkgdW51bWZfb3BlbkZvclNrZWxldG9uQW5kTG9jYWxlKCkuDQotICogQGRy
YWZ0IElDVSA2Mg0KLSAqLw0KLVVfRFJBRlQgdm9pZCBVX0VYUE9SVDINCi11bnVtZl9jbG9zZShV
TnVtYmVyRm9ybWF0dGVyKiB1Zm9ybWF0dGVyKTsNCi0NCi0NCi0vKioNCi0gKiBSZWxlYXNlcyB0
aGUgVUZvcm1hdHRlZE51bWJlciBjcmVhdGVkIGJ5IHVudW1mX29wZW5SZXN1bHQoKS4NCi0gKg0K
LSAqIE5PVEU6IFRoaXMgaXMgYSBDLWNvbXBhdGlibGUgQVBJOyBDKysgdXNlcnMgc2hvdWxkIGJ1
aWxkIGFnYWluc3QgbnVtYmVyZm9ybWF0dGVyLmggaW5zdGVhZC4NCi0gKg0KLSAqIEBwYXJhbSB1
cmVzdWx0IEFuIG9iamVjdCBjcmVhdGVkIGJ5IHVudW1mX29wZW5SZXN1bHQoKS4NCi0gKiBAZHJh
ZnQgSUNVIDYyDQotICovDQotVV9EUkFGVCB2b2lkIFVfRVhQT1JUMg0KLXVudW1mX2Nsb3NlUmVz
dWx0KFVGb3JtYXR0ZWROdW1iZXIqIHVyZXN1bHQpOw0KLQ0KLQ0KLSNpZiBVX1NIT1dfQ1BMVVNQ
TFVTX0FQSQ0KLVVfTkFNRVNQQUNFX0JFR0lODQotDQotLyoqDQotICogXGNsYXNzIExvY2FsVU51
bWJlckZvcm1hdHRlclBvaW50ZXINCi0gKiAiU21hcnQgcG9pbnRlciIgY2xhc3M7IGNsb3NlcyBh
IFVOdW1iZXJGb3JtYXR0ZXIgdmlhIHVudW1mX2Nsb3NlKCkuDQotICogRm9yIG1vc3QgbWV0aG9k
cyBzZWUgdGhlIExvY2FsUG9pbnRlckJhc2UgYmFzZSBjbGFzcy4NCi0gKg0KLSAqIFVzYWdlOg0K
LSAqIDxwcmU+DQotICogTG9jYWxVTnVtYmVyRm9ybWF0dGVyUG9pbnRlciB1Zm9ybWF0dGVyKHVu
dW1mX29wZW5Gb3JTa2VsZXRvbkFuZExvY2FsZSguLi4pKTsNCi0gKiAvLyBubyBuZWVkIHRvIGV4
cGxpY2l0bHkgY2FsbCB1bnVtZl9jbG9zZSgpDQotICogPC9wcmU+DQotICoNCi0gKiBAc2VlIExv
Y2FsUG9pbnRlckJhc2UNCi0gKiBAc2VlIExvY2FsUG9pbnRlcg0KLSAqIEBkcmFmdCBJQ1UgNjIN
Ci0gKi8NCi1VX0RFRklORV9MT0NBTF9PUEVOX1BPSU5URVIoTG9jYWxVTnVtYmVyRm9ybWF0dGVy
UG9pbnRlciwgVU51bWJlckZvcm1hdHRlciwgdW51bWZfY2xvc2UpOw0KLQ0KLS8qKg0KLSAqIFxj
bGFzcyBMb2NhbFVOdW1iZXJGb3JtYXR0ZXJQb2ludGVyDQotICogIlNtYXJ0IHBvaW50ZXIiIGNs
YXNzOyBjbG9zZXMgYSBVRm9ybWF0dGVkTnVtYmVyIHZpYSB1bnVtZl9jbG9zZVJlc3VsdCgpLg0K
LSAqIEZvciBtb3N0IG1ldGhvZHMgc2VlIHRoZSBMb2NhbFBvaW50ZXJCYXNlIGJhc2UgY2xhc3Mu
DQotICoNCi0gKiBVc2FnZToNCi0gKiA8cHJlPg0KLSAqIExvY2FsVUZvcm1hdHRlZE51bWJlclBv
aW50ZXIgdWZvcm1hdHRlcih1bnVtZl9vcGVuUmVzdWx0KC4uLikpOw0KLSAqIC8vIG5vIG5lZWQg
dG8gZXhwbGljaXRseSBjYWxsIHVudW1mX2Nsb3NlUmVzdWx0KCkNCi0gKiA8L3ByZT4NCi0gKg0K
LSAqIEBzZWUgTG9jYWxQb2ludGVyQmFzZQ0KLSAqIEBzZWUgTG9jYWxQb2ludGVyDQotICogQGRy
YWZ0IElDVSA2Mg0KLSAqLw0KLVVfREVGSU5FX0xPQ0FMX09QRU5fUE9JTlRFUihMb2NhbFVGb3Jt
YXR0ZWROdW1iZXJQb2ludGVyLCBVRm9ybWF0dGVkTnVtYmVyLCB1bnVtZl9jbG9zZVJlc3VsdCk7
DQotDQotVV9OQU1FU1BBQ0VfRU5EDQotI2VuZGlmIC8vIFVfU0hPV19DUExVU1BMVVNfQVBJDQot
DQotI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovDQotDQotI2VuZGlmIC8vX19VTlVNQkVS
Rk9STUFUVEVSX0hfXw0KLSNlbmRpZiAvKiAjaWYgIVVDT05GSUdfTk9fRk9STUFUVElORyAqLw0K
LQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0K
LQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0K
LQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KKy8vIMKpIDIwMTggYW5kIGxh
dGVyOiBVbmljb2RlLCBJbmMuIGFuZCBvdGhlcnMuCisvLyBMaWNlbnNlICYgdGVybXMgb2YgdXNl
OiBodHRwOi8vd3d3LnVuaWNvZGUub3JnL2NvcHlyaWdodC5odG1sCisKKyNpbmNsdWRlICJ1bmlj
b2RlL3V0eXBlcy5oIgorCisjaWYgIVVDT05GSUdfTk9fRk9STUFUVElORworI2lmbmRlZiBfX1VO
VU1CRVJGT1JNQVRURVJfSF9fCisjZGVmaW5lIF9fVU5VTUJFUkZPUk1BVFRFUl9IX18KKworI2lu
Y2x1ZGUgInVuaWNvZGUvcGFyc2VlcnIuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VmaWVsZHBvc2l0
ZXIuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VtaXNjLmgiCisjaW5jbHVkZSAidW5pY29kZS91Zm9y
bWF0dGVkdmFsdWUuaCIKKworCisvKioKKyAqIFxmaWxlCisgKiBcYnJpZWYgQy1jb21wYXRpYmxl
IEFQSSBmb3IgbG9jYWxpemVkIG51bWJlciBmb3JtYXR0aW5nOyBub3QgcmVjb21tZW5kZWQgZm9y
IEMrKy4KKyAqCisgKiBUaGlzIGlzIHRoZSBDLWNvbXBhdGlibGUgdmVyc2lvbiBvZiB0aGUgTnVt
YmVyRm9ybWF0dGVyIEFQSSBpbnRyb2R1Y2VkIGluIElDVSA2MC4gQysrIHVzZXJzIHNob3VsZAor
ICogaW5jbHVkZSB1bmljb2RlL251bWJlcmZvcm1hdHRlci5oIGFuZCB1c2UgdGhlIHByb3BlciBD
KysgQVBJcy4KKyAqCisgKiBUaGUgQyBBUEkgYWNjZXB0cyBhIG51bWJlciBza2VsZXRvbiBzdHJp
bmcgZm9yIHNwZWNpZnlpbmcgdGhlIHNldHRpbmdzIGZvciBmb3JtYXR0aW5nLCB3aGljaCBjb3Zl
cnMgYQorICogdmVyeSBsYXJnZSBzdWJzZXQgb2YgYWxsIHBvc3NpYmxlIG51bWJlciBmb3JtYXR0
aW5nIGZlYXR1cmVzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBudW1iZXIgc2tlbGV0b24KKyAq
IHN0cmluZ3MsIHNlZSB1bmljb2RlL251bWJlcmZvcm1hdHRlci5oLgorICoKKyAqIFdoZW4gdXNp
bmcgVU51bWJlckZvcm1hdHRlciwgd2hpY2ggaXMgdHJlYXRlZCBhcyBpbW11dGFibGUsIHRoZSBy
ZXN1bHRzIGFyZSBleHBvcnRlZCB0byBhIG11dGFibGUKKyAqIFVGb3JtYXR0ZWROdW1iZXIgb2Jq
ZWN0LCB3aGljaCB5b3Ugc3Vic2VxdWVudGx5IHVzZSBmb3IgcG9wdWxhdGluZyB5b3VyIHN0cmlu
ZyBidWZmZXIgb3IgaXRlcmF0aW5nIG92ZXIKKyAqIHRoZSBmaWVsZHMuCisgKgorICogRXhhbXBs
ZSBjb2RlOgorICogPHByZT4KKyAqIC8vIFNldHVwOgorICogVUVycm9yQ29kZSBlYyA9IFVfWkVS
T19FUlJPUjsKKyAqIFVOdW1iZXJGb3JtYXR0ZXIqIHVmb3JtYXR0ZXIgPSB1bnVtZl9vcGVuRm9y
U2tlbGV0b25BbmRMb2NhbGUodSJwcmVjaXNpb24taW50ZWdlciIsIC0xLCAiZW4iLCAmZWMpOwor
ICogVUZvcm1hdHRlZE51bWJlciogdXJlc3VsdCA9IHVudW1mX29wZW5SZXN1bHQoJmVjKTsKKyAq
IGlmIChVX0ZBSUxVUkUoZWMpKSB7IHJldHVybjsgfQorICoKKyAqIC8vIEZvcm1hdCBhIGRvdWJs
ZToKKyAqIHVudW1mX2Zvcm1hdERvdWJsZSh1Zm9ybWF0dGVyLCA1MTQyLjMsIHVyZXN1bHQsICZl
Yyk7CisgKiBpZiAoVV9GQUlMVVJFKGVjKSkgeyByZXR1cm47IH0KKyAqCisgKiAvLyBFeHBvcnQg
dGhlIHN0cmluZyB0byBhIG1hbGxvYydkIGJ1ZmZlcjoKKyAqIGludDMyX3QgbGVuID0gdW51bWZf
cmVzdWx0VG9TdHJpbmcodXJlc3VsdCwgTlVMTCwgMCwgJmVjKTsKKyAqIC8vIGF0IHRoaXMgcG9p
bnQsIGVjID09IFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SCisgKiBlYyA9IFVfWkVST19FUlJPUjsK
KyAqIFVDaGFyKiBidWZmZXIgPSAoVUNoYXIqKSBtYWxsb2MoKGxlbisxKSpzaXplb2YoVUNoYXIp
KTsKKyAqIHVudW1mX3Jlc3VsdFRvU3RyaW5nKHVyZXN1bHQsIGJ1ZmZlciwgbGVuKzEsICZlYyk7
CisgKiBpZiAoVV9GQUlMVVJFKGVjKSkgeyByZXR1cm47IH0KKyAqIC8vIGJ1ZmZlciBzaG91bGQg
ZXF1YWwgIjUsMTQyIgorICoKKyAqIC8vIENsZWFudXA6CisgKiB1bnVtZl9jbG9zZSh1Zm9ybWF0
dGVyKTsKKyAqIHVudW1mX2Nsb3NlUmVzdWx0KHVyZXN1bHQpOworICogZnJlZShidWZmZXIpOwor
ICogPC9wcmU+CisgKgorICogSWYgeW91IGFyZSBhIEMrKyB1c2VyIGxpbmtpbmcgYWdhaW5zdCB0
aGUgQyBsaWJyYXJpZXMsIHlvdSBjYW4gdXNlIHRoZSBMb2NhbFBvaW50ZXIgdmVyc2lvbnMgb2Yg
dGhlc2UKKyAqIEFQSXMuIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSB1c2VzIExvY2FsUG9pbnRlciB3
aXRoIHRoZSBkZWNpbWFsIG51bWJlciBhbmQgZmllbGQgcG9zaXRpb24gQVBJczoKKyAqCisgKiA8
cHJlPgorICogLy8gU2V0dXA6CisgKiBMb2NhbFVOdW1iZXJGb3JtYXR0ZXJQb2ludGVyIHVmb3Jt
YXR0ZXIodW51bWZfb3BlbkZvclNrZWxldG9uQW5kTG9jYWxlKHUicGVyY2VudCIsIC0xLCAiZW4i
LCAmZWMpKTsKKyAqIExvY2FsVUZvcm1hdHRlZE51bWJlclBvaW50ZXIgdXJlc3VsdCh1bnVtZl9v
cGVuUmVzdWx0KCZlYykpOworICogaWYgKFVfRkFJTFVSRShlYykpIHsgcmV0dXJuOyB9CisgKgor
ICogLy8gRm9ybWF0IGEgZGVjaW1hbCBudW1iZXI6CisgKiB1bnVtZl9mb3JtYXREZWNpbWFsKHVm
b3JtYXR0ZXIuZ2V0QWxpYXMoKSwgIjkuODdFLTMiLCAtMSwgdXJlc3VsdC5nZXRBbGlhcygpLCAm
ZWMpOworICogaWYgKFVfRkFJTFVSRShlYykpIHsgcmV0dXJuOyB9CisgKgorICogLy8gR2V0IHRo
ZSBsb2NhdGlvbiBvZiB0aGUgcGVyY2VudCBzaWduOgorICogVUZpZWxkUG9zaXRpb24gdWZwb3Mg
PSB7VU5VTV9QRVJDRU5UX0ZJRUxELCAwLCAwfTsKKyAqIHVudW1mX3Jlc3VsdE5leHRGaWVsZFBv
c2l0aW9uKHVyZXN1bHQuZ2V0QWxpYXMoKSwgJnVmcG9zLCAmZWMpOworICogLy8gdWZwb3Mgc2hv
dWxkIGNvbnRhaW4gYmVnaW5JbmRleD03IGFuZCBlbmRJbmRleD04IHNpbmNlIHRoZSBzdHJpbmcg
aXMgIjAuMDA5ODclIgorICoKKyAqIC8vIE5vIG5lZWQgdG8gZG8gYW55IGNsZWFudXAgc2luY2Ug
d2UgYXJlIHVzaW5nIExvY2FsUG9pbnRlci4KKyAqIDwvcHJlPgorICovCisKKworI2lmbmRlZiBV
X0hJREVfRFJBRlRfQVBJCisvKioKKyAqIEFuIGVudW0gZGVjbGFyaW5nIGhvdyB0byByZW5kZXIg
dW5pdHMsIGluY2x1ZGluZyBjdXJyZW5jaWVzLiBFeGFtcGxlIG91dHB1dHMgd2hlbiBmb3JtYXR0
aW5nIDEyMyBVU0QgYW5kIDEyMworICogbWV0ZXJzIGluIDxlbT5lbi1DQTwvZW0+OgorICoKKyAq
IDxwPgorICogPHVsPgorICogPGxpPk5BUlJPVyo6ICIkMTIzLjAwIiBhbmQgIjEyMyBtIgorICog
PGxpPlNIT1JUOiAiVVMkwqAxMjMuMDAiIGFuZCAiMTIzIG0iCisgKiA8bGk+RlVMTF9OQU1FOiAi
MTIzLjAwIFVTIGRvbGxhcnMiIGFuZCAiMTIzIG1ldGVycyIKKyAqIDxsaT5JU09fQ09ERTogIlVT
RMKgMTIzLjAwIiBhbmQgdW5kZWZpbmVkIGJlaGF2aW9yCisgKiA8bGk+SElEREVOOiAiMTIzLjAw
IiBhbmQgIjEyMyIKKyAqIDwvdWw+CisgKgorICogPHA+CisgKiBUaGlzIGVudW0gaXMgc2ltaWxh
ciB0byB7QGxpbmsgVU1lYXN1cmVGb3JtYXRXaWR0aH0uCisgKgorICogQGRyYWZ0IElDVSA2MAor
ICovCit0eXBlZGVmIGVudW0gVU51bWJlclVuaXRXaWR0aCB7CisgICAgLyoqCisgICAgICogUHJp
bnQgYW4gYWJicmV2aWF0ZWQgdmVyc2lvbiBvZiB0aGUgdW5pdCBuYW1lLiBTaW1pbGFyIHRvIFNI
T1JULCBidXQgYWx3YXlzIHVzZSB0aGUgc2hvcnRlc3QgYXZhaWxhYmxlCisgICAgICogYWJicmV2
aWF0aW9uIG9yIHN5bWJvbC4gVGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgd2hlbiB0aGUgY29udGV4
dCBoaW50cyBhdCB0aGUgaWRlbnRpdHkgb2YgdGhlIHVuaXQuIEZvciBtb3JlCisgICAgICogaW5m
b3JtYXRpb24gb24gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBOQVJST1cgYW5kIFNIT1JULCBzZWUg
U0hPUlQuCisgICAgICoKKyAgICAgKiA8cD4KKyAgICAgKiBJbiBDTERSLCB0aGlzIG9wdGlvbiBj
b3JyZXNwb25kcyB0byB0aGUgIk5hcnJvdyIgZm9ybWF0IGZvciBtZWFzdXJlIHVuaXRzIGFuZCB0
aGUgIsKkwqTCpMKkwqQiIHBsYWNlaG9sZGVyIGZvcgorICAgICAqIGN1cnJlbmNpZXMuCisgICAg
ICoKKyAgICAgKiBAZHJhZnQgSUNVIDYwCisgICAgICovCisgICAgICAgICAgICBVTlVNX1VOSVRf
V0lEVEhfTkFSUk9XLAorCisgICAgLyoqCisgICAgICogUHJpbnQgYW4gYWJicmV2aWF0ZWQgdmVy
c2lvbiBvZiB0aGUgdW5pdCBuYW1lLiBTaW1pbGFyIHRvIE5BUlJPVywgYnV0IHVzZSBhIHNsaWdo
dGx5IHdpZGVyIGFiYnJldmlhdGlvbiBvcgorICAgICAqIHN5bWJvbCB3aGVuIHRoZXJlIG1heSBi
ZSBhbWJpZ3VpdHkuIFRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IuCisgICAgICoKKyAgICAg
KiA8cD4KKyAgICAgKiBGb3IgZXhhbXBsZSwgaW4gPGVtPmVzLVVTPC9lbT4sIHRoZSBTSE9SVCBm
b3JtIGZvciBGYWhyZW5oZWl0IGlzICJ7MH0gwrBGIiwgYnV0IHRoZSBOQVJST1cgZm9ybSBpcyAi
ezB9wrAiLAorICAgICAqIHNpbmNlIEZhaHJlbmhlaXQgaXMgdGhlIGN1c3RvbWFyeSB1bml0IGZv
ciB0ZW1wZXJhdHVyZSBpbiB0aGF0IGxvY2FsZS4KKyAgICAgKgorICAgICAqIDxwPgorICAgICAq
IEluIENMRFIsIHRoaXMgb3B0aW9uIGNvcnJlc3BvbmRzIHRvIHRoZSAiU2hvcnQiIGZvcm1hdCBm
b3IgbWVhc3VyZSB1bml0cyBhbmQgdGhlICLCpCIgcGxhY2Vob2xkZXIgZm9yCisgICAgICogY3Vy
cmVuY2llcy4KKyAgICAgKgorICAgICAqIEBkcmFmdCBJQ1UgNjAKKyAgICAgKi8KKyAgICAgICAg
ICAgIFVOVU1fVU5JVF9XSURUSF9TSE9SVCwKKworICAgIC8qKgorICAgICAqIFByaW50IHRoZSBm
dWxsIG5hbWUgb2YgdGhlIHVuaXQsIHdpdGhvdXQgYW55IGFiYnJldmlhdGlvbnMuCisgICAgICoK
KyAgICAgKiA8cD4KKyAgICAgKiBJbiBDTERSLCB0aGlzIG9wdGlvbiBjb3JyZXNwb25kcyB0byB0
aGUgZGVmYXVsdCBmb3JtYXQgZm9yIG1lYXN1cmUgdW5pdHMgYW5kIHRoZSAiwqTCpMKkIiBwbGFj
ZWhvbGRlciBmb3IKKyAgICAgKiBjdXJyZW5jaWVzLgorICAgICAqCisgICAgICogQGRyYWZ0IElD
VSA2MAorICAgICAqLworICAgICAgICAgICAgVU5VTV9VTklUX1dJRFRIX0ZVTExfTkFNRSwKKwor
ICAgIC8qKgorICAgICAqIFVzZSB0aGUgdGhyZWUtZGlnaXQgSVNPIFhYWCBjb2RlIGluIHBsYWNl
IG9mIHRoZSBzeW1ib2wgZm9yIGRpc3BsYXlpbmcgY3VycmVuY2llcy4gVGhlIGJlaGF2aW9yIG9m
IHRoaXMKKyAgICAgKiBvcHRpb24gaXMgY3VycmVudGx5IHVuZGVmaW5lZCBmb3IgdXNlIHdpdGgg
bWVhc3VyZSB1bml0cy4KKyAgICAgKgorICAgICAqIDxwPgorICAgICAqIEluIENMRFIsIHRoaXMg
b3B0aW9uIGNvcnJlc3BvbmRzIHRvIHRoZSAiwqTCpCIgcGxhY2Vob2xkZXIgZm9yIGN1cnJlbmNp
ZXMuCisgICAgICoKKyAgICAgKiBAZHJhZnQgSUNVIDYwCisgICAgICovCisgICAgICAgICAgICBV
TlVNX1VOSVRfV0lEVEhfSVNPX0NPREUsCisKKyAgICAvKioKKyAgICAgKiBGb3JtYXQgdGhlIG51
bWJlciBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCB1bml0LCBidXQgZG8gbm90IGRpc3BsYXkg
dGhlIHVuaXQuIEZvciBjdXJyZW5jaWVzLCBhcHBseQorICAgICAqIG1vbmV0YXJ5IHN5bWJvbHMg
YW5kIGZvcm1hdHMgYXMgd2l0aCBTSE9SVCwgYnV0IG9taXQgdGhlIGN1cnJlbmN5IHN5bWJvbC4g
Rm9yIG1lYXN1cmUgdW5pdHMsIHRoZSBiZWhhdmlvciBpcworICAgICAqIGVxdWl2YWxlbnQgdG8g
bm90IHNwZWNpZnlpbmcgdGhlIHVuaXQgYXQgYWxsLgorICAgICAqCisgICAgICogQGRyYWZ0IElD
VSA2MAorICAgICAqLworICAgICAgICAgICAgVU5VTV9VTklUX1dJRFRIX0hJRERFTiwKKworICAg
IC8qKgorICAgICAqIE9uZSBtb3JlIHRoYW4gdGhlIGhpZ2hlc3QgVU51bWJlclVuaXRXaWR0aCB2
YWx1ZS4KKyAgICAgKgorICAgICAqIEBpbnRlcm5hbCBJQ1UgNjA6IFRoZSBudW1lcmljIHZhbHVl
IG1heSBjaGFuZ2Ugb3ZlciB0aW1lOyBzZWUgSUNVIHRpY2tldCAjMTI0MjAuCisgICAgICovCisg
ICAgICAgICAgICBVTlVNX1VOSVRfV0lEVEhfQ09VTlQKK30gVU51bWJlclVuaXRXaWR0aDsKKyNl
bmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLworCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkK
Ky8qKgorICogQW4gZW51bSBkZWNsYXJpbmcgdGhlIHN0cmF0ZWd5IGZvciB3aGVuIGFuZCBob3cg
dG8gZGlzcGxheSBncm91cGluZyBzZXBhcmF0b3JzIChpLmUuLCB0aGUKKyAqIHNlcGFyYXRvciwg
b2Z0ZW4gYSBjb21tYSBvciBwZXJpb2QsIGFmdGVyIGV2ZXJ5IDItMyBwb3dlcnMgb2YgdGVuKS4g
VGhlIGNob2ljZXMgYXJlIHNldmVyYWwKKyAqIHByZS1idWlsdCBzdHJhdGVnaWVzIGZvciBkaWZm
ZXJlbnQgdXNlIGNhc2VzIHRoYXQgZW1wbG95IGxvY2FsZSBkYXRhIHdoZW5ldmVyIHBvc3NpYmxl
LiBFeGFtcGxlCisgKiBvdXRwdXRzIGZvciAxMjM0IGFuZCAxMjM0NTY3IGluIDxlbT5lbi1JTjwv
ZW0+OgorICoKKyAqIDx1bD4KKyAqIDxsaT5PRkY6IDEyMzQgYW5kIDEyMzQ1CisgKiA8bGk+TUlO
MjogMTIzNCBhbmQgMTIsMzQsNTY3CisgKiA8bGk+QVVUTzogMSwyMzQgYW5kIDEyLDM0LDU2Nwor
ICogPGxpPk9OX0FMSUdORUQ6IDEsMjM0IGFuZCAxMiwzNCw1NjcKKyAqIDxsaT5USE9VU0FORFM6
IDEsMjM0IGFuZCAxLDIzNCw1NjcKKyAqIDwvdWw+CisgKgorICogPHA+CisgKiBUaGUgZGVmYXVs
dCBpcyBBVVRPLCB3aGljaCBkaXNwbGF5cyBncm91cGluZyBzZXBhcmF0b3JzIHVubGVzcyB0aGUg
bG9jYWxlIGRhdGEgc2F5cyB0aGF0IGdyb3VwaW5nCisgKiBpcyBub3QgY3VzdG9tYXJ5LiBUbyBm
b3JjZSBncm91cGluZyBmb3IgYWxsIG51bWJlcnMgZ3JlYXRlciB0aGFuIDEwMDAgY29uc2lzdGVu
dGx5IGFjcm9zcyBsb2NhbGVzLAorICogdXNlIE9OX0FMSUdORUQuIE9uIHRoZSBvdGhlciBoYW5k
LCB0byBkaXNwbGF5IGdyb3VwaW5nIGxlc3MgZnJlcXVlbnRseSB0aGFuIHRoZSBkZWZhdWx0LCB1
c2UgTUlOMgorICogb3IgT0ZGLiBTZWUgdGhlIGRvY3Mgb2YgZWFjaCBvcHRpb24gZm9yIGRldGFp
bHMuCisgKgorICogPHA+CisgKiBOb3RlOiBUaGlzIGVudW0gc3BlY2lmaWVzIHRoZSBzdHJhdGVn
eSBmb3IgZ3JvdXBpbmcgc2l6ZXMuIFRvIHNldCB3aGljaCBjaGFyYWN0ZXIgdG8gdXNlIGFzIHRo
ZQorICogZ3JvdXBpbmcgc2VwYXJhdG9yLCB1c2UgdGhlICJzeW1ib2xzIiBzZXR0ZXIuCisgKgor
ICogQGRyYWZ0IElDVSA2MworICovCit0eXBlZGVmIGVudW0gVU51bWJlckdyb3VwaW5nU3RyYXRl
Z3kgeworICAgIC8qKgorICAgICAqIERvIG5vdCBkaXNwbGF5IGdyb3VwaW5nIHNlcGFyYXRvcnMg
aW4gYW55IGxvY2FsZS4KKyAgICAgKgorICAgICAqIEBkcmFmdCBJQ1UgNjEKKyAgICAgKi8KKyAg
ICAgICAgICAgIFVOVU1fR1JPVVBJTkdfT0ZGLAorCisgICAgLyoqCisgICAgICogRGlzcGxheSBn
cm91cGluZyB1c2luZyBsb2NhbGUgZGVmYXVsdHMsIGV4Y2VwdCBkbyBub3Qgc2hvdyBncm91cGlu
ZyBvbiB2YWx1ZXMgc21hbGxlciB0aGFuCisgICAgICogMTAwMDAgKHN1Y2ggdGhhdCB0aGVyZSBp
cyBhIDxlbT5taW5pbXVtIG9mIHR3byBkaWdpdHM8L2VtPiBiZWZvcmUgdGhlIGZpcnN0IHNlcGFy
YXRvcikuCisgICAgICoKKyAgICAgKiA8cD4KKyAgICAgKiBOb3RlIHRoYXQgbG9jYWxlcyBtYXkg
cmVzdHJpY3QgZ3JvdXBpbmcgc2VwYXJhdG9ycyB0byBiZSBkaXNwbGF5ZWQgb25seSBvbiAxIG1p
bGxpb24gb3IKKyAgICAgKiBncmVhdGVyIChmb3IgZXhhbXBsZSwgZWUgYW5kIGh1KSBvciBkaXNh
YmxlIGdyb3VwaW5nIGFsdG9nZXRoZXIgKGZvciBleGFtcGxlLCBiZyBjdXJyZW5jeSkuCisgICAg
ICoKKyAgICAgKiA8cD4KKyAgICAgKiBMb2NhbGUgZGF0YSBpcyB1c2VkIHRvIGRldGVybWluZSB3
aGV0aGVyIHRvIHNlcGFyYXRlIGxhcmdlciBudW1iZXJzIGludG8gZ3JvdXBzIG9mIDIKKyAgICAg
KiAoY3VzdG9tYXJ5IGluIFNvdXRoIEFzaWEpIG9yIGdyb3VwcyBvZiAzIChjdXN0b21hcnkgaW4g
RXVyb3BlIGFuZCB0aGUgQW1lcmljYXMpLgorICAgICAqCisgICAgICogQGRyYWZ0IElDVSA2MQor
ICAgICAqLworICAgICAgICAgICAgVU5VTV9HUk9VUElOR19NSU4yLAorCisgICAgLyoqCisgICAg
ICogRGlzcGxheSBncm91cGluZyB1c2luZyB0aGUgZGVmYXVsdCBzdHJhdGVneSBmb3IgYWxsIGxv
Y2FsZXMuIFRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IuCisgICAgICoKKyAgICAgKiA8cD4K
KyAgICAgKiBOb3RlIHRoYXQgbG9jYWxlcyBtYXkgcmVzdHJpY3QgZ3JvdXBpbmcgc2VwYXJhdG9y
cyB0byBiZSBkaXNwbGF5ZWQgb25seSBvbiAxIG1pbGxpb24gb3IKKyAgICAgKiBncmVhdGVyIChm
b3IgZXhhbXBsZSwgZWUgYW5kIGh1KSBvciBkaXNhYmxlIGdyb3VwaW5nIGFsdG9nZXRoZXIgKGZv
ciBleGFtcGxlLCBiZyBjdXJyZW5jeSkuCisgICAgICoKKyAgICAgKiA8cD4KKyAgICAgKiBMb2Nh
bGUgZGF0YSBpcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHNlcGFyYXRlIGxhcmdlciBu
dW1iZXJzIGludG8gZ3JvdXBzIG9mIDIKKyAgICAgKiAoY3VzdG9tYXJ5IGluIFNvdXRoIEFzaWEp
IG9yIGdyb3VwcyBvZiAzIChjdXN0b21hcnkgaW4gRXVyb3BlIGFuZCB0aGUgQW1lcmljYXMpLgor
ICAgICAqCisgICAgICogQGRyYWZ0IElDVSA2MQorICAgICAqLworICAgICAgICAgICAgVU5VTV9H
Uk9VUElOR19BVVRPLAorCisgICAgLyoqCisgICAgICogQWx3YXlzIGRpc3BsYXkgdGhlIGdyb3Vw
aW5nIHNlcGFyYXRvciBvbiB2YWx1ZXMgb2YgYXQgbGVhc3QgMTAwMC4KKyAgICAgKgorICAgICAq
IDxwPgorICAgICAqIFRoaXMgb3B0aW9uIGlnbm9yZXMgdGhlIGxvY2FsZSBkYXRhIHRoYXQgcmVz
dHJpY3RzIG9yIGRpc2FibGVzIGdyb3VwaW5nLCBkZXNjcmliZWQgaW4gTUlOMiBhbmQKKyAgICAg
KiBBVVRPLiBUaGlzIG9wdGlvbiBtYXkgYmUgdXNlZnVsIHRvIG5vcm1hbGl6ZSB0aGUgYWxpZ25t
ZW50IG9mIG51bWJlcnMsIHN1Y2ggYXMgaW4gYQorICAgICAqIHNwcmVhZHNoZWV0LgorICAgICAq
CisgICAgICogPHA+CisgICAgICogTG9jYWxlIGRhdGEgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hl
dGhlciB0byBzZXBhcmF0ZSBsYXJnZXIgbnVtYmVycyBpbnRvIGdyb3VwcyBvZiAyCisgICAgICog
KGN1c3RvbWFyeSBpbiBTb3V0aCBBc2lhKSBvciBncm91cHMgb2YgMyAoY3VzdG9tYXJ5IGluIEV1
cm9wZSBhbmQgdGhlIEFtZXJpY2FzKS4KKyAgICAgKgorICAgICAqIEBkcmFmdCBJQ1UgNjEKKyAg
ICAgKi8KKyAgICAgICAgICAgIFVOVU1fR1JPVVBJTkdfT05fQUxJR05FRCwKKworICAgIC8qKgor
ICAgICAqIFVzZSB0aGUgV2VzdGVybiBkZWZhdWx0czogZ3JvdXBzIG9mIDMgYW5kIGVuYWJsZWQg
Zm9yIGFsbCBudW1iZXJzIDEwMDAgb3IgZ3JlYXRlci4gRG8gbm90IHVzZQorICAgICAqIGxvY2Fs
ZSBkYXRhIGZvciBkZXRlcm1pbmluZyB0aGUgZ3JvdXBpbmcgc3RyYXRlZ3kuCisgICAgICoKKyAg
ICAgKiBAZHJhZnQgSUNVIDYxCisgICAgICovCisgICAgICAgICAgICBVTlVNX0dST1VQSU5HX1RI
T1VTQU5EUworCisjaWZuZGVmIFVfSElERV9JTlRFUk5BTF9BUEkKKyAgICAsCisgICAgLyoqCisg
ICAgICogT25lIG1vcmUgdGhhbiB0aGUgaGlnaGVzdCBVTnVtYmVyR3JvdXBpbmdTdHJhdGVneSB2
YWx1ZS4KKyAgICAgKgorICAgICAqIEBpbnRlcm5hbCBJQ1UgNjI6IFRoZSBudW1lcmljIHZhbHVl
IG1heSBjaGFuZ2Ugb3ZlciB0aW1lOyBzZWUgSUNVIHRpY2tldCAjMTI0MjAuCisgICAgICovCisg
ICAgICAgICAgICBVTlVNX0dST1VQSU5HX0NPVU5UCisjZW5kaWYgIC8qIFVfSElERV9JTlRFUk5B
TF9BUEkgKi8KKworfSBVTnVtYmVyR3JvdXBpbmdTdHJhdGVneTsKKworCisjZW5kaWYgIC8qIFVf
SElERV9EUkFGVF9BUEkgKi8KKworI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisvKioKKyAqIEFu
IGVudW0gZGVjbGFyaW5nIGhvdyB0byBkZW5vdGUgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIG51bWJl
cnMuIEV4YW1wbGUgb3V0cHV0cyB3aGVuIGZvcm1hdHRpbmcKKyAqIDEyMywgMCwgYW5kIC0xMjMg
aW4gPGVtPmVuLVVTPC9lbT46CisgKgorICogPHVsPgorICogPGxpPkFVVE86ICIxMjMiLCAiMCIs
IGFuZCAiLTEyMyIKKyAqIDxsaT5BTFdBWVM6ICIrMTIzIiwgIiswIiwgYW5kICItMTIzIgorICog
PGxpPk5FVkVSOiAiMTIzIiwgIjAiLCBhbmQgIjEyMyIKKyAqIDxsaT5BQ0NPVU5USU5HOiAiJDEy
MyIsICIkMCIsIGFuZCAiKCQxMjMpIgorICogPGxpPkFDQ09VTlRJTkdfQUxXQVlTOiAiKyQxMjMi
LCAiKyQwIiwgYW5kICIoJDEyMykiCisgKiA8bGk+RVhDRVBUX1pFUk86ICIrMTIzIiwgIjAiLCBh
bmQgIi0xMjMiCisgKiA8bGk+QUNDT1VOVElOR19FWENFUFRfWkVSTzogIiskMTIzIiwgIiQwIiwg
YW5kICIoJDEyMykiCisgKiA8L3VsPgorICoKKyAqIDxwPgorICogVGhlIGV4YWN0IGZvcm1hdCwg
aW5jbHVkaW5nIHRoZSBwb3NpdGlvbiBhbmQgdGhlIGNvZGUgcG9pbnQgb2YgdGhlIHNpZ24sIGRp
ZmZlciBieSBsb2NhbGUuCisgKgorICogQGRyYWZ0IElDVSA2MAorICovCit0eXBlZGVmIGVudW0g
VU51bWJlclNpZ25EaXNwbGF5IHsKKyAgICAvKioKKyAgICAgKiBTaG93IHRoZSBtaW51cyBzaWdu
IG9uIG5lZ2F0aXZlIG51bWJlcnMsIGFuZCBkbyBub3Qgc2hvdyB0aGUgc2lnbiBvbiBwb3NpdGl2
ZSBudW1iZXJzLiBUaGlzIGlzIHRoZSBkZWZhdWx0CisgICAgICogYmVoYXZpb3IuCisgICAgICoK
KyAgICAgKiBAZHJhZnQgSUNVIDYwCisgICAgICovCisgICAgICAgICAgICBVTlVNX1NJR05fQVVU
TywKKworICAgIC8qKgorICAgICAqIFNob3cgdGhlIG1pbnVzIHNpZ24gb24gbmVnYXRpdmUgbnVt
YmVycyBhbmQgdGhlIHBsdXMgc2lnbiBvbiBwb3NpdGl2ZSBudW1iZXJzLCBpbmNsdWRpbmcgemVy
by4KKyAgICAgKiBUbyBoaWRlIHRoZSBzaWduIG9uIHplcm8sIHNlZSB7QGxpbmsgVU5VTV9TSUdO
X0VYQ0VQVF9aRVJPfS4KKyAgICAgKgorICAgICAqIEBkcmFmdCBJQ1UgNjAKKyAgICAgKi8KKyAg
ICAgICAgICAgIFVOVU1fU0lHTl9BTFdBWVMsCisKKyAgICAvKioKKyAgICAgKiBEbyBub3Qgc2hv
dyB0aGUgc2lnbiBvbiBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBudW1iZXJzLgorICAgICAqCisgICAg
ICogQGRyYWZ0IElDVSA2MAorICAgICAqLworICAgICAgICAgICAgVU5VTV9TSUdOX05FVkVSLAor
CisgICAgLyoqCisgICAgICogVXNlIHRoZSBsb2NhbGUtZGVwZW5kZW50IGFjY291bnRpbmcgZm9y
bWF0IG9uIG5lZ2F0aXZlIG51bWJlcnMsIGFuZCBkbyBub3Qgc2hvdyB0aGUgc2lnbiBvbiBwb3Np
dGl2ZSBudW1iZXJzLgorICAgICAqCisgICAgICogPHA+CisgICAgICogVGhlIGFjY291bnRpbmcg
Zm9ybWF0IGlzIGRlZmluZWQgaW4gQ0xEUiBhbmQgdmFyaWVzIGJ5IGxvY2FsZTsgaW4gbWFueSBX
ZXN0ZXJuIGxvY2FsZXMsIHRoZSBmb3JtYXQgaXMgYSBwYWlyCisgICAgICogb2YgcGFyZW50aGVz
ZXMgYXJvdW5kIHRoZSBudW1iZXIuCisgICAgICoKKyAgICAgKiA8cD4KKyAgICAgKiBOb3RlOiBT
aW5jZSBDTERSIGRlZmluZXMgdGhlIGFjY291bnRpbmcgZm9ybWF0IGluIHRoZSBtb25ldGFyeSBj
b250ZXh0IG9ubHksIHRoaXMgb3B0aW9uIGZhbGxzIGJhY2sgdG8gdGhlCisgICAgICogQVVUTyBz
aWduIGRpc3BsYXkgc3RyYXRlZ3kgd2hlbiBmb3JtYXR0aW5nIHdpdGhvdXQgYSBjdXJyZW5jeSB1
bml0LiBUaGlzIGxpbWl0YXRpb24gbWF5IGJlIGxpZnRlZCBpbiB0aGUKKyAgICAgKiBmdXR1cmUu
CisgICAgICoKKyAgICAgKiBAZHJhZnQgSUNVIDYwCisgICAgICovCisgICAgICAgICAgICBVTlVN
X1NJR05fQUNDT1VOVElORywKKworICAgIC8qKgorICAgICAqIFVzZSB0aGUgbG9jYWxlLWRlcGVu
ZGVudCBhY2NvdW50aW5nIGZvcm1hdCBvbiBuZWdhdGl2ZSBudW1iZXJzLCBhbmQgc2hvdyB0aGUg
cGx1cyBzaWduIG9uCisgICAgICogcG9zaXRpdmUgbnVtYmVycywgaW5jbHVkaW5nIHplcm8uIEZv
ciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBhY2NvdW50aW5nIGZvcm1hdCwgc2VlIHRoZQorICAg
ICAqIEFDQ09VTlRJTkcgc2lnbiBkaXNwbGF5IHN0cmF0ZWd5LiBUbyBoaWRlIHRoZSBzaWduIG9u
IHplcm8sIHNlZQorICAgICAqIHtAbGluayBVTlVNX1NJR05fQUNDT1VOVElOR19FWENFUFRfWkVS
T30uCisgICAgICoKKyAgICAgKiBAZHJhZnQgSUNVIDYwCisgICAgICovCisgICAgICAgICAgICBV
TlVNX1NJR05fQUNDT1VOVElOR19BTFdBWVMsCisKKyAgICAvKioKKyAgICAgKiBTaG93IHRoZSBt
aW51cyBzaWduIG9uIG5lZ2F0aXZlIG51bWJlcnMgYW5kIHRoZSBwbHVzIHNpZ24gb24gcG9zaXRp
dmUgbnVtYmVycy4gRG8gbm90IHNob3cgYQorICAgICAqIHNpZ24gb24gemVyby4KKyAgICAgKgor
ICAgICAqIEBkcmFmdCBJQ1UgNjEKKyAgICAgKi8KKyAgICAgICAgICAgIFVOVU1fU0lHTl9FWENF
UFRfWkVSTywKKworICAgIC8qKgorICAgICAqIFVzZSB0aGUgbG9jYWxlLWRlcGVuZGVudCBhY2Nv
dW50aW5nIGZvcm1hdCBvbiBuZWdhdGl2ZSBudW1iZXJzLCBhbmQgc2hvdyB0aGUgcGx1cyBzaWdu
IG9uCisgICAgICogcG9zaXRpdmUgbnVtYmVycy4gRG8gbm90IHNob3cgYSBzaWduIG9uIHplcm8u
IEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBhY2NvdW50aW5nIGZvcm1hdCwKKyAgICAgKiBz
ZWUgdGhlIEFDQ09VTlRJTkcgc2lnbiBkaXNwbGF5IHN0cmF0ZWd5LgorICAgICAqCisgICAgICog
QGRyYWZ0IElDVSA2MQorICAgICAqLworICAgICAgICAgICAgVU5VTV9TSUdOX0FDQ09VTlRJTkdf
RVhDRVBUX1pFUk8sCisKKyAgICAvKioKKyAgICAgKiBPbmUgbW9yZSB0aGFuIHRoZSBoaWdoZXN0
IFVOdW1iZXJTaWduRGlzcGxheSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBpbnRlcm5hbCBJQ1Ug
NjA6IFRoZSBudW1lcmljIHZhbHVlIG1heSBjaGFuZ2Ugb3ZlciB0aW1lOyBzZWUgSUNVIHRpY2tl
dCAjMTI0MjAuCisgICAgICovCisgICAgICAgICAgICBVTlVNX1NJR05fQ09VTlQKK30gVU51bWJl
clNpZ25EaXNwbGF5OworI2VuZGlmICAvKiBVX0hJREVfRFJBRlRfQVBJICovCisKKyNpZm5kZWYg
VV9ISURFX0RSQUZUX0FQSQorLyoqCisgKiBBbiBlbnVtIGRlY2xhcmluZyBob3cgdG8gcmVuZGVy
IHRoZSBkZWNpbWFsIHNlcGFyYXRvci4KKyAqCisgKiA8cD4KKyAqIDx1bD4KKyAqIDxsaT5VTlVN
X0RFQ0lNQUxfU0VQQVJBVE9SX0FVVE86ICIxIiwgIjEuMSIKKyAqIDxsaT5VTlVNX0RFQ0lNQUxf
U0VQQVJBVE9SX0FMV0FZUzogIjEuIiwgIjEuMSIKKyAqIDwvdWw+CisgKgorICogQGRyYWZ0IElD
VSA2MAorICovCit0eXBlZGVmIGVudW0gVU51bWJlckRlY2ltYWxTZXBhcmF0b3JEaXNwbGF5IHsK
KyAgICAvKioKKyAgICAgKiBTaG93IHRoZSBkZWNpbWFsIHNlcGFyYXRvciB3aGVuIHRoZXJlIGFy
ZSBvbmUgb3IgbW9yZSBkaWdpdHMgdG8gZGlzcGxheSBhZnRlciB0aGUgc2VwYXJhdG9yLCBhbmQg
ZG8gbm90IHNob3cKKyAgICAgKiBpdCBvdGhlcndpc2UuIFRoaXMgaXMgdGhlIGRlZmF1bHQgYmVo
YXZpb3IuCisgICAgICoKKyAgICAgKiBAZHJhZnQgSUNVIDYwCisgICAgICovCisgICAgICAgICAg
ICBVTlVNX0RFQ0lNQUxfU0VQQVJBVE9SX0FVVE8sCisKKyAgICAvKioKKyAgICAgKiBBbHdheXMg
c2hvdyB0aGUgZGVjaW1hbCBzZXBhcmF0b3IsIGV2ZW4gaWYgdGhlcmUgYXJlIG5vIGRpZ2l0cyB0
byBkaXNwbGF5IGFmdGVyIHRoZSBzZXBhcmF0b3IuCisgICAgICoKKyAgICAgKiBAZHJhZnQgSUNV
IDYwCisgICAgICovCisgICAgICAgICAgICBVTlVNX0RFQ0lNQUxfU0VQQVJBVE9SX0FMV0FZUywK
KworICAgIC8qKgorICAgICAqIE9uZSBtb3JlIHRoYW4gdGhlIGhpZ2hlc3QgVU51bWJlckRlY2lt
YWxTZXBhcmF0b3JEaXNwbGF5IHZhbHVlLgorICAgICAqCisgICAgICogQGludGVybmFsIElDVSA2
MDogVGhlIG51bWVyaWMgdmFsdWUgbWF5IGNoYW5nZSBvdmVyIHRpbWU7IHNlZSBJQ1UgdGlja2V0
ICMxMjQyMC4KKyAgICAgKi8KKyAgICAgICAgICAgIFVOVU1fREVDSU1BTF9TRVBBUkFUT1JfQ09V
TlQKK30gVU51bWJlckRlY2ltYWxTZXBhcmF0b3JEaXNwbGF5OworI2VuZGlmICAvKiBVX0hJREVf
RFJBRlRfQVBJICovCisKK3N0cnVjdCBVTnVtYmVyRm9ybWF0dGVyOworLyoqCisgKiBDLWNvbXBh
dGlibGUgdmVyc2lvbiBvZiBpY3U6Om51bWJlcjo6TG9jYWxpemVkTnVtYmVyRm9ybWF0dGVyLgor
ICoKKyAqIE5PVEU6IFRoaXMgaXMgYSBDLWNvbXBhdGlibGUgQVBJOyBDKysgdXNlcnMgc2hvdWxk
IGJ1aWxkIGFnYWluc3QgbnVtYmVyZm9ybWF0dGVyLmggaW5zdGVhZC4KKyAqCisgKiBAc3RhYmxl
IElDVSA2MgorICovCit0eXBlZGVmIHN0cnVjdCBVTnVtYmVyRm9ybWF0dGVyIFVOdW1iZXJGb3Jt
YXR0ZXI7CisKK3N0cnVjdCBVRm9ybWF0dGVkTnVtYmVyOworLyoqCisgKiBDLWNvbXBhdGlibGUg
dmVyc2lvbiBvZiBpY3U6Om51bWJlcjo6Rm9ybWF0dGVkTnVtYmVyLgorICoKKyAqIE5PVEU6IFRo
aXMgaXMgYSBDLWNvbXBhdGlibGUgQVBJOyBDKysgdXNlcnMgc2hvdWxkIGJ1aWxkIGFnYWluc3Qg
bnVtYmVyZm9ybWF0dGVyLmggaW5zdGVhZC4KKyAqCisgKiBAc3RhYmxlIElDVSA2MgorICovCit0
eXBlZGVmIHN0cnVjdCBVRm9ybWF0dGVkTnVtYmVyIFVGb3JtYXR0ZWROdW1iZXI7CisKKworLyoq
CisgKiBDcmVhdGVzIGEgbmV3IFVOdW1iZXJGb3JtYXR0ZXIgZm9yIHRoZSBnaXZlbiBza2VsZXRv
biBzdHJpbmcgYW5kIGxvY2FsZS4gVGhpcyBpcyBjdXJyZW50bHkgdGhlIG9ubHkKKyAqIG1ldGhv
ZCBmb3IgY3JlYXRpbmcgYSBuZXcgVU51bWJlckZvcm1hdHRlci4KKyAqCisgKiBPYmplY3RzIG9m
IHR5cGUgVU51bWJlckZvcm1hdHRlciByZXR1cm5lZCBieSB0aGlzIG1ldGhvZCBhcmUgdGhyZWFk
c2FmZS4KKyAqCisgKiBGb3IgbW9yZSBkZXRhaWxzIG9uIHNrZWxldG9uIHN0cmluZ3MsIHNlZSB0
aGUgZG9jdW1lbnRhdGlvbiBpbiBudW1iZXJmb3JtYXR0ZXIuaC4gRm9yIG1vcmUgZGV0YWlscyBv
bgorICogdGhlIHVzYWdlIG9mIHRoaXMgQVBJLCBzZWUgdGhlIGRvY3VtZW50YXRpb24gYXQgdGhl
IHRvcCBvZiB1bnVtYmVyZm9ybWF0dGVyLmguCisgKgorICogTk9URTogVGhpcyBpcyBhIEMtY29t
cGF0aWJsZSBBUEk7IEMrKyB1c2VycyBzaG91bGQgYnVpbGQgYWdhaW5zdCBudW1iZXJmb3JtYXR0
ZXIuaCBpbnN0ZWFkLgorICoKKyAqIEBwYXJhbSBza2VsZXRvbiBUaGUgc2tlbGV0b24gc3RyaW5n
LCBsaWtlIHUicGVyY2VudCBwcmVjaXNpb24taW50ZWdlciIKKyAqIEBwYXJhbSBza2VsZXRvbkxl
biBUaGUgbnVtYmVyIG9mIFVDaGFycyBpbiB0aGUgc2tlbGV0b24gc3RyaW5nLCBvciAtMSBpdCBp
dCBpcyBOVUwtdGVybWluYXRlZC4KKyAqIEBwYXJhbSBsb2NhbGUgVGhlIE5VTC10ZXJtaW5hdGVk
IGxvY2FsZSBJRC4KKyAqIEBwYXJhbSBlYyBTZXQgaWYgYW4gZXJyb3Igb2NjdXJzLgorICogQHN0
YWJsZSBJQ1UgNjIKKyAqLworVV9TVEFCTEUgVU51bWJlckZvcm1hdHRlciogVV9FWFBPUlQyCit1
bnVtZl9vcGVuRm9yU2tlbGV0b25BbmRMb2NhbGUoY29uc3QgVUNoYXIqIHNrZWxldG9uLCBpbnQz
Ml90IHNrZWxldG9uTGVuLCBjb25zdCBjaGFyKiBsb2NhbGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVUVycm9yQ29kZSogZWMpOworCisKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQ
SQorLyoqCisgKiBMaWtlIHVudW1mX29wZW5Gb3JTa2VsZXRvbkFuZExvY2FsZSwgYnV0IGFjY2Vw
dHMgYSBVUGFyc2VFcnJvciwgd2hpY2ggd2lsbCBiZSBwb3B1bGF0ZWQgd2l0aCB0aGUKKyAqIGxv
Y2F0aW9uIG9mIGEgc2tlbGV0b24gc3ludGF4IGVycm9yIGlmIHN1Y2ggYSBzeW50YXggZXJyb3Ig
ZXhpc3RzLgorICoKKyAqIEBwYXJhbSBza2VsZXRvbiBUaGUgc2tlbGV0b24gc3RyaW5nLCBsaWtl
IHUicGVyY2VudCBwcmVjaXNpb24taW50ZWdlciIKKyAqIEBwYXJhbSBza2VsZXRvbkxlbiBUaGUg
bnVtYmVyIG9mIFVDaGFycyBpbiB0aGUgc2tlbGV0b24gc3RyaW5nLCBvciAtMSBpdCBpdCBpcyBO
VUwtdGVybWluYXRlZC4KKyAqIEBwYXJhbSBsb2NhbGUgVGhlIE5VTC10ZXJtaW5hdGVkIGxvY2Fs
ZSBJRC4KKyAqIEBwYXJhbSBwZXJyb3IgQSBwYXJzZSBlcnJvciBzdHJ1Y3QgcG9wdWxhdGVkIGlm
IGFuIGVycm9yIG9jY3VycyB3aGVuIHBhcnNpbmcuIENhbiBiZSBOVUxMLgorICogICAgICAgICAg
ICAgICBJZiBubyBlcnJvciBvY2N1cnMsIHBlcnJvci0+b2Zmc2V0IHdpbGwgYmUgc2V0IHRvIC0x
LgorICogQHBhcmFtIGVjIFNldCBpZiBhbiBlcnJvciBvY2N1cnMuCisgKiBAZHJhZnQgSUNVIDY0
CisgKi8KK1VfRFJBRlQgVU51bWJlckZvcm1hdHRlciogVV9FWFBPUlQyCit1bnVtZl9vcGVuRm9y
U2tlbGV0b25BbmRMb2NhbGVXaXRoRXJyb3IoCisgICAgICAgY29uc3QgVUNoYXIqIHNrZWxldG9u
LCBpbnQzMl90IHNrZWxldG9uTGVuLCBjb25zdCBjaGFyKiBsb2NhbGUsIFVQYXJzZUVycm9yKiBw
ZXJyb3IsIFVFcnJvckNvZGUqIGVjKTsKKyNlbmRpZiAgLy8gVV9ISURFX0RSQUZUX0FQSQorCisK
Ky8qKgorICogQ3JlYXRlcyBhbiBvYmplY3QgdG8gaG9sZCB0aGUgcmVzdWx0IG9mIGEgVU51bWJl
ckZvcm1hdHRlcgorICogb3BlcmF0aW9uLiBUaGUgb2JqZWN0IGNhbiBiZSB1c2VkIHJlcGVhdGVk
bHk7IGl0IGlzIGNsZWFyZWQgd2hlbmV2ZXIKKyAqIHBhc3NlZCB0byBhIGZvcm1hdCBmdW5jdGlv
bi4KKyAqCisgKiBAcGFyYW0gZWMgU2V0IGlmIGFuIGVycm9yIG9jY3Vycy4KKyAqIEBzdGFibGUg
SUNVIDYyCisgKi8KK1VfU1RBQkxFIFVGb3JtYXR0ZWROdW1iZXIqIFVfRVhQT1JUMgordW51bWZf
b3BlblJlc3VsdChVRXJyb3JDb2RlKiBlYyk7CisKKworLyoqCisgKiBVc2VzIGEgVU51bWJlckZv
cm1hdHRlciB0byBmb3JtYXQgYW4gaW50ZWdlciB0byBhIFVGb3JtYXR0ZWROdW1iZXIuIEEgc3Ry
aW5nLCBmaWVsZCBwb3NpdGlvbiwgYW5kIG90aGVyCisgKiBpbmZvcm1hdGlvbiBjYW4gYmUgcmV0
cmlldmVkIGZyb20gdGhlIFVGb3JtYXR0ZWROdW1iZXIuCisgKgorICogVGhlIFVOdW1iZXJGb3Jt
YXR0ZXIgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIHRocmVhZHMuIEVhY2ggdGhyZWFkIHNob3VsZCBo
YXZlIGl0cyBvd24gbG9jYWwKKyAqIFVGb3JtYXR0ZWROdW1iZXIsIGhvd2V2ZXIsIGZvciBzdG9y
aW5nIHRoZSByZXN1bHQgb2YgdGhlIGZvcm1hdHRpbmcgb3BlcmF0aW9uLgorICoKKyAqIE5PVEU6
IFRoaXMgaXMgYSBDLWNvbXBhdGlibGUgQVBJOyBDKysgdXNlcnMgc2hvdWxkIGJ1aWxkIGFnYWlu
c3QgbnVtYmVyZm9ybWF0dGVyLmggaW5zdGVhZC4KKyAqCisgKiBAcGFyYW0gdWZvcm1hdHRlciBB
IGZvcm1hdHRlciBvYmplY3QgY3JlYXRlZCBieSB1bnVtZl9vcGVuRm9yU2tlbGV0b25BbmRMb2Nh
bGUgb3Igc2ltaWxhci4KKyAqIEBwYXJhbSB2YWx1ZSBUaGUgbnVtYmVyIHRvIGJlIGZvcm1hdHRl
ZC4KKyAqIEBwYXJhbSB1cmVzdWx0IFRoZSBvYmplY3QgdGhhdCB3aWxsIGJlIG11dGF0ZWQgdG8g
c3RvcmUgdGhlIHJlc3VsdDsgc2VlIHVudW1mX29wZW5SZXN1bHQuCisgKiBAcGFyYW0gZWMgU2V0
IGlmIGFuIGVycm9yIG9jY3Vycy4KKyAqIEBzdGFibGUgSUNVIDYyCisgKi8KK1VfU1RBQkxFIHZv
aWQgVV9FWFBPUlQyCit1bnVtZl9mb3JtYXRJbnQoY29uc3QgVU51bWJlckZvcm1hdHRlciogdWZv
cm1hdHRlciwgaW50NjRfdCB2YWx1ZSwgVUZvcm1hdHRlZE51bWJlciogdXJlc3VsdCwKKyAgICAg
ICAgICAgICAgICBVRXJyb3JDb2RlKiBlYyk7CisKKworLyoqCisgKiBVc2VzIGEgVU51bWJlckZv
cm1hdHRlciB0byBmb3JtYXQgYSBkb3VibGUgdG8gYSBVRm9ybWF0dGVkTnVtYmVyLiBBIHN0cmlu
ZywgZmllbGQgcG9zaXRpb24sIGFuZCBvdGhlcgorICogaW5mb3JtYXRpb24gY2FuIGJlIHJldHJp
ZXZlZCBmcm9tIHRoZSBVRm9ybWF0dGVkTnVtYmVyLgorICoKKyAqIFRoZSBVTnVtYmVyRm9ybWF0
dGVyIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiB0aHJlYWRzLiBFYWNoIHRocmVhZCBzaG91bGQgaGF2
ZSBpdHMgb3duIGxvY2FsCisgKiBVRm9ybWF0dGVkTnVtYmVyLCBob3dldmVyLCBmb3Igc3Rvcmlu
ZyB0aGUgcmVzdWx0IG9mIHRoZSBmb3JtYXR0aW5nIG9wZXJhdGlvbi4KKyAqCisgKiBOT1RFOiBU
aGlzIGlzIGEgQy1jb21wYXRpYmxlIEFQSTsgQysrIHVzZXJzIHNob3VsZCBidWlsZCBhZ2FpbnN0
IG51bWJlcmZvcm1hdHRlci5oIGluc3RlYWQuCisgKgorICogQHBhcmFtIHVmb3JtYXR0ZXIgQSBm
b3JtYXR0ZXIgb2JqZWN0IGNyZWF0ZWQgYnkgdW51bWZfb3BlbkZvclNrZWxldG9uQW5kTG9jYWxl
IG9yIHNpbWlsYXIuCisgKiBAcGFyYW0gdmFsdWUgVGhlIG51bWJlciB0byBiZSBmb3JtYXR0ZWQu
CisgKiBAcGFyYW0gdXJlc3VsdCBUaGUgb2JqZWN0IHRoYXQgd2lsbCBiZSBtdXRhdGVkIHRvIHN0
b3JlIHRoZSByZXN1bHQ7IHNlZSB1bnVtZl9vcGVuUmVzdWx0LgorICogQHBhcmFtIGVjIFNldCBp
ZiBhbiBlcnJvciBvY2N1cnMuCisgKiBAc3RhYmxlIElDVSA2MgorICovCitVX1NUQUJMRSB2b2lk
IFVfRVhQT1JUMgordW51bWZfZm9ybWF0RG91YmxlKGNvbnN0IFVOdW1iZXJGb3JtYXR0ZXIqIHVm
b3JtYXR0ZXIsIGRvdWJsZSB2YWx1ZSwgVUZvcm1hdHRlZE51bWJlciogdXJlc3VsdCwKKyAgICAg
ICAgICAgICAgICAgICBVRXJyb3JDb2RlKiBlYyk7CisKKworLyoqCisgKiBVc2VzIGEgVU51bWJl
ckZvcm1hdHRlciB0byBmb3JtYXQgYSBkZWNpbWFsIG51bWJlciB0byBhIFVGb3JtYXR0ZWROdW1i
ZXIuIEEgc3RyaW5nLCBmaWVsZCBwb3NpdGlvbiwgYW5kCisgKiBvdGhlciBpbmZvcm1hdGlvbiBj
YW4gYmUgcmV0cmlldmVkIGZyb20gdGhlIFVGb3JtYXR0ZWROdW1iZXIuCisgKgorICogVGhlIFVO
dW1iZXJGb3JtYXR0ZXIgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIHRocmVhZHMuIEVhY2ggdGhyZWFk
IHNob3VsZCBoYXZlIGl0cyBvd24gbG9jYWwKKyAqIFVGb3JtYXR0ZWROdW1iZXIsIGhvd2V2ZXIs
IGZvciBzdG9yaW5nIHRoZSByZXN1bHQgb2YgdGhlIGZvcm1hdHRpbmcgb3BlcmF0aW9uLgorICoK
KyAqIFRoZSBzeW50YXggb2YgdGhlIHVuZm9ybWF0dGVkIG51bWJlciBpcyBhICJudW1lcmljIHN0
cmluZyIgYXMgZGVmaW5lZCBpbiB0aGUgRGVjaW1hbCBBcml0aG1ldGljCisgKiBTcGVjaWZpY2F0
aW9uLCBhdmFpbGFibGUgYXQgaHR0cDovL3NwZWxlb3Ryb3ZlLmNvbS9kZWNpbWFsCisgKgorICog
Tk9URTogVGhpcyBpcyBhIEMtY29tcGF0aWJsZSBBUEk7IEMrKyB1c2VycyBzaG91bGQgYnVpbGQg
YWdhaW5zdCBudW1iZXJmb3JtYXR0ZXIuaCBpbnN0ZWFkLgorICoKKyAqIEBwYXJhbSB1Zm9ybWF0
dGVyIEEgZm9ybWF0dGVyIG9iamVjdCBjcmVhdGVkIGJ5IHVudW1mX29wZW5Gb3JTa2VsZXRvbkFu
ZExvY2FsZSBvciBzaW1pbGFyLgorICogQHBhcmFtIHZhbHVlIFRoZSBudW1lcmljIHN0cmluZyB0
byBiZSBmb3JtYXR0ZWQuCisgKiBAcGFyYW0gdmFsdWVMZW4gVGhlIGxlbmd0aCBvZiB0aGUgbnVt
ZXJpYyBzdHJpbmcsIG9yIC0xIGlmIGl0IGlzIE5VTC10ZXJtaW5hdGVkLgorICogQHBhcmFtIHVy
ZXN1bHQgVGhlIG9iamVjdCB0aGF0IHdpbGwgYmUgbXV0YXRlZCB0byBzdG9yZSB0aGUgcmVzdWx0
OyBzZWUgdW51bWZfb3BlblJlc3VsdC4KKyAqIEBwYXJhbSBlYyBTZXQgaWYgYW4gZXJyb3Igb2Nj
dXJzLgorICogQHN0YWJsZSBJQ1UgNjIKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIKK3Vu
dW1mX2Zvcm1hdERlY2ltYWwoY29uc3QgVU51bWJlckZvcm1hdHRlciogdWZvcm1hdHRlciwgY29u
c3QgY2hhciogdmFsdWUsIGludDMyX3QgdmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgIFVG
b3JtYXR0ZWROdW1iZXIqIHVyZXN1bHQsIFVFcnJvckNvZGUqIGVjKTsKKworI2lmbmRlZiBVX0hJ
REVfRFJBRlRfQVBJCisvKioKKyAqIFJldHVybnMgYSByZXByZXNlbnRhdGlvbiBvZiBhIFVGb3Jt
YXR0ZWROdW1iZXIgYXMgYSBVRm9ybWF0dGVkVmFsdWUsCisgKiB3aGljaCBjYW4gYmUgc3Vic2Vx
dWVudGx5IHBhc3NlZCB0byBhbnkgQVBJIHJlcXVpcmluZyB0aGF0IHR5cGUuCisgKgorICogVGhl
IHJldHVybmVkIG9iamVjdCBpcyBvd25lZCBieSB0aGUgVUZvcm1hdHRlZE51bWJlciBhbmQgaXMg
dmFsaWQKKyAqIG9ubHkgYXMgbG9uZyBhcyB0aGUgVUZvcm1hdHRlZE51bWJlciBpcyBwcmVzZW50
IGFuZCB1bmNoYW5nZWQgaW4gbWVtb3J5LgorICoKKyAqIFlvdSBjYW4gdGhpbmsgb2YgdGhpcyBt
ZXRob2QgYXMgYSBjYXN0IGJldHdlZW4gdHlwZXMuCisgKgorICogQHBhcmFtIHVyZXN1bHQgVGhl
IG9iamVjdCBjb250YWluaW5nIHRoZSBmb3JtYXR0ZWQgc3RyaW5nLgorICogQHBhcmFtIGVjIFNl
dCBpZiBhbiBlcnJvciBvY2N1cnMuCisgKiBAcmV0dXJuIEEgVUZvcm1hdHRlZFZhbHVlIG93bmVk
IGJ5IHRoZSBpbnB1dCBvYmplY3QuCisgKiBAZHJhZnQgSUNVIDY0CisgKi8KK1VfRFJBRlQgY29u
c3QgVUZvcm1hdHRlZFZhbHVlKiBVX0VYUE9SVDIKK3VudW1mX3Jlc3VsdEFzVmFsdWUoY29uc3Qg
VUZvcm1hdHRlZE51bWJlciogdXJlc3VsdCwgVUVycm9yQ29kZSogZWMpOworI2VuZGlmICAvKiBV
X0hJREVfRFJBRlRfQVBJICovCisKKworLyoqCisgKiBFeHRyYWN0cyB0aGUgcmVzdWx0IG51bWJl
ciBzdHJpbmcgb3V0IG9mIGEgVUZvcm1hdHRlZE51bWJlciB0byBhIFVDaGFyIGJ1ZmZlciBpZiBw
b3NzaWJsZS4KKyAqIElmIGJ1ZmZlckNhcGFjaXR5IGlzIGdyZWF0ZXIgdGhhbiB0aGUgcmVxdWly
ZWQgbGVuZ3RoLCBhIHRlcm1pbmF0aW5nIE5VTCBpcyB3cml0dGVuLgorICogSWYgYnVmZmVyQ2Fw
YWNpdHkgaXMgbGVzcyB0aGFuIHRoZSByZXF1aXJlZCBsZW5ndGgsIGFuIGVycm9yIGNvZGUgaXMg
c2V0LgorICoKKyAqIEFsc28gc2VlIHVmbXR2YWxfZ2V0U3RyaW5nLCB3aGljaCByZXR1cm5zIGEg
TlVMLXRlcm1pbmF0ZWQgc3RyaW5nOgorICoKKyAqICAgICBpbnQzMl90IGxlbjsKKyAqICAgICBj
b25zdCBVQ2hhciogc3RyID0gdWZtdHZhbF9nZXRTdHJpbmcodW51bWZfcmVzdWx0QXNWYWx1ZSh1
cmVzdWx0LCAmZWMpLCAmbGVuLCAmZWMpOworICoKKyAqIE5PVEU6IFRoaXMgaXMgYSBDLWNvbXBh
dGlibGUgQVBJOyBDKysgdXNlcnMgc2hvdWxkIGJ1aWxkIGFnYWluc3QgbnVtYmVyZm9ybWF0dGVy
LmggaW5zdGVhZC4KKyAqCisgKiBAcGFyYW0gdXJlc3VsdCBUaGUgb2JqZWN0IGNvbnRhaW5pbmcg
dGhlIGZvcm1hdHRlZCBudW1iZXIuCisgKiBAcGFyYW0gYnVmZmVyIFdoZXJlIHRvIHNhdmUgdGhl
IHN0cmluZyBvdXRwdXQuCisgKiBAcGFyYW0gYnVmZmVyQ2FwYWNpdHkgVGhlIG51bWJlciBvZiBV
Q2hhcnMgYXZhaWxhYmxlIGluIHRoZSBidWZmZXIuCisgKiBAcGFyYW0gZWMgU2V0IGlmIGFuIGVy
cm9yIG9jY3Vycy4KKyAqIEByZXR1cm4gVGhlIHJlcXVpcmVkIGxlbmd0aC4KKyAqIEBzdGFibGUg
SUNVIDYyCisgKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyCit1bnVtZl9yZXN1bHRUb1N0
cmluZyhjb25zdCBVRm9ybWF0dGVkTnVtYmVyKiB1cmVzdWx0LCBVQ2hhciogYnVmZmVyLCBpbnQz
Ml90IGJ1ZmZlckNhcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSogZWMp
OworCisKKy8qKgorICogRGV0ZXJtaW5lcyB0aGUgc3RhcnQgYW5kIGVuZCBpbmRpY2VzIG9mIHRo
ZSBuZXh0IG9jY3VycmVuY2Ugb2YgdGhlIGdpdmVuIDxlbT5maWVsZDwvZW0+IGluIHRoZQorICog
b3V0cHV0IHN0cmluZy4gVGhpcyBhbGxvd3MgeW91IHRvIGRldGVybWluZSB0aGUgbG9jYXRpb25z
IG9mLCBmb3IgZXhhbXBsZSwgdGhlIGludGVnZXIgcGFydCwKKyAqIGZyYWN0aW9uIHBhcnQsIG9y
IHN5bWJvbHMuCisgKgorICogVGhpcyBpcyBhIHNpbXBsZXIgYnV0IGxlc3MgcG93ZXJmdWwgYWx0
ZXJuYXRpdmUgdG8ge0BsaW5rIHVmbXR2YWxfbmV4dFBvc2l0aW9ufS4KKyAqCisgKiBJZiBhIGZp
ZWxkIG9jY3VycyBqdXN0IG9uY2UsIGNhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCBmaW5kIHRoYXQg
b2NjdXJyZW5jZSBhbmQgcmV0dXJuIGl0LiBJZiBhCisgKiBmaWVsZCBvY2N1cnMgbXVsdGlwbGUg
dGltZXMsIHRoaXMgbWV0aG9kIG1heSBiZSBjYWxsZWQgcmVwZWF0ZWRseSB3aXRoIHRoZSBmb2xs
b3dpbmcgcGF0dGVybjoKKyAqCisgKiA8cHJlPgorICogVUZpZWxkUG9zaXRpb24gdWZwb3MgPSB7
VU5VTV9HUk9VUElOR19TRVBBUkFUT1JfRklFTEQsIDAsIDB9OworICogd2hpbGUgKHVudW1mX3Jl
c3VsdE5leHRGaWVsZFBvc2l0aW9uKHVyZXN1bHQsIHVmcG9zLCAmZWMpKSB7CisgKiAgIC8vIGRv
IHNvbWV0aGluZyB3aXRoIHVmcG9zLgorICogfQorICogPC9wcmU+CisgKgorICogVGhpcyBtZXRo
b2QgaXMgdXNlZnVsIGlmIHlvdSBrbm93IHdoaWNoIGZpZWxkIHRvIHF1ZXJ5LiBJZiB5b3Ugd2Fu
dCBhbGwgYXZhaWxhYmxlIGZpZWxkIHBvc2l0aW9uCisgKiBpbmZvcm1hdGlvbiwgdXNlIHVudW1m
X3Jlc3VsdEdldEFsbEZpZWxkUG9zaXRpb25zKCkuCisgKgorICogTk9URTogQWxsIGZpZWxkcyBv
ZiB0aGUgVUZpZWxkUG9zaXRpb24gbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgY2FsbGluZyB0
aGlzIG1ldGhvZC4KKyAqCisgKiBAcGFyYW0gdXJlc3VsdCBUaGUgb2JqZWN0IGNvbnRhaW5pbmcg
dGhlIGZvcm1hdHRlZCBudW1iZXIuCisgKiBAcGFyYW0gdWZwb3MKKyAqICAgICAgICAgICAgSW5w
dXQrb3V0cHV0IHZhcmlhYmxlLiBPbiBpbnB1dCwgdGhlICJmaWVsZCIgcHJvcGVydHkgZGV0ZXJt
aW5lcyB3aGljaCBmaWVsZCB0byBsb29rIHVwLAorICogICAgICAgICAgICBhbmQgdGhlICJlbmRJ
bmRleCIgcHJvcGVydHkgZGV0ZXJtaW5lcyB3aGVyZSB0byBiZWdpbiB0aGUgc2VhcmNoLiBPbiBv
dXRwdXQsIHRoZQorICogICAgICAgICAgICAiYmVnaW5JbmRleCIgZmllbGQgaXMgc2V0IHRvIHRo
ZSBiZWdpbm5pbmcgb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIGZpZWxkIGFmdGVyIHRo
ZQorICogICAgICAgICAgICBpbnB1dCAiZW5kSW5kZXgiLCBhbmQgImVuZEluZGV4IiBpcyBzZXQg
dG8gdGhlIGVuZCBvZiB0aGF0IG9jY3VycmVuY2Ugb2YgdGhlIGZpZWxkCisgKiAgICAgICAgICAg
IChleGNsdXNpdmUgaW5kZXgpLiBJZiBhIGZpZWxkIHBvc2l0aW9uIGlzIG5vdCBmb3VuZCwgdGhl
IEZpZWxkUG9zaXRpb24gaXMgbm90IGNoYW5nZWQgYW5kCisgKiAgICAgICAgICAgIHRoZSBtZXRo
b2QgcmV0dXJucyBGQUxTRS4KKyAqIEBwYXJhbSBlYyBTZXQgaWYgYW4gZXJyb3Igb2NjdXJzLgor
ICogQHN0YWJsZSBJQ1UgNjIKKyAqLworVV9TVEFCTEUgVUJvb2wgVV9FWFBPUlQyCit1bnVtZl9y
ZXN1bHROZXh0RmllbGRQb3NpdGlvbihjb25zdCBVRm9ybWF0dGVkTnVtYmVyKiB1cmVzdWx0LCBV
RmllbGRQb3NpdGlvbiogdWZwb3MsIFVFcnJvckNvZGUqIGVjKTsKKworCisvKioKKyAqIFBvcHVs
YXRlcyB0aGUgZ2l2ZW4gaXRlcmF0b3Igd2l0aCBhbGwgZmllbGRzIGluIHRoZSBmb3JtYXR0ZWQg
b3V0cHV0IHN0cmluZy4gVGhpcyBhbGxvd3MgeW91IHRvCisgKiBkZXRlcm1pbmUgdGhlIGxvY2F0
aW9ucyBvZiB0aGUgaW50ZWdlciBwYXJ0LCBmcmFjdGlvbiBwYXJ0LCBhbmQgc2lnbi4KKyAqCisg
KiBUaGlzIGlzIGFuIGFsdGVybmF0aXZlIHRvIHRoZSBtb3JlIHBvd2VyZnVsIHtAbGluayB1Zm10
dmFsX25leHRQb3NpdGlvbn0gQVBJLgorICoKKyAqIElmIHlvdSBuZWVkIGluZm9ybWF0aW9uIG9u
IG9ubHkgb25lIGZpZWxkLCB1c2Uge0BsaW5rIHVmbXR2YWxfbmV4dFBvc2l0aW9ufSBvcgorICog
e0BsaW5rIHVudW1mX3Jlc3VsdE5leHRGaWVsZFBvc2l0aW9ufS4KKyAqCisgKiBAcGFyYW0gdXJl
c3VsdCBUaGUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZvcm1hdHRlZCBudW1iZXIuCisgKiBAcGFy
YW0gdWZwb3NpdGVyCisgKiAgICAgICAgIEEgcG9pbnRlciB0byBhIFVGaWVsZFBvc2l0aW9uSXRl
cmF0b3IgY3JlYXRlZCBieSB7QGxpbmsgI3VmaWVsZHBvc2l0ZXJfb3Blbn0uIEl0ZXJhdGlvbgor
ICogICAgICAgICBpbmZvcm1hdGlvbiBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIFVGaWVsZFBvc2l0
aW9uSXRlcmF0b3IgaXMgZGVsZXRlZCwgYW5kIHRoZSBpdGVyYXRvciBpcyByZXNldAorICogICAg
ICAgICB0byBhcHBseSB0byB0aGUgZmllbGRzIGluIHRoZSBmb3JtYXR0ZWQgc3RyaW5nIGNyZWF0
ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYWxsLiBUaGUgZmllbGQgdmFsdWVzCisgKiAgICAgICAgIGFu
ZCBpbmRleGVzIHJldHVybmVkIGJ5IHtAbGluayAjdWZpZWxkcG9zaXRlcl9uZXh0fSByZXByZXNl
bnQgZmllbGRzIGRlbm90ZWQgYnkKKyAqICAgICAgICAgdGhlIFVOdW1iZXJGb3JtYXRGaWVsZHMg
ZW51bS4gRmllbGRzIGFyZSBub3QgcmV0dXJuZWQgaW4gYSBndWFyYW50ZWVkIG9yZGVyLiBGaWVs
ZHMgY2Fubm90CisgKiAgICAgICAgIG92ZXJsYXAsIGJ1dCB0aGV5IG1heSBuZXN0LiBGb3IgZXhh
bXBsZSwgMTIzNCBjb3VsZCBmb3JtYXQgYXMgIjEsMjM0IiB3aGljaCBtaWdodCBjb25zaXN0IG9m
IGEKKyAqICAgICAgICAgZ3JvdXBpbmcgc2VwYXJhdG9yIGZpZWxkIGZvciAnLCcgYW5kIGFuIGlu
dGVnZXIgZmllbGQgZW5jb21wYXNzaW5nIHRoZSBlbnRpcmUgc3RyaW5nLgorICogQHBhcmFtIGVj
IFNldCBpZiBhbiBlcnJvciBvY2N1cnMuCisgKiBAc3RhYmxlIElDVSA2MgorICovCitVX1NUQUJM
RSB2b2lkIFVfRVhQT1JUMgordW51bWZfcmVzdWx0R2V0QWxsRmllbGRQb3NpdGlvbnMoY29uc3Qg
VUZvcm1hdHRlZE51bWJlciogdXJlc3VsdCwgVUZpZWxkUG9zaXRpb25JdGVyYXRvciogdWZwb3Np
dGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSogZWMpOwor
CisKKy8qKgorICogUmVsZWFzZXMgdGhlIFVOdW1iZXJGb3JtYXR0ZXIgY3JlYXRlZCBieSB1bnVt
Zl9vcGVuRm9yU2tlbGV0b25BbmRMb2NhbGUoKS4KKyAqCisgKiBAcGFyYW0gdWZvcm1hdHRlciBB
biBvYmplY3QgY3JlYXRlZCBieSB1bnVtZl9vcGVuRm9yU2tlbGV0b25BbmRMb2NhbGUoKS4KKyAq
IEBzdGFibGUgSUNVIDYyCisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyCit1bnVtZl9jbG9z
ZShVTnVtYmVyRm9ybWF0dGVyKiB1Zm9ybWF0dGVyKTsKKworCisvKioKKyAqIFJlbGVhc2VzIHRo
ZSBVRm9ybWF0dGVkTnVtYmVyIGNyZWF0ZWQgYnkgdW51bWZfb3BlblJlc3VsdCgpLgorICoKKyAq
IEBwYXJhbSB1cmVzdWx0IEFuIG9iamVjdCBjcmVhdGVkIGJ5IHVudW1mX29wZW5SZXN1bHQoKS4K
KyAqIEBzdGFibGUgSUNVIDYyCisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyCit1bnVtZl9j
bG9zZVJlc3VsdChVRm9ybWF0dGVkTnVtYmVyKiB1cmVzdWx0KTsKKworCisjaWYgVV9TSE9XX0NQ
TFVTUExVU19BUEkKK1VfTkFNRVNQQUNFX0JFR0lOCisKKy8qKgorICogXGNsYXNzIExvY2FsVU51
bWJlckZvcm1hdHRlclBvaW50ZXIKKyAqICJTbWFydCBwb2ludGVyIiBjbGFzczsgY2xvc2VzIGEg
VU51bWJlckZvcm1hdHRlciB2aWEgdW51bWZfY2xvc2UoKS4KKyAqIEZvciBtb3N0IG1ldGhvZHMg
c2VlIHRoZSBMb2NhbFBvaW50ZXJCYXNlIGJhc2UgY2xhc3MuCisgKgorICogVXNhZ2U6CisgKiA8
cHJlPgorICogTG9jYWxVTnVtYmVyRm9ybWF0dGVyUG9pbnRlciB1Zm9ybWF0dGVyKHVudW1mX29w
ZW5Gb3JTa2VsZXRvbkFuZExvY2FsZSguLi4pKTsKKyAqIC8vIG5vIG5lZWQgdG8gZXhwbGljaXRs
eSBjYWxsIHVudW1mX2Nsb3NlKCkKKyAqIDwvcHJlPgorICoKKyAqIEBzZWUgTG9jYWxQb2ludGVy
QmFzZQorICogQHNlZSBMb2NhbFBvaW50ZXIKKyAqIEBzdGFibGUgSUNVIDYyCisgKi8KK1VfREVG
SU5FX0xPQ0FMX09QRU5fUE9JTlRFUihMb2NhbFVOdW1iZXJGb3JtYXR0ZXJQb2ludGVyLCBVTnVt
YmVyRm9ybWF0dGVyLCB1bnVtZl9jbG9zZSk7CisKKy8qKgorICogXGNsYXNzIExvY2FsVUZvcm1h
dHRlZE51bWJlclBvaW50ZXIKKyAqICJTbWFydCBwb2ludGVyIiBjbGFzczsgY2xvc2VzIGEgVUZv
cm1hdHRlZE51bWJlciB2aWEgdW51bWZfY2xvc2VSZXN1bHQoKS4KKyAqIEZvciBtb3N0IG1ldGhv
ZHMgc2VlIHRoZSBMb2NhbFBvaW50ZXJCYXNlIGJhc2UgY2xhc3MuCisgKgorICogVXNhZ2U6Cisg
KiA8cHJlPgorICogTG9jYWxVRm9ybWF0dGVkTnVtYmVyUG9pbnRlciB1Zm9ybWF0dGVyKHVudW1m
X29wZW5SZXN1bHQoLi4uKSk7CisgKiAvLyBubyBuZWVkIHRvIGV4cGxpY2l0bHkgY2FsbCB1bnVt
Zl9jbG9zZVJlc3VsdCgpCisgKiA8L3ByZT4KKyAqCisgKiBAc2VlIExvY2FsUG9pbnRlckJhc2UK
KyAqIEBzZWUgTG9jYWxQb2ludGVyCisgKiBAc3RhYmxlIElDVSA2MgorICovCitVX0RFRklORV9M
T0NBTF9PUEVOX1BPSU5URVIoTG9jYWxVRm9ybWF0dGVkTnVtYmVyUG9pbnRlciwgVUZvcm1hdHRl
ZE51bWJlciwgdW51bWZfY2xvc2VSZXN1bHQpOworCitVX05BTUVTUEFDRV9FTkQKKyNlbmRpZiAv
LyBVX1NIT1dfQ1BMVVNQTFVTX0FQSQorCisjZW5kaWYgLy9fX1VOVU1CRVJGT1JNQVRURVJfSF9f
CisjZW5kaWYgLyogI2lmICFVQ09ORklHX05PX0ZPUk1BVFRJTkcgKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvaWN1L3VuaWNvZGUvdW51bXN5cy5oIGIvU291cmNlL1dURi9pY3UvdW5pY29kZS91
bnVtc3lzLmgKaW5kZXggNzk1ZWM2MDI1NWYyM2VmZGI2NzZhMjBkNzMzYzEzY2Q3YTQxNWRmMS4u
MTYzMWMyMzRmZDI3OTUyOWY2ODhlZGRlM2M0M2VlMmVkMGJmMTZhMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi9pY3UvdW5pY29kZS91bnVtc3lzLmgKKysrIGIvU291cmNlL1dURi9pY3UvdW5pY29k
ZS91bnVtc3lzLmgKQEAgLTEwNSw2ICsxMDUsNyBAQCBVX05BTUVTUEFDRV9FTkQKIC8qKgogICog
UmV0dXJucyBhbiBlbnVtZXJhdGlvbiBvdmVyIHRoZSBuYW1lcyBvZiBhbGwgb2YgdGhlIHByZWRl
ZmluZWQgbnVtYmVyaW5nIHN5c3RlbXMga25vd24KICAqIHRvIElDVS4KKyAqIFRoZSBudW1iZXJp
bmcgc3lzdGVtIG5hbWVzIHdpbGwgYmUgaW4gYWxwaGFiZXRpY2FsIChpbnZhcmlhbnQpIG9yZGVy
LgogICogQHBhcmFtIHN0YXR1cyAgICBBIHBvaW50ZXIgdG8gYSBVRXJyb3JDb2RlIHRvIHJlY2Vp
dmUgYW55IGVycm9ycy4KICAqIEByZXR1cm4gICAgICAgICAgQSBwb2ludGVyIHRvIGEgVUVudW1l
cmF0aW9uIHRoYXQgbXVzdCBiZSBjbG9zZWQgd2l0aCB1ZW51bV9jbG9zZSgpLAogICogICAgICAg
ICAgICAgICAgICBvciBOVUxMIGlmIGFuIGVycm9yIG9jY3VycmVkLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi9pY3UvdW5pY29kZS91b2JqZWN0LmggYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3Vv
YmplY3QuaAppbmRleCA5NzgyZjI3MmY2ZDcwNDVhNWMxYzY2ODQ2OGM3M2E2MmQzMTYwMTYyLi5j
MjY2M2ViZmY0OGJiODJhMDI2NDNlNTc5M2IzNTExY2NmNzc5YWRkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL2ljdS91bmljb2RlL3VvYmplY3QuaAorKysgYi9Tb3VyY2UvV1RGL2ljdS91bmljb2Rl
L3VvYmplY3QuaApAQCAtMjAsNiArMjAsNyBAQAogI2RlZmluZSBfX1VPQkpFQ1RfSF9fCiAKICNp
bmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgorI2luY2x1ZGUgInVuaWNvZGUvcGxhdGZvcm0uaCIK
IAogLyoqCiAgKiBcZmlsZQpAQCAtMjcsOSArMjgsMTAgQEAKICAqLwogCiAvKioKLSAqIEB7CiAg
KiBcZGVmIFVfTk9fVEhST1cKLSAqICAgICAgICAgRGVmaW5lIHRoaXMgdG8gZGVmaW5lIHRoZSB0
aHJvdygpIHNwZWNpZmljYXRpb24gc28KKyAqICAgICAgICAgU2luY2UgSUNVIDY0LCB1c2UgVV9O
T0VYQ0VQVCBpbnN0ZWFkLgorICoKKyAqICAgICAgICAgUHJldmlvdXNseSwgZGVmaW5lIHRoaXMg
dG8gZGVmaW5lIHRoZSB0aHJvdygpIHNwZWNpZmljYXRpb24gc28KICAqICAgICAgICAgICAgICAg
ICBjZXJ0YWluIGZ1bmN0aW9ucyBkbyBub3QgdGhyb3cgYW55IGV4Y2VwdGlvbnMKICAqCiAgKiAg
ICAgICAgIFVNZW1vcnkgb3BlcmF0b3IgbmV3IG1ldGhvZHMgc2hvdWxkIGhhdmUgdGhlIHRocm93
KCkgc3BlY2lmaWNhdGlvbiAKQEAgLTM4LDE0ICs0MCwxMiBAQAogICogICAgICAgICBjb25zdHJ1
Y3RvciBpcyBzdGlsbCBjYWxsZWQsIGFuZCBpZiB0aGUgY29uc3RydWN0b3IgcmVmZXJlbmNlcyBt
ZW1iZXIgCiAgKiAgICAgICAgIGRhdGEsICh3aGljaCBpdCB0eXBpY2FsbHkgZG9lcyksIHRoZSBy
ZXN1bHQgaXMgYSBzZWdtZW50YXRpb24gdmlvbGF0aW9uLgogICoKLSAqIEBzdGFibGUgSUNVIDQu
MgorICogQHN0YWJsZSBJQ1UgNC4yLiBTaW5jZSBJQ1UgNjQsIFVzZSBVX05PRVhDRVBUIGluc3Rl
YWQuIFNlZSBJQ1UtMjA0MjIuCiAgKi8KICNpZm5kZWYgVV9OT19USFJPVwogI2RlZmluZSBVX05P
X1RIUk9XIHRocm93KCkKICNlbmRpZgogCi0vKiogQH0gKi8KLQogLyo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0qLwogLyogVUNsYXNzSUQtYmFzZWQgUlRUSSAqLwogLyo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwpA
QCAtMTI4LDE0ICsxMjgsMTQgQEAgY2xhc3MgVV9DT01NT05fQVBJIFVNZW1vcnkgewogICAgICAq
IGZvciBJQ1U0QyBDKysgY2xhc3NlcwogICAgICAqIEBzdGFibGUgSUNVIDIuNAogICAgICAqLwot
ICAgIHN0YXRpYyB2b2lkICogVV9FWFBPUlQyIG9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSkgVV9O
T19USFJPVzsKKyAgICBzdGF0aWMgdm9pZCAqIFVfRVhQT1JUMiBvcGVyYXRvciBuZXcoc2l6ZV90
IHNpemUpIFVfTk9FWENFUFQ7CiAKICAgICAvKioKICAgICAgKiBPdmVycmlkZSBmb3IgSUNVNEMg
QysrIG1lbW9yeSBtYW5hZ2VtZW50LgogICAgICAqIFNlZSBuZXcoKS4KICAgICAgKiBAc3RhYmxl
IElDVSAyLjQKICAgICAgKi8KLSAgICBzdGF0aWMgdm9pZCAqIFVfRVhQT1JUMiBvcGVyYXRvciBu
ZXdbXShzaXplX3Qgc2l6ZSkgVV9OT19USFJPVzsKKyAgICBzdGF0aWMgdm9pZCAqIFVfRVhQT1JU
MiBvcGVyYXRvciBuZXdbXShzaXplX3Qgc2l6ZSkgVV9OT0VYQ0VQVDsKIAogICAgIC8qKgogICAg
ICAqIE92ZXJyaWRlIGZvciBJQ1U0QyBDKysgbWVtb3J5IG1hbmFnZW1lbnQuCkBAIC0xNDUsMTQg
KzE0NSwxNCBAQCBjbGFzcyBVX0NPTU1PTl9BUEkgVU1lbW9yeSB7CiAgICAgICogZm9yIElDVTRD
IEMrKyBjbGFzc2VzCiAgICAgICogQHN0YWJsZSBJQ1UgMi40CiAgICAgICovCi0gICAgc3RhdGlj
IHZvaWQgVV9FWFBPUlQyIG9wZXJhdG9yIGRlbGV0ZSh2b2lkICpwKSBVX05PX1RIUk9XOworICAg
IHN0YXRpYyB2b2lkIFVfRVhQT1JUMiBvcGVyYXRvciBkZWxldGUodm9pZCAqcCkgVV9OT0VYQ0VQ
VDsKIAogICAgIC8qKgogICAgICAqIE92ZXJyaWRlIGZvciBJQ1U0QyBDKysgbWVtb3J5IG1hbmFn
ZW1lbnQuCiAgICAgICogU2VlIGRlbGV0ZSgpLgogICAgICAqIEBzdGFibGUgSUNVIDIuNAogICAg
ICAqLwotICAgIHN0YXRpYyB2b2lkIFVfRVhQT1JUMiBvcGVyYXRvciBkZWxldGVbXSh2b2lkICpw
KSBVX05PX1RIUk9XOworICAgIHN0YXRpYyB2b2lkIFVfRVhQT1JUMiBvcGVyYXRvciBkZWxldGVb
XSh2b2lkICpwKSBVX05PRVhDRVBUOwogCiAjaWYgVV9IQVZFX1BMQUNFTUVOVF9ORVcKICAgICAv
KioKQEAgLTE2MCwxNCArMTYwLDE0IEBAIGNsYXNzIFVfQ09NTU9OX0FQSSBVTWVtb3J5IHsKICAg
ICAgKiBTZWUgbmV3KCkuCiAgICAgICogQHN0YWJsZSBJQ1UgMi42CiAgICAgICovCi0gICAgc3Rh
dGljIGlubGluZSB2b2lkICogVV9FWFBPUlQyIG9wZXJhdG9yIG5ldyhzaXplX3QsIHZvaWQgKnB0
cikgVV9OT19USFJPVyB7IHJldHVybiBwdHI7IH0KKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgKiBV
X0VYUE9SVDIgb3BlcmF0b3IgbmV3KHNpemVfdCwgdm9pZCAqcHRyKSBVX05PRVhDRVBUIHsgcmV0
dXJuIHB0cjsgfQogCiAgICAgLyoqCiAgICAgICogT3ZlcnJpZGUgZm9yIElDVTRDIEMrKyBtZW1v
cnkgbWFuYWdlbWVudCBmb3IgU1RMLgogICAgICAqIFNlZSBkZWxldGUoKS4KICAgICAgKiBAc3Rh
YmxlIElDVSAyLjYKICAgICAgKi8KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgVV9FWFBPUlQyIG9w
ZXJhdG9yIGRlbGV0ZSh2b2lkICosIHZvaWQgKikgVV9OT19USFJPVyB7fQorICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCBVX0VYUE9SVDIgb3BlcmF0b3IgZGVsZXRlKHZvaWQgKiwgdm9pZCAqKSBVX05P
RVhDRVBUIHt9CiAjZW5kaWYgLyogVV9IQVZFX1BMQUNFTUVOVF9ORVcgKi8KICNpZiBVX0hBVkVf
REVCVUdfTE9DQVRJT05fTkVXCiAgICAgLyoqCkBAIC0xNzcsNyArMTc3LDcgQEAgY2xhc3MgVV9D
T01NT05fQVBJIFVNZW1vcnkgewogICAgICAgKiBAcGFyYW0gZmlsZSAgIFRoZSBmaWxlIHdoZXJl
IHRoZSBhbGxvY2F0aW9uIHdhcyByZXF1ZXN0ZWQKICAgICAgICogQHBhcmFtIGxpbmUgICBUaGUg
bGluZSB3aGVyZSB0aGUgYWxsb2NhdGlvbiB3YXMgcmVxdWVzdGVkIAogICAgICAgKi8gCi0gICAg
c3RhdGljIHZvaWQgKiBVX0VYUE9SVDIgb3BlcmF0b3IgbmV3KHNpemVfdCBzaXplLCBjb25zdCBj
aGFyKiBmaWxlLCBpbnQgbGluZSkgVV9OT19USFJPVzsKKyAgICBzdGF0aWMgdm9pZCAqIFVfRVhQ
T1JUMiBvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5l
KSBVX05PRVhDRVBUOwogICAgIC8qKgogICAgICAgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhIG1h
dGNoaW5nIGRlbGV0ZSBmb3IgdGhlIE1GQyBkZWJ1ZyBuZXcKICAgICAgICogCkBAIC0xODUsNyAr
MTg1LDcgQEAgY2xhc3MgVV9DT01NT05fQVBJIFVNZW1vcnkgewogICAgICAgKiBAcGFyYW0gZmls
ZSAgIFRoZSBmaWxlIHdoZXJlIHRoZSBhbGxvY2F0aW9uIHdhcyByZXF1ZXN0ZWQKICAgICAgICog
QHBhcmFtIGxpbmUgICBUaGUgbGluZSB3aGVyZSB0aGUgYWxsb2NhdGlvbiB3YXMgcmVxdWVzdGVk
IAogICAgICAgKi8gCi0gICAgc3RhdGljIHZvaWQgVV9FWFBPUlQyIG9wZXJhdG9yIGRlbGV0ZSh2
b2lkKiBwLCBjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSkgVV9OT19USFJPVzsKKyAgICBzdGF0
aWMgdm9pZCBVX0VYUE9SVDIgb3BlcmF0b3IgZGVsZXRlKHZvaWQqIHAsIGNvbnN0IGNoYXIqIGZp
bGUsIGludCBsaW5lKSBVX05PRVhDRVBUOwogI2VuZGlmIC8qIFVfSEFWRV9ERUJVR19MT0NBVElP
Tl9ORVcgKi8KICNlbmRpZiAvKiBVX09WRVJSSURFX0NYWF9BTExPQ0FUSU9OICovCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdXBsdXJhbHJ1bGVzLmggYi9Tb3VyY2UvV1RG
L2ljdS91bmljb2RlL3VwbHVyYWxydWxlcy5oCmluZGV4IDY5MDg0NmJjODljZDAxM2E0OWJhOWVl
YjMxNDYwNjZlNzM0ZWJkNDEuLmZjMWIyZmI1NzE3M2I4Yjg0YjA1YjhkYTY3NDVkNjRmMjgyYmQz
NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdXBsdXJhbHJ1bGVzLmgKKysr
IGIvU291cmNlL1dURi9pY3UvdW5pY29kZS91cGx1cmFscnVsZXMuaApAQCAtMjAsNiArMjAsOSBA
QAogI2luY2x1ZGUgInVuaWNvZGUvdW51bS5oIgogI2VuZGlmICAvKiBVX0hJREVfSU5URVJOQUxf
QVBJICovCiAKKy8vIEZvcndhcmQtZGVjbGFyYXRpb24KK3N0cnVjdCBVRm9ybWF0dGVkTnVtYmVy
OworCiAvKioKICAqIFxmaWxlCiAgKiBcYnJpZWYgQyBBUEk6IFBsdXJhbCBydWxlcywgc2VsZWN0
IHBsdXJhbCBrZXl3b3JkcyBmb3IgbnVtZXJpYyB2YWx1ZXMuCkBAIC0xMzIsMTQgKzEzNSwxNSBA
QCBVX05BTUVTUEFDRV9FTkQKIAogCiAvKioKLSAqIEdpdmVuIGEgbnVtYmVyLCByZXR1cm5zIHRo
ZSBrZXl3b3JkIG9mIHRoZSBmaXJzdCBydWxlIHRoYXQKKyAqIEdpdmVuIGEgZmxvYXRpbmctcG9p
bnQgbnVtYmVyLCByZXR1cm5zIHRoZSBrZXl3b3JkIG9mIHRoZSBmaXJzdCBydWxlIHRoYXQKICAq
IGFwcGxpZXMgdG8gdGhlIG51bWJlciwgYWNjb3JkaW5nIHRvIHRoZSBzdXBwbGllZCBVUGx1cmFs
UnVsZXMgb2JqZWN0LgogICogQHBhcmFtIHVwbHJ1bGVzIFRoZSBVUGx1cmFsUnVsZXMgb2JqZWN0
IHNwZWNpZnlpbmcgdGhlIHJ1bGVzLgogICogQHBhcmFtIG51bWJlciBUaGUgbnVtYmVyIGZvciB3
aGljaCB0aGUgcnVsZSBoYXMgdG8gYmUgZGV0ZXJtaW5lZC4KLSAqIEBwYXJhbSBrZXl3b3JkIFRo
ZSBrZXl3b3JkIG9mIHRoZSBydWxlIHRoYXQgYXBwbGllcyB0byBudW1iZXIuCi0gKiBAcGFyYW0g
Y2FwYWNpdHkgVGhlIGNhcGFjaXR5IG9mIGtleXdvcmQuCisgKiBAcGFyYW0ga2V5d29yZCBBbiBv
dXRwdXQgYnVmZmVyIHRvIHdyaXRlIHRoZSBrZXl3b3JkIG9mIHRoZSBydWxlIHRoYXQKKyAqICAg
ICAgICAgYXBwbGllcyB0byBudW1iZXIuCisgKiBAcGFyYW0gY2FwYWNpdHkgVGhlIGNhcGFjaXR5
IG9mIHRoZSBrZXl3b3JkIGJ1ZmZlci4KICAqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGEg
VUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMuCi0gKiBAcmV0dXJuIFRoZSBsZW5ndGgg
b2Yga2V5d29yZC4KKyAqIEByZXR1cm4gVGhlIGxlbmd0aCBvZiB0aGUga2V5d29yZC4KICAqIEBz
dGFibGUgSUNVIDQuOAogICovCiBVX0NBUEkgaW50MzJfdCBVX0VYUE9SVDIKQEAgLTE0OCw2ICsx
NTIsMzEgQEAgdXBscnVsZXNfc2VsZWN0KGNvbnN0IFVQbHVyYWxSdWxlcyAqdXBscnVsZXMsCiAg
ICAgICAgICAgICAgICBVQ2hhciAqa2V5d29yZCwgaW50MzJfdCBjYXBhY2l0eSwKICAgICAgICAg
ICAgICAgIFVFcnJvckNvZGUgKnN0YXR1cyk7CiAKKyNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQor
LyoqCisgKiBHaXZlbiBhIGZvcm1hdHRlZCBudW1iZXIsIHJldHVybnMgdGhlIGtleXdvcmQgb2Yg
dGhlIGZpcnN0IHJ1bGUKKyAqIHRoYXQgYXBwbGllcyB0byB0aGUgbnVtYmVyLCBhY2NvcmRpbmcg
dG8gdGhlIHN1cHBsaWVkIFVQbHVyYWxSdWxlcyBvYmplY3QuCisgKgorICogQSBVRm9ybWF0dGVk
TnVtYmVyIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBhbiBleHBvbmVudCBvciB0cmFpbGluZyB6ZXJv
cywKKyAqIHdoaWNoIGNhbiBhZmZlY3QgdGhlIHBsdXJhbCBjYXRlZ29yeS4gVG8gZ2V0IGEgVUZv
cm1hdHRlZE51bWJlciwgc2VlCisgKiB7QGxpbmsgVU51bWJlckZvcm1hdHRlcn0uCisgKgorICog
QHBhcmFtIHVwbHJ1bGVzIFRoZSBVUGx1cmFsUnVsZXMgb2JqZWN0IHNwZWNpZnlpbmcgdGhlIHJ1
bGVzLgorICogQHBhcmFtIG51bWJlciBUaGUgZm9ybWF0dGVkIG51bWJlciBmb3Igd2hpY2ggdGhl
IHJ1bGUgaGFzIHRvIGJlIGRldGVybWluZWQuCisgKiBAcGFyYW0ga2V5d29yZCBUaGUgZGVzdGlu
YXRpb24gYnVmZmVyIGZvciB0aGUga2V5d29yZCBvZiB0aGUgcnVsZSB0aGF0CisgKiAgICAgICAg
IGFwcGxpZXMgdG8gbnVtYmVyLgorICogQHBhcmFtIGNhcGFjaXR5IFRoZSBjYXBhY2l0eSBvZiB0
aGUga2V5d29yZCBidWZmZXIuCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhIFVFcnJv
ckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzLgorICogQHJldHVybiBUaGUgbGVuZ3RoIG9mIHRo
ZSBrZXl3b3JkLgorICogQGRyYWZ0IElDVSA2NAorICovCitVX0NBUEkgaW50MzJfdCBVX0VYUE9S
VDIKK3VwbHJ1bGVzX3NlbGVjdEZvcm1hdHRlZChjb25zdCBVUGx1cmFsUnVsZXMgKnVwbHJ1bGVz
LAorICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IFVGb3JtYXR0ZWROdW1iZXIqIG51bWJlciwK
KyAgICAgICAgICAgICAgIFVDaGFyICprZXl3b3JkLCBpbnQzMl90IGNhcGFjaXR5LAorICAgICAg
ICAgICAgICAgVUVycm9yQ29kZSAqc3RhdHVzKTsKKyNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQ
SSAqLworCiAjaWZuZGVmIFVfSElERV9JTlRFUk5BTF9BUEkKIC8qKgogICogR2l2ZW4gYSBudW1i
ZXIsIHJldHVybnMgdGhlIGtleXdvcmQgb2YgdGhlIGZpcnN0IHJ1bGUgdGhhdCBhcHBsaWVzIHRv
IHRoZQpAQCAtMTYwLDcgKzE4OSw4IEBAIHVwbHJ1bGVzX3NlbGVjdChjb25zdCBVUGx1cmFsUnVs
ZXMgKnVwbHJ1bGVzLAogICogQHBhcmFtIGZtdCBUaGUgVU51bWJlckZvcm1hdCBzcGVjaWZ5aW5n
IGhvdyB0aGUgbnVtYmVyIHdpbGwgYmUgZm9ybWF0dGVkCiAgKiAgICAgICAgKHRoaXMgY2FuIGFm
ZmVjdCB0aGUgcGx1cmFsIGZvcm0sIGUuZy4gIjEgZG9sbGFyIiB2cyAiMS4wIGRvbGxhcnMiKS4K
ICAqICAgICAgICBJZiB0aGlzIGlzIE5VTEwsIHRoZSBmdW5jdGlvbiBiZWhhdmVzIGxpa2UgdXBs
cnVsZXNfc2VsZWN0LgotICogQHBhcmFtIGtleXdvcmQgVGhlIGtleXdvcmQgb2YgdGhlIHJ1bGUg
dGhhdCBhcHBsaWVzIHRvIG51bWJlci4KKyAqIEBwYXJhbSBrZXl3b3JkIEFuIG91dHB1dCBidWZm
ZXIgdG8gd3JpdGUgdGhlIGtleXdvcmQgb2YgdGhlIHJ1bGUgdGhhdAorICogICAgICAgICBhcHBs
aWVzIHRvIG51bWJlci4KICAqIEBwYXJhbSBjYXBhY2l0eSBUaGUgY2FwYWNpdHkgb2YgdGhlIGtl
eXdvcmQgYnVmZmVyLgogICogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYSBVRXJyb3JDb2Rl
IHRvIHJlY2VpdmUgYW55IGVycm9ycy4KICAqIEByZXR1cm4gVGhlIGxlbmd0aCBvZiBrZXl3b3Jk
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9pY3UvdW5pY29kZS91cmVnZXguaCBiL1NvdXJjZS9X
VEYvaWN1L3VuaWNvZGUvdXJlZ2V4LmgKaW5kZXggZjNlODIxNDk0NDQ5OTFkMjk5MjEwOTkwNmRj
NDc1YTA1ODQzNzllYS4uMTMxYzQ5MmE1NWFjZDM3MjUxOTk1MDIxZGJhNDU0MjYyNjdiMDljMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi9pY3UvdW5pY29kZS91cmVnZXguaAorKysgYi9Tb3VyY2Uv
V1RGL2ljdS91bmljb2RlL3VyZWdleC5oCkBAIC0xNjcsNiArMTY3LDcgQEAgdXJlZ2V4X29wZW5V
VGV4dChVVGV4dCAgICAgICAgICAqcGF0dGVybiwKICAgICAgICAgICAgICAgICAgVVBhcnNlRXJy
b3IgICAgKnBlLAogICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICAgICAqc3RhdHVzKTsKIAor
I2lmICFVQ09ORklHX05PX0NPTlZFUlNJT04KIC8qKgogICAqICBPcGVuIChjb21waWxlKSBhbiBJ
Q1UgcmVndWxhciBleHByZXNzaW9uLiAgVGhlIHJlc3VsdGluZyByZWd1bGFyIGV4cHJlc3Npb24K
ICAgKiAgIGhhbmRsZSBjYW4gdGhlbiBiZSB1c2VkIHRvIHBlcmZvcm0gdmFyaW91cyBtYXRjaGlu
ZyBvcGVyYXRpb25zLgpAQCAtMTkwLDcgKzE5MSw2IEBAIHVyZWdleF9vcGVuVVRleHQoVVRleHQg
ICAgICAgICAgKnBhdHRlcm4sCiAgICoKICAgKiBAc3RhYmxlIElDVSAzLjAKICAgKi8KLSNpZiAh
VUNPTkZJR19OT19DT05WRVJTSU9OCiBVX1NUQUJMRSBVUmVndWxhckV4cHJlc3Npb24gKiBVX0VY
UE9SVDIKIHVyZWdleF9vcGVuQyggY29uc3QgY2hhciAgICAgICAgICAgKnBhdHRlcm4sCiAgICAg
ICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgICBmbGFncywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvaWN1L3VuaWNvZGUvdXJlbGRhdGVmbXQuaCBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUv
dXJlbGRhdGVmbXQuaAppbmRleCA2YjgxZmQ3ZjlkZGUyYjI2MGY2ZTdlNmQ1NTcwYWZmYTZlODQ1
ZDc1Li4wNzI0ZDM4NTU5NGZmMTM5ZTRiNjhmYzMxYzE0ZjQ5MGVkYjhjOGQ5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3VyZWxkYXRlZm10LmgKKysrIGIvU291cmNlL1dURi9p
Y3UvdW5pY29kZS91cmVsZGF0ZWZtdC5oCkBAIC0xLDM2NSArMSw1MTcgQEAKLS8vIMKpIDIwMTYg
YW5kIGxhdGVyOiBVbmljb2RlLCBJbmMuIGFuZCBvdGhlcnMuDQotLy8gTGljZW5zZSAmIHRlcm1z
IG9mIHVzZTogaHR0cDovL3d3dy51bmljb2RlLm9yZy9jb3B5cmlnaHQuaHRtbA0KLS8qDQotKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qIENvcHlyaWdodCAoQykgMjAxNiwgSW50
ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcw0KLSogQ29ycG9yYXRpb24gYW5kIG90aGVycy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0K
LSovDQotDQotI2lmbmRlZiBVUkVMREFURUZNVF9IDQotI2RlZmluZSBVUkVMREFURUZNVF9IDQot
DQotI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiDQotDQotI2lmICFVQ09ORklHX05PX0ZPUk1B
VFRJTkcgJiYgIVVDT05GSUdfTk9fQlJFQUtfSVRFUkFUSU9ODQotDQotI2luY2x1ZGUgInVuaWNv
ZGUvdW51bS5oIg0KLSNpbmNsdWRlICJ1bmljb2RlL3VkaXNwbGF5Y29udGV4dC5oIg0KLSNpbmNs
dWRlICJ1bmljb2RlL2xvY2FscG9pbnRlci5oIg0KLQ0KLS8qKg0KLSAqIFxmaWxlDQotICogXGJy
aWVmIEMgQVBJOiBVUmVsYXRpdmVEYXRlVGltZUZvcm1hdHRlciwgcmVsYXRpdmUgZGF0ZSBmb3Jt
YXR0aW5nIG9mIHVuaXQgKyBudW1lcmljIG9mZnNldC4NCi0gKg0KLSAqIFByb3ZpZGVzIHNpbXBs
ZSBmb3JtYXR0aW5nIG9mIHJlbGF0aXZlIGRhdGVzLCBpbiB0d28gd2F5cw0KLSAqIDx1bD4NCi0g
KiAgIDxsaT5yZWxhdGl2ZSBkYXRlcyB3aXRoIGEgcXVhbnRpdHkgZS5nICJpbiA1IGRheXMiPC9s
aT4NCi0gKiAgIDxsaT5yZWxhdGl2ZSBkYXRlcyB3aXRob3V0IGEgcXVhbnRpdHkgZS5nICJuZXh0
IFR1ZXNkYXkiPC9saT4NCi0gKiA8L3VsPg0KLSAqIDxwPg0KLSAqIFRoaXMgZG9lcyBub3QgcHJv
dmlkZSBjb21wb3VuZCBmb3JtYXR0aW5nIGZvciBtdWx0aXBsZSB1bml0cywNCi0gKiBvdGhlciB0
aGFuIHRoZSBhYmlsaXR5IHRvIGNvbWJpbmUgYSB0aW1lIHN0cmluZyB3aXRoIGEgcmVsYXRpdmUg
ZGF0ZSwNCi0gKiBhcyBpbiAibmV4dCBUdWVzZGF5IGF0IDM6NDUgUE0iLiBJdCBhbHNvIGRvZXMg
bm90IHByb3ZpZGUgc3VwcG9ydA0KLSAqIGZvciBkZXRlcm1pbmluZyB3aGljaCB1bml0IHRvIHVz
ZSwgc3VjaCBhcyBkZWNpZGluZyBiZXR3ZWVuICJpbiA3IGRheXMiDQotICogYW5kICJpbiAxIHdl
ZWsiLg0KLSAqDQotICogQHN0YWJsZSBJQ1UgNTcNCi0gKi8NCi0NCi0vKioNCi0gKiBUaGUgZm9y
bWF0dGluZyBzdHlsZQ0KLSAqIEBzdGFibGUgSUNVIDU0DQotICovDQotdHlwZWRlZiBlbnVtIFVE
YXRlUmVsYXRpdmVEYXRlVGltZUZvcm1hdHRlclN0eWxlIHsNCi0gIC8qKg0KLSAgICogRXZlcnl0
aGluZyBzcGVsbGVkIG91dC4NCi0gICAqIEBzdGFibGUgSUNVIDU0DQotICAgKi8NCi0gIFVEQVRf
U1RZTEVfTE9ORywNCi0NCi0gIC8qKg0KLSAgICogQWJicmV2aWF0aW9ucyB1c2VkIHdoZW4gcG9z
c2libGUuDQotICAgKiBAc3RhYmxlIElDVSA1NA0KLSAgICovDQotICBVREFUX1NUWUxFX1NIT1JU
LA0KLQ0KLSAgLyoqDQotICAgKiBVc2UgdGhlIHNob3J0ZXN0IHBvc3NpYmxlIGZvcm0uDQotICAg
KiBAc3RhYmxlIElDVSA1NA0KLSAgICovDQotICBVREFUX1NUWUxFX05BUlJPVywNCi0NCi0jaWZu
ZGVmIFVfSElERV9ERVBSRUNBVEVEX0FQSQ0KLSAgICAvKioNCi0gICAgICogT25lIG1vcmUgdGhh
biB0aGUgaGlnaGVzdCBub3JtYWwgVURhdGVSZWxhdGl2ZURhdGVUaW1lRm9ybWF0dGVyU3R5bGUg
dmFsdWUuDQotICAgICAqIEBkZXByZWNhdGVkIElDVSA1OCBUaGUgbnVtZXJpYyB2YWx1ZSBtYXkg
Y2hhbmdlIG92ZXIgdGltZSwgc2VlIElDVSB0aWNrZXQgIzEyNDIwLg0KLSAgICAgKi8NCi0gICAg
VURBVF9TVFlMRV9DT1VOVA0KLSNlbmRpZiAgLyogVV9ISURFX0RFUFJFQ0FURURfQVBJICovDQot
fSBVRGF0ZVJlbGF0aXZlRGF0ZVRpbWVGb3JtYXR0ZXJTdHlsZTsNCi0NCi0vKioNCi0gKiBSZXBy
ZXNlbnRzIHRoZSB1bml0IGZvciBmb3JtYXR0aW5nIGEgcmVsYXRpdmUgZGF0ZS4gZS5nICJpbiA1
IGRheXMiDQotICogb3IgIm5leHQgeWVhciINCi0gKiBAc3RhYmxlIElDVSA1Nw0KLSAqLw0KLXR5
cGVkZWYgZW51bSBVUmVsYXRpdmVEYXRlVGltZVVuaXQgew0KLSAgICAvKioNCi0gICAgICogU3Bl
Y2lmaWVzIHRoYXQgcmVsYXRpdmUgdW5pdCBpcyB5ZWFyLCBlLmcuICJsYXN0IHllYXIiLA0KLSAg
ICAgKiAiaW4gNSB5ZWFycyIuIA0KLSAgICAgKiBAc3RhYmxlIElDVSA1Nw0KLSAgICAgKi8NCi0g
ICAgVURBVF9SRUxfVU5JVF9ZRUFSLA0KLSAgICAvKioNCi0gICAgICogU3BlY2lmaWVzIHRoYXQg
cmVsYXRpdmUgdW5pdCBpcyBxdWFydGVyLCBlLmcuICJsYXN0IHF1YXJ0ZXIiLA0KLSAgICAgKiAi
aW4gNSBxdWFydGVycyIuDQotICAgICAqIEBzdGFibGUgSUNVIDU3DQotICAgICAqLw0KLSAgICBV
REFUX1JFTF9VTklUX1FVQVJURVIsDQotICAgIC8qKg0KLSAgICAgKiBTcGVjaWZpZXMgdGhhdCBy
ZWxhdGl2ZSB1bml0IGlzIG1vbnRoLCBlLmcuICJsYXN0IG1vbnRoIiwNCi0gICAgICogImluIDUg
bW9udGhzIi4NCi0gICAgICogQHN0YWJsZSBJQ1UgNTcNCi0gICAgICovDQotICAgIFVEQVRfUkVM
X1VOSVRfTU9OVEgsDQotICAgIC8qKg0KLSAgICAgKiBTcGVjaWZpZXMgdGhhdCByZWxhdGl2ZSB1
bml0IGlzIHdlZWssIGUuZy4gImxhc3Qgd2VlayIsDQotICAgICAqICJpbiA1IHdlZWtzIi4NCi0g
ICAgICogQHN0YWJsZSBJQ1UgNTcNCi0gICAgICovDQotICAgIFVEQVRfUkVMX1VOSVRfV0VFSywN
Ci0gICAgLyoqDQotICAgICAqIFNwZWNpZmllcyB0aGF0IHJlbGF0aXZlIHVuaXQgaXMgZGF5LCBl
LmcuICJ5ZXN0ZXJkYXkiLA0KLSAgICAgKiAiaW4gNSBkYXlzIi4NCi0gICAgICogQHN0YWJsZSBJ
Q1UgNTcNCi0gICAgICovDQotICAgIFVEQVRfUkVMX1VOSVRfREFZLA0KLSAgICAvKioNCi0gICAg
ICogU3BlY2lmaWVzIHRoYXQgcmVsYXRpdmUgdW5pdCBpcyBob3VyLCBlLmcuICIxIGhvdXIgYWdv
IiwNCi0gICAgICogImluIDUgaG91cnMiLg0KLSAgICAgKiBAc3RhYmxlIElDVSA1Nw0KLSAgICAg
Ki8NCi0gICAgVURBVF9SRUxfVU5JVF9IT1VSLA0KLSAgICAvKioNCi0gICAgICogU3BlY2lmaWVz
IHRoYXQgcmVsYXRpdmUgdW5pdCBpcyBtaW51dGUsIGUuZy4gIjEgbWludXRlIGFnbyIsDQotICAg
ICAqICJpbiA1IG1pbnV0ZXMiLg0KLSAgICAgKiBAc3RhYmxlIElDVSA1Nw0KLSAgICAgKi8NCi0g
ICAgVURBVF9SRUxfVU5JVF9NSU5VVEUsDQotICAgIC8qKg0KLSAgICAgKiBTcGVjaWZpZXMgdGhh
dCByZWxhdGl2ZSB1bml0IGlzIHNlY29uZCwgZS5nLiAiMSBzZWNvbmQgYWdvIiwNCi0gICAgICog
ImluIDUgc2Vjb25kcyIuDQotICAgICAqIEBzdGFibGUgSUNVIDU3DQotICAgICAqLw0KLSAgICBV
REFUX1JFTF9VTklUX1NFQ09ORCwNCi0gICAgLyoqDQotICAgICAqIFNwZWNpZmllcyB0aGF0IHJl
bGF0aXZlIHVuaXQgaXMgU3VuZGF5LCBlLmcuICJsYXN0IFN1bmRheSIsDQotICAgICAqICJ0aGlz
IFN1bmRheSIsICJuZXh0IFN1bmRheSIsICJpbiA1IFN1bmRheXMiLg0KLSAgICAgKiBAc3RhYmxl
IElDVSA1Nw0KLSAgICAgKi8NCi0gICAgVURBVF9SRUxfVU5JVF9TVU5EQVksDQotICAgIC8qKg0K
LSAgICAgKiBTcGVjaWZpZXMgdGhhdCByZWxhdGl2ZSB1bml0IGlzIE1vbmRheSwgZS5nLiAibGFz
dCBNb25kYXkiLA0KLSAgICAgKiAidGhpcyBNb25kYXkiLCAibmV4dCBNb25kYXkiLCAiaW4gNSBN
b25kYXlzIi4NCi0gICAgICogQHN0YWJsZSBJQ1UgNTcNCi0gICAgICovDQotICAgIFVEQVRfUkVM
X1VOSVRfTU9OREFZLA0KLSAgICAvKioNCi0gICAgICogU3BlY2lmaWVzIHRoYXQgcmVsYXRpdmUg
dW5pdCBpcyBUdWVzZGF5LCBlLmcuICJsYXN0IFR1ZXNkYXkiLA0KLSAgICAgKiAidGhpcyBUdWVz
ZGF5IiwgIm5leHQgVHVlc2RheSIsICJpbiA1IFR1ZXNkYXlzIi4NCi0gICAgICogQHN0YWJsZSBJ
Q1UgNTcNCi0gICAgICovDQotICAgIFVEQVRfUkVMX1VOSVRfVFVFU0RBWSwNCi0gICAgLyoqDQot
ICAgICAqIFNwZWNpZmllcyB0aGF0IHJlbGF0aXZlIHVuaXQgaXMgV2VkbmVzZGF5LCBlLmcuICJs
YXN0IFdlZG5lc2RheSIsDQotICAgICAqICJ0aGlzIFdlZG5lc2RheSIsICJuZXh0IFdlZG5lc2Rh
eSIsICJpbiA1IFdlZG5lc2RheXMiLg0KLSAgICAgKiBAc3RhYmxlIElDVSA1Nw0KLSAgICAgKi8N
Ci0gICAgVURBVF9SRUxfVU5JVF9XRURORVNEQVksDQotICAgIC8qKg0KLSAgICAgKiBTcGVjaWZp
ZXMgdGhhdCByZWxhdGl2ZSB1bml0IGlzIFRodXJzZGF5LCBlLmcuICJsYXN0IFRodXJzZGF5IiwN
Ci0gICAgICogInRoaXMgVGh1cnNkYXkiLCAibmV4dCBUaHVyc2RheSIsICJpbiA1IFRodXJzZGF5
cyIuIA0KLSAgICAgKiBAc3RhYmxlIElDVSA1Nw0KLSAgICAgKi8NCi0gICAgVURBVF9SRUxfVU5J
VF9USFVSU0RBWSwNCi0gICAgLyoqDQotICAgICAqIFNwZWNpZmllcyB0aGF0IHJlbGF0aXZlIHVu
aXQgaXMgRnJpZGF5LCBlLmcuICJsYXN0IEZyaWRheSIsDQotICAgICAqICJ0aGlzIEZyaWRheSIs
ICJuZXh0IEZyaWRheSIsICJpbiA1IEZyaWRheXMiLg0KLSAgICAgKiBAc3RhYmxlIElDVSA1Nw0K
LSAgICAgKi8NCi0gICAgVURBVF9SRUxfVU5JVF9GUklEQVksDQotICAgIC8qKg0KLSAgICAgKiBT
cGVjaWZpZXMgdGhhdCByZWxhdGl2ZSB1bml0IGlzIFNhdHVyZGF5LCBlLmcuICJsYXN0IFNhdHVy
ZGF5IiwNCi0gICAgICogInRoaXMgU2F0dXJkYXkiLCAibmV4dCBTYXR1cmRheSIsICJpbiA1IFNh
dHVyZGF5cyIuDQotICAgICAqIEBzdGFibGUgSUNVIDU3DQotICAgICAqLw0KLSAgICBVREFUX1JF
TF9VTklUX1NBVFVSREFZLA0KLSNpZm5kZWYgVV9ISURFX0RFUFJFQ0FURURfQVBJDQotICAgIC8q
Kg0KLSAgICAgKiBPbmUgbW9yZSB0aGFuIHRoZSBoaWdoZXN0IG5vcm1hbCBVUmVsYXRpdmVEYXRl
VGltZVVuaXQgdmFsdWUuDQotICAgICAqIEBkZXByZWNhdGVkIElDVSA1OCBUaGUgbnVtZXJpYyB2
YWx1ZSBtYXkgY2hhbmdlIG92ZXIgdGltZSwgc2VlIElDVSB0aWNrZXQgIzEyNDIwLg0KLSAgICAg
Ki8NCi0gICAgVURBVF9SRUxfVU5JVF9DT1VOVA0KLSNlbmRpZiAgLyogVV9ISURFX0RFUFJFQ0FU
RURfQVBJICovDQotfSBVUmVsYXRpdmVEYXRlVGltZVVuaXQ7DQotDQotLyoqDQotICogT3BhcXVl
IFVSZWxhdGl2ZURhdGVUaW1lRm9ybWF0dGVyIG9iamVjdCBmb3IgdXNlIGluIEMgcHJvZ3JhbXMu
DQotICogQHN0YWJsZSBJQ1UgNTcNCi0gKi8NCi1zdHJ1Y3QgVVJlbGF0aXZlRGF0ZVRpbWVGb3Jt
YXR0ZXI7DQotdHlwZWRlZiBzdHJ1Y3QgVVJlbGF0aXZlRGF0ZVRpbWVGb3JtYXR0ZXIgVVJlbGF0
aXZlRGF0ZVRpbWVGb3JtYXR0ZXI7ICAvKio8IEMgdHlwZWRlZiBmb3Igc3RydWN0IFVSZWxhdGl2
ZURhdGVUaW1lRm9ybWF0dGVyLiBAc3RhYmxlIElDVSA1NyAqLw0KLQ0KLQ0KLS8qKg0KLSAqIE9w
ZW4gYSBuZXcgVVJlbGF0aXZlRGF0ZVRpbWVGb3JtYXR0ZXIgb2JqZWN0IGZvciBhIGdpdmVuIGxv
Y2FsZSB1c2luZyB0aGUNCi0gKiBzcGVjaWZpZWQgd2lkdGggYW5kIGNhcGl0YWxpemF0aW9uQ29u
dGV4dCwgYWxvbmcgd2l0aCBhIG51bWJlciBmb3JtYXR0ZXINCi0gKiAoaWYgZGVzaXJlZCkgdG8g
b3ZlcnJpZGUgdGhlIGRlZmF1bHQgZm9ybWF0dGVyIHRoYXQgd291bGQgYmUgdXNlZCBmb3INCi0g
KiBkaXNwbGF5IG9mIG51bWVyaWMgZmllbGQgb2Zmc2V0cy4gVGhlIGRlZmF1bHQgZm9ybWF0dGVy
IHR5cGljYWxseSByb3VuZHMNCi0gKiB0b3dhcmQgMCBhbmQgaGFzIGEgbWluaW11bSBvZiAwIGZy
YWN0aW9uIGRpZ2l0cyBhbmQgYSBtYXhpbXVtIG9mIDMNCi0gKiBmcmFjdGlvbiBkaWdpdHMgKGku
ZS4gaXQgd2lsbCBzaG93IGFzIG1hbnkgZGVjaW1hbCBwbGFjZXMgYXMgbmVjZXNzYXJ5DQotICog
dXAgdG8gMywgd2l0aG91dCBzaG93aW5nIHRyYWlsaW5nIDBzKS4NCi0gKg0KLSAqIEBwYXJhbSBs
b2NhbGUNCi0gKiAgICAgICAgICBUaGUgbG9jYWxlDQotICogQHBhcmFtIG5mVG9BZG9wdA0KLSAq
ICAgICAgICAgIEEgbnVtYmVyIGZvcm1hdHRlciB0byBzZXQgZm9yIHRoaXMgVVJlbGF0aXZlRGF0
ZVRpbWVGb3JtYXR0ZXINCi0gKiAgICAgICAgICBvYmplY3QgKGluc3RlYWQgb2YgdGhlIGRlZmF1
bHQgZGVjaW1hbCBmb3JtYXR0ZXIpLiBPd25lcnNoaXAgb2YNCi0gKiAgICAgICAgICB0aGlzIFVO
dW1iZXJGb3JtYXQgb2JqZWN0IHdpbGwgcGFzcyB0byB0aGUgVVJlbGF0aXZlRGF0ZVRpbWVGb3Jt
YXR0ZXINCi0gKiAgICAgICAgICBvYmplY3QgKHRoZSBVUmVsYXRpdmVEYXRlVGltZUZvcm1hdHRl
ciBhZG9wdHMgdGhlIFVOdW1iZXJGb3JtYXQpLA0KLSAqICAgICAgICAgIHdoaWNoIGJlY29tZXMg
cmVzcG9uc2libGUgZm9yIGNsb3NpbmcgaXQuIElmIHRoZSBjYWxsZXIgd2lzaGVzIHRvDQotICog
ICAgICAgICAgcmV0YWluIG93bmVyc2hpcCBvZiB0aGUgVU51bWJlckZvcm1hdCBvYmplY3QsIHRo
ZSBjYWxsZXIgbXVzdCBjbG9uZQ0KLSAqICAgICAgICAgIGl0ICh3aXRoIHVudW1fY2xvbmUpIGFu
ZCBwYXNzIHRoZSBjbG9uZSB0byB1cmVsZGF0ZWZtdF9vcGVuLiBNYXkgYmUNCi0gKiAgICAgICAg
ICBOVUxMIHRvIHVzZSB0aGUgZGVmYXVsdCBkZWNpbWFsIGZvcm1hdHRlci4NCi0gKiBAcGFyYW0g
d2lkdGgNCi0gKiAgICAgICAgICBUaGUgd2lkdGggLSB3aWRlLCBzaG9ydCwgbmFycm93LCBldGMu
DQotICogQHBhcmFtIGNhcGl0YWxpemF0aW9uQ29udGV4dA0KLSAqICAgICAgICAgIEEgdmFsdWUg
ZnJvbSBVRGlzcGxheUNvbnRleHQgdGhhdCBwZXJ0YWlucyB0byBjYXBpdGFsaXphdGlvbiwgZS5n
Lg0KLSAqICAgICAgICAgIFVESVNQQ1RYX0NBUElUQUxJWkFUSU9OX0ZPUl9CRUdJTk5JTkdfT0Zf
U0VOVEVOQ0UuDQotICogQHBhcmFtIHN0YXR1cw0KLSAqICAgICAgICAgIEEgcG9pbnRlciB0byBh
IFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzLg0KLSAqIEByZXR1cm4NCi0gKiAgICAg
ICAgICBBIHBvaW50ZXIgdG8gYSBVUmVsYXRpdmVEYXRlVGltZUZvcm1hdHRlciBvYmplY3QgZm9y
IHRoZSBzcGVjaWZpZWQgbG9jYWxlLA0KLSAqICAgICAgICAgIG9yIE5VTEwgaWYgYW4gZXJyb3Ig
b2NjdXJyZWQuDQotICogQHN0YWJsZSBJQ1UgNTcNCi0gKi8NCi1VX1NUQUJMRSBVUmVsYXRpdmVE
YXRlVGltZUZvcm1hdHRlciogVV9FWFBPUlQyDQotdXJlbGRhdGVmbXRfb3BlbiggY29uc3QgY2hh
ciogICAgICAgICAgbG9jYWxlLA0KLSAgICAgICAgICAgICAgICAgIFVOdW1iZXJGb3JtYXQqICAg
ICAgIG5mVG9BZG9wdCwNCi0gICAgICAgICAgICAgICAgICBVRGF0ZVJlbGF0aXZlRGF0ZVRpbWVG
b3JtYXR0ZXJTdHlsZSB3aWR0aCwNCi0gICAgICAgICAgICAgICAgICBVRGlzcGxheUNvbnRleHQg
ICAgICBjYXBpdGFsaXphdGlvbkNvbnRleHQsDQotICAgICAgICAgICAgICAgICAgVUVycm9yQ29k
ZSogICAgICAgICAgc3RhdHVzICk7DQotDQotLyoqDQotICogQ2xvc2UgYSBVUmVsYXRpdmVEYXRl
VGltZUZvcm1hdHRlciBvYmplY3QuIE9uY2UgY2xvc2VkIGl0IG1heSBubyBsb25nZXIgYmUgdXNl
ZC4NCi0gKiBAcGFyYW0gcmVsZGF0ZWZtdA0KLSAqICAgICAgICAgICAgVGhlIFVSZWxhdGl2ZURh
dGVUaW1lRm9ybWF0dGVyIG9iamVjdCB0byBjbG9zZS4NCi0gKiBAc3RhYmxlIElDVSA1Nw0KLSAq
Lw0KLVVfU1RBQkxFIHZvaWQgVV9FWFBPUlQyDQotdXJlbGRhdGVmbXRfY2xvc2UoVVJlbGF0aXZl
RGF0ZVRpbWVGb3JtYXR0ZXIgKnJlbGRhdGVmbXQpOw0KLQ0KLSNpZiBVX1NIT1dfQ1BMVVNQTFVT
X0FQSQ0KLQ0KLVVfTkFNRVNQQUNFX0JFR0lODQotDQotLyoqDQotICogXGNsYXNzIExvY2FsVVJl
bGF0aXZlRGF0ZVRpbWVGb3JtYXR0ZXJQb2ludGVyDQotICogIlNtYXJ0IHBvaW50ZXIiIGNsYXNz
LCBjbG9zZXMgYSBVUmVsYXRpdmVEYXRlVGltZUZvcm1hdHRlciB2aWEgdXJlbGRhdGVmbXRfY2xv
c2UoKS4NCi0gKiBGb3IgbW9zdCBtZXRob2RzIHNlZSB0aGUgTG9jYWxQb2ludGVyQmFzZSBiYXNl
IGNsYXNzLg0KLSAqDQotICogQHNlZSBMb2NhbFBvaW50ZXJCYXNlDQotICogQHNlZSBMb2NhbFBv
aW50ZXINCi0gKiBAc3RhYmxlIElDVSA1Nw0KLSAqLw0KLVVfREVGSU5FX0xPQ0FMX09QRU5fUE9J
TlRFUihMb2NhbFVSZWxhdGl2ZURhdGVUaW1lRm9ybWF0dGVyUG9pbnRlciwgVVJlbGF0aXZlRGF0
ZVRpbWVGb3JtYXR0ZXIsIHVyZWxkYXRlZm10X2Nsb3NlKTsNCi0NCi1VX05BTUVTUEFDRV9FTkQN
Ci0NCi0jZW5kaWYNCi0NCi0vKioNCi0gKiBGb3JtYXQgYSBjb21iaW5hdGlvbiBvZiBVUmVsYXRp
dmVEYXRlVGltZVVuaXQgYW5kIG51bWVyaWMNCi0gKiBvZmZzZXQgdXNpbmcgYSBudW1lcmljIHN0
eWxlLCBlLmcuICIxIHdlZWsgYWdvIiwgImluIDEgd2VlayIsDQotICogIjUgd2Vla3MgYWdvIiwg
ImluIDUgd2Vla3MiLg0KLSAqDQotICogQHBhcmFtIHJlbGRhdGVmbXQNCi0gKiAgICAgICAgICBU
aGUgVVJlbGF0aXZlRGF0ZVRpbWVGb3JtYXR0ZXIgb2JqZWN0IHNwZWNpZnlpbmcgdGhlDQotICog
ICAgICAgICAgZm9ybWF0IGNvbnZlbnRpb25zLg0KLSAqIEBwYXJhbSBvZmZzZXQNCi0gKiAgICAg
ICAgICBUaGUgc2lnbmVkIG9mZnNldCBmb3IgdGhlIHNwZWNpZmllZCB1bml0LiBUaGlzIHdpbGwN
Ci0gKiAgICAgICAgICBiZSBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoaXMgb2JqZWN0J3MgVU51
bWJlckZvcm1hdA0KLSAqICAgICAgICAgIG9iamVjdC4NCi0gKiBAcGFyYW0gdW5pdA0KLSAqICAg
ICAgICAgIFRoZSB1bml0IHRvIHVzZSB3aGVuIGZvcm1hdHRpbmcgdGhlIHJlbGF0aXZlDQotICog
ICAgICAgICAgZGF0ZSwgZS5nLiBVREFUX1JFTF9VTklUX1dFRUssIFVEQVRfUkVMX1VOSVRfRlJJ
REFZLg0KLSAqIEBwYXJhbSByZXN1bHQNCi0gKiAgICAgICAgICBBIHBvaW50ZXIgdG8gYSBidWZm
ZXIgdG8gcmVjZWl2ZSB0aGUgZm9ybWF0dGVkIHJlc3VsdC4NCi0gKiBAcGFyYW0gcmVzdWx0Q2Fw
YWNpdHkNCi0gKiAgICAgICAgICBUaGUgbWF4aW11bSBzaXplIG9mIHJlc3VsdC4NCi0gKiBAcGFy
YW0gc3RhdHVzDQotICogICAgICAgICAgQSBwb2ludGVyIHRvIGEgVUVycm9yQ29kZSB0byByZWNl
aXZlIGFueSBlcnJvcnMuIEluDQotICogICAgICAgICAgY2FzZSBvZiBlcnJvciBzdGF0dXMsIHRo
ZSBjb250ZW50cyBvZiByZXN1bHQgYXJlDQotICogICAgICAgICAgdW5kZWZpbmVkLg0KLSAqIEBy
ZXR1cm4NCi0gKiAgICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBmb3JtYXR0ZWQgcmVzdWx0OyBt
YXkgYmUgZ3JlYXRlcg0KLSAqICAgICAgICAgIHRoYW4gcmVzdWx0Q2FwYWNpdHksIGluIHdoaWNo
IGNhc2UgYW4gZXJyb3IgaXMgcmV0dXJuZWQuDQotICogQHN0YWJsZSBJQ1UgNTcNCi0gKi8NCi1V
X1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMg0KLXVyZWxkYXRlZm10X2Zvcm1hdE51bWVyaWMoIGNv
bnN0IFVSZWxhdGl2ZURhdGVUaW1lRm9ybWF0dGVyKiByZWxkYXRlZm10LA0KLSAgICAgICAgICAg
ICAgICAgICAgZG91YmxlICAgICAgICAgICAgICAgIG9mZnNldCwNCi0gICAgICAgICAgICAgICAg
ICAgIFVSZWxhdGl2ZURhdGVUaW1lVW5pdCB1bml0LA0KLSAgICAgICAgICAgICAgICAgICAgVUNo
YXIqICAgICAgICAgICAgICAgIHJlc3VsdCwNCi0gICAgICAgICAgICAgICAgICAgIGludDMyX3Qg
ICAgICAgICAgICAgICByZXN1bHRDYXBhY2l0eSwNCi0gICAgICAgICAgICAgICAgICAgIFVFcnJv
ckNvZGUqICAgICAgICAgICBzdGF0dXMpOw0KLQ0KLS8qKg0KLSAqIEZvcm1hdCBhIGNvbWJpbmF0
aW9uIG9mIFVSZWxhdGl2ZURhdGVUaW1lVW5pdCBhbmQgbnVtZXJpYyBvZmZzZXQNCi0gKiB1c2lu
ZyBhIHRleHQgc3R5bGUgaWYgcG9zc2libGUsIGUuZy4gImxhc3Qgd2VlayIsICJ0aGlzIHdlZWsi
LA0KLSAqICJuZXh0IHdlZWsiLCAieWVzdGVyZGF5IiwgInRvbW9ycm93Ii4gRmFsbHMgYmFjayB0
byBudW1lcmljDQotICogc3R5bGUgaWYgbm8gYXBwcm9wcmlhdGUgdGV4dCB0ZXJtIGlzIGF2YWls
YWJsZSBmb3IgdGhlIHNwZWNpZmllZA0KLSAqIG9mZnNldCBpbiB0aGUgb2JqZWN0J3MgbG9jYWxl
Lg0KLSAqDQotICogQHBhcmFtIHJlbGRhdGVmbXQNCi0gKiAgICAgICAgICBUaGUgVVJlbGF0aXZl
RGF0ZVRpbWVGb3JtYXR0ZXIgb2JqZWN0IHNwZWNpZnlpbmcgdGhlDQotICogICAgICAgICAgZm9y
bWF0IGNvbnZlbnRpb25zLg0KLSAqIEBwYXJhbSBvZmZzZXQNCi0gKiAgICAgICAgICBUaGUgc2ln
bmVkIG9mZnNldCBmb3IgdGhlIHNwZWNpZmllZCB1bml0Lg0KLSAqIEBwYXJhbSB1bml0DQotICog
ICAgICAgICAgVGhlIHVuaXQgdG8gdXNlIHdoZW4gZm9ybWF0dGluZyB0aGUgcmVsYXRpdmUNCi0g
KiAgICAgICAgICBkYXRlLCBlLmcuIFVEQVRfUkVMX1VOSVRfV0VFSywgVURBVF9SRUxfVU5JVF9G
UklEQVkuDQotICogQHBhcmFtIHJlc3VsdA0KLSAqICAgICAgICAgIEEgcG9pbnRlciB0byBhIGJ1
ZmZlciB0byByZWNlaXZlIHRoZSBmb3JtYXR0ZWQgcmVzdWx0Lg0KLSAqIEBwYXJhbSByZXN1bHRD
YXBhY2l0eQ0KLSAqICAgICAgICAgIFRoZSBtYXhpbXVtIHNpemUgb2YgcmVzdWx0Lg0KLSAqIEBw
YXJhbSBzdGF0dXMNCi0gKiAgICAgICAgICBBIHBvaW50ZXIgdG8gYSBVRXJyb3JDb2RlIHRvIHJl
Y2VpdmUgYW55IGVycm9ycy4gSW4NCi0gKiAgICAgICAgICBjYXNlIG9mIGVycm9yIHN0YXR1cywg
dGhlIGNvbnRlbnRzIG9mIHJlc3VsdCBhcmUNCi0gKiAgICAgICAgICB1bmRlZmluZWQuDQotICog
QHJldHVybg0KLSAqICAgICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGZvcm1hdHRlZCByZXN1bHQ7
IG1heSBiZSBncmVhdGVyDQotICogICAgICAgICAgdGhhbiByZXN1bHRDYXBhY2l0eSwgaW4gd2hp
Y2ggY2FzZSBhbiBlcnJvciBpcyByZXR1cm5lZC4NCi0gKiBAc3RhYmxlIElDVSA1Nw0KLSAqLw0K
LVVfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyDQotdXJlbGRhdGVmbXRfZm9ybWF0KCBjb25zdCBV
UmVsYXRpdmVEYXRlVGltZUZvcm1hdHRlciogcmVsZGF0ZWZtdCwNCi0gICAgICAgICAgICAgICAg
ICAgIGRvdWJsZSAgICAgICAgICAgICAgICBvZmZzZXQsDQotICAgICAgICAgICAgICAgICAgICBV
UmVsYXRpdmVEYXRlVGltZVVuaXQgdW5pdCwNCi0gICAgICAgICAgICAgICAgICAgIFVDaGFyKiAg
ICAgICAgICAgICAgICByZXN1bHQsDQotICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAg
ICAgICAgICAgcmVzdWx0Q2FwYWNpdHksDQotICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2Rl
KiAgICAgICAgICAgc3RhdHVzKTsNCi0NCi0vKioNCi0gKiBDb21iaW5lcyBhIHJlbGF0aXZlIGRh
dGUgc3RyaW5nIGFuZCBhIHRpbWUgc3RyaW5nIGluIHRoaXMgb2JqZWN0J3MNCi0gKiBsb2NhbGUu
IFRoaXMgaXMgZG9uZSB3aXRoIHRoZSBzYW1lIGRhdGUtdGltZSBzZXBhcmF0b3IgdXNlZCBmb3Ig
dGhlDQotICogZGVmYXVsdCBjYWxlbmRhciBpbiB0aGlzIGxvY2FsZSB0byBwcm9kdWNlIGEgcmVz
dWx0IHN1Y2ggYXMNCi0gKiAieWVzdGVyZGF5IGF0IDM6NDUgUE0iLg0KLSAqDQotICogQHBhcmFt
IHJlbGRhdGVmbXQNCi0gKiAgICAgICAgICBUaGUgVVJlbGF0aXZlRGF0ZVRpbWVGb3JtYXR0ZXIg
b2JqZWN0IHNwZWNpZnlpbmcgdGhlIGZvcm1hdCBjb252ZW50aW9ucy4NCi0gKiBAcGFyYW0gcmVs
YXRpdmVEYXRlU3RyaW5nDQotICogICAgICAgICAgVGhlIHJlbGF0aXZlIGRhdGUgc3RyaW5nLg0K
LSAqIEBwYXJhbSByZWxhdGl2ZURhdGVTdHJpbmdMZW4NCi0gKiAgICAgICAgICBUaGUgbGVuZ3Ro
IG9mIHJlbGF0aXZlRGF0ZVN0cmluZzsgbWF5IGJlIC0xIGlmIHJlbGF0aXZlRGF0ZVN0cmluZw0K
LSAqICAgICAgICAgIGlzIHplcm8tdGVybWluYXRlZC4NCi0gKiBAcGFyYW0gdGltZVN0cmluZw0K
LSAqICAgICAgICAgIFRoZSB0aW1lIHN0cmluZy4NCi0gKiBAcGFyYW0gdGltZVN0cmluZ0xlbg0K
LSAqICAgICAgICAgIFRoZSBsZW5ndGggb2YgdGltZVN0cmluZzsgbWF5IGJlIC0xIGlmIHRpbWVT
dHJpbmcgaXMgemVyby10ZXJtaW5hdGVkLg0KLSAqIEBwYXJhbSByZXN1bHQNCi0gKiAgICAgICAg
ICBBIHBvaW50ZXIgdG8gYSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgZm9ybWF0dGVkIHJlc3VsdC4N
Ci0gKiBAcGFyYW0gcmVzdWx0Q2FwYWNpdHkNCi0gKiAgICAgICAgICBUaGUgbWF4aW11bSBzaXpl
IG9mIHJlc3VsdC4NCi0gKiBAcGFyYW0gc3RhdHVzDQotICogICAgICAgICAgQSBwb2ludGVyIHRv
IGEgVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMuIEluIGNhc2Ugb2YgZXJyb3Igc3Rh
dHVzLA0KLSAqICAgICAgICAgIHRoZSBjb250ZW50cyBvZiByZXN1bHQgYXJlIHVuZGVmaW5lZC4N
Ci0gKiBAcmV0dXJuDQotICogICAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgZm9ybWF0dGVkIHJl
c3VsdDsgbWF5IGJlIGdyZWF0ZXIgdGhhbiByZXN1bHRDYXBhY2l0eSwNCi0gKiAgICAgICAgICBp
biB3aGljaCBjYXNlIGFuIGVycm9yIGlzIHJldHVybmVkLg0KLSAqIEBzdGFibGUgSUNVIDU3DQot
ICovDQotVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDINCi11cmVsZGF0ZWZtdF9jb21iaW5lRGF0
ZUFuZFRpbWUoIGNvbnN0IFVSZWxhdGl2ZURhdGVUaW1lRm9ybWF0dGVyKiByZWxkYXRlZm10LA0K
LSAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgKiAgICAgcmVsYXRpdmVEYXRlU3RyaW5n
LA0KLSAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgcmVsYXRpdmVEYXRlU3Ry
aW5nTGVuLA0KLSAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgKiAgICAgdGltZVN0cmlu
ZywNCi0gICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICAgIHRpbWVTdHJpbmdMZW4s
DQotICAgICAgICAgICAgICAgICAgICBVQ2hhciogICAgICAgICAgICByZXN1bHQsDQotICAgICAg
ICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICByZXN1bHRDYXBhY2l0eSwNCi0gICAgICAg
ICAgICAgICAgICAgIFVFcnJvckNvZGUqICAgICAgIHN0YXR1cyApOw0KLQ0KLSNlbmRpZiAvKiAh
VUNPTkZJR19OT19GT1JNQVRUSU5HICYmICFVQ09ORklHX05PX0JSRUFLX0lURVJBVElPTiAqLw0K
LQ0KLSNlbmRpZg0KKy8vIMKpIDIwMTYgYW5kIGxhdGVyOiBVbmljb2RlLCBJbmMuIGFuZCBvdGhl
cnMuCisvLyBMaWNlbnNlICYgdGVybXMgb2YgdXNlOiBodHRwOi8vd3d3LnVuaWNvZGUub3JnL2Nv
cHlyaWdodC5odG1sCisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29w
eXJpZ2h0IChDKSAyMDE2LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqIENvcnBv
cmF0aW9uIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKgorKi8KKworI2lmbmRlZiBVUkVMREFURUZNVF9ICisjZGVmaW5lIFVS
RUxEQVRFRk1UX0gKKworI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCisKKyNpZiAhVUNPTkZJ
R19OT19GT1JNQVRUSU5HICYmICFVQ09ORklHX05PX0JSRUFLX0lURVJBVElPTgorCisjaW5jbHVk
ZSAidW5pY29kZS91bnVtLmgiCisjaW5jbHVkZSAidW5pY29kZS91ZGlzcGxheWNvbnRleHQuaCIK
KyNpbmNsdWRlICJ1bmljb2RlL2xvY2FscG9pbnRlci5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWZv
cm1hdHRlZHZhbHVlLmgiCisKKy8qKgorICogXGZpbGUKKyAqIFxicmllZiBDIEFQSTogVVJlbGF0
aXZlRGF0ZVRpbWVGb3JtYXR0ZXIsIHJlbGF0aXZlIGRhdGUgZm9ybWF0dGluZyBvZiB1bml0ICsg
bnVtZXJpYyBvZmZzZXQuCisgKgorICogUHJvdmlkZXMgc2ltcGxlIGZvcm1hdHRpbmcgb2YgcmVs
YXRpdmUgZGF0ZXMsIGluIHR3byB3YXlzCisgKiA8dWw+CisgKiAgIDxsaT5yZWxhdGl2ZSBkYXRl
cyB3aXRoIGEgcXVhbnRpdHkgZS5nICJpbiA1IGRheXMiPC9saT4KKyAqICAgPGxpPnJlbGF0aXZl
IGRhdGVzIHdpdGhvdXQgYSBxdWFudGl0eSBlLmcgIm5leHQgVHVlc2RheSI8L2xpPgorICogPC91
bD4KKyAqIDxwPgorICogVGhpcyBkb2VzIG5vdCBwcm92aWRlIGNvbXBvdW5kIGZvcm1hdHRpbmcg
Zm9yIG11bHRpcGxlIHVuaXRzLAorICogb3RoZXIgdGhhbiB0aGUgYWJpbGl0eSB0byBjb21iaW5l
IGEgdGltZSBzdHJpbmcgd2l0aCBhIHJlbGF0aXZlIGRhdGUsCisgKiBhcyBpbiAibmV4dCBUdWVz
ZGF5IGF0IDM6NDUgUE0iLiBJdCBhbHNvIGRvZXMgbm90IHByb3ZpZGUgc3VwcG9ydAorICogZm9y
IGRldGVybWluaW5nIHdoaWNoIHVuaXQgdG8gdXNlLCBzdWNoIGFzIGRlY2lkaW5nIGJldHdlZW4g
ImluIDcgZGF5cyIKKyAqIGFuZCAiaW4gMSB3ZWVrIi4KKyAqCisgKiBAc3RhYmxlIElDVSA1Nwor
ICovCisKKy8qKgorICogVGhlIGZvcm1hdHRpbmcgc3R5bGUKKyAqIEBzdGFibGUgSUNVIDU0Cisg
Ki8KK3R5cGVkZWYgZW51bSBVRGF0ZVJlbGF0aXZlRGF0ZVRpbWVGb3JtYXR0ZXJTdHlsZSB7Cisg
IC8qKgorICAgKiBFdmVyeXRoaW5nIHNwZWxsZWQgb3V0LgorICAgKiBAc3RhYmxlIElDVSA1NAor
ICAgKi8KKyAgVURBVF9TVFlMRV9MT05HLAorCisgIC8qKgorICAgKiBBYmJyZXZpYXRpb25zIHVz
ZWQgd2hlbiBwb3NzaWJsZS4KKyAgICogQHN0YWJsZSBJQ1UgNTQKKyAgICovCisgIFVEQVRfU1RZ
TEVfU0hPUlQsCisKKyAgLyoqCisgICAqIFVzZSB0aGUgc2hvcnRlc3QgcG9zc2libGUgZm9ybS4K
KyAgICogQHN0YWJsZSBJQ1UgNTQKKyAgICovCisgIFVEQVRfU1RZTEVfTkFSUk9XLAorCisjaWZu
ZGVmIFVfSElERV9ERVBSRUNBVEVEX0FQSQorICAgIC8qKgorICAgICAqIE9uZSBtb3JlIHRoYW4g
dGhlIGhpZ2hlc3Qgbm9ybWFsIFVEYXRlUmVsYXRpdmVEYXRlVGltZUZvcm1hdHRlclN0eWxlIHZh
bHVlLgorICAgICAqIEBkZXByZWNhdGVkIElDVSA1OCBUaGUgbnVtZXJpYyB2YWx1ZSBtYXkgY2hh
bmdlIG92ZXIgdGltZSwgc2VlIElDVSB0aWNrZXQgIzEyNDIwLgorICAgICAqLworICAgIFVEQVRf
U1RZTEVfQ09VTlQKKyNlbmRpZiAgLyogVV9ISURFX0RFUFJFQ0FURURfQVBJICovCit9IFVEYXRl
UmVsYXRpdmVEYXRlVGltZUZvcm1hdHRlclN0eWxlOworCisvKioKKyAqIFJlcHJlc2VudHMgdGhl
IHVuaXQgZm9yIGZvcm1hdHRpbmcgYSByZWxhdGl2ZSBkYXRlLiBlLmcgImluIDUgZGF5cyIKKyAq
IG9yICJuZXh0IHllYXIiCisgKiBAc3RhYmxlIElDVSA1NworICovCit0eXBlZGVmIGVudW0gVVJl
bGF0aXZlRGF0ZVRpbWVVbml0IHsKKyAgICAvKioKKyAgICAgKiBTcGVjaWZpZXMgdGhhdCByZWxh
dGl2ZSB1bml0IGlzIHllYXIsIGUuZy4gImxhc3QgeWVhciIsCisgICAgICogImluIDUgeWVhcnMi
LiAKKyAgICAgKiBAc3RhYmxlIElDVSA1NworICAgICAqLworICAgIFVEQVRfUkVMX1VOSVRfWUVB
UiwKKyAgICAvKioKKyAgICAgKiBTcGVjaWZpZXMgdGhhdCByZWxhdGl2ZSB1bml0IGlzIHF1YXJ0
ZXIsIGUuZy4gImxhc3QgcXVhcnRlciIsCisgICAgICogImluIDUgcXVhcnRlcnMiLgorICAgICAq
IEBzdGFibGUgSUNVIDU3CisgICAgICovCisgICAgVURBVF9SRUxfVU5JVF9RVUFSVEVSLAorICAg
IC8qKgorICAgICAqIFNwZWNpZmllcyB0aGF0IHJlbGF0aXZlIHVuaXQgaXMgbW9udGgsIGUuZy4g
Imxhc3QgbW9udGgiLAorICAgICAqICJpbiA1IG1vbnRocyIuCisgICAgICogQHN0YWJsZSBJQ1Ug
NTcKKyAgICAgKi8KKyAgICBVREFUX1JFTF9VTklUX01PTlRILAorICAgIC8qKgorICAgICAqIFNw
ZWNpZmllcyB0aGF0IHJlbGF0aXZlIHVuaXQgaXMgd2VlaywgZS5nLiAibGFzdCB3ZWVrIiwKKyAg
ICAgKiAiaW4gNSB3ZWVrcyIuCisgICAgICogQHN0YWJsZSBJQ1UgNTcKKyAgICAgKi8KKyAgICBV
REFUX1JFTF9VTklUX1dFRUssCisgICAgLyoqCisgICAgICogU3BlY2lmaWVzIHRoYXQgcmVsYXRp
dmUgdW5pdCBpcyBkYXksIGUuZy4gInllc3RlcmRheSIsCisgICAgICogImluIDUgZGF5cyIuCisg
ICAgICogQHN0YWJsZSBJQ1UgNTcKKyAgICAgKi8KKyAgICBVREFUX1JFTF9VTklUX0RBWSwKKyAg
ICAvKioKKyAgICAgKiBTcGVjaWZpZXMgdGhhdCByZWxhdGl2ZSB1bml0IGlzIGhvdXIsIGUuZy4g
IjEgaG91ciBhZ28iLAorICAgICAqICJpbiA1IGhvdXJzIi4KKyAgICAgKiBAc3RhYmxlIElDVSA1
NworICAgICAqLworICAgIFVEQVRfUkVMX1VOSVRfSE9VUiwKKyAgICAvKioKKyAgICAgKiBTcGVj
aWZpZXMgdGhhdCByZWxhdGl2ZSB1bml0IGlzIG1pbnV0ZSwgZS5nLiAiMSBtaW51dGUgYWdvIiwK
KyAgICAgKiAiaW4gNSBtaW51dGVzIi4KKyAgICAgKiBAc3RhYmxlIElDVSA1NworICAgICAqLwor
ICAgIFVEQVRfUkVMX1VOSVRfTUlOVVRFLAorICAgIC8qKgorICAgICAqIFNwZWNpZmllcyB0aGF0
IHJlbGF0aXZlIHVuaXQgaXMgc2Vjb25kLCBlLmcuICIxIHNlY29uZCBhZ28iLAorICAgICAqICJp
biA1IHNlY29uZHMiLgorICAgICAqIEBzdGFibGUgSUNVIDU3CisgICAgICovCisgICAgVURBVF9S
RUxfVU5JVF9TRUNPTkQsCisgICAgLyoqCisgICAgICogU3BlY2lmaWVzIHRoYXQgcmVsYXRpdmUg
dW5pdCBpcyBTdW5kYXksIGUuZy4gImxhc3QgU3VuZGF5IiwKKyAgICAgKiAidGhpcyBTdW5kYXki
LCAibmV4dCBTdW5kYXkiLCAiaW4gNSBTdW5kYXlzIi4KKyAgICAgKiBAc3RhYmxlIElDVSA1Nwor
ICAgICAqLworICAgIFVEQVRfUkVMX1VOSVRfU1VOREFZLAorICAgIC8qKgorICAgICAqIFNwZWNp
ZmllcyB0aGF0IHJlbGF0aXZlIHVuaXQgaXMgTW9uZGF5LCBlLmcuICJsYXN0IE1vbmRheSIsCisg
ICAgICogInRoaXMgTW9uZGF5IiwgIm5leHQgTW9uZGF5IiwgImluIDUgTW9uZGF5cyIuCisgICAg
ICogQHN0YWJsZSBJQ1UgNTcKKyAgICAgKi8KKyAgICBVREFUX1JFTF9VTklUX01PTkRBWSwKKyAg
ICAvKioKKyAgICAgKiBTcGVjaWZpZXMgdGhhdCByZWxhdGl2ZSB1bml0IGlzIFR1ZXNkYXksIGUu
Zy4gImxhc3QgVHVlc2RheSIsCisgICAgICogInRoaXMgVHVlc2RheSIsICJuZXh0IFR1ZXNkYXki
LCAiaW4gNSBUdWVzZGF5cyIuCisgICAgICogQHN0YWJsZSBJQ1UgNTcKKyAgICAgKi8KKyAgICBV
REFUX1JFTF9VTklUX1RVRVNEQVksCisgICAgLyoqCisgICAgICogU3BlY2lmaWVzIHRoYXQgcmVs
YXRpdmUgdW5pdCBpcyBXZWRuZXNkYXksIGUuZy4gImxhc3QgV2VkbmVzZGF5IiwKKyAgICAgKiAi
dGhpcyBXZWRuZXNkYXkiLCAibmV4dCBXZWRuZXNkYXkiLCAiaW4gNSBXZWRuZXNkYXlzIi4KKyAg
ICAgKiBAc3RhYmxlIElDVSA1NworICAgICAqLworICAgIFVEQVRfUkVMX1VOSVRfV0VETkVTREFZ
LAorICAgIC8qKgorICAgICAqIFNwZWNpZmllcyB0aGF0IHJlbGF0aXZlIHVuaXQgaXMgVGh1cnNk
YXksIGUuZy4gImxhc3QgVGh1cnNkYXkiLAorICAgICAqICJ0aGlzIFRodXJzZGF5IiwgIm5leHQg
VGh1cnNkYXkiLCAiaW4gNSBUaHVyc2RheXMiLiAKKyAgICAgKiBAc3RhYmxlIElDVSA1NworICAg
ICAqLworICAgIFVEQVRfUkVMX1VOSVRfVEhVUlNEQVksCisgICAgLyoqCisgICAgICogU3BlY2lm
aWVzIHRoYXQgcmVsYXRpdmUgdW5pdCBpcyBGcmlkYXksIGUuZy4gImxhc3QgRnJpZGF5IiwKKyAg
ICAgKiAidGhpcyBGcmlkYXkiLCAibmV4dCBGcmlkYXkiLCAiaW4gNSBGcmlkYXlzIi4KKyAgICAg
KiBAc3RhYmxlIElDVSA1NworICAgICAqLworICAgIFVEQVRfUkVMX1VOSVRfRlJJREFZLAorICAg
IC8qKgorICAgICAqIFNwZWNpZmllcyB0aGF0IHJlbGF0aXZlIHVuaXQgaXMgU2F0dXJkYXksIGUu
Zy4gImxhc3QgU2F0dXJkYXkiLAorICAgICAqICJ0aGlzIFNhdHVyZGF5IiwgIm5leHQgU2F0dXJk
YXkiLCAiaW4gNSBTYXR1cmRheXMiLgorICAgICAqIEBzdGFibGUgSUNVIDU3CisgICAgICovCisg
ICAgVURBVF9SRUxfVU5JVF9TQVRVUkRBWSwKKyNpZm5kZWYgVV9ISURFX0RFUFJFQ0FURURfQVBJ
CisgICAgLyoqCisgICAgICogT25lIG1vcmUgdGhhbiB0aGUgaGlnaGVzdCBub3JtYWwgVVJlbGF0
aXZlRGF0ZVRpbWVVbml0IHZhbHVlLgorICAgICAqIEBkZXByZWNhdGVkIElDVSA1OCBUaGUgbnVt
ZXJpYyB2YWx1ZSBtYXkgY2hhbmdlIG92ZXIgdGltZSwgc2VlIElDVSB0aWNrZXQgIzEyNDIwLgor
ICAgICAqLworICAgIFVEQVRfUkVMX1VOSVRfQ09VTlQKKyNlbmRpZiAgLyogVV9ISURFX0RFUFJF
Q0FURURfQVBJICovCit9IFVSZWxhdGl2ZURhdGVUaW1lVW5pdDsKKworI2lmbmRlZiBVX0hJREVf
RFJBRlRfQVBJCisvKioKKyAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVj
dG9ycyBmb3IgZm9ybWF0IGZpZWxkcworICogZGVmaW5lZCBieSBSZWxhdGl2ZURhdGVUaW1lRm9y
bWF0dGVyLgorICogQGRyYWZ0IElDVSA2NAorICovCit0eXBlZGVmIGVudW0gVVJlbGF0aXZlRGF0
ZVRpbWVGb3JtYXR0ZXJGaWVsZCB7CisgICAgLyoqCisgICAgICogUmVwcmVzZW50cyBhIGxpdGVy
YWwgdGV4dCBzdHJpbmcsIGxpa2UgInRvbW9ycm93IiBvciAiZGF5cyBhZ28iLgorICAgICAqIEBk
cmFmdCBJQ1UgNjQKKyAgICAgKi8KKyAgICBVREFUX1JFTF9MSVRFUkFMX0ZJRUxELAorICAgIC8q
KgorICAgICAqIFJlcHJlc2VudHMgYSBudW1iZXIgcXVhbnRpdHksIGxpa2UgIjMiIGluICIzIGRh
eXMgYWdvIi4KKyAgICAgKiBAZHJhZnQgSUNVIDY0CisgICAgICovCisgICAgVURBVF9SRUxfTlVN
RVJJQ19GSUVMRCwKK30gVVJlbGF0aXZlRGF0ZVRpbWVGb3JtYXR0ZXJGaWVsZDsKKyNlbmRpZiAv
LyBVX0hJREVfRFJBRlRfQVBJCisKKworLyoqCisgKiBPcGFxdWUgVVJlbGF0aXZlRGF0ZVRpbWVG
b3JtYXR0ZXIgb2JqZWN0IGZvciB1c2UgaW4gQyBwcm9ncmFtcy4KKyAqIEBzdGFibGUgSUNVIDU3
CisgKi8KK3N0cnVjdCBVUmVsYXRpdmVEYXRlVGltZUZvcm1hdHRlcjsKK3R5cGVkZWYgc3RydWN0
IFVSZWxhdGl2ZURhdGVUaW1lRm9ybWF0dGVyIFVSZWxhdGl2ZURhdGVUaW1lRm9ybWF0dGVyOyAg
LyoqPCBDIHR5cGVkZWYgZm9yIHN0cnVjdCBVUmVsYXRpdmVEYXRlVGltZUZvcm1hdHRlci4gQHN0
YWJsZSBJQ1UgNTcgKi8KKworCisvKioKKyAqIE9wZW4gYSBuZXcgVVJlbGF0aXZlRGF0ZVRpbWVG
b3JtYXR0ZXIgb2JqZWN0IGZvciBhIGdpdmVuIGxvY2FsZSB1c2luZyB0aGUKKyAqIHNwZWNpZmll
ZCB3aWR0aCBhbmQgY2FwaXRhbGl6YXRpb25Db250ZXh0LCBhbG9uZyB3aXRoIGEgbnVtYmVyIGZv
cm1hdHRlcgorICogKGlmIGRlc2lyZWQpIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGZvcm1hdHRl
ciB0aGF0IHdvdWxkIGJlIHVzZWQgZm9yCisgKiBkaXNwbGF5IG9mIG51bWVyaWMgZmllbGQgb2Zm
c2V0cy4gVGhlIGRlZmF1bHQgZm9ybWF0dGVyIHR5cGljYWxseSByb3VuZHMKKyAqIHRvd2FyZCAw
IGFuZCBoYXMgYSBtaW5pbXVtIG9mIDAgZnJhY3Rpb24gZGlnaXRzIGFuZCBhIG1heGltdW0gb2Yg
MworICogZnJhY3Rpb24gZGlnaXRzIChpLmUuIGl0IHdpbGwgc2hvdyBhcyBtYW55IGRlY2ltYWwg
cGxhY2VzIGFzIG5lY2Vzc2FyeQorICogdXAgdG8gMywgd2l0aG91dCBzaG93aW5nIHRyYWlsaW5n
IDBzKS4KKyAqCisgKiBAcGFyYW0gbG9jYWxlCisgKiAgICAgICAgICBUaGUgbG9jYWxlCisgKiBA
cGFyYW0gbmZUb0Fkb3B0CisgKiAgICAgICAgICBBIG51bWJlciBmb3JtYXR0ZXIgdG8gc2V0IGZv
ciB0aGlzIFVSZWxhdGl2ZURhdGVUaW1lRm9ybWF0dGVyCisgKiAgICAgICAgICBvYmplY3QgKGlu
c3RlYWQgb2YgdGhlIGRlZmF1bHQgZGVjaW1hbCBmb3JtYXR0ZXIpLiBPd25lcnNoaXAgb2YKKyAq
ICAgICAgICAgIHRoaXMgVU51bWJlckZvcm1hdCBvYmplY3Qgd2lsbCBwYXNzIHRvIHRoZSBVUmVs
YXRpdmVEYXRlVGltZUZvcm1hdHRlcgorICogICAgICAgICAgb2JqZWN0ICh0aGUgVVJlbGF0aXZl
RGF0ZVRpbWVGb3JtYXR0ZXIgYWRvcHRzIHRoZSBVTnVtYmVyRm9ybWF0KSwKKyAqICAgICAgICAg
IHdoaWNoIGJlY29tZXMgcmVzcG9uc2libGUgZm9yIGNsb3NpbmcgaXQuIElmIHRoZSBjYWxsZXIg
d2lzaGVzIHRvCisgKiAgICAgICAgICByZXRhaW4gb3duZXJzaGlwIG9mIHRoZSBVTnVtYmVyRm9y
bWF0IG9iamVjdCwgdGhlIGNhbGxlciBtdXN0IGNsb25lCisgKiAgICAgICAgICBpdCAod2l0aCB1
bnVtX2Nsb25lKSBhbmQgcGFzcyB0aGUgY2xvbmUgdG8gdXJlbGRhdGVmbXRfb3Blbi4gTWF5IGJl
CisgKiAgICAgICAgICBOVUxMIHRvIHVzZSB0aGUgZGVmYXVsdCBkZWNpbWFsIGZvcm1hdHRlci4K
KyAqIEBwYXJhbSB3aWR0aAorICogICAgICAgICAgVGhlIHdpZHRoIC0gd2lkZSwgc2hvcnQsIG5h
cnJvdywgZXRjLgorICogQHBhcmFtIGNhcGl0YWxpemF0aW9uQ29udGV4dAorICogICAgICAgICAg
QSB2YWx1ZSBmcm9tIFVEaXNwbGF5Q29udGV4dCB0aGF0IHBlcnRhaW5zIHRvIGNhcGl0YWxpemF0
aW9uLCBlLmcuCisgKiAgICAgICAgICBVRElTUENUWF9DQVBJVEFMSVpBVElPTl9GT1JfQkVHSU5O
SU5HX09GX1NFTlRFTkNFLgorICogQHBhcmFtIHN0YXR1cworICogICAgICAgICAgQSBwb2ludGVy
IHRvIGEgVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMuCisgKiBAcmV0dXJuCisgKiAg
ICAgICAgICBBIHBvaW50ZXIgdG8gYSBVUmVsYXRpdmVEYXRlVGltZUZvcm1hdHRlciBvYmplY3Qg
Zm9yIHRoZSBzcGVjaWZpZWQgbG9jYWxlLAorICogICAgICAgICAgb3IgTlVMTCBpZiBhbiBlcnJv
ciBvY2N1cnJlZC4KKyAqIEBzdGFibGUgSUNVIDU3CisgKi8KK1VfU1RBQkxFIFVSZWxhdGl2ZURh
dGVUaW1lRm9ybWF0dGVyKiBVX0VYUE9SVDIKK3VyZWxkYXRlZm10X29wZW4oIGNvbnN0IGNoYXIq
ICAgICAgICAgIGxvY2FsZSwKKyAgICAgICAgICAgICAgICAgIFVOdW1iZXJGb3JtYXQqICAgICAg
IG5mVG9BZG9wdCwKKyAgICAgICAgICAgICAgICAgIFVEYXRlUmVsYXRpdmVEYXRlVGltZUZvcm1h
dHRlclN0eWxlIHdpZHRoLAorICAgICAgICAgICAgICAgICAgVURpc3BsYXlDb250ZXh0ICAgICAg
Y2FwaXRhbGl6YXRpb25Db250ZXh0LAorICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSogICAg
ICAgICAgc3RhdHVzICk7CisKKy8qKgorICogQ2xvc2UgYSBVUmVsYXRpdmVEYXRlVGltZUZvcm1h
dHRlciBvYmplY3QuIE9uY2UgY2xvc2VkIGl0IG1heSBubyBsb25nZXIgYmUgdXNlZC4KKyAqIEBw
YXJhbSByZWxkYXRlZm10CisgKiAgICAgICAgICAgIFRoZSBVUmVsYXRpdmVEYXRlVGltZUZvcm1h
dHRlciBvYmplY3QgdG8gY2xvc2UuCisgKiBAc3RhYmxlIElDVSA1NworICovCitVX1NUQUJMRSB2
b2lkIFVfRVhQT1JUMgordXJlbGRhdGVmbXRfY2xvc2UoVVJlbGF0aXZlRGF0ZVRpbWVGb3JtYXR0
ZXIgKnJlbGRhdGVmbXQpOworCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKK3N0cnVjdCBVRm9y
bWF0dGVkUmVsYXRpdmVEYXRlVGltZTsKKy8qKgorICogT3BhcXVlIHN0cnVjdCB0byBjb250YWlu
IHRoZSByZXN1bHRzIG9mIGEgVVJlbGF0aXZlRGF0ZVRpbWVGb3JtYXR0ZXIgb3BlcmF0aW9uLgor
ICogQGRyYWZ0IElDVSA2NAorICovCit0eXBlZGVmIHN0cnVjdCBVRm9ybWF0dGVkUmVsYXRpdmVE
YXRlVGltZSBVRm9ybWF0dGVkUmVsYXRpdmVEYXRlVGltZTsKKworLyoqCisgKiBDcmVhdGVzIGFu
IG9iamVjdCB0byBob2xkIHRoZSByZXN1bHQgb2YgYSBVUmVsYXRpdmVEYXRlVGltZUZvcm1hdHRl
cgorICogb3BlcmF0aW9uLiBUaGUgb2JqZWN0IGNhbiBiZSB1c2VkIHJlcGVhdGVkbHk7IGl0IGlz
IGNsZWFyZWQgd2hlbmV2ZXIKKyAqIHBhc3NlZCB0byBhIGZvcm1hdCBmdW5jdGlvbi4KKyAqCisg
KiBAcGFyYW0gZWMgU2V0IGlmIGFuIGVycm9yIG9jY3Vycy4KKyAqIEByZXR1cm4gQSBwb2ludGVy
IG5lZWRpbmcgb3duZXJzaGlwLgorICogQGRyYWZ0IElDVSA2NAorICovCitVX0RSQUZUIFVGb3Jt
YXR0ZWRSZWxhdGl2ZURhdGVUaW1lKiBVX0VYUE9SVDIKK3VyZWxkYXRlZm10X29wZW5SZXN1bHQo
VUVycm9yQ29kZSogZWMpOworCisvKioKKyAqIFJldHVybnMgYSByZXByZXNlbnRhdGlvbiBvZiBh
IFVGb3JtYXR0ZWRSZWxhdGl2ZURhdGVUaW1lIGFzIGEgVUZvcm1hdHRlZFZhbHVlLAorICogd2hp
Y2ggY2FuIGJlIHN1YnNlcXVlbnRseSBwYXNzZWQgdG8gYW55IEFQSSByZXF1aXJpbmcgdGhhdCB0
eXBlLgorICoKKyAqIFRoZSByZXR1cm5lZCBvYmplY3QgaXMgb3duZWQgYnkgdGhlIFVGb3JtYXR0
ZWRSZWxhdGl2ZURhdGVUaW1lIGFuZCBpcyB2YWxpZAorICogb25seSBhcyBsb25nIGFzIHRoZSBV
Rm9ybWF0dGVkUmVsYXRpdmVEYXRlVGltZSBpcyBwcmVzZW50IGFuZCB1bmNoYW5nZWQgaW4gbWVt
b3J5LgorICoKKyAqIFlvdSBjYW4gdGhpbmsgb2YgdGhpcyBtZXRob2QgYXMgYSBjYXN0IGJldHdl
ZW4gdHlwZXMuCisgKgorICogQHBhcmFtIHVmcmR0IFRoZSBvYmplY3QgY29udGFpbmluZyB0aGUg
Zm9ybWF0dGVkIHN0cmluZy4KKyAqIEBwYXJhbSBlYyBTZXQgaWYgYW4gZXJyb3Igb2NjdXJzLgor
ICogQHJldHVybiBBIFVGb3JtYXR0ZWRWYWx1ZSBvd25lZCBieSB0aGUgaW5wdXQgb2JqZWN0Lgor
ICogQGRyYWZ0IElDVSA2NAorICovCitVX0RSQUZUIGNvbnN0IFVGb3JtYXR0ZWRWYWx1ZSogVV9F
WFBPUlQyCit1cmVsZGF0ZWZtdF9yZXN1bHRBc1ZhbHVlKGNvbnN0IFVGb3JtYXR0ZWRSZWxhdGl2
ZURhdGVUaW1lKiB1ZnJkdCwgVUVycm9yQ29kZSogZWMpOworCisvKioKKyAqIFJlbGVhc2VzIHRo
ZSBVRm9ybWF0dGVkUmVsYXRpdmVEYXRlVGltZSBjcmVhdGVkIGJ5IHVyZWxkYXRlZm10X29wZW5S
ZXN1bHQuCisgKgorICogQHBhcmFtIHVmcmR0IFRoZSBvYmplY3QgdG8gcmVsZWFzZS4KKyAqIEBk
cmFmdCBJQ1UgNjQKKyAqLworVV9EUkFGVCB2b2lkIFVfRVhQT1JUMgordXJlbGRhdGVmbXRfY2xv
c2VSZXN1bHQoVUZvcm1hdHRlZFJlbGF0aXZlRGF0ZVRpbWUqIHVmcmR0KTsKKyNlbmRpZiAgLyog
VV9ISURFX0RSQUZUX0FQSSAqLworCisKKyNpZiBVX1NIT1dfQ1BMVVNQTFVTX0FQSQorCitVX05B
TUVTUEFDRV9CRUdJTgorCisvKioKKyAqIFxjbGFzcyBMb2NhbFVSZWxhdGl2ZURhdGVUaW1lRm9y
bWF0dGVyUG9pbnRlcgorICogIlNtYXJ0IHBvaW50ZXIiIGNsYXNzLCBjbG9zZXMgYSBVUmVsYXRp
dmVEYXRlVGltZUZvcm1hdHRlciB2aWEgdXJlbGRhdGVmbXRfY2xvc2UoKS4KKyAqIEZvciBtb3N0
IG1ldGhvZHMgc2VlIHRoZSBMb2NhbFBvaW50ZXJCYXNlIGJhc2UgY2xhc3MuCisgKgorICogQHNl
ZSBMb2NhbFBvaW50ZXJCYXNlCisgKiBAc2VlIExvY2FsUG9pbnRlcgorICogQHN0YWJsZSBJQ1Ug
NTcKKyAqLworVV9ERUZJTkVfTE9DQUxfT1BFTl9QT0lOVEVSKExvY2FsVVJlbGF0aXZlRGF0ZVRp
bWVGb3JtYXR0ZXJQb2ludGVyLCBVUmVsYXRpdmVEYXRlVGltZUZvcm1hdHRlciwgdXJlbGRhdGVm
bXRfY2xvc2UpOworCisjaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKKy8qKgorICogXGNsYXNzIExv
Y2FsVUZvcm1hdHRlZFJlbGF0aXZlRGF0ZVRpbWVQb2ludGVyCisgKiAiU21hcnQgcG9pbnRlciIg
Y2xhc3MsIGNsb3NlcyBhIFVGb3JtYXR0ZWRSZWxhdGl2ZURhdGVUaW1lIHZpYSB1cmVsZGF0ZWZt
dF9jbG9zZVJlc3VsdCgpLgorICogRm9yIG1vc3QgbWV0aG9kcyBzZWUgdGhlIExvY2FsUG9pbnRl
ckJhc2UgYmFzZSBjbGFzcy4KKyAqCisgKiBAc2VlIExvY2FsUG9pbnRlckJhc2UKKyAqIEBzZWUg
TG9jYWxQb2ludGVyCisgKiBAZHJhZnQgSUNVIDY0CisgKi8KK1VfREVGSU5FX0xPQ0FMX09QRU5f
UE9JTlRFUihMb2NhbFVGb3JtYXR0ZWRSZWxhdGl2ZURhdGVUaW1lUG9pbnRlciwgVUZvcm1hdHRl
ZFJlbGF0aXZlRGF0ZVRpbWUsIHVyZWxkYXRlZm10X2Nsb3NlUmVzdWx0KTsKKyNlbmRpZiAgLyog
VV9ISURFX0RSQUZUX0FQSSAqLworCitVX05BTUVTUEFDRV9FTkQKKworI2VuZGlmCisKKy8qKgor
ICogRm9ybWF0IGEgY29tYmluYXRpb24gb2YgVVJlbGF0aXZlRGF0ZVRpbWVVbml0IGFuZCBudW1l
cmljCisgKiBvZmZzZXQgdXNpbmcgYSBudW1lcmljIHN0eWxlLCBlLmcuICIxIHdlZWsgYWdvIiwg
ImluIDEgd2VlayIsCisgKiAiNSB3ZWVrcyBhZ28iLCAiaW4gNSB3ZWVrcyIuCisgKgorICogQHBh
cmFtIHJlbGRhdGVmbXQKKyAqICAgICAgICAgIFRoZSBVUmVsYXRpdmVEYXRlVGltZUZvcm1hdHRl
ciBvYmplY3Qgc3BlY2lmeWluZyB0aGUKKyAqICAgICAgICAgIGZvcm1hdCBjb252ZW50aW9ucy4K
KyAqIEBwYXJhbSBvZmZzZXQKKyAqICAgICAgICAgIFRoZSBzaWduZWQgb2Zmc2V0IGZvciB0aGUg
c3BlY2lmaWVkIHVuaXQuIFRoaXMgd2lsbAorICogICAgICAgICAgYmUgZm9ybWF0dGVkIGFjY29y
ZGluZyB0byB0aGlzIG9iamVjdCdzIFVOdW1iZXJGb3JtYXQKKyAqICAgICAgICAgIG9iamVjdC4K
KyAqIEBwYXJhbSB1bml0CisgKiAgICAgICAgICBUaGUgdW5pdCB0byB1c2Ugd2hlbiBmb3JtYXR0
aW5nIHRoZSByZWxhdGl2ZQorICogICAgICAgICAgZGF0ZSwgZS5nLiBVREFUX1JFTF9VTklUX1dF
RUssIFVEQVRfUkVMX1VOSVRfRlJJREFZLgorICogQHBhcmFtIHJlc3VsdAorICogICAgICAgICAg
QSBwb2ludGVyIHRvIGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIGZvcm1hdHRlZCByZXN1bHQuCisg
KiBAcGFyYW0gcmVzdWx0Q2FwYWNpdHkKKyAqICAgICAgICAgIFRoZSBtYXhpbXVtIHNpemUgb2Yg
cmVzdWx0LgorICogQHBhcmFtIHN0YXR1cworICogICAgICAgICAgQSBwb2ludGVyIHRvIGEgVUVy
cm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMuIEluCisgKiAgICAgICAgICBjYXNlIG9mIGVy
cm9yIHN0YXR1cywgdGhlIGNvbnRlbnRzIG9mIHJlc3VsdCBhcmUKKyAqICAgICAgICAgIHVuZGVm
aW5lZC4KKyAqIEByZXR1cm4KKyAqICAgICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGZvcm1hdHRl
ZCByZXN1bHQ7IG1heSBiZSBncmVhdGVyCisgKiAgICAgICAgICB0aGFuIHJlc3VsdENhcGFjaXR5
LCBpbiB3aGljaCBjYXNlIGFuIGVycm9yIGlzIHJldHVybmVkLgorICogQHN0YWJsZSBJQ1UgNTcK
KyAqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIKK3VyZWxkYXRlZm10X2Zvcm1hdE51bWVy
aWMoIGNvbnN0IFVSZWxhdGl2ZURhdGVUaW1lRm9ybWF0dGVyKiByZWxkYXRlZm10LAorICAgICAg
ICAgICAgICAgICAgICBkb3VibGUgICAgICAgICAgICAgICAgb2Zmc2V0LAorICAgICAgICAgICAg
ICAgICAgICBVUmVsYXRpdmVEYXRlVGltZVVuaXQgdW5pdCwKKyAgICAgICAgICAgICAgICAgICAg
VUNoYXIqICAgICAgICAgICAgICAgIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgaW50MzJf
dCAgICAgICAgICAgICAgIHJlc3VsdENhcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICBVRXJy
b3JDb2RlKiAgICAgICAgICAgc3RhdHVzKTsKKworI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisv
KioKKyAqIEZvcm1hdCBhIGNvbWJpbmF0aW9uIG9mIFVSZWxhdGl2ZURhdGVUaW1lVW5pdCBhbmQg
bnVtZXJpYworICogb2Zmc2V0IHVzaW5nIGEgbnVtZXJpYyBzdHlsZSwgZS5nLiAiMSB3ZWVrIGFn
byIsICJpbiAxIHdlZWsiLAorICogIjUgd2Vla3MgYWdvIiwgImluIDUgd2Vla3MiLgorICoKKyAq
IEBwYXJhbSByZWxkYXRlZm10CisgKiAgICAgICAgICBUaGUgVVJlbGF0aXZlRGF0ZVRpbWVGb3Jt
YXR0ZXIgb2JqZWN0IHNwZWNpZnlpbmcgdGhlCisgKiAgICAgICAgICBmb3JtYXQgY29udmVudGlv
bnMuCisgKiBAcGFyYW0gb2Zmc2V0CisgKiAgICAgICAgICBUaGUgc2lnbmVkIG9mZnNldCBmb3Ig
dGhlIHNwZWNpZmllZCB1bml0LiBUaGlzIHdpbGwKKyAqICAgICAgICAgIGJlIGZvcm1hdHRlZCBh
Y2NvcmRpbmcgdG8gdGhpcyBvYmplY3QncyBVTnVtYmVyRm9ybWF0CisgKiAgICAgICAgICBvYmpl
Y3QuCisgKiBAcGFyYW0gdW5pdAorICogICAgICAgICAgVGhlIHVuaXQgdG8gdXNlIHdoZW4gZm9y
bWF0dGluZyB0aGUgcmVsYXRpdmUKKyAqICAgICAgICAgIGRhdGUsIGUuZy4gVURBVF9SRUxfVU5J
VF9XRUVLLCBVREFUX1JFTF9VTklUX0ZSSURBWS4KKyAqIEBwYXJhbSByZXN1bHQKKyAqICAgICAg
ICAgIEEgcG9pbnRlciB0byBhIFVGb3JtYXR0ZWRSZWxhdGl2ZURhdGVUaW1lIHRvIHBvcHVsYXRl
LgorICogQHBhcmFtIHN0YXR1cworICogICAgICAgICAgQSBwb2ludGVyIHRvIGEgVUVycm9yQ29k
ZSB0byByZWNlaXZlIGFueSBlcnJvcnMuIEluCisgKiAgICAgICAgICBjYXNlIG9mIGVycm9yIHN0
YXR1cywgdGhlIGNvbnRlbnRzIG9mIHJlc3VsdCBhcmUKKyAqICAgICAgICAgIHVuZGVmaW5lZC4K
KyAqIEBkcmFmdCBJQ1UgNjQKKyAqLworVV9EUkFGVCB2b2lkIFVfRVhQT1JUMgordXJlbGRhdGVm
bXRfZm9ybWF0TnVtZXJpY1RvUmVzdWx0KAorICAgIGNvbnN0IFVSZWxhdGl2ZURhdGVUaW1lRm9y
bWF0dGVyKiByZWxkYXRlZm10LAorICAgIGRvdWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvZmZzZXQsCisgICAgVVJlbGF0aXZlRGF0ZVRpbWVVbml0ICAgICAgICAgICAgIHVuaXQsCisg
ICAgVUZvcm1hdHRlZFJlbGF0aXZlRGF0ZVRpbWUqICAgICAgIHJlc3VsdCwKKyAgICBVRXJyb3JD
b2RlKiAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzKTsKKyNlbmRpZiAgLyogVV9ISURFX0RS
QUZUX0FQSSAqLworCisvKioKKyAqIEZvcm1hdCBhIGNvbWJpbmF0aW9uIG9mIFVSZWxhdGl2ZURh
dGVUaW1lVW5pdCBhbmQgbnVtZXJpYyBvZmZzZXQKKyAqIHVzaW5nIGEgdGV4dCBzdHlsZSBpZiBw
b3NzaWJsZSwgZS5nLiAibGFzdCB3ZWVrIiwgInRoaXMgd2VlayIsCisgKiAibmV4dCB3ZWVrIiwg
Inllc3RlcmRheSIsICJ0b21vcnJvdyIuIEZhbGxzIGJhY2sgdG8gbnVtZXJpYworICogc3R5bGUg
aWYgbm8gYXBwcm9wcmlhdGUgdGV4dCB0ZXJtIGlzIGF2YWlsYWJsZSBmb3IgdGhlIHNwZWNpZmll
ZAorICogb2Zmc2V0IGluIHRoZSBvYmplY3QncyBsb2NhbGUuCisgKgorICogQHBhcmFtIHJlbGRh
dGVmbXQKKyAqICAgICAgICAgIFRoZSBVUmVsYXRpdmVEYXRlVGltZUZvcm1hdHRlciBvYmplY3Qg
c3BlY2lmeWluZyB0aGUKKyAqICAgICAgICAgIGZvcm1hdCBjb252ZW50aW9ucy4KKyAqIEBwYXJh
bSBvZmZzZXQKKyAqICAgICAgICAgIFRoZSBzaWduZWQgb2Zmc2V0IGZvciB0aGUgc3BlY2lmaWVk
IHVuaXQuCisgKiBAcGFyYW0gdW5pdAorICogICAgICAgICAgVGhlIHVuaXQgdG8gdXNlIHdoZW4g
Zm9ybWF0dGluZyB0aGUgcmVsYXRpdmUKKyAqICAgICAgICAgIGRhdGUsIGUuZy4gVURBVF9SRUxf
VU5JVF9XRUVLLCBVREFUX1JFTF9VTklUX0ZSSURBWS4KKyAqIEBwYXJhbSByZXN1bHQKKyAqICAg
ICAgICAgIEEgcG9pbnRlciB0byBhIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBmb3JtYXR0ZWQgcmVz
dWx0LgorICogQHBhcmFtIHJlc3VsdENhcGFjaXR5CisgKiAgICAgICAgICBUaGUgbWF4aW11bSBz
aXplIG9mIHJlc3VsdC4KKyAqIEBwYXJhbSBzdGF0dXMKKyAqICAgICAgICAgIEEgcG9pbnRlciB0
byBhIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzLiBJbgorICogICAgICAgICAgY2Fz
ZSBvZiBlcnJvciBzdGF0dXMsIHRoZSBjb250ZW50cyBvZiByZXN1bHQgYXJlCisgKiAgICAgICAg
ICB1bmRlZmluZWQuCisgKiBAcmV0dXJuCisgKiAgICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBm
b3JtYXR0ZWQgcmVzdWx0OyBtYXkgYmUgZ3JlYXRlcgorICogICAgICAgICAgdGhhbiByZXN1bHRD
YXBhY2l0eSwgaW4gd2hpY2ggY2FzZSBhbiBlcnJvciBpcyByZXR1cm5lZC4KKyAqIEBzdGFibGUg
SUNVIDU3CisgKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyCit1cmVsZGF0ZWZtdF9mb3Jt
YXQoIGNvbnN0IFVSZWxhdGl2ZURhdGVUaW1lRm9ybWF0dGVyKiByZWxkYXRlZm10LAorICAgICAg
ICAgICAgICAgICAgICBkb3VibGUgICAgICAgICAgICAgICAgb2Zmc2V0LAorICAgICAgICAgICAg
ICAgICAgICBVUmVsYXRpdmVEYXRlVGltZVVuaXQgdW5pdCwKKyAgICAgICAgICAgICAgICAgICAg
VUNoYXIqICAgICAgICAgICAgICAgIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgaW50MzJf
dCAgICAgICAgICAgICAgIHJlc3VsdENhcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICBVRXJy
b3JDb2RlKiAgICAgICAgICAgc3RhdHVzKTsKKworI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCisv
KioKKyAqIEZvcm1hdCBhIGNvbWJpbmF0aW9uIG9mIFVSZWxhdGl2ZURhdGVUaW1lVW5pdCBhbmQg
bnVtZXJpYyBvZmZzZXQKKyAqIHVzaW5nIGEgdGV4dCBzdHlsZSBpZiBwb3NzaWJsZSwgZS5nLiAi
bGFzdCB3ZWVrIiwgInRoaXMgd2VlayIsCisgKiAibmV4dCB3ZWVrIiwgInllc3RlcmRheSIsICJ0
b21vcnJvdyIuIEZhbGxzIGJhY2sgdG8gbnVtZXJpYworICogc3R5bGUgaWYgbm8gYXBwcm9wcmlh
dGUgdGV4dCB0ZXJtIGlzIGF2YWlsYWJsZSBmb3IgdGhlIHNwZWNpZmllZAorICogb2Zmc2V0IGlu
IHRoZSBvYmplY3QncyBsb2NhbGUuCisgKgorICogVGhpcyBtZXRob2QgcG9wdWxhdGVzIGEgVUZv
cm1hdHRlZFJlbGF0aXZlRGF0ZVRpbWUsIHdoaWNoIGV4cG9zZXMgbW9yZQorICogaW5mb3JtYXRp
b24gdGhhbiB0aGUgc3RyaW5nIHBvcHVsYXRlZCBieSBmb3JtYXQoKS4KKyAqCisgKiBAcGFyYW0g
cmVsZGF0ZWZtdAorICogICAgICAgICAgVGhlIFVSZWxhdGl2ZURhdGVUaW1lRm9ybWF0dGVyIG9i
amVjdCBzcGVjaWZ5aW5nIHRoZQorICogICAgICAgICAgZm9ybWF0IGNvbnZlbnRpb25zLgorICog
QHBhcmFtIG9mZnNldAorICogICAgICAgICAgVGhlIHNpZ25lZCBvZmZzZXQgZm9yIHRoZSBzcGVj
aWZpZWQgdW5pdC4KKyAqIEBwYXJhbSB1bml0CisgKiAgICAgICAgICBUaGUgdW5pdCB0byB1c2Ug
d2hlbiBmb3JtYXR0aW5nIHRoZSByZWxhdGl2ZQorICogICAgICAgICAgZGF0ZSwgZS5nLiBVREFU
X1JFTF9VTklUX1dFRUssIFVEQVRfUkVMX1VOSVRfRlJJREFZLgorICogQHBhcmFtIHJlc3VsdAor
ICogICAgICAgICAgQSBwb2ludGVyIHRvIGEgVUZvcm1hdHRlZFJlbGF0aXZlRGF0ZVRpbWUgdG8g
cG9wdWxhdGUuCisgKiBAcGFyYW0gc3RhdHVzCisgKiAgICAgICAgICBBIHBvaW50ZXIgdG8gYSBV
RXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycy4gSW4KKyAqICAgICAgICAgIGNhc2Ugb2Yg
ZXJyb3Igc3RhdHVzLCB0aGUgY29udGVudHMgb2YgcmVzdWx0IGFyZQorICogICAgICAgICAgdW5k
ZWZpbmVkLgorICogQGRyYWZ0IElDVSA2NAorICovCitVX0RSQUZUIHZvaWQgVV9FWFBPUlQyCit1
cmVsZGF0ZWZtdF9mb3JtYXRUb1Jlc3VsdCgKKyAgICBjb25zdCBVUmVsYXRpdmVEYXRlVGltZUZv
cm1hdHRlciogcmVsZGF0ZWZtdCwKKyAgICBkb3VibGUgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb2Zmc2V0LAorICAgIFVSZWxhdGl2ZURhdGVUaW1lVW5pdCAgICAgICAgICAgICB1bml0LAor
ICAgIFVGb3JtYXR0ZWRSZWxhdGl2ZURhdGVUaW1lKiAgICAgICByZXN1bHQsCisgICAgVUVycm9y
Q29kZSogICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyk7CisjZW5kaWYgIC8qIFVfSElERV9E
UkFGVF9BUEkgKi8KKworLyoqCisgKiBDb21iaW5lcyBhIHJlbGF0aXZlIGRhdGUgc3RyaW5nIGFu
ZCBhIHRpbWUgc3RyaW5nIGluIHRoaXMgb2JqZWN0J3MKKyAqIGxvY2FsZS4gVGhpcyBpcyBkb25l
IHdpdGggdGhlIHNhbWUgZGF0ZS10aW1lIHNlcGFyYXRvciB1c2VkIGZvciB0aGUKKyAqIGRlZmF1
bHQgY2FsZW5kYXIgaW4gdGhpcyBsb2NhbGUgdG8gcHJvZHVjZSBhIHJlc3VsdCBzdWNoIGFzCisg
KiAieWVzdGVyZGF5IGF0IDM6NDUgUE0iLgorICoKKyAqIEBwYXJhbSByZWxkYXRlZm10CisgKiAg
ICAgICAgICBUaGUgVVJlbGF0aXZlRGF0ZVRpbWVGb3JtYXR0ZXIgb2JqZWN0IHNwZWNpZnlpbmcg
dGhlIGZvcm1hdCBjb252ZW50aW9ucy4KKyAqIEBwYXJhbSByZWxhdGl2ZURhdGVTdHJpbmcKKyAq
ICAgICAgICAgIFRoZSByZWxhdGl2ZSBkYXRlIHN0cmluZy4KKyAqIEBwYXJhbSByZWxhdGl2ZURh
dGVTdHJpbmdMZW4KKyAqICAgICAgICAgIFRoZSBsZW5ndGggb2YgcmVsYXRpdmVEYXRlU3RyaW5n
OyBtYXkgYmUgLTEgaWYgcmVsYXRpdmVEYXRlU3RyaW5nCisgKiAgICAgICAgICBpcyB6ZXJvLXRl
cm1pbmF0ZWQuCisgKiBAcGFyYW0gdGltZVN0cmluZworICogICAgICAgICAgVGhlIHRpbWUgc3Ry
aW5nLgorICogQHBhcmFtIHRpbWVTdHJpbmdMZW4KKyAqICAgICAgICAgIFRoZSBsZW5ndGggb2Yg
dGltZVN0cmluZzsgbWF5IGJlIC0xIGlmIHRpbWVTdHJpbmcgaXMgemVyby10ZXJtaW5hdGVkLgor
ICogQHBhcmFtIHJlc3VsdAorICogICAgICAgICAgQSBwb2ludGVyIHRvIGEgYnVmZmVyIHRvIHJl
Y2VpdmUgdGhlIGZvcm1hdHRlZCByZXN1bHQuCisgKiBAcGFyYW0gcmVzdWx0Q2FwYWNpdHkKKyAq
ICAgICAgICAgIFRoZSBtYXhpbXVtIHNpemUgb2YgcmVzdWx0LgorICogQHBhcmFtIHN0YXR1cwor
ICogICAgICAgICAgQSBwb2ludGVyIHRvIGEgVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJv
cnMuIEluIGNhc2Ugb2YgZXJyb3Igc3RhdHVzLAorICogICAgICAgICAgdGhlIGNvbnRlbnRzIG9m
IHJlc3VsdCBhcmUgdW5kZWZpbmVkLgorICogQHJldHVybgorICogICAgICAgICAgVGhlIGxlbmd0
aCBvZiB0aGUgZm9ybWF0dGVkIHJlc3VsdDsgbWF5IGJlIGdyZWF0ZXIgdGhhbiByZXN1bHRDYXBh
Y2l0eSwKKyAqICAgICAgICAgIGluIHdoaWNoIGNhc2UgYW4gZXJyb3IgaXMgcmV0dXJuZWQuCisg
KiBAc3RhYmxlIElDVSA1NworICovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMgordXJlbGRh
dGVmbXRfY29tYmluZURhdGVBbmRUaW1lKCBjb25zdCBVUmVsYXRpdmVEYXRlVGltZUZvcm1hdHRl
ciogcmVsZGF0ZWZtdCwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgKiAgICAgcmVs
YXRpdmVEYXRlU3RyaW5nLAorICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICBy
ZWxhdGl2ZURhdGVTdHJpbmdMZW4sCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICog
ICAgIHRpbWVTdHJpbmcsCisgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICAgIHRp
bWVTdHJpbmdMZW4sCisgICAgICAgICAgICAgICAgICAgIFVDaGFyKiAgICAgICAgICAgIHJlc3Vs
dCwKKyAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgcmVzdWx0Q2FwYWNpdHks
CisgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUqICAgICAgIHN0YXR1cyApOworCisjZW5k
aWYgLyogIVVDT05GSUdfTk9fRk9STUFUVElORyAmJiAhVUNPTkZJR19OT19CUkVBS19JVEVSQVRJ
T04gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3VyZW5h
bWUuaCBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdXJlbmFtZS5oCmluZGV4IDQxNzVlNTI3ZjQw
NGE3MGM1N2IzMmI0MWU2M2NlMGIxYTZhYTI2ZDguLmVhZjU2Yzk2MTRkN2YyZjg4NWU4ZWVhOTlj
YzMwYThjYzBjNjMzZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdXJlbmFt
ZS5oCisrKyBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdXJlbmFtZS5oCkBAIC0zMyw2ICszMyw5
IEBACiAKICNpZiAhVV9ESVNBQkxFX1JFTkFNSU5HCiAKKy8vIERpc2FibGUgUmVuYW1pbmcgZm9y
IFZpc3VhbCBTdHVkaW8ncyBJbnRlbGxpU2Vuc2UgZmVhdHVyZSwgc28gdGhhdCAnR28tdG8tRGVm
aW5pdGlvbicgKEYxMikgd2lsbCB3b3JrLgorI2lmICEoZGVmaW5lZChfTVNDX1ZFUikgJiYgZGVm
aW5lZChfX0lOVEVMTElTRU5TRV9fKSkKKwogLyogV2UgbmVlZCB0aGUgVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FIGRlZmluaXRpb24uIFRoZXJlJ3MgYSBkZWZhdWx0IG9uZSBpbiB1bmljb2RlL3V2
ZXJudW0uaCB3ZSBjYW4gdXNlLCBidXQgd2Ugd2lsbCBnaXZlCiAgICB0aGUgcGxhdGZvcm0gYSBj
aGFuY2UgdG8gZGVmaW5lIGl0IGZpcnN0LgogICAgTm9ybWFsbHkgKGlmIHV0eXBlcy5oIG9yIHVt
YWNoaW5lLmggd2FzIGluY2x1ZGVkIGZpcnN0KSB0aGlzIHdpbGwgbm90IGJlIG5lY2Vzc2FyeSBh
cyBpdCB3aWxsIGFscmVhZHkgYmUgZGVmaW5lZC4KQEAgLTEwNiwxMSArMTA5LDEzIEBACiAjZGVm
aW5lIF9VVEYzMkxFRGF0YSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUoX1VURjMyTEVEYXRhKQog
I2RlZmluZSBfVVRGN0RhdGEgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKF9VVEY3RGF0YSkKICNk
ZWZpbmUgX1VURjhEYXRhIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShfVVRGOERhdGEpCisjZGVm
aW5lIF9pc1VuaWNvZGVMb2NhbGVUeXBlU3VidGFnIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShf
aXNVbmljb2RlTG9jYWxlVHlwZVN1YnRhZykKICNkZWZpbmUgYWxsb3dlZEhvdXJGb3JtYXRzQ2xl
YW51cCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUoYWxsb3dlZEhvdXJGb3JtYXRzQ2xlYW51cCkK
ICNkZWZpbmUgY21lbW9yeV9jbGVhbnVwIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShjbWVtb3J5
X2NsZWFudXApCiAjZGVmaW5lIGRheVBlcmlvZFJ1bGVzQ2xlYW51cCBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUoZGF5UGVyaW9kUnVsZXNDbGVhbnVwKQogI2RlZmluZSBkZWxldGVBbGxvd2VkSG91
ckZvcm1hdHMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKGRlbGV0ZUFsbG93ZWRIb3VyRm9ybWF0
cykKICNkZWZpbmUgZ1RpbWVab25lRmlsZXNJbml0T25jZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUoZ1RpbWVab25lRmlsZXNJbml0T25jZSkKKyNkZWZpbmUgaW5pdE51bXN5c05hbWVzIFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRShpbml0TnVtc3lzTmFtZXMpCiAjZGVmaW5lIGl6cnVsZV9jbG9u
ZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUoaXpydWxlX2Nsb25lKQogI2RlZmluZSBpenJ1bGVf
Y2xvc2UgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKGl6cnVsZV9jbG9zZSkKICNkZWZpbmUgaXpy
dWxlX2VxdWFscyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUoaXpydWxlX2VxdWFscykKQEAgLTEy
OSw2ICsxMzQsNyBAQAogI2RlZmluZSBsb2NhbGVfZ2V0S2V5d29yZHNTdGFydCBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUobG9jYWxlX2dldEtleXdvcmRzU3RhcnQpCiAjZGVmaW5lIGxvY2FsZV9n
ZXRfZGVmYXVsdCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUobG9jYWxlX2dldF9kZWZhdWx0KQog
I2RlZmluZSBsb2NhbGVfc2V0X2RlZmF1bHQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKGxvY2Fs
ZV9zZXRfZGVmYXVsdCkKKyNkZWZpbmUgbnVtU3lzQ2xlYW51cCBVX0lDVV9FTlRSWV9QT0lOVF9S
RU5BTUUobnVtU3lzQ2xlYW51cCkKICNkZWZpbmUgcGxfYWRkRm9udFJ1biBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUocGxfYWRkRm9udFJ1bikKICNkZWZpbmUgcGxfYWRkTG9jYWxlUnVuIFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRShwbF9hZGRMb2NhbGVSdW4pCiAjZGVmaW5lIHBsX2FkZFZhbHVl
UnVuIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShwbF9hZGRWYWx1ZVJ1bikKQEAgLTI1MywxMiAr
MjU5LDE0IEBACiAjZGVmaW5lIHVfZnN0cm9wZW4gVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVf
ZnN0cm9wZW4pCiAjZGVmaW5lIHVfZnVuZ2V0YyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9m
dW5nZXRjKQogI2RlZmluZSB1X2dldEJpZGlQYWlyZWRCcmFja2V0IFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1X2dldEJpZGlQYWlyZWRCcmFja2V0KQorI2RlZmluZSB1X2dldEJpbmFyeVByb3Bl
cnR5U2V0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2dldEJpbmFyeVByb3BlcnR5U2V0KQog
I2RlZmluZSB1X2dldENvbWJpbmluZ0NsYXNzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2dl
dENvbWJpbmluZ0NsYXNzKQogI2RlZmluZSB1X2dldERhdGFEaXJlY3RvcnkgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVfZ2V0RGF0YURpcmVjdG9yeSkKICNkZWZpbmUgdV9nZXREYXRhVmVyc2lv
biBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9nZXREYXRhVmVyc2lvbikKICNkZWZpbmUgdV9n
ZXREZWZhdWx0Q29udmVydGVyIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2dldERlZmF1bHRD
b252ZXJ0ZXIpCiAjZGVmaW5lIHVfZ2V0RkNfTkZLQ19DbG9zdXJlIFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1X2dldEZDX05GS0NfQ2xvc3VyZSkKICNkZWZpbmUgdV9nZXRJU09Db21tZW50IFVf
SUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2dldElTT0NvbW1lbnQpCisjZGVmaW5lIHVfZ2V0SW50
UHJvcGVydHlNYXAgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfZ2V0SW50UHJvcGVydHlNYXAp
CiAjZGVmaW5lIHVfZ2V0SW50UHJvcGVydHlNYXhWYWx1ZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodV9nZXRJbnRQcm9wZXJ0eU1heFZhbHVlKQogI2RlZmluZSB1X2dldEludFByb3BlcnR5TWlu
VmFsdWUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfZ2V0SW50UHJvcGVydHlNaW5WYWx1ZSkK
ICNkZWZpbmUgdV9nZXRJbnRQcm9wZXJ0eVZhbHVlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
X2dldEludFByb3BlcnR5VmFsdWUpCkBAIC01NzcsNiArNTg1LDE4IEBACiAjZGVmaW5lIHVjYXNl
bWFwX3V0ZjhUb0xvd2VyIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y2FzZW1hcF91dGY4VG9M
b3dlcikKICNkZWZpbmUgdWNhc2VtYXBfdXRmOFRvVGl0bGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVO
QU1FKHVjYXNlbWFwX3V0ZjhUb1RpdGxlKQogI2RlZmluZSB1Y2FzZW1hcF91dGY4VG9VcHBlciBV
X0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNhc2VtYXBfdXRmOFRvVXBwZXIpCisjZGVmaW5lIHVj
ZnBvc19jbG9zZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNmcG9zX2Nsb3NlKQorI2RlZmlu
ZSB1Y2Zwb3NfY29uc3RyYWluQ2F0ZWdvcnkgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjZnBv
c19jb25zdHJhaW5DYXRlZ29yeSkKKyNkZWZpbmUgdWNmcG9zX2NvbnN0cmFpbkZpZWxkIFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1Y2Zwb3NfY29uc3RyYWluRmllbGQpCisjZGVmaW5lIHVjZnBv
c19nZXRDYXRlZ29yeSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNmcG9zX2dldENhdGVnb3J5
KQorI2RlZmluZSB1Y2Zwb3NfZ2V0RmllbGQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjZnBv
c19nZXRGaWVsZCkKKyNkZWZpbmUgdWNmcG9zX2dldEluZGV4ZXMgVV9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKHVjZnBvc19nZXRJbmRleGVzKQorI2RlZmluZSB1Y2Zwb3NfZ2V0SW50NjRJdGVyYXRp
b25Db250ZXh0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y2Zwb3NfZ2V0SW50NjRJdGVyYXRp
b25Db250ZXh0KQorI2RlZmluZSB1Y2Zwb3NfbWF0Y2hlc0ZpZWxkIFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1Y2Zwb3NfbWF0Y2hlc0ZpZWxkKQorI2RlZmluZSB1Y2Zwb3Nfb3BlbiBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUodWNmcG9zX29wZW4pCisjZGVmaW5lIHVjZnBvc19yZXNldCBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodWNmcG9zX3Jlc2V0KQorI2RlZmluZSB1Y2Zwb3Nfc2V0SW50
NjRJdGVyYXRpb25Db250ZXh0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y2Zwb3Nfc2V0SW50
NjRJdGVyYXRpb25Db250ZXh0KQorI2RlZmluZSB1Y2Zwb3Nfc2V0U3RhdGUgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVjZnBvc19zZXRTdGF0ZSkKICNkZWZpbmUgdWNoYXJfYWRkUHJvcGVydHlT
dGFydHMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjaGFyX2FkZFByb3BlcnR5U3RhcnRzKQog
I2RlZmluZSB1Y2hhcl9zd2FwTmFtZXMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjaGFyX3N3
YXBOYW1lcykKICNkZWZpbmUgdWNsbl9jbGVhbnVwT25lIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFN
RSh1Y2xuX2NsZWFudXBPbmUpCkBAIC03NjMsNiArNzgzLDIwIEBACiAjZGVmaW5lIHVjb2xfc3dh
cCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNvbF9zd2FwKQogI2RlZmluZSB1Y29sX3N3YXBJ
bnZlcnNlVUNBIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y29sX3N3YXBJbnZlcnNlVUNBKQog
I2RlZmluZSB1Y29sX3RlcnRpYXJ5T3JkZXIgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjb2xf
dGVydGlhcnlPcmRlcikKKyNkZWZpbmUgdWNwbWFwX2dldCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodWNwbWFwX2dldCkKKyNkZWZpbmUgdWNwbWFwX2dldFJhbmdlIFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1Y3BtYXBfZ2V0UmFuZ2UpCisjZGVmaW5lIHVjcHRyaWVfY2xvc2UgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHVjcHRyaWVfY2xvc2UpCisjZGVmaW5lIHVjcHRyaWVfZ2V0IFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1Y3B0cmllX2dldCkKKyNkZWZpbmUgdWNwdHJpZV9nZXRSYW5n
ZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNwdHJpZV9nZXRSYW5nZSkKKyNkZWZpbmUgdWNw
dHJpZV9nZXRUeXBlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y3B0cmllX2dldFR5cGUpCisj
ZGVmaW5lIHVjcHRyaWVfZ2V0VmFsdWVXaWR0aCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNw
dHJpZV9nZXRWYWx1ZVdpZHRoKQorI2RlZmluZSB1Y3B0cmllX2ludGVybmFsR2V0UmFuZ2UgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjcHRyaWVfaW50ZXJuYWxHZXRSYW5nZSkKKyNkZWZpbmUg
dWNwdHJpZV9pbnRlcm5hbFNtYWxsSW5kZXggVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjcHRy
aWVfaW50ZXJuYWxTbWFsbEluZGV4KQorI2RlZmluZSB1Y3B0cmllX2ludGVybmFsU21hbGxVOElu
ZGV4IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y3B0cmllX2ludGVybmFsU21hbGxVOEluZGV4
KQorI2RlZmluZSB1Y3B0cmllX2ludGVybmFsVThQcmV2SW5kZXggVV9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKHVjcHRyaWVfaW50ZXJuYWxVOFByZXZJbmRleCkKKyNkZWZpbmUgdWNwdHJpZV9vcGVu
RnJvbUJpbmFyeSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNwdHJpZV9vcGVuRnJvbUJpbmFy
eSkKKyNkZWZpbmUgdWNwdHJpZV9zd2FwIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y3B0cmll
X3N3YXApCisjZGVmaW5lIHVjcHRyaWVfdG9CaW5hcnkgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVjcHRyaWVfdG9CaW5hcnkpCiAjZGVmaW5lIHVjc2RldF9jbG9zZSBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUodWNzZGV0X2Nsb3NlKQogI2RlZmluZSB1Y3NkZXRfZGV0ZWN0IFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1Y3NkZXRfZGV0ZWN0KQogI2RlZmluZSB1Y3NkZXRfZGV0ZWN0QWxsIFVf
SUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y3NkZXRfZGV0ZWN0QWxsKQpAQCAtODc3LDggKzkxMSwx
MiBAQAogI2RlZmluZSB1ZGF0cGdfc2V0RGVjaW1hbCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dWRhdHBnX3NldERlY2ltYWwpCiAjZGVmaW5lIHVkaWN0X3N3YXAgVV9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKHVkaWN0X3N3YXApCiAjZGVmaW5lIHVkdGl0dmZtdF9jbG9zZSBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUodWR0aXR2Zm10X2Nsb3NlKQorI2RlZmluZSB1ZHRpdHZmbXRfY2xvc2VSZXN1
bHQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVkdGl0dmZtdF9jbG9zZVJlc3VsdCkKICNkZWZp
bmUgdWR0aXR2Zm10X2Zvcm1hdCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWR0aXR2Zm10X2Zv
cm1hdCkKKyNkZWZpbmUgdWR0aXR2Zm10X2Zvcm1hdFRvUmVzdWx0IFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1ZHRpdHZmbXRfZm9ybWF0VG9SZXN1bHQpCiAjZGVmaW5lIHVkdGl0dmZtdF9vcGVu
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1ZHRpdHZmbXRfb3BlbikKKyNkZWZpbmUgdWR0aXR2
Zm10X29wZW5SZXN1bHQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVkdGl0dmZtdF9vcGVuUmVz
dWx0KQorI2RlZmluZSB1ZHRpdHZmbXRfcmVzdWx0QXNWYWx1ZSBVX0lDVV9FTlRSWV9QT0lOVF9S
RU5BTUUodWR0aXR2Zm10X3Jlc3VsdEFzVmFsdWUpCiAjZGVmaW5lIHVlbnVtX2Nsb3NlIFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1ZW51bV9jbG9zZSkKICNkZWZpbmUgdWVudW1fY291bnQgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHVlbnVtX2NvdW50KQogI2RlZmluZSB1ZW51bV9uZXh0IFVf
SUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1ZW51bV9uZXh0KQpAQCAtOTE4LDYgKzk1Niw4IEBACiAj
ZGVmaW5lIHVmbXRfcHRvdSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWZtdF9wdG91KQogI2Rl
ZmluZSB1Zm10X3V0bzY0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Zm10X3V0bzY0KQogI2Rl
ZmluZSB1Zm10X3V0b3AgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVmbXRfdXRvcCkKKyNkZWZp
bmUgdWZtdHZhbF9nZXRTdHJpbmcgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVmbXR2YWxfZ2V0
U3RyaW5nKQorI2RlZmluZSB1Zm10dmFsX25leHRQb3NpdGlvbiBVX0lDVV9FTlRSWV9QT0lOVF9S
RU5BTUUodWZtdHZhbF9uZXh0UG9zaXRpb24pCiAjZGVmaW5lIHVnZW5kZXJfZ2V0SW5zdGFuY2Ug
VV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVnZW5kZXJfZ2V0SW5zdGFuY2UpCiAjZGVmaW5lIHVn
ZW5kZXJfZ2V0TGlzdEdlbmRlciBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWdlbmRlcl9nZXRM
aXN0R2VuZGVyKQogI2RlZmluZSB1aGFzaF9jbG9zZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dWhhc2hfY2xvc2UpCkBAIC0xMDIwLDggKzEwNjAsMTIgQEAKICNkZWZpbmUgdWxpc3RfcmVzZXRM
aXN0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bGlzdF9yZXNldExpc3QpCiAjZGVmaW5lIHVs
aXN0X3Jlc2V0X2tleXdvcmRfdmFsdWVzX2l0ZXJhdG9yIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFN
RSh1bGlzdF9yZXNldF9rZXl3b3JkX3ZhbHVlc19pdGVyYXRvcikKICNkZWZpbmUgdWxpc3RmbXRf
Y2xvc2UgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVsaXN0Zm10X2Nsb3NlKQorI2RlZmluZSB1
bGlzdGZtdF9jbG9zZVJlc3VsdCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWxpc3RmbXRfY2xv
c2VSZXN1bHQpCiAjZGVmaW5lIHVsaXN0Zm10X2Zvcm1hdCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodWxpc3RmbXRfZm9ybWF0KQorI2RlZmluZSB1bGlzdGZtdF9mb3JtYXRTdHJpbmdzVG9SZXN1
bHQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVsaXN0Zm10X2Zvcm1hdFN0cmluZ3NUb1Jlc3Vs
dCkKICNkZWZpbmUgdWxpc3RmbXRfb3BlbiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWxpc3Rm
bXRfb3BlbikKKyNkZWZpbmUgdWxpc3RmbXRfb3BlblJlc3VsdCBVX0lDVV9FTlRSWV9QT0lOVF9S
RU5BTUUodWxpc3RmbXRfb3BlblJlc3VsdCkKKyNkZWZpbmUgdWxpc3RmbXRfcmVzdWx0QXNWYWx1
ZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWxpc3RmbXRfcmVzdWx0QXNWYWx1ZSkKICNkZWZp
bmUgdWxvY19hY2NlcHRMYW5ndWFnZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWxvY19hY2Nl
cHRMYW5ndWFnZSkKICNkZWZpbmUgdWxvY19hY2NlcHRMYW5ndWFnZUZyb21IVFRQIFVfSUNVX0VO
VFJZX1BPSU5UX1JFTkFNRSh1bG9jX2FjY2VwdExhbmd1YWdlRnJvbUhUVFApCiAjZGVmaW5lIHVs
b2NfYWRkTGlrZWx5U3VidGFncyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWxvY19hZGRMaWtl
bHlTdWJ0YWdzKQpAQCAtMTA3OSwxNiArMTEyMywzMCBAQAogI2RlZmluZSB1bG9jZGF0YV9nZXRQ
YXBlclNpemUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVsb2NkYXRhX2dldFBhcGVyU2l6ZSkK
ICNkZWZpbmUgdWxvY2RhdGFfb3BlbiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWxvY2RhdGFf
b3BlbikKICNkZWZpbmUgdWxvY2RhdGFfc2V0Tm9TdWJzdGl0dXRlIFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1bG9jZGF0YV9zZXROb1N1YnN0aXR1dGUpCisjZGVmaW5lIHVsb2NpbXBfYWRkTGlr
ZWx5U3VidGFncyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWxvY2ltcF9hZGRMaWtlbHlTdWJ0
YWdzKQorI2RlZmluZSB1bG9jaW1wX2Zvckxhbmd1YWdlVGFnIFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh1bG9jaW1wX2Zvckxhbmd1YWdlVGFnKQogI2RlZmluZSB1bG9jaW1wX2dldENvdW50cnkg
VV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVsb2NpbXBfZ2V0Q291bnRyeSkKICNkZWZpbmUgdWxv
Y2ltcF9nZXRMYW5ndWFnZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWxvY2ltcF9nZXRMYW5n
dWFnZSkKICNkZWZpbmUgdWxvY2ltcF9nZXRSZWdpb25Gb3JTdXBwbGVtZW50YWxEYXRhIFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1bG9jaW1wX2dldFJlZ2lvbkZvclN1cHBsZW1lbnRhbERhdGEp
CiAjZGVmaW5lIHVsb2NpbXBfZ2V0U2NyaXB0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bG9j
aW1wX2dldFNjcmlwdCkKKyNkZWZpbmUgdWxvY2ltcF9taW5pbWl6ZVN1YnRhZ3MgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHVsb2NpbXBfbWluaW1pemVTdWJ0YWdzKQogI2RlZmluZSB1bG9jaW1w
X3RvQmNwS2V5IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bG9jaW1wX3RvQmNwS2V5KQogI2Rl
ZmluZSB1bG9jaW1wX3RvQmNwVHlwZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWxvY2ltcF90
b0JjcFR5cGUpCisjZGVmaW5lIHVsb2NpbXBfdG9MYW5ndWFnZVRhZyBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUodWxvY2ltcF90b0xhbmd1YWdlVGFnKQogI2RlZmluZSB1bG9jaW1wX3RvTGVnYWN5
S2V5IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bG9jaW1wX3RvTGVnYWN5S2V5KQogI2RlZmlu
ZSB1bG9jaW1wX3RvTGVnYWN5VHlwZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWxvY2ltcF90
b0xlZ2FjeVR5cGUpCisjZGVmaW5lIHVsdGFnX2lzRXh0ZW5zaW9uU3VidGFncyBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodWx0YWdfaXNFeHRlbnNpb25TdWJ0YWdzKQorI2RlZmluZSB1bHRhZ19p
c0xhbmd1YWdlU3VidGFnIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bHRhZ19pc0xhbmd1YWdl
U3VidGFnKQorI2RlZmluZSB1bHRhZ19pc1ByaXZhdGV1c2VWYWx1ZVN1YnRhZ3MgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHVsdGFnX2lzUHJpdmF0ZXVzZVZhbHVlU3VidGFncykKKyNkZWZpbmUg
dWx0YWdfaXNSZWdpb25TdWJ0YWcgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVsdGFnX2lzUmVn
aW9uU3VidGFnKQorI2RlZmluZSB1bHRhZ19pc1NjcmlwdFN1YnRhZyBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUodWx0YWdfaXNTY3JpcHRTdWJ0YWcpCisjZGVmaW5lIHVsdGFnX2lzVHJhbnNmb3Jt
ZWRFeHRlbnNpb25TdWJ0YWdzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bHRhZ19pc1RyYW5z
Zm9ybWVkRXh0ZW5zaW9uU3VidGFncykKKyNkZWZpbmUgdWx0YWdfaXNVbmljb2RlRXh0ZW5zaW9u
U3VidGFncyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWx0YWdfaXNVbmljb2RlRXh0ZW5zaW9u
U3VidGFncykKKyNkZWZpbmUgdWx0YWdfaXNVbmljb2RlTG9jYWxlQXR0cmlidXRlIFVfSUNVX0VO
VFJZX1BPSU5UX1JFTkFNRSh1bHRhZ19pc1VuaWNvZGVMb2NhbGVBdHRyaWJ1dGUpCisjZGVmaW5l
IHVsdGFnX2lzVW5pY29kZUxvY2FsZUF0dHJpYnV0ZXMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVsdGFnX2lzVW5pY29kZUxvY2FsZUF0dHJpYnV0ZXMpCiAjZGVmaW5lIHVsdGFnX2lzVW5pY29k
ZUxvY2FsZUtleSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWx0YWdfaXNVbmljb2RlTG9jYWxl
S2V5KQogI2RlZmluZSB1bHRhZ19pc1VuaWNvZGVMb2NhbGVUeXBlIFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1bHRhZ19pc1VuaWNvZGVMb2NhbGVUeXBlKQorI2RlZmluZSB1bHRhZ19pc1Zhcmlh
bnRTdWJ0YWdzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bHRhZ19pc1ZhcmlhbnRTdWJ0YWdz
KQogI2RlZmluZSB1bXNnX2FwcGx5UGF0dGVybiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodW1z
Z19hcHBseVBhdHRlcm4pCiAjZGVmaW5lIHVtc2dfYXV0b1F1b3RlQXBvc3Ryb3BoZSBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUodW1zZ19hdXRvUXVvdGVBcG9zdHJvcGhlKQogI2RlZmluZSB1bXNn
X2Nsb25lIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bXNnX2Nsb25lKQpAQCAtMTEwNiw2ICsx
MTY0LDE2IEBACiAjZGVmaW5lIHVtdHhfY29uZFdhaXQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVtdHhfY29uZFdhaXQpCiAjZGVmaW5lIHVtdHhfbG9jayBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodW10eF9sb2NrKQogI2RlZmluZSB1bXR4X3VubG9jayBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodW10eF91bmxvY2spCisjZGVmaW5lIHVtdXRhYmxlY3B0cmllX2J1aWxkSW1tdXRhYmxlIFVf
SUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bXV0YWJsZWNwdHJpZV9idWlsZEltbXV0YWJsZSkKKyNk
ZWZpbmUgdW11dGFibGVjcHRyaWVfY2xvbmUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVtdXRh
YmxlY3B0cmllX2Nsb25lKQorI2RlZmluZSB1bXV0YWJsZWNwdHJpZV9jbG9zZSBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodW11dGFibGVjcHRyaWVfY2xvc2UpCisjZGVmaW5lIHVtdXRhYmxlY3B0
cmllX2Zyb21VQ1BNYXAgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVtdXRhYmxlY3B0cmllX2Zy
b21VQ1BNYXApCisjZGVmaW5lIHVtdXRhYmxlY3B0cmllX2Zyb21VQ1BUcmllIFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1bXV0YWJsZWNwdHJpZV9mcm9tVUNQVHJpZSkKKyNkZWZpbmUgdW11dGFi
bGVjcHRyaWVfZ2V0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bXV0YWJsZWNwdHJpZV9nZXQp
CisjZGVmaW5lIHVtdXRhYmxlY3B0cmllX2dldFJhbmdlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFN
RSh1bXV0YWJsZWNwdHJpZV9nZXRSYW5nZSkKKyNkZWZpbmUgdW11dGFibGVjcHRyaWVfb3BlbiBV
X0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodW11dGFibGVjcHRyaWVfb3BlbikKKyNkZWZpbmUgdW11
dGFibGVjcHRyaWVfc2V0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bXV0YWJsZWNwdHJpZV9z
ZXQpCisjZGVmaW5lIHVtdXRhYmxlY3B0cmllX3NldFJhbmdlIFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh1bXV0YWJsZWNwdHJpZV9zZXRSYW5nZSkKICNkZWZpbmUgdW5pc2V0X2dldFVuaWNvZGUz
Mkluc3RhbmNlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bmlzZXRfZ2V0VW5pY29kZTMySW5z
dGFuY2UpCiAjZGVmaW5lIHVub3JtMl9hcHBlbmQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVu
b3JtMl9hcHBlbmQpCiAjZGVmaW5lIHVub3JtMl9jbG9zZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodW5vcm0yX2Nsb3NlKQpAQCAtMTE3Nyw3ICsxMjQ1LDkgQEAKICNkZWZpbmUgdW51bWZfZm9y
bWF0RG91YmxlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bnVtZl9mb3JtYXREb3VibGUpCiAj
ZGVmaW5lIHVudW1mX2Zvcm1hdEludCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodW51bWZfZm9y
bWF0SW50KQogI2RlZmluZSB1bnVtZl9vcGVuRm9yU2tlbGV0b25BbmRMb2NhbGUgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHVudW1mX29wZW5Gb3JTa2VsZXRvbkFuZExvY2FsZSkKKyNkZWZpbmUg
dW51bWZfb3BlbkZvclNrZWxldG9uQW5kTG9jYWxlV2l0aEVycm9yIFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1bnVtZl9vcGVuRm9yU2tlbGV0b25BbmRMb2NhbGVXaXRoRXJyb3IpCiAjZGVmaW5l
IHVudW1mX29wZW5SZXN1bHQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVudW1mX29wZW5SZXN1
bHQpCisjZGVmaW5lIHVudW1mX3Jlc3VsdEFzVmFsdWUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVudW1mX3Jlc3VsdEFzVmFsdWUpCiAjZGVmaW5lIHVudW1mX3Jlc3VsdEdldEFsbEZpZWxkUG9z
aXRpb25zIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bnVtZl9yZXN1bHRHZXRBbGxGaWVsZFBv
c2l0aW9ucykKICNkZWZpbmUgdW51bWZfcmVzdWx0TmV4dEZpZWxkUG9zaXRpb24gVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHVudW1mX3Jlc3VsdE5leHRGaWVsZFBvc2l0aW9uKQogI2RlZmluZSB1
bnVtZl9yZXN1bHRUb1N0cmluZyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodW51bWZfcmVzdWx0
VG9TdHJpbmcpCkBAIC0xMTk0LDYgKzEyNjQsNyBAQAogI2RlZmluZSB1cGxydWxlc19vcGVuIFVf
SUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cGxydWxlc19vcGVuKQogI2RlZmluZSB1cGxydWxlc19v
cGVuRm9yVHlwZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBscnVsZXNfb3BlbkZvclR5cGUp
CiAjZGVmaW5lIHVwbHJ1bGVzX3NlbGVjdCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBscnVs
ZXNfc2VsZWN0KQorI2RlZmluZSB1cGxydWxlc19zZWxlY3RGb3JtYXR0ZWQgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVwbHJ1bGVzX3NlbGVjdEZvcm1hdHRlZCkKICNkZWZpbmUgdXBscnVsZXNf
c2VsZWN0V2l0aEZvcm1hdCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBscnVsZXNfc2VsZWN0
V2l0aEZvcm1hdCkKICNkZWZpbmUgdXBsdWdfY2xvc2VMaWJyYXJ5IFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1cGx1Z19jbG9zZUxpYnJhcnkpCiAjZGVmaW5lIHVwbHVnX2ZpbmRMaWJyYXJ5IFVf
SUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cGx1Z19maW5kTGlicmFyeSkKQEAgLTEyMTgsNiArMTI4
OSw3IEBACiAjZGVmaW5lIHVwbHVnX3NldFBsdWdMZXZlbCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodXBsdWdfc2V0UGx1Z0xldmVsKQogI2RlZmluZSB1cGx1Z19zZXRQbHVnTmFtZSBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUodXBsdWdfc2V0UGx1Z05hbWUpCiAjZGVmaW5lIHVwbHVnX3NldFBs
dWdOb1VubG9hZCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBsdWdfc2V0UGx1Z05vVW5sb2Fk
KQorI2RlZmluZSB1cHJvcHNfYWRkUHJvcGVydHlTdGFydHMgVV9JQ1VfRU5UUllfUE9JTlRfUkVO
QU1FKHVwcm9wc19hZGRQcm9wZXJ0eVN0YXJ0cykKICNkZWZpbmUgdXByb3BzX2dldFNvdXJjZSBV
X0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXByb3BzX2dldFNvdXJjZSkKICNkZWZpbmUgdXByb3Bz
dmVjX2FkZFByb3BlcnR5U3RhcnRzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJvcHN2ZWNf
YWRkUHJvcGVydHlTdGFydHMpCiAjZGVmaW5lIHVwcnZfYWRkMzJfb3ZlcmZsb3cgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHVwcnZfYWRkMzJfb3ZlcmZsb3cpCkBAIC0xMjM2LDYgKzEzMDgsNyBA
QAogI2RlZmluZSB1cHJ2X2NvbnZlcnRUb1Bvc2l4IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
cHJ2X2NvbnZlcnRUb1Bvc2l4KQogI2RlZmluZSB1cHJ2X2NvcHlBc2NpaSBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUodXBydl9jb3B5QXNjaWkpCiAjZGVmaW5lIHVwcnZfY29weUViY2RpYyBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodXBydl9jb3B5RWJjZGljKQorI2RlZmluZSB1cHJ2X2N1cnJl
bmN5TGVhZHMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfY3VycmVuY3lMZWFkcykKICNk
ZWZpbmUgdXBydl9kZWNDb250ZXh0Q2xlYXJTdGF0dXMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVwcnZfZGVjQ29udGV4dENsZWFyU3RhdHVzKQogI2RlZmluZSB1cHJ2X2RlY0NvbnRleHREZWZh
dWx0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2RlY0NvbnRleHREZWZhdWx0KQogI2Rl
ZmluZSB1cHJ2X2RlY0NvbnRleHRHZXRSb3VuZGluZyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dXBydl9kZWNDb250ZXh0R2V0Um91bmRpbmcpCkBAIC0xMzI5LDcgKzE0MDIsNiBAQAogI2RlZmlu
ZSB1cHJ2X2Ztb2QgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfZm1vZCkKICNkZWZpbmUg
dXBydl9mcmVlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2ZyZWUpCiAjZGVmaW5lIHVw
cnZfZ2V0Q2hhck5hbWVDaGFyYWN0ZXJzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2dl
dENoYXJOYW1lQ2hhcmFjdGVycykKLSNkZWZpbmUgdXBydl9nZXREZWZhdWx0Q29kZXBhZ2UgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfZ2V0RGVmYXVsdENvZGVwYWdlKQogI2RlZmluZSB1
cHJ2X2dldERlZmF1bHRMb2NhbGVJRCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBydl9nZXRE
ZWZhdWx0TG9jYWxlSUQpCiAjZGVmaW5lIHVwcnZfZ2V0SW5maW5pdHkgVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FKHVwcnZfZ2V0SW5maW5pdHkpCiAjZGVmaW5lIHVwcnZfZ2V0TWF4Q2hhck5hbWVM
ZW5ndGggVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfZ2V0TWF4Q2hhck5hbWVMZW5ndGgp
CkBAIC0xNDY3LDEwICsxNTM5LDE1IEBACiAjZGVmaW5lIHVyZWdpb25fZ2V0UmVnaW9uRnJvbU51
bWVyaWNDb2RlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cmVnaW9uX2dldFJlZ2lvbkZyb21O
dW1lcmljQ29kZSkKICNkZWZpbmUgdXJlZ2lvbl9nZXRUeXBlIFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh1cmVnaW9uX2dldFR5cGUpCiAjZGVmaW5lIHVyZWxkYXRlZm10X2Nsb3NlIFVfSUNVX0VO
VFJZX1BPSU5UX1JFTkFNRSh1cmVsZGF0ZWZtdF9jbG9zZSkKKyNkZWZpbmUgdXJlbGRhdGVmbXRf
Y2xvc2VSZXN1bHQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZWxkYXRlZm10X2Nsb3NlUmVz
dWx0KQogI2RlZmluZSB1cmVsZGF0ZWZtdF9jb21iaW5lRGF0ZUFuZFRpbWUgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVyZWxkYXRlZm10X2NvbWJpbmVEYXRlQW5kVGltZSkKICNkZWZpbmUgdXJl
bGRhdGVmbXRfZm9ybWF0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cmVsZGF0ZWZtdF9mb3Jt
YXQpCiAjZGVmaW5lIHVyZWxkYXRlZm10X2Zvcm1hdE51bWVyaWMgVV9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKHVyZWxkYXRlZm10X2Zvcm1hdE51bWVyaWMpCisjZGVmaW5lIHVyZWxkYXRlZm10X2Zv
cm1hdE51bWVyaWNUb1Jlc3VsdCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXJlbGRhdGVmbXRf
Zm9ybWF0TnVtZXJpY1RvUmVzdWx0KQorI2RlZmluZSB1cmVsZGF0ZWZtdF9mb3JtYXRUb1Jlc3Vs
dCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXJlbGRhdGVmbXRfZm9ybWF0VG9SZXN1bHQpCiAj
ZGVmaW5lIHVyZWxkYXRlZm10X29wZW4gVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZWxkYXRl
Zm10X29wZW4pCisjZGVmaW5lIHVyZWxkYXRlZm10X29wZW5SZXN1bHQgVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FKHVyZWxkYXRlZm10X29wZW5SZXN1bHQpCisjZGVmaW5lIHVyZWxkYXRlZm10X3Jl
c3VsdEFzVmFsdWUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZWxkYXRlZm10X3Jlc3VsdEFz
VmFsdWUpCiAjZGVmaW5lIHVyZXNfY2xvc2UgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZXNf
Y2xvc2UpCiAjZGVmaW5lIHVyZXNfY29weVJlc2IgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVy
ZXNfY29weVJlc2IpCiAjZGVmaW5lIHVyZXNfY291bnRBcnJheUl0ZW1zIFVfSUNVX0VOVFJZX1BP
SU5UX1JFTkFNRSh1cmVzX2NvdW50QXJyYXlJdGVtcykKQEAgLTE1MTEsNiArMTU4OCw3IEBACiAj
ZGVmaW5lIHVyZXNfb3BlbiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXJlc19vcGVuKQogI2Rl
ZmluZSB1cmVzX29wZW5BdmFpbGFibGVMb2NhbGVzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
cmVzX29wZW5BdmFpbGFibGVMb2NhbGVzKQogI2RlZmluZSB1cmVzX29wZW5EaXJlY3QgVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHVyZXNfb3BlbkRpcmVjdCkKKyNkZWZpbmUgdXJlc19vcGVuRGly
ZWN0RmlsbEluIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cmVzX29wZW5EaXJlY3RGaWxsSW4p
CiAjZGVmaW5lIHVyZXNfb3BlbkZpbGxJbiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXJlc19v
cGVuRmlsbEluKQogI2RlZmluZSB1cmVzX29wZW5Ob0RlZmF1bHQgVV9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKHVyZXNfb3Blbk5vRGVmYXVsdCkKICNkZWZpbmUgdXJlc19vcGVuVSBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodXJlc19vcGVuVSkKQEAgLTE3NTQsNyArMTgzMiw2IEBACiAjZGVmaW5l
IHV0cmllMl9mcm9tVVRyaWUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHV0cmllMl9mcm9tVVRy
aWUpCiAjZGVmaW5lIHV0cmllMl9nZXQzMiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXRyaWUy
X2dldDMyKQogI2RlZmluZSB1dHJpZTJfZ2V0MzJGcm9tTGVhZFN1cnJvZ2F0ZUNvZGVVbml0IFVf
SUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1dHJpZTJfZ2V0MzJGcm9tTGVhZFN1cnJvZ2F0ZUNvZGVV
bml0KQotI2RlZmluZSB1dHJpZTJfZ2V0VmVyc2lvbiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dXRyaWUyX2dldFZlcnNpb24pCiAjZGVmaW5lIHV0cmllMl9pbnRlcm5hbFU4TmV4dEluZGV4IFVf
SUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1dHJpZTJfaW50ZXJuYWxVOE5leHRJbmRleCkKICNkZWZp
bmUgdXRyaWUyX2ludGVybmFsVThQcmV2SW5kZXggVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHV0
cmllMl9pbnRlcm5hbFU4UHJldkluZGV4KQogI2RlZmluZSB1dHJpZTJfaXNGcm96ZW4gVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHV0cmllMl9pc0Zyb3plbikKQEAgLTE3NjYsNyArMTg0Myw2IEBA
CiAjZGVmaW5lIHV0cmllMl9zZXQzMkZvckxlYWRTdXJyb2dhdGVDb2RlVW5pdCBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodXRyaWUyX3NldDMyRm9yTGVhZFN1cnJvZ2F0ZUNvZGVVbml0KQogI2Rl
ZmluZSB1dHJpZTJfc2V0UmFuZ2UzMiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXRyaWUyX3Nl
dFJhbmdlMzIpCiAjZGVmaW5lIHV0cmllMl9zd2FwIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
dHJpZTJfc3dhcCkKLSNkZWZpbmUgdXRyaWUyX3N3YXBBbnlWZXJzaW9uIFVfSUNVX0VOVFJZX1BP
SU5UX1JFTkFNRSh1dHJpZTJfc3dhcEFueVZlcnNpb24pCiAjZGVmaW5lIHV0cmllX2Nsb25lIFVf
SUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1dHJpZV9jbG9uZSkKICNkZWZpbmUgdXRyaWVfY2xvc2Ug
VV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHV0cmllX2Nsb3NlKQogI2RlZmluZSB1dHJpZV9kZWZh
dWx0R2V0Rm9sZGluZ09mZnNldCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXRyaWVfZGVmYXVs
dEdldEZvbGRpbmdPZmZzZXQpCkBAIC0xNzc4LDYgKzE4NTQsNyBAQAogI2RlZmluZSB1dHJpZV9z
ZXQzMiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXRyaWVfc2V0MzIpCiAjZGVmaW5lIHV0cmll
X3NldFJhbmdlMzIgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHV0cmllX3NldFJhbmdlMzIpCiAj
ZGVmaW5lIHV0cmllX3N3YXAgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHV0cmllX3N3YXApCisj
ZGVmaW5lIHV0cmllX3N3YXBBbnlWZXJzaW9uIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1dHJp
ZV9zd2FwQW55VmVyc2lvbikKICNkZWZpbmUgdXRyaWVfdW5zZXJpYWxpemUgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHV0cmllX3Vuc2VyaWFsaXplKQogI2RlZmluZSB1dHJpZV91bnNlcmlhbGl6
ZUR1bW15IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1dHJpZV91bnNlcmlhbGl6ZUR1bW15KQog
I2RlZmluZSB2em9uZV9jbG9uZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodnpvbmVfY2xvbmUp
CkBAIC0xODI3LDYgKzE5MDQsNyBAQAogI2RlZmluZSB6dHJhbnNfc2V0VGltZSBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUoenRyYW5zX3NldFRpbWUpCiAjZGVmaW5lIHp0cmFuc19zZXRUbyBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUoenRyYW5zX3NldFRvKQogCi0jZW5kaWYKKyNlbmRpZiAvKiAh
KGRlZmluZWQoX01TQ19WRVIpICYmIGRlZmluZWQoX19JTlRFTExJU0VOU0VfXykpICovCisjZW5k
aWYgLyogVV9ESVNBQkxFX1JFTkFNSU5HICovCisjZW5kaWYgLyogVVJFTkFNRV9IICovCiAKLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9pY3UvdW5pY29kZS91cmVzLmggYi9Tb3VyY2Uv
V1RGL2ljdS91bmljb2RlL3VyZXMuaAppbmRleCBhZjBjZTc2ZjI1YjFhMmZmNDA0YWEzMjY1NDIy
N2M3MzNjNTljZGQ0Li44Mzk3NzlmYWRhODA0ZDYwNjNlNjg1NGM1NzU3OTMzNTRlMmVkNjY5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3VyZXMuaAorKysgYi9Tb3VyY2UvV1RG
L2ljdS91bmljb2RlL3VyZXMuaApAQCAtMzMzLDE5ICszMzMsMTkgQEAgdXJlc19nZXRMb2NhbGVC
eVR5cGUoY29uc3QgVVJlc291cmNlQnVuZGxlKiByZXNvdXJjZUJ1bmRsZSwKIAogI2lmbmRlZiBV
X0hJREVfSU5URVJOQUxfQVBJCiAvKioKLSAqIFNhbWUgYXMgdXJlc19vcGVuKCkgYnV0IHVzZXMg
dGhlIGZpbGwtaW4gcGFyYW1ldGVyIGluc3RlYWQgb2YgYWxsb2NhdGluZwotICogYSBidW5kbGUs
IGlmIHIhPU5VTEwuCisgKiBTYW1lIGFzIHVyZXNfb3BlbigpIGJ1dCB1c2VzIHRoZSBmaWxsLWlu
IHBhcmFtZXRlciBpbnN0ZWFkIG9mIGFsbG9jYXRpbmcgYSBuZXcgYnVuZGxlLgorICoKICAqIFRP
RE8gbmVlZCB0byByZXZpc2l0IHVzZWZ1bG5lc3Mgb2YgdGhpcyBmdW5jdGlvbgogICogICAgICBh
bmQgdXNhZ2UgbW9kZWwgZm9yIGZpbGxJbiBwYXJhbWV0ZXJzIHdpdGhvdXQga25vd2luZyBzaXpl
b2YoVVJlc291cmNlQnVuZGxlKQotICogQHBhcmFtIHIgVGhlIHJlc291cmNlYnVuZGxlIHRvIG9w
ZW4KKyAqIEBwYXJhbSByIFRoZSBleGlzdGluZyBVUmVzb3VyY2VCdW5kbGUgdG8gZmlsbCBpbi4g
SWYgTlVMTCB0aGVuIHN0YXR1cyB3aWxsIGJlCisgKiAgICAgICAgICAgICAgIHNldCB0byBVX0lM
TEVHQUxfQVJHVU1FTlRfRVJST1IuCiAgKiBAcGFyYW0gcGFja2FnZU5hbWUgICBUaGUgcGFja2Fn
ZU5hbWUgYW5kIGxvY2FsZSB0b2dldGhlciBwb2ludCB0byBhbiBJQ1UgdWRhdGEgb2JqZWN0LAog
ICogICAgICAgICAgICAgICAgICAgICAgYXMgZGVmaW5lZCBieSA8Y29kZT4gdWRhdGFfb3Blbigg
cGFja2FnZU5hbWUsICJyZXMiLCBsb2NhbGUsIGVycikgPC9jb2RlPgogICogICAgICAgICAgICAg
ICAgICAgICAgb3IgZXF1aXZhbGVudC4gIFR5cGljYWxseSwgcGFja2FnZU5hbWUgd2lsbCByZWZl
ciB0byBhICguZGF0KSBmaWxlLCBvciB0bwogICogICAgICAgICAgICAgICAgICAgICAgYSBwYWNr
YWdlIHJlZ2lzdGVyZWQgd2l0aCB1ZGF0YV9zZXRBcHBEYXRhKCkuIFVzaW5nIGEgZnVsbCBmaWxl
IG9yIGRpcmVjdG9yeQogICogICAgICAgICAgICAgICAgICAgICAgcGF0aG5hbWUgZm9yIHBhY2th
Z2VOYW1lIGlzIGRlcHJlY2F0ZWQuIElmIE5VTEwsIElDVSBkYXRhIHdpbGwgYmUgdXNlZC4KICAq
IEBwYXJhbSBsb2NhbGVJRCBzcGVjaWZpZXMgdGhlIGxvY2FsZSBmb3Igd2hpY2ggd2Ugd2FudCB0
byBvcGVuIHRoZSByZXNvdXJjZQotICogQHBhcmFtIHN0YXR1cyBUaGUgZXJyb3IgY29kZQotICog
QHJldHVybiBhIG5ld2x5IGFsbG9jYXRlZCByZXNvdXJjZSBidW5kbGUgb3IgTlVMTCBpZiBpdCBk
b2Vzbid0IGV4aXN0LgorICogQHBhcmFtIHN0YXR1cyBUaGUgZXJyb3IgY29kZS4KICAqIEBpbnRl
cm5hbAogICovCiBVX0lOVEVSTkFMIHZvaWQgVV9FWFBPUlQyCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL2ljdS91bmljb2RlL3VzY3JpcHQuaCBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdXNjcmlw
dC5oCmluZGV4IGZhZjllZGY4YWUyNjk0NmMwOWE0ZDE5MWQ5OTliN2FmZWNhYTEyZWIuLmM4YmFi
ZGYwMzA2OGEzY2VlYWJiOWM2NmM2OTNmOTUxYzg5MmVmNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvaWN1L3VuaWNvZGUvdXNjcmlwdC5oCisrKyBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdXNj
cmlwdC5oCkBAIC00NjYsNiArNDY2LDE1IEBAIHR5cGVkZWYgZW51bSBVU2NyaXB0Q29kZSB7CiAg
ICAgICAvKiogQHN0YWJsZSBJQ1UgNjIgKi8KICAgICAgIFVTQ1JJUFRfT0xEX1NPR0RJQU4gICAg
ICAgICAgICAgICAgICAgPSAxODQsLyogU29nbyAqLwogCisgICAgICAvKiogQHN0YWJsZSBJQ1Ug
NjQgKi8KKyAgICAgIFVTQ1JJUFRfRUxZTUFJQyAgICAgICAgICAgICAgICAgICAgICAgPSAxODUs
LyogRWx5bSAqLworICAgICAgLyoqIEBzdGFibGUgSUNVIDY0ICovCisgICAgICBVU0NSSVBUX05Z
SUFLRU5HX1BVQUNIVUVfSE1PTkcgICAgICAgID0gMTg2LC8qIEhtbnAgKi8KKyAgICAgIC8qKiBA
c3RhYmxlIElDVSA2NCAqLworICAgICAgVVNDUklQVF9OQU5ESU5BR0FSSSAgICAgICAgICAgICAg
ICAgICA9IDE4NywvKiBOYW5kICovCisgICAgICAvKiogQHN0YWJsZSBJQ1UgNjQgKi8KKyAgICAg
IFVTQ1JJUFRfV0FOQ0hPICAgICAgICAgICAgICAgICAgICAgICAgPSAxODgsLyogV2NobyAqLwor
CiAjaWZuZGVmIFVfSElERV9ERVBSRUNBVEVEX0FQSQogICAgIC8qKgogICAgICAqIE9uZSBtb3Jl
IHRoYW4gdGhlIGhpZ2hlc3Qgbm9ybWFsIFVTY3JpcHRDb2RlIHZhbHVlLgpAQCAtNDczLDcgKzQ4
Miw3IEBAIHR5cGVkZWYgZW51bSBVU2NyaXB0Q29kZSB7CiAgICAgICoKICAgICAgKiBAZGVwcmVj
YXRlZCBJQ1UgNTggVGhlIG51bWVyaWMgdmFsdWUgbWF5IGNoYW5nZSBvdmVyIHRpbWUsIHNlZSBJ
Q1UgdGlja2V0ICMxMjQyMC4KICAgICAgKi8KLSAgICBVU0NSSVBUX0NPREVfTElNSVQgICAgPSAx
ODUKKyAgICBVU0NSSVBUX0NPREVfTElNSVQgICAgPSAxODkKICNlbmRpZiAgLy8gVV9ISURFX0RF
UFJFQ0FURURfQVBJCiB9IFVTY3JpcHRDb2RlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2lj
dS91bmljb2RlL3VzZWFyY2guaCBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdXNlYXJjaC5oCmlu
ZGV4IGViZmNkZjdlYzZhNDk0ZTM0MmMyYjM1MWVhZDI3Y2E3MjFiNWEwMjkuLjNhN2MzMTFjZTk1
M2E4NDY0ZmZiZjRlYjAxMTNlZDVkZjQ1MTg1YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvaWN1
L3VuaWNvZGUvdXNlYXJjaC5oCisrKyBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdXNlYXJjaC5o
CkBAIC0yNTcsMTAgKzI1Nyw5IEBAIHR5cGVkZWYgZW51bSB7CiAgICAgICogbWF0Y2ggYW4gZSB3
aXRoIHRoZSBzYW1lIGRpYWNyaXRpYyBvciBhIHBsYWluIGUgaW4gdGhlIHNlYXJjaGVkIHRleHQu
CiAgICAgICoKICAgICAgKiBUaGlzIG9wdGlvbiBpcyBzaW1pbGFyIHRvICJhc3ltbWV0cmljIHNl
YXJjaCIgYXMgZGVzY3JpYmVkIGluCi0gICAgICogPGEgaHJlZj0iaHR0cDovL3d3dy51bmljb2Rl
Lm9yZy9yZXBvcnRzL3RyMTAvI0FzeW1tZXRyaWNfU2VhcmNoIj4KLSAgICAgKiBVVFMgIzEwIFVu
aWNvZGUgQ29sbGF0aW9uIEFsZ29yaXRobTwvYSwgYnV0IGFsc28gYWxsb3dzIHVubWFya2VkCi0g
ICAgICogY2hhcmFjdGVycyBpbiB0aGUgc2VhcmNoZWQgdGV4dCB0byBtYXRjaCBtYXJrZWQgb3Ig
dW5tYXJrZWQgdmVyc2lvbnMgb2YKLSAgICAgKiB0aGF0IGNoYXJhY3RlciBpbiB0aGUgcGF0dGVy
bi4KKyAgICAgKiBbVVRTICMxMCBVbmljb2RlIENvbGxhdGlvbiBBbGdvcml0aG1dKGh0dHA6Ly93
d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjEwLyNBc3ltbWV0cmljX1NlYXJjaCksCisgICAgICog
YnV0IGFsc28gYWxsb3dzIHVubWFya2VkIGNoYXJhY3RlcnMgaW4gdGhlIHNlYXJjaGVkIHRleHQg
dG8gbWF0Y2gKKyAgICAgKiBtYXJrZWQgb3IgdW5tYXJrZWQgdmVyc2lvbnMgb2YgdGhhdCBjaGFy
YWN0ZXIgaW4gdGhlIHBhdHRlcm4uCiAgICAgICoKICAgICAgKiBAc3RhYmxlIElDVSA0LjQKICAg
ICAgKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdXNldC5oIGIvU291cmNl
L1dURi9pY3UvdW5pY29kZS91c2V0LmgKaW5kZXggNTlmNDY1MDdkNTQ4YWE0ODY1OGY4NDc4YWY3
OWQ1ZmQ0M2E5ZjJjZi4uMTg0ODJjMTBlNzM4NDQzZjQ2ZWVhZjQ3ZGY2NTM4MWRjN2Q4YWJiNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi9pY3UvdW5pY29kZS91c2V0LmgKKysrIGIvU291cmNlL1dU
Ri9pY3UvdW5pY29kZS91c2V0LmgKQEAgLTMzLDEwICszMywxNCBAQAogI2luY2x1ZGUgInVuaWNv
ZGUvdWNoYXIuaCIKICNpbmNsdWRlICJ1bmljb2RlL2xvY2FscG9pbnRlci5oIgogCi0jaWZuZGVm
IFVDTlZfSAotc3RydWN0IFVTZXQ7CisjaWZuZGVmIFVTRVRfREVGSU5FRAorCisjaWZuZGVmIFVf
SU5fRE9YWUdFTgorI2RlZmluZSBVU0VUX0RFRklORUQKKyNlbmRpZgogLyoqCi0gKiBBIFVuaWNv
ZGVTZXQuICBVc2UgdGhlIHVzZXRfKiBBUEkgdG8gbWFuaXB1bGF0ZS4gIENyZWF0ZSB3aXRoCisg
KiBVU2V0IGlzIHRoZSBDIEFQSSB0eXBlIGNvcnJlc3BvbmRpbmcgdG8gQysrIGNsYXNzIFVuaWNv
ZGVTZXQuCisgKiBVc2UgdGhlIHVzZXRfKiBBUEkgdG8gbWFuaXB1bGF0ZS4gIENyZWF0ZSB3aXRo
CiAgKiB1c2V0X29wZW4qLCBhbmQgZGVzdHJveSB3aXRoIHVzZXRfY2xvc2UuCiAgKiBAc3RhYmxl
IElDVSAyLjQKICAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9pY3UvdW5pY29kZS91c3Bvb2Yu
aCBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdXNwb29mLmgKaW5kZXggNTFhMjAyYTNjZTMxOWJj
NDczMzAxNmZhMTMwMjE3NTgzOTExNWM2Ny4uZDE1YmE0YjI0MjM1ZGNiMGI3MjdiMjhiYzI5OWFl
ZGM2MDM0ZGVkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9pY3UvdW5pY29kZS91c3Bvb2YuaAor
KysgYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3VzcG9vZi5oCkBAIC05NCw3ICs5NCw2IEBACiAg
KiAvLyAuLi4KICAqIFxlbmRjb2RlCiAgKgotICogPHA+CiAgKiBVVFMgMzkgZGVmaW5lcyB0d28g
c3RyaW5ncyB0byBiZSA8ZW0+Y29uZnVzYWJsZTwvZW0+IGlmIHRoZXkgbWFwIHRvIHRoZSBzYW1l
IDxlbT5za2VsZXRvbiBzdHJpbmc8L2VtPi4gQSBza2VsZXRvbiBjYW4KICAqIGJlIHRob3VnaHQg
b2YgYXMgYSAiaGFzaCBjb2RlIi4ge0BsaW5rIHVzcG9vZl9nZXRTa2VsZXRvbn0gY29tcHV0ZXMg
dGhlIHNrZWxldG9uIGZvciBhIHBhcnRpY3VsYXIgc3RyaW5nLCBzbwogICogdGhlIGZvbGxvd2lu
ZyBzbmlwcGV0IGlzIGVxdWl2YWxlbnQgdG8gdGhlIGV4YW1wbGUgYWJvdmU6CkBAIC0xMjgsNyAr
MTI3LDYgQEAKICAqIGZyZWUoc2tlbDIpOwogICogXGVuZGNvZGUKICAqCi0gKiA8cD4KICAqIElm
IHlvdSBuZWVkIHRvIGNoZWNrIGlmIGEgc3RyaW5nIGlzIGNvbmZ1c2FibGUgd2l0aCBhbnkgc3Ry
aW5nIGluIGEgZGljdGlvbmFyeSBvZiBtYW55IHN0cmluZ3MsIHJhdGhlciB0aGFuIGNhbGxpbmcK
ICAqIHtAbGluayB1c3Bvb2ZfYXJlQ29uZnVzYWJsZX0gbWFueSB0aW1lcyBpbiBhIGxvb3AsIHtA
bGluayB1c3Bvb2ZfZ2V0U2tlbGV0b259IGNhbiBiZSB1c2VkIGluc3RlYWQsIGFzIHNob3duIGJl
bG93OgogICoKQEAgLTE3MiwxNCArMTcwLDEyIEBACiAgKiB1c3Bvb2ZfY2xvc2Uoc2MpOwogICog
XGVuZGNvZGUKICAqCi0gKiA8cD4KICAqIDxiPk5vdGU6PC9iPiBTaW5jZSB0aGUgVW5pY29kZSBj
b25mdXNhYmxlcyBtYXBwaW5nIHRhYmxlIGlzIGZyZXF1ZW50bHkgdXBkYXRlZCwgY29uZnVzYWJs
ZSBza2VsZXRvbnMgYXJlIDxlbT5ub3Q8L2VtPgogICogZ3VhcmFudGVlZCB0byBiZSB0aGUgc2Ft
ZSBiZXR3ZWVuIElDVSByZWxlYXNlcy4gV2UgdGhlcmVmb3JlIHJlY29tbWVuZCB0aGF0IHlvdSBh
bHdheXMgY29tcHV0ZSBjb25mdXNhYmxlIHNrZWxldG9ucwogICogYXQgcnVudGltZSBhbmQgZG8g
bm90IHJlbHkgb24gY3JlYXRpbmcgYSBwZXJtYW5lbnQsIG9yIGRpZmZpY3VsdCB0byB1cGRhdGUs
IGRhdGFiYXNlIG9mIHNrZWxldG9ucy4KICAqCiAgKiA8aDI+U3Bvb2YgRGV0ZWN0aW9uPC9oMj4K
ICAqCi0gKiA8cD4KICAqIFRoZSBmb2xsb3dpbmcgc25pcHBldCBzaG93cyBhIG1pbmltYWwgZXhh
bXBsZSBvZiB1c2luZyA8Y29kZT5VU3Bvb2ZDaGVja2VyPC9jb2RlPiB0byBwZXJmb3JtIHNwb29m
IGRldGVjdGlvbiBvbiBhCiAgKiBzdHJpbmc6CiAgKgpAQCAtMjA0LDE2ICsyMDAsMTMgQEAKICAq
IHVzZXRfY2xvc2UoYWxsb3dlZCk7CiAgKiBcZW5kY29kZQogICoKLSAqIDxwPgogICogQXMgaW4g
dGhlIGNhc2UgZm9yIGNvbmZ1c2FiaWxpdHkgY2hlY2tpbmcsIGl0IGlzIGdvb2QgcHJhY3RpY2Ug
dG8gY3JlYXRlIG9uZSA8Y29kZT5VU3Bvb2ZDaGVja2VyPC9jb2RlPiBpbnN0YW5jZSBhdAogICog
c3RhcnR1cCwgYW5kIGNhbGwgdGhlIGNoZWFwZXIge0BsaW5rIHVzcG9vZl9jaGVja30gb25saW5l
LiBXZSBzcGVjaWZ5IHRoZSBzZXQgb2YKICAqIGFsbG93ZWQgY2hhcmFjdGVycyB0byBiZSB0aG9z
ZSB3aXRoIHR5cGUgUkVDT01NRU5ERUQgb3IgSU5DTFVTSU9OLCBhY2NvcmRpbmcgdG8gdGhlIHJl
Y29tbWVuZGF0aW9uIGluIFVUUyAzOS4KICAqCi0gKiA8cD4KICAqIEluIGFkZGl0aW9uIHRvIHtA
bGluayB1c3Bvb2ZfY2hlY2t9LCB0aGUgZnVuY3Rpb24ge0BsaW5rIHVzcG9vZl9jaGVja1VURjh9
IGlzIGV4cG9zZWQgZm9yIFVURjgtZW5jb2RlZCBjaGFyKiBzdHJpbmdzLAogICogYW5kIHtAbGlu
ayB1c3Bvb2ZfY2hlY2tVbmljb2RlU3RyaW5nfSBpcyBleHBvc2VkIGZvciBDKysgcHJvZ3JhbW1l
cnMuCiAgKgotICogPHA+CiAgKiBJZiB0aGUge0BsaW5rIFVTUE9PRl9BVVhfSU5GT30gY2hlY2sg
aXMgZW5hYmxlZCwgYSBsaW1pdGVkIGFtb3VudCBvZiBpbmZvcm1hdGlvbiBvbiB3aHkgYSBzdHJp
bmcgZmFpbGVkIHRoZSBjaGVja3MKICAqIGlzIGF2YWlsYWJsZSBpbiB0aGUgcmV0dXJuZWQgYml0
bWFzay4gIEZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiwgdXNlIHRoZSB7QGxpbmsgdXNwb29mX2No
ZWNrMn0gY2xhc3Mgb2YgZnVuY3Rpb25zCiAgKiB3aXRoIGEge0BsaW5rIFVTcG9vZkNoZWNrUmVz
dWx0fSBwYXJhbWV0ZXI6CkBAIC0yNzQsNyArMjY3LDYgQEAKICAqIC8vIEV4cGxpY2l0IGNsZWFu
dXAgbm90IG5lY2Vzc2FyeS4KICAqIFxlbmRjb2RlCiAgKgotICogPHA+CiAgKiBUaGUgcmV0dXJu
IHZhbHVlIGlzIGEgYml0bWFzayBvZiB0aGUgY2hlY2tzIHRoYXQgZmFpbGVkLiBJbiB0aGlzIGNh
c2UsIHRoZXJlIHdhcyBvbmUgY2hlY2sgdGhhdCBmYWlsZWQ6CiAgKiB7QGxpbmsgVVNQT09GX1JF
U1RSSUNUSU9OX0xFVkVMfSwgY29ycmVzcG9uZGluZyB0byB0aGUgZmlmdGggYml0ICgxNikuIFRo
ZSBwb3NzaWJsZSBjaGVja3MgYXJlOgogICoKQEAgLTMwNyw3ICsyOTksNiBAQAogICogdXNwb29m
X2Nsb3NlKHNjKTsKICAqIFxlbmRjb2RlCiAgKgotICogPHA+CiAgKiBIZXJlIGlzIGFuIGV4YW1w
bGUgaW4gQysrIHNob3dpbmcgaG93IHRvIGNvbXB1dGUgdGhlIHJlc3RyaWN0aW9uIGxldmVsIG9m
IGEgc3RyaW5nOgogICoKICAqIFxjb2Rley5jcHB9CkBAIC0zMzQsMTEgKzMyNSw5IEBACiAgKiBw
cmludGYoIlJlc3RyaWN0aW9uIGxldmVsOiAlIzAxMHggKHN0YXR1czogJXMpXG4iLCByZXN0cmlj
dGlvbkxldmVsLCB1X2Vycm9yTmFtZShzdGF0dXMpKTsKICAqIFxlbmRjb2RlCiAgKgotICogPHA+
CiAgKiBUaGUgY29kZSAnMHg1MDAwMDAwMCcgY29ycmVzcG9uZHMgdG8gdGhlIHJlc3RyaWN0aW9u
IGxldmVsIFVTUE9PRl9NSU5JTUFMTFlfUkVTVFJJQ1RJVkUuICBTaW5jZQogICogVVNQT09GX01J
TklNQUxMWV9SRVNUUklDVElWRSBpcyB3ZWFrZXIgdGhhbiBVU1BPT0ZfTU9ERVJBVEVMWV9SRVNU
UklDVElWRSwgdGhlIHN0cmluZyBmYWlscyB0aGUgY2hlY2suCiAgKgotICogPHA+CiAgKiA8Yj5O
b3RlOjwvYj4gVGhlIFJlc3RyaWN0aW9uIExldmVsIGlzIHRoZSBtb3N0IHBvd2VyZnVsIG9mIHRo
ZSBjaGVja3MuIFRoZSBmdWxsIGxvZ2ljIGlzIGRvY3VtZW50ZWQgaW4KICAqIDxhIGhyZWY9Imh0
dHA6Ly91bmljb2RlLm9yZy9yZXBvcnRzL3RyMzkvI1Jlc3RyaWN0aW9uX0xldmVsX0RldGVjdGlv
biI+VVRTIDM5PC9hPiwgYnV0IHRoZSBiYXNpYyBpZGVhIGlzIHRoYXQgc3RyaW5ncwogICogYXJl
IHJlc3RyaWN0ZWQgdG8gY29udGFpbiBjaGFyYWN0ZXJzIGZyb20gb25seSBhIHNpbmdsZSBzY3Jp
cHQsIDxlbT5leGNlcHQ8L2VtPiB0aGF0IG1vc3Qgc2NyaXB0cyBhcmUgYWxsb3dlZCB0byBoYXZl
CkBAIC0zNTIsMTUgKzM0MSwxMiBAQAogICoKICAqIDxoMj5BZGRpdGlvbmFsIEluZm9ybWF0aW9u
PC9oMj4KICAqCi0gKiA8cD4KICAqIEEgPGNvZGU+VVNwb29mQ2hlY2tlcjwvY29kZT4gaW5zdGFu
Y2UgbWF5IGJlIHVzZWQgcmVwZWF0ZWRseSB0byBwZXJmb3JtIGNoZWNrcyBvbiBhbnkgbnVtYmVy
IG9mIGlkZW50aWZpZXJzLgogICoKLSAqIDxwPgogICogPGI+VGhyZWFkIFNhZmV0eTo8L2I+IFRo
ZSB0ZXN0IGZ1bmN0aW9ucyBmb3IgY2hlY2tpbmcgYSBzaW5nbGUgaWRlbnRpZmllciwgb3IgZm9y
IHRlc3Rpbmcgd2hldGhlcgogICogdHdvIGlkZW50aWZpZXJzIGFyZSBwb3NzaWJsZSBjb25mdXNh
YmxlLCBhcmUgdGhyZWFkIHNhZmUuIFRoZXkgbWF5IGNhbGxlZCBjb25jdXJyZW50bHksIGZyb20g
bXVsdGlwbGUgdGhyZWFkcywKICAqIHVzaW5nIHRoZSBzYW1lIFVTcG9vZkNoZWNrZXIgaW5zdGFu
Y2UuCiAgKgotICogPHA+CiAgKiBNb3JlIGdlbmVyYWxseSwgdGhlIHN0YW5kYXJkIElDVSB0aHJl
YWQgc2FmZXR5IHJ1bGVzIGFwcGx5OiBmdW5jdGlvbnMgdGhhdCB0YWtlIGEgY29uc3QgVVNwb29m
Q2hlY2tlciBwYXJhbWV0ZXIgYXJlCiAgKiB0aHJlYWQgc2FmZS4gVGhvc2UgdGhhdCB0YWtlIGEg
bm9uLWNvbnN0IFVTcG9vZkNoZWNrZXIgYXJlIG5vdCB0aHJlYWQgc2FmZS4uCiAgKgpAQCAtNzM0
LDkgKzcyMCw4IEBAIHVzcG9vZl9jbG9uZShjb25zdCBVU3Bvb2ZDaGVja2VyICpzYywgVUVycm9y
Q29kZSAqc3RhdHVzKTsKICAqIH0KICAqIDwvcHJlPgogICoKLSAqIFRvIGRpc2FibGUgc3BlY2lm
aWMgY2hlY2tzIGFuZCBlbmFibGUgYWxsIG90aGVycywgCi0gKiBzdGFydCB3aXRoIEFMTF9DSEVD
S1MgYW5kICJBTkQgYXdheSIgdGhlIG5vdC1kZXNpcmVkIGNoZWNrcy4KLSAqIEZvciBleGFtcGxl
LCBpZiB5b3UgYXJlIG5vdCBwbGFubmluZyB0byB1c2UgdGhlIHtAbGluayB1c3Bvb2ZfYXJlQ29u
ZnVzYWJsZX0gZnVuY3Rpb25hbGl0eSwKKyAqIFRvIGRpc2FibGUgc3BlY2lmaWMgY2hlY2tzIGFu
ZCBlbmFibGUgYWxsIG90aGVycywgdGhlICJibGFja2xpc3RlZCIgY2hlY2tzIHNob3VsZCBiZSBB
TkRlZCBhd2F5IGZyb20KKyAqIEFMTF9DSEVDS1MuIEZvciBleGFtcGxlLCBpZiB5b3UgYXJlIG5v
dCBwbGFubmluZyB0byB1c2UgdGhlIHtAbGluayB1c3Bvb2ZfYXJlQ29uZnVzYWJsZX0gZnVuY3Rp
b25hbGl0eSwKICAqIGl0IGlzIGdvb2QgcHJhY3RpY2UgdG8gZGlzYWJsZSB0aGUgQ09ORlVTQUJM
RSBjaGVjazoKICAqCiAgKiA8cHJlPgpAQCAtMTIyMCwxNCArMTIwNSwyMSBAQCBVX05BTUVTUEFD
RV9CRUdJTgogCiAvKioKICAqIFxjbGFzcyBMb2NhbFVTcG9vZkNoZWNrUmVzdWx0UG9pbnRlcgot
ICogIlNtYXJ0IHBvaW50ZXIiIGNsYXNzLCBjbG9zZXMgYSBVU3Bvb2ZDaGVja1Jlc3VsdCB2aWEg
e0BsaW5rIHVzcG9vZl9jbG9zZUNoZWNrUmVzdWx0fS4KKyAqICJTbWFydCBwb2ludGVyIiBjbGFz
cywgY2xvc2VzIGEgVVNwb29mQ2hlY2tSZXN1bHQgdmlhIGB1c3Bvb2ZfY2xvc2VDaGVja1Jlc3Vs
dCgpYC4KICAqIEZvciBtb3N0IG1ldGhvZHMgc2VlIHRoZSBMb2NhbFBvaW50ZXJCYXNlIGJhc2Ug
Y2xhc3MuCiAgKgogICogQHNlZSBMb2NhbFBvaW50ZXJCYXNlCiAgKiBAc2VlIExvY2FsUG9pbnRl
cgogICogQHN0YWJsZSBJQ1UgNTgKICAqLworCisvKioKKyAqIFxjb25kCisgKiBOb3RlOiBEb3h5
Z2VuIGlzIGdpdmluZyBhIGJvZ3VzIHdhcm5pbmcgb24gdGhpcyBVX0RFRklORV9MT0NBTF9PUEVO
X1BPSU5URVIuCisgKiAgICAgICBGb3Igbm93LCBzdXBwcmVzcyB3aXRoIGEgRG94eWdlbiBjb25k
CisgKi8KIFVfREVGSU5FX0xPQ0FMX09QRU5fUE9JTlRFUihMb2NhbFVTcG9vZkNoZWNrUmVzdWx0
UG9pbnRlciwgVVNwb29mQ2hlY2tSZXN1bHQsIHVzcG9vZl9jbG9zZUNoZWNrUmVzdWx0KTsKKy8q
KiBcZW5kY29uZCAqLwogCiBVX05BTUVTUEFDRV9FTkQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri9pY3UvdW5pY29kZS91c3RyaW5nLmggYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3VzdHJpbmcu
aAppbmRleCBmOWZjNDFhMWRiNmI5N2U5NmE2ODJjYTc1NTUwOGY5ZDU2ZDMxNzVjLi4yNDViNzY2
NTQ1YWIyNWUwMjViMmRiYTAxMTdhZWZkMjliZGYzOTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L2ljdS91bmljb2RlL3VzdHJpbmcuaAorKysgYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3VzdHJp
bmcuaApAQCAtODk1LDM1ICs4OTUsMzIgQEAgdV9tZW1yY2hyMzIoY29uc3QgVUNoYXIgKnMsIFVD
aGFyMzIgYywgaW50MzJfdCBjb3VudCk7CiAgKiBwYXJhbWV0ZXJzLgogICogVGhlIHN0cmluZyBw
YXJhbWV0ZXIgbXVzdCBiZSBhIEMgc3RyaW5nIGxpdGVyYWwuCiAgKiBUaGUgbGVuZ3RoIG9mIHRo
ZSBzdHJpbmcsIG5vdCBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nCi0gKiA8Y29kZT5OVUw8L2Nv
ZGU+LCBtdXN0IGJlIHNwZWNpZmllZCBhcyBhIGNvbnN0YW50LgorICogYE5VTGAsIG11c3QgYmUg
c3BlY2lmaWVkIGFzIGEgY29uc3RhbnQuCiAgKiBUaGUgVV9TVFJJTkdfREVDTCBtYWNybyBzaG91
bGQgYmUgaW52b2tlZCBleGFjdGx5IG9uY2UgZm9yIG9uZQogICogc3VjaCBzdHJpbmcgdmFyaWFi
bGUgYmVmb3JlIGl0IGlzIHVzZWQuCiAgKgogICogVXNhZ2U6Ci0gKiA8cHJlPgotICogICAgVV9T
VFJJTkdfREVDTCh1c3RyaW5nVmFyMSwgIlF1aWNrLUZveCAyIiwgMTEpOwotICogICAgVV9TVFJJ
TkdfREVDTCh1c3RyaW5nVmFyMiwgImp1bXBzIDUlIiwgOCk7Ci0gKiAgICBzdGF0aWMgVUJvb2wg
ZGlkSW5pdD1GQUxTRTsKLSAqIAotICogICAgaW50MzJfdCBmdW5jdGlvbigpIHsKLSAqICAgICAg
ICBpZighZGlkSW5pdCkgewotICogICAgICAgICAgICBVX1NUUklOR19JTklUKHVzdHJpbmdWYXIx
LCAiUXVpY2stRm94IDIiLCAxMSk7Ci0gKiAgICAgICAgICAgIFVfU1RSSU5HX0lOSVQodXN0cmlu
Z1ZhcjIsICJqdW1wcyA1JSIsIDgpOwotICogICAgICAgICAgICBkaWRJbml0PVRSVUU7Ci0gKiAg
ICAgICAgfQotICogICAgICAgIHJldHVybiB1X3N0cmNtcCh1c3RyaW5nVmFyMSwgdXN0cmluZ1Zh
cjIpOwotICogICAgfQotICogPC9wcmU+CisgKgorICogICAgIFVfU1RSSU5HX0RFQ0wodXN0cmlu
Z1ZhcjEsICJRdWljay1Gb3ggMiIsIDExKTsKKyAqICAgICBVX1NUUklOR19ERUNMKHVzdHJpbmdW
YXIyLCAianVtcHMgNSUiLCA4KTsKKyAqICAgICBzdGF0aWMgVUJvb2wgZGlkSW5pdD1GQUxTRTsK
KyAqCisgKiAgICAgaW50MzJfdCBmdW5jdGlvbigpIHsKKyAqICAgICAgICAgaWYoIWRpZEluaXQp
IHsKKyAqICAgICAgICAgICAgIFVfU1RSSU5HX0lOSVQodXN0cmluZ1ZhcjEsICJRdWljay1Gb3gg
MiIsIDExKTsKKyAqICAgICAgICAgICAgIFVfU1RSSU5HX0lOSVQodXN0cmluZ1ZhcjIsICJqdW1w
cyA1JSIsIDgpOworICogICAgICAgICAgICAgZGlkSW5pdD1UUlVFOworICogICAgICAgICB9Cisg
KiAgICAgICAgIHJldHVybiB1X3N0cmNtcCh1c3RyaW5nVmFyMSwgdXN0cmluZ1ZhcjIpOworICog
ICAgIH0KICAqIAotICogTm90ZSB0aGF0IHRoZSBtYWNyb3Mgd2lsbCBOT1QgY29uc2lzdGVudGx5
IHdvcmsgaWYgdGhlaXIgYXJndW1lbnQgaXMgYW5vdGhlciA8Y29kZT4jZGVmaW5lPC9jb2RlPi4g
Ci0gKiAgVGhlIGZvbGxvd2luZyB3aWxsIG5vdCB3b3JrIG9uIGFsbCBwbGF0Zm9ybXMsIGRvbid0
IHVzZSBpdC4KKyAqIE5vdGUgdGhhdCB0aGUgbWFjcm9zIHdpbGwgTk9UIGNvbnNpc3RlbnRseSB3
b3JrIGlmIHRoZWlyIGFyZ3VtZW50IGlzIGFub3RoZXIgI2BkZWZpbmVgLgorICogVGhlIGZvbGxv
d2luZyB3aWxsIG5vdCB3b3JrIG9uIGFsbCBwbGF0Zm9ybXMsIGRvbid0IHVzZSBpdC4KICAqIAot
ICogPHByZT4KICAqICAgICAjZGVmaW5lIEdMVUNLICJNci4gR2x1Y2siCiAgKiAgICAgVV9TVFJJ
TkdfREVDTCh2YXIsIEdMVUNLLCA5KQogICogICAgIFVfU1RSSU5HX0lOSVQodmFyLCBHTFVDSywg
OSkKLSAqIDwvcHJlPgotICogCisgKgogICogSW5zdGVhZCwgdXNlIHRoZSBzdHJpbmcgbGl0ZXJh
bCAiTXIuIEdsdWNrIiAgYXMgdGhlIGFyZ3VtZW50IHRvIGJvdGggbWFjcm8KICAqIGNhbGxzLgog
ICoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdXRleHQuaCBiL1NvdXJjZS9X
VEYvaWN1L3VuaWNvZGUvdXRleHQuaAppbmRleCBhZDIxZDcwYTE2NGM5ZTY5YzRmY2IwZWY3YjI2
NTFhYmNhMDEyOGM4Li40YjA2OTYyMTAzZWZjNzg2MzU3NTFkY2M5YzgyMTkxYmViODY5NTNlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3V0ZXh0LmgKKysrIGIvU291cmNlL1dU
Ri9pY3UvdW5pY29kZS91dGV4dC5oCkBAIC0xNTU1LDcgKzE1NTUsNyBAQCBzdHJ1Y3QgVVRleHQg
ewogVV9TVEFCTEUgVVRleHQgKiBVX0VYUE9SVDIKIHV0ZXh0X3NldHVwKFVUZXh0ICp1dCwgaW50
MzJfdCBleHRyYVNwYWNlLCBVRXJyb3JDb2RlICpzdGF0dXMpOwogCi0jaWZuZGVmIFVfSElERV9J
TlRFUk5BTF9BUEkKKy8vIGRvIG5vdCB1c2UgI2lmbmRlZiBVX0hJREVfSU5URVJOQUxfQVBJIGFy
b3VuZCB0aGUgZm9sbG93aW5nIQogLyoqCiAgICogQGludGVybmFsCiAgICogIFZhbHVlIHVzZWQg
dG8gaGVscCBpZGVudGlmeSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgVVRleHQgc3RydWN0cy4KQEAg
LTE1NjQsNyArMTU2NCw2IEBAIHV0ZXh0X3NldHVwKFVUZXh0ICp1dCwgaW50MzJfdCBleHRyYVNw
YWNlLCBVRXJyb3JDb2RlICpzdGF0dXMpOwogZW51bSB7CiAgICAgVVRFWFRfTUFHSUMgPSAweDM0
NWFkODJjCiB9OwotI2VuZGlmICAvKiBVX0hJREVfSU5URVJOQUxfQVBJICovCiAKIC8qKgogICog
aW5pdGlhbGl6ZXIgdG8gYmUgdXNlZCB3aXRoIGxvY2FsIChzdGFjaykgaW5zdGFuY2VzIG9mIGEg
VVRleHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdXRmMTYuaCBiL1NvdXJj
ZS9XVEYvaWN1L3VuaWNvZGUvdXRmMTYuaAppbmRleCAzNWZkMDk4NjExNDNjZGZiMWZiMDAwMmFk
ZTY0ZTFhNzM0OTI3NDk4Li5hY2E1MWI1NmE3OWRjZmI3ZTRjYjA2NDFhMzc1OTljNzFiNTc1NTc3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3V0ZjE2LmgKKysrIGIvU291cmNl
L1dURi9pY3UvdW5pY29kZS91dGYxNi5oCkBAIC0yMTMsOCArMjEzLDYgQEAKICAgICB9IFwKIH0K
IAotI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJCi0KIC8qKgogICogR2V0IGEgY29kZSBwb2ludCBm
cm9tIGEgc3RyaW5nIGF0IGEgcmFuZG9tLWFjY2VzcyBvZmZzZXQsCiAgKiB3aXRob3V0IGNoYW5n
aW5nIHRoZSBvZmZzZXQuCkBAIC0yMzYsNyArMjM0LDcgQEAKICAqIEBwYXJhbSBsZW5ndGggc3Ry
aW5nIGxlbmd0aAogICogQHBhcmFtIGMgb3V0cHV0IFVDaGFyMzIgdmFyaWFibGUKICAqIEBzZWUg
VTE2X0dFVF9VTlNBRkUKLSAqIEBkcmFmdCBJQ1UgNjAKKyAqIEBzdGFibGUgSUNVIDYwCiAgKi8K
ICNkZWZpbmUgVTE2X0dFVF9PUl9GRkZEKHMsIHN0YXJ0LCBpLCBsZW5ndGgsIGMpIHsgXAogICAg
IChjKT0ocylbaV07IFwKQEAgLTI1OCw4ICsyNTYsNiBAQAogICAgIH0gXAogfQogCi0jZW5kaWYg
IC8vIFVfSElERV9EUkFGVF9BUEkKLQogLyogZGVmaW5pdGlvbnMgd2l0aCBmb3J3YXJkIGl0ZXJh
dGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogLyoqCkBA
IC0zMjAsOCArMzE2LDYgQEAKICAgICB9IFwKIH0KIAotI2lmbmRlZiBVX0hJREVfRFJBRlRfQVBJ
Ci0KIC8qKgogICogR2V0IGEgY29kZSBwb2ludCBmcm9tIGEgc3RyaW5nIGF0IGEgY29kZSBwb2lu
dCBib3VuZGFyeSBvZmZzZXQsCiAgKiBhbmQgYWR2YW5jZSB0aGUgb2Zmc2V0IHRvIHRoZSBuZXh0
IGNvZGUgcG9pbnQgYm91bmRhcnkuCkBAIC0zNDEsNyArMzM1LDcgQEAKICAqIEBwYXJhbSBsZW5n
dGggc3RyaW5nIGxlbmd0aAogICogQHBhcmFtIGMgb3V0cHV0IFVDaGFyMzIgdmFyaWFibGUKICAq
IEBzZWUgVTE2X05FWFRfVU5TQUZFCi0gKiBAZHJhZnQgSUNVIDYwCisgKiBAc3RhYmxlIElDVSA2
MAogICovCiAjZGVmaW5lIFUxNl9ORVhUX09SX0ZGRkQocywgaSwgbGVuZ3RoLCBjKSB7IFwKICAg
ICAoYyk9KHMpWyhpKSsrXTsgXApAQCAtMzU2LDggKzM1MCw2IEBACiAgICAgfSBcCiB9CiAKLSNl
bmRpZiAgLy8gVV9ISURFX0RSQUZUX0FQSQotCiAvKioKICAqIEFwcGVuZCBhIGNvZGUgcG9pbnQg
dG8gYSBzdHJpbmcsIG92ZXJ3cml0aW5nIDEgb3IgMiBjb2RlIHVuaXRzLgogICogVGhlIG9mZnNl
dCBwb2ludHMgdG8gdGhlIGN1cnJlbnQgZW5kIG9mIHRoZSBzdHJpbmcgY29udGVudHMKQEAgLTU4
NSw4ICs1NzcsNiBAQAogICAgIH0gXAogfQogCi0jaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKLQog
LyoqCiAgKiBNb3ZlIHRoZSBzdHJpbmcgb2Zmc2V0IGZyb20gb25lIGNvZGUgcG9pbnQgYm91bmRh
cnkgdG8gdGhlIHByZXZpb3VzIG9uZQogICogYW5kIGdldCB0aGUgY29kZSBwb2ludCBiZXR3ZWVu
IHRoZW0uCkBAIC02MDUsNyArNTk1LDcgQEAKICAqIEBwYXJhbSBpIHN0cmluZyBvZmZzZXQsIG11
c3QgYmUgc3RhcnQ8aQogICogQHBhcmFtIGMgb3V0cHV0IFVDaGFyMzIgdmFyaWFibGUKICAqIEBz
ZWUgVTE2X1BSRVZfVU5TQUZFCi0gKiBAZHJhZnQgSUNVIDYwCisgKiBAc3RhYmxlIElDVSA2MAog
ICovCiAjZGVmaW5lIFUxNl9QUkVWX09SX0ZGRkQocywgc3RhcnQsIGksIGMpIHsgXAogICAgIChj
KT0ocylbLS0oaSldOyBcCkBAIC02MjAsOCArNjEwLDYgQEAKICAgICB9IFwKIH0KIAotI2VuZGlm
ICAvLyBVX0hJREVfRFJBRlRfQVBJCi0KIC8qKgogICogTW92ZSB0aGUgc3RyaW5nIG9mZnNldCBm
cm9tIG9uZSBjb2RlIHBvaW50IGJvdW5kYXJ5IHRvIHRoZSBwcmV2aW91cyBvbmUuCiAgKiAoUHJl
LWRlY3JlbWVudGluZyBiYWNrd2FyZCBpdGVyYXRpb24uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri9pY3UvdW5pY29kZS91dGY4LmggYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3V0ZjguaAppbmRl
eCA0YmIwNjNjNWUzNjg2NGE0Y2Q3ZjNjYjE0YjBhMDNlMTJmY2YxNTAxLi4zNjg1YWUzZDcxOGI4
ZTI0Yjc3MDQwNzg1MDkwOThjY2Y0YjRlMWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL2ljdS91
bmljb2RlL3V0ZjguaAorKysgYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3V0ZjguaApAQCAtNjA5
LDcgKzYwOSw2IEBAIHV0ZjhfYmFjazFTYWZlQm9keShjb25zdCB1aW50OF90ICpzLCBpbnQzMl90
IHN0YXJ0LCBpbnQzMl90IGkpOwogICAgIH0gXAogfQogCi0jaWZuZGVmIFVfSElERV9EUkFGVF9B
UEkKIC8qKgogICogSWYgdGhlIHN0cmluZyBlbmRzIHdpdGggYSBVVEYtOCBieXRlIHNlcXVlbmNl
IHRoYXQgaXMgdmFsaWQgc28gZmFyCiAgKiBidXQgaW5jb21wbGV0ZSwgdGhlbiByZWR1Y2UgdGhl
IGxlbmd0aCBvZiB0aGUgc3RyaW5nIHRvIGVuZCBiZWZvcmUKQEAgLTYzNCw3ICs2MzMsNyBAQCB1
dGY4X2JhY2sxU2FmZUJvZHkoY29uc3QgdWludDhfdCAqcywgaW50MzJfdCBzdGFydCwgaW50MzJf
dCBpKTsKICAqIEBwYXJhbSBzdGFydCBpbnQzMl90IHN0YXJ0aW5nIHN0cmluZyBvZmZzZXQgKHVz
dWFsbHkgMCkKICAqIEBwYXJhbSBsZW5ndGggaW50MzJfdCBzdHJpbmcgbGVuZ3RoICh1c3VhbGx5
IHN0YXJ0PD1sZW5ndGgpCiAgKiBAc2VlIFU4X1NFVF9DUF9TVEFSVAotICogQGRyYWZ0IElDVSA2
MQorICogQHN0YWJsZSBJQ1UgNjEKICAqLwogI2RlZmluZSBVOF9UUlVOQ0FURV9JRl9JTkNPTVBM
RVRFKHMsIHN0YXJ0LCBsZW5ndGgpIFwKICAgICBpZigobGVuZ3RoKT4oc3RhcnQpKSB7IFwKQEAg
LTY1OCw3ICs2NTcsNiBAQCB1dGY4X2JhY2sxU2FmZUJvZHkoY29uc3QgdWludDhfdCAqcywgaW50
MzJfdCBzdGFydCwgaW50MzJfdCBpKTsKICAgICAgICAgICAgIH0gXAogICAgICAgICB9IFwKICAg
ICB9Ci0jZW5kaWYgIC8vIFVfSElERV9EUkFGVF9BUEkKIAogLyogZGVmaW5pdGlvbnMgd2l0aCBi
YWNrd2FyZCBpdGVyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
Ki8KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9pY3UvdW5pY29kZS91dHlwZXMuaCBiL1NvdXJj
ZS9XVEYvaWN1L3VuaWNvZGUvdXR5cGVzLmgKaW5kZXggYmM1Zjc3Mjk5ZTgwMjA3MmJjNDIzMzUw
ODI2NmE1MzJmMzdiMDRlNS4uZjIyNGFlNDk2YzA0MzMzZmYyYjEzM2E4NjgwZWM3NDk4YjBkYzQz
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9pY3UvdW5pY29kZS91dHlwZXMuaAorKysgYi9Tb3Vy
Y2UvV1RGL2ljdS91bmljb2RlL3V0eXBlcy5oCkBAIC0yOTAsNiArMjkwLDExIEBAIHR5cGVkZWYg
ZG91YmxlIFVEYXRlOwogICogQHN0YWJsZSBJQ1UgMy40CiAgKi8KIAorI2lmZGVmIFVfSU5fRE9Y
WUdFTgorLy8gVGhpcyBkZWZpbml0aW9uIGlzIHJlcXVpcmVkIHdoZW4gZ2VuZXJhdGluZyB0aGUg
QVBJIGRvY3MuCisjZGVmaW5lIFVfQ09NQklORURfSU1QTEVNRU5UQVRJT04gMQorI2VuZGlmCisK
ICNpZiBkZWZpbmVkKFVfQ09NQklORURfSU1QTEVNRU5UQVRJT04pCiAjZGVmaW5lIFVfREFUQV9B
UEkgICAgIFVfRVhQT1JUCiAjZGVmaW5lIFVfQ09NTU9OX0FQSSAgIFVfRVhQT1JUCkBAIC01Mzks
MTIgKzU0NCw4IEBAIHR5cGVkZWYgZW51bSBVRXJyb3JDb2RlIHsKICAgICBVX0RFRkFVTFRfS0VZ
V09SRF9NSVNTSU5HLCAgICAgICAgLyoqPCBNaXNzaW5nIERFRkFVTFQgcnVsZSBpbiBwbHVyYWwg
cnVsZXMgKi8KICAgICBVX0RFQ0lNQUxfTlVNQkVSX1NZTlRBWF9FUlJPUiwgICAgLyoqPCBEZWNp
bWFsIG51bWJlciBzeW50YXggZXJyb3IgKi8KICAgICBVX0ZPUk1BVF9JTkVYQUNUX0VSUk9SLCAg
ICAgICAgICAgLyoqPCBDYW5ub3QgZm9ybWF0IGEgbnVtYmVyIGV4YWN0bHkgYW5kIHJvdW5kaW5n
IG1vZGUgaXMgUk9VTkRfVU5ORUNFU1NBUlkgQHN0YWJsZSBJQ1UgNC44ICovCi0jaWZuZGVmIFVf
SElERV9EUkFGVF9BUEkKLSAgICBVX05VTUJFUl9BUkdfT1VUT0ZCT1VORFNfRVJST1IsICAgLyoq
PCBUaGUgYXJndW1lbnQgdG8gYSBOdW1iZXJGb3JtYXR0ZXIgaGVscGVyIG1ldGhvZCB3YXMgb3V0
IG9mIGJvdW5kczsgdGhlIGJvdW5kcyBhcmUgdXN1YWxseSAwIHRvIDk5OS4gQGRyYWZ0IElDVSA2
MSAqLwotI2VuZGlmICAvLyBVX0hJREVfRFJBRlRfQVBJCi0jaWZuZGVmIFVfSElERV9EUkFGVF9B
UEkKLSAgICBVX05VTUJFUl9TS0VMRVRPTl9TWU5UQVhfRVJST1IsICAgLyoqPCBUaGUgbnVtYmVy
IHNrZWxldG9uIHBhc3NlZCB0byBDKysgTnVtYmVyRm9ybWF0dGVyIG9yIEMgVU51bWJlckZvcm1h
dHRlciB3YXMgaW52YWxpZCBvciBjb250YWluZWQgYSBzeW50YXggZXJyb3IuIEBkcmFmdCBJQ1Ug
NjIgKi8KLSNlbmRpZiAgLy8gVV9ISURFX0RSQUZUX0FQSQorICAgIFVfTlVNQkVSX0FSR19PVVRP
RkJPVU5EU19FUlJPUiwgICAvKio8IFRoZSBhcmd1bWVudCB0byBhIE51bWJlckZvcm1hdHRlciBo
ZWxwZXIgbWV0aG9kIHdhcyBvdXQgb2YgYm91bmRzOyB0aGUgYm91bmRzIGFyZSB1c3VhbGx5IDAg
dG8gOTk5LiBAc3RhYmxlIElDVSA2MSAqLworICAgIFVfTlVNQkVSX1NLRUxFVE9OX1NZTlRBWF9F
UlJPUiwgICAvKio8IFRoZSBudW1iZXIgc2tlbGV0b24gcGFzc2VkIHRvIEMrKyBOdW1iZXJGb3Jt
YXR0ZXIgb3IgQyBVTnVtYmVyRm9ybWF0dGVyIHdhcyBpbnZhbGlkIG9yIGNvbnRhaW5lZCBhIHN5
bnRheCBlcnJvci4gQHN0YWJsZSBJQ1UgNjIgKi8KICNpZm5kZWYgVV9ISURFX0RFUFJFQ0FURURf
QVBJCiAgICAgLyoqCiAgICAgICogT25lIG1vcmUgdGhhbiB0aGUgaGlnaGVzdCBub3JtYWwgZm9y
bWF0dGluZyBBUEkgZXJyb3IgY29kZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvaWN1L3VuaWNv
ZGUvdXZlcm51bS5oIGIvU291cmNlL1dURi9pY3UvdW5pY29kZS91dmVybnVtLmgKaW5kZXggYmNh
YjY2N2Y5NmY2MmQzZDFjNWI2N2Y4Y2VmYzk0NDY0Y2JmOGQzYS4uN2MxMTRiZTJjYzg3ZjE5NTA4
ZTI2ZTg0MGM5MzNjYjQ0YjE3Y2VmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9pY3UvdW5pY29k
ZS91dmVybnVtLmgKKysrIGIvU291cmNlL1dURi9pY3UvdW5pY29kZS91dmVybnVtLmgKQEAgLTM0
LDkgKzM0LDExIEBACiAgICogIGJ5IHJ1bm5pbmcgdGhlIFVOSVggbWFrZWZpbGUgdGFyZ2V0ICd1
cGRhdGUtd2luZG93cy1tYWtlZmlsZXMnIGluIGljdS9zb3VyY2UuCiAgICoKICAgKgorICAqIHNv
dXJjZS9jb21tb24vY29tbW9uX3V3cC52Y3hwcm9qCiAgICogc291cmNlL2NvbW1vbi9jb21tb24u
dmN4cHJvaiAtIHVwZGF0ZSAnT3V0cHV0IGZpbGUgbmFtZScgb24gdGhlIGxpbmsgdGFiIHNvCiAg
ICogICAgICAgICAgICAgICAgICAgdGhhdCBpdCBjb250YWlucyB0aGUgbmV3IG1ham9yL21pbm9y
IGNvbWJpbmF0aW9uCiAgICogc291cmNlL2kxOG4vaTE4bi52Y3hwcm9qIC0gc2FtZSBhcyBmb3Ig
dGhlIGNvbW1vbi52Y3hwcm9qCisgICogc291cmNlL2kxOG4vaTE4bl91d3AudmN4cHJvaiAtIHNh
bWUgYXMgZm9yIHRoZSBjb21tb25fdXdwLnZjeHByb2oKICAgKiBzb3VyY2UvbGF5b3V0ZXgvbGF5
b3V0ZXgudmNwcm9qIC0gc2FtZQogICAqIHNvdXJjZS9zdHViZGF0YS9zdHViZGF0YS52Y3Byb2og
LSBzYW1lIGFzIGZvciB0aGUgY29tbW9uLnZjeHByb2oKICAgKiBzb3VyY2UvaW8vaW8udmNwcm9q
IC0gc2FtZSBhcyBmb3IgdGhlIGNvbW1vbi52Y3hwcm9qCkBAIC01OCw3ICs2MCw3IEBACiAgKiAg
VGhpcyB2YWx1ZSB3aWxsIGNoYW5nZSBpbiB0aGUgc3Vic2VxdWVudCByZWxlYXNlcyBvZiBJQ1UK
ICAqICBAc3RhYmxlIElDVSAyLjQKICAqLwotI2RlZmluZSBVX0lDVV9WRVJTSU9OX01BSk9SX05V
TSA2MgorI2RlZmluZSBVX0lDVV9WRVJTSU9OX01BSk9SX05VTSA2NAogCiAvKiogVGhlIGN1cnJl
bnQgSUNVIG1pbm9yIHZlcnNpb24gYXMgYW4gaW50ZWdlci4KICAqICBUaGlzIHZhbHVlIHdpbGwg
Y2hhbmdlIGluIHRoZSBzdWJzZXF1ZW50IHJlbGVhc2VzIG9mIElDVQpAQCAtODQsNyArODYsNyBA
QAogICogIFRoaXMgdmFsdWUgd2lsbCBjaGFuZ2UgaW4gdGhlIHN1YnNlcXVlbnQgcmVsZWFzZXMg
b2YgSUNVCiAgKiAgQHN0YWJsZSBJQ1UgMi42CiAgKi8KLSNkZWZpbmUgVV9JQ1VfVkVSU0lPTl9T
VUZGSVggXzYyCisjZGVmaW5lIFVfSUNVX1ZFUlNJT05fU1VGRklYIF82NAogCiAvKioKICAqIFxk
ZWYgVV9ERUYyX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUKQEAgLTEwMSwxNiArMTAzLDM0IEBACiAg
KiAgXGRlZiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUKICAqICBAc3RhYmxlIElDVSA0LjIKICAq
LworLyoqCisgKiBEaXNhYmxlIHRoZSB2ZXJzaW9uIHN1ZmZpeC4gVXNlIHRoZSBjdXN0b20gc3Vm
Zml4IGlmIGV4aXN0cy4KKyAqIFxkZWYgVV9ESVNBQkxFX1ZFUlNJT05fU1VGRklYCisgKiBAaW50
ZXJuYWwKKyAqLworI2lmbmRlZiBVX0RJU0FCTEVfVkVSU0lPTl9TVUZGSVgKKyNkZWZpbmUgVV9E
SVNBQkxFX1ZFUlNJT05fU1VGRklYIDAKKyNlbmRpZgogCiAjaWZuZGVmIFVfSUNVX0VOVFJZX1BP
SU5UX1JFTkFNRQogI2lmZGVmIFVfSEFWRV9MSUJfU1VGRklYCi0jZGVmaW5lIFVfREVGX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUoeCx5LHopIHggIyMgeSAjIyAgegotI2RlZmluZSBVX0RFRjJfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh4LHkseikgVV9ERUZfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh4
LHkseikKLSNkZWZpbmUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHgpICAgIFVfREVGMl9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHgsVV9JQ1VfVkVSU0lPTl9TVUZGSVgsVV9MSUJfU1VGRklYX0Nf
TkFNRSkKKyMgICBpZiAhVV9ESVNBQkxFX1ZFUlNJT05fU1VGRklYCisjICAgICAgIGRlZmluZSBV
X0RFRl9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHgseSx6KSB4ICMjIHkgIyMgIHoKKyMgICAgICAg
ZGVmaW5lIFVfREVGMl9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHgseSx6KSBVX0RFRl9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHgseSx6KQorIyAgICAgICBkZWZpbmUgVV9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKHgpICAgIFVfREVGMl9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHgsVV9JQ1VfVkVSU0lP
Tl9TVUZGSVgsVV9MSUJfU1VGRklYX0NfTkFNRSkKKyMgICBlbHNlCisjICAgICAgIGRlZmluZSBV
X0RFRl9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHgseSkgeCAjIyB5CisjICAgICAgIGRlZmluZSBV
X0RFRjJfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh4LHkpIFVfREVGX0lDVV9FTlRSWV9QT0lOVF9S
RU5BTUUoeCx5KQorIyAgICAgICBkZWZpbmUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHgpICAg
IFVfREVGMl9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHgsVV9MSUJfU1VGRklYX0NfTkFNRSkKKyMg
ICBlbmRpZgogI2Vsc2UKLSNkZWZpbmUgVV9ERUZfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh4LHkp
IHggIyMgeQotI2RlZmluZSBVX0RFRjJfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh4LHkpIFVfREVG
X0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUoeCx5KQotI2RlZmluZSBVX0lDVV9FTlRSWV9QT0lOVF9S
RU5BTUUoeCkgICAgVV9ERUYyX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUoeCxVX0lDVV9WRVJTSU9O
X1NVRkZJWCkKKyMgICBpZiAhVV9ESVNBQkxFX1ZFUlNJT05fU1VGRklYCisjICAgICAgIGRlZmlu
ZSBVX0RFRl9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHgseSkgeCAjIyB5CisjICAgICAgIGRlZmlu
ZSBVX0RFRjJfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh4LHkpIFVfREVGX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUoeCx5KQorIyAgICAgICBkZWZpbmUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHgp
ICAgIFVfREVGMl9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHgsVV9JQ1VfVkVSU0lPTl9TVUZGSVgp
CisjICAgZWxzZQorIyAgICAgICBkZWZpbmUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHgpICAg
IHgKKyMgICBlbmRpZgogI2VuZGlmCiAjZW5kaWYKIApAQCAtMTE5LDcgKzEzOSw3IEBACiAgKiAg
VGhpcyB2YWx1ZSB3aWxsIGNoYW5nZSBpbiB0aGUgc3Vic2VxdWVudCByZWxlYXNlcyBvZiBJQ1UK
ICAqICBAc3RhYmxlIElDVSAyLjQKICAqLwotI2RlZmluZSBVX0lDVV9WRVJTSU9OICI2Mi4yIgor
I2RlZmluZSBVX0lDVV9WRVJTSU9OICI2NC4yIgogCiAvKioKICAqIFRoZSBjdXJyZW50IElDVSBs
aWJyYXJ5IG1ham9yIHZlcnNpb24gbnVtYmVyIGFzIGEgc3RyaW5nLCBmb3IgbGlicmFyeSBuYW1l
IHN1ZmZpeGVzLgpAQCAtMTMyLDEzICsxNTIsMTMgQEAKICAqCiAgKiBAc3RhYmxlIElDVSAyLjYK
ICAqLwotI2RlZmluZSBVX0lDVV9WRVJTSU9OX1NIT1JUICI2MiIKKyNkZWZpbmUgVV9JQ1VfVkVS
U0lPTl9TSE9SVCAiNjQiCiAKICNpZm5kZWYgVV9ISURFX0lOVEVSTkFMX0FQSQogLyoqIERhdGEg
dmVyc2lvbiBpbiBJQ1U0Qy4KICAqIEBpbnRlcm5hbCBJQ1UgNC40IEludGVybmFsIFVzZSBPbmx5
CiAgKiovCi0jZGVmaW5lIFVfSUNVX0RBVEFfVkVSU0lPTiAiNjIuMiIKKyNkZWZpbmUgVV9JQ1Vf
REFUQV9WRVJTSU9OICI2NC4yIgogI2VuZGlmICAvKiBVX0hJREVfSU5URVJOQUxfQVBJICovCiAK
IC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>