<?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>211674</bug_id>
          
          <creation_ts>2020-05-09 16:24:34 -0700</creation_ts>
          <short_desc>Switch from WTF::Optional to std::optional</short_desc>
          <delta_ts>2021-05-25 22:04:04 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=220662</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>211703</dependson>
          <blocked>226251</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>hta</cc>
    
    <cc>jbedard</cc>
    
    <cc>jer.noble</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>lmoura</cc>
    
    <cc>mark.lam</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>msaboff</cc>
    
    <cc>philipj</cc>
    
    <cc>pnormand</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>tommyw</cc>
    
    <cc>tzagallo</cc>
    
    <cc>vjaquez</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1650985</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-09 16:24:34 -0700</bug_when>
    <thetext>Switch from WTF::Optional to std::optional</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650986</commentid>
    <comment_count>1</comment_count>
      <attachid>398944</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-09 16:25:43 -0700</bug_when>
    <thetext>Created attachment 398944
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650987</commentid>
    <comment_count>2</comment_count>
      <attachid>398944</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-09 16:27:51 -0700</bug_when>
    <thetext>Comment on attachment 398944
Patch

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

&gt; Source/WTF/ChangeLog:3
&gt; +        Switch from WTF::Optional to std::optional

I think a first cut would be to check the changes that are needed to get compiling with std::optional, without actually changing from WTF::Optional to std::optional.

Hoping EWS can find more of those. I found a number of them.

&gt; Source/WTF/wtf/Optional.h:58
&gt; +#define hasValue has_value
&gt; +#define valueOr value_or

This super-horrible hack seems like something I would not check in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650988</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-05-09 16:30:15 -0700</bug_when>
    <thetext>The move constructor of std::optional behaves very differently iirc. We have to watch out everywhere we WTFMove() an optional. I thought we had decided to stick with our WTF class because of move constructor was safer. We have had multiple bugs due to use after move of std optional in the past. I believe there was a mailing list discussion about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650993</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-09 16:37:10 -0700</bug_when>
    <thetext>OK, that seems like a reason to not switch yet.

Are you saying we might never switch?

On the other hand, std::optional seems do to some other subtle things differently in a way that’s better. That led to the other changes in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650994</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-09 16:38:26 -0700</bug_when>
    <thetext>I like being safer, and if this benefit is great enough we should keep it. But in the long run I think it would be better if we were using standard C++ and not our own dialect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650995</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-05-09 16:38:37 -0700</bug_when>
    <thetext>I found the previous discussion on this:
https://lists.webkit.org/pipermail/webkit-dev/2018-December/030316.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650996</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-09 16:39:38 -0700</bug_when>
    <thetext>How did you get experience this? Why were you using std::optional? Was it in another project?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650997</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-05-09 16:42:21 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #5)
&gt; I like being safer, and if this benefit is great enough we should keep it.
&gt; But in the long run I think it would be better if we were using standard C++
&gt; and not our own dialect.

I agree it is better to use standard types in general. However, the fact that the move constructor of std::optional doesn’t reset the isSet flag is a serious issue that has caught us several times :(

The proper pattern would be to use std::exchange() instead of WTFMove(). However, people are used to moving and I fear we will keep having such bugs if we made the switch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650998</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-05-09 16:45:05 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #7)
&gt; How did you get experience this? Why were you using std::optional? Was it in
&gt; another project?

Definitely in WebKit. I have fixed several bugs caused by std optional move constructor behavior, which is why I decided to start that thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650999</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-09 16:47:55 -0700</bug_when>
    <thetext>Where in WebKit was std::optional used?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1651000</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-09 16:48:22 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #8)
&gt; The proper pattern would be to use std::exchange() instead of WTFMove().
&gt; However, people are used to moving and I fear we will keep having such bugs
&gt; if we made the switch.

Lets start moving from WTFMove to std::exchange. Some day we will make the switch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1651001</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-05-09 16:51:09 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #10)
&gt; Where in WebKit was std::optional used?

We used our own copy of std optional everywhere because we could not adopt the compiler one yet. We moved the WTF optional when I changed the move constructor if I remember correctly. Last I checked, which admittedly was at the time of that thread, the standard / compiler optional move constructor has the same behavior as our local copy of std optional.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1651003</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-05-09 16:57:07 -0700</bug_when>
    <thetext>I am kind of curious if the tests are going to pass. I do think people have been using std exchange more but I would not been surprised if more used after move cases of optional had been added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1651108</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-10 14:14:44 -0700</bug_when>
    <thetext>Looks like all the tests pass except for API tests that are depending on the move semantics. So it seems like we don’t have any code that depends on our different WTF::optional move semantics that affects any of our regression tests.

Separately, for some reason this didn’t compile on Windows, although it did on WinCairo. I can’t find an error message. I think I’ll push the &quot;retry tests&quot; button.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1651119</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-10 14:44:42 -0700</bug_when>
    <thetext>Uploaded a patch fixing the problems found by using std::optional in bug 211703. Checking these in does *not* commit us to switching to std::optional, but will shrink this patch here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1651637</commentid>
    <comment_count>16</comment_count>
      <attachid>399101</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-11 23:06:07 -0700</bug_when>
    <thetext>Created attachment 399101
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763194</commentid>
    <comment_count>17</comment_count>
      <attachid>429548</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-24 11:06:56 -0700</bug_when>
    <thetext>Created attachment 429548
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763243</commentid>
    <comment_count>18</comment_count>
      <attachid>429565</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-24 14:13:36 -0700</bug_when>
    <thetext>Created attachment 429565
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763320</commentid>
    <comment_count>19</comment_count>
      <attachid>429590</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-24 16:39:35 -0700</bug_when>
    <thetext>Created attachment 429590
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763375</commentid>
    <comment_count>20</comment_count>
      <attachid>429608</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-24 18:48:50 -0700</bug_when>
    <thetext>Created attachment 429608
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763532</commentid>
    <comment_count>21</comment_count>
      <attachid>429657</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-25 09:16:23 -0700</bug_when>
    <thetext>Created attachment 429657
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763604</commentid>
    <comment_count>22</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-25 12:09:17 -0700</bug_when>
    <thetext>Trying to figure out what to do next:

- This Patch

This current patch seems to build and pass all the tests, so I could get it reviewed and landed as is.

- Smaller

I could make a smaller patch with all the changes that don’t require switching to std::optional (like I did a year back). That would include all the changes in JavaScriptCore, WebCore, and WebKit, the changes to Second.h and PersistentCoder.h in WTF, and the changes to the RetainPtr tests in TestWebKitAPI. That’s easy to do, and can be done without making any decision about adopting std::optional or deciding whether to use the macro tricks in Optional.h to smooth over the transition.

- Bigger

Could go for a bigger patch that does more global replacing. Likely the first step would be to remove the need for the macro tricks for hasValue and valueOr, then do the rest of the work towards removing the need for the Optional.h header entirely, using std::optional, std::make_unique, std::nullopt, std::nullopt_t, and getting rid of valueOrCompute.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763607</commentid>
    <comment_count>23</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-25 12:13:58 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #22)
&gt; Trying to figure out what to do next:
&gt; 
&gt; - This Patch
&gt; 
&gt; This current patch seems to build and pass all the tests, so I could get it
&gt; reviewed and landed as is.
&gt; 
&gt; - Smaller
&gt; 
&gt; I could make a smaller patch with all the changes that don’t require
&gt; switching to std::optional (like I did a year back). That would include all
&gt; the changes in JavaScriptCore, WebCore, and WebKit, the changes to Second.h
&gt; and PersistentCoder.h in WTF, and the changes to the RetainPtr tests in
&gt; TestWebKitAPI. That’s easy to do, and can be done without making any
&gt; decision about adopting std::optional or deciding whether to use the macro
&gt; tricks in Optional.h to smooth over the transition.
&gt; 
&gt; - Bigger
&gt; 
&gt; Could go for a bigger patch that does more global replacing. Likely the
&gt; first step would be to remove the need for the macro tricks for hasValue and
&gt; valueOr, then do the rest of the work towards removing the need for the
&gt; Optional.h header entirely, using std::optional, std::make_unique,
&gt; std::nullopt, std::nullopt_t, and getting rid of valueOrCompute.

I think we should land this patch as is. It is a good first step. Then we should probably follow-up to drop usage of WTF::Optional entirely?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763613</commentid>
    <comment_count>24</comment_count>
      <attachid>429657</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-25 12:27:43 -0700</bug_when>
    <thetext>Comment on attachment 429657
Patch

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

r=me

&gt; Source/JavaScriptCore/runtime/IntlDateTimeFormat.cpp:310
&gt; +    return options;

I would have updated early returns to return nullptr instead of { }. I assume it is equivalent but I am not 100% sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763618</commentid>
    <comment_count>25</comment_count>
      <attachid>429657</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-25 12:33:45 -0700</bug_when>
    <thetext>Comment on attachment 429657
Patch

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

&gt;&gt; Source/JavaScriptCore/runtime/IntlDateTimeFormat.cpp:310
&gt;&gt; +    return options;
&gt; 
&gt; I would have updated early returns to return nullptr instead of { }. I assume it is equivalent but I am not 100% sure.

Seems OK, but I prefer not to do it before landing because it’s not really different between optionals and pointers.

The caller is not supposed to look at the return value at all when there’s an exception, so I sort of like using { } rather than giving a specific return value. I kind of wish the RETURN_IF_EXCEPTION macro did that, but I guess it doesn’t work when the return type is void.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763621</commentid>
    <comment_count>26</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-25 12:35:25 -0700</bug_when>
    <thetext>Committed r278035 (238131@main): &lt;https://commits.webkit.org/238131@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763622</commentid>
    <comment_count>27</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-25 12:36:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/78470754&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763816</commentid>
    <comment_count>28</comment_count>
    <who name="Lauro Moura">lmoura</who>
    <bug_when>2021-05-25 20:50:45 -0700</bug_when>
    <thetext>Committed r278074 (238153@main): &lt;https://commits.webkit.org/238153@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763821</commentid>
    <comment_count>29</comment_count>
    <who name="Lauro Moura">lmoura</who>
    <bug_when>2021-05-25 21:59:18 -0700</bug_when>
    <thetext>Committed r278076 (238155@main): &lt;https://commits.webkit.org/238155@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763824</commentid>
    <comment_count>30</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-25 22:04:04 -0700</bug_when>
    <thetext>There’s no need for the extra braces in these GCC8 fixes. We would want you to write them like this:

    return SerializedPlatformDataCueValue { };</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>398944</attachid>
            <date>2020-05-09 16:25:43 -0700</date>
            <delta_ts>2020-05-11 23:06:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211674-20200509162540.patch</filename>
            <type>text/plain</type>
            <size>66302</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYxNDM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGVmMWNlNDVhNWQ2NGU5ZGVkOWZiYjM1
NWNjOTA2M2NhY2U5OGE3OGUuLmMzNmYwZWQ0MWE4YjUzYjExMjBkNDhkYzE0MzYxMzJiNWYyOTRm
YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTAgQEAKKzIwMjAtMDUtMDkgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFN3aXRjaCBmcm9tIFdURjo6T3B0aW9uYWwgdG8gc3RkOjpv
cHRpb25hbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjExNjc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKIDIwMjAtMDUt
MDggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFN0cmVhbWxpbmUg
TWFya3VwQWNjdW11bGF0b3IgdG8gaW1wcm92ZSBlZmZpY2llbmN5IGEgYml0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYWNoaW5lQ29udGV4dC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFjaGluZUNvbnRleHQuaAppbmRleCBjNTA1MjUyNzQ3
YjIzZGYwMjI0NGQ5MjRlNjdiMjU5NmYyNDliMGZiLi5lNTQ2NjMzYjg4NDUyYzBjYWMyMjQ5OGVl
YWJlM2FjMzk3MDY0MzkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9NYWNoaW5lQ29udGV4dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01h
Y2hpbmVDb250ZXh0LmgKQEAgLTQ1NCwxMSArNDU0LDExIEBAIGlubGluZSBPcHRpb25hbDxNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRhZz4+IGluc3RydWN0aW9u
UG9pCiAgICAgdm9pZCogdmFsdWUgPSBpbnN0cnVjdGlvblBvaW50ZXJJbXBsKGNvbnN0X2Nhc3Q8
UGxhdGZvcm1SZWdpc3RlcnMmPihyZWdzKSk7CiAjZW5kaWYKICAgICBpZiAoIXZhbHVlKQotICAg
ICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJU
YWc+KG51bGxwdHIpOworICAgICAgICByZXR1cm4gbWFrZU9wdGlvbmFsKE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc1BDUHRyVGFnPihudWxscHRyKSk7CiAgICAgaWYgKCF1
c2VzUG9pbnRlclRhZ2dpbmcoKSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxQbGF0Zm9ybVJlZ2lzdGVyc1BDUHRyVGFnPih2YWx1ZSk7CisgICAgICAgIHJldHVybiBtYWtl
T3B0aW9uYWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJUYWc+
KHZhbHVlKSk7CiAgICAgaWYgKGlzVGFnZ2VkV2l0aCh2YWx1ZSwgUGxhdGZvcm1SZWdpc3RlcnNQ
Q1B0clRhZykpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8UGxhdGZvcm1S
ZWdpc3RlcnNQQ1B0clRhZz4odmFsdWUpOworICAgICAgICByZXR1cm4gbWFrZU9wdGlvbmFsKE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc1BDUHRyVGFnPih2YWx1ZSkpOwog
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L0ZvcndhcmQuaCBiL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaAppbmRleCBmNzZjYTQzYzJiM2Vm
M2IwNDcyYjgyYzUzMThlNWFjOThjYjQ1NTY4Li4xZDkyMWRkMTJlODdkYTA4MWQyZmI5ZTNkZDVm
OTEzMmQ0NTQzOTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKKysrIGIv
U291cmNlL1dURi93dGYvRm9yd2FyZC5oCkBAIC0yMSw2ICsyMSw3IEBACiAjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTYzLDcgKzY0LDYgQEAg
dGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIEZ1bmN0aW9uOwogdGVtcGxhdGU8dHlwZW5hbWUsIHR5
cGVuYW1lID0gQW55VGhyZWFkc0FjY2Vzc1RyYWl0cz4gY2xhc3MgTGF6eU5ldmVyRGVzdHJveWVk
OwogdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lID0gQW55VGhyZWFkc0FjY2Vzc1RyYWl0cz4g
Y2xhc3MgTmV2ZXJEZXN0cm95ZWQ7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgT3B0aW9uU2V0
OwotdGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIE9wdGlvbmFsOwogdGVtcGxhdGU8dHlwZW5hbWUg
VD4gY2xhc3MgUGFja2VkOwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90ID0gYWxpZ25vZihU
KT4gY2xhc3MgUGFja2VkQWxpZ25lZFB0cjsKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
ID0gRHVtYlB0clRyYWl0czxUPj4gY2xhc3MgUmVmOwpAQCAtMTE0LDcgKzExNCw2IEBAIHVzaW5n
IFdURjo6SGFzaGVyOwogdXNpbmcgV1RGOjpMYXp5TmV2ZXJEZXN0cm95ZWQ7CiB1c2luZyBXVEY6
Ok5ldmVyRGVzdHJveWVkOwogdXNpbmcgV1RGOjpPcHRpb25TZXQ7Ci11c2luZyBXVEY6Ok9wdGlv
bmFsOwogdXNpbmcgV1RGOjpPcmRpbmFsTnVtYmVyOwogdXNpbmcgV1RGOjpQcmludFN0cmVhbTsK
IHVzaW5nIFdURjo6UmVmOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvT3B0aW9uYWwuaCBi
L1NvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmgKaW5kZXggNzcxNmJhNDE4ZGRhZWQzMzRmNDBiNTYw
Y2NhNzIzMzY5NWNmZTg3OC4uOTU1ZTBjMGRmMmZkMmMwNmY0OTc0ZjcwMzFmMzllYTViMDViNjdl
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvT3B0aW9uYWwuaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9PcHRpb25hbC5oCkBAIC0xLDEwNDEgKzEsNTEgQEAKLS8vIENvcHlyaWdodCAoQykgMjAx
MSAtIDIwMTIgQW5kcnplaiBLcnplbWllbnNraS4KLS8vCi0vLyBVc2UsIG1vZGlmaWNhdGlvbiwg
YW5kIGRpc3RyaWJ1dGlvbiBpcyBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZQotLy8gTGlj
ZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0
IG9yIGNvcHkgYXQKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8v
Ci0vLyBUaGUgaWRlYSBhbmQgaW50ZXJmYWNlIGlzIGJhc2VkIG9uIEJvb3N0Lk9wdGlvbmFsIGxp
YnJhcnkKLS8vIGF1dGhvcmVkIGJ5IEZlcm5hbmRvIEx1aXMgQ2FjY2lvbGEgQ2FyYmFsbGFsCi0v
LwotLy8gQm9vc3QgU29mdHdhcmUgTGljZW5zZSAtIFZlcnNpb24gMS4wIC0gQXVndXN0IDE3dGgs
IDIwMDMKLS8vCi0vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJn
ZSwgdG8gYW55IHBlcnNvbiBvciBvcmdhbml6YXRpb24KLS8vIG9idGFpbmluZyBhIGNvcHkgb2Yg
dGhlIHNvZnR3YXJlIGFuZCBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBjb3ZlcmVkIGJ5Ci0v
LyB0aGlzIGxpY2Vuc2UgKHRoZSAiU29mdHdhcmUiKSB0byB1c2UsIHJlcHJvZHVjZSwgZGlzcGxh
eSwgZGlzdHJpYnV0ZSwKLS8vIGV4ZWN1dGUsIGFuZCB0cmFuc21pdCB0aGUgU29mdHdhcmUsIGFu
ZCB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlCi0vLyBTb2Z0d2FyZSwgYW5kIHRv
IHBlcm1pdCB0aGlyZC1wYXJ0aWVzIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0
bwotLy8gZG8gc28sIGFsbCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmc6Ci0vLwotLy8gVGhlIGNv
cHlyaWdodCBub3RpY2VzIGluIHRoZSBTb2Z0d2FyZSBhbmQgdGhpcyBlbnRpcmUgc3RhdGVtZW50
LCBpbmNsdWRpbmcKLS8vIHRoZSBhYm92ZSBsaWNlbnNlIGdyYW50LCB0aGlzIHJlc3RyaWN0aW9u
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCi0vLyBtdXN0IGJlIGluY2x1ZGVkIGluIGFs
bCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCBhbmQKLS8vIGFs
bCBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTb2Z0d2FyZSwgdW5sZXNzIHN1Y2ggY29waWVzIG9y
IGRlcml2YXRpdmUKLS8vIHdvcmtzIGFyZSBzb2xlbHkgaW4gdGhlIGZvcm0gb2YgbWFjaGluZS1l
eGVjdXRhYmxlIG9iamVjdCBjb2RlIGdlbmVyYXRlZCBieQotLy8gYSBzb3VyY2UgbGFuZ3VhZ2Ug
cHJvY2Vzc29yLgotLy8KLS8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI
T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0vLyBJTVBMSUVELCBJTkNMVURJ
TkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwK
LS8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBUSVRMRSBBTkQgTk9OLUlORlJJ
TkdFTUVOVC4gSU4gTk8gRVZFTlQKLS8vIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBB
TllPTkUgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSBCRSBMSUFCTEUKLS8vIEZPUiBBTlkgREFN
QUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFRPUlQgT1IgT1RI
RVJXSVNFLAotLy8gQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI
RSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCi0vLyBERUFMSU5HUyBJTiBUSEUgU09GVFdB
UkUuCi0KLS8vIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ha3J6ZW1pMS9PcHRpb25h
bCAoODQ1NmMzOTIzNzc2YjMzYjRhZTg1MjczNDI3M2ZlOTM0YzNlNGU2MSkKLQotLy8gTW9kaWZp
ZWQgdG8gbWFrZSBpdCBjb21waWxlIHdpdGggZXhjZXB0aW9ucyBkaXNhYmxlZC4KKy8qCisgKiAg
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
KgorICovCiAKICNwcmFnbWEgb25jZQogCi0jIGluY2x1ZGUgPHV0aWxpdHk+Ci0jIGluY2x1ZGUg
PHR5cGVfdHJhaXRzPgotIyBpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgotIyBpbmNsdWRlIDxj
YXNzZXJ0PgotIyBpbmNsdWRlIDxzdHJpbmc+Ci0jIGluY2x1ZGUgPHN0ZGV4Y2VwdD4KLSMgaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSMgaW5jbHVkZSA8d3RmL0NvbXBpbGVyLmg+Ci0jIGlu
Y2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Ci0jIGluY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
LQotIyBkZWZpbmUgVFIyX09QVElPTkFMX1JFUVVJUkVTKC4uLikgdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8X19WQV9BUkdTX186OnZhbHVlLCBib29sPjo6dHlwZSA9IGZhbHNlCi0KLSMgaWYgZGVm
aW5lZCBfX0dOVUNfXyAvLyBOT1RFOiBHTlVDIGlzIGFsc28gZGVmaW5lZCBmb3IgQ2xhbmcKLSMg
ICBpZiAoX19HTlVDX18gPT0gNCkgJiYgKF9fR05VQ19NSU5PUl9fID49IDgpCi0jICAgICBkZWZp
bmUgVFIyX09QVElPTkFMX0dDQ180XzhfQU5EX0hJR0hFUl9fXwotIyAgIGVsaWYgKF9fR05VQ19f
ID4gNCkKLSMgICAgIGRlZmluZSBUUjJfT1BUSU9OQUxfR0NDXzRfOF9BTkRfSElHSEVSX19fCi0j
ICAgZW5kaWYKLSMKLSMgICBpZiAoX19HTlVDX18gPT0gNCkgJiYgKF9fR05VQ19NSU5PUl9fID49
IDcpCi0jICAgICBkZWZpbmUgVFIyX09QVElPTkFMX0dDQ180XzdfQU5EX0hJR0hFUl9fXwotIyAg
IGVsaWYgKF9fR05VQ19fID4gNCkKLSMgICAgIGRlZmluZSBUUjJfT1BUSU9OQUxfR0NDXzRfN19B
TkRfSElHSEVSX19fCi0jICAgZW5kaWYKLSMKLSMgICBpZiAoX19HTlVDX18gPT0gNCkgJiYgKF9f
R05VQ19NSU5PUl9fID09IDgpICYmIChfX0dOVUNfUEFUQ0hMRVZFTF9fID49IDEpCi0jICAgICBk
ZWZpbmUgVFIyX09QVElPTkFMX0dDQ180XzhfMV9BTkRfSElHSEVSX19fCi0jICAgZWxpZiAoX19H
TlVDX18gPT0gNCkgJiYgKF9fR05VQ19NSU5PUl9fID49IDkpCi0jICAgICBkZWZpbmUgVFIyX09Q
VElPTkFMX0dDQ180XzhfMV9BTkRfSElHSEVSX19fCi0jICAgZWxpZiAoX19HTlVDX18gPiA0KQot
IyAgICAgZGVmaW5lIFRSMl9PUFRJT05BTF9HQ0NfNF84XzFfQU5EX0hJR0hFUl9fXwotIyAgIGVu
ZGlmCi0jIGVuZGlmCi0jCi0jIGlmIGRlZmluZWQgX19jbGFuZ19tYWpvcl9fCi0jICAgaWYgKF9f
Y2xhbmdfbWFqb3JfXyA9PSAzICYmIF9fY2xhbmdfbWlub3JfXyA+PSA1KQotIyAgICAgZGVmaW5l
IFRSMl9PUFRJT05BTF9DTEFOR18zXzVfQU5EX0hJR0hURVJfCi0jICAgZWxpZiAoX19jbGFuZ19t
YWpvcl9fID4gMykKLSMgICAgIGRlZmluZSBUUjJfT1BUSU9OQUxfQ0xBTkdfM181X0FORF9ISUdI
VEVSXwotIyAgIGVuZGlmCi0jICAgaWYgZGVmaW5lZCBUUjJfT1BUSU9OQUxfQ0xBTkdfM181X0FO
RF9ISUdIVEVSXwotIyAgICAgZGVmaW5lIFRSMl9PUFRJT05BTF9DTEFOR18zXzRfMl9BTkRfSElH
SEVSXwotIyAgIGVsaWYgKF9fY2xhbmdfbWFqb3JfXyA9PSAzICYmIF9fY2xhbmdfbWlub3JfXyA9
PSA0ICYmIF9fY2xhbmdfcGF0Y2hsZXZlbF9fID49IDIpCi0jICAgICBkZWZpbmUgVFIyX09QVElP
TkFMX0NMQU5HXzNfNF8yX0FORF9ISUdIRVJfCi0jICAgZW5kaWYKLSMgZW5kaWYKLSMKLSMgaWYg
ZGVmaW5lZCBfTVNDX1ZFUgotIyAgIGlmIChfTVNDX1ZFUiA+PSAxOTAwKQotIyAgICAgZGVmaW5l
IFRSMl9PUFRJT05BTF9NU1ZDXzIwMTVfQU5EX0hJR0hFUl9fXwotIyAgIGVuZGlmCi0jIGVuZGlm
Ci0KLSMgaWYgZGVmaW5lZCBfX2NsYW5nX18KLSMgICBpZiAoX19jbGFuZ19tYWpvcl9fID4gMikg
fHwgKF9fY2xhbmdfbWFqb3JfXyA9PSAyKSAmJiAoX19jbGFuZ19taW5vcl9fID49IDkpCi0jICAg
ICBkZWZpbmUgT1BUSU9OQUxfSEFTX1RISVNfUlZBTFVFX1JFRlMgMQotIyAgIGVsc2UKLSMgICAg
IGRlZmluZSBPUFRJT05BTF9IQVNfVEhJU19SVkFMVUVfUkVGUyAwCi0jICAgZW5kaWYKLSMgZWxp
ZiBkZWZpbmVkIFRSMl9PUFRJT05BTF9HQ0NfNF84XzFfQU5EX0hJR0hFUl9fXwotIyAgIGRlZmlu
ZSBPUFRJT05BTF9IQVNfVEhJU19SVkFMVUVfUkVGUyAxCi0jIGVsaWYgZGVmaW5lZCBUUjJfT1BU
SU9OQUxfTVNWQ18yMDE1X0FORF9ISUdIRVJfX18KLSMgICBkZWZpbmUgT1BUSU9OQUxfSEFTX1RI
SVNfUlZBTFVFX1JFRlMgMQotIyBlbHNlCi0jICAgZGVmaW5lIE9QVElPTkFMX0hBU19USElTX1JW
QUxVRV9SRUZTIDAKLSMgZW5kaWYKLQotCi0jIGlmIGRlZmluZWQgVFIyX09QVElPTkFMX0dDQ180
XzhfMV9BTkRfSElHSEVSX19fCi0jICAgZGVmaW5lIE9QVElPTkFMX0hBU19DT05TVEVYUFJfSU5J
VF9MSVNUIDEKLSMgICBkZWZpbmUgT1BUSU9OQUxfQ09OU1RFWFBSX0lOSVRfTElTVCBjb25zdGV4
cHIKLSMgZWxzZQotIyAgIGRlZmluZSBPUFRJT05BTF9IQVNfQ09OU1RFWFBSX0lOSVRfTElTVCAw
Ci0jICAgZGVmaW5lIE9QVElPTkFMX0NPTlNURVhQUl9JTklUX0xJU1QKLSMgZW5kaWYKLQotIyAv
LyBJbiBDKysxMSBjb25zdGV4cHIgaW1wbGllcyBjb25zdCwgc28gd2UgbmVlZCB0byBtYWtlIG5v
bi1jb25zdCBtZW1iZXJzIGFsc28gbm9uLWNvbnN0ZXhwcgotIyBpZiAoZGVmaW5lZCBfX2NwbHVz
cGx1cykgJiYgKF9fY3BsdXNwbHVzID09IDIwMTEwM0wpCi0jICAgZGVmaW5lIE9QVElPTkFMX01V
VEFCTEVfQ09OU1RFWFBSCi0jIGVsc2UKLSMgICBkZWZpbmUgT1BUSU9OQUxfTVVUQUJMRV9DT05T
VEVYUFIgY29uc3RleHByCi0jIGVuZGlmCi0KLSNpZiBDT01QSUxFUl9TVVBQT1JUUyhFWENFUFRJ
T05TKQotI2RlZmluZSBfX1RIUk9XX0VYQ0VQVElPTihfX2V4Y2VwdGlvbikgdGhyb3cgX19leGNl
cHRpb247Ci0jZGVmaW5lIF9fTk9FWENFUFQgbm9leGNlcHQKLSNkZWZpbmUgX19OT0VYQ0VQVF8o
X19leGNlcHRpb24pIG5vZXhjZXB0KF9fZXhjZXB0aW9uKQotI2Vsc2UKLSNkZWZpbmUgX19USFJP
V19FWENFUFRJT04oX19leGNlcHRpb24pIGRvIHsgKHZvaWQpX19leGNlcHRpb247IENSQVNIKCk7
IH0gd2hpbGUgKDApOwotI2RlZmluZSBfX05PRVhDRVBUCi0jZGVmaW5lIF9fTk9FWENFUFRfKC4u
LikKLSNlbmRpZgorI2luY2x1ZGUgPG9wdGlvbmFsPgogCiBuYW1lc3BhY2UgV1RGIHsKLW5hbWVz
cGFjZSBkZXRhaWxfIHsKLQotLy8gTk9URTogQWxsIG91ciB0YXJnZXQgY29tcGlsZXJzIHN1cHBv
cnQgaXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZS4KLS8vIC8vIEJFR0lOIHdvcmthcm91bmQgZm9y
IG1pc3NpbmcgaXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZQotLy8gIyBpZiBkZWZpbmVkIFRSMl9P
UFRJT05BTF9HQ0NfNF84X0FORF9ISUdIRVJfX18KLS8vICAgICAvLyBsZWF2ZSBpdDogaXQgaXMg
YWxyZWFkeSB0aGVyZQotLy8gIyBlbGlmIGRlZmluZWQgVFIyX09QVElPTkFMX0NMQU5HXzNfNF8y
X0FORF9ISUdIRVJfCi0vLyAgICAgLy8gbGVhdmUgaXQ6IGl0IGlzIGFscmVhZHkgdGhlcmUKLS8v
ICMgZWxpZiBkZWZpbmVkIFRSMl9PUFRJT05BTF9NU1ZDXzIwMTVfQU5EX0hJR0hFUl9fXwotLy8g
ICAgIC8vIGxlYXZlIGl0OiBpdCBpcyBhbHJlYWR5IHRoZXJlCi0vLyAjIGVsaWYgZGVmaW5lZCBU
UjJfT1BUSU9OQUxfRElTQUJMRV9FTVVMQVRJT05fT0ZfVFlQRV9UUkFJVFMKLS8vICAgICAvLyBs
ZWF2ZSBpdDogdGhlIHVzZXIgZG9lc24ndCB3YW50IGl0Ci0vLyAjIGVsc2UKLS8vICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KLS8vICAgICB1c2luZyBpc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxl
ID0gc3RkOjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yPFQ+OwotLy8gIyBlbmRpZgotLy8gLy8gRU5E
IHdvcmthcm91bmQgZm9yIG1pc3NpbmcgaXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZQotCi0jaWYg
Q09NUElMRVJfU1VQUE9SVFMoRVhDRVBUSU9OUykKLSMgaWYgZGVmaW5lZChUUjJfT1BUSU9OQUxf
R0NDXzRfN19BTkRfSElHSEVSX19fKSB8fCBkZWZpbmVkKFRSMl9PUFRJT05BTF9DTEFOR18zXzRf
Ml9BTkRfSElHSEVSXykgfHwgZGVmaW5lZChUUjJfT1BUSU9OQUxfTVNWQ18yMDE1X0FORF9ISUdI
RVJfX18pCi0gICAgLy8gbGVhdmUgaXQ7IG91ciBtZXRhZnVuY3Rpb25zIGFyZSBhbHJlYWR5IGRl
ZmluZWQuCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgdXNpbmcgaXNfbm90aHJvd19t
b3ZlX2NvbnN0cnVjdGlibGUgPSBzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPFQ+
OwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgIHVzaW5nIGlzX25vdGhyb3dfbW92ZV9h
c3NpZ25hYmxlID0gc3RkOjppc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTxUPjsKLSMgZWxpZiBk
ZWZpbmVkIFRSMl9PUFRJT05BTF9ESVNBQkxFX0VNVUxBVElPTl9PRl9UWVBFX1RSQUlUUwotICAg
IC8vIGxlYXZlIGl0OiB0aGUgdXNlciBkb2Vzbid0IHdhbnQgaXQKLSMgZWxzZQotCi0KLS8vIHdv
cmthcm91bmQgZm9yIG1pc3NpbmcgdHJhaXRzIGluIEdDQyBhbmQgQ0xBTkcKLXRlbXBsYXRlIDxj
bGFzcyBUPgotc3RydWN0IGlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlCi17Ci0gIGNvbnN0
ZXhwciBzdGF0aWMgYm9vbCB2YWx1ZSA9IHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1Y3RpYmxlPFQs
IFQmJj46OnZhbHVlOwotfTsKLQotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4KLXN0cnVj
dCBpc19hc3NpZ25hYmxlCi17Ci0gIHRlbXBsYXRlIDxjbGFzcyBYLCBjbGFzcyBZPgotICBjb25z
dGV4cHIgc3RhdGljIGJvb2wgaGFzX2Fzc2lnbiguLi4pIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAg
dGVtcGxhdGUgPGNsYXNzIFgsIGNsYXNzIFksIHNpemVfdCBTID0gc2l6ZW9mKChzdGQ6OmRlY2x2
YWw8WD4oKSA9IHN0ZDo6ZGVjbHZhbDxZPigpLCB0cnVlKSkgPgotICAvLyB0aGUgY29tbWEgb3Bl
cmF0b3IgaXMgbmVjZXNzYXJ5IGZvciB0aGUgY2FzZXMgd2hlcmUgb3BlcmF0b3I9IHJldHVybnMg
dm9pZAotICBjb25zdGV4cHIgc3RhdGljIGJvb2wgaGFzX2Fzc2lnbihib29sKSB7IHJldHVybiB0
cnVlOyB9Ci0KLSAgY29uc3RleHByIHN0YXRpYyBib29sIHZhbHVlID0gaGFzX2Fzc2lnbjxULCBV
Pih0cnVlKTsKLX07Ci0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgaXNfbm90aHJvd19t
b3ZlX2Fzc2lnbmFibGUKLXsKLSAgdGVtcGxhdGUgPGNsYXNzIFgsIGJvb2wgaGFzX2FueV9tb3Zl
X2Fzc2lnbj4KLSAgc3RydWN0IGhhc19ub3Rocm93X21vdmVfYXNzaWduIHsKLSAgICBjb25zdGV4
cHIgc3RhdGljIGJvb2wgdmFsdWUgPSBmYWxzZTsKLSAgfTsKLQotICB0ZW1wbGF0ZSA8Y2xhc3Mg
WD4KLSAgc3RydWN0IGhhc19ub3Rocm93X21vdmVfYXNzaWduPFgsIHRydWU+IHsKLSAgICBjb25z
dGV4cHIgc3RhdGljIGJvb2wgdmFsdWUgPSBfX05PRVhDRVBUXyggc3RkOjpkZWNsdmFsPFgmPigp
ID0gc3RkOjpkZWNsdmFsPFgmJj4oKSApOwotICB9OwotCi0gIGNvbnN0ZXhwciBzdGF0aWMgYm9v
bCB2YWx1ZSA9IGhhc19ub3Rocm93X21vdmVfYXNzaWduPFQsIGlzX2Fzc2lnbmFibGU8VCYsIFQm
Jj46OnZhbHVlPjo6dmFsdWU7Ci19OwotLy8gZW5kIHdvcmthcm91bmQKLQotCi0jIGVuZGlmCi0j
ZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgZGV0YWlsXwotCi0vLyAyMC41LjQsIE9wdGlvbmFsIGZv
ciBvYmplY3QgdHlwZXMKLXRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBPcHRpb25hbDsKLQotLy8g
MjAuNS41LCBPcHRpb25hbCBmb3IgbHZhbHVlIHJlZmVyZW5jZSB0eXBlcwotdGVtcGxhdGUgPGNs
YXNzIFQ+IGNsYXNzIE9wdGlvbmFsPFQmPjsKLQotbmFtZXNwYWNlIGRldGFpbF8gewotCi0vLyB3
b3JrYXJvdW5kOiBzdGQgdXRpbGl0eSBmdW5jdGlvbnMgYXJlbid0IGNvbnN0ZXhwciB5ZXQKLXRl
bXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgVCYmIGNvbnN0ZXhwcl9mb3J3YXJkKHR5cGVuYW1l
IHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxUPjo6dHlwZSYgdCkgX19OT0VYQ0VQVAotewotICByZXR1
cm4gc3RhdGljX2Nhc3Q8VCYmPih0KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhw
ciBUJiYgY29uc3RleHByX2ZvcndhcmQodHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPFQ+
Ojp0eXBlJiYgdCkgX19OT0VYQ0VQVAotewotICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfbHZh
bHVlX3JlZmVyZW5jZTxUPjo6dmFsdWUsICIhISIpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
JiY+KHQpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIHR5cGVuYW1lIHN0ZDo6
cmVtb3ZlX3JlZmVyZW5jZTxUPjo6dHlwZSYmIGNvbnN0ZXhwcl9tb3ZlKFQmJiB0KSBfX05PRVhD
RVBUCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVy
ZW5jZTxUPjo6dHlwZSYmPih0KTsKLX0KLQotCi0vLyBzdGF0aWNfYWRkcmVzc29mOiBhIGNvbnN0
ZXhwciB2ZXJzaW9uIG9mIGFkZHJlc3NvZgotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3Qg
aGFzX292ZXJsb2FkZWRfYWRkcmVzc29mCi17Ci0gIHRlbXBsYXRlIDxjbGFzcyBYPgotICBjb25z
dGV4cHIgc3RhdGljIGJvb2wgaGFzX292ZXJsb2FkKC4uLikgeyByZXR1cm4gZmFsc2U7IH0KLQot
ICB0ZW1wbGF0ZSA8Y2xhc3MgWCwgc2l6ZV90IFMgPSBzaXplb2Yoc3RkOjpkZWNsdmFsPFgmPigp
Lm9wZXJhdG9yJigpKSA+Ci0gIGNvbnN0ZXhwciBzdGF0aWMgYm9vbCBoYXNfb3ZlcmxvYWQoYm9v
bCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gIGNvbnN0ZXhwciBzdGF0aWMgYm9vbCB2YWx1ZSA9IGhh
c19vdmVybG9hZDxUPih0cnVlKTsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCBUUjJfT1BU
SU9OQUxfUkVRVUlSRVMoIWhhc19vdmVybG9hZGVkX2FkZHJlc3NvZjxUPik+Ci1jb25zdGV4cHIg
VCogc3RhdGljX2FkZHJlc3NvZihUJiByZWYpCi17Ci0gIHJldHVybiAmcmVmOwotfQotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgVFIyX09QVElPTkFMX1JFUVVJUkVTKGhhc19vdmVybG9hZGVkX2Fk
ZHJlc3NvZjxUPik+Ci1UKiBzdGF0aWNfYWRkcmVzc29mKFQmIHJlZikKLXsKLSAgcmV0dXJuIHN0
ZDo6YWRkcmVzc29mKHJlZik7Ci19Ci0KLQotLy8gdGhlIGNhbGwgdG8gY29udmVydDxBPihiKSBo
YXMgcmV0dXJuIHR5cGUgQSBhbmQgY29udmVydHMgYiB0byB0eXBlIEEgaWZmIGIgZGVjbHR5cGUo
YikgaXMgaW1wbGljaXRseSBjb252ZXJ0aWJsZSB0byBBCi10ZW1wbGF0ZSA8Y2xhc3MgVT4KLWNv
bnN0ZXhwciBVIGNvbnZlcnQoVSB2KSB7IHJldHVybiB2OyB9Ci0KLX0gLy8gbmFtZXNwYWNlIGRl
dGFpbAotCi0KLWNvbnN0ZXhwciBzdHJ1Y3QgdHJpdmlhbF9pbml0X3R7fSB0cml2aWFsX2luaXR7
fTsKLQotCi0vLyAyMC41LjcsIERpc2VuZ2FnZWQgc3RhdGUgaW5kaWNhdG9yCi1zdHJ1Y3QgbnVs
bG9wdF90Ci17Ci0gIHN0cnVjdCBpbml0e307Ci0gIGNvbnN0ZXhwciBleHBsaWNpdCBudWxsb3B0
X3QoaW5pdCl7fQotfTsKLWNvbnN0ZXhwciBudWxsb3B0X3QgbnVsbG9wdHtudWxsb3B0X3Q6Omlu
aXQoKX07Ci0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci11bmlvbiBzdG9yYWdlX3QKLXsKLSAgdW5z
aWduZWQgY2hhciBkdW1teV87Ci0gIFQgdmFsdWVfOwotCi0gIGNvbnN0ZXhwciBzdG9yYWdlX3Qo
IHRyaXZpYWxfaW5pdF90ICkgX19OT0VYQ0VQVCA6IGR1bW15XygpIHt9OwotCi0gIHRlbXBsYXRl
IDxjbGFzcy4uLiBBcmdzPgotICBjb25zdGV4cHIgc3RvcmFnZV90KCBBcmdzJiYuLi4gYXJncyAp
IDogdmFsdWVfKGRldGFpbF86OmNvbnN0ZXhwcl9mb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSB7fQot
Ci0gIH5zdG9yYWdlX3QoKXt9Ci19OwotCi0KLXRlbXBsYXRlIDxjbGFzcyBUPgotdW5pb24gY29u
c3RleHByX3N0b3JhZ2VfdAotewotICAgIHVuc2lnbmVkIGNoYXIgZHVtbXlfOwotICAgIFQgdmFs
dWVfOwotCi0gICAgY29uc3RleHByIGNvbnN0ZXhwcl9zdG9yYWdlX3QoIHRyaXZpYWxfaW5pdF90
ICkgX19OT0VYQ0VQVCA6IGR1bW15XygpIHt9OwotCi0gICAgdGVtcGxhdGUgPGNsYXNzLi4uIEFy
Z3M+Ci0gICAgY29uc3RleHByIGNvbnN0ZXhwcl9zdG9yYWdlX3QoIEFyZ3MmJi4uLiBhcmdzICkg
OiB2YWx1ZV8oZGV0YWlsXzo6Y29uc3RleHByX2ZvcndhcmQ8QXJncz4oYXJncykuLi4pIHt9Ci0K
LSAgICB+Y29uc3RleHByX3N0b3JhZ2VfdCgpID0gZGVmYXVsdDsKLX07Ci0KLQotdGVtcGxhdGUg
PGNsYXNzIFQ+Ci1zdHJ1Y3QgT3B0aW9uYWxfYmFzZQotewotICAgIGJvb2wgaW5pdF87Ci0gICAg
c3RvcmFnZV90PFQ+IHN0b3JhZ2VfOwotCi0gICAgY29uc3RleHByIE9wdGlvbmFsX2Jhc2UoKSBf
X05PRVhDRVBUIDogaW5pdF8oZmFsc2UpLCBzdG9yYWdlXyh0cml2aWFsX2luaXQpIHt9OwotCi0g
ICAgZXhwbGljaXQgY29uc3RleHByIE9wdGlvbmFsX2Jhc2UoY29uc3QgVCYgdikgOiBpbml0Xyh0
cnVlKSwgc3RvcmFnZV8odikge30KLQotICAgIGV4cGxpY2l0IGNvbnN0ZXhwciBPcHRpb25hbF9i
YXNlKFQmJiB2KSA6IGluaXRfKHRydWUpLCBzdG9yYWdlXyhkZXRhaWxfOjpjb25zdGV4cHJfbW92
ZSh2KSkge30KLQotICAgIHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPiBleHBsaWNpdCBPcHRpb25h
bF9iYXNlKHN0ZDo6aW5fcGxhY2VfdCwgQXJncyYmLi4uIGFyZ3MpCi0gICAgICAgIDogaW5pdF8o
dHJ1ZSksIHN0b3JhZ2VfKGRldGFpbF86OmNvbnN0ZXhwcl9mb3J3YXJkPEFyZ3M+KGFyZ3MpLi4u
KSB7fQotCi0gICAgdGVtcGxhdGUgPGNsYXNzIFUsIGNsYXNzLi4uIEFyZ3MsIFRSMl9PUFRJT05B
TF9SRVFVSVJFUyhzdGQ6OmlzX2NvbnN0cnVjdGlibGU8VCwgc3RkOjppbml0aWFsaXplcl9saXN0
PFU+Pik+Ci0gICAgZXhwbGljaXQgT3B0aW9uYWxfYmFzZShzdGQ6OmluX3BsYWNlX3QsIHN0ZDo6
aW5pdGlhbGl6ZXJfbGlzdDxVPiBpbCwgQXJncyYmLi4uIGFyZ3MpCi0gICAgICAgIDogaW5pdF8o
dHJ1ZSksIHN0b3JhZ2VfKGlsLCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pIHt9Ci0KLSAg
ICB+T3B0aW9uYWxfYmFzZSgpIHsgaWYgKGluaXRfKSBzdG9yYWdlXy52YWx1ZV8uVDo6flQoKTsg
fQotfTsKLQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBjb25zdGV4cHJfT3B0aW9uYWxf
YmFzZQotewotICAgIGJvb2wgaW5pdF87Ci0gICAgY29uc3RleHByX3N0b3JhZ2VfdDxUPiBzdG9y
YWdlXzsKLQotICAgIGNvbnN0ZXhwciBjb25zdGV4cHJfT3B0aW9uYWxfYmFzZSgpIF9fTk9FWENF
UFQgOiBpbml0XyhmYWxzZSksIHN0b3JhZ2VfKHRyaXZpYWxfaW5pdCkge307Ci0KLSAgICBleHBs
aWNpdCBjb25zdGV4cHIgY29uc3RleHByX09wdGlvbmFsX2Jhc2UoY29uc3QgVCYgdikgOiBpbml0
Xyh0cnVlKSwgc3RvcmFnZV8odikge30KLQotICAgIGV4cGxpY2l0IGNvbnN0ZXhwciBjb25zdGV4
cHJfT3B0aW9uYWxfYmFzZShUJiYgdikgOiBpbml0Xyh0cnVlKSwgc3RvcmFnZV8oZGV0YWlsXzo6
Y29uc3RleHByX21vdmUodikpIHt9Ci0KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gQXJncz4gZXhw
bGljaXQgY29uc3RleHByIGNvbnN0ZXhwcl9PcHRpb25hbF9iYXNlKHN0ZDo6aW5fcGxhY2VfdCwg
QXJncyYmLi4uIGFyZ3MpCi0gICAgICA6IGluaXRfKHRydWUpLCBzdG9yYWdlXyhkZXRhaWxfOjpj
b25zdGV4cHJfZm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KLQotICAgIHRlbXBsYXRlIDxjbGFz
cyBVLCBjbGFzcy4uLiBBcmdzLCBUUjJfT1BUSU9OQUxfUkVRVUlSRVMoc3RkOjppc19jb25zdHJ1
Y3RpYmxlPFQsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVPj4pPgotICAgIE9QVElPTkFMX0NPTlNU
RVhQUl9JTklUX0xJU1QgZXhwbGljaXQgY29uc3RleHByX09wdGlvbmFsX2Jhc2Uoc3RkOjppbl9w
bGFjZV90LCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VT4gaWwsIEFyZ3MmJi4uLiBhcmdzKQotICAg
ICAgOiBpbml0Xyh0cnVlKSwgc3RvcmFnZV8oaWwsIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4u
Likge30KLQotICAgIH5jb25zdGV4cHJfT3B0aW9uYWxfYmFzZSgpID0gZGVmYXVsdDsKLX07Ci0K
LXRlbXBsYXRlIDxjbGFzcyBUPgotdXNpbmcgT3B0aW9uYWxCYXNlID0gdHlwZW5hbWUgc3RkOjpj
b25kaXRpb25hbDwKLSAgICBzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8VD46OnZhbHVl
LCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgcG9zc2libGUKLSAgICBjb25zdGV4cHJf
T3B0aW9uYWxfYmFzZTx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDxUPjo6dHlwZT4sIC8vIHVz
ZSBiYXNlIHdpdGggdHJpdmlhbCBkZXN0cnVjdG9yCi0gICAgT3B0aW9uYWxfYmFzZTx0eXBlbmFt
ZSBzdGQ6OnJlbW92ZV9jb25zdDxUPjo6dHlwZT4KLT46OnR5cGU7Ci0KLQotCi10ZW1wbGF0ZSA8
Y2xhc3MgVD4KLWNsYXNzIE9wdGlvbmFsIDogcHJpdmF0ZSBPcHRpb25hbEJhc2U8VD4KLXsKLSAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gIHN0YXRpY19hc3NlcnQoICFzdGQ6OmlzX3NhbWU8
dHlwZW5hbWUgc3RkOjpkZWNheTxUPjo6dHlwZSwgbnVsbG9wdF90Pjo6dmFsdWUsICJiYWQgVCIg
KTsKLSAgc3RhdGljX2Fzc2VydCggIXN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBzdGQ6OmRlY2F5PFQ+
Ojp0eXBlLCBzdGQ6OmluX3BsYWNlX3Q+Ojp2YWx1ZSwgImJhZCBUIiApOwotCi0KLSAgY29uc3Rl
eHByIGJvb2wgaW5pdGlhbGl6ZWQoKSBjb25zdCBfX05PRVhDRVBUIHsgcmV0dXJuIE9wdGlvbmFs
QmFzZTxUPjo6aW5pdF87IH0KLSAgdHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8VD46OnR5cGUq
IGRhdGFwdHIoKSB7ICByZXR1cm4gc3RkOjphZGRyZXNzb2YoT3B0aW9uYWxCYXNlPFQ+OjpzdG9y
YWdlXy52YWx1ZV8pOyB9Ci0gIGNvbnN0ZXhwciBjb25zdCBUKiBkYXRhcHRyKCkgY29uc3QgeyBy
ZXR1cm4gZGV0YWlsXzo6c3RhdGljX2FkZHJlc3NvZihPcHRpb25hbEJhc2U8VD46OnN0b3JhZ2Vf
LnZhbHVlXyk7IH0KLQotIyBpZiBPUFRJT05BTF9IQVNfVEhJU19SVkFMVUVfUkVGUyA9PSAxCi0g
IGNvbnN0ZXhwciBjb25zdCBUJiBjb250YWluZWRfdmFsKCkgY29uc3QmIHsgcmV0dXJuIE9wdGlv
bmFsQmFzZTxUPjo6c3RvcmFnZV8udmFsdWVfOyB9Ci0gIE9QVElPTkFMX01VVEFCTEVfQ09OU1RF
WFBSIFQmJiBjb250YWluZWRfdmFsKCkgJiYgeyByZXR1cm4gc3RkOjptb3ZlKE9wdGlvbmFsQmFz
ZTxUPjo6c3RvcmFnZV8udmFsdWVfKTsgfQotICBPUFRJT05BTF9NVVRBQkxFX0NPTlNURVhQUiBU
JiBjb250YWluZWRfdmFsKCkgJiB7IHJldHVybiBPcHRpb25hbEJhc2U8VD46OnN0b3JhZ2VfLnZh
bHVlXzsgfQotIyBlbHNlCi0gIGNvbnN0ZXhwciBjb25zdCBUJiBjb250YWluZWRfdmFsKCkgY29u
c3QgeyByZXR1cm4gT3B0aW9uYWxCYXNlPFQ+OjpzdG9yYWdlXy52YWx1ZV87IH0KLSAgVCYgY29u
dGFpbmVkX3ZhbCgpIHsgcmV0dXJuIE9wdGlvbmFsQmFzZTxUPjo6c3RvcmFnZV8udmFsdWVfOyB9
Ci0jIGVuZGlmCi0KLSAgdm9pZCBjbGVhcigpIF9fTk9FWENFUFQgewotICAgIGlmIChpbml0aWFs
aXplZCgpKSBkYXRhcHRyKCktPlQ6On5UKCk7Ci0gICAgT3B0aW9uYWxCYXNlPFQ+Ojppbml0XyA9
IGZhbHNlOwotICB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+Ci0gIHZvaWQgaW5pdGlh
bGl6ZShBcmdzJiYuLi4gYXJncykgX19OT0VYQ0VQVF8oX19OT0VYQ0VQVF8oVChzdGQ6OmZvcndh
cmQ8QXJncz4oYXJncykuLi4pKSkKLSAgewotICAgIEFTU0VSVCghT3B0aW9uYWxCYXNlPFQ+Ojpp
bml0Xyk7Ci0gICAgOjpuZXcgKHN0YXRpY19jYXN0PHZvaWQqPihkYXRhcHRyKCkpKSBUKHN0ZDo6
Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0gICAgT3B0aW9uYWxCYXNlPFQ+Ojppbml0XyA9IHRy
dWU7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgVSwgY2xhc3MuLi4gQXJncz4KLSAgdm9pZCBp
bml0aWFsaXplKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVPiBpbCwgQXJncyYmLi4uIGFyZ3MpIF9f
Tk9FWENFUFRfKF9fTk9FWENFUFRfKFQoaWwsIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikp
KQotICB7Ci0gICAgQVNTRVJUKCFPcHRpb25hbEJhc2U8VD46OmluaXRfKTsKLSAgICA6Om5ldyAo
c3RhdGljX2Nhc3Q8dm9pZCo+KGRhdGFwdHIoKSkpIFQoaWwsIHN0ZDo6Zm9yd2FyZDxBcmdzPihh
cmdzKS4uLik7Ci0gICAgT3B0aW9uYWxCYXNlPFQ+Ojppbml0XyA9IHRydWU7Ci0gIH0KLQotcHVi
bGljOgotICB0eXBlZGVmIFQgdmFsdWVfdHlwZTsKLQotICAvLyAyMC41LjUuMSwgY29uc3RydWN0
b3JzCi0gIGNvbnN0ZXhwciBPcHRpb25hbCgpIF9fTk9FWENFUFQgOiBPcHRpb25hbEJhc2U8VD4o
KSAge307Ci0gIGNvbnN0ZXhwciBPcHRpb25hbChudWxsb3B0X3QpIF9fTk9FWENFUFQgOiBPcHRp
b25hbEJhc2U8VD4oKSB7fTsKLQotICBPcHRpb25hbChjb25zdCBPcHRpb25hbCYgcmhzKQotICA6
IE9wdGlvbmFsQmFzZTxUPigpCi0gIHsKLSAgICBpZiAocmhzLmluaXRpYWxpemVkKCkpIHsKLSAg
ICAgICAgOjpuZXcgKHN0YXRpY19jYXN0PHZvaWQqPihkYXRhcHRyKCkpKSBUKCpyaHMpOwotICAg
ICAgICBPcHRpb25hbEJhc2U8VD46OmluaXRfID0gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICBPcHRp
b25hbChPcHRpb25hbCYmIHJocykgX19OT0VYQ0VQVF8oZGV0YWlsXzo6aXNfbm90aHJvd19tb3Zl
X2NvbnN0cnVjdGlibGU8VD46OnZhbHVlKQotICA6IE9wdGlvbmFsQmFzZTxUPigpCi0gIHsKLSAg
ICBpZiAocmhzLmluaXRpYWxpemVkKCkpIHsKLSAgICAgICAgOjpuZXcgKHN0YXRpY19jYXN0PHZv
aWQqPihkYXRhcHRyKCkpKSBUKHN0ZDo6bW92ZSgqcmhzKSk7Ci0gICAgICAgIE9wdGlvbmFsQmFz
ZTxUPjo6aW5pdF8gPSB0cnVlOwotICAgICAgICByaHMuY2xlYXIoKTsKLSAgICB9Ci0gIH0KLQot
ICBjb25zdGV4cHIgT3B0aW9uYWwoY29uc3QgVCYgdikgOiBPcHRpb25hbEJhc2U8VD4odikge30K
LQotICBjb25zdGV4cHIgT3B0aW9uYWwoVCYmIHYpIDogT3B0aW9uYWxCYXNlPFQ+KGRldGFpbF86
OmNvbnN0ZXhwcl9tb3ZlKHYpKSB7fQotCi0gIHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPgotICBl
eHBsaWNpdCBjb25zdGV4cHIgT3B0aW9uYWwoc3RkOjppbl9wbGFjZV90LCBBcmdzJiYuLi4gYXJn
cykKLSAgICAgIDogT3B0aW9uYWxCYXNlPFQ+KHN0ZDo6aW5fcGxhY2VfdHt9LCBkZXRhaWxfOjpj
b25zdGV4cHJfZm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KLQotICB0ZW1wbGF0ZSA8Y2xhc3Mg
VSwgY2xhc3MuLi4gQXJncywgVFIyX09QVElPTkFMX1JFUVVJUkVTKHN0ZDo6aXNfY29uc3RydWN0
aWJsZTxULCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VT4+KT4KLSAgT1BUSU9OQUxfQ09OU1RFWFBS
X0lOSVRfTElTVCBleHBsaWNpdCBPcHRpb25hbChzdGQ6OmluX3BsYWNlX3QsIHN0ZDo6aW5pdGlh
bGl6ZXJfbGlzdDxVPiBpbCwgQXJncyYmLi4uIGFyZ3MpCi0gICAgICA6IE9wdGlvbmFsQmFzZTxU
PihzdGQ6OmluX3BsYWNlX3R7fSwgaWwsIGRldGFpbF86OmNvbnN0ZXhwcl9mb3J3YXJkPEFyZ3M+
KGFyZ3MpLi4uKSB7fQotCi0gIC8vIDIwLjUuNC4yLCBEZXN0cnVjdG9yCi0gIH5PcHRpb25hbCgp
ID0gZGVmYXVsdDsKLQotICAvLyAyMC41LjQuMywgYXNzaWdubWVudAotICBPcHRpb25hbCYgb3Bl
cmF0b3I9KG51bGxvcHRfdCkgX19OT0VYQ0VQVAotICB7Ci0gICAgY2xlYXIoKTsKLSAgICByZXR1
cm4gKnRoaXM7Ci0gIH0KLQotICBPcHRpb25hbCYgb3BlcmF0b3I9KGNvbnN0IE9wdGlvbmFsJiBy
aHMpCi0gIHsKLSAgICBpZiAgICAgIChpbml0aWFsaXplZCgpID09IHRydWUgICYmIHJocy5pbml0
aWFsaXplZCgpID09IGZhbHNlKSBjbGVhcigpOwotICAgIGVsc2UgaWYgKGluaXRpYWxpemVkKCkg
PT0gZmFsc2UgJiYgcmhzLmluaXRpYWxpemVkKCkgPT0gdHJ1ZSkgIGluaXRpYWxpemUoKnJocyk7
Ci0gICAgZWxzZSBpZiAoaW5pdGlhbGl6ZWQoKSA9PSB0cnVlICAmJiByaHMuaW5pdGlhbGl6ZWQo
KSA9PSB0cnVlKSAgY29udGFpbmVkX3ZhbCgpID0gKnJoczsKLSAgICByZXR1cm4gKnRoaXM7Ci0g
IH0KLQotICBPcHRpb25hbCYgb3BlcmF0b3I9KE9wdGlvbmFsJiYgcmhzKQotICBfX05PRVhDRVBU
XyhkZXRhaWxfOjppc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTxUPjo6dmFsdWUgJiYgZGV0YWls
Xzo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8VD46OnZhbHVlKQotICB7Ci0gICAgaWYg
ICAgICAoaW5pdGlhbGl6ZWQoKSA9PSB0cnVlICAmJiByaHMuaW5pdGlhbGl6ZWQoKSA9PSBmYWxz
ZSkgY2xlYXIoKTsKLSAgICBlbHNlIGlmIChpbml0aWFsaXplZCgpID09IGZhbHNlICYmIHJocy5p
bml0aWFsaXplZCgpID09IHRydWUpICB7IGluaXRpYWxpemUoc3RkOjptb3ZlKCpyaHMpKTsgcmhz
LmNsZWFyKCk7IH0KLSAgICBlbHNlIGlmIChpbml0aWFsaXplZCgpID09IHRydWUgICYmIHJocy5p
bml0aWFsaXplZCgpID09IHRydWUpICB7IGNvbnRhaW5lZF92YWwoKSA9IHN0ZDo6bW92ZSgqcmhz
KTsgcmhzLmNsZWFyKCk7IH0KLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8
Y2xhc3MgVT4KLSAgYXV0byBvcGVyYXRvcj0oVSYmIHYpCi0gIC0+IHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmCi0gIDwKLSAgICBzdGQ6OmlzX3NhbWU8dHlwZW5hbWUgc3RkOjpkZWNheTxVPjo6dHlw
ZSwgVD46OnZhbHVlLAotICAgIE9wdGlvbmFsJgotICA+Ojp0eXBlCi0gIHsKLSAgICBpZiAoaW5p
dGlhbGl6ZWQoKSkgeyBjb250YWluZWRfdmFsKCkgPSBzdGQ6OmZvcndhcmQ8VT4odik7IH0KLSAg
ICBlbHNlICAgICAgICAgICAgICAgeyBpbml0aWFsaXplKHN0ZDo6Zm9yd2FyZDxVPih2KSk7ICB9
Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gQXJncz4K
LSAgdm9pZCBlbXBsYWNlKEFyZ3MmJi4uLiBhcmdzKQotICB7Ci0gICAgY2xlYXIoKTsKLSAgICBp
bml0aWFsaXplKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0gIH0KLQotICB0ZW1wbGF0
ZSA8Y2xhc3MgVSwgY2xhc3MuLi4gQXJncz4KLSAgdm9pZCBlbXBsYWNlKHN0ZDo6aW5pdGlhbGl6
ZXJfbGlzdDxVPiBpbCwgQXJncyYmLi4uIGFyZ3MpCi0gIHsKLSAgICBjbGVhcigpOwotICAgIGlu
aXRpYWxpemU8VSwgQXJncy4uLj4oaWwsIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0g
IH0KLQotICAvLyAyMC41LjQuNCwgU3dhcAotICB2b2lkIHN3YXAoT3B0aW9uYWw8VD4mIHJocykg
X19OT0VYQ0VQVF8oZGV0YWlsXzo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8VD46OnZh
bHVlICYmIF9fTk9FWENFUFRfKHN3YXAoc3RkOjpkZWNsdmFsPFQmPigpLCBzdGQ6OmRlY2x2YWw8
VCY+KCkpKSkKLSAgewotICAgIGlmICAgICAgKGluaXRpYWxpemVkKCkgPT0gdHJ1ZSAgJiYgcmhz
LmluaXRpYWxpemVkKCkgPT0gZmFsc2UpIHsgcmhzLmluaXRpYWxpemUoc3RkOjptb3ZlKCoqdGhp
cykpOyBjbGVhcigpOyB9Ci0gICAgZWxzZSBpZiAoaW5pdGlhbGl6ZWQoKSA9PSBmYWxzZSAmJiBy
aHMuaW5pdGlhbGl6ZWQoKSA9PSB0cnVlKSAgeyBpbml0aWFsaXplKHN0ZDo6bW92ZSgqcmhzKSk7
IHJocy5jbGVhcigpOyB9Ci0gICAgZWxzZSBpZiAoaW5pdGlhbGl6ZWQoKSA9PSB0cnVlICAmJiBy
aHMuaW5pdGlhbGl6ZWQoKSA9PSB0cnVlKSAgeyB1c2luZyBzdGQ6OnN3YXA7IHN3YXAoKip0aGlz
LCAqcmhzKTsgfQotICB9Ci0KLSAgLy8gMjAuNS40LjUsIE9ic2VydmVycwotCi0gIGV4cGxpY2l0
IGNvbnN0ZXhwciBvcGVyYXRvciBib29sKCkgY29uc3QgX19OT0VYQ0VQVCB7IHJldHVybiBpbml0
aWFsaXplZCgpOyB9Ci0gIGNvbnN0ZXhwciBib29sIGhhc1ZhbHVlKCkgY29uc3QgX19OT0VYQ0VQ
VCB7IHJldHVybiBpbml0aWFsaXplZCgpOyB9Ci0KLSAgY29uc3RleHByIFQgY29uc3QqIG9wZXJh
dG9yIC0+KCkgY29uc3QgewotICAgIFJFTEVBU0VfQVNTRVJUX1VOREVSX0NPTlNURVhQUl9DT05U
RVhUKGluaXRpYWxpemVkKCkpOwotICAgIHJldHVybiBkYXRhcHRyKCk7Ci0gIH0KLQotICBPUFRJ
T05BTF9NVVRBQkxFX0NPTlNURVhQUiBUKiBvcGVyYXRvciAtPigpIHsKLSAgICBSRUxFQVNFX0FT
U0VSVF9VTkRFUl9DT05TVEVYUFJfQ09OVEVYVChpbml0aWFsaXplZCgpKTsKLSAgICByZXR1cm4g
ZGF0YXB0cigpOwotICB9Ci0KLSAgY29uc3RleHByIFQgY29uc3QmIG9wZXJhdG9yICooKSBjb25z
dCYgewotICAgIFJFTEVBU0VfQVNTRVJUX1VOREVSX0NPTlNURVhQUl9DT05URVhUKGluaXRpYWxp
emVkKCkpOwotICAgIHJldHVybiBjb250YWluZWRfdmFsKCk7Ci0gIH0KLQotICBPUFRJT05BTF9N
VVRBQkxFX0NPTlNURVhQUiBUJiBvcGVyYXRvciAqKCkgJiB7Ci0gICAgUkVMRUFTRV9BU1NFUlRf
VU5ERVJfQ09OU1RFWFBSX0NPTlRFWFQoaW5pdGlhbGl6ZWQoKSk7Ci0gICAgcmV0dXJuIGNvbnRh
aW5lZF92YWwoKTsKLSAgfQotCi0gIE9QVElPTkFMX01VVEFCTEVfQ09OU1RFWFBSIFQmJiBvcGVy
YXRvciAqKCkgJiYgewotICAgIFJFTEVBU0VfQVNTRVJUX1VOREVSX0NPTlNURVhQUl9DT05URVhU
KGluaXRpYWxpemVkKCkpOwotICAgIHJldHVybiBkZXRhaWxfOjpjb25zdGV4cHJfbW92ZShjb250
YWluZWRfdmFsKCkpOwotICB9Ci0KLSAgY29uc3RleHByIFQgY29uc3QmIHZhbHVlKCkgY29uc3Qm
IHsKLSAgICBSRUxFQVNFX0FTU0VSVF9VTkRFUl9DT05TVEVYUFJfQ09OVEVYVChpbml0aWFsaXpl
ZCgpKTsKLSAgICByZXR1cm4gY29udGFpbmVkX3ZhbCgpOwotICB9Ci0KLSAgT1BUSU9OQUxfTVVU
QUJMRV9DT05TVEVYUFIgVCYgdmFsdWUoKSAmIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9VTkRFUl9D
T05TVEVYUFJfQ09OVEVYVChpbml0aWFsaXplZCgpKTsKLSAgICByZXR1cm4gY29udGFpbmVkX3Zh
bCgpOwotICB9Ci0KLSAgT1BUSU9OQUxfTVVUQUJMRV9DT05TVEVYUFIgVCYmIHZhbHVlKCkgJiYg
ewotICAgIFJFTEVBU0VfQVNTRVJUX1VOREVSX0NPTlNURVhQUl9DT05URVhUKGluaXRpYWxpemVk
KCkpOwotICAgIHJldHVybiBzdGQ6Om1vdmUoY29udGFpbmVkX3ZhbCgpKTsKLSAgfQotCi0jIGlm
IE9QVElPTkFMX0hBU19USElTX1JWQUxVRV9SRUZTID09IDEKLQotICB0ZW1wbGF0ZSA8Y2xhc3Mg
Vj4KLSAgY29uc3RleHByIFQgdmFsdWVPcihWJiYgdikgY29uc3QmCi0gIHsKLSAgICByZXR1cm4g
KnRoaXMgPyAqKnRoaXMgOiBkZXRhaWxfOjpjb252ZXJ0PFQ+KGRldGFpbF86OmNvbnN0ZXhwcl9m
b3J3YXJkPFY+KHYpKTsKLSAgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBWPgotICBPUFRJT05BTF9N
VVRBQkxFX0NPTlNURVhQUiBUIHZhbHVlT3IoViYmIHYpICYmCi0gIHsKLSAgICByZXR1cm4gKnRo
aXMgPyBkZXRhaWxfOjpjb25zdGV4cHJfbW92ZShjb25zdF9jYXN0PE9wdGlvbmFsPFQ+Jj4oKnRo
aXMpLmNvbnRhaW5lZF92YWwoKSkgOiBkZXRhaWxfOjpjb252ZXJ0PFQ+KGRldGFpbF86OmNvbnN0
ZXhwcl9mb3J3YXJkPFY+KHYpKTsKLSAgfQotCi0jIGVsc2UKLQotICB0ZW1wbGF0ZSA8Y2xhc3Mg
Vj4KLSAgY29uc3RleHByIFQgdmFsdWVPcihWJiYgdikgY29uc3QKLSAgewotICAgIHJldHVybiAq
dGhpcyA/ICoqdGhpcyA6IGRldGFpbF86OmNvbnZlcnQ8VD4oZGV0YWlsXzo6Y29uc3RleHByX2Zv
cndhcmQ8Vj4odikpOwotICB9Ci0KLSMgZW5kaWYKLQotICAvLyAyMC42LjMuNiwgbW9kaWZpZXJz
Ci0gIHZvaWQgcmVzZXQoKSBfX05PRVhDRVBUIHsgY2xlYXIoKTsgfQotfTsKLQotCi10ZW1wbGF0
ZSA8Y2xhc3MgVD4KLWNsYXNzIE9wdGlvbmFsPFQmPgotewotICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLSAgc3RhdGljX2Fzc2VydCggIXN0ZDo6aXNfc2FtZTxULCBudWxsb3B0X3Q+Ojp2YWx1
ZSwgImJhZCBUIiApOwotICBzdGF0aWNfYXNzZXJ0KCAhc3RkOjppc19zYW1lPFQsIHN0ZDo6aW5f
cGxhY2VfdD46OnZhbHVlLCAiYmFkIFQiICk7Ci0gIFQqIHJlZjsKLQotcHVibGljOgotCi0gIC8v
IDIwLjUuNS4xLCBjb25zdHJ1Y3Rpb24vZGVzdHJ1Y3Rpb24KLSAgY29uc3RleHByIE9wdGlvbmFs
KCkgX19OT0VYQ0VQVCA6IHJlZihudWxscHRyKSB7fQotCi0gIGNvbnN0ZXhwciBPcHRpb25hbChu
dWxsb3B0X3QpIF9fTk9FWENFUFQgOiByZWYobnVsbHB0cikge30KLQotICBjb25zdGV4cHIgT3B0
aW9uYWwoVCYgdikgX19OT0VYQ0VQVCA6IHJlZihkZXRhaWxfOjpzdGF0aWNfYWRkcmVzc29mKHYp
KSB7fQotCi0gIE9wdGlvbmFsKFQmJikgPSBkZWxldGU7Ci0KLSAgY29uc3RleHByIE9wdGlvbmFs
KGNvbnN0IE9wdGlvbmFsJiByaHMpIF9fTk9FWENFUFQgOiByZWYocmhzLnJlZikge30KLQotICBl
eHBsaWNpdCBjb25zdGV4cHIgT3B0aW9uYWwoc3RkOjppbl9wbGFjZV90LCBUJiB2KSBfX05PRVhD
RVBUIDogcmVmKGRldGFpbF86OnN0YXRpY19hZGRyZXNzb2YodikpIHt9Ci0KLSAgZXhwbGljaXQg
T3B0aW9uYWwoc3RkOjppbl9wbGFjZV90LCBUJiYpID0gZGVsZXRlOwotCi0gIH5PcHRpb25hbCgp
ID0gZGVmYXVsdDsKLQotICAvLyAyMC41LjUuMiwgbXV0YXRpb24KLSAgT3B0aW9uYWwmIG9wZXJh
dG9yPShudWxsb3B0X3QpIF9fTk9FWENFUFQgewotICAgIHJlZiA9IG51bGxwdHI7Ci0gICAgcmV0
dXJuICp0aGlzOwotICB9Ci0KLSAgLy8gT3B0aW9uYWwmIG9wZXJhdG9yPShjb25zdCBPcHRpb25h
bCYgcmhzKSBfX05PRVhDRVBUIHsKLSAgICAvLyByZWYgPSByaHMucmVmOwotICAgIC8vIHJldHVy
biAqdGhpczsKLSAgLy8gfQotCi0gIC8vIE9wdGlvbmFsJiBvcGVyYXRvcj0oT3B0aW9uYWwmJiBy
aHMpIF9fTk9FWENFUFQgewotICAgIC8vIHJlZiA9IHJocy5yZWY7Ci0gICAgLy8gcmV0dXJuICp0
aGlzOwotICAvLyB9Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gIGF1dG8gb3BlcmF0b3I9
KFUmJiByaHMpIF9fTk9FWENFUFQKLSAgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWYKLSAgPAot
ICAgIHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBzdGQ6OmRlY2F5PFU+Ojp0eXBlLCBPcHRpb25hbDxU
Jj4+Ojp2YWx1ZSwKLSAgICBPcHRpb25hbCYKLSAgPjo6dHlwZQotICB7Ci0gICAgcmVmID0gcmhz
LnJlZjsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4K
LSAgYXV0byBvcGVyYXRvcj0oVSYmIHJocykgX19OT0VYQ0VQVAotICAtPiB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZgotICA8Ci0gICAgIXN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBzdGQ6OmRlY2F5PFU+
Ojp0eXBlLCBPcHRpb25hbDxUJj4+Ojp2YWx1ZSwKLSAgICBPcHRpb25hbCYKLSAgPjo6dHlwZQot
ICA9IGRlbGV0ZTsKLQotICB2b2lkIGVtcGxhY2UoVCYgdikgX19OT0VYQ0VQVCB7Ci0gICAgcmVm
ID0gZGV0YWlsXzo6c3RhdGljX2FkZHJlc3NvZih2KTsKLSAgfQotCi0gIHZvaWQgZW1wbGFjZShU
JiYpID0gZGVsZXRlOwotCi0KLSAgdm9pZCBzd2FwKE9wdGlvbmFsPFQmPiYgcmhzKSBfX05PRVhD
RVBUCi0gIHsKLSAgICBzdGQ6OnN3YXAocmVmLCByaHMucmVmKTsKLSAgfQotCi0gIC8vIDIwLjUu
NS4zLCBvYnNlcnZlcnMKLSAgY29uc3RleHByIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7Ci0gICAg
UkVMRUFTRV9BU1NFUlRfVU5ERVJfQ09OU1RFWFBSX0NPTlRFWFQocmVmKTsKLSAgICByZXR1cm4g
cmVmOwotICB9Ci0KLSAgY29uc3RleHByIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsKLSAgICBSRUxF
QVNFX0FTU0VSVF9VTkRFUl9DT05TVEVYUFJfQ09OVEVYVChyZWYpOwotICAgIHJldHVybiAqcmVm
OwotICB9Ci0KLSAgY29uc3RleHByIFQmIHZhbHVlKCkgY29uc3QgewotICAgIFJFTEVBU0VfQVNT
RVJUX1VOREVSX0NPTlNURVhQUl9DT05URVhUKHJlZigpKTsKLSAgICByZXR1cm4gKnJlZjsKLSAg
fQotCi0gIGV4cGxpY2l0IGNvbnN0ZXhwciBvcGVyYXRvciBib29sKCkgY29uc3QgX19OT0VYQ0VQ
VCB7Ci0gICAgcmV0dXJuIHJlZiAhPSBudWxscHRyOwotICB9Ci0KLSAgY29uc3RleHByIGJvb2wg
aGFzVmFsdWUoKSBjb25zdCBfX05PRVhDRVBUIHsKLSAgICByZXR1cm4gcmVmICE9IG51bGxwdHI7
Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgVj4KLSAgY29uc3RleHByIHR5cGVuYW1lIHN0ZDo6
ZGVjYXk8VD46OnR5cGUgdmFsdWVPcihWJiYgdikgY29uc3QKLSAgewotICAgIHJldHVybiAqdGhp
cyA/ICoqdGhpcyA6IGRldGFpbF86OmNvbnZlcnQ8dHlwZW5hbWUgc3RkOjpkZWNheTxUPjo6dHlw
ZT4oZGV0YWlsXzo6Y29uc3RleHByX2ZvcndhcmQ8Vj4odikpOwotICB9Ci0KLSAgLy8geC54Lngu
eCwgbW9kaWZpZXJzCi0gIHZvaWQgcmVzZXQoKSBfX05PRVhDRVBUIHsgcmVmID0gbnVsbHB0cjsg
fQotfTsKLQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLWNsYXNzIE9wdGlvbmFsPFQmJj4KLXsKLSAg
c3RhdGljX2Fzc2VydCggc2l6ZW9mKFQpID09IDAsICJPcHRpb25hbCBydmFsdWUgcmVmZXJlbmNl
cyBkaXNhbGxvd2VkIiApOwotfTsKLQotCi0vLyAyMC41LjgsIFJlbGF0aW9uYWwgb3BlcmF0b3Jz
Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPcHRp
b25hbDxUPiYgeCwgY29uc3QgT3B0aW9uYWw8VD4mIHkpCi17Ci0gIHJldHVybiBib29sKHgpICE9
IGJvb2woeSkgPyBmYWxzZSA6IGJvb2woeCkgPT0gZmFsc2UgPyB0cnVlIDogKnggPT0gKnk7Ci19
Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE9w
dGlvbmFsPFQ+JiB4LCBjb25zdCBPcHRpb25hbDxUPiYgeSkKLXsKLSAgcmV0dXJuICEoeCA9PSB5
KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChjb25z
dCBPcHRpb25hbDxUPiYgeCwgY29uc3QgT3B0aW9uYWw8VD4mIHkpCi17Ci0gIHJldHVybiAoIXkp
ID8gZmFsc2UgOiAoIXgpID8gdHJ1ZSA6ICp4IDwgKnk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBU
PiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0IE9w
dGlvbmFsPFQ+JiB5KQotewotICByZXR1cm4gKHkgPCB4KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNz
IFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0oY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0
IE9wdGlvbmFsPFQ+JiB5KQotewotICByZXR1cm4gISh5IDwgeCk7Ci19Ci0KLXRlbXBsYXRlIDxj
bGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBj
b25zdCBPcHRpb25hbDxUPiYgeSkKLXsKLSAgcmV0dXJuICEoeCA8IHkpOwotfQotCi0KLS8vIDIw
LjUuOSwgQ29tcGFyaXNvbiB3aXRoIG51bGxvcHQKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4
cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBudWxsb3B0X3QpIF9fTk9F
WENFUFQKLXsKLSAgcmV0dXJuICgheCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4
cHIgYm9vbCBvcGVyYXRvcj09KG51bGxvcHRfdCwgY29uc3QgT3B0aW9uYWw8VD4mIHgpIF9fTk9F
WENFUFQKLXsKLSAgcmV0dXJuICgheCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4
cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBudWxsb3B0X3QpIF9fTk9F
WENFUFQKLXsKLSAgcmV0dXJuIGJvb2woeCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25z
dGV4cHIgYm9vbCBvcGVyYXRvciE9KG51bGxvcHRfdCwgY29uc3QgT3B0aW9uYWw8VD4mIHgpIF9f
Tk9FWENFUFQKLXsKLSAgcmV0dXJuIGJvb2woeCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoY29uc3QgT3B0aW9uYWw8VD4mLCBudWxsb3B0X3QpIF9f
Tk9FWENFUFQKLXsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29u
c3RleHByIGJvb2wgb3BlcmF0b3I8KG51bGxvcHRfdCwgY29uc3QgT3B0aW9uYWw8VD4mIHgpIF9f
Tk9FWENFUFQKLXsKLSAgcmV0dXJuIGJvb2woeCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBudWxsb3B0X3Qp
IF9fTk9FWENFUFQKLXsKLSAgcmV0dXJuICgheCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KG51bGxvcHRfdCwgY29uc3QgT3B0aW9uYWw8VD4mKSBf
X05PRVhDRVBUCi17Ci0gIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29u
c3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBudWxsb3B0X3QpIF9f
Tk9FWENFUFQKLXsKLSAgcmV0dXJuIGJvb2woeCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcj4obnVsbG9wdF90LCBjb25zdCBPcHRpb25hbDxUPiYpIF9f
Tk9FWENFUFQKLXsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29u
c3RleHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCBPcHRpb25hbDxUPiYsIG51bGxvcHRfdCkgX19O
T0VYQ0VQVAotewotICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0
ZXhwciBib29sIG9wZXJhdG9yPj0obnVsbG9wdF90LCBjb25zdCBPcHRpb25hbDxUPiYgeCkgX19O
T0VYQ0VQVAotewotICByZXR1cm4gKCF4KTsKLX0KLQotCi0KLS8vIDIwLjUuMTAsIENvbXBhcmlz
b24gd2l0aCBUCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBPcHRpb25hbDxUPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAq
eCA9PSB2IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPFQ+JiB4KQotewotICByZXR1cm4g
Ym9vbCh4KSA/IHYgPT0gKnggOiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0
ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0IFQmIHYpCi17
Ci0gIHJldHVybiBib29sKHgpID8gKnggIT0gdiA6IHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFz
cyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFs
PFQ+JiB4KQotewotICByZXR1cm4gYm9vbCh4KSA/IHYgIT0gKnggOiB0cnVlOwotfQotCi10ZW1w
bGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IE9wdGlvbmFsPFQ+
JiB4LCBjb25zdCBUJiB2KQotewotICByZXR1cm4gYm9vbCh4KSA/ICp4IDwgdiA6IHRydWU7Ci19
Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgVCYg
diwgY29uc3QgT3B0aW9uYWw8VD4mIHgpCi17Ci0gIHJldHVybiBib29sKHgpID8gdiA+ICp4IDog
dHJ1ZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihj
b25zdCBPcHRpb25hbDxUPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAq
eCA+IHYgOiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9w
ZXJhdG9yPChjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxUPiYgeCkKLXsKLSAgcmV0dXJuIGJv
b2woeCkgPyB2IDwgKnggOiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhw
ciBib29sIG9wZXJhdG9yPj0oY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0IFQmIHYpCi17Ci0g
IHJldHVybiBib29sKHgpID8gKnggPj0gdiA6IGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3Mg
VD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxU
PiYgeCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2IDw9ICp4IDogZmFsc2U7Ci19Ci0KLXRlbXBs
YXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IE9wdGlvbmFsPFQ+
JiB4LCBjb25zdCBUJiB2KQotewotICByZXR1cm4gYm9vbCh4KSA/ICp4IDw9IHYgOiB0cnVlOwot
fQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCBU
JiB2LCBjb25zdCBPcHRpb25hbDxUPiYgeCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2ID49ICp4
IDogdHJ1ZTsKLX0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgT3B0aW9uYWwgPSBzdGQ6
Om9wdGlvbmFsPFQ+OworY29uc3RleHByIGF1dG8gbnVsbG9wdCA9IHN0ZDo6bnVsbG9wdDsKK3Vz
aW5nIG51bGxvcHRfdCA9IHN0ZDo6bnVsbG9wdF90OwogCi0vLyBDb21wYXJpc29uIG9mIE9wdGlv
bmFsPFQmPiB3aXRoIFQKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IE9wdGlvbmFsPFQmPiYgeCwgY29uc3QgVCYgdikKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+IGNvbnN0ZXhwciBzdGQ6Om9wdGlvbmFsPHN0
ZDo6ZGVjYXlfdDxUPj4gbWFrZU9wdGlvbmFsKFQmJiB2YWx1ZSkKIHsKLSAgcmV0dXJuIGJvb2wo
eCkgPyAqeCA9PSB2IDogZmFsc2U7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV9vcHRpb25hbDxzdGQ6
OmRlY2F5X3Q8VD4+KHN0ZDo6Zm9yd2FyZDxUPih2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZSA8Y2xh
c3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUJiB2LCBjb25zdCBPcHRpb25h
bDxUJj4mIHgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVz
PiBjb25zdGV4cHIgc3RkOjpvcHRpb25hbDxUPiBtYWtlT3B0aW9uYWwoQXJndW1lbnRUeXBlcyYm
Li4uIGFyZ3VtZW50cykKIHsKLSAgcmV0dXJuIGJvb2woeCkgPyB2ID09ICp4IDogZmFsc2U7Cisg
ICAgcmV0dXJuIHN0ZDo6bWFrZV9vcHRpb25hbDxUPihzdGQ6OmZvcndhcmQ8QXJndW1lbnRUeXBl
cz4oYXJndW1lbnRzKS4uLik7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IE9wdGlvbmFsPFQmPiYgeCwgY29uc3QgVCYgdikKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+IGNvbnN0
ZXhwciBzdGQ6Om9wdGlvbmFsPFQ+IG1ha2VPcHRpb25hbChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8
VT4gbGlzdCwgQXJndW1lbnRUeXBlcyYmLi4uIGFyZ3VtZW50cykKIHsKLSAgcmV0dXJuIGJvb2wo
eCkgPyAqeCAhPSB2IDogdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjptYWtlX29wdGlvbmFsPFQ+KGxp
c3QsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudFR5cGVzPihhcmd1bWVudHMpLi4uKTsKIH0KIAotdGVt
cGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgVCYgdiwgY29u
c3QgT3B0aW9uYWw8VCY+JiB4KQordGVtcGxhdGU8dHlwZW5hbWUgT3B0aW9uYWxUeXBlLCBjbGFz
cyBDYWxsYmFjaz4gYXV0byB2YWx1ZU9yQ29tcHV0ZShPcHRpb25hbFR5cGUgb3B0aW9uYWwsIENh
bGxiYWNrIGNhbGxiYWNrKSAtPiB0eXBlbmFtZSBPcHRpb25hbFR5cGU6OnZhbHVlX3R5cGUKIHsK
LSAgcmV0dXJuIGJvb2woeCkgPyB2ICE9ICp4IDogdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNz
IFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChjb25zdCBPcHRpb25hbDxUJj4mIHgsIGNvbnN0
IFQmIHYpCi17Ci0gIHJldHVybiBib29sKHgpID8gKnggPCB2IDogdHJ1ZTsKLX0KLQotdGVtcGxh
dGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihjb25zdCBUJiB2LCBjb25zdCBP
cHRpb25hbDxUJj4mIHgpCi17Ci0gIHJldHVybiBib29sKHgpID8gdiA+ICp4IDogdHJ1ZTsKLX0K
LQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihjb25zdCBPcHRp
b25hbDxUJj4mIHgsIGNvbnN0IFQmIHYpCi17Ci0gIHJldHVybiBib29sKHgpID8gKnggPiB2IDog
ZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwo
Y29uc3QgVCYgdiwgY29uc3QgT3B0aW9uYWw8VCY+JiB4KQotewotICByZXR1cm4gYm9vbCh4KSA/
IHYgPCAqeCA6IGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wg
b3BlcmF0b3I+PShjb25zdCBPcHRpb25hbDxUJj4mIHgsIGNvbnN0IFQmIHYpCi17Ci0gIHJldHVy
biBib29sKHgpID8gKnggPj0gdiA6IGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29u
c3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxUJj4mIHgp
Ci17Ci0gIHJldHVybiBib29sKHgpID8gdiA8PSAqeCA6IGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8
Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCBPcHRpb25hbDxUJj4mIHgs
IGNvbnN0IFQmIHYpCi17Ci0gIHJldHVybiBib29sKHgpID8gKnggPD0gdiA6IHRydWU7Ci19Ci0K
LXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFQmIHYs
IGNvbnN0IE9wdGlvbmFsPFQmPiYgeCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2ID49ICp4IDog
dHJ1ZTsKLX0KLQotLy8gQ29tcGFyaXNvbiBvZiBPcHRpb25hbDxUIGNvbnN0Jj4gd2l0aCBUCi10
ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPcHRpb25h
bDxjb25zdCBUJj4mIHgsIGNvbnN0IFQmIHYpCi17Ci0gIHJldHVybiBib29sKHgpID8gKnggPT0g
diA6IGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxjb25zdCBUJj4mIHgpCi17Ci0gIHJldHVy
biBib29sKHgpID8gdiA9PSAqeCA6IGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29u
c3RleHByIGJvb2wgb3BlcmF0b3IhPShjb25zdCBPcHRpb25hbDxjb25zdCBUJj4mIHgsIGNvbnN0
IFQmIHYpCi17Ci0gIHJldHVybiBib29sKHgpID8gKnggIT0gdiA6IHRydWU7Ci19Ci0KLXRlbXBs
YXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFQmIHYsIGNvbnN0
IE9wdGlvbmFsPGNvbnN0IFQmPiYgeCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2ICE9ICp4IDog
dHJ1ZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChj
b25zdCBPcHRpb25hbDxjb25zdCBUJj4mIHgsIGNvbnN0IFQmIHYpCi17Ci0gIHJldHVybiBib29s
KHgpID8gKnggPCB2IDogdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBi
b29sIG9wZXJhdG9yPihjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxjb25zdCBUJj4mIHgpCi17
Ci0gIHJldHVybiBib29sKHgpID8gdiA+ICp4IDogdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNz
IFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihjb25zdCBPcHRpb25hbDxjb25zdCBUJj4mIHgs
IGNvbnN0IFQmIHYpCi17Ci0gIHJldHVybiBib29sKHgpID8gKnggPiB2IDogZmFsc2U7Ci19Ci0K
LXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoY29uc3QgVCYgdiwg
Y29uc3QgT3B0aW9uYWw8Y29uc3QgVCY+JiB4KQotewotICByZXR1cm4gYm9vbCh4KSA/IHYgPCAq
eCA6IGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0
b3I+PShjb25zdCBPcHRpb25hbDxjb25zdCBUJj4mIHgsIGNvbnN0IFQmIHYpCi17Ci0gIHJldHVy
biBib29sKHgpID8gKnggPj0gdiA6IGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29u
c3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxjb25zdCBU
Jj4mIHgpCi17Ci0gIHJldHVybiBib29sKHgpID8gdiA8PSAqeCA6IGZhbHNlOwotfQotCi10ZW1w
bGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCBPcHRpb25hbDxj
b25zdCBUJj4mIHgsIGNvbnN0IFQmIHYpCi17Ci0gIHJldHVybiBib29sKHgpID8gKnggPD0gdiA6
IHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49
KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPGNvbnN0IFQmPiYgeCkKLXsKLSAgcmV0dXJuIGJv
b2woeCkgPyB2ID49ICp4IDogdHJ1ZTsKLX0KLQotCi0vLyAyMC41LjEyLCBTcGVjaWFsaXplZCBh
bGdvcml0aG1zCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXZvaWQgc3dhcChPcHRpb25hbDxUPiYgeCwg
T3B0aW9uYWw8VD4mIHkpIF9fTk9FWENFUFRfKF9fTk9FWENFUFRfKHguc3dhcCh5KSkpCi17Ci0g
IHguc3dhcCh5KTsKLX0KLQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLWNvbnN0ZXhwciBPcHRpb25h
bDx0eXBlbmFtZSBzdGQ6OmRlY2F5PFQ+Ojp0eXBlPiBtYWtlT3B0aW9uYWwoVCYmIHYpCi17Ci0g
IHJldHVybiBPcHRpb25hbDx0eXBlbmFtZSBzdGQ6OmRlY2F5PFQ+Ojp0eXBlPihkZXRhaWxfOjpj
b25zdGV4cHJfZm9yd2FyZDxUPih2KSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBYPgotY29uc3Rl
eHByIE9wdGlvbmFsPFgmPiBtYWtlT3B0aW9uYWwoc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxYPiB2
KQotewotICByZXR1cm4gT3B0aW9uYWw8WCY+KHYuZ2V0KCkpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXVEYKLQotbmFtZXNwYWNlIHN0ZAotewotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgc3Ry
dWN0IGhhc2g8V1RGOjpPcHRpb25hbDxUPj4KLSAgewotICAgIHR5cGVkZWYgdHlwZW5hbWUgaGFz
aDxUPjo6cmVzdWx0X3R5cGUgcmVzdWx0X3R5cGU7Ci0gICAgdHlwZWRlZiBXVEY6Ok9wdGlvbmFs
PFQ+IGFyZ3VtZW50X3R5cGU7Ci0KLSAgICBjb25zdGV4cHIgcmVzdWx0X3R5cGUgb3BlcmF0b3Io
KShhcmd1bWVudF90eXBlIGNvbnN0JiBhcmcpIGNvbnN0IHsKLSAgICAgIHJldHVybiBhcmcgPyBz
dGQ6Omhhc2g8VD57fSgqYXJnKSA6IHJlc3VsdF90eXBle307Ci0gICAgfQotICB9OwotCi0gIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgotICBzdHJ1Y3QgaGFzaDxXVEY6Ok9wdGlvbmFsPFQmPj4KLSAg
ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgaGFzaDxUPjo6cmVzdWx0X3R5cGUgcmVzdWx0X3R5cGU7
Ci0gICAgdHlwZWRlZiBXVEY6Ok9wdGlvbmFsPFQmPiBhcmd1bWVudF90eXBlOwotCi0gICAgY29u
c3RleHByIHJlc3VsdF90eXBlIG9wZXJhdG9yKCkoYXJndW1lbnRfdHlwZSBjb25zdCYgYXJnKSBj
b25zdCB7Ci0gICAgICByZXR1cm4gYXJnID8gc3RkOjpoYXNoPFQ+e30oKmFyZykgOiByZXN1bHRf
dHlwZXt9OwotICAgIH0KLSAgfTsKLX0KLQotIyB1bmRlZiBUUjJfT1BUSU9OQUxfUkVRVUlSRVMK
LQotbmFtZXNwYWNlIFdURiB7Ci0KLS8vIC0tIFdlYktpdCBBZGRpdGlvbnMgLS0KLXRlbXBsYXRl
IDxjbGFzcyBPcHRpb25hbFR5cGUsIGNsYXNzIENhbGxiYWNrPgotQUxXQVlTX0lOTElORQotYXV0
byB2YWx1ZU9yQ29tcHV0ZShPcHRpb25hbFR5cGUgT3B0aW9uYWwsIENhbGxiYWNrIGNhbGxiYWNr
KSAtPiB0eXBlbmFtZSBPcHRpb25hbFR5cGU6OnZhbHVlX3R5cGUKLXsKLSAgICBpZiAoT3B0aW9u
YWwpCi0gICAgICAgIHJldHVybiAqT3B0aW9uYWw7Ci0gICAgcmV0dXJuIGNhbGxiYWNrKCk7Cisg
ICAgcmV0dXJuIG9wdGlvbmFsID8gKm9wdGlvbmFsIDogY2FsbGJhY2soKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV1RGCkBAIC0xMDQzLDMgKzUzLDYgQEAgYXV0byB2YWx1ZU9yQ29tcHV0ZShPcHRp
b25hbFR5cGUgT3B0aW9uYWwsIENhbGxiYWNrIGNhbGxiYWNrKSAtPiB0eXBlbmFtZSBPcHRpb24K
IHVzaW5nIFdURjo6T3B0aW9uYWw7CiB1c2luZyBXVEY6Om1ha2VPcHRpb25hbDsKIHVzaW5nIFdU
Rjo6dmFsdWVPckNvbXB1dGU7CisKKyNkZWZpbmUgaGFzVmFsdWUgaGFzX3ZhbHVlCisjZGVmaW5l
IHZhbHVlT3IgdmFsdWVfb3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1NlY29uZHMuaCBi
L1NvdXJjZS9XVEYvd3RmL1NlY29uZHMuaAppbmRleCA5N2Y3ZGJmY2U4N2QxMjE1NTI0ZTFjYWY3
NzUwZjlhZDE5ZDViZDc3Li41NTJkMzU5NTExYWM3Njc0MTQwMzA4Njc4N2JjNWEzMDBhMmQ1NmQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmgKKysrIGIvU291cmNlL1dURi93
dGYvU2Vjb25kcy5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVk
ZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9VUkxIZWxw
ZXJzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1VSTEhlbHBlcnMuY3BwCmluZGV4IDM2ZjgwODk4Yzdk
MGZhNDQ1MWEzY2RiNWY3MmM2M2IyNWIyZGZmOTMuLjUxYzVkZTA2MWI2NGZlNzQ1NWE2OTQxODRh
N2U5MmMzMWU0NmM1ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1VSTEhlbHBlcnMuY3Bw
CisrKyBiL1NvdXJjZS9XVEYvd3RmL1VSTEhlbHBlcnMuY3BwCkBAIC01NDMsNyArNTQzLDcgQEAg
c3RhdGljIGJvb2wgYWxsQ2hhcmFjdGVyc0FsbG93ZWRCeVRMRFJ1bGVzKGNvbnN0IFVDaGFyKiBi
dWZmZXIsIGludDMyX3QgbGVuZ3RoKQogfQogCiAvLyBSZXR1cm4gdmFsdWUgb2YgbnVsbCBtZWFu
cyBubyBtYXBwaW5nIGlzIG5lY2Vzc2FyeS4KLU9wdGlvbmFsPFN0cmluZz4gbWFwSG9zdE5hbWUo
Y29uc3QgU3RyaW5nJiBob3N0TmFtZSwgY29uc3QgT3B0aW9uYWw8VVJMRGVjb2RlRnVuY3Rpb24+
JiBkZWNvZGVGdW5jdGlvbikKK09wdGlvbmFsPFN0cmluZz4gbWFwSG9zdE5hbWUoY29uc3QgU3Ry
aW5nJiBob3N0TmFtZSwgVVJMRGVjb2RlRnVuY3Rpb24gZGVjb2RlRnVuY3Rpb24pCiB7CiAgICAg
aWYgKGhvc3ROYW1lLmxlbmd0aCgpID4gaG9zdE5hbWVCdWZmZXJMZW5ndGgpCiAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKQEAgLTU4MCw3ICs1ODAsNyBAQCBPcHRpb25hbDxTdHJpbmc+IG1hcEhv
c3ROYW1lKGNvbnN0IFN0cmluZyYgaG9zdE5hbWUsIGNvbnN0IE9wdGlvbmFsPFVSTERlY29kZUZ1
bgogCiB1c2luZyBNYXBwaW5nUmFuZ2VzVmVjdG9yID0gT3B0aW9uYWw8VmVjdG9yPHN0ZDo6dHVw
bGU8dW5zaWduZWQsIHVuc2lnbmVkLCBTdHJpbmc+Pj47CiAKLXN0YXRpYyB2b2lkIGNvbGxlY3RS
YW5nZXNUaGF0TmVlZE1hcHBpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIGxvY2F0
aW9uLCB1bnNpZ25lZCBsZW5ndGgsIE1hcHBpbmdSYW5nZXNWZWN0b3ImIGFycmF5LCBjb25zdCBP
cHRpb25hbDxVUkxEZWNvZGVGdW5jdGlvbj4mIGRlY29kZUZ1bmN0aW9uKQorc3RhdGljIHZvaWQg
Y29sbGVjdFJhbmdlc1RoYXROZWVkTWFwcGluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWdu
ZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCwgTWFwcGluZ1Jhbmdlc1ZlY3RvciYgYXJyYXks
IFVSTERlY29kZUZ1bmN0aW9uIGRlY29kZUZ1bmN0aW9uKQogewogICAgIC8vIEdlbmVyYWxseSwg
d2Ugd2FudCB0byBvcHRpbWl6ZSBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMgb25lIGhvc3Qg
bmFtZSB0aGF0IGRvZXMgbm90IG5lZWQgbWFwcGluZy4KICAgICAvLyBUaGVyZWZvcmUsIHdlIHVz
ZSBudWxsIHRvIGluZGljYXRlIG5vIG1hcHBpbmcgaGVyZSBhbmQgYW4gZW1wdHkgYXJyYXkgdG8g
aW5kaWNhdGUgZXJyb3IuCkBAIC01OTgsNyArNTk4LDcgQEAgc3RhdGljIHZvaWQgY29sbGVjdFJh
bmdlc1RoYXROZWVkTWFwcGluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgbG9jYXRp
b24KICAgICAgICAgYXJyYXktPmNvbnN0cnVjdEFuZEFwcGVuZChsb2NhdGlvbiwgbGVuZ3RoLCAq
aG9zdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGFwcGx5SG9zdE5hbWVGdW5jdGlvblRvTWFpbFRvVVJM
U3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBPcHRpb25hbDxVUkxEZWNvZGVGdW5j
dGlvbj4mIGRlY29kZUZ1bmN0aW9uLCBNYXBwaW5nUmFuZ2VzVmVjdG9yJiBhcnJheSkKK3N0YXRp
YyB2b2lkIGFwcGx5SG9zdE5hbWVGdW5jdGlvblRvTWFpbFRvVVJMU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBVUkxEZWNvZGVGdW5jdGlvbiBkZWNvZGVGdW5jdGlvbiwgTWFwcGluZ1Jhbmdl
c1ZlY3RvciYgYXJyYXkpCiB7CiAgICAgLy8gSW4gYSBtYWlsdG86IFVSTCwgaG9zdCBuYW1lcyBj
b21lIGFmdGVyIGEgJ0AnIGNoYXJhY3RlciBhbmQgZW5kIHdpdGggYSAnPicgb3IgJywnIG9yICc/
JyBjaGFyYWN0ZXIuCiAgICAgLy8gU2tpcCBxdW90ZWQgc3RyaW5ncyBzbyB0aGF0IGNoYXJhY3Rl
cnMgaW4gdGhlbSBkb24ndCBjb25mdXNlIHVzLgpAQCAtNjcwLDcgKzY3MCw3IEBAIHN0YXRpYyB2
b2lkIGFwcGx5SG9zdE5hbWVGdW5jdGlvblRvTWFpbFRvVVJMU3RyaW5nKGNvbnN0IFN0cmluZyYg
c3RyaW5nLCBjb25zdCBPCiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBhcHBseUhvc3ROYW1lRnVu
Y3Rpb25Ub1VSTFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgT3B0aW9uYWw8VVJM
RGVjb2RlRnVuY3Rpb24+JiBkZWNvZGVGdW5jdGlvbiwgTWFwcGluZ1Jhbmdlc1ZlY3RvciYgYXJy
YXkpCitzdGF0aWMgdm9pZCBhcHBseUhvc3ROYW1lRnVuY3Rpb25Ub1VSTFN0cmluZyhjb25zdCBT
dHJpbmcmIHN0cmluZywgVVJMRGVjb2RlRnVuY3Rpb24gZGVjb2RlRnVuY3Rpb24sIE1hcHBpbmdS
YW5nZXNWZWN0b3ImIGFycmF5KQogewogICAgIC8vIEZpbmQgaG9zdG5hbWVzLiBUb28gYmFkIHdl
IGNhbid0IHVzZSBhbnkgcmVhbCBVUkwtcGFyc2luZyBjb2RlIHRvIGRvIHRoaXMsCiAgICAgLy8g
YnV0IHdlIGhhdmUgdG8gZG8gaXQgYmVmb3JlIGRvaW5nIGFsbCB0aGUgJS1lc2NhcGluZywgYW5k
IHRoaXMgaXMgdGhlIG9ubHkKQEAgLTcxMyw3ICs3MTMsNyBAQCBzdGF0aWMgdm9pZCBhcHBseUhv
c3ROYW1lRnVuY3Rpb25Ub1VSTFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgT3B0
aW9uYQogICAgIGNvbGxlY3RSYW5nZXNUaGF0TmVlZE1hcHBpbmcoc3RyaW5nLCBob3N0TmFtZVN0
YXJ0LCBob3N0TmFtZUVuZCAtIGhvc3ROYW1lU3RhcnQsIGFycmF5LCBkZWNvZGVGdW5jdGlvbik7
CiB9CiAKLVN0cmluZyBtYXBIb3N0TmFtZXMoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IE9w
dGlvbmFsPFVSTERlY29kZUZ1bmN0aW9uPiYgZGVjb2RlRnVuY3Rpb24pCitTdHJpbmcgbWFwSG9z
dE5hbWVzKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBVUkxEZWNvZGVGdW5jdGlvbiBkZWNvZGVGdW5j
dGlvbikKIHsKICAgICAvLyBHZW5lcmFsbHksIHdlIHdhbnQgdG8gb3B0aW1pemUgZm9yIHRoZSBj
YXNlIHdoZXJlIHRoZXJlIGlzIG9uZSBob3N0IG5hbWUgdGhhdCBkb2VzIG5vdCBuZWVkIG1hcHBp
bmcuCiAgICAgCkBAIC04NjksNyArODY5LDcgQEAgU3RyaW5nIHVzZXJWaXNpYmxlVVJMKGNvbnN0
IENTdHJpbmcmIHVybCkKIAogICAgIGlmIChtYXlOZWVkSG9zdE5hbWVEZWNvZGluZykgewogICAg
ICAgICAvLyBGSVhNRTogSXMgaXQgZ29vZCB0byBpZ25vcmUgdGhlIGZhaWx1cmUgb2YgbWFwSG9z
dE5hbWVzIGFuZCBrZWVwIHJlc3VsdCBpbnRhY3Q/Ci0gICAgICAgIGF1dG8gbWFwcGVkUmVzdWx0
ID0gbWFwSG9zdE5hbWVzKHJlc3VsdCwgbnVsbG9wdCk7CisgICAgICAgIGF1dG8gbWFwcGVkUmVz
dWx0ID0gbWFwSG9zdE5hbWVzKHJlc3VsdCwgbnVsbHB0cik7CiAgICAgICAgIGlmICghIW1hcHBl
ZFJlc3VsdCkKICAgICAgICAgICAgIHJlc3VsdCA9IG1hcHBlZFJlc3VsdDsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9VUkxIZWxwZXJzLmggYi9Tb3VyY2UvV1RGL3d0Zi9VUkxI
ZWxwZXJzLmgKaW5kZXggNzNmMjhkNDQ5ZWE5NDkwZjMwOGJiYmNhYzlhNTU1MDJhOWIyYzdmMS4u
MGFjMGIzZGU0OTRiZThmNzI4YTVjYWU2MjhmZmFiNjg0ZmRlZWMyZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvVVJMSGVscGVycy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1VSTEhlbHBlcnMu
aApAQCAtMzQsMTQgKzM0LDE0IEBACiBuYW1lc3BhY2UgV1RGIHsKIG5hbWVzcGFjZSBVUkxIZWxw
ZXJzIHsKIAotdXNpbmcgVVJMRGVjb2RlRnVuY3Rpb24gPSBTdHJpbmcoJikoY29uc3QgU3RyaW5n
Jik7Cit1c2luZyBVUkxEZWNvZGVGdW5jdGlvbiA9IFN0cmluZygqKShjb25zdCBTdHJpbmcmKTsK
IAogV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyB1c2VyVmlzaWJsZVVSTChjb25zdCBDU3RyaW5n
JiBVUkwpOwogdm9pZCBsb2FkSUROU2NyaXB0V2hpdGVMaXN0KCk7CiB2b2lkIHdoaXRlTGlzdElE
TlNjcmlwdChjb25zdCBjaGFyKiBzY3JpcHROYW1lKTsKIHZvaWQgaW5pdGlhbGl6ZURlZmF1bHRJ
RE5TY3JpcHRXaGl0ZUxpc3QoKTsKLU9wdGlvbmFsPFN0cmluZz4gbWFwSG9zdE5hbWUoY29uc3Qg
U3RyaW5nJiwgY29uc3QgT3B0aW9uYWw8VVJMRGVjb2RlRnVuY3Rpb24+Jik7Ci1TdHJpbmcgbWFw
SG9zdE5hbWVzKGNvbnN0IFN0cmluZyYsIGNvbnN0IE9wdGlvbmFsPFVSTERlY29kZUZ1bmN0aW9u
PiYpOworT3B0aW9uYWw8U3RyaW5nPiBtYXBIb3N0TmFtZShjb25zdCBTdHJpbmcmLCBVUkxEZWNv
ZGVGdW5jdGlvbik7CitTdHJpbmcgbWFwSG9zdE5hbWVzKGNvbnN0IFN0cmluZyYsIFVSTERlY29k
ZUZ1bmN0aW9uKTsKIAogfSAvLyBuYW1lc3BhY2UgVVJMSGVscGVycwogfSAvLyBuYW1lc3BhY2Ug
V1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9OU1VSTEV4dHJhcy5tbSBiL1Nv
dXJjZS9XVEYvd3RmL2NvY29hL05TVVJMRXh0cmFzLm1tCmluZGV4IDQ2MzFmMjc2ODE1OTFlY2Qy
NThhODY3YTAxMzZkYWRkYzAyYjY5MDYuLjdiNjRjZWQ2YzJhYmI5NTNkNmY4MWVjNDhiZTEzOTdk
YTY4NzU2NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2NvY29hL05TVVJMRXh0cmFzLm1t
CisrKyBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL05TVVJMRXh0cmFzLm1tCkBAIC0xMDIsNyArMTAy
LDcgQEAgc3RhdGljIFN0cmluZyBkZWNvZGVQZXJjZW50RXNjYXBlcyhjb25zdCBTdHJpbmcmIHN0
cmluZykKIAogTlNTdHJpbmcgKmRlY29kZUhvc3ROYW1lKE5TU3RyaW5nICpzdHJpbmcpCiB7Ci0g
ICAgT3B0aW9uYWw8U3RyaW5nPiBob3N0ID0gbWFwSG9zdE5hbWUoc3RyaW5nLCBudWxsb3B0KTsK
KyAgICBPcHRpb25hbDxTdHJpbmc+IGhvc3QgPSBtYXBIb3N0TmFtZShzdHJpbmcsIG51bGxwdHIp
OwogICAgIGlmICghaG9zdCkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICByZXR1cm4gISpob3N0
ID8gc3RyaW5nIDogKE5TU3RyaW5nICopKmhvc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaCBiL1NvdXJjZS9XVEYvd3RmL3BlcnNpc3Rl
bmNlL1BlcnNpc3RlbnRDb2Rlci5oCmluZGV4IGNjNzQ4YzkzYWM4MjgxMmU4NjZhZjY3ZWNmZDhm
ZjYzZTljZDRlNzguLjYxNWJkMTI1N2M4OTcyNDA3NDNmM2I1NWEyNjIxM2I2MmEwMzkwODUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2Rlci5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2Rlci5oCkBAIC0yNSwx
MCArMjUsOSBAQAogCiAjcHJhZ21hIG9uY2UKIAotbmFtZXNwYWNlIFdURiB7CisjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KIAotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1jbGFzcyBPcHRpb25hbDsKK25h
bWVzcGFjZSBXVEYgewogCiBuYW1lc3BhY2UgUGVyc2lzdGVuY2UgewogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaCBiL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oCmluZGV4IDRhOWM1ZGE0ZmYx
NjY0MWVhMjEzMTllZjUyNDE5ZmVhMWY4ZjQ4MjkuLjA4YmFkY2ZkNjMxNzA5MDdkN2Q4NTYyMzgx
ZGU4ZjYyOGExMGE5NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2Nn
L0NvcmVHcmFwaGljc1NQSS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NnL0Nv
cmVHcmFwaGljc1NQSS5oCkBAIC0zOCwxMyArMzgsMTUgQEAKIAogI2lmIFVTRShBUFBMRV9JTlRF
Uk5BTF9TREspCiAKLSNpZiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSA8Q29sb3JTeW5jL0NvbG9y
U3luY1ByaXYuaD4KLSNlbmRpZgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0ZvbnRDYWNoZS5o
PgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR1BhdGhQcml2YXRlLmg+CiAjaW5jbHVkZSA8Q29y
ZUdyYXBoaWNzL0NvcmVHcmFwaGljc1ByaXZhdGUuaD4KIAorI2lmIFBMQVRGT1JNKE1BQykKKyNp
bmNsdWRlIDxDb2xvclN5bmMvQ29sb3JTeW5jUHJpdi5oPgorI2luY2x1ZGUgPENvcmVHcmFwaGlj
cy9DR0FjY2Vzc2liaWxpdHkuaD4KKyNlbmRpZgorCiAjZWxzZQogCiBzdHJ1Y3QgQ0dGb250SE1l
dHJpY3MgewpAQCAtMzA5LDYgKzMxMSw5IEBAIHZvaWQgQ0dDb250ZXh0U2V0Rm9jdXNSaW5nV2l0
aENvbG9yKENHQ29udGV4dFJlZiwgQ0dGbG9hdCBibHVyLCBDR0NvbG9yUmVmLCBjb25zCiAjZW5k
aWYgLy8gUExBVEZPUk0oV0lOKQogCiAjaWYgUExBVEZPUk0oTUFDKQorCitib29sIENHRGlzcGxh
eVVzZXNGb3JjZVRvR3JheSh2b2lkKTsKKwogdm9pZCBDR1NTaHV0ZG93blNlcnZlckNvbm5lY3Rp
b25zKHZvaWQpOwogCiBDR1NDb25uZWN0aW9uSUQgQ0dTTWFpbkNvbm5lY3Rpb25JRCh2b2lkKTsK
QEAgLTMyNCw2ICszMjksNyBAQCBzaXplX3QgQ0dEaXNwbGF5TW9kZUdldFBpeGVsc1dpZGUoQ0dE
aXNwbGF5TW9kZVJlZik7CiBzaXplX3QgQ0dEaXNwbGF5TW9kZUdldFBpeGVsc0hpZ2goQ0dEaXNw
bGF5TW9kZVJlZik7CiAKICNpZiBFTkFCTEUoV0VCUFJPQ0VTU19XSU5ET1dTRVJWRVJfQkxPQ0tJ
TkcpCisKIENHRXJyb3IgQ0dTU2V0RGVueVdpbmRvd1NlcnZlckNvbm5lY3Rpb25zKGJvb2wpOwog
CiB0eXBlZGVmIGludDMyX3QgQ0dTRGlzcGxheUlEOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yQ29tbWFuZC5jcHAKaW5kZXggOTNhZTc3ZGZkMDI0MmJhMWViYWI3YmFmN2M1ZDU2NWY3ZWE2
NzdkYS4uZGNmM2RjZWRjOWFiZWIzMzlmZjM4NDUxYjRhODg4MjUzOTE2MTU1OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCkBAIC0xMDU2LDcgKzEwNTYsNyBAQCBz
dGF0aWMgYm9vbCBleGVjdXRlU2VsZWN0VG9NYXJrKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0
b3JDb21tYW5kU291cmNlLCBjb25zdAogICAgICAgICBQQUw6OnN5c3RlbUJlZXAoKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rl
ZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKGNyZWF0ZUxpdmVSYW5nZSgqbWFyayksIGNyZWF0ZUxpdmVS
YW5nZSgqc2VsZWN0aW9uKSkuZ2V0KCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91
bGRDbG9zZVR5cGluZzo6WWVzKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJh
bmdlKHVuaW9uRE9NUmFuZ2VzKGNyZWF0ZUxpdmVSYW5nZSgqbWFyayksICpzZWxlY3Rpb24pLmdl
dCgpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcAppbmRleCA0YmRlZTMwMDFm
ZGI0ZmVjMGVlZTM1ZjU3Yzk5MmE5NjJkMjY1OGNmLi5hZmNkZDJhN2ZhZmZlMGJlYzk4MjA3MmQ4
OTRiYzg1YzZlMzBjNDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCkBAIC00NTYsNyArNDU2LDcgQEAg
dm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OndpbGxTZW5kUmVxdWVzdCh1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIsIERvY3VtZW50TG8KICAgICBhdXRvIHByb3RvY29sUmVzb3VyY2VUeXBlID0g
SW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZVR5cGVKU09OKHR5cGUpOwogCiAgICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gbG9hZGVyICYmIGxvYWRlci0+ZnJhbWUoKSA/IGxvYWRlci0+ZnJhbWUo
KS0+ZG9jdW1lbnQoKSA6IG51bGxwdHI7Ci0gICAgYXV0byBpbml0aWF0b3JPYmplY3QgPSBidWls
ZEluaXRpYXRvck9iamVjdChkb2N1bWVudCwgcmVxdWVzdCk7CisgICAgYXV0byBpbml0aWF0b3JP
YmplY3QgPSBidWlsZEluaXRpYXRvck9iamVjdChkb2N1bWVudCwgJnJlcXVlc3QpOwogCiAgICAg
U3RyaW5nIHVybCA9IGxvYWRlciA/IGxvYWRlci0+dXJsKCkuc3RyaW5nKCkgOiByZXF1ZXN0LnVy
bCgpLnN0cmluZygpOwogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5yZXF1ZXN0V2lsbEJlU2Vu
dChyZXF1ZXN0SWQsIGZyYW1lSWQsIGxvYWRlcklkLCB1cmwsIGJ1aWxkT2JqZWN0Rm9yUmVzb3Vy
Y2VSZXF1ZXN0KHJlcXVlc3QpLCBzZW5kVGltZXN0YW1wLCB3YWxsdGltZS5zZWNvbmRzU2luY2VF
cG9jaCgpLnNlY29uZHMoKSwgaW5pdGlhdG9yT2JqZWN0LCBidWlsZE9iamVjdEZvclJlc291cmNl
UmVzcG9uc2UocmVkaXJlY3RSZXNwb25zZSwgbnVsbHB0ciksIHR5cGUgIT0gSW5zcGVjdG9yUGFn
ZUFnZW50OjpPdGhlclJlc291cmNlID8gJnByb3RvY29sUmVzb3VyY2VUeXBlIDogbnVsbHB0ciwg
dGFyZ2V0SWQuaXNFbXB0eSgpID8gbnVsbHB0ciA6ICZ0YXJnZXRJZCk7CkBAIC02MzYsNyArNjM2
LDcgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpZExvYWRSZXNvdXJjZUZyb21NZW1v
cnlDYWNoZShEb2N1bWVudExvYWRlciogbG9hZGUKIAogICAgIG1fcmVzb3VyY2VzRGF0YS0+cmVz
b3VyY2VDcmVhdGVkKHJlcXVlc3RJZCwgbG9hZGVySWQsIHJlc291cmNlKTsKIAotICAgIGF1dG8g
aW5pdGlhdG9yT2JqZWN0ID0gYnVpbGRJbml0aWF0b3JPYmplY3QobG9hZGVyLT5mcmFtZSgpID8g
bG9hZGVyLT5mcmFtZSgpLT5kb2N1bWVudCgpIDogbnVsbHB0ciwgcmVzb3VyY2UucmVzb3VyY2VS
ZXF1ZXN0KCkpOworICAgIGF1dG8gaW5pdGlhdG9yT2JqZWN0ID0gYnVpbGRJbml0aWF0b3JPYmpl
Y3QobG9hZGVyLT5mcmFtZSgpID8gbG9hZGVyLT5mcmFtZSgpLT5kb2N1bWVudCgpIDogbnVsbHB0
ciwgJnJlc291cmNlLnJlc291cmNlUmVxdWVzdCgpKTsKIAogICAgIC8vIEZJWE1FOiBJdCB3b3Vs
ZCBiZSBpZGVhbCB0byBnZW5lcmF0ZSB0aGUgTmV0d29yay5SZXNwb25zZSB3aXRoIHRoZSBNZW1v
cnlDYWNoZSBzb3VyY2UKICAgICAvLyBpbnN0ZWFkIG9mIHdoYXRldmVyIFJlc291cmNlUmVzcG9u
c2U6OlNvdXJjZSB0aGUgQ2FjaGVkUmVzb3VyY2VzJ3MgcmVzcG9uc2UgaGFzLgpAQCAtNzA2LDcg
KzcwNiw3IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRTY2hlZHVsZVN0eWxlUmVj
YWxjdWxhdGlvbihEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgICAgIG1fc3R5bGVSZWNhbGN1bGF0
aW9uSW5pdGlhdG9yID0gYnVpbGRJbml0aWF0b3JPYmplY3QoJmRvY3VtZW50KTsKIH0KIAotUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcj4gSW5zcGVjdG9yTmV0
d29ya0FnZW50OjpidWlsZEluaXRpYXRvck9iamVjdChEb2N1bWVudCogZG9jdW1lbnQsIE9wdGlv
bmFsPGNvbnN0IFJlc291cmNlUmVxdWVzdCY+IHJlc291cmNlUmVxdWVzdCkKK1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I+IEluc3BlY3Rvck5ldHdvcmtBZ2Vu
dDo6YnVpbGRJbml0aWF0b3JPYmplY3QoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QqIHJlc291cmNlUmVxdWVzdCkKIHsKICAgICAvLyBGSVhNRTogV29ya2VyIHN1cHBv
cnQuCiAgICAgaWYgKCFpc01haW5UaHJlYWQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmgKaW5kZXggYjAzOGEx
ODc5YzA0M2FhMTdkYWU5NzQyNTY5M2YyOWJlNDJlMzI1OC4uYmZkMTMxZTliNTg1NmM4NGRhNzcy
NDgwNWU3MTM5N2I3Yzc0ODZhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5oCkBAIC0xNDUsNyArMTQ1LDcgQEAg
cHJpdmF0ZToKIAogICAgIFdlYlNvY2tldCogd2ViU29ja2V0Rm9yUmVxdWVzdElkKGNvbnN0IFN0
cmluZyYgcmVxdWVzdElkKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3
b3JrOjpJbml0aWF0b3I+IGJ1aWxkSW5pdGlhdG9yT2JqZWN0KERvY3VtZW50KiwgT3B0aW9uYWw8
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0Jj4gPSBXVEY6Om51bGxvcHQpOworICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I+IGJ1aWxkSW5pdGlhdG9yT2JqZWN0
KERvY3VtZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0KiA9IG51bGxwdHIpOwogICAgIFJlZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZVRpbWluZz4gYnVpbGRPYmplY3RG
b3JUaW1pbmcoY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzKiwgUmVzb3VyY2VMb2FkZXImKTsKICAg
ICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TWV0cmljcz4gYnVpbGRPYmplY3RG
b3JNZXRyaWNzKGNvbnN0IE5ldHdvcmtMb2FkTWV0cmljcyYpOwogICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZT4gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJl
c3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBSZXNvdXJjZUxvYWRlciopOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ0NvbnRleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ0NvbnRleHQuY3BwCmluZGV4IDJi
N2VkYjNmZTc3MWMwN2NhMGE5YTkzMDY5YmNiMjMxMTIzYTJmOGYuLjFiMTA5ZjU5MTcyMDU3OTJj
YTY3ZmE1MTdhOGYyNjNlZmQ5YTk1MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9mbG9hdHMvRmxvYXRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
ZmxvYXRzL0Zsb2F0aW5nQ29udGV4dC5jcHAKQEAgLTU5NSw4ICs1OTUsOCBAQCBJdGVyYXRvciYg
SXRlcmF0b3I6Om9wZXJhdG9yKysoKQogICAgIGF1dG8gbGVmdEJvdHRvbSA9IG1fY3VycmVudC5s
ZWZ0KCkgPyBPcHRpb25hbDxQb3NpdGlvbkluQ29udGV4dFJvb3Q+KG1fY3VycmVudC5sZWZ0KCkt
PmJvdHRvbSgpKSA6IFdURjo6bnVsbG9wdDsKICAgICBhdXRvIHJpZ2h0Qm90dG9tID0gbV9jdXJy
ZW50LnJpZ2h0KCkgPyBPcHRpb25hbDxQb3NpdGlvbkluQ29udGV4dFJvb3Q+KG1fY3VycmVudC5y
aWdodCgpLT5ib3R0b20oKSkgOiBXVEY6Om51bGxvcHQ7CiAKLSAgICBhdXRvIHVwZGF0ZUxlZnQg
PSAobGVmdEJvdHRvbSA9PSByaWdodEJvdHRvbSkgfHwgKCFyaWdodEJvdHRvbSB8fCAobGVmdEJv
dHRvbSAmJiBsZWZ0Qm90dG9tIDwgcmlnaHRCb3R0b20pKTsgCi0gICAgYXV0byB1cGRhdGVSaWdo
dCA9IChsZWZ0Qm90dG9tID09IHJpZ2h0Qm90dG9tKSB8fCAoIWxlZnRCb3R0b20gfHwgKHJpZ2h0
Qm90dG9tICYmIGxlZnRCb3R0b20gPiByaWdodEJvdHRvbSkpOyAKKyAgICBhdXRvIHVwZGF0ZUxl
ZnQgPSAobGVmdEJvdHRvbSA9PSByaWdodEJvdHRvbSkgfHwgKCFyaWdodEJvdHRvbSB8fCAobGVm
dEJvdHRvbSAmJiAqbGVmdEJvdHRvbSA8ICpyaWdodEJvdHRvbSkpOyAKKyAgICBhdXRvIHVwZGF0
ZVJpZ2h0ID0gKGxlZnRCb3R0b20gPT0gcmlnaHRCb3R0b20pIHx8ICghbGVmdEJvdHRvbSB8fCAo
cmlnaHRCb3R0b20gJiYgKmxlZnRCb3R0b20gPiAqcmlnaHRCb3R0b20pKTsKIAogICAgIGlmICh1
cGRhdGVMZWZ0KSB7CiAgICAgICAgIEFTU0VSVChtX2N1cnJlbnQubV9mbG9hdFBhaXIubGVmdCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNjcmVlbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNjcmVlbi5jcHAKaW5kZXggY2RjZDY2
ODMxNjVhZWNiOGQxZDFkODhkMTViMTEwODk0OGExZjBhYy4uOWEwZDhmNWM1N2Y1ODY0NDVmNjk5
MDgzOTVlNGJjMTA3YzZiMDY3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
UGxhdGZvcm1TY3JlZW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3Jt
U2NyZWVuLmNwcApAQCAtNDgsMjEgKzQ4LDIwIEBAIHZvaWQgc2V0U2NyZWVuUHJvcGVydGllcyhj
b25zdCBTY3JlZW5Qcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzKQogICAgIHNjcmVlblByb3BlcnRpZXMo
KSA9IHByb3BlcnRpZXM7CiB9CiAKLU9wdGlvbmFsPGNvbnN0IFNjcmVlbkRhdGEmPiBzY3JlZW5E
YXRhKFBsYXRmb3JtRGlzcGxheUlEIHNjcmVlbmRpc3BsYXlJRCkKK2NvbnN0IFNjcmVlbkRhdGEq
IHNjcmVlbkRhdGEoUGxhdGZvcm1EaXNwbGF5SUQgc2NyZWVuRGlzcGxheUlEKQogewogICAgIGlm
IChzY3JlZW5Qcm9wZXJ0aWVzKCkuc2NyZWVuRGF0YU1hcC5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgLy8gUmV0
dXJuIHByb3BlcnR5IG9mIHRoZSBmaXJzdCBzY3JlZW4gaWYgdGhlIHNjcmVlbiBpcyBub3QgZm91
bmQgaW4gdGhlIG1hcC4KLSAgICBhdXRvIGRpc3BsYXlJRCA9IHNjcmVlbmRpc3BsYXlJRCA/IHNj
cmVlbmRpc3BsYXlJRCA6IHByaW1hcnlTY3JlZW5EaXNwbGF5SUQoKTsKLSAgICBpZiAoZGlzcGxh
eUlEKSB7Ci0gICAgICAgIGF1dG8gc2NyZWVuUHJvcGVydGllc0ZvckRpc3BsYXkgPSBzY3JlZW5Q
cm9wZXJ0aWVzKCkuc2NyZWVuRGF0YU1hcC5maW5kKGRpc3BsYXlJRCk7Ci0gICAgICAgIGlmIChz
Y3JlZW5Qcm9wZXJ0aWVzRm9yRGlzcGxheSAhPSBzY3JlZW5Qcm9wZXJ0aWVzKCkuc2NyZWVuRGF0
YU1hcC5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBzY3JlZW5Qcm9wZXJ0aWVzRm9yRGlzcGxh
eS0+dmFsdWU7CisgICAgaWYgKGF1dG8gZGlzcGxheUlEID0gc2NyZWVuRGlzcGxheUlEID8gc2Ny
ZWVuRGlzcGxheUlEIDogcHJpbWFyeVNjcmVlbkRpc3BsYXlJRCgpKSB7CisgICAgICAgIGF1dG8g
cHJvcGVydGllcyA9IHNjcmVlblByb3BlcnRpZXMoKS5zY3JlZW5EYXRhTWFwLmZpbmQoZGlzcGxh
eUlEKTsKKyAgICAgICAgaWYgKHByb3BlcnRpZXMgIT0gc2NyZWVuUHJvcGVydGllcygpLnNjcmVl
bkRhdGFNYXAuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gJnByb3BlcnRpZXMtPnZhbHVlOwog
ICAgIH0KIAogICAgIC8vIExhc3QgcmVzb3J0OiB1c2UgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHNj
cmVlbiBsaXN0LgotICAgIHJldHVybiBzY3JlZW5Qcm9wZXJ0aWVzKCkuc2NyZWVuRGF0YU1hcC5i
ZWdpbigpLT52YWx1ZTsKKyAgICByZXR1cm4gJnNjcmVlblByb3BlcnRpZXMoKS5zY3JlZW5EYXRh
TWFwLmJlZ2luKCktPnZhbHVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNjcmVlbi5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TY3JlZW4uaAppbmRleCBlMzU3NzRkMzI3NzUwZjA3MGNh
NWViZTg5MjNiNTQ4MmEzNGY2MTc2Li5iOTEzYWRkNjI2OTllZjNkZDcxYjBmYjZlN2MxZjU4ZDc2
YjdkYjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNjcmVl
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU2NyZWVuLmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTggQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjUsMTUgKzI1LDExIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+Ci0KICNpZiBVU0UoR0xJQikKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNlbmRpZgog
CiAjaWYgUExBVEZPUk0oTUFDKQotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0KIE9CSkNfQ0xB
U1MgTlNTY3JlZW47CiBPQkpDX0NMQVNTIE5TV2luZG93OwogI2lmZGVmIE5TR0VPTUVUUllfVFlQ
RVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCkBAIC02MCwxMyArNTYsMTkgQEAgY2xhc3MgRmxv
YXRTaXplOwogY2xhc3MgV2lkZ2V0OwogCiB1c2luZyBQbGF0Zm9ybURpc3BsYXlJRCA9IHVpbnQz
Ml90OworCisjaWYgUExBVEZPUk0oTUFDKQorCiB1c2luZyBJT1JlZ2lzdHJ5R1BVSUQgPSBpbnQ2
NF90OyAvLyBHbG9iYWwgSU9LaXQgSS9PIHJlZ2lzdHJ5SUQgdGhhdCBjYW4gbWF0Y2ggYSBHUFUg
YWNyb3NzIHByb2Nlc3MgYm91bmRhcmllcy4KIAorI2VuZGlmCisKIGludCBzY3JlZW5EZXB0aChX
aWRnZXQqKTsKIGludCBzY3JlZW5EZXB0aFBlckNvbXBvbmVudChXaWRnZXQqKTsKIGJvb2wgc2Ny
ZWVuSXNNb25vY2hyb21lKFdpZGdldCopOwogCiBib29sIHNjcmVlbkhhc0ludmVydGVkQ29sb3Jz
KCk7CisKICNpZiBVU0UoR0xJQikKIGRvdWJsZSBzY3JlZW5EUEkoKTsKIHZvaWQgc2V0U2NyZWVu
RFBJT2JzZXJ2ZXJIYW5kbGVyKEZ1bmN0aW9uPHZvaWQoKT4mJiwgdm9pZCopOwpAQCAtOTIsMTAg
Kzk0LDExIEBAIHN0cnVjdCBTY3JlZW5EYXRhOwogICAgIAogV0VCQ09SRV9FWFBPUlQgU2NyZWVu
UHJvcGVydGllcyBjb2xsZWN0U2NyZWVuUHJvcGVydGllcygpOwogV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRTY3JlZW5Qcm9wZXJ0aWVzKGNvbnN0IFNjcmVlblByb3BlcnRpZXMmKTsKLU9wdGlvbmFs
PGNvbnN0IFNjcmVlbkRhdGEmPiBzY3JlZW5EYXRhKFBsYXRmb3JtRGlzcGxheUlEIHNjcmVlbmRp
c3BsYXlJRCk7Citjb25zdCBTY3JlZW5EYXRhKiBzY3JlZW5EYXRhKFBsYXRmb3JtRGlzcGxheUlE
IHNjcmVlbmRpc3BsYXlJRCk7CiBXRUJDT1JFX0VYUE9SVCBQbGF0Zm9ybURpc3BsYXlJRCBwcmlt
YXJ5U2NyZWVuRGlzcGxheUlEKCk7CiAgICAgCiAjaWYgUExBVEZPUk0oTUFDKQorCiBXRUJDT1JF
X0VYUE9SVCBQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQoTlNTY3JlZW4gKik7CiAKIFdFQkNP
UkVfRVhQT1JUIE5TU2NyZWVuICpzY3JlZW4oTlNXaW5kb3cgKik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JlZW5Qcm9wZXJ0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JlZW5Qcm9wZXJ0aWVzLmgKaW5kZXggYmY0MjAxNjRjOTdhYTc1OTI2NWQ2MDBk
N2I4YmNhMzcxZGYxYWRiNC4uOGVkMDE3NDhkM2I2OWQ5NzEzMDRkNWFiNzQ4ZjE2MDFjNGI3NzM5
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2NyZWVuUHJvcGVydGllcy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NjcmVlblByb3BlcnRpZXMuaApAQCAtMjcs
NiArMjcsNyBAQAogCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1T
Y3JlZW4uaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNDgsMTIgKzQ5LDgg
QEAgc3RydWN0IFNjcmVlbkRhdGEgewogICAgIHVpbnQzMl90IGRpc3BsYXlNYXNrIHsgMCB9Owog
ICAgIElPUmVnaXN0cnlHUFVJRCBncHVJRCB7IDAgfTsKICNlbmRpZgotICAgIGVudW0gRW5jb2Rl
ZENvbG9yU3BhY2VEYXRhVHlwZSB7Ci0gICAgICAgIE51bGwsCi0gICAgICAgIENvbG9yU3BhY2VO
YW1lLAotICAgICAgICBDb2xvclNwYWNlRGF0YSwKLSAgICB9OwogCisgICAgZW51bSBjbGFzcyBD
b2xvclNwYWNlVHlwZSA6IHVpbnQ4X3QgeyBOb25lLCBOYW1lLCBEYXRhIH07CiAgICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxTY3JlZW5EYXRhPiBkZWNvZGUoRGVj
b2RlciYpOwogfTsKQEAgLTEwMywyNSArMTAwLDI0IEBAIHZvaWQgU2NyZWVuRGF0YTo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgaWYgKGNvbG9yU3BhY2UpIHsKICAgICAgICAg
Ly8gVHJ5IHRvIGVuY29kZSB0aGUgbmFtZS4KICAgICAgICAgaWYgKGF1dG8gbmFtZSA9IGFkb3B0
Q0YoQ0dDb2xvclNwYWNlQ29weU5hbWUoY29sb3JTcGFjZS5nZXQoKSkpKSB7Ci0gICAgICAgICAg
ICBlbmNvZGVyLmVuY29kZUVudW0oQ29sb3JTcGFjZU5hbWUpOworICAgICAgICAgICAgZW5jb2Rl
ci5lbmNvZGVFbnVtKENvbG9yU3BhY2VUeXBlOjpOYW1lKTsKICAgICAgICAgICAgIGVuY29kZXIg
PDwgU3RyaW5nKG5hbWUuZ2V0KCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
ICAgICAgICAgLy8gRmFpbGluZyB0aGF0LCBqdXN0IGVuY29kZSB0aGUgSUNDIGRhdGEuCiAgICAg
ICAgIGlmIChhdXRvIHByb2ZpbGVEYXRhID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDb3B5SUNDRGF0
YShjb2xvclNwYWNlLmdldCgpKSkpIHsKLSAgICAgICAgICAgIGVuY29kZXIuZW5jb2RlRW51bShD
b2xvclNwYWNlRGF0YSk7Ci0KICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBpY2NEYXRhOwog
ICAgICAgICAgICAgaWNjRGF0YS5hcHBlbmQoQ0ZEYXRhR2V0Qnl0ZVB0cihwcm9maWxlRGF0YS5n
ZXQoKSksIENGRGF0YUdldExlbmd0aChwcm9maWxlRGF0YS5nZXQoKSkpOwogCisgICAgICAgICAg
ICBlbmNvZGVyLmVuY29kZUVudW0oQ29sb3JTcGFjZVR5cGU6OkRhdGEpOwogICAgICAgICAgICAg
ZW5jb2RlciA8PCBpY2NEYXRhOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
fQogCiAgICAgLy8gVGhlIGNvbG9yIHNwYWNlIHdhcyBudWxsIG9yIGZhaWxlZCB0byBiZSBlbmNv
ZGVkLgotICAgIGVuY29kZXIgPDwgTnVsbDsKKyAgICBlbmNvZGVyIDw8IENvbG9yU3BhY2VUeXBl
OjpOb25lOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgpAQCAtMTc5LDE1ICsxNzUsMTUg
QEAgT3B0aW9uYWw8U2NyZWVuRGF0YT4gU2NyZWVuRGF0YTo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAjZW5kaWYKIAotICAgIEVuY29kZWRD
b2xvclNwYWNlRGF0YVR5cGUgZGF0YVR5cGU7CisgICAgQ29sb3JTcGFjZVR5cGUgZGF0YVR5cGU7
CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0oZGF0YVR5cGUpKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCiAgICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY2dDb2xvclNw
YWNlOwogICAgIHN3aXRjaCAoZGF0YVR5cGUpIHsKLSAgICBjYXNlIE51bGw6CisgICAgY2FzZSBD
b2xvclNwYWNlVHlwZTo6Tm9uZToKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb2xvclNwYWNl
TmFtZTogeworICAgIGNhc2UgQ29sb3JTcGFjZVR5cGU6Ok5hbWU6IHsKICAgICAgICAgT3B0aW9u
YWw8U3RyaW5nPiBjb2xvclNwYWNlTmFtZTsKICAgICAgICAgZGVjb2RlciA+PiBjb2xvclNwYWNl
TmFtZTsKICAgICAgICAgQVNTRVJUKGNvbG9yU3BhY2VOYW1lKTsKQEAgLTE5Nyw3ICsxOTMsNyBA
QCBPcHRpb25hbDxTY3JlZW5EYXRhPiBTY3JlZW5EYXRhOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKICAgICAgICAgY2dDb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVXaXRo
TmFtZShjb2xvclNwYWNlTmFtZS0+Y3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOwogICAgICAgICBi
cmVhazsKICAgICB9Ci0gICAgY2FzZSBDb2xvclNwYWNlRGF0YTogeworICAgIGNhc2UgQ29sb3JT
cGFjZVR5cGU6OkRhdGE6IHsKICAgICAgICAgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBpY2NE
YXRhOwogICAgICAgICBkZWNvZGVyID4+IGljY0RhdGE7CiAgICAgICAgIEFTU0VSVChpY2NEYXRh
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVNjcmVl
bklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVNjcmVlbklPUy5t
bQppbmRleCA3ZWNkZDg0NWNjYWMwMGNiNjRjMDY3NDFmZThkZTNkMDJkNGVjMGNhLi4yZGY4NWY4
ZDQyMTFlZDExY2ZlMmEwZmMxNzdkOGQzNTFhMWU4ZmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1TY3JlZW5JT1MubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtU2NyZWVuSU9TLm1tCkBAIC02MCwyNyArNjAsMjQgQEAg
aW50IHNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KFdpZGdldCopCiAKIGJvb2wgc2NyZWVuSXNNb25v
Y2hyb21lKFdpZGdldCopCiB7Ci0gICAgYXV0byB2ID0gc2NyZWVuRGF0YShwcmltYXJ5U2NyZWVu
RGlzcGxheUlEKCkpOwotICAgIGlmICh2Lmhhc1ZhbHVlKCkpCi0gICAgICAgIHJldHVybiB2LT5z
Y3JlZW5Jc01vbm9jaHJvbWU7CisgICAgaWYgKGF1dG8gZGF0YSA9IHNjcmVlbkRhdGEocHJpbWFy
eVNjcmVlbkRpc3BsYXlJRCgpKSkKKyAgICAgICAgcmV0dXJuIGRhdGEtPnNjcmVlbklzTW9ub2No
cm9tZTsKICAgICAKICAgICByZXR1cm4gUEFMOjpzb2Z0TGlua1VJS2l0VUlBY2Nlc3NpYmlsaXR5
SXNHcmF5c2NhbGVFbmFibGVkKCk7CiB9CiAKIGJvb2wgc2NyZWVuSGFzSW52ZXJ0ZWRDb2xvcnMo
KQogewotICAgIGF1dG8gdiA9IHNjcmVlbkRhdGEocHJpbWFyeVNjcmVlbkRpc3BsYXlJRCgpKTsK
LSAgICBpZiAodi5oYXNWYWx1ZSgpKQotICAgICAgICByZXR1cm4gdi0+c2NyZWVuSGFzSW52ZXJ0
ZWRDb2xvcnM7CisgICAgaWYgKGF1dG8gZGF0YSA9IHNjcmVlbkRhdGEocHJpbWFyeVNjcmVlbkRp
c3BsYXlJRCgpKSkKKyAgICAgICAgcmV0dXJuIGRhdGEtPnNjcmVlbkhhc0ludmVydGVkQ29sb3Jz
OwogICAgIAogICAgIHJldHVybiBQQUw6OnNvZnRMaW5rVUlLaXRVSUFjY2Vzc2liaWxpdHlJc0lu
dmVydENvbG9yc0VuYWJsZWQoKTsKIH0KIAogYm9vbCBzY3JlZW5TdXBwb3J0c0V4dGVuZGVkQ29s
b3IoV2lkZ2V0KikKIHsKLSAgICBhdXRvIHYgPSBzY3JlZW5EYXRhKHByaW1hcnlTY3JlZW5EaXNw
bGF5SUQoKSk7Ci0gICAgaWYgKHYuaGFzVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIHYtPnNjcmVl
blN1cHBvcnRzRXh0ZW5kZWRDb2xvcjsKKyAgICBpZiAoYXV0byBkYXRhID0gc2NyZWVuRGF0YShw
cmltYXJ5U2NyZWVuRGlzcGxheUlEKCkpKQorICAgICAgICByZXR1cm4gZGF0YS0+c2NyZWVuU3Vw
cG9ydHNFeHRlbmRlZENvbG9yOwogCiAgICAgcmV0dXJuIE1HR2V0Qm9vbEFuc3dlcihrTUdRSGFz
RXh0ZW5kZWRDb2xvckRpc3BsYXkpOwogfQpAQCAtMTU1LDkgKzE1Miw4IEBAIEZsb2F0U2l6ZSBz
Y3JlZW5TaXplKCkKICAgICBpZiAoZGV2aWNlSGFzSVBhZENhcGFiaWxpdHkoKSAmJiBbW1BBTDo6
Z2V0VUlBcHBsaWNhdGlvbkNsYXNzKCkgc2hhcmVkQXBwbGljYXRpb25dIF9pc0NsYXNzaWNdKQog
ICAgICAgICByZXR1cm4geyAzMjAsIDQ4MCB9OwogCi0gICAgYXV0byB2ID0gc2NyZWVuRGF0YShw
cmltYXJ5U2NyZWVuRGlzcGxheUlEKCkpOwotICAgIGlmICh2Lmhhc1ZhbHVlKCkpCi0gICAgICAg
IHJldHVybiB2LT5zY3JlZW5SZWN0LnNpemUoKTsKKyAgICBpZiAoYXV0byBkYXRhID0gc2NyZWVu
RGF0YShwcmltYXJ5U2NyZWVuRGlzcGxheUlEKCkpKQorICAgICAgICByZXR1cm4gZGF0YS0+c2Ny
ZWVuUmVjdC5zaXplKCk7CiAKICAgICByZXR1cm4gRmxvYXRTaXplKFtbUEFMOjpnZXRVSVNjcmVl
bkNsYXNzKCkgbWFpblNjcmVlbl0gX3JlZmVyZW5jZUJvdW5kc10uc2l6ZSk7CiB9CkBAIC0xNjcs
OSArMTYzLDggQEAgRmxvYXRTaXplIGF2YWlsYWJsZVNjcmVlblNpemUoKQogICAgIGlmIChkZXZp
Y2VIYXNJUGFkQ2FwYWJpbGl0eSgpICYmIFtbUEFMOjpnZXRVSUFwcGxpY2F0aW9uQ2xhc3MoKSBz
aGFyZWRBcHBsaWNhdGlvbl0gX2lzQ2xhc3NpY10pCiAgICAgICAgIHJldHVybiB7IDMyMCwgNDgw
IH07CiAKLSAgICBhdXRvIHYgPSBzY3JlZW5EYXRhKHByaW1hcnlTY3JlZW5EaXNwbGF5SUQoKSk7
Ci0gICAgaWYgKHYuaGFzVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIHYtPnNjcmVlbkF2YWlsYWJs
ZVJlY3Quc2l6ZSgpOworICAgIGlmIChhdXRvIGRhdGEgPSBzY3JlZW5EYXRhKHByaW1hcnlTY3Jl
ZW5EaXNwbGF5SUQoKSkpCisgICAgICAgIHJldHVybiBkYXRhLT5zY3JlZW5BdmFpbGFibGVSZWN0
LnNpemUoKTsKIAogICAgIHJldHVybiBGbG9hdFNpemUoW1BBTDo6Z2V0VUlTY3JlZW5DbGFzcygp
IG1haW5TY3JlZW5dLmJvdW5kcy5zaXplKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9QbGF0Zm9ybVNjcmVlbk1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9QbGF0Zm9ybVNjcmVlbk1hYy5tbQppbmRleCA1OWNiN2IzYzZhYTIzMDFiM2IxYTBm
Y2Y1OTY3YWJkNzg2NTFjMTUyLi4wMzY4NGUyYjUxYWZmODNhOThiMzBkZTVkZjhmNzJhMWNhZWRj
MWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1TY3Jl
ZW5NYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtU2NyZWVu
TWFjLm1tCkBAIC00MCwxMSArNDAsNiBAQAogI2ltcG9ydCA8cGFsL2NvY29hL01lZGlhVG9vbGJv
eFNvZnRMaW5rLmg+CiAjZW5kaWYKIAotZXh0ZXJuICJDIiB7Ci1ib29sIENHRGlzcGxheVVzZXNJ
bnZlcnRlZFBvbGFyaXR5KHZvaWQpOwotYm9vbCBDR0Rpc3BsYXlVc2VzRm9yY2VUb0dyYXkodm9p
ZCk7Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gVGhlc2UgZnVuY3Rpb25zIHNjYWxl
IGJldHdlZW4gc2NyZWVuIGFuZCBwYWdlIGNvb3JkaW5hdGVzIGJlY2F1c2UgSmF2YVNjcmlwdC9E
T00gb3BlcmF0aW9ucwpAQCAtMTQ4LDE4ICsxNDMsMTYgQEAgdm9pZCBzZXRTaG91bGRPdmVycmlk
ZVNjcmVlblN1cHBvcnRzSGlnaER5bmFtaWNSYW5nZShib29sIHNob3VsZE92ZXJyaWRlLCBib29s
IHMKIAogdWludDMyX3QgcHJpbWFyeU9wZW5HTERpc3BsYXlNYXNrKCkKIHsKLSAgICBhdXRvIHYg
PSBzY3JlZW5EYXRhKHByaW1hcnlTY3JlZW5EaXNwbGF5SUQoKSk7Ci0gICAgaWYgKHYuaGFzVmFs
dWUoKSkKLSAgICAgICAgcmV0dXJuIHYtPmRpc3BsYXlNYXNrOworICAgIGlmIChhdXRvIGRhdGEg
PSBzY3JlZW5EYXRhKHByaW1hcnlTY3JlZW5EaXNwbGF5SUQoKSkpCisgICAgICAgIHJldHVybiBk
YXRhLT5kaXNwbGF5TWFzazsKIAogICAgIHJldHVybiAwOwogfQogCiB1aW50MzJfdCBkaXNwbGF5
TWFza0ZvckRpc3BsYXkoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKQogewotICAgIGF1dG8g
diA9IHNjcmVlbkRhdGEoZGlzcGxheUlEKTsKLSAgICBpZiAodi5oYXNWYWx1ZSgpKQotICAgICAg
ICByZXR1cm4gdi0+ZGlzcGxheU1hc2s7CisgICAgaWYgKGF1dG8gZGF0YSA9IHNjcmVlbkRhdGEo
ZGlzcGxheUlEKSkKKyAgICAgICAgcmV0dXJuIGRhdGEtPmRpc3BsYXlNYXNrOwogCiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7CkBAIC0xNzMsMTMgKzE2NiwxMiBAQCBJ
T1JlZ2lzdHJ5R1BVSUQgcHJpbWFyeUdQVUlEKCkKIElPUmVnaXN0cnlHUFVJRCBncHVJREZvckRp
c3BsYXkoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKQogewogI2lmIEVOQUJMRShXRUJQUk9D
RVNTX1dJTkRPV1NFUlZFUl9CTE9DS0lORykKLSAgICBhdXRvIHYgPSBzY3JlZW5EYXRhKGRpc3Bs
YXlJRCk7Ci0gICAgaWYgKHYuaGFzVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIHYtPmdwdUlEOwor
ICAgIGlmIChhdXRvIGRhdGEgPSBzY3JlZW5EYXRhKGRpc3BsYXlJRCkpCisgICAgICAgIHJldHVy
biBkYXRhLT5ncHVJRDsKKyAgICByZXR1cm4gMDsKICNlbHNlCiAgICAgcmV0dXJuIGdwdUlERm9y
RGlzcGxheU1hc2soQ0dEaXNwbGF5SURUb09wZW5HTERpc3BsYXlNYXNrKGRpc3BsYXlJRCkpOwog
I2VuZGlmCi0gICAgcmV0dXJuIDA7CiB9CiAKIElPUmVnaXN0cnlHUFVJRCBncHVJREZvckRpc3Bs
YXlNYXNrKEdMdWludCBkaXNwbGF5TWFzaykKQEAgLTIxNywxNiArMjA5LDE1IEBAIElPUmVnaXN0
cnlHUFVJRCBncHVJREZvckRpc3BsYXlNYXNrKEdMdWludCBkaXNwbGF5TWFzaykKICAgICByZXR1
cm4gKElPUmVnaXN0cnlHUFVJRCkgZ3B1SURIaWdoIDw8IDMyIHwgZ3B1SURMb3c7CiB9CiAKLXN0
YXRpYyBPcHRpb25hbDxjb25zdCBTY3JlZW5EYXRhJj4gZ2V0U2NyZWVuUHJvcGVydGllcyhXaWRn
ZXQqIHdpZGdldCkKK3N0YXRpYyBjb25zdCBTY3JlZW5EYXRhKiBzY3JlZW5Qcm9wZXJ0aWVzKFdp
ZGdldCogd2lkZ2V0KQogewogICAgIHJldHVybiBzY3JlZW5EYXRhKGRpc3BsYXlJRCh3aWRnZXQp
KTsKIH0KIAogYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0KiB3aWRnZXQpCiB7Ci0gICAg
YXV0byB2ID0gZ2V0U2NyZWVuUHJvcGVydGllcyh3aWRnZXQpOwotICAgIGlmICh2Lmhhc1ZhbHVl
KCkpCi0gICAgICAgIHJldHVybiB2LT5zY3JlZW5Jc01vbm9jaHJvbWU7CisgICAgaWYgKGF1dG8g
ZGF0YSA9IHNjcmVlblByb3BlcnRpZXMod2lkZ2V0KSkKKyAgICAgICAgcmV0dXJuIGRhdGEtPnNj
cmVlbklzTW9ub2Nocm9tZTsKIAogICAgIC8vIFRoaXMgaXMgYSBzeXN0ZW0td2lkZSBhY2Nlc3Np
YmlsaXR5IHNldHRpbmcsIHNhbWUgb24gYWxsIHNjcmVlbnMuCiAgICAgQVNTRVJUKGhhc1Byb2Nl
c3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQ29tbXVuaWNhdGVXaXRoV2luZG93U2Vy
dmVyKSk7CkBAIC0yMzUsOSArMjI2LDggQEAgYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0
KiB3aWRnZXQpCiAKIGJvb2wgc2NyZWVuSGFzSW52ZXJ0ZWRDb2xvcnMoKQogewotICAgIGF1dG8g
diA9IHNjcmVlbkRhdGEocHJpbWFyeVNjcmVlbkRpc3BsYXlJRCgpKTsKLSAgICBpZiAodi5oYXNW
YWx1ZSgpKQotICAgICAgICByZXR1cm4gdi0+c2NyZWVuSGFzSW52ZXJ0ZWRDb2xvcnM7CisgICAg
aWYgKGF1dG8gZGF0YSA9IHNjcmVlbkRhdGEocHJpbWFyeVNjcmVlbkRpc3BsYXlJRCgpKSkKKyAg
ICAgICAgcmV0dXJuIGRhdGEtPnNjcmVlbkhhc0ludmVydGVkQ29sb3JzOwogCiAgICAgLy8gVGhp
cyBpcyBhIHN5c3RlbS13aWRlIGFjY2Vzc2liaWxpdHkgc2V0dGluZywgc2FtZSBvbiBhbGwgc2Ny
ZWVucy4KICAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpD
YW5Db21tdW5pY2F0ZVdpdGhXaW5kb3dTZXJ2ZXIpKTsKQEAgLTI0NiwxMSArMjM2LDkgQEAgYm9v
bCBzY3JlZW5IYXNJbnZlcnRlZENvbG9ycygpCiAKIGludCBzY3JlZW5EZXB0aChXaWRnZXQqIHdp
ZGdldCkKIHsKLSAgICBhdXRvIHYgPSBnZXRTY3JlZW5Qcm9wZXJ0aWVzKHdpZGdldCk7Ci0gICAg
aWYgKHYuaGFzVmFsdWUoKSkgewotICAgICAgICBhdXRvIHNjcmVlbkRlcHRoID0gdi0+c2NyZWVu
RGVwdGg7Ci0gICAgICAgIEFTU0VSVChzY3JlZW5EZXB0aCk7Ci0gICAgICAgIHJldHVybiBzY3Jl
ZW5EZXB0aDsKKyAgICBpZiAoYXV0byBkYXRhID0gc2NyZWVuUHJvcGVydGllcyh3aWRnZXQpKSB7
CisgICAgICAgIEFTU0VSVChkYXRhLT5zY3JlZW5EZXB0aCk7CisgICAgICAgIHJldHVybiBkYXRh
LT5zY3JlZW5EZXB0aDsKICAgICB9CiAKICAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQ
cm9jZXNzUHJpdmlsZWdlOjpDYW5Db21tdW5pY2F0ZVdpdGhXaW5kb3dTZXJ2ZXIpKTsKQEAgLTI1
OSwxMSArMjQ3LDkgQEAgaW50IHNjcmVlbkRlcHRoKFdpZGdldCogd2lkZ2V0KQogCiBpbnQgc2Ny
ZWVuRGVwdGhQZXJDb21wb25lbnQoV2lkZ2V0KiB3aWRnZXQpCiB7Ci0gICAgYXV0byB2ID0gZ2V0
U2NyZWVuUHJvcGVydGllcyh3aWRnZXQpOwotICAgIGlmICh2Lmhhc1ZhbHVlKCkpIHsKLSAgICAg
ICAgYXV0byBkZXB0aFBlckNvbXBvbmVudCA9IHYtPnNjcmVlbkRlcHRoUGVyQ29tcG9uZW50Owot
ICAgICAgICBBU1NFUlQoZGVwdGhQZXJDb21wb25lbnQpOwotICAgICAgICByZXR1cm4gZGVwdGhQ
ZXJDb21wb25lbnQ7CisgICAgaWYgKGF1dG8gZGF0YSA9IHNjcmVlblByb3BlcnRpZXMod2lkZ2V0
KSkgeworICAgICAgICBBU1NFUlQoZGF0YS0+c2NyZWVuRGVwdGhQZXJDb21wb25lbnQpOworICAg
ICAgICByZXR1cm4gZGF0YS0+c2NyZWVuRGVwdGhQZXJDb21wb25lbnQ7CiAgICAgfQogCiAgICAg
QVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQ29tbXVuaWNh
dGVXaXRoV2luZG93U2VydmVyKSk7CkBAIC0yNzIsMTEgKzI1OCw5IEBAIGludCBzY3JlZW5EZXB0
aFBlckNvbXBvbmVudChXaWRnZXQqIHdpZGdldCkKIAogRmxvYXRSZWN0IHNjcmVlblJlY3RGb3JE
aXNwbGF5KFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCkKIHsKLSAgICBhdXRvIHYgPSBzY3Jl
ZW5EYXRhKGRpc3BsYXlJRCk7Ci0gICAgaWYgKHYuaGFzVmFsdWUoKSkgewotICAgICAgICBhdXRv
IHNjcmVlblJlY3QgPSB2LT5zY3JlZW5SZWN0OwotICAgICAgICBBU1NFUlQoIXNjcmVlblJlY3Qu
aXNFbXB0eSgpKTsKLSAgICAgICAgcmV0dXJuIHNjcmVlblJlY3Q7CisgICAgaWYgKGF1dG8gZGF0
YSA9IHNjcmVlbkRhdGEoZGlzcGxheUlEKSkgeworICAgICAgICBBU1NFUlQoIWRhdGEtPnNjcmVl
blJlY3QuaXNFbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuIGRhdGEtPnNjcmVlblJlY3Q7CiAgICAg
fQogCiAgICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2Fu
Q29tbXVuaWNhdGVXaXRoV2luZG93U2VydmVyKSk7CkBAIC0yOTAsOSArMjc0LDggQEAgRmxvYXRS
ZWN0IHNjcmVlblJlY3RGb3JQcmltYXJ5U2NyZWVuKCkKIAogRmxvYXRSZWN0IHNjcmVlblJlY3Qo
V2lkZ2V0KiB3aWRnZXQpCiB7Ci0gICAgYXV0byB2ID0gZ2V0U2NyZWVuUHJvcGVydGllcyh3aWRn
ZXQpOwotICAgIGlmICh2Lmhhc1ZhbHVlKCkpCi0gICAgICAgIHJldHVybiB2LT5zY3JlZW5SZWN0
OworICAgIGlmIChhdXRvIGRhdGEgPSBzY3JlZW5Qcm9wZXJ0aWVzKHdpZGdldCkpCisgICAgICAg
IHJldHVybiBkYXRhLT5zY3JlZW5SZWN0OwogCiAgICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxl
Z2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQ29tbXVuaWNhdGVXaXRoV2luZG93U2VydmVyKSk7CiAg
ICAgcmV0dXJuIHRvVXNlclNwYWNlKFtzY3JlZW4od2lkZ2V0KSBmcmFtZV0sIHdpbmRvdyh3aWRn
ZXQpKTsKQEAgLTMwMCw5ICsyODMsOCBAQCBGbG9hdFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQqIHdp
ZGdldCkKIAogRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0KiB3aWRnZXQpCiB7
Ci0gICAgYXV0byB2ID0gZ2V0U2NyZWVuUHJvcGVydGllcyh3aWRnZXQpOwotICAgIGlmICh2Lmhh
c1ZhbHVlKCkpCi0gICAgICAgIHJldHVybiB2LT5zY3JlZW5BdmFpbGFibGVSZWN0OworICAgIGlm
IChhdXRvIGRhdGEgPSBzY3JlZW5Qcm9wZXJ0aWVzKHdpZGdldCkpCisgICAgICAgIHJldHVybiBk
YXRhLT5zY3JlZW5BdmFpbGFibGVSZWN0OwogCiAgICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxl
Z2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQ29tbXVuaWNhdGVXaXRoV2luZG93U2VydmVyKSk7CiAg
ICAgcmV0dXJuIHRvVXNlclNwYWNlKFtzY3JlZW4od2lkZ2V0KSB2aXNpYmxlRnJhbWVdLCB3aW5k
b3cod2lkZ2V0KSk7CkBAIC0zMjYsOSArMzA4LDggQEAgTlNTY3JlZW4gKnNjcmVlbihQbGF0Zm9y
bURpc3BsYXlJRCBkaXNwbGF5SUQpCiAKIENHQ29sb3JTcGFjZVJlZiBzY3JlZW5Db2xvclNwYWNl
KFdpZGdldCogd2lkZ2V0KQogewotICAgIGF1dG8gdiA9IGdldFNjcmVlblByb3BlcnRpZXMod2lk
Z2V0KTsKLSAgICBpZiAodi5oYXNWYWx1ZSgpKQotICAgICAgICByZXR1cm4gdi0+Y29sb3JTcGFj
ZS5nZXQoKTsKKyAgICBpZiAoYXV0byBkYXRhID0gc2NyZWVuUHJvcGVydGllcyh3aWRnZXQpKQor
ICAgICAgICByZXR1cm4gZGF0YS0+Y29sb3JTcGFjZS5nZXQoKTsKIAogICAgIEFTU0VSVChoYXNQ
cm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkNvbW11bmljYXRlV2l0aFdpbmRv
d1NlcnZlcikpOwogICAgIHJldHVybiBzY3JlZW4od2lkZ2V0KS5jb2xvclNwYWNlLkNHQ29sb3JT
cGFjZTsKQEAgLTMzNiw5ICszMTcsOCBAQCBDR0NvbG9yU3BhY2VSZWYgc2NyZWVuQ29sb3JTcGFj
ZShXaWRnZXQqIHdpZGdldCkKIAogYm9vbCBzY3JlZW5TdXBwb3J0c0V4dGVuZGVkQ29sb3IoV2lk
Z2V0KiB3aWRnZXQpCiB7Ci0gICAgYXV0byB2ID0gZ2V0U2NyZWVuUHJvcGVydGllcyh3aWRnZXQp
OwotICAgIGlmICh2Lmhhc1ZhbHVlKCkpCi0gICAgICAgIHJldHVybiB2LT5zY3JlZW5TdXBwb3J0
c0V4dGVuZGVkQ29sb3I7CisgICAgaWYgKGF1dG8gZGF0YSA9IHNjcmVlblByb3BlcnRpZXMod2lk
Z2V0KSkKKyAgICAgICAgcmV0dXJuIGRhdGEtPnNjcmVlblN1cHBvcnRzRXh0ZW5kZWRDb2xvcjsK
IAogICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkNv
bW11bmljYXRlV2l0aFdpbmRvd1NlcnZlcikpOwogICAgIHJldHVybiBbc2NyZWVuKHdpZGdldCkg
Y2FuUmVwcmVzZW50RGlzcGxheUdhbXV0Ok5TRGlzcGxheUdhbXV0UDNdOwpAQCAtMzQ2LDkgKzMy
Niw4IEBAIGJvb2wgc2NyZWVuU3VwcG9ydHNFeHRlbmRlZENvbG9yKFdpZGdldCogd2lkZ2V0KQog
CiBib29sIHNjcmVlblN1cHBvcnRzSGlnaER5bmFtaWNSYW5nZShXaWRnZXQqIHdpZGdldCkKIHsK
LSAgICBhdXRvIHYgPSBnZXRTY3JlZW5Qcm9wZXJ0aWVzKHdpZGdldCk7Ci0gICAgaWYgKHYuaGFz
VmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIHYtPnNjcmVlblN1cHBvcnRzSGlnaER5bmFtaWNSYW5n
ZTsKKyAgICBpZiAoYXV0byBkYXRhID0gc2NyZWVuUHJvcGVydGllcyh3aWRnZXQpKQorICAgICAg
ICByZXR1cm4gZGF0YS0+c2NyZWVuU3VwcG9ydHNIaWdoRHluYW1pY1JhbmdlOwogCiAgICAgQVNT
RVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQ29tbXVuaWNhdGVX
aXRoV2luZG93U2VydmVyKSk7CiAjaWYgVVNFKE1FRElBVE9PTEJPWCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9jb250ZXh0L1NlcnZpY2VXb3JrZXJUaHJlYWQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL2NvbnRleHQvU2VydmljZVdvcmtl
clRocmVhZC5jcHAKaW5kZXggZGNiMGE0ZTljYTRmYTA5NjdkM2U3ZDg0MThlNjU0MTQ2ZTJhZjFk
YS4uMzM2OWQzMGI2ZGExNWRiYzEwOWIwNDJiZmUxMWZjZDQ1M2QxMDMxNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL2NvbnRleHQvU2VydmljZVdvcmtlclRocmVh
ZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL2NvbnRleHQvU2Vydmlj
ZVdvcmtlclRocmVhZC5jcHAKQEAgLTE0NCwxMSArMTQ0LDExIEBAIHZvaWQgU2VydmljZVdvcmtl
clRocmVhZDo6cXVldWVUYXNrVG9Qb3N0TWVzc2FnZShNZXNzYWdlV2l0aE1lc3NhZ2VQb3J0cyYm
IG1lc3NhCiB2b2lkIFNlcnZpY2VXb3JrZXJUaHJlYWQ6OnF1ZXVlVGFza1RvRmlyZUluc3RhbGxF
dmVudCgpCiB7CiAgICAgYXV0byBzZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUgPSBtYWtlUmVmKGRv
d25jYXN0PFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZT4oKndvcmtlckdsb2JhbFNjb3BlKCkpKTsK
LSAgICBzZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNr
U291cmNlOjpET01NYW5pcHVsYXRpb24sIFtzZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUgPSBzZXJ2
aWNlV29ya2VyR2xvYmFsU2NvcGUuY29weVJlZigpLCBqb2JEYXRhSWRlbnRpZmllciA9IG1fZGF0
YS5qb2JEYXRhSWRlbnRpZmllciwgc2VydmljZVdvcmtlcklkZW50aWZpZXIgPSB0aGlzLT5pZGVu
dGlmaWVyKCldIHsKKyAgICBzZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUtPmV2ZW50TG9vcCgpLnF1
ZXVlVGFzayhUYXNrU291cmNlOjpET01NYW5pcHVsYXRpb24sIFtzZXJ2aWNlV29ya2VyR2xvYmFs
U2NvcGUgPSBzZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuY29weVJlZigpLCBzZXJ2aWNlV29ya2Vy
SWRlbnRpZmllciA9IHRoaXMtPmlkZW50aWZpZXIoKV0gewogICAgICAgICBhdXRvIGluc3RhbGxF
dmVudCA9IEV4dGVuZGFibGVFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5pbnN0YWxsRXZlbnQs
IHsgfSwgRXh0ZW5kYWJsZUV2ZW50OjpJc1RydXN0ZWQ6Olllcyk7CiAgICAgICAgIHNlcnZpY2VX
b3JrZXJHbG9iYWxTY29wZS0+ZGlzcGF0Y2hFdmVudChpbnN0YWxsRXZlbnQpOwogCi0gICAgICAg
IGluc3RhbGxFdmVudC0+d2hlbkFsbEV4dGVuZExpZmV0aW1lUHJvbWlzZXNBcmVTZXR0bGVkKFtq
b2JEYXRhSWRlbnRpZmllciwgc2VydmljZVdvcmtlcklkZW50aWZpZXJdKEhhc2hTZXQ8UmVmPERP
TVByb21pc2U+PiYmIGV4dGVuZExpZmV0aW1lUHJvbWlzZXMpIHsKKyAgICAgICAgaW5zdGFsbEV2
ZW50LT53aGVuQWxsRXh0ZW5kTGlmZXRpbWVQcm9taXNlc0FyZVNldHRsZWQoW3NlcnZpY2VXb3Jr
ZXJJZGVudGlmaWVyXShIYXNoU2V0PFJlZjxET01Qcm9taXNlPj4mJiBleHRlbmRMaWZldGltZVBy
b21pc2VzKSB7CiAgICAgICAgICAgICBib29sIGhhc1JlamVjdGVkQW55UHJvbWlzZSA9IGZhbHNl
OwogICAgICAgICAgICAgZm9yIChhdXRvJiBwcm9taXNlIDogZXh0ZW5kTGlmZXRpbWVQcm9taXNl
cykgewogICAgICAgICAgICAgICAgIGlmIChwcm9taXNlLT5zdGF0dXMoKSA9PSBET01Qcm9taXNl
OjpTdGF0dXM6OlJlamVjdGVkKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IGI3YmVkMDM1ZDBjOTcyMGRlNmJiMDU5MzZh
N2M2ZDYyNWFiYjk1ODMuLjEyNzE2OTg5OGMzZDBjMTQwMmQ4ZWI2OTAzZjQ4YTlmNzcwNWQ1MmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdl
SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdl
SU9TLm1tCkBAIC0xNTAsMTQgKzE1MCwxNCBAQCBzdGF0aWMgU3RyaW5nIHBsYWluVGV4dEZvckNv
bnRleHQoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogICAgIHJldHVybiBXZWJDb3JlOjpwbGFp
blRleHRSZXBsYWNpbmdOb0JyZWFrU3BhY2UocmFuZ2UpOwogfQogCi1zdGF0aWMgU3RyaW5nIHBs
YWluVGV4dEZvckNvbnRleHQoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlKQorc3Rh
dGljIFN0cmluZyBwbGFpblRleHRGb3JDb250ZXh0KGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiYgcmFuZ2UpCiB7CiAgICAgcmV0dXJuIHJhbmdlID8gcGxhaW5UZXh0Rm9yQ29udGV4dCgqcmFu
Z2UpIDogZW1wdHlTdHJpbmcoKTsKIH0KIAogc3RhdGljIFN0cmluZyBwbGFpblRleHRGb3JDb250
ZXh0KGNvbnN0IFJhbmdlKiByYW5nZSkKIHsKLSAgICByZXR1cm4gcmFuZ2UgPyBwbGFpblRleHRG
b3JDb250ZXh0KCpyYW5nZSkgOiBlbXB0eVN0cmluZygpOworICAgIHJldHVybiByYW5nZSA/IHBs
YWluVGV4dEZvckNvbnRleHQoU2ltcGxlUmFuZ2UgeyAqcmFuZ2UgfSkgOiBlbXB0eVN0cmluZygp
OwogfQogCiBzdGF0aWMgU3RyaW5nIHBsYWluVGV4dEZvckRpc3BsYXkoY29uc3QgU2ltcGxlUmFu
Z2UmIHJhbmdlKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399101</attachid>
            <date>2020-05-11 23:06:07 -0700</date>
            <delta_ts>2021-05-24 11:06:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211674-20200511230605.patch</filename>
            <type>text/plain</type>
            <size>35456</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYxNTQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDA0YzgxNzg0ZTgwZjgwZGMzOWE3ODg5
ZGQ3MTc5Y2JkOGY3ZjI1NGIuLjNkOTNiNzAyYjc2YmNiM2VmOWJlZTU1MGUxNWY1MmNjYmU0OGI2
ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTAgQEAKKzIwMjAtMDUtMDkgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFN3aXRjaCBmcm9tIFdURjo6T3B0aW9uYWwgdG8gc3RkOjpv
cHRpb25hbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjExNjc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKIDIwMjAtMDUt
MTEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBwcm9ibGVt
cyBjYXVnaHQgYnkgcmVwbGFjaW5nIFdURjo6T3B0aW9uYWwgd2l0aCBzdGQ6Om9wdGlvbmFsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmggYi9Tb3VyY2UvV1RGL3d0Zi9Gb3J3
YXJkLmgKaW5kZXggZjc2Y2E0M2MyYjNlZjNiMDQ3MmI4MmM1MzE4ZTVhYzk4Y2I0NTU2OC4uMWQ5
MjFkZDEyZTg3ZGEwODFkMmZiOWUzZGQ1ZjkxMzJkNDU0Mzk2MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvRm9yd2FyZC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaApAQCAtMjEs
NiArMjEsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KIAogbmFtZXNwYWNl
IFdURiB7CkBAIC02Myw3ICs2NCw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBGdW5jdGlv
bjsKIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSA9IEFueVRocmVhZHNBY2Nlc3NUcmFpdHM+
IGNsYXNzIExhenlOZXZlckRlc3Ryb3llZDsKIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSA9
IEFueVRocmVhZHNBY2Nlc3NUcmFpdHM+IGNsYXNzIE5ldmVyRGVzdHJveWVkOwogdGVtcGxhdGU8
dHlwZW5hbWU+IGNsYXNzIE9wdGlvblNldDsKLXRlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBPcHRp
b25hbDsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFBhY2tlZDsKIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCA9IGFsaWdub2YoVCk+IGNsYXNzIFBhY2tlZEFsaWduZWRQdHI7CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IER1bWJQdHJUcmFpdHM8VD4+IGNsYXNzIFJlZjsK
QEAgLTExNCw3ICsxMTQsNiBAQCB1c2luZyBXVEY6Okhhc2hlcjsKIHVzaW5nIFdURjo6TGF6eU5l
dmVyRGVzdHJveWVkOwogdXNpbmcgV1RGOjpOZXZlckRlc3Ryb3llZDsKIHVzaW5nIFdURjo6T3B0
aW9uU2V0OwotdXNpbmcgV1RGOjpPcHRpb25hbDsKIHVzaW5nIFdURjo6T3JkaW5hbE51bWJlcjsK
IHVzaW5nIFdURjo6UHJpbnRTdHJlYW07CiB1c2luZyBXVEY6OlJlZjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL09wdGlvbmFsLmggYi9Tb3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5oCmluZGV4
IDc3MTZiYTQxOGRkYWVkMzM0ZjQwYjU2MGNjYTcyMzM2OTVjZmU4NzguLjk1NWUwYzBkZjJmZDJj
MDZmNDk3NGY3MDMxZjM5ZWE1YjA1YjY3ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL09w
dGlvbmFsLmgKKysrIGIvU291cmNlL1dURi93dGYvT3B0aW9uYWwuaApAQCAtMSwxMDQxICsxLDUx
IEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTEgLSAyMDEyIEFuZHJ6ZWogS3J6ZW1pZW5za2kuCi0v
LwotLy8gVXNlLCBtb2RpZmljYXRpb24sIGFuZCBkaXN0cmlidXRpb24gaXMgc3ViamVjdCB0byB0
aGUgQm9vc3QgU29mdHdhcmUKLS8vIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFu
eWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyBodHRwOi8vd3d3LmJvb3N0
Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gVGhlIGlkZWEgYW5kIGludGVyZmFjZSBpcyBi
YXNlZCBvbiBCb29zdC5PcHRpb25hbCBsaWJyYXJ5Ci0vLyBhdXRob3JlZCBieSBGZXJuYW5kbyBM
dWlzIENhY2Npb2xhIENhcmJhbGxhbAotLy8KLS8vIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UgLSBW
ZXJzaW9uIDEuMCAtIEF1Z3VzdCAxN3RoLCAyMDAzCi0vLwotLy8gUGVybWlzc2lvbiBpcyBoZXJl
YnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb3Igb3JnYW5pemF0aW9u
Ci0vLyBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoZSBzb2Z0d2FyZSBhbmQgYWNjb21wYW55aW5nIGRv
Y3VtZW50YXRpb24gY292ZXJlZCBieQotLy8gdGhpcyBsaWNlbnNlICh0aGUgIlNvZnR3YXJlIikg
dG8gdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIGRpc3RyaWJ1dGUsCi0vLyBleGVjdXRlLCBhbmQg
dHJhbnNtaXQgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9m
IHRoZQotLy8gU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgdGhpcmQtcGFydGllcyB0byB3aG9tIHRo
ZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8KLS8vIGRvIHNvLCBhbGwgc3ViamVjdCB0byB0aGUg
Zm9sbG93aW5nOgotLy8KLS8vIFRoZSBjb3B5cmlnaHQgbm90aWNlcyBpbiB0aGUgU29mdHdhcmUg
YW5kIHRoaXMgZW50aXJlIHN0YXRlbWVudCwgaW5jbHVkaW5nCi0vLyB0aGUgYWJvdmUgbGljZW5z
ZSBncmFudCwgdGhpcyByZXN0cmljdGlvbiBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAot
Ly8gbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgaW4gd2hv
bGUgb3IgaW4gcGFydCwgYW5kCi0vLyBhbGwgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU29mdHdh
cmUsIHVubGVzcyBzdWNoIGNvcGllcyBvciBkZXJpdmF0aXZlCi0vLyB3b3JrcyBhcmUgc29sZWx5
IGluIHRoZSBmb3JtIG9mIG1hY2hpbmUtZXhlY3V0YWJsZSBvYmplY3QgY29kZSBnZW5lcmF0ZWQg
YnkKLS8vIGEgc291cmNlIGxhbmd1YWdlIHByb2Nlc3Nvci4KLS8vCi0vLyBUSEUgU09GVFdBUkUg
SVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVT
UyBPUgotLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSwgVElUTEUgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UCi0vLyBTSEFMTCBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQU5ZT05FIERJU1RSSUJVVElORyBUSEUgU09GVFdBUkUg
QkUgTElBQkxFCi0vLyBGT1IgQU5ZIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKLS8vIEFSSVNJTkcgRlJPTSwgT1VUIE9G
IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgot
Ly8gREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotCi0vLyBDb3BpZWQgZnJvbSBodHRwczovL2dp
dGh1Yi5jb20vYWtyemVtaTEvT3B0aW9uYWwgKDg0NTZjMzkyMzc3NmIzM2I0YWU4NTI3MzQyNzNm
ZTkzNGMzZTRlNjEpCi0KLS8vIE1vZGlmaWVkIHRvIG1ha2UgaXQgY29tcGlsZSB3aXRoIGV4Y2Vw
dGlvbnMgZGlzYWJsZWQuCisvKgorICogIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwogCiAjcHJhZ21hIG9uY2UKIAotIyBpbmNs
dWRlIDx1dGlsaXR5PgotIyBpbmNsdWRlIDx0eXBlX3RyYWl0cz4KLSMgaW5jbHVkZSA8aW5pdGlh
bGl6ZXJfbGlzdD4KLSMgaW5jbHVkZSA8Y2Fzc2VydD4KLSMgaW5jbHVkZSA8c3RyaW5nPgotIyBp
bmNsdWRlIDxzdGRleGNlcHQ+Ci0jIGluY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jIGluY2x1
ZGUgPHd0Zi9Db21waWxlci5oPgotIyBpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgotIyBpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0KLSMgZGVmaW5lIFRSMl9PUFRJT05BTF9SRVFVSVJF
UyguLi4pIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPF9fVkFfQVJHU19fOjp2YWx1ZSwgYm9vbD46
OnR5cGUgPSBmYWxzZQotCi0jIGlmIGRlZmluZWQgX19HTlVDX18gLy8gTk9URTogR05VQyBpcyBh
bHNvIGRlZmluZWQgZm9yIENsYW5nCi0jICAgaWYgKF9fR05VQ19fID09IDQpICYmIChfX0dOVUNf
TUlOT1JfXyA+PSA4KQotIyAgICAgZGVmaW5lIFRSMl9PUFRJT05BTF9HQ0NfNF84X0FORF9ISUdI
RVJfX18KLSMgICBlbGlmIChfX0dOVUNfXyA+IDQpCi0jICAgICBkZWZpbmUgVFIyX09QVElPTkFM
X0dDQ180XzhfQU5EX0hJR0hFUl9fXwotIyAgIGVuZGlmCi0jCi0jICAgaWYgKF9fR05VQ19fID09
IDQpICYmIChfX0dOVUNfTUlOT1JfXyA+PSA3KQotIyAgICAgZGVmaW5lIFRSMl9PUFRJT05BTF9H
Q0NfNF83X0FORF9ISUdIRVJfX18KLSMgICBlbGlmIChfX0dOVUNfXyA+IDQpCi0jICAgICBkZWZp
bmUgVFIyX09QVElPTkFMX0dDQ180XzdfQU5EX0hJR0hFUl9fXwotIyAgIGVuZGlmCi0jCi0jICAg
aWYgKF9fR05VQ19fID09IDQpICYmIChfX0dOVUNfTUlOT1JfXyA9PSA4KSAmJiAoX19HTlVDX1BB
VENITEVWRUxfXyA+PSAxKQotIyAgICAgZGVmaW5lIFRSMl9PUFRJT05BTF9HQ0NfNF84XzFfQU5E
X0hJR0hFUl9fXwotIyAgIGVsaWYgKF9fR05VQ19fID09IDQpICYmIChfX0dOVUNfTUlOT1JfXyA+
PSA5KQotIyAgICAgZGVmaW5lIFRSMl9PUFRJT05BTF9HQ0NfNF84XzFfQU5EX0hJR0hFUl9fXwot
IyAgIGVsaWYgKF9fR05VQ19fID4gNCkKLSMgICAgIGRlZmluZSBUUjJfT1BUSU9OQUxfR0NDXzRf
OF8xX0FORF9ISUdIRVJfX18KLSMgICBlbmRpZgotIyBlbmRpZgotIwotIyBpZiBkZWZpbmVkIF9f
Y2xhbmdfbWFqb3JfXwotIyAgIGlmIChfX2NsYW5nX21ham9yX18gPT0gMyAmJiBfX2NsYW5nX21p
bm9yX18gPj0gNSkKLSMgICAgIGRlZmluZSBUUjJfT1BUSU9OQUxfQ0xBTkdfM181X0FORF9ISUdI
VEVSXwotIyAgIGVsaWYgKF9fY2xhbmdfbWFqb3JfXyA+IDMpCi0jICAgICBkZWZpbmUgVFIyX09Q
VElPTkFMX0NMQU5HXzNfNV9BTkRfSElHSFRFUl8KLSMgICBlbmRpZgotIyAgIGlmIGRlZmluZWQg
VFIyX09QVElPTkFMX0NMQU5HXzNfNV9BTkRfSElHSFRFUl8KLSMgICAgIGRlZmluZSBUUjJfT1BU
SU9OQUxfQ0xBTkdfM180XzJfQU5EX0hJR0hFUl8KLSMgICBlbGlmIChfX2NsYW5nX21ham9yX18g
PT0gMyAmJiBfX2NsYW5nX21pbm9yX18gPT0gNCAmJiBfX2NsYW5nX3BhdGNobGV2ZWxfXyA+PSAy
KQotIyAgICAgZGVmaW5lIFRSMl9PUFRJT05BTF9DTEFOR18zXzRfMl9BTkRfSElHSEVSXwotIyAg
IGVuZGlmCi0jIGVuZGlmCi0jCi0jIGlmIGRlZmluZWQgX01TQ19WRVIKLSMgICBpZiAoX01TQ19W
RVIgPj0gMTkwMCkKLSMgICAgIGRlZmluZSBUUjJfT1BUSU9OQUxfTVNWQ18yMDE1X0FORF9ISUdI
RVJfX18KLSMgICBlbmRpZgotIyBlbmRpZgotCi0jIGlmIGRlZmluZWQgX19jbGFuZ19fCi0jICAg
aWYgKF9fY2xhbmdfbWFqb3JfXyA+IDIpIHx8IChfX2NsYW5nX21ham9yX18gPT0gMikgJiYgKF9f
Y2xhbmdfbWlub3JfXyA+PSA5KQotIyAgICAgZGVmaW5lIE9QVElPTkFMX0hBU19USElTX1JWQUxV
RV9SRUZTIDEKLSMgICBlbHNlCi0jICAgICBkZWZpbmUgT1BUSU9OQUxfSEFTX1RISVNfUlZBTFVF
X1JFRlMgMAotIyAgIGVuZGlmCi0jIGVsaWYgZGVmaW5lZCBUUjJfT1BUSU9OQUxfR0NDXzRfOF8x
X0FORF9ISUdIRVJfX18KLSMgICBkZWZpbmUgT1BUSU9OQUxfSEFTX1RISVNfUlZBTFVFX1JFRlMg
MQotIyBlbGlmIGRlZmluZWQgVFIyX09QVElPTkFMX01TVkNfMjAxNV9BTkRfSElHSEVSX19fCi0j
ICAgZGVmaW5lIE9QVElPTkFMX0hBU19USElTX1JWQUxVRV9SRUZTIDEKLSMgZWxzZQotIyAgIGRl
ZmluZSBPUFRJT05BTF9IQVNfVEhJU19SVkFMVUVfUkVGUyAwCi0jIGVuZGlmCi0KLQotIyBpZiBk
ZWZpbmVkIFRSMl9PUFRJT05BTF9HQ0NfNF84XzFfQU5EX0hJR0hFUl9fXwotIyAgIGRlZmluZSBP
UFRJT05BTF9IQVNfQ09OU1RFWFBSX0lOSVRfTElTVCAxCi0jICAgZGVmaW5lIE9QVElPTkFMX0NP
TlNURVhQUl9JTklUX0xJU1QgY29uc3RleHByCi0jIGVsc2UKLSMgICBkZWZpbmUgT1BUSU9OQUxf
SEFTX0NPTlNURVhQUl9JTklUX0xJU1QgMAotIyAgIGRlZmluZSBPUFRJT05BTF9DT05TVEVYUFJf
SU5JVF9MSVNUCi0jIGVuZGlmCi0KLSMgLy8gSW4gQysrMTEgY29uc3RleHByIGltcGxpZXMgY29u
c3QsIHNvIHdlIG5lZWQgdG8gbWFrZSBub24tY29uc3QgbWVtYmVycyBhbHNvIG5vbi1jb25zdGV4
cHIKLSMgaWYgKGRlZmluZWQgX19jcGx1c3BsdXMpICYmIChfX2NwbHVzcGx1cyA9PSAyMDExMDNM
KQotIyAgIGRlZmluZSBPUFRJT05BTF9NVVRBQkxFX0NPTlNURVhQUgotIyBlbHNlCi0jICAgZGVm
aW5lIE9QVElPTkFMX01VVEFCTEVfQ09OU1RFWFBSIGNvbnN0ZXhwcgotIyBlbmRpZgotCi0jaWYg
Q09NUElMRVJfU1VQUE9SVFMoRVhDRVBUSU9OUykKLSNkZWZpbmUgX19USFJPV19FWENFUFRJT04o
X19leGNlcHRpb24pIHRocm93IF9fZXhjZXB0aW9uOwotI2RlZmluZSBfX05PRVhDRVBUIG5vZXhj
ZXB0Ci0jZGVmaW5lIF9fTk9FWENFUFRfKF9fZXhjZXB0aW9uKSBub2V4Y2VwdChfX2V4Y2VwdGlv
bikKLSNlbHNlCi0jZGVmaW5lIF9fVEhST1dfRVhDRVBUSU9OKF9fZXhjZXB0aW9uKSBkbyB7ICh2
b2lkKV9fZXhjZXB0aW9uOyBDUkFTSCgpOyB9IHdoaWxlICgwKTsKLSNkZWZpbmUgX19OT0VYQ0VQ
VAotI2RlZmluZSBfX05PRVhDRVBUXyguLi4pCi0jZW5kaWYKKyNpbmNsdWRlIDxvcHRpb25hbD4K
IAogbmFtZXNwYWNlIFdURiB7Ci1uYW1lc3BhY2UgZGV0YWlsXyB7Ci0KLS8vIE5PVEU6IEFsbCBv
dXIgdGFyZ2V0IGNvbXBpbGVycyBzdXBwb3J0IGlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGUuCi0v
LyAvLyBCRUdJTiB3b3JrYXJvdW5kIGZvciBtaXNzaW5nIGlzX3RyaXZpYWxseV9kZXN0cnVjdGli
bGUKLS8vICMgaWYgZGVmaW5lZCBUUjJfT1BUSU9OQUxfR0NDXzRfOF9BTkRfSElHSEVSX19fCi0v
LyAgICAgLy8gbGVhdmUgaXQ6IGl0IGlzIGFscmVhZHkgdGhlcmUKLS8vICMgZWxpZiBkZWZpbmVk
IFRSMl9PUFRJT05BTF9DTEFOR18zXzRfMl9BTkRfSElHSEVSXwotLy8gICAgIC8vIGxlYXZlIGl0
OiBpdCBpcyBhbHJlYWR5IHRoZXJlCi0vLyAjIGVsaWYgZGVmaW5lZCBUUjJfT1BUSU9OQUxfTVNW
Q18yMDE1X0FORF9ISUdIRVJfX18KLS8vICAgICAvLyBsZWF2ZSBpdDogaXQgaXMgYWxyZWFkeSB0
aGVyZQotLy8gIyBlbGlmIGRlZmluZWQgVFIyX09QVElPTkFMX0RJU0FCTEVfRU1VTEFUSU9OX09G
X1RZUEVfVFJBSVRTCi0vLyAgICAgLy8gbGVhdmUgaXQ6IHRoZSB1c2VyIGRvZXNuJ3Qgd2FudCBp
dAotLy8gIyBlbHNlCi0vLyAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0vLyAgICAgdXNpbmcg
aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZSA9IHN0ZDo6aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjxU
PjsKLS8vICMgZW5kaWYKLS8vIC8vIEVORCB3b3JrYXJvdW5kIGZvciBtaXNzaW5nIGlzX3RyaXZp
YWxseV9kZXN0cnVjdGlibGUKLQotI2lmIENPTVBJTEVSX1NVUFBPUlRTKEVYQ0VQVElPTlMpCi0j
IGlmIGRlZmluZWQoVFIyX09QVElPTkFMX0dDQ180XzdfQU5EX0hJR0hFUl9fXykgfHwgZGVmaW5l
ZChUUjJfT1BUSU9OQUxfQ0xBTkdfM180XzJfQU5EX0hJR0hFUl8pIHx8IGRlZmluZWQoVFIyX09Q
VElPTkFMX01TVkNfMjAxNV9BTkRfSElHSEVSX19fKQotICAgIC8vIGxlYXZlIGl0OyBvdXIgbWV0
YWZ1bmN0aW9ucyBhcmUgYWxyZWFkeSBkZWZpbmVkLgotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBU
PgotICAgIHVzaW5nIGlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlID0gc3RkOjppc19ub3Ro
cm93X21vdmVfY29uc3RydWN0aWJsZTxUPjsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAg
ICB1c2luZyBpc19ub3Rocm93X21vdmVfYXNzaWduYWJsZSA9IHN0ZDo6aXNfbm90aHJvd19tb3Zl
X2Fzc2lnbmFibGU8VD47Ci0jIGVsaWYgZGVmaW5lZCBUUjJfT1BUSU9OQUxfRElTQUJMRV9FTVVM
QVRJT05fT0ZfVFlQRV9UUkFJVFMKLSAgICAvLyBsZWF2ZSBpdDogdGhlIHVzZXIgZG9lc24ndCB3
YW50IGl0Ci0jIGVsc2UKLQotCi0vLyB3b3JrYXJvdW5kIGZvciBtaXNzaW5nIHRyYWl0cyBpbiBH
Q0MgYW5kIENMQU5HCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBpc19ub3Rocm93X21vdmVf
Y29uc3RydWN0aWJsZQotewotICBjb25zdGV4cHIgc3RhdGljIGJvb2wgdmFsdWUgPSBzdGQ6Omlz
X25vdGhyb3dfY29uc3RydWN0aWJsZTxULCBUJiY+Ojp2YWx1ZTsKLX07Ci0KLQotdGVtcGxhdGUg
PGNsYXNzIFQsIGNsYXNzIFU+Ci1zdHJ1Y3QgaXNfYXNzaWduYWJsZQotewotICB0ZW1wbGF0ZSA8
Y2xhc3MgWCwgY2xhc3MgWT4KLSAgY29uc3RleHByIHN0YXRpYyBib29sIGhhc19hc3NpZ24oLi4u
KSB7IHJldHVybiBmYWxzZTsgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBYLCBjbGFzcyBZLCBzaXpl
X3QgUyA9IHNpemVvZigoc3RkOjpkZWNsdmFsPFg+KCkgPSBzdGQ6OmRlY2x2YWw8WT4oKSwgdHJ1
ZSkpID4KLSAgLy8gdGhlIGNvbW1hIG9wZXJhdG9yIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIGNhc2Vz
IHdoZXJlIG9wZXJhdG9yPSByZXR1cm5zIHZvaWQKLSAgY29uc3RleHByIHN0YXRpYyBib29sIGhh
c19hc3NpZ24oYm9vbCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gIGNvbnN0ZXhwciBzdGF0aWMgYm9v
bCB2YWx1ZSA9IGhhc19hc3NpZ248VCwgVT4odHJ1ZSk7Ci19OwotCi0KLXRlbXBsYXRlIDxjbGFz
cyBUPgotc3RydWN0IGlzX25vdGhyb3dfbW92ZV9hc3NpZ25hYmxlCi17Ci0gIHRlbXBsYXRlIDxj
bGFzcyBYLCBib29sIGhhc19hbnlfbW92ZV9hc3NpZ24+Ci0gIHN0cnVjdCBoYXNfbm90aHJvd19t
b3ZlX2Fzc2lnbiB7Ci0gICAgY29uc3RleHByIHN0YXRpYyBib29sIHZhbHVlID0gZmFsc2U7Ci0g
IH07Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIFg+Ci0gIHN0cnVjdCBoYXNfbm90aHJvd19tb3ZlX2Fz
c2lnbjxYLCB0cnVlPiB7Ci0gICAgY29uc3RleHByIHN0YXRpYyBib29sIHZhbHVlID0gX19OT0VY
Q0VQVF8oIHN0ZDo6ZGVjbHZhbDxYJj4oKSA9IHN0ZDo6ZGVjbHZhbDxYJiY+KCkgKTsKLSAgfTsK
LQotICBjb25zdGV4cHIgc3RhdGljIGJvb2wgdmFsdWUgPSBoYXNfbm90aHJvd19tb3ZlX2Fzc2ln
bjxULCBpc19hc3NpZ25hYmxlPFQmLCBUJiY+Ojp2YWx1ZT46OnZhbHVlOwotfTsKLS8vIGVuZCB3
b3JrYXJvdW5kCi0KLQotIyBlbmRpZgotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIGRldGFpbF8K
LQotLy8gMjAuNS40LCBPcHRpb25hbCBmb3Igb2JqZWN0IHR5cGVzCi10ZW1wbGF0ZSA8Y2xhc3Mg
VD4gY2xhc3MgT3B0aW9uYWw7Ci0KLS8vIDIwLjUuNSwgT3B0aW9uYWwgZm9yIGx2YWx1ZSByZWZl
cmVuY2UgdHlwZXMKLXRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBPcHRpb25hbDxUJj47Ci0KLW5h
bWVzcGFjZSBkZXRhaWxfIHsKLQotLy8gd29ya2Fyb3VuZDogc3RkIHV0aWxpdHkgZnVuY3Rpb25z
IGFyZW4ndCBjb25zdGV4cHIgeWV0Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIFQmJiBj
b25zdGV4cHJfZm9yd2FyZCh0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8VD46OnR5cGUm
IHQpIF9fTk9FWENFUFQKLXsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PFQmJj4odCk7Ci19Ci0KLXRl
bXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgVCYmIGNvbnN0ZXhwcl9mb3J3YXJkKHR5cGVuYW1l
IHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxUPjo6dHlwZSYmIHQpIF9fTk9FWENFUFQKLXsKLSAgICBz
dGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2x2YWx1ZV9yZWZlcmVuY2U8VD46OnZhbHVlLCAiISEiKTsK
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCYmPih0KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+
IGNvbnN0ZXhwciB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8VD46OnR5cGUmJiBjb25z
dGV4cHJfbW92ZShUJiYgdCkgX19OT0VYQ0VQVAotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDx0
eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8VD46OnR5cGUmJj4odCk7Ci19Ci0KLQotLy8g
c3RhdGljX2FkZHJlc3NvZjogYSBjb25zdGV4cHIgdmVyc2lvbiBvZiBhZGRyZXNzb2YKLXRlbXBs
YXRlIDx0eXBlbmFtZSBUPgotc3RydWN0IGhhc19vdmVybG9hZGVkX2FkZHJlc3NvZgotewotICB0
ZW1wbGF0ZSA8Y2xhc3MgWD4KLSAgY29uc3RleHByIHN0YXRpYyBib29sIGhhc19vdmVybG9hZCgu
Li4pIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIFgsIHNpemVfdCBTID0g
c2l6ZW9mKHN0ZDo6ZGVjbHZhbDxYJj4oKS5vcGVyYXRvciYoKSkgPgotICBjb25zdGV4cHIgc3Rh
dGljIGJvb2wgaGFzX292ZXJsb2FkKGJvb2wpIHsgcmV0dXJuIHRydWU7IH0KLQotICBjb25zdGV4
cHIgc3RhdGljIGJvb2wgdmFsdWUgPSBoYXNfb3ZlcmxvYWQ8VD4odHJ1ZSk7Ci19OwotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgVFIyX09QVElPTkFMX1JFUVVJUkVTKCFoYXNfb3ZlcmxvYWRlZF9h
ZGRyZXNzb2Y8VD4pPgotY29uc3RleHByIFQqIHN0YXRpY19hZGRyZXNzb2YoVCYgcmVmKQotewot
ICByZXR1cm4gJnJlZjsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIFRSMl9PUFRJT05BTF9S
RVFVSVJFUyhoYXNfb3ZlcmxvYWRlZF9hZGRyZXNzb2Y8VD4pPgotVCogc3RhdGljX2FkZHJlc3Nv
ZihUJiByZWYpCi17Ci0gIHJldHVybiBzdGQ6OmFkZHJlc3NvZihyZWYpOwotfQotCi0KLS8vIHRo
ZSBjYWxsIHRvIGNvbnZlcnQ8QT4oYikgaGFzIHJldHVybiB0eXBlIEEgYW5kIGNvbnZlcnRzIGIg
dG8gdHlwZSBBIGlmZiBiIGRlY2x0eXBlKGIpIGlzIGltcGxpY2l0bHkgY29udmVydGlibGUgdG8g
QQotdGVtcGxhdGUgPGNsYXNzIFU+Ci1jb25zdGV4cHIgVSBjb252ZXJ0KFUgdikgeyByZXR1cm4g
djsgfQotCi19IC8vIG5hbWVzcGFjZSBkZXRhaWwKLQotCi1jb25zdGV4cHIgc3RydWN0IHRyaXZp
YWxfaW5pdF90e30gdHJpdmlhbF9pbml0e307Ci0KLQotLy8gMjAuNS43LCBEaXNlbmdhZ2VkIHN0
YXRlIGluZGljYXRvcgotc3RydWN0IG51bGxvcHRfdAotewotICBzdHJ1Y3QgaW5pdHt9OwotICBj
b25zdGV4cHIgZXhwbGljaXQgbnVsbG9wdF90KGluaXQpe30KLX07Ci1jb25zdGV4cHIgbnVsbG9w
dF90IG51bGxvcHR7bnVsbG9wdF90Ojppbml0KCl9OwotCi0KLXRlbXBsYXRlIDxjbGFzcyBUPgot
dW5pb24gc3RvcmFnZV90Ci17Ci0gIHVuc2lnbmVkIGNoYXIgZHVtbXlfOwotICBUIHZhbHVlXzsK
LQotICBjb25zdGV4cHIgc3RvcmFnZV90KCB0cml2aWFsX2luaXRfdCApIF9fTk9FWENFUFQgOiBk
dW1teV8oKSB7fTsKLQotICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gQXJncz4KLSAgY29uc3RleHByIHN0
b3JhZ2VfdCggQXJncyYmLi4uIGFyZ3MgKSA6IHZhbHVlXyhkZXRhaWxfOjpjb25zdGV4cHJfZm9y
d2FyZDxBcmdzPihhcmdzKS4uLikge30KLQotICB+c3RvcmFnZV90KCl7fQotfTsKLQotCi10ZW1w
bGF0ZSA8Y2xhc3MgVD4KLXVuaW9uIGNvbnN0ZXhwcl9zdG9yYWdlX3QKLXsKLSAgICB1bnNpZ25l
ZCBjaGFyIGR1bW15XzsKLSAgICBUIHZhbHVlXzsKLQotICAgIGNvbnN0ZXhwciBjb25zdGV4cHJf
c3RvcmFnZV90KCB0cml2aWFsX2luaXRfdCApIF9fTk9FWENFUFQgOiBkdW1teV8oKSB7fTsKLQot
ICAgIHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPgotICAgIGNvbnN0ZXhwciBjb25zdGV4cHJfc3Rv
cmFnZV90KCBBcmdzJiYuLi4gYXJncyApIDogdmFsdWVfKGRldGFpbF86OmNvbnN0ZXhwcl9mb3J3
YXJkPEFyZ3M+KGFyZ3MpLi4uKSB7fQotCi0gICAgfmNvbnN0ZXhwcl9zdG9yYWdlX3QoKSA9IGRl
ZmF1bHQ7Ci19OwotCi0KLXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IE9wdGlvbmFsX2Jhc2UK
LXsKLSAgICBib29sIGluaXRfOwotICAgIHN0b3JhZ2VfdDxUPiBzdG9yYWdlXzsKLQotICAgIGNv
bnN0ZXhwciBPcHRpb25hbF9iYXNlKCkgX19OT0VYQ0VQVCA6IGluaXRfKGZhbHNlKSwgc3RvcmFn
ZV8odHJpdmlhbF9pbml0KSB7fTsKLQotICAgIGV4cGxpY2l0IGNvbnN0ZXhwciBPcHRpb25hbF9i
YXNlKGNvbnN0IFQmIHYpIDogaW5pdF8odHJ1ZSksIHN0b3JhZ2VfKHYpIHt9Ci0KLSAgICBleHBs
aWNpdCBjb25zdGV4cHIgT3B0aW9uYWxfYmFzZShUJiYgdikgOiBpbml0Xyh0cnVlKSwgc3RvcmFn
ZV8oZGV0YWlsXzo6Y29uc3RleHByX21vdmUodikpIHt9Ci0KLSAgICB0ZW1wbGF0ZSA8Y2xhc3Mu
Li4gQXJncz4gZXhwbGljaXQgT3B0aW9uYWxfYmFzZShzdGQ6OmluX3BsYWNlX3QsIEFyZ3MmJi4u
LiBhcmdzKQotICAgICAgICA6IGluaXRfKHRydWUpLCBzdG9yYWdlXyhkZXRhaWxfOjpjb25zdGV4
cHJfZm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KLQotICAgIHRlbXBsYXRlIDxjbGFzcyBVLCBj
bGFzcy4uLiBBcmdzLCBUUjJfT1BUSU9OQUxfUkVRVUlSRVMoc3RkOjppc19jb25zdHJ1Y3RpYmxl
PFQsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVPj4pPgotICAgIGV4cGxpY2l0IE9wdGlvbmFsX2Jh
c2Uoc3RkOjppbl9wbGFjZV90LCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VT4gaWwsIEFyZ3MmJi4u
LiBhcmdzKQotICAgICAgICA6IGluaXRfKHRydWUpLCBzdG9yYWdlXyhpbCwgc3RkOjpmb3J3YXJk
PEFyZ3M+KGFyZ3MpLi4uKSB7fQotCi0gICAgfk9wdGlvbmFsX2Jhc2UoKSB7IGlmIChpbml0Xykg
c3RvcmFnZV8udmFsdWVfLlQ6On5UKCk7IH0KLX07Ci0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1z
dHJ1Y3QgY29uc3RleHByX09wdGlvbmFsX2Jhc2UKLXsKLSAgICBib29sIGluaXRfOwotICAgIGNv
bnN0ZXhwcl9zdG9yYWdlX3Q8VD4gc3RvcmFnZV87Ci0KLSAgICBjb25zdGV4cHIgY29uc3RleHBy
X09wdGlvbmFsX2Jhc2UoKSBfX05PRVhDRVBUIDogaW5pdF8oZmFsc2UpLCBzdG9yYWdlXyh0cml2
aWFsX2luaXQpIHt9OwotCi0gICAgZXhwbGljaXQgY29uc3RleHByIGNvbnN0ZXhwcl9PcHRpb25h
bF9iYXNlKGNvbnN0IFQmIHYpIDogaW5pdF8odHJ1ZSksIHN0b3JhZ2VfKHYpIHt9Ci0KLSAgICBl
eHBsaWNpdCBjb25zdGV4cHIgY29uc3RleHByX09wdGlvbmFsX2Jhc2UoVCYmIHYpIDogaW5pdF8o
dHJ1ZSksIHN0b3JhZ2VfKGRldGFpbF86OmNvbnN0ZXhwcl9tb3ZlKHYpKSB7fQotCi0gICAgdGVt
cGxhdGUgPGNsYXNzLi4uIEFyZ3M+IGV4cGxpY2l0IGNvbnN0ZXhwciBjb25zdGV4cHJfT3B0aW9u
YWxfYmFzZShzdGQ6OmluX3BsYWNlX3QsIEFyZ3MmJi4uLiBhcmdzKQotICAgICAgOiBpbml0Xyh0
cnVlKSwgc3RvcmFnZV8oZGV0YWlsXzo6Y29uc3RleHByX2ZvcndhcmQ8QXJncz4oYXJncykuLi4p
IHt9Ci0KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVSwgY2xhc3MuLi4gQXJncywgVFIyX09QVElPTkFM
X1JFUVVJUkVTKHN0ZDo6aXNfY29uc3RydWN0aWJsZTxULCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8
VT4+KT4KLSAgICBPUFRJT05BTF9DT05TVEVYUFJfSU5JVF9MSVNUIGV4cGxpY2l0IGNvbnN0ZXhw
cl9PcHRpb25hbF9iYXNlKHN0ZDo6aW5fcGxhY2VfdCwgc3RkOjppbml0aWFsaXplcl9saXN0PFU+
IGlsLCBBcmdzJiYuLi4gYXJncykKLSAgICAgIDogaW5pdF8odHJ1ZSksIHN0b3JhZ2VfKGlsLCBz
dGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pIHt9Ci0KLSAgICB+Y29uc3RleHByX09wdGlvbmFs
X2Jhc2UoKSA9IGRlZmF1bHQ7Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXVzaW5nIE9wdGlv
bmFsQmFzZSA9IHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8Ci0gICAgc3RkOjppc190cml2aWFs
bHlfZGVzdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlm
IHBvc3NpYmxlCi0gICAgY29uc3RleHByX09wdGlvbmFsX2Jhc2U8dHlwZW5hbWUgc3RkOjpyZW1v
dmVfY29uc3Q8VD46OnR5cGU+LCAvLyB1c2UgYmFzZSB3aXRoIHRyaXZpYWwgZGVzdHJ1Y3Rvcgot
ICAgIE9wdGlvbmFsX2Jhc2U8dHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8VD46OnR5cGU+Ci0+
Ojp0eXBlOwotCi0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1jbGFzcyBPcHRpb25hbCA6IHByaXZh
dGUgT3B0aW9uYWxCYXNlPFQ+Ci17Ci0gIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICBzdGF0
aWNfYXNzZXJ0KCAhc3RkOjppc19zYW1lPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VD46OnR5cGUsIG51
bGxvcHRfdD46OnZhbHVlLCAiYmFkIFQiICk7Ci0gIHN0YXRpY19hc3NlcnQoICFzdGQ6OmlzX3Nh
bWU8dHlwZW5hbWUgc3RkOjpkZWNheTxUPjo6dHlwZSwgc3RkOjppbl9wbGFjZV90Pjo6dmFsdWUs
ICJiYWQgVCIgKTsKLQotCi0gIGNvbnN0ZXhwciBib29sIGluaXRpYWxpemVkKCkgY29uc3QgX19O
T0VYQ0VQVCB7IHJldHVybiBPcHRpb25hbEJhc2U8VD46OmluaXRfOyB9Ci0gIHR5cGVuYW1lIHN0
ZDo6cmVtb3ZlX2NvbnN0PFQ+Ojp0eXBlKiBkYXRhcHRyKCkgeyAgcmV0dXJuIHN0ZDo6YWRkcmVz
c29mKE9wdGlvbmFsQmFzZTxUPjo6c3RvcmFnZV8udmFsdWVfKTsgfQotICBjb25zdGV4cHIgY29u
c3QgVCogZGF0YXB0cigpIGNvbnN0IHsgcmV0dXJuIGRldGFpbF86OnN0YXRpY19hZGRyZXNzb2Yo
T3B0aW9uYWxCYXNlPFQ+OjpzdG9yYWdlXy52YWx1ZV8pOyB9Ci0KLSMgaWYgT1BUSU9OQUxfSEFT
X1RISVNfUlZBTFVFX1JFRlMgPT0gMQotICBjb25zdGV4cHIgY29uc3QgVCYgY29udGFpbmVkX3Zh
bCgpIGNvbnN0JiB7IHJldHVybiBPcHRpb25hbEJhc2U8VD46OnN0b3JhZ2VfLnZhbHVlXzsgfQot
ICBPUFRJT05BTF9NVVRBQkxFX0NPTlNURVhQUiBUJiYgY29udGFpbmVkX3ZhbCgpICYmIHsgcmV0
dXJuIHN0ZDo6bW92ZShPcHRpb25hbEJhc2U8VD46OnN0b3JhZ2VfLnZhbHVlXyk7IH0KLSAgT1BU
SU9OQUxfTVVUQUJMRV9DT05TVEVYUFIgVCYgY29udGFpbmVkX3ZhbCgpICYgeyByZXR1cm4gT3B0
aW9uYWxCYXNlPFQ+OjpzdG9yYWdlXy52YWx1ZV87IH0KLSMgZWxzZQotICBjb25zdGV4cHIgY29u
c3QgVCYgY29udGFpbmVkX3ZhbCgpIGNvbnN0IHsgcmV0dXJuIE9wdGlvbmFsQmFzZTxUPjo6c3Rv
cmFnZV8udmFsdWVfOyB9Ci0gIFQmIGNvbnRhaW5lZF92YWwoKSB7IHJldHVybiBPcHRpb25hbEJh
c2U8VD46OnN0b3JhZ2VfLnZhbHVlXzsgfQotIyBlbmRpZgotCi0gIHZvaWQgY2xlYXIoKSBfX05P
RVhDRVBUIHsKLSAgICBpZiAoaW5pdGlhbGl6ZWQoKSkgZGF0YXB0cigpLT5UOjp+VCgpOwotICAg
IE9wdGlvbmFsQmFzZTxUPjo6aW5pdF8gPSBmYWxzZTsKLSAgfQotCi0gIHRlbXBsYXRlIDxjbGFz
cy4uLiBBcmdzPgotICB2b2lkIGluaXRpYWxpemUoQXJncyYmLi4uIGFyZ3MpIF9fTk9FWENFUFRf
KF9fTk9FWENFUFRfKFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSkpCi0gIHsKLSAgICBB
U1NFUlQoIU9wdGlvbmFsQmFzZTxUPjo6aW5pdF8pOwotICAgIDo6bmV3IChzdGF0aWNfY2FzdDx2
b2lkKj4oZGF0YXB0cigpKSkgVChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwotICAgIE9w
dGlvbmFsQmFzZTxUPjo6aW5pdF8gPSB0cnVlOwotICB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIFUs
IGNsYXNzLi4uIEFyZ3M+Ci0gIHZvaWQgaW5pdGlhbGl6ZShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8
VT4gaWwsIEFyZ3MmJi4uLiBhcmdzKSBfX05PRVhDRVBUXyhfX05PRVhDRVBUXyhUKGlsLCBzdGQ6
OmZvcndhcmQ8QXJncz4oYXJncykuLi4pKSkKLSAgewotICAgIEFTU0VSVCghT3B0aW9uYWxCYXNl
PFQ+Ojppbml0Xyk7Ci0gICAgOjpuZXcgKHN0YXRpY19jYXN0PHZvaWQqPihkYXRhcHRyKCkpKSBU
KGlsLCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwotICAgIE9wdGlvbmFsQmFzZTxUPjo6
aW5pdF8gPSB0cnVlOwotICB9Ci0KLXB1YmxpYzoKLSAgdHlwZWRlZiBUIHZhbHVlX3R5cGU7Ci0K
LSAgLy8gMjAuNS41LjEsIGNvbnN0cnVjdG9ycwotICBjb25zdGV4cHIgT3B0aW9uYWwoKSBfX05P
RVhDRVBUIDogT3B0aW9uYWxCYXNlPFQ+KCkgIHt9OwotICBjb25zdGV4cHIgT3B0aW9uYWwobnVs
bG9wdF90KSBfX05PRVhDRVBUIDogT3B0aW9uYWxCYXNlPFQ+KCkge307Ci0KLSAgT3B0aW9uYWwo
Y29uc3QgT3B0aW9uYWwmIHJocykKLSAgOiBPcHRpb25hbEJhc2U8VD4oKQotICB7Ci0gICAgaWYg
KHJocy5pbml0aWFsaXplZCgpKSB7Ci0gICAgICAgIDo6bmV3IChzdGF0aWNfY2FzdDx2b2lkKj4o
ZGF0YXB0cigpKSkgVCgqcmhzKTsKLSAgICAgICAgT3B0aW9uYWxCYXNlPFQ+Ojppbml0XyA9IHRy
dWU7Ci0gICAgfQotICB9Ci0KLSAgT3B0aW9uYWwoT3B0aW9uYWwmJiByaHMpIF9fTk9FWENFUFRf
KGRldGFpbF86OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZSkKLSAgOiBP
cHRpb25hbEJhc2U8VD4oKQotICB7Ci0gICAgaWYgKHJocy5pbml0aWFsaXplZCgpKSB7Ci0gICAg
ICAgIDo6bmV3IChzdGF0aWNfY2FzdDx2b2lkKj4oZGF0YXB0cigpKSkgVChzdGQ6Om1vdmUoKnJo
cykpOwotICAgICAgICBPcHRpb25hbEJhc2U8VD46OmluaXRfID0gdHJ1ZTsKLSAgICAgICAgcmhz
LmNsZWFyKCk7Ci0gICAgfQotICB9Ci0KLSAgY29uc3RleHByIE9wdGlvbmFsKGNvbnN0IFQmIHYp
IDogT3B0aW9uYWxCYXNlPFQ+KHYpIHt9Ci0KLSAgY29uc3RleHByIE9wdGlvbmFsKFQmJiB2KSA6
IE9wdGlvbmFsQmFzZTxUPihkZXRhaWxfOjpjb25zdGV4cHJfbW92ZSh2KSkge30KLQotICB0ZW1w
bGF0ZSA8Y2xhc3MuLi4gQXJncz4KLSAgZXhwbGljaXQgY29uc3RleHByIE9wdGlvbmFsKHN0ZDo6
aW5fcGxhY2VfdCwgQXJncyYmLi4uIGFyZ3MpCi0gICAgICA6IE9wdGlvbmFsQmFzZTxUPihzdGQ6
OmluX3BsYWNlX3R7fSwgZGV0YWlsXzo6Y29uc3RleHByX2ZvcndhcmQ8QXJncz4oYXJncykuLi4p
IHt9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIFUsIGNsYXNzLi4uIEFyZ3MsIFRSMl9PUFRJT05BTF9S
RVFVSVJFUyhzdGQ6OmlzX2NvbnN0cnVjdGlibGU8VCwgc3RkOjppbml0aWFsaXplcl9saXN0PFU+
Pik+Ci0gIE9QVElPTkFMX0NPTlNURVhQUl9JTklUX0xJU1QgZXhwbGljaXQgT3B0aW9uYWwoc3Rk
Ojppbl9wbGFjZV90LCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VT4gaWwsIEFyZ3MmJi4uLiBhcmdz
KQotICAgICAgOiBPcHRpb25hbEJhc2U8VD4oc3RkOjppbl9wbGFjZV90e30sIGlsLCBkZXRhaWxf
Ojpjb25zdGV4cHJfZm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KLQotICAvLyAyMC41LjQuMiwg
RGVzdHJ1Y3RvcgotICB+T3B0aW9uYWwoKSA9IGRlZmF1bHQ7Ci0KLSAgLy8gMjAuNS40LjMsIGFz
c2lnbm1lbnQKLSAgT3B0aW9uYWwmIG9wZXJhdG9yPShudWxsb3B0X3QpIF9fTk9FWENFUFQKLSAg
ewotICAgIGNsZWFyKCk7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgT3B0aW9uYWwmIG9w
ZXJhdG9yPShjb25zdCBPcHRpb25hbCYgcmhzKQotICB7Ci0gICAgaWYgICAgICAoaW5pdGlhbGl6
ZWQoKSA9PSB0cnVlICAmJiByaHMuaW5pdGlhbGl6ZWQoKSA9PSBmYWxzZSkgY2xlYXIoKTsKLSAg
ICBlbHNlIGlmIChpbml0aWFsaXplZCgpID09IGZhbHNlICYmIHJocy5pbml0aWFsaXplZCgpID09
IHRydWUpICBpbml0aWFsaXplKCpyaHMpOwotICAgIGVsc2UgaWYgKGluaXRpYWxpemVkKCkgPT0g
dHJ1ZSAgJiYgcmhzLmluaXRpYWxpemVkKCkgPT0gdHJ1ZSkgIGNvbnRhaW5lZF92YWwoKSA9ICpy
aHM7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgT3B0aW9uYWwmIG9wZXJhdG9yPShPcHRp
b25hbCYmIHJocykKLSAgX19OT0VYQ0VQVF8oZGV0YWlsXzo6aXNfbm90aHJvd19tb3ZlX2Fzc2ln
bmFibGU8VD46OnZhbHVlICYmIGRldGFpbF86OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxl
PFQ+Ojp2YWx1ZSkKLSAgewotICAgIGlmICAgICAgKGluaXRpYWxpemVkKCkgPT0gdHJ1ZSAgJiYg
cmhzLmluaXRpYWxpemVkKCkgPT0gZmFsc2UpIGNsZWFyKCk7Ci0gICAgZWxzZSBpZiAoaW5pdGlh
bGl6ZWQoKSA9PSBmYWxzZSAmJiByaHMuaW5pdGlhbGl6ZWQoKSA9PSB0cnVlKSAgeyBpbml0aWFs
aXplKHN0ZDo6bW92ZSgqcmhzKSk7IHJocy5jbGVhcigpOyB9Ci0gICAgZWxzZSBpZiAoaW5pdGlh
bGl6ZWQoKSA9PSB0cnVlICAmJiByaHMuaW5pdGlhbGl6ZWQoKSA9PSB0cnVlKSAgeyBjb250YWlu
ZWRfdmFsKCkgPSBzdGQ6Om1vdmUoKnJocyk7IHJocy5jbGVhcigpOyB9Ci0gICAgcmV0dXJuICp0
aGlzOwotICB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIFU+Ci0gIGF1dG8gb3BlcmF0b3I9KFUmJiB2
KQotICAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZgotICA8Ci0gICAgc3RkOjppc19zYW1lPHR5
cGVuYW1lIHN0ZDo6ZGVjYXk8VT46OnR5cGUsIFQ+Ojp2YWx1ZSwKLSAgICBPcHRpb25hbCYKLSAg
Pjo6dHlwZQotICB7Ci0gICAgaWYgKGluaXRpYWxpemVkKCkpIHsgY29udGFpbmVkX3ZhbCgpID0g
c3RkOjpmb3J3YXJkPFU+KHYpOyB9Ci0gICAgZWxzZSAgICAgICAgICAgICAgIHsgaW5pdGlhbGl6
ZShzdGQ6OmZvcndhcmQ8VT4odikpOyAgfQotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0KLSAg
dGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+Ci0gIHZvaWQgZW1wbGFjZShBcmdzJiYuLi4gYXJncykK
LSAgewotICAgIGNsZWFyKCk7Ci0gICAgaW5pdGlhbGl6ZShzdGQ6OmZvcndhcmQ8QXJncz4oYXJn
cykuLi4pOwotICB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIFUsIGNsYXNzLi4uIEFyZ3M+Ci0gIHZv
aWQgZW1wbGFjZShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VT4gaWwsIEFyZ3MmJi4uLiBhcmdzKQot
ICB7Ci0gICAgY2xlYXIoKTsKLSAgICBpbml0aWFsaXplPFUsIEFyZ3MuLi4+KGlsLCBzdGQ6OmZv
cndhcmQ8QXJncz4oYXJncykuLi4pOwotICB9Ci0KLSAgLy8gMjAuNS40LjQsIFN3YXAKLSAgdm9p
ZCBzd2FwKE9wdGlvbmFsPFQ+JiByaHMpIF9fTk9FWENFUFRfKGRldGFpbF86OmlzX25vdGhyb3df
bW92ZV9jb25zdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZSAmJiBfX05PRVhDRVBUXyhzd2FwKHN0ZDo6ZGVj
bHZhbDxUJj4oKSwgc3RkOjpkZWNsdmFsPFQmPigpKSkpCi0gIHsKLSAgICBpZiAgICAgIChpbml0
aWFsaXplZCgpID09IHRydWUgICYmIHJocy5pbml0aWFsaXplZCgpID09IGZhbHNlKSB7IHJocy5p
bml0aWFsaXplKHN0ZDo6bW92ZSgqKnRoaXMpKTsgY2xlYXIoKTsgfQotICAgIGVsc2UgaWYgKGlu
aXRpYWxpemVkKCkgPT0gZmFsc2UgJiYgcmhzLmluaXRpYWxpemVkKCkgPT0gdHJ1ZSkgIHsgaW5p
dGlhbGl6ZShzdGQ6Om1vdmUoKnJocykpOyByaHMuY2xlYXIoKTsgfQotICAgIGVsc2UgaWYgKGlu
aXRpYWxpemVkKCkgPT0gdHJ1ZSAgJiYgcmhzLmluaXRpYWxpemVkKCkgPT0gdHJ1ZSkgIHsgdXNp
bmcgc3RkOjpzd2FwOyBzd2FwKCoqdGhpcywgKnJocyk7IH0KLSAgfQotCi0gIC8vIDIwLjUuNC41
LCBPYnNlcnZlcnMKLQotICBleHBsaWNpdCBjb25zdGV4cHIgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
IF9fTk9FWENFUFQgeyByZXR1cm4gaW5pdGlhbGl6ZWQoKTsgfQotICBjb25zdGV4cHIgYm9vbCBo
YXNWYWx1ZSgpIGNvbnN0IF9fTk9FWENFUFQgeyByZXR1cm4gaW5pdGlhbGl6ZWQoKTsgfQotCi0g
IGNvbnN0ZXhwciBUIGNvbnN0KiBvcGVyYXRvciAtPigpIGNvbnN0IHsKLSAgICBSRUxFQVNFX0FT
U0VSVF9VTkRFUl9DT05TVEVYUFJfQ09OVEVYVChpbml0aWFsaXplZCgpKTsKLSAgICByZXR1cm4g
ZGF0YXB0cigpOwotICB9Ci0KLSAgT1BUSU9OQUxfTVVUQUJMRV9DT05TVEVYUFIgVCogb3BlcmF0
b3IgLT4oKSB7Ci0gICAgUkVMRUFTRV9BU1NFUlRfVU5ERVJfQ09OU1RFWFBSX0NPTlRFWFQoaW5p
dGlhbGl6ZWQoKSk7Ci0gICAgcmV0dXJuIGRhdGFwdHIoKTsKLSAgfQotCi0gIGNvbnN0ZXhwciBU
IGNvbnN0JiBvcGVyYXRvciAqKCkgY29uc3QmIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9VTkRFUl9D
T05TVEVYUFJfQ09OVEVYVChpbml0aWFsaXplZCgpKTsKLSAgICByZXR1cm4gY29udGFpbmVkX3Zh
bCgpOwotICB9Ci0KLSAgT1BUSU9OQUxfTVVUQUJMRV9DT05TVEVYUFIgVCYgb3BlcmF0b3IgKigp
ICYgewotICAgIFJFTEVBU0VfQVNTRVJUX1VOREVSX0NPTlNURVhQUl9DT05URVhUKGluaXRpYWxp
emVkKCkpOwotICAgIHJldHVybiBjb250YWluZWRfdmFsKCk7Ci0gIH0KLQotICBPUFRJT05BTF9N
VVRBQkxFX0NPTlNURVhQUiBUJiYgb3BlcmF0b3IgKigpICYmIHsKLSAgICBSRUxFQVNFX0FTU0VS
VF9VTkRFUl9DT05TVEVYUFJfQ09OVEVYVChpbml0aWFsaXplZCgpKTsKLSAgICByZXR1cm4gZGV0
YWlsXzo6Y29uc3RleHByX21vdmUoY29udGFpbmVkX3ZhbCgpKTsKLSAgfQotCi0gIGNvbnN0ZXhw
ciBUIGNvbnN0JiB2YWx1ZSgpIGNvbnN0JiB7Ci0gICAgUkVMRUFTRV9BU1NFUlRfVU5ERVJfQ09O
U1RFWFBSX0NPTlRFWFQoaW5pdGlhbGl6ZWQoKSk7Ci0gICAgcmV0dXJuIGNvbnRhaW5lZF92YWwo
KTsKLSAgfQotCi0gIE9QVElPTkFMX01VVEFCTEVfQ09OU1RFWFBSIFQmIHZhbHVlKCkgJiB7Ci0g
ICAgUkVMRUFTRV9BU1NFUlRfVU5ERVJfQ09OU1RFWFBSX0NPTlRFWFQoaW5pdGlhbGl6ZWQoKSk7
Ci0gICAgcmV0dXJuIGNvbnRhaW5lZF92YWwoKTsKLSAgfQotCi0gIE9QVElPTkFMX01VVEFCTEVf
Q09OU1RFWFBSIFQmJiB2YWx1ZSgpICYmIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9VTkRFUl9DT05T
VEVYUFJfQ09OVEVYVChpbml0aWFsaXplZCgpKTsKLSAgICByZXR1cm4gc3RkOjptb3ZlKGNvbnRh
aW5lZF92YWwoKSk7Ci0gIH0KLQotIyBpZiBPUFRJT05BTF9IQVNfVEhJU19SVkFMVUVfUkVGUyA9
PSAxCi0KLSAgdGVtcGxhdGUgPGNsYXNzIFY+Ci0gIGNvbnN0ZXhwciBUIHZhbHVlT3IoViYmIHYp
IGNvbnN0JgotICB7Ci0gICAgcmV0dXJuICp0aGlzID8gKip0aGlzIDogZGV0YWlsXzo6Y29udmVy
dDxUPihkZXRhaWxfOjpjb25zdGV4cHJfZm9yd2FyZDxWPih2KSk7Ci0gIH0KLQotICB0ZW1wbGF0
ZSA8Y2xhc3MgVj4KLSAgT1BUSU9OQUxfTVVUQUJMRV9DT05TVEVYUFIgVCB2YWx1ZU9yKFYmJiB2
KSAmJgotICB7Ci0gICAgcmV0dXJuICp0aGlzID8gZGV0YWlsXzo6Y29uc3RleHByX21vdmUoY29u
c3RfY2FzdDxPcHRpb25hbDxUPiY+KCp0aGlzKS5jb250YWluZWRfdmFsKCkpIDogZGV0YWlsXzo6
Y29udmVydDxUPihkZXRhaWxfOjpjb25zdGV4cHJfZm9yd2FyZDxWPih2KSk7Ci0gIH0KLQotIyBl
bHNlCi0KLSAgdGVtcGxhdGUgPGNsYXNzIFY+Ci0gIGNvbnN0ZXhwciBUIHZhbHVlT3IoViYmIHYp
IGNvbnN0Ci0gIHsKLSAgICByZXR1cm4gKnRoaXMgPyAqKnRoaXMgOiBkZXRhaWxfOjpjb252ZXJ0
PFQ+KGRldGFpbF86OmNvbnN0ZXhwcl9mb3J3YXJkPFY+KHYpKTsKLSAgfQotCi0jIGVuZGlmCi0K
LSAgLy8gMjAuNi4zLjYsIG1vZGlmaWVycwotICB2b2lkIHJlc2V0KCkgX19OT0VYQ0VQVCB7IGNs
ZWFyKCk7IH0KLX07Ci0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1jbGFzcyBPcHRpb25hbDxUJj4K
LXsKLSAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gIHN0YXRpY19hc3NlcnQoICFzdGQ6Omlz
X3NhbWU8VCwgbnVsbG9wdF90Pjo6dmFsdWUsICJiYWQgVCIgKTsKLSAgc3RhdGljX2Fzc2VydCgg
IXN0ZDo6aXNfc2FtZTxULCBzdGQ6OmluX3BsYWNlX3Q+Ojp2YWx1ZSwgImJhZCBUIiApOwotICBU
KiByZWY7Ci0KLXB1YmxpYzoKLQotICAvLyAyMC41LjUuMSwgY29uc3RydWN0aW9uL2Rlc3RydWN0
aW9uCi0gIGNvbnN0ZXhwciBPcHRpb25hbCgpIF9fTk9FWENFUFQgOiByZWYobnVsbHB0cikge30K
LQotICBjb25zdGV4cHIgT3B0aW9uYWwobnVsbG9wdF90KSBfX05PRVhDRVBUIDogcmVmKG51bGxw
dHIpIHt9Ci0KLSAgY29uc3RleHByIE9wdGlvbmFsKFQmIHYpIF9fTk9FWENFUFQgOiByZWYoZGV0
YWlsXzo6c3RhdGljX2FkZHJlc3NvZih2KSkge30KLQotICBPcHRpb25hbChUJiYpID0gZGVsZXRl
OwotCi0gIGNvbnN0ZXhwciBPcHRpb25hbChjb25zdCBPcHRpb25hbCYgcmhzKSBfX05PRVhDRVBU
IDogcmVmKHJocy5yZWYpIHt9Ci0KLSAgZXhwbGljaXQgY29uc3RleHByIE9wdGlvbmFsKHN0ZDo6
aW5fcGxhY2VfdCwgVCYgdikgX19OT0VYQ0VQVCA6IHJlZihkZXRhaWxfOjpzdGF0aWNfYWRkcmVz
c29mKHYpKSB7fQotCi0gIGV4cGxpY2l0IE9wdGlvbmFsKHN0ZDo6aW5fcGxhY2VfdCwgVCYmKSA9
IGRlbGV0ZTsKLQotICB+T3B0aW9uYWwoKSA9IGRlZmF1bHQ7Ci0KLSAgLy8gMjAuNS41LjIsIG11
dGF0aW9uCi0gIE9wdGlvbmFsJiBvcGVyYXRvcj0obnVsbG9wdF90KSBfX05PRVhDRVBUIHsKLSAg
ICByZWYgPSBudWxscHRyOwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIC8vIE9wdGlvbmFs
JiBvcGVyYXRvcj0oY29uc3QgT3B0aW9uYWwmIHJocykgX19OT0VYQ0VQVCB7Ci0gICAgLy8gcmVm
ID0gcmhzLnJlZjsKLSAgICAvLyByZXR1cm4gKnRoaXM7Ci0gIC8vIH0KLQotICAvLyBPcHRpb25h
bCYgb3BlcmF0b3I9KE9wdGlvbmFsJiYgcmhzKSBfX05PRVhDRVBUIHsKLSAgICAvLyByZWYgPSBy
aHMucmVmOwotICAgIC8vIHJldHVybiAqdGhpczsKLSAgLy8gfQotCi0gIHRlbXBsYXRlIDx0eXBl
bmFtZSBVPgotICBhdXRvIG9wZXJhdG9yPShVJiYgcmhzKSBfX05PRVhDRVBUCi0gIC0+IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmCi0gIDwKLSAgICBzdGQ6OmlzX3NhbWU8dHlwZW5hbWUgc3RkOjpk
ZWNheTxVPjo6dHlwZSwgT3B0aW9uYWw8VCY+Pjo6dmFsdWUsCi0gICAgT3B0aW9uYWwmCi0gID46
OnR5cGUKLSAgewotICAgIHJlZiA9IHJocy5yZWY7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0K
LSAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gIGF1dG8gb3BlcmF0b3I9KFUmJiByaHMpIF9fTk9F
WENFUFQKLSAgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWYKLSAgPAotICAgICFzdGQ6OmlzX3Nh
bWU8dHlwZW5hbWUgc3RkOjpkZWNheTxVPjo6dHlwZSwgT3B0aW9uYWw8VCY+Pjo6dmFsdWUsCi0g
ICAgT3B0aW9uYWwmCi0gID46OnR5cGUKLSAgPSBkZWxldGU7Ci0KLSAgdm9pZCBlbXBsYWNlKFQm
IHYpIF9fTk9FWENFUFQgewotICAgIHJlZiA9IGRldGFpbF86OnN0YXRpY19hZGRyZXNzb2Yodik7
Ci0gIH0KLQotICB2b2lkIGVtcGxhY2UoVCYmKSA9IGRlbGV0ZTsKLQotCi0gIHZvaWQgc3dhcChP
cHRpb25hbDxUJj4mIHJocykgX19OT0VYQ0VQVAotICB7Ci0gICAgc3RkOjpzd2FwKHJlZiwgcmhz
LnJlZik7Ci0gIH0KLQotICAvLyAyMC41LjUuMywgb2JzZXJ2ZXJzCi0gIGNvbnN0ZXhwciBUKiBv
cGVyYXRvci0+KCkgY29uc3QgewotICAgIFJFTEVBU0VfQVNTRVJUX1VOREVSX0NPTlNURVhQUl9D
T05URVhUKHJlZik7Ci0gICAgcmV0dXJuIHJlZjsKLSAgfQotCi0gIGNvbnN0ZXhwciBUJiBvcGVy
YXRvciooKSBjb25zdCB7Ci0gICAgUkVMRUFTRV9BU1NFUlRfVU5ERVJfQ09OU1RFWFBSX0NPTlRF
WFQocmVmKTsKLSAgICByZXR1cm4gKnJlZjsKLSAgfQotCi0gIGNvbnN0ZXhwciBUJiB2YWx1ZSgp
IGNvbnN0IHsKLSAgICBSRUxFQVNFX0FTU0VSVF9VTkRFUl9DT05TVEVYUFJfQ09OVEVYVChyZWYo
KSk7Ci0gICAgcmV0dXJuICpyZWY7Ci0gIH0KLQotICBleHBsaWNpdCBjb25zdGV4cHIgb3BlcmF0
b3IgYm9vbCgpIGNvbnN0IF9fTk9FWENFUFQgewotICAgIHJldHVybiByZWYgIT0gbnVsbHB0cjsK
LSAgfQotCi0gIGNvbnN0ZXhwciBib29sIGhhc1ZhbHVlKCkgY29uc3QgX19OT0VYQ0VQVCB7Ci0g
ICAgcmV0dXJuIHJlZiAhPSBudWxscHRyOwotICB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIFY+Ci0g
IGNvbnN0ZXhwciB0eXBlbmFtZSBzdGQ6OmRlY2F5PFQ+Ojp0eXBlIHZhbHVlT3IoViYmIHYpIGNv
bnN0Ci0gIHsKLSAgICByZXR1cm4gKnRoaXMgPyAqKnRoaXMgOiBkZXRhaWxfOjpjb252ZXJ0PHR5
cGVuYW1lIHN0ZDo6ZGVjYXk8VD46OnR5cGU+KGRldGFpbF86OmNvbnN0ZXhwcl9mb3J3YXJkPFY+
KHYpKTsKLSAgfQotCi0gIC8vIHgueC54LngsIG1vZGlmaWVycwotICB2b2lkIHJlc2V0KCkgX19O
T0VYQ0VQVCB7IHJlZiA9IG51bGxwdHI7IH0KLX07Ci0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1j
bGFzcyBPcHRpb25hbDxUJiY+Ci17Ci0gIHN0YXRpY19hc3NlcnQoIHNpemVvZihUKSA9PSAwLCAi
T3B0aW9uYWwgcnZhbHVlIHJlZmVyZW5jZXMgZGlzYWxsb3dlZCIgKTsKLX07Ci0KLQotLy8gMjAu
NS44LCBSZWxhdGlvbmFsIG9wZXJhdG9ycwotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBi
b29sIG9wZXJhdG9yPT0oY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0IE9wdGlvbmFsPFQ+JiB5
KQotewotICByZXR1cm4gYm9vbCh4KSAhPSBib29sKHkpID8gZmFsc2UgOiBib29sKHgpID09IGZh
bHNlID8gdHJ1ZSA6ICp4ID09ICp5OwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHBy
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBPcHRpb25hbDxUPiYgeCwgY29uc3QgT3B0aW9uYWw8VD4m
IHkpCi17Ci0gIHJldHVybiAhKHggPT0geSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25z
dGV4cHIgYm9vbCBvcGVyYXRvcjwoY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0IE9wdGlvbmFs
PFQ+JiB5KQotewotICByZXR1cm4gKCF5KSA/IGZhbHNlIDogKCF4KSA/IHRydWUgOiAqeCA8ICp5
OwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0
IE9wdGlvbmFsPFQ+JiB4LCBjb25zdCBPcHRpb25hbDxUPiYgeSkKLXsKLSAgcmV0dXJuICh5IDwg
eCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNv
bnN0IE9wdGlvbmFsPFQ+JiB4LCBjb25zdCBPcHRpb25hbDxUPiYgeSkKLXsKLSAgcmV0dXJuICEo
eSA8IHgpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+
PShjb25zdCBPcHRpb25hbDxUPiYgeCwgY29uc3QgT3B0aW9uYWw8VD4mIHkpCi17Ci0gIHJldHVy
biAhKHggPCB5KTsKLX0KLQotCi0vLyAyMC41LjksIENvbXBhcmlzb24gd2l0aCBudWxsb3B0Ci10
ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPcHRpb25h
bDxUPiYgeCwgbnVsbG9wdF90KSBfX05PRVhDRVBUCi17Ci0gIHJldHVybiAoIXgpOwotfQotCi10
ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShudWxsb3B0X3QsIGNv
bnN0IE9wdGlvbmFsPFQ+JiB4KSBfX05PRVhDRVBUCi17Ci0gIHJldHVybiAoIXgpOwotfQotCi10
ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShjb25zdCBPcHRpb25h
bDxUPiYgeCwgbnVsbG9wdF90KSBfX05PRVhDRVBUCi17Ci0gIHJldHVybiBib29sKHgpOwotfQot
Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShudWxsb3B0X3Qs
IGNvbnN0IE9wdGlvbmFsPFQ+JiB4KSBfX05PRVhDRVBUCi17Ci0gIHJldHVybiBib29sKHgpOwot
fQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IE9w
dGlvbmFsPFQ+JiwgbnVsbG9wdF90KSBfX05PRVhDRVBUCi17Ci0gIHJldHVybiBmYWxzZTsKLX0K
LQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChudWxsb3B0X3Qs
IGNvbnN0IE9wdGlvbmFsPFQ+JiB4KSBfX05PRVhDRVBUCi17Ci0gIHJldHVybiBib29sKHgpOwot
fQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCBP
cHRpb25hbDxUPiYgeCwgbnVsbG9wdF90KSBfX05PRVhDRVBUCi17Ci0gIHJldHVybiAoIXgpOwot
fQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShudWxsb3B0
X3QsIGNvbnN0IE9wdGlvbmFsPFQ+JikgX19OT0VYQ0VQVAotewotICByZXR1cm4gdHJ1ZTsKLX0K
LQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihjb25zdCBPcHRp
b25hbDxUPiYgeCwgbnVsbG9wdF90KSBfX05PRVhDRVBUCi17Ci0gIHJldHVybiBib29sKHgpOwot
fQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KG51bGxvcHRf
dCwgY29uc3QgT3B0aW9uYWw8VD4mKSBfX05PRVhDRVBUCi17Ci0gIHJldHVybiBmYWxzZTsKLX0K
LQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0oY29uc3QgT3B0
aW9uYWw8VD4mLCBudWxsb3B0X3QpIF9fTk9FWENFUFQKLXsKLSAgcmV0dXJuIHRydWU7Ci19Ci0K
LXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KG51bGxvcHRfdCwg
Y29uc3QgT3B0aW9uYWw8VD4mIHgpIF9fTk9FWENFUFQKLXsKLSAgcmV0dXJuICgheCk7Ci19Ci0K
LQotCi0vLyAyMC41LjEwLCBDb21wYXJpc29uIHdpdGggVAotdGVtcGxhdGUgPGNsYXNzIFQ+IGNv
bnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0IFQmIHYp
Ci17Ci0gIHJldHVybiBib29sKHgpID8gKnggPT0gdiA6IGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8
Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUJiB2LCBjb25zdCBPcHRp
b25hbDxUPiYgeCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2ID09ICp4IDogZmFsc2U7Ci19Ci0K
LXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE9wdGlv
bmFsPFQ+JiB4LCBjb25zdCBUJiB2KQotewotICByZXR1cm4gYm9vbCh4KSA/ICp4ICE9IHYgOiB0
cnVlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxUPiYgeCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2
ICE9ICp4IDogdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9w
ZXJhdG9yPChjb25zdCBPcHRpb25hbDxUPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJv
b2woeCkgPyAqeCA8IHYgOiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHBy
IGJvb2wgb3BlcmF0b3I+KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPFQ+JiB4KQotewotICBy
ZXR1cm4gYm9vbCh4KSA/IHYgPiAqeCA6IHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0IFQmIHYp
Ci17Ci0gIHJldHVybiBib29sKHgpID8gKnggPiB2IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxj
bGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoY29uc3QgVCYgdiwgY29uc3QgT3B0aW9u
YWw8VD4mIHgpCi17Ci0gIHJldHVybiBib29sKHgpID8gdiA8ICp4IDogZmFsc2U7Ci19Ci0KLXRl
bXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0IE9wdGlvbmFs
PFQ+JiB4LCBjb25zdCBUJiB2KQotewotICByZXR1cm4gYm9vbCh4KSA/ICp4ID49IHYgOiBmYWxz
ZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0oY29u
c3QgVCYgdiwgY29uc3QgT3B0aW9uYWw8VD4mIHgpCi17Ci0gIHJldHVybiBib29sKHgpID8gdiA8
PSAqeCA6IGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3Bl
cmF0b3I8PShjb25zdCBPcHRpb25hbDxUPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJv
b2woeCkgPyAqeCA8PSB2IDogdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhw
ciBib29sIG9wZXJhdG9yPj0oY29uc3QgVCYgdiwgY29uc3QgT3B0aW9uYWw8VD4mIHgpCi17Ci0g
IHJldHVybiBib29sKHgpID8gdiA+PSAqeCA6IHRydWU7Ci19CiAKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHVzaW5nIE9wdGlvbmFsID0gc3RkOjpvcHRpb25hbDxUPjsKK2NvbnN0ZXhwciBhdXRvIG51
bGxvcHQgPSBzdGQ6Om51bGxvcHQ7Cit1c2luZyBudWxsb3B0X3QgPSBzdGQ6Om51bGxvcHRfdDsK
IAotLy8gQ29tcGFyaXNvbiBvZiBPcHRpb25hbDxUJj4gd2l0aCBUCi10ZW1wbGF0ZSA8Y2xhc3Mg
VD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPcHRpb25hbDxUJj4mIHgsIGNvbnN0
IFQmIHYpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPiBj
b25zdGV4cHIgc3RkOjpvcHRpb25hbDxzdGQ6OmRlY2F5X3Q8VD4+IG1ha2VPcHRpb25hbChUJiYg
dmFsdWUpCiB7Ci0gIHJldHVybiBib29sKHgpID8gKnggPT0gdiA6IGZhbHNlOworICAgIHJldHVy
biBzdGQ6Om1ha2Vfb3B0aW9uYWw8c3RkOjpkZWNheV90PFQ+PihzdGQ6OmZvcndhcmQ8VD4odmFs
dWUpKTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0o
Y29uc3QgVCYgdiwgY29uc3QgT3B0aW9uYWw8VCY+JiB4KQordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4gY29uc3RleHByIHN0ZDo6b3B0aW9uYWw8VD4gbWFr
ZU9wdGlvbmFsKEFyZ3VtZW50VHlwZXMmJi4uLiBhcmd1bWVudHMpCiB7Ci0gIHJldHVybiBib29s
KHgpID8gdiA9PSAqeCA6IGZhbHNlOworICAgIHJldHVybiBzdGQ6Om1ha2Vfb3B0aW9uYWw8VD4o
c3RkOjpmb3J3YXJkPEFyZ3VtZW50VHlwZXM+KGFyZ3VtZW50cykuLi4pOwogfQogCi10ZW1wbGF0
ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShjb25zdCBPcHRpb25hbDxUJj4m
IHgsIGNvbnN0IFQmIHYpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZS4uLiBBcmd1bWVudFR5cGVzPiBjb25zdGV4cHIgc3RkOjpvcHRpb25hbDxUPiBtYWtlT3B0aW9u
YWwoc3RkOjppbml0aWFsaXplcl9saXN0PFU+IGxpc3QsIEFyZ3VtZW50VHlwZXMmJi4uLiBhcmd1
bWVudHMpCiB7Ci0gIHJldHVybiBib29sKHgpID8gKnggIT0gdiA6IHRydWU7CisgICAgcmV0dXJu
IHN0ZDo6bWFrZV9vcHRpb25hbDxUPihsaXN0LCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRUeXBlcz4o
YXJndW1lbnRzKS4uLik7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPFQmPiYgeCkKK3RlbXBsYXRlPHR5
cGVuYW1lIE9wdGlvbmFsVHlwZSwgY2xhc3MgQ2FsbGJhY2s+IGF1dG8gdmFsdWVPckNvbXB1dGUo
T3B0aW9uYWxUeXBlIG9wdGlvbmFsLCBDYWxsYmFjayBjYWxsYmFjaykgLT4gdHlwZW5hbWUgT3B0
aW9uYWxUeXBlOjp2YWx1ZV90eXBlCiB7Ci0gIHJldHVybiBib29sKHgpID8gdiAhPSAqeCA6IHRy
dWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoY29u
c3QgT3B0aW9uYWw8VCY+JiB4LCBjb25zdCBUJiB2KQotewotICByZXR1cm4gYm9vbCh4KSA/ICp4
IDwgdiA6IHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVy
YXRvcj4oY29uc3QgVCYgdiwgY29uc3QgT3B0aW9uYWw8VCY+JiB4KQotewotICByZXR1cm4gYm9v
bCh4KSA/IHYgPiAqeCA6IHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIg
Ym9vbCBvcGVyYXRvcj4oY29uc3QgT3B0aW9uYWw8VCY+JiB4LCBjb25zdCBUJiB2KQotewotICBy
ZXR1cm4gYm9vbCh4KSA/ICp4ID4gdiA6IGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4g
Y29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPFQmPiYg
eCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2IDwgKnggOiBmYWxzZTsKLX0KLQotdGVtcGxhdGUg
PGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0oY29uc3QgT3B0aW9uYWw8VCY+JiB4
LCBjb25zdCBUJiB2KQotewotICByZXR1cm4gYm9vbCh4KSA/ICp4ID49IHYgOiBmYWxzZTsKLX0K
LQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0oY29uc3QgVCYg
diwgY29uc3QgT3B0aW9uYWw8VCY+JiB4KQotewotICByZXR1cm4gYm9vbCh4KSA/IHYgPD0gKngg
OiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9y
PD0oY29uc3QgT3B0aW9uYWw8VCY+JiB4LCBjb25zdCBUJiB2KQotewotICByZXR1cm4gYm9vbCh4
KSA/ICp4IDw9IHYgOiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJv
b2wgb3BlcmF0b3I+PShjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxUJj4mIHgpCi17Ci0gIHJl
dHVybiBib29sKHgpID8gdiA+PSAqeCA6IHRydWU7Ci19Ci0KLS8vIENvbXBhcmlzb24gb2YgT3B0
aW9uYWw8VCBjb25zdCY+IHdpdGggVAotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29s
IG9wZXJhdG9yPT0oY29uc3QgT3B0aW9uYWw8Y29uc3QgVCY+JiB4LCBjb25zdCBUJiB2KQotewot
ICByZXR1cm4gYm9vbCh4KSA/ICp4ID09IHYgOiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNz
IFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgVCYgdiwgY29uc3QgT3B0aW9uYWw8
Y29uc3QgVCY+JiB4KQotewotICByZXR1cm4gYm9vbCh4KSA/IHYgPT0gKnggOiBmYWxzZTsKLX0K
LQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgT3B0
aW9uYWw8Y29uc3QgVCY+JiB4LCBjb25zdCBUJiB2KQotewotICByZXR1cm4gYm9vbCh4KSA/ICp4
ICE9IHYgOiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxjb25zdCBUJj4mIHgpCi17Ci0gIHJl
dHVybiBib29sKHgpID8gdiAhPSAqeCA6IHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoY29uc3QgT3B0aW9uYWw8Y29uc3QgVCY+JiB4LCBjb25z
dCBUJiB2KQotewotICByZXR1cm4gYm9vbCh4KSA/ICp4IDwgdiA6IHRydWU7Ci19Ci0KLXRlbXBs
YXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgVCYgdiwgY29uc3Qg
T3B0aW9uYWw8Y29uc3QgVCY+JiB4KQotewotICByZXR1cm4gYm9vbCh4KSA/IHYgPiAqeCA6IHRy
dWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29u
c3QgT3B0aW9uYWw8Y29uc3QgVCY+JiB4LCBjb25zdCBUJiB2KQotewotICByZXR1cm4gYm9vbCh4
KSA/ICp4ID4gdiA6IGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJv
b2wgb3BlcmF0b3I8KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPGNvbnN0IFQmPiYgeCkKLXsK
LSAgcmV0dXJuIGJvb2woeCkgPyB2IDwgKnggOiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNz
IFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0oY29uc3QgT3B0aW9uYWw8Y29uc3QgVCY+JiB4
LCBjb25zdCBUJiB2KQotewotICByZXR1cm4gYm9vbCh4KSA/ICp4ID49IHYgOiBmYWxzZTsKLX0K
LQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0oY29uc3QgVCYg
diwgY29uc3QgT3B0aW9uYWw8Y29uc3QgVCY+JiB4KQotewotICByZXR1cm4gYm9vbCh4KSA/IHYg
PD0gKnggOiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9w
ZXJhdG9yPD0oY29uc3QgT3B0aW9uYWw8Y29uc3QgVCY+JiB4LCBjb25zdCBUJiB2KQotewotICBy
ZXR1cm4gYm9vbCh4KSA/ICp4IDw9IHYgOiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4g
Y29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxjb25z
dCBUJj4mIHgpCi17Ci0gIHJldHVybiBib29sKHgpID8gdiA+PSAqeCA6IHRydWU7Ci19Ci0KLQot
Ly8gMjAuNS4xMiwgU3BlY2lhbGl6ZWQgYWxnb3JpdGhtcwotdGVtcGxhdGUgPGNsYXNzIFQ+Ci12
b2lkIHN3YXAoT3B0aW9uYWw8VD4mIHgsIE9wdGlvbmFsPFQ+JiB5KSBfX05PRVhDRVBUXyhfX05P
RVhDRVBUXyh4LnN3YXAoeSkpKQotewotICB4LnN3YXAoeSk7Ci19Ci0KLQotdGVtcGxhdGUgPGNs
YXNzIFQ+Ci1jb25zdGV4cHIgT3B0aW9uYWw8dHlwZW5hbWUgc3RkOjpkZWNheTxUPjo6dHlwZT4g
bWFrZU9wdGlvbmFsKFQmJiB2KQotewotICByZXR1cm4gT3B0aW9uYWw8dHlwZW5hbWUgc3RkOjpk
ZWNheTxUPjo6dHlwZT4oZGV0YWlsXzo6Y29uc3RleHByX2ZvcndhcmQ8VD4odikpOwotfQotCi10
ZW1wbGF0ZSA8Y2xhc3MgWD4KLWNvbnN0ZXhwciBPcHRpb25hbDxYJj4gbWFrZU9wdGlvbmFsKHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8WD4gdikKLXsKLSAgcmV0dXJuIE9wdGlvbmFsPFgmPih2Lmdl
dCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLW5hbWVzcGFjZSBzdGQKLXsKLSAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+Ci0gIHN0cnVjdCBoYXNoPFdURjo6T3B0aW9uYWw8VD4+Ci0gIHsK
LSAgICB0eXBlZGVmIHR5cGVuYW1lIGhhc2g8VD46OnJlc3VsdF90eXBlIHJlc3VsdF90eXBlOwot
ICAgIHR5cGVkZWYgV1RGOjpPcHRpb25hbDxUPiBhcmd1bWVudF90eXBlOwotCi0gICAgY29uc3Rl
eHByIHJlc3VsdF90eXBlIG9wZXJhdG9yKCkoYXJndW1lbnRfdHlwZSBjb25zdCYgYXJnKSBjb25z
dCB7Ci0gICAgICByZXR1cm4gYXJnID8gc3RkOjpoYXNoPFQ+e30oKmFyZykgOiByZXN1bHRfdHlw
ZXt9OwotICAgIH0KLSAgfTsKLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgc3RydWN0IGhh
c2g8V1RGOjpPcHRpb25hbDxUJj4+Ci0gIHsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGhhc2g8VD46
OnJlc3VsdF90eXBlIHJlc3VsdF90eXBlOwotICAgIHR5cGVkZWYgV1RGOjpPcHRpb25hbDxUJj4g
YXJndW1lbnRfdHlwZTsKLQotICAgIGNvbnN0ZXhwciByZXN1bHRfdHlwZSBvcGVyYXRvcigpKGFy
Z3VtZW50X3R5cGUgY29uc3QmIGFyZykgY29uc3QgewotICAgICAgcmV0dXJuIGFyZyA/IHN0ZDo6
aGFzaDxUPnt9KCphcmcpIDogcmVzdWx0X3R5cGV7fTsKLSAgICB9Ci0gIH07Ci19Ci0KLSMgdW5k
ZWYgVFIyX09QVElPTkFMX1JFUVVJUkVTCi0KLW5hbWVzcGFjZSBXVEYgewotCi0vLyAtLSBXZWJL
aXQgQWRkaXRpb25zIC0tCi10ZW1wbGF0ZSA8Y2xhc3MgT3B0aW9uYWxUeXBlLCBjbGFzcyBDYWxs
YmFjaz4KLUFMV0FZU19JTkxJTkUKLWF1dG8gdmFsdWVPckNvbXB1dGUoT3B0aW9uYWxUeXBlIE9w
dGlvbmFsLCBDYWxsYmFjayBjYWxsYmFjaykgLT4gdHlwZW5hbWUgT3B0aW9uYWxUeXBlOjp2YWx1
ZV90eXBlCi17Ci0gICAgaWYgKE9wdGlvbmFsKQotICAgICAgICByZXR1cm4gKk9wdGlvbmFsOwot
ICAgIHJldHVybiBjYWxsYmFjaygpOworICAgIHJldHVybiBvcHRpb25hbCA/ICpvcHRpb25hbCA6
IGNhbGxiYWNrKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpAQCAtMTA0MywzICs1Myw2IEBA
IGF1dG8gdmFsdWVPckNvbXB1dGUoT3B0aW9uYWxUeXBlIE9wdGlvbmFsLCBDYWxsYmFjayBjYWxs
YmFjaykgLT4gdHlwZW5hbWUgT3B0aW9uCiB1c2luZyBXVEY6Ok9wdGlvbmFsOwogdXNpbmcgV1RG
OjptYWtlT3B0aW9uYWw7CiB1c2luZyBXVEY6OnZhbHVlT3JDb21wdXRlOworCisjZGVmaW5lIGhh
c1ZhbHVlIGhhc192YWx1ZQorI2RlZmluZSB2YWx1ZU9yIHZhbHVlX29yCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmggYi9Tb3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmgKaW5kZXgg
OTdmN2RiZmNlODdkMTIxNTUyNGUxY2FmNzc1MGY5YWQxOWQ1YmQ3Ny4uNTUyZDM1OTUxMWFjNzY3
NDE0MDMwODY3ODdiYzVhMzAwYTJkNTZkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU2Vj
b25kcy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1NlY29uZHMuaApAQCAtMjUsNiArMjUsNyBAQAog
CiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVyLmggYi9Tb3VyY2Uv
V1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaAppbmRleCBjYzc0OGM5M2FjODI4
MTJlODY2YWY2N2VjZmQ4ZmY2M2U5Y2Q0ZTc4Li42MTViZDEyNTdjODk3MjQwNzQzZjNiNTVhMjYy
MTNiNjJhMDM5MDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJz
aXN0ZW50Q29kZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50
Q29kZXIuaApAQCAtMjUsMTAgKzI1LDkgQEAKIAogI3ByYWdtYSBvbmNlCiAKLW5hbWVzcGFjZSBX
VEYgeworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKLXRlbXBsYXRlIDxjbGFzcyBUPgotY2xh
c3MgT3B0aW9uYWw7CituYW1lc3BhY2UgV1RGIHsKIAogbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsK
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429548</attachid>
            <date>2021-05-24 11:06:56 -0700</date>
            <delta_ts>2021-05-24 14:13:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211674-20210524110655.patch</filename>
            <type>text/plain</type>
            <size>81013</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3OTU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
YmE4NmE0M2RlYmJlOTRhOGMyNWUwOGVhYjlhNjNhNThhZDFmNGM0Li40NWQ4ZWFlNTc4NTdjOTIy
MTExYWY1ZTU4NTIxNjc5M2MyMTA2NzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NSBAQAorMjAyMS0wNS0yNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgU3dpdGNoIGZyb20gV1RGOjpPcHRpb25hbCB0byBzdGQ6Om9wdGlvbmFsCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTE2NzQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHJ1bnRpbWUvSW50
bENvbGxhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yOjppbml0aWFsaXplQ29s
bGF0b3IpOiBVc2UgSlNPYmplY3QqIGluc3RlYWQgb2YKKyAgICAgICAgT3B0aW9uYWw8SlNPYmpl
Y3QmPi4KKyAgICAgICAgKiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHA6CisgICAgICAg
IChKU0M6OnRvRGF0ZVRpbWVPcHRpb25zQW55RGF0ZSk6IERpdHRvLgorICAgICAgICAoSlNDOjpJ
bnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVGltZUZvcm1hdCk6IERpdHRvLgorICAg
ICAgICAqIHJ1bnRpbWUvSW50bERpc3BsYXlOYW1lcy5jcHA6CisgICAgICAgIChKU0M6OkludGxE
aXNwbGF5TmFtZXM6OmluaXRpYWxpemVEaXNwbGF5TmFtZXMpOiBEaXR0by4KKyAgICAgICAgKiBy
dW50aW1lL0ludGxMaXN0Rm9ybWF0LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bExpc3RGb3JtYXQ6
OmluaXRpYWxpemVMaXN0Rm9ybWF0KTogRGl0dG8uCisgICAgICAgICogcnVudGltZS9JbnRsTG9j
YWxlLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bExvY2FsZTo6aW5pdGlhbGl6ZUxvY2FsZSk6IERp
dHRvLgorICAgICAgICAqIHJ1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHA6CisgICAgICAgIChK
U0M6OkludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGb3JtYXQpOiBEaXR0by4KKyAg
ICAgICAgKiBydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaDogRGl0dG8uCisgICAgICAgICogcnVu
dGltZS9JbnRsTnVtYmVyRm9ybWF0SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpzZXROdW1iZXJG
b3JtYXREaWdpdE9wdGlvbnMpOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1lL0ludGxPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDOjppbnRsQm9vbGVhbk9wdGlvbik6IERpdHRvLgorICAgICAgICAo
SlNDOjppbnRsU3RyaW5nT3B0aW9uKTogRGl0dG8uCisgICAgICAgIChKU0M6OmludGxOdW1iZXJP
cHRpb24pOiBEaXR0by4KKyAgICAgICAgKEpTQzo6c3VwcG9ydGVkTG9jYWxlcyk6IERpdHRvLgor
ICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5oOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1l
L0ludGxPYmplY3RJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OmludGxPcHRpb24pOiBEaXR0by4K
KyAgICAgICAgKEpTQzo6aW50bEdldE9wdGlvbnNPYmplY3QpOiBEaXR0by4KKyAgICAgICAgKEpT
Qzo6aW50bENvZXJjZU9wdGlvbnNUb09iamVjdCk6IERpdHRvLgorICAgICAgICAqIHJ1bnRpbWUv
SW50bFBsdXJhbFJ1bGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bFBsdXJhbFJ1bGVzOjppbml0
aWFsaXplUGx1cmFsUnVsZXMpOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1lL0ludGxQbHVyYWxS
dWxlcy5oOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQu
Y3BwOgorICAgICAgICAoSlNDOjpJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojppbml0aWFsaXplUmVs
YXRpdmVUaW1lRm9ybWF0KTogRGl0dG8uCisgICAgICAgICogcnVudGltZS9JbnRsU2VnbWVudGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bFNlZ21lbnRlcjo6aW5pdGlhbGl6ZVNlZ21lbnRlcik6
IERpdHRvLgorCiAyMDIxLTA1LTIzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAK
ICAgICAgICAgTWFrZSBDaGVja2VkTG9jayB0aGUgZGVmYXVsdCBMb2NrCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDE2M2RjNjY5
ZGRjMGNiMDRmMjhiYjllOWNlOTBmMmVmNTg1NmU1YzAuLmNjZGVhNGU5ZjI2OTA2Nzg5MDBlYzQ3
NjI0ODk1NmRjYmU1NjM0ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMjEtMDUtMjQgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFN3aXRjaCBmcm9tIFdURjo6T3B0
aW9uYWwgdG8gc3RkOjpvcHRpb25hbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjExNjc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiB3dGYvRm9yd2FyZC5oOiBSZW1vdmUgT3B0aW9uYWwgZm9yd2FyZCBk
ZWNsYXJhdGlvbi4KKyAgICAgICAgQWxzbyBpbmNsdWRlIE9wdGlvbmFsLmgsIGp1c3QgZm9yIG5v
dy4gTmVlZCB0byByZW1vdmUgdGhpcyBvbmNlCisgICAgICAgIHdlIGRvIHRoZSBnbG9iYWwgcmVu
YW1lLgorCisgICAgICAgICogd3RmL09wdGlvbmFsLmg6IFJlcGxhY2VkIHRoZSBlbnRpcmUgV1RG
OjpPcHRpb25hbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICB3aXRoIGEgV1RGOjpPcHRpb25hbCAi
dXNpbmciIHRoYXQgbWFrZXMgaXQgYSBzeW5vbnltIGZvciBzdGQ6Om9wdGlvbmFsLgorICAgICAg
ICBXVEY6Om51bGxvcHQgYmVpbmcgYSBzeW5vbnltIGZvciBzdGQ6Om51bGxvcHQgYW5kIFdURjo6
bnVsbG9wdF90CisgICAgICAgIGJlaW5nIGEgc3lub255bSBmb3Igc3RkOjpudWxsb3B0X3QuIEFs
c28gaW5jbHVkZWQgZnVuY3Rpb25zIHNvCisgICAgICAgIHRoYXQgV1RGOjptYWtlT3B0aW9uYWwg
Y2FsbHMgc3RkOjptYWtlX29wdGlvbmFsIGFuZCBrZXB0IHRoZQorICAgICAgICBXVEYgZXh0ZW5z
aW9uIG5hbWVkIHZhbHVlT3JDb21wdXRlLiBOZWVkIHRvIHJlbW92ZSB0aGVzZSBvbmNlIHdlCisg
ICAgICAgIGRvIHRoZSBnbG9iYWwgcmVuYW1lLCBhbmQgbGlrZWx5IGp1c3QgZ2V0IHJpZCBvZiB2
YWx1ZU9yQ29tcHV0ZSwgYW5kCisgICAgICAgIHRoZW4gZGVsZXRlIHRoaXMgZW50aXJlIGhlYWRl
ci4KKworICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaDogVXNlIEZv
cndhcmQuaCBmb3Igbm93IGluc3RlYWQgb2YKKyAgICAgICAgZm9yd2FyZC1kZWNsYXJpbmcgV1RG
OjpvcHRpb25hbC4KKwogMjAyMS0wNS0yMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29t
PgogCiAgICAgICAgIE1ha2UgQ2hlY2tlZExvY2sgdGhlIGRlZmF1bHQgTG9jawpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IGY5NDQ4MTBlNzRlNzIwMDcwZDg3M2I5YjhjYjZkNGFlNzg0M2U0ZDguLmFmODYzMWI0MmU3
M2JkZTU5YTM3NDZiMTg0YTg2MmZlOTVjYmE0NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBA
QAorMjAyMS0wNS0yNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAg
U3dpdGNoIGZyb20gV1RGOjpPcHRpb25hbCB0byBzdGQ6Om9wdGlvbmFsCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTE2NzQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1ZQ
OVV0aWxpdGllcy5oOiBUd2Vha2VkIGNvZGluZyBzdHlsZSBhIGJpdC4KKyAgICAgICAgQWRkZWQg
bWlzc2luZyBvcGVyYXRvciE9IGJlY2F1c2Ugc3RkOjpvcHRpb25hbCdzIG9wZXJhdG9yIT0gcmVs
aWVzCisgICAgICAgIG9uIHRoYXQsIHdoaWxlIFdURjo6T3B0aW9uYWwncyBvcGVyYXRvciE9IHJl
bGllZCBvbiBvcGVyYXRvcj09LgorCisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRWUDlTY3JlZW5TaXplQW5kU2NhbGVGb3JU
ZXN0aW5nKTogVXNlIGEKKyAgICAgICAgZm9ybSBvZiBjb25zdHJ1Y3Rpb24gZm9yIFNjcmVlbkRh
dGFPdmVycmlkZXMgdGhhdCB3b3JrcyB3aXRoIGJvdGgKKyAgICAgICAgV1RGOjpPcHRpb25hbCBh
bmQgc3RkOjpvcHRpb25hbC4gU29tZXRoaW5nIGFib3V0IHdheSB0aGUgb2xkIGNvZGUKKyAgICAg
ICAgdXNlZCBXVEY6Om1ha2VPcHRpb25hbCB3YXMgbm90IGNvbXBhdGlibGUgd2l0aCBzdGQ6Om1h
a2Vfb3B0aW9uYWwsCisgICAgICAgIGJ1dCBpdCB3YXMgZWFzeSB0byBtYWtlIGl0IG1vcmUgc3Ry
YWlnaHRmb3J3YXJkIGFuZCBub3QgZXZlbiBoYXZlCisgICAgICAgIHRvIHVzZSBhICJtYWtlIiBm
dW5jdGlvbi4KKwogMjAyMS0wNS0yNCAgQWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgW0xGQ10gRm9ybWF0dGluZ0dlb21ldHJ5IGZ1bmN0aW9ucyBzaG91bGQgYWxsIGJl
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCmluZGV4IDQ5MGZmMTY1ZTE5NzE0MDU1NTE4YmEzMmM1YzI0ZjI3ZWRkZWZh
MDIuLmQ0NDkxNzIyYTY1ZDdlZjg5ZjJhMDdiZmFkYTI3ZGY1MDdmZWMwOTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMjEtMDUtMjQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFN3aXRjaCBmcm9tIFdURjo6T3B0aW9uYWwgdG8gc3RkOjpvcHRpb25hbAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExNjc0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0Zm9y
bS9JUEMvQXJndW1lbnRDb2Rlci5oOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyOjpkZWNv
ZGUpOiBBZGQgYSBXVEZNb3ZlLiBUdXJucyBvdXQgdGhpcyB3YXMgbm90IG5lZWRlZAorICAgICAg
ICB0byBnZXQgY29tcGlsaW5nIHdpdGggc3RkOjpvcHRpb25hbCwgYnV0IGl0J3MgYSBnb29kIGlk
ZWEgZm9yIHBlcmZvcm1hbmNlLgorICAgICAgICBUaGlzIGlzIG9uZSBvZiB0aG9zZSBjYXNlcyB3
aGVyZSBpdCBsb29rcyBsaWtlIHRoZSByZXR1cm4gdmFsdWUgb3B0aW1pemF0aW9uCisgICAgICAg
IHdvdWxkIHdvcmssIGJ1dCBpdCBkb2Vzbid0IGJlY2F1c2UgdGhlIHJldHVybiB2YWx1ZSBkb2Vz
bid0IGV4YWN0bHkgbWF0Y2gKKyAgICAgICAgdGhlIGxvY2FsIHZhcmlhYmxlJ3MgdHlwZS4KKwor
ICAgICAgICAqIFNoYXJlZC9Ub3VjaEJhck1lbnVEYXRhLmg6IFJlbW92ZSBzb21lIG92ZXJ6ZWFs
b3VzIHVzZSBvZiBleHBsaWNpdCB0aGF0CisgICAgICAgIHdhcyBwcmV2ZW50aW5nIHNvbWUgZmls
ZXMgZnJvbSBjb21waWxpbmcgd2l0aCB0aGUgc3RyaWN0ZXIgc3RkOjpvcHRpb25hbAorICAgICAg
ICBjb25zdHJ1Y3RvciBydWxlcywgd2hpbGUgaXQgZGlkIG5vdCBwcmV2ZW50IGNvbXBpbGluZyB3
aXRoIFdURjo6T3B0aW9uYWwuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJB
dXRvbWF0aW9uU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNz
aW9uOjpzd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dCk6IFJlbW92ZWQgYW4gdW51c2VkCisgICAgICAg
IGxhbWJkYSBjYXB0dXJlIGFuZCBsb2NhbCB2YXJpYWJsZS4gTm90IGNsZWFyIGhvdyB0aGlzIGlz
IHJlbGF0ZWQgdG8KKyAgICAgICAgc3RkOjpvcHRpb25hbCwgYnV0IHNob3dlZCB1cCBhcyBhIGNv
bXBpbGVyIHdhcm5pbmcuCisKIDIwMjEtMDUtMjMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxl
LmNvbT4KIAogICAgICAgICBNYWtlIENoZWNrZWRMb2NrIHRoZSBkZWZhdWx0IExvY2sKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCmluZGV4IGM4MmZh
NjBlYjBjMjY3ZGFlNzAxODNjY2NhZWM4ZTk5YmY5NTRhNzIuLmI3NzZmYjI5M2UwNTRlMjRkNTQ1
YjAzZmYwM2Q2NGEwZDAwMzgyMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxDb2xsYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bENvbGxhdG9yLmNwcApAQCAtMTY0LDcgKzE2NCw3IEBAIHZvaWQgSW50bENvbGxhdG9y
Ojppbml0aWFsaXplQ29sbGF0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBsb2NhCiAgICAgYXV0byByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlz
dChnbG9iYWxPYmplY3QsIGxvY2FsZXMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHZvaWQoKSk7CiAKLSAgICBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlvbnMgPSBpbnRsQ29lcmNl
T3B0aW9uc1RvT2JqZWN0KGdsb2JhbE9iamVjdCwgb3B0aW9uc1ZhbHVlKTsKKyAgICBKU09iamVj
dCogb3B0aW9ucyA9IGludGxDb2VyY2VPcHRpb25zVG9PYmplY3QoZ2xvYmFsT2JqZWN0LCBvcHRp
b25zVmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAg
ICBtX3VzYWdlID0gaW50bE9wdGlvbjxVc2FnZT4oZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCB2bS5w
cm9wZXJ0eU5hbWVzLT51c2FnZSwgeyB7ICJzb3J0Il9zLCBVc2FnZTo6U29ydCB9LCB7ICJzZWFy
Y2giX3MsIFVzYWdlOjpTZWFyY2ggfSB9LCAidXNhZ2UgbXVzdCBiZSBlaXRoZXIgXCJzb3J0XCIg
b3IgXCJzZWFyY2hcIiJfcywgVXNhZ2U6OlNvcnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAKaW5kZXggZjg5ODA2YzU2YjI2
MDUyMmZjN2M3Yjk4YWY4NTJjZjczM2Y4OTg1Zi4uZDU1ZTRhMGI1YjViNjhlMjhlODYxMjIwZmE1
MzhjMTAzZDBlY2QyYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bERhdGVUaW1lRm9ybWF0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCkBAIC0xOTMsNyArMTkzLDcgQEAgVmVjdG9yPFN0cmlu
Zz4gSW50bERhdGVUaW1lRm9ybWF0Ojpsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBS
ZWxldmFudEV4dGUKICAgICByZXR1cm4ga2V5TG9jYWxlRGF0YTsKIH0KIAotc3RhdGljIE9wdGlv
bmFsPEpTT2JqZWN0Jj4gdG9EYXRlVGltZU9wdGlvbnNBbnlEYXRlKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgb3JpZ2luYWxPcHRpb25zKQorc3RhdGljIEpTT2JqZWN0KiB0
b0RhdGVUaW1lT3B0aW9uc0FueURhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBvcmlnaW5hbE9wdGlvbnMpCiB7CiAgICAgLy8gMTIuMS4xIFRvRGF0ZVRpbWVPcHRpb25z
IGFic3RyYWN0IG9wZXJhdGlvbiAoRUNNQS00MDIgMi4wKQogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKQEAgLTMwNyw3ICszMDcsNyBAQCBzdGF0aWMgT3B0aW9uYWw8SlNPYmplY3Qm
PiB0b0RhdGVUaW1lT3B0aW9uc0FueURhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdAog
ICAgIC8vIERlZmF1bHRzIGlzIGFsd2F5cyAiZGF0ZSIuIElnbm9yZSB0aGlzIGJyYW5jaC4KIAog
ICAgIC8vIDkuIFJldHVybiBvcHRpb25zLgotICAgIHJldHVybiAqb3B0aW9uczsKKyAgICByZXR1
cm4gb3B0aW9uczsKIH0KIAogdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnNldEZvcm1hdHNGcm9t
UGF0dGVybihjb25zdCBTdHJpbmdWaWV3JiBwYXR0ZXJuKQpAQCAtNTI0LDcgKzUyNCw3IEBAIHZv
aWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVRpbWVGb3JtYXQoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwKICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVz
ID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChnbG9iYWxPYmplY3QsIGxvY2FsZXMpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKLSAgICBPcHRpb25hbDxKU09iamVj
dCY+IG9wdGlvbnMgPSB0b0RhdGVUaW1lT3B0aW9uc0FueURhdGUoZ2xvYmFsT2JqZWN0LCBvcmln
aW5hbE9wdGlvbnMpOworICAgIEpTT2JqZWN0KiBvcHRpb25zID0gdG9EYXRlVGltZU9wdGlvbnNB
bnlEYXRlKGdsb2JhbE9iamVjdCwgb3JpZ2luYWxPcHRpb25zKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgUmVzb2x2ZUxvY2FsZU9wdGlvbnMgbG9jYWxl
T3B0aW9uczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxE
aXNwbGF5TmFtZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3Bs
YXlOYW1lcy5jcHAKaW5kZXggMGRlNTc0MjkzNDVhZDgxZGFlNDE2MGVhZGRiNTA5N2M2NDIwYzE5
Mi4uZDc5YzM0MTc4YTJiYmVkYTg5NzI3MmNhMTg4YWI3NzU4ODBkZjdjZCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lcy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lcy5jcHAKQEAgLTY5
LDcgKzY5LDcgQEAgdm9pZCBJbnRsRGlzcGxheU5hbWVzOjppbml0aWFsaXplRGlzcGxheU5hbWVz
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmEKICAgICBhdXRvIHJlcXVlc3RlZExv
Y2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KGdsb2JhbE9iamVjdCwgbG9jYWxlcyk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAotICAgIE9wdGlvbmFsPEpT
T2JqZWN0Jj4gb3B0aW9ucyA9IGludGxHZXRPcHRpb25zT2JqZWN0KGdsb2JhbE9iamVjdCwgb3B0
aW9uc1ZhbHVlKTsKKyAgICBKU09iamVjdCogb3B0aW9ucyA9IGludGxHZXRPcHRpb25zT2JqZWN0
KGdsb2JhbE9iamVjdCwgb3B0aW9uc1ZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOwogCiAgICAgLy8gRG9lcyBub3Qgc2V0IGVpdGhlciBvZiAiY2EiIG9yICJu
dSIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZv
cm1hdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdC5j
cHAKaW5kZXggODgwZWQyNmU3M2FmZTFjYTk0NDc3NDViZWVmYWY5YjVkMzZmNDE4Mi4uMjBmNjg2
OGM1MTdmNWE1ODMyNGU5MGUyZWUwNjc5MGQyNGY4ZGQzMSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0LmNwcApAQCAtOTEsNyArOTEsNyBAQCB2
b2lkIEludGxMaXN0Rm9ybWF0Ojppbml0aWFsaXplTGlzdEZvcm1hdChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlCiAgICAgYXV0byByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25p
Y2FsaXplTG9jYWxlTGlzdChnbG9iYWxPYmplY3QsIGxvY2FsZXMpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKLSAgICBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlv
bnMgPSBpbnRsR2V0T3B0aW9uc09iamVjdChnbG9iYWxPYmplY3QsIG9wdGlvbnNWYWx1ZSk7Cisg
ICAgSlNPYmplY3QqIG9wdGlvbnMgPSBpbnRsR2V0T3B0aW9uc09iamVjdChnbG9iYWxPYmplY3Qs
IG9wdGlvbnNWYWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsK
IAogICAgIFJlc29sdmVMb2NhbGVPcHRpb25zIGxvY2FsZU9wdGlvbnM7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuY3BwCmluZGV4IGViMDQ1YzU1ZTUxNWFlNjcz
YzBhNDZiZjFlMjQwOTBjNzA2MDNmYmMuLmYyMmFiYTA1NTE1ZmZmNTNkMGQwNjc5NTI0NzJmM2Uw
OWM2Y2ZkODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxM
b2NhbGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUu
Y3BwCkBAIC0yMzMsNyArMjMzLDcgQEAgdm9pZCBJbnRsTG9jYWxlOjppbml0aWFsaXplTG9jYWxl
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgdGEKICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCi0gICAgT3B0aW9uYWw8SlNPYmplY3QmPiBvcHRpb25zID0gaW50bENvZXJj
ZU9wdGlvbnNUb09iamVjdChnbG9iYWxPYmplY3QsIG9wdGlvbnNWYWx1ZSk7CisgICAgSlNPYmpl
Y3QqIG9wdGlvbnMgPSBpbnRsQ29lcmNlT3B0aW9uc1RvT2JqZWN0KGdsb2JhbE9iamVjdCwgb3B0
aW9uc1ZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAg
ICAgTG9jYWxlSURCdWlsZGVyIGxvY2FsZUlEOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAppbmRleCBmMDM1MGM4NDM4ZDc3ZWJlN2E1
ZjkyNzQ5MDdlM2NiNDJhMzdlNWQyLi5hMjQxMmQxOWE5NjhhNTY0ZTg2NjE4YTE3ODIwZDY0MGJh
OWZiZjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVt
YmVyRm9ybWF0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVt
YmVyRm9ybWF0LmNwcApAQCAtMjc0LDcgKzI3NCw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6
aW5pdGlhbGl6ZU51bWJlckZvcm1hdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
CiAgICAgYXV0byByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChnbG9i
YWxPYmplY3QsIGxvY2FsZXMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQo
KSk7CiAKLSAgICBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlvbnMgPSBpbnRsQ29lcmNlT3B0aW9u
c1RvT2JqZWN0KGdsb2JhbE9iamVjdCwgb3B0aW9uc1ZhbHVlKTsKKyAgICBKU09iamVjdCogb3B0
aW9ucyA9IGludGxDb2VyY2VPcHRpb25zVG9PYmplY3QoZ2xvYmFsT2JqZWN0LCBvcHRpb25zVmFs
dWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICBSZXNv
bHZlTG9jYWxlT3B0aW9ucyBsb2NhbGVPcHRpb25zOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oCmluZGV4IDZmNmJhNjJlY2JmMWIzYzNkMzA4
ZmVhNjFjNjYyYzAyMTE5Yjc4N2QuLjM4YTc3MGM1OWQ0MTA3MDBmODljNDlmNzY5YTkxNDlkYmNh
ODU3ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1i
ZXJGb3JtYXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVy
Rm9ybWF0LmgKQEAgLTUwLDcgKzUwLDcgQEAgZW51bSBjbGFzcyBSZWxldmFudEV4dGVuc2lvbktl
eSA6IHVpbnQ4X3Q7CiAKIGVudW0gY2xhc3MgSW50bFJvdW5kaW5nVHlwZSA6IHVpbnQ4X3QgeyBG
cmFjdGlvbkRpZ2l0cywgU2lnbmlmaWNhbnREaWdpdHMsIENvbXBhY3RSb3VuZGluZyB9OwogZW51
bSBjbGFzcyBJbnRsTm90YXRpb24gOiB1aW50OF90IHsgU3RhbmRhcmQsIFNjaWVudGlmaWMsIEVu
Z2luZWVyaW5nLCBDb21wYWN0IH07Ci10ZW1wbGF0ZTx0eXBlbmFtZSBJbnRsVHlwZT4gdm9pZCBz
ZXROdW1iZXJGb3JtYXREaWdpdE9wdGlvbnMoSlNHbG9iYWxPYmplY3QqLCBJbnRsVHlwZSosIE9w
dGlvbmFsPEpTT2JqZWN0Jj4sIHVuc2lnbmVkIG1pbmltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQs
IHVuc2lnbmVkIG1heGltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQsIEludGxOb3RhdGlvbik7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBJbnRsVHlwZT4gdm9pZCBzZXROdW1iZXJGb3JtYXREaWdpdE9wdGlv
bnMoSlNHbG9iYWxPYmplY3QqLCBJbnRsVHlwZSosIEpTT2JqZWN0KiwgdW5zaWduZWQgbWluaW11
bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCwgdW5zaWduZWQgbWF4aW11bUZyYWN0aW9uRGlnaXRzRGVm
YXVsdCwgSW50bE5vdGF0aW9uKTsKIAogY2xhc3MgSW50bE51bWJlckZvcm1hdCBmaW5hbCA6IHB1
YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTg4LDcgKzg4LDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyB2b2lkIGZvcm1hdFRvUGFydHNJbnRlcm5hbChKU0dsb2JhbE9iamVjdCos
IFN0eWxlLCBkb3VibGUsIGNvbnN0IFN0cmluZyYgZm9ybWF0dGVkLCBJbnRsRmllbGRJdGVyYXRv
ciYsIEpTQXJyYXkqLCBKU1N0cmluZyogdW5pdCA9IG51bGxwdHIpOwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgSW50bFR5cGU+Ci0gICAgZnJpZW5kIHZvaWQgc2V0TnVtYmVyRm9ybWF0RGlnaXRP
cHRpb25zKEpTR2xvYmFsT2JqZWN0KiwgSW50bFR5cGUqLCBPcHRpb25hbDxKU09iamVjdCY+LCB1
bnNpZ25lZCBtaW5pbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0LCB1bnNpZ25lZCBtYXhpbXVtRnJh
Y3Rpb25EaWdpdHNEZWZhdWx0LCBJbnRsTm90YXRpb24pOworICAgIGZyaWVuZCB2b2lkIHNldE51
bWJlckZvcm1hdERpZ2l0T3B0aW9ucyhKU0dsb2JhbE9iamVjdCosIEludGxUeXBlKiwgSlNPYmpl
Y3QqLCB1bnNpZ25lZCBtaW5pbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0LCB1bnNpZ25lZCBtYXhp
bXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0LCBJbnRsTm90YXRpb24pOwogCiAgICAgc3RhdGljIEFT
Q0lJTGl0ZXJhbCBub3RhdGlvblN0cmluZyhJbnRsTm90YXRpb24pOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0SW5saW5lcy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdElubGluZXMuaApp
bmRleCA0MTA0YjU4NjNhMzM4ZTgzZmU1NGIxZmNkZWJlNzU1MGJkZmRjNDU0Li4yM2QzODYzZDE2
MDA0MzFlZjc0ZGY0MGM4NzQ0NzE3NjZkMDUxNjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0SW5saW5lcy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRJbmxpbmVzLmgKQEAgLTMzLDcg
KzMzLDcgQEAKIG5hbWVzcGFjZSBKU0MgIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgSW50bFR5cGU+
Ci12b2lkIHNldE51bWJlckZvcm1hdERpZ2l0T3B0aW9ucyhKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBJbnRsVHlwZSogaW50bEluc3RhbmNlLCBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlv
bnMsIHVuc2lnbmVkIG1pbmltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQsIHVuc2lnbmVkIG1heGlt
dW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQsIEludGxOb3RhdGlvbiBub3RhdGlvbikKK3ZvaWQgc2V0
TnVtYmVyRm9ybWF0RGlnaXRPcHRpb25zKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIElu
dGxUeXBlKiBpbnRsSW5zdGFuY2UsIEpTT2JqZWN0KiBvcHRpb25zLCB1bnNpZ25lZCBtaW5pbXVt
RnJhY3Rpb25EaWdpdHNEZWZhdWx0LCB1bnNpZ25lZCBtYXhpbXVtRnJhY3Rpb25EaWdpdHNEZWZh
dWx0LCBJbnRsTm90YXRpb24gbm90YXRpb24pCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAKaW5kZXggZDVhY2NlMDM0
NmU5ZWVmMDJjMzFjYzMxYzFjMzQ0YWE3YzUwM2MzYS4uYzY3ZDU0MmYyYjlkMTgzNmVmM2FiNWNj
YjNlNzhiMmIzNDFhNTA5YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bE9iamVjdC5jcHAKQEAgLTUyMyw3ICs1MjMsNyBAQCBjb25zdCBMb2NhbGVTZXQmIGludGxTZWdt
ZW50ZXJBdmFpbGFibGVMb2NhbGVzKCkKIH0KIAogLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWE0MDIv
I3NlYy1nZXRvcHRpb24KLVRyaVN0YXRlIGludGxCb29sZWFuT3B0aW9uKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIE9wdGlvbmFsPEpTT2JqZWN0Jj4gb3B0aW9ucywgUHJvcGVydHlOYW1l
IHByb3BlcnR5KQorVHJpU3RhdGUgaW50bEJvb2xlYW5PcHRpb24oSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNPYmplY3QqIG9wdGlvbnMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eSkKIHsK
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNTQwLDcgKzU0MCw3IEBAIFRyaVN0YXRlIGludGxCb29s
ZWFuT3B0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE9wdGlvbmFsPEpTT2JqZWN0
Jj4gb3B0CiAgICAgcmV0dXJuIHRyaVN0YXRlKHZhbHVlLnRvQm9vbGVhbihnbG9iYWxPYmplY3Qp
KTsKIH0KIAotU3RyaW5nIGludGxTdHJpbmdPcHRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgT3B0aW9uYWw8SlNPYmplY3QmPiBvcHRpb25zLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHks
IHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxjb25zdCBjaGFyKj4gdmFsdWVzLCBjb25zdCBjaGFyKiBu
b3RGb3VuZCwgY29uc3QgY2hhciogZmFsbGJhY2spCitTdHJpbmcgaW50bFN0cmluZ09wdGlvbihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb3B0aW9ucywgUHJvcGVydHlO
YW1lIHByb3BlcnR5LCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Y29uc3QgY2hhcio+IHZhbHVlcywg
Y29uc3QgY2hhciogbm90Rm91bmQsIGNvbnN0IGNoYXIqIGZhbGxiYWNrKQogewogICAgIC8vIEdl
dE9wdGlvbiAob3B0aW9ucywgcHJvcGVydHksIHR5cGU9InN0cmluZyIsIHZhbHVlcywgZmFsbGJh
Y2spCiAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hNDAyLyNzZWMtZ2V0b3B0aW9u
CkBAIC01NjgsNyArNTY4LDcgQEAgU3RyaW5nIGludGxTdHJpbmdPcHRpb24oSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgT3B0aW9uYWw8SlNPYmplY3QmPiBvcHRpb24KICAgICByZXR1cm4g
ZmFsbGJhY2s7CiB9CiAKLXVuc2lnbmVkIGludGxOdW1iZXJPcHRpb24oSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgT3B0aW9uYWw8SlNPYmplY3QmPiBvcHRpb25zLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHksIHVuc2lnbmVkIG1pbmltdW0sIHVuc2lnbmVkIG1heGltdW0sIHVuc2lnbmVkIGZh
bGxiYWNrKQordW5zaWduZWQgaW50bE51bWJlck9wdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU09iamVjdCogb3B0aW9ucywgUHJvcGVydHlOYW1lIHByb3BlcnR5LCB1bnNpZ25l
ZCBtaW5pbXVtLCB1bnNpZ25lZCBtYXhpbXVtLCB1bnNpZ25lZCBmYWxsYmFjaykKIHsKICAgICAv
LyBHZXROdW1iZXJPcHRpb24gKG9wdGlvbnMsIHByb3BlcnR5LCBtaW5pbXVtLCBtYXhpbXVtLCBm
YWxsYmFjaykKICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWE0MDIvI3NlYy1nZXRu
dW1iZXJvcHRpb24KQEAgLTk2Miw3ICs5NjIsNyBAQCBKU1ZhbHVlIHN1cHBvcnRlZExvY2FsZXMo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgTG9jYWxlU2V0JiBhdmFpbGFibAog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBTdHJpbmcgbWF0
Y2hlcjsKIAotICAgIE9wdGlvbmFsPEpTT2JqZWN0Jj4gb3B0aW9ucyA9IGludGxDb2VyY2VPcHRp
b25zVG9PYmplY3QoZ2xvYmFsT2JqZWN0LCBvcHRpb25zVmFsdWUpOworICAgIEpTT2JqZWN0KiBv
cHRpb25zID0gaW50bENvZXJjZU9wdGlvbnNUb09iamVjdChnbG9iYWxPYmplY3QsIG9wdGlvbnNW
YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAg
IExvY2FsZU1hdGNoZXIgbG9jYWxlTWF0Y2hlciA9IGludGxPcHRpb248TG9jYWxlTWF0Y2hlcj4o
Z2xvYmFsT2JqZWN0LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGVNYXRjaGVyLCB7
IHsgImxvb2t1cCJfcywgTG9jYWxlTWF0Y2hlcjo6TG9va3VwIH0sIHsgImJlc3QgZml0Il9zLCBM
b2NhbGVNYXRjaGVyOjpCZXN0Rml0IH0gfSwgImxvY2FsZU1hdGNoZXIgbXVzdCBiZSBlaXRoZXIg
XCJsb29rdXBcIiBvciBcImJlc3QgZml0XCIiX3MsIExvY2FsZU1hdGNoZXI6OkJlc3RGaXQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5oCmluZGV4IGU5M2M5YmU4
NDQ4MWVlZjRjM2Y3NWY3NjM1ZDk4MTZmMWU4N2RhOTcuLjk1ZWI3YmI3OTliNWU3MjgyMTg1M2Y5
YTliYTRiYjI5MDIxYmQwNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
T2JqZWN0LmgKQEAgLTk0LDkgKzk0LDkgQEAgaW5saW5lIGNvbnN0IExvY2FsZVNldCYgaW50bFBs
dXJhbFJ1bGVzQXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGUKIGlubGlu
ZSBjb25zdCBMb2NhbGVTZXQmIGludGxSZWxhdGl2ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVz
KCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQogaW5saW5lIGNvbnN0IExvY2Fs
ZVNldCYgaW50bExpc3RGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWls
YWJsZUxvY2FsZXMoKTsgfQogCi1UcmlTdGF0ZSBpbnRsQm9vbGVhbk9wdGlvbihKU0dsb2JhbE9i
amVjdCosIE9wdGlvbmFsPEpTT2JqZWN0Jj4gb3B0aW9ucywgUHJvcGVydHlOYW1lKTsKLVN0cmlu
ZyBpbnRsU3RyaW5nT3B0aW9uKEpTR2xvYmFsT2JqZWN0KiwgT3B0aW9uYWw8SlNPYmplY3QmPiBv
cHRpb25zLCBQcm9wZXJ0eU5hbWUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxjb25zdCBjaGFyKj4g
dmFsdWVzLCBjb25zdCBjaGFyKiBub3RGb3VuZCwgY29uc3QgY2hhciogZmFsbGJhY2spOwotdW5z
aWduZWQgaW50bE51bWJlck9wdGlvbihKU0dsb2JhbE9iamVjdCosIE9wdGlvbmFsPEpTT2JqZWN0
Jj4gb3B0aW9ucywgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBtaW5pbXVtLCB1bnNpZ25lZCBtYXhp
bXVtLCB1bnNpZ25lZCBmYWxsYmFjayk7CitUcmlTdGF0ZSBpbnRsQm9vbGVhbk9wdGlvbihKU0ds
b2JhbE9iamVjdCosIEpTT2JqZWN0KiBvcHRpb25zLCBQcm9wZXJ0eU5hbWUpOworU3RyaW5nIGlu
dGxTdHJpbmdPcHRpb24oSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogb3B0aW9ucywgUHJvcGVy
dHlOYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Y29uc3QgY2hhcio+IHZhbHVlcywgY29uc3Qg
Y2hhciogbm90Rm91bmQsIGNvbnN0IGNoYXIqIGZhbGxiYWNrKTsKK3Vuc2lnbmVkIGludGxOdW1i
ZXJPcHRpb24oSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogb3B0aW9ucywgUHJvcGVydHlOYW1l
LCB1bnNpZ25lZCBtaW5pbXVtLCB1bnNpZ25lZCBtYXhpbXVtLCB1bnNpZ25lZCBmYWxsYmFjayk7
CiB1bnNpZ25lZCBpbnRsRGVmYXVsdE51bWJlck9wdGlvbihKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgbWluaW11bSwgdW5zaWduZWQgbWF4aW11bSwgdW5z
aWduZWQgZmFsbGJhY2spOwogVmVjdG9yPGNoYXIsIDMyPiBsb2NhbGVJREJ1ZmZlckZvckxhbmd1
YWdlVGFnV2l0aE51bGxUZXJtaW5hdG9yKGNvbnN0IENTdHJpbmcmKTsKIFN0cmluZyBsYW5ndWFn
ZVRhZ0ZvckxvY2FsZUlEKGNvbnN0IGNoYXIqLCBib29sIGlzSW1tb3J0YWwgPSBmYWxzZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0SW5saW5l
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdElubGluZXMuaApp
bmRleCAyYWRiODViNTQxMWVjNzU0ZmQ3NzliNjM2NjQwMjViNWIyZjk1MWQwLi5kOGIwYWJhNjI3
MjRlYjU1ZmJlNWFmZDc2NTdlNGNhNTUyYTFiNGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0SW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3RJbmxpbmVzLmgKQEAgLTEyMCw3ICsxMjAsNyBAQCBJ
bnN0YW5jZVR5cGUqIHVud3JhcEZvckxlZ2FjeUludGxDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBl
PgotUmVzdWx0VHlwZSBpbnRsT3B0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE9w
dGlvbmFsPEpTT2JqZWN0Jj4gb3B0aW9ucywgUHJvcGVydHlOYW1lIHByb3BlcnR5LCBzdGQ6Omlu
aXRpYWxpemVyX2xpc3Q8c3RkOjpwYWlyPEFTQ0lJTGl0ZXJhbCwgUmVzdWx0VHlwZT4+IHZhbHVl
cywgQVNDSUlMaXRlcmFsIG5vdEZvdW5kTWVzc2FnZSwgUmVzdWx0VHlwZSBmYWxsYmFjaykKK1Jl
c3VsdFR5cGUgaW50bE9wdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVj
dCogb3B0aW9ucywgUHJvcGVydHlOYW1lIHByb3BlcnR5LCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8
c3RkOjpwYWlyPEFTQ0lJTGl0ZXJhbCwgUmVzdWx0VHlwZT4+IHZhbHVlcywgQVNDSUlMaXRlcmFs
IG5vdEZvdW5kTWVzc2FnZSwgUmVzdWx0VHlwZSBmYWxsYmFjaykKIHsKICAgICAvLyBHZXRPcHRp
b24gKG9wdGlvbnMsIHByb3BlcnR5LCB0eXBlPSJzdHJpbmciLCB2YWx1ZXMsIGZhbGxiYWNrKQog
ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTQwMi8jc2VjLWdldG9wdGlvbgpAQCAt
MjAxLDI4ICsyMDEsMjggQEAgaW5saW5lIFVDb2xsYXRpb25SZXN1bHQgY29tcGFyZUFTQ0lJV2l0
aFVDQURVQ0VUKGNvbnN0IENoYXJhY3RlclR5cGUxKiBjaGFyYWN0ZXIKIH0KIAogLy8gaHR0cHM6
Ly90YzM5LmVzL2VjbWE0MDIvI3NlYy1nZXRvcHRpb25zb2JqZWN0Ci1pbmxpbmUgT3B0aW9uYWw8
SlNPYmplY3QmPiBpbnRsR2V0T3B0aW9uc09iamVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIG9wdGlvbnMpCitpbmxpbmUgSlNPYmplY3QqIGludGxHZXRPcHRpb25zT2Jq
ZWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgb3B0aW9ucykKIHsKICAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIGlmIChvcHRpb25zLmlzVW5kZWZpbmVkKCkpCi0gICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChM
SUtFTFkob3B0aW9ucy5pc09iamVjdCgpKSkKLSAgICAgICAgcmV0dXJuICphc09iamVjdChvcHRp
b25zKTsKKyAgICAgICAgcmV0dXJuIGFzT2JqZWN0KG9wdGlvbnMpOwogICAgIHRocm93VHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJvcHRpb25zIGFyZ3VtZW50IGlzIG5vdCBhbiBvYmpl
Y3Qgb3IgdW5kZWZpbmVkIl9zKTsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVy
biBudWxscHRyOwogfQogCiAvLyBodHRwczovL3RjMzkuZXMvZWNtYTQwMi8jc2VjLWNvZXJjZW9w
dGlvbnN0b29iamVjdAotaW5saW5lIE9wdGlvbmFsPEpTT2JqZWN0Jj4gaW50bENvZXJjZU9wdGlv
bnNUb09iamVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG9wdGlvbnNW
YWx1ZSkKK2lubGluZSBKU09iamVjdCogaW50bENvZXJjZU9wdGlvbnNUb09iamVjdChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG9wdGlvbnNWYWx1ZSkKIHsKICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIGlmIChvcHRpb25zVmFsdWUuaXNVbmRlZmluZWQoKSkKLSAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgSlNPYmpl
Y3QqIG9wdGlvbnMgPSBvcHRpb25zVmFsdWUudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBXVEY6Om51bGxvcHQpOwotICAgIHJldHVybiAqb3B0
aW9uczsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKyAgICByZXR1
cm4gb3B0aW9uczsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcAppbmRleCBjY2NmNDk3MTU4MThk
ZmQzMDI2OGEzMTdhZGFkYjhlOGRjYmFmNTM4Li5kOGJjOTY2OWZjYmFjMmUyMDlhZTQ1NGQ2MmJm
YzNkMjhhMzVlNDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsUGx1cmFsUnVsZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxQbHVyYWxSdWxlcy5jcHAKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBJbnRsUGx1cmFsUnVsZXM6
OmluaXRpYWxpemVQbHVyYWxSdWxlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHUKICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9j
YWxlTGlzdChnbG9iYWxPYmplY3QsIGxvY2FsZXMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHZvaWQoKSk7CiAKLSAgICBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlvbnMgPSBpbnRs
Q29lcmNlT3B0aW9uc1RvT2JqZWN0KGdsb2JhbE9iamVjdCwgb3B0aW9uc1ZhbHVlKTsKKyAgICBK
U09iamVjdCogb3B0aW9ucyA9IGludGxDb2VyY2VPcHRpb25zVG9PYmplY3QoZ2xvYmFsT2JqZWN0
LCBvcHRpb25zVmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
CiAKICAgICBSZXNvbHZlTG9jYWxlT3B0aW9ucyBsb2NhbGVPcHRpb25zOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuaAppbmRleCBlMjllMWI2MjZk
MzFjOTA4MjZkNDdmMmQ2YmI1YWMxMzdhNWJmYjVlLi42ZDNhY2FiODRlODE0ZTVmN2MwN2QwMjRm
M2UyNWZmMmU1ZjBmNmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsUGx1cmFsUnVsZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsUGx1cmFsUnVsZXMuaApAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9J
TkZPOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50bFR5cGU+Ci0gICAgZnJpZW5kIHZvaWQg
c2V0TnVtYmVyRm9ybWF0RGlnaXRPcHRpb25zKEpTR2xvYmFsT2JqZWN0KiwgSW50bFR5cGUqLCBP
cHRpb25hbDxKU09iamVjdCY+LCB1bnNpZ25lZCBtaW5pbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0
LCB1bnNpZ25lZCBtYXhpbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0LCBJbnRsTm90YXRpb24pOwor
ICAgIGZyaWVuZCB2b2lkIHNldE51bWJlckZvcm1hdERpZ2l0T3B0aW9ucyhKU0dsb2JhbE9iamVj
dCosIEludGxUeXBlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCBtaW5pbXVtRnJhY3Rpb25EaWdpdHNE
ZWZhdWx0LCB1bnNpZ25lZCBtYXhpbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0LCBJbnRsTm90YXRp
b24pOwogCiAgICAgdm9pZCBpbml0aWFsaXplUGx1cmFsUnVsZXMoSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlIGxvY2FsZXMsIEpTVmFsdWUgb3B0aW9ucyk7CiAgICAgSlNWYWx1ZSBzZWxlY3QoSlNH
bG9iYWxPYmplY3QqLCBkb3VibGUgdmFsdWUpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAppbmRleCAy
YjVkMjhlZmQ4Y2U4ZjI3ZDY1NzU4NTAyYTMxMDk4MDViNzA3M2RlLi5iODljYWU4NjYyYTEwNjY5
MTZhZGRjN2MzYjFkYTU2MzdmMzVjOGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcApAQCAtODksNyArODks
NyBAQCB2b2lkIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVSZWxhdGl2ZVRpbWVG
b3JtYXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbAogICAgIFZlY3RvcjxTdHJpbmc+IHJlcXVlc3Rl
ZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KGdsb2JhbE9iamVjdCwgbG9jYWxlcyk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAotICAgIE9wdGlvbmFs
PEpTT2JqZWN0Jj4gb3B0aW9ucyA9IGludGxDb2VyY2VPcHRpb25zVG9PYmplY3QoZ2xvYmFsT2Jq
ZWN0LCBvcHRpb25zVmFsdWUpOworICAgIEpTT2JqZWN0KiBvcHRpb25zID0gaW50bENvZXJjZU9w
dGlvbnNUb09iamVjdChnbG9iYWxPYmplY3QsIG9wdGlvbnNWYWx1ZSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIFJlc29sdmVMb2NhbGVPcHRpb25zIGxv
Y2FsZU9wdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsU2VnbWVudGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdt
ZW50ZXIuY3BwCmluZGV4IDcyYTgzYzA4Y2QzNDIzNzVjYTE0NmI4Nzc2ODcyZGY5MGM4YzZiZTYu
LjEwZDlhYWZlYWM0M2Y4N2MzMDM3MWI2MDBmZmFkYjViZmZkMGQ1MTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50ZXIuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50ZXIuY3BwCkBAIC02OCw3ICs2OCw3
IEBAIHZvaWQgSW50bFNlZ21lbnRlcjo6aW5pdGlhbGl6ZVNlZ21lbnRlcihKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGxvCiAgICAgYXV0byByZXF1ZXN0ZWRMb2NhbGVzID0g
Y2Fub25pY2FsaXplTG9jYWxlTGlzdChnbG9iYWxPYmplY3QsIGxvY2FsZXMpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKLSAgICBPcHRpb25hbDxKU09iamVjdCY+
IG9wdGlvbnMgPSBpbnRsR2V0T3B0aW9uc09iamVjdChnbG9iYWxPYmplY3QsIG9wdGlvbnNWYWx1
ZSk7CisgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBpbnRsR2V0T3B0aW9uc09iamVjdChnbG9iYWxP
YmplY3QsIG9wdGlvbnNWYWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9p
ZCgpKTsKIAogICAgIFJlc29sdmVMb2NhbGVPcHRpb25zIGxvY2FsZU9wdGlvbnM7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmggYi9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgK
aW5kZXggYzQ3Y2M1ZGM3ZDhiMDcxYTIxZWIzZjdiYTI4Mzk5ODVlMWNkYjNlZi4uYzUxZjY3YWYw
MmFmZDZhNzY4YmRiNTFlM2E3YjY2YzFhMWJlMDZkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvRm9yd2FyZC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMSw2ICsyMSw3IEBACiAj
cHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTcw
LDcgKzcxLDYgQEAgdGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIEZ1bmN0aW9uOwogdGVtcGxhdGU8
dHlwZW5hbWUsIHR5cGVuYW1lID0gQW55VGhyZWFkc0FjY2Vzc1RyYWl0cz4gY2xhc3MgTGF6eU5l
dmVyRGVzdHJveWVkOwogdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lID0gQW55VGhyZWFkc0Fj
Y2Vzc1RyYWl0cz4gY2xhc3MgTmV2ZXJEZXN0cm95ZWQ7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xh
c3MgT3B0aW9uU2V0OwotdGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIE9wdGlvbmFsOwogdGVtcGxh
dGU8dHlwZW5hbWU+IGNsYXNzIFBhY2tlZDsKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCA9
IGFsaWdub2YoVCk+IGNsYXNzIFBhY2tlZEFsaWduZWRQdHI7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4g
c3RydWN0IFJhd1B0clRyYWl0czsKQEAgLTEzNiw3ICsxMzYsNiBAQCB1c2luZyBXVEY6OkxvY2s7
CiB1c2luZyBXVEY6OkxvZ2dlcjsKIHVzaW5nIFdURjo6TmV2ZXJEZXN0cm95ZWQ7CiB1c2luZyBX
VEY6Ok9wdGlvblNldDsKLXVzaW5nIFdURjo6T3B0aW9uYWw7CiB1c2luZyBXVEY6Ok9yZGluYWxO
dW1iZXI7CiB1c2luZyBXVEY6OlByaW50U3RyZWFtOwogdXNpbmcgV1RGOjpSYXdQdHJUcmFpdHM7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5oIGIvU291cmNlL1dURi93dGYv
T3B0aW9uYWwuaAppbmRleCA2N2FiYTExYWYxOTczYTM5NTFmNWMzM2M1MDZkMjA5ZjdhNmI1ZmFh
Li5lOTU4YWMzNjk3OTRkNjJmYjBjN2IyYmViZWY5YjkzMzQ3ZjY4ZDI2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmgK
QEAgLTEsMTA0NyArMSw1MiBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDExIC0gMjAxMiBBbmRyemVq
IEtyemVtaWVuc2tpLgotLy8KLS8vIFVzZSwgbW9kaWZpY2F0aW9uLCBhbmQgZGlzdHJpYnV0aW9u
IGlzIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlCi0vLyBMaWNlbnNlLCBWZXJzaW9uIDEu
MC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8g
aHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFRoZSBpZGVhIGFu
ZCBpbnRlcmZhY2UgaXMgYmFzZWQgb24gQm9vc3QuT3B0aW9uYWwgbGlicmFyeQotLy8gYXV0aG9y
ZWQgYnkgRmVybmFuZG8gTHVpcyBDYWNjaW9sYSBDYXJiYWxsYWwKLS8vCi0vLyBCb29zdCBTb2Z0
d2FyZSBMaWNlbnNlIC0gVmVyc2lvbiAxLjAgLSBBdWd1c3QgMTd0aCwgMjAwMwotLy8KLS8vIFBl
cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u
IG9yIG9yZ2FuaXphdGlvbgotLy8gb2J0YWluaW5nIGEgY29weSBvZiB0aGUgc29mdHdhcmUgYW5k
IGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGNvdmVyZWQgYnkKLS8vIHRoaXMgbGljZW5zZSAo
dGhlICJTb2Z0d2FyZSIpIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBkaXN0cmlidXRlLAot
Ly8gZXhlY3V0ZSwgYW5kIHRyYW5zbWl0IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHByZXBhcmUgZGVy
aXZhdGl2ZSB3b3JrcyBvZiB0aGUKLS8vIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHRoaXJkLXBh
cnRpZXMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvCi0vLyBkbyBzbywgYWxs
IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZzoKLS8vCi0vLyBUaGUgY29weXJpZ2h0IG5vdGljZXMg
aW4gdGhlIFNvZnR3YXJlIGFuZCB0aGlzIGVudGlyZSBzdGF0ZW1lbnQsIGluY2x1ZGluZwotLy8g
dGhlIGFib3ZlIGxpY2Vuc2UgZ3JhbnQsIHRoaXMgcmVzdHJpY3Rpb24gYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciwKLS8vIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiB0aGUg
U29mdHdhcmUsIGluIHdob2xlIG9yIGluIHBhcnQsIGFuZAotLy8gYWxsIGRlcml2YXRpdmUgd29y
a3Mgb2YgdGhlIFNvZnR3YXJlLCB1bmxlc3Mgc3VjaCBjb3BpZXMgb3IgZGVyaXZhdGl2ZQotLy8g
d29ya3MgYXJlIHNvbGVseSBpbiB0aGUgZm9ybSBvZiBtYWNoaW5lLWV4ZWN1dGFibGUgb2JqZWN0
IGNvZGUgZ2VuZXJhdGVkIGJ5Ci0vLyBhIHNvdXJjZSBsYW5ndWFnZSBwcm9jZXNzb3IuCi0vLwot
Ly8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg
QU5ZIEtJTkQsIEVYUFJFU1MgT1IKLS8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU
RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotLy8gRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UsIFRJVExFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBF
VkVOVAotLy8gU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIEFOWU9ORSBESVNUUklCVVRJ
TkcgVEhFIFNPRlRXQVJFIEJFIExJQUJMRQotLy8gRk9SIEFOWSBEQU1BR0VTIE9SIE9USEVSIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCi0vLyBBUklT
SU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI
RSBVU0UgT1IgT1RIRVIKLS8vIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLQotLy8gQ29waWVk
IGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2FrcnplbWkxL09wdGlvbmFsICg4NDU2YzM5MjM3NzZi
MzNiNGFlODUyNzM0MjczZmU5MzRjM2U0ZTYxKQotCi0vLyBNb2RpZmllZCB0byBtYWtlIGl0IGNv
bXBpbGUgd2l0aCBleGNlcHRpb25zIGRpc2FibGVkLgorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KIAogI3ByYWdt
YSBvbmNlCiAKLSMgaW5jbHVkZSA8dXRpbGl0eT4KLSMgaW5jbHVkZSA8dHlwZV90cmFpdHM+Ci0j
IGluY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+Ci0jIGluY2x1ZGUgPGNhc3NlcnQ+Ci0jIGluY2x1
ZGUgPHN0cmluZz4KLSMgaW5jbHVkZSA8c3RkZXhjZXB0PgotIyBpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgotIyBpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KLSMgaW5jbHVkZSA8d3RmL0Zhc3RN
YWxsb2MuaD4KLSMgaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCi0jIGRlZmluZSBUUjJf
T1BUSU9OQUxfUkVRVUlSRVMoLi4uKSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxfX1ZBX0FSR1Nf
Xzo6dmFsdWUsIGJvb2w+Ojp0eXBlID0gZmFsc2UKLQotIyBpZiBkZWZpbmVkIF9fR05VQ19fIC8v
IE5PVEU6IEdOVUMgaXMgYWxzbyBkZWZpbmVkIGZvciBDbGFuZwotIyAgIGlmIChfX0dOVUNfXyA9
PSA0KSAmJiAoX19HTlVDX01JTk9SX18gPj0gOCkKLSMgICAgIGRlZmluZSBUUjJfT1BUSU9OQUxf
R0NDXzRfOF9BTkRfSElHSEVSX19fCi0jICAgZWxpZiAoX19HTlVDX18gPiA0KQotIyAgICAgZGVm
aW5lIFRSMl9PUFRJT05BTF9HQ0NfNF84X0FORF9ISUdIRVJfX18KLSMgICBlbmRpZgotIwotIyAg
IGlmIChfX0dOVUNfXyA9PSA0KSAmJiAoX19HTlVDX01JTk9SX18gPj0gNykKLSMgICAgIGRlZmlu
ZSBUUjJfT1BUSU9OQUxfR0NDXzRfN19BTkRfSElHSEVSX19fCi0jICAgZWxpZiAoX19HTlVDX18g
PiA0KQotIyAgICAgZGVmaW5lIFRSMl9PUFRJT05BTF9HQ0NfNF83X0FORF9ISUdIRVJfX18KLSMg
ICBlbmRpZgotIwotIyAgIGlmIChfX0dOVUNfXyA9PSA0KSAmJiAoX19HTlVDX01JTk9SX18gPT0g
OCkgJiYgKF9fR05VQ19QQVRDSExFVkVMX18gPj0gMSkKLSMgICAgIGRlZmluZSBUUjJfT1BUSU9O
QUxfR0NDXzRfOF8xX0FORF9ISUdIRVJfX18KLSMgICBlbGlmIChfX0dOVUNfXyA9PSA0KSAmJiAo
X19HTlVDX01JTk9SX18gPj0gOSkKLSMgICAgIGRlZmluZSBUUjJfT1BUSU9OQUxfR0NDXzRfOF8x
X0FORF9ISUdIRVJfX18KLSMgICBlbGlmIChfX0dOVUNfXyA+IDQpCi0jICAgICBkZWZpbmUgVFIy
X09QVElPTkFMX0dDQ180XzhfMV9BTkRfSElHSEVSX19fCi0jICAgZW5kaWYKLSMgZW5kaWYKLSMK
LSMgaWYgZGVmaW5lZCBfX2NsYW5nX21ham9yX18KLSMgICBpZiAoX19jbGFuZ19tYWpvcl9fID09
IDMgJiYgX19jbGFuZ19taW5vcl9fID49IDUpCi0jICAgICBkZWZpbmUgVFIyX09QVElPTkFMX0NM
QU5HXzNfNV9BTkRfSElHSFRFUl8KLSMgICBlbGlmIChfX2NsYW5nX21ham9yX18gPiAzKQotIyAg
ICAgZGVmaW5lIFRSMl9PUFRJT05BTF9DTEFOR18zXzVfQU5EX0hJR0hURVJfCi0jICAgZW5kaWYK
LSMgICBpZiBkZWZpbmVkIFRSMl9PUFRJT05BTF9DTEFOR18zXzVfQU5EX0hJR0hURVJfCi0jICAg
ICBkZWZpbmUgVFIyX09QVElPTkFMX0NMQU5HXzNfNF8yX0FORF9ISUdIRVJfCi0jICAgZWxpZiAo
X19jbGFuZ19tYWpvcl9fID09IDMgJiYgX19jbGFuZ19taW5vcl9fID09IDQgJiYgX19jbGFuZ19w
YXRjaGxldmVsX18gPj0gMikKLSMgICAgIGRlZmluZSBUUjJfT1BUSU9OQUxfQ0xBTkdfM180XzJf
QU5EX0hJR0hFUl8KLSMgICBlbmRpZgotIyBlbmRpZgotIwotIyBpZiBkZWZpbmVkIF9NU0NfVkVS
Ci0jICAgaWYgKF9NU0NfVkVSID49IDE5MDApCi0jICAgICBkZWZpbmUgVFIyX09QVElPTkFMX01T
VkNfMjAxNV9BTkRfSElHSEVSX19fCi0jICAgZW5kaWYKLSMgZW5kaWYKLQotIyBpZiBkZWZpbmVk
IF9fY2xhbmdfXwotIyAgIGlmIChfX2NsYW5nX21ham9yX18gPiAyKSB8fCAoX19jbGFuZ19tYWpv
cl9fID09IDIpICYmIChfX2NsYW5nX21pbm9yX18gPj0gOSkKLSMgICAgIGRlZmluZSBPUFRJT05B
TF9IQVNfVEhJU19SVkFMVUVfUkVGUyAxCi0jICAgZWxzZQotIyAgICAgZGVmaW5lIE9QVElPTkFM
X0hBU19USElTX1JWQUxVRV9SRUZTIDAKLSMgICBlbmRpZgotIyBlbGlmIGRlZmluZWQgVFIyX09Q
VElPTkFMX0dDQ180XzhfMV9BTkRfSElHSEVSX19fCi0jICAgZGVmaW5lIE9QVElPTkFMX0hBU19U
SElTX1JWQUxVRV9SRUZTIDEKLSMgZWxpZiBkZWZpbmVkIFRSMl9PUFRJT05BTF9NU1ZDXzIwMTVf
QU5EX0hJR0hFUl9fXwotIyAgIGRlZmluZSBPUFRJT05BTF9IQVNfVEhJU19SVkFMVUVfUkVGUyAx
Ci0jIGVsc2UKLSMgICBkZWZpbmUgT1BUSU9OQUxfSEFTX1RISVNfUlZBTFVFX1JFRlMgMAotIyBl
bmRpZgotCi0KLSMgaWYgZGVmaW5lZCBUUjJfT1BUSU9OQUxfR0NDXzRfOF8xX0FORF9ISUdIRVJf
X18KLSMgICBkZWZpbmUgT1BUSU9OQUxfSEFTX0NPTlNURVhQUl9JTklUX0xJU1QgMQotIyAgIGRl
ZmluZSBPUFRJT05BTF9DT05TVEVYUFJfSU5JVF9MSVNUIGNvbnN0ZXhwcgotIyBlbHNlCi0jICAg
ZGVmaW5lIE9QVElPTkFMX0hBU19DT05TVEVYUFJfSU5JVF9MSVNUIDAKLSMgICBkZWZpbmUgT1BU
SU9OQUxfQ09OU1RFWFBSX0lOSVRfTElTVAotIyBlbmRpZgotCi0jIC8vIEluIEMrKzExIGNvbnN0
ZXhwciBpbXBsaWVzIGNvbnN0LCBzbyB3ZSBuZWVkIHRvIG1ha2Ugbm9uLWNvbnN0IG1lbWJlcnMg
YWxzbyBub24tY29uc3RleHByCi0jIGlmIChkZWZpbmVkIF9fY3BsdXNwbHVzKSAmJiAoX19jcGx1
c3BsdXMgPT0gMjAxMTAzTCkKLSMgICBkZWZpbmUgT1BUSU9OQUxfTVVUQUJMRV9DT05TVEVYUFIK
LSMgZWxzZQotIyAgIGRlZmluZSBPUFRJT05BTF9NVVRBQkxFX0NPTlNURVhQUiBjb25zdGV4cHIK
LSMgZW5kaWYKLQotI2lmIENPTVBJTEVSX1NVUFBPUlRTKEVYQ0VQVElPTlMpCi0jZGVmaW5lIF9f
VEhST1dfRVhDRVBUSU9OKF9fZXhjZXB0aW9uKSB0aHJvdyBfX2V4Y2VwdGlvbjsKLSNkZWZpbmUg
X19OT0VYQ0VQVCBub2V4Y2VwdAotI2RlZmluZSBfX05PRVhDRVBUXyhfX2V4Y2VwdGlvbikgbm9l
eGNlcHQoX19leGNlcHRpb24pCi0jZWxzZQotI2RlZmluZSBfX1RIUk9XX0VYQ0VQVElPTihfX2V4
Y2VwdGlvbikgZG8geyAodm9pZClfX2V4Y2VwdGlvbjsgQ1JBU0goKTsgfSB3aGlsZSAoMCk7Ci0j
ZGVmaW5lIF9fTk9FWENFUFQKLSNkZWZpbmUgX19OT0VYQ0VQVF8oLi4uKQotI2VuZGlmCisjaW5j
bHVkZSA8b3B0aW9uYWw+CiAKIG5hbWVzcGFjZSBXVEYgewotbmFtZXNwYWNlIGRldGFpbF8gewot
Ci0vLyBOT1RFOiBBbGwgb3VyIHRhcmdldCBjb21waWxlcnMgc3VwcG9ydCBpc190cml2aWFsbHlf
ZGVzdHJ1Y3RpYmxlLgotLy8gLy8gQkVHSU4gd29ya2Fyb3VuZCBmb3IgbWlzc2luZyBpc190cml2
aWFsbHlfZGVzdHJ1Y3RpYmxlCi0vLyAjIGlmIGRlZmluZWQgVFIyX09QVElPTkFMX0dDQ180Xzhf
QU5EX0hJR0hFUl9fXwotLy8gICAgIC8vIGxlYXZlIGl0OiBpdCBpcyBhbHJlYWR5IHRoZXJlCi0v
LyAjIGVsaWYgZGVmaW5lZCBUUjJfT1BUSU9OQUxfQ0xBTkdfM180XzJfQU5EX0hJR0hFUl8KLS8v
ICAgICAvLyBsZWF2ZSBpdDogaXQgaXMgYWxyZWFkeSB0aGVyZQotLy8gIyBlbGlmIGRlZmluZWQg
VFIyX09QVElPTkFMX01TVkNfMjAxNV9BTkRfSElHSEVSX19fCi0vLyAgICAgLy8gbGVhdmUgaXQ6
IGl0IGlzIGFscmVhZHkgdGhlcmUKLS8vICMgZWxpZiBkZWZpbmVkIFRSMl9PUFRJT05BTF9ESVNB
QkxFX0VNVUxBVElPTl9PRl9UWVBFX1RSQUlUUwotLy8gICAgIC8vIGxlYXZlIGl0OiB0aGUgdXNl
ciBkb2Vzbid0IHdhbnQgaXQKLS8vICMgZWxzZQotLy8gICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBU
PgotLy8gICAgIHVzaW5nIGlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGUgPSBzdGQ6Omhhc190cml2
aWFsX2Rlc3RydWN0b3I8VD47Ci0vLyAjIGVuZGlmCi0vLyAvLyBFTkQgd29ya2Fyb3VuZCBmb3Ig
bWlzc2luZyBpc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlCi0KLSNpZiBDT01QSUxFUl9TVVBQT1JU
UyhFWENFUFRJT05TKQotIyBpZiBkZWZpbmVkKFRSMl9PUFRJT05BTF9HQ0NfNF83X0FORF9ISUdI
RVJfX18pIHx8IGRlZmluZWQoVFIyX09QVElPTkFMX0NMQU5HXzNfNF8yX0FORF9ISUdIRVJfKSB8
fCBkZWZpbmVkKFRSMl9PUFRJT05BTF9NU1ZDXzIwMTVfQU5EX0hJR0hFUl9fXykKLSAgICAvLyBs
ZWF2ZSBpdDsgb3VyIG1ldGFmdW5jdGlvbnMgYXJlIGFscmVhZHkgZGVmaW5lZC4KLSAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KLSAgICB1c2luZyBpc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJs
ZSA9IHN0ZDo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8VD47Ci0gICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+Ci0gICAgdXNpbmcgaXNfbm90aHJvd19tb3ZlX2Fzc2lnbmFibGUgPSBzdGQ6
OmlzX25vdGhyb3dfbW92ZV9hc3NpZ25hYmxlPFQ+OwotIyBlbGlmIGRlZmluZWQgVFIyX09QVElP
TkFMX0RJU0FCTEVfRU1VTEFUSU9OX09GX1RZUEVfVFJBSVRTCi0gICAgLy8gbGVhdmUgaXQ6IHRo
ZSB1c2VyIGRvZXNuJ3Qgd2FudCBpdAotIyBlbHNlCi0KLQotLy8gd29ya2Fyb3VuZCBmb3IgbWlz
c2luZyB0cmFpdHMgaW4gR0NDIGFuZCBDTEFORwotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3Qg
aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGUKLXsKLSAgY29uc3RleHByIHN0YXRpYyBib29s
IHZhbHVlID0gc3RkOjppc19ub3Rocm93X2NvbnN0cnVjdGlibGU8VCwgVCYmPjo6dmFsdWU7Ci19
OwotCi0KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgotc3RydWN0IGlzX2Fzc2lnbmFibGUK
LXsKLSAgdGVtcGxhdGUgPGNsYXNzIFgsIGNsYXNzIFk+Ci0gIGNvbnN0ZXhwciBzdGF0aWMgYm9v
bCBoYXNfYXNzaWduKC4uLikgeyByZXR1cm4gZmFsc2U7IH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3Mg
WCwgY2xhc3MgWSwgc2l6ZV90IFMgPSBzaXplb2YoKHN0ZDo6ZGVjbHZhbDxYPigpID0gc3RkOjpk
ZWNsdmFsPFk+KCksIHRydWUpKSA+Ci0gIC8vIHRoZSBjb21tYSBvcGVyYXRvciBpcyBuZWNlc3Nh
cnkgZm9yIHRoZSBjYXNlcyB3aGVyZSBvcGVyYXRvcj0gcmV0dXJucyB2b2lkCi0gIGNvbnN0ZXhw
ciBzdGF0aWMgYm9vbCBoYXNfYXNzaWduKGJvb2wpIHsgcmV0dXJuIHRydWU7IH0KLQotICBjb25z
dGV4cHIgc3RhdGljIGJvb2wgdmFsdWUgPSBoYXNfYXNzaWduPFQsIFU+KHRydWUpOwotfTsKLQot
Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBpc19ub3Rocm93X21vdmVfYXNzaWduYWJsZQot
ewotICB0ZW1wbGF0ZSA8Y2xhc3MgWCwgYm9vbCBoYXNfYW55X21vdmVfYXNzaWduPgotICBzdHJ1
Y3QgaGFzX25vdGhyb3dfbW92ZV9hc3NpZ24gewotICAgIGNvbnN0ZXhwciBzdGF0aWMgYm9vbCB2
YWx1ZSA9IGZhbHNlOwotICB9OwotCi0gIHRlbXBsYXRlIDxjbGFzcyBYPgotICBzdHJ1Y3QgaGFz
X25vdGhyb3dfbW92ZV9hc3NpZ248WCwgdHJ1ZT4gewotICAgIGNvbnN0ZXhwciBzdGF0aWMgYm9v
bCB2YWx1ZSA9IF9fTk9FWENFUFRfKCBzdGQ6OmRlY2x2YWw8WCY+KCkgPSBzdGQ6OmRlY2x2YWw8
WCYmPigpICk7Ci0gIH07Ci0KLSAgY29uc3RleHByIHN0YXRpYyBib29sIHZhbHVlID0gaGFzX25v
dGhyb3dfbW92ZV9hc3NpZ248VCwgaXNfYXNzaWduYWJsZTxUJiwgVCYmPjo6dmFsdWU+Ojp2YWx1
ZTsKLX07Ci0vLyBlbmQgd29ya2Fyb3VuZAotCi0KLSMgZW5kaWYKLSNlbmRpZgotCi19IC8vIG5h
bWVzcGFjZSBkZXRhaWxfCi0KLS8vIDIwLjUuNCwgT3B0aW9uYWwgZm9yIG9iamVjdCB0eXBlcwot
dGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIE9wdGlvbmFsOwotCi0vLyAyMC41LjUsIE9wdGlvbmFs
IGZvciBsdmFsdWUgcmVmZXJlbmNlIHR5cGVzCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgT3B0
aW9uYWw8VCY+OwotCi1uYW1lc3BhY2UgZGV0YWlsXyB7Ci0KLS8vIHdvcmthcm91bmQ6IHN0ZCB1
dGlsaXR5IGZ1bmN0aW9ucyBhcmVuJ3QgY29uc3RleHByIHlldAotdGVtcGxhdGUgPGNsYXNzIFQ+
IGNvbnN0ZXhwciBUJiYgY29uc3RleHByX2ZvcndhcmQodHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVm
ZXJlbmNlPFQ+Ojp0eXBlJiB0KSBfX05PRVhDRVBUCi17Ci0gIHJldHVybiBzdGF0aWNfY2FzdDxU
JiY+KHQpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIFQmJiBjb25zdGV4cHJf
Zm9yd2FyZCh0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8VD46OnR5cGUmJiB0KSBfX05P
RVhDRVBUCi17Ci0gICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19sdmFsdWVfcmVmZXJlbmNlPFQ+
Ojp2YWx1ZSwgIiEhIik7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFQmJj4odCk7Ci19Ci0KLXRl
bXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNl
PFQ+Ojp0eXBlJiYgY29uc3RleHByX21vdmUoVCYmIHQpIF9fTk9FWENFUFQKLXsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPFQ+Ojp0eXBlJiY+
KHQpOwotfQotCi0KLS8vIHN0YXRpY19hZGRyZXNzb2Y6IGEgY29uc3RleHByIHZlcnNpb24gb2Yg
YWRkcmVzc29mCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBoYXNfb3ZlcmxvYWRlZF9h
ZGRyZXNzb2YKLXsKLSAgdGVtcGxhdGUgPGNsYXNzIFg+Ci0gIGNvbnN0ZXhwciBzdGF0aWMgYm9v
bCBoYXNfb3ZlcmxvYWQoLi4uKSB7IHJldHVybiBmYWxzZTsgfQotCi0gIHRlbXBsYXRlIDxjbGFz
cyBYLCBzaXplX3QgUyA9IHNpemVvZihzdGQ6OmRlY2x2YWw8WCY+KCkub3BlcmF0b3ImKCkpID4K
LSAgY29uc3RleHByIHN0YXRpYyBib29sIGhhc19vdmVybG9hZChib29sKSB7IHJldHVybiB0cnVl
OyB9Ci0KLSAgY29uc3RleHByIHN0YXRpYyBib29sIHZhbHVlID0gaGFzX292ZXJsb2FkPFQ+KHRy
dWUpOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIFRSMl9PUFRJT05BTF9SRVFVSVJFUygh
aGFzX292ZXJsb2FkZWRfYWRkcmVzc29mPFQ+KT4KLWNvbnN0ZXhwciBUKiBzdGF0aWNfYWRkcmVz
c29mKFQmIHJlZikKLXsKLSAgcmV0dXJuICZyZWY7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBU
LCBUUjJfT1BUSU9OQUxfUkVRVUlSRVMoaGFzX292ZXJsb2FkZWRfYWRkcmVzc29mPFQ+KT4KLVQq
IHN0YXRpY19hZGRyZXNzb2YoVCYgcmVmKQotewotICByZXR1cm4gc3RkOjphZGRyZXNzb2YocmVm
KTsKLX0KLQotCi0vLyB0aGUgY2FsbCB0byBjb252ZXJ0PEE+KGIpIGhhcyByZXR1cm4gdHlwZSBB
IGFuZCBjb252ZXJ0cyBiIHRvIHR5cGUgQSBpZmYgYiBkZWNsdHlwZShiKSBpcyBpbXBsaWNpdGx5
IGNvbnZlcnRpYmxlIHRvIEEKLXRlbXBsYXRlIDxjbGFzcyBVPgotY29uc3RleHByIFUgY29udmVy
dChVIHYpIHsgcmV0dXJuIHY7IH0KLQotfSAvLyBuYW1lc3BhY2UgZGV0YWlsCi0KLQotY29uc3Rl
eHByIHN0cnVjdCB0cml2aWFsX2luaXRfdHt9IHRyaXZpYWxfaW5pdHt9OwotCi0KLS8vIDIwLjUu
NywgRGlzZW5nYWdlZCBzdGF0ZSBpbmRpY2F0b3IKLXN0cnVjdCBudWxsb3B0X3QKLXsKLSAgc3Ry
dWN0IGluaXR7fTsKLSAgY29uc3RleHByIGV4cGxpY2l0IG51bGxvcHRfdChpbml0KXt9Ci19Owot
Y29uc3RleHByIG51bGxvcHRfdCBudWxsb3B0e251bGxvcHRfdDo6aW5pdCgpfTsKLQotCi10ZW1w
bGF0ZSA8Y2xhc3MgVD4KLXVuaW9uIHN0b3JhZ2VfdAotewotICB1bnNpZ25lZCBjaGFyIGR1bW15
XzsKLSAgVCB2YWx1ZV87Ci0KLSAgY29uc3RleHByIHN0b3JhZ2VfdCggdHJpdmlhbF9pbml0X3Qg
KSBfX05PRVhDRVBUIDogZHVtbXlfKCkge307Ci0KLSAgdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+
Ci0gIGNvbnN0ZXhwciBzdG9yYWdlX3QoIEFyZ3MmJi4uLiBhcmdzICkgOiB2YWx1ZV8oZGV0YWls
Xzo6Y29uc3RleHByX2ZvcndhcmQ8QXJncz4oYXJncykuLi4pIHt9Ci0KLSAgfnN0b3JhZ2VfdCgp
e30KLX07Ci0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci11bmlvbiBjb25zdGV4cHJfc3RvcmFnZV90
Ci17Ci0gICAgdW5zaWduZWQgY2hhciBkdW1teV87Ci0gICAgVCB2YWx1ZV87Ci0KLSAgICBjb25z
dGV4cHIgY29uc3RleHByX3N0b3JhZ2VfdCggdHJpdmlhbF9pbml0X3QgKSBfX05PRVhDRVBUIDog
ZHVtbXlfKCkge307Ci0KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gQXJncz4KLSAgICBjb25zdGV4
cHIgY29uc3RleHByX3N0b3JhZ2VfdCggQXJncyYmLi4uIGFyZ3MgKSA6IHZhbHVlXyhkZXRhaWxf
Ojpjb25zdGV4cHJfZm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KLQotICAgIH5jb25zdGV4cHJf
c3RvcmFnZV90KCkgPSBkZWZhdWx0OwotfTsKLQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVj
dCBPcHRpb25hbF9iYXNlCi17Ci0gICAgYm9vbCBpbml0XzsKLSAgICBzdG9yYWdlX3Q8VD4gc3Rv
cmFnZV87Ci0KLSAgICBjb25zdGV4cHIgT3B0aW9uYWxfYmFzZSgpIF9fTk9FWENFUFQgOiBpbml0
XyhmYWxzZSksIHN0b3JhZ2VfKHRyaXZpYWxfaW5pdCkge307Ci0KLSAgICBleHBsaWNpdCBjb25z
dGV4cHIgT3B0aW9uYWxfYmFzZShjb25zdCBUJiB2KSA6IGluaXRfKHRydWUpLCBzdG9yYWdlXyh2
KSB7fQotCi0gICAgZXhwbGljaXQgY29uc3RleHByIE9wdGlvbmFsX2Jhc2UoVCYmIHYpIDogaW5p
dF8odHJ1ZSksIHN0b3JhZ2VfKGRldGFpbF86OmNvbnN0ZXhwcl9tb3ZlKHYpKSB7fQotCi0gICAg
dGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+IGV4cGxpY2l0IE9wdGlvbmFsX2Jhc2Uoc3RkOjppbl9w
bGFjZV90LCBBcmdzJiYuLi4gYXJncykKLSAgICAgICAgOiBpbml0Xyh0cnVlKSwgc3RvcmFnZV8o
ZGV0YWlsXzo6Y29uc3RleHByX2ZvcndhcmQ8QXJncz4oYXJncykuLi4pIHt9Ci0KLSAgICB0ZW1w
bGF0ZSA8Y2xhc3MgVSwgY2xhc3MuLi4gQXJncywgVFIyX09QVElPTkFMX1JFUVVJUkVTKHN0ZDo6
aXNfY29uc3RydWN0aWJsZTxULCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VT4+KT4KLSAgICBleHBs
aWNpdCBPcHRpb25hbF9iYXNlKHN0ZDo6aW5fcGxhY2VfdCwgc3RkOjppbml0aWFsaXplcl9saXN0
PFU+IGlsLCBBcmdzJiYuLi4gYXJncykKLSAgICAgICAgOiBpbml0Xyh0cnVlKSwgc3RvcmFnZV8o
aWwsIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KLQotICAgIH5PcHRpb25hbF9iYXNl
KCkgeyBpZiAoaW5pdF8pIHN0b3JhZ2VfLnZhbHVlXy5UOjp+VCgpOyB9Ci19OwotCi0KLXRlbXBs
YXRlIDxjbGFzcyBUPgotc3RydWN0IGNvbnN0ZXhwcl9PcHRpb25hbF9iYXNlCi17Ci0gICAgYm9v
bCBpbml0XzsKLSAgICBjb25zdGV4cHJfc3RvcmFnZV90PFQ+IHN0b3JhZ2VfOwotCi0gICAgY29u
c3RleHByIGNvbnN0ZXhwcl9PcHRpb25hbF9iYXNlKCkgX19OT0VYQ0VQVCA6IGluaXRfKGZhbHNl
KSwgc3RvcmFnZV8odHJpdmlhbF9pbml0KSB7fTsKLQotICAgIGV4cGxpY2l0IGNvbnN0ZXhwciBj
b25zdGV4cHJfT3B0aW9uYWxfYmFzZShjb25zdCBUJiB2KSA6IGluaXRfKHRydWUpLCBzdG9yYWdl
Xyh2KSB7fQotCi0gICAgZXhwbGljaXQgY29uc3RleHByIGNvbnN0ZXhwcl9PcHRpb25hbF9iYXNl
KFQmJiB2KSA6IGluaXRfKHRydWUpLCBzdG9yYWdlXyhkZXRhaWxfOjpjb25zdGV4cHJfbW92ZSh2
KSkge30KLQotICAgIHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPiBleHBsaWNpdCBjb25zdGV4cHIg
Y29uc3RleHByX09wdGlvbmFsX2Jhc2Uoc3RkOjppbl9wbGFjZV90LCBBcmdzJiYuLi4gYXJncykK
LSAgICAgIDogaW5pdF8odHJ1ZSksIHN0b3JhZ2VfKGRldGFpbF86OmNvbnN0ZXhwcl9mb3J3YXJk
PEFyZ3M+KGFyZ3MpLi4uKSB7fQotCi0gICAgdGVtcGxhdGUgPGNsYXNzIFUsIGNsYXNzLi4uIEFy
Z3MsIFRSMl9PUFRJT05BTF9SRVFVSVJFUyhzdGQ6OmlzX2NvbnN0cnVjdGlibGU8VCwgc3RkOjpp
bml0aWFsaXplcl9saXN0PFU+Pik+Ci0gICAgT1BUSU9OQUxfQ09OU1RFWFBSX0lOSVRfTElTVCBl
eHBsaWNpdCBjb25zdGV4cHJfT3B0aW9uYWxfYmFzZShzdGQ6OmluX3BsYWNlX3QsIHN0ZDo6aW5p
dGlhbGl6ZXJfbGlzdDxVPiBpbCwgQXJncyYmLi4uIGFyZ3MpCi0gICAgICA6IGluaXRfKHRydWUp
LCBzdG9yYWdlXyhpbCwgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSB7fQotCi0gICAgfmNv
bnN0ZXhwcl9PcHRpb25hbF9iYXNlKCkgPSBkZWZhdWx0OwotfTsKLQotdGVtcGxhdGUgPGNsYXNz
IFQ+Ci11c2luZyBPcHRpb25hbEJhc2UgPSB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAotICAg
IHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxUPjo6dmFsdWUsICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBpZiBwb3NzaWJsZQotICAgIGNvbnN0ZXhwcl9PcHRpb25hbF9iYXNlPHR5
cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PFQ+Ojp0eXBlPiwgLy8gdXNlIGJhc2Ugd2l0aCB0cml2
aWFsIGRlc3RydWN0b3IKLSAgICBPcHRpb25hbF9iYXNlPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2Nv
bnN0PFQ+Ojp0eXBlPgotPjo6dHlwZTsKLQotCi0KLXRlbXBsYXRlIDxjbGFzcyBUPgotY2xhc3Mg
T3B0aW9uYWwgOiBwcml2YXRlIE9wdGlvbmFsQmFzZTxUPgotewotICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKLSAgc3RhdGljX2Fzc2VydCggIXN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBzdGQ6OmRl
Y2F5PFQ+Ojp0eXBlLCBudWxsb3B0X3Q+Ojp2YWx1ZSwgImJhZCBUIiApOwotICBzdGF0aWNfYXNz
ZXJ0KCAhc3RkOjppc19zYW1lPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VD46OnR5cGUsIHN0ZDo6aW5f
cGxhY2VfdD46OnZhbHVlLCAiYmFkIFQiICk7Ci0KLQotICBjb25zdGV4cHIgYm9vbCBpbml0aWFs
aXplZCgpIGNvbnN0IF9fTk9FWENFUFQgeyByZXR1cm4gT3B0aW9uYWxCYXNlPFQ+Ojppbml0Xzsg
fQotICB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDxUPjo6dHlwZSogZGF0YXB0cigpIHsgIHJl
dHVybiBzdGQ6OmFkZHJlc3NvZihPcHRpb25hbEJhc2U8VD46OnN0b3JhZ2VfLnZhbHVlXyk7IH0K
LSAgY29uc3RleHByIGNvbnN0IFQqIGRhdGFwdHIoKSBjb25zdCB7IHJldHVybiBkZXRhaWxfOjpz
dGF0aWNfYWRkcmVzc29mKE9wdGlvbmFsQmFzZTxUPjo6c3RvcmFnZV8udmFsdWVfKTsgfQotCi0j
IGlmIE9QVElPTkFMX0hBU19USElTX1JWQUxVRV9SRUZTID09IDEKLSAgY29uc3RleHByIGNvbnN0
IFQmIGNvbnRhaW5lZF92YWwoKSBjb25zdCYgeyByZXR1cm4gT3B0aW9uYWxCYXNlPFQ+OjpzdG9y
YWdlXy52YWx1ZV87IH0KLSAgT1BUSU9OQUxfTVVUQUJMRV9DT05TVEVYUFIgVCYmIGNvbnRhaW5l
ZF92YWwoKSAmJiB7IHJldHVybiBzdGQ6Om1vdmUoT3B0aW9uYWxCYXNlPFQ+OjpzdG9yYWdlXy52
YWx1ZV8pOyB9Ci0gIE9QVElPTkFMX01VVEFCTEVfQ09OU1RFWFBSIFQmIGNvbnRhaW5lZF92YWwo
KSAmIHsgcmV0dXJuIE9wdGlvbmFsQmFzZTxUPjo6c3RvcmFnZV8udmFsdWVfOyB9Ci0jIGVsc2UK
LSAgY29uc3RleHByIGNvbnN0IFQmIGNvbnRhaW5lZF92YWwoKSBjb25zdCB7IHJldHVybiBPcHRp
b25hbEJhc2U8VD46OnN0b3JhZ2VfLnZhbHVlXzsgfQotICBUJiBjb250YWluZWRfdmFsKCkgeyBy
ZXR1cm4gT3B0aW9uYWxCYXNlPFQ+OjpzdG9yYWdlXy52YWx1ZV87IH0KLSMgZW5kaWYKLQotICB2
b2lkIGNsZWFyKCkgX19OT0VYQ0VQVCB7Ci0gICAgaWYgKGluaXRpYWxpemVkKCkpIGRhdGFwdHIo
KS0+VDo6flQoKTsKLSAgICBPcHRpb25hbEJhc2U8VD46OmluaXRfID0gZmFsc2U7Ci0gIH0KLQot
ICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gQXJncz4KLSAgdm9pZCBpbml0aWFsaXplKEFyZ3MmJi4uLiBh
cmdzKSBfX05PRVhDRVBUXyhfX05PRVhDRVBUXyhUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4u
LikpKQotICB7Ci0gICAgQVNTRVJUKCFPcHRpb25hbEJhc2U8VD46OmluaXRfKTsKLSAgICA6Om5l
dyAoc3RhdGljX2Nhc3Q8dm9pZCo+KGRhdGFwdHIoKSkpIFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFy
Z3MpLi4uKTsKLSAgICBPcHRpb25hbEJhc2U8VD46OmluaXRfID0gdHJ1ZTsKLSAgfQotCi0gIHRl
bXBsYXRlIDxjbGFzcyBVLCBjbGFzcy4uLiBBcmdzPgotICB2b2lkIGluaXRpYWxpemUoc3RkOjpp
bml0aWFsaXplcl9saXN0PFU+IGlsLCBBcmdzJiYuLi4gYXJncykgX19OT0VYQ0VQVF8oX19OT0VY
Q0VQVF8oVChpbCwgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSkpCi0gIHsKLSAgICBBU1NF
UlQoIU9wdGlvbmFsQmFzZTxUPjo6aW5pdF8pOwotICAgIDo6bmV3IChzdGF0aWNfY2FzdDx2b2lk
Kj4oZGF0YXB0cigpKSkgVChpbCwgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKLSAgICBP
cHRpb25hbEJhc2U8VD46OmluaXRfID0gdHJ1ZTsKLSAgfQotCi1wdWJsaWM6Ci0gIHR5cGVkZWYg
VCB2YWx1ZV90eXBlOwotCi0gIC8vIDIwLjUuNS4xLCBjb25zdHJ1Y3RvcnMKLSAgY29uc3RleHBy
IE9wdGlvbmFsKCkgX19OT0VYQ0VQVCA6IE9wdGlvbmFsQmFzZTxUPigpICB7fTsKLSAgY29uc3Rl
eHByIE9wdGlvbmFsKG51bGxvcHRfdCkgX19OT0VYQ0VQVCA6IE9wdGlvbmFsQmFzZTxUPigpIHt9
OwotCi0gIGNvbnN0ZXhwciBPcHRpb25hbChjb25zdCBPcHRpb25hbCYgcmhzKQotICA6IE9wdGlv
bmFsQmFzZTxUPigpCi0gIHsKLSAgICBpZiAocmhzLmluaXRpYWxpemVkKCkpIHsKLSAgICAgICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX3RyaXZpYWxseV9jb3B5X2Fzc2lnbmFibGVfdjxUPikKLSAg
ICAgICAgICAgIE9wdGlvbmFsQmFzZTxUPjo6c3RvcmFnZV8gPSAqcmhzOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICA6Om5ldyAoc3RhdGljX2Nhc3Q8dm9pZCo+KGRhdGFwdHIoKSkpIFQoKnJo
cyk7Ci0gICAgICAgIE9wdGlvbmFsQmFzZTxUPjo6aW5pdF8gPSB0cnVlOwotICAgIH0KLSAgfQot
Ci0gIGNvbnN0ZXhwciBPcHRpb25hbChPcHRpb25hbCYmIHJocykgX19OT0VYQ0VQVF8oZGV0YWls
Xzo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8VD46OnZhbHVlKQotICA6IE9wdGlvbmFs
QmFzZTxUPigpCi0gIHsKLSAgICBpZiAocmhzLmluaXRpYWxpemVkKCkpIHsKLSAgICAgICAgaWYg
Y29uc3RleHByIChzdGQ6OmlzX3RyaXZpYWxseV9jb3B5X2Fzc2lnbmFibGVfdjxUPikKLSAgICAg
ICAgICAgIE9wdGlvbmFsQmFzZTxUPjo6c3RvcmFnZV8gPSAqcmhzOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICA6Om5ldyAoc3RhdGljX2Nhc3Q8dm9pZCo+KGRhdGFwdHIoKSkpIFQoc3RkOjpt
b3ZlKCpyaHMpKTsKLSAgICAgICAgT3B0aW9uYWxCYXNlPFQ+Ojppbml0XyA9IHRydWU7Ci0gICAg
ICAgIHJocy5jbGVhcigpOwotICAgIH0KLSAgfQotCi0gIGNvbnN0ZXhwciBPcHRpb25hbChjb25z
dCBUJiB2KSA6IE9wdGlvbmFsQmFzZTxUPih2KSB7fQotCi0gIGNvbnN0ZXhwciBPcHRpb25hbChU
JiYgdikgOiBPcHRpb25hbEJhc2U8VD4oZGV0YWlsXzo6Y29uc3RleHByX21vdmUodikpIHt9Ci0K
LSAgdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+Ci0gIGV4cGxpY2l0IGNvbnN0ZXhwciBPcHRpb25h
bChzdGQ6OmluX3BsYWNlX3QsIEFyZ3MmJi4uLiBhcmdzKQotICAgICAgOiBPcHRpb25hbEJhc2U8
VD4oc3RkOjppbl9wbGFjZV90e30sIGRldGFpbF86OmNvbnN0ZXhwcl9mb3J3YXJkPEFyZ3M+KGFy
Z3MpLi4uKSB7fQotCi0gIHRlbXBsYXRlIDxjbGFzcyBVLCBjbGFzcy4uLiBBcmdzLCBUUjJfT1BU
SU9OQUxfUkVRVUlSRVMoc3RkOjppc19jb25zdHJ1Y3RpYmxlPFQsIHN0ZDo6aW5pdGlhbGl6ZXJf
bGlzdDxVPj4pPgotICBPUFRJT05BTF9DT05TVEVYUFJfSU5JVF9MSVNUIGV4cGxpY2l0IE9wdGlv
bmFsKHN0ZDo6aW5fcGxhY2VfdCwgc3RkOjppbml0aWFsaXplcl9saXN0PFU+IGlsLCBBcmdzJiYu
Li4gYXJncykKLSAgICAgIDogT3B0aW9uYWxCYXNlPFQ+KHN0ZDo6aW5fcGxhY2VfdHt9LCBpbCwg
ZGV0YWlsXzo6Y29uc3RleHByX2ZvcndhcmQ8QXJncz4oYXJncykuLi4pIHt9Ci0KLSAgLy8gMjAu
NS40LjIsIERlc3RydWN0b3IKLSAgfk9wdGlvbmFsKCkgPSBkZWZhdWx0OwotCi0gIC8vIDIwLjUu
NC4zLCBhc3NpZ25tZW50Ci0gIE9wdGlvbmFsJiBvcGVyYXRvcj0obnVsbG9wdF90KSBfX05PRVhD
RVBUCi0gIHsKLSAgICBjbGVhcigpOwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIE9wdGlv
bmFsJiBvcGVyYXRvcj0oY29uc3QgT3B0aW9uYWwmIHJocykKLSAgewotICAgIGlmICAgICAgKGlu
aXRpYWxpemVkKCkgPT0gdHJ1ZSAgJiYgcmhzLmluaXRpYWxpemVkKCkgPT0gZmFsc2UpIGNsZWFy
KCk7Ci0gICAgZWxzZSBpZiAoaW5pdGlhbGl6ZWQoKSA9PSBmYWxzZSAmJiByaHMuaW5pdGlhbGl6
ZWQoKSA9PSB0cnVlKSAgaW5pdGlhbGl6ZSgqcmhzKTsKLSAgICBlbHNlIGlmIChpbml0aWFsaXpl
ZCgpID09IHRydWUgICYmIHJocy5pbml0aWFsaXplZCgpID09IHRydWUpICBjb250YWluZWRfdmFs
KCkgPSAqcmhzOwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIE9wdGlvbmFsJiBvcGVyYXRv
cj0oT3B0aW9uYWwmJiByaHMpCi0gIF9fTk9FWENFUFRfKGRldGFpbF86OmlzX25vdGhyb3dfbW92
ZV9hc3NpZ25hYmxlPFQ+Ojp2YWx1ZSAmJiBkZXRhaWxfOjppc19ub3Rocm93X21vdmVfY29uc3Ry
dWN0aWJsZTxUPjo6dmFsdWUpCi0gIHsKLSAgICBpZiAgICAgIChpbml0aWFsaXplZCgpID09IHRy
dWUgICYmIHJocy5pbml0aWFsaXplZCgpID09IGZhbHNlKSBjbGVhcigpOwotICAgIGVsc2UgaWYg
KGluaXRpYWxpemVkKCkgPT0gZmFsc2UgJiYgcmhzLmluaXRpYWxpemVkKCkgPT0gdHJ1ZSkgIHsg
aW5pdGlhbGl6ZShzdGQ6Om1vdmUoKnJocykpOyByaHMuY2xlYXIoKTsgfQotICAgIGVsc2UgaWYg
KGluaXRpYWxpemVkKCkgPT0gdHJ1ZSAgJiYgcmhzLmluaXRpYWxpemVkKCkgPT0gdHJ1ZSkgIHsg
Y29udGFpbmVkX3ZhbCgpID0gc3RkOjptb3ZlKCpyaHMpOyByaHMuY2xlYXIoKTsgfQotICAgIHJl
dHVybiAqdGhpczsKLSAgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBVPgotICBhdXRvIG9wZXJhdG9y
PShVJiYgdikKLSAgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWYKLSAgPAotICAgIHN0ZDo6aXNf
c2FtZTx0eXBlbmFtZSBzdGQ6OmRlY2F5PFU+Ojp0eXBlLCBUPjo6dmFsdWUsCi0gICAgT3B0aW9u
YWwmCi0gID46OnR5cGUKLSAgewotICAgIGlmIChpbml0aWFsaXplZCgpKSB7IGNvbnRhaW5lZF92
YWwoKSA9IHN0ZDo6Zm9yd2FyZDxVPih2KTsgfQotICAgIGVsc2UgICAgICAgICAgICAgICB7IGlu
aXRpYWxpemUoc3RkOjpmb3J3YXJkPFU+KHYpKTsgIH0KLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0K
LQotCi0gIHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPgotICB2b2lkIGVtcGxhY2UoQXJncyYmLi4u
IGFyZ3MpCi0gIHsKLSAgICBjbGVhcigpOwotICAgIGluaXRpYWxpemUoc3RkOjpmb3J3YXJkPEFy
Z3M+KGFyZ3MpLi4uKTsKLSAgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBVLCBjbGFzcy4uLiBBcmdz
PgotICB2b2lkIGVtcGxhY2Uoc3RkOjppbml0aWFsaXplcl9saXN0PFU+IGlsLCBBcmdzJiYuLi4g
YXJncykKLSAgewotICAgIGNsZWFyKCk7Ci0gICAgaW5pdGlhbGl6ZTxVLCBBcmdzLi4uPihpbCwg
c3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKLSAgfQotCi0gIC8vIDIwLjUuNC40LCBTd2Fw
Ci0gIHZvaWQgc3dhcChPcHRpb25hbDxUPiYgcmhzKSBfX05PRVhDRVBUXyhkZXRhaWxfOjppc19u
b3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxUPjo6dmFsdWUgJiYgX19OT0VYQ0VQVF8oc3dhcChz
dGQ6OmRlY2x2YWw8VCY+KCksIHN0ZDo6ZGVjbHZhbDxUJj4oKSkpKQotICB7Ci0gICAgaWYgICAg
ICAoaW5pdGlhbGl6ZWQoKSA9PSB0cnVlICAmJiByaHMuaW5pdGlhbGl6ZWQoKSA9PSBmYWxzZSkg
eyByaHMuaW5pdGlhbGl6ZShzdGQ6Om1vdmUoKip0aGlzKSk7IGNsZWFyKCk7IH0KLSAgICBlbHNl
IGlmIChpbml0aWFsaXplZCgpID09IGZhbHNlICYmIHJocy5pbml0aWFsaXplZCgpID09IHRydWUp
ICB7IGluaXRpYWxpemUoc3RkOjptb3ZlKCpyaHMpKTsgcmhzLmNsZWFyKCk7IH0KLSAgICBlbHNl
IGlmIChpbml0aWFsaXplZCgpID09IHRydWUgICYmIHJocy5pbml0aWFsaXplZCgpID09IHRydWUp
ICB7IHVzaW5nIHN0ZDo6c3dhcDsgc3dhcCgqKnRoaXMsICpyaHMpOyB9Ci0gIH0KLQotICAvLyAy
MC41LjQuNSwgT2JzZXJ2ZXJzCi0KLSAgZXhwbGljaXQgY29uc3RleHByIG9wZXJhdG9yIGJvb2wo
KSBjb25zdCBfX05PRVhDRVBUIHsgcmV0dXJuIGluaXRpYWxpemVkKCk7IH0KLSAgY29uc3RleHBy
IGJvb2wgaGFzVmFsdWUoKSBjb25zdCBfX05PRVhDRVBUIHsgcmV0dXJuIGluaXRpYWxpemVkKCk7
IH0KLQotICBjb25zdGV4cHIgVCBjb25zdCogb3BlcmF0b3IgLT4oKSBjb25zdCB7Ci0gICAgUkVM
RUFTRV9BU1NFUlRfVU5ERVJfQ09OU1RFWFBSX0NPTlRFWFQoaW5pdGlhbGl6ZWQoKSk7Ci0gICAg
cmV0dXJuIGRhdGFwdHIoKTsKLSAgfQotCi0gIE9QVElPTkFMX01VVEFCTEVfQ09OU1RFWFBSIFQq
IG9wZXJhdG9yIC0+KCkgewotICAgIFJFTEVBU0VfQVNTRVJUX1VOREVSX0NPTlNURVhQUl9DT05U
RVhUKGluaXRpYWxpemVkKCkpOwotICAgIHJldHVybiBkYXRhcHRyKCk7Ci0gIH0KLQotICBjb25z
dGV4cHIgVCBjb25zdCYgb3BlcmF0b3IgKigpIGNvbnN0JiB7Ci0gICAgUkVMRUFTRV9BU1NFUlRf
VU5ERVJfQ09OU1RFWFBSX0NPTlRFWFQoaW5pdGlhbGl6ZWQoKSk7Ci0gICAgcmV0dXJuIGNvbnRh
aW5lZF92YWwoKTsKLSAgfQotCi0gIE9QVElPTkFMX01VVEFCTEVfQ09OU1RFWFBSIFQmIG9wZXJh
dG9yICooKSAmIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9VTkRFUl9DT05TVEVYUFJfQ09OVEVYVChp
bml0aWFsaXplZCgpKTsKLSAgICByZXR1cm4gY29udGFpbmVkX3ZhbCgpOwotICB9Ci0KLSAgT1BU
SU9OQUxfTVVUQUJMRV9DT05TVEVYUFIgVCYmIG9wZXJhdG9yICooKSAmJiB7Ci0gICAgUkVMRUFT
RV9BU1NFUlRfVU5ERVJfQ09OU1RFWFBSX0NPTlRFWFQoaW5pdGlhbGl6ZWQoKSk7Ci0gICAgcmV0
dXJuIGRldGFpbF86OmNvbnN0ZXhwcl9tb3ZlKGNvbnRhaW5lZF92YWwoKSk7Ci0gIH0KLQotICBj
b25zdGV4cHIgVCBjb25zdCYgdmFsdWUoKSBjb25zdCYgewotICAgIFJFTEVBU0VfQVNTRVJUX1VO
REVSX0NPTlNURVhQUl9DT05URVhUKGluaXRpYWxpemVkKCkpOwotICAgIHJldHVybiBjb250YWlu
ZWRfdmFsKCk7Ci0gIH0KLQotICBPUFRJT05BTF9NVVRBQkxFX0NPTlNURVhQUiBUJiB2YWx1ZSgp
ICYgewotICAgIFJFTEVBU0VfQVNTRVJUX1VOREVSX0NPTlNURVhQUl9DT05URVhUKGluaXRpYWxp
emVkKCkpOwotICAgIHJldHVybiBjb250YWluZWRfdmFsKCk7Ci0gIH0KLQotICBPUFRJT05BTF9N
VVRBQkxFX0NPTlNURVhQUiBUJiYgdmFsdWUoKSAmJiB7Ci0gICAgUkVMRUFTRV9BU1NFUlRfVU5E
RVJfQ09OU1RFWFBSX0NPTlRFWFQoaW5pdGlhbGl6ZWQoKSk7Ci0gICAgcmV0dXJuIHN0ZDo6bW92
ZShjb250YWluZWRfdmFsKCkpOwotICB9Ci0KLSMgaWYgT1BUSU9OQUxfSEFTX1RISVNfUlZBTFVF
X1JFRlMgPT0gMQotCi0gIHRlbXBsYXRlIDxjbGFzcyBWPgotICBjb25zdGV4cHIgVCB2YWx1ZU9y
KFYmJiB2KSBjb25zdCYKLSAgewotICAgIHJldHVybiAqdGhpcyA/ICoqdGhpcyA6IGRldGFpbF86
OmNvbnZlcnQ8VD4oZGV0YWlsXzo6Y29uc3RleHByX2ZvcndhcmQ8Vj4odikpOwotICB9Ci0KLSAg
dGVtcGxhdGUgPGNsYXNzIFY+Ci0gIE9QVElPTkFMX01VVEFCTEVfQ09OU1RFWFBSIFQgdmFsdWVP
cihWJiYgdikgJiYKLSAgewotICAgIHJldHVybiAqdGhpcyA/IGRldGFpbF86OmNvbnN0ZXhwcl9t
b3ZlKGNvbnN0X2Nhc3Q8T3B0aW9uYWw8VD4mPigqdGhpcykuY29udGFpbmVkX3ZhbCgpKSA6IGRl
dGFpbF86OmNvbnZlcnQ8VD4oZGV0YWlsXzo6Y29uc3RleHByX2ZvcndhcmQ8Vj4odikpOwotICB9
Ci0KLSMgZWxzZQotCi0gIHRlbXBsYXRlIDxjbGFzcyBWPgotICBjb25zdGV4cHIgVCB2YWx1ZU9y
KFYmJiB2KSBjb25zdAotICB7Ci0gICAgcmV0dXJuICp0aGlzID8gKip0aGlzIDogZGV0YWlsXzo6
Y29udmVydDxUPihkZXRhaWxfOjpjb25zdGV4cHJfZm9yd2FyZDxWPih2KSk7Ci0gIH0KLQotIyBl
bmRpZgotCi0gIC8vIDIwLjYuMy42LCBtb2RpZmllcnMKLSAgdm9pZCByZXNldCgpIF9fTk9FWENF
UFQgeyBjbGVhcigpOyB9Ci19OwotCi0KLXRlbXBsYXRlIDxjbGFzcyBUPgotY2xhc3MgT3B0aW9u
YWw8VCY+Ci17Ci0gIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICBzdGF0aWNfYXNzZXJ0KCAh
c3RkOjppc19zYW1lPFQsIG51bGxvcHRfdD46OnZhbHVlLCAiYmFkIFQiICk7Ci0gIHN0YXRpY19h
c3NlcnQoICFzdGQ6OmlzX3NhbWU8VCwgc3RkOjppbl9wbGFjZV90Pjo6dmFsdWUsICJiYWQgVCIg
KTsKLSAgVCogcmVmOwotCi1wdWJsaWM6Ci0KLSAgLy8gMjAuNS41LjEsIGNvbnN0cnVjdGlvbi9k
ZXN0cnVjdGlvbgotICBjb25zdGV4cHIgT3B0aW9uYWwoKSBfX05PRVhDRVBUIDogcmVmKG51bGxw
dHIpIHt9Ci0KLSAgY29uc3RleHByIE9wdGlvbmFsKG51bGxvcHRfdCkgX19OT0VYQ0VQVCA6IHJl
ZihudWxscHRyKSB7fQotCi0gIGNvbnN0ZXhwciBPcHRpb25hbChUJiB2KSBfX05PRVhDRVBUIDog
cmVmKGRldGFpbF86OnN0YXRpY19hZGRyZXNzb2YodikpIHt9Ci0KLSAgT3B0aW9uYWwoVCYmKSA9
IGRlbGV0ZTsKLQotICBjb25zdGV4cHIgT3B0aW9uYWwoY29uc3QgT3B0aW9uYWwmIHJocykgX19O
T0VYQ0VQVCA6IHJlZihyaHMucmVmKSB7fQotCi0gIGV4cGxpY2l0IGNvbnN0ZXhwciBPcHRpb25h
bChzdGQ6OmluX3BsYWNlX3QsIFQmIHYpIF9fTk9FWENFUFQgOiByZWYoZGV0YWlsXzo6c3RhdGlj
X2FkZHJlc3NvZih2KSkge30KLQotICBleHBsaWNpdCBPcHRpb25hbChzdGQ6OmluX3BsYWNlX3Qs
IFQmJikgPSBkZWxldGU7Ci0KLSAgfk9wdGlvbmFsKCkgPSBkZWZhdWx0OwotCi0gIC8vIDIwLjUu
NS4yLCBtdXRhdGlvbgotICBPcHRpb25hbCYgb3BlcmF0b3I9KG51bGxvcHRfdCkgX19OT0VYQ0VQ
VCB7Ci0gICAgcmVmID0gbnVsbHB0cjsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICAvLyBP
cHRpb25hbCYgb3BlcmF0b3I9KGNvbnN0IE9wdGlvbmFsJiByaHMpIF9fTk9FWENFUFQgewotICAg
IC8vIHJlZiA9IHJocy5yZWY7Ci0gICAgLy8gcmV0dXJuICp0aGlzOwotICAvLyB9Ci0KLSAgLy8g
T3B0aW9uYWwmIG9wZXJhdG9yPShPcHRpb25hbCYmIHJocykgX19OT0VYQ0VQVCB7Ci0gICAgLy8g
cmVmID0gcmhzLnJlZjsKLSAgICAvLyByZXR1cm4gKnRoaXM7Ci0gIC8vIH0KLQotICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVT4KLSAgYXV0byBvcGVyYXRvcj0oVSYmIHJocykgX19OT0VYQ0VQVAotICAt
PiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZgotICA8Ci0gICAgc3RkOjppc19zYW1lPHR5cGVuYW1l
IHN0ZDo6ZGVjYXk8VT46OnR5cGUsIE9wdGlvbmFsPFQmPj46OnZhbHVlLAotICAgIE9wdGlvbmFs
JgotICA+Ojp0eXBlCi0gIHsKLSAgICByZWYgPSByaHMucmVmOwotICAgIHJldHVybiAqdGhpczsK
LSAgfQotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICBhdXRvIG9wZXJhdG9yPShVJiYgcmhz
KSBfX05PRVhDRVBUCi0gIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmCi0gIDwKLSAgICAhc3Rk
Ojppc19zYW1lPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VT46OnR5cGUsIE9wdGlvbmFsPFQmPj46OnZh
bHVlLAotICAgIE9wdGlvbmFsJgotICA+Ojp0eXBlCi0gID0gZGVsZXRlOwotCi0gIHZvaWQgZW1w
bGFjZShUJiB2KSBfX05PRVhDRVBUIHsKLSAgICByZWYgPSBkZXRhaWxfOjpzdGF0aWNfYWRkcmVz
c29mKHYpOwotICB9Ci0KLSAgdm9pZCBlbXBsYWNlKFQmJikgPSBkZWxldGU7Ci0KLQotICB2b2lk
IHN3YXAoT3B0aW9uYWw8VCY+JiByaHMpIF9fTk9FWENFUFQKLSAgewotICAgIHN0ZDo6c3dhcChy
ZWYsIHJocy5yZWYpOwotICB9Ci0KLSAgLy8gMjAuNS41LjMsIG9ic2VydmVycwotICBjb25zdGV4
cHIgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsKLSAgICBSRUxFQVNFX0FTU0VSVF9VTkRFUl9DT05T
VEVYUFJfQ09OVEVYVChyZWYpOwotICAgIHJldHVybiByZWY7Ci0gIH0KLQotICBjb25zdGV4cHIg
VCYgb3BlcmF0b3IqKCkgY29uc3QgewotICAgIFJFTEVBU0VfQVNTRVJUX1VOREVSX0NPTlNURVhQ
Ul9DT05URVhUKHJlZik7Ci0gICAgcmV0dXJuICpyZWY7Ci0gIH0KLQotICBjb25zdGV4cHIgVCYg
dmFsdWUoKSBjb25zdCB7Ci0gICAgUkVMRUFTRV9BU1NFUlRfVU5ERVJfQ09OU1RFWFBSX0NPTlRF
WFQocmVmKCkpOwotICAgIHJldHVybiAqcmVmOwotICB9Ci0KLSAgZXhwbGljaXQgY29uc3RleHBy
IG9wZXJhdG9yIGJvb2woKSBjb25zdCBfX05PRVhDRVBUIHsKLSAgICByZXR1cm4gcmVmICE9IG51
bGxwdHI7Ci0gIH0KLQotICBjb25zdGV4cHIgYm9vbCBoYXNWYWx1ZSgpIGNvbnN0IF9fTk9FWENF
UFQgewotICAgIHJldHVybiByZWYgIT0gbnVsbHB0cjsKLSAgfQotCi0gIHRlbXBsYXRlIDxjbGFz
cyBWPgotICBjb25zdGV4cHIgdHlwZW5hbWUgc3RkOjpkZWNheTxUPjo6dHlwZSB2YWx1ZU9yKFYm
JiB2KSBjb25zdAotICB7Ci0gICAgcmV0dXJuICp0aGlzID8gKip0aGlzIDogZGV0YWlsXzo6Y29u
dmVydDx0eXBlbmFtZSBzdGQ6OmRlY2F5PFQ+Ojp0eXBlPihkZXRhaWxfOjpjb25zdGV4cHJfZm9y
d2FyZDxWPih2KSk7Ci0gIH0KLQotICAvLyB4LngueC54LCBtb2RpZmllcnMKLSAgdm9pZCByZXNl
dCgpIF9fTk9FWENFUFQgeyByZWYgPSBudWxscHRyOyB9Ci19OwotCi0KLXRlbXBsYXRlIDxjbGFz
cyBUPgotY2xhc3MgT3B0aW9uYWw8VCYmPgotewotICBzdGF0aWNfYXNzZXJ0KCBzaXplb2YoVCkg
PT0gMCwgIk9wdGlvbmFsIHJ2YWx1ZSByZWZlcmVuY2VzIGRpc2FsbG93ZWQiICk7Ci19OwotCi0K
LS8vIDIwLjUuOCwgUmVsYXRpb25hbCBvcGVyYXRvcnMKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25z
dGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBjb25zdCBPcHRpb25h
bDxUPiYgeSkKLXsKLSAgcmV0dXJuIGJvb2woeCkgIT0gYm9vbCh5KSA/IGZhbHNlIDogYm9vbCh4
KSA9PSBmYWxzZSA/IHRydWUgOiAqeCA9PSAqeTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNv
bnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0IE9wdGlv
bmFsPFQ+JiB5KQotewotICByZXR1cm4gISh4ID09IHkpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3Mg
VD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBjb25zdCBP
cHRpb25hbDxUPiYgeSkKLXsKLSAgcmV0dXJuICgheSkgPyBmYWxzZSA6ICgheCkgPyB0cnVlIDog
KnggPCAqeTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9y
Pihjb25zdCBPcHRpb25hbDxUPiYgeCwgY29uc3QgT3B0aW9uYWw8VD4mIHkpCi17Ci0gIHJldHVy
biAoeSA8IHgpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0
b3I8PShjb25zdCBPcHRpb25hbDxUPiYgeCwgY29uc3QgT3B0aW9uYWw8VD4mIHkpCi17Ci0gIHJl
dHVybiAhKHkgPCB4KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9w
ZXJhdG9yPj0oY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0IE9wdGlvbmFsPFQ+JiB5KQotewot
ICByZXR1cm4gISh4IDwgeSk7Ci19Ci0KLQotLy8gMjAuNS45LCBDb21wYXJpc29uIHdpdGggbnVs
bG9wdAotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3Qg
T3B0aW9uYWw8VD4mIHgsIG51bGxvcHRfdCkgX19OT0VYQ0VQVAotewotICByZXR1cm4gKCF4KTsK
LX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0obnVsbG9w
dF90LCBjb25zdCBPcHRpb25hbDxUPiYgeCkgX19OT0VYQ0VQVAotewotICByZXR1cm4gKCF4KTsK
LX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3Qg
T3B0aW9uYWw8VD4mIHgsIG51bGxvcHRfdCkgX19OT0VYQ0VQVAotewotICByZXR1cm4gYm9vbCh4
KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0obnVs
bG9wdF90LCBjb25zdCBPcHRpb25hbDxUPiYgeCkgX19OT0VYQ0VQVAotewotICByZXR1cm4gYm9v
bCh4KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChj
b25zdCBPcHRpb25hbDxUPiYsIG51bGxvcHRfdCkgX19OT0VYQ0VQVAotewotICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwobnVs
bG9wdF90LCBjb25zdCBPcHRpb25hbDxUPiYgeCkgX19OT0VYQ0VQVAotewotICByZXR1cm4gYm9v
bCh4KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0o
Y29uc3QgT3B0aW9uYWw8VD4mIHgsIG51bGxvcHRfdCkgX19OT0VYQ0VQVAotewotICByZXR1cm4g
KCF4KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0o
bnVsbG9wdF90LCBjb25zdCBPcHRpb25hbDxUPiYpIF9fTk9FWENFUFQKLXsKLSAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29u
c3QgT3B0aW9uYWw8VD4mIHgsIG51bGxvcHRfdCkgX19OT0VYQ0VQVAotewotICByZXR1cm4gYm9v
bCh4KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihu
dWxsb3B0X3QsIGNvbnN0IE9wdGlvbmFsPFQ+JikgX19OT0VYQ0VQVAotewotICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KGNv
bnN0IE9wdGlvbmFsPFQ+JiwgbnVsbG9wdF90KSBfX05PRVhDRVBUCi17Ci0gIHJldHVybiB0cnVl
OwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShudWxs
b3B0X3QsIGNvbnN0IE9wdGlvbmFsPFQ+JiB4KSBfX05PRVhDRVBUCi17Ci0gIHJldHVybiAoIXgp
OwotfQotCi0KLQotLy8gMjAuNS4xMCwgQ29tcGFyaXNvbiB3aXRoIFQKLXRlbXBsYXRlIDxjbGFz
cyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBjb25z
dCBUJiB2KQotewotICByZXR1cm4gYm9vbCh4KSA/ICp4ID09IHYgOiBmYWxzZTsKLX0KLQotdGVt
cGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgVCYgdiwgY29u
c3QgT3B0aW9uYWw8VD4mIHgpCi17Ci0gIHJldHVybiBib29sKHgpID8gdiA9PSAqeCA6IGZhbHNl
OwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBPcHRpb25hbDxUPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCAh
PSB2IDogdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJh
dG9yIT0oY29uc3QgVCYgdiwgY29uc3QgT3B0aW9uYWw8VD4mIHgpCi17Ci0gIHJldHVybiBib29s
KHgpID8gdiAhPSAqeCA6IHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIg
Ym9vbCBvcGVyYXRvcjwoY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0IFQmIHYpCi17Ci0gIHJl
dHVybiBib29sKHgpID8gKnggPCB2IDogdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNv
bnN0ZXhwciBib29sIG9wZXJhdG9yPihjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxUPiYgeCkK
LXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2ID4gKnggOiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8Y2xh
c3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBjb25z
dCBUJiB2KQotewotICByZXR1cm4gYm9vbCh4KSA/ICp4ID4gdiA6IGZhbHNlOwotfQotCi10ZW1w
bGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFQmIHYsIGNvbnN0
IE9wdGlvbmFsPFQ+JiB4KQotewotICByZXR1cm4gYm9vbCh4KSA/IHYgPCAqeCA6IGZhbHNlOwot
fQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCBP
cHRpb25hbDxUPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA+PSB2
IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRv
cjw9KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPFQ+JiB4KQotewotICByZXR1cm4gYm9vbCh4
KSA/IHYgPD0gKnggOiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBi
b29sIG9wZXJhdG9yPD0oY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0IFQmIHYpCi17Ci0gIHJl
dHVybiBib29sKHgpID8gKnggPD0gdiA6IHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPFQ+JiB4
KQotewotICByZXR1cm4gYm9vbCh4KSA/IHYgPj0gKnggOiB0cnVlOwotfQogCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiB1c2luZyBPcHRpb25hbCA9IHN0ZDo6b3B0aW9uYWw8VD47Citjb25zdGV4cHIg
YXV0byBudWxsb3B0ID0gc3RkOjpudWxsb3B0OwordXNpbmcgbnVsbG9wdF90ID0gc3RkOjpudWxs
b3B0X3Q7CiAKLS8vIENvbXBhcmlzb24gb2YgT3B0aW9uYWw8VCY+IHdpdGggVAotdGVtcGxhdGUg
PGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgT3B0aW9uYWw8VCY+JiB4
LCBjb25zdCBUJiB2KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRU
eXBlcz4gY29uc3RleHByIHN0ZDo6b3B0aW9uYWw8c3RkOjpkZWNheV90PFQ+PiBtYWtlT3B0aW9u
YWwoVCYmIHZhbHVlKQogewotICByZXR1cm4gYm9vbCh4KSA/ICp4ID09IHYgOiBmYWxzZTsKKyAg
ICByZXR1cm4gc3RkOjptYWtlX29wdGlvbmFsPHN0ZDo6ZGVjYXlfdDxUPj4oc3RkOjpmb3J3YXJk
PFQ+KHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPFQmPiYgeCkKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+IGNvbnN0ZXhwciBzdGQ6Om9wdGlvbmFs
PFQ+IG1ha2VPcHRpb25hbChBcmd1bWVudFR5cGVzJiYuLi4gYXJndW1lbnRzKQogewotICByZXR1
cm4gYm9vbCh4KSA/IHYgPT0gKnggOiBmYWxzZTsKKyAgICByZXR1cm4gc3RkOjptYWtlX29wdGlv
bmFsPFQ+KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudFR5cGVzPihhcmd1bWVudHMpLi4uKTsKIH0KIAot
dGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgT3B0aW9u
YWw8VCY+JiB4LCBjb25zdCBUJiB2KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4gY29uc3RleHByIHN0ZDo6b3B0aW9uYWw8VD4gbWFr
ZU9wdGlvbmFsKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVPiBsaXN0LCBBcmd1bWVudFR5cGVzJiYu
Li4gYXJndW1lbnRzKQogewotICByZXR1cm4gYm9vbCh4KSA/ICp4ICE9IHYgOiB0cnVlOworICAg
IHJldHVybiBzdGQ6Om1ha2Vfb3B0aW9uYWw8VD4obGlzdCwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50
VHlwZXM+KGFyZ3VtZW50cykuLi4pOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHBy
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxUJj4mIHgpCisvLyBG
SVhNRTogV2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0aGlzOyBpdCdzIG9ubHkgdXNlZCBpbiA1IHBs
YWNlcy4KK3RlbXBsYXRlPHR5cGVuYW1lIE9wdGlvbmFsVHlwZSwgY2xhc3MgQ2FsbGJhY2s+IGF1
dG8gdmFsdWVPckNvbXB1dGUoT3B0aW9uYWxUeXBlIG9wdGlvbmFsLCBDYWxsYmFjayBjYWxsYmFj
aykgLT4gdHlwZW5hbWUgT3B0aW9uYWxUeXBlOjp2YWx1ZV90eXBlCiB7Ci0gIHJldHVybiBib29s
KHgpID8gdiAhPSAqeCA6IHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIg
Ym9vbCBvcGVyYXRvcjwoY29uc3QgT3B0aW9uYWw8VCY+JiB4LCBjb25zdCBUJiB2KQotewotICBy
ZXR1cm4gYm9vbCh4KSA/ICp4IDwgdiA6IHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgVCYgdiwgY29uc3QgT3B0aW9uYWw8VCY+JiB4
KQotewotICByZXR1cm4gYm9vbCh4KSA/IHYgPiAqeCA6IHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxj
bGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgT3B0aW9uYWw8VCY+JiB4LCBj
b25zdCBUJiB2KQotewotICByZXR1cm4gYm9vbCh4KSA/ICp4ID4gdiA6IGZhbHNlOwotfQotCi10
ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFQmIHYsIGNv
bnN0IE9wdGlvbmFsPFQmPiYgeCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2IDwgKnggOiBmYWxz
ZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0oY29u
c3QgT3B0aW9uYWw8VCY+JiB4LCBjb25zdCBUJiB2KQotewotICByZXR1cm4gYm9vbCh4KSA/ICp4
ID49IHYgOiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9w
ZXJhdG9yPD0oY29uc3QgVCYgdiwgY29uc3QgT3B0aW9uYWw8VCY+JiB4KQotewotICByZXR1cm4g
Ym9vbCh4KSA/IHYgPD0gKnggOiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0
ZXhwciBib29sIG9wZXJhdG9yPD0oY29uc3QgT3B0aW9uYWw8VCY+JiB4LCBjb25zdCBUJiB2KQot
ewotICByZXR1cm4gYm9vbCh4KSA/ICp4IDw9IHYgOiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8Y2xh
c3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCBUJiB2LCBjb25zdCBPcHRpb25h
bDxUJj4mIHgpCi17Ci0gIHJldHVybiBib29sKHgpID8gdiA+PSAqeCA6IHRydWU7Ci19Ci0KLS8v
IENvbXBhcmlzb24gb2YgT3B0aW9uYWw8VCBjb25zdCY+IHdpdGggVAotdGVtcGxhdGUgPGNsYXNz
IFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgT3B0aW9uYWw8Y29uc3QgVCY+JiB4
LCBjb25zdCBUJiB2KQotewotICByZXR1cm4gYm9vbCh4KSA/ICp4ID09IHYgOiBmYWxzZTsKLX0K
LQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgVCYg
diwgY29uc3QgT3B0aW9uYWw8Y29uc3QgVCY+JiB4KQotewotICByZXR1cm4gYm9vbCh4KSA/IHYg
PT0gKnggOiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9w
ZXJhdG9yIT0oY29uc3QgT3B0aW9uYWw8Y29uc3QgVCY+JiB4LCBjb25zdCBUJiB2KQotewotICBy
ZXR1cm4gYm9vbCh4KSA/ICp4ICE9IHYgOiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4g
Y29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxjb25z
dCBUJj4mIHgpCi17Ci0gIHJldHVybiBib29sKHgpID8gdiAhPSAqeCA6IHRydWU7Ci19Ci0KLXRl
bXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoY29uc3QgT3B0aW9uYWw8
Y29uc3QgVCY+JiB4LCBjb25zdCBUJiB2KQotewotICByZXR1cm4gYm9vbCh4KSA/ICp4IDwgdiA6
IHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4o
Y29uc3QgVCYgdiwgY29uc3QgT3B0aW9uYWw8Y29uc3QgVCY+JiB4KQotewotICByZXR1cm4gYm9v
bCh4KSA/IHYgPiAqeCA6IHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIg
Ym9vbCBvcGVyYXRvcj4oY29uc3QgT3B0aW9uYWw8Y29uc3QgVCY+JiB4LCBjb25zdCBUJiB2KQot
ewotICByZXR1cm4gYm9vbCh4KSA/ICp4ID4gdiA6IGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8Y2xh
c3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFs
PGNvbnN0IFQmPiYgeCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2IDwgKnggOiBmYWxzZTsKLX0K
LQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0oY29uc3QgT3B0
aW9uYWw8Y29uc3QgVCY+JiB4LCBjb25zdCBUJiB2KQotewotICByZXR1cm4gYm9vbCh4KSA/ICp4
ID49IHYgOiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9w
ZXJhdG9yPD0oY29uc3QgVCYgdiwgY29uc3QgT3B0aW9uYWw8Y29uc3QgVCY+JiB4KQotewotICBy
ZXR1cm4gYm9vbCh4KSA/IHYgPD0gKnggOiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+
IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0oY29uc3QgT3B0aW9uYWw8Y29uc3QgVCY+JiB4LCBj
b25zdCBUJiB2KQotewotICByZXR1cm4gYm9vbCh4KSA/ICp4IDw9IHYgOiB0cnVlOwotfQotCi10
ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCBUJiB2LCBj
b25zdCBPcHRpb25hbDxjb25zdCBUJj4mIHgpCi17Ci0gIHJldHVybiBib29sKHgpID8gdiA+PSAq
eCA6IHRydWU7Ci19Ci0KLQotLy8gMjAuNS4xMiwgU3BlY2lhbGl6ZWQgYWxnb3JpdGhtcwotdGVt
cGxhdGUgPGNsYXNzIFQ+Ci12b2lkIHN3YXAoT3B0aW9uYWw8VD4mIHgsIE9wdGlvbmFsPFQ+JiB5
KSBfX05PRVhDRVBUXyhfX05PRVhDRVBUXyh4LnN3YXAoeSkpKQotewotICB4LnN3YXAoeSk7Ci19
Ci0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1jb25zdGV4cHIgT3B0aW9uYWw8dHlwZW5hbWUgc3Rk
OjpkZWNheTxUPjo6dHlwZT4gbWFrZU9wdGlvbmFsKFQmJiB2KQotewotICByZXR1cm4gT3B0aW9u
YWw8dHlwZW5hbWUgc3RkOjpkZWNheTxUPjo6dHlwZT4oZGV0YWlsXzo6Y29uc3RleHByX2Zvcndh
cmQ8VD4odikpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgWD4KLWNvbnN0ZXhwciBPcHRpb25hbDxY
Jj4gbWFrZU9wdGlvbmFsKHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8WD4gdikKLXsKLSAgcmV0dXJu
IE9wdGlvbmFsPFgmPih2LmdldCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLW5hbWVz
cGFjZSBzdGQKLXsKLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gIHN0cnVjdCBoYXNoPFdURjo6
T3B0aW9uYWw8VD4+Ci0gIHsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGhhc2g8VD46OnJlc3VsdF90
eXBlIHJlc3VsdF90eXBlOwotICAgIHR5cGVkZWYgV1RGOjpPcHRpb25hbDxUPiBhcmd1bWVudF90
eXBlOwotCi0gICAgY29uc3RleHByIHJlc3VsdF90eXBlIG9wZXJhdG9yKCkoYXJndW1lbnRfdHlw
ZSBjb25zdCYgYXJnKSBjb25zdCB7Ci0gICAgICByZXR1cm4gYXJnID8gc3RkOjpoYXNoPFQ+e30o
KmFyZykgOiByZXN1bHRfdHlwZXt9OwotICAgIH0KLSAgfTsKLQotICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KLSAgc3RydWN0IGhhc2g8V1RGOjpPcHRpb25hbDxUJj4+Ci0gIHsKLSAgICB0eXBlZGVm
IHR5cGVuYW1lIGhhc2g8VD46OnJlc3VsdF90eXBlIHJlc3VsdF90eXBlOwotICAgIHR5cGVkZWYg
V1RGOjpPcHRpb25hbDxUJj4gYXJndW1lbnRfdHlwZTsKLQotICAgIGNvbnN0ZXhwciByZXN1bHRf
dHlwZSBvcGVyYXRvcigpKGFyZ3VtZW50X3R5cGUgY29uc3QmIGFyZykgY29uc3QgewotICAgICAg
cmV0dXJuIGFyZyA/IHN0ZDo6aGFzaDxUPnt9KCphcmcpIDogcmVzdWx0X3R5cGV7fTsKLSAgICB9
Ci0gIH07Ci19Ci0KLSMgdW5kZWYgVFIyX09QVElPTkFMX1JFUVVJUkVTCi0KLW5hbWVzcGFjZSBX
VEYgewotCi0vLyAtLSBXZWJLaXQgQWRkaXRpb25zIC0tCi10ZW1wbGF0ZSA8Y2xhc3MgT3B0aW9u
YWxUeXBlLCBjbGFzcyBDYWxsYmFjaz4KLUFMV0FZU19JTkxJTkUKLWF1dG8gdmFsdWVPckNvbXB1
dGUoT3B0aW9uYWxUeXBlIE9wdGlvbmFsLCBDYWxsYmFjayBjYWxsYmFjaykgLT4gdHlwZW5hbWUg
T3B0aW9uYWxUeXBlOjp2YWx1ZV90eXBlCi17Ci0gICAgaWYgKE9wdGlvbmFsKQotICAgICAgICBy
ZXR1cm4gKk9wdGlvbmFsOwotICAgIHJldHVybiBjYWxsYmFjaygpOworICAgIHJldHVybiBvcHRp
b25hbCA/ICpvcHRpb25hbCA6IGNhbGxiYWNrKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpA
QCAtMTA0OSwzICs1NCw3IEBAIGF1dG8gdmFsdWVPckNvbXB1dGUoT3B0aW9uYWxUeXBlIE9wdGlv
bmFsLCBDYWxsYmFjayBjYWxsYmFjaykgLT4gdHlwZW5hbWUgT3B0aW9uCiB1c2luZyBXVEY6Ok9w
dGlvbmFsOwogdXNpbmcgV1RGOjptYWtlT3B0aW9uYWw7CiB1c2luZyBXVEY6OnZhbHVlT3JDb21w
dXRlOworCisvLyBGSVhNRTogVGhlc2UgbWFjcm9zIGFyZSBhIHdvcmthcm91bmQgdG8gYWxsb3cg
dXMgdG8gdXNlIHN0ZDo6b3B0aW9uYWwgd2l0aG91dCBhIGdsb2JhbCByZXBsYWNlOyB0aGV5IGNh
biBiZSByZW1vdmVkIGFmdGVyIHNhaWQgZ2xvYmFsIHJlcGxhY2UuCisjZGVmaW5lIGhhc1ZhbHVl
IGhhc192YWx1ZQorI2RlZmluZSB2YWx1ZU9yIHZhbHVlX29yCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaCBiL1NvdXJjZS9XVEYvd3RmL3Bl
cnNpc3RlbmNlL1BlcnNpc3RlbnRDb2Rlci5oCmluZGV4IGNjNzQ4YzkzYWM4MjgxMmU4NjZhZjY3
ZWNmZDhmZjYzZTljZDRlNzguLjYxNWJkMTI1N2M4OTcyNDA3NDNmM2I1NWEyNjIxM2I2MmEwMzkw
ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2Rl
ci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2Rlci5oCkBA
IC0yNSwxMCArMjUsOSBAQAogCiAjcHJhZ21hIG9uY2UKIAotbmFtZXNwYWNlIFdURiB7CisjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KIAotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1jbGFzcyBPcHRpb25h
bDsKK25hbWVzcGFjZSBXVEYgewogCiBuYW1lc3BhY2UgUGVyc2lzdGVuY2UgewogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9WUDlVdGlsaXRpZXMuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1ZQOVV0aWxpdGllcy5oCmluZGV4IGRhMzA5
MDBhNGVjNzIzODNlM2ViMDMzZDVjNDY2NWMwN2VjZDk1N2EuLmExODhhNzQ0ZDQyNjY1ZWY4NDZj
NTIwNjUxMGUwMDRiNTI0Mzk5ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1ZQOVV0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1ZQOVV0aWxpdGllcy5oCkBAIC0xNDQsMTQgKzE0NCwxNCBAQCBzdHJ1Y3QgU2NyZWVu
RGF0YU92ZXJyaWRlcyB7CiAgICAgc3RhdGljIE9wdGlvbmFsPFNjcmVlbkRhdGFPdmVycmlkZXM+
IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKICNkZWZpbmUgREVDT0RFKG5hbWUsIHR5
cGUpIFwKLSAgICBPcHRpb25hbDx0eXBlPiBuYW1lOyBcCi0gICAgZGVjb2RlciA+PiBuYW1lOyBc
Ci0gICAgaWYgKCFuYW1lKSBcCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7IFwKLQotICAg
IERFQ09ERSh3aWR0aCwgZG91YmxlKTsKLSAgICBERUNPREUoaGVpZ2h0LCBkb3VibGUpOwotICAg
IERFQ09ERShzY2FsZSwgZG91YmxlKTsKKyAgICAgICAgT3B0aW9uYWw8dHlwZT4gbmFtZTsgXAor
ICAgICAgICBkZWNvZGVyID4+IG5hbWU7IFwKKyAgICAgICAgaWYgKCFuYW1lKSBcCisgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OyBcCisKKyAgICAgICAgREVDT0RFKHdpZHRoLCBkb3Vi
bGUpOworICAgICAgICBERUNPREUoaGVpZ2h0LCBkb3VibGUpOworICAgICAgICBERUNPREUoc2Nh
bGUsIGRvdWJsZSk7CiAjdW5kZWYgREVDT0RFCiAKICAgICByZXR1cm4ge3sgV1RGTW92ZSgqd2lk
dGgpLCBXVEZNb3ZlKCpoZWlnaHQpLCBXVEZNb3ZlKCpzY2FsZSkgfX07CkBAIC0xNjMsNSArMTYz
LDkgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTY3JlZW5EYXRhT3ZlcnJpZGVzJiBh
LCBjb25zdCBTY3JlZW5EYXRhT3ZlcnJpZGVzJgogICAgIHJldHVybiBhLndpZHRoID09IGIud2lk
dGggJiYgYS5oZWlnaHQgPT0gYi5oZWlnaHQgJiYgYS5zY2FsZSA9PSBiLnNjYWxlOwogfQogCitp
bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNjcmVlbkRhdGFPdmVycmlkZXMmIGEsIGNvbnN0
IFNjcmVlbkRhdGFPdmVycmlkZXMmIGIpCit7CisgICAgcmV0dXJuICEoYSA9PSBiKTsKK30KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDQyMmNlNTVkODE1MjY4ZWFj
NjdmYjIwNWVmZGIyMjVkYTA1YThlZWYuLmQyNTE4MzVlYmZiNzFlYzUwNTQxNGRlZjFjNDE3YzBl
NGIwMGZjYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTYwMjgsNyAr
NjAyOCw3IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRIYXJkd2FyZVZQOURlY29kZXJEaXNhYmxlZEZv
clRlc3RpbmcoYm9vbCBkaXNhYmxlZCkKIHZvaWQgSW50ZXJuYWxzOjpzZXRWUDlTY3JlZW5TaXpl
QW5kU2NhbGVGb3JUZXN0aW5nKGRvdWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCwgZG91YmxlIHNj
YWxlKQogewogI2lmIEVOQUJMRShWUDkpICYmIFBMQVRGT1JNKENPQ09BKQotICAgIFZQOVRlc3Rp
bmdPdmVycmlkZXM6OnNpbmdsZXRvbigpLnNldFZQOVNjcmVlblNpemVBbmRTY2FsZShtYWtlT3B0
aW9uYWw8U2NyZWVuRGF0YU92ZXJyaWRlcz4oeyB3aWR0aCwgaGVpZ2h0LCBzY2FsZSB9KSk7Cisg
ICAgVlA5VGVzdGluZ092ZXJyaWRlczo6c2luZ2xldG9uKCkuc2V0VlA5U2NyZWVuU2l6ZUFuZFNj
YWxlKFNjcmVlbkRhdGFPdmVycmlkZXMgeyB3aWR0aCwgaGVpZ2h0LCBzY2FsZSB9KTsKICNlbHNl
CiAgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKICAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXIuaCBiL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXIuaAppbmRleCAzYWI5ZmNjNWVk
MTAzNTU5YjFiNmViM2I0ZWQxMDZmNWJiZDI2OTZiLi41ZWZkMzI2ZWJmZmExM2IyMzA1NmJjYTQx
NWM3Y2E2NmIwMTVkNjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9B
cmd1bWVudENvZGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRD
b2Rlci5oCkBAIC01Niw3ICs1Niw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0g
dm9pZD4gc3RydWN0IEFyZ3VtZW50Q29kZXIgewogICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
IFQgdDsKICAgICAgICAgICAgIGlmIChUOjpkZWNvZGUoZGVjb2RlciwgdCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUodCk7CiAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvVG91Y2hCYXJNZW51RGF0YS5oIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvVG91Y2hCYXJNZW51RGF0YS5oCmluZGV4IDMxYWMwOTI4M2Q4ZTlhMTZmNDFkNDU4
Yjc5OWM5MmNkMDQ4YTAwYTEuLjczY2MwN2E3NTE5OWM0MzA5MzAwZWM1ZTg2NGJjOGE0NWM0NDhi
YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1RvdWNoQmFyTWVudURhdGEuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Ub3VjaEJhck1lbnVEYXRhLmgKQEAgLTI3LDkgKzI3
LDggQEAKIAogI2lmIEhBVkUoVE9VQ0hfQkFSKQogCi0jaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMu
aCIKICNpbmNsdWRlICJUb3VjaEJhck1lbnVJdGVtRGF0YS5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIElQQyB7
CiBjbGFzcyBEZWNvZGVyOwpAQCAtNDQsOSArNDMsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
Y2xhc3MgVG91Y2hCYXJNZW51RGF0YSB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgVG91Y2hCYXJN
ZW51RGF0YSgpID0gZGVmYXVsdDsKKyAgICBUb3VjaEJhck1lbnVEYXRhKCkgPSBkZWZhdWx0Owog
ICAgIGV4cGxpY2l0IFRvdWNoQmFyTWVudURhdGEoY29uc3QgV2ViQ29yZTo6SFRNTE1lbnVFbGVt
ZW50Jik7Ci0gICAgZXhwbGljaXQgVG91Y2hCYXJNZW51RGF0YShjb25zdCBUb3VjaEJhck1lbnVE
YXRhJikgPSBkZWZhdWx0OwogCiAgICAgdm9pZCBhZGRNZW51SXRlbShjb25zdCBUb3VjaEJhck1l
bnVJdGVtRGF0YSYpOwogICAgIHZvaWQgcmVtb3ZlTWVudUl0ZW0oY29uc3QgVG91Y2hCYXJNZW51
SXRlbURhdGEmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRp
b24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0
b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKaW5kZXggMDU0ZWFlNDZlMDc4ZTA2ODA1
N2FhMzkyNDQyOWZkY2EwYjJlMjQzOC4uOTg0ZTUwN2U3M2NiZjEwNmQ2NjFhMjNlZjE3OWU5OTFh
NTNhMjRkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9X
ZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0
b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKQEAgLTM2OSwxMiArMzY5LDEyIEBAIHZv
aWQgV2ViQXV0b21hdGlvblNlc3Npb246OnN3aXRjaFRvQnJvd3NpbmdDb250ZXh0KGNvbnN0IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1CiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVE
X0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAogICAgIGJvb2wgZnJhbWVOb3RGb3VuZCA9IGZhbHNl
OwotICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUoZnJhbWVIYW5kbGUsIGZy
YW1lTm90Rm91bmQpOworICAgIHdlYkZyYW1lSURGb3JIYW5kbGUoZnJhbWVIYW5kbGUsIGZyYW1l
Tm90Rm91bmQpOwogICAgIGlmIChmcmFtZU5vdEZvdW5kKQogICAgICAgICBBU1lOQ19GQUlMX1dJ
VEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKIAotCi0gICAgbV9jbGllbnQtPnJl
cXVlc3RTd2l0Y2hUb1BhZ2UoKnRoaXMsICpwYWdlLCBbZnJhbWVJRCwgcGFnZSA9IG1ha2VSZWYo
KnBhZ2UpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSgpIHsKKyAgICAvLyBGSVhNRTog
U2hvdWxkIHdlIGFsc28gc3dpdGNoIHRvIHRoZSBmcmFtZSB0aGF0IGZyYW1lSGFuZGxlIHBvaW50
cyB0bz8KKyAgICBtX2NsaWVudC0+cmVxdWVzdFN3aXRjaFRvUGFnZSgqdGhpcywgKnBhZ2UsIFtw
YWdlID0gbWFrZVJlZigqcGFnZSksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKCkgewog
ICAgICAgICBwYWdlLT5zZXRGb2N1cyh0cnVlKTsKIAogICAgICAgICBjYWxsYmFjay0+c2VuZFN1
Y2Nlc3MoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCBjYTUyNzhjMWNkNzllZTc5ZjU4ZDRmNjg4YjBmMzllMzI3NWMyYzg0Li4wYzU2YzA4NmVl
MjJhOGU3ZjczODcyNjc5YjUzYzBiYjdhMjE3MGU0IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjEtMDUtMjQgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFN3aXRjaCBmcm9tIFdURjo6
T3B0aW9uYWwgdG8gc3RkOjpvcHRpb25hbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjExNjc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHk6IFJl
bW92ZWQgZXhjZXB0aW9ucyBmcm9tIHRoZSBXVEY6Ok9wdGlvbmFsCisgICAgICAgIHN0eWxlIHJ1
bGUgZm9yIFdlYlJUQy4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tl
cnMvY3BwLnB5OiBSZW1vdmVkIGNoZWNrX3d0Zl9vcHRpb25hbC4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0dGVzdC5weTogUmVtb3ZlZCB0ZXN0X3d0
Zl9vcHRpb25hbC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0OiBSZW1v
dmVkIE9wdGlvbmFsLmNwcC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvT3B0aW9uYWwuY3BwOiBSZW1vdmVkLgorCiAyMDIxLTA1LTI0ICBBbmdlbG9z
IE9pa29ub21vcG91bG9zICA8YW5nZWxvc0BpZ2FsaWEuY29tPgogCiAgICAgICAgIEJlIHJlc2ls
aWVudCBhZ2FpbnN0IHJlbW90ZSBmYWlsdXJlIHdoZW4gZGV0ZXJtaW5pbmcgdGhlIG5hdGl2ZSBh
cmNoaXRlY3R1cmUKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hl
Y2tlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQppbmRleCA3
MTBmOTg4NzU5Y2JhMjk2YzQwNGVmZGM2NDMyMTM5YjI4ZjllNDExLi4zMDk0YTI1YzYwNzM1MGFh
MGJkYWU3Yjc5YmViNzZhOGJiZGFjOGQ0IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0eWxlL2NoZWNrZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9j
aGVja2VyLnB5CkBAIC0yNzIsMTIgKzI3Miw2IEBAIF9QQVRIX1JVTEVTX1NQRUNJRklFUiA9IFsK
ICAgICAgICItd2hpdGVzcGFjZS9kZWNsYXJhdGlvbiIsCiAgICAgICAiLXdoaXRlc3BhY2UvaW5k
ZW50Il0pLAogCi0gICAgKFsgICMgRmlsZXMgZm9sbG93aW5nIHVzaW5nIFdlYlJUQyBvcHRpb25u
YWwgdHlwZQotICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9y
bScsICdtZWRpYXN0cmVhbScsICdsaWJ3ZWJydGMnLCAnR1N0cmVhbWVyVmlkZW9EZWNvZGVyRmFj
dG9yeS5jcHAnKSwKLSAgICAgXSwKLSAgICAgWyItcnVudGltZS93dGZfb3B0aW9uYWwiLAotICAg
ICBdKSwKLQogICAgIChbCiAgICAgICAjIFRoZXJlIGlzIG5vIHdheSB0byBhdm9pZCB0aGUgc3lt
Ym9scyBfX2ppdF9kZWJ1Z19yZWdpc3Rlcl9jb2RlCiAgICAgICAjIGFuZCBfX2ppdF9kZWJ1Z19k
ZXNjcmlwdG9yIHdoZW4gaW50ZWdyYXRpbmcgd2l0aCBnZGIuCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5CmluZGV4IDhiMDdiODdmY2JmMWNjMWU5YmQzNzEx
OGI4MDZmMDVlMzk3YzU3MzUuLjNmNTdkZjhhOGRjOGI0MzM3NTZmYWY1ZmE3NTRhYTA0MGIwNjhh
ZDkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3Bw
LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5CkBA
IC0yNzA1LDI2ICsyNzA1LDYgQEAgZGVmIGNoZWNrX3d0Zl9tb3ZlKGNsZWFuX2xpbmVzLCBsaW5l
X251bWJlciwgZmlsZV9zdGF0ZSwgZXJyb3IpOgogICAgIGVycm9yKGxpbmVfbnVtYmVyLCAncnVu
dGltZS93dGZfbW92ZScsIDQsICJVc2UgJ1dURk1vdmUoKScgaW5zdGVhZCBvZiAnc3RkOjptb3Zl
KCknLiIpCiAKIAotZGVmIGNoZWNrX3d0Zl9vcHRpb25hbChjbGVhbl9saW5lcywgbGluZV9udW1i
ZXIsIGZpbGVfc3RhdGUsIGVycm9yKToKLSAgICAiIiJMb29rcyBmb3IgdXNlIG9mICdzdGQ6Om9w
dGlvbmFsPD4nIHdoaWNoIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoICdXVEY6Ok9wdGlvbmFsPD4n
LgotCi0gICAgQXJnczoKLSAgICAgIGNsZWFuX2xpbmVzOiBBIENsZWFuc2VkTGluZXMgaW5zdGFu
Y2UgY29udGFpbmluZyB0aGUgZmlsZS4KLSAgICAgIGxpbmVfbnVtYmVyOiBUaGUgbnVtYmVyIG9m
IHRoZSBsaW5lIHRvIGNoZWNrLgotICAgICAgZmlsZV9zdGF0ZTogQSBfRmlsZVN0YXRlIGluc3Rh
bmNlIHdoaWNoIG1haW50YWlucyBpbmZvcm1hdGlvbiBhYm91dAotICAgICAgICAgICAgICAgICAg
dGhlIHN0YXRlIG9mIHRoaW5ncyBpbiB0aGUgZmlsZS4KLSAgICAgIGVycm9yOiBUaGUgZnVuY3Rp
b24gdG8gY2FsbCB3aXRoIGFueSBlcnJvcnMgZm91bmQuCi0gICAgIiIiCi0KLSAgICBsaW5lID0g
Y2xlYW5fbGluZXMuZWxpZGVkW2xpbmVfbnVtYmVyXSAgIyBHZXQgcmlkIG9mIGNvbW1lbnRzIGFu
ZCBzdHJpbmdzLgotCi0gICAgdXNpbmdfc3RkX29wdGlvbmFsID0gc2VhcmNoKHInXGJvcHRpb25h
bFxzKlw8JywgbGluZSkKLSAgICBpZiBub3QgdXNpbmdfc3RkX29wdGlvbmFsOgotICAgICAgICBy
ZXR1cm4KLQotICAgIGVycm9yKGxpbmVfbnVtYmVyLCAncnVudGltZS93dGZfb3B0aW9uYWwnLCA0
LCAiVXNlICdXVEY6Ok9wdGlvbmFsPD4nIGluc3RlYWQgb2YgJ3N0ZDo6b3B0aW9uYWw8PicuIikK
LQotCiBkZWYgY2hlY2tfY2FsbG9ubWFpbnRocmVhZChmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxp
bmVfbnVtYmVyLCBmaWxlX3N0YXRlLCBlcnJvcik6CiAgICAgIiIiTG9va3MgZm9yIHVzZSBvZiAn
Y2FsbE9uTWFpblRocmVhZCgpJyB3aGljaCBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCAnY2FsbE9u
TWFpblJ1bkxvb3AoKScuCiAKQEAgLTM0MjYsNyArMzQwNiw2IEBAIGRlZiBjaGVja19zdHlsZShj
bGVhbl9saW5lcywgbGluZV9udW1iZXIsIGZpbGVfZXh0ZW5zaW9uLCBjbGFzc19zdGF0ZSwgZmls
ZV9zdGF0CiAgICAgY2hlY2tfbWF4X21pbl9tYWNyb3MoY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVy
LCBmaWxlX3N0YXRlLCBlcnJvcikKICAgICBjaGVja193dGZfY2hlY2tlZF9zaXplKGNsZWFuX2xp
bmVzLCBsaW5lX251bWJlciwgZmlsZV9zdGF0ZSwgZXJyb3IpCiAgICAgY2hlY2tfd3RmX21vdmUo
Y2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBmaWxlX3N0YXRlLCBlcnJvcikKLSAgICBjaGVja193
dGZfb3B0aW9uYWwoY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBmaWxlX3N0YXRlLCBlcnJvcikK
ICAgICBjaGVja193dGZfbWFrZV91bmlxdWUoY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBmaWxl
X3N0YXRlLCBlcnJvcikKICAgICBjaGVja193dGZfbmV2ZXJfZGVzdHJveWVkKGNsZWFuX2xpbmVz
LCBsaW5lX251bWJlciwgZmlsZV9zdGF0ZSwgZXJyb3IpCiAgICAgY2hlY2tfbG9ja19ndWFyZChj
bGVhbl9saW5lcywgbGluZV9udW1iZXIsIGZpbGVfc3RhdGUsIGVycm9yKQpAQCAtNDY1Niw3ICs0
NjM1LDYgQEAgY2xhc3MgQ3BwQ2hlY2tlcihvYmplY3QpOgogICAgICAgICAncnVudGltZS91bnNp
Z25lZCcsCiAgICAgICAgICdydW50aW1lL3ZpcnR1YWwnLAogICAgICAgICAncnVudGltZS93dGZf
Y2hlY2tlZF9zaXplJywKLSAgICAgICAgJ3J1bnRpbWUvd3RmX29wdGlvbmFsJywKICAgICAgICAg
J3J1bnRpbWUvd3RmX21ha2VfdW5pcXVlJywKICAgICAgICAgJ3J1bnRpbWUvd3RmX21vdmUnLAog
ICAgICAgICAncnVudGltZS93dGZfbmV2ZXJfZGVzdHJveWVkJywKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwX3VuaXR0ZXN0LnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHBfdW5pdHRlc3QucHkKaW5kZXggYjcy
MGNmZDFjODE1MzBlMmFkNGZhNmRiYjIyMGY5Zjg4NDU1NzViZC4uMDQyMzVjZDhlZDljMTAwZDgz
ZmI3NGIwOWM5ZGFkYTM4M2VlNzBkNyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9zdHlsZS9jaGVja2Vycy9jcHBfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9zdHlsZS9jaGVja2Vycy9jcHBfdW5pdHRlc3QucHkKQEAgLTU2NTUsMjkgKzU2NTUsNiBA
QCBjbGFzcyBXZWJLaXRTdHlsZVRlc3QoQ3BwU3R5bGVUZXN0QmFzZSk6CiAgICAgICAgICAgICAi
ICBbcnVudGltZS93dGZfbmV2ZXJfZGVzdHJveWVkXSBbNF0iLAogICAgICAgICAgICAgJ2Zvby5t
bScpCiAKLSAgICBkZWYgdGVzdF93dGZfb3B0aW9uYWwoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNz
ZXJ0X2xpbnQoCi0gICAgICAgICAgICAgJ09wdGlvbmFsPGludD4gYTsnLAotICAgICAgICAgICAg
ICcnLAotICAgICAgICAgICAgICdmb28uY3BwJykKLQotICAgICAgICBzZWxmLmFzc2VydF9saW50
KAotICAgICAgICAgICAgICdXVEY6Ok9wdGlvbmFsPGludD4gYTsnLAotICAgICAgICAgICAgICcn
LAotICAgICAgICAgICAgICdmb28uY3BwJykKLQotICAgICAgICBzZWxmLmFzc2VydF9saW50KAot
ICAgICAgICAgICAgJ3N0ZDo6b3B0aW9uYWw8aW50PiBhOycsCi0gICAgICAgICAgICAiVXNlICdX
VEY6Ok9wdGlvbmFsPD4nIGluc3RlYWQgb2YgJ3N0ZDo6b3B0aW9uYWw8PicuIgotICAgICAgICAg
ICAgIiAgW3J1bnRpbWUvd3RmX29wdGlvbmFsXSBbNF0iLAotICAgICAgICAgICAgJ2Zvby5jcHAn
KQotCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAnb3B0aW9uYWw8aW50
PiBhOycsCi0gICAgICAgICAgICAiVXNlICdXVEY6Ok9wdGlvbmFsPD4nIGluc3RlYWQgb2YgJ3N0
ZDo6b3B0aW9uYWw8PicuIgotICAgICAgICAgICAgIiAgW3J1bnRpbWUvd3RmX29wdGlvbmFsXSBb
NF0iLAotICAgICAgICAgICAgJ2Zvby5jcHAnKQotCiAgICAgZGVmIHRlc3RfbG9ja19ndWFyZChz
ZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKICAgICAgICAgICAgICdMb2NrZXIgbG9j
a2VyKGxvY2spOycsCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMu
dHh0IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dAppbmRleCBlNDRjYjRiYjcz
MmUwNjU3YjUwZGRkNzg5YmZkZDk0NzE0MTk5YTI0Li44Yzk2NTVkNTU3YTcyM2Y1NTI0Yzg4MDQ3
ZjFmYzllNTU1NmU1YjRhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlz
dHMudHh0CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQKQEAgLTY3LDcg
KzY3LDYgQEAgc2V0KFRlc3RXVEZfU09VUkNFUwogICAgIFRlc3RzL1dURi9OYWtlZFB0ci5jcHAK
ICAgICBUZXN0cy9XVEYvTmV2ZXJEZXN0cm95ZWQuY3BwCiAgICAgVGVzdHMvV1RGL09wdGlvblNl
dC5jcHAKLSAgICBUZXN0cy9XVEYvT3B0aW9uYWwuY3BwCiAgICAgVGVzdHMvV1RGL1BhY2tlZC5j
cHAKICAgICBUZXN0cy9XVEYvUGFja2VkUmVmLmNwcAogICAgIFRlc3RzL1dURi9QYWNrZWRSZWZQ
dHIuY3BwCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQ
SS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDNiYjhlYmI2MmI1ZjYzNTllNWMyODcx
YjhmNWVkNWZhMGZkMGNjNmQuLmZiNDhiNTRlMWExMGY1Y2JjZGM1Yjc2YzZkMjNmZWNkMjgxODYx
ZmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQ
SS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MTQsNyArNjE0LDYgQEAKIAkJN0M4M0RF
RjExRDBBNTkwQzAwRkVCQ0YzIC8qIE1lZGlhVGltZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDU0OTdCMzE1ODU3RjBDMDBCNUJDMzAgLyogTWVk
aWFUaW1lLmNwcCAqLzsgfTsKIAkJN0M4M0RFRjYxRDBBNTkwQzAwRkVCQ0YzIC8qIE1ldGFBbGxv
Y2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZDNkM0Q0UxNDEwMzRBRDAwNUI3RjBDIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovOyB9OwogCQk3
QzgzREVGRTFEMEE1OTBDMDBGRUJDRjMgLyogTmFrZWRQdHIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVCNkY3NEUxQjJCQTQ0RTAwOUU0OTIyIC8q
IE5ha2VkUHRyLmNwcCAqLzsgfTsKLQkJN0M4M0RGMDExRDBBNTkwQzAwRkVCQ0YzIC8qIE9wdGlv
bmFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
RkRFNjU0MTk1M0IyQzAwMEM0OEZGQSAvKiBPcHRpb25hbC5jcHAgKi87IH07CiAJCTdDODNERjAy
MUQwQTU5MEMwMEZFQkNGMyAvKiBPU09iamVjdFB0ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0JCQTA3NjE5QkI4QTkxMDBCQkYwMjUgLyogT1NP
YmplY3RQdHIuY3BwICovOyB9OwogCQk3QzgzREYwNTFEMEE1OTBDMDBGRUJDRjMgLyogUnVuTG9v
cC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEM5
QUJDNzFCM0RCMTcxMDA0MEE5ODcgLyogUnVuTG9vcC5jcHAgKi87IH07CiAJCTdDODNERjEyMUQw
QTU5MEMwMEZFQkNGMyAvKiBTY29wZWRMYW1iZGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREM2OUFBNjIxQ0Y3N0M2NTAwQzYyNzJGIC8qIFNjb3Bl
ZExhbWJkYS5jcHAgKi87IHNldHRpbmdzID0ge0NPTVBJTEVSX0ZMQUdTID0gIi1mbm8tZWxpZGUt
Y29uc3RydWN0b3JzIjsgfTsgfTsKQEAgLTE4NTgsNyArMTg1Nyw2IEBACiAJCTFBRURFMjI0MTNF
NUU3QTAwMEU2MkZFOCAvKiBJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXJNYWMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXJN
YWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBRUY5OTQ4MTdBMDlGNTMwMDk5
OEVGMCAvKiBHZXRQSURBZnRlckFib3J0ZWRQcm9jZXNzTGF1bmNoLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdldFBJREFmdGVyQWJvcnRlZFByb2Nlc3NMYXVuY2gu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUY3QjIxRDFENkNEMTJFMDA4QzEy
NkMgLyogRW51bVRyYWl0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFbnVtVHJhaXRzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFGREU2NTQxOTUzQjJDMDAwQzQ4RkZBIC8q
IE9wdGlvbmFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9wdGlv
bmFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUMyNERFRUMyNjMwMDFERTAw
NDUwRDA3IC8qIFRleHRTdHlsZUZvbnRTaXplLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVGV4
dFN0eWxlRm9udFNpemUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDMkI4MTdF
MUM4OTFFNDIwMEE1NTI5RiAvKiBDYW5jZWxGb250U3VicmVzb3VyY2UubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDYW5jZWxGb250U3VicmVzb3VyY2UubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDMkI4MTgxMUM4OTFFRkEwMEE1NTI5RiAvKiBD
YW5jZWxGb250U3VicmVzb3VyY2VQbHVnSW4ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBDYW5jZWxGb250U3VicmVzb3VyY2VQbHVnSW4ubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC00NDU3LDcgKzQ0NTUsNiBAQAogCQkJCUZFQjZGNzRFMUIyQkE0
NEUwMDlFNDkyMiAvKiBOYWtlZFB0ci5jcHAgKi8sCiAJCQkJQTU3RDU0RjIxRjMzOEMzNjAwQTk3
QUE3IC8qIE5ldmVyRGVzdHJveWVkLmNwcCAqLywKIAkJCQlDRDQ4QTg3MjI0QzhBNjZGMDBGNTgw
MEMgLyogT2JzZXJ2ZXIuY3BwICovLAotCQkJCTFBRkRFNjU0MTk1M0IyQzAwMEM0OEZGQSAvKiBP
cHRpb25hbC5jcHAgKi8sCiAJCQkJQ0U1MEQ4QzgxQzg2NjVDRTAwNzJFQTVBIC8qIE9wdGlvblNl
dC5jcHAgKi8sCiAJCQkJRTMyQjU0OTEyMjgxMEFDMDAwOEFENzAyIC8qIFBhY2tlZC5jcHAgKi8s
CiAJCQkJRTM4RDY1QzgyM0E0NUZBOTAwNjNENjlBIC8qIFBhY2tlZFJlZi5jcHAgKi8sCkBAIC01
MjE0LDcgKzUyMTEsNiBAQAogCQkJCTdDODNERUZFMUQwQTU5MEMwMEZFQkNGMyAvKiBOYWtlZFB0
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTdENTRGMzFGMzM4QzM2MDBBOTdBQTcgLyogTmV2
ZXJEZXN0cm95ZWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q0OEE4NzMyNEM4QTY2RjAwRjU4
MDBDIC8qIE9ic2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTdDODNERjAxMUQwQTU5MEMw
MEZFQkNGMyAvKiBPcHRpb25hbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTc3QkFBMzFEOUFG
RkZDMDA1RkM1NjggLyogT3B0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjAy
MUQwQTU5MEMwMEZFQkNGMyAvKiBPU09iamVjdFB0ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlF
MzJCNTQ5MjIyODEwQUM0MDA4QUQ3MDIgLyogUGFja2VkLmNwcCBpbiBTb3VyY2VzICovLApkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvT3B0aW9uYWwuY3BwIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvT3B0aW9uYWwuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAyNzI2MDA0Zjg0ZTYwM2QwMWIxYWEwZDZmNmVkODBhZTc2NGVmMzAxLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL09wdGlvbmFsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIzOCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+Ci0KLW5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKLQotVEVTVChXVEZfT3B0
aW9uYWwsIERpc2VuZ2FnZWQpCi17Ci0gICAgewotICAgICAgICBPcHRpb25hbDxpbnQ+IG9wdGlv
bmFsOwotCi0gICAgICAgIEVYUEVDVF9GQUxTRShzdGF0aWNfY2FzdDxib29sPihvcHRpb25hbCkp
OwotICAgIH0KLQotICAgIHsKLSAgICAgICAgT3B0aW9uYWw8aW50PiBvcHRpb25hbCB7IFdURjo6
bnVsbG9wdCB9OwotCi0gICAgICAgIEVYUEVDVF9GQUxTRShzdGF0aWNfY2FzdDxib29sPihvcHRp
b25hbCkpOwotICAgIH0KLX0KLQotVEVTVChXVEZfT3B0aW9uYWwsIEVuZ2FnZWQpCi17Ci0gICAg
T3B0aW9uYWw8aW50PiBvcHRpb25hbCB7IDEwIH07Ci0KLSAgICBFWFBFQ1RfVFJVRShzdGF0aWNf
Y2FzdDxib29sPihvcHRpb25hbCkpOwotICAgIEVYUEVDVF9FUSgxMCwgb3B0aW9uYWwudmFsdWUo
KSk7Ci19Ci0KLVRFU1QoV1RGX09wdGlvbmFsLCBEZXN0cnVjdG9yKQotewotICAgIHN0YXRpYyBi
b29sIGRpZENhbGxEZXN0cnVjdG9yID0gZmFsc2U7Ci0gICAgc3RydWN0IEEgewotICAgICAgICB+
QSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVYUEVDVF9GQUxTRShkaWRDYWxsRGVzdHJ1Y3Rv
cik7Ci0gICAgICAgICAgICBkaWRDYWxsRGVzdHJ1Y3RvciA9IHRydWU7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgewotICAgICAgICBPcHRpb25hbDxBPiBvcHRpb25hbCB7IHN0ZDo6aW5fcGxh
Y2UgfTsKLQotICAgICAgICBFWFBFQ1RfVFJVRShzdGF0aWNfY2FzdDxib29sPihvcHRpb25hbCkp
OwotICAgIH0KLQotICAgIEVYUEVDVF9UUlVFKGRpZENhbGxEZXN0cnVjdG9yKTsKLX0KLQotVEVT
VChXVEZfT3B0aW9uYWwsIENhbGxiYWNrKQotewotICAgIGJvb2wgY2FsbGVkID0gZmFsc2U7Ci0g
ICAgT3B0aW9uYWw8aW50PiBhOwotICAgIGludCByZXN1bHQgPSB2YWx1ZU9yQ29tcHV0ZShhLCBb
Jl0gewotICAgICAgICBjYWxsZWQgPSB0cnVlOwotICAgICAgICByZXR1cm4gMzAwOwotICAgIH0p
OwotICAgIEVYUEVDVF9UUlVFKGNhbGxlZCk7Ci0gICAgRVhQRUNUX0VRKHJlc3VsdCwgMzAwKTsK
LQotICAgIGEgPSAyNTA7Ci0gICAgY2FsbGVkID0gZmFsc2U7Ci0gICAgcmVzdWx0ID0gdmFsdWVP
ckNvbXB1dGUoYSwgWyZdIHsKLSAgICAgICAgY2FsbGVkID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJu
IDMwMDsKLSAgICB9KTsKLSAgICBFWFBFQ1RfRkFMU0UoY2FsbGVkKTsKLSAgICBFWFBFQ1RfRVEo
cmVzdWx0LCAyNTApOwotfQotCi1URVNUKFdURl9PcHRpb25hbCwgRXF1YWxpdHkpCi17Ci0gICAg
T3B0aW9uYWw8aW50PiB1bmVuZ2FnZWQxOwotICAgIE9wdGlvbmFsPGludD4gdW5lbmdhZ2VkMjsK
LQotICAgIE9wdGlvbmFsPGludD4gZW5nYWdlZDEgeyAxIH07Ci0gICAgT3B0aW9uYWw8aW50PiBl
bmdhZ2VkMiB7IDIgfTsKLSAgICBPcHRpb25hbDxpbnQ+IGVuZ2FnZWR4MiB7IDIgfTsKLQotICAg
IEVYUEVDVF9UUlVFKHVuZW5nYWdlZDEgPT0gdW5lbmdhZ2VkMik7Ci0gICAgRVhQRUNUX0ZBTFNF
KGVuZ2FnZWQxID09IGVuZ2FnZWQyKTsKLSAgICBFWFBFQ1RfRkFMU0UoZW5nYWdlZDEgPT0gdW5l
bmdhZ2VkMSk7Ci0gICAgRVhQRUNUX1RSVUUoZW5nYWdlZDIgPT0gZW5nYWdlZHgyKTsKLQotICAg
IEVYUEVDVF9UUlVFKHVuZW5nYWdlZDEgPT0gV1RGOjpudWxsb3B0KTsKLSAgICBFWFBFQ1RfRkFM
U0UoZW5nYWdlZDEgPT0gV1RGOjpudWxsb3B0KTsKLSAgICBFWFBFQ1RfVFJVRShXVEY6Om51bGxv
cHQgPT0gdW5lbmdhZ2VkMSk7Ci0gICAgRVhQRUNUX0ZBTFNFKFdURjo6bnVsbG9wdCA9PSBlbmdh
Z2VkMSk7Ci0KLSAgICBFWFBFQ1RfVFJVRShlbmdhZ2VkMSA9PSAxKTsKLSAgICBFWFBFQ1RfVFJV
RSgxID09IGVuZ2FnZWQxKTsKLSAgICBFWFBFQ1RfRkFMU0UodW5lbmdhZ2VkMSA9PSAxKTsKLSAg
ICBFWFBFQ1RfRkFMU0UoMSA9PSB1bmVuZ2FnZWQxKTsKLX0KLQotVEVTVChXVEZfT3B0aW9uYWws
IEluZXF1YWxpdHkpCi17Ci0gICAgT3B0aW9uYWw8aW50PiB1bmVuZ2FnZWQxOwotICAgIE9wdGlv
bmFsPGludD4gdW5lbmdhZ2VkMjsKLQotICAgIE9wdGlvbmFsPGludD4gZW5nYWdlZDEgeyAxIH07
Ci0gICAgT3B0aW9uYWw8aW50PiBlbmdhZ2VkMiB7IDIgfTsKLSAgICBPcHRpb25hbDxpbnQ+IGVu
Z2FnZWR4MiB7IDIgfTsKLQotICAgIEVYUEVDVF9GQUxTRSh1bmVuZ2FnZWQxICE9IHVuZW5nYWdl
ZDIpOwotICAgIEVYUEVDVF9UUlVFKGVuZ2FnZWQxICE9IGVuZ2FnZWQyKTsKLSAgICBFWFBFQ1Rf
VFJVRShlbmdhZ2VkMSAhPSB1bmVuZ2FnZWQxKTsKLSAgICBFWFBFQ1RfRkFMU0UoZW5nYWdlZDIg
IT0gZW5nYWdlZHgyKTsKLQotICAgIEVYUEVDVF9GQUxTRSh1bmVuZ2FnZWQxICE9IFdURjo6bnVs
bG9wdCk7Ci0gICAgRVhQRUNUX1RSVUUoZW5nYWdlZDEgIT0gV1RGOjpudWxsb3B0KTsKLSAgICBF
WFBFQ1RfRkFMU0UoV1RGOjpudWxsb3B0ICE9IHVuZW5nYWdlZDEpOwotICAgIEVYUEVDVF9UUlVF
KFdURjo6bnVsbG9wdCAhPSBlbmdhZ2VkMSk7Ci0KLSAgICBFWFBFQ1RfRkFMU0UoZW5nYWdlZDEg
IT0gMSk7Ci0gICAgRVhQRUNUX1RSVUUoZW5nYWdlZDEgIT0gMik7Ci0gICAgRVhQRUNUX0ZBTFNF
KDEgIT0gZW5nYWdlZDEpOwotICAgIEVYUEVDVF9UUlVFKDIgIT0gZW5nYWdlZDEpOwotCi0gICAg
RVhQRUNUX1RSVUUodW5lbmdhZ2VkMSAhPSAxKTsKLSAgICBFWFBFQ1RfVFJVRSgxICE9IHVuZW5n
YWdlZDEpOwotfQotCi1URVNUKFdURl9PcHRpb25hbCwgTW92ZVNlbWFudGljc0NvbnN0cnVjdG9y
KQotewotICAgIHsKLSAgICAgICAgT3B0aW9uYWw8aW50PiB1bmVuZ2FnZWQxIHsgfTsKLSAgICAg
ICAgRVhQRUNUX0ZBTFNFKCEhdW5lbmdhZ2VkMSk7Ci0KLSAgICAgICAgT3B0aW9uYWw8aW50PiB1
bmVuZ2FnZWQyKHN0ZDo6bW92ZSh1bmVuZ2FnZWQxKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRSgh
IXVuZW5nYWdlZDEpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoISF1bmVuZ2FnZWQyKTsKLSAgICB9
Ci0KLSAgICB7Ci0gICAgICAgIE9wdGlvbmFsPGludD4gZW5nYWdlZFRvVW5lbmdhZ2VkIHsgMiB9
OwotICAgICAgICBFWFBFQ1RfVFJVRSghIWVuZ2FnZWRUb1VuZW5nYWdlZCk7Ci0gICAgICAgIEVY
UEVDVF9FUSgyLCBlbmdhZ2VkVG9VbmVuZ2FnZWQudmFsdWUoKSk7Ci0KLSAgICAgICAgT3B0aW9u
YWw8aW50PiBlbmdhZ2VkKHN0ZDo6bW92ZShlbmdhZ2VkVG9VbmVuZ2FnZWQpKTsKLSAgICAgICAg
RVhQRUNUX0ZBTFNFKCEhZW5nYWdlZFRvVW5lbmdhZ2VkKTsKLSAgICAgICAgRVhQRUNUX1RSVUUo
ISFlbmdhZ2VkKTsKLSAgICAgICAgRVhQRUNUX0VRKDIsIGVuZ2FnZWQudmFsdWUoKSk7Ci0gICAg
fQotfQotCi1URVNUKFdURl9PcHRpb25hbCwgTW92ZVNlbWFudGljc0Fzc2lnbm1lbnQpCi17Ci0g
ICAgewotICAgICAgICBPcHRpb25hbDxpbnQ+IHVuZW5nYWdlZDEgeyB9OwotICAgICAgICBFWFBF
Q1RfRkFMU0UoISF1bmVuZ2FnZWQxKTsKLQotICAgICAgICBPcHRpb25hbDxpbnQ+IHVuZW5nYWdl
ZDI7Ci0gICAgICAgIEVYUEVDVF9GQUxTRSghIXVuZW5nYWdlZDIpOwotCi0gICAgICAgIHVuZW5n
YWdlZDIgPSBzdGQ6Om1vdmUodW5lbmdhZ2VkMSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRSghIXVu
ZW5nYWdlZDEpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoISF1bmVuZ2FnZWQyKTsKLSAgICB9Ci0K
LSAgICB7Ci0gICAgICAgIE9wdGlvbmFsPGludD4gZW5nYWdlZFRvVW5lbmdhZ2VkIHsgMyB9Owot
ICAgICAgICBFWFBFQ1RfVFJVRSghIWVuZ2FnZWRUb1VuZW5nYWdlZCk7Ci0gICAgICAgIEVYUEVD
VF9FUSgzLCBlbmdhZ2VkVG9VbmVuZ2FnZWQudmFsdWUoKSk7Ci0KLSAgICAgICAgZW5nYWdlZFRv
VW5lbmdhZ2VkID0gc3RkOjptb3ZlKFdURjo6bnVsbG9wdCk7Ci0gICAgICAgIEVYUEVDVF9GQUxT
RSghIWVuZ2FnZWRUb1VuZW5nYWdlZCk7Ci0gICAgfQotCi0gICAgewotICAgICAgICBPcHRpb25h
bDxpbnQ+IGVuZ2FnZWRUb1VuZW5nYWdlZCB7IDQgfTsKLSAgICAgICAgRVhQRUNUX1RSVUUoISFl
bmdhZ2VkVG9VbmVuZ2FnZWQpOwotICAgICAgICBFWFBFQ1RfRVEoNCwgZW5nYWdlZFRvVW5lbmdh
Z2VkLnZhbHVlKCkpOwotCi0gICAgICAgIE9wdGlvbmFsPGludD4gdW5lbmdhZ2VkVG9FbmdhZ2Vk
OwotICAgICAgICBFWFBFQ1RfRkFMU0UoISF1bmVuZ2FnZWRUb0VuZ2FnZWQpOwotCi0gICAgICAg
IHVuZW5nYWdlZFRvRW5nYWdlZCA9IHN0ZDo6bW92ZShlbmdhZ2VkVG9VbmVuZ2FnZWQpOwotICAg
ICAgICBFWFBFQ1RfRkFMU0UoISFlbmdhZ2VkVG9VbmVuZ2FnZWQpOwotICAgICAgICBFWFBFQ1Rf
VFJVRSghIXVuZW5nYWdlZFRvRW5nYWdlZCk7Ci0gICAgICAgIEVYUEVDVF9FUSg0LCB1bmVuZ2Fn
ZWRUb0VuZ2FnZWQudmFsdWUoKSk7Ci0gICAgfQotCi0gICAgewotICAgICAgICBPcHRpb25hbDxp
bnQ+IGVuZ2FnZWRUb1VuZW5nYWdlZCB7IDUgfTsKLSAgICAgICAgRVhQRUNUX1RSVUUoISFlbmdh
Z2VkVG9VbmVuZ2FnZWQpOwotICAgICAgICBFWFBFQ1RfRVEoNSwgZW5nYWdlZFRvVW5lbmdhZ2Vk
LnZhbHVlKCkpOwotCi0gICAgICAgIE9wdGlvbmFsPGludD4gdW5lbmdhZ2VkOwotICAgICAgICBF
WFBFQ1RfRkFMU0UoISF1bmVuZ2FnZWQpOwotCi0gICAgICAgIGVuZ2FnZWRUb1VuZW5nYWdlZCA9
IHN0ZDo6bW92ZSh1bmVuZ2FnZWQpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoISFlbmdhZ2VkVG9V
bmVuZ2FnZWQpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoISF1bmVuZ2FnZWQpOwotICAgIH0KLQot
ICAgIHsKLSAgICAgICAgT3B0aW9uYWw8aW50PiBlbmdhZ2VkVG9VbmVuZ2FnZWQgeyA2IH07Ci0g
ICAgICAgIEVYUEVDVF9UUlVFKCEhZW5nYWdlZFRvVW5lbmdhZ2VkKTsKLSAgICAgICAgRVhQRUNU
X0VRKDYsIGVuZ2FnZWRUb1VuZW5nYWdlZC52YWx1ZSgpKTsKLQotICAgICAgICBPcHRpb25hbDxp
bnQ+IGVuZ2FnZWRUb0VuZ2FnZWQgeyA3IH07Ci0gICAgICAgIEVYUEVDVF9UUlVFKCEhZW5nYWdl
ZFRvRW5nYWdlZCk7Ci0gICAgICAgIEVYUEVDVF9FUSg3LCBlbmdhZ2VkVG9FbmdhZ2VkLnZhbHVl
KCkpOwotCi0gICAgICAgIGVuZ2FnZWRUb0VuZ2FnZWQgPSBzdGQ6Om1vdmUoZW5nYWdlZFRvVW5l
bmdhZ2VkKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKCEhZW5nYWdlZFRvVW5lbmdhZ2VkKTsKLSAg
ICAgICAgRVhQRUNUX1RSVUUoISFlbmdhZ2VkVG9FbmdhZ2VkKTsKLSAgICAgICAgRVhQRUNUX0VR
KDYsIGVuZ2FnZWRUb0VuZ2FnZWQudmFsdWUoKSk7Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFj
ZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429565</attachid>
            <date>2021-05-24 14:13:36 -0700</date>
            <delta_ts>2021-05-24 16:39:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211674-20210524141335.patch</filename>
            <type>text/plain</type>
            <size>81527</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3OTY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
ZTkzZmU2NTkwNzMxZGFlNTdkMzYyNjNmYWQ4NGNiZDBiMGY4MWVjLi5mODEzYTZiMjc2YTA1YjQ3
ZTQ4NDM4NjczMDAyNjAyMGQ5N2ViYmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NSBAQAorMjAyMS0wNS0yNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgU3dpdGNoIGZyb20gV1RGOjpPcHRpb25hbCB0byBzdGQ6Om9wdGlvbmFsCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTE2NzQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHJ1bnRpbWUvSW50
bENvbGxhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yOjppbml0aWFsaXplQ29s
bGF0b3IpOiBVc2UgSlNPYmplY3QqIGluc3RlYWQgb2YKKyAgICAgICAgT3B0aW9uYWw8SlNPYmpl
Y3QmPi4KKyAgICAgICAgKiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHA6CisgICAgICAg
IChKU0M6OnRvRGF0ZVRpbWVPcHRpb25zQW55RGF0ZSk6IERpdHRvLgorICAgICAgICAoSlNDOjpJ
bnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVGltZUZvcm1hdCk6IERpdHRvLgorICAg
ICAgICAqIHJ1bnRpbWUvSW50bERpc3BsYXlOYW1lcy5jcHA6CisgICAgICAgIChKU0M6OkludGxE
aXNwbGF5TmFtZXM6OmluaXRpYWxpemVEaXNwbGF5TmFtZXMpOiBEaXR0by4KKyAgICAgICAgKiBy
dW50aW1lL0ludGxMaXN0Rm9ybWF0LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bExpc3RGb3JtYXQ6
OmluaXRpYWxpemVMaXN0Rm9ybWF0KTogRGl0dG8uCisgICAgICAgICogcnVudGltZS9JbnRsTG9j
YWxlLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bExvY2FsZTo6aW5pdGlhbGl6ZUxvY2FsZSk6IERp
dHRvLgorICAgICAgICAqIHJ1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHA6CisgICAgICAgIChK
U0M6OkludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGb3JtYXQpOiBEaXR0by4KKyAg
ICAgICAgKiBydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaDogRGl0dG8uCisgICAgICAgICogcnVu
dGltZS9JbnRsTnVtYmVyRm9ybWF0SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpzZXROdW1iZXJG
b3JtYXREaWdpdE9wdGlvbnMpOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1lL0ludGxPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDOjppbnRsQm9vbGVhbk9wdGlvbik6IERpdHRvLgorICAgICAgICAo
SlNDOjppbnRsU3RyaW5nT3B0aW9uKTogRGl0dG8uCisgICAgICAgIChKU0M6OmludGxOdW1iZXJP
cHRpb24pOiBEaXR0by4KKyAgICAgICAgKEpTQzo6c3VwcG9ydGVkTG9jYWxlcyk6IERpdHRvLgor
ICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5oOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1l
L0ludGxPYmplY3RJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OmludGxPcHRpb24pOiBEaXR0by4K
KyAgICAgICAgKEpTQzo6aW50bEdldE9wdGlvbnNPYmplY3QpOiBEaXR0by4KKyAgICAgICAgKEpT
Qzo6aW50bENvZXJjZU9wdGlvbnNUb09iamVjdCk6IERpdHRvLgorICAgICAgICAqIHJ1bnRpbWUv
SW50bFBsdXJhbFJ1bGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bFBsdXJhbFJ1bGVzOjppbml0
aWFsaXplUGx1cmFsUnVsZXMpOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1lL0ludGxQbHVyYWxS
dWxlcy5oOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQu
Y3BwOgorICAgICAgICAoSlNDOjpJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojppbml0aWFsaXplUmVs
YXRpdmVUaW1lRm9ybWF0KTogRGl0dG8uCisgICAgICAgICogcnVudGltZS9JbnRsU2VnbWVudGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bFNlZ21lbnRlcjo6aW5pdGlhbGl6ZVNlZ21lbnRlcik6
IERpdHRvLgorCiAyMDIxLTA1LTI0ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydCByMjc2NjEwIGJlY2F1c2UgaXQgY2F1
c2VzIGEgMSUgUExUIHJlZ3Jlc3Npb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGEzNjZiYThiMWEyOWQzMDA1NmUzYWUyYzlj
ZDU5MzdiNDBjYjVhNGMuLjFmM2I2ZWJiZGFjZTQ3NzZkNDE5MGU0NmRlYTgwMDRhMWEyMmUwODgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMjEtMDUtMjQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgorCisgICAgICAgIFN3aXRjaCBmcm9tIFdURjo6T3B0aW9uYWwgdG8gc3RkOjpvcHRp
b25hbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEx
Njc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3
dGYvRm9yd2FyZC5oOiBSZW1vdmUgT3B0aW9uYWwgZm9yd2FyZCBkZWNsYXJhdGlvbi4KKyAgICAg
ICAgQWxzbyBpbmNsdWRlIE9wdGlvbmFsLmgsIGp1c3QgZm9yIG5vdy4gTmVlZCB0byByZW1vdmUg
dGhpcyBvbmNlCisgICAgICAgIHdlIGRvIHRoZSBnbG9iYWwgcmVuYW1lLgorCisgICAgICAgICog
d3RmL09wdGlvbmFsLmg6IFJlcGxhY2VkIHRoZSBlbnRpcmUgV1RGOjpPcHRpb25hbCBpbXBsZW1l
bnRhdGlvbgorICAgICAgICB3aXRoIGEgV1RGOjpPcHRpb25hbCAidXNpbmciIHRoYXQgbWFrZXMg
aXQgYSBzeW5vbnltIGZvciBzdGQ6Om9wdGlvbmFsLgorICAgICAgICBXVEY6Om51bGxvcHQgYmVp
bmcgYSBzeW5vbnltIGZvciBzdGQ6Om51bGxvcHQgYW5kIFdURjo6bnVsbG9wdF90CisgICAgICAg
IGJlaW5nIGEgc3lub255bSBmb3Igc3RkOjpudWxsb3B0X3QuIEFsc28gaW5jbHVkZWQgZnVuY3Rp
b25zIHNvCisgICAgICAgIHRoYXQgV1RGOjptYWtlT3B0aW9uYWwgY2FsbHMgc3RkOjptYWtlX29w
dGlvbmFsIGFuZCBrZXB0IHRoZQorICAgICAgICBXVEYgZXh0ZW5zaW9uIG5hbWVkIHZhbHVlT3JD
b21wdXRlLiBOZWVkIHRvIHJlbW92ZSB0aGVzZSBvbmNlIHdlCisgICAgICAgIGRvIHRoZSBnbG9i
YWwgcmVuYW1lLCBhbmQgbGlrZWx5IGp1c3QgZ2V0IHJpZCBvZiB2YWx1ZU9yQ29tcHV0ZSwgYW5k
CisgICAgICAgIHRoZW4gZGVsZXRlIHRoaXMgZW50aXJlIGhlYWRlci4KKworICAgICAgICAqIHd0
Zi9TZWNvbmRzLmg6IEFkZGVkIGFuIGluY2x1ZGUgb2YgRmFzdE1hbGxvYy5oLCBzaW5jZSBpdCdz
IG5vCisgICAgICAgIGxvbmdlciBwdWxsZWQgaW4gYmVjYXVzZSBvZiBpbmNsdWRpbmcgT3B0aW9u
YWwuaC4KKworICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaDogVXNl
IEZvcndhcmQuaCBmb3Igbm93IGluc3RlYWQgb2YKKyAgICAgICAgZm9yd2FyZC1kZWNsYXJpbmcg
V1RGOjpvcHRpb25hbC4KKwogMjAyMS0wNS0yNCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVy
QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnQgcjI3NjYxMCBiZWNhdXNl
IGl0IGNhdXNlcyBhIDElIFBMVCByZWdyZXNzaW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDRkOTYyMjE4YzRh
OTcwNGQ5YzBiYTQzNzEzOGNkYmIxNWRkYjlmNTMuLjZlZjc3ZDczMDFkNjhhNmFhMzNlNzM4MGUw
ZWY2MTNlZDA3MDBkOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAyMS0wNS0yNCAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3dpdGNoIGZyb20gV1RG
OjpPcHRpb25hbCB0byBzdGQ6Om9wdGlvbmFsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTE2NzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1ZQOVV0aWxpdGllcy5oOiBU
d2Vha2VkIGNvZGluZyBzdHlsZSBhIGJpdC4KKyAgICAgICAgQWRkZWQgbWlzc2luZyBvcGVyYXRv
ciE9IGJlY2F1c2Ugc3RkOjpvcHRpb25hbCdzIG9wZXJhdG9yIT0gcmVsaWVzCisgICAgICAgIG9u
IHRoYXQsIHdoaWxlIFdURjo6T3B0aW9uYWwncyBvcGVyYXRvciE9IHJlbGllZCBvbiBvcGVyYXRv
cj09LgorCisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzOjpzZXRWUDlTY3JlZW5TaXplQW5kU2NhbGVGb3JUZXN0aW5nKTogVXNlIGEK
KyAgICAgICAgZm9ybSBvZiBjb25zdHJ1Y3Rpb24gZm9yIFNjcmVlbkRhdGFPdmVycmlkZXMgdGhh
dCB3b3JrcyB3aXRoIGJvdGgKKyAgICAgICAgV1RGOjpPcHRpb25hbCBhbmQgc3RkOjpvcHRpb25h
bC4gU29tZXRoaW5nIGFib3V0IHdheSB0aGUgb2xkIGNvZGUKKyAgICAgICAgdXNlZCBXVEY6Om1h
a2VPcHRpb25hbCB3YXMgbm90IGNvbXBhdGlibGUgd2l0aCBzdGQ6Om1ha2Vfb3B0aW9uYWwsCisg
ICAgICAgIGJ1dCBpdCB3YXMgZWFzeSB0byBtYWtlIGl0IG1vcmUgc3RyYWlnaHRmb3J3YXJkIGFu
ZCBub3QgZXZlbiBoYXZlCisgICAgICAgIHRvIHVzZSBhICJtYWtlIiBmdW5jdGlvbi4KKwogMjAy
MS0wNS0yNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFN0b3Ag
dXNpbmcgVW5jaGVja2VkTG9jayBpbiBTaGFkb3dCbHVyJ3MgU2NyYXRjaEJ1ZmZlcgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpp
bmRleCA5YmQzNmQ3MTg3NGIzY2FiMjcxMjQwMjQzMmU3ZjNlNTk1N2Y1N2M1Li41MGNhNjQ1NDVi
NmVlYTA1ZWVlMzJjN2UxZDlhYzdlZmE5YzRiZTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBA
CisyMDIxLTA1LTI0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBT
d2l0Y2ggZnJvbSBXVEY6Ok9wdGlvbmFsIHRvIHN0ZDo6b3B0aW9uYWwKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMTY3NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50
Q29kZXIuaDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2Rlcjo6ZGVjb2RlKTogQWRkIGEgV1RG
TW92ZS4gVHVybnMgb3V0IHRoaXMgd2FzIG5vdCBuZWVkZWQKKyAgICAgICAgdG8gZ2V0IGNvbXBp
bGluZyB3aXRoIHN0ZDo6b3B0aW9uYWwsIGJ1dCBpdCdzIGEgZ29vZCBpZGVhIGZvciBwZXJmb3Jt
YW5jZS4KKyAgICAgICAgVGhpcyBpcyBvbmUgb2YgdGhvc2UgY2FzZXMgd2hlcmUgaXQgbG9va3Mg
bGlrZSB0aGUgcmV0dXJuIHZhbHVlIG9wdGltaXphdGlvbgorICAgICAgICB3b3VsZCB3b3JrLCBi
dXQgaXQgZG9lc24ndCBiZWNhdXNlIHRoZSByZXR1cm4gdmFsdWUgZG9lc24ndCBleGFjdGx5IG1h
dGNoCisgICAgICAgIHRoZSBsb2NhbCB2YXJpYWJsZSdzIHR5cGUuCisKKyAgICAgICAgKiBTaGFy
ZWQvVG91Y2hCYXJNZW51RGF0YS5oOiBSZW1vdmUgc29tZSBvdmVyemVhbG91cyB1c2Ugb2YgZXhw
bGljaXQgdGhhdAorICAgICAgICB3YXMgcHJldmVudGluZyBzb21lIGZpbGVzIGZyb20gY29tcGls
aW5nIHdpdGggdGhlIHN0cmljdGVyIHN0ZDo6b3B0aW9uYWwKKyAgICAgICAgY29uc3RydWN0b3Ig
cnVsZXMsIHdoaWxlIGl0IGRpZCBub3QgcHJldmVudCBjb21waWxpbmcgd2l0aCBXVEY6Ok9wdGlv
bmFsLgorCisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Np
b24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c3dpdGNoVG9C
cm93c2luZ0NvbnRleHQpOiBSZW1vdmVkIGFuIHVudXNlZAorICAgICAgICBsYW1iZGEgY2FwdHVy
ZSBhbmQgbG9jYWwgdmFyaWFibGUuIE5vdCBjbGVhciBob3cgdGhpcyBpcyByZWxhdGVkIHRvCisg
ICAgICAgIHN0ZDo6b3B0aW9uYWwsIGJ1dCBzaG93ZWQgdXAgYXMgYSBjb21waWxlciB3YXJuaW5n
LgorCiAyMDIxLTA1LTI0ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4K
IAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI3Nzk0MC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCmluZGV4IGM4MmZhNjBlYjBjMjY3
ZGFlNzAxODNjY2NhZWM4ZTk5YmY5NTRhNzIuLmI3NzZmYjI5M2UwNTRlMjRkNTQ1YjAzZmYwM2Q2
NGEwZDAwMzgyMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxDb2xsYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENv
bGxhdG9yLmNwcApAQCAtMTY0LDcgKzE2NCw3IEBAIHZvaWQgSW50bENvbGxhdG9yOjppbml0aWFs
aXplQ29sbGF0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBsb2NhCiAg
ICAgYXV0byByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChnbG9iYWxP
YmplY3QsIGxvY2FsZXMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
CiAKLSAgICBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlvbnMgPSBpbnRsQ29lcmNlT3B0aW9uc1Rv
T2JqZWN0KGdsb2JhbE9iamVjdCwgb3B0aW9uc1ZhbHVlKTsKKyAgICBKU09iamVjdCogb3B0aW9u
cyA9IGludGxDb2VyY2VPcHRpb25zVG9PYmplY3QoZ2xvYmFsT2JqZWN0LCBvcHRpb25zVmFsdWUp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICBtX3VzYWdl
ID0gaW50bE9wdGlvbjxVc2FnZT4oZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5h
bWVzLT51c2FnZSwgeyB7ICJzb3J0Il9zLCBVc2FnZTo6U29ydCB9LCB7ICJzZWFyY2giX3MsIFVz
YWdlOjpTZWFyY2ggfSB9LCAidXNhZ2UgbXVzdCBiZSBlaXRoZXIgXCJzb3J0XCIgb3IgXCJzZWFy
Y2hcIiJfcywgVXNhZ2U6OlNvcnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAKaW5kZXggZjg5ODA2YzU2YjI2MDUyMmZjN2M3
Yjk4YWY4NTJjZjczM2Y4OTg1Zi4uZDU1ZTRhMGI1YjViNjhlMjhlODYxMjIwZmE1MzhjMTAzZDBl
Y2QyYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVU
aW1lRm9ybWF0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0
ZVRpbWVGb3JtYXQuY3BwCkBAIC0xOTMsNyArMTkzLDcgQEAgVmVjdG9yPFN0cmluZz4gSW50bERh
dGVUaW1lRm9ybWF0Ojpsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBSZWxldmFudEV4
dGUKICAgICByZXR1cm4ga2V5TG9jYWxlRGF0YTsKIH0KIAotc3RhdGljIE9wdGlvbmFsPEpTT2Jq
ZWN0Jj4gdG9EYXRlVGltZU9wdGlvbnNBbnlEYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgb3JpZ2luYWxPcHRpb25zKQorc3RhdGljIEpTT2JqZWN0KiB0b0RhdGVUaW1l
T3B0aW9uc0FueURhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBvcmln
aW5hbE9wdGlvbnMpCiB7CiAgICAgLy8gMTIuMS4xIFRvRGF0ZVRpbWVPcHRpb25zIGFic3RyYWN0
IG9wZXJhdGlvbiAoRUNNQS00MDIgMi4wKQogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKQEAgLTMwNyw3ICszMDcsNyBAQCBzdGF0aWMgT3B0aW9uYWw8SlNPYmplY3QmPiB0b0RhdGVU
aW1lT3B0aW9uc0FueURhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdAogICAgIC8vIERl
ZmF1bHRzIGlzIGFsd2F5cyAiZGF0ZSIuIElnbm9yZSB0aGlzIGJyYW5jaC4KIAogICAgIC8vIDku
IFJldHVybiBvcHRpb25zLgotICAgIHJldHVybiAqb3B0aW9uczsKKyAgICByZXR1cm4gb3B0aW9u
czsKIH0KIAogdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnNldEZvcm1hdHNGcm9tUGF0dGVybihj
b25zdCBTdHJpbmdWaWV3JiBwYXR0ZXJuKQpAQCAtNTI0LDcgKzUyNCw3IEBAIHZvaWQgSW50bERh
dGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVRpbWVGb3JtYXQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwKICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25p
Y2FsaXplTG9jYWxlTGlzdChnbG9iYWxPYmplY3QsIGxvY2FsZXMpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKLSAgICBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlv
bnMgPSB0b0RhdGVUaW1lT3B0aW9uc0FueURhdGUoZ2xvYmFsT2JqZWN0LCBvcmlnaW5hbE9wdGlv
bnMpOworICAgIEpTT2JqZWN0KiBvcHRpb25zID0gdG9EYXRlVGltZU9wdGlvbnNBbnlEYXRlKGds
b2JhbE9iamVjdCwgb3JpZ2luYWxPcHRpb25zKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOwogCiAgICAgUmVzb2x2ZUxvY2FsZU9wdGlvbnMgbG9jYWxlT3B0aW9uczsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEaXNwbGF5TmFt
ZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lcy5j
cHAKaW5kZXggMGRlNTc0MjkzNDVhZDgxZGFlNDE2MGVhZGRiNTA5N2M2NDIwYzE5Mi4uZDc5YzM0
MTc4YTJiYmVkYTg5NzI3MmNhMTg4YWI3NzU4ODBkZjdjZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lcy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lcy5jcHAKQEAgLTY5LDcgKzY5LDcg
QEAgdm9pZCBJbnRsRGlzcGxheU5hbWVzOjppbml0aWFsaXplRGlzcGxheU5hbWVzKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmEKICAgICBhdXRvIHJlcXVlc3RlZExvY2FsZXMgPSBj
YW5vbmljYWxpemVMb2NhbGVMaXN0KGdsb2JhbE9iamVjdCwgbG9jYWxlcyk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAotICAgIE9wdGlvbmFsPEpTT2JqZWN0Jj4g
b3B0aW9ucyA9IGludGxHZXRPcHRpb25zT2JqZWN0KGdsb2JhbE9iamVjdCwgb3B0aW9uc1ZhbHVl
KTsKKyAgICBKU09iamVjdCogb3B0aW9ucyA9IGludGxHZXRPcHRpb25zT2JqZWN0KGdsb2JhbE9i
amVjdCwgb3B0aW9uc1ZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lk
KCkpOwogCiAgICAgLy8gRG9lcyBub3Qgc2V0IGVpdGhlciBvZiAiY2EiIG9yICJudSIuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdC5jcHAKaW5kZXgg
ODgwZWQyNmU3M2FmZTFjYTk0NDc3NDViZWVmYWY5YjVkMzZmNDE4Mi4uMjBmNjg2OGM1MTdmNWE1
ODMyNGU5MGUyZWUwNjc5MGQyNGY4ZGQzMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0LmNwcApAQCAtOTEsNyArOTEsNyBAQCB2b2lkIEludGxM
aXN0Rm9ybWF0Ojppbml0aWFsaXplTGlzdEZvcm1hdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlCiAgICAgYXV0byByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9j
YWxlTGlzdChnbG9iYWxPYmplY3QsIGxvY2FsZXMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHZvaWQoKSk7CiAKLSAgICBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlvbnMgPSBpbnRs
R2V0T3B0aW9uc09iamVjdChnbG9iYWxPYmplY3QsIG9wdGlvbnNWYWx1ZSk7CisgICAgSlNPYmpl
Y3QqIG9wdGlvbnMgPSBpbnRsR2V0T3B0aW9uc09iamVjdChnbG9iYWxPYmplY3QsIG9wdGlvbnNW
YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIFJl
c29sdmVMb2NhbGVPcHRpb25zIGxvY2FsZU9wdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxMb2NhbGUuY3BwCmluZGV4IGViMDQ1YzU1ZTUxNWFlNjczYzBhNDZiZjFl
MjQwOTBjNzA2MDNmYmMuLmYyMmFiYTA1NTE1ZmZmNTNkMGQwNjc5NTI0NzJmM2UwOWM2Y2ZkODMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMb2NhbGUuY3BwCkBAIC0y
MzMsNyArMjMzLDcgQEAgdm9pZCBJbnRsTG9jYWxlOjppbml0aWFsaXplTG9jYWxlKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgdGEKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCi0gICAgT3B0aW9uYWw8SlNPYmplY3QmPiBvcHRpb25zID0gaW50bENvZXJjZU9wdGlvbnNU
b09iamVjdChnbG9iYWxPYmplY3QsIG9wdGlvbnNWYWx1ZSk7CisgICAgSlNPYmplY3QqIG9wdGlv
bnMgPSBpbnRsQ29lcmNlT3B0aW9uc1RvT2JqZWN0KGdsb2JhbE9iamVjdCwgb3B0aW9uc1ZhbHVl
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgTG9jYWxl
SURCdWlsZGVyIGxvY2FsZUlEOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAppbmRleCBmMDM1MGM4NDM4ZDc3ZWJlN2E1ZjkyNzQ5MDdl
M2NiNDJhMzdlNWQyLi5hMjQxMmQxOWE5NjhhNTY0ZTg2NjE4YTE3ODIwZDY0MGJhOWZiZjg0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0
LmNwcApAQCAtMjc0LDcgKzI3NCw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6
ZU51bWJlckZvcm1hdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhCiAgICAgYXV0
byByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChnbG9iYWxPYmplY3Qs
IGxvY2FsZXMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKLSAg
ICBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlvbnMgPSBpbnRsQ29lcmNlT3B0aW9uc1RvT2JqZWN0
KGdsb2JhbE9iamVjdCwgb3B0aW9uc1ZhbHVlKTsKKyAgICBKU09iamVjdCogb3B0aW9ucyA9IGlu
dGxDb2VyY2VPcHRpb25zVG9PYmplY3QoZ2xvYmFsT2JqZWN0LCBvcHRpb25zVmFsdWUpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICBSZXNvbHZlTG9jYWxl
T3B0aW9ucyBsb2NhbGVPcHRpb25zOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bE51bWJlckZvcm1hdC5oCmluZGV4IDZmNmJhNjJlY2JmMWIzYzNkMzA4ZmVhNjFjNjYy
YzAyMTE5Yjc4N2QuLjM4YTc3MGM1OWQ0MTA3MDBmODljNDlmNzY5YTkxNDlkYmNhODU3ZGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmgK
QEAgLTUwLDcgKzUwLDcgQEAgZW51bSBjbGFzcyBSZWxldmFudEV4dGVuc2lvbktleSA6IHVpbnQ4
X3Q7CiAKIGVudW0gY2xhc3MgSW50bFJvdW5kaW5nVHlwZSA6IHVpbnQ4X3QgeyBGcmFjdGlvbkRp
Z2l0cywgU2lnbmlmaWNhbnREaWdpdHMsIENvbXBhY3RSb3VuZGluZyB9OwogZW51bSBjbGFzcyBJ
bnRsTm90YXRpb24gOiB1aW50OF90IHsgU3RhbmRhcmQsIFNjaWVudGlmaWMsIEVuZ2luZWVyaW5n
LCBDb21wYWN0IH07Ci10ZW1wbGF0ZTx0eXBlbmFtZSBJbnRsVHlwZT4gdm9pZCBzZXROdW1iZXJG
b3JtYXREaWdpdE9wdGlvbnMoSlNHbG9iYWxPYmplY3QqLCBJbnRsVHlwZSosIE9wdGlvbmFsPEpT
T2JqZWN0Jj4sIHVuc2lnbmVkIG1pbmltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQsIHVuc2lnbmVk
IG1heGltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQsIEludGxOb3RhdGlvbik7Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBJbnRsVHlwZT4gdm9pZCBzZXROdW1iZXJGb3JtYXREaWdpdE9wdGlvbnMoSlNHbG9i
YWxPYmplY3QqLCBJbnRsVHlwZSosIEpTT2JqZWN0KiwgdW5zaWduZWQgbWluaW11bUZyYWN0aW9u
RGlnaXRzRGVmYXVsdCwgdW5zaWduZWQgbWF4aW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCwgSW50
bE5vdGF0aW9uKTsKIAogY2xhc3MgSW50bE51bWJlckZvcm1hdCBmaW5hbCA6IHB1YmxpYyBKU05v
bkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTg4LDcgKzg4LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyB2b2lkIGZvcm1hdFRvUGFydHNJbnRlcm5hbChKU0dsb2JhbE9iamVjdCosIFN0eWxlLCBk
b3VibGUsIGNvbnN0IFN0cmluZyYgZm9ybWF0dGVkLCBJbnRsRmllbGRJdGVyYXRvciYsIEpTQXJy
YXkqLCBKU1N0cmluZyogdW5pdCA9IG51bGxwdHIpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
SW50bFR5cGU+Ci0gICAgZnJpZW5kIHZvaWQgc2V0TnVtYmVyRm9ybWF0RGlnaXRPcHRpb25zKEpT
R2xvYmFsT2JqZWN0KiwgSW50bFR5cGUqLCBPcHRpb25hbDxKU09iamVjdCY+LCB1bnNpZ25lZCBt
aW5pbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0LCB1bnNpZ25lZCBtYXhpbXVtRnJhY3Rpb25EaWdp
dHNEZWZhdWx0LCBJbnRsTm90YXRpb24pOworICAgIGZyaWVuZCB2b2lkIHNldE51bWJlckZvcm1h
dERpZ2l0T3B0aW9ucyhKU0dsb2JhbE9iamVjdCosIEludGxUeXBlKiwgSlNPYmplY3QqLCB1bnNp
Z25lZCBtaW5pbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0LCB1bnNpZ25lZCBtYXhpbXVtRnJhY3Rp
b25EaWdpdHNEZWZhdWx0LCBJbnRsTm90YXRpb24pOwogCiAgICAgc3RhdGljIEFTQ0lJTGl0ZXJh
bCBub3RhdGlvblN0cmluZyhJbnRsTm90YXRpb24pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0SW5saW5lcy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdElubGluZXMuaAppbmRleCA0MTA0
YjU4NjNhMzM4ZTgzZmU1NGIxZmNkZWJlNzU1MGJkZmRjNDU0Li4yM2QzODYzZDE2MDA0MzFlZjc0
ZGY0MGM4NzQ0NzE3NjZkMDUxNjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTnVtYmVyRm9ybWF0SW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRJbmxpbmVzLmgKQEAgLTMzLDcgKzMzLDcgQEAK
IG5hbWVzcGFjZSBKU0MgIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgSW50bFR5cGU+Ci12b2lkIHNl
dE51bWJlckZvcm1hdERpZ2l0T3B0aW9ucyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBJ
bnRsVHlwZSogaW50bEluc3RhbmNlLCBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlvbnMsIHVuc2ln
bmVkIG1pbmltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQsIHVuc2lnbmVkIG1heGltdW1GcmFjdGlv
bkRpZ2l0c0RlZmF1bHQsIEludGxOb3RhdGlvbiBub3RhdGlvbikKK3ZvaWQgc2V0TnVtYmVyRm9y
bWF0RGlnaXRPcHRpb25zKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEludGxUeXBlKiBp
bnRsSW5zdGFuY2UsIEpTT2JqZWN0KiBvcHRpb25zLCB1bnNpZ25lZCBtaW5pbXVtRnJhY3Rpb25E
aWdpdHNEZWZhdWx0LCB1bnNpZ25lZCBtYXhpbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0LCBJbnRs
Tm90YXRpb24gbm90YXRpb24pCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAKaW5kZXggZDVhY2NlMDM0NmU5ZWVmMDJj
MzFjYzMxYzFjMzQ0YWE3YzUwM2MzYS4uYzY3ZDU0MmYyYjlkMTgzNmVmM2FiNWNjYjNlNzhiMmIz
NDFhNTA5YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9i
amVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5j
cHAKQEAgLTUyMyw3ICs1MjMsNyBAQCBjb25zdCBMb2NhbGVTZXQmIGludGxTZWdtZW50ZXJBdmFp
bGFibGVMb2NhbGVzKCkKIH0KIAogLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWE0MDIvI3NlYy1nZXRv
cHRpb24KLVRyaVN0YXRlIGludGxCb29sZWFuT3B0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIE9wdGlvbmFsPEpTT2JqZWN0Jj4gb3B0aW9ucywgUHJvcGVydHlOYW1lIHByb3BlcnR5
KQorVHJpU3RhdGUgaW50bEJvb2xlYW5PcHRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNPYmplY3QqIG9wdGlvbnMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eSkKIHsKICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwpAQCAtNTQwLDcgKzU0MCw3IEBAIFRyaVN0YXRlIGludGxCb29sZWFuT3B0aW9u
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE9wdGlvbmFsPEpTT2JqZWN0Jj4gb3B0CiAg
ICAgcmV0dXJuIHRyaVN0YXRlKHZhbHVlLnRvQm9vbGVhbihnbG9iYWxPYmplY3QpKTsKIH0KIAot
U3RyaW5nIGludGxTdHJpbmdPcHRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgT3B0
aW9uYWw8SlNPYmplY3QmPiBvcHRpb25zLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHksIHN0ZDo6aW5p
dGlhbGl6ZXJfbGlzdDxjb25zdCBjaGFyKj4gdmFsdWVzLCBjb25zdCBjaGFyKiBub3RGb3VuZCwg
Y29uc3QgY2hhciogZmFsbGJhY2spCitTdHJpbmcgaW50bFN0cmluZ09wdGlvbihKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb3B0aW9ucywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5LCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Y29uc3QgY2hhcio+IHZhbHVlcywgY29uc3QgY2hh
ciogbm90Rm91bmQsIGNvbnN0IGNoYXIqIGZhbGxiYWNrKQogewogICAgIC8vIEdldE9wdGlvbiAo
b3B0aW9ucywgcHJvcGVydHksIHR5cGU9InN0cmluZyIsIHZhbHVlcywgZmFsbGJhY2spCiAgICAg
Ly8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hNDAyLyNzZWMtZ2V0b3B0aW9uCkBAIC01Njgs
NyArNTY4LDcgQEAgU3RyaW5nIGludGxTdHJpbmdPcHRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgT3B0aW9uYWw8SlNPYmplY3QmPiBvcHRpb24KICAgICByZXR1cm4gZmFsbGJhY2s7
CiB9CiAKLXVuc2lnbmVkIGludGxOdW1iZXJPcHRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgT3B0aW9uYWw8SlNPYmplY3QmPiBvcHRpb25zLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHks
IHVuc2lnbmVkIG1pbmltdW0sIHVuc2lnbmVkIG1heGltdW0sIHVuc2lnbmVkIGZhbGxiYWNrKQor
dW5zaWduZWQgaW50bE51bWJlck9wdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U09iamVjdCogb3B0aW9ucywgUHJvcGVydHlOYW1lIHByb3BlcnR5LCB1bnNpZ25lZCBtaW5pbXVt
LCB1bnNpZ25lZCBtYXhpbXVtLCB1bnNpZ25lZCBmYWxsYmFjaykKIHsKICAgICAvLyBHZXROdW1i
ZXJPcHRpb24gKG9wdGlvbnMsIHByb3BlcnR5LCBtaW5pbXVtLCBtYXhpbXVtLCBmYWxsYmFjaykK
ICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWE0MDIvI3NlYy1nZXRudW1iZXJvcHRp
b24KQEAgLTk2Miw3ICs5NjIsNyBAQCBKU1ZhbHVlIHN1cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgTG9jYWxlU2V0JiBhdmFpbGFibAogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBTdHJpbmcgbWF0Y2hlcjsKIAot
ICAgIE9wdGlvbmFsPEpTT2JqZWN0Jj4gb3B0aW9ucyA9IGludGxDb2VyY2VPcHRpb25zVG9PYmpl
Y3QoZ2xvYmFsT2JqZWN0LCBvcHRpb25zVmFsdWUpOworICAgIEpTT2JqZWN0KiBvcHRpb25zID0g
aW50bENvZXJjZU9wdGlvbnNUb09iamVjdChnbG9iYWxPYmplY3QsIG9wdGlvbnNWYWx1ZSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAgIExvY2FsZU1h
dGNoZXIgbG9jYWxlTWF0Y2hlciA9IGludGxPcHRpb248TG9jYWxlTWF0Y2hlcj4oZ2xvYmFsT2Jq
ZWN0LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGVNYXRjaGVyLCB7IHsgImxvb2t1
cCJfcywgTG9jYWxlTWF0Y2hlcjo6TG9va3VwIH0sIHsgImJlc3QgZml0Il9zLCBMb2NhbGVNYXRj
aGVyOjpCZXN0Rml0IH0gfSwgImxvY2FsZU1hdGNoZXIgbXVzdCBiZSBlaXRoZXIgXCJsb29rdXBc
IiBvciBcImJlc3QgZml0XCIiX3MsIExvY2FsZU1hdGNoZXI6OkJlc3RGaXQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5oCmluZGV4IGU5M2M5YmU4NDQ4MWVlZjRj
M2Y3NWY3NjM1ZDk4MTZmMWU4N2RhOTcuLjk1ZWI3YmI3OTliNWU3MjgyMTg1M2Y5YTliYTRiYjI5
MDIxYmQwNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxP
YmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmgK
QEAgLTk0LDkgKzk0LDkgQEAgaW5saW5lIGNvbnN0IExvY2FsZVNldCYgaW50bFBsdXJhbFJ1bGVz
QXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGUKIGlubGluZSBjb25zdCBM
b2NhbGVTZXQmIGludGxSZWxhdGl2ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1
cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQogaW5saW5lIGNvbnN0IExvY2FsZVNldCYgaW50
bExpc3RGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2Fs
ZXMoKTsgfQogCi1UcmlTdGF0ZSBpbnRsQm9vbGVhbk9wdGlvbihKU0dsb2JhbE9iamVjdCosIE9w
dGlvbmFsPEpTT2JqZWN0Jj4gb3B0aW9ucywgUHJvcGVydHlOYW1lKTsKLVN0cmluZyBpbnRsU3Ry
aW5nT3B0aW9uKEpTR2xvYmFsT2JqZWN0KiwgT3B0aW9uYWw8SlNPYmplY3QmPiBvcHRpb25zLCBQ
cm9wZXJ0eU5hbWUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxjb25zdCBjaGFyKj4gdmFsdWVzLCBj
b25zdCBjaGFyKiBub3RGb3VuZCwgY29uc3QgY2hhciogZmFsbGJhY2spOwotdW5zaWduZWQgaW50
bE51bWJlck9wdGlvbihKU0dsb2JhbE9iamVjdCosIE9wdGlvbmFsPEpTT2JqZWN0Jj4gb3B0aW9u
cywgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBtaW5pbXVtLCB1bnNpZ25lZCBtYXhpbXVtLCB1bnNp
Z25lZCBmYWxsYmFjayk7CitUcmlTdGF0ZSBpbnRsQm9vbGVhbk9wdGlvbihKU0dsb2JhbE9iamVj
dCosIEpTT2JqZWN0KiBvcHRpb25zLCBQcm9wZXJ0eU5hbWUpOworU3RyaW5nIGludGxTdHJpbmdP
cHRpb24oSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogb3B0aW9ucywgUHJvcGVydHlOYW1lLCBz
dGQ6OmluaXRpYWxpemVyX2xpc3Q8Y29uc3QgY2hhcio+IHZhbHVlcywgY29uc3QgY2hhciogbm90
Rm91bmQsIGNvbnN0IGNoYXIqIGZhbGxiYWNrKTsKK3Vuc2lnbmVkIGludGxOdW1iZXJPcHRpb24o
SlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogb3B0aW9ucywgUHJvcGVydHlOYW1lLCB1bnNpZ25l
ZCBtaW5pbXVtLCB1bnNpZ25lZCBtYXhpbXVtLCB1bnNpZ25lZCBmYWxsYmFjayk7CiB1bnNpZ25l
ZCBpbnRsRGVmYXVsdE51bWJlck9wdGlvbihKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUsIFByb3Bl
cnR5TmFtZSwgdW5zaWduZWQgbWluaW11bSwgdW5zaWduZWQgbWF4aW11bSwgdW5zaWduZWQgZmFs
bGJhY2spOwogVmVjdG9yPGNoYXIsIDMyPiBsb2NhbGVJREJ1ZmZlckZvckxhbmd1YWdlVGFnV2l0
aE51bGxUZXJtaW5hdG9yKGNvbnN0IENTdHJpbmcmKTsKIFN0cmluZyBsYW5ndWFnZVRhZ0Zvckxv
Y2FsZUlEKGNvbnN0IGNoYXIqLCBib29sIGlzSW1tb3J0YWwgPSBmYWxzZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0SW5saW5lcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdElubGluZXMuaAppbmRleCAyYWRi
ODViNTQxMWVjNzU0ZmQ3NzliNjM2NjQwMjViNWIyZjk1MWQwLi5kOGIwYWJhNjI3MjRlYjU1ZmJl
NWFmZDc2NTdlNGNhNTUyYTFiNGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsT2JqZWN0SW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxPYmplY3RJbmxpbmVzLmgKQEAgLTEyMCw3ICsxMjAsNyBAQCBJbnN0YW5jZVR5
cGUqIHVud3JhcEZvckxlZ2FjeUludGxDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBlPgotUmVzdWx0
VHlwZSBpbnRsT3B0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE9wdGlvbmFsPEpT
T2JqZWN0Jj4gb3B0aW9ucywgUHJvcGVydHlOYW1lIHByb3BlcnR5LCBzdGQ6OmluaXRpYWxpemVy
X2xpc3Q8c3RkOjpwYWlyPEFTQ0lJTGl0ZXJhbCwgUmVzdWx0VHlwZT4+IHZhbHVlcywgQVNDSUlM
aXRlcmFsIG5vdEZvdW5kTWVzc2FnZSwgUmVzdWx0VHlwZSBmYWxsYmFjaykKK1Jlc3VsdFR5cGUg
aW50bE9wdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb3B0aW9u
cywgUHJvcGVydHlOYW1lIHByb3BlcnR5LCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8c3RkOjpwYWly
PEFTQ0lJTGl0ZXJhbCwgUmVzdWx0VHlwZT4+IHZhbHVlcywgQVNDSUlMaXRlcmFsIG5vdEZvdW5k
TWVzc2FnZSwgUmVzdWx0VHlwZSBmYWxsYmFjaykKIHsKICAgICAvLyBHZXRPcHRpb24gKG9wdGlv
bnMsIHByb3BlcnR5LCB0eXBlPSJzdHJpbmciLCB2YWx1ZXMsIGZhbGxiYWNrKQogICAgIC8vIGh0
dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTQwMi8jc2VjLWdldG9wdGlvbgpAQCAtMjAxLDI4ICsy
MDEsMjggQEAgaW5saW5lIFVDb2xsYXRpb25SZXN1bHQgY29tcGFyZUFTQ0lJV2l0aFVDQURVQ0VU
KGNvbnN0IENoYXJhY3RlclR5cGUxKiBjaGFyYWN0ZXIKIH0KIAogLy8gaHR0cHM6Ly90YzM5LmVz
L2VjbWE0MDIvI3NlYy1nZXRvcHRpb25zb2JqZWN0Ci1pbmxpbmUgT3B0aW9uYWw8SlNPYmplY3Qm
PiBpbnRsR2V0T3B0aW9uc09iamVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIG9wdGlvbnMpCitpbmxpbmUgSlNPYmplY3QqIGludGxHZXRPcHRpb25zT2JqZWN0KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgb3B0aW9ucykKIHsKICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIGlmIChvcHRpb25zLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChMSUtFTFkob3B0
aW9ucy5pc09iamVjdCgpKSkKLSAgICAgICAgcmV0dXJuICphc09iamVjdChvcHRpb25zKTsKKyAg
ICAgICAgcmV0dXJuIGFzT2JqZWN0KG9wdGlvbnMpOwogICAgIHRocm93VHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsICJvcHRpb25zIGFyZ3VtZW50IGlzIG5vdCBhbiBvYmplY3Qgb3IgdW5k
ZWZpbmVkIl9zKTsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBudWxscHRy
OwogfQogCiAvLyBodHRwczovL3RjMzkuZXMvZWNtYTQwMi8jc2VjLWNvZXJjZW9wdGlvbnN0b29i
amVjdAotaW5saW5lIE9wdGlvbmFsPEpTT2JqZWN0Jj4gaW50bENvZXJjZU9wdGlvbnNUb09iamVj
dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG9wdGlvbnNWYWx1ZSkKK2lu
bGluZSBKU09iamVjdCogaW50bENvZXJjZU9wdGlvbnNUb09iamVjdChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG9wdGlvbnNWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIGlmIChvcHRpb25zVmFsdWUuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgSlNPYmplY3QqIG9wdGlv
bnMgPSBvcHRpb25zVmFsdWUudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBXVEY6Om51bGxvcHQpOwotICAgIHJldHVybiAqb3B0aW9uczsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKyAgICByZXR1cm4gb3B0aW9u
czsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcAppbmRleCBjY2NmNDk3MTU4MThkZmQzMDI2OGEz
MTdhZGFkYjhlOGRjYmFmNTM4Li5kOGJjOTY2OWZjYmFjMmUyMDlhZTQ1NGQ2MmJmYzNkMjhhMzVl
NDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFs
UnVsZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxS
dWxlcy5jcHAKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBJbnRsUGx1cmFsUnVsZXM6OmluaXRpYWxp
emVQbHVyYWxSdWxlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHUKICAgICBW
ZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChn
bG9iYWxPYmplY3QsIGxvY2FsZXMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CiAKLSAgICBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlvbnMgPSBpbnRsQ29lcmNlT3B0
aW9uc1RvT2JqZWN0KGdsb2JhbE9iamVjdCwgb3B0aW9uc1ZhbHVlKTsKKyAgICBKU09iamVjdCog
b3B0aW9ucyA9IGludGxDb2VyY2VPcHRpb25zVG9PYmplY3QoZ2xvYmFsT2JqZWN0LCBvcHRpb25z
VmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICBS
ZXNvbHZlTG9jYWxlT3B0aW9ucyBsb2NhbGVPcHRpb25zOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuaAppbmRleCBlMjllMWI2MjZkMzFjOTA4MjZk
NDdmMmQ2YmI1YWMxMzdhNWJmYjVlLi42ZDNhY2FiODRlODE0ZTVmN2MwN2QwMjRmM2UyNWZmMmU1
ZjBmNmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1
cmFsUnVsZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFs
UnVsZXMuaApAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9JTkZPOwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50bFR5cGU+Ci0gICAgZnJpZW5kIHZvaWQgc2V0TnVtYmVy
Rm9ybWF0RGlnaXRPcHRpb25zKEpTR2xvYmFsT2JqZWN0KiwgSW50bFR5cGUqLCBPcHRpb25hbDxK
U09iamVjdCY+LCB1bnNpZ25lZCBtaW5pbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0LCB1bnNpZ25l
ZCBtYXhpbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0LCBJbnRsTm90YXRpb24pOworICAgIGZyaWVu
ZCB2b2lkIHNldE51bWJlckZvcm1hdERpZ2l0T3B0aW9ucyhKU0dsb2JhbE9iamVjdCosIEludGxU
eXBlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCBtaW5pbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0LCB1
bnNpZ25lZCBtYXhpbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0LCBJbnRsTm90YXRpb24pOwogCiAg
ICAgdm9pZCBpbml0aWFsaXplUGx1cmFsUnVsZXMoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIGxv
Y2FsZXMsIEpTVmFsdWUgb3B0aW9ucyk7CiAgICAgSlNWYWx1ZSBzZWxlY3QoSlNHbG9iYWxPYmpl
Y3QqLCBkb3VibGUgdmFsdWUpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAppbmRleCAyYjVkMjhlZmQ4
Y2U4ZjI3ZDY1NzU4NTAyYTMxMDk4MDViNzA3M2RlLi5iODljYWU4NjYyYTEwNjY5MTZhZGRjN2Mz
YjFkYTU2MzdmMzVjOGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcApAQCAtODksNyArODksNyBAQCB2b2lk
IEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVSZWxhdGl2ZVRpbWVGb3JtYXQoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbAogICAgIFZlY3RvcjxTdHJpbmc+IHJlcXVlc3RlZExvY2FsZXMg
PSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KGdsb2JhbE9iamVjdCwgbG9jYWxlcyk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAotICAgIE9wdGlvbmFsPEpTT2JqZWN0
Jj4gb3B0aW9ucyA9IGludGxDb2VyY2VPcHRpb25zVG9PYmplY3QoZ2xvYmFsT2JqZWN0LCBvcHRp
b25zVmFsdWUpOworICAgIEpTT2JqZWN0KiBvcHRpb25zID0gaW50bENvZXJjZU9wdGlvbnNUb09i
amVjdChnbG9iYWxPYmplY3QsIG9wdGlvbnNWYWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgdm9pZCgpKTsKIAogICAgIFJlc29sdmVMb2NhbGVPcHRpb25zIGxvY2FsZU9wdGlv
bnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVu
dGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50ZXIuY3Bw
CmluZGV4IDcyYTgzYzA4Y2QzNDIzNzVjYTE0NmI4Nzc2ODcyZGY5MGM4YzZiZTYuLjEwZDlhYWZl
YWM0M2Y4N2MzMDM3MWI2MDBmZmFkYjViZmZkMGQ1MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50ZXIuY3BwCkBAIC02OCw3ICs2OCw3IEBAIHZvaWQg
SW50bFNlZ21lbnRlcjo6aW5pdGlhbGl6ZVNlZ21lbnRlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIGxvCiAgICAgYXV0byByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2Fs
aXplTG9jYWxlTGlzdChnbG9iYWxPYmplY3QsIGxvY2FsZXMpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKLSAgICBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlvbnMg
PSBpbnRsR2V0T3B0aW9uc09iamVjdChnbG9iYWxPYmplY3QsIG9wdGlvbnNWYWx1ZSk7CisgICAg
SlNPYmplY3QqIG9wdGlvbnMgPSBpbnRsR2V0T3B0aW9uc09iamVjdChnbG9iYWxPYmplY3QsIG9w
dGlvbnNWYWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAog
ICAgIFJlc29sdmVMb2NhbGVPcHRpb25zIGxvY2FsZU9wdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9Gb3J3YXJkLmggYi9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKaW5kZXggYzQ3
Y2M1ZGM3ZDhiMDcxYTIxZWIzZjdiYTI4Mzk5ODVlMWNkYjNlZi4uYzUxZjY3YWYwMmFmZDZhNzY4
YmRiNTFlM2E3YjY2YzFhMWJlMDZkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvRm9yd2Fy
ZC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMSw2ICsyMSw3IEBACiAjcHJhZ21hIG9u
Y2UKIAogI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2lu
Y2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTcwLDcgKzcxLDYg
QEAgdGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIEZ1bmN0aW9uOwogdGVtcGxhdGU8dHlwZW5hbWUs
IHR5cGVuYW1lID0gQW55VGhyZWFkc0FjY2Vzc1RyYWl0cz4gY2xhc3MgTGF6eU5ldmVyRGVzdHJv
eWVkOwogdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lID0gQW55VGhyZWFkc0FjY2Vzc1RyYWl0
cz4gY2xhc3MgTmV2ZXJEZXN0cm95ZWQ7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgT3B0aW9u
U2V0OwotdGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIE9wdGlvbmFsOwogdGVtcGxhdGU8dHlwZW5h
bWU+IGNsYXNzIFBhY2tlZDsKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCA9IGFsaWdub2Yo
VCk+IGNsYXNzIFBhY2tlZEFsaWduZWRQdHI7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IFJh
d1B0clRyYWl0czsKQEAgLTEzNiw3ICsxMzYsNiBAQCB1c2luZyBXVEY6OkxvY2s7CiB1c2luZyBX
VEY6OkxvZ2dlcjsKIHVzaW5nIFdURjo6TmV2ZXJEZXN0cm95ZWQ7CiB1c2luZyBXVEY6Ok9wdGlv
blNldDsKLXVzaW5nIFdURjo6T3B0aW9uYWw7CiB1c2luZyBXVEY6Ok9yZGluYWxOdW1iZXI7CiB1
c2luZyBXVEY6OlByaW50U3RyZWFtOwogdXNpbmcgV1RGOjpSYXdQdHJUcmFpdHM7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5oIGIvU291cmNlL1dURi93dGYvT3B0aW9uYWwu
aAppbmRleCA2N2FiYTExYWYxOTczYTM5NTFmNWMzM2M1MDZkMjA5ZjdhNmI1ZmFhLi5lOTU4YWMz
Njk3OTRkNjJmYjBjN2IyYmViZWY5YjkzMzQ3ZjY4ZDI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9PcHRpb25hbC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmgKQEAgLTEsMTA0
NyArMSw1MiBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDExIC0gMjAxMiBBbmRyemVqIEtyemVtaWVu
c2tpLgotLy8KLS8vIFVzZSwgbW9kaWZpY2F0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIGlzIHN1Ympl
Y3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlCi0vLyBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBh
Y2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gaHR0cDovL3d3
dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFRoZSBpZGVhIGFuZCBpbnRlcmZh
Y2UgaXMgYmFzZWQgb24gQm9vc3QuT3B0aW9uYWwgbGlicmFyeQotLy8gYXV0aG9yZWQgYnkgRmVy
bmFuZG8gTHVpcyBDYWNjaW9sYSBDYXJiYWxsYWwKLS8vCi0vLyBCb29zdCBTb2Z0d2FyZSBMaWNl
bnNlIC0gVmVyc2lvbiAxLjAgLSBBdWd1c3QgMTd0aCwgMjAwMwotLy8KLS8vIFBlcm1pc3Npb24g
aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9yIG9yZ2Fu
aXphdGlvbgotLy8gb2J0YWluaW5nIGEgY29weSBvZiB0aGUgc29mdHdhcmUgYW5kIGFjY29tcGFu
eWluZyBkb2N1bWVudGF0aW9uIGNvdmVyZWQgYnkKLS8vIHRoaXMgbGljZW5zZSAodGhlICJTb2Z0
d2FyZSIpIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBkaXN0cmlidXRlLAotLy8gZXhlY3V0
ZSwgYW5kIHRyYW5zbWl0IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHByZXBhcmUgZGVyaXZhdGl2ZSB3
b3JrcyBvZiB0aGUKLS8vIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHRoaXJkLXBhcnRpZXMgdG8g
d2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvCi0vLyBkbyBzbywgYWxsIHN1YmplY3Qg
dG8gdGhlIGZvbGxvd2luZzoKLS8vCi0vLyBUaGUgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIFNv
ZnR3YXJlIGFuZCB0aGlzIGVudGlyZSBzdGF0ZW1lbnQsIGluY2x1ZGluZwotLy8gdGhlIGFib3Zl
IGxpY2Vuc2UgZ3JhbnQsIHRoaXMgcmVzdHJpY3Rpb24gYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciwKLS8vIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs
IGluIHdob2xlIG9yIGluIHBhcnQsIGFuZAotLy8gYWxsIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhl
IFNvZnR3YXJlLCB1bmxlc3Mgc3VjaCBjb3BpZXMgb3IgZGVyaXZhdGl2ZQotLy8gd29ya3MgYXJl
IHNvbGVseSBpbiB0aGUgZm9ybSBvZiBtYWNoaW5lLWV4ZWN1dGFibGUgb2JqZWN0IGNvZGUgZ2Vu
ZXJhdGVkIGJ5Ci0vLyBhIHNvdXJjZSBsYW5ndWFnZSBwcm9jZXNzb3IuCi0vLwotLy8gVEhFIFNP
RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs
IEVYUFJFU1MgT1IKLS8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhF
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UsIFRJVExFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVAotLy8g
U0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIEFOWU9ORSBESVNUUklCVVRJTkcgVEhFIFNP
RlRXQVJFIEJFIExJQUJMRQotLy8gRk9SIEFOWSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCi0vLyBBUklTSU5HIEZST00s
IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1Ig
T1RIRVIKLS8vIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLQotLy8gQ29waWVkIGZyb20gaHR0
cHM6Ly9naXRodWIuY29tL2FrcnplbWkxL09wdGlvbmFsICg4NDU2YzM5MjM3NzZiMzNiNGFlODUy
NzM0MjczZmU5MzRjM2U0ZTYxKQotCi0vLyBNb2RpZmllZCB0byBtYWtlIGl0IGNvbXBpbGUgd2l0
aCBleGNlcHRpb25zIGRpc2FibGVkLgorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KIAogI3ByYWdtYSBvbmNlCiAK
LSMgaW5jbHVkZSA8dXRpbGl0eT4KLSMgaW5jbHVkZSA8dHlwZV90cmFpdHM+Ci0jIGluY2x1ZGUg
PGluaXRpYWxpemVyX2xpc3Q+Ci0jIGluY2x1ZGUgPGNhc3NlcnQ+Ci0jIGluY2x1ZGUgPHN0cmlu
Zz4KLSMgaW5jbHVkZSA8c3RkZXhjZXB0PgotIyBpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgot
IyBpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KLSMgaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4K
LSMgaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCi0jIGRlZmluZSBUUjJfT1BUSU9OQUxf
UkVRVUlSRVMoLi4uKSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxfX1ZBX0FSR1NfXzo6dmFsdWUs
IGJvb2w+Ojp0eXBlID0gZmFsc2UKLQotIyBpZiBkZWZpbmVkIF9fR05VQ19fIC8vIE5PVEU6IEdO
VUMgaXMgYWxzbyBkZWZpbmVkIGZvciBDbGFuZwotIyAgIGlmIChfX0dOVUNfXyA9PSA0KSAmJiAo
X19HTlVDX01JTk9SX18gPj0gOCkKLSMgICAgIGRlZmluZSBUUjJfT1BUSU9OQUxfR0NDXzRfOF9B
TkRfSElHSEVSX19fCi0jICAgZWxpZiAoX19HTlVDX18gPiA0KQotIyAgICAgZGVmaW5lIFRSMl9P
UFRJT05BTF9HQ0NfNF84X0FORF9ISUdIRVJfX18KLSMgICBlbmRpZgotIwotIyAgIGlmIChfX0dO
VUNfXyA9PSA0KSAmJiAoX19HTlVDX01JTk9SX18gPj0gNykKLSMgICAgIGRlZmluZSBUUjJfT1BU
SU9OQUxfR0NDXzRfN19BTkRfSElHSEVSX19fCi0jICAgZWxpZiAoX19HTlVDX18gPiA0KQotIyAg
ICAgZGVmaW5lIFRSMl9PUFRJT05BTF9HQ0NfNF83X0FORF9ISUdIRVJfX18KLSMgICBlbmRpZgot
IwotIyAgIGlmIChfX0dOVUNfXyA9PSA0KSAmJiAoX19HTlVDX01JTk9SX18gPT0gOCkgJiYgKF9f
R05VQ19QQVRDSExFVkVMX18gPj0gMSkKLSMgICAgIGRlZmluZSBUUjJfT1BUSU9OQUxfR0NDXzRf
OF8xX0FORF9ISUdIRVJfX18KLSMgICBlbGlmIChfX0dOVUNfXyA9PSA0KSAmJiAoX19HTlVDX01J
Tk9SX18gPj0gOSkKLSMgICAgIGRlZmluZSBUUjJfT1BUSU9OQUxfR0NDXzRfOF8xX0FORF9ISUdI
RVJfX18KLSMgICBlbGlmIChfX0dOVUNfXyA+IDQpCi0jICAgICBkZWZpbmUgVFIyX09QVElPTkFM
X0dDQ180XzhfMV9BTkRfSElHSEVSX19fCi0jICAgZW5kaWYKLSMgZW5kaWYKLSMKLSMgaWYgZGVm
aW5lZCBfX2NsYW5nX21ham9yX18KLSMgICBpZiAoX19jbGFuZ19tYWpvcl9fID09IDMgJiYgX19j
bGFuZ19taW5vcl9fID49IDUpCi0jICAgICBkZWZpbmUgVFIyX09QVElPTkFMX0NMQU5HXzNfNV9B
TkRfSElHSFRFUl8KLSMgICBlbGlmIChfX2NsYW5nX21ham9yX18gPiAzKQotIyAgICAgZGVmaW5l
IFRSMl9PUFRJT05BTF9DTEFOR18zXzVfQU5EX0hJR0hURVJfCi0jICAgZW5kaWYKLSMgICBpZiBk
ZWZpbmVkIFRSMl9PUFRJT05BTF9DTEFOR18zXzVfQU5EX0hJR0hURVJfCi0jICAgICBkZWZpbmUg
VFIyX09QVElPTkFMX0NMQU5HXzNfNF8yX0FORF9ISUdIRVJfCi0jICAgZWxpZiAoX19jbGFuZ19t
YWpvcl9fID09IDMgJiYgX19jbGFuZ19taW5vcl9fID09IDQgJiYgX19jbGFuZ19wYXRjaGxldmVs
X18gPj0gMikKLSMgICAgIGRlZmluZSBUUjJfT1BUSU9OQUxfQ0xBTkdfM180XzJfQU5EX0hJR0hF
Ul8KLSMgICBlbmRpZgotIyBlbmRpZgotIwotIyBpZiBkZWZpbmVkIF9NU0NfVkVSCi0jICAgaWYg
KF9NU0NfVkVSID49IDE5MDApCi0jICAgICBkZWZpbmUgVFIyX09QVElPTkFMX01TVkNfMjAxNV9B
TkRfSElHSEVSX19fCi0jICAgZW5kaWYKLSMgZW5kaWYKLQotIyBpZiBkZWZpbmVkIF9fY2xhbmdf
XwotIyAgIGlmIChfX2NsYW5nX21ham9yX18gPiAyKSB8fCAoX19jbGFuZ19tYWpvcl9fID09IDIp
ICYmIChfX2NsYW5nX21pbm9yX18gPj0gOSkKLSMgICAgIGRlZmluZSBPUFRJT05BTF9IQVNfVEhJ
U19SVkFMVUVfUkVGUyAxCi0jICAgZWxzZQotIyAgICAgZGVmaW5lIE9QVElPTkFMX0hBU19USElT
X1JWQUxVRV9SRUZTIDAKLSMgICBlbmRpZgotIyBlbGlmIGRlZmluZWQgVFIyX09QVElPTkFMX0dD
Q180XzhfMV9BTkRfSElHSEVSX19fCi0jICAgZGVmaW5lIE9QVElPTkFMX0hBU19USElTX1JWQUxV
RV9SRUZTIDEKLSMgZWxpZiBkZWZpbmVkIFRSMl9PUFRJT05BTF9NU1ZDXzIwMTVfQU5EX0hJR0hF
Ul9fXwotIyAgIGRlZmluZSBPUFRJT05BTF9IQVNfVEhJU19SVkFMVUVfUkVGUyAxCi0jIGVsc2UK
LSMgICBkZWZpbmUgT1BUSU9OQUxfSEFTX1RISVNfUlZBTFVFX1JFRlMgMAotIyBlbmRpZgotCi0K
LSMgaWYgZGVmaW5lZCBUUjJfT1BUSU9OQUxfR0NDXzRfOF8xX0FORF9ISUdIRVJfX18KLSMgICBk
ZWZpbmUgT1BUSU9OQUxfSEFTX0NPTlNURVhQUl9JTklUX0xJU1QgMQotIyAgIGRlZmluZSBPUFRJ
T05BTF9DT05TVEVYUFJfSU5JVF9MSVNUIGNvbnN0ZXhwcgotIyBlbHNlCi0jICAgZGVmaW5lIE9Q
VElPTkFMX0hBU19DT05TVEVYUFJfSU5JVF9MSVNUIDAKLSMgICBkZWZpbmUgT1BUSU9OQUxfQ09O
U1RFWFBSX0lOSVRfTElTVAotIyBlbmRpZgotCi0jIC8vIEluIEMrKzExIGNvbnN0ZXhwciBpbXBs
aWVzIGNvbnN0LCBzbyB3ZSBuZWVkIHRvIG1ha2Ugbm9uLWNvbnN0IG1lbWJlcnMgYWxzbyBub24t
Y29uc3RleHByCi0jIGlmIChkZWZpbmVkIF9fY3BsdXNwbHVzKSAmJiAoX19jcGx1c3BsdXMgPT0g
MjAxMTAzTCkKLSMgICBkZWZpbmUgT1BUSU9OQUxfTVVUQUJMRV9DT05TVEVYUFIKLSMgZWxzZQot
IyAgIGRlZmluZSBPUFRJT05BTF9NVVRBQkxFX0NPTlNURVhQUiBjb25zdGV4cHIKLSMgZW5kaWYK
LQotI2lmIENPTVBJTEVSX1NVUFBPUlRTKEVYQ0VQVElPTlMpCi0jZGVmaW5lIF9fVEhST1dfRVhD
RVBUSU9OKF9fZXhjZXB0aW9uKSB0aHJvdyBfX2V4Y2VwdGlvbjsKLSNkZWZpbmUgX19OT0VYQ0VQ
VCBub2V4Y2VwdAotI2RlZmluZSBfX05PRVhDRVBUXyhfX2V4Y2VwdGlvbikgbm9leGNlcHQoX19l
eGNlcHRpb24pCi0jZWxzZQotI2RlZmluZSBfX1RIUk9XX0VYQ0VQVElPTihfX2V4Y2VwdGlvbikg
ZG8geyAodm9pZClfX2V4Y2VwdGlvbjsgQ1JBU0goKTsgfSB3aGlsZSAoMCk7Ci0jZGVmaW5lIF9f
Tk9FWENFUFQKLSNkZWZpbmUgX19OT0VYQ0VQVF8oLi4uKQotI2VuZGlmCisjaW5jbHVkZSA8b3B0
aW9uYWw+CiAKIG5hbWVzcGFjZSBXVEYgewotbmFtZXNwYWNlIGRldGFpbF8gewotCi0vLyBOT1RF
OiBBbGwgb3VyIHRhcmdldCBjb21waWxlcnMgc3VwcG9ydCBpc190cml2aWFsbHlfZGVzdHJ1Y3Rp
YmxlLgotLy8gLy8gQkVHSU4gd29ya2Fyb3VuZCBmb3IgbWlzc2luZyBpc190cml2aWFsbHlfZGVz
dHJ1Y3RpYmxlCi0vLyAjIGlmIGRlZmluZWQgVFIyX09QVElPTkFMX0dDQ180XzhfQU5EX0hJR0hF
Ul9fXwotLy8gICAgIC8vIGxlYXZlIGl0OiBpdCBpcyBhbHJlYWR5IHRoZXJlCi0vLyAjIGVsaWYg
ZGVmaW5lZCBUUjJfT1BUSU9OQUxfQ0xBTkdfM180XzJfQU5EX0hJR0hFUl8KLS8vICAgICAvLyBs
ZWF2ZSBpdDogaXQgaXMgYWxyZWFkeSB0aGVyZQotLy8gIyBlbGlmIGRlZmluZWQgVFIyX09QVElP
TkFMX01TVkNfMjAxNV9BTkRfSElHSEVSX19fCi0vLyAgICAgLy8gbGVhdmUgaXQ6IGl0IGlzIGFs
cmVhZHkgdGhlcmUKLS8vICMgZWxpZiBkZWZpbmVkIFRSMl9PUFRJT05BTF9ESVNBQkxFX0VNVUxB
VElPTl9PRl9UWVBFX1RSQUlUUwotLy8gICAgIC8vIGxlYXZlIGl0OiB0aGUgdXNlciBkb2Vzbid0
IHdhbnQgaXQKLS8vICMgZWxzZQotLy8gICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLy8gICAg
IHVzaW5nIGlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGUgPSBzdGQ6Omhhc190cml2aWFsX2Rlc3Ry
dWN0b3I8VD47Ci0vLyAjIGVuZGlmCi0vLyAvLyBFTkQgd29ya2Fyb3VuZCBmb3IgbWlzc2luZyBp
c190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlCi0KLSNpZiBDT01QSUxFUl9TVVBQT1JUUyhFWENFUFRJ
T05TKQotIyBpZiBkZWZpbmVkKFRSMl9PUFRJT05BTF9HQ0NfNF83X0FORF9ISUdIRVJfX18pIHx8
IGRlZmluZWQoVFIyX09QVElPTkFMX0NMQU5HXzNfNF8yX0FORF9ISUdIRVJfKSB8fCBkZWZpbmVk
KFRSMl9PUFRJT05BTF9NU1ZDXzIwMTVfQU5EX0hJR0hFUl9fXykKLSAgICAvLyBsZWF2ZSBpdDsg
b3VyIG1ldGFmdW5jdGlvbnMgYXJlIGFscmVhZHkgZGVmaW5lZC4KLSAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KLSAgICB1c2luZyBpc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZSA9IHN0ZDo6
aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8VD47Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+Ci0gICAgdXNpbmcgaXNfbm90aHJvd19tb3ZlX2Fzc2lnbmFibGUgPSBzdGQ6OmlzX25vdGhy
b3dfbW92ZV9hc3NpZ25hYmxlPFQ+OwotIyBlbGlmIGRlZmluZWQgVFIyX09QVElPTkFMX0RJU0FC
TEVfRU1VTEFUSU9OX09GX1RZUEVfVFJBSVRTCi0gICAgLy8gbGVhdmUgaXQ6IHRoZSB1c2VyIGRv
ZXNuJ3Qgd2FudCBpdAotIyBlbHNlCi0KLQotLy8gd29ya2Fyb3VuZCBmb3IgbWlzc2luZyB0cmFp
dHMgaW4gR0NDIGFuZCBDTEFORwotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgaXNfbm90aHJv
d19tb3ZlX2NvbnN0cnVjdGlibGUKLXsKLSAgY29uc3RleHByIHN0YXRpYyBib29sIHZhbHVlID0g
c3RkOjppc19ub3Rocm93X2NvbnN0cnVjdGlibGU8VCwgVCYmPjo6dmFsdWU7Ci19OwotCi0KLXRl
bXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgotc3RydWN0IGlzX2Fzc2lnbmFibGUKLXsKLSAgdGVt
cGxhdGUgPGNsYXNzIFgsIGNsYXNzIFk+Ci0gIGNvbnN0ZXhwciBzdGF0aWMgYm9vbCBoYXNfYXNz
aWduKC4uLikgeyByZXR1cm4gZmFsc2U7IH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgWCwgY2xhc3Mg
WSwgc2l6ZV90IFMgPSBzaXplb2YoKHN0ZDo6ZGVjbHZhbDxYPigpID0gc3RkOjpkZWNsdmFsPFk+
KCksIHRydWUpKSA+Ci0gIC8vIHRoZSBjb21tYSBvcGVyYXRvciBpcyBuZWNlc3NhcnkgZm9yIHRo
ZSBjYXNlcyB3aGVyZSBvcGVyYXRvcj0gcmV0dXJucyB2b2lkCi0gIGNvbnN0ZXhwciBzdGF0aWMg
Ym9vbCBoYXNfYXNzaWduKGJvb2wpIHsgcmV0dXJuIHRydWU7IH0KLQotICBjb25zdGV4cHIgc3Rh
dGljIGJvb2wgdmFsdWUgPSBoYXNfYXNzaWduPFQsIFU+KHRydWUpOwotfTsKLQotCi10ZW1wbGF0
ZSA8Y2xhc3MgVD4KLXN0cnVjdCBpc19ub3Rocm93X21vdmVfYXNzaWduYWJsZQotewotICB0ZW1w
bGF0ZSA8Y2xhc3MgWCwgYm9vbCBoYXNfYW55X21vdmVfYXNzaWduPgotICBzdHJ1Y3QgaGFzX25v
dGhyb3dfbW92ZV9hc3NpZ24gewotICAgIGNvbnN0ZXhwciBzdGF0aWMgYm9vbCB2YWx1ZSA9IGZh
bHNlOwotICB9OwotCi0gIHRlbXBsYXRlIDxjbGFzcyBYPgotICBzdHJ1Y3QgaGFzX25vdGhyb3df
bW92ZV9hc3NpZ248WCwgdHJ1ZT4gewotICAgIGNvbnN0ZXhwciBzdGF0aWMgYm9vbCB2YWx1ZSA9
IF9fTk9FWENFUFRfKCBzdGQ6OmRlY2x2YWw8WCY+KCkgPSBzdGQ6OmRlY2x2YWw8WCYmPigpICk7
Ci0gIH07Ci0KLSAgY29uc3RleHByIHN0YXRpYyBib29sIHZhbHVlID0gaGFzX25vdGhyb3dfbW92
ZV9hc3NpZ248VCwgaXNfYXNzaWduYWJsZTxUJiwgVCYmPjo6dmFsdWU+Ojp2YWx1ZTsKLX07Ci0v
LyBlbmQgd29ya2Fyb3VuZAotCi0KLSMgZW5kaWYKLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBk
ZXRhaWxfCi0KLS8vIDIwLjUuNCwgT3B0aW9uYWwgZm9yIG9iamVjdCB0eXBlcwotdGVtcGxhdGUg
PGNsYXNzIFQ+IGNsYXNzIE9wdGlvbmFsOwotCi0vLyAyMC41LjUsIE9wdGlvbmFsIGZvciBsdmFs
dWUgcmVmZXJlbmNlIHR5cGVzCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgT3B0aW9uYWw8VCY+
OwotCi1uYW1lc3BhY2UgZGV0YWlsXyB7Ci0KLS8vIHdvcmthcm91bmQ6IHN0ZCB1dGlsaXR5IGZ1
bmN0aW9ucyBhcmVuJ3QgY29uc3RleHByIHlldAotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhw
ciBUJiYgY29uc3RleHByX2ZvcndhcmQodHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPFQ+
Ojp0eXBlJiB0KSBfX05PRVhDRVBUCi17Ci0gIHJldHVybiBzdGF0aWNfY2FzdDxUJiY+KHQpOwot
fQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIFQmJiBjb25zdGV4cHJfZm9yd2FyZCh0
eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8VD46OnR5cGUmJiB0KSBfX05PRVhDRVBUCi17
Ci0gICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19sdmFsdWVfcmVmZXJlbmNlPFQ+Ojp2YWx1ZSwg
IiEhIik7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFQmJj4odCk7Ci19Ci0KLXRlbXBsYXRlIDxj
bGFzcyBUPiBjb25zdGV4cHIgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPFQ+Ojp0eXBl
JiYgY29uc3RleHByX21vdmUoVCYmIHQpIF9fTk9FWENFUFQKLXsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8dHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPFQ+Ojp0eXBlJiY+KHQpOwotfQot
Ci0KLS8vIHN0YXRpY19hZGRyZXNzb2Y6IGEgY29uc3RleHByIHZlcnNpb24gb2YgYWRkcmVzc29m
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBoYXNfb3ZlcmxvYWRlZF9hZGRyZXNzb2YK
LXsKLSAgdGVtcGxhdGUgPGNsYXNzIFg+Ci0gIGNvbnN0ZXhwciBzdGF0aWMgYm9vbCBoYXNfb3Zl
cmxvYWQoLi4uKSB7IHJldHVybiBmYWxzZTsgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBYLCBzaXpl
X3QgUyA9IHNpemVvZihzdGQ6OmRlY2x2YWw8WCY+KCkub3BlcmF0b3ImKCkpID4KLSAgY29uc3Rl
eHByIHN0YXRpYyBib29sIGhhc19vdmVybG9hZChib29sKSB7IHJldHVybiB0cnVlOyB9Ci0KLSAg
Y29uc3RleHByIHN0YXRpYyBib29sIHZhbHVlID0gaGFzX292ZXJsb2FkPFQ+KHRydWUpOwotfTsK
LQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIFRSMl9PUFRJT05BTF9SRVFVSVJFUyghaGFzX292ZXJs
b2FkZWRfYWRkcmVzc29mPFQ+KT4KLWNvbnN0ZXhwciBUKiBzdGF0aWNfYWRkcmVzc29mKFQmIHJl
ZikKLXsKLSAgcmV0dXJuICZyZWY7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCBUUjJfT1BU
SU9OQUxfUkVRVUlSRVMoaGFzX292ZXJsb2FkZWRfYWRkcmVzc29mPFQ+KT4KLVQqIHN0YXRpY19h
ZGRyZXNzb2YoVCYgcmVmKQotewotICByZXR1cm4gc3RkOjphZGRyZXNzb2YocmVmKTsKLX0KLQot
Ci0vLyB0aGUgY2FsbCB0byBjb252ZXJ0PEE+KGIpIGhhcyByZXR1cm4gdHlwZSBBIGFuZCBjb252
ZXJ0cyBiIHRvIHR5cGUgQSBpZmYgYiBkZWNsdHlwZShiKSBpcyBpbXBsaWNpdGx5IGNvbnZlcnRp
YmxlIHRvIEEKLXRlbXBsYXRlIDxjbGFzcyBVPgotY29uc3RleHByIFUgY29udmVydChVIHYpIHsg
cmV0dXJuIHY7IH0KLQotfSAvLyBuYW1lc3BhY2UgZGV0YWlsCi0KLQotY29uc3RleHByIHN0cnVj
dCB0cml2aWFsX2luaXRfdHt9IHRyaXZpYWxfaW5pdHt9OwotCi0KLS8vIDIwLjUuNywgRGlzZW5n
YWdlZCBzdGF0ZSBpbmRpY2F0b3IKLXN0cnVjdCBudWxsb3B0X3QKLXsKLSAgc3RydWN0IGluaXR7
fTsKLSAgY29uc3RleHByIGV4cGxpY2l0IG51bGxvcHRfdChpbml0KXt9Ci19OwotY29uc3RleHBy
IG51bGxvcHRfdCBudWxsb3B0e251bGxvcHRfdDo6aW5pdCgpfTsKLQotCi10ZW1wbGF0ZSA8Y2xh
c3MgVD4KLXVuaW9uIHN0b3JhZ2VfdAotewotICB1bnNpZ25lZCBjaGFyIGR1bW15XzsKLSAgVCB2
YWx1ZV87Ci0KLSAgY29uc3RleHByIHN0b3JhZ2VfdCggdHJpdmlhbF9pbml0X3QgKSBfX05PRVhD
RVBUIDogZHVtbXlfKCkge307Ci0KLSAgdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+Ci0gIGNvbnN0
ZXhwciBzdG9yYWdlX3QoIEFyZ3MmJi4uLiBhcmdzICkgOiB2YWx1ZV8oZGV0YWlsXzo6Y29uc3Rl
eHByX2ZvcndhcmQ8QXJncz4oYXJncykuLi4pIHt9Ci0KLSAgfnN0b3JhZ2VfdCgpe30KLX07Ci0K
LQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci11bmlvbiBjb25zdGV4cHJfc3RvcmFnZV90Ci17Ci0gICAg
dW5zaWduZWQgY2hhciBkdW1teV87Ci0gICAgVCB2YWx1ZV87Ci0KLSAgICBjb25zdGV4cHIgY29u
c3RleHByX3N0b3JhZ2VfdCggdHJpdmlhbF9pbml0X3QgKSBfX05PRVhDRVBUIDogZHVtbXlfKCkg
e307Ci0KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gQXJncz4KLSAgICBjb25zdGV4cHIgY29uc3Rl
eHByX3N0b3JhZ2VfdCggQXJncyYmLi4uIGFyZ3MgKSA6IHZhbHVlXyhkZXRhaWxfOjpjb25zdGV4
cHJfZm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KLQotICAgIH5jb25zdGV4cHJfc3RvcmFnZV90
KCkgPSBkZWZhdWx0OwotfTsKLQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBPcHRpb25h
bF9iYXNlCi17Ci0gICAgYm9vbCBpbml0XzsKLSAgICBzdG9yYWdlX3Q8VD4gc3RvcmFnZV87Ci0K
LSAgICBjb25zdGV4cHIgT3B0aW9uYWxfYmFzZSgpIF9fTk9FWENFUFQgOiBpbml0XyhmYWxzZSks
IHN0b3JhZ2VfKHRyaXZpYWxfaW5pdCkge307Ci0KLSAgICBleHBsaWNpdCBjb25zdGV4cHIgT3B0
aW9uYWxfYmFzZShjb25zdCBUJiB2KSA6IGluaXRfKHRydWUpLCBzdG9yYWdlXyh2KSB7fQotCi0g
ICAgZXhwbGljaXQgY29uc3RleHByIE9wdGlvbmFsX2Jhc2UoVCYmIHYpIDogaW5pdF8odHJ1ZSks
IHN0b3JhZ2VfKGRldGFpbF86OmNvbnN0ZXhwcl9tb3ZlKHYpKSB7fQotCi0gICAgdGVtcGxhdGUg
PGNsYXNzLi4uIEFyZ3M+IGV4cGxpY2l0IE9wdGlvbmFsX2Jhc2Uoc3RkOjppbl9wbGFjZV90LCBB
cmdzJiYuLi4gYXJncykKLSAgICAgICAgOiBpbml0Xyh0cnVlKSwgc3RvcmFnZV8oZGV0YWlsXzo6
Y29uc3RleHByX2ZvcndhcmQ8QXJncz4oYXJncykuLi4pIHt9Ci0KLSAgICB0ZW1wbGF0ZSA8Y2xh
c3MgVSwgY2xhc3MuLi4gQXJncywgVFIyX09QVElPTkFMX1JFUVVJUkVTKHN0ZDo6aXNfY29uc3Ry
dWN0aWJsZTxULCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VT4+KT4KLSAgICBleHBsaWNpdCBPcHRp
b25hbF9iYXNlKHN0ZDo6aW5fcGxhY2VfdCwgc3RkOjppbml0aWFsaXplcl9saXN0PFU+IGlsLCBB
cmdzJiYuLi4gYXJncykKLSAgICAgICAgOiBpbml0Xyh0cnVlKSwgc3RvcmFnZV8oaWwsIHN0ZDo6
Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KLQotICAgIH5PcHRpb25hbF9iYXNlKCkgeyBpZiAo
aW5pdF8pIHN0b3JhZ2VfLnZhbHVlXy5UOjp+VCgpOyB9Ci19OwotCi0KLXRlbXBsYXRlIDxjbGFz
cyBUPgotc3RydWN0IGNvbnN0ZXhwcl9PcHRpb25hbF9iYXNlCi17Ci0gICAgYm9vbCBpbml0XzsK
LSAgICBjb25zdGV4cHJfc3RvcmFnZV90PFQ+IHN0b3JhZ2VfOwotCi0gICAgY29uc3RleHByIGNv
bnN0ZXhwcl9PcHRpb25hbF9iYXNlKCkgX19OT0VYQ0VQVCA6IGluaXRfKGZhbHNlKSwgc3RvcmFn
ZV8odHJpdmlhbF9pbml0KSB7fTsKLQotICAgIGV4cGxpY2l0IGNvbnN0ZXhwciBjb25zdGV4cHJf
T3B0aW9uYWxfYmFzZShjb25zdCBUJiB2KSA6IGluaXRfKHRydWUpLCBzdG9yYWdlXyh2KSB7fQot
Ci0gICAgZXhwbGljaXQgY29uc3RleHByIGNvbnN0ZXhwcl9PcHRpb25hbF9iYXNlKFQmJiB2KSA6
IGluaXRfKHRydWUpLCBzdG9yYWdlXyhkZXRhaWxfOjpjb25zdGV4cHJfbW92ZSh2KSkge30KLQot
ICAgIHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPiBleHBsaWNpdCBjb25zdGV4cHIgY29uc3RleHBy
X09wdGlvbmFsX2Jhc2Uoc3RkOjppbl9wbGFjZV90LCBBcmdzJiYuLi4gYXJncykKLSAgICAgIDog
aW5pdF8odHJ1ZSksIHN0b3JhZ2VfKGRldGFpbF86OmNvbnN0ZXhwcl9mb3J3YXJkPEFyZ3M+KGFy
Z3MpLi4uKSB7fQotCi0gICAgdGVtcGxhdGUgPGNsYXNzIFUsIGNsYXNzLi4uIEFyZ3MsIFRSMl9P
UFRJT05BTF9SRVFVSVJFUyhzdGQ6OmlzX2NvbnN0cnVjdGlibGU8VCwgc3RkOjppbml0aWFsaXpl
cl9saXN0PFU+Pik+Ci0gICAgT1BUSU9OQUxfQ09OU1RFWFBSX0lOSVRfTElTVCBleHBsaWNpdCBj
b25zdGV4cHJfT3B0aW9uYWxfYmFzZShzdGQ6OmluX3BsYWNlX3QsIHN0ZDo6aW5pdGlhbGl6ZXJf
bGlzdDxVPiBpbCwgQXJncyYmLi4uIGFyZ3MpCi0gICAgICA6IGluaXRfKHRydWUpLCBzdG9yYWdl
XyhpbCwgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSB7fQotCi0gICAgfmNvbnN0ZXhwcl9P
cHRpb25hbF9iYXNlKCkgPSBkZWZhdWx0OwotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci11c2lu
ZyBPcHRpb25hbEJhc2UgPSB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAotICAgIHN0ZDo6aXNf
dHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxUPjo6dmFsdWUsICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBpZiBwb3NzaWJsZQotICAgIGNvbnN0ZXhwcl9PcHRpb25hbF9iYXNlPHR5cGVuYW1lIHN0
ZDo6cmVtb3ZlX2NvbnN0PFQ+Ojp0eXBlPiwgLy8gdXNlIGJhc2Ugd2l0aCB0cml2aWFsIGRlc3Ry
dWN0b3IKLSAgICBPcHRpb25hbF9iYXNlPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PFQ+Ojp0
eXBlPgotPjo6dHlwZTsKLQotCi0KLXRlbXBsYXRlIDxjbGFzcyBUPgotY2xhc3MgT3B0aW9uYWwg
OiBwcml2YXRlIE9wdGlvbmFsQmFzZTxUPgotewotICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LSAgc3RhdGljX2Fzc2VydCggIXN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBzdGQ6OmRlY2F5PFQ+Ojp0
eXBlLCBudWxsb3B0X3Q+Ojp2YWx1ZSwgImJhZCBUIiApOwotICBzdGF0aWNfYXNzZXJ0KCAhc3Rk
Ojppc19zYW1lPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VD46OnR5cGUsIHN0ZDo6aW5fcGxhY2VfdD46
OnZhbHVlLCAiYmFkIFQiICk7Ci0KLQotICBjb25zdGV4cHIgYm9vbCBpbml0aWFsaXplZCgpIGNv
bnN0IF9fTk9FWENFUFQgeyByZXR1cm4gT3B0aW9uYWxCYXNlPFQ+Ojppbml0XzsgfQotICB0eXBl
bmFtZSBzdGQ6OnJlbW92ZV9jb25zdDxUPjo6dHlwZSogZGF0YXB0cigpIHsgIHJldHVybiBzdGQ6
OmFkZHJlc3NvZihPcHRpb25hbEJhc2U8VD46OnN0b3JhZ2VfLnZhbHVlXyk7IH0KLSAgY29uc3Rl
eHByIGNvbnN0IFQqIGRhdGFwdHIoKSBjb25zdCB7IHJldHVybiBkZXRhaWxfOjpzdGF0aWNfYWRk
cmVzc29mKE9wdGlvbmFsQmFzZTxUPjo6c3RvcmFnZV8udmFsdWVfKTsgfQotCi0jIGlmIE9QVElP
TkFMX0hBU19USElTX1JWQUxVRV9SRUZTID09IDEKLSAgY29uc3RleHByIGNvbnN0IFQmIGNvbnRh
aW5lZF92YWwoKSBjb25zdCYgeyByZXR1cm4gT3B0aW9uYWxCYXNlPFQ+OjpzdG9yYWdlXy52YWx1
ZV87IH0KLSAgT1BUSU9OQUxfTVVUQUJMRV9DT05TVEVYUFIgVCYmIGNvbnRhaW5lZF92YWwoKSAm
JiB7IHJldHVybiBzdGQ6Om1vdmUoT3B0aW9uYWxCYXNlPFQ+OjpzdG9yYWdlXy52YWx1ZV8pOyB9
Ci0gIE9QVElPTkFMX01VVEFCTEVfQ09OU1RFWFBSIFQmIGNvbnRhaW5lZF92YWwoKSAmIHsgcmV0
dXJuIE9wdGlvbmFsQmFzZTxUPjo6c3RvcmFnZV8udmFsdWVfOyB9Ci0jIGVsc2UKLSAgY29uc3Rl
eHByIGNvbnN0IFQmIGNvbnRhaW5lZF92YWwoKSBjb25zdCB7IHJldHVybiBPcHRpb25hbEJhc2U8
VD46OnN0b3JhZ2VfLnZhbHVlXzsgfQotICBUJiBjb250YWluZWRfdmFsKCkgeyByZXR1cm4gT3B0
aW9uYWxCYXNlPFQ+OjpzdG9yYWdlXy52YWx1ZV87IH0KLSMgZW5kaWYKLQotICB2b2lkIGNsZWFy
KCkgX19OT0VYQ0VQVCB7Ci0gICAgaWYgKGluaXRpYWxpemVkKCkpIGRhdGFwdHIoKS0+VDo6flQo
KTsKLSAgICBPcHRpb25hbEJhc2U8VD46OmluaXRfID0gZmFsc2U7Ci0gIH0KLQotICB0ZW1wbGF0
ZSA8Y2xhc3MuLi4gQXJncz4KLSAgdm9pZCBpbml0aWFsaXplKEFyZ3MmJi4uLiBhcmdzKSBfX05P
RVhDRVBUXyhfX05PRVhDRVBUXyhUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikpKQotICB7
Ci0gICAgQVNTRVJUKCFPcHRpb25hbEJhc2U8VD46OmluaXRfKTsKLSAgICA6Om5ldyAoc3RhdGlj
X2Nhc3Q8dm9pZCo+KGRhdGFwdHIoKSkpIFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsK
LSAgICBPcHRpb25hbEJhc2U8VD46OmluaXRfID0gdHJ1ZTsKLSAgfQotCi0gIHRlbXBsYXRlIDxj
bGFzcyBVLCBjbGFzcy4uLiBBcmdzPgotICB2b2lkIGluaXRpYWxpemUoc3RkOjppbml0aWFsaXpl
cl9saXN0PFU+IGlsLCBBcmdzJiYuLi4gYXJncykgX19OT0VYQ0VQVF8oX19OT0VYQ0VQVF8oVChp
bCwgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSkpCi0gIHsKLSAgICBBU1NFUlQoIU9wdGlv
bmFsQmFzZTxUPjo6aW5pdF8pOwotICAgIDo6bmV3IChzdGF0aWNfY2FzdDx2b2lkKj4oZGF0YXB0
cigpKSkgVChpbCwgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKLSAgICBPcHRpb25hbEJh
c2U8VD46OmluaXRfID0gdHJ1ZTsKLSAgfQotCi1wdWJsaWM6Ci0gIHR5cGVkZWYgVCB2YWx1ZV90
eXBlOwotCi0gIC8vIDIwLjUuNS4xLCBjb25zdHJ1Y3RvcnMKLSAgY29uc3RleHByIE9wdGlvbmFs
KCkgX19OT0VYQ0VQVCA6IE9wdGlvbmFsQmFzZTxUPigpICB7fTsKLSAgY29uc3RleHByIE9wdGlv
bmFsKG51bGxvcHRfdCkgX19OT0VYQ0VQVCA6IE9wdGlvbmFsQmFzZTxUPigpIHt9OwotCi0gIGNv
bnN0ZXhwciBPcHRpb25hbChjb25zdCBPcHRpb25hbCYgcmhzKQotICA6IE9wdGlvbmFsQmFzZTxU
PigpCi0gIHsKLSAgICBpZiAocmhzLmluaXRpYWxpemVkKCkpIHsKLSAgICAgICAgaWYgY29uc3Rl
eHByIChzdGQ6OmlzX3RyaXZpYWxseV9jb3B5X2Fzc2lnbmFibGVfdjxUPikKLSAgICAgICAgICAg
IE9wdGlvbmFsQmFzZTxUPjo6c3RvcmFnZV8gPSAqcmhzOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICA6Om5ldyAoc3RhdGljX2Nhc3Q8dm9pZCo+KGRhdGFwdHIoKSkpIFQoKnJocyk7Ci0gICAg
ICAgIE9wdGlvbmFsQmFzZTxUPjo6aW5pdF8gPSB0cnVlOwotICAgIH0KLSAgfQotCi0gIGNvbnN0
ZXhwciBPcHRpb25hbChPcHRpb25hbCYmIHJocykgX19OT0VYQ0VQVF8oZGV0YWlsXzo6aXNfbm90
aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8VD46OnZhbHVlKQotICA6IE9wdGlvbmFsQmFzZTxUPigp
Ci0gIHsKLSAgICBpZiAocmhzLmluaXRpYWxpemVkKCkpIHsKLSAgICAgICAgaWYgY29uc3RleHBy
IChzdGQ6OmlzX3RyaXZpYWxseV9jb3B5X2Fzc2lnbmFibGVfdjxUPikKLSAgICAgICAgICAgIE9w
dGlvbmFsQmFzZTxUPjo6c3RvcmFnZV8gPSAqcmhzOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICA6Om5ldyAoc3RhdGljX2Nhc3Q8dm9pZCo+KGRhdGFwdHIoKSkpIFQoc3RkOjptb3ZlKCpyaHMp
KTsKLSAgICAgICAgT3B0aW9uYWxCYXNlPFQ+Ojppbml0XyA9IHRydWU7Ci0gICAgICAgIHJocy5j
bGVhcigpOwotICAgIH0KLSAgfQotCi0gIGNvbnN0ZXhwciBPcHRpb25hbChjb25zdCBUJiB2KSA6
IE9wdGlvbmFsQmFzZTxUPih2KSB7fQotCi0gIGNvbnN0ZXhwciBPcHRpb25hbChUJiYgdikgOiBP
cHRpb25hbEJhc2U8VD4oZGV0YWlsXzo6Y29uc3RleHByX21vdmUodikpIHt9Ci0KLSAgdGVtcGxh
dGUgPGNsYXNzLi4uIEFyZ3M+Ci0gIGV4cGxpY2l0IGNvbnN0ZXhwciBPcHRpb25hbChzdGQ6Omlu
X3BsYWNlX3QsIEFyZ3MmJi4uLiBhcmdzKQotICAgICAgOiBPcHRpb25hbEJhc2U8VD4oc3RkOjpp
bl9wbGFjZV90e30sIGRldGFpbF86OmNvbnN0ZXhwcl9mb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSB7
fQotCi0gIHRlbXBsYXRlIDxjbGFzcyBVLCBjbGFzcy4uLiBBcmdzLCBUUjJfT1BUSU9OQUxfUkVR
VUlSRVMoc3RkOjppc19jb25zdHJ1Y3RpYmxlPFQsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVPj4p
PgotICBPUFRJT05BTF9DT05TVEVYUFJfSU5JVF9MSVNUIGV4cGxpY2l0IE9wdGlvbmFsKHN0ZDo6
aW5fcGxhY2VfdCwgc3RkOjppbml0aWFsaXplcl9saXN0PFU+IGlsLCBBcmdzJiYuLi4gYXJncykK
LSAgICAgIDogT3B0aW9uYWxCYXNlPFQ+KHN0ZDo6aW5fcGxhY2VfdHt9LCBpbCwgZGV0YWlsXzo6
Y29uc3RleHByX2ZvcndhcmQ8QXJncz4oYXJncykuLi4pIHt9Ci0KLSAgLy8gMjAuNS40LjIsIERl
c3RydWN0b3IKLSAgfk9wdGlvbmFsKCkgPSBkZWZhdWx0OwotCi0gIC8vIDIwLjUuNC4zLCBhc3Np
Z25tZW50Ci0gIE9wdGlvbmFsJiBvcGVyYXRvcj0obnVsbG9wdF90KSBfX05PRVhDRVBUCi0gIHsK
LSAgICBjbGVhcigpOwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIE9wdGlvbmFsJiBvcGVy
YXRvcj0oY29uc3QgT3B0aW9uYWwmIHJocykKLSAgewotICAgIGlmICAgICAgKGluaXRpYWxpemVk
KCkgPT0gdHJ1ZSAgJiYgcmhzLmluaXRpYWxpemVkKCkgPT0gZmFsc2UpIGNsZWFyKCk7Ci0gICAg
ZWxzZSBpZiAoaW5pdGlhbGl6ZWQoKSA9PSBmYWxzZSAmJiByaHMuaW5pdGlhbGl6ZWQoKSA9PSB0
cnVlKSAgaW5pdGlhbGl6ZSgqcmhzKTsKLSAgICBlbHNlIGlmIChpbml0aWFsaXplZCgpID09IHRy
dWUgICYmIHJocy5pbml0aWFsaXplZCgpID09IHRydWUpICBjb250YWluZWRfdmFsKCkgPSAqcmhz
OwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIE9wdGlvbmFsJiBvcGVyYXRvcj0oT3B0aW9u
YWwmJiByaHMpCi0gIF9fTk9FWENFUFRfKGRldGFpbF86OmlzX25vdGhyb3dfbW92ZV9hc3NpZ25h
YmxlPFQ+Ojp2YWx1ZSAmJiBkZXRhaWxfOjppc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxU
Pjo6dmFsdWUpCi0gIHsKLSAgICBpZiAgICAgIChpbml0aWFsaXplZCgpID09IHRydWUgICYmIHJo
cy5pbml0aWFsaXplZCgpID09IGZhbHNlKSBjbGVhcigpOwotICAgIGVsc2UgaWYgKGluaXRpYWxp
emVkKCkgPT0gZmFsc2UgJiYgcmhzLmluaXRpYWxpemVkKCkgPT0gdHJ1ZSkgIHsgaW5pdGlhbGl6
ZShzdGQ6Om1vdmUoKnJocykpOyByaHMuY2xlYXIoKTsgfQotICAgIGVsc2UgaWYgKGluaXRpYWxp
emVkKCkgPT0gdHJ1ZSAgJiYgcmhzLmluaXRpYWxpemVkKCkgPT0gdHJ1ZSkgIHsgY29udGFpbmVk
X3ZhbCgpID0gc3RkOjptb3ZlKCpyaHMpOyByaHMuY2xlYXIoKTsgfQotICAgIHJldHVybiAqdGhp
czsKLSAgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBVPgotICBhdXRvIG9wZXJhdG9yPShVJiYgdikK
LSAgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWYKLSAgPAotICAgIHN0ZDo6aXNfc2FtZTx0eXBl
bmFtZSBzdGQ6OmRlY2F5PFU+Ojp0eXBlLCBUPjo6dmFsdWUsCi0gICAgT3B0aW9uYWwmCi0gID46
OnR5cGUKLSAgewotICAgIGlmIChpbml0aWFsaXplZCgpKSB7IGNvbnRhaW5lZF92YWwoKSA9IHN0
ZDo6Zm9yd2FyZDxVPih2KTsgfQotICAgIGVsc2UgICAgICAgICAgICAgICB7IGluaXRpYWxpemUo
c3RkOjpmb3J3YXJkPFU+KHYpKTsgIH0KLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotCi0gIHRl
bXBsYXRlIDxjbGFzcy4uLiBBcmdzPgotICB2b2lkIGVtcGxhY2UoQXJncyYmLi4uIGFyZ3MpCi0g
IHsKLSAgICBjbGVhcigpOwotICAgIGluaXRpYWxpemUoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3Mp
Li4uKTsKLSAgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBVLCBjbGFzcy4uLiBBcmdzPgotICB2b2lk
IGVtcGxhY2Uoc3RkOjppbml0aWFsaXplcl9saXN0PFU+IGlsLCBBcmdzJiYuLi4gYXJncykKLSAg
ewotICAgIGNsZWFyKCk7Ci0gICAgaW5pdGlhbGl6ZTxVLCBBcmdzLi4uPihpbCwgc3RkOjpmb3J3
YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKLSAgfQotCi0gIC8vIDIwLjUuNC40LCBTd2FwCi0gIHZvaWQg
c3dhcChPcHRpb25hbDxUPiYgcmhzKSBfX05PRVhDRVBUXyhkZXRhaWxfOjppc19ub3Rocm93X21v
dmVfY29uc3RydWN0aWJsZTxUPjo6dmFsdWUgJiYgX19OT0VYQ0VQVF8oc3dhcChzdGQ6OmRlY2x2
YWw8VCY+KCksIHN0ZDo6ZGVjbHZhbDxUJj4oKSkpKQotICB7Ci0gICAgaWYgICAgICAoaW5pdGlh
bGl6ZWQoKSA9PSB0cnVlICAmJiByaHMuaW5pdGlhbGl6ZWQoKSA9PSBmYWxzZSkgeyByaHMuaW5p
dGlhbGl6ZShzdGQ6Om1vdmUoKip0aGlzKSk7IGNsZWFyKCk7IH0KLSAgICBlbHNlIGlmIChpbml0
aWFsaXplZCgpID09IGZhbHNlICYmIHJocy5pbml0aWFsaXplZCgpID09IHRydWUpICB7IGluaXRp
YWxpemUoc3RkOjptb3ZlKCpyaHMpKTsgcmhzLmNsZWFyKCk7IH0KLSAgICBlbHNlIGlmIChpbml0
aWFsaXplZCgpID09IHRydWUgICYmIHJocy5pbml0aWFsaXplZCgpID09IHRydWUpICB7IHVzaW5n
IHN0ZDo6c3dhcDsgc3dhcCgqKnRoaXMsICpyaHMpOyB9Ci0gIH0KLQotICAvLyAyMC41LjQuNSwg
T2JzZXJ2ZXJzCi0KLSAgZXhwbGljaXQgY29uc3RleHByIG9wZXJhdG9yIGJvb2woKSBjb25zdCBf
X05PRVhDRVBUIHsgcmV0dXJuIGluaXRpYWxpemVkKCk7IH0KLSAgY29uc3RleHByIGJvb2wgaGFz
VmFsdWUoKSBjb25zdCBfX05PRVhDRVBUIHsgcmV0dXJuIGluaXRpYWxpemVkKCk7IH0KLQotICBj
b25zdGV4cHIgVCBjb25zdCogb3BlcmF0b3IgLT4oKSBjb25zdCB7Ci0gICAgUkVMRUFTRV9BU1NF
UlRfVU5ERVJfQ09OU1RFWFBSX0NPTlRFWFQoaW5pdGlhbGl6ZWQoKSk7Ci0gICAgcmV0dXJuIGRh
dGFwdHIoKTsKLSAgfQotCi0gIE9QVElPTkFMX01VVEFCTEVfQ09OU1RFWFBSIFQqIG9wZXJhdG9y
IC0+KCkgewotICAgIFJFTEVBU0VfQVNTRVJUX1VOREVSX0NPTlNURVhQUl9DT05URVhUKGluaXRp
YWxpemVkKCkpOwotICAgIHJldHVybiBkYXRhcHRyKCk7Ci0gIH0KLQotICBjb25zdGV4cHIgVCBj
b25zdCYgb3BlcmF0b3IgKigpIGNvbnN0JiB7Ci0gICAgUkVMRUFTRV9BU1NFUlRfVU5ERVJfQ09O
U1RFWFBSX0NPTlRFWFQoaW5pdGlhbGl6ZWQoKSk7Ci0gICAgcmV0dXJuIGNvbnRhaW5lZF92YWwo
KTsKLSAgfQotCi0gIE9QVElPTkFMX01VVEFCTEVfQ09OU1RFWFBSIFQmIG9wZXJhdG9yICooKSAm
IHsKLSAgICBSRUxFQVNFX0FTU0VSVF9VTkRFUl9DT05TVEVYUFJfQ09OVEVYVChpbml0aWFsaXpl
ZCgpKTsKLSAgICByZXR1cm4gY29udGFpbmVkX3ZhbCgpOwotICB9Ci0KLSAgT1BUSU9OQUxfTVVU
QUJMRV9DT05TVEVYUFIgVCYmIG9wZXJhdG9yICooKSAmJiB7Ci0gICAgUkVMRUFTRV9BU1NFUlRf
VU5ERVJfQ09OU1RFWFBSX0NPTlRFWFQoaW5pdGlhbGl6ZWQoKSk7Ci0gICAgcmV0dXJuIGRldGFp
bF86OmNvbnN0ZXhwcl9tb3ZlKGNvbnRhaW5lZF92YWwoKSk7Ci0gIH0KLQotICBjb25zdGV4cHIg
VCBjb25zdCYgdmFsdWUoKSBjb25zdCYgewotICAgIFJFTEVBU0VfQVNTRVJUX1VOREVSX0NPTlNU
RVhQUl9DT05URVhUKGluaXRpYWxpemVkKCkpOwotICAgIHJldHVybiBjb250YWluZWRfdmFsKCk7
Ci0gIH0KLQotICBPUFRJT05BTF9NVVRBQkxFX0NPTlNURVhQUiBUJiB2YWx1ZSgpICYgewotICAg
IFJFTEVBU0VfQVNTRVJUX1VOREVSX0NPTlNURVhQUl9DT05URVhUKGluaXRpYWxpemVkKCkpOwot
ICAgIHJldHVybiBjb250YWluZWRfdmFsKCk7Ci0gIH0KLQotICBPUFRJT05BTF9NVVRBQkxFX0NP
TlNURVhQUiBUJiYgdmFsdWUoKSAmJiB7Ci0gICAgUkVMRUFTRV9BU1NFUlRfVU5ERVJfQ09OU1RF
WFBSX0NPTlRFWFQoaW5pdGlhbGl6ZWQoKSk7Ci0gICAgcmV0dXJuIHN0ZDo6bW92ZShjb250YWlu
ZWRfdmFsKCkpOwotICB9Ci0KLSMgaWYgT1BUSU9OQUxfSEFTX1RISVNfUlZBTFVFX1JFRlMgPT0g
MQotCi0gIHRlbXBsYXRlIDxjbGFzcyBWPgotICBjb25zdGV4cHIgVCB2YWx1ZU9yKFYmJiB2KSBj
b25zdCYKLSAgewotICAgIHJldHVybiAqdGhpcyA/ICoqdGhpcyA6IGRldGFpbF86OmNvbnZlcnQ8
VD4oZGV0YWlsXzo6Y29uc3RleHByX2ZvcndhcmQ8Vj4odikpOwotICB9Ci0KLSAgdGVtcGxhdGUg
PGNsYXNzIFY+Ci0gIE9QVElPTkFMX01VVEFCTEVfQ09OU1RFWFBSIFQgdmFsdWVPcihWJiYgdikg
JiYKLSAgewotICAgIHJldHVybiAqdGhpcyA/IGRldGFpbF86OmNvbnN0ZXhwcl9tb3ZlKGNvbnN0
X2Nhc3Q8T3B0aW9uYWw8VD4mPigqdGhpcykuY29udGFpbmVkX3ZhbCgpKSA6IGRldGFpbF86OmNv
bnZlcnQ8VD4oZGV0YWlsXzo6Y29uc3RleHByX2ZvcndhcmQ8Vj4odikpOwotICB9Ci0KLSMgZWxz
ZQotCi0gIHRlbXBsYXRlIDxjbGFzcyBWPgotICBjb25zdGV4cHIgVCB2YWx1ZU9yKFYmJiB2KSBj
b25zdAotICB7Ci0gICAgcmV0dXJuICp0aGlzID8gKip0aGlzIDogZGV0YWlsXzo6Y29udmVydDxU
PihkZXRhaWxfOjpjb25zdGV4cHJfZm9yd2FyZDxWPih2KSk7Ci0gIH0KLQotIyBlbmRpZgotCi0g
IC8vIDIwLjYuMy42LCBtb2RpZmllcnMKLSAgdm9pZCByZXNldCgpIF9fTk9FWENFUFQgeyBjbGVh
cigpOyB9Ci19OwotCi0KLXRlbXBsYXRlIDxjbGFzcyBUPgotY2xhc3MgT3B0aW9uYWw8VCY+Ci17
Ci0gIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICBzdGF0aWNfYXNzZXJ0KCAhc3RkOjppc19z
YW1lPFQsIG51bGxvcHRfdD46OnZhbHVlLCAiYmFkIFQiICk7Ci0gIHN0YXRpY19hc3NlcnQoICFz
dGQ6OmlzX3NhbWU8VCwgc3RkOjppbl9wbGFjZV90Pjo6dmFsdWUsICJiYWQgVCIgKTsKLSAgVCog
cmVmOwotCi1wdWJsaWM6Ci0KLSAgLy8gMjAuNS41LjEsIGNvbnN0cnVjdGlvbi9kZXN0cnVjdGlv
bgotICBjb25zdGV4cHIgT3B0aW9uYWwoKSBfX05PRVhDRVBUIDogcmVmKG51bGxwdHIpIHt9Ci0K
LSAgY29uc3RleHByIE9wdGlvbmFsKG51bGxvcHRfdCkgX19OT0VYQ0VQVCA6IHJlZihudWxscHRy
KSB7fQotCi0gIGNvbnN0ZXhwciBPcHRpb25hbChUJiB2KSBfX05PRVhDRVBUIDogcmVmKGRldGFp
bF86OnN0YXRpY19hZGRyZXNzb2YodikpIHt9Ci0KLSAgT3B0aW9uYWwoVCYmKSA9IGRlbGV0ZTsK
LQotICBjb25zdGV4cHIgT3B0aW9uYWwoY29uc3QgT3B0aW9uYWwmIHJocykgX19OT0VYQ0VQVCA6
IHJlZihyaHMucmVmKSB7fQotCi0gIGV4cGxpY2l0IGNvbnN0ZXhwciBPcHRpb25hbChzdGQ6Omlu
X3BsYWNlX3QsIFQmIHYpIF9fTk9FWENFUFQgOiByZWYoZGV0YWlsXzo6c3RhdGljX2FkZHJlc3Nv
Zih2KSkge30KLQotICBleHBsaWNpdCBPcHRpb25hbChzdGQ6OmluX3BsYWNlX3QsIFQmJikgPSBk
ZWxldGU7Ci0KLSAgfk9wdGlvbmFsKCkgPSBkZWZhdWx0OwotCi0gIC8vIDIwLjUuNS4yLCBtdXRh
dGlvbgotICBPcHRpb25hbCYgb3BlcmF0b3I9KG51bGxvcHRfdCkgX19OT0VYQ0VQVCB7Ci0gICAg
cmVmID0gbnVsbHB0cjsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICAvLyBPcHRpb25hbCYg
b3BlcmF0b3I9KGNvbnN0IE9wdGlvbmFsJiByaHMpIF9fTk9FWENFUFQgewotICAgIC8vIHJlZiA9
IHJocy5yZWY7Ci0gICAgLy8gcmV0dXJuICp0aGlzOwotICAvLyB9Ci0KLSAgLy8gT3B0aW9uYWwm
IG9wZXJhdG9yPShPcHRpb25hbCYmIHJocykgX19OT0VYQ0VQVCB7Ci0gICAgLy8gcmVmID0gcmhz
LnJlZjsKLSAgICAvLyByZXR1cm4gKnRoaXM7Ci0gIC8vIH0KLQotICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVT4KLSAgYXV0byBvcGVyYXRvcj0oVSYmIHJocykgX19OT0VYQ0VQVAotICAtPiB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZgotICA8Ci0gICAgc3RkOjppc19zYW1lPHR5cGVuYW1lIHN0ZDo6ZGVj
YXk8VT46OnR5cGUsIE9wdGlvbmFsPFQmPj46OnZhbHVlLAotICAgIE9wdGlvbmFsJgotICA+Ojp0
eXBlCi0gIHsKLSAgICByZWYgPSByaHMucmVmOwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0g
IHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICBhdXRvIG9wZXJhdG9yPShVJiYgcmhzKSBfX05PRVhD
RVBUCi0gIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmCi0gIDwKLSAgICAhc3RkOjppc19zYW1l
PHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VT46OnR5cGUsIE9wdGlvbmFsPFQmPj46OnZhbHVlLAotICAg
IE9wdGlvbmFsJgotICA+Ojp0eXBlCi0gID0gZGVsZXRlOwotCi0gIHZvaWQgZW1wbGFjZShUJiB2
KSBfX05PRVhDRVBUIHsKLSAgICByZWYgPSBkZXRhaWxfOjpzdGF0aWNfYWRkcmVzc29mKHYpOwot
ICB9Ci0KLSAgdm9pZCBlbXBsYWNlKFQmJikgPSBkZWxldGU7Ci0KLQotICB2b2lkIHN3YXAoT3B0
aW9uYWw8VCY+JiByaHMpIF9fTk9FWENFUFQKLSAgewotICAgIHN0ZDo6c3dhcChyZWYsIHJocy5y
ZWYpOwotICB9Ci0KLSAgLy8gMjAuNS41LjMsIG9ic2VydmVycwotICBjb25zdGV4cHIgVCogb3Bl
cmF0b3ItPigpIGNvbnN0IHsKLSAgICBSRUxFQVNFX0FTU0VSVF9VTkRFUl9DT05TVEVYUFJfQ09O
VEVYVChyZWYpOwotICAgIHJldHVybiByZWY7Ci0gIH0KLQotICBjb25zdGV4cHIgVCYgb3BlcmF0
b3IqKCkgY29uc3QgewotICAgIFJFTEVBU0VfQVNTRVJUX1VOREVSX0NPTlNURVhQUl9DT05URVhU
KHJlZik7Ci0gICAgcmV0dXJuICpyZWY7Ci0gIH0KLQotICBjb25zdGV4cHIgVCYgdmFsdWUoKSBj
b25zdCB7Ci0gICAgUkVMRUFTRV9BU1NFUlRfVU5ERVJfQ09OU1RFWFBSX0NPTlRFWFQocmVmKCkp
OwotICAgIHJldHVybiAqcmVmOwotICB9Ci0KLSAgZXhwbGljaXQgY29uc3RleHByIG9wZXJhdG9y
IGJvb2woKSBjb25zdCBfX05PRVhDRVBUIHsKLSAgICByZXR1cm4gcmVmICE9IG51bGxwdHI7Ci0g
IH0KLQotICBjb25zdGV4cHIgYm9vbCBoYXNWYWx1ZSgpIGNvbnN0IF9fTk9FWENFUFQgewotICAg
IHJldHVybiByZWYgIT0gbnVsbHB0cjsKLSAgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBWPgotICBj
b25zdGV4cHIgdHlwZW5hbWUgc3RkOjpkZWNheTxUPjo6dHlwZSB2YWx1ZU9yKFYmJiB2KSBjb25z
dAotICB7Ci0gICAgcmV0dXJuICp0aGlzID8gKip0aGlzIDogZGV0YWlsXzo6Y29udmVydDx0eXBl
bmFtZSBzdGQ6OmRlY2F5PFQ+Ojp0eXBlPihkZXRhaWxfOjpjb25zdGV4cHJfZm9yd2FyZDxWPih2
KSk7Ci0gIH0KLQotICAvLyB4LngueC54LCBtb2RpZmllcnMKLSAgdm9pZCByZXNldCgpIF9fTk9F
WENFUFQgeyByZWYgPSBudWxscHRyOyB9Ci19OwotCi0KLXRlbXBsYXRlIDxjbGFzcyBUPgotY2xh
c3MgT3B0aW9uYWw8VCYmPgotewotICBzdGF0aWNfYXNzZXJ0KCBzaXplb2YoVCkgPT0gMCwgIk9w
dGlvbmFsIHJ2YWx1ZSByZWZlcmVuY2VzIGRpc2FsbG93ZWQiICk7Ci19OwotCi0KLS8vIDIwLjUu
OCwgUmVsYXRpb25hbCBvcGVyYXRvcnMKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBjb25zdCBPcHRpb25hbDxUPiYgeSkK
LXsKLSAgcmV0dXJuIGJvb2woeCkgIT0gYm9vbCh5KSA/IGZhbHNlIDogYm9vbCh4KSA9PSBmYWxz
ZSA/IHRydWUgOiAqeCA9PSAqeTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBi
b29sIG9wZXJhdG9yIT0oY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0IE9wdGlvbmFsPFQ+JiB5
KQotewotICByZXR1cm4gISh4ID09IHkpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBjb25zdCBPcHRpb25hbDxU
PiYgeSkKLXsKLSAgcmV0dXJuICgheSkgPyBmYWxzZSA6ICgheCkgPyB0cnVlIDogKnggPCAqeTsK
LX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihjb25zdCBP
cHRpb25hbDxUPiYgeCwgY29uc3QgT3B0aW9uYWw8VD4mIHkpCi17Ci0gIHJldHVybiAoeSA8IHgp
OwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25z
dCBPcHRpb25hbDxUPiYgeCwgY29uc3QgT3B0aW9uYWw8VD4mIHkpCi17Ci0gIHJldHVybiAhKHkg
PCB4KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0o
Y29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0IE9wdGlvbmFsPFQ+JiB5KQotewotICByZXR1cm4g
ISh4IDwgeSk7Ci19Ci0KLQotLy8gMjAuNS45LCBDb21wYXJpc29uIHdpdGggbnVsbG9wdAotdGVt
cGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgT3B0aW9uYWw8
VD4mIHgsIG51bGxvcHRfdCkgX19OT0VYQ0VQVAotewotICByZXR1cm4gKCF4KTsKLX0KLQotdGVt
cGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0obnVsbG9wdF90LCBjb25z
dCBPcHRpb25hbDxUPiYgeCkgX19OT0VYQ0VQVAotewotICByZXR1cm4gKCF4KTsKLX0KLQotdGVt
cGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgT3B0aW9uYWw8
VD4mIHgsIG51bGxvcHRfdCkgX19OT0VYQ0VQVAotewotICByZXR1cm4gYm9vbCh4KTsKLX0KLQot
dGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0obnVsbG9wdF90LCBj
b25zdCBPcHRpb25hbDxUPiYgeCkgX19OT0VYQ0VQVAotewotICByZXR1cm4gYm9vbCh4KTsKLX0K
LQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChjb25zdCBPcHRp
b25hbDxUPiYsIG51bGxvcHRfdCkgX19OT0VYQ0VQVAotewotICByZXR1cm4gZmFsc2U7Ci19Ci0K
LXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwobnVsbG9wdF90LCBj
b25zdCBPcHRpb25hbDxUPiYgeCkgX19OT0VYQ0VQVAotewotICByZXR1cm4gYm9vbCh4KTsKLX0K
LQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0oY29uc3QgT3B0
aW9uYWw8VD4mIHgsIG51bGxvcHRfdCkgX19OT0VYQ0VQVAotewotICByZXR1cm4gKCF4KTsKLX0K
LQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0obnVsbG9wdF90
LCBjb25zdCBPcHRpb25hbDxUPiYpIF9fTk9FWENFUFQKLXsKLSAgcmV0dXJuIHRydWU7Ci19Ci0K
LXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgT3B0aW9u
YWw8VD4mIHgsIG51bGxvcHRfdCkgX19OT0VYQ0VQVAotewotICByZXR1cm4gYm9vbCh4KTsKLX0K
LQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihudWxsb3B0X3Qs
IGNvbnN0IE9wdGlvbmFsPFQ+JikgX19OT0VYQ0VQVAotewotICByZXR1cm4gZmFsc2U7Ci19Ci0K
LXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0IE9wdGlv
bmFsPFQ+JiwgbnVsbG9wdF90KSBfX05PRVhDRVBUCi17Ci0gIHJldHVybiB0cnVlOwotfQotCi10
ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShudWxsb3B0X3QsIGNv
bnN0IE9wdGlvbmFsPFQ+JiB4KSBfX05PRVhDRVBUCi17Ci0gIHJldHVybiAoIXgpOwotfQotCi0K
LQotLy8gMjAuNS4xMCwgQ29tcGFyaXNvbiB3aXRoIFQKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25z
dGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBjb25zdCBUJiB2KQot
ewotICByZXR1cm4gYm9vbCh4KSA/ICp4ID09IHYgOiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPGNs
YXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgVCYgdiwgY29uc3QgT3B0aW9u
YWw8VD4mIHgpCi17Ci0gIHJldHVybiBib29sKHgpID8gdiA9PSAqeCA6IGZhbHNlOwotfQotCi10
ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShjb25zdCBPcHRpb25h
bDxUPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCAhPSB2IDogdHJ1
ZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29u
c3QgVCYgdiwgY29uc3QgT3B0aW9uYWw8VD4mIHgpCi17Ci0gIHJldHVybiBib29sKHgpID8gdiAh
PSAqeCA6IHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVy
YXRvcjwoY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0IFQmIHYpCi17Ci0gIHJldHVybiBib29s
KHgpID8gKnggPCB2IDogdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBi
b29sIG9wZXJhdG9yPihjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxUPiYgeCkKLXsKLSAgcmV0
dXJuIGJvb2woeCkgPyB2ID4gKnggOiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29u
c3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBjb25zdCBUJiB2KQot
ewotICByZXR1cm4gYm9vbCh4KSA/ICp4ID4gdiA6IGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8Y2xh
c3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFs
PFQ+JiB4KQotewotICByZXR1cm4gYm9vbCh4KSA/IHYgPCAqeCA6IGZhbHNlOwotfQotCi10ZW1w
bGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCBPcHRpb25hbDxU
PiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA+PSB2IDogZmFsc2U7
Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0
IFQmIHYsIGNvbnN0IE9wdGlvbmFsPFQ+JiB4KQotewotICByZXR1cm4gYm9vbCh4KSA/IHYgPD0g
KnggOiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJh
dG9yPD0oY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0IFQmIHYpCi17Ci0gIHJldHVybiBib29s
KHgpID8gKnggPD0gdiA6IHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIg
Ym9vbCBvcGVyYXRvcj49KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPFQ+JiB4KQotewotICBy
ZXR1cm4gYm9vbCh4KSA/IHYgPj0gKnggOiB0cnVlOwotfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB1c2luZyBPcHRpb25hbCA9IHN0ZDo6b3B0aW9uYWw8VD47Citjb25zdGV4cHIgYXV0byBudWxs
b3B0ID0gc3RkOjpudWxsb3B0OwordXNpbmcgbnVsbG9wdF90ID0gc3RkOjpudWxsb3B0X3Q7CiAK
LS8vIENvbXBhcmlzb24gb2YgT3B0aW9uYWw8VCY+IHdpdGggVAotdGVtcGxhdGUgPGNsYXNzIFQ+
IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgT3B0aW9uYWw8VCY+JiB4LCBjb25zdCBU
JiB2KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4gY29u
c3RleHByIHN0ZDo6b3B0aW9uYWw8c3RkOjpkZWNheV90PFQ+PiBtYWtlT3B0aW9uYWwoVCYmIHZh
bHVlKQogewotICByZXR1cm4gYm9vbCh4KSA/ICp4ID09IHYgOiBmYWxzZTsKKyAgICByZXR1cm4g
c3RkOjptYWtlX29wdGlvbmFsPHN0ZDo6ZGVjYXlfdDxUPj4oc3RkOjpmb3J3YXJkPFQ+KHZhbHVl
KSk7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPFQmPiYgeCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+IGNvbnN0ZXhwciBzdGQ6Om9wdGlvbmFsPFQ+IG1ha2VP
cHRpb25hbChBcmd1bWVudFR5cGVzJiYuLi4gYXJndW1lbnRzKQogewotICByZXR1cm4gYm9vbCh4
KSA/IHYgPT0gKnggOiBmYWxzZTsKKyAgICByZXR1cm4gc3RkOjptYWtlX29wdGlvbmFsPFQ+KHN0
ZDo6Zm9yd2FyZDxBcmd1bWVudFR5cGVzPihhcmd1bWVudHMpLi4uKTsKIH0KIAotdGVtcGxhdGUg
PGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgT3B0aW9uYWw8VCY+JiB4
LCBjb25zdCBUJiB2KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUu
Li4gQXJndW1lbnRUeXBlcz4gY29uc3RleHByIHN0ZDo6b3B0aW9uYWw8VD4gbWFrZU9wdGlvbmFs
KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVPiBsaXN0LCBBcmd1bWVudFR5cGVzJiYuLi4gYXJndW1l
bnRzKQogewotICByZXR1cm4gYm9vbCh4KSA/ICp4ICE9IHYgOiB0cnVlOworICAgIHJldHVybiBz
dGQ6Om1ha2Vfb3B0aW9uYWw8VD4obGlzdCwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50VHlwZXM+KGFy
Z3VtZW50cykuLi4pOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxUJj4mIHgpCisvLyBGSVhNRTogV2Ug
cHJvYmFibHkgZG9uJ3QgbmVlZCB0aGlzOyBpdCdzIG9ubHkgdXNlZCBpbiA1IHBsYWNlcy4KK3Rl
bXBsYXRlPHR5cGVuYW1lIE9wdGlvbmFsVHlwZSwgY2xhc3MgQ2FsbGJhY2s+IGF1dG8gdmFsdWVP
ckNvbXB1dGUoT3B0aW9uYWxUeXBlIG9wdGlvbmFsLCBDYWxsYmFjayBjYWxsYmFjaykgLT4gdHlw
ZW5hbWUgT3B0aW9uYWxUeXBlOjp2YWx1ZV90eXBlCiB7Ci0gIHJldHVybiBib29sKHgpID8gdiAh
PSAqeCA6IHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVy
YXRvcjwoY29uc3QgT3B0aW9uYWw8VCY+JiB4LCBjb25zdCBUJiB2KQotewotICByZXR1cm4gYm9v
bCh4KSA/ICp4IDwgdiA6IHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIg
Ym9vbCBvcGVyYXRvcj4oY29uc3QgVCYgdiwgY29uc3QgT3B0aW9uYWw8VCY+JiB4KQotewotICBy
ZXR1cm4gYm9vbCh4KSA/IHYgPiAqeCA6IHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgT3B0aW9uYWw8VCY+JiB4LCBjb25zdCBUJiB2
KQotewotICByZXR1cm4gYm9vbCh4KSA/ICp4ID4gdiA6IGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8
Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlv
bmFsPFQmPiYgeCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2IDwgKnggOiBmYWxzZTsKLX0KLQot
dGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0oY29uc3QgT3B0aW9u
YWw8VCY+JiB4LCBjb25zdCBUJiB2KQotewotICByZXR1cm4gYm9vbCh4KSA/ICp4ID49IHYgOiBm
YWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0o
Y29uc3QgVCYgdiwgY29uc3QgT3B0aW9uYWw8VCY+JiB4KQotewotICByZXR1cm4gYm9vbCh4KSA/
IHYgPD0gKnggOiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29s
IG9wZXJhdG9yPD0oY29uc3QgT3B0aW9uYWw8VCY+JiB4LCBjb25zdCBUJiB2KQotewotICByZXR1
cm4gYm9vbCh4KSA/ICp4IDw9IHYgOiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29u
c3RleHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxUJj4mIHgp
Ci17Ci0gIHJldHVybiBib29sKHgpID8gdiA+PSAqeCA6IHRydWU7Ci19Ci0KLS8vIENvbXBhcmlz
b24gb2YgT3B0aW9uYWw8VCBjb25zdCY+IHdpdGggVAotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0
ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgT3B0aW9uYWw8Y29uc3QgVCY+JiB4LCBjb25zdCBU
JiB2KQotewotICByZXR1cm4gYm9vbCh4KSA/ICp4ID09IHYgOiBmYWxzZTsKLX0KLQotdGVtcGxh
dGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgVCYgdiwgY29uc3Qg
T3B0aW9uYWw8Y29uc3QgVCY+JiB4KQotewotICByZXR1cm4gYm9vbCh4KSA/IHYgPT0gKnggOiBm
YWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0o
Y29uc3QgT3B0aW9uYWw8Y29uc3QgVCY+JiB4LCBjb25zdCBUJiB2KQotewotICByZXR1cm4gYm9v
bCh4KSA/ICp4ICE9IHYgOiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHBy
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxjb25zdCBUJj4mIHgp
Ci17Ci0gIHJldHVybiBib29sKHgpID8gdiAhPSAqeCA6IHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxj
bGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoY29uc3QgT3B0aW9uYWw8Y29uc3QgVCY+
JiB4LCBjb25zdCBUJiB2KQotewotICByZXR1cm4gYm9vbCh4KSA/ICp4IDwgdiA6IHRydWU7Ci19
Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgVCYg
diwgY29uc3QgT3B0aW9uYWw8Y29uc3QgVCY+JiB4KQotewotICByZXR1cm4gYm9vbCh4KSA/IHYg
PiAqeCA6IHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVy
YXRvcj4oY29uc3QgT3B0aW9uYWw8Y29uc3QgVCY+JiB4LCBjb25zdCBUJiB2KQotewotICByZXR1
cm4gYm9vbCh4KSA/ICp4ID4gdiA6IGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29u
c3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPGNvbnN0IFQm
PiYgeCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2IDwgKnggOiBmYWxzZTsKLX0KLQotdGVtcGxh
dGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0oY29uc3QgT3B0aW9uYWw8Y29u
c3QgVCY+JiB4LCBjb25zdCBUJiB2KQotewotICByZXR1cm4gYm9vbCh4KSA/ICp4ID49IHYgOiBm
YWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0o
Y29uc3QgVCYgdiwgY29uc3QgT3B0aW9uYWw8Y29uc3QgVCY+JiB4KQotewotICByZXR1cm4gYm9v
bCh4KSA/IHYgPD0gKnggOiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhw
ciBib29sIG9wZXJhdG9yPD0oY29uc3QgT3B0aW9uYWw8Y29uc3QgVCY+JiB4LCBjb25zdCBUJiB2
KQotewotICByZXR1cm4gYm9vbCh4KSA/ICp4IDw9IHYgOiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8
Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCBUJiB2LCBjb25zdCBPcHRp
b25hbDxjb25zdCBUJj4mIHgpCi17Ci0gIHJldHVybiBib29sKHgpID8gdiA+PSAqeCA6IHRydWU7
Ci19Ci0KLQotLy8gMjAuNS4xMiwgU3BlY2lhbGl6ZWQgYWxnb3JpdGhtcwotdGVtcGxhdGUgPGNs
YXNzIFQ+Ci12b2lkIHN3YXAoT3B0aW9uYWw8VD4mIHgsIE9wdGlvbmFsPFQ+JiB5KSBfX05PRVhD
RVBUXyhfX05PRVhDRVBUXyh4LnN3YXAoeSkpKQotewotICB4LnN3YXAoeSk7Ci19Ci0KLQotdGVt
cGxhdGUgPGNsYXNzIFQ+Ci1jb25zdGV4cHIgT3B0aW9uYWw8dHlwZW5hbWUgc3RkOjpkZWNheTxU
Pjo6dHlwZT4gbWFrZU9wdGlvbmFsKFQmJiB2KQotewotICByZXR1cm4gT3B0aW9uYWw8dHlwZW5h
bWUgc3RkOjpkZWNheTxUPjo6dHlwZT4oZGV0YWlsXzo6Y29uc3RleHByX2ZvcndhcmQ8VD4odikp
OwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgWD4KLWNvbnN0ZXhwciBPcHRpb25hbDxYJj4gbWFrZU9w
dGlvbmFsKHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8WD4gdikKLXsKLSAgcmV0dXJuIE9wdGlvbmFs
PFgmPih2LmdldCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLW5hbWVzcGFjZSBzdGQK
LXsKLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gIHN0cnVjdCBoYXNoPFdURjo6T3B0aW9uYWw8
VD4+Ci0gIHsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGhhc2g8VD46OnJlc3VsdF90eXBlIHJlc3Vs
dF90eXBlOwotICAgIHR5cGVkZWYgV1RGOjpPcHRpb25hbDxUPiBhcmd1bWVudF90eXBlOwotCi0g
ICAgY29uc3RleHByIHJlc3VsdF90eXBlIG9wZXJhdG9yKCkoYXJndW1lbnRfdHlwZSBjb25zdCYg
YXJnKSBjb25zdCB7Ci0gICAgICByZXR1cm4gYXJnID8gc3RkOjpoYXNoPFQ+e30oKmFyZykgOiBy
ZXN1bHRfdHlwZXt9OwotICAgIH0KLSAgfTsKLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAg
c3RydWN0IGhhc2g8V1RGOjpPcHRpb25hbDxUJj4+Ci0gIHsKLSAgICB0eXBlZGVmIHR5cGVuYW1l
IGhhc2g8VD46OnJlc3VsdF90eXBlIHJlc3VsdF90eXBlOwotICAgIHR5cGVkZWYgV1RGOjpPcHRp
b25hbDxUJj4gYXJndW1lbnRfdHlwZTsKLQotICAgIGNvbnN0ZXhwciByZXN1bHRfdHlwZSBvcGVy
YXRvcigpKGFyZ3VtZW50X3R5cGUgY29uc3QmIGFyZykgY29uc3QgewotICAgICAgcmV0dXJuIGFy
ZyA/IHN0ZDo6aGFzaDxUPnt9KCphcmcpIDogcmVzdWx0X3R5cGV7fTsKLSAgICB9Ci0gIH07Ci19
Ci0KLSMgdW5kZWYgVFIyX09QVElPTkFMX1JFUVVJUkVTCi0KLW5hbWVzcGFjZSBXVEYgewotCi0v
LyAtLSBXZWJLaXQgQWRkaXRpb25zIC0tCi10ZW1wbGF0ZSA8Y2xhc3MgT3B0aW9uYWxUeXBlLCBj
bGFzcyBDYWxsYmFjaz4KLUFMV0FZU19JTkxJTkUKLWF1dG8gdmFsdWVPckNvbXB1dGUoT3B0aW9u
YWxUeXBlIE9wdGlvbmFsLCBDYWxsYmFjayBjYWxsYmFjaykgLT4gdHlwZW5hbWUgT3B0aW9uYWxU
eXBlOjp2YWx1ZV90eXBlCi17Ci0gICAgaWYgKE9wdGlvbmFsKQotICAgICAgICByZXR1cm4gKk9w
dGlvbmFsOwotICAgIHJldHVybiBjYWxsYmFjaygpOworICAgIHJldHVybiBvcHRpb25hbCA/ICpv
cHRpb25hbCA6IGNhbGxiYWNrKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpAQCAtMTA0OSwz
ICs1NCw3IEBAIGF1dG8gdmFsdWVPckNvbXB1dGUoT3B0aW9uYWxUeXBlIE9wdGlvbmFsLCBDYWxs
YmFjayBjYWxsYmFjaykgLT4gdHlwZW5hbWUgT3B0aW9uCiB1c2luZyBXVEY6Ok9wdGlvbmFsOwog
dXNpbmcgV1RGOjptYWtlT3B0aW9uYWw7CiB1c2luZyBXVEY6OnZhbHVlT3JDb21wdXRlOworCisv
LyBGSVhNRTogVGhlc2UgbWFjcm9zIGFyZSBhIHdvcmthcm91bmQgdG8gYWxsb3cgdXMgdG8gdXNl
IHN0ZDo6b3B0aW9uYWwgd2l0aG91dCBhIGdsb2JhbCByZXBsYWNlOyB0aGV5IGNhbiBiZSByZW1v
dmVkIGFmdGVyIHNhaWQgZ2xvYmFsIHJlcGxhY2UuCisjZGVmaW5lIGhhc1ZhbHVlIGhhc192YWx1
ZQorI2RlZmluZSB2YWx1ZU9yIHZhbHVlX29yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9T
ZWNvbmRzLmggYi9Tb3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmgKaW5kZXggYzFiZTM5MjczODJlYjZi
ZmU5NTMwNzhmZTViYTIwMTdmMmY5MjliNi4uNTNiY2JjNjU5OWRjNTMwYzg3Zjg1NzZjNmE5ZGFk
Y2IzYTA2MjEzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU2Vjb25kcy5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL1NlY29uZHMuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UK
IAorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVyLmggYi9Tb3VyY2UvV1RGL3d0Zi9wZXJzaXN0
ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaAppbmRleCBjYzc0OGM5M2FjODI4MTJlODY2YWY2N2VjZmQ4
ZmY2M2U5Y2Q0ZTc4Li42MTViZDEyNTdjODk3MjQwNzQzZjNiNTVhMjYyMTNiNjJhMDM5MDg1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXIuaApAQCAtMjUs
MTAgKzI1LDkgQEAKIAogI3ByYWdtYSBvbmNlCiAKLW5hbWVzcGFjZSBXVEYgeworI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CiAKLXRlbXBsYXRlIDxjbGFzcyBUPgotY2xhc3MgT3B0aW9uYWw7Citu
YW1lc3BhY2UgV1RGIHsKIAogbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVlA5VXRpbGl0aWVzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9WUDlVdGlsaXRpZXMuaAppbmRleCBkYTMwOTAwYTRl
YzcyMzgzZTNlYjAzM2Q1YzQ2NjVjMDdlY2Q5NTdhLi5hMTg4YTc0NGQ0MjY2NWVmODQ2YzUyMDY1
MTBlMDA0YjUyNDM5OWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9WUDlVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9WUDlVdGlsaXRpZXMuaApAQCAtMTQ0LDE0ICsxNDQsMTQgQEAgc3RydWN0IFNjcmVlbkRhdGFP
dmVycmlkZXMgewogICAgIHN0YXRpYyBPcHRpb25hbDxTY3JlZW5EYXRhT3ZlcnJpZGVzPiBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7CiAjZGVmaW5lIERFQ09ERShuYW1lLCB0eXBlKSBc
Ci0gICAgT3B0aW9uYWw8dHlwZT4gbmFtZTsgXAotICAgIGRlY29kZXIgPj4gbmFtZTsgXAotICAg
IGlmICghbmFtZSkgXAotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OyBcCi0KLSAgICBERUNP
REUod2lkdGgsIGRvdWJsZSk7Ci0gICAgREVDT0RFKGhlaWdodCwgZG91YmxlKTsKLSAgICBERUNP
REUoc2NhbGUsIGRvdWJsZSk7CisgICAgICAgIE9wdGlvbmFsPHR5cGU+IG5hbWU7IFwKKyAgICAg
ICAgZGVjb2RlciA+PiBuYW1lOyBcCisgICAgICAgIGlmICghbmFtZSkgXAorICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsgXAorCisgICAgICAgIERFQ09ERSh3aWR0aCwgZG91YmxlKTsK
KyAgICAgICAgREVDT0RFKGhlaWdodCwgZG91YmxlKTsKKyAgICAgICAgREVDT0RFKHNjYWxlLCBk
b3VibGUpOwogI3VuZGVmIERFQ09ERQogCiAgICAgcmV0dXJuIHt7IFdURk1vdmUoKndpZHRoKSwg
V1RGTW92ZSgqaGVpZ2h0KSwgV1RGTW92ZSgqc2NhbGUpIH19OwpAQCAtMTYzLDUgKzE2Myw5IEBA
IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU2NyZWVuRGF0YU92ZXJyaWRlcyYgYSwgY29u
c3QgU2NyZWVuRGF0YU92ZXJyaWRlcyYKICAgICByZXR1cm4gYS53aWR0aCA9PSBiLndpZHRoICYm
IGEuaGVpZ2h0ID09IGIuaGVpZ2h0ICYmIGEuc2NhbGUgPT0gYi5zY2FsZTsKIH0KIAoraW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBTY3JlZW5EYXRhT3ZlcnJpZGVzJiBhLCBjb25zdCBTY3Jl
ZW5EYXRhT3ZlcnJpZGVzJiBiKQoreworICAgIHJldHVybiAhKGEgPT0gYik7Cit9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCA0MjJjZTU1ZDgxNTI2OGVhYzY3ZmIy
MDVlZmRiMjI1ZGEwNWE4ZWVmLi5kMjUxODM1ZWJmYjcxZWM1MDU0MTRkZWYxYzQxN2MwZTRiMDBm
Y2FiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC02MDI4LDcgKzYwMjgs
NyBAQCB2b2lkIEludGVybmFsczo6c2V0SGFyZHdhcmVWUDlEZWNvZGVyRGlzYWJsZWRGb3JUZXN0
aW5nKGJvb2wgZGlzYWJsZWQpCiB2b2lkIEludGVybmFsczo6c2V0VlA5U2NyZWVuU2l6ZUFuZFNj
YWxlRm9yVGVzdGluZyhkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQsIGRvdWJsZSBzY2FsZSkK
IHsKICNpZiBFTkFCTEUoVlA5KSAmJiBQTEFURk9STShDT0NPQSkKLSAgICBWUDlUZXN0aW5nT3Zl
cnJpZGVzOjpzaW5nbGV0b24oKS5zZXRWUDlTY3JlZW5TaXplQW5kU2NhbGUobWFrZU9wdGlvbmFs
PFNjcmVlbkRhdGFPdmVycmlkZXM+KHsgd2lkdGgsIGhlaWdodCwgc2NhbGUgfSkpOworICAgIFZQ
OVRlc3RpbmdPdmVycmlkZXM6OnNpbmdsZXRvbigpLnNldFZQOVNjcmVlblNpemVBbmRTY2FsZShT
Y3JlZW5EYXRhT3ZlcnJpZGVzIHsgd2lkdGgsIGhlaWdodCwgc2NhbGUgfSk7CiAjZWxzZQogICAg
IFVOVVNFRF9QQVJBTSh3aWR0aCk7CiAgICAgVU5VU0VEX1BBUkFNKGhlaWdodCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmggYi9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmgKaW5kZXggM2FiOWZjYzVlZDEwMzU1
OWIxYjZlYjNiNGVkMTA2ZjViYmQyNjk2Yi4uNWVmZDMyNmViZmZhMTNiMjMwNTZiY2E0MTVjN2Nh
NjZiMDE1ZDY5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1l
bnRDb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXIu
aApAQCAtNTYsNyArNTYsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHZvaWQ+
IHN0cnVjdCBBcmd1bWVudENvZGVyIHsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBUIHQ7
CiAgICAgICAgICAgICBpZiAoVDo6ZGVjb2RlKGRlY29kZXIsIHQpKQotICAgICAgICAgICAgICAg
IHJldHVybiB0OworICAgICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHQpOwogICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1RvdWNoQmFyTWVudURhdGEuaCBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1RvdWNoQmFyTWVudURhdGEuaAppbmRleCAzMWFjMDkyODNkOGU5YTE2ZjQxZDQ1OGI3OTlj
OTJjZDA0OGEwMGExLi43M2NjMDdhNzUxOTljNDMwOTMwMGVjNWU4NjRiYzhhNDVjNDQ4YmMyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Ub3VjaEJhck1lbnVEYXRhLmgKKysrIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvVG91Y2hCYXJNZW51RGF0YS5oCkBAIC0yNyw5ICsyNyw4IEBA
CiAKICNpZiBIQVZFKFRPVUNIX0JBUikKIAotI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCiAj
aW5jbHVkZSAiVG91Y2hCYXJNZW51SXRlbURhdGEuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBJUEMgewogY2xh
c3MgRGVjb2RlcjsKQEAgLTQ0LDkgKzQzLDggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNz
IFRvdWNoQmFyTWVudURhdGEgewogcHVibGljOgotICAgIGV4cGxpY2l0IFRvdWNoQmFyTWVudURh
dGEoKSA9IGRlZmF1bHQ7CisgICAgVG91Y2hCYXJNZW51RGF0YSgpID0gZGVmYXVsdDsKICAgICBl
eHBsaWNpdCBUb3VjaEJhck1lbnVEYXRhKGNvbnN0IFdlYkNvcmU6OkhUTUxNZW51RWxlbWVudCYp
OwotICAgIGV4cGxpY2l0IFRvdWNoQmFyTWVudURhdGEoY29uc3QgVG91Y2hCYXJNZW51RGF0YSYp
ID0gZGVmYXVsdDsKIAogICAgIHZvaWQgYWRkTWVudUl0ZW0oY29uc3QgVG91Y2hCYXJNZW51SXRl
bURhdGEmKTsKICAgICB2b2lkIHJlbW92ZU1lbnVJdGVtKGNvbnN0IFRvdWNoQmFyTWVudUl0ZW1E
YXRhJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dl
YkF1dG9tYXRpb25TZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRp
b24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCmluZGV4IDA1NGVhZTQ2ZTA3OGUwNjgwNTdhYTM5
MjQ0MjlmZGNhMGIyZTI0MzguLjk4NGU1MDdlNzNjYmYxMDZkNjYxYTIzZWYxNzllOTkxYTUzYTI0
ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0
b21hdGlvblNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRp
b24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCkBAIC0zNjksMTIgKzM2OSwxMiBAQCB2b2lkIFdl
YkF1dG9tYXRpb25TZXNzaW9uOjpzd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0
b3I6OlByb3RvY29sOjpBdQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJP
UihXaW5kb3dOb3RGb3VuZCk7CiAKICAgICBib29sIGZyYW1lTm90Rm91bmQgPSBmYWxzZTsKLSAg
ICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKGZyYW1lSGFuZGxlLCBmcmFtZU5v
dEZvdW5kKTsKKyAgICB3ZWJGcmFtZUlERm9ySGFuZGxlKGZyYW1lSGFuZGxlLCBmcmFtZU5vdEZv
dW5kKTsKICAgICBpZiAoZnJhbWVOb3RGb3VuZCkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BS
RURFRklORURfRVJST1IoRnJhbWVOb3RGb3VuZCk7CiAKLQotICAgIG1fY2xpZW50LT5yZXF1ZXN0
U3dpdGNoVG9QYWdlKCp0aGlzLCAqcGFnZSwgW2ZyYW1lSUQsIHBhZ2UgPSBtYWtlUmVmKCpwYWdl
KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSB7CisgICAgLy8gRklYTUU6IFNob3Vs
ZCB3ZSBhbHNvIHN3aXRjaCB0byB0aGUgZnJhbWUgdGhhdCBmcmFtZUhhbmRsZSBwb2ludHMgdG8/
CisgICAgbV9jbGllbnQtPnJlcXVlc3RTd2l0Y2hUb1BhZ2UoKnRoaXMsICpwYWdlLCBbcGFnZSA9
IG1ha2VSZWYoKnBhZ2UpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSgpIHsKICAgICAg
ICAgcGFnZS0+c2V0Rm9jdXModHJ1ZSk7CiAKICAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNz
KCk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXgg
N2M0MzYxYTNhY2FkMTMzNDAxODI3ODgxM2ZiM2I2MDVjZDZmNmVmMC4uYzExZmFlM2JmOWFjYWI1
NzMxMDAwZTQ0NzllNjAxNTA2NTQxMTZmMyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisr
KyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDIxLTA1LTI0ICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBTd2l0Y2ggZnJvbSBXVEY6Ok9wdGlv
bmFsIHRvIHN0ZDo6b3B0aW9uYWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIxMTY3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5OiBSZW1vdmVk
IGV4Y2VwdGlvbnMgZnJvbSB0aGUgV1RGOjpPcHRpb25hbAorICAgICAgICBzdHlsZSBydWxlIGZv
ciBXZWJSVEMuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2Nw
cC5weTogUmVtb3ZlZCBjaGVja193dGZfb3B0aW9uYWwuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9zdHlsZS9jaGVja2Vycy9jcHBfdW5pdHRlc3QucHk6IFJlbW92ZWQgdGVzdF93dGZfb3B0
aW9uYWwuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dDogUmVtb3ZlZCBP
cHRpb25hbC5jcHAuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL09wdGlvbmFsLmNwcDogUmVtb3ZlZC4KKwogMjAyMS0wNS0yNCAgQ29tbWl0IFF1ZXVl
ICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0
aW5nIHIyNzc5NDAuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2No
ZWNrZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKaW5kZXgg
NzEwZjk4ODc1OWNiYTI5NmM0MDRlZmRjNjQzMjEzOWIyOGY5ZTQxMS4uMzA5NGEyNWM2MDczNTBh
YTBiZGFlN2I3OWJlYjc2YThiYmRhYzhkNCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9zdHlsZS9jaGVja2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUv
Y2hlY2tlci5weQpAQCAtMjcyLDEyICsyNzIsNiBAQCBfUEFUSF9SVUxFU19TUEVDSUZJRVIgPSBb
CiAgICAgICAiLXdoaXRlc3BhY2UvZGVjbGFyYXRpb24iLAogICAgICAgIi13aGl0ZXNwYWNlL2lu
ZGVudCJdKSwKIAotICAgIChbICAjIEZpbGVzIGZvbGxvd2luZyB1c2luZyBXZWJSVEMgb3B0aW9u
bmFsIHR5cGUKLSAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZv
cm0nLCAnbWVkaWFzdHJlYW0nLCAnbGlid2VicnRjJywgJ0dTdHJlYW1lclZpZGVvRGVjb2RlckZh
Y3RvcnkuY3BwJyksCi0gICAgIF0sCi0gICAgIFsiLXJ1bnRpbWUvd3RmX29wdGlvbmFsIiwKLSAg
ICAgXSksCi0KICAgICAoWwogICAgICAgIyBUaGVyZSBpcyBubyB3YXkgdG8gYXZvaWQgdGhlIHN5
bWJvbHMgX19qaXRfZGVidWdfcmVnaXN0ZXJfY29kZQogICAgICAgIyBhbmQgX19qaXRfZGVidWdf
ZGVzY3JpcHRvciB3aGVuIGludGVncmF0aW5nIHdpdGggZ2RiLgpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHAucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5weQppbmRleCA4YjA3Yjg3ZmNiZjFjYzFlOWJkMzcx
MThiODA2ZjA1ZTM5N2M1NzM1Li4zZjU3ZGY4YThkYzhiNDMzNzU2ZmFmNWZhNzU0YWEwNDBiMDY4
YWQ5IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2Nw
cC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5weQpA
QCAtMjcwNSwyNiArMjcwNSw2IEBAIGRlZiBjaGVja193dGZfbW92ZShjbGVhbl9saW5lcywgbGlu
ZV9udW1iZXIsIGZpbGVfc3RhdGUsIGVycm9yKToKICAgICBlcnJvcihsaW5lX251bWJlciwgJ3J1
bnRpbWUvd3RmX21vdmUnLCA0LCAiVXNlICdXVEZNb3ZlKCknIGluc3RlYWQgb2YgJ3N0ZDo6bW92
ZSgpJy4iKQogCiAKLWRlZiBjaGVja193dGZfb3B0aW9uYWwoY2xlYW5fbGluZXMsIGxpbmVfbnVt
YmVyLCBmaWxlX3N0YXRlLCBlcnJvcik6Ci0gICAgIiIiTG9va3MgZm9yIHVzZSBvZiAnc3RkOjpv
cHRpb25hbDw+JyB3aGljaCBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCAnV1RGOjpPcHRpb25hbDw+
Jy4KLQotICAgIEFyZ3M6Ci0gICAgICBjbGVhbl9saW5lczogQSBDbGVhbnNlZExpbmVzIGluc3Rh
bmNlIGNvbnRhaW5pbmcgdGhlIGZpbGUuCi0gICAgICBsaW5lX251bWJlcjogVGhlIG51bWJlciBv
ZiB0aGUgbGluZSB0byBjaGVjay4KLSAgICAgIGZpbGVfc3RhdGU6IEEgX0ZpbGVTdGF0ZSBpbnN0
YW5jZSB3aGljaCBtYWludGFpbnMgaW5mb3JtYXRpb24gYWJvdXQKLSAgICAgICAgICAgICAgICAg
IHRoZSBzdGF0ZSBvZiB0aGluZ3MgaW4gdGhlIGZpbGUuCi0gICAgICBlcnJvcjogVGhlIGZ1bmN0
aW9uIHRvIGNhbGwgd2l0aCBhbnkgZXJyb3JzIGZvdW5kLgotICAgICIiIgotCi0gICAgbGluZSA9
IGNsZWFuX2xpbmVzLmVsaWRlZFtsaW5lX251bWJlcl0gICMgR2V0IHJpZCBvZiBjb21tZW50cyBh
bmQgc3RyaW5ncy4KLQotICAgIHVzaW5nX3N0ZF9vcHRpb25hbCA9IHNlYXJjaChyJ1xib3B0aW9u
YWxccypcPCcsIGxpbmUpCi0gICAgaWYgbm90IHVzaW5nX3N0ZF9vcHRpb25hbDoKLSAgICAgICAg
cmV0dXJuCi0KLSAgICBlcnJvcihsaW5lX251bWJlciwgJ3J1bnRpbWUvd3RmX29wdGlvbmFsJywg
NCwgIlVzZSAnV1RGOjpPcHRpb25hbDw+JyBpbnN0ZWFkIG9mICdzdGQ6Om9wdGlvbmFsPD4nLiIp
Ci0KLQogZGVmIGNoZWNrX2NhbGxvbm1haW50aHJlYWQoZmlsZW5hbWUsIGNsZWFuX2xpbmVzLCBs
aW5lX251bWJlciwgZmlsZV9zdGF0ZSwgZXJyb3IpOgogICAgICIiIkxvb2tzIGZvciB1c2Ugb2Yg
J2NhbGxPbk1haW5UaHJlYWQoKScgd2hpY2ggc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggJ2NhbGxP
bk1haW5SdW5Mb29wKCknLgogCkBAIC0zNDI2LDcgKzM0MDYsNiBAQCBkZWYgY2hlY2tfc3R5bGUo
Y2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBmaWxlX2V4dGVuc2lvbiwgY2xhc3Nfc3RhdGUsIGZp
bGVfc3RhdAogICAgIGNoZWNrX21heF9taW5fbWFjcm9zKGNsZWFuX2xpbmVzLCBsaW5lX251bWJl
ciwgZmlsZV9zdGF0ZSwgZXJyb3IpCiAgICAgY2hlY2tfd3RmX2NoZWNrZWRfc2l6ZShjbGVhbl9s
aW5lcywgbGluZV9udW1iZXIsIGZpbGVfc3RhdGUsIGVycm9yKQogICAgIGNoZWNrX3d0Zl9tb3Zl
KGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgZmlsZV9zdGF0ZSwgZXJyb3IpCi0gICAgY2hlY2tf
d3RmX29wdGlvbmFsKGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgZmlsZV9zdGF0ZSwgZXJyb3Ip
CiAgICAgY2hlY2tfd3RmX21ha2VfdW5pcXVlKGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgZmls
ZV9zdGF0ZSwgZXJyb3IpCiAgICAgY2hlY2tfd3RmX25ldmVyX2Rlc3Ryb3llZChjbGVhbl9saW5l
cywgbGluZV9udW1iZXIsIGZpbGVfc3RhdGUsIGVycm9yKQogICAgIGNoZWNrX2xvY2tfZ3VhcmQo
Y2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBmaWxlX3N0YXRlLCBlcnJvcikKQEAgLTQ2NTYsNyAr
NDYzNSw2IEBAIGNsYXNzIENwcENoZWNrZXIob2JqZWN0KToKICAgICAgICAgJ3J1bnRpbWUvdW5z
aWduZWQnLAogICAgICAgICAncnVudGltZS92aXJ0dWFsJywKICAgICAgICAgJ3J1bnRpbWUvd3Rm
X2NoZWNrZWRfc2l6ZScsCi0gICAgICAgICdydW50aW1lL3d0Zl9vcHRpb25hbCcsCiAgICAgICAg
ICdydW50aW1lL3d0Zl9tYWtlX3VuaXF1ZScsCiAgICAgICAgICdydW50aW1lL3d0Zl9tb3ZlJywK
ICAgICAgICAgJ3J1bnRpbWUvd3RmX25ldmVyX2Rlc3Ryb3llZCcsCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0dGVzdC5weSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwX3VuaXR0ZXN0LnB5CmluZGV4IGI3
MjBjZmQxYzgxNTMwZTJhZDRmYTZkYmIyMjBmOWY4ODQ1NTc1YmQuLjA0MjM1Y2Q4ZWQ5YzEwMGQ4
M2ZiNzRiMDljOWRhZGEzODNlZTcwZDcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvc3R5bGUvY2hlY2tlcnMvY3BwX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwX3VuaXR0ZXN0LnB5CkBAIC01NjU1LDI5ICs1NjU1LDYg
QEAgY2xhc3MgV2ViS2l0U3R5bGVUZXN0KENwcFN0eWxlVGVzdEJhc2UpOgogICAgICAgICAgICAg
IiAgW3J1bnRpbWUvd3RmX25ldmVyX2Rlc3Ryb3llZF0gWzRdIiwKICAgICAgICAgICAgICdmb28u
bW0nKQogCi0gICAgZGVmIHRlc3Rfd3RmX29wdGlvbmFsKHNlbGYpOgotICAgICAgICBzZWxmLmFz
c2VydF9saW50KAotICAgICAgICAgICAgICdPcHRpb25hbDxpbnQ+IGE7JywKLSAgICAgICAgICAg
ICAnJywKLSAgICAgICAgICAgICAnZm9vLmNwcCcpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRfbGlu
dCgKLSAgICAgICAgICAgICAnV1RGOjpPcHRpb25hbDxpbnQ+IGE7JywKLSAgICAgICAgICAgICAn
JywKLSAgICAgICAgICAgICAnZm9vLmNwcCcpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgK
LSAgICAgICAgICAgICdzdGQ6Om9wdGlvbmFsPGludD4gYTsnLAotICAgICAgICAgICAgIlVzZSAn
V1RGOjpPcHRpb25hbDw+JyBpbnN0ZWFkIG9mICdzdGQ6Om9wdGlvbmFsPD4nLiIKLSAgICAgICAg
ICAgICIgIFtydW50aW1lL3d0Zl9vcHRpb25hbF0gWzRdIiwKLSAgICAgICAgICAgICdmb28uY3Bw
JykKLQotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgJ29wdGlvbmFsPGlu
dD4gYTsnLAotICAgICAgICAgICAgIlVzZSAnV1RGOjpPcHRpb25hbDw+JyBpbnN0ZWFkIG9mICdz
dGQ6Om9wdGlvbmFsPD4nLiIKLSAgICAgICAgICAgICIgIFtydW50aW1lL3d0Zl9vcHRpb25hbF0g
WzRdIiwKLSAgICAgICAgICAgICdmb28uY3BwJykKLQogICAgIGRlZiB0ZXN0X2xvY2tfZ3VhcmQo
c2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCiAgICAgICAgICAgICAnTG9ja2VyIGxv
Y2tlcihsb2NrKTsnLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3Rz
LnR4dCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQKaW5kZXggZGI0OGI5NGIy
MDdmMWMwZmJlZDA5ODgzMjBmNzBiNjlmZDI0M2UwMi4uYTAzMjk0YjViMDE1ZTYxZjEwY2RlNWFi
NDllZTRjYzI4ZjgyY2ZiNSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxp
c3RzLnR4dAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CkBAIC02Niw3
ICs2Niw2IEBAIHNldChUZXN0V1RGX1NPVVJDRVMKICAgICBUZXN0cy9XVEYvTmFrZWRQdHIuY3Bw
CiAgICAgVGVzdHMvV1RGL05ldmVyRGVzdHJveWVkLmNwcAogICAgIFRlc3RzL1dURi9PcHRpb25T
ZXQuY3BwCi0gICAgVGVzdHMvV1RGL09wdGlvbmFsLmNwcAogICAgIFRlc3RzL1dURi9QYWNrZWQu
Y3BwCiAgICAgVGVzdHMvV1RGL1BhY2tlZFJlZi5jcHAKICAgICBUZXN0cy9XVEYvUGFja2VkUmVm
UHRyLmNwcApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRB
UEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjODdjMGYxODYwNzkyY2NiNmE4ZGI0
MDcwYjMyMDEyYTI1Yjk2ZTNiLi44OWNhYTg3ODc4YWZjNmM1ZDk3M2RlOThiMzhhOTJiNTA0NzM2
NzkwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRB
UEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjEyLDcgKzYxMiw2IEBACiAJCTdDODNE
RUYxMUQwQTU5MEMwMEZFQkNGMyAvKiBNZWRpYVRpbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q1NDk3QjMxNTg1N0YwQzAwQjVCQzMwIC8qIE1l
ZGlhVGltZS5jcHAgKi87IH07CiAJCTdDODNERUY2MUQwQTU5MEMwMEZFQkNGMyAvKiBNZXRhQWxs
b2NhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQzZDNENFMTQxMDM0QUQwMDVCN0YwQyAvKiBNZXRhQWxsb2NhdG9yLmNwcCAqLzsgfTsKIAkJ
N0M4M0RFRkUxRDBBNTkwQzAwRkVCQ0YzIC8qIE5ha2VkUHRyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQjZGNzRFMUIyQkE0NEUwMDlFNDkyMiAv
KiBOYWtlZFB0ci5jcHAgKi87IH07Ci0JCTdDODNERjAxMUQwQTU5MEMwMEZFQkNGMyAvKiBPcHRp
b25hbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QUZERTY1NDE5NTNCMkMwMDBDNDhGRkEgLyogT3B0aW9uYWwuY3BwICovOyB9OwogCQk3QzgzREYw
MjFEMEE1OTBDMDBGRUJDRjMgLyogT1NPYmplY3RQdHIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NCQkEwNzYxOUJCOEE5MTAwQkJGMDI1IC8qIE9T
T2JqZWN0UHRyLmNwcCAqLzsgfTsKIAkJN0M4M0RGMDUxRDBBNTkwQzAwRkVCQ0YzIC8qIFJ1bkxv
b3AuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRD
OUFCQzcxQjNEQjE3MTAwNDBBOTg3IC8qIFJ1bkxvb3AuY3BwICovOyB9OwogCQk3QzgzREYxMjFE
MEE1OTBDMDBGRUJDRjMgLyogU2NvcGVkTGFtYmRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDNjlBQTYyMUNGNzdDNjUwMEM2MjcyRiAvKiBTY29w
ZWRMYW1iZGEuY3BwICovOyBzZXR0aW5ncyA9IHtDT01QSUxFUl9GTEFHUyA9ICItZm5vLWVsaWRl
LWNvbnN0cnVjdG9ycyI7IH07IH07CkBAIC0xODU2LDcgKzE4NTUsNiBAQAogCQkxQUVERTIyNDEz
RTVFN0EwMDBFNjJGRTggLyogSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyTWFjLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVy
TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUVGOTk0ODE3QTA5RjUzMDA5
OThFRjAgLyogR2V0UElEQWZ0ZXJBYm9ydGVkUHJvY2Vzc0xhdW5jaC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHZXRQSURBZnRlckFib3J0ZWRQcm9jZXNzTGF1bmNo
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFGN0IyMUQxRDZDRDEyRTAwOEMx
MjZDIC8qIEVudW1UcmFpdHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRW51bVRyYWl0cy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBRkRFNjU0MTk1M0IyQzAwMEM0OEZGQSAv
KiBPcHRpb25hbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRp
b25hbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDMjRERUVDMjYzMDAxREUw
MDQ1MEQwNyAvKiBUZXh0U3R5bGVGb250U2l6ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRl
eHRTdHlsZUZvbnRTaXplLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzJCODE3
RTFDODkxRTQyMDBBNTUyOUYgLyogQ2FuY2VsRm9udFN1YnJlc291cmNlLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ2FuY2VsRm9udFN1YnJlc291cmNlLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzJCODE4MTFDODkxRUZBMDBBNTUyOUYgLyog
Q2FuY2VsRm9udFN1YnJlc291cmNlUGx1Z0luLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gQ2FuY2VsRm9udFN1YnJlc291cmNlUGx1Z0luLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNDQ1MSw3ICs0NDQ5LDYgQEAKIAkJCQlGRUI2Rjc0RTFCMkJB
NDRFMDA5RTQ5MjIgLyogTmFrZWRQdHIuY3BwICovLAogCQkJCUE1N0Q1NEYyMUYzMzhDMzYwMEE5
N0FBNyAvKiBOZXZlckRlc3Ryb3llZC5jcHAgKi8sCiAJCQkJQ0Q0OEE4NzIyNEM4QTY2RjAwRjU4
MDBDIC8qIE9ic2VydmVyLmNwcCAqLywKLQkJCQkxQUZERTY1NDE5NTNCMkMwMDBDNDhGRkEgLyog
T3B0aW9uYWwuY3BwICovLAogCQkJCUNFNTBEOEM4MUM4NjY1Q0UwMDcyRUE1QSAvKiBPcHRpb25T
ZXQuY3BwICovLAogCQkJCUUzMkI1NDkxMjI4MTBBQzAwMDhBRDcwMiAvKiBQYWNrZWQuY3BwICov
LAogCQkJCUUzOEQ2NUM4MjNBNDVGQTkwMDYzRDY5QSAvKiBQYWNrZWRSZWYuY3BwICovLApAQCAt
NTIwNiw3ICs1MjAzLDYgQEAKIAkJCQk3QzgzREVGRTFEMEE1OTBDMDBGRUJDRjMgLyogTmFrZWRQ
dHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3RDU0RjMxRjMzOEMzNjAwQTk3QUE3IC8qIE5l
dmVyRGVzdHJveWVkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNENDhBODczMjRDOEE2NkYwMEY1
ODAwQyAvKiBPYnNlcnZlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3QzgzREYwMTFEMEE1OTBD
MDBGRUJDRjMgLyogT3B0aW9uYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE3N0JBQTMxRDlB
RkZGQzAwNUZDNTY4IC8qIE9wdGlvblNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYw
MjFEMEE1OTBDMDBGRUJDRjMgLyogT1NPYmplY3RQdHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RTMyQjU0OTIyMjgxMEFDNDAwOEFENzAyIC8qIFBhY2tlZC5jcHAgaW4gU291cmNlcyAqLywKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL09wdGlvbmFsLmNwcCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL09wdGlvbmFsLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMjcyNjAwNGY4NGU2MDNkMDFiMWFhMGQ2ZjZlZDgwYWU3NjRlZjMwMS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9PcHRpb25hbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMzgg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgotCi1uYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7Ci0KLVRFU1QoV1RGX09w
dGlvbmFsLCBEaXNlbmdhZ2VkKQotewotICAgIHsKLSAgICAgICAgT3B0aW9uYWw8aW50PiBvcHRp
b25hbDsKLQotICAgICAgICBFWFBFQ1RfRkFMU0Uoc3RhdGljX2Nhc3Q8Ym9vbD4ob3B0aW9uYWwp
KTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIE9wdGlvbmFsPGludD4gb3B0aW9uYWwgeyBXVEY6
Om51bGxvcHQgfTsKLQotICAgICAgICBFWFBFQ1RfRkFMU0Uoc3RhdGljX2Nhc3Q8Ym9vbD4ob3B0
aW9uYWwpKTsKLSAgICB9Ci19Ci0KLVRFU1QoV1RGX09wdGlvbmFsLCBFbmdhZ2VkKQotewotICAg
IE9wdGlvbmFsPGludD4gb3B0aW9uYWwgeyAxMCB9OwotCi0gICAgRVhQRUNUX1RSVUUoc3RhdGlj
X2Nhc3Q8Ym9vbD4ob3B0aW9uYWwpKTsKLSAgICBFWFBFQ1RfRVEoMTAsIG9wdGlvbmFsLnZhbHVl
KCkpOwotfQotCi1URVNUKFdURl9PcHRpb25hbCwgRGVzdHJ1Y3RvcikKLXsKLSAgICBzdGF0aWMg
Ym9vbCBkaWRDYWxsRGVzdHJ1Y3RvciA9IGZhbHNlOwotICAgIHN0cnVjdCBBIHsKLSAgICAgICAg
fkEoKQotICAgICAgICB7Ci0gICAgICAgICAgICBFWFBFQ1RfRkFMU0UoZGlkQ2FsbERlc3RydWN0
b3IpOwotICAgICAgICAgICAgZGlkQ2FsbERlc3RydWN0b3IgPSB0cnVlOwotICAgICAgICB9Ci0g
ICAgfTsKLQotICAgIHsKLSAgICAgICAgT3B0aW9uYWw8QT4gb3B0aW9uYWwgeyBzdGQ6OmluX3Bs
YWNlIH07Ci0KLSAgICAgICAgRVhQRUNUX1RSVUUoc3RhdGljX2Nhc3Q8Ym9vbD4ob3B0aW9uYWwp
KTsKLSAgICB9Ci0KLSAgICBFWFBFQ1RfVFJVRShkaWRDYWxsRGVzdHJ1Y3Rvcik7Ci19Ci0KLVRF
U1QoV1RGX09wdGlvbmFsLCBDYWxsYmFjaykKLXsKLSAgICBib29sIGNhbGxlZCA9IGZhbHNlOwot
ICAgIE9wdGlvbmFsPGludD4gYTsKLSAgICBpbnQgcmVzdWx0ID0gdmFsdWVPckNvbXB1dGUoYSwg
WyZdIHsKLSAgICAgICAgY2FsbGVkID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIDMwMDsKLSAgICB9
KTsKLSAgICBFWFBFQ1RfVFJVRShjYWxsZWQpOwotICAgIEVYUEVDVF9FUShyZXN1bHQsIDMwMCk7
Ci0KLSAgICBhID0gMjUwOwotICAgIGNhbGxlZCA9IGZhbHNlOwotICAgIHJlc3VsdCA9IHZhbHVl
T3JDb21wdXRlKGEsIFsmXSB7Ci0gICAgICAgIGNhbGxlZCA9IHRydWU7Ci0gICAgICAgIHJldHVy
biAzMDA7Ci0gICAgfSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGNhbGxlZCk7Ci0gICAgRVhQRUNUX0VR
KHJlc3VsdCwgMjUwKTsKLX0KLQotVEVTVChXVEZfT3B0aW9uYWwsIEVxdWFsaXR5KQotewotICAg
IE9wdGlvbmFsPGludD4gdW5lbmdhZ2VkMTsKLSAgICBPcHRpb25hbDxpbnQ+IHVuZW5nYWdlZDI7
Ci0KLSAgICBPcHRpb25hbDxpbnQ+IGVuZ2FnZWQxIHsgMSB9OwotICAgIE9wdGlvbmFsPGludD4g
ZW5nYWdlZDIgeyAyIH07Ci0gICAgT3B0aW9uYWw8aW50PiBlbmdhZ2VkeDIgeyAyIH07Ci0KLSAg
ICBFWFBFQ1RfVFJVRSh1bmVuZ2FnZWQxID09IHVuZW5nYWdlZDIpOwotICAgIEVYUEVDVF9GQUxT
RShlbmdhZ2VkMSA9PSBlbmdhZ2VkMik7Ci0gICAgRVhQRUNUX0ZBTFNFKGVuZ2FnZWQxID09IHVu
ZW5nYWdlZDEpOwotICAgIEVYUEVDVF9UUlVFKGVuZ2FnZWQyID09IGVuZ2FnZWR4Mik7Ci0KLSAg
ICBFWFBFQ1RfVFJVRSh1bmVuZ2FnZWQxID09IFdURjo6bnVsbG9wdCk7Ci0gICAgRVhQRUNUX0ZB
TFNFKGVuZ2FnZWQxID09IFdURjo6bnVsbG9wdCk7Ci0gICAgRVhQRUNUX1RSVUUoV1RGOjpudWxs
b3B0ID09IHVuZW5nYWdlZDEpOwotICAgIEVYUEVDVF9GQUxTRShXVEY6Om51bGxvcHQgPT0gZW5n
YWdlZDEpOwotCi0gICAgRVhQRUNUX1RSVUUoZW5nYWdlZDEgPT0gMSk7Ci0gICAgRVhQRUNUX1RS
VUUoMSA9PSBlbmdhZ2VkMSk7Ci0gICAgRVhQRUNUX0ZBTFNFKHVuZW5nYWdlZDEgPT0gMSk7Ci0g
ICAgRVhQRUNUX0ZBTFNFKDEgPT0gdW5lbmdhZ2VkMSk7Ci19Ci0KLVRFU1QoV1RGX09wdGlvbmFs
LCBJbmVxdWFsaXR5KQotewotICAgIE9wdGlvbmFsPGludD4gdW5lbmdhZ2VkMTsKLSAgICBPcHRp
b25hbDxpbnQ+IHVuZW5nYWdlZDI7Ci0KLSAgICBPcHRpb25hbDxpbnQ+IGVuZ2FnZWQxIHsgMSB9
OwotICAgIE9wdGlvbmFsPGludD4gZW5nYWdlZDIgeyAyIH07Ci0gICAgT3B0aW9uYWw8aW50PiBl
bmdhZ2VkeDIgeyAyIH07Ci0KLSAgICBFWFBFQ1RfRkFMU0UodW5lbmdhZ2VkMSAhPSB1bmVuZ2Fn
ZWQyKTsKLSAgICBFWFBFQ1RfVFJVRShlbmdhZ2VkMSAhPSBlbmdhZ2VkMik7Ci0gICAgRVhQRUNU
X1RSVUUoZW5nYWdlZDEgIT0gdW5lbmdhZ2VkMSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGVuZ2FnZWQy
ICE9IGVuZ2FnZWR4Mik7Ci0KLSAgICBFWFBFQ1RfRkFMU0UodW5lbmdhZ2VkMSAhPSBXVEY6Om51
bGxvcHQpOwotICAgIEVYUEVDVF9UUlVFKGVuZ2FnZWQxICE9IFdURjo6bnVsbG9wdCk7Ci0gICAg
RVhQRUNUX0ZBTFNFKFdURjo6bnVsbG9wdCAhPSB1bmVuZ2FnZWQxKTsKLSAgICBFWFBFQ1RfVFJV
RShXVEY6Om51bGxvcHQgIT0gZW5nYWdlZDEpOwotCi0gICAgRVhQRUNUX0ZBTFNFKGVuZ2FnZWQx
ICE9IDEpOwotICAgIEVYUEVDVF9UUlVFKGVuZ2FnZWQxICE9IDIpOwotICAgIEVYUEVDVF9GQUxT
RSgxICE9IGVuZ2FnZWQxKTsKLSAgICBFWFBFQ1RfVFJVRSgyICE9IGVuZ2FnZWQxKTsKLQotICAg
IEVYUEVDVF9UUlVFKHVuZW5nYWdlZDEgIT0gMSk7Ci0gICAgRVhQRUNUX1RSVUUoMSAhPSB1bmVu
Z2FnZWQxKTsKLX0KLQotVEVTVChXVEZfT3B0aW9uYWwsIE1vdmVTZW1hbnRpY3NDb25zdHJ1Y3Rv
cikKLXsKLSAgICB7Ci0gICAgICAgIE9wdGlvbmFsPGludD4gdW5lbmdhZ2VkMSB7IH07Ci0gICAg
ICAgIEVYUEVDVF9GQUxTRSghIXVuZW5nYWdlZDEpOwotCi0gICAgICAgIE9wdGlvbmFsPGludD4g
dW5lbmdhZ2VkMihzdGQ6Om1vdmUodW5lbmdhZ2VkMSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0Uo
ISF1bmVuZ2FnZWQxKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKCEhdW5lbmdhZ2VkMik7Ci0gICAg
fQotCi0gICAgewotICAgICAgICBPcHRpb25hbDxpbnQ+IGVuZ2FnZWRUb1VuZW5nYWdlZCB7IDIg
fTsKLSAgICAgICAgRVhQRUNUX1RSVUUoISFlbmdhZ2VkVG9VbmVuZ2FnZWQpOwotICAgICAgICBF
WFBFQ1RfRVEoMiwgZW5nYWdlZFRvVW5lbmdhZ2VkLnZhbHVlKCkpOwotCi0gICAgICAgIE9wdGlv
bmFsPGludD4gZW5nYWdlZChzdGQ6Om1vdmUoZW5nYWdlZFRvVW5lbmdhZ2VkKSk7Ci0gICAgICAg
IEVYUEVDVF9GQUxTRSghIWVuZ2FnZWRUb1VuZW5nYWdlZCk7Ci0gICAgICAgIEVYUEVDVF9UUlVF
KCEhZW5nYWdlZCk7Ci0gICAgICAgIEVYUEVDVF9FUSgyLCBlbmdhZ2VkLnZhbHVlKCkpOwotICAg
IH0KLX0KLQotVEVTVChXVEZfT3B0aW9uYWwsIE1vdmVTZW1hbnRpY3NBc3NpZ25tZW50KQotewot
ICAgIHsKLSAgICAgICAgT3B0aW9uYWw8aW50PiB1bmVuZ2FnZWQxIHsgfTsKLSAgICAgICAgRVhQ
RUNUX0ZBTFNFKCEhdW5lbmdhZ2VkMSk7Ci0KLSAgICAgICAgT3B0aW9uYWw8aW50PiB1bmVuZ2Fn
ZWQyOwotICAgICAgICBFWFBFQ1RfRkFMU0UoISF1bmVuZ2FnZWQyKTsKLQotICAgICAgICB1bmVu
Z2FnZWQyID0gc3RkOjptb3ZlKHVuZW5nYWdlZDEpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoISF1
bmVuZ2FnZWQxKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKCEhdW5lbmdhZ2VkMik7Ci0gICAgfQot
Ci0gICAgewotICAgICAgICBPcHRpb25hbDxpbnQ+IGVuZ2FnZWRUb1VuZW5nYWdlZCB7IDMgfTsK
LSAgICAgICAgRVhQRUNUX1RSVUUoISFlbmdhZ2VkVG9VbmVuZ2FnZWQpOwotICAgICAgICBFWFBF
Q1RfRVEoMywgZW5nYWdlZFRvVW5lbmdhZ2VkLnZhbHVlKCkpOwotCi0gICAgICAgIGVuZ2FnZWRU
b1VuZW5nYWdlZCA9IHN0ZDo6bW92ZShXVEY6Om51bGxvcHQpOwotICAgICAgICBFWFBFQ1RfRkFM
U0UoISFlbmdhZ2VkVG9VbmVuZ2FnZWQpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgT3B0aW9u
YWw8aW50PiBlbmdhZ2VkVG9VbmVuZ2FnZWQgeyA0IH07Ci0gICAgICAgIEVYUEVDVF9UUlVFKCEh
ZW5nYWdlZFRvVW5lbmdhZ2VkKTsKLSAgICAgICAgRVhQRUNUX0VRKDQsIGVuZ2FnZWRUb1VuZW5n
YWdlZC52YWx1ZSgpKTsKLQotICAgICAgICBPcHRpb25hbDxpbnQ+IHVuZW5nYWdlZFRvRW5nYWdl
ZDsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKCEhdW5lbmdhZ2VkVG9FbmdhZ2VkKTsKLQotICAgICAg
ICB1bmVuZ2FnZWRUb0VuZ2FnZWQgPSBzdGQ6Om1vdmUoZW5nYWdlZFRvVW5lbmdhZ2VkKTsKLSAg
ICAgICAgRVhQRUNUX0ZBTFNFKCEhZW5nYWdlZFRvVW5lbmdhZ2VkKTsKLSAgICAgICAgRVhQRUNU
X1RSVUUoISF1bmVuZ2FnZWRUb0VuZ2FnZWQpOwotICAgICAgICBFWFBFQ1RfRVEoNCwgdW5lbmdh
Z2VkVG9FbmdhZ2VkLnZhbHVlKCkpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgT3B0aW9uYWw8
aW50PiBlbmdhZ2VkVG9VbmVuZ2FnZWQgeyA1IH07Ci0gICAgICAgIEVYUEVDVF9UUlVFKCEhZW5n
YWdlZFRvVW5lbmdhZ2VkKTsKLSAgICAgICAgRVhQRUNUX0VRKDUsIGVuZ2FnZWRUb1VuZW5nYWdl
ZC52YWx1ZSgpKTsKLQotICAgICAgICBPcHRpb25hbDxpbnQ+IHVuZW5nYWdlZDsKLSAgICAgICAg
RVhQRUNUX0ZBTFNFKCEhdW5lbmdhZ2VkKTsKLQotICAgICAgICBlbmdhZ2VkVG9VbmVuZ2FnZWQg
PSBzdGQ6Om1vdmUodW5lbmdhZ2VkKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKCEhZW5nYWdlZFRv
VW5lbmdhZ2VkKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKCEhdW5lbmdhZ2VkKTsKLSAgICB9Ci0K
LSAgICB7Ci0gICAgICAgIE9wdGlvbmFsPGludD4gZW5nYWdlZFRvVW5lbmdhZ2VkIHsgNiB9Owot
ICAgICAgICBFWFBFQ1RfVFJVRSghIWVuZ2FnZWRUb1VuZW5nYWdlZCk7Ci0gICAgICAgIEVYUEVD
VF9FUSg2LCBlbmdhZ2VkVG9VbmVuZ2FnZWQudmFsdWUoKSk7Ci0KLSAgICAgICAgT3B0aW9uYWw8
aW50PiBlbmdhZ2VkVG9FbmdhZ2VkIHsgNyB9OwotICAgICAgICBFWFBFQ1RfVFJVRSghIWVuZ2Fn
ZWRUb0VuZ2FnZWQpOwotICAgICAgICBFWFBFQ1RfRVEoNywgZW5nYWdlZFRvRW5nYWdlZC52YWx1
ZSgpKTsKLQotICAgICAgICBlbmdhZ2VkVG9FbmdhZ2VkID0gc3RkOjptb3ZlKGVuZ2FnZWRUb1Vu
ZW5nYWdlZCk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRSghIWVuZ2FnZWRUb1VuZW5nYWdlZCk7Ci0g
ICAgICAgIEVYUEVDVF9UUlVFKCEhZW5nYWdlZFRvRW5nYWdlZCk7Ci0gICAgICAgIEVYUEVDVF9F
USg2LCBlbmdhZ2VkVG9FbmdhZ2VkLnZhbHVlKCkpOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429590</attachid>
            <date>2021-05-24 16:39:35 -0700</date>
            <delta_ts>2021-05-24 18:48:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211674-20210524163934.patch</filename>
            <type>text/plain</type>
            <size>82489</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3OTc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
ZTk0ZTgyYjdlYmU2ODE1MzAwYWJiNTg5MDFlOGRlMDMyMDMyNGIxLi4zODBiY2ZhMDljMDRlYTc2
NGU3OTVjMmJhZTRmNmJjNzZjMjY4MzRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NSBAQAorMjAyMS0wNS0yNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgU3dpdGNoIGZyb20gV1RGOjpPcHRpb25hbCB0byBzdGQ6Om9wdGlvbmFsCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTE2NzQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHJ1bnRpbWUvSW50
bENvbGxhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yOjppbml0aWFsaXplQ29s
bGF0b3IpOiBVc2UgSlNPYmplY3QqIGluc3RlYWQgb2YKKyAgICAgICAgT3B0aW9uYWw8SlNPYmpl
Y3QmPi4KKyAgICAgICAgKiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHA6CisgICAgICAg
IChKU0M6OnRvRGF0ZVRpbWVPcHRpb25zQW55RGF0ZSk6IERpdHRvLgorICAgICAgICAoSlNDOjpJ
bnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVGltZUZvcm1hdCk6IERpdHRvLgorICAg
ICAgICAqIHJ1bnRpbWUvSW50bERpc3BsYXlOYW1lcy5jcHA6CisgICAgICAgIChKU0M6OkludGxE
aXNwbGF5TmFtZXM6OmluaXRpYWxpemVEaXNwbGF5TmFtZXMpOiBEaXR0by4KKyAgICAgICAgKiBy
dW50aW1lL0ludGxMaXN0Rm9ybWF0LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bExpc3RGb3JtYXQ6
OmluaXRpYWxpemVMaXN0Rm9ybWF0KTogRGl0dG8uCisgICAgICAgICogcnVudGltZS9JbnRsTG9j
YWxlLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bExvY2FsZTo6aW5pdGlhbGl6ZUxvY2FsZSk6IERp
dHRvLgorICAgICAgICAqIHJ1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHA6CisgICAgICAgIChK
U0M6OkludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGb3JtYXQpOiBEaXR0by4KKyAg
ICAgICAgKiBydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaDogRGl0dG8uCisgICAgICAgICogcnVu
dGltZS9JbnRsTnVtYmVyRm9ybWF0SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpzZXROdW1iZXJG
b3JtYXREaWdpdE9wdGlvbnMpOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1lL0ludGxPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDOjppbnRsQm9vbGVhbk9wdGlvbik6IERpdHRvLgorICAgICAgICAo
SlNDOjppbnRsU3RyaW5nT3B0aW9uKTogRGl0dG8uCisgICAgICAgIChKU0M6OmludGxOdW1iZXJP
cHRpb24pOiBEaXR0by4KKyAgICAgICAgKEpTQzo6c3VwcG9ydGVkTG9jYWxlcyk6IERpdHRvLgor
ICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5oOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1l
L0ludGxPYmplY3RJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OmludGxPcHRpb24pOiBEaXR0by4K
KyAgICAgICAgKEpTQzo6aW50bEdldE9wdGlvbnNPYmplY3QpOiBEaXR0by4KKyAgICAgICAgKEpT
Qzo6aW50bENvZXJjZU9wdGlvbnNUb09iamVjdCk6IERpdHRvLgorICAgICAgICAqIHJ1bnRpbWUv
SW50bFBsdXJhbFJ1bGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bFBsdXJhbFJ1bGVzOjppbml0
aWFsaXplUGx1cmFsUnVsZXMpOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1lL0ludGxQbHVyYWxS
dWxlcy5oOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQu
Y3BwOgorICAgICAgICAoSlNDOjpJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojppbml0aWFsaXplUmVs
YXRpdmVUaW1lRm9ybWF0KTogRGl0dG8uCisgICAgICAgICogcnVudGltZS9JbnRsU2VnbWVudGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bFNlZ21lbnRlcjo6aW5pdGlhbGl6ZVNlZ21lbnRlcik6
IERpdHRvLgorCiAyMDIxLTA1LTI0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgog
CiAgICAgICAgIEFsbG93IENUSSBzdHVicyB0byBiZSBnZW5lcmF0ZWQgb2ZmIHRoZSBtYWluIHRo
cmVhZApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZwppbmRleCA5MDQ2MTE1MDA5NDRkZWU3ODI1MTk1ZWNmMDBmZDEwY2U2NmQ0MGExLi5iNjVk
NDJiMTdiOWUyNjQxNWI5OGViN2M1ZTk1NjE4YjYxZWYzMDA0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBA
CisyMDIxLTA1LTI0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBT
d2l0Y2ggZnJvbSBXVEY6Ok9wdGlvbmFsIHRvIHN0ZDo6b3B0aW9uYWwKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMTY3NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0ZvcndhcmQuaDogUmVtb3Zl
IE9wdGlvbmFsIGZvcndhcmQgZGVjbGFyYXRpb24uCisgICAgICAgIEFsc28gaW5jbHVkZSBPcHRp
b25hbC5oLCBqdXN0IGZvciBub3cuIE5lZWQgdG8gcmVtb3ZlIHRoaXMgb25jZQorICAgICAgICB3
ZSBkbyB0aGUgZ2xvYmFsIHJlbmFtZS4KKworICAgICAgICAqIHd0Zi9PcHRpb25hbC5oOiBSZXBs
YWNlZCB0aGUgZW50aXJlIFdURjo6T3B0aW9uYWwgaW1wbGVtZW50YXRpb24KKyAgICAgICAgd2l0
aCBhIFdURjo6T3B0aW9uYWwgInVzaW5nIiB0aGF0IG1ha2VzIGl0IGEgc3lub255bSBmb3Igc3Rk
OjpvcHRpb25hbC4KKyAgICAgICAgV1RGOjpudWxsb3B0IGJlaW5nIGEgc3lub255bSBmb3Igc3Rk
OjpudWxsb3B0IGFuZCBXVEY6Om51bGxvcHRfdAorICAgICAgICBiZWluZyBhIHN5bm9ueW0gZm9y
IHN0ZDo6bnVsbG9wdF90LiBBbHNvIGluY2x1ZGVkIGZ1bmN0aW9ucyBzbworICAgICAgICB0aGF0
IFdURjo6bWFrZU9wdGlvbmFsIGNhbGxzIHN0ZDo6bWFrZV9vcHRpb25hbCBhbmQga2VwdCB0aGUK
KyAgICAgICAgV1RGIGV4dGVuc2lvbiBuYW1lZCB2YWx1ZU9yQ29tcHV0ZS4gTmVlZCB0byByZW1v
dmUgdGhlc2Ugb25jZSB3ZQorICAgICAgICBkbyB0aGUgZ2xvYmFsIHJlbmFtZSwgYW5kIGxpa2Vs
eSBqdXN0IGdldCByaWQgb2YgdmFsdWVPckNvbXB1dGUsIGFuZAorICAgICAgICB0aGVuIGRlbGV0
ZSB0aGlzIGVudGlyZSBoZWFkZXIuCisKKyAgICAgICAgKiB3dGYvU2Vjb25kcy5oOiBBZGRlZCBh
biBpbmNsdWRlIG9mIEZhc3RNYWxsb2MuaCwgc2luY2UgaXQncyBubworICAgICAgICBsb25nZXIg
cHVsbGVkIGluIGJlY2F1c2Ugb2YgaW5jbHVkaW5nIE9wdGlvbmFsLmguCisKKyAgICAgICAgKiB3
dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVyLmg6IFVzZSBGb3J3YXJkLmggZm9yIG5vdyBp
bnN0ZWFkIG9mCisgICAgICAgIGZvcndhcmQtZGVjbGFyaW5nIFdURjo6b3B0aW9uYWwuCisKIDIw
MjEtMDUtMjQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92
ZSBTdHJpbmdCdWlsZGVyOjphcHBlbmRMaXRlcmFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGVjODA1MDEzN2Nh
YWJiN2UxYmM3YTZmZGRiMWMyNTgwZDQ4NDNjYy4uZTAxNGU4MTMzZGI3ODliMzhkNTNhMjNlMTE2
ZTA2MTJkZDVhOGZmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDIxLTA1LTI0ICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBTd2l0Y2ggZnJvbSBXVEY6
Ok9wdGlvbmFsIHRvIHN0ZDo6b3B0aW9uYWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxMTY3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVlA5VXRpbGl0aWVzLmg6IFR3
ZWFrZWQgY29kaW5nIHN0eWxlIGEgYml0LgorICAgICAgICBBZGRlZCBtaXNzaW5nIG9wZXJhdG9y
IT0gYmVjYXVzZSBzdGQ6Om9wdGlvbmFsJ3Mgb3BlcmF0b3IhPSByZWxpZXMKKyAgICAgICAgb24g
dGhhdCwgd2hpbGUgV1RGOjpPcHRpb25hbCdzIG9wZXJhdG9yIT0gcmVsaWVkIG9uIG9wZXJhdG9y
PT0uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVy
VmlkZW9FbmNvZGVyLmNwcDoKKyAgICAgICAgKEVuY29kZXJzOjpkZWZpbml0aW9uKTogVXNlIGEg
cG9pbnRlciBpbnN0ZWFkIG9mIE9wdGlvbmFsPCY+LgorCisgICAgICAgICogdGVzdGluZy9JbnRl
cm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRWUDlTY3JlZW5TaXpl
QW5kU2NhbGVGb3JUZXN0aW5nKTogVXNlIGEKKyAgICAgICAgZm9ybSBvZiBjb25zdHJ1Y3Rpb24g
Zm9yIFNjcmVlbkRhdGFPdmVycmlkZXMgdGhhdCB3b3JrcyB3aXRoIGJvdGgKKyAgICAgICAgV1RG
OjpPcHRpb25hbCBhbmQgc3RkOjpvcHRpb25hbC4gU29tZXRoaW5nIGFib3V0IHdheSB0aGUgb2xk
IGNvZGUKKyAgICAgICAgdXNlZCBXVEY6Om1ha2VPcHRpb25hbCB3YXMgbm90IGNvbXBhdGlibGUg
d2l0aCBzdGQ6Om1ha2Vfb3B0aW9uYWwsCisgICAgICAgIGJ1dCBpdCB3YXMgZWFzeSB0byBtYWtl
IGl0IG1vcmUgc3RyYWlnaHRmb3J3YXJkIGFuZCBub3QgZXZlbiBoYXZlCisgICAgICAgIHRvIHVz
ZSBhICJtYWtlIiBmdW5jdGlvbi4KKwogMjAyMS0wNS0yNCAgQWxhbiBCdWp0YXMgIDx6YWxhbkBh
cHBsZS5jb20+CiAKICAgICAgICAgW0xGQ10gQWRkIHN1cHBvcnQgZm9yIGdlb21ldHJ5L3F1aXJr
cyB2aXJ0dWFsIGZ1bmN0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBlYWJlZGIxZjIxNzFkNjFiNTU5MTk2Zjk5
N2JhN2Q2OWZhNWIxZjgyLi40YmI1MTU4ZGFjNDE5MGJlYjAxMmVjZGYwNTM3NjczMDA2YTA4Mjk1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDIxLTA1LTI0ICBEYXJpbiBBZGxlciAgPGRh
cmluQGFwcGxlLmNvbT4KKworICAgICAgICBTd2l0Y2ggZnJvbSBXVEY6Ok9wdGlvbmFsIHRvIHN0
ZDo6b3B0aW9uYWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxMTY3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXIuaDoKKyAgICAgICAgKElQQzo6QXJndW1l
bnRDb2Rlcjo6ZGVjb2RlKTogQWRkIGEgV1RGTW92ZS4gVHVybnMgb3V0IHRoaXMgd2FzIG5vdCBu
ZWVkZWQKKyAgICAgICAgdG8gZ2V0IGNvbXBpbGluZyB3aXRoIHN0ZDo6b3B0aW9uYWwsIGJ1dCBp
dCdzIGEgZ29vZCBpZGVhIGZvciBwZXJmb3JtYW5jZS4KKyAgICAgICAgVGhpcyBpcyBvbmUgb2Yg
dGhvc2UgY2FzZXMgd2hlcmUgaXQgbG9va3MgbGlrZSB0aGUgcmV0dXJuIHZhbHVlIG9wdGltaXph
dGlvbgorICAgICAgICB3b3VsZCB3b3JrLCBidXQgaXQgZG9lc24ndCBiZWNhdXNlIHRoZSByZXR1
cm4gdmFsdWUgZG9lc24ndCBleGFjdGx5IG1hdGNoCisgICAgICAgIHRoZSBsb2NhbCB2YXJpYWJs
ZSdzIHR5cGUuCisKKyAgICAgICAgKiBTaGFyZWQvVG91Y2hCYXJNZW51RGF0YS5oOiBSZW1vdmUg
c29tZSBvdmVyemVhbG91cyB1c2Ugb2YgZXhwbGljaXQgdGhhdAorICAgICAgICB3YXMgcHJldmVu
dGluZyBzb21lIGZpbGVzIGZyb20gY29tcGlsaW5nIHdpdGggdGhlIHN0cmljdGVyIHN0ZDo6b3B0
aW9uYWwKKyAgICAgICAgY29uc3RydWN0b3IgcnVsZXMsIHdoaWxlIGl0IGRpZCBub3QgcHJldmVu
dCBjb21waWxpbmcgd2l0aCBXVEY6Ok9wdGlvbmFsLgorCisgICAgICAgICogVUlQcm9jZXNzL0F1
dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6c3dpdGNoVG9Ccm93c2luZ0NvbnRleHQpOiBSZW1vdmVkIGFuIHVu
dXNlZAorICAgICAgICBsYW1iZGEgY2FwdHVyZSBhbmQgbG9jYWwgdmFyaWFibGUuIE5vdCBjbGVh
ciBob3cgdGhpcyBpcyByZWxhdGVkIHRvCisgICAgICAgIHN0ZDo6b3B0aW9uYWwsIGJ1dCBzaG93
ZWQgdXAgYXMgYSBjb21waWxlciB3YXJuaW5nLgorCiAyMDIxLTA1LTI0ICBDaHJpcyBGbGVpemFj
aCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IFNldHRpbmdzOiBJbmNyZWFz
ZSBjb250cmFzdCBpc24ndCBkZXRlY3RlZCBpbiBicm93c2VyIHVudGlsIGFuIGFkZGl0aW9uYWwg
c2V0dGluZyBpcyBhcHBsaWVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsQ29sbGF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bENvbGxhdG9yLmNwcAppbmRleCBjODJmYTYwZWIwYzI2N2RhZTcwMTgzY2NjYWVjOGU5OWJmOTU0
YTcyLi5iNzc2ZmIyOTNlMDU0ZTI0ZDU0NWIwM2ZmMDNkNjRhMGQwMDM4MjJkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAKQEAgLTE2NCw3ICsx
NjQsNyBAQCB2b2lkIEludGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNvbGxhdG9yKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgbG9jYQogICAgIGF1dG8gcmVxdWVzdGVkTG9jYWxl
cyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0LCBsb2NhbGVzKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCi0gICAgT3B0aW9uYWw8SlNPYmpl
Y3QmPiBvcHRpb25zID0gaW50bENvZXJjZU9wdGlvbnNUb09iamVjdChnbG9iYWxPYmplY3QsIG9w
dGlvbnNWYWx1ZSk7CisgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBpbnRsQ29lcmNlT3B0aW9uc1Rv
T2JqZWN0KGdsb2JhbE9iamVjdCwgb3B0aW9uc1ZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgbV91c2FnZSA9IGludGxPcHRpb248VXNhZ2U+KGds
b2JhbE9iamVjdCwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+dXNhZ2UsIHsgeyAic29ydCJf
cywgVXNhZ2U6OlNvcnQgfSwgeyAic2VhcmNoIl9zLCBVc2FnZTo6U2VhcmNoIH0gfSwgInVzYWdl
IG11c3QgYmUgZWl0aGVyIFwic29ydFwiIG9yIFwic2VhcmNoXCIiX3MsIFVzYWdlOjpTb3J0KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZv
cm1hdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3Jt
YXQuY3BwCmluZGV4IGQ3OGNjMmVhZTIyMjU5NjY3YmU2ZGYwYzMyOGNiODI1NzEwYTg5YjguLjI4
YmJmNmYzZWViMzEyMzZiNzgzZDQ2YTUxOGI5M2Q3MDBhODZjYjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcApAQCAtMTkz
LDcgKzE5Myw3IEBAIFZlY3RvcjxTdHJpbmc+IEludGxEYXRlVGltZUZvcm1hdDo6bG9jYWxlRGF0
YShjb25zdCBTdHJpbmcmIGxvY2FsZSwgUmVsZXZhbnRFeHRlCiAgICAgcmV0dXJuIGtleUxvY2Fs
ZURhdGE7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxKU09iamVjdCY+IHRvRGF0ZVRpbWVPcHRpb25z
QW55RGF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG9yaWdpbmFsT3B0
aW9ucykKK3N0YXRpYyBKU09iamVjdCogdG9EYXRlVGltZU9wdGlvbnNBbnlEYXRlKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgb3JpZ2luYWxPcHRpb25zKQogewogICAgIC8v
IDEyLjEuMSBUb0RhdGVUaW1lT3B0aW9ucyBhYnN0cmFjdCBvcGVyYXRpb24gKEVDTUEtNDAyIDIu
MCkKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkBAIC0zMDcsNyArMzA3LDcgQEAg
c3RhdGljIE9wdGlvbmFsPEpTT2JqZWN0Jj4gdG9EYXRlVGltZU9wdGlvbnNBbnlEYXRlKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QKICAgICAvLyBEZWZhdWx0cyBpcyBhbHdheXMgImRhdGUi
LiBJZ25vcmUgdGhpcyBicmFuY2guCiAKICAgICAvLyA5LiBSZXR1cm4gb3B0aW9ucy4KLSAgICBy
ZXR1cm4gKm9wdGlvbnM7CisgICAgcmV0dXJuIG9wdGlvbnM7CiB9CiAKIHZvaWQgSW50bERhdGVU
aW1lRm9ybWF0OjpzZXRGb3JtYXRzRnJvbVBhdHRlcm4oY29uc3QgU3RyaW5nVmlldyYgcGF0dGVy
bikKQEAgLTUyNCw3ICs1MjQsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6
ZURhdGVUaW1lRm9ybWF0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgVmVjdG9y
PFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFs
T2JqZWN0LCBsb2NhbGVzKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkp
OwogCi0gICAgT3B0aW9uYWw8SlNPYmplY3QmPiBvcHRpb25zID0gdG9EYXRlVGltZU9wdGlvbnNB
bnlEYXRlKGdsb2JhbE9iamVjdCwgb3JpZ2luYWxPcHRpb25zKTsKKyAgICBKU09iamVjdCogb3B0
aW9ucyA9IHRvRGF0ZVRpbWVPcHRpb25zQW55RGF0ZShnbG9iYWxPYmplY3QsIG9yaWdpbmFsT3B0
aW9ucyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIFJl
c29sdmVMb2NhbGVPcHRpb25zIGxvY2FsZU9wdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxEaXNwbGF5TmFtZXMuY3BwCmluZGV4IDBkZTU3NDI5MzQ1YWQ4
MWRhZTQxNjBlYWRkYjUwOTdjNjQyMGMxOTIuLmQ3OWMzNDE3OGEyYmJlZGE4OTcyNzJjYTE4OGFi
Nzc1ODgwZGY3Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxEaXNwbGF5TmFtZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxEaXNwbGF5TmFtZXMuY3BwCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgSW50bERpc3BsYXlOYW1l
czo6aW5pdGlhbGl6ZURpc3BsYXlOYW1lcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhCiAgICAgYXV0byByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChn
bG9iYWxPYmplY3QsIGxvY2FsZXMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CiAKLSAgICBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlvbnMgPSBpbnRsR2V0T3B0aW9u
c09iamVjdChnbG9iYWxPYmplY3QsIG9wdGlvbnNWYWx1ZSk7CisgICAgSlNPYmplY3QqIG9wdGlv
bnMgPSBpbnRsR2V0T3B0aW9uc09iamVjdChnbG9iYWxPYmplY3QsIG9wdGlvbnNWYWx1ZSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIC8vIERvZXMgbm90
IHNldCBlaXRoZXIgb2YgImNhIiBvciAibnUiLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bExpc3RGb3JtYXQuY3BwCmluZGV4IDg4MGVkMjZlNzNhZmUxY2E5NDQ3NzQ1
YmVlZmFmOWI1ZDM2ZjQxODIuLjIwZjY4NjhjNTE3ZjVhNTgzMjRlOTBlMmVlMDY3OTBkMjRmOGRk
MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9y
bWF0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1h
dC5jcHAKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBJbnRsTGlzdEZvcm1hdDo6aW5pdGlhbGl6ZUxp
c3RGb3JtYXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZQogICAgIGF1dG8g
cmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0LCBs
b2NhbGVzKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCi0gICAg
T3B0aW9uYWw8SlNPYmplY3QmPiBvcHRpb25zID0gaW50bEdldE9wdGlvbnNPYmplY3QoZ2xvYmFs
T2JqZWN0LCBvcHRpb25zVmFsdWUpOworICAgIEpTT2JqZWN0KiBvcHRpb25zID0gaW50bEdldE9w
dGlvbnNPYmplY3QoZ2xvYmFsT2JqZWN0LCBvcHRpb25zVmFsdWUpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICBSZXNvbHZlTG9jYWxlT3B0aW9ucyBsb2Nh
bGVPcHRpb25zOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bExvY2FsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmNw
cAppbmRleCBlYjA0NWM1NWU1MTVhZTY3M2MwYTQ2YmYxZTI0MDkwYzcwNjAzZmJjLi5mMjJhYmEw
NTUxNWZmZjUzZDBkMDY3OTUyNDcyZjNlMDljNmNmZDgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmNwcApAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgSW50
bExvY2FsZTo6aW5pdGlhbGl6ZUxvY2FsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBj
b25zdCBTdHJpbmcmIHRhCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIE9wdGlvbmFsPEpTT2Jq
ZWN0Jj4gb3B0aW9ucyA9IGludGxDb2VyY2VPcHRpb25zVG9PYmplY3QoZ2xvYmFsT2JqZWN0LCBv
cHRpb25zVmFsdWUpOworICAgIEpTT2JqZWN0KiBvcHRpb25zID0gaW50bENvZXJjZU9wdGlvbnNU
b09iamVjdChnbG9iYWxPYmplY3QsIG9wdGlvbnNWYWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIExvY2FsZUlEQnVpbGRlciBsb2NhbGVJRDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAK
aW5kZXggNTZlN2YxODRkNjJlMjQwYjI3MzYzYjkxZjRmMmEyNTYyZmQ2MDcxYy4uYWZlNDYwNjYw
M2U0NGQ3MGU4MzA0YTk1OWY2OGE3MmIwYzkwZDYzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAKQEAgLTI3NCw3ICsyNzQsNyBA
QCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGb3JtYXQoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYQogICAgIGF1dG8gcmVxdWVzdGVkTG9jYWxlcyA9IGNh
bm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0LCBsb2NhbGVzKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCi0gICAgT3B0aW9uYWw8SlNPYmplY3QmPiBv
cHRpb25zID0gaW50bENvZXJjZU9wdGlvbnNUb09iamVjdChnbG9iYWxPYmplY3QsIG9wdGlvbnNW
YWx1ZSk7CisgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBpbnRsQ29lcmNlT3B0aW9uc1RvT2JqZWN0
KGdsb2JhbE9iamVjdCwgb3B0aW9uc1ZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOwogCiAgICAgUmVzb2x2ZUxvY2FsZU9wdGlvbnMgbG9jYWxlT3B0aW9uczsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3Jt
YXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaApp
bmRleCA2ZjZiYTYyZWNiZjFiM2MzZDMwOGZlYTYxYzY2MmMwMjExOWI3ODdkLi4zOGE3NzBjNTlk
NDEwNzAwZjg5YzQ5Zjc2OWE5MTQ5ZGJjYTg1N2RlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oCkBAIC01MCw3ICs1MCw3IEBAIGVudW0g
Y2xhc3MgUmVsZXZhbnRFeHRlbnNpb25LZXkgOiB1aW50OF90OwogCiBlbnVtIGNsYXNzIEludGxS
b3VuZGluZ1R5cGUgOiB1aW50OF90IHsgRnJhY3Rpb25EaWdpdHMsIFNpZ25pZmljYW50RGlnaXRz
LCBDb21wYWN0Um91bmRpbmcgfTsKIGVudW0gY2xhc3MgSW50bE5vdGF0aW9uIDogdWludDhfdCB7
IFN0YW5kYXJkLCBTY2llbnRpZmljLCBFbmdpbmVlcmluZywgQ29tcGFjdCB9OwotdGVtcGxhdGU8
dHlwZW5hbWUgSW50bFR5cGU+IHZvaWQgc2V0TnVtYmVyRm9ybWF0RGlnaXRPcHRpb25zKEpTR2xv
YmFsT2JqZWN0KiwgSW50bFR5cGUqLCBPcHRpb25hbDxKU09iamVjdCY+LCB1bnNpZ25lZCBtaW5p
bXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0LCB1bnNpZ25lZCBtYXhpbXVtRnJhY3Rpb25EaWdpdHNE
ZWZhdWx0LCBJbnRsTm90YXRpb24pOwordGVtcGxhdGU8dHlwZW5hbWUgSW50bFR5cGU+IHZvaWQg
c2V0TnVtYmVyRm9ybWF0RGlnaXRPcHRpb25zKEpTR2xvYmFsT2JqZWN0KiwgSW50bFR5cGUqLCBK
U09iamVjdCosIHVuc2lnbmVkIG1pbmltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQsIHVuc2lnbmVk
IG1heGltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQsIEludGxOb3RhdGlvbik7CiAKIGNsYXNzIElu
dGxOdW1iZXJGb3JtYXQgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6
CkBAIC04OCw3ICs4OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBmb3JtYXRUb1BhcnRz
SW50ZXJuYWwoSlNHbG9iYWxPYmplY3QqLCBTdHlsZSwgZG91YmxlLCBjb25zdCBTdHJpbmcmIGZv
cm1hdHRlZCwgSW50bEZpZWxkSXRlcmF0b3ImLCBKU0FycmF5KiwgSlNTdHJpbmcqIHVuaXQgPSBu
dWxscHRyKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEludGxUeXBlPgotICAgIGZyaWVuZCB2
b2lkIHNldE51bWJlckZvcm1hdERpZ2l0T3B0aW9ucyhKU0dsb2JhbE9iamVjdCosIEludGxUeXBl
KiwgT3B0aW9uYWw8SlNPYmplY3QmPiwgdW5zaWduZWQgbWluaW11bUZyYWN0aW9uRGlnaXRzRGVm
YXVsdCwgdW5zaWduZWQgbWF4aW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCwgSW50bE5vdGF0aW9u
KTsKKyAgICBmcmllbmQgdm9pZCBzZXROdW1iZXJGb3JtYXREaWdpdE9wdGlvbnMoSlNHbG9iYWxP
YmplY3QqLCBJbnRsVHlwZSosIEpTT2JqZWN0KiwgdW5zaWduZWQgbWluaW11bUZyYWN0aW9uRGln
aXRzRGVmYXVsdCwgdW5zaWduZWQgbWF4aW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCwgSW50bE5v
dGF0aW9uKTsKIAogICAgIHN0YXRpYyBBU0NJSUxpdGVyYWwgbm90YXRpb25TdHJpbmcoSW50bE5v
dGF0aW9uKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bE51bWJlckZvcm1hdElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxOdW1iZXJGb3JtYXRJbmxpbmVzLmgKaW5kZXggNDEwNGI1ODYzYTMzOGU4M2ZlNTRiMWZjZGVi
ZTc1NTBiZGZkYzQ1NC4uMjNkMzg2M2QxNjAwNDMxZWY3NGRmNDBjODc0NDcxNzY2ZDA1MTY5YSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1h
dElubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVy
Rm9ybWF0SW5saW5lcy5oCkBAIC0zMyw3ICszMyw3IEBACiBuYW1lc3BhY2UgSlNDICB7CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIEludGxUeXBlPgotdm9pZCBzZXROdW1iZXJGb3JtYXREaWdpdE9wdGlv
bnMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSW50bFR5cGUqIGludGxJbnN0YW5jZSwg
T3B0aW9uYWw8SlNPYmplY3QmPiBvcHRpb25zLCB1bnNpZ25lZCBtaW5pbXVtRnJhY3Rpb25EaWdp
dHNEZWZhdWx0LCB1bnNpZ25lZCBtYXhpbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0LCBJbnRsTm90
YXRpb24gbm90YXRpb24pCit2b2lkIHNldE51bWJlckZvcm1hdERpZ2l0T3B0aW9ucyhKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBJbnRsVHlwZSogaW50bEluc3RhbmNlLCBKU09iamVjdCog
b3B0aW9ucywgdW5zaWduZWQgbWluaW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCwgdW5zaWduZWQg
bWF4aW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCwgSW50bE5vdGF0aW9uIG5vdGF0aW9uKQogewog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxP
YmplY3QuY3BwCmluZGV4IGQ1YWNjZTAzNDZlOWVlZjAyYzMxY2MzMWMxYzM0NGFhN2M1MDNjM2Eu
LmM2N2Q1NDJmMmI5ZDE4MzZlZjNhYjVjY2IzZTc4YjJiMzQxYTUwOWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCkBAIC01MjMsNyArNTIzLDcgQEAg
Y29uc3QgTG9jYWxlU2V0JiBpbnRsU2VnbWVudGVyQXZhaWxhYmxlTG9jYWxlcygpCiB9CiAKIC8v
IGh0dHBzOi8vdGMzOS5lcy9lY21hNDAyLyNzZWMtZ2V0b3B0aW9uCi1UcmlTdGF0ZSBpbnRsQm9v
bGVhbk9wdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBPcHRpb25hbDxKU09iamVj
dCY+IG9wdGlvbnMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eSkKK1RyaVN0YXRlIGludGxCb29sZWFu
T3B0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvcHRpb25zLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTU0MCw3ICs1
NDAsNyBAQCBUcmlTdGF0ZSBpbnRsQm9vbGVhbk9wdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBPcHRpb25hbDxKU09iamVjdCY+IG9wdAogICAgIHJldHVybiB0cmlTdGF0ZSh2YWx1
ZS50b0Jvb2xlYW4oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKLVN0cmluZyBpbnRsU3RyaW5nT3B0aW9u
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE9wdGlvbmFsPEpTT2JqZWN0Jj4gb3B0aW9u
cywgUHJvcGVydHlOYW1lIHByb3BlcnR5LCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Y29uc3QgY2hh
cio+IHZhbHVlcywgY29uc3QgY2hhciogbm90Rm91bmQsIGNvbnN0IGNoYXIqIGZhbGxiYWNrKQor
U3RyaW5nIGludGxTdHJpbmdPcHRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNP
YmplY3QqIG9wdGlvbnMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eSwgc3RkOjppbml0aWFsaXplcl9s
aXN0PGNvbnN0IGNoYXIqPiB2YWx1ZXMsIGNvbnN0IGNoYXIqIG5vdEZvdW5kLCBjb25zdCBjaGFy
KiBmYWxsYmFjaykKIHsKICAgICAvLyBHZXRPcHRpb24gKG9wdGlvbnMsIHByb3BlcnR5LCB0eXBl
PSJzdHJpbmciLCB2YWx1ZXMsIGZhbGxiYWNrKQogICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIu
aW8vZWNtYTQwMi8jc2VjLWdldG9wdGlvbgpAQCAtNTY4LDcgKzU2OCw3IEBAIFN0cmluZyBpbnRs
U3RyaW5nT3B0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE9wdGlvbmFsPEpTT2Jq
ZWN0Jj4gb3B0aW9uCiAgICAgcmV0dXJuIGZhbGxiYWNrOwogfQogCi11bnNpZ25lZCBpbnRsTnVt
YmVyT3B0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE9wdGlvbmFsPEpTT2JqZWN0
Jj4gb3B0aW9ucywgUHJvcGVydHlOYW1lIHByb3BlcnR5LCB1bnNpZ25lZCBtaW5pbXVtLCB1bnNp
Z25lZCBtYXhpbXVtLCB1bnNpZ25lZCBmYWxsYmFjaykKK3Vuc2lnbmVkIGludGxOdW1iZXJPcHRp
b24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG9wdGlvbnMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eSwgdW5zaWduZWQgbWluaW11bSwgdW5zaWduZWQgbWF4aW11bSwgdW5z
aWduZWQgZmFsbGJhY2spCiB7CiAgICAgLy8gR2V0TnVtYmVyT3B0aW9uIChvcHRpb25zLCBwcm9w
ZXJ0eSwgbWluaW11bSwgbWF4aW11bSwgZmFsbGJhY2spCiAgICAgLy8gaHR0cHM6Ly90YzM5Lmdp
dGh1Yi5pby9lY21hNDAyLyNzZWMtZ2V0bnVtYmVyb3B0aW9uCkBAIC05NjIsNyArOTYyLDcgQEAg
SlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNv
bnN0IExvY2FsZVNldCYgYXZhaWxhYmwKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgU3RyaW5nIG1hdGNoZXI7CiAKLSAgICBPcHRpb25hbDxKU09iamVjdCY+
IG9wdGlvbnMgPSBpbnRsQ29lcmNlT3B0aW9uc1RvT2JqZWN0KGdsb2JhbE9iamVjdCwgb3B0aW9u
c1ZhbHVlKTsKKyAgICBKU09iamVjdCogb3B0aW9ucyA9IGludGxDb2VyY2VPcHRpb25zVG9PYmpl
Y3QoZ2xvYmFsT2JqZWN0LCBvcHRpb25zVmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICBMb2NhbGVNYXRjaGVyIGxvY2FsZU1hdGNoZXIgPSBp
bnRsT3B0aW9uPExvY2FsZU1hdGNoZXI+KGdsb2JhbE9iamVjdCwgb3B0aW9ucywgdm0ucHJvcGVy
dHlOYW1lcy0+bG9jYWxlTWF0Y2hlciwgeyB7ICJsb29rdXAiX3MsIExvY2FsZU1hdGNoZXI6Okxv
b2t1cCB9LCB7ICJiZXN0IGZpdCJfcywgTG9jYWxlTWF0Y2hlcjo6QmVzdEZpdCB9IH0sICJsb2Nh
bGVNYXRjaGVyIG11c3QgYmUgZWl0aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZpdFwiIl9zLCBM
b2NhbGVNYXRjaGVyOjpCZXN0Rml0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxPYmplY3QuaAppbmRleCBlOTNjOWJlODQ0ODFlZWY0YzNmNzVmNzYzNWQ5ODE2ZjFlODdkYTk3
Li45NWViN2JiNzk5YjVlNzI4MjE4NTNmOWE5YmE0YmIyOTAyMWJkMDUyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5oCkBAIC05NCw5ICs5NCw5IEBAIGlubGlu
ZSBjb25zdCBMb2NhbGVTZXQmIGludGxQbHVyYWxSdWxlc0F2YWlsYWJsZUxvY2FsZXMoKSB7IHJl
dHVybiBpbnRsQXZhaWxhYmxlCiBpbmxpbmUgY29uc3QgTG9jYWxlU2V0JiBpbnRsUmVsYXRpdmVU
aW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVz
KCk7IH0KIGlubGluZSBjb25zdCBMb2NhbGVTZXQmIGludGxMaXN0Rm9ybWF0QXZhaWxhYmxlTG9j
YWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KIAotVHJpU3RhdGUgaW50
bEJvb2xlYW5PcHRpb24oSlNHbG9iYWxPYmplY3QqLCBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlv
bnMsIFByb3BlcnR5TmFtZSk7Ci1TdHJpbmcgaW50bFN0cmluZ09wdGlvbihKU0dsb2JhbE9iamVj
dCosIE9wdGlvbmFsPEpTT2JqZWN0Jj4gb3B0aW9ucywgUHJvcGVydHlOYW1lLCBzdGQ6OmluaXRp
YWxpemVyX2xpc3Q8Y29uc3QgY2hhcio+IHZhbHVlcywgY29uc3QgY2hhciogbm90Rm91bmQsIGNv
bnN0IGNoYXIqIGZhbGxiYWNrKTsKLXVuc2lnbmVkIGludGxOdW1iZXJPcHRpb24oSlNHbG9iYWxP
YmplY3QqLCBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlvbnMsIFByb3BlcnR5TmFtZSwgdW5zaWdu
ZWQgbWluaW11bSwgdW5zaWduZWQgbWF4aW11bSwgdW5zaWduZWQgZmFsbGJhY2spOworVHJpU3Rh
dGUgaW50bEJvb2xlYW5PcHRpb24oSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogb3B0aW9ucywg
UHJvcGVydHlOYW1lKTsKK1N0cmluZyBpbnRsU3RyaW5nT3B0aW9uKEpTR2xvYmFsT2JqZWN0Kiwg
SlNPYmplY3QqIG9wdGlvbnMsIFByb3BlcnR5TmFtZSwgc3RkOjppbml0aWFsaXplcl9saXN0PGNv
bnN0IGNoYXIqPiB2YWx1ZXMsIGNvbnN0IGNoYXIqIG5vdEZvdW5kLCBjb25zdCBjaGFyKiBmYWxs
YmFjayk7Cit1bnNpZ25lZCBpbnRsTnVtYmVyT3B0aW9uKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmpl
Y3QqIG9wdGlvbnMsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgbWluaW11bSwgdW5zaWduZWQgbWF4
aW11bSwgdW5zaWduZWQgZmFsbGJhY2spOwogdW5zaWduZWQgaW50bERlZmF1bHROdW1iZXJPcHRp
b24oSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIG1pbmlt
dW0sIHVuc2lnbmVkIG1heGltdW0sIHVuc2lnbmVkIGZhbGxiYWNrKTsKIFZlY3RvcjxjaGFyLCAz
Mj4gbG9jYWxlSURCdWZmZXJGb3JMYW5ndWFnZVRhZ1dpdGhOdWxsVGVybWluYXRvcihjb25zdCBD
U3RyaW5nJik7CiBTdHJpbmcgbGFuZ3VhZ2VUYWdGb3JMb2NhbGVJRChjb25zdCBjaGFyKiwgYm9v
bCBpc0ltbW9ydGFsID0gZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bE9iamVjdElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxPYmplY3RJbmxpbmVzLmgKaW5kZXggMmFkYjg1YjU0MTFlYzc1NGZkNzc5YjYzNjY0
MDI1YjViMmY5NTFkMC4uZDhiMGFiYTYyNzI0ZWI1NWZiZTVhZmQ3NjU3ZTRjYTU1MmExYjRiYiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdElubGlu
ZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0SW5saW5l
cy5oCkBAIC0xMjAsNyArMTIwLDcgQEAgSW5zdGFuY2VUeXBlKiB1bndyYXBGb3JMZWdhY3lJbnRs
Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWwKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZT4KLVJlc3VsdFR5cGUgaW50bE9wdGlvbihKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlvbnMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eSwgc3RkOjppbml0aWFsaXplcl9saXN0PHN0ZDo6cGFpcjxBU0NJSUxp
dGVyYWwsIFJlc3VsdFR5cGU+PiB2YWx1ZXMsIEFTQ0lJTGl0ZXJhbCBub3RGb3VuZE1lc3NhZ2Us
IFJlc3VsdFR5cGUgZmFsbGJhY2spCitSZXN1bHRUeXBlIGludGxPcHRpb24oSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG9wdGlvbnMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eSwgc3RkOjppbml0aWFsaXplcl9saXN0PHN0ZDo6cGFpcjxBU0NJSUxpdGVyYWwsIFJlc3VsdFR5
cGU+PiB2YWx1ZXMsIEFTQ0lJTGl0ZXJhbCBub3RGb3VuZE1lc3NhZ2UsIFJlc3VsdFR5cGUgZmFs
bGJhY2spCiB7CiAgICAgLy8gR2V0T3B0aW9uIChvcHRpb25zLCBwcm9wZXJ0eSwgdHlwZT0ic3Ry
aW5nIiwgdmFsdWVzLCBmYWxsYmFjaykKICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2Vj
bWE0MDIvI3NlYy1nZXRvcHRpb24KQEAgLTIwMSwyOCArMjAxLDI4IEBAIGlubGluZSBVQ29sbGF0
aW9uUmVzdWx0IGNvbXBhcmVBU0NJSVdpdGhVQ0FEVUNFVChjb25zdCBDaGFyYWN0ZXJUeXBlMSog
Y2hhcmFjdGVyCiB9CiAKIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hNDAyLyNzZWMtZ2V0b3B0aW9u
c29iamVjdAotaW5saW5lIE9wdGlvbmFsPEpTT2JqZWN0Jj4gaW50bEdldE9wdGlvbnNPYmplY3Qo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBvcHRpb25zKQoraW5saW5lIEpT
T2JqZWN0KiBpbnRsR2V0T3B0aW9uc09iamVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIG9wdGlvbnMpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAob3B0aW9u
cy5pc1VuZGVmaW5lZCgpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoTElLRUxZKG9wdGlvbnMuaXNPYmplY3QoKSkpCi0gICAg
ICAgIHJldHVybiAqYXNPYmplY3Qob3B0aW9ucyk7CisgICAgICAgIHJldHVybiBhc09iamVjdChv
cHRpb25zKTsKICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAib3B0aW9u
cyBhcmd1bWVudCBpcyBub3QgYW4gb2JqZWN0IG9yIHVuZGVmaW5lZCJfcyk7Ci0gICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogLy8gaHR0cHM6Ly90YzM5
LmVzL2VjbWE0MDIvI3NlYy1jb2VyY2VvcHRpb25zdG9vYmplY3QKLWlubGluZSBPcHRpb25hbDxK
U09iamVjdCY+IGludGxDb2VyY2VPcHRpb25zVG9PYmplY3QoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBvcHRpb25zVmFsdWUpCitpbmxpbmUgSlNPYmplY3QqIGludGxDb2Vy
Y2VPcHRpb25zVG9PYmplY3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBv
cHRpb25zVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAob3B0aW9uc1ZhbHVl
LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIEpTT2JqZWN0KiBvcHRpb25zID0gb3B0aW9uc1ZhbHVlLnRvT2Jq
ZWN0KGdsb2JhbE9iamVjdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgV1RGOjpu
dWxsb3B0KTsKLSAgICByZXR1cm4gKm9wdGlvbnM7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgbnVsbHB0cik7CisgICAgcmV0dXJuIG9wdGlvbnM7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJh
bFJ1bGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxl
cy5jcHAKaW5kZXggY2NjZjQ5NzE1ODE4ZGZkMzAyNjhhMzE3YWRhZGI4ZThkY2JhZjUzOC4uZDhi
Yzk2NjlmY2JhYzJlMjA5YWU0NTRkNjJiZmMzZDI4YTM1ZTQ4OSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCkBAIC04Niw3ICs4Niw3
IEBAIHZvaWQgSW50bFBsdXJhbFJ1bGVzOjppbml0aWFsaXplUGx1cmFsUnVsZXMoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1CiAgICAgVmVjdG9yPFN0cmluZz4gcmVxdWVzdGVk
TG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0LCBsb2NhbGVzKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCi0gICAgT3B0aW9uYWw8
SlNPYmplY3QmPiBvcHRpb25zID0gaW50bENvZXJjZU9wdGlvbnNUb09iamVjdChnbG9iYWxPYmpl
Y3QsIG9wdGlvbnNWYWx1ZSk7CisgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBpbnRsQ29lcmNlT3B0
aW9uc1RvT2JqZWN0KGdsb2JhbE9iamVjdCwgb3B0aW9uc1ZhbHVlKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgUmVzb2x2ZUxvY2FsZU9wdGlvbnMgbG9j
YWxlT3B0aW9uczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxQbHVyYWxSdWxlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJh
bFJ1bGVzLmgKaW5kZXggZTI5ZTFiNjI2ZDMxYzkwODI2ZDQ3ZjJkNmJiNWFjMTM3YTViZmI1ZS4u
NmQzYWNhYjg0ZTgxNGU1ZjdjMDdkMDI0ZjNlMjVmZjJlNWYwZjZlNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgKQEAgLTU4LDcgKzU4LDcg
QEAgcHVibGljOgogICAgIERFQ0xBUkVfSU5GTzsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIElu
dGxUeXBlPgotICAgIGZyaWVuZCB2b2lkIHNldE51bWJlckZvcm1hdERpZ2l0T3B0aW9ucyhKU0ds
b2JhbE9iamVjdCosIEludGxUeXBlKiwgT3B0aW9uYWw8SlNPYmplY3QmPiwgdW5zaWduZWQgbWlu
aW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCwgdW5zaWduZWQgbWF4aW11bUZyYWN0aW9uRGlnaXRz
RGVmYXVsdCwgSW50bE5vdGF0aW9uKTsKKyAgICBmcmllbmQgdm9pZCBzZXROdW1iZXJGb3JtYXRE
aWdpdE9wdGlvbnMoSlNHbG9iYWxPYmplY3QqLCBJbnRsVHlwZSosIEpTT2JqZWN0KiwgdW5zaWdu
ZWQgbWluaW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCwgdW5zaWduZWQgbWF4aW11bUZyYWN0aW9u
RGlnaXRzRGVmYXVsdCwgSW50bE5vdGF0aW9uKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZVBsdXJh
bFJ1bGVzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBsb2NhbGVzLCBKU1ZhbHVlIG9wdGlvbnMp
OwogICAgIEpTVmFsdWUgc2VsZWN0KEpTR2xvYmFsT2JqZWN0KiwgZG91YmxlIHZhbHVlKSBjb25z
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2
ZVRpbWVGb3JtYXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0
aXZlVGltZUZvcm1hdC5jcHAKaW5kZXggMmI1ZDI4ZWZkOGNlOGYyN2Q2NTc1ODUwMmEzMTA5ODA1
YjcwNzNkZS4uYjg5Y2FlODY2MmExMDY2OTE2YWRkYzdjM2IxZGE1NjM3ZjM1YzhjNyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1h
dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGlt
ZUZvcm1hdC5jcHAKQEAgLTg5LDcgKzg5LDcgQEAgdm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0
Ojppbml0aWFsaXplUmVsYXRpdmVUaW1lRm9ybWF0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWwKICAg
ICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlz
dChnbG9iYWxPYmplY3QsIGxvY2FsZXMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHZvaWQoKSk7CiAKLSAgICBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlvbnMgPSBpbnRsQ29lcmNl
T3B0aW9uc1RvT2JqZWN0KGdsb2JhbE9iamVjdCwgb3B0aW9uc1ZhbHVlKTsKKyAgICBKU09iamVj
dCogb3B0aW9ucyA9IGludGxDb2VyY2VPcHRpb25zVG9PYmplY3QoZ2xvYmFsT2JqZWN0LCBvcHRp
b25zVmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAg
ICBSZXNvbHZlTG9jYWxlT3B0aW9ucyBsb2NhbGVPcHRpb25zOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudGVyLmNwcAppbmRleCA3MmE4M2MwOGNkMzQyMzc1
Y2ExNDZiODc3Njg3MmRmOTBjOGM2YmU2Li4xMGQ5YWFmZWFjNDNmODdjMzAzNzFiNjAwZmZhZGI1
YmZmZDBkNTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
U2VnbWVudGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2Vn
bWVudGVyLmNwcApAQCAtNjgsNyArNjgsNyBAQCB2b2lkIEludGxTZWdtZW50ZXI6OmluaXRpYWxp
emVTZWdtZW50ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBsbwogICAg
IGF1dG8gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2Jq
ZWN0LCBsb2NhbGVzKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwog
Ci0gICAgT3B0aW9uYWw8SlNPYmplY3QmPiBvcHRpb25zID0gaW50bEdldE9wdGlvbnNPYmplY3Qo
Z2xvYmFsT2JqZWN0LCBvcHRpb25zVmFsdWUpOworICAgIEpTT2JqZWN0KiBvcHRpb25zID0gaW50
bEdldE9wdGlvbnNPYmplY3QoZ2xvYmFsT2JqZWN0LCBvcHRpb25zVmFsdWUpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICBSZXNvbHZlTG9jYWxlT3B0aW9u
cyBsb2NhbGVPcHRpb25zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRm9yd2FyZC5oIGIv
U291cmNlL1dURi93dGYvRm9yd2FyZC5oCmluZGV4IGM0N2NjNWRjN2Q4YjA3MWEyMWViM2Y3YmEy
ODM5OTg1ZTFjZGIzZWYuLmM1MWY2N2FmMDJhZmQ2YTc2OGJkYjUxZTNhN2I2NmMxYTFiZTA2ZGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9Gb3J3YXJkLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwNi0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjEsNiArMjEsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxzdGRkZWYu
aD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
IAogbmFtZXNwYWNlIFdURiB7CkBAIC03MCw3ICs3MSw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lPiBj
bGFzcyBGdW5jdGlvbjsKIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSA9IEFueVRocmVhZHNB
Y2Nlc3NUcmFpdHM+IGNsYXNzIExhenlOZXZlckRlc3Ryb3llZDsKIHRlbXBsYXRlPHR5cGVuYW1l
LCB0eXBlbmFtZSA9IEFueVRocmVhZHNBY2Nlc3NUcmFpdHM+IGNsYXNzIE5ldmVyRGVzdHJveWVk
OwogdGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIE9wdGlvblNldDsKLXRlbXBsYXRlPHR5cGVuYW1l
PiBjbGFzcyBPcHRpb25hbDsKIHRlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBQYWNrZWQ7CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgPSBhbGlnbm9mKFQpPiBjbGFzcyBQYWNrZWRBbGlnbmVk
UHRyOwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBSYXdQdHJUcmFpdHM7CkBAIC0xMzYsNyAr
MTM2LDYgQEAgdXNpbmcgV1RGOjpMb2NrOwogdXNpbmcgV1RGOjpMb2dnZXI7CiB1c2luZyBXVEY6
Ok5ldmVyRGVzdHJveWVkOwogdXNpbmcgV1RGOjpPcHRpb25TZXQ7Ci11c2luZyBXVEY6Ok9wdGlv
bmFsOwogdXNpbmcgV1RGOjpPcmRpbmFsTnVtYmVyOwogdXNpbmcgV1RGOjpQcmludFN0cmVhbTsK
IHVzaW5nIFdURjo6UmF3UHRyVHJhaXRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvT3B0
aW9uYWwuaCBiL1NvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmgKaW5kZXggNjdhYmExMWFmMTk3M2Ez
OTUxZjVjMzNjNTA2ZDIwOWY3YTZiNWZhYS4uZTk1OGFjMzY5Nzk0ZDYyZmIwYzdiMmJlYmVmOWI5
MzM0N2Y2OGQyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvT3B0aW9uYWwuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5oCkBAIC0xLDEwNDcgKzEsNTIgQEAKLS8vIENvcHlyaWdo
dCAoQykgMjAxMSAtIDIwMTIgQW5kcnplaiBLcnplbWllbnNraS4KLS8vCi0vLyBVc2UsIG1vZGlm
aWNhdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBpcyBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2Fy
ZQotLy8gTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5T
RV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8w
LnR4dCkKLS8vCi0vLyBUaGUgaWRlYSBhbmQgaW50ZXJmYWNlIGlzIGJhc2VkIG9uIEJvb3N0Lk9w
dGlvbmFsIGxpYnJhcnkKLS8vIGF1dGhvcmVkIGJ5IEZlcm5hbmRvIEx1aXMgQ2FjY2lvbGEgQ2Fy
YmFsbGFsCi0vLwotLy8gQm9vc3QgU29mdHdhcmUgTGljZW5zZSAtIFZlcnNpb24gMS4wIC0gQXVn
dXN0IDE3dGgsIDIwMDMKLS8vCi0vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl
IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvciBvcmdhbml6YXRpb24KLS8vIG9idGFpbmluZyBh
IGNvcHkgb2YgdGhlIHNvZnR3YXJlIGFuZCBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBjb3Zl
cmVkIGJ5Ci0vLyB0aGlzIGxpY2Vuc2UgKHRoZSAiU29mdHdhcmUiKSB0byB1c2UsIHJlcHJvZHVj
ZSwgZGlzcGxheSwgZGlzdHJpYnV0ZSwKLS8vIGV4ZWN1dGUsIGFuZCB0cmFuc21pdCB0aGUgU29m
dHdhcmUsIGFuZCB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlCi0vLyBTb2Z0d2Fy
ZSwgYW5kIHRvIHBlcm1pdCB0aGlyZC1wYXJ0aWVzIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1
cm5pc2hlZCB0bwotLy8gZG8gc28sIGFsbCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmc6Ci0vLwot
Ly8gVGhlIGNvcHlyaWdodCBub3RpY2VzIGluIHRoZSBTb2Z0d2FyZSBhbmQgdGhpcyBlbnRpcmUg
c3RhdGVtZW50LCBpbmNsdWRpbmcKLS8vIHRoZSBhYm92ZSBsaWNlbnNlIGdyYW50LCB0aGlzIHJl
c3RyaWN0aW9uIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCi0vLyBtdXN0IGJlIGluY2x1
ZGVkIGluIGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCBh
bmQKLS8vIGFsbCBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTb2Z0d2FyZSwgdW5sZXNzIHN1Y2gg
Y29waWVzIG9yIGRlcml2YXRpdmUKLS8vIHdvcmtzIGFyZSBzb2xlbHkgaW4gdGhlIGZvcm0gb2Yg
bWFjaGluZS1leGVjdXRhYmxlIG9iamVjdCBjb2RlIGdlbmVyYXRlZCBieQotLy8gYSBzb3VyY2Ug
bGFuZ3VhZ2UgcHJvY2Vzc29yLgotLy8KLS8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg
SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0vLyBJTVBMSUVE
LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSwKLS8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBUSVRMRSBBTkQg
Tk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQKLS8vIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBPUiBBTllPTkUgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSBCRSBMSUFCTEUKLS8vIEZP
UiBBTlkgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFRP
UlQgT1IgT1RIRVJXSVNFLAotLy8gQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElP
TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCi0vLyBERUFMSU5HUyBJTiBU
SEUgU09GVFdBUkUuCi0KLS8vIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ha3J6ZW1p
MS9PcHRpb25hbCAoODQ1NmMzOTIzNzc2YjMzYjRhZTg1MjczNDI3M2ZlOTM0YzNlNGU2MSkKLQot
Ly8gTW9kaWZpZWQgdG8gbWFrZSBpdCBjb21waWxlIHdpdGggZXhjZXB0aW9ucyBkaXNhYmxlZC4K
Ky8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCiAKICNwcmFnbWEgb25jZQogCi0jIGluY2x1ZGUgPHV0aWxpdHk+Ci0j
IGluY2x1ZGUgPHR5cGVfdHJhaXRzPgotIyBpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgotIyBp
bmNsdWRlIDxjYXNzZXJ0PgotIyBpbmNsdWRlIDxzdHJpbmc+Ci0jIGluY2x1ZGUgPHN0ZGV4Y2Vw
dD4KLSMgaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSMgaW5jbHVkZSA8d3RmL0NvbXBpbGVy
Lmg+Ci0jIGluY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Ci0jIGluY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KLQotIyBkZWZpbmUgVFIyX09QVElPTkFMX1JFUVVJUkVTKC4uLikgdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8X19WQV9BUkdTX186OnZhbHVlLCBib29sPjo6dHlwZSA9IGZhbHNlCi0K
LSMgaWYgZGVmaW5lZCBfX0dOVUNfXyAvLyBOT1RFOiBHTlVDIGlzIGFsc28gZGVmaW5lZCBmb3Ig
Q2xhbmcKLSMgICBpZiAoX19HTlVDX18gPT0gNCkgJiYgKF9fR05VQ19NSU5PUl9fID49IDgpCi0j
ICAgICBkZWZpbmUgVFIyX09QVElPTkFMX0dDQ180XzhfQU5EX0hJR0hFUl9fXwotIyAgIGVsaWYg
KF9fR05VQ19fID4gNCkKLSMgICAgIGRlZmluZSBUUjJfT1BUSU9OQUxfR0NDXzRfOF9BTkRfSElH
SEVSX19fCi0jICAgZW5kaWYKLSMKLSMgICBpZiAoX19HTlVDX18gPT0gNCkgJiYgKF9fR05VQ19N
SU5PUl9fID49IDcpCi0jICAgICBkZWZpbmUgVFIyX09QVElPTkFMX0dDQ180XzdfQU5EX0hJR0hF
Ul9fXwotIyAgIGVsaWYgKF9fR05VQ19fID4gNCkKLSMgICAgIGRlZmluZSBUUjJfT1BUSU9OQUxf
R0NDXzRfN19BTkRfSElHSEVSX19fCi0jICAgZW5kaWYKLSMKLSMgICBpZiAoX19HTlVDX18gPT0g
NCkgJiYgKF9fR05VQ19NSU5PUl9fID09IDgpICYmIChfX0dOVUNfUEFUQ0hMRVZFTF9fID49IDEp
Ci0jICAgICBkZWZpbmUgVFIyX09QVElPTkFMX0dDQ180XzhfMV9BTkRfSElHSEVSX19fCi0jICAg
ZWxpZiAoX19HTlVDX18gPT0gNCkgJiYgKF9fR05VQ19NSU5PUl9fID49IDkpCi0jICAgICBkZWZp
bmUgVFIyX09QVElPTkFMX0dDQ180XzhfMV9BTkRfSElHSEVSX19fCi0jICAgZWxpZiAoX19HTlVD
X18gPiA0KQotIyAgICAgZGVmaW5lIFRSMl9PUFRJT05BTF9HQ0NfNF84XzFfQU5EX0hJR0hFUl9f
XwotIyAgIGVuZGlmCi0jIGVuZGlmCi0jCi0jIGlmIGRlZmluZWQgX19jbGFuZ19tYWpvcl9fCi0j
ICAgaWYgKF9fY2xhbmdfbWFqb3JfXyA9PSAzICYmIF9fY2xhbmdfbWlub3JfXyA+PSA1KQotIyAg
ICAgZGVmaW5lIFRSMl9PUFRJT05BTF9DTEFOR18zXzVfQU5EX0hJR0hURVJfCi0jICAgZWxpZiAo
X19jbGFuZ19tYWpvcl9fID4gMykKLSMgICAgIGRlZmluZSBUUjJfT1BUSU9OQUxfQ0xBTkdfM181
X0FORF9ISUdIVEVSXwotIyAgIGVuZGlmCi0jICAgaWYgZGVmaW5lZCBUUjJfT1BUSU9OQUxfQ0xB
TkdfM181X0FORF9ISUdIVEVSXwotIyAgICAgZGVmaW5lIFRSMl9PUFRJT05BTF9DTEFOR18zXzRf
Ml9BTkRfSElHSEVSXwotIyAgIGVsaWYgKF9fY2xhbmdfbWFqb3JfXyA9PSAzICYmIF9fY2xhbmdf
bWlub3JfXyA9PSA0ICYmIF9fY2xhbmdfcGF0Y2hsZXZlbF9fID49IDIpCi0jICAgICBkZWZpbmUg
VFIyX09QVElPTkFMX0NMQU5HXzNfNF8yX0FORF9ISUdIRVJfCi0jICAgZW5kaWYKLSMgZW5kaWYK
LSMKLSMgaWYgZGVmaW5lZCBfTVNDX1ZFUgotIyAgIGlmIChfTVNDX1ZFUiA+PSAxOTAwKQotIyAg
ICAgZGVmaW5lIFRSMl9PUFRJT05BTF9NU1ZDXzIwMTVfQU5EX0hJR0hFUl9fXwotIyAgIGVuZGlm
Ci0jIGVuZGlmCi0KLSMgaWYgZGVmaW5lZCBfX2NsYW5nX18KLSMgICBpZiAoX19jbGFuZ19tYWpv
cl9fID4gMikgfHwgKF9fY2xhbmdfbWFqb3JfXyA9PSAyKSAmJiAoX19jbGFuZ19taW5vcl9fID49
IDkpCi0jICAgICBkZWZpbmUgT1BUSU9OQUxfSEFTX1RISVNfUlZBTFVFX1JFRlMgMQotIyAgIGVs
c2UKLSMgICAgIGRlZmluZSBPUFRJT05BTF9IQVNfVEhJU19SVkFMVUVfUkVGUyAwCi0jICAgZW5k
aWYKLSMgZWxpZiBkZWZpbmVkIFRSMl9PUFRJT05BTF9HQ0NfNF84XzFfQU5EX0hJR0hFUl9fXwot
IyAgIGRlZmluZSBPUFRJT05BTF9IQVNfVEhJU19SVkFMVUVfUkVGUyAxCi0jIGVsaWYgZGVmaW5l
ZCBUUjJfT1BUSU9OQUxfTVNWQ18yMDE1X0FORF9ISUdIRVJfX18KLSMgICBkZWZpbmUgT1BUSU9O
QUxfSEFTX1RISVNfUlZBTFVFX1JFRlMgMQotIyBlbHNlCi0jICAgZGVmaW5lIE9QVElPTkFMX0hB
U19USElTX1JWQUxVRV9SRUZTIDAKLSMgZW5kaWYKLQotCi0jIGlmIGRlZmluZWQgVFIyX09QVElP
TkFMX0dDQ180XzhfMV9BTkRfSElHSEVSX19fCi0jICAgZGVmaW5lIE9QVElPTkFMX0hBU19DT05T
VEVYUFJfSU5JVF9MSVNUIDEKLSMgICBkZWZpbmUgT1BUSU9OQUxfQ09OU1RFWFBSX0lOSVRfTElT
VCBjb25zdGV4cHIKLSMgZWxzZQotIyAgIGRlZmluZSBPUFRJT05BTF9IQVNfQ09OU1RFWFBSX0lO
SVRfTElTVCAwCi0jICAgZGVmaW5lIE9QVElPTkFMX0NPTlNURVhQUl9JTklUX0xJU1QKLSMgZW5k
aWYKLQotIyAvLyBJbiBDKysxMSBjb25zdGV4cHIgaW1wbGllcyBjb25zdCwgc28gd2UgbmVlZCB0
byBtYWtlIG5vbi1jb25zdCBtZW1iZXJzIGFsc28gbm9uLWNvbnN0ZXhwcgotIyBpZiAoZGVmaW5l
ZCBfX2NwbHVzcGx1cykgJiYgKF9fY3BsdXNwbHVzID09IDIwMTEwM0wpCi0jICAgZGVmaW5lIE9Q
VElPTkFMX01VVEFCTEVfQ09OU1RFWFBSCi0jIGVsc2UKLSMgICBkZWZpbmUgT1BUSU9OQUxfTVVU
QUJMRV9DT05TVEVYUFIgY29uc3RleHByCi0jIGVuZGlmCi0KLSNpZiBDT01QSUxFUl9TVVBQT1JU
UyhFWENFUFRJT05TKQotI2RlZmluZSBfX1RIUk9XX0VYQ0VQVElPTihfX2V4Y2VwdGlvbikgdGhy
b3cgX19leGNlcHRpb247Ci0jZGVmaW5lIF9fTk9FWENFUFQgbm9leGNlcHQKLSNkZWZpbmUgX19O
T0VYQ0VQVF8oX19leGNlcHRpb24pIG5vZXhjZXB0KF9fZXhjZXB0aW9uKQotI2Vsc2UKLSNkZWZp
bmUgX19USFJPV19FWENFUFRJT04oX19leGNlcHRpb24pIGRvIHsgKHZvaWQpX19leGNlcHRpb247
IENSQVNIKCk7IH0gd2hpbGUgKDApOwotI2RlZmluZSBfX05PRVhDRVBUCi0jZGVmaW5lIF9fTk9F
WENFUFRfKC4uLikKLSNlbmRpZgorI2luY2x1ZGUgPG9wdGlvbmFsPgogCiBuYW1lc3BhY2UgV1RG
IHsKLW5hbWVzcGFjZSBkZXRhaWxfIHsKLQotLy8gTk9URTogQWxsIG91ciB0YXJnZXQgY29tcGls
ZXJzIHN1cHBvcnQgaXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZS4KLS8vIC8vIEJFR0lOIHdvcmth
cm91bmQgZm9yIG1pc3NpbmcgaXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZQotLy8gIyBpZiBkZWZp
bmVkIFRSMl9PUFRJT05BTF9HQ0NfNF84X0FORF9ISUdIRVJfX18KLS8vICAgICAvLyBsZWF2ZSBp
dDogaXQgaXMgYWxyZWFkeSB0aGVyZQotLy8gIyBlbGlmIGRlZmluZWQgVFIyX09QVElPTkFMX0NM
QU5HXzNfNF8yX0FORF9ISUdIRVJfCi0vLyAgICAgLy8gbGVhdmUgaXQ6IGl0IGlzIGFscmVhZHkg
dGhlcmUKLS8vICMgZWxpZiBkZWZpbmVkIFRSMl9PUFRJT05BTF9NU1ZDXzIwMTVfQU5EX0hJR0hF
Ul9fXwotLy8gICAgIC8vIGxlYXZlIGl0OiBpdCBpcyBhbHJlYWR5IHRoZXJlCi0vLyAjIGVsaWYg
ZGVmaW5lZCBUUjJfT1BUSU9OQUxfRElTQUJMRV9FTVVMQVRJT05fT0ZfVFlQRV9UUkFJVFMKLS8v
ICAgICAvLyBsZWF2ZSBpdDogdGhlIHVzZXIgZG9lc24ndCB3YW50IGl0Ci0vLyAjIGVsc2UKLS8v
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS8vICAgICB1c2luZyBpc190cml2aWFsbHlfZGVz
dHJ1Y3RpYmxlID0gc3RkOjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yPFQ+OwotLy8gIyBlbmRpZgot
Ly8gLy8gRU5EIHdvcmthcm91bmQgZm9yIG1pc3NpbmcgaXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJs
ZQotCi0jaWYgQ09NUElMRVJfU1VQUE9SVFMoRVhDRVBUSU9OUykKLSMgaWYgZGVmaW5lZChUUjJf
T1BUSU9OQUxfR0NDXzRfN19BTkRfSElHSEVSX19fKSB8fCBkZWZpbmVkKFRSMl9PUFRJT05BTF9D
TEFOR18zXzRfMl9BTkRfSElHSEVSXykgfHwgZGVmaW5lZChUUjJfT1BUSU9OQUxfTVNWQ18yMDE1
X0FORF9ISUdIRVJfX18pCi0gICAgLy8gbGVhdmUgaXQ7IG91ciBtZXRhZnVuY3Rpb25zIGFyZSBh
bHJlYWR5IGRlZmluZWQuCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgdXNpbmcgaXNf
bm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGUgPSBzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1
Y3RpYmxlPFQ+OwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgIHVzaW5nIGlzX25vdGhy
b3dfbW92ZV9hc3NpZ25hYmxlID0gc3RkOjppc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTxUPjsK
LSMgZWxpZiBkZWZpbmVkIFRSMl9PUFRJT05BTF9ESVNBQkxFX0VNVUxBVElPTl9PRl9UWVBFX1RS
QUlUUwotICAgIC8vIGxlYXZlIGl0OiB0aGUgdXNlciBkb2Vzbid0IHdhbnQgaXQKLSMgZWxzZQot
Ci0KLS8vIHdvcmthcm91bmQgZm9yIG1pc3NpbmcgdHJhaXRzIGluIEdDQyBhbmQgQ0xBTkcKLXRl
bXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IGlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlCi17
Ci0gIGNvbnN0ZXhwciBzdGF0aWMgYm9vbCB2YWx1ZSA9IHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1
Y3RpYmxlPFQsIFQmJj46OnZhbHVlOwotfTsKLQotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3Mg
VT4KLXN0cnVjdCBpc19hc3NpZ25hYmxlCi17Ci0gIHRlbXBsYXRlIDxjbGFzcyBYLCBjbGFzcyBZ
PgotICBjb25zdGV4cHIgc3RhdGljIGJvb2wgaGFzX2Fzc2lnbiguLi4pIHsgcmV0dXJuIGZhbHNl
OyB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIFgsIGNsYXNzIFksIHNpemVfdCBTID0gc2l6ZW9mKChz
dGQ6OmRlY2x2YWw8WD4oKSA9IHN0ZDo6ZGVjbHZhbDxZPigpLCB0cnVlKSkgPgotICAvLyB0aGUg
Y29tbWEgb3BlcmF0b3IgaXMgbmVjZXNzYXJ5IGZvciB0aGUgY2FzZXMgd2hlcmUgb3BlcmF0b3I9
IHJldHVybnMgdm9pZAotICBjb25zdGV4cHIgc3RhdGljIGJvb2wgaGFzX2Fzc2lnbihib29sKSB7
IHJldHVybiB0cnVlOyB9Ci0KLSAgY29uc3RleHByIHN0YXRpYyBib29sIHZhbHVlID0gaGFzX2Fz
c2lnbjxULCBVPih0cnVlKTsKLX07Ci0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgaXNf
bm90aHJvd19tb3ZlX2Fzc2lnbmFibGUKLXsKLSAgdGVtcGxhdGUgPGNsYXNzIFgsIGJvb2wgaGFz
X2FueV9tb3ZlX2Fzc2lnbj4KLSAgc3RydWN0IGhhc19ub3Rocm93X21vdmVfYXNzaWduIHsKLSAg
ICBjb25zdGV4cHIgc3RhdGljIGJvb2wgdmFsdWUgPSBmYWxzZTsKLSAgfTsKLQotICB0ZW1wbGF0
ZSA8Y2xhc3MgWD4KLSAgc3RydWN0IGhhc19ub3Rocm93X21vdmVfYXNzaWduPFgsIHRydWU+IHsK
LSAgICBjb25zdGV4cHIgc3RhdGljIGJvb2wgdmFsdWUgPSBfX05PRVhDRVBUXyggc3RkOjpkZWNs
dmFsPFgmPigpID0gc3RkOjpkZWNsdmFsPFgmJj4oKSApOwotICB9OwotCi0gIGNvbnN0ZXhwciBz
dGF0aWMgYm9vbCB2YWx1ZSA9IGhhc19ub3Rocm93X21vdmVfYXNzaWduPFQsIGlzX2Fzc2lnbmFi
bGU8VCYsIFQmJj46OnZhbHVlPjo6dmFsdWU7Ci19OwotLy8gZW5kIHdvcmthcm91bmQKLQotCi0j
IGVuZGlmCi0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgZGV0YWlsXwotCi0vLyAyMC41LjQsIE9w
dGlvbmFsIGZvciBvYmplY3QgdHlwZXMKLXRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBPcHRpb25h
bDsKLQotLy8gMjAuNS41LCBPcHRpb25hbCBmb3IgbHZhbHVlIHJlZmVyZW5jZSB0eXBlcwotdGVt
cGxhdGUgPGNsYXNzIFQ+IGNsYXNzIE9wdGlvbmFsPFQmPjsKLQotbmFtZXNwYWNlIGRldGFpbF8g
ewotCi0vLyB3b3JrYXJvdW5kOiBzdGQgdXRpbGl0eSBmdW5jdGlvbnMgYXJlbid0IGNvbnN0ZXhw
ciB5ZXQKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgVCYmIGNvbnN0ZXhwcl9mb3J3YXJk
KHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxUPjo6dHlwZSYgdCkgX19OT0VYQ0VQVAot
ewotICByZXR1cm4gc3RhdGljX2Nhc3Q8VCYmPih0KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+
IGNvbnN0ZXhwciBUJiYgY29uc3RleHByX2ZvcndhcmQodHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVm
ZXJlbmNlPFQ+Ojp0eXBlJiYgdCkgX19OT0VYQ0VQVAotewotICAgIHN0YXRpY19hc3NlcnQoIXN0
ZDo6aXNfbHZhbHVlX3JlZmVyZW5jZTxUPjo6dmFsdWUsICIhISIpOwotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxUJiY+KHQpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIHR5cGVu
YW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxUPjo6dHlwZSYmIGNvbnN0ZXhwcl9tb3ZlKFQmJiB0
KSBfX05PRVhDRVBUCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIHN0ZDo6cmVt
b3ZlX3JlZmVyZW5jZTxUPjo6dHlwZSYmPih0KTsKLX0KLQotCi0vLyBzdGF0aWNfYWRkcmVzc29m
OiBhIGNvbnN0ZXhwciB2ZXJzaW9uIG9mIGFkZHJlc3NvZgotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
Ci1zdHJ1Y3QgaGFzX292ZXJsb2FkZWRfYWRkcmVzc29mCi17Ci0gIHRlbXBsYXRlIDxjbGFzcyBY
PgotICBjb25zdGV4cHIgc3RhdGljIGJvb2wgaGFzX292ZXJsb2FkKC4uLikgeyByZXR1cm4gZmFs
c2U7IH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgWCwgc2l6ZV90IFMgPSBzaXplb2Yoc3RkOjpkZWNs
dmFsPFgmPigpLm9wZXJhdG9yJigpKSA+Ci0gIGNvbnN0ZXhwciBzdGF0aWMgYm9vbCBoYXNfb3Zl
cmxvYWQoYm9vbCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gIGNvbnN0ZXhwciBzdGF0aWMgYm9vbCB2
YWx1ZSA9IGhhc19vdmVybG9hZDxUPih0cnVlKTsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBU
LCBUUjJfT1BUSU9OQUxfUkVRVUlSRVMoIWhhc19vdmVybG9hZGVkX2FkZHJlc3NvZjxUPik+Ci1j
b25zdGV4cHIgVCogc3RhdGljX2FkZHJlc3NvZihUJiByZWYpCi17Ci0gIHJldHVybiAmcmVmOwot
fQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgVFIyX09QVElPTkFMX1JFUVVJUkVTKGhhc19vdmVy
bG9hZGVkX2FkZHJlc3NvZjxUPik+Ci1UKiBzdGF0aWNfYWRkcmVzc29mKFQmIHJlZikKLXsKLSAg
cmV0dXJuIHN0ZDo6YWRkcmVzc29mKHJlZik7Ci19Ci0KLQotLy8gdGhlIGNhbGwgdG8gY29udmVy
dDxBPihiKSBoYXMgcmV0dXJuIHR5cGUgQSBhbmQgY29udmVydHMgYiB0byB0eXBlIEEgaWZmIGIg
ZGVjbHR5cGUoYikgaXMgaW1wbGljaXRseSBjb252ZXJ0aWJsZSB0byBBCi10ZW1wbGF0ZSA8Y2xh
c3MgVT4KLWNvbnN0ZXhwciBVIGNvbnZlcnQoVSB2KSB7IHJldHVybiB2OyB9Ci0KLX0gLy8gbmFt
ZXNwYWNlIGRldGFpbAotCi0KLWNvbnN0ZXhwciBzdHJ1Y3QgdHJpdmlhbF9pbml0X3R7fSB0cml2
aWFsX2luaXR7fTsKLQotCi0vLyAyMC41LjcsIERpc2VuZ2FnZWQgc3RhdGUgaW5kaWNhdG9yCi1z
dHJ1Y3QgbnVsbG9wdF90Ci17Ci0gIHN0cnVjdCBpbml0e307Ci0gIGNvbnN0ZXhwciBleHBsaWNp
dCBudWxsb3B0X3QoaW5pdCl7fQotfTsKLWNvbnN0ZXhwciBudWxsb3B0X3QgbnVsbG9wdHtudWxs
b3B0X3Q6OmluaXQoKX07Ci0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci11bmlvbiBzdG9yYWdlX3QK
LXsKLSAgdW5zaWduZWQgY2hhciBkdW1teV87Ci0gIFQgdmFsdWVfOwotCi0gIGNvbnN0ZXhwciBz
dG9yYWdlX3QoIHRyaXZpYWxfaW5pdF90ICkgX19OT0VYQ0VQVCA6IGR1bW15XygpIHt9OwotCi0g
IHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPgotICBjb25zdGV4cHIgc3RvcmFnZV90KCBBcmdzJiYu
Li4gYXJncyApIDogdmFsdWVfKGRldGFpbF86OmNvbnN0ZXhwcl9mb3J3YXJkPEFyZ3M+KGFyZ3Mp
Li4uKSB7fQotCi0gIH5zdG9yYWdlX3QoKXt9Ci19OwotCi0KLXRlbXBsYXRlIDxjbGFzcyBUPgot
dW5pb24gY29uc3RleHByX3N0b3JhZ2VfdAotewotICAgIHVuc2lnbmVkIGNoYXIgZHVtbXlfOwot
ICAgIFQgdmFsdWVfOwotCi0gICAgY29uc3RleHByIGNvbnN0ZXhwcl9zdG9yYWdlX3QoIHRyaXZp
YWxfaW5pdF90ICkgX19OT0VYQ0VQVCA6IGR1bW15XygpIHt9OwotCi0gICAgdGVtcGxhdGUgPGNs
YXNzLi4uIEFyZ3M+Ci0gICAgY29uc3RleHByIGNvbnN0ZXhwcl9zdG9yYWdlX3QoIEFyZ3MmJi4u
LiBhcmdzICkgOiB2YWx1ZV8oZGV0YWlsXzo6Y29uc3RleHByX2ZvcndhcmQ8QXJncz4oYXJncyku
Li4pIHt9Ci0KLSAgICB+Y29uc3RleHByX3N0b3JhZ2VfdCgpID0gZGVmYXVsdDsKLX07Ci0KLQot
dGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgT3B0aW9uYWxfYmFzZQotewotICAgIGJvb2wgaW5p
dF87Ci0gICAgc3RvcmFnZV90PFQ+IHN0b3JhZ2VfOwotCi0gICAgY29uc3RleHByIE9wdGlvbmFs
X2Jhc2UoKSBfX05PRVhDRVBUIDogaW5pdF8oZmFsc2UpLCBzdG9yYWdlXyh0cml2aWFsX2luaXQp
IHt9OwotCi0gICAgZXhwbGljaXQgY29uc3RleHByIE9wdGlvbmFsX2Jhc2UoY29uc3QgVCYgdikg
OiBpbml0Xyh0cnVlKSwgc3RvcmFnZV8odikge30KLQotICAgIGV4cGxpY2l0IGNvbnN0ZXhwciBP
cHRpb25hbF9iYXNlKFQmJiB2KSA6IGluaXRfKHRydWUpLCBzdG9yYWdlXyhkZXRhaWxfOjpjb25z
dGV4cHJfbW92ZSh2KSkge30KLQotICAgIHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPiBleHBsaWNp
dCBPcHRpb25hbF9iYXNlKHN0ZDo6aW5fcGxhY2VfdCwgQXJncyYmLi4uIGFyZ3MpCi0gICAgICAg
IDogaW5pdF8odHJ1ZSksIHN0b3JhZ2VfKGRldGFpbF86OmNvbnN0ZXhwcl9mb3J3YXJkPEFyZ3M+
KGFyZ3MpLi4uKSB7fQotCi0gICAgdGVtcGxhdGUgPGNsYXNzIFUsIGNsYXNzLi4uIEFyZ3MsIFRS
Ml9PUFRJT05BTF9SRVFVSVJFUyhzdGQ6OmlzX2NvbnN0cnVjdGlibGU8VCwgc3RkOjppbml0aWFs
aXplcl9saXN0PFU+Pik+Ci0gICAgZXhwbGljaXQgT3B0aW9uYWxfYmFzZShzdGQ6OmluX3BsYWNl
X3QsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVPiBpbCwgQXJncyYmLi4uIGFyZ3MpCi0gICAgICAg
IDogaW5pdF8odHJ1ZSksIHN0b3JhZ2VfKGlsLCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4p
IHt9Ci0KLSAgICB+T3B0aW9uYWxfYmFzZSgpIHsgaWYgKGluaXRfKSBzdG9yYWdlXy52YWx1ZV8u
VDo6flQoKTsgfQotfTsKLQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBjb25zdGV4cHJf
T3B0aW9uYWxfYmFzZQotewotICAgIGJvb2wgaW5pdF87Ci0gICAgY29uc3RleHByX3N0b3JhZ2Vf
dDxUPiBzdG9yYWdlXzsKLQotICAgIGNvbnN0ZXhwciBjb25zdGV4cHJfT3B0aW9uYWxfYmFzZSgp
IF9fTk9FWENFUFQgOiBpbml0XyhmYWxzZSksIHN0b3JhZ2VfKHRyaXZpYWxfaW5pdCkge307Ci0K
LSAgICBleHBsaWNpdCBjb25zdGV4cHIgY29uc3RleHByX09wdGlvbmFsX2Jhc2UoY29uc3QgVCYg
dikgOiBpbml0Xyh0cnVlKSwgc3RvcmFnZV8odikge30KLQotICAgIGV4cGxpY2l0IGNvbnN0ZXhw
ciBjb25zdGV4cHJfT3B0aW9uYWxfYmFzZShUJiYgdikgOiBpbml0Xyh0cnVlKSwgc3RvcmFnZV8o
ZGV0YWlsXzo6Y29uc3RleHByX21vdmUodikpIHt9Ci0KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MuLi4g
QXJncz4gZXhwbGljaXQgY29uc3RleHByIGNvbnN0ZXhwcl9PcHRpb25hbF9iYXNlKHN0ZDo6aW5f
cGxhY2VfdCwgQXJncyYmLi4uIGFyZ3MpCi0gICAgICA6IGluaXRfKHRydWUpLCBzdG9yYWdlXyhk
ZXRhaWxfOjpjb25zdGV4cHJfZm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KLQotICAgIHRlbXBs
YXRlIDxjbGFzcyBVLCBjbGFzcy4uLiBBcmdzLCBUUjJfT1BUSU9OQUxfUkVRVUlSRVMoc3RkOjpp
c19jb25zdHJ1Y3RpYmxlPFQsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVPj4pPgotICAgIE9QVElP
TkFMX0NPTlNURVhQUl9JTklUX0xJU1QgZXhwbGljaXQgY29uc3RleHByX09wdGlvbmFsX2Jhc2Uo
c3RkOjppbl9wbGFjZV90LCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VT4gaWwsIEFyZ3MmJi4uLiBh
cmdzKQotICAgICAgOiBpbml0Xyh0cnVlKSwgc3RvcmFnZV8oaWwsIHN0ZDo6Zm9yd2FyZDxBcmdz
PihhcmdzKS4uLikge30KLQotICAgIH5jb25zdGV4cHJfT3B0aW9uYWxfYmFzZSgpID0gZGVmYXVs
dDsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgotdXNpbmcgT3B0aW9uYWxCYXNlID0gdHlwZW5h
bWUgc3RkOjpjb25kaXRpb25hbDwKLSAgICBzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8
VD46OnZhbHVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgcG9zc2libGUKLSAgICBj
b25zdGV4cHJfT3B0aW9uYWxfYmFzZTx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDxUPjo6dHlw
ZT4sIC8vIHVzZSBiYXNlIHdpdGggdHJpdmlhbCBkZXN0cnVjdG9yCi0gICAgT3B0aW9uYWxfYmFz
ZTx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDxUPjo6dHlwZT4KLT46OnR5cGU7Ci0KLQotCi10
ZW1wbGF0ZSA8Y2xhc3MgVD4KLWNsYXNzIE9wdGlvbmFsIDogcHJpdmF0ZSBPcHRpb25hbEJhc2U8
VD4KLXsKLSAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gIHN0YXRpY19hc3NlcnQoICFzdGQ6
OmlzX3NhbWU8dHlwZW5hbWUgc3RkOjpkZWNheTxUPjo6dHlwZSwgbnVsbG9wdF90Pjo6dmFsdWUs
ICJiYWQgVCIgKTsKLSAgc3RhdGljX2Fzc2VydCggIXN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBzdGQ6
OmRlY2F5PFQ+Ojp0eXBlLCBzdGQ6OmluX3BsYWNlX3Q+Ojp2YWx1ZSwgImJhZCBUIiApOwotCi0K
LSAgY29uc3RleHByIGJvb2wgaW5pdGlhbGl6ZWQoKSBjb25zdCBfX05PRVhDRVBUIHsgcmV0dXJu
IE9wdGlvbmFsQmFzZTxUPjo6aW5pdF87IH0KLSAgdHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8
VD46OnR5cGUqIGRhdGFwdHIoKSB7ICByZXR1cm4gc3RkOjphZGRyZXNzb2YoT3B0aW9uYWxCYXNl
PFQ+OjpzdG9yYWdlXy52YWx1ZV8pOyB9Ci0gIGNvbnN0ZXhwciBjb25zdCBUKiBkYXRhcHRyKCkg
Y29uc3QgeyByZXR1cm4gZGV0YWlsXzo6c3RhdGljX2FkZHJlc3NvZihPcHRpb25hbEJhc2U8VD46
OnN0b3JhZ2VfLnZhbHVlXyk7IH0KLQotIyBpZiBPUFRJT05BTF9IQVNfVEhJU19SVkFMVUVfUkVG
UyA9PSAxCi0gIGNvbnN0ZXhwciBjb25zdCBUJiBjb250YWluZWRfdmFsKCkgY29uc3QmIHsgcmV0
dXJuIE9wdGlvbmFsQmFzZTxUPjo6c3RvcmFnZV8udmFsdWVfOyB9Ci0gIE9QVElPTkFMX01VVEFC
TEVfQ09OU1RFWFBSIFQmJiBjb250YWluZWRfdmFsKCkgJiYgeyByZXR1cm4gc3RkOjptb3ZlKE9w
dGlvbmFsQmFzZTxUPjo6c3RvcmFnZV8udmFsdWVfKTsgfQotICBPUFRJT05BTF9NVVRBQkxFX0NP
TlNURVhQUiBUJiBjb250YWluZWRfdmFsKCkgJiB7IHJldHVybiBPcHRpb25hbEJhc2U8VD46OnN0
b3JhZ2VfLnZhbHVlXzsgfQotIyBlbHNlCi0gIGNvbnN0ZXhwciBjb25zdCBUJiBjb250YWluZWRf
dmFsKCkgY29uc3QgeyByZXR1cm4gT3B0aW9uYWxCYXNlPFQ+OjpzdG9yYWdlXy52YWx1ZV87IH0K
LSAgVCYgY29udGFpbmVkX3ZhbCgpIHsgcmV0dXJuIE9wdGlvbmFsQmFzZTxUPjo6c3RvcmFnZV8u
dmFsdWVfOyB9Ci0jIGVuZGlmCi0KLSAgdm9pZCBjbGVhcigpIF9fTk9FWENFUFQgewotICAgIGlm
IChpbml0aWFsaXplZCgpKSBkYXRhcHRyKCktPlQ6On5UKCk7Ci0gICAgT3B0aW9uYWxCYXNlPFQ+
Ojppbml0XyA9IGZhbHNlOwotICB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+Ci0gIHZv
aWQgaW5pdGlhbGl6ZShBcmdzJiYuLi4gYXJncykgX19OT0VYQ0VQVF8oX19OT0VYQ0VQVF8oVChz
dGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pKSkKLSAgewotICAgIEFTU0VSVCghT3B0aW9uYWxC
YXNlPFQ+Ojppbml0Xyk7Ci0gICAgOjpuZXcgKHN0YXRpY19jYXN0PHZvaWQqPihkYXRhcHRyKCkp
KSBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0gICAgT3B0aW9uYWxCYXNlPFQ+Ojpp
bml0XyA9IHRydWU7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgVSwgY2xhc3MuLi4gQXJncz4K
LSAgdm9pZCBpbml0aWFsaXplKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVPiBpbCwgQXJncyYmLi4u
IGFyZ3MpIF9fTk9FWENFUFRfKF9fTk9FWENFUFRfKFQoaWwsIHN0ZDo6Zm9yd2FyZDxBcmdzPihh
cmdzKS4uLikpKQotICB7Ci0gICAgQVNTRVJUKCFPcHRpb25hbEJhc2U8VD46OmluaXRfKTsKLSAg
ICA6Om5ldyAoc3RhdGljX2Nhc3Q8dm9pZCo+KGRhdGFwdHIoKSkpIFQoaWwsIHN0ZDo6Zm9yd2Fy
ZDxBcmdzPihhcmdzKS4uLik7Ci0gICAgT3B0aW9uYWxCYXNlPFQ+Ojppbml0XyA9IHRydWU7Ci0g
IH0KLQotcHVibGljOgotICB0eXBlZGVmIFQgdmFsdWVfdHlwZTsKLQotICAvLyAyMC41LjUuMSwg
Y29uc3RydWN0b3JzCi0gIGNvbnN0ZXhwciBPcHRpb25hbCgpIF9fTk9FWENFUFQgOiBPcHRpb25h
bEJhc2U8VD4oKSAge307Ci0gIGNvbnN0ZXhwciBPcHRpb25hbChudWxsb3B0X3QpIF9fTk9FWENF
UFQgOiBPcHRpb25hbEJhc2U8VD4oKSB7fTsKLQotICBjb25zdGV4cHIgT3B0aW9uYWwoY29uc3Qg
T3B0aW9uYWwmIHJocykKLSAgOiBPcHRpb25hbEJhc2U8VD4oKQotICB7Ci0gICAgaWYgKHJocy5p
bml0aWFsaXplZCgpKSB7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc190cml2aWFsbHlf
Y29weV9hc3NpZ25hYmxlX3Y8VD4pCi0gICAgICAgICAgICBPcHRpb25hbEJhc2U8VD46OnN0b3Jh
Z2VfID0gKnJoczsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgOjpuZXcgKHN0YXRpY19jYXN0
PHZvaWQqPihkYXRhcHRyKCkpKSBUKCpyaHMpOwotICAgICAgICBPcHRpb25hbEJhc2U8VD46Omlu
aXRfID0gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICBjb25zdGV4cHIgT3B0aW9uYWwoT3B0aW9uYWwm
JiByaHMpIF9fTk9FWENFUFRfKGRldGFpbF86OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxl
PFQ+Ojp2YWx1ZSkKLSAgOiBPcHRpb25hbEJhc2U8VD4oKQotICB7Ci0gICAgaWYgKHJocy5pbml0
aWFsaXplZCgpKSB7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc190cml2aWFsbHlfY29w
eV9hc3NpZ25hYmxlX3Y8VD4pCi0gICAgICAgICAgICBPcHRpb25hbEJhc2U8VD46OnN0b3JhZ2Vf
ID0gKnJoczsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgOjpuZXcgKHN0YXRpY19jYXN0PHZv
aWQqPihkYXRhcHRyKCkpKSBUKHN0ZDo6bW92ZSgqcmhzKSk7Ci0gICAgICAgIE9wdGlvbmFsQmFz
ZTxUPjo6aW5pdF8gPSB0cnVlOwotICAgICAgICByaHMuY2xlYXIoKTsKLSAgICB9Ci0gIH0KLQot
ICBjb25zdGV4cHIgT3B0aW9uYWwoY29uc3QgVCYgdikgOiBPcHRpb25hbEJhc2U8VD4odikge30K
LQotICBjb25zdGV4cHIgT3B0aW9uYWwoVCYmIHYpIDogT3B0aW9uYWxCYXNlPFQ+KGRldGFpbF86
OmNvbnN0ZXhwcl9tb3ZlKHYpKSB7fQotCi0gIHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPgotICBl
eHBsaWNpdCBjb25zdGV4cHIgT3B0aW9uYWwoc3RkOjppbl9wbGFjZV90LCBBcmdzJiYuLi4gYXJn
cykKLSAgICAgIDogT3B0aW9uYWxCYXNlPFQ+KHN0ZDo6aW5fcGxhY2VfdHt9LCBkZXRhaWxfOjpj
b25zdGV4cHJfZm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KLQotICB0ZW1wbGF0ZSA8Y2xhc3Mg
VSwgY2xhc3MuLi4gQXJncywgVFIyX09QVElPTkFMX1JFUVVJUkVTKHN0ZDo6aXNfY29uc3RydWN0
aWJsZTxULCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VT4+KT4KLSAgT1BUSU9OQUxfQ09OU1RFWFBS
X0lOSVRfTElTVCBleHBsaWNpdCBPcHRpb25hbChzdGQ6OmluX3BsYWNlX3QsIHN0ZDo6aW5pdGlh
bGl6ZXJfbGlzdDxVPiBpbCwgQXJncyYmLi4uIGFyZ3MpCi0gICAgICA6IE9wdGlvbmFsQmFzZTxU
PihzdGQ6OmluX3BsYWNlX3R7fSwgaWwsIGRldGFpbF86OmNvbnN0ZXhwcl9mb3J3YXJkPEFyZ3M+
KGFyZ3MpLi4uKSB7fQotCi0gIC8vIDIwLjUuNC4yLCBEZXN0cnVjdG9yCi0gIH5PcHRpb25hbCgp
ID0gZGVmYXVsdDsKLQotICAvLyAyMC41LjQuMywgYXNzaWdubWVudAotICBPcHRpb25hbCYgb3Bl
cmF0b3I9KG51bGxvcHRfdCkgX19OT0VYQ0VQVAotICB7Ci0gICAgY2xlYXIoKTsKLSAgICByZXR1
cm4gKnRoaXM7Ci0gIH0KLQotICBPcHRpb25hbCYgb3BlcmF0b3I9KGNvbnN0IE9wdGlvbmFsJiBy
aHMpCi0gIHsKLSAgICBpZiAgICAgIChpbml0aWFsaXplZCgpID09IHRydWUgICYmIHJocy5pbml0
aWFsaXplZCgpID09IGZhbHNlKSBjbGVhcigpOwotICAgIGVsc2UgaWYgKGluaXRpYWxpemVkKCkg
PT0gZmFsc2UgJiYgcmhzLmluaXRpYWxpemVkKCkgPT0gdHJ1ZSkgIGluaXRpYWxpemUoKnJocyk7
Ci0gICAgZWxzZSBpZiAoaW5pdGlhbGl6ZWQoKSA9PSB0cnVlICAmJiByaHMuaW5pdGlhbGl6ZWQo
KSA9PSB0cnVlKSAgY29udGFpbmVkX3ZhbCgpID0gKnJoczsKLSAgICByZXR1cm4gKnRoaXM7Ci0g
IH0KLQotICBPcHRpb25hbCYgb3BlcmF0b3I9KE9wdGlvbmFsJiYgcmhzKQotICBfX05PRVhDRVBU
XyhkZXRhaWxfOjppc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTxUPjo6dmFsdWUgJiYgZGV0YWls
Xzo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8VD46OnZhbHVlKQotICB7Ci0gICAgaWYg
ICAgICAoaW5pdGlhbGl6ZWQoKSA9PSB0cnVlICAmJiByaHMuaW5pdGlhbGl6ZWQoKSA9PSBmYWxz
ZSkgY2xlYXIoKTsKLSAgICBlbHNlIGlmIChpbml0aWFsaXplZCgpID09IGZhbHNlICYmIHJocy5p
bml0aWFsaXplZCgpID09IHRydWUpICB7IGluaXRpYWxpemUoc3RkOjptb3ZlKCpyaHMpKTsgcmhz
LmNsZWFyKCk7IH0KLSAgICBlbHNlIGlmIChpbml0aWFsaXplZCgpID09IHRydWUgICYmIHJocy5p
bml0aWFsaXplZCgpID09IHRydWUpICB7IGNvbnRhaW5lZF92YWwoKSA9IHN0ZDo6bW92ZSgqcmhz
KTsgcmhzLmNsZWFyKCk7IH0KLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8
Y2xhc3MgVT4KLSAgYXV0byBvcGVyYXRvcj0oVSYmIHYpCi0gIC0+IHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmCi0gIDwKLSAgICBzdGQ6OmlzX3NhbWU8dHlwZW5hbWUgc3RkOjpkZWNheTxVPjo6dHlw
ZSwgVD46OnZhbHVlLAotICAgIE9wdGlvbmFsJgotICA+Ojp0eXBlCi0gIHsKLSAgICBpZiAoaW5p
dGlhbGl6ZWQoKSkgeyBjb250YWluZWRfdmFsKCkgPSBzdGQ6OmZvcndhcmQ8VT4odik7IH0KLSAg
ICBlbHNlICAgICAgICAgICAgICAgeyBpbml0aWFsaXplKHN0ZDo6Zm9yd2FyZDxVPih2KSk7ICB9
Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gQXJncz4K
LSAgdm9pZCBlbXBsYWNlKEFyZ3MmJi4uLiBhcmdzKQotICB7Ci0gICAgY2xlYXIoKTsKLSAgICBp
bml0aWFsaXplKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0gIH0KLQotICB0ZW1wbGF0
ZSA8Y2xhc3MgVSwgY2xhc3MuLi4gQXJncz4KLSAgdm9pZCBlbXBsYWNlKHN0ZDo6aW5pdGlhbGl6
ZXJfbGlzdDxVPiBpbCwgQXJncyYmLi4uIGFyZ3MpCi0gIHsKLSAgICBjbGVhcigpOwotICAgIGlu
aXRpYWxpemU8VSwgQXJncy4uLj4oaWwsIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0g
IH0KLQotICAvLyAyMC41LjQuNCwgU3dhcAotICB2b2lkIHN3YXAoT3B0aW9uYWw8VD4mIHJocykg
X19OT0VYQ0VQVF8oZGV0YWlsXzo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8VD46OnZh
bHVlICYmIF9fTk9FWENFUFRfKHN3YXAoc3RkOjpkZWNsdmFsPFQmPigpLCBzdGQ6OmRlY2x2YWw8
VCY+KCkpKSkKLSAgewotICAgIGlmICAgICAgKGluaXRpYWxpemVkKCkgPT0gdHJ1ZSAgJiYgcmhz
LmluaXRpYWxpemVkKCkgPT0gZmFsc2UpIHsgcmhzLmluaXRpYWxpemUoc3RkOjptb3ZlKCoqdGhp
cykpOyBjbGVhcigpOyB9Ci0gICAgZWxzZSBpZiAoaW5pdGlhbGl6ZWQoKSA9PSBmYWxzZSAmJiBy
aHMuaW5pdGlhbGl6ZWQoKSA9PSB0cnVlKSAgeyBpbml0aWFsaXplKHN0ZDo6bW92ZSgqcmhzKSk7
IHJocy5jbGVhcigpOyB9Ci0gICAgZWxzZSBpZiAoaW5pdGlhbGl6ZWQoKSA9PSB0cnVlICAmJiBy
aHMuaW5pdGlhbGl6ZWQoKSA9PSB0cnVlKSAgeyB1c2luZyBzdGQ6OnN3YXA7IHN3YXAoKip0aGlz
LCAqcmhzKTsgfQotICB9Ci0KLSAgLy8gMjAuNS40LjUsIE9ic2VydmVycwotCi0gIGV4cGxpY2l0
IGNvbnN0ZXhwciBvcGVyYXRvciBib29sKCkgY29uc3QgX19OT0VYQ0VQVCB7IHJldHVybiBpbml0
aWFsaXplZCgpOyB9Ci0gIGNvbnN0ZXhwciBib29sIGhhc1ZhbHVlKCkgY29uc3QgX19OT0VYQ0VQ
VCB7IHJldHVybiBpbml0aWFsaXplZCgpOyB9Ci0KLSAgY29uc3RleHByIFQgY29uc3QqIG9wZXJh
dG9yIC0+KCkgY29uc3QgewotICAgIFJFTEVBU0VfQVNTRVJUX1VOREVSX0NPTlNURVhQUl9DT05U
RVhUKGluaXRpYWxpemVkKCkpOwotICAgIHJldHVybiBkYXRhcHRyKCk7Ci0gIH0KLQotICBPUFRJ
T05BTF9NVVRBQkxFX0NPTlNURVhQUiBUKiBvcGVyYXRvciAtPigpIHsKLSAgICBSRUxFQVNFX0FT
U0VSVF9VTkRFUl9DT05TVEVYUFJfQ09OVEVYVChpbml0aWFsaXplZCgpKTsKLSAgICByZXR1cm4g
ZGF0YXB0cigpOwotICB9Ci0KLSAgY29uc3RleHByIFQgY29uc3QmIG9wZXJhdG9yICooKSBjb25z
dCYgewotICAgIFJFTEVBU0VfQVNTRVJUX1VOREVSX0NPTlNURVhQUl9DT05URVhUKGluaXRpYWxp
emVkKCkpOwotICAgIHJldHVybiBjb250YWluZWRfdmFsKCk7Ci0gIH0KLQotICBPUFRJT05BTF9N
VVRBQkxFX0NPTlNURVhQUiBUJiBvcGVyYXRvciAqKCkgJiB7Ci0gICAgUkVMRUFTRV9BU1NFUlRf
VU5ERVJfQ09OU1RFWFBSX0NPTlRFWFQoaW5pdGlhbGl6ZWQoKSk7Ci0gICAgcmV0dXJuIGNvbnRh
aW5lZF92YWwoKTsKLSAgfQotCi0gIE9QVElPTkFMX01VVEFCTEVfQ09OU1RFWFBSIFQmJiBvcGVy
YXRvciAqKCkgJiYgewotICAgIFJFTEVBU0VfQVNTRVJUX1VOREVSX0NPTlNURVhQUl9DT05URVhU
KGluaXRpYWxpemVkKCkpOwotICAgIHJldHVybiBkZXRhaWxfOjpjb25zdGV4cHJfbW92ZShjb250
YWluZWRfdmFsKCkpOwotICB9Ci0KLSAgY29uc3RleHByIFQgY29uc3QmIHZhbHVlKCkgY29uc3Qm
IHsKLSAgICBSRUxFQVNFX0FTU0VSVF9VTkRFUl9DT05TVEVYUFJfQ09OVEVYVChpbml0aWFsaXpl
ZCgpKTsKLSAgICByZXR1cm4gY29udGFpbmVkX3ZhbCgpOwotICB9Ci0KLSAgT1BUSU9OQUxfTVVU
QUJMRV9DT05TVEVYUFIgVCYgdmFsdWUoKSAmIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9VTkRFUl9D
T05TVEVYUFJfQ09OVEVYVChpbml0aWFsaXplZCgpKTsKLSAgICByZXR1cm4gY29udGFpbmVkX3Zh
bCgpOwotICB9Ci0KLSAgT1BUSU9OQUxfTVVUQUJMRV9DT05TVEVYUFIgVCYmIHZhbHVlKCkgJiYg
ewotICAgIFJFTEVBU0VfQVNTRVJUX1VOREVSX0NPTlNURVhQUl9DT05URVhUKGluaXRpYWxpemVk
KCkpOwotICAgIHJldHVybiBzdGQ6Om1vdmUoY29udGFpbmVkX3ZhbCgpKTsKLSAgfQotCi0jIGlm
IE9QVElPTkFMX0hBU19USElTX1JWQUxVRV9SRUZTID09IDEKLQotICB0ZW1wbGF0ZSA8Y2xhc3Mg
Vj4KLSAgY29uc3RleHByIFQgdmFsdWVPcihWJiYgdikgY29uc3QmCi0gIHsKLSAgICByZXR1cm4g
KnRoaXMgPyAqKnRoaXMgOiBkZXRhaWxfOjpjb252ZXJ0PFQ+KGRldGFpbF86OmNvbnN0ZXhwcl9m
b3J3YXJkPFY+KHYpKTsKLSAgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBWPgotICBPUFRJT05BTF9N
VVRBQkxFX0NPTlNURVhQUiBUIHZhbHVlT3IoViYmIHYpICYmCi0gIHsKLSAgICByZXR1cm4gKnRo
aXMgPyBkZXRhaWxfOjpjb25zdGV4cHJfbW92ZShjb25zdF9jYXN0PE9wdGlvbmFsPFQ+Jj4oKnRo
aXMpLmNvbnRhaW5lZF92YWwoKSkgOiBkZXRhaWxfOjpjb252ZXJ0PFQ+KGRldGFpbF86OmNvbnN0
ZXhwcl9mb3J3YXJkPFY+KHYpKTsKLSAgfQotCi0jIGVsc2UKLQotICB0ZW1wbGF0ZSA8Y2xhc3Mg
Vj4KLSAgY29uc3RleHByIFQgdmFsdWVPcihWJiYgdikgY29uc3QKLSAgewotICAgIHJldHVybiAq
dGhpcyA/ICoqdGhpcyA6IGRldGFpbF86OmNvbnZlcnQ8VD4oZGV0YWlsXzo6Y29uc3RleHByX2Zv
cndhcmQ8Vj4odikpOwotICB9Ci0KLSMgZW5kaWYKLQotICAvLyAyMC42LjMuNiwgbW9kaWZpZXJz
Ci0gIHZvaWQgcmVzZXQoKSBfX05PRVhDRVBUIHsgY2xlYXIoKTsgfQotfTsKLQotCi10ZW1wbGF0
ZSA8Y2xhc3MgVD4KLWNsYXNzIE9wdGlvbmFsPFQmPgotewotICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLSAgc3RhdGljX2Fzc2VydCggIXN0ZDo6aXNfc2FtZTxULCBudWxsb3B0X3Q+Ojp2YWx1
ZSwgImJhZCBUIiApOwotICBzdGF0aWNfYXNzZXJ0KCAhc3RkOjppc19zYW1lPFQsIHN0ZDo6aW5f
cGxhY2VfdD46OnZhbHVlLCAiYmFkIFQiICk7Ci0gIFQqIHJlZjsKLQotcHVibGljOgotCi0gIC8v
IDIwLjUuNS4xLCBjb25zdHJ1Y3Rpb24vZGVzdHJ1Y3Rpb24KLSAgY29uc3RleHByIE9wdGlvbmFs
KCkgX19OT0VYQ0VQVCA6IHJlZihudWxscHRyKSB7fQotCi0gIGNvbnN0ZXhwciBPcHRpb25hbChu
dWxsb3B0X3QpIF9fTk9FWENFUFQgOiByZWYobnVsbHB0cikge30KLQotICBjb25zdGV4cHIgT3B0
aW9uYWwoVCYgdikgX19OT0VYQ0VQVCA6IHJlZihkZXRhaWxfOjpzdGF0aWNfYWRkcmVzc29mKHYp
KSB7fQotCi0gIE9wdGlvbmFsKFQmJikgPSBkZWxldGU7Ci0KLSAgY29uc3RleHByIE9wdGlvbmFs
KGNvbnN0IE9wdGlvbmFsJiByaHMpIF9fTk9FWENFUFQgOiByZWYocmhzLnJlZikge30KLQotICBl
eHBsaWNpdCBjb25zdGV4cHIgT3B0aW9uYWwoc3RkOjppbl9wbGFjZV90LCBUJiB2KSBfX05PRVhD
RVBUIDogcmVmKGRldGFpbF86OnN0YXRpY19hZGRyZXNzb2YodikpIHt9Ci0KLSAgZXhwbGljaXQg
T3B0aW9uYWwoc3RkOjppbl9wbGFjZV90LCBUJiYpID0gZGVsZXRlOwotCi0gIH5PcHRpb25hbCgp
ID0gZGVmYXVsdDsKLQotICAvLyAyMC41LjUuMiwgbXV0YXRpb24KLSAgT3B0aW9uYWwmIG9wZXJh
dG9yPShudWxsb3B0X3QpIF9fTk9FWENFUFQgewotICAgIHJlZiA9IG51bGxwdHI7Ci0gICAgcmV0
dXJuICp0aGlzOwotICB9Ci0KLSAgLy8gT3B0aW9uYWwmIG9wZXJhdG9yPShjb25zdCBPcHRpb25h
bCYgcmhzKSBfX05PRVhDRVBUIHsKLSAgICAvLyByZWYgPSByaHMucmVmOwotICAgIC8vIHJldHVy
biAqdGhpczsKLSAgLy8gfQotCi0gIC8vIE9wdGlvbmFsJiBvcGVyYXRvcj0oT3B0aW9uYWwmJiBy
aHMpIF9fTk9FWENFUFQgewotICAgIC8vIHJlZiA9IHJocy5yZWY7Ci0gICAgLy8gcmV0dXJuICp0
aGlzOwotICAvLyB9Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gIGF1dG8gb3BlcmF0b3I9
KFUmJiByaHMpIF9fTk9FWENFUFQKLSAgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWYKLSAgPAot
ICAgIHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBzdGQ6OmRlY2F5PFU+Ojp0eXBlLCBPcHRpb25hbDxU
Jj4+Ojp2YWx1ZSwKLSAgICBPcHRpb25hbCYKLSAgPjo6dHlwZQotICB7Ci0gICAgcmVmID0gcmhz
LnJlZjsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4K
LSAgYXV0byBvcGVyYXRvcj0oVSYmIHJocykgX19OT0VYQ0VQVAotICAtPiB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZgotICA8Ci0gICAgIXN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBzdGQ6OmRlY2F5PFU+
Ojp0eXBlLCBPcHRpb25hbDxUJj4+Ojp2YWx1ZSwKLSAgICBPcHRpb25hbCYKLSAgPjo6dHlwZQot
ICA9IGRlbGV0ZTsKLQotICB2b2lkIGVtcGxhY2UoVCYgdikgX19OT0VYQ0VQVCB7Ci0gICAgcmVm
ID0gZGV0YWlsXzo6c3RhdGljX2FkZHJlc3NvZih2KTsKLSAgfQotCi0gIHZvaWQgZW1wbGFjZShU
JiYpID0gZGVsZXRlOwotCi0KLSAgdm9pZCBzd2FwKE9wdGlvbmFsPFQmPiYgcmhzKSBfX05PRVhD
RVBUCi0gIHsKLSAgICBzdGQ6OnN3YXAocmVmLCByaHMucmVmKTsKLSAgfQotCi0gIC8vIDIwLjUu
NS4zLCBvYnNlcnZlcnMKLSAgY29uc3RleHByIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7Ci0gICAg
UkVMRUFTRV9BU1NFUlRfVU5ERVJfQ09OU1RFWFBSX0NPTlRFWFQocmVmKTsKLSAgICByZXR1cm4g
cmVmOwotICB9Ci0KLSAgY29uc3RleHByIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsKLSAgICBSRUxF
QVNFX0FTU0VSVF9VTkRFUl9DT05TVEVYUFJfQ09OVEVYVChyZWYpOwotICAgIHJldHVybiAqcmVm
OwotICB9Ci0KLSAgY29uc3RleHByIFQmIHZhbHVlKCkgY29uc3QgewotICAgIFJFTEVBU0VfQVNT
RVJUX1VOREVSX0NPTlNURVhQUl9DT05URVhUKHJlZigpKTsKLSAgICByZXR1cm4gKnJlZjsKLSAg
fQotCi0gIGV4cGxpY2l0IGNvbnN0ZXhwciBvcGVyYXRvciBib29sKCkgY29uc3QgX19OT0VYQ0VQ
VCB7Ci0gICAgcmV0dXJuIHJlZiAhPSBudWxscHRyOwotICB9Ci0KLSAgY29uc3RleHByIGJvb2wg
aGFzVmFsdWUoKSBjb25zdCBfX05PRVhDRVBUIHsKLSAgICByZXR1cm4gcmVmICE9IG51bGxwdHI7
Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgVj4KLSAgY29uc3RleHByIHR5cGVuYW1lIHN0ZDo6
ZGVjYXk8VD46OnR5cGUgdmFsdWVPcihWJiYgdikgY29uc3QKLSAgewotICAgIHJldHVybiAqdGhp
cyA/ICoqdGhpcyA6IGRldGFpbF86OmNvbnZlcnQ8dHlwZW5hbWUgc3RkOjpkZWNheTxUPjo6dHlw
ZT4oZGV0YWlsXzo6Y29uc3RleHByX2ZvcndhcmQ8Vj4odikpOwotICB9Ci0KLSAgLy8geC54Lngu
eCwgbW9kaWZpZXJzCi0gIHZvaWQgcmVzZXQoKSBfX05PRVhDRVBUIHsgcmVmID0gbnVsbHB0cjsg
fQotfTsKLQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLWNsYXNzIE9wdGlvbmFsPFQmJj4KLXsKLSAg
c3RhdGljX2Fzc2VydCggc2l6ZW9mKFQpID09IDAsICJPcHRpb25hbCBydmFsdWUgcmVmZXJlbmNl
cyBkaXNhbGxvd2VkIiApOwotfTsKLQotCi0vLyAyMC41LjgsIFJlbGF0aW9uYWwgb3BlcmF0b3Jz
Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPcHRp
b25hbDxUPiYgeCwgY29uc3QgT3B0aW9uYWw8VD4mIHkpCi17Ci0gIHJldHVybiBib29sKHgpICE9
IGJvb2woeSkgPyBmYWxzZSA6IGJvb2woeCkgPT0gZmFsc2UgPyB0cnVlIDogKnggPT0gKnk7Ci19
Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE9w
dGlvbmFsPFQ+JiB4LCBjb25zdCBPcHRpb25hbDxUPiYgeSkKLXsKLSAgcmV0dXJuICEoeCA9PSB5
KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChjb25z
dCBPcHRpb25hbDxUPiYgeCwgY29uc3QgT3B0aW9uYWw8VD4mIHkpCi17Ci0gIHJldHVybiAoIXkp
ID8gZmFsc2UgOiAoIXgpID8gdHJ1ZSA6ICp4IDwgKnk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBU
PiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0IE9w
dGlvbmFsPFQ+JiB5KQotewotICByZXR1cm4gKHkgPCB4KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNz
IFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0oY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0
IE9wdGlvbmFsPFQ+JiB5KQotewotICByZXR1cm4gISh5IDwgeCk7Ci19Ci0KLXRlbXBsYXRlIDxj
bGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBj
b25zdCBPcHRpb25hbDxUPiYgeSkKLXsKLSAgcmV0dXJuICEoeCA8IHkpOwotfQotCi0KLS8vIDIw
LjUuOSwgQ29tcGFyaXNvbiB3aXRoIG51bGxvcHQKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4
cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBudWxsb3B0X3QpIF9fTk9F
WENFUFQKLXsKLSAgcmV0dXJuICgheCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4
cHIgYm9vbCBvcGVyYXRvcj09KG51bGxvcHRfdCwgY29uc3QgT3B0aW9uYWw8VD4mIHgpIF9fTk9F
WENFUFQKLXsKLSAgcmV0dXJuICgheCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4
cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBudWxsb3B0X3QpIF9fTk9F
WENFUFQKLXsKLSAgcmV0dXJuIGJvb2woeCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25z
dGV4cHIgYm9vbCBvcGVyYXRvciE9KG51bGxvcHRfdCwgY29uc3QgT3B0aW9uYWw8VD4mIHgpIF9f
Tk9FWENFUFQKLXsKLSAgcmV0dXJuIGJvb2woeCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoY29uc3QgT3B0aW9uYWw8VD4mLCBudWxsb3B0X3QpIF9f
Tk9FWENFUFQKLXsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29u
c3RleHByIGJvb2wgb3BlcmF0b3I8KG51bGxvcHRfdCwgY29uc3QgT3B0aW9uYWw8VD4mIHgpIF9f
Tk9FWENFUFQKLXsKLSAgcmV0dXJuIGJvb2woeCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBudWxsb3B0X3Qp
IF9fTk9FWENFUFQKLXsKLSAgcmV0dXJuICgheCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KG51bGxvcHRfdCwgY29uc3QgT3B0aW9uYWw8VD4mKSBf
X05PRVhDRVBUCi17Ci0gIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29u
c3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBudWxsb3B0X3QpIF9f
Tk9FWENFUFQKLXsKLSAgcmV0dXJuIGJvb2woeCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcj4obnVsbG9wdF90LCBjb25zdCBPcHRpb25hbDxUPiYpIF9f
Tk9FWENFUFQKLXsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29u
c3RleHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCBPcHRpb25hbDxUPiYsIG51bGxvcHRfdCkgX19O
T0VYQ0VQVAotewotICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0
ZXhwciBib29sIG9wZXJhdG9yPj0obnVsbG9wdF90LCBjb25zdCBPcHRpb25hbDxUPiYgeCkgX19O
T0VYQ0VQVAotewotICByZXR1cm4gKCF4KTsKLX0KLQotCi0KLS8vIDIwLjUuMTAsIENvbXBhcmlz
b24gd2l0aCBUCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBPcHRpb25hbDxUPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAq
eCA9PSB2IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPFQ+JiB4KQotewotICByZXR1cm4g
Ym9vbCh4KSA/IHYgPT0gKnggOiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0
ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0IFQmIHYpCi17
Ci0gIHJldHVybiBib29sKHgpID8gKnggIT0gdiA6IHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFz
cyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFs
PFQ+JiB4KQotewotICByZXR1cm4gYm9vbCh4KSA/IHYgIT0gKnggOiB0cnVlOwotfQotCi10ZW1w
bGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IE9wdGlvbmFsPFQ+
JiB4LCBjb25zdCBUJiB2KQotewotICByZXR1cm4gYm9vbCh4KSA/ICp4IDwgdiA6IHRydWU7Ci19
Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgVCYg
diwgY29uc3QgT3B0aW9uYWw8VD4mIHgpCi17Ci0gIHJldHVybiBib29sKHgpID8gdiA+ICp4IDog
dHJ1ZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihj
b25zdCBPcHRpb25hbDxUPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAq
eCA+IHYgOiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9w
ZXJhdG9yPChjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxUPiYgeCkKLXsKLSAgcmV0dXJuIGJv
b2woeCkgPyB2IDwgKnggOiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhw
ciBib29sIG9wZXJhdG9yPj0oY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0IFQmIHYpCi17Ci0g
IHJldHVybiBib29sKHgpID8gKnggPj0gdiA6IGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3Mg
VD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxU
PiYgeCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2IDw9ICp4IDogZmFsc2U7Ci19Ci0KLXRlbXBs
YXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IE9wdGlvbmFsPFQ+
JiB4LCBjb25zdCBUJiB2KQotewotICByZXR1cm4gYm9vbCh4KSA/ICp4IDw9IHYgOiB0cnVlOwot
fQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCBU
JiB2LCBjb25zdCBPcHRpb25hbDxUPiYgeCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2ID49ICp4
IDogdHJ1ZTsKLX0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgT3B0aW9uYWwgPSBzdGQ6
Om9wdGlvbmFsPFQ+OworY29uc3RleHByIGF1dG8gbnVsbG9wdCA9IHN0ZDo6bnVsbG9wdDsKK3Vz
aW5nIG51bGxvcHRfdCA9IHN0ZDo6bnVsbG9wdF90OwogCi0vLyBDb21wYXJpc29uIG9mIE9wdGlv
bmFsPFQmPiB3aXRoIFQKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IE9wdGlvbmFsPFQmPiYgeCwgY29uc3QgVCYgdikKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+IGNvbnN0ZXhwciBzdGQ6Om9wdGlvbmFsPHN0
ZDo6ZGVjYXlfdDxUPj4gbWFrZU9wdGlvbmFsKFQmJiB2YWx1ZSkKIHsKLSAgcmV0dXJuIGJvb2wo
eCkgPyAqeCA9PSB2IDogZmFsc2U7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV9vcHRpb25hbDxzdGQ6
OmRlY2F5X3Q8VD4+KHN0ZDo6Zm9yd2FyZDxUPih2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZSA8Y2xh
c3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUJiB2LCBjb25zdCBPcHRpb25h
bDxUJj4mIHgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVz
PiBjb25zdGV4cHIgc3RkOjpvcHRpb25hbDxUPiBtYWtlT3B0aW9uYWwoQXJndW1lbnRUeXBlcyYm
Li4uIGFyZ3VtZW50cykKIHsKLSAgcmV0dXJuIGJvb2woeCkgPyB2ID09ICp4IDogZmFsc2U7Cisg
ICAgcmV0dXJuIHN0ZDo6bWFrZV9vcHRpb25hbDxUPihzdGQ6OmZvcndhcmQ8QXJndW1lbnRUeXBl
cz4oYXJndW1lbnRzKS4uLik7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IE9wdGlvbmFsPFQmPiYgeCwgY29uc3QgVCYgdikKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+IGNvbnN0
ZXhwciBzdGQ6Om9wdGlvbmFsPFQ+IG1ha2VPcHRpb25hbChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8
VT4gbGlzdCwgQXJndW1lbnRUeXBlcyYmLi4uIGFyZ3VtZW50cykKIHsKLSAgcmV0dXJuIGJvb2wo
eCkgPyAqeCAhPSB2IDogdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjptYWtlX29wdGlvbmFsPFQ+KGxp
c3QsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudFR5cGVzPihhcmd1bWVudHMpLi4uKTsKIH0KIAotdGVt
cGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgVCYgdiwgY29u
c3QgT3B0aW9uYWw8VCY+JiB4KQorLy8gRklYTUU6IFdlIHByb2JhYmx5IGRvbid0IG5lZWQgdGhp
czsgaXQncyBvbmx5IHVzZWQgaW4gNSBwbGFjZXMuCit0ZW1wbGF0ZTx0eXBlbmFtZSBPcHRpb25h
bFR5cGUsIGNsYXNzIENhbGxiYWNrPiBhdXRvIHZhbHVlT3JDb21wdXRlKE9wdGlvbmFsVHlwZSBv
cHRpb25hbCwgQ2FsbGJhY2sgY2FsbGJhY2spIC0+IHR5cGVuYW1lIE9wdGlvbmFsVHlwZTo6dmFs
dWVfdHlwZQogewotICByZXR1cm4gYm9vbCh4KSA/IHYgIT0gKnggOiB0cnVlOwotfQotCi10ZW1w
bGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IE9wdGlvbmFsPFQm
PiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA8IHYgOiB0cnVlOwot
fQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFQm
IHYsIGNvbnN0IE9wdGlvbmFsPFQmPiYgeCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2ID4gKngg
OiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+
KGNvbnN0IE9wdGlvbmFsPFQmPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkg
PyAqeCA+IHYgOiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29s
IG9wZXJhdG9yPChjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxUJj4mIHgpCi17Ci0gIHJldHVy
biBib29sKHgpID8gdiA8ICp4IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25z
dGV4cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0IE9wdGlvbmFsPFQmPiYgeCwgY29uc3QgVCYgdikK
LXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA+PSB2IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxj
bGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlv
bmFsPFQmPiYgeCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2IDw9ICp4IDogZmFsc2U7Ci19Ci0K
LXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IE9wdGlv
bmFsPFQmPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA8PSB2IDog
dHJ1ZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0o
Y29uc3QgVCYgdiwgY29uc3QgT3B0aW9uYWw8VCY+JiB4KQotewotICByZXR1cm4gYm9vbCh4KSA/
IHYgPj0gKnggOiB0cnVlOwotfQotCi0vLyBDb21wYXJpc29uIG9mIE9wdGlvbmFsPFQgY29uc3Qm
PiB3aXRoIFQKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IE9wdGlvbmFsPGNvbnN0IFQmPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2wo
eCkgPyAqeCA9PSB2IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPGNvbnN0IFQmPiYgeCkK
LXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2ID09ICp4IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxj
bGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE9wdGlvbmFsPGNvbnN0IFQm
PiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCAhPSB2IDogdHJ1ZTsK
LX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3Qg
VCYgdiwgY29uc3QgT3B0aW9uYWw8Y29uc3QgVCY+JiB4KQotewotICByZXR1cm4gYm9vbCh4KSA/
IHYgIT0gKnggOiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wg
b3BlcmF0b3I8KGNvbnN0IE9wdGlvbmFsPGNvbnN0IFQmPiYgeCwgY29uc3QgVCYgdikKLXsKLSAg
cmV0dXJuIGJvb2woeCkgPyAqeCA8IHYgOiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4g
Y29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPGNvbnN0
IFQmPiYgeCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2ID4gKnggOiB0cnVlOwotfQotCi10ZW1w
bGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IE9wdGlvbmFsPGNv
bnN0IFQmPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA+IHYgOiBm
YWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChj
b25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxjb25zdCBUJj4mIHgpCi17Ci0gIHJldHVybiBib29s
KHgpID8gdiA8ICp4IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIg
Ym9vbCBvcGVyYXRvcj49KGNvbnN0IE9wdGlvbmFsPGNvbnN0IFQmPiYgeCwgY29uc3QgVCYgdikK
LXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA+PSB2IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxj
bGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlv
bmFsPGNvbnN0IFQmPiYgeCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2IDw9ICp4IDogZmFsc2U7
Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0
IE9wdGlvbmFsPGNvbnN0IFQmPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkg
PyAqeCA8PSB2IDogdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29s
IG9wZXJhdG9yPj0oY29uc3QgVCYgdiwgY29uc3QgT3B0aW9uYWw8Y29uc3QgVCY+JiB4KQotewot
ICByZXR1cm4gYm9vbCh4KSA/IHYgPj0gKnggOiB0cnVlOwotfQotCi0KLS8vIDIwLjUuMTIsIFNw
ZWNpYWxpemVkIGFsZ29yaXRobXMKLXRlbXBsYXRlIDxjbGFzcyBUPgotdm9pZCBzd2FwKE9wdGlv
bmFsPFQ+JiB4LCBPcHRpb25hbDxUPiYgeSkgX19OT0VYQ0VQVF8oX19OT0VYQ0VQVF8oeC5zd2Fw
KHkpKSkKLXsKLSAgeC5zd2FwKHkpOwotfQotCi0KLXRlbXBsYXRlIDxjbGFzcyBUPgotY29uc3Rl
eHByIE9wdGlvbmFsPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VD46OnR5cGU+IG1ha2VPcHRpb25hbChU
JiYgdikKLXsKLSAgcmV0dXJuIE9wdGlvbmFsPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VD46OnR5cGU+
KGRldGFpbF86OmNvbnN0ZXhwcl9mb3J3YXJkPFQ+KHYpKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNz
IFg+Ci1jb25zdGV4cHIgT3B0aW9uYWw8WCY+IG1ha2VPcHRpb25hbChzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPFg+IHYpCi17Ci0gIHJldHVybiBPcHRpb25hbDxYJj4odi5nZXQoKSk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdURgotCi1uYW1lc3BhY2Ugc3RkCi17Ci0gIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgotICBzdHJ1Y3QgaGFzaDxXVEY6Ok9wdGlvbmFsPFQ+PgotICB7Ci0gICAgdHlwZWRlZiB0
eXBlbmFtZSBoYXNoPFQ+OjpyZXN1bHRfdHlwZSByZXN1bHRfdHlwZTsKLSAgICB0eXBlZGVmIFdU
Rjo6T3B0aW9uYWw8VD4gYXJndW1lbnRfdHlwZTsKLQotICAgIGNvbnN0ZXhwciByZXN1bHRfdHlw
ZSBvcGVyYXRvcigpKGFyZ3VtZW50X3R5cGUgY29uc3QmIGFyZykgY29uc3QgewotICAgICAgcmV0
dXJuIGFyZyA/IHN0ZDo6aGFzaDxUPnt9KCphcmcpIDogcmVzdWx0X3R5cGV7fTsKLSAgICB9Ci0g
IH07Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gIHN0cnVjdCBoYXNoPFdURjo6T3B0aW9u
YWw8VCY+PgotICB7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBoYXNoPFQ+OjpyZXN1bHRfdHlwZSBy
ZXN1bHRfdHlwZTsKLSAgICB0eXBlZGVmIFdURjo6T3B0aW9uYWw8VCY+IGFyZ3VtZW50X3R5cGU7
Ci0KLSAgICBjb25zdGV4cHIgcmVzdWx0X3R5cGUgb3BlcmF0b3IoKShhcmd1bWVudF90eXBlIGNv
bnN0JiBhcmcpIGNvbnN0IHsKLSAgICAgIHJldHVybiBhcmcgPyBzdGQ6Omhhc2g8VD57fSgqYXJn
KSA6IHJlc3VsdF90eXBle307Ci0gICAgfQotICB9OwotfQotCi0jIHVuZGVmIFRSMl9PUFRJT05B
TF9SRVFVSVJFUwotCi1uYW1lc3BhY2UgV1RGIHsKLQotLy8gLS0gV2ViS2l0IEFkZGl0aW9ucyAt
LQotdGVtcGxhdGUgPGNsYXNzIE9wdGlvbmFsVHlwZSwgY2xhc3MgQ2FsbGJhY2s+Ci1BTFdBWVNf
SU5MSU5FCi1hdXRvIHZhbHVlT3JDb21wdXRlKE9wdGlvbmFsVHlwZSBPcHRpb25hbCwgQ2FsbGJh
Y2sgY2FsbGJhY2spIC0+IHR5cGVuYW1lIE9wdGlvbmFsVHlwZTo6dmFsdWVfdHlwZQotewotICAg
IGlmIChPcHRpb25hbCkKLSAgICAgICAgcmV0dXJuICpPcHRpb25hbDsKLSAgICByZXR1cm4gY2Fs
bGJhY2soKTsKKyAgICByZXR1cm4gb3B0aW9uYWwgPyAqb3B0aW9uYWwgOiBjYWxsYmFjaygpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKQEAgLTEwNDksMyArNTQsNyBAQCBhdXRvIHZhbHVlT3JD
b21wdXRlKE9wdGlvbmFsVHlwZSBPcHRpb25hbCwgQ2FsbGJhY2sgY2FsbGJhY2spIC0+IHR5cGVu
YW1lIE9wdGlvbgogdXNpbmcgV1RGOjpPcHRpb25hbDsKIHVzaW5nIFdURjo6bWFrZU9wdGlvbmFs
OwogdXNpbmcgV1RGOjp2YWx1ZU9yQ29tcHV0ZTsKKworLy8gRklYTUU6IFRoZXNlIG1hY3JvcyBh
cmUgYSB3b3JrYXJvdW5kIHRvIGFsbG93IHVzIHRvIHVzZSBzdGQ6Om9wdGlvbmFsIHdpdGhvdXQg
YSBnbG9iYWwgcmVwbGFjZTsgdGhleSBjYW4gYmUgcmVtb3ZlZCBhZnRlciBzYWlkIGdsb2JhbCBy
ZXBsYWNlLgorI2RlZmluZSBoYXNWYWx1ZSBoYXNfdmFsdWUKKyNkZWZpbmUgdmFsdWVPciB2YWx1
ZV9vcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU2Vjb25kcy5oIGIvU291cmNlL1dURi93
dGYvU2Vjb25kcy5oCmluZGV4IGMxYmUzOTI3MzgyZWI2YmZlOTUzMDc4ZmU1YmEyMDE3ZjJmOTI5
YjYuLjUzYmNiYzY1OTlkYzUzMGM4N2Y4NTc2YzZhOWRhZGNiM2EwNjIxMzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL1NlY29uZHMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmgK
QEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlIDx3dGYvRmFzdE1h
bGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3Rl
bnRDb2Rlci5oIGIvU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVyLmgK
aW5kZXggY2M3NDhjOTNhYzgyODEyZTg2NmFmNjdlY2ZkOGZmNjNlOWNkNGU3OC4uNjE1YmQxMjU3
Yzg5NzI0MDc0M2YzYjU1YTI2MjEzYjYyYTAzOTA4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVyLmgKKysrIGIvU291cmNlL1dURi93dGYvcGVy
c2lzdGVuY2UvUGVyc2lzdGVudENvZGVyLmgKQEAgLTI1LDEwICsyNSw5IEBACiAKICNwcmFnbWEg
b25jZQogCi1uYW1lc3BhY2UgV1RGIHsKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCi10ZW1w
bGF0ZSA8Y2xhc3MgVD4KLWNsYXNzIE9wdGlvbmFsOworbmFtZXNwYWNlIFdURiB7CiAKIG5hbWVz
cGFjZSBQZXJzaXN0ZW5jZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1ZQOVV0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvVlA5VXRpbGl0aWVzLmgKaW5kZXggZGEzMDkwMGE0ZWM3MjM4M2UzZWIwMzNkNWM0NjY1YzA3
ZWNkOTU3YS4uYTE4OGE3NDRkNDI2NjVlZjg0NmM1MjA2NTEwZTAwNGI1MjQzOTlmZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVlA5VXRpbGl0aWVzLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVlA5VXRpbGl0aWVzLmgKQEAgLTE0
NCwxNCArMTQ0LDE0IEBAIHN0cnVjdCBTY3JlZW5EYXRhT3ZlcnJpZGVzIHsKICAgICBzdGF0aWMg
T3B0aW9uYWw8U2NyZWVuRGF0YU92ZXJyaWRlcz4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAg
ICAgewogI2RlZmluZSBERUNPREUobmFtZSwgdHlwZSkgXAotICAgIE9wdGlvbmFsPHR5cGU+IG5h
bWU7IFwKLSAgICBkZWNvZGVyID4+IG5hbWU7IFwKLSAgICBpZiAoIW5hbWUpIFwKLSAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsgXAotCi0gICAgREVDT0RFKHdpZHRoLCBkb3VibGUpOwotICAg
IERFQ09ERShoZWlnaHQsIGRvdWJsZSk7Ci0gICAgREVDT0RFKHNjYWxlLCBkb3VibGUpOworICAg
ICAgICBPcHRpb25hbDx0eXBlPiBuYW1lOyBcCisgICAgICAgIGRlY29kZXIgPj4gbmFtZTsgXAor
ICAgICAgICBpZiAoIW5hbWUpIFwKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7IFwK
KworICAgICAgICBERUNPREUod2lkdGgsIGRvdWJsZSk7CisgICAgICAgIERFQ09ERShoZWlnaHQs
IGRvdWJsZSk7CisgICAgICAgIERFQ09ERShzY2FsZSwgZG91YmxlKTsKICN1bmRlZiBERUNPREUK
IAogICAgIHJldHVybiB7eyBXVEZNb3ZlKCp3aWR0aCksIFdURk1vdmUoKmhlaWdodCksIFdURk1v
dmUoKnNjYWxlKSB9fTsKQEAgLTE2Myw1ICsxNjMsOSBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFNjcmVlbkRhdGFPdmVycmlkZXMmIGEsIGNvbnN0IFNjcmVlbkRhdGFPdmVycmlkZXMm
CiAgICAgcmV0dXJuIGEud2lkdGggPT0gYi53aWR0aCAmJiBhLmhlaWdodCA9PSBiLmhlaWdodCAm
JiBhLnNjYWxlID09IGIuc2NhbGU7CiB9CiAKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3Qg
U2NyZWVuRGF0YU92ZXJyaWRlcyYgYSwgY29uc3QgU2NyZWVuRGF0YU92ZXJyaWRlcyYgYikKK3sK
KyAgICByZXR1cm4gIShhID09IGIpOworfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9FbmNvZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9HU3RyZWFt
ZXJWaWRlb0VuY29kZXIuY3BwCmluZGV4IDg0ZTcxMjRkOTI3NmY1NDZmZmUwOGFlMDQ1MzRlZDM0
MGZjZGJiNTguLmQzNDI4ODRhYWU2MGQzMjQ0YzFmM2I3ZDAzNmUxNjJmODE5NzI3YWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9HU3Ry
ZWFtZXJWaWRlb0VuY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2xpYndlYnJ0Yy9HU3RyZWFtZXJWaWRlb0VuY29kZXIuY3BwCkBAIC04MCwxMSArODAs
MTEgQEAgcHVibGljOgogICAgICAgICB9KSk7CiAgICAgfQogCi0gICAgc3RhdGljIE9wdGlvbmFs
PEVuY29kZXJEZWZpbml0aW9uJj4gZGVmaW5pdGlvbihFbmNvZGVySWQgaWQpCisgICAgc3RhdGlj
IEVuY29kZXJEZWZpbml0aW9uKiBkZWZpbml0aW9uKEVuY29kZXJJZCBpZCkKICAgICB7CiAgICAg
ICAgIGlmIChpZCA9PSBOb25lKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgcmV0
dXJuIHNpbmdsZXRvbigpW2lkXTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICByZXR1cm4gJnNpbmdsZXRvbigpW2lkXTsKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5jcHAKaW5kZXggM2M3NTY3YzgxYmJhODIyYzQ4YWIwNmVkMjRkZTI5NjQ5ODMw
MThmMi4uYWExNDFkOGVmNzUyYjg0NjZmNWQ3ZTExMGZlMjg2YjkxNDEyYmZmOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtNjAyNyw3ICs2MDI3LDcgQEAgdm9pZCBJbnRl
cm5hbHM6OnNldEhhcmR3YXJlVlA5RGVjb2RlckRpc2FibGVkRm9yVGVzdGluZyhib29sIGRpc2Fi
bGVkKQogdm9pZCBJbnRlcm5hbHM6OnNldFZQOVNjcmVlblNpemVBbmRTY2FsZUZvclRlc3Rpbmco
ZG91YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0LCBkb3VibGUgc2NhbGUpCiB7CiAjaWYgRU5BQkxF
KFZQOSkgJiYgUExBVEZPUk0oQ09DT0EpCi0gICAgVlA5VGVzdGluZ092ZXJyaWRlczo6c2luZ2xl
dG9uKCkuc2V0VlA5U2NyZWVuU2l6ZUFuZFNjYWxlKG1ha2VPcHRpb25hbDxTY3JlZW5EYXRhT3Zl
cnJpZGVzPih7IHdpZHRoLCBoZWlnaHQsIHNjYWxlIH0pKTsKKyAgICBWUDlUZXN0aW5nT3ZlcnJp
ZGVzOjpzaW5nbGV0b24oKS5zZXRWUDlTY3JlZW5TaXplQW5kU2NhbGUoU2NyZWVuRGF0YU92ZXJy
aWRlcyB7IHdpZHRoLCBoZWlnaHQsIHNjYWxlIH0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0o
d2lkdGgpOwogICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2Rlci5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvQXJndW1lbnRDb2Rlci5oCmluZGV4IDNhYjlmY2M1ZWQxMDM1NTliMWI2ZWIzYjRlZDEw
NmY1YmJkMjY5NmIuLjVlZmQzMjZlYmZmYTEzYjIzMDU2YmNhNDE1YzdjYTY2YjAxNWQ2OTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXIuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmgKQEAgLTU2LDcgKzU2
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSB2b2lkPiBzdHJ1Y3QgQXJndW1l
bnRDb2RlciB7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgVCB0OwogICAgICAgICAgICAg
aWYgKFQ6OmRlY29kZShkZWNvZGVyLCB0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdDsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZSh0KTsKICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9Ub3VjaEJhck1lbnVEYXRhLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Ub3VjaEJhck1l
bnVEYXRhLmgKaW5kZXggMzFhYzA5MjgzZDhlOWExNmY0MWQ0NThiNzk5YzkyY2QwNDhhMDBhMS4u
NzNjYzA3YTc1MTk5YzQzMDkzMDBlYzVlODY0YmM4YTQ1YzQ0OGJjMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9TaGFyZWQvVG91Y2hCYXJNZW51RGF0YS5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL1RvdWNoQmFyTWVudURhdGEuaApAQCAtMjcsOSArMjcsOCBAQAogCiAjaWYgSEFWRShU
T1VDSF9CQVIpCiAKLSNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIlRvdWNo
QmFyTWVudUl0ZW1EYXRhLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSVBDIHsKIGNsYXNzIERlY29kZXI7CkBA
IC00NCw5ICs0Myw4IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBUb3VjaEJhck1lbnVE
YXRhIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBUb3VjaEJhck1lbnVEYXRhKCkgPSBkZWZhdWx0
OworICAgIFRvdWNoQmFyTWVudURhdGEoKSA9IGRlZmF1bHQ7CiAgICAgZXhwbGljaXQgVG91Y2hC
YXJNZW51RGF0YShjb25zdCBXZWJDb3JlOjpIVE1MTWVudUVsZW1lbnQmKTsKLSAgICBleHBsaWNp
dCBUb3VjaEJhck1lbnVEYXRhKGNvbnN0IFRvdWNoQmFyTWVudURhdGEmKSA9IGRlZmF1bHQ7CiAK
ICAgICB2b2lkIGFkZE1lbnVJdGVtKGNvbnN0IFRvdWNoQmFyTWVudUl0ZW1EYXRhJik7CiAgICAg
dm9pZCByZW1vdmVNZW51SXRlbShjb25zdCBUb3VjaEJhck1lbnVJdGVtRGF0YSYpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vz
c2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRp
b25TZXNzaW9uLmNwcAppbmRleCA0NGM4ZDc1MjNhYTE0ZDIyMjdjZTNkMDE1NjQyMzhlNjY2ZmEw
ZGMyLi5lOTRlMDZjZjIwMmU0MTkxOTEyMTQ0ZGIxNzE1MjFmM2EzN2YwNWU3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRp
b25TZXNzaW9uLmNwcApAQCAtMzY5LDEyICszNjksMTIgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6c3dpdGNoVG9Ccm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6
QXUKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90Rm91
bmQpOwogCiAgICAgYm9vbCBmcmFtZU5vdEZvdW5kID0gZmFsc2U7Ci0gICAgYXV0byBmcmFtZUlE
ID0gd2ViRnJhbWVJREZvckhhbmRsZShmcmFtZUhhbmRsZSwgZnJhbWVOb3RGb3VuZCk7CisgICAg
d2ViRnJhbWVJREZvckhhbmRsZShmcmFtZUhhbmRsZSwgZnJhbWVOb3RGb3VuZCk7CiAgICAgaWYg
KGZyYW1lTm90Rm91bmQpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9S
KEZyYW1lTm90Rm91bmQpOwogCi0KLSAgICBtX2NsaWVudC0+cmVxdWVzdFN3aXRjaFRvUGFnZSgq
dGhpcywgKnBhZ2UsIFtmcmFtZUlELCBwYWdlID0gbWFrZVJlZigqcGFnZSksIGNhbGxiYWNrID0g
V1RGTW92ZShjYWxsYmFjayldKCkgeworICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYWxzbyBzd2l0
Y2ggdG8gdGhlIGZyYW1lIHRoYXQgZnJhbWVIYW5kbGUgcG9pbnRzIHRvPworICAgIG1fY2xpZW50
LT5yZXF1ZXN0U3dpdGNoVG9QYWdlKCp0aGlzLCAqcGFnZSwgW3BhZ2UgPSBtYWtlUmVmKCpwYWdl
KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSB7CiAgICAgICAgIHBhZ2UtPnNldEZv
Y3VzKHRydWUpOwogCiAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOwpkaWZmIC0tZ2l0
IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDEyNTg0YTM0YTY5Y2I1
MDU3MTk5MzBhNGJiZGJjYWQ0YTFkYTc5NjcuLjkzN2U4NDQ3OWJiMjQwMGUzYzQ1MzQ2NDQyYjVj
MzBjY2Y1MTBmYjMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAyMS0wNS0yNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBh
cHBsZS5jb20+CisKKyAgICAgICAgU3dpdGNoIGZyb20gV1RGOjpPcHRpb25hbCB0byBzdGQ6Om9w
dGlvbmFsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTE2NzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weTogUmVtb3ZlZCBleGNlcHRpb25zIGZy
b20gdGhlIFdURjo6T3B0aW9uYWwKKyAgICAgICAgc3R5bGUgcnVsZSBmb3IgV2ViUlRDLgorCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHAucHk6IFJlbW92ZWQg
Y2hlY2tfd3RmX29wdGlvbmFsLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hl
Y2tlcnMvY3BwX3VuaXR0ZXN0LnB5OiBSZW1vdmVkIHRlc3Rfd3RmX29wdGlvbmFsLgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQ6IFJlbW92ZWQgT3B0aW9uYWwuY3BwLgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOiBEaXR0by4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9PcHRpb25h
bC5jcHA6IFJlbW92ZWQuCisKIDIwMjEtMDUtMjQgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNo
QGFwcGxlLmNvbT4KIAogICAgICAgICBBWDogU2V0dGluZ3M6IEluY3JlYXNlIGNvbnRyYXN0IGlz
bid0IGRldGVjdGVkIGluIGJyb3dzZXIgdW50aWwgYW4gYWRkaXRpb25hbCBzZXR0aW5nIGlzIGFw
cGxpZWQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQppbmRleCA3MTBmOTg4
NzU5Y2JhMjk2YzQwNGVmZGM2NDMyMTM5YjI4ZjllNDExLi4zMDk0YTI1YzYwNzM1MGFhMGJkYWU3
Yjc5YmViNzZhOGJiZGFjOGQ0IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0
eWxlL2NoZWNrZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vy
LnB5CkBAIC0yNzIsMTIgKzI3Miw2IEBAIF9QQVRIX1JVTEVTX1NQRUNJRklFUiA9IFsKICAgICAg
ICItd2hpdGVzcGFjZS9kZWNsYXJhdGlvbiIsCiAgICAgICAiLXdoaXRlc3BhY2UvaW5kZW50Il0p
LAogCi0gICAgKFsgICMgRmlsZXMgZm9sbG93aW5nIHVzaW5nIFdlYlJUQyBvcHRpb25uYWwgdHlw
ZQotICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICdt
ZWRpYXN0cmVhbScsICdsaWJ3ZWJydGMnLCAnR1N0cmVhbWVyVmlkZW9EZWNvZGVyRmFjdG9yeS5j
cHAnKSwKLSAgICAgXSwKLSAgICAgWyItcnVudGltZS93dGZfb3B0aW9uYWwiLAotICAgICBdKSwK
LQogICAgIChbCiAgICAgICAjIFRoZXJlIGlzIG5vIHdheSB0byBhdm9pZCB0aGUgc3ltYm9scyBf
X2ppdF9kZWJ1Z19yZWdpc3Rlcl9jb2RlCiAgICAgICAjIGFuZCBfX2ppdF9kZWJ1Z19kZXNjcmlw
dG9yIHdoZW4gaW50ZWdyYXRpbmcgd2l0aCBnZGIuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
c3R5bGUvY2hlY2tlcnMvY3BwLnB5CmluZGV4IDhiMDdiODdmY2JmMWNjMWU5YmQzNzExOGI4MDZm
MDVlMzk3YzU3MzUuLjNmNTdkZjhhOGRjOGI0MzM3NTZmYWY1ZmE3NTRhYTA0MGIwNjhhZDkgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5Cisr
KyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5CkBAIC0yNzA1
LDI2ICsyNzA1LDYgQEAgZGVmIGNoZWNrX3d0Zl9tb3ZlKGNsZWFuX2xpbmVzLCBsaW5lX251bWJl
ciwgZmlsZV9zdGF0ZSwgZXJyb3IpOgogICAgIGVycm9yKGxpbmVfbnVtYmVyLCAncnVudGltZS93
dGZfbW92ZScsIDQsICJVc2UgJ1dURk1vdmUoKScgaW5zdGVhZCBvZiAnc3RkOjptb3ZlKCknLiIp
CiAKIAotZGVmIGNoZWNrX3d0Zl9vcHRpb25hbChjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGZp
bGVfc3RhdGUsIGVycm9yKToKLSAgICAiIiJMb29rcyBmb3IgdXNlIG9mICdzdGQ6Om9wdGlvbmFs
PD4nIHdoaWNoIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoICdXVEY6Ok9wdGlvbmFsPD4nLgotCi0g
ICAgQXJnczoKLSAgICAgIGNsZWFuX2xpbmVzOiBBIENsZWFuc2VkTGluZXMgaW5zdGFuY2UgY29u
dGFpbmluZyB0aGUgZmlsZS4KLSAgICAgIGxpbmVfbnVtYmVyOiBUaGUgbnVtYmVyIG9mIHRoZSBs
aW5lIHRvIGNoZWNrLgotICAgICAgZmlsZV9zdGF0ZTogQSBfRmlsZVN0YXRlIGluc3RhbmNlIHdo
aWNoIG1haW50YWlucyBpbmZvcm1hdGlvbiBhYm91dAotICAgICAgICAgICAgICAgICAgdGhlIHN0
YXRlIG9mIHRoaW5ncyBpbiB0aGUgZmlsZS4KLSAgICAgIGVycm9yOiBUaGUgZnVuY3Rpb24gdG8g
Y2FsbCB3aXRoIGFueSBlcnJvcnMgZm91bmQuCi0gICAgIiIiCi0KLSAgICBsaW5lID0gY2xlYW5f
bGluZXMuZWxpZGVkW2xpbmVfbnVtYmVyXSAgIyBHZXQgcmlkIG9mIGNvbW1lbnRzIGFuZCBzdHJp
bmdzLgotCi0gICAgdXNpbmdfc3RkX29wdGlvbmFsID0gc2VhcmNoKHInXGJvcHRpb25hbFxzKlw8
JywgbGluZSkKLSAgICBpZiBub3QgdXNpbmdfc3RkX29wdGlvbmFsOgotICAgICAgICByZXR1cm4K
LQotICAgIGVycm9yKGxpbmVfbnVtYmVyLCAncnVudGltZS93dGZfb3B0aW9uYWwnLCA0LCAiVXNl
ICdXVEY6Ok9wdGlvbmFsPD4nIGluc3RlYWQgb2YgJ3N0ZDo6b3B0aW9uYWw8PicuIikKLQotCiBk
ZWYgY2hlY2tfY2FsbG9ubWFpbnRocmVhZChmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmVfbnVt
YmVyLCBmaWxlX3N0YXRlLCBlcnJvcik6CiAgICAgIiIiTG9va3MgZm9yIHVzZSBvZiAnY2FsbE9u
TWFpblRocmVhZCgpJyB3aGljaCBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCAnY2FsbE9uTWFpblJ1
bkxvb3AoKScuCiAKQEAgLTM0MjYsNyArMzQwNiw2IEBAIGRlZiBjaGVja19zdHlsZShjbGVhbl9s
aW5lcywgbGluZV9udW1iZXIsIGZpbGVfZXh0ZW5zaW9uLCBjbGFzc19zdGF0ZSwgZmlsZV9zdGF0
CiAgICAgY2hlY2tfbWF4X21pbl9tYWNyb3MoY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBmaWxl
X3N0YXRlLCBlcnJvcikKICAgICBjaGVja193dGZfY2hlY2tlZF9zaXplKGNsZWFuX2xpbmVzLCBs
aW5lX251bWJlciwgZmlsZV9zdGF0ZSwgZXJyb3IpCiAgICAgY2hlY2tfd3RmX21vdmUoY2xlYW5f
bGluZXMsIGxpbmVfbnVtYmVyLCBmaWxlX3N0YXRlLCBlcnJvcikKLSAgICBjaGVja193dGZfb3B0
aW9uYWwoY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBmaWxlX3N0YXRlLCBlcnJvcikKICAgICBj
aGVja193dGZfbWFrZV91bmlxdWUoY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBmaWxlX3N0YXRl
LCBlcnJvcikKICAgICBjaGVja193dGZfbmV2ZXJfZGVzdHJveWVkKGNsZWFuX2xpbmVzLCBsaW5l
X251bWJlciwgZmlsZV9zdGF0ZSwgZXJyb3IpCiAgICAgY2hlY2tfbG9ja19ndWFyZChjbGVhbl9s
aW5lcywgbGluZV9udW1iZXIsIGZpbGVfc3RhdGUsIGVycm9yKQpAQCAtNDY1Niw3ICs0NjM1LDYg
QEAgY2xhc3MgQ3BwQ2hlY2tlcihvYmplY3QpOgogICAgICAgICAncnVudGltZS91bnNpZ25lZCcs
CiAgICAgICAgICdydW50aW1lL3ZpcnR1YWwnLAogICAgICAgICAncnVudGltZS93dGZfY2hlY2tl
ZF9zaXplJywKLSAgICAgICAgJ3J1bnRpbWUvd3RmX29wdGlvbmFsJywKICAgICAgICAgJ3J1bnRp
bWUvd3RmX21ha2VfdW5pcXVlJywKICAgICAgICAgJ3J1bnRpbWUvd3RmX21vdmUnLAogICAgICAg
ICAncnVudGltZS93dGZfbmV2ZXJfZGVzdHJveWVkJywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHBfdW5pdHRlc3QucHkKaW5kZXggYjcyMGNmZDFj
ODE1MzBlMmFkNGZhNmRiYjIyMGY5Zjg4NDU1NzViZC4uMDQyMzVjZDhlZDljMTAwZDgzZmI3NGIw
OWM5ZGFkYTM4M2VlNzBkNyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHls
ZS9jaGVja2Vycy9jcHBfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9z
dHlsZS9jaGVja2Vycy9jcHBfdW5pdHRlc3QucHkKQEAgLTU2NTUsMjkgKzU2NTUsNiBAQCBjbGFz
cyBXZWJLaXRTdHlsZVRlc3QoQ3BwU3R5bGVUZXN0QmFzZSk6CiAgICAgICAgICAgICAiICBbcnVu
dGltZS93dGZfbmV2ZXJfZGVzdHJveWVkXSBbNF0iLAogICAgICAgICAgICAgJ2Zvby5tbScpCiAK
LSAgICBkZWYgdGVzdF93dGZfb3B0aW9uYWwoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xp
bnQoCi0gICAgICAgICAgICAgJ09wdGlvbmFsPGludD4gYTsnLAotICAgICAgICAgICAgICcnLAot
ICAgICAgICAgICAgICdmb28uY3BwJykKLQotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAg
ICAgICAgICAgICdXVEY6Ok9wdGlvbmFsPGludD4gYTsnLAotICAgICAgICAgICAgICcnLAotICAg
ICAgICAgICAgICdmb28uY3BwJykKLQotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAg
ICAgICAgJ3N0ZDo6b3B0aW9uYWw8aW50PiBhOycsCi0gICAgICAgICAgICAiVXNlICdXVEY6Ok9w
dGlvbmFsPD4nIGluc3RlYWQgb2YgJ3N0ZDo6b3B0aW9uYWw8PicuIgotICAgICAgICAgICAgIiAg
W3J1bnRpbWUvd3RmX29wdGlvbmFsXSBbNF0iLAotICAgICAgICAgICAgJ2Zvby5jcHAnKQotCi0g
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAnb3B0aW9uYWw8aW50PiBhOycs
Ci0gICAgICAgICAgICAiVXNlICdXVEY6Ok9wdGlvbmFsPD4nIGluc3RlYWQgb2YgJ3N0ZDo6b3B0
aW9uYWw8PicuIgotICAgICAgICAgICAgIiAgW3J1bnRpbWUvd3RmX29wdGlvbmFsXSBbNF0iLAot
ICAgICAgICAgICAgJ2Zvby5jcHAnKQotCiAgICAgZGVmIHRlc3RfbG9ja19ndWFyZChzZWxmKToK
ICAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKICAgICAgICAgICAgICdMb2NrZXIgbG9ja2VyKGxv
Y2spOycsCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0IGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dAppbmRleCBkYjQ4Yjk0YjIwN2YxYzBm
YmVkMDk4ODMyMGY3MGI2OWZkMjQzZTAyLi5hMDMyOTRiNWIwMTVlNjFmMTBjZGU1YWI0OWVlNGNj
MjhmODJjZmI1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQKQEAgLTY2LDcgKzY2LDYg
QEAgc2V0KFRlc3RXVEZfU09VUkNFUwogICAgIFRlc3RzL1dURi9OYWtlZFB0ci5jcHAKICAgICBU
ZXN0cy9XVEYvTmV2ZXJEZXN0cm95ZWQuY3BwCiAgICAgVGVzdHMvV1RGL09wdGlvblNldC5jcHAK
LSAgICBUZXN0cy9XVEYvT3B0aW9uYWwuY3BwCiAgICAgVGVzdHMvV1RGL1BhY2tlZC5jcHAKICAg
ICBUZXN0cy9XVEYvUGFja2VkUmVmLmNwcAogICAgIFRlc3RzL1dURi9QYWNrZWRSZWZQdHIuY3Bw
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGM4N2MwZjE4NjA3OTJjY2I2YThkYjQwNzBiMzIw
MTJhMjViOTZlM2IuLjg5Y2FhODc4NzhhZmM2YzVkOTczZGU5OGIzOGE5MmI1MDQ3MzY3OTAgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MTIsNyArNjEyLDYgQEAKIAkJN0M4M0RFRjExRDBB
NTkwQzAwRkVCQ0YzIC8qIE1lZGlhVGltZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDRDU0OTdCMzE1ODU3RjBDMDBCNUJDMzAgLyogTWVkaWFUaW1l
LmNwcCAqLzsgfTsKIAkJN0M4M0RFRjYxRDBBNTkwQzAwRkVCQ0YzIC8qIE1ldGFBbGxvY2F0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDNkM0
Q0UxNDEwMzRBRDAwNUI3RjBDIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovOyB9OwogCQk3QzgzREVG
RTFEMEE1OTBDMDBGRUJDRjMgLyogTmFrZWRQdHIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVCNkY3NEUxQjJCQTQ0RTAwOUU0OTIyIC8qIE5ha2Vk
UHRyLmNwcCAqLzsgfTsKLQkJN0M4M0RGMDExRDBBNTkwQzAwRkVCQ0YzIC8qIE9wdGlvbmFsLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRkRFNjU0
MTk1M0IyQzAwMEM0OEZGQSAvKiBPcHRpb25hbC5jcHAgKi87IH07CiAJCTdDODNERjAyMUQwQTU5
MEMwMEZFQkNGMyAvKiBPU09iamVjdFB0ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0JCQTA3NjE5QkI4QTkxMDBCQkYwMjUgLyogT1NPYmplY3RQ
dHIuY3BwICovOyB9OwogCQk3QzgzREYwNTFEMEE1OTBDMDBGRUJDRjMgLyogUnVuTG9vcC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEM5QUJDNzFC
M0RCMTcxMDA0MEE5ODcgLyogUnVuTG9vcC5jcHAgKi87IH07CiAJCTdDODNERjEyMUQwQTU5MEMw
MEZFQkNGMyAvKiBTY29wZWRMYW1iZGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gREM2OUFBNjIxQ0Y3N0M2NTAwQzYyNzJGIC8qIFNjb3BlZExhbWJk
YS5jcHAgKi87IHNldHRpbmdzID0ge0NPTVBJTEVSX0ZMQUdTID0gIi1mbm8tZWxpZGUtY29uc3Ry
dWN0b3JzIjsgfTsgfTsKQEAgLTE4NTYsNyArMTg1NSw2IEBACiAJCTFBRURFMjI0MTNFNUU3QTAw
MEU2MkZFOCAvKiBJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXJNYWMubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXJNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBRUY5OTQ4MTdBMDlGNTMwMDk5OEVGMCAv
KiBHZXRQSURBZnRlckFib3J0ZWRQcm9jZXNzTGF1bmNoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEdldFBJREFmdGVyQWJvcnRlZFByb2Nlc3NMYXVuY2guY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUY3QjIxRDFENkNEMTJFMDA4QzEyNkMgLyog
RW51bVRyYWl0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFbnVtVHJhaXRzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFGREU2NTQxOTUzQjJDMDAwQzQ4RkZBIC8qIE9wdGlv
bmFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9wdGlvbmFsLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUMyNERFRUMyNjMwMDFERTAwNDUwRDA3
IC8qIFRleHRTdHlsZUZvbnRTaXplLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVGV4dFN0eWxl
Rm9udFNpemUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDMkI4MTdFMUM4OTFF
NDIwMEE1NTI5RiAvKiBDYW5jZWxGb250U3VicmVzb3VyY2UubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDYW5jZWxGb250U3VicmVzb3VyY2UubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDMkI4MTgxMUM4OTFFRkEwMEE1NTI5RiAvKiBDYW5jZWxG
b250U3VicmVzb3VyY2VQbHVnSW4ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBDYW5jZWxGb250U3VicmVzb3VyY2VQbHVnSW4ubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC00NDUxLDcgKzQ0NDksNiBAQAogCQkJCUZFQjZGNzRFMUIyQkE0NEUwMDlF
NDkyMiAvKiBOYWtlZFB0ci5jcHAgKi8sCiAJCQkJQTU3RDU0RjIxRjMzOEMzNjAwQTk3QUE3IC8q
IE5ldmVyRGVzdHJveWVkLmNwcCAqLywKIAkJCQlDRDQ4QTg3MjI0QzhBNjZGMDBGNTgwMEMgLyog
T2JzZXJ2ZXIuY3BwICovLAotCQkJCTFBRkRFNjU0MTk1M0IyQzAwMEM0OEZGQSAvKiBPcHRpb25h
bC5jcHAgKi8sCiAJCQkJQ0U1MEQ4QzgxQzg2NjVDRTAwNzJFQTVBIC8qIE9wdGlvblNldC5jcHAg
Ki8sCiAJCQkJRTMyQjU0OTEyMjgxMEFDMDAwOEFENzAyIC8qIFBhY2tlZC5jcHAgKi8sCiAJCQkJ
RTM4RDY1QzgyM0E0NUZBOTAwNjNENjlBIC8qIFBhY2tlZFJlZi5jcHAgKi8sCkBAIC01MjA2LDcg
KzUyMDMsNiBAQAogCQkJCTdDODNERUZFMUQwQTU5MEMwMEZFQkNGMyAvKiBOYWtlZFB0ci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNTdENTRGMzFGMzM4QzM2MDBBOTdBQTcgLyogTmV2ZXJEZXN0
cm95ZWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q0OEE4NzMyNEM4QTY2RjAwRjU4MDBDIC8q
IE9ic2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTdDODNERjAxMUQwQTU5MEMwMEZFQkNG
MyAvKiBPcHRpb25hbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTc3QkFBMzFEOUFGRkZDMDA1
RkM1NjggLyogT3B0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjAyMUQwQTU5
MEMwMEZFQkNGMyAvKiBPU09iamVjdFB0ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzJCNTQ5
MjIyODEwQUM0MDA4QUQ3MDIgLyogUGFja2VkLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvT3B0aW9uYWwuY3BwIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvT3B0aW9uYWwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAyNzI2MDA0Zjg0ZTYwM2QwMWIxYWEwZDZmNmVkODBhZTc2NGVmMzAxLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL09wdGlvbmFsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIzOCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+Ci0KLW5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKLQotVEVTVChXVEZfT3B0aW9uYWws
IERpc2VuZ2FnZWQpCi17Ci0gICAgewotICAgICAgICBPcHRpb25hbDxpbnQ+IG9wdGlvbmFsOwot
Ci0gICAgICAgIEVYUEVDVF9GQUxTRShzdGF0aWNfY2FzdDxib29sPihvcHRpb25hbCkpOwotICAg
IH0KLQotICAgIHsKLSAgICAgICAgT3B0aW9uYWw8aW50PiBvcHRpb25hbCB7IFdURjo6bnVsbG9w
dCB9OwotCi0gICAgICAgIEVYUEVDVF9GQUxTRShzdGF0aWNfY2FzdDxib29sPihvcHRpb25hbCkp
OwotICAgIH0KLX0KLQotVEVTVChXVEZfT3B0aW9uYWwsIEVuZ2FnZWQpCi17Ci0gICAgT3B0aW9u
YWw8aW50PiBvcHRpb25hbCB7IDEwIH07Ci0KLSAgICBFWFBFQ1RfVFJVRShzdGF0aWNfY2FzdDxi
b29sPihvcHRpb25hbCkpOwotICAgIEVYUEVDVF9FUSgxMCwgb3B0aW9uYWwudmFsdWUoKSk7Ci19
Ci0KLVRFU1QoV1RGX09wdGlvbmFsLCBEZXN0cnVjdG9yKQotewotICAgIHN0YXRpYyBib29sIGRp
ZENhbGxEZXN0cnVjdG9yID0gZmFsc2U7Ci0gICAgc3RydWN0IEEgewotICAgICAgICB+QSgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEVYUEVDVF9GQUxTRShkaWRDYWxsRGVzdHJ1Y3Rvcik7Ci0g
ICAgICAgICAgICBkaWRDYWxsRGVzdHJ1Y3RvciA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Owot
Ci0gICAgewotICAgICAgICBPcHRpb25hbDxBPiBvcHRpb25hbCB7IHN0ZDo6aW5fcGxhY2UgfTsK
LQotICAgICAgICBFWFBFQ1RfVFJVRShzdGF0aWNfY2FzdDxib29sPihvcHRpb25hbCkpOwotICAg
IH0KLQotICAgIEVYUEVDVF9UUlVFKGRpZENhbGxEZXN0cnVjdG9yKTsKLX0KLQotVEVTVChXVEZf
T3B0aW9uYWwsIENhbGxiYWNrKQotewotICAgIGJvb2wgY2FsbGVkID0gZmFsc2U7Ci0gICAgT3B0
aW9uYWw8aW50PiBhOwotICAgIGludCByZXN1bHQgPSB2YWx1ZU9yQ29tcHV0ZShhLCBbJl0gewot
ICAgICAgICBjYWxsZWQgPSB0cnVlOwotICAgICAgICByZXR1cm4gMzAwOwotICAgIH0pOwotICAg
IEVYUEVDVF9UUlVFKGNhbGxlZCk7Ci0gICAgRVhQRUNUX0VRKHJlc3VsdCwgMzAwKTsKLQotICAg
IGEgPSAyNTA7Ci0gICAgY2FsbGVkID0gZmFsc2U7Ci0gICAgcmVzdWx0ID0gdmFsdWVPckNvbXB1
dGUoYSwgWyZdIHsKLSAgICAgICAgY2FsbGVkID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIDMwMDsK
LSAgICB9KTsKLSAgICBFWFBFQ1RfRkFMU0UoY2FsbGVkKTsKLSAgICBFWFBFQ1RfRVEocmVzdWx0
LCAyNTApOwotfQotCi1URVNUKFdURl9PcHRpb25hbCwgRXF1YWxpdHkpCi17Ci0gICAgT3B0aW9u
YWw8aW50PiB1bmVuZ2FnZWQxOwotICAgIE9wdGlvbmFsPGludD4gdW5lbmdhZ2VkMjsKLQotICAg
IE9wdGlvbmFsPGludD4gZW5nYWdlZDEgeyAxIH07Ci0gICAgT3B0aW9uYWw8aW50PiBlbmdhZ2Vk
MiB7IDIgfTsKLSAgICBPcHRpb25hbDxpbnQ+IGVuZ2FnZWR4MiB7IDIgfTsKLQotICAgIEVYUEVD
VF9UUlVFKHVuZW5nYWdlZDEgPT0gdW5lbmdhZ2VkMik7Ci0gICAgRVhQRUNUX0ZBTFNFKGVuZ2Fn
ZWQxID09IGVuZ2FnZWQyKTsKLSAgICBFWFBFQ1RfRkFMU0UoZW5nYWdlZDEgPT0gdW5lbmdhZ2Vk
MSk7Ci0gICAgRVhQRUNUX1RSVUUoZW5nYWdlZDIgPT0gZW5nYWdlZHgyKTsKLQotICAgIEVYUEVD
VF9UUlVFKHVuZW5nYWdlZDEgPT0gV1RGOjpudWxsb3B0KTsKLSAgICBFWFBFQ1RfRkFMU0UoZW5n
YWdlZDEgPT0gV1RGOjpudWxsb3B0KTsKLSAgICBFWFBFQ1RfVFJVRShXVEY6Om51bGxvcHQgPT0g
dW5lbmdhZ2VkMSk7Ci0gICAgRVhQRUNUX0ZBTFNFKFdURjo6bnVsbG9wdCA9PSBlbmdhZ2VkMSk7
Ci0KLSAgICBFWFBFQ1RfVFJVRShlbmdhZ2VkMSA9PSAxKTsKLSAgICBFWFBFQ1RfVFJVRSgxID09
IGVuZ2FnZWQxKTsKLSAgICBFWFBFQ1RfRkFMU0UodW5lbmdhZ2VkMSA9PSAxKTsKLSAgICBFWFBF
Q1RfRkFMU0UoMSA9PSB1bmVuZ2FnZWQxKTsKLX0KLQotVEVTVChXVEZfT3B0aW9uYWwsIEluZXF1
YWxpdHkpCi17Ci0gICAgT3B0aW9uYWw8aW50PiB1bmVuZ2FnZWQxOwotICAgIE9wdGlvbmFsPGlu
dD4gdW5lbmdhZ2VkMjsKLQotICAgIE9wdGlvbmFsPGludD4gZW5nYWdlZDEgeyAxIH07Ci0gICAg
T3B0aW9uYWw8aW50PiBlbmdhZ2VkMiB7IDIgfTsKLSAgICBPcHRpb25hbDxpbnQ+IGVuZ2FnZWR4
MiB7IDIgfTsKLQotICAgIEVYUEVDVF9GQUxTRSh1bmVuZ2FnZWQxICE9IHVuZW5nYWdlZDIpOwot
ICAgIEVYUEVDVF9UUlVFKGVuZ2FnZWQxICE9IGVuZ2FnZWQyKTsKLSAgICBFWFBFQ1RfVFJVRShl
bmdhZ2VkMSAhPSB1bmVuZ2FnZWQxKTsKLSAgICBFWFBFQ1RfRkFMU0UoZW5nYWdlZDIgIT0gZW5n
YWdlZHgyKTsKLQotICAgIEVYUEVDVF9GQUxTRSh1bmVuZ2FnZWQxICE9IFdURjo6bnVsbG9wdCk7
Ci0gICAgRVhQRUNUX1RSVUUoZW5nYWdlZDEgIT0gV1RGOjpudWxsb3B0KTsKLSAgICBFWFBFQ1Rf
RkFMU0UoV1RGOjpudWxsb3B0ICE9IHVuZW5nYWdlZDEpOwotICAgIEVYUEVDVF9UUlVFKFdURjo6
bnVsbG9wdCAhPSBlbmdhZ2VkMSk7Ci0KLSAgICBFWFBFQ1RfRkFMU0UoZW5nYWdlZDEgIT0gMSk7
Ci0gICAgRVhQRUNUX1RSVUUoZW5nYWdlZDEgIT0gMik7Ci0gICAgRVhQRUNUX0ZBTFNFKDEgIT0g
ZW5nYWdlZDEpOwotICAgIEVYUEVDVF9UUlVFKDIgIT0gZW5nYWdlZDEpOwotCi0gICAgRVhQRUNU
X1RSVUUodW5lbmdhZ2VkMSAhPSAxKTsKLSAgICBFWFBFQ1RfVFJVRSgxICE9IHVuZW5nYWdlZDEp
OwotfQotCi1URVNUKFdURl9PcHRpb25hbCwgTW92ZVNlbWFudGljc0NvbnN0cnVjdG9yKQotewot
ICAgIHsKLSAgICAgICAgT3B0aW9uYWw8aW50PiB1bmVuZ2FnZWQxIHsgfTsKLSAgICAgICAgRVhQ
RUNUX0ZBTFNFKCEhdW5lbmdhZ2VkMSk7Ci0KLSAgICAgICAgT3B0aW9uYWw8aW50PiB1bmVuZ2Fn
ZWQyKHN0ZDo6bW92ZSh1bmVuZ2FnZWQxKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRSghIXVuZW5n
YWdlZDEpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoISF1bmVuZ2FnZWQyKTsKLSAgICB9Ci0KLSAg
ICB7Ci0gICAgICAgIE9wdGlvbmFsPGludD4gZW5nYWdlZFRvVW5lbmdhZ2VkIHsgMiB9OwotICAg
ICAgICBFWFBFQ1RfVFJVRSghIWVuZ2FnZWRUb1VuZW5nYWdlZCk7Ci0gICAgICAgIEVYUEVDVF9F
USgyLCBlbmdhZ2VkVG9VbmVuZ2FnZWQudmFsdWUoKSk7Ci0KLSAgICAgICAgT3B0aW9uYWw8aW50
PiBlbmdhZ2VkKHN0ZDo6bW92ZShlbmdhZ2VkVG9VbmVuZ2FnZWQpKTsKLSAgICAgICAgRVhQRUNU
X0ZBTFNFKCEhZW5nYWdlZFRvVW5lbmdhZ2VkKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoISFlbmdh
Z2VkKTsKLSAgICAgICAgRVhQRUNUX0VRKDIsIGVuZ2FnZWQudmFsdWUoKSk7Ci0gICAgfQotfQot
Ci1URVNUKFdURl9PcHRpb25hbCwgTW92ZVNlbWFudGljc0Fzc2lnbm1lbnQpCi17Ci0gICAgewot
ICAgICAgICBPcHRpb25hbDxpbnQ+IHVuZW5nYWdlZDEgeyB9OwotICAgICAgICBFWFBFQ1RfRkFM
U0UoISF1bmVuZ2FnZWQxKTsKLQotICAgICAgICBPcHRpb25hbDxpbnQ+IHVuZW5nYWdlZDI7Ci0g
ICAgICAgIEVYUEVDVF9GQUxTRSghIXVuZW5nYWdlZDIpOwotCi0gICAgICAgIHVuZW5nYWdlZDIg
PSBzdGQ6Om1vdmUodW5lbmdhZ2VkMSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRSghIXVuZW5nYWdl
ZDEpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoISF1bmVuZ2FnZWQyKTsKLSAgICB9Ci0KLSAgICB7
Ci0gICAgICAgIE9wdGlvbmFsPGludD4gZW5nYWdlZFRvVW5lbmdhZ2VkIHsgMyB9OwotICAgICAg
ICBFWFBFQ1RfVFJVRSghIWVuZ2FnZWRUb1VuZW5nYWdlZCk7Ci0gICAgICAgIEVYUEVDVF9FUSgz
LCBlbmdhZ2VkVG9VbmVuZ2FnZWQudmFsdWUoKSk7Ci0KLSAgICAgICAgZW5nYWdlZFRvVW5lbmdh
Z2VkID0gc3RkOjptb3ZlKFdURjo6bnVsbG9wdCk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRSghIWVu
Z2FnZWRUb1VuZW5nYWdlZCk7Ci0gICAgfQotCi0gICAgewotICAgICAgICBPcHRpb25hbDxpbnQ+
IGVuZ2FnZWRUb1VuZW5nYWdlZCB7IDQgfTsKLSAgICAgICAgRVhQRUNUX1RSVUUoISFlbmdhZ2Vk
VG9VbmVuZ2FnZWQpOwotICAgICAgICBFWFBFQ1RfRVEoNCwgZW5nYWdlZFRvVW5lbmdhZ2VkLnZh
bHVlKCkpOwotCi0gICAgICAgIE9wdGlvbmFsPGludD4gdW5lbmdhZ2VkVG9FbmdhZ2VkOwotICAg
ICAgICBFWFBFQ1RfRkFMU0UoISF1bmVuZ2FnZWRUb0VuZ2FnZWQpOwotCi0gICAgICAgIHVuZW5n
YWdlZFRvRW5nYWdlZCA9IHN0ZDo6bW92ZShlbmdhZ2VkVG9VbmVuZ2FnZWQpOwotICAgICAgICBF
WFBFQ1RfRkFMU0UoISFlbmdhZ2VkVG9VbmVuZ2FnZWQpOwotICAgICAgICBFWFBFQ1RfVFJVRSgh
IXVuZW5nYWdlZFRvRW5nYWdlZCk7Ci0gICAgICAgIEVYUEVDVF9FUSg0LCB1bmVuZ2FnZWRUb0Vu
Z2FnZWQudmFsdWUoKSk7Ci0gICAgfQotCi0gICAgewotICAgICAgICBPcHRpb25hbDxpbnQ+IGVu
Z2FnZWRUb1VuZW5nYWdlZCB7IDUgfTsKLSAgICAgICAgRVhQRUNUX1RSVUUoISFlbmdhZ2VkVG9V
bmVuZ2FnZWQpOwotICAgICAgICBFWFBFQ1RfRVEoNSwgZW5nYWdlZFRvVW5lbmdhZ2VkLnZhbHVl
KCkpOwotCi0gICAgICAgIE9wdGlvbmFsPGludD4gdW5lbmdhZ2VkOwotICAgICAgICBFWFBFQ1Rf
RkFMU0UoISF1bmVuZ2FnZWQpOwotCi0gICAgICAgIGVuZ2FnZWRUb1VuZW5nYWdlZCA9IHN0ZDo6
bW92ZSh1bmVuZ2FnZWQpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoISFlbmdhZ2VkVG9VbmVuZ2Fn
ZWQpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoISF1bmVuZ2FnZWQpOwotICAgIH0KLQotICAgIHsK
LSAgICAgICAgT3B0aW9uYWw8aW50PiBlbmdhZ2VkVG9VbmVuZ2FnZWQgeyA2IH07Ci0gICAgICAg
IEVYUEVDVF9UUlVFKCEhZW5nYWdlZFRvVW5lbmdhZ2VkKTsKLSAgICAgICAgRVhQRUNUX0VRKDYs
IGVuZ2FnZWRUb1VuZW5nYWdlZC52YWx1ZSgpKTsKLQotICAgICAgICBPcHRpb25hbDxpbnQ+IGVu
Z2FnZWRUb0VuZ2FnZWQgeyA3IH07Ci0gICAgICAgIEVYUEVDVF9UUlVFKCEhZW5nYWdlZFRvRW5n
YWdlZCk7Ci0gICAgICAgIEVYUEVDVF9FUSg3LCBlbmdhZ2VkVG9FbmdhZ2VkLnZhbHVlKCkpOwot
Ci0gICAgICAgIGVuZ2FnZWRUb0VuZ2FnZWQgPSBzdGQ6Om1vdmUoZW5nYWdlZFRvVW5lbmdhZ2Vk
KTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKCEhZW5nYWdlZFRvVW5lbmdhZ2VkKTsKLSAgICAgICAg
RVhQRUNUX1RSVUUoISFlbmdhZ2VkVG9FbmdhZ2VkKTsKLSAgICAgICAgRVhQRUNUX0VRKDYsIGVu
Z2FnZWRUb0VuZ2FnZWQudmFsdWUoKSk7Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBUZXN0
V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429608</attachid>
            <date>2021-05-24 18:48:50 -0700</date>
            <delta_ts>2021-05-25 09:16:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211674-20210524184849.patch</filename>
            <type>text/plain</type>
            <size>84812</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3OTc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
ZTk0ZTgyYjdlYmU2ODE1MzAwYWJiNTg5MDFlOGRlMDMyMDMyNGIxLi4zODBiY2ZhMDljMDRlYTc2
NGU3OTVjMmJhZTRmNmJjNzZjMjY4MzRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NSBAQAorMjAyMS0wNS0yNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgU3dpdGNoIGZyb20gV1RGOjpPcHRpb25hbCB0byBzdGQ6Om9wdGlvbmFsCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTE2NzQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHJ1bnRpbWUvSW50
bENvbGxhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yOjppbml0aWFsaXplQ29s
bGF0b3IpOiBVc2UgSlNPYmplY3QqIGluc3RlYWQgb2YKKyAgICAgICAgT3B0aW9uYWw8SlNPYmpl
Y3QmPi4KKyAgICAgICAgKiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHA6CisgICAgICAg
IChKU0M6OnRvRGF0ZVRpbWVPcHRpb25zQW55RGF0ZSk6IERpdHRvLgorICAgICAgICAoSlNDOjpJ
bnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVGltZUZvcm1hdCk6IERpdHRvLgorICAg
ICAgICAqIHJ1bnRpbWUvSW50bERpc3BsYXlOYW1lcy5jcHA6CisgICAgICAgIChKU0M6OkludGxE
aXNwbGF5TmFtZXM6OmluaXRpYWxpemVEaXNwbGF5TmFtZXMpOiBEaXR0by4KKyAgICAgICAgKiBy
dW50aW1lL0ludGxMaXN0Rm9ybWF0LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bExpc3RGb3JtYXQ6
OmluaXRpYWxpemVMaXN0Rm9ybWF0KTogRGl0dG8uCisgICAgICAgICogcnVudGltZS9JbnRsTG9j
YWxlLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bExvY2FsZTo6aW5pdGlhbGl6ZUxvY2FsZSk6IERp
dHRvLgorICAgICAgICAqIHJ1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHA6CisgICAgICAgIChK
U0M6OkludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGb3JtYXQpOiBEaXR0by4KKyAg
ICAgICAgKiBydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaDogRGl0dG8uCisgICAgICAgICogcnVu
dGltZS9JbnRsTnVtYmVyRm9ybWF0SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpzZXROdW1iZXJG
b3JtYXREaWdpdE9wdGlvbnMpOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1lL0ludGxPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDOjppbnRsQm9vbGVhbk9wdGlvbik6IERpdHRvLgorICAgICAgICAo
SlNDOjppbnRsU3RyaW5nT3B0aW9uKTogRGl0dG8uCisgICAgICAgIChKU0M6OmludGxOdW1iZXJP
cHRpb24pOiBEaXR0by4KKyAgICAgICAgKEpTQzo6c3VwcG9ydGVkTG9jYWxlcyk6IERpdHRvLgor
ICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5oOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1l
L0ludGxPYmplY3RJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OmludGxPcHRpb24pOiBEaXR0by4K
KyAgICAgICAgKEpTQzo6aW50bEdldE9wdGlvbnNPYmplY3QpOiBEaXR0by4KKyAgICAgICAgKEpT
Qzo6aW50bENvZXJjZU9wdGlvbnNUb09iamVjdCk6IERpdHRvLgorICAgICAgICAqIHJ1bnRpbWUv
SW50bFBsdXJhbFJ1bGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bFBsdXJhbFJ1bGVzOjppbml0
aWFsaXplUGx1cmFsUnVsZXMpOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1lL0ludGxQbHVyYWxS
dWxlcy5oOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQu
Y3BwOgorICAgICAgICAoSlNDOjpJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojppbml0aWFsaXplUmVs
YXRpdmVUaW1lRm9ybWF0KTogRGl0dG8uCisgICAgICAgICogcnVudGltZS9JbnRsU2VnbWVudGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bFNlZ21lbnRlcjo6aW5pdGlhbGl6ZVNlZ21lbnRlcik6
IERpdHRvLgorCiAyMDIxLTA1LTI0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgog
CiAgICAgICAgIEFsbG93IENUSSBzdHVicyB0byBiZSBnZW5lcmF0ZWQgb2ZmIHRoZSBtYWluIHRo
cmVhZApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZwppbmRleCA5MDQ2MTE1MDA5NDRkZWU3ODI1MTk1ZWNmMDBmZDEwY2U2NmQ0MGExLi5iNjVk
NDJiMTdiOWUyNjQxNWI5OGViN2M1ZTk1NjE4YjYxZWYzMDA0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBA
CisyMDIxLTA1LTI0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBT
d2l0Y2ggZnJvbSBXVEY6Ok9wdGlvbmFsIHRvIHN0ZDo6b3B0aW9uYWwKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMTY3NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0ZvcndhcmQuaDogUmVtb3Zl
IE9wdGlvbmFsIGZvcndhcmQgZGVjbGFyYXRpb24uCisgICAgICAgIEFsc28gaW5jbHVkZSBPcHRp
b25hbC5oLCBqdXN0IGZvciBub3cuIE5lZWQgdG8gcmVtb3ZlIHRoaXMgb25jZQorICAgICAgICB3
ZSBkbyB0aGUgZ2xvYmFsIHJlbmFtZS4KKworICAgICAgICAqIHd0Zi9PcHRpb25hbC5oOiBSZXBs
YWNlZCB0aGUgZW50aXJlIFdURjo6T3B0aW9uYWwgaW1wbGVtZW50YXRpb24KKyAgICAgICAgd2l0
aCBhIFdURjo6T3B0aW9uYWwgInVzaW5nIiB0aGF0IG1ha2VzIGl0IGEgc3lub255bSBmb3Igc3Rk
OjpvcHRpb25hbC4KKyAgICAgICAgV1RGOjpudWxsb3B0IGJlaW5nIGEgc3lub255bSBmb3Igc3Rk
OjpudWxsb3B0IGFuZCBXVEY6Om51bGxvcHRfdAorICAgICAgICBiZWluZyBhIHN5bm9ueW0gZm9y
IHN0ZDo6bnVsbG9wdF90LiBBbHNvIGluY2x1ZGVkIGZ1bmN0aW9ucyBzbworICAgICAgICB0aGF0
IFdURjo6bWFrZU9wdGlvbmFsIGNhbGxzIHN0ZDo6bWFrZV9vcHRpb25hbCBhbmQga2VwdCB0aGUK
KyAgICAgICAgV1RGIGV4dGVuc2lvbiBuYW1lZCB2YWx1ZU9yQ29tcHV0ZS4gTmVlZCB0byByZW1v
dmUgdGhlc2Ugb25jZSB3ZQorICAgICAgICBkbyB0aGUgZ2xvYmFsIHJlbmFtZSwgYW5kIGxpa2Vs
eSBqdXN0IGdldCByaWQgb2YgdmFsdWVPckNvbXB1dGUsIGFuZAorICAgICAgICB0aGVuIGRlbGV0
ZSB0aGlzIGVudGlyZSBoZWFkZXIuCisKKyAgICAgICAgKiB3dGYvU2Vjb25kcy5oOiBBZGRlZCBh
biBpbmNsdWRlIG9mIEZhc3RNYWxsb2MuaCwgc2luY2UgaXQncyBubworICAgICAgICBsb25nZXIg
cHVsbGVkIGluIGJlY2F1c2Ugb2YgaW5jbHVkaW5nIE9wdGlvbmFsLmguCisKKyAgICAgICAgKiB3
dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVyLmg6IFVzZSBGb3J3YXJkLmggZm9yIG5vdyBp
bnN0ZWFkIG9mCisgICAgICAgIGZvcndhcmQtZGVjbGFyaW5nIFdURjo6b3B0aW9uYWwuCisKIDIw
MjEtMDUtMjQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92
ZSBTdHJpbmdCdWlsZGVyOjphcHBlbmRMaXRlcmFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGVjODA1MDEzN2Nh
YWJiN2UxYmM3YTZmZGRiMWMyNTgwZDQ4NDNjYy4uZTAxNGU4MTMzZGI3ODliMzhkNTNhMjNlMTE2
ZTA2MTJkZDVhOGZmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDIxLTA1LTI0ICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBTd2l0Y2ggZnJvbSBXVEY6
Ok9wdGlvbmFsIHRvIHN0ZDo6b3B0aW9uYWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxMTY3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVlA5VXRpbGl0aWVzLmg6IFR3
ZWFrZWQgY29kaW5nIHN0eWxlIGEgYml0LgorICAgICAgICBBZGRlZCBtaXNzaW5nIG9wZXJhdG9y
IT0gYmVjYXVzZSBzdGQ6Om9wdGlvbmFsJ3Mgb3BlcmF0b3IhPSByZWxpZXMKKyAgICAgICAgb24g
dGhhdCwgd2hpbGUgV1RGOjpPcHRpb25hbCdzIG9wZXJhdG9yIT0gcmVsaWVkIG9uIG9wZXJhdG9y
PT0uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVy
VmlkZW9FbmNvZGVyLmNwcDoKKyAgICAgICAgKEVuY29kZXJzOjpkZWZpbml0aW9uKTogVXNlIGEg
cG9pbnRlciBpbnN0ZWFkIG9mIE9wdGlvbmFsPCY+LgorCisgICAgICAgICogdGVzdGluZy9JbnRl
cm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRWUDlTY3JlZW5TaXpl
QW5kU2NhbGVGb3JUZXN0aW5nKTogVXNlIGEKKyAgICAgICAgZm9ybSBvZiBjb25zdHJ1Y3Rpb24g
Zm9yIFNjcmVlbkRhdGFPdmVycmlkZXMgdGhhdCB3b3JrcyB3aXRoIGJvdGgKKyAgICAgICAgV1RG
OjpPcHRpb25hbCBhbmQgc3RkOjpvcHRpb25hbC4gU29tZXRoaW5nIGFib3V0IHdheSB0aGUgb2xk
IGNvZGUKKyAgICAgICAgdXNlZCBXVEY6Om1ha2VPcHRpb25hbCB3YXMgbm90IGNvbXBhdGlibGUg
d2l0aCBzdGQ6Om1ha2Vfb3B0aW9uYWwsCisgICAgICAgIGJ1dCBpdCB3YXMgZWFzeSB0byBtYWtl
IGl0IG1vcmUgc3RyYWlnaHRmb3J3YXJkIGFuZCBub3QgZXZlbiBoYXZlCisgICAgICAgIHRvIHVz
ZSBhICJtYWtlIiBmdW5jdGlvbi4KKwogMjAyMS0wNS0yNCAgQWxhbiBCdWp0YXMgIDx6YWxhbkBh
cHBsZS5jb20+CiAKICAgICAgICAgW0xGQ10gQWRkIHN1cHBvcnQgZm9yIGdlb21ldHJ5L3F1aXJr
cyB2aXJ0dWFsIGZ1bmN0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBlYWJlZGIxZjIxNzFkNjFiNTU5MTk2Zjk5
N2JhN2Q2OWZhNWIxZjgyLi40YmI1MTU4ZGFjNDE5MGJlYjAxMmVjZGYwNTM3NjczMDA2YTA4Mjk1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDIxLTA1LTI0ICBEYXJpbiBBZGxlciAgPGRh
cmluQGFwcGxlLmNvbT4KKworICAgICAgICBTd2l0Y2ggZnJvbSBXVEY6Ok9wdGlvbmFsIHRvIHN0
ZDo6b3B0aW9uYWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxMTY3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXIuaDoKKyAgICAgICAgKElQQzo6QXJndW1l
bnRDb2Rlcjo6ZGVjb2RlKTogQWRkIGEgV1RGTW92ZS4gVHVybnMgb3V0IHRoaXMgd2FzIG5vdCBu
ZWVkZWQKKyAgICAgICAgdG8gZ2V0IGNvbXBpbGluZyB3aXRoIHN0ZDo6b3B0aW9uYWwsIGJ1dCBp
dCdzIGEgZ29vZCBpZGVhIGZvciBwZXJmb3JtYW5jZS4KKyAgICAgICAgVGhpcyBpcyBvbmUgb2Yg
dGhvc2UgY2FzZXMgd2hlcmUgaXQgbG9va3MgbGlrZSB0aGUgcmV0dXJuIHZhbHVlIG9wdGltaXph
dGlvbgorICAgICAgICB3b3VsZCB3b3JrLCBidXQgaXQgZG9lc24ndCBiZWNhdXNlIHRoZSByZXR1
cm4gdmFsdWUgZG9lc24ndCBleGFjdGx5IG1hdGNoCisgICAgICAgIHRoZSBsb2NhbCB2YXJpYWJs
ZSdzIHR5cGUuCisKKyAgICAgICAgKiBTaGFyZWQvVG91Y2hCYXJNZW51RGF0YS5oOiBSZW1vdmUg
c29tZSBvdmVyemVhbG91cyB1c2Ugb2YgZXhwbGljaXQgdGhhdAorICAgICAgICB3YXMgcHJldmVu
dGluZyBzb21lIGZpbGVzIGZyb20gY29tcGlsaW5nIHdpdGggdGhlIHN0cmljdGVyIHN0ZDo6b3B0
aW9uYWwKKyAgICAgICAgY29uc3RydWN0b3IgcnVsZXMsIHdoaWxlIGl0IGRpZCBub3QgcHJldmVu
dCBjb21waWxpbmcgd2l0aCBXVEY6Ok9wdGlvbmFsLgorCisgICAgICAgICogVUlQcm9jZXNzL0F1
dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6c3dpdGNoVG9Ccm93c2luZ0NvbnRleHQpOiBSZW1vdmVkIGFuIHVu
dXNlZAorICAgICAgICBsYW1iZGEgY2FwdHVyZSBhbmQgbG9jYWwgdmFyaWFibGUuIE5vdCBjbGVh
ciBob3cgdGhpcyBpcyByZWxhdGVkIHRvCisgICAgICAgIHN0ZDo6b3B0aW9uYWwsIGJ1dCBzaG93
ZWQgdXAgYXMgYSBjb21waWxlciB3YXJuaW5nLgorCiAyMDIxLTA1LTI0ICBDaHJpcyBGbGVpemFj
aCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IFNldHRpbmdzOiBJbmNyZWFz
ZSBjb250cmFzdCBpc24ndCBkZXRlY3RlZCBpbiBicm93c2VyIHVudGlsIGFuIGFkZGl0aW9uYWwg
c2V0dGluZyBpcyBhcHBsaWVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsQ29sbGF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bENvbGxhdG9yLmNwcAppbmRleCBjODJmYTYwZWIwYzI2N2RhZTcwMTgzY2NjYWVjOGU5OWJmOTU0
YTcyLi5iNzc2ZmIyOTNlMDU0ZTI0ZDU0NWIwM2ZmMDNkNjRhMGQwMDM4MjJkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAKQEAgLTE2NCw3ICsx
NjQsNyBAQCB2b2lkIEludGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNvbGxhdG9yKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgbG9jYQogICAgIGF1dG8gcmVxdWVzdGVkTG9jYWxl
cyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0LCBsb2NhbGVzKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCi0gICAgT3B0aW9uYWw8SlNPYmpl
Y3QmPiBvcHRpb25zID0gaW50bENvZXJjZU9wdGlvbnNUb09iamVjdChnbG9iYWxPYmplY3QsIG9w
dGlvbnNWYWx1ZSk7CisgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBpbnRsQ29lcmNlT3B0aW9uc1Rv
T2JqZWN0KGdsb2JhbE9iamVjdCwgb3B0aW9uc1ZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgbV91c2FnZSA9IGludGxPcHRpb248VXNhZ2U+KGds
b2JhbE9iamVjdCwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+dXNhZ2UsIHsgeyAic29ydCJf
cywgVXNhZ2U6OlNvcnQgfSwgeyAic2VhcmNoIl9zLCBVc2FnZTo6U2VhcmNoIH0gfSwgInVzYWdl
IG11c3QgYmUgZWl0aGVyIFwic29ydFwiIG9yIFwic2VhcmNoXCIiX3MsIFVzYWdlOjpTb3J0KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZv
cm1hdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3Jt
YXQuY3BwCmluZGV4IGQ3OGNjMmVhZTIyMjU5NjY3YmU2ZGYwYzMyOGNiODI1NzEwYTg5YjguLjI4
YmJmNmYzZWViMzEyMzZiNzgzZDQ2YTUxOGI5M2Q3MDBhODZjYjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcApAQCAtMTkz
LDcgKzE5Myw3IEBAIFZlY3RvcjxTdHJpbmc+IEludGxEYXRlVGltZUZvcm1hdDo6bG9jYWxlRGF0
YShjb25zdCBTdHJpbmcmIGxvY2FsZSwgUmVsZXZhbnRFeHRlCiAgICAgcmV0dXJuIGtleUxvY2Fs
ZURhdGE7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxKU09iamVjdCY+IHRvRGF0ZVRpbWVPcHRpb25z
QW55RGF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG9yaWdpbmFsT3B0
aW9ucykKK3N0YXRpYyBKU09iamVjdCogdG9EYXRlVGltZU9wdGlvbnNBbnlEYXRlKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgb3JpZ2luYWxPcHRpb25zKQogewogICAgIC8v
IDEyLjEuMSBUb0RhdGVUaW1lT3B0aW9ucyBhYnN0cmFjdCBvcGVyYXRpb24gKEVDTUEtNDAyIDIu
MCkKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkBAIC0zMDcsNyArMzA3LDcgQEAg
c3RhdGljIE9wdGlvbmFsPEpTT2JqZWN0Jj4gdG9EYXRlVGltZU9wdGlvbnNBbnlEYXRlKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QKICAgICAvLyBEZWZhdWx0cyBpcyBhbHdheXMgImRhdGUi
LiBJZ25vcmUgdGhpcyBicmFuY2guCiAKICAgICAvLyA5LiBSZXR1cm4gb3B0aW9ucy4KLSAgICBy
ZXR1cm4gKm9wdGlvbnM7CisgICAgcmV0dXJuIG9wdGlvbnM7CiB9CiAKIHZvaWQgSW50bERhdGVU
aW1lRm9ybWF0OjpzZXRGb3JtYXRzRnJvbVBhdHRlcm4oY29uc3QgU3RyaW5nVmlldyYgcGF0dGVy
bikKQEAgLTUyNCw3ICs1MjQsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6
ZURhdGVUaW1lRm9ybWF0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgVmVjdG9y
PFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFs
T2JqZWN0LCBsb2NhbGVzKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkp
OwogCi0gICAgT3B0aW9uYWw8SlNPYmplY3QmPiBvcHRpb25zID0gdG9EYXRlVGltZU9wdGlvbnNB
bnlEYXRlKGdsb2JhbE9iamVjdCwgb3JpZ2luYWxPcHRpb25zKTsKKyAgICBKU09iamVjdCogb3B0
aW9ucyA9IHRvRGF0ZVRpbWVPcHRpb25zQW55RGF0ZShnbG9iYWxPYmplY3QsIG9yaWdpbmFsT3B0
aW9ucyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIFJl
c29sdmVMb2NhbGVPcHRpb25zIGxvY2FsZU9wdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxEaXNwbGF5TmFtZXMuY3BwCmluZGV4IDBkZTU3NDI5MzQ1YWQ4
MWRhZTQxNjBlYWRkYjUwOTdjNjQyMGMxOTIuLmQ3OWMzNDE3OGEyYmJlZGE4OTcyNzJjYTE4OGFi
Nzc1ODgwZGY3Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxEaXNwbGF5TmFtZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxEaXNwbGF5TmFtZXMuY3BwCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgSW50bERpc3BsYXlOYW1l
czo6aW5pdGlhbGl6ZURpc3BsYXlOYW1lcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhCiAgICAgYXV0byByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChn
bG9iYWxPYmplY3QsIGxvY2FsZXMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CiAKLSAgICBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlvbnMgPSBpbnRsR2V0T3B0aW9u
c09iamVjdChnbG9iYWxPYmplY3QsIG9wdGlvbnNWYWx1ZSk7CisgICAgSlNPYmplY3QqIG9wdGlv
bnMgPSBpbnRsR2V0T3B0aW9uc09iamVjdChnbG9iYWxPYmplY3QsIG9wdGlvbnNWYWx1ZSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIC8vIERvZXMgbm90
IHNldCBlaXRoZXIgb2YgImNhIiBvciAibnUiLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bExpc3RGb3JtYXQuY3BwCmluZGV4IDg4MGVkMjZlNzNhZmUxY2E5NDQ3NzQ1
YmVlZmFmOWI1ZDM2ZjQxODIuLjIwZjY4NjhjNTE3ZjVhNTgzMjRlOTBlMmVlMDY3OTBkMjRmOGRk
MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9y
bWF0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1h
dC5jcHAKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBJbnRsTGlzdEZvcm1hdDo6aW5pdGlhbGl6ZUxp
c3RGb3JtYXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZQogICAgIGF1dG8g
cmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0LCBs
b2NhbGVzKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCi0gICAg
T3B0aW9uYWw8SlNPYmplY3QmPiBvcHRpb25zID0gaW50bEdldE9wdGlvbnNPYmplY3QoZ2xvYmFs
T2JqZWN0LCBvcHRpb25zVmFsdWUpOworICAgIEpTT2JqZWN0KiBvcHRpb25zID0gaW50bEdldE9w
dGlvbnNPYmplY3QoZ2xvYmFsT2JqZWN0LCBvcHRpb25zVmFsdWUpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICBSZXNvbHZlTG9jYWxlT3B0aW9ucyBsb2Nh
bGVPcHRpb25zOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bExvY2FsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmNw
cAppbmRleCBlYjA0NWM1NWU1MTVhZTY3M2MwYTQ2YmYxZTI0MDkwYzcwNjAzZmJjLi5mMjJhYmEw
NTUxNWZmZjUzZDBkMDY3OTUyNDcyZjNlMDljNmNmZDgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmNwcApAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgSW50
bExvY2FsZTo6aW5pdGlhbGl6ZUxvY2FsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBj
b25zdCBTdHJpbmcmIHRhCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIE9wdGlvbmFsPEpTT2Jq
ZWN0Jj4gb3B0aW9ucyA9IGludGxDb2VyY2VPcHRpb25zVG9PYmplY3QoZ2xvYmFsT2JqZWN0LCBv
cHRpb25zVmFsdWUpOworICAgIEpTT2JqZWN0KiBvcHRpb25zID0gaW50bENvZXJjZU9wdGlvbnNU
b09iamVjdChnbG9iYWxPYmplY3QsIG9wdGlvbnNWYWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIExvY2FsZUlEQnVpbGRlciBsb2NhbGVJRDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAK
aW5kZXggNTZlN2YxODRkNjJlMjQwYjI3MzYzYjkxZjRmMmEyNTYyZmQ2MDcxYy4uYWZlNDYwNjYw
M2U0NGQ3MGU4MzA0YTk1OWY2OGE3MmIwYzkwZDYzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAKQEAgLTI3NCw3ICsyNzQsNyBA
QCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGb3JtYXQoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYQogICAgIGF1dG8gcmVxdWVzdGVkTG9jYWxlcyA9IGNh
bm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0LCBsb2NhbGVzKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCi0gICAgT3B0aW9uYWw8SlNPYmplY3QmPiBv
cHRpb25zID0gaW50bENvZXJjZU9wdGlvbnNUb09iamVjdChnbG9iYWxPYmplY3QsIG9wdGlvbnNW
YWx1ZSk7CisgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBpbnRsQ29lcmNlT3B0aW9uc1RvT2JqZWN0
KGdsb2JhbE9iamVjdCwgb3B0aW9uc1ZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOwogCiAgICAgUmVzb2x2ZUxvY2FsZU9wdGlvbnMgbG9jYWxlT3B0aW9uczsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3Jt
YXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaApp
bmRleCA2ZjZiYTYyZWNiZjFiM2MzZDMwOGZlYTYxYzY2MmMwMjExOWI3ODdkLi4zOGE3NzBjNTlk
NDEwNzAwZjg5YzQ5Zjc2OWE5MTQ5ZGJjYTg1N2RlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oCkBAIC01MCw3ICs1MCw3IEBAIGVudW0g
Y2xhc3MgUmVsZXZhbnRFeHRlbnNpb25LZXkgOiB1aW50OF90OwogCiBlbnVtIGNsYXNzIEludGxS
b3VuZGluZ1R5cGUgOiB1aW50OF90IHsgRnJhY3Rpb25EaWdpdHMsIFNpZ25pZmljYW50RGlnaXRz
LCBDb21wYWN0Um91bmRpbmcgfTsKIGVudW0gY2xhc3MgSW50bE5vdGF0aW9uIDogdWludDhfdCB7
IFN0YW5kYXJkLCBTY2llbnRpZmljLCBFbmdpbmVlcmluZywgQ29tcGFjdCB9OwotdGVtcGxhdGU8
dHlwZW5hbWUgSW50bFR5cGU+IHZvaWQgc2V0TnVtYmVyRm9ybWF0RGlnaXRPcHRpb25zKEpTR2xv
YmFsT2JqZWN0KiwgSW50bFR5cGUqLCBPcHRpb25hbDxKU09iamVjdCY+LCB1bnNpZ25lZCBtaW5p
bXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0LCB1bnNpZ25lZCBtYXhpbXVtRnJhY3Rpb25EaWdpdHNE
ZWZhdWx0LCBJbnRsTm90YXRpb24pOwordGVtcGxhdGU8dHlwZW5hbWUgSW50bFR5cGU+IHZvaWQg
c2V0TnVtYmVyRm9ybWF0RGlnaXRPcHRpb25zKEpTR2xvYmFsT2JqZWN0KiwgSW50bFR5cGUqLCBK
U09iamVjdCosIHVuc2lnbmVkIG1pbmltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQsIHVuc2lnbmVk
IG1heGltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQsIEludGxOb3RhdGlvbik7CiAKIGNsYXNzIElu
dGxOdW1iZXJGb3JtYXQgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6
CkBAIC04OCw3ICs4OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBmb3JtYXRUb1BhcnRz
SW50ZXJuYWwoSlNHbG9iYWxPYmplY3QqLCBTdHlsZSwgZG91YmxlLCBjb25zdCBTdHJpbmcmIGZv
cm1hdHRlZCwgSW50bEZpZWxkSXRlcmF0b3ImLCBKU0FycmF5KiwgSlNTdHJpbmcqIHVuaXQgPSBu
dWxscHRyKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEludGxUeXBlPgotICAgIGZyaWVuZCB2
b2lkIHNldE51bWJlckZvcm1hdERpZ2l0T3B0aW9ucyhKU0dsb2JhbE9iamVjdCosIEludGxUeXBl
KiwgT3B0aW9uYWw8SlNPYmplY3QmPiwgdW5zaWduZWQgbWluaW11bUZyYWN0aW9uRGlnaXRzRGVm
YXVsdCwgdW5zaWduZWQgbWF4aW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCwgSW50bE5vdGF0aW9u
KTsKKyAgICBmcmllbmQgdm9pZCBzZXROdW1iZXJGb3JtYXREaWdpdE9wdGlvbnMoSlNHbG9iYWxP
YmplY3QqLCBJbnRsVHlwZSosIEpTT2JqZWN0KiwgdW5zaWduZWQgbWluaW11bUZyYWN0aW9uRGln
aXRzRGVmYXVsdCwgdW5zaWduZWQgbWF4aW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCwgSW50bE5v
dGF0aW9uKTsKIAogICAgIHN0YXRpYyBBU0NJSUxpdGVyYWwgbm90YXRpb25TdHJpbmcoSW50bE5v
dGF0aW9uKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bE51bWJlckZvcm1hdElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxOdW1iZXJGb3JtYXRJbmxpbmVzLmgKaW5kZXggNDEwNGI1ODYzYTMzOGU4M2ZlNTRiMWZjZGVi
ZTc1NTBiZGZkYzQ1NC4uMjNkMzg2M2QxNjAwNDMxZWY3NGRmNDBjODc0NDcxNzY2ZDA1MTY5YSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1h
dElubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVy
Rm9ybWF0SW5saW5lcy5oCkBAIC0zMyw3ICszMyw3IEBACiBuYW1lc3BhY2UgSlNDICB7CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIEludGxUeXBlPgotdm9pZCBzZXROdW1iZXJGb3JtYXREaWdpdE9wdGlv
bnMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSW50bFR5cGUqIGludGxJbnN0YW5jZSwg
T3B0aW9uYWw8SlNPYmplY3QmPiBvcHRpb25zLCB1bnNpZ25lZCBtaW5pbXVtRnJhY3Rpb25EaWdp
dHNEZWZhdWx0LCB1bnNpZ25lZCBtYXhpbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0LCBJbnRsTm90
YXRpb24gbm90YXRpb24pCit2b2lkIHNldE51bWJlckZvcm1hdERpZ2l0T3B0aW9ucyhKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBJbnRsVHlwZSogaW50bEluc3RhbmNlLCBKU09iamVjdCog
b3B0aW9ucywgdW5zaWduZWQgbWluaW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCwgdW5zaWduZWQg
bWF4aW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCwgSW50bE5vdGF0aW9uIG5vdGF0aW9uKQogewog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxP
YmplY3QuY3BwCmluZGV4IGQ1YWNjZTAzNDZlOWVlZjAyYzMxY2MzMWMxYzM0NGFhN2M1MDNjM2Eu
LmM2N2Q1NDJmMmI5ZDE4MzZlZjNhYjVjY2IzZTc4YjJiMzQxYTUwOWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCkBAIC01MjMsNyArNTIzLDcgQEAg
Y29uc3QgTG9jYWxlU2V0JiBpbnRsU2VnbWVudGVyQXZhaWxhYmxlTG9jYWxlcygpCiB9CiAKIC8v
IGh0dHBzOi8vdGMzOS5lcy9lY21hNDAyLyNzZWMtZ2V0b3B0aW9uCi1UcmlTdGF0ZSBpbnRsQm9v
bGVhbk9wdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBPcHRpb25hbDxKU09iamVj
dCY+IG9wdGlvbnMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eSkKK1RyaVN0YXRlIGludGxCb29sZWFu
T3B0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvcHRpb25zLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTU0MCw3ICs1
NDAsNyBAQCBUcmlTdGF0ZSBpbnRsQm9vbGVhbk9wdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBPcHRpb25hbDxKU09iamVjdCY+IG9wdAogICAgIHJldHVybiB0cmlTdGF0ZSh2YWx1
ZS50b0Jvb2xlYW4oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKLVN0cmluZyBpbnRsU3RyaW5nT3B0aW9u
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE9wdGlvbmFsPEpTT2JqZWN0Jj4gb3B0aW9u
cywgUHJvcGVydHlOYW1lIHByb3BlcnR5LCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Y29uc3QgY2hh
cio+IHZhbHVlcywgY29uc3QgY2hhciogbm90Rm91bmQsIGNvbnN0IGNoYXIqIGZhbGxiYWNrKQor
U3RyaW5nIGludGxTdHJpbmdPcHRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNP
YmplY3QqIG9wdGlvbnMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eSwgc3RkOjppbml0aWFsaXplcl9s
aXN0PGNvbnN0IGNoYXIqPiB2YWx1ZXMsIGNvbnN0IGNoYXIqIG5vdEZvdW5kLCBjb25zdCBjaGFy
KiBmYWxsYmFjaykKIHsKICAgICAvLyBHZXRPcHRpb24gKG9wdGlvbnMsIHByb3BlcnR5LCB0eXBl
PSJzdHJpbmciLCB2YWx1ZXMsIGZhbGxiYWNrKQogICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIu
aW8vZWNtYTQwMi8jc2VjLWdldG9wdGlvbgpAQCAtNTY4LDcgKzU2OCw3IEBAIFN0cmluZyBpbnRs
U3RyaW5nT3B0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE9wdGlvbmFsPEpTT2Jq
ZWN0Jj4gb3B0aW9uCiAgICAgcmV0dXJuIGZhbGxiYWNrOwogfQogCi11bnNpZ25lZCBpbnRsTnVt
YmVyT3B0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE9wdGlvbmFsPEpTT2JqZWN0
Jj4gb3B0aW9ucywgUHJvcGVydHlOYW1lIHByb3BlcnR5LCB1bnNpZ25lZCBtaW5pbXVtLCB1bnNp
Z25lZCBtYXhpbXVtLCB1bnNpZ25lZCBmYWxsYmFjaykKK3Vuc2lnbmVkIGludGxOdW1iZXJPcHRp
b24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG9wdGlvbnMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eSwgdW5zaWduZWQgbWluaW11bSwgdW5zaWduZWQgbWF4aW11bSwgdW5z
aWduZWQgZmFsbGJhY2spCiB7CiAgICAgLy8gR2V0TnVtYmVyT3B0aW9uIChvcHRpb25zLCBwcm9w
ZXJ0eSwgbWluaW11bSwgbWF4aW11bSwgZmFsbGJhY2spCiAgICAgLy8gaHR0cHM6Ly90YzM5Lmdp
dGh1Yi5pby9lY21hNDAyLyNzZWMtZ2V0bnVtYmVyb3B0aW9uCkBAIC05NjIsNyArOTYyLDcgQEAg
SlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNv
bnN0IExvY2FsZVNldCYgYXZhaWxhYmwKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgU3RyaW5nIG1hdGNoZXI7CiAKLSAgICBPcHRpb25hbDxKU09iamVjdCY+
IG9wdGlvbnMgPSBpbnRsQ29lcmNlT3B0aW9uc1RvT2JqZWN0KGdsb2JhbE9iamVjdCwgb3B0aW9u
c1ZhbHVlKTsKKyAgICBKU09iamVjdCogb3B0aW9ucyA9IGludGxDb2VyY2VPcHRpb25zVG9PYmpl
Y3QoZ2xvYmFsT2JqZWN0LCBvcHRpb25zVmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICBMb2NhbGVNYXRjaGVyIGxvY2FsZU1hdGNoZXIgPSBp
bnRsT3B0aW9uPExvY2FsZU1hdGNoZXI+KGdsb2JhbE9iamVjdCwgb3B0aW9ucywgdm0ucHJvcGVy
dHlOYW1lcy0+bG9jYWxlTWF0Y2hlciwgeyB7ICJsb29rdXAiX3MsIExvY2FsZU1hdGNoZXI6Okxv
b2t1cCB9LCB7ICJiZXN0IGZpdCJfcywgTG9jYWxlTWF0Y2hlcjo6QmVzdEZpdCB9IH0sICJsb2Nh
bGVNYXRjaGVyIG11c3QgYmUgZWl0aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZpdFwiIl9zLCBM
b2NhbGVNYXRjaGVyOjpCZXN0Rml0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxPYmplY3QuaAppbmRleCBlOTNjOWJlODQ0ODFlZWY0YzNmNzVmNzYzNWQ5ODE2ZjFlODdkYTk3
Li45NWViN2JiNzk5YjVlNzI4MjE4NTNmOWE5YmE0YmIyOTAyMWJkMDUyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5oCkBAIC05NCw5ICs5NCw5IEBAIGlubGlu
ZSBjb25zdCBMb2NhbGVTZXQmIGludGxQbHVyYWxSdWxlc0F2YWlsYWJsZUxvY2FsZXMoKSB7IHJl
dHVybiBpbnRsQXZhaWxhYmxlCiBpbmxpbmUgY29uc3QgTG9jYWxlU2V0JiBpbnRsUmVsYXRpdmVU
aW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVz
KCk7IH0KIGlubGluZSBjb25zdCBMb2NhbGVTZXQmIGludGxMaXN0Rm9ybWF0QXZhaWxhYmxlTG9j
YWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KIAotVHJpU3RhdGUgaW50
bEJvb2xlYW5PcHRpb24oSlNHbG9iYWxPYmplY3QqLCBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlv
bnMsIFByb3BlcnR5TmFtZSk7Ci1TdHJpbmcgaW50bFN0cmluZ09wdGlvbihKU0dsb2JhbE9iamVj
dCosIE9wdGlvbmFsPEpTT2JqZWN0Jj4gb3B0aW9ucywgUHJvcGVydHlOYW1lLCBzdGQ6OmluaXRp
YWxpemVyX2xpc3Q8Y29uc3QgY2hhcio+IHZhbHVlcywgY29uc3QgY2hhciogbm90Rm91bmQsIGNv
bnN0IGNoYXIqIGZhbGxiYWNrKTsKLXVuc2lnbmVkIGludGxOdW1iZXJPcHRpb24oSlNHbG9iYWxP
YmplY3QqLCBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlvbnMsIFByb3BlcnR5TmFtZSwgdW5zaWdu
ZWQgbWluaW11bSwgdW5zaWduZWQgbWF4aW11bSwgdW5zaWduZWQgZmFsbGJhY2spOworVHJpU3Rh
dGUgaW50bEJvb2xlYW5PcHRpb24oSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogb3B0aW9ucywg
UHJvcGVydHlOYW1lKTsKK1N0cmluZyBpbnRsU3RyaW5nT3B0aW9uKEpTR2xvYmFsT2JqZWN0Kiwg
SlNPYmplY3QqIG9wdGlvbnMsIFByb3BlcnR5TmFtZSwgc3RkOjppbml0aWFsaXplcl9saXN0PGNv
bnN0IGNoYXIqPiB2YWx1ZXMsIGNvbnN0IGNoYXIqIG5vdEZvdW5kLCBjb25zdCBjaGFyKiBmYWxs
YmFjayk7Cit1bnNpZ25lZCBpbnRsTnVtYmVyT3B0aW9uKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmpl
Y3QqIG9wdGlvbnMsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgbWluaW11bSwgdW5zaWduZWQgbWF4
aW11bSwgdW5zaWduZWQgZmFsbGJhY2spOwogdW5zaWduZWQgaW50bERlZmF1bHROdW1iZXJPcHRp
b24oSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIG1pbmlt
dW0sIHVuc2lnbmVkIG1heGltdW0sIHVuc2lnbmVkIGZhbGxiYWNrKTsKIFZlY3RvcjxjaGFyLCAz
Mj4gbG9jYWxlSURCdWZmZXJGb3JMYW5ndWFnZVRhZ1dpdGhOdWxsVGVybWluYXRvcihjb25zdCBD
U3RyaW5nJik7CiBTdHJpbmcgbGFuZ3VhZ2VUYWdGb3JMb2NhbGVJRChjb25zdCBjaGFyKiwgYm9v
bCBpc0ltbW9ydGFsID0gZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bE9iamVjdElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxPYmplY3RJbmxpbmVzLmgKaW5kZXggMmFkYjg1YjU0MTFlYzc1NGZkNzc5YjYzNjY0
MDI1YjViMmY5NTFkMC4uZDhiMGFiYTYyNzI0ZWI1NWZiZTVhZmQ3NjU3ZTRjYTU1MmExYjRiYiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdElubGlu
ZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0SW5saW5l
cy5oCkBAIC0xMjAsNyArMTIwLDcgQEAgSW5zdGFuY2VUeXBlKiB1bndyYXBGb3JMZWdhY3lJbnRs
Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWwKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZT4KLVJlc3VsdFR5cGUgaW50bE9wdGlvbihKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlvbnMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eSwgc3RkOjppbml0aWFsaXplcl9saXN0PHN0ZDo6cGFpcjxBU0NJSUxp
dGVyYWwsIFJlc3VsdFR5cGU+PiB2YWx1ZXMsIEFTQ0lJTGl0ZXJhbCBub3RGb3VuZE1lc3NhZ2Us
IFJlc3VsdFR5cGUgZmFsbGJhY2spCitSZXN1bHRUeXBlIGludGxPcHRpb24oSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG9wdGlvbnMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eSwgc3RkOjppbml0aWFsaXplcl9saXN0PHN0ZDo6cGFpcjxBU0NJSUxpdGVyYWwsIFJlc3VsdFR5
cGU+PiB2YWx1ZXMsIEFTQ0lJTGl0ZXJhbCBub3RGb3VuZE1lc3NhZ2UsIFJlc3VsdFR5cGUgZmFs
bGJhY2spCiB7CiAgICAgLy8gR2V0T3B0aW9uIChvcHRpb25zLCBwcm9wZXJ0eSwgdHlwZT0ic3Ry
aW5nIiwgdmFsdWVzLCBmYWxsYmFjaykKICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2Vj
bWE0MDIvI3NlYy1nZXRvcHRpb24KQEAgLTIwMSwyOCArMjAxLDI4IEBAIGlubGluZSBVQ29sbGF0
aW9uUmVzdWx0IGNvbXBhcmVBU0NJSVdpdGhVQ0FEVUNFVChjb25zdCBDaGFyYWN0ZXJUeXBlMSog
Y2hhcmFjdGVyCiB9CiAKIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hNDAyLyNzZWMtZ2V0b3B0aW9u
c29iamVjdAotaW5saW5lIE9wdGlvbmFsPEpTT2JqZWN0Jj4gaW50bEdldE9wdGlvbnNPYmplY3Qo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBvcHRpb25zKQoraW5saW5lIEpT
T2JqZWN0KiBpbnRsR2V0T3B0aW9uc09iamVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIG9wdGlvbnMpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAob3B0aW9u
cy5pc1VuZGVmaW5lZCgpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoTElLRUxZKG9wdGlvbnMuaXNPYmplY3QoKSkpCi0gICAg
ICAgIHJldHVybiAqYXNPYmplY3Qob3B0aW9ucyk7CisgICAgICAgIHJldHVybiBhc09iamVjdChv
cHRpb25zKTsKICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAib3B0aW9u
cyBhcmd1bWVudCBpcyBub3QgYW4gb2JqZWN0IG9yIHVuZGVmaW5lZCJfcyk7Ci0gICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogLy8gaHR0cHM6Ly90YzM5
LmVzL2VjbWE0MDIvI3NlYy1jb2VyY2VvcHRpb25zdG9vYmplY3QKLWlubGluZSBPcHRpb25hbDxK
U09iamVjdCY+IGludGxDb2VyY2VPcHRpb25zVG9PYmplY3QoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBvcHRpb25zVmFsdWUpCitpbmxpbmUgSlNPYmplY3QqIGludGxDb2Vy
Y2VPcHRpb25zVG9PYmplY3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBv
cHRpb25zVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAob3B0aW9uc1ZhbHVl
LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIEpTT2JqZWN0KiBvcHRpb25zID0gb3B0aW9uc1ZhbHVlLnRvT2Jq
ZWN0KGdsb2JhbE9iamVjdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgV1RGOjpu
dWxsb3B0KTsKLSAgICByZXR1cm4gKm9wdGlvbnM7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgbnVsbHB0cik7CisgICAgcmV0dXJuIG9wdGlvbnM7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJh
bFJ1bGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxl
cy5jcHAKaW5kZXggY2NjZjQ5NzE1ODE4ZGZkMzAyNjhhMzE3YWRhZGI4ZThkY2JhZjUzOC4uZDhi
Yzk2NjlmY2JhYzJlMjA5YWU0NTRkNjJiZmMzZDI4YTM1ZTQ4OSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCkBAIC04Niw3ICs4Niw3
IEBAIHZvaWQgSW50bFBsdXJhbFJ1bGVzOjppbml0aWFsaXplUGx1cmFsUnVsZXMoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1CiAgICAgVmVjdG9yPFN0cmluZz4gcmVxdWVzdGVk
TG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0LCBsb2NhbGVzKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCi0gICAgT3B0aW9uYWw8
SlNPYmplY3QmPiBvcHRpb25zID0gaW50bENvZXJjZU9wdGlvbnNUb09iamVjdChnbG9iYWxPYmpl
Y3QsIG9wdGlvbnNWYWx1ZSk7CisgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBpbnRsQ29lcmNlT3B0
aW9uc1RvT2JqZWN0KGdsb2JhbE9iamVjdCwgb3B0aW9uc1ZhbHVlKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgUmVzb2x2ZUxvY2FsZU9wdGlvbnMgbG9j
YWxlT3B0aW9uczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxQbHVyYWxSdWxlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJh
bFJ1bGVzLmgKaW5kZXggZTI5ZTFiNjI2ZDMxYzkwODI2ZDQ3ZjJkNmJiNWFjMTM3YTViZmI1ZS4u
NmQzYWNhYjg0ZTgxNGU1ZjdjMDdkMDI0ZjNlMjVmZjJlNWYwZjZlNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgKQEAgLTU4LDcgKzU4LDcg
QEAgcHVibGljOgogICAgIERFQ0xBUkVfSU5GTzsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIElu
dGxUeXBlPgotICAgIGZyaWVuZCB2b2lkIHNldE51bWJlckZvcm1hdERpZ2l0T3B0aW9ucyhKU0ds
b2JhbE9iamVjdCosIEludGxUeXBlKiwgT3B0aW9uYWw8SlNPYmplY3QmPiwgdW5zaWduZWQgbWlu
aW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCwgdW5zaWduZWQgbWF4aW11bUZyYWN0aW9uRGlnaXRz
RGVmYXVsdCwgSW50bE5vdGF0aW9uKTsKKyAgICBmcmllbmQgdm9pZCBzZXROdW1iZXJGb3JtYXRE
aWdpdE9wdGlvbnMoSlNHbG9iYWxPYmplY3QqLCBJbnRsVHlwZSosIEpTT2JqZWN0KiwgdW5zaWdu
ZWQgbWluaW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCwgdW5zaWduZWQgbWF4aW11bUZyYWN0aW9u
RGlnaXRzRGVmYXVsdCwgSW50bE5vdGF0aW9uKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZVBsdXJh
bFJ1bGVzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBsb2NhbGVzLCBKU1ZhbHVlIG9wdGlvbnMp
OwogICAgIEpTVmFsdWUgc2VsZWN0KEpTR2xvYmFsT2JqZWN0KiwgZG91YmxlIHZhbHVlKSBjb25z
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2
ZVRpbWVGb3JtYXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0
aXZlVGltZUZvcm1hdC5jcHAKaW5kZXggMmI1ZDI4ZWZkOGNlOGYyN2Q2NTc1ODUwMmEzMTA5ODA1
YjcwNzNkZS4uYjg5Y2FlODY2MmExMDY2OTE2YWRkYzdjM2IxZGE1NjM3ZjM1YzhjNyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1h
dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGlt
ZUZvcm1hdC5jcHAKQEAgLTg5LDcgKzg5LDcgQEAgdm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0
Ojppbml0aWFsaXplUmVsYXRpdmVUaW1lRm9ybWF0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWwKICAg
ICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlz
dChnbG9iYWxPYmplY3QsIGxvY2FsZXMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHZvaWQoKSk7CiAKLSAgICBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlvbnMgPSBpbnRsQ29lcmNl
T3B0aW9uc1RvT2JqZWN0KGdsb2JhbE9iamVjdCwgb3B0aW9uc1ZhbHVlKTsKKyAgICBKU09iamVj
dCogb3B0aW9ucyA9IGludGxDb2VyY2VPcHRpb25zVG9PYmplY3QoZ2xvYmFsT2JqZWN0LCBvcHRp
b25zVmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAg
ICBSZXNvbHZlTG9jYWxlT3B0aW9ucyBsb2NhbGVPcHRpb25zOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudGVyLmNwcAppbmRleCA3MmE4M2MwOGNkMzQyMzc1
Y2ExNDZiODc3Njg3MmRmOTBjOGM2YmU2Li4xMGQ5YWFmZWFjNDNmODdjMzAzNzFiNjAwZmZhZGI1
YmZmZDBkNTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
U2VnbWVudGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2Vn
bWVudGVyLmNwcApAQCAtNjgsNyArNjgsNyBAQCB2b2lkIEludGxTZWdtZW50ZXI6OmluaXRpYWxp
emVTZWdtZW50ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBsbwogICAg
IGF1dG8gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2Jq
ZWN0LCBsb2NhbGVzKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwog
Ci0gICAgT3B0aW9uYWw8SlNPYmplY3QmPiBvcHRpb25zID0gaW50bEdldE9wdGlvbnNPYmplY3Qo
Z2xvYmFsT2JqZWN0LCBvcHRpb25zVmFsdWUpOworICAgIEpTT2JqZWN0KiBvcHRpb25zID0gaW50
bEdldE9wdGlvbnNPYmplY3QoZ2xvYmFsT2JqZWN0LCBvcHRpb25zVmFsdWUpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICBSZXNvbHZlTG9jYWxlT3B0aW9u
cyBsb2NhbGVPcHRpb25zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRm9yd2FyZC5oIGIv
U291cmNlL1dURi93dGYvRm9yd2FyZC5oCmluZGV4IGM0N2NjNWRjN2Q4YjA3MWEyMWViM2Y3YmEy
ODM5OTg1ZTFjZGIzZWYuLmM1MWY2N2FmMDJhZmQ2YTc2OGJkYjUxZTNhN2I2NmMxYTFiZTA2ZGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9Gb3J3YXJkLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwNi0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjEsNiArMjEsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxzdGRkZWYu
aD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
IAogbmFtZXNwYWNlIFdURiB7CkBAIC03MCw3ICs3MSw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lPiBj
bGFzcyBGdW5jdGlvbjsKIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSA9IEFueVRocmVhZHNB
Y2Nlc3NUcmFpdHM+IGNsYXNzIExhenlOZXZlckRlc3Ryb3llZDsKIHRlbXBsYXRlPHR5cGVuYW1l
LCB0eXBlbmFtZSA9IEFueVRocmVhZHNBY2Nlc3NUcmFpdHM+IGNsYXNzIE5ldmVyRGVzdHJveWVk
OwogdGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIE9wdGlvblNldDsKLXRlbXBsYXRlPHR5cGVuYW1l
PiBjbGFzcyBPcHRpb25hbDsKIHRlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBQYWNrZWQ7CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgPSBhbGlnbm9mKFQpPiBjbGFzcyBQYWNrZWRBbGlnbmVk
UHRyOwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBSYXdQdHJUcmFpdHM7CkBAIC0xMzYsNyAr
MTM2LDYgQEAgdXNpbmcgV1RGOjpMb2NrOwogdXNpbmcgV1RGOjpMb2dnZXI7CiB1c2luZyBXVEY6
Ok5ldmVyRGVzdHJveWVkOwogdXNpbmcgV1RGOjpPcHRpb25TZXQ7Ci11c2luZyBXVEY6Ok9wdGlv
bmFsOwogdXNpbmcgV1RGOjpPcmRpbmFsTnVtYmVyOwogdXNpbmcgV1RGOjpQcmludFN0cmVhbTsK
IHVzaW5nIFdURjo6UmF3UHRyVHJhaXRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvT3B0
aW9uYWwuaCBiL1NvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmgKaW5kZXggNjdhYmExMWFmMTk3M2Ez
OTUxZjVjMzNjNTA2ZDIwOWY3YTZiNWZhYS4uZTk1OGFjMzY5Nzk0ZDYyZmIwYzdiMmJlYmVmOWI5
MzM0N2Y2OGQyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvT3B0aW9uYWwuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5oCkBAIC0xLDEwNDcgKzEsNTIgQEAKLS8vIENvcHlyaWdo
dCAoQykgMjAxMSAtIDIwMTIgQW5kcnplaiBLcnplbWllbnNraS4KLS8vCi0vLyBVc2UsIG1vZGlm
aWNhdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBpcyBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2Fy
ZQotLy8gTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5T
RV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8w
LnR4dCkKLS8vCi0vLyBUaGUgaWRlYSBhbmQgaW50ZXJmYWNlIGlzIGJhc2VkIG9uIEJvb3N0Lk9w
dGlvbmFsIGxpYnJhcnkKLS8vIGF1dGhvcmVkIGJ5IEZlcm5hbmRvIEx1aXMgQ2FjY2lvbGEgQ2Fy
YmFsbGFsCi0vLwotLy8gQm9vc3QgU29mdHdhcmUgTGljZW5zZSAtIFZlcnNpb24gMS4wIC0gQXVn
dXN0IDE3dGgsIDIwMDMKLS8vCi0vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl
IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvciBvcmdhbml6YXRpb24KLS8vIG9idGFpbmluZyBh
IGNvcHkgb2YgdGhlIHNvZnR3YXJlIGFuZCBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBjb3Zl
cmVkIGJ5Ci0vLyB0aGlzIGxpY2Vuc2UgKHRoZSAiU29mdHdhcmUiKSB0byB1c2UsIHJlcHJvZHVj
ZSwgZGlzcGxheSwgZGlzdHJpYnV0ZSwKLS8vIGV4ZWN1dGUsIGFuZCB0cmFuc21pdCB0aGUgU29m
dHdhcmUsIGFuZCB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlCi0vLyBTb2Z0d2Fy
ZSwgYW5kIHRvIHBlcm1pdCB0aGlyZC1wYXJ0aWVzIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1
cm5pc2hlZCB0bwotLy8gZG8gc28sIGFsbCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmc6Ci0vLwot
Ly8gVGhlIGNvcHlyaWdodCBub3RpY2VzIGluIHRoZSBTb2Z0d2FyZSBhbmQgdGhpcyBlbnRpcmUg
c3RhdGVtZW50LCBpbmNsdWRpbmcKLS8vIHRoZSBhYm92ZSBsaWNlbnNlIGdyYW50LCB0aGlzIHJl
c3RyaWN0aW9uIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCi0vLyBtdXN0IGJlIGluY2x1
ZGVkIGluIGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCBh
bmQKLS8vIGFsbCBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTb2Z0d2FyZSwgdW5sZXNzIHN1Y2gg
Y29waWVzIG9yIGRlcml2YXRpdmUKLS8vIHdvcmtzIGFyZSBzb2xlbHkgaW4gdGhlIGZvcm0gb2Yg
bWFjaGluZS1leGVjdXRhYmxlIG9iamVjdCBjb2RlIGdlbmVyYXRlZCBieQotLy8gYSBzb3VyY2Ug
bGFuZ3VhZ2UgcHJvY2Vzc29yLgotLy8KLS8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg
SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0vLyBJTVBMSUVE
LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSwKLS8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBUSVRMRSBBTkQg
Tk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQKLS8vIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBPUiBBTllPTkUgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSBCRSBMSUFCTEUKLS8vIEZP
UiBBTlkgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFRP
UlQgT1IgT1RIRVJXSVNFLAotLy8gQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElP
TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCi0vLyBERUFMSU5HUyBJTiBU
SEUgU09GVFdBUkUuCi0KLS8vIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ha3J6ZW1p
MS9PcHRpb25hbCAoODQ1NmMzOTIzNzc2YjMzYjRhZTg1MjczNDI3M2ZlOTM0YzNlNGU2MSkKLQot
Ly8gTW9kaWZpZWQgdG8gbWFrZSBpdCBjb21waWxlIHdpdGggZXhjZXB0aW9ucyBkaXNhYmxlZC4K
Ky8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCiAKICNwcmFnbWEgb25jZQogCi0jIGluY2x1ZGUgPHV0aWxpdHk+Ci0j
IGluY2x1ZGUgPHR5cGVfdHJhaXRzPgotIyBpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgotIyBp
bmNsdWRlIDxjYXNzZXJ0PgotIyBpbmNsdWRlIDxzdHJpbmc+Ci0jIGluY2x1ZGUgPHN0ZGV4Y2Vw
dD4KLSMgaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSMgaW5jbHVkZSA8d3RmL0NvbXBpbGVy
Lmg+Ci0jIGluY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Ci0jIGluY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KLQotIyBkZWZpbmUgVFIyX09QVElPTkFMX1JFUVVJUkVTKC4uLikgdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8X19WQV9BUkdTX186OnZhbHVlLCBib29sPjo6dHlwZSA9IGZhbHNlCi0K
LSMgaWYgZGVmaW5lZCBfX0dOVUNfXyAvLyBOT1RFOiBHTlVDIGlzIGFsc28gZGVmaW5lZCBmb3Ig
Q2xhbmcKLSMgICBpZiAoX19HTlVDX18gPT0gNCkgJiYgKF9fR05VQ19NSU5PUl9fID49IDgpCi0j
ICAgICBkZWZpbmUgVFIyX09QVElPTkFMX0dDQ180XzhfQU5EX0hJR0hFUl9fXwotIyAgIGVsaWYg
KF9fR05VQ19fID4gNCkKLSMgICAgIGRlZmluZSBUUjJfT1BUSU9OQUxfR0NDXzRfOF9BTkRfSElH
SEVSX19fCi0jICAgZW5kaWYKLSMKLSMgICBpZiAoX19HTlVDX18gPT0gNCkgJiYgKF9fR05VQ19N
SU5PUl9fID49IDcpCi0jICAgICBkZWZpbmUgVFIyX09QVElPTkFMX0dDQ180XzdfQU5EX0hJR0hF
Ul9fXwotIyAgIGVsaWYgKF9fR05VQ19fID4gNCkKLSMgICAgIGRlZmluZSBUUjJfT1BUSU9OQUxf
R0NDXzRfN19BTkRfSElHSEVSX19fCi0jICAgZW5kaWYKLSMKLSMgICBpZiAoX19HTlVDX18gPT0g
NCkgJiYgKF9fR05VQ19NSU5PUl9fID09IDgpICYmIChfX0dOVUNfUEFUQ0hMRVZFTF9fID49IDEp
Ci0jICAgICBkZWZpbmUgVFIyX09QVElPTkFMX0dDQ180XzhfMV9BTkRfSElHSEVSX19fCi0jICAg
ZWxpZiAoX19HTlVDX18gPT0gNCkgJiYgKF9fR05VQ19NSU5PUl9fID49IDkpCi0jICAgICBkZWZp
bmUgVFIyX09QVElPTkFMX0dDQ180XzhfMV9BTkRfSElHSEVSX19fCi0jICAgZWxpZiAoX19HTlVD
X18gPiA0KQotIyAgICAgZGVmaW5lIFRSMl9PUFRJT05BTF9HQ0NfNF84XzFfQU5EX0hJR0hFUl9f
XwotIyAgIGVuZGlmCi0jIGVuZGlmCi0jCi0jIGlmIGRlZmluZWQgX19jbGFuZ19tYWpvcl9fCi0j
ICAgaWYgKF9fY2xhbmdfbWFqb3JfXyA9PSAzICYmIF9fY2xhbmdfbWlub3JfXyA+PSA1KQotIyAg
ICAgZGVmaW5lIFRSMl9PUFRJT05BTF9DTEFOR18zXzVfQU5EX0hJR0hURVJfCi0jICAgZWxpZiAo
X19jbGFuZ19tYWpvcl9fID4gMykKLSMgICAgIGRlZmluZSBUUjJfT1BUSU9OQUxfQ0xBTkdfM181
X0FORF9ISUdIVEVSXwotIyAgIGVuZGlmCi0jICAgaWYgZGVmaW5lZCBUUjJfT1BUSU9OQUxfQ0xB
TkdfM181X0FORF9ISUdIVEVSXwotIyAgICAgZGVmaW5lIFRSMl9PUFRJT05BTF9DTEFOR18zXzRf
Ml9BTkRfSElHSEVSXwotIyAgIGVsaWYgKF9fY2xhbmdfbWFqb3JfXyA9PSAzICYmIF9fY2xhbmdf
bWlub3JfXyA9PSA0ICYmIF9fY2xhbmdfcGF0Y2hsZXZlbF9fID49IDIpCi0jICAgICBkZWZpbmUg
VFIyX09QVElPTkFMX0NMQU5HXzNfNF8yX0FORF9ISUdIRVJfCi0jICAgZW5kaWYKLSMgZW5kaWYK
LSMKLSMgaWYgZGVmaW5lZCBfTVNDX1ZFUgotIyAgIGlmIChfTVNDX1ZFUiA+PSAxOTAwKQotIyAg
ICAgZGVmaW5lIFRSMl9PUFRJT05BTF9NU1ZDXzIwMTVfQU5EX0hJR0hFUl9fXwotIyAgIGVuZGlm
Ci0jIGVuZGlmCi0KLSMgaWYgZGVmaW5lZCBfX2NsYW5nX18KLSMgICBpZiAoX19jbGFuZ19tYWpv
cl9fID4gMikgfHwgKF9fY2xhbmdfbWFqb3JfXyA9PSAyKSAmJiAoX19jbGFuZ19taW5vcl9fID49
IDkpCi0jICAgICBkZWZpbmUgT1BUSU9OQUxfSEFTX1RISVNfUlZBTFVFX1JFRlMgMQotIyAgIGVs
c2UKLSMgICAgIGRlZmluZSBPUFRJT05BTF9IQVNfVEhJU19SVkFMVUVfUkVGUyAwCi0jICAgZW5k
aWYKLSMgZWxpZiBkZWZpbmVkIFRSMl9PUFRJT05BTF9HQ0NfNF84XzFfQU5EX0hJR0hFUl9fXwot
IyAgIGRlZmluZSBPUFRJT05BTF9IQVNfVEhJU19SVkFMVUVfUkVGUyAxCi0jIGVsaWYgZGVmaW5l
ZCBUUjJfT1BUSU9OQUxfTVNWQ18yMDE1X0FORF9ISUdIRVJfX18KLSMgICBkZWZpbmUgT1BUSU9O
QUxfSEFTX1RISVNfUlZBTFVFX1JFRlMgMQotIyBlbHNlCi0jICAgZGVmaW5lIE9QVElPTkFMX0hB
U19USElTX1JWQUxVRV9SRUZTIDAKLSMgZW5kaWYKLQotCi0jIGlmIGRlZmluZWQgVFIyX09QVElP
TkFMX0dDQ180XzhfMV9BTkRfSElHSEVSX19fCi0jICAgZGVmaW5lIE9QVElPTkFMX0hBU19DT05T
VEVYUFJfSU5JVF9MSVNUIDEKLSMgICBkZWZpbmUgT1BUSU9OQUxfQ09OU1RFWFBSX0lOSVRfTElT
VCBjb25zdGV4cHIKLSMgZWxzZQotIyAgIGRlZmluZSBPUFRJT05BTF9IQVNfQ09OU1RFWFBSX0lO
SVRfTElTVCAwCi0jICAgZGVmaW5lIE9QVElPTkFMX0NPTlNURVhQUl9JTklUX0xJU1QKLSMgZW5k
aWYKLQotIyAvLyBJbiBDKysxMSBjb25zdGV4cHIgaW1wbGllcyBjb25zdCwgc28gd2UgbmVlZCB0
byBtYWtlIG5vbi1jb25zdCBtZW1iZXJzIGFsc28gbm9uLWNvbnN0ZXhwcgotIyBpZiAoZGVmaW5l
ZCBfX2NwbHVzcGx1cykgJiYgKF9fY3BsdXNwbHVzID09IDIwMTEwM0wpCi0jICAgZGVmaW5lIE9Q
VElPTkFMX01VVEFCTEVfQ09OU1RFWFBSCi0jIGVsc2UKLSMgICBkZWZpbmUgT1BUSU9OQUxfTVVU
QUJMRV9DT05TVEVYUFIgY29uc3RleHByCi0jIGVuZGlmCi0KLSNpZiBDT01QSUxFUl9TVVBQT1JU
UyhFWENFUFRJT05TKQotI2RlZmluZSBfX1RIUk9XX0VYQ0VQVElPTihfX2V4Y2VwdGlvbikgdGhy
b3cgX19leGNlcHRpb247Ci0jZGVmaW5lIF9fTk9FWENFUFQgbm9leGNlcHQKLSNkZWZpbmUgX19O
T0VYQ0VQVF8oX19leGNlcHRpb24pIG5vZXhjZXB0KF9fZXhjZXB0aW9uKQotI2Vsc2UKLSNkZWZp
bmUgX19USFJPV19FWENFUFRJT04oX19leGNlcHRpb24pIGRvIHsgKHZvaWQpX19leGNlcHRpb247
IENSQVNIKCk7IH0gd2hpbGUgKDApOwotI2RlZmluZSBfX05PRVhDRVBUCi0jZGVmaW5lIF9fTk9F
WENFUFRfKC4uLikKLSNlbmRpZgorI2luY2x1ZGUgPG9wdGlvbmFsPgogCiBuYW1lc3BhY2UgV1RG
IHsKLW5hbWVzcGFjZSBkZXRhaWxfIHsKLQotLy8gTk9URTogQWxsIG91ciB0YXJnZXQgY29tcGls
ZXJzIHN1cHBvcnQgaXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZS4KLS8vIC8vIEJFR0lOIHdvcmth
cm91bmQgZm9yIG1pc3NpbmcgaXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZQotLy8gIyBpZiBkZWZp
bmVkIFRSMl9PUFRJT05BTF9HQ0NfNF84X0FORF9ISUdIRVJfX18KLS8vICAgICAvLyBsZWF2ZSBp
dDogaXQgaXMgYWxyZWFkeSB0aGVyZQotLy8gIyBlbGlmIGRlZmluZWQgVFIyX09QVElPTkFMX0NM
QU5HXzNfNF8yX0FORF9ISUdIRVJfCi0vLyAgICAgLy8gbGVhdmUgaXQ6IGl0IGlzIGFscmVhZHkg
dGhlcmUKLS8vICMgZWxpZiBkZWZpbmVkIFRSMl9PUFRJT05BTF9NU1ZDXzIwMTVfQU5EX0hJR0hF
Ul9fXwotLy8gICAgIC8vIGxlYXZlIGl0OiBpdCBpcyBhbHJlYWR5IHRoZXJlCi0vLyAjIGVsaWYg
ZGVmaW5lZCBUUjJfT1BUSU9OQUxfRElTQUJMRV9FTVVMQVRJT05fT0ZfVFlQRV9UUkFJVFMKLS8v
ICAgICAvLyBsZWF2ZSBpdDogdGhlIHVzZXIgZG9lc24ndCB3YW50IGl0Ci0vLyAjIGVsc2UKLS8v
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS8vICAgICB1c2luZyBpc190cml2aWFsbHlfZGVz
dHJ1Y3RpYmxlID0gc3RkOjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yPFQ+OwotLy8gIyBlbmRpZgot
Ly8gLy8gRU5EIHdvcmthcm91bmQgZm9yIG1pc3NpbmcgaXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJs
ZQotCi0jaWYgQ09NUElMRVJfU1VQUE9SVFMoRVhDRVBUSU9OUykKLSMgaWYgZGVmaW5lZChUUjJf
T1BUSU9OQUxfR0NDXzRfN19BTkRfSElHSEVSX19fKSB8fCBkZWZpbmVkKFRSMl9PUFRJT05BTF9D
TEFOR18zXzRfMl9BTkRfSElHSEVSXykgfHwgZGVmaW5lZChUUjJfT1BUSU9OQUxfTVNWQ18yMDE1
X0FORF9ISUdIRVJfX18pCi0gICAgLy8gbGVhdmUgaXQ7IG91ciBtZXRhZnVuY3Rpb25zIGFyZSBh
bHJlYWR5IGRlZmluZWQuCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgdXNpbmcgaXNf
bm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGUgPSBzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1
Y3RpYmxlPFQ+OwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgIHVzaW5nIGlzX25vdGhy
b3dfbW92ZV9hc3NpZ25hYmxlID0gc3RkOjppc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTxUPjsK
LSMgZWxpZiBkZWZpbmVkIFRSMl9PUFRJT05BTF9ESVNBQkxFX0VNVUxBVElPTl9PRl9UWVBFX1RS
QUlUUwotICAgIC8vIGxlYXZlIGl0OiB0aGUgdXNlciBkb2Vzbid0IHdhbnQgaXQKLSMgZWxzZQot
Ci0KLS8vIHdvcmthcm91bmQgZm9yIG1pc3NpbmcgdHJhaXRzIGluIEdDQyBhbmQgQ0xBTkcKLXRl
bXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IGlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlCi17
Ci0gIGNvbnN0ZXhwciBzdGF0aWMgYm9vbCB2YWx1ZSA9IHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1
Y3RpYmxlPFQsIFQmJj46OnZhbHVlOwotfTsKLQotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3Mg
VT4KLXN0cnVjdCBpc19hc3NpZ25hYmxlCi17Ci0gIHRlbXBsYXRlIDxjbGFzcyBYLCBjbGFzcyBZ
PgotICBjb25zdGV4cHIgc3RhdGljIGJvb2wgaGFzX2Fzc2lnbiguLi4pIHsgcmV0dXJuIGZhbHNl
OyB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIFgsIGNsYXNzIFksIHNpemVfdCBTID0gc2l6ZW9mKChz
dGQ6OmRlY2x2YWw8WD4oKSA9IHN0ZDo6ZGVjbHZhbDxZPigpLCB0cnVlKSkgPgotICAvLyB0aGUg
Y29tbWEgb3BlcmF0b3IgaXMgbmVjZXNzYXJ5IGZvciB0aGUgY2FzZXMgd2hlcmUgb3BlcmF0b3I9
IHJldHVybnMgdm9pZAotICBjb25zdGV4cHIgc3RhdGljIGJvb2wgaGFzX2Fzc2lnbihib29sKSB7
IHJldHVybiB0cnVlOyB9Ci0KLSAgY29uc3RleHByIHN0YXRpYyBib29sIHZhbHVlID0gaGFzX2Fz
c2lnbjxULCBVPih0cnVlKTsKLX07Ci0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgaXNf
bm90aHJvd19tb3ZlX2Fzc2lnbmFibGUKLXsKLSAgdGVtcGxhdGUgPGNsYXNzIFgsIGJvb2wgaGFz
X2FueV9tb3ZlX2Fzc2lnbj4KLSAgc3RydWN0IGhhc19ub3Rocm93X21vdmVfYXNzaWduIHsKLSAg
ICBjb25zdGV4cHIgc3RhdGljIGJvb2wgdmFsdWUgPSBmYWxzZTsKLSAgfTsKLQotICB0ZW1wbGF0
ZSA8Y2xhc3MgWD4KLSAgc3RydWN0IGhhc19ub3Rocm93X21vdmVfYXNzaWduPFgsIHRydWU+IHsK
LSAgICBjb25zdGV4cHIgc3RhdGljIGJvb2wgdmFsdWUgPSBfX05PRVhDRVBUXyggc3RkOjpkZWNs
dmFsPFgmPigpID0gc3RkOjpkZWNsdmFsPFgmJj4oKSApOwotICB9OwotCi0gIGNvbnN0ZXhwciBz
dGF0aWMgYm9vbCB2YWx1ZSA9IGhhc19ub3Rocm93X21vdmVfYXNzaWduPFQsIGlzX2Fzc2lnbmFi
bGU8VCYsIFQmJj46OnZhbHVlPjo6dmFsdWU7Ci19OwotLy8gZW5kIHdvcmthcm91bmQKLQotCi0j
IGVuZGlmCi0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgZGV0YWlsXwotCi0vLyAyMC41LjQsIE9w
dGlvbmFsIGZvciBvYmplY3QgdHlwZXMKLXRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBPcHRpb25h
bDsKLQotLy8gMjAuNS41LCBPcHRpb25hbCBmb3IgbHZhbHVlIHJlZmVyZW5jZSB0eXBlcwotdGVt
cGxhdGUgPGNsYXNzIFQ+IGNsYXNzIE9wdGlvbmFsPFQmPjsKLQotbmFtZXNwYWNlIGRldGFpbF8g
ewotCi0vLyB3b3JrYXJvdW5kOiBzdGQgdXRpbGl0eSBmdW5jdGlvbnMgYXJlbid0IGNvbnN0ZXhw
ciB5ZXQKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgVCYmIGNvbnN0ZXhwcl9mb3J3YXJk
KHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxUPjo6dHlwZSYgdCkgX19OT0VYQ0VQVAot
ewotICByZXR1cm4gc3RhdGljX2Nhc3Q8VCYmPih0KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+
IGNvbnN0ZXhwciBUJiYgY29uc3RleHByX2ZvcndhcmQodHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVm
ZXJlbmNlPFQ+Ojp0eXBlJiYgdCkgX19OT0VYQ0VQVAotewotICAgIHN0YXRpY19hc3NlcnQoIXN0
ZDo6aXNfbHZhbHVlX3JlZmVyZW5jZTxUPjo6dmFsdWUsICIhISIpOwotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxUJiY+KHQpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIHR5cGVu
YW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxUPjo6dHlwZSYmIGNvbnN0ZXhwcl9tb3ZlKFQmJiB0
KSBfX05PRVhDRVBUCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIHN0ZDo6cmVt
b3ZlX3JlZmVyZW5jZTxUPjo6dHlwZSYmPih0KTsKLX0KLQotCi0vLyBzdGF0aWNfYWRkcmVzc29m
OiBhIGNvbnN0ZXhwciB2ZXJzaW9uIG9mIGFkZHJlc3NvZgotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
Ci1zdHJ1Y3QgaGFzX292ZXJsb2FkZWRfYWRkcmVzc29mCi17Ci0gIHRlbXBsYXRlIDxjbGFzcyBY
PgotICBjb25zdGV4cHIgc3RhdGljIGJvb2wgaGFzX292ZXJsb2FkKC4uLikgeyByZXR1cm4gZmFs
c2U7IH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgWCwgc2l6ZV90IFMgPSBzaXplb2Yoc3RkOjpkZWNs
dmFsPFgmPigpLm9wZXJhdG9yJigpKSA+Ci0gIGNvbnN0ZXhwciBzdGF0aWMgYm9vbCBoYXNfb3Zl
cmxvYWQoYm9vbCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gIGNvbnN0ZXhwciBzdGF0aWMgYm9vbCB2
YWx1ZSA9IGhhc19vdmVybG9hZDxUPih0cnVlKTsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBU
LCBUUjJfT1BUSU9OQUxfUkVRVUlSRVMoIWhhc19vdmVybG9hZGVkX2FkZHJlc3NvZjxUPik+Ci1j
b25zdGV4cHIgVCogc3RhdGljX2FkZHJlc3NvZihUJiByZWYpCi17Ci0gIHJldHVybiAmcmVmOwot
fQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgVFIyX09QVElPTkFMX1JFUVVJUkVTKGhhc19vdmVy
bG9hZGVkX2FkZHJlc3NvZjxUPik+Ci1UKiBzdGF0aWNfYWRkcmVzc29mKFQmIHJlZikKLXsKLSAg
cmV0dXJuIHN0ZDo6YWRkcmVzc29mKHJlZik7Ci19Ci0KLQotLy8gdGhlIGNhbGwgdG8gY29udmVy
dDxBPihiKSBoYXMgcmV0dXJuIHR5cGUgQSBhbmQgY29udmVydHMgYiB0byB0eXBlIEEgaWZmIGIg
ZGVjbHR5cGUoYikgaXMgaW1wbGljaXRseSBjb252ZXJ0aWJsZSB0byBBCi10ZW1wbGF0ZSA8Y2xh
c3MgVT4KLWNvbnN0ZXhwciBVIGNvbnZlcnQoVSB2KSB7IHJldHVybiB2OyB9Ci0KLX0gLy8gbmFt
ZXNwYWNlIGRldGFpbAotCi0KLWNvbnN0ZXhwciBzdHJ1Y3QgdHJpdmlhbF9pbml0X3R7fSB0cml2
aWFsX2luaXR7fTsKLQotCi0vLyAyMC41LjcsIERpc2VuZ2FnZWQgc3RhdGUgaW5kaWNhdG9yCi1z
dHJ1Y3QgbnVsbG9wdF90Ci17Ci0gIHN0cnVjdCBpbml0e307Ci0gIGNvbnN0ZXhwciBleHBsaWNp
dCBudWxsb3B0X3QoaW5pdCl7fQotfTsKLWNvbnN0ZXhwciBudWxsb3B0X3QgbnVsbG9wdHtudWxs
b3B0X3Q6OmluaXQoKX07Ci0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci11bmlvbiBzdG9yYWdlX3QK
LXsKLSAgdW5zaWduZWQgY2hhciBkdW1teV87Ci0gIFQgdmFsdWVfOwotCi0gIGNvbnN0ZXhwciBz
dG9yYWdlX3QoIHRyaXZpYWxfaW5pdF90ICkgX19OT0VYQ0VQVCA6IGR1bW15XygpIHt9OwotCi0g
IHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPgotICBjb25zdGV4cHIgc3RvcmFnZV90KCBBcmdzJiYu
Li4gYXJncyApIDogdmFsdWVfKGRldGFpbF86OmNvbnN0ZXhwcl9mb3J3YXJkPEFyZ3M+KGFyZ3Mp
Li4uKSB7fQotCi0gIH5zdG9yYWdlX3QoKXt9Ci19OwotCi0KLXRlbXBsYXRlIDxjbGFzcyBUPgot
dW5pb24gY29uc3RleHByX3N0b3JhZ2VfdAotewotICAgIHVuc2lnbmVkIGNoYXIgZHVtbXlfOwot
ICAgIFQgdmFsdWVfOwotCi0gICAgY29uc3RleHByIGNvbnN0ZXhwcl9zdG9yYWdlX3QoIHRyaXZp
YWxfaW5pdF90ICkgX19OT0VYQ0VQVCA6IGR1bW15XygpIHt9OwotCi0gICAgdGVtcGxhdGUgPGNs
YXNzLi4uIEFyZ3M+Ci0gICAgY29uc3RleHByIGNvbnN0ZXhwcl9zdG9yYWdlX3QoIEFyZ3MmJi4u
LiBhcmdzICkgOiB2YWx1ZV8oZGV0YWlsXzo6Y29uc3RleHByX2ZvcndhcmQ8QXJncz4oYXJncyku
Li4pIHt9Ci0KLSAgICB+Y29uc3RleHByX3N0b3JhZ2VfdCgpID0gZGVmYXVsdDsKLX07Ci0KLQot
dGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgT3B0aW9uYWxfYmFzZQotewotICAgIGJvb2wgaW5p
dF87Ci0gICAgc3RvcmFnZV90PFQ+IHN0b3JhZ2VfOwotCi0gICAgY29uc3RleHByIE9wdGlvbmFs
X2Jhc2UoKSBfX05PRVhDRVBUIDogaW5pdF8oZmFsc2UpLCBzdG9yYWdlXyh0cml2aWFsX2luaXQp
IHt9OwotCi0gICAgZXhwbGljaXQgY29uc3RleHByIE9wdGlvbmFsX2Jhc2UoY29uc3QgVCYgdikg
OiBpbml0Xyh0cnVlKSwgc3RvcmFnZV8odikge30KLQotICAgIGV4cGxpY2l0IGNvbnN0ZXhwciBP
cHRpb25hbF9iYXNlKFQmJiB2KSA6IGluaXRfKHRydWUpLCBzdG9yYWdlXyhkZXRhaWxfOjpjb25z
dGV4cHJfbW92ZSh2KSkge30KLQotICAgIHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPiBleHBsaWNp
dCBPcHRpb25hbF9iYXNlKHN0ZDo6aW5fcGxhY2VfdCwgQXJncyYmLi4uIGFyZ3MpCi0gICAgICAg
IDogaW5pdF8odHJ1ZSksIHN0b3JhZ2VfKGRldGFpbF86OmNvbnN0ZXhwcl9mb3J3YXJkPEFyZ3M+
KGFyZ3MpLi4uKSB7fQotCi0gICAgdGVtcGxhdGUgPGNsYXNzIFUsIGNsYXNzLi4uIEFyZ3MsIFRS
Ml9PUFRJT05BTF9SRVFVSVJFUyhzdGQ6OmlzX2NvbnN0cnVjdGlibGU8VCwgc3RkOjppbml0aWFs
aXplcl9saXN0PFU+Pik+Ci0gICAgZXhwbGljaXQgT3B0aW9uYWxfYmFzZShzdGQ6OmluX3BsYWNl
X3QsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVPiBpbCwgQXJncyYmLi4uIGFyZ3MpCi0gICAgICAg
IDogaW5pdF8odHJ1ZSksIHN0b3JhZ2VfKGlsLCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4p
IHt9Ci0KLSAgICB+T3B0aW9uYWxfYmFzZSgpIHsgaWYgKGluaXRfKSBzdG9yYWdlXy52YWx1ZV8u
VDo6flQoKTsgfQotfTsKLQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBjb25zdGV4cHJf
T3B0aW9uYWxfYmFzZQotewotICAgIGJvb2wgaW5pdF87Ci0gICAgY29uc3RleHByX3N0b3JhZ2Vf
dDxUPiBzdG9yYWdlXzsKLQotICAgIGNvbnN0ZXhwciBjb25zdGV4cHJfT3B0aW9uYWxfYmFzZSgp
IF9fTk9FWENFUFQgOiBpbml0XyhmYWxzZSksIHN0b3JhZ2VfKHRyaXZpYWxfaW5pdCkge307Ci0K
LSAgICBleHBsaWNpdCBjb25zdGV4cHIgY29uc3RleHByX09wdGlvbmFsX2Jhc2UoY29uc3QgVCYg
dikgOiBpbml0Xyh0cnVlKSwgc3RvcmFnZV8odikge30KLQotICAgIGV4cGxpY2l0IGNvbnN0ZXhw
ciBjb25zdGV4cHJfT3B0aW9uYWxfYmFzZShUJiYgdikgOiBpbml0Xyh0cnVlKSwgc3RvcmFnZV8o
ZGV0YWlsXzo6Y29uc3RleHByX21vdmUodikpIHt9Ci0KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MuLi4g
QXJncz4gZXhwbGljaXQgY29uc3RleHByIGNvbnN0ZXhwcl9PcHRpb25hbF9iYXNlKHN0ZDo6aW5f
cGxhY2VfdCwgQXJncyYmLi4uIGFyZ3MpCi0gICAgICA6IGluaXRfKHRydWUpLCBzdG9yYWdlXyhk
ZXRhaWxfOjpjb25zdGV4cHJfZm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KLQotICAgIHRlbXBs
YXRlIDxjbGFzcyBVLCBjbGFzcy4uLiBBcmdzLCBUUjJfT1BUSU9OQUxfUkVRVUlSRVMoc3RkOjpp
c19jb25zdHJ1Y3RpYmxlPFQsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVPj4pPgotICAgIE9QVElP
TkFMX0NPTlNURVhQUl9JTklUX0xJU1QgZXhwbGljaXQgY29uc3RleHByX09wdGlvbmFsX2Jhc2Uo
c3RkOjppbl9wbGFjZV90LCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VT4gaWwsIEFyZ3MmJi4uLiBh
cmdzKQotICAgICAgOiBpbml0Xyh0cnVlKSwgc3RvcmFnZV8oaWwsIHN0ZDo6Zm9yd2FyZDxBcmdz
PihhcmdzKS4uLikge30KLQotICAgIH5jb25zdGV4cHJfT3B0aW9uYWxfYmFzZSgpID0gZGVmYXVs
dDsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgotdXNpbmcgT3B0aW9uYWxCYXNlID0gdHlwZW5h
bWUgc3RkOjpjb25kaXRpb25hbDwKLSAgICBzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8
VD46OnZhbHVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgcG9zc2libGUKLSAgICBj
b25zdGV4cHJfT3B0aW9uYWxfYmFzZTx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDxUPjo6dHlw
ZT4sIC8vIHVzZSBiYXNlIHdpdGggdHJpdmlhbCBkZXN0cnVjdG9yCi0gICAgT3B0aW9uYWxfYmFz
ZTx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDxUPjo6dHlwZT4KLT46OnR5cGU7Ci0KLQotCi10
ZW1wbGF0ZSA8Y2xhc3MgVD4KLWNsYXNzIE9wdGlvbmFsIDogcHJpdmF0ZSBPcHRpb25hbEJhc2U8
VD4KLXsKLSAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gIHN0YXRpY19hc3NlcnQoICFzdGQ6
OmlzX3NhbWU8dHlwZW5hbWUgc3RkOjpkZWNheTxUPjo6dHlwZSwgbnVsbG9wdF90Pjo6dmFsdWUs
ICJiYWQgVCIgKTsKLSAgc3RhdGljX2Fzc2VydCggIXN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBzdGQ6
OmRlY2F5PFQ+Ojp0eXBlLCBzdGQ6OmluX3BsYWNlX3Q+Ojp2YWx1ZSwgImJhZCBUIiApOwotCi0K
LSAgY29uc3RleHByIGJvb2wgaW5pdGlhbGl6ZWQoKSBjb25zdCBfX05PRVhDRVBUIHsgcmV0dXJu
IE9wdGlvbmFsQmFzZTxUPjo6aW5pdF87IH0KLSAgdHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8
VD46OnR5cGUqIGRhdGFwdHIoKSB7ICByZXR1cm4gc3RkOjphZGRyZXNzb2YoT3B0aW9uYWxCYXNl
PFQ+OjpzdG9yYWdlXy52YWx1ZV8pOyB9Ci0gIGNvbnN0ZXhwciBjb25zdCBUKiBkYXRhcHRyKCkg
Y29uc3QgeyByZXR1cm4gZGV0YWlsXzo6c3RhdGljX2FkZHJlc3NvZihPcHRpb25hbEJhc2U8VD46
OnN0b3JhZ2VfLnZhbHVlXyk7IH0KLQotIyBpZiBPUFRJT05BTF9IQVNfVEhJU19SVkFMVUVfUkVG
UyA9PSAxCi0gIGNvbnN0ZXhwciBjb25zdCBUJiBjb250YWluZWRfdmFsKCkgY29uc3QmIHsgcmV0
dXJuIE9wdGlvbmFsQmFzZTxUPjo6c3RvcmFnZV8udmFsdWVfOyB9Ci0gIE9QVElPTkFMX01VVEFC
TEVfQ09OU1RFWFBSIFQmJiBjb250YWluZWRfdmFsKCkgJiYgeyByZXR1cm4gc3RkOjptb3ZlKE9w
dGlvbmFsQmFzZTxUPjo6c3RvcmFnZV8udmFsdWVfKTsgfQotICBPUFRJT05BTF9NVVRBQkxFX0NP
TlNURVhQUiBUJiBjb250YWluZWRfdmFsKCkgJiB7IHJldHVybiBPcHRpb25hbEJhc2U8VD46OnN0
b3JhZ2VfLnZhbHVlXzsgfQotIyBlbHNlCi0gIGNvbnN0ZXhwciBjb25zdCBUJiBjb250YWluZWRf
dmFsKCkgY29uc3QgeyByZXR1cm4gT3B0aW9uYWxCYXNlPFQ+OjpzdG9yYWdlXy52YWx1ZV87IH0K
LSAgVCYgY29udGFpbmVkX3ZhbCgpIHsgcmV0dXJuIE9wdGlvbmFsQmFzZTxUPjo6c3RvcmFnZV8u
dmFsdWVfOyB9Ci0jIGVuZGlmCi0KLSAgdm9pZCBjbGVhcigpIF9fTk9FWENFUFQgewotICAgIGlm
IChpbml0aWFsaXplZCgpKSBkYXRhcHRyKCktPlQ6On5UKCk7Ci0gICAgT3B0aW9uYWxCYXNlPFQ+
Ojppbml0XyA9IGZhbHNlOwotICB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+Ci0gIHZv
aWQgaW5pdGlhbGl6ZShBcmdzJiYuLi4gYXJncykgX19OT0VYQ0VQVF8oX19OT0VYQ0VQVF8oVChz
dGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pKSkKLSAgewotICAgIEFTU0VSVCghT3B0aW9uYWxC
YXNlPFQ+Ojppbml0Xyk7Ci0gICAgOjpuZXcgKHN0YXRpY19jYXN0PHZvaWQqPihkYXRhcHRyKCkp
KSBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0gICAgT3B0aW9uYWxCYXNlPFQ+Ojpp
bml0XyA9IHRydWU7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgVSwgY2xhc3MuLi4gQXJncz4K
LSAgdm9pZCBpbml0aWFsaXplKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVPiBpbCwgQXJncyYmLi4u
IGFyZ3MpIF9fTk9FWENFUFRfKF9fTk9FWENFUFRfKFQoaWwsIHN0ZDo6Zm9yd2FyZDxBcmdzPihh
cmdzKS4uLikpKQotICB7Ci0gICAgQVNTRVJUKCFPcHRpb25hbEJhc2U8VD46OmluaXRfKTsKLSAg
ICA6Om5ldyAoc3RhdGljX2Nhc3Q8dm9pZCo+KGRhdGFwdHIoKSkpIFQoaWwsIHN0ZDo6Zm9yd2Fy
ZDxBcmdzPihhcmdzKS4uLik7Ci0gICAgT3B0aW9uYWxCYXNlPFQ+Ojppbml0XyA9IHRydWU7Ci0g
IH0KLQotcHVibGljOgotICB0eXBlZGVmIFQgdmFsdWVfdHlwZTsKLQotICAvLyAyMC41LjUuMSwg
Y29uc3RydWN0b3JzCi0gIGNvbnN0ZXhwciBPcHRpb25hbCgpIF9fTk9FWENFUFQgOiBPcHRpb25h
bEJhc2U8VD4oKSAge307Ci0gIGNvbnN0ZXhwciBPcHRpb25hbChudWxsb3B0X3QpIF9fTk9FWENF
UFQgOiBPcHRpb25hbEJhc2U8VD4oKSB7fTsKLQotICBjb25zdGV4cHIgT3B0aW9uYWwoY29uc3Qg
T3B0aW9uYWwmIHJocykKLSAgOiBPcHRpb25hbEJhc2U8VD4oKQotICB7Ci0gICAgaWYgKHJocy5p
bml0aWFsaXplZCgpKSB7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc190cml2aWFsbHlf
Y29weV9hc3NpZ25hYmxlX3Y8VD4pCi0gICAgICAgICAgICBPcHRpb25hbEJhc2U8VD46OnN0b3Jh
Z2VfID0gKnJoczsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgOjpuZXcgKHN0YXRpY19jYXN0
PHZvaWQqPihkYXRhcHRyKCkpKSBUKCpyaHMpOwotICAgICAgICBPcHRpb25hbEJhc2U8VD46Omlu
aXRfID0gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICBjb25zdGV4cHIgT3B0aW9uYWwoT3B0aW9uYWwm
JiByaHMpIF9fTk9FWENFUFRfKGRldGFpbF86OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxl
PFQ+Ojp2YWx1ZSkKLSAgOiBPcHRpb25hbEJhc2U8VD4oKQotICB7Ci0gICAgaWYgKHJocy5pbml0
aWFsaXplZCgpKSB7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc190cml2aWFsbHlfY29w
eV9hc3NpZ25hYmxlX3Y8VD4pCi0gICAgICAgICAgICBPcHRpb25hbEJhc2U8VD46OnN0b3JhZ2Vf
ID0gKnJoczsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgOjpuZXcgKHN0YXRpY19jYXN0PHZv
aWQqPihkYXRhcHRyKCkpKSBUKHN0ZDo6bW92ZSgqcmhzKSk7Ci0gICAgICAgIE9wdGlvbmFsQmFz
ZTxUPjo6aW5pdF8gPSB0cnVlOwotICAgICAgICByaHMuY2xlYXIoKTsKLSAgICB9Ci0gIH0KLQot
ICBjb25zdGV4cHIgT3B0aW9uYWwoY29uc3QgVCYgdikgOiBPcHRpb25hbEJhc2U8VD4odikge30K
LQotICBjb25zdGV4cHIgT3B0aW9uYWwoVCYmIHYpIDogT3B0aW9uYWxCYXNlPFQ+KGRldGFpbF86
OmNvbnN0ZXhwcl9tb3ZlKHYpKSB7fQotCi0gIHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPgotICBl
eHBsaWNpdCBjb25zdGV4cHIgT3B0aW9uYWwoc3RkOjppbl9wbGFjZV90LCBBcmdzJiYuLi4gYXJn
cykKLSAgICAgIDogT3B0aW9uYWxCYXNlPFQ+KHN0ZDo6aW5fcGxhY2VfdHt9LCBkZXRhaWxfOjpj
b25zdGV4cHJfZm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KLQotICB0ZW1wbGF0ZSA8Y2xhc3Mg
VSwgY2xhc3MuLi4gQXJncywgVFIyX09QVElPTkFMX1JFUVVJUkVTKHN0ZDo6aXNfY29uc3RydWN0
aWJsZTxULCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VT4+KT4KLSAgT1BUSU9OQUxfQ09OU1RFWFBS
X0lOSVRfTElTVCBleHBsaWNpdCBPcHRpb25hbChzdGQ6OmluX3BsYWNlX3QsIHN0ZDo6aW5pdGlh
bGl6ZXJfbGlzdDxVPiBpbCwgQXJncyYmLi4uIGFyZ3MpCi0gICAgICA6IE9wdGlvbmFsQmFzZTxU
PihzdGQ6OmluX3BsYWNlX3R7fSwgaWwsIGRldGFpbF86OmNvbnN0ZXhwcl9mb3J3YXJkPEFyZ3M+
KGFyZ3MpLi4uKSB7fQotCi0gIC8vIDIwLjUuNC4yLCBEZXN0cnVjdG9yCi0gIH5PcHRpb25hbCgp
ID0gZGVmYXVsdDsKLQotICAvLyAyMC41LjQuMywgYXNzaWdubWVudAotICBPcHRpb25hbCYgb3Bl
cmF0b3I9KG51bGxvcHRfdCkgX19OT0VYQ0VQVAotICB7Ci0gICAgY2xlYXIoKTsKLSAgICByZXR1
cm4gKnRoaXM7Ci0gIH0KLQotICBPcHRpb25hbCYgb3BlcmF0b3I9KGNvbnN0IE9wdGlvbmFsJiBy
aHMpCi0gIHsKLSAgICBpZiAgICAgIChpbml0aWFsaXplZCgpID09IHRydWUgICYmIHJocy5pbml0
aWFsaXplZCgpID09IGZhbHNlKSBjbGVhcigpOwotICAgIGVsc2UgaWYgKGluaXRpYWxpemVkKCkg
PT0gZmFsc2UgJiYgcmhzLmluaXRpYWxpemVkKCkgPT0gdHJ1ZSkgIGluaXRpYWxpemUoKnJocyk7
Ci0gICAgZWxzZSBpZiAoaW5pdGlhbGl6ZWQoKSA9PSB0cnVlICAmJiByaHMuaW5pdGlhbGl6ZWQo
KSA9PSB0cnVlKSAgY29udGFpbmVkX3ZhbCgpID0gKnJoczsKLSAgICByZXR1cm4gKnRoaXM7Ci0g
IH0KLQotICBPcHRpb25hbCYgb3BlcmF0b3I9KE9wdGlvbmFsJiYgcmhzKQotICBfX05PRVhDRVBU
XyhkZXRhaWxfOjppc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTxUPjo6dmFsdWUgJiYgZGV0YWls
Xzo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8VD46OnZhbHVlKQotICB7Ci0gICAgaWYg
ICAgICAoaW5pdGlhbGl6ZWQoKSA9PSB0cnVlICAmJiByaHMuaW5pdGlhbGl6ZWQoKSA9PSBmYWxz
ZSkgY2xlYXIoKTsKLSAgICBlbHNlIGlmIChpbml0aWFsaXplZCgpID09IGZhbHNlICYmIHJocy5p
bml0aWFsaXplZCgpID09IHRydWUpICB7IGluaXRpYWxpemUoc3RkOjptb3ZlKCpyaHMpKTsgcmhz
LmNsZWFyKCk7IH0KLSAgICBlbHNlIGlmIChpbml0aWFsaXplZCgpID09IHRydWUgICYmIHJocy5p
bml0aWFsaXplZCgpID09IHRydWUpICB7IGNvbnRhaW5lZF92YWwoKSA9IHN0ZDo6bW92ZSgqcmhz
KTsgcmhzLmNsZWFyKCk7IH0KLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8
Y2xhc3MgVT4KLSAgYXV0byBvcGVyYXRvcj0oVSYmIHYpCi0gIC0+IHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmCi0gIDwKLSAgICBzdGQ6OmlzX3NhbWU8dHlwZW5hbWUgc3RkOjpkZWNheTxVPjo6dHlw
ZSwgVD46OnZhbHVlLAotICAgIE9wdGlvbmFsJgotICA+Ojp0eXBlCi0gIHsKLSAgICBpZiAoaW5p
dGlhbGl6ZWQoKSkgeyBjb250YWluZWRfdmFsKCkgPSBzdGQ6OmZvcndhcmQ8VT4odik7IH0KLSAg
ICBlbHNlICAgICAgICAgICAgICAgeyBpbml0aWFsaXplKHN0ZDo6Zm9yd2FyZDxVPih2KSk7ICB9
Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gQXJncz4K
LSAgdm9pZCBlbXBsYWNlKEFyZ3MmJi4uLiBhcmdzKQotICB7Ci0gICAgY2xlYXIoKTsKLSAgICBp
bml0aWFsaXplKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0gIH0KLQotICB0ZW1wbGF0
ZSA8Y2xhc3MgVSwgY2xhc3MuLi4gQXJncz4KLSAgdm9pZCBlbXBsYWNlKHN0ZDo6aW5pdGlhbGl6
ZXJfbGlzdDxVPiBpbCwgQXJncyYmLi4uIGFyZ3MpCi0gIHsKLSAgICBjbGVhcigpOwotICAgIGlu
aXRpYWxpemU8VSwgQXJncy4uLj4oaWwsIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0g
IH0KLQotICAvLyAyMC41LjQuNCwgU3dhcAotICB2b2lkIHN3YXAoT3B0aW9uYWw8VD4mIHJocykg
X19OT0VYQ0VQVF8oZGV0YWlsXzo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8VD46OnZh
bHVlICYmIF9fTk9FWENFUFRfKHN3YXAoc3RkOjpkZWNsdmFsPFQmPigpLCBzdGQ6OmRlY2x2YWw8
VCY+KCkpKSkKLSAgewotICAgIGlmICAgICAgKGluaXRpYWxpemVkKCkgPT0gdHJ1ZSAgJiYgcmhz
LmluaXRpYWxpemVkKCkgPT0gZmFsc2UpIHsgcmhzLmluaXRpYWxpemUoc3RkOjptb3ZlKCoqdGhp
cykpOyBjbGVhcigpOyB9Ci0gICAgZWxzZSBpZiAoaW5pdGlhbGl6ZWQoKSA9PSBmYWxzZSAmJiBy
aHMuaW5pdGlhbGl6ZWQoKSA9PSB0cnVlKSAgeyBpbml0aWFsaXplKHN0ZDo6bW92ZSgqcmhzKSk7
IHJocy5jbGVhcigpOyB9Ci0gICAgZWxzZSBpZiAoaW5pdGlhbGl6ZWQoKSA9PSB0cnVlICAmJiBy
aHMuaW5pdGlhbGl6ZWQoKSA9PSB0cnVlKSAgeyB1c2luZyBzdGQ6OnN3YXA7IHN3YXAoKip0aGlz
LCAqcmhzKTsgfQotICB9Ci0KLSAgLy8gMjAuNS40LjUsIE9ic2VydmVycwotCi0gIGV4cGxpY2l0
IGNvbnN0ZXhwciBvcGVyYXRvciBib29sKCkgY29uc3QgX19OT0VYQ0VQVCB7IHJldHVybiBpbml0
aWFsaXplZCgpOyB9Ci0gIGNvbnN0ZXhwciBib29sIGhhc1ZhbHVlKCkgY29uc3QgX19OT0VYQ0VQ
VCB7IHJldHVybiBpbml0aWFsaXplZCgpOyB9Ci0KLSAgY29uc3RleHByIFQgY29uc3QqIG9wZXJh
dG9yIC0+KCkgY29uc3QgewotICAgIFJFTEVBU0VfQVNTRVJUX1VOREVSX0NPTlNURVhQUl9DT05U
RVhUKGluaXRpYWxpemVkKCkpOwotICAgIHJldHVybiBkYXRhcHRyKCk7Ci0gIH0KLQotICBPUFRJ
T05BTF9NVVRBQkxFX0NPTlNURVhQUiBUKiBvcGVyYXRvciAtPigpIHsKLSAgICBSRUxFQVNFX0FT
U0VSVF9VTkRFUl9DT05TVEVYUFJfQ09OVEVYVChpbml0aWFsaXplZCgpKTsKLSAgICByZXR1cm4g
ZGF0YXB0cigpOwotICB9Ci0KLSAgY29uc3RleHByIFQgY29uc3QmIG9wZXJhdG9yICooKSBjb25z
dCYgewotICAgIFJFTEVBU0VfQVNTRVJUX1VOREVSX0NPTlNURVhQUl9DT05URVhUKGluaXRpYWxp
emVkKCkpOwotICAgIHJldHVybiBjb250YWluZWRfdmFsKCk7Ci0gIH0KLQotICBPUFRJT05BTF9N
VVRBQkxFX0NPTlNURVhQUiBUJiBvcGVyYXRvciAqKCkgJiB7Ci0gICAgUkVMRUFTRV9BU1NFUlRf
VU5ERVJfQ09OU1RFWFBSX0NPTlRFWFQoaW5pdGlhbGl6ZWQoKSk7Ci0gICAgcmV0dXJuIGNvbnRh
aW5lZF92YWwoKTsKLSAgfQotCi0gIE9QVElPTkFMX01VVEFCTEVfQ09OU1RFWFBSIFQmJiBvcGVy
YXRvciAqKCkgJiYgewotICAgIFJFTEVBU0VfQVNTRVJUX1VOREVSX0NPTlNURVhQUl9DT05URVhU
KGluaXRpYWxpemVkKCkpOwotICAgIHJldHVybiBkZXRhaWxfOjpjb25zdGV4cHJfbW92ZShjb250
YWluZWRfdmFsKCkpOwotICB9Ci0KLSAgY29uc3RleHByIFQgY29uc3QmIHZhbHVlKCkgY29uc3Qm
IHsKLSAgICBSRUxFQVNFX0FTU0VSVF9VTkRFUl9DT05TVEVYUFJfQ09OVEVYVChpbml0aWFsaXpl
ZCgpKTsKLSAgICByZXR1cm4gY29udGFpbmVkX3ZhbCgpOwotICB9Ci0KLSAgT1BUSU9OQUxfTVVU
QUJMRV9DT05TVEVYUFIgVCYgdmFsdWUoKSAmIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9VTkRFUl9D
T05TVEVYUFJfQ09OVEVYVChpbml0aWFsaXplZCgpKTsKLSAgICByZXR1cm4gY29udGFpbmVkX3Zh
bCgpOwotICB9Ci0KLSAgT1BUSU9OQUxfTVVUQUJMRV9DT05TVEVYUFIgVCYmIHZhbHVlKCkgJiYg
ewotICAgIFJFTEVBU0VfQVNTRVJUX1VOREVSX0NPTlNURVhQUl9DT05URVhUKGluaXRpYWxpemVk
KCkpOwotICAgIHJldHVybiBzdGQ6Om1vdmUoY29udGFpbmVkX3ZhbCgpKTsKLSAgfQotCi0jIGlm
IE9QVElPTkFMX0hBU19USElTX1JWQUxVRV9SRUZTID09IDEKLQotICB0ZW1wbGF0ZSA8Y2xhc3Mg
Vj4KLSAgY29uc3RleHByIFQgdmFsdWVPcihWJiYgdikgY29uc3QmCi0gIHsKLSAgICByZXR1cm4g
KnRoaXMgPyAqKnRoaXMgOiBkZXRhaWxfOjpjb252ZXJ0PFQ+KGRldGFpbF86OmNvbnN0ZXhwcl9m
b3J3YXJkPFY+KHYpKTsKLSAgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBWPgotICBPUFRJT05BTF9N
VVRBQkxFX0NPTlNURVhQUiBUIHZhbHVlT3IoViYmIHYpICYmCi0gIHsKLSAgICByZXR1cm4gKnRo
aXMgPyBkZXRhaWxfOjpjb25zdGV4cHJfbW92ZShjb25zdF9jYXN0PE9wdGlvbmFsPFQ+Jj4oKnRo
aXMpLmNvbnRhaW5lZF92YWwoKSkgOiBkZXRhaWxfOjpjb252ZXJ0PFQ+KGRldGFpbF86OmNvbnN0
ZXhwcl9mb3J3YXJkPFY+KHYpKTsKLSAgfQotCi0jIGVsc2UKLQotICB0ZW1wbGF0ZSA8Y2xhc3Mg
Vj4KLSAgY29uc3RleHByIFQgdmFsdWVPcihWJiYgdikgY29uc3QKLSAgewotICAgIHJldHVybiAq
dGhpcyA/ICoqdGhpcyA6IGRldGFpbF86OmNvbnZlcnQ8VD4oZGV0YWlsXzo6Y29uc3RleHByX2Zv
cndhcmQ8Vj4odikpOwotICB9Ci0KLSMgZW5kaWYKLQotICAvLyAyMC42LjMuNiwgbW9kaWZpZXJz
Ci0gIHZvaWQgcmVzZXQoKSBfX05PRVhDRVBUIHsgY2xlYXIoKTsgfQotfTsKLQotCi10ZW1wbGF0
ZSA8Y2xhc3MgVD4KLWNsYXNzIE9wdGlvbmFsPFQmPgotewotICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLSAgc3RhdGljX2Fzc2VydCggIXN0ZDo6aXNfc2FtZTxULCBudWxsb3B0X3Q+Ojp2YWx1
ZSwgImJhZCBUIiApOwotICBzdGF0aWNfYXNzZXJ0KCAhc3RkOjppc19zYW1lPFQsIHN0ZDo6aW5f
cGxhY2VfdD46OnZhbHVlLCAiYmFkIFQiICk7Ci0gIFQqIHJlZjsKLQotcHVibGljOgotCi0gIC8v
IDIwLjUuNS4xLCBjb25zdHJ1Y3Rpb24vZGVzdHJ1Y3Rpb24KLSAgY29uc3RleHByIE9wdGlvbmFs
KCkgX19OT0VYQ0VQVCA6IHJlZihudWxscHRyKSB7fQotCi0gIGNvbnN0ZXhwciBPcHRpb25hbChu
dWxsb3B0X3QpIF9fTk9FWENFUFQgOiByZWYobnVsbHB0cikge30KLQotICBjb25zdGV4cHIgT3B0
aW9uYWwoVCYgdikgX19OT0VYQ0VQVCA6IHJlZihkZXRhaWxfOjpzdGF0aWNfYWRkcmVzc29mKHYp
KSB7fQotCi0gIE9wdGlvbmFsKFQmJikgPSBkZWxldGU7Ci0KLSAgY29uc3RleHByIE9wdGlvbmFs
KGNvbnN0IE9wdGlvbmFsJiByaHMpIF9fTk9FWENFUFQgOiByZWYocmhzLnJlZikge30KLQotICBl
eHBsaWNpdCBjb25zdGV4cHIgT3B0aW9uYWwoc3RkOjppbl9wbGFjZV90LCBUJiB2KSBfX05PRVhD
RVBUIDogcmVmKGRldGFpbF86OnN0YXRpY19hZGRyZXNzb2YodikpIHt9Ci0KLSAgZXhwbGljaXQg
T3B0aW9uYWwoc3RkOjppbl9wbGFjZV90LCBUJiYpID0gZGVsZXRlOwotCi0gIH5PcHRpb25hbCgp
ID0gZGVmYXVsdDsKLQotICAvLyAyMC41LjUuMiwgbXV0YXRpb24KLSAgT3B0aW9uYWwmIG9wZXJh
dG9yPShudWxsb3B0X3QpIF9fTk9FWENFUFQgewotICAgIHJlZiA9IG51bGxwdHI7Ci0gICAgcmV0
dXJuICp0aGlzOwotICB9Ci0KLSAgLy8gT3B0aW9uYWwmIG9wZXJhdG9yPShjb25zdCBPcHRpb25h
bCYgcmhzKSBfX05PRVhDRVBUIHsKLSAgICAvLyByZWYgPSByaHMucmVmOwotICAgIC8vIHJldHVy
biAqdGhpczsKLSAgLy8gfQotCi0gIC8vIE9wdGlvbmFsJiBvcGVyYXRvcj0oT3B0aW9uYWwmJiBy
aHMpIF9fTk9FWENFUFQgewotICAgIC8vIHJlZiA9IHJocy5yZWY7Ci0gICAgLy8gcmV0dXJuICp0
aGlzOwotICAvLyB9Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gIGF1dG8gb3BlcmF0b3I9
KFUmJiByaHMpIF9fTk9FWENFUFQKLSAgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWYKLSAgPAot
ICAgIHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBzdGQ6OmRlY2F5PFU+Ojp0eXBlLCBPcHRpb25hbDxU
Jj4+Ojp2YWx1ZSwKLSAgICBPcHRpb25hbCYKLSAgPjo6dHlwZQotICB7Ci0gICAgcmVmID0gcmhz
LnJlZjsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4K
LSAgYXV0byBvcGVyYXRvcj0oVSYmIHJocykgX19OT0VYQ0VQVAotICAtPiB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZgotICA8Ci0gICAgIXN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBzdGQ6OmRlY2F5PFU+
Ojp0eXBlLCBPcHRpb25hbDxUJj4+Ojp2YWx1ZSwKLSAgICBPcHRpb25hbCYKLSAgPjo6dHlwZQot
ICA9IGRlbGV0ZTsKLQotICB2b2lkIGVtcGxhY2UoVCYgdikgX19OT0VYQ0VQVCB7Ci0gICAgcmVm
ID0gZGV0YWlsXzo6c3RhdGljX2FkZHJlc3NvZih2KTsKLSAgfQotCi0gIHZvaWQgZW1wbGFjZShU
JiYpID0gZGVsZXRlOwotCi0KLSAgdm9pZCBzd2FwKE9wdGlvbmFsPFQmPiYgcmhzKSBfX05PRVhD
RVBUCi0gIHsKLSAgICBzdGQ6OnN3YXAocmVmLCByaHMucmVmKTsKLSAgfQotCi0gIC8vIDIwLjUu
NS4zLCBvYnNlcnZlcnMKLSAgY29uc3RleHByIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7Ci0gICAg
UkVMRUFTRV9BU1NFUlRfVU5ERVJfQ09OU1RFWFBSX0NPTlRFWFQocmVmKTsKLSAgICByZXR1cm4g
cmVmOwotICB9Ci0KLSAgY29uc3RleHByIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsKLSAgICBSRUxF
QVNFX0FTU0VSVF9VTkRFUl9DT05TVEVYUFJfQ09OVEVYVChyZWYpOwotICAgIHJldHVybiAqcmVm
OwotICB9Ci0KLSAgY29uc3RleHByIFQmIHZhbHVlKCkgY29uc3QgewotICAgIFJFTEVBU0VfQVNT
RVJUX1VOREVSX0NPTlNURVhQUl9DT05URVhUKHJlZigpKTsKLSAgICByZXR1cm4gKnJlZjsKLSAg
fQotCi0gIGV4cGxpY2l0IGNvbnN0ZXhwciBvcGVyYXRvciBib29sKCkgY29uc3QgX19OT0VYQ0VQ
VCB7Ci0gICAgcmV0dXJuIHJlZiAhPSBudWxscHRyOwotICB9Ci0KLSAgY29uc3RleHByIGJvb2wg
aGFzVmFsdWUoKSBjb25zdCBfX05PRVhDRVBUIHsKLSAgICByZXR1cm4gcmVmICE9IG51bGxwdHI7
Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgVj4KLSAgY29uc3RleHByIHR5cGVuYW1lIHN0ZDo6
ZGVjYXk8VD46OnR5cGUgdmFsdWVPcihWJiYgdikgY29uc3QKLSAgewotICAgIHJldHVybiAqdGhp
cyA/ICoqdGhpcyA6IGRldGFpbF86OmNvbnZlcnQ8dHlwZW5hbWUgc3RkOjpkZWNheTxUPjo6dHlw
ZT4oZGV0YWlsXzo6Y29uc3RleHByX2ZvcndhcmQ8Vj4odikpOwotICB9Ci0KLSAgLy8geC54Lngu
eCwgbW9kaWZpZXJzCi0gIHZvaWQgcmVzZXQoKSBfX05PRVhDRVBUIHsgcmVmID0gbnVsbHB0cjsg
fQotfTsKLQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLWNsYXNzIE9wdGlvbmFsPFQmJj4KLXsKLSAg
c3RhdGljX2Fzc2VydCggc2l6ZW9mKFQpID09IDAsICJPcHRpb25hbCBydmFsdWUgcmVmZXJlbmNl
cyBkaXNhbGxvd2VkIiApOwotfTsKLQotCi0vLyAyMC41LjgsIFJlbGF0aW9uYWwgb3BlcmF0b3Jz
Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPcHRp
b25hbDxUPiYgeCwgY29uc3QgT3B0aW9uYWw8VD4mIHkpCi17Ci0gIHJldHVybiBib29sKHgpICE9
IGJvb2woeSkgPyBmYWxzZSA6IGJvb2woeCkgPT0gZmFsc2UgPyB0cnVlIDogKnggPT0gKnk7Ci19
Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE9w
dGlvbmFsPFQ+JiB4LCBjb25zdCBPcHRpb25hbDxUPiYgeSkKLXsKLSAgcmV0dXJuICEoeCA9PSB5
KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChjb25z
dCBPcHRpb25hbDxUPiYgeCwgY29uc3QgT3B0aW9uYWw8VD4mIHkpCi17Ci0gIHJldHVybiAoIXkp
ID8gZmFsc2UgOiAoIXgpID8gdHJ1ZSA6ICp4IDwgKnk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBU
PiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0IE9w
dGlvbmFsPFQ+JiB5KQotewotICByZXR1cm4gKHkgPCB4KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNz
IFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0oY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0
IE9wdGlvbmFsPFQ+JiB5KQotewotICByZXR1cm4gISh5IDwgeCk7Ci19Ci0KLXRlbXBsYXRlIDxj
bGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBj
b25zdCBPcHRpb25hbDxUPiYgeSkKLXsKLSAgcmV0dXJuICEoeCA8IHkpOwotfQotCi0KLS8vIDIw
LjUuOSwgQ29tcGFyaXNvbiB3aXRoIG51bGxvcHQKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4
cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBudWxsb3B0X3QpIF9fTk9F
WENFUFQKLXsKLSAgcmV0dXJuICgheCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4
cHIgYm9vbCBvcGVyYXRvcj09KG51bGxvcHRfdCwgY29uc3QgT3B0aW9uYWw8VD4mIHgpIF9fTk9F
WENFUFQKLXsKLSAgcmV0dXJuICgheCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4
cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBudWxsb3B0X3QpIF9fTk9F
WENFUFQKLXsKLSAgcmV0dXJuIGJvb2woeCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25z
dGV4cHIgYm9vbCBvcGVyYXRvciE9KG51bGxvcHRfdCwgY29uc3QgT3B0aW9uYWw8VD4mIHgpIF9f
Tk9FWENFUFQKLXsKLSAgcmV0dXJuIGJvb2woeCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoY29uc3QgT3B0aW9uYWw8VD4mLCBudWxsb3B0X3QpIF9f
Tk9FWENFUFQKLXsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29u
c3RleHByIGJvb2wgb3BlcmF0b3I8KG51bGxvcHRfdCwgY29uc3QgT3B0aW9uYWw8VD4mIHgpIF9f
Tk9FWENFUFQKLXsKLSAgcmV0dXJuIGJvb2woeCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBudWxsb3B0X3Qp
IF9fTk9FWENFUFQKLXsKLSAgcmV0dXJuICgheCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KG51bGxvcHRfdCwgY29uc3QgT3B0aW9uYWw8VD4mKSBf
X05PRVhDRVBUCi17Ci0gIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29u
c3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBudWxsb3B0X3QpIF9f
Tk9FWENFUFQKLXsKLSAgcmV0dXJuIGJvb2woeCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcj4obnVsbG9wdF90LCBjb25zdCBPcHRpb25hbDxUPiYpIF9f
Tk9FWENFUFQKLXsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29u
c3RleHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCBPcHRpb25hbDxUPiYsIG51bGxvcHRfdCkgX19O
T0VYQ0VQVAotewotICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0
ZXhwciBib29sIG9wZXJhdG9yPj0obnVsbG9wdF90LCBjb25zdCBPcHRpb25hbDxUPiYgeCkgX19O
T0VYQ0VQVAotewotICByZXR1cm4gKCF4KTsKLX0KLQotCi0KLS8vIDIwLjUuMTAsIENvbXBhcmlz
b24gd2l0aCBUCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBPcHRpb25hbDxUPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAq
eCA9PSB2IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPFQ+JiB4KQotewotICByZXR1cm4g
Ym9vbCh4KSA/IHYgPT0gKnggOiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0
ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0IFQmIHYpCi17
Ci0gIHJldHVybiBib29sKHgpID8gKnggIT0gdiA6IHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFz
cyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFs
PFQ+JiB4KQotewotICByZXR1cm4gYm9vbCh4KSA/IHYgIT0gKnggOiB0cnVlOwotfQotCi10ZW1w
bGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IE9wdGlvbmFsPFQ+
JiB4LCBjb25zdCBUJiB2KQotewotICByZXR1cm4gYm9vbCh4KSA/ICp4IDwgdiA6IHRydWU7Ci19
Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgVCYg
diwgY29uc3QgT3B0aW9uYWw8VD4mIHgpCi17Ci0gIHJldHVybiBib29sKHgpID8gdiA+ICp4IDog
dHJ1ZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihj
b25zdCBPcHRpb25hbDxUPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAq
eCA+IHYgOiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9w
ZXJhdG9yPChjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxUPiYgeCkKLXsKLSAgcmV0dXJuIGJv
b2woeCkgPyB2IDwgKnggOiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhw
ciBib29sIG9wZXJhdG9yPj0oY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0IFQmIHYpCi17Ci0g
IHJldHVybiBib29sKHgpID8gKnggPj0gdiA6IGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3Mg
VD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxU
PiYgeCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2IDw9ICp4IDogZmFsc2U7Ci19Ci0KLXRlbXBs
YXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IE9wdGlvbmFsPFQ+
JiB4LCBjb25zdCBUJiB2KQotewotICByZXR1cm4gYm9vbCh4KSA/ICp4IDw9IHYgOiB0cnVlOwot
fQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCBU
JiB2LCBjb25zdCBPcHRpb25hbDxUPiYgeCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2ID49ICp4
IDogdHJ1ZTsKLX0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgT3B0aW9uYWwgPSBzdGQ6
Om9wdGlvbmFsPFQ+OworY29uc3RleHByIGF1dG8gbnVsbG9wdCA9IHN0ZDo6bnVsbG9wdDsKK3Vz
aW5nIG51bGxvcHRfdCA9IHN0ZDo6bnVsbG9wdF90OwogCi0vLyBDb21wYXJpc29uIG9mIE9wdGlv
bmFsPFQmPiB3aXRoIFQKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IE9wdGlvbmFsPFQmPiYgeCwgY29uc3QgVCYgdikKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+IGNvbnN0ZXhwciBzdGQ6Om9wdGlvbmFsPHN0
ZDo6ZGVjYXlfdDxUPj4gbWFrZU9wdGlvbmFsKFQmJiB2YWx1ZSkKIHsKLSAgcmV0dXJuIGJvb2wo
eCkgPyAqeCA9PSB2IDogZmFsc2U7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV9vcHRpb25hbDxzdGQ6
OmRlY2F5X3Q8VD4+KHN0ZDo6Zm9yd2FyZDxUPih2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZSA8Y2xh
c3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUJiB2LCBjb25zdCBPcHRpb25h
bDxUJj4mIHgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVz
PiBjb25zdGV4cHIgc3RkOjpvcHRpb25hbDxUPiBtYWtlT3B0aW9uYWwoQXJndW1lbnRUeXBlcyYm
Li4uIGFyZ3VtZW50cykKIHsKLSAgcmV0dXJuIGJvb2woeCkgPyB2ID09ICp4IDogZmFsc2U7Cisg
ICAgcmV0dXJuIHN0ZDo6bWFrZV9vcHRpb25hbDxUPihzdGQ6OmZvcndhcmQ8QXJndW1lbnRUeXBl
cz4oYXJndW1lbnRzKS4uLik7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IE9wdGlvbmFsPFQmPiYgeCwgY29uc3QgVCYgdikKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+IGNvbnN0
ZXhwciBzdGQ6Om9wdGlvbmFsPFQ+IG1ha2VPcHRpb25hbChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8
VT4gbGlzdCwgQXJndW1lbnRUeXBlcyYmLi4uIGFyZ3VtZW50cykKIHsKLSAgcmV0dXJuIGJvb2wo
eCkgPyAqeCAhPSB2IDogdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjptYWtlX29wdGlvbmFsPFQ+KGxp
c3QsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudFR5cGVzPihhcmd1bWVudHMpLi4uKTsKIH0KIAotdGVt
cGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgVCYgdiwgY29u
c3QgT3B0aW9uYWw8VCY+JiB4KQorLy8gRklYTUU6IFdlIHByb2JhYmx5IGRvbid0IG5lZWQgdGhp
czsgaXQncyBvbmx5IHVzZWQgaW4gNSBwbGFjZXMuCit0ZW1wbGF0ZTx0eXBlbmFtZSBPcHRpb25h
bFR5cGUsIGNsYXNzIENhbGxiYWNrPiBhdXRvIHZhbHVlT3JDb21wdXRlKE9wdGlvbmFsVHlwZSBv
cHRpb25hbCwgQ2FsbGJhY2sgY2FsbGJhY2spIC0+IHR5cGVuYW1lIE9wdGlvbmFsVHlwZTo6dmFs
dWVfdHlwZQogewotICByZXR1cm4gYm9vbCh4KSA/IHYgIT0gKnggOiB0cnVlOwotfQotCi10ZW1w
bGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IE9wdGlvbmFsPFQm
PiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA8IHYgOiB0cnVlOwot
fQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFQm
IHYsIGNvbnN0IE9wdGlvbmFsPFQmPiYgeCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2ID4gKngg
OiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+
KGNvbnN0IE9wdGlvbmFsPFQmPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkg
PyAqeCA+IHYgOiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29s
IG9wZXJhdG9yPChjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxUJj4mIHgpCi17Ci0gIHJldHVy
biBib29sKHgpID8gdiA8ICp4IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25z
dGV4cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0IE9wdGlvbmFsPFQmPiYgeCwgY29uc3QgVCYgdikK
LXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA+PSB2IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxj
bGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlv
bmFsPFQmPiYgeCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2IDw9ICp4IDogZmFsc2U7Ci19Ci0K
LXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IE9wdGlv
bmFsPFQmPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA8PSB2IDog
dHJ1ZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0o
Y29uc3QgVCYgdiwgY29uc3QgT3B0aW9uYWw8VCY+JiB4KQotewotICByZXR1cm4gYm9vbCh4KSA/
IHYgPj0gKnggOiB0cnVlOwotfQotCi0vLyBDb21wYXJpc29uIG9mIE9wdGlvbmFsPFQgY29uc3Qm
PiB3aXRoIFQKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IE9wdGlvbmFsPGNvbnN0IFQmPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2wo
eCkgPyAqeCA9PSB2IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPGNvbnN0IFQmPiYgeCkK
LXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2ID09ICp4IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxj
bGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE9wdGlvbmFsPGNvbnN0IFQm
PiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCAhPSB2IDogdHJ1ZTsK
LX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3Qg
VCYgdiwgY29uc3QgT3B0aW9uYWw8Y29uc3QgVCY+JiB4KQotewotICByZXR1cm4gYm9vbCh4KSA/
IHYgIT0gKnggOiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wg
b3BlcmF0b3I8KGNvbnN0IE9wdGlvbmFsPGNvbnN0IFQmPiYgeCwgY29uc3QgVCYgdikKLXsKLSAg
cmV0dXJuIGJvb2woeCkgPyAqeCA8IHYgOiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4g
Y29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPGNvbnN0
IFQmPiYgeCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2ID4gKnggOiB0cnVlOwotfQotCi10ZW1w
bGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IE9wdGlvbmFsPGNv
bnN0IFQmPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA+IHYgOiBm
YWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChj
b25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxjb25zdCBUJj4mIHgpCi17Ci0gIHJldHVybiBib29s
KHgpID8gdiA8ICp4IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIg
Ym9vbCBvcGVyYXRvcj49KGNvbnN0IE9wdGlvbmFsPGNvbnN0IFQmPiYgeCwgY29uc3QgVCYgdikK
LXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA+PSB2IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxj
bGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlv
bmFsPGNvbnN0IFQmPiYgeCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2IDw9ICp4IDogZmFsc2U7
Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0
IE9wdGlvbmFsPGNvbnN0IFQmPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkg
PyAqeCA8PSB2IDogdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29s
IG9wZXJhdG9yPj0oY29uc3QgVCYgdiwgY29uc3QgT3B0aW9uYWw8Y29uc3QgVCY+JiB4KQotewot
ICByZXR1cm4gYm9vbCh4KSA/IHYgPj0gKnggOiB0cnVlOwotfQotCi0KLS8vIDIwLjUuMTIsIFNw
ZWNpYWxpemVkIGFsZ29yaXRobXMKLXRlbXBsYXRlIDxjbGFzcyBUPgotdm9pZCBzd2FwKE9wdGlv
bmFsPFQ+JiB4LCBPcHRpb25hbDxUPiYgeSkgX19OT0VYQ0VQVF8oX19OT0VYQ0VQVF8oeC5zd2Fw
KHkpKSkKLXsKLSAgeC5zd2FwKHkpOwotfQotCi0KLXRlbXBsYXRlIDxjbGFzcyBUPgotY29uc3Rl
eHByIE9wdGlvbmFsPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VD46OnR5cGU+IG1ha2VPcHRpb25hbChU
JiYgdikKLXsKLSAgcmV0dXJuIE9wdGlvbmFsPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VD46OnR5cGU+
KGRldGFpbF86OmNvbnN0ZXhwcl9mb3J3YXJkPFQ+KHYpKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNz
IFg+Ci1jb25zdGV4cHIgT3B0aW9uYWw8WCY+IG1ha2VPcHRpb25hbChzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPFg+IHYpCi17Ci0gIHJldHVybiBPcHRpb25hbDxYJj4odi5nZXQoKSk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdURgotCi1uYW1lc3BhY2Ugc3RkCi17Ci0gIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgotICBzdHJ1Y3QgaGFzaDxXVEY6Ok9wdGlvbmFsPFQ+PgotICB7Ci0gICAgdHlwZWRlZiB0
eXBlbmFtZSBoYXNoPFQ+OjpyZXN1bHRfdHlwZSByZXN1bHRfdHlwZTsKLSAgICB0eXBlZGVmIFdU
Rjo6T3B0aW9uYWw8VD4gYXJndW1lbnRfdHlwZTsKLQotICAgIGNvbnN0ZXhwciByZXN1bHRfdHlw
ZSBvcGVyYXRvcigpKGFyZ3VtZW50X3R5cGUgY29uc3QmIGFyZykgY29uc3QgewotICAgICAgcmV0
dXJuIGFyZyA/IHN0ZDo6aGFzaDxUPnt9KCphcmcpIDogcmVzdWx0X3R5cGV7fTsKLSAgICB9Ci0g
IH07Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gIHN0cnVjdCBoYXNoPFdURjo6T3B0aW9u
YWw8VCY+PgotICB7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBoYXNoPFQ+OjpyZXN1bHRfdHlwZSBy
ZXN1bHRfdHlwZTsKLSAgICB0eXBlZGVmIFdURjo6T3B0aW9uYWw8VCY+IGFyZ3VtZW50X3R5cGU7
Ci0KLSAgICBjb25zdGV4cHIgcmVzdWx0X3R5cGUgb3BlcmF0b3IoKShhcmd1bWVudF90eXBlIGNv
bnN0JiBhcmcpIGNvbnN0IHsKLSAgICAgIHJldHVybiBhcmcgPyBzdGQ6Omhhc2g8VD57fSgqYXJn
KSA6IHJlc3VsdF90eXBle307Ci0gICAgfQotICB9OwotfQotCi0jIHVuZGVmIFRSMl9PUFRJT05B
TF9SRVFVSVJFUwotCi1uYW1lc3BhY2UgV1RGIHsKLQotLy8gLS0gV2ViS2l0IEFkZGl0aW9ucyAt
LQotdGVtcGxhdGUgPGNsYXNzIE9wdGlvbmFsVHlwZSwgY2xhc3MgQ2FsbGJhY2s+Ci1BTFdBWVNf
SU5MSU5FCi1hdXRvIHZhbHVlT3JDb21wdXRlKE9wdGlvbmFsVHlwZSBPcHRpb25hbCwgQ2FsbGJh
Y2sgY2FsbGJhY2spIC0+IHR5cGVuYW1lIE9wdGlvbmFsVHlwZTo6dmFsdWVfdHlwZQotewotICAg
IGlmIChPcHRpb25hbCkKLSAgICAgICAgcmV0dXJuICpPcHRpb25hbDsKLSAgICByZXR1cm4gY2Fs
bGJhY2soKTsKKyAgICByZXR1cm4gb3B0aW9uYWwgPyAqb3B0aW9uYWwgOiBjYWxsYmFjaygpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKQEAgLTEwNDksMyArNTQsNyBAQCBhdXRvIHZhbHVlT3JD
b21wdXRlKE9wdGlvbmFsVHlwZSBPcHRpb25hbCwgQ2FsbGJhY2sgY2FsbGJhY2spIC0+IHR5cGVu
YW1lIE9wdGlvbgogdXNpbmcgV1RGOjpPcHRpb25hbDsKIHVzaW5nIFdURjo6bWFrZU9wdGlvbmFs
OwogdXNpbmcgV1RGOjp2YWx1ZU9yQ29tcHV0ZTsKKworLy8gRklYTUU6IFRoZXNlIG1hY3JvcyBh
cmUgYSB3b3JrYXJvdW5kIHRvIGFsbG93IHVzIHRvIHVzZSBzdGQ6Om9wdGlvbmFsIHdpdGhvdXQg
YSBnbG9iYWwgcmVwbGFjZTsgdGhleSBjYW4gYmUgcmVtb3ZlZCBhZnRlciBzYWlkIGdsb2JhbCBy
ZXBsYWNlLgorI2RlZmluZSBoYXNWYWx1ZSBoYXNfdmFsdWUKKyNkZWZpbmUgdmFsdWVPciB2YWx1
ZV9vcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU2Vjb25kcy5oIGIvU291cmNlL1dURi93
dGYvU2Vjb25kcy5oCmluZGV4IGMxYmUzOTI3MzgyZWI2YmZlOTUzMDc4ZmU1YmEyMDE3ZjJmOTI5
YjYuLjUzYmNiYzY1OTlkYzUzMGM4N2Y4NTc2YzZhOWRhZGNiM2EwNjIxMzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL1NlY29uZHMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmgK
QEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlIDx3dGYvRmFzdE1h
bGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3Rl
bnRDb2Rlci5oIGIvU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVyLmgK
aW5kZXggY2M3NDhjOTNhYzgyODEyZTg2NmFmNjdlY2ZkOGZmNjNlOWNkNGU3OC4uNjE1YmQxMjU3
Yzg5NzI0MDc0M2YzYjU1YTI2MjEzYjYyYTAzOTA4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVyLmgKKysrIGIvU291cmNlL1dURi93dGYvcGVy
c2lzdGVuY2UvUGVyc2lzdGVudENvZGVyLmgKQEAgLTI1LDEwICsyNSw5IEBACiAKICNwcmFnbWEg
b25jZQogCi1uYW1lc3BhY2UgV1RGIHsKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCi10ZW1w
bGF0ZSA8Y2xhc3MgVD4KLWNsYXNzIE9wdGlvbmFsOworbmFtZXNwYWNlIFdURiB7CiAKIG5hbWVz
cGFjZSBQZXJzaXN0ZW5jZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1ZQOVV0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvVlA5VXRpbGl0aWVzLmgKaW5kZXggZGEzMDkwMGE0ZWM3MjM4M2UzZWIwMzNkNWM0NjY1YzA3
ZWNkOTU3YS4uYTE4OGE3NDRkNDI2NjVlZjg0NmM1MjA2NTEwZTAwNGI1MjQzOTlmZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVlA5VXRpbGl0aWVzLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVlA5VXRpbGl0aWVzLmgKQEAgLTE0
NCwxNCArMTQ0LDE0IEBAIHN0cnVjdCBTY3JlZW5EYXRhT3ZlcnJpZGVzIHsKICAgICBzdGF0aWMg
T3B0aW9uYWw8U2NyZWVuRGF0YU92ZXJyaWRlcz4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAg
ICAgewogI2RlZmluZSBERUNPREUobmFtZSwgdHlwZSkgXAotICAgIE9wdGlvbmFsPHR5cGU+IG5h
bWU7IFwKLSAgICBkZWNvZGVyID4+IG5hbWU7IFwKLSAgICBpZiAoIW5hbWUpIFwKLSAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsgXAotCi0gICAgREVDT0RFKHdpZHRoLCBkb3VibGUpOwotICAg
IERFQ09ERShoZWlnaHQsIGRvdWJsZSk7Ci0gICAgREVDT0RFKHNjYWxlLCBkb3VibGUpOworICAg
ICAgICBPcHRpb25hbDx0eXBlPiBuYW1lOyBcCisgICAgICAgIGRlY29kZXIgPj4gbmFtZTsgXAor
ICAgICAgICBpZiAoIW5hbWUpIFwKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7IFwK
KworICAgICAgICBERUNPREUod2lkdGgsIGRvdWJsZSk7CisgICAgICAgIERFQ09ERShoZWlnaHQs
IGRvdWJsZSk7CisgICAgICAgIERFQ09ERShzY2FsZSwgZG91YmxlKTsKICN1bmRlZiBERUNPREUK
IAogICAgIHJldHVybiB7eyBXVEZNb3ZlKCp3aWR0aCksIFdURk1vdmUoKmhlaWdodCksIFdURk1v
dmUoKnNjYWxlKSB9fTsKQEAgLTE2Myw1ICsxNjMsOSBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFNjcmVlbkRhdGFPdmVycmlkZXMmIGEsIGNvbnN0IFNjcmVlbkRhdGFPdmVycmlkZXMm
CiAgICAgcmV0dXJuIGEud2lkdGggPT0gYi53aWR0aCAmJiBhLmhlaWdodCA9PSBiLmhlaWdodCAm
JiBhLnNjYWxlID09IGIuc2NhbGU7CiB9CiAKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3Qg
U2NyZWVuRGF0YU92ZXJyaWRlcyYgYSwgY29uc3QgU2NyZWVuRGF0YU92ZXJyaWRlcyYgYikKK3sK
KyAgICByZXR1cm4gIShhID09IGIpOworfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlhU291cmNlR1N0cmVh
bWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2Uv
V2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwCmluZGV4IGFhN2NlZWI3Mzk4YWUxMTlkZGVh
ZjA1MTc2ZGUyZThmMWM0YzYyN2QuLjdmMGE5ZDRhY2IwZjMxMmZjNWQwZWIzYjk2ZDY0NWU0NmMw
Y2Q1ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9tc2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvV2ViS2l0TWVkaWFTb3VyY2VHU3Ry
ZWFtZXIuY3BwCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgi
CiAjaW5jbHVkZSAiTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lci5oIgogI2luY2x1ZGUgIlZpZGVv
VHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCi0KKyNpbmNsdWRlIDxjYXNzZXJ0PgogI2luY2x1ZGUg
PGdzdC9nc3QuaD4KICNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0Rh
dGFNdXRleC5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbGlid2VicnRjL0dTdHJlYW1lclZpZGVvRW5jb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9FbmNvZGVyLmNwcApp
bmRleCA4NGU3MTI0ZDkyNzZmNTQ2ZmZlMDhhZTA0NTM0ZWQzNDBmY2RiYjU4Li5kMzQyODg0YWFl
NjBkMzI0NGMxZjNiN2QwMzZlMTYyZjgxOTcyN2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9FbmNvZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0
cmVhbWVyVmlkZW9FbmNvZGVyLmNwcApAQCAtODAsMTEgKzgwLDExIEBAIHB1YmxpYzoKICAgICAg
ICAgfSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBPcHRpb25hbDxFbmNvZGVyRGVmaW5pdGlvbiY+
IGRlZmluaXRpb24oRW5jb2RlcklkIGlkKQorICAgIHN0YXRpYyBFbmNvZGVyRGVmaW5pdGlvbiog
ZGVmaW5pdGlvbihFbmNvZGVySWQgaWQpCiAgICAgewogICAgICAgICBpZiAoaWQgPT0gTm9uZSkK
LSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIHJldHVybiBzaW5nbGV0b24oKVtpZF07
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuICZzaW5nbGV0b24o
KVtpZF07CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4
IDNjNzU2N2M4MWJiYTgyMmM0OGFiMDZlZDI0ZGUyOTY0OTgzMDE4ZjIuLmFhMTQxZDhlZjc1MmI4
NDY2ZjVkN2UxMTBmZTI4NmI5MTQxMmJmZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5jcHAKQEAgLTYwMjcsNyArNjAyNyw3IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRIYXJkd2FyZVZQ
OURlY29kZXJEaXNhYmxlZEZvclRlc3RpbmcoYm9vbCBkaXNhYmxlZCkKIHZvaWQgSW50ZXJuYWxz
OjpzZXRWUDlTY3JlZW5TaXplQW5kU2NhbGVGb3JUZXN0aW5nKGRvdWJsZSB3aWR0aCwgZG91Ymxl
IGhlaWdodCwgZG91YmxlIHNjYWxlKQogewogI2lmIEVOQUJMRShWUDkpICYmIFBMQVRGT1JNKENP
Q09BKQotICAgIFZQOVRlc3RpbmdPdmVycmlkZXM6OnNpbmdsZXRvbigpLnNldFZQOVNjcmVlblNp
emVBbmRTY2FsZShtYWtlT3B0aW9uYWw8U2NyZWVuRGF0YU92ZXJyaWRlcz4oeyB3aWR0aCwgaGVp
Z2h0LCBzY2FsZSB9KSk7CisgICAgVlA5VGVzdGluZ092ZXJyaWRlczo6c2luZ2xldG9uKCkuc2V0
VlA5U2NyZWVuU2l6ZUFuZFNjYWxlKFNjcmVlbkRhdGFPdmVycmlkZXMgeyB3aWR0aCwgaGVpZ2h0
LCBzY2FsZSB9KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKICAgICBVTlVTRURf
UEFSQU0oaGVpZ2h0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Fy
Z3VtZW50Q29kZXIuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXIu
aAppbmRleCAzYWI5ZmNjNWVkMTAzNTU5YjFiNmViM2I0ZWQxMDZmNWJiZDI2OTZiLi41ZWZkMzI2
ZWJmZmExM2IyMzA1NmJjYTQxNWM3Y2E2NmIwMTVkNjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvQXJndW1lbnRDb2Rlci5oCkBAIC01Niw3ICs1Niw3IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lID0gdm9pZD4gc3RydWN0IEFyZ3VtZW50Q29kZXIgewogICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgIFQgdDsKICAgICAgICAgICAgIGlmIChUOjpkZWNvZGUoZGVjb2Rl
ciwgdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHQ7CisgICAgICAgICAgICAgICAgcmV0dXJu
IFdURk1vdmUodCk7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvVG91Y2hCYXJNZW51RGF0
YS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvVG91Y2hCYXJNZW51RGF0YS5oCmluZGV4IDMxYWMw
OTI4M2Q4ZTlhMTZmNDFkNDU4Yjc5OWM5MmNkMDQ4YTAwYTEuLjczY2MwN2E3NTE5OWM0MzA5MzAw
ZWM1ZTg2NGJjOGE0NWM0NDhiYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Rv
dWNoQmFyTWVudURhdGEuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Ub3VjaEJhck1lbnVE
YXRhLmgKQEAgLTI3LDkgKzI3LDggQEAKIAogI2lmIEhBVkUoVE9VQ0hfQkFSKQogCi0jaW5jbHVk
ZSAiQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJUb3VjaEJhck1lbnVJdGVtRGF0YS5oIgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IAogbmFtZXNwYWNlIElQQyB7CiBjbGFzcyBEZWNvZGVyOwpAQCAtNDQsOSArNDMsOCBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgVG91Y2hCYXJNZW51RGF0YSB7CiBwdWJsaWM6Ci0gICAg
ZXhwbGljaXQgVG91Y2hCYXJNZW51RGF0YSgpID0gZGVmYXVsdDsKKyAgICBUb3VjaEJhck1lbnVE
YXRhKCkgPSBkZWZhdWx0OwogICAgIGV4cGxpY2l0IFRvdWNoQmFyTWVudURhdGEoY29uc3QgV2Vi
Q29yZTo6SFRNTE1lbnVFbGVtZW50Jik7Ci0gICAgZXhwbGljaXQgVG91Y2hCYXJNZW51RGF0YShj
b25zdCBUb3VjaEJhck1lbnVEYXRhJikgPSBkZWZhdWx0OwogCiAgICAgdm9pZCBhZGRNZW51SXRl
bShjb25zdCBUb3VjaEJhck1lbnVJdGVtRGF0YSYpOwogICAgIHZvaWQgcmVtb3ZlTWVudUl0ZW0o
Y29uc3QgVG91Y2hCYXJNZW51SXRlbURhdGEmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKaW5kZXgg
NDRjOGQ3NTIzYWExNGQyMjI3Y2UzZDAxNTY0MjM4ZTY2NmZhMGRjMi4uZTk0ZTA2Y2YyMDJlNDE5
MTkxMjE0NGRiMTcxNTIxZjNhMzdmMDVlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKQEAgLTM2
OSwxMiArMzY5LDEyIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnN3aXRjaFRvQnJvd3Np
bmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1CiAgICAgICAgIEFTWU5DX0ZB
SUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAogICAgIGJvb2wgZnJh
bWVOb3RGb3VuZCA9IGZhbHNlOwotICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5k
bGUoZnJhbWVIYW5kbGUsIGZyYW1lTm90Rm91bmQpOworICAgIHdlYkZyYW1lSURGb3JIYW5kbGUo
ZnJhbWVIYW5kbGUsIGZyYW1lTm90Rm91bmQpOwogICAgIGlmIChmcmFtZU5vdEZvdW5kKQogICAg
ICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKIAot
Ci0gICAgbV9jbGllbnQtPnJlcXVlc3RTd2l0Y2hUb1BhZ2UoKnRoaXMsICpwYWdlLCBbZnJhbWVJ
RCwgcGFnZSA9IG1ha2VSZWYoKnBhZ2UpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSgp
IHsKKyAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGFsc28gc3dpdGNoIHRvIHRoZSBmcmFtZSB0aGF0
IGZyYW1lSGFuZGxlIHBvaW50cyB0bz8KKyAgICBtX2NsaWVudC0+cmVxdWVzdFN3aXRjaFRvUGFn
ZSgqdGhpcywgKnBhZ2UsIFtwYWdlID0gbWFrZVJlZigqcGFnZSksIGNhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayldKCkgewogICAgICAgICBwYWdlLT5zZXRGb2N1cyh0cnVlKTsKIAogICAgICAg
ICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxMjU4NGEzNGE2OWNiNTA1NzE5OTMwYTRiYmRiY2FkNGEx
ZGE3OTY3Li45MzdlODQ0NzliYjI0MDBlM2M0NTM0NjQ0MmI1YzMwY2NmNTEwZmIzIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkg
QEAKKzIwMjEtMDUtMjQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAg
IFN3aXRjaCBmcm9tIFdURjo6T3B0aW9uYWwgdG8gc3RkOjpvcHRpb25hbAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExNjc0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0
eWxlL2NoZWNrZXIucHk6IFJlbW92ZWQgZXhjZXB0aW9ucyBmcm9tIHRoZSBXVEY6Ok9wdGlvbmFs
CisgICAgICAgIHN0eWxlIHJ1bGUgZm9yIFdlYlJUQy4KKworICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5OiBSZW1vdmVkIGNoZWNrX3d0Zl9vcHRpb25hbC4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0dGVzdC5w
eTogUmVtb3ZlZCB0ZXN0X3d0Zl9vcHRpb25hbC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0NN
YWtlTGlzdHMudHh0OiBSZW1vdmVkIE9wdGlvbmFsLmNwcC4KKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvT3B0aW9uYWwuY3BwOiBSZW1vdmVkLgorCiAy
MDIxLTA1LTI0ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAg
ICAgQVg6IFNldHRpbmdzOiBJbmNyZWFzZSBjb250cmFzdCBpc24ndCBkZXRlY3RlZCBpbiBicm93
c2VyIHVudGlsIGFuIGFkZGl0aW9uYWwgc2V0dGluZyBpcyBhcHBsaWVkCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKaW5kZXggNzEwZjk4ODc1OWNiYTI5NmM0MDRlZmRjNjQz
MjEzOWIyOGY5ZTQxMS4uMzA5NGEyNWM2MDczNTBhYTBiZGFlN2I3OWJlYjc2YThiYmRhYzhkNCAx
MDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQpAQCAtMjcyLDEyICsyNzIs
NiBAQCBfUEFUSF9SVUxFU19TUEVDSUZJRVIgPSBbCiAgICAgICAiLXdoaXRlc3BhY2UvZGVjbGFy
YXRpb24iLAogICAgICAgIi13aGl0ZXNwYWNlL2luZGVudCJdKSwKIAotICAgIChbICAjIEZpbGVz
IGZvbGxvd2luZyB1c2luZyBXZWJSVEMgb3B0aW9ubmFsIHR5cGUKLSAgICAgIG9zLnBhdGguam9p
bignU291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0nLCAnbWVkaWFzdHJlYW0nLCAnbGlid2Vi
cnRjJywgJ0dTdHJlYW1lclZpZGVvRGVjb2RlckZhY3RvcnkuY3BwJyksCi0gICAgIF0sCi0gICAg
IFsiLXJ1bnRpbWUvd3RmX29wdGlvbmFsIiwKLSAgICAgXSksCi0KICAgICAoWwogICAgICAgIyBU
aGVyZSBpcyBubyB3YXkgdG8gYXZvaWQgdGhlIHN5bWJvbHMgX19qaXRfZGVidWdfcmVnaXN0ZXJf
Y29kZQogICAgICAgIyBhbmQgX19qaXRfZGVidWdfZGVzY3JpcHRvciB3aGVuIGludGVncmF0aW5n
IHdpdGggZ2RiLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVj
a2Vycy9jcHAucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5w
eQppbmRleCA4YjA3Yjg3ZmNiZjFjYzFlOWJkMzcxMThiODA2ZjA1ZTM5N2M1NzM1Li4zZjU3ZGY4
YThkYzhiNDMzNzU2ZmFmNWZhNzU0YWEwNDBiMDY4YWQ5IDEwMDY0NAotLS0gYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5weQpAQCAtMjcwNSwyNiArMjcwNSw2IEBAIGRlZiBj
aGVja193dGZfbW92ZShjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGZpbGVfc3RhdGUsIGVycm9y
KToKICAgICBlcnJvcihsaW5lX251bWJlciwgJ3J1bnRpbWUvd3RmX21vdmUnLCA0LCAiVXNlICdX
VEZNb3ZlKCknIGluc3RlYWQgb2YgJ3N0ZDo6bW92ZSgpJy4iKQogCiAKLWRlZiBjaGVja193dGZf
b3B0aW9uYWwoY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBmaWxlX3N0YXRlLCBlcnJvcik6Ci0g
ICAgIiIiTG9va3MgZm9yIHVzZSBvZiAnc3RkOjpvcHRpb25hbDw+JyB3aGljaCBzaG91bGQgYmUg
cmVwbGFjZWQgd2l0aCAnV1RGOjpPcHRpb25hbDw+Jy4KLQotICAgIEFyZ3M6Ci0gICAgICBjbGVh
bl9saW5lczogQSBDbGVhbnNlZExpbmVzIGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIGZpbGUuCi0g
ICAgICBsaW5lX251bWJlcjogVGhlIG51bWJlciBvZiB0aGUgbGluZSB0byBjaGVjay4KLSAgICAg
IGZpbGVfc3RhdGU6IEEgX0ZpbGVTdGF0ZSBpbnN0YW5jZSB3aGljaCBtYWludGFpbnMgaW5mb3Jt
YXRpb24gYWJvdXQKLSAgICAgICAgICAgICAgICAgIHRoZSBzdGF0ZSBvZiB0aGluZ3MgaW4gdGhl
IGZpbGUuCi0gICAgICBlcnJvcjogVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCBhbnkgZXJyb3Jz
IGZvdW5kLgotICAgICIiIgotCi0gICAgbGluZSA9IGNsZWFuX2xpbmVzLmVsaWRlZFtsaW5lX251
bWJlcl0gICMgR2V0IHJpZCBvZiBjb21tZW50cyBhbmQgc3RyaW5ncy4KLQotICAgIHVzaW5nX3N0
ZF9vcHRpb25hbCA9IHNlYXJjaChyJ1xib3B0aW9uYWxccypcPCcsIGxpbmUpCi0gICAgaWYgbm90
IHVzaW5nX3N0ZF9vcHRpb25hbDoKLSAgICAgICAgcmV0dXJuCi0KLSAgICBlcnJvcihsaW5lX251
bWJlciwgJ3J1bnRpbWUvd3RmX29wdGlvbmFsJywgNCwgIlVzZSAnV1RGOjpPcHRpb25hbDw+JyBp
bnN0ZWFkIG9mICdzdGQ6Om9wdGlvbmFsPD4nLiIpCi0KLQogZGVmIGNoZWNrX2NhbGxvbm1haW50
aHJlYWQoZmlsZW5hbWUsIGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgZmlsZV9zdGF0ZSwgZXJy
b3IpOgogICAgICIiIkxvb2tzIGZvciB1c2Ugb2YgJ2NhbGxPbk1haW5UaHJlYWQoKScgd2hpY2gg
c2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggJ2NhbGxPbk1haW5SdW5Mb29wKCknLgogCkBAIC0zNDI2
LDcgKzM0MDYsNiBAQCBkZWYgY2hlY2tfc3R5bGUoY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBm
aWxlX2V4dGVuc2lvbiwgY2xhc3Nfc3RhdGUsIGZpbGVfc3RhdAogICAgIGNoZWNrX21heF9taW5f
bWFjcm9zKGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgZmlsZV9zdGF0ZSwgZXJyb3IpCiAgICAg
Y2hlY2tfd3RmX2NoZWNrZWRfc2l6ZShjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGZpbGVfc3Rh
dGUsIGVycm9yKQogICAgIGNoZWNrX3d0Zl9tb3ZlKGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwg
ZmlsZV9zdGF0ZSwgZXJyb3IpCi0gICAgY2hlY2tfd3RmX29wdGlvbmFsKGNsZWFuX2xpbmVzLCBs
aW5lX251bWJlciwgZmlsZV9zdGF0ZSwgZXJyb3IpCiAgICAgY2hlY2tfd3RmX21ha2VfdW5pcXVl
KGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgZmlsZV9zdGF0ZSwgZXJyb3IpCiAgICAgY2hlY2tf
d3RmX25ldmVyX2Rlc3Ryb3llZChjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGZpbGVfc3RhdGUs
IGVycm9yKQogICAgIGNoZWNrX2xvY2tfZ3VhcmQoY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBm
aWxlX3N0YXRlLCBlcnJvcikKQEAgLTQ2NTYsNyArNDYzNSw2IEBAIGNsYXNzIENwcENoZWNrZXIo
b2JqZWN0KToKICAgICAgICAgJ3J1bnRpbWUvdW5zaWduZWQnLAogICAgICAgICAncnVudGltZS92
aXJ0dWFsJywKICAgICAgICAgJ3J1bnRpbWUvd3RmX2NoZWNrZWRfc2l6ZScsCi0gICAgICAgICdy
dW50aW1lL3d0Zl9vcHRpb25hbCcsCiAgICAgICAgICdydW50aW1lL3d0Zl9tYWtlX3VuaXF1ZScs
CiAgICAgICAgICdydW50aW1lL3d0Zl9tb3ZlJywKICAgICAgICAgJ3J1bnRpbWUvd3RmX25ldmVy
X2Rlc3Ryb3llZCcsCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2No
ZWNrZXJzL2NwcF91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hl
Y2tlcnMvY3BwX3VuaXR0ZXN0LnB5CmluZGV4IGI3MjBjZmQxYzgxNTMwZTJhZDRmYTZkYmIyMjBm
OWY4ODQ1NTc1YmQuLjA0MjM1Y2Q4ZWQ5YzEwMGQ4M2ZiNzRiMDljOWRhZGEzODNlZTcwZDcgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwX3VuaXR0
ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwX3Vu
aXR0ZXN0LnB5CkBAIC01NjU1LDI5ICs1NjU1LDYgQEAgY2xhc3MgV2ViS2l0U3R5bGVUZXN0KENw
cFN0eWxlVGVzdEJhc2UpOgogICAgICAgICAgICAgIiAgW3J1bnRpbWUvd3RmX25ldmVyX2Rlc3Ry
b3llZF0gWzRdIiwKICAgICAgICAgICAgICdmb28ubW0nKQogCi0gICAgZGVmIHRlc3Rfd3RmX29w
dGlvbmFsKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgICdP
cHRpb25hbDxpbnQ+IGE7JywKLSAgICAgICAgICAgICAnJywKLSAgICAgICAgICAgICAnZm9vLmNw
cCcpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICAnV1RGOjpPcHRp
b25hbDxpbnQ+IGE7JywKLSAgICAgICAgICAgICAnJywKLSAgICAgICAgICAgICAnZm9vLmNwcCcp
Ci0KLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICdzdGQ6Om9wdGlvbmFs
PGludD4gYTsnLAotICAgICAgICAgICAgIlVzZSAnV1RGOjpPcHRpb25hbDw+JyBpbnN0ZWFkIG9m
ICdzdGQ6Om9wdGlvbmFsPD4nLiIKLSAgICAgICAgICAgICIgIFtydW50aW1lL3d0Zl9vcHRpb25h
bF0gWzRdIiwKLSAgICAgICAgICAgICdmb28uY3BwJykKLQotICAgICAgICBzZWxmLmFzc2VydF9s
aW50KAotICAgICAgICAgICAgJ29wdGlvbmFsPGludD4gYTsnLAotICAgICAgICAgICAgIlVzZSAn
V1RGOjpPcHRpb25hbDw+JyBpbnN0ZWFkIG9mICdzdGQ6Om9wdGlvbmFsPD4nLiIKLSAgICAgICAg
ICAgICIgIFtydW50aW1lL3d0Zl9vcHRpb25hbF0gWzRdIiwKLSAgICAgICAgICAgICdmb28uY3Bw
JykKLQogICAgIGRlZiB0ZXN0X2xvY2tfZ3VhcmQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0
X2xpbnQoCiAgICAgICAgICAgICAnTG9ja2VyIGxvY2tlcihsb2NrKTsnLApkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
Q01ha2VMaXN0cy50eHQKaW5kZXggZGI0OGI5NGIyMDdmMWMwZmJlZDA5ODgzMjBmNzBiNjlmZDI0
M2UwMi4uYTAzMjk0YjViMDE1ZTYxZjEwY2RlNWFiNDllZTRjYzI4ZjgyY2ZiNSAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dAorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL0NNYWtlTGlzdHMudHh0CkBAIC02Niw3ICs2Niw2IEBAIHNldChUZXN0V1RGX1NPVVJD
RVMKICAgICBUZXN0cy9XVEYvTmFrZWRQdHIuY3BwCiAgICAgVGVzdHMvV1RGL05ldmVyRGVzdHJv
eWVkLmNwcAogICAgIFRlc3RzL1dURi9PcHRpb25TZXQuY3BwCi0gICAgVGVzdHMvV1RGL09wdGlv
bmFsLmNwcAogICAgIFRlc3RzL1dURi9QYWNrZWQuY3BwCiAgICAgVGVzdHMvV1RGL1BhY2tlZFJl
Zi5jcHAKICAgICBUZXN0cy9XVEYvUGFja2VkUmVmUHRyLmNwcApkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCBjODdjMGYxODYwNzkyY2NiNmE4ZGI0MDcwYjMyMDEyYTI1Yjk2ZTNiLi44OWNhYTg3
ODc4YWZjNmM1ZDk3M2RlOThiMzhhOTJiNTA0NzM2NzkwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtNjEyLDcgKzYxMiw2IEBACiAJCTdDODNERUYxMUQwQTU5MEMwMEZFQkNGMyAvKiBNZWRp
YVRpbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Q0Q1NDk3QjMxNTg1N0YwQzAwQjVCQzMwIC8qIE1lZGlhVGltZS5jcHAgKi87IH07CiAJCTdDODNE
RUY2MUQwQTU5MEMwMEZFQkNGMyAvKiBNZXRhQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzZDNENFMTQxMDM0QUQwMDVCN0YwQyAv
KiBNZXRhQWxsb2NhdG9yLmNwcCAqLzsgfTsKIAkJN0M4M0RFRkUxRDBBNTkwQzAwRkVCQ0YzIC8q
IE5ha2VkUHRyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFQjZGNzRFMUIyQkE0NEUwMDlFNDkyMiAvKiBOYWtlZFB0ci5jcHAgKi87IH07Ci0JCTdD
ODNERjAxMUQwQTU5MEMwMEZFQkNGMyAvKiBPcHRpb25hbC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUZERTY1NDE5NTNCMkMwMDBDNDhGRkEgLyog
T3B0aW9uYWwuY3BwICovOyB9OwogCQk3QzgzREYwMjFEMEE1OTBDMDBGRUJDRjMgLyogT1NPYmpl
Y3RQdHIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0NCQkEwNzYxOUJCOEE5MTAwQkJGMDI1IC8qIE9TT2JqZWN0UHRyLmNwcCAqLzsgfTsKIAkJN0M4
M0RGMDUxRDBBNTkwQzAwRkVCQ0YzIC8qIFJ1bkxvb3AuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRDOUFCQzcxQjNEQjE3MTAwNDBBOTg3IC8qIFJ1
bkxvb3AuY3BwICovOyB9OwogCQk3QzgzREYxMjFEMEE1OTBDMDBGRUJDRjMgLyogU2NvcGVkTGFt
YmRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERD
NjlBQTYyMUNGNzdDNjUwMEM2MjcyRiAvKiBTY29wZWRMYW1iZGEuY3BwICovOyBzZXR0aW5ncyA9
IHtDT01QSUxFUl9GTEFHUyA9ICItZm5vLWVsaWRlLWNvbnN0cnVjdG9ycyI7IH07IH07CkBAIC0x
ODU2LDcgKzE4NTUsNiBAQAogCQkxQUVERTIyNDEzRTVFN0EwMDBFNjJGRTggLyogSW5qZWN0ZWRC
dW5kbGVDb250cm9sbGVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxQUVGOTk0ODE3QTA5RjUzMDA5OThFRjAgLyogR2V0UElEQWZ0ZXJBYm9ydGVk
UHJvY2Vzc0xhdW5jaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBH
ZXRQSURBZnRlckFib3J0ZWRQcm9jZXNzTGF1bmNoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUFGN0IyMUQxRDZDRDEyRTAwOEMxMjZDIC8qIEVudW1UcmFpdHMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRW51bVRyYWl0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTFBRkRFNjU0MTk1M0IyQzAwMEM0OEZGQSAvKiBPcHRpb25hbC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRpb25hbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFDMjRERUVDMjYzMDAxREUwMDQ1MEQwNyAvKiBUZXh0U3R5bGVGb250U2l6
ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRleHRTdHlsZUZvbnRTaXplLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxQzJCODE3RTFDODkxRTQyMDBBNTUyOUYgLyogQ2FuY2Vs
Rm9udFN1YnJlc291cmNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gQ2FuY2VsRm9udFN1YnJlc291cmNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxQzJCODE4MTFDODkxRUZBMDBBNTUyOUYgLyogQ2FuY2VsRm9udFN1YnJlc291cmNlUGx1Z0lu
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ2FuY2VsRm9udFN1
YnJlc291cmNlUGx1Z0luLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDQ1MSw3
ICs0NDQ5LDYgQEAKIAkJCQlGRUI2Rjc0RTFCMkJBNDRFMDA5RTQ5MjIgLyogTmFrZWRQdHIuY3Bw
ICovLAogCQkJCUE1N0Q1NEYyMUYzMzhDMzYwMEE5N0FBNyAvKiBOZXZlckRlc3Ryb3llZC5jcHAg
Ki8sCiAJCQkJQ0Q0OEE4NzIyNEM4QTY2RjAwRjU4MDBDIC8qIE9ic2VydmVyLmNwcCAqLywKLQkJ
CQkxQUZERTY1NDE5NTNCMkMwMDBDNDhGRkEgLyogT3B0aW9uYWwuY3BwICovLAogCQkJCUNFNTBE
OEM4MUM4NjY1Q0UwMDcyRUE1QSAvKiBPcHRpb25TZXQuY3BwICovLAogCQkJCUUzMkI1NDkxMjI4
MTBBQzAwMDhBRDcwMiAvKiBQYWNrZWQuY3BwICovLAogCQkJCUUzOEQ2NUM4MjNBNDVGQTkwMDYz
RDY5QSAvKiBQYWNrZWRSZWYuY3BwICovLApAQCAtNTIwNiw3ICs1MjAzLDYgQEAKIAkJCQk3Qzgz
REVGRTFEMEE1OTBDMDBGRUJDRjMgLyogTmFrZWRQdHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTU3RDU0RjMxRjMzOEMzNjAwQTk3QUE3IC8qIE5ldmVyRGVzdHJveWVkLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUNENDhBODczMjRDOEE2NkYwMEY1ODAwQyAvKiBPYnNlcnZlci5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQk3QzgzREYwMTFEMEE1OTBDMDBGRUJDRjMgLyogT3B0aW9uYWwuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUE3N0JBQTMxRDlBRkZGQzAwNUZDNTY4IC8qIE9wdGlvblNldC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYwMjFEMEE1OTBDMDBGRUJDRjMgLyogT1NPYmpl
Y3RQdHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTMyQjU0OTIyMjgxMEFDNDAwOEFENzAyIC8q
IFBhY2tlZC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL09wdGlvbmFsLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L09wdGlvbmFsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjcyNjAwNGY4NGU2
MDNkMDFiMWFhMGQ2ZjZlZDgwYWU3NjRlZjMwMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9PcHRpb25h
bC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotCi1uYW1lc3BhY2Ug
VGVzdFdlYktpdEFQSSB7Ci0KLVRFU1QoV1RGX09wdGlvbmFsLCBEaXNlbmdhZ2VkKQotewotICAg
IHsKLSAgICAgICAgT3B0aW9uYWw8aW50PiBvcHRpb25hbDsKLQotICAgICAgICBFWFBFQ1RfRkFM
U0Uoc3RhdGljX2Nhc3Q8Ym9vbD4ob3B0aW9uYWwpKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAg
IE9wdGlvbmFsPGludD4gb3B0aW9uYWwgeyBXVEY6Om51bGxvcHQgfTsKLQotICAgICAgICBFWFBF
Q1RfRkFMU0Uoc3RhdGljX2Nhc3Q8Ym9vbD4ob3B0aW9uYWwpKTsKLSAgICB9Ci19Ci0KLVRFU1Qo
V1RGX09wdGlvbmFsLCBFbmdhZ2VkKQotewotICAgIE9wdGlvbmFsPGludD4gb3B0aW9uYWwgeyAx
MCB9OwotCi0gICAgRVhQRUNUX1RSVUUoc3RhdGljX2Nhc3Q8Ym9vbD4ob3B0aW9uYWwpKTsKLSAg
ICBFWFBFQ1RfRVEoMTAsIG9wdGlvbmFsLnZhbHVlKCkpOwotfQotCi1URVNUKFdURl9PcHRpb25h
bCwgRGVzdHJ1Y3RvcikKLXsKLSAgICBzdGF0aWMgYm9vbCBkaWRDYWxsRGVzdHJ1Y3RvciA9IGZh
bHNlOwotICAgIHN0cnVjdCBBIHsKLSAgICAgICAgfkEoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBFWFBFQ1RfRkFMU0UoZGlkQ2FsbERlc3RydWN0b3IpOwotICAgICAgICAgICAgZGlkQ2FsbERl
c3RydWN0b3IgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHsKLSAgICAgICAgT3B0
aW9uYWw8QT4gb3B0aW9uYWwgeyBzdGQ6OmluX3BsYWNlIH07Ci0KLSAgICAgICAgRVhQRUNUX1RS
VUUoc3RhdGljX2Nhc3Q8Ym9vbD4ob3B0aW9uYWwpKTsKLSAgICB9Ci0KLSAgICBFWFBFQ1RfVFJV
RShkaWRDYWxsRGVzdHJ1Y3Rvcik7Ci19Ci0KLVRFU1QoV1RGX09wdGlvbmFsLCBDYWxsYmFjaykK
LXsKLSAgICBib29sIGNhbGxlZCA9IGZhbHNlOwotICAgIE9wdGlvbmFsPGludD4gYTsKLSAgICBp
bnQgcmVzdWx0ID0gdmFsdWVPckNvbXB1dGUoYSwgWyZdIHsKLSAgICAgICAgY2FsbGVkID0gdHJ1
ZTsKLSAgICAgICAgcmV0dXJuIDMwMDsKLSAgICB9KTsKLSAgICBFWFBFQ1RfVFJVRShjYWxsZWQp
OwotICAgIEVYUEVDVF9FUShyZXN1bHQsIDMwMCk7Ci0KLSAgICBhID0gMjUwOwotICAgIGNhbGxl
ZCA9IGZhbHNlOwotICAgIHJlc3VsdCA9IHZhbHVlT3JDb21wdXRlKGEsIFsmXSB7Ci0gICAgICAg
IGNhbGxlZCA9IHRydWU7Ci0gICAgICAgIHJldHVybiAzMDA7Ci0gICAgfSk7Ci0gICAgRVhQRUNU
X0ZBTFNFKGNhbGxlZCk7Ci0gICAgRVhQRUNUX0VRKHJlc3VsdCwgMjUwKTsKLX0KLQotVEVTVChX
VEZfT3B0aW9uYWwsIEVxdWFsaXR5KQotewotICAgIE9wdGlvbmFsPGludD4gdW5lbmdhZ2VkMTsK
LSAgICBPcHRpb25hbDxpbnQ+IHVuZW5nYWdlZDI7Ci0KLSAgICBPcHRpb25hbDxpbnQ+IGVuZ2Fn
ZWQxIHsgMSB9OwotICAgIE9wdGlvbmFsPGludD4gZW5nYWdlZDIgeyAyIH07Ci0gICAgT3B0aW9u
YWw8aW50PiBlbmdhZ2VkeDIgeyAyIH07Ci0KLSAgICBFWFBFQ1RfVFJVRSh1bmVuZ2FnZWQxID09
IHVuZW5nYWdlZDIpOwotICAgIEVYUEVDVF9GQUxTRShlbmdhZ2VkMSA9PSBlbmdhZ2VkMik7Ci0g
ICAgRVhQRUNUX0ZBTFNFKGVuZ2FnZWQxID09IHVuZW5nYWdlZDEpOwotICAgIEVYUEVDVF9UUlVF
KGVuZ2FnZWQyID09IGVuZ2FnZWR4Mik7Ci0KLSAgICBFWFBFQ1RfVFJVRSh1bmVuZ2FnZWQxID09
IFdURjo6bnVsbG9wdCk7Ci0gICAgRVhQRUNUX0ZBTFNFKGVuZ2FnZWQxID09IFdURjo6bnVsbG9w
dCk7Ci0gICAgRVhQRUNUX1RSVUUoV1RGOjpudWxsb3B0ID09IHVuZW5nYWdlZDEpOwotICAgIEVY
UEVDVF9GQUxTRShXVEY6Om51bGxvcHQgPT0gZW5nYWdlZDEpOwotCi0gICAgRVhQRUNUX1RSVUUo
ZW5nYWdlZDEgPT0gMSk7Ci0gICAgRVhQRUNUX1RSVUUoMSA9PSBlbmdhZ2VkMSk7Ci0gICAgRVhQ
RUNUX0ZBTFNFKHVuZW5nYWdlZDEgPT0gMSk7Ci0gICAgRVhQRUNUX0ZBTFNFKDEgPT0gdW5lbmdh
Z2VkMSk7Ci19Ci0KLVRFU1QoV1RGX09wdGlvbmFsLCBJbmVxdWFsaXR5KQotewotICAgIE9wdGlv
bmFsPGludD4gdW5lbmdhZ2VkMTsKLSAgICBPcHRpb25hbDxpbnQ+IHVuZW5nYWdlZDI7Ci0KLSAg
ICBPcHRpb25hbDxpbnQ+IGVuZ2FnZWQxIHsgMSB9OwotICAgIE9wdGlvbmFsPGludD4gZW5nYWdl
ZDIgeyAyIH07Ci0gICAgT3B0aW9uYWw8aW50PiBlbmdhZ2VkeDIgeyAyIH07Ci0KLSAgICBFWFBF
Q1RfRkFMU0UodW5lbmdhZ2VkMSAhPSB1bmVuZ2FnZWQyKTsKLSAgICBFWFBFQ1RfVFJVRShlbmdh
Z2VkMSAhPSBlbmdhZ2VkMik7Ci0gICAgRVhQRUNUX1RSVUUoZW5nYWdlZDEgIT0gdW5lbmdhZ2Vk
MSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGVuZ2FnZWQyICE9IGVuZ2FnZWR4Mik7Ci0KLSAgICBFWFBF
Q1RfRkFMU0UodW5lbmdhZ2VkMSAhPSBXVEY6Om51bGxvcHQpOwotICAgIEVYUEVDVF9UUlVFKGVu
Z2FnZWQxICE9IFdURjo6bnVsbG9wdCk7Ci0gICAgRVhQRUNUX0ZBTFNFKFdURjo6bnVsbG9wdCAh
PSB1bmVuZ2FnZWQxKTsKLSAgICBFWFBFQ1RfVFJVRShXVEY6Om51bGxvcHQgIT0gZW5nYWdlZDEp
OwotCi0gICAgRVhQRUNUX0ZBTFNFKGVuZ2FnZWQxICE9IDEpOwotICAgIEVYUEVDVF9UUlVFKGVu
Z2FnZWQxICE9IDIpOwotICAgIEVYUEVDVF9GQUxTRSgxICE9IGVuZ2FnZWQxKTsKLSAgICBFWFBF
Q1RfVFJVRSgyICE9IGVuZ2FnZWQxKTsKLQotICAgIEVYUEVDVF9UUlVFKHVuZW5nYWdlZDEgIT0g
MSk7Ci0gICAgRVhQRUNUX1RSVUUoMSAhPSB1bmVuZ2FnZWQxKTsKLX0KLQotVEVTVChXVEZfT3B0
aW9uYWwsIE1vdmVTZW1hbnRpY3NDb25zdHJ1Y3RvcikKLXsKLSAgICB7Ci0gICAgICAgIE9wdGlv
bmFsPGludD4gdW5lbmdhZ2VkMSB7IH07Ci0gICAgICAgIEVYUEVDVF9GQUxTRSghIXVuZW5nYWdl
ZDEpOwotCi0gICAgICAgIE9wdGlvbmFsPGludD4gdW5lbmdhZ2VkMihzdGQ6Om1vdmUodW5lbmdh
Z2VkMSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoISF1bmVuZ2FnZWQxKTsKLSAgICAgICAgRVhQ
RUNUX0ZBTFNFKCEhdW5lbmdhZ2VkMik7Ci0gICAgfQotCi0gICAgewotICAgICAgICBPcHRpb25h
bDxpbnQ+IGVuZ2FnZWRUb1VuZW5nYWdlZCB7IDIgfTsKLSAgICAgICAgRVhQRUNUX1RSVUUoISFl
bmdhZ2VkVG9VbmVuZ2FnZWQpOwotICAgICAgICBFWFBFQ1RfRVEoMiwgZW5nYWdlZFRvVW5lbmdh
Z2VkLnZhbHVlKCkpOwotCi0gICAgICAgIE9wdGlvbmFsPGludD4gZW5nYWdlZChzdGQ6Om1vdmUo
ZW5nYWdlZFRvVW5lbmdhZ2VkKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRSghIWVuZ2FnZWRUb1Vu
ZW5nYWdlZCk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKCEhZW5nYWdlZCk7Ci0gICAgICAgIEVYUEVD
VF9FUSgyLCBlbmdhZ2VkLnZhbHVlKCkpOwotICAgIH0KLX0KLQotVEVTVChXVEZfT3B0aW9uYWws
IE1vdmVTZW1hbnRpY3NBc3NpZ25tZW50KQotewotICAgIHsKLSAgICAgICAgT3B0aW9uYWw8aW50
PiB1bmVuZ2FnZWQxIHsgfTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKCEhdW5lbmdhZ2VkMSk7Ci0K
LSAgICAgICAgT3B0aW9uYWw8aW50PiB1bmVuZ2FnZWQyOwotICAgICAgICBFWFBFQ1RfRkFMU0Uo
ISF1bmVuZ2FnZWQyKTsKLQotICAgICAgICB1bmVuZ2FnZWQyID0gc3RkOjptb3ZlKHVuZW5nYWdl
ZDEpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoISF1bmVuZ2FnZWQxKTsKLSAgICAgICAgRVhQRUNU
X0ZBTFNFKCEhdW5lbmdhZ2VkMik7Ci0gICAgfQotCi0gICAgewotICAgICAgICBPcHRpb25hbDxp
bnQ+IGVuZ2FnZWRUb1VuZW5nYWdlZCB7IDMgfTsKLSAgICAgICAgRVhQRUNUX1RSVUUoISFlbmdh
Z2VkVG9VbmVuZ2FnZWQpOwotICAgICAgICBFWFBFQ1RfRVEoMywgZW5nYWdlZFRvVW5lbmdhZ2Vk
LnZhbHVlKCkpOwotCi0gICAgICAgIGVuZ2FnZWRUb1VuZW5nYWdlZCA9IHN0ZDo6bW92ZShXVEY6
Om51bGxvcHQpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoISFlbmdhZ2VkVG9VbmVuZ2FnZWQpOwot
ICAgIH0KLQotICAgIHsKLSAgICAgICAgT3B0aW9uYWw8aW50PiBlbmdhZ2VkVG9VbmVuZ2FnZWQg
eyA0IH07Ci0gICAgICAgIEVYUEVDVF9UUlVFKCEhZW5nYWdlZFRvVW5lbmdhZ2VkKTsKLSAgICAg
ICAgRVhQRUNUX0VRKDQsIGVuZ2FnZWRUb1VuZW5nYWdlZC52YWx1ZSgpKTsKLQotICAgICAgICBP
cHRpb25hbDxpbnQ+IHVuZW5nYWdlZFRvRW5nYWdlZDsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKCEh
dW5lbmdhZ2VkVG9FbmdhZ2VkKTsKLQotICAgICAgICB1bmVuZ2FnZWRUb0VuZ2FnZWQgPSBzdGQ6
Om1vdmUoZW5nYWdlZFRvVW5lbmdhZ2VkKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKCEhZW5nYWdl
ZFRvVW5lbmdhZ2VkKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoISF1bmVuZ2FnZWRUb0VuZ2FnZWQp
OwotICAgICAgICBFWFBFQ1RfRVEoNCwgdW5lbmdhZ2VkVG9FbmdhZ2VkLnZhbHVlKCkpOwotICAg
IH0KLQotICAgIHsKLSAgICAgICAgT3B0aW9uYWw8aW50PiBlbmdhZ2VkVG9VbmVuZ2FnZWQgeyA1
IH07Ci0gICAgICAgIEVYUEVDVF9UUlVFKCEhZW5nYWdlZFRvVW5lbmdhZ2VkKTsKLSAgICAgICAg
RVhQRUNUX0VRKDUsIGVuZ2FnZWRUb1VuZW5nYWdlZC52YWx1ZSgpKTsKLQotICAgICAgICBPcHRp
b25hbDxpbnQ+IHVuZW5nYWdlZDsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKCEhdW5lbmdhZ2VkKTsK
LQotICAgICAgICBlbmdhZ2VkVG9VbmVuZ2FnZWQgPSBzdGQ6Om1vdmUodW5lbmdhZ2VkKTsKLSAg
ICAgICAgRVhQRUNUX0ZBTFNFKCEhZW5nYWdlZFRvVW5lbmdhZ2VkKTsKLSAgICAgICAgRVhQRUNU
X0ZBTFNFKCEhdW5lbmdhZ2VkKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIE9wdGlvbmFsPGlu
dD4gZW5nYWdlZFRvVW5lbmdhZ2VkIHsgNiB9OwotICAgICAgICBFWFBFQ1RfVFJVRSghIWVuZ2Fn
ZWRUb1VuZW5nYWdlZCk7Ci0gICAgICAgIEVYUEVDVF9FUSg2LCBlbmdhZ2VkVG9VbmVuZ2FnZWQu
dmFsdWUoKSk7Ci0KLSAgICAgICAgT3B0aW9uYWw8aW50PiBlbmdhZ2VkVG9FbmdhZ2VkIHsgNyB9
OwotICAgICAgICBFWFBFQ1RfVFJVRSghIWVuZ2FnZWRUb0VuZ2FnZWQpOwotICAgICAgICBFWFBF
Q1RfRVEoNywgZW5nYWdlZFRvRW5nYWdlZC52YWx1ZSgpKTsKLQotICAgICAgICBlbmdhZ2VkVG9F
bmdhZ2VkID0gc3RkOjptb3ZlKGVuZ2FnZWRUb1VuZW5nYWdlZCk7Ci0gICAgICAgIEVYUEVDVF9G
QUxTRSghIWVuZ2FnZWRUb1VuZW5nYWdlZCk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKCEhZW5nYWdl
ZFRvRW5nYWdlZCk7Ci0gICAgICAgIEVYUEVDVF9FUSg2LCBlbmdhZ2VkVG9FbmdhZ2VkLnZhbHVl
KCkpOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvY2YvUmV0YWluUHRyLmNwcCBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL2NmL1JldGFpblB0ci5jcHAKaW5kZXggYzljZmVmMTlj
M2I3YzVlMTY4MGU2YjgzZjIzOWVlNjhjOGE2NGI3MS4uZTdiMzExYjMxY2U5ZWMzZjMxYmUwZDE5
ZjY5NjI2NjZhMjZjZWE0MSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvY2YvUmV0YWluUHRyLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9j
Zi9SZXRhaW5QdHIuY3BwCkBAIC0xNjEsMTEgKzE2MSwxMiBAQCBURVNUKFJldGFpblB0ciwgT3B0
aW9uYWxSZXRhaW5QdHJDRikKICAgICBFWFBFQ1RfRVEob3B0aW9uYWxPYmplY3QyLnZhbHVlKCks
IG9iamVjdDIpOwogCiAgICAgLy8gVGVzdCBtb3ZlIGZyb20gT3B0aW9uYWw8UmV0YWluUHRyPENG
TnVtYmVyUmVmPj4uCisgICAgRVhQRUNUX0VRKDMsIENGR2V0UmV0YWluQ291bnQob2JqZWN0Mikp
OwogICAgIG9wdGlvbmFsT2JqZWN0MSA9IFdURk1vdmUob3B0aW9uYWxPYmplY3QyKTsKICAgICBF
WFBFQ1RfVFJVRShvcHRpb25hbE9iamVjdDEudmFsdWUoKSk7CiAgICAgRVhQRUNUX1RSVUUob3B0
aW9uYWxPYmplY3QxLnZhbHVlKCkuZ2V0KCkpOwogICAgIEVYUEVDVF9FUShvcHRpb25hbE9iamVj
dDEudmFsdWUoKSwgb2JqZWN0Mik7Ci0gICAgRVhQRUNUX0ZBTFNFKG9wdGlvbmFsT2JqZWN0Mik7
CisgICAgRVhQRUNUX0VRKDIsIENGR2V0UmV0YWluQ291bnQob2JqZWN0MikpOwogfQogCiBURVNU
KFJldGFpblB0ciwgUmV0YWluUHRyQ0YpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9ucy9SZXRhaW5QdHIubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9ucy9SZXRhaW5QdHIubW0KaW5kZXggZTliYzRlNmNkZDhlYjhmZjc1YWE0ZGUyZDhjNjMyNmM4
Yjc3YzA3Ny4uMWI3YWU3ZDM4MjBhYTI5YjY5YzU2MjQ3MzY3YTI3OGFmZDkyNjA5MyAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvbnMvUmV0YWluUHRyLm1tCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL25zL1JldGFpblB0ci5tbQpAQCAtMjQ2LDEx
ICsyNDYsMTIgQEAgVEVTVChSZXRhaW5QdHIsIE9wdGlvbmFsUmV0YWluUHRyTlMpCiAgICAgRVhQ
RUNUX0VRKG9wdGlvbmFsT2JqZWN0Mi52YWx1ZSgpLCBvYmplY3QyKTsKIAogICAgIC8vIFRlc3Qg
bW92ZSBmcm9tIE9wdGlvbmFsPFJldGFpblB0cjxOU09iamVjdD4+LgorICAgIEVYUEVDVF9FUSgz
LCBDRkdldFJldGFpbkNvdW50KG9iamVjdDIpKTsKICAgICBvcHRpb25hbE9iamVjdDEgPSBXVEZN
b3ZlKG9wdGlvbmFsT2JqZWN0Mik7CiAgICAgRVhQRUNUX1RSVUUob3B0aW9uYWxPYmplY3QxLnZh
bHVlKCkpOwogICAgIEVYUEVDVF9UUlVFKG9wdGlvbmFsT2JqZWN0MS52YWx1ZSgpLmdldCgpKTsK
ICAgICBFWFBFQ1RfRVEob3B0aW9uYWxPYmplY3QxLnZhbHVlKCksIG9iamVjdDIpOwotICAgIEVY
UEVDVF9GQUxTRShvcHRpb25hbE9iamVjdDIpOworICAgIEVYUEVDVF9FUSgyLCBDRkdldFJldGFp
bkNvdW50KG9iamVjdDIpKTsKIH0KIAogVEVTVChSZXRhaW5QdHIsIFJldGFpblB0ck5TKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429657</attachid>
            <date>2021-05-25 09:16:23 -0700</date>
            <delta_ts>2021-05-25 12:27:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211674-20210525091622.patch</filename>
            <type>text/plain</type>
            <size>85113</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3OTkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NGRiZWU5MGNlMDc0YzFhYTBkY2VlYTc3NDIzNjIzY2NlMTg0YzA2Li45MzM4NTM4Yzg0NjI5YjQ0
NTZiNzdiZWRkMzE3NzE4YmVkNTcwN2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NSBAQAorMjAyMS0wNS0yNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgU3dpdGNoIGZyb20gV1RGOjpPcHRpb25hbCB0byBzdGQ6Om9wdGlvbmFsCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTE2NzQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHJ1bnRpbWUvSW50
bENvbGxhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yOjppbml0aWFsaXplQ29s
bGF0b3IpOiBVc2UgSlNPYmplY3QqIGluc3RlYWQgb2YKKyAgICAgICAgT3B0aW9uYWw8SlNPYmpl
Y3QmPi4KKyAgICAgICAgKiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHA6CisgICAgICAg
IChKU0M6OnRvRGF0ZVRpbWVPcHRpb25zQW55RGF0ZSk6IERpdHRvLgorICAgICAgICAoSlNDOjpJ
bnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVGltZUZvcm1hdCk6IERpdHRvLgorICAg
ICAgICAqIHJ1bnRpbWUvSW50bERpc3BsYXlOYW1lcy5jcHA6CisgICAgICAgIChKU0M6OkludGxE
aXNwbGF5TmFtZXM6OmluaXRpYWxpemVEaXNwbGF5TmFtZXMpOiBEaXR0by4KKyAgICAgICAgKiBy
dW50aW1lL0ludGxMaXN0Rm9ybWF0LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bExpc3RGb3JtYXQ6
OmluaXRpYWxpemVMaXN0Rm9ybWF0KTogRGl0dG8uCisgICAgICAgICogcnVudGltZS9JbnRsTG9j
YWxlLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bExvY2FsZTo6aW5pdGlhbGl6ZUxvY2FsZSk6IERp
dHRvLgorICAgICAgICAqIHJ1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHA6CisgICAgICAgIChK
U0M6OkludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGb3JtYXQpOiBEaXR0by4KKyAg
ICAgICAgKiBydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaDogRGl0dG8uCisgICAgICAgICogcnVu
dGltZS9JbnRsTnVtYmVyRm9ybWF0SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpzZXROdW1iZXJG
b3JtYXREaWdpdE9wdGlvbnMpOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1lL0ludGxPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDOjppbnRsQm9vbGVhbk9wdGlvbik6IERpdHRvLgorICAgICAgICAo
SlNDOjppbnRsU3RyaW5nT3B0aW9uKTogRGl0dG8uCisgICAgICAgIChKU0M6OmludGxOdW1iZXJP
cHRpb24pOiBEaXR0by4KKyAgICAgICAgKEpTQzo6c3VwcG9ydGVkTG9jYWxlcyk6IERpdHRvLgor
ICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5oOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1l
L0ludGxPYmplY3RJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OmludGxPcHRpb24pOiBEaXR0by4K
KyAgICAgICAgKEpTQzo6aW50bEdldE9wdGlvbnNPYmplY3QpOiBEaXR0by4KKyAgICAgICAgKEpT
Qzo6aW50bENvZXJjZU9wdGlvbnNUb09iamVjdCk6IERpdHRvLgorICAgICAgICAqIHJ1bnRpbWUv
SW50bFBsdXJhbFJ1bGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bFBsdXJhbFJ1bGVzOjppbml0
aWFsaXplUGx1cmFsUnVsZXMpOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1lL0ludGxQbHVyYWxS
dWxlcy5oOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQu
Y3BwOgorICAgICAgICAoSlNDOjpJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojppbml0aWFsaXplUmVs
YXRpdmVUaW1lRm9ybWF0KTogRGl0dG8uCisgICAgICAgICogcnVudGltZS9JbnRsU2VnbWVudGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bFNlZ21lbnRlcjo6aW5pdGlhbGl6ZVNlZ21lbnRlcik6
IERpdHRvLgorCiAyMDIxLTA1LTI0ICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5j
b20+CiAKICAgICAgICAgV2hlbiBydW5uaW5nIHdpdGggLS1yZXBvcnRUb3RhbFBoYXNlVGltZXM9
MSwgd2Ugc2hvdWxkIGFsc28gbG9nIHRoZSBtYXggdGltZSBpbiBhIHBoYXNlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDkwNDYx
MTUwMDk0NGRlZTc4MjUxOTVlY2YwMGZkMTBjZTY2ZDQwYTEuLmI2NWQ0MmIxN2I5ZTI2NDE1Yjk4
ZWI3YzVlOTU2MThiNjFlZjMwMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMjEtMDUtMjQgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFN3aXRjaCBmcm9tIFdURjo6
T3B0aW9uYWwgdG8gc3RkOjpvcHRpb25hbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjExNjc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiB3dGYvRm9yd2FyZC5oOiBSZW1vdmUgT3B0aW9uYWwgZm9yd2Fy
ZCBkZWNsYXJhdGlvbi4KKyAgICAgICAgQWxzbyBpbmNsdWRlIE9wdGlvbmFsLmgsIGp1c3QgZm9y
IG5vdy4gTmVlZCB0byByZW1vdmUgdGhpcyBvbmNlCisgICAgICAgIHdlIGRvIHRoZSBnbG9iYWwg
cmVuYW1lLgorCisgICAgICAgICogd3RmL09wdGlvbmFsLmg6IFJlcGxhY2VkIHRoZSBlbnRpcmUg
V1RGOjpPcHRpb25hbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICB3aXRoIGEgV1RGOjpPcHRpb25h
bCAidXNpbmciIHRoYXQgbWFrZXMgaXQgYSBzeW5vbnltIGZvciBzdGQ6Om9wdGlvbmFsLgorICAg
ICAgICBXVEY6Om51bGxvcHQgYmVpbmcgYSBzeW5vbnltIGZvciBzdGQ6Om51bGxvcHQgYW5kIFdU
Rjo6bnVsbG9wdF90CisgICAgICAgIGJlaW5nIGEgc3lub255bSBmb3Igc3RkOjpudWxsb3B0X3Qu
IEFsc28gaW5jbHVkZWQgZnVuY3Rpb25zIHNvCisgICAgICAgIHRoYXQgV1RGOjptYWtlT3B0aW9u
YWwgY2FsbHMgc3RkOjptYWtlX29wdGlvbmFsIGFuZCBrZXB0IHRoZQorICAgICAgICBXVEYgZXh0
ZW5zaW9uIG5hbWVkIHZhbHVlT3JDb21wdXRlLiBOZWVkIHRvIHJlbW92ZSB0aGVzZSBvbmNlIHdl
CisgICAgICAgIGRvIHRoZSBnbG9iYWwgcmVuYW1lLCBhbmQgbGlrZWx5IGp1c3QgZ2V0IHJpZCBv
ZiB2YWx1ZU9yQ29tcHV0ZSwgYW5kCisgICAgICAgIHRoZW4gZGVsZXRlIHRoaXMgZW50aXJlIGhl
YWRlci4KKworICAgICAgICAqIHd0Zi9TZWNvbmRzLmg6IEFkZGVkIGFuIGluY2x1ZGUgb2YgRmFz
dE1hbGxvYy5oLCBzaW5jZSBpdCdzIG5vCisgICAgICAgIGxvbmdlciBwdWxsZWQgaW4gYmVjYXVz
ZSBvZiBpbmNsdWRpbmcgT3B0aW9uYWwuaC4KKworICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZS9Q
ZXJzaXN0ZW50Q29kZXIuaDogVXNlIEZvcndhcmQuaCBmb3Igbm93IGluc3RlYWQgb2YKKyAgICAg
ICAgZm9yd2FyZC1kZWNsYXJpbmcgV1RGOjpvcHRpb25hbC4KKwogMjAyMS0wNS0yNCAgRGFyaW4g
QWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIFN0cmluZ0J1aWxkZXI6
OmFwcGVuZExpdGVyYWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2ODlmZmUwZjBiMDllM2RjYTI4YzM2ZDFlNzBi
MGJiZDA4NzIwMzAzLi4zZTM2NzlhOGQ4ZWYyMzU0NmQ3OGY3OWYwY2U0ZjVlNTgxOTQ4NWIxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMjEtMDUtMjQgIERhcmluIEFkbGVyICA8ZGFy
aW5AYXBwbGUuY29tPgorCisgICAgICAgIFN3aXRjaCBmcm9tIFdURjo6T3B0aW9uYWwgdG8gc3Rk
OjpvcHRpb25hbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjExNjc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9WUDlVdGlsaXRpZXMuaDogVHdlYWtlZCBjb2Rpbmcgc3R5
bGUgYSBiaXQuCisgICAgICAgIEFkZGVkIG1pc3Npbmcgb3BlcmF0b3IhPSBiZWNhdXNlIHN0ZDo6
b3B0aW9uYWwncyBvcGVyYXRvciE9IHJlbGllcworICAgICAgICBvbiB0aGF0LCB3aGlsZSBXVEY6
Ok9wdGlvbmFsJ3Mgb3BlcmF0b3IhPSByZWxpZWQgb24gb3BlcmF0b3I9PS4KKworICAgICAgICAq
IHBsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9HU3RyZWFtZXJWaWRlb0VuY29kZXIuY3Bw
OgorICAgICAgICAoRW5jb2RlcnM6OmRlZmluaXRpb24pOiBVc2UgYSBwb2ludGVyIGluc3RlYWQg
b2YgT3B0aW9uYWw8Jj4uCisKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNldFZQOVNjcmVlblNpemVBbmRTY2FsZUZvclRlc3Rp
bmcpOiBVc2UgYQorICAgICAgICBmb3JtIG9mIGNvbnN0cnVjdGlvbiBmb3IgU2NyZWVuRGF0YU92
ZXJyaWRlcyB0aGF0IHdvcmtzIHdpdGggYm90aAorICAgICAgICBXVEY6Ok9wdGlvbmFsIGFuZCBz
dGQ6Om9wdGlvbmFsLiBTb21ldGhpbmcgYWJvdXQgd2F5IHRoZSBvbGQgY29kZQorICAgICAgICB1
c2VkIFdURjo6bWFrZU9wdGlvbmFsIHdhcyBub3QgY29tcGF0aWJsZSB3aXRoIHN0ZDo6bWFrZV9v
cHRpb25hbCwKKyAgICAgICAgYnV0IGl0IHdhcyBlYXN5IHRvIG1ha2UgaXQgbW9yZSBzdHJhaWdo
dGZvcndhcmQgYW5kIG5vdCBldmVuIGhhdmUKKyAgICAgICAgdG8gdXNlIGEgIm1ha2UiIGZ1bmN0
aW9uLgorCiAyMDIxLTA1LTI0ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAg
ICAgICBDb252ZXJ0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSBmcm9tIGFuIGVudW0gdG8gY2xhc3Mg
d3JhcHBpbmcgYSBwbGF0Zm9ybSBjb2xvciBzcGFjZSAoQ0dDb2xvclNwYWNlUmVmIGZvciBDRyBw
b3J0cywgZXRjLikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNzgwNDcyOGI1MjEzMDBiODQyYTdkNjJkYzZjYjRiNWZh
MDYyYjZjOS4uMTFkNDU4OTQ2ZTA2OGUxMjMxYzM2MDM5ZmJiODZkMmI1ODRiZWQ5MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyNiBAQAorMjAyMS0wNS0yNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgU3dpdGNoIGZyb20gV1RGOjpPcHRpb25hbCB0byBzdGQ6Om9wdGlv
bmFsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTE2
NzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBs
YXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmg6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI6
OmRlY29kZSk6IEFkZCBhIFdURk1vdmUuIFR1cm5zIG91dCB0aGlzIHdhcyBub3QgbmVlZGVkCisg
ICAgICAgIHRvIGdldCBjb21waWxpbmcgd2l0aCBzdGQ6Om9wdGlvbmFsLCBidXQgaXQncyBhIGdv
b2QgaWRlYSBmb3IgcGVyZm9ybWFuY2UuCisgICAgICAgIFRoaXMgaXMgb25lIG9mIHRob3NlIGNh
c2VzIHdoZXJlIGl0IGxvb2tzIGxpa2UgdGhlIHJldHVybiB2YWx1ZSBvcHRpbWl6YXRpb24KKyAg
ICAgICAgd291bGQgd29yaywgYnV0IGl0IGRvZXNuJ3QgYmVjYXVzZSB0aGUgcmV0dXJuIHZhbHVl
IGRvZXNuJ3QgZXhhY3RseSBtYXRjaAorICAgICAgICB0aGUgbG9jYWwgdmFyaWFibGUncyB0eXBl
LgorCisgICAgICAgICogU2hhcmVkL1RvdWNoQmFyTWVudURhdGEuaDogUmVtb3ZlIHNvbWUgb3Zl
cnplYWxvdXMgdXNlIG9mIGV4cGxpY2l0IHRoYXQKKyAgICAgICAgd2FzIHByZXZlbnRpbmcgc29t
ZSBmaWxlcyBmcm9tIGNvbXBpbGluZyB3aXRoIHRoZSBzdHJpY3RlciBzdGQ6Om9wdGlvbmFsCisg
ICAgICAgIGNvbnN0cnVjdG9yIHJ1bGVzLCB3aGlsZSBpdCBkaWQgbm90IHByZXZlbnQgY29tcGls
aW5nIHdpdGggV1RGOjpPcHRpb25hbC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9u
L1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlv
blNlc3Npb246OnN3aXRjaFRvQnJvd3NpbmdDb250ZXh0KTogUmVtb3ZlZCBhbiB1bnVzZWQKKyAg
ICAgICAgbGFtYmRhIGNhcHR1cmUgYW5kIGxvY2FsIHZhcmlhYmxlLiBOb3QgY2xlYXIgaG93IHRo
aXMgaXMgcmVsYXRlZCB0bworICAgICAgICBzdGQ6Om9wdGlvbmFsLCBidXQgc2hvd2VkIHVwIGFz
IGEgY29tcGlsZXIgd2FybmluZy4KKwogMjAyMS0wNS0yNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgogCiAgICAgICAgIFtHTElCXSBTdG9wIHVzaW5nIFVuY2hlY2tlZExvY2sgaW4g
SWNvbkRhdGFiYXNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsQ29sbGF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxh
dG9yLmNwcAppbmRleCBjODJmYTYwZWIwYzI2N2RhZTcwMTgzY2NjYWVjOGU5OWJmOTU0YTcyLi5i
Nzc2ZmIyOTNlMDU0ZTI0ZDU0NWIwM2ZmMDNkNjRhMGQwMDM4MjJkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAKQEAgLTE2NCw3ICsxNjQsNyBA
QCB2b2lkIEludGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNvbGxhdG9yKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgbG9jYQogICAgIGF1dG8gcmVxdWVzdGVkTG9jYWxlcyA9IGNh
bm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0LCBsb2NhbGVzKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCi0gICAgT3B0aW9uYWw8SlNPYmplY3QmPiBv
cHRpb25zID0gaW50bENvZXJjZU9wdGlvbnNUb09iamVjdChnbG9iYWxPYmplY3QsIG9wdGlvbnNW
YWx1ZSk7CisgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBpbnRsQ29lcmNlT3B0aW9uc1RvT2JqZWN0
KGdsb2JhbE9iamVjdCwgb3B0aW9uc1ZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOwogCiAgICAgbV91c2FnZSA9IGludGxPcHRpb248VXNhZ2U+KGdsb2JhbE9i
amVjdCwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+dXNhZ2UsIHsgeyAic29ydCJfcywgVXNh
Z2U6OlNvcnQgfSwgeyAic2VhcmNoIl9zLCBVc2FnZTo6U2VhcmNoIH0gfSwgInVzYWdlIG11c3Qg
YmUgZWl0aGVyIFwic29ydFwiIG9yIFwic2VhcmNoXCIiX3MsIFVzYWdlOjpTb3J0KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3Bw
CmluZGV4IGQ3OGNjMmVhZTIyMjU5NjY3YmU2ZGYwYzMyOGNiODI1NzEwYTg5YjguLjI4YmJmNmYz
ZWViMzEyMzZiNzgzZDQ2YTUxOGI5M2Q3MDBhODZjYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcApAQCAtMTkzLDcgKzE5
Myw3IEBAIFZlY3RvcjxTdHJpbmc+IEludGxEYXRlVGltZUZvcm1hdDo6bG9jYWxlRGF0YShjb25z
dCBTdHJpbmcmIGxvY2FsZSwgUmVsZXZhbnRFeHRlCiAgICAgcmV0dXJuIGtleUxvY2FsZURhdGE7
CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxKU09iamVjdCY+IHRvRGF0ZVRpbWVPcHRpb25zQW55RGF0
ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG9yaWdpbmFsT3B0aW9ucykK
K3N0YXRpYyBKU09iamVjdCogdG9EYXRlVGltZU9wdGlvbnNBbnlEYXRlKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgb3JpZ2luYWxPcHRpb25zKQogewogICAgIC8vIDEyLjEu
MSBUb0RhdGVUaW1lT3B0aW9ucyBhYnN0cmFjdCBvcGVyYXRpb24gKEVDTUEtNDAyIDIuMCkKICAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkBAIC0zMDcsNyArMzA3LDcgQEAgc3RhdGlj
IE9wdGlvbmFsPEpTT2JqZWN0Jj4gdG9EYXRlVGltZU9wdGlvbnNBbnlEYXRlKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QKICAgICAvLyBEZWZhdWx0cyBpcyBhbHdheXMgImRhdGUiLiBJZ25v
cmUgdGhpcyBicmFuY2guCiAKICAgICAvLyA5LiBSZXR1cm4gb3B0aW9ucy4KLSAgICByZXR1cm4g
Km9wdGlvbnM7CisgICAgcmV0dXJuIG9wdGlvbnM7CiB9CiAKIHZvaWQgSW50bERhdGVUaW1lRm9y
bWF0OjpzZXRGb3JtYXRzRnJvbVBhdHRlcm4oY29uc3QgU3RyaW5nVmlldyYgcGF0dGVybikKQEAg
LTUyNCw3ICs1MjQsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVU
aW1lRm9ybWF0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgVmVjdG9yPFN0cmlu
Zz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0
LCBsb2NhbGVzKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCi0g
ICAgT3B0aW9uYWw8SlNPYmplY3QmPiBvcHRpb25zID0gdG9EYXRlVGltZU9wdGlvbnNBbnlEYXRl
KGdsb2JhbE9iamVjdCwgb3JpZ2luYWxPcHRpb25zKTsKKyAgICBKU09iamVjdCogb3B0aW9ucyA9
IHRvRGF0ZVRpbWVPcHRpb25zQW55RGF0ZShnbG9iYWxPYmplY3QsIG9yaWdpbmFsT3B0aW9ucyk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIFJlc29sdmVM
b2NhbGVPcHRpb25zIGxvY2FsZU9wdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxEaXNwbGF5TmFtZXMuY3BwCmluZGV4IDBkZTU3NDI5MzQ1YWQ4MWRhZTQx
NjBlYWRkYjUwOTdjNjQyMGMxOTIuLmQ3OWMzNDE3OGEyYmJlZGE4OTcyNzJjYTE4OGFiNzc1ODgw
ZGY3Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEaXNw
bGF5TmFtZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEaXNw
bGF5TmFtZXMuY3BwCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgSW50bERpc3BsYXlOYW1lczo6aW5p
dGlhbGl6ZURpc3BsYXlOYW1lcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhCiAg
ICAgYXV0byByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChnbG9iYWxP
YmplY3QsIGxvY2FsZXMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
CiAKLSAgICBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlvbnMgPSBpbnRsR2V0T3B0aW9uc09iamVj
dChnbG9iYWxPYmplY3QsIG9wdGlvbnNWYWx1ZSk7CisgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBp
bnRsR2V0T3B0aW9uc09iamVjdChnbG9iYWxPYmplY3QsIG9wdGlvbnNWYWx1ZSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIC8vIERvZXMgbm90IHNldCBl
aXRoZXIgb2YgImNhIiBvciAibnUiLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bExpc3RGb3JtYXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bExpc3RGb3JtYXQuY3BwCmluZGV4IDg4MGVkMjZlNzNhZmUxY2E5NDQ3NzQ1YmVlZmFm
OWI1ZDM2ZjQxODIuLjIwZjY4NjhjNTE3ZjVhNTgzMjRlOTBlMmVlMDY3OTBkMjRmOGRkMzEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdC5jcHAK
QEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBJbnRsTGlzdEZvcm1hdDo6aW5pdGlhbGl6ZUxpc3RGb3Jt
YXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZQogICAgIGF1dG8gcmVxdWVz
dGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0LCBsb2NhbGVz
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCi0gICAgT3B0aW9u
YWw8SlNPYmplY3QmPiBvcHRpb25zID0gaW50bEdldE9wdGlvbnNPYmplY3QoZ2xvYmFsT2JqZWN0
LCBvcHRpb25zVmFsdWUpOworICAgIEpTT2JqZWN0KiBvcHRpb25zID0gaW50bEdldE9wdGlvbnNP
YmplY3QoZ2xvYmFsT2JqZWN0LCBvcHRpb25zVmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICBSZXNvbHZlTG9jYWxlT3B0aW9ucyBsb2NhbGVPcHRp
b25zOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2Fs
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmNwcAppbmRl
eCBlYjA0NWM1NWU1MTVhZTY3M2MwYTQ2YmYxZTI0MDkwYzcwNjAzZmJjLi5mMjJhYmEwNTUxNWZm
ZjUzZDBkMDY3OTUyNDcyZjNlMDljNmNmZDgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTG9jYWxlLmNwcApAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgSW50bExvY2Fs
ZTo6aW5pdGlhbGl6ZUxvY2FsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBT
dHJpbmcmIHRhCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIE9wdGlvbmFsPEpTT2JqZWN0Jj4g
b3B0aW9ucyA9IGludGxDb2VyY2VPcHRpb25zVG9PYmplY3QoZ2xvYmFsT2JqZWN0LCBvcHRpb25z
VmFsdWUpOworICAgIEpTT2JqZWN0KiBvcHRpb25zID0gaW50bENvZXJjZU9wdGlvbnNUb09iamVj
dChnbG9iYWxPYmplY3QsIG9wdGlvbnNWYWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgdm9pZCgpKTsKIAogICAgIExvY2FsZUlEQnVpbGRlciBsb2NhbGVJRDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAKaW5kZXgg
NTZlN2YxODRkNjJlMjQwYjI3MzYzYjkxZjRmMmEyNTYyZmQ2MDcxYy4uYWZlNDYwNjYwM2U0NGQ3
MGU4MzA0YTk1OWY2OGE3MmIwYzkwZDYzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAKQEAgLTI3NCw3ICsyNzQsNyBAQCB2b2lk
IEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGb3JtYXQoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYQogICAgIGF1dG8gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNh
bGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0LCBsb2NhbGVzKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCi0gICAgT3B0aW9uYWw8SlNPYmplY3QmPiBvcHRpb25z
ID0gaW50bENvZXJjZU9wdGlvbnNUb09iamVjdChnbG9iYWxPYmplY3QsIG9wdGlvbnNWYWx1ZSk7
CisgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBpbnRsQ29lcmNlT3B0aW9uc1RvT2JqZWN0KGdsb2Jh
bE9iamVjdCwgb3B0aW9uc1ZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2
b2lkKCkpOwogCiAgICAgUmVzb2x2ZUxvY2FsZU9wdGlvbnMgbG9jYWxlT3B0aW9uczsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaAppbmRleCA2
ZjZiYTYyZWNiZjFiM2MzZDMwOGZlYTYxYzY2MmMwMjExOWI3ODdkLi4zOGE3NzBjNTlkNDEwNzAw
Zjg5YzQ5Zjc2OWE5MTQ5ZGJjYTg1N2RlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oCkBAIC01MCw3ICs1MCw3IEBAIGVudW0gY2xhc3Mg
UmVsZXZhbnRFeHRlbnNpb25LZXkgOiB1aW50OF90OwogCiBlbnVtIGNsYXNzIEludGxSb3VuZGlu
Z1R5cGUgOiB1aW50OF90IHsgRnJhY3Rpb25EaWdpdHMsIFNpZ25pZmljYW50RGlnaXRzLCBDb21w
YWN0Um91bmRpbmcgfTsKIGVudW0gY2xhc3MgSW50bE5vdGF0aW9uIDogdWludDhfdCB7IFN0YW5k
YXJkLCBTY2llbnRpZmljLCBFbmdpbmVlcmluZywgQ29tcGFjdCB9OwotdGVtcGxhdGU8dHlwZW5h
bWUgSW50bFR5cGU+IHZvaWQgc2V0TnVtYmVyRm9ybWF0RGlnaXRPcHRpb25zKEpTR2xvYmFsT2Jq
ZWN0KiwgSW50bFR5cGUqLCBPcHRpb25hbDxKU09iamVjdCY+LCB1bnNpZ25lZCBtaW5pbXVtRnJh
Y3Rpb25EaWdpdHNEZWZhdWx0LCB1bnNpZ25lZCBtYXhpbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0
LCBJbnRsTm90YXRpb24pOwordGVtcGxhdGU8dHlwZW5hbWUgSW50bFR5cGU+IHZvaWQgc2V0TnVt
YmVyRm9ybWF0RGlnaXRPcHRpb25zKEpTR2xvYmFsT2JqZWN0KiwgSW50bFR5cGUqLCBKU09iamVj
dCosIHVuc2lnbmVkIG1pbmltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQsIHVuc2lnbmVkIG1heGlt
dW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQsIEludGxOb3RhdGlvbik7CiAKIGNsYXNzIEludGxOdW1i
ZXJGb3JtYXQgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CkBAIC04
OCw3ICs4OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBmb3JtYXRUb1BhcnRzSW50ZXJu
YWwoSlNHbG9iYWxPYmplY3QqLCBTdHlsZSwgZG91YmxlLCBjb25zdCBTdHJpbmcmIGZvcm1hdHRl
ZCwgSW50bEZpZWxkSXRlcmF0b3ImLCBKU0FycmF5KiwgSlNTdHJpbmcqIHVuaXQgPSBudWxscHRy
KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEludGxUeXBlPgotICAgIGZyaWVuZCB2b2lkIHNl
dE51bWJlckZvcm1hdERpZ2l0T3B0aW9ucyhKU0dsb2JhbE9iamVjdCosIEludGxUeXBlKiwgT3B0
aW9uYWw8SlNPYmplY3QmPiwgdW5zaWduZWQgbWluaW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCwg
dW5zaWduZWQgbWF4aW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCwgSW50bE5vdGF0aW9uKTsKKyAg
ICBmcmllbmQgdm9pZCBzZXROdW1iZXJGb3JtYXREaWdpdE9wdGlvbnMoSlNHbG9iYWxPYmplY3Qq
LCBJbnRsVHlwZSosIEpTT2JqZWN0KiwgdW5zaWduZWQgbWluaW11bUZyYWN0aW9uRGlnaXRzRGVm
YXVsdCwgdW5zaWduZWQgbWF4aW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCwgSW50bE5vdGF0aW9u
KTsKIAogICAgIHN0YXRpYyBBU0NJSUxpdGVyYWwgbm90YXRpb25TdHJpbmcoSW50bE5vdGF0aW9u
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJl
ckZvcm1hdElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1i
ZXJGb3JtYXRJbmxpbmVzLmgKaW5kZXggNDEwNGI1ODYzYTMzOGU4M2ZlNTRiMWZjZGViZTc1NTBi
ZGZkYzQ1NC4uMjNkMzg2M2QxNjAwNDMxZWY3NGRmNDBjODc0NDcxNzY2ZDA1MTY5YSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdElubGlu
ZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0
SW5saW5lcy5oCkBAIC0zMyw3ICszMyw3IEBACiBuYW1lc3BhY2UgSlNDICB7CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIEludGxUeXBlPgotdm9pZCBzZXROdW1iZXJGb3JtYXREaWdpdE9wdGlvbnMoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSW50bFR5cGUqIGludGxJbnN0YW5jZSwgT3B0aW9u
YWw8SlNPYmplY3QmPiBvcHRpb25zLCB1bnNpZ25lZCBtaW5pbXVtRnJhY3Rpb25EaWdpdHNEZWZh
dWx0LCB1bnNpZ25lZCBtYXhpbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0LCBJbnRsTm90YXRpb24g
bm90YXRpb24pCit2b2lkIHNldE51bWJlckZvcm1hdERpZ2l0T3B0aW9ucyhKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBJbnRsVHlwZSogaW50bEluc3RhbmNlLCBKU09iamVjdCogb3B0aW9u
cywgdW5zaWduZWQgbWluaW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCwgdW5zaWduZWQgbWF4aW11
bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCwgSW50bE5vdGF0aW9uIG5vdGF0aW9uKQogewogICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3Qu
Y3BwCmluZGV4IGQ1YWNjZTAzNDZlOWVlZjAyYzMxY2MzMWMxYzM0NGFhN2M1MDNjM2EuLmM2N2Q1
NDJmMmI5ZDE4MzZlZjNhYjVjY2IzZTc4YjJiMzQxYTUwOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCkBAIC01MjMsNyArNTIzLDcgQEAgY29uc3Qg
TG9jYWxlU2V0JiBpbnRsU2VnbWVudGVyQXZhaWxhYmxlTG9jYWxlcygpCiB9CiAKIC8vIGh0dHBz
Oi8vdGMzOS5lcy9lY21hNDAyLyNzZWMtZ2V0b3B0aW9uCi1UcmlTdGF0ZSBpbnRsQm9vbGVhbk9w
dGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBPcHRpb25hbDxKU09iamVjdCY+IG9w
dGlvbnMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eSkKK1RyaVN0YXRlIGludGxCb29sZWFuT3B0aW9u
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvcHRpb25zLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTU0MCw3ICs1NDAsNyBA
QCBUcmlTdGF0ZSBpbnRsQm9vbGVhbk9wdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBPcHRpb25hbDxKU09iamVjdCY+IG9wdAogICAgIHJldHVybiB0cmlTdGF0ZSh2YWx1ZS50b0Jv
b2xlYW4oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKLVN0cmluZyBpbnRsU3RyaW5nT3B0aW9uKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE9wdGlvbmFsPEpTT2JqZWN0Jj4gb3B0aW9ucywgUHJv
cGVydHlOYW1lIHByb3BlcnR5LCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Y29uc3QgY2hhcio+IHZh
bHVlcywgY29uc3QgY2hhciogbm90Rm91bmQsIGNvbnN0IGNoYXIqIGZhbGxiYWNrKQorU3RyaW5n
IGludGxTdHJpbmdPcHRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3Qq
IG9wdGlvbnMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eSwgc3RkOjppbml0aWFsaXplcl9saXN0PGNv
bnN0IGNoYXIqPiB2YWx1ZXMsIGNvbnN0IGNoYXIqIG5vdEZvdW5kLCBjb25zdCBjaGFyKiBmYWxs
YmFjaykKIHsKICAgICAvLyBHZXRPcHRpb24gKG9wdGlvbnMsIHByb3BlcnR5LCB0eXBlPSJzdHJp
bmciLCB2YWx1ZXMsIGZhbGxiYWNrKQogICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNt
YTQwMi8jc2VjLWdldG9wdGlvbgpAQCAtNTY4LDcgKzU2OCw3IEBAIFN0cmluZyBpbnRsU3RyaW5n
T3B0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE9wdGlvbmFsPEpTT2JqZWN0Jj4g
b3B0aW9uCiAgICAgcmV0dXJuIGZhbGxiYWNrOwogfQogCi11bnNpZ25lZCBpbnRsTnVtYmVyT3B0
aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE9wdGlvbmFsPEpTT2JqZWN0Jj4gb3B0
aW9ucywgUHJvcGVydHlOYW1lIHByb3BlcnR5LCB1bnNpZ25lZCBtaW5pbXVtLCB1bnNpZ25lZCBt
YXhpbXVtLCB1bnNpZ25lZCBmYWxsYmFjaykKK3Vuc2lnbmVkIGludGxOdW1iZXJPcHRpb24oSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG9wdGlvbnMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eSwgdW5zaWduZWQgbWluaW11bSwgdW5zaWduZWQgbWF4aW11bSwgdW5zaWduZWQg
ZmFsbGJhY2spCiB7CiAgICAgLy8gR2V0TnVtYmVyT3B0aW9uIChvcHRpb25zLCBwcm9wZXJ0eSwg
bWluaW11bSwgbWF4aW11bSwgZmFsbGJhY2spCiAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5p
by9lY21hNDAyLyNzZWMtZ2V0bnVtYmVyb3B0aW9uCkBAIC05NjIsNyArOTYyLDcgQEAgSlNWYWx1
ZSBzdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IExv
Y2FsZVNldCYgYXZhaWxhYmwKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgU3RyaW5nIG1hdGNoZXI7CiAKLSAgICBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlv
bnMgPSBpbnRsQ29lcmNlT3B0aW9uc1RvT2JqZWN0KGdsb2JhbE9iamVjdCwgb3B0aW9uc1ZhbHVl
KTsKKyAgICBKU09iamVjdCogb3B0aW9ucyA9IGludGxDb2VyY2VPcHRpb25zVG9PYmplY3QoZ2xv
YmFsT2JqZWN0LCBvcHRpb25zVmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IEpTVmFsdWUoKSk7CiAKICAgICBMb2NhbGVNYXRjaGVyIGxvY2FsZU1hdGNoZXIgPSBpbnRsT3B0
aW9uPExvY2FsZU1hdGNoZXI+KGdsb2JhbE9iamVjdCwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1l
cy0+bG9jYWxlTWF0Y2hlciwgeyB7ICJsb29rdXAiX3MsIExvY2FsZU1hdGNoZXI6Okxvb2t1cCB9
LCB7ICJiZXN0IGZpdCJfcywgTG9jYWxlTWF0Y2hlcjo6QmVzdEZpdCB9IH0sICJsb2NhbGVNYXRj
aGVyIG11c3QgYmUgZWl0aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZpdFwiIl9zLCBMb2NhbGVN
YXRjaGVyOjpCZXN0Rml0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmpl
Y3QuaAppbmRleCBlOTNjOWJlODQ0ODFlZWY0YzNmNzVmNzYzNWQ5ODE2ZjFlODdkYTk3Li45NWVi
N2JiNzk5YjVlNzI4MjE4NTNmOWE5YmE0YmIyOTAyMWJkMDUyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5oCkBAIC05NCw5ICs5NCw5IEBAIGlubGluZSBjb25z
dCBMb2NhbGVTZXQmIGludGxQbHVyYWxSdWxlc0F2YWlsYWJsZUxvY2FsZXMoKSB7IHJldHVybiBp
bnRsQXZhaWxhYmxlCiBpbmxpbmUgY29uc3QgTG9jYWxlU2V0JiBpbnRsUmVsYXRpdmVUaW1lRm9y
bWF0QXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0K
IGlubGluZSBjb25zdCBMb2NhbGVTZXQmIGludGxMaXN0Rm9ybWF0QXZhaWxhYmxlTG9jYWxlcygp
IHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KIAotVHJpU3RhdGUgaW50bEJvb2xl
YW5PcHRpb24oSlNHbG9iYWxPYmplY3QqLCBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlvbnMsIFBy
b3BlcnR5TmFtZSk7Ci1TdHJpbmcgaW50bFN0cmluZ09wdGlvbihKU0dsb2JhbE9iamVjdCosIE9w
dGlvbmFsPEpTT2JqZWN0Jj4gb3B0aW9ucywgUHJvcGVydHlOYW1lLCBzdGQ6OmluaXRpYWxpemVy
X2xpc3Q8Y29uc3QgY2hhcio+IHZhbHVlcywgY29uc3QgY2hhciogbm90Rm91bmQsIGNvbnN0IGNo
YXIqIGZhbGxiYWNrKTsKLXVuc2lnbmVkIGludGxOdW1iZXJPcHRpb24oSlNHbG9iYWxPYmplY3Qq
LCBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlvbnMsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgbWlu
aW11bSwgdW5zaWduZWQgbWF4aW11bSwgdW5zaWduZWQgZmFsbGJhY2spOworVHJpU3RhdGUgaW50
bEJvb2xlYW5PcHRpb24oSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogb3B0aW9ucywgUHJvcGVy
dHlOYW1lKTsKK1N0cmluZyBpbnRsU3RyaW5nT3B0aW9uKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmpl
Y3QqIG9wdGlvbnMsIFByb3BlcnR5TmFtZSwgc3RkOjppbml0aWFsaXplcl9saXN0PGNvbnN0IGNo
YXIqPiB2YWx1ZXMsIGNvbnN0IGNoYXIqIG5vdEZvdW5kLCBjb25zdCBjaGFyKiBmYWxsYmFjayk7
Cit1bnNpZ25lZCBpbnRsTnVtYmVyT3B0aW9uKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIG9w
dGlvbnMsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgbWluaW11bSwgdW5zaWduZWQgbWF4aW11bSwg
dW5zaWduZWQgZmFsbGJhY2spOwogdW5zaWduZWQgaW50bERlZmF1bHROdW1iZXJPcHRpb24oSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIG1pbmltdW0sIHVu
c2lnbmVkIG1heGltdW0sIHVuc2lnbmVkIGZhbGxiYWNrKTsKIFZlY3RvcjxjaGFyLCAzMj4gbG9j
YWxlSURCdWZmZXJGb3JMYW5ndWFnZVRhZ1dpdGhOdWxsVGVybWluYXRvcihjb25zdCBDU3RyaW5n
Jik7CiBTdHJpbmcgbGFuZ3VhZ2VUYWdGb3JMb2NhbGVJRChjb25zdCBjaGFyKiwgYm9vbCBpc0lt
bW9ydGFsID0gZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bE9iamVjdElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxPYmplY3RJbmxpbmVzLmgKaW5kZXggMmFkYjg1YjU0MTFlYzc1NGZkNzc5YjYzNjY0MDI1YjVi
MmY5NTFkMC4uZDhiMGFiYTYyNzI0ZWI1NWZiZTVhZmQ3NjU3ZTRjYTU1MmExYjRiYiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdElubGluZXMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0SW5saW5lcy5oCkBA
IC0xMjAsNyArMTIwLDcgQEAgSW5zdGFuY2VUeXBlKiB1bndyYXBGb3JMZWdhY3lJbnRsQ29uc3Ry
dWN0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWwKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgUmVzdWx0VHlwZT4KLVJlc3VsdFR5cGUgaW50bE9wdGlvbihKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlvbnMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eSwgc3RkOjppbml0aWFsaXplcl9saXN0PHN0ZDo6cGFpcjxBU0NJSUxpdGVyYWws
IFJlc3VsdFR5cGU+PiB2YWx1ZXMsIEFTQ0lJTGl0ZXJhbCBub3RGb3VuZE1lc3NhZ2UsIFJlc3Vs
dFR5cGUgZmFsbGJhY2spCitSZXN1bHRUeXBlIGludGxPcHRpb24oSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNPYmplY3QqIG9wdGlvbnMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eSwgc3Rk
Ojppbml0aWFsaXplcl9saXN0PHN0ZDo6cGFpcjxBU0NJSUxpdGVyYWwsIFJlc3VsdFR5cGU+PiB2
YWx1ZXMsIEFTQ0lJTGl0ZXJhbCBub3RGb3VuZE1lc3NhZ2UsIFJlc3VsdFR5cGUgZmFsbGJhY2sp
CiB7CiAgICAgLy8gR2V0T3B0aW9uIChvcHRpb25zLCBwcm9wZXJ0eSwgdHlwZT0ic3RyaW5nIiwg
dmFsdWVzLCBmYWxsYmFjaykKICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWE0MDIv
I3NlYy1nZXRvcHRpb24KQEAgLTIwMSwyOCArMjAxLDI4IEBAIGlubGluZSBVQ29sbGF0aW9uUmVz
dWx0IGNvbXBhcmVBU0NJSVdpdGhVQ0FEVUNFVChjb25zdCBDaGFyYWN0ZXJUeXBlMSogY2hhcmFj
dGVyCiB9CiAKIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hNDAyLyNzZWMtZ2V0b3B0aW9uc29iamVj
dAotaW5saW5lIE9wdGlvbmFsPEpTT2JqZWN0Jj4gaW50bEdldE9wdGlvbnNPYmplY3QoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBvcHRpb25zKQoraW5saW5lIEpTT2JqZWN0
KiBpbnRsR2V0T3B0aW9uc09iamVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIG9wdGlvbnMpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAob3B0aW9ucy5pc1Vu
ZGVmaW5lZCgpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICBpZiAoTElLRUxZKG9wdGlvbnMuaXNPYmplY3QoKSkpCi0gICAgICAgIHJl
dHVybiAqYXNPYmplY3Qob3B0aW9ucyk7CisgICAgICAgIHJldHVybiBhc09iamVjdChvcHRpb25z
KTsKICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAib3B0aW9ucyBhcmd1
bWVudCBpcyBub3QgYW4gb2JqZWN0IG9yIHVuZGVmaW5lZCJfcyk7Ci0gICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogLy8gaHR0cHM6Ly90YzM5LmVzL2Vj
bWE0MDIvI3NlYy1jb2VyY2VvcHRpb25zdG9vYmplY3QKLWlubGluZSBPcHRpb25hbDxKU09iamVj
dCY+IGludGxDb2VyY2VPcHRpb25zVG9PYmplY3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBvcHRpb25zVmFsdWUpCitpbmxpbmUgSlNPYmplY3QqIGludGxDb2VyY2VPcHRp
b25zVG9PYmplY3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBvcHRpb25z
VmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAob3B0aW9uc1ZhbHVlLmlzVW5k
ZWZpbmVkKCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIEpTT2JqZWN0KiBvcHRpb25zID0gb3B0aW9uc1ZhbHVlLnRvT2JqZWN0KGds
b2JhbE9iamVjdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgV1RGOjpudWxsb3B0
KTsKLSAgICByZXR1cm4gKm9wdGlvbnM7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
bnVsbHB0cik7CisgICAgcmV0dXJuIG9wdGlvbnM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAK
aW5kZXggY2NjZjQ5NzE1ODE4ZGZkMzAyNjhhMzE3YWRhZGI4ZThkY2JhZjUzOC4uZDhiYzk2Njlm
Y2JhYzJlMjA5YWU0NTRkNjJiZmMzZDI4YTM1ZTQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCkBAIC04Niw3ICs4Niw3IEBAIHZv
aWQgSW50bFBsdXJhbFJ1bGVzOjppbml0aWFsaXplUGx1cmFsUnVsZXMoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1CiAgICAgVmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxl
cyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0LCBsb2NhbGVzKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCi0gICAgT3B0aW9uYWw8SlNPYmpl
Y3QmPiBvcHRpb25zID0gaW50bENvZXJjZU9wdGlvbnNUb09iamVjdChnbG9iYWxPYmplY3QsIG9w
dGlvbnNWYWx1ZSk7CisgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBpbnRsQ29lcmNlT3B0aW9uc1Rv
T2JqZWN0KGdsb2JhbE9iamVjdCwgb3B0aW9uc1ZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgUmVzb2x2ZUxvY2FsZU9wdGlvbnMgbG9jYWxlT3B0
aW9uczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVy
YWxSdWxlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVz
LmgKaW5kZXggZTI5ZTFiNjI2ZDMxYzkwODI2ZDQ3ZjJkNmJiNWFjMTM3YTViZmI1ZS4uNmQzYWNh
Yjg0ZTgxNGU1ZjdjMDdkMDI0ZjNlMjVmZjJlNWYwZjZlNCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmgKQEAgLTU4LDcgKzU4LDcgQEAgcHVi
bGljOgogICAgIERFQ0xBUkVfSU5GTzsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEludGxUeXBl
PgotICAgIGZyaWVuZCB2b2lkIHNldE51bWJlckZvcm1hdERpZ2l0T3B0aW9ucyhKU0dsb2JhbE9i
amVjdCosIEludGxUeXBlKiwgT3B0aW9uYWw8SlNPYmplY3QmPiwgdW5zaWduZWQgbWluaW11bUZy
YWN0aW9uRGlnaXRzRGVmYXVsdCwgdW5zaWduZWQgbWF4aW11bUZyYWN0aW9uRGlnaXRzRGVmYXVs
dCwgSW50bE5vdGF0aW9uKTsKKyAgICBmcmllbmQgdm9pZCBzZXROdW1iZXJGb3JtYXREaWdpdE9w
dGlvbnMoSlNHbG9iYWxPYmplY3QqLCBJbnRsVHlwZSosIEpTT2JqZWN0KiwgdW5zaWduZWQgbWlu
aW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCwgdW5zaWduZWQgbWF4aW11bUZyYWN0aW9uRGlnaXRz
RGVmYXVsdCwgSW50bE5vdGF0aW9uKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZVBsdXJhbFJ1bGVz
KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBsb2NhbGVzLCBKU1ZhbHVlIG9wdGlvbnMpOwogICAg
IEpTVmFsdWUgc2VsZWN0KEpTR2xvYmFsT2JqZWN0KiwgZG91YmxlIHZhbHVlKSBjb25zdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVG
b3JtYXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGlt
ZUZvcm1hdC5jcHAKaW5kZXggMmI1ZDI4ZWZkOGNlOGYyN2Q2NTc1ODUwMmEzMTA5ODA1YjcwNzNk
ZS4uYjg5Y2FlODY2MmExMDY2OTE2YWRkYzdjM2IxZGE1NjM3ZjM1YzhjNyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1h
dC5jcHAKQEAgLTg5LDcgKzg5LDcgQEAgdm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojppbml0
aWFsaXplUmVsYXRpdmVUaW1lRm9ybWF0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWwKICAgICBWZWN0
b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChnbG9i
YWxPYmplY3QsIGxvY2FsZXMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQo
KSk7CiAKLSAgICBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlvbnMgPSBpbnRsQ29lcmNlT3B0aW9u
c1RvT2JqZWN0KGdsb2JhbE9iamVjdCwgb3B0aW9uc1ZhbHVlKTsKKyAgICBKU09iamVjdCogb3B0
aW9ucyA9IGludGxDb2VyY2VPcHRpb25zVG9PYmplY3QoZ2xvYmFsT2JqZWN0LCBvcHRpb25zVmFs
dWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICBSZXNv
bHZlTG9jYWxlT3B0aW9ucyBsb2NhbGVPcHRpb25zOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsU2VnbWVudGVyLmNwcAppbmRleCA3MmE4M2MwOGNkMzQyMzc1Y2ExNDZi
ODc3Njg3MmRmOTBjOGM2YmU2Li4xMGQ5YWFmZWFjNDNmODdjMzAzNzFiNjAwZmZhZGI1YmZmZDBk
NTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVu
dGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudGVy
LmNwcApAQCAtNjgsNyArNjgsNyBAQCB2b2lkIEludGxTZWdtZW50ZXI6OmluaXRpYWxpemVTZWdt
ZW50ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBsbwogICAgIGF1dG8g
cmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0LCBs
b2NhbGVzKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCi0gICAg
T3B0aW9uYWw8SlNPYmplY3QmPiBvcHRpb25zID0gaW50bEdldE9wdGlvbnNPYmplY3QoZ2xvYmFs
T2JqZWN0LCBvcHRpb25zVmFsdWUpOworICAgIEpTT2JqZWN0KiBvcHRpb25zID0gaW50bEdldE9w
dGlvbnNPYmplY3QoZ2xvYmFsT2JqZWN0LCBvcHRpb25zVmFsdWUpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICBSZXNvbHZlTG9jYWxlT3B0aW9ucyBsb2Nh
bGVPcHRpb25zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRm9yd2FyZC5oIGIvU291cmNl
L1dURi93dGYvRm9yd2FyZC5oCmluZGV4IGM0N2NjNWRjN2Q4YjA3MWEyMWViM2Y3YmEyODM5OTg1
ZTFjZGIzZWYuLmM1MWY2N2FmMDJhZmQ2YTc2OGJkYjUxZTNhN2I2NmMxYTFiZTA2ZGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Gb3J3
YXJkLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjEsNiArMjEsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxzdGRkZWYuaD4KKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KIAogbmFt
ZXNwYWNlIFdURiB7CkBAIC03MCw3ICs3MSw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBG
dW5jdGlvbjsKIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSA9IEFueVRocmVhZHNBY2Nlc3NU
cmFpdHM+IGNsYXNzIExhenlOZXZlckRlc3Ryb3llZDsKIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBl
bmFtZSA9IEFueVRocmVhZHNBY2Nlc3NUcmFpdHM+IGNsYXNzIE5ldmVyRGVzdHJveWVkOwogdGVt
cGxhdGU8dHlwZW5hbWU+IGNsYXNzIE9wdGlvblNldDsKLXRlbXBsYXRlPHR5cGVuYW1lPiBjbGFz
cyBPcHRpb25hbDsKIHRlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBQYWNrZWQ7CiB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgPSBhbGlnbm9mKFQpPiBjbGFzcyBQYWNrZWRBbGlnbmVkUHRyOwog
dGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBSYXdQdHJUcmFpdHM7CkBAIC0xMzYsNyArMTM2LDYg
QEAgdXNpbmcgV1RGOjpMb2NrOwogdXNpbmcgV1RGOjpMb2dnZXI7CiB1c2luZyBXVEY6Ok5ldmVy
RGVzdHJveWVkOwogdXNpbmcgV1RGOjpPcHRpb25TZXQ7Ci11c2luZyBXVEY6Ok9wdGlvbmFsOwog
dXNpbmcgV1RGOjpPcmRpbmFsTnVtYmVyOwogdXNpbmcgV1RGOjpQcmludFN0cmVhbTsKIHVzaW5n
IFdURjo6UmF3UHRyVHJhaXRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvT3B0aW9uYWwu
aCBiL1NvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmgKaW5kZXggNjdhYmExMWFmMTk3M2EzOTUxZjVj
MzNjNTA2ZDIwOWY3YTZiNWZhYS4uZTk1OGFjMzY5Nzk0ZDYyZmIwYzdiMmJlYmVmOWI5MzM0N2Y2
OGQyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvT3B0aW9uYWwuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9PcHRpb25hbC5oCkBAIC0xLDEwNDcgKzEsNTIgQEAKLS8vIENvcHlyaWdodCAoQykg
MjAxMSAtIDIwMTIgQW5kcnplaiBLcnplbWllbnNraS4KLS8vCi0vLyBVc2UsIG1vZGlmaWNhdGlv
biwgYW5kIGRpc3RyaWJ1dGlvbiBpcyBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZQotLy8g
TGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAu
dHh0IG9yIGNvcHkgYXQKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK
LS8vCi0vLyBUaGUgaWRlYSBhbmQgaW50ZXJmYWNlIGlzIGJhc2VkIG9uIEJvb3N0Lk9wdGlvbmFs
IGxpYnJhcnkKLS8vIGF1dGhvcmVkIGJ5IEZlcm5hbmRvIEx1aXMgQ2FjY2lvbGEgQ2FyYmFsbGFs
Ci0vLwotLy8gQm9vc3QgU29mdHdhcmUgTGljZW5zZSAtIFZlcnNpb24gMS4wIC0gQXVndXN0IDE3
dGgsIDIwMDMKLS8vCi0vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo
YXJnZSwgdG8gYW55IHBlcnNvbiBvciBvcmdhbml6YXRpb24KLS8vIG9idGFpbmluZyBhIGNvcHkg
b2YgdGhlIHNvZnR3YXJlIGFuZCBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBjb3ZlcmVkIGJ5
Ci0vLyB0aGlzIGxpY2Vuc2UgKHRoZSAiU29mdHdhcmUiKSB0byB1c2UsIHJlcHJvZHVjZSwgZGlz
cGxheSwgZGlzdHJpYnV0ZSwKLS8vIGV4ZWN1dGUsIGFuZCB0cmFuc21pdCB0aGUgU29mdHdhcmUs
IGFuZCB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlCi0vLyBTb2Z0d2FyZSwgYW5k
IHRvIHBlcm1pdCB0aGlyZC1wYXJ0aWVzIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hl
ZCB0bwotLy8gZG8gc28sIGFsbCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmc6Ci0vLwotLy8gVGhl
IGNvcHlyaWdodCBub3RpY2VzIGluIHRoZSBTb2Z0d2FyZSBhbmQgdGhpcyBlbnRpcmUgc3RhdGVt
ZW50LCBpbmNsdWRpbmcKLS8vIHRoZSBhYm92ZSBsaWNlbnNlIGdyYW50LCB0aGlzIHJlc3RyaWN0
aW9uIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCi0vLyBtdXN0IGJlIGluY2x1ZGVkIGlu
IGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCBhbmQKLS8v
IGFsbCBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTb2Z0d2FyZSwgdW5sZXNzIHN1Y2ggY29waWVz
IG9yIGRlcml2YXRpdmUKLS8vIHdvcmtzIGFyZSBzb2xlbHkgaW4gdGhlIGZvcm0gb2YgbWFjaGlu
ZS1leGVjdXRhYmxlIG9iamVjdCBjb2RlIGdlbmVyYXRlZCBieQotLy8gYSBzb3VyY2UgbGFuZ3Vh
Z2UgcHJvY2Vzc29yLgotLy8KLS8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBX
SVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0vLyBJTVBMSUVELCBJTkNM
VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSwKLS8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBUSVRMRSBBTkQgTk9OLUlO
RlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQKLS8vIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBP
UiBBTllPTkUgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSBCRSBMSUFCTEUKLS8vIEZPUiBBTlkg
REFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFRPUlQgT1Ig
T1RIRVJXSVNFLAotLy8gQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI
IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCi0vLyBERUFMSU5HUyBJTiBUSEUgU09G
VFdBUkUuCi0KLS8vIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ha3J6ZW1pMS9PcHRp
b25hbCAoODQ1NmMzOTIzNzc2YjMzYjRhZTg1MjczNDI3M2ZlOTM0YzNlNGU2MSkKLQotLy8gTW9k
aWZpZWQgdG8gbWFrZSBpdCBjb21waWxlIHdpdGggZXhjZXB0aW9ucyBkaXNhYmxlZC4KKy8qCisg
KiAgQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCiAKICNwcmFnbWEgb25jZQogCi0jIGluY2x1ZGUgPHV0aWxpdHk+Ci0jIGluY2x1
ZGUgPHR5cGVfdHJhaXRzPgotIyBpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgotIyBpbmNsdWRl
IDxjYXNzZXJ0PgotIyBpbmNsdWRlIDxzdHJpbmc+Ci0jIGluY2x1ZGUgPHN0ZGV4Y2VwdD4KLSMg
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSMgaW5jbHVkZSA8d3RmL0NvbXBpbGVyLmg+Ci0j
IGluY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Ci0jIGluY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KLQotIyBkZWZpbmUgVFIyX09QVElPTkFMX1JFUVVJUkVTKC4uLikgdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8X19WQV9BUkdTX186OnZhbHVlLCBib29sPjo6dHlwZSA9IGZhbHNlCi0KLSMgaWYg
ZGVmaW5lZCBfX0dOVUNfXyAvLyBOT1RFOiBHTlVDIGlzIGFsc28gZGVmaW5lZCBmb3IgQ2xhbmcK
LSMgICBpZiAoX19HTlVDX18gPT0gNCkgJiYgKF9fR05VQ19NSU5PUl9fID49IDgpCi0jICAgICBk
ZWZpbmUgVFIyX09QVElPTkFMX0dDQ180XzhfQU5EX0hJR0hFUl9fXwotIyAgIGVsaWYgKF9fR05V
Q19fID4gNCkKLSMgICAgIGRlZmluZSBUUjJfT1BUSU9OQUxfR0NDXzRfOF9BTkRfSElHSEVSX19f
Ci0jICAgZW5kaWYKLSMKLSMgICBpZiAoX19HTlVDX18gPT0gNCkgJiYgKF9fR05VQ19NSU5PUl9f
ID49IDcpCi0jICAgICBkZWZpbmUgVFIyX09QVElPTkFMX0dDQ180XzdfQU5EX0hJR0hFUl9fXwot
IyAgIGVsaWYgKF9fR05VQ19fID4gNCkKLSMgICAgIGRlZmluZSBUUjJfT1BUSU9OQUxfR0NDXzRf
N19BTkRfSElHSEVSX19fCi0jICAgZW5kaWYKLSMKLSMgICBpZiAoX19HTlVDX18gPT0gNCkgJiYg
KF9fR05VQ19NSU5PUl9fID09IDgpICYmIChfX0dOVUNfUEFUQ0hMRVZFTF9fID49IDEpCi0jICAg
ICBkZWZpbmUgVFIyX09QVElPTkFMX0dDQ180XzhfMV9BTkRfSElHSEVSX19fCi0jICAgZWxpZiAo
X19HTlVDX18gPT0gNCkgJiYgKF9fR05VQ19NSU5PUl9fID49IDkpCi0jICAgICBkZWZpbmUgVFIy
X09QVElPTkFMX0dDQ180XzhfMV9BTkRfSElHSEVSX19fCi0jICAgZWxpZiAoX19HTlVDX18gPiA0
KQotIyAgICAgZGVmaW5lIFRSMl9PUFRJT05BTF9HQ0NfNF84XzFfQU5EX0hJR0hFUl9fXwotIyAg
IGVuZGlmCi0jIGVuZGlmCi0jCi0jIGlmIGRlZmluZWQgX19jbGFuZ19tYWpvcl9fCi0jICAgaWYg
KF9fY2xhbmdfbWFqb3JfXyA9PSAzICYmIF9fY2xhbmdfbWlub3JfXyA+PSA1KQotIyAgICAgZGVm
aW5lIFRSMl9PUFRJT05BTF9DTEFOR18zXzVfQU5EX0hJR0hURVJfCi0jICAgZWxpZiAoX19jbGFu
Z19tYWpvcl9fID4gMykKLSMgICAgIGRlZmluZSBUUjJfT1BUSU9OQUxfQ0xBTkdfM181X0FORF9I
SUdIVEVSXwotIyAgIGVuZGlmCi0jICAgaWYgZGVmaW5lZCBUUjJfT1BUSU9OQUxfQ0xBTkdfM181
X0FORF9ISUdIVEVSXwotIyAgICAgZGVmaW5lIFRSMl9PUFRJT05BTF9DTEFOR18zXzRfMl9BTkRf
SElHSEVSXwotIyAgIGVsaWYgKF9fY2xhbmdfbWFqb3JfXyA9PSAzICYmIF9fY2xhbmdfbWlub3Jf
XyA9PSA0ICYmIF9fY2xhbmdfcGF0Y2hsZXZlbF9fID49IDIpCi0jICAgICBkZWZpbmUgVFIyX09Q
VElPTkFMX0NMQU5HXzNfNF8yX0FORF9ISUdIRVJfCi0jICAgZW5kaWYKLSMgZW5kaWYKLSMKLSMg
aWYgZGVmaW5lZCBfTVNDX1ZFUgotIyAgIGlmIChfTVNDX1ZFUiA+PSAxOTAwKQotIyAgICAgZGVm
aW5lIFRSMl9PUFRJT05BTF9NU1ZDXzIwMTVfQU5EX0hJR0hFUl9fXwotIyAgIGVuZGlmCi0jIGVu
ZGlmCi0KLSMgaWYgZGVmaW5lZCBfX2NsYW5nX18KLSMgICBpZiAoX19jbGFuZ19tYWpvcl9fID4g
MikgfHwgKF9fY2xhbmdfbWFqb3JfXyA9PSAyKSAmJiAoX19jbGFuZ19taW5vcl9fID49IDkpCi0j
ICAgICBkZWZpbmUgT1BUSU9OQUxfSEFTX1RISVNfUlZBTFVFX1JFRlMgMQotIyAgIGVsc2UKLSMg
ICAgIGRlZmluZSBPUFRJT05BTF9IQVNfVEhJU19SVkFMVUVfUkVGUyAwCi0jICAgZW5kaWYKLSMg
ZWxpZiBkZWZpbmVkIFRSMl9PUFRJT05BTF9HQ0NfNF84XzFfQU5EX0hJR0hFUl9fXwotIyAgIGRl
ZmluZSBPUFRJT05BTF9IQVNfVEhJU19SVkFMVUVfUkVGUyAxCi0jIGVsaWYgZGVmaW5lZCBUUjJf
T1BUSU9OQUxfTVNWQ18yMDE1X0FORF9ISUdIRVJfX18KLSMgICBkZWZpbmUgT1BUSU9OQUxfSEFT
X1RISVNfUlZBTFVFX1JFRlMgMQotIyBlbHNlCi0jICAgZGVmaW5lIE9QVElPTkFMX0hBU19USElT
X1JWQUxVRV9SRUZTIDAKLSMgZW5kaWYKLQotCi0jIGlmIGRlZmluZWQgVFIyX09QVElPTkFMX0dD
Q180XzhfMV9BTkRfSElHSEVSX19fCi0jICAgZGVmaW5lIE9QVElPTkFMX0hBU19DT05TVEVYUFJf
SU5JVF9MSVNUIDEKLSMgICBkZWZpbmUgT1BUSU9OQUxfQ09OU1RFWFBSX0lOSVRfTElTVCBjb25z
dGV4cHIKLSMgZWxzZQotIyAgIGRlZmluZSBPUFRJT05BTF9IQVNfQ09OU1RFWFBSX0lOSVRfTElT
VCAwCi0jICAgZGVmaW5lIE9QVElPTkFMX0NPTlNURVhQUl9JTklUX0xJU1QKLSMgZW5kaWYKLQot
IyAvLyBJbiBDKysxMSBjb25zdGV4cHIgaW1wbGllcyBjb25zdCwgc28gd2UgbmVlZCB0byBtYWtl
IG5vbi1jb25zdCBtZW1iZXJzIGFsc28gbm9uLWNvbnN0ZXhwcgotIyBpZiAoZGVmaW5lZCBfX2Nw
bHVzcGx1cykgJiYgKF9fY3BsdXNwbHVzID09IDIwMTEwM0wpCi0jICAgZGVmaW5lIE9QVElPTkFM
X01VVEFCTEVfQ09OU1RFWFBSCi0jIGVsc2UKLSMgICBkZWZpbmUgT1BUSU9OQUxfTVVUQUJMRV9D
T05TVEVYUFIgY29uc3RleHByCi0jIGVuZGlmCi0KLSNpZiBDT01QSUxFUl9TVVBQT1JUUyhFWENF
UFRJT05TKQotI2RlZmluZSBfX1RIUk9XX0VYQ0VQVElPTihfX2V4Y2VwdGlvbikgdGhyb3cgX19l
eGNlcHRpb247Ci0jZGVmaW5lIF9fTk9FWENFUFQgbm9leGNlcHQKLSNkZWZpbmUgX19OT0VYQ0VQ
VF8oX19leGNlcHRpb24pIG5vZXhjZXB0KF9fZXhjZXB0aW9uKQotI2Vsc2UKLSNkZWZpbmUgX19U
SFJPV19FWENFUFRJT04oX19leGNlcHRpb24pIGRvIHsgKHZvaWQpX19leGNlcHRpb247IENSQVNI
KCk7IH0gd2hpbGUgKDApOwotI2RlZmluZSBfX05PRVhDRVBUCi0jZGVmaW5lIF9fTk9FWENFUFRf
KC4uLikKLSNlbmRpZgorI2luY2x1ZGUgPG9wdGlvbmFsPgogCiBuYW1lc3BhY2UgV1RGIHsKLW5h
bWVzcGFjZSBkZXRhaWxfIHsKLQotLy8gTk9URTogQWxsIG91ciB0YXJnZXQgY29tcGlsZXJzIHN1
cHBvcnQgaXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZS4KLS8vIC8vIEJFR0lOIHdvcmthcm91bmQg
Zm9yIG1pc3NpbmcgaXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZQotLy8gIyBpZiBkZWZpbmVkIFRS
Ml9PUFRJT05BTF9HQ0NfNF84X0FORF9ISUdIRVJfX18KLS8vICAgICAvLyBsZWF2ZSBpdDogaXQg
aXMgYWxyZWFkeSB0aGVyZQotLy8gIyBlbGlmIGRlZmluZWQgVFIyX09QVElPTkFMX0NMQU5HXzNf
NF8yX0FORF9ISUdIRVJfCi0vLyAgICAgLy8gbGVhdmUgaXQ6IGl0IGlzIGFscmVhZHkgdGhlcmUK
LS8vICMgZWxpZiBkZWZpbmVkIFRSMl9PUFRJT05BTF9NU1ZDXzIwMTVfQU5EX0hJR0hFUl9fXwot
Ly8gICAgIC8vIGxlYXZlIGl0OiBpdCBpcyBhbHJlYWR5IHRoZXJlCi0vLyAjIGVsaWYgZGVmaW5l
ZCBUUjJfT1BUSU9OQUxfRElTQUJMRV9FTVVMQVRJT05fT0ZfVFlQRV9UUkFJVFMKLS8vICAgICAv
LyBsZWF2ZSBpdDogdGhlIHVzZXIgZG9lc24ndCB3YW50IGl0Ci0vLyAjIGVsc2UKLS8vICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS8vICAgICB1c2luZyBpc190cml2aWFsbHlfZGVzdHJ1Y3Rp
YmxlID0gc3RkOjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yPFQ+OwotLy8gIyBlbmRpZgotLy8gLy8g
RU5EIHdvcmthcm91bmQgZm9yIG1pc3NpbmcgaXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZQotCi0j
aWYgQ09NUElMRVJfU1VQUE9SVFMoRVhDRVBUSU9OUykKLSMgaWYgZGVmaW5lZChUUjJfT1BUSU9O
QUxfR0NDXzRfN19BTkRfSElHSEVSX19fKSB8fCBkZWZpbmVkKFRSMl9PUFRJT05BTF9DTEFOR18z
XzRfMl9BTkRfSElHSEVSXykgfHwgZGVmaW5lZChUUjJfT1BUSU9OQUxfTVNWQ18yMDE1X0FORF9I
SUdIRVJfX18pCi0gICAgLy8gbGVhdmUgaXQ7IG91ciBtZXRhZnVuY3Rpb25zIGFyZSBhbHJlYWR5
IGRlZmluZWQuCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgdXNpbmcgaXNfbm90aHJv
d19tb3ZlX2NvbnN0cnVjdGlibGUgPSBzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxl
PFQ+OwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgIHVzaW5nIGlzX25vdGhyb3dfbW92
ZV9hc3NpZ25hYmxlID0gc3RkOjppc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTxUPjsKLSMgZWxp
ZiBkZWZpbmVkIFRSMl9PUFRJT05BTF9ESVNBQkxFX0VNVUxBVElPTl9PRl9UWVBFX1RSQUlUUwot
ICAgIC8vIGxlYXZlIGl0OiB0aGUgdXNlciBkb2Vzbid0IHdhbnQgaXQKLSMgZWxzZQotCi0KLS8v
IHdvcmthcm91bmQgZm9yIG1pc3NpbmcgdHJhaXRzIGluIEdDQyBhbmQgQ0xBTkcKLXRlbXBsYXRl
IDxjbGFzcyBUPgotc3RydWN0IGlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlCi17Ci0gIGNv
bnN0ZXhwciBzdGF0aWMgYm9vbCB2YWx1ZSA9IHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1Y3RpYmxl
PFQsIFQmJj46OnZhbHVlOwotfTsKLQotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4KLXN0
cnVjdCBpc19hc3NpZ25hYmxlCi17Ci0gIHRlbXBsYXRlIDxjbGFzcyBYLCBjbGFzcyBZPgotICBj
b25zdGV4cHIgc3RhdGljIGJvb2wgaGFzX2Fzc2lnbiguLi4pIHsgcmV0dXJuIGZhbHNlOyB9Ci0K
LSAgdGVtcGxhdGUgPGNsYXNzIFgsIGNsYXNzIFksIHNpemVfdCBTID0gc2l6ZW9mKChzdGQ6OmRl
Y2x2YWw8WD4oKSA9IHN0ZDo6ZGVjbHZhbDxZPigpLCB0cnVlKSkgPgotICAvLyB0aGUgY29tbWEg
b3BlcmF0b3IgaXMgbmVjZXNzYXJ5IGZvciB0aGUgY2FzZXMgd2hlcmUgb3BlcmF0b3I9IHJldHVy
bnMgdm9pZAotICBjb25zdGV4cHIgc3RhdGljIGJvb2wgaGFzX2Fzc2lnbihib29sKSB7IHJldHVy
biB0cnVlOyB9Ci0KLSAgY29uc3RleHByIHN0YXRpYyBib29sIHZhbHVlID0gaGFzX2Fzc2lnbjxU
LCBVPih0cnVlKTsKLX07Ci0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgaXNfbm90aHJv
d19tb3ZlX2Fzc2lnbmFibGUKLXsKLSAgdGVtcGxhdGUgPGNsYXNzIFgsIGJvb2wgaGFzX2FueV9t
b3ZlX2Fzc2lnbj4KLSAgc3RydWN0IGhhc19ub3Rocm93X21vdmVfYXNzaWduIHsKLSAgICBjb25z
dGV4cHIgc3RhdGljIGJvb2wgdmFsdWUgPSBmYWxzZTsKLSAgfTsKLQotICB0ZW1wbGF0ZSA8Y2xh
c3MgWD4KLSAgc3RydWN0IGhhc19ub3Rocm93X21vdmVfYXNzaWduPFgsIHRydWU+IHsKLSAgICBj
b25zdGV4cHIgc3RhdGljIGJvb2wgdmFsdWUgPSBfX05PRVhDRVBUXyggc3RkOjpkZWNsdmFsPFgm
PigpID0gc3RkOjpkZWNsdmFsPFgmJj4oKSApOwotICB9OwotCi0gIGNvbnN0ZXhwciBzdGF0aWMg
Ym9vbCB2YWx1ZSA9IGhhc19ub3Rocm93X21vdmVfYXNzaWduPFQsIGlzX2Fzc2lnbmFibGU8VCYs
IFQmJj46OnZhbHVlPjo6dmFsdWU7Ci19OwotLy8gZW5kIHdvcmthcm91bmQKLQotCi0jIGVuZGlm
Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgZGV0YWlsXwotCi0vLyAyMC41LjQsIE9wdGlvbmFs
IGZvciBvYmplY3QgdHlwZXMKLXRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBPcHRpb25hbDsKLQot
Ly8gMjAuNS41LCBPcHRpb25hbCBmb3IgbHZhbHVlIHJlZmVyZW5jZSB0eXBlcwotdGVtcGxhdGUg
PGNsYXNzIFQ+IGNsYXNzIE9wdGlvbmFsPFQmPjsKLQotbmFtZXNwYWNlIGRldGFpbF8gewotCi0v
LyB3b3JrYXJvdW5kOiBzdGQgdXRpbGl0eSBmdW5jdGlvbnMgYXJlbid0IGNvbnN0ZXhwciB5ZXQK
LXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgVCYmIGNvbnN0ZXhwcl9mb3J3YXJkKHR5cGVu
YW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxUPjo6dHlwZSYgdCkgX19OT0VYQ0VQVAotewotICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VCYmPih0KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0
ZXhwciBUJiYgY29uc3RleHByX2ZvcndhcmQodHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNl
PFQ+Ojp0eXBlJiYgdCkgX19OT0VYQ0VQVAotewotICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNf
bHZhbHVlX3JlZmVyZW5jZTxUPjo6dmFsdWUsICIhISIpOwotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUJiY+KHQpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIHR5cGVuYW1lIHN0
ZDo6cmVtb3ZlX3JlZmVyZW5jZTxUPjo6dHlwZSYmIGNvbnN0ZXhwcl9tb3ZlKFQmJiB0KSBfX05P
RVhDRVBUCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3Jl
ZmVyZW5jZTxUPjo6dHlwZSYmPih0KTsKLX0KLQotCi0vLyBzdGF0aWNfYWRkcmVzc29mOiBhIGNv
bnN0ZXhwciB2ZXJzaW9uIG9mIGFkZHJlc3NvZgotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdHJ1
Y3QgaGFzX292ZXJsb2FkZWRfYWRkcmVzc29mCi17Ci0gIHRlbXBsYXRlIDxjbGFzcyBYPgotICBj
b25zdGV4cHIgc3RhdGljIGJvb2wgaGFzX292ZXJsb2FkKC4uLikgeyByZXR1cm4gZmFsc2U7IH0K
LQotICB0ZW1wbGF0ZSA8Y2xhc3MgWCwgc2l6ZV90IFMgPSBzaXplb2Yoc3RkOjpkZWNsdmFsPFgm
PigpLm9wZXJhdG9yJigpKSA+Ci0gIGNvbnN0ZXhwciBzdGF0aWMgYm9vbCBoYXNfb3ZlcmxvYWQo
Ym9vbCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gIGNvbnN0ZXhwciBzdGF0aWMgYm9vbCB2YWx1ZSA9
IGhhc19vdmVybG9hZDxUPih0cnVlKTsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCBUUjJf
T1BUSU9OQUxfUkVRVUlSRVMoIWhhc19vdmVybG9hZGVkX2FkZHJlc3NvZjxUPik+Ci1jb25zdGV4
cHIgVCogc3RhdGljX2FkZHJlc3NvZihUJiByZWYpCi17Ci0gIHJldHVybiAmcmVmOwotfQotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgVFIyX09QVElPTkFMX1JFUVVJUkVTKGhhc19vdmVybG9hZGVk
X2FkZHJlc3NvZjxUPik+Ci1UKiBzdGF0aWNfYWRkcmVzc29mKFQmIHJlZikKLXsKLSAgcmV0dXJu
IHN0ZDo6YWRkcmVzc29mKHJlZik7Ci19Ci0KLQotLy8gdGhlIGNhbGwgdG8gY29udmVydDxBPihi
KSBoYXMgcmV0dXJuIHR5cGUgQSBhbmQgY29udmVydHMgYiB0byB0eXBlIEEgaWZmIGIgZGVjbHR5
cGUoYikgaXMgaW1wbGljaXRseSBjb252ZXJ0aWJsZSB0byBBCi10ZW1wbGF0ZSA8Y2xhc3MgVT4K
LWNvbnN0ZXhwciBVIGNvbnZlcnQoVSB2KSB7IHJldHVybiB2OyB9Ci0KLX0gLy8gbmFtZXNwYWNl
IGRldGFpbAotCi0KLWNvbnN0ZXhwciBzdHJ1Y3QgdHJpdmlhbF9pbml0X3R7fSB0cml2aWFsX2lu
aXR7fTsKLQotCi0vLyAyMC41LjcsIERpc2VuZ2FnZWQgc3RhdGUgaW5kaWNhdG9yCi1zdHJ1Y3Qg
bnVsbG9wdF90Ci17Ci0gIHN0cnVjdCBpbml0e307Ci0gIGNvbnN0ZXhwciBleHBsaWNpdCBudWxs
b3B0X3QoaW5pdCl7fQotfTsKLWNvbnN0ZXhwciBudWxsb3B0X3QgbnVsbG9wdHtudWxsb3B0X3Q6
OmluaXQoKX07Ci0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci11bmlvbiBzdG9yYWdlX3QKLXsKLSAg
dW5zaWduZWQgY2hhciBkdW1teV87Ci0gIFQgdmFsdWVfOwotCi0gIGNvbnN0ZXhwciBzdG9yYWdl
X3QoIHRyaXZpYWxfaW5pdF90ICkgX19OT0VYQ0VQVCA6IGR1bW15XygpIHt9OwotCi0gIHRlbXBs
YXRlIDxjbGFzcy4uLiBBcmdzPgotICBjb25zdGV4cHIgc3RvcmFnZV90KCBBcmdzJiYuLi4gYXJn
cyApIDogdmFsdWVfKGRldGFpbF86OmNvbnN0ZXhwcl9mb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSB7
fQotCi0gIH5zdG9yYWdlX3QoKXt9Ci19OwotCi0KLXRlbXBsYXRlIDxjbGFzcyBUPgotdW5pb24g
Y29uc3RleHByX3N0b3JhZ2VfdAotewotICAgIHVuc2lnbmVkIGNoYXIgZHVtbXlfOwotICAgIFQg
dmFsdWVfOwotCi0gICAgY29uc3RleHByIGNvbnN0ZXhwcl9zdG9yYWdlX3QoIHRyaXZpYWxfaW5p
dF90ICkgX19OT0VYQ0VQVCA6IGR1bW15XygpIHt9OwotCi0gICAgdGVtcGxhdGUgPGNsYXNzLi4u
IEFyZ3M+Ci0gICAgY29uc3RleHByIGNvbnN0ZXhwcl9zdG9yYWdlX3QoIEFyZ3MmJi4uLiBhcmdz
ICkgOiB2YWx1ZV8oZGV0YWlsXzo6Y29uc3RleHByX2ZvcndhcmQ8QXJncz4oYXJncykuLi4pIHt9
Ci0KLSAgICB+Y29uc3RleHByX3N0b3JhZ2VfdCgpID0gZGVmYXVsdDsKLX07Ci0KLQotdGVtcGxh
dGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgT3B0aW9uYWxfYmFzZQotewotICAgIGJvb2wgaW5pdF87Ci0g
ICAgc3RvcmFnZV90PFQ+IHN0b3JhZ2VfOwotCi0gICAgY29uc3RleHByIE9wdGlvbmFsX2Jhc2Uo
KSBfX05PRVhDRVBUIDogaW5pdF8oZmFsc2UpLCBzdG9yYWdlXyh0cml2aWFsX2luaXQpIHt9Owot
Ci0gICAgZXhwbGljaXQgY29uc3RleHByIE9wdGlvbmFsX2Jhc2UoY29uc3QgVCYgdikgOiBpbml0
Xyh0cnVlKSwgc3RvcmFnZV8odikge30KLQotICAgIGV4cGxpY2l0IGNvbnN0ZXhwciBPcHRpb25h
bF9iYXNlKFQmJiB2KSA6IGluaXRfKHRydWUpLCBzdG9yYWdlXyhkZXRhaWxfOjpjb25zdGV4cHJf
bW92ZSh2KSkge30KLQotICAgIHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPiBleHBsaWNpdCBPcHRp
b25hbF9iYXNlKHN0ZDo6aW5fcGxhY2VfdCwgQXJncyYmLi4uIGFyZ3MpCi0gICAgICAgIDogaW5p
dF8odHJ1ZSksIHN0b3JhZ2VfKGRldGFpbF86OmNvbnN0ZXhwcl9mb3J3YXJkPEFyZ3M+KGFyZ3Mp
Li4uKSB7fQotCi0gICAgdGVtcGxhdGUgPGNsYXNzIFUsIGNsYXNzLi4uIEFyZ3MsIFRSMl9PUFRJ
T05BTF9SRVFVSVJFUyhzdGQ6OmlzX2NvbnN0cnVjdGlibGU8VCwgc3RkOjppbml0aWFsaXplcl9s
aXN0PFU+Pik+Ci0gICAgZXhwbGljaXQgT3B0aW9uYWxfYmFzZShzdGQ6OmluX3BsYWNlX3QsIHN0
ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVPiBpbCwgQXJncyYmLi4uIGFyZ3MpCi0gICAgICAgIDogaW5p
dF8odHJ1ZSksIHN0b3JhZ2VfKGlsLCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pIHt9Ci0K
LSAgICB+T3B0aW9uYWxfYmFzZSgpIHsgaWYgKGluaXRfKSBzdG9yYWdlXy52YWx1ZV8uVDo6flQo
KTsgfQotfTsKLQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBjb25zdGV4cHJfT3B0aW9u
YWxfYmFzZQotewotICAgIGJvb2wgaW5pdF87Ci0gICAgY29uc3RleHByX3N0b3JhZ2VfdDxUPiBz
dG9yYWdlXzsKLQotICAgIGNvbnN0ZXhwciBjb25zdGV4cHJfT3B0aW9uYWxfYmFzZSgpIF9fTk9F
WENFUFQgOiBpbml0XyhmYWxzZSksIHN0b3JhZ2VfKHRyaXZpYWxfaW5pdCkge307Ci0KLSAgICBl
eHBsaWNpdCBjb25zdGV4cHIgY29uc3RleHByX09wdGlvbmFsX2Jhc2UoY29uc3QgVCYgdikgOiBp
bml0Xyh0cnVlKSwgc3RvcmFnZV8odikge30KLQotICAgIGV4cGxpY2l0IGNvbnN0ZXhwciBjb25z
dGV4cHJfT3B0aW9uYWxfYmFzZShUJiYgdikgOiBpbml0Xyh0cnVlKSwgc3RvcmFnZV8oZGV0YWls
Xzo6Y29uc3RleHByX21vdmUodikpIHt9Ci0KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gQXJncz4g
ZXhwbGljaXQgY29uc3RleHByIGNvbnN0ZXhwcl9PcHRpb25hbF9iYXNlKHN0ZDo6aW5fcGxhY2Vf
dCwgQXJncyYmLi4uIGFyZ3MpCi0gICAgICA6IGluaXRfKHRydWUpLCBzdG9yYWdlXyhkZXRhaWxf
Ojpjb25zdGV4cHJfZm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KLQotICAgIHRlbXBsYXRlIDxj
bGFzcyBVLCBjbGFzcy4uLiBBcmdzLCBUUjJfT1BUSU9OQUxfUkVRVUlSRVMoc3RkOjppc19jb25z
dHJ1Y3RpYmxlPFQsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVPj4pPgotICAgIE9QVElPTkFMX0NP
TlNURVhQUl9JTklUX0xJU1QgZXhwbGljaXQgY29uc3RleHByX09wdGlvbmFsX2Jhc2Uoc3RkOjpp
bl9wbGFjZV90LCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VT4gaWwsIEFyZ3MmJi4uLiBhcmdzKQot
ICAgICAgOiBpbml0Xyh0cnVlKSwgc3RvcmFnZV8oaWwsIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdz
KS4uLikge30KLQotICAgIH5jb25zdGV4cHJfT3B0aW9uYWxfYmFzZSgpID0gZGVmYXVsdDsKLX07
Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgotdXNpbmcgT3B0aW9uYWxCYXNlID0gdHlwZW5hbWUgc3Rk
Ojpjb25kaXRpb25hbDwKLSAgICBzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8VD46OnZh
bHVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgcG9zc2libGUKLSAgICBjb25zdGV4
cHJfT3B0aW9uYWxfYmFzZTx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDxUPjo6dHlwZT4sIC8v
IHVzZSBiYXNlIHdpdGggdHJpdmlhbCBkZXN0cnVjdG9yCi0gICAgT3B0aW9uYWxfYmFzZTx0eXBl
bmFtZSBzdGQ6OnJlbW92ZV9jb25zdDxUPjo6dHlwZT4KLT46OnR5cGU7Ci0KLQotCi10ZW1wbGF0
ZSA8Y2xhc3MgVD4KLWNsYXNzIE9wdGlvbmFsIDogcHJpdmF0ZSBPcHRpb25hbEJhc2U8VD4KLXsK
LSAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gIHN0YXRpY19hc3NlcnQoICFzdGQ6OmlzX3Nh
bWU8dHlwZW5hbWUgc3RkOjpkZWNheTxUPjo6dHlwZSwgbnVsbG9wdF90Pjo6dmFsdWUsICJiYWQg
VCIgKTsKLSAgc3RhdGljX2Fzc2VydCggIXN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBzdGQ6OmRlY2F5
PFQ+Ojp0eXBlLCBzdGQ6OmluX3BsYWNlX3Q+Ojp2YWx1ZSwgImJhZCBUIiApOwotCi0KLSAgY29u
c3RleHByIGJvb2wgaW5pdGlhbGl6ZWQoKSBjb25zdCBfX05PRVhDRVBUIHsgcmV0dXJuIE9wdGlv
bmFsQmFzZTxUPjo6aW5pdF87IH0KLSAgdHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8VD46OnR5
cGUqIGRhdGFwdHIoKSB7ICByZXR1cm4gc3RkOjphZGRyZXNzb2YoT3B0aW9uYWxCYXNlPFQ+Ojpz
dG9yYWdlXy52YWx1ZV8pOyB9Ci0gIGNvbnN0ZXhwciBjb25zdCBUKiBkYXRhcHRyKCkgY29uc3Qg
eyByZXR1cm4gZGV0YWlsXzo6c3RhdGljX2FkZHJlc3NvZihPcHRpb25hbEJhc2U8VD46OnN0b3Jh
Z2VfLnZhbHVlXyk7IH0KLQotIyBpZiBPUFRJT05BTF9IQVNfVEhJU19SVkFMVUVfUkVGUyA9PSAx
Ci0gIGNvbnN0ZXhwciBjb25zdCBUJiBjb250YWluZWRfdmFsKCkgY29uc3QmIHsgcmV0dXJuIE9w
dGlvbmFsQmFzZTxUPjo6c3RvcmFnZV8udmFsdWVfOyB9Ci0gIE9QVElPTkFMX01VVEFCTEVfQ09O
U1RFWFBSIFQmJiBjb250YWluZWRfdmFsKCkgJiYgeyByZXR1cm4gc3RkOjptb3ZlKE9wdGlvbmFs
QmFzZTxUPjo6c3RvcmFnZV8udmFsdWVfKTsgfQotICBPUFRJT05BTF9NVVRBQkxFX0NPTlNURVhQ
UiBUJiBjb250YWluZWRfdmFsKCkgJiB7IHJldHVybiBPcHRpb25hbEJhc2U8VD46OnN0b3JhZ2Vf
LnZhbHVlXzsgfQotIyBlbHNlCi0gIGNvbnN0ZXhwciBjb25zdCBUJiBjb250YWluZWRfdmFsKCkg
Y29uc3QgeyByZXR1cm4gT3B0aW9uYWxCYXNlPFQ+OjpzdG9yYWdlXy52YWx1ZV87IH0KLSAgVCYg
Y29udGFpbmVkX3ZhbCgpIHsgcmV0dXJuIE9wdGlvbmFsQmFzZTxUPjo6c3RvcmFnZV8udmFsdWVf
OyB9Ci0jIGVuZGlmCi0KLSAgdm9pZCBjbGVhcigpIF9fTk9FWENFUFQgewotICAgIGlmIChpbml0
aWFsaXplZCgpKSBkYXRhcHRyKCktPlQ6On5UKCk7Ci0gICAgT3B0aW9uYWxCYXNlPFQ+Ojppbml0
XyA9IGZhbHNlOwotICB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+Ci0gIHZvaWQgaW5p
dGlhbGl6ZShBcmdzJiYuLi4gYXJncykgX19OT0VYQ0VQVF8oX19OT0VYQ0VQVF8oVChzdGQ6OmZv
cndhcmQ8QXJncz4oYXJncykuLi4pKSkKLSAgewotICAgIEFTU0VSVCghT3B0aW9uYWxCYXNlPFQ+
Ojppbml0Xyk7Ci0gICAgOjpuZXcgKHN0YXRpY19jYXN0PHZvaWQqPihkYXRhcHRyKCkpKSBUKHN0
ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0gICAgT3B0aW9uYWxCYXNlPFQ+Ojppbml0XyA9
IHRydWU7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgVSwgY2xhc3MuLi4gQXJncz4KLSAgdm9p
ZCBpbml0aWFsaXplKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVPiBpbCwgQXJncyYmLi4uIGFyZ3Mp
IF9fTk9FWENFUFRfKF9fTk9FWENFUFRfKFQoaWwsIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4u
LikpKQotICB7Ci0gICAgQVNTRVJUKCFPcHRpb25hbEJhc2U8VD46OmluaXRfKTsKLSAgICA6Om5l
dyAoc3RhdGljX2Nhc3Q8dm9pZCo+KGRhdGFwdHIoKSkpIFQoaWwsIHN0ZDo6Zm9yd2FyZDxBcmdz
PihhcmdzKS4uLik7Ci0gICAgT3B0aW9uYWxCYXNlPFQ+Ojppbml0XyA9IHRydWU7Ci0gIH0KLQot
cHVibGljOgotICB0eXBlZGVmIFQgdmFsdWVfdHlwZTsKLQotICAvLyAyMC41LjUuMSwgY29uc3Ry
dWN0b3JzCi0gIGNvbnN0ZXhwciBPcHRpb25hbCgpIF9fTk9FWENFUFQgOiBPcHRpb25hbEJhc2U8
VD4oKSAge307Ci0gIGNvbnN0ZXhwciBPcHRpb25hbChudWxsb3B0X3QpIF9fTk9FWENFUFQgOiBP
cHRpb25hbEJhc2U8VD4oKSB7fTsKLQotICBjb25zdGV4cHIgT3B0aW9uYWwoY29uc3QgT3B0aW9u
YWwmIHJocykKLSAgOiBPcHRpb25hbEJhc2U8VD4oKQotICB7Ci0gICAgaWYgKHJocy5pbml0aWFs
aXplZCgpKSB7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc190cml2aWFsbHlfY29weV9h
c3NpZ25hYmxlX3Y8VD4pCi0gICAgICAgICAgICBPcHRpb25hbEJhc2U8VD46OnN0b3JhZ2VfID0g
KnJoczsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgOjpuZXcgKHN0YXRpY19jYXN0PHZvaWQq
PihkYXRhcHRyKCkpKSBUKCpyaHMpOwotICAgICAgICBPcHRpb25hbEJhc2U8VD46OmluaXRfID0g
dHJ1ZTsKLSAgICB9Ci0gIH0KLQotICBjb25zdGV4cHIgT3B0aW9uYWwoT3B0aW9uYWwmJiByaHMp
IF9fTk9FWENFUFRfKGRldGFpbF86OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPFQ+Ojp2
YWx1ZSkKLSAgOiBPcHRpb25hbEJhc2U8VD4oKQotICB7Ci0gICAgaWYgKHJocy5pbml0aWFsaXpl
ZCgpKSB7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc190cml2aWFsbHlfY29weV9hc3Np
Z25hYmxlX3Y8VD4pCi0gICAgICAgICAgICBPcHRpb25hbEJhc2U8VD46OnN0b3JhZ2VfID0gKnJo
czsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgOjpuZXcgKHN0YXRpY19jYXN0PHZvaWQqPihk
YXRhcHRyKCkpKSBUKHN0ZDo6bW92ZSgqcmhzKSk7Ci0gICAgICAgIE9wdGlvbmFsQmFzZTxUPjo6
aW5pdF8gPSB0cnVlOwotICAgICAgICByaHMuY2xlYXIoKTsKLSAgICB9Ci0gIH0KLQotICBjb25z
dGV4cHIgT3B0aW9uYWwoY29uc3QgVCYgdikgOiBPcHRpb25hbEJhc2U8VD4odikge30KLQotICBj
b25zdGV4cHIgT3B0aW9uYWwoVCYmIHYpIDogT3B0aW9uYWxCYXNlPFQ+KGRldGFpbF86OmNvbnN0
ZXhwcl9tb3ZlKHYpKSB7fQotCi0gIHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPgotICBleHBsaWNp
dCBjb25zdGV4cHIgT3B0aW9uYWwoc3RkOjppbl9wbGFjZV90LCBBcmdzJiYuLi4gYXJncykKLSAg
ICAgIDogT3B0aW9uYWxCYXNlPFQ+KHN0ZDo6aW5fcGxhY2VfdHt9LCBkZXRhaWxfOjpjb25zdGV4
cHJfZm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgVSwgY2xh
c3MuLi4gQXJncywgVFIyX09QVElPTkFMX1JFUVVJUkVTKHN0ZDo6aXNfY29uc3RydWN0aWJsZTxU
LCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VT4+KT4KLSAgT1BUSU9OQUxfQ09OU1RFWFBSX0lOSVRf
TElTVCBleHBsaWNpdCBPcHRpb25hbChzdGQ6OmluX3BsYWNlX3QsIHN0ZDo6aW5pdGlhbGl6ZXJf
bGlzdDxVPiBpbCwgQXJncyYmLi4uIGFyZ3MpCi0gICAgICA6IE9wdGlvbmFsQmFzZTxUPihzdGQ6
OmluX3BsYWNlX3R7fSwgaWwsIGRldGFpbF86OmNvbnN0ZXhwcl9mb3J3YXJkPEFyZ3M+KGFyZ3Mp
Li4uKSB7fQotCi0gIC8vIDIwLjUuNC4yLCBEZXN0cnVjdG9yCi0gIH5PcHRpb25hbCgpID0gZGVm
YXVsdDsKLQotICAvLyAyMC41LjQuMywgYXNzaWdubWVudAotICBPcHRpb25hbCYgb3BlcmF0b3I9
KG51bGxvcHRfdCkgX19OT0VYQ0VQVAotICB7Ci0gICAgY2xlYXIoKTsKLSAgICByZXR1cm4gKnRo
aXM7Ci0gIH0KLQotICBPcHRpb25hbCYgb3BlcmF0b3I9KGNvbnN0IE9wdGlvbmFsJiByaHMpCi0g
IHsKLSAgICBpZiAgICAgIChpbml0aWFsaXplZCgpID09IHRydWUgICYmIHJocy5pbml0aWFsaXpl
ZCgpID09IGZhbHNlKSBjbGVhcigpOwotICAgIGVsc2UgaWYgKGluaXRpYWxpemVkKCkgPT0gZmFs
c2UgJiYgcmhzLmluaXRpYWxpemVkKCkgPT0gdHJ1ZSkgIGluaXRpYWxpemUoKnJocyk7Ci0gICAg
ZWxzZSBpZiAoaW5pdGlhbGl6ZWQoKSA9PSB0cnVlICAmJiByaHMuaW5pdGlhbGl6ZWQoKSA9PSB0
cnVlKSAgY29udGFpbmVkX3ZhbCgpID0gKnJoczsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQot
ICBPcHRpb25hbCYgb3BlcmF0b3I9KE9wdGlvbmFsJiYgcmhzKQotICBfX05PRVhDRVBUXyhkZXRh
aWxfOjppc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTxUPjo6dmFsdWUgJiYgZGV0YWlsXzo6aXNf
bm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8VD46OnZhbHVlKQotICB7Ci0gICAgaWYgICAgICAo
aW5pdGlhbGl6ZWQoKSA9PSB0cnVlICAmJiByaHMuaW5pdGlhbGl6ZWQoKSA9PSBmYWxzZSkgY2xl
YXIoKTsKLSAgICBlbHNlIGlmIChpbml0aWFsaXplZCgpID09IGZhbHNlICYmIHJocy5pbml0aWFs
aXplZCgpID09IHRydWUpICB7IGluaXRpYWxpemUoc3RkOjptb3ZlKCpyaHMpKTsgcmhzLmNsZWFy
KCk7IH0KLSAgICBlbHNlIGlmIChpbml0aWFsaXplZCgpID09IHRydWUgICYmIHJocy5pbml0aWFs
aXplZCgpID09IHRydWUpICB7IGNvbnRhaW5lZF92YWwoKSA9IHN0ZDo6bW92ZSgqcmhzKTsgcmhz
LmNsZWFyKCk7IH0KLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3Mg
VT4KLSAgYXV0byBvcGVyYXRvcj0oVSYmIHYpCi0gIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
Ci0gIDwKLSAgICBzdGQ6OmlzX3NhbWU8dHlwZW5hbWUgc3RkOjpkZWNheTxVPjo6dHlwZSwgVD46
OnZhbHVlLAotICAgIE9wdGlvbmFsJgotICA+Ojp0eXBlCi0gIHsKLSAgICBpZiAoaW5pdGlhbGl6
ZWQoKSkgeyBjb250YWluZWRfdmFsKCkgPSBzdGQ6OmZvcndhcmQ8VT4odik7IH0KLSAgICBlbHNl
ICAgICAgICAgICAgICAgeyBpbml0aWFsaXplKHN0ZDo6Zm9yd2FyZDxVPih2KSk7ICB9Ci0gICAg
cmV0dXJuICp0aGlzOwotICB9Ci0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gQXJncz4KLSAgdm9p
ZCBlbXBsYWNlKEFyZ3MmJi4uLiBhcmdzKQotICB7Ci0gICAgY2xlYXIoKTsKLSAgICBpbml0aWFs
aXplKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xh
c3MgVSwgY2xhc3MuLi4gQXJncz4KLSAgdm9pZCBlbXBsYWNlKHN0ZDo6aW5pdGlhbGl6ZXJfbGlz
dDxVPiBpbCwgQXJncyYmLi4uIGFyZ3MpCi0gIHsKLSAgICBjbGVhcigpOwotICAgIGluaXRpYWxp
emU8VSwgQXJncy4uLj4oaWwsIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0gIH0KLQot
ICAvLyAyMC41LjQuNCwgU3dhcAotICB2b2lkIHN3YXAoT3B0aW9uYWw8VD4mIHJocykgX19OT0VY
Q0VQVF8oZGV0YWlsXzo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8VD46OnZhbHVlICYm
IF9fTk9FWENFUFRfKHN3YXAoc3RkOjpkZWNsdmFsPFQmPigpLCBzdGQ6OmRlY2x2YWw8VCY+KCkp
KSkKLSAgewotICAgIGlmICAgICAgKGluaXRpYWxpemVkKCkgPT0gdHJ1ZSAgJiYgcmhzLmluaXRp
YWxpemVkKCkgPT0gZmFsc2UpIHsgcmhzLmluaXRpYWxpemUoc3RkOjptb3ZlKCoqdGhpcykpOyBj
bGVhcigpOyB9Ci0gICAgZWxzZSBpZiAoaW5pdGlhbGl6ZWQoKSA9PSBmYWxzZSAmJiByaHMuaW5p
dGlhbGl6ZWQoKSA9PSB0cnVlKSAgeyBpbml0aWFsaXplKHN0ZDo6bW92ZSgqcmhzKSk7IHJocy5j
bGVhcigpOyB9Ci0gICAgZWxzZSBpZiAoaW5pdGlhbGl6ZWQoKSA9PSB0cnVlICAmJiByaHMuaW5p
dGlhbGl6ZWQoKSA9PSB0cnVlKSAgeyB1c2luZyBzdGQ6OnN3YXA7IHN3YXAoKip0aGlzLCAqcmhz
KTsgfQotICB9Ci0KLSAgLy8gMjAuNS40LjUsIE9ic2VydmVycwotCi0gIGV4cGxpY2l0IGNvbnN0
ZXhwciBvcGVyYXRvciBib29sKCkgY29uc3QgX19OT0VYQ0VQVCB7IHJldHVybiBpbml0aWFsaXpl
ZCgpOyB9Ci0gIGNvbnN0ZXhwciBib29sIGhhc1ZhbHVlKCkgY29uc3QgX19OT0VYQ0VQVCB7IHJl
dHVybiBpbml0aWFsaXplZCgpOyB9Ci0KLSAgY29uc3RleHByIFQgY29uc3QqIG9wZXJhdG9yIC0+
KCkgY29uc3QgewotICAgIFJFTEVBU0VfQVNTRVJUX1VOREVSX0NPTlNURVhQUl9DT05URVhUKGlu
aXRpYWxpemVkKCkpOwotICAgIHJldHVybiBkYXRhcHRyKCk7Ci0gIH0KLQotICBPUFRJT05BTF9N
VVRBQkxFX0NPTlNURVhQUiBUKiBvcGVyYXRvciAtPigpIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9V
TkRFUl9DT05TVEVYUFJfQ09OVEVYVChpbml0aWFsaXplZCgpKTsKLSAgICByZXR1cm4gZGF0YXB0
cigpOwotICB9Ci0KLSAgY29uc3RleHByIFQgY29uc3QmIG9wZXJhdG9yICooKSBjb25zdCYgewot
ICAgIFJFTEVBU0VfQVNTRVJUX1VOREVSX0NPTlNURVhQUl9DT05URVhUKGluaXRpYWxpemVkKCkp
OwotICAgIHJldHVybiBjb250YWluZWRfdmFsKCk7Ci0gIH0KLQotICBPUFRJT05BTF9NVVRBQkxF
X0NPTlNURVhQUiBUJiBvcGVyYXRvciAqKCkgJiB7Ci0gICAgUkVMRUFTRV9BU1NFUlRfVU5ERVJf
Q09OU1RFWFBSX0NPTlRFWFQoaW5pdGlhbGl6ZWQoKSk7Ci0gICAgcmV0dXJuIGNvbnRhaW5lZF92
YWwoKTsKLSAgfQotCi0gIE9QVElPTkFMX01VVEFCTEVfQ09OU1RFWFBSIFQmJiBvcGVyYXRvciAq
KCkgJiYgewotICAgIFJFTEVBU0VfQVNTRVJUX1VOREVSX0NPTlNURVhQUl9DT05URVhUKGluaXRp
YWxpemVkKCkpOwotICAgIHJldHVybiBkZXRhaWxfOjpjb25zdGV4cHJfbW92ZShjb250YWluZWRf
dmFsKCkpOwotICB9Ci0KLSAgY29uc3RleHByIFQgY29uc3QmIHZhbHVlKCkgY29uc3QmIHsKLSAg
ICBSRUxFQVNFX0FTU0VSVF9VTkRFUl9DT05TVEVYUFJfQ09OVEVYVChpbml0aWFsaXplZCgpKTsK
LSAgICByZXR1cm4gY29udGFpbmVkX3ZhbCgpOwotICB9Ci0KLSAgT1BUSU9OQUxfTVVUQUJMRV9D
T05TVEVYUFIgVCYgdmFsdWUoKSAmIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9VTkRFUl9DT05TVEVY
UFJfQ09OVEVYVChpbml0aWFsaXplZCgpKTsKLSAgICByZXR1cm4gY29udGFpbmVkX3ZhbCgpOwot
ICB9Ci0KLSAgT1BUSU9OQUxfTVVUQUJMRV9DT05TVEVYUFIgVCYmIHZhbHVlKCkgJiYgewotICAg
IFJFTEVBU0VfQVNTRVJUX1VOREVSX0NPTlNURVhQUl9DT05URVhUKGluaXRpYWxpemVkKCkpOwot
ICAgIHJldHVybiBzdGQ6Om1vdmUoY29udGFpbmVkX3ZhbCgpKTsKLSAgfQotCi0jIGlmIE9QVElP
TkFMX0hBU19USElTX1JWQUxVRV9SRUZTID09IDEKLQotICB0ZW1wbGF0ZSA8Y2xhc3MgVj4KLSAg
Y29uc3RleHByIFQgdmFsdWVPcihWJiYgdikgY29uc3QmCi0gIHsKLSAgICByZXR1cm4gKnRoaXMg
PyAqKnRoaXMgOiBkZXRhaWxfOjpjb252ZXJ0PFQ+KGRldGFpbF86OmNvbnN0ZXhwcl9mb3J3YXJk
PFY+KHYpKTsKLSAgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBWPgotICBPUFRJT05BTF9NVVRBQkxF
X0NPTlNURVhQUiBUIHZhbHVlT3IoViYmIHYpICYmCi0gIHsKLSAgICByZXR1cm4gKnRoaXMgPyBk
ZXRhaWxfOjpjb25zdGV4cHJfbW92ZShjb25zdF9jYXN0PE9wdGlvbmFsPFQ+Jj4oKnRoaXMpLmNv
bnRhaW5lZF92YWwoKSkgOiBkZXRhaWxfOjpjb252ZXJ0PFQ+KGRldGFpbF86OmNvbnN0ZXhwcl9m
b3J3YXJkPFY+KHYpKTsKLSAgfQotCi0jIGVsc2UKLQotICB0ZW1wbGF0ZSA8Y2xhc3MgVj4KLSAg
Y29uc3RleHByIFQgdmFsdWVPcihWJiYgdikgY29uc3QKLSAgewotICAgIHJldHVybiAqdGhpcyA/
ICoqdGhpcyA6IGRldGFpbF86OmNvbnZlcnQ8VD4oZGV0YWlsXzo6Y29uc3RleHByX2ZvcndhcmQ8
Vj4odikpOwotICB9Ci0KLSMgZW5kaWYKLQotICAvLyAyMC42LjMuNiwgbW9kaWZpZXJzCi0gIHZv
aWQgcmVzZXQoKSBfX05PRVhDRVBUIHsgY2xlYXIoKTsgfQotfTsKLQotCi10ZW1wbGF0ZSA8Y2xh
c3MgVD4KLWNsYXNzIE9wdGlvbmFsPFQmPgotewotICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LSAgc3RhdGljX2Fzc2VydCggIXN0ZDo6aXNfc2FtZTxULCBudWxsb3B0X3Q+Ojp2YWx1ZSwgImJh
ZCBUIiApOwotICBzdGF0aWNfYXNzZXJ0KCAhc3RkOjppc19zYW1lPFQsIHN0ZDo6aW5fcGxhY2Vf
dD46OnZhbHVlLCAiYmFkIFQiICk7Ci0gIFQqIHJlZjsKLQotcHVibGljOgotCi0gIC8vIDIwLjUu
NS4xLCBjb25zdHJ1Y3Rpb24vZGVzdHJ1Y3Rpb24KLSAgY29uc3RleHByIE9wdGlvbmFsKCkgX19O
T0VYQ0VQVCA6IHJlZihudWxscHRyKSB7fQotCi0gIGNvbnN0ZXhwciBPcHRpb25hbChudWxsb3B0
X3QpIF9fTk9FWENFUFQgOiByZWYobnVsbHB0cikge30KLQotICBjb25zdGV4cHIgT3B0aW9uYWwo
VCYgdikgX19OT0VYQ0VQVCA6IHJlZihkZXRhaWxfOjpzdGF0aWNfYWRkcmVzc29mKHYpKSB7fQot
Ci0gIE9wdGlvbmFsKFQmJikgPSBkZWxldGU7Ci0KLSAgY29uc3RleHByIE9wdGlvbmFsKGNvbnN0
IE9wdGlvbmFsJiByaHMpIF9fTk9FWENFUFQgOiByZWYocmhzLnJlZikge30KLQotICBleHBsaWNp
dCBjb25zdGV4cHIgT3B0aW9uYWwoc3RkOjppbl9wbGFjZV90LCBUJiB2KSBfX05PRVhDRVBUIDog
cmVmKGRldGFpbF86OnN0YXRpY19hZGRyZXNzb2YodikpIHt9Ci0KLSAgZXhwbGljaXQgT3B0aW9u
YWwoc3RkOjppbl9wbGFjZV90LCBUJiYpID0gZGVsZXRlOwotCi0gIH5PcHRpb25hbCgpID0gZGVm
YXVsdDsKLQotICAvLyAyMC41LjUuMiwgbXV0YXRpb24KLSAgT3B0aW9uYWwmIG9wZXJhdG9yPShu
dWxsb3B0X3QpIF9fTk9FWENFUFQgewotICAgIHJlZiA9IG51bGxwdHI7Ci0gICAgcmV0dXJuICp0
aGlzOwotICB9Ci0KLSAgLy8gT3B0aW9uYWwmIG9wZXJhdG9yPShjb25zdCBPcHRpb25hbCYgcmhz
KSBfX05PRVhDRVBUIHsKLSAgICAvLyByZWYgPSByaHMucmVmOwotICAgIC8vIHJldHVybiAqdGhp
czsKLSAgLy8gfQotCi0gIC8vIE9wdGlvbmFsJiBvcGVyYXRvcj0oT3B0aW9uYWwmJiByaHMpIF9f
Tk9FWENFUFQgewotICAgIC8vIHJlZiA9IHJocy5yZWY7Ci0gICAgLy8gcmV0dXJuICp0aGlzOwot
ICAvLyB9Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gIGF1dG8gb3BlcmF0b3I9KFUmJiBy
aHMpIF9fTk9FWENFUFQKLSAgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWYKLSAgPAotICAgIHN0
ZDo6aXNfc2FtZTx0eXBlbmFtZSBzdGQ6OmRlY2F5PFU+Ojp0eXBlLCBPcHRpb25hbDxUJj4+Ojp2
YWx1ZSwKLSAgICBPcHRpb25hbCYKLSAgPjo6dHlwZQotICB7Ci0gICAgcmVmID0gcmhzLnJlZjsK
LSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgYXV0
byBvcGVyYXRvcj0oVSYmIHJocykgX19OT0VYQ0VQVAotICAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZgotICA8Ci0gICAgIXN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBzdGQ6OmRlY2F5PFU+Ojp0eXBl
LCBPcHRpb25hbDxUJj4+Ojp2YWx1ZSwKLSAgICBPcHRpb25hbCYKLSAgPjo6dHlwZQotICA9IGRl
bGV0ZTsKLQotICB2b2lkIGVtcGxhY2UoVCYgdikgX19OT0VYQ0VQVCB7Ci0gICAgcmVmID0gZGV0
YWlsXzo6c3RhdGljX2FkZHJlc3NvZih2KTsKLSAgfQotCi0gIHZvaWQgZW1wbGFjZShUJiYpID0g
ZGVsZXRlOwotCi0KLSAgdm9pZCBzd2FwKE9wdGlvbmFsPFQmPiYgcmhzKSBfX05PRVhDRVBUCi0g
IHsKLSAgICBzdGQ6OnN3YXAocmVmLCByaHMucmVmKTsKLSAgfQotCi0gIC8vIDIwLjUuNS4zLCBv
YnNlcnZlcnMKLSAgY29uc3RleHByIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7Ci0gICAgUkVMRUFT
RV9BU1NFUlRfVU5ERVJfQ09OU1RFWFBSX0NPTlRFWFQocmVmKTsKLSAgICByZXR1cm4gcmVmOwot
ICB9Ci0KLSAgY29uc3RleHByIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsKLSAgICBSRUxFQVNFX0FT
U0VSVF9VTkRFUl9DT05TVEVYUFJfQ09OVEVYVChyZWYpOwotICAgIHJldHVybiAqcmVmOwotICB9
Ci0KLSAgY29uc3RleHByIFQmIHZhbHVlKCkgY29uc3QgewotICAgIFJFTEVBU0VfQVNTRVJUX1VO
REVSX0NPTlNURVhQUl9DT05URVhUKHJlZigpKTsKLSAgICByZXR1cm4gKnJlZjsKLSAgfQotCi0g
IGV4cGxpY2l0IGNvbnN0ZXhwciBvcGVyYXRvciBib29sKCkgY29uc3QgX19OT0VYQ0VQVCB7Ci0g
ICAgcmV0dXJuIHJlZiAhPSBudWxscHRyOwotICB9Ci0KLSAgY29uc3RleHByIGJvb2wgaGFzVmFs
dWUoKSBjb25zdCBfX05PRVhDRVBUIHsKLSAgICByZXR1cm4gcmVmICE9IG51bGxwdHI7Ci0gIH0K
LQotICB0ZW1wbGF0ZSA8Y2xhc3MgVj4KLSAgY29uc3RleHByIHR5cGVuYW1lIHN0ZDo6ZGVjYXk8
VD46OnR5cGUgdmFsdWVPcihWJiYgdikgY29uc3QKLSAgewotICAgIHJldHVybiAqdGhpcyA/ICoq
dGhpcyA6IGRldGFpbF86OmNvbnZlcnQ8dHlwZW5hbWUgc3RkOjpkZWNheTxUPjo6dHlwZT4oZGV0
YWlsXzo6Y29uc3RleHByX2ZvcndhcmQ8Vj4odikpOwotICB9Ci0KLSAgLy8geC54LngueCwgbW9k
aWZpZXJzCi0gIHZvaWQgcmVzZXQoKSBfX05PRVhDRVBUIHsgcmVmID0gbnVsbHB0cjsgfQotfTsK
LQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLWNsYXNzIE9wdGlvbmFsPFQmJj4KLXsKLSAgc3RhdGlj
X2Fzc2VydCggc2l6ZW9mKFQpID09IDAsICJPcHRpb25hbCBydmFsdWUgcmVmZXJlbmNlcyBkaXNh
bGxvd2VkIiApOwotfTsKLQotCi0vLyAyMC41LjgsIFJlbGF0aW9uYWwgb3BlcmF0b3JzCi10ZW1w
bGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPcHRpb25hbDxU
PiYgeCwgY29uc3QgT3B0aW9uYWw8VD4mIHkpCi17Ci0gIHJldHVybiBib29sKHgpICE9IGJvb2wo
eSkgPyBmYWxzZSA6IGJvb2woeCkgPT0gZmFsc2UgPyB0cnVlIDogKnggPT0gKnk7Ci19Ci0KLXRl
bXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE9wdGlvbmFs
PFQ+JiB4LCBjb25zdCBPcHRpb25hbDxUPiYgeSkKLXsKLSAgcmV0dXJuICEoeCA9PSB5KTsKLX0K
LQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChjb25zdCBPcHRp
b25hbDxUPiYgeCwgY29uc3QgT3B0aW9uYWw8VD4mIHkpCi17Ci0gIHJldHVybiAoIXkpID8gZmFs
c2UgOiAoIXgpID8gdHJ1ZSA6ICp4IDwgKnk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25z
dGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0IE9wdGlvbmFs
PFQ+JiB5KQotewotICByZXR1cm4gKHkgPCB4KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNv
bnN0ZXhwciBib29sIG9wZXJhdG9yPD0oY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0IE9wdGlv
bmFsPFQ+JiB5KQotewotICByZXR1cm4gISh5IDwgeCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBU
PiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBjb25zdCBP
cHRpb25hbDxUPiYgeSkKLXsKLSAgcmV0dXJuICEoeCA8IHkpOwotfQotCi0KLS8vIDIwLjUuOSwg
Q29tcGFyaXNvbiB3aXRoIG51bGxvcHQKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBudWxsb3B0X3QpIF9fTk9FWENFUFQK
LXsKLSAgcmV0dXJuICgheCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9v
bCBvcGVyYXRvcj09KG51bGxvcHRfdCwgY29uc3QgT3B0aW9uYWw8VD4mIHgpIF9fTk9FWENFUFQK
LXsKLSAgcmV0dXJuICgheCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBudWxsb3B0X3QpIF9fTk9FWENFUFQK
LXsKLSAgcmV0dXJuIGJvb2woeCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIg
Ym9vbCBvcGVyYXRvciE9KG51bGxvcHRfdCwgY29uc3QgT3B0aW9uYWw8VD4mIHgpIF9fTk9FWENF
UFQKLXsKLSAgcmV0dXJuIGJvb2woeCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4
cHIgYm9vbCBvcGVyYXRvcjwoY29uc3QgT3B0aW9uYWw8VD4mLCBudWxsb3B0X3QpIF9fTk9FWENF
UFQKLXsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHBy
IGJvb2wgb3BlcmF0b3I8KG51bGxvcHRfdCwgY29uc3QgT3B0aW9uYWw8VD4mIHgpIF9fTk9FWENF
UFQKLXsKLSAgcmV0dXJuIGJvb2woeCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4
cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBudWxsb3B0X3QpIF9fTk9F
WENFUFQKLXsKLSAgcmV0dXJuICgheCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4
cHIgYm9vbCBvcGVyYXRvcjw9KG51bGxvcHRfdCwgY29uc3QgT3B0aW9uYWw8VD4mKSBfX05PRVhD
RVBUCi17Ci0gIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHBy
IGJvb2wgb3BlcmF0b3I+KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBudWxsb3B0X3QpIF9fTk9FWENF
UFQKLXsKLSAgcmV0dXJuIGJvb2woeCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4
cHIgYm9vbCBvcGVyYXRvcj4obnVsbG9wdF90LCBjb25zdCBPcHRpb25hbDxUPiYpIF9fTk9FWENF
UFQKLXsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHBy
IGJvb2wgb3BlcmF0b3I+PShjb25zdCBPcHRpb25hbDxUPiYsIG51bGxvcHRfdCkgX19OT0VYQ0VQ
VAotewotICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBi
b29sIG9wZXJhdG9yPj0obnVsbG9wdF90LCBjb25zdCBPcHRpb25hbDxUPiYgeCkgX19OT0VYQ0VQ
VAotewotICByZXR1cm4gKCF4KTsKLX0KLQotCi0KLS8vIDIwLjUuMTAsIENvbXBhcmlzb24gd2l0
aCBUCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBP
cHRpb25hbDxUPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA9PSB2
IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPFQ+JiB4KQotewotICByZXR1cm4gYm9vbCh4
KSA/IHYgPT0gKnggOiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBi
b29sIG9wZXJhdG9yIT0oY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0IFQmIHYpCi17Ci0gIHJl
dHVybiBib29sKHgpID8gKnggIT0gdiA6IHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPFQ+JiB4
KQotewotICByZXR1cm4gYm9vbCh4KSA/IHYgIT0gKnggOiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8
Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBj
b25zdCBUJiB2KQotewotICByZXR1cm4gYm9vbCh4KSA/ICp4IDwgdiA6IHRydWU7Ci19Ci0KLXRl
bXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgVCYgdiwgY29u
c3QgT3B0aW9uYWw8VD4mIHgpCi17Ci0gIHJldHVybiBib29sKHgpID8gdiA+ICp4IDogdHJ1ZTsK
LX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihjb25zdCBP
cHRpb25hbDxUPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA+IHYg
OiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9y
PChjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxUPiYgeCkKLXsKLSAgcmV0dXJuIGJvb2woeCkg
PyB2IDwgKnggOiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29s
IG9wZXJhdG9yPj0oY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0IFQmIHYpCi17Ci0gIHJldHVy
biBib29sKHgpID8gKnggPj0gdiA6IGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29u
c3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxUPiYgeCkK
LXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2IDw9ICp4IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxj
bGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBj
b25zdCBUJiB2KQotewotICByZXR1cm4gYm9vbCh4KSA/ICp4IDw9IHYgOiB0cnVlOwotfQotCi10
ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCBUJiB2LCBj
b25zdCBPcHRpb25hbDxUPiYgeCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2ID49ICp4IDogdHJ1
ZTsKLX0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgT3B0aW9uYWwgPSBzdGQ6Om9wdGlv
bmFsPFQ+OworY29uc3RleHByIGF1dG8gbnVsbG9wdCA9IHN0ZDo6bnVsbG9wdDsKK3VzaW5nIG51
bGxvcHRfdCA9IHN0ZDo6bnVsbG9wdF90OwogCi0vLyBDb21wYXJpc29uIG9mIE9wdGlvbmFsPFQm
PiB3aXRoIFQKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IE9wdGlvbmFsPFQmPiYgeCwgY29uc3QgVCYgdikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+IGNvbnN0ZXhwciBzdGQ6Om9wdGlvbmFsPHN0ZDo6ZGVj
YXlfdDxUPj4gbWFrZU9wdGlvbmFsKFQmJiB2YWx1ZSkKIHsKLSAgcmV0dXJuIGJvb2woeCkgPyAq
eCA9PSB2IDogZmFsc2U7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV9vcHRpb25hbDxzdGQ6OmRlY2F5
X3Q8VD4+KHN0ZDo6Zm9yd2FyZDxUPih2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVD4g
Y29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxUJj4m
IHgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPiBjb25z
dGV4cHIgc3RkOjpvcHRpb25hbDxUPiBtYWtlT3B0aW9uYWwoQXJndW1lbnRUeXBlcyYmLi4uIGFy
Z3VtZW50cykKIHsKLSAgcmV0dXJuIGJvb2woeCkgPyB2ID09ICp4IDogZmFsc2U7CisgICAgcmV0
dXJuIHN0ZDo6bWFrZV9vcHRpb25hbDxUPihzdGQ6OmZvcndhcmQ8QXJndW1lbnRUeXBlcz4oYXJn
dW1lbnRzKS4uLik7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IE9wdGlvbmFsPFQmPiYgeCwgY29uc3QgVCYgdikKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+IGNvbnN0ZXhwciBz
dGQ6Om9wdGlvbmFsPFQ+IG1ha2VPcHRpb25hbChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VT4gbGlz
dCwgQXJndW1lbnRUeXBlcyYmLi4uIGFyZ3VtZW50cykKIHsKLSAgcmV0dXJuIGJvb2woeCkgPyAq
eCAhPSB2IDogdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjptYWtlX29wdGlvbmFsPFQ+KGxpc3QsIHN0
ZDo6Zm9yd2FyZDxBcmd1bWVudFR5cGVzPihhcmd1bWVudHMpLi4uKTsKIH0KIAotdGVtcGxhdGUg
PGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgVCYgdiwgY29uc3QgT3B0
aW9uYWw8VCY+JiB4KQorLy8gRklYTUU6IFdlIHByb2JhYmx5IGRvbid0IG5lZWQgdGhpczsgaXQn
cyBvbmx5IHVzZWQgaW4gNSBwbGFjZXMuCit0ZW1wbGF0ZTx0eXBlbmFtZSBPcHRpb25hbFR5cGUs
IGNsYXNzIENhbGxiYWNrPiBhdXRvIHZhbHVlT3JDb21wdXRlKE9wdGlvbmFsVHlwZSBvcHRpb25h
bCwgQ2FsbGJhY2sgY2FsbGJhY2spIC0+IHR5cGVuYW1lIE9wdGlvbmFsVHlwZTo6dmFsdWVfdHlw
ZQogewotICByZXR1cm4gYm9vbCh4KSA/IHYgIT0gKnggOiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8
Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IE9wdGlvbmFsPFQmPiYgeCwg
Y29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA8IHYgOiB0cnVlOwotfQotCi10
ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFQmIHYsIGNv
bnN0IE9wdGlvbmFsPFQmPiYgeCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2ID4gKnggOiB0cnVl
OwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0
IE9wdGlvbmFsPFQmPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA+
IHYgOiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJh
dG9yPChjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxUJj4mIHgpCi17Ci0gIHJldHVybiBib29s
KHgpID8gdiA8ICp4IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIg
Ym9vbCBvcGVyYXRvcj49KGNvbnN0IE9wdGlvbmFsPFQmPiYgeCwgY29uc3QgVCYgdikKLXsKLSAg
cmV0dXJuIGJvb2woeCkgPyAqeCA+PSB2IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBU
PiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPFQm
PiYgeCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2IDw9ICp4IDogZmFsc2U7Ci19Ci0KLXRlbXBs
YXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IE9wdGlvbmFsPFQm
PiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA8PSB2IDogdHJ1ZTsK
LX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0oY29uc3Qg
VCYgdiwgY29uc3QgT3B0aW9uYWw8VCY+JiB4KQotewotICByZXR1cm4gYm9vbCh4KSA/IHYgPj0g
KnggOiB0cnVlOwotfQotCi0vLyBDb21wYXJpc29uIG9mIE9wdGlvbmFsPFQgY29uc3QmPiB3aXRo
IFQKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE9w
dGlvbmFsPGNvbnN0IFQmPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAq
eCA9PSB2IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPGNvbnN0IFQmPiYgeCkKLXsKLSAg
cmV0dXJuIGJvb2woeCkgPyB2ID09ICp4IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBU
PiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE9wdGlvbmFsPGNvbnN0IFQmPiYgeCwg
Y29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCAhPSB2IDogdHJ1ZTsKLX0KLQot
dGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgVCYgdiwg
Y29uc3QgT3B0aW9uYWw8Y29uc3QgVCY+JiB4KQotewotICByZXR1cm4gYm9vbCh4KSA/IHYgIT0g
KnggOiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0
b3I8KGNvbnN0IE9wdGlvbmFsPGNvbnN0IFQmPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJu
IGJvb2woeCkgPyAqeCA8IHYgOiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPGNvbnN0IFQmPiYg
eCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2ID4gKnggOiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8
Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IE9wdGlvbmFsPGNvbnN0IFQm
PiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA+IHYgOiBmYWxzZTsK
LX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChjb25zdCBU
JiB2LCBjb25zdCBPcHRpb25hbDxjb25zdCBUJj4mIHgpCi17Ci0gIHJldHVybiBib29sKHgpID8g
diA8ICp4IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBv
cGVyYXRvcj49KGNvbnN0IE9wdGlvbmFsPGNvbnN0IFQmPiYgeCwgY29uc3QgVCYgdikKLXsKLSAg
cmV0dXJuIGJvb2woeCkgPyAqeCA+PSB2IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBU
PiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPGNv
bnN0IFQmPiYgeCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2IDw9ICp4IDogZmFsc2U7Ci19Ci0K
LXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IE9wdGlv
bmFsPGNvbnN0IFQmPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA8
PSB2IDogdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJh
dG9yPj0oY29uc3QgVCYgdiwgY29uc3QgT3B0aW9uYWw8Y29uc3QgVCY+JiB4KQotewotICByZXR1
cm4gYm9vbCh4KSA/IHYgPj0gKnggOiB0cnVlOwotfQotCi0KLS8vIDIwLjUuMTIsIFNwZWNpYWxp
emVkIGFsZ29yaXRobXMKLXRlbXBsYXRlIDxjbGFzcyBUPgotdm9pZCBzd2FwKE9wdGlvbmFsPFQ+
JiB4LCBPcHRpb25hbDxUPiYgeSkgX19OT0VYQ0VQVF8oX19OT0VYQ0VQVF8oeC5zd2FwKHkpKSkK
LXsKLSAgeC5zd2FwKHkpOwotfQotCi0KLXRlbXBsYXRlIDxjbGFzcyBUPgotY29uc3RleHByIE9w
dGlvbmFsPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VD46OnR5cGU+IG1ha2VPcHRpb25hbChUJiYgdikK
LXsKLSAgcmV0dXJuIE9wdGlvbmFsPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VD46OnR5cGU+KGRldGFp
bF86OmNvbnN0ZXhwcl9mb3J3YXJkPFQ+KHYpKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFg+Ci1j
b25zdGV4cHIgT3B0aW9uYWw8WCY+IG1ha2VPcHRpb25hbChzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PFg+IHYpCi17Ci0gIHJldHVybiBPcHRpb25hbDxYJj4odi5nZXQoKSk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdURgotCi1uYW1lc3BhY2Ugc3RkCi17Ci0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgot
ICBzdHJ1Y3QgaGFzaDxXVEY6Ok9wdGlvbmFsPFQ+PgotICB7Ci0gICAgdHlwZWRlZiB0eXBlbmFt
ZSBoYXNoPFQ+OjpyZXN1bHRfdHlwZSByZXN1bHRfdHlwZTsKLSAgICB0eXBlZGVmIFdURjo6T3B0
aW9uYWw8VD4gYXJndW1lbnRfdHlwZTsKLQotICAgIGNvbnN0ZXhwciByZXN1bHRfdHlwZSBvcGVy
YXRvcigpKGFyZ3VtZW50X3R5cGUgY29uc3QmIGFyZykgY29uc3QgewotICAgICAgcmV0dXJuIGFy
ZyA/IHN0ZDo6aGFzaDxUPnt9KCphcmcpIDogcmVzdWx0X3R5cGV7fTsKLSAgICB9Ci0gIH07Ci0K
LSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gIHN0cnVjdCBoYXNoPFdURjo6T3B0aW9uYWw8VCY+
PgotICB7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBoYXNoPFQ+OjpyZXN1bHRfdHlwZSByZXN1bHRf
dHlwZTsKLSAgICB0eXBlZGVmIFdURjo6T3B0aW9uYWw8VCY+IGFyZ3VtZW50X3R5cGU7Ci0KLSAg
ICBjb25zdGV4cHIgcmVzdWx0X3R5cGUgb3BlcmF0b3IoKShhcmd1bWVudF90eXBlIGNvbnN0JiBh
cmcpIGNvbnN0IHsKLSAgICAgIHJldHVybiBhcmcgPyBzdGQ6Omhhc2g8VD57fSgqYXJnKSA6IHJl
c3VsdF90eXBle307Ci0gICAgfQotICB9OwotfQotCi0jIHVuZGVmIFRSMl9PUFRJT05BTF9SRVFV
SVJFUwotCi1uYW1lc3BhY2UgV1RGIHsKLQotLy8gLS0gV2ViS2l0IEFkZGl0aW9ucyAtLQotdGVt
cGxhdGUgPGNsYXNzIE9wdGlvbmFsVHlwZSwgY2xhc3MgQ2FsbGJhY2s+Ci1BTFdBWVNfSU5MSU5F
Ci1hdXRvIHZhbHVlT3JDb21wdXRlKE9wdGlvbmFsVHlwZSBPcHRpb25hbCwgQ2FsbGJhY2sgY2Fs
bGJhY2spIC0+IHR5cGVuYW1lIE9wdGlvbmFsVHlwZTo6dmFsdWVfdHlwZQotewotICAgIGlmIChP
cHRpb25hbCkKLSAgICAgICAgcmV0dXJuICpPcHRpb25hbDsKLSAgICByZXR1cm4gY2FsbGJhY2so
KTsKKyAgICByZXR1cm4gb3B0aW9uYWwgPyAqb3B0aW9uYWwgOiBjYWxsYmFjaygpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXVEYKQEAgLTEwNDksMyArNTQsNyBAQCBhdXRvIHZhbHVlT3JDb21wdXRl
KE9wdGlvbmFsVHlwZSBPcHRpb25hbCwgQ2FsbGJhY2sgY2FsbGJhY2spIC0+IHR5cGVuYW1lIE9w
dGlvbgogdXNpbmcgV1RGOjpPcHRpb25hbDsKIHVzaW5nIFdURjo6bWFrZU9wdGlvbmFsOwogdXNp
bmcgV1RGOjp2YWx1ZU9yQ29tcHV0ZTsKKworLy8gRklYTUU6IFRoZXNlIG1hY3JvcyBhcmUgYSB3
b3JrYXJvdW5kIHRvIGFsbG93IHVzIHRvIHVzZSBzdGQ6Om9wdGlvbmFsIHdpdGhvdXQgYSBnbG9i
YWwgcmVwbGFjZTsgdGhleSBjYW4gYmUgcmVtb3ZlZCBhZnRlciBzYWlkIGdsb2JhbCByZXBsYWNl
LgorI2RlZmluZSBoYXNWYWx1ZSBoYXNfdmFsdWUKKyNkZWZpbmUgdmFsdWVPciB2YWx1ZV9vcgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU2Vjb25kcy5oIGIvU291cmNlL1dURi93dGYvU2Vj
b25kcy5oCmluZGV4IGMxYmUzOTI3MzgyZWI2YmZlOTUzMDc4ZmU1YmEyMDE3ZjJmOTI5YjYuLjUz
YmNiYzY1OTlkYzUzMGM4N2Y4NTc2YzZhOWRhZGNiM2EwNjIxMzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL1NlY29uZHMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmgKQEAgLTI1
LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5o
PgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2Rl
ci5oIGIvU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVyLmgKaW5kZXgg
Y2M3NDhjOTNhYzgyODEyZTg2NmFmNjdlY2ZkOGZmNjNlOWNkNGU3OC4uNjE1YmQxMjU3Yzg5NzI0
MDc0M2YzYjU1YTI2MjEzYjYyYTAzOTA4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvcGVy
c2lzdGVuY2UvUGVyc2lzdGVudENvZGVyLmgKKysrIGIvU291cmNlL1dURi93dGYvcGVyc2lzdGVu
Y2UvUGVyc2lzdGVudENvZGVyLmgKQEAgLTI1LDEwICsyNSw5IEBACiAKICNwcmFnbWEgb25jZQog
Ci1uYW1lc3BhY2UgV1RGIHsKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCi10ZW1wbGF0ZSA8
Y2xhc3MgVD4KLWNsYXNzIE9wdGlvbmFsOworbmFtZXNwYWNlIFdURiB7CiAKIG5hbWVzcGFjZSBQ
ZXJzaXN0ZW5jZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1ZQOVV0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVlA5
VXRpbGl0aWVzLmgKaW5kZXggZGEzMDkwMGE0ZWM3MjM4M2UzZWIwMzNkNWM0NjY1YzA3ZWNkOTU3
YS4uYTE4OGE3NDRkNDI2NjVlZjg0NmM1MjA2NTEwZTAwNGI1MjQzOTlmZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVlA5VXRpbGl0aWVzLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVlA5VXRpbGl0aWVzLmgKQEAgLTE0NCwxNCAr
MTQ0LDE0IEBAIHN0cnVjdCBTY3JlZW5EYXRhT3ZlcnJpZGVzIHsKICAgICBzdGF0aWMgT3B0aW9u
YWw8U2NyZWVuRGF0YU92ZXJyaWRlcz4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewog
I2RlZmluZSBERUNPREUobmFtZSwgdHlwZSkgXAotICAgIE9wdGlvbmFsPHR5cGU+IG5hbWU7IFwK
LSAgICBkZWNvZGVyID4+IG5hbWU7IFwKLSAgICBpZiAoIW5hbWUpIFwKLSAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsgXAotCi0gICAgREVDT0RFKHdpZHRoLCBkb3VibGUpOwotICAgIERFQ09E
RShoZWlnaHQsIGRvdWJsZSk7Ci0gICAgREVDT0RFKHNjYWxlLCBkb3VibGUpOworICAgICAgICBP
cHRpb25hbDx0eXBlPiBuYW1lOyBcCisgICAgICAgIGRlY29kZXIgPj4gbmFtZTsgXAorICAgICAg
ICBpZiAoIW5hbWUpIFwKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7IFwKKworICAg
ICAgICBERUNPREUod2lkdGgsIGRvdWJsZSk7CisgICAgICAgIERFQ09ERShoZWlnaHQsIGRvdWJs
ZSk7CisgICAgICAgIERFQ09ERShzY2FsZSwgZG91YmxlKTsKICN1bmRlZiBERUNPREUKIAogICAg
IHJldHVybiB7eyBXVEZNb3ZlKCp3aWR0aCksIFdURk1vdmUoKmhlaWdodCksIFdURk1vdmUoKnNj
YWxlKSB9fTsKQEAgLTE2Myw1ICsxNjMsOSBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFNjcmVlbkRhdGFPdmVycmlkZXMmIGEsIGNvbnN0IFNjcmVlbkRhdGFPdmVycmlkZXMmCiAgICAg
cmV0dXJuIGEud2lkdGggPT0gYi53aWR0aCAmJiBhLmhlaWdodCA9PSBiLmhlaWdodCAmJiBhLnNj
YWxlID09IGIuc2NhbGU7CiB9CiAKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgU2NyZWVu
RGF0YU92ZXJyaWRlcyYgYSwgY29uc3QgU2NyZWVuRGF0YU92ZXJyaWRlcyYgYikKK3sKKyAgICBy
ZXR1cm4gIShhID09IGIpOworfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvV2ViS2l0
TWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwCmluZGV4IGFhN2NlZWI3Mzk4YWUxMTlkZGVhZjA1MTc2
ZGUyZThmMWM0YzYyN2QuLjdmMGE5ZDRhY2IwZjMxMmZjNWQwZWIzYjk2ZDY0NWU0NmMwY2Q1Zjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9t
c2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIu
Y3BwCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCiAjaW5j
bHVkZSAiTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lci5oIgogI2luY2x1ZGUgIlZpZGVvVHJhY2tQ
cml2YXRlR1N0cmVhbWVyLmgiCi0KKyNpbmNsdWRlIDxjYXNzZXJ0PgogI2luY2x1ZGUgPGdzdC9n
c3QuaD4KICNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0RhdGFNdXRl
eC5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGli
d2VicnRjL0dTdHJlYW1lclZpZGVvRW5jb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9FbmNvZGVyLmNwcAppbmRleCA4
NGU3MTI0ZDkyNzZmNTQ2ZmZlMDhhZTA0NTM0ZWQzNDBmY2RiYjU4Li5kMzQyODg0YWFlNjBkMzI0
NGMxZjNiN2QwMzZlMTYyZjgxOTcyN2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9FbmNvZGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVy
VmlkZW9FbmNvZGVyLmNwcApAQCAtODAsMTEgKzgwLDExIEBAIHB1YmxpYzoKICAgICAgICAgfSkp
OwogICAgIH0KIAotICAgIHN0YXRpYyBPcHRpb25hbDxFbmNvZGVyRGVmaW5pdGlvbiY+IGRlZmlu
aXRpb24oRW5jb2RlcklkIGlkKQorICAgIHN0YXRpYyBFbmNvZGVyRGVmaW5pdGlvbiogZGVmaW5p
dGlvbihFbmNvZGVySWQgaWQpCiAgICAgewogICAgICAgICBpZiAoaWQgPT0gTm9uZSkKLSAgICAg
ICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIHJldHVybiBzaW5nbGV0b24oKVtpZF07CisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuICZzaW5nbGV0b24oKVtpZF07
CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDNjNzU2
N2M4MWJiYTgyMmM0OGFiMDZlZDI0ZGUyOTY0OTgzMDE4ZjIuLmFhMTQxZDhlZjc1MmI4NDY2ZjVk
N2UxMTBmZTI4NmI5MTQxMmJmZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAK
QEAgLTYwMjcsNyArNjAyNyw3IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRIYXJkd2FyZVZQOURlY29k
ZXJEaXNhYmxlZEZvclRlc3RpbmcoYm9vbCBkaXNhYmxlZCkKIHZvaWQgSW50ZXJuYWxzOjpzZXRW
UDlTY3JlZW5TaXplQW5kU2NhbGVGb3JUZXN0aW5nKGRvdWJsZSB3aWR0aCwgZG91YmxlIGhlaWdo
dCwgZG91YmxlIHNjYWxlKQogewogI2lmIEVOQUJMRShWUDkpICYmIFBMQVRGT1JNKENPQ09BKQot
ICAgIFZQOVRlc3RpbmdPdmVycmlkZXM6OnNpbmdsZXRvbigpLnNldFZQOVNjcmVlblNpemVBbmRT
Y2FsZShtYWtlT3B0aW9uYWw8U2NyZWVuRGF0YU92ZXJyaWRlcz4oeyB3aWR0aCwgaGVpZ2h0LCBz
Y2FsZSB9KSk7CisgICAgVlA5VGVzdGluZ092ZXJyaWRlczo6c2luZ2xldG9uKCkuc2V0VlA5U2Ny
ZWVuU2l6ZUFuZFNjYWxlKFNjcmVlbkRhdGFPdmVycmlkZXMgeyB3aWR0aCwgaGVpZ2h0LCBzY2Fs
ZSB9KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKICAgICBVTlVTRURfUEFSQU0o
aGVpZ2h0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50
Q29kZXIuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXIuaAppbmRl
eCAzYWI5ZmNjNWVkMTAzNTU5YjFiNmViM2I0ZWQxMDZmNWJiZDI2OTZiLi41ZWZkMzI2ZWJmZmEx
M2IyMzA1NmJjYTQxNWM3Y2E2NmIwMTVkNjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9Bcmd1bWVudENvZGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9J
UEMvQXJndW1lbnRDb2Rlci5oCkBAIC01Niw3ICs1Niw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lID0gdm9pZD4gc3RydWN0IEFyZ3VtZW50Q29kZXIgewogICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgIFQgdDsKICAgICAgICAgICAgIGlmIChUOjpkZWNvZGUoZGVjb2RlciwgdCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdURk1v
dmUodCk7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvVG91Y2hCYXJNZW51RGF0YS5oIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvVG91Y2hCYXJNZW51RGF0YS5oCmluZGV4IDMxYWMwOTI4M2Q4
ZTlhMTZmNDFkNDU4Yjc5OWM5MmNkMDQ4YTAwYTEuLjczY2MwN2E3NTE5OWM0MzA5MzAwZWM1ZTg2
NGJjOGE0NWM0NDhiYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1RvdWNoQmFy
TWVudURhdGEuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Ub3VjaEJhck1lbnVEYXRhLmgK
QEAgLTI3LDkgKzI3LDggQEAKIAogI2lmIEhBVkUoVE9VQ0hfQkFSKQogCi0jaW5jbHVkZSAiQXJn
dW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJUb3VjaEJhck1lbnVJdGVtRGF0YS5oIgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFt
ZXNwYWNlIElQQyB7CiBjbGFzcyBEZWNvZGVyOwpAQCAtNDQsOSArNDMsOCBAQCBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogY2xhc3MgVG91Y2hCYXJNZW51RGF0YSB7CiBwdWJsaWM6Ci0gICAgZXhwbGlj
aXQgVG91Y2hCYXJNZW51RGF0YSgpID0gZGVmYXVsdDsKKyAgICBUb3VjaEJhck1lbnVEYXRhKCkg
PSBkZWZhdWx0OwogICAgIGV4cGxpY2l0IFRvdWNoQmFyTWVudURhdGEoY29uc3QgV2ViQ29yZTo6
SFRNTE1lbnVFbGVtZW50Jik7Ci0gICAgZXhwbGljaXQgVG91Y2hCYXJNZW51RGF0YShjb25zdCBU
b3VjaEJhck1lbnVEYXRhJikgPSBkZWZhdWx0OwogCiAgICAgdm9pZCBhZGRNZW51SXRlbShjb25z
dCBUb3VjaEJhck1lbnVJdGVtRGF0YSYpOwogICAgIHZvaWQgcmVtb3ZlTWVudUl0ZW0oY29uc3Qg
VG91Y2hCYXJNZW51SXRlbURhdGEmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKaW5kZXggNDRjOGQ3
NTIzYWExNGQyMjI3Y2UzZDAxNTY0MjM4ZTY2NmZhMGRjMi4uZTk0ZTA2Y2YyMDJlNDE5MTkxMjE0
NGRiMTcxNTIxZjNhMzdmMDVlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKQEAgLTM2OSwxMiAr
MzY5LDEyIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnN3aXRjaFRvQnJvd3NpbmdDb250
ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1CiAgICAgICAgIEFTWU5DX0ZBSUxfV0lU
SF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAogICAgIGJvb2wgZnJhbWVOb3RG
b3VuZCA9IGZhbHNlOwotICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUoZnJh
bWVIYW5kbGUsIGZyYW1lTm90Rm91bmQpOworICAgIHdlYkZyYW1lSURGb3JIYW5kbGUoZnJhbWVI
YW5kbGUsIGZyYW1lTm90Rm91bmQpOwogICAgIGlmIChmcmFtZU5vdEZvdW5kKQogICAgICAgICBB
U1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKIAotCi0gICAg
bV9jbGllbnQtPnJlcXVlc3RTd2l0Y2hUb1BhZ2UoKnRoaXMsICpwYWdlLCBbZnJhbWVJRCwgcGFn
ZSA9IG1ha2VSZWYoKnBhZ2UpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSgpIHsKKyAg
ICAvLyBGSVhNRTogU2hvdWxkIHdlIGFsc28gc3dpdGNoIHRvIHRoZSBmcmFtZSB0aGF0IGZyYW1l
SGFuZGxlIHBvaW50cyB0bz8KKyAgICBtX2NsaWVudC0+cmVxdWVzdFN3aXRjaFRvUGFnZSgqdGhp
cywgKnBhZ2UsIFtwYWdlID0gbWFrZVJlZigqcGFnZSksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxs
YmFjayldKCkgewogICAgICAgICBwYWdlLT5zZXRGb2N1cyh0cnVlKTsKIAogICAgICAgICBjYWxs
YmFjay0+c2VuZFN1Y2Nlc3MoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xz
L0NoYW5nZUxvZwppbmRleCA1ODczMThkMjE2YWM3ZGU5MTM2Mzc3MzM0ZGZhZTRiMTZlYWZjN2Qy
Li5hOTQ3YWNlYWVhNmI1ZjkyOTQzN2M0NjkxN2VlZDkyZmZmMzJlMGQzIDEwMDY0NAotLS0gYS9U
b29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIw
MjEtMDUtMjQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFN3aXRj
aCBmcm9tIFdURjo6T3B0aW9uYWwgdG8gc3RkOjpvcHRpb25hbAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExNjc0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2No
ZWNrZXIucHk6IFJlbW92ZWQgZXhjZXB0aW9ucyBmcm9tIHRoZSBXVEY6Ok9wdGlvbmFsCisgICAg
ICAgIHN0eWxlIHJ1bGUgZm9yIFdlYlJUQy4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
c3R5bGUvY2hlY2tlcnMvY3BwLnB5OiBSZW1vdmVkIGNoZWNrX3d0Zl9vcHRpb25hbC4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0dGVzdC5weTogUmVt
b3ZlZCB0ZXN0X3d0Zl9vcHRpb25hbC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0NNYWtlTGlz
dHMudHh0OiBSZW1vdmVkIE9wdGlvbmFsLmNwcC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvT3B0aW9uYWwuY3BwOiBSZW1vdmVkLgorCisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvY2YvUmV0YWluUHRyLmNwcDogVXBkYXRlZCB0ZXN0
IHRvIG5vdCByZWx5IG9uIG5vbi1zdGFuZGFyZAorICAgICAgICBhc3BlY3RzIG9mIG1vdmluZyBm
cm9tIGFuIG9wdGlvbmFsLiBJbnN0ZWFkIGNoZWNrIHRoZSByZXRhaW4gY291bnQgdG8gbWFrZSBz
dXJlIHdlCisgICAgICAgIGhhdmUgbW92ZWQgc3VjY2Vzc2Z1bGx5LgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL25zL1JldGFpblB0ci5tbTogRGl0dG8uCisKIDIwMjEtMDUtMjQg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBTdG9wIHVzaW5nIFVu
Y2hlY2tlZExvY2sgaW4gQ29uZGl0aW9uIEFQSSB0ZXN0cwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9z
dHlsZS9jaGVja2VyLnB5CmluZGV4IDcxMGY5ODg3NTljYmEyOTZjNDA0ZWZkYzY0MzIxMzliMjhm
OWU0MTEuLjMwOTRhMjVjNjA3MzUwYWEwYmRhZTdiNzliZWI3NmE4YmJkYWM4ZDQgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKQEAgLTI3MiwxMiArMjcyLDYgQEAgX1BB
VEhfUlVMRVNfU1BFQ0lGSUVSID0gWwogICAgICAgIi13aGl0ZXNwYWNlL2RlY2xhcmF0aW9uIiwK
ICAgICAgICItd2hpdGVzcGFjZS9pbmRlbnQiXSksCiAKLSAgICAoWyAgIyBGaWxlcyBmb2xsb3dp
bmcgdXNpbmcgV2ViUlRDIG9wdGlvbm5hbCB0eXBlCi0gICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJj
ZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ21lZGlhc3RyZWFtJywgJ2xpYndlYnJ0YycsICdH
U3RyZWFtZXJWaWRlb0RlY29kZXJGYWN0b3J5LmNwcCcpLAotICAgICBdLAotICAgICBbIi1ydW50
aW1lL3d0Zl9vcHRpb25hbCIsCi0gICAgIF0pLAotCiAgICAgKFsKICAgICAgICMgVGhlcmUgaXMg
bm8gd2F5IHRvIGF2b2lkIHRoZSBzeW1ib2xzIF9faml0X2RlYnVnX3JlZ2lzdGVyX2NvZGUKICAg
ICAgICMgYW5kIF9faml0X2RlYnVnX2Rlc2NyaXB0b3Igd2hlbiBpbnRlZ3JhdGluZyB3aXRoIGdk
Yi4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3Bw
LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHAucHkKaW5kZXgg
OGIwN2I4N2ZjYmYxY2MxZTliZDM3MTE4YjgwNmYwNWUzOTdjNTczNS4uM2Y1N2RmOGE4ZGM4YjQz
Mzc1NmZhZjVmYTc1NGFhMDQwYjA2OGFkOSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9zdHlsZS9jaGVja2Vycy9jcHAucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9z
dHlsZS9jaGVja2Vycy9jcHAucHkKQEAgLTI3MDUsMjYgKzI3MDUsNiBAQCBkZWYgY2hlY2tfd3Rm
X21vdmUoY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBmaWxlX3N0YXRlLCBlcnJvcik6CiAgICAg
ZXJyb3IobGluZV9udW1iZXIsICdydW50aW1lL3d0Zl9tb3ZlJywgNCwgIlVzZSAnV1RGTW92ZSgp
JyBpbnN0ZWFkIG9mICdzdGQ6Om1vdmUoKScuIikKIAogCi1kZWYgY2hlY2tfd3RmX29wdGlvbmFs
KGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgZmlsZV9zdGF0ZSwgZXJyb3IpOgotICAgICIiIkxv
b2tzIGZvciB1c2Ugb2YgJ3N0ZDo6b3B0aW9uYWw8Picgd2hpY2ggc2hvdWxkIGJlIHJlcGxhY2Vk
IHdpdGggJ1dURjo6T3B0aW9uYWw8PicuCi0KLSAgICBBcmdzOgotICAgICAgY2xlYW5fbGluZXM6
IEEgQ2xlYW5zZWRMaW5lcyBpbnN0YW5jZSBjb250YWluaW5nIHRoZSBmaWxlLgotICAgICAgbGlu
ZV9udW1iZXI6IFRoZSBudW1iZXIgb2YgdGhlIGxpbmUgdG8gY2hlY2suCi0gICAgICBmaWxlX3N0
YXRlOiBBIF9GaWxlU3RhdGUgaW5zdGFuY2Ugd2hpY2ggbWFpbnRhaW5zIGluZm9ybWF0aW9uIGFi
b3V0Ci0gICAgICAgICAgICAgICAgICB0aGUgc3RhdGUgb2YgdGhpbmdzIGluIHRoZSBmaWxlLgot
ICAgICAgZXJyb3I6IFRoZSBmdW5jdGlvbiB0byBjYWxsIHdpdGggYW55IGVycm9ycyBmb3VuZC4K
LSAgICAiIiIKLQotICAgIGxpbmUgPSBjbGVhbl9saW5lcy5lbGlkZWRbbGluZV9udW1iZXJdICAj
IEdldCByaWQgb2YgY29tbWVudHMgYW5kIHN0cmluZ3MuCi0KLSAgICB1c2luZ19zdGRfb3B0aW9u
YWwgPSBzZWFyY2gocidcYm9wdGlvbmFsXHMqXDwnLCBsaW5lKQotICAgIGlmIG5vdCB1c2luZ19z
dGRfb3B0aW9uYWw6Ci0gICAgICAgIHJldHVybgotCi0gICAgZXJyb3IobGluZV9udW1iZXIsICdy
dW50aW1lL3d0Zl9vcHRpb25hbCcsIDQsICJVc2UgJ1dURjo6T3B0aW9uYWw8PicgaW5zdGVhZCBv
ZiAnc3RkOjpvcHRpb25hbDw+Jy4iKQotCi0KIGRlZiBjaGVja19jYWxsb25tYWludGhyZWFkKGZp
bGVuYW1lLCBjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGZpbGVfc3RhdGUsIGVycm9yKToKICAg
ICAiIiJMb29rcyBmb3IgdXNlIG9mICdjYWxsT25NYWluVGhyZWFkKCknIHdoaWNoIHNob3VsZCBi
ZSByZXBsYWNlZCB3aXRoICdjYWxsT25NYWluUnVuTG9vcCgpJy4KIApAQCAtMzQyNiw3ICszNDA2
LDYgQEAgZGVmIGNoZWNrX3N0eWxlKGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgZmlsZV9leHRl
bnNpb24sIGNsYXNzX3N0YXRlLCBmaWxlX3N0YXQKICAgICBjaGVja19tYXhfbWluX21hY3Jvcyhj
bGVhbl9saW5lcywgbGluZV9udW1iZXIsIGZpbGVfc3RhdGUsIGVycm9yKQogICAgIGNoZWNrX3d0
Zl9jaGVja2VkX3NpemUoY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBmaWxlX3N0YXRlLCBlcnJv
cikKICAgICBjaGVja193dGZfbW92ZShjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGZpbGVfc3Rh
dGUsIGVycm9yKQotICAgIGNoZWNrX3d0Zl9vcHRpb25hbChjbGVhbl9saW5lcywgbGluZV9udW1i
ZXIsIGZpbGVfc3RhdGUsIGVycm9yKQogICAgIGNoZWNrX3d0Zl9tYWtlX3VuaXF1ZShjbGVhbl9s
aW5lcywgbGluZV9udW1iZXIsIGZpbGVfc3RhdGUsIGVycm9yKQogICAgIGNoZWNrX3d0Zl9uZXZl
cl9kZXN0cm95ZWQoY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBmaWxlX3N0YXRlLCBlcnJvcikK
ICAgICBjaGVja19sb2NrX2d1YXJkKGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgZmlsZV9zdGF0
ZSwgZXJyb3IpCkBAIC00NjU2LDcgKzQ2MzUsNiBAQCBjbGFzcyBDcHBDaGVja2VyKG9iamVjdCk6
CiAgICAgICAgICdydW50aW1lL3Vuc2lnbmVkJywKICAgICAgICAgJ3J1bnRpbWUvdmlydHVhbCcs
CiAgICAgICAgICdydW50aW1lL3d0Zl9jaGVja2VkX3NpemUnLAotICAgICAgICAncnVudGltZS93
dGZfb3B0aW9uYWwnLAogICAgICAgICAncnVudGltZS93dGZfbWFrZV91bmlxdWUnLAogICAgICAg
ICAncnVudGltZS93dGZfbW92ZScsCiAgICAgICAgICdydW50aW1lL3d0Zl9uZXZlcl9kZXN0cm95
ZWQnLApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9j
cHBfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2Nw
cF91bml0dGVzdC5weQppbmRleCBiNzIwY2ZkMWM4MTUzMGUyYWQ0ZmE2ZGJiMjIwZjlmODg0NTU3
NWJkLi4wNDIzNWNkOGVkOWMxMDBkODNmYjc0YjA5YzlkYWRhMzgzZWU3MGQ3IDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0dGVzdC5weQor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0dGVzdC5w
eQpAQCAtNTY1NSwyOSArNTY1NSw2IEBAIGNsYXNzIFdlYktpdFN0eWxlVGVzdChDcHBTdHlsZVRl
c3RCYXNlKToKICAgICAgICAgICAgICIgIFtydW50aW1lL3d0Zl9uZXZlcl9kZXN0cm95ZWRdIFs0
XSIsCiAgICAgICAgICAgICAnZm9vLm1tJykKIAotICAgIGRlZiB0ZXN0X3d0Zl9vcHRpb25hbChz
ZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAgICAnT3B0aW9uYWw8
aW50PiBhOycsCi0gICAgICAgICAgICAgJycsCi0gICAgICAgICAgICAgJ2Zvby5jcHAnKQotCi0g
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAgJ1dURjo6T3B0aW9uYWw8aW50
PiBhOycsCi0gICAgICAgICAgICAgJycsCi0gICAgICAgICAgICAgJ2Zvby5jcHAnKQotCi0gICAg
ICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAnc3RkOjpvcHRpb25hbDxpbnQ+IGE7
JywKLSAgICAgICAgICAgICJVc2UgJ1dURjo6T3B0aW9uYWw8PicgaW5zdGVhZCBvZiAnc3RkOjpv
cHRpb25hbDw+Jy4iCi0gICAgICAgICAgICAiICBbcnVudGltZS93dGZfb3B0aW9uYWxdIFs0XSIs
Ci0gICAgICAgICAgICAnZm9vLmNwcCcpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAg
ICAgICAgICAgICdvcHRpb25hbDxpbnQ+IGE7JywKLSAgICAgICAgICAgICJVc2UgJ1dURjo6T3B0
aW9uYWw8PicgaW5zdGVhZCBvZiAnc3RkOjpvcHRpb25hbDw+Jy4iCi0gICAgICAgICAgICAiICBb
cnVudGltZS93dGZfb3B0aW9uYWxdIFs0XSIsCi0gICAgICAgICAgICAnZm9vLmNwcCcpCi0KICAg
ICBkZWYgdGVzdF9sb2NrX2d1YXJkKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydF9saW50KAog
ICAgICAgICAgICAgJ0xvY2tlciBsb2NrZXIobG9jayk7JywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlz
dHMudHh0CmluZGV4IGRiNDhiOTRiMjA3ZjFjMGZiZWQwOTg4MzIwZjcwYjY5ZmQyNDNlMDIuLmEw
MzI5NGI1YjAxNWU2MWYxMGNkZTVhYjQ5ZWU0Y2MyOGY4MmNmYjUgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9D
TWFrZUxpc3RzLnR4dApAQCAtNjYsNyArNjYsNiBAQCBzZXQoVGVzdFdURl9TT1VSQ0VTCiAgICAg
VGVzdHMvV1RGL05ha2VkUHRyLmNwcAogICAgIFRlc3RzL1dURi9OZXZlckRlc3Ryb3llZC5jcHAK
ICAgICBUZXN0cy9XVEYvT3B0aW9uU2V0LmNwcAotICAgIFRlc3RzL1dURi9PcHRpb25hbC5jcHAK
ICAgICBUZXN0cy9XVEYvUGFja2VkLmNwcAogICAgIFRlc3RzL1dURi9QYWNrZWRSZWYuY3BwCiAg
ICAgVGVzdHMvV1RGL1BhY2tlZFJlZlB0ci5jcHAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
Yzg3YzBmMTg2MDc5MmNjYjZhOGRiNDA3MGIzMjAxMmEyNWI5NmUzYi4uODljYWE4Nzg3OGFmYzZj
NWQ5NzNkZTk4YjM4YTkyYjUwNDczNjc5MCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTYx
Miw3ICs2MTIsNiBAQAogCQk3QzgzREVGMTFEMEE1OTBDMDBGRUJDRjMgLyogTWVkaWFUaW1lLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENTQ5N0Iz
MTU4NTdGMEMwMEI1QkMzMCAvKiBNZWRpYVRpbWUuY3BwICovOyB9OwogCQk3QzgzREVGNjFEMEE1
OTBDMDBGRUJDRjMgLyogTWV0YUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM2QzRDRTE0MTAzNEFEMDA1QjdGMEMgLyogTWV0YUFs
bG9jYXRvci5jcHAgKi87IH07CiAJCTdDODNERUZFMUQwQTU5MEMwMEZFQkNGMyAvKiBOYWtlZFB0
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUI2
Rjc0RTFCMkJBNDRFMDA5RTQ5MjIgLyogTmFrZWRQdHIuY3BwICovOyB9OwotCQk3QzgzREYwMTFE
MEE1OTBDMDBGRUJDRjMgLyogT3B0aW9uYWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUFGREU2NTQxOTUzQjJDMDAwQzQ4RkZBIC8qIE9wdGlvbmFs
LmNwcCAqLzsgfTsKIAkJN0M4M0RGMDIxRDBBNTkwQzAwRkVCQ0YzIC8qIE9TT2JqZWN0UHRyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDQkJBMDc2
MTlCQjhBOTEwMEJCRjAyNSAvKiBPU09iamVjdFB0ci5jcHAgKi87IH07CiAJCTdDODNERjA1MUQw
QTU5MEMwMEZFQkNGMyAvKiBSdW5Mb29wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0QzlBQkM3MUIzREIxNzEwMDQwQTk4NyAvKiBSdW5Mb29wLmNw
cCAqLzsgfTsKIAkJN0M4M0RGMTIxRDBBNTkwQzAwRkVCQ0YzIC8qIFNjb3BlZExhbWJkYS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQzY5QUE2MjFD
Rjc3QzY1MDBDNjI3MkYgLyogU2NvcGVkTGFtYmRhLmNwcCAqLzsgc2V0dGluZ3MgPSB7Q09NUElM
RVJfRkxBR1MgPSAiLWZuby1lbGlkZS1jb25zdHJ1Y3RvcnMiOyB9OyB9OwpAQCAtMTg1Niw3ICsx
ODU1LDYgQEAKIAkJMUFFREUyMjQxM0U1RTdBMDAwRTYyRkU4IC8qIEluamVjdGVkQnVuZGxlQ29u
dHJvbGxlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IElu
amVjdGVkQnVuZGxlQ29udHJvbGxlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMUFFRjk5NDgxN0EwOUY1MzAwOTk4RUYwIC8qIEdldFBJREFmdGVyQWJvcnRlZFByb2Nlc3NM
YXVuY2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2V0UElEQWZ0
ZXJBYm9ydGVkUHJvY2Vzc0xhdW5jaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFBRjdCMjFEMUQ2Q0QxMkUwMDhDMTI2QyAvKiBFbnVtVHJhaXRzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEVudW1UcmFpdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQUZE
RTY1NDE5NTNCMkMwMDBDNDhGRkEgLyogT3B0aW9uYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gT3B0aW9uYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQzI0REVFQzI2MzAwMURFMDA0NTBEMDcgLyogVGV4dFN0eWxlRm9udFNpemUubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBUZXh0U3R5bGVGb250U2l6ZS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUMyQjgxN0UxQzg5MUU0MjAwQTU1MjlGIC8qIENhbmNlbEZvbnRTdWJy
ZXNvdXJjZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENhbmNl
bEZvbnRTdWJyZXNvdXJjZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUMyQjgx
ODExQzg5MUVGQTAwQTU1MjlGIC8qIENhbmNlbEZvbnRTdWJyZXNvdXJjZVBsdWdJbi5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENhbmNlbEZvbnRTdWJyZXNvdXJj
ZVBsdWdJbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0NTEsNyArNDQ0OSw2
IEBACiAJCQkJRkVCNkY3NEUxQjJCQTQ0RTAwOUU0OTIyIC8qIE5ha2VkUHRyLmNwcCAqLywKIAkJ
CQlBNTdENTRGMjFGMzM4QzM2MDBBOTdBQTcgLyogTmV2ZXJEZXN0cm95ZWQuY3BwICovLAogCQkJ
CUNENDhBODcyMjRDOEE2NkYwMEY1ODAwQyAvKiBPYnNlcnZlci5jcHAgKi8sCi0JCQkJMUFGREU2
NTQxOTUzQjJDMDAwQzQ4RkZBIC8qIE9wdGlvbmFsLmNwcCAqLywKIAkJCQlDRTUwRDhDODFDODY2
NUNFMDA3MkVBNUEgLyogT3B0aW9uU2V0LmNwcCAqLywKIAkJCQlFMzJCNTQ5MTIyODEwQUMwMDA4
QUQ3MDIgLyogUGFja2VkLmNwcCAqLywKIAkJCQlFMzhENjVDODIzQTQ1RkE5MDA2M0Q2OUEgLyog
UGFja2VkUmVmLmNwcCAqLywKQEAgLTUyMDYsNyArNTIwMyw2IEBACiAJCQkJN0M4M0RFRkUxRDBB
NTkwQzAwRkVCQ0YzIC8qIE5ha2VkUHRyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1N0Q1NEYz
MUYzMzhDMzYwMEE5N0FBNyAvKiBOZXZlckRlc3Ryb3llZC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlDRDQ4QTg3MzI0QzhBNjZGMDBGNTgwMEMgLyogT2JzZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJN0M4M0RGMDExRDBBNTkwQzAwRkVCQ0YzIC8qIE9wdGlvbmFsLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTFBNzdCQUEzMUQ5QUZGRkMwMDVGQzU2OCAvKiBPcHRpb25TZXQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0M4M0RGMDIxRDBBNTkwQzAwRkVCQ0YzIC8qIE9TT2JqZWN0UHRyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUUzMkI1NDkyMjI4MTBBQzQwMDhBRDcwMiAvKiBQYWNrZWQu
Y3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9PcHRpb25hbC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9PcHRpb25h
bC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3MjYwMDRmODRlNjAzZDAxYjFh
YTBkNmY2ZWQ4MGFlNzY0ZWYzMDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvT3B0aW9uYWwuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMjM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLQotbmFtZXNwYWNlIFRlc3RXZWJL
aXRBUEkgewotCi1URVNUKFdURl9PcHRpb25hbCwgRGlzZW5nYWdlZCkKLXsKLSAgICB7Ci0gICAg
ICAgIE9wdGlvbmFsPGludD4gb3B0aW9uYWw7Ci0KLSAgICAgICAgRVhQRUNUX0ZBTFNFKHN0YXRp
Y19jYXN0PGJvb2w+KG9wdGlvbmFsKSk7Ci0gICAgfQotCi0gICAgewotICAgICAgICBPcHRpb25h
bDxpbnQ+IG9wdGlvbmFsIHsgV1RGOjpudWxsb3B0IH07Ci0KLSAgICAgICAgRVhQRUNUX0ZBTFNF
KHN0YXRpY19jYXN0PGJvb2w+KG9wdGlvbmFsKSk7Ci0gICAgfQotfQotCi1URVNUKFdURl9PcHRp
b25hbCwgRW5nYWdlZCkKLXsKLSAgICBPcHRpb25hbDxpbnQ+IG9wdGlvbmFsIHsgMTAgfTsKLQot
ICAgIEVYUEVDVF9UUlVFKHN0YXRpY19jYXN0PGJvb2w+KG9wdGlvbmFsKSk7Ci0gICAgRVhQRUNU
X0VRKDEwLCBvcHRpb25hbC52YWx1ZSgpKTsKLX0KLQotVEVTVChXVEZfT3B0aW9uYWwsIERlc3Ry
dWN0b3IpCi17Ci0gICAgc3RhdGljIGJvb2wgZGlkQ2FsbERlc3RydWN0b3IgPSBmYWxzZTsKLSAg
ICBzdHJ1Y3QgQSB7Ci0gICAgICAgIH5BKCkKLSAgICAgICAgewotICAgICAgICAgICAgRVhQRUNU
X0ZBTFNFKGRpZENhbGxEZXN0cnVjdG9yKTsKLSAgICAgICAgICAgIGRpZENhbGxEZXN0cnVjdG9y
ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB7Ci0gICAgICAgIE9wdGlvbmFsPEE+
IG9wdGlvbmFsIHsgc3RkOjppbl9wbGFjZSB9OwotCi0gICAgICAgIEVYUEVDVF9UUlVFKHN0YXRp
Y19jYXN0PGJvb2w+KG9wdGlvbmFsKSk7Ci0gICAgfQotCi0gICAgRVhQRUNUX1RSVUUoZGlkQ2Fs
bERlc3RydWN0b3IpOwotfQotCi1URVNUKFdURl9PcHRpb25hbCwgQ2FsbGJhY2spCi17Ci0gICAg
Ym9vbCBjYWxsZWQgPSBmYWxzZTsKLSAgICBPcHRpb25hbDxpbnQ+IGE7Ci0gICAgaW50IHJlc3Vs
dCA9IHZhbHVlT3JDb21wdXRlKGEsIFsmXSB7Ci0gICAgICAgIGNhbGxlZCA9IHRydWU7Ci0gICAg
ICAgIHJldHVybiAzMDA7Ci0gICAgfSk7Ci0gICAgRVhQRUNUX1RSVUUoY2FsbGVkKTsKLSAgICBF
WFBFQ1RfRVEocmVzdWx0LCAzMDApOwotCi0gICAgYSA9IDI1MDsKLSAgICBjYWxsZWQgPSBmYWxz
ZTsKLSAgICByZXN1bHQgPSB2YWx1ZU9yQ29tcHV0ZShhLCBbJl0gewotICAgICAgICBjYWxsZWQg
PSB0cnVlOwotICAgICAgICByZXR1cm4gMzAwOwotICAgIH0pOwotICAgIEVYUEVDVF9GQUxTRShj
YWxsZWQpOwotICAgIEVYUEVDVF9FUShyZXN1bHQsIDI1MCk7Ci19Ci0KLVRFU1QoV1RGX09wdGlv
bmFsLCBFcXVhbGl0eSkKLXsKLSAgICBPcHRpb25hbDxpbnQ+IHVuZW5nYWdlZDE7Ci0gICAgT3B0
aW9uYWw8aW50PiB1bmVuZ2FnZWQyOwotCi0gICAgT3B0aW9uYWw8aW50PiBlbmdhZ2VkMSB7IDEg
fTsKLSAgICBPcHRpb25hbDxpbnQ+IGVuZ2FnZWQyIHsgMiB9OwotICAgIE9wdGlvbmFsPGludD4g
ZW5nYWdlZHgyIHsgMiB9OwotCi0gICAgRVhQRUNUX1RSVUUodW5lbmdhZ2VkMSA9PSB1bmVuZ2Fn
ZWQyKTsKLSAgICBFWFBFQ1RfRkFMU0UoZW5nYWdlZDEgPT0gZW5nYWdlZDIpOwotICAgIEVYUEVD
VF9GQUxTRShlbmdhZ2VkMSA9PSB1bmVuZ2FnZWQxKTsKLSAgICBFWFBFQ1RfVFJVRShlbmdhZ2Vk
MiA9PSBlbmdhZ2VkeDIpOwotCi0gICAgRVhQRUNUX1RSVUUodW5lbmdhZ2VkMSA9PSBXVEY6Om51
bGxvcHQpOwotICAgIEVYUEVDVF9GQUxTRShlbmdhZ2VkMSA9PSBXVEY6Om51bGxvcHQpOwotICAg
IEVYUEVDVF9UUlVFKFdURjo6bnVsbG9wdCA9PSB1bmVuZ2FnZWQxKTsKLSAgICBFWFBFQ1RfRkFM
U0UoV1RGOjpudWxsb3B0ID09IGVuZ2FnZWQxKTsKLQotICAgIEVYUEVDVF9UUlVFKGVuZ2FnZWQx
ID09IDEpOwotICAgIEVYUEVDVF9UUlVFKDEgPT0gZW5nYWdlZDEpOwotICAgIEVYUEVDVF9GQUxT
RSh1bmVuZ2FnZWQxID09IDEpOwotICAgIEVYUEVDVF9GQUxTRSgxID09IHVuZW5nYWdlZDEpOwot
fQotCi1URVNUKFdURl9PcHRpb25hbCwgSW5lcXVhbGl0eSkKLXsKLSAgICBPcHRpb25hbDxpbnQ+
IHVuZW5nYWdlZDE7Ci0gICAgT3B0aW9uYWw8aW50PiB1bmVuZ2FnZWQyOwotCi0gICAgT3B0aW9u
YWw8aW50PiBlbmdhZ2VkMSB7IDEgfTsKLSAgICBPcHRpb25hbDxpbnQ+IGVuZ2FnZWQyIHsgMiB9
OwotICAgIE9wdGlvbmFsPGludD4gZW5nYWdlZHgyIHsgMiB9OwotCi0gICAgRVhQRUNUX0ZBTFNF
KHVuZW5nYWdlZDEgIT0gdW5lbmdhZ2VkMik7Ci0gICAgRVhQRUNUX1RSVUUoZW5nYWdlZDEgIT0g
ZW5nYWdlZDIpOwotICAgIEVYUEVDVF9UUlVFKGVuZ2FnZWQxICE9IHVuZW5nYWdlZDEpOwotICAg
IEVYUEVDVF9GQUxTRShlbmdhZ2VkMiAhPSBlbmdhZ2VkeDIpOwotCi0gICAgRVhQRUNUX0ZBTFNF
KHVuZW5nYWdlZDEgIT0gV1RGOjpudWxsb3B0KTsKLSAgICBFWFBFQ1RfVFJVRShlbmdhZ2VkMSAh
PSBXVEY6Om51bGxvcHQpOwotICAgIEVYUEVDVF9GQUxTRShXVEY6Om51bGxvcHQgIT0gdW5lbmdh
Z2VkMSk7Ci0gICAgRVhQRUNUX1RSVUUoV1RGOjpudWxsb3B0ICE9IGVuZ2FnZWQxKTsKLQotICAg
IEVYUEVDVF9GQUxTRShlbmdhZ2VkMSAhPSAxKTsKLSAgICBFWFBFQ1RfVFJVRShlbmdhZ2VkMSAh
PSAyKTsKLSAgICBFWFBFQ1RfRkFMU0UoMSAhPSBlbmdhZ2VkMSk7Ci0gICAgRVhQRUNUX1RSVUUo
MiAhPSBlbmdhZ2VkMSk7Ci0KLSAgICBFWFBFQ1RfVFJVRSh1bmVuZ2FnZWQxICE9IDEpOwotICAg
IEVYUEVDVF9UUlVFKDEgIT0gdW5lbmdhZ2VkMSk7Ci19Ci0KLVRFU1QoV1RGX09wdGlvbmFsLCBN
b3ZlU2VtYW50aWNzQ29uc3RydWN0b3IpCi17Ci0gICAgewotICAgICAgICBPcHRpb25hbDxpbnQ+
IHVuZW5nYWdlZDEgeyB9OwotICAgICAgICBFWFBFQ1RfRkFMU0UoISF1bmVuZ2FnZWQxKTsKLQot
ICAgICAgICBPcHRpb25hbDxpbnQ+IHVuZW5nYWdlZDIoc3RkOjptb3ZlKHVuZW5nYWdlZDEpKTsK
LSAgICAgICAgRVhQRUNUX0ZBTFNFKCEhdW5lbmdhZ2VkMSk7Ci0gICAgICAgIEVYUEVDVF9GQUxT
RSghIXVuZW5nYWdlZDIpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgT3B0aW9uYWw8aW50PiBl
bmdhZ2VkVG9VbmVuZ2FnZWQgeyAyIH07Ci0gICAgICAgIEVYUEVDVF9UUlVFKCEhZW5nYWdlZFRv
VW5lbmdhZ2VkKTsKLSAgICAgICAgRVhQRUNUX0VRKDIsIGVuZ2FnZWRUb1VuZW5nYWdlZC52YWx1
ZSgpKTsKLQotICAgICAgICBPcHRpb25hbDxpbnQ+IGVuZ2FnZWQoc3RkOjptb3ZlKGVuZ2FnZWRU
b1VuZW5nYWdlZCkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoISFlbmdhZ2VkVG9VbmVuZ2FnZWQp
OwotICAgICAgICBFWFBFQ1RfVFJVRSghIWVuZ2FnZWQpOwotICAgICAgICBFWFBFQ1RfRVEoMiwg
ZW5nYWdlZC52YWx1ZSgpKTsKLSAgICB9Ci19Ci0KLVRFU1QoV1RGX09wdGlvbmFsLCBNb3ZlU2Vt
YW50aWNzQXNzaWdubWVudCkKLXsKLSAgICB7Ci0gICAgICAgIE9wdGlvbmFsPGludD4gdW5lbmdh
Z2VkMSB7IH07Ci0gICAgICAgIEVYUEVDVF9GQUxTRSghIXVuZW5nYWdlZDEpOwotCi0gICAgICAg
IE9wdGlvbmFsPGludD4gdW5lbmdhZ2VkMjsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKCEhdW5lbmdh
Z2VkMik7Ci0KLSAgICAgICAgdW5lbmdhZ2VkMiA9IHN0ZDo6bW92ZSh1bmVuZ2FnZWQxKTsKLSAg
ICAgICAgRVhQRUNUX0ZBTFNFKCEhdW5lbmdhZ2VkMSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRSgh
IXVuZW5nYWdlZDIpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgT3B0aW9uYWw8aW50PiBlbmdh
Z2VkVG9VbmVuZ2FnZWQgeyAzIH07Ci0gICAgICAgIEVYUEVDVF9UUlVFKCEhZW5nYWdlZFRvVW5l
bmdhZ2VkKTsKLSAgICAgICAgRVhQRUNUX0VRKDMsIGVuZ2FnZWRUb1VuZW5nYWdlZC52YWx1ZSgp
KTsKLQotICAgICAgICBlbmdhZ2VkVG9VbmVuZ2FnZWQgPSBzdGQ6Om1vdmUoV1RGOjpudWxsb3B0
KTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKCEhZW5nYWdlZFRvVW5lbmdhZ2VkKTsKLSAgICB9Ci0K
LSAgICB7Ci0gICAgICAgIE9wdGlvbmFsPGludD4gZW5nYWdlZFRvVW5lbmdhZ2VkIHsgNCB9Owot
ICAgICAgICBFWFBFQ1RfVFJVRSghIWVuZ2FnZWRUb1VuZW5nYWdlZCk7Ci0gICAgICAgIEVYUEVD
VF9FUSg0LCBlbmdhZ2VkVG9VbmVuZ2FnZWQudmFsdWUoKSk7Ci0KLSAgICAgICAgT3B0aW9uYWw8
aW50PiB1bmVuZ2FnZWRUb0VuZ2FnZWQ7Ci0gICAgICAgIEVYUEVDVF9GQUxTRSghIXVuZW5nYWdl
ZFRvRW5nYWdlZCk7Ci0KLSAgICAgICAgdW5lbmdhZ2VkVG9FbmdhZ2VkID0gc3RkOjptb3ZlKGVu
Z2FnZWRUb1VuZW5nYWdlZCk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRSghIWVuZ2FnZWRUb1VuZW5n
YWdlZCk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKCEhdW5lbmdhZ2VkVG9FbmdhZ2VkKTsKLSAgICAg
ICAgRVhQRUNUX0VRKDQsIHVuZW5nYWdlZFRvRW5nYWdlZC52YWx1ZSgpKTsKLSAgICB9Ci0KLSAg
ICB7Ci0gICAgICAgIE9wdGlvbmFsPGludD4gZW5nYWdlZFRvVW5lbmdhZ2VkIHsgNSB9OwotICAg
ICAgICBFWFBFQ1RfVFJVRSghIWVuZ2FnZWRUb1VuZW5nYWdlZCk7Ci0gICAgICAgIEVYUEVDVF9F
USg1LCBlbmdhZ2VkVG9VbmVuZ2FnZWQudmFsdWUoKSk7Ci0KLSAgICAgICAgT3B0aW9uYWw8aW50
PiB1bmVuZ2FnZWQ7Ci0gICAgICAgIEVYUEVDVF9GQUxTRSghIXVuZW5nYWdlZCk7Ci0KLSAgICAg
ICAgZW5nYWdlZFRvVW5lbmdhZ2VkID0gc3RkOjptb3ZlKHVuZW5nYWdlZCk7Ci0gICAgICAgIEVY
UEVDVF9GQUxTRSghIWVuZ2FnZWRUb1VuZW5nYWdlZCk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRSgh
IXVuZW5nYWdlZCk7Ci0gICAgfQotCi0gICAgewotICAgICAgICBPcHRpb25hbDxpbnQ+IGVuZ2Fn
ZWRUb1VuZW5nYWdlZCB7IDYgfTsKLSAgICAgICAgRVhQRUNUX1RSVUUoISFlbmdhZ2VkVG9VbmVu
Z2FnZWQpOwotICAgICAgICBFWFBFQ1RfRVEoNiwgZW5nYWdlZFRvVW5lbmdhZ2VkLnZhbHVlKCkp
OwotCi0gICAgICAgIE9wdGlvbmFsPGludD4gZW5nYWdlZFRvRW5nYWdlZCB7IDcgfTsKLSAgICAg
ICAgRVhQRUNUX1RSVUUoISFlbmdhZ2VkVG9FbmdhZ2VkKTsKLSAgICAgICAgRVhQRUNUX0VRKDcs
IGVuZ2FnZWRUb0VuZ2FnZWQudmFsdWUoKSk7Ci0KLSAgICAgICAgZW5nYWdlZFRvRW5nYWdlZCA9
IHN0ZDo6bW92ZShlbmdhZ2VkVG9VbmVuZ2FnZWQpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoISFl
bmdhZ2VkVG9VbmVuZ2FnZWQpOwotICAgICAgICBFWFBFQ1RfVFJVRSghIWVuZ2FnZWRUb0VuZ2Fn
ZWQpOwotICAgICAgICBFWFBFQ1RfRVEoNiwgZW5nYWdlZFRvRW5nYWdlZC52YWx1ZSgpKTsKLSAg
ICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL2NmL1JldGFpblB0ci5jcHAgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9jZi9SZXRhaW5QdHIuY3BwCmluZGV4IGM5Y2ZlZjE5YzNiN2M1ZTE2
ODBlNmI4M2YyMzllZTY4YzhhNjRiNzEuLjc1MDU5ZTllMDcyYjVmYmQ3MjcwMGJmMjhjNjQwY2Rh
MTllYTViNmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL2NmL1Jl
dGFpblB0ci5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvY2YvUmV0YWlu
UHRyLmNwcApAQCAtMTYxLDExICsxNjEsMTIgQEAgVEVTVChSZXRhaW5QdHIsIE9wdGlvbmFsUmV0
YWluUHRyQ0YpCiAgICAgRVhQRUNUX0VRKG9wdGlvbmFsT2JqZWN0Mi52YWx1ZSgpLCBvYmplY3Qy
KTsKIAogICAgIC8vIFRlc3QgbW92ZSBmcm9tIE9wdGlvbmFsPFJldGFpblB0cjxDRk51bWJlclJl
Zj4+LgorICAgIEVYUEVDVF9FUSgyLCBDRkdldFJldGFpbkNvdW50KG9iamVjdDIuZ2V0KCkpKTsK
ICAgICBvcHRpb25hbE9iamVjdDEgPSBXVEZNb3ZlKG9wdGlvbmFsT2JqZWN0Mik7CisgICAgRVhQ
RUNUX0VRKDIsIENGR2V0UmV0YWluQ291bnQob2JqZWN0Mi5nZXQoKSkpOwogICAgIEVYUEVDVF9U
UlVFKG9wdGlvbmFsT2JqZWN0MS52YWx1ZSgpKTsKICAgICBFWFBFQ1RfVFJVRShvcHRpb25hbE9i
amVjdDEudmFsdWUoKS5nZXQoKSk7CiAgICAgRVhQRUNUX0VRKG9wdGlvbmFsT2JqZWN0MS52YWx1
ZSgpLCBvYmplY3QyKTsKLSAgICBFWFBFQ1RfRkFMU0Uob3B0aW9uYWxPYmplY3QyKTsKIH0KIAog
VEVTVChSZXRhaW5QdHIsIFJldGFpblB0ckNGKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvbnMvUmV0YWluUHRyLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvbnMvUmV0YWluUHRyLm1tCmluZGV4IGU5YmM0ZTZjZGQ4ZWI4ZmY3NWFhNGRlMmQ4YzYz
MjZjOGI3N2MwNzcuLjcyNWQyOWNmYmU5NmMyZTBmMDYzZjZiMjgzODIyMWIzYzNlMDkwMGYgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL25zL1JldGFpblB0ci5tbQor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9ucy9SZXRhaW5QdHIubW0KQEAgLTI0
NiwxMSArMjQ2LDEyIEBAIFRFU1QoUmV0YWluUHRyLCBPcHRpb25hbFJldGFpblB0ck5TKQogICAg
IEVYUEVDVF9FUShvcHRpb25hbE9iamVjdDIudmFsdWUoKSwgb2JqZWN0Mik7CiAKICAgICAvLyBU
ZXN0IG1vdmUgZnJvbSBPcHRpb25hbDxSZXRhaW5QdHI8TlNPYmplY3Q+Pi4KKyAgICBFWFBFQ1Rf
RVEoMiwgQ0ZHZXRSZXRhaW5Db3VudChvYmplY3QyLmdldCgpKSk7CiAgICAgb3B0aW9uYWxPYmpl
Y3QxID0gV1RGTW92ZShvcHRpb25hbE9iamVjdDIpOworICAgIEVYUEVDVF9FUSgyLCBDRkdldFJl
dGFpbkNvdW50KG9iamVjdDIuZ2V0KCkpKTsKICAgICBFWFBFQ1RfVFJVRShvcHRpb25hbE9iamVj
dDEudmFsdWUoKSk7CiAgICAgRVhQRUNUX1RSVUUob3B0aW9uYWxPYmplY3QxLnZhbHVlKCkuZ2V0
KCkpOwogICAgIEVYUEVDVF9FUShvcHRpb25hbE9iamVjdDEudmFsdWUoKSwgb2JqZWN0Mik7Ci0g
ICAgRVhQRUNUX0ZBTFNFKG9wdGlvbmFsT2JqZWN0Mik7CiB9CiAKIFRFU1QoUmV0YWluUHRyLCBS
ZXRhaW5QdHJOUykK
</data>
<flag name="review"
          id="450908"
          type_id="1"
          status="+"
          setter="cdumez"
    />
          </attachment>
      

    </bug>

</bugzilla>