<?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>151174</bug_id>
          
          <creation_ts>2015-11-11 19:05:30 -0800</creation_ts>
          <short_desc>B3::ValueRep::Any should translate into a Arg::ColdUse role in Air</short_desc>
          <delta_ts>2015-11-30 23:04:48 -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>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1141333</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-11 19:05:30 -0800</bug_when>
    <thetext>This can be used to tell the register allocator that it doesn&apos;t need to count the use when determining how often a value is used.  We should use this for all values for OSR exit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145125</commentid>
    <comment_count>1</comment_count>
      <attachid>266332</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-30 21:32:28 -0800</bug_when>
    <thetext>Created attachment 266332
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145126</commentid>
    <comment_count>2</comment_count>
      <attachid>266333</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-30 21:49:17 -0800</bug_when>
    <thetext>Created attachment 266333
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145127</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-30 21:52:08 -0800</bug_when>
    <thetext>Attachment 266333 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirUseCounts.h:80:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:89:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:90:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:91:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 4 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145128</commentid>
    <comment_count>4</comment_count>
      <attachid>266333</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-11-30 21:56:41 -0800</bug_when>
    <thetext>Comment on attachment 266333
the patch

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

r=me

&gt; Source/JavaScriptCore/b3/B3UseCounts.h:45
&gt; -    
&gt; +

Revert-o.

&gt; Source/JavaScriptCore/dfg/DFGCommon.h:41
&gt; -#define FTL_USES_B3 0
&gt; +#define FTL_USES_B3 1

Revert-o. I like the enthusiasm, though :P.

&gt; Source/JavaScriptCore/runtime/Options.h:341
&gt; +    v(double, rareBlockPenalty, 0.001, nullptr) \

Do you know of a reason this penalty should not be infinite, or is this just a guesstimate?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145129</commentid>
    <comment_count>5</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-11-30 22:04:23 -0800</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=266333&amp;action=review

&gt; Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:89
&gt; +        : m_code(code)

I would really prefer not to keep a reference to the code.
That way it is easy to constrain it to build() and build() only.

&gt; Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:564
&gt; +        // Higher score means more desirable to spill. Lower scores maximize the likelihood that a tmp

There is a FIXME above about implementing something less stupid. Can you please remove it?

&gt; Source/JavaScriptCore/dfg/DFGCommon.h:41
&gt; -#define FTL_USES_B3 0
&gt; +#define FTL_USES_B3 1

Don&apos;t forget this!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145131</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-30 22:09:10 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 266333 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=266333&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3UseCounts.h:45
&gt; &gt; -    
&gt; &gt; +
&gt; 
&gt; Revert-o.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGCommon.h:41
&gt; &gt; -#define FTL_USES_B3 0
&gt; &gt; +#define FTL_USES_B3 1
&gt; 
&gt; Revert-o. I like the enthusiasm, though :P.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/Options.h:341
&gt; &gt; +    v(double, rareBlockPenalty, 0.001, nullptr) \
&gt; 
&gt; Do you know of a reason this penalty should not be infinite, or is this just
&gt; a guesstimate?

Yeah, I do!  And by &quot;infinite&quot; I assume you mean &quot;0&quot;.  If we really used +Inf then it would infinitely reward uses on rare blocks, which is clearly not right.

If it was 0 then the score of all variables that only got used on slow paths would all be +Inf, since the use counts would be 0.  That means that any time we encountered register pressure, we would spill some variable in some slow path at random.  That&apos;s totally bad.  For starters, we have no information that spilling that variable would relieve any register pressure.  But also, that variable could be one of those that can always get a register no matter what.

Using a rareBlockPenalty that is small but not zero ensures that when we try to find a variable with the highest score to spill, we won&apos;t be picking at random.  Being a variable that only gets used on slow paths isn&apos;t enough to automatically get spilled - we will still pick among those variables according to other factors, like the interference degree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145134</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-30 22:15:12 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=266333&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:89
&gt; &gt; +        : m_code(code)
&gt; 
&gt; I would really prefer not to keep a reference to the code.
&gt; That way it is easy to constrain it to build() and build() only.

What is the benefit of constraining it to build()?  In all of the other phases, we sort of assume that Code&amp; is always available.  I don&apos;t view it as off-limits to have useful meta-data on Code, so it seems fair game to make Code&amp; available in more places.


&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:564
&gt; &gt; +        // Higher score means more desirable to spill. Lower scores maximize the likelihood that a tmp
&gt; 
&gt; There is a FIXME above about implementing something less stupid. Can you
&gt; please remove it?

Will do!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145136</commentid>
    <comment_count>8</comment_count>
      <attachid>266335</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-30 22:23:40 -0800</bug_when>
    <thetext>Created attachment 266335
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145139</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-30 22:27:34 -0800</bug_when>
    <thetext>Attachment 266335 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirUseCounts.h:80:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:89:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:90:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:91:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 4 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145146</commentid>
    <comment_count>10</comment_count>
      <attachid>266335</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-30 22:40:37 -0800</bug_when>
    <thetext>Comment on attachment 266335
patch for landing

Actually, I&apos;ll commit myself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145152</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-30 23:04:48 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/192863</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266332</attachid>
            <date>2015-11-30 21:32:28 -0800</date>
            <delta_ts>2015-11-30 21:49:17 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>23050</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTI4NTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzEwLDYgKzMxMCw3IEBACiAJCTBGMzczMDhEMUMwQkQy
