<?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>130759</bug_id>
          
          <creation_ts>2014-03-25 17:46:26 -0700</creation_ts>
          <short_desc>Add HeapInlines</short_desc>
          <delta_ts>2014-03-25 19:38:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>994453</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-03-25 17:46:26 -0700</bug_when>
    <thetext>Heap.h is getting a little unwieldy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>994459</commentid>
    <comment_count>1</comment_count>
      <attachid>227818</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-03-25 18:11:23 -0700</bug_when>
    <thetext>Created attachment 227818
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>994461</commentid>
    <comment_count>2</comment_count>
      <attachid>227819</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-03-25 18:14:16 -0700</bug_when>
    <thetext>Created attachment 227819
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>994462</commentid>
    <comment_count>3</comment_count>
      <attachid>227820</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-03-25 18:25:14 -0700</bug_when>
    <thetext>Created attachment 227820
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>994463</commentid>
    <comment_count>4</comment_count>
      <attachid>227821</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-03-25 18:33:06 -0700</bug_when>
    <thetext>Created attachment 227821
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>994470</commentid>
    <comment_count>5</comment_count>
      <attachid>227821</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-25 19:07:46 -0700</bug_when>
    <thetext>Comment on attachment 227821
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>994474</commentid>
    <comment_count>6</comment_count>
      <attachid>227821</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-03-25 19:38:18 -0700</bug_when>
    <thetext>Comment on attachment 227821
Patch

Clearing flags on attachment: 227821

Committed r166278: &lt;http://trac.webkit.org/changeset/166278&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>994475</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-03-25 19:38:21 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227818</attachid>
            <date>2014-03-25 18:11:23 -0700</date>
            <delta_ts>2014-03-25 18:14:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-130759-20140325181102.patch</filename>
            <type>text/plain</type>
            <size>57660</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY2Mjc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBA
CisyMDE0LTAzLTI1ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQWRkIEhlYXBJbmxpbmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzA3NTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNj
cmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzOgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
aGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2tTbmFwc2hvdEZ1bmN0b3I6
Ok1hcmtlZEJsb2NrU25hcHNob3RGdW5jdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2tT
bmFwc2hvdEZ1bmN0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOiBBbHNv
IHJlaW5kZW50ZWQgd2hpbGUgd2UncmUgaGVyZS4KKyAgICAgICAgKEpTQzo6SGVhcDo6d3JpdGVC
YXJyaWVyQnVmZmVyKToKKyAgICAgICAgKEpTQzo6SGVhcDo6dm0pOgorICAgICAgICAoSlNDOjpI
ZWFwOjpvYmplY3RTcGFjZSk6CisgICAgICAgIChKU0M6OkhlYXA6Om1hY2hpbmVUaHJlYWRzKToK
KyAgICAgICAgKEpTQzo6SGVhcDo6b3BlcmF0aW9uSW5Qcm9ncmVzcyk6CisgICAgICAgIChKU0M6
OkhlYXA6OmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6YWxsb2NhdG9yRm9yT2JqZWN0V2l0aE5vcm1hbERlc3RydWN0b3IpOgorICAgICAg
ICAoSlNDOjpIZWFwOjphbGxvY2F0b3JGb3JPYmplY3RXaXRoSW1tb3J0YWxTdHJ1Y3R1cmVEZXN0
cnVjdG9yKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c3RvcmFnZUFsbG9jYXRvcik6CisgICAgICAg
IChKU0M6OkhlYXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6
OmlzU2FmZVRvQ29sbGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OmhhbmRsZVNldCk6CisgICAg
ICAgIChKU0M6OkhlYXA6OmhhbmRsZVN0YWNrKToKKyAgICAgICAgKEpTQzo6SGVhcDo6bGFzdEZ1
bGxHQ0xlbmd0aCk6CisgICAgICAgIChKU0M6OkhlYXA6Omxhc3RFZGVuR0NMZW5ndGgpOgorICAg
ICAgICAoSlNDOjpIZWFwOjppbmNyZWFzZUxhc3RGdWxsR0NMZW5ndGgpOgorICAgICAgICAoSlND
OjpIZWFwOjpzaXplQmVmb3JlTGFzdEVkZW5Db2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6c2l6ZUFmdGVyTGFzdEVkZW5Db2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c2l6
ZUJlZm9yZUxhc3RGdWxsQ29sbGVjdGlvbik6CisgICAgICAgIChKU0M6OkhlYXA6OnNpemVBZnRl
ckxhc3RGdWxsQ29sbGVjdGlvbik6CisgICAgICAgIChKU0M6OkhlYXA6OmppdFN0dWJSb3V0aW5l
cyk6CisgICAgICAgIChKU0M6OkhlYXA6OmlzRGVmZXJyZWQpOgorICAgICAgICAoSlNDOjpIZWFw
OjpzdHJ1Y3R1cmVJRFRhYmxlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVtb3ZlQ29kZUJsb2Nr
KToKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpI
ZWFwOjpzaG91bGRDb2xsZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNCdXN5KToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6aXNDb2xsZWN0aW5nKToKKyAgICAgICAgKEpTQzo6SGVhcDo6aGVhcCk6
CisgICAgICAgIChKU0M6OkhlYXA6OmlzTGl2ZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmlzSW5S
ZW1lbWJlcmVkU2V0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNNYXJrZWQpOgorICAgICAgICAo
SlNDOjpIZWFwOjp0ZXN0QW5kU2V0TWFya2VkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c2V0TWFy
a2VkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6d3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVwb3J0
RXh0cmFNZW1vcnlDb3N0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9yRWFjaFByb3RlY3RlZENl
bGwpOgorICAgICAgICAoSlNDOjpIZWFwOjpmb3JFYWNoQ29kZUJsb2NrKToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6YWxsb2NhdGVXaXRoTm9ybWFsRGVzdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6Okhl
YXA6OmFsbG9jYXRlV2l0aEltbW9ydGFsU3RydWN0dXJlRGVzdHJ1Y3Rvcik6CisgICAgICAgIChK
U0M6OkhlYXA6OmFsbG9jYXRlV2l0aG91dERlc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpIZWFw
Ojp0cnlBbGxvY2F0ZVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpIZWFwOjp0cnlSZWFsbG9jYXRl
U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmFzY3JpYmVPd25lcik6CisgICAgICAgIChK
U0M6OkhlYXA6OmJsb2NrQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVsZWFzZVNv
b24pOgorICAgICAgICAoSlNDOjpIZWFwOjppbmNyZW1lbnREZWZlcnJhbERlcHRoKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aCk6CisgICAgICAgIChKU0M6Okhl
YXA6OmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIpOgorICAgICAgICAoSlNDOjpIZWFwOjpkZWNy
ZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCk6CisgICAgICAgIChKU0M6OkhlYXA6Om1h
cmtMaXN0U2V0KToKKyAgICAgICAgKiBydW50aW1lL0pTQ0lubGluZXMuaDoKKwogMjAxNC0wMy0y
NSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCAzMi1iaXQg
Z2V0dGVyIGNhbGwgYWxpZ25tZW50LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE2NjEwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC01OTQsNiArNTk0LDcgQEAg
amF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
R0NUaHJlYWQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAgXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcElubGluZXMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcEl0
ZXJhdGlvblNjb3BlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBPcGVyYXRp
b24uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFN0YXRpc3RpY3MuY3BwIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTY2
MTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2
YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA2Miw2ICsxMDYyLDcgQEAK
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGFuZGxlVHlwZXMuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGVhcC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caGVhcFxIZWFwQmxvY2suaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGhlYXBcSGVhcElubGluZXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBc
SGVhcE9wZXJhdGlvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxIZWFw
Um9vdFZpc2l0b3IuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGVhcFN0
YXRpc3RpY3MuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE2NjEwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVy
cwkod29ya2luZyBjb3B5KQpAQCAtMTczOSw2ICsxNzM5LDkgQEAKICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGhlYXBcSGVhcEJsb2NrLmgiPgogICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+
CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBJ
bmxpbmVzLmgiPgorICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBPcGVyYXRpb24uaCI+CiAgICAg
ICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjYxMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNzg2LDEwICs3ODYsMTAgQEAKIAkJMkE2ODI5NUIxODc1RjgwNTAwQjZDM0UyIC8q
IENvcHlXcml0ZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJBNjgyOTVBMTg3NUY4MDUwMEI2QzNFMiAvKiBDb3B5V3JpdGVCYXJyaWVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkE2RjQ2
MjYxN0U5NTlDRTAwQzQ1Qzk4IC8qIEhlYXBPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBNkY0NjI1MTdFOTU5Q0UwMEM0NUM5OCAvKiBI
ZWFwT3BlcmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMkE3QTU4RUYxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE3QTU4RUUxODA4QTRDNDAw
MjBCREY3IC8qIERlZmVyR0MuY3BwICovOyB9OwotICAgICAgIDJBODM2Mzg1MThEN0QwRUUwMDAw
RUJDQyAvKiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBODM2MzgzMThEN0QwRUUwMDAwRUJDQyAvKiBFZGVu
R0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLzsgfTsKLSAgICAgICAyQTgzNjM4NjE4RDdEMEVFMDAw
MEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE4MzYzODQxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5H
Q0FjdGl2aXR5Q2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotICAgICAgIDJBODM2Mzg5MThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rp
dml0eUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJBODM2Mzg3MThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNr
LmNwcCAqLzsgfTsKLSAgICAgICAyQTgzNjM4QTE4RDdEMEZFMDAwMEVCQ0MgLyogRnVsbEdDQWN0
aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkE4MzYzODgxOEQ3RDBGRTAwMDBFQkNDIC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2su
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkyQTgz
NjM4NTE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTgzNjM4MzE4RDdEMEVF
MDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi87IH07CisJCTJBODM2Mzg2
MThEN0QwRUUwMDAwRUJDQyAvKiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTgzNjM4NDE4RDdEMEVFMDAwMEVC
Q0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTJBODM2Mzg5MThEN0QwRkUwMDAwRUJDQyAvKiBGdWxs
R0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJBODM2Mzg3MThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNh
bGxiYWNrLmNwcCAqLzsgfTsKKwkJMkE4MzYzOEExOEQ3RDBGRTAwMDBFQkNDIC8qIEZ1bGxHQ0Fj
dGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJBODM2Mzg4MThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNr
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkFB
QUEzMTIxOEJENDlEMTAwMzk0Q0M4IC8qIFN0cnVjdHVyZUlEQmxvYi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFBQUEzMTAxOEJENDlEMTAwMzk0Q0M4
IC8qIFN0cnVjdHVyZUlEQmxvYi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTJBQUNFNjNDMThDQTVBMDMwMEVEMDE5MSAvKiBHQ0FjdGl2aXR5Q2Fs
bGJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkFBQ0U2M0ExOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi87IH07
CiAJCTJBQUNFNjNEMThDQTVBMDMwMEVEMDE5MSAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBQUNFNjNCMThDQTVB
MDMwMEVEMDE5MSAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTQzMyw2ICsxNDMzLDcgQEAKIAkJQzJDOEQw
MzExNEEzQ0VGQzAwNTc4RTY1IC8qIEhlYXBCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJDOEQwMkYxNEEzQ0VGQzAwNTc4RTY1IC8qIEhlYXBC
bG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUMyQ0YzOUMxMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkNGMzlCRjE2RTE1QTgx
MDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0Lm1tICovOyB9OwogCQlDMkNGMzlDMjE2RTE1
QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkNGMzlDMDE2RTE1QTgxMDBERDY5QkUgLyogSlNB
UElXcmFwcGVyT2JqZWN0LmggKi87IH07CisJCUMyREE3NzgzMThFMjU5OTkwMDY2RkNCNiAvKiBI
ZWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzJEQTc3ODIxOEUyNTk5OTAwNjZGQ0I2IC8qIEhlYXBJbmxpbmVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzJERjQ0MkYxNzA3QUMwMTAw
QTVDQTk2IC8qIFN1cGVyUmVnaW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEMyREY0NDJEMTcwN0FDMDEwMEE1Q0E5NiAvKiBTdXBlclJlZ2lvbi5j
cHAgKi87IH07CiAJCUMyREY0NDMwMTcwN0FDMDEwMEE1Q0E5NiAvKiBTdXBlclJlZ2lvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJERjQ0MkUxNzA3
QUMwMTAwQTVDQTk2IC8qIFN1cGVyUmVnaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzJFNTI2QkQxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBU
aW1lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
MkU1MjZCQjE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmNwcCAqLzsgfTsKQEAgLTIyNzMs
MTAgKzIyNzQsMTAgQEAKIAkJMkE2ODI5NUExODc1RjgwNTAwQjZDM0UyIC8qIENvcHlXcml0ZUJh
cnJpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29weVdyaXRlQmFycmll
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQTZGNDYyNTE3RTk1OUNFMDBDNDVD
OTggLyogSGVhcE9wZXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBI
ZWFwT3BlcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBN0E1OEVFMTgw
OEE0QzQwMDIwQkRGNyAvKiBEZWZlckdDLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IERlZmVyR0MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotICAgICAg
IDJBODM2MzgzMThEN0QwRUUwMDAwRUJDQyAvKiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVkZW5HQ0FjdGl2aXR5Q2FsbGJh
Y2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotICAgICAgIDJBODM2Mzg0MThEN0Qw
RUUwMDAwRUJDQyAvKiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLSAgICAgICAyQTgzNjM4NzE4RDdEMEZFMDAwMEVCQ0MgLyogRnVsbEdDQWN0
aXZpdHlDYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBG
dWxsR0NBY3Rpdml0eUNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLSAg
ICAgICAyQTgzNjM4ODE4RDdEMEZFMDAwMEVCQ0MgLyogRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGdWxsR0NBY3Rpdml0eUNhbGxiYWNr
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJBODM2MzgzMThEN0QwRUUwMDAwRUJD
QyAvKiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkyQTgzNjM4NDE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlD
YWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFZGVuR0NBY3Rpdml0
eUNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJBODM2Mzg3MThEN0Qw
RkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkyQTgzNjM4ODE4RDdEMEZFMDAwMEVCQ0MgLyogRnVsbEdD
QWN0aXZpdHlDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGdWxs
R0NBY3Rpdml0eUNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBQUFB
MzEwMThCRDQ5RDEwMDM5NENDOCAvKiBTdHJ1Y3R1cmVJREJsb2IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlSURCbG9iLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTJBQUNFNjNBMThDQTVBMDMwMEVEMDE5MSAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2su
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR0NBY3Rpdml0eUNhbGxi
YWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkFBQ0U2M0IxOENBNUEwMzAw
RUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBHQ0FjdGl2aXR5Q2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTI5NzIsNiArMjk3Myw3IEBACiAJCUMyQzhEMDJGMTRBM0NFRkMwMDU3OEU2NSAvKiBIZWFw
QmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcEJsb2NrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyQ0YzOUJGMTZFMTVBODEwMERENjlCRSAvKiBK
U0FQSVdyYXBwZXJPYmplY3QubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBKU0FQSVdyYXBwZXJPYmplY3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUMyQ0YzOUMwMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBUElXcmFwcGVyT2JqZWN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyREE3NzgyMThFMjU5OTkwMDY2RkNCNiAvKiBIZWFwSW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwSW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkRGNDQyRDE3MDdBQzAxMDBBNUNBOTYgLyog
U3VwZXJSZWdpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3Vw
ZXJSZWdpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkRGNDQyRTE3MDdB
QzAxMDBBNUNBOTYgLyogU3VwZXJSZWdpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU3VwZXJSZWdpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJFNTI2
QkIxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBIZWFwVGltZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMzUxMyw2ICszNTE1LDcgQEAKIAkJMTQyRTMxMkExMzRGRjBBNjAwQUZBREI1IC8qIGhl
YXAgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUMyREE3
NzgyMThFMjU5OTkwMDY2RkNCNiAvKiBIZWFwSW5saW5lcy5oICovLAogCQkJCUFEREIxRjYyMThE
NzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0LmggKi8sCiAJCQkJMkFBQ0U2M0ExOENBNUEw
MzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8sCiAJCQkJMkFBQ0U2M0IxOENB
NUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFjay5oICovLApAQCAtMzYxMSwxMCArMzYx
NCwxMCBAQAogCQkJCTJBNEVDOTBBMTg2MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZm
ZXIuaCAqLywKIAkJCQkwRkM4MTUwODE0MDQzQkNBMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3Vw
cG9ydC5jcHAgKi8sCiAJCQkJMEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAzIC8qIFdyaXRlQmFycmll
clN1cHBvcnQuaCAqLywKLSAgICAgICAgICAgICAgIDJBODM2MzgzMThEN0QwRUUwMDAwRUJDQyAv
KiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKLSAgICAgICAgICAgICAgIDJBODM2Mzg0
MThEN0QwRUUwMDAwRUJDQyAvKiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmggKi8sCi0gICAgICAg
ICAgICAgICAyQTgzNjM4NzE4RDdEMEZFMDAwMEVCQ0MgLyogRnVsbEdDQWN0aXZpdHlDYWxsYmFj
ay5jcHAgKi8sCi0gICAgICAgICAgICAgICAyQTgzNjM4ODE4RDdEMEZFMDAwMEVCQ0MgLyogRnVs
bEdDQWN0aXZpdHlDYWxsYmFjay5oICovLAorCQkJCTJBODM2MzgzMThEN0QwRUUwMDAwRUJDQyAv
KiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKKwkJCQkyQTgzNjM4NDE4RDdEMEVFMDAw
MEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5oICovLAorCQkJCTJBODM2Mzg3MThEN0Qw
RkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKKwkJCQkyQTgzNjM4
ODE4RDdEMEZFMDAwMEVCQ0MgLyogRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5oICovLAogCQkJKTsK
IAkJCXBhdGggPSBoZWFwOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTQ5MzQsOSAr
NDkzNywxMCBAQAogCQkJCUExQTAwOUMxMTgzMUEyNkUwMENGODcxMSAvKiBBUk02NEFzc2VtYmxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZEM0IyQzQxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NDAzMjAxOEJGRkJFMTAwNUEwODExIC8q
IEluc3BlY3RvckFnZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlDMkRBNzc4MzE4RTI1OTk5MDA2
NkZDQjYgLyogSGVhcElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBQUNFNjNEMThDQTVB
MDMwMEVEMDE5MSAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAotICAgICAg
ICAgICAgICAgMkE4MzYzODYxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJh
Y2suaCBpbiBIZWFkZXJzICovLAotICAgICAgICAgICAgICAgMkE4MzYzOEExOEQ3RDBGRTAwMDBF
QkNDIC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTJBODM2
Mzg2MThEN0QwRUUwMDAwRUJDQyAvKiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkyQTgzNjM4QTE4RDdEMEZFMDAwMEVCQ0MgLyogRnVsbEdDQWN0aXZpdHlDYWxs
YmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkFBQUEzMTIxOEJENDlEMTAwMzk0Q0M4IC8qIFN0
cnVjdHVyZUlEQmxvYi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU0RThFQjExOEJGRkJCRTAwNTU2
RDI4IC8qIEdDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFE
RDE0NTBGRERFQTk4MDAwNkVFQzIgLyogQVJNdjdBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLApA
QCAtNjI0MSw3ICs2MjQ1LDcgQEAKIAkJCQkxNDdGMzlDMjEwN0VDMzc2MDA0MjdBNDggLyogQ29t
cGxldGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDZCMTZEODEyRUI1QjU5MDAxQkVDMUIg
LyogQ29uc2VydmF0aXZlUm9vdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVGRDAwNzkxODlC
MDUxMDAwNjMzMjMxIC8qIENvbnNvbGVNZXNzYWdlLmNwcCBpbiBTb3VyY2VzICovLAotICAgICAg
ICAgICAgICAgMkE4MzYzODUxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJh
Y2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMkE4MzYzODUxOEQ3RDBFRTAwMDBFQkNDIC8qIEVk
ZW5HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4MkUxMDdF
QzA1NzAwMTNFN0IyIC8qIENvbnN0cnVjdERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3
RDIzRjExODkxQjVCNDAwMzFDN0ZBIC8qIENvbnRlbnRTZWFyY2hVdGlsaXRpZXMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQzI0MDMwNTUxNEI0MDRFNjAwNzlFQjY0IC8qIENvcGllZFNwYWNlLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtNjU0Miw3ICs2NTQ2LDcgQEAKIAkJCQkwRjkxOUQxMDE1N0Yz
MzI5MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzI5OUQ5RDE3RDEyODM3MDA1RjVGRjkgLyogSlNTZXQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTc5MERENkYxODJGNDk5NzAwNTg4ODA3IC8qIEpTU2V0SXRlcmF0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCi0gICAgICAgICAgICAgICAyQTgzNjM4OTE4RDdEMEZFMDAwMEVCQ0MgLyog
RnVsbEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyQTgzNjM4OTE4
RDdEMEZFMDAwMEVCQ0MgLyogRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDI4MDgzQTEwN0VDMDc1MDAxM0U3QjIgLyogSlNTdGFjay5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDdGMzlENTEwN0VDMzc2MDA0MjdBNDggLyogSlNTdHJpbmcuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMjYwMEI1QTYxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVy
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJ
KHJldmlzaW9uIDE2NjEwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDE2LDYgKzEwMTYsMTkgQEAgdm9pZCBIZWFwOjpzd2VlcEFy
cmF5QnVmZmVycygpCiAgICAgbV9hcnJheUJ1ZmZlcnMuc3dlZXAoKTsKIH0KIAorc3RydWN0IE1h
cmtlZEJsb2NrU25hcHNob3RGdW5jdG9yIDogcHVibGljIE1hcmtlZEJsb2NrOjpWb2lkRnVuY3Rv
ciB7CisgICAgTWFya2VkQmxvY2tTbmFwc2hvdEZ1bmN0b3IoVmVjdG9yPE1hcmtlZEJsb2NrKj4m
IGJsb2NrcykgCisgICAgICAgIDogbV9pbmRleCgwKSAKKyAgICAgICAgLCBtX2Jsb2NrcyhibG9j
a3MpCisgICAgeworICAgIH0KKworICAgIHZvaWQgb3BlcmF0b3IoKShNYXJrZWRCbG9jayogYmxv
Y2spIHsgbV9ibG9ja3NbbV9pbmRleCsrXSA9IGJsb2NrOyB9CisKKyAgICBzaXplX3QgbV9pbmRl
eDsKKyAgICBWZWN0b3I8TWFya2VkQmxvY2sqPiYgbV9ibG9ja3M7Cit9OworCiB2b2lkIEhlYXA6
OnNuYXBzaG90TWFya2VkU3BhY2UoKQogewogICAgIEdDUEhBU0UoU25hcHNob3RNYXJrZWRTcGFj
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAxNjYxMDQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5
LDU0NiArNDksMzI3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0gICAgY2xhc3MgQ29waWVkU3Bh
Y2U7Ci0gICAgY2xhc3MgQ29kZUJsb2NrOwotICAgIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwotICAg
IGNsYXNzIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2s7Ci0gICAgY2xhc3MgRnVsbEdDQWN0aXZpdHlD
YWxsYmFjazsKLSAgICBjbGFzcyBHQ0FjdGl2aXR5Q2FsbGJhY2s7Ci0gICAgY2xhc3MgR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lOwotICAgIGNsYXNzIEdsb2JhbENvZGVCbG9jazsKLSAgICBjbGFzcyBI
ZWFwOwotICAgIGNsYXNzIEhlYXBSb290VmlzaXRvcjsKLSAgICBjbGFzcyBJbmNyZW1lbnRhbFN3
ZWVwZXI7Ci0gICAgY2xhc3MgSklUU3R1YlJvdXRpbmU7Ci0gICAgY2xhc3MgSlNDZWxsOwotICAg
IGNsYXNzIFZNOwotICAgIGNsYXNzIEpTU3RhY2s7Ci0gICAgY2xhc3MgSlNWYWx1ZTsKLSAgICBj
bGFzcyBMaXZlT2JqZWN0SXRlcmF0b3I7Ci0gICAgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwotICAgIGNsYXNzIE1hcmtlZEFyZ3VtZW50QnVmZmVyOwotICAgIGNsYXNzIFdlYWtHQ0hhbmRs
ZVBvb2w7Ci0gICAgY2xhc3MgU2xvdFZpc2l0b3I7Ci0KLSAgICB0eXBlZGVmIHN0ZDo6cGFpcjxK
U1ZhbHVlLCBXVEY6OlN0cmluZz4gVmFsdWVTdHJpbmdQYWlyOwotICAgIHR5cGVkZWYgSGFzaENv
dW50ZWRTZXQ8SlNDZWxsKj4gUHJvdGVjdENvdW50U2V0OwotICAgIHR5cGVkZWYgSGFzaENvdW50
ZWRTZXQ8Y29uc3QgY2hhcio+IFR5cGVDb3VudFNldDsKLQotICAgIGVudW0gSGVhcFR5cGUgeyBT
bWFsbEhlYXAsIExhcmdlSGVhcCB9OwotCi0gICAgY2xhc3MgSGVhcCB7Ci0gICAgICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEhlYXApOwotICAgIHB1YmxpYzoKLSAgICAgICAgZnJpZW5kIGNsYXNz
IEpJVDsKLSAgICAgICAgZnJpZW5kIGNsYXNzIERGRzo6U3BlY3VsYXRpdmVKSVQ7Ci0gICAgICAg
IGZyaWVuZCBjbGFzcyBHQ1RocmVhZFNoYXJlZERhdGE7Ci0gICAgICAgIHN0YXRpYyBIZWFwKiBo
ZWFwKGNvbnN0IEpTVmFsdWUpOyAvLyAwIGZvciBpbW1lZGlhdGUgdmFsdWVzCi0gICAgICAgIHN0
YXRpYyBIZWFwKiBoZWFwKGNvbnN0IEpTQ2VsbCopOwotCi0gICAgICAgIC8vIFRoaXMgY29uc3Rh
bnQgZGV0ZXJtaW5lcyBob3cgbWFueSBibG9ja3Mgd2UgaXRlcmF0ZSBiZXR3ZWVuIGNoZWNrcyBv
ZiBvdXIgCi0gICAgICAgIC8vIGRlYWRsaW5lIHdoZW4gY2FsbGluZyBIZWFwOjppc1BhZ2VkT3V0
LiBEZWNyZWFzaW5nIGl0IHdpbGwgY2F1c2UgdXMgdG8gZGV0ZWN0IAotICAgICAgICAvLyBvdmVy
c3RlcHBpbmcgb3VyIGRlYWRsaW5lIG1vcmUgcXVpY2tseSwgd2hpbGUgaW5jcmVhc2luZyBpdCB3
aWxsIGNhdXNlIAotICAgICAgICAvLyBvdXIgc2NhbiB0byBydW4gZmFzdGVyLiAKLSAgICAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfdGltZUNoZWNrUmVzb2x1dGlvbiA9IDE2OwotCi0gICAg
ICAgIHN0YXRpYyBib29sIGlzTGl2ZShjb25zdCB2b2lkKik7Ci0gICAgICAgIHN0YXRpYyBib29s
IGlzTWFya2VkKGNvbnN0IHZvaWQqKTsKLSAgICAgICAgc3RhdGljIGJvb2wgdGVzdEFuZFNldE1h
cmtlZChjb25zdCB2b2lkKik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHNldE1hcmtlZChjb25zdCB2
b2lkKik7Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRUb1JlbWVtYmVyZWRT
ZXQoY29uc3QgSlNDZWxsKik7Ci0gICAgICAgIGJvb2wgaXNJblJlbWVtYmVyZWRTZXQoY29uc3Qg
SlNDZWxsKiBjZWxsKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoY2VsbCk7
Ci0gICAgICAgICAgICBBU1NFUlQoIU9wdGlvbnM6OmVuYWJsZUNvbmN1cnJlbnRKSVQoKSB8fCAh
aXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICAgICAgICAgIHJldHVybiBNYXJrZWRCbG9jazo6
YmxvY2tGb3IoY2VsbCktPmlzUmVtZW1iZXJlZChjZWxsKTsKLSAgICAgICAgfQotICAgICAgICBz
dGF0aWMgYm9vbCBpc1dyaXRlQmFycmllckVuYWJsZWQoKTsKLSAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKik7Ci0gICAgICAgIHZvaWQgd3Jp
dGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIEpTVmFsdWUpOwotICAgICAgICB2b2lkIHdyaXRlQmFy
cmllcihjb25zdCBKU0NlbGwqLCBKU0NlbGwqKTsKLQotICAgICAgICBXcml0ZUJhcnJpZXJCdWZm
ZXImIHdyaXRlQmFycmllckJ1ZmZlcigpIHsgcmV0dXJuIG1fd3JpdGVCYXJyaWVyQnVmZmVyOyB9
Ci0gICAgICAgIHZvaWQgZmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoSlNDZWxsKik7Ci0KLSAgICAg
ICAgSGVhcChWTSosIEhlYXBUeXBlKTsKLSAgICAgICAgfkhlYXAoKTsKLSAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwotCi0gICAgICAgIFZNKiB2
bSgpIGNvbnN0IHsgcmV0dXJuIG1fdm07IH0KLSAgICAgICAgTWFya2VkU3BhY2UmIG9iamVjdFNw
YWNlKCkgeyByZXR1cm4gbV9vYmplY3RTcGFjZTsgfQotICAgICAgICBNYWNoaW5lVGhyZWFkcyYg
bWFjaGluZVRocmVhZHMoKSB7IHJldHVybiBtX21hY2hpbmVUaHJlYWRzOyB9Ci0KLSAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgR0NBY3Rpdml0eUNhbGxiYWNrKiBmdWxsQWN0aXZpdHlDYWxsYmFj
aygpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2aXR5Q2FsbGJhY2sqIGVkZW5B
Y3Rpdml0eUNhbGxiYWNrKCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0RnVs
bEFjdGl2aXR5Q2FsbGJhY2soUGFzc1JlZlB0cjxGdWxsR0NBY3Rpdml0eUNhbGxiYWNrPik7Ci0g
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0RWRlbkFjdGl2aXR5Q2FsbGJhY2soUGFz
c1JlZlB0cjxFZGVuR0NBY3Rpdml0eUNhbGxiYWNrPik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgc2V0R2FyYmFnZUNvbGxlY3Rpb25UaW1lckVuYWJsZWQoYm9vbCk7Ci0KLSAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgSW5jcmVtZW50YWxTd2VlcGVyKiBzd2VlcGVyKCk7Ci0gICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0SW5jcmVtZW50YWxTd2VlcGVyKFBhc3NPd25Q
dHI8SW5jcmVtZW50YWxTd2VlcGVyPik7Ci0KLSAgICAgICAgLy8gdHJ1ZSBpZiBjb2xsZWN0aW9u
IGlzIGluIHByb2dyZXNzCi0gICAgICAgIGlubGluZSBib29sIGlzQ29sbGVjdGluZygpOwotICAg
ICAgICBpbmxpbmUgSGVhcE9wZXJhdGlvbiBvcGVyYXRpb25JblByb2dyZXNzKCkgeyByZXR1cm4g
bV9vcGVyYXRpb25JblByb2dyZXNzOyB9Ci0gICAgICAgIC8vIHRydWUgaWYgYW4gYWxsb2NhdGlv
biBvciBjb2xsZWN0aW9uIGlzIGluIHByb2dyZXNzCi0gICAgICAgIGlubGluZSBib29sIGlzQnVz
eSgpOwotICAgICAgICAKLSAgICAgICAgTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3JPYmpl
Y3RXaXRob3V0RGVzdHJ1Y3RvcihzaXplX3QgYnl0ZXMpIHsgcmV0dXJuIG1fb2JqZWN0U3BhY2Uu
YWxsb2NhdG9yRm9yKGJ5dGVzKTsgfQotICAgICAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRv
ckZvck9iamVjdFdpdGhOb3JtYWxEZXN0cnVjdG9yKHNpemVfdCBieXRlcykgeyByZXR1cm4gbV9v
YmplY3RTcGFjZS5ub3JtYWxEZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGJ5dGVzKTsgfQotICAgICAg
ICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvckZvck9iamVjdFdpdGhJbW1vcnRhbFN0cnVjdHVy
ZURlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKSB7IHJldHVybiBtX29iamVjdFNwYWNlLmltbW9ydGFs
U3RydWN0dXJlRGVzdHJ1Y3RvckFsbG9jYXRvckZvcihieXRlcyk7IH0KLSAgICAgICAgQ29waWVk
QWxsb2NhdG9yJiBzdG9yYWdlQWxsb2NhdG9yKCkgeyByZXR1cm4gbV9zdG9yYWdlU3BhY2UuYWxs
b2NhdG9yKCk7IH0KLSAgICAgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5QWxsb2NhdGVTdG9yYWdlKEpT
Q2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90LCB2b2lkKiopOwotICAgICAgICBDaGVja2VkQm9v
bGVhbiB0cnlSZWFsbG9jYXRlU3RvcmFnZShKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqKiwg
c2l6ZV90LCBzaXplX3QpOwotICAgICAgICB2b2lkIGFzY3JpYmVPd25lcihKU0NlbGwqIGludGVu
ZGVkT3duZXIsIHZvaWQqKTsKLQotICAgICAgICB0eXBlZGVmIHZvaWQgKCpGaW5hbGl6ZXIpKEpT
Q2VsbCopOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZEZpbmFsaXplcihKU0Nl
bGwqLCBGaW5hbGl6ZXIpOwotICAgICAgICB2b2lkIGFkZENvbXBpbGVkQ29kZShFeGVjdXRhYmxl
QmFzZSopOwotCi0gICAgICAgIHZvaWQgbm90aWZ5SXNTYWZlVG9Db2xsZWN0KCkgeyBtX2lzU2Fm
ZVRvQ29sbGVjdCA9IHRydWU7IH0KLSAgICAgICAgYm9vbCBpc1NhZmVUb0NvbGxlY3QoKSBjb25z
dCB7IHJldHVybiBtX2lzU2FmZVRvQ29sbGVjdDsgfQotCi0gICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgY29sbGVjdEFsbEdhcmJhZ2UoKTsKLSAgICAgICAgYm9vbCBzaG91bGRDb2xsZWN0
KCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29sbGVjdChIZWFwT3BlcmF0aW9u
IGNvbGxlY3Rpb25UeXBlID0gQW55Q29sbGVjdGlvbik7Ci0gICAgICAgIGJvb2wgY29sbGVjdElm
TmVjZXNzYXJ5T3JEZWZlcigpOyAvLyBSZXR1cm5zIHRydWUgaWYgaXQgZGlkIGNvbGxlY3QuCi0K
LSAgICAgICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZV90IGNvc3QpOwotICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlcG9ydEFiYW5kb25lZE9iamVjdEdyYXBoKCk7Ci0K
LSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcm90ZWN0KEpTVmFsdWUpOwotICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBib29sIHVucHJvdGVjdChKU1ZhbHVlKTsgLy8gVHJ1ZSB3aGVu
IHRoZSBwcm90ZWN0IGNvdW50IGRyb3BzIHRvIDAuCi0gICAgICAgIAotICAgICAgICBzaXplX3Qg
ZXh0cmFTaXplKCk7IC8vIGV4dHJhIG1lbW9yeSB1c2FnZSBvdXRzaWRlIG9mIHBhZ2VzIGFsbG9j
YXRlZCBieSB0aGUgaGVhcAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3Qgc2l6ZSgp
OwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3QgY2FwYWNpdHkoKTsKLSAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IG9iamVjdENvdW50KCk7Ci0gICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHNpemVfdCBnbG9iYWxPYmplY3RDb3VudCgpOwotICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSBzaXplX3QgcHJvdGVjdGVkT2JqZWN0Q291bnQoKTsKLSAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc2l6ZV90IHByb3RlY3RlZEdsb2JhbE9iamVjdENvdW50KCk7Ci0gICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIFBhc3NPd25QdHI8VHlwZUNvdW50U2V0PiBwcm90ZWN0ZWRPYmplY3RU
eXBlQ291bnRzKCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFBhc3NPd25QdHI8VHlwZUNv
dW50U2V0PiBvYmplY3RUeXBlQ291bnRzKCk7Ci0gICAgICAgIHZvaWQgc2hvd1N0YXRpc3RpY3Mo
KTsKLQotICAgICAgICB2b2lkIHB1c2hUZW1wU29ydFZlY3RvcihWZWN0b3I8VmFsdWVTdHJpbmdQ
YWlyLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4qKTsKLSAgICAgICAgdm9pZCBwb3BUZW1wU29y
dFZlY3RvcihWZWN0b3I8VmFsdWVTdHJpbmdQYWlyLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4q
KTsKLSAgICAKLSAgICAgICAgSGFzaFNldDxNYXJrZWRBcmd1bWVudEJ1ZmZlcio+JiBtYXJrTGlz
dFNldCgpIHsgaWYgKCFtX21hcmtMaXN0U2V0KSBtX21hcmtMaXN0U2V0ID0gYWRvcHRQdHIobmV3
IEhhc2hTZXQ8TWFya2VkQXJndW1lbnRCdWZmZXIqPik7IHJldHVybiAqbV9tYXJrTGlzdFNldDsg
fQotICAgICAgICAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdHlwZW5hbWUg
RnVuY3Rvcjo6UmV0dXJuVHlwZSBmb3JFYWNoUHJvdGVjdGVkQ2VsbChGdW5jdG9yJik7Ci0gICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5
cGUgZm9yRWFjaFByb3RlY3RlZENlbGwoKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4gaW5saW5lIHZvaWQgZm9yRWFjaENvZGVCbG9jayhGdW5jdG9yJik7Ci0KLSAgICAgICAg
SGFuZGxlU2V0KiBoYW5kbGVTZXQoKSB7IHJldHVybiAmbV9oYW5kbGVTZXQ7IH0KLSAgICAgICAg
SGFuZGxlU3RhY2sqIGhhbmRsZVN0YWNrKCkgeyByZXR1cm4gJm1faGFuZGxlU3RhY2s7IH0KLQot
ICAgICAgICB2b2lkIHdpbGxTdGFydEl0ZXJhdGluZygpOwotICAgICAgICB2b2lkIGRpZEZpbmlz
aEl0ZXJhdGluZygpOwotICAgICAgICB2b2lkIGdldENvbnNlcnZhdGl2ZVJlZ2lzdGVyUm9vdHMo
SGFzaFNldDxKU0NlbGwqPiYgcm9vdHMpOwotCi0gICAgICAgIGRvdWJsZSBsYXN0RnVsbEdDTGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RnVsbEdDTGVuZ3RoOyB9Ci0gICAgICAgIGRvdWJs
ZSBsYXN0RWRlbkdDTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RWRlbkdDTGVuZ3RoOyB9
Ci0gICAgICAgIHZvaWQgaW5jcmVhc2VMYXN0RnVsbEdDTGVuZ3RoKGRvdWJsZSBhbW91bnQpIHsg
bV9sYXN0RnVsbEdDTGVuZ3RoICs9IGFtb3VudDsgfQotCi0gICAgICAgIHNpemVfdCBzaXplQmVm
b3JlTGFzdEVkZW5Db2xsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zaXplQmVmb3JlTGFzdEVk
ZW5Db2xsZWN0OyB9Ci0gICAgICAgIHNpemVfdCBzaXplQWZ0ZXJMYXN0RWRlbkNvbGxlY3Rpb24o
KSBjb25zdCB7IHJldHVybiBtX3NpemVBZnRlckxhc3RFZGVuQ29sbGVjdDsgfQotICAgICAgICBz
aXplX3Qgc2l6ZUJlZm9yZUxhc3RGdWxsQ29sbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZUJlZm9yZUxhc3RGdWxsQ29sbGVjdDsgfQotICAgICAgICBzaXplX3Qgc2l6ZUFmdGVyTGFzdEZ1
bGxDb2xsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zaXplQWZ0ZXJMYXN0RnVsbENvbGxlY3Q7
IH0KLQotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGRlbGV0ZUFsbENvbXBpbGVkQ29k
ZSgpOwotICAgICAgICB2b2lkIGRlbGV0ZUFsbFVubGlua2VkRnVuY3Rpb25Db2RlKCk7Ci0KLSAg
ICAgICAgdm9pZCBkaWRBbGxvY2F0ZShzaXplX3QpOwotICAgICAgICB2b2lkIGRpZEFiYW5kb24o
c2l6ZV90KTsKLQotICAgICAgICBib29sIGlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5lKTsKLSAg
ICAgICAgCi0gICAgICAgIGNvbnN0IEpJVFN0dWJSb3V0aW5lU2V0JiBqaXRTdHViUm91dGluZXMo
KSB7IHJldHVybiBtX2ppdFN0dWJSb3V0aW5lczsgfQotICAgICAgICAKLSAgICAgICAgdm9pZCBh
ZGRSZWZlcmVuY2UoSlNDZWxsKiwgQXJyYXlCdWZmZXIqKTsKLSAgICAgICAgCi0gICAgICAgIGJv
b2wgaXNEZWZlcnJlZCgpIGNvbnN0IHsgcmV0dXJuICEhbV9kZWZlcnJhbERlcHRoIHx8IE9wdGlv
bnM6OmRpc2FibGVHQygpOyB9CitjbGFzcyBDb3BpZWRTcGFjZTsKK2NsYXNzIENvZGVCbG9jazsK
K2NsYXNzIEV4ZWN1dGFibGVCYXNlOworY2xhc3MgRWRlbkdDQWN0aXZpdHlDYWxsYmFjazsKK2Ns
YXNzIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2s7CitjbGFzcyBHQ0FjdGl2aXR5Q2FsbGJhY2s7Citj
bGFzcyBHQ0F3YXJlSklUU3R1YlJvdXRpbmU7CitjbGFzcyBHbG9iYWxDb2RlQmxvY2s7CitjbGFz
cyBIZWFwOworY2xhc3MgSGVhcFJvb3RWaXNpdG9yOworY2xhc3MgSW5jcmVtZW50YWxTd2VlcGVy
OworY2xhc3MgSklUU3R1YlJvdXRpbmU7CitjbGFzcyBKU0NlbGw7CitjbGFzcyBWTTsKK2NsYXNz
IEpTU3RhY2s7CitjbGFzcyBKU1ZhbHVlOworY2xhc3MgTGl2ZU9iamVjdEl0ZXJhdG9yOworY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworY2xhc3MgTWFya2VkQXJndW1lbnRCdWZmZXI7Citj
bGFzcyBXZWFrR0NIYW5kbGVQb29sOworY2xhc3MgU2xvdFZpc2l0b3I7CisKK3R5cGVkZWYgc3Rk
OjpwYWlyPEpTVmFsdWUsIFdURjo6U3RyaW5nPiBWYWx1ZVN0cmluZ1BhaXI7Cit0eXBlZGVmIEhh
c2hDb3VudGVkU2V0PEpTQ2VsbCo+IFByb3RlY3RDb3VudFNldDsKK3R5cGVkZWYgSGFzaENvdW50
ZWRTZXQ8Y29uc3QgY2hhcio+IFR5cGVDb3VudFNldDsKKworZW51bSBIZWFwVHlwZSB7IFNtYWxs
SGVhcCwgTGFyZ2VIZWFwIH07CisKK2NsYXNzIEhlYXAgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEhlYXApOworcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBKSVQ7CisgICAgZnJpZW5kIGNs
YXNzIERGRzo6U3BlY3VsYXRpdmVKSVQ7CisgICAgZnJpZW5kIGNsYXNzIEdDVGhyZWFkU2hhcmVk
RGF0YTsKKyAgICBzdGF0aWMgSGVhcCogaGVhcChjb25zdCBKU1ZhbHVlKTsgLy8gMCBmb3IgaW1t
ZWRpYXRlIHZhbHVlcworICAgIHN0YXRpYyBIZWFwKiBoZWFwKGNvbnN0IEpTQ2VsbCopOworCisg
ICAgLy8gVGhpcyBjb25zdGFudCBkZXRlcm1pbmVzIGhvdyBtYW55IGJsb2NrcyB3ZSBpdGVyYXRl
IGJldHdlZW4gY2hlY2tzIG9mIG91ciAKKyAgICAvLyBkZWFkbGluZSB3aGVuIGNhbGxpbmcgSGVh
cDo6aXNQYWdlZE91dC4gRGVjcmVhc2luZyBpdCB3aWxsIGNhdXNlIHVzIHRvIGRldGVjdCAKKyAg
ICAvLyBvdmVyc3RlcHBpbmcgb3VyIGRlYWRsaW5lIG1vcmUgcXVpY2tseSwgd2hpbGUgaW5jcmVh
c2luZyBpdCB3aWxsIGNhdXNlIAorICAgIC8vIG91ciBzY2FuIHRvIHJ1biBmYXN0ZXIuIAorICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3RpbWVDaGVja1Jlc29sdXRpb24gPSAxNjsKKworICAg
IHN0YXRpYyBib29sIGlzTGl2ZShjb25zdCB2b2lkKik7CisgICAgc3RhdGljIGJvb2wgaXNNYXJr
ZWQoY29uc3Qgdm9pZCopOworICAgIHN0YXRpYyBib29sIHRlc3RBbmRTZXRNYXJrZWQoY29uc3Qg
dm9pZCopOworICAgIHN0YXRpYyB2b2lkIHNldE1hcmtlZChjb25zdCB2b2lkKik7CisgICAgc3Rh
dGljIGJvb2wgaXNSZW1lbWJlcmVkKGNvbnN0IHZvaWQqKTsKKworICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgYWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2VsbCopOworICAgIGJvb2wgaXNJ
blJlbWVtYmVyZWRTZXQoY29uc3QgSlNDZWxsKikgY29uc3Q7CisgICAgc3RhdGljIGJvb2wgaXNX
cml0ZUJhcnJpZXJFbmFibGVkKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3cml0ZUJh
cnJpZXIoY29uc3QgSlNDZWxsKik7CisgICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxs
KiwgSlNWYWx1ZSk7CisgICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwgSlNDZWxs
Kik7CisKKyAgICBXcml0ZUJhcnJpZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlcigpIHsgcmV0
dXJuIG1fd3JpdGVCYXJyaWVyQnVmZmVyOyB9CisgICAgdm9pZCBmbHVzaFdyaXRlQmFycmllckJ1
ZmZlcihKU0NlbGwqKTsKKworICAgIEhlYXAoVk0qLCBIZWFwVHlwZSk7CisgICAgfkhlYXAoKTsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7CisKKyAg
ICBWTSogdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9CisgICAgTWFya2VkU3BhY2UmIG9iamVj
dFNwYWNlKCkgeyByZXR1cm4gbV9vYmplY3RTcGFjZTsgfQorICAgIE1hY2hpbmVUaHJlYWRzJiBt
YWNoaW5lVGhyZWFkcygpIHsgcmV0dXJuIG1fbWFjaGluZVRocmVhZHM7IH0KKworICAgIEpTX0VY
UE9SVF9QUklWQVRFIEdDQWN0aXZpdHlDYWxsYmFjayogZnVsbEFjdGl2aXR5Q2FsbGJhY2soKTsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2aXR5Q2FsbGJhY2sqIGVkZW5BY3Rpdml0eUNh
bGxiYWNrKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRGdWxsQWN0aXZpdHlDYWxs
YmFjayhQYXNzUmVmUHRyPEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2s+KTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHNldEVkZW5BY3Rpdml0eUNhbGxiYWNrKFBhc3NSZWZQdHI8RWRlbkdDQWN0
aXZpdHlDYWxsYmFjaz4pOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0R2FyYmFnZUNv
bGxlY3Rpb25UaW1lckVuYWJsZWQoYm9vbCk7CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSBJbmNy
ZW1lbnRhbFN3ZWVwZXIqIHN3ZWVwZXIoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNl
dEluY3JlbWVudGFsU3dlZXBlcihQYXNzT3duUHRyPEluY3JlbWVudGFsU3dlZXBlcj4pOworCisg
ICAgLy8gdHJ1ZSBpZiBjb2xsZWN0aW9uIGlzIGluIHByb2dyZXNzCisgICAgYm9vbCBpc0NvbGxl
Y3RpbmcoKTsKKyAgICBIZWFwT3BlcmF0aW9uIG9wZXJhdGlvbkluUHJvZ3Jlc3MoKSB7IHJldHVy
biBtX29wZXJhdGlvbkluUHJvZ3Jlc3M7IH0KKyAgICAvLyB0cnVlIGlmIGFuIGFsbG9jYXRpb24g
b3IgY29sbGVjdGlvbiBpcyBpbiBwcm9ncmVzcworICAgIGJvb2wgaXNCdXN5KCk7CisgICAgCisg
ICAgTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3Rvcihz
aXplX3QgYnl0ZXMpIHsgcmV0dXJuIG1fb2JqZWN0U3BhY2UuYWxsb2NhdG9yRm9yKGJ5dGVzKTsg
fQorICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yRm9yT2JqZWN0V2l0aE5vcm1hbERlc3Ry
dWN0b3Ioc2l6ZV90IGJ5dGVzKSB7IHJldHVybiBtX29iamVjdFNwYWNlLm5vcm1hbERlc3RydWN0
b3JBbGxvY2F0b3JGb3IoYnl0ZXMpOyB9CisgICAgTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JG
b3JPYmplY3RXaXRoSW1tb3J0YWxTdHJ1Y3R1cmVEZXN0cnVjdG9yKHNpemVfdCBieXRlcykgeyBy
ZXR1cm4gbV9vYmplY3RTcGFjZS5pbW1vcnRhbFN0cnVjdHVyZURlc3RydWN0b3JBbGxvY2F0b3JG
b3IoYnl0ZXMpOyB9CisgICAgQ29waWVkQWxsb2NhdG9yJiBzdG9yYWdlQWxsb2NhdG9yKCkgeyBy
ZXR1cm4gbV9zdG9yYWdlU3BhY2UuYWxsb2NhdG9yKCk7IH0KKyAgICBDaGVja2VkQm9vbGVhbiB0
cnlBbGxvY2F0ZVN0b3JhZ2UoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QsIHZvaWQqKik7
CisgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5UmVhbGxvY2F0ZVN0b3JhZ2UoSlNDZWxsKiBpbnRlbmRl
ZE93bmVyLCB2b2lkKiosIHNpemVfdCwgc2l6ZV90KTsKKyAgICB2b2lkIGFzY3JpYmVPd25lcihK
U0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqKTsKKworICAgIHR5cGVkZWYgdm9pZCAoKkZpbmFs
aXplcikoSlNDZWxsKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRGaW5hbGl6ZXIo
SlNDZWxsKiwgRmluYWxpemVyKTsKKyAgICB2b2lkIGFkZENvbXBpbGVkQ29kZShFeGVjdXRhYmxl
QmFzZSopOworCisgICAgdm9pZCBub3RpZnlJc1NhZmVUb0NvbGxlY3QoKSB7IG1faXNTYWZlVG9D
b2xsZWN0ID0gdHJ1ZTsgfQorICAgIGJvb2wgaXNTYWZlVG9Db2xsZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9pc1NhZmVUb0NvbGxlY3Q7IH0KKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29s
bGVjdEFsbEdhcmJhZ2UoKTsKKyAgICBib29sIHNob3VsZENvbGxlY3QoKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGNvbGxlY3QoSGVhcE9wZXJhdGlvbiBjb2xsZWN0aW9uVHlwZSA9IEFu
eUNvbGxlY3Rpb24pOworICAgIGJvb2wgY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpOyAvLyBS
ZXR1cm5zIHRydWUgaWYgaXQgZGlkIGNvbGxlY3QuCisKKyAgICB2b2lkIHJlcG9ydEV4dHJhTWVt
b3J5Q29zdChzaXplX3QgY29zdCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRB
YmFuZG9uZWRPYmplY3RHcmFwaCgpOworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcm90
ZWN0KEpTVmFsdWUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgdW5wcm90ZWN0KEpTVmFs
dWUpOyAvLyBUcnVlIHdoZW4gdGhlIHByb3RlY3QgY291bnQgZHJvcHMgdG8gMC4KKyAgICAKKyAg
ICBzaXplX3QgZXh0cmFTaXplKCk7IC8vIGV4dHJhIG1lbW9yeSB1c2FnZSBvdXRzaWRlIG9mIHBh
Z2VzIGFsbG9jYXRlZCBieSB0aGUgaGVhcAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBz
aXplKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGNhcGFjaXR5KCk7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc2l6ZV90IG9iamVjdENvdW50KCk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc2l6ZV90IGdsb2JhbE9iamVjdENvdW50KCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6
ZV90IHByb3RlY3RlZE9iamVjdENvdW50KCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90
IHByb3RlY3RlZEdsb2JhbE9iamVjdENvdW50KCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGFz
c093blB0cjxUeXBlQ291bnRTZXQ+IHByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBQYXNzT3duUHRyPFR5cGVDb3VudFNldD4gb2JqZWN0VHlwZUNvdW50
cygpOworICAgIHZvaWQgc2hvd1N0YXRpc3RpY3MoKTsKKworICAgIHZvaWQgcHVzaFRlbXBTb3J0
VmVjdG9yKFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXIsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93Piop
OworICAgIHZvaWQgcG9wVGVtcFNvcnRWZWN0b3IoVmVjdG9yPFZhbHVlU3RyaW5nUGFpciwgMCwg
VW5zYWZlVmVjdG9yT3ZlcmZsb3c+Kik7CisKKyAgICBIYXNoU2V0PE1hcmtlZEFyZ3VtZW50QnVm
ZmVyKj4mIG1hcmtMaXN0U2V0KCk7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4gdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlwZSBmb3JFYWNoUHJvdGVjdGVkQ2VsbChGdW5j
dG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdHlwZW5hbWUgRnVuY3Rvcjo6
UmV0dXJuVHlwZSBmb3JFYWNoUHJvdGVjdGVkQ2VsbCgpOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENvZGVCbG9jayhGdW5jdG9yJik7CisKKyAgICBIYW5kbGVT
ZXQqIGhhbmRsZVNldCgpIHsgcmV0dXJuICZtX2hhbmRsZVNldDsgfQorICAgIEhhbmRsZVN0YWNr
KiBoYW5kbGVTdGFjaygpIHsgcmV0dXJuICZtX2hhbmRsZVN0YWNrOyB9CisKKyAgICB2b2lkIHdp
bGxTdGFydEl0ZXJhdGluZygpOworICAgIHZvaWQgZGlkRmluaXNoSXRlcmF0aW5nKCk7CisgICAg
dm9pZCBnZXRDb25zZXJ2YXRpdmVSZWdpc3RlclJvb3RzKEhhc2hTZXQ8SlNDZWxsKj4mIHJvb3Rz
KTsKKworICAgIGRvdWJsZSBsYXN0RnVsbEdDTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0
RnVsbEdDTGVuZ3RoOyB9CisgICAgZG91YmxlIGxhc3RFZGVuR0NMZW5ndGgoKSBjb25zdCB7IHJl
dHVybiBtX2xhc3RFZGVuR0NMZW5ndGg7IH0KKyAgICB2b2lkIGluY3JlYXNlTGFzdEZ1bGxHQ0xl
bmd0aChkb3VibGUgYW1vdW50KSB7IG1fbGFzdEZ1bGxHQ0xlbmd0aCArPSBhbW91bnQ7IH0KIAot
ICAgICAgICBCbG9ja0FsbG9jYXRvciYgYmxvY2tBbGxvY2F0b3IoKTsKLSAgICAgICAgU3RydWN0
dXJlSURUYWJsZSYgc3RydWN0dXJlSURUYWJsZSgpIHsgcmV0dXJuIG1fc3RydWN0dXJlSURUYWJs
ZTsgfQorICAgIHNpemVfdCBzaXplQmVmb3JlTGFzdEVkZW5Db2xsZWN0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaXplQmVmb3JlTGFzdEVkZW5Db2xsZWN0OyB9CisgICAgc2l6ZV90IHNpemVBZnRl
ckxhc3RFZGVuQ29sbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZUFmdGVyTGFzdEVkZW5D
b2xsZWN0OyB9CisgICAgc2l6ZV90IHNpemVCZWZvcmVMYXN0RnVsbENvbGxlY3Rpb24oKSBjb25z
dCB7IHJldHVybiBtX3NpemVCZWZvcmVMYXN0RnVsbENvbGxlY3Q7IH0KKyAgICBzaXplX3Qgc2l6
ZUFmdGVyTGFzdEZ1bGxDb2xsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zaXplQWZ0ZXJMYXN0
RnVsbENvbGxlY3Q7IH0KKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVsZXRlQWxsQ29t
cGlsZWRDb2RlKCk7CisgICAgdm9pZCBkZWxldGVBbGxVbmxpbmtlZEZ1bmN0aW9uQ29kZSgpOwor
CisgICAgdm9pZCBkaWRBbGxvY2F0ZShzaXplX3QpOworICAgIHZvaWQgZGlkQWJhbmRvbihzaXpl
X3QpOworCisgICAgYm9vbCBpc1BhZ2VkT3V0KGRvdWJsZSBkZWFkbGluZSk7CisgICAgCisgICAg
Y29uc3QgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcygpIHsgcmV0dXJuIG1faml0
U3R1YlJvdXRpbmVzOyB9CisgICAgCisgICAgdm9pZCBhZGRSZWZlcmVuY2UoSlNDZWxsKiwgQXJy
YXlCdWZmZXIqKTsKKyAgICAKKyAgICBib29sIGlzRGVmZXJyZWQoKSBjb25zdCB7IHJldHVybiAh
IW1fZGVmZXJyYWxEZXB0aCB8fCBPcHRpb25zOjpkaXNhYmxlR0MoKTsgfQorCisgICAgQmxvY2tB
bGxvY2F0b3ImIGJsb2NrQWxsb2NhdG9yKCk7CisgICAgU3RydWN0dXJlSURUYWJsZSYgc3RydWN0
dXJlSURUYWJsZSgpIHsgcmV0dXJuIG1fc3RydWN0dXJlSURUYWJsZTsgfQogCiAjaWYgVVNFKENG
KQogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHJlbGVhc2VTb29uKFJldGFpblB0
cjxUPiYmKTsKICNlbmRpZgogCi0gICAgICAgIHZvaWQgcmVtb3ZlQ29kZUJsb2NrKENvZGVCbG9j
ayogY2IpIHsgbV9jb2RlQmxvY2tzLnJlbW92ZShjYik7IH0KKyAgICB2b2lkIHJlbW92ZUNvZGVC
bG9jayhDb2RlQmxvY2sqIGNiKSB7IG1fY29kZUJsb2Nrcy5yZW1vdmUoY2IpOyB9CiAKLSAgICBw
cml2YXRlOgotICAgICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwotICAgICAgICBmcmllbmQg
Y2xhc3MgQ29waWVkQmxvY2s7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBEZWZlckdDOwotICAgICAg
ICBmcmllbmQgY2xhc3MgRGVmZXJHQ0ZvckFXaGlsZTsKLSAgICAgICAgZnJpZW5kIGNsYXNzIERl
bGF5ZWRSZWxlYXNlU2NvcGU7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBHQ0F3YXJlSklUU3R1YlJv
dXRpbmU7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBIYW5kbGVTZXQ7Ci0gICAgICAgIGZyaWVuZCBj
bGFzcyBKSVRTdHViUm91dGluZTsKLSAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4
dHJhY3RvcjsKLSAgICAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZFNwYWNlOwotICAgICAgICBmcmll
bmQgY2xhc3MgTWFya2VkQWxsb2NhdG9yOwotICAgICAgICBmcmllbmQgY2xhc3MgTWFya2VkQmxv
Y2s7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBDb3BpZWRTcGFjZTsKLSAgICAgICAgZnJpZW5kIGNs
YXNzIENvcHlWaXNpdG9yOwotICAgICAgICBmcmllbmQgY2xhc3MgUmVjdXJzaXZlQWxsb2NhdGlv
blNjb3BlOwotICAgICAgICBmcmllbmQgY2xhc3MgU2xvdFZpc2l0b3I7Ci0gICAgICAgIGZyaWVu
ZCBjbGFzcyBTdXBlclJlZ2lvbjsKLSAgICAgICAgZnJpZW5kIGNsYXNzIEluY3JlbWVudGFsU3dl
ZXBlcjsKLSAgICAgICAgZnJpZW5kIGNsYXNzIEhlYXBTdGF0aXN0aWNzOwotICAgICAgICBmcmll
bmQgY2xhc3MgVk07Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBXZWFrU2V0OwotICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBmcmllbmQgdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmKTsKLSAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJpZW5kIHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiwg
c2l6ZV90KTsKLQotICAgICAgICB2b2lkKiBhbGxvY2F0ZVdpdGhJbW1vcnRhbFN0cnVjdHVyZURl
c3RydWN0b3Ioc2l6ZV90KTsgLy8gRm9yIHVzZSB3aXRoIHNwZWNpYWwgb2JqZWN0cyB3aG9zZSBT
dHJ1Y3R1cmVzIG5ldmVyIGRpZS4KLSAgICAgICAgdm9pZCogYWxsb2NhdGVXaXRoTm9ybWFsRGVz
dHJ1Y3RvcihzaXplX3QpOyAvLyBGb3IgdXNlIHdpdGggb2JqZWN0cyB0aGF0IGluaGVyaXQgZGly
ZWN0bHkgb3IgaW5kaXJlY3RseSBmcm9tIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LgotICAgICAgICB2
b2lkKiBhbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKHNpemVfdCk7IC8vIEZvciB1c2Ugd2l0aCBv
YmplY3RzIHdpdGhvdXQgZGVzdHJ1Y3RvcnMuCi0KLSAgICAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBtaW5FeHRyYUNvc3QgPSAyNTY7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4RXh0
cmFDb3N0ID0gMTAyNCAqIDEwMjQ7Ci0gICAgICAgIAotICAgICAgICBjbGFzcyBGaW5hbGl6ZXJP
d25lciA6IHB1YmxpYyBXZWFrSGFuZGxlT3duZXIgewotICAgICAgICAgICAgdmlydHVhbCB2b2lk
IGZpbmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCkgb3ZlcnJpZGU7Ci0gICAg
ICAgIH07Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc1ZhbGlkQWxsb2NhdGlv
bihzaXplX3QpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlcG9ydEV4dHJhTWVt
b3J5Q29zdFNsb3dDYXNlKHNpemVfdCk7Ci0KLSAgICAgICAgdm9pZCBzdXNwZW5kQ29tcGlsZXJU
aHJlYWRzKCk7Ci0gICAgICAgIHZvaWQgd2lsbFN0YXJ0Q29sbGVjdGlvbihIZWFwT3BlcmF0aW9u
IGNvbGxlY3Rpb25UeXBlKTsKLSAgICAgICAgdm9pZCBkZWxldGVPbGRDb2RlKGRvdWJsZSBnY1N0
YXJ0VGltZSk7Ci0gICAgICAgIHZvaWQgZmx1c2hPbGRTdHJ1Y3R1cmVJRFRhYmxlcygpOwotICAg
ICAgICB2b2lkIGZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKCk7Ci0gICAgICAgIHZvaWQgc3RvcEFs
bG9jYXRpb24oKTsKLQotICAgICAgICB2b2lkIG1hcmtSb290cygpOwotICAgICAgICB2b2lkIGdh
dGhlclN0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmLCB2b2lkKiogZHVtbXkpOwotICAgICAg
ICB2b2lkIGdhdGhlckpTU3RhY2tSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwotICAgICAgICB2
b2lkIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwotICAgICAg
ICB2b2lkIGNsZWFyTGl2ZW5lc3NEYXRhKCk7Ci0gICAgICAgIHZvaWQgdmlzaXRTbWFsbFN0cmlu
Z3MoKTsKLSAgICAgICAgdm9pZCB2aXNpdENvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJv
b3RzJik7Ci0gICAgICAgIHZvaWQgdmlzaXRDb21waWxlcldvcmtsaXN0cygpOwotICAgICAgICB2
b2lkIHZpc2l0UHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9vdFZpc2l0b3ImKTsKLSAgICAgICAgdm9p
ZCB2aXNpdFRlbXBTb3J0VmVjdG9ycyhIZWFwUm9vdFZpc2l0b3ImKTsKLSAgICAgICAgdm9pZCB2
aXNpdEFyZ3VtZW50QnVmZmVycyhIZWFwUm9vdFZpc2l0b3ImKTsKLSAgICAgICAgdm9pZCB2aXNp
dEV4Y2VwdGlvbihIZWFwUm9vdFZpc2l0b3ImKTsKLSAgICAgICAgdm9pZCB2aXNpdFN0cm9uZ0hh
bmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgICAgIHZvaWQgdmlzaXRIYW5kbGVTdGFjayhI
ZWFwUm9vdFZpc2l0b3ImKTsKLSAgICAgICAgdm9pZCB0cmFjZUNvZGVCbG9ja3NBbmRKSVRTdHVi
Um91dGluZXMoKTsKLSAgICAgICAgdm9pZCBjb252ZXJnZSgpOwotICAgICAgICB2b2lkIHZpc2l0
V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgICAgIHZvaWQgY2xlYXJSZW1lbWJl
cmVkU2V0KFZlY3Rvcjxjb25zdCBKU0NlbGwqPiYpOwotICAgICAgICB2b2lkIHVwZGF0ZU9iamVj
dENvdW50cygpOwotICAgICAgICB2b2lkIHJlc2V0VmlzaXRvcnMoKTsKLQotICAgICAgICB2b2lk
IHJlYXBXZWFrSGFuZGxlcygpOwotICAgICAgICB2b2lkIHN3ZWVwQXJyYXlCdWZmZXJzKCk7Ci0g
ICAgICAgIHZvaWQgc25hcHNob3RNYXJrZWRTcGFjZSgpOwotICAgICAgICB2b2lkIGRlbGV0ZVNv
dXJjZVByb3ZpZGVyQ2FjaGVzKCk7Ci0gICAgICAgIHZvaWQgbm90aWZ5SW5jcmVtZW50YWxTd2Vl
cGVyKCk7Ci0gICAgICAgIHZvaWQgcmVtZW1iZXJDdXJyZW50bHlFeGVjdXRpbmdDb2RlQmxvY2tz
KCk7Ci0gICAgICAgIHZvaWQgcmVzZXRBbGxvY2F0b3JzKCk7Ci0gICAgICAgIHZvaWQgY29weUJh
Y2tpbmdTdG9yZXMoKTsKLSAgICAgICAgdm9pZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKLSAg
ICAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7Ci0gICAgICAgIHZv
aWQgZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUoKTsKLSAgICAgICAgdm9pZCB1cGRhdGVBbGxv
Y2F0aW9uTGltaXRzKCk7Ci0gICAgICAgIHZvaWQgZGlkRmluaXNoQ29sbGVjdGlvbihkb3VibGUg
Z2NTdGFydFRpbWUpOwotICAgICAgICB2b2lkIHJlc3VtZUNvbXBpbGVyVGhyZWFkcygpOwotICAg
ICAgICB2b2lkIHpvbWJpZnlEZWFkT2JqZWN0cygpOwotICAgICAgICB2b2lkIG1hcmtEZWFkT2Jq
ZWN0cygpOwotCi0gICAgICAgIGJvb2wgc2hvdWxkRG9GdWxsQ29sbGVjdGlvbihIZWFwT3BlcmF0
aW9uIHJlcXVlc3RlZENvbGxlY3Rpb25UeXBlKSBjb25zdDsKLSAgICAgICAgc2l6ZV90IHNpemVB
ZnRlckNvbGxlY3QoKTsKLQotICAgICAgICBKU1N0YWNrJiBzdGFjaygpOwotICAgICAgICAKLSAg
ICAgICAgdm9pZCBpbmNyZW1lbnREZWZlcnJhbERlcHRoKCk7Ci0gICAgICAgIHZvaWQgZGVjcmVt
ZW50RGVmZXJyYWxEZXB0aCgpOwotICAgICAgICB2b2lkIGRlY3JlbWVudERlZmVycmFsRGVwdGhB
bmRHQ0lmTmVlZGVkKCk7Ci0KLSAgICAgICAgY29uc3QgSGVhcFR5cGUgbV9oZWFwVHlwZTsKLSAg
ICAgICAgY29uc3Qgc2l6ZV90IG1fcmFtU2l6ZTsKLSAgICAgICAgY29uc3Qgc2l6ZV90IG1fbWlu
Qnl0ZXNQZXJDeWNsZTsKLSAgICAgICAgc2l6ZV90IG1fc2l6ZUFmdGVyTGFzdENvbGxlY3Q7Ci0g
ICAgICAgIHNpemVfdCBtX3NpemVBZnRlckxhc3RGdWxsQ29sbGVjdDsKLSAgICAgICAgc2l6ZV90
IG1fc2l6ZUJlZm9yZUxhc3RGdWxsQ29sbGVjdDsKLSAgICAgICAgc2l6ZV90IG1fc2l6ZUFmdGVy
TGFzdEVkZW5Db2xsZWN0OwotICAgICAgICBzaXplX3QgbV9zaXplQmVmb3JlTGFzdEVkZW5Db2xs
ZWN0OwotCi0gICAgICAgIHNpemVfdCBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlOwotICAgICAg
ICBzaXplX3QgbV9ieXRlc0FiYW5kb25lZFNpbmNlTGFzdEZ1bGxDb2xsZWN0OwotICAgICAgICBz
aXplX3QgbV9tYXhFZGVuU2l6ZTsKLSAgICAgICAgc2l6ZV90IG1fbWF4SGVhcFNpemU7Ci0gICAg
ICAgIGJvb2wgbV9zaG91bGREb0Z1bGxDb2xsZWN0aW9uOwotICAgICAgICBzaXplX3QgbV90b3Rh
bEJ5dGVzVmlzaXRlZDsKLSAgICAgICAgc2l6ZV90IG1fdG90YWxCeXRlc0NvcGllZDsKLSAgICAg
ICAgCi0gICAgICAgIEhlYXBPcGVyYXRpb24gbV9vcGVyYXRpb25JblByb2dyZXNzOwotICAgICAg
ICBCbG9ja0FsbG9jYXRvciBtX2Jsb2NrQWxsb2NhdG9yOwotICAgICAgICBTdHJ1Y3R1cmVJRFRh
YmxlIG1fc3RydWN0dXJlSURUYWJsZTsKLSAgICAgICAgTWFya2VkU3BhY2UgbV9vYmplY3RTcGFj
ZTsKLSAgICAgICAgQ29waWVkU3BhY2UgbV9zdG9yYWdlU3BhY2U7Ci0gICAgICAgIEdDSW5jb21p
bmdSZWZDb3VudGVkU2V0PEFycmF5QnVmZmVyPiBtX2FycmF5QnVmZmVyczsKLSAgICAgICAgc2l6
ZV90IG1fZXh0cmFNZW1vcnlVc2FnZTsKLQotICAgICAgICBIYXNoU2V0PGNvbnN0IEpTQ2VsbCo+
IG1fY29weWluZ1JlbWVtYmVyZWRTZXQ7Ci0KLSAgICAgICAgUHJvdGVjdENvdW50U2V0IG1fcHJv
dGVjdGVkVmFsdWVzOwotICAgICAgICBWZWN0b3I8VmVjdG9yPFZhbHVlU3RyaW5nUGFpciwgMCwg
VW5zYWZlVmVjdG9yT3ZlcmZsb3c+Kj4gbV90ZW1wU29ydGluZ1ZlY3RvcnM7Ci0gICAgICAgIE93
blB0cjxIYXNoU2V0PE1hcmtlZEFyZ3VtZW50QnVmZmVyKj4+IG1fbWFya0xpc3RTZXQ7Ci0KLSAg
ICAgICAgTWFjaGluZVRocmVhZHMgbV9tYWNoaW5lVGhyZWFkczsKLSAgICAgICAgCi0gICAgICAg
IEdDVGhyZWFkU2hhcmVkRGF0YSBtX3NoYXJlZERhdGE7Ci0gICAgICAgIFNsb3RWaXNpdG9yIG1f
c2xvdFZpc2l0b3I7Ci0gICAgICAgIENvcHlWaXNpdG9yIG1fY29weVZpc2l0b3I7Ci0KLSAgICAg
ICAgSGFuZGxlU2V0IG1faGFuZGxlU2V0OwotICAgICAgICBIYW5kbGVTdGFjayBtX2hhbmRsZVN0
YWNrOwotICAgICAgICBDb2RlQmxvY2tTZXQgbV9jb2RlQmxvY2tzOwotICAgICAgICBKSVRTdHVi
Um91dGluZVNldCBtX2ppdFN0dWJSb3V0aW5lczsKLSAgICAgICAgRmluYWxpemVyT3duZXIgbV9m
aW5hbGl6ZXJPd25lcjsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgbV9pc1NhZmVUb0NvbGxlY3Q7
Ci0KLSAgICAgICAgV3JpdGVCYXJyaWVyQnVmZmVyIG1fd3JpdGVCYXJyaWVyQnVmZmVyOwotCi0g
ICAgICAgIFZNKiBtX3ZtOwotICAgICAgICBkb3VibGUgbV9sYXN0RnVsbEdDTGVuZ3RoOwotICAg
ICAgICBkb3VibGUgbV9sYXN0RWRlbkdDTGVuZ3RoOwotICAgICAgICBkb3VibGUgbV9sYXN0Q29k
ZURpc2NhcmRUaW1lOwotCi0gICAgICAgIERvdWJseUxpbmtlZExpc3Q8RXhlY3V0YWJsZUJhc2U+
IG1fY29tcGlsZWRDb2RlOwotICAgICAgICAKLSAgICAgICAgUmVmUHRyPEdDQWN0aXZpdHlDYWxs
YmFjaz4gbV9mdWxsQWN0aXZpdHlDYWxsYmFjazsKLSAgICAgICAgUmVmUHRyPEdDQWN0aXZpdHlD
YWxsYmFjaz4gbV9lZGVuQWN0aXZpdHlDYWxsYmFjazsKLSAgICAgICAgT3duUHRyPEluY3JlbWVu
dGFsU3dlZXBlcj4gbV9zd2VlcGVyOwotICAgICAgICBWZWN0b3I8TWFya2VkQmxvY2sqPiBtX2Js
b2NrU25hcHNob3Q7Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCBtX2RlZmVycmFsRGVwdGg7
Ci0gICAgfTsKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKKyAgICBmcmll
bmQgY2xhc3MgQ29waWVkQmxvY2s7CisgICAgZnJpZW5kIGNsYXNzIERlZmVyR0M7CisgICAgZnJp
ZW5kIGNsYXNzIERlZmVyR0NGb3JBV2hpbGU7CisgICAgZnJpZW5kIGNsYXNzIERlbGF5ZWRSZWxl
YXNlU2NvcGU7CisgICAgZnJpZW5kIGNsYXNzIEdDQXdhcmVKSVRTdHViUm91dGluZTsKKyAgICBm
cmllbmQgY2xhc3MgSGFuZGxlU2V0OworICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViUm91dGluZTsK
KyAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworICAgIGZyaWVuZCBjbGFz
cyBNYXJrZWRTcGFjZTsKKyAgICBmcmllbmQgY2xhc3MgTWFya2VkQWxsb2NhdG9yOworICAgIGZy
aWVuZCBjbGFzcyBNYXJrZWRCbG9jazsKKyAgICBmcmllbmQgY2xhc3MgQ29waWVkU3BhY2U7Cisg
ICAgZnJpZW5kIGNsYXNzIENvcHlWaXNpdG9yOworICAgIGZyaWVuZCBjbGFzcyBSZWN1cnNpdmVB
bGxvY2F0aW9uU2NvcGU7CisgICAgZnJpZW5kIGNsYXNzIFNsb3RWaXNpdG9yOworICAgIGZyaWVu
ZCBjbGFzcyBTdXBlclJlZ2lvbjsKKyAgICBmcmllbmQgY2xhc3MgSW5jcmVtZW50YWxTd2VlcGVy
OworICAgIGZyaWVuZCBjbGFzcyBIZWFwU3RhdGlzdGljczsKKyAgICBmcmllbmQgY2xhc3MgVk07
CisgICAgZnJpZW5kIGNsYXNzIFdlYWtTZXQ7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJp
ZW5kIHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
ZnJpZW5kIHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiwgc2l6ZV90KTsKKworICAgIHZvaWQqIGFs
bG9jYXRlV2l0aEltbW9ydGFsU3RydWN0dXJlRGVzdHJ1Y3RvcihzaXplX3QpOyAvLyBGb3IgdXNl
IHdpdGggc3BlY2lhbCBvYmplY3RzIHdob3NlIFN0cnVjdHVyZXMgbmV2ZXIgZGllLgorICAgIHZv
aWQqIGFsbG9jYXRlV2l0aE5vcm1hbERlc3RydWN0b3Ioc2l6ZV90KTsgLy8gRm9yIHVzZSB3aXRo
IG9iamVjdHMgdGhhdCBpbmhlcml0IGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgZnJvbSBKU0Rlc3Ry
dWN0aWJsZU9iamVjdC4KKyAgICB2b2lkKiBhbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKHNpemVf
dCk7IC8vIEZvciB1c2Ugd2l0aCBvYmplY3RzIHdpdGhvdXQgZGVzdHJ1Y3RvcnMuCiAKLSAgICBz
dHJ1Y3QgTWFya2VkQmxvY2tTbmFwc2hvdEZ1bmN0b3IgOiBwdWJsaWMgTWFya2VkQmxvY2s6OlZv
aWRGdW5jdG9yIHsKLSAgICAgICAgTWFya2VkQmxvY2tTbmFwc2hvdEZ1bmN0b3IoVmVjdG9yPE1h
cmtlZEJsb2NrKj4mIGJsb2NrcykgCi0gICAgICAgICAgICA6IG1faW5kZXgoMCkgCi0gICAgICAg
ICAgICAsIG1fYmxvY2tzKGJsb2NrcykKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgCi0gICAg
ICAgIHZvaWQgb3BlcmF0b3IoKShNYXJrZWRCbG9jayogYmxvY2spIHsgbV9ibG9ja3NbbV9pbmRl
eCsrXSA9IGJsb2NrOyB9CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtaW5FeHRyYUNvc3QgPSAy
NTY7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhFeHRyYUNvc3QgPSAxMDI0ICogMTAyNDsK
ICAgICAKLSAgICAgICAgc2l6ZV90IG1faW5kZXg7Ci0gICAgICAgIFZlY3RvcjxNYXJrZWRCbG9j
ayo+JiBtX2Jsb2NrczsKKyAgICBjbGFzcyBGaW5hbGl6ZXJPd25lciA6IHB1YmxpYyBXZWFrSGFu
ZGxlT3duZXIgeworICAgICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSGFuZGxlPFVua25vd24+
LCB2b2lkKiBjb250ZXh0KSBvdmVycmlkZTsKICAgICB9OwogCi0gICAgaW5saW5lIGJvb2wgSGVh
cDo6c2hvdWxkQ29sbGVjdCgpCi0gICAgewotICAgICAgICBpZiAoaXNEZWZlcnJlZCgpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoT3B0aW9uczo6Z2NNYXhIZWFwU2l6
ZSgpKQotICAgICAgICAgICAgcmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPiBPcHRp
b25zOjpnY01heEhlYXBTaXplKCkgJiYgbV9pc1NhZmVUb0NvbGxlY3QgJiYgbV9vcGVyYXRpb25J
blByb2dyZXNzID09IE5vT3BlcmF0aW9uOwotICAgICAgICByZXR1cm4gbV9ieXRlc0FsbG9jYXRl
ZFRoaXNDeWNsZSA+IG1fbWF4RWRlblNpemUgJiYgbV9pc1NhZmVUb0NvbGxlY3QgJiYgbV9vcGVy
YXRpb25JblByb2dyZXNzID09IE5vT3BlcmF0aW9uOwotICAgIH0KLQotICAgIGJvb2wgSGVhcDo6
aXNCdXN5KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgIT0g
Tm9PcGVyYXRpb247Ci0gICAgfQotCi0gICAgYm9vbCBIZWFwOjppc0NvbGxlY3RpbmcoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVjdGlv
biB8fCBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRWRlbkNvbGxlY3Rpb247Ci0gICAgfQotCi0g
ICAgaW5saW5lIEhlYXAqIEhlYXA6OmhlYXAoY29uc3QgSlNDZWxsKiBjZWxsKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIE1hcmtlZEJsb2NrOjpibG9ja0ZvcihjZWxsKS0+aGVhcCgpOwotICAgIH0K
LQotICAgIGlubGluZSBIZWFwKiBIZWFwOjpoZWFwKGNvbnN0IEpTVmFsdWUgdikKLSAgICB7Ci0g
ICAgICAgIGlmICghdi5pc0NlbGwoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBy
ZXR1cm4gaGVhcCh2LmFzQ2VsbCgpKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBIZWFwOjpp
c0xpdmUoY29uc3Qgdm9pZCogY2VsbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBNYXJrZWRCbG9j
azo6YmxvY2tGb3IoY2VsbCktPmlzTGl2ZUNlbGwoY2VsbCk7Ci0gICAgfQotCi0gICAgaW5saW5l
IGJvb2wgSGVhcDo6aXNNYXJrZWQoY29uc3Qgdm9pZCogY2VsbCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmlzTWFya2VkKGNlbGwpOwotICAgIH0K
LQotICAgIGlubGluZSBib29sIEhlYXA6OnRlc3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9pZCogY2Vs
bCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPnRl
c3RBbmRTZXRNYXJrZWQoY2VsbCk7Ci0gICAgfQotCi0gICAgaW5saW5lIHZvaWQgSGVhcDo6c2V0
TWFya2VkKGNvbnN0IHZvaWQqIGNlbGwpCi0gICAgewotICAgICAgICBNYXJrZWRCbG9jazo6Ymxv
Y2tGb3IoY2VsbCktPnNldE1hcmtlZChjZWxsKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBI
ZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKQotICAgIHsKLSNpZiBFTkFCTEUoV1JJVEVfQkFS
UklFUl9QUk9GSUxJTkcpIHx8IEVOQUJMRShHR0MpCi0gICAgICAgIHJldHVybiB0cnVlOwotI2Vs
c2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0gICAgfQorICAgIEpTX0VYUE9SVF9Q
UklWQVRFIGJvb2wgaXNWYWxpZEFsbG9jYXRpb24oc2l6ZV90KTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5Q29zdFNsb3dDYXNlKHNpemVfdCk7CiAKLSAgICBp
bmxpbmUgdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiBmcm9tLCBKU1ZhbHVl
IHRvKQotICAgIHsKLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAgICAg
IFdyaXRlQmFycmllckNvdW50ZXJzOjpjb3VudFdyaXRlQmFycmllcigpOwotI2VuZGlmCi0gICAg
ICAgIGlmICghdG8uaXNDZWxsKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHdyaXRl
QmFycmllcihmcm9tLCB0by5hc0NlbGwoKSk7Ci0gICAgfQotCi0gICAgaW5saW5lIHZvaWQgSGVh
cDo6cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVfdCBjb3N0KQotICAgIHsKLSAgICAgICAgaWYg
KGNvc3QgPiBtaW5FeHRyYUNvc3QpIAotICAgICAgICAgICAgcmVwb3J0RXh0cmFNZW1vcnlDb3N0
U2xvd0Nhc2UoY29zdCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4g
aW5saW5lIHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgSGVhcDo6Zm9yRWFjaFByb3RlY3Rl
ZENlbGwoRnVuY3RvciYgZnVuY3RvcikKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgcGFpciA6
IG1fcHJvdGVjdGVkVmFsdWVzKQotICAgICAgICAgICAgZnVuY3RvcihwYWlyLmtleSk7Ci0gICAg
ICAgIG1faGFuZGxlU2V0LmZvckVhY2hTdHJvbmdIYW5kbGUoZnVuY3RvciwgbV9wcm90ZWN0ZWRW
YWx1ZXMpOwotCi0gICAgICAgIHJldHVybiBmdW5jdG9yLnJldHVyblZhbHVlKCk7Ci0gICAgfQot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHR5cGVuYW1lIEZ1bmN0b3I6
OlJldHVyblR5cGUgSGVhcDo6Zm9yRWFjaFByb3RlY3RlZENlbGwoKQotICAgIHsKLSAgICAgICAg
RnVuY3RvciBmdW5jdG9yOwotICAgICAgICByZXR1cm4gZm9yRWFjaFByb3RlY3RlZENlbGwoZnVu
Y3Rvcik7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZv
aWQgSGVhcDo6Zm9yRWFjaENvZGVCbG9jayhGdW5jdG9yJiBmdW5jdG9yKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fY29kZUJsb2Nrcy5pdGVyYXRlPEZ1bmN0b3I+KGZ1bmN0b3IpOwotICAgIH0K
LQotICAgIGlubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZVdpdGhOb3JtYWxEZXN0cnVjdG9yKHNp
emVfdCBieXRlcykKLSAgICB7Ci0jaWYgRU5BQkxFKEFMTE9DQVRJT05fTE9HR0lORykKLSAgICAg
ICAgZGF0YUxvZ0YoIkpTQyBHQyBhbGxvY2F0aW5nICVsdSBieXRlcyB3aXRoIG5vcm1hbCBkZXN0
cnVjdG9yLlxuIiwgYnl0ZXMpOwotI2VuZGlmCi0gICAgICAgIEFTU0VSVChpc1ZhbGlkQWxsb2Nh
dGlvbihieXRlcykpOwotICAgICAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5hbGxvY2F0ZVdpdGhO
b3JtYWxEZXN0cnVjdG9yKGJ5dGVzKTsKLSAgICB9Ci0gICAgCi0gICAgaW5saW5lIHZvaWQqIEhl
YXA6OmFsbG9jYXRlV2l0aEltbW9ydGFsU3RydWN0dXJlRGVzdHJ1Y3RvcihzaXplX3QgYnl0ZXMp
Ci0gICAgewotI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCi0gICAgICAgIGRhdGFMb2dG
KCJKU0MgR0MgYWxsb2NhdGluZyAlbHUgYnl0ZXMgd2l0aCBpbW1vcnRhbCBzdHJ1Y3R1cmUgZGVz
dHJ1Y3Rvci5cbiIsIGJ5dGVzKTsKLSNlbmRpZgotICAgICAgICBBU1NFUlQoaXNWYWxpZEFsbG9j
YXRpb24oYnl0ZXMpKTsKLSAgICAgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuYWxsb2NhdGVXaXRo
SW1tb3J0YWxTdHJ1Y3R1cmVEZXN0cnVjdG9yKGJ5dGVzKTsKLSAgICB9Ci0gICAgCi0gICAgaW5s
aW5lIHZvaWQqIEhlYXA6OmFsbG9jYXRlV2l0aG91dERlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKQot
ICAgIHsKLSNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQotICAgICAgICBkYXRhTG9nRigi
SlNDIEdDIGFsbG9jYXRpbmcgJWx1IGJ5dGVzIHdpdGhvdXQgZGVzdHJ1Y3Rvci5cbiIsIGJ5dGVz
KTsKLSNlbmRpZgotICAgICAgICBBU1NFUlQoaXNWYWxpZEFsbG9jYXRpb24oYnl0ZXMpKTsKLSAg
ICAgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuYWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihieXRl
cyk7Ci0gICAgfQotICAgCi0gICAgaW5saW5lIENoZWNrZWRCb29sZWFuIEhlYXA6OnRyeUFsbG9j
YXRlU3RvcmFnZShKU0NlbGwqIGludGVuZGVkT3duZXIsIHNpemVfdCBieXRlcywgdm9pZCoqIG91
dFB0cikKLSAgICB7Ci0gICAgICAgIENoZWNrZWRCb29sZWFuIHJlc3VsdCA9IG1fc3RvcmFnZVNw
YWNlLnRyeUFsbG9jYXRlKGJ5dGVzLCBvdXRQdHIpOwotI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xP
R0dJTkcpCi0gICAgICAgIGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGluZyAlbHUgYnl0ZXMgb2Yg
c3RvcmFnZSBmb3IgJXA6ICVwLlxuIiwgYnl0ZXMsIGludGVuZGVkT3duZXIsICpvdXRQdHIpOwot
I2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGludGVuZGVkT3duZXIpOwotI2VuZGlmCi0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAotICAgIGlubGluZSBDaGVja2VkQm9vbGVh
biBIZWFwOjp0cnlSZWFsbG9jYXRlU3RvcmFnZShKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQq
KiBwdHIsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKLSAgICB7Ci0jaWYgRU5BQkxF
KEFMTE9DQVRJT05fTE9HR0lORykKLSAgICAgICAgdm9pZCogb2xkUHRyID0gKnB0cjsKLSNlbmRp
ZgotICAgICAgICBDaGVja2VkQm9vbGVhbiByZXN1bHQgPSBtX3N0b3JhZ2VTcGFjZS50cnlSZWFs
bG9jYXRlKHB0ciwgb2xkU2l6ZSwgbmV3U2l6ZSk7Ci0jaWYgRU5BQkxFKEFMTE9DQVRJT05fTE9H
R0lORykKLSAgICAgICAgZGF0YUxvZ0YoIkpTQyBHQyByZWFsbG9jYXRpbmcgJWx1IC0+ICVsdSBi
eXRlcyBvZiBzdG9yYWdlIGZvciAlcDogJXAgLT4gJXAuXG4iLCBvbGRTaXplLCBuZXdTaXplLCBp
bnRlbmRlZE93bmVyLCBvbGRQdHIsICpwdHIpOwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFN
KGludGVuZGVkT3duZXIpOwotI2VuZGlmCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQor
ICAgIHZvaWQgc3VzcGVuZENvbXBpbGVyVGhyZWFkcygpOworICAgIHZvaWQgd2lsbFN0YXJ0Q29s
bGVjdGlvbihIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlKTsKKyAgICB2b2lkIGRlbGV0ZU9s
ZENvZGUoZG91YmxlIGdjU3RhcnRUaW1lKTsKKyAgICB2b2lkIGZsdXNoT2xkU3RydWN0dXJlSURU
YWJsZXMoKTsKKyAgICB2b2lkIGZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKCk7CisgICAgdm9pZCBz
dG9wQWxsb2NhdGlvbigpOworCisgICAgdm9pZCBtYXJrUm9vdHMoKTsKKyAgICB2b2lkIGdhdGhl
clN0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmLCB2b2lkKiogZHVtbXkpOworICAgIHZvaWQg
Z2F0aGVySlNTdGFja1Jvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CisgICAgdm9pZCBnYXRoZXJT
Y3JhdGNoQnVmZmVyUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKKyAgICB2b2lkIGNsZWFyTGl2
ZW5lc3NEYXRhKCk7CisgICAgdm9pZCB2aXNpdFNtYWxsU3RyaW5ncygpOworICAgIHZvaWQgdmlz
aXRDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOworICAgIHZvaWQgdmlzaXRD
b21waWxlcldvcmtsaXN0cygpOworICAgIHZvaWQgdmlzaXRQcm90ZWN0ZWRPYmplY3RzKEhlYXBS
b290VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRUZW1wU29ydFZlY3RvcnMoSGVhcFJvb3RWaXNp
dG9yJik7CisgICAgdm9pZCB2aXNpdEFyZ3VtZW50QnVmZmVycyhIZWFwUm9vdFZpc2l0b3ImKTsK
KyAgICB2b2lkIHZpc2l0RXhjZXB0aW9uKEhlYXBSb290VmlzaXRvciYpOworICAgIHZvaWQgdmlz
aXRTdHJvbmdIYW5kbGVzKEhlYXBSb290VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRIYW5kbGVT
dGFjayhIZWFwUm9vdFZpc2l0b3ImKTsKKyAgICB2b2lkIHRyYWNlQ29kZUJsb2Nrc0FuZEpJVFN0
dWJSb3V0aW5lcygpOworICAgIHZvaWQgY29udmVyZ2UoKTsKKyAgICB2b2lkIHZpc2l0V2Vha0hh
bmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7CisgICAgdm9pZCBjbGVhclJlbWVtYmVyZWRTZXQoVmVj
dG9yPGNvbnN0IEpTQ2VsbCo+Jik7CisgICAgdm9pZCB1cGRhdGVPYmplY3RDb3VudHMoKTsKKyAg
ICB2b2lkIHJlc2V0VmlzaXRvcnMoKTsKKworICAgIHZvaWQgcmVhcFdlYWtIYW5kbGVzKCk7Cisg
ICAgdm9pZCBzd2VlcEFycmF5QnVmZmVycygpOworICAgIHZvaWQgc25hcHNob3RNYXJrZWRTcGFj
ZSgpOworICAgIHZvaWQgZGVsZXRlU291cmNlUHJvdmlkZXJDYWNoZXMoKTsKKyAgICB2b2lkIG5v
dGlmeUluY3JlbWVudGFsU3dlZXBlcigpOworICAgIHZvaWQgcmVtZW1iZXJDdXJyZW50bHlFeGVj
dXRpbmdDb2RlQmxvY2tzKCk7CisgICAgdm9pZCByZXNldEFsbG9jYXRvcnMoKTsKKyAgICB2b2lk
IGNvcHlCYWNraW5nU3RvcmVzKCk7CisgICAgdm9pZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsK
KyAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKTsKKyAgICB2b2lkIGRl
bGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKCk7CisgICAgdm9pZCB1cGRhdGVBbGxvY2F0aW9uTGlt
aXRzKCk7CisgICAgdm9pZCBkaWRGaW5pc2hDb2xsZWN0aW9uKGRvdWJsZSBnY1N0YXJ0VGltZSk7
CisgICAgdm9pZCByZXN1bWVDb21waWxlclRocmVhZHMoKTsKKyAgICB2b2lkIHpvbWJpZnlEZWFk
T2JqZWN0cygpOworICAgIHZvaWQgbWFya0RlYWRPYmplY3RzKCk7CiAKLSAgICBpbmxpbmUgdm9p
ZCBIZWFwOjphc2NyaWJlT3duZXIoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKiBzdG9yYWdl
KQotICAgIHsKLSNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQotICAgICAgICBkYXRhTG9n
RigiSlNDIEdDIGFzY3JpYmluZyAlcCBhcyBvd25lciBvZiBzdG9yYWdlICVwLlxuIiwgaW50ZW5k
ZWRPd25lciwgc3RvcmFnZSk7Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0oaW50ZW5kZWRP
d25lcik7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShzdG9yYWdlKTsKLSNlbmRpZgotICAgIH0KKyAg
ICBib29sIHNob3VsZERvRnVsbENvbGxlY3Rpb24oSGVhcE9wZXJhdGlvbiByZXF1ZXN0ZWRDb2xs
ZWN0aW9uVHlwZSkgY29uc3Q7CisgICAgc2l6ZV90IHNpemVBZnRlckNvbGxlY3QoKTsKIAotICAg
IGlubGluZSBCbG9ja0FsbG9jYXRvciYgSGVhcDo6YmxvY2tBbGxvY2F0b3IoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fYmxvY2tBbGxvY2F0b3I7Ci0gICAgfQorICAgIEpTU3RhY2smIHN0YWNr
KCk7CisgICAgCisgICAgdm9pZCBpbmNyZW1lbnREZWZlcnJhbERlcHRoKCk7CisgICAgdm9pZCBk
ZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7CisgICAgdm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRo
QW5kR0NJZk5lZWRlZCgpOworCisgICAgY29uc3QgSGVhcFR5cGUgbV9oZWFwVHlwZTsKKyAgICBj
b25zdCBzaXplX3QgbV9yYW1TaXplOworICAgIGNvbnN0IHNpemVfdCBtX21pbkJ5dGVzUGVyQ3lj
bGU7CisgICAgc2l6ZV90IG1fc2l6ZUFmdGVyTGFzdENvbGxlY3Q7CisgICAgc2l6ZV90IG1fc2l6
ZUFmdGVyTGFzdEZ1bGxDb2xsZWN0OworICAgIHNpemVfdCBtX3NpemVCZWZvcmVMYXN0RnVsbENv
bGxlY3Q7CisgICAgc2l6ZV90IG1fc2l6ZUFmdGVyTGFzdEVkZW5Db2xsZWN0OworICAgIHNpemVf
dCBtX3NpemVCZWZvcmVMYXN0RWRlbkNvbGxlY3Q7CisKKyAgICBzaXplX3QgbV9ieXRlc0FsbG9j
YXRlZFRoaXNDeWNsZTsKKyAgICBzaXplX3QgbV9ieXRlc0FiYW5kb25lZFNpbmNlTGFzdEZ1bGxD
b2xsZWN0OworICAgIHNpemVfdCBtX21heEVkZW5TaXplOworICAgIHNpemVfdCBtX21heEhlYXBT
aXplOworICAgIGJvb2wgbV9zaG91bGREb0Z1bGxDb2xsZWN0aW9uOworICAgIHNpemVfdCBtX3Rv
dGFsQnl0ZXNWaXNpdGVkOworICAgIHNpemVfdCBtX3RvdGFsQnl0ZXNDb3BpZWQ7CisgICAgCisg
ICAgSGVhcE9wZXJhdGlvbiBtX29wZXJhdGlvbkluUHJvZ3Jlc3M7CisgICAgQmxvY2tBbGxvY2F0
b3IgbV9ibG9ja0FsbG9jYXRvcjsKKyAgICBTdHJ1Y3R1cmVJRFRhYmxlIG1fc3RydWN0dXJlSURU
YWJsZTsKKyAgICBNYXJrZWRTcGFjZSBtX29iamVjdFNwYWNlOworICAgIENvcGllZFNwYWNlIG1f
c3RvcmFnZVNwYWNlOworICAgIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PEFycmF5QnVmZmVyPiBt
X2FycmF5QnVmZmVyczsKKyAgICBzaXplX3QgbV9leHRyYU1lbW9yeVVzYWdlOworCisgICAgSGFz
aFNldDxjb25zdCBKU0NlbGwqPiBtX2NvcHlpbmdSZW1lbWJlcmVkU2V0OworCisgICAgUHJvdGVj
dENvdW50U2V0IG1fcHJvdGVjdGVkVmFsdWVzOworICAgIFZlY3RvcjxWZWN0b3I8VmFsdWVTdHJp
bmdQYWlyLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4qPiBtX3RlbXBTb3J0aW5nVmVjdG9yczsK
KyAgICBPd25QdHI8SGFzaFNldDxNYXJrZWRBcmd1bWVudEJ1ZmZlcio+PiBtX21hcmtMaXN0U2V0
OwogCi0jaWYgVVNFKENGKQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgIGlubGluZSB2
b2lkIEhlYXA6OnJlbGVhc2VTb29uKFJldGFpblB0cjxUPiYmIG9iamVjdCkKLSAgICB7Ci0gICAg
ICAgIG1fb2JqZWN0U3BhY2UucmVsZWFzZVNvb24oc3RkOjptb3ZlKG9iamVjdCkpOwotICAgIH0K
LSNlbmRpZgorICAgIE1hY2hpbmVUaHJlYWRzIG1fbWFjaGluZVRocmVhZHM7CisgICAgCisgICAg
R0NUaHJlYWRTaGFyZWREYXRhIG1fc2hhcmVkRGF0YTsKKyAgICBTbG90VmlzaXRvciBtX3Nsb3RW
aXNpdG9yOworICAgIENvcHlWaXNpdG9yIG1fY29weVZpc2l0b3I7CisKKyAgICBIYW5kbGVTZXQg
bV9oYW5kbGVTZXQ7CisgICAgSGFuZGxlU3RhY2sgbV9oYW5kbGVTdGFjazsKKyAgICBDb2RlQmxv
Y2tTZXQgbV9jb2RlQmxvY2tzOworICAgIEpJVFN0dWJSb3V0aW5lU2V0IG1faml0U3R1YlJvdXRp
bmVzOworICAgIEZpbmFsaXplck93bmVyIG1fZmluYWxpemVyT3duZXI7CisgICAgCisgICAgYm9v
bCBtX2lzU2FmZVRvQ29sbGVjdDsKKworICAgIFdyaXRlQmFycmllckJ1ZmZlciBtX3dyaXRlQmFy
cmllckJ1ZmZlcjsKIAorICAgIFZNKiBtX3ZtOworICAgIGRvdWJsZSBtX2xhc3RGdWxsR0NMZW5n
dGg7CisgICAgZG91YmxlIG1fbGFzdEVkZW5HQ0xlbmd0aDsKKyAgICBkb3VibGUgbV9sYXN0Q29k
ZURpc2NhcmRUaW1lOwogCi1pbmxpbmUgdm9pZCBIZWFwOjppbmNyZW1lbnREZWZlcnJhbERlcHRo
KCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChtX2RlZmVycmFsRGVwdGggPCAxMDApOyAvLyBTYW5p
dHkgY2hlY2sgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBnZXQgcmlkaWN1bG91cy4KLSAgICBt
X2RlZmVycmFsRGVwdGgrKzsKLX0KLQotaW5saW5lIHZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJy
YWxEZXB0aCgpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9kZWZlcnJhbERlcHRoID49IDEpOwot
ICAgIG1fZGVmZXJyYWxEZXB0aC0tOwotfQotCi1pbmxpbmUgYm9vbCBIZWFwOjpjb2xsZWN0SWZO
ZWNlc3NhcnlPckRlZmVyKCkKLXsKLSAgICBpZiAoaXNEZWZlcnJlZCgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXNob3VsZENvbGxlY3QoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgY29sbGVjdCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgdm9p
ZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCgpCi17Ci0gICAgZGVj
cmVtZW50RGVmZXJyYWxEZXB0aCgpOwotICAgIGNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsK
LX0KKyAgICBEb3VibHlMaW5rZWRMaXN0PEV4ZWN1dGFibGVCYXNlPiBtX2NvbXBpbGVkQ29kZTsK
KyAgICAKKyAgICBSZWZQdHI8R0NBY3Rpdml0eUNhbGxiYWNrPiBtX2Z1bGxBY3Rpdml0eUNhbGxi
YWNrOworICAgIFJlZlB0cjxHQ0FjdGl2aXR5Q2FsbGJhY2s+IG1fZWRlbkFjdGl2aXR5Q2FsbGJh
Y2s7CisgICAgT3duUHRyPEluY3JlbWVudGFsU3dlZXBlcj4gbV9zd2VlcGVyOworICAgIFZlY3Rv
cjxNYXJrZWRCbG9jayo+IG1fYmxvY2tTbmFwc2hvdDsKKyAgICAKKyAgICB1bnNpZ25lZCBtX2Rl
ZmVycmFsRGVwdGg7Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDI1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSGVhcElubGluZXNfaAorI2RlZmluZSBIZWFw
SW5saW5lc19oCisKKyNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSlNDZWxsLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitpbmxpbmUgYm9vbCBIZWFwOjpzaG91bGRDb2xsZWN0KCkKK3sKKyAg
ICBpZiAoaXNEZWZlcnJlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKE9wdGlv
bnM6OmdjTWF4SGVhcFNpemUoKSkKKyAgICAgICAgcmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWRUaGlz
Q3ljbGUgPiBPcHRpb25zOjpnY01heEhlYXBTaXplKCkgJiYgbV9pc1NhZmVUb0NvbGxlY3QgJiYg
bV9vcGVyYXRpb25JblByb2dyZXNzID09IE5vT3BlcmF0aW9uOworICAgIHJldHVybiBtX2J5dGVz
QWxsb2NhdGVkVGhpc0N5Y2xlID4gbV9tYXhFZGVuU2l6ZSAmJiBtX2lzU2FmZVRvQ29sbGVjdCAm
JiBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb247Cit9CisKK2lubGluZSBib29s
IEhlYXA6OmlzQnVzeSgpCit7CisgICAgcmV0dXJuIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyAhPSBO
b09wZXJhdGlvbjsKK30KKworaW5saW5lIGJvb2wgSGVhcDo6aXNDb2xsZWN0aW5nKCkKK3sKKyAg
ICByZXR1cm4gbV9vcGVyYXRpb25JblByb2dyZXNzID09IEZ1bGxDb2xsZWN0aW9uIHx8IG1fb3Bl
cmF0aW9uSW5Qcm9ncmVzcyA9PSBFZGVuQ29sbGVjdGlvbjsKK30KKworaW5saW5lIEhlYXAqIEhl
YXA6OmhlYXAoY29uc3QgSlNDZWxsKiBjZWxsKQoreworICAgIHJldHVybiBNYXJrZWRCbG9jazo6
YmxvY2tGb3IoY2VsbCktPmhlYXAoKTsKK30KKworaW5saW5lIEhlYXAqIEhlYXA6OmhlYXAoY29u
c3QgSlNWYWx1ZSB2KQoreworICAgIGlmICghdi5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIGhlYXAodi5hc0NlbGwoKSk7Cit9CisKK2lubGluZSBib29sIEhlYXA6Omlz
TGl2ZShjb25zdCB2b2lkKiBjZWxsKQoreworICAgIHJldHVybiBNYXJrZWRCbG9jazo6YmxvY2tG
b3IoY2VsbCktPmlzTGl2ZUNlbGwoY2VsbCk7Cit9CisKK2lubGluZSBib29sIEhlYXA6OmlzSW5S
ZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2VsbCogY2VsbCkgY29uc3QKK3sKKyAgICBBU1NFUlQoY2Vs
bCk7CisgICAgQVNTRVJUKCFPcHRpb25zOjplbmFibGVDb25jdXJyZW50SklUKCkgfHwgIWlzQ29t
cGlsYXRpb25UaHJlYWQoKSk7CisgICAgcmV0dXJuIE1hcmtlZEJsb2NrOjpibG9ja0ZvcihjZWxs
KS0+aXNSZW1lbWJlcmVkKGNlbGwpOworfQorCitpbmxpbmUgYm9vbCBIZWFwOjppc01hcmtlZChj
b25zdCB2b2lkKiBjZWxsKQoreworICAgIHJldHVybiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2Vs
bCktPmlzTWFya2VkKGNlbGwpOworfQorCitpbmxpbmUgYm9vbCBIZWFwOjp0ZXN0QW5kU2V0TWFy
a2VkKGNvbnN0IHZvaWQqIGNlbGwpCit7CisgICAgcmV0dXJuIE1hcmtlZEJsb2NrOjpibG9ja0Zv
cihjZWxsKS0+dGVzdEFuZFNldE1hcmtlZChjZWxsKTsKK30KKworaW5saW5lIHZvaWQgSGVhcDo6
c2V0TWFya2VkKGNvbnN0IHZvaWQqIGNlbGwpCit7CisgICAgTWFya2VkQmxvY2s6OmJsb2NrRm9y
KGNlbGwpLT5zZXRNYXJrZWQoY2VsbCk7Cit9CisKK2lubGluZSBib29sIEhlYXA6OmlzV3JpdGVC
YXJyaWVyRW5hYmxlZCgpCit7CisjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKSB8
fCBFTkFCTEUoR0dDKQorICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7
CisjZW5kaWYKK30KKworaW5saW5lIHZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2Vs
bCogZnJvbSwgSlNWYWx1ZSB0bykKK3sKKyNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJ
TkcpCisgICAgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmNvdW50V3JpdGVCYXJyaWVyKCk7CisjZW5k
aWYKKyAgICBpZiAoIXRvLmlzQ2VsbCgpKQorICAgICAgICByZXR1cm47CisgICAgd3JpdGVCYXJy
aWVyKGZyb20sIHRvLmFzQ2VsbCgpKTsKK30KKworaW5saW5lIHZvaWQgSGVhcDo6cmVwb3J0RXh0
cmFNZW1vcnlDb3N0KHNpemVfdCBjb3N0KQoreworICAgIGlmIChjb3N0ID4gbWluRXh0cmFDb3N0
KSAKKyAgICAgICAgcmVwb3J0RXh0cmFNZW1vcnlDb3N0U2xvd0Nhc2UoY29zdCk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB0eXBlbmFtZSBGdW5jdG9yOjpSZXR1cm5U
eXBlIEhlYXA6OmZvckVhY2hQcm90ZWN0ZWRDZWxsKEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAg
Zm9yIChhdXRvJiBwYWlyIDogbV9wcm90ZWN0ZWRWYWx1ZXMpCisgICAgICAgIGZ1bmN0b3IocGFp
ci5rZXkpOworICAgIG1faGFuZGxlU2V0LmZvckVhY2hTdHJvbmdIYW5kbGUoZnVuY3RvciwgbV9w
cm90ZWN0ZWRWYWx1ZXMpOworCisgICAgcmV0dXJuIGZ1bmN0b3IucmV0dXJuVmFsdWUoKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHR5cGVuYW1lIEZ1bmN0b3I6OlJl
dHVyblR5cGUgSGVhcDo6Zm9yRWFjaFByb3RlY3RlZENlbGwoKQoreworICAgIEZ1bmN0b3IgZnVu
Y3RvcjsKKyAgICByZXR1cm4gZm9yRWFjaFByb3RlY3RlZENlbGwoZnVuY3Rvcik7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB2b2lkIEhlYXA6OmZvckVhY2hDb2RlQmxv
Y2soRnVuY3RvciYgZnVuY3RvcikKK3sKKyAgICByZXR1cm4gbV9jb2RlQmxvY2tzLml0ZXJhdGU8
RnVuY3Rvcj4oZnVuY3Rvcik7Cit9CisKK2lubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZVdpdGhO
b3JtYWxEZXN0cnVjdG9yKHNpemVfdCBieXRlcykKK3sKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9M
T0dHSU5HKQorICAgIGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGluZyAlbHUgYnl0ZXMgd2l0aCBu
b3JtYWwgZGVzdHJ1Y3Rvci5cbiIsIGJ5dGVzKTsKKyNlbmRpZgorICAgIEFTU0VSVChpc1ZhbGlk
QWxsb2NhdGlvbihieXRlcykpOworICAgIHJldHVybiBtX29iamVjdFNwYWNlLmFsbG9jYXRlV2l0
aE5vcm1hbERlc3RydWN0b3IoYnl0ZXMpOworfQorCitpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2Nh
dGVXaXRoSW1tb3J0YWxTdHJ1Y3R1cmVEZXN0cnVjdG9yKHNpemVfdCBieXRlcykKK3sKKyNpZiBF
TkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgIGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGlu
ZyAlbHUgYnl0ZXMgd2l0aCBpbW1vcnRhbCBzdHJ1Y3R1cmUgZGVzdHJ1Y3Rvci5cbiIsIGJ5dGVz
KTsKKyNlbmRpZgorICAgIEFTU0VSVChpc1ZhbGlkQWxsb2NhdGlvbihieXRlcykpOworICAgIHJl
dHVybiBtX29iamVjdFNwYWNlLmFsbG9jYXRlV2l0aEltbW9ydGFsU3RydWN0dXJlRGVzdHJ1Y3Rv
cihieXRlcyk7Cit9CisKK2lubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZVdpdGhvdXREZXN0cnVj
dG9yKHNpemVfdCBieXRlcykKK3sKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAg
IGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGluZyAlbHUgYnl0ZXMgd2l0aG91dCBkZXN0cnVjdG9y
LlxuIiwgYnl0ZXMpOworI2VuZGlmCisgICAgQVNTRVJUKGlzVmFsaWRBbGxvY2F0aW9uKGJ5dGVz
KSk7CisgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuYWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3Rvcihi
eXRlcyk7Cit9CisKK2lubGluZSBDaGVja2VkQm9vbGVhbiBIZWFwOjp0cnlBbGxvY2F0ZVN0b3Jh
Z2UoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpCit7
CisgICAgQ2hlY2tlZEJvb2xlYW4gcmVzdWx0ID0gbV9zdG9yYWdlU3BhY2UudHJ5QWxsb2NhdGUo
Ynl0ZXMsIG91dFB0cik7CisjaWYgRU5BQkxFKEFMTE9DQVRJT05fTE9HR0lORykKKyAgICBkYXRh
TG9nRigiSlNDIEdDIGFsbG9jYXRpbmcgJWx1IGJ5dGVzIG9mIHN0b3JhZ2UgZm9yICVwOiAlcC5c
biIsIGJ5dGVzLCBpbnRlbmRlZE93bmVyLCAqb3V0UHRyKTsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKGludGVuZGVkT3duZXIpOworI2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5s
aW5lIENoZWNrZWRCb29sZWFuIEhlYXA6OnRyeVJlYWxsb2NhdGVTdG9yYWdlKEpTQ2VsbCogaW50
ZW5kZWRPd25lciwgdm9pZCoqIHB0ciwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQor
eworI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCisgICAgdm9pZCogb2xkUHRyID0gKnB0
cjsKKyNlbmRpZgorICAgIENoZWNrZWRCb29sZWFuIHJlc3VsdCA9IG1fc3RvcmFnZVNwYWNlLnRy
eVJlYWxsb2NhdGUocHRyLCBvbGRTaXplLCBuZXdTaXplKTsKKyNpZiBFTkFCTEUoQUxMT0NBVElP
Tl9MT0dHSU5HKQorICAgIGRhdGFMb2dGKCJKU0MgR0MgcmVhbGxvY2F0aW5nICVsdSAtPiAlbHUg
Ynl0ZXMgb2Ygc3RvcmFnZSBmb3IgJXA6ICVwIC0+ICVwLlxuIiwgb2xkU2l6ZSwgbmV3U2l6ZSwg
aW50ZW5kZWRPd25lciwgb2xkUHRyLCAqcHRyKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGlu
dGVuZGVkT3duZXIpOworI2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZv
aWQgSGVhcDo6YXNjcmliZU93bmVyKEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdm9pZCogc3RvcmFn
ZSkKK3sKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgIGRhdGFMb2dGKCJKU0Mg
R0MgYXNjcmliaW5nICVwIGFzIG93bmVyIG9mIHN0b3JhZ2UgJXAuXG4iLCBpbnRlbmRlZE93bmVy
LCBzdG9yYWdlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGludGVuZGVkT3duZXIpOworICAg
IFVOVVNFRF9QQVJBTShzdG9yYWdlKTsKKyNlbmRpZgorfQorCitpbmxpbmUgQmxvY2tBbGxvY2F0
b3ImIEhlYXA6OmJsb2NrQWxsb2NhdG9yKCkKK3sKKyAgICByZXR1cm4gbV9ibG9ja0FsbG9jYXRv
cjsKK30KKworI2lmIFVTRShDRikKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgoraW5saW5lIHZvaWQg
SGVhcDo6cmVsZWFzZVNvb24oUmV0YWluUHRyPFQ+JiYgb2JqZWN0KQoreworICAgIG1fb2JqZWN0
U3BhY2UucmVsZWFzZVNvb24oc3RkOjptb3ZlKG9iamVjdCkpOworfQorI2VuZGlmCisKK2lubGlu
ZSB2b2lkIEhlYXA6OmluY3JlbWVudERlZmVycmFsRGVwdGgoKQoreworICAgIFJFTEVBU0VfQVNT
RVJUKG1fZGVmZXJyYWxEZXB0aCA8IDEwMCk7IC8vIFNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUg
dGhpcyBkb2Vzbid0IGdldCByaWRpY3Vsb3VzLgorICAgIG1fZGVmZXJyYWxEZXB0aCsrOworfQor
CitpbmxpbmUgdm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoKCkKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVChtX2RlZmVycmFsRGVwdGggPj0gMSk7CisgICAgbV9kZWZlcnJhbERlcHRoLS07
Cit9CisKK2lubGluZSBib29sIEhlYXA6OmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKQorewor
ICAgIGlmIChpc0RlZmVycmVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICgh
c2hvdWxkQ29sbGVjdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb2xsZWN0KCk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSB2b2lkIEhlYXA6OmRlY3JlbWVudERlZmVy
cmFsRGVwdGhBbmRHQ0lmTmVlZGVkKCkKK3sKKyAgICBkZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7
CisgICAgY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpOworfQorCitpbmxpbmUgSGFzaFNldDxN
YXJrZWRBcmd1bWVudEJ1ZmZlcio+JiBIZWFwOjptYXJrTGlzdFNldCgpCit7CisgICAgaWYgKCFt
X21hcmtMaXN0U2V0KQorICAgICAgICBtX21hcmtMaXN0U2V0ID0gYWRvcHRQdHIobmV3IEhhc2hT
ZXQ8TWFya2VkQXJndW1lbnRCdWZmZXIqPik7IAorICAgIHJldHVybiAqbV9tYXJrTGlzdFNldDsK
K30KKyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSGVhcElubGluZXNfaApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAkocmV2aXNp
b24gMTY2MTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiQ2FsbEZyYW1lSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNsdWRlICJHQ0luY29t
aW5nUmVmQ291bnRlZElubGluZXMuaCIKKyNpbmNsdWRlICJIZWFwSW5saW5lcy5oIgogI2luY2x1
ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNs
dWRlICJKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaCIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227819</attachid>
            <date>2014-03-25 18:14:16 -0700</date>
            <delta_ts>2014-03-25 18:25:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-130759-20140325181355.patch</filename>
            <type>text/plain</type>
            <size>49935</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY2Mjc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBA
CisyMDE0LTAzLTI1ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQWRkIEhlYXBJbmxpbmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzA3NTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNj
cmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzOgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
aGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2tTbmFwc2hvdEZ1bmN0b3I6
Ok1hcmtlZEJsb2NrU25hcHNob3RGdW5jdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2tT
bmFwc2hvdEZ1bmN0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOiBBbHNv
IHJlaW5kZW50ZWQgd2hpbGUgd2UncmUgaGVyZS4KKyAgICAgICAgKEpTQzo6SGVhcDo6d3JpdGVC
YXJyaWVyQnVmZmVyKToKKyAgICAgICAgKEpTQzo6SGVhcDo6dm0pOgorICAgICAgICAoSlNDOjpI
ZWFwOjpvYmplY3RTcGFjZSk6CisgICAgICAgIChKU0M6OkhlYXA6Om1hY2hpbmVUaHJlYWRzKToK
KyAgICAgICAgKEpTQzo6SGVhcDo6b3BlcmF0aW9uSW5Qcm9ncmVzcyk6CisgICAgICAgIChKU0M6
OkhlYXA6OmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6YWxsb2NhdG9yRm9yT2JqZWN0V2l0aE5vcm1hbERlc3RydWN0b3IpOgorICAgICAg
ICAoSlNDOjpIZWFwOjphbGxvY2F0b3JGb3JPYmplY3RXaXRoSW1tb3J0YWxTdHJ1Y3R1cmVEZXN0
cnVjdG9yKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c3RvcmFnZUFsbG9jYXRvcik6CisgICAgICAg
IChKU0M6OkhlYXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6
OmlzU2FmZVRvQ29sbGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OmhhbmRsZVNldCk6CisgICAg
ICAgIChKU0M6OkhlYXA6OmhhbmRsZVN0YWNrKToKKyAgICAgICAgKEpTQzo6SGVhcDo6bGFzdEZ1
bGxHQ0xlbmd0aCk6CisgICAgICAgIChKU0M6OkhlYXA6Omxhc3RFZGVuR0NMZW5ndGgpOgorICAg
ICAgICAoSlNDOjpIZWFwOjppbmNyZWFzZUxhc3RGdWxsR0NMZW5ndGgpOgorICAgICAgICAoSlND
OjpIZWFwOjpzaXplQmVmb3JlTGFzdEVkZW5Db2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6c2l6ZUFmdGVyTGFzdEVkZW5Db2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c2l6
ZUJlZm9yZUxhc3RGdWxsQ29sbGVjdGlvbik6CisgICAgICAgIChKU0M6OkhlYXA6OnNpemVBZnRl
ckxhc3RGdWxsQ29sbGVjdGlvbik6CisgICAgICAgIChKU0M6OkhlYXA6OmppdFN0dWJSb3V0aW5l
cyk6CisgICAgICAgIChKU0M6OkhlYXA6OmlzRGVmZXJyZWQpOgorICAgICAgICAoSlNDOjpIZWFw
OjpzdHJ1Y3R1cmVJRFRhYmxlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVtb3ZlQ29kZUJsb2Nr
KToKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpI
ZWFwOjpzaG91bGRDb2xsZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNCdXN5KToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6aXNDb2xsZWN0aW5nKToKKyAgICAgICAgKEpTQzo6SGVhcDo6aGVhcCk6
CisgICAgICAgIChKU0M6OkhlYXA6OmlzTGl2ZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmlzSW5S
ZW1lbWJlcmVkU2V0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNNYXJrZWQpOgorICAgICAgICAo
SlNDOjpIZWFwOjp0ZXN0QW5kU2V0TWFya2VkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c2V0TWFy
a2VkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6d3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVwb3J0
RXh0cmFNZW1vcnlDb3N0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9yRWFjaFByb3RlY3RlZENl
bGwpOgorICAgICAgICAoSlNDOjpIZWFwOjpmb3JFYWNoQ29kZUJsb2NrKToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6YWxsb2NhdGVXaXRoTm9ybWFsRGVzdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6Okhl
YXA6OmFsbG9jYXRlV2l0aEltbW9ydGFsU3RydWN0dXJlRGVzdHJ1Y3Rvcik6CisgICAgICAgIChK
U0M6OkhlYXA6OmFsbG9jYXRlV2l0aG91dERlc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpIZWFw
Ojp0cnlBbGxvY2F0ZVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpIZWFwOjp0cnlSZWFsbG9jYXRl
U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmFzY3JpYmVPd25lcik6CisgICAgICAgIChK
U0M6OkhlYXA6OmJsb2NrQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVsZWFzZVNv
b24pOgorICAgICAgICAoSlNDOjpIZWFwOjppbmNyZW1lbnREZWZlcnJhbERlcHRoKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aCk6CisgICAgICAgIChKU0M6Okhl
YXA6OmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIpOgorICAgICAgICAoSlNDOjpIZWFwOjpkZWNy
ZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCk6CisgICAgICAgIChKU0M6OkhlYXA6Om1h
cmtMaXN0U2V0KToKKyAgICAgICAgKiBydW50aW1lL0pTQ0lubGluZXMuaDoKKwogMjAxNC0wMy0y
NSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCAzMi1iaXQg
Z2V0dGVyIGNhbGwgYWxpZ25tZW50LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE2NjI3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC01OTQsNiArNTk0LDcgQEAg
amF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
R0NUaHJlYWQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAgXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcElubGluZXMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcEl0
ZXJhdGlvblNjb3BlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBPcGVyYXRp
b24uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFN0YXRpc3RpY3MuY3BwIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTY2
Mjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2
YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA2Myw2ICsxMDYzLDcgQEAK
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGFuZGxlVHlwZXMuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGVhcC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caGVhcFxIZWFwQmxvY2suaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGhlYXBcSGVhcElubGluZXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBc
SGVhcE9wZXJhdGlvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxIZWFw
Um9vdFZpc2l0b3IuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGVhcFN0
YXRpc3RpY3MuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE2NjI3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVy
cwkod29ya2luZyBjb3B5KQpAQCAtMTczOSw2ICsxNzM5LDkgQEAKICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGhlYXBcSGVhcEJsb2NrLmgiPgogICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+
CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBJ
bmxpbmVzLmgiPgorICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBPcGVyYXRpb24uaCI+CiAgICAg
ICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjYyNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMTQzNSw2ICsxNDM1LDcgQEAKIAkJQzJDOEQwMzExNEEzQ0VGQzAwNTc4RTY1IC8q
IEhlYXBCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzJDOEQwMkYxNEEzQ0VGQzAwNTc4RTY1IC8qIEhlYXBCbG9jay5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyQ0YzOUMxMTZFMTVBODEwMERE
NjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDMkNGMzlCRjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFw
cGVyT2JqZWN0Lm1tICovOyB9OwogCQlDMkNGMzlDMjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElX
cmFwcGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDMkNGMzlDMDE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0LmggKi87
IH07CisJCUMyREE3NzgzMThFMjU5OTkwMDY2RkNCNiAvKiBIZWFwSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJEQTc3ODIxOEUyNTk5OTAw
NjZGQ0I2IC8qIEhlYXBJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQzJERjQ0MkYxNzA3QUMwMTAwQTVDQTk2IC8qIFN1cGVyUmVnaW9u
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyREY0
NDJEMTcwN0FDMDEwMEE1Q0E5NiAvKiBTdXBlclJlZ2lvbi5jcHAgKi87IH07CiAJCUMyREY0NDMw
MTcwN0FDMDEwMEE1Q0E5NiAvKiBTdXBlclJlZ2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJERjQ0MkUxNzA3QUMwMTAwQTVDQTk2IC8qIFN1cGVy
UmVnaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQzJFNTI2QkQxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkU1MjZCQjE1OTBFRjAwMDA1NEU0
OEQgLyogSGVhcFRpbWVyLmNwcCAqLzsgfTsKQEAgLTI5NzYsNiArMjk3Nyw3IEBACiAJCUMyQzhE
MDJGMTRBM0NFRkMwMDU3OEU2NSAvKiBIZWFwQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSGVhcEJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMy
Q0YzOUJGMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBKU0FQSVdyYXBwZXJPYmplY3QubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyQ0YzOUMwMTZFMTVBODEwMERENjlCRSAvKiBK
U0FQSVdyYXBwZXJPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNB
UElXcmFwcGVyT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyREE3Nzgy
MThFMjU5OTkwMDY2RkNCNiAvKiBIZWFwSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIZWFwSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
MkRGNDQyRDE3MDdBQzAxMDBBNUNBOTYgLyogU3VwZXJSZWdpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3VwZXJSZWdpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDMkRGNDQyRTE3MDdBQzAxMDBBNUNBOTYgLyogU3VwZXJSZWdpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3VwZXJSZWdpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJFNTI2QkIxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1l
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZWFwVGltZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzUxOSw2ICszNTIxLDcgQEAKIAkJMTQy
RTMxMkExMzRGRjBBNjAwQUZBREI1IC8qIGhlYXAgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAorCQkJCUMyREE3NzgyMThFMjU5OTkwMDY2RkNCNiAvKiBIZWFwSW5s
aW5lcy5oICovLAogCQkJCUFEREIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0
LmggKi8sCiAJCQkJMkFBQ0U2M0ExOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFj
ay5jcHAgKi8sCiAJCQkJMkFBQ0U2M0IxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxs
YmFjay5oICovLApAQCAtNDk0MCw2ICs0OTQzLDcgQEAKIAkJCQlBMUEwMDlDMTE4MzFBMjZFMDBD
Rjg3MTEgLyogQVJNNjRBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RDNCMkM0MTAx
NTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1ODQw
MzIwMThCRkZCRTEwMDVBMDgxMSAvKiBJbnNwZWN0b3JBZ2VudC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQzJEQTc3ODMxOEUyNTk5OTAwNjZGQ0I2IC8qIEhlYXBJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyQUFDRTYzRDE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkyQTgzNjM4NjE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0
aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkE4MzYzOEExOEQ3RDBGRTAwMDBF
QkNDIC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE2NjI3NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDE2LDYgKzEw
MTYsMTkgQEAgdm9pZCBIZWFwOjpzd2VlcEFycmF5QnVmZmVycygpCiAgICAgbV9hcnJheUJ1ZmZl
cnMuc3dlZXAoKTsKIH0KIAorc3RydWN0IE1hcmtlZEJsb2NrU25hcHNob3RGdW5jdG9yIDogcHVi
bGljIE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7CisgICAgTWFya2VkQmxvY2tTbmFwc2hvdEZ1
bmN0b3IoVmVjdG9yPE1hcmtlZEJsb2NrKj4mIGJsb2NrcykgCisgICAgICAgIDogbV9pbmRleCgw
KSAKKyAgICAgICAgLCBtX2Jsb2NrcyhibG9ja3MpCisgICAgeworICAgIH0KKworICAgIHZvaWQg
b3BlcmF0b3IoKShNYXJrZWRCbG9jayogYmxvY2spIHsgbV9ibG9ja3NbbV9pbmRleCsrXSA9IGJs
b2NrOyB9CisKKyAgICBzaXplX3QgbV9pbmRleDsKKyAgICBWZWN0b3I8TWFya2VkQmxvY2sqPiYg
bV9ibG9ja3M7Cit9OworCiB2b2lkIEhlYXA6OnNuYXBzaG90TWFya2VkU3BhY2UoKQogewogICAg
IEdDUEhBU0UoU25hcHNob3RNYXJrZWRTcGFjZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5oCShyZXZpc2lvbiAxNjYyNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDU0NiArNDksMzI3IEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCi0gICAgY2xhc3MgQ29waWVkU3BhY2U7Ci0gICAgY2xhc3MgQ29kZUJsb2NrOwotICAg
IGNsYXNzIEV4ZWN1dGFibGVCYXNlOwotICAgIGNsYXNzIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2s7
Ci0gICAgY2xhc3MgRnVsbEdDQWN0aXZpdHlDYWxsYmFjazsKLSAgICBjbGFzcyBHQ0FjdGl2aXR5
Q2FsbGJhY2s7Ci0gICAgY2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOwotICAgIGNsYXNzIEds
b2JhbENvZGVCbG9jazsKLSAgICBjbGFzcyBIZWFwOwotICAgIGNsYXNzIEhlYXBSb290VmlzaXRv
cjsKLSAgICBjbGFzcyBJbmNyZW1lbnRhbFN3ZWVwZXI7Ci0gICAgY2xhc3MgSklUU3R1YlJvdXRp
bmU7Ci0gICAgY2xhc3MgSlNDZWxsOwotICAgIGNsYXNzIFZNOwotICAgIGNsYXNzIEpTU3RhY2s7
Ci0gICAgY2xhc3MgSlNWYWx1ZTsKLSAgICBjbGFzcyBMaXZlT2JqZWN0SXRlcmF0b3I7Ci0gICAg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwotICAgIGNsYXNzIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyOwotICAgIGNsYXNzIFdlYWtHQ0hhbmRsZVBvb2w7Ci0gICAgY2xhc3MgU2xvdFZpc2l0b3I7
Ci0KLSAgICB0eXBlZGVmIHN0ZDo6cGFpcjxKU1ZhbHVlLCBXVEY6OlN0cmluZz4gVmFsdWVTdHJp
bmdQYWlyOwotICAgIHR5cGVkZWYgSGFzaENvdW50ZWRTZXQ8SlNDZWxsKj4gUHJvdGVjdENvdW50
U2V0OwotICAgIHR5cGVkZWYgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+IFR5cGVDb3VudFNl
dDsKLQotICAgIGVudW0gSGVhcFR5cGUgeyBTbWFsbEhlYXAsIExhcmdlSGVhcCB9OwotCi0gICAg
Y2xhc3MgSGVhcCB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhlYXApOwotICAgIHB1
YmxpYzoKLSAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKLSAgICAgICAgZnJpZW5kIGNsYXNzIERG
Rzo6U3BlY3VsYXRpdmVKSVQ7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBHQ1RocmVhZFNoYXJlZERh
dGE7Ci0gICAgICAgIHN0YXRpYyBIZWFwKiBoZWFwKGNvbnN0IEpTVmFsdWUpOyAvLyAwIGZvciBp
bW1lZGlhdGUgdmFsdWVzCi0gICAgICAgIHN0YXRpYyBIZWFwKiBoZWFwKGNvbnN0IEpTQ2VsbCop
OwotCi0gICAgICAgIC8vIFRoaXMgY29uc3RhbnQgZGV0ZXJtaW5lcyBob3cgbWFueSBibG9ja3Mg
d2UgaXRlcmF0ZSBiZXR3ZWVuIGNoZWNrcyBvZiBvdXIgCi0gICAgICAgIC8vIGRlYWRsaW5lIHdo
ZW4gY2FsbGluZyBIZWFwOjppc1BhZ2VkT3V0LiBEZWNyZWFzaW5nIGl0IHdpbGwgY2F1c2UgdXMg
dG8gZGV0ZWN0IAotICAgICAgICAvLyBvdmVyc3RlcHBpbmcgb3VyIGRlYWRsaW5lIG1vcmUgcXVp
Y2tseSwgd2hpbGUgaW5jcmVhc2luZyBpdCB3aWxsIGNhdXNlIAotICAgICAgICAvLyBvdXIgc2Nh
biB0byBydW4gZmFzdGVyLiAKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfdGltZUNo
ZWNrUmVzb2x1dGlvbiA9IDE2OwotCi0gICAgICAgIHN0YXRpYyBib29sIGlzTGl2ZShjb25zdCB2
b2lkKik7Ci0gICAgICAgIHN0YXRpYyBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKTsKLSAgICAg
ICAgc3RhdGljIGJvb2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKik7Ci0gICAgICAgIHN0
YXRpYyB2b2lkIHNldE1hcmtlZChjb25zdCB2b2lkKik7Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBhZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZWxsKik7Ci0gICAgICAgIGJv
b2wgaXNJblJlbWVtYmVyZWRTZXQoY29uc3QgSlNDZWxsKiBjZWxsKSBjb25zdAotICAgICAgICB7
Ci0gICAgICAgICAgICBBU1NFUlQoY2VsbCk7Ci0gICAgICAgICAgICBBU1NFUlQoIU9wdGlvbnM6
OmVuYWJsZUNvbmN1cnJlbnRKSVQoKSB8fCAhaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICAg
ICAgICAgIHJldHVybiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmlzUmVtZW1iZXJlZChj
ZWxsKTsKLSAgICAgICAgfQotICAgICAgICBzdGF0aWMgYm9vbCBpc1dyaXRlQmFycmllckVuYWJs
ZWQoKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3Qg
SlNDZWxsKik7Ci0gICAgICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIEpTVmFs
dWUpOwotICAgICAgICB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU0NlbGwqKTsK
LQotICAgICAgICBXcml0ZUJhcnJpZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlcigpIHsgcmV0
dXJuIG1fd3JpdGVCYXJyaWVyQnVmZmVyOyB9Ci0gICAgICAgIHZvaWQgZmx1c2hXcml0ZUJhcnJp
ZXJCdWZmZXIoSlNDZWxsKik7Ci0KLSAgICAgICAgSGVhcChWTSosIEhlYXBUeXBlKTsKLSAgICAg
ICAgfkhlYXAoKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBsYXN0Q2hhbmNlVG9G
aW5hbGl6ZSgpOwotCi0gICAgICAgIFZNKiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1fdm07IH0KLSAg
ICAgICAgTWFya2VkU3BhY2UmIG9iamVjdFNwYWNlKCkgeyByZXR1cm4gbV9vYmplY3RTcGFjZTsg
fQotICAgICAgICBNYWNoaW5lVGhyZWFkcyYgbWFjaGluZVRocmVhZHMoKSB7IHJldHVybiBtX21h
Y2hpbmVUaHJlYWRzOyB9Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgR0NBY3Rpdml0eUNh
bGxiYWNrKiBmdWxsQWN0aXZpdHlDYWxsYmFjaygpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBHQ0FjdGl2aXR5Q2FsbGJhY2sqIGVkZW5BY3Rpdml0eUNhbGxiYWNrKCk7Ci0gICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0RnVsbEFjdGl2aXR5Q2FsbGJhY2soUGFzc1JlZlB0cjxG
dWxsR0NBY3Rpdml0eUNhbGxiYWNrPik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
c2V0RWRlbkFjdGl2aXR5Q2FsbGJhY2soUGFzc1JlZlB0cjxFZGVuR0NBY3Rpdml0eUNhbGxiYWNr
Pik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0R2FyYmFnZUNvbGxlY3Rpb25U
aW1lckVuYWJsZWQoYm9vbCk7Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSW5jcmVtZW50
YWxTd2VlcGVyKiBzd2VlcGVyKCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0
SW5jcmVtZW50YWxTd2VlcGVyKFBhc3NPd25QdHI8SW5jcmVtZW50YWxTd2VlcGVyPik7Ci0KLSAg
ICAgICAgLy8gdHJ1ZSBpZiBjb2xsZWN0aW9uIGlzIGluIHByb2dyZXNzCi0gICAgICAgIGlubGlu
ZSBib29sIGlzQ29sbGVjdGluZygpOwotICAgICAgICBpbmxpbmUgSGVhcE9wZXJhdGlvbiBvcGVy
YXRpb25JblByb2dyZXNzKCkgeyByZXR1cm4gbV9vcGVyYXRpb25JblByb2dyZXNzOyB9Ci0gICAg
ICAgIC8vIHRydWUgaWYgYW4gYWxsb2NhdGlvbiBvciBjb2xsZWN0aW9uIGlzIGluIHByb2dyZXNz
Ci0gICAgICAgIGlubGluZSBib29sIGlzQnVzeSgpOwotICAgICAgICAKLSAgICAgICAgTWFya2Vk
QWxsb2NhdG9yJiBhbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihzaXplX3QgYnl0
ZXMpIHsgcmV0dXJuIG1fb2JqZWN0U3BhY2UuYWxsb2NhdG9yRm9yKGJ5dGVzKTsgfQotICAgICAg
ICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvckZvck9iamVjdFdpdGhOb3JtYWxEZXN0cnVjdG9y
KHNpemVfdCBieXRlcykgeyByZXR1cm4gbV9vYmplY3RTcGFjZS5ub3JtYWxEZXN0cnVjdG9yQWxs
b2NhdG9yRm9yKGJ5dGVzKTsgfQotICAgICAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvckZv
ck9iamVjdFdpdGhJbW1vcnRhbFN0cnVjdHVyZURlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKSB7IHJl
dHVybiBtX29iamVjdFNwYWNlLmltbW9ydGFsU3RydWN0dXJlRGVzdHJ1Y3RvckFsbG9jYXRvckZv
cihieXRlcyk7IH0KLSAgICAgICAgQ29waWVkQWxsb2NhdG9yJiBzdG9yYWdlQWxsb2NhdG9yKCkg
eyByZXR1cm4gbV9zdG9yYWdlU3BhY2UuYWxsb2NhdG9yKCk7IH0KLSAgICAgICAgQ2hlY2tlZEJv
b2xlYW4gdHJ5QWxsb2NhdGVTdG9yYWdlKEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90LCB2
b2lkKiopOwotICAgICAgICBDaGVja2VkQm9vbGVhbiB0cnlSZWFsbG9jYXRlU3RvcmFnZShKU0Nl
bGwqIGludGVuZGVkT3duZXIsIHZvaWQqKiwgc2l6ZV90LCBzaXplX3QpOwotICAgICAgICB2b2lk
IGFzY3JpYmVPd25lcihKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqKTsKLQotICAgICAgICB0
eXBlZGVmIHZvaWQgKCpGaW5hbGl6ZXIpKEpTQ2VsbCopOwotICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGFkZEZpbmFsaXplcihKU0NlbGwqLCBGaW5hbGl6ZXIpOwotICAgICAgICB2b2lk
IGFkZENvbXBpbGVkQ29kZShFeGVjdXRhYmxlQmFzZSopOwotCi0gICAgICAgIHZvaWQgbm90aWZ5
SXNTYWZlVG9Db2xsZWN0KCkgeyBtX2lzU2FmZVRvQ29sbGVjdCA9IHRydWU7IH0KLSAgICAgICAg
Ym9vbCBpc1NhZmVUb0NvbGxlY3QoKSBjb25zdCB7IHJldHVybiBtX2lzU2FmZVRvQ29sbGVjdDsg
fQotCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29sbGVjdEFsbEdhcmJhZ2UoKTsK
LSAgICAgICAgYm9vbCBzaG91bGRDb2xsZWN0KCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgY29sbGVjdChIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlID0gQW55Q29sbGVjdGlv
bik7Ci0gICAgICAgIGJvb2wgY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpOyAvLyBSZXR1cm5z
IHRydWUgaWYgaXQgZGlkIGNvbGxlY3QuCi0KLSAgICAgICAgdm9pZCByZXBvcnRFeHRyYU1lbW9y
eUNvc3Qoc2l6ZV90IGNvc3QpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlcG9y
dEFiYW5kb25lZE9iamVjdEdyYXBoKCk7Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBwcm90ZWN0KEpTVmFsdWUpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHVucHJv
dGVjdChKU1ZhbHVlKTsgLy8gVHJ1ZSB3aGVuIHRoZSBwcm90ZWN0IGNvdW50IGRyb3BzIHRvIDAu
Ci0gICAgICAgIAotICAgICAgICBzaXplX3QgZXh0cmFTaXplKCk7IC8vIGV4dHJhIG1lbW9yeSB1
c2FnZSBvdXRzaWRlIG9mIHBhZ2VzIGFsbG9jYXRlZCBieSB0aGUgaGVhcAotICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzaXplX3Qgc2l6ZSgpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBz
aXplX3QgY2FwYWNpdHkoKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IG9iamVj
dENvdW50KCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBnbG9iYWxPYmplY3RD
b3VudCgpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3QgcHJvdGVjdGVkT2JqZWN0
Q291bnQoKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IHByb3RlY3RlZEdsb2Jh
bE9iamVjdENvdW50KCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFBhc3NPd25QdHI8VHlw
ZUNvdW50U2V0PiBwcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCk7Ci0gICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIFBhc3NPd25QdHI8VHlwZUNvdW50U2V0PiBvYmplY3RUeXBlQ291bnRzKCk7Ci0g
ICAgICAgIHZvaWQgc2hvd1N0YXRpc3RpY3MoKTsKLQotICAgICAgICB2b2lkIHB1c2hUZW1wU29y
dFZlY3RvcihWZWN0b3I8VmFsdWVTdHJpbmdQYWlyLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4q
KTsKLSAgICAgICAgdm9pZCBwb3BUZW1wU29ydFZlY3RvcihWZWN0b3I8VmFsdWVTdHJpbmdQYWly
LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4qKTsKLSAgICAKLSAgICAgICAgSGFzaFNldDxNYXJr
ZWRBcmd1bWVudEJ1ZmZlcio+JiBtYXJrTGlzdFNldCgpIHsgaWYgKCFtX21hcmtMaXN0U2V0KSBt
X21hcmtMaXN0U2V0ID0gYWRvcHRQdHIobmV3IEhhc2hTZXQ8TWFya2VkQXJndW1lbnRCdWZmZXIq
Pik7IHJldHVybiAqbV9tYXJrTGlzdFNldDsgfQotICAgICAgICAKLSAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlwZSBmb3JFYWNoUHJv
dGVjdGVkQ2VsbChGdW5jdG9yJik7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
IHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgZm9yRWFjaFByb3RlY3RlZENlbGwoKTsKLSAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgZm9yRWFjaENvZGVC
bG9jayhGdW5jdG9yJik7Ci0KLSAgICAgICAgSGFuZGxlU2V0KiBoYW5kbGVTZXQoKSB7IHJldHVy
biAmbV9oYW5kbGVTZXQ7IH0KLSAgICAgICAgSGFuZGxlU3RhY2sqIGhhbmRsZVN0YWNrKCkgeyBy
ZXR1cm4gJm1faGFuZGxlU3RhY2s7IH0KLQotICAgICAgICB2b2lkIHdpbGxTdGFydEl0ZXJhdGlu
ZygpOwotICAgICAgICB2b2lkIGRpZEZpbmlzaEl0ZXJhdGluZygpOwotICAgICAgICB2b2lkIGdl
dENvbnNlcnZhdGl2ZVJlZ2lzdGVyUm9vdHMoSGFzaFNldDxKU0NlbGwqPiYgcm9vdHMpOwotCi0g
ICAgICAgIGRvdWJsZSBsYXN0RnVsbEdDTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RnVs
bEdDTGVuZ3RoOyB9Ci0gICAgICAgIGRvdWJsZSBsYXN0RWRlbkdDTGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXN0RWRlbkdDTGVuZ3RoOyB9Ci0gICAgICAgIHZvaWQgaW5jcmVhc2VMYXN0RnVs
bEdDTGVuZ3RoKGRvdWJsZSBhbW91bnQpIHsgbV9sYXN0RnVsbEdDTGVuZ3RoICs9IGFtb3VudDsg
fQotCi0gICAgICAgIHNpemVfdCBzaXplQmVmb3JlTGFzdEVkZW5Db2xsZWN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9zaXplQmVmb3JlTGFzdEVkZW5Db2xsZWN0OyB9Ci0gICAgICAgIHNpemVfdCBz
aXplQWZ0ZXJMYXN0RWRlbkNvbGxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3NpemVBZnRlckxh
c3RFZGVuQ29sbGVjdDsgfQotICAgICAgICBzaXplX3Qgc2l6ZUJlZm9yZUxhc3RGdWxsQ29sbGVj
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZUJlZm9yZUxhc3RGdWxsQ29sbGVjdDsgfQotICAg
ICAgICBzaXplX3Qgc2l6ZUFmdGVyTGFzdEZ1bGxDb2xsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9zaXplQWZ0ZXJMYXN0RnVsbENvbGxlY3Q7IH0KLQotICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIGRlbGV0ZUFsbENvbXBpbGVkQ29kZSgpOwotICAgICAgICB2b2lkIGRlbGV0ZUFsbFVu
bGlua2VkRnVuY3Rpb25Db2RlKCk7Ci0KLSAgICAgICAgdm9pZCBkaWRBbGxvY2F0ZShzaXplX3Qp
OwotICAgICAgICB2b2lkIGRpZEFiYW5kb24oc2l6ZV90KTsKLQotICAgICAgICBib29sIGlzUGFn
ZWRPdXQoZG91YmxlIGRlYWRsaW5lKTsKLSAgICAgICAgCi0gICAgICAgIGNvbnN0IEpJVFN0dWJS
b3V0aW5lU2V0JiBqaXRTdHViUm91dGluZXMoKSB7IHJldHVybiBtX2ppdFN0dWJSb3V0aW5lczsg
fQotICAgICAgICAKLSAgICAgICAgdm9pZCBhZGRSZWZlcmVuY2UoSlNDZWxsKiwgQXJyYXlCdWZm
ZXIqKTsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgaXNEZWZlcnJlZCgpIGNvbnN0IHsgcmV0dXJu
ICEhbV9kZWZlcnJhbERlcHRoIHx8IE9wdGlvbnM6OmRpc2FibGVHQygpOyB9CitjbGFzcyBDb3Bp
ZWRTcGFjZTsKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNzIEV4ZWN1dGFibGVCYXNlOworY2xhc3Mg
RWRlbkdDQWN0aXZpdHlDYWxsYmFjazsKK2NsYXNzIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2s7Citj
bGFzcyBHQ0FjdGl2aXR5Q2FsbGJhY2s7CitjbGFzcyBHQ0F3YXJlSklUU3R1YlJvdXRpbmU7Citj
bGFzcyBHbG9iYWxDb2RlQmxvY2s7CitjbGFzcyBIZWFwOworY2xhc3MgSGVhcFJvb3RWaXNpdG9y
OworY2xhc3MgSW5jcmVtZW50YWxTd2VlcGVyOworY2xhc3MgSklUU3R1YlJvdXRpbmU7CitjbGFz
cyBKU0NlbGw7CitjbGFzcyBWTTsKK2NsYXNzIEpTU3RhY2s7CitjbGFzcyBKU1ZhbHVlOworY2xh
c3MgTGl2ZU9iamVjdEl0ZXJhdG9yOworY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworY2xh
c3MgTWFya2VkQXJndW1lbnRCdWZmZXI7CitjbGFzcyBXZWFrR0NIYW5kbGVQb29sOworY2xhc3Mg
U2xvdFZpc2l0b3I7CisKK3R5cGVkZWYgc3RkOjpwYWlyPEpTVmFsdWUsIFdURjo6U3RyaW5nPiBW
YWx1ZVN0cmluZ1BhaXI7Cit0eXBlZGVmIEhhc2hDb3VudGVkU2V0PEpTQ2VsbCo+IFByb3RlY3RD
b3VudFNldDsKK3R5cGVkZWYgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+IFR5cGVDb3VudFNl
dDsKKworZW51bSBIZWFwVHlwZSB7IFNtYWxsSGVhcCwgTGFyZ2VIZWFwIH07CisKK2NsYXNzIEhl
YXAgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhlYXApOworcHVibGljOgorICAgIGZyaWVu
ZCBjbGFzcyBKSVQ7CisgICAgZnJpZW5kIGNsYXNzIERGRzo6U3BlY3VsYXRpdmVKSVQ7CisgICAg
ZnJpZW5kIGNsYXNzIEdDVGhyZWFkU2hhcmVkRGF0YTsKKyAgICBzdGF0aWMgSGVhcCogaGVhcChj
b25zdCBKU1ZhbHVlKTsgLy8gMCBmb3IgaW1tZWRpYXRlIHZhbHVlcworICAgIHN0YXRpYyBIZWFw
KiBoZWFwKGNvbnN0IEpTQ2VsbCopOworCisgICAgLy8gVGhpcyBjb25zdGFudCBkZXRlcm1pbmVz
IGhvdyBtYW55IGJsb2NrcyB3ZSBpdGVyYXRlIGJldHdlZW4gY2hlY2tzIG9mIG91ciAKKyAgICAv
LyBkZWFkbGluZSB3aGVuIGNhbGxpbmcgSGVhcDo6aXNQYWdlZE91dC4gRGVjcmVhc2luZyBpdCB3
aWxsIGNhdXNlIHVzIHRvIGRldGVjdCAKKyAgICAvLyBvdmVyc3RlcHBpbmcgb3VyIGRlYWRsaW5l
IG1vcmUgcXVpY2tseSwgd2hpbGUgaW5jcmVhc2luZyBpdCB3aWxsIGNhdXNlIAorICAgIC8vIG91
ciBzY2FuIHRvIHJ1biBmYXN0ZXIuIAorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3RpbWVD
aGVja1Jlc29sdXRpb24gPSAxNjsKKworICAgIHN0YXRpYyBib29sIGlzTGl2ZShjb25zdCB2b2lk
Kik7CisgICAgc3RhdGljIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopOworICAgIHN0YXRpYyBi
b29sIHRlc3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9pZCopOworICAgIHN0YXRpYyB2b2lkIHNldE1h
cmtlZChjb25zdCB2b2lkKik7CisgICAgc3RhdGljIGJvb2wgaXNSZW1lbWJlcmVkKGNvbnN0IHZv
aWQqKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkVG9SZW1lbWJlcmVkU2V0KGNv
bnN0IEpTQ2VsbCopOworICAgIGJvb2wgaXNJblJlbWVtYmVyZWRTZXQoY29uc3QgSlNDZWxsKikg
Y29uc3Q7CisgICAgc3RhdGljIGJvb2wgaXNXcml0ZUJhcnJpZXJFbmFibGVkKCk7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKik7CisgICAgdm9p
ZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwgSlNWYWx1ZSk7CisgICAgdm9pZCB3cml0ZUJh
cnJpZXIoY29uc3QgSlNDZWxsKiwgSlNDZWxsKik7CisKKyAgICBXcml0ZUJhcnJpZXJCdWZmZXIm
IHdyaXRlQmFycmllckJ1ZmZlcigpIHsgcmV0dXJuIG1fd3JpdGVCYXJyaWVyQnVmZmVyOyB9Cisg
ICAgdm9pZCBmbHVzaFdyaXRlQmFycmllckJ1ZmZlcihKU0NlbGwqKTsKKworICAgIEhlYXAoVk0q
LCBIZWFwVHlwZSk7CisgICAgfkhlYXAoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGxh
c3RDaGFuY2VUb0ZpbmFsaXplKCk7CisKKyAgICBWTSogdm0oKSBjb25zdCB7IHJldHVybiBtX3Zt
OyB9CisgICAgTWFya2VkU3BhY2UmIG9iamVjdFNwYWNlKCkgeyByZXR1cm4gbV9vYmplY3RTcGFj
ZTsgfQorICAgIE1hY2hpbmVUaHJlYWRzJiBtYWNoaW5lVGhyZWFkcygpIHsgcmV0dXJuIG1fbWFj
aGluZVRocmVhZHM7IH0KKworICAgIEpTX0VYUE9SVF9QUklWQVRFIEdDQWN0aXZpdHlDYWxsYmFj
ayogZnVsbEFjdGl2aXR5Q2FsbGJhY2soKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2
aXR5Q2FsbGJhY2sqIGVkZW5BY3Rpdml0eUNhbGxiYWNrKCk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBzZXRGdWxsQWN0aXZpdHlDYWxsYmFjayhQYXNzUmVmUHRyPEZ1bGxHQ0FjdGl2aXR5
Q2FsbGJhY2s+KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldEVkZW5BY3Rpdml0eUNh
bGxiYWNrKFBhc3NSZWZQdHI8RWRlbkdDQWN0aXZpdHlDYWxsYmFjaz4pOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgc2V0R2FyYmFnZUNvbGxlY3Rpb25UaW1lckVuYWJsZWQoYm9vbCk7CisK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBJbmNyZW1lbnRhbFN3ZWVwZXIqIHN3ZWVwZXIoKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldEluY3JlbWVudGFsU3dlZXBlcihQYXNzT3duUHRy
PEluY3JlbWVudGFsU3dlZXBlcj4pOworCisgICAgLy8gdHJ1ZSBpZiBjb2xsZWN0aW9uIGlzIGlu
IHByb2dyZXNzCisgICAgYm9vbCBpc0NvbGxlY3RpbmcoKTsKKyAgICBIZWFwT3BlcmF0aW9uIG9w
ZXJhdGlvbkluUHJvZ3Jlc3MoKSB7IHJldHVybiBtX29wZXJhdGlvbkluUHJvZ3Jlc3M7IH0KKyAg
ICAvLyB0cnVlIGlmIGFuIGFsbG9jYXRpb24gb3IgY29sbGVjdGlvbiBpcyBpbiBwcm9ncmVzcwor
ICAgIGJvb2wgaXNCdXN5KCk7CisgICAgCisgICAgTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JG
b3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihzaXplX3QgYnl0ZXMpIHsgcmV0dXJuIG1fb2JqZWN0
U3BhY2UuYWxsb2NhdG9yRm9yKGJ5dGVzKTsgfQorICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2Nh
dG9yRm9yT2JqZWN0V2l0aE5vcm1hbERlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKSB7IHJldHVybiBt
X29iamVjdFNwYWNlLm5vcm1hbERlc3RydWN0b3JBbGxvY2F0b3JGb3IoYnl0ZXMpOyB9CisgICAg
TWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3JPYmplY3RXaXRoSW1tb3J0YWxTdHJ1Y3R1cmVE
ZXN0cnVjdG9yKHNpemVfdCBieXRlcykgeyByZXR1cm4gbV9vYmplY3RTcGFjZS5pbW1vcnRhbFN0
cnVjdHVyZURlc3RydWN0b3JBbGxvY2F0b3JGb3IoYnl0ZXMpOyB9CisgICAgQ29waWVkQWxsb2Nh
dG9yJiBzdG9yYWdlQWxsb2NhdG9yKCkgeyByZXR1cm4gbV9zdG9yYWdlU3BhY2UuYWxsb2NhdG9y
KCk7IH0KKyAgICBDaGVja2VkQm9vbGVhbiB0cnlBbGxvY2F0ZVN0b3JhZ2UoSlNDZWxsKiBpbnRl
bmRlZE93bmVyLCBzaXplX3QsIHZvaWQqKik7CisgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5UmVhbGxv
Y2F0ZVN0b3JhZ2UoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKiosIHNpemVfdCwgc2l6ZV90
KTsKKyAgICB2b2lkIGFzY3JpYmVPd25lcihKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqKTsK
KworICAgIHR5cGVkZWYgdm9pZCAoKkZpbmFsaXplcikoSlNDZWxsKik7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBhZGRGaW5hbGl6ZXIoSlNDZWxsKiwgRmluYWxpemVyKTsKKyAgICB2b2lk
IGFkZENvbXBpbGVkQ29kZShFeGVjdXRhYmxlQmFzZSopOworCisgICAgdm9pZCBub3RpZnlJc1Nh
ZmVUb0NvbGxlY3QoKSB7IG1faXNTYWZlVG9Db2xsZWN0ID0gdHJ1ZTsgfQorICAgIGJvb2wgaXNT
YWZlVG9Db2xsZWN0KCkgY29uc3QgeyByZXR1cm4gbV9pc1NhZmVUb0NvbGxlY3Q7IH0KKworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29sbGVjdEFsbEdhcmJhZ2UoKTsKKyAgICBib29sIHNo
b3VsZENvbGxlY3QoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvbGxlY3QoSGVhcE9w
ZXJhdGlvbiBjb2xsZWN0aW9uVHlwZSA9IEFueUNvbGxlY3Rpb24pOworICAgIGJvb2wgY29sbGVj
dElmTmVjZXNzYXJ5T3JEZWZlcigpOyAvLyBSZXR1cm5zIHRydWUgaWYgaXQgZGlkIGNvbGxlY3Qu
CisKKyAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplX3QgY29zdCk7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRBYmFuZG9uZWRPYmplY3RHcmFwaCgpOworCisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcm90ZWN0KEpTVmFsdWUpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIGJvb2wgdW5wcm90ZWN0KEpTVmFsdWUpOyAvLyBUcnVlIHdoZW4gdGhlIHByb3RlY3Qg
Y291bnQgZHJvcHMgdG8gMC4KKyAgICAKKyAgICBzaXplX3QgZXh0cmFTaXplKCk7IC8vIGV4dHJh
IG1lbW9yeSB1c2FnZSBvdXRzaWRlIG9mIHBhZ2VzIGFsbG9jYXRlZCBieSB0aGUgaGVhcAorICAg
IEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBzaXplKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c2l6ZV90IGNhcGFjaXR5KCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IG9iamVjdENv
dW50KCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGdsb2JhbE9iamVjdENvdW50KCk7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IHByb3RlY3RlZE9iamVjdENvdW50KCk7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IHByb3RlY3RlZEdsb2JhbE9iamVjdENvdW50KCk7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGFzc093blB0cjxUeXBlQ291bnRTZXQ+IHByb3RlY3Rl
ZE9iamVjdFR5cGVDb3VudHMoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBQYXNzT3duUHRyPFR5
cGVDb3VudFNldD4gb2JqZWN0VHlwZUNvdW50cygpOworICAgIHZvaWQgc2hvd1N0YXRpc3RpY3Mo
KTsKKworICAgIHZvaWQgcHVzaFRlbXBTb3J0VmVjdG9yKFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXIs
IDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiopOworICAgIHZvaWQgcG9wVGVtcFNvcnRWZWN0b3Io
VmVjdG9yPFZhbHVlU3RyaW5nUGFpciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+Kik7CisKKyAg
ICBIYXNoU2V0PE1hcmtlZEFyZ3VtZW50QnVmZmVyKj4mIG1hcmtMaXN0U2V0KCk7CisgICAgCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlw
ZSBmb3JFYWNoUHJvdGVjdGVkQ2VsbChGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4gdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlwZSBmb3JFYWNoUHJvdGVjdGVkQ2Vs
bCgpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENvZGVCbG9j
ayhGdW5jdG9yJik7CisKKyAgICBIYW5kbGVTZXQqIGhhbmRsZVNldCgpIHsgcmV0dXJuICZtX2hh
bmRsZVNldDsgfQorICAgIEhhbmRsZVN0YWNrKiBoYW5kbGVTdGFjaygpIHsgcmV0dXJuICZtX2hh
bmRsZVN0YWNrOyB9CisKKyAgICB2b2lkIHdpbGxTdGFydEl0ZXJhdGluZygpOworICAgIHZvaWQg
ZGlkRmluaXNoSXRlcmF0aW5nKCk7CisgICAgdm9pZCBnZXRDb25zZXJ2YXRpdmVSZWdpc3RlclJv
b3RzKEhhc2hTZXQ8SlNDZWxsKj4mIHJvb3RzKTsKKworICAgIGRvdWJsZSBsYXN0RnVsbEdDTGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RnVsbEdDTGVuZ3RoOyB9CisgICAgZG91YmxlIGxh
c3RFZGVuR0NMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xhc3RFZGVuR0NMZW5ndGg7IH0KKyAg
ICB2b2lkIGluY3JlYXNlTGFzdEZ1bGxHQ0xlbmd0aChkb3VibGUgYW1vdW50KSB7IG1fbGFzdEZ1
bGxHQ0xlbmd0aCArPSBhbW91bnQ7IH0KIAotICAgICAgICBCbG9ja0FsbG9jYXRvciYgYmxvY2tB
bGxvY2F0b3IoKTsKLSAgICAgICAgU3RydWN0dXJlSURUYWJsZSYgc3RydWN0dXJlSURUYWJsZSgp
IHsgcmV0dXJuIG1fc3RydWN0dXJlSURUYWJsZTsgfQorICAgIHNpemVfdCBzaXplQmVmb3JlTGFz
dEVkZW5Db2xsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zaXplQmVmb3JlTGFzdEVkZW5Db2xs
ZWN0OyB9CisgICAgc2l6ZV90IHNpemVBZnRlckxhc3RFZGVuQ29sbGVjdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fc2l6ZUFmdGVyTGFzdEVkZW5Db2xsZWN0OyB9CisgICAgc2l6ZV90IHNpemVCZWZv
cmVMYXN0RnVsbENvbGxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3NpemVCZWZvcmVMYXN0RnVs
bENvbGxlY3Q7IH0KKyAgICBzaXplX3Qgc2l6ZUFmdGVyTGFzdEZ1bGxDb2xsZWN0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9zaXplQWZ0ZXJMYXN0RnVsbENvbGxlY3Q7IH0KKworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgZGVsZXRlQWxsQ29tcGlsZWRDb2RlKCk7CisgICAgdm9pZCBkZWxldGVB
bGxVbmxpbmtlZEZ1bmN0aW9uQ29kZSgpOworCisgICAgdm9pZCBkaWRBbGxvY2F0ZShzaXplX3Qp
OworICAgIHZvaWQgZGlkQWJhbmRvbihzaXplX3QpOworCisgICAgYm9vbCBpc1BhZ2VkT3V0KGRv
dWJsZSBkZWFkbGluZSk7CisgICAgCisgICAgY29uc3QgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0
dWJSb3V0aW5lcygpIHsgcmV0dXJuIG1faml0U3R1YlJvdXRpbmVzOyB9CisgICAgCisgICAgdm9p
ZCBhZGRSZWZlcmVuY2UoSlNDZWxsKiwgQXJyYXlCdWZmZXIqKTsKKyAgICAKKyAgICBib29sIGlz
RGVmZXJyZWQoKSBjb25zdCB7IHJldHVybiAhIW1fZGVmZXJyYWxEZXB0aCB8fCBPcHRpb25zOjpk
aXNhYmxlR0MoKTsgfQorCisgICAgQmxvY2tBbGxvY2F0b3ImIGJsb2NrQWxsb2NhdG9yKCk7Cisg
ICAgU3RydWN0dXJlSURUYWJsZSYgc3RydWN0dXJlSURUYWJsZSgpIHsgcmV0dXJuIG1fc3RydWN0
dXJlSURUYWJsZTsgfQogCiAjaWYgVVNFKENGKQogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB2b2lkIHJlbGVhc2VTb29uKFJldGFpblB0cjxUPiYmKTsKICNlbmRpZgogCi0gICAgICAgIHZv
aWQgcmVtb3ZlQ29kZUJsb2NrKENvZGVCbG9jayogY2IpIHsgbV9jb2RlQmxvY2tzLnJlbW92ZShj
Yik7IH0KKyAgICB2b2lkIHJlbW92ZUNvZGVCbG9jayhDb2RlQmxvY2sqIGNiKSB7IG1fY29kZUJs
b2Nrcy5yZW1vdmUoY2IpOyB9CiAKLSAgICBwcml2YXRlOgotICAgICAgICBmcmllbmQgY2xhc3Mg
Q29kZUJsb2NrOwotICAgICAgICBmcmllbmQgY2xhc3MgQ29waWVkQmxvY2s7Ci0gICAgICAgIGZy
aWVuZCBjbGFzcyBEZWZlckdDOwotICAgICAgICBmcmllbmQgY2xhc3MgRGVmZXJHQ0ZvckFXaGls
ZTsKLSAgICAgICAgZnJpZW5kIGNsYXNzIERlbGF5ZWRSZWxlYXNlU2NvcGU7Ci0gICAgICAgIGZy
aWVuZCBjbGFzcyBHQ0F3YXJlSklUU3R1YlJvdXRpbmU7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBI
YW5kbGVTZXQ7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViUm91dGluZTsKLSAgICAgICAg
ZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLSAgICAgICAgZnJpZW5kIGNsYXNz
IE1hcmtlZFNwYWNlOwotICAgICAgICBmcmllbmQgY2xhc3MgTWFya2VkQWxsb2NhdG9yOwotICAg
ICAgICBmcmllbmQgY2xhc3MgTWFya2VkQmxvY2s7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBDb3Bp
ZWRTcGFjZTsKLSAgICAgICAgZnJpZW5kIGNsYXNzIENvcHlWaXNpdG9yOwotICAgICAgICBmcmll
bmQgY2xhc3MgUmVjdXJzaXZlQWxsb2NhdGlvblNjb3BlOwotICAgICAgICBmcmllbmQgY2xhc3Mg
U2xvdFZpc2l0b3I7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBTdXBlclJlZ2lvbjsKLSAgICAgICAg
ZnJpZW5kIGNsYXNzIEluY3JlbWVudGFsU3dlZXBlcjsKLSAgICAgICAgZnJpZW5kIGNsYXNzIEhl
YXBTdGF0aXN0aWNzOwotICAgICAgICBmcmllbmQgY2xhc3MgVk07Ci0gICAgICAgIGZyaWVuZCBj
bGFzcyBXZWFrU2V0OwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBmcmllbmQgdm9pZCog
YWxsb2NhdGVDZWxsKEhlYXAmKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJpZW5k
IHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiwgc2l6ZV90KTsKLQotICAgICAgICB2b2lkKiBhbGxv
Y2F0ZVdpdGhJbW1vcnRhbFN0cnVjdHVyZURlc3RydWN0b3Ioc2l6ZV90KTsgLy8gRm9yIHVzZSB3
aXRoIHNwZWNpYWwgb2JqZWN0cyB3aG9zZSBTdHJ1Y3R1cmVzIG5ldmVyIGRpZS4KLSAgICAgICAg
dm9pZCogYWxsb2NhdGVXaXRoTm9ybWFsRGVzdHJ1Y3RvcihzaXplX3QpOyAvLyBGb3IgdXNlIHdp
dGggb2JqZWN0cyB0aGF0IGluaGVyaXQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBmcm9tIEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LgotICAgICAgICB2b2lkKiBhbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9y
KHNpemVfdCk7IC8vIEZvciB1c2Ugd2l0aCBvYmplY3RzIHdpdGhvdXQgZGVzdHJ1Y3RvcnMuCi0K
LSAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtaW5FeHRyYUNvc3QgPSAyNTY7Ci0gICAgICAg
IHN0YXRpYyBjb25zdCBzaXplX3QgbWF4RXh0cmFDb3N0ID0gMTAyNCAqIDEwMjQ7Ci0gICAgICAg
IAotICAgICAgICBjbGFzcyBGaW5hbGl6ZXJPd25lciA6IHB1YmxpYyBXZWFrSGFuZGxlT3duZXIg
ewotICAgICAgICAgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9p
ZCogY29udGV4dCkgb3ZlcnJpZGU7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgYm9vbCBpc1ZhbGlkQWxsb2NhdGlvbihzaXplX3QpOwotICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5Q29zdFNsb3dDYXNlKHNpemVfdCk7Ci0KLSAg
ICAgICAgdm9pZCBzdXNwZW5kQ29tcGlsZXJUaHJlYWRzKCk7Ci0gICAgICAgIHZvaWQgd2lsbFN0
YXJ0Q29sbGVjdGlvbihIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlKTsKLSAgICAgICAgdm9p
ZCBkZWxldGVPbGRDb2RlKGRvdWJsZSBnY1N0YXJ0VGltZSk7Ci0gICAgICAgIHZvaWQgZmx1c2hP
bGRTdHJ1Y3R1cmVJRFRhYmxlcygpOwotICAgICAgICB2b2lkIGZsdXNoV3JpdGVCYXJyaWVyQnVm
ZmVyKCk7Ci0gICAgICAgIHZvaWQgc3RvcEFsbG9jYXRpb24oKTsKLQotICAgICAgICB2b2lkIG1h
cmtSb290cygpOwotICAgICAgICB2b2lkIGdhdGhlclN0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9v
dHMmLCB2b2lkKiogZHVtbXkpOwotICAgICAgICB2b2lkIGdhdGhlckpTU3RhY2tSb290cyhDb25z
ZXJ2YXRpdmVSb290cyYpOwotICAgICAgICB2b2lkIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhD
b25zZXJ2YXRpdmVSb290cyYpOwotICAgICAgICB2b2lkIGNsZWFyTGl2ZW5lc3NEYXRhKCk7Ci0g
ICAgICAgIHZvaWQgdmlzaXRTbWFsbFN0cmluZ3MoKTsKLSAgICAgICAgdm9pZCB2aXNpdENvbnNl
cnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7Ci0gICAgICAgIHZvaWQgdmlzaXRDb21w
aWxlcldvcmtsaXN0cygpOwotICAgICAgICB2b2lkIHZpc2l0UHJvdGVjdGVkT2JqZWN0cyhIZWFw
Um9vdFZpc2l0b3ImKTsKLSAgICAgICAgdm9pZCB2aXNpdFRlbXBTb3J0VmVjdG9ycyhIZWFwUm9v
dFZpc2l0b3ImKTsKLSAgICAgICAgdm9pZCB2aXNpdEFyZ3VtZW50QnVmZmVycyhIZWFwUm9vdFZp
c2l0b3ImKTsKLSAgICAgICAgdm9pZCB2aXNpdEV4Y2VwdGlvbihIZWFwUm9vdFZpc2l0b3ImKTsK
LSAgICAgICAgdm9pZCB2aXNpdFN0cm9uZ0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAg
ICAgIHZvaWQgdmlzaXRIYW5kbGVTdGFjayhIZWFwUm9vdFZpc2l0b3ImKTsKLSAgICAgICAgdm9p
ZCB0cmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMoKTsKLSAgICAgICAgdm9pZCBjb252
ZXJnZSgpOwotICAgICAgICB2b2lkIHZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7
Ci0gICAgICAgIHZvaWQgY2xlYXJSZW1lbWJlcmVkU2V0KFZlY3Rvcjxjb25zdCBKU0NlbGwqPiYp
OwotICAgICAgICB2b2lkIHVwZGF0ZU9iamVjdENvdW50cygpOwotICAgICAgICB2b2lkIHJlc2V0
VmlzaXRvcnMoKTsKLQotICAgICAgICB2b2lkIHJlYXBXZWFrSGFuZGxlcygpOwotICAgICAgICB2
b2lkIHN3ZWVwQXJyYXlCdWZmZXJzKCk7Ci0gICAgICAgIHZvaWQgc25hcHNob3RNYXJrZWRTcGFj
ZSgpOwotICAgICAgICB2b2lkIGRlbGV0ZVNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7Ci0gICAgICAg
IHZvaWQgbm90aWZ5SW5jcmVtZW50YWxTd2VlcGVyKCk7Ci0gICAgICAgIHZvaWQgcmVtZW1iZXJD
dXJyZW50bHlFeGVjdXRpbmdDb2RlQmxvY2tzKCk7Ci0gICAgICAgIHZvaWQgcmVzZXRBbGxvY2F0
b3JzKCk7Ci0gICAgICAgIHZvaWQgY29weUJhY2tpbmdTdG9yZXMoKTsKLSAgICAgICAgdm9pZCBo
YXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKLSAgICAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9u
YWxGaW5hbGl6ZXJzKCk7Ci0gICAgICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUo
KTsKLSAgICAgICAgdm9pZCB1cGRhdGVBbGxvY2F0aW9uTGltaXRzKCk7Ci0gICAgICAgIHZvaWQg
ZGlkRmluaXNoQ29sbGVjdGlvbihkb3VibGUgZ2NTdGFydFRpbWUpOwotICAgICAgICB2b2lkIHJl
c3VtZUNvbXBpbGVyVGhyZWFkcygpOwotICAgICAgICB2b2lkIHpvbWJpZnlEZWFkT2JqZWN0cygp
OwotICAgICAgICB2b2lkIG1hcmtEZWFkT2JqZWN0cygpOwotCi0gICAgICAgIGJvb2wgc2hvdWxk
RG9GdWxsQ29sbGVjdGlvbihIZWFwT3BlcmF0aW9uIHJlcXVlc3RlZENvbGxlY3Rpb25UeXBlKSBj
b25zdDsKLSAgICAgICAgc2l6ZV90IHNpemVBZnRlckNvbGxlY3QoKTsKLQotICAgICAgICBKU1N0
YWNrJiBzdGFjaygpOwotICAgICAgICAKLSAgICAgICAgdm9pZCBpbmNyZW1lbnREZWZlcnJhbERl
cHRoKCk7Ci0gICAgICAgIHZvaWQgZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOwotICAgICAgICB2
b2lkIGRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkKCk7Ci0KLSAgICAgICAgY29u
c3QgSGVhcFR5cGUgbV9oZWFwVHlwZTsKLSAgICAgICAgY29uc3Qgc2l6ZV90IG1fcmFtU2l6ZTsK
LSAgICAgICAgY29uc3Qgc2l6ZV90IG1fbWluQnl0ZXNQZXJDeWNsZTsKLSAgICAgICAgc2l6ZV90
IG1fc2l6ZUFmdGVyTGFzdENvbGxlY3Q7Ci0gICAgICAgIHNpemVfdCBtX3NpemVBZnRlckxhc3RG
dWxsQ29sbGVjdDsKLSAgICAgICAgc2l6ZV90IG1fc2l6ZUJlZm9yZUxhc3RGdWxsQ29sbGVjdDsK
LSAgICAgICAgc2l6ZV90IG1fc2l6ZUFmdGVyTGFzdEVkZW5Db2xsZWN0OwotICAgICAgICBzaXpl
X3QgbV9zaXplQmVmb3JlTGFzdEVkZW5Db2xsZWN0OwotCi0gICAgICAgIHNpemVfdCBtX2J5dGVz
QWxsb2NhdGVkVGhpc0N5Y2xlOwotICAgICAgICBzaXplX3QgbV9ieXRlc0FiYW5kb25lZFNpbmNl
TGFzdEZ1bGxDb2xsZWN0OwotICAgICAgICBzaXplX3QgbV9tYXhFZGVuU2l6ZTsKLSAgICAgICAg
c2l6ZV90IG1fbWF4SGVhcFNpemU7Ci0gICAgICAgIGJvb2wgbV9zaG91bGREb0Z1bGxDb2xsZWN0
aW9uOwotICAgICAgICBzaXplX3QgbV90b3RhbEJ5dGVzVmlzaXRlZDsKLSAgICAgICAgc2l6ZV90
IG1fdG90YWxCeXRlc0NvcGllZDsKLSAgICAgICAgCi0gICAgICAgIEhlYXBPcGVyYXRpb24gbV9v
cGVyYXRpb25JblByb2dyZXNzOwotICAgICAgICBCbG9ja0FsbG9jYXRvciBtX2Jsb2NrQWxsb2Nh
dG9yOwotICAgICAgICBTdHJ1Y3R1cmVJRFRhYmxlIG1fc3RydWN0dXJlSURUYWJsZTsKLSAgICAg
ICAgTWFya2VkU3BhY2UgbV9vYmplY3RTcGFjZTsKLSAgICAgICAgQ29waWVkU3BhY2UgbV9zdG9y
YWdlU3BhY2U7Ci0gICAgICAgIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PEFycmF5QnVmZmVyPiBt
X2FycmF5QnVmZmVyczsKLSAgICAgICAgc2l6ZV90IG1fZXh0cmFNZW1vcnlVc2FnZTsKLQotICAg
ICAgICBIYXNoU2V0PGNvbnN0IEpTQ2VsbCo+IG1fY29weWluZ1JlbWVtYmVyZWRTZXQ7Ci0KLSAg
ICAgICAgUHJvdGVjdENvdW50U2V0IG1fcHJvdGVjdGVkVmFsdWVzOwotICAgICAgICBWZWN0b3I8
VmVjdG9yPFZhbHVlU3RyaW5nUGFpciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+Kj4gbV90ZW1w
U29ydGluZ1ZlY3RvcnM7Ci0gICAgICAgIE93blB0cjxIYXNoU2V0PE1hcmtlZEFyZ3VtZW50QnVm
ZmVyKj4+IG1fbWFya0xpc3RTZXQ7Ci0KLSAgICAgICAgTWFjaGluZVRocmVhZHMgbV9tYWNoaW5l
VGhyZWFkczsKLSAgICAgICAgCi0gICAgICAgIEdDVGhyZWFkU2hhcmVkRGF0YSBtX3NoYXJlZERh
dGE7Ci0gICAgICAgIFNsb3RWaXNpdG9yIG1fc2xvdFZpc2l0b3I7Ci0gICAgICAgIENvcHlWaXNp
dG9yIG1fY29weVZpc2l0b3I7Ci0KLSAgICAgICAgSGFuZGxlU2V0IG1faGFuZGxlU2V0OwotICAg
ICAgICBIYW5kbGVTdGFjayBtX2hhbmRsZVN0YWNrOwotICAgICAgICBDb2RlQmxvY2tTZXQgbV9j
b2RlQmxvY2tzOwotICAgICAgICBKSVRTdHViUm91dGluZVNldCBtX2ppdFN0dWJSb3V0aW5lczsK
LSAgICAgICAgRmluYWxpemVyT3duZXIgbV9maW5hbGl6ZXJPd25lcjsKLSAgICAgICAgCi0gICAg
ICAgIGJvb2wgbV9pc1NhZmVUb0NvbGxlY3Q7Ci0KLSAgICAgICAgV3JpdGVCYXJyaWVyQnVmZmVy
IG1fd3JpdGVCYXJyaWVyQnVmZmVyOwotCi0gICAgICAgIFZNKiBtX3ZtOwotICAgICAgICBkb3Vi
bGUgbV9sYXN0RnVsbEdDTGVuZ3RoOwotICAgICAgICBkb3VibGUgbV9sYXN0RWRlbkdDTGVuZ3Ro
OwotICAgICAgICBkb3VibGUgbV9sYXN0Q29kZURpc2NhcmRUaW1lOwotCi0gICAgICAgIERvdWJs
eUxpbmtlZExpc3Q8RXhlY3V0YWJsZUJhc2U+IG1fY29tcGlsZWRDb2RlOwotICAgICAgICAKLSAg
ICAgICAgUmVmUHRyPEdDQWN0aXZpdHlDYWxsYmFjaz4gbV9mdWxsQWN0aXZpdHlDYWxsYmFjazsK
LSAgICAgICAgUmVmUHRyPEdDQWN0aXZpdHlDYWxsYmFjaz4gbV9lZGVuQWN0aXZpdHlDYWxsYmFj
azsKLSAgICAgICAgT3duUHRyPEluY3JlbWVudGFsU3dlZXBlcj4gbV9zd2VlcGVyOwotICAgICAg
ICBWZWN0b3I8TWFya2VkQmxvY2sqPiBtX2Jsb2NrU25hcHNob3Q7Ci0gICAgICAgIAotICAgICAg
ICB1bnNpZ25lZCBtX2RlZmVycmFsRGVwdGg7Ci0gICAgfTsKK3ByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIENvZGVCbG9jazsKKyAgICBmcmllbmQgY2xhc3MgQ29waWVkQmxvY2s7CisgICAgZnJp
ZW5kIGNsYXNzIERlZmVyR0M7CisgICAgZnJpZW5kIGNsYXNzIERlZmVyR0NGb3JBV2hpbGU7Cisg
ICAgZnJpZW5kIGNsYXNzIERlbGF5ZWRSZWxlYXNlU2NvcGU7CisgICAgZnJpZW5kIGNsYXNzIEdD
QXdhcmVKSVRTdHViUm91dGluZTsKKyAgICBmcmllbmQgY2xhc3MgSGFuZGxlU2V0OworICAgIGZy
aWVuZCBjbGFzcyBKSVRTdHViUm91dGluZTsKKyAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRz
RXh0cmFjdG9yOworICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRTcGFjZTsKKyAgICBmcmllbmQgY2xh
c3MgTWFya2VkQWxsb2NhdG9yOworICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9jazsKKyAgICBm
cmllbmQgY2xhc3MgQ29waWVkU3BhY2U7CisgICAgZnJpZW5kIGNsYXNzIENvcHlWaXNpdG9yOwor
ICAgIGZyaWVuZCBjbGFzcyBSZWN1cnNpdmVBbGxvY2F0aW9uU2NvcGU7CisgICAgZnJpZW5kIGNs
YXNzIFNsb3RWaXNpdG9yOworICAgIGZyaWVuZCBjbGFzcyBTdXBlclJlZ2lvbjsKKyAgICBmcmll
bmQgY2xhc3MgSW5jcmVtZW50YWxTd2VlcGVyOworICAgIGZyaWVuZCBjbGFzcyBIZWFwU3RhdGlz
dGljczsKKyAgICBmcmllbmQgY2xhc3MgVk07CisgICAgZnJpZW5kIGNsYXNzIFdlYWtTZXQ7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJpZW5kIHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJik7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJpZW5kIHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFw
Jiwgc2l6ZV90KTsKKworICAgIHZvaWQqIGFsbG9jYXRlV2l0aEltbW9ydGFsU3RydWN0dXJlRGVz
dHJ1Y3RvcihzaXplX3QpOyAvLyBGb3IgdXNlIHdpdGggc3BlY2lhbCBvYmplY3RzIHdob3NlIFN0
cnVjdHVyZXMgbmV2ZXIgZGllLgorICAgIHZvaWQqIGFsbG9jYXRlV2l0aE5vcm1hbERlc3RydWN0
b3Ioc2l6ZV90KTsgLy8gRm9yIHVzZSB3aXRoIG9iamVjdHMgdGhhdCBpbmhlcml0IGRpcmVjdGx5
IG9yIGluZGlyZWN0bHkgZnJvbSBKU0Rlc3RydWN0aWJsZU9iamVjdC4KKyAgICB2b2lkKiBhbGxv
Y2F0ZVdpdGhvdXREZXN0cnVjdG9yKHNpemVfdCk7IC8vIEZvciB1c2Ugd2l0aCBvYmplY3RzIHdp
dGhvdXQgZGVzdHJ1Y3RvcnMuCiAKLSAgICBzdHJ1Y3QgTWFya2VkQmxvY2tTbmFwc2hvdEZ1bmN0
b3IgOiBwdWJsaWMgTWFya2VkQmxvY2s6OlZvaWRGdW5jdG9yIHsKLSAgICAgICAgTWFya2VkQmxv
Y2tTbmFwc2hvdEZ1bmN0b3IoVmVjdG9yPE1hcmtlZEJsb2NrKj4mIGJsb2NrcykgCi0gICAgICAg
ICAgICA6IG1faW5kZXgoMCkgCi0gICAgICAgICAgICAsIG1fYmxvY2tzKGJsb2NrcykKLSAgICAg
ICAgewotICAgICAgICB9Ci0gICAgCi0gICAgICAgIHZvaWQgb3BlcmF0b3IoKShNYXJrZWRCbG9j
ayogYmxvY2spIHsgbV9ibG9ja3NbbV9pbmRleCsrXSA9IGJsb2NrOyB9CisgICAgc3RhdGljIGNv
bnN0IHNpemVfdCBtaW5FeHRyYUNvc3QgPSAyNTY7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBt
YXhFeHRyYUNvc3QgPSAxMDI0ICogMTAyNDsKICAgICAKLSAgICAgICAgc2l6ZV90IG1faW5kZXg7
Ci0gICAgICAgIFZlY3RvcjxNYXJrZWRCbG9jayo+JiBtX2Jsb2NrczsKKyAgICBjbGFzcyBGaW5h
bGl6ZXJPd25lciA6IHB1YmxpYyBXZWFrSGFuZGxlT3duZXIgeworICAgICAgICB2aXJ0dWFsIHZv
aWQgZmluYWxpemUoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0KSBvdmVycmlkZTsKICAg
ICB9OwogCi0gICAgaW5saW5lIGJvb2wgSGVhcDo6c2hvdWxkQ29sbGVjdCgpCi0gICAgewotICAg
ICAgICBpZiAoaXNEZWZlcnJlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBpZiAoT3B0aW9uczo6Z2NNYXhIZWFwU2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIG1fYnl0
ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPiBPcHRpb25zOjpnY01heEhlYXBTaXplKCkgJiYgbV9pc1Nh
ZmVUb0NvbGxlY3QgJiYgbV9vcGVyYXRpb25JblByb2dyZXNzID09IE5vT3BlcmF0aW9uOwotICAg
ICAgICByZXR1cm4gbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSA+IG1fbWF4RWRlblNpemUgJiYg
bV9pc1NhZmVUb0NvbGxlY3QgJiYgbV9vcGVyYXRpb25JblByb2dyZXNzID09IE5vT3BlcmF0aW9u
OwotICAgIH0KLQotICAgIGJvb2wgSGVhcDo6aXNCdXN5KCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgIT0gTm9PcGVyYXRpb247Ci0gICAgfQotCi0gICAgYm9v
bCBIZWFwOjppc0NvbGxlY3RpbmcoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3BlcmF0aW9u
SW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVjdGlvbiB8fCBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0g
RWRlbkNvbGxlY3Rpb247Ci0gICAgfQotCi0gICAgaW5saW5lIEhlYXAqIEhlYXA6OmhlYXAoY29u
c3QgSlNDZWxsKiBjZWxsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE1hcmtlZEJsb2NrOjpibG9j
a0ZvcihjZWxsKS0+aGVhcCgpOwotICAgIH0KLQotICAgIGlubGluZSBIZWFwKiBIZWFwOjpoZWFw
KGNvbnN0IEpTVmFsdWUgdikKLSAgICB7Ci0gICAgICAgIGlmICghdi5pc0NlbGwoKSkKLSAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gaGVhcCh2LmFzQ2VsbCgpKTsKLSAgICB9
Ci0KLSAgICBpbmxpbmUgYm9vbCBIZWFwOjppc0xpdmUoY29uc3Qgdm9pZCogY2VsbCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmlzTGl2ZUNlbGwo
Y2VsbCk7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSGVhcDo6aXNNYXJrZWQoY29uc3Qgdm9p
ZCogY2VsbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2Vs
bCktPmlzTWFya2VkKGNlbGwpOwotICAgIH0KLQotICAgIGlubGluZSBib29sIEhlYXA6OnRlc3RB
bmRTZXRNYXJrZWQoY29uc3Qgdm9pZCogY2VsbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBNYXJr
ZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPnRlc3RBbmRTZXRNYXJrZWQoY2VsbCk7Ci0gICAgfQot
Ci0gICAgaW5saW5lIHZvaWQgSGVhcDo6c2V0TWFya2VkKGNvbnN0IHZvaWQqIGNlbGwpCi0gICAg
ewotICAgICAgICBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPnNldE1hcmtlZChjZWxsKTsK
LSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKQot
ICAgIHsKLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpIHx8IEVOQUJMRShHR0Mp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2Vu
ZGlmCi0gICAgfQorICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNWYWxpZEFsbG9jYXRpb24o
c2l6ZV90KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5Q29z
dFNsb3dDYXNlKHNpemVfdCk7CiAKLSAgICBpbmxpbmUgdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXIo
Y29uc3QgSlNDZWxsKiBmcm9tLCBKU1ZhbHVlIHRvKQotICAgIHsKLSNpZiBFTkFCTEUoV1JJVEVf
QkFSUklFUl9QUk9GSUxJTkcpCi0gICAgICAgIFdyaXRlQmFycmllckNvdW50ZXJzOjpjb3VudFdy
aXRlQmFycmllcigpOwotI2VuZGlmCi0gICAgICAgIGlmICghdG8uaXNDZWxsKCkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIHdyaXRlQmFycmllcihmcm9tLCB0by5hc0NlbGwoKSk7Ci0g
ICAgfQotCi0gICAgaW5saW5lIHZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVf
dCBjb3N0KQotICAgIHsKLSAgICAgICAgaWYgKGNvc3QgPiBtaW5FeHRyYUNvc3QpIAotICAgICAg
ICAgICAgcmVwb3J0RXh0cmFNZW1vcnlDb3N0U2xvd0Nhc2UoY29zdCk7Ci0gICAgfQotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVy
blR5cGUgSGVhcDo6Zm9yRWFjaFByb3RlY3RlZENlbGwoRnVuY3RvciYgZnVuY3RvcikKLSAgICB7
Ci0gICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fcHJvdGVjdGVkVmFsdWVzKQotICAgICAgICAg
ICAgZnVuY3RvcihwYWlyLmtleSk7Ci0gICAgICAgIG1faGFuZGxlU2V0LmZvckVhY2hTdHJvbmdI
YW5kbGUoZnVuY3RvciwgbV9wcm90ZWN0ZWRWYWx1ZXMpOwotCi0gICAgICAgIHJldHVybiBmdW5j
dG9yLnJldHVyblZhbHVlKCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4gaW5saW5lIHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgSGVhcDo6Zm9yRWFjaFByb3Rl
Y3RlZENlbGwoKQotICAgIHsKLSAgICAgICAgRnVuY3RvciBmdW5jdG9yOwotICAgICAgICByZXR1
cm4gZm9yRWFjaFByb3RlY3RlZENlbGwoZnVuY3Rvcik7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgSGVhcDo6Zm9yRWFjaENvZGVCbG9jayhGdW5j
dG9yJiBmdW5jdG9yKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY29kZUJsb2Nrcy5pdGVyYXRl
PEZ1bmN0b3I+KGZ1bmN0b3IpOwotICAgIH0KLQotICAgIGlubGluZSB2b2lkKiBIZWFwOjphbGxv
Y2F0ZVdpdGhOb3JtYWxEZXN0cnVjdG9yKHNpemVfdCBieXRlcykKLSAgICB7Ci0jaWYgRU5BQkxF
KEFMTE9DQVRJT05fTE9HR0lORykKLSAgICAgICAgZGF0YUxvZ0YoIkpTQyBHQyBhbGxvY2F0aW5n
ICVsdSBieXRlcyB3aXRoIG5vcm1hbCBkZXN0cnVjdG9yLlxuIiwgYnl0ZXMpOwotI2VuZGlmCi0g
ICAgICAgIEFTU0VSVChpc1ZhbGlkQWxsb2NhdGlvbihieXRlcykpOwotICAgICAgICByZXR1cm4g
bV9vYmplY3RTcGFjZS5hbGxvY2F0ZVdpdGhOb3JtYWxEZXN0cnVjdG9yKGJ5dGVzKTsKLSAgICB9
Ci0gICAgCi0gICAgaW5saW5lIHZvaWQqIEhlYXA6OmFsbG9jYXRlV2l0aEltbW9ydGFsU3RydWN0
dXJlRGVzdHJ1Y3RvcihzaXplX3QgYnl0ZXMpCi0gICAgewotI2lmIEVOQUJMRShBTExPQ0FUSU9O
X0xPR0dJTkcpCi0gICAgICAgIGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGluZyAlbHUgYnl0ZXMg
d2l0aCBpbW1vcnRhbCBzdHJ1Y3R1cmUgZGVzdHJ1Y3Rvci5cbiIsIGJ5dGVzKTsKLSNlbmRpZgot
ICAgICAgICBBU1NFUlQoaXNWYWxpZEFsbG9jYXRpb24oYnl0ZXMpKTsKLSAgICAgICAgcmV0dXJu
IG1fb2JqZWN0U3BhY2UuYWxsb2NhdGVXaXRoSW1tb3J0YWxTdHJ1Y3R1cmVEZXN0cnVjdG9yKGJ5
dGVzKTsKLSAgICB9Ci0gICAgCi0gICAgaW5saW5lIHZvaWQqIEhlYXA6OmFsbG9jYXRlV2l0aG91
dERlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKQotICAgIHsKLSNpZiBFTkFCTEUoQUxMT0NBVElPTl9M
T0dHSU5HKQotICAgICAgICBkYXRhTG9nRigiSlNDIEdDIGFsbG9jYXRpbmcgJWx1IGJ5dGVzIHdp
dGhvdXQgZGVzdHJ1Y3Rvci5cbiIsIGJ5dGVzKTsKLSNlbmRpZgotICAgICAgICBBU1NFUlQoaXNW
YWxpZEFsbG9jYXRpb24oYnl0ZXMpKTsKLSAgICAgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuYWxs
b2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihieXRlcyk7Ci0gICAgfQotICAgCi0gICAgaW5saW5lIENo
ZWNrZWRCb29sZWFuIEhlYXA6OnRyeUFsbG9jYXRlU3RvcmFnZShKU0NlbGwqIGludGVuZGVkT3du
ZXIsIHNpemVfdCBieXRlcywgdm9pZCoqIG91dFB0cikKLSAgICB7Ci0gICAgICAgIENoZWNrZWRC
b29sZWFuIHJlc3VsdCA9IG1fc3RvcmFnZVNwYWNlLnRyeUFsbG9jYXRlKGJ5dGVzLCBvdXRQdHIp
OwotI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCi0gICAgICAgIGRhdGFMb2dGKCJKU0Mg
R0MgYWxsb2NhdGluZyAlbHUgYnl0ZXMgb2Ygc3RvcmFnZSBmb3IgJXA6ICVwLlxuIiwgYnl0ZXMs
IGludGVuZGVkT3duZXIsICpvdXRQdHIpOwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGlu
dGVuZGVkT3duZXIpOwotI2VuZGlmCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAg
IAotICAgIGlubGluZSBDaGVja2VkQm9vbGVhbiBIZWFwOjp0cnlSZWFsbG9jYXRlU3RvcmFnZShK
U0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqKiBwdHIsIHNpemVfdCBvbGRTaXplLCBzaXplX3Qg
bmV3U2l6ZSkKLSAgICB7Ci0jaWYgRU5BQkxFKEFMTE9DQVRJT05fTE9HR0lORykKLSAgICAgICAg
dm9pZCogb2xkUHRyID0gKnB0cjsKLSNlbmRpZgotICAgICAgICBDaGVja2VkQm9vbGVhbiByZXN1
bHQgPSBtX3N0b3JhZ2VTcGFjZS50cnlSZWFsbG9jYXRlKHB0ciwgb2xkU2l6ZSwgbmV3U2l6ZSk7
Ci0jaWYgRU5BQkxFKEFMTE9DQVRJT05fTE9HR0lORykKLSAgICAgICAgZGF0YUxvZ0YoIkpTQyBH
QyByZWFsbG9jYXRpbmcgJWx1IC0+ICVsdSBieXRlcyBvZiBzdG9yYWdlIGZvciAlcDogJXAgLT4g
JXAuXG4iLCBvbGRTaXplLCBuZXdTaXplLCBpbnRlbmRlZE93bmVyLCBvbGRQdHIsICpwdHIpOwot
I2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGludGVuZGVkT3duZXIpOwotI2VuZGlmCi0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgIHZvaWQgc3VzcGVuZENvbXBpbGVyVGhyZWFk
cygpOworICAgIHZvaWQgd2lsbFN0YXJ0Q29sbGVjdGlvbihIZWFwT3BlcmF0aW9uIGNvbGxlY3Rp
b25UeXBlKTsKKyAgICB2b2lkIGRlbGV0ZU9sZENvZGUoZG91YmxlIGdjU3RhcnRUaW1lKTsKKyAg
ICB2b2lkIGZsdXNoT2xkU3RydWN0dXJlSURUYWJsZXMoKTsKKyAgICB2b2lkIGZsdXNoV3JpdGVC
YXJyaWVyQnVmZmVyKCk7CisgICAgdm9pZCBzdG9wQWxsb2NhdGlvbigpOworCisgICAgdm9pZCBt
YXJrUm9vdHMoKTsKKyAgICB2b2lkIGdhdGhlclN0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMm
LCB2b2lkKiogZHVtbXkpOworICAgIHZvaWQgZ2F0aGVySlNTdGFja1Jvb3RzKENvbnNlcnZhdGl2
ZVJvb3RzJik7CisgICAgdm9pZCBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoQ29uc2VydmF0aXZl
Um9vdHMmKTsKKyAgICB2b2lkIGNsZWFyTGl2ZW5lc3NEYXRhKCk7CisgICAgdm9pZCB2aXNpdFNt
YWxsU3RyaW5ncygpOworICAgIHZvaWQgdmlzaXRDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRp
dmVSb290cyYpOworICAgIHZvaWQgdmlzaXRDb21waWxlcldvcmtsaXN0cygpOworICAgIHZvaWQg
dmlzaXRQcm90ZWN0ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRU
ZW1wU29ydFZlY3RvcnMoSGVhcFJvb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFyZ3VtZW50
QnVmZmVycyhIZWFwUm9vdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0RXhjZXB0aW9uKEhlYXBS
b290VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRTdHJvbmdIYW5kbGVzKEhlYXBSb290VmlzaXRv
ciYpOworICAgIHZvaWQgdmlzaXRIYW5kbGVTdGFjayhIZWFwUm9vdFZpc2l0b3ImKTsKKyAgICB2
b2lkIHRyYWNlQ29kZUJsb2Nrc0FuZEpJVFN0dWJSb3V0aW5lcygpOworICAgIHZvaWQgY29udmVy
Z2UoKTsKKyAgICB2b2lkIHZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7CisgICAg
dm9pZCBjbGVhclJlbWVtYmVyZWRTZXQoVmVjdG9yPGNvbnN0IEpTQ2VsbCo+Jik7CisgICAgdm9p
ZCB1cGRhdGVPYmplY3RDb3VudHMoKTsKKyAgICB2b2lkIHJlc2V0VmlzaXRvcnMoKTsKKworICAg
IHZvaWQgcmVhcFdlYWtIYW5kbGVzKCk7CisgICAgdm9pZCBzd2VlcEFycmF5QnVmZmVycygpOwor
ICAgIHZvaWQgc25hcHNob3RNYXJrZWRTcGFjZSgpOworICAgIHZvaWQgZGVsZXRlU291cmNlUHJv
dmlkZXJDYWNoZXMoKTsKKyAgICB2b2lkIG5vdGlmeUluY3JlbWVudGFsU3dlZXBlcigpOworICAg
IHZvaWQgcmVtZW1iZXJDdXJyZW50bHlFeGVjdXRpbmdDb2RlQmxvY2tzKCk7CisgICAgdm9pZCBy
ZXNldEFsbG9jYXRvcnMoKTsKKyAgICB2b2lkIGNvcHlCYWNraW5nU3RvcmVzKCk7CisgICAgdm9p
ZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKKyAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25h
bEZpbmFsaXplcnMoKTsKKyAgICB2b2lkIGRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKCk7Cisg
ICAgdm9pZCB1cGRhdGVBbGxvY2F0aW9uTGltaXRzKCk7CisgICAgdm9pZCBkaWRGaW5pc2hDb2xs
ZWN0aW9uKGRvdWJsZSBnY1N0YXJ0VGltZSk7CisgICAgdm9pZCByZXN1bWVDb21waWxlclRocmVh
ZHMoKTsKKyAgICB2b2lkIHpvbWJpZnlEZWFkT2JqZWN0cygpOworICAgIHZvaWQgbWFya0RlYWRP
YmplY3RzKCk7CiAKLSAgICBpbmxpbmUgdm9pZCBIZWFwOjphc2NyaWJlT3duZXIoSlNDZWxsKiBp
bnRlbmRlZE93bmVyLCB2b2lkKiBzdG9yYWdlKQotICAgIHsKLSNpZiBFTkFCTEUoQUxMT0NBVElP
Tl9MT0dHSU5HKQotICAgICAgICBkYXRhTG9nRigiSlNDIEdDIGFzY3JpYmluZyAlcCBhcyBvd25l
ciBvZiBzdG9yYWdlICVwLlxuIiwgaW50ZW5kZWRPd25lciwgc3RvcmFnZSk7Ci0jZWxzZQotICAg
ICAgICBVTlVTRURfUEFSQU0oaW50ZW5kZWRPd25lcik7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShz
dG9yYWdlKTsKLSNlbmRpZgotICAgIH0KKyAgICBib29sIHNob3VsZERvRnVsbENvbGxlY3Rpb24o
SGVhcE9wZXJhdGlvbiByZXF1ZXN0ZWRDb2xsZWN0aW9uVHlwZSkgY29uc3Q7CisgICAgc2l6ZV90
IHNpemVBZnRlckNvbGxlY3QoKTsKIAotICAgIGlubGluZSBCbG9ja0FsbG9jYXRvciYgSGVhcDo6
YmxvY2tBbGxvY2F0b3IoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYmxvY2tBbGxvY2F0b3I7
Ci0gICAgfQorICAgIEpTU3RhY2smIHN0YWNrKCk7CisgICAgCisgICAgdm9pZCBpbmNyZW1lbnRE
ZWZlcnJhbERlcHRoKCk7CisgICAgdm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7CisgICAg
dm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCgpOworCisgICAgY29uc3Qg
SGVhcFR5cGUgbV9oZWFwVHlwZTsKKyAgICBjb25zdCBzaXplX3QgbV9yYW1TaXplOworICAgIGNv
bnN0IHNpemVfdCBtX21pbkJ5dGVzUGVyQ3ljbGU7CisgICAgc2l6ZV90IG1fc2l6ZUFmdGVyTGFz
dENvbGxlY3Q7CisgICAgc2l6ZV90IG1fc2l6ZUFmdGVyTGFzdEZ1bGxDb2xsZWN0OworICAgIHNp
emVfdCBtX3NpemVCZWZvcmVMYXN0RnVsbENvbGxlY3Q7CisgICAgc2l6ZV90IG1fc2l6ZUFmdGVy
TGFzdEVkZW5Db2xsZWN0OworICAgIHNpemVfdCBtX3NpemVCZWZvcmVMYXN0RWRlbkNvbGxlY3Q7
CisKKyAgICBzaXplX3QgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZTsKKyAgICBzaXplX3QgbV9i
eXRlc0FiYW5kb25lZFNpbmNlTGFzdEZ1bGxDb2xsZWN0OworICAgIHNpemVfdCBtX21heEVkZW5T
aXplOworICAgIHNpemVfdCBtX21heEhlYXBTaXplOworICAgIGJvb2wgbV9zaG91bGREb0Z1bGxD
b2xsZWN0aW9uOworICAgIHNpemVfdCBtX3RvdGFsQnl0ZXNWaXNpdGVkOworICAgIHNpemVfdCBt
X3RvdGFsQnl0ZXNDb3BpZWQ7CisgICAgCisgICAgSGVhcE9wZXJhdGlvbiBtX29wZXJhdGlvbklu
UHJvZ3Jlc3M7CisgICAgQmxvY2tBbGxvY2F0b3IgbV9ibG9ja0FsbG9jYXRvcjsKKyAgICBTdHJ1
Y3R1cmVJRFRhYmxlIG1fc3RydWN0dXJlSURUYWJsZTsKKyAgICBNYXJrZWRTcGFjZSBtX29iamVj
dFNwYWNlOworICAgIENvcGllZFNwYWNlIG1fc3RvcmFnZVNwYWNlOworICAgIEdDSW5jb21pbmdS
ZWZDb3VudGVkU2V0PEFycmF5QnVmZmVyPiBtX2FycmF5QnVmZmVyczsKKyAgICBzaXplX3QgbV9l
eHRyYU1lbW9yeVVzYWdlOworCisgICAgSGFzaFNldDxjb25zdCBKU0NlbGwqPiBtX2NvcHlpbmdS
ZW1lbWJlcmVkU2V0OworCisgICAgUHJvdGVjdENvdW50U2V0IG1fcHJvdGVjdGVkVmFsdWVzOwor
ICAgIFZlY3RvcjxWZWN0b3I8VmFsdWVTdHJpbmdQYWlyLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxv
dz4qPiBtX3RlbXBTb3J0aW5nVmVjdG9yczsKKyAgICBPd25QdHI8SGFzaFNldDxNYXJrZWRBcmd1
bWVudEJ1ZmZlcio+PiBtX21hcmtMaXN0U2V0OwogCi0jaWYgVVNFKENGKQotICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPgotICAgIGlubGluZSB2b2lkIEhlYXA6OnJlbGVhc2VTb29uKFJldGFpblB0
cjxUPiYmIG9iamVjdCkKLSAgICB7Ci0gICAgICAgIG1fb2JqZWN0U3BhY2UucmVsZWFzZVNvb24o
c3RkOjptb3ZlKG9iamVjdCkpOwotICAgIH0KLSNlbmRpZgorICAgIE1hY2hpbmVUaHJlYWRzIG1f
bWFjaGluZVRocmVhZHM7CisgICAgCisgICAgR0NUaHJlYWRTaGFyZWREYXRhIG1fc2hhcmVkRGF0
YTsKKyAgICBTbG90VmlzaXRvciBtX3Nsb3RWaXNpdG9yOworICAgIENvcHlWaXNpdG9yIG1fY29w
eVZpc2l0b3I7CisKKyAgICBIYW5kbGVTZXQgbV9oYW5kbGVTZXQ7CisgICAgSGFuZGxlU3RhY2sg
bV9oYW5kbGVTdGFjazsKKyAgICBDb2RlQmxvY2tTZXQgbV9jb2RlQmxvY2tzOworICAgIEpJVFN0
dWJSb3V0aW5lU2V0IG1faml0U3R1YlJvdXRpbmVzOworICAgIEZpbmFsaXplck93bmVyIG1fZmlu
YWxpemVyT3duZXI7CisgICAgCisgICAgYm9vbCBtX2lzU2FmZVRvQ29sbGVjdDsKKworICAgIFdy
aXRlQmFycmllckJ1ZmZlciBtX3dyaXRlQmFycmllckJ1ZmZlcjsKIAorICAgIFZNKiBtX3ZtOwor
ICAgIGRvdWJsZSBtX2xhc3RGdWxsR0NMZW5ndGg7CisgICAgZG91YmxlIG1fbGFzdEVkZW5HQ0xl
bmd0aDsKKyAgICBkb3VibGUgbV9sYXN0Q29kZURpc2NhcmRUaW1lOwogCi1pbmxpbmUgdm9pZCBI
ZWFwOjppbmNyZW1lbnREZWZlcnJhbERlcHRoKCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChtX2Rl
ZmVycmFsRGVwdGggPCAxMDApOyAvLyBTYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIHRoaXMgZG9l
c24ndCBnZXQgcmlkaWN1bG91cy4KLSAgICBtX2RlZmVycmFsRGVwdGgrKzsKLX0KLQotaW5saW5l
IHZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpCi17Ci0gICAgUkVMRUFTRV9BU1NF
UlQobV9kZWZlcnJhbERlcHRoID49IDEpOwotICAgIG1fZGVmZXJyYWxEZXB0aC0tOwotfQotCi1p
bmxpbmUgYm9vbCBIZWFwOjpjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCkKLXsKLSAgICBpZiAo
aXNEZWZlcnJlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXNob3VsZENv
bGxlY3QoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29sbGVjdCgpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi1pbmxpbmUgdm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRo
QW5kR0NJZk5lZWRlZCgpCi17Ci0gICAgZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOwotICAgIGNv
bGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKLX0KKyAgICBEb3VibHlMaW5rZWRMaXN0PEV4ZWN1
dGFibGVCYXNlPiBtX2NvbXBpbGVkQ29kZTsKKyAgICAKKyAgICBSZWZQdHI8R0NBY3Rpdml0eUNh
bGxiYWNrPiBtX2Z1bGxBY3Rpdml0eUNhbGxiYWNrOworICAgIFJlZlB0cjxHQ0FjdGl2aXR5Q2Fs
bGJhY2s+IG1fZWRlbkFjdGl2aXR5Q2FsbGJhY2s7CisgICAgT3duUHRyPEluY3JlbWVudGFsU3dl
ZXBlcj4gbV9zd2VlcGVyOworICAgIFZlY3RvcjxNYXJrZWRCbG9jayo+IG1fYmxvY2tTbmFwc2hv
dDsKKyAgICAKKyAgICB1bnNpZ25lZCBtX2RlZmVycmFsRGVwdGg7Cit9OwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
SGVhcElubGluZXNfaAorI2RlZmluZSBIZWFwSW5saW5lc19oCisKKyNpbmNsdWRlICJIZWFwLmgi
CisjaW5jbHVkZSAiSlNDZWxsLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgYm9vbCBI
ZWFwOjpzaG91bGRDb2xsZWN0KCkKK3sKKyAgICBpZiAoaXNEZWZlcnJlZCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKE9wdGlvbnM6OmdjTWF4SGVhcFNpemUoKSkKKyAgICAgICAg
cmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPiBPcHRpb25zOjpnY01heEhlYXBTaXpl
KCkgJiYgbV9pc1NhZmVUb0NvbGxlY3QgJiYgbV9vcGVyYXRpb25JblByb2dyZXNzID09IE5vT3Bl
cmF0aW9uOworICAgIHJldHVybiBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlID4gbV9tYXhFZGVu
U2l6ZSAmJiBtX2lzU2FmZVRvQ29sbGVjdCAmJiBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9P
cGVyYXRpb247Cit9CisKK2lubGluZSBib29sIEhlYXA6OmlzQnVzeSgpCit7CisgICAgcmV0dXJu
IG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyAhPSBOb09wZXJhdGlvbjsKK30KKworaW5saW5lIGJvb2wg
SGVhcDo6aXNDb2xsZWN0aW5nKCkKK3sKKyAgICByZXR1cm4gbV9vcGVyYXRpb25JblByb2dyZXNz
ID09IEZ1bGxDb2xsZWN0aW9uIHx8IG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBFZGVuQ29sbGVj
dGlvbjsKK30KKworaW5saW5lIEhlYXAqIEhlYXA6OmhlYXAoY29uc3QgSlNDZWxsKiBjZWxsKQor
eworICAgIHJldHVybiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmhlYXAoKTsKK30KKwor
aW5saW5lIEhlYXAqIEhlYXA6OmhlYXAoY29uc3QgSlNWYWx1ZSB2KQoreworICAgIGlmICghdi5p
c0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGhlYXAodi5hc0NlbGwoKSk7
Cit9CisKK2lubGluZSBib29sIEhlYXA6OmlzTGl2ZShjb25zdCB2b2lkKiBjZWxsKQoreworICAg
IHJldHVybiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmlzTGl2ZUNlbGwoY2VsbCk7Cit9
CisKK2lubGluZSBib29sIEhlYXA6OmlzSW5SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2VsbCogY2Vs
bCkgY29uc3QKK3sKKyAgICBBU1NFUlQoY2VsbCk7CisgICAgQVNTRVJUKCFPcHRpb25zOjplbmFi
bGVDb25jdXJyZW50SklUKCkgfHwgIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CisgICAgcmV0dXJu
IE1hcmtlZEJsb2NrOjpibG9ja0ZvcihjZWxsKS0+aXNSZW1lbWJlcmVkKGNlbGwpOworfQorCitp
bmxpbmUgYm9vbCBIZWFwOjppc01hcmtlZChjb25zdCB2b2lkKiBjZWxsKQoreworICAgIHJldHVy
biBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmlzTWFya2VkKGNlbGwpOworfQorCitpbmxp
bmUgYm9vbCBIZWFwOjp0ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqIGNlbGwpCit7CisgICAg
cmV0dXJuIE1hcmtlZEJsb2NrOjpibG9ja0ZvcihjZWxsKS0+dGVzdEFuZFNldE1hcmtlZChjZWxs
KTsKK30KKworaW5saW5lIHZvaWQgSGVhcDo6c2V0TWFya2VkKGNvbnN0IHZvaWQqIGNlbGwpCit7
CisgICAgTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNlbGwpLT5zZXRNYXJrZWQoY2VsbCk7Cit9CisK
K2lubGluZSBib29sIEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpCit7CisjaWYgRU5BQkxF
KFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKSB8fCBFTkFCTEUoR0dDKQorICAgIHJldHVybiB0cnVl
OworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworaW5saW5lIHZvaWQgSGVh
cDo6d3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCogZnJvbSwgSlNWYWx1ZSB0bykKK3sKKyNpZiBF
TkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCisgICAgV3JpdGVCYXJyaWVyQ291bnRlcnM6
OmNvdW50V3JpdGVCYXJyaWVyKCk7CisjZW5kaWYKKyAgICBpZiAoIXRvLmlzQ2VsbCgpKQorICAg
ICAgICByZXR1cm47CisgICAgd3JpdGVCYXJyaWVyKGZyb20sIHRvLmFzQ2VsbCgpKTsKK30KKwor
aW5saW5lIHZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVfdCBjb3N0KQorewor
ICAgIGlmIChjb3N0ID4gbWluRXh0cmFDb3N0KSAKKyAgICAgICAgcmVwb3J0RXh0cmFNZW1vcnlD
b3N0U2xvd0Nhc2UoY29zdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGlu
ZSB0eXBlbmFtZSBGdW5jdG9yOjpSZXR1cm5UeXBlIEhlYXA6OmZvckVhY2hQcm90ZWN0ZWRDZWxs
KEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm90ZWN0ZWRW
YWx1ZXMpCisgICAgICAgIGZ1bmN0b3IocGFpci5rZXkpOworICAgIG1faGFuZGxlU2V0LmZvckVh
Y2hTdHJvbmdIYW5kbGUoZnVuY3RvciwgbV9wcm90ZWN0ZWRWYWx1ZXMpOworCisgICAgcmV0dXJu
IGZ1bmN0b3IucmV0dXJuVmFsdWUoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4g
aW5saW5lIHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgSGVhcDo6Zm9yRWFjaFByb3RlY3Rl
ZENlbGwoKQoreworICAgIEZ1bmN0b3IgZnVuY3RvcjsKKyAgICByZXR1cm4gZm9yRWFjaFByb3Rl
Y3RlZENlbGwoZnVuY3Rvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGlu
ZSB2b2lkIEhlYXA6OmZvckVhY2hDb2RlQmxvY2soRnVuY3RvciYgZnVuY3RvcikKK3sKKyAgICBy
ZXR1cm4gbV9jb2RlQmxvY2tzLml0ZXJhdGU8RnVuY3Rvcj4oZnVuY3Rvcik7Cit9CisKK2lubGlu
ZSB2b2lkKiBIZWFwOjphbGxvY2F0ZVdpdGhOb3JtYWxEZXN0cnVjdG9yKHNpemVfdCBieXRlcykK
K3sKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgIGRhdGFMb2dGKCJKU0MgR0Mg
YWxsb2NhdGluZyAlbHUgYnl0ZXMgd2l0aCBub3JtYWwgZGVzdHJ1Y3Rvci5cbiIsIGJ5dGVzKTsK
KyNlbmRpZgorICAgIEFTU0VSVChpc1ZhbGlkQWxsb2NhdGlvbihieXRlcykpOworICAgIHJldHVy
biBtX29iamVjdFNwYWNlLmFsbG9jYXRlV2l0aE5vcm1hbERlc3RydWN0b3IoYnl0ZXMpOworfQor
CitpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVXaXRoSW1tb3J0YWxTdHJ1Y3R1cmVEZXN0cnVj
dG9yKHNpemVfdCBieXRlcykKK3sKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAg
IGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGluZyAlbHUgYnl0ZXMgd2l0aCBpbW1vcnRhbCBzdHJ1
Y3R1cmUgZGVzdHJ1Y3Rvci5cbiIsIGJ5dGVzKTsKKyNlbmRpZgorICAgIEFTU0VSVChpc1ZhbGlk
QWxsb2NhdGlvbihieXRlcykpOworICAgIHJldHVybiBtX29iamVjdFNwYWNlLmFsbG9jYXRlV2l0
aEltbW9ydGFsU3RydWN0dXJlRGVzdHJ1Y3RvcihieXRlcyk7Cit9CisKK2lubGluZSB2b2lkKiBI
ZWFwOjphbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKHNpemVfdCBieXRlcykKK3sKKyNpZiBFTkFC
TEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgIGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGluZyAl
bHUgYnl0ZXMgd2l0aG91dCBkZXN0cnVjdG9yLlxuIiwgYnl0ZXMpOworI2VuZGlmCisgICAgQVNT
RVJUKGlzVmFsaWRBbGxvY2F0aW9uKGJ5dGVzKSk7CisgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uu
YWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihieXRlcyk7Cit9CisKK2lubGluZSBDaGVja2VkQm9v
bGVhbiBIZWFwOjp0cnlBbGxvY2F0ZVN0b3JhZ2UoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXpl
X3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpCit7CisgICAgQ2hlY2tlZEJvb2xlYW4gcmVzdWx0ID0g
bV9zdG9yYWdlU3BhY2UudHJ5QWxsb2NhdGUoYnl0ZXMsIG91dFB0cik7CisjaWYgRU5BQkxFKEFM
TE9DQVRJT05fTE9HR0lORykKKyAgICBkYXRhTG9nRigiSlNDIEdDIGFsbG9jYXRpbmcgJWx1IGJ5
dGVzIG9mIHN0b3JhZ2UgZm9yICVwOiAlcC5cbiIsIGJ5dGVzLCBpbnRlbmRlZE93bmVyLCAqb3V0
UHRyKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGludGVuZGVkT3duZXIpOworI2VuZGlmCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIENoZWNrZWRCb29sZWFuIEhlYXA6OnRyeVJl
YWxsb2NhdGVTdG9yYWdlKEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdm9pZCoqIHB0ciwgc2l6ZV90
IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQoreworI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJ
TkcpCisgICAgdm9pZCogb2xkUHRyID0gKnB0cjsKKyNlbmRpZgorICAgIENoZWNrZWRCb29sZWFu
IHJlc3VsdCA9IG1fc3RvcmFnZVNwYWNlLnRyeVJlYWxsb2NhdGUocHRyLCBvbGRTaXplLCBuZXdT
aXplKTsKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgIGRhdGFMb2dGKCJKU0Mg
R0MgcmVhbGxvY2F0aW5nICVsdSAtPiAlbHUgYnl0ZXMgb2Ygc3RvcmFnZSBmb3IgJXA6ICVwIC0+
ICVwLlxuIiwgb2xkU2l6ZSwgbmV3U2l6ZSwgaW50ZW5kZWRPd25lciwgb2xkUHRyLCAqcHRyKTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGludGVuZGVkT3duZXIpOworI2VuZGlmCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQgSGVhcDo6YXNjcmliZU93bmVyKEpTQ2VsbCog
aW50ZW5kZWRPd25lciwgdm9pZCogc3RvcmFnZSkKK3sKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9M
T0dHSU5HKQorICAgIGRhdGFMb2dGKCJKU0MgR0MgYXNjcmliaW5nICVwIGFzIG93bmVyIG9mIHN0
b3JhZ2UgJXAuXG4iLCBpbnRlbmRlZE93bmVyLCBzdG9yYWdlKTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKGludGVuZGVkT3duZXIpOworICAgIFVOVVNFRF9QQVJBTShzdG9yYWdlKTsKKyNlbmRp
ZgorfQorCitpbmxpbmUgQmxvY2tBbGxvY2F0b3ImIEhlYXA6OmJsb2NrQWxsb2NhdG9yKCkKK3sK
KyAgICByZXR1cm4gbV9ibG9ja0FsbG9jYXRvcjsKK30KKworI2lmIFVTRShDRikKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgoraW5saW5lIHZvaWQgSGVhcDo6cmVsZWFzZVNvb24oUmV0YWluUHRyPFQ+
JiYgb2JqZWN0KQoreworICAgIG1fb2JqZWN0U3BhY2UucmVsZWFzZVNvb24oc3RkOjptb3ZlKG9i
amVjdCkpOworfQorI2VuZGlmCisKK2lubGluZSB2b2lkIEhlYXA6OmluY3JlbWVudERlZmVycmFs
RGVwdGgoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZGVmZXJyYWxEZXB0aCA8IDEwMCk7IC8v
IFNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGdldCByaWRpY3Vsb3VzLgor
ICAgIG1fZGVmZXJyYWxEZXB0aCsrOworfQorCitpbmxpbmUgdm9pZCBIZWFwOjpkZWNyZW1lbnRE
ZWZlcnJhbERlcHRoKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2RlZmVycmFsRGVwdGggPj0g
MSk7CisgICAgbV9kZWZlcnJhbERlcHRoLS07Cit9CisKK2lubGluZSBib29sIEhlYXA6OmNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoKQoreworICAgIGlmIChpc0RlZmVycmVkKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmICghc2hvdWxkQ29sbGVjdCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBjb2xsZWN0KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGlu
ZSB2b2lkIEhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkKCkKK3sKKyAg
ICBkZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7CisgICAgY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZl
cigpOworfQorCitpbmxpbmUgSGFzaFNldDxNYXJrZWRBcmd1bWVudEJ1ZmZlcio+JiBIZWFwOjpt
YXJrTGlzdFNldCgpCit7CisgICAgaWYgKCFtX21hcmtMaXN0U2V0KQorICAgICAgICBtX21hcmtM
aXN0U2V0ID0gYWRvcHRQdHIobmV3IEhhc2hTZXQ8TWFya2VkQXJndW1lbnRCdWZmZXIqPik7IAor
ICAgIHJldHVybiAqbV9tYXJrTGlzdFNldDsKK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gSGVhcElubGluZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ0lubGluZXMuaAkocmV2aXNpb24gMTY2Mjc0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3
IEBACiAjaW5jbHVkZSAiQ2FsbEZyYW1lSW5saW5lcy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkhl
bHBlcnMuaCIKICNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCIKKyNpbmNs
dWRlICJIZWFwSW5saW5lcy5oIgogI2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlld0lubGluZXMu
aCIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227820</attachid>
            <date>2014-03-25 18:25:14 -0700</date>
            <delta_ts>2014-03-25 18:33:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-130759-20140325182453.patch</filename>
            <type>text/plain</type>
            <size>50355</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY2Mjc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBA
CisyMDE0LTAzLTI1ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQWRkIEhlYXBJbmxpbmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzA3NTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNj
cmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzOgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
aGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2tTbmFwc2hvdEZ1bmN0b3I6
Ok1hcmtlZEJsb2NrU25hcHNob3RGdW5jdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2tT
bmFwc2hvdEZ1bmN0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOiBBbHNv
IHJlaW5kZW50ZWQgd2hpbGUgd2UncmUgaGVyZS4KKyAgICAgICAgKEpTQzo6SGVhcDo6d3JpdGVC
YXJyaWVyQnVmZmVyKToKKyAgICAgICAgKEpTQzo6SGVhcDo6dm0pOgorICAgICAgICAoSlNDOjpI
ZWFwOjpvYmplY3RTcGFjZSk6CisgICAgICAgIChKU0M6OkhlYXA6Om1hY2hpbmVUaHJlYWRzKToK
KyAgICAgICAgKEpTQzo6SGVhcDo6b3BlcmF0aW9uSW5Qcm9ncmVzcyk6CisgICAgICAgIChKU0M6
OkhlYXA6OmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6YWxsb2NhdG9yRm9yT2JqZWN0V2l0aE5vcm1hbERlc3RydWN0b3IpOgorICAgICAg
ICAoSlNDOjpIZWFwOjphbGxvY2F0b3JGb3JPYmplY3RXaXRoSW1tb3J0YWxTdHJ1Y3R1cmVEZXN0
cnVjdG9yKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c3RvcmFnZUFsbG9jYXRvcik6CisgICAgICAg
IChKU0M6OkhlYXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6
OmlzU2FmZVRvQ29sbGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OmhhbmRsZVNldCk6CisgICAg
ICAgIChKU0M6OkhlYXA6OmhhbmRsZVN0YWNrKToKKyAgICAgICAgKEpTQzo6SGVhcDo6bGFzdEZ1
bGxHQ0xlbmd0aCk6CisgICAgICAgIChKU0M6OkhlYXA6Omxhc3RFZGVuR0NMZW5ndGgpOgorICAg
ICAgICAoSlNDOjpIZWFwOjppbmNyZWFzZUxhc3RGdWxsR0NMZW5ndGgpOgorICAgICAgICAoSlND
OjpIZWFwOjpzaXplQmVmb3JlTGFzdEVkZW5Db2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6c2l6ZUFmdGVyTGFzdEVkZW5Db2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c2l6
ZUJlZm9yZUxhc3RGdWxsQ29sbGVjdGlvbik6CisgICAgICAgIChKU0M6OkhlYXA6OnNpemVBZnRl
ckxhc3RGdWxsQ29sbGVjdGlvbik6CisgICAgICAgIChKU0M6OkhlYXA6OmppdFN0dWJSb3V0aW5l
cyk6CisgICAgICAgIChKU0M6OkhlYXA6OmlzRGVmZXJyZWQpOgorICAgICAgICAoSlNDOjpIZWFw
OjpzdHJ1Y3R1cmVJRFRhYmxlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVtb3ZlQ29kZUJsb2Nr
KToKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpI
ZWFwOjpzaG91bGRDb2xsZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNCdXN5KToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6aXNDb2xsZWN0aW5nKToKKyAgICAgICAgKEpTQzo6SGVhcDo6aGVhcCk6
CisgICAgICAgIChKU0M6OkhlYXA6OmlzTGl2ZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmlzSW5S
ZW1lbWJlcmVkU2V0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNNYXJrZWQpOgorICAgICAgICAo
SlNDOjpIZWFwOjp0ZXN0QW5kU2V0TWFya2VkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c2V0TWFy
a2VkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6d3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVwb3J0
RXh0cmFNZW1vcnlDb3N0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9yRWFjaFByb3RlY3RlZENl
bGwpOgorICAgICAgICAoSlNDOjpIZWFwOjpmb3JFYWNoQ29kZUJsb2NrKToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6YWxsb2NhdGVXaXRoTm9ybWFsRGVzdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6Okhl
YXA6OmFsbG9jYXRlV2l0aEltbW9ydGFsU3RydWN0dXJlRGVzdHJ1Y3Rvcik6CisgICAgICAgIChK
U0M6OkhlYXA6OmFsbG9jYXRlV2l0aG91dERlc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpIZWFw
Ojp0cnlBbGxvY2F0ZVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpIZWFwOjp0cnlSZWFsbG9jYXRl
U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmFzY3JpYmVPd25lcik6CisgICAgICAgIChK
U0M6OkhlYXA6OmJsb2NrQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVsZWFzZVNv
b24pOgorICAgICAgICAoSlNDOjpIZWFwOjppbmNyZW1lbnREZWZlcnJhbERlcHRoKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aCk6CisgICAgICAgIChKU0M6Okhl
YXA6OmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIpOgorICAgICAgICAoSlNDOjpIZWFwOjpkZWNy
ZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCk6CisgICAgICAgIChKU0M6OkhlYXA6Om1h
cmtMaXN0U2V0KToKKyAgICAgICAgKiBydW50aW1lL0pTQ0lubGluZXMuaDoKKwogMjAxNC0wMy0y
NSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCAzMi1iaXQg
Z2V0dGVyIGNhbGwgYWxpZ25tZW50LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE2NjI3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC01OTQsNiArNTk0LDcgQEAg
amF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
R0NUaHJlYWQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAgXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcElubGluZXMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcEl0
ZXJhdGlvblNjb3BlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBPcGVyYXRp
b24uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFN0YXRpc3RpY3MuY3BwIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTY2
Mjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2
YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA2Myw2ICsxMDYzLDcgQEAK
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGFuZGxlVHlwZXMuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGVhcC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caGVhcFxIZWFwQmxvY2suaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGhlYXBcSGVhcElubGluZXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBc
SGVhcE9wZXJhdGlvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxIZWFw
Um9vdFZpc2l0b3IuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGVhcFN0
YXRpc3RpY3MuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE2NjI3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVy
cwkod29ya2luZyBjb3B5KQpAQCAtMTczOSw2ICsxNzM5LDkgQEAKICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGhlYXBcSGVhcEJsb2NrLmgiPgogICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+
CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBJ
bmxpbmVzLmgiPgorICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBPcGVyYXRpb24uaCI+CiAgICAg
ICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjYyNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMTQzNSw2ICsxNDM1LDcgQEAKIAkJQzJDOEQwMzExNEEzQ0VGQzAwNTc4RTY1IC8q
IEhlYXBCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzJDOEQwMkYxNEEzQ0VGQzAwNTc4RTY1IC8qIEhlYXBCbG9jay5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyQ0YzOUMxMTZFMTVBODEwMERE
NjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDMkNGMzlCRjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFw
cGVyT2JqZWN0Lm1tICovOyB9OwogCQlDMkNGMzlDMjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElX
cmFwcGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDMkNGMzlDMDE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0LmggKi87
IH07CisJCUMyREE3NzgzMThFMjU5OTkwMDY2RkNCNiAvKiBIZWFwSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJEQTc3ODIxOEUyNTk5OTAw
NjZGQ0I2IC8qIEhlYXBJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQzJERjQ0MkYxNzA3QUMwMTAwQTVDQTk2IC8qIFN1cGVyUmVnaW9u
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyREY0
NDJEMTcwN0FDMDEwMEE1Q0E5NiAvKiBTdXBlclJlZ2lvbi5jcHAgKi87IH07CiAJCUMyREY0NDMw
MTcwN0FDMDEwMEE1Q0E5NiAvKiBTdXBlclJlZ2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJERjQ0MkUxNzA3QUMwMTAwQTVDQTk2IC8qIFN1cGVy
UmVnaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQzJFNTI2QkQxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkU1MjZCQjE1OTBFRjAwMDA1NEU0
OEQgLyogSGVhcFRpbWVyLmNwcCAqLzsgfTsKQEAgLTI5NzYsNiArMjk3Nyw3IEBACiAJCUMyQzhE
MDJGMTRBM0NFRkMwMDU3OEU2NSAvKiBIZWFwQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSGVhcEJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMy
Q0YzOUJGMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBKU0FQSVdyYXBwZXJPYmplY3QubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyQ0YzOUMwMTZFMTVBODEwMERENjlCRSAvKiBK
U0FQSVdyYXBwZXJPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNB
UElXcmFwcGVyT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyREE3Nzgy
MThFMjU5OTkwMDY2RkNCNiAvKiBIZWFwSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIZWFwSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
MkRGNDQyRDE3MDdBQzAxMDBBNUNBOTYgLyogU3VwZXJSZWdpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3VwZXJSZWdpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDMkRGNDQyRTE3MDdBQzAxMDBBNUNBOTYgLyogU3VwZXJSZWdpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3VwZXJSZWdpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJFNTI2QkIxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1l
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZWFwVGltZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzUxOSw2ICszNTIxLDcgQEAKIAkJMTQy
RTMxMkExMzRGRjBBNjAwQUZBREI1IC8qIGhlYXAgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAorCQkJCUMyREE3NzgyMThFMjU5OTkwMDY2RkNCNiAvKiBIZWFwSW5s
aW5lcy5oICovLAogCQkJCUFEREIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0
LmggKi8sCiAJCQkJMkFBQ0U2M0ExOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFj
ay5jcHAgKi8sCiAJCQkJMkFBQ0U2M0IxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxs
YmFjay5oICovLApAQCAtNDk0MCw2ICs0OTQzLDcgQEAKIAkJCQlBMUEwMDlDMTE4MzFBMjZFMDBD
Rjg3MTEgLyogQVJNNjRBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RDNCMkM0MTAx
NTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1ODQw
MzIwMThCRkZCRTEwMDVBMDgxMSAvKiBJbnNwZWN0b3JBZ2VudC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQzJEQTc3ODMxOEUyNTk5OTAwNjZGQ0I2IC8qIEhlYXBJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyQUFDRTYzRDE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkyQTgzNjM4NjE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0
aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkE4MzYzOEExOEQ3RDBGRTAwMDBF
QkNDIC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE2NjI3NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDE2LDYgKzEw
MTYsMTkgQEAgdm9pZCBIZWFwOjpzd2VlcEFycmF5QnVmZmVycygpCiAgICAgbV9hcnJheUJ1ZmZl
cnMuc3dlZXAoKTsKIH0KIAorc3RydWN0IE1hcmtlZEJsb2NrU25hcHNob3RGdW5jdG9yIDogcHVi
bGljIE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7CisgICAgTWFya2VkQmxvY2tTbmFwc2hvdEZ1
bmN0b3IoVmVjdG9yPE1hcmtlZEJsb2NrKj4mIGJsb2NrcykgCisgICAgICAgIDogbV9pbmRleCgw
KSAKKyAgICAgICAgLCBtX2Jsb2NrcyhibG9ja3MpCisgICAgeworICAgIH0KKworICAgIHZvaWQg
b3BlcmF0b3IoKShNYXJrZWRCbG9jayogYmxvY2spIHsgbV9ibG9ja3NbbV9pbmRleCsrXSA9IGJs
b2NrOyB9CisKKyAgICBzaXplX3QgbV9pbmRleDsKKyAgICBWZWN0b3I8TWFya2VkQmxvY2sqPiYg
bV9ibG9ja3M7Cit9OworCiB2b2lkIEhlYXA6OnNuYXBzaG90TWFya2VkU3BhY2UoKQogewogICAg
IEdDUEhBU0UoU25hcHNob3RNYXJrZWRTcGFjZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5oCShyZXZpc2lvbiAxNjYyNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDU0NiArNDksMzI3IEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCi0gICAgY2xhc3MgQ29waWVkU3BhY2U7Ci0gICAgY2xhc3MgQ29kZUJsb2NrOwotICAg
IGNsYXNzIEV4ZWN1dGFibGVCYXNlOwotICAgIGNsYXNzIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2s7
Ci0gICAgY2xhc3MgRnVsbEdDQWN0aXZpdHlDYWxsYmFjazsKLSAgICBjbGFzcyBHQ0FjdGl2aXR5
Q2FsbGJhY2s7Ci0gICAgY2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOwotICAgIGNsYXNzIEds
b2JhbENvZGVCbG9jazsKLSAgICBjbGFzcyBIZWFwOwotICAgIGNsYXNzIEhlYXBSb290VmlzaXRv
cjsKLSAgICBjbGFzcyBJbmNyZW1lbnRhbFN3ZWVwZXI7Ci0gICAgY2xhc3MgSklUU3R1YlJvdXRp
bmU7Ci0gICAgY2xhc3MgSlNDZWxsOwotICAgIGNsYXNzIFZNOwotICAgIGNsYXNzIEpTU3RhY2s7
Ci0gICAgY2xhc3MgSlNWYWx1ZTsKLSAgICBjbGFzcyBMaXZlT2JqZWN0SXRlcmF0b3I7Ci0gICAg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwotICAgIGNsYXNzIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyOwotICAgIGNsYXNzIFdlYWtHQ0hhbmRsZVBvb2w7Ci0gICAgY2xhc3MgU2xvdFZpc2l0b3I7
Ci0KLSAgICB0eXBlZGVmIHN0ZDo6cGFpcjxKU1ZhbHVlLCBXVEY6OlN0cmluZz4gVmFsdWVTdHJp
bmdQYWlyOwotICAgIHR5cGVkZWYgSGFzaENvdW50ZWRTZXQ8SlNDZWxsKj4gUHJvdGVjdENvdW50
U2V0OwotICAgIHR5cGVkZWYgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+IFR5cGVDb3VudFNl
dDsKLQotICAgIGVudW0gSGVhcFR5cGUgeyBTbWFsbEhlYXAsIExhcmdlSGVhcCB9OwotCi0gICAg
Y2xhc3MgSGVhcCB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhlYXApOwotICAgIHB1
YmxpYzoKLSAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKLSAgICAgICAgZnJpZW5kIGNsYXNzIERG
Rzo6U3BlY3VsYXRpdmVKSVQ7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBHQ1RocmVhZFNoYXJlZERh
dGE7Ci0gICAgICAgIHN0YXRpYyBIZWFwKiBoZWFwKGNvbnN0IEpTVmFsdWUpOyAvLyAwIGZvciBp
bW1lZGlhdGUgdmFsdWVzCi0gICAgICAgIHN0YXRpYyBIZWFwKiBoZWFwKGNvbnN0IEpTQ2VsbCop
OwotCi0gICAgICAgIC8vIFRoaXMgY29uc3RhbnQgZGV0ZXJtaW5lcyBob3cgbWFueSBibG9ja3Mg
d2UgaXRlcmF0ZSBiZXR3ZWVuIGNoZWNrcyBvZiBvdXIgCi0gICAgICAgIC8vIGRlYWRsaW5lIHdo
ZW4gY2FsbGluZyBIZWFwOjppc1BhZ2VkT3V0LiBEZWNyZWFzaW5nIGl0IHdpbGwgY2F1c2UgdXMg
dG8gZGV0ZWN0IAotICAgICAgICAvLyBvdmVyc3RlcHBpbmcgb3VyIGRlYWRsaW5lIG1vcmUgcXVp
Y2tseSwgd2hpbGUgaW5jcmVhc2luZyBpdCB3aWxsIGNhdXNlIAotICAgICAgICAvLyBvdXIgc2Nh
biB0byBydW4gZmFzdGVyLiAKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfdGltZUNo
ZWNrUmVzb2x1dGlvbiA9IDE2OwotCi0gICAgICAgIHN0YXRpYyBib29sIGlzTGl2ZShjb25zdCB2
b2lkKik7Ci0gICAgICAgIHN0YXRpYyBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKTsKLSAgICAg
ICAgc3RhdGljIGJvb2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKik7Ci0gICAgICAgIHN0
YXRpYyB2b2lkIHNldE1hcmtlZChjb25zdCB2b2lkKik7Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBhZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZWxsKik7Ci0gICAgICAgIGJv
b2wgaXNJblJlbWVtYmVyZWRTZXQoY29uc3QgSlNDZWxsKiBjZWxsKSBjb25zdAotICAgICAgICB7
Ci0gICAgICAgICAgICBBU1NFUlQoY2VsbCk7Ci0gICAgICAgICAgICBBU1NFUlQoIU9wdGlvbnM6
OmVuYWJsZUNvbmN1cnJlbnRKSVQoKSB8fCAhaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICAg
ICAgICAgIHJldHVybiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmlzUmVtZW1iZXJlZChj
ZWxsKTsKLSAgICAgICAgfQotICAgICAgICBzdGF0aWMgYm9vbCBpc1dyaXRlQmFycmllckVuYWJs
ZWQoKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3Qg
SlNDZWxsKik7Ci0gICAgICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIEpTVmFs
dWUpOwotICAgICAgICB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU0NlbGwqKTsK
LQotICAgICAgICBXcml0ZUJhcnJpZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlcigpIHsgcmV0
dXJuIG1fd3JpdGVCYXJyaWVyQnVmZmVyOyB9Ci0gICAgICAgIHZvaWQgZmx1c2hXcml0ZUJhcnJp
ZXJCdWZmZXIoSlNDZWxsKik7Ci0KLSAgICAgICAgSGVhcChWTSosIEhlYXBUeXBlKTsKLSAgICAg
ICAgfkhlYXAoKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBsYXN0Q2hhbmNlVG9G
aW5hbGl6ZSgpOwotCi0gICAgICAgIFZNKiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1fdm07IH0KLSAg
ICAgICAgTWFya2VkU3BhY2UmIG9iamVjdFNwYWNlKCkgeyByZXR1cm4gbV9vYmplY3RTcGFjZTsg
fQotICAgICAgICBNYWNoaW5lVGhyZWFkcyYgbWFjaGluZVRocmVhZHMoKSB7IHJldHVybiBtX21h
Y2hpbmVUaHJlYWRzOyB9Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgR0NBY3Rpdml0eUNh
bGxiYWNrKiBmdWxsQWN0aXZpdHlDYWxsYmFjaygpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBHQ0FjdGl2aXR5Q2FsbGJhY2sqIGVkZW5BY3Rpdml0eUNhbGxiYWNrKCk7Ci0gICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0RnVsbEFjdGl2aXR5Q2FsbGJhY2soUGFzc1JlZlB0cjxG
dWxsR0NBY3Rpdml0eUNhbGxiYWNrPik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
c2V0RWRlbkFjdGl2aXR5Q2FsbGJhY2soUGFzc1JlZlB0cjxFZGVuR0NBY3Rpdml0eUNhbGxiYWNr
Pik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0R2FyYmFnZUNvbGxlY3Rpb25U
aW1lckVuYWJsZWQoYm9vbCk7Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSW5jcmVtZW50
YWxTd2VlcGVyKiBzd2VlcGVyKCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0
SW5jcmVtZW50YWxTd2VlcGVyKFBhc3NPd25QdHI8SW5jcmVtZW50YWxTd2VlcGVyPik7Ci0KLSAg
ICAgICAgLy8gdHJ1ZSBpZiBjb2xsZWN0aW9uIGlzIGluIHByb2dyZXNzCi0gICAgICAgIGlubGlu
ZSBib29sIGlzQ29sbGVjdGluZygpOwotICAgICAgICBpbmxpbmUgSGVhcE9wZXJhdGlvbiBvcGVy
YXRpb25JblByb2dyZXNzKCkgeyByZXR1cm4gbV9vcGVyYXRpb25JblByb2dyZXNzOyB9Ci0gICAg
ICAgIC8vIHRydWUgaWYgYW4gYWxsb2NhdGlvbiBvciBjb2xsZWN0aW9uIGlzIGluIHByb2dyZXNz
Ci0gICAgICAgIGlubGluZSBib29sIGlzQnVzeSgpOwotICAgICAgICAKLSAgICAgICAgTWFya2Vk
QWxsb2NhdG9yJiBhbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihzaXplX3QgYnl0
ZXMpIHsgcmV0dXJuIG1fb2JqZWN0U3BhY2UuYWxsb2NhdG9yRm9yKGJ5dGVzKTsgfQotICAgICAg
ICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvckZvck9iamVjdFdpdGhOb3JtYWxEZXN0cnVjdG9y
KHNpemVfdCBieXRlcykgeyByZXR1cm4gbV9vYmplY3RTcGFjZS5ub3JtYWxEZXN0cnVjdG9yQWxs
b2NhdG9yRm9yKGJ5dGVzKTsgfQotICAgICAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvckZv
ck9iamVjdFdpdGhJbW1vcnRhbFN0cnVjdHVyZURlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKSB7IHJl
dHVybiBtX29iamVjdFNwYWNlLmltbW9ydGFsU3RydWN0dXJlRGVzdHJ1Y3RvckFsbG9jYXRvckZv
cihieXRlcyk7IH0KLSAgICAgICAgQ29waWVkQWxsb2NhdG9yJiBzdG9yYWdlQWxsb2NhdG9yKCkg
eyByZXR1cm4gbV9zdG9yYWdlU3BhY2UuYWxsb2NhdG9yKCk7IH0KLSAgICAgICAgQ2hlY2tlZEJv
b2xlYW4gdHJ5QWxsb2NhdGVTdG9yYWdlKEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90LCB2
b2lkKiopOwotICAgICAgICBDaGVja2VkQm9vbGVhbiB0cnlSZWFsbG9jYXRlU3RvcmFnZShKU0Nl
bGwqIGludGVuZGVkT3duZXIsIHZvaWQqKiwgc2l6ZV90LCBzaXplX3QpOwotICAgICAgICB2b2lk
IGFzY3JpYmVPd25lcihKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqKTsKLQotICAgICAgICB0
eXBlZGVmIHZvaWQgKCpGaW5hbGl6ZXIpKEpTQ2VsbCopOwotICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGFkZEZpbmFsaXplcihKU0NlbGwqLCBGaW5hbGl6ZXIpOwotICAgICAgICB2b2lk
IGFkZENvbXBpbGVkQ29kZShFeGVjdXRhYmxlQmFzZSopOwotCi0gICAgICAgIHZvaWQgbm90aWZ5
SXNTYWZlVG9Db2xsZWN0KCkgeyBtX2lzU2FmZVRvQ29sbGVjdCA9IHRydWU7IH0KLSAgICAgICAg
Ym9vbCBpc1NhZmVUb0NvbGxlY3QoKSBjb25zdCB7IHJldHVybiBtX2lzU2FmZVRvQ29sbGVjdDsg
fQotCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29sbGVjdEFsbEdhcmJhZ2UoKTsK
LSAgICAgICAgYm9vbCBzaG91bGRDb2xsZWN0KCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgY29sbGVjdChIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlID0gQW55Q29sbGVjdGlv
bik7Ci0gICAgICAgIGJvb2wgY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpOyAvLyBSZXR1cm5z
IHRydWUgaWYgaXQgZGlkIGNvbGxlY3QuCi0KLSAgICAgICAgdm9pZCByZXBvcnRFeHRyYU1lbW9y
eUNvc3Qoc2l6ZV90IGNvc3QpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlcG9y
dEFiYW5kb25lZE9iamVjdEdyYXBoKCk7Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBwcm90ZWN0KEpTVmFsdWUpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHVucHJv
dGVjdChKU1ZhbHVlKTsgLy8gVHJ1ZSB3aGVuIHRoZSBwcm90ZWN0IGNvdW50IGRyb3BzIHRvIDAu
Ci0gICAgICAgIAotICAgICAgICBzaXplX3QgZXh0cmFTaXplKCk7IC8vIGV4dHJhIG1lbW9yeSB1
c2FnZSBvdXRzaWRlIG9mIHBhZ2VzIGFsbG9jYXRlZCBieSB0aGUgaGVhcAotICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzaXplX3Qgc2l6ZSgpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBz
aXplX3QgY2FwYWNpdHkoKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IG9iamVj
dENvdW50KCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBnbG9iYWxPYmplY3RD
b3VudCgpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3QgcHJvdGVjdGVkT2JqZWN0
Q291bnQoKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IHByb3RlY3RlZEdsb2Jh
bE9iamVjdENvdW50KCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFBhc3NPd25QdHI8VHlw
ZUNvdW50U2V0PiBwcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCk7Ci0gICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIFBhc3NPd25QdHI8VHlwZUNvdW50U2V0PiBvYmplY3RUeXBlQ291bnRzKCk7Ci0g
ICAgICAgIHZvaWQgc2hvd1N0YXRpc3RpY3MoKTsKLQotICAgICAgICB2b2lkIHB1c2hUZW1wU29y
dFZlY3RvcihWZWN0b3I8VmFsdWVTdHJpbmdQYWlyLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4q
KTsKLSAgICAgICAgdm9pZCBwb3BUZW1wU29ydFZlY3RvcihWZWN0b3I8VmFsdWVTdHJpbmdQYWly
LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4qKTsKLSAgICAKLSAgICAgICAgSGFzaFNldDxNYXJr
ZWRBcmd1bWVudEJ1ZmZlcio+JiBtYXJrTGlzdFNldCgpIHsgaWYgKCFtX21hcmtMaXN0U2V0KSBt
X21hcmtMaXN0U2V0ID0gYWRvcHRQdHIobmV3IEhhc2hTZXQ8TWFya2VkQXJndW1lbnRCdWZmZXIq
Pik7IHJldHVybiAqbV9tYXJrTGlzdFNldDsgfQotICAgICAgICAKLSAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlwZSBmb3JFYWNoUHJv
dGVjdGVkQ2VsbChGdW5jdG9yJik7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
IHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgZm9yRWFjaFByb3RlY3RlZENlbGwoKTsKLSAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgZm9yRWFjaENvZGVC
bG9jayhGdW5jdG9yJik7Ci0KLSAgICAgICAgSGFuZGxlU2V0KiBoYW5kbGVTZXQoKSB7IHJldHVy
biAmbV9oYW5kbGVTZXQ7IH0KLSAgICAgICAgSGFuZGxlU3RhY2sqIGhhbmRsZVN0YWNrKCkgeyBy
ZXR1cm4gJm1faGFuZGxlU3RhY2s7IH0KLQotICAgICAgICB2b2lkIHdpbGxTdGFydEl0ZXJhdGlu
ZygpOwotICAgICAgICB2b2lkIGRpZEZpbmlzaEl0ZXJhdGluZygpOwotICAgICAgICB2b2lkIGdl
dENvbnNlcnZhdGl2ZVJlZ2lzdGVyUm9vdHMoSGFzaFNldDxKU0NlbGwqPiYgcm9vdHMpOwotCi0g
ICAgICAgIGRvdWJsZSBsYXN0RnVsbEdDTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RnVs
bEdDTGVuZ3RoOyB9Ci0gICAgICAgIGRvdWJsZSBsYXN0RWRlbkdDTGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXN0RWRlbkdDTGVuZ3RoOyB9Ci0gICAgICAgIHZvaWQgaW5jcmVhc2VMYXN0RnVs
bEdDTGVuZ3RoKGRvdWJsZSBhbW91bnQpIHsgbV9sYXN0RnVsbEdDTGVuZ3RoICs9IGFtb3VudDsg
fQotCi0gICAgICAgIHNpemVfdCBzaXplQmVmb3JlTGFzdEVkZW5Db2xsZWN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9zaXplQmVmb3JlTGFzdEVkZW5Db2xsZWN0OyB9Ci0gICAgICAgIHNpemVfdCBz
aXplQWZ0ZXJMYXN0RWRlbkNvbGxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3NpemVBZnRlckxh
c3RFZGVuQ29sbGVjdDsgfQotICAgICAgICBzaXplX3Qgc2l6ZUJlZm9yZUxhc3RGdWxsQ29sbGVj
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZUJlZm9yZUxhc3RGdWxsQ29sbGVjdDsgfQotICAg
ICAgICBzaXplX3Qgc2l6ZUFmdGVyTGFzdEZ1bGxDb2xsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9zaXplQWZ0ZXJMYXN0RnVsbENvbGxlY3Q7IH0KLQotICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIGRlbGV0ZUFsbENvbXBpbGVkQ29kZSgpOwotICAgICAgICB2b2lkIGRlbGV0ZUFsbFVu
bGlua2VkRnVuY3Rpb25Db2RlKCk7Ci0KLSAgICAgICAgdm9pZCBkaWRBbGxvY2F0ZShzaXplX3Qp
OwotICAgICAgICB2b2lkIGRpZEFiYW5kb24oc2l6ZV90KTsKLQotICAgICAgICBib29sIGlzUGFn
ZWRPdXQoZG91YmxlIGRlYWRsaW5lKTsKLSAgICAgICAgCi0gICAgICAgIGNvbnN0IEpJVFN0dWJS
b3V0aW5lU2V0JiBqaXRTdHViUm91dGluZXMoKSB7IHJldHVybiBtX2ppdFN0dWJSb3V0aW5lczsg
fQotICAgICAgICAKLSAgICAgICAgdm9pZCBhZGRSZWZlcmVuY2UoSlNDZWxsKiwgQXJyYXlCdWZm
ZXIqKTsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgaXNEZWZlcnJlZCgpIGNvbnN0IHsgcmV0dXJu
ICEhbV9kZWZlcnJhbERlcHRoIHx8IE9wdGlvbnM6OmRpc2FibGVHQygpOyB9CitjbGFzcyBDb3Bp
ZWRTcGFjZTsKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNzIEV4ZWN1dGFibGVCYXNlOworY2xhc3Mg
RWRlbkdDQWN0aXZpdHlDYWxsYmFjazsKK2NsYXNzIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2s7Citj
bGFzcyBHQ0FjdGl2aXR5Q2FsbGJhY2s7CitjbGFzcyBHQ0F3YXJlSklUU3R1YlJvdXRpbmU7Citj
bGFzcyBHbG9iYWxDb2RlQmxvY2s7CitjbGFzcyBIZWFwOworY2xhc3MgSGVhcFJvb3RWaXNpdG9y
OworY2xhc3MgSW5jcmVtZW50YWxTd2VlcGVyOworY2xhc3MgSklUU3R1YlJvdXRpbmU7CitjbGFz
cyBKU0NlbGw7CitjbGFzcyBWTTsKK2NsYXNzIEpTU3RhY2s7CitjbGFzcyBKU1ZhbHVlOworY2xh
c3MgTGl2ZU9iamVjdEl0ZXJhdG9yOworY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworY2xh
c3MgTWFya2VkQXJndW1lbnRCdWZmZXI7CitjbGFzcyBXZWFrR0NIYW5kbGVQb29sOworY2xhc3Mg
U2xvdFZpc2l0b3I7CisKK3R5cGVkZWYgc3RkOjpwYWlyPEpTVmFsdWUsIFdURjo6U3RyaW5nPiBW
YWx1ZVN0cmluZ1BhaXI7Cit0eXBlZGVmIEhhc2hDb3VudGVkU2V0PEpTQ2VsbCo+IFByb3RlY3RD
b3VudFNldDsKK3R5cGVkZWYgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+IFR5cGVDb3VudFNl
dDsKKworZW51bSBIZWFwVHlwZSB7IFNtYWxsSGVhcCwgTGFyZ2VIZWFwIH07CisKK2NsYXNzIEhl
YXAgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhlYXApOworcHVibGljOgorICAgIGZyaWVu
ZCBjbGFzcyBKSVQ7CisgICAgZnJpZW5kIGNsYXNzIERGRzo6U3BlY3VsYXRpdmVKSVQ7CisgICAg
ZnJpZW5kIGNsYXNzIEdDVGhyZWFkU2hhcmVkRGF0YTsKKyAgICBzdGF0aWMgSGVhcCogaGVhcChj
b25zdCBKU1ZhbHVlKTsgLy8gMCBmb3IgaW1tZWRpYXRlIHZhbHVlcworICAgIHN0YXRpYyBIZWFw
KiBoZWFwKGNvbnN0IEpTQ2VsbCopOworCisgICAgLy8gVGhpcyBjb25zdGFudCBkZXRlcm1pbmVz
IGhvdyBtYW55IGJsb2NrcyB3ZSBpdGVyYXRlIGJldHdlZW4gY2hlY2tzIG9mIG91ciAKKyAgICAv
LyBkZWFkbGluZSB3aGVuIGNhbGxpbmcgSGVhcDo6aXNQYWdlZE91dC4gRGVjcmVhc2luZyBpdCB3
aWxsIGNhdXNlIHVzIHRvIGRldGVjdCAKKyAgICAvLyBvdmVyc3RlcHBpbmcgb3VyIGRlYWRsaW5l
IG1vcmUgcXVpY2tseSwgd2hpbGUgaW5jcmVhc2luZyBpdCB3aWxsIGNhdXNlIAorICAgIC8vIG91
ciBzY2FuIHRvIHJ1biBmYXN0ZXIuIAorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3RpbWVD
aGVja1Jlc29sdXRpb24gPSAxNjsKKworICAgIHN0YXRpYyBib29sIGlzTGl2ZShjb25zdCB2b2lk
Kik7CisgICAgc3RhdGljIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopOworICAgIHN0YXRpYyBi
b29sIHRlc3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9pZCopOworICAgIHN0YXRpYyB2b2lkIHNldE1h
cmtlZChjb25zdCB2b2lkKik7CisgICAgc3RhdGljIGJvb2wgaXNSZW1lbWJlcmVkKGNvbnN0IHZv
aWQqKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkVG9SZW1lbWJlcmVkU2V0KGNv
bnN0IEpTQ2VsbCopOworICAgIGJvb2wgaXNJblJlbWVtYmVyZWRTZXQoY29uc3QgSlNDZWxsKikg
Y29uc3Q7CisgICAgc3RhdGljIGJvb2wgaXNXcml0ZUJhcnJpZXJFbmFibGVkKCk7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKik7CisgICAgdm9p
ZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwgSlNWYWx1ZSk7CisgICAgdm9pZCB3cml0ZUJh
cnJpZXIoY29uc3QgSlNDZWxsKiwgSlNDZWxsKik7CisKKyAgICBXcml0ZUJhcnJpZXJCdWZmZXIm
IHdyaXRlQmFycmllckJ1ZmZlcigpIHsgcmV0dXJuIG1fd3JpdGVCYXJyaWVyQnVmZmVyOyB9Cisg
ICAgdm9pZCBmbHVzaFdyaXRlQmFycmllckJ1ZmZlcihKU0NlbGwqKTsKKworICAgIEhlYXAoVk0q
LCBIZWFwVHlwZSk7CisgICAgfkhlYXAoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGxh
c3RDaGFuY2VUb0ZpbmFsaXplKCk7CisKKyAgICBWTSogdm0oKSBjb25zdCB7IHJldHVybiBtX3Zt
OyB9CisgICAgTWFya2VkU3BhY2UmIG9iamVjdFNwYWNlKCkgeyByZXR1cm4gbV9vYmplY3RTcGFj
ZTsgfQorICAgIE1hY2hpbmVUaHJlYWRzJiBtYWNoaW5lVGhyZWFkcygpIHsgcmV0dXJuIG1fbWFj
aGluZVRocmVhZHM7IH0KKworICAgIEpTX0VYUE9SVF9QUklWQVRFIEdDQWN0aXZpdHlDYWxsYmFj
ayogZnVsbEFjdGl2aXR5Q2FsbGJhY2soKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2
aXR5Q2FsbGJhY2sqIGVkZW5BY3Rpdml0eUNhbGxiYWNrKCk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBzZXRGdWxsQWN0aXZpdHlDYWxsYmFjayhQYXNzUmVmUHRyPEZ1bGxHQ0FjdGl2aXR5
Q2FsbGJhY2s+KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldEVkZW5BY3Rpdml0eUNh
bGxiYWNrKFBhc3NSZWZQdHI8RWRlbkdDQWN0aXZpdHlDYWxsYmFjaz4pOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgc2V0R2FyYmFnZUNvbGxlY3Rpb25UaW1lckVuYWJsZWQoYm9vbCk7CisK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBJbmNyZW1lbnRhbFN3ZWVwZXIqIHN3ZWVwZXIoKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldEluY3JlbWVudGFsU3dlZXBlcihQYXNzT3duUHRy
PEluY3JlbWVudGFsU3dlZXBlcj4pOworCisgICAgLy8gdHJ1ZSBpZiBjb2xsZWN0aW9uIGlzIGlu
IHByb2dyZXNzCisgICAgYm9vbCBpc0NvbGxlY3RpbmcoKTsKKyAgICBIZWFwT3BlcmF0aW9uIG9w
ZXJhdGlvbkluUHJvZ3Jlc3MoKSB7IHJldHVybiBtX29wZXJhdGlvbkluUHJvZ3Jlc3M7IH0KKyAg
ICAvLyB0cnVlIGlmIGFuIGFsbG9jYXRpb24gb3IgY29sbGVjdGlvbiBpcyBpbiBwcm9ncmVzcwor
ICAgIGJvb2wgaXNCdXN5KCk7CisgICAgCisgICAgTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JG
b3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihzaXplX3QgYnl0ZXMpIHsgcmV0dXJuIG1fb2JqZWN0
U3BhY2UuYWxsb2NhdG9yRm9yKGJ5dGVzKTsgfQorICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2Nh
dG9yRm9yT2JqZWN0V2l0aE5vcm1hbERlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKSB7IHJldHVybiBt
X29iamVjdFNwYWNlLm5vcm1hbERlc3RydWN0b3JBbGxvY2F0b3JGb3IoYnl0ZXMpOyB9CisgICAg
TWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3JPYmplY3RXaXRoSW1tb3J0YWxTdHJ1Y3R1cmVE
ZXN0cnVjdG9yKHNpemVfdCBieXRlcykgeyByZXR1cm4gbV9vYmplY3RTcGFjZS5pbW1vcnRhbFN0
cnVjdHVyZURlc3RydWN0b3JBbGxvY2F0b3JGb3IoYnl0ZXMpOyB9CisgICAgQ29waWVkQWxsb2Nh
dG9yJiBzdG9yYWdlQWxsb2NhdG9yKCkgeyByZXR1cm4gbV9zdG9yYWdlU3BhY2UuYWxsb2NhdG9y
KCk7IH0KKyAgICBDaGVja2VkQm9vbGVhbiB0cnlBbGxvY2F0ZVN0b3JhZ2UoSlNDZWxsKiBpbnRl
bmRlZE93bmVyLCBzaXplX3QsIHZvaWQqKik7CisgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5UmVhbGxv
Y2F0ZVN0b3JhZ2UoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKiosIHNpemVfdCwgc2l6ZV90
KTsKKyAgICB2b2lkIGFzY3JpYmVPd25lcihKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqKTsK
KworICAgIHR5cGVkZWYgdm9pZCAoKkZpbmFsaXplcikoSlNDZWxsKik7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBhZGRGaW5hbGl6ZXIoSlNDZWxsKiwgRmluYWxpemVyKTsKKyAgICB2b2lk
IGFkZENvbXBpbGVkQ29kZShFeGVjdXRhYmxlQmFzZSopOworCisgICAgdm9pZCBub3RpZnlJc1Nh
ZmVUb0NvbGxlY3QoKSB7IG1faXNTYWZlVG9Db2xsZWN0ID0gdHJ1ZTsgfQorICAgIGJvb2wgaXNT
YWZlVG9Db2xsZWN0KCkgY29uc3QgeyByZXR1cm4gbV9pc1NhZmVUb0NvbGxlY3Q7IH0KKworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29sbGVjdEFsbEdhcmJhZ2UoKTsKKyAgICBib29sIHNo
b3VsZENvbGxlY3QoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvbGxlY3QoSGVhcE9w
ZXJhdGlvbiBjb2xsZWN0aW9uVHlwZSA9IEFueUNvbGxlY3Rpb24pOworICAgIGJvb2wgY29sbGVj
dElmTmVjZXNzYXJ5T3JEZWZlcigpOyAvLyBSZXR1cm5zIHRydWUgaWYgaXQgZGlkIGNvbGxlY3Qu
CisKKyAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplX3QgY29zdCk7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRBYmFuZG9uZWRPYmplY3RHcmFwaCgpOworCisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcm90ZWN0KEpTVmFsdWUpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIGJvb2wgdW5wcm90ZWN0KEpTVmFsdWUpOyAvLyBUcnVlIHdoZW4gdGhlIHByb3RlY3Qg
Y291bnQgZHJvcHMgdG8gMC4KKyAgICAKKyAgICBzaXplX3QgZXh0cmFTaXplKCk7IC8vIGV4dHJh
IG1lbW9yeSB1c2FnZSBvdXRzaWRlIG9mIHBhZ2VzIGFsbG9jYXRlZCBieSB0aGUgaGVhcAorICAg
IEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBzaXplKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c2l6ZV90IGNhcGFjaXR5KCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IG9iamVjdENv
dW50KCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGdsb2JhbE9iamVjdENvdW50KCk7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IHByb3RlY3RlZE9iamVjdENvdW50KCk7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IHByb3RlY3RlZEdsb2JhbE9iamVjdENvdW50KCk7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGFzc093blB0cjxUeXBlQ291bnRTZXQ+IHByb3RlY3Rl
ZE9iamVjdFR5cGVDb3VudHMoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBQYXNzT3duUHRyPFR5
cGVDb3VudFNldD4gb2JqZWN0VHlwZUNvdW50cygpOworICAgIHZvaWQgc2hvd1N0YXRpc3RpY3Mo
KTsKKworICAgIHZvaWQgcHVzaFRlbXBTb3J0VmVjdG9yKFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXIs
IDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiopOworICAgIHZvaWQgcG9wVGVtcFNvcnRWZWN0b3Io
VmVjdG9yPFZhbHVlU3RyaW5nUGFpciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+Kik7CisKKyAg
ICBIYXNoU2V0PE1hcmtlZEFyZ3VtZW50QnVmZmVyKj4mIG1hcmtMaXN0U2V0KCk7CisgICAgCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlw
ZSBmb3JFYWNoUHJvdGVjdGVkQ2VsbChGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4gdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlwZSBmb3JFYWNoUHJvdGVjdGVkQ2Vs
bCgpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENvZGVCbG9j
ayhGdW5jdG9yJik7CisKKyAgICBIYW5kbGVTZXQqIGhhbmRsZVNldCgpIHsgcmV0dXJuICZtX2hh
bmRsZVNldDsgfQorICAgIEhhbmRsZVN0YWNrKiBoYW5kbGVTdGFjaygpIHsgcmV0dXJuICZtX2hh
bmRsZVN0YWNrOyB9CisKKyAgICB2b2lkIHdpbGxTdGFydEl0ZXJhdGluZygpOworICAgIHZvaWQg
ZGlkRmluaXNoSXRlcmF0aW5nKCk7CisgICAgdm9pZCBnZXRDb25zZXJ2YXRpdmVSZWdpc3RlclJv
b3RzKEhhc2hTZXQ8SlNDZWxsKj4mIHJvb3RzKTsKKworICAgIGRvdWJsZSBsYXN0RnVsbEdDTGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RnVsbEdDTGVuZ3RoOyB9CisgICAgZG91YmxlIGxh
c3RFZGVuR0NMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xhc3RFZGVuR0NMZW5ndGg7IH0KKyAg
ICB2b2lkIGluY3JlYXNlTGFzdEZ1bGxHQ0xlbmd0aChkb3VibGUgYW1vdW50KSB7IG1fbGFzdEZ1
bGxHQ0xlbmd0aCArPSBhbW91bnQ7IH0KIAotICAgICAgICBCbG9ja0FsbG9jYXRvciYgYmxvY2tB
bGxvY2F0b3IoKTsKLSAgICAgICAgU3RydWN0dXJlSURUYWJsZSYgc3RydWN0dXJlSURUYWJsZSgp
IHsgcmV0dXJuIG1fc3RydWN0dXJlSURUYWJsZTsgfQorICAgIHNpemVfdCBzaXplQmVmb3JlTGFz
dEVkZW5Db2xsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zaXplQmVmb3JlTGFzdEVkZW5Db2xs
ZWN0OyB9CisgICAgc2l6ZV90IHNpemVBZnRlckxhc3RFZGVuQ29sbGVjdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fc2l6ZUFmdGVyTGFzdEVkZW5Db2xsZWN0OyB9CisgICAgc2l6ZV90IHNpemVCZWZv
cmVMYXN0RnVsbENvbGxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3NpemVCZWZvcmVMYXN0RnVs
bENvbGxlY3Q7IH0KKyAgICBzaXplX3Qgc2l6ZUFmdGVyTGFzdEZ1bGxDb2xsZWN0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9zaXplQWZ0ZXJMYXN0RnVsbENvbGxlY3Q7IH0KKworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgZGVsZXRlQWxsQ29tcGlsZWRDb2RlKCk7CisgICAgdm9pZCBkZWxldGVB
bGxVbmxpbmtlZEZ1bmN0aW9uQ29kZSgpOworCisgICAgdm9pZCBkaWRBbGxvY2F0ZShzaXplX3Qp
OworICAgIHZvaWQgZGlkQWJhbmRvbihzaXplX3QpOworCisgICAgYm9vbCBpc1BhZ2VkT3V0KGRv
dWJsZSBkZWFkbGluZSk7CisgICAgCisgICAgY29uc3QgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0
dWJSb3V0aW5lcygpIHsgcmV0dXJuIG1faml0U3R1YlJvdXRpbmVzOyB9CisgICAgCisgICAgdm9p
ZCBhZGRSZWZlcmVuY2UoSlNDZWxsKiwgQXJyYXlCdWZmZXIqKTsKKyAgICAKKyAgICBib29sIGlz
RGVmZXJyZWQoKSBjb25zdCB7IHJldHVybiAhIW1fZGVmZXJyYWxEZXB0aCB8fCBPcHRpb25zOjpk
aXNhYmxlR0MoKTsgfQorCisgICAgQmxvY2tBbGxvY2F0b3ImIGJsb2NrQWxsb2NhdG9yKCk7Cisg
ICAgU3RydWN0dXJlSURUYWJsZSYgc3RydWN0dXJlSURUYWJsZSgpIHsgcmV0dXJuIG1fc3RydWN0
dXJlSURUYWJsZTsgfQogCiAjaWYgVVNFKENGKQogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB2b2lkIHJlbGVhc2VTb29uKFJldGFpblB0cjxUPiYmKTsKICNlbmRpZgogCi0gICAgICAgIHZv
aWQgcmVtb3ZlQ29kZUJsb2NrKENvZGVCbG9jayogY2IpIHsgbV9jb2RlQmxvY2tzLnJlbW92ZShj
Yik7IH0KKyAgICB2b2lkIHJlbW92ZUNvZGVCbG9jayhDb2RlQmxvY2sqIGNiKSB7IG1fY29kZUJs
b2Nrcy5yZW1vdmUoY2IpOyB9CiAKLSAgICBwcml2YXRlOgotICAgICAgICBmcmllbmQgY2xhc3Mg
Q29kZUJsb2NrOwotICAgICAgICBmcmllbmQgY2xhc3MgQ29waWVkQmxvY2s7Ci0gICAgICAgIGZy
aWVuZCBjbGFzcyBEZWZlckdDOwotICAgICAgICBmcmllbmQgY2xhc3MgRGVmZXJHQ0ZvckFXaGls
ZTsKLSAgICAgICAgZnJpZW5kIGNsYXNzIERlbGF5ZWRSZWxlYXNlU2NvcGU7Ci0gICAgICAgIGZy
aWVuZCBjbGFzcyBHQ0F3YXJlSklUU3R1YlJvdXRpbmU7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBI
YW5kbGVTZXQ7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViUm91dGluZTsKLSAgICAgICAg
ZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLSAgICAgICAgZnJpZW5kIGNsYXNz
IE1hcmtlZFNwYWNlOwotICAgICAgICBmcmllbmQgY2xhc3MgTWFya2VkQWxsb2NhdG9yOwotICAg
ICAgICBmcmllbmQgY2xhc3MgTWFya2VkQmxvY2s7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBDb3Bp
ZWRTcGFjZTsKLSAgICAgICAgZnJpZW5kIGNsYXNzIENvcHlWaXNpdG9yOwotICAgICAgICBmcmll
bmQgY2xhc3MgUmVjdXJzaXZlQWxsb2NhdGlvblNjb3BlOwotICAgICAgICBmcmllbmQgY2xhc3Mg
U2xvdFZpc2l0b3I7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBTdXBlclJlZ2lvbjsKLSAgICAgICAg
ZnJpZW5kIGNsYXNzIEluY3JlbWVudGFsU3dlZXBlcjsKLSAgICAgICAgZnJpZW5kIGNsYXNzIEhl
YXBTdGF0aXN0aWNzOwotICAgICAgICBmcmllbmQgY2xhc3MgVk07Ci0gICAgICAgIGZyaWVuZCBj
bGFzcyBXZWFrU2V0OwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBmcmllbmQgdm9pZCog
YWxsb2NhdGVDZWxsKEhlYXAmKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJpZW5k
IHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiwgc2l6ZV90KTsKLQotICAgICAgICB2b2lkKiBhbGxv
Y2F0ZVdpdGhJbW1vcnRhbFN0cnVjdHVyZURlc3RydWN0b3Ioc2l6ZV90KTsgLy8gRm9yIHVzZSB3
aXRoIHNwZWNpYWwgb2JqZWN0cyB3aG9zZSBTdHJ1Y3R1cmVzIG5ldmVyIGRpZS4KLSAgICAgICAg
dm9pZCogYWxsb2NhdGVXaXRoTm9ybWFsRGVzdHJ1Y3RvcihzaXplX3QpOyAvLyBGb3IgdXNlIHdp
dGggb2JqZWN0cyB0aGF0IGluaGVyaXQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBmcm9tIEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LgotICAgICAgICB2b2lkKiBhbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9y
KHNpemVfdCk7IC8vIEZvciB1c2Ugd2l0aCBvYmplY3RzIHdpdGhvdXQgZGVzdHJ1Y3RvcnMuCi0K
LSAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtaW5FeHRyYUNvc3QgPSAyNTY7Ci0gICAgICAg
IHN0YXRpYyBjb25zdCBzaXplX3QgbWF4RXh0cmFDb3N0ID0gMTAyNCAqIDEwMjQ7Ci0gICAgICAg
IAotICAgICAgICBjbGFzcyBGaW5hbGl6ZXJPd25lciA6IHB1YmxpYyBXZWFrSGFuZGxlT3duZXIg
ewotICAgICAgICAgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9p
ZCogY29udGV4dCkgb3ZlcnJpZGU7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgYm9vbCBpc1ZhbGlkQWxsb2NhdGlvbihzaXplX3QpOwotICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5Q29zdFNsb3dDYXNlKHNpemVfdCk7Ci0KLSAg
ICAgICAgdm9pZCBzdXNwZW5kQ29tcGlsZXJUaHJlYWRzKCk7Ci0gICAgICAgIHZvaWQgd2lsbFN0
YXJ0Q29sbGVjdGlvbihIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlKTsKLSAgICAgICAgdm9p
ZCBkZWxldGVPbGRDb2RlKGRvdWJsZSBnY1N0YXJ0VGltZSk7Ci0gICAgICAgIHZvaWQgZmx1c2hP
bGRTdHJ1Y3R1cmVJRFRhYmxlcygpOwotICAgICAgICB2b2lkIGZsdXNoV3JpdGVCYXJyaWVyQnVm
ZmVyKCk7Ci0gICAgICAgIHZvaWQgc3RvcEFsbG9jYXRpb24oKTsKLQotICAgICAgICB2b2lkIG1h
cmtSb290cygpOwotICAgICAgICB2b2lkIGdhdGhlclN0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9v
dHMmLCB2b2lkKiogZHVtbXkpOwotICAgICAgICB2b2lkIGdhdGhlckpTU3RhY2tSb290cyhDb25z
ZXJ2YXRpdmVSb290cyYpOwotICAgICAgICB2b2lkIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhD
b25zZXJ2YXRpdmVSb290cyYpOwotICAgICAgICB2b2lkIGNsZWFyTGl2ZW5lc3NEYXRhKCk7Ci0g
ICAgICAgIHZvaWQgdmlzaXRTbWFsbFN0cmluZ3MoKTsKLSAgICAgICAgdm9pZCB2aXNpdENvbnNl
cnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7Ci0gICAgICAgIHZvaWQgdmlzaXRDb21w
aWxlcldvcmtsaXN0cygpOwotICAgICAgICB2b2lkIHZpc2l0UHJvdGVjdGVkT2JqZWN0cyhIZWFw
Um9vdFZpc2l0b3ImKTsKLSAgICAgICAgdm9pZCB2aXNpdFRlbXBTb3J0VmVjdG9ycyhIZWFwUm9v
dFZpc2l0b3ImKTsKLSAgICAgICAgdm9pZCB2aXNpdEFyZ3VtZW50QnVmZmVycyhIZWFwUm9vdFZp
c2l0b3ImKTsKLSAgICAgICAgdm9pZCB2aXNpdEV4Y2VwdGlvbihIZWFwUm9vdFZpc2l0b3ImKTsK
LSAgICAgICAgdm9pZCB2aXNpdFN0cm9uZ0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAg
ICAgIHZvaWQgdmlzaXRIYW5kbGVTdGFjayhIZWFwUm9vdFZpc2l0b3ImKTsKLSAgICAgICAgdm9p
ZCB0cmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMoKTsKLSAgICAgICAgdm9pZCBjb252
ZXJnZSgpOwotICAgICAgICB2b2lkIHZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7
Ci0gICAgICAgIHZvaWQgY2xlYXJSZW1lbWJlcmVkU2V0KFZlY3Rvcjxjb25zdCBKU0NlbGwqPiYp
OwotICAgICAgICB2b2lkIHVwZGF0ZU9iamVjdENvdW50cygpOwotICAgICAgICB2b2lkIHJlc2V0
VmlzaXRvcnMoKTsKLQotICAgICAgICB2b2lkIHJlYXBXZWFrSGFuZGxlcygpOwotICAgICAgICB2
b2lkIHN3ZWVwQXJyYXlCdWZmZXJzKCk7Ci0gICAgICAgIHZvaWQgc25hcHNob3RNYXJrZWRTcGFj
ZSgpOwotICAgICAgICB2b2lkIGRlbGV0ZVNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7Ci0gICAgICAg
IHZvaWQgbm90aWZ5SW5jcmVtZW50YWxTd2VlcGVyKCk7Ci0gICAgICAgIHZvaWQgcmVtZW1iZXJD
dXJyZW50bHlFeGVjdXRpbmdDb2RlQmxvY2tzKCk7Ci0gICAgICAgIHZvaWQgcmVzZXRBbGxvY2F0
b3JzKCk7Ci0gICAgICAgIHZvaWQgY29weUJhY2tpbmdTdG9yZXMoKTsKLSAgICAgICAgdm9pZCBo
YXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKLSAgICAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9u
YWxGaW5hbGl6ZXJzKCk7Ci0gICAgICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUo
KTsKLSAgICAgICAgdm9pZCB1cGRhdGVBbGxvY2F0aW9uTGltaXRzKCk7Ci0gICAgICAgIHZvaWQg
ZGlkRmluaXNoQ29sbGVjdGlvbihkb3VibGUgZ2NTdGFydFRpbWUpOwotICAgICAgICB2b2lkIHJl
c3VtZUNvbXBpbGVyVGhyZWFkcygpOwotICAgICAgICB2b2lkIHpvbWJpZnlEZWFkT2JqZWN0cygp
OwotICAgICAgICB2b2lkIG1hcmtEZWFkT2JqZWN0cygpOwotCi0gICAgICAgIGJvb2wgc2hvdWxk
RG9GdWxsQ29sbGVjdGlvbihIZWFwT3BlcmF0aW9uIHJlcXVlc3RlZENvbGxlY3Rpb25UeXBlKSBj
b25zdDsKLSAgICAgICAgc2l6ZV90IHNpemVBZnRlckNvbGxlY3QoKTsKLQotICAgICAgICBKU1N0
YWNrJiBzdGFjaygpOwotICAgICAgICAKLSAgICAgICAgdm9pZCBpbmNyZW1lbnREZWZlcnJhbERl
cHRoKCk7Ci0gICAgICAgIHZvaWQgZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOwotICAgICAgICB2
b2lkIGRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkKCk7Ci0KLSAgICAgICAgY29u
c3QgSGVhcFR5cGUgbV9oZWFwVHlwZTsKLSAgICAgICAgY29uc3Qgc2l6ZV90IG1fcmFtU2l6ZTsK
LSAgICAgICAgY29uc3Qgc2l6ZV90IG1fbWluQnl0ZXNQZXJDeWNsZTsKLSAgICAgICAgc2l6ZV90
IG1fc2l6ZUFmdGVyTGFzdENvbGxlY3Q7Ci0gICAgICAgIHNpemVfdCBtX3NpemVBZnRlckxhc3RG
dWxsQ29sbGVjdDsKLSAgICAgICAgc2l6ZV90IG1fc2l6ZUJlZm9yZUxhc3RGdWxsQ29sbGVjdDsK
LSAgICAgICAgc2l6ZV90IG1fc2l6ZUFmdGVyTGFzdEVkZW5Db2xsZWN0OwotICAgICAgICBzaXpl
X3QgbV9zaXplQmVmb3JlTGFzdEVkZW5Db2xsZWN0OwotCi0gICAgICAgIHNpemVfdCBtX2J5dGVz
QWxsb2NhdGVkVGhpc0N5Y2xlOwotICAgICAgICBzaXplX3QgbV9ieXRlc0FiYW5kb25lZFNpbmNl
TGFzdEZ1bGxDb2xsZWN0OwotICAgICAgICBzaXplX3QgbV9tYXhFZGVuU2l6ZTsKLSAgICAgICAg
c2l6ZV90IG1fbWF4SGVhcFNpemU7Ci0gICAgICAgIGJvb2wgbV9zaG91bGREb0Z1bGxDb2xsZWN0
aW9uOwotICAgICAgICBzaXplX3QgbV90b3RhbEJ5dGVzVmlzaXRlZDsKLSAgICAgICAgc2l6ZV90
IG1fdG90YWxCeXRlc0NvcGllZDsKLSAgICAgICAgCi0gICAgICAgIEhlYXBPcGVyYXRpb24gbV9v
cGVyYXRpb25JblByb2dyZXNzOwotICAgICAgICBCbG9ja0FsbG9jYXRvciBtX2Jsb2NrQWxsb2Nh
dG9yOwotICAgICAgICBTdHJ1Y3R1cmVJRFRhYmxlIG1fc3RydWN0dXJlSURUYWJsZTsKLSAgICAg
ICAgTWFya2VkU3BhY2UgbV9vYmplY3RTcGFjZTsKLSAgICAgICAgQ29waWVkU3BhY2UgbV9zdG9y
YWdlU3BhY2U7Ci0gICAgICAgIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PEFycmF5QnVmZmVyPiBt
X2FycmF5QnVmZmVyczsKLSAgICAgICAgc2l6ZV90IG1fZXh0cmFNZW1vcnlVc2FnZTsKLQotICAg
ICAgICBIYXNoU2V0PGNvbnN0IEpTQ2VsbCo+IG1fY29weWluZ1JlbWVtYmVyZWRTZXQ7Ci0KLSAg
ICAgICAgUHJvdGVjdENvdW50U2V0IG1fcHJvdGVjdGVkVmFsdWVzOwotICAgICAgICBWZWN0b3I8
VmVjdG9yPFZhbHVlU3RyaW5nUGFpciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+Kj4gbV90ZW1w
U29ydGluZ1ZlY3RvcnM7Ci0gICAgICAgIE93blB0cjxIYXNoU2V0PE1hcmtlZEFyZ3VtZW50QnVm
ZmVyKj4+IG1fbWFya0xpc3RTZXQ7Ci0KLSAgICAgICAgTWFjaGluZVRocmVhZHMgbV9tYWNoaW5l
VGhyZWFkczsKLSAgICAgICAgCi0gICAgICAgIEdDVGhyZWFkU2hhcmVkRGF0YSBtX3NoYXJlZERh
dGE7Ci0gICAgICAgIFNsb3RWaXNpdG9yIG1fc2xvdFZpc2l0b3I7Ci0gICAgICAgIENvcHlWaXNp
dG9yIG1fY29weVZpc2l0b3I7Ci0KLSAgICAgICAgSGFuZGxlU2V0IG1faGFuZGxlU2V0OwotICAg
ICAgICBIYW5kbGVTdGFjayBtX2hhbmRsZVN0YWNrOwotICAgICAgICBDb2RlQmxvY2tTZXQgbV9j
b2RlQmxvY2tzOwotICAgICAgICBKSVRTdHViUm91dGluZVNldCBtX2ppdFN0dWJSb3V0aW5lczsK
LSAgICAgICAgRmluYWxpemVyT3duZXIgbV9maW5hbGl6ZXJPd25lcjsKLSAgICAgICAgCi0gICAg
ICAgIGJvb2wgbV9pc1NhZmVUb0NvbGxlY3Q7Ci0KLSAgICAgICAgV3JpdGVCYXJyaWVyQnVmZmVy
IG1fd3JpdGVCYXJyaWVyQnVmZmVyOwotCi0gICAgICAgIFZNKiBtX3ZtOwotICAgICAgICBkb3Vi
bGUgbV9sYXN0RnVsbEdDTGVuZ3RoOwotICAgICAgICBkb3VibGUgbV9sYXN0RWRlbkdDTGVuZ3Ro
OwotICAgICAgICBkb3VibGUgbV9sYXN0Q29kZURpc2NhcmRUaW1lOwotCi0gICAgICAgIERvdWJs
eUxpbmtlZExpc3Q8RXhlY3V0YWJsZUJhc2U+IG1fY29tcGlsZWRDb2RlOwotICAgICAgICAKLSAg
ICAgICAgUmVmUHRyPEdDQWN0aXZpdHlDYWxsYmFjaz4gbV9mdWxsQWN0aXZpdHlDYWxsYmFjazsK
LSAgICAgICAgUmVmUHRyPEdDQWN0aXZpdHlDYWxsYmFjaz4gbV9lZGVuQWN0aXZpdHlDYWxsYmFj
azsKLSAgICAgICAgT3duUHRyPEluY3JlbWVudGFsU3dlZXBlcj4gbV9zd2VlcGVyOwotICAgICAg
ICBWZWN0b3I8TWFya2VkQmxvY2sqPiBtX2Jsb2NrU25hcHNob3Q7Ci0gICAgICAgIAotICAgICAg
ICB1bnNpZ25lZCBtX2RlZmVycmFsRGVwdGg7Ci0gICAgfTsKK3ByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIENvZGVCbG9jazsKKyAgICBmcmllbmQgY2xhc3MgQ29waWVkQmxvY2s7CisgICAgZnJp
ZW5kIGNsYXNzIERlZmVyR0M7CisgICAgZnJpZW5kIGNsYXNzIERlZmVyR0NGb3JBV2hpbGU7Cisg
ICAgZnJpZW5kIGNsYXNzIERlbGF5ZWRSZWxlYXNlU2NvcGU7CisgICAgZnJpZW5kIGNsYXNzIEdD
QXdhcmVKSVRTdHViUm91dGluZTsKKyAgICBmcmllbmQgY2xhc3MgSGFuZGxlU2V0OworICAgIGZy
aWVuZCBjbGFzcyBKSVRTdHViUm91dGluZTsKKyAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRz
RXh0cmFjdG9yOworICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRTcGFjZTsKKyAgICBmcmllbmQgY2xh
c3MgTWFya2VkQWxsb2NhdG9yOworICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9jazsKKyAgICBm
cmllbmQgY2xhc3MgQ29waWVkU3BhY2U7CisgICAgZnJpZW5kIGNsYXNzIENvcHlWaXNpdG9yOwor
ICAgIGZyaWVuZCBjbGFzcyBSZWN1cnNpdmVBbGxvY2F0aW9uU2NvcGU7CisgICAgZnJpZW5kIGNs
YXNzIFNsb3RWaXNpdG9yOworICAgIGZyaWVuZCBjbGFzcyBTdXBlclJlZ2lvbjsKKyAgICBmcmll
bmQgY2xhc3MgSW5jcmVtZW50YWxTd2VlcGVyOworICAgIGZyaWVuZCBjbGFzcyBIZWFwU3RhdGlz
dGljczsKKyAgICBmcmllbmQgY2xhc3MgVk07CisgICAgZnJpZW5kIGNsYXNzIFdlYWtTZXQ7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJpZW5kIHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJik7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJpZW5kIHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFw
Jiwgc2l6ZV90KTsKKworICAgIHZvaWQqIGFsbG9jYXRlV2l0aEltbW9ydGFsU3RydWN0dXJlRGVz
dHJ1Y3RvcihzaXplX3QpOyAvLyBGb3IgdXNlIHdpdGggc3BlY2lhbCBvYmplY3RzIHdob3NlIFN0
cnVjdHVyZXMgbmV2ZXIgZGllLgorICAgIHZvaWQqIGFsbG9jYXRlV2l0aE5vcm1hbERlc3RydWN0
b3Ioc2l6ZV90KTsgLy8gRm9yIHVzZSB3aXRoIG9iamVjdHMgdGhhdCBpbmhlcml0IGRpcmVjdGx5
IG9yIGluZGlyZWN0bHkgZnJvbSBKU0Rlc3RydWN0aWJsZU9iamVjdC4KKyAgICB2b2lkKiBhbGxv
Y2F0ZVdpdGhvdXREZXN0cnVjdG9yKHNpemVfdCk7IC8vIEZvciB1c2Ugd2l0aCBvYmplY3RzIHdp
dGhvdXQgZGVzdHJ1Y3RvcnMuCiAKLSAgICBzdHJ1Y3QgTWFya2VkQmxvY2tTbmFwc2hvdEZ1bmN0
b3IgOiBwdWJsaWMgTWFya2VkQmxvY2s6OlZvaWRGdW5jdG9yIHsKLSAgICAgICAgTWFya2VkQmxv
Y2tTbmFwc2hvdEZ1bmN0b3IoVmVjdG9yPE1hcmtlZEJsb2NrKj4mIGJsb2NrcykgCi0gICAgICAg
ICAgICA6IG1faW5kZXgoMCkgCi0gICAgICAgICAgICAsIG1fYmxvY2tzKGJsb2NrcykKLSAgICAg
ICAgewotICAgICAgICB9Ci0gICAgCi0gICAgICAgIHZvaWQgb3BlcmF0b3IoKShNYXJrZWRCbG9j
ayogYmxvY2spIHsgbV9ibG9ja3NbbV9pbmRleCsrXSA9IGJsb2NrOyB9CisgICAgc3RhdGljIGNv
bnN0IHNpemVfdCBtaW5FeHRyYUNvc3QgPSAyNTY7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBt
YXhFeHRyYUNvc3QgPSAxMDI0ICogMTAyNDsKICAgICAKLSAgICAgICAgc2l6ZV90IG1faW5kZXg7
Ci0gICAgICAgIFZlY3RvcjxNYXJrZWRCbG9jayo+JiBtX2Jsb2NrczsKKyAgICBjbGFzcyBGaW5h
bGl6ZXJPd25lciA6IHB1YmxpYyBXZWFrSGFuZGxlT3duZXIgeworICAgICAgICB2aXJ0dWFsIHZv
aWQgZmluYWxpemUoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0KSBvdmVycmlkZTsKICAg
ICB9OwogCi0gICAgaW5saW5lIGJvb2wgSGVhcDo6c2hvdWxkQ29sbGVjdCgpCi0gICAgewotICAg
ICAgICBpZiAoaXNEZWZlcnJlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBpZiAoT3B0aW9uczo6Z2NNYXhIZWFwU2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIG1fYnl0
ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPiBPcHRpb25zOjpnY01heEhlYXBTaXplKCkgJiYgbV9pc1Nh
ZmVUb0NvbGxlY3QgJiYgbV9vcGVyYXRpb25JblByb2dyZXNzID09IE5vT3BlcmF0aW9uOwotICAg
ICAgICByZXR1cm4gbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSA+IG1fbWF4RWRlblNpemUgJiYg
bV9pc1NhZmVUb0NvbGxlY3QgJiYgbV9vcGVyYXRpb25JblByb2dyZXNzID09IE5vT3BlcmF0aW9u
OwotICAgIH0KLQotICAgIGJvb2wgSGVhcDo6aXNCdXN5KCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgIT0gTm9PcGVyYXRpb247Ci0gICAgfQotCi0gICAgYm9v
bCBIZWFwOjppc0NvbGxlY3RpbmcoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3BlcmF0aW9u
SW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVjdGlvbiB8fCBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0g
RWRlbkNvbGxlY3Rpb247Ci0gICAgfQotCi0gICAgaW5saW5lIEhlYXAqIEhlYXA6OmhlYXAoY29u
c3QgSlNDZWxsKiBjZWxsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE1hcmtlZEJsb2NrOjpibG9j
a0ZvcihjZWxsKS0+aGVhcCgpOwotICAgIH0KLQotICAgIGlubGluZSBIZWFwKiBIZWFwOjpoZWFw
KGNvbnN0IEpTVmFsdWUgdikKLSAgICB7Ci0gICAgICAgIGlmICghdi5pc0NlbGwoKSkKLSAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gaGVhcCh2LmFzQ2VsbCgpKTsKLSAgICB9
Ci0KLSAgICBpbmxpbmUgYm9vbCBIZWFwOjppc0xpdmUoY29uc3Qgdm9pZCogY2VsbCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmlzTGl2ZUNlbGwo
Y2VsbCk7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSGVhcDo6aXNNYXJrZWQoY29uc3Qgdm9p
ZCogY2VsbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2Vs
bCktPmlzTWFya2VkKGNlbGwpOwotICAgIH0KLQotICAgIGlubGluZSBib29sIEhlYXA6OnRlc3RB
bmRTZXRNYXJrZWQoY29uc3Qgdm9pZCogY2VsbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBNYXJr
ZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPnRlc3RBbmRTZXRNYXJrZWQoY2VsbCk7Ci0gICAgfQot
Ci0gICAgaW5saW5lIHZvaWQgSGVhcDo6c2V0TWFya2VkKGNvbnN0IHZvaWQqIGNlbGwpCi0gICAg
ewotICAgICAgICBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPnNldE1hcmtlZChjZWxsKTsK
LSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKQot
ICAgIHsKLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpIHx8IEVOQUJMRShHR0Mp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2Vu
ZGlmCi0gICAgfQorICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNWYWxpZEFsbG9jYXRpb24o
c2l6ZV90KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5Q29z
dFNsb3dDYXNlKHNpemVfdCk7CiAKLSAgICBpbmxpbmUgdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXIo
Y29uc3QgSlNDZWxsKiBmcm9tLCBKU1ZhbHVlIHRvKQotICAgIHsKLSNpZiBFTkFCTEUoV1JJVEVf
QkFSUklFUl9QUk9GSUxJTkcpCi0gICAgICAgIFdyaXRlQmFycmllckNvdW50ZXJzOjpjb3VudFdy
aXRlQmFycmllcigpOwotI2VuZGlmCi0gICAgICAgIGlmICghdG8uaXNDZWxsKCkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIHdyaXRlQmFycmllcihmcm9tLCB0by5hc0NlbGwoKSk7Ci0g
ICAgfQotCi0gICAgaW5saW5lIHZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVf
dCBjb3N0KQotICAgIHsKLSAgICAgICAgaWYgKGNvc3QgPiBtaW5FeHRyYUNvc3QpIAotICAgICAg
ICAgICAgcmVwb3J0RXh0cmFNZW1vcnlDb3N0U2xvd0Nhc2UoY29zdCk7Ci0gICAgfQotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVy
blR5cGUgSGVhcDo6Zm9yRWFjaFByb3RlY3RlZENlbGwoRnVuY3RvciYgZnVuY3RvcikKLSAgICB7
Ci0gICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fcHJvdGVjdGVkVmFsdWVzKQotICAgICAgICAg
ICAgZnVuY3RvcihwYWlyLmtleSk7Ci0gICAgICAgIG1faGFuZGxlU2V0LmZvckVhY2hTdHJvbmdI
YW5kbGUoZnVuY3RvciwgbV9wcm90ZWN0ZWRWYWx1ZXMpOwotCi0gICAgICAgIHJldHVybiBmdW5j
dG9yLnJldHVyblZhbHVlKCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4gaW5saW5lIHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgSGVhcDo6Zm9yRWFjaFByb3Rl
Y3RlZENlbGwoKQotICAgIHsKLSAgICAgICAgRnVuY3RvciBmdW5jdG9yOwotICAgICAgICByZXR1
cm4gZm9yRWFjaFByb3RlY3RlZENlbGwoZnVuY3Rvcik7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgSGVhcDo6Zm9yRWFjaENvZGVCbG9jayhGdW5j
dG9yJiBmdW5jdG9yKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY29kZUJsb2Nrcy5pdGVyYXRl
PEZ1bmN0b3I+KGZ1bmN0b3IpOwotICAgIH0KLQotICAgIGlubGluZSB2b2lkKiBIZWFwOjphbGxv
Y2F0ZVdpdGhOb3JtYWxEZXN0cnVjdG9yKHNpemVfdCBieXRlcykKLSAgICB7Ci0jaWYgRU5BQkxF
KEFMTE9DQVRJT05fTE9HR0lORykKLSAgICAgICAgZGF0YUxvZ0YoIkpTQyBHQyBhbGxvY2F0aW5n
ICVsdSBieXRlcyB3aXRoIG5vcm1hbCBkZXN0cnVjdG9yLlxuIiwgYnl0ZXMpOwotI2VuZGlmCi0g
ICAgICAgIEFTU0VSVChpc1ZhbGlkQWxsb2NhdGlvbihieXRlcykpOwotICAgICAgICByZXR1cm4g
bV9vYmplY3RTcGFjZS5hbGxvY2F0ZVdpdGhOb3JtYWxEZXN0cnVjdG9yKGJ5dGVzKTsKLSAgICB9
Ci0gICAgCi0gICAgaW5saW5lIHZvaWQqIEhlYXA6OmFsbG9jYXRlV2l0aEltbW9ydGFsU3RydWN0
dXJlRGVzdHJ1Y3RvcihzaXplX3QgYnl0ZXMpCi0gICAgewotI2lmIEVOQUJMRShBTExPQ0FUSU9O
X0xPR0dJTkcpCi0gICAgICAgIGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGluZyAlbHUgYnl0ZXMg
d2l0aCBpbW1vcnRhbCBzdHJ1Y3R1cmUgZGVzdHJ1Y3Rvci5cbiIsIGJ5dGVzKTsKLSNlbmRpZgot
ICAgICAgICBBU1NFUlQoaXNWYWxpZEFsbG9jYXRpb24oYnl0ZXMpKTsKLSAgICAgICAgcmV0dXJu
IG1fb2JqZWN0U3BhY2UuYWxsb2NhdGVXaXRoSW1tb3J0YWxTdHJ1Y3R1cmVEZXN0cnVjdG9yKGJ5
dGVzKTsKLSAgICB9Ci0gICAgCi0gICAgaW5saW5lIHZvaWQqIEhlYXA6OmFsbG9jYXRlV2l0aG91
dERlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKQotICAgIHsKLSNpZiBFTkFCTEUoQUxMT0NBVElPTl9M
T0dHSU5HKQotICAgICAgICBkYXRhTG9nRigiSlNDIEdDIGFsbG9jYXRpbmcgJWx1IGJ5dGVzIHdp
dGhvdXQgZGVzdHJ1Y3Rvci5cbiIsIGJ5dGVzKTsKLSNlbmRpZgotICAgICAgICBBU1NFUlQoaXNW
YWxpZEFsbG9jYXRpb24oYnl0ZXMpKTsKLSAgICAgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuYWxs
b2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihieXRlcyk7Ci0gICAgfQotICAgCi0gICAgaW5saW5lIENo
ZWNrZWRCb29sZWFuIEhlYXA6OnRyeUFsbG9jYXRlU3RvcmFnZShKU0NlbGwqIGludGVuZGVkT3du
ZXIsIHNpemVfdCBieXRlcywgdm9pZCoqIG91dFB0cikKLSAgICB7Ci0gICAgICAgIENoZWNrZWRC
b29sZWFuIHJlc3VsdCA9IG1fc3RvcmFnZVNwYWNlLnRyeUFsbG9jYXRlKGJ5dGVzLCBvdXRQdHIp
OwotI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCi0gICAgICAgIGRhdGFMb2dGKCJKU0Mg
R0MgYWxsb2NhdGluZyAlbHUgYnl0ZXMgb2Ygc3RvcmFnZSBmb3IgJXA6ICVwLlxuIiwgYnl0ZXMs
IGludGVuZGVkT3duZXIsICpvdXRQdHIpOwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGlu
dGVuZGVkT3duZXIpOwotI2VuZGlmCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAg
IAotICAgIGlubGluZSBDaGVja2VkQm9vbGVhbiBIZWFwOjp0cnlSZWFsbG9jYXRlU3RvcmFnZShK
U0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqKiBwdHIsIHNpemVfdCBvbGRTaXplLCBzaXplX3Qg
bmV3U2l6ZSkKLSAgICB7Ci0jaWYgRU5BQkxFKEFMTE9DQVRJT05fTE9HR0lORykKLSAgICAgICAg
dm9pZCogb2xkUHRyID0gKnB0cjsKLSNlbmRpZgotICAgICAgICBDaGVja2VkQm9vbGVhbiByZXN1
bHQgPSBtX3N0b3JhZ2VTcGFjZS50cnlSZWFsbG9jYXRlKHB0ciwgb2xkU2l6ZSwgbmV3U2l6ZSk7
Ci0jaWYgRU5BQkxFKEFMTE9DQVRJT05fTE9HR0lORykKLSAgICAgICAgZGF0YUxvZ0YoIkpTQyBH
QyByZWFsbG9jYXRpbmcgJWx1IC0+ICVsdSBieXRlcyBvZiBzdG9yYWdlIGZvciAlcDogJXAgLT4g
JXAuXG4iLCBvbGRTaXplLCBuZXdTaXplLCBpbnRlbmRlZE93bmVyLCBvbGRQdHIsICpwdHIpOwot
I2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGludGVuZGVkT3duZXIpOwotI2VuZGlmCi0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgIHZvaWQgc3VzcGVuZENvbXBpbGVyVGhyZWFk
cygpOworICAgIHZvaWQgd2lsbFN0YXJ0Q29sbGVjdGlvbihIZWFwT3BlcmF0aW9uIGNvbGxlY3Rp
b25UeXBlKTsKKyAgICB2b2lkIGRlbGV0ZU9sZENvZGUoZG91YmxlIGdjU3RhcnRUaW1lKTsKKyAg
ICB2b2lkIGZsdXNoT2xkU3RydWN0dXJlSURUYWJsZXMoKTsKKyAgICB2b2lkIGZsdXNoV3JpdGVC
YXJyaWVyQnVmZmVyKCk7CisgICAgdm9pZCBzdG9wQWxsb2NhdGlvbigpOworCisgICAgdm9pZCBt
YXJrUm9vdHMoKTsKKyAgICB2b2lkIGdhdGhlclN0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMm
LCB2b2lkKiogZHVtbXkpOworICAgIHZvaWQgZ2F0aGVySlNTdGFja1Jvb3RzKENvbnNlcnZhdGl2
ZVJvb3RzJik7CisgICAgdm9pZCBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoQ29uc2VydmF0aXZl
Um9vdHMmKTsKKyAgICB2b2lkIGNsZWFyTGl2ZW5lc3NEYXRhKCk7CisgICAgdm9pZCB2aXNpdFNt
YWxsU3RyaW5ncygpOworICAgIHZvaWQgdmlzaXRDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRp
dmVSb290cyYpOworICAgIHZvaWQgdmlzaXRDb21waWxlcldvcmtsaXN0cygpOworICAgIHZvaWQg
dmlzaXRQcm90ZWN0ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRU
ZW1wU29ydFZlY3RvcnMoSGVhcFJvb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFyZ3VtZW50
QnVmZmVycyhIZWFwUm9vdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0RXhjZXB0aW9uKEhlYXBS
b290VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRTdHJvbmdIYW5kbGVzKEhlYXBSb290VmlzaXRv
ciYpOworICAgIHZvaWQgdmlzaXRIYW5kbGVTdGFjayhIZWFwUm9vdFZpc2l0b3ImKTsKKyAgICB2
b2lkIHRyYWNlQ29kZUJsb2Nrc0FuZEpJVFN0dWJSb3V0aW5lcygpOworICAgIHZvaWQgY29udmVy
Z2UoKTsKKyAgICB2b2lkIHZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7CisgICAg
dm9pZCBjbGVhclJlbWVtYmVyZWRTZXQoVmVjdG9yPGNvbnN0IEpTQ2VsbCo+Jik7CisgICAgdm9p
ZCB1cGRhdGVPYmplY3RDb3VudHMoKTsKKyAgICB2b2lkIHJlc2V0VmlzaXRvcnMoKTsKKworICAg
IHZvaWQgcmVhcFdlYWtIYW5kbGVzKCk7CisgICAgdm9pZCBzd2VlcEFycmF5QnVmZmVycygpOwor
ICAgIHZvaWQgc25hcHNob3RNYXJrZWRTcGFjZSgpOworICAgIHZvaWQgZGVsZXRlU291cmNlUHJv
dmlkZXJDYWNoZXMoKTsKKyAgICB2b2lkIG5vdGlmeUluY3JlbWVudGFsU3dlZXBlcigpOworICAg
IHZvaWQgcmVtZW1iZXJDdXJyZW50bHlFeGVjdXRpbmdDb2RlQmxvY2tzKCk7CisgICAgdm9pZCBy
ZXNldEFsbG9jYXRvcnMoKTsKKyAgICB2b2lkIGNvcHlCYWNraW5nU3RvcmVzKCk7CisgICAgdm9p
ZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKKyAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25h
bEZpbmFsaXplcnMoKTsKKyAgICB2b2lkIGRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKCk7Cisg
ICAgdm9pZCB1cGRhdGVBbGxvY2F0aW9uTGltaXRzKCk7CisgICAgdm9pZCBkaWRGaW5pc2hDb2xs
ZWN0aW9uKGRvdWJsZSBnY1N0YXJ0VGltZSk7CisgICAgdm9pZCByZXN1bWVDb21waWxlclRocmVh
ZHMoKTsKKyAgICB2b2lkIHpvbWJpZnlEZWFkT2JqZWN0cygpOworICAgIHZvaWQgbWFya0RlYWRP
YmplY3RzKCk7CiAKLSAgICBpbmxpbmUgdm9pZCBIZWFwOjphc2NyaWJlT3duZXIoSlNDZWxsKiBp
bnRlbmRlZE93bmVyLCB2b2lkKiBzdG9yYWdlKQotICAgIHsKLSNpZiBFTkFCTEUoQUxMT0NBVElP
Tl9MT0dHSU5HKQotICAgICAgICBkYXRhTG9nRigiSlNDIEdDIGFzY3JpYmluZyAlcCBhcyBvd25l
ciBvZiBzdG9yYWdlICVwLlxuIiwgaW50ZW5kZWRPd25lciwgc3RvcmFnZSk7Ci0jZWxzZQotICAg
ICAgICBVTlVTRURfUEFSQU0oaW50ZW5kZWRPd25lcik7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShz
dG9yYWdlKTsKLSNlbmRpZgotICAgIH0KKyAgICBib29sIHNob3VsZERvRnVsbENvbGxlY3Rpb24o
SGVhcE9wZXJhdGlvbiByZXF1ZXN0ZWRDb2xsZWN0aW9uVHlwZSkgY29uc3Q7CisgICAgc2l6ZV90
IHNpemVBZnRlckNvbGxlY3QoKTsKIAotICAgIGlubGluZSBCbG9ja0FsbG9jYXRvciYgSGVhcDo6
YmxvY2tBbGxvY2F0b3IoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYmxvY2tBbGxvY2F0b3I7
Ci0gICAgfQorICAgIEpTU3RhY2smIHN0YWNrKCk7CisgICAgCisgICAgdm9pZCBpbmNyZW1lbnRE
ZWZlcnJhbERlcHRoKCk7CisgICAgdm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7CisgICAg
dm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCgpOworCisgICAgY29uc3Qg
SGVhcFR5cGUgbV9oZWFwVHlwZTsKKyAgICBjb25zdCBzaXplX3QgbV9yYW1TaXplOworICAgIGNv
bnN0IHNpemVfdCBtX21pbkJ5dGVzUGVyQ3ljbGU7CisgICAgc2l6ZV90IG1fc2l6ZUFmdGVyTGFz
dENvbGxlY3Q7CisgICAgc2l6ZV90IG1fc2l6ZUFmdGVyTGFzdEZ1bGxDb2xsZWN0OworICAgIHNp
emVfdCBtX3NpemVCZWZvcmVMYXN0RnVsbENvbGxlY3Q7CisgICAgc2l6ZV90IG1fc2l6ZUFmdGVy
TGFzdEVkZW5Db2xsZWN0OworICAgIHNpemVfdCBtX3NpemVCZWZvcmVMYXN0RWRlbkNvbGxlY3Q7
CisKKyAgICBzaXplX3QgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZTsKKyAgICBzaXplX3QgbV9i
eXRlc0FiYW5kb25lZFNpbmNlTGFzdEZ1bGxDb2xsZWN0OworICAgIHNpemVfdCBtX21heEVkZW5T
aXplOworICAgIHNpemVfdCBtX21heEhlYXBTaXplOworICAgIGJvb2wgbV9zaG91bGREb0Z1bGxD
b2xsZWN0aW9uOworICAgIHNpemVfdCBtX3RvdGFsQnl0ZXNWaXNpdGVkOworICAgIHNpemVfdCBt
X3RvdGFsQnl0ZXNDb3BpZWQ7CisgICAgCisgICAgSGVhcE9wZXJhdGlvbiBtX29wZXJhdGlvbklu
UHJvZ3Jlc3M7CisgICAgQmxvY2tBbGxvY2F0b3IgbV9ibG9ja0FsbG9jYXRvcjsKKyAgICBTdHJ1
Y3R1cmVJRFRhYmxlIG1fc3RydWN0dXJlSURUYWJsZTsKKyAgICBNYXJrZWRTcGFjZSBtX29iamVj
dFNwYWNlOworICAgIENvcGllZFNwYWNlIG1fc3RvcmFnZVNwYWNlOworICAgIEdDSW5jb21pbmdS
ZWZDb3VudGVkU2V0PEFycmF5QnVmZmVyPiBtX2FycmF5QnVmZmVyczsKKyAgICBzaXplX3QgbV9l
eHRyYU1lbW9yeVVzYWdlOworCisgICAgSGFzaFNldDxjb25zdCBKU0NlbGwqPiBtX2NvcHlpbmdS
ZW1lbWJlcmVkU2V0OworCisgICAgUHJvdGVjdENvdW50U2V0IG1fcHJvdGVjdGVkVmFsdWVzOwor
ICAgIFZlY3RvcjxWZWN0b3I8VmFsdWVTdHJpbmdQYWlyLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxv
dz4qPiBtX3RlbXBTb3J0aW5nVmVjdG9yczsKKyAgICBPd25QdHI8SGFzaFNldDxNYXJrZWRBcmd1
bWVudEJ1ZmZlcio+PiBtX21hcmtMaXN0U2V0OwogCi0jaWYgVVNFKENGKQotICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPgotICAgIGlubGluZSB2b2lkIEhlYXA6OnJlbGVhc2VTb29uKFJldGFpblB0
cjxUPiYmIG9iamVjdCkKLSAgICB7Ci0gICAgICAgIG1fb2JqZWN0U3BhY2UucmVsZWFzZVNvb24o
c3RkOjptb3ZlKG9iamVjdCkpOwotICAgIH0KLSNlbmRpZgorICAgIE1hY2hpbmVUaHJlYWRzIG1f
bWFjaGluZVRocmVhZHM7CisgICAgCisgICAgR0NUaHJlYWRTaGFyZWREYXRhIG1fc2hhcmVkRGF0
YTsKKyAgICBTbG90VmlzaXRvciBtX3Nsb3RWaXNpdG9yOworICAgIENvcHlWaXNpdG9yIG1fY29w
eVZpc2l0b3I7CisKKyAgICBIYW5kbGVTZXQgbV9oYW5kbGVTZXQ7CisgICAgSGFuZGxlU3RhY2sg
bV9oYW5kbGVTdGFjazsKKyAgICBDb2RlQmxvY2tTZXQgbV9jb2RlQmxvY2tzOworICAgIEpJVFN0
dWJSb3V0aW5lU2V0IG1faml0U3R1YlJvdXRpbmVzOworICAgIEZpbmFsaXplck93bmVyIG1fZmlu
YWxpemVyT3duZXI7CisgICAgCisgICAgYm9vbCBtX2lzU2FmZVRvQ29sbGVjdDsKKworICAgIFdy
aXRlQmFycmllckJ1ZmZlciBtX3dyaXRlQmFycmllckJ1ZmZlcjsKIAorICAgIFZNKiBtX3ZtOwor
ICAgIGRvdWJsZSBtX2xhc3RGdWxsR0NMZW5ndGg7CisgICAgZG91YmxlIG1fbGFzdEVkZW5HQ0xl
bmd0aDsKKyAgICBkb3VibGUgbV9sYXN0Q29kZURpc2NhcmRUaW1lOwogCi1pbmxpbmUgdm9pZCBI
ZWFwOjppbmNyZW1lbnREZWZlcnJhbERlcHRoKCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChtX2Rl
ZmVycmFsRGVwdGggPCAxMDApOyAvLyBTYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIHRoaXMgZG9l
c24ndCBnZXQgcmlkaWN1bG91cy4KLSAgICBtX2RlZmVycmFsRGVwdGgrKzsKLX0KLQotaW5saW5l
IHZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpCi17Ci0gICAgUkVMRUFTRV9BU1NF
UlQobV9kZWZlcnJhbERlcHRoID49IDEpOwotICAgIG1fZGVmZXJyYWxEZXB0aC0tOwotfQotCi1p
bmxpbmUgYm9vbCBIZWFwOjpjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCkKLXsKLSAgICBpZiAo
aXNEZWZlcnJlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXNob3VsZENv
bGxlY3QoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29sbGVjdCgpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi1pbmxpbmUgdm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRo
QW5kR0NJZk5lZWRlZCgpCi17Ci0gICAgZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOwotICAgIGNv
bGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKLX0KKyAgICBEb3VibHlMaW5rZWRMaXN0PEV4ZWN1
dGFibGVCYXNlPiBtX2NvbXBpbGVkQ29kZTsKKyAgICAKKyAgICBSZWZQdHI8R0NBY3Rpdml0eUNh
bGxiYWNrPiBtX2Z1bGxBY3Rpdml0eUNhbGxiYWNrOworICAgIFJlZlB0cjxHQ0FjdGl2aXR5Q2Fs
bGJhY2s+IG1fZWRlbkFjdGl2aXR5Q2FsbGJhY2s7CisgICAgT3duUHRyPEluY3JlbWVudGFsU3dl
ZXBlcj4gbV9zd2VlcGVyOworICAgIFZlY3RvcjxNYXJrZWRCbG9jayo+IG1fYmxvY2tTbmFwc2hv
dDsKKyAgICAKKyAgICB1bnNpZ25lZCBtX2RlZmVycmFsRGVwdGg7Cit9OwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
SGVhcElubGluZXNfaAorI2RlZmluZSBIZWFwSW5saW5lc19oCisKKyNpbmNsdWRlICJIZWFwLmgi
CisjaW5jbHVkZSAiSlNDZWxsLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgYm9vbCBI
ZWFwOjpzaG91bGRDb2xsZWN0KCkKK3sKKyAgICBpZiAoaXNEZWZlcnJlZCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKE9wdGlvbnM6OmdjTWF4SGVhcFNpemUoKSkKKyAgICAgICAg
cmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPiBPcHRpb25zOjpnY01heEhlYXBTaXpl
KCkgJiYgbV9pc1NhZmVUb0NvbGxlY3QgJiYgbV9vcGVyYXRpb25JblByb2dyZXNzID09IE5vT3Bl
cmF0aW9uOworICAgIHJldHVybiBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlID4gbV9tYXhFZGVu
U2l6ZSAmJiBtX2lzU2FmZVRvQ29sbGVjdCAmJiBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9P
cGVyYXRpb247Cit9CisKK2lubGluZSBib29sIEhlYXA6OmlzQnVzeSgpCit7CisgICAgcmV0dXJu
IG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyAhPSBOb09wZXJhdGlvbjsKK30KKworaW5saW5lIGJvb2wg
SGVhcDo6aXNDb2xsZWN0aW5nKCkKK3sKKyAgICByZXR1cm4gbV9vcGVyYXRpb25JblByb2dyZXNz
ID09IEZ1bGxDb2xsZWN0aW9uIHx8IG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBFZGVuQ29sbGVj
dGlvbjsKK30KKworaW5saW5lIEhlYXAqIEhlYXA6OmhlYXAoY29uc3QgSlNDZWxsKiBjZWxsKQor
eworICAgIHJldHVybiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmhlYXAoKTsKK30KKwor
aW5saW5lIEhlYXAqIEhlYXA6OmhlYXAoY29uc3QgSlNWYWx1ZSB2KQoreworICAgIGlmICghdi5p
c0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGhlYXAodi5hc0NlbGwoKSk7
Cit9CisKK2lubGluZSBib29sIEhlYXA6OmlzTGl2ZShjb25zdCB2b2lkKiBjZWxsKQoreworICAg
IHJldHVybiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmlzTGl2ZUNlbGwoY2VsbCk7Cit9
CisKK2lubGluZSBib29sIEhlYXA6OmlzSW5SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2VsbCogY2Vs
bCkgY29uc3QKK3sKKyAgICBBU1NFUlQoY2VsbCk7CisgICAgQVNTRVJUKCFPcHRpb25zOjplbmFi
bGVDb25jdXJyZW50SklUKCkgfHwgIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CisgICAgcmV0dXJu
IE1hcmtlZEJsb2NrOjpibG9ja0ZvcihjZWxsKS0+aXNSZW1lbWJlcmVkKGNlbGwpOworfQorCitp
bmxpbmUgYm9vbCBIZWFwOjppc01hcmtlZChjb25zdCB2b2lkKiBjZWxsKQoreworICAgIHJldHVy
biBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmlzTWFya2VkKGNlbGwpOworfQorCitpbmxp
bmUgYm9vbCBIZWFwOjp0ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqIGNlbGwpCit7CisgICAg
cmV0dXJuIE1hcmtlZEJsb2NrOjpibG9ja0ZvcihjZWxsKS0+dGVzdEFuZFNldE1hcmtlZChjZWxs
KTsKK30KKworaW5saW5lIHZvaWQgSGVhcDo6c2V0TWFya2VkKGNvbnN0IHZvaWQqIGNlbGwpCit7
CisgICAgTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNlbGwpLT5zZXRNYXJrZWQoY2VsbCk7Cit9CisK
K2lubGluZSBib29sIEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpCit7CisjaWYgRU5BQkxF
KFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKSB8fCBFTkFCTEUoR0dDKQorICAgIHJldHVybiB0cnVl
OworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworaW5saW5lIHZvaWQgSGVh
cDo6d3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCogZnJvbSwgSlNWYWx1ZSB0bykKK3sKKyNpZiBF
TkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCisgICAgV3JpdGVCYXJyaWVyQ291bnRlcnM6
OmNvdW50V3JpdGVCYXJyaWVyKCk7CisjZW5kaWYKKyAgICBpZiAoIXRvLmlzQ2VsbCgpKQorICAg
ICAgICByZXR1cm47CisgICAgd3JpdGVCYXJyaWVyKGZyb20sIHRvLmFzQ2VsbCgpKTsKK30KKwor
aW5saW5lIHZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVfdCBjb3N0KQorewor
ICAgIGlmIChjb3N0ID4gbWluRXh0cmFDb3N0KSAKKyAgICAgICAgcmVwb3J0RXh0cmFNZW1vcnlD
b3N0U2xvd0Nhc2UoY29zdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGlu
ZSB0eXBlbmFtZSBGdW5jdG9yOjpSZXR1cm5UeXBlIEhlYXA6OmZvckVhY2hQcm90ZWN0ZWRDZWxs
KEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm90ZWN0ZWRW
YWx1ZXMpCisgICAgICAgIGZ1bmN0b3IocGFpci5rZXkpOworICAgIG1faGFuZGxlU2V0LmZvckVh
Y2hTdHJvbmdIYW5kbGUoZnVuY3RvciwgbV9wcm90ZWN0ZWRWYWx1ZXMpOworCisgICAgcmV0dXJu
IGZ1bmN0b3IucmV0dXJuVmFsdWUoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4g
aW5saW5lIHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgSGVhcDo6Zm9yRWFjaFByb3RlY3Rl
ZENlbGwoKQoreworICAgIEZ1bmN0b3IgZnVuY3RvcjsKKyAgICByZXR1cm4gZm9yRWFjaFByb3Rl
Y3RlZENlbGwoZnVuY3Rvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGlu
ZSB2b2lkIEhlYXA6OmZvckVhY2hDb2RlQmxvY2soRnVuY3RvciYgZnVuY3RvcikKK3sKKyAgICBy
ZXR1cm4gbV9jb2RlQmxvY2tzLml0ZXJhdGU8RnVuY3Rvcj4oZnVuY3Rvcik7Cit9CisKK2lubGlu
ZSB2b2lkKiBIZWFwOjphbGxvY2F0ZVdpdGhOb3JtYWxEZXN0cnVjdG9yKHNpemVfdCBieXRlcykK
K3sKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgIGRhdGFMb2dGKCJKU0MgR0Mg
YWxsb2NhdGluZyAlbHUgYnl0ZXMgd2l0aCBub3JtYWwgZGVzdHJ1Y3Rvci5cbiIsIGJ5dGVzKTsK
KyNlbmRpZgorICAgIEFTU0VSVChpc1ZhbGlkQWxsb2NhdGlvbihieXRlcykpOworICAgIHJldHVy
biBtX29iamVjdFNwYWNlLmFsbG9jYXRlV2l0aE5vcm1hbERlc3RydWN0b3IoYnl0ZXMpOworfQor
CitpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVXaXRoSW1tb3J0YWxTdHJ1Y3R1cmVEZXN0cnVj
dG9yKHNpemVfdCBieXRlcykKK3sKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAg
IGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGluZyAlbHUgYnl0ZXMgd2l0aCBpbW1vcnRhbCBzdHJ1
Y3R1cmUgZGVzdHJ1Y3Rvci5cbiIsIGJ5dGVzKTsKKyNlbmRpZgorICAgIEFTU0VSVChpc1ZhbGlk
QWxsb2NhdGlvbihieXRlcykpOworICAgIHJldHVybiBtX29iamVjdFNwYWNlLmFsbG9jYXRlV2l0
aEltbW9ydGFsU3RydWN0dXJlRGVzdHJ1Y3RvcihieXRlcyk7Cit9CisKK2lubGluZSB2b2lkKiBI
ZWFwOjphbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKHNpemVfdCBieXRlcykKK3sKKyNpZiBFTkFC
TEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgIGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGluZyAl
bHUgYnl0ZXMgd2l0aG91dCBkZXN0cnVjdG9yLlxuIiwgYnl0ZXMpOworI2VuZGlmCisgICAgQVNT
RVJUKGlzVmFsaWRBbGxvY2F0aW9uKGJ5dGVzKSk7CisgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uu
YWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihieXRlcyk7Cit9CisKK2lubGluZSBDaGVja2VkQm9v
bGVhbiBIZWFwOjp0cnlBbGxvY2F0ZVN0b3JhZ2UoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXpl
X3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpCit7CisgICAgQ2hlY2tlZEJvb2xlYW4gcmVzdWx0ID0g
bV9zdG9yYWdlU3BhY2UudHJ5QWxsb2NhdGUoYnl0ZXMsIG91dFB0cik7CisjaWYgRU5BQkxFKEFM
TE9DQVRJT05fTE9HR0lORykKKyAgICBkYXRhTG9nRigiSlNDIEdDIGFsbG9jYXRpbmcgJWx1IGJ5
dGVzIG9mIHN0b3JhZ2UgZm9yICVwOiAlcC5cbiIsIGJ5dGVzLCBpbnRlbmRlZE93bmVyLCAqb3V0
UHRyKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGludGVuZGVkT3duZXIpOworI2VuZGlmCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIENoZWNrZWRCb29sZWFuIEhlYXA6OnRyeVJl
YWxsb2NhdGVTdG9yYWdlKEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdm9pZCoqIHB0ciwgc2l6ZV90
IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQoreworI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJ
TkcpCisgICAgdm9pZCogb2xkUHRyID0gKnB0cjsKKyNlbmRpZgorICAgIENoZWNrZWRCb29sZWFu
IHJlc3VsdCA9IG1fc3RvcmFnZVNwYWNlLnRyeVJlYWxsb2NhdGUocHRyLCBvbGRTaXplLCBuZXdT
aXplKTsKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgIGRhdGFMb2dGKCJKU0Mg
R0MgcmVhbGxvY2F0aW5nICVsdSAtPiAlbHUgYnl0ZXMgb2Ygc3RvcmFnZSBmb3IgJXA6ICVwIC0+
ICVwLlxuIiwgb2xkU2l6ZSwgbmV3U2l6ZSwgaW50ZW5kZWRPd25lciwgb2xkUHRyLCAqcHRyKTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGludGVuZGVkT3duZXIpOworI2VuZGlmCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQgSGVhcDo6YXNjcmliZU93bmVyKEpTQ2VsbCog
aW50ZW5kZWRPd25lciwgdm9pZCogc3RvcmFnZSkKK3sKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9M
T0dHSU5HKQorICAgIGRhdGFMb2dGKCJKU0MgR0MgYXNjcmliaW5nICVwIGFzIG93bmVyIG9mIHN0
b3JhZ2UgJXAuXG4iLCBpbnRlbmRlZE93bmVyLCBzdG9yYWdlKTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKGludGVuZGVkT3duZXIpOworICAgIFVOVVNFRF9QQVJBTShzdG9yYWdlKTsKKyNlbmRp
ZgorfQorCitpbmxpbmUgQmxvY2tBbGxvY2F0b3ImIEhlYXA6OmJsb2NrQWxsb2NhdG9yKCkKK3sK
KyAgICByZXR1cm4gbV9ibG9ja0FsbG9jYXRvcjsKK30KKworI2lmIFVTRShDRikKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgoraW5saW5lIHZvaWQgSGVhcDo6cmVsZWFzZVNvb24oUmV0YWluUHRyPFQ+
JiYgb2JqZWN0KQoreworICAgIG1fb2JqZWN0U3BhY2UucmVsZWFzZVNvb24oc3RkOjptb3ZlKG9i
amVjdCkpOworfQorI2VuZGlmCisKK2lubGluZSB2b2lkIEhlYXA6OmluY3JlbWVudERlZmVycmFs
RGVwdGgoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZGVmZXJyYWxEZXB0aCA8IDEwMCk7IC8v
IFNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGdldCByaWRpY3Vsb3VzLgor
ICAgIG1fZGVmZXJyYWxEZXB0aCsrOworfQorCitpbmxpbmUgdm9pZCBIZWFwOjpkZWNyZW1lbnRE
ZWZlcnJhbERlcHRoKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2RlZmVycmFsRGVwdGggPj0g
MSk7CisgICAgbV9kZWZlcnJhbERlcHRoLS07Cit9CisKK2lubGluZSBib29sIEhlYXA6OmNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoKQoreworICAgIGlmIChpc0RlZmVycmVkKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmICghc2hvdWxkQ29sbGVjdCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBjb2xsZWN0KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGlu
ZSB2b2lkIEhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkKCkKK3sKKyAg
ICBkZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7CisgICAgY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZl
cigpOworfQorCitpbmxpbmUgSGFzaFNldDxNYXJrZWRBcmd1bWVudEJ1ZmZlcio+JiBIZWFwOjpt
YXJrTGlzdFNldCgpCit7CisgICAgaWYgKCFtX21hcmtMaXN0U2V0KQorICAgICAgICBtX21hcmtM
aXN0U2V0ID0gYWRvcHRQdHIobmV3IEhhc2hTZXQ8TWFya2VkQXJndW1lbnRCdWZmZXIqPik7IAor
ICAgIHJldHVybiAqbV9tYXJrTGlzdFNldDsKK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gSGVhcElubGluZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50RW50cnlwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50RW50cnlwb2ludC5jcHAJKHJldmlzaW9uIDE2NjI3NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEVudHJ5cG9pbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKExMSU5UKQogCiAjaW5jbHVkZSAiQ29kZUJs
b2NrLmgiCisjaW5jbHVkZSAiSGVhcElubGluZXMuaCIKICNpbmNsdWRlICJKSVRDb2RlLmgiCiAj
aW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5oIgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAkocmV2aXNpb24gMTY2Mjc0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiQ2FsbEZyYW1lSW5saW5lcy5oIgog
I2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291
bnRlZElubGluZXMuaCIKKyNpbmNsdWRlICJIZWFwSW5saW5lcy5oIgogI2luY2x1ZGUgIklkZW50
aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0Fy
cmF5QnVmZmVyVmlld0lubGluZXMuaCIK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227821</attachid>
            <date>2014-03-25 18:33:06 -0700</date>
            <delta_ts>2014-03-25 19:38:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-130759-20140325183245.patch</filename>
            <type>text/plain</type>
            <size>50794</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY2Mjc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBA
CisyMDE0LTAzLTI1ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQWRkIEhlYXBJbmxpbmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzA3NTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNj
cmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzOgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
aGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2tTbmFwc2hvdEZ1bmN0b3I6
Ok1hcmtlZEJsb2NrU25hcHNob3RGdW5jdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2tT
bmFwc2hvdEZ1bmN0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOiBBbHNv
IHJlaW5kZW50ZWQgd2hpbGUgd2UncmUgaGVyZS4KKyAgICAgICAgKEpTQzo6SGVhcDo6d3JpdGVC
YXJyaWVyQnVmZmVyKToKKyAgICAgICAgKEpTQzo6SGVhcDo6dm0pOgorICAgICAgICAoSlNDOjpI
ZWFwOjpvYmplY3RTcGFjZSk6CisgICAgICAgIChKU0M6OkhlYXA6Om1hY2hpbmVUaHJlYWRzKToK
KyAgICAgICAgKEpTQzo6SGVhcDo6b3BlcmF0aW9uSW5Qcm9ncmVzcyk6CisgICAgICAgIChKU0M6
OkhlYXA6OmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6YWxsb2NhdG9yRm9yT2JqZWN0V2l0aE5vcm1hbERlc3RydWN0b3IpOgorICAgICAg
ICAoSlNDOjpIZWFwOjphbGxvY2F0b3JGb3JPYmplY3RXaXRoSW1tb3J0YWxTdHJ1Y3R1cmVEZXN0
cnVjdG9yKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c3RvcmFnZUFsbG9jYXRvcik6CisgICAgICAg
IChKU0M6OkhlYXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6
OmlzU2FmZVRvQ29sbGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OmhhbmRsZVNldCk6CisgICAg
ICAgIChKU0M6OkhlYXA6OmhhbmRsZVN0YWNrKToKKyAgICAgICAgKEpTQzo6SGVhcDo6bGFzdEZ1
bGxHQ0xlbmd0aCk6CisgICAgICAgIChKU0M6OkhlYXA6Omxhc3RFZGVuR0NMZW5ndGgpOgorICAg
ICAgICAoSlNDOjpIZWFwOjppbmNyZWFzZUxhc3RGdWxsR0NMZW5ndGgpOgorICAgICAgICAoSlND
OjpIZWFwOjpzaXplQmVmb3JlTGFzdEVkZW5Db2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6c2l6ZUFmdGVyTGFzdEVkZW5Db2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c2l6
ZUJlZm9yZUxhc3RGdWxsQ29sbGVjdGlvbik6CisgICAgICAgIChKU0M6OkhlYXA6OnNpemVBZnRl
ckxhc3RGdWxsQ29sbGVjdGlvbik6CisgICAgICAgIChKU0M6OkhlYXA6OmppdFN0dWJSb3V0aW5l
cyk6CisgICAgICAgIChKU0M6OkhlYXA6OmlzRGVmZXJyZWQpOgorICAgICAgICAoSlNDOjpIZWFw
OjpzdHJ1Y3R1cmVJRFRhYmxlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVtb3ZlQ29kZUJsb2Nr
KToKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpI
ZWFwOjpzaG91bGRDb2xsZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNCdXN5KToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6aXNDb2xsZWN0aW5nKToKKyAgICAgICAgKEpTQzo6SGVhcDo6aGVhcCk6
CisgICAgICAgIChKU0M6OkhlYXA6OmlzTGl2ZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmlzSW5S
ZW1lbWJlcmVkU2V0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNNYXJrZWQpOgorICAgICAgICAo
SlNDOjpIZWFwOjp0ZXN0QW5kU2V0TWFya2VkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c2V0TWFy
a2VkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6d3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVwb3J0
RXh0cmFNZW1vcnlDb3N0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9yRWFjaFByb3RlY3RlZENl
bGwpOgorICAgICAgICAoSlNDOjpIZWFwOjpmb3JFYWNoQ29kZUJsb2NrKToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6YWxsb2NhdGVXaXRoTm9ybWFsRGVzdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6Okhl
YXA6OmFsbG9jYXRlV2l0aEltbW9ydGFsU3RydWN0dXJlRGVzdHJ1Y3Rvcik6CisgICAgICAgIChK
U0M6OkhlYXA6OmFsbG9jYXRlV2l0aG91dERlc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpIZWFw
Ojp0cnlBbGxvY2F0ZVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpIZWFwOjp0cnlSZWFsbG9jYXRl
U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmFzY3JpYmVPd25lcik6CisgICAgICAgIChK
U0M6OkhlYXA6OmJsb2NrQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVsZWFzZVNv
b24pOgorICAgICAgICAoSlNDOjpIZWFwOjppbmNyZW1lbnREZWZlcnJhbERlcHRoKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aCk6CisgICAgICAgIChKU0M6Okhl
YXA6OmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIpOgorICAgICAgICAoSlNDOjpIZWFwOjpkZWNy
ZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCk6CisgICAgICAgIChKU0M6OkhlYXA6Om1h
cmtMaXN0U2V0KToKKyAgICAgICAgKiBydW50aW1lL0pTQ0lubGluZXMuaDoKKwogMjAxNC0wMy0y
NSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCAzMi1iaXQg
Z2V0dGVyIGNhbGwgYWxpZ25tZW50LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE2NjI3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC01OTQsNiArNTk0LDcgQEAg
amF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
R0NUaHJlYWQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAgXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcElubGluZXMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcEl0
ZXJhdGlvblNjb3BlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBPcGVyYXRp
b24uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFN0YXRpc3RpY3MuY3BwIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTY2
Mjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2
YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA2Myw2ICsxMDYzLDcgQEAK
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGFuZGxlVHlwZXMuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGVhcC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caGVhcFxIZWFwQmxvY2suaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGhlYXBcSGVhcElubGluZXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBc
SGVhcE9wZXJhdGlvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxIZWFw
Um9vdFZpc2l0b3IuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGVhcFN0
YXRpc3RpY3MuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE2NjI3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVy
cwkod29ya2luZyBjb3B5KQpAQCAtMTczOSw2ICsxNzM5LDkgQEAKICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGhlYXBcSGVhcEJsb2NrLmgiPgogICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+
CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBJ
bmxpbmVzLmgiPgorICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBPcGVyYXRpb24uaCI+CiAgICAg
ICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjYyNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMTQzNSw2ICsxNDM1LDcgQEAKIAkJQzJDOEQwMzExNEEzQ0VGQzAwNTc4RTY1IC8q
IEhlYXBCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzJDOEQwMkYxNEEzQ0VGQzAwNTc4RTY1IC8qIEhlYXBCbG9jay5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyQ0YzOUMxMTZFMTVBODEwMERE
NjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDMkNGMzlCRjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFw
cGVyT2JqZWN0Lm1tICovOyB9OwogCQlDMkNGMzlDMjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElX
cmFwcGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDMkNGMzlDMDE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0LmggKi87
IH07CisJCUMyREE3NzgzMThFMjU5OTkwMDY2RkNCNiAvKiBIZWFwSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJEQTc3ODIxOEUyNTk5OTAw
NjZGQ0I2IC8qIEhlYXBJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQzJERjQ0MkYxNzA3QUMwMTAwQTVDQTk2IC8qIFN1cGVyUmVnaW9u
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyREY0
NDJEMTcwN0FDMDEwMEE1Q0E5NiAvKiBTdXBlclJlZ2lvbi5jcHAgKi87IH07CiAJCUMyREY0NDMw
MTcwN0FDMDEwMEE1Q0E5NiAvKiBTdXBlclJlZ2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJERjQ0MkUxNzA3QUMwMTAwQTVDQTk2IC8qIFN1cGVy
UmVnaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQzJFNTI2QkQxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkU1MjZCQjE1OTBFRjAwMDA1NEU0
OEQgLyogSGVhcFRpbWVyLmNwcCAqLzsgfTsKQEAgLTI5NzYsNiArMjk3Nyw3IEBACiAJCUMyQzhE
MDJGMTRBM0NFRkMwMDU3OEU2NSAvKiBIZWFwQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSGVhcEJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMy
Q0YzOUJGMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBKU0FQSVdyYXBwZXJPYmplY3QubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyQ0YzOUMwMTZFMTVBODEwMERENjlCRSAvKiBK
U0FQSVdyYXBwZXJPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNB
UElXcmFwcGVyT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyREE3Nzgy
MThFMjU5OTkwMDY2RkNCNiAvKiBIZWFwSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIZWFwSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
MkRGNDQyRDE3MDdBQzAxMDBBNUNBOTYgLyogU3VwZXJSZWdpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3VwZXJSZWdpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDMkRGNDQyRTE3MDdBQzAxMDBBNUNBOTYgLyogU3VwZXJSZWdpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3VwZXJSZWdpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJFNTI2QkIxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1l
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZWFwVGltZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzUxOSw2ICszNTIxLDcgQEAKIAkJMTQy
RTMxMkExMzRGRjBBNjAwQUZBREI1IC8qIGhlYXAgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAorCQkJCUMyREE3NzgyMThFMjU5OTkwMDY2RkNCNiAvKiBIZWFwSW5s
aW5lcy5oICovLAogCQkJCUFEREIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0
LmggKi8sCiAJCQkJMkFBQ0U2M0ExOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFj
ay5jcHAgKi8sCiAJCQkJMkFBQ0U2M0IxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxs
YmFjay5oICovLApAQCAtNDk0MCw2ICs0OTQzLDcgQEAKIAkJCQlBMUEwMDlDMTE4MzFBMjZFMDBD
Rjg3MTEgLyogQVJNNjRBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RDNCMkM0MTAx
NTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1ODQw
MzIwMThCRkZCRTEwMDVBMDgxMSAvKiBJbnNwZWN0b3JBZ2VudC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQzJEQTc3ODMxOEUyNTk5OTAwNjZGQ0I2IC8qIEhlYXBJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyQUFDRTYzRDE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkyQTgzNjM4NjE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0
aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkE4MzYzOEExOEQ3RDBGRTAwMDBF
QkNDIC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE2NjI3NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDE2LDYgKzEw
MTYsMTkgQEAgdm9pZCBIZWFwOjpzd2VlcEFycmF5QnVmZmVycygpCiAgICAgbV9hcnJheUJ1ZmZl
cnMuc3dlZXAoKTsKIH0KIAorc3RydWN0IE1hcmtlZEJsb2NrU25hcHNob3RGdW5jdG9yIDogcHVi
bGljIE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7CisgICAgTWFya2VkQmxvY2tTbmFwc2hvdEZ1
bmN0b3IoVmVjdG9yPE1hcmtlZEJsb2NrKj4mIGJsb2NrcykgCisgICAgICAgIDogbV9pbmRleCgw
KSAKKyAgICAgICAgLCBtX2Jsb2NrcyhibG9ja3MpCisgICAgeworICAgIH0KKworICAgIHZvaWQg
b3BlcmF0b3IoKShNYXJrZWRCbG9jayogYmxvY2spIHsgbV9ibG9ja3NbbV9pbmRleCsrXSA9IGJs
b2NrOyB9CisKKyAgICBzaXplX3QgbV9pbmRleDsKKyAgICBWZWN0b3I8TWFya2VkQmxvY2sqPiYg
bV9ibG9ja3M7Cit9OworCiB2b2lkIEhlYXA6OnNuYXBzaG90TWFya2VkU3BhY2UoKQogewogICAg
IEdDUEhBU0UoU25hcHNob3RNYXJrZWRTcGFjZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5oCShyZXZpc2lvbiAxNjYyNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDU0NiArNDksMzI3IEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCi0gICAgY2xhc3MgQ29waWVkU3BhY2U7Ci0gICAgY2xhc3MgQ29kZUJsb2NrOwotICAg
IGNsYXNzIEV4ZWN1dGFibGVCYXNlOwotICAgIGNsYXNzIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2s7
Ci0gICAgY2xhc3MgRnVsbEdDQWN0aXZpdHlDYWxsYmFjazsKLSAgICBjbGFzcyBHQ0FjdGl2aXR5
Q2FsbGJhY2s7Ci0gICAgY2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOwotICAgIGNsYXNzIEds
b2JhbENvZGVCbG9jazsKLSAgICBjbGFzcyBIZWFwOwotICAgIGNsYXNzIEhlYXBSb290VmlzaXRv
cjsKLSAgICBjbGFzcyBJbmNyZW1lbnRhbFN3ZWVwZXI7Ci0gICAgY2xhc3MgSklUU3R1YlJvdXRp
bmU7Ci0gICAgY2xhc3MgSlNDZWxsOwotICAgIGNsYXNzIFZNOwotICAgIGNsYXNzIEpTU3RhY2s7
Ci0gICAgY2xhc3MgSlNWYWx1ZTsKLSAgICBjbGFzcyBMaXZlT2JqZWN0SXRlcmF0b3I7Ci0gICAg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwotICAgIGNsYXNzIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyOwotICAgIGNsYXNzIFdlYWtHQ0hhbmRsZVBvb2w7Ci0gICAgY2xhc3MgU2xvdFZpc2l0b3I7
Ci0KLSAgICB0eXBlZGVmIHN0ZDo6cGFpcjxKU1ZhbHVlLCBXVEY6OlN0cmluZz4gVmFsdWVTdHJp
bmdQYWlyOwotICAgIHR5cGVkZWYgSGFzaENvdW50ZWRTZXQ8SlNDZWxsKj4gUHJvdGVjdENvdW50
U2V0OwotICAgIHR5cGVkZWYgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+IFR5cGVDb3VudFNl
dDsKLQotICAgIGVudW0gSGVhcFR5cGUgeyBTbWFsbEhlYXAsIExhcmdlSGVhcCB9OwotCi0gICAg
Y2xhc3MgSGVhcCB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhlYXApOwotICAgIHB1
YmxpYzoKLSAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKLSAgICAgICAgZnJpZW5kIGNsYXNzIERG
Rzo6U3BlY3VsYXRpdmVKSVQ7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBHQ1RocmVhZFNoYXJlZERh
dGE7Ci0gICAgICAgIHN0YXRpYyBIZWFwKiBoZWFwKGNvbnN0IEpTVmFsdWUpOyAvLyAwIGZvciBp
bW1lZGlhdGUgdmFsdWVzCi0gICAgICAgIHN0YXRpYyBIZWFwKiBoZWFwKGNvbnN0IEpTQ2VsbCop
OwotCi0gICAgICAgIC8vIFRoaXMgY29uc3RhbnQgZGV0ZXJtaW5lcyBob3cgbWFueSBibG9ja3Mg
d2UgaXRlcmF0ZSBiZXR3ZWVuIGNoZWNrcyBvZiBvdXIgCi0gICAgICAgIC8vIGRlYWRsaW5lIHdo
ZW4gY2FsbGluZyBIZWFwOjppc1BhZ2VkT3V0LiBEZWNyZWFzaW5nIGl0IHdpbGwgY2F1c2UgdXMg
dG8gZGV0ZWN0IAotICAgICAgICAvLyBvdmVyc3RlcHBpbmcgb3VyIGRlYWRsaW5lIG1vcmUgcXVp
Y2tseSwgd2hpbGUgaW5jcmVhc2luZyBpdCB3aWxsIGNhdXNlIAotICAgICAgICAvLyBvdXIgc2Nh
biB0byBydW4gZmFzdGVyLiAKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfdGltZUNo
ZWNrUmVzb2x1dGlvbiA9IDE2OwotCi0gICAgICAgIHN0YXRpYyBib29sIGlzTGl2ZShjb25zdCB2
b2lkKik7Ci0gICAgICAgIHN0YXRpYyBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKTsKLSAgICAg
ICAgc3RhdGljIGJvb2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKik7Ci0gICAgICAgIHN0
YXRpYyB2b2lkIHNldE1hcmtlZChjb25zdCB2b2lkKik7Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBhZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZWxsKik7Ci0gICAgICAgIGJv
b2wgaXNJblJlbWVtYmVyZWRTZXQoY29uc3QgSlNDZWxsKiBjZWxsKSBjb25zdAotICAgICAgICB7
Ci0gICAgICAgICAgICBBU1NFUlQoY2VsbCk7Ci0gICAgICAgICAgICBBU1NFUlQoIU9wdGlvbnM6
OmVuYWJsZUNvbmN1cnJlbnRKSVQoKSB8fCAhaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICAg
ICAgICAgIHJldHVybiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmlzUmVtZW1iZXJlZChj
ZWxsKTsKLSAgICAgICAgfQotICAgICAgICBzdGF0aWMgYm9vbCBpc1dyaXRlQmFycmllckVuYWJs
ZWQoKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3Qg
SlNDZWxsKik7Ci0gICAgICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIEpTVmFs
dWUpOwotICAgICAgICB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU0NlbGwqKTsK
LQotICAgICAgICBXcml0ZUJhcnJpZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlcigpIHsgcmV0
dXJuIG1fd3JpdGVCYXJyaWVyQnVmZmVyOyB9Ci0gICAgICAgIHZvaWQgZmx1c2hXcml0ZUJhcnJp
ZXJCdWZmZXIoSlNDZWxsKik7Ci0KLSAgICAgICAgSGVhcChWTSosIEhlYXBUeXBlKTsKLSAgICAg
ICAgfkhlYXAoKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBsYXN0Q2hhbmNlVG9G
aW5hbGl6ZSgpOwotCi0gICAgICAgIFZNKiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1fdm07IH0KLSAg
ICAgICAgTWFya2VkU3BhY2UmIG9iamVjdFNwYWNlKCkgeyByZXR1cm4gbV9vYmplY3RTcGFjZTsg
fQotICAgICAgICBNYWNoaW5lVGhyZWFkcyYgbWFjaGluZVRocmVhZHMoKSB7IHJldHVybiBtX21h
Y2hpbmVUaHJlYWRzOyB9Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgR0NBY3Rpdml0eUNh
bGxiYWNrKiBmdWxsQWN0aXZpdHlDYWxsYmFjaygpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBHQ0FjdGl2aXR5Q2FsbGJhY2sqIGVkZW5BY3Rpdml0eUNhbGxiYWNrKCk7Ci0gICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0RnVsbEFjdGl2aXR5Q2FsbGJhY2soUGFzc1JlZlB0cjxG
dWxsR0NBY3Rpdml0eUNhbGxiYWNrPik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
c2V0RWRlbkFjdGl2aXR5Q2FsbGJhY2soUGFzc1JlZlB0cjxFZGVuR0NBY3Rpdml0eUNhbGxiYWNr
Pik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0R2FyYmFnZUNvbGxlY3Rpb25U
aW1lckVuYWJsZWQoYm9vbCk7Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSW5jcmVtZW50
YWxTd2VlcGVyKiBzd2VlcGVyKCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0
SW5jcmVtZW50YWxTd2VlcGVyKFBhc3NPd25QdHI8SW5jcmVtZW50YWxTd2VlcGVyPik7Ci0KLSAg
ICAgICAgLy8gdHJ1ZSBpZiBjb2xsZWN0aW9uIGlzIGluIHByb2dyZXNzCi0gICAgICAgIGlubGlu
ZSBib29sIGlzQ29sbGVjdGluZygpOwotICAgICAgICBpbmxpbmUgSGVhcE9wZXJhdGlvbiBvcGVy
YXRpb25JblByb2dyZXNzKCkgeyByZXR1cm4gbV9vcGVyYXRpb25JblByb2dyZXNzOyB9Ci0gICAg
ICAgIC8vIHRydWUgaWYgYW4gYWxsb2NhdGlvbiBvciBjb2xsZWN0aW9uIGlzIGluIHByb2dyZXNz
Ci0gICAgICAgIGlubGluZSBib29sIGlzQnVzeSgpOwotICAgICAgICAKLSAgICAgICAgTWFya2Vk
QWxsb2NhdG9yJiBhbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihzaXplX3QgYnl0
ZXMpIHsgcmV0dXJuIG1fb2JqZWN0U3BhY2UuYWxsb2NhdG9yRm9yKGJ5dGVzKTsgfQotICAgICAg
ICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvckZvck9iamVjdFdpdGhOb3JtYWxEZXN0cnVjdG9y
KHNpemVfdCBieXRlcykgeyByZXR1cm4gbV9vYmplY3RTcGFjZS5ub3JtYWxEZXN0cnVjdG9yQWxs
b2NhdG9yRm9yKGJ5dGVzKTsgfQotICAgICAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvckZv
ck9iamVjdFdpdGhJbW1vcnRhbFN0cnVjdHVyZURlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKSB7IHJl
dHVybiBtX29iamVjdFNwYWNlLmltbW9ydGFsU3RydWN0dXJlRGVzdHJ1Y3RvckFsbG9jYXRvckZv
cihieXRlcyk7IH0KLSAgICAgICAgQ29waWVkQWxsb2NhdG9yJiBzdG9yYWdlQWxsb2NhdG9yKCkg
eyByZXR1cm4gbV9zdG9yYWdlU3BhY2UuYWxsb2NhdG9yKCk7IH0KLSAgICAgICAgQ2hlY2tlZEJv
b2xlYW4gdHJ5QWxsb2NhdGVTdG9yYWdlKEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90LCB2
b2lkKiopOwotICAgICAgICBDaGVja2VkQm9vbGVhbiB0cnlSZWFsbG9jYXRlU3RvcmFnZShKU0Nl
bGwqIGludGVuZGVkT3duZXIsIHZvaWQqKiwgc2l6ZV90LCBzaXplX3QpOwotICAgICAgICB2b2lk
IGFzY3JpYmVPd25lcihKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqKTsKLQotICAgICAgICB0
eXBlZGVmIHZvaWQgKCpGaW5hbGl6ZXIpKEpTQ2VsbCopOwotICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGFkZEZpbmFsaXplcihKU0NlbGwqLCBGaW5hbGl6ZXIpOwotICAgICAgICB2b2lk
IGFkZENvbXBpbGVkQ29kZShFeGVjdXRhYmxlQmFzZSopOwotCi0gICAgICAgIHZvaWQgbm90aWZ5
SXNTYWZlVG9Db2xsZWN0KCkgeyBtX2lzU2FmZVRvQ29sbGVjdCA9IHRydWU7IH0KLSAgICAgICAg
Ym9vbCBpc1NhZmVUb0NvbGxlY3QoKSBjb25zdCB7IHJldHVybiBtX2lzU2FmZVRvQ29sbGVjdDsg
fQotCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29sbGVjdEFsbEdhcmJhZ2UoKTsK
LSAgICAgICAgYm9vbCBzaG91bGRDb2xsZWN0KCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgY29sbGVjdChIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlID0gQW55Q29sbGVjdGlv
bik7Ci0gICAgICAgIGJvb2wgY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpOyAvLyBSZXR1cm5z
IHRydWUgaWYgaXQgZGlkIGNvbGxlY3QuCi0KLSAgICAgICAgdm9pZCByZXBvcnRFeHRyYU1lbW9y
eUNvc3Qoc2l6ZV90IGNvc3QpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlcG9y
dEFiYW5kb25lZE9iamVjdEdyYXBoKCk7Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBwcm90ZWN0KEpTVmFsdWUpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHVucHJv
dGVjdChKU1ZhbHVlKTsgLy8gVHJ1ZSB3aGVuIHRoZSBwcm90ZWN0IGNvdW50IGRyb3BzIHRvIDAu
Ci0gICAgICAgIAotICAgICAgICBzaXplX3QgZXh0cmFTaXplKCk7IC8vIGV4dHJhIG1lbW9yeSB1
c2FnZSBvdXRzaWRlIG9mIHBhZ2VzIGFsbG9jYXRlZCBieSB0aGUgaGVhcAotICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzaXplX3Qgc2l6ZSgpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBz
aXplX3QgY2FwYWNpdHkoKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IG9iamVj
dENvdW50KCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBnbG9iYWxPYmplY3RD
b3VudCgpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3QgcHJvdGVjdGVkT2JqZWN0
Q291bnQoKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IHByb3RlY3RlZEdsb2Jh
bE9iamVjdENvdW50KCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFBhc3NPd25QdHI8VHlw
ZUNvdW50U2V0PiBwcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCk7Ci0gICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIFBhc3NPd25QdHI8VHlwZUNvdW50U2V0PiBvYmplY3RUeXBlQ291bnRzKCk7Ci0g
ICAgICAgIHZvaWQgc2hvd1N0YXRpc3RpY3MoKTsKLQotICAgICAgICB2b2lkIHB1c2hUZW1wU29y
dFZlY3RvcihWZWN0b3I8VmFsdWVTdHJpbmdQYWlyLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4q
KTsKLSAgICAgICAgdm9pZCBwb3BUZW1wU29ydFZlY3RvcihWZWN0b3I8VmFsdWVTdHJpbmdQYWly
LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4qKTsKLSAgICAKLSAgICAgICAgSGFzaFNldDxNYXJr
ZWRBcmd1bWVudEJ1ZmZlcio+JiBtYXJrTGlzdFNldCgpIHsgaWYgKCFtX21hcmtMaXN0U2V0KSBt
X21hcmtMaXN0U2V0ID0gYWRvcHRQdHIobmV3IEhhc2hTZXQ8TWFya2VkQXJndW1lbnRCdWZmZXIq
Pik7IHJldHVybiAqbV9tYXJrTGlzdFNldDsgfQotICAgICAgICAKLSAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlwZSBmb3JFYWNoUHJv
dGVjdGVkQ2VsbChGdW5jdG9yJik7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
IHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgZm9yRWFjaFByb3RlY3RlZENlbGwoKTsKLSAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgZm9yRWFjaENvZGVC
bG9jayhGdW5jdG9yJik7Ci0KLSAgICAgICAgSGFuZGxlU2V0KiBoYW5kbGVTZXQoKSB7IHJldHVy
biAmbV9oYW5kbGVTZXQ7IH0KLSAgICAgICAgSGFuZGxlU3RhY2sqIGhhbmRsZVN0YWNrKCkgeyBy
ZXR1cm4gJm1faGFuZGxlU3RhY2s7IH0KLQotICAgICAgICB2b2lkIHdpbGxTdGFydEl0ZXJhdGlu
ZygpOwotICAgICAgICB2b2lkIGRpZEZpbmlzaEl0ZXJhdGluZygpOwotICAgICAgICB2b2lkIGdl
dENvbnNlcnZhdGl2ZVJlZ2lzdGVyUm9vdHMoSGFzaFNldDxKU0NlbGwqPiYgcm9vdHMpOwotCi0g
ICAgICAgIGRvdWJsZSBsYXN0RnVsbEdDTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RnVs
bEdDTGVuZ3RoOyB9Ci0gICAgICAgIGRvdWJsZSBsYXN0RWRlbkdDTGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXN0RWRlbkdDTGVuZ3RoOyB9Ci0gICAgICAgIHZvaWQgaW5jcmVhc2VMYXN0RnVs
bEdDTGVuZ3RoKGRvdWJsZSBhbW91bnQpIHsgbV9sYXN0RnVsbEdDTGVuZ3RoICs9IGFtb3VudDsg
fQotCi0gICAgICAgIHNpemVfdCBzaXplQmVmb3JlTGFzdEVkZW5Db2xsZWN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9zaXplQmVmb3JlTGFzdEVkZW5Db2xsZWN0OyB9Ci0gICAgICAgIHNpemVfdCBz
aXplQWZ0ZXJMYXN0RWRlbkNvbGxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3NpemVBZnRlckxh
c3RFZGVuQ29sbGVjdDsgfQotICAgICAgICBzaXplX3Qgc2l6ZUJlZm9yZUxhc3RGdWxsQ29sbGVj
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZUJlZm9yZUxhc3RGdWxsQ29sbGVjdDsgfQotICAg
ICAgICBzaXplX3Qgc2l6ZUFmdGVyTGFzdEZ1bGxDb2xsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9zaXplQWZ0ZXJMYXN0RnVsbENvbGxlY3Q7IH0KLQotICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIGRlbGV0ZUFsbENvbXBpbGVkQ29kZSgpOwotICAgICAgICB2b2lkIGRlbGV0ZUFsbFVu
bGlua2VkRnVuY3Rpb25Db2RlKCk7Ci0KLSAgICAgICAgdm9pZCBkaWRBbGxvY2F0ZShzaXplX3Qp
OwotICAgICAgICB2b2lkIGRpZEFiYW5kb24oc2l6ZV90KTsKLQotICAgICAgICBib29sIGlzUGFn
ZWRPdXQoZG91YmxlIGRlYWRsaW5lKTsKLSAgICAgICAgCi0gICAgICAgIGNvbnN0IEpJVFN0dWJS
b3V0aW5lU2V0JiBqaXRTdHViUm91dGluZXMoKSB7IHJldHVybiBtX2ppdFN0dWJSb3V0aW5lczsg
fQotICAgICAgICAKLSAgICAgICAgdm9pZCBhZGRSZWZlcmVuY2UoSlNDZWxsKiwgQXJyYXlCdWZm
ZXIqKTsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgaXNEZWZlcnJlZCgpIGNvbnN0IHsgcmV0dXJu
ICEhbV9kZWZlcnJhbERlcHRoIHx8IE9wdGlvbnM6OmRpc2FibGVHQygpOyB9CitjbGFzcyBDb3Bp
ZWRTcGFjZTsKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNzIEV4ZWN1dGFibGVCYXNlOworY2xhc3Mg
RWRlbkdDQWN0aXZpdHlDYWxsYmFjazsKK2NsYXNzIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2s7Citj
bGFzcyBHQ0FjdGl2aXR5Q2FsbGJhY2s7CitjbGFzcyBHQ0F3YXJlSklUU3R1YlJvdXRpbmU7Citj
bGFzcyBHbG9iYWxDb2RlQmxvY2s7CitjbGFzcyBIZWFwOworY2xhc3MgSGVhcFJvb3RWaXNpdG9y
OworY2xhc3MgSW5jcmVtZW50YWxTd2VlcGVyOworY2xhc3MgSklUU3R1YlJvdXRpbmU7CitjbGFz
cyBKU0NlbGw7CitjbGFzcyBWTTsKK2NsYXNzIEpTU3RhY2s7CitjbGFzcyBKU1ZhbHVlOworY2xh
c3MgTGl2ZU9iamVjdEl0ZXJhdG9yOworY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworY2xh
c3MgTWFya2VkQXJndW1lbnRCdWZmZXI7CitjbGFzcyBXZWFrR0NIYW5kbGVQb29sOworY2xhc3Mg
U2xvdFZpc2l0b3I7CisKK3R5cGVkZWYgc3RkOjpwYWlyPEpTVmFsdWUsIFdURjo6U3RyaW5nPiBW
YWx1ZVN0cmluZ1BhaXI7Cit0eXBlZGVmIEhhc2hDb3VudGVkU2V0PEpTQ2VsbCo+IFByb3RlY3RD
b3VudFNldDsKK3R5cGVkZWYgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+IFR5cGVDb3VudFNl
dDsKKworZW51bSBIZWFwVHlwZSB7IFNtYWxsSGVhcCwgTGFyZ2VIZWFwIH07CisKK2NsYXNzIEhl
YXAgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhlYXApOworcHVibGljOgorICAgIGZyaWVu
ZCBjbGFzcyBKSVQ7CisgICAgZnJpZW5kIGNsYXNzIERGRzo6U3BlY3VsYXRpdmVKSVQ7CisgICAg
ZnJpZW5kIGNsYXNzIEdDVGhyZWFkU2hhcmVkRGF0YTsKKyAgICBzdGF0aWMgSGVhcCogaGVhcChj
b25zdCBKU1ZhbHVlKTsgLy8gMCBmb3IgaW1tZWRpYXRlIHZhbHVlcworICAgIHN0YXRpYyBIZWFw
KiBoZWFwKGNvbnN0IEpTQ2VsbCopOworCisgICAgLy8gVGhpcyBjb25zdGFudCBkZXRlcm1pbmVz
IGhvdyBtYW55IGJsb2NrcyB3ZSBpdGVyYXRlIGJldHdlZW4gY2hlY2tzIG9mIG91ciAKKyAgICAv
LyBkZWFkbGluZSB3aGVuIGNhbGxpbmcgSGVhcDo6aXNQYWdlZE91dC4gRGVjcmVhc2luZyBpdCB3
aWxsIGNhdXNlIHVzIHRvIGRldGVjdCAKKyAgICAvLyBvdmVyc3RlcHBpbmcgb3VyIGRlYWRsaW5l
IG1vcmUgcXVpY2tseSwgd2hpbGUgaW5jcmVhc2luZyBpdCB3aWxsIGNhdXNlIAorICAgIC8vIG91
ciBzY2FuIHRvIHJ1biBmYXN0ZXIuIAorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3RpbWVD
aGVja1Jlc29sdXRpb24gPSAxNjsKKworICAgIHN0YXRpYyBib29sIGlzTGl2ZShjb25zdCB2b2lk
Kik7CisgICAgc3RhdGljIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopOworICAgIHN0YXRpYyBi
b29sIHRlc3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9pZCopOworICAgIHN0YXRpYyB2b2lkIHNldE1h
cmtlZChjb25zdCB2b2lkKik7CisgICAgc3RhdGljIGJvb2wgaXNSZW1lbWJlcmVkKGNvbnN0IHZv
aWQqKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkVG9SZW1lbWJlcmVkU2V0KGNv
bnN0IEpTQ2VsbCopOworICAgIGJvb2wgaXNJblJlbWVtYmVyZWRTZXQoY29uc3QgSlNDZWxsKikg
Y29uc3Q7CisgICAgc3RhdGljIGJvb2wgaXNXcml0ZUJhcnJpZXJFbmFibGVkKCk7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKik7CisgICAgdm9p
ZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwgSlNWYWx1ZSk7CisgICAgdm9pZCB3cml0ZUJh
cnJpZXIoY29uc3QgSlNDZWxsKiwgSlNDZWxsKik7CisKKyAgICBXcml0ZUJhcnJpZXJCdWZmZXIm
IHdyaXRlQmFycmllckJ1ZmZlcigpIHsgcmV0dXJuIG1fd3JpdGVCYXJyaWVyQnVmZmVyOyB9Cisg
ICAgdm9pZCBmbHVzaFdyaXRlQmFycmllckJ1ZmZlcihKU0NlbGwqKTsKKworICAgIEhlYXAoVk0q
LCBIZWFwVHlwZSk7CisgICAgfkhlYXAoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGxh
c3RDaGFuY2VUb0ZpbmFsaXplKCk7CisKKyAgICBWTSogdm0oKSBjb25zdCB7IHJldHVybiBtX3Zt
OyB9CisgICAgTWFya2VkU3BhY2UmIG9iamVjdFNwYWNlKCkgeyByZXR1cm4gbV9vYmplY3RTcGFj
ZTsgfQorICAgIE1hY2hpbmVUaHJlYWRzJiBtYWNoaW5lVGhyZWFkcygpIHsgcmV0dXJuIG1fbWFj
aGluZVRocmVhZHM7IH0KKworICAgIEpTX0VYUE9SVF9QUklWQVRFIEdDQWN0aXZpdHlDYWxsYmFj
ayogZnVsbEFjdGl2aXR5Q2FsbGJhY2soKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2
aXR5Q2FsbGJhY2sqIGVkZW5BY3Rpdml0eUNhbGxiYWNrKCk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBzZXRGdWxsQWN0aXZpdHlDYWxsYmFjayhQYXNzUmVmUHRyPEZ1bGxHQ0FjdGl2aXR5
Q2FsbGJhY2s+KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldEVkZW5BY3Rpdml0eUNh
bGxiYWNrKFBhc3NSZWZQdHI8RWRlbkdDQWN0aXZpdHlDYWxsYmFjaz4pOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgc2V0R2FyYmFnZUNvbGxlY3Rpb25UaW1lckVuYWJsZWQoYm9vbCk7CisK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBJbmNyZW1lbnRhbFN3ZWVwZXIqIHN3ZWVwZXIoKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldEluY3JlbWVudGFsU3dlZXBlcihQYXNzT3duUHRy
PEluY3JlbWVudGFsU3dlZXBlcj4pOworCisgICAgLy8gdHJ1ZSBpZiBjb2xsZWN0aW9uIGlzIGlu
IHByb2dyZXNzCisgICAgYm9vbCBpc0NvbGxlY3RpbmcoKTsKKyAgICBIZWFwT3BlcmF0aW9uIG9w
ZXJhdGlvbkluUHJvZ3Jlc3MoKSB7IHJldHVybiBtX29wZXJhdGlvbkluUHJvZ3Jlc3M7IH0KKyAg
ICAvLyB0cnVlIGlmIGFuIGFsbG9jYXRpb24gb3IgY29sbGVjdGlvbiBpcyBpbiBwcm9ncmVzcwor
ICAgIGJvb2wgaXNCdXN5KCk7CisgICAgCisgICAgTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JG
b3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihzaXplX3QgYnl0ZXMpIHsgcmV0dXJuIG1fb2JqZWN0
U3BhY2UuYWxsb2NhdG9yRm9yKGJ5dGVzKTsgfQorICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2Nh
dG9yRm9yT2JqZWN0V2l0aE5vcm1hbERlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKSB7IHJldHVybiBt
X29iamVjdFNwYWNlLm5vcm1hbERlc3RydWN0b3JBbGxvY2F0b3JGb3IoYnl0ZXMpOyB9CisgICAg
TWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3JPYmplY3RXaXRoSW1tb3J0YWxTdHJ1Y3R1cmVE
ZXN0cnVjdG9yKHNpemVfdCBieXRlcykgeyByZXR1cm4gbV9vYmplY3RTcGFjZS5pbW1vcnRhbFN0
cnVjdHVyZURlc3RydWN0b3JBbGxvY2F0b3JGb3IoYnl0ZXMpOyB9CisgICAgQ29waWVkQWxsb2Nh
dG9yJiBzdG9yYWdlQWxsb2NhdG9yKCkgeyByZXR1cm4gbV9zdG9yYWdlU3BhY2UuYWxsb2NhdG9y
KCk7IH0KKyAgICBDaGVja2VkQm9vbGVhbiB0cnlBbGxvY2F0ZVN0b3JhZ2UoSlNDZWxsKiBpbnRl
bmRlZE93bmVyLCBzaXplX3QsIHZvaWQqKik7CisgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5UmVhbGxv
Y2F0ZVN0b3JhZ2UoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKiosIHNpemVfdCwgc2l6ZV90
KTsKKyAgICB2b2lkIGFzY3JpYmVPd25lcihKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqKTsK
KworICAgIHR5cGVkZWYgdm9pZCAoKkZpbmFsaXplcikoSlNDZWxsKik7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBhZGRGaW5hbGl6ZXIoSlNDZWxsKiwgRmluYWxpemVyKTsKKyAgICB2b2lk
IGFkZENvbXBpbGVkQ29kZShFeGVjdXRhYmxlQmFzZSopOworCisgICAgdm9pZCBub3RpZnlJc1Nh
ZmVUb0NvbGxlY3QoKSB7IG1faXNTYWZlVG9Db2xsZWN0ID0gdHJ1ZTsgfQorICAgIGJvb2wgaXNT
YWZlVG9Db2xsZWN0KCkgY29uc3QgeyByZXR1cm4gbV9pc1NhZmVUb0NvbGxlY3Q7IH0KKworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29sbGVjdEFsbEdhcmJhZ2UoKTsKKyAgICBib29sIHNo
b3VsZENvbGxlY3QoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvbGxlY3QoSGVhcE9w
ZXJhdGlvbiBjb2xsZWN0aW9uVHlwZSA9IEFueUNvbGxlY3Rpb24pOworICAgIGJvb2wgY29sbGVj
dElmTmVjZXNzYXJ5T3JEZWZlcigpOyAvLyBSZXR1cm5zIHRydWUgaWYgaXQgZGlkIGNvbGxlY3Qu
CisKKyAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplX3QgY29zdCk7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRBYmFuZG9uZWRPYmplY3RHcmFwaCgpOworCisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcm90ZWN0KEpTVmFsdWUpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIGJvb2wgdW5wcm90ZWN0KEpTVmFsdWUpOyAvLyBUcnVlIHdoZW4gdGhlIHByb3RlY3Qg
Y291bnQgZHJvcHMgdG8gMC4KKyAgICAKKyAgICBzaXplX3QgZXh0cmFTaXplKCk7IC8vIGV4dHJh
IG1lbW9yeSB1c2FnZSBvdXRzaWRlIG9mIHBhZ2VzIGFsbG9jYXRlZCBieSB0aGUgaGVhcAorICAg
IEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBzaXplKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c2l6ZV90IGNhcGFjaXR5KCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IG9iamVjdENv
dW50KCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGdsb2JhbE9iamVjdENvdW50KCk7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IHByb3RlY3RlZE9iamVjdENvdW50KCk7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IHByb3RlY3RlZEdsb2JhbE9iamVjdENvdW50KCk7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGFzc093blB0cjxUeXBlQ291bnRTZXQ+IHByb3RlY3Rl
ZE9iamVjdFR5cGVDb3VudHMoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBQYXNzT3duUHRyPFR5
cGVDb3VudFNldD4gb2JqZWN0VHlwZUNvdW50cygpOworICAgIHZvaWQgc2hvd1N0YXRpc3RpY3Mo
KTsKKworICAgIHZvaWQgcHVzaFRlbXBTb3J0VmVjdG9yKFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXIs
IDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiopOworICAgIHZvaWQgcG9wVGVtcFNvcnRWZWN0b3Io
VmVjdG9yPFZhbHVlU3RyaW5nUGFpciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+Kik7CisKKyAg
ICBIYXNoU2V0PE1hcmtlZEFyZ3VtZW50QnVmZmVyKj4mIG1hcmtMaXN0U2V0KCk7CisgICAgCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlw
ZSBmb3JFYWNoUHJvdGVjdGVkQ2VsbChGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4gdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlwZSBmb3JFYWNoUHJvdGVjdGVkQ2Vs
bCgpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENvZGVCbG9j
ayhGdW5jdG9yJik7CisKKyAgICBIYW5kbGVTZXQqIGhhbmRsZVNldCgpIHsgcmV0dXJuICZtX2hh
bmRsZVNldDsgfQorICAgIEhhbmRsZVN0YWNrKiBoYW5kbGVTdGFjaygpIHsgcmV0dXJuICZtX2hh
bmRsZVN0YWNrOyB9CisKKyAgICB2b2lkIHdpbGxTdGFydEl0ZXJhdGluZygpOworICAgIHZvaWQg
ZGlkRmluaXNoSXRlcmF0aW5nKCk7CisgICAgdm9pZCBnZXRDb25zZXJ2YXRpdmVSZWdpc3RlclJv
b3RzKEhhc2hTZXQ8SlNDZWxsKj4mIHJvb3RzKTsKKworICAgIGRvdWJsZSBsYXN0RnVsbEdDTGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RnVsbEdDTGVuZ3RoOyB9CisgICAgZG91YmxlIGxh
c3RFZGVuR0NMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xhc3RFZGVuR0NMZW5ndGg7IH0KKyAg
ICB2b2lkIGluY3JlYXNlTGFzdEZ1bGxHQ0xlbmd0aChkb3VibGUgYW1vdW50KSB7IG1fbGFzdEZ1
bGxHQ0xlbmd0aCArPSBhbW91bnQ7IH0KIAotICAgICAgICBCbG9ja0FsbG9jYXRvciYgYmxvY2tB
bGxvY2F0b3IoKTsKLSAgICAgICAgU3RydWN0dXJlSURUYWJsZSYgc3RydWN0dXJlSURUYWJsZSgp
IHsgcmV0dXJuIG1fc3RydWN0dXJlSURUYWJsZTsgfQorICAgIHNpemVfdCBzaXplQmVmb3JlTGFz
dEVkZW5Db2xsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zaXplQmVmb3JlTGFzdEVkZW5Db2xs
ZWN0OyB9CisgICAgc2l6ZV90IHNpemVBZnRlckxhc3RFZGVuQ29sbGVjdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fc2l6ZUFmdGVyTGFzdEVkZW5Db2xsZWN0OyB9CisgICAgc2l6ZV90IHNpemVCZWZv
cmVMYXN0RnVsbENvbGxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3NpemVCZWZvcmVMYXN0RnVs
bENvbGxlY3Q7IH0KKyAgICBzaXplX3Qgc2l6ZUFmdGVyTGFzdEZ1bGxDb2xsZWN0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9zaXplQWZ0ZXJMYXN0RnVsbENvbGxlY3Q7IH0KKworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgZGVsZXRlQWxsQ29tcGlsZWRDb2RlKCk7CisgICAgdm9pZCBkZWxldGVB
bGxVbmxpbmtlZEZ1bmN0aW9uQ29kZSgpOworCisgICAgdm9pZCBkaWRBbGxvY2F0ZShzaXplX3Qp
OworICAgIHZvaWQgZGlkQWJhbmRvbihzaXplX3QpOworCisgICAgYm9vbCBpc1BhZ2VkT3V0KGRv
dWJsZSBkZWFkbGluZSk7CisgICAgCisgICAgY29uc3QgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0
dWJSb3V0aW5lcygpIHsgcmV0dXJuIG1faml0U3R1YlJvdXRpbmVzOyB9CisgICAgCisgICAgdm9p
ZCBhZGRSZWZlcmVuY2UoSlNDZWxsKiwgQXJyYXlCdWZmZXIqKTsKKyAgICAKKyAgICBib29sIGlz
RGVmZXJyZWQoKSBjb25zdCB7IHJldHVybiAhIW1fZGVmZXJyYWxEZXB0aCB8fCBPcHRpb25zOjpk
aXNhYmxlR0MoKTsgfQorCisgICAgQmxvY2tBbGxvY2F0b3ImIGJsb2NrQWxsb2NhdG9yKCk7Cisg
ICAgU3RydWN0dXJlSURUYWJsZSYgc3RydWN0dXJlSURUYWJsZSgpIHsgcmV0dXJuIG1fc3RydWN0
dXJlSURUYWJsZTsgfQogCiAjaWYgVVNFKENGKQogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB2b2lkIHJlbGVhc2VTb29uKFJldGFpblB0cjxUPiYmKTsKICNlbmRpZgogCi0gICAgICAgIHZv
aWQgcmVtb3ZlQ29kZUJsb2NrKENvZGVCbG9jayogY2IpIHsgbV9jb2RlQmxvY2tzLnJlbW92ZShj
Yik7IH0KKyAgICB2b2lkIHJlbW92ZUNvZGVCbG9jayhDb2RlQmxvY2sqIGNiKSB7IG1fY29kZUJs
b2Nrcy5yZW1vdmUoY2IpOyB9CiAKLSAgICBwcml2YXRlOgotICAgICAgICBmcmllbmQgY2xhc3Mg
Q29kZUJsb2NrOwotICAgICAgICBmcmllbmQgY2xhc3MgQ29waWVkQmxvY2s7Ci0gICAgICAgIGZy
aWVuZCBjbGFzcyBEZWZlckdDOwotICAgICAgICBmcmllbmQgY2xhc3MgRGVmZXJHQ0ZvckFXaGls
ZTsKLSAgICAgICAgZnJpZW5kIGNsYXNzIERlbGF5ZWRSZWxlYXNlU2NvcGU7Ci0gICAgICAgIGZy
aWVuZCBjbGFzcyBHQ0F3YXJlSklUU3R1YlJvdXRpbmU7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBI
YW5kbGVTZXQ7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViUm91dGluZTsKLSAgICAgICAg
ZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLSAgICAgICAgZnJpZW5kIGNsYXNz
IE1hcmtlZFNwYWNlOwotICAgICAgICBmcmllbmQgY2xhc3MgTWFya2VkQWxsb2NhdG9yOwotICAg
ICAgICBmcmllbmQgY2xhc3MgTWFya2VkQmxvY2s7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBDb3Bp
ZWRTcGFjZTsKLSAgICAgICAgZnJpZW5kIGNsYXNzIENvcHlWaXNpdG9yOwotICAgICAgICBmcmll
bmQgY2xhc3MgUmVjdXJzaXZlQWxsb2NhdGlvblNjb3BlOwotICAgICAgICBmcmllbmQgY2xhc3Mg
U2xvdFZpc2l0b3I7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBTdXBlclJlZ2lvbjsKLSAgICAgICAg
ZnJpZW5kIGNsYXNzIEluY3JlbWVudGFsU3dlZXBlcjsKLSAgICAgICAgZnJpZW5kIGNsYXNzIEhl
YXBTdGF0aXN0aWNzOwotICAgICAgICBmcmllbmQgY2xhc3MgVk07Ci0gICAgICAgIGZyaWVuZCBj
bGFzcyBXZWFrU2V0OwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBmcmllbmQgdm9pZCog
YWxsb2NhdGVDZWxsKEhlYXAmKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJpZW5k
IHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiwgc2l6ZV90KTsKLQotICAgICAgICB2b2lkKiBhbGxv
Y2F0ZVdpdGhJbW1vcnRhbFN0cnVjdHVyZURlc3RydWN0b3Ioc2l6ZV90KTsgLy8gRm9yIHVzZSB3
aXRoIHNwZWNpYWwgb2JqZWN0cyB3aG9zZSBTdHJ1Y3R1cmVzIG5ldmVyIGRpZS4KLSAgICAgICAg
dm9pZCogYWxsb2NhdGVXaXRoTm9ybWFsRGVzdHJ1Y3RvcihzaXplX3QpOyAvLyBGb3IgdXNlIHdp
dGggb2JqZWN0cyB0aGF0IGluaGVyaXQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBmcm9tIEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LgotICAgICAgICB2b2lkKiBhbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9y
KHNpemVfdCk7IC8vIEZvciB1c2Ugd2l0aCBvYmplY3RzIHdpdGhvdXQgZGVzdHJ1Y3RvcnMuCi0K
LSAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtaW5FeHRyYUNvc3QgPSAyNTY7Ci0gICAgICAg
IHN0YXRpYyBjb25zdCBzaXplX3QgbWF4RXh0cmFDb3N0ID0gMTAyNCAqIDEwMjQ7Ci0gICAgICAg
IAotICAgICAgICBjbGFzcyBGaW5hbGl6ZXJPd25lciA6IHB1YmxpYyBXZWFrSGFuZGxlT3duZXIg
ewotICAgICAgICAgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9p
ZCogY29udGV4dCkgb3ZlcnJpZGU7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgYm9vbCBpc1ZhbGlkQWxsb2NhdGlvbihzaXplX3QpOwotICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5Q29zdFNsb3dDYXNlKHNpemVfdCk7Ci0KLSAg
ICAgICAgdm9pZCBzdXNwZW5kQ29tcGlsZXJUaHJlYWRzKCk7Ci0gICAgICAgIHZvaWQgd2lsbFN0
YXJ0Q29sbGVjdGlvbihIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlKTsKLSAgICAgICAgdm9p
ZCBkZWxldGVPbGRDb2RlKGRvdWJsZSBnY1N0YXJ0VGltZSk7Ci0gICAgICAgIHZvaWQgZmx1c2hP
bGRTdHJ1Y3R1cmVJRFRhYmxlcygpOwotICAgICAgICB2b2lkIGZsdXNoV3JpdGVCYXJyaWVyQnVm
ZmVyKCk7Ci0gICAgICAgIHZvaWQgc3RvcEFsbG9jYXRpb24oKTsKLQotICAgICAgICB2b2lkIG1h
cmtSb290cygpOwotICAgICAgICB2b2lkIGdhdGhlclN0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9v
dHMmLCB2b2lkKiogZHVtbXkpOwotICAgICAgICB2b2lkIGdhdGhlckpTU3RhY2tSb290cyhDb25z
ZXJ2YXRpdmVSb290cyYpOwotICAgICAgICB2b2lkIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhD
b25zZXJ2YXRpdmVSb290cyYpOwotICAgICAgICB2b2lkIGNsZWFyTGl2ZW5lc3NEYXRhKCk7Ci0g
ICAgICAgIHZvaWQgdmlzaXRTbWFsbFN0cmluZ3MoKTsKLSAgICAgICAgdm9pZCB2aXNpdENvbnNl
cnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7Ci0gICAgICAgIHZvaWQgdmlzaXRDb21w
aWxlcldvcmtsaXN0cygpOwotICAgICAgICB2b2lkIHZpc2l0UHJvdGVjdGVkT2JqZWN0cyhIZWFw
Um9vdFZpc2l0b3ImKTsKLSAgICAgICAgdm9pZCB2aXNpdFRlbXBTb3J0VmVjdG9ycyhIZWFwUm9v
dFZpc2l0b3ImKTsKLSAgICAgICAgdm9pZCB2aXNpdEFyZ3VtZW50QnVmZmVycyhIZWFwUm9vdFZp
c2l0b3ImKTsKLSAgICAgICAgdm9pZCB2aXNpdEV4Y2VwdGlvbihIZWFwUm9vdFZpc2l0b3ImKTsK
LSAgICAgICAgdm9pZCB2aXNpdFN0cm9uZ0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAg
ICAgIHZvaWQgdmlzaXRIYW5kbGVTdGFjayhIZWFwUm9vdFZpc2l0b3ImKTsKLSAgICAgICAgdm9p
ZCB0cmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMoKTsKLSAgICAgICAgdm9pZCBjb252
ZXJnZSgpOwotICAgICAgICB2b2lkIHZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7
Ci0gICAgICAgIHZvaWQgY2xlYXJSZW1lbWJlcmVkU2V0KFZlY3Rvcjxjb25zdCBKU0NlbGwqPiYp
OwotICAgICAgICB2b2lkIHVwZGF0ZU9iamVjdENvdW50cygpOwotICAgICAgICB2b2lkIHJlc2V0
VmlzaXRvcnMoKTsKLQotICAgICAgICB2b2lkIHJlYXBXZWFrSGFuZGxlcygpOwotICAgICAgICB2
b2lkIHN3ZWVwQXJyYXlCdWZmZXJzKCk7Ci0gICAgICAgIHZvaWQgc25hcHNob3RNYXJrZWRTcGFj
ZSgpOwotICAgICAgICB2b2lkIGRlbGV0ZVNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7Ci0gICAgICAg
IHZvaWQgbm90aWZ5SW5jcmVtZW50YWxTd2VlcGVyKCk7Ci0gICAgICAgIHZvaWQgcmVtZW1iZXJD
dXJyZW50bHlFeGVjdXRpbmdDb2RlQmxvY2tzKCk7Ci0gICAgICAgIHZvaWQgcmVzZXRBbGxvY2F0
b3JzKCk7Ci0gICAgICAgIHZvaWQgY29weUJhY2tpbmdTdG9yZXMoKTsKLSAgICAgICAgdm9pZCBo
YXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKLSAgICAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9u
YWxGaW5hbGl6ZXJzKCk7Ci0gICAgICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUo
KTsKLSAgICAgICAgdm9pZCB1cGRhdGVBbGxvY2F0aW9uTGltaXRzKCk7Ci0gICAgICAgIHZvaWQg
ZGlkRmluaXNoQ29sbGVjdGlvbihkb3VibGUgZ2NTdGFydFRpbWUpOwotICAgICAgICB2b2lkIHJl
c3VtZUNvbXBpbGVyVGhyZWFkcygpOwotICAgICAgICB2b2lkIHpvbWJpZnlEZWFkT2JqZWN0cygp
OwotICAgICAgICB2b2lkIG1hcmtEZWFkT2JqZWN0cygpOwotCi0gICAgICAgIGJvb2wgc2hvdWxk
RG9GdWxsQ29sbGVjdGlvbihIZWFwT3BlcmF0aW9uIHJlcXVlc3RlZENvbGxlY3Rpb25UeXBlKSBj
b25zdDsKLSAgICAgICAgc2l6ZV90IHNpemVBZnRlckNvbGxlY3QoKTsKLQotICAgICAgICBKU1N0
YWNrJiBzdGFjaygpOwotICAgICAgICAKLSAgICAgICAgdm9pZCBpbmNyZW1lbnREZWZlcnJhbERl
cHRoKCk7Ci0gICAgICAgIHZvaWQgZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOwotICAgICAgICB2
b2lkIGRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkKCk7Ci0KLSAgICAgICAgY29u
c3QgSGVhcFR5cGUgbV9oZWFwVHlwZTsKLSAgICAgICAgY29uc3Qgc2l6ZV90IG1fcmFtU2l6ZTsK
LSAgICAgICAgY29uc3Qgc2l6ZV90IG1fbWluQnl0ZXNQZXJDeWNsZTsKLSAgICAgICAgc2l6ZV90
IG1fc2l6ZUFmdGVyTGFzdENvbGxlY3Q7Ci0gICAgICAgIHNpemVfdCBtX3NpemVBZnRlckxhc3RG
dWxsQ29sbGVjdDsKLSAgICAgICAgc2l6ZV90IG1fc2l6ZUJlZm9yZUxhc3RGdWxsQ29sbGVjdDsK
LSAgICAgICAgc2l6ZV90IG1fc2l6ZUFmdGVyTGFzdEVkZW5Db2xsZWN0OwotICAgICAgICBzaXpl
X3QgbV9zaXplQmVmb3JlTGFzdEVkZW5Db2xsZWN0OwotCi0gICAgICAgIHNpemVfdCBtX2J5dGVz
QWxsb2NhdGVkVGhpc0N5Y2xlOwotICAgICAgICBzaXplX3QgbV9ieXRlc0FiYW5kb25lZFNpbmNl
TGFzdEZ1bGxDb2xsZWN0OwotICAgICAgICBzaXplX3QgbV9tYXhFZGVuU2l6ZTsKLSAgICAgICAg
c2l6ZV90IG1fbWF4SGVhcFNpemU7Ci0gICAgICAgIGJvb2wgbV9zaG91bGREb0Z1bGxDb2xsZWN0
aW9uOwotICAgICAgICBzaXplX3QgbV90b3RhbEJ5dGVzVmlzaXRlZDsKLSAgICAgICAgc2l6ZV90
IG1fdG90YWxCeXRlc0NvcGllZDsKLSAgICAgICAgCi0gICAgICAgIEhlYXBPcGVyYXRpb24gbV9v
cGVyYXRpb25JblByb2dyZXNzOwotICAgICAgICBCbG9ja0FsbG9jYXRvciBtX2Jsb2NrQWxsb2Nh
dG9yOwotICAgICAgICBTdHJ1Y3R1cmVJRFRhYmxlIG1fc3RydWN0dXJlSURUYWJsZTsKLSAgICAg
ICAgTWFya2VkU3BhY2UgbV9vYmplY3RTcGFjZTsKLSAgICAgICAgQ29waWVkU3BhY2UgbV9zdG9y
YWdlU3BhY2U7Ci0gICAgICAgIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PEFycmF5QnVmZmVyPiBt
X2FycmF5QnVmZmVyczsKLSAgICAgICAgc2l6ZV90IG1fZXh0cmFNZW1vcnlVc2FnZTsKLQotICAg
ICAgICBIYXNoU2V0PGNvbnN0IEpTQ2VsbCo+IG1fY29weWluZ1JlbWVtYmVyZWRTZXQ7Ci0KLSAg
ICAgICAgUHJvdGVjdENvdW50U2V0IG1fcHJvdGVjdGVkVmFsdWVzOwotICAgICAgICBWZWN0b3I8
VmVjdG9yPFZhbHVlU3RyaW5nUGFpciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+Kj4gbV90ZW1w
U29ydGluZ1ZlY3RvcnM7Ci0gICAgICAgIE93blB0cjxIYXNoU2V0PE1hcmtlZEFyZ3VtZW50QnVm
ZmVyKj4+IG1fbWFya0xpc3RTZXQ7Ci0KLSAgICAgICAgTWFjaGluZVRocmVhZHMgbV9tYWNoaW5l
VGhyZWFkczsKLSAgICAgICAgCi0gICAgICAgIEdDVGhyZWFkU2hhcmVkRGF0YSBtX3NoYXJlZERh
dGE7Ci0gICAgICAgIFNsb3RWaXNpdG9yIG1fc2xvdFZpc2l0b3I7Ci0gICAgICAgIENvcHlWaXNp
dG9yIG1fY29weVZpc2l0b3I7Ci0KLSAgICAgICAgSGFuZGxlU2V0IG1faGFuZGxlU2V0OwotICAg
ICAgICBIYW5kbGVTdGFjayBtX2hhbmRsZVN0YWNrOwotICAgICAgICBDb2RlQmxvY2tTZXQgbV9j
b2RlQmxvY2tzOwotICAgICAgICBKSVRTdHViUm91dGluZVNldCBtX2ppdFN0dWJSb3V0aW5lczsK
LSAgICAgICAgRmluYWxpemVyT3duZXIgbV9maW5hbGl6ZXJPd25lcjsKLSAgICAgICAgCi0gICAg
ICAgIGJvb2wgbV9pc1NhZmVUb0NvbGxlY3Q7Ci0KLSAgICAgICAgV3JpdGVCYXJyaWVyQnVmZmVy
IG1fd3JpdGVCYXJyaWVyQnVmZmVyOwotCi0gICAgICAgIFZNKiBtX3ZtOwotICAgICAgICBkb3Vi
bGUgbV9sYXN0RnVsbEdDTGVuZ3RoOwotICAgICAgICBkb3VibGUgbV9sYXN0RWRlbkdDTGVuZ3Ro
OwotICAgICAgICBkb3VibGUgbV9sYXN0Q29kZURpc2NhcmRUaW1lOwotCi0gICAgICAgIERvdWJs
eUxpbmtlZExpc3Q8RXhlY3V0YWJsZUJhc2U+IG1fY29tcGlsZWRDb2RlOwotICAgICAgICAKLSAg
ICAgICAgUmVmUHRyPEdDQWN0aXZpdHlDYWxsYmFjaz4gbV9mdWxsQWN0aXZpdHlDYWxsYmFjazsK
LSAgICAgICAgUmVmUHRyPEdDQWN0aXZpdHlDYWxsYmFjaz4gbV9lZGVuQWN0aXZpdHlDYWxsYmFj
azsKLSAgICAgICAgT3duUHRyPEluY3JlbWVudGFsU3dlZXBlcj4gbV9zd2VlcGVyOwotICAgICAg
ICBWZWN0b3I8TWFya2VkQmxvY2sqPiBtX2Jsb2NrU25hcHNob3Q7Ci0gICAgICAgIAotICAgICAg
ICB1bnNpZ25lZCBtX2RlZmVycmFsRGVwdGg7Ci0gICAgfTsKK3ByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIENvZGVCbG9jazsKKyAgICBmcmllbmQgY2xhc3MgQ29waWVkQmxvY2s7CisgICAgZnJp
ZW5kIGNsYXNzIERlZmVyR0M7CisgICAgZnJpZW5kIGNsYXNzIERlZmVyR0NGb3JBV2hpbGU7Cisg
ICAgZnJpZW5kIGNsYXNzIERlbGF5ZWRSZWxlYXNlU2NvcGU7CisgICAgZnJpZW5kIGNsYXNzIEdD
QXdhcmVKSVRTdHViUm91dGluZTsKKyAgICBmcmllbmQgY2xhc3MgSGFuZGxlU2V0OworICAgIGZy
aWVuZCBjbGFzcyBKSVRTdHViUm91dGluZTsKKyAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRz
RXh0cmFjdG9yOworICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRTcGFjZTsKKyAgICBmcmllbmQgY2xh
c3MgTWFya2VkQWxsb2NhdG9yOworICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9jazsKKyAgICBm
cmllbmQgY2xhc3MgQ29waWVkU3BhY2U7CisgICAgZnJpZW5kIGNsYXNzIENvcHlWaXNpdG9yOwor
ICAgIGZyaWVuZCBjbGFzcyBSZWN1cnNpdmVBbGxvY2F0aW9uU2NvcGU7CisgICAgZnJpZW5kIGNs
YXNzIFNsb3RWaXNpdG9yOworICAgIGZyaWVuZCBjbGFzcyBTdXBlclJlZ2lvbjsKKyAgICBmcmll
bmQgY2xhc3MgSW5jcmVtZW50YWxTd2VlcGVyOworICAgIGZyaWVuZCBjbGFzcyBIZWFwU3RhdGlz
dGljczsKKyAgICBmcmllbmQgY2xhc3MgVk07CisgICAgZnJpZW5kIGNsYXNzIFdlYWtTZXQ7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJpZW5kIHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJik7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJpZW5kIHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFw
Jiwgc2l6ZV90KTsKKworICAgIHZvaWQqIGFsbG9jYXRlV2l0aEltbW9ydGFsU3RydWN0dXJlRGVz
dHJ1Y3RvcihzaXplX3QpOyAvLyBGb3IgdXNlIHdpdGggc3BlY2lhbCBvYmplY3RzIHdob3NlIFN0
cnVjdHVyZXMgbmV2ZXIgZGllLgorICAgIHZvaWQqIGFsbG9jYXRlV2l0aE5vcm1hbERlc3RydWN0
b3Ioc2l6ZV90KTsgLy8gRm9yIHVzZSB3aXRoIG9iamVjdHMgdGhhdCBpbmhlcml0IGRpcmVjdGx5
IG9yIGluZGlyZWN0bHkgZnJvbSBKU0Rlc3RydWN0aWJsZU9iamVjdC4KKyAgICB2b2lkKiBhbGxv
Y2F0ZVdpdGhvdXREZXN0cnVjdG9yKHNpemVfdCk7IC8vIEZvciB1c2Ugd2l0aCBvYmplY3RzIHdp
dGhvdXQgZGVzdHJ1Y3RvcnMuCiAKLSAgICBzdHJ1Y3QgTWFya2VkQmxvY2tTbmFwc2hvdEZ1bmN0
b3IgOiBwdWJsaWMgTWFya2VkQmxvY2s6OlZvaWRGdW5jdG9yIHsKLSAgICAgICAgTWFya2VkQmxv
Y2tTbmFwc2hvdEZ1bmN0b3IoVmVjdG9yPE1hcmtlZEJsb2NrKj4mIGJsb2NrcykgCi0gICAgICAg
ICAgICA6IG1faW5kZXgoMCkgCi0gICAgICAgICAgICAsIG1fYmxvY2tzKGJsb2NrcykKLSAgICAg
ICAgewotICAgICAgICB9Ci0gICAgCi0gICAgICAgIHZvaWQgb3BlcmF0b3IoKShNYXJrZWRCbG9j
ayogYmxvY2spIHsgbV9ibG9ja3NbbV9pbmRleCsrXSA9IGJsb2NrOyB9CisgICAgc3RhdGljIGNv
bnN0IHNpemVfdCBtaW5FeHRyYUNvc3QgPSAyNTY7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBt
YXhFeHRyYUNvc3QgPSAxMDI0ICogMTAyNDsKICAgICAKLSAgICAgICAgc2l6ZV90IG1faW5kZXg7
Ci0gICAgICAgIFZlY3RvcjxNYXJrZWRCbG9jayo+JiBtX2Jsb2NrczsKKyAgICBjbGFzcyBGaW5h
bGl6ZXJPd25lciA6IHB1YmxpYyBXZWFrSGFuZGxlT3duZXIgeworICAgICAgICB2aXJ0dWFsIHZv
aWQgZmluYWxpemUoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0KSBvdmVycmlkZTsKICAg
ICB9OwogCi0gICAgaW5saW5lIGJvb2wgSGVhcDo6c2hvdWxkQ29sbGVjdCgpCi0gICAgewotICAg
ICAgICBpZiAoaXNEZWZlcnJlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBpZiAoT3B0aW9uczo6Z2NNYXhIZWFwU2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIG1fYnl0
ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPiBPcHRpb25zOjpnY01heEhlYXBTaXplKCkgJiYgbV9pc1Nh
ZmVUb0NvbGxlY3QgJiYgbV9vcGVyYXRpb25JblByb2dyZXNzID09IE5vT3BlcmF0aW9uOwotICAg
ICAgICByZXR1cm4gbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSA+IG1fbWF4RWRlblNpemUgJiYg
bV9pc1NhZmVUb0NvbGxlY3QgJiYgbV9vcGVyYXRpb25JblByb2dyZXNzID09IE5vT3BlcmF0aW9u
OwotICAgIH0KLQotICAgIGJvb2wgSGVhcDo6aXNCdXN5KCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgIT0gTm9PcGVyYXRpb247Ci0gICAgfQotCi0gICAgYm9v
bCBIZWFwOjppc0NvbGxlY3RpbmcoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3BlcmF0aW9u
SW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVjdGlvbiB8fCBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0g
RWRlbkNvbGxlY3Rpb247Ci0gICAgfQotCi0gICAgaW5saW5lIEhlYXAqIEhlYXA6OmhlYXAoY29u
c3QgSlNDZWxsKiBjZWxsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE1hcmtlZEJsb2NrOjpibG9j
a0ZvcihjZWxsKS0+aGVhcCgpOwotICAgIH0KLQotICAgIGlubGluZSBIZWFwKiBIZWFwOjpoZWFw
KGNvbnN0IEpTVmFsdWUgdikKLSAgICB7Ci0gICAgICAgIGlmICghdi5pc0NlbGwoKSkKLSAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gaGVhcCh2LmFzQ2VsbCgpKTsKLSAgICB9
Ci0KLSAgICBpbmxpbmUgYm9vbCBIZWFwOjppc0xpdmUoY29uc3Qgdm9pZCogY2VsbCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmlzTGl2ZUNlbGwo
Y2VsbCk7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSGVhcDo6aXNNYXJrZWQoY29uc3Qgdm9p
ZCogY2VsbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2Vs
bCktPmlzTWFya2VkKGNlbGwpOwotICAgIH0KLQotICAgIGlubGluZSBib29sIEhlYXA6OnRlc3RB
bmRTZXRNYXJrZWQoY29uc3Qgdm9pZCogY2VsbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBNYXJr
ZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPnRlc3RBbmRTZXRNYXJrZWQoY2VsbCk7Ci0gICAgfQot
Ci0gICAgaW5saW5lIHZvaWQgSGVhcDo6c2V0TWFya2VkKGNvbnN0IHZvaWQqIGNlbGwpCi0gICAg
ewotICAgICAgICBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPnNldE1hcmtlZChjZWxsKTsK
LSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKQot
ICAgIHsKLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpIHx8IEVOQUJMRShHR0Mp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2Vu
ZGlmCi0gICAgfQorICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNWYWxpZEFsbG9jYXRpb24o
c2l6ZV90KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5Q29z
dFNsb3dDYXNlKHNpemVfdCk7CiAKLSAgICBpbmxpbmUgdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXIo
Y29uc3QgSlNDZWxsKiBmcm9tLCBKU1ZhbHVlIHRvKQotICAgIHsKLSNpZiBFTkFCTEUoV1JJVEVf
QkFSUklFUl9QUk9GSUxJTkcpCi0gICAgICAgIFdyaXRlQmFycmllckNvdW50ZXJzOjpjb3VudFdy
aXRlQmFycmllcigpOwotI2VuZGlmCi0gICAgICAgIGlmICghdG8uaXNDZWxsKCkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIHdyaXRlQmFycmllcihmcm9tLCB0by5hc0NlbGwoKSk7Ci0g
ICAgfQotCi0gICAgaW5saW5lIHZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVf
dCBjb3N0KQotICAgIHsKLSAgICAgICAgaWYgKGNvc3QgPiBtaW5FeHRyYUNvc3QpIAotICAgICAg
ICAgICAgcmVwb3J0RXh0cmFNZW1vcnlDb3N0U2xvd0Nhc2UoY29zdCk7Ci0gICAgfQotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVy
blR5cGUgSGVhcDo6Zm9yRWFjaFByb3RlY3RlZENlbGwoRnVuY3RvciYgZnVuY3RvcikKLSAgICB7
Ci0gICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fcHJvdGVjdGVkVmFsdWVzKQotICAgICAgICAg
ICAgZnVuY3RvcihwYWlyLmtleSk7Ci0gICAgICAgIG1faGFuZGxlU2V0LmZvckVhY2hTdHJvbmdI
YW5kbGUoZnVuY3RvciwgbV9wcm90ZWN0ZWRWYWx1ZXMpOwotCi0gICAgICAgIHJldHVybiBmdW5j
dG9yLnJldHVyblZhbHVlKCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4gaW5saW5lIHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgSGVhcDo6Zm9yRWFjaFByb3Rl
Y3RlZENlbGwoKQotICAgIHsKLSAgICAgICAgRnVuY3RvciBmdW5jdG9yOwotICAgICAgICByZXR1
cm4gZm9yRWFjaFByb3RlY3RlZENlbGwoZnVuY3Rvcik7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgSGVhcDo6Zm9yRWFjaENvZGVCbG9jayhGdW5j
dG9yJiBmdW5jdG9yKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY29kZUJsb2Nrcy5pdGVyYXRl
PEZ1bmN0b3I+KGZ1bmN0b3IpOwotICAgIH0KLQotICAgIGlubGluZSB2b2lkKiBIZWFwOjphbGxv
Y2F0ZVdpdGhOb3JtYWxEZXN0cnVjdG9yKHNpemVfdCBieXRlcykKLSAgICB7Ci0jaWYgRU5BQkxF
KEFMTE9DQVRJT05fTE9HR0lORykKLSAgICAgICAgZGF0YUxvZ0YoIkpTQyBHQyBhbGxvY2F0aW5n
ICVsdSBieXRlcyB3aXRoIG5vcm1hbCBkZXN0cnVjdG9yLlxuIiwgYnl0ZXMpOwotI2VuZGlmCi0g
ICAgICAgIEFTU0VSVChpc1ZhbGlkQWxsb2NhdGlvbihieXRlcykpOwotICAgICAgICByZXR1cm4g
bV9vYmplY3RTcGFjZS5hbGxvY2F0ZVdpdGhOb3JtYWxEZXN0cnVjdG9yKGJ5dGVzKTsKLSAgICB9
Ci0gICAgCi0gICAgaW5saW5lIHZvaWQqIEhlYXA6OmFsbG9jYXRlV2l0aEltbW9ydGFsU3RydWN0
dXJlRGVzdHJ1Y3RvcihzaXplX3QgYnl0ZXMpCi0gICAgewotI2lmIEVOQUJMRShBTExPQ0FUSU9O
X0xPR0dJTkcpCi0gICAgICAgIGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGluZyAlbHUgYnl0ZXMg
d2l0aCBpbW1vcnRhbCBzdHJ1Y3R1cmUgZGVzdHJ1Y3Rvci5cbiIsIGJ5dGVzKTsKLSNlbmRpZgot
ICAgICAgICBBU1NFUlQoaXNWYWxpZEFsbG9jYXRpb24oYnl0ZXMpKTsKLSAgICAgICAgcmV0dXJu
IG1fb2JqZWN0U3BhY2UuYWxsb2NhdGVXaXRoSW1tb3J0YWxTdHJ1Y3R1cmVEZXN0cnVjdG9yKGJ5
dGVzKTsKLSAgICB9Ci0gICAgCi0gICAgaW5saW5lIHZvaWQqIEhlYXA6OmFsbG9jYXRlV2l0aG91
dERlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKQotICAgIHsKLSNpZiBFTkFCTEUoQUxMT0NBVElPTl9M
T0dHSU5HKQotICAgICAgICBkYXRhTG9nRigiSlNDIEdDIGFsbG9jYXRpbmcgJWx1IGJ5dGVzIHdp
dGhvdXQgZGVzdHJ1Y3Rvci5cbiIsIGJ5dGVzKTsKLSNlbmRpZgotICAgICAgICBBU1NFUlQoaXNW
YWxpZEFsbG9jYXRpb24oYnl0ZXMpKTsKLSAgICAgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuYWxs
b2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihieXRlcyk7Ci0gICAgfQotICAgCi0gICAgaW5saW5lIENo
ZWNrZWRCb29sZWFuIEhlYXA6OnRyeUFsbG9jYXRlU3RvcmFnZShKU0NlbGwqIGludGVuZGVkT3du
ZXIsIHNpemVfdCBieXRlcywgdm9pZCoqIG91dFB0cikKLSAgICB7Ci0gICAgICAgIENoZWNrZWRC
b29sZWFuIHJlc3VsdCA9IG1fc3RvcmFnZVNwYWNlLnRyeUFsbG9jYXRlKGJ5dGVzLCBvdXRQdHIp
OwotI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCi0gICAgICAgIGRhdGFMb2dGKCJKU0Mg
R0MgYWxsb2NhdGluZyAlbHUgYnl0ZXMgb2Ygc3RvcmFnZSBmb3IgJXA6ICVwLlxuIiwgYnl0ZXMs
IGludGVuZGVkT3duZXIsICpvdXRQdHIpOwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGlu
dGVuZGVkT3duZXIpOwotI2VuZGlmCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAg
IAotICAgIGlubGluZSBDaGVja2VkQm9vbGVhbiBIZWFwOjp0cnlSZWFsbG9jYXRlU3RvcmFnZShK
U0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqKiBwdHIsIHNpemVfdCBvbGRTaXplLCBzaXplX3Qg
bmV3U2l6ZSkKLSAgICB7Ci0jaWYgRU5BQkxFKEFMTE9DQVRJT05fTE9HR0lORykKLSAgICAgICAg
dm9pZCogb2xkUHRyID0gKnB0cjsKLSNlbmRpZgotICAgICAgICBDaGVja2VkQm9vbGVhbiByZXN1
bHQgPSBtX3N0b3JhZ2VTcGFjZS50cnlSZWFsbG9jYXRlKHB0ciwgb2xkU2l6ZSwgbmV3U2l6ZSk7
Ci0jaWYgRU5BQkxFKEFMTE9DQVRJT05fTE9HR0lORykKLSAgICAgICAgZGF0YUxvZ0YoIkpTQyBH
QyByZWFsbG9jYXRpbmcgJWx1IC0+ICVsdSBieXRlcyBvZiBzdG9yYWdlIGZvciAlcDogJXAgLT4g
JXAuXG4iLCBvbGRTaXplLCBuZXdTaXplLCBpbnRlbmRlZE93bmVyLCBvbGRQdHIsICpwdHIpOwot
I2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGludGVuZGVkT3duZXIpOwotI2VuZGlmCi0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgIHZvaWQgc3VzcGVuZENvbXBpbGVyVGhyZWFk
cygpOworICAgIHZvaWQgd2lsbFN0YXJ0Q29sbGVjdGlvbihIZWFwT3BlcmF0aW9uIGNvbGxlY3Rp
b25UeXBlKTsKKyAgICB2b2lkIGRlbGV0ZU9sZENvZGUoZG91YmxlIGdjU3RhcnRUaW1lKTsKKyAg
ICB2b2lkIGZsdXNoT2xkU3RydWN0dXJlSURUYWJsZXMoKTsKKyAgICB2b2lkIGZsdXNoV3JpdGVC
YXJyaWVyQnVmZmVyKCk7CisgICAgdm9pZCBzdG9wQWxsb2NhdGlvbigpOworCisgICAgdm9pZCBt
YXJrUm9vdHMoKTsKKyAgICB2b2lkIGdhdGhlclN0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMm
LCB2b2lkKiogZHVtbXkpOworICAgIHZvaWQgZ2F0aGVySlNTdGFja1Jvb3RzKENvbnNlcnZhdGl2
ZVJvb3RzJik7CisgICAgdm9pZCBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoQ29uc2VydmF0aXZl
Um9vdHMmKTsKKyAgICB2b2lkIGNsZWFyTGl2ZW5lc3NEYXRhKCk7CisgICAgdm9pZCB2aXNpdFNt
YWxsU3RyaW5ncygpOworICAgIHZvaWQgdmlzaXRDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRp
dmVSb290cyYpOworICAgIHZvaWQgdmlzaXRDb21waWxlcldvcmtsaXN0cygpOworICAgIHZvaWQg
dmlzaXRQcm90ZWN0ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRU
ZW1wU29ydFZlY3RvcnMoSGVhcFJvb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdEFyZ3VtZW50
QnVmZmVycyhIZWFwUm9vdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0RXhjZXB0aW9uKEhlYXBS
b290VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRTdHJvbmdIYW5kbGVzKEhlYXBSb290VmlzaXRv
ciYpOworICAgIHZvaWQgdmlzaXRIYW5kbGVTdGFjayhIZWFwUm9vdFZpc2l0b3ImKTsKKyAgICB2
b2lkIHRyYWNlQ29kZUJsb2Nrc0FuZEpJVFN0dWJSb3V0aW5lcygpOworICAgIHZvaWQgY29udmVy
Z2UoKTsKKyAgICB2b2lkIHZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7CisgICAg
dm9pZCBjbGVhclJlbWVtYmVyZWRTZXQoVmVjdG9yPGNvbnN0IEpTQ2VsbCo+Jik7CisgICAgdm9p
ZCB1cGRhdGVPYmplY3RDb3VudHMoKTsKKyAgICB2b2lkIHJlc2V0VmlzaXRvcnMoKTsKKworICAg
IHZvaWQgcmVhcFdlYWtIYW5kbGVzKCk7CisgICAgdm9pZCBzd2VlcEFycmF5QnVmZmVycygpOwor
ICAgIHZvaWQgc25hcHNob3RNYXJrZWRTcGFjZSgpOworICAgIHZvaWQgZGVsZXRlU291cmNlUHJv
dmlkZXJDYWNoZXMoKTsKKyAgICB2b2lkIG5vdGlmeUluY3JlbWVudGFsU3dlZXBlcigpOworICAg
IHZvaWQgcmVtZW1iZXJDdXJyZW50bHlFeGVjdXRpbmdDb2RlQmxvY2tzKCk7CisgICAgdm9pZCBy
ZXNldEFsbG9jYXRvcnMoKTsKKyAgICB2b2lkIGNvcHlCYWNraW5nU3RvcmVzKCk7CisgICAgdm9p
ZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKKyAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25h
bEZpbmFsaXplcnMoKTsKKyAgICB2b2lkIGRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKCk7Cisg
ICAgdm9pZCB1cGRhdGVBbGxvY2F0aW9uTGltaXRzKCk7CisgICAgdm9pZCBkaWRGaW5pc2hDb2xs
ZWN0aW9uKGRvdWJsZSBnY1N0YXJ0VGltZSk7CisgICAgdm9pZCByZXN1bWVDb21waWxlclRocmVh
ZHMoKTsKKyAgICB2b2lkIHpvbWJpZnlEZWFkT2JqZWN0cygpOworICAgIHZvaWQgbWFya0RlYWRP
YmplY3RzKCk7CiAKLSAgICBpbmxpbmUgdm9pZCBIZWFwOjphc2NyaWJlT3duZXIoSlNDZWxsKiBp
bnRlbmRlZE93bmVyLCB2b2lkKiBzdG9yYWdlKQotICAgIHsKLSNpZiBFTkFCTEUoQUxMT0NBVElP
Tl9MT0dHSU5HKQotICAgICAgICBkYXRhTG9nRigiSlNDIEdDIGFzY3JpYmluZyAlcCBhcyBvd25l
ciBvZiBzdG9yYWdlICVwLlxuIiwgaW50ZW5kZWRPd25lciwgc3RvcmFnZSk7Ci0jZWxzZQotICAg
ICAgICBVTlVTRURfUEFSQU0oaW50ZW5kZWRPd25lcik7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShz
dG9yYWdlKTsKLSNlbmRpZgotICAgIH0KKyAgICBib29sIHNob3VsZERvRnVsbENvbGxlY3Rpb24o
SGVhcE9wZXJhdGlvbiByZXF1ZXN0ZWRDb2xsZWN0aW9uVHlwZSkgY29uc3Q7CisgICAgc2l6ZV90
IHNpemVBZnRlckNvbGxlY3QoKTsKIAotICAgIGlubGluZSBCbG9ja0FsbG9jYXRvciYgSGVhcDo6
YmxvY2tBbGxvY2F0b3IoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYmxvY2tBbGxvY2F0b3I7
Ci0gICAgfQorICAgIEpTU3RhY2smIHN0YWNrKCk7CisgICAgCisgICAgdm9pZCBpbmNyZW1lbnRE
ZWZlcnJhbERlcHRoKCk7CisgICAgdm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7CisgICAg
dm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCgpOworCisgICAgY29uc3Qg
SGVhcFR5cGUgbV9oZWFwVHlwZTsKKyAgICBjb25zdCBzaXplX3QgbV9yYW1TaXplOworICAgIGNv
bnN0IHNpemVfdCBtX21pbkJ5dGVzUGVyQ3ljbGU7CisgICAgc2l6ZV90IG1fc2l6ZUFmdGVyTGFz
dENvbGxlY3Q7CisgICAgc2l6ZV90IG1fc2l6ZUFmdGVyTGFzdEZ1bGxDb2xsZWN0OworICAgIHNp
emVfdCBtX3NpemVCZWZvcmVMYXN0RnVsbENvbGxlY3Q7CisgICAgc2l6ZV90IG1fc2l6ZUFmdGVy
TGFzdEVkZW5Db2xsZWN0OworICAgIHNpemVfdCBtX3NpemVCZWZvcmVMYXN0RWRlbkNvbGxlY3Q7
CisKKyAgICBzaXplX3QgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZTsKKyAgICBzaXplX3QgbV9i
eXRlc0FiYW5kb25lZFNpbmNlTGFzdEZ1bGxDb2xsZWN0OworICAgIHNpemVfdCBtX21heEVkZW5T
aXplOworICAgIHNpemVfdCBtX21heEhlYXBTaXplOworICAgIGJvb2wgbV9zaG91bGREb0Z1bGxD
b2xsZWN0aW9uOworICAgIHNpemVfdCBtX3RvdGFsQnl0ZXNWaXNpdGVkOworICAgIHNpemVfdCBt
X3RvdGFsQnl0ZXNDb3BpZWQ7CisgICAgCisgICAgSGVhcE9wZXJhdGlvbiBtX29wZXJhdGlvbklu
UHJvZ3Jlc3M7CisgICAgQmxvY2tBbGxvY2F0b3IgbV9ibG9ja0FsbG9jYXRvcjsKKyAgICBTdHJ1
Y3R1cmVJRFRhYmxlIG1fc3RydWN0dXJlSURUYWJsZTsKKyAgICBNYXJrZWRTcGFjZSBtX29iamVj
dFNwYWNlOworICAgIENvcGllZFNwYWNlIG1fc3RvcmFnZVNwYWNlOworICAgIEdDSW5jb21pbmdS
ZWZDb3VudGVkU2V0PEFycmF5QnVmZmVyPiBtX2FycmF5QnVmZmVyczsKKyAgICBzaXplX3QgbV9l
eHRyYU1lbW9yeVVzYWdlOworCisgICAgSGFzaFNldDxjb25zdCBKU0NlbGwqPiBtX2NvcHlpbmdS
ZW1lbWJlcmVkU2V0OworCisgICAgUHJvdGVjdENvdW50U2V0IG1fcHJvdGVjdGVkVmFsdWVzOwor
ICAgIFZlY3RvcjxWZWN0b3I8VmFsdWVTdHJpbmdQYWlyLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxv
dz4qPiBtX3RlbXBTb3J0aW5nVmVjdG9yczsKKyAgICBPd25QdHI8SGFzaFNldDxNYXJrZWRBcmd1
bWVudEJ1ZmZlcio+PiBtX21hcmtMaXN0U2V0OwogCi0jaWYgVVNFKENGKQotICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPgotICAgIGlubGluZSB2b2lkIEhlYXA6OnJlbGVhc2VTb29uKFJldGFpblB0
cjxUPiYmIG9iamVjdCkKLSAgICB7Ci0gICAgICAgIG1fb2JqZWN0U3BhY2UucmVsZWFzZVNvb24o
c3RkOjptb3ZlKG9iamVjdCkpOwotICAgIH0KLSNlbmRpZgorICAgIE1hY2hpbmVUaHJlYWRzIG1f
bWFjaGluZVRocmVhZHM7CisgICAgCisgICAgR0NUaHJlYWRTaGFyZWREYXRhIG1fc2hhcmVkRGF0
YTsKKyAgICBTbG90VmlzaXRvciBtX3Nsb3RWaXNpdG9yOworICAgIENvcHlWaXNpdG9yIG1fY29w
eVZpc2l0b3I7CisKKyAgICBIYW5kbGVTZXQgbV9oYW5kbGVTZXQ7CisgICAgSGFuZGxlU3RhY2sg
bV9oYW5kbGVTdGFjazsKKyAgICBDb2RlQmxvY2tTZXQgbV9jb2RlQmxvY2tzOworICAgIEpJVFN0
dWJSb3V0aW5lU2V0IG1faml0U3R1YlJvdXRpbmVzOworICAgIEZpbmFsaXplck93bmVyIG1fZmlu
YWxpemVyT3duZXI7CisgICAgCisgICAgYm9vbCBtX2lzU2FmZVRvQ29sbGVjdDsKKworICAgIFdy
aXRlQmFycmllckJ1ZmZlciBtX3dyaXRlQmFycmllckJ1ZmZlcjsKIAorICAgIFZNKiBtX3ZtOwor
ICAgIGRvdWJsZSBtX2xhc3RGdWxsR0NMZW5ndGg7CisgICAgZG91YmxlIG1fbGFzdEVkZW5HQ0xl
bmd0aDsKKyAgICBkb3VibGUgbV9sYXN0Q29kZURpc2NhcmRUaW1lOwogCi1pbmxpbmUgdm9pZCBI
ZWFwOjppbmNyZW1lbnREZWZlcnJhbERlcHRoKCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChtX2Rl
ZmVycmFsRGVwdGggPCAxMDApOyAvLyBTYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIHRoaXMgZG9l
c24ndCBnZXQgcmlkaWN1bG91cy4KLSAgICBtX2RlZmVycmFsRGVwdGgrKzsKLX0KLQotaW5saW5l
IHZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpCi17Ci0gICAgUkVMRUFTRV9BU1NF
UlQobV9kZWZlcnJhbERlcHRoID49IDEpOwotICAgIG1fZGVmZXJyYWxEZXB0aC0tOwotfQotCi1p
bmxpbmUgYm9vbCBIZWFwOjpjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCkKLXsKLSAgICBpZiAo
aXNEZWZlcnJlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXNob3VsZENv
bGxlY3QoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29sbGVjdCgpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi1pbmxpbmUgdm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRo
QW5kR0NJZk5lZWRlZCgpCi17Ci0gICAgZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOwotICAgIGNv
bGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKLX0KKyAgICBEb3VibHlMaW5rZWRMaXN0PEV4ZWN1
dGFibGVCYXNlPiBtX2NvbXBpbGVkQ29kZTsKKyAgICAKKyAgICBSZWZQdHI8R0NBY3Rpdml0eUNh
bGxiYWNrPiBtX2Z1bGxBY3Rpdml0eUNhbGxiYWNrOworICAgIFJlZlB0cjxHQ0FjdGl2aXR5Q2Fs
bGJhY2s+IG1fZWRlbkFjdGl2aXR5Q2FsbGJhY2s7CisgICAgT3duUHRyPEluY3JlbWVudGFsU3dl
ZXBlcj4gbV9zd2VlcGVyOworICAgIFZlY3RvcjxNYXJrZWRCbG9jayo+IG1fYmxvY2tTbmFwc2hv
dDsKKyAgICAKKyAgICB1bnNpZ25lZCBtX2RlZmVycmFsRGVwdGg7Cit9OwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
SGVhcElubGluZXNfaAorI2RlZmluZSBIZWFwSW5saW5lc19oCisKKyNpbmNsdWRlICJIZWFwLmgi
CisjaW5jbHVkZSAiSlNDZWxsLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgYm9vbCBI
ZWFwOjpzaG91bGRDb2xsZWN0KCkKK3sKKyAgICBpZiAoaXNEZWZlcnJlZCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKE9wdGlvbnM6OmdjTWF4SGVhcFNpemUoKSkKKyAgICAgICAg
cmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPiBPcHRpb25zOjpnY01heEhlYXBTaXpl
KCkgJiYgbV9pc1NhZmVUb0NvbGxlY3QgJiYgbV9vcGVyYXRpb25JblByb2dyZXNzID09IE5vT3Bl
cmF0aW9uOworICAgIHJldHVybiBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlID4gbV9tYXhFZGVu
U2l6ZSAmJiBtX2lzU2FmZVRvQ29sbGVjdCAmJiBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9P
cGVyYXRpb247Cit9CisKK2lubGluZSBib29sIEhlYXA6OmlzQnVzeSgpCit7CisgICAgcmV0dXJu
IG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyAhPSBOb09wZXJhdGlvbjsKK30KKworaW5saW5lIGJvb2wg
SGVhcDo6aXNDb2xsZWN0aW5nKCkKK3sKKyAgICByZXR1cm4gbV9vcGVyYXRpb25JblByb2dyZXNz
ID09IEZ1bGxDb2xsZWN0aW9uIHx8IG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBFZGVuQ29sbGVj
dGlvbjsKK30KKworaW5saW5lIEhlYXAqIEhlYXA6OmhlYXAoY29uc3QgSlNDZWxsKiBjZWxsKQor
eworICAgIHJldHVybiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmhlYXAoKTsKK30KKwor
aW5saW5lIEhlYXAqIEhlYXA6OmhlYXAoY29uc3QgSlNWYWx1ZSB2KQoreworICAgIGlmICghdi5p
c0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGhlYXAodi5hc0NlbGwoKSk7
Cit9CisKK2lubGluZSBib29sIEhlYXA6OmlzTGl2ZShjb25zdCB2b2lkKiBjZWxsKQoreworICAg
IHJldHVybiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmlzTGl2ZUNlbGwoY2VsbCk7Cit9
CisKK2lubGluZSBib29sIEhlYXA6OmlzSW5SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2VsbCogY2Vs
bCkgY29uc3QKK3sKKyAgICBBU1NFUlQoY2VsbCk7CisgICAgQVNTRVJUKCFPcHRpb25zOjplbmFi
bGVDb25jdXJyZW50SklUKCkgfHwgIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CisgICAgcmV0dXJu
IE1hcmtlZEJsb2NrOjpibG9ja0ZvcihjZWxsKS0+aXNSZW1lbWJlcmVkKGNlbGwpOworfQorCitp
bmxpbmUgYm9vbCBIZWFwOjppc01hcmtlZChjb25zdCB2b2lkKiBjZWxsKQoreworICAgIHJldHVy
biBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmlzTWFya2VkKGNlbGwpOworfQorCitpbmxp
bmUgYm9vbCBIZWFwOjp0ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqIGNlbGwpCit7CisgICAg
cmV0dXJuIE1hcmtlZEJsb2NrOjpibG9ja0ZvcihjZWxsKS0+dGVzdEFuZFNldE1hcmtlZChjZWxs
KTsKK30KKworaW5saW5lIHZvaWQgSGVhcDo6c2V0TWFya2VkKGNvbnN0IHZvaWQqIGNlbGwpCit7
CisgICAgTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNlbGwpLT5zZXRNYXJrZWQoY2VsbCk7Cit9CisK
K2lubGluZSBib29sIEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpCit7CisjaWYgRU5BQkxF
KFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKSB8fCBFTkFCTEUoR0dDKQorICAgIHJldHVybiB0cnVl
OworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworaW5saW5lIHZvaWQgSGVh
cDo6d3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCogZnJvbSwgSlNWYWx1ZSB0bykKK3sKKyNpZiBF
TkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCisgICAgV3JpdGVCYXJyaWVyQ291bnRlcnM6
OmNvdW50V3JpdGVCYXJyaWVyKCk7CisjZW5kaWYKKyAgICBpZiAoIXRvLmlzQ2VsbCgpKQorICAg
ICAgICByZXR1cm47CisgICAgd3JpdGVCYXJyaWVyKGZyb20sIHRvLmFzQ2VsbCgpKTsKK30KKwor
aW5saW5lIHZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVfdCBjb3N0KQorewor
ICAgIGlmIChjb3N0ID4gbWluRXh0cmFDb3N0KSAKKyAgICAgICAgcmVwb3J0RXh0cmFNZW1vcnlD
b3N0U2xvd0Nhc2UoY29zdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGlu
ZSB0eXBlbmFtZSBGdW5jdG9yOjpSZXR1cm5UeXBlIEhlYXA6OmZvckVhY2hQcm90ZWN0ZWRDZWxs
KEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm90ZWN0ZWRW
YWx1ZXMpCisgICAgICAgIGZ1bmN0b3IocGFpci5rZXkpOworICAgIG1faGFuZGxlU2V0LmZvckVh
Y2hTdHJvbmdIYW5kbGUoZnVuY3RvciwgbV9wcm90ZWN0ZWRWYWx1ZXMpOworCisgICAgcmV0dXJu
IGZ1bmN0b3IucmV0dXJuVmFsdWUoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4g
aW5saW5lIHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgSGVhcDo6Zm9yRWFjaFByb3RlY3Rl
ZENlbGwoKQoreworICAgIEZ1bmN0b3IgZnVuY3RvcjsKKyAgICByZXR1cm4gZm9yRWFjaFByb3Rl
Y3RlZENlbGwoZnVuY3Rvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGlu
ZSB2b2lkIEhlYXA6OmZvckVhY2hDb2RlQmxvY2soRnVuY3RvciYgZnVuY3RvcikKK3sKKyAgICBy
ZXR1cm4gbV9jb2RlQmxvY2tzLml0ZXJhdGU8RnVuY3Rvcj4oZnVuY3Rvcik7Cit9CisKK2lubGlu
ZSB2b2lkKiBIZWFwOjphbGxvY2F0ZVdpdGhOb3JtYWxEZXN0cnVjdG9yKHNpemVfdCBieXRlcykK
K3sKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgIGRhdGFMb2dGKCJKU0MgR0Mg
YWxsb2NhdGluZyAlbHUgYnl0ZXMgd2l0aCBub3JtYWwgZGVzdHJ1Y3Rvci5cbiIsIGJ5dGVzKTsK
KyNlbmRpZgorICAgIEFTU0VSVChpc1ZhbGlkQWxsb2NhdGlvbihieXRlcykpOworICAgIHJldHVy
biBtX29iamVjdFNwYWNlLmFsbG9jYXRlV2l0aE5vcm1hbERlc3RydWN0b3IoYnl0ZXMpOworfQor
CitpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVXaXRoSW1tb3J0YWxTdHJ1Y3R1cmVEZXN0cnVj
dG9yKHNpemVfdCBieXRlcykKK3sKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAg
IGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGluZyAlbHUgYnl0ZXMgd2l0aCBpbW1vcnRhbCBzdHJ1
Y3R1cmUgZGVzdHJ1Y3Rvci5cbiIsIGJ5dGVzKTsKKyNlbmRpZgorICAgIEFTU0VSVChpc1ZhbGlk
QWxsb2NhdGlvbihieXRlcykpOworICAgIHJldHVybiBtX29iamVjdFNwYWNlLmFsbG9jYXRlV2l0
aEltbW9ydGFsU3RydWN0dXJlRGVzdHJ1Y3RvcihieXRlcyk7Cit9CisKK2lubGluZSB2b2lkKiBI
ZWFwOjphbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKHNpemVfdCBieXRlcykKK3sKKyNpZiBFTkFC
TEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgIGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGluZyAl
bHUgYnl0ZXMgd2l0aG91dCBkZXN0cnVjdG9yLlxuIiwgYnl0ZXMpOworI2VuZGlmCisgICAgQVNT
RVJUKGlzVmFsaWRBbGxvY2F0aW9uKGJ5dGVzKSk7CisgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uu
YWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihieXRlcyk7Cit9CisKK2lubGluZSBDaGVja2VkQm9v
bGVhbiBIZWFwOjp0cnlBbGxvY2F0ZVN0b3JhZ2UoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXpl
X3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpCit7CisgICAgQ2hlY2tlZEJvb2xlYW4gcmVzdWx0ID0g
bV9zdG9yYWdlU3BhY2UudHJ5QWxsb2NhdGUoYnl0ZXMsIG91dFB0cik7CisjaWYgRU5BQkxFKEFM
TE9DQVRJT05fTE9HR0lORykKKyAgICBkYXRhTG9nRigiSlNDIEdDIGFsbG9jYXRpbmcgJWx1IGJ5
dGVzIG9mIHN0b3JhZ2UgZm9yICVwOiAlcC5cbiIsIGJ5dGVzLCBpbnRlbmRlZE93bmVyLCAqb3V0
UHRyKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGludGVuZGVkT3duZXIpOworI2VuZGlmCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIENoZWNrZWRCb29sZWFuIEhlYXA6OnRyeVJl
YWxsb2NhdGVTdG9yYWdlKEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdm9pZCoqIHB0ciwgc2l6ZV90
IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQoreworI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJ
TkcpCisgICAgdm9pZCogb2xkUHRyID0gKnB0cjsKKyNlbmRpZgorICAgIENoZWNrZWRCb29sZWFu
IHJlc3VsdCA9IG1fc3RvcmFnZVNwYWNlLnRyeVJlYWxsb2NhdGUocHRyLCBvbGRTaXplLCBuZXdT
aXplKTsKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgIGRhdGFMb2dGKCJKU0Mg
R0MgcmVhbGxvY2F0aW5nICVsdSAtPiAlbHUgYnl0ZXMgb2Ygc3RvcmFnZSBmb3IgJXA6ICVwIC0+
ICVwLlxuIiwgb2xkU2l6ZSwgbmV3U2l6ZSwgaW50ZW5kZWRPd25lciwgb2xkUHRyLCAqcHRyKTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGludGVuZGVkT3duZXIpOworI2VuZGlmCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQgSGVhcDo6YXNjcmliZU93bmVyKEpTQ2VsbCog
aW50ZW5kZWRPd25lciwgdm9pZCogc3RvcmFnZSkKK3sKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9M
T0dHSU5HKQorICAgIGRhdGFMb2dGKCJKU0MgR0MgYXNjcmliaW5nICVwIGFzIG93bmVyIG9mIHN0
b3JhZ2UgJXAuXG4iLCBpbnRlbmRlZE93bmVyLCBzdG9yYWdlKTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKGludGVuZGVkT3duZXIpOworICAgIFVOVVNFRF9QQVJBTShzdG9yYWdlKTsKKyNlbmRp
ZgorfQorCitpbmxpbmUgQmxvY2tBbGxvY2F0b3ImIEhlYXA6OmJsb2NrQWxsb2NhdG9yKCkKK3sK
KyAgICByZXR1cm4gbV9ibG9ja0FsbG9jYXRvcjsKK30KKworI2lmIFVTRShDRikKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgoraW5saW5lIHZvaWQgSGVhcDo6cmVsZWFzZVNvb24oUmV0YWluUHRyPFQ+
JiYgb2JqZWN0KQoreworICAgIG1fb2JqZWN0U3BhY2UucmVsZWFzZVNvb24oc3RkOjptb3ZlKG9i
amVjdCkpOworfQorI2VuZGlmCisKK2lubGluZSB2b2lkIEhlYXA6OmluY3JlbWVudERlZmVycmFs
RGVwdGgoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZGVmZXJyYWxEZXB0aCA8IDEwMCk7IC8v
IFNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGdldCByaWRpY3Vsb3VzLgor
ICAgIG1fZGVmZXJyYWxEZXB0aCsrOworfQorCitpbmxpbmUgdm9pZCBIZWFwOjpkZWNyZW1lbnRE
ZWZlcnJhbERlcHRoKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2RlZmVycmFsRGVwdGggPj0g
MSk7CisgICAgbV9kZWZlcnJhbERlcHRoLS07Cit9CisKK2lubGluZSBib29sIEhlYXA6OmNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoKQoreworICAgIGlmIChpc0RlZmVycmVkKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmICghc2hvdWxkQ29sbGVjdCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBjb2xsZWN0KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGlu
ZSB2b2lkIEhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkKCkKK3sKKyAg
ICBkZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7CisgICAgY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZl
cigpOworfQorCitpbmxpbmUgSGFzaFNldDxNYXJrZWRBcmd1bWVudEJ1ZmZlcio+JiBIZWFwOjpt
YXJrTGlzdFNldCgpCit7CisgICAgaWYgKCFtX21hcmtMaXN0U2V0KQorICAgICAgICBtX21hcmtM
aXN0U2V0ID0gYWRvcHRQdHIobmV3IEhhc2hTZXQ8TWFya2VkQXJndW1lbnRCdWZmZXIqPik7IAor
ICAgIHJldHVybiAqbV9tYXJrTGlzdFNldDsKK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gSGVhcElubGluZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50RW50cnlwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50RW50cnlwb2ludC5jcHAJKHJldmlzaW9uIDE2NjI3NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEVudHJ5cG9pbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKExMSU5UKQogCiAjaW5jbHVkZSAiQ29kZUJs
b2NrLmgiCisjaW5jbHVkZSAiSGVhcElubGluZXMuaCIKICNpbmNsdWRlICJKSVRDb2RlLmgiCiAj
aW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5oIgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAkocmV2aXNpb24gMTY2Mjc0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiQ2FsbEZyYW1lSW5saW5lcy5oIgog
I2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291
bnRlZElubGluZXMuaCIKKyNpbmNsdWRlICJIZWFwSW5saW5lcy5oIgogI2luY2x1ZGUgIklkZW50
aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0Fy
cmF5QnVmZmVyVmlld0lubGluZXMuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTY2Mjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgIkNvcHlXcml0ZUJhcnJpZXIuaCIKICNpbmNsdWRlICJEZWZlckdDLmgiCiAjaW5jbHVk
ZSAiSGVhcC5oIgorI2luY2x1ZGUgIkhlYXBJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSW5kZXhpbmdI
ZWFkZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlT
bG90LmgiCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>