<?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>151955</bug_id>
          
          <creation_ts>2015-12-07 12:27:39 -0800</creation_ts>
          <short_desc>FTL B3 should be able to flag the tag constants as being super important so that B3 can hoist them and Air can force them into registers</short_desc>
          <delta_ts>2015-12-08 01:42:15 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>150279</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>achristensen</cc>
    
    <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>peavo</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1146940</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-07 12:27:39 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146968</commentid>
    <comment_count>1</comment_count>
      <attachid>266801</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-07 13:05:38 -0800</bug_when>
    <thetext>Created attachment 266801
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147068</commentid>
    <comment_count>2</comment_count>
      <attachid>266825</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-07 16:05:00 -0800</bug_when>
    <thetext>Created attachment 266825
it&apos;s starting to work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147105</commentid>
    <comment_count>3</comment_count>
      <attachid>266831</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-07 16:37:34 -0800</bug_when>
    <thetext>Created attachment 266831
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147106</commentid>
    <comment_count>4</comment_count>
      <attachid>266832</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-07 16:38:51 -0800</bug_when>
    <thetext>Created attachment 266832
the patch

For real this time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147111</commentid>
    <comment_count>5</comment_count>
      <attachid>266832</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-12-07 16:53:54 -0800</bug_when>
    <thetext>Comment on attachment 266832
the patch

View in context: https://bugs.webkit.org/attachment.cgi?id=266832&amp;action=review

r=me

&gt; Source/JavaScriptCore/b3/B3CFG.h:39
&gt; +public:

WTF_MAKE_FAST_ALLOCATED</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147144</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-07 18:46:15 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 266832 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=266832&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3CFG.h:39
&gt; &gt; +public:
&gt; 
&gt; WTF_MAKE_FAST_ALLOCATED

Fixed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147146</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-07 18:47:14 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/193682</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147210</commentid>
    <comment_count>8</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-12-08 01:42:15 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Landed in http://trac.webkit.org/changeset/193682

It broke the WinCairo build: 
https://build.webkit.org/builders/WinCairo%2064-Bit%20Release/builds/51858

(cc-ing port maintainers)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266801</attachid>
            <date>2015-12-07 13:05:38 -0800</date>
            <delta_ts>2015-12-07 16:05:00 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>30308</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTM2MzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzA0LDYgKzMwNCw4IEBACiAJCTBGMzM4RTFDMUJGMjg2
RUEwMDEzQzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUxODFCRjI4NkVBMDAxM0M4OEYgLyogQjNC
bG9ja0luc2VydGlvblNldC5oICovOyB9OwogCQkwRjMzOEUxRDFCRjI4NkVBMDAxM0M4OEYgLyog
QjNMb3dlck1hY3Jvcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjMzOEUxOTFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5jcHAgKi87
IH07CiAJCTBGMzM4RTFFMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUxQTFCRjI4NkVB
MDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5oICovOyB9OworCQkwRjMzRkNGQjFDMTYyNUJFMDAz
MjNGNjcgLyogQjNDRkcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMzNGQ0Y5MUMxNjI1QkUwMDMyM0Y2NyAvKiBCM0NGRy5oICovOyB9OworCQkwRjMz
RkNGQzFDMTYyNUJFMDAzMjNGNjcgLyogQjNEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzRkNGQTFDMTYyNUJFMDAzMjNGNjcgLyog
QjNEb21pbmF0b3JzLmggKi87IH07CiAJCTBGMzRCMTQ5MTZENDIwMTAwMDFDREE1QSAvKiBERkdV
c2VLaW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMzRCMTQ3MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmNwcCAqLzsgfTsKIAkJMEYz
NEIxNEExNkQ0MjAxMzAwMUNEQTVBIC8qIERGR1VzZUtpbmQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzRCMTQ4MTZENDIwMEUwMDFDREE1QSAvKiBE
RkdVc2VLaW5kLmggKi87IH07CiAJCTBGMzczMDhDMUMwQkQyOTEwMDA1MkJGQSAvKiBCM1BoaUNo
aWxkcmVuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMzczMDhBMUMwQkQyOTEwMDA1MkJGQSAvKiBCM1BoaUNoaWxkcmVuLmNwcCAqLzsgfTsKQEAg
LTI0MDAsNiArMjQwMiw4IEBACiAJCTBGMzM4RTE4MUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Jsb2Nr
SW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQmxvY2tJ
bnNlcnRpb25TZXQuaDsgcGF0aCA9IGIzL0IzQmxvY2tJbnNlcnRpb25TZXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMzhFMTkxQkYyODZFQTAwMTNDODhGIC8qIEIzTG93ZXJN
YWNyb3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNMb3dlck1h
Y3Jvcy5jcHA7IHBhdGggPSBiMy9CM0xvd2VyTWFjcm9zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYzMzhFMUExQkYyODZFQTAwMTNDODhGIC8qIEIzTG93ZXJNYWNyb3MuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNMb3dlck1hY3Jvcy5oOyBwYXRoID0g
YjMvQjNMb3dlck1hY3Jvcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMzRkNG
OTFDMTYyNUJFMDAzMjNGNjcgLyogQjNDRkcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNDRkcuaDsgcGF0aCA9IGIzL0IzQ0ZHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMzNGQ0ZBMUMxNjI1QkUwMDMyM0Y2NyAvKiBCM0RvbWluYXRvcnMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNEb21pbmF0b3JzLmg7IHBhdGggPSBiMy9CM0Rv
bWluYXRvcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNEIxNDcxNkQ0MjAw
RTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gREZHVXNlS2luZC5jcHA7IHBhdGggPSBkZmcvREZHVXNlS2luZC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzRCMTQ4MTZENDIwMEUwMDFDREE1QSAvKiBERkdV
c2VLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1VzZUtpbmQuaDsg
cGF0aCA9IGRmZy9ERkdVc2VLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MzczMDhBMUMwQkQyOTEwMDA1MkJGQSAvKiBCM1BoaUNoaWxkcmVuLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUGhpQ2hpbGRyZW4uY3BwOyBwYXRoID0gYjMvQjNQ
aGlDaGlsZHJlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NTYzLDYgKzQ1
NjcsNyBAQAogCQkJCTBGRUM4NEJBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3Qu
aCAqLywKIAkJCQkwRjMzOERGNzFCRTk2QUE4MDAxM0M4OEYgLyogQjNDQ2FsbFZhbHVlLmNwcCAq
LywKIAkJCQkwRjMzOERGODFCRTk2QUE4MDAxM0M4OEYgLyogQjNDQ2FsbFZhbHVlLmggKi8sCisJ
CQkJMEYzM0ZDRjkxQzE2MjVCRTAwMzIzRjY3IC8qIEIzQ0ZHLmggKi8sCiAJCQkJMEZFQzg0QkIx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmNwcCAqLywKIAkJCQkwRkVDODRCQzFC
REFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuaCAqLywKIAkJCQkwRkVDODRCRDFCREFD
REFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmNwcCAqLywKQEAgLTQ1ODYsNiArNDU5MSw3IEBA
CiAJCQkJMEZFQzg0Q0ExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmggKi8sCiAJ
CQkJMEYzMzhFMDExQkYwMjc2QzAwMTNDODhGIC8qIEIzRGF0YVNlY3Rpb24uY3BwICovLAogCQkJ
CTBGMzM4RTAyMUJGMDI3NkMwMDEzQzg4RiAvKiBCM0RhdGFTZWN0aW9uLmggKi8sCisJCQkJMEYz
M0ZDRkExQzE2MjVCRTAwMzIzRjY3IC8qIEIzRG9taW5hdG9ycy5oICovLAogCQkJCTBGRUM4NUM0
MUJFMTZGNUEwMDgwRkY3NCAvKiBCM0VmZmVjdHMuY3BwICovLAogCQkJCTBGRUM4NUJFMUJFMTY3
QTAwMDgwRkY3NCAvKiBCM0VmZmVjdHMuaCAqLywKIAkJCQkwRkVDODRDQjFCREFDREFDMDA4MEZG
NzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgKi8sCkBAIC03NTExLDYgKzc1MTcsNyBAQAogCQkJ
CTk5MjhGRjNDMThBQzRBRUMwMEI4Q0YxMiAvKiBKU1JlcGxheUlucHV0cy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEM0MjYwRTE2RjVDRDAwQjM0NDYwIC8qIEpTUmV0YWluUHRyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDg3NEFFNjE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEYzM0ZDRkIxQzE2MjVCRTAwMzIzRjY3IC8qIEIzQ0ZHLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0MwQzRBQzE2ODEwMzAyMDAxNzAxMUQgLyogSlNTY3JpcHRSZWZQcml2
YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTEyMjAyNzFCRTdGNThDMDAzOUU2RjIgLyogSklU
QWRkR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkxOUQxMTE1N0YzMzJDMDA0QTRF
N0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCkBAIC03Nzkw
LDYgKzc3OTcsNyBAQAogCQkJCTcwNUI0MUFFMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xDb25z
dHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk2QjczMjcxQkRBMDhFRjAwMzMxQjg0IC8q
IFN5bWJvbENvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA1QjQxQjAxQTZF
NTAxRTAwNzE2NzU3IC8qIFN5bWJvbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzM0ZD
RkMxQzE2MjVCRTAwMzIzRjY3IC8qIEIzRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NzA1QjQxQjIxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbFByb3RvdHlwZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTk2QjczMjgxQkRBMDhFRjAwMzMxQjg0IC8qIFN5bWJvbFByb3RvdHlwZS5sdXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDZCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTeW1ib2xU
YWJsZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
RkcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDRkcuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NGRy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM0NGR19oCisjZGVmaW5lIEIzQ0ZHX2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM0luZGV4
TWFwLmgiCisjaW5jbHVkZSAiQjNJbmRleFNldC5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDRkcgeworcHVibGlj
OgorICAgIHR5cGVkZWYgQmFzaWNCbG9jayogTm9kZTsKKyAgICB0eXBlZGVmIEluZGV4U2V0PEJh
c2ljQmxvY2s+IFNldDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBNYXAgPSBJbmRl
eE1hcDxCYXNpY0Jsb2NrLCBUPjsKKyAgICB0eXBlZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKiwgND4g
TGlzdDsKKworICAgIENGRyhQcm9jZWR1cmUmIHByb2MpCisgICAgICAgIDogbV9wcm9jKHByb2Mp
CisgICAgeworICAgIH0KKworICAgIE5vZGUgcm9vdCgpIHsgcmV0dXJuIG1fcHJvY1swXTsgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBNYXA8VD4gbmV3TWFwKCkgeyByZXR1cm4g
SW5kZXhNYXA8QmFzaWNCbG9jaywgVD4obV9wcm9jLnNpemUoKSk7IH0KKworICAgIFN1Y2Nlc3Nv
ckNvbGxlY3Rpb248QmFzaWNCbG9jaywgQmFzaWNCbG9jazo6U3VjY2Vzc29yTGlzdD4gc3VjY2Vz
c29ycyhOb2RlIG5vZGUpIHsgcmV0dXJuIG5vZGUtPnN1Y2Nlc3NvckJsb2NrcygpOyB9CisgICAg
QmFzaWNCbG9jazo6UHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMoTm9kZSBub2RlKSB7IHJl
dHVybiBub2RlLT5wcmVkZWNlc3NvcnMoKTsgfQorCisgICAgdW5zaWduZWQgaW5kZXgoTm9kZSBu
b2RlKSBjb25zdCB7IHJldHVybiBub2RlLT5pbmRleCgpOyB9CisgICAgTm9kZSBub2RlKHVuc2ln
bmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3Byb2NbaW5kZXhdOyB9CisgICAgdW5zaWduZWQg
bnVtTm9kZXMoKSBjb25zdCB7IHJldHVybiBtX3Byb2Muc2l6ZSgpOyB9CisKKyAgICBQb2ludGVy
RHVtcDxCYXNpY0Jsb2NrPiBkdW1wKE5vZGUgbm9kZSkgY29uc3QgeyByZXR1cm4gcG9pbnRlckR1
bXAobm9kZSk7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAg
IHsKKyAgICAgICAgbV9wcm9jLmR1bXAob3V0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUHJv
Y2VkdXJlJiBtX3Byb2M7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NGR19oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0RvbWluYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNEb21pbmF0b3JzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNEb21pbmF0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzRG9taW5hdG9yc19oCisjZGVmaW5lIEIzRG9taW5hdG9yc19oCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQjNDRkcuaCIKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorI2lu
Y2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisjaW5jbHVkZSA8d3RmL0RvbWluYXRvcnMuaD4KKyNpbmNs
dWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgRG9taW5hdG9ycyA6IHB1Ymxp
YyBXVEY6OkRvbWluYXRvcnM8Q0ZHPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRG9taW5h
dG9ycyk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgRG9taW5h
dG9ycyhQcm9jZWR1cmUmIHByb2MpCisgICAgICAgIDogV1RGOjpEb21pbmF0b3JzPENGRz4ocHJv
Yy5jZmcoKSwgc2hvdWxkVmFsaWRhdGVJUigpKQorICAgIHsKKyAgICB9Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBCM0RvbWluYXRvcnNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRl
eE1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4TWFw
LmgJKHJldmlzaW9uIDE5MzYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4
TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDE4IEBAIHB1YmxpYzoKICAgICAgICAg
bV92ZWN0b3IuZmlsbChWYWx1ZSgpLCBzaXplKTsKICAgICB9CiAKKyAgICBzaXplX3Qgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLnNpemUoKTsgfQorCisgICAgVmFsdWUmIG9wZXJhdG9y
W10oc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2luZGV4XTsK
KyAgICB9CisKKyAgICBjb25zdCBWYWx1ZSYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV92ZWN0b3JbaW5kZXhdOworICAgIH0KKyAgICAKICAg
ICBWYWx1ZSYgb3BlcmF0b3JbXShLZXkqIGtleSkKICAgICB7CiAgICAgICAgIHJldHVybiBtX3Zl
Y3RvcltrZXktPmluZGV4KCldOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93
ZXJNYWNyb3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xv
d2VyTWFjcm9zLmNwcAkocmV2aXNpb24gMTkzNjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzTG93ZXJNYWNyb3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw4ICs1OCwxMCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICBwcm9jZXNzQ3VycmVudEJsb2NrKCk7CiAgICAgICAgIH0KICAg
ICAgICAgbV9jaGFuZ2VkIHw9IG1fYmxvY2tJbnNlcnRpb25TZXQuZXhlY3V0ZSgpOwotICAgICAg
ICBpZiAobV9jaGFuZ2VkKQorICAgICAgICBpZiAobV9jaGFuZ2VkKSB7CiAgICAgICAgICAgICBt
X3Byb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICAgICAgICAgIG1fcHJvYy5pbnZhbGlkYXRl
Q0ZHKCk7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG1fY2hhbmdlZDsKICAgICB9CiAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29uc3RhbnRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29uc3RhbnRzLmNwcAko
cmV2aXNpb24gMTkzNjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0
YW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEyICsyOSwxNSBAQAogI2lmIEVOQUJMRShC
M19KSVQpCiAKICNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNE
b21pbmF0b3JzLmgiCiAjaW5jbHVkZSAiQjNJbnNlcnRpb25TZXRJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiQjNNZW1vcnlWYWx1ZS5oIgogI2luY2x1ZGUgIkIzUGhhc2VTY29wZS5oIgogI2luY2x1ZGUg
IkIzUHJvY2VkdXJlSW5saW5lcy5oIgogI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiQjNWYWx1ZUtleUlubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAK
QEAgLTUwLDI3ICs1MywxMDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBydW4oKQogICAgIHsKLSAg
ICAgICAgLy8gRXZlbnR1YWxseSB0aGlzIHBoYXNlIHdpbGwgZG8gc21hcnQgdGhpbmdzLiBGb3Ig
bm93LCBpdCB1c2VzIGEgc3VwZXIgc2ltcGxlIGhldXJpc3RpYzogaXQKLSAgICAgICAgLy8gcGxh
Y2VzIGNvbnN0YW50cyBpbiB0aGUgYmxvY2sgdGhhdCB1c2VzIHRoZW0sIGFuZCBtYWtlcyBzdXJl
IHRoYXQgZWFjaCBibG9jayBoYXMgb25seSBvbmUKLSAgICAgICAgLy8gbWF0ZXJpYWxpemF0aW9u
IGZvciBlYWNoIGNvbnN0YW50LiBOb3RlIHRoYXQgdGhpcyBtb3N0bHkgb25seSBtYXR0ZXJzIGZv
ciBsYXJnZSBjb25zdGFudHMsIHNpbmNlCi0gICAgICAgIC8vIHNtYWxsIGNvbnN0YW50cyBnZXQg
ZnVzZWQgaW50byB0aGUgaW5zdHJ1Y3Rpb25zIHRoYXQgdXNlIHRoZW0uIEJ1dCBpdCBtaWdodCBt
YXR0ZXIgZm9yIHNtYWxsCi0gICAgICAgIC8vIGNvbnN0YW50cyBpZiB0aGV5IGFyZSB1c2VkIGlu
IGluc3RydWN0aW9ucyB0aGF0IGRvbid0IGRvIGltbWVkaWF0ZXMsIGxpa2UgY29uZGl0aW9uYWwg
bW92ZXMuCi0KLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBhIGJldHRlciBzdG9yeSBmb3Ig
Y29uc3RhbnRzLiBBdCBhIG1pbmltdW0gdGhpcyBzaG91bGQgYWxsb3cgdGhlIEIzCi0gICAgICAg
IC8vIGNsaWVudCB0byBzcGVjaWZ5IGltcG9ydGFudCBjb25zdGFudHMgdGhhdCBhbHdheXMgZ2V0
IGhvaXN0ZWQuIEFsc28sIHRoZSB0YWJsZSB1c2VkIHRvCi0gICAgICAgIC8vIGhvbGQgZG91Ymxl
IGNvbnN0YW50cyBzaG91bGQgaGF2ZSBhIHBvaW50ZXIgdG8gaXQgdGhhdCBpcyBob2lzdGVkLiBJ
ZiB3ZSB3YW50ZWQgdG8gYmUgbW9yZQotICAgICAgICAvLyBhZ2dyZXNzaXZlLCB3ZSBjb3VsZCBt
YWtlIGNvbnN0YW50IG1hdGVyaWFsaXphdGlvbiBiZSBhIGZlYXR1cmUgb2YgQWlyOiB3ZSBjb3Vs
ZCBsYWJlbAotICAgICAgICAvLyBzb21lIFRtcHMgYXMgYmVpbmcgdW5tYXRlcmlhbGl6ZWQgY29u
c3RhbnRzIGFuZCBoYXZlIGEgbGF0ZSBBaXIgcGhhc2UgLSBwb3N0IHJlZ2lzdGVyCi0gICAgICAg
IC8vIGFsbG9jYXRpb24gLSB0aGF0IGNyZWF0ZXMgbWF0ZXJpYWxpemF0aW9ucyBvZiB0aG9zZSBj
b25zdGFudCBUbXBzIGJ5IHNjYXZlbmdpbmcgbGVmdG92ZXIKLSAgICAgICAgLy8gcmVnaXN0ZXJz
LgorICAgICAgICAvLyBUaGlzIHBoYXNlIHVzZXMgc3VwZXIgc2ltcGxlIGhldXJpc3RpY3MgdG8g
ZW5zdXJlIHRoYXQgY29uc3RhbnRzIGFyZSBpbiBwcm9maXRhYmxlIHBsYWNlcworICAgICAgICAv
LyBhbmQgYWxzbyBsb3dlcnMgY29uc3RhbnQgbWF0ZXJpYWxpemF0aW9uIGNvZGUuIENvbnN0YW50
cyBtYXJrZWQgImZhc3QiIGJ5IHRoZSBjbGllbnQgYXJlCisgICAgICAgIC8vIGhvaXN0ZWQgdG8g
dGhlIGxvd2VzdCBjb21tb24gZG9taW5hdG9yLiBBIHRhYmxlIGlzIGNyZWF0ZWQgZm9yIGNvbnN0
YW50cyB0aGF0IG5lZWQgdG8gYmUKKyAgICAgICAgLy8gbG9hZGVkIHRvIGJlIG1hdGVyaWFsaXpl
ZCwgYW5kIGFsbCBvZiB0aGVpciBWYWx1ZXMgYXJlIHR1cm5lZCBpbnRvIGxvYWRzIGZyb20gdGhh
dCB0YWJsZS4KKyAgICAgICAgLy8gTm9uLWZhc3QgY29uc3RhbnRzIGdldCBtYXRlcmlhbGl6ZWQg
aW4gdGhlIGJsb2NrIHRoYXQgdXNlcyB0aGVtLiBDb25zdGFudHMgdGhhdCBhcmUKKyAgICAgICAg
Ly8gbWF0ZXJpYWxpemVkIGJ5IGxvYWRpbmcgZ2V0IHNwZWNpYWwgdHJlYXRtZW50IHdoZW4gdGhl
eSBnZXQgdXNlZCBpbiBzb21lIGtpbmQgb2YgQW55IGluIGEKKyAgICAgICAgLy8gU3RhY2ttYXBW
YWx1ZS4gSW4gdGhhdCBjYXNlLCB0aGUgQ29uc3RhbnRzIGFyZSBzdW5rIHRvIHRoZSBwb2ludCBv
ZiB1c2UsIHNpbmNlIHRoYXQgYWxsb3dzCisgICAgICAgIC8vIHRoZSBpbnN0cnVjdGlvbiBzZWxl
Y3RvciB0byBzaW5rIHRoZSBjb25zdGFudHMgaW50byBhbiBBcmc6OmltbTY0LgorCisgICAgICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgYSBiZXR0ZXIgc3RvcnkgZm9yIGNvbnN0YW50cy4gRm9yIGV4
YW1wbGUsIHRoZSB0YWJsZSB1c2VkIHRvIGhvbGQgZG91YmxlCisgICAgICAgIC8vIGNvbnN0YW50
cyBzaG91bGQgaGF2ZSBhIHBvaW50ZXIgdG8gaXQgdGhhdCBpcyBob2lzdGVkLiBJZiB3ZSB3YW50
ZWQgdG8gYmUgbW9yZSBhZ2dyZXNzaXZlLAorICAgICAgICAvLyB3ZSBjb3VsZCBtYWtlIGNvbnN0
YW50IG1hdGVyaWFsaXphdGlvbiBiZSBhIGZlYXR1cmUgb2YgQWlyOiB3ZSBjb3VsZCBsYWJlbCBz
b21lIFRtcHMgYXMKKyAgICAgICAgLy8gYmVpbmcgdW5tYXRlcmlhbGl6ZWQgY29uc3RhbnRzIGFu
ZCBoYXZlIGEgbGF0ZSBBaXIgcGhhc2UgLSBwb3N0IHJlZ2lzdGVyIGFsbG9jYXRpb24gLSB0aGF0
CisgICAgICAgIC8vIGNyZWF0ZXMgbWF0ZXJpYWxpemF0aW9ucyBvZiB0aG9zZSBjb25zdGFudCBU
bXBzIGJ5IHNjYXZlbmdpbmcgbGVmdG92ZXIgcmVnaXN0ZXJzLgogCisgICAgICAgIGhvaXN0RmFz
dENvbnN0YW50cygpOworICAgICAgICBzaW5rU2xvd0NvbnN0YW50cygpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICB2b2lkIGhvaXN0RmFzdENvbnN0YW50cygpCisgICAgeworICAgICAgICBEb21p
bmF0b3JzJiBkb21pbmF0b3JzID0gbV9wcm9jLmRvbWluYXRvcnMoKTsKKyAgICAgICAgSGFzaE1h
cDxWYWx1ZUtleSwgVmFsdWUqPiB2YWx1ZUZvckNvbnN0YW50OworICAgICAgICBJbmRleE1hcDxC
YXNpY0Jsb2NrLCBWZWN0b3I8VmFsdWUqPj4gbWF0ZXJpYWxpemF0aW9ucyhtX3Byb2Muc2l6ZSgp
KTsKKworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CisgICAgICAg
ICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIFZhbHVl
S2V5IGtleSA9IHZhbHVlLT5rZXkoKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1fcHJvYy5pc0Zh
c3RDb25zdGFudChrZXkpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgICAgIFZhbHVlKiBvdGhlclZhbHVlID0gdmFsdWVGb3JDb25zdGFudC5hZGQoa2V5LCB2
YWx1ZSkuaXRlcmF0b3ItPnZhbHVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGlmICh2YWx1ZSA9PSBvdGhlclZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIHdp
bGwgdXNlIHRoZSAib3duZXIiIHRvIHNwZWNpZnkgd2hlcmUgdGhlIHZhbHVlIHNob3VsZCBiZSBt
YXRlcmlhbGl6ZWQuCisgICAgICAgICAgICAgICAgICAgIHZhbHVlLT5vd25lciA9IGJsb2NrOwor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShvdGhlclZhbHVlKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB3aGlsZSAoIWRvbWluYXRvcnMuZG9taW5hdGVz
KG90aGVyVmFsdWUtPm93bmVyLCBibG9jaykpCisgICAgICAgICAgICAgICAgICAgIG90aGVyVmFs
dWUtPm93bmVyID0gZG9taW5hdG9ycy5pbW1lZGlhdGVEb21pbmF0b3JPZihvdGhlclZhbHVlLT5v
d25lcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGF1dG8mIGVu
dHJ5IDogdmFsdWVGb3JDb25zdGFudCkKKyAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvbnNbZW50
cnkudmFsdWUtPm93bmVyXS5hcHBlbmQoZW50cnkudmFsdWUpOworCisgICAgICAgIC8vIE5vdyBt
YWtlIHN1cmUgdGhhdCB3ZSBtb3ZlIGNvbnN0YW50cyB0byB3aGVyZSB0aGV5IGFyZSBzdXBwb3Nl
ZCB0byBnby4KKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgeworICAg
ICAgICAgICAgZm9yIChWYWx1ZSomIHZhbHVlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAg
dmFsdWUtPnBlcmZvcm1TdWJzdGl0dXRpb24oKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBWYWx1ZUtleSBrZXkgPSB2YWx1ZS0+a2V5KCk7CisgICAgICAgICAgICAgICAgaWYg
KCFtX3Byb2MuaXNGYXN0Q29uc3RhbnQoa2V5KSkKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSBlbmNvdW50ZXIgYSBmYXN0IGNvbnN0YW50
LCB0aGVuIGl0IG11c3QgYmUgdGhlIGNhbm9uaWNhbCB2YWx1ZSBmb3IgdGhhdAorICAgICAgICAg
ICAgICAgIC8vIGNvbnN0YW50LgorICAgICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZUZvckNvbnN0
YW50LmdldChrZXkpID09IHZhbHVlKTsKKworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+b3du
ZXIgPT0gYmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSXQgd2Fzbid0IGhvaXN0ZWQs
IHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8uIFdlIHVzZSB0aGUgY2xlYXJpbmcgb2YgJ293bmVy
JworICAgICAgICAgICAgICAgICAgICAvLyB0byBpbmRpY2F0ZSB0aGF0IHdlIGRvbid0IG5lZWQg
dG8gbWF0ZXJpYWxpemUgaXQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgYmxvY2suCisgICAgICAgICAg
ICAgICAgICAgIHZhbHVlLT5vd25lciA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFRoaXMgd2ls
bCBiZSBpbnNlcnRlZCBpbnRvIHNvbWUgb3RoZXIgYmFzaWMgYmxvY2suIFNvLCByZXBsYWNlIGl0
cyBvY2N1cnJlbmNlIGhlcmUKKyAgICAgICAgICAgICAgICAvLyB3aXRoIGEgTm9wLiBUaGVyZSdz
IG5vIHBhcnRpY3VsYXIgcmVhc29uIHdoeSB3ZSBkb24ndCBkbyBzb21ldGhpbmcgbGlrZQorICAg
ICAgICAgICAgICAgIC8vIFZlY3Rvcjo6cmVtb3ZlQWxsTWF0Y2hpbmcoKSBvdGhlciB0aGFuIHRo
YXQgdGhpcyBjYXNlIGNvbWVzIHVwIHRvbyBpbmZyZXF1ZW50bHkKKyAgICAgICAgICAgICAgICAv
LyBmb3IgdGhlcmUgdG8gYmUgYSBuZWVkIGZvciBzbWFydHMuCisgICAgICAgICAgICAgICAgdmFs
dWUgPSBtX3Byb2MuYWRkPFZhbHVlPihOb3AsIHZhbHVlLT5vcmlnaW4oKSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIFdlIG1heSBoYXZlIHNvbWUgY29uc3RhbnRzIHRoYXQgbmVl
ZCB0byBiZSBtYXRlcmlhbGl6ZWQgcmlnaHQgYXQgdGhlIGVuZCBvZiB0aGlzCisgICAgICAgICAg
ICAvLyBibG9jay4KKyAgICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogbWF0ZXJpYWxpemF0
aW9uc1tibG9ja10pIHsKKyAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLT5vd25lcikgeworICAg
ICAgICAgICAgICAgICAgICAvLyBJdCdzIGFscmVhZHkgbWF0ZXJpYWxpemVkIGluIHRoaXMgYmxv
Y2suCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydFZhbHVlKGJsb2NrLT5zaXplKCkg
LSAxLCB2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2luc2VydGlvblNldC5l
eGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHNpbmtTbG93
Q29uc3RhbnRzKCkKKyAgICB7CiAgICAgICAgIC8vIEZpcnN0IHdlIG5lZWQgdG8gZmlndXJlIG91
dCB3aGljaCBjb25zdGFudHMgZ28gaW50byB0aGUgZGF0YSBzZWN0aW9uLiBUaGVzZSBhcmUgbm9u
LXplcm8KICAgICAgICAgLy8gZG91YmxlIGNvbnN0YW50cy4KICAgICAgICAgZm9yIChWYWx1ZSog
dmFsdWUgOiBtX3Byb2MudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmICghbmVlZHNNb3Rpb24o
dmFsdWUpKQorICAgICAgICAgICAgVmFsdWVLZXkga2V5ID0gdmFsdWUtPmtleSgpOworICAgICAg
ICAgICAgaWYgKCFuZWVkc01vdGlvbihrZXkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgbV90b1JlbW92ZS5hcHBlbmQodmFsdWUpOwotICAgICAgICAgICAgVmFsdWVL
ZXkga2V5ID0gdmFsdWUtPmtleSgpOwogICAgICAgICAgICAgaWYgKGdvZXNJblRhYmxlKGtleSkp
CiAgICAgICAgICAgICAgICAgbV9jb25zdFRhYmxlLmFkZChrZXksIG1fY29uc3RUYWJsZS5zaXpl
KCkpOwogICAgICAgICB9CkBAIC04NywxMCArMTY5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICBTdGFja21hcFZhbHVlKiBzdGFja21hcCA9IHZhbHVlLT5hczxTdGFja21hcFZhbHVlPigp
OwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJbmRleCA9IDA7IGNoaWxkSW5k
ZXggPCB2YWx1ZS0+bnVtQ2hpbGRyZW4oKTsgKytjaGlsZEluZGV4KSB7CiAgICAgICAgICAgICAg
ICAgICAgIFZhbHVlKiYgY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoY2hpbGRJbmRleCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICghbmVlZHNNb3Rpb24oY2hpbGQpKQorICAgICAgICAgICAgICAgICAg
ICBWYWx1ZUtleSBrZXkgPSBjaGlsZC0+a2V5KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
bmVlZHNNb3Rpb24oa2V5KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgICAgICAgICAgICAgIFZhbHVlS2V5IGtleSA9IGNoaWxkLT5rZXkoKTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKHN0YWNrbWFwCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiBnb2Vz
SW5UYWJsZShrZXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiBzdGFja21hcC0+Y29uc3Ry
YWluZWRDaGlsZChjaGlsZEluZGV4KS5yZXAoKS5pc0FueSgpKSB7CkBAIC0xMTUsOCArMTk3LDcg
QEAgcHVibGljOgogICAgICAgICBmb3IgKFZhbHVlKiB0b1JlbW92ZSA6IG1fdG9SZW1vdmUpCiAg
ICAgICAgICAgICB0b1JlbW92ZS0+cmVwbGFjZVdpdGhOb3AoKTsKICAgICB9Ci0KLXByaXZhdGU6
CisgICAgCiAgICAgVmFsdWUqIG1hdGVyaWFsaXplKHVuc2lnbmVkIHZhbHVlSW5kZXgsIGNvbnN0
IFZhbHVlS2V5JiBrZXksIGNvbnN0IE9yaWdpbiYgb3JpZ2luKQogICAgIHsKICAgICAgICAgaWYg
KFZhbHVlKiByZXN1bHQgPSBtX2NvbnN0YW50cy5nZXQoa2V5KSkKQEAgLTE0Nyw5ICsyMjgsOSBA
QCBwcml2YXRlOgogICAgICAgICByZXR1cm4ga2V5Lm9wY29kZSgpID09IENvbnN0RG91YmxlICYm
IGtleSAhPSBkb3VibGVaZXJvKCk7CiAgICAgfQogCi0gICAgYm9vbCBuZWVkc01vdGlvbihjb25z
dCBWYWx1ZSogdmFsdWUpCisgICAgYm9vbCBuZWVkc01vdGlvbihjb25zdCBWYWx1ZUtleSYga2V5
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLT5pc0NvbnN0YW50KCk7CisgICAgICAgIHJl
dHVybiBrZXkuaXNDb25zdGFudCgpICYmICFtX3Byb2MuaXNGYXN0Q29uc3RhbnQoa2V5KTsKICAg
ICB9CiAKICAgICBzdGF0aWMgVmFsdWVLZXkgZG91YmxlWmVybygpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNPcGNvZGUuaAkocmV2aXNpb24gMTkzNjM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMSw2ICsyMzEsMTggQEAg
aW5saW5lIE9wY29kZSBjb25zdFB0ck9wY29kZSgpCiAgICAgcmV0dXJuIENvbnN0MzI7CiB9CiAK
K2lubGluZSBib29sIGlzQ29uc3RhbnQoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9w
Y29kZSkgeworICAgIGNhc2UgQ29uc3QzMjoKKyAgICBjYXNlIENvbnN0NjQ6CisgICAgY2FzZSBD
b25zdERvdWJsZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKIG5h
bWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUu
Y3BwCShyZXZpc2lvbiAxOTM2MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9j
ZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNCArMzIsMTcgQEAKICNpbmNsdWRlICJC
M0Jhc2ljQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMuaCIKICNp
bmNsdWRlICJCM0Jsb2NrV29ya2xpc3QuaCIKKyNpbmNsdWRlICJCM0NGRy5oIgogI2luY2x1ZGUg
IkIzRGF0YVNlY3Rpb24uaCIKKyNpbmNsdWRlICJCM0RvbWluYXRvcnMuaCIKICNpbmNsdWRlICJC
M09wYXF1ZUJ5cHJvZHVjdHMuaCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogUHJvY2VkdXJlOjpQcm9jZWR1cmUoKQotICAg
IDogbV9sYXN0UGhhc2VOYW1lKCJpbml0aWFsIikKKyAgICA6IG1fY2ZnKG5ldyBDRkcoKnRoaXMp
KQorICAgICwgbV9sYXN0UGhhc2VOYW1lKCJpbml0aWFsIikKICAgICAsIG1fYnlwcm9kdWN0cyhz
dGQ6Om1ha2VfdW5pcXVlPE9wYXF1ZUJ5cHJvZHVjdHM+KCkpCiAgICAgLCBtX2NvZGUobmV3IEFp
cjo6Q29kZSgqdGhpcykpCiB7CkBAIC0xMTMsNiArMTE2LDExIEBAIHZvaWQgUHJvY2VkdXJlOjpy
ZXNldFJlYWNoYWJpbGl0eSgpCiAgICAgICAgIH0pOwogfQogCit2b2lkIFByb2NlZHVyZTo6aW52
YWxpZGF0ZUNGRygpCit7CisgICAgbV9kb21pbmF0b3JzID0gbnVsbHB0cjsKK30KKwogdm9pZCBQ
cm9jZWR1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrIDogKnRoaXMpCkBAIC0xMzgsNiArMTQ2LDI0IEBAIHZvaWQgUHJvY2VkdXJl
OjpkZWxldGVWYWx1ZShWYWx1ZSogdmFsdWUKICAgICBtX3ZhbHVlc1t2YWx1ZS0+aW5kZXgoKV0g
PSBudWxscHRyOwogfQogCitEb21pbmF0b3JzJiBQcm9jZWR1cmU6OmRvbWluYXRvcnMoKQorewor
ICAgIGlmICghbV9kb21pbmF0b3JzKQorICAgICAgICBtX2RvbWluYXRvcnMgPSBzdGQ6Om1ha2Vf
dW5pcXVlPERvbWluYXRvcnM+KCp0aGlzKTsKKyAgICByZXR1cm4gKm1fZG9taW5hdG9yczsKK30K
Kwordm9pZCBQcm9jZWR1cmU6OmFkZEZhc3RDb25zdGFudChjb25zdCBWYWx1ZUtleSYgY29uc3Rh
bnQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnQuaXNDb25zdGFudCgpKTsKKyAgICBt
X2Zhc3RDb25zdGFudHMuYWRkKGNvbnN0YW50KTsKK30KKworYm9vbCBQcm9jZWR1cmU6OmlzRmFz
dENvbnN0YW50KGNvbnN0IFZhbHVlS2V5JiBjb25zdGFudCkKK3sKKyAgICByZXR1cm4gbV9mYXN0
Q29uc3RhbnRzLmNvbnRhaW5zKGNvbnN0YW50KTsKK30KKwogdm9pZCogUHJvY2VkdXJlOjphZGRE
YXRhU2VjdGlvbihzaXplX3Qgc2l6ZSkKIHsKICAgICBpZiAoIXNpemUpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNpb24gMTkzNjM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEw
ICszMSwxMiBAQAogI2luY2x1ZGUgIkIzT3BhcXVlQnlwcm9kdWN0cy5oIgogI2luY2x1ZGUgIkIz
T3JpZ2luLmgiCiAjaW5jbHVkZSAiQjNUeXBlLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUtleS5oIgog
I2luY2x1ZGUgIlB1cmVOYU4uaCIKICNpbmNsdWRlICJSZWdpc3RlckF0T2Zmc2V0TGlzdC5oIgog
I2luY2x1ZGUgPHd0Zi9CYWcuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVk
ZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1RyaVN0YXRlLmg+CkBAIC00NCw2
ICs0Niw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCiBjbGFzcyBCYXNpY0Js
b2NrOwogY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQ7CitjbGFzcyBDRkc7CitjbGFzcyBEb21pbmF0
b3JzOwogY2xhc3MgVmFsdWU7CiAKIG5hbWVzcGFjZSBBaXIgeyBjbGFzcyBDb2RlOyB9CkBAIC03
MCw2ICs3NCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNldFZhbHVlT3duZXJzKCk7CiAgICAg
dm9pZCByZXNldFJlYWNoYWJpbGl0eSgpOwogCisgICAgLy8gVGhpcyBkZXN0cm95cyBDRkcgYW5h
bHlzZXMuIElmIHdlIGFzayBmb3IgdGhlbSBhZ2Fpbiwgd2Ugd2lsbCByZWNvbXB1dGUgdGhlbS4g
VXN1YWxseSB5b3UKKyAgICAvLyBzaG91bGQgY2FsbCB0aGlzIGFueXRpbWUgeW91IGNhbGwgcmVz
ZXRSZWFjaGFiaWxpdHkoKS4KKyAgICB2b2lkIGludmFsaWRhdGVDRkcoKTsKKwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCiAgICAgdW5zaWdu
ZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzLnNpemUoKTsgfQpAQCAtMjAwLDYgKzIw
OCwxMyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRlbGV0ZVZhbHVlKFZhbHVlKik7CiAKKyAgICBD
RkcmIGNmZygpIGNvbnN0IHsgcmV0dXJuICptX2NmZzsgfQorCisgICAgRG9taW5hdG9ycyYgZG9t
aW5hdG9ycygpOworCisgICAgdm9pZCBhZGRGYXN0Q29uc3RhbnQoY29uc3QgVmFsdWVLZXkmKTsK
KyAgICBib29sIGlzRmFzdENvbnN0YW50KGNvbnN0IFZhbHVlS2V5Jik7CisKICAgICAvLyBUaGUg
bmFtZSBoYXMgdG8gYmUgYSBzdHJpbmcgbGl0ZXJhbCwgc2luY2Ugd2UgZG9uJ3QgZG8gYW55IG1l
bW9yeSBtYW5hZ2VtZW50IGZvciB0aGUgc3RyaW5nLgogICAgIHZvaWQgc2V0TGFzdFBoYXNlTmFt
ZShjb25zdCBjaGFyKiBuYW1lKQogICAgIHsKQEAgLTIzNSw2ICsyNTAsOSBAQCBwcml2YXRlOgog
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IG1fYmxvY2tzOwogICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWU+PiBtX3ZhbHVlczsKICAgICBWZWN0b3I8c2l6ZV90
PiBtX3ZhbHVlSW5kZXhGcmVlTGlzdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0ZHPiBtX2NmZzsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8RG9taW5hdG9ycz4gbV9kb21pbmF0b3JzOworICAgIEhhc2hT
ZXQ8VmFsdWVLZXk+IG1fZmFzdENvbnN0YW50czsKICAgICBjb25zdCBjaGFyKiBtX2xhc3RQaGFz
ZU5hbWU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE9wYXF1ZUJ5cHJvZHVjdHM+IG1fYnlwcm9kdWN0
czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWlyOjpDb2RlPiBtX2NvZGU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCShyZXZpc2lvbiAxOTM2
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIGlm
IChtX2NoYW5nZWRDRkcpIHsKICAgICAgICAgICAgICAgICBtX3Byb2MucmVzZXRSZWFjaGFiaWxp
dHkoKTsKKyAgICAgICAgICAgICAgICBtX3Byb2MuaW52YWxpZGF0ZUNGRygpOwogICAgICAgICAg
ICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCShyZXZpc2lvbiAxOTM2MzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtNTQsMTQgKzU0LDcgQEAgY29uc3QgVCogVmFsdWU6OmFzKCkgY29uc3QKIAogaW5saW5lIGJv
b2wgVmFsdWU6OmlzQ29uc3RhbnQoKSBjb25zdAogewotICAgIHN3aXRjaCAob3Bjb2RlKCkpIHsK
LSAgICBjYXNlIENvbnN0MzI6Ci0gICAgY2FzZSBDb25zdDY0OgotICAgIGNhc2UgQ29uc3REb3Vi
bGU6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9CisgICAgcmV0dXJuIEIzOjppc0NvbnN0YW50KG9wY29kZSgpKTsKIH0KIAog
aW5saW5lIGJvb2wgVmFsdWU6OmlzSW50ZWdlcigpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZUtleS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlS2V5LmgJKHJldmlzaW9uIDE5MzYzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw2ICsxMjAsMTEg
QEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCisgICAgYm9vbCBpc0NvbnN0YW50KCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBCMzo6aXNDb25zdGFudChvcGNvZGUoKSk7CisgICAg
fQorCiAgICAgLy8gQXR0ZW1wdHMgdG8gbWF0ZXJpYWxpemUgdGhlIFZhbHVlIGZvciB0aGlzIFZh
bHVlS2V5LiBNYXkgcmV0dXJuIG51bGxwdHIgaWYgdGhlIHZhbHVlIGNhbm5vdAogICAgIC8vIGJl
IG1hdGVyaWFsaXplZC4gVGhpcyBoYXBwZW5zIGZvciBDaGVja0FkZCBhbmQgZnJpZW5kcy4gWW91
IGNhbiB1c2UgY2FuTWF0ZXJpYWxpemUoKSB0byBjaGVjawogICAgIC8vIGlmIHlvdXIga2V5IGlz
IG1hdGVyaWFsaXphYmxlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJD
b2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNv
ZGUuY3BwCShyZXZpc2lvbiAxOTM2MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNiArMTM0LDExIEBAIEJhc2ljQmxv
Y2sqIENvZGU6OmZpbmROZXh0QmxvY2soQmFzaWNCbG8KICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAordm9pZCBDb2RlOjphZGRGYXN0VG1wKFRtcCB0bXApCit7CisgICAgbV9mYXN0VG1wcy5hZGQo
dG1wKTsKK30KKwogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgogCiAjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5o
CShyZXZpc2lvbiAxOTM2MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNv
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkFpckJhc2lj
QmxvY2suaCIKICNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCiAjaW5jbHVkZSAiQWlyU3RhY2tTbG90
LmgiCisjaW5jbHVkZSAiQWlyVG1wLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJBdE9mZnNldExpc3Qu
aCIKICNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgogCkBAIC0yODksNiArMjkwLDkgQEAgcHVi
bGljOgogICAgIH07CiAKICAgICBTcGVjaWFsc0NvbGxlY3Rpb24gc3BlY2lhbHMoKSBjb25zdCB7
IHJldHVybiBTcGVjaWFsc0NvbGxlY3Rpb24oKnRoaXMpOyB9CisKKyAgICB2b2lkIGFkZEZhc3RU
bXAoVG1wKTsKKyAgICBib29sIGlzRmFzdFRtcChUbXAgdG1wKSBjb25zdCB7IHJldHVybiBtX2Zh
c3RUbXBzLmNvbnRhaW5zKHRtcCk7IH0KICAgICAKICAgICAvLyBUaGUgbmFtZSBoYXMgdG8gYmUg
YSBzdHJpbmcgbGl0ZXJhbCwgc2luY2Ugd2UgZG9uJ3QgZG8gYW55IG1lbW9yeSBtYW5hZ2VtZW50
IGZvciB0aGUgc3RyaW5nLgogICAgIHZvaWQgc2V0TGFzdFBoYXNlTmFtZShjb25zdCBjaGFyKiBu
YW1lKQpAQCAtMzA3LDYgKzMxMSw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxTdGFja1Nsb3Q+PiBtX3N0YWNrU2xvdHM7CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxCYXNpY0Jsb2NrPj4gbV9ibG9ja3M7CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTcGVj
aWFsPj4gbV9zcGVjaWFsczsKKyAgICBIYXNoU2V0PFRtcD4gbV9mYXN0VG1wczsKICAgICBDQ2Fs
bFNwZWNpYWwqIG1fY0NhbGxTcGVjaWFsIHsgbnVsbHB0ciB9OwogICAgIHVuc2lnbmVkIG1fbnVt
R1BUbXBzIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fbnVtRlBUbXBzIHsgMCB9OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRl
ZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAJKHJldmlzaW9uIDE5MzYzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NjMsNiArNTYzLDExIEBAIHByaXZhdGU6CiAgICAgICAgIC8vIEhpZ2hl
ciBzY29yZSBtZWFucyBtb3JlIGRlc2lyYWJsZSB0byBzcGlsbC4gTG93ZXIgc2NvcmVzIG1heGlt
aXplIHRoZSBsaWtlbGlob29kIHRoYXQgYSB0bXAKICAgICAgICAgLy8gZ2V0cyBhIHJlZ2lzdGVy
LgogICAgICAgICBhdXRvIHNjb3JlID0gWyZdIChUbXAgdG1wKSAtPiBkb3VibGUgeworICAgICAg
ICAgICAgLy8gQWlyIGV4cG9zZXMgdGhlIGNvbmNlcHQgb2YgImZhc3QgdG1wcyIsIGFuZCB3ZSBp
bnRlcnByZXQgdGhhdCB0byBtZWFuIHRoYXQgdGhlIHRtcAorICAgICAgICAgICAgLy8gc2hvdWxk
IGFsd2F5cyBiZSBpbiBhIHJlZ2lzdGVyLgorICAgICAgICAgICAgaWYgKG1fY29kZS5pc0Zhc3RU
bXAodG1wKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIAogICAgICAg
ICAgICAgLy8gQWxsIGVsc2UgYmVpbmcgZXF1YWwsIHRoZSBzY29yZSBzaG91bGQgYmUgZGlyZWN0
bHkgcmVsYXRlZCB0byB0aGUgZGVncmVlLgogICAgICAgICAgICAgZG91YmxlIGRlZ3JlZSA9IHN0
YXRpY19jYXN0PGRvdWJsZT4obV9kZWdyZWVzW0Fic29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNv
bHV0ZUluZGV4KHRtcCldKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
b21pbmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
b21pbmF0b3JzLmgJKHJldmlzaW9uIDE5MzYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRG9taW5hdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24g
MTkzNjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NSw2ICsyOTUsMTMgQEAgcHVibGljOgogI2VuZGlmCiAg
ICAgICAgIG1fdGFnVHlwZU51bWJlciA9IG1fb3V0LmNvbnN0SW50NjQoVGFnVHlwZU51bWJlcik7
CiAgICAgICAgIG1fdGFnTWFzayA9IG1fb3V0LmNvbnN0SW50NjQoVGFnTWFzayk7CisKKyNpZiBG
VExfVVNFU19CMworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBCMyBrbm93cyB0aGF0IHdlIHJl
YWxseSBjYXJlIGFib3V0IHRoZSBtYXNrIHJlZ2lzdGVycy4gVGhpcyBmb3JjZXMgdGhlCisgICAg
ICAgIC8vIGNvbnN0YW50cyB0byBiZSBtYXRlcmlhbGl6ZWQgaW4gcmVnaXN0ZXJzLgorICAgICAg
ICBtX3Byb2MuYWRkRmFzdENvbnN0YW50KG1fdGFnVHlwZU51bWJlci0+a2V5KCkpOworICAgICAg
ICBtX3Byb2MuYWRkRmFzdENvbnN0YW50KG1fdGFnTWFzay0+a2V5KCkpOworI2VuZGlmIC8vIEZU
TF9VU0VTX0IzCiAgICAgICAgIAogICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5jb25zdElu
dFB0cihjb2RlQmxvY2soKSksIGFkZHJlc3NGb3IoSlNTdGFjazo6Q29kZUJsb2NrKSk7CiAgICAg
ICAgIApJbmRleDogU291cmNlL1dURi93dGYvRG9taW5hdG9ycy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0RvbWluYXRvcnMuaAkocmV2aXNpb24gMTkzNjM1KQorKysgU291cmNlL1dU
Ri93dGYvRG9taW5hdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZu
ZGVmIFdURkRvbWluYXRvcnNfaAogI2RlZmluZSBXVEZEb21pbmF0b3JzX2gKIAorI2luY2x1ZGUg
PHd0Zi9GYXN0Qml0VmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+
CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNTU1LDcgKzU1Niw3IEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgICAgIGJvb2wgZG9taW5hdGVzKHR5cGVuYW1lIEdyYXBoOjpOb2RlIGZyb20sIHR5cGVuYW1l
IEdyYXBoOjpOb2RlIHRvKSBjb25zdAogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZG9t
aW5hdGVzKGZyb20tPmluZGV4LCB0by0+aW5kZXgpOworICAgICAgICAgICAgcmV0dXJuIGRvbWlu
YXRlcyhtX2dyYXBoLmluZGV4KGZyb20pLCBtX2dyYXBoLmluZGV4KHRvKSk7CiAgICAgICAgIH0K
ICAgICAKICAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CkBAIC02MzYs
MTIgKzYzNywxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgQmxvY2sgIiwgZ3JhcGguZHVtcChncmFwaC5ub2Rl
KGJsb2NrSW5kZXgpKSwgIjogc3VjY2Vzc29ycyA9IFsiKTsKICAgICAgICAgICAgICAgICBDb21t
YVByaW50ZXIgY29tbWE7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxv
Zyhjb21tYSwgZ3JhcGguZHVtcChibG9jay0+c3VjY2Vzc29yKGkpKSk7CisgICAgICAgICAgICAg
ICAgZm9yIChhdXRvIHN1Y2Nlc3NvciA6IGdyYXBoLnN1Y2Nlc3NvcnMoYmxvY2spKQorICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKGNvbW1hLCBncmFwaC5kdW1wKHN1Y2Nlc3NvcikpOwogICAg
ICAgICAgICAgICAgIGRhdGFMb2coIl0sIHByZWRlY2Vzc29ycyA9IFsiKTsKICAgICAgICAgICAg
ICAgICBjb21tYSA9IENvbW1hUHJpbnRlcigpOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKQotICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKGNvbW1hLCBncmFwaC5kdW1wKGJsb2NrLT5wcmVkZWNlc3NvcnNb
aV0pKTsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8gcHJlZGVjZXNzb3IgOiBncmFwaC5wcmVk
ZWNlc3NvcnMoYmxvY2spKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKGNvbW1hLCBncmFw
aC5kdW1wKHByZWRlY2Vzc29yKSk7CiAgICAgICAgICAgICAgICAgZGF0YUxvZygiXVxuIik7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266825</attachid>
            <date>2015-12-07 16:05:00 -0800</date>
            <delta_ts>2015-12-07 16:37:34 -0800</delta_ts>
            <desc>it&apos;s starting to work</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>34086</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTM2NjIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzA2LDYgKzMwNiw4IEBACiAJCTBGMzM4RTFFMUJGMjg2
RUEwMDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUxQTFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1h
Y3Jvcy5oICovOyB9OwogCQkwRjMzRkNGNzFDMTM2RTI1MDAzMjNGNjcgLyogQjNTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzM0ZDRjUxQzEzNkUyNTAwMzIzRjY3IC8qIEIzU3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zLmNwcCAqLzsgfTsKIAkJMEYzM0ZDRjgxQzEzNkUyNTAwMzIzRjY3IC8qIEIzU3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjMzRkNGNjFDMTM2RTI1MDAzMjNGNjcgLyogQjNTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMuaCAqLzsgfTsKKwkJMEYzM0ZDRkIxQzE2MjVCRTAwMzIzRjY3IC8qIEIzQ0ZHLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzRkNGOTFD
MTYyNUJFMDAzMjNGNjcgLyogQjNDRkcuaCAqLzsgfTsKKwkJMEYzM0ZDRkMxQzE2MjVCRTAwMzIz
RjY3IC8qIEIzRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYzM0ZDRkExQzE2MjVCRTAwMzIzRjY3IC8qIEIzRG9taW5hdG9ycy5oICov
OyB9OwogCQkwRjM0QjE0OTE2RDQyMDEwMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM0QjE0NzE2RDQyMDBF
MDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgKi87IH07CiAJCTBGMzRCMTRBMTZENDIwMTMwMDFD
REE1QSAvKiBERkdVc2VLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjM0QjE0ODE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oICovOyB9
OwogCQkwRjM3MzA4QzFDMEJEMjkxMDAwNTJCRkEgLyogQjNQaGlDaGlsZHJlbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM3MzA4QTFDMEJEMjkx
MDAwNTJCRkEgLyogQjNQaGlDaGlsZHJlbi5jcHAgKi87IH07CkBAIC0yNDA0LDYgKzI0MDYsOCBA
QAogCQkwRjMzOEUxQTFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0xvd2VyTWFjcm9zLmg7IHBhdGggPSBiMy9CM0xv
d2VyTWFjcm9zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzNGQ0Y1MUMxMzZF
MjUwMDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5jcHA7
IHBhdGggPSBiMy9CM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMzNGQ0Y2MUMxMzZFMjUwMDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1N0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcy5oOyBwYXRoID0gYjMvQjNTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzM0ZDRjkxQzE2MjVCRTAwMzIz
RjY3IC8qIEIzQ0ZHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ0ZHLmg7
IHBhdGggPSBiMy9CM0NGRy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMzRkNG
QTFDMTYyNUJFMDAzMjNGNjcgLyogQjNEb21pbmF0b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEIzRG9taW5hdG9ycy5oOyBwYXRoID0gYjMvQjNEb21pbmF0b3JzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzRCMTQ3MTZENDIwMEUwMDFDREE1QSAvKiBE
RkdVc2VLaW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1Vz
ZUtpbmQuY3BwOyBwYXRoID0gZGZnL0RGR1VzZUtpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjM0QjE0ODE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdVc2VLaW5kLmg7IHBhdGggPSBkZmcvREZH
VXNlS2luZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM3MzA4QTFDMEJEMjkx
MDAwNTJCRkEgLyogQjNQaGlDaGlsZHJlbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBCM1BoaUNoaWxkcmVuLmNwcDsgcGF0aCA9IGIzL0IzUGhpQ2hpbGRyZW4uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDU2Nyw2ICs0NTcxLDcgQEAKIAkJCQkw
RkVDODRCQTFCREFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0LmggKi8sCiAJCQkJMEYz
MzhERjcxQkU5NkFBODAwMTNDODhGIC8qIEIzQ0NhbGxWYWx1ZS5jcHAgKi8sCiAJCQkJMEYzMzhE
RjgxQkU5NkFBODAwMTNDODhGIC8qIEIzQ0NhbGxWYWx1ZS5oICovLAorCQkJCTBGMzNGQ0Y5MUMx
NjI1QkUwMDMyM0Y2NyAvKiBCM0NGRy5oICovLAogCQkJCTBGRUM4NEJCMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0NoZWNrU3BlY2lhbC5jcHAgKi8sCiAJCQkJMEZFQzg0QkMxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ2hlY2tTcGVjaWFsLmggKi8sCiAJCQkJMEZFQzg0QkQxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ2hlY2tWYWx1ZS5jcHAgKi8sCkBAIC00NTkwLDYgKzQ1OTUsNyBAQAogCQkJCTBGRUM4NENB
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5oICovLAogCQkJCTBGMzM4RTAxMUJG
MDI3NkMwMDEzQzg4RiAvKiBCM0RhdGFTZWN0aW9uLmNwcCAqLywKIAkJCQkwRjMzOEUwMjFCRjAy
NzZDMDAxM0M4OEYgLyogQjNEYXRhU2VjdGlvbi5oICovLAorCQkJCTBGMzNGQ0ZBMUMxNjI1QkUw
MDMyM0Y2NyAvKiBCM0RvbWluYXRvcnMuaCAqLywKIAkJCQkwRkVDODVDNDFCRTE2RjVBMDA4MEZG
NzQgLyogQjNFZmZlY3RzLmNwcCAqLywKIAkJCQkwRkVDODVCRTFCRTE2N0EwMDA4MEZGNzQgLyog
QjNFZmZlY3RzLmggKi8sCiAJCQkJMEZFQzg0Q0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVl
bmN5Q2xhc3MuY3BwICovLApAQCAtNzUxOCw2ICs3NTI0LDcgQEAKIAkJCQk5OTI4RkYzQzE4QUM0
QUVDMDBCOENGMTIgLyogSlNSZXBsYXlJbnB1dHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDI2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1JldGFpblB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MTQ4NzRBRTYxNUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMzNGQ0ZCMUMxNjI1QkUwMDMyM0Y2NyAvKiBCM0NGRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTdDMEM0QUMxNjgxMDMwMjAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmUHJpdmF0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRkUxMjIwMjcxQkU3RjU4QzAwMzlFNkYyIC8qIEpJVEFkZEdlbmVyYXRvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMTExNTdGMzMyQzAwNEE0RTdEIC8qIEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLApAQCAtNzc5Nyw2ICs3ODA0LDcgQEAK
IAkJCQk3MDVCNDFBRTFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sQ29uc3RydWN0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk5NkI3MzI3MUJEQTA4RUYwMDMzMUI4NCAvKiBTeW1ib2xDb25zdHJ1
Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwNUI0MUIwMUE2RTUwMUUwMDcxNjc1NyAv
KiBTeW1ib2xPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMzNGQ0ZDMUMxNjI1QkUwMDMy
M0Y2NyAvKiBCM0RvbWluYXRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwNUI0MUIyMUE2RTUw
MUUwMDcxNjc1NyAvKiBTeW1ib2xQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3
MzI4MUJEQTA4RUYwMDMzMUI4NCAvKiBTeW1ib2xQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQ2QjBFMTZGNUNEMDBCMzQ0NjAgLyogU3ltYm9sVGFibGUuaCBpbiBIZWFk
ZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0ZHLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0ZHLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDRkcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNDRkdfaAorI2RlZmluZSBCM0NGR19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1
ZGUgIkIzSW5kZXhTZXQuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQ0ZHIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVm
IEJhc2ljQmxvY2sqIE5vZGU7CisgICAgdHlwZWRlZiBJbmRleFNldDxCYXNpY0Jsb2NrPiBTZXQ7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgTWFwID0gSW5kZXhNYXA8QmFzaWNCbG9j
aywgVD47CisgICAgdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDQ+IExpc3Q7CisKKyAgICBD
RkcoUHJvY2VkdXJlJiBwcm9jKQorICAgICAgICA6IG1fcHJvYyhwcm9jKQorICAgIHsKKyAgICB9
CisKKyAgICBOb2RlIHJvb3QoKSB7IHJldHVybiBtX3Byb2NbMF07IH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CisgICAgTWFwPFQ+IG5ld01hcCgpIHsgcmV0dXJuIEluZGV4TWFwPEJhc2lj
QmxvY2ssIFQ+KG1fcHJvYy5zaXplKCkpOyB9CisKKyAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPEJh
c2ljQmxvY2ssIEJhc2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvcnMoTm9kZSBub2Rl
KSB7IHJldHVybiBub2RlLT5zdWNjZXNzb3JCbG9ja3MoKTsgfQorICAgIEJhc2ljQmxvY2s6OlBy
ZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzKE5vZGUgbm9kZSkgeyByZXR1cm4gbm9kZS0+cHJl
ZGVjZXNzb3JzKCk7IH0KKworICAgIHVuc2lnbmVkIGluZGV4KE5vZGUgbm9kZSkgY29uc3QgeyBy
ZXR1cm4gbm9kZS0+aW5kZXgoKTsgfQorICAgIE5vZGUgbm9kZSh1bnNpZ25lZCBpbmRleCkgY29u
c3QgeyByZXR1cm4gbV9wcm9jW2luZGV4XTsgfQorICAgIHVuc2lnbmVkIG51bU5vZGVzKCkgY29u
c3QgeyByZXR1cm4gbV9wcm9jLnNpemUoKTsgfQorCisgICAgUG9pbnRlckR1bXA8QmFzaWNCbG9j
az4gZHVtcChOb2RlIG5vZGUpIGNvbnN0IHsgcmV0dXJuIHBvaW50ZXJEdW1wKG5vZGUpOyB9CisK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIG1f
cHJvYy5kdW1wKG91dCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFByb2NlZHVyZSYgbV9wcm9j
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQjNDRkdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNEb21pbmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzRG9taW5hdG9ycy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzRG9taW5hdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0RvbWluYXRv
cnNfaAorI2RlZmluZSBCM0RvbWluYXRvcnNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkIzQ0ZHLmgiCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKyNpbmNsdWRlICJCM1Byb2Nl
ZHVyZS5oIgorI2luY2x1ZGUgPHd0Zi9Eb21pbmF0b3JzLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RN
YWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIERvbWluYXRvcnMgOiBwdWJsaWMgV1RGOjpEb21pbmF0
b3JzPENGRz4geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERvbWluYXRvcnMpOworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIERvbWluYXRvcnMoUHJvY2VkdXJl
JiBwcm9jKQorICAgICAgICA6IFdURjo6RG9taW5hdG9yczxDRkc+KHByb2MuY2ZnKCksIHNob3Vs
ZFZhbGlkYXRlSVIoKSkKKyAgICB7CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNEb21pbmF0b3Jz
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhNYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleE1hcC5oCShyZXZpc2lvbiAx
OTM2NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleE1hcC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00OSw2ICs0OSwxOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fdmVjdG9yLmZpbGwo
VmFsdWUoKSwgc2l6ZSk7CiAgICAgfQogCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVy
biBtX3ZlY3Rvci5zaXplKCk7IH0KKworICAgIFZhbHVlJiBvcGVyYXRvcltdKHNpemVfdCBpbmRl
eCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZlY3RvcltpbmRleF07CisgICAgfQorCisgICAg
Y29uc3QgVmFsdWUmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fdmVjdG9yW2luZGV4XTsKKyAgICB9CisgICAgCiAgICAgVmFsdWUmIG9wZXJh
dG9yW10oS2V5KiBrZXkpCiAgICAgewogICAgICAgICByZXR1cm4gbV92ZWN0b3Jba2V5LT5pbmRl
eCgpXTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAJ
KHJldmlzaW9uIDE5MzY2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFj
cm9zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsOCArNTgsMTAgQEAgcHVibGljOgogICAgICAg
ICAgICAgcHJvY2Vzc0N1cnJlbnRCbG9jaygpOwogICAgICAgICB9CiAgICAgICAgIG1fY2hhbmdl
ZCB8PSBtX2Jsb2NrSW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKTsKLSAgICAgICAgaWYgKG1fY2hhbmdl
ZCkKKyAgICAgICAgaWYgKG1fY2hhbmdlZCkgewogICAgICAgICAgICAgbV9wcm9jLnJlc2V0UmVh
Y2hhYmlsaXR5KCk7CisgICAgICAgICAgICBtX3Byb2MuaW52YWxpZGF0ZUNGRygpOworICAgICAg
ICB9CiAgICAgICAgIHJldHVybiBtX2NoYW5nZWQ7CiAgICAgfQogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDE5MzY2MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMDIsOCArMzAyLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICB3aGlsZSAoc2hvdWxk
Q29weVByb3BhZ2F0ZSh2YWx1ZSkpCiAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS0+Y2hp
bGQoMCk7CiAgICAgICAgICAgICBUbXAmIHJlYWxUbXAgPSBtX3ZhbHVlVG9UbXBbdmFsdWVdOwot
ICAgICAgICAgICAgaWYgKCFyZWFsVG1wKQorICAgICAgICAgICAgaWYgKCFyZWFsVG1wKSB7CiAg
ICAgICAgICAgICAgICAgcmVhbFRtcCA9IG1fY29kZS5uZXdUbXAoQXJnOjp0eXBlRm9yQjNUeXBl
KHZhbHVlLT50eXBlKCkpKTsKKyAgICAgICAgICAgICAgICBpZiAobV9wcm9jZWR1cmUuaXNGYXN0
Q29uc3RhbnQodmFsdWUtPmtleSgpKSkKKyAgICAgICAgICAgICAgICAgICAgbV9jb2RlLmFkZEZh
c3RUbXAocmVhbFRtcCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICB0bXAgPSByZWFsVG1w
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0bXA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNNb3ZlQ29uc3RhbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNNb3ZlQ29uc3RhbnRzLmNwcAkocmV2aXNpb24gMTkzNjYyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50cy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDEyICsyOSwxNSBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJCM0Jh
c2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNEb21pbmF0b3JzLmgiCiAjaW5jbHVkZSAi
QjNJbnNlcnRpb25TZXRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkIzUGhhc2VTY29wZS5oIgogI2luY2x1ZGUgIkIzUHJvY2VkdXJlSW5saW5lcy5oIgog
I2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUtleUlubGluZXMu
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKQEAgLTUwLDI3ICs1MywxMzcgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBydW4oKQogICAgIHsKLSAgICAgICAgLy8gRXZlbnR1YWxseSB0aGlz
IHBoYXNlIHdpbGwgZG8gc21hcnQgdGhpbmdzLiBGb3Igbm93LCBpdCB1c2VzIGEgc3VwZXIgc2lt
cGxlIGhldXJpc3RpYzogaXQKLSAgICAgICAgLy8gcGxhY2VzIGNvbnN0YW50cyBpbiB0aGUgYmxv
Y2sgdGhhdCB1c2VzIHRoZW0sIGFuZCBtYWtlcyBzdXJlIHRoYXQgZWFjaCBibG9jayBoYXMgb25s
eSBvbmUKLSAgICAgICAgLy8gbWF0ZXJpYWxpemF0aW9uIGZvciBlYWNoIGNvbnN0YW50LiBOb3Rl
IHRoYXQgdGhpcyBtb3N0bHkgb25seSBtYXR0ZXJzIGZvciBsYXJnZSBjb25zdGFudHMsIHNpbmNl
Ci0gICAgICAgIC8vIHNtYWxsIGNvbnN0YW50cyBnZXQgZnVzZWQgaW50byB0aGUgaW5zdHJ1Y3Rp
b25zIHRoYXQgdXNlIHRoZW0uIEJ1dCBpdCBtaWdodCBtYXR0ZXIgZm9yIHNtYWxsCi0gICAgICAg
IC8vIGNvbnN0YW50cyBpZiB0aGV5IGFyZSB1c2VkIGluIGluc3RydWN0aW9ucyB0aGF0IGRvbid0
IGRvIGltbWVkaWF0ZXMsIGxpa2UgY29uZGl0aW9uYWwgbW92ZXMuCi0KLSAgICAgICAgLy8gRklY
TUU6IEltcGxlbWVudCBhIGJldHRlciBzdG9yeSBmb3IgY29uc3RhbnRzLiBBdCBhIG1pbmltdW0g
dGhpcyBzaG91bGQgYWxsb3cgdGhlIEIzCi0gICAgICAgIC8vIGNsaWVudCB0byBzcGVjaWZ5IGlt
cG9ydGFudCBjb25zdGFudHMgdGhhdCBhbHdheXMgZ2V0IGhvaXN0ZWQuIEFsc28sIHRoZSB0YWJs
ZSB1c2VkIHRvCi0gICAgICAgIC8vIGhvbGQgZG91YmxlIGNvbnN0YW50cyBzaG91bGQgaGF2ZSBh
IHBvaW50ZXIgdG8gaXQgdGhhdCBpcyBob2lzdGVkLiBJZiB3ZSB3YW50ZWQgdG8gYmUgbW9yZQot
ICAgICAgICAvLyBhZ2dyZXNzaXZlLCB3ZSBjb3VsZCBtYWtlIGNvbnN0YW50IG1hdGVyaWFsaXph
dGlvbiBiZSBhIGZlYXR1cmUgb2YgQWlyOiB3ZSBjb3VsZCBsYWJlbAotICAgICAgICAvLyBzb21l
IFRtcHMgYXMgYmVpbmcgdW5tYXRlcmlhbGl6ZWQgY29uc3RhbnRzIGFuZCBoYXZlIGEgbGF0ZSBB
aXIgcGhhc2UgLSBwb3N0IHJlZ2lzdGVyCi0gICAgICAgIC8vIGFsbG9jYXRpb24gLSB0aGF0IGNy
ZWF0ZXMgbWF0ZXJpYWxpemF0aW9ucyBvZiB0aG9zZSBjb25zdGFudCBUbXBzIGJ5IHNjYXZlbmdp
bmcgbGVmdG92ZXIKLSAgICAgICAgLy8gcmVnaXN0ZXJzLgorICAgICAgICAvLyBUaGlzIHBoYXNl
IHVzZXMgc3VwZXIgc2ltcGxlIGhldXJpc3RpY3MgdG8gZW5zdXJlIHRoYXQgY29uc3RhbnRzIGFy
ZSBpbiBwcm9maXRhYmxlIHBsYWNlcworICAgICAgICAvLyBhbmQgYWxzbyBsb3dlcnMgY29uc3Rh
bnQgbWF0ZXJpYWxpemF0aW9uIGNvZGUuIENvbnN0YW50cyBtYXJrZWQgImZhc3QiIGJ5IHRoZSBj
bGllbnQgYXJlCisgICAgICAgIC8vIGhvaXN0ZWQgdG8gdGhlIGxvd2VzdCBjb21tb24gZG9taW5h
dG9yLiBBIHRhYmxlIGlzIGNyZWF0ZWQgZm9yIGNvbnN0YW50cyB0aGF0IG5lZWQgdG8gYmUKKyAg
ICAgICAgLy8gbG9hZGVkIHRvIGJlIG1hdGVyaWFsaXplZCwgYW5kIGFsbCBvZiB0aGVpciBWYWx1
ZXMgYXJlIHR1cm5lZCBpbnRvIGxvYWRzIGZyb20gdGhhdCB0YWJsZS4KKyAgICAgICAgLy8gTm9u
LWZhc3QgY29uc3RhbnRzIGdldCBtYXRlcmlhbGl6ZWQgaW4gdGhlIGJsb2NrIHRoYXQgdXNlcyB0
aGVtLiBDb25zdGFudHMgdGhhdCBhcmUKKyAgICAgICAgLy8gbWF0ZXJpYWxpemVkIGJ5IGxvYWRp
bmcgZ2V0IHNwZWNpYWwgdHJlYXRtZW50IHdoZW4gdGhleSBnZXQgdXNlZCBpbiBzb21lIGtpbmQg
b2YgQW55IGluIGEKKyAgICAgICAgLy8gU3RhY2ttYXBWYWx1ZS4gSW4gdGhhdCBjYXNlLCB0aGUg
Q29uc3RhbnRzIGFyZSBzdW5rIHRvIHRoZSBwb2ludCBvZiB1c2UsIHNpbmNlIHRoYXQgYWxsb3dz
CisgICAgICAgIC8vIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3RvciB0byBzaW5rIHRoZSBjb25zdGFu
dHMgaW50byBhbiBBcmc6OmltbTY0LgorCisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgYSBi
ZXR0ZXIgc3RvcnkgZm9yIGNvbnN0YW50cy4gRm9yIGV4YW1wbGUsIHRoZSB0YWJsZSB1c2VkIHRv
IGhvbGQgZG91YmxlCisgICAgICAgIC8vIGNvbnN0YW50cyBzaG91bGQgaGF2ZSBhIHBvaW50ZXIg
dG8gaXQgdGhhdCBpcyBob2lzdGVkLiBJZiB3ZSB3YW50ZWQgdG8gYmUgbW9yZSBhZ2dyZXNzaXZl
LAorICAgICAgICAvLyB3ZSBjb3VsZCBtYWtlIGNvbnN0YW50IG1hdGVyaWFsaXphdGlvbiBiZSBh
IGZlYXR1cmUgb2YgQWlyOiB3ZSBjb3VsZCBsYWJlbCBzb21lIFRtcHMgYXMKKyAgICAgICAgLy8g
YmVpbmcgdW5tYXRlcmlhbGl6ZWQgY29uc3RhbnRzIGFuZCBoYXZlIGEgbGF0ZSBBaXIgcGhhc2Ug
LSBwb3N0IHJlZ2lzdGVyIGFsbG9jYXRpb24gLSB0aGF0CisgICAgICAgIC8vIGNyZWF0ZXMgbWF0
ZXJpYWxpemF0aW9ucyBvZiB0aG9zZSBjb25zdGFudCBUbXBzIGJ5IHNjYXZlbmdpbmcgbGVmdG92
ZXIgcmVnaXN0ZXJzLgogCisgICAgICAgIGhvaXN0RmFzdENvbnN0YW50cygpOworICAgICAgICBz
aW5rU2xvd0NvbnN0YW50cygpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGhvaXN0RmFz
dENvbnN0YW50cygpCisgICAgeworICAgICAgICBEb21pbmF0b3JzJiBkb21pbmF0b3JzID0gbV9w
cm9jLmRvbWluYXRvcnMoKTsKKyAgICAgICAgSGFzaE1hcDxWYWx1ZUtleSwgVmFsdWUqPiB2YWx1
ZUZvckNvbnN0YW50OworICAgICAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBWZWN0b3I8VmFsdWUq
Pj4gbWF0ZXJpYWxpemF0aW9ucyhtX3Byb2Muc2l6ZSgpKTsKKworICAgICAgICAvLyBXZSBkZXRl
cm1pbmUgd2hlcmUgdGhpbmdzIGdldCBtYXRlcmlhbGl6ZWQgYmFzZWQgb24gd2hlcmUgdGhleSBh
cmUgdXNlZC4KKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgeworICAg
ICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICBm
b3IgKFZhbHVlKiYgY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkgeworICAgICAgICAgICAgICAg
ICAgICBWYWx1ZUtleSBrZXkgPSBjaGlsZC0+a2V5KCk7CisgICAgICAgICAgICAgICAgICAgIGlm
ICghbV9wcm9jLmlzRmFzdENvbnN0YW50KGtleSkpCisgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHZhbHVlRm9yQ29u
c3RhbnQuYWRkKGtleSwgY2hpbGQpOworICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmlz
TmV3RW50cnkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFzc3VtZSB0aGF0IHRoaXMg
YmxvY2sgaXMgd2hlcmUgd2Ugd2FudCB0byBtYXRlcmlhbGl6ZSB0aGUgdmFsdWUuCisgICAgICAg
ICAgICAgICAgICAgICAgICBjaGlsZC0+b3duZXIgPSBibG9jazsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgLy8gTWFrZSAndmFsdWUnIHVzZSB0aGUgY2Fub25pY2FsIGNvbnN0YW50IHJhdGhlciB0
aGFuIHRoZSBvbmUgaXQgd2FzIHVzaW5nLgorICAgICAgICAgICAgICAgICAgICBjaGlsZCA9IHJl
c3VsdC5pdGVyYXRvci0+dmFsdWU7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRGV0ZXJtaW5l
IHRoZSBsZWFzdCBjb21tb24gZG9taW5hdG9yLiBUaGF0J3MgdGhlIGxvd2VzdCBwbGFjZSBpbiB0
aGUgQ0ZHIHdoZXJlCisgICAgICAgICAgICAgICAgICAgIC8vIHdlIGNvdWxkIG1hdGVyaWFsaXpl
IHRoZSBjb25zdGFudCB3aGlsZSBzdGlsbCBoYXZpbmcgb25seSBvbmUgbWF0ZXJpYWxpemF0aW9u
CisgICAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSByZXN1bHRpbmcgY29kZS4KKyAgICAgICAg
ICAgICAgICAgICAgd2hpbGUgKCFkb21pbmF0b3JzLmRvbWluYXRlcyhjaGlsZC0+b3duZXIsIGJs
b2NrKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLT5vd25lciA9IGRvbWluYXRvcnMu
aW1tZWRpYXRlRG9taW5hdG9yT2YoY2hpbGQtPm93bmVyKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBlYWNo
IGJhc2ljIGJsb2NrIGtub3dzIHdoYXQgdG8gbWF0ZXJpYWxpemUuIFRoaXMgYWxzbyByZWZpbmVz
IHRoZQorICAgICAgICAvLyBtYXRlcmlhbGl6YXRpb24gYmxvY2sgYmFzZWQgb24gZXhlY3V0aW9u
IGZyZXF1ZW5jeS4gSXQgZmluZHMgdGhlIG1pbmltdW0gYmxvY2sgZnJlcXVlbmN5CisgICAgICAg
IC8vIG9mIGFsbCBvZiBpdHMgZG9taW5hdG9ycywgYW5kIHNlbGVjdHMgdGhlIGNsb3Nlc3QgYmxv
Y2sgYW1vbmdzdCB0aG9zZSB0aGF0IGFyZSB0aWVkIGZvcgorICAgICAgICAvLyBsb3dlc3QgZnJl
cXVlbmN5LgorICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogdmFsdWVGb3JDb25zdGFudCkgewor
ICAgICAgICAgICAgVmFsdWUqIHZhbHVlID0gZW50cnkudmFsdWU7CisgICAgICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrID0gdmFsdWUtPm93bmVyOyBibG9jazsgYmxvY2sgPSBkb21pbmF0
b3JzLmlkb20oYmxvY2spKSB7CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5mcmVxdWVuY3ko
KSA8IHZhbHVlLT5vd25lci0+ZnJlcXVlbmN5KCkpCisgICAgICAgICAgICAgICAgICAgIHZhbHVl
LT5vd25lciA9IGJsb2NrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWF0ZXJpYWxpemF0
aW9uc1tlbnRyeS52YWx1ZS0+b3duZXJdLmFwcGVuZChlbnRyeS52YWx1ZSk7CisgICAgICAgIH0K
KworICAgICAgICAvLyBHZXQgcmlkIG9mIFZhbHVlJ3MgdGhhdCBhcmUgZmFzdCBjb25zdGFudHMg
YnV0IGFyZW4ndCBjYW5vbmljYWwuIEFsc28gcmVtb3ZlIHRoZSBjYW5vbmljYWwKKyAgICAgICAg
Ly8gb25lcyBmcm9tIHRoZSBDRkcsIHNpbmNlIHdlJ3JlIGdvaW5nIHRvIHJlaW5zZXJ0IHRoZW0g
ZWxzZXdoZXJlLgorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7Cisg
ICAgICAgICAgICBmb3IgKFZhbHVlKiYgdmFsdWUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAg
ICBWYWx1ZUtleSBrZXkgPSB2YWx1ZS0+a2V5KCk7CisgICAgICAgICAgICAgICAgaWYgKCFtX3By
b2MuaXNGYXN0Q29uc3RhbnQoa2V5KSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgICAgICAgICBpZiAodmFsdWVGb3JDb25zdGFudC5nZXQoa2V5KSA9PSB2YWx1ZSkK
KyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBtX3Byb2MuYWRkPFZhbHVlPihOb3AsIHZhbHVl
LT5vcmlnaW4oKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB2
YWx1ZS0+cmVwbGFjZVdpdGhOb3AoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIC8vIE5vdyBtYWtlIHN1cmUgdGhhdCB3ZSBtb3ZlIGNvbnN0YW50cyB0byB3aGVyZSB0aGV5
IGFyZSBzdXBwb3NlZCB0byBnby4gQWdhaW4sIHdlIGRvIHRoaXMKKyAgICAgICAgLy8gYmFzZWQg
b24gdXNlcy4KKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgeworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCB2YWx1ZUluZGV4ID0gMDsgdmFsdWVJbmRleCA8IGJsb2Nr
LT5zaXplKCk7ICsrdmFsdWVJbmRleCkgeworICAgICAgICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9
IGJsb2NrLT5hdCh2YWx1ZUluZGV4KTsKKyAgICAgICAgICAgICAgICBmb3IgKFZhbHVlKiBjaGls
ZCA6IHZhbHVlLT5jaGlsZHJlbigpKSB7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlS2V5IGtl
eSA9IGNoaWxkLT5rZXkoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3Byb2MuaXNGYXN0
Q29uc3RhbnQoa2V5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgICAgICAgICAgICAgIC8vIElmIHdlIGVuY291bnRlciBhIGZhc3QgY29uc3RhbnQsIHRoZW4g
aXQgbXVzdCBiZSBjYW5vbmljYWwsIHNpbmNlIHdlIGFscmVhZHkKKyAgICAgICAgICAgICAgICAg
ICAgLy8gZ290IHJpZCBvZiB0aGUgbm9uLWNhbm9uaWNhbCBvbmVzLgorICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQodmFsdWVGb3JDb25zdGFudC5nZXQoa2V5KSA9PSBjaGlsZCk7CisKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5vd25lciAhPSBibG9jaykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gVGhpcyBjb25zdGFudCBpc24ndCBvdXIgcHJvYmxlbS4gSXQncyBnb2lu
ZyB0byBiZSBtYXRlcmlhbGl6ZWQgaW4gYW5vdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gYmxvY2suCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8g
V2UncmUgc3VwcG9zZWQgdG8gbWF0ZXJpYWxpemUgdGhpcyBjb25zdGFudCBpbiB0aGlzIGJsb2Nr
LCBhbmQgd2UgaGF2ZW4ndAorICAgICAgICAgICAgICAgICAgICAvLyBkb25lIGl0IHlldC4KKyAg
ICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUodmFsdWVJbmRleCwg
Y2hpbGQpOworICAgICAgICAgICAgICAgICAgICBjaGlsZC0+b3duZXIgPSBudWxscHRyOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2UgbWF5IGhh
dmUgc29tZSBjb25zdGFudHMgdGhhdCBuZWVkIHRvIGJlIG1hdGVyaWFsaXplZCByaWdodCBhdCB0
aGUgZW5kIG9mIHRoaXMKKyAgICAgICAgICAgIC8vIGJsb2NrLgorICAgICAgICAgICAgZm9yIChW
YWx1ZSogdmFsdWUgOiBtYXRlcmlhbGl6YXRpb25zW2Jsb2NrXSkgeworICAgICAgICAgICAgICAg
IGlmICghdmFsdWUtPm93bmVyKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEl0J3MgYWxyZWFk
eSBtYXRlcmlhbGl6ZWQgaW4gdGhpcyBibG9jay4KKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0VmFsdWUoYmxvY2stPnNpemUoKSAtIDEsIHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIHZvaWQgc2lua1Nsb3dDb25zdGFudHMoKQorICAgIHsKICAgICAgICAgLy8g
Rmlyc3Qgd2UgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbnN0YW50cyBnbyBpbnRvIHRoZSBk
YXRhIHNlY3Rpb24uIFRoZXNlIGFyZSBub24temVybwogICAgICAgICAvLyBkb3VibGUgY29uc3Rh
bnRzLgogICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IG1fcHJvYy52YWx1ZXMoKSkgewotICAg
ICAgICAgICAgaWYgKCFuZWVkc01vdGlvbih2YWx1ZSkpCisgICAgICAgICAgICBWYWx1ZUtleSBr
ZXkgPSB2YWx1ZS0+a2V5KCk7CisgICAgICAgICAgICBpZiAoIW5lZWRzTW90aW9uKGtleSkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBtX3RvUmVtb3ZlLmFwcGVuZCh2
YWx1ZSk7Ci0gICAgICAgICAgICBWYWx1ZUtleSBrZXkgPSB2YWx1ZS0+a2V5KCk7CiAgICAgICAg
ICAgICBpZiAoZ29lc0luVGFibGUoa2V5KSkKICAgICAgICAgICAgICAgICBtX2NvbnN0VGFibGUu
YWRkKGtleSwgbV9jb25zdFRhYmxlLnNpemUoKSk7CiAgICAgICAgIH0KQEAgLTg3LDEwICsyMDAs
MTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFN0YWNrbWFwVmFsdWUqIHN0YWNrbWFwID0g
dmFsdWUtPmFzPFN0YWNrbWFwVmFsdWU+KCk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBjaGlsZEluZGV4ID0gMDsgY2hpbGRJbmRleCA8IHZhbHVlLT5udW1DaGlsZHJlbigpOyArK2No
aWxkSW5kZXgpIHsKICAgICAgICAgICAgICAgICAgICAgVmFsdWUqJiBjaGlsZCA9IHZhbHVlLT5j
aGlsZChjaGlsZEluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFuZWVkc01vdGlvbihj
aGlsZCkpCisgICAgICAgICAgICAgICAgICAgIFZhbHVlS2V5IGtleSA9IGNoaWxkLT5rZXkoKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFuZWVkc01vdGlvbihrZXkpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgICAgICAgICAgVmFsdWVLZXkga2V5
ID0gY2hpbGQtPmtleSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2ttYXAKICAgICAg
ICAgICAgICAgICAgICAgICAgICYmIGdvZXNJblRhYmxlKGtleSkKICAgICAgICAgICAgICAgICAg
ICAgICAgICYmIHN0YWNrbWFwLT5jb25zdHJhaW5lZENoaWxkKGNoaWxkSW5kZXgpLnJlcCgpLmlz
QW55KCkpIHsKQEAgLTExNSw4ICsyMjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGZvciAoVmFsdWUq
IHRvUmVtb3ZlIDogbV90b1JlbW92ZSkKICAgICAgICAgICAgIHRvUmVtb3ZlLT5yZXBsYWNlV2l0
aE5vcCgpOwogICAgIH0KLQotcHJpdmF0ZToKKyAgICAKICAgICBWYWx1ZSogbWF0ZXJpYWxpemUo
dW5zaWduZWQgdmFsdWVJbmRleCwgY29uc3QgVmFsdWVLZXkmIGtleSwgY29uc3QgT3JpZ2luJiBv
cmlnaW4pCiAgICAgewogICAgICAgICBpZiAoVmFsdWUqIHJlc3VsdCA9IG1fY29uc3RhbnRzLmdl
dChrZXkpKQpAQCAtMTQ3LDkgKzI1OSw5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBrZXku
b3Bjb2RlKCkgPT0gQ29uc3REb3VibGUgJiYga2V5ICE9IGRvdWJsZVplcm8oKTsKICAgICB9CiAK
LSAgICBib29sIG5lZWRzTW90aW9uKGNvbnN0IFZhbHVlKiB2YWx1ZSkKKyAgICBib29sIG5lZWRz
TW90aW9uKGNvbnN0IFZhbHVlS2V5JiBrZXkpCiAgICAgewotICAgICAgICByZXR1cm4gdmFsdWUt
PmlzQ29uc3RhbnQoKTsKKyAgICAgICAgcmV0dXJuIGtleS5pc0NvbnN0YW50KCkgJiYgIW1fcHJv
Yy5pc0Zhc3RDb25zdGFudChrZXkpOwogICAgIH0KIAogICAgIHN0YXRpYyBWYWx1ZUtleSBkb3Vi
bGVaZXJvKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAx
OTM2NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjMxLDYgKzIzMSwxOCBAQCBpbmxpbmUgT3Bjb2RlIGNvbnN0UHRyT3Bjb2RlKCkK
ICAgICByZXR1cm4gQ29uc3QzMjsKIH0KIAoraW5saW5lIGJvb2wgaXNDb25zdGFudChPcGNvZGUg
b3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBDb25zdDMyOgorICAg
IGNhc2UgQ29uc3Q2NDoKKyAgICBjYXNlIENvbnN0RG91YmxlOgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDE5MzY2MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDE0ICszMiwxNyBAQAogI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKICNpbmNsdWRl
ICJCM0Jhc2ljQmxvY2tVdGlscy5oIgogI2luY2x1ZGUgIkIzQmxvY2tXb3JrbGlzdC5oIgorI2lu
Y2x1ZGUgIkIzQ0ZHLmgiCiAjaW5jbHVkZSAiQjNEYXRhU2VjdGlvbi5oIgorI2luY2x1ZGUgIkIz
RG9taW5hdG9ycy5oIgogI2luY2x1ZGUgIkIzT3BhcXVlQnlwcm9kdWN0cy5oIgogI2luY2x1ZGUg
IkIzVmFsdWVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCiBQ
cm9jZWR1cmU6OlByb2NlZHVyZSgpCi0gICAgOiBtX2xhc3RQaGFzZU5hbWUoImluaXRpYWwiKQor
ICAgIDogbV9jZmcobmV3IENGRygqdGhpcykpCisgICAgLCBtX2xhc3RQaGFzZU5hbWUoImluaXRp
YWwiKQogICAgICwgbV9ieXByb2R1Y3RzKHN0ZDo6bWFrZV91bmlxdWU8T3BhcXVlQnlwcm9kdWN0
cz4oKSkKICAgICAsIG1fY29kZShuZXcgQWlyOjpDb2RlKCp0aGlzKSkKIHsKQEAgLTExMyw2ICsx
MTYsMTEgQEAgdm9pZCBQcm9jZWR1cmU6OnJlc2V0UmVhY2hhYmlsaXR5KCkKICAgICAgICAgfSk7
CiB9CiAKK3ZvaWQgUHJvY2VkdXJlOjppbnZhbGlkYXRlQ0ZHKCkKK3sKKyAgICBtX2RvbWluYXRv
cnMgPSBudWxscHRyOworfQorCiB2b2lkIFByb2NlZHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAogewogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAqdGhpcykKQEAgLTEzOCw2
ICsxNDYsMjYgQEAgdm9pZCBQcm9jZWR1cmU6OmRlbGV0ZVZhbHVlKFZhbHVlKiB2YWx1ZQogICAg
IG1fdmFsdWVzW3ZhbHVlLT5pbmRleCgpXSA9IG51bGxwdHI7CiB9CiAKK0RvbWluYXRvcnMmIFBy
b2NlZHVyZTo6ZG9taW5hdG9ycygpCit7CisgICAgaWYgKCFtX2RvbWluYXRvcnMpCisgICAgICAg
IG1fZG9taW5hdG9ycyA9IHN0ZDo6bWFrZV91bmlxdWU8RG9taW5hdG9ycz4oKnRoaXMpOworICAg
IHJldHVybiAqbV9kb21pbmF0b3JzOworfQorCit2b2lkIFByb2NlZHVyZTo6YWRkRmFzdENvbnN0
YW50KGNvbnN0IFZhbHVlS2V5JiBjb25zdGFudCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjb25z
dGFudC5pc0NvbnN0YW50KCkpOworICAgIG1fZmFzdENvbnN0YW50cy5hZGQoY29uc3RhbnQpOwor
fQorCitib29sIFByb2NlZHVyZTo6aXNGYXN0Q29uc3RhbnQoY29uc3QgVmFsdWVLZXkmIGNvbnN0
YW50KQoreworICAgIGlmICghY29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gbV9mYXN0Q29uc3RhbnRzLmNvbnRhaW5zKGNvbnN0YW50KTsKK30KKwogdm9pZCogUHJv
Y2VkdXJlOjphZGREYXRhU2VjdGlvbihzaXplX3Qgc2l6ZSkKIHsKICAgICBpZiAoIXNpemUpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNpb24gMTkzNjYy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDEwICszMSwxMiBAQAogI2luY2x1ZGUgIkIzT3BhcXVlQnlwcm9kdWN0cy5oIgog
I2luY2x1ZGUgIkIzT3JpZ2luLmgiCiAjaW5jbHVkZSAiQjNUeXBlLmgiCisjaW5jbHVkZSAiQjNW
YWx1ZUtleS5oIgogI2luY2x1ZGUgIlB1cmVOYU4uaCIKICNpbmNsdWRlICJSZWdpc3RlckF0T2Zm
c2V0TGlzdC5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1RyaVN0YXRl
Lmg+CkBAIC00NCw2ICs0Niw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCiBj
bGFzcyBCYXNpY0Jsb2NrOwogY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQ7CitjbGFzcyBDRkc7Citj
bGFzcyBEb21pbmF0b3JzOwogY2xhc3MgVmFsdWU7CiAKIG5hbWVzcGFjZSBBaXIgeyBjbGFzcyBD
b2RlOyB9CkBAIC03MCw2ICs3NCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNldFZhbHVlT3du
ZXJzKCk7CiAgICAgdm9pZCByZXNldFJlYWNoYWJpbGl0eSgpOwogCisgICAgLy8gVGhpcyBkZXN0
cm95cyBDRkcgYW5hbHlzZXMuIElmIHdlIGFzayBmb3IgdGhlbSBhZ2Fpbiwgd2Ugd2lsbCByZWNv
bXB1dGUgdGhlbS4gVXN1YWxseSB5b3UKKyAgICAvLyBzaG91bGQgY2FsbCB0aGlzIGFueXRpbWUg
eW91IGNhbGwgcmVzZXRSZWFjaGFiaWxpdHkoKS4KKyAgICB2b2lkIGludmFsaWRhdGVDRkcoKTsK
KwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owog
CiAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzLnNpemUoKTsgfQpA
QCAtMjAwLDYgKzIwOCwxMyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRlbGV0ZVZhbHVlKFZhbHVl
Kik7CiAKKyAgICBDRkcmIGNmZygpIGNvbnN0IHsgcmV0dXJuICptX2NmZzsgfQorCisgICAgRG9t
aW5hdG9ycyYgZG9taW5hdG9ycygpOworCisgICAgdm9pZCBhZGRGYXN0Q29uc3RhbnQoY29uc3Qg
VmFsdWVLZXkmKTsKKyAgICBib29sIGlzRmFzdENvbnN0YW50KGNvbnN0IFZhbHVlS2V5Jik7CisK
ICAgICAvLyBUaGUgbmFtZSBoYXMgdG8gYmUgYSBzdHJpbmcgbGl0ZXJhbCwgc2luY2Ugd2UgZG9u
J3QgZG8gYW55IG1lbW9yeSBtYW5hZ2VtZW50IGZvciB0aGUgc3RyaW5nLgogICAgIHZvaWQgc2V0
TGFzdFBoYXNlTmFtZShjb25zdCBjaGFyKiBuYW1lKQogICAgIHsKQEAgLTI0MCw2ICsyNTUsOSBA
QCBwcml2YXRlOgogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IG1fYmxv
Y2tzOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWU+PiBtX3ZhbHVlczsKICAgICBW
ZWN0b3I8c2l6ZV90PiBtX3ZhbHVlSW5kZXhGcmVlTGlzdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
Q0ZHPiBtX2NmZzsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RG9taW5hdG9ycz4gbV9kb21pbmF0b3Jz
OworICAgIEhhc2hTZXQ8VmFsdWVLZXk+IG1fZmFzdENvbnN0YW50czsKICAgICBjb25zdCBjaGFy
KiBtX2xhc3RQaGFzZU5hbWU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE9wYXF1ZUJ5cHJvZHVjdHM+
IG1fYnlwcm9kdWN0czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWlyOjpDb2RlPiBtX2NvZGU7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCShy
ZXZpc2lvbiAxOTM2NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJl
bmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsNyBAQCBwdWJsaWM6CiAKICAg
ICAgICAgICAgIGlmIChtX2NoYW5nZWRDRkcpIHsKICAgICAgICAgICAgICAgICBtX3Byb2MucmVz
ZXRSZWFjaGFiaWxpdHkoKTsKKyAgICAgICAgICAgICAgICBtX3Byb2MuaW52YWxpZGF0ZUNGRygp
OwogICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCShyZXZpc2lvbiAx
OTM2NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtNTQsMTQgKzU0LDcgQEAgY29uc3QgVCogVmFsdWU6OmFzKCkgY29uc3QK
IAogaW5saW5lIGJvb2wgVmFsdWU6OmlzQ29uc3RhbnQoKSBjb25zdAogewotICAgIHN3aXRjaCAo
b3Bjb2RlKCkpIHsKLSAgICBjYXNlIENvbnN0MzI6Ci0gICAgY2FzZSBDb25zdDY0OgotICAgIGNh
c2UgQ29uc3REb3VibGU6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgcmV0dXJuIEIzOjppc0NvbnN0YW50KG9wY29k
ZSgpKTsKIH0KIAogaW5saW5lIGJvb2wgVmFsdWU6OmlzSW50ZWdlcigpIGNvbnN0CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtleS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmgJKHJldmlzaW9uIDE5MzY2MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEy
MCw2ICsxMjAsMTEgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCisgICAgYm9vbCBpc0Nv
bnN0YW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBCMzo6aXNDb25zdGFudChvcGNv
ZGUoKSk7CisgICAgfQorCiAgICAgLy8gQXR0ZW1wdHMgdG8gbWF0ZXJpYWxpemUgdGhlIFZhbHVl
IGZvciB0aGlzIFZhbHVlS2V5LiBNYXkgcmV0dXJuIG51bGxwdHIgaWYgdGhlIHZhbHVlIGNhbm5v
dAogICAgIC8vIGJlIG1hdGVyaWFsaXplZC4gVGhpcyBoYXBwZW5zIGZvciBDaGVja0FkZCBhbmQg
ZnJpZW5kcy4gWW91IGNhbiB1c2UgY2FuTWF0ZXJpYWxpemUoKSB0byBjaGVjawogICAgIC8vIGlm
IHlvdXIga2V5IGlzIG1hdGVyaWFsaXphYmxlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckNvZGUuY3BwCShyZXZpc2lvbiAxOTM2NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNiArMTM0LDEx
IEBAIEJhc2ljQmxvY2sqIENvZGU6OmZpbmROZXh0QmxvY2soQmFzaWNCbG8KICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAordm9pZCBDb2RlOjphZGRGYXN0VG1wKFRtcCB0bXApCit7CisgICAgbV9m
YXN0VG1wcy5hZGQodG1wKTsKK30KKwogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgog
CiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQ29kZS5oCShyZXZpc2lvbiAxOTM2NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1
ZGUgIkFpckJhc2ljQmxvY2suaCIKICNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCiAjaW5jbHVkZSAi
QWlyU3RhY2tTbG90LmgiCisjaW5jbHVkZSAiQWlyVG1wLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJB
dE9mZnNldExpc3QuaCIKICNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgogCkBAIC0yODksNiAr
MjkwLDkgQEAgcHVibGljOgogICAgIH07CiAKICAgICBTcGVjaWFsc0NvbGxlY3Rpb24gc3BlY2lh
bHMoKSBjb25zdCB7IHJldHVybiBTcGVjaWFsc0NvbGxlY3Rpb24oKnRoaXMpOyB9CisKKyAgICB2
b2lkIGFkZEZhc3RUbXAoVG1wKTsKKyAgICBib29sIGlzRmFzdFRtcChUbXAgdG1wKSBjb25zdCB7
IHJldHVybiBtX2Zhc3RUbXBzLmNvbnRhaW5zKHRtcCk7IH0KICAgICAKICAgICAvLyBUaGUgbmFt
ZSBoYXMgdG8gYmUgYSBzdHJpbmcgbGl0ZXJhbCwgc2luY2Ugd2UgZG9uJ3QgZG8gYW55IG1lbW9y
eSBtYW5hZ2VtZW50IGZvciB0aGUgc3RyaW5nLgogICAgIHZvaWQgc2V0TGFzdFBoYXNlTmFtZShj
b25zdCBjaGFyKiBuYW1lKQpAQCAtMzA3LDYgKzMxMSw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxTdGFja1Nsb3Q+PiBtX3N0YWNrU2xvdHM7CiAgICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4gbV9ibG9ja3M7CiAgICAgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxTcGVjaWFsPj4gbV9zcGVjaWFsczsKKyAgICBIYXNoU2V0PFRtcD4gbV9mYXN0VG1w
czsKICAgICBDQ2FsbFNwZWNpYWwqIG1fY0NhbGxTcGVjaWFsIHsgbnVsbHB0ciB9OwogICAgIHVu
c2lnbmVkIG1fbnVtR1BUbXBzIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fbnVtRlBUbXBzIHsgMCB9
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVy
Q29hbGVzY2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAJKHJldmlzaW9uIDE5MzY2MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2Np
bmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjMsNiArNTYzLDExIEBAIHByaXZhdGU6CiAgICAg
ICAgIC8vIEhpZ2hlciBzY29yZSBtZWFucyBtb3JlIGRlc2lyYWJsZSB0byBzcGlsbC4gTG93ZXIg
c2NvcmVzIG1heGltaXplIHRoZSBsaWtlbGlob29kIHRoYXQgYSB0bXAKICAgICAgICAgLy8gZ2V0
cyBhIHJlZ2lzdGVyLgogICAgICAgICBhdXRvIHNjb3JlID0gWyZdIChUbXAgdG1wKSAtPiBkb3Vi
bGUgeworICAgICAgICAgICAgLy8gQWlyIGV4cG9zZXMgdGhlIGNvbmNlcHQgb2YgImZhc3QgdG1w
cyIsIGFuZCB3ZSBpbnRlcnByZXQgdGhhdCB0byBtZWFuIHRoYXQgdGhlIHRtcAorICAgICAgICAg
ICAgLy8gc2hvdWxkIGFsd2F5cyBiZSBpbiBhIHJlZ2lzdGVyLgorICAgICAgICAgICAgaWYgKG1f
Y29kZS5pc0Zhc3RUbXAodG1wKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
ICAgIAogICAgICAgICAgICAgLy8gQWxsIGVsc2UgYmVpbmcgZXF1YWwsIHRoZSBzY29yZSBzaG91
bGQgYmUgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgZGVncmVlLgogICAgICAgICAgICAgZG91Ymxl
IGRlZ3JlZSA9IHN0YXRpY19jYXN0PGRvdWJsZT4obV9kZWdyZWVzW0Fic29sdXRlVG1wTWFwcGVy
PHR5cGU+OjphYnNvbHV0ZUluZGV4KHRtcCldKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxOTM2NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIC8vIFdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFu
IGV4cGVyaW1lbnRhbCB0cmFuc2l0aW9uIGZyb20gTExWTSB0byBCMyBhcyB0aGUgYmFja2VuZCBm
b3IgdGhlIEZUTC4gV2UgZG9uJ3QKIC8vIHlldCBrbm93IGhvdyBpdCB3aWxsIHR1cm4gb3V0LiBG
b3Igbm93LCB0aGlzIGZsYWcgd2lsbCBjb250cm9sIHdoZXRoZXIgRlRMIHVzZXMgQjMuIFJlbWVt
YmVyIHRvIHNldCB0aGlzCiAvLyB0byAwIGJlZm9yZSBjb21taXR0aW5nIQotI2RlZmluZSBGVExf
VVNFU19CMyAwCisjZGVmaW5lIEZUTF9VU0VTX0IzIDEKIAogc3RydWN0IE5vZGU7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5oCShyZXZpc2lvbiAxOTM2
NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE5MzY2MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDMs
NiArMzAzLDEzIEBAIHB1YmxpYzoKICNlbmRpZgogICAgICAgICBtX3RhZ1R5cGVOdW1iZXIgPSBt
X291dC5jb25zdEludDY0KFRhZ1R5cGVOdW1iZXIpOwogICAgICAgICBtX3RhZ01hc2sgPSBtX291
dC5jb25zdEludDY0KFRhZ01hc2spOworCisjaWYgRlRMX1VTRVNfQjMKKyAgICAgICAgLy8gTWFr
ZSBzdXJlIHRoYXQgQjMga25vd3MgdGhhdCB3ZSByZWFsbHkgY2FyZSBhYm91dCB0aGUgbWFzayBy
ZWdpc3RlcnMuIFRoaXMgZm9yY2VzIHRoZQorICAgICAgICAvLyBjb25zdGFudHMgdG8gYmUgbWF0
ZXJpYWxpemVkIGluIHJlZ2lzdGVycy4KKyAgICAgICAgbV9wcm9jLmFkZEZhc3RDb25zdGFudCht
X3RhZ1R5cGVOdW1iZXItPmtleSgpKTsKKyAgICAgICAgbV9wcm9jLmFkZEZhc3RDb25zdGFudCht
X3RhZ01hc2stPmtleSgpKTsKKyNlbmRpZiAvLyBGVExfVVNFU19CMwogICAgICAgICAKICAgICAg
ICAgbV9vdXQuc3RvcmVQdHIobV9vdXQuY29uc3RJbnRQdHIoY29kZUJsb2NrKCkpLCBhZGRyZXNz
Rm9yKEpTU3RhY2s6OkNvZGVCbG9jaykpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0RvbWluYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Eb21pbmF0b3JzLmgJ
KHJldmlzaW9uIDE5MzY2MikKKysrIFNvdXJjZS9XVEYvd3RmL0RvbWluYXRvcnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBXVEZEb21pbmF0b3JzX2gKICNkZWZp
bmUgV1RGRG9taW5hdG9yc19oCiAKKyNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgogI2lu
Y2x1ZGUgPHd0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oPgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTEy
MCwxMSArMTIxLDE4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBmcm9tID09IHRv
IHx8IHN0cmljdGx5RG9taW5hdGVzKGZyb20sIHRvKTsKICAgICB9Ci0gICAgCisKKyAgICAvLyBS
ZXR1cm5zIHRoZSBpbW1lZGlhdGUgZG9taW5hdG9yIG9mIHRoaXMgYmxvY2suIFJldHVybnMgbnVs
bCBmb3IgdGhlIHJvb3QgYmxvY2suCiAgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgaW1tZWRpYXRl
RG9taW5hdG9yT2YodHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2spIGNvbnN0CiAgICAgewogICAg
ICAgICByZXR1cm4gbV9kYXRhW2Jsb2NrXS5pZG9tUGFyZW50OwogICAgIH0KKworICAgIC8vICJp
ZG9tIiBpcyBhIHRlcm0gb2YgYXJ0IGFuZCBpdCdzIGEgc3lub255bSBmb3IgaW1tZWRpYXRlRG9t
aW5hdG9yT2YoKS4KKyAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBpZG9tKHR5cGVuYW1lIEdyYXBo
OjpOb2RlIGJsb2NrKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGltbWVkaWF0ZURvbWlu
YXRvck9mKGJsb2NrKTsKKyAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KICAgICB2b2lkIGZvckFsbFN0cmljdERvbWluYXRvcnNPZih0eXBlbmFtZSBHcmFwaDo6Tm9k
ZSB0bywgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKQEAgLTU1NSw3ICs1NjMsNyBAQCBw
cml2YXRlOgogICAgIAogICAgICAgICBib29sIGRvbWluYXRlcyh0eXBlbmFtZSBHcmFwaDo6Tm9k
ZSBmcm9tLCB0eXBlbmFtZSBHcmFwaDo6Tm9kZSB0bykgY29uc3QKICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGRvbWluYXRlcyhmcm9tLT5pbmRleCwgdG8tPmluZGV4KTsKKyAgICAgICAg
ICAgIHJldHVybiBkb21pbmF0ZXMobV9ncmFwaC5pbmRleChmcm9tKSwgbV9ncmFwaC5pbmRleCh0
bykpOwogICAgICAgICB9CiAgICAgCiAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdApAQCAtNjM2LDEyICs2NDQsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEJsb2NrICIsIGdyYXBo
LmR1bXAoZ3JhcGgubm9kZShibG9ja0luZGV4KSksICI6IHN1Y2Nlc3NvcnMgPSBbIik7CiAgICAg
ICAgICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOwotICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBibG9jay0+bnVtU3VjY2Vzc29ycygpOyArK2kpCi0gICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coY29tbWEsIGdyYXBoLmR1bXAoYmxvY2stPnN1Y2Nlc3NvcihpKSkp
OworICAgICAgICAgICAgICAgIGZvciAoYXV0byBzdWNjZXNzb3IgOiBncmFwaC5zdWNjZXNzb3Jz
KGJsb2NrKSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhjb21tYSwgZ3JhcGguZHVtcChz
dWNjZXNzb3IpKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJdLCBwcmVkZWNlc3NvcnMgPSBb
Iik7CiAgICAgICAgICAgICAgICAgY29tbWEgPSBDb21tYVByaW50ZXIoKTsKLSAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7
ICsraSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhjb21tYSwgZ3JhcGguZHVtcChibG9j
ay0+cHJlZGVjZXNzb3JzW2ldKSk7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvIHByZWRlY2Vz
c29yIDogZ3JhcGgucHJlZGVjZXNzb3JzKGJsb2NrKSkKKyAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZyhjb21tYSwgZ3JhcGguZHVtcChwcmVkZWNlc3NvcikpOwogICAgICAgICAgICAgICAgIGRh
dGFMb2coIl1cbiIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266831</attachid>
            <date>2015-12-07 16:37:34 -0800</date>
            <delta_ts>2015-12-07 16:38:51 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>41442</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkzNjYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMyBA
QAorMjAxNS0xMi0wNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBCMyBzaG91bGQgYmUgYWJsZSB0byBmbGFnIHRoZSB0YWcgY29uc3RhbnRzIGFzIGJlaW5n
IHN1cGVyIGltcG9ydGFudCBzbyB0aGF0IEIzIGNhbiBob2lzdCB0aGVtIGFuZCBBaXIgY2FuIGZv
cmNlIHRoZW0gaW50byByZWdpc3RlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1MTk1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRhdWdodCBCMyBhYm91dCB0aGUgY29uY2VwdCBvZiAiZmFzdCBjb25z
dGFudHMiLiBBIGNsaWVudCBvZiBCMyBjYW4gbm93IHRlbGwgQjMgd2hpY2gKKyAgICAgICAgY29u
c3RhbnRzIGFyZSBzdXBlciBpbXBvcnRhbnQuIEIzIHdpbGwgbm90IHNwaWxsIHRoZSBjb25zdGFu
dCBpbiB0aGF0IGNhc2UgYW5kIHdpbGwgZW5zdXJlCisgICAgICAgIHRoYXQgdGhlIGNvbnN0YW50
IGlzIG1hdGVyaWFsaXplZCBvbmx5IG9uY2U6IHN0YXRpY2FsbHkgb25jZSwgYW5kIGR5bmFtaWNh
bGx5IG9uY2UgcGVyCisgICAgICAgIHByb2NlZHVyZSBleGVjdXRpb24uIFRoZSBob2lzdEZhc3RD
b25zdGFudHMoKSBhbGdvcml0aG0gaW4gQjNNb3ZlQ29uc3RhbnRzLmNwcCBhY2hpZXZlcyB0aGlz
CisgICAgICAgIGJ5IGZpcnN0IHBpY2tpbmcgdGhlIGxvd2VzdCBjb21tb24gZG9taW5hdG9yIG9m
IGFsbCB1c2VzIG9mIGVhY2ggZmFzdCBjb25zdGFudCwgYW5kIHRoZW4KKyAgICAgICAgcGlja2lu
ZyB0aGUgbWF0ZXJpYWxpemF0aW9uIHBvaW50IGJ5IGZpbmRpbmcgdGhlIGxvd2VzdCBkb21pbmF0
b3Igb2YgdGhhdCBkb21pbmF0b3IgdGhhdCBpcworICAgICAgICB0aWVkIGZvciBsb3dlc3QgYmxv
Y2sgZnJlcXVlbmN5LiBJbiBwcmFjdGljZSwgdGhlIHNlY29uZCBzdGVwIGVuc3VyZXMgdGhhdCB0
aGlzIGlzIHRoZSBsb3dlc3QKKyAgICAgICAgcG9pbnQgaW4gdGhlIHByb2dyYW0gdGhhdCBpcyBu
b3QgaW4gYSBsb29wIChpLmUuIGV4ZWN1dGVzIG5vIG1vcmUgdGhhbiBvbmNlIGR5bmFtaWNhbGx5
IHBlcgorICAgICAgICBwcm9jZWR1cmUgaW52b2NhdGlvbikuCisKKyAgICAgICAgVGF1Z2h0IEFp
ciBhYm91dCB0aGUgY29uY2VwdCBvZiAiZmFzdCB0bXBzIi4gQjMgdGVsbHMgQWlyIHRoYXQgYSB0
bXAgaXMgZmFzdCBpZiBpdCBpcyB1c2VkIHRvCisgICAgICAgIGhvbGQgdGhlIG1hdGVyaWFsaXph
dGlvbiBvZiBhIGZhc3QgY29uc3RhbnQuIElSQyB3aWxsIHVzZSB0aGUgbG93ZXN0IHBvc3NpYmxl
IHNwaWxsIHNjb3JlIGZvcgorICAgICAgICBmYXN0IHRtcHMuIEluIHByYWN0aWNlLCB0aGlzIGVu
c3VyZXMgdGhhdCBmYXN0IGNvbnN0YW50cyBhcmUgbmV2ZXIgc3BpbGxlZC4KKworICAgICAgICBB
ZGRlZCBhIHNtYWxsIHNuaXBwZXQgb2YgY29kZSB0byBGVEw6Okxvd2VyREZHVG9MTFZNIHRoYXQg
bWFrZXMgYm90aCBvZiB0aGUgdGFnIGNvbnN0YW50cworICAgICAgICBpbnRvIGZhc3QgY29uc3Rh
bnRzLgorCisgICAgICAgIE15IGhvcGUgaXMgdGhhdCB0aGlzIHZlcnkgYnJ1dGUtZm9yY2UgaGV1
cmlzdGljIGlzIGdvb2QgZW5vdWdoIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byB0aGluaworICAgICAg
ICBhYm91dCBjb25zdGFudHMgZm9yIGEgd2hpbGUuIEJhc2VkIG9uIG15IGV4cGVyaWVuY2Ugd2l0
aCBob3cgTExWTSdzIGNvbnN0YW50IGhvaXN0aW5nIHdvcmtzCisgICAgICAgIG91dCwgdGhlIGhl
dXJpc3RpYyBpbiB0aGlzIHBhdGNoIGlzIGdvaW5nIHRvIGJlIHRvdWdoIHRvIGJlYXQuIExMVk0n
cyBjb25zdGFudCBob2lzdGluZyBkb2VzCisgICAgICAgIGdvb2QgdGhpbmdzIHdoZW4gaXQgaG9p
c3RzIHRoZSB0YWdzLCBhbmQgdXN1YWxseSBjYXVzZXMgbm90aGluZyBidXQgcHJvYmxlbXMgd2hl
biBpdCBob2lzdHMKKyAgICAgICAgYW55dGhpbmcgZWxzZS4gVGhpcyBpcyBiZWNhdXNlIHRoZXJl
IGlzIG5vIHdheSBhIGxvdy1sZXZlbCBjb21waWxlciB0byByZWFsbHkgdW5kZXJzdGFuZCBob3cK
KyAgICAgICAgYSBjb25zdGFudCBtYXRlcmlhbGl6YXRpb24gaW1wYWN0cyBzb21lIG9wZXJhdGlv
bidzIGNvbnRyaWJ1dGlvbiB0byB0aGUgb3ZlcmFsbCBleGVjdXRpb24KKyAgICAgICAgdGltZSBv
ZiBhIHByb2NlZHVyZS4gQnV0LCBpbiB0aGUgRlRMIHdlIGtub3cgdGhhdCBjb25zdGFudCBtYXRl
cmlhbGl6YXRpb25zIGZvciB0eXBlIGNoZWNrcworICAgICAgICBhcmUgYSBidW1tZXIgYmVjYXVz
ZSB3ZSBhcmUgc3VwZXIgY29tZm9ydGFibGUgcGxhY2luZyB0eXBlIGNoZWNrcyBvbiB0aGUgaG90
dGVzdCBvZiBwYXRocy4gU28KKyAgICAgICAgdGhvc2UgYXJlIHRoZSBsYXN0IHBhdGhzIHdoZXJl
IGV4dHJhIGluc3RydWN0aW9ucyBzaG91bGQgYmUgYWRkZWQgYnkgdGhlIGNvbXBpbGVyLiBPbiB0
aGUKKyAgICAgICAgb3RoZXIgaGFuZCwgYWxsIG90aGVyIGxhcmdlIGNvbnN0YW50IHVzZXMgYXJl
IG9uIHJlbGF0aXZlbHkgY29sZCBwYXRocywgb3IgcGF0aHMgdGhhdCBhcmUKKyAgICAgICAgYWxy
ZWFkeSBleHBlbnNpdmUgZm9yIG90aGVyIHJlYXNvbnMuIEZvciBleGFtcGxlLCBnbG9iYWwgdmFy
aWFibGUgYWNjZXNzZXMgaGF2ZSB0bworICAgICAgICBtYXRlcmlhbGl6ZSBhIHBvaW50ZXIgdG8g
dGhlIGdsb2JhbC4gQnV0IHRoYXQncyBub3QgcmVhbGx5IGEgYmlnIGRlYWwsIHNpbmNlIGEgbG9h
ZCBmcm9tIGEKKyAgICAgICAgZ2xvYmFsIGludm9sdmVzIGZpcnN0IHRoZSBsb2FkIGl0c2VsZiBh
bmQgdGhlbiB0eXBlIGNoZWNrcyBvbiB0aGUgcmVzdWx0IC0gc28gcHJvYmFibHkgdGhlCisgICAg
ICAgIGNvbnN0YW50IG1hdGVyaWFsaXphdGlvbiBpcyBqdXN0IG5vdCBpbnRlcmVzdGluZy4gQSBz
dG9yZSB0byBhIGdsb2JhbCBvZnRlbiBpbnZvbHZlcyBhIHN0b3JlCisgICAgICAgIGJhcnJpZXIs
IHNvIHRoZSBjb25zdGFudCBtYXRlcmlhbGl6YXRpb24gaXMgcmVhbGx5IG5vdCBpbnRlcmVzdGlu
Zy4gVGhpcyBwYXRjaCBjb2RpZmllcyB0aGlzCisgICAgICAgIGhldXJpc3RpYyBpbiBhIHBhY3Qg
YmV0d2VlbiBBaXIsIEIzLCBhbmQgdGhlIEZUTDogRlRMIGRlbWFuZHMgdGhhdCBCMyBwaW4gdGhl
IHR3byB0YWdzIGluCisgICAgICAgIHJlZ2lzdGVycywgYW5kIEIzIHJlbGF5cyB0aGUgZGVtYW5k
IHRvIEFpci4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogYjMvQjNDRkcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpD
Rkc6OkNGRyk6CisgICAgICAgIChKU0M6OkIzOjpDRkc6OnJvb3QpOgorICAgICAgICAoSlNDOjpC
Mzo6Q0ZHOjpuZXdNYXApOgorICAgICAgICAoSlNDOjpCMzo6Q0ZHOjpzdWNjZXNzb3JzKToKKyAg
ICAgICAgKEpTQzo6QjM6OkNGRzo6cHJlZGVjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkNG
Rzo6aW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6Q0ZHOjpub2RlKToKKyAgICAgICAgKEpTQzo6
QjM6OkNGRzo6bnVtTm9kZXMpOgorICAgICAgICAoSlNDOjpCMzo6Q0ZHOjpkdW1wKToKKyAgICAg
ICAgKiBiMy9CM0RvbWluYXRvcnMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpEb21pbmF0
b3JzOjpEb21pbmF0b3JzKToKKyAgICAgICAgKiBiMy9CM0luZGV4TWFwLmg6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleE1hcDo6cmVzaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4TWFwOjpz
aXplKToKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4TWFwOjpvcGVyYXRvcltdKToKKyAgICAgICAg
KiBiMy9CM0xvd2VyTWFjcm9zLmNwcDoKKyAgICAgICAgKiBiMy9CM0xvd2VyVG9BaXIuY3BwOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0bXApOgorICAgICAgICAqIGIzL0Iz
TW92ZUNvbnN0YW50cy5jcHA6CisgICAgICAgICogYjMvQjNPcGNvZGUuaDoKKyAgICAgICAgKEpT
Qzo6QjM6OmNvbnN0UHRyT3Bjb2RlKToKKyAgICAgICAgKEpTQzo6QjM6OmlzQ29uc3RhbnQpOgor
ICAgICAgICAqIGIzL0IzUHJvY2VkdXJlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVy
ZTo6UHJvY2VkdXJlKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6cmVzZXRSZWFjaGFi
aWxpdHkpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjppbnZhbGlkYXRlQ0ZHKToKKyAg
ICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpQcm9j
ZWR1cmU6OmRlbGV0ZVZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6ZG9taW5h
dG9ycyk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmFkZEZhc3RDb25zdGFudCk6Cisg
ICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmlzRmFzdENvbnN0YW50KToKKyAgICAgICAgKEpT
Qzo6QjM6OlByb2NlZHVyZTo6YWRkRGF0YVNlY3Rpb24pOgorICAgICAgICAqIGIzL0IzUHJvY2Vk
dXJlLmg6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OnNpemUpOgorICAgICAgICAoSlND
OjpCMzo6UHJvY2VkdXJlOjpjZmcpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpzZXRM
YXN0UGhhc2VOYW1lKToKKyAgICAgICAgKiBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDoKKyAgICAg
ICAgKiBiMy9CM1ZhbHVlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmlzQ29u
c3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmlzSW50ZWdlcik6CisgICAgICAgICog
YjMvQjNWYWx1ZUtleS5oOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVLZXk6OmNhbk1hdGVyaWFs
aXplKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlS2V5Ojppc0NvbnN0YW50KToKKyAgICAgICAg
KiBiMy9haXIvQWlyQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmZpbmRO
ZXh0QmxvY2spOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjphZGRGYXN0VG1wKToKKyAg
ICAgICAgKiBiMy9haXIvQWlyQ29kZS5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpz
cGVjaWFscyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmlzRmFzdFRtcCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnNldExhc3RQaGFzZU5hbWUpOgorICAgICAgICAqIGIz
L2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHA6CisgICAgICAgICogZGZnL0RG
R0RvbWluYXRvcnMuaDoKKyAgICAgICAgKiBkZmcvREZHU1NBQ2FsY3VsYXRvci5jcHA6CisgICAg
ICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9MTFZNOjpsb3dlcik6CisKIDIwMTUtMTItMDcgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KIAogICAgICAgICBGVEwgbG93ZXJpbmcgc2hvdWxkIHRlbGwgQjMgdGhl
IHJpZ2h0IGJsb2NrIGZyZXF1ZW5jaWVzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMTkzNjYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMwNiw2ICsz
MDYsOCBAQAogCQkwRjMzOEUxRTFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhFMUExQkYy
ODZFQTAwMTNDODhGIC8qIEIzTG93ZXJNYWNyb3MuaCAqLzsgfTsKIAkJMEYzM0ZDRjcxQzEzNkUy
NTAwMzIzRjY3IC8qIEIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzNGQ0Y1MUMxMzZFMjUwMDMyM0Y2
NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5jcHAgKi87IH07CiAJCTBGMzNGQ0Y4MUMx
MzZFMjUwMDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzM0ZDRjYxQzEzNkUyNTAwMzIz
RjY3IC8qIEIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmggKi87IH07CisJCTBGMzNGQ0ZCMUMx
NjI1QkUwMDMyM0Y2NyAvKiBCM0NGRy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzM0ZDRjkxQzE2MjVCRTAwMzIzRjY3IC8qIEIzQ0ZHLmggKi87IH07
CisJCTBGMzNGQ0ZDMUMxNjI1QkUwMDMyM0Y2NyAvKiBCM0RvbWluYXRvcnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzNGQ0ZBMUMxNjI1QkUwMDMy
M0Y2NyAvKiBCM0RvbWluYXRvcnMuaCAqLzsgfTsKIAkJMEYzNEIxNDkxNkQ0MjAxMDAwMUNEQTVB
IC8qIERGR1VzZUtpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICovOyB9
OwogCQkwRjM0QjE0QTE2RDQyMDEzMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNEIxNDgxNkQ0MjAwRTAwMUNE
QTVBIC8qIERGR1VzZUtpbmQuaCAqLzsgfTsKIAkJMEYzNzMwOEMxQzBCRDI5MTAwMDUyQkZBIC8q
IEIzUGhpQ2hpbGRyZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzNzMwOEExQzBCRDI5MTAwMDUyQkZBIC8qIEIzUGhpQ2hpbGRyZW4uY3BwICov
OyB9OwpAQCAtMjQwNCw2ICsyNDA2LDggQEAKIAkJMEYzMzhFMUExQkYyODZFQTAwMTNDODhGIC8q
IEIzTG93ZXJNYWNyb3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNMb3dl
ck1hY3Jvcy5oOyBwYXRoID0gYjMvQjNMb3dlck1hY3Jvcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjMzRkNGNTFDMTM2RTI1MDAzMjNGNjcgLyogQjNTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMuY3BwOyBwYXRoID0gYjMvQjNTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMzRkNGNjFDMTM2RTI1
MDAzMjNGNjcgLyogQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaDsgcGF0aCA9IGIz
L0IzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMzNGQ0Y5MUMxNjI1QkUwMDMyM0Y2NyAvKiBCM0NGRy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM0NGRy5oOyBwYXRoID0gYjMvQjNDRkcuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYzM0ZDRkExQzE2MjVCRTAwMzIzRjY3IC8qIEIzRG9taW5hdG9y
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0RvbWluYXRvcnMuaDsgcGF0
aCA9IGIzL0IzRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM0
QjE0NzE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdVc2VLaW5kLmNwcDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5k
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNEIxNDgxNkQ0MjAwRTAwMUNE
QTVBIC8qIERGR1VzZUtpbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
VXNlS2luZC5oOyBwYXRoID0gZGZnL0RGR1VzZUtpbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYzNzMwOEExQzBCRDI5MTAwMDUyQkZBIC8qIEIzUGhpQ2hpbGRyZW4uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNQaGlDaGlsZHJlbi5jcHA7IHBh
dGggPSBiMy9CM1BoaUNoaWxkcmVuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTQ1NjcsNiArNDU3MSw3IEBACiAJCQkJMEZFQzg0QkExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmxv
Y2tXb3JrbGlzdC5oICovLAogCQkJCTBGMzM4REY3MUJFOTZBQTgwMDEzQzg4RiAvKiBCM0NDYWxs
VmFsdWUuY3BwICovLAogCQkJCTBGMzM4REY4MUJFOTZBQTgwMDEzQzg4RiAvKiBCM0NDYWxsVmFs
dWUuaCAqLywKKwkJCQkwRjMzRkNGOTFDMTYyNUJFMDAzMjNGNjcgLyogQjNDRkcuaCAqLywKIAkJ
CQkwRkVDODRCQjFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuY3BwICovLAogCQkJ
CTBGRUM4NEJDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5oICovLAogCQkJCTBG
RUM4NEJEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuY3BwICovLApAQCAtNDU5MCw2
ICs0NTk1LDcgQEAKIAkJCQkwRkVDODRDQTFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFs
dWUuaCAqLywKIAkJCQkwRjMzOEUwMTFCRjAyNzZDMDAxM0M4OEYgLyogQjNEYXRhU2VjdGlvbi5j
cHAgKi8sCiAJCQkJMEYzMzhFMDIxQkYwMjc2QzAwMTNDODhGIC8qIEIzRGF0YVNlY3Rpb24uaCAq
LywKKwkJCQkwRjMzRkNGQTFDMTYyNUJFMDAzMjNGNjcgLyogQjNEb21pbmF0b3JzLmggKi8sCiAJ
CQkJMEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIzRWZmZWN0cy5jcHAgKi8sCiAJCQkJMEZF
Qzg1QkUxQkUxNjdBMDAwODBGRjc0IC8qIEIzRWZmZWN0cy5oICovLAogCQkJCTBGRUM4NENCMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmNwcCAqLywKQEAgLTc1MTgsNiArNzUy
NCw3IEBACiAJCQkJOTkyOEZGM0MxOEFDNEFFQzAwQjhDRjEyIC8qIEpTUmVwbGF5SW5wdXRzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNSZXRhaW5Q
dHIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0ODc0QUU2MTVFQkRFNEEwMDJFMzU4NyAvKiBKU1Nj
b3BlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjMzRkNGQjFDMTYyNUJFMDAzMjNGNjcgLyogQjND
RkcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QzBDNEFDMTY4MTAzMDIwMDE3MDExRCAvKiBKU1Nj
cmlwdFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMTIyMDI3MUJFN0Y1OEMwMDM5
RTZGMiAvKiBKSVRBZGRHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTE5RDExMTU3
RjMzMkMwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmggaW4gSGVhZGVycyAq
LywKQEAgLTc3OTcsNiArNzgwNCw3IEBACiAJCQkJNzA1QjQxQUUxQTZFNTAxRTAwNzE2NzU3IC8q
IFN5bWJvbENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMyNzFCREEwOEVG
MDAzMzFCODQgLyogU3ltYm9sQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3
MDVCNDFCMDFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sT2JqZWN0LmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjMzRkNGQzFDMTYyNUJFMDAzMjNGNjcgLyogQjNEb21pbmF0b3JzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3MDVCNDFCMjFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMyODFCREEwOEVGMDAzMzFCODQgLyogU3ltYm9sUHJv
dG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NkIwRTE2RjVDRDAwQjM0NDYw
IC8qIFN5bWJvbFRhYmxlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NGRy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NGRy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0ZHLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ0ZHX2gKKyNkZWZpbmUgQjNDRkdfaAor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1
ZGUgIkIzSW5kZXhNYXAuaCIKKyNpbmNsdWRlICJCM0luZGV4U2V0LmgiCisjaW5jbHVkZSAiQjNQ
cm9jZWR1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENG
RyB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBCYXNpY0Jsb2NrKiBOb2RlOworICAgIHR5cGVkZWYg
SW5kZXhTZXQ8QmFzaWNCbG9jaz4gU2V0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5n
IE1hcCA9IEluZGV4TWFwPEJhc2ljQmxvY2ssIFQ+OworICAgIHR5cGVkZWYgVmVjdG9yPEJhc2lj
QmxvY2sqLCA0PiBMaXN0OworCisgICAgQ0ZHKFByb2NlZHVyZSYgcHJvYykKKyAgICAgICAgOiBt
X3Byb2MocHJvYykKKyAgICB7CisgICAgfQorCisgICAgTm9kZSByb290KCkgeyByZXR1cm4gbV9w
cm9jWzBdOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIE1hcDxUPiBuZXdNYXAo
KSB7IHJldHVybiBJbmRleE1hcDxCYXNpY0Jsb2NrLCBUPihtX3Byb2Muc2l6ZSgpKTsgfQorCisg
ICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JM
aXN0PiBzdWNjZXNzb3JzKE5vZGUgbm9kZSkgeyByZXR1cm4gbm9kZS0+c3VjY2Vzc29yQmxvY2tz
KCk7IH0KKyAgICBCYXNpY0Jsb2NrOjpQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycyhOb2Rl
IG5vZGUpIHsgcmV0dXJuIG5vZGUtPnByZWRlY2Vzc29ycygpOyB9CisKKyAgICB1bnNpZ25lZCBp
bmRleChOb2RlIG5vZGUpIGNvbnN0IHsgcmV0dXJuIG5vZGUtPmluZGV4KCk7IH0KKyAgICBOb2Rl
IG5vZGUodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY1tpbmRleF07IH0KKyAg
ICB1bnNpZ25lZCBudW1Ob2RlcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvYy5zaXplKCk7IH0KKwor
ICAgIFBvaW50ZXJEdW1wPEJhc2ljQmxvY2s+IGR1bXAoTm9kZSBub2RlKSBjb25zdCB7IHJldHVy
biBwb2ludGVyRHVtcChub2RlKTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CisgICAgeworICAgICAgICBtX3Byb2MuZHVtcChvdXQpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBQcm9jZWR1cmUmIG1fcHJvYzsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ0ZHX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRG9taW5hdG9ycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0RvbWluYXRvcnMuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0RvbWluYXRvcnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNEb21pbmF0b3JzX2gKKyNkZWZpbmUgQjNEb21pbmF0b3JzX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0NGRy5oIgorI2luY2x1ZGUgIkIzQ29t
bW9uLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlIDx3dGYvRG9taW5hdG9y
cy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBEb21pbmF0
b3JzIDogcHVibGljIFdURjo6RG9taW5hdG9yczxDRkc+IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShEb21pbmF0b3JzKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBEb21pbmF0b3JzKFByb2NlZHVyZSYgcHJvYykKKyAgICAgICAgOiBXVEY6OkRvbWluYXRv
cnM8Q0ZHPihwcm9jLmNmZygpLCBzaG91bGRWYWxpZGF0ZUlSKCkpCisgICAgeworICAgIH0KK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEIzRG9taW5hdG9yc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0luZGV4TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzSW5kZXhNYXAuaAkocmV2aXNpb24gMTkzNjYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzSW5kZXhNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksMTggQEAgcHVibGlj
OgogICAgICAgICBtX3ZlY3Rvci5maWxsKFZhbHVlKCksIHNpemUpOwogICAgIH0KIAorICAgIHNp
emVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3Iuc2l6ZSgpOyB9CisKKyAgICBWYWx1
ZSYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gbV92ZWN0
b3JbaW5kZXhdOworICAgIH0KKworICAgIGNvbnN0IFZhbHVlJiBvcGVyYXRvcltdKHNpemVfdCBp
bmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZlY3RvcltpbmRleF07CisgICAg
fQorICAgIAogICAgIFZhbHVlJiBvcGVyYXRvcltdKEtleSoga2V5KQogICAgIHsKICAgICAgICAg
cmV0dXJuIG1fdmVjdG9yW2tleS0+aW5kZXgoKV07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCShyZXZpc2lvbiAxOTM2NjIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDgg
KzU4LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHByb2Nlc3NDdXJyZW50QmxvY2soKTsKICAg
ICAgICAgfQogICAgICAgICBtX2NoYW5nZWQgfD0gbV9ibG9ja0luc2VydGlvblNldC5leGVjdXRl
KCk7Ci0gICAgICAgIGlmIChtX2NoYW5nZWQpCisgICAgICAgIGlmIChtX2NoYW5nZWQpIHsKICAg
ICAgICAgICAgIG1fcHJvYy5yZXNldFJlYWNoYWJpbGl0eSgpOworICAgICAgICAgICAgbV9wcm9j
LmludmFsaWRhdGVDRkcoKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gbV9jaGFuZ2VkOwog
ICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIu
Y3BwCShyZXZpc2lvbiAxOTM2NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
clRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAyLDggKzMwMiwxMSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgd2hpbGUgKHNob3VsZENvcHlQcm9wYWdhdGUodmFsdWUpKQogICAgICAgICAg
ICAgICAgIHZhbHVlID0gdmFsdWUtPmNoaWxkKDApOwogICAgICAgICAgICAgVG1wJiByZWFsVG1w
ID0gbV92YWx1ZVRvVG1wW3ZhbHVlXTsKLSAgICAgICAgICAgIGlmICghcmVhbFRtcCkKKyAgICAg
ICAgICAgIGlmICghcmVhbFRtcCkgewogICAgICAgICAgICAgICAgIHJlYWxUbXAgPSBtX2NvZGUu
bmV3VG1wKEFyZzo6dHlwZUZvckIzVHlwZSh2YWx1ZS0+dHlwZSgpKSk7CisgICAgICAgICAgICAg
ICAgaWYgKG1fcHJvY2VkdXJlLmlzRmFzdENvbnN0YW50KHZhbHVlLT5rZXkoKSkpCisgICAgICAg
ICAgICAgICAgICAgIG1fY29kZS5hZGRGYXN0VG1wKHJlYWxUbXApOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgdG1wID0gcmVhbFRtcDsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdG1w
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50cy5jcHAJ
KHJldmlzaW9uIDE5MzY2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01vdmVDb25z
dGFudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMiArMjksMTUgQEAKICNpZiBFTkFCTEUo
QjNfSklUKQogCiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkIz
RG9taW5hdG9ycy5oIgogI2luY2x1ZGUgIkIzSW5zZXJ0aW9uU2V0SW5saW5lcy5oIgogI2luY2x1
ZGUgIkIzTWVtb3J5VmFsdWUuaCIKICNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKICNpbmNsdWRl
ICJCM1Byb2NlZHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkIzVmFsdWVLZXlJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewog
CkBAIC01MCwyNyArNTMsMTM3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcnVuKCkKICAgICB7Ci0g
ICAgICAgIC8vIEV2ZW50dWFsbHkgdGhpcyBwaGFzZSB3aWxsIGRvIHNtYXJ0IHRoaW5ncy4gRm9y
IG5vdywgaXQgdXNlcyBhIHN1cGVyIHNpbXBsZSBoZXVyaXN0aWM6IGl0Ci0gICAgICAgIC8vIHBs
YWNlcyBjb25zdGFudHMgaW4gdGhlIGJsb2NrIHRoYXQgdXNlcyB0aGVtLCBhbmQgbWFrZXMgc3Vy
ZSB0aGF0IGVhY2ggYmxvY2sgaGFzIG9ubHkgb25lCi0gICAgICAgIC8vIG1hdGVyaWFsaXphdGlv
biBmb3IgZWFjaCBjb25zdGFudC4gTm90ZSB0aGF0IHRoaXMgbW9zdGx5IG9ubHkgbWF0dGVycyBm
b3IgbGFyZ2UgY29uc3RhbnRzLCBzaW5jZQotICAgICAgICAvLyBzbWFsbCBjb25zdGFudHMgZ2V0
IGZ1c2VkIGludG8gdGhlIGluc3RydWN0aW9ucyB0aGF0IHVzZSB0aGVtLiBCdXQgaXQgbWlnaHQg
bWF0dGVyIGZvciBzbWFsbAotICAgICAgICAvLyBjb25zdGFudHMgaWYgdGhleSBhcmUgdXNlZCBp
biBpbnN0cnVjdGlvbnMgdGhhdCBkb24ndCBkbyBpbW1lZGlhdGVzLCBsaWtlIGNvbmRpdGlvbmFs
IG1vdmVzLgotCi0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgYSBiZXR0ZXIgc3RvcnkgZm9y
IGNvbnN0YW50cy4gQXQgYSBtaW5pbXVtIHRoaXMgc2hvdWxkIGFsbG93IHRoZSBCMwotICAgICAg
ICAvLyBjbGllbnQgdG8gc3BlY2lmeSBpbXBvcnRhbnQgY29uc3RhbnRzIHRoYXQgYWx3YXlzIGdl
dCBob2lzdGVkLiBBbHNvLCB0aGUgdGFibGUgdXNlZCB0bwotICAgICAgICAvLyBob2xkIGRvdWJs
ZSBjb25zdGFudHMgc2hvdWxkIGhhdmUgYSBwb2ludGVyIHRvIGl0IHRoYXQgaXMgaG9pc3RlZC4g
SWYgd2Ugd2FudGVkIHRvIGJlIG1vcmUKLSAgICAgICAgLy8gYWdncmVzc2l2ZSwgd2UgY291bGQg
bWFrZSBjb25zdGFudCBtYXRlcmlhbGl6YXRpb24gYmUgYSBmZWF0dXJlIG9mIEFpcjogd2UgY291
bGQgbGFiZWwKLSAgICAgICAgLy8gc29tZSBUbXBzIGFzIGJlaW5nIHVubWF0ZXJpYWxpemVkIGNv
bnN0YW50cyBhbmQgaGF2ZSBhIGxhdGUgQWlyIHBoYXNlIC0gcG9zdCByZWdpc3RlcgotICAgICAg
ICAvLyBhbGxvY2F0aW9uIC0gdGhhdCBjcmVhdGVzIG1hdGVyaWFsaXphdGlvbnMgb2YgdGhvc2Ug
Y29uc3RhbnQgVG1wcyBieSBzY2F2ZW5naW5nIGxlZnRvdmVyCi0gICAgICAgIC8vIHJlZ2lzdGVy
cy4KKyAgICAgICAgLy8gVGhpcyBwaGFzZSB1c2VzIHN1cGVyIHNpbXBsZSBoZXVyaXN0aWNzIHRv
IGVuc3VyZSB0aGF0IGNvbnN0YW50cyBhcmUgaW4gcHJvZml0YWJsZSBwbGFjZXMKKyAgICAgICAg
Ly8gYW5kIGFsc28gbG93ZXJzIGNvbnN0YW50IG1hdGVyaWFsaXphdGlvbiBjb2RlLiBDb25zdGFu
dHMgbWFya2VkICJmYXN0IiBieSB0aGUgY2xpZW50IGFyZQorICAgICAgICAvLyBob2lzdGVkIHRv
IHRoZSBsb3dlc3QgY29tbW9uIGRvbWluYXRvci4gQSB0YWJsZSBpcyBjcmVhdGVkIGZvciBjb25z
dGFudHMgdGhhdCBuZWVkIHRvIGJlCisgICAgICAgIC8vIGxvYWRlZCB0byBiZSBtYXRlcmlhbGl6
ZWQsIGFuZCBhbGwgb2YgdGhlaXIgVmFsdWVzIGFyZSB0dXJuZWQgaW50byBsb2FkcyBmcm9tIHRo
YXQgdGFibGUuCisgICAgICAgIC8vIE5vbi1mYXN0IGNvbnN0YW50cyBnZXQgbWF0ZXJpYWxpemVk
IGluIHRoZSBibG9jayB0aGF0IHVzZXMgdGhlbS4gQ29uc3RhbnRzIHRoYXQgYXJlCisgICAgICAg
IC8vIG1hdGVyaWFsaXplZCBieSBsb2FkaW5nIGdldCBzcGVjaWFsIHRyZWF0bWVudCB3aGVuIHRo
ZXkgZ2V0IHVzZWQgaW4gc29tZSBraW5kIG9mIEFueSBpbiBhCisgICAgICAgIC8vIFN0YWNrbWFw
VmFsdWUuIEluIHRoYXQgY2FzZSwgdGhlIENvbnN0YW50cyBhcmUgc3VuayB0byB0aGUgcG9pbnQg
b2YgdXNlLCBzaW5jZSB0aGF0IGFsbG93cworICAgICAgICAvLyB0aGUgaW5zdHJ1Y3Rpb24gc2Vs
ZWN0b3IgdG8gc2luayB0aGUgY29uc3RhbnRzIGludG8gYW4gQXJnOjppbW02NC4KKworICAgICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IGEgYmV0dGVyIHN0b3J5IGZvciBjb25zdGFudHMuIEZvciBl
eGFtcGxlLCB0aGUgdGFibGUgdXNlZCB0byBob2xkIGRvdWJsZQorICAgICAgICAvLyBjb25zdGFu
dHMgc2hvdWxkIGhhdmUgYSBwb2ludGVyIHRvIGl0IHRoYXQgaXMgaG9pc3RlZC4gSWYgd2Ugd2Fu
dGVkIHRvIGJlIG1vcmUgYWdncmVzc2l2ZSwKKyAgICAgICAgLy8gd2UgY291bGQgbWFrZSBjb25z
dGFudCBtYXRlcmlhbGl6YXRpb24gYmUgYSBmZWF0dXJlIG9mIEFpcjogd2UgY291bGQgbGFiZWwg
c29tZSBUbXBzIGFzCisgICAgICAgIC8vIGJlaW5nIHVubWF0ZXJpYWxpemVkIGNvbnN0YW50cyBh
bmQgaGF2ZSBhIGxhdGUgQWlyIHBoYXNlIC0gcG9zdCByZWdpc3RlciBhbGxvY2F0aW9uIC0gdGhh
dAorICAgICAgICAvLyBjcmVhdGVzIG1hdGVyaWFsaXphdGlvbnMgb2YgdGhvc2UgY29uc3RhbnQg
VG1wcyBieSBzY2F2ZW5naW5nIGxlZnRvdmVyIHJlZ2lzdGVycy4KIAorICAgICAgICBob2lzdEZh
c3RDb25zdGFudHMoKTsKKyAgICAgICAgc2lua1Nsb3dDb25zdGFudHMoKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgdm9pZCBob2lzdEZhc3RDb25zdGFudHMoKQorICAgIHsKKyAgICAgICAgRG9t
aW5hdG9ycyYgZG9taW5hdG9ycyA9IG1fcHJvYy5kb21pbmF0b3JzKCk7CisgICAgICAgIEhhc2hN
YXA8VmFsdWVLZXksIFZhbHVlKj4gdmFsdWVGb3JDb25zdGFudDsKKyAgICAgICAgSW5kZXhNYXA8
QmFzaWNCbG9jaywgVmVjdG9yPFZhbHVlKj4+IG1hdGVyaWFsaXphdGlvbnMobV9wcm9jLnNpemUo
KSk7CisKKyAgICAgICAgLy8gV2UgZGV0ZXJtaW5lIHdoZXJlIHRoaW5ncyBnZXQgbWF0ZXJpYWxp
emVkIGJhc2VkIG9uIHdoZXJlIHRoZXkgYXJlIHVzZWQuCisgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX3Byb2MpIHsKKyAgICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJs
b2NrKSB7CisgICAgICAgICAgICAgICAgZm9yIChWYWx1ZSomIGNoaWxkIDogdmFsdWUtPmNoaWxk
cmVuKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWVLZXkga2V5ID0gY2hpbGQtPmtleSgp
OworICAgICAgICAgICAgICAgICAgICBpZiAoIW1fcHJvYy5pc0Zhc3RDb25zdGFudChrZXkpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAgICAg
YXV0byByZXN1bHQgPSB2YWx1ZUZvckNvbnN0YW50LmFkZChrZXksIGNoaWxkKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBBc3N1bWUgdGhhdCB0aGlzIGJsb2NrIGlzIHdoZXJlIHdlIHdhbnQgdG8gbWF0ZXJp
YWxpemUgdGhlIHZhbHVlLgorICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQtPm93bmVyID0g
YmxvY2s7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIE1ha2UgJ3ZhbHVlJyB1c2UgdGhlIGNh
bm9uaWNhbCBjb25zdGFudCByYXRoZXIgdGhhbiB0aGUgb25lIGl0IHdhcyB1c2luZy4KKyAgICAg
ICAgICAgICAgICAgICAgY2hpbGQgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworCisgICAgICAg
ICAgICAgICAgICAgIC8vIERldGVybWluZSB0aGUgbGVhc3QgY29tbW9uIGRvbWluYXRvci4gVGhh
dCdzIHRoZSBsb3dlc3QgcGxhY2UgaW4gdGhlIENGRyB3aGVyZQorICAgICAgICAgICAgICAgICAg
ICAvLyB3ZSBjb3VsZCBtYXRlcmlhbGl6ZSB0aGUgY29uc3RhbnQgd2hpbGUgc3RpbGwgaGF2aW5n
IG9ubHkgb25lIG1hdGVyaWFsaXphdGlvbgorICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGUg
cmVzdWx0aW5nIGNvZGUuCisgICAgICAgICAgICAgICAgICAgIHdoaWxlICghZG9taW5hdG9ycy5k
b21pbmF0ZXMoY2hpbGQtPm93bmVyLCBibG9jaykpCisgICAgICAgICAgICAgICAgICAgICAgICBj
aGlsZC0+b3duZXIgPSBkb21pbmF0b3JzLmltbWVkaWF0ZURvbWluYXRvck9mKGNoaWxkLT5vd25l
cik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgLy8gTWFrZSBzdXJlIHRoYXQgZWFjaCBiYXNpYyBibG9jayBrbm93cyB3aGF0IHRvIG1hdGVy
aWFsaXplLiBUaGlzIGFsc28gcmVmaW5lcyB0aGUKKyAgICAgICAgLy8gbWF0ZXJpYWxpemF0aW9u
IGJsb2NrIGJhc2VkIG9uIGV4ZWN1dGlvbiBmcmVxdWVuY3kuIEl0IGZpbmRzIHRoZSBtaW5pbXVt
IGJsb2NrIGZyZXF1ZW5jeQorICAgICAgICAvLyBvZiBhbGwgb2YgaXRzIGRvbWluYXRvcnMsIGFu
ZCBzZWxlY3RzIHRoZSBjbG9zZXN0IGJsb2NrIGFtb25nc3QgdGhvc2UgdGhhdCBhcmUgdGllZCBm
b3IKKyAgICAgICAgLy8gbG93ZXN0IGZyZXF1ZW5jeS4KKyAgICAgICAgZm9yIChhdXRvJiBlbnRy
eSA6IHZhbHVlRm9yQ29uc3RhbnQpIHsKKyAgICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9IGVudHJ5
LnZhbHVlOworICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA9IHZhbHVlLT5vd25l
cjsgYmxvY2s7IGJsb2NrID0gZG9taW5hdG9ycy5pZG9tKGJsb2NrKSkgeworICAgICAgICAgICAg
ICAgIGlmIChibG9jay0+ZnJlcXVlbmN5KCkgPCB2YWx1ZS0+b3duZXItPmZyZXF1ZW5jeSgpKQor
ICAgICAgICAgICAgICAgICAgICB2YWx1ZS0+b3duZXIgPSBibG9jazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvbnNbZW50cnkudmFsdWUtPm93bmVyXS5hcHBlbmQo
ZW50cnkudmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgLy8gR2V0IHJpZCBvZiBWYWx1ZSdz
IHRoYXQgYXJlIGZhc3QgY29uc3RhbnRzIGJ1dCBhcmVuJ3QgY2Fub25pY2FsLiBBbHNvIHJlbW92
ZSB0aGUgY2Fub25pY2FsCisgICAgICAgIC8vIG9uZXMgZnJvbSB0aGUgQ0ZHLCBzaW5jZSB3ZSdy
ZSBnb2luZyB0byByZWluc2VydCB0aGVtIGVsc2V3aGVyZS4KKyAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fcHJvYykgeworICAgICAgICAgICAgZm9yIChWYWx1ZSomIHZhbHVlIDog
KmJsb2NrKSB7CisgICAgICAgICAgICAgICAgVmFsdWVLZXkga2V5ID0gdmFsdWUtPmtleSgpOwor
ICAgICAgICAgICAgICAgIGlmICghbV9wcm9jLmlzRmFzdENvbnN0YW50KGtleSkpCisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgaWYgKHZhbHVlRm9yQ29u
c3RhbnQuZ2V0KGtleSkgPT0gdmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbV9w
cm9jLmFkZDxWYWx1ZT4oTm9wLCB2YWx1ZS0+b3JpZ2luKCkpOworICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoTm9wKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBOb3cgbWFrZSBzdXJlIHRoYXQgd2UgbW92
ZSBjb25zdGFudHMgdG8gd2hlcmUgdGhleSBhcmUgc3VwcG9zZWQgdG8gZ28uIEFnYWluLCB3ZSBk
byB0aGlzCisgICAgICAgIC8vIGJhc2VkIG9uIHVzZXMuCisgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX3Byb2MpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmFsdWVJbmRl
eCA9IDA7IHZhbHVlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK3ZhbHVlSW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSBibG9jay0+YXQodmFsdWVJbmRleCk7CisgICAgICAg
ICAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkgeworICAgICAg
ICAgICAgICAgICAgICBWYWx1ZUtleSBrZXkgPSBjaGlsZC0+a2V5KCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghbV9wcm9jLmlzRmFzdENvbnN0YW50KGtleSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBlbmNvdW50
ZXIgYSBmYXN0IGNvbnN0YW50LCB0aGVuIGl0IG11c3QgYmUgY2Fub25pY2FsLCBzaW5jZSB3ZSBh
bHJlYWR5CisgICAgICAgICAgICAgICAgICAgIC8vIGdvdCByaWQgb2YgdGhlIG5vbi1jYW5vbmlj
YWwgb25lcy4KKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHZhbHVlRm9yQ29uc3RhbnQuZ2V0
KGtleSkgPT0gY2hpbGQpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+b3duZXIg
IT0gYmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgY29uc3RhbnQgaXNu
J3Qgb3VyIHByb2JsZW0uIEl0J3MgZ29pbmcgdG8gYmUgbWF0ZXJpYWxpemVkIGluIGFub3RoZXIK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJsb2NrLgorICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3JlIHN1cHBvc2VkIHRvIG1hdGVyaWFsaXplIHRo
aXMgY29uc3RhbnQgaW4gdGhpcyBibG9jaywgYW5kIHdlIGhhdmVuJ3QKKyAgICAgICAgICAgICAg
ICAgICAgLy8gZG9uZSBpdCB5ZXQuCisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydFZhbHVlKHZhbHVlSW5kZXgsIGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgY2hp
bGQtPm93bmVyID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIFdlIG1heSBoYXZlIHNvbWUgY29uc3RhbnRzIHRoYXQgbmVlZCB0byBi
ZSBtYXRlcmlhbGl6ZWQgcmlnaHQgYXQgdGhlIGVuZCBvZiB0aGlzCisgICAgICAgICAgICAvLyBi
bG9jay4KKyAgICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogbWF0ZXJpYWxpemF0aW9uc1ti
bG9ja10pIHsKKyAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLT5vd25lcikgeworICAgICAgICAg
ICAgICAgICAgICAvLyBJdCdzIGFscmVhZHkgbWF0ZXJpYWxpemVkIGluIHRoaXMgYmxvY2suCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydFZhbHVlKGJsb2NrLT5zaXplKCkgLSAxLCB2
YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRl
KGJsb2NrKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHNpbmtTbG93Q29uc3Rh
bnRzKCkKKyAgICB7CiAgICAgICAgIC8vIEZpcnN0IHdlIG5lZWQgdG8gZmlndXJlIG91dCB3aGlj
aCBjb25zdGFudHMgZ28gaW50byB0aGUgZGF0YSBzZWN0aW9uLiBUaGVzZSBhcmUgbm9uLXplcm8K
ICAgICAgICAgLy8gZG91YmxlIGNvbnN0YW50cy4KICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUg
OiBtX3Byb2MudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmICghbmVlZHNNb3Rpb24odmFsdWUp
KQorICAgICAgICAgICAgVmFsdWVLZXkga2V5ID0gdmFsdWUtPmtleSgpOworICAgICAgICAgICAg
aWYgKCFuZWVkc01vdGlvbihrZXkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgbV90b1JlbW92ZS5hcHBlbmQodmFsdWUpOwotICAgICAgICAgICAgVmFsdWVLZXkga2V5
ID0gdmFsdWUtPmtleSgpOwogICAgICAgICAgICAgaWYgKGdvZXNJblRhYmxlKGtleSkpCiAgICAg
ICAgICAgICAgICAgbV9jb25zdFRhYmxlLmFkZChrZXksIG1fY29uc3RUYWJsZS5zaXplKCkpOwog
ICAgICAgICB9CkBAIC04NywxMCArMjAwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBT
dGFja21hcFZhbHVlKiBzdGFja21hcCA9IHZhbHVlLT5hczxTdGFja21hcFZhbHVlPigpOwogICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJbmRleCA9IDA7IGNoaWxkSW5kZXggPCB2
YWx1ZS0+bnVtQ2hpbGRyZW4oKTsgKytjaGlsZEluZGV4KSB7CiAgICAgICAgICAgICAgICAgICAg
IFZhbHVlKiYgY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoY2hpbGRJbmRleCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghbmVlZHNNb3Rpb24oY2hpbGQpKQorICAgICAgICAgICAgICAgICAgICBWYWx1
ZUtleSBrZXkgPSBjaGlsZC0+a2V5KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghbmVlZHNN
b3Rpb24oa2V5KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
ICAgICAgICAgICAgIFZhbHVlS2V5IGtleSA9IGNoaWxkLT5rZXkoKTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKHN0YWNrbWFwCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiBnb2VzSW5UYWJs
ZShrZXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiBzdGFja21hcC0+Y29uc3RyYWluZWRD
aGlsZChjaGlsZEluZGV4KS5yZXAoKS5pc0FueSgpKSB7CkBAIC0xMTUsOCArMjI4LDcgQEAgcHVi
bGljOgogICAgICAgICBmb3IgKFZhbHVlKiB0b1JlbW92ZSA6IG1fdG9SZW1vdmUpCiAgICAgICAg
ICAgICB0b1JlbW92ZS0+cmVwbGFjZVdpdGhOb3AoKTsKICAgICB9Ci0KLXByaXZhdGU6CisgICAg
CiAgICAgVmFsdWUqIG1hdGVyaWFsaXplKHVuc2lnbmVkIHZhbHVlSW5kZXgsIGNvbnN0IFZhbHVl
S2V5JiBrZXksIGNvbnN0IE9yaWdpbiYgb3JpZ2luKQogICAgIHsKICAgICAgICAgaWYgKFZhbHVl
KiByZXN1bHQgPSBtX2NvbnN0YW50cy5nZXQoa2V5KSkKQEAgLTE0Nyw5ICsyNTksOSBAQCBwcml2
YXRlOgogICAgICAgICByZXR1cm4ga2V5Lm9wY29kZSgpID09IENvbnN0RG91YmxlICYmIGtleSAh
PSBkb3VibGVaZXJvKCk7CiAgICAgfQogCi0gICAgYm9vbCBuZWVkc01vdGlvbihjb25zdCBWYWx1
ZSogdmFsdWUpCisgICAgYm9vbCBuZWVkc01vdGlvbihjb25zdCBWYWx1ZUtleSYga2V5KQogICAg
IHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLT5pc0NvbnN0YW50KCk7CisgICAgICAgIHJldHVybiBr
ZXkuaXNDb25zdGFudCgpICYmICFtX3Byb2MuaXNGYXN0Q29uc3RhbnQoa2V5KTsKICAgICB9CiAK
ICAgICBzdGF0aWMgVmFsdWVLZXkgZG91YmxlWmVybygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNPcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNPcGNvZGUuaAkocmV2aXNpb24gMTkzNjYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMSw2ICsyMzEsMTggQEAgaW5saW5l
IE9wY29kZSBjb25zdFB0ck9wY29kZSgpCiAgICAgcmV0dXJuIENvbnN0MzI7CiB9CiAKK2lubGlu
ZSBib29sIGlzQ29uc3RhbnQoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkg
eworICAgIGNhc2UgQ29uc3QzMjoKKyAgICBjYXNlIENvbnN0NjQ6CisgICAgY2FzZSBDb25zdERv
dWJsZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKIG5hbWVzcGFj
ZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCShy
ZXZpc2lvbiAxOTM2NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNCArMzIsMTcgQEAKICNpbmNsdWRlICJCM0Jhc2lj
QmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMuaCIKICNpbmNsdWRl
ICJCM0Jsb2NrV29ya2xpc3QuaCIKKyNpbmNsdWRlICJCM0NGRy5oIgogI2luY2x1ZGUgIkIzRGF0
YVNlY3Rpb24uaCIKKyNpbmNsdWRlICJCM0RvbWluYXRvcnMuaCIKICNpbmNsdWRlICJCM09wYXF1
ZUJ5cHJvZHVjdHMuaCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogUHJvY2VkdXJlOjpQcm9jZWR1cmUoKQotICAgIDogbV9s
YXN0UGhhc2VOYW1lKCJpbml0aWFsIikKKyAgICA6IG1fY2ZnKG5ldyBDRkcoKnRoaXMpKQorICAg
ICwgbV9sYXN0UGhhc2VOYW1lKCJpbml0aWFsIikKICAgICAsIG1fYnlwcm9kdWN0cyhzdGQ6Om1h
a2VfdW5pcXVlPE9wYXF1ZUJ5cHJvZHVjdHM+KCkpCiAgICAgLCBtX2NvZGUobmV3IEFpcjo6Q29k
ZSgqdGhpcykpCiB7CkBAIC0xMTMsNiArMTE2LDExIEBAIHZvaWQgUHJvY2VkdXJlOjpyZXNldFJl
YWNoYWJpbGl0eSgpCiAgICAgICAgIH0pOwogfQogCit2b2lkIFByb2NlZHVyZTo6aW52YWxpZGF0
ZUNGRygpCit7CisgICAgbV9kb21pbmF0b3JzID0gbnVsbHB0cjsKK30KKwogdm9pZCBQcm9jZWR1
cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogKnRoaXMpCkBAIC0xMzgsNiArMTQ2LDI2IEBAIHZvaWQgUHJvY2VkdXJlOjpkZWxl
dGVWYWx1ZShWYWx1ZSogdmFsdWUKICAgICBtX3ZhbHVlc1t2YWx1ZS0+aW5kZXgoKV0gPSBudWxs
cHRyOwogfQogCitEb21pbmF0b3JzJiBQcm9jZWR1cmU6OmRvbWluYXRvcnMoKQoreworICAgIGlm
ICghbV9kb21pbmF0b3JzKQorICAgICAgICBtX2RvbWluYXRvcnMgPSBzdGQ6Om1ha2VfdW5pcXVl
PERvbWluYXRvcnM+KCp0aGlzKTsKKyAgICByZXR1cm4gKm1fZG9taW5hdG9yczsKK30KKwordm9p
ZCBQcm9jZWR1cmU6OmFkZEZhc3RDb25zdGFudChjb25zdCBWYWx1ZUtleSYgY29uc3RhbnQpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnQuaXNDb25zdGFudCgpKTsKKyAgICBtX2Zhc3RD
b25zdGFudHMuYWRkKGNvbnN0YW50KTsKK30KKworYm9vbCBQcm9jZWR1cmU6OmlzRmFzdENvbnN0
YW50KGNvbnN0IFZhbHVlS2V5JiBjb25zdGFudCkKK3sKKyAgICBpZiAoIWNvbnN0YW50KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fZmFzdENvbnN0YW50cy5jb250YWlucyhj
b25zdGFudCk7Cit9CisKIHZvaWQqIFByb2NlZHVyZTo6YWRkRGF0YVNlY3Rpb24oc2l6ZV90IHNp
emUpCiB7CiAgICAgaWYgKCFzaXplKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UHJvY2VkdXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJv
Y2VkdXJlLmgJKHJldmlzaW9uIDE5MzY2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1Byb2NlZHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMCArMzEsMTIgQEAKICNpbmNsdWRl
ICJCM09wYXF1ZUJ5cHJvZHVjdHMuaCIKICNpbmNsdWRlICJCM09yaWdpbi5oIgogI2luY2x1ZGUg
IkIzVHlwZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVLZXkuaCIKICNpbmNsdWRlICJQdXJlTmFOLmgi
CiAjaW5jbHVkZSAiUmVnaXN0ZXJBdE9mZnNldExpc3QuaCIKICNpbmNsdWRlIDx3dGYvQmFnLmg+
CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgog
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5o
PgogI2luY2x1ZGUgPHd0Zi9UcmlTdGF0ZS5oPgpAQCAtNDQsNiArNDYsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogY2xhc3MgQmFzaWNCbG9jazsKIGNsYXNzIEJsb2NrSW5z
ZXJ0aW9uU2V0OworY2xhc3MgQ0ZHOworY2xhc3MgRG9taW5hdG9yczsKIGNsYXNzIFZhbHVlOwog
CiBuYW1lc3BhY2UgQWlyIHsgY2xhc3MgQ29kZTsgfQpAQCAtNzAsNiArNzQsMTAgQEAgcHVibGlj
OgogICAgIHZvaWQgcmVzZXRWYWx1ZU93bmVycygpOwogICAgIHZvaWQgcmVzZXRSZWFjaGFiaWxp
dHkoKTsKIAorICAgIC8vIFRoaXMgZGVzdHJveXMgQ0ZHIGFuYWx5c2VzLiBJZiB3ZSBhc2sgZm9y
IHRoZW0gYWdhaW4sIHdlIHdpbGwgcmVjb21wdXRlIHRoZW0uIFVzdWFsbHkgeW91CisgICAgLy8g
c2hvdWxkIGNhbGwgdGhpcyBhbnl0aW1lIHlvdSBjYWxsIHJlc2V0UmVhY2hhYmlsaXR5KCkuCisg
ICAgdm9pZCBpbnZhbGlkYXRlQ0ZHKCk7CisKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAogICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2Jsb2Nrcy5zaXplKCk7IH0KQEAgLTIwMCw2ICsyMDgsMTMgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBkZWxldGVWYWx1ZShWYWx1ZSopOwogCisgICAgQ0ZHJiBjZmcoKSBjb25zdCB7IHJl
dHVybiAqbV9jZmc7IH0KKworICAgIERvbWluYXRvcnMmIGRvbWluYXRvcnMoKTsKKworICAgIHZv
aWQgYWRkRmFzdENvbnN0YW50KGNvbnN0IFZhbHVlS2V5Jik7CisgICAgYm9vbCBpc0Zhc3RDb25z
dGFudChjb25zdCBWYWx1ZUtleSYpOworCiAgICAgLy8gVGhlIG5hbWUgaGFzIHRvIGJlIGEgc3Ry
aW5nIGxpdGVyYWwsIHNpbmNlIHdlIGRvbid0IGRvIGFueSBtZW1vcnkgbWFuYWdlbWVudCBmb3Ig
dGhlIHN0cmluZy4KICAgICB2b2lkIHNldExhc3RQaGFzZU5hbWUoY29uc3QgY2hhciogbmFtZSkK
ICAgICB7CkBAIC0yNDAsNiArMjU1LDkgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPEJhc2ljQmxvY2s+PiBtX2Jsb2NrczsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PFZhbHVlPj4gbV92YWx1ZXM7CiAgICAgVmVjdG9yPHNpemVfdD4gbV92YWx1ZUluZGV4RnJlZUxp
c3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPENGRz4gbV9jZmc7CisgICAgc3RkOjp1bmlxdWVfcHRy
PERvbWluYXRvcnM+IG1fZG9taW5hdG9yczsKKyAgICBIYXNoU2V0PFZhbHVlS2V5PiBtX2Zhc3RD
b25zdGFudHM7CiAgICAgY29uc3QgY2hhciogbV9sYXN0UGhhc2VOYW1lOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxPcGFxdWVCeXByb2R1Y3RzPiBtX2J5cHJvZHVjdHM7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPEFpcjo6Q29kZT4gbV9jb2RlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UmVkdWNlU3RyZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkocmV2aXNpb24gMTkzNjYyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcs
NiArMTE3LDcgQEAgcHVibGljOgogCiAgICAgICAgICAgICBpZiAobV9jaGFuZ2VkQ0ZHKSB7CiAg
ICAgICAgICAgICAgICAgbV9wcm9jLnJlc2V0UmVhY2hhYmlsaXR5KCk7CisgICAgICAgICAgICAg
ICAgbV9wcm9jLmludmFsaWRhdGVDRkcoKTsKICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0
cnVlOwogICAgICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNW
YWx1ZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNW
YWx1ZUlubGluZXMuaAkocmV2aXNpb24gMTkzNjYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsdWVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDE0ICs1NCw3IEBAIGNv
bnN0IFQqIFZhbHVlOjphcygpIGNvbnN0CiAKIGlubGluZSBib29sIFZhbHVlOjppc0NvbnN0YW50
KCkgY29uc3QKIHsKLSAgICBzd2l0Y2ggKG9wY29kZSgpKSB7Ci0gICAgY2FzZSBDb25zdDMyOgot
ICAgIGNhc2UgQ29uc3Q2NDoKLSAgICBjYXNlIENvbnN0RG91YmxlOgotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHJl
dHVybiBCMzo6aXNDb25zdGFudChvcGNvZGUoKSk7CiB9CiAKIGlubGluZSBib29sIFZhbHVlOjpp
c0ludGVnZXIoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVL
ZXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtleS5o
CShyZXZpc2lvbiAxOTM2NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtl
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNiArMTIwLDExIEBAIHB1YmxpYzoKICAgICAgICAg
fQogICAgIH0KIAorICAgIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gQjM6OmlzQ29uc3RhbnQob3Bjb2RlKCkpOworICAgIH0KKwogICAgIC8vIEF0dGVtcHRz
IHRvIG1hdGVyaWFsaXplIHRoZSBWYWx1ZSBmb3IgdGhpcyBWYWx1ZUtleS4gTWF5IHJldHVybiBu
dWxscHRyIGlmIHRoZSB2YWx1ZSBjYW5ub3QKICAgICAvLyBiZSBtYXRlcmlhbGl6ZWQuIFRoaXMg
aGFwcGVucyBmb3IgQ2hlY2tBZGQgYW5kIGZyaWVuZHMuIFlvdSBjYW4gdXNlIGNhbk1hdGVyaWFs
aXplKCkgdG8gY2hlY2sKICAgICAvLyBpZiB5b3VyIGtleSBpcyBtYXRlcmlhbGl6YWJsZS4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkocmV2aXNpb24gMTkz
NjYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM0LDYgKzEzNCwxMSBAQCBCYXNpY0Jsb2NrKiBDb2RlOjpmaW5kTmV4dEJs
b2NrKEJhc2ljQmxvCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK3ZvaWQgQ29kZTo6YWRkRmFz
dFRtcChUbXAgdG1wKQoreworICAgIG1fZmFzdFRtcHMuYWRkKHRtcCk7Cit9CisKIH0gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNpb24gMTkzNjYyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCiAjaW5jbHVkZSAi
QWlyU3BlY2lhbC5oIgogI2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgorI2luY2x1ZGUgIkFpclRt
cC5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyQXRPZmZzZXRMaXN0LmgiCiAjaW5jbHVkZSAiU3RhY2tB
bGlnbm1lbnQuaCIKIApAQCAtMjg5LDYgKzI5MCw5IEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAg
U3BlY2lhbHNDb2xsZWN0aW9uIHNwZWNpYWxzKCkgY29uc3QgeyByZXR1cm4gU3BlY2lhbHNDb2xs
ZWN0aW9uKCp0aGlzKTsgfQorCisgICAgdm9pZCBhZGRGYXN0VG1wKFRtcCk7CisgICAgYm9vbCBp
c0Zhc3RUbXAoVG1wIHRtcCkgY29uc3QgeyByZXR1cm4gbV9mYXN0VG1wcy5jb250YWlucyh0bXAp
OyB9CiAgICAgCiAgICAgLy8gVGhlIG5hbWUgaGFzIHRvIGJlIGEgc3RyaW5nIGxpdGVyYWwsIHNp
bmNlIHdlIGRvbid0IGRvIGFueSBtZW1vcnkgbWFuYWdlbWVudCBmb3IgdGhlIHN0cmluZy4KICAg
ICB2b2lkIHNldExhc3RQaGFzZU5hbWUoY29uc3QgY2hhciogbmFtZSkKQEAgLTMwNyw2ICszMTEs
NyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tTbG90Pj4gbV9z
dGFja1Nsb3RzOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IG1fYmxv
Y2tzOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4+IG1fc3BlY2lhbHM7Cisg
ICAgSGFzaFNldDxUbXA+IG1fZmFzdFRtcHM7CiAgICAgQ0NhbGxTcGVjaWFsKiBtX2NDYWxsU3Bl
Y2lhbCB7IG51bGxwdHIgfTsKICAgICB1bnNpZ25lZCBtX251bUdQVG1wcyB7IDAgfTsKICAgICB1
bnNpZ25lZCBtX251bUZQVG1wcyB7IDAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2Npbmcu
Y3BwCShyZXZpc2lvbiAxOTM2NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYzLDYg
KzU2MywxMSBAQCBwcml2YXRlOgogICAgICAgICAvLyBIaWdoZXIgc2NvcmUgbWVhbnMgbW9yZSBk
ZXNpcmFibGUgdG8gc3BpbGwuIExvd2VyIHNjb3JlcyBtYXhpbWl6ZSB0aGUgbGlrZWxpaG9vZCB0
aGF0IGEgdG1wCiAgICAgICAgIC8vIGdldHMgYSByZWdpc3Rlci4KICAgICAgICAgYXV0byBzY29y
ZSA9IFsmXSAoVG1wIHRtcCkgLT4gZG91YmxlIHsKKyAgICAgICAgICAgIC8vIEFpciBleHBvc2Vz
IHRoZSBjb25jZXB0IG9mICJmYXN0IHRtcHMiLCBhbmQgd2UgaW50ZXJwcmV0IHRoYXQgdG8gbWVh
biB0aGF0IHRoZSB0bXAKKyAgICAgICAgICAgIC8vIHNob3VsZCBhbHdheXMgYmUgaW4gYSByZWdp
c3Rlci4KKyAgICAgICAgICAgIGlmIChtX2NvZGUuaXNGYXN0VG1wKHRtcCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEFsbCBlbHNlIGJl
aW5nIGVxdWFsLCB0aGUgc2NvcmUgc2hvdWxkIGJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGRl
Z3JlZS4KICAgICAgICAgICAgIGRvdWJsZSBkZWdyZWUgPSBzdGF0aWNfY2FzdDxkb3VibGU+KG1f
ZGVncmVlc1tBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh0bXApXSk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5oCShyZXZpc2lv
biAxOTM2NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTU0FDYWxjdWxhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NTQUNhbGN1bGF0b3IuY3BwCShyZXZpc2lvbiAxOTM2NjIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
NSwxMiArOTUsMTIgQEAgU1NBQ2FsY3VsYXRvcjo6RGVmKiBTU0FDYWxjdWxhdG9yOjpuZXdEZQog
CiBTU0FDYWxjdWxhdG9yOjpEZWYqIFNTQUNhbGN1bGF0b3I6Om5vbkxvY2FsUmVhY2hpbmdEZWYo
QmFzaWNCbG9jayogYmxvY2ssIFZhcmlhYmxlKiB2YXJpYWJsZSkKIHsKLSAgICByZXR1cm4gcmVh
Y2hpbmdEZWZBdFRhaWwobV9ncmFwaC5tX2RvbWluYXRvcnMtPmltbWVkaWF0ZURvbWluYXRvck9m
KGJsb2NrKSwgdmFyaWFibGUpOworICAgIHJldHVybiByZWFjaGluZ0RlZkF0VGFpbChtX2dyYXBo
Lm1fZG9taW5hdG9ycy0+aWRvbShibG9jayksIHZhcmlhYmxlKTsKIH0KIAogU1NBQ2FsY3VsYXRv
cjo6RGVmKiBTU0FDYWxjdWxhdG9yOjpyZWFjaGluZ0RlZkF0VGFpbChCYXNpY0Jsb2NrKiBibG9j
aywgVmFyaWFibGUqIHZhcmlhYmxlKQogewotICAgIGZvciAoOyBibG9jazsgYmxvY2sgPSBtX2dy
YXBoLm1fZG9taW5hdG9ycy0+aW1tZWRpYXRlRG9taW5hdG9yT2YoYmxvY2spKSB7CisgICAgZm9y
ICg7IGJsb2NrOyBibG9jayA9IG1fZ3JhcGgubV9kb21pbmF0b3JzLT5pZG9tKGJsb2NrKSkgewog
ICAgICAgICBpZiAoRGVmKiBkZWYgPSBtX2RhdGFbYmxvY2tdLm1fZGVmcy5nZXQodmFyaWFibGUp
KQogICAgICAgICAgICAgcmV0dXJuIGRlZjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTkzNjYyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwMyw2ICszMDMsMTMgQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAgIG1f
dGFnVHlwZU51bWJlciA9IG1fb3V0LmNvbnN0SW50NjQoVGFnVHlwZU51bWJlcik7CiAgICAgICAg
IG1fdGFnTWFzayA9IG1fb3V0LmNvbnN0SW50NjQoVGFnTWFzayk7CisKKyNpZiBGVExfVVNFU19C
MworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBCMyBrbm93cyB0aGF0IHdlIHJlYWxseSBjYXJl
IGFib3V0IHRoZSBtYXNrIHJlZ2lzdGVycy4gVGhpcyBmb3JjZXMgdGhlCisgICAgICAgIC8vIGNv
bnN0YW50cyB0byBiZSBtYXRlcmlhbGl6ZWQgaW4gcmVnaXN0ZXJzLgorICAgICAgICBtX3Byb2Mu
YWRkRmFzdENvbnN0YW50KG1fdGFnVHlwZU51bWJlci0+a2V5KCkpOworICAgICAgICBtX3Byb2Mu
YWRkRmFzdENvbnN0YW50KG1fdGFnTWFzay0+a2V5KCkpOworI2VuZGlmIC8vIEZUTF9VU0VTX0Iz
CiAgICAgICAgIAogICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5jb25zdEludFB0cihjb2Rl
QmxvY2soKSksIGFkZHJlc3NGb3IoSlNTdGFjazo6Q29kZUJsb2NrKSk7CiAgICAgICAgIApJbmRl
eDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDE5MzY2MikKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTUtMTItMDcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFw
cGxlLmNvbT4KKworICAgICAgICBGVEwgQjMgc2hvdWxkIGJlIGFibGUgdG8gZmxhZyB0aGUgdGFn
IGNvbnN0YW50cyBhcyBiZWluZyBzdXBlciBpbXBvcnRhbnQgc28gdGhhdCBCMyBjYW4gaG9pc3Qg
dGhlbSBhbmQgQWlyIGNhbiBmb3JjZSB0aGVtIGludG8gcmVnaXN0ZXJzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE5NTUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgc29tZSByZW1haW5pbmcg
REZHLXNwZWNpZmljIHNuaXBwZXRzIGZyb20gRG9taW5hdG9ycy4gVGhpcyB1c2VkIHRvIGJlIGEg
bm9uLXRlbXBsYXRlCisgICAgICAgIERGRyBjbGFzcywgYW5kIHNvbWUgdGltZSBhZ28gSSBob2lz
dGVkIGl0IGludG8gV1RGIGFuZCBtYWRlIGl0IGdlbmVyaWMuIEJ1dCBzaW5jZSB0aGUgb25seQor
ICAgICAgICB1c2VyIG9mIHRoZSBjbGFzcyB3YXMgdGhlIERGRywgdGhpcyBjbGFzcyBzdGlsbCBo
YWQgYSBoYW5kZnVsIG9mIERGRy1zcGVjaWZpYyBzbmlwcGV0cyB0aGF0CisgICAgICAgIGRpZG4n
dCBjb21waWxlIHdoZW4gSSBzdGFydGVkIHVzaW5nIGl0IGZyb20gQjMuCisKKyAgICAgICAgQWxz
byByZW5hbWVkIGltbWVkaWF0ZURvbWluYXRvck9mKCkgdG8gaWRvbSgpLiBUaGlzIGlzIHRoZSBz
b3J0IG9mIGFiYnJldmlhdGlvbiB0aGF0IHdlCisgICAgICAgIHdvdWxkbid0IG9yZGluYXJpbHkg
d2FudCB0byBoYXZlIGluIFdlYktpdC4gQnV0IFdlYktpdCBkb2VzIGFsbG93IGZvciBhYmJyZXZp
YXRpb25zIHRoYXQgYXJlCisgICAgICAgICJtb3JlIGNhbm9uaWNhbCIuIFRoZSB0ZXJtICJpZG9t
IiBpcyBkZWZpbml0ZWx5IG1vcmUgY2Fub25pY2FsIHRoYW4gImltbWVkaWF0ZURvbWluYXRvck9m
Ii4KKworICAgICAgICAqIHd0Zi9Eb21pbmF0b3JzLmg6CisgICAgICAgIChXVEY6OkRvbWluYXRv
cnM6OmRvbWluYXRlcyk6CisgICAgICAgIChXVEY6OkRvbWluYXRvcnM6Omlkb20pOgorICAgICAg
ICAoV1RGOjpEb21pbmF0b3JzOjpmb3JBbGxTdHJpY3REb21pbmF0b3JzT2YpOgorICAgICAgICAo
V1RGOjpEb21pbmF0b3JzOjpOYWl2ZURvbWluYXRvcnM6OmRvbWluYXRlcyk6CisgICAgICAgIChX
VEY6OkRvbWluYXRvcnM6Ok5haXZlRG9taW5hdG9yczo6ZHVtcCk6CisgICAgICAgIChXVEY6OkRv
bWluYXRvcnM6OlZhbGlkYXRpb25Db250ZXh0OjpoYW5kbGVFcnJvcnMpOgorCiAyMDE1LTEyLTAz
ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3Zl
IE9iamVjdGl2ZS1DIEdDIHN1cHBvcnQKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0RvbWluYXRvcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Eb21pbmF0b3JzLmgJKHJldmlzaW9uIDE5
MzY2MikKKysrIFNvdXJjZS9XVEYvd3RmL0RvbWluYXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNiArMjYsNyBAQAogI2lmbmRlZiBXVEZEb21pbmF0b3JzX2gKICNkZWZpbmUgV1RGRG9taW5h
dG9yc19oCiAKKyNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9H
cmFwaE5vZGVXb3JrbGlzdC5oPgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTEyMCw4ICsxMjEsOSBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gZnJvbSA9PSB0byB8fCBzdHJpY3RseURv
bWluYXRlcyhmcm9tLCB0byk7CiAgICAgfQotICAgIAotICAgIHR5cGVuYW1lIEdyYXBoOjpOb2Rl
IGltbWVkaWF0ZURvbWluYXRvck9mKHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJsb2NrKSBjb25zdAor
CisgICAgLy8gUmV0dXJucyB0aGUgaW1tZWRpYXRlIGRvbWluYXRvciBvZiB0aGlzIGJsb2NrLiBS
ZXR1cm5zIG51bGwgZm9yIHRoZSByb290IGJsb2NrLgorICAgIHR5cGVuYW1lIEdyYXBoOjpOb2Rl
IGlkb20odHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2spIGNvbnN0CiAgICAgewogICAgICAgICBy
ZXR1cm4gbV9kYXRhW2Jsb2NrXS5pZG9tUGFyZW50OwogICAgIH0KQEAgLTU1NSw3ICs1NTcsNyBA
QCBwcml2YXRlOgogICAgIAogICAgICAgICBib29sIGRvbWluYXRlcyh0eXBlbmFtZSBHcmFwaDo6
Tm9kZSBmcm9tLCB0eXBlbmFtZSBHcmFwaDo6Tm9kZSB0bykgY29uc3QKICAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGRvbWluYXRlcyhmcm9tLT5pbmRleCwgdG8tPmluZGV4KTsKKyAgICAg
ICAgICAgIHJldHVybiBkb21pbmF0ZXMobV9ncmFwaC5pbmRleChmcm9tKSwgbV9ncmFwaC5pbmRl
eCh0bykpOwogICAgICAgICB9CiAgICAgCiAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdApAQCAtNjM2LDEyICs2MzgsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEJsb2NrICIsIGdy
YXBoLmR1bXAoZ3JhcGgubm9kZShibG9ja0luZGV4KSksICI6IHN1Y2Nlc3NvcnMgPSBbIik7CiAg
ICAgICAgICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOwotICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+bnVtU3VjY2Vzc29ycygpOyArK2kpCi0gICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coY29tbWEsIGdyYXBoLmR1bXAoYmxvY2stPnN1Y2Nlc3Nvcihp
KSkpOworICAgICAgICAgICAgICAgIGZvciAoYXV0byBzdWNjZXNzb3IgOiBncmFwaC5zdWNjZXNz
b3JzKGJsb2NrKSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhjb21tYSwgZ3JhcGguZHVt
cChzdWNjZXNzb3IpKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJdLCBwcmVkZWNlc3NvcnMg
PSBbIik7CiAgICAgICAgICAgICAgICAgY29tbWEgPSBDb21tYVByaW50ZXIoKTsKLSAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPnByZWRlY2Vzc29ycy5zaXpl
KCk7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhjb21tYSwgZ3JhcGguZHVtcChi
bG9jay0+cHJlZGVjZXNzb3JzW2ldKSk7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvIHByZWRl
Y2Vzc29yIDogZ3JhcGgucHJlZGVjZXNzb3JzKGJsb2NrKSkKKyAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZyhjb21tYSwgZ3JhcGguZHVtcChwcmVkZWNlc3NvcikpOwogICAgICAgICAgICAgICAg
IGRhdGFMb2coIl1cbiIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZGF0YUxvZygiXG4i
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266832</attachid>
            <date>2015-12-07 16:38:51 -0800</date>
            <delta_ts>2015-12-07 16:53:54 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>41426</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkzNjYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMyBA
QAorMjAxNS0xMi0wNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBCMyBzaG91bGQgYmUgYWJsZSB0byBmbGFnIHRoZSB0YWcgY29uc3RhbnRzIGFzIGJlaW5n
IHN1cGVyIGltcG9ydGFudCBzbyB0aGF0IEIzIGNhbiBob2lzdCB0aGVtIGFuZCBBaXIgY2FuIGZv
cmNlIHRoZW0gaW50byByZWdpc3RlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1MTk1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRhdWdodCBCMyBhYm91dCB0aGUgY29uY2VwdCBvZiAiZmFzdCBjb25z
dGFudHMiLiBBIGNsaWVudCBvZiBCMyBjYW4gbm93IHRlbGwgQjMgd2hpY2gKKyAgICAgICAgY29u
c3RhbnRzIGFyZSBzdXBlciBpbXBvcnRhbnQuIEIzIHdpbGwgbm90IHNwaWxsIHRoZSBjb25zdGFu
dCBpbiB0aGF0IGNhc2UgYW5kIHdpbGwgZW5zdXJlCisgICAgICAgIHRoYXQgdGhlIGNvbnN0YW50
IGlzIG1hdGVyaWFsaXplZCBvbmx5IG9uY2U6IHN0YXRpY2FsbHkgb25jZSwgYW5kIGR5bmFtaWNh
bGx5IG9uY2UgcGVyCisgICAgICAgIHByb2NlZHVyZSBleGVjdXRpb24uIFRoZSBob2lzdEZhc3RD
b25zdGFudHMoKSBhbGdvcml0aG0gaW4gQjNNb3ZlQ29uc3RhbnRzLmNwcCBhY2hpZXZlcyB0aGlz
CisgICAgICAgIGJ5IGZpcnN0IHBpY2tpbmcgdGhlIGxvd2VzdCBjb21tb24gZG9taW5hdG9yIG9m
IGFsbCB1c2VzIG9mIGVhY2ggZmFzdCBjb25zdGFudCwgYW5kIHRoZW4KKyAgICAgICAgcGlja2lu
ZyB0aGUgbWF0ZXJpYWxpemF0aW9uIHBvaW50IGJ5IGZpbmRpbmcgdGhlIGxvd2VzdCBkb21pbmF0
b3Igb2YgdGhhdCBkb21pbmF0b3IgdGhhdCBpcworICAgICAgICB0aWVkIGZvciBsb3dlc3QgYmxv
Y2sgZnJlcXVlbmN5LiBJbiBwcmFjdGljZSwgdGhlIHNlY29uZCBzdGVwIGVuc3VyZXMgdGhhdCB0
aGlzIGlzIHRoZSBsb3dlc3QKKyAgICAgICAgcG9pbnQgaW4gdGhlIHByb2dyYW0gdGhhdCBpcyBu
b3QgaW4gYSBsb29wIChpLmUuIGV4ZWN1dGVzIG5vIG1vcmUgdGhhbiBvbmNlIGR5bmFtaWNhbGx5
IHBlcgorICAgICAgICBwcm9jZWR1cmUgaW52b2NhdGlvbikuCisKKyAgICAgICAgVGF1Z2h0IEFp
ciBhYm91dCB0aGUgY29uY2VwdCBvZiAiZmFzdCB0bXBzIi4gQjMgdGVsbHMgQWlyIHRoYXQgYSB0
bXAgaXMgZmFzdCBpZiBpdCBpcyB1c2VkIHRvCisgICAgICAgIGhvbGQgdGhlIG1hdGVyaWFsaXph
dGlvbiBvZiBhIGZhc3QgY29uc3RhbnQuIElSQyB3aWxsIHVzZSB0aGUgbG93ZXN0IHBvc3NpYmxl
IHNwaWxsIHNjb3JlIGZvcgorICAgICAgICBmYXN0IHRtcHMuIEluIHByYWN0aWNlLCB0aGlzIGVu
c3VyZXMgdGhhdCBmYXN0IGNvbnN0YW50cyBhcmUgbmV2ZXIgc3BpbGxlZC4KKworICAgICAgICBB
ZGRlZCBhIHNtYWxsIHNuaXBwZXQgb2YgY29kZSB0byBGVEw6Okxvd2VyREZHVG9MTFZNIHRoYXQg
bWFrZXMgYm90aCBvZiB0aGUgdGFnIGNvbnN0YW50cworICAgICAgICBpbnRvIGZhc3QgY29uc3Rh
bnRzLgorCisgICAgICAgIE15IGhvcGUgaXMgdGhhdCB0aGlzIHZlcnkgYnJ1dGUtZm9yY2UgaGV1
cmlzdGljIGlzIGdvb2QgZW5vdWdoIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byB0aGluaworICAgICAg
ICBhYm91dCBjb25zdGFudHMgZm9yIGEgd2hpbGUuIEJhc2VkIG9uIG15IGV4cGVyaWVuY2Ugd2l0
aCBob3cgTExWTSdzIGNvbnN0YW50IGhvaXN0aW5nIHdvcmtzCisgICAgICAgIG91dCwgdGhlIGhl
dXJpc3RpYyBpbiB0aGlzIHBhdGNoIGlzIGdvaW5nIHRvIGJlIHRvdWdoIHRvIGJlYXQuIExMVk0n
cyBjb25zdGFudCBob2lzdGluZyBkb2VzCisgICAgICAgIGdvb2QgdGhpbmdzIHdoZW4gaXQgaG9p
c3RzIHRoZSB0YWdzLCBhbmQgdXN1YWxseSBjYXVzZXMgbm90aGluZyBidXQgcHJvYmxlbXMgd2hl
biBpdCBob2lzdHMKKyAgICAgICAgYW55dGhpbmcgZWxzZS4gVGhpcyBpcyBiZWNhdXNlIHRoZXJl
IGlzIG5vIHdheSBhIGxvdy1sZXZlbCBjb21waWxlciB0byByZWFsbHkgdW5kZXJzdGFuZCBob3cK
KyAgICAgICAgYSBjb25zdGFudCBtYXRlcmlhbGl6YXRpb24gaW1wYWN0cyBzb21lIG9wZXJhdGlv
bidzIGNvbnRyaWJ1dGlvbiB0byB0aGUgb3ZlcmFsbCBleGVjdXRpb24KKyAgICAgICAgdGltZSBv
ZiBhIHByb2NlZHVyZS4gQnV0LCBpbiB0aGUgRlRMIHdlIGtub3cgdGhhdCBjb25zdGFudCBtYXRl
cmlhbGl6YXRpb25zIGZvciB0eXBlIGNoZWNrcworICAgICAgICBhcmUgYSBidW1tZXIgYmVjYXVz
ZSB3ZSBhcmUgc3VwZXIgY29tZm9ydGFibGUgcGxhY2luZyB0eXBlIGNoZWNrcyBvbiB0aGUgaG90
dGVzdCBvZiBwYXRocy4gU28KKyAgICAgICAgdGhvc2UgYXJlIHRoZSBsYXN0IHBhdGhzIHdoZXJl
IGV4dHJhIGluc3RydWN0aW9ucyBzaG91bGQgYmUgYWRkZWQgYnkgdGhlIGNvbXBpbGVyLiBPbiB0
aGUKKyAgICAgICAgb3RoZXIgaGFuZCwgYWxsIG90aGVyIGxhcmdlIGNvbnN0YW50IHVzZXMgYXJl
IG9uIHJlbGF0aXZlbHkgY29sZCBwYXRocywgb3IgcGF0aHMgdGhhdCBhcmUKKyAgICAgICAgYWxy
ZWFkeSBleHBlbnNpdmUgZm9yIG90aGVyIHJlYXNvbnMuIEZvciBleGFtcGxlLCBnbG9iYWwgdmFy
aWFibGUgYWNjZXNzZXMgaGF2ZSB0bworICAgICAgICBtYXRlcmlhbGl6ZSBhIHBvaW50ZXIgdG8g
dGhlIGdsb2JhbC4gQnV0IHRoYXQncyBub3QgcmVhbGx5IGEgYmlnIGRlYWwsIHNpbmNlIGEgbG9h
ZCBmcm9tIGEKKyAgICAgICAgZ2xvYmFsIGludm9sdmVzIGZpcnN0IHRoZSBsb2FkIGl0c2VsZiBh
bmQgdGhlbiB0eXBlIGNoZWNrcyBvbiB0aGUgcmVzdWx0IC0gc28gcHJvYmFibHkgdGhlCisgICAg
ICAgIGNvbnN0YW50IG1hdGVyaWFsaXphdGlvbiBpcyBqdXN0IG5vdCBpbnRlcmVzdGluZy4gQSBz
dG9yZSB0byBhIGdsb2JhbCBvZnRlbiBpbnZvbHZlcyBhIHN0b3JlCisgICAgICAgIGJhcnJpZXIs
IHNvIHRoZSBjb25zdGFudCBtYXRlcmlhbGl6YXRpb24gaXMgcmVhbGx5IG5vdCBpbnRlcmVzdGlu
Zy4gVGhpcyBwYXRjaCBjb2RpZmllcyB0aGlzCisgICAgICAgIGhldXJpc3RpYyBpbiBhIHBhY3Qg
YmV0d2VlbiBBaXIsIEIzLCBhbmQgdGhlIEZUTDogRlRMIGRlbWFuZHMgdGhhdCBCMyBwaW4gdGhl
IHR3byB0YWdzIGluCisgICAgICAgIHJlZ2lzdGVycywgYW5kIEIzIHJlbGF5cyB0aGUgZGVtYW5k
IHRvIEFpci4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogYjMvQjNDRkcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpD
Rkc6OkNGRyk6CisgICAgICAgIChKU0M6OkIzOjpDRkc6OnJvb3QpOgorICAgICAgICAoSlNDOjpC
Mzo6Q0ZHOjpuZXdNYXApOgorICAgICAgICAoSlNDOjpCMzo6Q0ZHOjpzdWNjZXNzb3JzKToKKyAg
ICAgICAgKEpTQzo6QjM6OkNGRzo6cHJlZGVjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkNG
Rzo6aW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6Q0ZHOjpub2RlKToKKyAgICAgICAgKEpTQzo6
QjM6OkNGRzo6bnVtTm9kZXMpOgorICAgICAgICAoSlNDOjpCMzo6Q0ZHOjpkdW1wKToKKyAgICAg
ICAgKiBiMy9CM0RvbWluYXRvcnMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpEb21pbmF0
b3JzOjpEb21pbmF0b3JzKToKKyAgICAgICAgKiBiMy9CM0luZGV4TWFwLmg6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleE1hcDo6cmVzaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4TWFwOjpz
aXplKToKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4TWFwOjpvcGVyYXRvcltdKToKKyAgICAgICAg
KiBiMy9CM0xvd2VyTWFjcm9zLmNwcDoKKyAgICAgICAgKiBiMy9CM0xvd2VyVG9BaXIuY3BwOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0bXApOgorICAgICAgICAqIGIzL0Iz
TW92ZUNvbnN0YW50cy5jcHA6CisgICAgICAgICogYjMvQjNPcGNvZGUuaDoKKyAgICAgICAgKEpT
Qzo6QjM6OmNvbnN0UHRyT3Bjb2RlKToKKyAgICAgICAgKEpTQzo6QjM6OmlzQ29uc3RhbnQpOgor
ICAgICAgICAqIGIzL0IzUHJvY2VkdXJlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVy
ZTo6UHJvY2VkdXJlKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6cmVzZXRSZWFjaGFi
aWxpdHkpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjppbnZhbGlkYXRlQ0ZHKToKKyAg
ICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpQcm9j
ZWR1cmU6OmRlbGV0ZVZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6ZG9taW5h
dG9ycyk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmFkZEZhc3RDb25zdGFudCk6Cisg
ICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmlzRmFzdENvbnN0YW50KToKKyAgICAgICAgKEpT
Qzo6QjM6OlByb2NlZHVyZTo6YWRkRGF0YVNlY3Rpb24pOgorICAgICAgICAqIGIzL0IzUHJvY2Vk
dXJlLmg6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OnNpemUpOgorICAgICAgICAoSlND
OjpCMzo6UHJvY2VkdXJlOjpjZmcpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpzZXRM
YXN0UGhhc2VOYW1lKToKKyAgICAgICAgKiBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDoKKyAgICAg
ICAgKiBiMy9CM1ZhbHVlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmlzQ29u
c3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmlzSW50ZWdlcik6CisgICAgICAgICog
YjMvQjNWYWx1ZUtleS5oOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVLZXk6OmNhbk1hdGVyaWFs
aXplKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlS2V5Ojppc0NvbnN0YW50KToKKyAgICAgICAg
KiBiMy9haXIvQWlyQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmZpbmRO
ZXh0QmxvY2spOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjphZGRGYXN0VG1wKToKKyAg
ICAgICAgKiBiMy9haXIvQWlyQ29kZS5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpz
cGVjaWFscyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmlzRmFzdFRtcCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnNldExhc3RQaGFzZU5hbWUpOgorICAgICAgICAqIGIz
L2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHA6CisgICAgICAgICogZGZnL0RG
R0RvbWluYXRvcnMuaDoKKyAgICAgICAgKiBkZmcvREZHU1NBQ2FsY3VsYXRvci5jcHA6CisgICAg
ICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9MTFZNOjpsb3dlcik6CisKIDIwMTUtMTItMDcgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KIAogICAgICAgICBGVEwgbG93ZXJpbmcgc2hvdWxkIHRlbGwgQjMgdGhl
IHJpZ2h0IGJsb2NrIGZyZXF1ZW5jaWVzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMTkzNjYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMwNiw2ICsz
MDYsOCBAQAogCQkwRjMzOEUxRTFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhFMUExQkYy
ODZFQTAwMTNDODhGIC8qIEIzTG93ZXJNYWNyb3MuaCAqLzsgfTsKIAkJMEYzM0ZDRjcxQzEzNkUy
NTAwMzIzRjY3IC8qIEIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzNGQ0Y1MUMxMzZFMjUwMDMyM0Y2
NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5jcHAgKi87IH07CiAJCTBGMzNGQ0Y4MUMx
MzZFMjUwMDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzM0ZDRjYxQzEzNkUyNTAwMzIz
RjY3IC8qIEIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmggKi87IH07CisJCTBGMzNGQ0ZCMUMx
NjI1QkUwMDMyM0Y2NyAvKiBCM0NGRy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzM0ZDRjkxQzE2MjVCRTAwMzIzRjY3IC8qIEIzQ0ZHLmggKi87IH07
CisJCTBGMzNGQ0ZDMUMxNjI1QkUwMDMyM0Y2NyAvKiBCM0RvbWluYXRvcnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzNGQ0ZBMUMxNjI1QkUwMDMy
M0Y2NyAvKiBCM0RvbWluYXRvcnMuaCAqLzsgfTsKIAkJMEYzNEIxNDkxNkQ0MjAxMDAwMUNEQTVB
IC8qIERGR1VzZUtpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICovOyB9
OwogCQkwRjM0QjE0QTE2RDQyMDEzMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNEIxNDgxNkQ0MjAwRTAwMUNE
QTVBIC8qIERGR1VzZUtpbmQuaCAqLzsgfTsKIAkJMEYzNzMwOEMxQzBCRDI5MTAwMDUyQkZBIC8q
IEIzUGhpQ2hpbGRyZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzNzMwOEExQzBCRDI5MTAwMDUyQkZBIC8qIEIzUGhpQ2hpbGRyZW4uY3BwICov
OyB9OwpAQCAtMjQwNCw2ICsyNDA2LDggQEAKIAkJMEYzMzhFMUExQkYyODZFQTAwMTNDODhGIC8q
IEIzTG93ZXJNYWNyb3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNMb3dl
ck1hY3Jvcy5oOyBwYXRoID0gYjMvQjNMb3dlck1hY3Jvcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjMzRkNGNTFDMTM2RTI1MDAzMjNGNjcgLyogQjNTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMuY3BwOyBwYXRoID0gYjMvQjNTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMzRkNGNjFDMTM2RTI1
MDAzMjNGNjcgLyogQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaDsgcGF0aCA9IGIz
L0IzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMzNGQ0Y5MUMxNjI1QkUwMDMyM0Y2NyAvKiBCM0NGRy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM0NGRy5oOyBwYXRoID0gYjMvQjNDRkcuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYzM0ZDRkExQzE2MjVCRTAwMzIzRjY3IC8qIEIzRG9taW5hdG9y
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0RvbWluYXRvcnMuaDsgcGF0
aCA9IGIzL0IzRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM0
QjE0NzE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdVc2VLaW5kLmNwcDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5k
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNEIxNDgxNkQ0MjAwRTAwMUNE
QTVBIC8qIERGR1VzZUtpbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
VXNlS2luZC5oOyBwYXRoID0gZGZnL0RGR1VzZUtpbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYzNzMwOEExQzBCRDI5MTAwMDUyQkZBIC8qIEIzUGhpQ2hpbGRyZW4uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNQaGlDaGlsZHJlbi5jcHA7IHBh
dGggPSBiMy9CM1BoaUNoaWxkcmVuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTQ1NjcsNiArNDU3MSw3IEBACiAJCQkJMEZFQzg0QkExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmxv
Y2tXb3JrbGlzdC5oICovLAogCQkJCTBGMzM4REY3MUJFOTZBQTgwMDEzQzg4RiAvKiBCM0NDYWxs
VmFsdWUuY3BwICovLAogCQkJCTBGMzM4REY4MUJFOTZBQTgwMDEzQzg4RiAvKiBCM0NDYWxsVmFs
dWUuaCAqLywKKwkJCQkwRjMzRkNGOTFDMTYyNUJFMDAzMjNGNjcgLyogQjNDRkcuaCAqLywKIAkJ
CQkwRkVDODRCQjFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuY3BwICovLAogCQkJ
CTBGRUM4NEJDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5oICovLAogCQkJCTBG
RUM4NEJEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuY3BwICovLApAQCAtNDU5MCw2
ICs0NTk1LDcgQEAKIAkJCQkwRkVDODRDQTFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFs
dWUuaCAqLywKIAkJCQkwRjMzOEUwMTFCRjAyNzZDMDAxM0M4OEYgLyogQjNEYXRhU2VjdGlvbi5j
cHAgKi8sCiAJCQkJMEYzMzhFMDIxQkYwMjc2QzAwMTNDODhGIC8qIEIzRGF0YVNlY3Rpb24uaCAq
LywKKwkJCQkwRjMzRkNGQTFDMTYyNUJFMDAzMjNGNjcgLyogQjNEb21pbmF0b3JzLmggKi8sCiAJ
CQkJMEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIzRWZmZWN0cy5jcHAgKi8sCiAJCQkJMEZF
Qzg1QkUxQkUxNjdBMDAwODBGRjc0IC8qIEIzRWZmZWN0cy5oICovLAogCQkJCTBGRUM4NENCMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmNwcCAqLywKQEAgLTc1MTgsNiArNzUy
NCw3IEBACiAJCQkJOTkyOEZGM0MxOEFDNEFFQzAwQjhDRjEyIC8qIEpTUmVwbGF5SW5wdXRzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNSZXRhaW5Q
dHIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0ODc0QUU2MTVFQkRFNEEwMDJFMzU4NyAvKiBKU1Nj
b3BlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjMzRkNGQjFDMTYyNUJFMDAzMjNGNjcgLyogQjND
RkcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QzBDNEFDMTY4MTAzMDIwMDE3MDExRCAvKiBKU1Nj
cmlwdFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMTIyMDI3MUJFN0Y1OEMwMDM5
RTZGMiAvKiBKSVRBZGRHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTE5RDExMTU3
RjMzMkMwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmggaW4gSGVhZGVycyAq
LywKQEAgLTc3OTcsNiArNzgwNCw3IEBACiAJCQkJNzA1QjQxQUUxQTZFNTAxRTAwNzE2NzU3IC8q
IFN5bWJvbENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMyNzFCREEwOEVG
MDAzMzFCODQgLyogU3ltYm9sQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3
MDVCNDFCMDFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sT2JqZWN0LmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjMzRkNGQzFDMTYyNUJFMDAzMjNGNjcgLyogQjNEb21pbmF0b3JzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3MDVCNDFCMjFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMyODFCREEwOEVGMDAzMzFCODQgLyogU3ltYm9sUHJv
dG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NkIwRTE2RjVDRDAwQjM0NDYw
IC8qIFN5bWJvbFRhYmxlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NGRy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NGRy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0ZHLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ0ZHX2gKKyNkZWZpbmUgQjNDRkdfaAor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1
ZGUgIkIzSW5kZXhNYXAuaCIKKyNpbmNsdWRlICJCM0luZGV4U2V0LmgiCisjaW5jbHVkZSAiQjNQ
cm9jZWR1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENG
RyB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBCYXNpY0Jsb2NrKiBOb2RlOworICAgIHR5cGVkZWYg
SW5kZXhTZXQ8QmFzaWNCbG9jaz4gU2V0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5n
IE1hcCA9IEluZGV4TWFwPEJhc2ljQmxvY2ssIFQ+OworICAgIHR5cGVkZWYgVmVjdG9yPEJhc2lj
QmxvY2sqLCA0PiBMaXN0OworCisgICAgQ0ZHKFByb2NlZHVyZSYgcHJvYykKKyAgICAgICAgOiBt
X3Byb2MocHJvYykKKyAgICB7CisgICAgfQorCisgICAgTm9kZSByb290KCkgeyByZXR1cm4gbV9w
cm9jWzBdOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIE1hcDxUPiBuZXdNYXAo
KSB7IHJldHVybiBJbmRleE1hcDxCYXNpY0Jsb2NrLCBUPihtX3Byb2Muc2l6ZSgpKTsgfQorCisg
ICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JM
aXN0PiBzdWNjZXNzb3JzKE5vZGUgbm9kZSkgeyByZXR1cm4gbm9kZS0+c3VjY2Vzc29yQmxvY2tz
KCk7IH0KKyAgICBCYXNpY0Jsb2NrOjpQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycyhOb2Rl
IG5vZGUpIHsgcmV0dXJuIG5vZGUtPnByZWRlY2Vzc29ycygpOyB9CisKKyAgICB1bnNpZ25lZCBp
bmRleChOb2RlIG5vZGUpIGNvbnN0IHsgcmV0dXJuIG5vZGUtPmluZGV4KCk7IH0KKyAgICBOb2Rl
IG5vZGUodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY1tpbmRleF07IH0KKyAg
ICB1bnNpZ25lZCBudW1Ob2RlcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvYy5zaXplKCk7IH0KKwor
ICAgIFBvaW50ZXJEdW1wPEJhc2ljQmxvY2s+IGR1bXAoTm9kZSBub2RlKSBjb25zdCB7IHJldHVy
biBwb2ludGVyRHVtcChub2RlKTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CisgICAgeworICAgICAgICBtX3Byb2MuZHVtcChvdXQpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBQcm9jZWR1cmUmIG1fcHJvYzsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ0ZHX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRG9taW5hdG9ycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0RvbWluYXRvcnMuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0RvbWluYXRvcnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNEb21pbmF0b3JzX2gKKyNkZWZpbmUgQjNEb21pbmF0b3JzX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0NGRy5oIgorI2luY2x1ZGUgIkIzQ29t
bW9uLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlIDx3dGYvRG9taW5hdG9y
cy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBEb21pbmF0
b3JzIDogcHVibGljIFdURjo6RG9taW5hdG9yczxDRkc+IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShEb21pbmF0b3JzKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBEb21pbmF0b3JzKFByb2NlZHVyZSYgcHJvYykKKyAgICAgICAgOiBXVEY6OkRvbWluYXRv
cnM8Q0ZHPihwcm9jLmNmZygpLCBzaG91bGRWYWxpZGF0ZUlSKCkpCisgICAgeworICAgIH0KK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEIzRG9taW5hdG9yc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0luZGV4TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzSW5kZXhNYXAuaAkocmV2aXNpb24gMTkzNjYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzSW5kZXhNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksMTggQEAgcHVibGlj
OgogICAgICAgICBtX3ZlY3Rvci5maWxsKFZhbHVlKCksIHNpemUpOwogICAgIH0KIAorICAgIHNp
emVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3Iuc2l6ZSgpOyB9CisKKyAgICBWYWx1
ZSYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gbV92ZWN0
b3JbaW5kZXhdOworICAgIH0KKworICAgIGNvbnN0IFZhbHVlJiBvcGVyYXRvcltdKHNpemVfdCBp
bmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZlY3RvcltpbmRleF07CisgICAg
fQorICAgIAogICAgIFZhbHVlJiBvcGVyYXRvcltdKEtleSoga2V5KQogICAgIHsKICAgICAgICAg
cmV0dXJuIG1fdmVjdG9yW2tleS0+aW5kZXgoKV07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCShyZXZpc2lvbiAxOTM2NjIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDgg
KzU4LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHByb2Nlc3NDdXJyZW50QmxvY2soKTsKICAg
ICAgICAgfQogICAgICAgICBtX2NoYW5nZWQgfD0gbV9ibG9ja0luc2VydGlvblNldC5leGVjdXRl
KCk7Ci0gICAgICAgIGlmIChtX2NoYW5nZWQpCisgICAgICAgIGlmIChtX2NoYW5nZWQpIHsKICAg
ICAgICAgICAgIG1fcHJvYy5yZXNldFJlYWNoYWJpbGl0eSgpOworICAgICAgICAgICAgbV9wcm9j
LmludmFsaWRhdGVDRkcoKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gbV9jaGFuZ2VkOwog
ICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIu
Y3BwCShyZXZpc2lvbiAxOTM2NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
clRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAyLDggKzMwMiwxMSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgd2hpbGUgKHNob3VsZENvcHlQcm9wYWdhdGUodmFsdWUpKQogICAgICAgICAg
ICAgICAgIHZhbHVlID0gdmFsdWUtPmNoaWxkKDApOwogICAgICAgICAgICAgVG1wJiByZWFsVG1w
ID0gbV92YWx1ZVRvVG1wW3ZhbHVlXTsKLSAgICAgICAgICAgIGlmICghcmVhbFRtcCkKKyAgICAg
ICAgICAgIGlmICghcmVhbFRtcCkgewogICAgICAgICAgICAgICAgIHJlYWxUbXAgPSBtX2NvZGUu
bmV3VG1wKEFyZzo6dHlwZUZvckIzVHlwZSh2YWx1ZS0+dHlwZSgpKSk7CisgICAgICAgICAgICAg
ICAgaWYgKG1fcHJvY2VkdXJlLmlzRmFzdENvbnN0YW50KHZhbHVlLT5rZXkoKSkpCisgICAgICAg
ICAgICAgICAgICAgIG1fY29kZS5hZGRGYXN0VG1wKHJlYWxUbXApOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgdG1wID0gcmVhbFRtcDsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdG1w
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50cy5jcHAJ
KHJldmlzaW9uIDE5MzY2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01vdmVDb25z
dGFudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMiArMjksMTUgQEAKICNpZiBFTkFCTEUo
QjNfSklUKQogCiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkIz
RG9taW5hdG9ycy5oIgogI2luY2x1ZGUgIkIzSW5zZXJ0aW9uU2V0SW5saW5lcy5oIgogI2luY2x1
ZGUgIkIzTWVtb3J5VmFsdWUuaCIKICNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKICNpbmNsdWRl
ICJCM1Byb2NlZHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkIzVmFsdWVLZXlJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewog
CkBAIC01MCwyNyArNTMsMTM3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcnVuKCkKICAgICB7Ci0g
ICAgICAgIC8vIEV2ZW50dWFsbHkgdGhpcyBwaGFzZSB3aWxsIGRvIHNtYXJ0IHRoaW5ncy4gRm9y
IG5vdywgaXQgdXNlcyBhIHN1cGVyIHNpbXBsZSBoZXVyaXN0aWM6IGl0Ci0gICAgICAgIC8vIHBs
YWNlcyBjb25zdGFudHMgaW4gdGhlIGJsb2NrIHRoYXQgdXNlcyB0aGVtLCBhbmQgbWFrZXMgc3Vy
ZSB0aGF0IGVhY2ggYmxvY2sgaGFzIG9ubHkgb25lCi0gICAgICAgIC8vIG1hdGVyaWFsaXphdGlv
biBmb3IgZWFjaCBjb25zdGFudC4gTm90ZSB0aGF0IHRoaXMgbW9zdGx5IG9ubHkgbWF0dGVycyBm
b3IgbGFyZ2UgY29uc3RhbnRzLCBzaW5jZQotICAgICAgICAvLyBzbWFsbCBjb25zdGFudHMgZ2V0
IGZ1c2VkIGludG8gdGhlIGluc3RydWN0aW9ucyB0aGF0IHVzZSB0aGVtLiBCdXQgaXQgbWlnaHQg
bWF0dGVyIGZvciBzbWFsbAotICAgICAgICAvLyBjb25zdGFudHMgaWYgdGhleSBhcmUgdXNlZCBp
biBpbnN0cnVjdGlvbnMgdGhhdCBkb24ndCBkbyBpbW1lZGlhdGVzLCBsaWtlIGNvbmRpdGlvbmFs
IG1vdmVzLgotCi0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgYSBiZXR0ZXIgc3RvcnkgZm9y
IGNvbnN0YW50cy4gQXQgYSBtaW5pbXVtIHRoaXMgc2hvdWxkIGFsbG93IHRoZSBCMwotICAgICAg
ICAvLyBjbGllbnQgdG8gc3BlY2lmeSBpbXBvcnRhbnQgY29uc3RhbnRzIHRoYXQgYWx3YXlzIGdl
dCBob2lzdGVkLiBBbHNvLCB0aGUgdGFibGUgdXNlZCB0bwotICAgICAgICAvLyBob2xkIGRvdWJs
ZSBjb25zdGFudHMgc2hvdWxkIGhhdmUgYSBwb2ludGVyIHRvIGl0IHRoYXQgaXMgaG9pc3RlZC4g
SWYgd2Ugd2FudGVkIHRvIGJlIG1vcmUKLSAgICAgICAgLy8gYWdncmVzc2l2ZSwgd2UgY291bGQg
bWFrZSBjb25zdGFudCBtYXRlcmlhbGl6YXRpb24gYmUgYSBmZWF0dXJlIG9mIEFpcjogd2UgY291
bGQgbGFiZWwKLSAgICAgICAgLy8gc29tZSBUbXBzIGFzIGJlaW5nIHVubWF0ZXJpYWxpemVkIGNv
bnN0YW50cyBhbmQgaGF2ZSBhIGxhdGUgQWlyIHBoYXNlIC0gcG9zdCByZWdpc3RlcgotICAgICAg
ICAvLyBhbGxvY2F0aW9uIC0gdGhhdCBjcmVhdGVzIG1hdGVyaWFsaXphdGlvbnMgb2YgdGhvc2Ug
Y29uc3RhbnQgVG1wcyBieSBzY2F2ZW5naW5nIGxlZnRvdmVyCi0gICAgICAgIC8vIHJlZ2lzdGVy
cy4KKyAgICAgICAgLy8gVGhpcyBwaGFzZSB1c2VzIHN1cGVyIHNpbXBsZSBoZXVyaXN0aWNzIHRv
IGVuc3VyZSB0aGF0IGNvbnN0YW50cyBhcmUgaW4gcHJvZml0YWJsZSBwbGFjZXMKKyAgICAgICAg
Ly8gYW5kIGFsc28gbG93ZXJzIGNvbnN0YW50IG1hdGVyaWFsaXphdGlvbiBjb2RlLiBDb25zdGFu
dHMgbWFya2VkICJmYXN0IiBieSB0aGUgY2xpZW50IGFyZQorICAgICAgICAvLyBob2lzdGVkIHRv
IHRoZSBsb3dlc3QgY29tbW9uIGRvbWluYXRvci4gQSB0YWJsZSBpcyBjcmVhdGVkIGZvciBjb25z
dGFudHMgdGhhdCBuZWVkIHRvIGJlCisgICAgICAgIC8vIGxvYWRlZCB0byBiZSBtYXRlcmlhbGl6
ZWQsIGFuZCBhbGwgb2YgdGhlaXIgVmFsdWVzIGFyZSB0dXJuZWQgaW50byBsb2FkcyBmcm9tIHRo
YXQgdGFibGUuCisgICAgICAgIC8vIE5vbi1mYXN0IGNvbnN0YW50cyBnZXQgbWF0ZXJpYWxpemVk
IGluIHRoZSBibG9jayB0aGF0IHVzZXMgdGhlbS4gQ29uc3RhbnRzIHRoYXQgYXJlCisgICAgICAg
IC8vIG1hdGVyaWFsaXplZCBieSBsb2FkaW5nIGdldCBzcGVjaWFsIHRyZWF0bWVudCB3aGVuIHRo
ZXkgZ2V0IHVzZWQgaW4gc29tZSBraW5kIG9mIEFueSBpbiBhCisgICAgICAgIC8vIFN0YWNrbWFw
VmFsdWUuIEluIHRoYXQgY2FzZSwgdGhlIENvbnN0YW50cyBhcmUgc3VuayB0byB0aGUgcG9pbnQg
b2YgdXNlLCBzaW5jZSB0aGF0IGFsbG93cworICAgICAgICAvLyB0aGUgaW5zdHJ1Y3Rpb24gc2Vs
ZWN0b3IgdG8gc2luayB0aGUgY29uc3RhbnRzIGludG8gYW4gQXJnOjppbW02NC4KKworICAgICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IGEgYmV0dGVyIHN0b3J5IGZvciBjb25zdGFudHMuIEZvciBl
eGFtcGxlLCB0aGUgdGFibGUgdXNlZCB0byBob2xkIGRvdWJsZQorICAgICAgICAvLyBjb25zdGFu
dHMgc2hvdWxkIGhhdmUgYSBwb2ludGVyIHRvIGl0IHRoYXQgaXMgaG9pc3RlZC4gSWYgd2Ugd2Fu
dGVkIHRvIGJlIG1vcmUgYWdncmVzc2l2ZSwKKyAgICAgICAgLy8gd2UgY291bGQgbWFrZSBjb25z
dGFudCBtYXRlcmlhbGl6YXRpb24gYmUgYSBmZWF0dXJlIG9mIEFpcjogd2UgY291bGQgbGFiZWwg
c29tZSBUbXBzIGFzCisgICAgICAgIC8vIGJlaW5nIHVubWF0ZXJpYWxpemVkIGNvbnN0YW50cyBh
bmQgaGF2ZSBhIGxhdGUgQWlyIHBoYXNlIC0gcG9zdCByZWdpc3RlciBhbGxvY2F0aW9uIC0gdGhh
dAorICAgICAgICAvLyBjcmVhdGVzIG1hdGVyaWFsaXphdGlvbnMgb2YgdGhvc2UgY29uc3RhbnQg
VG1wcyBieSBzY2F2ZW5naW5nIGxlZnRvdmVyIHJlZ2lzdGVycy4KIAorICAgICAgICBob2lzdEZh
c3RDb25zdGFudHMoKTsKKyAgICAgICAgc2lua1Nsb3dDb25zdGFudHMoKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgdm9pZCBob2lzdEZhc3RDb25zdGFudHMoKQorICAgIHsKKyAgICAgICAgRG9t
aW5hdG9ycyYgZG9taW5hdG9ycyA9IG1fcHJvYy5kb21pbmF0b3JzKCk7CisgICAgICAgIEhhc2hN
YXA8VmFsdWVLZXksIFZhbHVlKj4gdmFsdWVGb3JDb25zdGFudDsKKyAgICAgICAgSW5kZXhNYXA8
QmFzaWNCbG9jaywgVmVjdG9yPFZhbHVlKj4+IG1hdGVyaWFsaXphdGlvbnMobV9wcm9jLnNpemUo
KSk7CisKKyAgICAgICAgLy8gV2UgZGV0ZXJtaW5lIHdoZXJlIHRoaW5ncyBnZXQgbWF0ZXJpYWxp
emVkIGJhc2VkIG9uIHdoZXJlIHRoZXkgYXJlIHVzZWQuCisgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX3Byb2MpIHsKKyAgICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJs
b2NrKSB7CisgICAgICAgICAgICAgICAgZm9yIChWYWx1ZSomIGNoaWxkIDogdmFsdWUtPmNoaWxk
cmVuKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWVLZXkga2V5ID0gY2hpbGQtPmtleSgp
OworICAgICAgICAgICAgICAgICAgICBpZiAoIW1fcHJvYy5pc0Zhc3RDb25zdGFudChrZXkpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAgICAg
YXV0byByZXN1bHQgPSB2YWx1ZUZvckNvbnN0YW50LmFkZChrZXksIGNoaWxkKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBBc3N1bWUgdGhhdCB0aGlzIGJsb2NrIGlzIHdoZXJlIHdlIHdhbnQgdG8gbWF0ZXJp
YWxpemUgdGhlIHZhbHVlLgorICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQtPm93bmVyID0g
YmxvY2s7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIE1ha2UgJ3ZhbHVlJyB1c2UgdGhlIGNh
bm9uaWNhbCBjb25zdGFudCByYXRoZXIgdGhhbiB0aGUgb25lIGl0IHdhcyB1c2luZy4KKyAgICAg
ICAgICAgICAgICAgICAgY2hpbGQgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworCisgICAgICAg
ICAgICAgICAgICAgIC8vIERldGVybWluZSB0aGUgbGVhc3QgY29tbW9uIGRvbWluYXRvci4gVGhh
dCdzIHRoZSBsb3dlc3QgcGxhY2UgaW4gdGhlIENGRyB3aGVyZQorICAgICAgICAgICAgICAgICAg
ICAvLyB3ZSBjb3VsZCBtYXRlcmlhbGl6ZSB0aGUgY29uc3RhbnQgd2hpbGUgc3RpbGwgaGF2aW5n
IG9ubHkgb25lIG1hdGVyaWFsaXphdGlvbgorICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGUg
cmVzdWx0aW5nIGNvZGUuCisgICAgICAgICAgICAgICAgICAgIHdoaWxlICghZG9taW5hdG9ycy5k
b21pbmF0ZXMoY2hpbGQtPm93bmVyLCBibG9jaykpCisgICAgICAgICAgICAgICAgICAgICAgICBj
aGlsZC0+b3duZXIgPSBkb21pbmF0b3JzLmlkb20oY2hpbGQtPm93bmVyKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBNYWtlIHN1cmUg
dGhhdCBlYWNoIGJhc2ljIGJsb2NrIGtub3dzIHdoYXQgdG8gbWF0ZXJpYWxpemUuIFRoaXMgYWxz
byByZWZpbmVzIHRoZQorICAgICAgICAvLyBtYXRlcmlhbGl6YXRpb24gYmxvY2sgYmFzZWQgb24g
ZXhlY3V0aW9uIGZyZXF1ZW5jeS4gSXQgZmluZHMgdGhlIG1pbmltdW0gYmxvY2sgZnJlcXVlbmN5
CisgICAgICAgIC8vIG9mIGFsbCBvZiBpdHMgZG9taW5hdG9ycywgYW5kIHNlbGVjdHMgdGhlIGNs
b3Nlc3QgYmxvY2sgYW1vbmdzdCB0aG9zZSB0aGF0IGFyZSB0aWVkIGZvcgorICAgICAgICAvLyBs
b3dlc3QgZnJlcXVlbmN5LgorICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogdmFsdWVGb3JDb25z
dGFudCkgeworICAgICAgICAgICAgVmFsdWUqIHZhbHVlID0gZW50cnkudmFsdWU7CisgICAgICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrID0gdmFsdWUtPm93bmVyOyBibG9jazsgYmxvY2sg
PSBkb21pbmF0b3JzLmlkb20oYmxvY2spKSB7CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5m
cmVxdWVuY3koKSA8IHZhbHVlLT5vd25lci0+ZnJlcXVlbmN5KCkpCisgICAgICAgICAgICAgICAg
ICAgIHZhbHVlLT5vd25lciA9IGJsb2NrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWF0
ZXJpYWxpemF0aW9uc1tlbnRyeS52YWx1ZS0+b3duZXJdLmFwcGVuZChlbnRyeS52YWx1ZSk7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBHZXQgcmlkIG9mIFZhbHVlJ3MgdGhhdCBhcmUgZmFzdCBj
b25zdGFudHMgYnV0IGFyZW4ndCBjYW5vbmljYWwuIEFsc28gcmVtb3ZlIHRoZSBjYW5vbmljYWwK
KyAgICAgICAgLy8gb25lcyBmcm9tIHRoZSBDRkcsIHNpbmNlIHdlJ3JlIGdvaW5nIHRvIHJlaW5z
ZXJ0IHRoZW0gZWxzZXdoZXJlLgorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9w
cm9jKSB7CisgICAgICAgICAgICBmb3IgKFZhbHVlKiYgdmFsdWUgOiAqYmxvY2spIHsKKyAgICAg
ICAgICAgICAgICBWYWx1ZUtleSBrZXkgPSB2YWx1ZS0+a2V5KCk7CisgICAgICAgICAgICAgICAg
aWYgKCFtX3Byb2MuaXNGYXN0Q29uc3RhbnQoa2V5KSkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgICAgICAgICBpZiAodmFsdWVGb3JDb25zdGFudC5nZXQoa2V5KSA9
PSB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBtX3Byb2MuYWRkPFZhbHVlPihO
b3AsIHZhbHVlLT5vcmlnaW4oKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhOb3AoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIC8vIE5vdyBtYWtlIHN1cmUgdGhhdCB3ZSBtb3ZlIGNvbnN0YW50cyB0byB3
aGVyZSB0aGV5IGFyZSBzdXBwb3NlZCB0byBnby4gQWdhaW4sIHdlIGRvIHRoaXMKKyAgICAgICAg
Ly8gYmFzZWQgb24gdXNlcy4KKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJv
YykgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2YWx1ZUluZGV4ID0gMDsgdmFsdWVJbmRl
eCA8IGJsb2NrLT5zaXplKCk7ICsrdmFsdWVJbmRleCkgeworICAgICAgICAgICAgICAgIFZhbHVl
KiB2YWx1ZSA9IGJsb2NrLT5hdCh2YWx1ZUluZGV4KTsKKyAgICAgICAgICAgICAgICBmb3IgKFZh
bHVlKiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKSB7CisgICAgICAgICAgICAgICAgICAgIFZh
bHVlS2V5IGtleSA9IGNoaWxkLT5rZXkoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3By
b2MuaXNGYXN0Q29uc3RhbnQoa2V5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGVuY291bnRlciBhIGZhc3QgY29uc3Rh
bnQsIHRoZW4gaXQgbXVzdCBiZSBjYW5vbmljYWwsIHNpbmNlIHdlIGFscmVhZHkKKyAgICAgICAg
ICAgICAgICAgICAgLy8gZ290IHJpZCBvZiB0aGUgbm9uLWNhbm9uaWNhbCBvbmVzLgorICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQodmFsdWVGb3JDb25zdGFudC5nZXQoa2V5KSA9PSBjaGlsZCk7
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5vd25lciAhPSBibG9jaykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBjb25zdGFudCBpc24ndCBvdXIgcHJvYmxlbS4g
SXQncyBnb2luZyB0byBiZSBtYXRlcmlhbGl6ZWQgaW4gYW5vdGhlcgorICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gYmxvY2suCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgLy8gV2UncmUgc3VwcG9zZWQgdG8gbWF0ZXJpYWxpemUgdGhpcyBjb25zdGFudCBpbiB0
aGlzIGJsb2NrLCBhbmQgd2UgaGF2ZW4ndAorICAgICAgICAgICAgICAgICAgICAvLyBkb25lIGl0
IHlldC4KKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUodmFs
dWVJbmRleCwgY2hpbGQpOworICAgICAgICAgICAgICAgICAgICBjaGlsZC0+b3duZXIgPSBudWxs
cHRyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8g
V2UgbWF5IGhhdmUgc29tZSBjb25zdGFudHMgdGhhdCBuZWVkIHRvIGJlIG1hdGVyaWFsaXplZCBy
aWdodCBhdCB0aGUgZW5kIG9mIHRoaXMKKyAgICAgICAgICAgIC8vIGJsb2NrLgorICAgICAgICAg
ICAgZm9yIChWYWx1ZSogdmFsdWUgOiBtYXRlcmlhbGl6YXRpb25zW2Jsb2NrXSkgeworICAgICAg
ICAgICAgICAgIGlmICghdmFsdWUtPm93bmVyKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEl0
J3MgYWxyZWFkeSBtYXRlcmlhbGl6ZWQgaW4gdGhpcyBibG9jay4KKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0VmFsdWUoYmxvY2stPnNpemUoKSAtIDEsIHZhbHVlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIHZvaWQgc2lua1Nsb3dDb25zdGFudHMoKQorICAgIHsKICAg
ICAgICAgLy8gRmlyc3Qgd2UgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbnN0YW50cyBnbyBp
bnRvIHRoZSBkYXRhIHNlY3Rpb24uIFRoZXNlIGFyZSBub24temVybwogICAgICAgICAvLyBkb3Vi
bGUgY29uc3RhbnRzLgogICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IG1fcHJvYy52YWx1ZXMo
KSkgewotICAgICAgICAgICAgaWYgKCFuZWVkc01vdGlvbih2YWx1ZSkpCisgICAgICAgICAgICBW
YWx1ZUtleSBrZXkgPSB2YWx1ZS0+a2V5KCk7CisgICAgICAgICAgICBpZiAoIW5lZWRzTW90aW9u
KGtleSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBtX3RvUmVtb3Zl
LmFwcGVuZCh2YWx1ZSk7Ci0gICAgICAgICAgICBWYWx1ZUtleSBrZXkgPSB2YWx1ZS0+a2V5KCk7
CiAgICAgICAgICAgICBpZiAoZ29lc0luVGFibGUoa2V5KSkKICAgICAgICAgICAgICAgICBtX2Nv
bnN0VGFibGUuYWRkKGtleSwgbV9jb25zdFRhYmxlLnNpemUoKSk7CiAgICAgICAgIH0KQEAgLTg3
LDEwICsyMDAsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFN0YWNrbWFwVmFsdWUqIHN0
YWNrbWFwID0gdmFsdWUtPmFzPFN0YWNrbWFwVmFsdWU+KCk7CiAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBjaGlsZEluZGV4ID0gMDsgY2hpbGRJbmRleCA8IHZhbHVlLT5udW1DaGlsZHJl
bigpOyArK2NoaWxkSW5kZXgpIHsKICAgICAgICAgICAgICAgICAgICAgVmFsdWUqJiBjaGlsZCA9
IHZhbHVlLT5jaGlsZChjaGlsZEluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFuZWVk
c01vdGlvbihjaGlsZCkpCisgICAgICAgICAgICAgICAgICAgIFZhbHVlS2V5IGtleSA9IGNoaWxk
LT5rZXkoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFuZWVkc01vdGlvbihrZXkpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgICAgICAgICAgVmFs
dWVLZXkga2V5ID0gY2hpbGQtPmtleSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2tt
YXAKICAgICAgICAgICAgICAgICAgICAgICAgICYmIGdvZXNJblRhYmxlKGtleSkKICAgICAgICAg
ICAgICAgICAgICAgICAgICYmIHN0YWNrbWFwLT5jb25zdHJhaW5lZENoaWxkKGNoaWxkSW5kZXgp
LnJlcCgpLmlzQW55KCkpIHsKQEAgLTExNSw4ICsyMjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGZv
ciAoVmFsdWUqIHRvUmVtb3ZlIDogbV90b1JlbW92ZSkKICAgICAgICAgICAgIHRvUmVtb3ZlLT5y
ZXBsYWNlV2l0aE5vcCgpOwogICAgIH0KLQotcHJpdmF0ZToKKyAgICAKICAgICBWYWx1ZSogbWF0
ZXJpYWxpemUodW5zaWduZWQgdmFsdWVJbmRleCwgY29uc3QgVmFsdWVLZXkmIGtleSwgY29uc3Qg
T3JpZ2luJiBvcmlnaW4pCiAgICAgewogICAgICAgICBpZiAoVmFsdWUqIHJlc3VsdCA9IG1fY29u
c3RhbnRzLmdldChrZXkpKQpAQCAtMTQ3LDkgKzI1OSw5IEBAIHByaXZhdGU6CiAgICAgICAgIHJl
dHVybiBrZXkub3Bjb2RlKCkgPT0gQ29uc3REb3VibGUgJiYga2V5ICE9IGRvdWJsZVplcm8oKTsK
ICAgICB9CiAKLSAgICBib29sIG5lZWRzTW90aW9uKGNvbnN0IFZhbHVlKiB2YWx1ZSkKKyAgICBi
b29sIG5lZWRzTW90aW9uKGNvbnN0IFZhbHVlS2V5JiBrZXkpCiAgICAgewotICAgICAgICByZXR1
cm4gdmFsdWUtPmlzQ29uc3RhbnQoKTsKKyAgICAgICAgcmV0dXJuIGtleS5pc0NvbnN0YW50KCkg
JiYgIW1fcHJvYy5pc0Zhc3RDb25zdGFudChrZXkpOwogICAgIH0KIAogICAgIHN0YXRpYyBWYWx1
ZUtleSBkb3VibGVaZXJvKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShy
ZXZpc2lvbiAxOTM2NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjMxLDYgKzIzMSwxOCBAQCBpbmxpbmUgT3Bjb2RlIGNvbnN0UHRy
T3Bjb2RlKCkKICAgICByZXR1cm4gQ29uc3QzMjsKIH0KIAoraW5saW5lIGJvb2wgaXNDb25zdGFu
dChPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBDb25z
dDMyOgorICAgIGNhc2UgQ29uc3Q2NDoKKyAgICBjYXNlIENvbnN0RG91YmxlOgorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
fQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDE5MzY2MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDE0ICszMiwxNyBAQAogI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIK
ICNpbmNsdWRlICJCM0Jhc2ljQmxvY2tVdGlscy5oIgogI2luY2x1ZGUgIkIzQmxvY2tXb3JrbGlz
dC5oIgorI2luY2x1ZGUgIkIzQ0ZHLmgiCiAjaW5jbHVkZSAiQjNEYXRhU2VjdGlvbi5oIgorI2lu
Y2x1ZGUgIkIzRG9taW5hdG9ycy5oIgogI2luY2x1ZGUgIkIzT3BhcXVlQnlwcm9kdWN0cy5oIgog
I2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgewogCiBQcm9jZWR1cmU6OlByb2NlZHVyZSgpCi0gICAgOiBtX2xhc3RQaGFzZU5hbWUoImlu
aXRpYWwiKQorICAgIDogbV9jZmcobmV3IENGRygqdGhpcykpCisgICAgLCBtX2xhc3RQaGFzZU5h
bWUoImluaXRpYWwiKQogICAgICwgbV9ieXByb2R1Y3RzKHN0ZDo6bWFrZV91bmlxdWU8T3BhcXVl
Qnlwcm9kdWN0cz4oKSkKICAgICAsIG1fY29kZShuZXcgQWlyOjpDb2RlKCp0aGlzKSkKIHsKQEAg
LTExMyw2ICsxMTYsMTEgQEAgdm9pZCBQcm9jZWR1cmU6OnJlc2V0UmVhY2hhYmlsaXR5KCkKICAg
ICAgICAgfSk7CiB9CiAKK3ZvaWQgUHJvY2VkdXJlOjppbnZhbGlkYXRlQ0ZHKCkKK3sKKyAgICBt
X2RvbWluYXRvcnMgPSBudWxscHRyOworfQorCiB2b2lkIFByb2NlZHVyZTo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAogewogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAqdGhpcykK
QEAgLTEzOCw2ICsxNDYsMjYgQEAgdm9pZCBQcm9jZWR1cmU6OmRlbGV0ZVZhbHVlKFZhbHVlKiB2
YWx1ZQogICAgIG1fdmFsdWVzW3ZhbHVlLT5pbmRleCgpXSA9IG51bGxwdHI7CiB9CiAKK0RvbWlu
YXRvcnMmIFByb2NlZHVyZTo6ZG9taW5hdG9ycygpCit7CisgICAgaWYgKCFtX2RvbWluYXRvcnMp
CisgICAgICAgIG1fZG9taW5hdG9ycyA9IHN0ZDo6bWFrZV91bmlxdWU8RG9taW5hdG9ycz4oKnRo
aXMpOworICAgIHJldHVybiAqbV9kb21pbmF0b3JzOworfQorCit2b2lkIFByb2NlZHVyZTo6YWRk
RmFzdENvbnN0YW50KGNvbnN0IFZhbHVlS2V5JiBjb25zdGFudCkKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjb25zdGFudC5pc0NvbnN0YW50KCkpOworICAgIG1fZmFzdENvbnN0YW50cy5hZGQoY29u
c3RhbnQpOworfQorCitib29sIFByb2NlZHVyZTo6aXNGYXN0Q29uc3RhbnQoY29uc3QgVmFsdWVL
ZXkmIGNvbnN0YW50KQoreworICAgIGlmICghY29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gbV9mYXN0Q29uc3RhbnRzLmNvbnRhaW5zKGNvbnN0YW50KTsKK30KKwog
dm9pZCogUHJvY2VkdXJlOjphZGREYXRhU2VjdGlvbihzaXplX3Qgc2l6ZSkKIHsKICAgICBpZiAo
IXNpemUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNp
b24gMTkzNjYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDEwICszMSwxMiBAQAogI2luY2x1ZGUgIkIzT3BhcXVlQnlwcm9k
dWN0cy5oIgogI2luY2x1ZGUgIkIzT3JpZ2luLmgiCiAjaW5jbHVkZSAiQjNUeXBlLmgiCisjaW5j
bHVkZSAiQjNWYWx1ZUtleS5oIgogI2luY2x1ZGUgIlB1cmVOYU4uaCIKICNpbmNsdWRlICJSZWdp
c3RlckF0T2Zmc2V0TGlzdC5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KICNpbmNsdWRlIDx3dGYv
RmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3Rm
L1RyaVN0YXRlLmg+CkBAIC00NCw2ICs0Niw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgewogCiBjbGFzcyBCYXNpY0Jsb2NrOwogY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQ7CitjbGFz
cyBDRkc7CitjbGFzcyBEb21pbmF0b3JzOwogY2xhc3MgVmFsdWU7CiAKIG5hbWVzcGFjZSBBaXIg
eyBjbGFzcyBDb2RlOyB9CkBAIC03MCw2ICs3NCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNl
dFZhbHVlT3duZXJzKCk7CiAgICAgdm9pZCByZXNldFJlYWNoYWJpbGl0eSgpOwogCisgICAgLy8g
VGhpcyBkZXN0cm95cyBDRkcgYW5hbHlzZXMuIElmIHdlIGFzayBmb3IgdGhlbSBhZ2Fpbiwgd2Ug
d2lsbCByZWNvbXB1dGUgdGhlbS4gVXN1YWxseSB5b3UKKyAgICAvLyBzaG91bGQgY2FsbCB0aGlz
IGFueXRpbWUgeW91IGNhbGwgcmVzZXRSZWFjaGFiaWxpdHkoKS4KKyAgICB2b2lkIGludmFsaWRh
dGVDRkcoKTsKKwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OwogCiAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzLnNp
emUoKTsgfQpAQCAtMjAwLDYgKzIwOCwxMyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRlbGV0ZVZh
bHVlKFZhbHVlKik7CiAKKyAgICBDRkcmIGNmZygpIGNvbnN0IHsgcmV0dXJuICptX2NmZzsgfQor
CisgICAgRG9taW5hdG9ycyYgZG9taW5hdG9ycygpOworCisgICAgdm9pZCBhZGRGYXN0Q29uc3Rh
bnQoY29uc3QgVmFsdWVLZXkmKTsKKyAgICBib29sIGlzRmFzdENvbnN0YW50KGNvbnN0IFZhbHVl
S2V5Jik7CisKICAgICAvLyBUaGUgbmFtZSBoYXMgdG8gYmUgYSBzdHJpbmcgbGl0ZXJhbCwgc2lu
Y2Ugd2UgZG9uJ3QgZG8gYW55IG1lbW9yeSBtYW5hZ2VtZW50IGZvciB0aGUgc3RyaW5nLgogICAg
IHZvaWQgc2V0TGFzdFBoYXNlTmFtZShjb25zdCBjaGFyKiBuYW1lKQogICAgIHsKQEAgLTI0MCw2
ICsyNTUsOSBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9j
az4+IG1fYmxvY2tzOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWU+PiBtX3ZhbHVl
czsKICAgICBWZWN0b3I8c2l6ZV90PiBtX3ZhbHVlSW5kZXhGcmVlTGlzdDsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q0ZHPiBtX2NmZzsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RG9taW5hdG9ycz4gbV9k
b21pbmF0b3JzOworICAgIEhhc2hTZXQ8VmFsdWVLZXk+IG1fZmFzdENvbnN0YW50czsKICAgICBj
b25zdCBjaGFyKiBtX2xhc3RQaGFzZU5hbWU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE9wYXF1ZUJ5
cHJvZHVjdHM+IG1fYnlwcm9kdWN0czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWlyOjpDb2RlPiBt
X2NvZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5n
dGguY3BwCShyZXZpc2lvbiAxOTM2NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNS
ZWR1Y2VTdHJlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIGlmIChtX2NoYW5nZWRDRkcpIHsKICAgICAgICAgICAgICAgICBt
X3Byb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICAgICAgICAgICAgICBtX3Byb2MuaW52YWxp
ZGF0ZUNGRygpOwogICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCShy
ZXZpc2lvbiAxOTM2NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTQgKzU0LDcgQEAgY29uc3QgVCogVmFsdWU6OmFz
KCkgY29uc3QKIAogaW5saW5lIGJvb2wgVmFsdWU6OmlzQ29uc3RhbnQoKSBjb25zdAogewotICAg
IHN3aXRjaCAob3Bjb2RlKCkpIHsKLSAgICBjYXNlIENvbnN0MzI6Ci0gICAgY2FzZSBDb25zdDY0
OgotICAgIGNhc2UgQ29uc3REb3VibGU6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgcmV0dXJuIEIzOjppc0NvbnN0
YW50KG9wY29kZSgpKTsKIH0KIAogaW5saW5lIGJvb2wgVmFsdWU6OmlzSW50ZWdlcigpIGNvbnN0
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtleS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmgJKHJldmlzaW9uIDE5MzY2
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEyMCw2ICsxMjAsMTEgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCisgICAg
Ym9vbCBpc0NvbnN0YW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBCMzo6aXNDb25z
dGFudChvcGNvZGUoKSk7CisgICAgfQorCiAgICAgLy8gQXR0ZW1wdHMgdG8gbWF0ZXJpYWxpemUg
dGhlIFZhbHVlIGZvciB0aGlzIFZhbHVlS2V5LiBNYXkgcmV0dXJuIG51bGxwdHIgaWYgdGhlIHZh
bHVlIGNhbm5vdAogICAgIC8vIGJlIG1hdGVyaWFsaXplZC4gVGhpcyBoYXBwZW5zIGZvciBDaGVj
a0FkZCBhbmQgZnJpZW5kcy4gWW91IGNhbiB1c2UgY2FuTWF0ZXJpYWxpemUoKSB0byBjaGVjawog
ICAgIC8vIGlmIHlvdXIga2V5IGlzIG1hdGVyaWFsaXphYmxlLgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCShyZXZpc2lvbiAxOTM2NjIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQs
NiArMTM0LDExIEBAIEJhc2ljQmxvY2sqIENvZGU6OmZpbmROZXh0QmxvY2soQmFzaWNCbG8KICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIAordm9pZCBDb2RlOjphZGRGYXN0VG1wKFRtcCB0bXApCit7
CisgICAgbV9mYXN0VG1wcy5hZGQodG1wKTsKK30KKwogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQ29kZS5oCShyZXZpc2lvbiAxOTM2NjIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBA
QAogI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKICNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCiAj
aW5jbHVkZSAiQWlyU3RhY2tTbG90LmgiCisjaW5jbHVkZSAiQWlyVG1wLmgiCiAjaW5jbHVkZSAi
UmVnaXN0ZXJBdE9mZnNldExpc3QuaCIKICNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgogCkBA
IC0yODksNiArMjkwLDkgQEAgcHVibGljOgogICAgIH07CiAKICAgICBTcGVjaWFsc0NvbGxlY3Rp
b24gc3BlY2lhbHMoKSBjb25zdCB7IHJldHVybiBTcGVjaWFsc0NvbGxlY3Rpb24oKnRoaXMpOyB9
CisKKyAgICB2b2lkIGFkZEZhc3RUbXAoVG1wKTsKKyAgICBib29sIGlzRmFzdFRtcChUbXAgdG1w
KSBjb25zdCB7IHJldHVybiBtX2Zhc3RUbXBzLmNvbnRhaW5zKHRtcCk7IH0KICAgICAKICAgICAv
LyBUaGUgbmFtZSBoYXMgdG8gYmUgYSBzdHJpbmcgbGl0ZXJhbCwgc2luY2Ugd2UgZG9uJ3QgZG8g
YW55IG1lbW9yeSBtYW5hZ2VtZW50IGZvciB0aGUgc3RyaW5nLgogICAgIHZvaWQgc2V0TGFzdFBo
YXNlTmFtZShjb25zdCBjaGFyKiBuYW1lKQpAQCAtMzA3LDYgKzMxMSw3IEBAIHByaXZhdGU6CiAg
ICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTdGFja1Nsb3Q+PiBtX3N0YWNrU2xvdHM7CiAgICAg
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4gbV9ibG9ja3M7CiAgICAgVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPj4gbV9zcGVjaWFsczsKKyAgICBIYXNoU2V0PFRtcD4g
bV9mYXN0VG1wczsKICAgICBDQ2FsbFNwZWNpYWwqIG1fY0NhbGxTcGVjaWFsIHsgbnVsbHB0ciB9
OwogICAgIHVuc2lnbmVkIG1fbnVtR1BUbXBzIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fbnVtRlBU
bXBzIHsgMCB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRl
ZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAJKHJldmlzaW9uIDE5
MzY2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3Rl
ckNvYWxlc2NpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjMsNiArNTYzLDExIEBAIHByaXZh
dGU6CiAgICAgICAgIC8vIEhpZ2hlciBzY29yZSBtZWFucyBtb3JlIGRlc2lyYWJsZSB0byBzcGls
bC4gTG93ZXIgc2NvcmVzIG1heGltaXplIHRoZSBsaWtlbGlob29kIHRoYXQgYSB0bXAKICAgICAg
ICAgLy8gZ2V0cyBhIHJlZ2lzdGVyLgogICAgICAgICBhdXRvIHNjb3JlID0gWyZdIChUbXAgdG1w
KSAtPiBkb3VibGUgeworICAgICAgICAgICAgLy8gQWlyIGV4cG9zZXMgdGhlIGNvbmNlcHQgb2Yg
ImZhc3QgdG1wcyIsIGFuZCB3ZSBpbnRlcnByZXQgdGhhdCB0byBtZWFuIHRoYXQgdGhlIHRtcAor
ICAgICAgICAgICAgLy8gc2hvdWxkIGFsd2F5cyBiZSBpbiBhIHJlZ2lzdGVyLgorICAgICAgICAg
ICAgaWYgKG1fY29kZS5pc0Zhc3RUbXAodG1wKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gQWxsIGVsc2UgYmVpbmcgZXF1YWwsIHRoZSBz
Y29yZSBzaG91bGQgYmUgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgZGVncmVlLgogICAgICAgICAg
ICAgZG91YmxlIGRlZ3JlZSA9IHN0YXRpY19jYXN0PGRvdWJsZT4obV9kZWdyZWVzW0Fic29sdXRl
VG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KHRtcCldKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmgJKHJldmlzaW9uIDE5MzY2MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTQsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3Vs
YXRvci5jcHAJKHJldmlzaW9uIDE5MzY2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU1NBQ2FsY3VsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDEyICs5NSwxMiBAQCBT
U0FDYWxjdWxhdG9yOjpEZWYqIFNTQUNhbGN1bGF0b3I6Om5ld0RlCiAKIFNTQUNhbGN1bGF0b3I6
OkRlZiogU1NBQ2FsY3VsYXRvcjo6bm9uTG9jYWxSZWFjaGluZ0RlZihCYXNpY0Jsb2NrKiBibG9j
aywgVmFyaWFibGUqIHZhcmlhYmxlKQogewotICAgIHJldHVybiByZWFjaGluZ0RlZkF0VGFpbCht
X2dyYXBoLm1fZG9taW5hdG9ycy0+aW1tZWRpYXRlRG9taW5hdG9yT2YoYmxvY2spLCB2YXJpYWJs
ZSk7CisgICAgcmV0dXJuIHJlYWNoaW5nRGVmQXRUYWlsKG1fZ3JhcGgubV9kb21pbmF0b3JzLT5p
ZG9tKGJsb2NrKSwgdmFyaWFibGUpOwogfQogCiBTU0FDYWxjdWxhdG9yOjpEZWYqIFNTQUNhbGN1
bGF0b3I6OnJlYWNoaW5nRGVmQXRUYWlsKEJhc2ljQmxvY2sqIGJsb2NrLCBWYXJpYWJsZSogdmFy
aWFibGUpCiB7Ci0gICAgZm9yICg7IGJsb2NrOyBibG9jayA9IG1fZ3JhcGgubV9kb21pbmF0b3Jz
LT5pbW1lZGlhdGVEb21pbmF0b3JPZihibG9jaykpIHsKKyAgICBmb3IgKDsgYmxvY2s7IGJsb2Nr
ID0gbV9ncmFwaC5tX2RvbWluYXRvcnMtPmlkb20oYmxvY2spKSB7CiAgICAgICAgIGlmIChEZWYq
IGRlZiA9IG1fZGF0YVtibG9ja10ubV9kZWZzLmdldCh2YXJpYWJsZSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZGVmOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxOTM2NjIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAz
LDYgKzMwMywxMyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAgICAgbV90YWdUeXBlTnVtYmVyID0g
bV9vdXQuY29uc3RJbnQ2NChUYWdUeXBlTnVtYmVyKTsKICAgICAgICAgbV90YWdNYXNrID0gbV9v
dXQuY29uc3RJbnQ2NChUYWdNYXNrKTsKKworI2lmIEZUTF9VU0VTX0IzCisgICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IEIzIGtub3dzIHRoYXQgd2UgcmVhbGx5IGNhcmUgYWJvdXQgdGhlIG1hc2sg
cmVnaXN0ZXJzLiBUaGlzIGZvcmNlcyB0aGUKKyAgICAgICAgLy8gY29uc3RhbnRzIHRvIGJlIG1h
dGVyaWFsaXplZCBpbiByZWdpc3RlcnMuCisgICAgICAgIG1fcHJvYy5hZGRGYXN0Q29uc3RhbnQo
bV90YWdUeXBlTnVtYmVyLT5rZXkoKSk7CisgICAgICAgIG1fcHJvYy5hZGRGYXN0Q29uc3RhbnQo
bV90YWdNYXNrLT5rZXkoKSk7CisjZW5kaWYgLy8gRlRMX1VTRVNfQjMKICAgICAgICAgCiAgICAg
ICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmNvbnN0SW50UHRyKGNvZGVCbG9jaygpKSwgYWRkcmVz
c0ZvcihKU1N0YWNrOjpDb2RlQmxvY2spKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvV1RGL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTkz
NjYyKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
NyBAQAorMjAxNS0xMi0wNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAg
ICAgIEZUTCBCMyBzaG91bGQgYmUgYWJsZSB0byBmbGFnIHRoZSB0YWcgY29uc3RhbnRzIGFzIGJl
aW5nIHN1cGVyIGltcG9ydGFudCBzbyB0aGF0IEIzIGNhbiBob2lzdCB0aGVtIGFuZCBBaXIgY2Fu
IGZvcmNlIHRoZW0gaW50byByZWdpc3RlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MTk1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlbW92ZSBzb21lIHJlbWFpbmluZyBERkctc3BlY2lmaWMgc25p
cHBldHMgZnJvbSBEb21pbmF0b3JzLiBUaGlzIHVzZWQgdG8gYmUgYSBub24tdGVtcGxhdGUKKyAg
ICAgICAgREZHIGNsYXNzLCBhbmQgc29tZSB0aW1lIGFnbyBJIGhvaXN0ZWQgaXQgaW50byBXVEYg
YW5kIG1hZGUgaXQgZ2VuZXJpYy4gQnV0IHNpbmNlIHRoZSBvbmx5CisgICAgICAgIHVzZXIgb2Yg
dGhlIGNsYXNzIHdhcyB0aGUgREZHLCB0aGlzIGNsYXNzIHN0aWxsIGhhZCBhIGhhbmRmdWwgb2Yg
REZHLXNwZWNpZmljIHNuaXBwZXRzIHRoYXQKKyAgICAgICAgZGlkbid0IGNvbXBpbGUgd2hlbiBJ
IHN0YXJ0ZWQgdXNpbmcgaXQgZnJvbSBCMy4KKworICAgICAgICBBbHNvIHJlbmFtZWQgaW1tZWRp
YXRlRG9taW5hdG9yT2YoKSB0byBpZG9tKCkuIFRoaXMgaXMgdGhlIHNvcnQgb2YgYWJicmV2aWF0
aW9uIHRoYXQgd2UKKyAgICAgICAgd291bGRuJ3Qgb3JkaW5hcmlseSB3YW50IHRvIGhhdmUgaW4g
V2ViS2l0LiBCdXQgV2ViS2l0IGRvZXMgYWxsb3cgZm9yIGFiYnJldmlhdGlvbnMgdGhhdCBhcmUK
KyAgICAgICAgIm1vcmUgY2Fub25pY2FsIi4gVGhlIHRlcm0gImlkb20iIGlzIGRlZmluaXRlbHkg
bW9yZSBjYW5vbmljYWwgdGhhbiAiaW1tZWRpYXRlRG9taW5hdG9yT2YiLgorCisgICAgICAgICog
d3RmL0RvbWluYXRvcnMuaDoKKyAgICAgICAgKFdURjo6RG9taW5hdG9yczo6ZG9taW5hdGVzKToK
KyAgICAgICAgKFdURjo6RG9taW5hdG9yczo6aWRvbSk6CisgICAgICAgIChXVEY6OkRvbWluYXRv
cnM6OmZvckFsbFN0cmljdERvbWluYXRvcnNPZik6CisgICAgICAgIChXVEY6OkRvbWluYXRvcnM6
Ok5haXZlRG9taW5hdG9yczo6ZG9taW5hdGVzKToKKyAgICAgICAgKFdURjo6RG9taW5hdG9yczo6
TmFpdmVEb21pbmF0b3JzOjpkdW1wKToKKyAgICAgICAgKFdURjo6RG9taW5hdG9yczo6VmFsaWRh
dGlvbkNvbnRleHQ6OmhhbmRsZUVycm9ycyk6CisKIDIwMTUtMTItMDMgIEFuZGVycyBDYXJsc3Nv
biAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgT2JqZWN0aXZlLUMgR0Mg
c3VwcG9ydApJbmRleDogU291cmNlL1dURi93dGYvRG9taW5hdG9ycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0RvbWluYXRvcnMuaAkocmV2aXNpb24gMTkzNjYyKQorKysgU291cmNl
L1dURi93dGYvRG9taW5hdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAj
aWZuZGVmIFdURkRvbWluYXRvcnNfaAogI2RlZmluZSBXVEZEb21pbmF0b3JzX2gKIAorI2luY2x1
ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0
Lmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMTIwLDggKzEyMSw5IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIHJldHVybiBmcm9tID09IHRvIHx8IHN0cmljdGx5RG9taW5hdGVzKGZyb20sIHRv
KTsKICAgICB9Ci0gICAgCi0gICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgaW1tZWRpYXRlRG9taW5h
dG9yT2YodHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2spIGNvbnN0CisKKyAgICAvLyBSZXR1cm5z
IHRoZSBpbW1lZGlhdGUgZG9taW5hdG9yIG9mIHRoaXMgYmxvY2suIFJldHVybnMgbnVsbCBmb3Ig
dGhlIHJvb3QgYmxvY2suCisgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgaWRvbSh0eXBlbmFtZSBH
cmFwaDo6Tm9kZSBibG9jaykgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX2RhdGFbYmxv
Y2tdLmlkb21QYXJlbnQ7CiAgICAgfQpAQCAtNTU1LDcgKzU1Nyw3IEBAIHByaXZhdGU6CiAgICAg
CiAgICAgICAgIGJvb2wgZG9taW5hdGVzKHR5cGVuYW1lIEdyYXBoOjpOb2RlIGZyb20sIHR5cGVu
YW1lIEdyYXBoOjpOb2RlIHRvKSBjb25zdAogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZG9taW5hdGVzKGZyb20tPmluZGV4LCB0by0+aW5kZXgpOworICAgICAgICAgICAgcmV0dXJuIGRv
bWluYXRlcyhtX2dyYXBoLmluZGV4KGZyb20pLCBtX2dyYXBoLmluZGV4KHRvKSk7CiAgICAgICAg
IH0KICAgICAKICAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CkBAIC02
MzYsMTIgKzYzOCwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgQmxvY2sgIiwgZ3JhcGguZHVtcChncmFwaC5u
b2RlKGJsb2NrSW5kZXgpKSwgIjogc3VjY2Vzc29ycyA9IFsiKTsKICAgICAgICAgICAgICAgICBD
b21tYVByaW50ZXIgY29tbWE7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZyhjb21tYSwgZ3JhcGguZHVtcChibG9jay0+c3VjY2Vzc29yKGkpKSk7CisgICAgICAgICAg
ICAgICAgZm9yIChhdXRvIHN1Y2Nlc3NvciA6IGdyYXBoLnN1Y2Nlc3NvcnMoYmxvY2spKQorICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKGNvbW1hLCBncmFwaC5kdW1wKHN1Y2Nlc3NvcikpOwog
ICAgICAgICAgICAgICAgIGRhdGFMb2coIl0sIHByZWRlY2Vzc29ycyA9IFsiKTsKICAgICAgICAg
ICAgICAgICBjb21tYSA9IENvbW1hUHJpbnRlcigpOwotICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKQotICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKGNvbW1hLCBncmFwaC5kdW1wKGJsb2NrLT5wcmVkZWNlc3Nv
cnNbaV0pKTsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8gcHJlZGVjZXNzb3IgOiBncmFwaC5w
cmVkZWNlc3NvcnMoYmxvY2spKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKGNvbW1hLCBn
cmFwaC5kdW1wKHByZWRlY2Vzc29yKSk7CiAgICAgICAgICAgICAgICAgZGF0YUxvZygiXVxuIik7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOwo=
</data>
<flag name="review"
          id="291860"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>