OTEwMDA1MkJGQSAvKiBCM1BoaUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM3MzA4QjFDMEJEMjkxMDAwNTJCRkEgLyogQjNQaGlDaGls
ZHJlbi5oICovOyB9OwogCQkwRjM3MzA4RjFDMENENjg1MDAwNTJCRkEgLyogRGlzYWxsb3dNYWNy
b1NjcmF0Y2hSZWdpc3RlclVzYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjM3MzA4RTFDMENENjg1MDAwNTJCRkEgLyogRGlzYWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlLmggKi87IH07CiAJCTBGMzczMDkxMUMwQ0Q3MEMwMDA1MkJGQSAv
KiBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzczMDkwMUMwQ0Q3MEMwMDA1MkJGQSAvKiBBbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCAqLzsgfTsKKwkJMEYzNzMwOTMxQzBENjdFRTAw
MDUyQkZBIC8qIEFpclVzZUNvdW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzNzMwOTIxQzBENjdFRTAwMDUyQkZBIC8qIEFpclVzZUNvdW50cy5o
ICovOyB9OwogCQkwRjM4QjAxMTE3Q0YwNzgwMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhCMDBG
MTdDRjA3N0YwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuY3BwICovOyB9OwogCQkwRjM4QjAx
MjE3Q0YwNzgzMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM4QjAxMDE3Q0YwNzdGMDBCMTQ0RDMgLyog
TExJbnRFbnRyeXBvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEYzOEIwMTcxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhC
MDEzMTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5jcHAgKi87IH07CkBAIC0y
Mzc4LDYgKzIzNzksNyBAQAogCQkwRjM3MzA4QjFDMEJEMjkxMDAwNTJCRkEgLyogQjNQaGlDaGls
ZHJlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1BoaUNoaWxkcmVuLmg7
IHBhdGggPSBiMy9CM1BoaUNoaWxkcmVuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMzczMDhFMUMwQ0Q2ODUwMDA1MkJGQSAvKiBEaXNhbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVy
VXNhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzYWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzcz
MDkwMUMwQ0Q3MEMwMDA1MkJGQSAvKiBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzczMDkyMUMwRDY3RUUw
MDA1MkJGQSAvKiBBaXJVc2VDb3VudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQWlyVXNlQ291bnRzLmg7IHBhdGggPSBiMy9haXIvQWlyVXNlQ291bnRzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzhCMDBGMTdDRjA3N0YwMEIxNDREMyAvKiBMTEludEVu
dHJ5cG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRFbnRyeXBvaW50LmNwcDsgcGF0
aCA9IGxsaW50L0xMSW50RW50cnlwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMzhCMDEwMTdDRjA3N0YwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gTExJbnRFbnRyeXBvaW50Lmg7IHBhdGggPSBsbGludC9MTEludEVudHJ5cG9pbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzOEIwMTMxN0NGRTc1NTAwQjE0NEQz
IC8qIERGR0NvbXBpbGF0aW9uS2V5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR0NvbXBpbGF0aW9uS2V5LmNwcDsgcGF0aCA9IGRmZy9ERkdDb21waWxhdGlvbktl
eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NjUyLDYgKzQ2NTQsNyBAQAog
CQkJCTBGRUM4NTY4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3BwICovLAogCQkJCTBGRUM4
NTY5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuaCAqLywKIAkJCQkwRkVDODU2QTFCREFDREM3
MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oICovLAorCQkJCTBGMzczMDkyMUMwRDY3RUUwMDA1
MkJGQSAvKiBBaXJVc2VDb3VudHMuaCAqLywKIAkJCQkwRkVDODU2QjFCREFDREM3MDA4MEZGNzQg
LyogQWlyVmFsaWRhdGUuY3BwICovLAogCQkJCTBGRUM4NTZDMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJWYWxpZGF0ZS5oICovLAogCQkJKTsKQEAgLTY2NjUsNiArNjY2OCw3IEBACiAJCQkJMEYzMzhF
MTYxQkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVLZXlJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkVDODU3NDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkVDODU3NjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEYzNzMwOTMxQzBENjdFRTAwMDUyQkZBIC8qIEFpclVzZUNvdW50cy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NTcwMzkxQkU0NEM5MTAwNjJBNjI5IC8qIEFpckVsaW1p
bmF0ZURlYWRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3NzFCREFDREM3MDA4MEZG
NzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3OTFC
REFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCShyZXZpc2lv
biAxOTI4NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw4IEBAIHZvaWQgU3RhY2ttYXBTcGVjaWFs
Ojpmb3JFYWNoQXJnSW1wbCgKICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25l
ZCBudW1JZ25vcmVkQWlyQXJncywKICAgICBJbnN0JiBpbnN0LCBBcmc6OlJvbGUgcm9sZSwgY29u
c3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQogewotICAg
IFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAgIFN0YWNrbWFwVmFsdWUqIHZhbHVlID0g
aW5zdC5vcmlnaW4tPmFzPFN0YWNrbWFwVmFsdWU+KCk7CisgICAgQVNTRVJUKHZhbHVlKTsKIAog
ICAgIC8vIENoZWNrIHRoYXQgaW5zYW5lIHRoaW5ncyBoYXZlIG5vdCBoYXBwZW5lZC4KICAgICBB
U1NFUlQoaW5zdC5hcmdzLnNpemUoKSA+PSBudW1JZ25vcmVkQWlyQXJncyk7CkBAIC04NCw5ICs4
NSwxNSBAQCB2b2lkIFN0YWNrbWFwU3BlY2lhbDo6Zm9yRWFjaEFyZ0ltcGwoCiAgICAgCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQWly
QXJnczsgKytpKSB7CiAgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2kgKyBudW1JZ25vcmVk
QWlyQXJnc107Ci0gICAgICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpICsgbnVtSWdu
b3JlZEIzQXJncyk7CisgICAgICAgIENvbnN0cmFpbmVkVmFsdWUgY2hpbGQgPSB2YWx1ZS0+Y29u
c3RyYWluZWRDaGlsZChpICsgbnVtSWdub3JlZEIzQXJncyk7CiAKLSAgICAgICAgY2FsbGJhY2so
YXJnLCByb2xlLCBBcmc6OnR5cGVGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSkpOworICAgICAgICBB
cmc6OlJvbGUgdGhpc1JvbGUgPSByb2xlOworICAgICAgICAKKyAgICAgICAgLy8gQ29vbCBkb3du
IHRoZSByb2xlIGlmIHRoZSB1c2UgaXMgY29sZC4KKyAgICAgICAgaWYgKGNoaWxkLnJlcCgpLmtp
bmQoKSA9PSBWYWx1ZVJlcDo6QW55ICYmIHRoaXNSb2xlID09IEFyZzo6VXNlKQorICAgICAgICAg
ICAgdGhpc1JvbGUgPSBBcmc6OkNvbGRVc2U7CisgICAgICAgIAorICAgICAgICBjYWxsYmFjayhh
cmcsIHJvbGUsIEFyZzo6dHlwZUZvckIzVHlwZShjaGlsZC52YWx1ZSgpLT50eXBlKCkpKTsKICAg
ICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCShyZXZp
c2lvbiAxOTI4NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBu
dW1Vc2VzKFZhbHVlKiB2YWx1ZSkgY29uc3QgeyByZXR1cm4gbV9jb3VudHNbdmFsdWVdLm51bVVz
ZXM7IH0KICAgICB1bnNpZ25lZCBudW1Vc2luZ0luc3RydWN0aW9ucyhWYWx1ZSogdmFsdWUpIGNv
bnN0IHsgcmV0dXJuIG1fY291bnRzW3ZhbHVlXS5udW1Vc2luZ0luc3RydWN0aW9uczsgfQotICAg
IAorCiBwcml2YXRlOgogICAgIHN0cnVjdCBDb3VudHMgewogICAgICAgICB1bnNpZ25lZCBudW1V
c2VzIHsgMCB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCShyZXZp
c2lvbiAxOTI4NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKIGNsYXNzIFZhbHVlUmVwIHsKIHB1YmxpYzoKICAgICBlbnVtIEtpbmQgewotICAgICAg
ICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IEIzIGNhbiBw
aWNrIGFueSByZXByZXNlbnRhdGlvbi4gQXMgYW4KLSAgICAgICAgLy8gb3V0cHV0IHJlcHJlc2Vu
dGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgd2UgZG9uJ3Qga25vdy4gVGhpcyB3aWxsIG9ubHkgYXJp
c2UgZm9yIHRoZQotICAgICAgICAvLyByaWdodCBvcGVyYW5kIChpLmUuIGNoaWxkKDEpKSBvZiBh
IENoZWNrTXVsLgorICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBt
ZWFucyB0aGF0IEIzIGNhbiBwaWNrIGFueSByZXByZXNlbnRhdGlvbi4gSXQgYWxzbyBjdXJyZW50
bHkKKyAgICAgICAgLy8gaW1wbGllcyB0aGF0IHRoZSB1c2UgaXMgY29sZDogdGhlIHJlZ2lzdGVy
IGFsbG9jYXRvciBkb2Vzbid0IGNvdW50IGl0LiBBcyBhbiBvdXRwdXQKKyAgICAgICAgLy8gcmVw
cmVzZW50YXRpb24sIHRoaXMgbWVhbnMgdGhhdCB3ZSBkb24ndCBrbm93LiBUaGlzIHdpbGwgb25s
eSBhcmlzZSBhcyBhbiBvdXRwdXQKKyAgICAgICAgLy8gcmVwcmVzZW50YXRpb24gZm9yIHRoZSBh
Y3RpdmUgYXJndW1lbnRzIG9mIENoZWNrL0NoZWNrQWRkL0NoZWNrU3ViL0NoZWNrTXVsLgogICAg
ICAgICBBbnksCiAKICAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMg
bWVhbnMgdGhhdCBCMyBzaG91bGQgcGljayBzb21lIHJlZ2lzdGVyLiBJdCBjb3VsZCBiZSBhCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCShyZXZpc2lvbiAxOTI4
NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4MSw2ICsxODEsOSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
IG91dCwgQXJnCiAgICAgY2FzZSBBcmc6OlVzZUFkZHI6CiAgICAgICAgIG91dC5wcmludCgiVXNl
QWRkciIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6OkNvbGRVc2U6CisgICAgICAg
IG91dC5wcmludCgiQ29sZFVzZSIpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBBcmc6Okxh
dGVVc2U6CiAgICAgICAgIG91dC5wcmludCgiTGF0ZVVzZSIpOwogICAgICAgICByZXR1cm47Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlzaW9uIDE5Mjg1NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHdvcmtpbmcgY29weSkK
QEAgLTgzLDggKzgzLDEzIEBAIHB1YmxpYzoKICAgICAgICAgLy8gYWx3YXlzIGVzY2FwaW5nLCBh
bmQgU3RhY2sgaXMgcHJlc3VtZWQgdG8gYmUgYWx3YXlzIGVzY2FwaW5nIGlmIGl0J3MgTG9ja2Vk
LgogICAgICAgICBVc2UsCiAKKyAgICAgICAgLy8gRXhhY3RseSBsaWtlIFVzZSwgZXhjZXB0IHRo
YXQgaXQgYWxzbyBpbXBsaWVzIHRoYXQgdGhlIHVzZSBpcyBjb2xkOiB0aGF0IGlzLCByZXBsYWNp
bmcgdGhlCisgICAgICAgIC8vIHVzZSB3aXRoIHNvbWV0aGluZyBvbiB0aGUgc3RhY2sgaXMgZnJl
ZS4KKyAgICAgICAgQ29sZFVzZSwKKwogICAgICAgICAvLyBMYXRlVXNlIG1lYW5zIHRoYXQgdGhl
IEluc3Qgd2lsbCByZWFkIGZyb20gdGhpcyB2YWx1ZSBhZnRlciBkb2luZyBpdHMgRGVmJ3MuIE5v
dGUgdGhhdCBMYXRlVXNlCi0gICAgICAgIC8vIG9uIGFuIEFkZHIgb3IgSW5kZXggc3RpbGwgbWVh
bnMgVXNlIG9uIHRoZSBpbnRlcm5hbCB0ZW1wb3Jhcmllcy4KKyAgICAgICAgLy8gb24gYW4gQWRk
ciBvciBJbmRleCBzdGlsbCBtZWFucyBVc2Ugb24gdGhlIGludGVybmFsIHRlbXBvcmFyaWVzLiBM
YXRlVXNlIGFsc28gY3VycmVudGx5IGFsc28KKyAgICAgICAgLy8gaW1wbGllcyBDb2xkVXNlLgog
ICAgICAgICBMYXRlVXNlLAogCiAgICAgICAgIC8vIERlZiBtZWFucyB0aGF0IHRoZSBJbnN0IHdp
bGwgd3JpdGUgdG8gdGhpcyB2YWx1ZSBhZnRlciBkb2luZyBldmVyeXRoaW5nIGVsc2UuCkBAIC0x
MzIsNiArMTM3LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgc3dpdGNoIChyb2xlKSB7CiAg
ICAgICAgIGNhc2UgVXNlOgorICAgICAgICBjYXNlIENvbGRVc2U6CiAgICAgICAgIGNhc2UgVXNl
RGVmOgogICAgICAgICBjYXNlIExhdGVVc2U6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTE0MSwxMSArMTQ3LDMxIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIHN0YXRp
YyBib29sIGlzQ29sZFVzZShSb2xlIHJvbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHJvbGUp
IHsKKyAgICAgICAgY2FzZSBDb2xkVXNlOgorICAgICAgICBjYXNlIExhdGVVc2U6CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBVc2U6CisgICAgICAgIGNhc2UgVXNlRGVm
OgorICAgICAgICBjYXNlIERlZjoKKyAgICAgICAgY2FzZSBVc2VBZGRyOgorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNXYXJt
VXNlKFJvbGUgcm9sZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0FueVVzZShyb2xlKSAmJiAh
aXNDb2xkVXNlKHJvbGUpOworICAgIH0KKwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgUm9s
ZSBpbXBsaWVzIHRoYXQgdGhlIEluc3Qgd2lsbCBVc2UgdGhlIEFyZyBiZWZvcmUgZG9pbmcgYW55
dGhpbmcgZWxzZS4KICAgICBzdGF0aWMgYm9vbCBpc0Vhcmx5VXNlKFJvbGUgcm9sZSkKICAgICB7
CiAgICAgICAgIHN3aXRjaCAocm9sZSkgewogICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgY2Fz
ZSBDb2xkVXNlOgogICAgICAgICBjYXNlIFVzZURlZjoKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICBjYXNlIERlZjoKQEAgLTE2Niw2ICsxOTIsNyBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKICAgICAgICAgY2FzZSBVc2U6CisgICAgICAgIGNhc2Ug
Q29sZFVzZToKICAgICAgICAgY2FzZSBVc2VBZGRyOgogICAgICAgICBjYXNlIExhdGVVc2U6CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNw
cAkocmV2aXNpb24gMTkyODU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJ
dGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE0ICsz
NSwxNyBAQAogI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKICNpbmNsdWRlICJBaXJSZWdpc3Rl
clByaW9yaXR5LmgiCiAjaW5jbHVkZSAiQWlyVG1wSW5saW5lcy5oIgorI2luY2x1ZGUgIkFpclVz
ZUNvdW50cy5oIgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0
SGFzaFNldC5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CiAKLXN0YXRpYyBib29sIGRlYnVnID0gZmFsc2U7Ci1zdGF0aWMgYm9vbCB0cmFjZURlYnVn
ID0gZmFsc2U7Ci1zdGF0aWMgYm9vbCByZXBvcnRTdGF0cyA9IGZhbHNlOworbmFtZXNwYWNlIHsK
KworYm9vbCBkZWJ1ZyA9IGZhbHNlOworYm9vbCB0cmFjZURlYnVnID0gZmFsc2U7Citib29sIHJl
cG9ydFN0YXRzID0gZmFsc2U7CiAKIHRlbXBsYXRlPEFyZzo6VHlwZSB0eXBlPgogc3RydWN0IE1v
dmVJbnN0SGVscGVyOwpAQCAtODEsMTkgKzg0LDIyIEBAIHN0cnVjdCBNb3ZlSW5zdEhlbHBlcjxB
cmc6OkZQPiB7CiB0ZW1wbGF0ZTxBcmc6OlR5cGUgdHlwZT4KIGNsYXNzIEl0ZXJhdGVkUmVnaXN0
ZXJDb2FsZXNjaW5nQWxsb2NhdG9yIHsKIHB1YmxpYzoKLSAgICBJdGVyYXRlZFJlZ2lzdGVyQ29h
bGVzY2luZ0FsbG9jYXRvcihDb2RlJiBjb2RlLCBjb25zdCBIYXNoU2V0PFRtcD4mIHVuc3BpbGxh
YmxlVG1wKQotICAgICAgICA6IG1fdW5zcGlsbGFibGVUbXAodW5zcGlsbGFibGVUbXApCisgICAg
SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3IoCisgICAgICAgIENvZGUmIGNvZGUs
IGNvbnN0IFVzZUNvdW50czxUbXA+JiB1c2VDb3VudHMsIGNvbnN0IEhhc2hTZXQ8VG1wPiYgdW5z
cGlsbGFibGVUbXApCisgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgICAgICwgbV91c2VDb3Vu
dHModXNlQ291bnRzKQorICAgICAgICAsIG1fdW5zcGlsbGFibGVUbXAodW5zcGlsbGFibGVUbXAp
CiAgICAgICAgICwgbV9udW1iZXJPZlJlZ2lzdGVycyhyZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUp
LnNpemUoKSkKICAgICB7Ci0gICAgICAgIGluaXRpYWxpemVEZWdyZWVzKGNvZGUpOworICAgICAg
ICBpbml0aWFsaXplRGVncmVlcygpOwogCi0gICAgICAgIHVuc2lnbmVkIHRtcEFycmF5U2l6ZSA9
IHRoaXMtPnRtcEFycmF5U2l6ZShjb2RlKTsKKyAgICAgICAgdW5zaWduZWQgdG1wQXJyYXlTaXpl
ID0gdGhpcy0+dG1wQXJyYXlTaXplKCk7CiAgICAgICAgIG1fYWRqYWNlbmN5TGlzdC5yZXNpemUo
dG1wQXJyYXlTaXplKTsKICAgICAgICAgbV9tb3ZlTGlzdC5yZXNpemUodG1wQXJyYXlTaXplKTsK
ICAgICAgICAgbV9jb2FsZXNjZWRUbXBzLnJlc2l6ZSh0bXBBcnJheVNpemUpOwogICAgICAgICBt
X2lzT25TZWxlY3RTdGFjay5lbnN1cmVTaXplKHRtcEFycmF5U2l6ZSk7CiAKLSAgICAgICAgYnVp
bGQoY29kZSk7CisgICAgICAgIGJ1aWxkKCk7CiAgICAgICAgIGFsbG9jYXRlKCk7CiAgICAgfQog
CkBAIC0xMzgsMTUgKzE0NCwxNSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHN0
YXRpYyB1bnNpZ25lZCB0bXBBcnJheVNpemUoQ29kZSYgY29kZSkKKyAgICBzdGF0aWMgdW5zaWdu
ZWQgdG1wQXJyYXlTaXplKCkKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIG51bVRtcHMgPSBjb2Rl
Lm51bVRtcHModHlwZSk7CisgICAgICAgIHVuc2lnbmVkIG51bVRtcHMgPSBtX2NvZGUubnVtVG1w
cyh0eXBlKTsKICAgICAgICAgcmV0dXJuIEFic29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0
ZUluZGV4KG51bVRtcHMpOwogICAgIH0KIAotICAgIHZvaWQgaW5pdGlhbGl6ZURlZ3JlZXMoQ29k
ZSYgY29kZSkKKyAgICB2b2lkIGluaXRpYWxpemVEZWdyZWVzKCkKICAgICB7Ci0gICAgICAgIHVu
c2lnbmVkIHRtcEFycmF5U2l6ZSA9IHRoaXMtPnRtcEFycmF5U2l6ZShjb2RlKTsKKyAgICAgICAg
dW5zaWduZWQgdG1wQXJyYXlTaXplID0gdGhpcy0+dG1wQXJyYXlTaXplKG1fY29kZSk7CiAgICAg
ICAgIG1fZGVncmVlcy5yZXNpemUodG1wQXJyYXlTaXplKTsKIAogICAgICAgICAvLyBBbGwgcHJl
Y29sb3JlZCByZWdpc3RlcnMgaGF2ZSAgYW4gImluZmluaXRlIiBkZWdyZWUuCkBAIC0xNTcsMTAg
KzE2MywxMCBAQCBwcml2YXRlOgogICAgICAgICBiemVybyhtX2RlZ3JlZXMuZGF0YSgpICsgZmly
c3ROb25SZWdJbmRleCwgKHRtcEFycmF5U2l6ZSAtIGZpcnN0Tm9uUmVnSW5kZXgpICogc2l6ZW9m
KHVuc2lnbmVkKSk7CiAgICAgfQogCi0gICAgdm9pZCBidWlsZChDb2RlJiBjb2RlKQorICAgIHZv
aWQgYnVpbGQoKQogICAgIHsKLSAgICAgICAgVG1wTGl2ZW5lc3M8dHlwZT4gbGl2ZW5lc3MoY29k
ZSk7Ci0gICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIFRt
cExpdmVuZXNzPHR5cGU+IGxpdmVuZXNzKG1fY29kZSk7CisgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX2NvZGUpIHsKICAgICAgICAgICAgIHR5cGVuYW1lIFRtcExpdmVuZXNzPHR5
cGU+OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgewog
ICAgICAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKQEAgLTU1
NSwxOCArNTYxLDMyIEBAIHByaXZhdGU6CiAKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9N
RVNTQUdFKGl0ZXJhdG9yICE9IG1fc3BpbGxXb3JrbGlzdC5lbmQoKSwgIkl0IGlzIG5vdCBwb3Nz
aWJsZSB0byBjb2xvciB0aGUgQWlyIGdyYXBoIHdpdGggdGhlIG51bWJlciBvZiBhdmFpbGFibGUg
cmVnaXN0ZXJzLiIpOwogCisgICAgICAgIC8vIEhpZ2hlciBzY29yZSBtZWFucyBtb3JlIGRlc2ly
YWJsZSB0byBzcGlsbC4gTG93ZXIgc2NvcmVzIG1heGltaXplIHRoZSBsaWtlbGlob29kIHRoYXQg
YSB0bXAKKyAgICAgICAgLy8gZ2V0cyBhIHJlZ2lzdGVyLgorICAgICAgICBhdXRvIHNjb3JlID0g
WyZdIChUbXAgdG1wKSAtPiBkb3VibGUgeworICAgICAgICAgICAgLy8gQWxsIGVsc2UgYmVpbmcg
ZXF1YWwsIHRoZSBzY29yZSBzaG91bGQgYmUgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgZGVncmVl
LgorICAgICAgICAgICAgZG91YmxlIGRlZ3JlZSA9IHN0YXRpY19jYXN0PGRvdWJsZT4obV9kZWdy
ZWVzW0Fic29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KHRtcCldKTsKKworICAg
ICAgICAgICAgLy8gQWxsIGVsc2UgYmVpbmcgZXF1YWwsIHRoZSBzY29yZSBzaG91bGQgYmUgaW52
ZXJzZWx5IHJlbGF0ZWQgdG8gdGhlIG51bWJlciBvZiB3YXJtIHVzZXMgYW5kCisgICAgICAgICAg
ICAvLyBkZWZzLgorICAgICAgICAgICAgY29uc3QgVXNlQ291bnRzOjpDb3VudHMmIGNvdW50cyA9
IG1fdXNlQ291bnRzW3RtcF07CisgICAgICAgICAgICBkb3VibGUgdXNlcyA9IGNvdW50cy5udW1X
YXJtVXNlcyArIGNvdW50cy5udW1EZWZzOworCisgICAgICAgICAgICByZXR1cm4gZGVncmVlIC8g
dXNlczsKKyAgICAgICAgfTsKKwogICAgICAgICBhdXRvIHZpY3RpbUl0ZXJhdG9yID0gaXRlcmF0
b3I7Ci0gICAgICAgIHVuc2lnbmVkIG1heERlZ3JlZSA9IG1fZGVncmVlc1tBYnNvbHV0ZVRtcE1h
cHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCgqaXRlcmF0b3IpXTsKKyAgICAgICAgZG91YmxlIG1h
eFNjb3JlID0gc2NvcmUoKml0ZXJhdG9yKTsKIAogICAgICAgICArK2l0ZXJhdG9yOwogICAgICAg
ICBmb3IgKDtpdGVyYXRvciAhPSBtX3NwaWxsV29ya2xpc3QuZW5kKCk7ICsraXRlcmF0b3IpIHsK
LSAgICAgICAgICAgIHVuc2lnbmVkIHRtcERlZ3JlZSA9IG1fZGVncmVlc1tBYnNvbHV0ZVRtcE1h
cHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCgqaXRlcmF0b3IpXTsKLSAgICAgICAgICAgIGlmICh0
bXBEZWdyZWUgPiBtYXhEZWdyZWUpIHsKKyAgICAgICAgICAgIGRvdWJsZSB0bXBTY29yZSA9IHNj
b3JlKCppdGVyYXRvcik7CisgICAgICAgICAgICBpZiAodG1wU2NvcmUgPiBtYXhTY29yZSkgewog
ICAgICAgICAgICAgICAgIGlmIChtX3Vuc3BpbGxhYmxlVG1wLmNvbnRhaW5zKCppdGVyYXRvcikp
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICAgICAgdmljdGlt
SXRlcmF0b3IgPSBpdGVyYXRvcjsKLSAgICAgICAgICAgICAgICBtYXhEZWdyZWUgPSB0bXBEZWdy
ZWU7CisgICAgICAgICAgICAgICAgbWF4U2NvcmUgPSB0bXBTY29yZTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogCkBAIC04ODEsNiArOTAxLDkgQEAgcHJpdmF0ZToKICAgICAgICAgVmVjdG9y
PHVuc2lnbmVkLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9tb3ZlTGlzdDsKICAgICB9Owog
CisgICAgQ29kZSYgbV9jb2RlOworICAgIFVzZUNvdW50czxUbXA+JiBtX3VzZUNvdW50czsKKwog
ICAgIC8vIFdvcmsgbGlzdHMuCiAgICAgLy8gU2V0IG9mICJtb3ZlIiBlbmFibGVkIGZvciBwb3Nz
aWJsZSBjb2FsZXNjaW5nLgogICAgIE9yZGVyZWRNb3ZlU2V0IG1fd29ya2xpc3RNb3ZlczsKQEAg
LTkwMSwxMyArOTI0LDEzIEBAIHByaXZhdGU6CiB9OwogCiB0ZW1wbGF0ZTxBcmc6OlR5cGUgdHlw
ZT4KLXN0YXRpYyBib29sIGlzVXNlbGVzc01vdmVJbnN0KGNvbnN0IEluc3QmIGluc3QpCitib29s
IGlzVXNlbGVzc01vdmVJbnN0KGNvbnN0IEluc3QmIGluc3QpCiB7CiAgICAgcmV0dXJuIE1vdmVJ
bnN0SGVscGVyPHR5cGU+OjptYXlCZUNvYWxlc2NhYmxlKGluc3QpICYmIGluc3QuYXJnc1swXS50
bXAoKSA9PSBpbnN0LmFyZ3NbMV0udG1wKCk7CiB9CiAKIHRlbXBsYXRlPEFyZzo6VHlwZSB0eXBl
Pgotc3RhdGljIHZvaWQgYXNzaWduUmVnaXN0ZXJUb1RtcEluUHJvZ3JhbShDb2RlJiBjb2RlLCBj
b25zdCBJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRvcjx0eXBlPiYgYWxsb2NhdG9y
KQordm9pZCBhc3NpZ25SZWdpc3RlclRvVG1wSW5Qcm9ncmFtKENvZGUmIGNvZGUsIGNvbnN0IEl0
ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yPHR5cGU+JiBhbGxvY2F0b3IpCiB7CiAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKICAgICAgICAgLy8gR2l2ZSBUbXAg
YSB2YWxpZCByZWdpc3Rlci4KQEAgLTkzNyw3ICs5NjAsNyBAQCBzdGF0aWMgdm9pZCBhc3NpZ25S
ZWdpc3RlclRvVG1wSW5Qcm9ncmFtCiB9CiAKIHRlbXBsYXRlPEFyZzo6VHlwZSB0eXBlPgotc3Rh
dGljIHZvaWQgYWRkU3BpbGxBbmRGaWxsVG9Qcm9ncmFtKENvZGUmIGNvZGUsIGNvbnN0IEl0ZXJh
dGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yPHR5cGU+JiBhbGxvY2F0b3IsIEhhc2hTZXQ8
VG1wPiYgdW5zcGlsbGFibGVUbXApCit2b2lkIGFkZFNwaWxsQW5kRmlsbFRvUHJvZ3JhbShDb2Rl
JiBjb2RlLCBjb25zdCBJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRvcjx0eXBlPiYg
YWxsb2NhdG9yLCBIYXNoU2V0PFRtcD4mIHVuc3BpbGxhYmxlVG1wKQogewogICAgIGNvbnN0IEhh
c2hTZXQ8VG1wPiYgc3BpbGxlZFRtcCA9IGFsbG9jYXRvci5zcGlsbGVkVG1wKCk7CiAKQEAgLTEw
MDcsMTIgKzEwMzAsMTMgQEAgc3RhdGljIHZvaWQgYWRkU3BpbGxBbmRGaWxsVG9Qcm9ncmFtKENv
ZAogfQogCiB0ZW1wbGF0ZTxBcmc6OlR5cGUgdHlwZT4KLXN0YXRpYyB2b2lkIGl0ZXJhdGVkUmVn
aXN0ZXJDb2FsZXNjaW5nT25UeXBlKENvZGUmIGNvZGUsIHVuc2lnbmVkJiBudW1JdGVyYXRpb25z
KQordm9pZCBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ09uVHlwZSgKKyAgICBDb2RlJiBjb2Rl
LCBjb25zdCBVc2VDb3VudHM8VG1wPiYgdXNlQ291bnRzLCB1bnNpZ25lZCYgbnVtSXRlcmF0aW9u
cykKIHsKICAgICBIYXNoU2V0PFRtcD4gdW5zcGlsbGFibGVUbXBzOwogICAgIHdoaWxlICh0cnVl
KSB7CiAgICAgICAgIG51bUl0ZXJhdGlvbnMrKzsKLSAgICAgICAgSXRlcmF0ZWRSZWdpc3RlckNv
YWxlc2NpbmdBbGxvY2F0b3I8dHlwZT4gYWxsb2NhdG9yKGNvZGUsIHVuc3BpbGxhYmxlVG1wcyk7
CisgICAgICAgIEl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yPHR5cGU+IGFsbG9j
YXRvcihjb2RlLCB1c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7CiAgICAgICAgIGlmIChhbGxv
Y2F0b3Iuc3BpbGxlZFRtcCgpLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgYXNzaWduUmVnaXN0
ZXJUb1RtcEluUHJvZ3JhbShjb2RlLCBhbGxvY2F0b3IpOwogICAgICAgICAgICAgcmV0dXJuOwpA
QCAtMTAyMSwxNCArMTA0NSwxOCBAQCBzdGF0aWMgdm9pZCBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVz
Y2luZ09uCiAgICAgfQogfQogCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwogdm9pZCBpdGVy
YXRlZFJlZ2lzdGVyQ29hbGVzY2luZyhDb2RlJiBjb2RlKQogewogICAgIFBoYXNlU2NvcGUgcGhh
c2VTY29wZShjb2RlLCAiaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmciKTsKIAogICAgIHVuc2ln
bmVkIG51bUl0ZXJhdGlvbnMgPSAwOwogCi0gICAgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdP
blR5cGU8QXJnOjpHUD4oY29kZSwgbnVtSXRlcmF0aW9ucyk7Ci0gICAgaXRlcmF0ZWRSZWdpc3Rl
ckNvYWxlc2NpbmdPblR5cGU8QXJnOjpGUD4oY29kZSwgbnVtSXRlcmF0aW9ucyk7CisgICAgVXNl
Q291bnRzPFRtcD4gdXNlQ291bnRzKGNvZGUpOworICAgIGRhdGFMb2coIlVzZSBjb3VudHM6ICIs
IHVzZUNvdW50cywgIlxuIik7CisgICAgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdPblR5cGU8
QXJnOjpHUD4oY29kZSwgdXNlQ291bnRzLCBudW1JdGVyYXRpb25zKTsKKyAgICBpdGVyYXRlZFJl
Z2lzdGVyQ29hbGVzY2luZ09uVHlwZTxBcmc6OkZQPihjb2RlLCB1c2VDb3VudHMsIG51bUl0ZXJh
dGlvbnMpOwogCiAgICAgaWYgKHJlcG9ydFN0YXRzKQogICAgICAgICBkYXRhTG9nKCJOdW0gaXRl
cmF0aW9ucyA9ICIsIG51bUl0ZXJhdGlvbnMsICJcbiIpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkocmV2aXNpb24gMTkyODU3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAogI2luY2x1ZGUgIkFpckJhc2ljQmxv
Y2suaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpclRtcElubGlu
ZXMuaCIKICNpbmNsdWRlICJCM0luZGV4TWFwLmgiCiAjaW5jbHVkZSAiQjNJbmRleFNldC5oIgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVy
eXRoaW5nLmNwcAkocmV2aXNpb24gMTkyODU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsNiArMTMw
LDcgQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAg
ICAgUmVnIGNob3NlblJlZzsKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyb2xlKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpVc2U6CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgQXJnOjpDb2xkVXNlOgogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDog
cmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghc2V0QmVmb3JlLmdldChyZWcpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNldEJlZm9yZS5zZXQocmVnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyVXNlQ291bnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJVc2VDb3VudHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyVXNlQ291bnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBB
aXJVc2VDb3VudHNfaAorI2RlZmluZSBBaXJVc2VDb3VudHNfaAorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkFpckJsb2NrV29ya2xpc3QuaCIK
KyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisK
Ky8vIENvbXB1dGVzIHRoZSBudW1iZXIgb2YgdXNlcyBvZiBhIHZhcmlhYmxlIGJhc2VkIG9uIGZy
ZXF1ZW5jeSBvZiBleGVjdXRpb24uIFRoZSBmcmVxdWVuY3kgb2YgYmxvY2tzCisvLyB0aGF0IGFy
ZSBvbmx5IHJlYWNoYWJsZSBieSByYXJlIGVkZ2VzIGlzIHNjYWxlZCBieSBPcHRpb25zOjpyYXJl
QmxvY2tQZW5hbHR5KCkuCisKKy8vIFRoaW5nIGNhbiBiZSBlaXRoZXIgVG1wIG9yIEFyZy4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFRoaW5nPgorY2xhc3MgVXNlQ291bnRzIHsKK3B1YmxpYzoKKyAgICBz
dHJ1Y3QgQ291bnRzIHsKKyAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIG91dC5wcmludCgKKyAgICAgICAgICAgICAgICAie251
bVdhcm1Vc2VzID0gIiwgbnVtV2FybVVzZXMsICIsIG51bUNvbGRVc2VzID0gIiwgbnVtQ29sZFVz
ZXMsICIsIG51bURlZnMgPSAiLAorICAgICAgICAgICAgICAgIG51bURlZnMsICJ9Iik7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBudW1XYXJtVXNlcyB7IDAgfTsKKyAgICAg
ICAgZG91YmxlIG51bUNvbGRVc2VzIHsgMCB9OworICAgICAgICBkb3VibGUgbnVtRGVmcyB7IDAg
fTsKKyAgICB9OworICAgIAorICAgIFVzZUNvdW50cyhDb2RlJiBjb2RlKQorICAgIHsKKyAgICAg
ICAgLy8gRmluZCBub24tcmFyZSBibG9ja3MuCisgICAgICAgIEJsb2NrV29ya2xpc3QgZmFzdFdv
cmtsaXN0OworICAgICAgICBmYXN0V29ya2xpc3QucHVzaChjb2RlWzBdKTsKKyAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA9IGZhc3RXb3JrbGlzdC5wb3AoKSkgeworICAgICAgICAgICAg
Zm9yIChGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3Nvci5pc1JhcmUoKSkKKyAgICAgICAgICAgICAg
ICAgICAgZmFzdFdvcmtsaXN0LnB1c2goc3VjY2Vzc29yKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsK
KyAgICAgICAgICAgIGRvdWJsZSBmcmVxdWVuY3kgPSBibG9jay0+ZnJlcXVlbmN5KCk7CisgICAg
ICAgICAgICBpZiAoIWZhc3RXb3JrbGlzdC5zYXcoYmxvY2spKQorICAgICAgICAgICAgICAgIGZy
ZXF1ZW5jeSAqPSBPcHRpb25zOjpyYXJlQmxvY2tQZW5hbHR5KCk7CisgICAgICAgICAgICBmb3Ig
KEluc3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2g8VGhp
bmc+KAorICAgICAgICAgICAgICAgICAgICBbJl0gKFRoaW5nJiBhcmcsIEFyZzo6Um9sZSByb2xl
LCBBcmc6OlR5cGUgdHlwZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQ291bnRzJiBjb3Vu
dHMgPSBtX2NvdW50cy5hZGQoYXJnLCBDb3VudHMoKSkuaXRlcmF0b3ItPnZhbHVlOworCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc1dhcm1Vc2Uocm9sZSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY291bnRzLm51bVdhcm1Vc2VzICs9IGZyZXF1ZW5jeTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQ29sZFVzZShyb2xlKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb3VudHMubnVtQ29sZFVzZXMgKz0gZnJlcXVlbmN5OworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNEZWYocm9sZSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY291bnRzLm51bURlZnMgKz0gZnJlcXVlbmN5OworICAgICAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnN0IENv
dW50cyYgb3BlcmF0b3JbXShjb25zdCBUaGluZyYgYXJnKSBjb25zdCB7IHJldHVybiBtX2NvdW50
cy5maW5kKGFyZyktPnZhbHVlOyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKKyAgICB7CisgICAgICAgIG91dC5wcmludChtYXBEdW1wKG1fY291bnRzKSk7CisgICAg
fQorCitwcml2YXRlOgorICAgIEhhc2hNYXA8VGhpbmcsIENvdW50cz4gbV9jb3VudHM7Cit9Owor
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQWlyVXNlQ291bnRzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxOTI4NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIC8vIFdlIGFyZSBpbiB0aGUgbWlkZGxlIG9m
IGFuIGV4cGVyaW1lbnRhbCB0cmFuc2l0aW9uIGZyb20gTExWTSB0byBCMyBhcyB0aGUgYmFja2Vu
ZCBmb3IgdGhlIEZUTC4gV2UgZG9uJ3QKIC8vIHlldCBrbm93IGhvdyBpdCB3aWxsIHR1cm4gb3V0
LiBGb3Igbm93LCB0aGlzIGZsYWcgd2lsbCBjb250cm9sIHdoZXRoZXIgRlRMIHVzZXMgQjMuIFJl
bWVtYmVyIHRvIHNldCB0aGlzCiAvLyB0byAwIGJlZm9yZSBjb21taXR0aW5nIQotI2RlZmluZSBG
VExfVVNFU19CMyAwCisjZGVmaW5lIEZUTF9VU0VTX0IzIDEKIAogc3RydWN0IE5vZGU7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE5Mjg1
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzM4LDYgKzMzOCw3IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5n
OwogICAgIHYodW5zaWduZWQsIGZpcmVPU1JFeGl0RnV6ekF0T3JBZnRlciwgMCwgbnVsbHB0cikg
XAogICAgIFwKICAgICB2KGJvb2wsIGxvZ0IzUGhhc2VUaW1lcywgZmFsc2UsIG51bGxwdHIpIFwK
KyAgICB2KGRvdWJsZSwgcmFyZUJsb2NrUGVuYWx0eSwgMC4wMDEsIG51bGxwdHIpIFwKICAgICBc
CiAgICAgdihib29sLCB1c2VEb2xsYXJWTSwgZmFsc2UsICJpbnN0YWxscyB0aGUgJHZtIGRlYnVn
Z2luZyB0b29sIGluIGdsb2JhbCBvYmplY3RzIikgXAogICAgIHYob3B0aW9uU3RyaW5nLCBmdW5j
dGlvbk92ZXJyaWRlcywgbnVsbHB0ciwgImZpbGUgd2l0aCBkZWJ1Z2dpbmcgb3ZlcnJpZGVzIGZv
ciBmdW5jdGlvbiBib2RpZXMiKSBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266333</attachid>
            <date>2015-11-30 21:49:17 -0800</date>
            <delta_ts>2015-11-30 22:23:40 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>26464</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyODYwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBA
CisyMDE1LTExLTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjM6OlZhbHVlUmVwOjpBbnkgc2hvdWxkIHRyYW5zbGF0ZSBpbnRvIGEgQXJnOjpDb2xkVXNlIHJv
bGUgaW4gQWlyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTExNzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIHRlYWNoZXMgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvciB0aGF0IGl0IHNob3VsZCBwaWNr
IHNwaWxscyBiYXNlZCBvbiB3aGljaGV2ZXIgdG1wIGhhcyB0aGUKKyAgICAgICAgaGlnaGVzdCBz
Y29yZToKKworICAgICAgICAgICAgc2NvcmUodG1wKSA9IGRlZ3JlZSh0bXApIC8gc3VtKGZvciBl
YWNoIHVzZSBvZiB0bXAsIGJsb2NrLT5mcmVxdWVuY3kpCisKKyAgICAgICAgSW4gb3RoZXIgd29y
ZHMsIHRoZSBudW1lcmF0b3IgaXMgdGhlIG51bWJlciBvZiBlZGdlcyBpbiB0aGUgaW50ZWZlcmVu
Y2UgZ3JhcGggYW5kIHRoZSBkZW5vbWluYXRvcgorICAgICAgICBpcyBhbiBlc3RpbWF0ZSBvZiB0
aGUgZHluYW1pYyBudW1iZXIgb2YgdXNlcy4KKworICAgICAgICBUaGlzIGFsc28gZXh0ZW5kcyBB
cmc6OlJvbGUgdG8ga25vdyB0aGF0IHRoZXJlIGlzIHN1Y2ggYSB0aGluZyBhcyBDb2xkVXNlLCBp
LmUuIGEgVXNlIHRoYXQKKyAgICAgICAgZG9lc24ndCBjb3VudCBhcyBzdWNoIGZvciB0aGUgYWJv
dmUgZm9ybXVsYS4gQmVjYXVzZSBMYXRlVXNlIGlzIGFsd2F5cyB1c2VkIGluIGNvbnRleHRzIHdo
ZXJlIHdlCisgICAgICAgIHdhbnQgaXQgdG8gYmUgQ29sZCwgSSd2ZSBkZWZpbmVkIExhdGVVc2Ug
dG8gaW1wbHkgQ29sZFVzZS4KKworICAgICAgICBUaGlzIGdldHMgcmlkIG9mIGFsbCBzcGlsbGlu
ZyBpbnNpZGUgdGhlIGhvdCBsb29wIGluIEtyYWtlbi9pbWFnaW5nLWdhdXNzaWFuLWJsdXIuIEJ1
dCBtb3JlCisgICAgICAgIGltcG9ydGFudGx5LCBpdCBtYWtlcyBvdXIgcmVnaXN0ZXIgYWxsb2Nh
dG9yIHVzZSBhIHdlbGwta25vd24gaGV1cmlzdGljIGJhc2VkIG9uIHJldXNhYmxlCisgICAgICAg
IGJ1aWxkaW5nIGJsb2NrcyBsaWtlIHRoZSBuZXcgQWlyOjpVc2VDb3VudHMuIEV2ZW4gaWYgdGhl
IGhldXJpc3RpYyBpcyBzbGlnaHRseSB3cm9uZywgdGhlIHJpZ2h0CisgICAgICAgIGhldXJpc3Rp
YyBwcm9iYWJseSB1c2VzIHRoZSBzYW1lIGJ1aWxkaW5nIGJsb2Nrcy4KKworICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYjMvQjNT
dGFja21hcFNwZWNpYWwuY3BwOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjpm
b3JFYWNoQXJnSW1wbCk6CisgICAgICAgICogYjMvQjNVc2VDb3VudHMuaDoKKyAgICAgICAgKEpT
Qzo6QjM6OlVzZUNvdW50czo6bnVtVXNlcyk6CisgICAgICAgIChKU0M6OkIzOjpVc2VDb3VudHM6
Om51bVVzaW5nSW5zdHJ1Y3Rpb25zKToKKyAgICAgICAgKiBiMy9CM1ZhbHVlUmVwLmg6CisgICAg
ICAgICogYjMvYWlyL0FpckFyZy5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgor
ICAgICAgICAqIGIzL2Fpci9BaXJBcmcuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpp
c0FueVVzZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNDb2xkVXNlKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1dhcm1Vc2UpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpBcmc6OmlzRWFybHlVc2UpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzRGVmKToK
KyAgICAgICAgKiBiMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjppdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZyk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjpJdGVy
YXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjphbGxvY2F0ZWRS
ZWcpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJdGVyYXRlZFJlZ2lzdGVyQ29h
bGVzY2luZ0FsbG9jYXRvcjo6dG1wQXJyYXlTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3I6OmluaXRpYWxpemVE
ZWdyZWVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SXRlcmF0ZWRSZWdpc3Rl
ckNvYWxlc2NpbmdBbGxvY2F0b3I6OmJ1aWxkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3I6OnNlbGVjdFNwaWxsKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6aXNVc2VsZXNzTW92ZUluc3QpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjphc3NpZ25SZWdpc3RlclRvVG1wSW5Qcm9ncmFt
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6YWRkU3BpbGxBbmRGaWxsVG9Qcm9n
cmFtKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6aXRlcmF0ZWRSZWdpc3RlckNv
YWxlc2NpbmdPblR5cGUpOiBEZWxldGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJMaXZlbmVzcy5o
OgorICAgICAgICAqIGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpzcGlsbEV2ZXJ5dGhpbmcpOgorICAgICAgICAqIGIzL2Fpci9BaXJVc2VDb3Vu
dHMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OlVzZUNvdW50czo6Q291bnRzOjpk
dW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VXNlQ291bnRzOjpVc2VDb3VudHMpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpVc2VDb3VudHM6Om9wZXJhdG9yW10pOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpVc2VDb3VudHM6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdDb21tb24uaDoK
KyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKwogMjAxNS0xMS0zMCAgWXVzdWtlIFN1enVr
aSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBPYmplY3Q6OntmcmVlemUsIHNl
YWx9IHBlcmZvcm0gcHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uIHR3aWNlCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTkyODU3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTMxMCw2ICszMTAsNyBAQAogCQkwRjM3MzA4RDFDMEJEMjkxMDAwNTJCRkEg
LyogQjNQaGlDaGlsZHJlbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzNzMwOEIxQzBCRDI5MTAwMDUyQkZBIC8qIEIzUGhpQ2hpbGRyZW4uaCAqLzsg
fTsKIAkJMEYzNzMwOEYxQzBDRDY4NTAwMDUyQkZBIC8qIERpc2FsbG93TWFjcm9TY3JhdGNoUmVn
aXN0ZXJVc2FnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYzNzMwOEUxQzBDRDY4NTAwMDUyQkZBIC8qIERpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZS5oICovOyB9OwogCQkwRjM3MzA5MTFDMENENzBDMDAwNTJCRkEgLyogQWxsb3dNYWNy
b1NjcmF0Y2hSZWdpc3RlclVzYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjM3MzA5MDFDMENENzBDMDAwNTJCRkEgLyogQWxsb3dNYWNyb1NjcmF0
Y2hSZWdpc3RlclVzYWdlLmggKi87IH07CisJCTBGMzczMDkzMUMwRDY3RUUwMDA1MkJGQSAvKiBB
aXJVc2VDb3VudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMzczMDkyMUMwRDY3RUUwMDA1MkJGQSAvKiBBaXJVc2VDb3VudHMuaCAqLzsgfTsKIAkJ
MEYzOEIwMTExN0NGMDc4MDAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM4QjAwRjE3Q0YwNzdGMDBC
MTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmNwcCAqLzsgfTsKIAkJMEYzOEIwMTIxN0NGMDc4MzAw
QjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMTAxN0NGMDc3RjAwQjE0NEQzIC8qIExMSW50RW50cnlw
b2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGMzhCMDE3MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM4QjAxMzE3Q0ZFNzU1
MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25LZXkuY3BwICovOyB9OwpAQCAtMjM3OCw2ICsyMzc5
LDcgQEAKIAkJMEYzNzMwOEIxQzBCRDI5MTAwMDUyQkZBIC8qIEIzUGhpQ2hpbGRyZW4uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQaGlDaGlsZHJlbi5oOyBwYXRoID0gYjMv
QjNQaGlDaGlsZHJlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM3MzA4RTFD
MENENjg1MDAwNTJCRkEgLyogRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM3MzA5MDFDMENENzBD
MDAwNTJCRkEgLyogQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjM3MzA5MjFDMEQ2N0VFMDAwNTJCRkEgLyog
QWlyVXNlQ291bnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclVzZUNv
dW50cy5oOyBwYXRoID0gYjMvYWlyL0FpclVzZUNvdW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjM4QjAwRjE3Q0YwNzdGMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMSW50RW50cnlwb2ludC5jcHA7IHBhdGggPSBsbGludC9M
TEludEVudHJ5cG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM4QjAx
MDE3Q0YwNzdGMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExM
SW50RW50cnlwb2ludC5oOyBwYXRoID0gbGxpbnQvTExJbnRFbnRyeXBvaW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzhCMDEzMTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21w
aWxhdGlvbktleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdD
b21waWxhdGlvbktleS5jcHA7IHBhdGggPSBkZmcvREZHQ29tcGlsYXRpb25LZXkuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDY1Miw2ICs0NjU0LDcgQEAKIAkJCQkwRkVDODU2
ODFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmNwcCAqLywKIAkJCQkwRkVDODU2OTFCREFDREM3
MDA4MEZGNzQgLyogQWlyVG1wLmggKi8sCiAJCQkJMEZFQzg1NkExQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclRtcElubGluZXMuaCAqLywKKwkJCQkwRjM3MzA5MjFDMEQ2N0VFMDAwNTJCRkEgLyogQWly
VXNlQ291bnRzLmggKi8sCiAJCQkJMEZFQzg1NkIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlk
YXRlLmNwcCAqLywKIAkJCQkwRkVDODU2QzFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUu
aCAqLywKIAkJCSk7CkBAIC02NjY1LDYgKzY2NjgsNyBAQAogCQkJCTBGMzM4RTE2MUJGMDI3NkMw
MDEzQzg4RiAvKiBCM1ZhbHVlS2V5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1
NzQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGMzczMDkzMUMwRDY3RUUwMDA1MkJGQSAvKiBBaXJVc2VDb3VudHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNDU3MDM5MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29k
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NzcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckZy
ZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NzkxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckdlbmVyYXRlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAkocmV2aXNpb24gMTkyODU3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzUsNyArNzUsOCBAQCB2b2lkIFN0YWNrbWFwU3BlY2lhbDo6Zm9yRWFjaEFy
Z0ltcGwoCiAgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3Jl
ZEFpckFyZ3MsCiAgICAgSW5zdCYgaW5zdCwgQXJnOjpSb2xlIHJvbGUsIGNvbnN0IFNjb3BlZExh
bWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKIHsKLSAgICBWYWx1ZSogdmFs
dWUgPSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFja21hcFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2lu
LT5hczxTdGFja21hcFZhbHVlPigpOworICAgIEFTU0VSVCh2YWx1ZSk7CiAKICAgICAvLyBDaGVj
ayB0aGF0IGluc2FuZSB0aGluZ3MgaGF2ZSBub3QgaGFwcGVuZWQuCiAgICAgQVNTRVJUKGluc3Qu
YXJncy5zaXplKCkgPj0gbnVtSWdub3JlZEFpckFyZ3MpOwpAQCAtODQsOSArODUsMTUgQEAgdm9p
ZCBTdGFja21hcFNwZWNpYWw6OmZvckVhY2hBcmdJbXBsKAogICAgIAogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEFpckFyZ3M7ICsraSkg
ewogICAgICAgICBBcmcmIGFyZyA9IGluc3QuYXJnc1tpICsgbnVtSWdub3JlZEFpckFyZ3NdOwot
ICAgICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSArIG51bUlnbm9yZWRCM0FyZ3Mp
OworICAgICAgICBDb25zdHJhaW5lZFZhbHVlIGNoaWxkID0gdmFsdWUtPmNvbnN0cmFpbmVkQ2hp
bGQoaSArIG51bUlnbm9yZWRCM0FyZ3MpOwogCi0gICAgICAgIGNhbGxiYWNrKGFyZywgcm9sZSwg
QXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpKTsKKyAgICAgICAgQXJnOjpSb2xlIHRo
aXNSb2xlID0gcm9sZTsKKyAgICAgICAgCisgICAgICAgIC8vIENvb2wgZG93biB0aGUgcm9sZSBp
ZiB0aGUgdXNlIGlzIGNvbGQuCisgICAgICAgIGlmIChjaGlsZC5yZXAoKS5raW5kKCkgPT0gVmFs
dWVSZXA6OkFueSAmJiB0aGlzUm9sZSA9PSBBcmc6OlVzZSkKKyAgICAgICAgICAgIHRoaXNSb2xl
ID0gQXJnOjpDb2xkVXNlOworICAgICAgICAKKyAgICAgICAgY2FsbGJhY2soYXJnLCByb2xlLCBB
cmc6OnR5cGVGb3JCM1R5cGUoY2hpbGQudmFsdWUoKS0+dHlwZSgpKSk7CiAgICAgfQogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAkocmV2aXNpb24gMTkyODU3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgbnVtVXNlcyhWYWx1
ZSogdmFsdWUpIGNvbnN0IHsgcmV0dXJuIG1fY291bnRzW3ZhbHVlXS5udW1Vc2VzOyB9CiAgICAg
dW5zaWduZWQgbnVtVXNpbmdJbnN0cnVjdGlvbnMoVmFsdWUqIHZhbHVlKSBjb25zdCB7IHJldHVy
biBtX2NvdW50c1t2YWx1ZV0ubnVtVXNpbmdJbnN0cnVjdGlvbnM7IH0KLSAgICAKKwogcHJpdmF0
ZToKICAgICBzdHJ1Y3QgQ291bnRzIHsKICAgICAgICAgdW5zaWduZWQgbnVtVXNlcyB7IDAgfTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkocmV2aXNpb24gMTkyODU3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkod29ya2luZyBjb3B5
KQpAQCAtNDMsOSArNDMsMTAgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiBjbGFz
cyBWYWx1ZVJlcCB7CiBwdWJsaWM6CiAgICAgZW51bSBLaW5kIHsKLSAgICAgICAgLy8gQXMgYW4g
aW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgbWVhbnMgdGhhdCBCMyBjYW4gcGljayBhbnkgcmVw
cmVzZW50YXRpb24uIEFzIGFuCi0gICAgICAgIC8vIG91dHB1dCByZXByZXNlbnRhdGlvbiwgdGhp
cyBtZWFucyB0aGF0IHdlIGRvbid0IGtub3cuIFRoaXMgd2lsbCBvbmx5IGFyaXNlIGZvciB0aGUK
LSAgICAgICAgLy8gcmlnaHQgb3BlcmFuZCAoaS5lLiBjaGlsZCgxKSkgb2YgYSBDaGVja011bC4K
KyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgbWVhbnMgdGhhdCBC
MyBjYW4gcGljayBhbnkgcmVwcmVzZW50YXRpb24uIEl0IGFsc28gY3VycmVudGx5CisgICAgICAg
IC8vIGltcGxpZXMgdGhhdCB0aGUgdXNlIGlzIGNvbGQ6IHRoZSByZWdpc3RlciBhbGxvY2F0b3Ig
ZG9lc24ndCBjb3VudCBpdC4gQXMgYW4gb3V0cHV0CisgICAgICAgIC8vIHJlcHJlc2VudGF0aW9u
LCB0aGlzIG1lYW5zIHRoYXQgd2UgZG9uJ3Qga25vdy4gVGhpcyB3aWxsIG9ubHkgYXJpc2UgYXMg
YW4gb3V0cHV0CisgICAgICAgIC8vIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgYWN0aXZlIGFyZ3Vt
ZW50cyBvZiBDaGVjay9DaGVja0FkZC9DaGVja1N1Yi9DaGVja011bC4KICAgICAgICAgQW55LAog
CiAgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQg
QjMgc2hvdWxkIHBpY2sgc29tZSByZWdpc3Rlci4gSXQgY291bGQgYmUgYQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkocmV2aXNpb24gMTkyODU3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODEsNiArMTgxLDkgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFyZwog
ICAgIGNhc2UgQXJnOjpVc2VBZGRyOgogICAgICAgICBvdXQucHJpbnQoIlVzZUFkZHIiKTsKICAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpDb2xkVXNlOgorICAgICAgICBvdXQucHJpbnQo
IkNvbGRVc2UiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJnOjpMYXRlVXNlOgogICAg
ICAgICBvdXQucHJpbnQoIkxhdGVVc2UiKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCShyZXZpc2lvbiAxOTI4NTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Myw4ICs4
MywxMyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIGFsd2F5cyBlc2NhcGluZywgYW5kIFN0YWNrIGlz
IHByZXN1bWVkIHRvIGJlIGFsd2F5cyBlc2NhcGluZyBpZiBpdCdzIExvY2tlZC4KICAgICAgICAg
VXNlLAogCisgICAgICAgIC8vIEV4YWN0bHkgbGlrZSBVc2UsIGV4Y2VwdCB0aGF0IGl0IGFsc28g
aW1wbGllcyB0aGF0IHRoZSB1c2UgaXMgY29sZDogdGhhdCBpcywgcmVwbGFjaW5nIHRoZQorICAg
ICAgICAvLyB1c2Ugd2l0aCBzb21ldGhpbmcgb24gdGhlIHN0YWNrIGlzIGZyZWUuCisgICAgICAg
IENvbGRVc2UsCisKICAgICAgICAgLy8gTGF0ZVVzZSBtZWFucyB0aGF0IHRoZSBJbnN0IHdpbGwg
cmVhZCBmcm9tIHRoaXMgdmFsdWUgYWZ0ZXIgZG9pbmcgaXRzIERlZidzLiBOb3RlIHRoYXQgTGF0
ZVVzZQotICAgICAgICAvLyBvbiBhbiBBZGRyIG9yIEluZGV4IHN0aWxsIG1lYW5zIFVzZSBvbiB0
aGUgaW50ZXJuYWwgdGVtcG9yYXJpZXMuCisgICAgICAgIC8vIG9uIGFuIEFkZHIgb3IgSW5kZXgg
c3RpbGwgbWVhbnMgVXNlIG9uIHRoZSBpbnRlcm5hbCB0ZW1wb3Jhcmllcy4gTGF0ZVVzZSBhbHNv
IGN1cnJlbnRseSBhbHNvCisgICAgICAgIC8vIGltcGxpZXMgQ29sZFVzZS4KICAgICAgICAgTGF0
ZVVzZSwKIAogICAgICAgICAvLyBEZWYgbWVhbnMgdGhhdCB0aGUgSW5zdCB3aWxsIHdyaXRlIHRv
IHRoaXMgdmFsdWUgYWZ0ZXIgZG9pbmcgZXZlcnl0aGluZyBlbHNlLgpAQCAtMTMyLDYgKzEzNyw3
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN3aXRjaCAocm9sZSkgewogICAgICAgICBjYXNl
IFVzZToKKyAgICAgICAgY2FzZSBDb2xkVXNlOgogICAgICAgICBjYXNlIFVzZURlZjoKICAgICAg
ICAgY2FzZSBMYXRlVXNlOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNDEsMTEgKzE0
NywzMSBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBzdGF0aWMgYm9vbCBpc0Nv
bGRVc2UoUm9sZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAg
IGNhc2UgQ29sZFVzZToKKyAgICAgICAgY2FzZSBMYXRlVXNlOgorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGNhc2UgVXNlOgorICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAg
Y2FzZSBEZWY6CisgICAgICAgIGNhc2UgVXNlQWRkcjoKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzV2FybVVzZShSb2xlIHJv
bGUpCisgICAgeworICAgICAgICByZXR1cm4gaXNBbnlVc2Uocm9sZSkgJiYgIWlzQ29sZFVzZShy
b2xlKTsKKyAgICB9CisKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIFJvbGUgaW1wbGllcyB0
aGF0IHRoZSBJbnN0IHdpbGwgVXNlIHRoZSBBcmcgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2Uu
CiAgICAgc3RhdGljIGJvb2wgaXNFYXJseVVzZShSb2xlIHJvbGUpCiAgICAgewogICAgICAgICBz
d2l0Y2ggKHJvbGUpIHsKICAgICAgICAgY2FzZSBVc2U6CisgICAgICAgIGNhc2UgQ29sZFVzZToK
ICAgICAgICAgY2FzZSBVc2VEZWY6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
Y2FzZSBEZWY6CkBAIC0xNjYsNiArMTkyLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgc3dp
dGNoIChyb2xlKSB7CiAgICAgICAgIGNhc2UgVXNlOgorICAgICAgICBjYXNlIENvbGRVc2U6CiAg
ICAgICAgIGNhc2UgVXNlQWRkcjoKICAgICAgICAgY2FzZSBMYXRlVXNlOgogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVy
YXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAJKHJldmlzaW9u
IDE5Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdp
c3RlckNvYWxlc2NpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxNCArMzUsMTcgQEAKICNp
bmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCiAjaW5jbHVkZSAiQWlyUmVnaXN0ZXJQcmlvcml0eS5o
IgogI2luY2x1ZGUgIkFpclRtcElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJVc2VDb3VudHMuaCIK
ICNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4K
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewogCi1zdGF0
aWMgYm9vbCBkZWJ1ZyA9IGZhbHNlOwotc3RhdGljIGJvb2wgdHJhY2VEZWJ1ZyA9IGZhbHNlOwot
c3RhdGljIGJvb2wgcmVwb3J0U3RhdHMgPSBmYWxzZTsKK25hbWVzcGFjZSB7CisKK2Jvb2wgZGVi
dWcgPSBmYWxzZTsKK2Jvb2wgdHJhY2VEZWJ1ZyA9IGZhbHNlOworYm9vbCByZXBvcnRTdGF0cyA9
IGZhbHNlOwogCiB0ZW1wbGF0ZTxBcmc6OlR5cGUgdHlwZT4KIHN0cnVjdCBNb3ZlSW5zdEhlbHBl
cjsKQEAgLTgxLDE5ICs4NCwyMiBAQCBzdHJ1Y3QgTW92ZUluc3RIZWxwZXI8QXJnOjpGUD4gewog
dGVtcGxhdGU8QXJnOjpUeXBlIHR5cGU+CiBjbGFzcyBJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2lu
Z0FsbG9jYXRvciB7CiBwdWJsaWM6Ci0gICAgSXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxv
Y2F0b3IoQ29kZSYgY29kZSwgY29uc3QgSGFzaFNldDxUbXA+JiB1bnNwaWxsYWJsZVRtcCkKLSAg
ICAgICAgOiBtX3Vuc3BpbGxhYmxlVG1wKHVuc3BpbGxhYmxlVG1wKQorICAgIEl0ZXJhdGVkUmVn
aXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yKAorICAgICAgICBDb2RlJiBjb2RlLCBjb25zdCBVc2VD
b3VudHM8VG1wPiYgdXNlQ291bnRzLCBjb25zdCBIYXNoU2V0PFRtcD4mIHVuc3BpbGxhYmxlVG1w
KQorICAgICAgICA6IG1fY29kZShjb2RlKQorICAgICAgICAsIG1fdXNlQ291bnRzKHVzZUNvdW50
cykKKyAgICAgICAgLCBtX3Vuc3BpbGxhYmxlVG1wKHVuc3BpbGxhYmxlVG1wKQogICAgICAgICAs
IG1fbnVtYmVyT2ZSZWdpc3RlcnMocmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKS5zaXplKCkpCiAg
ICAgewotICAgICAgICBpbml0aWFsaXplRGVncmVlcyhjb2RlKTsKKyAgICAgICAgaW5pdGlhbGl6
ZURlZ3JlZXMoKTsKIAotICAgICAgICB1bnNpZ25lZCB0bXBBcnJheVNpemUgPSB0aGlzLT50bXBB
cnJheVNpemUoY29kZSk7CisgICAgICAgIHVuc2lnbmVkIHRtcEFycmF5U2l6ZSA9IHRoaXMtPnRt
cEFycmF5U2l6ZSgpOwogICAgICAgICBtX2FkamFjZW5jeUxpc3QucmVzaXplKHRtcEFycmF5U2l6
ZSk7CiAgICAgICAgIG1fbW92ZUxpc3QucmVzaXplKHRtcEFycmF5U2l6ZSk7CiAgICAgICAgIG1f
Y29hbGVzY2VkVG1wcy5yZXNpemUodG1wQXJyYXlTaXplKTsKICAgICAgICAgbV9pc09uU2VsZWN0
U3RhY2suZW5zdXJlU2l6ZSh0bXBBcnJheVNpemUpOwogCi0gICAgICAgIGJ1aWxkKGNvZGUpOwor
ICAgICAgICBidWlsZCgpOwogICAgICAgICBhbGxvY2F0ZSgpOwogICAgIH0KIApAQCAtMTM4LDE1
ICsxNDQsMTUgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgdW5zaWdu
ZWQgdG1wQXJyYXlTaXplKENvZGUmIGNvZGUpCisgICAgdW5zaWduZWQgdG1wQXJyYXlTaXplKCkK
ICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIG51bVRtcHMgPSBjb2RlLm51bVRtcHModHlwZSk7Cisg
ICAgICAgIHVuc2lnbmVkIG51bVRtcHMgPSBtX2NvZGUubnVtVG1wcyh0eXBlKTsKICAgICAgICAg
cmV0dXJuIEFic29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KG51bVRtcHMpOwog
ICAgIH0KIAotICAgIHZvaWQgaW5pdGlhbGl6ZURlZ3JlZXMoQ29kZSYgY29kZSkKKyAgICB2b2lk
IGluaXRpYWxpemVEZWdyZWVzKCkKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIHRtcEFycmF5U2l6
ZSA9IHRoaXMtPnRtcEFycmF5U2l6ZShjb2RlKTsKKyAgICAgICAgdW5zaWduZWQgdG1wQXJyYXlT
aXplID0gdGhpcy0+dG1wQXJyYXlTaXplKCk7CiAgICAgICAgIG1fZGVncmVlcy5yZXNpemUodG1w
QXJyYXlTaXplKTsKIAogICAgICAgICAvLyBBbGwgcHJlY29sb3JlZCByZWdpc3RlcnMgaGF2ZSAg
YW4gImluZmluaXRlIiBkZWdyZWUuCkBAIC0xNTcsMTAgKzE2MywxMCBAQCBwcml2YXRlOgogICAg
ICAgICBiemVybyhtX2RlZ3JlZXMuZGF0YSgpICsgZmlyc3ROb25SZWdJbmRleCwgKHRtcEFycmF5
U2l6ZSAtIGZpcnN0Tm9uUmVnSW5kZXgpICogc2l6ZW9mKHVuc2lnbmVkKSk7CiAgICAgfQogCi0g
ICAgdm9pZCBidWlsZChDb2RlJiBjb2RlKQorICAgIHZvaWQgYnVpbGQoKQogICAgIHsKLSAgICAg
ICAgVG1wTGl2ZW5lc3M8dHlwZT4gbGl2ZW5lc3MoY29kZSk7Ci0gICAgICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIFRtcExpdmVuZXNzPHR5cGU+IGxpdmVuZXNz
KG1fY29kZSk7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKICAg
ICAgICAgICAgIHR5cGVuYW1lIFRtcExpdmVuZXNzPHR5cGU+OjpMb2NhbENhbGMgbG9jYWxDYWxj
KGxpdmVuZXNzLCBibG9jayk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9
IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgewogICAgICAgICAgICAgICAgIEluc3QmIGlu
c3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKQEAgLTU1NSwxOCArNTYxLDMyIEBAIHByaXZhdGU6
CiAKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXJhdG9yICE9IG1fc3Bp
bGxXb3JrbGlzdC5lbmQoKSwgIkl0IGlzIG5vdCBwb3NzaWJsZSB0byBjb2xvciB0aGUgQWlyIGdy
YXBoIHdpdGggdGhlIG51bWJlciBvZiBhdmFpbGFibGUgcmVnaXN0ZXJzLiIpOwogCisgICAgICAg
IC8vIEhpZ2hlciBzY29yZSBtZWFucyBtb3JlIGRlc2lyYWJsZSB0byBzcGlsbC4gTG93ZXIgc2Nv
cmVzIG1heGltaXplIHRoZSBsaWtlbGlob29kIHRoYXQgYSB0bXAKKyAgICAgICAgLy8gZ2V0cyBh
IHJlZ2lzdGVyLgorICAgICAgICBhdXRvIHNjb3JlID0gWyZdIChUbXAgdG1wKSAtPiBkb3VibGUg
eworICAgICAgICAgICAgLy8gQWxsIGVsc2UgYmVpbmcgZXF1YWwsIHRoZSBzY29yZSBzaG91bGQg
YmUgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgZGVncmVlLgorICAgICAgICAgICAgZG91YmxlIGRl
Z3JlZSA9IHN0YXRpY19jYXN0PGRvdWJsZT4obV9kZWdyZWVzW0Fic29sdXRlVG1wTWFwcGVyPHR5
cGU+OjphYnNvbHV0ZUluZGV4KHRtcCldKTsKKworICAgICAgICAgICAgLy8gQWxsIGVsc2UgYmVp
bmcgZXF1YWwsIHRoZSBzY29yZSBzaG91bGQgYmUgaW52ZXJzZWx5IHJlbGF0ZWQgdG8gdGhlIG51
bWJlciBvZiB3YXJtIHVzZXMgYW5kCisgICAgICAgICAgICAvLyBkZWZzLgorICAgICAgICAgICAg
Y29uc3QgVXNlQ291bnRzPFRtcD46OkNvdW50cyYgY291bnRzID0gbV91c2VDb3VudHNbdG1wXTsK
KyAgICAgICAgICAgIGRvdWJsZSB1c2VzID0gY291bnRzLm51bVdhcm1Vc2VzICsgY291bnRzLm51
bURlZnM7CisKKyAgICAgICAgICAgIHJldHVybiBkZWdyZWUgLyB1c2VzOworICAgICAgICB9Owor
CiAgICAgICAgIGF1dG8gdmljdGltSXRlcmF0b3IgPSBpdGVyYXRvcjsKLSAgICAgICAgdW5zaWdu
ZWQgbWF4RGVncmVlID0gbV9kZWdyZWVzW0Fic29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0
ZUluZGV4KCppdGVyYXRvcildOworICAgICAgICBkb3VibGUgbWF4U2NvcmUgPSBzY29yZSgqaXRl
cmF0b3IpOwogCiAgICAgICAgICsraXRlcmF0b3I7CiAgICAgICAgIGZvciAoO2l0ZXJhdG9yICE9
IG1fc3BpbGxXb3JrbGlzdC5lbmQoKTsgKytpdGVyYXRvcikgewotICAgICAgICAgICAgdW5zaWdu
ZWQgdG1wRGVncmVlID0gbV9kZWdyZWVzW0Fic29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0
ZUluZGV4KCppdGVyYXRvcildOwotICAgICAgICAgICAgaWYgKHRtcERlZ3JlZSA+IG1heERlZ3Jl
ZSkgeworICAgICAgICAgICAgZG91YmxlIHRtcFNjb3JlID0gc2NvcmUoKml0ZXJhdG9yKTsKKyAg
ICAgICAgICAgIGlmICh0bXBTY29yZSA+IG1heFNjb3JlKSB7CiAgICAgICAgICAgICAgICAgaWYg
KG1fdW5zcGlsbGFibGVUbXAuY29udGFpbnMoKml0ZXJhdG9yKSkKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAKICAgICAgICAgICAgICAgICB2aWN0aW1JdGVyYXRvciA9IGl0ZXJhdG9y
OwotICAgICAgICAgICAgICAgIG1heERlZ3JlZSA9IHRtcERlZ3JlZTsKKyAgICAgICAgICAgICAg
ICBtYXhTY29yZSA9IHRtcFNjb3JlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTc3
OCw2ICs3OTgsOSBAQCBwcml2YXRlOgogICAgIH07CiAgICAgdHlwZWRlZiBTaW1wbGVDbGFzc0hh
c2hUcmFpdHM8SW50ZXJmZXJlbmNlRWRnZT4gSW50ZXJmZXJlbmNlRWRnZUhhc2hUcmFpdHM7CiAK
KyAgICBDb2RlJiBtX2NvZGU7CisgICAgY29uc3QgVXNlQ291bnRzPFRtcD4mIG1fdXNlQ291bnRz
OworCiAgICAgY29uc3QgSGFzaFNldDxUbXA+JiBtX3Vuc3BpbGxhYmxlVG1wOwogICAgIHVuc2ln
bmVkIG1fbnVtYmVyT2ZSZWdpc3RlcnMgeyAwIH07CiAKQEAgLTkwMSwxMyArOTI0LDEzIEBAIHBy
aXZhdGU6CiB9OwogCiB0ZW1wbGF0ZTxBcmc6OlR5cGUgdHlwZT4KLXN0YXRpYyBib29sIGlzVXNl
bGVzc01vdmVJbnN0KGNvbnN0IEluc3QmIGluc3QpCitib29sIGlzVXNlbGVzc01vdmVJbnN0KGNv
bnN0IEluc3QmIGluc3QpCiB7CiAgICAgcmV0dXJuIE1vdmVJbnN0SGVscGVyPHR5cGU+OjptYXlC
ZUNvYWxlc2NhYmxlKGluc3QpICYmIGluc3QuYXJnc1swXS50bXAoKSA9PSBpbnN0LmFyZ3NbMV0u
dG1wKCk7CiB9CiAKIHRlbXBsYXRlPEFyZzo6VHlwZSB0eXBlPgotc3RhdGljIHZvaWQgYXNzaWdu
UmVnaXN0ZXJUb1RtcEluUHJvZ3JhbShDb2RlJiBjb2RlLCBjb25zdCBJdGVyYXRlZFJlZ2lzdGVy
Q29hbGVzY2luZ0FsbG9jYXRvcjx0eXBlPiYgYWxsb2NhdG9yKQordm9pZCBhc3NpZ25SZWdpc3Rl
clRvVG1wSW5Qcm9ncmFtKENvZGUmIGNvZGUsIGNvbnN0IEl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNj
aW5nQWxsb2NhdG9yPHR5cGU+JiBhbGxvY2F0b3IpCiB7CiAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IGNvZGUpIHsKICAgICAgICAgLy8gR2l2ZSBUbXAgYSB2YWxpZCByZWdpc3Rlci4KQEAg
LTkzNyw3ICs5NjAsNyBAQCBzdGF0aWMgdm9pZCBhc3NpZ25SZWdpc3RlclRvVG1wSW5Qcm9ncmFt
CiB9CiAKIHRlbXBsYXRlPEFyZzo6VHlwZSB0eXBlPgotc3RhdGljIHZvaWQgYWRkU3BpbGxBbmRG
aWxsVG9Qcm9ncmFtKENvZGUmIGNvZGUsIGNvbnN0IEl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5n
QWxsb2NhdG9yPHR5cGU+JiBhbGxvY2F0b3IsIEhhc2hTZXQ8VG1wPiYgdW5zcGlsbGFibGVUbXAp
Cit2b2lkIGFkZFNwaWxsQW5kRmlsbFRvUHJvZ3JhbShDb2RlJiBjb2RlLCBjb25zdCBJdGVyYXRl
ZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRvcjx0eXBlPiYgYWxsb2NhdG9yLCBIYXNoU2V0PFRt
cD4mIHVuc3BpbGxhYmxlVG1wKQogewogICAgIGNvbnN0IEhhc2hTZXQ8VG1wPiYgc3BpbGxlZFRt
cCA9IGFsbG9jYXRvci5zcGlsbGVkVG1wKCk7CiAKQEAgLTEwMDcsMTIgKzEwMzAsMTMgQEAgc3Rh
dGljIHZvaWQgYWRkU3BpbGxBbmRGaWxsVG9Qcm9ncmFtKENvZAogfQogCiB0ZW1wbGF0ZTxBcmc6
OlR5cGUgdHlwZT4KLXN0YXRpYyB2b2lkIGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nT25UeXBl
KENvZGUmIGNvZGUsIHVuc2lnbmVkJiBudW1JdGVyYXRpb25zKQordm9pZCBpdGVyYXRlZFJlZ2lz
dGVyQ29hbGVzY2luZ09uVHlwZSgKKyAgICBDb2RlJiBjb2RlLCBjb25zdCBVc2VDb3VudHM8VG1w
PiYgdXNlQ291bnRzLCB1bnNpZ25lZCYgbnVtSXRlcmF0aW9ucykKIHsKICAgICBIYXNoU2V0PFRt
cD4gdW5zcGlsbGFibGVUbXBzOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIG51bUl0ZXJh
dGlvbnMrKzsKLSAgICAgICAgSXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3I8dHlw
ZT4gYWxsb2NhdG9yKGNvZGUsIHVuc3BpbGxhYmxlVG1wcyk7CisgICAgICAgIEl0ZXJhdGVkUmVn
aXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yPHR5cGU+IGFsbG9jYXRvcihjb2RlLCB1c2VDb3VudHMs
IHVuc3BpbGxhYmxlVG1wcyk7CiAgICAgICAgIGlmIChhbGxvY2F0b3Iuc3BpbGxlZFRtcCgpLmlz
RW1wdHkoKSkgewogICAgICAgICAgICAgYXNzaWduUmVnaXN0ZXJUb1RtcEluUHJvZ3JhbShjb2Rl
LCBhbGxvY2F0b3IpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTAyMSwxNCArMTA0NSwxNyBA
QCBzdGF0aWMgdm9pZCBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ09uCiAgICAgfQogfQogCit9
IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwogdm9pZCBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2lu
ZyhDb2RlJiBjb2RlKQogewogICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAiaXRlcmF0
ZWRSZWdpc3RlckNvYWxlc2NpbmciKTsKIAogICAgIHVuc2lnbmVkIG51bUl0ZXJhdGlvbnMgPSAw
OwogCi0gICAgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdPblR5cGU8QXJnOjpHUD4oY29kZSwg
bnVtSXRlcmF0aW9ucyk7Ci0gICAgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdPblR5cGU8QXJn
OjpGUD4oY29kZSwgbnVtSXRlcmF0aW9ucyk7CisgICAgVXNlQ291bnRzPFRtcD4gdXNlQ291bnRz
KGNvZGUpOworICAgIGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nT25UeXBlPEFyZzo6R1A+KGNv
ZGUsIHVzZUNvdW50cywgbnVtSXRlcmF0aW9ucyk7CisgICAgaXRlcmF0ZWRSZWdpc3RlckNvYWxl
c2NpbmdPblR5cGU8QXJnOjpGUD4oY29kZSwgdXNlQ291bnRzLCBudW1JdGVyYXRpb25zKTsKIAog
ICAgIGlmIChyZXBvcnRTdGF0cykKICAgICAgICAgZGF0YUxvZygiTnVtIGl0ZXJhdGlvbnMgPSAi
LCBudW1JdGVyYXRpb25zLCAiXG4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyTGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckxpdmVuZXNzLmgJKHJldmlzaW9uIDE5Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBA
QAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisjaW5j
bHVkZSAiQWlySW5zdElubGluZXMuaCIKICNpbmNsdWRlICJBaXJUbXBJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiQjNJbmRleE1hcC5oIgogI2luY2x1ZGUgIkIzSW5kZXhTZXQuaCIKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJ
KHJldmlzaW9uIDE5Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3Bp
bGxFdmVyeXRoaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDYgKzEzMCw3IEBAIHZvaWQg
c3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgICAgIFJlZyBjaG9z
ZW5SZWc7CiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocm9sZSkgewogICAgICAgICAgICAg
ICAgICAgICBjYXNlIEFyZzo6VXNlOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6Q29s
ZFVzZToKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9y
aXR5T3JkZXIodHlwZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEJl
Zm9yZS5nZXQocmVnKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRCZWZv
cmUuc2V0KHJlZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclVzZUNv
dW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVXNl
Q291bnRzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clVzZUNvdW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyVXNlQ291bnRz
X2gKKyNkZWZpbmUgQWlyVXNlQ291bnRzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJBaXJBcmcuaCIKKyNpbmNsdWRlICJBaXJCbG9ja1dvcmtsaXN0LmgiCisjaW5jbHVkZSAi
QWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBDb21wdXRl
cyB0aGUgbnVtYmVyIG9mIHVzZXMgb2YgYSB2YXJpYWJsZSBiYXNlZCBvbiBmcmVxdWVuY3kgb2Yg
ZXhlY3V0aW9uLiBUaGUgZnJlcXVlbmN5IG9mIGJsb2NrcworLy8gdGhhdCBhcmUgb25seSByZWFj
aGFibGUgYnkgcmFyZSBlZGdlcyBpcyBzY2FsZWQgYnkgT3B0aW9uczo6cmFyZUJsb2NrUGVuYWx0
eSgpLgorCisvLyBUaGluZyBjYW4gYmUgZWl0aGVyIFRtcCBvciBBcmcuCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUaGluZz4KK2NsYXNzIFVzZUNvdW50cyB7CitwdWJsaWM6CisgICAgc3RydWN0IENvdW50
cyB7CisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICBvdXQucHJpbnQoCisgICAgICAgICAgICAgICAgIntudW1XYXJtVXNlcyA9
ICIsIG51bVdhcm1Vc2VzLCAiLCBudW1Db2xkVXNlcyA9ICIsIG51bUNvbGRVc2VzLCAiLCBudW1E
ZWZzID0gIiwKKyAgICAgICAgICAgICAgICBudW1EZWZzLCAifSIpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBkb3VibGUgbnVtV2FybVVzZXMgeyAwIH07CisgICAgICAgIGRvdWJsZSBu
dW1Db2xkVXNlcyB7IDAgfTsKKyAgICAgICAgZG91YmxlIG51bURlZnMgeyAwIH07CisgICAgfTsK
KyAgICAKKyAgICBVc2VDb3VudHMoQ29kZSYgY29kZSkKKyAgICB7CisgICAgICAgIC8vIEZpbmQg
bm9uLXJhcmUgYmxvY2tzLgorICAgICAgICBCbG9ja1dvcmtsaXN0IGZhc3RXb3JrbGlzdDsKKyAg
ICAgICAgZmFzdFdvcmtsaXN0LnB1c2goY29kZVswXSk7CisgICAgICAgIHdoaWxlIChCYXNpY0Js
b2NrKiBibG9jayA9IGZhc3RXb3JrbGlzdC5wb3AoKSkgeworICAgICAgICAgICAgZm9yIChGcmVx
dWVudGVkQmxvY2smIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIXN1Y2Nlc3Nvci5pc1JhcmUoKSkKKyAgICAgICAgICAgICAgICAgICAgZmFz
dFdvcmtsaXN0LnB1c2goc3VjY2Vzc29yLmJsb2NrKCkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewor
ICAgICAgICAgICAgZG91YmxlIGZyZXF1ZW5jeSA9IGJsb2NrLT5mcmVxdWVuY3koKTsKKyAgICAg
ICAgICAgIGlmICghZmFzdFdvcmtsaXN0LnNhdyhibG9jaykpCisgICAgICAgICAgICAgICAgZnJl
cXVlbmN5ICo9IE9wdGlvbnM6OnJhcmVCbG9ja1BlbmFsdHkoKTsKKyAgICAgICAgICAgIGZvciAo
SW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaDxUaGlu
Zz4oCisgICAgICAgICAgICAgICAgICAgIFsmXSAoVGhpbmcmIGFyZywgQXJnOjpSb2xlIHJvbGUs
IEFyZzo6VHlwZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQ291bnRzJiBjb3VudHMgPSBt
X2NvdW50cy5hZGQoYXJnLCBDb3VudHMoKSkuaXRlcmF0b3ItPnZhbHVlOworCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoQXJnOjppc1dhcm1Vc2Uocm9sZSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY291bnRzLm51bVdhcm1Vc2VzICs9IGZyZXF1ZW5jeTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChBcmc6OmlzQ29sZFVzZShyb2xlKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb3VudHMubnVtQ29sZFVzZXMgKz0gZnJlcXVlbmN5OworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKEFyZzo6aXNEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY291bnRzLm51bURlZnMgKz0gZnJlcXVlbmN5OworICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnN0IENvdW50cyYg
b3BlcmF0b3JbXShjb25zdCBUaGluZyYgYXJnKSBjb25zdCB7IHJldHVybiBtX2NvdW50cy5maW5k
KGFyZyktPnZhbHVlOyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
KyAgICB7CisgICAgICAgIG91dC5wcmludChtYXBEdW1wKG1fY291bnRzKSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIEhhc2hNYXA8VGhpbmcsIENvdW50cz4gbV9jb3VudHM7Cit9OworCit9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQWlyVXNlQ291bnRzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxOTI4NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIC8vIFdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFuIGV4
cGVyaW1lbnRhbCB0cmFuc2l0aW9uIGZyb20gTExWTSB0byBCMyBhcyB0aGUgYmFja2VuZCBmb3Ig
dGhlIEZUTC4gV2UgZG9uJ3QKIC8vIHlldCBrbm93IGhvdyBpdCB3aWxsIHR1cm4gb3V0LiBGb3Ig
bm93LCB0aGlzIGZsYWcgd2lsbCBjb250cm9sIHdoZXRoZXIgRlRMIHVzZXMgQjMuIFJlbWVtYmVy
IHRvIHNldCB0aGlzCiAvLyB0byAwIGJlZm9yZSBjb21taXR0aW5nIQotI2RlZmluZSBGVExfVVNF
U19CMyAwCisjZGVmaW5lIEZUTF9VU0VTX0IzIDEKIAogc3RydWN0IE5vZGU7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE5Mjg1NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzM4LDYgKzMzOCw3IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAg
IHYodW5zaWduZWQsIGZpcmVPU1JFeGl0RnV6ekF0T3JBZnRlciwgMCwgbnVsbHB0cikgXAogICAg
IFwKICAgICB2KGJvb2wsIGxvZ0IzUGhhc2VUaW1lcywgZmFsc2UsIG51bGxwdHIpIFwKKyAgICB2
KGRvdWJsZSwgcmFyZUJsb2NrUGVuYWx0eSwgMC4wMDEsIG51bGxwdHIpIFwKICAgICBcCiAgICAg
dihib29sLCB1c2VEb2xsYXJWTSwgZmFsc2UsICJpbnN0YWxscyB0aGUgJHZtIGRlYnVnZ2luZyB0
b29sIGluIGdsb2JhbCBvYmplY3RzIikgXAogICAgIHYob3B0aW9uU3RyaW5nLCBmdW5jdGlvbk92
ZXJyaWRlcywgbnVsbHB0ciwgImZpbGUgd2l0aCBkZWJ1Z2dpbmcgb3ZlcnJpZGVzIGZvciBmdW5j
dGlvbiBib2RpZXMiKSBcCg==
</data>
<flag name="review"
          id="291343"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266335</attachid>
            <date>2015-11-30 22:23:40 -0800</date>
            <delta_ts>2015-11-30 22:40:37 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>25566</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyODYwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBA
CisyMDE1LTExLTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjM6OlZhbHVlUmVwOjpBbnkgc2hvdWxkIHRyYW5zbGF0ZSBpbnRvIGEgQXJnOjpDb2xkVXNlIHJv
bGUgaW4gQWlyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTExNzQKKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbiBhbmQgQmVuamFt
aW4gUG91bGFpbi4KKworICAgICAgICBUaGlzIHRlYWNoZXMgdGhlIHJlZ2lzdGVyIGFsbG9jYXRv
ciB0aGF0IGl0IHNob3VsZCBwaWNrIHNwaWxscyBiYXNlZCBvbiB3aGljaGV2ZXIgdG1wIGhhcyB0
aGUKKyAgICAgICAgaGlnaGVzdCBzY29yZToKKworICAgICAgICAgICAgc2NvcmUodG1wKSA9IGRl
Z3JlZSh0bXApIC8gc3VtKGZvciBlYWNoIHVzZSBvZiB0bXAsIGJsb2NrLT5mcmVxdWVuY3kpCisK
KyAgICAgICAgSW4gb3RoZXIgd29yZHMsIHRoZSBudW1lcmF0b3IgaXMgdGhlIG51bWJlciBvZiBl
ZGdlcyBpbiB0aGUgaW50ZWZlcmVuY2UgZ3JhcGggYW5kIHRoZSBkZW5vbWluYXRvcgorICAgICAg
ICBpcyBhbiBlc3RpbWF0ZSBvZiB0aGUgZHluYW1pYyBudW1iZXIgb2YgdXNlcy4KKworICAgICAg
ICBUaGlzIGFsc28gZXh0ZW5kcyBBcmc6OlJvbGUgdG8ga25vdyB0aGF0IHRoZXJlIGlzIHN1Y2gg
YSB0aGluZyBhcyBDb2xkVXNlLCBpLmUuIGEgVXNlIHRoYXQKKyAgICAgICAgZG9lc24ndCBjb3Vu
dCBhcyBzdWNoIGZvciB0aGUgYWJvdmUgZm9ybXVsYS4gQmVjYXVzZSBMYXRlVXNlIGlzIGFsd2F5
cyB1c2VkIGluIGNvbnRleHRzIHdoZXJlIHdlCisgICAgICAgIHdhbnQgaXQgdG8gYmUgQ29sZCwg
SSd2ZSBkZWZpbmVkIExhdGVVc2UgdG8gaW1wbHkgQ29sZFVzZS4KKworICAgICAgICBUaGlzIGdl
dHMgcmlkIG9mIGFsbCBzcGlsbGluZyBpbnNpZGUgdGhlIGhvdCBsb29wIGluIEtyYWtlbi9pbWFn
aW5nLWdhdXNzaWFuLWJsdXIuIEJ1dCBtb3JlCisgICAgICAgIGltcG9ydGFudGx5LCBpdCBtYWtl
cyBvdXIgcmVnaXN0ZXIgYWxsb2NhdG9yIHVzZSBhIHdlbGwta25vd24gaGV1cmlzdGljIGJhc2Vk
IG9uIHJldXNhYmxlCisgICAgICAgIGJ1aWxkaW5nIGJsb2NrcyBsaWtlIHRoZSBuZXcgQWlyOjpV
c2VDb3VudHMuIEV2ZW4gaWYgdGhlIGhldXJpc3RpYyBpcyBzbGlnaHRseSB3cm9uZywgdGhlIHJp
Z2h0CisgICAgICAgIGhldXJpc3RpYyBwcm9iYWJseSB1c2VzIHRoZSBzYW1lIGJ1aWxkaW5nIGJs
b2Nrcy4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwOgorICAgICAgICAoSlNDOjpC
Mzo6U3RhY2ttYXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1wbCk6CisgICAgICAgICogYjMvQjNWYWx1
ZVJlcC5oOgorICAgICAgICAqIGIzL2Fpci9BaXJBcmcuY3BwOgorICAgICAgICAoV1RGOjpwcmlu
dEludGVybmFsKToKKyAgICAgICAgKiBiMy9haXIvQWlyQXJnLmg6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6aXNBbnlVc2UpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzQ29s
ZFVzZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNXYXJtVXNlKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QXJnOjppc0Vhcmx5VXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjppc0RlZik6CisgICAgICAgICogYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNj
aW5nLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6aXRlcmF0ZWRSZWdpc3RlckNvYWxlc2Np
bmcpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0Fs
bG9jYXRvcjo6SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3IpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRv
cjo6YWxsb2NhdGVkUmVnKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SXRlcmF0
ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3I6OnRtcEFycmF5U2l6ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9y
Ojppbml0aWFsaXplRGVncmVlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6Okl0
ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjpidWlsZCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjpz
ZWxlY3RTcGlsbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmlzVXNlbGVzc01v
dmVJbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6YXNzaWduUmVnaXN0ZXJU
b1RtcEluUHJvZ3JhbSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmFkZFNwaWxs
QW5kRmlsbFRvUHJvZ3JhbSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6Oml0ZXJh
dGVkUmVnaXN0ZXJDb2FsZXNjaW5nT25UeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBiMy9haXIv
QWlyTGl2ZW5lc3MuaDoKKyAgICAgICAgKiBiMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6c3BpbGxFdmVyeXRoaW5nKToKKyAgICAgICAgKiBiMy9h
aXIvQWlyVXNlQ291bnRzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpVc2VDb3Vu
dHM6OkNvdW50czo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlVzZUNvdW50czo6VXNl
Q291bnRzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VXNlQ291bnRzOjpvcGVyYXRvcltdKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VXNlQ291bnRzOjpkdW1wKToKKyAgICAgICAgKiBydW50
aW1lL09wdGlvbnMuaDoKKwogMjAxNS0xMS0zMCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVh
QGdtYWlsLmNvbT4KIAogICAgICAgICBPYmplY3Q6OntmcmVlemUsIHNlYWx9IHBlcmZvcm0gcHJl
dmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uIHR3aWNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMTkyODU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMx
MCw2ICszMTAsNyBAQAogCQkwRjM3MzA4RDFDMEJEMjkxMDAwNTJCRkEgLyogQjNQaGlDaGlsZHJl
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNzMw
OEIxQzBCRDI5MTAwMDUyQkZBIC8qIEIzUGhpQ2hpbGRyZW4uaCAqLzsgfTsKIAkJMEYzNzMwOEYx
QzBDRDY4NTAwMDUyQkZBIC8qIERpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNzMwOEUxQzBD
RDY4NTAwMDUyQkZBIC8qIERpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oICovOyB9
OwogCQkwRjM3MzA5MTFDMENENzBDMDAwNTJCRkEgLyogQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjM3MzA5MDFDMENENzBDMDAwNTJCRkEgLyogQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
LmggKi87IH07CisJCTBGMzczMDkzMUMwRDY3RUUwMDA1MkJGQSAvKiBBaXJVc2VDb3VudHMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzczMDkyMUMw
RDY3RUUwMDA1MkJGQSAvKiBBaXJVc2VDb3VudHMuaCAqLzsgfTsKIAkJMEYzOEIwMTExN0NGMDc4
MDAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM4QjAwRjE3Q0YwNzdGMDBCMTQ0RDMgLyogTExJbnRF
bnRyeXBvaW50LmNwcCAqLzsgfTsKIAkJMEYzOEIwMTIxN0NGMDc4MzAwQjE0NEQzIC8qIExMSW50
RW50cnlwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYzOEIwMTAxN0NGMDc3RjAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMzhCMDE3MTdDRkU3
NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM4QjAxMzE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZH
Q29tcGlsYXRpb25LZXkuY3BwICovOyB9OwpAQCAtMjM3OCw2ICsyMzc5LDcgQEAKIAkJMEYzNzMw
OEIxQzBCRDI5MTAwMDUyQkZBIC8qIEIzUGhpQ2hpbGRyZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQjNQaGlDaGlsZHJlbi5oOyBwYXRoID0gYjMvQjNQaGlDaGlsZHJlbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM3MzA4RTFDMENENjg1MDAwNTJCRkEg
LyogRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM3MzA5MDFDMENENzBDMDAwNTJCRkEgLyogQWxs
b3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjM3MzA5MjFDMEQ2N0VFMDAwNTJCRkEgLyogQWlyVXNlQ291bnRzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclVzZUNvdW50cy5oOyBwYXRoID0g
YjMvYWlyL0FpclVzZUNvdW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM4
QjAwRjE3Q0YwNzdGMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IExMSW50RW50cnlwb2ludC5jcHA7IHBhdGggPSBsbGludC9MTEludEVudHJ5cG9pbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM4QjAxMDE3Q0YwNzdGMDBCMTQ0
RDMgLyogTExJbnRFbnRyeXBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExMSW50RW50cnlwb2ludC5o
OyBwYXRoID0gbGxpbnQvTExJbnRFbnRyeXBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMzhCMDEzMTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDb21waWxhdGlvbktleS5j
cHA7IHBhdGggPSBkZmcvREZHQ29tcGlsYXRpb25LZXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNDY1Miw2ICs0NjU0LDcgQEAKIAkJCQkwRkVDODU2ODFCREFDREM3MDA4MEZG
NzQgLyogQWlyVG1wLmNwcCAqLywKIAkJCQkwRkVDODU2OTFCREFDREM3MDA4MEZGNzQgLyogQWly
VG1wLmggKi8sCiAJCQkJMEZFQzg1NkExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcElubGluZXMu
aCAqLywKKwkJCQkwRjM3MzA5MjFDMEQ2N0VFMDAwNTJCRkEgLyogQWlyVXNlQ291bnRzLmggKi8s
CiAJCQkJMEZFQzg1NkIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmNwcCAqLywKIAkJ
CQkwRkVDODU2QzFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuaCAqLywKIAkJCSk7CkBA
IC02NjY1LDYgKzY2NjgsNyBAQAogCQkJCTBGMzM4RTE2MUJGMDI3NkMwMDEzQzg4RiAvKiBCM1Zh
bHVlS2V5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NzQxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NzYxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMzczMDkzMUMw
RDY3RUUwMDA1MkJGQSAvKiBBaXJVc2VDb3VudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDU3
MDM5MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZFQzg1NzcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckZyZXF1ZW50ZWRCbG9jay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NzkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVy
YXRlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrbWFwU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU3RhY2ttYXBTcGVjaWFsLmNwcAkocmV2aXNpb24gMTkyODU3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUs
NyArNzUsOCBAQCB2b2lkIFN0YWNrbWFwU3BlY2lhbDo6Zm9yRWFjaEFyZ0ltcGwoCiAgICAgdW5z
aWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCiAgICAg
SW5zdCYgaW5zdCwgQXJnOjpSb2xlIHJvbGUsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNo
QXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKIHsKLSAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdp
bjsKKyAgICBTdGFja21hcFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luLT5hczxTdGFja21hcFZh
bHVlPigpOworICAgIEFTU0VSVCh2YWx1ZSk7CiAKICAgICAvLyBDaGVjayB0aGF0IGluc2FuZSB0
aGluZ3MgaGF2ZSBub3QgaGFwcGVuZWQuCiAgICAgQVNTRVJUKGluc3QuYXJncy5zaXplKCkgPj0g
bnVtSWdub3JlZEFpckFyZ3MpOwpAQCAtODQsOSArODUsMTUgQEAgdm9pZCBTdGFja21hcFNwZWNp
YWw6OmZvckVhY2hBcmdJbXBsKAogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBp
bnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEFpckFyZ3M7ICsraSkgewogICAgICAgICBBcmcm
IGFyZyA9IGluc3QuYXJnc1tpICsgbnVtSWdub3JlZEFpckFyZ3NdOwotICAgICAgICBWYWx1ZSog
Y2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSArIG51bUlnbm9yZWRCM0FyZ3MpOworICAgICAgICBDb25z
dHJhaW5lZFZhbHVlIGNoaWxkID0gdmFsdWUtPmNvbnN0cmFpbmVkQ2hpbGQoaSArIG51bUlnbm9y
ZWRCM0FyZ3MpOwogCi0gICAgICAgIGNhbGxiYWNrKGFyZywgcm9sZSwgQXJnOjp0eXBlRm9yQjNU
eXBlKGNoaWxkLT50eXBlKCkpKTsKKyAgICAgICAgQXJnOjpSb2xlIHRoaXNSb2xlID0gcm9sZTsK
KyAgICAgICAgCisgICAgICAgIC8vIENvb2wgZG93biB0aGUgcm9sZSBpZiB0aGUgdXNlIGlzIGNv
bGQuCisgICAgICAgIGlmIChjaGlsZC5yZXAoKS5raW5kKCkgPT0gVmFsdWVSZXA6OkFueSAmJiB0
aGlzUm9sZSA9PSBBcmc6OlVzZSkKKyAgICAgICAgICAgIHRoaXNSb2xlID0gQXJnOjpDb2xkVXNl
OworICAgICAgICAKKyAgICAgICAgY2FsbGJhY2soYXJnLCByb2xlLCBBcmc6OnR5cGVGb3JCM1R5
cGUoY2hpbGQudmFsdWUoKS0+dHlwZSgpKSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHJldmlzaW9uIDE5Mjg1NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDkgKzQzLDEw
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogY2xhc3MgVmFsdWVSZXAgewogcHVi
bGljOgogICAgIGVudW0gS2luZCB7Ci0gICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0
aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMgY2FuIHBpY2sgYW55IHJlcHJlc2VudGF0aW9uLiBBcyBh
bgotICAgICAgICAvLyBvdXRwdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgbWVhbnMgdGhhdCB3ZSBk
b24ndCBrbm93LiBUaGlzIHdpbGwgb25seSBhcmlzZSBmb3IgdGhlCi0gICAgICAgIC8vIHJpZ2h0
IG9wZXJhbmQgKGkuZS4gY2hpbGQoMSkpIG9mIGEgQ2hlY2tNdWwuCisgICAgICAgIC8vIEFzIGFu
IGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMgY2FuIHBpY2sgYW55IHJl
cHJlc2VudGF0aW9uLiBJdCBhbHNvIGN1cnJlbnRseQorICAgICAgICAvLyBpbXBsaWVzIHRoYXQg
dGhlIHVzZSBpcyBjb2xkOiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIGRvZXNuJ3QgY291bnQgaXQu
IEFzIGFuIG91dHB1dAorICAgICAgICAvLyByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0
IHdlIGRvbid0IGtub3cuIFRoaXMgd2lsbCBvbmx5IGFyaXNlIGFzIGFuIG91dHB1dAorICAgICAg
ICAvLyByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGFjdGl2ZSBhcmd1bWVudHMgb2YgQ2hlY2svQ2hl
Y2tBZGQvQ2hlY2tTdWIvQ2hlY2tNdWwuCiAgICAgICAgIEFueSwKIAogICAgICAgICAvLyBBcyBh
biBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IEIzIHNob3VsZCBwaWNrIHNv
bWUgcmVnaXN0ZXIuIEl0IGNvdWxkIGJlIGEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQXJnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFyZy5jcHAJKHJldmlzaW9uIDE5Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQXJnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgxLDYgKzE4MSw5IEBAIHZv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmcKICAgICBjYXNlIEFyZzo6VXNl
QWRkcjoKICAgICAgICAgb3V0LnByaW50KCJVc2VBZGRyIik7CiAgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEFyZzo6Q29sZFVzZToKKyAgICAgICAgb3V0LnByaW50KCJDb2xkVXNlIik7CisgICAg
ICAgIHJldHVybjsKICAgICBjYXNlIEFyZzo6TGF0ZVVzZToKICAgICAgICAgb3V0LnByaW50KCJM
YXRlVXNlIik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQXJnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBcmcuaAkocmV2aXNpb24gMTkyODU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBcmcuaAkod29ya2luZyBjb3B5KQpAQCAtODMsOCArODMsMTMgQEAgcHVibGljOgog
ICAgICAgICAvLyBhbHdheXMgZXNjYXBpbmcsIGFuZCBTdGFjayBpcyBwcmVzdW1lZCB0byBiZSBh
bHdheXMgZXNjYXBpbmcgaWYgaXQncyBMb2NrZWQuCiAgICAgICAgIFVzZSwKIAorICAgICAgICAv
LyBFeGFjdGx5IGxpa2UgVXNlLCBleGNlcHQgdGhhdCBpdCBhbHNvIGltcGxpZXMgdGhhdCB0aGUg
dXNlIGlzIGNvbGQ6IHRoYXQgaXMsIHJlcGxhY2luZyB0aGUKKyAgICAgICAgLy8gdXNlIHdpdGgg
c29tZXRoaW5nIG9uIHRoZSBzdGFjayBpcyBmcmVlLgorICAgICAgICBDb2xkVXNlLAorCiAgICAg
ICAgIC8vIExhdGVVc2UgbWVhbnMgdGhhdCB0aGUgSW5zdCB3aWxsIHJlYWQgZnJvbSB0aGlzIHZh
bHVlIGFmdGVyIGRvaW5nIGl0cyBEZWYncy4gTm90ZSB0aGF0IExhdGVVc2UKLSAgICAgICAgLy8g
b24gYW4gQWRkciBvciBJbmRleCBzdGlsbCBtZWFucyBVc2Ugb24gdGhlIGludGVybmFsIHRlbXBv
cmFyaWVzLgorICAgICAgICAvLyBvbiBhbiBBZGRyIG9yIEluZGV4IHN0aWxsIG1lYW5zIFVzZSBv
biB0aGUgaW50ZXJuYWwgdGVtcG9yYXJpZXMuIExhdGVVc2UgYWxzbyBjdXJyZW50bHkgYWxzbwor
ICAgICAgICAvLyBpbXBsaWVzIENvbGRVc2UuCiAgICAgICAgIExhdGVVc2UsCiAKICAgICAgICAg
Ly8gRGVmIG1lYW5zIHRoYXQgdGhlIEluc3Qgd2lsbCB3cml0ZSB0byB0aGlzIHZhbHVlIGFmdGVy
IGRvaW5nIGV2ZXJ5dGhpbmcgZWxzZS4KQEAgLTEzMiw2ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKICAgICAgICAgY2FzZSBVc2U6CisgICAgICAgIGNh
c2UgQ29sZFVzZToKICAgICAgICAgY2FzZSBVc2VEZWY6CiAgICAgICAgIGNhc2UgTGF0ZVVzZToK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTQxLDExICsxNDcsMzEgQEAgcHVibGljOgog
ICAgICAgICB9CiAgICAgfQogCisgICAgc3RhdGljIGJvb2wgaXNDb2xkVXNlKFJvbGUgcm9sZSkK
KyAgICB7CisgICAgICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICBjYXNlIENvbGRVc2U6Cisg
ICAgICAgIGNhc2UgTGF0ZVVzZToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBj
YXNlIFVzZToKKyAgICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAgIGNhc2UgRGVmOgorICAgICAg
ICBjYXNlIFVzZUFkZHI6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc1dhcm1Vc2UoUm9sZSByb2xlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGlzQW55VXNlKHJvbGUpICYmICFpc0NvbGRVc2Uocm9sZSk7CisgICAgfQorCiAg
ICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBSb2xlIGltcGxpZXMgdGhhdCB0aGUgSW5zdCB3aWxs
IFVzZSB0aGUgQXJnIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLgogICAgIHN0YXRpYyBib29s
IGlzRWFybHlVc2UoUm9sZSByb2xlKQogICAgIHsKICAgICAgICAgc3dpdGNoIChyb2xlKSB7CiAg
ICAgICAgIGNhc2UgVXNlOgorICAgICAgICBjYXNlIENvbGRVc2U6CiAgICAgICAgIGNhc2UgVXNl
RGVmOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGNhc2UgRGVmOgpAQCAtMTY2
LDYgKzE5Miw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN3aXRjaCAocm9sZSkgewogICAg
ICAgICBjYXNlIFVzZToKKyAgICAgICAgY2FzZSBDb2xkVXNlOgogICAgICAgICBjYXNlIFVzZUFk
ZHI6CiAgICAgICAgIGNhc2UgTGF0ZVVzZToKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxl
c2NpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCShyZXZpc2lvbiAxOTI4NTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTQgKzM1LDE3IEBACiAjaW5jbHVkZSAiQWlyUGhhc2VT
Y29wZS5oIgogI2luY2x1ZGUgIkFpclJlZ2lzdGVyUHJpb3JpdHkuaCIKICNpbmNsdWRlICJBaXJU
bXBJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyVXNlQ291bnRzLmgiCiAjaW5jbHVkZSA8d3RmL0xp
c3REdW1wLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAotc3RhdGljIGJvb2wgZGVidWcgPSBm
YWxzZTsKLXN0YXRpYyBib29sIHRyYWNlRGVidWcgPSBmYWxzZTsKLXN0YXRpYyBib29sIHJlcG9y
dFN0YXRzID0gZmFsc2U7CituYW1lc3BhY2UgeworCitib29sIGRlYnVnID0gZmFsc2U7Citib29s
IHRyYWNlRGVidWcgPSBmYWxzZTsKK2Jvb2wgcmVwb3J0U3RhdHMgPSBmYWxzZTsKIAogdGVtcGxh
dGU8QXJnOjpUeXBlIHR5cGU+CiBzdHJ1Y3QgTW92ZUluc3RIZWxwZXI7CkBAIC04MSwxOSArODQs
MjIgQEAgc3RydWN0IE1vdmVJbnN0SGVscGVyPEFyZzo6RlA+IHsKIHRlbXBsYXRlPEFyZzo6VHlw
ZSB0eXBlPgogY2xhc3MgSXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3IgewogcHVi
bGljOgotICAgIEl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yKENvZGUmIGNvZGUs
IGNvbnN0IEhhc2hTZXQ8VG1wPiYgdW5zcGlsbGFibGVUbXApCi0gICAgICAgIDogbV91bnNwaWxs
YWJsZVRtcCh1bnNwaWxsYWJsZVRtcCkKKyAgICBJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0Fs
bG9jYXRvcigKKyAgICAgICAgQ29kZSYgY29kZSwgY29uc3QgVXNlQ291bnRzPFRtcD4mIHVzZUNv
dW50cywgY29uc3QgSGFzaFNldDxUbXA+JiB1bnNwaWxsYWJsZVRtcCkKKyAgICAgICAgOiBtX2Nv
ZGUoY29kZSkKKyAgICAgICAgLCBtX3VzZUNvdW50cyh1c2VDb3VudHMpCisgICAgICAgICwgbV91
bnNwaWxsYWJsZVRtcCh1bnNwaWxsYWJsZVRtcCkKICAgICAgICAgLCBtX251bWJlck9mUmVnaXN0
ZXJzKHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkuc2l6ZSgpKQogICAgIHsKLSAgICAgICAgaW5p
dGlhbGl6ZURlZ3JlZXMoY29kZSk7CisgICAgICAgIGluaXRpYWxpemVEZWdyZWVzKCk7CiAKLSAg
ICAgICAgdW5zaWduZWQgdG1wQXJyYXlTaXplID0gdGhpcy0+dG1wQXJyYXlTaXplKGNvZGUpOwor
ICAgICAgICB1bnNpZ25lZCB0bXBBcnJheVNpemUgPSB0aGlzLT50bXBBcnJheVNpemUoKTsKICAg
ICAgICAgbV9hZGphY2VuY3lMaXN0LnJlc2l6ZSh0bXBBcnJheVNpemUpOwogICAgICAgICBtX21v
dmVMaXN0LnJlc2l6ZSh0bXBBcnJheVNpemUpOwogICAgICAgICBtX2NvYWxlc2NlZFRtcHMucmVz
aXplKHRtcEFycmF5U2l6ZSk7CiAgICAgICAgIG1faXNPblNlbGVjdFN0YWNrLmVuc3VyZVNpemUo
dG1wQXJyYXlTaXplKTsKIAotICAgICAgICBidWlsZChjb2RlKTsKKyAgICAgICAgYnVpbGQoKTsK
ICAgICAgICAgYWxsb2NhdGUoKTsKICAgICB9CiAKQEAgLTEzOCwxNSArMTQ0LDE1IEBAIHB1Ymxp
YzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIHVuc2lnbmVkIHRtcEFycmF5U2l6ZShD
b2RlJiBjb2RlKQorICAgIHVuc2lnbmVkIHRtcEFycmF5U2l6ZSgpCiAgICAgewotICAgICAgICB1
bnNpZ25lZCBudW1UbXBzID0gY29kZS5udW1UbXBzKHR5cGUpOworICAgICAgICB1bnNpZ25lZCBu
dW1UbXBzID0gbV9jb2RlLm51bVRtcHModHlwZSk7CiAgICAgICAgIHJldHVybiBBYnNvbHV0ZVRt
cE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleChudW1UbXBzKTsKICAgICB9CiAKLSAgICB2b2lk
IGluaXRpYWxpemVEZWdyZWVzKENvZGUmIGNvZGUpCisgICAgdm9pZCBpbml0aWFsaXplRGVncmVl
cygpCiAgICAgewotICAgICAgICB1bnNpZ25lZCB0bXBBcnJheVNpemUgPSB0aGlzLT50bXBBcnJh
eVNpemUoY29kZSk7CisgICAgICAgIHVuc2lnbmVkIHRtcEFycmF5U2l6ZSA9IHRoaXMtPnRtcEFy
cmF5U2l6ZSgpOwogICAgICAgICBtX2RlZ3JlZXMucmVzaXplKHRtcEFycmF5U2l6ZSk7CiAKICAg
ICAgICAgLy8gQWxsIHByZWNvbG9yZWQgcmVnaXN0ZXJzIGhhdmUgIGFuICJpbmZpbml0ZSIgZGVn
cmVlLgpAQCAtMTU3LDEwICsxNjMsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgYnplcm8obV9kZWdy
ZWVzLmRhdGEoKSArIGZpcnN0Tm9uUmVnSW5kZXgsICh0bXBBcnJheVNpemUgLSBmaXJzdE5vblJl
Z0luZGV4KSAqIHNpemVvZih1bnNpZ25lZCkpOwogICAgIH0KIAotICAgIHZvaWQgYnVpbGQoQ29k
ZSYgY29kZSkKKyAgICB2b2lkIGJ1aWxkKCkKICAgICB7Ci0gICAgICAgIFRtcExpdmVuZXNzPHR5
cGU+IGxpdmVuZXNzKGNvZGUpOwotICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29k
ZSkgeworICAgICAgICBUbXBMaXZlbmVzczx0eXBlPiBsaXZlbmVzcyhtX2NvZGUpOworICAgICAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CiAgICAgICAgICAgICB0eXBlbmFt
ZSBUbXBMaXZlbmVzczx0eXBlPjo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2sp
OwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBp
bnN0SW5kZXgtLTspIHsKICAgICAgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGlu
c3RJbmRleCk7CkBAIC01NDcsNyArNTUzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBt
X2NvYWxlc2NlZFRtcHNBdFNwaWxsID0gbV9jb2FsZXNjZWRUbXBzOwogICAgICAgICB9CiAKLSAg
ICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBzZWxlY3QgYSBnb29kIGNhbmRpZGF0ZSBiYXNlZCBv
biBhbGwgdGhlIGluZm9ybWF0aW9uIHdlIGhhdmUuCiAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBt
X3NwaWxsV29ya2xpc3QuYmVnaW4oKTsKIAogICAgICAgICB3aGlsZSAoaXRlcmF0b3IgIT0gbV9z
cGlsbFdvcmtsaXN0LmVuZCgpICYmIG1fdW5zcGlsbGFibGVUbXAuY29udGFpbnMoKml0ZXJhdG9y
KSkKQEAgLTU1NSwxOCArNTYwLDMyIEBAIHByaXZhdGU6CiAKICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfV0lUSF9NRVNTQUdFKGl0ZXJhdG9yICE9IG1fc3BpbGxXb3JrbGlzdC5lbmQoKSwgIkl0IGlz
IG5vdCBwb3NzaWJsZSB0byBjb2xvciB0aGUgQWlyIGdyYXBoIHdpdGggdGhlIG51bWJlciBvZiBh
dmFpbGFibGUgcmVnaXN0ZXJzLiIpOwogCisgICAgICAgIC8vIEhpZ2hlciBzY29yZSBtZWFucyBt
b3JlIGRlc2lyYWJsZSB0byBzcGlsbC4gTG93ZXIgc2NvcmVzIG1heGltaXplIHRoZSBsaWtlbGlo
b29kIHRoYXQgYSB0bXAKKyAgICAgICAgLy8gZ2V0cyBhIHJlZ2lzdGVyLgorICAgICAgICBhdXRv
IHNjb3JlID0gWyZdIChUbXAgdG1wKSAtPiBkb3VibGUgeworICAgICAgICAgICAgLy8gQWxsIGVs
c2UgYmVpbmcgZXF1YWwsIHRoZSBzY29yZSBzaG91bGQgYmUgZGlyZWN0bHkgcmVsYXRlZCB0byB0
aGUgZGVncmVlLgorICAgICAgICAgICAgZG91YmxlIGRlZ3JlZSA9IHN0YXRpY19jYXN0PGRvdWJs
ZT4obV9kZWdyZWVzW0Fic29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KHRtcCld
KTsKKworICAgICAgICAgICAgLy8gQWxsIGVsc2UgYmVpbmcgZXF1YWwsIHRoZSBzY29yZSBzaG91
bGQgYmUgaW52ZXJzZWx5IHJlbGF0ZWQgdG8gdGhlIG51bWJlciBvZiB3YXJtIHVzZXMgYW5kCisg
ICAgICAgICAgICAvLyBkZWZzLgorICAgICAgICAgICAgY29uc3QgVXNlQ291bnRzPFRtcD46OkNv
dW50cyYgY291bnRzID0gbV91c2VDb3VudHNbdG1wXTsKKyAgICAgICAgICAgIGRvdWJsZSB1c2Vz
ID0gY291bnRzLm51bVdhcm1Vc2VzICsgY291bnRzLm51bURlZnM7CisKKyAgICAgICAgICAgIHJl
dHVybiBkZWdyZWUgLyB1c2VzOworICAgICAgICB9OworCiAgICAgICAgIGF1dG8gdmljdGltSXRl
cmF0b3IgPSBpdGVyYXRvcjsKLSAgICAgICAgdW5zaWduZWQgbWF4RGVncmVlID0gbV9kZWdyZWVz
W0Fic29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KCppdGVyYXRvcildOworICAg
ICAgICBkb3VibGUgbWF4U2NvcmUgPSBzY29yZSgqaXRlcmF0b3IpOwogCiAgICAgICAgICsraXRl
cmF0b3I7CiAgICAgICAgIGZvciAoO2l0ZXJhdG9yICE9IG1fc3BpbGxXb3JrbGlzdC5lbmQoKTsg
KytpdGVyYXRvcikgewotICAgICAgICAgICAgdW5zaWduZWQgdG1wRGVncmVlID0gbV9kZWdyZWVz
W0Fic29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KCppdGVyYXRvcildOwotICAg
ICAgICAgICAgaWYgKHRtcERlZ3JlZSA+IG1heERlZ3JlZSkgeworICAgICAgICAgICAgZG91Ymxl
IHRtcFNjb3JlID0gc2NvcmUoKml0ZXJhdG9yKTsKKyAgICAgICAgICAgIGlmICh0bXBTY29yZSA+
IG1heFNjb3JlKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fdW5zcGlsbGFibGVUbXAuY29udGFp
bnMoKml0ZXJhdG9yKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAg
ICAgICAgICB2aWN0aW1JdGVyYXRvciA9IGl0ZXJhdG9yOwotICAgICAgICAgICAgICAgIG1heERl
Z3JlZSA9IHRtcERlZ3JlZTsKKyAgICAgICAgICAgICAgICBtYXhTY29yZSA9IHRtcFNjb3JlOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTc3OCw2ICs3OTcsOSBAQCBwcml2YXRlOgog
ICAgIH07CiAgICAgdHlwZWRlZiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SW50ZXJmZXJlbmNlRWRn
ZT4gSW50ZXJmZXJlbmNlRWRnZUhhc2hUcmFpdHM7CiAKKyAgICBDb2RlJiBtX2NvZGU7CisgICAg
Y29uc3QgVXNlQ291bnRzPFRtcD4mIG1fdXNlQ291bnRzOworCiAgICAgY29uc3QgSGFzaFNldDxU
bXA+JiBtX3Vuc3BpbGxhYmxlVG1wOwogICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZSZWdpc3RlcnMg
eyAwIH07CiAKQEAgLTkwMSwxMyArOTIzLDEzIEBAIHByaXZhdGU6CiB9OwogCiB0ZW1wbGF0ZTxB
cmc6OlR5cGUgdHlwZT4KLXN0YXRpYyBib29sIGlzVXNlbGVzc01vdmVJbnN0KGNvbnN0IEluc3Qm
IGluc3QpCitib29sIGlzVXNlbGVzc01vdmVJbnN0KGNvbnN0IEluc3QmIGluc3QpCiB7CiAgICAg
cmV0dXJuIE1vdmVJbnN0SGVscGVyPHR5cGU+OjptYXlCZUNvYWxlc2NhYmxlKGluc3QpICYmIGlu
c3QuYXJnc1swXS50bXAoKSA9PSBpbnN0LmFyZ3NbMV0udG1wKCk7CiB9CiAKIHRlbXBsYXRlPEFy
Zzo6VHlwZSB0eXBlPgotc3RhdGljIHZvaWQgYXNzaWduUmVnaXN0ZXJUb1RtcEluUHJvZ3JhbShD
b2RlJiBjb2RlLCBjb25zdCBJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRvcjx0eXBl
PiYgYWxsb2NhdG9yKQordm9pZCBhc3NpZ25SZWdpc3RlclRvVG1wSW5Qcm9ncmFtKENvZGUmIGNv
ZGUsIGNvbnN0IEl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yPHR5cGU+JiBhbGxv
Y2F0b3IpCiB7CiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKICAgICAgICAg
Ly8gR2l2ZSBUbXAgYSB2YWxpZCByZWdpc3Rlci4KQEAgLTkzNyw3ICs5NTksNyBAQCBzdGF0aWMg
dm9pZCBhc3NpZ25SZWdpc3RlclRvVG1wSW5Qcm9ncmFtCiB9CiAKIHRlbXBsYXRlPEFyZzo6VHlw
ZSB0eXBlPgotc3RhdGljIHZvaWQgYWRkU3BpbGxBbmRGaWxsVG9Qcm9ncmFtKENvZGUmIGNvZGUs
IGNvbnN0IEl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yPHR5cGU+JiBhbGxvY2F0
b3IsIEhhc2hTZXQ8VG1wPiYgdW5zcGlsbGFibGVUbXApCit2b2lkIGFkZFNwaWxsQW5kRmlsbFRv
UHJvZ3JhbShDb2RlJiBjb2RlLCBjb25zdCBJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9j
YXRvcjx0eXBlPiYgYWxsb2NhdG9yLCBIYXNoU2V0PFRtcD4mIHVuc3BpbGxhYmxlVG1wKQogewog
ICAgIGNvbnN0IEhhc2hTZXQ8VG1wPiYgc3BpbGxlZFRtcCA9IGFsbG9jYXRvci5zcGlsbGVkVG1w
KCk7CiAKQEAgLTEwMDcsMTIgKzEwMjksMTMgQEAgc3RhdGljIHZvaWQgYWRkU3BpbGxBbmRGaWxs
VG9Qcm9ncmFtKENvZAogfQogCiB0ZW1wbGF0ZTxBcmc6OlR5cGUgdHlwZT4KLXN0YXRpYyB2b2lk
IGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nT25UeXBlKENvZGUmIGNvZGUsIHVuc2lnbmVkJiBu
dW1JdGVyYXRpb25zKQordm9pZCBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ09uVHlwZSgKKyAg
ICBDb2RlJiBjb2RlLCBjb25zdCBVc2VDb3VudHM8VG1wPiYgdXNlQ291bnRzLCB1bnNpZ25lZCYg
bnVtSXRlcmF0aW9ucykKIHsKICAgICBIYXNoU2V0PFRtcD4gdW5zcGlsbGFibGVUbXBzOwogICAg
IHdoaWxlICh0cnVlKSB7CiAgICAgICAgIG51bUl0ZXJhdGlvbnMrKzsKLSAgICAgICAgSXRlcmF0
ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3I8dHlwZT4gYWxsb2NhdG9yKGNvZGUsIHVuc3Bp
bGxhYmxlVG1wcyk7CisgICAgICAgIEl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9y
PHR5cGU+IGFsbG9jYXRvcihjb2RlLCB1c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7CiAgICAg
ICAgIGlmIChhbGxvY2F0b3Iuc3BpbGxlZFRtcCgpLmlzRW1wdHkoKSkgewogICAgICAgICAgICAg
YXNzaWduUmVnaXN0ZXJUb1RtcEluUHJvZ3JhbShjb2RlLCBhbGxvY2F0b3IpOwogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtMTAyMSwxNCArMTA0NCwxNyBAQCBzdGF0aWMgdm9pZCBpdGVyYXRlZFJl
Z2lzdGVyQ29hbGVzY2luZ09uCiAgICAgfQogfQogCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UK
Kwogdm9pZCBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZyhDb2RlJiBjb2RlKQogewogICAgIFBo
YXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAiaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmciKTsK
IAogICAgIHVuc2lnbmVkIG51bUl0ZXJhdGlvbnMgPSAwOwogCi0gICAgaXRlcmF0ZWRSZWdpc3Rl
ckNvYWxlc2NpbmdPblR5cGU8QXJnOjpHUD4oY29kZSwgbnVtSXRlcmF0aW9ucyk7Ci0gICAgaXRl
cmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdPblR5cGU8QXJnOjpGUD4oY29kZSwgbnVtSXRlcmF0aW9u
cyk7CisgICAgVXNlQ291bnRzPFRtcD4gdXNlQ291bnRzKGNvZGUpOworICAgIGl0ZXJhdGVkUmVn
aXN0ZXJDb2FsZXNjaW5nT25UeXBlPEFyZzo6R1A+KGNvZGUsIHVzZUNvdW50cywgbnVtSXRlcmF0
aW9ucyk7CisgICAgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdPblR5cGU8QXJnOjpGUD4oY29k
ZSwgdXNlQ291bnRzLCBudW1JdGVyYXRpb25zKTsKIAogICAgIGlmIChyZXBvcnRTdGF0cykKICAg
ICAgICAgZGF0YUxvZygiTnVtIGl0ZXJhdGlvbnMgPSAiLCBudW1JdGVyYXRpb25zLCAiXG4iKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJKHJldmlz
aW9uIDE5Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3Mu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAK
ICNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIK
ICNpbmNsdWRlICJBaXJUbXBJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgogI2lu
Y2x1ZGUgIkIzSW5kZXhTZXQuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyU3BpbGxFdmVyeXRoaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHJldmlzaW9uIDE5Mjg1NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMwLDYgKzEzMCw3IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNv
ZGUpCiAgICAgICAgICAgICAgICAgICAgIFJlZyBjaG9zZW5SZWc7CiAgICAgICAgICAgICAgICAg
ICAgIHN3aXRjaCAocm9sZSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6VXNlOgor
ICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6Q29sZFVzZToKICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEJlZm9yZS5nZXQocmVnKSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRCZWZvcmUuc2V0KHJlZyk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclVzZUNvdW50cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVXNlQ291bnRzLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclVzZUNvdW50cy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQWlyVXNlQ291bnRzX2gKKyNkZWZpbmUgQWlyVXNlQ291bnRz
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJBcmcuaCIKKyNpbmNsdWRl
ICJBaXJCbG9ja1dvcmtsaXN0LmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFp
ckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
TGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeworCitjbGFzcyBDb2RlOworCisvLyBDb21wdXRlcyB0aGUgbnVtYmVyIG9mIHVzZXMgb2Yg
YSB2YXJpYWJsZSBiYXNlZCBvbiBmcmVxdWVuY3kgb2YgZXhlY3V0aW9uLiBUaGUgZnJlcXVlbmN5
IG9mIGJsb2NrcworLy8gdGhhdCBhcmUgb25seSByZWFjaGFibGUgYnkgcmFyZSBlZGdlcyBpcyBz
Y2FsZWQgYnkgT3B0aW9uczo6cmFyZUJsb2NrUGVuYWx0eSgpLgorCisvLyBUaGluZyBjYW4gYmUg
ZWl0aGVyIFRtcCBvciBBcmcuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZz4KK2NsYXNzIFVzZUNv
dW50cyB7CitwdWJsaWM6CisgICAgc3RydWN0IENvdW50cyB7CisgICAgICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBvdXQucHJpbnQo
CisgICAgICAgICAgICAgICAgIntudW1XYXJtVXNlcyA9ICIsIG51bVdhcm1Vc2VzLCAiLCBudW1D
b2xkVXNlcyA9ICIsIG51bUNvbGRVc2VzLCAiLCBudW1EZWZzID0gIiwKKyAgICAgICAgICAgICAg
ICBudW1EZWZzLCAifSIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBkb3VibGUgbnVt
V2FybVVzZXMgeyAwIH07CisgICAgICAgIGRvdWJsZSBudW1Db2xkVXNlcyB7IDAgfTsKKyAgICAg
ICAgZG91YmxlIG51bURlZnMgeyAwIH07CisgICAgfTsKKyAgICAKKyAgICBVc2VDb3VudHMoQ29k
ZSYgY29kZSkKKyAgICB7CisgICAgICAgIC8vIEZpbmQgbm9uLXJhcmUgYmxvY2tzLgorICAgICAg
ICBCbG9ja1dvcmtsaXN0IGZhc3RXb3JrbGlzdDsKKyAgICAgICAgZmFzdFdvcmtsaXN0LnB1c2go
Y29kZVswXSk7CisgICAgICAgIHdoaWxlIChCYXNpY0Jsb2NrKiBibG9jayA9IGZhc3RXb3JrbGlz
dC5wb3AoKSkgeworICAgICAgICAgICAgZm9yIChGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3NvciA6
IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3Nvci5p
c1JhcmUoKSkKKyAgICAgICAgICAgICAgICAgICAgZmFzdFdvcmtsaXN0LnB1c2goc3VjY2Vzc29y
LmJsb2NrKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICAgICAgZG91YmxlIGZyZXF1
ZW5jeSA9IGJsb2NrLT5mcmVxdWVuY3koKTsKKyAgICAgICAgICAgIGlmICghZmFzdFdvcmtsaXN0
LnNhdyhibG9jaykpCisgICAgICAgICAgICAgICAgZnJlcXVlbmN5ICo9IE9wdGlvbnM6OnJhcmVC
bG9ja1BlbmFsdHkoKTsKKyAgICAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgewor
ICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaDxUaGluZz4oCisgICAgICAgICAgICAgICAgICAg
IFsmXSAoVGhpbmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgQ291bnRzJiBjb3VudHMgPSBtX2NvdW50cy5hZGQoYXJnLCBDb3VudHMo
KSkuaXRlcmF0b3ItPnZhbHVlOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjpp
c1dhcm1Vc2Uocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRzLm51bVdh
cm1Vc2VzICs9IGZyZXF1ZW5jeTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6Omlz
Q29sZFVzZShyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHMubnVtQ29s
ZFVzZXMgKz0gZnJlcXVlbmN5OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNE
ZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRzLm51bURlZnMgKz0g
ZnJlcXVlbmN5OworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIGNvbnN0IENvdW50cyYgb3BlcmF0b3JbXShjb25zdCBUaGluZyYg
YXJnKSBjb25zdCB7IHJldHVybiBtX2NvdW50cy5maW5kKGFyZyktPnZhbHVlOyB9CisKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIG91dC5wcmlu
dChtYXBEdW1wKG1fY291bnRzKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEhhc2hNYXA8VGhp
bmcsIENvdW50cz4gbV9jb3VudHM7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyVXNlQ291bnRz
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNp
b24gMTkyODU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMzgsNiArMzM4LDcgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRp
b25TdHJpbmc7CiAgICAgdih1bnNpZ25lZCwgZmlyZU9TUkV4aXRGdXp6QXRPckFmdGVyLCAwLCBu
dWxscHRyKSBcCiAgICAgXAogICAgIHYoYm9vbCwgbG9nQjNQaGFzZVRpbWVzLCBmYWxzZSwgbnVs
bHB0cikgXAorICAgIHYoZG91YmxlLCByYXJlQmxvY2tQZW5hbHR5LCAwLjAwMSwgbnVsbHB0cikg
XAogICAgIFwKICAgICB2KGJvb2wsIHVzZURvbGxhclZNLCBmYWxzZSwgImluc3RhbGxzIHRoZSAk
dm0gZGVidWdnaW5nIHRvb2wgaW4gZ2xvYmFsIG9iamVjdHMiKSBcCiAgICAgdihvcHRpb25TdHJp
bmcsIGZ1bmN0aW9uT3ZlcnJpZGVzLCBudWxscHRyLCAiZmlsZSB3aXRoIGRlYnVnZ2luZyBvdmVy
cmlkZXMgZm9yIGZ1bmN0aW9uIGJvZGllcyIpIFwK
</data>

          </attachment>
      

    </bug>

</bugzilla>