<?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>180009</bug_id>
          
          <creation_ts>2017-11-24 15:42:19 -0800</creation_ts>
          <short_desc>Modernize some aspects of text codecs, eliminate WebKit use of strcasecmp</short_desc>
          <delta_ts>2018-01-02 12:58:33 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>achristensen</cc>
    
    <cc>cdumez</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>mjs</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1374647</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-11-24 15:42:19 -0800</bug_when>
    <thetext>Modernize some aspects of text codecs, eliminate WebKit use of strcasecmp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374654</commentid>
    <comment_count>1</comment_count>
      <attachid>327562</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-11-24 17:02:08 -0800</bug_when>
    <thetext>Created attachment 327562
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374655</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-11-24 17:04:05 -0800</bug_when>
    <thetext>Attachment 327562 did not pass style-queue:


ERROR: Source/WebCore/platform/text/TextCodecUTF16.h:37:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 1 in 56 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374663</commentid>
    <comment_count>3</comment_count>
      <attachid>327565</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-11-24 17:58:40 -0800</bug_when>
    <thetext>Created attachment 327565
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374664</commentid>
    <comment_count>4</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-11-24 18:00:36 -0800</bug_when>
    <thetext>Attachment 327565 did not pass style-queue:


ERROR: Source/WebCore/platform/text/TextCodecUTF16.h:37:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 1 in 58 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375254</commentid>
    <comment_count>5</comment_count>
      <attachid>327565</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-11-27 21:46:22 -0800</bug_when>
    <thetext>Comment on attachment 327565
Patch

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

&gt; Source/WTF/wtf/text/LineEnding.cpp:57
&gt; +            needFix = true;

You could either break after either one of these, or you could count the number of changes you will need to make to call reserveInitialCapacity and uncheckedAppend in the loop below.  The first condition would reduce the length by one and this could just replace the character in place.  You could even do both in place then adjust the size of the Vector but not the capacity to make 0 allocations in this function.

Maybe a FIXME would be appropriate for these because they&apos;re just performance optimizations and you&apos;re developing on a platform that doesn&apos;t even compile them.

&gt; Source/WTF/wtf/text/LineEnding.cpp:131
&gt; +    return result;

ASSERT(q == result.data() + result.size()) might be nice here.

&gt; Source/WTF/wtf/text/StringCommon.h:659
&gt; +    return length == strlen(b) &amp;&amp; equalIgnoringASCIICase(a, b, length);

This reads each character twice when only one read is necessary.  A loop that checks for the null character before when it&apos;s expected might have better performance.

&gt; Source/WTF/wtf/text/StringCommon.h:665
&gt; +    return strlen(string) == length &amp;&amp; equalLettersIgnoringASCIICase(string, lowercaseLetters, length);

ditto

&gt; Source/WebCore/PAL/pal/text/UnencodableHandling.h:32
&gt; +enum UnencodableHandling {

enum classes are all the new hotness because they don&apos;t pollute the namespace as much.  It&apos;s not the biggest deal for this one, but I think it&apos;s good practice to use enum classes unless there&apos;s a reason to use an enum.

&gt; Source/WebCore/fileapi/BlobBuilder.cpp:59
&gt; -    m_appendableData.append(static_cast&lt;const char*&gt;(arrayBufferView-&gt;baseAddress()), arrayBufferView-&gt;byteLength());
&gt; +    m_appendableData.append(static_cast&lt;const uint8_t*&gt;(arrayBufferView-&gt;baseAddress()), arrayBufferView-&gt;byteLength());

I think these static casts are no longer necessary.

&gt; Source/WebCore/platform/SharedBuffer.cpp:80
&gt; +    return adoptRef(*new SharedBuffer { vector.data(), vector.size() });

Couldn&apos;t we do some kind of awful casting instead of copying the data unnecessarily?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375255</commentid>
    <comment_count>6</comment_count>
      <attachid>327726</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-11-27 21:49:15 -0800</bug_when>
    <thetext>Created attachment 327726
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375267</commentid>
    <comment_count>7</comment_count>
      <attachid>327732</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-11-27 23:19:29 -0800</bug_when>
    <thetext>Created attachment 327732
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375271</commentid>
    <comment_count>8</comment_count>
      <attachid>327732</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-11-27 23:59:26 -0800</bug_when>
    <thetext>Comment on attachment 327732
Patch

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

Looks like some tests need fixing.

&gt; Source/WebCore/platform/text/TextCodec.h:47
&gt; +    virtual String decode(const char*, size_t length, bool flush, bool stopOnError, bool&amp; sawError) = 0;

This could return a std::optional&lt;String&gt; instead of passing in a bool&amp;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375401</commentid>
    <comment_count>9</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-11-28 10:42:13 -0800</bug_when>
    <thetext>These tests need looking into.  Many of them look relevant:

Regressions: Unexpected text-only failures (19)
  compositing/iframes/compositing-for-scrollable-iframe.html [ Failure ]
  editing/pasteboard/data-transfer-item-list-add-file-multiple-times.html [ Failure ]
  editing/pasteboard/data-transfer-item-list-add-file-on-copy.html [ Failure ]
  editing/pasteboard/data-transfer-item-list-add-file-on-drag.html [ Failure ]
  editing/selection/4960137.html [ Failure ]
  editing/selection/drag-in-iframe.html [ Failure ]
  editing/selection/dump-as-markup.html [ Failure ]
  fast/animation/animation-element-removal.html [ Failure ]
  fast/css/acid2-pixel.html [ Failure ]
  fast/css/acid2.html [ Failure ]
  fast/dom/Document/readystate.html [ Failure ]
  fast/dom/Geolocation/clear-watch-invalid-id-crash.html [ Failure ]
  fast/dom/HTMLAnchorElement/anchor-download-unset.html [ Failure ]
  fast/dom/HTMLAnchorElement/anchor-nodownload.html [ Failure ]
  fast/dom/HTMLScriptElement/async-write.html [ Failure ]
  fast/dom/HTMLScriptElement/defer-inline-script.html [ Failure ]
  fast/dom/HTMLScriptElement/defer-write.html [ Failure ]
  fast/files/blob-constructor.html [ Failure ]
  fast/files/blob-slice-overflow.html [ Failure ]

Regressions: Unexpected image-only failures (11)
  compositing/visibility/frameset-visibility-hidden.html [ ImageOnlyFailure ]
  css3/blending/background-blend-mode-crossfade-image.html [ ImageOnlyFailure ]
  css3/blending/background-blend-mode-data-uri-svg-image.html [ ImageOnlyFailure ]
  css3/blending/background-blend-mode-tiled-layers.html [ ImageOnlyFailure ]
  css3/images/cross-fade-svg-with-opacity.html [ ImageOnlyFailure ]
  css3/shapes/shape-outside/shape-image/shape-image-002.html [ ImageOnlyFailure ]
  css3/shapes/shape-outside/shape-image/shape-image-005.html [ ImageOnlyFailure ]
  css3/shapes/shape-outside/shape-image/shape-image-020.html [ ImageOnlyFailure ]
  css3/shapes/shape-outside/shape-image/shape-image-023.html [ ImageOnlyFailure ]
  css3/viewport-percentage-lengths/vh-resize.html [ ImageOnlyFailure ]
  fast/backgrounds/background-image-large-float-intrinsic-ratio.html [ ImageOnlyFailure ]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376345</commentid>
    <comment_count>10</comment_count>
      <attachid>327732</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-11-30 09:19:30 -0800</bug_when>
    <thetext>Comment on attachment 327732
Patch

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

&gt;&gt; Source/WebCore/platform/text/TextCodec.h:47
&gt;&gt; +    virtual String decode(const char*, size_t length, bool flush, bool stopOnError, bool&amp; sawError) = 0;
&gt; 
&gt; This could return a std::optional&lt;String&gt; instead of passing in a bool&amp;

I agree and even started on this change locally. Then I realized it was getting to be too much change all in one patch, so I held off on that for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376353</commentid>
    <comment_count>11</comment_count>
      <attachid>327565</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-11-30 09:39:22 -0800</bug_when>
    <thetext>Comment on attachment 327565
Patch

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

Thanks for the review, Alex. I will figure out why the tests are failing and upload a new patch the next chance I get to work on this.

&gt;&gt; Source/WTF/wtf/text/LineEnding.cpp:57
&gt;&gt; +            needFix = true;
&gt; 
&gt; You could either break after either one of these, or you could count the number of changes you will need to make to call reserveInitialCapacity and uncheckedAppend in the loop below.  The first condition would reduce the length by one and this could just replace the character in place.  You could even do both in place then adjust the size of the Vector but not the capacity to make 0 allocations in this function.
&gt; 
&gt; Maybe a FIXME would be appropriate for these because they&apos;re just performance optimizations and you&apos;re developing on a platform that doesn&apos;t even compile them.

&gt; You could even do both in place then adjust the size of the Vector

Sure, I will change this to modify the vector in place; then I won’t need a preflight at all. When I wrote the code I hadn’t yet changed the argument to be an rvalue reference; I did that later to optimize the &quot;nothing changed&quot; case and did not take that into account.

&gt; you&apos;re developing on a platform that doesn&apos;t even compile them

That’s wrong. On Mac and all non-Windows platforms we compile both of these. On *Windows* we don’t compile normalizeLineEndingsToLF.

&gt; they&apos;re just performance optimizations

No, these are not just performance optimizations. I fixed at least two or three small logic errors in the existing functions. I probably should add test cases for these functions and maybe I should break this part of the patch off since it’s not dependent on much else in the patch.

&gt;&gt; Source/WTF/wtf/text/LineEnding.cpp:131
&gt;&gt; +    return result;
&gt; 
&gt; ASSERT(q == result.data() + result.size()) might be nice here.

Sure, will add that.

&gt;&gt; Source/WTF/wtf/text/StringCommon.h:659
&gt;&gt; +    return length == strlen(b) &amp;&amp; equalIgnoringASCIICase(a, b, length);
&gt; 
&gt; This reads each character twice when only one read is necessary.  A loop that checks for the null character before when it&apos;s expected might have better performance.

I agree that it might. There are other cases above, such as equalLettersIgnoringASCIICaseCommonWithoutLength and startsWithLettersIgnoringASCIICaseCommonWithoutLength that might also be faster this way.

I like the simplicity and clarity of the current version, and it would be easy for someone to write the more efficient one if they can prove it’s worth it.

&gt;&gt; Source/WebCore/PAL/pal/text/UnencodableHandling.h:32
&gt;&gt; +enum UnencodableHandling {
&gt; 
&gt; enum classes are all the new hotness because they don&apos;t pollute the namespace as much.  It&apos;s not the biggest deal for this one, but I think it&apos;s good practice to use enum classes unless there&apos;s a reason to use an enum.

I was moving something here, not changing it.

I would be happy to change it also, but doing that would mean that the patch starts to get even bigger.

&gt;&gt; Source/WebCore/fileapi/BlobBuilder.cpp:59
&gt;&gt; +    m_appendableData.append(static_cast&lt;const uint8_t*&gt;(arrayBufferView-&gt;baseAddress()), arrayBufferView-&gt;byteLength());
&gt; 
&gt; I think these static casts are no longer necessary.

The casts are necessary.

ArrayBufferView::baseAddress returns a const void*, but Vector&lt;uint8_t&gt;::append requires a const uint8_t.

The reason we can use static_cast instead of reinterpret_cast is that it’s void*, not another specific type.

&gt;&gt; Source/WebCore/platform/SharedBuffer.cpp:80
&gt;&gt; +    return adoptRef(*new SharedBuffer { vector.data(), vector.size() });
&gt; 
&gt; Couldn&apos;t we do some kind of awful casting instead of copying the data unnecessarily?

Perhaps. I did consider that. I would prefer not to do that. We can finish the job soon and get rid of the copying, and even if we don’t, the copying is not catastrophic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377330</commentid>
    <comment_count>12</comment_count>
      <attachid>327732</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-12-02 11:29:57 -0800</bug_when>
    <thetext>Comment on attachment 327732
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/text/TextCodec.h:47
&gt;&gt;&gt; +    virtual String decode(const char*, size_t length, bool flush, bool stopOnError, bool&amp; sawError) = 0;
&gt;&gt; 
&gt;&gt; This could return a std::optional&lt;String&gt; instead of passing in a bool&amp;
&gt; 
&gt; I agree and even started on this change locally. Then I realized it was getting to be too much change all in one patch, so I held off on that for now.

On reflection, I realize that would not work. This function returns *both* a String and whether we saw an error; the string contains what was decoded even if an error was encountered. So if we wanted to return both things cleanly as a return value, the type of the return value would need to be a std::pair, std::tuple, or struct. Not std::optional or std::expected.

Unless we changed the design after studying how callers use this. There’s a change that callers fall into two categories:

1) callers that ignore errors completely
2) callers that do  not pay attention to the decoded data in the return value if there was an error

If callers fall into those two categories, then we might be able to just rid of sawError and use a null string or std::nullopt to indicate there was an error. But it requires looking at all the callers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377338</commentid>
    <comment_count>13</comment_count>
      <attachid>328245</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-12-02 11:57:26 -0800</bug_when>
    <thetext>Created attachment 328245
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377340</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-12-02 12:00:22 -0800</bug_when>
    <thetext>OK, Alex, new patch has all the changes you asked for modulo my responses above; adds the missing line of code the absence of which was causing tests to fail, the shrink call in TextCodecUTF8::encode; and adds TestWebKitAPI tests for the LineEnding functions, including tests which would have failed with the old version with some bugs in edge cases.

So ready to review and land I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377343</commentid>
    <comment_count>15</comment_count>
      <attachid>328247</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-12-02 12:10:59 -0800</bug_when>
    <thetext>Created attachment 328247
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377344</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-12-02 12:11:23 -0800</bug_when>
    <thetext>And now also fixed GTK and WPE builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377363</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-12-02 14:25:45 -0800</bug_when>
    <thetext>Tests don’t compile on Windows. Will fix that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377364</commentid>
    <comment_count>18</comment_count>
      <attachid>328255</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-12-02 14:29:55 -0800</bug_when>
    <thetext>Created attachment 328255
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377365</commentid>
    <comment_count>19</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-12-02 14:30:19 -0800</bug_when>
    <thetext>New patch should fix tests compiling on Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377394</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-12-02 16:39:32 -0800</bug_when>
    <thetext>Hooray, looks like EWS is all green now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377558</commentid>
    <comment_count>21</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-12-03 17:53:51 -0800</bug_when>
    <thetext>Anyone willing to review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1379000</commentid>
    <comment_count>22</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-12-06 20:06:59 -0800</bug_when>
    <thetext>Committed r225618: &lt;https://trac.webkit.org/changeset/225618&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327562</attachid>
            <date>2017-11-24 17:02:08 -0800</date>
            <delta_ts>2017-11-24 17:58:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-180009-20171124170207.patch</filename>
            <type>text/plain</type>
            <size>167304</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI1MTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
M2I0NWE0Yzk2NTU3YjMxNGQ1ZDEyMDIxNWE4M2ExYjQ4ZjhlOWVkLi41NDI0NjUzNWJjMDlkNjM3
YWM4M2YzMmIwOTIzMTc5YWVlNjk3ZWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMiBAQAorMjAxNy0xMS0yNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgTW9kZXJuaXplIHNvbWUgYXNwZWN0cyBvZiB0ZXh0IGNvZGVjcywgZWxpbWluYXRl
IFdlYktpdCB1c2Ugb2Ygc3RyY2FzZWNtcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMDA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwOiBSZW1vdmVkIGlu
Y2x1ZGUgb2YgU3RyaW5nRXh0cmFzLmguCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cDogRGl0dG8uCisgICAgICAgICogYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHA6IERpdHRv
LgorICAgICAgICAqIHJ1bnRpbWUvQ29uZmlnRmlsZS5jcHA6IERpdHRvLgorICAgICAgICAqIHJ1
bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHA6IERpdHRvLgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhp
bmdUeXBlLmNwcDogRGl0dG8uCisgICAgICAgICogcnVudGltZS9KU0NKU1ZhbHVlLmNwcDogRGl0
dG8uCisgICAgICAgICogcnVudGltZS9KU0RhdGVNYXRoLmNwcDogRGl0dG8uCisgICAgICAgICog
cnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHA6IERpdHRvLgorICAgICAgICAqIHJ1
bnRpbWUvT3B0aW9ucy5jcHA6IERpdHRvLgorICAgICAgICAoSlNDOjpwYXJzZSk6IFVzZSBlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSBpbnN0ZWFkIG9mIHN0cmNhc2VjbXAuCisKIDIwMTct
MTEtMjQgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAg
W0pTQ10gTWFrZSBlbXB0eSBrZXkgYXMgZGVsZXRlZCBtYXJrIGluIEhhc2hNYXBCdWNrZXQgYW5k
IGRyb3AgbV9kZWxldGVkIGZpZWxkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBi
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGMxM2VjYjQ5OGZhYjNiZWRhNjU3YTMwMDFmYjJh
NWI0M2ViODBjNGEuLmMyOGM4ZDEzNTNhMGU4NDE0YzdjNjg2Y2NhMjExZjVjMjA1NzBiYmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMzkgQEAKKzIwMTctMTEtMjQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIE1vZGVybml6ZSBzb21lIGFzcGVjdHMgb2YgdGV4dCBjb2RlY3MsIGVs
aW1pbmF0ZSBXZWJLaXQgdXNlIG9mIHN0cmNhc2VjbXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDAwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0Fzc2VydGlvbnMuY3BwOiBSZW1vdmVkIGlu
Y2x1ZGUgb2YgU3RyaW5nRXh0cmFzLmguCisgICAgICAgIChXVEZMb2dDaGFubmVsQnlOYW1lKTog
VXNlIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UgaW5zdGVhZCBvZiBzdHJjYXNlY21wLgorICAgICAg
ICAqIHd0Zi9EYXRlTWF0aC5jcHA6IFJlbW92ZWQgaW5jbHVkZSBvZiBTdHJpbmdFeHRyYXMuaC4K
KyAgICAgICAgKiB3dGYvTUQ1LmNwcDogRGl0dG8uIEFsc28gcmVtb3ZlZCBpbmNsdWRlIG9mIENT
dHJpbmcuaC4KKyAgICAgICAgKiB3dGYvU0hBMS5jcHA6IERpdHRvLgorCisgICAgICAgICogd3Rm
L1N0cmluZ0V4dHJhcy5oOgorICAgICAgICAoc3RybmNhc2VjbXApOiBEZWxldGVkLgorICAgICAg
ICAoc3RyY2FzZWNtcCk6IERlbGV0ZWQuCisKKyAgICAgICAgKiB3dGYvU3RyaW5nUHJpbnRTdHJl
YW0uY3BwOiBSZW1vdmVkIGluY2x1ZGUgb2YgU3RyaW5nRXh0cmFzLmguCisgICAgICAgICogd3Rm
L3RleHQvQmFzZTY0LmNwcDogRGl0dG8uCisKKyAgICAgICAgKiB3dGYvdGV4dC9MaW5lRW5kaW5n
LmNwcDoKKyAgICAgICAgKFdURjo6bm9ybWFsaXplTGluZUVuZGluZ3NUb0xGKTogUmVwbGFjZWQg
b2xkIG1vcmUgZ2VuZXJhbCBwdXJwb3NlIGZ1bmN0aW9uIHdpdGgKKyAgICAgICAgdGhpcy4gQ2hh
bmdlZCBhcmd1bWVudCB0eXBlIHRvIHZlY3RvciBhbmQgdXNlZCBhbiBydmFsdWUgcmVmZXJlbmNl
IGFuZCByZXR1cm4gdmFsdWUuCisgICAgICAgIEFsc28gZml4ZWQgc29tZSBzbWFsbCBsb2dpYyBl
cnJvcnMuCisgICAgICAgIChXVEY6Om5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9DUkxGKTogRGl0dG8u
CisgICAgICAgIChXVEY6Om5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9OYXRpdmUpOiBVcGRhdGVkIGZv
ciBhYm92ZSBjaGFuZ2VzLgorICAgICAgICAqIHd0Zi90ZXh0L0xpbmVFbmRpbmcuaDogVXBkYXRl
ZCBmb3IgYWJvdmUgY2hhbmdlcy4KKworICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0NvbW1vbi5o
OgorICAgICAgICAoV1RGOjplcXVhbElnbm9yaW5nQVNDSUlDYXNlKTogQWRkZWQgb3ZlcmxvYWQg
Zm9yIGNvbnN0IGNoYXIqLgorICAgICAgICAoV1RGOjplcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZSk6IERpdHRvLgorCisgICAgICAgICogd3RmL3RleHQvVGV4dFN0cmVhbS5jcHA6IFJlbW92
ZWQgaW5jbHVkZSBvZiBTdHJpbmdFeHRyYXMuaC4KKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJp
bmcuY3BwOiBEaXR0by4KKyAgICAgICAgKiB3dGYvdW5pY29kZS9pY3UvQ29sbGF0b3JJQ1UuY3Bw
OiBEaXR0by4KKwogMjAxNy0xMS0yMyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmVkdWNlIFdURjo6U3RyaW5nIG9wZXJhdGlvbnMgdGhhdCBkbyB1bm5lY2Vzc2Fy
eSBVbmljb2RlIG9wZXJhdGlvbnMgaW5zdGVhZCBvZiBBU0NJSQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDZjOGJl
MWIxYzI4YjJiNGMwNmIwNzBjNzc5MjlkZDE5MzU5ZWZlMTguLmUzNzc5ZTA3NGRkNGNhMjBhYjZl
YzRkZDIyZDBmNzkzNWMxM2Q0MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxODEgQEAKKzIwMTct
MTEtMjQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybml6
ZSBzb21lIGFzcGVjdHMgb2YgdGV4dCBjb2RlY3MsIGVsaW1pbmF0ZSBXZWJLaXQgdXNlIG9mIHN0
cmNhc2VjbXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE4MDAwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hC
b2R5Ojpjb25zdW1lQXNTdHJlYW0pOiBVcGRhdGUgdG8gdXNlIHNpemUgc2luY2UgdGhlIHJlc3Vs
dCBvZgorICAgICAgICBlbmNvZGUgaXMgbm93IFZlY3RvciByYXRoZXIgdGhhbiBDU3RyaW5nLgor
ICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojpjb25zdW1lVGV4dCk6IFJlbW92ZWQgbm93LXVu
bmVlZGVkIHR5cGUgY2FzdC4KKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6dGFrZSk6IFBh
c3MgcmVzdWx0IG9mIGVuY29kZSBkaXJlY3RseSB0byBTaGFyZWRCdWZmZXI6OmNyZWF0ZS4KKwor
ICAgICAgICAqIE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRlci5jcHA6IFJlbW92
ZWQgaW5jbHVkZSBvZiBTdHJpbmdFeHRyYXMuaC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tl
dHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcDogRGl0dG8uCisgICAgICAgICogYnJpZGdlL0lkZW50
aWZpZXJSZXAuaDogRGl0dG8uCisgICAgICAgICogYnJpZGdlL2MvY19pbnN0YW5jZS5jcHA6IERp
dHRvLgorCisgICAgICAgICogZmlsZWFwaS9CbG9iQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpCbG9iQnVpbGRlcjo6YXBwZW5kKTogVXBkYXRlZCBmb3IgQ1N0cmluZyB0byBWZWN0b3Ig
Y2hhbmdlLgorCisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6Y2hlY2tGb3JNZXRh
Q2hhcnNldCk6IENhbGwgdGhlIGRlY29kZSBmdW5jdGlvbgorICAgICAgICB3aXRoIGFsbCB0aGUg
YXJndW1lbnRzIHNpbmNlIHRoZXJlIGlzIG9ubHkgb25lIGRlY29kZSBmdW5jdGlvbiBub3cuCisK
KyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbXB1dGVDb250ZW50U2VjdXJpdHlQb2xpY3lTSEEyNTZIYXNoKTogVXBk
YXRlZCBmb3IgQ1N0cmluZyB0byBWZWN0b3IgY2hhbmdlLgorCisgICAgICAgICogbG9hZGVyL1Jl
c291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcnlwdG9n
cmFwaGljRGlnZXN0Rm9yQnl0ZXMpOiBDaGFuZ2VkIGFyZ3VtZW50IHR5cGUgdG8gY29uc3Qgdm9p
ZCouCisgICAgICAgICogbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oOiBEaXR0
by4KKworICAgICAgICAqIGxvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRSZXNvdXJjZURlY29kZXI6OlRleHRSZXNvdXJjZURlY29kZXIpOiBNb3Zl
ZCBpbml0aWFsaXphdGlvbiBvZiBkYXRhCisgICAgICAgIG1lbWJlcnMgdG8gY2xhc3MgZGVmaW5p
dGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSk6IE1v
dmVkIGZ1bmN0aW9uIGJvZHkgaGVyZSBmcm9tIHRoZSBoZWFkZXIuCisgICAgICAgIChXZWJDb3Jl
OjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpzZXRFbmNvZGluZyk6IFVzZSBlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRSZXNvdXJjZURlY29kZXI6OnNo
b3VsZEF1dG9EZXRlY3QgY29uc3QpOiBVcGRhdGVkIGZvciBuYW1lIGNoYW5nZQorICAgICAgICB0
byBtX3BhcmVudEZyYW1lQXV0b0RldGVjdGVkRW5jb2RpbmcsIHdoaWNoIG9idmlhdGVzIGEgY29t
bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRSZXNvdXJjZURlY29kZXI6OmZsdXNoKTogRGl0
dG8uCisgICAgICAgICogbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuaDogTW92ZWQgaW5pdGlh
bGl6YXRpb24gaGVyZSBmcm9tIGNvbnN0cnVjdG9yLgorICAgICAgICBNb3ZlZCBmdW5jdGlvbiBi
b2RpZXMgb3V0IG9mIHRoZSBjbGFzcy4gUmVuYW1lZCBtX2hpbnRFbmNvZGluZyB0bworICAgICAg
ICBtX3BhcmVudEZyYW1lQXV0b0RldGVjdGVkRW5jb2Rpbmcgc2luY2UgdGhhdCBpcyBhIG1vcmUg
YWNjdXJhdGUgZGVzY3JpcHRpb24uCisKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2UuY3BwOiBSZW1vdmVkIGluY2x1ZGUgb2YgU3RyaW5nRXh0cmFzLmgu
CisgICAgICAgICogcGFnZS9GcmFtZVRyZWUuY3BwOiBEaXR0by4KKyAgICAgICAgKiBwYWdlL1Bh
Z2VTZXJpYWxpemVyLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYWdlU2VyaWFsaXpl
cjo6c2VyaWFsaXplRnJhbWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTZXJpYWxp
emVyOjpzZXJpYWxpemVDU1NTdHlsZVNoZWV0KTogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL2Nz
cC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNl
Y3VyaXR5UG9saWN5OjpmaW5kSGFzaE9mQ29udGVudEluUG9saWNpZXMgY29uc3QpOiBQYXNzIHJl
c3VsdAorICAgICAgICBvZiBlbmNvZGUgZGlyZWN0bHkgdG8gU3RyaW5nQnVmZmVyOjpjcmVhdGUu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9GaWxlSGFuZGxlLmNwcDogUmVtb3ZlZCBpbmNsdWRlIG9m
IFN0cmluZ0V4dHJhcy5oLgorCisgICAgICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKTogQWRkZWQgYW4gb3Zlcmxv
YWQgdGhhdCB0YWtlcyBWZWN0b3I8dWludDhfdD4uCisgICAgICAgICogcGxhdGZvcm0vU2hhcmVk
QnVmZmVyLmg6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vVVJMUGFyc2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlVSTFBhcnNlcjo6ZW5jb2RlUXVlcnkpOiBVcGRhdGVkIHNpbmNlIGVu
Y29kZSByZXR1cm5zIGEgVmVjdG9yIGluc3RlYWQKKyAgICAgICAgb2YgYSBDU3RyaW5nIG5vdy4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2hvdWxkV2FpdEZvckxvYWRpbmdPZlJlc291cmNl
KTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5
ZXIuY3BwOiBSZW1vdmVkIGluY2x1ZGUgb2YgU3RyaW5nRXh0cmFzLmguCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRh
OjpjcmVhdGUpOiBBZGRlZCBuZXcgb3ZlcmxvYWQsIGFuZCBzaW1wbGlmaWVkIHNvbWUgZXhpc3Rp
bmcgb25lcy4KKyAgICAgICAgKFdlYkNvcmU6Om5vcm1hbGl6ZVN0cmluZ0RhdGEpOiBDaGFuZ2Vk
IHJldHVybiB0eXBlIHRvIFZlY3Rvcjx1aW50OF90Pi4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1E
YXRhOjphcHBlbmRNdWx0aVBhcnRTdHJpbmdWYWx1ZSk6IFVwZGF0ZWQgZm9yIGNoYW5nZSBpbiB0
eXBlIG9mCisgICAgICAgIHJlc3VsdCBvZiBub3JtYWxpemVTdHJpbmdEYXRhLgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlIGFuZCB1
cGRhdGVkIGNvbW1lbnRzLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YUJ1
aWxkZXIuY3BwOiBNYWRlIHRoaXMgYSBuYW1lc3BhY2UgaW5zdGVhZCBvZiBhIGNsYXNzLgorICAg
ICAgICAoV2ViQ29yZTo6Rm9ybURhdGFCdWlsZGVyOjphcHBlbmQpOiBBZGRlZCBhbiBvdmVybG9h
ZCBmb3IgVmVjdG9yPHVpbnQ4X3Q+LgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFCdWlsZGVy
OjphcHBlbmRRdW90ZWQpOiBSZW5hbWVkIGZyb20gYXBwZW5kUXVvdGVkU3RyaW5nIGFuZAorICAg
ICAgICBjaGFuZ2VkIHRoZSBhcmd1bWVudCB0eXBlLgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURh
dGFCdWlsZGVyOjphcHBlbmRFbmNvZGVkQXNGb3JtRGF0YSk6IE1vdmVkIGxvZ2ljIHVwIGZyb20g
dGhlCisgICAgICAgIGVuY29kZVN0cmluZ0FzRm9ybURhdGEgZnVuY3Rpb24gaW50byBhIG5ldyBz
ZXBhcmF0ZSBoZWxwZXIuCisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUJ1aWxkZXI6OmJlZ2lu
TXVsdGlQYXJ0SGVhZGVyKTogQ2hhbmdlZCBhcmd1bWVudCB0eXBlLgorICAgICAgICAoV2ViQ29y
ZTo6Rm9ybURhdGFCdWlsZGVyOjphZGRLZXlWYWx1ZVBhaXJBc0Zvcm1EYXRhKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURhdGEp
OiBVcGRhdGVkIHRvIGNhbGwgaGVscGVyLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9y
bURhdGFCdWlsZGVyLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIHBsYXRm
b3JtL3RleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmg6IFVzZSBWZWN0b3I8dWludDhfdD4gaW5z
dGVhZCBvZgorICAgICAgICBWZWN0b3I8Y2hhcj4sIGFsc28gdXBkYXRlZCB0aGUgY29kZSB0aGF0
IGNhbGxzIGVuY29kZSBmb3IgdGhlIG5ldyByZXR1cm4gdHlwZS4KKworICAgICAgICAqIHBsYXRm
b3JtL3RleHQvVGV4dENvZGVjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlYzo6Z2V0
VW5lbmNvZGFibGVSZXBsYWNlbWVudCk6IFVwZGF0ZWQgc2luY2Ugd2UgYXJlIHVzaW5nCisgICAg
ICAgIHN0ZDo6YXJyYXkgbm93LCBzbyB0aGUgb3V0IGFyZ3VtZW50IGlzIGVhc2llciB0byB1bmRl
cnN0YW5kLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjLmg6IFVzZSBzdGQ6OmFy
cmF5IGZvciB0aGUgVW5lbmNvZGFibGVSZXBsYWNlbWVudEFycmF5CisgICAgICAgIHR5cGUsIHJl
bW92ZWQgdGhlIG92ZXJsb2FkIG9mIGRlY29kZSBzbyB0aGVyZSBpcyBvbmx5IG9uZSBkZWNvZGUg
ZnVuY3Rpb24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJQ1VDb252ZXJ0ZXJXcmFwcGVyOjp+SUNVQ29udmVydGVyV3JhcHBl
cik6IERlbGV0ZWQuCisgICAgICAgIE5vdCBuZWVkZWQgYW55IG1vcmUgc2luY2Ugd2UgdXNlIElD
VUNvbnZlcnRlclB0ciBpbnN0ZWFkIG5vdy4KKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlZENvbnZl
cnRlcklDVSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNJQ1U6OmNyZWF0
ZSk6IERlbGV0ZWQuIENhbGxlcnMganVzdCB1c2UgbWFrZV91bmlxdWUKKyAgICAgICAgZGlyZWN0
bHkgbm93LgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjSUNVOjpyZWdpc3RlckNvZGVjcyk6
IFJld3JvdGUgdG8gdXNlIGxhbWJkYXMgaW5zdGVhZAorICAgICAgICBvZiBmdW5jdGlvbnMgd2l0
aCB2b2lkKiBwb2ludGVycy4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0lDVTo6VGV4dENv
ZGVjSUNVKTogTW92ZWQgaW5pdGlhbGl6ZXJzIGludG8gdGhlIGhlYWRlci4KKyAgICAgICAgKFdl
YkNvcmU6OlRleHRDb2RlY0lDVTo6flRleHRDb2RlY0lDVSk6IE1vdmVkIHRoZSBib2R5IG9mIHJl
bGVhc2VJQ1VDb252ZXJ0ZXIKKyAgICAgICAgaW4gaGVyZS4gQWxzbyBncmVhdGx5IHNpbXBsaWZp
ZWQgaXQgbm93IHRoYXQgSUNVQ29udmVydGVyUHRyIGhhbmRsZXMgY2xvc2luZworICAgICAgICBp
dCBhcyBuZWVkZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNJQ1U6OnJlbGVhc2VJQ1VD
b252ZXJ0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjSUNV
OjpjcmVhdGVJQ1VDb252ZXJ0ZXIgY29uc3QpOiBSZXdyb3RlIHRvIHNpbXBsZnkgbm93IHRoYXQK
KyAgICAgICAgd2UgY2FuIHVzZSBJQ1VDb252ZXJ0ZXJQdHIuCisgICAgICAgIChXZWJDb3JlOjpF
cnJvckNhbGxiYWNrU2V0dGVyOjpFcnJvckNhbGxiYWNrU2V0dGVyKTogVGFrZSBhIHJlZmVyZW5j
ZSBpbnN0ZWFkCisgICAgICAgIG9mIGEgcG9pbnRlci4KKyAgICAgICAgKFdlYkNvcmU6OkVycm9y
Q2FsbGJhY2tTZXR0ZXI6On5FcnJvckNhbGxiYWNrU2V0dGVyKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Q29kZWNJQ1U6OmRlY29kZSk6IFVzZSBlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZSBpbnN0ZWFkIG9mCisgICAgICAgIHN0cmNhc2VjbXAuCisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Q29kZWNJQ1U6OmVuY29kZSk6IFJldHVybiBhIFZlY3RvciBpbnN0ZWFkIG9mIGEgQ1N0
cmluZy4KKyAgICAgICAgVGFrZSBhIFN0cmluZ1ZpZXcgaW5zdGVhZCBvZiBhIHBvaW50ZXIgYW5k
IGxlbmd0aC4gU2ltcGxpZmllZAorICAgICAgICB0aGUgYmFja3NsYXNoLWFzLWN1cnJlbmN5LXN5
bWJvbCBjb2RlIGJ5IHVzaW5nIFN0cmluZzo6cmVwbGFjZS4KKyAgICAgICAgKiBwbGF0Zm9ybS90
ZXh0L1RleHRDb2RlY0lDVS5oOiBVcGRhdGVkIGZvciBhYm92ZS4gRml4ZWQgaW5kZW50YXRpb24u
CisgICAgICAgIEFkZGVkIGEgbmV3IElDVUNvbnZlcnRlclB0ciB0eXBlZGVmIHRoYXQgdXNlcyBz
dGQ6OnVuaXF1ZV9wdHIgdG8gY2xvc2UgdGhlCisgICAgICAgIGNvbnZlcnRlcjsgY29tYmluZWQg
d2l0aCBtb3ZlIHNlbWFudGljcyBpdCBzaW1wbGlmaWVzIHRoaW5ncyBzbyB3ZSBkb24ndCBoYXZl
CisgICAgICAgIHRvIGJlIHNvIGNhcmVmdWwgYWJvdXQgY2FsbGluZyB1Y252X2Nsb3NlLgorCisg
ICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuY3BwOiBSZW5hbWVkIHRoZSBM
YXRpbi0xIHRvIFVuaWNvZGUgdGFibGUgZnJvbQorICAgICAgICAidGFibGUiIHRvIGxhdGluMUNv
bnZlcnNpb25UYWJsZS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0xhdGluMTo6cmVnaXN0
ZXJDb2RlY3MpOiBVc2UgYSBsYW1iZGEuCisgICAgICAgIChXZWJDb3JlOjplbmNvZGVDb21wbGV4
V2luZG93c0xhdGluMSk6IFJldHVybiBhIFZlY3RvciBpbnN0YWQgb2YgQ1N0cmluZy4KKyAgICAg
ICAgQWxzbyB1c2UgU3RyaW5nVmlldzo6Y29kZVBvaW50cyBpbnN0ZWFkIG9mIG91ciBvd24gVTE2
X05FWFQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNMYXRpbjE6OmVuY29kZSk6IE1vcmUg
b2YgdGhlIHNhbWUuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuaDog
VXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29k
ZWNSZXBsYWNlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNSZXBsYWNlbWVu
dDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY1JlcGxhY2Vt
ZW50OjpUZXh0Q29kZWNSZXBsYWNlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpU
ZXh0Q29kZWNSZXBsYWNlbWVudDo6cmVnaXN0ZXJDb2RlY3MpOiBVc2UgYSBsYW1iZGEuCisgICAg
ICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNSZXBsYWNlbWVudC5oOiBVcGRhdGVkIGZvciB0
aGUgYWJvdmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Om5ld1N0cmVhbWluZ1RleHREZWNvZGVyVVRGMTZMRSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpuZXdTdHJlYW1pbmdUZXh0RGVjb2RlclVURjE2QkUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjVVRGMTY6OnJlZ2lzdGVyQ29kZWNz
KTogVXNlIGxhbWJkYXMuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNVVEYxNjo6ZW5jb2Rl
KTogUmV0dXJuIGEgVmVjdG9yLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRG
MTYuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9U
ZXh0Q29kZWNVVEY4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY1VURjg6OnJlZ2lz
dGVyQ29kZWNzKTogVXNlIGEgbGFtYmRhLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjVVRG
ODo6ZW5jb2RlKTogUmV0dXJuIGEgVmVjdG9yLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4
dENvZGVjVVRGOC5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS90ZXh0L1RleHRDb2RlY1VzZXJEZWZpbmVkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5ld1N0
cmVhbWluZ1RleHREZWNvZGVyVXNlckRlZmluZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dENvZGVjVXNlckRlZmluZWQ6OnJlZ2lzdGVyQ29kZWNzKTogVXNlIGEgbGFtYmRhLgor
ICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlQ29tcGxleFVzZXJEZWZpbmVkKTogUmV0dXJuIGEgVmVj
dG9yLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjVXNlckRlZmluZWQ6OmVuY29kZSk6IERp
dHRvLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuaDogVXBk
YXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rp
bmcuY3BwOiBDaGFuZ2VkIFRleHRDb2RlY01hcCB0byBqdXN0IGhvbGQgYQorICAgICAgICBXVEY6
OkZ1bmN0aW9uIGluc3RlYWQgb2YgaG9sZGluZyBhIGZ1bmN0aW9uIGFuZCBhbiBhZGRpdGlvbmFs
IGRhdGEgcG9pbnRlci4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRFbmNvZGluZzo6VGV4dEVuY29k
aW5nKTogVXNlIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlCisgICAgICAgIGluc3RlYWQg
b2YgYSBzcGVjaWFsIGlzUmVwbGFjZW1lbnRFbmNvZGluZyBmdW5jdGlvbi4KKyAgICAgICAgKFdl
YkNvcmU6OlRleHRFbmNvZGluZzo6ZW5jb2RlIGNvbnN0KTogUmV0dXJuIGEgVmVjdG9yIGluc3Rl
YWQgb2YgYSBDU3RyaW5nLgorICAgICAgICBQYXNzIFN0cmluZ1ZpZXcgaW5zdGVhZCBvZiBhIHBv
aW50ZXIgYW5kIGxlbmd0aC4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5o
OiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRF
bmNvZGluZ1JlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZFRvVGV4dENvZGVjTWFw
KTogUmVtb3ZlZCB0aGUgYWRkaXRpb25hbERhdGEgcG9pbnRlciBhbmQgdXNlZAorICAgICAgICBX
VEZNb3ZlIHNpbmNlIE5ld1RleHRDb2RlY0Z1bmN0aW9uIGlzIG5vdyBhIFdURjo6RnVuY3Rpb24g
cmF0aGVyIHRoYW4gYSBDCisgICAgICAgIGZ1bmN0aW9uIHBvaW50ZXIuCisgICAgICAgIChXZWJD
b3JlOjppc1JlcGxhY2VtZW50RW5jb2RpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
bmV3VGV4dENvZGVjKTogVXNlIGZpbmQgaW5zdGVhZCBvZiBnZXQgbm93IHRoYXQgdGhlIGZ1Y250
aW9ucyBpbgorICAgICAgICB0aGUgbWFwIGFyZSBXVEY6OkZ1bmN0aW9uIGFuZCBjYW4ndCBiZSBj
b3BpZWQuCisgICAgICAgIChXZWJDb3JlOjpkdW1wVGV4dEVuY29kaW5nTmFtZU1hcCk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5oOiBVcGRh
dGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiB4bWwvWFNMVFVuaWNvZGVTb3J0LmNwcDog
UmVtb3ZlZCBpbmNsdWRlIG9mIFN0cmluZ0V4dHJhcy5oLgorICAgICAgICAqIHhtbC9wYXJzZXIv
WE1MRG9jdW1lbnRQYXJzZXIuY3BwOiBEaXR0by4KKyAgICAgICAgKiB4bWwvcGFyc2VyL1hNTERv
Y3VtZW50UGFyc2VyTGlieG1sMi5jcHA6IERpdHRvLgorCiAyMDE3LTExLTI0ICBBbnRvaW5lIFF1
aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CiAKICAgICAgICAgQ2FwdGlvbnMgbW92ZSB3aGVuIDx2
aWRlbz4gd2l0aCBubyBjb250cm9scyBpcyBob3ZlcmVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QQUwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwppbmRleCBi
NGU5MDNhNjU1YTc0YzMxMDU0OGMyYTg1NzNhNzUyNGE4MmMzN2U0Li4zNGRkZThhMmQ2Y2M0YWI5
ZTM5NTM3NDQwMjBmZjQ0OWIxZTJlMTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NCBAQAorMjAxNy0xMS0yNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgTW9kZXJuaXplIHNvbWUgYXNwZWN0cyBvZiB0ZXh0IGNvZGVjcywgZWxpbWluYXRlIFdlYktp
dCB1c2Ugb2Ygc3RyY2FzZWNtcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTgwMDA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBQQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkZWQgVW5lbmNv
ZGFibGVIYW5kbGluZy5oLgorICAgICAgICAqIHBhbC90ZXh0L1VuZW5jb2RhYmxlSGFuZGxpbmcu
aDogTW92ZWQgdGhlIFVuZW5jb2RhYmxlSGFuZGxpbmcgZW51bWVyYXRpb24KKyAgICAgICAgaGVy
ZSBmcm9tIFRleHRDb2RlYy5oLgorCiAyMDE3LTExLTE5ICBUaW0gSG9ydG9uICA8dGltb3RoeV9o
b3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSB1bnVzZWQgVE9VQ0hfSUNPTl9MT0FE
SU5HIGZlYXR1cmUgZmxhZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA1ODFlYThiYTc2MjYzZGUxZWMzODI3OGQ1MTM1
ZDhlMzhkNDE3NDQ3Li5lMDhjY2I3YjFjN2E0OGNmNDVmMmVmMDViYjMwODhkOTU0YTdjZjVjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE3LTExLTI0ICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KKworICAgICAgICBNb2Rlcm5pemUgc29tZSBhc3BlY3RzIG9mIHRleHQgY29k
ZWNzLCBlbGltaW5hdGUgV2ViS2l0IHVzZSBvZiBzdHJjYXNlY21wCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODAwMDkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9OZXRzY2FwZUJyb3dzZXJGdW5jcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OmluaXRpYWxp
emVQcm90ZWN0aW9uU3BhY2UpOiBVc2UgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UgaW5z
dGVhZAorICAgICAgICBvZiBzdHJjYXNlY21wLgorCiAyMDE3LTExLTI0ICBaYW4gRG9iZXJzZWsg
IDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBbQ29vcmRHcmFwaGljc10gQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjp1cGRhdGVDb250ZW50QnVmZmVycygpIHNob3VsZCBhbHdheXMg
YXNzdW1lIGEgbm9uLW51bGwgQ29vcmRpbmF0ZWRCdWZmZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5n
ZUxvZwppbmRleCBmZmMyOWYyNjUxMmZjZjhmYmUwNWE0M2ZjYTMzOTlkMzVjMjUxNjAyLi4zNGJm
MjJlOGEwMDRjNTViZDRkNThiZDNhN2ZiZGY4ZDNlNTBjMjJhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTctMTEtMjQgIERhcmluIEFkbGVyICA8ZGFy
aW5AYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybml6ZSBzb21lIGFzcGVjdHMgb2YgdGV4dCBj
b2RlY3MsIGVsaW1pbmF0ZSBXZWJLaXQgdXNlIG9mIHN0cmNhc2VjbXAKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDAwOQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSGlzdG9yeS9IaXN0b3J5UHJvcGVy
dHlMaXN0Lm1tOiBSZW1vdmVkIGluY2x1ZGUgb2YgU3RyaW5nRXh0cmFzLmguCisKKyAgICAgICAg
KiBQbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW06CisgICAgICAgIChXZWJLaXQ6
OmdldEF1dGhlbnRpY2F0aW9uSW5mbyk6IFVzZSBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZSBpbnN0ZWFkCisgICAgICAgIG9mIHN0cmNhc2VjbXAuCisKKyAgICAgICAgKiBXZWJWaWV3L1dl
YlByZWZlcmVuY2VzLm1tOgorICAgICAgICAoY29udGFpbnMpOiBEaXR0by4gQWxzbyBtYWRlIHRo
aXMgYSB0ZW1wbGF0ZSBzbyBpdCdzIGVhc2llciB0byBjYWxsIG9uIGFuIGFycmF5LgorICAgICAg
ICAoY2FjaGVNb2RlbEZvck1haW5CdW5kbGUpOiBUYWtlIGFkdmFudGFnZSBvZiB0aGUgYWJvdmUg
dG8gbWFrZSBpdCBjbGVhbmVyLgorCiAyMDE3LTExLTIzICBTYW0gV2VpbmlnICA8c2FtQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIHVubmVlZGVkIFNjcmlwdENvbnRyb2xsZXI6OnByb2Nl
c3NpbmdVc2VyR2VzdHVyZSgpIGZvcndhcmRpbmcgZnVuY3Rpb25zCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwCmluZGV4IDMxNDZiMThmOGQ1MmJi
ZmI1MmY0OTEzYmQxOGRiZDlkY2RlYWMwYzEuLmNiMWI3NTg1YjIyZWMzMTQ3MWY4NGMyZjE1Njdk
Njg1OGIxNjg0OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
cnJheVByb2ZpbGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJh
eVByb2ZpbGUuY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KLSNp
bmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3Ry
ZWFtLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAppbmRleCAwYWZmNGIwYzZmZDMwYzkzYWI2MGUyYzVmODU4MWI4N2Mx
Yjk2Njc4Li5hNjE5Nzg3MTE2ZWJmMWM5ZjMwODk1YmRkZTRlOWU2ZmRmOTM4ZWNiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtODMsNyArODMs
NiBAQAogI2luY2x1ZGUgPHd0Zi9CYWdUb0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvQ29tbWFQ
cmludGVyLmg+CiAjaW5jbHVkZSA8d3RmL1NpbXBsZVN0YXRzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0
cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1VuaXF1ZWRTdHJpbmdJbXBsLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAppbmRleCAyMzdjMGU3NTIy
NTgyZGQzZTQ3YmEwYzdkODFjYmNiMjZkYmRlYzUxLi5mYmFkNzg3Y2Y0OGU4MGNjODM1MGQyYjdl
MWM0ZGFhODU1NGYyOTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhlY3V0aW9uQ291bnRlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiRXhl
Y3V0YWJsZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJW
TUlubGluZXMuaCIKLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25maWdG
aWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmZpZ0ZpbGUuY3BwCmlu
ZGV4IGI2MWExMzFjNzZlNmI3ZjI4YjgzN2RiNjU3ZDk1MjVhZDM2NzZlMzYuLjFiMTZjMmU3NWY4
YTRmMTQ1M2YwMmM1NDA0MzBiYTc5NDQ5MTM0OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbmZpZ0ZpbGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbmZpZ0ZpbGUuY3BwCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSA8c3Ry
aW5nLmg+CiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvRGF0YUxv
Zy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CiAKICNpZiBIQVZFKFJFR0VYX0gpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCmluZGV4IGIzMGY4ZWVlZDVhZjE4NWMx
ZDE1M2E3ZDAyNjk4MGNlNmIyOGNmY2UuLjVhYjAwN2ZjMTdmNjRlOWNiZDI4YzE5YjVmZDczOTZl
YWNmOWQyZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQ
cm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90
b3R5cGUuY3BwCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8dGltZS5oPgogI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRl
IDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAKICNpZiBIQVZFKExBTkdJTkZPX0gpCiAjaW5jbHVkZSA8
bGFuZ2luZm8uaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
ZGV4aW5nVHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5
cGUuY3BwCmluZGV4IGY3ZDU0NzU0ZDU5M2VhMjI4YTcxMGRlZjI1MjIwN2UzNGZjNTNjYTEuLjhi
NWFiM2M1YmM4MGY4MzJmYTBkYTY0N2VhYmE3NTQ1ZTJhMTc0ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmNwcApAQCAtMjYsOCArMjYsNiBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgogCi0jaW5jbHVk
ZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgotCiBuYW1lc3BhY2UgSlNDIHsKIAogSW5kZXhpbmdUeXBl
IGxlYXN0VXBwZXJCb3VuZE9mSW5kZXhpbmdUeXBlcyhJbmRleGluZ1R5cGUgYSwgSW5kZXhpbmdU
eXBlIGIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1Zh
bHVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCmlu
ZGV4IGQwMzA0NTIyMGQ1ZTk1MjY3ZWQ5ZjhmN2I5ZDMzNjVhODMxNzlkZDMuLmJhZjRkZmQyYjg3
OTRkMmI3NTJiZDJlYjUwZDQyMjkxMWUyOGFlZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAiSlNH
bG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJOdW1iZXJPYmplY3QuaCIKICNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KIAogbmFtZXNwYWNl
IEpTQyB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0
ZU1hdGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5jcHAK
aW5kZXggN2U2ZGY0NTdhN2QxMzg0OTQzMDBlOWQ5NmUxMjkyMzBjYTNhZDNiZC4uNmMwNGUzY2Q4
NjYwYzRlOGUxNjgzMjAwY2RiMjVmNmE0NzY2MDc0ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5jcHAKQEAgLTg2LDcgKzg2LDYgQEAKICNpbmNsdWRlIDx3
dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAKICNp
ZiBIQVZFKEVSUk5PX0gpCiAjaW5jbHVkZSA8ZXJybm8uaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAppbmRl
eCBjZDY4NmU4NWM5YWJhYzk0M2E2MjBhYjE1YzA3MGYyY2FmNDA0NWRmLi5kNDI4Yjg1MTNjYTVm
N2U0YTBhOTgzOGE5YWIzYjE3NGQzMDVhMGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCkBAIC01NCw3
ICs1NCw2IEBACiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvSGV4
TnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvU3Ry
aW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL2R0b2EuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVVRGOC5oPgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAppbmRleCBhZTk3N2I2MjMxOTcyY2UxZDAz
OTllNmU5ODA0NDRlZTkyN2UxZWQzLi43Yzk3MjFiMjA0NTY4ODc3NWFiMTc0YjhkNDExMGE4MjRh
OWQ5NzI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcApAQCAt
NDIsNyArNDIsNiBAQAogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8d3RmL051
bWJlck9mQ29yZXMuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8
d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
ICNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKQEAgLTcxLDExICs3MCwxMSBAQCB2
b2lkIE9wdGlvbnM6OmVuYWJsZVJlc3RyaWN0ZWRPcHRpb25zKGJvb2wgZW5hYmxlT3JOb3QpCiAg
ICAgCiBzdGF0aWMgYm9vbCBwYXJzZShjb25zdCBjaGFyKiBzdHJpbmcsIGJvb2wmIHZhbHVlKQog
ewotICAgIGlmICghc3RyY2FzZWNtcChzdHJpbmcsICJ0cnVlIikgfHwgIXN0cmNhc2VjbXAoc3Ry
aW5nLCAieWVzIikgfHwgIXN0cmNtcChzdHJpbmcsICIxIikpIHsKKyAgICBpZiAoZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLCAidHJ1ZSIpIHx8IGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKHN0cmluZywgInllcyIpIHx8ICFzdHJjbXAoc3RyaW5nLCAiMSIpKSB7CiAg
ICAgICAgIHZhbHVlID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIGlm
ICghc3RyY2FzZWNtcChzdHJpbmcsICJmYWxzZSIpIHx8ICFzdHJjYXNlY21wKHN0cmluZywgIm5v
IikgfHwgIXN0cmNtcChzdHJpbmcsICIwIikpIHsKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2Uoc3RyaW5nLCAiZmFsc2UiKSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZShzdHJpbmcsICJubyIpIHx8ICFzdHJjbXAoc3RyaW5nLCAiMCIpKSB7CiAgICAgICAgIHZh
bHVlID0gZmFsc2U7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTEyNywxNyArMTI2
LDE3IEBAIHN0YXRpYyBib29sIHBhcnNlKGNvbnN0IGNoYXIqIHN0cmluZywgY29uc3QgY2hhciom
IHZhbHVlKQogCiBzdGF0aWMgYm9vbCBwYXJzZShjb25zdCBjaGFyKiBzdHJpbmcsIEdDTG9nZ2lu
Zzo6TGV2ZWwmIHZhbHVlKQogewotICAgIGlmICghc3RyY2FzZWNtcChzdHJpbmcsICJub25lIikg
fHwgIXN0cmNhc2VjbXAoc3RyaW5nLCAibm8iKSB8fCAhc3RyY2FzZWNtcChzdHJpbmcsICJmYWxz
ZSIpIHx8ICFzdHJjbXAoc3RyaW5nLCAiMCIpKSB7CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKHN0cmluZywgIm5vbmUiKSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZShzdHJpbmcsICJubyIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmlu
ZywgImZhbHNlIikgfHwgIXN0cmNtcChzdHJpbmcsICIwIikpIHsKICAgICAgICAgdmFsdWUgPSBH
Q0xvZ2dpbmc6Ok5vbmU7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlmICgh
c3RyY2FzZWNtcChzdHJpbmcsICJiYXNpYyIpIHx8ICFzdHJjYXNlY21wKHN0cmluZywgInllcyIp
IHx8ICFzdHJjYXNlY21wKHN0cmluZywgInRydWUiKSB8fCAhc3RyY21wKHN0cmluZywgIjEiKSkg
eworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcsICJiYXNpYyIp
IHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmluZywgInllcyIpIHx8IGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmluZywgInRydWUiKSB8fCAhc3RyY21wKHN0cmlu
ZywgIjEiKSkgewogICAgICAgICB2YWx1ZSA9IEdDTG9nZ2luZzo6QmFzaWM7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAotICAgIGlmICghc3RyY2FzZWNtcChzdHJpbmcsICJ2ZXJib3Nl
IikgfHwgIXN0cmNtcChzdHJpbmcsICIyIikpIHsKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2Uoc3RyaW5nLCAidmVyYm9zZSIpIHx8ICFzdHJjbXAoc3RyaW5nLCAiMiIpKSB7
CiAgICAgICAgIHZhbHVlID0gR0NMb2dnaW5nOjpWZXJib3NlOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwCmluZGV4IGRhYmY2ZmViMGQ5NzM2YzBkOTI4MGE4
MGUyYWZmODc0ZWI5N2ViMjEuLmU2NjVkNDFkYzI2NzExMjI3YTQ2MzViNDQwZGE2NDMxZmRhMjFi
M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwCkBAIC00NSw3ICs0NSw2IEBACiAjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9TdGFja1RyYWNlLmg+CiAjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNTIwLDcgKzUxOSw3IEBAIFdU
RkxvZ0NoYW5uZWwqIFdURkxvZ0NoYW5uZWxCeU5hbWUoV1RGTG9nQ2hhbm5lbCogY2hhbm5lbHNb
XSwgc2l6ZV90IGNvdW50LCBjb25zCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKSB7CiAgICAgICAgIFdURkxvZ0NoYW5uZWwqIGNoYW5uZWwgPSBjaGFubmVsc1tpXTsK
LSAgICAgICAgaWYgKCFzdHJjYXNlY21wKG5hbWUsIGNoYW5uZWwtPm5hbWUpKQorICAgICAgICBp
ZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBjaGFubmVsLT5uYW1lKSkKICAgICAgICAg
ICAgIHJldHVybiBjaGFubmVsOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
RGF0ZU1hdGguY3BwIGIvU291cmNlL1dURi93dGYvRGF0ZU1hdGguY3BwCmluZGV4IDU3ZTI0ZGRm
NGVkODMyNzNiMGJiNjRlMDAyYTA0MWFhMWNlYWFlNjUuLjY0MjBiNWQ4YTA3MDg3NDg4NDg2YzBj
YzliMWFjZjExOTE4NThlMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0RhdGVNYXRoLmNw
cAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9EYXRlTWF0aC5jcHAKQEAgLTc3LDcgKzc3LDYgQEAKICNp
bmNsdWRlICJDdXJyZW50VGltZS5oIgogI2luY2x1ZGUgIk1hdGhFeHRyYXMuaCIKICNpbmNsdWRl
ICJTdGRMaWJFeHRyYXMuaCIKLSNpbmNsdWRlICJTdHJpbmdFeHRyYXMuaCIKIAogI2luY2x1ZGUg
PGFsZ29yaXRobT4KICNpbmNsdWRlIDxsaW1pdHMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL01ENS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9NRDUuY3BwCmluZGV4IDU1MDgwZjIxNWNjM2Q4
YWNjN2VkN2U2YWZjNTA5NWQzMzdhMGM5ZDcuLmI2NmRhMTg5MmIwYzNjMTg1ZDZmZDg2MTUwZDQ3
OGIwNjBkM2YxNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL01ENS5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvTUQ1LmNwcApAQCAtNTEsMTAgKzUxLDYgQEAKICNpbmNsdWRlICJNRDUuaCIK
IAogI2luY2x1ZGUgIkFzc2VydGlvbnMuaCIKLSNpZm5kZWYgTkRFQlVHCi0jaW5jbHVkZSAiU3Ry
aW5nRXh0cmFzLmgiCi0jaW5jbHVkZSAidGV4dC9DU3RyaW5nLmgiCi0jZW5kaWYKICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvU0hBMS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9TSEExLmNwcAppbmRleCAyZjg0
YTFlOTUzOGI4NDRkOTMyMTM2YmNlZmU3MjQyNmMxMGVjYTRkLi44MWVhNDJjMzBiZDkxZjM2MjBj
NWEwYjc5Y2IzOWRlOGU5ZDU1MThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9TSEExLmNw
cAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9TSEExLmNwcApAQCAtMzMsOCArMzMsNiBAQAogI2luY2x1
ZGUgIlNIQTEuaCIKIAogI2luY2x1ZGUgIkFzc2VydGlvbnMuaCIKLQotI2luY2x1ZGUgIlN0cmlu
Z0V4dHJhcy5oIgogI2luY2x1ZGUgInRleHQvQ1N0cmluZy5oIgogCiBuYW1lc3BhY2UgV1RGIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1N0cmluZ0V4dHJhcy5oIGIvU291cmNlL1dURi93
dGYvU3RyaW5nRXh0cmFzLmgKaW5kZXggNjc5N2QyY2UxMWFkMWI4YTU0YTg3OTdlMDE0MmVhMzkz
NjA5NzAxZC4uYWYwNWQyY2QxMjhmOTUxM2I4NjFhMDAwYjc0NjE3MDQ0OTY0ZmNjZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvU3RyaW5nRXh0cmFzLmgKKysrIGIvU291cmNlL1dURi93dGYv
U3RyaW5nRXh0cmFzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAxNSBFbGVjdHJvbmljIEFydHMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKQEAgLTI0LDMzICsyNCwxMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAot
I2lmbmRlZiBXVEZfU3RyaW5nRXh0cmFzX2gKLSNkZWZpbmUgV1RGX1N0cmluZ0V4dHJhc19oCisj
cHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+CiAj
aW5jbHVkZSA8c3RyaW5nLmg+CiAKLSNpZiBIQVZFKFNUUklOR1NfSCkgCi0jaW5jbHVkZSA8c3Ry
aW5ncy5oPiAKLSNlbmRpZiAKLQotI2lmIENPTVBJTEVSKE1TVkMpCi0KLS8vIEZJWE1FOiBXZSBz
aG91bGQgc3RvcCB1c2luZyB0aGVzZSBlbnRpcmVseSBhbmQgdXNlIHN1aXRhYmxlIHZlcnNpb25z
IG9mIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UgaW5zdGVhZC4KLQotaW5saW5lIGludCBzdHJuY2Fz
ZWNtcChjb25zdCBjaGFyKiBzMSwgY29uc3QgY2hhciogczIsIHNpemVfdCBsZW4pCi17Ci0gICAg
cmV0dXJuIF9zdHJuaWNtcChzMSwgczIsIGxlbik7Ci19Ci0KLWlubGluZSBpbnQgc3RyY2FzZWNt
cChjb25zdCBjaGFyKiBzMSwgY29uc3QgY2hhciogczIpCi17Ci0gICAgcmV0dXJuIF9zdHJpY21w
KHMxLCBzMik7Ci19Ci0KLSNlbmRpZgotCiAjaWYgIUhBVkUoU1RSTlNUUikKIAogaW5saW5lIGNo
YXIqIHN0cm5zdHIoY29uc3QgY2hhciogYnVmZmVyLCBjb25zdCBjaGFyKiB0YXJnZXQsIHNpemVf
dCBidWZmZXJMZW5ndGgpCkBAIC02Niw1ICs0MywzIEBAIGlubGluZSBjaGFyKiBzdHJuc3RyKGNv
bnN0IGNoYXIqIGJ1ZmZlciwgY29uc3QgY2hhciogdGFyZ2V0LCBzaXplX3QgYnVmZmVyTGVuZ3Ro
CiB9CiAKICNlbmRpZgotCi0jZW5kaWYgLy8gV1RGX1N0cmluZ0V4dHJhc19oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9TdHJpbmdQcmludFN0cmVhbS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9T
dHJpbmdQcmludFN0cmVhbS5jcHAKaW5kZXggNmE4ODgxYzViYmQwYmIzYTE5MWE2NDI5Njg2OTM5
NWZkY2YxMzA1Yy4uMzNmZDVhYmJiZTU4ZDg1Mzk4MmIzMmU3YTVlOGExYTY1ZjY5MTcxYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3RyaW5nUHJpbnRTdHJlYW0uY3BwCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1N0cmluZ1ByaW50U3RyZWFtLmNwcApAQCAtMjksNyArMjksNiBAQAogI2luY2x1
ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAgYi9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L0Jhc2U2NC5jcHAKaW5kZXggMmFlNWRlMjIyY2Q2YzM5NDFjZTc1NmJiNzNkY2Ix
YWRiMGNiMWY0NS4uODA0ZmUxZjQxMjk0YTliMTMyNzE1NTk5MzdkYjA5ZWE2ZmQwMzg3ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCisrKyBiL1NvdXJjZS9XVEYv
d3RmL3RleHQvQmFzZTY0LmNwcApAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgIkJhc2U2NC5o
IgogCiAjaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvTGluZUVuZGluZy5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L0xpbmVFbmRpbmcuY3BwCmluZGV4IGU4MTlhZWY1NDllMDFhY2ExODg0MmUyNmRkNGI1
N2M5NjM3MTNjNjQuLmUwMjNiOWZiNGRkOWJmY2JmMGYxZDk3MDU5MjgzYmZhMDA3NTQxYTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvTGluZUVuZGluZy5jcHAKKysrIGIvU291cmNl
L1dURi93dGYvdGV4dC9MaW5lRW5kaW5nLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDgsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMiwxMTQgKzMyLDkzIEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTGluZUVuZGluZy5oIgogCi0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KIAotbmFtZXNwYWNlIHsKLQotY2xhc3MgT3V0cHV0QnVmZmVyIHsKLXB1
YmxpYzoKLSAgICB2aXJ0dWFsIHVpbnQ4X3QqIGFsbG9jYXRlKHNpemVfdCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBjb3B5KGNvbnN0IENTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB+T3V0cHV0
QnVmZmVyKCkgeyB9Ci19OwotCi1jbGFzcyBDU3RyaW5nQnVmZmVyIDogcHVibGljIE91dHB1dEJ1
ZmZlciB7Ci1wdWJsaWM6Ci0gICAgQ1N0cmluZ0J1ZmZlcihDU3RyaW5nJiBidWZmZXIpCi0gICAg
ICAgIDogbV9idWZmZXIoYnVmZmVyKQotICAgIHsKLSAgICB9Ci0gICAgdmlydHVhbCB+Q1N0cmlu
Z0J1ZmZlcigpIHsgfQotCi0gICAgdWludDhfdCogYWxsb2NhdGUoc2l6ZV90IHNpemUpIG92ZXJy
aWRlCi0gICAgewotICAgICAgICBjaGFyKiBwdHI7Ci0gICAgICAgIG1fYnVmZmVyID0gQ1N0cmlu
Zzo6bmV3VW5pbml0aWFsaXplZChzaXplLCBwdHIpOwotICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4ocHRyKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvcHkoY29uc3QgQ1N0
cmluZyYgc291cmNlKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgbV9idWZmZXIgPSBzb3VyY2U7
Ci0gICAgfQotCi0gICAgY29uc3QgQ1N0cmluZyYgYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9i
dWZmZXI7IH0KK25hbWVzcGFjZSBXVEYgewogCi1wcml2YXRlOgotICAgIENTdHJpbmcgbV9idWZm
ZXI7Ci19OworLy8gRklYTUU6IEhvdyBjYW4gdGhpcyBiZSB0aGUgY29ycmVjdCBjb25kaXRpb25h
bD8KKy8vIEkgZG9uJ3QgdGhpbmsgdGhlIE9TIGlzIHJlYWxseSB3aGF0IGRldGVybWluZXMgIm5h
dGl2ZSBsaW5lIGVuZGluZ3MiLgorI2lmICFPUyhXSU5ET1dTKQogCi0jaWYgT1MoV0lORE9XUykK
LWNsYXNzIFZlY3RvckNoYXJBcHBlbmRCdWZmZXIgOiBwdWJsaWMgT3V0cHV0QnVmZmVyIHsKLXB1
YmxpYzoKLSAgICBWZWN0b3JDaGFyQXBwZW5kQnVmZmVyKFZlY3Rvcjx1aW50OF90PiYgYnVmZmVy
KQotICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKLSAgICB7CitzdGF0aWMgVmVjdG9yPHVpbnQ4
X3Q+IG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9MRihWZWN0b3I8dWludDhfdD4mJiBzb3VyY2UpCit7
CisgICAgc2l6ZV90IHJlc3VsdExlbmd0aCA9IDA7CisgICAgYm9vbCBuZWVkRml4ID0gZmFsc2U7
CisgICAgY29uc3QgYXV0byogcCA9IHNvdXJjZS5kYXRhKCk7CisgICAgYXV0byogZW5kID0gcCAr
IHNvdXJjZS5zaXplKCk7CisgICAgd2hpbGUgKHAgIT0gZW5kKSB7CisgICAgICAgIGNoYXIgYyA9
ICpwKys7CisgICAgICAgIGlmIChjID09ICdccicgJiYgcCAhPSBlbmQgJiYgKnAgPT0gJ1xuJykg
eworICAgICAgICAgICAgLy8gVHVybiBDUkxGIGludG8gTEYuCisgICAgICAgICAgICArK3A7Cisg
ICAgICAgICAgICBuZWVkRml4ID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChjID09ICdccicp
IHsKKyAgICAgICAgICAgIC8vIFR1cm4gQ1IgaW50byBMRi4KKyAgICAgICAgICAgIG5lZWRGaXgg
PSB0cnVlOworICAgICAgICB9CisgICAgICAgICsrcmVzdWx0TGVuZ3RoOwogICAgIH0KLSAgICB2
aXJ0dWFsIH5WZWN0b3JDaGFyQXBwZW5kQnVmZmVyKCkgeyB9CiAKLSAgICB1aW50OF90KiBhbGxv
Y2F0ZShzaXplX3Qgc2l6ZSkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIHNpemVfdCBvbGRTaXpl
ID0gbV9idWZmZXIuc2l6ZSgpOwotICAgICAgICBtX2J1ZmZlci5ncm93KG9sZFNpemUgKyBzaXpl
KTsKLSAgICAgICAgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKSArIG9sZFNpemU7Ci0gICAgfQorICAg
IGlmICghbmVlZEZpeCkKKyAgICAgICAgcmV0dXJuIFdURk1vdmUoc291cmNlKTsKIAotICAgIHZv
aWQgY29weShjb25zdCBDU3RyaW5nJiBzb3VyY2UpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBt
X2J1ZmZlci5hcHBlbmQoc291cmNlLmRhdGEoKSwgc291cmNlLmxlbmd0aCgpKTsKKyAgICBWZWN0
b3I8dWludDhfdD4gcmVzdWx0KHJlc3VsdExlbmd0aCk7CisgICAgcCA9IHNvdXJjZS5kYXRhKCk7
CisgICAgYXV0byogcSA9IHJlc3VsdC5kYXRhKCk7CisgICAgd2hpbGUgKHAgIT0gZW5kKSB7Cisg
ICAgICAgIGNoYXIgYyA9ICpwKys7CisgICAgICAgIGlmIChjID09ICdccicgJiYgcCAhPSBlbmQg
JiYgKnAgPT0gJ1xuJykgeworICAgICAgICAgICAgLy8gVHVybiBDUkxGIGludG8gTEYuCisgICAg
ICAgICAgICArK3A7CisgICAgICAgICAgICAqcSsrID0gJ1xuJzsKKyAgICAgICAgfSBlbHNlIGlm
IChjID09ICdccicpIHsKKyAgICAgICAgICAgIC8vIFR1cm4gQ1IgaW50byBMRi4KKyAgICAgICAg
ICAgICpxKysgPSAnXG4nOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTGVhdmUg
b3RoZXIgY2hhcmFjdGVycyBhbG9uZS4KKyAgICAgICAgICAgICpxKysgPSBjOworICAgICAgICB9
CiAgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CiAKLXByaXZhdGU6Ci0gICAgVmVjdG9yPHVp
bnQ4X3Q+JiBtX2J1ZmZlcjsKLX07CiAjZW5kaWYKIAotdm9pZCBpbnRlcm5hbE5vcm1hbGl6ZUxp
bmVFbmRpbmdzVG9DUkxGKGNvbnN0IENTdHJpbmcmIGZyb20sIE91dHB1dEJ1ZmZlciYgYnVmZmVy
KQorVmVjdG9yPHVpbnQ4X3Q+IG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9DUkxGKFZlY3Rvcjx1aW50
OF90PiYmIHNvdXJjZSkKIHsKLSAgICBpZiAoIWZyb20ubGVuZ3RoKCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICAvLyBDb21wdXRlIHRoZSBuZXcgbGVuZ3RoLgotICAgIHNpemVfdCBuZXdMZW4gPSAw
OwotICAgIGNvbnN0IGNoYXIqIHAgPSBmcm9tLmRhdGEoKTsKLSAgICB3aGlsZSAocCA8IGZyb20u
ZGF0YSgpICsgZnJvbS5sZW5ndGgoKSkgeworICAgIHNpemVfdCByZXN1bHRMZW5ndGggPSAwOwor
ICAgIGNvbnN0IGF1dG8qIHAgPSBzb3VyY2UuZGF0YSgpOworICAgIGF1dG8qIGVuZCA9IHAgKyBz
b3VyY2Uuc2l6ZSgpOworICAgIHdoaWxlIChwICE9IGVuZCkgewogICAgICAgICBjaGFyIGMgPSAq
cCsrOwogICAgICAgICBpZiAoYyA9PSAnXHInKSB7Ci0gICAgICAgICAgICAvLyBTYWZlIHRvIGxv
b2sgYWhlYWQgYmVjYXVzZSBvZiB0cmFpbGluZyAnXDAnLgotICAgICAgICAgICAgaWYgKCpwICE9
ICdcbicpIHsKLSAgICAgICAgICAgICAgICAvLyBUdXJuIENSIGludG8gQ1JMRi4KLSAgICAgICAg
ICAgICAgICBuZXdMZW4gKz0gMjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFR1cm4g
Q1Igb3IgQ1JMRiBpbnRvIENSTEY7CisgICAgICAgICAgICBpZiAocCAhPSBlbmQgJiYgKnAgPT0g
J1xuJykKKyAgICAgICAgICAgICAgICArK3A7CisgICAgICAgICAgICByZXN1bHRMZW5ndGggKz0g
MjsKICAgICAgICAgfSBlbHNlIGlmIChjID09ICdcbicpIHsKICAgICAgICAgICAgIC8vIFR1cm4g
TEYgaW50byBDUkxGLgotICAgICAgICAgICAgbmV3TGVuICs9IDI7CisgICAgICAgICAgICByZXN1
bHRMZW5ndGggKz0gMjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIExlYXZlIG90
aGVyIGNoYXJhY3RlcnMgYWxvbmUuCi0gICAgICAgICAgICBuZXdMZW4gKz0gMTsKKyAgICAgICAg
ICAgIHJlc3VsdExlbmd0aCArPSAxOwogICAgICAgICB9CiAgICAgfQotICAgIGlmIChuZXdMZW4g
PCBmcm9tLmxlbmd0aCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobmV3TGVuID09IGZy
b20ubGVuZ3RoKCkpIHsKLSAgICAgICAgYnVmZmVyLmNvcHkoZnJvbSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CiAKLSAgICBwID0gZnJvbS5kYXRhKCk7Ci0gICAgdWludDhfdCogcSA9IGJ1ZmZl
ci5hbGxvY2F0ZShuZXdMZW4pOworICAgIGlmIChyZXN1bHRMZW5ndGggPT0gc291cmNlLnNpemUo
KSkKKyAgICAgICAgcmV0dXJuIFdURk1vdmUoc291cmNlKTsKIAotICAgIC8vIE1ha2UgYSBjb3B5
IG9mIHRoZSBzdHJpbmcuCi0gICAgd2hpbGUgKHAgPCBmcm9tLmRhdGEoKSArIGZyb20ubGVuZ3Ro
KCkpIHsKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KHJlc3VsdExlbmd0aCk7CisgICAgcCA9
IHNvdXJjZS5kYXRhKCk7CisgICAgYXV0byogcSA9IHJlc3VsdC5kYXRhKCk7CisgICAgd2hpbGUg
KHAgIT0gZW5kKSB7CiAgICAgICAgIGNoYXIgYyA9ICpwKys7CiAgICAgICAgIGlmIChjID09ICdc
cicpIHsKLSAgICAgICAgICAgIC8vIFNhZmUgdG8gbG9vayBhaGVhZCBiZWNhdXNlIG9mIHRyYWls
aW5nICdcMCcuCi0gICAgICAgICAgICBpZiAoKnAgIT0gJ1xuJykgewotICAgICAgICAgICAgICAg
IC8vIFR1cm4gQ1IgaW50byBDUkxGLgotICAgICAgICAgICAgICAgICpxKysgPSAnXHInOwotICAg
ICAgICAgICAgICAgICpxKysgPSAnXG4nOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8g
VHVybiBDUiBvciBDUkxGIGludG8gQ1JMRjsKKyAgICAgICAgICAgIGlmIChwICE9IGVuZCAmJiAq
cCA9PSAnXG4nKQorICAgICAgICAgICAgICAgICsrcDsKKyAgICAgICAgICAgICpxKysgPSAnXHIn
OworICAgICAgICAgICAgKnErKyA9ICdcbic7CiAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnXG4n
KSB7CiAgICAgICAgICAgICAvLyBUdXJuIExGIGludG8gQ1JMRi4KICAgICAgICAgICAgICpxKysg
PSAnXHInOwpAQCAtMTQ5LDc4ICsxMjgsMTUgQEAgdm9pZCBpbnRlcm5hbE5vcm1hbGl6ZUxpbmVF
bmRpbmdzVG9DUkxGKGNvbnN0IENTdHJpbmcmIGZyb20sIE91dHB1dEJ1ZmZlciYgYnVmZmUKICAg
ICAgICAgICAgICpxKysgPSBjOwogICAgICAgICB9CiAgICAgfQorICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLX07Ci0KLW5hbWVzcGFjZSBXVEYgewotCi0vLyBOb3JtYWxpemUgYWxsIGxpbmUtZW5k
aW5ncyB0byBDUiBvciBMRi4KLXN0YXRpYyB2b2lkIG5vcm1hbGl6ZVRvQ1JPckxGKGNvbnN0IENT
dHJpbmcmIGZyb20sIFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0LCBib29sIHRvQ1IpCi17Ci0gICAg
Ly8gQ29tcHV0ZSB0aGUgbmV3IGxlbmd0aC4KLSAgICBzaXplX3QgbmV3TGVuID0gMDsKLSAgICBi
b29sIG5lZWRGaXggPSBmYWxzZTsKLSAgICBjb25zdCBjaGFyKiBwID0gZnJvbS5kYXRhKCk7Ci0g
ICAgY2hhciBmcm9tRW5kaW5nQ2hhciA9IHRvQ1IgPyAnXG4nIDogJ1xyJzsKLSAgICBjaGFyIHRv
RW5kaW5nQ2hhciA9IHRvQ1IgPyAnXHInIDogJ1xuJzsKLSAgICB3aGlsZSAocCA8IGZyb20uZGF0
YSgpICsgZnJvbS5sZW5ndGgoKSkgewotICAgICAgICBjaGFyIGMgPSAqcCsrOwotICAgICAgICBp
ZiAoYyA9PSAnXHInICYmICpwID09ICdcbicpIHsKLSAgICAgICAgICAgIC8vIFR1cm4gQ1JMRiBp
bnRvIENSIG9yIExGLgotICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgbmVlZEZpeCA9IHRy
dWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoYyA9PSBmcm9tRW5kaW5nQ2hhcikgewotICAgICAgICAg
ICAgLy8gVHVybiBDUi9MRiBpbnRvIExGL0NSLgotICAgICAgICAgICAgbmVlZEZpeCA9IHRydWU7
Ci0gICAgICAgIH0KLSAgICAgICAgbmV3TGVuICs9IDE7Ci0gICAgfQotCi0gICAgLy8gR3JvdyB0
aGUgcmVzdWx0IGJ1ZmZlci4KLSAgICBwID0gZnJvbS5kYXRhKCk7Ci0gICAgc2l6ZV90IG9sZFJl
c3VsdFNpemUgPSByZXN1bHQuc2l6ZSgpOwotICAgIHJlc3VsdC5ncm93KG9sZFJlc3VsdFNpemUg
KyBuZXdMZW4pOwotICAgIHVpbnQ4X3QqIHEgPSByZXN1bHQuZGF0YSgpICsgb2xkUmVzdWx0U2l6
ZTsKLQotICAgIC8vIElmIG5vIG5lZWQgdG8gZml4IHRoZSBzdHJpbmcsIGp1c3QgY29weSB0aGUg
c3RyaW5nIG92ZXIuCi0gICAgaWYgKCFuZWVkRml4KSB7Ci0gICAgICAgIG1lbWNweShxLCBwLCBm
cm9tLmxlbmd0aCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIE1ha2UgYSBj
b3B5IG9mIHRoZSBzdHJpbmcuCi0gICAgd2hpbGUgKHAgPCBmcm9tLmRhdGEoKSArIGZyb20ubGVu
Z3RoKCkpIHsKLSAgICAgICAgY2hhciBjID0gKnArKzsKLSAgICAgICAgaWYgKGMgPT0gJ1xyJyAm
JiAqcCA9PSAnXG4nKSB7Ci0gICAgICAgICAgICAvLyBUdXJuIENSTEYgb3IgQ1IgaW50byBDUiBv
ciBMRi4KLSAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgICpxKysgPSB0b0VuZGluZ0NoYXI7
Ci0gICAgICAgIH0gZWxzZSBpZiAoYyA9PSBmcm9tRW5kaW5nQ2hhcikgewotICAgICAgICAgICAg
Ly8gVHVybiBDUi9MRiBpbnRvIExGL0NSLgotICAgICAgICAgICAgKnErKyA9IHRvRW5kaW5nQ2hh
cjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIExlYXZlIG90aGVyIGNoYXJhY3Rl
cnMgYWxvbmUuCi0gICAgICAgICAgICAqcSsrID0gYzsKLSAgICAgICAgfQotICAgIH0KLX0KLQot
Q1N0cmluZyBub3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JMRihjb25zdCBDU3RyaW5nJiBmcm9tKQot
ewotICAgIENTdHJpbmcgcmVzdWx0OwotICAgIDo6Q1N0cmluZ0J1ZmZlciBidWZmZXIocmVzdWx0
KTsKLSAgICBpbnRlcm5hbE5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9DUkxGKGZyb20sIGJ1ZmZlcik7
Ci0gICAgcmV0dXJuIGJ1ZmZlci5idWZmZXIoKTsKLX0KLQotdm9pZCBub3JtYWxpemVBbmRBcHBl
bmRMaW5lRW5kaW5nc1RvTmF0aXZlKGNvbnN0IENTdHJpbmcmIGZyb20sIFZlY3Rvcjx1aW50OF90
PiYgcmVzdWx0KQorVmVjdG9yPHVpbnQ4X3Q+IG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9OYXRpdmUo
VmVjdG9yPHVpbnQ4X3Q+JiYgZnJvbSkKIHsKICNpZiBPUyhXSU5ET1dTKQotICAgIFZlY3RvckNo
YXJBcHBlbmRCdWZmZXIgYnVmZmVyKHJlc3VsdCk7Ci0gICAgaW50ZXJuYWxOb3JtYWxpemVMaW5l
RW5kaW5nc1RvQ1JMRihmcm9tLCBidWZmZXIpOworICAgIHJldHVybiBub3JtYWxpemVMaW5lRW5k
aW5nc1RvQ1JMRihXVEZNb3ZlKGZyb20pKTsKICNlbHNlCi0gICAgbm9ybWFsaXplVG9DUk9yTEYo
ZnJvbSwgcmVzdWx0LCBmYWxzZSk7CisgICAgcmV0dXJuIG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9M
RihXVEZNb3ZlKGZyb20pKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L0xpbmVFbmRpbmcuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvTGluZUVuZGluZy5oCmlu
ZGV4IDUxYWYwNDUyMTM5NGI0MzdhYzZkMzNjNzZmNzRiNDYzMTE1YWFlMTkuLjJjODFmYzJiYWJj
NDFhYjYzYWE3NmViMTY0ODg0N2MxODFiNzMxOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L3RleHQvTGluZUVuZGluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvTGluZUVuZGluZy5o
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOCwg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
QEAgLTMyLDE4ICszMiwxNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKIC8vIE5v
cm1hbGl6ZSBhbGwgbGluZS1lbmRpbmdzIGluIHRoZSBnaXZlbiBzdHJpbmcgdG8gQ1JMRi4KLVdU
Rl9FWFBPUlQgQ1N0cmluZyBub3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JMRihjb25zdCBDU3RyaW5n
JiBmcm9tKTsKK1dURl9FWFBPUlQgVmVjdG9yPHVpbnQ4X3Q+IG5vcm1hbGl6ZUxpbmVFbmRpbmdz
VG9DUkxGKFZlY3Rvcjx1aW50OF90PiYmKTsKIAotLy8gTm9ybWFsaXplIGFsbCBsaW5lLWVuZGlu
Z3MgaW4gdGhlIGdpdmVuIHN0cmluZyB0byB0aGUgbmF0aXZlIGxpbmUtZW5kaW5ncyBhbmQgYXBw
ZW5kIHRoZSByZXN1bHQgdG8gdGhlIGdpdmVuIGJ1ZmZlci4KLS8vIChOb3JtYWxpemUgdG8gQ1JM
RiBvbiBXaW5kb3dzIGFuZCBub3JtYWxpemUgdG8gTEYgb24gYWxsIG90aGVyIHBsYXRmb3Jtcy4p
Ci1XVEZfRVhQT1JUIHZvaWQgbm9ybWFsaXplQW5kQXBwZW5kTGluZUVuZGluZ3NUb05hdGl2ZShj
b25zdCBDU3RyaW5nJiBmcm9tLCBWZWN0b3I8dWludDhfdD4mIHJlc3VsdCk7CisvLyBOb3JtYWxp
emUgYWxsIGxpbmUtZW5kaW5ncyAgdG8gQ1JMRiBvbiBXaW5kb3dzIGFuZCB0byBMRiBvbiBhbGwg
b3RoZXIgcGxhdGZvcm1zLgorV1RGX0VYUE9SVCBWZWN0b3I8dWludDhfdD4gbm9ybWFsaXplTGlu
ZUVuZGluZ3NUb05hdGl2ZShWZWN0b3I8dWludDhfdD4mJik7CiAKIH0gLy8gbmFtZXNwYWNlIFdU
RgogCiB1c2luZyBXVEY6Om5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9DUkxGOwotdXNpbmcgV1RGOjpu
b3JtYWxpemVBbmRBcHBlbmRMaW5lRW5kaW5nc1RvTmF0aXZlOwordXNpbmcgV1RGOjpub3JtYWxp
emVMaW5lRW5kaW5nc1RvTmF0aXZlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdDb21tb24uaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQ29tbW9uLmgKaW5kZXgg
OTMzMjk1N2MwMTViZWUzYTZhM2NjMjAzNTg5OTdmZDM5YmVkNTZjZC4uY2M2OTI3ZmQ3MGNmNzdh
NDNjZTFlOGE4MzMyMTYzM2Q4MjdiMWUzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4
dC9TdHJpbmdDb21tb24uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbW1vbi5o
CkBAIC00Myw2ICs0Myw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHVuc2ln
bmVkIGxvd2VyY2FzZUxldHRlcnNMZW5ndGg+IGJvb2wgZXF1YWxMZXR0CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFN0cmluZ0NsYXNzLCB1bnNpZ25lZCBsZW5ndGg+IGJvb2wgZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2VDb21tb24oY29uc3QgU3RyaW5nQ2xhc3MmLCBjb25zdCBjaGFyICgmbG93
ZXJjYXNlTGV0dGVycylbbGVuZ3RoXSk7CiAKK2Jvb2wgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShj
b25zdCBjaGFyKiwgY29uc3QgY2hhciopOwordGVtcGxhdGU8dW5zaWduZWQgbG93ZXJjYXNlTGV0
dGVyc0xlbmd0aD4gYm9vbCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBjaGFy
KiwgY29uc3QgY2hhciAoJmxvd2VyY2FzZUxldHRlcnMpW2xvd2VyY2FzZUxldHRlcnNMZW5ndGhd
KTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGlubGluZSBUIGxvYWRVbmFsaWduZWQoY29uc3Qg
Y2hhciogcykKIHsKQEAgLTY1MCw2ICs2NTMsMTggQEAgdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5n
Q2xhc3MsIHVuc2lnbmVkIGxlbmd0aD4gaW5saW5lIGJvb2wgc3RhcnRzV2l0aExldHRlcnNJZ24K
ICAgICByZXR1cm4gc3RhcnRzV2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZUNvbW1vbldpdGhv
dXRMZW5ndGgoc3RyaW5nLCBwb2ludGVyKTsKIH0KIAoraW5saW5lIGJvb2wgZXF1YWxJZ25vcmlu
Z0FTQ0lJQ2FzZShjb25zdCBjaGFyKiBhLCBjb25zdCBjaGFyKiBiKQoreworICAgIGF1dG8gbGVu
Z3RoID0gc3RybGVuKGEpOworICAgIHJldHVybiBsZW5ndGggPT0gc3RybGVuKGIpICYmIGVxdWFs
SWdub3JpbmdBU0NJSUNhc2UoYSwgYiwgbGVuZ3RoKTsKK30KKwordGVtcGxhdGU8dW5zaWduZWQg
bG93ZXJjYXNlTGV0dGVyc0xlbmd0aD4gaW5saW5lIGJvb2wgZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UoY29uc3QgY2hhciogc3RyaW5nLCBjb25zdCBjaGFyICgmbG93ZXJjYXNlTGV0dGVy
cylbbG93ZXJjYXNlTGV0dGVyc0xlbmd0aF0pCit7CisgICAgYXV0byBsZW5ndGggPSBzdHJsZW4o
bG93ZXJjYXNlTGV0dGVycyk7CisgICAgcmV0dXJuIHN0cmxlbihzdHJpbmcpID09IGxlbmd0aCAm
JiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcsIGxvd2VyY2FzZUxldHRlcnMs
IGxlbmd0aCk7Cit9CisKIH0KIAogdXNpbmcgV1RGOjplcXVhbElnbm9yaW5nQVNDSUlDYXNlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9UZXh0U3RyZWFtLmNwcCBiL1NvdXJjZS9X
VEYvd3RmL3RleHQvVGV4dFN0cmVhbS5jcHAKaW5kZXggYzJmMmVmMjc1Njg4ZWM0YmZlZDMzZDNh
YTllYmNhOTM1NTZiNTZjMy4uYWFmNjE5NGFiZmU1OGU1YTM0YTAwZmNkODEwZjlmMzk3NmM4YjI0
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9UZXh0U3RyZWFtLmNwcAorKysgYi9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1RleHRTdHJlYW0uY3BwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5j
bHVkZSAiVGV4dFN0cmVhbS5oIgogCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNs
dWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBXVEYgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9XVEZT
dHJpbmcuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCmluZGV4IGZlMjhm
YjY0YjY0MTU3MDgzNmU0NWEwNTdlOGZmYWNiNDg2YjVlZjkuLmZjMDczNWZlNTRkNDBkYzE2NWYz
MTViY2ZlZGZiZjgwNzkxYjhkYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RG
U3RyaW5nLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKQEAgLTMw
LDcgKzMwLDYgQEAKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRl
IDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUg
PHd0Zi9kdG9hLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvaWN1L0NvbGxhdG9ySUNVLmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL3VuaWNvZGUvaWN1L0NvbGxhdG9ySUNVLmNwcAppbmRleCAyNmE0ZDgzODZh
YmZmYTkwNWRlMWFlODE4ODdlMzU1YzIyOTRiNDk5Li5mNWUzMmExYmZmM2Y5N2E5NmMxNTRjMjFk
NzY2ZGFhZDQzYjU3ZGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL2ljdS9D
b2xsYXRvcklDVS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdW5pY29kZS9pY3UvQ29sbGF0b3JJ
Q1UuY3BwCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSA8bXV0ZXg+CiAjaW5jbHVkZSA8dW5p
Y29kZS91Y29sLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5n
RXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogCiAjaWYgT1MoREFS
V0lOKSAmJiBVU0UoQ0YpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNo
L0ZldGNoQm9keS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5j
cHAKaW5kZXggZmE5OGRkODBlNGEyNmRlNGNhMTc3OGYzZjU0MGUyMWJhMzQwN2VhOC4uODU4ZDZh
YTdhMWVkMzA3YTlkZmU3YTc4ZGEyZWIzYWEwZWY0ODU2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmNwcApAQCAtMTU3LDYgKzE1Nyw3IEBAIHZvaWQgRmV0Y2hC
b2R5Ojpjb25zdW1lKEZldGNoQm9keU93bmVyJiBvd25lciwgUmVmPERlZmVycmVkUHJvbWlzZT4m
JiBwcm9taXNlKQogfQogCiAjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorCiB2b2lkIEZldGNoQm9k
eTo6Y29uc3VtZUFzU3RyZWFtKEZldGNoQm9keU93bmVyJiBvd25lciwgRmV0Y2hCb2R5U291cmNl
JiBzb3VyY2UpCiB7CiAgICAgYm9vbCBjbG9zZVN0cmVhbSA9IGZhbHNlOwpAQCAtMTY4LDExICsx
NjksMTEgQEAgdm9pZCBGZXRjaEJvZHk6OmNvbnN1bWVBc1N0cmVhbShGZXRjaEJvZHlPd25lciYg
b3duZXIsIEZldGNoQm9keVNvdXJjZSYgc291cmNlKQogICAgICAgICBtX2RhdGEgPSBudWxscHRy
OwogICAgIH0gZWxzZSBpZiAoaXNUZXh0KCkpIHsKICAgICAgICAgYXV0byBkYXRhID0gVVRGOEVu
Y29kaW5nKCkuZW5jb2RlKHRleHRCb2R5KCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKLSAg
ICAgICAgY2xvc2VTdHJlYW0gPSBzb3VyY2UuZW5xdWV1ZShBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRl
KGRhdGEuZGF0YSgpLCBkYXRhLmxlbmd0aCgpKSk7CisgICAgICAgIGNsb3NlU3RyZWFtID0gc291
cmNlLmVucXVldWUoQXJyYXlCdWZmZXI6OnRyeUNyZWF0ZShkYXRhLmRhdGEoKSwgZGF0YS5zaXpl
KCkpKTsKICAgICAgICAgbV9kYXRhID0gbnVsbHB0cjsKICAgICB9IGVsc2UgaWYgKGlzVVJMU2Vh
cmNoUGFyYW1zKCkpIHsKICAgICAgICAgYXV0byBkYXRhID0gVVRGOEVuY29kaW5nKCkuZW5jb2Rl
KHVybFNlYXJjaFBhcmFtc0JvZHkoKS50b1N0cmluZygpLCBFbnRpdGllc0ZvclVuZW5jb2RhYmxl
cyk7Ci0gICAgICAgIGNsb3NlU3RyZWFtID0gc291cmNlLmVucXVldWUoQXJyYXlCdWZmZXI6OnRy
eUNyZWF0ZShkYXRhLmRhdGEoKSwgZGF0YS5sZW5ndGgoKSkpOworICAgICAgICBjbG9zZVN0cmVh
bSA9IHNvdXJjZS5lbnF1ZXVlKEFycmF5QnVmZmVyOjp0cnlDcmVhdGUoZGF0YS5kYXRhKCksIGRh
dGEuc2l6ZSgpKSk7CiAgICAgICAgIG1fZGF0YSA9IG51bGxwdHI7CiAgICAgfSBlbHNlIGlmIChp
c0Jsb2IoKSkgewogICAgICAgICBvd25lci5sb2FkQmxvYihibG9iQm9keSgpLCBudWxscHRyKTsK
QEAgLTE4Nyw2ICsxODgsNyBAQCB2b2lkIEZldGNoQm9keTo6Y29uc3VtZUFzU3RyZWFtKEZldGNo
Qm9keU93bmVyJiBvd25lciwgRmV0Y2hCb2R5U291cmNlJiBzb3VyY2UpCiAgICAgaWYgKGNsb3Nl
U3RyZWFtKQogICAgICAgICBzb3VyY2UuY2xvc2UoKTsKIH0KKwogI2VuZGlmCiAKIHZvaWQgRmV0
Y2hCb2R5Ojpjb25zdW1lQXJyYXlCdWZmZXIoUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNl
KQpAQCAtMjA0LDcgKzIwNiw3IEBAIHZvaWQgRmV0Y2hCb2R5Ojpjb25zdW1lQXJyYXlCdWZmZXJW
aWV3KFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKIHZvaWQgRmV0Y2hCb2R5Ojpjb25z
dW1lVGV4dChSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UsIGNvbnN0IFN0cmluZyYgdGV4
dCkKIHsKICAgICBhdXRvIGRhdGEgPSBVVEY4RW5jb2RpbmcoKS5lbmNvZGUodGV4dCwgRW50aXRp
ZXNGb3JVbmVuY29kYWJsZXMpOwotICAgIG1fY29uc3VtZXIucmVzb2x2ZVdpdGhEYXRhKFdURk1v
dmUocHJvbWlzZSksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuZGF0YSgp
KSwgZGF0YS5sZW5ndGgoKSk7CisgICAgbV9jb25zdW1lci5yZXNvbHZlV2l0aERhdGEoV1RGTW92
ZShwcm9taXNlKSwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKICAgICBtX2RhdGEgPSBudWxs
cHRyOwogfQogCkBAIC0yNzEsMTUgKzI3MywxMCBAQCBGZXRjaEJvZHk6OlRha2VuRGF0YSBGZXRj
aEJvZHk6OnRha2UoKQogICAgIGlmIChpc0Zvcm1EYXRhKCkpCiAgICAgICAgIHJldHVybiBmb3Jt
RGF0YUJvZHkoKTsKIAotICAgIGlmIChpc1RleHQoKSkgewotICAgICAgICBhdXRvIGRhdGEgPSBV
VEY4RW5jb2RpbmcoKS5lbmNvZGUodGV4dEJvZHkoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMp
OwotICAgICAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZGF0YS5kYXRhKCksIGRhdGEu
bGVuZ3RoKCkpOwotICAgIH0KLQotICAgIGlmIChpc1VSTFNlYXJjaFBhcmFtcygpKSB7Ci0gICAg
ICAgIGF1dG8gZGF0YSA9IFVURjhFbmNvZGluZygpLmVuY29kZSh1cmxTZWFyY2hQYXJhbXNCb2R5
KCkudG9TdHJpbmcoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwotICAgICAgICByZXR1cm4g
U2hhcmVkQnVmZmVyOjpjcmVhdGUoZGF0YS5kYXRhKCksIGRhdGEubGVuZ3RoKCkpOwotICAgIH0K
KyAgICBpZiAoaXNUZXh0KCkpCisgICAgICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShV
VEY4RW5jb2RpbmcoKS5lbmNvZGUodGV4dEJvZHkoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMp
KTsKKyAgICBpZiAoaXNVUkxTZWFyY2hQYXJhbXMoKSkKKyAgICAgICAgcmV0dXJuIFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKFVURjhFbmNvZGluZygpLmVuY29kZSh1cmxTZWFyY2hQYXJhbXNCb2R5KCku
dG9TdHJpbmcoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpKTsKIAogICAgIGlmIChpc0FycmF5
QnVmZmVyKCkpCiAgICAgICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShyZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPihhcnJheUJ1ZmZlckJvZHkoKS5kYXRhKCkpLCBhcnJheUJ1ZmZl
ckJvZHkoKS5ieXRlTGVuZ3RoKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRlci5jcHAKaW5kZXggZTViMmUzNjM4YTAwODQ1
Mjc5N2JjZjMwOGJiZDk3YTlmODM0YWE2ZC4uN2QzOTcxZDU3OTZiYmRjYzQ2ODllYTJlOTliYjE0
YTU4ZmMwOGRiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRz
L1dlYlNvY2tldERlZmxhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNv
Y2tldHMvV2ViU29ja2V0RGVmbGF0ZXIuY3BwCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSA8
d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogI2luY2x1ZGUgPHpsaWIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKaW5kZXggN2VjMjc4NjM4MGQ2YTBh
ODNiN2MzMGVjYjQ2MDMyOTFiNWEyOGM5My4uZDQyZTAwZDdmMDI0YzZlZDFmNGM2M2E0YTdlZjlk
ZWFhZDhlOGU2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRz
L1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJz
b2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKQEAgLTQ5LDcgKzQ5LDYgQEAKICNpbmNsdWRl
IDx3dGYvTUQ1Lmg+CiAjaW5jbHVkZSA8d3RmL1NIQTEuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggNzNlYTdjNGY1YjFmYzA5ZDBkZjg0YWFkMjJhNzZkMzc2MzI5MmNm
MS4uYmQ2ZjBhMTRhZGUwMzk3ODM1OWNjNWU1ZjBkMjBmYzAxNjhjNDRlNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1BBTC9QQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjUzLDYg
KzI1Myw3IEBACiAJCTFDNDg3NkRGMUY4RDgzNzUwMENDRUVCRCAvKiBMb2dnaW5nQ29jb2EubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMb2dnaW5nQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFDNjdDRUExMUUzMkVEQTgwMEY4MEYyRSAvKiBGZWF0dXJlRGVmaW5lcy54
Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBGZWF0dXJlRGVmaW5lcy54
Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM2N0NFQTIxRTMyRUUyNjAw
RjgwRjJFIC8qIFZlcnNpb24ueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRo
ID0gVmVyc2lvbi54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNTkw
OUMxRjkzQkYxRTAwNjdGOENGIC8qIFVuZW5jb2RhYmxlSGFuZGxpbmcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVW5lbmNvZGFibGVIYW5kbGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
MTAyNjU4NjFGNTY3NDYxMDBCNEM4NDQgLyogRm91bmRhdGlvblNQSS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGb3VuZGF0aW9uU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUExMDI2NTg4MUY1Njc0N0EwMEI0Qzg0NCAvKiBISVRvb2xib3hTUEkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSElUb29sYm94U1BJLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUExMDI2NThBMUY1Njc0OEMwMEI0Qzg0NCAvKiBRdWlja0RyYXdT
UEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVpY2tEcmF3U1BJLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NDAsNiArNTQxLDcgQEAKIAkJCQlBMzBENDEy
MzFGMEREMTA1MDBCNzE5NTQgLyogbWFjICovLAogCQkJCUEzMEQ0MTFGMUYwREQwRUEwMEI3MTk1
NCAvKiBLaWxsUmluZy5jcHAgKi8sCiAJCQkJQTMwRDQxMUUxRjBERDBFQTAwQjcxOTU0IC8qIEtp
bGxSaW5nLmggKi8sCisJCQkJOTNFNTkwOUMxRjkzQkYxRTAwNjdGOENGIC8qIFVuZW5jb2RhYmxl
SGFuZGxpbmcuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gdGV4dDsKIAkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvVW5lbmNv
ZGFibGVIYW5kbGluZy5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L1VuZW5jb2RhYmxl
SGFuZGxpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YzIzMDE2NmRjODE2Yjg3NDU4OGIxN2NmNmRmMjNmZWZl
ZGIxYjFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L1Vu
ZW5jb2RhYmxlSGFuZGxpbmcuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisvLyBTcGVjaWZpZXMgd2hhdCB3aWxsIGhhcHBlbiB3aGVuIGEgY2hhcmFj
dGVyIGlzIGVuY291bnRlcmVkIHRoYXQgaXMKKy8vIG5vdCBlbmNvZGFibGUgaW4gdGhlIGNoYXJh
Y3RlciBzZXQuCitlbnVtIFVuZW5jb2RhYmxlSGFuZGxpbmcgeworICAgIC8vIFN1YnN0aXR1dGVz
IHRoZSByZXBsYWNlbWVudCBjaGFyYWN0ZXIgIj8iLgorICAgIFF1ZXN0aW9uTWFya3NGb3JVbmVu
Y29kYWJsZXMsCisKKyAgICAvLyBFbmNvZGVzIHRoZSBjaGFyYWN0ZXIgYXMgYW4gWE1MIGVudGl0
eS4gRm9yIGV4YW1wbGUsIFUrMDZERQorICAgIC8vIHdvdWxkIGJlICImIzE3NTg7IiAoMHg2REUg
PSAxNzU4IGluIG9jdGFsKS4KKyAgICBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcywKKworICAgIC8v
IEVuY29kZXMgdGhlIGNoYXJhY3RlciBhcyBlbiBlbnRpdHkgYXMgYWJvdmUsIGJ1dCBlc2NhcGVk
CisgICAgLy8gbm9uLWFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLiBUaGlzIGlzIHVzZWQgaW4gVVJM
cy4KKyAgICAvLyBGb3IgZXhhbXBsZSwgVSs2REUgd291bGQgYmUgIiUyNiUyMzE3NTglM0IiLgor
ICAgIFVSTEVuY29kZWRFbnRpdGllc0ZvclVuZW5jb2RhYmxlcworfTsKKworfQorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvSWRlbnRpZmllclJlcC5oIGIvU291cmNlL1dlYkNv
cmUvYnJpZGdlL0lkZW50aWZpZXJSZXAuaAppbmRleCAyNDhlZjg5MzEzZTY2Y2JkYTM1NjhhNDlh
YTRiNTVmMzU4ZmI3Y2ZhLi4zNTQwMGYxN2MzMzYzNTdlNjk1ZDE4NmI5MTExY2NjZGE5ZDM0MWI5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvSWRlbnRpZmllclJlcC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9JZGVudGlmaWVyUmVwLmgKQEAgLTIzLDEyICsyMywxMCBA
QAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBJZGVudGlmaWVyUmVwX2gKLSNkZWZp
bmUgSWRlbnRpZmllclJlcF9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5n
RXh0cmFzLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTcwLDQgKzY4LDMgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5k
aWYgLy8gSWRlbnRpZmllclJlcF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
Yy9jX2luc3RhbmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3Bw
CmluZGV4IDk2OTJlNWJjMWRkZjU3YWVjYjQxMmVjMDAwNGU4OTU5YzE4ZmI0ZTYuLjhlZjJhYTQ2
OTJlYWNmMWIwNGIyZjZjZTAyMjA1ZWEwYzE5YzM0NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9j
L2NfaW5zdGFuY2UuY3BwCkBAIC00Nyw3ICs0Nyw2IEBACiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0Jsb2JCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVh
cGkvQmxvYkJ1aWxkZXIuY3BwCmluZGV4IGFmNmQxZTZkYzY0MmRiYjUxY2VjMzMxMTFmOWQ5NzA0
OTMzNjI4Y2IuLjU5NTFmN2I3NTMwZDNjZDY2ZDhkMzdlY2Y3M2Q3NWU2YTljOTRiNTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYkJ1aWxkZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYkJ1aWxkZXIuY3BwCkBAIC00OSwxNCArNDksMTQgQEAgdm9p
ZCBCbG9iQnVpbGRlcjo6YXBwZW5kKFJlZlB0cjxBcnJheUJ1ZmZlcj4mJiBhcnJheUJ1ZmZlcikK
IHsKICAgICBpZiAoIWFycmF5QnVmZmVyKQogICAgICAgICByZXR1cm47Ci0gICAgbV9hcHBlbmRh
YmxlRGF0YS5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGFycmF5QnVmZmVyLT5kYXRh
KCkpLCBhcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKKyAgICBtX2FwcGVuZGFibGVEYXRhLmFw
cGVuZChzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYXJyYXlCdWZmZXItPmRhdGEoKSksIGFy
cmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwogfQogCiB2b2lkIEJsb2JCdWlsZGVyOjphcHBlbmQo
UmVmUHRyPEFycmF5QnVmZmVyVmlldz4mJiBhcnJheUJ1ZmZlclZpZXcpCiB7CiAgICAgaWYgKCFh
cnJheUJ1ZmZlclZpZXcpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2FwcGVuZGFibGVEYXRhLmFw
cGVuZChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYXJyYXlCdWZmZXJWaWV3LT5iYXNlQWRkcmVz
cygpKSwgYXJyYXlCdWZmZXJWaWV3LT5ieXRlTGVuZ3RoKCkpOworICAgIG1fYXBwZW5kYWJsZURh
dGEuYXBwZW5kKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihhcnJheUJ1ZmZlclZpZXctPmJh
c2VBZGRyZXNzKCkpLCBhcnJheUJ1ZmZlclZpZXctPmJ5dGVMZW5ndGgoKSk7CiB9CiAKIHZvaWQg
QmxvYkJ1aWxkZXI6OmFwcGVuZChSZWZQdHI8QmxvYj4mJiBibG9iKQpAQCAtNzAsMTMgKzcwLDE2
IEBAIHZvaWQgQmxvYkJ1aWxkZXI6OmFwcGVuZChSZWZQdHI8QmxvYj4mJiBibG9iKQogCiB2b2lk
IEJsb2JCdWlsZGVyOjphcHBlbmQoY29uc3QgU3RyaW5nJiB0ZXh0KQogewotICAgIENTdHJpbmcg
dXRmOFRleHQgPSBVVEY4RW5jb2RpbmcoKS5lbmNvZGUodGV4dCwgRW50aXRpZXNGb3JVbmVuY29k
YWJsZXMpOworICAgIGF1dG8gYnl0ZXMgPSBVVEY4RW5jb2RpbmcoKS5lbmNvZGUodGV4dCwgRW50
aXRpZXNGb3JVbmVuY29kYWJsZXMpOwogCiAgICAgaWYgKG1fZW5kaW5ncyA9PSBCbG9iTGluZUVu
ZGluZ3M6Ok5hdGl2ZSkKLSAgICAgICAgbm9ybWFsaXplQW5kQXBwZW5kTGluZUVuZGluZ3NUb05h
dGl2ZSh1dGY4VGV4dCwgbV9hcHBlbmRhYmxlRGF0YSk7CisgICAgICAgIGJ5dGVzID0gbm9ybWFs
aXplTGluZUVuZGluZ3NUb05hdGl2ZShXVEZNb3ZlKGJ5dGVzKSk7CisKKyAgICBpZiAobV9hcHBl
bmRhYmxlRGF0YS5pc0VtcHR5KCkpCisgICAgICAgIG1fYXBwZW5kYWJsZURhdGEgPSBXVEZNb3Zl
KGJ5dGVzKTsKICAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG1fZW5kaW5ncyA9PSBCbG9iTGlu
ZUVuZGluZ3M6OlRyYW5zcGFyZW50KTsKLSAgICAgICAgbV9hcHBlbmRhYmxlRGF0YS5hcHBlbmQo
dXRmOFRleHQuZGF0YSgpLCB1dGY4VGV4dC5sZW5ndGgoKSk7CisgICAgICAgIC8vIEZJWE1FOiBX
b3VsZCBpdCBiZSBiZXR0ZXIgdG8gbW92ZSBtdWx0aXBsZSB2ZWN0b3JzIGludG8gbV9pdGVtcyBp
bnN0ZWFkIG9mIG1lcmdpbmcgdGhlbSBpbnRvIG9uZT8KKyAgICAgICAgbV9hcHBlbmRhYmxlRGF0
YS5hcHBlbmRWZWN0b3IoYnl0ZXMpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAKaW5kZXggOGQzM2VlNjYz
ZmIzMzA3MDRhOTg4YTIxMTVjMDQzMGNiMTllMzZlZi4uYjVjYTQ2YzIxZmI2Y2EyNWNiOTgyNWM3
OTVmMDg4N2I0NDQ1MjBkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCisjaW5jbHVkZSAi
VGV4dENvZGVjLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nUmVnaXN0cnkuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtMTUzLDcgKzE1NCw4IEBAIGJvb2wgSFRNTE1ldGFDaGFyc2V0UGFy
c2VyOjpjaGVja0Zvck1ldGFDaGFyc2V0KGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgp
CiAKICAgICBjb25zdGV4cHIgaW50IGJ5dGVzVG9DaGVja1VuY29uZGl0aW9uYWxseSA9IDEwMjQ7
CiAKLSAgICBtX2lucHV0LmFwcGVuZChtX2NvZGVjLT5kZWNvZGUoZGF0YSwgbGVuZ3RoKSk7Cisg
ICAgYm9vbCBpZ25vcmVkU2F3RXJyb3JGbGFnOworICAgIG1faW5wdXQuYXBwZW5kKG1fY29kZWMt
PmRlY29kZShkYXRhLCBsZW5ndGgsIGZhbHNlLCBmYWxzZSwgaWdub3JlZFNhd0Vycm9yRmxhZykp
OwogCiAgICAgd2hpbGUgKGF1dG8gdG9rZW4gPSBtX3Rva2VuaXplci5uZXh0VG9rZW4obV9pbnB1
dCkpIHsKICAgICAgICAgYm9vbCBpc0VuZCA9IHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuOjpF
bmRUYWc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckRPTUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yRE9NQWdlbnQuY3BwCmluZGV4IGQwODY5ZWZhYjFkNWNiYjQ2Y2Y4ZWZkYTE5NTc0OGMzM2Fh
YmEyMTIuLjQ0NmVkYTA4YTdkZGU2NDRjZTgzZmEzZWFjODczMWIyMTAxODk1OWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQu
Y3BwCkBAIC0xNDE1LDEwICsxNDE1LDEwIEBAIHN0YXRpYyBTdHJpbmcgY29tcHV0ZUNvbnRlbnRT
ZWN1cml0eVBvbGljeVNIQTI1Nkhhc2goY29uc3QgRWxlbWVudCYgZWxlbWVudCkKICAgICAvLyBT
ZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTUxODQ+LgogICAg
IFRleHRFbmNvZGluZyBkb2N1bWVudEVuY29kaW5nID0gZWxlbWVudC5kb2N1bWVudCgpLnRleHRF
bmNvZGluZygpOwogICAgIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmdUb1VzZSA9IGRvY3Vt
ZW50RW5jb2RpbmcuaXNWYWxpZCgpID8gZG9jdW1lbnRFbmNvZGluZyA6IFVURjhFbmNvZGluZygp
OwotICAgIENTdHJpbmcgY29udGVudCA9IGVuY29kaW5nVG9Vc2UuZW5jb2RlKFRleHROb2RlVHJh
dmVyc2FsOjpjb250ZW50c0FzU3RyaW5nKGVsZW1lbnQpLCBFbnRpdGllc0ZvclVuZW5jb2RhYmxl
cyk7CisgICAgYXV0byBjb250ZW50ID0gZW5jb2RpbmdUb1VzZS5lbmNvZGUoVGV4dE5vZGVUcmF2
ZXJzYWw6OmNvbnRlbnRzQXNTdHJpbmcoZWxlbWVudCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVz
KTsKICAgICBhdXRvIGNyeXB0b0RpZ2VzdCA9IFBBTDo6Q3J5cHRvRGlnZXN0OjpjcmVhdGUoUEFM
OjpDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzI1Nik7Ci0gICAgY3J5cHRvRGlnZXN0LT5h
ZGRCeXRlcyhjb250ZW50LmRhdGEoKSwgY29udGVudC5sZW5ndGgoKSk7Ci0gICAgVmVjdG9yPHVp
bnQ4X3Q+IGRpZ2VzdCA9IGNyeXB0b0RpZ2VzdC0+Y29tcHV0ZUhhc2goKTsKKyAgICBjcnlwdG9E
aWdlc3QtPmFkZEJ5dGVzKGNvbnRlbnQuZGF0YSgpLCBjb250ZW50LnNpemUoKSk7CisgICAgYXV0
byBkaWdlc3QgPSBjcnlwdG9EaWdlc3QtPmNvbXB1dGVIYXNoKCk7CiAgICAgcmV0dXJuIG1ha2VT
dHJpbmcoInNoYTI1Ni0iLCBiYXNlNjRFbmNvZGUoZGlnZXN0LmRhdGEoKSwgZGlnZXN0LnNpemUo
KSkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlw
dG9ncmFwaGljRGlnZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUNyeXB0
b2dyYXBoaWNEaWdlc3QuY3BwCmluZGV4IGJhZTkxMmEzMjg3OWI4ZTg5Y2MzYmI4YWQ3YzJhNzY0
ZjVkYzI5YzYuLjE1ODMyM2FmYTQ2MDRjNjBlZDU3M2Y1MWI5Mjg3OTlhYTMyNmJlY2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdl
c3QuY3BwCkBAIC0xNTQsNyArMTU0LDcgQEAgc3RhdGljIFBBTDo6Q3J5cHRvRGlnZXN0OjpBbGdv
cml0aG0gdG9DcnlwdG9EaWdlc3RBbGdvcml0aG0oUmVzb3VyY2VDcnlwdG9ncmFwaGkKICAgICBy
ZXR1cm4gUEFMOjpDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzUxMjsKIH0KIAotUmVzb3Vy
Y2VDcnlwdG9ncmFwaGljRGlnZXN0IGNyeXB0b2dyYXBoaWNEaWdlc3RGb3JCeXRlcyhSZXNvdXJj
ZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobSBhbGdvcml0aG0sIGNvbnN0IGNoYXIqIGJ5
dGVzLCBzaXplX3QgbGVuZ3RoKQorUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IGNyeXB0b2dy
YXBoaWNEaWdlc3RGb3JCeXRlcyhSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRo
bSBhbGdvcml0aG0sIGNvbnN0IHZvaWQqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoKQogewogICAgIGF1
dG8gY3J5cHRvRGlnZXN0ID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZSh0b0NyeXB0b0RpZ2Vz
dEFsZ29yaXRobShhbGdvcml0aG0pKTsKICAgICBjcnlwdG9EaWdlc3QtPmFkZEJ5dGVzKGJ5dGVz
LCBsZW5ndGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5
cHRvZ3JhcGhpY0RpZ2VzdC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRv
Z3JhcGhpY0RpZ2VzdC5oCmluZGV4IDYzOGE0YTNmMjE1MGUxMDdhOTY2NDNiNGE0NmI0MzgxYzhj
NmRlYjguLmU0YTgyYWU3NDY1ODE1NmM3NzZiNTdmZWYxYThmZDk3ZDQ0OTFiYTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmgK
QEAgLTc2LDcgKzc2LDcgQEAgc3RkOjpvcHRpb25hbDxFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFw
aGljRGlnZXN0PiBwYXJzZUVuY29kZWRDcnlwdG9ncmFwaGljRGlnZXMKIAogc3RkOjpvcHRpb25h
bDxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IGRlY29kZUVuY29kZWRSZXNvdXJjZUNyeXB0
b2dyYXBoaWNEaWdlc3QoY29uc3QgRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCYp
OwogCi1SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QgY3J5cHRvZ3JhcGhpY0RpZ2VzdEZvckJ5
dGVzKFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3JpdGhtLCBjb25zdCBjaGFyKiBi
eXRlcywgc2l6ZV90IGxlbmd0aCk7CitSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QgY3J5cHRv
Z3JhcGhpY0RpZ2VzdEZvckJ5dGVzKFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3Jp
dGhtLCBjb25zdCB2b2lkKiBieXRlcywgc2l6ZV90IGxlbmd0aCk7CiAKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuY3BwCmluZGV4IDVkMDljMjM4ZWMw
ZjI5ZGUyNGVkNjRjN2MzN2RiMjEwNTg5MWE5ZjEuLmEwZjkzMmU2YTk2OWFlZjUxN2VhMDRlMzdj
MDc3NTk0NTMzNmJiZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9UZXh0UmVz
b3VyY2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNl
RGVjb2Rlci5jcHAKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMTk5OSBM
YXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQotICAgIENvcHlyaWdodCAoQykgMjAwMywg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgICAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICAgIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNyBB
bGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAKICAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0zMSw3ICsz
MSw2IEBACiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nRGV0ZWN0b3IuaCIKICNpbmNsdWRlICJUZXh0
RW5jb2RpbmdSZWdpc3RyeS5oIgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+Ci0jaW5jbHVk
ZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMyMiwy
MCArMzIxLDE4IEBAIGNvbnN0IFRleHRFbmNvZGluZyYgVGV4dFJlc291cmNlRGVjb2Rlcjo6ZGVm
YXVsdEVuY29kaW5nKENvbnRlbnRUeXBlIGNvbnRlbnRUeXBlCiAgICAgcmV0dXJuIHNwZWNpZmll
ZERlZmF1bHRFbmNvZGluZzsKIH0KIAotVGV4dFJlc291cmNlRGVjb2Rlcjo6VGV4dFJlc291cmNl
RGVjb2Rlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBUZXh0RW5jb2RpbmcmIHNwZWNp
ZmllZERlZmF1bHRFbmNvZGluZywgYm9vbCB1c2VzRW5jb2RpbmdEZXRlY3RvcikKK2lubGluZSBU
ZXh0UmVzb3VyY2VEZWNvZGVyOjpUZXh0UmVzb3VyY2VEZWNvZGVyKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYgc3BlY2lmaWVkRGVmYXVsdEVuY29kaW5nLCBib29s
IHVzZXNFbmNvZGluZ0RldGVjdG9yKQogICAgIDogbV9jb250ZW50VHlwZShkZXRlcm1pbmVDb250
ZW50VHlwZShtaW1lVHlwZSkpCiAgICAgLCBtX2VuY29kaW5nKGRlZmF1bHRFbmNvZGluZyhtX2Nv
bnRlbnRUeXBlLCBzcGVjaWZpZWREZWZhdWx0RW5jb2RpbmcpKQotICAgICwgbV9zb3VyY2UoRGVm
YXVsdEVuY29kaW5nKQotICAgICwgbV9oaW50RW5jb2RpbmcobnVsbHB0cikKLSAgICAsIG1fY2hl
Y2tlZEZvckJPTShmYWxzZSkKLSAgICAsIG1fY2hlY2tlZEZvckNTU0NoYXJzZXQoZmFsc2UpCi0g
ICAgLCBtX2NoZWNrZWRGb3JIZWFkQ2hhcnNldChmYWxzZSkKLSAgICAsIG1fdXNlTGVuaWVudFhN
TERlY29kaW5nKGZhbHNlKQotICAgICwgbV9zYXdFcnJvcihmYWxzZSkKICAgICAsIG1fdXNlc0Vu
Y29kaW5nRGV0ZWN0b3IodXNlc0VuY29kaW5nRGV0ZWN0b3IpCiB7CiB9CiAKK1JlZjxUZXh0UmVz
b3VyY2VEZWNvZGVyPiBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgY29uc3QgVGV4dEVuY29kaW5nJiBkZWZhdWx0RW5jb2RpbmcsIGJvb2wgdXNlc0Vu
Y29kaW5nRGV0ZWN0b3IpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVGV4dFJlc291cmNl
RGVjb2RlcihtaW1lVHlwZSwgZGVmYXVsdEVuY29kaW5nLCB1c2VzRW5jb2RpbmdEZXRlY3Rvcikp
OworfQorCiBUZXh0UmVzb3VyY2VEZWNvZGVyOjp+VGV4dFJlc291cmNlRGVjb2RlcigpID0gZGVm
YXVsdDsKIAogdm9pZCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpzZXRFbmNvZGluZyhjb25zdCBUZXh0
RW5jb2RpbmcmIGVuY29kaW5nLCBFbmNvZGluZ1NvdXJjZSBzb3VyY2UpCkBAIC0zNDYsNyArMzQz
LDcgQEAgdm9pZCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpzZXRFbmNvZGluZyhjb25zdCBUZXh0RW5j
b2RpbmcmIGVuY29kaW5nLCBFbmNvZGluZ1NvdXIKIAogICAgIC8vIFdoZW4gZW5jb2RpbmcgY29t
ZXMgZnJvbSBtZXRhIHRhZyAoaS5lLiBpdCBjYW5ub3QgYmUgWE1MIGZpbGVzIHNlbnQgdmlhIFhI
UiksCiAgICAgLy8gdHJlYXQgeC11c2VyLWRlZmluZWQgYXMgd2luZG93cy0xMjUyIChidWcgMTgy
NzApCi0gICAgaWYgKHNvdXJjZSA9PSBFbmNvZGluZ0Zyb21NZXRhVGFnICYmIHN0cmNhc2VjbXAo
ZW5jb2RpbmcubmFtZSgpLCAieC11c2VyLWRlZmluZWQiKSA9PSAwKQorICAgIGlmIChzb3VyY2Ug
PT0gRW5jb2RpbmdGcm9tTWV0YVRhZyAmJiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShl
bmNvZGluZy5uYW1lKCksICJ4LXVzZXItZGVmaW5lZCIpKQogICAgICAgICBtX2VuY29kaW5nID0g
IndpbmRvd3MtMTI1MiI7CiAgICAgZWxzZSBpZiAoc291cmNlID09IEVuY29kaW5nRnJvbU1ldGFU
YWcgfHwgc291cmNlID09IEVuY29kaW5nRnJvbVhNTEhlYWRlciB8fCBzb3VyY2UgPT0gRW5jb2Rp
bmdGcm9tQ1NTQ2hhcnNldCkgICAgICAgIAogICAgICAgICBtX2VuY29kaW5nID0gZW5jb2Rpbmcu
Y2xvc2VzdEJ5dGVCYXNlZEVxdWl2YWxlbnQoKTsKQEAgLTU5MywzNSArNTkwLDMzIEBAIHZvaWQg
VGV4dFJlc291cmNlRGVjb2Rlcjo6ZGV0ZWN0SmFwYW5lc2VFbmNvZGluZyhjb25zdCBjaGFyKiBk
YXRhLCBzaXplX3QgbGVuKQogLy8gICBpbiB0aGUgZmlyc3QgcGxhY2UuIAogYm9vbCBUZXh0UmVz
b3VyY2VEZWNvZGVyOjpzaG91bGRBdXRvRGV0ZWN0KCkgY29uc3QKIHsKLSAgICAvLyBKdXN0IGNo
ZWNraW5nIG1faGludEVuY29kaW5nIHN1ZmZpY2VzIGhlcmUgYmVjYXVzZSBpdCdzIG9ubHkgc2V0
Ci0gICAgLy8gaW4gc2V0SGludEVuY29kaW5nIHdoZW4gdGhlIHNvdXJjZSBpcyBBdXRvRGV0ZWN0
ZWRFbmNvZGluZy4KICAgICByZXR1cm4gbV91c2VzRW5jb2RpbmdEZXRlY3RvcgotICAgICAgICAm
JiAobV9zb3VyY2UgPT0gRGVmYXVsdEVuY29kaW5nIHx8IChtX3NvdXJjZSA9PSBFbmNvZGluZ0Zy
b21QYXJlbnRGcmFtZSAmJiBtX2hpbnRFbmNvZGluZykpOyAKKyAgICAgICAgJiYgKG1fc291cmNl
ID09IERlZmF1bHRFbmNvZGluZyB8fCAobV9zb3VyY2UgPT0gRW5jb2RpbmdGcm9tUGFyZW50RnJh
bWUgJiYgbV9wYXJlbnRGcmFtZUF1dG9EZXRlY3RlZEVuY29kaW5nKSk7CiB9CiAKLVN0cmluZyBU
ZXh0UmVzb3VyY2VEZWNvZGVyOjpkZWNvZGUoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbikK
K1N0cmluZyBUZXh0UmVzb3VyY2VEZWNvZGVyOjpkZWNvZGUoY29uc3QgY2hhciogZGF0YSwgc2l6
ZV90IGxlbmd0aCkKIHsKICAgICBzaXplX3QgbGVuZ3RoT2ZCT00gPSAwOwogICAgIGlmICghbV9j
aGVja2VkRm9yQk9NKQotICAgICAgICBsZW5ndGhPZkJPTSA9IGNoZWNrRm9yQk9NKGRhdGEsIGxl
bik7CisgICAgICAgIGxlbmd0aE9mQk9NID0gY2hlY2tGb3JCT00oZGF0YSwgbGVuZ3RoKTsKIAog
ICAgIGJvb2wgbW92ZWREYXRhVG9CdWZmZXIgPSBmYWxzZTsKIAogICAgIGlmIChtX2NvbnRlbnRU
eXBlID09IENTUyAmJiAhbV9jaGVja2VkRm9yQ1NTQ2hhcnNldCkKLSAgICAgICAgaWYgKCFjaGVj
a0ZvckNTU0NoYXJzZXQoZGF0YSwgbGVuLCBtb3ZlZERhdGFUb0J1ZmZlcikpCisgICAgICAgIGlm
ICghY2hlY2tGb3JDU1NDaGFyc2V0KGRhdGEsIGxlbmd0aCwgbW92ZWREYXRhVG9CdWZmZXIpKQog
ICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKICAgICBpZiAoKG1fY29udGVudFR5
cGUgPT0gSFRNTCB8fCBtX2NvbnRlbnRUeXBlID09IFhNTCkgJiYgIW1fY2hlY2tlZEZvckhlYWRD
aGFyc2V0KSAvLyBIVE1MIGFuZCBYTUwKLSAgICAgICAgaWYgKCFjaGVja0ZvckhlYWRDaGFyc2V0
KGRhdGEsIGxlbiwgbW92ZWREYXRhVG9CdWZmZXIpKQorICAgICAgICBpZiAoIWNoZWNrRm9ySGVh
ZENoYXJzZXQoZGF0YSwgbGVuZ3RoLCBtb3ZlZERhdGFUb0J1ZmZlcikpCiAgICAgICAgICAgICBy
ZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAogICAgIC8vIEZJWE1FOiBJdCBpcyB3cm9uZyB0byBjaGFu
Z2UgdGhlIGVuY29kaW5nIGRvd25zdHJlYW0gYWZ0ZXIgd2UgaGF2ZSBhbHJlYWR5IGRvbmUgc29t
ZSBkZWNvZGluZy4KICAgICBpZiAoc2hvdWxkQXV0b0RldGVjdCgpKSB7CiAgICAgICAgIGlmICht
X2VuY29kaW5nLmlzSmFwYW5lc2UoKSkKLSAgICAgICAgICAgIGRldGVjdEphcGFuZXNlRW5jb2Rp
bmcoZGF0YSwgbGVuKTsgLy8gRklYTUU6IFdlIHNob3VsZCB1c2UgZGV0ZWN0VGV4dEVuY29kaW5n
KCkgZm9yIGFsbCBsYW5ndWFnZXMuCisgICAgICAgICAgICBkZXRlY3RKYXBhbmVzZUVuY29kaW5n
KGRhdGEsIGxlbmd0aCk7IC8vIEZJWE1FOiBXZSBzaG91bGQgdXNlIGRldGVjdFRleHRFbmNvZGlu
ZygpIGZvciBhbGwgbGFuZ3VhZ2VzLgogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFRleHRF
bmNvZGluZyBkZXRlY3RlZEVuY29kaW5nOwotICAgICAgICAgICAgaWYgKGRldGVjdFRleHRFbmNv
ZGluZyhkYXRhLCBsZW4sIG1faGludEVuY29kaW5nLCAmZGV0ZWN0ZWRFbmNvZGluZykpCisgICAg
ICAgICAgICBpZiAoZGV0ZWN0VGV4dEVuY29kaW5nKGRhdGEsIGxlbmd0aCwgbV9wYXJlbnRGcmFt
ZUF1dG9EZXRlY3RlZEVuY29kaW5nLCAmZGV0ZWN0ZWRFbmNvZGluZykpCiAgICAgICAgICAgICAg
ICAgc2V0RW5jb2RpbmcoZGV0ZWN0ZWRFbmNvZGluZywgQXV0b0RldGVjdGVkRW5jb2RpbmcpOwog
ICAgICAgICB9CiAgICAgfQpAQCAtNjMyLDEyICs2MjcsMTIgQEAgU3RyaW5nIFRleHRSZXNvdXJj
ZURlY29kZXI6OmRlY29kZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuKQogICAgICAgICBt
X2NvZGVjID0gbmV3VGV4dENvZGVjKG1fZW5jb2RpbmcpOwogCiAgICAgaWYgKG1fYnVmZmVyLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fY29kZWMtPmRlY29kZShkYXRhICsgbGVuZ3RoT2ZC
T00sIGxlbiAtIGxlbmd0aE9mQk9NLCBmYWxzZSwgbV9jb250ZW50VHlwZSA9PSBYTUwsIG1fc2F3
RXJyb3IpOworICAgICAgICByZXR1cm4gbV9jb2RlYy0+ZGVjb2RlKGRhdGEgKyBsZW5ndGhPZkJP
TSwgbGVuZ3RoIC0gbGVuZ3RoT2ZCT00sIGZhbHNlLCBtX2NvbnRlbnRUeXBlID09IFhNTCwgbV9z
YXdFcnJvcik7CiAKICAgICBpZiAoIW1vdmVkRGF0YVRvQnVmZmVyKSB7CiAgICAgICAgIHNpemVf
dCBvbGRTaXplID0gbV9idWZmZXIuc2l6ZSgpOwotICAgICAgICBtX2J1ZmZlci5ncm93KG9sZFNp
emUgKyBsZW4pOwotICAgICAgICBtZW1jcHkobV9idWZmZXIuZGF0YSgpICsgb2xkU2l6ZSwgZGF0
YSwgbGVuKTsKKyAgICAgICAgbV9idWZmZXIuZ3JvdyhvbGRTaXplICsgbGVuZ3RoKTsKKyAgICAg
ICAgbWVtY3B5KG1fYnVmZmVyLmRhdGEoKSArIG9sZFNpemUsIGRhdGEsIGxlbmd0aCk7CiAgICAg
fQogCiAgICAgU3RyaW5nIHJlc3VsdCA9IG1fY29kZWMtPmRlY29kZShtX2J1ZmZlci5kYXRhKCkg
KyBsZW5ndGhPZkJPTSwgbV9idWZmZXIuc2l6ZSgpIC0gbGVuZ3RoT2ZCT00sIGZhbHNlLCBtX2Nv
bnRlbnRUeXBlID09IFhNTCAmJiAhbV91c2VMZW5pZW50WE1MRGVjb2RpbmcsIG1fc2F3RXJyb3Ip
OwpAQCAtNjQ3LDE1ICs2NDIsMTQgQEAgU3RyaW5nIFRleHRSZXNvdXJjZURlY29kZXI6OmRlY29k
ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuKQogCiBTdHJpbmcgVGV4dFJlc291cmNlRGVj
b2Rlcjo6Zmx1c2goKQogewotICAgLy8gSWYgd2UgY2FuIG5vdCBpZGVudGlmeSB0aGUgZW5jb2Rp
bmcgZXZlbiBhZnRlciBhIGRvY3VtZW50IGlzIGNvbXBsZXRlbHkKLSAgIC8vIGxvYWRlZCwgd2Ug
bmVlZCB0byBkZXRlY3QgdGhlIGVuY29kaW5nIGlmIG90aGVyIGNvbmRpdGlvbnMgZm9yCi0gICAv
LyBhdXRvZGV0ZWN0aW9uIGlzIHNhdGlzZmllZC4KKyAgICAvLyBJZiB3ZSBjYW4gbm90IGlkZW50
aWZ5IHRoZSBlbmNvZGluZyBldmVuIGFmdGVyIGEgZG9jdW1lbnQgaXMgY29tcGxldGVseQorICAg
IC8vIGxvYWRlZCwgd2UgbmVlZCB0byBkZXRlY3QgdGhlIGVuY29kaW5nIGlmIG90aGVyIGNvbmRp
dGlvbnMgZm9yCisgICAgLy8gYXV0b2RldGVjdGlvbiBpcyBzYXRpc2ZpZWQuCiAgICAgaWYgKG1f
YnVmZmVyLnNpemUoKSAmJiBzaG91bGRBdXRvRGV0ZWN0KCkKICAgICAgICAgJiYgKCghbV9jaGVj
a2VkRm9ySGVhZENoYXJzZXQgJiYgKG1fY29udGVudFR5cGUgPT0gSFRNTCB8fCBtX2NvbnRlbnRU
eXBlID09IFhNTCkpIHx8ICghbV9jaGVja2VkRm9yQ1NTQ2hhcnNldCAmJiAobV9jb250ZW50VHlw
ZSA9PSBDU1MpKSkpIHsKLSAgICAgICAgIFRleHRFbmNvZGluZyBkZXRlY3RlZEVuY29kaW5nOwot
ICAgICAgICAgaWYgKGRldGVjdFRleHRFbmNvZGluZyhtX2J1ZmZlci5kYXRhKCksIG1fYnVmZmVy
LnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9oaW50RW5jb2Rpbmcs
ICZkZXRlY3RlZEVuY29kaW5nKSkKLSAgICAgICAgICAgICBzZXRFbmNvZGluZyhkZXRlY3RlZEVu
Y29kaW5nLCBBdXRvRGV0ZWN0ZWRFbmNvZGluZyk7CisgICAgICAgIFRleHRFbmNvZGluZyBkZXRl
Y3RlZEVuY29kaW5nOworICAgICAgICBpZiAoZGV0ZWN0VGV4dEVuY29kaW5nKG1fYnVmZmVyLmRh
dGEoKSwgbV9idWZmZXIuc2l6ZSgpLCBtX3BhcmVudEZyYW1lQXV0b0RldGVjdGVkRW5jb2Rpbmcs
ICZkZXRlY3RlZEVuY29kaW5nKSkKKyAgICAgICAgICAgIHNldEVuY29kaW5nKGRldGVjdGVkRW5j
b2RpbmcsIEF1dG9EZXRlY3RlZEVuY29kaW5nKTsKICAgICB9CiAKICAgICBpZiAoIW1fY29kZWMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5o
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuaAppbmRleCA5OGVj
OTI1N2FhZDBlMzliYzkwZDliZGIwYjcwNDk0ODJhM2U4M2FkLi4xZGUyMjUyMWNmMGY0Y2YxM2Zk
ZDUyMWEzYjk2ZGZjMjY5MWQxNzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
VGV4dFJlc291cmNlRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9UZXh0UmVz
b3VyY2VEZWNvZGVyLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMTk5
OSBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQogICAgIENvcHlyaWdodCAoQykgMjAw
NiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCi0gICAgQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQg
KEMpIDIwMDYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTI4LDYgKzI4LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
SFRNTE1ldGFDaGFyc2V0UGFyc2VyOworY2xhc3MgVGV4dENvZGVjOwogCiBjbGFzcyBUZXh0UmVz
b3VyY2VEZWNvZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8VGV4dFJlc291cmNlRGVjb2Rlcj4gewog
cHVibGljOgpAQCAtNDIsMzUgKzQzLDI2IEBAIHB1YmxpYzoKICAgICAgICAgRW5jb2RpbmdGcm9t
UGFyZW50RnJhbWUKICAgICB9OwogCi0gICAgc3RhdGljIFJlZjxUZXh0UmVzb3VyY2VEZWNvZGVy
PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVGV4dEVuY29kaW5nJiBkZWZh
dWx0RW5jb2RpbmcgPSBUZXh0RW5jb2RpbmcoKSwgYm9vbCB1c2VzRW5jb2RpbmdEZXRlY3RvciA9
IGZhbHNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVGV4dFJlc291cmNl
RGVjb2RlcihtaW1lVHlwZSwgZGVmYXVsdEVuY29kaW5nLCB1c2VzRW5jb2RpbmdEZXRlY3Rvcikp
OwotICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFRleHRSZXNvdXJjZURlY29k
ZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBUZXh0RW5jb2RpbmcmIGRl
ZmF1bHRFbmNvZGluZyA9IHsgfSwgYm9vbCB1c2VzRW5jb2RpbmdEZXRlY3RvciA9IGZhbHNlKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCB+VGV4dFJlc291cmNlRGVjb2RlcigpOwogCiAgICAgdm9pZCBz
ZXRFbmNvZGluZyhjb25zdCBUZXh0RW5jb2RpbmcmLCBFbmNvZGluZ1NvdXJjZSk7CiAgICAgY29u
c3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2Rpbmc7IH0K
IAotICAgIGJvb2wgaGFzRXF1YWxFbmNvZGluZ0ZvckNoYXJzZXQoY29uc3QgU3RyaW5nJikgY29u
c3Q7CisgICAgYm9vbCBoYXNFcXVhbEVuY29kaW5nRm9yQ2hhcnNldChjb25zdCBTdHJpbmcmIGNo
YXJzZXQpIGNvbnN0OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGRlY29kZShjb25zdCBj
aGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgZmx1
c2goKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBkZWNvZGVBbmRGbHVzaChjb25zdCBj
aGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsKIAotICAgIHZvaWQgc2V0SGludEVuY29kaW5nKGNv
bnN0IFRleHRSZXNvdXJjZURlY29kZXIqIGhpbnREZWNvZGVyKQotICAgIHsKLSAgICAgICAgLy8g
aGludEVuY29kaW5nIGlzIGZvciB1c2Ugd2l0aCBhdXRvZGV0ZWN0aW9uLCB3aGljaCBzaG91bGQg
YmUgCi0gICAgICAgIC8vIG9ubHkgaW52b2tlZCB3aGVuIGhpbnRFbmNvZGluZyBjb21lcyBmcm9t
IGF1dG8tZGV0ZWN0aW9uLgotICAgICAgICBpZiAoaGludERlY29kZXIgJiYgaGludERlY29kZXIt
Pm1fc291cmNlID09IEF1dG9EZXRlY3RlZEVuY29kaW5nKQotICAgICAgICAgICAgbV9oaW50RW5j
b2RpbmcgPSBoaW50RGVjb2Rlci0+ZW5jb2RpbmcoKS5uYW1lKCk7Ci0gICAgfQorICAgIHZvaWQg
c2V0SGludEVuY29kaW5nKGNvbnN0IFRleHRSZXNvdXJjZURlY29kZXIqIHBhcmVudEZyYW1lRGVj
b2Rlcik7CiAgICAKICAgICB2b2lkIHVzZUxlbmllbnRYTUxEZWNvZGluZygpIHsgbV91c2VMZW5p
ZW50WE1MRGVjb2RpbmcgPSB0cnVlOyB9CiAgICAgYm9vbCBzYXdFcnJvcigpIGNvbnN0IHsgcmV0
dXJuIG1fc2F3RXJyb3I7IH0KIAogcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBUZXh0UmVz
b3VyY2VEZWNvZGVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYg
ZGVmYXVsdEVuY29kaW5nLCBib29sIHVzZXNFbmNvZGluZ0RldGVjdG9yKTsKKyAgICBUZXh0UmVz
b3VyY2VEZWNvZGVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYg
ZGVmYXVsdEVuY29kaW5nLCBib29sIHVzZXNFbmNvZGluZ0RldGVjdG9yKTsKIAogICAgIGVudW0g
Q29udGVudFR5cGUgeyBQbGFpblRleHQsIEhUTUwsIFhNTCwgQ1NTIH07IC8vIFBsYWluVGV4dCBv
bmx5IGNoZWNrcyBmb3IgQk9NLgogICAgIHN0YXRpYyBDb250ZW50VHlwZSBkZXRlcm1pbmVDb250
ZW50VHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKQEAgLTg2LDE3ICs3OCwyMiBAQCBwcml2
YXRlOgogICAgIENvbnRlbnRUeXBlIG1fY29udGVudFR5cGU7CiAgICAgVGV4dEVuY29kaW5nIG1f
ZW5jb2Rpbmc7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFRleHRDb2RlYz4gbV9jb2RlYzsKLSAgICBF
bmNvZGluZ1NvdXJjZSBtX3NvdXJjZTsKLSAgICBjb25zdCBjaGFyKiBtX2hpbnRFbmNvZGluZzsK
LSAgICBWZWN0b3I8Y2hhcj4gbV9idWZmZXI7Ci0gICAgYm9vbCBtX2NoZWNrZWRGb3JCT007Ci0g
ICAgYm9vbCBtX2NoZWNrZWRGb3JDU1NDaGFyc2V0OwotICAgIGJvb2wgbV9jaGVja2VkRm9ySGVh
ZENoYXJzZXQ7Ci0gICAgYm9vbCBtX3VzZUxlbmllbnRYTUxEZWNvZGluZzsgLy8gRG9uJ3Qgc3Rv
cCBvbiBYTUwgZGVjb2RpbmcgZXJyb3JzLgotICAgIGJvb2wgbV9zYXdFcnJvcjsKLSAgICBib29s
IG1fdXNlc0VuY29kaW5nRGV0ZWN0b3I7Ci0KICAgICBzdGQ6OnVuaXF1ZV9wdHI8SFRNTE1ldGFD
aGFyc2V0UGFyc2VyPiBtX2NoYXJzZXRQYXJzZXI7CisgICAgRW5jb2RpbmdTb3VyY2UgbV9zb3Vy
Y2UgeyBEZWZhdWx0RW5jb2RpbmcgfTsKKyAgICBjb25zdCBjaGFyKiBtX3BhcmVudEZyYW1lQXV0
b0RldGVjdGVkRW5jb2RpbmcgeyBudWxscHRyIH07CisgICAgVmVjdG9yPGNoYXI+IG1fYnVmZmVy
OworICAgIGJvb2wgbV9jaGVja2VkRm9yQk9NIHsgZmFsc2UgfTsKKyAgICBib29sIG1fY2hlY2tl
ZEZvckNTU0NoYXJzZXQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9jaGVja2VkRm9ySGVhZENoYXJz
ZXQgeyBmYWxzZSB9OworICAgIGJvb2wgbV91c2VMZW5pZW50WE1MRGVjb2RpbmcgeyBmYWxzZSB9
OyAvLyBEb24ndCBzdG9wIG9uIFhNTCBkZWNvZGluZyBlcnJvcnMuCisgICAgYm9vbCBtX3Nhd0Vy
cm9yIHsgZmFsc2UgfTsKKyAgICBib29sIG1fdXNlc0VuY29kaW5nRGV0ZWN0b3IgeyBmYWxzZSB9
OwogfTsKIAoraW5saW5lIHZvaWQgVGV4dFJlc291cmNlRGVjb2Rlcjo6c2V0SGludEVuY29kaW5n
KGNvbnN0IFRleHRSZXNvdXJjZURlY29kZXIqIHBhcmVudEZyYW1lRGVjb2RlcikKK3sKKyAgICBp
ZiAocGFyZW50RnJhbWVEZWNvZGVyICYmIHBhcmVudEZyYW1lRGVjb2Rlci0+bV9zb3VyY2UgPT0g
QXV0b0RldGVjdGVkRW5jb2RpbmcpCisgICAgICAgIG1fcGFyZW50RnJhbWVBdXRvRGV0ZWN0ZWRF
bmNvZGluZyA9IHBhcmVudEZyYW1lRGVjb2Rlci0+ZW5jb2RpbmcoKS5uYW1lKCk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCmluZGV4IDE1M2U4ODQwMjFi
ZDc4MzI4NTg4NmZhNzJmYzgyYzRlNTQ2MTI2NzUuLjljMWNjMzgwYTExYWM2ZDM4MTRmNzM0MTJi
YTAxNDgxMGYwMGM5ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcApAQCAtMzgsNyArMzgsNiBAQAog
I2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luRGF0YS5oIgogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAj
aW5jbHVkZSA8d3RmL1VVSUQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVRyZWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVRyZWUuY3Bw
CmluZGV4IDMwZDFkY2RlMDUwMjM2MzIxNGRmNzBkZGNjNThhY2Y0ZjlhYmJhMjAuLjMwM2M1MWEz
YmU5N2RiNWYyNTZjNTQ4YTJlNzhkOGU0ZmQwMDhhODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVUcmVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVHJl
ZS5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFn
ZUdyb3VwLmgiCiAjaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2VTZXJpYWxpemVyLmNwcAppbmRleCBlYzEwY2Q1ZmZmMGZlNGQ1Y2Y5MmIxMWZmMzZlYjU5
N2Q2NDg0ZGI3Li5mZDc0MzNjMjBmMzU3MTM5ZjY0YTg4YzE5ZTlhN2QxODIzNjJjMTk4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcApAQCAtMTk5LDggKzE5OSw3IEBAIHZv
aWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUZyYW1lKEZyYW1lKiBmcmFtZSkKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBTdHJpbmcgdGV4dCA9IGFjY3VtdWxhdG9yLnNlcmlhbGl6ZU5v
ZGVzKCpkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCksIEluY2x1ZGVOb2RlKTsKLSAgICBDU3Ry
aW5nIGZyYW1lSFRNTCA9IHRleHRFbmNvZGluZy5lbmNvZGUodGV4dCwgRW50aXRpZXNGb3JVbmVu
Y29kYWJsZXMpOwotICAgIG1fcmVzb3VyY2VzLmFwcGVuZCh7IHVybCwgZG9jdW1lbnQtPnN1Z2dl
c3RlZE1JTUVUeXBlKCksIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGZyYW1lSFRNTC5kYXRhKCksIGZy
YW1lSFRNTC5sZW5ndGgoKSkgfSk7CisgICAgbV9yZXNvdXJjZXMuYXBwZW5kKHsgdXJsLCBkb2N1
bWVudC0+c3VnZ2VzdGVkTUlNRVR5cGUoKSwgU2hhcmVkQnVmZmVyOjpjcmVhdGUodGV4dEVuY29k
aW5nLmVuY29kZSh0ZXh0LCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcykpIH0pOwogICAgIG1fcmVz
b3VyY2VVUkxzLmFkZCh1cmwpOwogCiAgICAgZm9yIChhdXRvJiBub2RlIDogbm9kZXMpIHsKQEAg
LTI2NCw5ICsyNjMsNyBAQCB2b2lkIFBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemVDU1NTdHlsZVNo
ZWV0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQsIGNvbnN0IFVSTAogICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGNoZWNrIHdoZXRoZXIgYSBjaGFyc2V0IGhhcyBiZWVuIHNwZWNpZmllZCBh
bmQgaWYgbm9uZSB3YXMgZm91bmQgYWRkIG9uZS4KICAgICAgICAgVGV4dEVuY29kaW5nIHRleHRF
bmNvZGluZyhzdHlsZVNoZWV0LT5jb250ZW50cygpLmNoYXJzZXQoKSk7CiAgICAgICAgIEFTU0VS
VCh0ZXh0RW5jb2RpbmcuaXNWYWxpZCgpKTsKLSAgICAgICAgU3RyaW5nIHRleHRTdHJpbmcgPSBj
c3NUZXh0LnRvU3RyaW5nKCk7Ci0gICAgICAgIENTdHJpbmcgdGV4dCA9IHRleHRFbmNvZGluZy5l
bmNvZGUodGV4dFN0cmluZywgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwotICAgICAgICBtX3Jl
c291cmNlcy5hcHBlbmQoeyB1cmwsIEFTQ0lJTGl0ZXJhbCB7ICJ0ZXh0L2NzcyIgfSwgU2hhcmVk
QnVmZmVyOjpjcmVhdGUodGV4dC5kYXRhKCksIHRleHQubGVuZ3RoKCkpIH0pOworICAgICAgICBt
X3Jlc291cmNlcy5hcHBlbmQoeyB1cmwsIEFTQ0lJTGl0ZXJhbCB7ICJ0ZXh0L2NzcyIgfSwgU2hh
cmVkQnVmZmVyOjpjcmVhdGUodGV4dEVuY29kaW5nLmVuY29kZShjc3NUZXh0LnRvU3RyaW5nKCks
IEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKSkgfSk7CiAgICAgICAgIG1fcmVzb3VyY2VVUkxzLmFk
ZCh1cmwpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0Nv
bnRlbnRTZWN1cml0eVBvbGljeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50
U2VjdXJpdHlQb2xpY3kuY3BwCmluZGV4IDYxMDFmZmFlMDAzNDA5M2JhMjhhZGI3YzE1YWVmOTli
ZTI3YTBmZjMuLmZhMWUwNGZhOTEyMTk1NzQ3YTBlNDQ4MTYzMzFjYzE3MTBhZDEzODMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcApA
QCAtMzMyLDExICszMzIsMTEgQEAgQ29udGVudFNlY3VyaXR5UG9saWN5OjpIYXNoSW5FbmZvcmNl
ZEFuZFJlcG9ydE9ubHlQb2xpY2llc1BhaXIgQ29udGVudFNlY3VyaXR5UG8KIAogICAgIC8vIEZJ
WE1FOiBDb21wdXRlIHRoZSBkaWdlc3Qgd2l0aCByZXNwZWN0IHRvIHRoZSByYXcgYnl0ZXMgcmVj
ZWl2ZWQgZnJvbSB0aGUgcGFnZS4KICAgICAvLyBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTUxODQ+LgotICAgIENTdHJpbmcgY29udGVudENTdHJpbmcgPSBl
bmNvZGluZ1RvVXNlLmVuY29kZShjb250ZW50LCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7Cisg
ICAgYXV0byBlbmNvZGVkQ29udGVudCA9IGVuY29kaW5nVG9Vc2UuZW5jb2RlKGNvbnRlbnQsIEVu
dGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKICAgICBib29sIGZvdW5kSGFzaEluRW5mb3JjZWRQb2xp
Y2llcyA9IGZhbHNlOwogICAgIGJvb2wgZm91bmRIYXNoSW5SZXBvcnRPbmx5UG9saWNpZXMgPSBm
YWxzZTsKICAgICBmb3IgKGF1dG8gYWxnb3JpdGhtIDogYWxnb3JpdGhtcykgewotICAgICAgICBD
b250ZW50U2VjdXJpdHlQb2xpY3lIYXNoIGhhc2ggPSBjcnlwdG9ncmFwaGljRGlnZXN0Rm9yQnl0
ZXMoYWxnb3JpdGhtLCBjb250ZW50Q1N0cmluZy5kYXRhKCksIGNvbnRlbnRDU3RyaW5nLmxlbmd0
aCgpKTsKKyAgICAgICAgQ29udGVudFNlY3VyaXR5UG9saWN5SGFzaCBoYXNoID0gY3J5cHRvZ3Jh
cGhpY0RpZ2VzdEZvckJ5dGVzKGFsZ29yaXRobSwgZW5jb2RlZENvbnRlbnQuZGF0YSgpLCBlbmNv
ZGVkQ29udGVudC5zaXplKCkpOwogICAgICAgICBpZiAoIWZvdW5kSGFzaEluRW5mb3JjZWRQb2xp
Y2llcyAmJiBhbGxQb2xpY2llc1dpdGhEaXNwb3NpdGlvbkFsbG93KENvbnRlbnRTZWN1cml0eVBv
bGljeTo6RGlzcG9zaXRpb246OkVuZm9yY2UsIHN0ZDo6Zm9yd2FyZDxQcmVkaWNhdGU+KHByZWRp
Y2F0ZSksIGhhc2gpKQogICAgICAgICAgICAgZm91bmRIYXNoSW5FbmZvcmNlZFBvbGljaWVzID0g
dHJ1ZTsKICAgICAgICAgaWYgKCFmb3VuZEhhc2hJblJlcG9ydE9ubHlQb2xpY2llcyAmJiBhbGxQ
b2xpY2llc1dpdGhEaXNwb3NpdGlvbkFsbG93KENvbnRlbnRTZWN1cml0eVBvbGljeTo6RGlzcG9z
aXRpb246OlJlcG9ydE9ubHksIHN0ZDo6Zm9yd2FyZDxQcmVkaWNhdGU+KHByZWRpY2F0ZSksIGhh
c2gpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUhhbmRsZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlSGFuZGxlLmNwcAppbmRleCAyYTBhNjM0YzZm
NjgxMmNmNmZjZTdiMjA4MWNkOWVhYjhiYWU1OTAzLi4xYzNmNTMyODlkNTQwZjE1MDkzYzQxMmU0
NDFjZTZmY2Q2MDk3YmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxl
SGFuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlSGFuZGxlLmNwcApA
QCAtMjksOCArMjksNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZpbGVIYW5k
bGUuaCIKIAotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KLQogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBGaWxlSGFuZGxlOjpGaWxlSGFuZGxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZVN5
c3RlbTo6RmlsZU9wZW5Nb2RlIG1vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TaGFyZWRCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVm
ZmVyLmNwcAppbmRleCAwZDM1YjIxM2JmYzIxZDlkOGE5YjFkYTFmM2IyYmM5MDU3NGI5MjVlLi5k
NjZiNTMwOWUxYjFiZjZkYWI1ZWY0NjRlMThmMzBiYzNkZWRiOTkxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKQEAgLTc0LDYgKzc0LDEyIEBAIFJlZjxTaGFyZWRC
dWZmZXI+IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFZlY3RvcjxjaGFyPiYmIHZlY3RvcikKICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRCdWZmZXIoV1RGTW92ZSh2ZWN0b3IpKSk7CiB9CiAK
Ky8vIEZJWE1FOiBNb3ZlIHRoZSB3aG9sZSBjbGFzcyBmcm9tIFZlY3RvcjxjaGFyPiB0byBWZWN0
b3I8dWludDhfdD4gYW5kIG1ha2UgdGhpcyBlZmZpY2llbnQsIHJlcGxhY2luZyB0aGUgVmVjdG9y
PGNoYXI+IHZlcnNpb24gYWJvdmUuCitSZWY8U2hhcmVkQnVmZmVyPiBTaGFyZWRCdWZmZXI6OmNy
ZWF0ZShWZWN0b3I8dWludDhfdD4mJiB2ZWN0b3IpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU2hhcmVkQnVmZmVyIHsgdmVjdG9yLmRhdGEoKSwgdmVjdG9yLnNpemUoKSB9KTsKK30KKwog
dm9pZCBTaGFyZWRCdWZmZXI6OmNvbWJpbmVJbnRvT25lU2VnbWVudCgpIGNvbnN0CiB7CiAjaWYg
IUFTU0VSVF9ESVNBQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hh
cmVkQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAppbmRl
eCAzNGZmNzFjNjM4NmQ4MmNlYzc1ZGZhMjVjNWQyMGEwYTRmZWZhMjQyLi4zMDVhOTEzMzUyZDIy
ZTFlMWQ3MzFhMDc4OTNmNjM3YjdmYjc3MzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFy
ZWRCdWZmZXIuaApAQCAtNjAsNyArNjAsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJlZlB0cjxT
aGFyZWRCdWZmZXI+IGNyZWF0ZVdpdGhDb250ZW50c09mRmlsZShjb25zdCBTdHJpbmcmIGZpbGVQ
YXRoKTsKIAogICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoVmVjdG9yPGNoYXI+
JiYpOwotICAgIAorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoVmVjdG9yPHVp
bnQ4X3Q+JiYpOworCiAjaWYgVVNFKEZPVU5EQVRJT04pCiAgICAgUmV0YWluUHRyPE5TRGF0YT4g
Y3JlYXRlTlNEYXRhKCkgY29uc3Q7CiAgICAgUmV0YWluUHRyPE5TQXJyYXk+IGNyZWF0ZU5TRGF0
YUFycmF5KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQ
YXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNwcAppbmRleCA2
NzI4NjEyZWQwMzI0OWZmOTc2Mjg4MjE1ZGM5YjQ1MTNjYTk3ZDFhLi5lOGRiNzNmZTU1ZGQyNWQ1
MjI4ZjgzOGZiZDBkZWZjYTBiNTdjNjlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9VUkxQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNl
ci5jcHAKQEAgLTYyMSw5ICs2MjEsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
Pgogdm9pZCBVUkxQYXJzZXI6OmVuY29kZVF1ZXJ5KGNvbnN0IFZlY3RvcjxVQ2hhcj4mIHNvdXJj
ZSwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFj
dGVyVHlwZT4gaXRlcmF0b3IpCiB7CiAgICAgLy8gRklYTUU6IEl0IGlzIHVuY2xlYXIgaW4gdGhl
IHNwZWMgd2hhdCB0byBkbyB3aGVuIGVuY29kaW5nIGZhaWxzLiBUaGUgYmVoYXZpb3Igc2hvdWxk
IGJlIHNwZWNpZmllZCBhbmQgdGVzdGVkLgotICAgIENTdHJpbmcgZW5jb2RlZCA9IGVuY29kaW5n
LmVuY29kZShTdHJpbmdWaWV3KHNvdXJjZS5kYXRhKCksIHNvdXJjZS5zaXplKCkpLCBVUkxFbmNv
ZGVkRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwotICAgIGNvbnN0IGNoYXIqIGRhdGEgPSBlbmNv
ZGVkLmRhdGEoKTsKLSAgICBzaXplX3QgbGVuZ3RoID0gZW5jb2RlZC5sZW5ndGgoKTsKKyAgICBh
dXRvIGVuY29kZWQgPSBlbmNvZGluZy5lbmNvZGUoU3RyaW5nVmlldyhzb3VyY2UuZGF0YSgpLCBz
b3VyY2Uuc2l6ZSgpKSwgVVJMRW5jb2RlZEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKKyAgICBh
dXRvKiBkYXRhID0gZW5jb2RlZC5kYXRhKCk7CisgICAgc2l6ZV90IGxlbmd0aCA9IGVuY29kZWQu
c2l6ZSgpOwogICAgIAogICAgIGlmICghbGVuZ3RoID09ICFpdGVyYXRvci5hdEVuZCgpKSB7CiAg
ICAgICAgIHN5bnRheFZpb2xhdGlvbihpdGVyYXRvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQpp
bmRleCBhZTIzZDhiM2RmZjI4Mzc3MzkzMWFlZTY5ODFlODlkYzg5OGUzMTZlLi42ZjQ1NzllMDBi
NTNjNjZmYmZjMDZmYzJhYWRlMzQ4NTk4YTViOGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0K
QEAgLTE3ODcsMTEgKzE3ODcsMTAgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDOjpzaG91bGRXYWl0Rm9yTG9hZGluZ09mUmVzb3VyY2UoQVZBc3NldFIKIAogICAgIGlm
IChzY2hlbWUgPT0gImNsZWFya2V5IikgewogICAgICAgICBTdHJpbmcga2V5SUQgPSBbW1thdlJl
cXVlc3QgcmVxdWVzdF0gVVJMXSByZXNvdXJjZVNwZWNpZmllcl07Ci0gICAgICAgIFN0cmluZ1Zp
ZXcga2V5SURWaWV3KGtleUlEKTsKLSAgICAgICAgQ1N0cmluZyB1dGY4RW5jb2RlZEtleUlkID0g
VVRGOEVuY29kaW5nKCkuZW5jb2RlKGtleUlEVmlldywgVVJMRW5jb2RlZEVudGl0aWVzRm9yVW5l
bmNvZGFibGVzKTsKKyAgICAgICAgYXV0byBlbmNvZGVkS2V5SWQgPSBVVEY4RW5jb2RpbmcoKS5l
bmNvZGUoa2V5SUQsIFVSTEVuY29kZWRFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7CiAKLSAgICAg
ICAgUmVmUHRyPFVpbnQ4QXJyYXk+IGluaXREYXRhID0gVWludDhBcnJheTo6Y3JlYXRlKHV0ZjhF
bmNvZGVkS2V5SWQubGVuZ3RoKCkpOwotICAgICAgICBpbml0RGF0YS0+c2V0UmFuZ2UocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBKU0M6OlVpbnQ4QWRhcHRvcjo6VHlwZSo+KHV0ZjhFbmNvZGVkS2V5
SWQuZGF0YSgpKSwgdXRmOEVuY29kZWRLZXlJZC5sZW5ndGgoKSwgMCk7CisgICAgICAgIGF1dG8g
aW5pdERhdGEgPSBVaW50OEFycmF5OjpjcmVhdGUoZW5jb2RlZEtleUlkLnNpemUoKSk7CisgICAg
ICAgIGluaXREYXRhLT5zZXRSYW5nZShlbmNvZGVkS2V5SWQuZGF0YSgpLCBlbmNvZGVkS2V5SWQu
c2l6ZSgpLCAwKTsKIAogICAgICAgICBhdXRvIGtleURhdGEgPSBwbGF5ZXIoKS0+Y2FjaGVkS2V5
Rm9yS2V5SWQoa2V5SUQpOwogICAgICAgICBpZiAoa2V5RGF0YSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5jcHAKaW5k
ZXggMjdjZWVkMmU3MTE3ZDgxZGMwODU0MTljNzM5ZWNmOGEyYzllYTIxMi4uYzQyZjg4OWM0OGQz
YzlmY2I1Mjk0ZmUzYjgwOTRiZGUyODg2NTA2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuY3BwCkBAIC0zMyw3ICsz
Myw2IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyQ2xpZW50LmgiCiAjaW5jbHVkZSA8Q29y
ZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KICNpbmNsdWRlIDxDb3JlVGV4dC9Db3JlVGV4
dC5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9U
ZXh0U3RyZWFtLmg+CiAKICNpZiBQTEFURk9STShXSU4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCmluZGV4IDNjOGVlMDhkMTU5MTkzZGEwZmM3MDVhMGFj
ZmQ4MzQyOGU1YjdjMmMuLmNiNTI4YmRkZmQ5NWY3NmE3NjZlYjU1MTNjMDU4NmJhZDcwNTRjYzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCkBAIC04
MSwxNiArODEsMTcgQEAgUmVmPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IHZvaWQq
IGRhdGEsIHNpemVfdCBzaXplKQogCiBSZWY8Rm9ybURhdGE+IEZvcm1EYXRhOjpjcmVhdGUoY29u
c3QgQ1N0cmluZyYgc3RyaW5nKQogewotICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlKCk7Ci0gICAg
cmVzdWx0LT5hcHBlbmREYXRhKHN0cmluZy5kYXRhKCksIHN0cmluZy5sZW5ndGgoKSk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gY3JlYXRlKHN0cmluZy5kYXRhKCksIHN0cmluZy5s
ZW5ndGgoKSk7CiB9CiAKIFJlZjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCBWZWN0
b3I8Y2hhcj4mIHZlY3RvcikKIHsKLSAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZSgpOwotICAgIHJl
c3VsdC0+YXBwZW5kRGF0YSh2ZWN0b3IuZGF0YSgpLCB2ZWN0b3Iuc2l6ZSgpKTsKLSAgICByZXR1
cm4gcmVzdWx0OworICAgIHJldHVybiBjcmVhdGUodmVjdG9yLmRhdGEoKSwgdmVjdG9yLnNpemUo
KSk7Cit9CisKK1JlZjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIHZlY3RvcikKK3sKKyAgICByZXR1cm4gY3JlYXRlKHZlY3Rvci5kYXRhKCksIHZlY3Rv
ci5zaXplKCkpOwogfQogCiBSZWY8Rm9ybURhdGE+IEZvcm1EYXRhOjpjcmVhdGUoY29uc3QgRE9N
Rm9ybURhdGEmIGZvcm1EYXRhLCBFbmNvZGluZ1R5cGUgZW5jb2RpbmdUeXBlKQpAQCAtMTE0LDcg
KzExNSw5IEBAIFJlZjxGb3JtRGF0YT4gRm9ybURhdGE6OmNvcHkoKSBjb25zdAogCiBSZWY8Rm9y
bURhdGE+IEZvcm1EYXRhOjppc29sYXRlZENvcHkoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBp
c29sYXRlZENvcHkoKSAoaGlzdG9yaWNhbGx5IGRlZXBDb3B5KCkpIG9ubHkgY29waWVzIGNlcnRh
aW4gdmFsdWVzIGZyb20gYHRoaXNgLiBXaHkgaXMgdGhhdD8KKyAgICAvLyBGSVhNRTogaXNvbGF0
ZWRDb3B5KCkgZG9lcyBub3QgY29weSBtX2lkZW50aWZlciwgbV9ib3VuZGFyeSwgb3IgbV9jb250
YWluc1Bhc3N3b3JkRGF0YS4KKyAgICAvLyBJcyBhbGwgb2YgdGhhdCBjb3JyZWN0IGFuZCBpbnRl
bnRpb25hbD8KKwogICAgIGF1dG8gZm9ybURhdGEgPSBjcmVhdGUoKTsKIAogICAgIGZvcm1EYXRh
LT5tX2Fsd2F5c1N0cmVhbSA9IG1fYWx3YXlzU3RyZWFtOwpAQCAtMTgzLDcgKzE4Niw3IEBAIHZv
aWQgRm9ybURhdGE6OmFwcGVuZEJsb2IoY29uc3QgVVJMJiBibG9iVVJMKQogICAgIG1fbGVuZ3Ro
SW5CeXRlcyA9IHN0ZDo6bnVsbG9wdDsKIH0KIAotc3RhdGljIENTdHJpbmcgbm9ybWFsaXplU3Ry
aW5nRGF0YShUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorc3Rh
dGljIFZlY3Rvcjx1aW50OF90PiBub3JtYWxpemVTdHJpbmdEYXRhKFRleHRFbmNvZGluZyYgZW5j
b2RpbmcsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgcmV0dXJuIG5vcm1hbGl6ZUxpbmVF
bmRpbmdzVG9DUkxGKGVuY29kaW5nLmVuY29kZSh2YWx1ZSwgRW50aXRpZXNGb3JVbmVuY29kYWJs
ZXMpKTsKIH0KQEAgLTIzMCw3ICsyMzMsNyBAQCB2b2lkIEZvcm1EYXRhOjphcHBlbmRNdWx0aVBh
cnRTdHJpbmdWYWx1ZShjb25zdCBTdHJpbmcmIHN0cmluZywgVmVjdG9yPGNoYXI+JiBoZQogICAg
IGFwcGVuZERhdGEoaGVhZGVyLmRhdGEoKSwgaGVhZGVyLnNpemUoKSk7CiAKICAgICBhdXRvIG5v
cm1hbGl6ZWRTdHJpbmdEYXRhID0gbm9ybWFsaXplU3RyaW5nRGF0YShlbmNvZGluZywgc3RyaW5n
KTsKLSAgICBhcHBlbmREYXRhKG5vcm1hbGl6ZWRTdHJpbmdEYXRhLmRhdGEoKSwgbm9ybWFsaXpl
ZFN0cmluZ0RhdGEubGVuZ3RoKCkpOworICAgIGFwcGVuZERhdGEobm9ybWFsaXplZFN0cmluZ0Rh
dGEuZGF0YSgpLCBub3JtYWxpemVkU3RyaW5nRGF0YS5zaXplKCkpOwogfQogCiB2b2lkIEZvcm1E
YXRhOjphcHBlbmRNdWx0aVBhcnRLZXlWYWx1ZVBhaXJJdGVtcyhjb25zdCBET01Gb3JtRGF0YSYg
Zm9ybURhdGEsIERvY3VtZW50KiBkb2N1bWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvRm9ybURhdGEuaAppbmRleCA2ZjlhN2E3MmJmZjk4MjI2NTc5NjVkMzkwNmExNTMyZjBk
ZmE1OGY0Li40MDg3YjlkZDYyOWNiOTg1YjhmNTRkNWFhZGU4ZjdhNzAyZDFlNjg3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oCkBAIC0zNCwxMyArMzQsMTEg
QEAgY2xhc3MgRmlsZTsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIGNsYXNzIFRleHRFbmNvZGluZzsK
IAorLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBhIFZhcmlhbnQgb2Ygc3RydWN0cyBhbmQgcmVt
b3ZlICJUeXBlIiBhbmQgYWxzbyB0aGUgIm1fIiBwcmVmaXhlcyBmcm9tIHRoZSBkYXRhIG1lbWJl
cnMuCisvLyBUaGUgbWVtYmVyIGZ1bmN0aW9ucyBjYW4gYmVjb21lIG5vbi1tZW1iZXIgZnVjbnRp
b25zLgogY2xhc3MgRm9ybURhdGFFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBlbnVtIGNsYXNzIFR5
cGUgewotICAgICAgICBEYXRhLAotICAgICAgICBFbmNvZGVkRmlsZSwKLSAgICAgICAgRW5jb2Rl
ZEJsb2IsCi0gICAgfTsKKyAgICBlbnVtIGNsYXNzIFR5cGUgeyBEYXRhLCBFbmNvZGVkRmlsZSwg
RW5jb2RlZEJsb2IgfTsKIAogICAgIEZvcm1EYXRhRWxlbWVudCgpCiAgICAgICAgIDogbV90eXBl
KFR5cGU6OkRhdGEpCkBAIC03NCwxMCArNzIsOCBAQCBwdWJsaWM6CiAKICAgICBGb3JtRGF0YUVs
ZW1lbnQgaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNv
ZGVyPgotICAgIHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBEZWNvZGVyPgotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEZvcm1EYXRhRWxlbWVudD4g
ZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8Rm9ybURhdGFFbGVtZW50PiBkZWNvZGUoRGVjb2RlciYpOwogCiAg
ICAgVHlwZSBtX3R5cGU7CiAgICAgVmVjdG9yPGNoYXI+IG1fZGF0YTsKQEAgLTg3LDkgKzgzLDgg
QEAgcHVibGljOgogICAgIGludDY0X3QgbV9maWxlTGVuZ3RoOwogICAgIGRvdWJsZSBtX2V4cGVj
dGVkRmlsZU1vZGlmaWNhdGlvblRpbWU7CiAgICAgLy8gRklYTUU6IEdlbmVyYXRlZCBmaWxlIHN1
cHBvcnQgaW4gRm9ybURhdGEgaXMgYWxtb3N0IGlkZW50aWNhbCB0byBCbG9iLCB0aGV5IHNob3Vs
ZCBiZSBtZXJnZWQuCi0gICAgLy8gV2UgY2FuJ3QganVzdCBzd2l0Y2ggdG8gdXNpbmcgQmxvYnMg
Zm9yIGFsbCBmaWxlcyBmb3IgdHdvIHJlYXNvbnM6Ci0gICAgLy8gMS4gTm90IGFsbCBwbGF0Zm9y
bXMgZW5hYmxlIEJMT0Igc3VwcG9ydC4KLSAgICAvLyAyLiBFbmNvZGVkRmlsZSBmb3JtIGRhdGEg
ZWxlbWVudHMgZG8gbm90IGhhdmUgYSB2YWxpZCBtX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRp
bWUsIG1lYW5pbmcgdGhhdCB3ZSBhbHdheXMgdXBsb2FkIHRoZSBsYXRlc3QgY29udGVudCBmcm9t
IGRpc2suCisgICAgLy8gV2UgY2FuJ3QganVzdCBzd2l0Y2ggdG8gdXNpbmcgQmxvYnMgZm9yIGFs
bCBmaWxlcyBiZWNhdXNlCisgICAgLy8gRW5jb2RlZEZpbGUgZm9ybSBkYXRhIGVsZW1lbnRzIGRv
IG5vdCBoYXZlIGEgdmFsaWQgbV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lLCBtZWFuaW5n
IHRoYXQgd2UgYWx3YXlzIHVwbG9hZCB0aGUgbGF0ZXN0IGNvbnRlbnQgZnJvbSBkaXNrLgogICAg
IFN0cmluZyBtX2dlbmVyYXRlZEZpbGVuYW1lOwogICAgIGJvb2wgbV9zaG91bGRHZW5lcmF0ZUZp
bGU7CiAgICAgYm9vbCBtX293bnNHZW5lcmF0ZWRGaWxlOwpAQCAtMTE3LDcgKzExMiw2IEBAIGlu
bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9ybURhdGFFbGVtZW50JiBhLCBjb25zdCBGb3Jt
RGF0YUVsZW1lbnQmIGIpCiAgICAgcmV0dXJuICEoYSA9PSBiKTsKIH0KIAotCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBFbmNvZGVyPgogdm9pZCBGb3JtRGF0YUVsZW1lbnQ6OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAogewpAQCAtMjA0LDYgKzE5OCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgUmVmPEZvcm1EYXRhPiBjcmVhdGUoY29uc3Qgdm9pZCosIHNpemVfdCk7
CiAgICAgc3RhdGljIFJlZjxGb3JtRGF0YT4gY3JlYXRlKGNvbnN0IENTdHJpbmcmKTsKICAgICBz
dGF0aWMgUmVmPEZvcm1EYXRhPiBjcmVhdGUoY29uc3QgVmVjdG9yPGNoYXI+Jik7CisgICAgc3Rh
dGljIFJlZjxGb3JtRGF0YT4gY3JlYXRlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOwogICAgIHN0
YXRpYyBSZWY8Rm9ybURhdGE+IGNyZWF0ZShjb25zdCBET01Gb3JtRGF0YSYsIEVuY29kaW5nVHlw
ZSA9IEZvcm1VUkxFbmNvZGVkKTsKICAgICBzdGF0aWMgUmVmPEZvcm1EYXRhPiBjcmVhdGVNdWx0
aVBhcnQoY29uc3QgRE9NRm9ybURhdGEmLCBEb2N1bWVudCopOwogICAgIFdFQkNPUkVfRVhQT1JU
IH5Gb3JtRGF0YSgpOwpAQCAtMzAwLDYgKzI5NSw3IEBAIHZvaWQgRm9ybURhdGE6OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgbV9ib3VuZGFyeTsKICAgICBl
bmNvZGVyIDw8IG1fZWxlbWVudHM7CiAgICAgZW5jb2RlciA8PCBtX2lkZW50aWZpZXI7CisgICAg
Ly8gRklYTUU6IERvZXMgbm90IGVuY29kZSBtX2NvbnRhaW5zUGFzc3dvcmREYXRhLiBXaHkgaXMg
dGhhdCBPSz8KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmNwcAppbmRleCA2ODg4
YjJjY2ViNGI5N2NjYTk1NTE4Mzc1MDRlNTFjZjY2MzEwODhhLi40NTZkOGQ3NzQ1MjBkYWMzMWYy
ZDc4NWFhMDFmY2JjOTA3YTUwMGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9Gb3JtRGF0YUJ1aWxkZXIuY3BwCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJp
Z2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMp
IDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMp
IDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogICAgICAgICAgIChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9w
LmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICoKQEAgLTM2LDcgKzM2
LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBIZWxwZXIgZnVuY3Rpb25zCituYW1l
c3BhY2UgRm9ybURhdGFCdWlsZGVyIHsKKwogc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZChWZWN0
b3I8Y2hhcj4mIGJ1ZmZlciwgY2hhciBzdHJpbmcpCiB7CiAgICAgYnVmZmVyLmFwcGVuZChzdHJp
bmcpOwpAQCAtNTIsMTQgKzUzLDIwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmQoVmVjdG9y
PGNoYXI+JiBidWZmZXIsIGNvbnN0IENTdHJpbmcmIHN0cmluZykKICAgICBidWZmZXIuYXBwZW5k
KHN0cmluZy5kYXRhKCksIHN0cmluZy5sZW5ndGgoKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGFwcGVu
ZFF1b3RlZFN0cmluZyhWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3QgQ1N0cmluZyYgc3RyaW5n
KQorc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZChWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiBzdHJpbmcpCit7CisgICAgYnVmZmVyLmFwcGVuZFZlY3RvcihzdHJp
bmcpOworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRRdW90ZWQoVmVjdG9yPGNoYXI+JiBidWZmZXIs
IGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc3RyaW5nKQogewogICAgIC8vIEFwcGVuZCBhIHN0cmlu
ZyBhcyBhIHF1b3RlZCB2YWx1ZSwgZXNjYXBpbmcgcXVvdGVzIGFuZCBsaW5lIGJyZWFrcy4KICAg
ICAvLyBGSVhNRTogSXMgaXQgY29ycmVjdCB0byB1c2UgcGVyY2VudCBlc2NhcGluZyBoZXJlPyBP
dGhlciBicm93c2VycyBkbyBub3QgZW5jb2RlIHRoZXNlIGNoYXJhY3RlcnMgeWV0LAogICAgIC8v
IHNvIHdlIHNob3VsZCB0ZXN0IHBvcHVsYXIgc2VydmVycyB0byBmaW5kIG91dCBpZiB0aGVyZSBp
cyBhbiBlbmNvZGluZyBmb3JtIHRoZXkgY2FuIGhhbmRsZS4KLSAgICBzaXplX3QgbGVuZ3RoID0g
c3RyaW5nLmxlbmd0aCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgY2hhciBjID0gc3RyaW5nLmRhdGEoKVtpXTsKKyAgICAvLyBGSVhNRTogSWYg
d2UgcmVhbGx5IHdhbnQgdG8gdXNlIHBlcmNlbnQgZXNjYXBpbmcgaW4gYSBnb29kIHdheSwgd2Ug
bmVlZCB0byBlc2NhcGUgdGhlICIlIiBjaGFyYWN0ZXIgdG9vIQorICAgIHNpemVfdCBzaXplID0g
c3RyaW5nLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewor
ICAgICAgICBjaGFyIGMgPSBzdHJpbmdbaV07CiAgICAgICAgIHN3aXRjaCAoYykgewogICAgICAg
ICBjYXNlIDB4QToKICAgICAgICAgICAgIGFwcGVuZChidWZmZXIsICIlMEEiKTsKQEAgLTc2LDcg
KzgzLDM0IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFF1b3RlZFN0cmluZyhWZWN0b3I8Y2hhcj4mIGJ1
ZmZlciwgY29uc3QgQ1N0cmluZyYgc3RyaW5nKQogICAgIH0KIH0KIAotVmVjdG9yPGNoYXI+IEZv
cm1EYXRhQnVpbGRlcjo6Z2VuZXJhdGVVbmlxdWVCb3VuZGFyeVN0cmluZygpCitzdGF0aWMgdm9p
ZCBhcHBlbmRFbmNvZGVkQXNGb3JtRGF0YShWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3QgdWlu
dDhfdCogc3RyaW5nLCBzaXplX3QgbGVuZ3RoKQoreworICAgIC8vIFNhbWUgc2FmZSBjaGFyYWN0
ZXJzIGFzIE5ldHNjYXBlIGZvciBjb21wYXRpYmlsaXR5LgorICAgIHN0YXRpYyBjb25zdCBjaGFy
IHNhZmVDaGFyYWN0ZXJzW10gPSAiLS5fKiI7CisKKyAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9U
Ui9odG1sNC9pbnRlcmFjdC9mb3Jtcy5odG1sI2gtMTcuMTMuNC4xCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBhdXRvIGMgPSBzdHJpbmdbaV07CisK
KyAgICAgICAgaWYgKGlzQVNDSUlBbHBoYW51bWVyaWMoYykgfHwgc3RyY2hyKHNhZmVDaGFyYWN0
ZXJzLCBjKSkKKyAgICAgICAgICAgIGFwcGVuZChidWZmZXIsIGMpOworICAgICAgICBlbHNlIGlm
IChjID09ICcgJykKKyAgICAgICAgICAgIGFwcGVuZChidWZmZXIsICcrJyk7CisgICAgICAgIGVs
c2UgaWYgKGMgPT0gJ1xuJyB8fCAoYyA9PSAnXHInICYmIChpICsgMSA+PSBsZW5ndGggfHwgc3Ry
aW5nW2kgKyAxXSAhPSAnXG4nKSkpCisgICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCAiJTBEJTBB
Iik7CisgICAgICAgIGVsc2UgaWYgKGMgIT0gJ1xyJykgeworICAgICAgICAgICAgYXBwZW5kKGJ1
ZmZlciwgJyUnKTsKKyAgICAgICAgICAgIGFwcGVuZEJ5dGVBc0hleChjLCBidWZmZXIpOworICAg
ICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBhcHBlbmRFbmNvZGVkQXNGb3JtRGF0YShW
ZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBzdHJpbmcpCit7Cisg
ICAgYXBwZW5kRW5jb2RlZEFzRm9ybURhdGEoYnVmZmVyLCBzdHJpbmcuZGF0YSgpLCBzdHJpbmcu
c2l6ZSgpKTsKK30KKworVmVjdG9yPGNoYXI+IGdlbmVyYXRlVW5pcXVlQm91bmRhcnlTdHJpbmco
KQogewogICAgIFZlY3RvcjxjaGFyPiBib3VuZGFyeTsKIApAQCAtMTE3LDE4ICsxNTEsMTggQEAg
VmVjdG9yPGNoYXI+IEZvcm1EYXRhQnVpbGRlcjo6Z2VuZXJhdGVVbmlxdWVCb3VuZGFyeVN0cmlu
ZygpCiAgICAgcmV0dXJuIGJvdW5kYXJ5OwogfQogCi12b2lkIEZvcm1EYXRhQnVpbGRlcjo6YmVn
aW5NdWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNvbnN0IENTdHJpbmcmIGJv
dW5kYXJ5LCBjb25zdCBDU3RyaW5nJiBuYW1lKQordm9pZCBiZWdpbk11bHRpUGFydEhlYWRlcihW
ZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3QgQ1N0cmluZyYgYm91bmRhcnksIGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgbmFtZSkKIHsKICAgICBhZGRCb3VuZGFyeVRvTXVsdGlQYXJ0SGVhZGVyKGJ1
ZmZlciwgYm91bmRhcnkpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgbG9zZXMgZGF0YSBpcnJldmVy
c2libHkgaWYgdGhlIGlucHV0IG5hbWUgaW5jbHVkZXMgY2hhcmFjdGVycyB5b3UgY2FuJ3QgZW5j
b2RlCiAgICAgLy8gaW4gdGhlIHdlYnNpdGUncyBjaGFyYWN0ZXIgc2V0LgogICAgIGFwcGVuZChi
dWZmZXIsICJDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9XCIiKTsKLSAgICBh
cHBlbmRRdW90ZWRTdHJpbmcoYnVmZmVyLCBuYW1lKTsKKyAgICBhcHBlbmRRdW90ZWQoYnVmZmVy
LCBuYW1lKTsKICAgICBhcHBlbmQoYnVmZmVyLCAnIicpOwogfQogCi12b2lkIEZvcm1EYXRhQnVp
bGRlcjo6YWRkQm91bmRhcnlUb011bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwg
Y29uc3QgQ1N0cmluZyYgYm91bmRhcnksIGJvb2wgaXNMYXN0Qm91bmRhcnkpCit2b2lkIGFkZEJv
dW5kYXJ5VG9NdWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNvbnN0IENTdHJp
bmcmIGJvdW5kYXJ5LCBib29sIGlzTGFzdEJvdW5kYXJ5KQogewogICAgIGFwcGVuZChidWZmZXIs
ICItLSIpOwogICAgIGFwcGVuZChidWZmZXIsIGJvdW5kYXJ5KTsKQEAgLTEzOSwyOCArMTczLDI4
IEBAIHZvaWQgRm9ybURhdGFCdWlsZGVyOjphZGRCb3VuZGFyeVRvTXVsdGlQYXJ0SGVhZGVyKFZl
Y3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCBDCiAgICAgYXBwZW5kKGJ1ZmZlciwgIlxyXG4iKTsK
IH0KIAotdm9pZCBGb3JtRGF0YUJ1aWxkZXI6OmFkZEZpbGVuYW1lVG9NdWx0aVBhcnRIZWFkZXIo
VmVjdG9yPGNoYXI+JiBidWZmZXIsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIGNvbnN0
IFN0cmluZyYgZmlsZW5hbWUpCit2b2lkIGFkZEZpbGVuYW1lVG9NdWx0aVBhcnRIZWFkZXIoVmVj
dG9yPGNoYXI+JiBidWZmZXIsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIGNvbnN0IFN0
cmluZyYgZmlsZW5hbWUpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgbG9zZXMgZGF0YSBpcnJldmVy
c2libHkgaWYgdGhlIGZpbGVuYW1lIGluY2x1ZGVzIGNoYXJhY3RlcnMgeW91IGNhbid0IGVuY29k
ZQogICAgIC8vIGluIHRoZSB3ZWJzaXRlJ3MgY2hhcmFjdGVyIHNldC4KICAgICBhcHBlbmQoYnVm
ZmVyLCAiOyBmaWxlbmFtZT1cIiIpOwotICAgIGFwcGVuZFF1b3RlZFN0cmluZyhidWZmZXIsIGVu
Y29kaW5nLmVuY29kZShmaWxlbmFtZSwgUXVlc3Rpb25NYXJrc0ZvclVuZW5jb2RhYmxlcykpOwor
ICAgIGFwcGVuZFF1b3RlZChidWZmZXIsIGVuY29kaW5nLmVuY29kZShmaWxlbmFtZSwgUXVlc3Rp
b25NYXJrc0ZvclVuZW5jb2RhYmxlcykpOwogICAgIGFwcGVuZChidWZmZXIsICciJyk7CiB9CiAK
LXZvaWQgRm9ybURhdGFCdWlsZGVyOjphZGRDb250ZW50VHlwZVRvTXVsdGlQYXJ0SGVhZGVyKFZl
Y3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCBDU3RyaW5nJiBtaW1lVHlwZSkKK3ZvaWQgYWRkQ29u
dGVudFR5cGVUb011bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3QgQ1N0
cmluZyYgbWltZVR5cGUpCiB7CiAgICAgQVNTRVJUKEJsb2I6OmlzTm9ybWFsaXplZENvbnRlbnRU
eXBlKG1pbWVUeXBlKSk7CiAgICAgYXBwZW5kKGJ1ZmZlciwgIlxyXG5Db250ZW50LVR5cGU6ICIp
OwogICAgIGFwcGVuZChidWZmZXIsIG1pbWVUeXBlKTsKIH0KIAotdm9pZCBGb3JtRGF0YUJ1aWxk
ZXI6OmZpbmlzaE11bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3ZvaWQgZmlu
aXNoTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYgYnVmZmVyKQogewogICAgIGFwcGVuZChi
dWZmZXIsICJcclxuXHJcbiIpOwogfQogCi12b2lkIEZvcm1EYXRhQnVpbGRlcjo6YWRkS2V5VmFs
dWVQYWlyQXNGb3JtRGF0YShWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3QgQ1N0cmluZyYga2V5
LCBjb25zdCBDU3RyaW5nJiB2YWx1ZSwgRm9ybURhdGE6OkVuY29kaW5nVHlwZSBlbmNvZGluZ1R5
cGUpCit2b2lkIGFkZEtleVZhbHVlUGFpckFzRm9ybURhdGEoVmVjdG9yPGNoYXI+JiBidWZmZXIs
IGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhbHVl
LCBGb3JtRGF0YTo6RW5jb2RpbmdUeXBlIGVuY29kaW5nVHlwZSkKIHsKICAgICBpZiAoZW5jb2Rp
bmdUeXBlID09IEZvcm1EYXRhOjpUZXh0UGxhaW4pIHsKICAgICAgICAgaWYgKCFidWZmZXIuaXNF
bXB0eSgpKQpAQCAtMTcxLDMzICsyMDUsMTcgQEAgdm9pZCBGb3JtRGF0YUJ1aWxkZXI6OmFkZEtl
eVZhbHVlUGFpckFzRm9ybURhdGEoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNvbnN0IENTdHIKICAg
ICB9IGVsc2UgewogICAgICAgICBpZiAoIWJ1ZmZlci5pc0VtcHR5KCkpCiAgICAgICAgICAgICBh
cHBlbmQoYnVmZmVyLCAnJicpOwotICAgICAgICBlbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKGJ1ZmZl
ciwga2V5KTsKKyAgICAgICAgYXBwZW5kRW5jb2RlZEFzRm9ybURhdGEoYnVmZmVyLCBrZXkpOwog
ICAgICAgICBhcHBlbmQoYnVmZmVyLCAnPScpOwotICAgICAgICBlbmNvZGVTdHJpbmdBc0Zvcm1E
YXRhKGJ1ZmZlciwgdmFsdWUpOworICAgICAgICBhcHBlbmRFbmNvZGVkQXNGb3JtRGF0YShidWZm
ZXIsIHZhbHVlKTsKICAgICB9CiB9CiAKLXZvaWQgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVTdHJp
bmdBc0Zvcm1EYXRhKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCBDU3RyaW5nJiBzdHJpbmcp
Cit2b2lkIGVuY29kZVN0cmluZ0FzRm9ybURhdGEoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNvbnN0
IENTdHJpbmcmIHN0cmluZykKIHsKLSAgICAvLyBTYW1lIHNhZmUgY2hhcmFjdGVycyBhcyBOZXRz
Y2FwZSBmb3IgY29tcGF0aWJpbGl0eS4KLSAgICBzdGF0aWMgY29uc3QgY2hhciBzYWZlQ2hhcmFj
dGVyc1tdID0gIi0uXyoiOwotCi0gICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvaW50
ZXJhY3QvZm9ybXMuaHRtbCNoLTE3LjEzLjQuMQotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmlu
Zy5sZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gc3RyaW5nLmRhdGEoKVtpXTsKKyAgICBhcHBlbmRF
bmNvZGVkQXNGb3JtRGF0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KHN0cmluZy5kYXRhKCkpLCBzdHJpbmcubGVuZ3RoKCkpOworfQogCi0gICAgICAgIGlmIChpc0FT
Q0lJQWxwaGFudW1lcmljKGMpIHx8IHN0cmNocihzYWZlQ2hhcmFjdGVycywgYykpCi0gICAgICAg
ICAgICBhcHBlbmQoYnVmZmVyLCBjKTsKLSAgICAgICAgZWxzZSBpZiAoYyA9PSAnICcpCi0gICAg
ICAgICAgICBhcHBlbmQoYnVmZmVyLCAnKycpOwotICAgICAgICBlbHNlIGlmIChjID09ICdcbicg
fHwgKGMgPT0gJ1xyJyAmJiAoaSArIDEgPj0gbGVuZ3RoIHx8IHN0cmluZy5kYXRhKClbaSArIDFd
ICE9ICdcbicpKSkKLSAgICAgICAgICAgIGFwcGVuZChidWZmZXIsICIlMEQlMEEiKTsKLSAgICAg
ICAgZWxzZSBpZiAoYyAhPSAnXHInKSB7Ci0gICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCAnJScp
OwotICAgICAgICAgICAgYXBwZW5kQnl0ZUFzSGV4KGMsIGJ1ZmZlcik7Ci0gICAgICAgIH0KLSAg
ICB9CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Rm9ybURhdGFCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1E
YXRhQnVpbGRlci5oCmluZGV4IDdhZGVjYWE2NmE3YWQwZTdjOGMxY2E2ZDM3ZjEyZWRkOTk2ZTll
NmIuLmQwZTA3YmNkMDhmZDNkNGMxYjljYmE1MjVhMTNjMTM5NmIyYTgyYWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YUJ1aWxkZXIuaApAQCAtMSw1
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTE4LDggKzE5LDcgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBGb3JtRGF0YUJ1
aWxkZXJfaAotI2RlZmluZSBGb3JtRGF0YUJ1aWxkZXJfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlICJGb3JtRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC0yOCwyNSArMjgs
MjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBUZXh0RW5jb2Rpbmc7CiAKLWNsYXNz
IEZvcm1EYXRhQnVpbGRlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRm9ybURhdGFCdWls
ZGVyKTsKLXB1YmxpYzoKLSAgICAvLyBIZWxwZXIgZnVuY3Rpb25zIHVzZWQgYnkgSFRNTEZvcm1F
bGVtZW50IGZvciBtdWx0aS1wYXJ0IGZvcm0gZGF0YQotICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4g
Z2VuZXJhdGVVbmlxdWVCb3VuZGFyeVN0cmluZygpOwotICAgIHN0YXRpYyB2b2lkIGJlZ2luTXVs
dGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYsIGNvbnN0IENTdHJpbmcmIGJvdW5kYXJ5LCBjb25z
dCBDU3RyaW5nJiBuYW1lKTsKLSAgICBzdGF0aWMgdm9pZCBhZGRCb3VuZGFyeVRvTXVsdGlQYXJ0
SGVhZGVyKFZlY3RvcjxjaGFyPiYsIGNvbnN0IENTdHJpbmcmIGJvdW5kYXJ5LCBib29sIGlzTGFz
dEJvdW5kYXJ5ID0gZmFsc2UpOwotICAgIHN0YXRpYyB2b2lkIGFkZEZpbGVuYW1lVG9NdWx0aVBh
cnRIZWFkZXIoVmVjdG9yPGNoYXI+JiwgY29uc3QgVGV4dEVuY29kaW5nJiwgY29uc3QgU3RyaW5n
JiBmaWxlbmFtZSk7Ci0gICAgc3RhdGljIHZvaWQgYWRkQ29udGVudFR5cGVUb011bHRpUGFydEhl
YWRlcihWZWN0b3I8Y2hhcj4mLCBjb25zdCBDU3RyaW5nJiBtaW1lVHlwZSk7Ci0gICAgc3RhdGlj
IHZvaWQgZmluaXNoTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYpOwotCi0gICAgLy8gSGVs
cGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IEhUTUxGb3JtRWxlbWVudCBmb3Igbm9uIG11bHRpLXBhcnQg
Zm9ybSBkYXRhCi0gICAgc3RhdGljIHZvaWQgYWRkS2V5VmFsdWVQYWlyQXNGb3JtRGF0YShWZWN0
b3I8Y2hhcj4mLCBjb25zdCBDU3RyaW5nJiBrZXksIGNvbnN0IENTdHJpbmcmIHZhbHVlLCBGb3Jt
RGF0YTo6RW5jb2RpbmdUeXBlID0gRm9ybURhdGE6OkZvcm1VUkxFbmNvZGVkKTsKLSAgICBzdGF0
aWMgdm9pZCBlbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKFZlY3RvcjxjaGFyPiYsIGNvbnN0IENTdHJp
bmcmKTsKLQotcHJpdmF0ZToKLSAgICBGb3JtRGF0YUJ1aWxkZXIoKSB7fQotfTsKK25hbWVzcGFj
ZSBGb3JtRGF0YUJ1aWxkZXIgeworCisvLyBIZWxwZXIgZnVuY3Rpb25zIHVzZWQgYnkgSFRNTEZv
cm1FbGVtZW50IGZvciBtdWx0aS1wYXJ0IGZvcm0gZGF0YS4KK1ZlY3RvcjxjaGFyPiBnZW5lcmF0
ZVVuaXF1ZUJvdW5kYXJ5U3RyaW5nKCk7Cit2b2lkIGJlZ2luTXVsdGlQYXJ0SGVhZGVyKFZlY3Rv
cjxjaGFyPiYsIGNvbnN0IENTdHJpbmcmIGJvdW5kYXJ5LCBjb25zdCBWZWN0b3I8dWludDhfdD4m
IG5hbWUpOwordm9pZCBhZGRCb3VuZGFyeVRvTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYs
IGNvbnN0IENTdHJpbmcmIGJvdW5kYXJ5LCBib29sIGlzTGFzdEJvdW5kYXJ5ID0gZmFsc2UpOwor
dm9pZCBhZGRGaWxlbmFtZVRvTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYsIGNvbnN0IFRl
eHRFbmNvZGluZyYsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpOwordm9pZCBhZGRDb250ZW50VHlw
ZVRvTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYsIGNvbnN0IENTdHJpbmcmIG1pbWVUeXBl
KTsKK3ZvaWQgZmluaXNoTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYpOworCisvLyBIZWxw
ZXIgZnVuY3Rpb25zIHVzZWQgYnkgSFRNTEZvcm1FbGVtZW50IGZvciBub24tbXVsdGktcGFydCBm
b3JtIGRhdGEuCit2b2lkIGFkZEtleVZhbHVlUGFpckFzRm9ybURhdGEoVmVjdG9yPGNoYXI+Jiwg
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFsdWUs
IEZvcm1EYXRhOjpFbmNvZGluZ1R5cGUgPSBGb3JtRGF0YTo6Rm9ybVVSTEVuY29kZWQpOwordm9p
ZCBlbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKFZlY3RvcjxjaGFyPiYsIGNvbnN0IENTdHJpbmcmKTsK
IAogfQogCi0jZW5kaWYKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L0RlY29kZUVzY2FwZVNlcXVlbmNlcy5oCmluZGV4IGI4YzgzOWQ4MDNjNGY5NzM3YWFjM2ZmZGNk
YTkxMDk5NGEwMDQ3MDQuLjdmMjZlOGNjY2UxZjNkOGE2Y2JiMDk4MWI2MzE1Y2FmOGQ2NDAyYjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2Vx
dWVuY2VzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVT
ZXF1ZW5jZXMuaApAQCAtMjcsOCArMjcsNyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZu
ZGVmIERlY29kZUVzY2FwZVNlcXVlbmNlc19oCi0jZGVmaW5lIERlY29kZUVzY2FwZVNlcXVlbmNl
c19oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUg
PHd0Zi9BU0NJSUNUeXBlLmg+CkBAIC0xNTUsMTEgKzE1NCwxMSBAQCBTdHJpbmcgZGVjb2RlRXNj
YXBlU2VxdWVuY2VzKFN0cmluZ1ZpZXcgc3RyaW5nLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29k
aW5nKQogICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAotaW5saW5lIFZlY3Rvcjxj
aGFyPiBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXNBc0RhdGEoU3RyaW5nVmlldyBzdHJpbmcsIGNv
bnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCitpbmxpbmUgVmVjdG9yPHVpbnQ4X3Q+IGRlY29k
ZVVSTEVzY2FwZVNlcXVlbmNlc0FzRGF0YShTdHJpbmdWaWV3IHN0cmluZywgY29uc3QgVGV4dEVu
Y29kaW5nJiBlbmNvZGluZykKIHsKICAgICBBU1NFUlQoZW5jb2RpbmcuaXNWYWxpZCgpKTsKIAot
ICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdDsKICAg
ICBzaXplX3QgZGVjb2RlZFBvc2l0aW9uID0gMDsKICAgICBzaXplX3Qgc2VhcmNoUG9zaXRpb24g
PSAwOwogICAgIHdoaWxlICh0cnVlKSB7CkBAIC0xNzMsMTAgKzE3Miw5IEBAIGlubGluZSBWZWN0
b3I8Y2hhcj4gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzQXNEYXRhKFN0cmluZ1ZpZXcgc3RyaW5n
LCBjb25zdCBUZXh0CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KKwogICAgICAgICAvLyBTdHJpbmdzIGFyZSBlbmNvZGVkIGFzIHJlcXVlc3RlZC4K
LSAgICAgICAgYXV0byBzdHJpbmdGcmFnbWVudCA9IHN0cmluZy5zdWJzdHJpbmcoZGVjb2RlZFBv
c2l0aW9uLCBlbmNvZGVkUnVuUG9zaXRpb24gLSBkZWNvZGVkUG9zaXRpb24pOwotICAgICAgICBh
dXRvIGVuY29kZWRTdHJpbmdGcmFnbWVudCA9IGVuY29kaW5nLmVuY29kZShzdHJpbmdGcmFnbWVu
dCwgVVJMRW5jb2RlZEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKLSAgICAgICAgcmVzdWx0LmFw
cGVuZChlbmNvZGVkU3RyaW5nRnJhZ21lbnQuZGF0YSgpLCBlbmNvZGVkU3RyaW5nRnJhZ21lbnQu
bGVuZ3RoKCkpOworICAgICAgICByZXN1bHQuYXBwZW5kVmVjdG9yKGVuY29kaW5nLmVuY29kZShz
dHJpbmcuc3Vic3RyaW5nKGRlY29kZWRQb3NpdGlvbiwgZW5jb2RlZFJ1blBvc2l0aW9uIC0gZGVj
b2RlZFBvc2l0aW9uKSwgVVJMRW5jb2RlZEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKSk7CiAKICAg
ICAgICAgaWYgKGVuY29kZWRSdW5Qb3NpdGlvbiA9PSBub3RGb3VuZCkKICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CkBAIC0xOTIsNCArMTkwLDMgQEAgaW5saW5lIFZlY3RvcjxjaGFyPiBkZWNv
ZGVVUkxFc2NhcGVTZXF1ZW5jZXNBc0RhdGEoU3RyaW5nVmlldyBzdHJpbmcsIGNvbnN0IFRleHQK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRGVjb2RlRXNjYXBlU2VxdWVu
Y2VzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVj
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjLmNwcAppbmRleCA2
M2FlZjQ3ZDczNTQ0MjYyM2NmNDZlYzRmM2MxMmJmNWQwMWZhYWIzLi5lMjQwN2RlZWU0NDE5OTM5
NmUxZTMwYTY5NzE0MmIzNjBmYTZmNTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRDb2RlYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0Q29kZWMuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKQEAgLTI3LDI5ICsyNywyNCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlRleHRDb2RlYy5oIgogCi0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPGFycmF5PgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVRleHRDb2RlYzo6flRleHRDb2RlYygpID0gZGVmYXVsdDsKLQotaW50IFRleHRD
b2RlYzo6Z2V0VW5lbmNvZGFibGVSZXBsYWNlbWVudCh1bnNpZ25lZCBjb2RlUG9pbnQsIFVuZW5j
b2RhYmxlSGFuZGxpbmcgaGFuZGxpbmcsIFVuZW5jb2RhYmxlUmVwbGFjZW1lbnRBcnJheSByZXBs
YWNlbWVudCkKK2ludCBUZXh0Q29kZWM6OmdldFVuZW5jb2RhYmxlUmVwbGFjZW1lbnQoVUNoYXIz
MiBjb2RlUG9pbnQsIFVuZW5jb2RhYmxlSGFuZGxpbmcgaGFuZGxpbmcsIFVuZW5jb2RhYmxlUmVw
bGFjZW1lbnRBcnJheSYgcmVwbGFjZW1lbnQpCiB7CiAgICAgc3dpdGNoIChoYW5kbGluZykgewot
ICAgICAgICBjYXNlIFF1ZXN0aW9uTWFya3NGb3JVbmVuY29kYWJsZXM6Ci0gICAgICAgICAgICBy
ZXBsYWNlbWVudFswXSA9ICc/JzsKLSAgICAgICAgICAgIHJlcGxhY2VtZW50WzFdID0gMDsKLSAg
ICAgICAgICAgIHJldHVybiAxOwotICAgICAgICBjYXNlIEVudGl0aWVzRm9yVW5lbmNvZGFibGVz
OgotICAgICAgICAgICAgc25wcmludGYocmVwbGFjZW1lbnQsIHNpemVvZihVbmVuY29kYWJsZVJl
cGxhY2VtZW50QXJyYXkpLCAiJiMldTsiLCBjb2RlUG9pbnQpOwotICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGludD4oc3RybGVuKHJlcGxhY2VtZW50KSk7Ci0gICAgICAgIGNhc2UgVVJM
RW5jb2RlZEVudGl0aWVzRm9yVW5lbmNvZGFibGVzOgotICAgICAgICAgICAgc25wcmludGYocmVw
bGFjZW1lbnQsIHNpemVvZihVbmVuY29kYWJsZVJlcGxhY2VtZW50QXJyYXkpLCAiJSUyNiUlMjMl
dSUlM0IiLCBjb2RlUG9pbnQpOwotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
c3RybGVuKHJlcGxhY2VtZW50KSk7CisgICAgY2FzZSBRdWVzdGlvbk1hcmtzRm9yVW5lbmNvZGFi
bGVzOgorICAgICAgICByZXBsYWNlbWVudC5kYXRhKClbMF0gPSAnPyc7CisgICAgICAgIHJlcGxh
Y2VtZW50LmRhdGEoKVsxXSA9IDA7CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2UgRW50aXRp
ZXNGb3JVbmVuY29kYWJsZXM6CisgICAgICAgIHJldHVybiBzbnByaW50ZihyZXBsYWNlbWVudC5k
YXRhKCksIHNpemVvZihVbmVuY29kYWJsZVJlcGxhY2VtZW50QXJyYXkpLCAiJiMldTsiLCBjb2Rl
UG9pbnQpOworICAgIGNhc2UgVVJMRW5jb2RlZEVudGl0aWVzRm9yVW5lbmNvZGFibGVzOgorICAg
ICAgICByZXR1cm4gc25wcmludGYocmVwbGFjZW1lbnQuZGF0YSgpLCBzaXplb2YoVW5lbmNvZGFi
bGVSZXBsYWNlbWVudEFycmF5KSwgIiUlMjYlJTIzJXUlJTNCIiwgY29kZVBvaW50KTsKICAgICB9
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmVwbGFjZW1lbnRbMF0gPSAwOworICAg
IHJlcGxhY2VtZW50LmRhdGEoKVswXSA9IDA7CiAgICAgcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlYy5oCmluZGV4IGYzMGNkMTI2MTVlNTNlMDk1YTU5
MmYzOWZmOGU5Yzc3Y2FhM2FhN2YuLmM4NWIwMjBmMDNkNmQxMjQwMjE2ODZiOTc1YTdjNGZjNWU5
ZGEzZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVj
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuaApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1
cnlha292IDxhcEBueXBvcC5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yNCw2MSArMjQsMzgg
QEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgVGV4dENvZGVjX2gKLSNkZWZpbmUg
VGV4dENvZGVjX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUg
PHBhbC90ZXh0L1VuZW5jb2RhYmxlSGFuZGxpbmcuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgVGV4dEVuY29kaW5nOwog
Ci0gICAgLy8gU3BlY2lmaWVzIHdoYXQgd2lsbCBoYXBwZW4gd2hlbiBhIGNoYXJhY3RlciBpcyBl
bmNvdW50ZXJlZCB0aGF0IGlzCi0gICAgLy8gbm90IGVuY29kYWJsZSBpbiB0aGUgY2hhcmFjdGVy
IHNldC4KLSAgICBlbnVtIFVuZW5jb2RhYmxlSGFuZGxpbmcgewotICAgICAgICAvLyBTdWJzdGl0
dXRlcyB0aGUgcmVwbGFjZW1lbnQgY2hhcmFjdGVyICI/Ii4KLSAgICAgICAgUXVlc3Rpb25NYXJr
c0ZvclVuZW5jb2RhYmxlcywKK2NsYXNzIFRleHRFbmNvZGluZzsKIAotICAgICAgICAvLyBFbmNv
ZGVzIHRoZSBjaGFyYWN0ZXIgYXMgYW4gWE1MIGVudGl0eS4gRm9yIGV4YW1wbGUsIFUrMDZERQot
ICAgICAgICAvLyB3b3VsZCBiZSAiJiMxNzU4OyIgKDB4NkRFID0gMTc1OCBpbiBvY3RhbCkuCi0g
ICAgICAgIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzLAordXNpbmcgVW5lbmNvZGFibGVSZXBsYWNl
bWVudEFycmF5ID0gc3RkOjphcnJheTxjaGFyLCAzMj47CiAKLSAgICAgICAgLy8gRW5jb2RlcyB0
aGUgY2hhcmFjdGVyIGFzIGVuIGVudGl0eSBhcyBhYm92ZSwgYnV0IGVzY2FwZWQKLSAgICAgICAg
Ly8gbm9uLWFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLiBUaGlzIGlzIHVzZWQgaW4gVVJMcy4KLSAg
ICAgICAgLy8gRm9yIGV4YW1wbGUsIFUrNkRFIHdvdWxkIGJlICIlMjYlMjMxNzU4JTNCIi4KLSAg
ICAgICAgVVJMRW5jb2RlZEVudGl0aWVzRm9yVW5lbmNvZGFibGVzCi0gICAgfTsKK2NsYXNzIFRl
eHRDb2RlYyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGV4dENvZGVjKTsgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgVGV4dENvZGVjKCkgPSBkZWZhdWx0OworICAg
IHZpcnR1YWwgflRleHRDb2RlYygpID0gZGVmYXVsdDsKIAotICAgIHR5cGVkZWYgY2hhciBVbmVu
Y29kYWJsZVJlcGxhY2VtZW50QXJyYXlbMzJdOworICAgIHZpcnR1YWwgU3RyaW5nIGRlY29kZShj
b25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwg
Ym9vbCYgc2F3RXJyb3IpID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiBlbmNvZGUo
U3RyaW5nVmlldywgVW5lbmNvZGFibGVIYW5kbGluZykgPSAwOwogCi0gICAgY2xhc3MgVGV4dENv
ZGVjIHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGV4dENvZGVjKTsgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICBUZXh0Q29kZWMoKSB7IH0KLSAg
ICAgICAgdmlydHVhbCB+VGV4dENvZGVjKCk7CisgICAgLy8gRmlsbHMgYSBudWxsLXRlcm1pbmF0
ZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbgorICAgIC8vIHVuZW5jb2RhYmxl
IGNoYXJhY3RlciBpbnRvIHRoZSBnaXZlbiByZXBsYWNlbWVudCBidWZmZXIuCisgICAgLy8gVGhl
IGxlbmd0aCBvZiB0aGUgc3RyaW5nIChub3QgaW5jbHVkaW5nIHRoZSBudWxsKSB3aWxsIGJlIHJl
dHVybmVkLgorICAgIHN0YXRpYyBpbnQgZ2V0VW5lbmNvZGFibGVSZXBsYWNlbWVudChVQ2hhcjMy
LCBVbmVuY29kYWJsZUhhbmRsaW5nLCBVbmVuY29kYWJsZVJlcGxhY2VtZW50QXJyYXkmKTsKK307
CiAKLSAgICAgICAgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiBzdHIsIHNpemVfdCBsZW5ndGgs
IGJvb2wgZmx1c2ggPSBmYWxzZSkKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbCBpZ25vcmVk
OwotICAgICAgICAgICAgcmV0dXJuIGRlY29kZShzdHIsIGxlbmd0aCwgZmx1c2gsIGZhbHNlLCBp
Z25vcmVkKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdmlydHVhbCBTdHJpbmcgZGVj
b2RlKGNvbnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVy
cm9yLCBib29sJiBzYXdFcnJvcikgPSAwOwotICAgICAgICB2aXJ0dWFsIENTdHJpbmcgZW5jb2Rl
KGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZykgPSAwOwor
dXNpbmcgRW5jb2RpbmdOYW1lUmVnaXN0cmFyID0gdm9pZCAoKikoY29uc3QgY2hhciogYWxpYXMs
IGNvbnN0IGNoYXIqIG5hbWUpOwogCi0gICAgICAgIC8vIEZpbGxzIGEgbnVsbC10ZXJtaW5hdGVk
IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4KLSAgICAgICAgLy8gdW5lbmNvZGFi
bGUgY2hhcmFjdGVyIGludG8gdGhlIGdpdmVuIHJlcGxhY2VtZW50IGJ1ZmZlci4gCi0gICAgICAg
IC8vIFRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyAobm90IGluY2x1ZGluZyB0aGUgbnVsbCkgd2ls
bCBiZSByZXR1cm5lZC4KLSAgICAgICAgc3RhdGljIGludCBnZXRVbmVuY29kYWJsZVJlcGxhY2Vt
ZW50KHVuc2lnbmVkIGNvZGVQb2ludCwgVW5lbmNvZGFibGVIYW5kbGluZywgVW5lbmNvZGFibGVS
ZXBsYWNlbWVudEFycmF5KTsKLSAgICB9OwotCi0gICAgdHlwZWRlZiB2b2lkICgqRW5jb2RpbmdO
YW1lUmVnaXN0cmFyKShjb25zdCBjaGFyKiBhbGlhcywgY29uc3QgY2hhciogbmFtZSk7Ci0KLSAg
ICB0eXBlZGVmIHN0ZDo6dW5pcXVlX3B0cjxUZXh0Q29kZWM+ICgqTmV3VGV4dENvZGVjRnVuY3Rp
b24pKGNvbnN0IFRleHRFbmNvZGluZyYsIGNvbnN0IHZvaWQqIGFkZGl0aW9uYWxEYXRhKTsKLSAg
ICB0eXBlZGVmIHZvaWQgKCpUZXh0Q29kZWNSZWdpc3RyYXIpKGNvbnN0IGNoYXIqIG5hbWUsIE5l
d1RleHRDb2RlY0Z1bmN0aW9uLCBjb25zdCB2b2lkKiBhZGRpdGlvbmFsRGF0YSk7Cit1c2luZyBO
ZXdUZXh0Q29kZWNGdW5jdGlvbiA9IFdURjo6RnVuY3Rpb248c3RkOjp1bmlxdWVfcHRyPFRleHRD
b2RlYz4oKT47Cit1c2luZyBUZXh0Q29kZWNSZWdpc3RyYXIgPSB2b2lkICgqKShjb25zdCBjaGFy
KiBuYW1lLCBOZXdUZXh0Q29kZWNGdW5jdGlvbiYmKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCi0jZW5kaWYgLy8gVGV4dENvZGVjX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dENvZGVjSUNVLmNwcAppbmRleCA2ZTI3MzY2OTljOGFhNjkzMzdkYWM3ZDMzOTExMDk0
NDVmMDYyM2Y1Li5iNGE5YzYyMTM5ZTM1MWYxNDc3YjBiY2M4YzY5OWIyYTFjOTc1NGYyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCwgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApA
QCAtMzAsMTAgKzMwLDggQEAKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRlICJU
ZXh0RW5jb2RpbmdSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlRocmVhZEdsb2JhbERhdGEuaCIKLSNp
bmNsdWRlIDx1bmljb2RlL3VjbnYuaD4KKyNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDx1bmlj
b2RlL3VjbnZfY2IuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0
Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
QEAgLTQzLDIzICs0MSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY29uc3Qgc2l6ZV90IENv
bnZlcnNpb25CdWZmZXJTaXplID0gMTYzODQ7CiAKLUlDVUNvbnZlcnRlcldyYXBwZXI6On5JQ1VD
b252ZXJ0ZXJXcmFwcGVyKCkKLXsKLSAgICBpZiAoY29udmVydGVyKQotICAgICAgICB1Y252X2Ns
b3NlKGNvbnZlcnRlcik7Ci19Ci0KLXN0YXRpYyBVQ29udmVydGVyKiYgY2FjaGVkQ29udmVydGVy
SUNVKCkKLXsKLSAgICByZXR1cm4gdGhyZWFkR2xvYmFsRGF0YSgpLmNhY2hlZENvbnZlcnRlcklD
VSgpLmNvbnZlcnRlcjsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFRleHRDb2RlYz4gVGV4dENvZGVj
SUNVOjpjcmVhdGUoY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgY29uc3Qgdm9pZCogYWRk
aXRpb25hbERhdGEpCi17Ci0gICAgLy8gTmFtZSBzdHJpbmdzIGFyZSBwZXJzaXN0ZW50bHkga2Vw
dCBpbiBUZXh0RW5jb2RpbmdSZWdpc3RyeSBtYXBzLCBzbyB0aGV5IGFyZSBuZXZlciBkZWxldGVk
LgotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFRleHRDb2RlY0lDVT4oZW5jb2RpbmcubmFt
ZSgpLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYWRkaXRpb25hbERhdGEpKTsKLX0KLQogI2Rl
ZmluZSBERUNMQVJFX0FMSUFTRVMoZW5jb2RpbmcsIC4uLikgXAogICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBjb25zdCBlbmNvZGluZyMjX2FsaWFzZXNbXSB7IF9fVkFfQVJHU19fIH0KIApAQCAtMTY5
LDExNCArMTUwLDExNSBAQCB2b2lkIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJFbmNvZGluZ05hbWVz
KEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIpCiB2b2lkIFRleHRDb2RlY0lDVTo6cmVn
aXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKIHsKICAgICBmb3IgKGF1
dG8mIGVuY29kaW5nTmFtZSA6IGVuY29kaW5nTmFtZXMpIHsKKyAgICAgICAgY29uc3QgY2hhciog
bmFtZSA9IGVuY29kaW5nTmFtZS5uYW1lOworCiAgICAgICAgIC8vIFRoZXNlIGVuY29kaW5ncyBj
dXJyZW50bHkgZG9uJ3QgaGF2ZSBzdGFuZGFyZCBuYW1lcywgc28gd2UgbmVlZCB0byByZWdpc3Rl
ciBlbmNvZGVycyBtYW51YWxseS4KICAgICAgICAgLy8gaHR0cDovL2RlbW8uaWN1LXByb2plY3Qu
b3JnL2ljdS1iaW4vY29udmV4cAotICAgICAgICBpZiAoIXN0cmNtcChlbmNvZGluZ05hbWUubmFt
ZSwgIndpbmRvd3MtODc0IikpIHsKLSAgICAgICAgICAgIHJlZ2lzdHJhcihlbmNvZGluZ05hbWUu
bmFtZSwgY3JlYXRlLCAid2luZG93cy04NzQtMjAwMCIpOworICAgICAgICBpZiAoIXN0cmNtcChu
YW1lLCAid2luZG93cy04NzQiKSkgeworICAgICAgICAgICAgcmVnaXN0cmFyKG5hbWUsIFtuYW1l
XSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjSUNV
PihuYW1lLCAid2luZG93cy04NzQtMjAwMCIpOworICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoIXN0cmNtcChlbmNvZGluZ05hbWUu
bmFtZSwgIndpbmRvd3MtOTQ5IikpIHsKLSAgICAgICAgICAgIHJlZ2lzdHJhcihlbmNvZGluZ05h
bWUubmFtZSwgY3JlYXRlLCAid2luZG93cy05NDktMjAwMCIpOworICAgICAgICBpZiAoIXN0cmNt
cChuYW1lLCAid2luZG93cy05NDkiKSkgeworICAgICAgICAgICAgcmVnaXN0cmFyKG5hbWUsIFtu
YW1lXSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVj
SUNVPihuYW1lLCAid2luZG93cy05NDktMjAwMCIpOworICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoIXN0cmNtcChlbmNvZGluZ05h
bWUubmFtZSwgIngtbWFjLWN5cmlsbGljIikpIHsKLSAgICAgICAgICAgIHJlZ2lzdHJhcihlbmNv
ZGluZ05hbWUubmFtZSwgY3JlYXRlLCAibWFjb3MtN18zLTEwLjIiKTsKKyAgICAgICAgaWYgKCFz
dHJjbXAobmFtZSwgIngtbWFjLWN5cmlsbGljIikpIHsKKyAgICAgICAgICAgIHJlZ2lzdHJhcihu
YW1lLCBbbmFtZV0geworICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFRl
eHRDb2RlY0lDVT4obmFtZSwgIm1hY29zLTdfMy0xMC4yIik7CisgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmICghc3RyY21wKGVuY29k
aW5nTmFtZS5uYW1lLCAieC1tYWMtZ3JlZWsiKSkgewotICAgICAgICAgICAgcmVnaXN0cmFyKGVu
Y29kaW5nTmFtZS5uYW1lLCBjcmVhdGUsICJtYWNvcy02XzItMTAuNCIpOworICAgICAgICBpZiAo
IXN0cmNtcChuYW1lLCAieC1tYWMtZ3JlZWsiKSkgeworICAgICAgICAgICAgcmVnaXN0cmFyKG5h
bWUsIFtuYW1lXSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4
dENvZGVjSUNVPihuYW1lLCAibWFjb3MtNl8yLTEwLjQiKTsKKyAgICAgICAgICAgIH0pOwogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFzdHJjbXAoZW5jb2Rp
bmdOYW1lLm5hbWUsICJ4LW1hYy1jZW50cmFsZXVycm9tYW4iKSkgewotICAgICAgICAgICAgcmVn
aXN0cmFyKGVuY29kaW5nTmFtZS5uYW1lLCBjcmVhdGUsICJtYWNvcy0yOS0xMC4yIik7CisgICAg
ICAgIGlmICghc3RyY21wKG5hbWUsICJ4LW1hYy1jZW50cmFsZXVycm9tYW4iKSkgeworICAgICAg
ICAgICAgcmVnaXN0cmFyKG5hbWUsIFtuYW1lXSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjSUNVPihuYW1lLCAibWFjb3MtMjktMTAuMiIpOworICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBp
ZiAoIXN0cmNtcChlbmNvZGluZ05hbWUubmFtZSwgIngtbWFjLXR1cmtpc2giKSkgewotICAgICAg
ICAgICAgcmVnaXN0cmFyKGVuY29kaW5nTmFtZS5uYW1lLCBjcmVhdGUsICJtYWNvcy0zNS0xMC4y
Iik7CisgICAgICAgIGlmICghc3RyY21wKG5hbWUsICJ4LW1hYy10dXJraXNoIikpIHsKKyAgICAg
ICAgICAgIHJlZ2lzdHJhcihuYW1lLCBbbmFtZV0geworICAgICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPFRleHRDb2RlY0lDVT4obmFtZSwgIm1hY29zLTM1LTEwLjIiKTsKKyAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKCFzdHJjbXAoZW5jb2RpbmdOYW1lLm5hbWUsICJFVUMtS1IiKSkgewotICAgICAgICAgICAg
cmVnaXN0cmFyKGVuY29kaW5nTmFtZS5uYW1lLCBjcmVhdGUsICJ3aW5kb3dzLTk0OSIpOworICAg
ICAgICBpZiAoIXN0cmNtcChuYW1lLCAiRVVDLUtSIikpIHsKKyAgICAgICAgICAgIHJlZ2lzdHJh
cihuYW1lLCBbbmFtZV0geworICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVl
PFRleHRDb2RlY0lDVT4obmFtZSwgIndpbmRvd3MtOTQ5Iik7CisgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKICAgICAgICAgVUVycm9yQ29kZSBlcnJv
ciA9IFVfWkVST19FUlJPUjsKLSAgICAgICAgY29uc3QgY2hhciogY2Fub25pY2FsQ29udmVydGVy
TmFtZSA9IHVjbnZfZ2V0Q2Fub25pY2FsTmFtZShlbmNvZGluZ05hbWUubmFtZSwgIklBTkEiLCAm
ZXJyb3IpOworICAgICAgICBjb25zdCBjaGFyKiBjYW5vbmljYWxDb252ZXJ0ZXJOYW1lID0gdWNu
dl9nZXRDYW5vbmljYWxOYW1lKG5hbWUsICJJQU5BIiwgJmVycm9yKTsKICAgICAgICAgQVNTRVJU
KFVfU1VDQ0VTUyhlcnJvcikpOwotICAgICAgICByZWdpc3RyYXIoZW5jb2RpbmdOYW1lLm5hbWUs
IGNyZWF0ZSwgY2Fub25pY2FsQ29udmVydGVyTmFtZSk7CisgICAgICAgIHJlZ2lzdHJhcihuYW1l
LCBbbmFtZSwgY2Fub25pY2FsQ29udmVydGVyTmFtZV0geworICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjSUNVPihuYW1lLCBjYW5vbmljYWxDb252ZXJ0ZXJOYW1l
KTsKKyAgICAgICAgfSk7CiAgICAgfQogfQogCiBUZXh0Q29kZWNJQ1U6OlRleHRDb2RlY0lDVShj
b25zdCBjaGFyKiBlbmNvZGluZywgY29uc3QgY2hhciogY2Fub25pY2FsQ29udmVydGVyTmFtZSkK
ICAgICA6IG1fZW5jb2RpbmdOYW1lKGVuY29kaW5nKQogICAgICwgbV9jYW5vbmljYWxDb252ZXJ0
ZXJOYW1lKGNhbm9uaWNhbENvbnZlcnRlck5hbWUpCi0gICAgLCBtX2NvbnZlcnRlcklDVSgwKQot
ICAgICwgbV9uZWVkc0dCS0ZhbGxiYWNrcyhmYWxzZSkKIHsKIH0KIAogVGV4dENvZGVjSUNVOjp+
VGV4dENvZGVjSUNVKCkKIHsKLSAgICByZWxlYXNlSUNVQ29udmVydGVyKCk7Ci19Ci0KLXZvaWQg
VGV4dENvZGVjSUNVOjpyZWxlYXNlSUNVQ29udmVydGVyKCkgY29uc3QKLXsKLSAgICBpZiAobV9j
b252ZXJ0ZXJJQ1UpIHsKLSAgICAgICAgVUNvbnZlcnRlciomIGNhY2hlZENvbnZlcnRlciA9IGNh
Y2hlZENvbnZlcnRlcklDVSgpOwotICAgICAgICBpZiAoY2FjaGVkQ29udmVydGVyKQotICAgICAg
ICAgICAgdWNudl9jbG9zZShjYWNoZWRDb252ZXJ0ZXIpOwotICAgICAgICB1Y252X3Jlc2V0KG1f
Y29udmVydGVySUNVKTsKLSAgICAgICAgY2FjaGVkQ29udmVydGVyID0gbV9jb252ZXJ0ZXJJQ1U7
Ci0gICAgICAgIG1fY29udmVydGVySUNVID0gMDsKKyAgICBpZiAobV9jb252ZXJ0ZXIpIHsKKyAg
ICAgICAgdWNudl9yZXNldChtX2NvbnZlcnRlci5nZXQoKSk7CisgICAgICAgIHRocmVhZEdsb2Jh
bERhdGEoKS5jYWNoZWRDb252ZXJ0ZXJJQ1UoKS5jb252ZXJ0ZXIgPSBXVEZNb3ZlKG1fY29udmVy
dGVyKTsKICAgICB9CiB9CiAKIHZvaWQgVGV4dENvZGVjSUNVOjpjcmVhdGVJQ1VDb252ZXJ0ZXIo
KSBjb25zdAogewotICAgIEFTU0VSVCghbV9jb252ZXJ0ZXJJQ1UpOwotCi0gICAgVUVycm9yQ29k
ZSBlcnI7CisgICAgQVNTRVJUKCFtX2NvbnZlcnRlcik7CiAKICAgICBtX25lZWRzR0JLRmFsbGJh
Y2tzID0gIXN0cmNtcChtX2VuY29kaW5nTmFtZSwgIkdCSyIpOwogCi0gICAgVUNvbnZlcnRlciom
IGNhY2hlZENvbnZlcnRlciA9IGNhY2hlZENvbnZlcnRlcklDVSgpOworICAgIGF1dG8mIGNhY2hl
ZENvbnZlcnRlciA9IHRocmVhZEdsb2JhbERhdGEoKS5jYWNoZWRDb252ZXJ0ZXJJQ1UoKS5jb252
ZXJ0ZXI7CiAgICAgaWYgKGNhY2hlZENvbnZlcnRlcikgewotICAgICAgICBlcnIgPSBVX1pFUk9f
RVJST1I7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGNhY2hlZENvbnZlcnRlck5hbWUgPSB1Y252X2dl
dE5hbWUoY2FjaGVkQ29udmVydGVyLCAmZXJyKTsKLSAgICAgICAgaWYgKFVfU1VDQ0VTUyhlcnIp
ICYmICFzdHJjbXAobV9jYW5vbmljYWxDb252ZXJ0ZXJOYW1lLCBjYWNoZWRDb252ZXJ0ZXJOYW1l
KSkgewotICAgICAgICAgICAgbV9jb252ZXJ0ZXJJQ1UgPSBjYWNoZWRDb252ZXJ0ZXI7Ci0gICAg
ICAgICAgICBjYWNoZWRDb252ZXJ0ZXIgPSAwOworICAgICAgICBVRXJyb3JDb2RlIGVycm9yID0g
VV9aRVJPX0VSUk9SOworICAgICAgICBjb25zdCBjaGFyKiBjYWNoZWRDb252ZXJ0ZXJOYW1lID0g
dWNudl9nZXROYW1lKGNhY2hlZENvbnZlcnRlci5nZXQoKSwgJmVycm9yKTsKKyAgICAgICAgaWYg
KFVfU1VDQ0VTUyhlcnJvcikgJiYgIXN0cmNtcChtX2Nhbm9uaWNhbENvbnZlcnRlck5hbWUsIGNh
Y2hlZENvbnZlcnRlck5hbWUpKSB7CisgICAgICAgICAgICBtX2NvbnZlcnRlciA9IFdURk1vdmUo
Y2FjaGVkQ29udmVydGVyKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0K
IAotICAgIGVyciA9IFVfWkVST19FUlJPUjsKLSAgICBtX2NvbnZlcnRlcklDVSA9IHVjbnZfb3Bl
bihtX2Nhbm9uaWNhbENvbnZlcnRlck5hbWUsICZlcnIpOwotICAgIEFTU0VSVChVX1NVQ0NFU1Mo
ZXJyKSk7Ci0gICAgaWYgKG1fY29udmVydGVySUNVKQotICAgICAgICB1Y252X3NldEZhbGxiYWNr
KG1fY29udmVydGVySUNVLCBUUlVFKTsKKyAgICBVRXJyb3JDb2RlIGVycm9yID0gVV9aRVJPX0VS
Uk9SOworICAgIG1fY29udmVydGVyID0gSUNVQ29udmVydGVyUHRyIHsgdWNudl9vcGVuKG1fY2Fu
b25pY2FsQ29udmVydGVyTmFtZSwgJmVycm9yKSwgdWNudl9jbG9zZSB9OworICAgIGlmIChtX2Nv
bnZlcnRlcikKKyAgICAgICAgdWNudl9zZXRGYWxsYmFjayhtX2NvbnZlcnRlci5nZXQoKSwgVFJV
RSk7CiB9CiAKLWludCBUZXh0Q29kZWNJQ1U6OmRlY29kZVRvQnVmZmVyKFVDaGFyKiB0YXJnZXQs
IFVDaGFyKiB0YXJnZXRMaW1pdCwgY29uc3QgY2hhciomIHNvdXJjZSwgY29uc3QgY2hhciogc291
cmNlTGltaXQsIGludDMyX3QqIG9mZnNldHMsIGJvb2wgZmx1c2gsIFVFcnJvckNvZGUmIGVycikK
K2ludCBUZXh0Q29kZWNJQ1U6OmRlY29kZVRvQnVmZmVyKFVDaGFyKiB0YXJnZXQsIFVDaGFyKiB0
YXJnZXRMaW1pdCwgY29uc3QgY2hhciomIHNvdXJjZSwgY29uc3QgY2hhciogc291cmNlTGltaXQs
IGludDMyX3QqIG9mZnNldHMsIGJvb2wgZmx1c2gsIFVFcnJvckNvZGUmIGVycm9yKQogewogICAg
IFVDaGFyKiB0YXJnZXRTdGFydCA9IHRhcmdldDsKLSAgICBlcnIgPSBVX1pFUk9fRVJST1I7Ci0g
ICAgdWNudl90b1VuaWNvZGUobV9jb252ZXJ0ZXJJQ1UsICZ0YXJnZXQsIHRhcmdldExpbWl0LCAm
c291cmNlLCBzb3VyY2VMaW1pdCwgb2Zmc2V0cywgZmx1c2gsICZlcnIpOworICAgIGVycm9yID0g
VV9aRVJPX0VSUk9SOworICAgIHVjbnZfdG9Vbmljb2RlKG1fY29udmVydGVyLmdldCgpLCAmdGFy
Z2V0LCB0YXJnZXRMaW1pdCwgJnNvdXJjZSwgc291cmNlTGltaXQsIG9mZnNldHMsIGZsdXNoLCAm
ZXJyb3IpOwogICAgIHJldHVybiB0YXJnZXQgLSB0YXJnZXRTdGFydDsKIH0KIAogY2xhc3MgRXJy
b3JDYWxsYmFja1NldHRlciB7CiBwdWJsaWM6Ci0gICAgRXJyb3JDYWxsYmFja1NldHRlcihVQ29u
dmVydGVyKiBjb252ZXJ0ZXIsIGJvb2wgc3RvcE9uRXJyb3IpCisgICAgRXJyb3JDYWxsYmFja1Nl
dHRlcihVQ29udmVydGVyJiBjb252ZXJ0ZXIsIGJvb2wgc3RvcE9uRXJyb3IpCiAgICAgICAgIDog
bV9jb252ZXJ0ZXIoY29udmVydGVyKQogICAgICAgICAsIG1fc2hvdWxkU3RvcE9uRW5jb2RpbmdF
cnJvcnMoc3RvcE9uRXJyb3IpCiAgICAgewogICAgICAgICBpZiAobV9zaG91bGRTdG9wT25FbmNv
ZGluZ0Vycm9ycykgewogICAgICAgICAgICAgVUVycm9yQ29kZSBlcnIgPSBVX1pFUk9fRVJST1I7
Ci0gICAgICAgICAgICB1Y252X3NldFRvVUNhbGxCYWNrKG1fY29udmVydGVyLCBVQ05WX1RPX1Vf
Q0FMTEJBQ0tfU1VCU1RJVFVURSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDTlZfU1VC
X1NUT1BfT05fSUxMRUdBTCwgJm1fc2F2ZWRBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAmbV9zYXZlZENvbnRleHQsICZlcnIpOworICAgICAgICAgICAgdWNudl9zZXRUb1VDYWxs
QmFjaygmbV9jb252ZXJ0ZXIsIFVDTlZfVE9fVV9DQUxMQkFDS19TVUJTVElUVVRFLCBVQ05WX1NV
Ql9TVE9QX09OX0lMTEVHQUwsICZtX3NhdmVkQWN0aW9uLCAmbV9zYXZlZENvbnRleHQsICZlcnIp
OwogICAgICAgICAgICAgQVNTRVJUKGVyciA9PSBVX1pFUk9fRVJST1IpOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMjg2LDkgKzI2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIFVFcnJvckNvZGUg
ZXJyID0gVV9aRVJPX0VSUk9SOwogICAgICAgICAgICAgY29uc3Qgdm9pZCogb2xkQ29udGV4dDsK
ICAgICAgICAgICAgIFVDb252ZXJ0ZXJUb1VDYWxsYmFjayBvbGRBY3Rpb247Ci0gICAgICAgICAg
ICB1Y252X3NldFRvVUNhbGxCYWNrKG1fY29udmVydGVyLCBtX3NhdmVkQWN0aW9uLAotICAgICAg
ICAgICAgICAgICAgIG1fc2F2ZWRDb250ZXh0LCAmb2xkQWN0aW9uLAotICAgICAgICAgICAgICAg
ICAgICZvbGRDb250ZXh0LCAmZXJyKTsKKyAgICAgICAgICAgIHVjbnZfc2V0VG9VQ2FsbEJhY2so
Jm1fY29udmVydGVyLCBtX3NhdmVkQWN0aW9uLCBtX3NhdmVkQ29udGV4dCwgJm9sZEFjdGlvbiwg
Jm9sZENvbnRleHQsICZlcnIpOwogICAgICAgICAgICAgQVNTRVJUKG9sZEFjdGlvbiA9PSBVQ05W
X1RPX1VfQ0FMTEJBQ0tfU1VCU1RJVFVURSk7CiAgICAgICAgICAgICBBU1NFUlQoIXN0cmNtcChz
dGF0aWNfY2FzdDxjb25zdCBjaGFyKj4ob2xkQ29udGV4dCksIFVDTlZfU1VCX1NUT1BfT05fSUxM
RUdBTCkpOwogICAgICAgICAgICAgQVNTRVJUKGVyciA9PSBVX1pFUk9fRVJST1IpOwpAQCAtMjk2
LDcgKzI3Niw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVUNvbnZlcnRlciog
bV9jb252ZXJ0ZXI7CisgICAgVUNvbnZlcnRlciYgbV9jb252ZXJ0ZXI7CiAgICAgYm9vbCBtX3No
b3VsZFN0b3BPbkVuY29kaW5nRXJyb3JzOwogICAgIGNvbnN0IHZvaWQqIG1fc2F2ZWRDb250ZXh0
OwogICAgIFVDb252ZXJ0ZXJUb1VDYWxsYmFjayBtX3NhdmVkQWN0aW9uOwpAQCAtMzA1LDE2ICsy
ODUsMTYgQEAgcHJpdmF0ZToKIFN0cmluZyBUZXh0Q29kZWNJQ1U6OmRlY29kZShjb25zdCBjaGFy
KiBieXRlcywgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9v
bCYgc2F3RXJyb3IpCiB7CiAgICAgLy8gR2V0IGEgY29udmVydGVyIGZvciB0aGUgcGFzc2VkLWlu
IGVuY29kaW5nLgotICAgIGlmICghbV9jb252ZXJ0ZXJJQ1UpIHsKKyAgICBpZiAoIW1fY29udmVy
dGVyKSB7CiAgICAgICAgIGNyZWF0ZUlDVUNvbnZlcnRlcigpOwotICAgICAgICBBU1NFUlQobV9j
b252ZXJ0ZXJJQ1UpOwotICAgICAgICBpZiAoIW1fY29udmVydGVySUNVKSB7CisgICAgICAgIGlm
ICghbV9jb252ZXJ0ZXIpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiZXJyb3IgY3JlYXRpbmcg
SUNVIGVuY29kZXIgZXZlbiB0aG91Z2ggZW5jb2Rpbmcgd2FzIGluIHRhYmxlIik7Ci0gICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgICAgICBzYXdFcnJvciA9IHRydWU7CisgICAg
ICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIEVycm9yQ2Fs
bGJhY2tTZXR0ZXIgY2FsbGJhY2tTZXR0ZXIobV9jb252ZXJ0ZXJJQ1UsIHN0b3BPbkVycm9yKTsK
KyAgICBFcnJvckNhbGxiYWNrU2V0dGVyIGNhbGxiYWNrU2V0dGVyKCptX2NvbnZlcnRlciwgc3Rv
cE9uRXJyb3IpOwogCiAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAKQEAgLTM0MCwxNyArMzIw
LDE1IEBAIFN0cmluZyBUZXh0Q29kZWNJQ1U6OmRlY29kZShjb25zdCBjaGFyKiBieXRlcywgc2l6
ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzCiAKICAgICBTdHJpbmcgcmVzdWx0U3RyaW5n
ID0gcmVzdWx0LnRvU3RyaW5nKCk7CiAKLSAgICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwMTQ+CiAgICAgLy8gU2ltcGxpZmllZCBDaGluZXNlIHBhZ2VzIHVz
ZSB0aGUgY29kZSBBM0EwIHRvIG1lYW4gImZ1bGwtd2lkdGggc3BhY2UiLCBidXQgSUNVIGRlY29k
ZXMgaXQgYXMgVStFNUU1LgotICAgIC8vIEZJWE1FOiBzdHJjYXNlY21wIGlzIGxvY2FsZSBzZW5z
aXRpdmUsIHdlIHNob3VsZCBub3QgYmUgdXNpbmcgaXQuCi0gICAgaWYgKHN0cmNtcChtX2VuY29k
aW5nTmFtZSwgIkdCSyIpID09IDAgfHwgc3RyY2FzZWNtcChtX2VuY29kaW5nTmFtZSwgImdiMTgw
MzAiKSA9PSAwKQorICAgIGlmICghc3RyY21wKG1fZW5jb2RpbmdOYW1lLCAiR0JLIikgfHwgZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobV9lbmNvZGluZ05hbWUsICJnYjE4MDMwIikpCiAg
ICAgICAgIHJlc3VsdFN0cmluZy5yZXBsYWNlKDB4RTVFNSwgaWRlb2dyYXBoaWNTcGFjZSk7CiAK
ICAgICByZXR1cm4gcmVzdWx0U3RyaW5nOwogfQogCiAvLyBXZSBuZWVkIHRvIGFwcGx5IHRoZXNl
IGZhbGxiYWNrcyBvdXJzZWx2ZXMgYXMgdGhleSBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQg
YnkgSUNVIGFuZAotLy8gdGhleSB3ZXJlIHByb3ZpZGVkIGJ5IHRoZSBvbGQgVEVDIGVuY29kaW5n
IHBhdGguIE5lZWRlZCB0byBmaXggPHJkYXI6Ly9wcm9ibGVtLzQ3MDg2ODk+LgorLy8gdGhleSB3
ZXJlIHByb3ZpZGVkIGJ5IHRoZSBNYWMgVEVDIGVuY29kaW5nIHBhdGguIE5lZWRlZCB0byBmaXgg
PHJkYXI6Ly9wcm9ibGVtLzQ3MDg2ODk+Lgogc3RhdGljIFVDaGFyIGZhbGxiYWNrRm9yR0JLKFVD
aGFyMzIgY2hhcmFjdGVyKQogewogICAgIHN3aXRjaCAoY2hhcmFjdGVyKSB7CkBAIC0zNjksMTMw
ICszNDcsMTIyIEBAIHN0YXRpYyBVQ2hhciBmYWxsYmFja0ZvckdCSyhVQ2hhcjMyIGNoYXJhY3Rl
cikKIC8vIEludmFsaWQgY2hhcmFjdGVyIGhhbmRsZXIgd2hlbiB3cml0aW5nIGVzY2FwZWQgZW50
aXRpZXMgZm9yIHVucmVwcmVzZW50YWJsZQogLy8gY2hhcmFjdGVycy4gU2VlIHRoZSBkZWNsYXJh
dGlvbiBvZiBUZXh0Q29kZWM6OmVuY29kZSBmb3IgbW9yZS4KIHN0YXRpYyB2b2lkIHVybEVzY2Fw
ZWRFbnRpdHlDYWxsYmFjayhjb25zdCB2b2lkKiBjb250ZXh0LCBVQ29udmVydGVyRnJvbVVuaWNv
ZGVBcmdzKiBmcm9tVUFyZ3MsIGNvbnN0IFVDaGFyKiBjb2RlVW5pdHMsIGludDMyX3QgbGVuZ3Ro
LAotICAgIFVDaGFyMzIgY29kZVBvaW50LCBVQ29udmVydGVyQ2FsbGJhY2tSZWFzb24gcmVhc29u
LCBVRXJyb3JDb2RlKiBlcnIpCisgICAgVUNoYXIzMiBjb2RlUG9pbnQsIFVDb252ZXJ0ZXJDYWxs
YmFja1JlYXNvbiByZWFzb24sIFVFcnJvckNvZGUqIGVycm9yKQogewogICAgIGlmIChyZWFzb24g
PT0gVUNOVl9VTkFTU0lHTkVEKSB7Ci0gICAgICAgICplcnIgPSBVX1pFUk9fRVJST1I7Ci0KKyAg
ICAgICAgKmVycm9yID0gVV9aRVJPX0VSUk9SOwogICAgICAgICBVbmVuY29kYWJsZVJlcGxhY2Vt
ZW50QXJyYXkgZW50aXR5OwogICAgICAgICBpbnQgZW50aXR5TGVuID0gVGV4dENvZGVjOjpnZXRV
bmVuY29kYWJsZVJlcGxhY2VtZW50KGNvZGVQb2ludCwgVVJMRW5jb2RlZEVudGl0aWVzRm9yVW5l
bmNvZGFibGVzLCBlbnRpdHkpOwotICAgICAgICB1Y252X2NiRnJvbVVXcml0ZUJ5dGVzKGZyb21V
QXJncywgZW50aXR5LCBlbnRpdHlMZW4sIDAsIGVycik7CisgICAgICAgIHVjbnZfY2JGcm9tVVdy
aXRlQnl0ZXMoZnJvbVVBcmdzLCBlbnRpdHkuZGF0YSgpLCBlbnRpdHlMZW4sIDAsIGVycm9yKTsK
ICAgICB9IGVsc2UKLSAgICAgICAgVUNOVl9GUk9NX1VfQ0FMTEJBQ0tfRVNDQVBFKGNvbnRleHQs
IGZyb21VQXJncywgY29kZVVuaXRzLCBsZW5ndGgsIGNvZGVQb2ludCwgcmVhc29uLCBlcnIpOwor
ICAgICAgICBVQ05WX0ZST01fVV9DQUxMQkFDS19FU0NBUEUoY29udGV4dCwgZnJvbVVBcmdzLCBj
b2RlVW5pdHMsIGxlbmd0aCwgY29kZVBvaW50LCByZWFzb24sIGVycm9yKTsKIH0KIAogLy8gU3Vi
c3RpdHV0ZXMgc3BlY2lhbCBHQksgY2hhcmFjdGVycywgZXNjYXBpbmcgYWxsIG90aGVyIHVuYXNz
aWduZWQgZW50aXRpZXMuCiBzdGF0aWMgdm9pZCBnYmtDYWxsYmFja0VzY2FwZShjb25zdCB2b2lk
KiBjb250ZXh0LCBVQ29udmVydGVyRnJvbVVuaWNvZGVBcmdzKiBmcm9tVUFyZ3MsIGNvbnN0IFVD
aGFyKiBjb2RlVW5pdHMsIGludDMyX3QgbGVuZ3RoLAotICAgIFVDaGFyMzIgY29kZVBvaW50LCBV
Q29udmVydGVyQ2FsbGJhY2tSZWFzb24gcmVhc29uLCBVRXJyb3JDb2RlKiBlcnIpIAorICAgIFVD
aGFyMzIgY29kZVBvaW50LCBVQ29udmVydGVyQ2FsbGJhY2tSZWFzb24gcmVhc29uLCBVRXJyb3JD
b2RlKiBlcnJvcikKIHsKICAgICBVQ2hhciBvdXRDaGFyOwogICAgIGlmIChyZWFzb24gPT0gVUNO
Vl9VTkFTU0lHTkVEICYmIChvdXRDaGFyID0gZmFsbGJhY2tGb3JHQksoY29kZVBvaW50KSkpIHsK
ICAgICAgICAgY29uc3QgVUNoYXIqIHNvdXJjZSA9ICZvdXRDaGFyOwotICAgICAgICAqZXJyID0g
VV9aRVJPX0VSUk9SOwotICAgICAgICB1Y252X2NiRnJvbVVXcml0ZVVDaGFycyhmcm9tVUFyZ3Ms
ICZzb3VyY2UsIHNvdXJjZSArIDEsIDAsIGVycik7CisgICAgICAgICplcnJvciA9IFVfWkVST19F
UlJPUjsKKyAgICAgICAgdWNudl9jYkZyb21VV3JpdGVVQ2hhcnMoZnJvbVVBcmdzLCAmc291cmNl
LCBzb3VyY2UgKyAxLCAwLCBlcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgVUNO
Vl9GUk9NX1VfQ0FMTEJBQ0tfRVNDQVBFKGNvbnRleHQsIGZyb21VQXJncywgY29kZVVuaXRzLCBs
ZW5ndGgsIGNvZGVQb2ludCwgcmVhc29uLCBlcnIpOworICAgIFVDTlZfRlJPTV9VX0NBTExCQUNL
X0VTQ0FQRShjb250ZXh0LCBmcm9tVUFyZ3MsIGNvZGVVbml0cywgbGVuZ3RoLCBjb2RlUG9pbnQs
IHJlYXNvbiwgZXJyb3IpOwogfQogCiAvLyBDb21iaW5lcyBib3RoIGdia1VybEVzY2FwZWRFbnRp
dHlDYWxsYmFjayBhbmQgR0JLIGNoYXJhY3RlciBzdWJzdGl0dXRpb24uCiBzdGF0aWMgdm9pZCBn
YmtVcmxFc2NhcGVkRW50aXR5Q2FsbGFjayhjb25zdCB2b2lkKiBjb250ZXh0LCBVQ29udmVydGVy
RnJvbVVuaWNvZGVBcmdzKiBmcm9tVUFyZ3MsIGNvbnN0IFVDaGFyKiBjb2RlVW5pdHMsIGludDMy
X3QgbGVuZ3RoLAotICAgIFVDaGFyMzIgY29kZVBvaW50LCBVQ29udmVydGVyQ2FsbGJhY2tSZWFz
b24gcmVhc29uLCBVRXJyb3JDb2RlKiBlcnIpIAorICAgIFVDaGFyMzIgY29kZVBvaW50LCBVQ29u
dmVydGVyQ2FsbGJhY2tSZWFzb24gcmVhc29uLCBVRXJyb3JDb2RlKiBlcnJvcikKIHsKICAgICBp
ZiAocmVhc29uID09IFVDTlZfVU5BU1NJR05FRCkgewogICAgICAgICBpZiAoVUNoYXIgb3V0Q2hh
ciA9IGZhbGxiYWNrRm9yR0JLKGNvZGVQb2ludCkpIHsKICAgICAgICAgICAgIGNvbnN0IFVDaGFy
KiBzb3VyY2UgPSAmb3V0Q2hhcjsKLSAgICAgICAgICAgICplcnIgPSBVX1pFUk9fRVJST1I7Ci0g
ICAgICAgICAgICB1Y252X2NiRnJvbVVXcml0ZVVDaGFycyhmcm9tVUFyZ3MsICZzb3VyY2UsIHNv
dXJjZSArIDEsIDAsIGVycik7CisgICAgICAgICAgICAqZXJyb3IgPSBVX1pFUk9fRVJST1I7Cisg
ICAgICAgICAgICB1Y252X2NiRnJvbVVXcml0ZVVDaGFycyhmcm9tVUFyZ3MsICZzb3VyY2UsIHNv
dXJjZSArIDEsIDAsIGVycm9yKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAg
ICAgICB1cmxFc2NhcGVkRW50aXR5Q2FsbGJhY2soY29udGV4dCwgZnJvbVVBcmdzLCBjb2RlVW5p
dHMsIGxlbmd0aCwgY29kZVBvaW50LCByZWFzb24sIGVycik7CisgICAgICAgIHVybEVzY2FwZWRF
bnRpdHlDYWxsYmFjayhjb250ZXh0LCBmcm9tVUFyZ3MsIGNvZGVVbml0cywgbGVuZ3RoLCBjb2Rl
UG9pbnQsIHJlYXNvbiwgZXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIFVDTlZf
RlJPTV9VX0NBTExCQUNLX0VTQ0FQRShjb250ZXh0LCBmcm9tVUFyZ3MsIGNvZGVVbml0cywgbGVu
Z3RoLCBjb2RlUG9pbnQsIHJlYXNvbiwgZXJyKTsKKyAgICBVQ05WX0ZST01fVV9DQUxMQkFDS19F
U0NBUEUoY29udGV4dCwgZnJvbVVBcmdzLCBjb2RlVW5pdHMsIGxlbmd0aCwgY29kZVBvaW50LCBy
ZWFzb24sIGVycm9yKTsKIH0KIAogc3RhdGljIHZvaWQgZ2JrQ2FsbGJhY2tTdWJzdGl0dXRlKGNv
bnN0IHZvaWQqIGNvbnRleHQsIFVDb252ZXJ0ZXJGcm9tVW5pY29kZUFyZ3MqIGZyb21VQXJncywg
Y29uc3QgVUNoYXIqIGNvZGVVbml0cywgaW50MzJfdCBsZW5ndGgsCi0gICAgVUNoYXIzMiBjb2Rl
UG9pbnQsIFVDb252ZXJ0ZXJDYWxsYmFja1JlYXNvbiByZWFzb24sIFVFcnJvckNvZGUqIGVycikg
CisgICAgVUNoYXIzMiBjb2RlUG9pbnQsIFVDb252ZXJ0ZXJDYWxsYmFja1JlYXNvbiByZWFzb24s
IFVFcnJvckNvZGUqIGVycm9yKQogewogICAgIFVDaGFyIG91dENoYXI7CiAgICAgaWYgKHJlYXNv
biA9PSBVQ05WX1VOQVNTSUdORUQgJiYgKG91dENoYXIgPSBmYWxsYmFja0ZvckdCSyhjb2RlUG9p
bnQpKSkgewogICAgICAgICBjb25zdCBVQ2hhciogc291cmNlID0gJm91dENoYXI7Ci0gICAgICAg
ICplcnIgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAgIHVjbnZfY2JGcm9tVVdyaXRlVUNoYXJzKGZy
b21VQXJncywgJnNvdXJjZSwgc291cmNlICsgMSwgMCwgZXJyKTsKKyAgICAgICAgKmVycm9yID0g
VV9aRVJPX0VSUk9SOworICAgICAgICB1Y252X2NiRnJvbVVXcml0ZVVDaGFycyhmcm9tVUFyZ3Ms
ICZzb3VyY2UsIHNvdXJjZSArIDEsIDAsIGVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBVQ05WX0ZST01fVV9DQUxMQkFDS19TVUJTVElUVVRFKGNvbnRleHQsIGZyb21VQXJncywg
Y29kZVVuaXRzLCBsZW5ndGgsIGNvZGVQb2ludCwgcmVhc29uLCBlcnIpOworICAgIFVDTlZfRlJP
TV9VX0NBTExCQUNLX1NVQlNUSVRVVEUoY29udGV4dCwgZnJvbVVBcmdzLCBjb2RlVW5pdHMsIGxl
bmd0aCwgY29kZVBvaW50LCByZWFzb24sIGVycm9yKTsKIH0KIAotQ1N0cmluZyBUZXh0Q29kZWNJ
Q1U6OmVuY29kZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVW5lbmNv
ZGFibGVIYW5kbGluZyBoYW5kbGluZykKK1ZlY3Rvcjx1aW50OF90PiBUZXh0Q29kZWNJQ1U6OmVu
Y29kZShTdHJpbmdWaWV3IHN0cmluZywgVW5lbmNvZGFibGVIYW5kbGluZyBoYW5kbGluZykKIHsK
LSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuICIiOworICAgIGlmIChzdHJpbmcuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4geyB9OwogCi0gICAgaWYgKCFtX2NvbnZlcnRlcklDVSkK
KyAgICBpZiAoIW1fY29udmVydGVyKSB7CiAgICAgICAgIGNyZWF0ZUlDVUNvbnZlcnRlcigpOwot
ICAgIGlmICghbV9jb252ZXJ0ZXJJQ1UpCi0gICAgICAgIHJldHVybiBDU3RyaW5nKCk7CisgICAg
ICAgIGlmICghbV9jb252ZXJ0ZXIpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgIH0KIAog
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc2VlIGlmIHRoZXJlIGlzICJmb3JjZSBBU0NJSSByYW5n
ZSIgbW9kZSBpbiBJQ1U7CiAgICAgLy8gdW50aWwgdGhlbiwgd2UgY2hhbmdlIHRoZSBiYWNrc2xh
c2ggaW50byBhIHllbiBzaWduLgogICAgIC8vIEVuY29kaW5nIHdpbGwgY2hhbmdlIHRoZSB5ZW4g
c2lnbiBiYWNrIGludG8gYSBiYWNrc2xhc2guCi0gICAgVmVjdG9yPFVDaGFyPiBjb3B5OwotICAg
IGNvbnN0IFVDaGFyKiBzb3VyY2UgPSBjaGFyYWN0ZXJzOworICAgIFN0cmluZyBjb3B5OwogICAg
IGlmIChzaG91bGRTaG93QmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbEluKG1fZW5jb2RpbmdOYW1l
KSkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgICAgICBpZiAoY2hhcmFjdGVyc1tpXSA9PSAnXFwnKSB7Ci0gICAgICAgICAgICAgICAgY29w
eS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgaiA9IDA7IGogPCBpOyArK2opCi0gICAgICAgICAgICAgICAgICAgIGNvcHkudW5jaGVj
a2VkQXBwZW5kKGNoYXJhY3RlcnNbal0pOwotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGog
PSBpOyBqIDwgbGVuZ3RoOyArK2opIHsKLSAgICAgICAgICAgICAgICAgICAgVUNoYXIgY2hhcmFj
dGVyID0gY2hhcmFjdGVyc1tqXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJhY3RlciA9
PSAnXFwnKQotICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyID0geWVuU2lnbjsKLSAg
ICAgICAgICAgICAgICAgICAgY29weS51bmNoZWNrZWRBcHBlbmQoY2hhcmFjdGVyKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc291cmNlID0gY29weS5kYXRhKCk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgY29w
eSA9IHN0cmluZy50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCk7CisgICAgICAgIGNvcHkucmVwbGFj
ZSgnXFwnLCB5ZW5TaWduKTsKKyAgICAgICAgc3RyaW5nID0gY29weTsKICAgICB9Ci0gICAgY29u
c3QgVUNoYXIqIHNvdXJjZUxpbWl0ID0gc291cmNlICsgbGVuZ3RoOwotCi0gICAgVUVycm9yQ29k
ZSBlcnIgPSBVX1pFUk9fRVJST1I7CiAKKyAgICBVRXJyb3JDb2RlIGVycm9yOwogICAgIHN3aXRj
aCAoaGFuZGxpbmcpIHsKLSAgICAgICAgY2FzZSBRdWVzdGlvbk1hcmtzRm9yVW5lbmNvZGFibGVz
OgotICAgICAgICAgICAgdWNudl9zZXRTdWJzdENoYXJzKG1fY29udmVydGVySUNVLCAiPyIsIDEs
ICZlcnIpOwotICAgICAgICAgICAgdWNudl9zZXRGcm9tVUNhbGxCYWNrKG1fY29udmVydGVySUNV
LCBtX25lZWRzR0JLRmFsbGJhY2tzID8gZ2JrQ2FsbGJhY2tTdWJzdGl0dXRlIDogVUNOVl9GUk9N
X1VfQ0FMTEJBQ0tfU1VCU1RJVFVURSwgMCwgMCwgMCwgJmVycik7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBFbnRpdGllc0ZvclVuZW5jb2RhYmxlczoKLSAgICAgICAgICAgIHVj
bnZfc2V0RnJvbVVDYWxsQmFjayhtX2NvbnZlcnRlcklDVSwgbV9uZWVkc0dCS0ZhbGxiYWNrcyA/
IGdia0NhbGxiYWNrRXNjYXBlIDogVUNOVl9GUk9NX1VfQ0FMTEJBQ0tfRVNDQVBFLCBVQ05WX0VT
Q0FQRV9YTUxfREVDLCAwLCAwLCAmZXJyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFVSTEVuY29kZWRFbnRpdGllc0ZvclVuZW5jb2RhYmxlczoKLSAgICAgICAgICAgIHVjbnZf
c2V0RnJvbVVDYWxsQmFjayhtX2NvbnZlcnRlcklDVSwgbV9uZWVkc0dCS0ZhbGxiYWNrcyA/IGdi
a1VybEVzY2FwZWRFbnRpdHlDYWxsYWNrIDogdXJsRXNjYXBlZEVudGl0eUNhbGxiYWNrLCAwLCAw
LCAwLCAmZXJyKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgUXVlc3Rpb25NYXJrc0Zv
clVuZW5jb2RhYmxlczoKKyAgICAgICAgZXJyb3IgPSBVX1pFUk9fRVJST1I7CisgICAgICAgIHVj
bnZfc2V0U3Vic3RDaGFycyhtX2NvbnZlcnRlci5nZXQoKSwgIj8iLCAxLCAmZXJyb3IpOworICAg
ICAgICBpZiAoVV9GQUlMVVJFKGVycm9yKSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAg
ICAgIGVycm9yID0gVV9aRVJPX0VSUk9SOworICAgICAgICB1Y252X3NldEZyb21VQ2FsbEJhY2so
bV9jb252ZXJ0ZXIuZ2V0KCksIG1fbmVlZHNHQktGYWxsYmFja3MgPyBnYmtDYWxsYmFja1N1YnN0
aXR1dGUgOiBVQ05WX0ZST01fVV9DQUxMQkFDS19TVUJTVElUVVRFLCAwLCAwLCAwLCAmZXJyb3Ip
OworICAgICAgICBpZiAoVV9GQUlMVVJFKGVycm9yKSkKKyAgICAgICAgICAgIHJldHVybiB7IH07
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRW50aXRpZXNGb3JVbmVuY29kYWJsZXM6CisgICAg
ICAgIGVycm9yID0gVV9aRVJPX0VSUk9SOworICAgICAgICB1Y252X3NldEZyb21VQ2FsbEJhY2so
bV9jb252ZXJ0ZXIuZ2V0KCksIG1fbmVlZHNHQktGYWxsYmFja3MgPyBnYmtDYWxsYmFja0VzY2Fw
ZSA6IFVDTlZfRlJPTV9VX0NBTExCQUNLX0VTQ0FQRSwgVUNOVl9FU0NBUEVfWE1MX0RFQywgMCwg
MCwgJmVycm9yKTsKKyAgICAgICAgaWYgKFVfRkFJTFVSRShlcnJvcikpCisgICAgICAgICAgICBy
ZXR1cm4geyB9OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFVSTEVuY29kZWRFbnRpdGllc0Zv
clVuZW5jb2RhYmxlczoKKyAgICAgICAgZXJyb3IgPSBVX1pFUk9fRVJST1I7CisgICAgICAgIHVj
bnZfc2V0RnJvbVVDYWxsQmFjayhtX2NvbnZlcnRlci5nZXQoKSwgbV9uZWVkc0dCS0ZhbGxiYWNr
cyA/IGdia1VybEVzY2FwZWRFbnRpdHlDYWxsYWNrIDogdXJsRXNjYXBlZEVudGl0eUNhbGxiYWNr
LCAwLCAwLCAwLCAmZXJyb3IpOworICAgICAgICBpZiAoVV9GQUlMVVJFKGVycm9yKSkKKyAgICAg
ICAgICAgIHJldHVybiB7IH07CisgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIEFTU0VSVChV
X1NVQ0NFU1MoZXJyKSk7Ci0gICAgaWYgKFVfRkFJTFVSRShlcnIpKQotICAgICAgICByZXR1cm4g
Q1N0cmluZygpOworICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gc3RyaW5nLnVwY29u
dmVydGVkQ2hhcmFjdGVycygpOworICAgIGF1dG8qIHNvdXJjZSA9IHVwY29udmVydGVkQ2hhcmFj
dGVycy5nZXQoKTsKKyAgICBhdXRvKiBzb3VyY2VMaW1pdCA9IHNvdXJjZSArIHN0cmluZy5sZW5n
dGgoKTsKIAotICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7Ci0gICAgc2l6ZV90IHNpemUgPSAwOwor
ICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7CiAgICAgZG8gewogICAgICAgICBjaGFyIGJ1ZmZl
cltDb252ZXJzaW9uQnVmZmVyU2l6ZV07CiAgICAgICAgIGNoYXIqIHRhcmdldCA9IGJ1ZmZlcjsK
ICAgICAgICAgY2hhciogdGFyZ2V0TGltaXQgPSB0YXJnZXQgKyBDb252ZXJzaW9uQnVmZmVyU2l6
ZTsKLSAgICAgICAgZXJyID0gVV9aRVJPX0VSUk9SOwotICAgICAgICB1Y252X2Zyb21Vbmljb2Rl
KG1fY29udmVydGVySUNVLCAmdGFyZ2V0LCB0YXJnZXRMaW1pdCwgJnNvdXJjZSwgc291cmNlTGlt
aXQsIDAsIHRydWUsICZlcnIpOwotICAgICAgICBzaXplX3QgY291bnQgPSB0YXJnZXQgLSBidWZm
ZXI7Ci0gICAgICAgIHJlc3VsdC5ncm93KHNpemUgKyBjb3VudCk7Ci0gICAgICAgIG1lbWNweShy
ZXN1bHQuZGF0YSgpICsgc2l6ZSwgYnVmZmVyLCBjb3VudCk7Ci0gICAgICAgIHNpemUgKz0gY291
bnQ7Ci0gICAgfSB3aGlsZSAoZXJyID09IFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKTsKLQotICAg
IHJldHVybiBDU3RyaW5nKHJlc3VsdC5kYXRhKCksIHNpemUpOworICAgICAgICBlcnJvciA9IFVf
WkVST19FUlJPUjsKKyAgICAgICAgdWNudl9mcm9tVW5pY29kZShtX2NvbnZlcnRlci5nZXQoKSwg
JnRhcmdldCwgdGFyZ2V0TGltaXQsICZzb3VyY2UsIHNvdXJjZUxpbWl0LCAwLCB0cnVlLCAmZXJy
b3IpOworICAgICAgICByZXN1bHQuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1
ZmZlciksIHRhcmdldCAtIGJ1ZmZlcik7CisgICAgfSB3aGlsZSAoZXJyb3IgPT0gVV9CVUZGRVJf
T1ZFUkZMT1dfRVJST1IpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENv
ZGVjSUNVLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5oCmlu
ZGV4IDBjMTc5OGM5YmY3YWU1M2ViN2MzN2RlNWY0MjhjNGIxN2U3NWQwNWEuLmFiZmQ3MDk4NjBl
MTJlMWQyZDA4OGQ5MzliYjUxMDcxZWE5ZDYxNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0Q29kZWNJQ1UuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDYsIDIwMDcsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9w
LmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI0LDU0ICsyNCw0NSBAQAogICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCiAgKi8KIAotI2lmbmRlZiBUZXh0Q29kZWNJQ1VfaAotI2RlZmluZSBUZXh0Q29kZWNJQ1Vf
aAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJUZXh0Q29kZWMuaCIKLSNpbmNsdWRlIDx1bmlj
b2RlL3V0eXBlcy5oPgotCi10eXBlZGVmIHN0cnVjdCBVQ29udmVydGVyIFVDb252ZXJ0ZXI7Cisj
aW5jbHVkZSA8dW5pY29kZS91Y252Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNs
YXNzIFRleHRDb2RlY0lDVSA6IHB1YmxpYyBUZXh0Q29kZWMgewotICAgIHB1YmxpYzoKLSAgICAg
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxUZXh0Q29kZWM+IGNyZWF0ZShjb25zdCBUZXh0RW5j
b2RpbmcmLCBjb25zdCB2b2lkKiBhZGRpdGlvbmFsRGF0YSk7Cit1c2luZyBJQ1VDb252ZXJ0ZXJQ
dHIgPSBzdGQ6OnVuaXF1ZV9wdHI8VUNvbnZlcnRlciwgdm9pZCAoKikoVUNvbnZlcnRlciopPjsK
IAotICAgICAgICBUZXh0Q29kZWNJQ1UoY29uc3QgY2hhciogZW5jb2RpbmcsIGNvbnN0IGNoYXIq
IGNhbm9uaWNhbENvbnZlcnRlck5hbWUpOworY2xhc3MgVGV4dENvZGVjSUNVIDogcHVibGljIFRl
eHRDb2RlYyB7CitwdWJsaWM6CisgICAgVGV4dENvZGVjSUNVKGNvbnN0IGNoYXIqIGVuY29kaW5n
LCBjb25zdCBjaGFyKiBjYW5vbmljYWxDb252ZXJ0ZXJOYW1lKTsKKyAgICB2aXJ0dWFsIH5UZXh0
Q29kZWNJQ1UoKTsKIAotICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckVuY29kaW5nTmFtZXMo
RW5jb2RpbmdOYW1lUmVnaXN0cmFyKTsKLSAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJDb2Rl
Y3MoVGV4dENvZGVjUmVnaXN0cmFyKTsKKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlckVuY29kaW5n
TmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyKTsKKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlckNv
ZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIpOwogCi0gICAgICAgIHZpcnR1YWwgflRleHRDb2RlY0lD
VSgpOworcHJpdmF0ZToKKyAgICBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QgbGVu
Z3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcikgZmluYWw7
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZShTdHJpbmdWaWV3LCBVbmVuY29kYWJsZUhhbmRs
aW5nKSBmaW5hbDsKIAotICAgIHByaXZhdGU6Ci0gICAgICAgIFN0cmluZyBkZWNvZGUoY29uc3Qg
Y2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wm
IHNhd0Vycm9yKSBvdmVycmlkZTsKLSAgICAgICAgQ1N0cmluZyBlbmNvZGUoY29uc3QgVUNoYXIq
LCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5nKSBvdmVycmlkZTsKKyAgICB2b2lk
IGNyZWF0ZUlDVUNvbnZlcnRlcigpIGNvbnN0OworICAgIHZvaWQgcmVsZWFzZUlDVUNvbnZlcnRl
cigpIGNvbnN0OworICAgIGJvb2wgbmVlZHNHQktGYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBt
X25lZWRzR0JLRmFsbGJhY2tzOyB9CisgICAgdm9pZCBzZXROZWVkc0dCS0ZhbGxiYWNrcyhib29s
IG5lZWRzRmFsbGJhY2tzKSB7IG1fbmVlZHNHQktGYWxsYmFja3MgPSBuZWVkc0ZhbGxiYWNrczsg
fQogCi0gICAgICAgIHZvaWQgY3JlYXRlSUNVQ29udmVydGVyKCkgY29uc3Q7Ci0gICAgICAgIHZv
aWQgcmVsZWFzZUlDVUNvbnZlcnRlcigpIGNvbnN0OwotICAgICAgICBib29sIG5lZWRzR0JLRmFs
bGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc0dCS0ZhbGxiYWNrczsgfQotICAgICAgICB2
b2lkIHNldE5lZWRzR0JLRmFsbGJhY2tzKGJvb2wgbmVlZHNGYWxsYmFja3MpIHsgbV9uZWVkc0dC
S0ZhbGxiYWNrcyA9IG5lZWRzRmFsbGJhY2tzOyB9Ci0gICAgICAgIAotICAgICAgICBpbnQgZGVj
b2RlVG9CdWZmZXIoVUNoYXIqIGJ1ZmZlciwgVUNoYXIqIGJ1ZmZlckxpbWl0LCBjb25zdCBjaGFy
KiYgc291cmNlLAotICAgICAgICAgICAgY29uc3QgY2hhciogc291cmNlTGltaXQsIGludDMyX3Qq
IG9mZnNldHMsIGJvb2wgZmx1c2gsIFVFcnJvckNvZGUmIGVycik7CisgICAgaW50IGRlY29kZVRv
QnVmZmVyKFVDaGFyKiBidWZmZXIsIFVDaGFyKiBidWZmZXJMaW1pdCwgY29uc3QgY2hhciomIHNv
dXJjZSwgY29uc3QgY2hhciogc291cmNlTGltaXQsIGludDMyX3QqIG9mZnNldHMsIGJvb2wgZmx1
c2gsIFVFcnJvckNvZGUmKTsKIAotICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBtX2VuY29kaW5n
TmFtZTsKLSAgICAgICAgY29uc3QgY2hhciogY29uc3QgbV9jYW5vbmljYWxDb252ZXJ0ZXJOYW1l
OwotICAgICAgICBtdXRhYmxlIFVDb252ZXJ0ZXIqIG1fY29udmVydGVySUNVOwotICAgICAgICBt
dXRhYmxlIGJvb2wgbV9uZWVkc0dCS0ZhbGxiYWNrczsKLSAgICB9OworICAgIGNvbnN0IGNoYXIq
IGNvbnN0IG1fZW5jb2RpbmdOYW1lOworICAgIGNvbnN0IGNoYXIqIGNvbnN0IG1fY2Fub25pY2Fs
Q29udmVydGVyTmFtZTsKKyAgICBtdXRhYmxlIElDVUNvbnZlcnRlclB0ciBtX2NvbnZlcnRlciB7
IG51bGxwdHIsIHVjbnZfY2xvc2UgfTsKKyAgICBtdXRhYmxlIGJvb2wgbV9uZWVkc0dCS0ZhbGxi
YWNrcyB7IGZhbHNlIH07Cit9OwogCi0gICAgc3RydWN0IElDVUNvbnZlcnRlcldyYXBwZXIgewot
ICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJQ1VDb252ZXJ0ZXJXcmFwcGVyKTsgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICBJQ1VDb252ZXJ0ZXJXcmFw
cGVyKCkgOiBjb252ZXJ0ZXIoMCkgeyB9Ci0gICAgICAgIH5JQ1VDb252ZXJ0ZXJXcmFwcGVyKCk7
CitzdHJ1Y3QgSUNVQ29udmVydGVyV3JhcHBlciB7CisgICAgSUNVQ29udmVydGVyUHRyIGNvbnZl
cnRlciB7IG51bGxwdHIsIHVjbnZfY2xvc2UgfTsKIAotICAgICAgICBVQ29udmVydGVyKiBjb252
ZXJ0ZXI7Ci0gICAgfTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK307CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIFRleHRDb2RlY0lDVV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5jcHAKaW5kZXggMDdhNmQx
NjgzOWRhZWQ1OWM4ZmM1Yjg4MWU4ZWQ0ZWQ2YWU1NTk5NC4uZmRhNzhlMTc0NWRhNzcyNjAxZGFm
MTNiNGJlNjUyYjBjZDg3MWEzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9UZXh0Q29kZWNMYXRpbjEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dENvZGVjTGF0aW4xLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVk
ZSAiVGV4dENvZGVjTGF0aW4xLmgiCiAKICNpbmNsdWRlICJUZXh0Q29kZWNBU0NJSUZhc3RQYXRo
LmgiCisjaW5jbHVkZSA8YXJyYXk+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgpAQCAtMzUsNyArMzYsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFt
ZXNwYWNlIFdURjsKIAotc3RhdGljIGNvbnN0IFVDaGFyIHRhYmxlWzI1Nl0gPSB7CitzdGF0aWMg
Y29uc3QgVUNoYXIgbGF0aW4xQ29udmVyc2lvblRhYmxlWzI1Nl0gPSB7CiAgICAgMHgwMDAwLCAw
eDAwMDEsIDB4MDAwMiwgMHgwMDAzLCAweDAwMDQsIDB4MDAwNSwgMHgwMDA2LCAweDAwMDcsIC8v
IDAwLTA3CiAgICAgMHgwMDA4LCAweDAwMDksIDB4MDAwQSwgMHgwMDBCLCAweDAwMEMsIDB4MDAw
RCwgMHgwMDBFLCAweDAwMEYsIC8vIDA4LTBGCiAgICAgMHgwMDEwLCAweDAwMTEsIDB4MDAxMiwg
MHgwMDEzLCAweDAwMTQsIDB4MDAxNSwgMHgwMDE2LCAweDAwMTcsIC8vIDEwLTE3CkBAIC05Miwx
NCArOTMsMTEgQEAgdm9pZCBUZXh0Q29kZWNMYXRpbjE6OnJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhF
bmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQogICAgIHJlZ2lzdHJhcigieC1jcDEyNTIi
LCAid2luZG93cy0xMjUyIik7CiB9CiAKLXN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VGV4dENvZGVj
PiBuZXdTdHJlYW1pbmdUZXh0RGVjb2RlcldpbmRvd3NMYXRpbjEoY29uc3QgVGV4dEVuY29kaW5n
JiwgY29uc3Qgdm9pZCopCi17Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVj
TGF0aW4xPigpOwotfQotCiB2b2lkIFRleHRDb2RlY0xhdGluMTo6cmVnaXN0ZXJDb2RlY3MoVGV4
dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKIHsKLSAgICByZWdpc3RyYXIoIndpbmRvd3MtMTI1
MiIsIG5ld1N0cmVhbWluZ1RleHREZWNvZGVyV2luZG93c0xhdGluMSwgMCk7CisgICAgcmVnaXN0
cmFyKCJ3aW5kb3dzLTEyNTIiLCBbXSB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVl
PFRleHRDb2RlY0xhdGluMT4oKTsKKyAgICB9KTsKIH0KIAogU3RyaW5nIFRleHRDb2RlY0xhdGlu
MTo6ZGVjb2RlKGNvbnN0IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sLCBib29sLCBi
b29sJikKQEAgLTEzOSwxMCArMTM3LDEwIEBAIFN0cmluZyBUZXh0Q29kZWNMYXRpbjE6OmRlY29k
ZShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90IGxlbmd0aCwgYm9vbCwgYm9vbCwgYm9vCiAgICAg
ICAgICAgICAqZGVzdGluYXRpb24gPSAqc291cmNlOwogICAgICAgICB9IGVsc2UgewogdXNlTG9v
a3VwVGFibGU6Ci0gICAgICAgICAgICBpZiAodGFibGVbKnNvdXJjZV0gPiAweGZmKQorICAgICAg
ICAgICAgaWYgKGxhdGluMUNvbnZlcnNpb25UYWJsZVsqc291cmNlXSA+IDB4ZmYpCiAgICAgICAg
ICAgICAgICAgZ290byB1cENvbnZlcnRUbzE2Qml0OwogCi0gICAgICAgICAgICAqZGVzdGluYXRp
b24gPSB0YWJsZVsqc291cmNlXTsKKyAgICAgICAgICAgICpkZXN0aW5hdGlvbiA9IGxhdGluMUNv
bnZlcnNpb25UYWJsZVsqc291cmNlXTsKICAgICAgICAgfQogCiAgICAgICAgICsrc291cmNlOwpA
QCAtMTY1LDcgKzE2Myw3IEBAIHVwQ29udmVydFRvMTZCaXQ6CiAgICAgICAgICpkZXN0aW5hdGlv
bjE2KysgPSAqcHRyOCsrOwogCiAgICAgLy8gSGFuZGxlIHRoZSBjaGFyYWN0ZXIgdGhhdCB0cmln
Z2VyZWQgdGhlIDE2IGJpdCBwYXRoCi0gICAgKmRlc3RpbmF0aW9uMTYgPSB0YWJsZVsqc291cmNl
XTsKKyAgICAqZGVzdGluYXRpb24xNiA9IGxhdGluMUNvbnZlcnNpb25UYWJsZVsqc291cmNlXTsK
ICAgICArK3NvdXJjZTsKICAgICArK2Rlc3RpbmF0aW9uMTY7CiAKQEAgLTE5NCw3ICsxOTIsNyBA
QCB1cENvbnZlcnRUbzE2Qml0OgogICAgICAgICAgICAgKmRlc3RpbmF0aW9uMTYgPSAqc291cmNl
OwogICAgICAgICB9IGVsc2UgewogdXNlTG9va3VwVGFibGUxNjoKLSAgICAgICAgICAgICpkZXN0
aW5hdGlvbjE2ID0gdGFibGVbKnNvdXJjZV07CisgICAgICAgICAgICAqZGVzdGluYXRpb24xNiA9
IGxhdGluMUNvbnZlcnNpb25UYWJsZVsqc291cmNlXTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgKytzb3VyY2U7CkBAIC0yMDQsNTggKzIwMiw1MSBAQCB1c2VMb29rdXBUYWJsZTE2Ogog
ICAgIHJldHVybiByZXN1bHQxNjsKIH0KIAotc3RhdGljIENTdHJpbmcgZW5jb2RlQ29tcGxleFdp
bmRvd3NMYXRpbjEoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFVuZW5j
b2RhYmxlSGFuZGxpbmcgaGFuZGxpbmcpCitzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZUNv
bXBsZXhXaW5kb3dzTGF0aW4xKFN0cmluZ1ZpZXcgc3RyaW5nLCBVbmVuY29kYWJsZUhhbmRsaW5n
IGhhbmRsaW5nKQogewotICAgIFZlY3RvcjxjaGFyPiByZXN1bHQobGVuZ3RoKTsKLSAgICBjaGFy
KiBieXRlcyA9IHJlc3VsdC5kYXRhKCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdDsKIAot
ICAgIHNpemVfdCByZXN1bHRMZW5ndGggPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGVuZ3RoOyApIHsKLSAgICAgICAgVUNoYXIzMiBjOwotICAgICAgICBVMTZfTkVYVChjaGFyYWN0
ZXJzLCBpLCBsZW5ndGgsIGMpOwotICAgICAgICB1bnNpZ25lZCBjaGFyIGIgPSBjOworICAgIGZv
ciAoYXV0byBjaGFyYWN0ZXIgOiBzdHJpbmcuY29kZVBvaW50cygpKSB7CisgICAgICAgIHVpbnQ4
X3QgYiA9IGNoYXJhY3RlcjsKICAgICAgICAgLy8gRG8gYW4gZWZmaWNpZW50IGNoZWNrIHRvIGRl
dGVjdCBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gMDAtN0YgYW5kIEEwLUZGLgotICAgICAgICBpZiAo
YiAhPSBjIHx8IChjICYgMHhFMCkgPT0gMHg4MCkgeworICAgICAgICBpZiAoYiAhPSBjaGFyYWN0
ZXIgfHwgKGNoYXJhY3RlciAmIDB4RTApID09IDB4ODApIHsKICAgICAgICAgICAgIC8vIExvb2sg
Zm9yIGEgd2F5IHRvIGVuY29kZSB0aGlzIHdpdGggV2luZG93cyBMYXRpbi0xLgotICAgICAgICAg
ICAgZm9yIChiID0gMHg4MDsgYiA8IDB4QTA7ICsrYikKLSAgICAgICAgICAgICAgICBpZiAodGFi
bGVbYl0gPT0gYykKKyAgICAgICAgICAgIGZvciAoYiA9IDB4ODA7IGIgPCAweEEwOyArK2IpIHsK
KyAgICAgICAgICAgICAgICBpZiAobGF0aW4xQ29udmVyc2lvblRhYmxlW2JdID09IGNoYXJhY3Rl
cikKICAgICAgICAgICAgICAgICAgICAgZ290byBnb3RCeXRlOworICAgICAgICAgICAgfQogICAg
ICAgICAgICAgLy8gTm8gd2F5IHRvIGVuY29kZSB0aGlzIGNoYXJhY3RlciB3aXRoIFdpbmRvd3Mg
TGF0aW4tMS4KICAgICAgICAgICAgIFVuZW5jb2RhYmxlUmVwbGFjZW1lbnRBcnJheSByZXBsYWNl
bWVudDsKLSAgICAgICAgICAgIGludCByZXBsYWNlbWVudExlbmd0aCA9IFRleHRDb2RlYzo6Z2V0
VW5lbmNvZGFibGVSZXBsYWNlbWVudChjLCBoYW5kbGluZywgcmVwbGFjZW1lbnQpOwotICAgICAg
ICAgICAgcmVzdWx0Lmdyb3cocmVzdWx0TGVuZ3RoICsgcmVwbGFjZW1lbnRMZW5ndGggKyBsZW5n
dGggLSBpKTsKLSAgICAgICAgICAgIGJ5dGVzID0gcmVzdWx0LmRhdGEoKTsKLSAgICAgICAgICAg
IG1lbWNweShieXRlcyArIHJlc3VsdExlbmd0aCwgcmVwbGFjZW1lbnQsIHJlcGxhY2VtZW50TGVu
Z3RoKTsKLSAgICAgICAgICAgIHJlc3VsdExlbmd0aCArPSByZXBsYWNlbWVudExlbmd0aDsKKyAg
ICAgICAgICAgIGludCByZXBsYWNlbWVudExlbmd0aCA9IFRleHRDb2RlYzo6Z2V0VW5lbmNvZGFi
bGVSZXBsYWNlbWVudChjaGFyYWN0ZXIsIGhhbmRsaW5nLCByZXBsYWNlbWVudCk7CisgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKHJlcGxhY2VtZW50LmRhdGEoKSwgcmVwbGFjZW1lbnRMZW5ndGgp
OwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICBnb3RCeXRlOgotICAgICAg
ICBieXRlc1tyZXN1bHRMZW5ndGgrK10gPSBiOworICAgICAgICByZXN1bHQuYXBwZW5kKGIpOwog
ICAgIH0KIAotICAgIHJldHVybiBDU3RyaW5nKGJ5dGVzLCByZXN1bHRMZW5ndGgpOworICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLUNTdHJpbmcgVGV4dENvZGVjTGF0aW4xOjplbmNvZGUoY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcgaGFu
ZGxpbmcpCitWZWN0b3I8dWludDhfdD4gVGV4dENvZGVjTGF0aW4xOjplbmNvZGUoU3RyaW5nVmll
dyBzdHJpbmcsIFVuZW5jb2RhYmxlSGFuZGxpbmcgaGFuZGxpbmcpCiB7CiAgICAgewotICAgICAg
ICBjaGFyKiBieXRlczsKLSAgICAgICAgQ1N0cmluZyBzdHJpbmcgPSBDU3RyaW5nOjpuZXdVbmlu
aXRpYWxpemVkKGxlbmd0aCwgYnl0ZXMpOworICAgICAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0
KHN0cmluZy5sZW5ndGgoKSk7CisgICAgICAgIGF1dG8qIGJ5dGVzID0gcmVzdWx0LmRhdGEoKTsK
IAotICAgICAgICAvLyBDb252ZXJ0IHRoZSBzdHJpbmcgYSBmYXN0IHdheSBhbmQgc2ltdWx0YW5l
b3VzbHkgZG8gYW4gZWZmaWNpZW50IGNoZWNrIHRvIHNlZSBpZiBpdCdzIGFsbCBBU0NJSS4KKyAg
ICAgICAgLy8gQ29udmVydCBhbmQgc2ltdWx0YW5lb3VzbHkgZG8gYSBjaGVjayB0byBzZWUgaWYg
aXQncyBhbGwgQVNDSUkuCiAgICAgICAgIFVDaGFyIG9yZWQgPSAwOwotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBVQ2hhciBjID0gY2hh
cmFjdGVyc1tpXTsKLSAgICAgICAgICAgIGJ5dGVzW2ldID0gYzsKLSAgICAgICAgICAgIG9yZWQg
fD0gYzsKKyAgICAgICAgZm9yIChhdXRvIGNoYXJhY3RlciA6IHN0cmluZy5jb2RlVW5pdHMoKSkg
eworICAgICAgICAgICAgKmJ5dGVzKysgPSBjaGFyYWN0ZXI7CisgICAgICAgICAgICBvcmVkIHw9
IGNoYXJhY3RlcjsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghKG9yZWQgJiAweEZGODApKQot
ICAgICAgICAgICAgcmV0dXJuIHN0cmluZzsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogCiAgICAgLy8gSWYgaXQgd2Fzbid0IGFsbCBBU0NJSSwgY2FsbCB0aGUgZnVuY3Rpb24g
dGhhdCBoYW5kbGVzIG1vcmUtY29tcGxleCBjYXNlcy4KLSAgICByZXR1cm4gZW5jb2RlQ29tcGxl
eFdpbmRvd3NMYXRpbjEoY2hhcmFjdGVycywgbGVuZ3RoLCBoYW5kbGluZyk7CisgICAgcmV0dXJu
IGVuY29kZUNvbXBsZXhXaW5kb3dzTGF0aW4xKHN0cmluZywgaGFuZGxpbmcpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRDb2RlY0xhdGluMS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
Q29kZWNMYXRpbjEuaAppbmRleCA5ZDA4YWEzZjU5NzRlOTYyYTE1NDFkMDNlZDc5ZGY5YmNhMmRl
NDIxLi43NGFiYzc2YWMzZDBkODc5OTAzZTNjNDIwZWQ2ZThhNDc0Mzc2MjI1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmgKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDIy
ICsyMywyMSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBUZXh0Q29kZWNMYXRp
bjFfaAotI2RlZmluZSBUZXh0Q29kZWNMYXRpbjFfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJUZXh0Q29kZWMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgVGV4dENv
ZGVjTGF0aW4xIDogcHVibGljIFRleHRDb2RlYyB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0
aWMgdm9pZCByZWdpc3RlckVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyKTsKLSAg
ICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyKTsKK2Ns
YXNzIFRleHRDb2RlY0xhdGluMSBmaW5hbCA6IHB1YmxpYyBUZXh0Q29kZWMgeworcHVibGljOgor
ICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3Ry
YXIpOworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7
CiAKLSAgICAgICAgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9v
bCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpIG92ZXJyaWRlOwotICAg
ICAgICBDU3RyaW5nIGVuY29kZShjb25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIFVuZW5jb2Rh
YmxlSGFuZGxpbmcpIG92ZXJyaWRlOwotICAgIH07Citwcml2YXRlOgorICAgIFN0cmluZyBkZWNv
ZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJy
b3IsIGJvb2wmIHNhd0Vycm9yKSBmaW5hbDsKKyAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlKFN0
cmluZ1ZpZXcsIFVuZW5jb2RhYmxlSGFuZGxpbmcpIGZpbmFsOworfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gVGV4dENvZGVjTGF0aW4xX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjUmVwbGFjZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNSZXBsYWNlbWVudC5jcHAKaW5kZXgg
ZmMzOWIxOGI4Yzk5NzUxMGM4YzQxYzY2MThhZDE4N2I3NTg0ZTIyYS4uYmEyNjE0Y2ExNDhhNDI1
MGFiZDI5MjJkZGMzNzZjNjBkMjIyODlkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9UZXh0Q29kZWNSZXBsYWNlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNSZXBsYWNlbWVudC5jcHAKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMjIgKzMwLDEzIEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RkOjp1bmlxdWVfcHRyPFRleHRDb2RlYz4gVGV4dENv
ZGVjUmVwbGFjZW1lbnQ6OmNyZWF0ZShjb25zdCBUZXh0RW5jb2RpbmcmLCBjb25zdCB2b2lkKikK
LXsKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxUZXh0Q29kZWNSZXBsYWNlbWVudD4oKTsK
LX0KLQotVGV4dENvZGVjUmVwbGFjZW1lbnQ6OlRleHRDb2RlY1JlcGxhY2VtZW50KCkKLXsKLX0K
LQogdm9pZCBUZXh0Q29kZWNSZXBsYWNlbWVudDo6cmVnaXN0ZXJFbmNvZGluZ05hbWVzKEVuY29k
aW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIpCiB7Ci0gICAgLy8gVGhlICdyZXBsYWNlbWVudCcg
aXRzZWxmIGlzIG5vdCBhIHZhbGlkIGxhYmVsLiBJdCBpcyB0aGUgbmFtZSBvZgorICAgIC8vIFRo
ZSBzdHJpbmcgJ3JlcGxhY2VtZW50JyBpdHNlbGYgaXMgbm90IGEgdmFsaWQgbGFiZWwuIEl0IGlz
IHRoZSBuYW1lIG9mCiAgICAgLy8gYSBncm91cCBvZiBsZWdhY3kgZW5jb2RpbmcgbGFiZWxzLiBI
ZW5jZSwgaXQgY2Fubm90IGJlIHVzZWQgZGlyZWN0bHkuCisgICAgLy8gVGhlIFRleHRFbmNvZGlu
ZyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBhYm92ZSBydWxlOyBoZXJlIHdlIHJlZ2lzdGVyIGl0IG5v
cm1hbGx5LgogICAgIHJlZ2lzdHJhcigicmVwbGFjZW1lbnQiLCAicmVwbGFjZW1lbnQiKTsKIAot
ICAgIC8vIFRoZSBsYWJlbHMKICAgICByZWdpc3RyYXIoImNzaXNvMjAyMmtyIiwgInJlcGxhY2Vt
ZW50Iik7CiAgICAgcmVnaXN0cmFyKCJoei1nYi0yMzEyIiwgInJlcGxhY2VtZW50Iik7CiAgICAg
cmVnaXN0cmFyKCJpc28tMjAyMi1jbiIsICJyZXBsYWNlbWVudCIpOwpAQCAtNTUsNyArNDYsOSBA
QCB2b2lkIFRleHRDb2RlY1JlcGxhY2VtZW50OjpyZWdpc3RlckVuY29kaW5nTmFtZXMoRW5jb2Rp
bmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhcgogCiB2b2lkIFRleHRDb2RlY1JlcGxhY2VtZW50Ojpy
ZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFyKQogewotICAgIHJlZ2lz
dHJhcigicmVwbGFjZW1lbnQiLCBjcmVhdGUsIDApOworICAgIHJlZ2lzdHJhcigicmVwbGFjZW1l
bnQiLCBbXSB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFRleHRDb2RlY1JlcGxh
Y2VtZW50PigpOworICAgIH0pOwogfQogCiBTdHJpbmcgVGV4dENvZGVjUmVwbGFjZW1lbnQ6OmRl
Y29kZShjb25zdCBjaGFyKiwgc2l6ZV90LCBib29sLCBib29sLCBib29sJiBzYXdFcnJvcikKQEAg
LTYzLDkgKzU2LDggQEAgU3RyaW5nIFRleHRDb2RlY1JlcGxhY2VtZW50OjpkZWNvZGUoY29uc3Qg
Y2hhciosIHNpemVfdCwgYm9vbCwgYm9vbCwgYm9vbCYgc2F3RXIKICAgICBzYXdFcnJvciA9IHRy
dWU7CiAgICAgaWYgKG1fc2VudEVPRikKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0K
ICAgICBtX3NlbnRFT0YgPSB0cnVlOwotICAgIHJldHVybiBTdHJpbmcoJnJlcGxhY2VtZW50Q2hh
cmFjdGVyLCAxKTsKKyAgICByZXR1cm4gU3RyaW5nIHsgJnJlcGxhY2VtZW50Q2hhcmFjdGVyLCAx
IH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjUmVwbGFjZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dENvZGVjUmVwbGFjZW1lbnQuaAppbmRleCA3YTY3ZDUxNmRiNzBj
MTZlOTYwZjVjYjJiYTg0MGU5NjJlOGI1MWY0Li5jZTJiYzYzNjM0OWE3ZDg4ZGVhNzY2ZTBiMGM3
NTRmMDE1MGViZGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRDb2RlY1JlcGxhY2VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0Q29kZWNSZXBsYWNlbWVudC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFRleHRDb2RlY1JlcGxhY2VtZW50X2gKLSNk
ZWZpbmUgVGV4dENvZGVjUmVwbGFjZW1lbnRfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJU
ZXh0Q29kZWNVVEY4LmgiCiAKQEAgLTMyLDIwICszMSwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIFRleHRDb2RlY1JlcGxhY2VtZW50IDogcHVibGljIFRleHRDb2RlY1VURjggewog
cHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VGV4dENvZGVjPiBjcmVhdGUoY29u
c3QgVGV4dEVuY29kaW5nJiwgY29uc3Qgdm9pZCopOwotCi0gICAgVGV4dENvZGVjUmVwbGFjZW1l
bnQoKTsKLQogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05h
bWVSZWdpc3RyYXIpOwogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1Jl
Z2lzdHJhcik7CiAKIHByaXZhdGU6Ci0gICAgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6
ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3Ip
IG92ZXJyaWRlOworICAgIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgs
IGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9yKSBmaW5hbDsKIAog
ICAgIGJvb2wgbV9zZW50RU9GIHsgZmFsc2UgfTsKIAogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLyogVGV4dENvZGVjUmVwbGFjZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEYxNi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcAppbmRleCAwZTM5ZGUxMjg1
MTEyODI2NGFiODUyYTg0ZGMwZDM5OWMxYTAxNzhmLi4yZmM5ZTYzOGZlODYyMGI0YzBiZjk3NGNm
ZGJmMDVkOTE0ODdlZWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRDb2RlY1VURjE2LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRDb2RlY1VURjE2LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDYsIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NywyMCArNDcsMTQgQEAgdm9pZCBU
ZXh0Q29kZWNVVEYxNjo6cmVnaXN0ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJh
ciByZWdpc3RyYXIpCiAgICAgcmVnaXN0cmFyKCJ1bmljb2RlRkZGRSIsICJVVEYtMTZCRSIpOwog
fQogCi1zdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFRleHRDb2RlYz4gbmV3U3RyZWFtaW5nVGV4dERl
Y29kZXJVVEYxNkxFKGNvbnN0IFRleHRFbmNvZGluZyYsIGNvbnN0IHZvaWQqKQotewotICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPFRleHRDb2RlY1VURjE2Pih0cnVlKTsKLX0KLQotc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxUZXh0Q29kZWM+IG5ld1N0cmVhbWluZ1RleHREZWNvZGVyVVRGMTZC
RShjb25zdCBUZXh0RW5jb2RpbmcmLCBjb25zdCB2b2lkKikKLXsKLSAgICByZXR1cm4gc3RkOjpt
YWtlX3VuaXF1ZTxUZXh0Q29kZWNVVEYxNj4oZmFsc2UpOwotfQotCiB2b2lkIFRleHRDb2RlY1VU
RjE2OjpyZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFyKQogewotICAg
IHJlZ2lzdHJhcigiVVRGLTE2TEUiLCBuZXdTdHJlYW1pbmdUZXh0RGVjb2RlclVURjE2TEUsIDAp
OwotICAgIHJlZ2lzdHJhcigiVVRGLTE2QkUiLCBuZXdTdHJlYW1pbmdUZXh0RGVjb2RlclVURjE2
QkUsIDApOworICAgIHJlZ2lzdHJhcigiVVRGLTE2TEUiLCBbXSB7CisgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPFRleHRDb2RlY1VURjE2Pih0cnVlKTsKKyAgICB9KTsKKyAgICByZWdp
c3RyYXIoIlVURi0xNkJFIiwgW10geworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxU
ZXh0Q29kZWNVVEYxNj4oZmFsc2UpOworICAgIH0pOwogfQogCiBTdHJpbmcgVGV4dENvZGVjVVRG
MTY6OmRlY29kZShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90IGxlbmd0aCwgYm9vbCwgYm9vbCwg
Ym9vbCYpCkBAIC0xMTQsMzYgKzEwOCwyNCBAQCBTdHJpbmcgVGV4dENvZGVjVVRGMTY6OmRlY29k
ZShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90IGxlbmd0aCwgYm9vbCwgYm9vbCwgYm9vbAogICAg
IHJldHVybiBTdHJpbmc6OmFkb3B0KFdURk1vdmUoYnVmZmVyKSk7CiB9CiAKLUNTdHJpbmcgVGV4
dENvZGVjVVRGMTY6OmVuY29kZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0
aCwgVW5lbmNvZGFibGVIYW5kbGluZykKK1ZlY3Rvcjx1aW50OF90PiBUZXh0Q29kZWNVVEYxNjo6
ZW5jb2RlKFN0cmluZ1ZpZXcgc3RyaW5nLCBVbmVuY29kYWJsZUhhbmRsaW5nKQogewotICAgIC8v
IFdlIG5lZWQgdG8gYmUgc3VyZSB3ZSBjYW4gZG91YmxlIHRoZSBsZW5ndGggd2l0aG91dCBvdmVy
Zmxvd2luZy4KLSAgICAvLyBTaW5jZSB0aGUgcGFzc2VkLWluIGxlbmd0aCBpcyB0aGUgbGVuZ3Ro
IG9mIGFuIGFjdHVhbCBleGlzdGluZwotICAgIC8vIGNoYXJhY3RlciBidWZmZXIsIGVhY2ggY2hh
cmFjdGVyIGlzIHR3byBieXRlcywgYW5kIHdlIGtub3cKLSAgICAvLyB0aGUgYnVmZmVyIGRvZXNu
J3Qgb2NjdXB5IHRoZSBlbnRpcmUgYWRkcmVzcyBzcGFjZSwgd2UgY2FuCi0gICAgLy8gYXNzZXJ0
IGhlcmUgdGhhdCBkb3VibGluZyB0aGUgbGVuZ3RoIGRvZXMgbm90IG92ZXJmbG93IHNpemVfdAot
ICAgIC8vIGFuZCB0aGVyZSdzIG5vIG5lZWQgZm9yIGEgcnVudGltZSBjaGVjay4KLSAgICBBU1NF
UlQobGVuZ3RoIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgLyAyKTsKLQot
ICAgIGNoYXIqIGJ5dGVzOwotICAgIENTdHJpbmcgc3RyaW5nID0gQ1N0cmluZzo6bmV3VW5pbml0
aWFsaXplZChsZW5ndGggKiAyLCBieXRlcyk7Ci0KLSAgICAvLyBGSVhNRTogQ1N0cmluZyBpcyBu
b3QgYSByZWFzb25hYmxlIGRhdGEgc3RydWN0dXJlIGZvciBlbmNvZGVkIFVURi0xNiwgd2hpY2gg
d2lsbCBoYXZlCi0gICAgLy8gbnVsbCBjaGFyYWN0ZXJzIGluc2lkZSBpdC4gUGVyaGFwcyB0aGUg
cmVzdWx0IG9mIGVuY29kZSBzaG91bGQgbm90IGJlIGEgQ1N0cmluZy4KKyAgICBWZWN0b3I8dWlu
dDhfdD4gcmVzdWx0KFdURjo6Y2hlY2tlZFByb2R1Y3Q8c2l6ZV90PihzdHJpbmcubGVuZ3RoKCks
IDIpLnVuc2FmZUdldCgpKTsKKyAgICBhdXRvKiBieXRlcyA9IHJlc3VsdC5kYXRhKCk7CisKICAg
ICBpZiAobV9saXR0bGVFbmRpYW4pIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBs
ZW5ndGg7ICsraSkgewotICAgICAgICAgICAgVUNoYXIgYyA9IGNoYXJhY3RlcnNbaV07Ci0gICAg
ICAgICAgICBieXRlc1tpICogMl0gPSBjOwotICAgICAgICAgICAgYnl0ZXNbaSAqIDIgKyAxXSA9
IGMgPj4gODsKKyAgICAgICAgZm9yIChhdXRvIGNoYXJhY3RlciA6IHN0cmluZy5jb2RlVW5pdHMo
KSkgeworICAgICAgICAgICAgKmJ5dGVzKysgPSBjaGFyYWN0ZXI7CisgICAgICAgICAgICAqYnl0
ZXMrKyA9IGNoYXJhY3RlciA+PiA4OwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgVUNoYXIg
YyA9IGNoYXJhY3RlcnNbaV07Ci0gICAgICAgICAgICBieXRlc1tpICogMl0gPSBjID4+IDg7Ci0g
ICAgICAgICAgICBieXRlc1tpICogMiArIDFdID0gYzsKKyAgICAgICAgZm9yIChhdXRvIGNoYXJh
Y3RlciA6IHN0cmluZy5jb2RlVW5pdHMoKSkgeworICAgICAgICAgICAgKmJ5dGVzKysgPSBjaGFy
YWN0ZXIgPj4gODsKKyAgICAgICAgICAgICpieXRlcysrID0gY2hhcmFjdGVyOwogICAgICAgICB9
CiAgICAgfQogCi0gICAgcmV0dXJuIHN0cmluZzsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1RleHRDb2RlY1VURjE2LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRDb2RlY1VURjE2LmgKaW5kZXggMjg3NjBjZGVlNmRjYjJhOGVmNmZiYzk2YjVhODI4OWYwZmEz
MjVmMi4uMzFiYjEyYTFjNTlmZjg3ZWZmZTdmZTIwMWJjNTlmMmI0ODQzNTRkZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEYxNi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGMTYuaApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsMjkg
KzIzLDI2IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIFRleHRDb2RlY1VURjE2
X2gKLSNkZWZpbmUgVGV4dENvZGVjVVRGMTZfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJU
ZXh0Q29kZWMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgVGV4dENvZGVj
VVRGMTYgOiBwdWJsaWMgVGV4dENvZGVjIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyB2
b2lkIHJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIpOwotICAgICAg
ICBzdGF0aWMgdm9pZCByZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIpOworY2xhc3Mg
VGV4dENvZGVjVVRGMTYgOiBwdWJsaWMgVGV4dENvZGVjIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
dm9pZCByZWdpc3RlckVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyKTsKKyAgICBz
dGF0aWMgdm9pZCByZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIpOwogCi0gICAgICAg
IFRleHRDb2RlY1VURjE2KGJvb2wgbGl0dGxlRW5kaWFuKSA6IG1fbGl0dGxlRW5kaWFuKGxpdHRs
ZUVuZGlhbiksIG1faGF2ZUJ1ZmZlcmVkQnl0ZShmYWxzZSkgeyB9CisgICAgZXhwbGljaXQgVGV4
dENvZGVjVVRGMTYoYm9vbCBsaXR0bGVFbmRpYW4pIDogbV9saXR0bGVFbmRpYW4obGl0dGxlRW5k
aWFuKSB7IH0KIAotICAgICAgICBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QgbGVu
Z3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcikgb3ZlcnJp
ZGU7Ci0gICAgICAgIENTdHJpbmcgZW5jb2RlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwg
VW5lbmNvZGFibGVIYW5kbGluZykgb3ZlcnJpZGU7Citwcml2YXRlOgorICAgIFN0cmluZyBkZWNv
ZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJy
b3IsIGJvb2wmIHNhd0Vycm9yKSBmaW5hbDsKKyAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlKFN0
cmluZ1ZpZXcsIFVuZW5jb2RhYmxlSGFuZGxpbmcpIGZpbmFsOwogCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgYm9vbCBtX2xpdHRsZUVuZGlhbjsKLSAgICAgICAgYm9vbCBtX2hhdmVCdWZmZXJlZEJ5
dGU7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgbV9idWZmZXJlZEJ5dGU7Ci0gICAgfTsKKyAgICBi
b29sIG1fbGl0dGxlRW5kaWFuOworICAgIGJvb2wgbV9oYXZlQnVmZmVyZWRCeXRlIHsgZmFsc2Ug
fTsKKyAgICB1bnNpZ25lZCBjaGFyIG1fYnVmZmVyZWRCeXRlOworfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVGV4dENvZGVjVVRGMTZfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEY4LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGOC5jcHAKaW5kZXggY2Q1MDQyNzk5MGZmNTZh
MmYxYTkxYjM2Y2U1MzM2YjVmZTliMjQ2My4uOTIyNGZhNzdiZGUxNzEyOWU5Y2M2ZGRlZjY0OGEy
NzMyMjE1OTY3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
Q29kZWNVVEY4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2Rl
Y1VURjguY3BwCkBAIC01NSw5ICs1NSw5IEBAIHZvaWQgVGV4dENvZGVjVVRGODo6cmVnaXN0ZXJF
bmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIpCiAKIHZvaWQgVGV4
dENvZGVjVVRGODo6cmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikK
IHsKLSAgICByZWdpc3RyYXIoIlVURi04IiwgW10gKGNvbnN0IFRleHRFbmNvZGluZyYsIGNvbnN0
IHZvaWQqKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8VGV4dENvZGVjPiB7CisgICAgcmVnaXN0cmFyKCJV
VEYtOCIsIFtdIHsKICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjVVRG
OD4oKTsKLSAgICB9LCBudWxscHRyKTsKKyAgICB9KTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQg
bm9uQVNDSUlTZXF1ZW5jZUxlbmd0aCh1aW50OF90IGZpcnN0Qnl0ZSkKQEAgLTQzMiwyMiArNDMy
LDE2IEBAIHVwQ29udmVydFRvMTZCaXQ6CiAgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoV1RGTW92
ZShidWZmZXIxNikpOwogfQogCi1DU3RyaW5nIFRleHRDb2RlY1VURjg6OmVuY29kZShjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZykKK1Zl
Y3Rvcjx1aW50OF90PiBUZXh0Q29kZWNVVEY4OjplbmNvZGUoU3RyaW5nVmlldyBzdHJpbmcsIFVu
ZW5jb2RhYmxlSGFuZGxpbmcpCiB7CiAgICAgLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIFVURi04
IGJ5dGVzIG5lZWRlZCBwZXIgVVRGLTE2IGNvZGUgdW5pdCBpcyAzLgogICAgIC8vIEJNUCBjaGFy
YWN0ZXJzIHRha2Ugb25seSBvbmUgVVRGLTE2IGNvZGUgdW5pdCBhbmQgY2FuIHRha2UgdXAgdG8g
MyBieXRlcyAoM3gpLgogICAgIC8vIE5vbi1CTVAgY2hhcmFjdGVycyB0YWtlIHR3byBVVEYtMTYg
Y29kZSB1bml0cyBhbmQgY2FuIHRha2UgdXAgdG8gNCBieXRlcyAoMngpLgotICAgIGlmIChsZW5n
dGggPiBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIC8gMykKLSAgICAgICAgQ1JB
U0goKTsKLQotICAgIFZlY3RvcjxjaGFyLCAzMDAwPiBieXRlcyhsZW5ndGggKiAzKTsKKyAgICBW
ZWN0b3I8dWludDhfdD4gYnl0ZXMoV1RGOjpjaGVja2VkUHJvZHVjdDxzaXplX3Q+KHN0cmluZy5s
ZW5ndGgoKSwgMykudW5zYWZlR2V0KCkpOwogICAgIHNpemVfdCBieXRlc1dyaXR0ZW4gPSAwOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyApIHsKLSAgICAgICAgVUNoYXIzMiBj
aGFyYWN0ZXI7Ci0gICAgICAgIFUxNl9ORVhUKGNoYXJhY3RlcnMsIGksIGxlbmd0aCwgY2hhcmFj
dGVyKTsKKyAgICBmb3IgKGF1dG8gY2hhcmFjdGVyIDogc3RyaW5nLmNvZGVQb2ludHMoKSkKICAg
ICAgICAgVThfQVBQRU5EX1VOU0FGRShieXRlcy5kYXRhKCksIGJ5dGVzV3JpdHRlbiwgY2hhcmFj
dGVyKTsKLSAgICB9Ci0gICAgcmV0dXJuIENTdHJpbmcgeyBieXRlcy5kYXRhKCksIGJ5dGVzV3Jp
dHRlbiB9OworICAgIHJldHVybiBieXRlczsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEY4Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjguaAppbmRleCAyMDgx
M2MyZmVhNTkwMjgxYWY0MTU5NTQ4MzhiMGM5Y2JkZDU3YjI2Li5hNTg0NGI0YjZlNmRkZjZlZDQy
MWFmOTEyZGNhY2Q0MTUyNDlkMmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1RleHRDb2RlY1VURjguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRDb2RlY1VURjguaApAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAg
ICAgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwg
Ym9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpIG92ZXJyaWRlOwotICAgIENTdHJpbmcg
ZW5jb2RlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZykg
b3ZlcnJpZGU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZShTdHJpbmdWaWV3LCBVbmVuY29k
YWJsZUhhbmRsaW5nKSBmaW5hbDsKIAogICAgIGJvb2wgaGFuZGxlUGFydGlhbFNlcXVlbmNlKExD
aGFyKiYgZGVzdGluYXRpb24sIGNvbnN0IHVpbnQ4X3QqJiBzb3VyY2UsIGNvbnN0IHVpbnQ4X3Qq
IGVuZCwgYm9vbCBmbHVzaCk7CiAgICAgdm9pZCBoYW5kbGVQYXJ0aWFsU2VxdWVuY2UoVUNoYXIq
JiBkZXN0aW5hdGlvbiwgY29uc3QgdWludDhfdComIHNvdXJjZSwgY29uc3QgdWludDhfdCogZW5k
LCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VzZXJEZWZpbmVkLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuY3Bw
CmluZGV4IGUzMTkyMTRlNGY1MDJmMmRhYzQzODdmYjljNDg3ZjZjYzU1ZTEwYzcuLjI5NmM0Njlm
MTY5ZmI5MTFkYzhkYmQ3YTY0N2VhNTY0MWUyZmZlMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuY3BwCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTcgQXBwbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYs
OSArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRleHRDb2RlY1VzZXJE
ZWZpbmVkLmgiCiAKLSNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGFycmF5PgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWZmZXIu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKQEAgLTM5LDczICszOCw2MiBAQCB2b2lkIFRleHRDb2RlY1VzZXJE
ZWZpbmVkOjpyZWdpc3RlckVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lz
dHJhcgogICAgIHJlZ2lzdHJhcigieC11c2VyLWRlZmluZWQiLCAieC11c2VyLWRlZmluZWQiKTsK
IH0KIAotc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxUZXh0Q29kZWM+IG5ld1N0cmVhbWluZ1RleHRE
ZWNvZGVyVXNlckRlZmluZWQoY29uc3QgVGV4dEVuY29kaW5nJiwgY29uc3Qgdm9pZCopCi17Ci0g
ICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjVXNlckRlZmluZWQ+KCk7Ci19Ci0K
IHZvaWQgVGV4dENvZGVjVXNlckRlZmluZWQ6OnJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lz
dHJhciByZWdpc3RyYXIpCiB7Ci0gICAgcmVnaXN0cmFyKCJ4LXVzZXItZGVmaW5lZCIsIG5ld1N0
cmVhbWluZ1RleHREZWNvZGVyVXNlckRlZmluZWQsIDApOworICAgIHJlZ2lzdHJhcigieC11c2Vy
LWRlZmluZWQiLCBbXSB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFRleHRDb2Rl
Y1VzZXJEZWZpbmVkPigpOworICAgIH0pOwogfQogCiBTdHJpbmcgVGV4dENvZGVjVXNlckRlZmlu
ZWQ6OmRlY29kZShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90IGxlbmd0aCwgYm9vbCwgYm9vbCwg
Ym9vbCYpCiB7CiAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAgICAgcmVzdWx0LnJlc2VydmVD
YXBhY2l0eShsZW5ndGgpOwotCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkgewogICAgICAgICBzaWduZWQgY2hhciBjID0gYnl0ZXNbaV07CiAgICAgICAgIHJlc3VsdC5h
cHBlbmQoc3RhdGljX2Nhc3Q8VUNoYXI+KGMgJiAweEY3RkYpKTsKICAgICB9Ci0KICAgICByZXR1
cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKLXN0YXRpYyBDU3RyaW5nIGVuY29kZUNvbXBsZXhV
c2VyRGVmaW5lZChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVW5lbmNv
ZGFibGVIYW5kbGluZyBoYW5kbGluZykKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4gZW5jb2RlQ29t
cGxleFVzZXJEZWZpbmVkKFN0cmluZ1ZpZXcgc3RyaW5nLCBVbmVuY29kYWJsZUhhbmRsaW5nIGhh
bmRsaW5nKQogewotICAgIFZlY3RvcjxjaGFyPiByZXN1bHQobGVuZ3RoKTsKLSAgICBjaGFyKiBi
eXRlcyA9IHJlc3VsdC5kYXRhKCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdDsKIAotICAg
IHNpemVfdCByZXN1bHRMZW5ndGggPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVu
Z3RoOyApIHsKLSAgICAgICAgVUNoYXIzMiBjOwotICAgICAgICBVMTZfTkVYVChjaGFyYWN0ZXJz
LCBpLCBsZW5ndGgsIGMpOwotICAgICAgICBzaWduZWQgY2hhciBzaWduZWRCeXRlID0gYzsKLSAg
ICAgICAgaWYgKChzaWduZWRCeXRlICYgMHhGN0ZGKSA9PSBjKQotICAgICAgICAgICAgYnl0ZXNb
cmVzdWx0TGVuZ3RoKytdID0gc2lnbmVkQnl0ZTsKKyAgICBmb3IgKGF1dG8gY2hhcmFjdGVyIDog
c3RyaW5nLmNvZGVQb2ludHMoKSkgeworICAgICAgICBpbnQ4X3Qgc2lnbmVkQnl0ZSA9IGNoYXJh
Y3RlcjsKKyAgICAgICAgaWYgKChzaWduZWRCeXRlICYgMHhGN0ZGKSA9PSBjaGFyYWN0ZXIpCisg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKHNpZ25lZEJ5dGUpOwogICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgIC8vIE5vIHdheSB0byBlbmNvZGUgdGhpcyBjaGFyYWN0ZXIgd2l0aCB4LXVzZXIt
ZGVmaW5lZC4KICAgICAgICAgICAgIFVuZW5jb2RhYmxlUmVwbGFjZW1lbnRBcnJheSByZXBsYWNl
bWVudDsKLSAgICAgICAgICAgIGludCByZXBsYWNlbWVudExlbmd0aCA9IFRleHRDb2RlYzo6Z2V0
VW5lbmNvZGFibGVSZXBsYWNlbWVudChjLCBoYW5kbGluZywgcmVwbGFjZW1lbnQpOwotICAgICAg
ICAgICAgcmVzdWx0Lmdyb3cocmVzdWx0TGVuZ3RoICsgcmVwbGFjZW1lbnRMZW5ndGggKyBsZW5n
dGggLSBpKTsKLSAgICAgICAgICAgIGJ5dGVzID0gcmVzdWx0LmRhdGEoKTsKLSAgICAgICAgICAg
IG1lbWNweShieXRlcyArIHJlc3VsdExlbmd0aCwgcmVwbGFjZW1lbnQsIHJlcGxhY2VtZW50TGVu
Z3RoKTsKLSAgICAgICAgICAgIHJlc3VsdExlbmd0aCArPSByZXBsYWNlbWVudExlbmd0aDsKKyAg
ICAgICAgICAgIGludCByZXBsYWNlbWVudExlbmd0aCA9IFRleHRDb2RlYzo6Z2V0VW5lbmNvZGFi
bGVSZXBsYWNlbWVudChjaGFyYWN0ZXIsIGhhbmRsaW5nLCByZXBsYWNlbWVudCk7CisgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKHJlcGxhY2VtZW50LmRhdGEoKSwgcmVwbGFjZW1lbnRMZW5ndGgp
OwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIENTdHJpbmcoYnl0ZXMsIHJlc3VsdExl
bmd0aCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotQ1N0cmluZyBUZXh0Q29kZWNVc2VyRGVm
aW5lZDo6ZW5jb2RlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBVbmVu
Y29kYWJsZUhhbmRsaW5nIGhhbmRsaW5nKQorVmVjdG9yPHVpbnQ4X3Q+IFRleHRDb2RlY1VzZXJE
ZWZpbmVkOjplbmNvZGUoU3RyaW5nVmlldyBzdHJpbmcsIFVuZW5jb2RhYmxlSGFuZGxpbmcgaGFu
ZGxpbmcpCiB7Ci0gICAgY2hhciogYnl0ZXM7Ci0gICAgQ1N0cmluZyBzdHJpbmcgPSBDU3RyaW5n
OjpuZXdVbmluaXRpYWxpemVkKGxlbmd0aCwgYnl0ZXMpOworICAgIHsKKyAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+IHJlc3VsdChzdHJpbmcubGVuZ3RoKCkpOworICAgICAgICBhdXRvKiBieXRlcyA9
IHJlc3VsdC5kYXRhKCk7CisKKyAgICAgICAgLy8gQ29udmVydCBhbmQgc2ltdWx0YW5lb3VzbHkg
ZG8gYSBjaGVjayB0byBzZWUgaWYgaXQncyBhbGwgQVNDSUkuCisgICAgICAgIFVDaGFyIG9yZWQg
PSAwOworICAgICAgICBmb3IgKGF1dG8gY2hhcmFjdGVyIDogc3RyaW5nLmNvZGVVbml0cygpKSB7
CisgICAgICAgICAgICAqYnl0ZXMrKyA9IGNoYXJhY3RlcjsKKyAgICAgICAgICAgIG9yZWQgfD0g
Y2hhcmFjdGVyOworICAgICAgICB9CiAKLSAgICAvLyBDb252ZXJ0IHRoZSBzdHJpbmcgYSBmYXN0
IHdheSBhbmQgc2ltdWx0YW5lb3VzbHkgZG8gYW4gZWZmaWNpZW50IGNoZWNrIHRvIHNlZSBpZiBp
dCdzIGFsbCBBU0NJSS4KLSAgICBVQ2hhciBvcmVkID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIFVDaGFyIGMgPSBjaGFyYWN0ZXJzW2ldOwot
ICAgICAgICBieXRlc1tpXSA9IGM7Ci0gICAgICAgIG9yZWQgfD0gYzsKKyAgICAgICAgaWYgKCEo
b3JlZCAmIDB4RkY4MCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAg
IGlmICghKG9yZWQgJiAweEZGODApKQotICAgICAgICByZXR1cm4gc3RyaW5nOwotCiAgICAgLy8g
SWYgaXQgd2Fzbid0IGFsbCBBU0NJSSwgY2FsbCB0aGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIG1v
cmUtY29tcGxleCBjYXNlcy4KLSAgICByZXR1cm4gZW5jb2RlQ29tcGxleFVzZXJEZWZpbmVkKGNo
YXJhY3RlcnMsIGxlbmd0aCwgaGFuZGxpbmcpOworICAgIHJldHVybiBlbmNvZGVDb21wbGV4VXNl
ckRlZmluZWQoc3RyaW5nLCBoYW5kbGluZyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRl
ZmluZWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmlu
ZWQuaAppbmRleCA1ODIxY2EzNzgxNTE5MWVjYjJhMGM1NzhmZTMyM2ZkODU0YWQ1ZTBiLi43NDRm
ZDMwMTNhZTFiMTZmMzZiYTcyYzg0NGZjOGQ1MzBlMjE1YjRmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VzZXJEZWZpbmVkLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5oCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE3IEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDIyICsy
MywyMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBUZXh0Q29kZWNVc2VyRGVm
aW5lZF9oCi0jZGVmaW5lIFRleHRDb2RlY1VzZXJEZWZpbmVkX2gKKyNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSAiVGV4dENvZGVjLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNz
IFRleHRDb2RlY1VzZXJEZWZpbmVkIDogcHVibGljIFRleHRDb2RlYyB7Ci0gICAgcHVibGljOgot
ICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVn
aXN0cmFyKTsKLSAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVn
aXN0cmFyKTsKK2NsYXNzIFRleHRDb2RlY1VzZXJEZWZpbmVkIDogcHVibGljIFRleHRDb2RlYyB7
CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5n
TmFtZVJlZ2lzdHJhcik7CisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVj
UmVnaXN0cmFyKTsKIAotICAgICAgICBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3Qg
bGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcikgb3Zl
cnJpZGU7Ci0gICAgICAgIENTdHJpbmcgZW5jb2RlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0
aCwgVW5lbmNvZGFibGVIYW5kbGluZykgb3ZlcnJpZGU7Ci0gICAgfTsKK3ByaXZhdGU6CisgICAg
U3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9v
bCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpIGZpbmFsOworICAgIFZlY3Rvcjx1aW50OF90
PiBlbmNvZGUoU3RyaW5nVmlldywgVW5lbmNvZGFibGVIYW5kbGluZykgZmluYWw7Cit9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBUZXh0Q29kZWNVc2VyRGVmaW5lZF9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHAKaW5kZXgg
N2RhYmE2N2UyMjQ4YmZkMjYzODkxZTM3YWZmOTljZDhjZTQ5MTNiYi4uMDMyN2E1YzBiNDUyMDIz
MGY0N2IyYTFiZmJiMDIzNTQzNmQ5ZjkxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dEVuY29kaW5nLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFw
QG55cG9wLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5j
LgogICoKQEAgLTQ4LDcgKzQ4LDcgQEAgVGV4dEVuY29kaW5nOjpUZXh0RW5jb2RpbmcoY29uc3Qg
Y2hhciogbmFtZSkKICAgICAsIG1fYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbChiYWNrc2xhc2hB
c0N1cnJlbmN5U3ltYm9sKCkpCiB7CiAgICAgLy8gQWxpYXNlcyBhcmUgdmFsaWQsIGJ1dCBub3Qg
InJlcGxhY2VtZW50IiBpdHNlbGYuCi0gICAgaWYgKG1fbmFtZSAmJiBpc1JlcGxhY2VtZW50RW5j
b2RpbmcobmFtZSkpCisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUs
ICJyZXBsYWNlbWVudCIpKQogICAgICAgICBtX25hbWUgPSBudWxscHRyOwogfQogCkBAIC01Nyw3
ICs1Nyw3IEBAIFRleHRFbmNvZGluZzo6VGV4dEVuY29kaW5nKGNvbnN0IFN0cmluZyYgbmFtZSkK
ICAgICAsIG1fYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbChiYWNrc2xhc2hBc0N1cnJlbmN5U3lt
Ym9sKCkpCiB7CiAgICAgLy8gQWxpYXNlcyBhcmUgdmFsaWQsIGJ1dCBub3QgInJlcGxhY2VtZW50
IiBpdHNlbGYuCi0gICAgaWYgKG1fbmFtZSAmJiBpc1JlcGxhY2VtZW50RW5jb2RpbmcobmFtZSkp
CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUsICJyZXBsYWNlbWVu
dCIpKQogICAgICAgICBtX25hbWUgPSBudWxscHRyOwogfQogCkBAIC02OSwxMyArNjksMTIgQEAg
U3RyaW5nIFRleHRFbmNvZGluZzo6ZGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5n
dGgsIGJvb2wgc3RvcE9uRXJyb3IsIGIKICAgICByZXR1cm4gbmV3VGV4dENvZGVjKCp0aGlzKS0+
ZGVjb2RlKGRhdGEsIGxlbmd0aCwgdHJ1ZSwgc3RvcE9uRXJyb3IsIHNhd0Vycm9yKTsKIH0KIAot
Q1N0cmluZyBUZXh0RW5jb2Rpbmc6OmVuY29kZShTdHJpbmdWaWV3IHRleHQsIFVuZW5jb2RhYmxl
SGFuZGxpbmcgaGFuZGxpbmcpIGNvbnN0CitWZWN0b3I8dWludDhfdD4gVGV4dEVuY29kaW5nOjpl
bmNvZGUoU3RyaW5nVmlldyB0ZXh0LCBVbmVuY29kYWJsZUhhbmRsaW5nIGhhbmRsaW5nKSBjb25z
dAogewotICAgIGlmICghbV9uYW1lKQotICAgICAgICByZXR1cm4gQ1N0cmluZygpOworICAgIGlm
ICghbV9uYW1lIHx8IHRleHQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9OwogCi0gICAg
aWYgKHRleHQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gIiI7CisgICAgLy8gRklYTUU6IENv
bnNpZGVyIGFkZGluZyBhIGZhc3QgY2FzZSBmb3IgQVNDSUkuCiAKICAgICAvLyBGSVhNRTogV2hh
dCdzIHRoZSByaWdodCBwbGFjZSB0byBkbyBub3JtYWxpemF0aW9uPwogICAgIC8vIEl0J3MgYSBs
aXR0bGUgc3RyYW5nZSB0byBkbyBpdCBpbnNpZGUgdGhlIGVuY29kZSBmdW5jdGlvbi4KQEAgLTg0
LDcgKzgzLDcgQEAgQ1N0cmluZyBUZXh0RW5jb2Rpbmc6OmVuY29kZShTdHJpbmdWaWV3IHRleHQs
IFVuZW5jb2RhYmxlSGFuZGxpbmcgaGFuZGxpbmcpIGNvbnMKICAgICBhdXRvIHVwY29udmVydGVk
Q2hhcmFjdGVycyA9IHRleHQudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAKICAgICBjb25zdCBV
Q2hhciogc291cmNlID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIHNpemVfdCBzb3VyY2VM
ZW5ndGggPSB0ZXh0Lmxlbmd0aCgpOworICAgIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCA9IHRleHQu
bGVuZ3RoKCk7CiAKICAgICBWZWN0b3I8VUNoYXI+IG5vcm1hbGl6ZWRDaGFyYWN0ZXJzOwogCkBA
IC0xMDQsNyArMTAzLDcgQEAgQ1N0cmluZyBUZXh0RW5jb2Rpbmc6OmVuY29kZShTdHJpbmdWaWV3
IHRleHQsIFVuZW5jb2RhYmxlSGFuZGxpbmcgaGFuZGxpbmcpIGNvbnMKICAgICAgICAgc291cmNl
TGVuZ3RoID0gbm9ybWFsaXplZExlbmd0aDsKICAgICB9CiAKLSAgICByZXR1cm4gbmV3VGV4dENv
ZGVjKCp0aGlzKS0+ZW5jb2RlKHNvdXJjZSwgc291cmNlTGVuZ3RoLCBoYW5kbGluZyk7CisgICAg
cmV0dXJuIG5ld1RleHRDb2RlYygqdGhpcyktPmVuY29kZShTdHJpbmdWaWV3IHsgc291cmNlLCBz
b3VyY2VMZW5ndGggfSwgaGFuZGxpbmcpOwogfQogCiBjb25zdCBjaGFyKiBUZXh0RW5jb2Rpbmc6
OmRvbU5hbWUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0RW5jb2RpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29k
aW5nLmgKaW5kZXggMjA0ZDQ3ODVjNWM4MmUzNDY4OTY5OTRiMTJkMTFkZDU4MTgxN2MzZi4uYWMx
MDlhYThhYWE0NDA4NDM2YWI1NTdmOGMxZjM4YzkzYjVjNGNmNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1
LDggKzI1LDggQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJUZXh0Q29kZWMuaCIKLSNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHBhbC90ZXh0L1VuZW5jb2RhYmxlSGFu
ZGxpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JU
IFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgc3RvcE9uRXJy
b3IsIGJvb2wmIHNhd0Vycm9yKSBjb25zdDsKICAgICBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIq
LCBzaXplX3QgbGVuZ3RoKSBjb25zdDsKLSAgICBDU3RyaW5nIGVuY29kZShTdHJpbmdWaWV3LCBV
bmVuY29kYWJsZUhhbmRsaW5nKSBjb25zdDsKKyAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlKFN0
cmluZ1ZpZXcsIFVuZW5jb2RhYmxlSGFuZGxpbmcpIGNvbnN0OwogCiAgICAgVUNoYXIgYmFja3Ns
YXNoQXNDdXJyZW5jeVN5bWJvbCgpIGNvbnN0OwogICAgIGJvb2wgaXNCeXRlQmFzZWRFbmNvZGlu
ZygpIGNvbnN0IHsgcmV0dXJuICFpc05vbkJ5dGVCYXNlZEVuY29kaW5nKCk7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAK
aW5kZXggNmU1NDIzMzNhYjAxMDBiMGM3Mzc4ZGRlNjEyODIwYTIzMmM4Yjc1YS4uOWJkMTczZjMz
MWFhMjYwZTM2MzFkMjQyMWIwMTBkMmMyMTY3NGFmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1v
YmlsZSwgSW5jLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzAsMjMgKzMwLDIxIEBACiAjaW5jbHVk
ZSAiVGV4dENvZGVjSUNVLmgiCiAjaW5jbHVkZSAiVGV4dENvZGVjTGF0aW4xLmgiCiAjaW5jbHVk
ZSAiVGV4dENvZGVjUmVwbGFjZW1lbnQuaCIKLSNpbmNsdWRlICJUZXh0Q29kZWNVc2VyRGVmaW5l
ZC5oIgogI2luY2x1ZGUgIlRleHRDb2RlY1VURjE2LmgiCiAjaW5jbHVkZSAiVGV4dENvZGVjVVRG
OC5oIgorI2luY2x1ZGUgIlRleHRDb2RlY1VzZXJEZWZpbmVkLmgiCiAjaW5jbHVkZSAiVGV4dEVu
Y29kaW5nLmgiCiAjaW5jbHVkZSA8bXV0ZXg+CiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4K
KyNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVu
dFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgog
I2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFz
Lmg+Ci0KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CiAKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIFdURjsK
IApAQCAtOTAsMTQgKzg4LDggQEAgc3RydWN0IFRleHRFbmNvZGluZ05hbWVIYXNoIHsKICAgICBz
dGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOwog
fTsKIAotc3RydWN0IFRleHRDb2RlY0ZhY3RvcnkgewotICAgIE5ld1RleHRDb2RlY0Z1bmN0aW9u
IGZ1bmN0aW9uOwotICAgIGNvbnN0IHZvaWQqIGFkZGl0aW9uYWxEYXRhOwotICAgIFRleHRDb2Rl
Y0ZhY3RvcnkoTmV3VGV4dENvZGVjRnVuY3Rpb24gZiA9IDAsIGNvbnN0IHZvaWQqIGQgPSAwKSA6
IGZ1bmN0aW9uKGYpLCBhZGRpdGlvbmFsRGF0YShkKSB7IH0KLX07Ci0KLXR5cGVkZWYgSGFzaE1h
cDxjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIFRleHRFbmNvZGluZ05hbWVIYXNoPiBUZXh0RW5j
b2RpbmdOYW1lTWFwOwotdHlwZWRlZiBIYXNoTWFwPGNvbnN0IGNoYXIqLCBUZXh0Q29kZWNGYWN0
b3J5PiBUZXh0Q29kZWNNYXA7Cit1c2luZyBUZXh0RW5jb2RpbmdOYW1lTWFwID0gSGFzaE1hcDxj
b25zdCBjaGFyKiwgY29uc3QgY2hhciosIFRleHRFbmNvZGluZ05hbWVIYXNoPjsKK3VzaW5nIFRl
eHRDb2RlY01hcCA9IEhhc2hNYXA8Y29uc3QgY2hhciosIE5ld1RleHRDb2RlY0Z1bmN0aW9uPjsK
IAogc3RhdGljIFN0YXRpY0xvY2sgZW5jb2RpbmdSZWdpc3RyeU11dGV4OwogCkBAIC0xMzgsMTEg
KzEzMCwxMSBAQCBzdGF0aWMgdm9pZCBhZGRUb1RleHRFbmNvZGluZ05hbWVNYXAoY29uc3QgY2hh
ciogYWxpYXMsIGNvbnN0IGNoYXIqIG5hbWUpCiAgICAgdGV4dEVuY29kaW5nTmFtZU1hcC0+YWRk
KGFsaWFzLCBhdG9taWNOYW1lKTsKIH0KIAotc3RhdGljIHZvaWQgYWRkVG9UZXh0Q29kZWNNYXAo
Y29uc3QgY2hhciogbmFtZSwgTmV3VGV4dENvZGVjRnVuY3Rpb24gZnVuY3Rpb24sIGNvbnN0IHZv
aWQqIGFkZGl0aW9uYWxEYXRhKQorc3RhdGljIHZvaWQgYWRkVG9UZXh0Q29kZWNNYXAoY29uc3Qg
Y2hhciogbmFtZSwgTmV3VGV4dENvZGVjRnVuY3Rpb24mJiBmdW5jdGlvbikKIHsKICAgICBjb25z
dCBjaGFyKiBhdG9taWNOYW1lID0gdGV4dEVuY29kaW5nTmFtZU1hcC0+Z2V0KG5hbWUpOwogICAg
IEFTU0VSVChhdG9taWNOYW1lKTsKLSAgICB0ZXh0Q29kZWNNYXAtPmFkZChhdG9taWNOYW1lLCBU
ZXh0Q29kZWNGYWN0b3J5KGZ1bmN0aW9uLCBhZGRpdGlvbmFsRGF0YSkpOworICAgIHRleHRDb2Rl
Y01hcC0+YWRkKGF0b21pY05hbWUsIFdURk1vdmUoZnVuY3Rpb24pKTsKIH0KIAogc3RhdGljIHZv
aWQgcHJ1bmVCbGFja2xpc3RlZENvZGVjcygpCkBAIC0yMzQsMjIgKzIyNiw2IEBAIGJvb2wgaXNK
YXBhbmVzZUVuY29kaW5nKGNvbnN0IGNoYXIqIGNhbm9uaWNhbEVuY29kaW5nTmFtZSkKICAgICBy
ZXR1cm4gY2Fub25pY2FsRW5jb2RpbmdOYW1lICYmIGphcGFuZXNlRW5jb2RpbmdzICYmIGphcGFu
ZXNlRW5jb2RpbmdzLT5jb250YWlucyhjYW5vbmljYWxFbmNvZGluZ05hbWUpOwogfQogCi1ib29s
IGlzUmVwbGFjZW1lbnRFbmNvZGluZyhjb25zdCBjaGFyKiBhbGlhcykKLXsKLSAgICBpZiAoIWFs
aWFzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoc3RybGVuKGFsaWFzKSAhPSAx
MSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuICFzdHJjYXNlY21wKGFsaWFz
LCAicmVwbGFjZW1lbnQiKTsKLX0KLQotYm9vbCBpc1JlcGxhY2VtZW50RW5jb2RpbmcoY29uc3Qg
U3RyaW5nJiBhbGlhcykKLXsKLSAgICByZXR1cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UoYWxpYXMsICJyZXBsYWNlbWVudCIpOwotfQotCiBib29sIHNob3VsZFNob3dCYWNrc2xhc2hB
c0N1cnJlbmN5U3ltYm9sSW4oY29uc3QgY2hhciogY2Fub25pY2FsRW5jb2RpbmdOYW1lKQogewog
ICAgIHJldHVybiBjYW5vbmljYWxFbmNvZGluZ05hbWUgJiYgbm9uQmFja3NsYXNoRW5jb2Rpbmdz
ICYmIG5vbkJhY2tzbGFzaEVuY29kaW5ncy0+Y29udGFpbnMoY2Fub25pY2FsRW5jb2RpbmdOYW1l
KTsKQEAgLTI3Miw5ICsyNDgsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8VGV4dENvZGVjPiBuZXdUZXh0
Q29kZWMoY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKICAgICBzdGQ6OmxvY2tfZ3VhcmQ8
U3RhdGljTG9jaz4gbG9jayhlbmNvZGluZ1JlZ2lzdHJ5TXV0ZXgpOwogCiAgICAgQVNTRVJUKHRl
eHRDb2RlY01hcCk7Ci0gICAgVGV4dENvZGVjRmFjdG9yeSBmYWN0b3J5ID0gdGV4dENvZGVjTWFw
LT5nZXQoZW5jb2RpbmcubmFtZSgpKTsKLSAgICBBU1NFUlQoZmFjdG9yeS5mdW5jdGlvbik7Ci0g
ICAgcmV0dXJuIGZhY3RvcnkuZnVuY3Rpb24oZW5jb2RpbmcsIGZhY3RvcnkuYWRkaXRpb25hbERh
dGEpOworICAgIGF1dG8gcmVzdWx0ID0gdGV4dENvZGVjTWFwLT5maW5kKGVuY29kaW5nLm5hbWUo
KSk7CisgICAgQVNTRVJUKHJlc3VsdCAhPSB0ZXh0Q29kZWNNYXAtPmVuZCgpKTsKKyAgICByZXR1
cm4gcmVzdWx0LT52YWx1ZSgpOwogfQogCiBjb25zdCBjaGFyKiBhdG9taWNDYW5vbmljYWxUZXh0
RW5jb2RpbmdOYW1lKGNvbnN0IGNoYXIqIG5hbWUpCkBAIC0yOTcsMTYgKzI3MywxNCBAQCBjb25z
dCBjaGFyKiBhdG9taWNDYW5vbmljYWxUZXh0RW5jb2RpbmdOYW1lKGNvbnN0IGNoYXIqIG5hbWUp
CiAgICAgcmV0dXJuIHRleHRFbmNvZGluZ05hbWVNYXAtPmdldChuYW1lKTsKIH0KIAotdGVtcGxh
dGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1jb25zdCBjaGFyKiBhdG9taWNDYW5vbmljYWxU
ZXh0RW5jb2RpbmdOYW1lKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHNpemVfdCBs
ZW5ndGgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgY29uc3QgY2hh
ciogYXRvbWljQ2Fub25pY2FsVGV4dEVuY29kaW5nTmFtZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBj
aGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQogewogICAgIGNoYXIgYnVmZmVyW21heEVuY29kaW5n
TmFtZUxlbmd0aCArIDFdOwogICAgIHNpemVfdCBqID0gMDsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIENoYXJhY3RlclR5cGUgYyA9IGNoYXJhY3Rl
cnNbaV07CiAgICAgICAgIGlmIChqID09IG1heEVuY29kaW5nTmFtZUxlbmd0aCkKLSAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICBidWZmZXJbaisrXSA9IGM7CisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgYnVmZmVyW2orK10gPSBjaGFyYWN0ZXJzW2ldOwogICAgIH0K
ICAgICBidWZmZXJbal0gPSAwOwogICAgIHJldHVybiBhdG9taWNDYW5vbmljYWxUZXh0RW5jb2Rp
bmdOYW1lKGJ1ZmZlcik7CkBAIC0zMTQsNyArMjg4LDcgQEAgY29uc3QgY2hhciogYXRvbWljQ2Fu
b25pY2FsVGV4dEVuY29kaW5nTmFtZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCBz
aXoKIAogY29uc3QgY2hhciogYXRvbWljQ2Fub25pY2FsVGV4dEVuY29kaW5nTmFtZShjb25zdCBT
dHJpbmcmIGFsaWFzKQogewotICAgIGlmICghYWxpYXMubGVuZ3RoKCkpCisgICAgaWYgKGFsaWFz
LmlzRW1wdHkoKSB8fCAhYWxpYXMuaXNBbGxBU0NJSSgpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgaWYgKGFsaWFzLmlzOEJpdCgpKQpAQCAtMzUzLDE5ICszMjcsNCBAQCBTdHJpbmcg
ZGVmYXVsdFRleHRFbmNvZGluZ05hbWVGb3JTeXN0ZW1MYW5ndWFnZSgpCiAjZW5kaWYKIH0KIAot
I2lmbmRlZiBOREVCVUcKLXZvaWQgZHVtcFRleHRFbmNvZGluZ05hbWVNYXAoKQotewotICAgIHVu
c2lnbmVkIHNpemUgPSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5zaXplKCk7Ci0gICAgZnByaW50Zihz
dGRlcnIsICJEdW1waW5nICV1IGVudHJpZXMgaW4gV2ViQ29yZTo6dGV4dEVuY29kaW5nTmFtZU1h
cC4uLlxuIiwgc2l6ZSk7Ci0KLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayhl
bmNvZGluZ1JlZ2lzdHJ5TXV0ZXgpOwotCi0gICAgVGV4dEVuY29kaW5nTmFtZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5iZWdpbigpOwotICAgIFRleHRFbmNv
ZGluZ05hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRleHRFbmNvZGluZ05hbWVNYXAtPmVu
ZCgpOwotICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGZwcmludGYoc3RkZXJy
LCAiJyVzJyA9PiAnJXMnXG4iLCBpdC0+a2V5LCBpdC0+dmFsdWUpOwotfQotI2VuZGlmCi0KIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuaAppbmRleCBiY2M0Yjg3NTY3YWNlMzNhMDIzNTA0MTI3
NWY4ZTliODY3ZTVmNmViLi45ZmMzOTY5OWE3YjllOWZkMDRlY2YzZGI3NjFiNzRiN2VjMThlNWIx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1Jl
Z2lzdHJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdS
ZWdpc3RyeS5oCkBAIC0yNiw3ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPG1l
bW9yeT4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM5LDIyICszOSwxNSBAQCBXRUJD
T1JFX0VYUE9SVCBzdGQ6OnVuaXF1ZV9wdHI8VGV4dENvZGVjPiBuZXdUZXh0Q29kZWMoY29uc3Qg
VGV4dEVuY29kaW5nJik7CiAKIC8vIE9ubHkgVGV4dEVuY29kaW5nIHNob3VsZCB1c2UgdGhlIGZv
bGxvd2luZyBmdW5jdGlvbnMgZGlyZWN0bHkuCiBjb25zdCBjaGFyKiBhdG9taWNDYW5vbmljYWxU
ZXh0RW5jb2RpbmdOYW1lKGNvbnN0IGNoYXIqIGFsaWFzKTsKLXRlbXBsYXRlIDx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPgotY29uc3QgY2hhciogYXRvbWljQ2Fub25pY2FsVGV4dEVuY29kaW5nTmFt
ZShjb25zdCBDaGFyYWN0ZXJUeXBlKiwgc2l6ZV90KTsKIGNvbnN0IGNoYXIqIGF0b21pY0Nhbm9u
aWNhbFRleHRFbmNvZGluZ05hbWUoY29uc3QgU3RyaW5nJik7CiBib29sIG5vRXh0ZW5kZWRUZXh0
RW5jb2RpbmdOYW1lVXNlZCgpOwogYm9vbCBpc0phcGFuZXNlRW5jb2RpbmcoY29uc3QgY2hhciog
Y2Fub25pY2FsRW5jb2RpbmdOYW1lKTsKIGJvb2wgc2hvdWxkU2hvd0JhY2tzbGFzaEFzQ3VycmVu
Y3lTeW1ib2xJbihjb25zdCBjaGFyKiBjYW5vbmljYWxFbmNvZGluZ05hbWUpOwotYm9vbCBpc1Jl
cGxhY2VtZW50RW5jb2RpbmcoY29uc3QgY2hhciogYWxpYXMpOwotYm9vbCBpc1JlcGxhY2VtZW50
RW5jb2RpbmcoY29uc3QgU3RyaW5nJiBhbGlhcyk7CiAKIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBk
ZWZhdWx0VGV4dEVuY29kaW5nTmFtZUZvclN5c3RlbUxhbmd1YWdlKCk7CisKICNpZiBQTEFURk9S
TShDT0NPQSkKIFdFQkNPUkVfRVhQT1JUIENGU3RyaW5nRW5jb2Rpbmcgd2ViRGVmYXVsdENGU3Ry
aW5nRW5jb2RpbmcoKTsKICNlbmRpZgogCi0jaWZuZGVmIE5ERUJVRwotdm9pZCBkdW1wVGV4dEVu
Y29kaW5nTmFtZU1hcCgpOwotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUVW5pY29kZVNvcnQuY3BwIGIvU291cmNlL1dl
YkNvcmUveG1sL1hTTFRVbmljb2RlU29ydC5jcHAKaW5kZXggYzJkODU2ZWY2YjE1NTQ1MGNjMmNj
ODFhMmExYjA0ZmYzZWE0YTk2Yi4uZjllNTZiOWIyYWZjYTVhNzA3NzdiMzAwNjFkODIzZGQ2M2I4
Mzg0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hTTFRVbmljb2RlU29ydC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hTTFRVbmljb2RlU29ydC5jcHAKQEAgLTMzLDcgKzMz
LDYgQEAKIAogI2luY2x1ZGUgPGxpYnhzbHQvdGVtcGxhdGVzLmg+CiAjaW5jbHVkZSA8bGlieHNs
dC94c2x0dXRpbHMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NvbGxhdG9yLmg+CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5jcHAKaW5kZXggOGU2
YjgzNTRjZjhjZTIxMWUwNzYyNzUxNzYyZWEwNGE1ZDcyODhmNy4uMWYyOGE4ZWJhNTlkZjFlNmUy
MWZjYzg3NWUwZjQ5MGJhYTYwODg1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL3Bh
cnNlci9YTUxEb2N1bWVudFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNl
ci9YTUxEb2N1bWVudFBhcnNlci5jcHAKQEAgLTUxLDcgKzUxLDYgQEAKICNpbmNsdWRlICJUZXh0
UmVzb3VyY2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiVHJlZURlcHRoTGltaXQuaCIKICNpbmNsdWRl
IDx3dGYvUmVmLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0
Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAppbmRl
eCBhMzdkNjE1MTZhNjI4MDBmNWE0MzFiODkxYzcyNzM0ZjA5MDM1YmNjLi4wYTkyMmU3ZjExZGI5
ZTI5NzFlYzE3N2ZiYWI3ZmY1ODUxOTY3NTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94
bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCkBAIC01Myw3ICs1Myw2
IEBACiAjaW5jbHVkZSAiWE1MTlNOYW1lcy5oIgogI2luY2x1ZGUgIlhNTERvY3VtZW50UGFyc2Vy
U2NvcGUuaCIKICNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg+Ci0jaW5jbHVkZSA8
d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VURjguaD4KIAogI2lm
IEVOQUJMRShYU0xUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvTmV0c2NhcGVCcm93c2VyRnVuY3MuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVCcm93c2VyRnVuY3MuY3BwCmluZGV4IDZh
NGRhYjAxNjQ4ODI4OWM5YWE3NmU4ZTNhNWVhY2YxODQzOWE0OWEuLjNiZTRmNDhhZDI5OTFiZTgy
ODY4NWE2NTNlNjQxZmYxMjhhMjJiZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlQnJvd3NlckZ1bmNzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZUJyb3dzZXJGdW5j
cy5jcHAKQEAgLTg4MCw5ICs4ODAsOSBAQCBzdGF0aWMgTlBFcnJvciBOUE5fU2V0VmFsdWVGb3JV
UkwoTlBQIG5wcCwgTlBOVVJMVmFyaWFibGUgdmFyaWFibGUsIGNvbnN0IGNoYXIqCiBzdGF0aWMg
Ym9vbCBpbml0aWFsaXplUHJvdGVjdGlvblNwYWNlKGNvbnN0IGNoYXIqIHByb3RvY29sLCBjb25z
dCBjaGFyKiBob3N0LCBpbnQgcG9ydCwgY29uc3QgY2hhciogc2NoZW1lLCBjb25zdCBjaGFyKiBy
ZWFsbSwgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UpCiB7CiAgICAgUHJvdGVjdGlv
blNwYWNlU2VydmVyVHlwZSBzZXJ2ZXJUeXBlOwotICAgIGlmICghc3RyY2FzZWNtcChwcm90b2Nv
bCwgImh0dHAiKSkKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocHJvdG9j
b2wsICJodHRwIikpCiAgICAgICAgIHNlcnZlclR5cGUgPSBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJI
VFRQOwotICAgIGVsc2UgaWYgKCFzdHJjYXNlY21wKHByb3RvY29sLCAiaHR0cHMiKSkKKyAgICBl
bHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwcm90b2NvbCwgImh0dHBzIikp
CiAgICAgICAgIHNlcnZlclR5cGUgPSBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJIVFRQUzsKICAgICBl
bHNlIHsKICAgICAgICAgLy8gV2Ugb25seSBjYXJlIGFib3V0IGh0dHAgYW5kIGh0dHBzLgpAQCAt
ODkxLDkgKzg5MSw5IEBAIHN0YXRpYyBib29sIGluaXRpYWxpemVQcm90ZWN0aW9uU3BhY2UoY29u
c3QgY2hhciogcHJvdG9jb2wsIGNvbnN0IGNoYXIqIGhvc3QsIGluCiAKICAgICBQcm90ZWN0aW9u
U3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZSBhdXRoZW50aWNhdGlvblNjaGVtZSA9IFByb3RlY3Rp
b25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lRGVmYXVsdDsKICAgICBpZiAoc2VydmVyVHlwZSA9
PSBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJIVFRQKSB7Ci0gICAgICAgIGlmICghc3RyY2FzZWNtcChz
Y2hlbWUsICJiYXNpYyIpKQorICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2Uoc2NoZW1lLCAiYmFzaWMiKSkKICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uU2NoZW1lID0g
UHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVIVFRQQmFzaWM7Ci0gICAgICAgIGVs
c2UgaWYgKCFzdHJjbXAoc2NoZW1lLCAiZGlnZXN0IikpCisgICAgICAgIGVsc2UgaWYgKGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHNjaGVtZSwgImRpZ2VzdCIpKQogICAgICAgICAgICAg
YXV0aGVudGljYXRpb25TY2hlbWUgPSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVt
ZUhUVFBEaWdlc3Q7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9IaXN0b3J5L0hpc3RvcnlQcm9wZXJ0eUxpc3QubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9IaXN0b3J5L0hpc3RvcnlQcm9wZXJ0eUxpc3QubW0KaW5kZXggMDYwYTNiZjc4NzFkMjFhN2Vk
NThlZDE1OTJlMDhhMGZhMTY1ODEyZC4uNDc5MTZlNzgxYTI0MzA0MWUxZDU4MjQ4YWJmYWVhYWMw
YzU3YmI1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlzdG9yeS9IaXN0
b3J5UHJvcGVydHlMaXN0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3Rvcnkv
SGlzdG9yeVByb3BlcnR5TGlzdC5tbQpAQCAtMjcsNyArMjcsNiBAQAogCiAjaW1wb3J0ICJXZWJI
aXN0b3J5SXRlbUludGVybmFsLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0hpc3RvcnlJdGVtLmg+Ci0j
aW1wb3J0IDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYkJhc2VOZXRz
Y2FwZVBsdWdpblZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYkJh
c2VOZXRzY2FwZVBsdWdpblZpZXcubW0KaW5kZXggNzRlNzljMGRlNGJjMWFmZTBlMTg2M2MyMDMw
ODlkNjdkYmY4ZTRmMi4uOGU4OTU0YjlhOTdlMzcxODQ0NDBlZWU1MzkwZDM0ZmQyY2NiZmZlNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJCYXNlTmV0c2Nh
cGVQbHVnaW5WaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2Vi
QmFzZU5ldHNjYXBlUGx1Z2luVmlldy5tbQpAQCAtODU0LDExICs4NTQsOSBAQCBAZW5kCiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCi1ib29sIGdldEF1dGhlbnRpY2F0aW9uSW5mbyhjb25zdCBjaGFy
KiBwcm90b2NvbFN0ciwgY29uc3QgY2hhciogaG9zdFN0ciwgaW50MzJfdCBwb3J0LCBjb25zdCBj
aGFyKiBzY2hlbWVTdHIsIGNvbnN0IGNoYXIqIHJlYWxtU3RyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ1N0cmluZyYgdXNlcm5hbWUsIENTdHJpbmcmIHBhc3N3b3JkKQorYm9vbCBnZXRB
dXRoZW50aWNhdGlvbkluZm8oY29uc3QgY2hhciogcHJvdG9jb2xTdHIsIGNvbnN0IGNoYXIqIGhv
c3RTdHIsIGludDMyX3QgcG9ydCwgY29uc3QgY2hhciogc2NoZW1lU3RyLCBjb25zdCBjaGFyKiBy
ZWFsbVN0ciwgQ1N0cmluZyYgdXNlcm5hbWUsIENTdHJpbmcmIHBhc3N3b3JkKQogewotICAgIGlm
IChzdHJjYXNlY21wKHByb3RvY29sU3RyLCAiaHR0cCIpICE9IDAgJiYgCi0gICAgICAgIHN0cmNh
c2VjbXAocHJvdG9jb2xTdHIsICJodHRwcyIpICE9IDApCisgICAgaWYgKCFlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZShwcm90b2NvbFN0ciwgImh0dHAiKSAmJiAhZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2UocHJvdG9jb2xTdHIsICJodHRwcyIpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBOU1N0cmluZyAqaG9zdCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmlu
Zzpob3N0U3RyXTsKQEAgLTg3NCwxMCArODcyLDEwIEBAIGJvb2wgZ2V0QXV0aGVudGljYXRpb25J
bmZvKGNvbnN0IGNoYXIqIHByb3RvY29sU3RyLCBjb25zdCBjaGFyKiBob3N0U3RyLCBpbnQzMl90
CiAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwogICAgIAogICAgIE5TU3RyaW5n
ICphdXRoZW50aWNhdGlvbk1ldGhvZCA9IE5TVVJMQXV0aGVudGljYXRpb25NZXRob2REZWZhdWx0
OwotICAgIGlmICghc3RyY2FzZWNtcChwcm90b2NvbFN0ciwgImh0dHAiKSkgewotICAgICAgICBp
ZiAoIXN0cmNhc2VjbXAoc2NoZW1lU3RyLCAiYmFzaWMiKSkKKyAgICBpZiAoZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UocHJvdG9jb2xTdHIsICJodHRwIikpIHsKKyAgICAgICAgaWYgKGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHNjaGVtZVN0ciwgImJhc2ljIikpCiAgICAgICAg
ICAgICBhdXRoZW50aWNhdGlvbk1ldGhvZCA9IE5TVVJMQXV0aGVudGljYXRpb25NZXRob2RIVFRQ
QmFzaWM7Ci0gICAgICAgIGVsc2UgaWYgKCFzdHJjYXNlY21wKHNjaGVtZVN0ciwgImRpZ2VzdCIp
KQorICAgICAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzY2hlbWVT
dHIsICJkaWdlc3QiKSkKICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uTWV0aG9kID0gTlNVUkxB
dXRoZW50aWNhdGlvbk1ldGhvZEhUVFBEaWdlc3Q7CiAgICAgfQogICAgIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbSBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KaW5kZXggZTA0YzRh
MWY4ZTAyMDc4MmVjZDY2YTE3NTZmOTE4MDUxOTJkNWJlZi4uYTY3MWIzNjc5YjlkODdlMTQ1Zjlh
MDk3ODUxM2M5NzIzYmE3N2JhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCkBAIC03NiwxNCArNzYsMTQgQEAgc3RhdGljIE5TTXV0
YWJsZURpY3Rpb25hcnkgKndlYlByZWZlcmVuY2VzSW5zdGFuY2VzOwogCiBzdGF0aWMgdW5zaWdu
ZWQgd2ViUHJlZmVyZW5jZXNJbnN0YW5jZUNvdW50V2l0aFByaXZhdGVCcm93c2luZ0VuYWJsZWQ7
CiAKLXN0YXRpYyBib29sIGNvbnRhaW5zKGNvbnN0IGNoYXIqIGNvbnN0IGFycmF5W10sIGludCBj
b3VudCwgY29uc3QgY2hhciogaXRlbSkKK3RlbXBsYXRlPHVuc2lnbmVkIHNpemU+IHN0YXRpYyBi
b29sIGNvbnRhaW5zKGNvbnN0IGNoYXIqIGNvbnN0ICgmYXJyYXkpW3NpemVdLCBjb25zdCBjaGFy
KiBpdGVtKQogewogICAgIGlmICghaXRlbSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICBpZiAoIXN0cmNhc2VjbXAo
YXJyYXlbaV0sIGl0ZW0pKQorICAgIGZvciAoYXV0byogc3RyaW5nIDogYXJyYXkpIHsKKyAgICAg
ICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLCBpdGVtKSkKICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE0MCwxMSAr
MTQwLDExIEBAIHN0YXRpYyBXZWJDYWNoZU1vZGVsIGNhY2hlTW9kZWxGb3JNYWluQnVuZGxlKHZv
aWQpCiAgICAgICAgIH07CiAKICAgICAgICAgY29uc3QgY2hhciogYnVuZGxlSUQgPSBbW1tOU0J1
bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsKLSAgICAgICAg
aWYgKGNvbnRhaW5zKGRvY3VtZW50Vmlld2VySURzLCBzaXplb2YoZG9jdW1lbnRWaWV3ZXJJRHMp
IC8gc2l6ZW9mKGRvY3VtZW50Vmlld2VySURzWzBdKSwgYnVuZGxlSUQpKQorICAgICAgICBpZiAo
Y29udGFpbnMoZG9jdW1lbnRWaWV3ZXJJRHMsIGJ1bmRsZUlEKSkKICAgICAgICAgICAgIHJldHVy
biBXZWJDYWNoZU1vZGVsRG9jdW1lbnRWaWV3ZXI7Ci0gICAgICAgIGlmIChjb250YWlucyhkb2N1
bWVudEJyb3dzZXJJRHMsIHNpemVvZihkb2N1bWVudEJyb3dzZXJJRHMpIC8gc2l6ZW9mKGRvY3Vt
ZW50QnJvd3NlcklEc1swXSksIGJ1bmRsZUlEKSkKKyAgICAgICAgaWYgKGNvbnRhaW5zKGRvY3Vt
ZW50QnJvd3NlcklEcywgYnVuZGxlSUQpKQogICAgICAgICAgICAgcmV0dXJuIFdlYkNhY2hlTW9k
ZWxEb2N1bWVudEJyb3dzZXI7Ci0gICAgICAgIGlmIChjb250YWlucyhwcmltYXJ5V2ViQnJvd3Nl
cklEcywgc2l6ZW9mKHByaW1hcnlXZWJCcm93c2VySURzKSAvIHNpemVvZihwcmltYXJ5V2ViQnJv
d3NlcklEc1swXSksIGJ1bmRsZUlEKSkKKyAgICAgICAgaWYgKGNvbnRhaW5zKHByaW1hcnlXZWJC
cm93c2VySURzLCBidW5kbGVJRCkpCiAgICAgICAgICAgICByZXR1cm4gV2ViQ2FjaGVNb2RlbFBy
aW1hcnlXZWJCcm93c2VyOwogCiAgICAgICAgIGJvb2wgaXNMaW5rZWRBZ2FpbnN0V2ViS2l0ID0g
V2ViS2l0TGlua2VkT25PckFmdGVyKDApOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIv
VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDAwZmE1NTg3YmQ3NTZlNThhODA3NTFiMGMwNDBjMzZhYjI0
ZDJmYjcuLmUyOWU4ODE1OWVmYzgxZmQ2YzdmZWI4NTcxZTdkNDQwZmJjYTZhYzQgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBA
QAorMjAxNy0xMS0yNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAg
TW9kZXJuaXplIHNvbWUgYXNwZWN0cyBvZiB0ZXh0IGNvZGVjcywgZWxpbWluYXRlIFdlYktpdCB1
c2Ugb2Ygc3RyY2FzZWNtcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTgwMDA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0Q0cuY3BwOiBSZW1v
dmVkIGluY2x1ZGUgb2YgU3RyaW5nRXh0cmFzLmguCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcDogRGl0dG8uCisKIDIwMTctMTEtMjQgIE1hcmsgTGFt
ICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgdW5zYWZlIGpzYyBzaGVsbCB0
ZXN0IGZ1bmN0aW9ucyB0byB0aGUgJHZtIG9iamVjdC4KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jZy9QaXhlbER1bXBTdXBwb3J0Q0cuY3BwCmluZGV4IDhhY2I5YTcwMWYxOGQ5YjE2YWIzOWQ2
ZWQ5Y2I2ODVmM2UyZTg4NTEuLmFiZjdmODk4N2Q3ODZiNjZjNDRiMWExMWNiMzBmZmI4NmY1NTkw
MjMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRD
Ry5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3VwcG9ydENHLmNw
cApAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3
dGYvU3RyaW5nRXh0cmFzLmg+CiAKICNpZiBQTEFURk9STShXSU4pCiAjaW5jbHVkZSAiTUQ1Lmgi
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cu
Y3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcAppbmRl
eCAzM2E1YjgxOWE5YzVlY2Q0YzQ5YjcxNTU0ZDI3Y2MwNjU4MjA2NTY2Li43NjAzZDM3N2U5Y2Nl
NzY3YWE1MTc5MDYxNzc5ZWJjMGVlNTVjNjg1IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvY2cvVGVzdEludm9jYXRpb25DRy5jcHAKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxX
ZWJLaXQvV0tJbWFnZUNHLmg+CiAjaW5jbHVkZSA8d3RmL01ENS5oPgogI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAKICNpZiBQTEFURk9S
TShNQUMpICYmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8TGF1bmNoU2VydmljZXMvVVRDb3Jl
VHlwZXMuaD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327565</attachid>
            <date>2017-11-24 17:58:40 -0800</date>
            <delta_ts>2017-11-27 21:49:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-180009-20171124175839.patch</filename>
            <type>text/plain</type>
            <size>168905</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI1MTQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
ZDI5MDBhNTA0NTk3OGNkMjJmMDY5MWUxOTI3Y2ZhYmM3YWVjOGEwLi4zODMxODRjYmMzMjE3MWEy
ZTdhM2UwYWVhM2U1ZGYzNjY2OWU3ZTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMiBAQAorMjAxNy0xMS0yNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgTW9kZXJuaXplIHNvbWUgYXNwZWN0cyBvZiB0ZXh0IGNvZGVjcywgZWxpbWluYXRl
IFdlYktpdCB1c2Ugb2Ygc3RyY2FzZWNtcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMDA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwOiBSZW1vdmVkIGlu
Y2x1ZGUgb2YgU3RyaW5nRXh0cmFzLmguCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cDogRGl0dG8uCisgICAgICAgICogYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHA6IERpdHRv
LgorICAgICAgICAqIHJ1bnRpbWUvQ29uZmlnRmlsZS5jcHA6IERpdHRvLgorICAgICAgICAqIHJ1
bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHA6IERpdHRvLgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhp
bmdUeXBlLmNwcDogRGl0dG8uCisgICAgICAgICogcnVudGltZS9KU0NKU1ZhbHVlLmNwcDogRGl0
dG8uCisgICAgICAgICogcnVudGltZS9KU0RhdGVNYXRoLmNwcDogRGl0dG8uCisgICAgICAgICog
cnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHA6IERpdHRvLgorICAgICAgICAqIHJ1
bnRpbWUvT3B0aW9ucy5jcHA6IERpdHRvLgorICAgICAgICAoSlNDOjpwYXJzZSk6IFVzZSBlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSBpbnN0ZWFkIG9mIHN0cmNhc2VjbXAuCisKIDIwMTct
MTEtMjQgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBDTG9v
cDo6c2FuaXRpemVTdGFjaygpIGJ1ZyB3aGVyZSBpdCB3YXMgY2xlYXJpbmcgcGFydCBvZiB0aGUg
SlMgc3RhY2sgaW4gdXNlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZwppbmRleCA0ZjY3MGYzMDgyN2MzNDlkMzM1MDljNDcxMWY4NzMyYmQ4
YWM5OTI0Li44MTYwOTMzNDY5MDJlYWVjMWZhMGMxZDkxYWE2OGVhMWM1NzllYzM3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDM5IEBACisyMDE3LTExLTI0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4K
KworICAgICAgICBNb2Rlcm5pemUgc29tZSBhc3BlY3RzIG9mIHRleHQgY29kZWNzLCBlbGltaW5h
dGUgV2ViS2l0IHVzZSBvZiBzdHJjYXNlY21wCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xODAwMDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9Bc3NlcnRpb25zLmNwcDogUmVtb3ZlZCBpbmNsdWRl
IG9mIFN0cmluZ0V4dHJhcy5oLgorICAgICAgICAoV1RGTG9nQ2hhbm5lbEJ5TmFtZSk6IFVzZSBl
cXVhbElnbm9yaW5nQVNDSUlDYXNlIGluc3RlYWQgb2Ygc3RyY2FzZWNtcC4KKyAgICAgICAgKiB3
dGYvRGF0ZU1hdGguY3BwOiBSZW1vdmVkIGluY2x1ZGUgb2YgU3RyaW5nRXh0cmFzLmguCisgICAg
ICAgICogd3RmL01ENS5jcHA6IERpdHRvLiBBbHNvIHJlbW92ZWQgaW5jbHVkZSBvZiBDU3RyaW5n
LmguCisgICAgICAgICogd3RmL1NIQTEuY3BwOiBEaXR0by4KKworICAgICAgICAqIHd0Zi9TdHJp
bmdFeHRyYXMuaDoKKyAgICAgICAgKHN0cm5jYXNlY21wKTogRGVsZXRlZC4KKyAgICAgICAgKHN0
cmNhc2VjbXApOiBEZWxldGVkLgorCisgICAgICAgICogd3RmL1N0cmluZ1ByaW50U3RyZWFtLmNw
cDogUmVtb3ZlZCBpbmNsdWRlIG9mIFN0cmluZ0V4dHJhcy5oLgorICAgICAgICAqIHd0Zi90ZXh0
L0Jhc2U2NC5jcHA6IERpdHRvLgorCisgICAgICAgICogd3RmL3RleHQvTGluZUVuZGluZy5jcHA6
CisgICAgICAgIChXVEY6Om5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9MRik6IFJlcGxhY2VkIG9sZCBt
b3JlIGdlbmVyYWwgcHVycG9zZSBmdW5jdGlvbiB3aXRoCisgICAgICAgIHRoaXMuIENoYW5nZWQg
YXJndW1lbnQgdHlwZSB0byB2ZWN0b3IgYW5kIHVzZWQgYW4gcnZhbHVlIHJlZmVyZW5jZSBhbmQg
cmV0dXJuIHZhbHVlLgorICAgICAgICBBbHNvIGZpeGVkIHNvbWUgc21hbGwgbG9naWMgZXJyb3Jz
LgorICAgICAgICAoV1RGOjpub3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JMRik6IERpdHRvLgorICAg
ICAgICAoV1RGOjpub3JtYWxpemVMaW5lRW5kaW5nc1RvTmF0aXZlKTogVXBkYXRlZCBmb3IgYWJv
dmUgY2hhbmdlcy4KKyAgICAgICAgKiB3dGYvdGV4dC9MaW5lRW5kaW5nLmg6IFVwZGF0ZWQgZm9y
IGFib3ZlIGNoYW5nZXMuCisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdDb21tb24uaDoKKyAg
ICAgICAgKFdURjo6ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSk6IEFkZGVkIG92ZXJsb2FkIGZvciBj
b25zdCBjaGFyKi4KKyAgICAgICAgKFdURjo6ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Up
OiBEaXR0by4KKworICAgICAgICAqIHd0Zi90ZXh0L1RleHRTdHJlYW0uY3BwOiBSZW1vdmVkIGlu
Y2x1ZGUgb2YgU3RyaW5nRXh0cmFzLmguCisgICAgICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmNw
cDogRGl0dG8uCisgICAgICAgICogd3RmL3VuaWNvZGUvaWN1L0NvbGxhdG9ySUNVLmNwcDogRGl0
dG8uCisKIDIwMTctMTEtMjMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIEZpeCBkaWN0aW9uYXJ5IGxlYWsgaW4gbG9va3VwLCBjb252ZXJ0IEZpbmRPcHRpb25zIHRv
IE9wdGlvblNldCwgdHdlYWsgY29kZSBzdHlsZSBuZWFyYnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxMDFkMDM1
YTQxOGYwOWE1OTZjMWI5ODBkZWIzOWZmMjNhNGE3MDZkLi4zMDNjMDRkOTIxNjJiNzc0YTU1NDVm
ZjA1ZmE3Mzk0ZjZhYWZkMDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTg1IEBACisyMDE3LTEx
LTI0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNb2Rlcm5pemUg
c29tZSBhc3BlY3RzIG9mIHRleHQgY29kZWNzLCBlbGltaW5hdGUgV2ViS2l0IHVzZSBvZiBzdHJj
YXNlY21wCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
ODAwMDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IE1vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9k
eTo6Y29uc3VtZUFzU3RyZWFtKTogVXBkYXRlIHRvIHVzZSBzaXplIHNpbmNlIHRoZSByZXN1bHQg
b2YKKyAgICAgICAgZW5jb2RlIGlzIG5vdyBWZWN0b3IgcmF0aGVyIHRoYW4gQ1N0cmluZy4KKyAg
ICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6Y29uc3VtZVRleHQpOiBSZW1vdmVkIG5vdy11bm5l
ZWRlZCB0eXBlIGNhc3QuCisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OnRha2UpOiBQYXNz
IHJlc3VsdCBvZiBlbmNvZGUgZGlyZWN0bHkgdG8gU2hhcmVkQnVmZmVyOjpjcmVhdGUuCisKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RGVmbGF0ZXIuY3BwOiBSZW1vdmVk
IGluY2x1ZGUgb2YgU3RyaW5nRXh0cmFzLmguCisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRz
L1dlYlNvY2tldEhhbmRzaGFrZS5jcHA6IERpdHRvLgorICAgICAgICAqIGJyaWRnZS9JZGVudGlm
aWVyUmVwLmg6IERpdHRvLgorICAgICAgICAqIGJyaWRnZS9jL2NfaW5zdGFuY2UuY3BwOiBEaXR0
by4KKworICAgICAgICAqIGZpbGVhcGkvQmxvYkJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QmxvYkJ1aWxkZXI6OmFwcGVuZCk6IFVwZGF0ZWQgZm9yIENTdHJpbmcgdG8gVmVjdG9yIGNo
YW5nZS4KKworICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWV0YUNoYXJzZXRQYXJzZXI6OmNoZWNrRm9yTWV0YUNo
YXJzZXQpOiBDYWxsIHRoZSBkZWNvZGUgZnVuY3Rpb24KKyAgICAgICAgd2l0aCBhbGwgdGhlIGFy
Z3VtZW50cyBzaW5jZSB0aGVyZSBpcyBvbmx5IG9uZSBkZWNvZGUgZnVuY3Rpb24gbm93LgorCisg
ICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjb21wdXRlQ29udGVudFNlY3VyaXR5UG9saWN5U0hBMjU2SGFzaCk6IFVwZGF0
ZWQgZm9yIENTdHJpbmcgdG8gVmVjdG9yIGNoYW5nZS4KKworICAgICAgICAqIGxvYWRlci9SZXNv
dXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3J5cHRvZ3Jh
cGhpY0RpZ2VzdEZvckJ5dGVzKTogQ2hhbmdlZCBhcmd1bWVudCB0eXBlIHRvIGNvbnN0IHZvaWQq
LgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuaDogRGl0dG8u
CisKKyAgICAgICAgKiBsb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpUZXh0UmVzb3VyY2VEZWNvZGVyKTogTW92ZWQg
aW5pdGlhbGl6YXRpb24gb2YgZGF0YQorICAgICAgICBtZW1iZXJzIHRvIGNsYXNzIGRlZmluaXRp
b24uCisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUpOiBNb3Zl
ZCBmdW5jdGlvbiBib2R5IGhlcmUgZnJvbSB0aGUgaGVhZGVyLgorICAgICAgICAoV2ViQ29yZTo6
VGV4dFJlc291cmNlRGVjb2Rlcjo6c2V0RW5jb2RpbmcpOiBVc2UgZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UuCisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpzaG91
bGRBdXRvRGV0ZWN0IGNvbnN0KTogVXBkYXRlZCBmb3IgbmFtZSBjaGFuZ2UKKyAgICAgICAgdG8g
bV9wYXJlbnRGcmFtZUF1dG9EZXRlY3RlZEVuY29kaW5nLCB3aGljaCBvYnZpYXRlcyBhIGNvbW1l
bnQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpmbHVzaCk6IERpdHRv
LgorICAgICAgICAqIGxvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmg6IE1vdmVkIGluaXRpYWxp
emF0aW9uIGhlcmUgZnJvbSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgTW92ZWQgZnVuY3Rpb24gYm9k
aWVzIG91dCBvZiB0aGUgY2xhc3MuIFJlbmFtZWQgbV9oaW50RW5jb2RpbmcgdG8KKyAgICAgICAg
bV9wYXJlbnRGcmFtZUF1dG9EZXRlY3RlZEVuY29kaW5nIHNpbmNlIHRoYXQgaXMgYSBtb3JlIGFj
Y3VyYXRlIGRlc2NyaXB0aW9uLgorCisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlLmNwcDogUmVtb3ZlZCBpbmNsdWRlIG9mIFN0cmluZ0V4dHJhcy5oLgor
ICAgICAgICAqIHBhZ2UvRnJhbWVUcmVlLmNwcDogRGl0dG8uCisgICAgICAgICogcGFnZS9QYWdl
U2VyaWFsaXplci5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNlcmlhbGl6ZXI6
OnNlcmlhbGl6ZUZyYW1lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYWdlU2VyaWFsaXpl
cjo6c2VyaWFsaXplQ1NTU3R5bGVTaGVldCk6IERpdHRvLgorCisgICAgICAgICogcGFnZS9jc3Av
Q29udGVudFNlY3VyaXR5UG9saWN5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1
cml0eVBvbGljeTo6ZmluZEhhc2hPZkNvbnRlbnRJblBvbGljaWVzIGNvbnN0KTogUGFzcyByZXN1
bHQKKyAgICAgICAgb2YgZW5jb2RlIGRpcmVjdGx5IHRvIFN0cmluZ0J1ZmZlcjo6Y3JlYXRlLgor
CisgICAgICAgICogcGxhdGZvcm0vRmlsZUhhbmRsZS5jcHA6IFJlbW92ZWQgaW5jbHVkZSBvZiBT
dHJpbmdFeHRyYXMuaC4KKworICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZSk6IEFkZGVkIGFuIG92ZXJsb2Fk
IHRoYXQgdGFrZXMgVmVjdG9yPHVpbnQ4X3Q+LgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1
ZmZlci5oOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL1VSTFBhcnNlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpVUkxQYXJzZXI6OmVuY29kZVF1ZXJ5KTogVXBkYXRlZCBzaW5jZSBlbmNv
ZGUgcmV0dXJucyBhIFZlY3RvciBpbnN0ZWFkCisgICAgICAgIG9mIGEgQ1N0cmluZyBub3cuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNob3VsZFdhaXRGb3JMb2FkaW5nT2ZSZXNvdXJjZSk6
IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVy
LmNwcDogUmVtb3ZlZCBpbmNsdWRlIG9mIFN0cmluZ0V4dHJhcy5oLgorCisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpoYW5kbGVEYXRhVVJMKTog
VXBkYXRlZCBmb3IgVmVjdG9yIGluc3RlYWQKKyAgICAgICAgb2YgQ1N0cmluZy4KKworICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9y
bURhdGE6OmNyZWF0ZSk6IEFkZGVkIG5ldyBvdmVybG9hZCwgYW5kIHNpbXBsaWZpZWQgc29tZSBl
eGlzdGluZyBvbmVzLgorICAgICAgICAoV2ViQ29yZTo6bm9ybWFsaXplU3RyaW5nRGF0YSk6IENo
YW5nZWQgcmV0dXJuIHR5cGUgdG8gVmVjdG9yPHVpbnQ4X3Q+LgorICAgICAgICAoV2ViQ29yZTo6
Rm9ybURhdGE6OmFwcGVuZE11bHRpUGFydFN0cmluZ1ZhbHVlKTogVXBkYXRlZCBmb3IgY2hhbmdl
IGluIHR5cGUgb2YKKyAgICAgICAgcmVzdWx0IG9mIG5vcm1hbGl6ZVN0cmluZ0RhdGEuCisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUg
YW5kIHVwZGF0ZWQgY29tbWVudHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1E
YXRhQnVpbGRlci5jcHA6IE1hZGUgdGhpcyBhIG5hbWVzcGFjZSBpbnN0ZWFkIG9mIGEgY2xhc3Mu
CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUJ1aWxkZXI6OmFwcGVuZCk6IEFkZGVkIGFuIG92
ZXJsb2FkIGZvciBWZWN0b3I8dWludDhfdD4uCisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUJ1
aWxkZXI6OmFwcGVuZFF1b3RlZCk6IFJlbmFtZWQgZnJvbSBhcHBlbmRRdW90ZWRTdHJpbmcgYW5k
CisgICAgICAgIGNoYW5nZWQgdGhlIGFyZ3VtZW50IHR5cGUuCisgICAgICAgIChXZWJDb3JlOjpG
b3JtRGF0YUJ1aWxkZXI6OmFwcGVuZEVuY29kZWRBc0Zvcm1EYXRhKTogTW92ZWQgbG9naWMgdXAg
ZnJvbSB0aGUKKyAgICAgICAgZW5jb2RlU3RyaW5nQXNGb3JtRGF0YSBmdW5jdGlvbiBpbnRvIGEg
bmV3IHNlcGFyYXRlIGhlbHBlci4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhQnVpbGRlcjo6
YmVnaW5NdWx0aVBhcnRIZWFkZXIpOiBDaGFuZ2VkIGFyZ3VtZW50IHR5cGUuCisgICAgICAgIChX
ZWJDb3JlOjpGb3JtRGF0YUJ1aWxkZXI6OmFkZEtleVZhbHVlUGFpckFzRm9ybURhdGEpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3Jt
RGF0YSk6IFVwZGF0ZWQgdG8gY2FsbCBoZWxwZXIuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9Gb3JtRGF0YUJ1aWxkZXIuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAgICAgICog
cGxhdGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaDogVXNlIFZlY3Rvcjx1aW50OF90
PiBpbnN0ZWFkIG9mCisgICAgICAgIFZlY3RvcjxjaGFyPiwgYWxzbyB1cGRhdGVkIHRoZSBjb2Rl
IHRoYXQgY2FsbHMgZW5jb2RlIGZvciB0aGUgbmV3IHJldHVybiB0eXBlLgorCisgICAgICAgICog
cGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVj
OjpnZXRVbmVuY29kYWJsZVJlcGxhY2VtZW50KTogVXBkYXRlZCBzaW5jZSB3ZSBhcmUgdXNpbmcK
KyAgICAgICAgc3RkOjphcnJheSBub3csIHNvIHRoZSBvdXQgYXJndW1lbnQgaXMgZWFzaWVyIHRv
IHVuZGVyc3RhbmQuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuaDogVXNlIHN0
ZDo6YXJyYXkgZm9yIHRoZSBVbmVuY29kYWJsZVJlcGxhY2VtZW50QXJyYXkKKyAgICAgICAgdHlw
ZSwgcmVtb3ZlZCB0aGUgb3ZlcmxvYWQgb2YgZGVjb2RlIHNvIHRoZXJlIGlzIG9ubHkgb25lIGRl
Y29kZSBmdW5jdGlvbi4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklDVUNvbnZlcnRlcldyYXBwZXI6On5JQ1VDb252ZXJ0ZXJX
cmFwcGVyKTogRGVsZXRlZC4KKyAgICAgICAgTm90IG5lZWRlZCBhbnkgbW9yZSBzaW5jZSB3ZSB1
c2UgSUNVQ29udmVydGVyUHRyIGluc3RlYWQgbm93LgorICAgICAgICAoV2ViQ29yZTo6Y2FjaGVk
Q29udmVydGVySUNVKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0lDVTo6
Y3JlYXRlKTogRGVsZXRlZC4gQ2FsbGVycyBqdXN0IHVzZSBtYWtlX3VuaXF1ZQorICAgICAgICBk
aXJlY3RseSBub3cuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyQ29k
ZWNzKTogUmV3cm90ZSB0byB1c2UgbGFtYmRhcyBpbnN0ZWFkCisgICAgICAgIG9mIGZ1bmN0aW9u
cyB3aXRoIHZvaWQqIHBvaW50ZXJzLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjSUNVOjpU
ZXh0Q29kZWNJQ1UpOiBNb3ZlZCBpbml0aWFsaXplcnMgaW50byB0aGUgaGVhZGVyLgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dENvZGVjSUNVOjp+VGV4dENvZGVjSUNVKTogTW92ZWQgdGhlIGJvZHkg
b2YgcmVsZWFzZUlDVUNvbnZlcnRlcgorICAgICAgICBpbiBoZXJlLiBBbHNvIGdyZWF0bHkgc2lt
cGxpZmllZCBpdCBub3cgdGhhdCBJQ1VDb252ZXJ0ZXJQdHIgaGFuZGxlcyBjbG9zaW5nCisgICAg
ICAgIGl0IGFzIG5lZWRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0lDVTo6cmVsZWFz
ZUlDVUNvbnZlcnRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29k
ZWNJQ1U6OmNyZWF0ZUlDVUNvbnZlcnRlciBjb25zdCk6IFJld3JvdGUgdG8gc2ltcGxmeSBub3cg
dGhhdAorICAgICAgICB3ZSBjYW4gdXNlIElDVUNvbnZlcnRlclB0ci4KKyAgICAgICAgKFdlYkNv
cmU6OkVycm9yQ2FsbGJhY2tTZXR0ZXI6OkVycm9yQ2FsbGJhY2tTZXR0ZXIpOiBUYWtlIGEgcmVm
ZXJlbmNlIGluc3RlYWQKKyAgICAgICAgb2YgYSBwb2ludGVyLgorICAgICAgICAoV2ViQ29yZTo6
RXJyb3JDYWxsYmFja1NldHRlcjo6fkVycm9yQ2FsbGJhY2tTZXR0ZXIpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRDb2RlY0lDVTo6ZGVjb2RlKTogVXNlIGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlIGluc3RlYWQgb2YKKyAgICAgICAgc3RyY2FzZWNtcC4KKyAgICAgICAgKFdl
YkNvcmU6OlRleHRDb2RlY0lDVTo6ZW5jb2RlKTogUmV0dXJuIGEgVmVjdG9yIGluc3RlYWQgb2Yg
YSBDU3RyaW5nLgorICAgICAgICBUYWtlIGEgU3RyaW5nVmlldyBpbnN0ZWFkIG9mIGEgcG9pbnRl
ciBhbmQgbGVuZ3RoLiBTaW1wbGlmaWVkCisgICAgICAgIHRoZSBiYWNrc2xhc2gtYXMtY3VycmVu
Y3ktc3ltYm9sIGNvZGUgYnkgdXNpbmcgU3RyaW5nOjpyZXBsYWNlLgorICAgICAgICAqIHBsYXRm
b3JtL3RleHQvVGV4dENvZGVjSUNVLmg6IFVwZGF0ZWQgZm9yIGFib3ZlLiBGaXhlZCBpbmRlbnRh
dGlvbi4KKyAgICAgICAgQWRkZWQgYSBuZXcgSUNVQ29udmVydGVyUHRyIHR5cGVkZWYgdGhhdCB1
c2VzIHN0ZDo6dW5pcXVlX3B0ciB0byBjbG9zZSB0aGUKKyAgICAgICAgY29udmVydGVyOyBjb21i
aW5lZCB3aXRoIG1vdmUgc2VtYW50aWNzIGl0IHNpbXBsaWZpZXMgdGhpbmdzIHNvIHdlIGRvbid0
IGhhdmUKKyAgICAgICAgdG8gYmUgc28gY2FyZWZ1bCBhYm91dCBjYWxsaW5nIHVjbnZfY2xvc2Uu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5jcHA6IFJlbmFtZWQg
dGhlIExhdGluLTEgdG8gVW5pY29kZSB0YWJsZSBmcm9tCisgICAgICAgICJ0YWJsZSIgdG8gbGF0
aW4xQ29udmVyc2lvblRhYmxlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjTGF0aW4xOjpy
ZWdpc3RlckNvZGVjcyk6IFVzZSBhIGxhbWJkYS4KKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZUNv
bXBsZXhXaW5kb3dzTGF0aW4xKTogUmV0dXJuIGEgVmVjdG9yIGluc3RhZCBvZiBDU3RyaW5nLgor
ICAgICAgICBBbHNvIHVzZSBTdHJpbmdWaWV3Ojpjb2RlUG9pbnRzIGluc3RlYWQgb2Ygb3VyIG93
biBVMTZfTkVYVC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0xhdGluMTo6ZW5jb2RlKTog
TW9yZSBvZiB0aGUgc2FtZS4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGlu
MS5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1Rl
eHRDb2RlY1JlcGxhY2VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY1JlcGxh
Y2VtZW50OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjUmVw
bGFjZW1lbnQ6OlRleHRDb2RlY1JlcGxhY2VtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlRleHRDb2RlY1JlcGxhY2VtZW50OjpyZWdpc3RlckNvZGVjcyk6IFVzZSBhIGxhbWJkYS4K
KyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1JlcGxhY2VtZW50Lmg6IFVwZGF0ZWQg
Zm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGMTYu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6bmV3U3RyZWFtaW5nVGV4dERlY29kZXJVVEYxNkxFKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om5ld1N0cmVhbWluZ1RleHREZWNvZGVyVVRGMTZC
RSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNVVEYxNjo6cmVnaXN0ZXJD
b2RlY3MpOiBVc2UgbGFtYmRhcy4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY1VURjE2Ojpl
bmNvZGUpOiBSZXR1cm4gYSBWZWN0b3IuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29k
ZWNVVEYxNi5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90
ZXh0L1RleHRDb2RlY1VURjguY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjVVRGODo6
cmVnaXN0ZXJDb2RlY3MpOiBVc2UgYSBsYW1iZGEuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29k
ZWNVVEY4OjplbmNvZGUpOiBSZXR1cm4gYSBWZWN0b3IuCisgICAgICAgICogcGxhdGZvcm0vdGV4
dC9UZXh0Q29kZWNVVEY4Lmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIHBs
YXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
bmV3U3RyZWFtaW5nVGV4dERlY29kZXJVc2VyRGVmaW5lZCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Q29kZWNVc2VyRGVmaW5lZDo6cmVnaXN0ZXJDb2RlY3MpOiBVc2UgYSBsYW1i
ZGEuCisgICAgICAgIChXZWJDb3JlOjplbmNvZGVDb21wbGV4VXNlckRlZmluZWQpOiBSZXR1cm4g
YSBWZWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNVc2VyRGVmaW5lZDo6ZW5jb2Rl
KTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5o
OiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRF
bmNvZGluZy5jcHA6IENoYW5nZWQgVGV4dENvZGVjTWFwIHRvIGp1c3QgaG9sZCBhCisgICAgICAg
IFdURjo6RnVuY3Rpb24gaW5zdGVhZCBvZiBob2xkaW5nIGEgZnVuY3Rpb24gYW5kIGFuIGFkZGl0
aW9uYWwgZGF0YSBwb2ludGVyLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEVuY29kaW5nOjpUZXh0
RW5jb2RpbmcpOiBVc2UgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UKKyAgICAgICAgaW5z
dGVhZCBvZiBhIHNwZWNpYWwgaXNSZXBsYWNlbWVudEVuY29kaW5nIGZ1bmN0aW9uLgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dEVuY29kaW5nOjplbmNvZGUgY29uc3QpOiBSZXR1cm4gYSBWZWN0b3Ig
aW5zdGVhZCBvZiBhIENTdHJpbmcuCisgICAgICAgIFBhc3MgU3RyaW5nVmlldyBpbnN0ZWFkIG9m
IGEgcG9pbnRlciBhbmQgbGVuZ3RoLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEVuY29k
aW5nLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQv
VGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRkVG9UZXh0Q29k
ZWNNYXApOiBSZW1vdmVkIHRoZSBhZGRpdGlvbmFsRGF0YSBwb2ludGVyIGFuZCB1c2VkCisgICAg
ICAgIFdURk1vdmUgc2luY2UgTmV3VGV4dENvZGVjRnVuY3Rpb24gaXMgbm93IGEgV1RGOjpGdW5j
dGlvbiByYXRoZXIgdGhhbiBhIEMKKyAgICAgICAgZnVuY3Rpb24gcG9pbnRlci4KKyAgICAgICAg
KFdlYkNvcmU6OmlzUmVwbGFjZW1lbnRFbmNvZGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpuZXdUZXh0Q29kZWMpOiBVc2UgZmluZCBpbnN0ZWFkIG9mIGdldCBub3cgdGhhdCB0aGUg
ZnVjbnRpb25zIGluCisgICAgICAgIHRoZSBtYXAgYXJlIFdURjo6RnVuY3Rpb24gYW5kIGNhbid0
IGJlIGNvcGllZC4KKyAgICAgICAgKFdlYkNvcmU6OmR1bXBUZXh0RW5jb2RpbmdOYW1lTWFwKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5Lmg6
IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIHhtbC9YU0xUVW5pY29kZVNvcnQu
Y3BwOiBSZW1vdmVkIGluY2x1ZGUgb2YgU3RyaW5nRXh0cmFzLmguCisgICAgICAgICogeG1sL3Bh
cnNlci9YTUxEb2N1bWVudFBhcnNlci5jcHA6IERpdHRvLgorICAgICAgICAqIHhtbC9wYXJzZXIv
WE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcDogRGl0dG8uCisKIDIwMTctMTEtMjMgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBkaWN0aW9uYXJ5IGxlYWsg
aW4gbG9va3VwLCBjb252ZXJ0IEZpbmRPcHRpb25zIHRvIE9wdGlvblNldCwgdHdlYWsgY29kZSBz
dHlsZSBuZWFyYnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCmluZGV4IGI0ZTkwM2E2NTVhNzRjMzEwNTQ4YzJh
ODU3M2E3NTI0YTgyYzM3ZTQuLjM0ZGRlOGEyZDZjYzRhYjllMzk1Mzc0NDAyMGZmNDQ5YjFlMmUx
NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYkNvcmUvUEFML0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE3LTExLTI0ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNb2Rlcm5pemUgc29tZSBhc3Bl
Y3RzIG9mIHRleHQgY29kZWNzLCBlbGltaW5hdGUgV2ViS2l0IHVzZSBvZiBzdHJjYXNlY21wCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODAwMDkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBBTC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGRlZCBVbmVuY29kYWJsZUhhbmRsaW5nLmguCisgICAg
ICAgICogcGFsL3RleHQvVW5lbmNvZGFibGVIYW5kbGluZy5oOiBNb3ZlZCB0aGUgVW5lbmNvZGFi
bGVIYW5kbGluZyBlbnVtZXJhdGlvbgorICAgICAgICBoZXJlIGZyb20gVGV4dENvZGVjLmguCisK
IDIwMTctMTEtMTkgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmVtb3ZlIHVudXNlZCBUT1VDSF9JQ09OX0xPQURJTkcgZmVhdHVyZSBmbGFnCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CmluZGV4IGU4NzJiMjMxMDllYzdjNWQ3OTc2MDQ5MDRjYzRlZjQ5ZThjZWYwOGEuLmVkY2RlNTVi
YzAwZmI3ZDg4ZGYzZWVhNTEyZThmMWUxMDRiNzMyMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTctMTEtMjQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAg
IE1vZGVybml6ZSBzb21lIGFzcGVjdHMgb2YgdGV4dCBjb2RlY3MsIGVsaW1pbmF0ZSBXZWJLaXQg
dXNlIG9mIHN0cmNhc2VjbXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE4MDAwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlQnJvd3NlckZ1
bmNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6aW5pdGlhbGl6ZVByb3RlY3Rpb25TcGFjZSk6IFVz
ZSBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSBpbnN0ZWFkCisgICAgICAgIG9mIHN0cmNh
c2VjbXAuCisKIDIwMTctMTEtMjMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIEZpeCBkaWN0aW9uYXJ5IGxlYWsgaW4gbG9va3VwLCBjb252ZXJ0IEZpbmRPcHRpb25z
IHRvIE9wdGlvblNldCwgdHdlYWsgY29kZSBzdHlsZSBuZWFyYnkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0No
YW5nZUxvZwppbmRleCAwNDc0OGRlYzUzNWMxY2UzNWE3YTcwZjg3NTA2ZDRhMmVkN2M2YTEyLi4x
MTg4NzllMWY1MjlkYzM1MjM4N2IyNzM3OTIzMzdlODE1M2I0YmI1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTctMTEtMjQgIERhcmluIEFkbGVyICA8
ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybml6ZSBzb21lIGFzcGVjdHMgb2YgdGV4
dCBjb2RlY3MsIGVsaW1pbmF0ZSBXZWJLaXQgdXNlIG9mIHN0cmNhc2VjbXAKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDAwOQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSGlzdG9yeS9IaXN0b3J5UHJv
cGVydHlMaXN0Lm1tOiBSZW1vdmVkIGluY2x1ZGUgb2YgU3RyaW5nRXh0cmFzLmguCisKKyAgICAg
ICAgKiBQbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW06CisgICAgICAgIChXZWJL
aXQ6OmdldEF1dGhlbnRpY2F0aW9uSW5mbyk6IFVzZSBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZSBpbnN0ZWFkCisgICAgICAgIG9mIHN0cmNhc2VjbXAuCisKKyAgICAgICAgKiBXZWJWaWV3
L1dlYlByZWZlcmVuY2VzLm1tOgorICAgICAgICAoY29udGFpbnMpOiBEaXR0by4gQWxzbyBtYWRl
IHRoaXMgYSB0ZW1wbGF0ZSBzbyBpdCdzIGVhc2llciB0byBjYWxsIG9uIGFuIGFycmF5LgorICAg
ICAgICAoY2FjaGVNb2RlbEZvck1haW5CdW5kbGUpOiBUYWtlIGFkdmFudGFnZSBvZiB0aGUgYWJv
dmUgdG8gbWFrZSBpdCBjbGVhbmVyLgorCiAyMDE3LTExLTIzICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggZGljdGlvbmFyeSBsZWFrIGluIGxvb2t1cCwgY29u
dmVydCBGaW5kT3B0aW9ucyB0byBPcHRpb25TZXQsIHR3ZWFrIGNvZGUgc3R5bGUgbmVhcmJ5CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwCmluZGV4
IDMxNDZiMThmOGQ1MmJiZmI1MmY0OTEzYmQxOGRiZDlkY2RlYWMwYzEuLmNiMWI3NTg1YjIyZWMz
MTQ3MWY4NGMyZjE1NjdkNjg1OGIxNjg0OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAi
Q29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9Db21t
YVByaW50ZXIuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3Rm
L1N0cmluZ1ByaW50U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCAwYWZmNGIwYzZmZDMwYzkzYWI2
MGUyYzVmODU4MWI4N2MxYjk2Njc4Li5hNjE5Nzg3MTE2ZWJmMWM5ZjMwODk1YmRkZTRlOWU2ZmRm
OTM4ZWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cApAQCAtODMsNyArODMsNiBAQAogI2luY2x1ZGUgPHd0Zi9CYWdUb0hhc2hNYXAuaD4KICNpbmNs
dWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CiAjaW5jbHVkZSA8d3RmL1NpbXBsZVN0YXRzLmg+Ci0j
aW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0
cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1VuaXF1ZWRTdHJpbmdJbXBsLmg+CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcApp
bmRleCAyMzdjMGU3NTIyNTgyZGQzZTQ3YmEwYzdkODFjYmNiMjZkYmRlYzUxLi5mYmFkNzg3Y2Y0
OGU4MGNjODM1MGQyYjdlMWM0ZGFhODU1NGYyOTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCkBAIC0zMCw3ICszMCw2IEBA
CiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKICNpbmNsdWRlICJWTUlubGluZXMuaCIKLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db25maWdGaWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bmZpZ0ZpbGUuY3BwCmluZGV4IGI2MWExMzFjNzZlNmI3ZjI4YjgzN2RiNjU3ZDk1MjVhZDM2NzZl
MzYuLjFiMTZjMmU3NWY4YTRmMTQ1M2YwMmM1NDA0MzBiYTc5NDQ5MTM0OTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmZpZ0ZpbGUuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmZpZ0ZpbGUuY3BwCkBAIC0zMyw3ICszMyw2IEBA
CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNs
dWRlIDx3dGYvRGF0YUxvZy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKICNpZiBIQVZFKFJFR0VYX0gpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCmluZGV4IGIz
MGY4ZWVlZDVhZjE4NWMxZDE1M2E3ZDAyNjk4MGNlNmIyOGNmY2UuLjVhYjAwN2ZjMTdmNjRlOWNi
ZDI4YzE5YjVmZDczOTZlYWNmOWQyZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8dGlt
ZS5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAKICNpZiBIQVZFKExBTkdJTkZP
X0gpCiAjaW5jbHVkZSA8bGFuZ2luZm8uaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbmRleGluZ1R5cGUuY3BwCmluZGV4IGY3ZDU0NzU0ZDU5M2VhMjI4YTcxMGRlZjI1MjIw
N2UzNGZjNTNjYTEuLjhiNWFiM2M1YmM4MGY4MzJmYTBkYTY0N2VhYmE3NTQ1ZTJhMTc0ZDQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmNwcApAQCAt
MjYsOCArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkluZGV4aW5nVHlw
ZS5oIgogCi0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgotCiBuYW1lc3BhY2UgSlNDIHsK
IAogSW5kZXhpbmdUeXBlIGxlYXN0VXBwZXJCb3VuZE9mSW5kZXhpbmdUeXBlcyhJbmRleGluZ1R5
cGUgYSwgSW5kZXhpbmdUeXBlIGIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NKU1ZhbHVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q0pTVmFsdWUuY3BwCmluZGV4IGQwMzA0NTIyMGQ1ZTk1MjY3ZWQ5ZjhmN2I5ZDMzNjVhODMxNzlk
ZDMuLmJhZjRkZmQyYjg3OTRkMmI3NTJiZDJlYjUwZDQyMjkxMWUyOGFlZGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCkBAIC0zNCw3ICszNCw2IEBA
CiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJOdW1iZXJPYmplY3QuaCIK
ICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMu
aD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRGF0ZU1hdGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNEYXRlTWF0aC5jcHAKaW5kZXggN2U2ZGY0NTdhN2QxMzg0OTQzMDBlOWQ5NmUxMjkyMzBjYTNh
ZDNiZC4uNmMwNGUzY2Q4NjYwYzRlOGUxNjgzMjAwY2RiMjVmNmE0NzY2MDc0ZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5jcHAKQEAgLTg2LDcgKzg2LDYg
QEAKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5n
RXh0cmFzLmg+CiAKICNpZiBIQVZFKEVSUk5PX0gpCiAjaW5jbHVkZSA8ZXJybm8uaD4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rp
b25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVu
Y3Rpb25zLmNwcAppbmRleCBjZDY4NmU4NWM5YWJhYzk0M2E2MjBhYjE1YzA3MGYyY2FmNDA0NWRm
Li5kNDI4Yjg1MTNjYTVmN2U0YTBhOTgzOGE5YWIzYjE3NGQzMDVhMGUyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlv
bnMuY3BwCkBAIC01NCw3ICs1NCw2IEBACiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNp
bmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNp
bmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL2R0b2EuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVVRG
OC5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAppbmRleCBhZTk3
N2I2MjMxOTcyY2UxZDAzOTllNmU5ODA0NDRlZTkyN2UxZWQzLi43Yzk3MjFiMjA0NTY4ODc3NWFi
MTc0YjhkNDExMGE4MjRhOWQ5NzI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcApAQCAtNDIsNyArNDIsNiBAQAogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAj
aW5jbHVkZSA8d3RmL051bWJlck9mQ29yZXMuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKQEAgLTcx
LDExICs3MCwxMSBAQCB2b2lkIE9wdGlvbnM6OmVuYWJsZVJlc3RyaWN0ZWRPcHRpb25zKGJvb2wg
ZW5hYmxlT3JOb3QpCiAgICAgCiBzdGF0aWMgYm9vbCBwYXJzZShjb25zdCBjaGFyKiBzdHJpbmcs
IGJvb2wmIHZhbHVlKQogewotICAgIGlmICghc3RyY2FzZWNtcChzdHJpbmcsICJ0cnVlIikgfHwg
IXN0cmNhc2VjbXAoc3RyaW5nLCAieWVzIikgfHwgIXN0cmNtcChzdHJpbmcsICIxIikpIHsKKyAg
ICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLCAidHJ1ZSIpIHx8IGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmluZywgInllcyIpIHx8ICFzdHJjbXAoc3Ry
aW5nLCAiMSIpKSB7CiAgICAgICAgIHZhbHVlID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQotICAgIGlmICghc3RyY2FzZWNtcChzdHJpbmcsICJmYWxzZSIpIHx8ICFzdHJjYXNl
Y21wKHN0cmluZywgIm5vIikgfHwgIXN0cmNtcChzdHJpbmcsICIwIikpIHsKKyAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLCAiZmFsc2UiKSB8fCBlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcsICJubyIpIHx8ICFzdHJjbXAoc3RyaW5nLCAiMCIp
KSB7CiAgICAgICAgIHZhbHVlID0gZmFsc2U7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
QEAgLTEyNywxNyArMTI2LDE3IEBAIHN0YXRpYyBib29sIHBhcnNlKGNvbnN0IGNoYXIqIHN0cmlu
ZywgY29uc3QgY2hhciomIHZhbHVlKQogCiBzdGF0aWMgYm9vbCBwYXJzZShjb25zdCBjaGFyKiBz
dHJpbmcsIEdDTG9nZ2luZzo6TGV2ZWwmIHZhbHVlKQogewotICAgIGlmICghc3RyY2FzZWNtcChz
dHJpbmcsICJub25lIikgfHwgIXN0cmNhc2VjbXAoc3RyaW5nLCAibm8iKSB8fCAhc3RyY2FzZWNt
cChzdHJpbmcsICJmYWxzZSIpIHx8ICFzdHJjbXAoc3RyaW5nLCAiMCIpKSB7CisgICAgaWYgKGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmluZywgIm5vbmUiKSB8fCBlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcsICJubyIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKHN0cmluZywgImZhbHNlIikgfHwgIXN0cmNtcChzdHJpbmcsICIwIikpIHsKICAg
ICAgICAgdmFsdWUgPSBHQ0xvZ2dpbmc6Ok5vbmU7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIAotICAgIGlmICghc3RyY2FzZWNtcChzdHJpbmcsICJiYXNpYyIpIHx8ICFzdHJjYXNlY21w
KHN0cmluZywgInllcyIpIHx8ICFzdHJjYXNlY21wKHN0cmluZywgInRydWUiKSB8fCAhc3RyY21w
KHN0cmluZywgIjEiKSkgeworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShz
dHJpbmcsICJiYXNpYyIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmluZywg
InllcyIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmluZywgInRydWUiKSB8
fCAhc3RyY21wKHN0cmluZywgIjEiKSkgewogICAgICAgICB2YWx1ZSA9IEdDTG9nZ2luZzo6QmFz
aWM7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlmICghc3RyY2FzZWNtcChz
dHJpbmcsICJ2ZXJib3NlIikgfHwgIXN0cmNtcChzdHJpbmcsICIyIikpIHsKKyAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLCAidmVyYm9zZSIpIHx8ICFzdHJjbXAo
c3RyaW5nLCAiMiIpKSB7CiAgICAgICAgIHZhbHVlID0gR0NMb2dnaW5nOjpWZXJib3NlOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Bc3Nl
cnRpb25zLmNwcCBiL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwCmluZGV4IGRhYmY2ZmVi
MGQ5NzM2YzBkOTI4MGE4MGUyYWZmODc0ZWI5N2ViMjEuLmU2NjVkNDFkYzI2NzExMjI3YTQ2MzVi
NDQwZGE2NDMxZmRhMjFiM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMu
Y3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwCkBAIC00NSw3ICs0NSw2IEBA
CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9TdGFja1RyYWNlLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRy
YXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNTIw
LDcgKzUxOSw3IEBAIFdURkxvZ0NoYW5uZWwqIFdURkxvZ0NoYW5uZWxCeU5hbWUoV1RGTG9nQ2hh
bm5lbCogY2hhbm5lbHNbXSwgc2l6ZV90IGNvdW50LCBjb25zCiB7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgIFdURkxvZ0NoYW5uZWwqIGNoYW5uZWwg
PSBjaGFubmVsc1tpXTsKLSAgICAgICAgaWYgKCFzdHJjYXNlY21wKG5hbWUsIGNoYW5uZWwtPm5h
bWUpKQorICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBjaGFubmVsLT5u
YW1lKSkKICAgICAgICAgICAgIHJldHVybiBjaGFubmVsOwogICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvRGF0ZU1hdGguY3BwIGIvU291cmNlL1dURi93dGYvRGF0ZU1hdGguY3Bw
CmluZGV4IDU3ZTI0ZGRmNGVkODMyNzNiMGJiNjRlMDAyYTA0MWFhMWNlYWFlNjUuLjY0MjBiNWQ4
YTA3MDg3NDg4NDg2YzBjYzliMWFjZjExOTE4NThlMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL0RhdGVNYXRoLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9EYXRlTWF0aC5jcHAKQEAgLTc3
LDcgKzc3LDYgQEAKICNpbmNsdWRlICJDdXJyZW50VGltZS5oIgogI2luY2x1ZGUgIk1hdGhFeHRy
YXMuaCIKICNpbmNsdWRlICJTdGRMaWJFeHRyYXMuaCIKLSNpbmNsdWRlICJTdHJpbmdFeHRyYXMu
aCIKIAogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxsaW1pdHMuaD4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL01ENS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9NRDUuY3BwCmluZGV4
IDU1MDgwZjIxNWNjM2Q4YWNjN2VkN2U2YWZjNTA5NWQzMzdhMGM5ZDcuLmI2NmRhMTg5MmIwYzNj
MTg1ZDZmZDg2MTUwZDQ3OGIwNjBkM2YxNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL01E
NS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvTUQ1LmNwcApAQCAtNTEsMTAgKzUxLDYgQEAKICNp
bmNsdWRlICJNRDUuaCIKIAogI2luY2x1ZGUgIkFzc2VydGlvbnMuaCIKLSNpZm5kZWYgTkRFQlVH
Ci0jaW5jbHVkZSAiU3RyaW5nRXh0cmFzLmgiCi0jaW5jbHVkZSAidGV4dC9DU3RyaW5nLmgiCi0j
ZW5kaWYKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU0hBMS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9TSEEx
LmNwcAppbmRleCAyZjg0YTFlOTUzOGI4NDRkOTMyMTM2YmNlZmU3MjQyNmMxMGVjYTRkLi44MWVh
NDJjMzBiZDkxZjM2MjBjNWEwYjc5Y2IzOWRlOGU5ZDU1MThkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9TSEExLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9TSEExLmNwcApAQCAtMzMsOCAr
MzMsNiBAQAogI2luY2x1ZGUgIlNIQTEuaCIKIAogI2luY2x1ZGUgIkFzc2VydGlvbnMuaCIKLQot
I2luY2x1ZGUgIlN0cmluZ0V4dHJhcy5oIgogI2luY2x1ZGUgInRleHQvQ1N0cmluZy5oIgogCiBu
YW1lc3BhY2UgV1RGIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1N0cmluZ0V4dHJhcy5o
IGIvU291cmNlL1dURi93dGYvU3RyaW5nRXh0cmFzLmgKaW5kZXggNjc5N2QyY2UxMWFkMWI4YTU0
YTg3OTdlMDE0MmVhMzkzNjA5NzAxZC4uYWYwNWQyY2QxMjhmOTUxM2I4NjFhMDAwYjc0NjE3MDQ0
OTY0ZmNjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3RyaW5nRXh0cmFzLmgKKysrIGIv
U291cmNlL1dURi93dGYvU3RyaW5nRXh0cmFzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAxNSBFbGVjdHJvbmljIEFydHMsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI0LDMzICsyNCwxMCBAQAogICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCiAgKi8KIAotI2lmbmRlZiBXVEZfU3RyaW5nRXh0cmFzX2gKLSNkZWZpbmUgV1RGX1N0
cmluZ0V4dHJhc19oCisjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1
ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKLSNpZiBIQVZFKFNUUklOR1NfSCkg
Ci0jaW5jbHVkZSA8c3RyaW5ncy5oPiAKLSNlbmRpZiAKLQotI2lmIENPTVBJTEVSKE1TVkMpCi0K
LS8vIEZJWE1FOiBXZSBzaG91bGQgc3RvcCB1c2luZyB0aGVzZSBlbnRpcmVseSBhbmQgdXNlIHN1
aXRhYmxlIHZlcnNpb25zIG9mIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UgaW5zdGVhZC4KLQotaW5s
aW5lIGludCBzdHJuY2FzZWNtcChjb25zdCBjaGFyKiBzMSwgY29uc3QgY2hhciogczIsIHNpemVf
dCBsZW4pCi17Ci0gICAgcmV0dXJuIF9zdHJuaWNtcChzMSwgczIsIGxlbik7Ci19Ci0KLWlubGlu
ZSBpbnQgc3RyY2FzZWNtcChjb25zdCBjaGFyKiBzMSwgY29uc3QgY2hhciogczIpCi17Ci0gICAg
cmV0dXJuIF9zdHJpY21wKHMxLCBzMik7Ci19Ci0KLSNlbmRpZgotCiAjaWYgIUhBVkUoU1RSTlNU
UikKIAogaW5saW5lIGNoYXIqIHN0cm5zdHIoY29uc3QgY2hhciogYnVmZmVyLCBjb25zdCBjaGFy
KiB0YXJnZXQsIHNpemVfdCBidWZmZXJMZW5ndGgpCkBAIC02Niw1ICs0MywzIEBAIGlubGluZSBj
aGFyKiBzdHJuc3RyKGNvbnN0IGNoYXIqIGJ1ZmZlciwgY29uc3QgY2hhciogdGFyZ2V0LCBzaXpl
X3QgYnVmZmVyTGVuZ3RoCiB9CiAKICNlbmRpZgotCi0jZW5kaWYgLy8gV1RGX1N0cmluZ0V4dHJh
c19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9TdHJpbmdQcmludFN0cmVhbS5jcHAgYi9T
b3VyY2UvV1RGL3d0Zi9TdHJpbmdQcmludFN0cmVhbS5jcHAKaW5kZXggNmE4ODgxYzViYmQwYmIz
YTE5MWE2NDI5Njg2OTM5NWZkY2YxMzA1Yy4uMzNmZDVhYmJiZTU4ZDg1Mzk4MmIzMmU3YTVlOGEx
YTY1ZjY5MTcxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3RyaW5nUHJpbnRTdHJlYW0u
Y3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1N0cmluZ1ByaW50U3RyZWFtLmNwcApAQCAtMjksNyAr
MjksNiBAQAogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVk
ZSA8d3RmL0Zhc3RNYWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAKIG5h
bWVzcGFjZSBXVEYgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5j
cHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAKaW5kZXggMmFlNWRlMjIyY2Q2YzM5
NDFjZTc1NmJiNzNkY2IxYWRiMGNiMWY0NS4uODA0ZmUxZjQxMjk0YTliMTMyNzE1NTk5MzdkYjA5
ZWE2ZmQwMzg3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCisr
KyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmNwcApAQCAtMjUsNyArMjUsNiBAQAogI2lu
Y2x1ZGUgIkJhc2U2NC5oIgogCiAjaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0
cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgV1RGIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvTGluZUVuZGluZy5jcHAg
Yi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0xpbmVFbmRpbmcuY3BwCmluZGV4IGU4MTlhZWY1NDllMDFh
Y2ExODg0MmUyNmRkNGI1N2M5NjM3MTNjNjQuLmUwMjNiOWZiNGRkOWJmY2JmMGYxZDk3MDU5Mjgz
YmZhMDA3NTQxYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvTGluZUVuZGluZy5j
cHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9MaW5lRW5kaW5nLmNwcApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDgsIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMiwxMTQgKzMy
LDkzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTGluZUVuZGluZy5oIgogCi0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAotbmFtZXNwYWNlIHsKLQotY2xhc3MgT3V0
cHV0QnVmZmVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHVpbnQ4X3QqIGFsbG9jYXRlKHNpemVf
dCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb3B5KGNvbnN0IENTdHJpbmcmKSA9IDA7Ci0gICAg
dmlydHVhbCB+T3V0cHV0QnVmZmVyKCkgeyB9Ci19OwotCi1jbGFzcyBDU3RyaW5nQnVmZmVyIDog
cHVibGljIE91dHB1dEJ1ZmZlciB7Ci1wdWJsaWM6Ci0gICAgQ1N0cmluZ0J1ZmZlcihDU3RyaW5n
JiBidWZmZXIpCi0gICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQotICAgIHsKLSAgICB9Ci0gICAg
dmlydHVhbCB+Q1N0cmluZ0J1ZmZlcigpIHsgfQotCi0gICAgdWludDhfdCogYWxsb2NhdGUoc2l6
ZV90IHNpemUpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBjaGFyKiBwdHI7Ci0gICAgICAgIG1f
YnVmZmVyID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChzaXplLCBwdHIpOwotICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4ocHRyKTsKLSAgICB9Ci0KLSAgICB2b2lk
IGNvcHkoY29uc3QgQ1N0cmluZyYgc291cmNlKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgbV9i
dWZmZXIgPSBzb3VyY2U7Ci0gICAgfQotCi0gICAgY29uc3QgQ1N0cmluZyYgYnVmZmVyKCkgY29u
c3QgeyByZXR1cm4gbV9idWZmZXI7IH0KK25hbWVzcGFjZSBXVEYgewogCi1wcml2YXRlOgotICAg
IENTdHJpbmcgbV9idWZmZXI7Ci19OworLy8gRklYTUU6IEhvdyBjYW4gdGhpcyBiZSB0aGUgY29y
cmVjdCBjb25kaXRpb25hbD8KKy8vIEkgZG9uJ3QgdGhpbmsgdGhlIE9TIGlzIHJlYWxseSB3aGF0
IGRldGVybWluZXMgIm5hdGl2ZSBsaW5lIGVuZGluZ3MiLgorI2lmICFPUyhXSU5ET1dTKQogCi0j
aWYgT1MoV0lORE9XUykKLWNsYXNzIFZlY3RvckNoYXJBcHBlbmRCdWZmZXIgOiBwdWJsaWMgT3V0
cHV0QnVmZmVyIHsKLXB1YmxpYzoKLSAgICBWZWN0b3JDaGFyQXBwZW5kQnVmZmVyKFZlY3Rvcjx1
aW50OF90PiYgYnVmZmVyKQotICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKLSAgICB7CitzdGF0
aWMgVmVjdG9yPHVpbnQ4X3Q+IG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9MRihWZWN0b3I8dWludDhf
dD4mJiBzb3VyY2UpCit7CisgICAgc2l6ZV90IHJlc3VsdExlbmd0aCA9IDA7CisgICAgYm9vbCBu
ZWVkRml4ID0gZmFsc2U7CisgICAgY29uc3QgYXV0byogcCA9IHNvdXJjZS5kYXRhKCk7CisgICAg
YXV0byogZW5kID0gcCArIHNvdXJjZS5zaXplKCk7CisgICAgd2hpbGUgKHAgIT0gZW5kKSB7Cisg
ICAgICAgIGNoYXIgYyA9ICpwKys7CisgICAgICAgIGlmIChjID09ICdccicgJiYgcCAhPSBlbmQg
JiYgKnAgPT0gJ1xuJykgeworICAgICAgICAgICAgLy8gVHVybiBDUkxGIGludG8gTEYuCisgICAg
ICAgICAgICArK3A7CisgICAgICAgICAgICBuZWVkRml4ID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNl
IGlmIChjID09ICdccicpIHsKKyAgICAgICAgICAgIC8vIFR1cm4gQ1IgaW50byBMRi4KKyAgICAg
ICAgICAgIG5lZWRGaXggPSB0cnVlOworICAgICAgICB9CisgICAgICAgICsrcmVzdWx0TGVuZ3Ro
OwogICAgIH0KLSAgICB2aXJ0dWFsIH5WZWN0b3JDaGFyQXBwZW5kQnVmZmVyKCkgeyB9CiAKLSAg
ICB1aW50OF90KiBhbGxvY2F0ZShzaXplX3Qgc2l6ZSkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAg
IHNpemVfdCBvbGRTaXplID0gbV9idWZmZXIuc2l6ZSgpOwotICAgICAgICBtX2J1ZmZlci5ncm93
KG9sZFNpemUgKyBzaXplKTsKLSAgICAgICAgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKSArIG9sZFNp
emU7Ci0gICAgfQorICAgIGlmICghbmVlZEZpeCkKKyAgICAgICAgcmV0dXJuIFdURk1vdmUoc291
cmNlKTsKIAotICAgIHZvaWQgY29weShjb25zdCBDU3RyaW5nJiBzb3VyY2UpIG92ZXJyaWRlCi0g
ICAgewotICAgICAgICBtX2J1ZmZlci5hcHBlbmQoc291cmNlLmRhdGEoKSwgc291cmNlLmxlbmd0
aCgpKTsKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KHJlc3VsdExlbmd0aCk7CisgICAgcCA9
IHNvdXJjZS5kYXRhKCk7CisgICAgYXV0byogcSA9IHJlc3VsdC5kYXRhKCk7CisgICAgd2hpbGUg
KHAgIT0gZW5kKSB7CisgICAgICAgIGNoYXIgYyA9ICpwKys7CisgICAgICAgIGlmIChjID09ICdc
cicgJiYgcCAhPSBlbmQgJiYgKnAgPT0gJ1xuJykgeworICAgICAgICAgICAgLy8gVHVybiBDUkxG
IGludG8gTEYuCisgICAgICAgICAgICArK3A7CisgICAgICAgICAgICAqcSsrID0gJ1xuJzsKKyAg
ICAgICAgfSBlbHNlIGlmIChjID09ICdccicpIHsKKyAgICAgICAgICAgIC8vIFR1cm4gQ1IgaW50
byBMRi4KKyAgICAgICAgICAgICpxKysgPSAnXG4nOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgLy8gTGVhdmUgb3RoZXIgY2hhcmFjdGVycyBhbG9uZS4KKyAgICAgICAgICAgICpxKysg
PSBjOworICAgICAgICB9CiAgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CiAKLXByaXZhdGU6
Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+JiBtX2J1ZmZlcjsKLX07CiAjZW5kaWYKIAotdm9pZCBpbnRl
cm5hbE5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9DUkxGKGNvbnN0IENTdHJpbmcmIGZyb20sIE91dHB1
dEJ1ZmZlciYgYnVmZmVyKQorVmVjdG9yPHVpbnQ4X3Q+IG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9D
UkxGKFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSkKIHsKLSAgICBpZiAoIWZyb20ubGVuZ3RoKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICAvLyBDb21wdXRlIHRoZSBuZXcgbGVuZ3RoLgotICAgIHNp
emVfdCBuZXdMZW4gPSAwOwotICAgIGNvbnN0IGNoYXIqIHAgPSBmcm9tLmRhdGEoKTsKLSAgICB3
aGlsZSAocCA8IGZyb20uZGF0YSgpICsgZnJvbS5sZW5ndGgoKSkgeworICAgIHNpemVfdCByZXN1
bHRMZW5ndGggPSAwOworICAgIGNvbnN0IGF1dG8qIHAgPSBzb3VyY2UuZGF0YSgpOworICAgIGF1
dG8qIGVuZCA9IHAgKyBzb3VyY2Uuc2l6ZSgpOworICAgIHdoaWxlIChwICE9IGVuZCkgewogICAg
ICAgICBjaGFyIGMgPSAqcCsrOwogICAgICAgICBpZiAoYyA9PSAnXHInKSB7Ci0gICAgICAgICAg
ICAvLyBTYWZlIHRvIGxvb2sgYWhlYWQgYmVjYXVzZSBvZiB0cmFpbGluZyAnXDAnLgotICAgICAg
ICAgICAgaWYgKCpwICE9ICdcbicpIHsKLSAgICAgICAgICAgICAgICAvLyBUdXJuIENSIGludG8g
Q1JMRi4KLSAgICAgICAgICAgICAgICBuZXdMZW4gKz0gMjsKLSAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIC8vIFR1cm4gQ1Igb3IgQ1JMRiBpbnRvIENSTEY7CisgICAgICAgICAgICBpZiAocCAh
PSBlbmQgJiYgKnAgPT0gJ1xuJykKKyAgICAgICAgICAgICAgICArK3A7CisgICAgICAgICAgICBy
ZXN1bHRMZW5ndGggKz0gMjsKICAgICAgICAgfSBlbHNlIGlmIChjID09ICdcbicpIHsKICAgICAg
ICAgICAgIC8vIFR1cm4gTEYgaW50byBDUkxGLgotICAgICAgICAgICAgbmV3TGVuICs9IDI7Cisg
ICAgICAgICAgICByZXN1bHRMZW5ndGggKz0gMjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIC8vIExlYXZlIG90aGVyIGNoYXJhY3RlcnMgYWxvbmUuCi0gICAgICAgICAgICBuZXdMZW4g
Kz0gMTsKKyAgICAgICAgICAgIHJlc3VsdExlbmd0aCArPSAxOwogICAgICAgICB9CiAgICAgfQot
ICAgIGlmIChuZXdMZW4gPCBmcm9tLmxlbmd0aCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobmV3TGVuID09IGZyb20ubGVuZ3RoKCkpIHsKLSAgICAgICAgYnVmZmVyLmNvcHkoZnJvbSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBwID0gZnJvbS5kYXRhKCk7Ci0gICAgdWlu
dDhfdCogcSA9IGJ1ZmZlci5hbGxvY2F0ZShuZXdMZW4pOworICAgIGlmIChyZXN1bHRMZW5ndGgg
PT0gc291cmNlLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIFdURk1vdmUoc291cmNlKTsKIAotICAg
IC8vIE1ha2UgYSBjb3B5IG9mIHRoZSBzdHJpbmcuCi0gICAgd2hpbGUgKHAgPCBmcm9tLmRhdGEo
KSArIGZyb20ubGVuZ3RoKCkpIHsKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KHJlc3VsdExl
bmd0aCk7CisgICAgcCA9IHNvdXJjZS5kYXRhKCk7CisgICAgYXV0byogcSA9IHJlc3VsdC5kYXRh
KCk7CisgICAgd2hpbGUgKHAgIT0gZW5kKSB7CiAgICAgICAgIGNoYXIgYyA9ICpwKys7CiAgICAg
ICAgIGlmIChjID09ICdccicpIHsKLSAgICAgICAgICAgIC8vIFNhZmUgdG8gbG9vayBhaGVhZCBi
ZWNhdXNlIG9mIHRyYWlsaW5nICdcMCcuCi0gICAgICAgICAgICBpZiAoKnAgIT0gJ1xuJykgewot
ICAgICAgICAgICAgICAgIC8vIFR1cm4gQ1IgaW50byBDUkxGLgotICAgICAgICAgICAgICAgICpx
KysgPSAnXHInOwotICAgICAgICAgICAgICAgICpxKysgPSAnXG4nOwotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgLy8gVHVybiBDUiBvciBDUkxGIGludG8gQ1JMRjsKKyAgICAgICAgICAgIGlm
IChwICE9IGVuZCAmJiAqcCA9PSAnXG4nKQorICAgICAgICAgICAgICAgICsrcDsKKyAgICAgICAg
ICAgICpxKysgPSAnXHInOworICAgICAgICAgICAgKnErKyA9ICdcbic7CiAgICAgICAgIH0gZWxz
ZSBpZiAoYyA9PSAnXG4nKSB7CiAgICAgICAgICAgICAvLyBUdXJuIExGIGludG8gQ1JMRi4KICAg
ICAgICAgICAgICpxKysgPSAnXHInOwpAQCAtMTQ5LDc4ICsxMjgsMTUgQEAgdm9pZCBpbnRlcm5h
bE5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9DUkxGKGNvbnN0IENTdHJpbmcmIGZyb20sIE91dHB1dEJ1
ZmZlciYgYnVmZmUKICAgICAgICAgICAgICpxKysgPSBjOwogICAgICAgICB9CiAgICAgfQorICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLX07Ci0KLW5hbWVzcGFjZSBXVEYgewotCi0vLyBOb3JtYWxp
emUgYWxsIGxpbmUtZW5kaW5ncyB0byBDUiBvciBMRi4KLXN0YXRpYyB2b2lkIG5vcm1hbGl6ZVRv
Q1JPckxGKGNvbnN0IENTdHJpbmcmIGZyb20sIFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0LCBib29s
IHRvQ1IpCi17Ci0gICAgLy8gQ29tcHV0ZSB0aGUgbmV3IGxlbmd0aC4KLSAgICBzaXplX3QgbmV3
TGVuID0gMDsKLSAgICBib29sIG5lZWRGaXggPSBmYWxzZTsKLSAgICBjb25zdCBjaGFyKiBwID0g
ZnJvbS5kYXRhKCk7Ci0gICAgY2hhciBmcm9tRW5kaW5nQ2hhciA9IHRvQ1IgPyAnXG4nIDogJ1xy
JzsKLSAgICBjaGFyIHRvRW5kaW5nQ2hhciA9IHRvQ1IgPyAnXHInIDogJ1xuJzsKLSAgICB3aGls
ZSAocCA8IGZyb20uZGF0YSgpICsgZnJvbS5sZW5ndGgoKSkgewotICAgICAgICBjaGFyIGMgPSAq
cCsrOwotICAgICAgICBpZiAoYyA9PSAnXHInICYmICpwID09ICdcbicpIHsKLSAgICAgICAgICAg
IC8vIFR1cm4gQ1JMRiBpbnRvIENSIG9yIExGLgotICAgICAgICAgICAgcCsrOwotICAgICAgICAg
ICAgbmVlZEZpeCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoYyA9PSBmcm9tRW5kaW5nQ2hh
cikgewotICAgICAgICAgICAgLy8gVHVybiBDUi9MRiBpbnRvIExGL0NSLgotICAgICAgICAgICAg
bmVlZEZpeCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgbmV3TGVuICs9IDE7Ci0gICAgfQot
Ci0gICAgLy8gR3JvdyB0aGUgcmVzdWx0IGJ1ZmZlci4KLSAgICBwID0gZnJvbS5kYXRhKCk7Ci0g
ICAgc2l6ZV90IG9sZFJlc3VsdFNpemUgPSByZXN1bHQuc2l6ZSgpOwotICAgIHJlc3VsdC5ncm93
KG9sZFJlc3VsdFNpemUgKyBuZXdMZW4pOwotICAgIHVpbnQ4X3QqIHEgPSByZXN1bHQuZGF0YSgp
ICsgb2xkUmVzdWx0U2l6ZTsKLQotICAgIC8vIElmIG5vIG5lZWQgdG8gZml4IHRoZSBzdHJpbmcs
IGp1c3QgY29weSB0aGUgc3RyaW5nIG92ZXIuCi0gICAgaWYgKCFuZWVkRml4KSB7Ci0gICAgICAg
IG1lbWNweShxLCBwLCBmcm9tLmxlbmd0aCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIC8vIE1ha2UgYSBjb3B5IG9mIHRoZSBzdHJpbmcuCi0gICAgd2hpbGUgKHAgPCBmcm9tLmRh
dGEoKSArIGZyb20ubGVuZ3RoKCkpIHsKLSAgICAgICAgY2hhciBjID0gKnArKzsKLSAgICAgICAg
aWYgKGMgPT0gJ1xyJyAmJiAqcCA9PSAnXG4nKSB7Ci0gICAgICAgICAgICAvLyBUdXJuIENSTEYg
b3IgQ1IgaW50byBDUiBvciBMRi4KLSAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgICpxKysg
PSB0b0VuZGluZ0NoYXI7Ci0gICAgICAgIH0gZWxzZSBpZiAoYyA9PSBmcm9tRW5kaW5nQ2hhcikg
ewotICAgICAgICAgICAgLy8gVHVybiBDUi9MRiBpbnRvIExGL0NSLgotICAgICAgICAgICAgKnEr
KyA9IHRvRW5kaW5nQ2hhcjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIExlYXZl
IG90aGVyIGNoYXJhY3RlcnMgYWxvbmUuCi0gICAgICAgICAgICAqcSsrID0gYzsKLSAgICAgICAg
fQotICAgIH0KLX0KLQotQ1N0cmluZyBub3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JMRihjb25zdCBD
U3RyaW5nJiBmcm9tKQotewotICAgIENTdHJpbmcgcmVzdWx0OwotICAgIDo6Q1N0cmluZ0J1ZmZl
ciBidWZmZXIocmVzdWx0KTsKLSAgICBpbnRlcm5hbE5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9DUkxG
KGZyb20sIGJ1ZmZlcik7Ci0gICAgcmV0dXJuIGJ1ZmZlci5idWZmZXIoKTsKLX0KLQotdm9pZCBu
b3JtYWxpemVBbmRBcHBlbmRMaW5lRW5kaW5nc1RvTmF0aXZlKGNvbnN0IENTdHJpbmcmIGZyb20s
IFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0KQorVmVjdG9yPHVpbnQ4X3Q+IG5vcm1hbGl6ZUxpbmVF
bmRpbmdzVG9OYXRpdmUoVmVjdG9yPHVpbnQ4X3Q+JiYgZnJvbSkKIHsKICNpZiBPUyhXSU5ET1dT
KQotICAgIFZlY3RvckNoYXJBcHBlbmRCdWZmZXIgYnVmZmVyKHJlc3VsdCk7Ci0gICAgaW50ZXJu
YWxOb3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JMRihmcm9tLCBidWZmZXIpOworICAgIHJldHVybiBu
b3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JMRihXVEZNb3ZlKGZyb20pKTsKICNlbHNlCi0gICAgbm9y
bWFsaXplVG9DUk9yTEYoZnJvbSwgcmVzdWx0LCBmYWxzZSk7CisgICAgcmV0dXJuIG5vcm1hbGl6
ZUxpbmVFbmRpbmdzVG9MRihXVEZNb3ZlKGZyb20pKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0xpbmVFbmRpbmcuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQv
TGluZUVuZGluZy5oCmluZGV4IDUxYWYwNDUyMTM5NGI0MzdhYzZkMzNjNzZmNzRiNDYzMTE1YWFl
MTkuLjJjODFmYzJiYWJjNDFhYjYzYWE3NmViMTY0ODg0N2MxODFiNzMxOTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL3RleHQvTGluZUVuZGluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvTGluZUVuZGluZy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NSwgMjAwNiwgMjAwOCwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKQEAgLTMyLDE4ICszMiwxNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNl
IFdURiB7CiAKIC8vIE5vcm1hbGl6ZSBhbGwgbGluZS1lbmRpbmdzIGluIHRoZSBnaXZlbiBzdHJp
bmcgdG8gQ1JMRi4KLVdURl9FWFBPUlQgQ1N0cmluZyBub3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JM
Rihjb25zdCBDU3RyaW5nJiBmcm9tKTsKK1dURl9FWFBPUlQgVmVjdG9yPHVpbnQ4X3Q+IG5vcm1h
bGl6ZUxpbmVFbmRpbmdzVG9DUkxGKFZlY3Rvcjx1aW50OF90PiYmKTsKIAotLy8gTm9ybWFsaXpl
IGFsbCBsaW5lLWVuZGluZ3MgaW4gdGhlIGdpdmVuIHN0cmluZyB0byB0aGUgbmF0aXZlIGxpbmUt
ZW5kaW5ncyBhbmQgYXBwZW5kIHRoZSByZXN1bHQgdG8gdGhlIGdpdmVuIGJ1ZmZlci4KLS8vIChO
b3JtYWxpemUgdG8gQ1JMRiBvbiBXaW5kb3dzIGFuZCBub3JtYWxpemUgdG8gTEYgb24gYWxsIG90
aGVyIHBsYXRmb3Jtcy4pCi1XVEZfRVhQT1JUIHZvaWQgbm9ybWFsaXplQW5kQXBwZW5kTGluZUVu
ZGluZ3NUb05hdGl2ZShjb25zdCBDU3RyaW5nJiBmcm9tLCBWZWN0b3I8dWludDhfdD4mIHJlc3Vs
dCk7CisvLyBOb3JtYWxpemUgYWxsIGxpbmUtZW5kaW5ncyAgdG8gQ1JMRiBvbiBXaW5kb3dzIGFu
ZCB0byBMRiBvbiBhbGwgb3RoZXIgcGxhdGZvcm1zLgorV1RGX0VYUE9SVCBWZWN0b3I8dWludDhf
dD4gbm9ybWFsaXplTGluZUVuZGluZ3NUb05hdGl2ZShWZWN0b3I8dWludDhfdD4mJik7CiAKIH0g
Ly8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6Om5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9DUkxG
OwotdXNpbmcgV1RGOjpub3JtYWxpemVBbmRBcHBlbmRMaW5lRW5kaW5nc1RvTmF0aXZlOwordXNp
bmcgV1RGOjpub3JtYWxpemVMaW5lRW5kaW5nc1RvTmF0aXZlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvdGV4dC9TdHJpbmdDb21tb24uaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5n
Q29tbW9uLmgKaW5kZXggOTMzMjk1N2MwMTViZWUzYTZhM2NjMjAzNTg5OTdmZDM5YmVkNTZjZC4u
Y2M2OTI3ZmQ3MGNmNzdhNDNjZTFlOGE4MzMyMTYzM2Q4MjdiMWUzOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb21tb24uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0
L1N0cmluZ0NvbW1vbi5oCkBAIC00Myw2ICs0Myw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGUsIHVuc2lnbmVkIGxvd2VyY2FzZUxldHRlcnNMZW5ndGg+IGJvb2wgZXF1YWxMZXR0
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ0NsYXNzLCB1bnNpZ25lZCBsZW5ndGg+IGJvb2wg
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2VDb21tb24oY29uc3QgU3RyaW5nQ2xhc3MmLCBj
b25zdCBjaGFyICgmbG93ZXJjYXNlTGV0dGVycylbbGVuZ3RoXSk7CiAKK2Jvb2wgZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOwordGVtcGxhdGU8dW5zaWdu
ZWQgbG93ZXJjYXNlTGV0dGVyc0xlbmd0aD4gYm9vbCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZShjb25zdCBjaGFyKiwgY29uc3QgY2hhciAoJmxvd2VyY2FzZUxldHRlcnMpW2xvd2VyY2Fz
ZUxldHRlcnNMZW5ndGhdKTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGlubGluZSBUIGxvYWRV
bmFsaWduZWQoY29uc3QgY2hhciogcykKIHsKQEAgLTY1MCw2ICs2NTMsMTggQEAgdGVtcGxhdGU8
dHlwZW5hbWUgU3RyaW5nQ2xhc3MsIHVuc2lnbmVkIGxlbmd0aD4gaW5saW5lIGJvb2wgc3RhcnRz
V2l0aExldHRlcnNJZ24KICAgICByZXR1cm4gc3RhcnRzV2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZUNvbW1vbldpdGhvdXRMZW5ndGgoc3RyaW5nLCBwb2ludGVyKTsKIH0KIAoraW5saW5lIGJv
b2wgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBjaGFyKiBhLCBjb25zdCBjaGFyKiBiKQor
eworICAgIGF1dG8gbGVuZ3RoID0gc3RybGVuKGEpOworICAgIHJldHVybiBsZW5ndGggPT0gc3Ry
bGVuKGIpICYmIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYSwgYiwgbGVuZ3RoKTsKK30KKwordGVt
cGxhdGU8dW5zaWduZWQgbG93ZXJjYXNlTGV0dGVyc0xlbmd0aD4gaW5saW5lIGJvb2wgZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgY2hhciogc3RyaW5nLCBjb25zdCBjaGFyICgm
bG93ZXJjYXNlTGV0dGVycylbbG93ZXJjYXNlTGV0dGVyc0xlbmd0aF0pCit7CisgICAgYXV0byBs
ZW5ndGggPSBzdHJsZW4obG93ZXJjYXNlTGV0dGVycyk7CisgICAgcmV0dXJuIHN0cmxlbihzdHJp
bmcpID09IGxlbmd0aCAmJiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcsIGxv
d2VyY2FzZUxldHRlcnMsIGxlbmd0aCk7Cit9CisKIH0KIAogdXNpbmcgV1RGOjplcXVhbElnbm9y
aW5nQVNDSUlDYXNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9UZXh0U3RyZWFt
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvVGV4dFN0cmVhbS5jcHAKaW5kZXggYzJmMmVmMjc1
Njg4ZWM0YmZlZDMzZDNhYTllYmNhOTM1NTZiNTZjMy4uYWFmNjE5NGFiZmU1OGU1YTM0YTAwZmNk
ODEwZjlmMzk3NmM4YjI0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9UZXh0U3Ry
ZWFtLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1RleHRTdHJlYW0uY3BwCkBAIC0yNyw3
ICsyNyw2IEBACiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogCiAjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvdGV4dC9XVEZTdHJpbmcuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcu
Y3BwCmluZGV4IGZlMjhmYjY0YjY0MTU3MDgzNmU0NWEwNTdlOGZmYWNiNDg2YjVlZjkuLmZjMDcz
NWZlNTRkNDBkYzE2NWYzMTViY2ZlZGZiZjgwNzkxYjhkYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0
cmluZy5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgog
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogI2luY2x1ZGUgPHd0Zi9kdG9hLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFj
dGVyTmFtZXMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvaWN1L0NvbGxh
dG9ySUNVLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvaWN1L0NvbGxhdG9ySUNVLmNwcApp
bmRleCAyNmE0ZDgzODZhYmZmYTkwNWRlMWFlODE4ODdlMzU1YzIyOTRiNDk5Li5mNWUzMmExYmZm
M2Y5N2E5NmMxNTRjMjFkNzY2ZGFhZDQzYjU3ZGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi91bmljb2RlL2ljdS9Db2xsYXRvcklDVS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdW5pY29k
ZS9pY3UvQ29sbGF0b3JJQ1UuY3BwCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSA8bXV0ZXg+
CiAjaW5jbHVkZSA8dW5pY29kZS91Y29sLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KLSNpbmNs
dWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5o
PgogCiAjaWYgT1MoREFSV0lOKSAmJiBVU0UoQ0YpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Zl
dGNoL0ZldGNoQm9keS5jcHAKaW5kZXggZmE5OGRkODBlNGEyNmRlNGNhMTc3OGYzZjU0MGUyMWJh
MzQwN2VhOC4uODU4ZDZhYTdhMWVkMzA3YTlkZmU3YTc4ZGEyZWIzYWEwZWY0ODU2MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmNwcApAQCAtMTU3LDYgKzE1Nyw3
IEBAIHZvaWQgRmV0Y2hCb2R5Ojpjb25zdW1lKEZldGNoQm9keU93bmVyJiBvd25lciwgUmVmPERl
ZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQogfQogCiAjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQor
CiB2b2lkIEZldGNoQm9keTo6Y29uc3VtZUFzU3RyZWFtKEZldGNoQm9keU93bmVyJiBvd25lciwg
RmV0Y2hCb2R5U291cmNlJiBzb3VyY2UpCiB7CiAgICAgYm9vbCBjbG9zZVN0cmVhbSA9IGZhbHNl
OwpAQCAtMTY4LDExICsxNjksMTEgQEAgdm9pZCBGZXRjaEJvZHk6OmNvbnN1bWVBc1N0cmVhbShG
ZXRjaEJvZHlPd25lciYgb3duZXIsIEZldGNoQm9keVNvdXJjZSYgc291cmNlKQogICAgICAgICBt
X2RhdGEgPSBudWxscHRyOwogICAgIH0gZWxzZSBpZiAoaXNUZXh0KCkpIHsKICAgICAgICAgYXV0
byBkYXRhID0gVVRGOEVuY29kaW5nKCkuZW5jb2RlKHRleHRCb2R5KCksIEVudGl0aWVzRm9yVW5l
bmNvZGFibGVzKTsKLSAgICAgICAgY2xvc2VTdHJlYW0gPSBzb3VyY2UuZW5xdWV1ZShBcnJheUJ1
ZmZlcjo6dHJ5Q3JlYXRlKGRhdGEuZGF0YSgpLCBkYXRhLmxlbmd0aCgpKSk7CisgICAgICAgIGNs
b3NlU3RyZWFtID0gc291cmNlLmVucXVldWUoQXJyYXlCdWZmZXI6OnRyeUNyZWF0ZShkYXRhLmRh
dGEoKSwgZGF0YS5zaXplKCkpKTsKICAgICAgICAgbV9kYXRhID0gbnVsbHB0cjsKICAgICB9IGVs
c2UgaWYgKGlzVVJMU2VhcmNoUGFyYW1zKCkpIHsKICAgICAgICAgYXV0byBkYXRhID0gVVRGOEVu
Y29kaW5nKCkuZW5jb2RlKHVybFNlYXJjaFBhcmFtc0JvZHkoKS50b1N0cmluZygpLCBFbnRpdGll
c0ZvclVuZW5jb2RhYmxlcyk7Ci0gICAgICAgIGNsb3NlU3RyZWFtID0gc291cmNlLmVucXVldWUo
QXJyYXlCdWZmZXI6OnRyeUNyZWF0ZShkYXRhLmRhdGEoKSwgZGF0YS5sZW5ndGgoKSkpOworICAg
ICAgICBjbG9zZVN0cmVhbSA9IHNvdXJjZS5lbnF1ZXVlKEFycmF5QnVmZmVyOjp0cnlDcmVhdGUo
ZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKSk7CiAgICAgICAgIG1fZGF0YSA9IG51bGxwdHI7CiAg
ICAgfSBlbHNlIGlmIChpc0Jsb2IoKSkgewogICAgICAgICBvd25lci5sb2FkQmxvYihibG9iQm9k
eSgpLCBudWxscHRyKTsKQEAgLTE4Nyw2ICsxODgsNyBAQCB2b2lkIEZldGNoQm9keTo6Y29uc3Vt
ZUFzU3RyZWFtKEZldGNoQm9keU93bmVyJiBvd25lciwgRmV0Y2hCb2R5U291cmNlJiBzb3VyY2Up
CiAgICAgaWYgKGNsb3NlU3RyZWFtKQogICAgICAgICBzb3VyY2UuY2xvc2UoKTsKIH0KKwogI2Vu
ZGlmCiAKIHZvaWQgRmV0Y2hCb2R5Ojpjb25zdW1lQXJyYXlCdWZmZXIoUmVmPERlZmVycmVkUHJv
bWlzZT4mJiBwcm9taXNlKQpAQCAtMjA0LDcgKzIwNiw3IEBAIHZvaWQgRmV0Y2hCb2R5Ojpjb25z
dW1lQXJyYXlCdWZmZXJWaWV3KFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKIHZvaWQg
RmV0Y2hCb2R5Ojpjb25zdW1lVGV4dChSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UsIGNv
bnN0IFN0cmluZyYgdGV4dCkKIHsKICAgICBhdXRvIGRhdGEgPSBVVEY4RW5jb2RpbmcoKS5lbmNv
ZGUodGV4dCwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwotICAgIG1fY29uc3VtZXIucmVzb2x2
ZVdpdGhEYXRhKFdURk1vdmUocHJvbWlzZSksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGRhdGEuZGF0YSgpKSwgZGF0YS5sZW5ndGgoKSk7CisgICAgbV9jb25zdW1lci5yZXNvbHZl
V2l0aERhdGEoV1RGTW92ZShwcm9taXNlKSwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKICAg
ICBtX2RhdGEgPSBudWxscHRyOwogfQogCkBAIC0yNzEsMTUgKzI3MywxMCBAQCBGZXRjaEJvZHk6
OlRha2VuRGF0YSBGZXRjaEJvZHk6OnRha2UoKQogICAgIGlmIChpc0Zvcm1EYXRhKCkpCiAgICAg
ICAgIHJldHVybiBmb3JtRGF0YUJvZHkoKTsKIAotICAgIGlmIChpc1RleHQoKSkgewotICAgICAg
ICBhdXRvIGRhdGEgPSBVVEY4RW5jb2RpbmcoKS5lbmNvZGUodGV4dEJvZHkoKSwgRW50aXRpZXNG
b3JVbmVuY29kYWJsZXMpOwotICAgICAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZGF0
YS5kYXRhKCksIGRhdGEubGVuZ3RoKCkpOwotICAgIH0KLQotICAgIGlmIChpc1VSTFNlYXJjaFBh
cmFtcygpKSB7Ci0gICAgICAgIGF1dG8gZGF0YSA9IFVURjhFbmNvZGluZygpLmVuY29kZSh1cmxT
ZWFyY2hQYXJhbXNCb2R5KCkudG9TdHJpbmcoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwot
ICAgICAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZGF0YS5kYXRhKCksIGRhdGEubGVu
Z3RoKCkpOwotICAgIH0KKyAgICBpZiAoaXNUZXh0KCkpCisgICAgICAgIHJldHVybiBTaGFyZWRC
dWZmZXI6OmNyZWF0ZShVVEY4RW5jb2RpbmcoKS5lbmNvZGUodGV4dEJvZHkoKSwgRW50aXRpZXNG
b3JVbmVuY29kYWJsZXMpKTsKKyAgICBpZiAoaXNVUkxTZWFyY2hQYXJhbXMoKSkKKyAgICAgICAg
cmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFVURjhFbmNvZGluZygpLmVuY29kZSh1cmxTZWFy
Y2hQYXJhbXNCb2R5KCkudG9TdHJpbmcoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpKTsKIAog
ICAgIGlmIChpc0FycmF5QnVmZmVyKCkpCiAgICAgICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNy
ZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihhcnJheUJ1ZmZlckJvZHkoKS5kYXRh
KCkpLCBhcnJheUJ1ZmZlckJvZHkoKS5ieXRlTGVuZ3RoKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRlci5jcHAKaW5kZXgg
ZTViMmUzNjM4YTAwODQ1Mjc5N2JjZjMwOGJiZDk3YTlmODM0YWE2ZC4uN2QzOTcxZDU3OTZiYmRj
YzQ2ODllYTJlOTliYjE0YTU4ZmMwOGRiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RGVmbGF0ZXIuY3BwCkBAIC0zNyw3ICszNyw2
IEBACiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogI2luY2x1ZGUgPHpsaWIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKaW5kZXgg
N2VjMjc4NjM4MGQ2YTBhODNiN2MzMGVjYjQ2MDMyOTFiNWEyOGM5My4uMjY1MjNkY2JjM2I2YzQ2
ZTMwZWNkMmQyMzM0MmZiNTEzNWYwNzk3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKQEAgLTQ0LDEyICs0
NCwxMiBAQAogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiVVJMLmgiCiAj
aW5jbHVkZSAiV2ViU29ja2V0LmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8d3Rm
L0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1i
ZXIuaD4KICNpbmNsdWRlIDx3dGYvTUQ1Lmg+CiAjaW5jbHVkZSA8d3RmL1NIQTEuaD4KICNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Q
QUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9QQUwvUEFM
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNzNlYTdjNGY1YjFmYzA5ZDBkZjg0YWFk
MjJhNzZkMzc2MzI5MmNmMS4uYmQ2ZjBhMTRhZGUwMzk3ODM1OWNjNWU1ZjBkMjBmYzAxNjhjNDRl
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9QQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMjUzLDYgKzI1Myw3IEBACiAJCTFDNDg3NkRGMUY4RDgzNzUwMENDRUVCRCAvKiBM
b2dnaW5nQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMb2dnaW5nQ29jb2EubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDNjdDRUExMUUzMkVEQTgwMEY4MEYyRSAvKiBG
ZWF0dXJlRGVmaW5lcy54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBG
ZWF0dXJlRGVmaW5lcy54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM2
N0NFQTIxRTMyRUUyNjAwRjgwRjJFIC8qIFZlcnNpb24ueGNjb25maWcgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
LnhjY29uZmlnOyBwYXRoID0gVmVyc2lvbi54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJOTNFNTkwOUMxRjkzQkYxRTAwNjdGOENGIC8qIFVuZW5jb2RhYmxlSGFuZGxpbmcu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVW5lbmNvZGFibGVIYW5kbGluZy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBMTAyNjU4NjFGNTY3NDYxMDBCNEM4NDQgLyogRm91bmRhdGlvblNQSS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb3VuZGF0aW9uU1BJLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExMDI2NTg4MUY1Njc0N0EwMEI0Qzg0NCAvKiBISVRv
b2xib3hTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSElUb29sYm94U1BJ
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExMDI2NThBMUY1Njc0OEMwMEI0Qzg0
NCAvKiBRdWlja0RyYXdTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVp
Y2tEcmF3U1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NDAsNiArNTQxLDcg
QEAKIAkJCQlBMzBENDEyMzFGMEREMTA1MDBCNzE5NTQgLyogbWFjICovLAogCQkJCUEzMEQ0MTFG
MUYwREQwRUEwMEI3MTk1NCAvKiBLaWxsUmluZy5jcHAgKi8sCiAJCQkJQTMwRDQxMUUxRjBERDBF
QTAwQjcxOTU0IC8qIEtpbGxSaW5nLmggKi8sCisJCQkJOTNFNTkwOUMxRjkzQkYxRTAwNjdGOENG
IC8qIFVuZW5jb2RhYmxlSGFuZGxpbmcuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gdGV4dDsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL3RleHQvVW5lbmNvZGFibGVIYW5kbGluZy5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90
ZXh0L1VuZW5jb2RhYmxlSGFuZGxpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YzIzMDE2NmRjODE2Yjg3NDU4
OGIxN2NmNmRmMjNmZWZlZGIxYjFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
UEFML3BhbC90ZXh0L1VuZW5jb2RhYmxlSGFuZGxpbmcuaApAQCAtMCwwICsxLDQ3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBTcGVjaWZpZXMgd2hhdCB3aWxsIGhhcHBl
biB3aGVuIGEgY2hhcmFjdGVyIGlzIGVuY291bnRlcmVkIHRoYXQgaXMKKy8vIG5vdCBlbmNvZGFi
bGUgaW4gdGhlIGNoYXJhY3RlciBzZXQuCitlbnVtIFVuZW5jb2RhYmxlSGFuZGxpbmcgeworICAg
IC8vIFN1YnN0aXR1dGVzIHRoZSByZXBsYWNlbWVudCBjaGFyYWN0ZXIgIj8iLgorICAgIFF1ZXN0
aW9uTWFya3NGb3JVbmVuY29kYWJsZXMsCisKKyAgICAvLyBFbmNvZGVzIHRoZSBjaGFyYWN0ZXIg
YXMgYW4gWE1MIGVudGl0eS4gRm9yIGV4YW1wbGUsIFUrMDZERQorICAgIC8vIHdvdWxkIGJlICIm
IzE3NTg7IiAoMHg2REUgPSAxNzU4IGluIG9jdGFsKS4KKyAgICBFbnRpdGllc0ZvclVuZW5jb2Rh
YmxlcywKKworICAgIC8vIEVuY29kZXMgdGhlIGNoYXJhY3RlciBhcyBlbiBlbnRpdHkgYXMgYWJv
dmUsIGJ1dCBlc2NhcGVkCisgICAgLy8gbm9uLWFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLiBUaGlz
IGlzIHVzZWQgaW4gVVJMcy4KKyAgICAvLyBGb3IgZXhhbXBsZSwgVSs2REUgd291bGQgYmUgIiUy
NiUyMzE3NTglM0IiLgorICAgIFVSTEVuY29kZWRFbnRpdGllc0ZvclVuZW5jb2RhYmxlcworfTsK
KworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvSWRlbnRpZmllclJlcC5o
IGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL0lkZW50aWZpZXJSZXAuaAppbmRleCAyNDhlZjg5MzEz
ZTY2Y2JkYTM1NjhhNDlhYTRiNTVmMzU4ZmI3Y2ZhLi4zNTQwMGYxN2MzMzYzNTdlNjk1ZDE4NmI5
MTExY2NjZGE5ZDM0MWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvSWRlbnRp
ZmllclJlcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9JZGVudGlmaWVyUmVwLmgKQEAg
LTIzLDEyICsyMywxMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBJZGVudGlm
aWVyUmVwX2gKLSNkZWZpbmUgSWRlbnRpZmllclJlcF9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KLSNpbmNs
dWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTcwLDQgKzY4LDMgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCi0jZW5kaWYgLy8gSWRlbnRpZmllclJlcF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9j
L2NfaW5zdGFuY2UuY3BwCmluZGV4IDk2OTJlNWJjMWRkZjU3YWVjYjQxMmVjMDAwNGU4OTU5YzE4
ZmI0ZTYuLjhlZjJhYTQ2OTJlYWNmMWIwNGIyZjZjZTAyMjA1ZWEwYzE5YzM0NWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCkBAIC00Nyw3ICs0Nyw2IEBACiAjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2JCdWlsZGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYkJ1aWxkZXIuY3BwCmluZGV4IGFmNmQxZTZkYzY0MmRiYjUx
Y2VjMzMxMTFmOWQ5NzA0OTMzNjI4Y2IuLjU5NTFmN2I3NTMwZDNjZDY2ZDhkMzdlY2Y3M2Q3NWU2
YTljOTRiNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYkJ1aWxkZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYkJ1aWxkZXIuY3BwCkBAIC00OSwx
NCArNDksMTQgQEAgdm9pZCBCbG9iQnVpbGRlcjo6YXBwZW5kKFJlZlB0cjxBcnJheUJ1ZmZlcj4m
JiBhcnJheUJ1ZmZlcikKIHsKICAgICBpZiAoIWFycmF5QnVmZmVyKQogICAgICAgICByZXR1cm47
Ci0gICAgbV9hcHBlbmRhYmxlRGF0YS5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGFy
cmF5QnVmZmVyLT5kYXRhKCkpLCBhcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKKyAgICBtX2Fw
cGVuZGFibGVEYXRhLmFwcGVuZChzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYXJyYXlCdWZm
ZXItPmRhdGEoKSksIGFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwogfQogCiB2b2lkIEJsb2JC
dWlsZGVyOjphcHBlbmQoUmVmUHRyPEFycmF5QnVmZmVyVmlldz4mJiBhcnJheUJ1ZmZlclZpZXcp
CiB7CiAgICAgaWYgKCFhcnJheUJ1ZmZlclZpZXcpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2Fw
cGVuZGFibGVEYXRhLmFwcGVuZChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYXJyYXlCdWZmZXJW
aWV3LT5iYXNlQWRkcmVzcygpKSwgYXJyYXlCdWZmZXJWaWV3LT5ieXRlTGVuZ3RoKCkpOworICAg
IG1fYXBwZW5kYWJsZURhdGEuYXBwZW5kKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihhcnJh
eUJ1ZmZlclZpZXctPmJhc2VBZGRyZXNzKCkpLCBhcnJheUJ1ZmZlclZpZXctPmJ5dGVMZW5ndGgo
KSk7CiB9CiAKIHZvaWQgQmxvYkJ1aWxkZXI6OmFwcGVuZChSZWZQdHI8QmxvYj4mJiBibG9iKQpA
QCAtNzAsMTMgKzcwLDE2IEBAIHZvaWQgQmxvYkJ1aWxkZXI6OmFwcGVuZChSZWZQdHI8QmxvYj4m
JiBibG9iKQogCiB2b2lkIEJsb2JCdWlsZGVyOjphcHBlbmQoY29uc3QgU3RyaW5nJiB0ZXh0KQog
ewotICAgIENTdHJpbmcgdXRmOFRleHQgPSBVVEY4RW5jb2RpbmcoKS5lbmNvZGUodGV4dCwgRW50
aXRpZXNGb3JVbmVuY29kYWJsZXMpOworICAgIGF1dG8gYnl0ZXMgPSBVVEY4RW5jb2RpbmcoKS5l
bmNvZGUodGV4dCwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwogCiAgICAgaWYgKG1fZW5kaW5n
cyA9PSBCbG9iTGluZUVuZGluZ3M6Ok5hdGl2ZSkKLSAgICAgICAgbm9ybWFsaXplQW5kQXBwZW5k
TGluZUVuZGluZ3NUb05hdGl2ZSh1dGY4VGV4dCwgbV9hcHBlbmRhYmxlRGF0YSk7CisgICAgICAg
IGJ5dGVzID0gbm9ybWFsaXplTGluZUVuZGluZ3NUb05hdGl2ZShXVEZNb3ZlKGJ5dGVzKSk7CisK
KyAgICBpZiAobV9hcHBlbmRhYmxlRGF0YS5pc0VtcHR5KCkpCisgICAgICAgIG1fYXBwZW5kYWJs
ZURhdGEgPSBXVEZNb3ZlKGJ5dGVzKTsKICAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG1fZW5k
aW5ncyA9PSBCbG9iTGluZUVuZGluZ3M6OlRyYW5zcGFyZW50KTsKLSAgICAgICAgbV9hcHBlbmRh
YmxlRGF0YS5hcHBlbmQodXRmOFRleHQuZGF0YSgpLCB1dGY4VGV4dC5sZW5ndGgoKSk7CisgICAg
ICAgIC8vIEZJWE1FOiBXb3VsZCBpdCBiZSBiZXR0ZXIgdG8gbW92ZSBtdWx0aXBsZSB2ZWN0b3Jz
IGludG8gbV9pdGVtcyBpbnN0ZWFkIG9mIG1lcmdpbmcgdGhlbSBpbnRvIG9uZT8KKyAgICAgICAg
bV9hcHBlbmRhYmxlRGF0YS5hcHBlbmRWZWN0b3IoYnl0ZXMpOwogICAgIH0KIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAK
aW5kZXggOGQzM2VlNjYzZmIzMzA3MDRhOTg4YTIxMTVjMDQzMGNiMTllMzZlZi4uYjVjYTQ2YzIx
ZmI2Y2EyNWNiOTgyNWM3OTVmMDg4N2I0NDQ1MjBkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw2ICsyOSw3
IEBACiAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21z
LmgiCisjaW5jbHVkZSAiVGV4dENvZGVjLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nUmVnaXN0
cnkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTUzLDcgKzE1NCw4IEBAIGJvb2wgSFRN
TE1ldGFDaGFyc2V0UGFyc2VyOjpjaGVja0Zvck1ldGFDaGFyc2V0KGNvbnN0IGNoYXIqIGRhdGEs
IHNpemVfdCBsZW5ndGgpCiAKICAgICBjb25zdGV4cHIgaW50IGJ5dGVzVG9DaGVja1VuY29uZGl0
aW9uYWxseSA9IDEwMjQ7CiAKLSAgICBtX2lucHV0LmFwcGVuZChtX2NvZGVjLT5kZWNvZGUoZGF0
YSwgbGVuZ3RoKSk7CisgICAgYm9vbCBpZ25vcmVkU2F3RXJyb3JGbGFnOworICAgIG1faW5wdXQu
YXBwZW5kKG1fY29kZWMtPmRlY29kZShkYXRhLCBsZW5ndGgsIGZhbHNlLCBmYWxzZSwgaWdub3Jl
ZFNhd0Vycm9yRmxhZykpOwogCiAgICAgd2hpbGUgKGF1dG8gdG9rZW4gPSBtX3Rva2VuaXplci5u
ZXh0VG9rZW4obV9pbnB1dCkpIHsKICAgICAgICAgYm9vbCBpc0VuZCA9IHRva2VuLT50eXBlKCkg
PT0gSFRNTFRva2VuOjpFbmRUYWc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4IGQwODY5ZWZhYjFkNWNiYjQ2Y2Y4
ZWZkYTE5NTc0OGMzM2FhYmEyMTIuLjQ0NmVkYTA4YTdkZGU2NDRjZTgzZmEzZWFjODczMWIyMTAx
ODk1OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwCkBAIC0xNDE1LDEwICsxNDE1LDEwIEBAIHN0YXRpYyBTdHJpbmcg
Y29tcHV0ZUNvbnRlbnRTZWN1cml0eVBvbGljeVNIQTI1Nkhhc2goY29uc3QgRWxlbWVudCYgZWxl
bWVudCkKICAgICAvLyBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTUxODQ+LgogICAgIFRleHRFbmNvZGluZyBkb2N1bWVudEVuY29kaW5nID0gZWxlbWVudC5k
b2N1bWVudCgpLnRleHRFbmNvZGluZygpOwogICAgIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2Rp
bmdUb1VzZSA9IGRvY3VtZW50RW5jb2RpbmcuaXNWYWxpZCgpID8gZG9jdW1lbnRFbmNvZGluZyA6
IFVURjhFbmNvZGluZygpOwotICAgIENTdHJpbmcgY29udGVudCA9IGVuY29kaW5nVG9Vc2UuZW5j
b2RlKFRleHROb2RlVHJhdmVyc2FsOjpjb250ZW50c0FzU3RyaW5nKGVsZW1lbnQpLCBFbnRpdGll
c0ZvclVuZW5jb2RhYmxlcyk7CisgICAgYXV0byBjb250ZW50ID0gZW5jb2RpbmdUb1VzZS5lbmNv
ZGUoVGV4dE5vZGVUcmF2ZXJzYWw6OmNvbnRlbnRzQXNTdHJpbmcoZWxlbWVudCksIEVudGl0aWVz
Rm9yVW5lbmNvZGFibGVzKTsKICAgICBhdXRvIGNyeXB0b0RpZ2VzdCA9IFBBTDo6Q3J5cHRvRGln
ZXN0OjpjcmVhdGUoUEFMOjpDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzI1Nik7Ci0gICAg
Y3J5cHRvRGlnZXN0LT5hZGRCeXRlcyhjb250ZW50LmRhdGEoKSwgY29udGVudC5sZW5ndGgoKSk7
Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRpZ2VzdCA9IGNyeXB0b0RpZ2VzdC0+Y29tcHV0ZUhhc2go
KTsKKyAgICBjcnlwdG9EaWdlc3QtPmFkZEJ5dGVzKGNvbnRlbnQuZGF0YSgpLCBjb250ZW50LnNp
emUoKSk7CisgICAgYXV0byBkaWdlc3QgPSBjcnlwdG9EaWdlc3QtPmNvbXB1dGVIYXNoKCk7CiAg
ICAgcmV0dXJuIG1ha2VTdHJpbmcoInNoYTI1Ni0iLCBiYXNlNjRFbmNvZGUoZGlnZXN0LmRhdGEo
KSwgZGlnZXN0LnNpemUoKSkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuY3BwCmluZGV4IGJhZTkxMmEzMjg3OWI4ZTg5
Y2MzYmI4YWQ3YzJhNzY0ZjVkYzI5YzYuLjE1ODMyM2FmYTQ2MDRjNjBlZDU3M2Y1MWI5Mjg3OTlh
YTMyNmJlY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUNyeXB0
b2dyYXBoaWNEaWdlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUNy
eXB0b2dyYXBoaWNEaWdlc3QuY3BwCkBAIC0xNTQsNyArMTU0LDcgQEAgc3RhdGljIFBBTDo6Q3J5
cHRvRGlnZXN0OjpBbGdvcml0aG0gdG9DcnlwdG9EaWdlc3RBbGdvcml0aG0oUmVzb3VyY2VDcnlw
dG9ncmFwaGkKICAgICByZXR1cm4gUEFMOjpDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzUx
MjsKIH0KIAotUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IGNyeXB0b2dyYXBoaWNEaWdlc3RG
b3JCeXRlcyhSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobSBhbGdvcml0aG0s
IGNvbnN0IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoKQorUmVzb3VyY2VDcnlwdG9ncmFwaGlj
RGlnZXN0IGNyeXB0b2dyYXBoaWNEaWdlc3RGb3JCeXRlcyhSZXNvdXJjZUNyeXB0b2dyYXBoaWNE
aWdlc3Q6OkFsZ29yaXRobSBhbGdvcml0aG0sIGNvbnN0IHZvaWQqIGJ5dGVzLCBzaXplX3QgbGVu
Z3RoKQogewogICAgIGF1dG8gY3J5cHRvRGlnZXN0ID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0
ZSh0b0NyeXB0b0RpZ2VzdEFsZ29yaXRobShhbGdvcml0aG0pKTsKICAgICBjcnlwdG9EaWdlc3Qt
PmFkZEJ5dGVzKGJ5dGVzLCBsZW5ndGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oCmluZGV4IDYzOGE0YTNmMjE1MGUxMDdhOTY2
NDNiNGE0NmI0MzgxYzhjNmRlYjguLmU0YTgyYWU3NDY1ODE1NmM3NzZiNTdmZWYxYThmZDk3ZDQ0
OTFiYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUNyeXB0b2dy
YXBoaWNEaWdlc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9n
cmFwaGljRGlnZXN0LmgKQEAgLTc2LDcgKzc2LDcgQEAgc3RkOjpvcHRpb25hbDxFbmNvZGVkUmVz
b3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZUVuY29kZWRDcnlwdG9ncmFwaGljRGlnZXMK
IAogc3RkOjpvcHRpb25hbDxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IGRlY29kZUVuY29k
ZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QoY29uc3QgRW5jb2RlZFJlc291cmNlQ3J5cHRv
Z3JhcGhpY0RpZ2VzdCYpOwogCi1SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QgY3J5cHRvZ3Jh
cGhpY0RpZ2VzdEZvckJ5dGVzKFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3JpdGht
LCBjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90IGxlbmd0aCk7CitSZXNvdXJjZUNyeXB0b2dyYXBo
aWNEaWdlc3QgY3J5cHRvZ3JhcGhpY0RpZ2VzdEZvckJ5dGVzKFJlc291cmNlQ3J5cHRvZ3JhcGhp
Y0RpZ2VzdDo6QWxnb3JpdGhtLCBjb25zdCB2b2lkKiBieXRlcywgc2l6ZV90IGxlbmd0aCk7CiAK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29k
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuY3BwCmlu
ZGV4IDVkMDljMjM4ZWMwZjI5ZGUyNGVkNjRjN2MzN2RiMjEwNTg5MWE5ZjEuLmEwZjkzMmU2YTk2
OWFlZjUxN2VhMDRlMzdjMDc3NTk0NTMzNmJiZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHAKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHly
aWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQotICAgIENvcHly
aWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgQ29weXJpZ2h0IChDKSAyMDAzLTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgIENvcHlyaWdodCAoQykgMjAw
NSwgMjAwNiwgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAKICAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nRGV0ZWN0b3IuaCIK
ICNpbmNsdWRlICJUZXh0RW5jb2RpbmdSZWdpc3RyeS5oIgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNU
eXBlLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTMyMiwyMCArMzIxLDE4IEBAIGNvbnN0IFRleHRFbmNvZGluZyYgVGV4dFJlc291
cmNlRGVjb2Rlcjo6ZGVmYXVsdEVuY29kaW5nKENvbnRlbnRUeXBlIGNvbnRlbnRUeXBlCiAgICAg
cmV0dXJuIHNwZWNpZmllZERlZmF1bHRFbmNvZGluZzsKIH0KIAotVGV4dFJlc291cmNlRGVjb2Rl
cjo6VGV4dFJlc291cmNlRGVjb2Rlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBUZXh0
RW5jb2RpbmcmIHNwZWNpZmllZERlZmF1bHRFbmNvZGluZywgYm9vbCB1c2VzRW5jb2RpbmdEZXRl
Y3RvcikKK2lubGluZSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpUZXh0UmVzb3VyY2VEZWNvZGVyKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYgc3BlY2lmaWVkRGVmYXVs
dEVuY29kaW5nLCBib29sIHVzZXNFbmNvZGluZ0RldGVjdG9yKQogICAgIDogbV9jb250ZW50VHlw
ZShkZXRlcm1pbmVDb250ZW50VHlwZShtaW1lVHlwZSkpCiAgICAgLCBtX2VuY29kaW5nKGRlZmF1
bHRFbmNvZGluZyhtX2NvbnRlbnRUeXBlLCBzcGVjaWZpZWREZWZhdWx0RW5jb2RpbmcpKQotICAg
ICwgbV9zb3VyY2UoRGVmYXVsdEVuY29kaW5nKQotICAgICwgbV9oaW50RW5jb2RpbmcobnVsbHB0
cikKLSAgICAsIG1fY2hlY2tlZEZvckJPTShmYWxzZSkKLSAgICAsIG1fY2hlY2tlZEZvckNTU0No
YXJzZXQoZmFsc2UpCi0gICAgLCBtX2NoZWNrZWRGb3JIZWFkQ2hhcnNldChmYWxzZSkKLSAgICAs
IG1fdXNlTGVuaWVudFhNTERlY29kaW5nKGZhbHNlKQotICAgICwgbV9zYXdFcnJvcihmYWxzZSkK
ICAgICAsIG1fdXNlc0VuY29kaW5nRGV0ZWN0b3IodXNlc0VuY29kaW5nRGV0ZWN0b3IpCiB7CiB9
CiAKK1JlZjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVGV4dEVuY29kaW5nJiBkZWZhdWx0RW5jb2Rp
bmcsIGJvb2wgdXNlc0VuY29kaW5nRGV0ZWN0b3IpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgVGV4dFJlc291cmNlRGVjb2RlcihtaW1lVHlwZSwgZGVmYXVsdEVuY29kaW5nLCB1c2VzRW5j
b2RpbmdEZXRlY3RvcikpOworfQorCiBUZXh0UmVzb3VyY2VEZWNvZGVyOjp+VGV4dFJlc291cmNl
RGVjb2RlcigpID0gZGVmYXVsdDsKIAogdm9pZCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpzZXRFbmNv
ZGluZyhjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBFbmNvZGluZ1NvdXJjZSBzb3VyY2Up
CkBAIC0zNDYsNyArMzQzLDcgQEAgdm9pZCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpzZXRFbmNvZGlu
Zyhjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBFbmNvZGluZ1NvdXIKIAogICAgIC8vIFdo
ZW4gZW5jb2RpbmcgY29tZXMgZnJvbSBtZXRhIHRhZyAoaS5lLiBpdCBjYW5ub3QgYmUgWE1MIGZp
bGVzIHNlbnQgdmlhIFhIUiksCiAgICAgLy8gdHJlYXQgeC11c2VyLWRlZmluZWQgYXMgd2luZG93
cy0xMjUyIChidWcgMTgyNzApCi0gICAgaWYgKHNvdXJjZSA9PSBFbmNvZGluZ0Zyb21NZXRhVGFn
ICYmIHN0cmNhc2VjbXAoZW5jb2RpbmcubmFtZSgpLCAieC11c2VyLWRlZmluZWQiKSA9PSAwKQor
ICAgIGlmIChzb3VyY2UgPT0gRW5jb2RpbmdGcm9tTWV0YVRhZyAmJiBlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShlbmNvZGluZy5uYW1lKCksICJ4LXVzZXItZGVmaW5lZCIpKQogICAgICAg
ICBtX2VuY29kaW5nID0gIndpbmRvd3MtMTI1MiI7CiAgICAgZWxzZSBpZiAoc291cmNlID09IEVu
Y29kaW5nRnJvbU1ldGFUYWcgfHwgc291cmNlID09IEVuY29kaW5nRnJvbVhNTEhlYWRlciB8fCBz
b3VyY2UgPT0gRW5jb2RpbmdGcm9tQ1NTQ2hhcnNldCkgICAgICAgIAogICAgICAgICBtX2VuY29k
aW5nID0gZW5jb2RpbmcuY2xvc2VzdEJ5dGVCYXNlZEVxdWl2YWxlbnQoKTsKQEAgLTU5MywzNSAr
NTkwLDMzIEBAIHZvaWQgVGV4dFJlc291cmNlRGVjb2Rlcjo6ZGV0ZWN0SmFwYW5lc2VFbmNvZGlu
Zyhjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuKQogLy8gICBpbiB0aGUgZmlyc3QgcGxhY2Uu
IAogYm9vbCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpzaG91bGRBdXRvRGV0ZWN0KCkgY29uc3QKIHsK
LSAgICAvLyBKdXN0IGNoZWNraW5nIG1faGludEVuY29kaW5nIHN1ZmZpY2VzIGhlcmUgYmVjYXVz
ZSBpdCdzIG9ubHkgc2V0Ci0gICAgLy8gaW4gc2V0SGludEVuY29kaW5nIHdoZW4gdGhlIHNvdXJj
ZSBpcyBBdXRvRGV0ZWN0ZWRFbmNvZGluZy4KICAgICByZXR1cm4gbV91c2VzRW5jb2RpbmdEZXRl
Y3RvcgotICAgICAgICAmJiAobV9zb3VyY2UgPT0gRGVmYXVsdEVuY29kaW5nIHx8IChtX3NvdXJj
ZSA9PSBFbmNvZGluZ0Zyb21QYXJlbnRGcmFtZSAmJiBtX2hpbnRFbmNvZGluZykpOyAKKyAgICAg
ICAgJiYgKG1fc291cmNlID09IERlZmF1bHRFbmNvZGluZyB8fCAobV9zb3VyY2UgPT0gRW5jb2Rp
bmdGcm9tUGFyZW50RnJhbWUgJiYgbV9wYXJlbnRGcmFtZUF1dG9EZXRlY3RlZEVuY29kaW5nKSk7
CiB9CiAKLVN0cmluZyBUZXh0UmVzb3VyY2VEZWNvZGVyOjpkZWNvZGUoY29uc3QgY2hhciogZGF0
YSwgc2l6ZV90IGxlbikKK1N0cmluZyBUZXh0UmVzb3VyY2VEZWNvZGVyOjpkZWNvZGUoY29uc3Qg
Y2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkKIHsKICAgICBzaXplX3QgbGVuZ3RoT2ZCT00gPSAw
OwogICAgIGlmICghbV9jaGVja2VkRm9yQk9NKQotICAgICAgICBsZW5ndGhPZkJPTSA9IGNoZWNr
Rm9yQk9NKGRhdGEsIGxlbik7CisgICAgICAgIGxlbmd0aE9mQk9NID0gY2hlY2tGb3JCT00oZGF0
YSwgbGVuZ3RoKTsKIAogICAgIGJvb2wgbW92ZWREYXRhVG9CdWZmZXIgPSBmYWxzZTsKIAogICAg
IGlmIChtX2NvbnRlbnRUeXBlID09IENTUyAmJiAhbV9jaGVja2VkRm9yQ1NTQ2hhcnNldCkKLSAg
ICAgICAgaWYgKCFjaGVja0ZvckNTU0NoYXJzZXQoZGF0YSwgbGVuLCBtb3ZlZERhdGFUb0J1ZmZl
cikpCisgICAgICAgIGlmICghY2hlY2tGb3JDU1NDaGFyc2V0KGRhdGEsIGxlbmd0aCwgbW92ZWRE
YXRhVG9CdWZmZXIpKQogICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKICAgICBp
ZiAoKG1fY29udGVudFR5cGUgPT0gSFRNTCB8fCBtX2NvbnRlbnRUeXBlID09IFhNTCkgJiYgIW1f
Y2hlY2tlZEZvckhlYWRDaGFyc2V0KSAvLyBIVE1MIGFuZCBYTUwKLSAgICAgICAgaWYgKCFjaGVj
a0ZvckhlYWRDaGFyc2V0KGRhdGEsIGxlbiwgbW92ZWREYXRhVG9CdWZmZXIpKQorICAgICAgICBp
ZiAoIWNoZWNrRm9ySGVhZENoYXJzZXQoZGF0YSwgbGVuZ3RoLCBtb3ZlZERhdGFUb0J1ZmZlcikp
CiAgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAogICAgIC8vIEZJWE1FOiBJdCBp
cyB3cm9uZyB0byBjaGFuZ2UgdGhlIGVuY29kaW5nIGRvd25zdHJlYW0gYWZ0ZXIgd2UgaGF2ZSBh
bHJlYWR5IGRvbmUgc29tZSBkZWNvZGluZy4KICAgICBpZiAoc2hvdWxkQXV0b0RldGVjdCgpKSB7
CiAgICAgICAgIGlmIChtX2VuY29kaW5nLmlzSmFwYW5lc2UoKSkKLSAgICAgICAgICAgIGRldGVj
dEphcGFuZXNlRW5jb2RpbmcoZGF0YSwgbGVuKTsgLy8gRklYTUU6IFdlIHNob3VsZCB1c2UgZGV0
ZWN0VGV4dEVuY29kaW5nKCkgZm9yIGFsbCBsYW5ndWFnZXMuCisgICAgICAgICAgICBkZXRlY3RK
YXBhbmVzZUVuY29kaW5nKGRhdGEsIGxlbmd0aCk7IC8vIEZJWE1FOiBXZSBzaG91bGQgdXNlIGRl
dGVjdFRleHRFbmNvZGluZygpIGZvciBhbGwgbGFuZ3VhZ2VzLgogICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgIFRleHRFbmNvZGluZyBkZXRlY3RlZEVuY29kaW5nOwotICAgICAgICAgICAgaWYg
KGRldGVjdFRleHRFbmNvZGluZyhkYXRhLCBsZW4sIG1faGludEVuY29kaW5nLCAmZGV0ZWN0ZWRF
bmNvZGluZykpCisgICAgICAgICAgICBpZiAoZGV0ZWN0VGV4dEVuY29kaW5nKGRhdGEsIGxlbmd0
aCwgbV9wYXJlbnRGcmFtZUF1dG9EZXRlY3RlZEVuY29kaW5nLCAmZGV0ZWN0ZWRFbmNvZGluZykp
CiAgICAgICAgICAgICAgICAgc2V0RW5jb2RpbmcoZGV0ZWN0ZWRFbmNvZGluZywgQXV0b0RldGVj
dGVkRW5jb2RpbmcpOwogICAgICAgICB9CiAgICAgfQpAQCAtNjMyLDEyICs2MjcsMTIgQEAgU3Ry
aW5nIFRleHRSZXNvdXJjZURlY29kZXI6OmRlY29kZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qg
bGVuKQogICAgICAgICBtX2NvZGVjID0gbmV3VGV4dENvZGVjKG1fZW5jb2RpbmcpOwogCiAgICAg
aWYgKG1fYnVmZmVyLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fY29kZWMtPmRlY29kZShk
YXRhICsgbGVuZ3RoT2ZCT00sIGxlbiAtIGxlbmd0aE9mQk9NLCBmYWxzZSwgbV9jb250ZW50VHlw
ZSA9PSBYTUwsIG1fc2F3RXJyb3IpOworICAgICAgICByZXR1cm4gbV9jb2RlYy0+ZGVjb2RlKGRh
dGEgKyBsZW5ndGhPZkJPTSwgbGVuZ3RoIC0gbGVuZ3RoT2ZCT00sIGZhbHNlLCBtX2NvbnRlbnRU
eXBlID09IFhNTCwgbV9zYXdFcnJvcik7CiAKICAgICBpZiAoIW1vdmVkRGF0YVRvQnVmZmVyKSB7
CiAgICAgICAgIHNpemVfdCBvbGRTaXplID0gbV9idWZmZXIuc2l6ZSgpOwotICAgICAgICBtX2J1
ZmZlci5ncm93KG9sZFNpemUgKyBsZW4pOwotICAgICAgICBtZW1jcHkobV9idWZmZXIuZGF0YSgp
ICsgb2xkU2l6ZSwgZGF0YSwgbGVuKTsKKyAgICAgICAgbV9idWZmZXIuZ3JvdyhvbGRTaXplICsg
bGVuZ3RoKTsKKyAgICAgICAgbWVtY3B5KG1fYnVmZmVyLmRhdGEoKSArIG9sZFNpemUsIGRhdGEs
IGxlbmd0aCk7CiAgICAgfQogCiAgICAgU3RyaW5nIHJlc3VsdCA9IG1fY29kZWMtPmRlY29kZSht
X2J1ZmZlci5kYXRhKCkgKyBsZW5ndGhPZkJPTSwgbV9idWZmZXIuc2l6ZSgpIC0gbGVuZ3RoT2ZC
T00sIGZhbHNlLCBtX2NvbnRlbnRUeXBlID09IFhNTCAmJiAhbV91c2VMZW5pZW50WE1MRGVjb2Rp
bmcsIG1fc2F3RXJyb3IpOwpAQCAtNjQ3LDE1ICs2NDIsMTQgQEAgU3RyaW5nIFRleHRSZXNvdXJj
ZURlY29kZXI6OmRlY29kZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuKQogCiBTdHJpbmcg
VGV4dFJlc291cmNlRGVjb2Rlcjo6Zmx1c2goKQogewotICAgLy8gSWYgd2UgY2FuIG5vdCBpZGVu
dGlmeSB0aGUgZW5jb2RpbmcgZXZlbiBhZnRlciBhIGRvY3VtZW50IGlzIGNvbXBsZXRlbHkKLSAg
IC8vIGxvYWRlZCwgd2UgbmVlZCB0byBkZXRlY3QgdGhlIGVuY29kaW5nIGlmIG90aGVyIGNvbmRp
dGlvbnMgZm9yCi0gICAvLyBhdXRvZGV0ZWN0aW9uIGlzIHNhdGlzZmllZC4KKyAgICAvLyBJZiB3
ZSBjYW4gbm90IGlkZW50aWZ5IHRoZSBlbmNvZGluZyBldmVuIGFmdGVyIGEgZG9jdW1lbnQgaXMg
Y29tcGxldGVseQorICAgIC8vIGxvYWRlZCwgd2UgbmVlZCB0byBkZXRlY3QgdGhlIGVuY29kaW5n
IGlmIG90aGVyIGNvbmRpdGlvbnMgZm9yCisgICAgLy8gYXV0b2RldGVjdGlvbiBpcyBzYXRpc2Zp
ZWQuCiAgICAgaWYgKG1fYnVmZmVyLnNpemUoKSAmJiBzaG91bGRBdXRvRGV0ZWN0KCkKICAgICAg
ICAgJiYgKCghbV9jaGVja2VkRm9ySGVhZENoYXJzZXQgJiYgKG1fY29udGVudFR5cGUgPT0gSFRN
TCB8fCBtX2NvbnRlbnRUeXBlID09IFhNTCkpIHx8ICghbV9jaGVja2VkRm9yQ1NTQ2hhcnNldCAm
JiAobV9jb250ZW50VHlwZSA9PSBDU1MpKSkpIHsKLSAgICAgICAgIFRleHRFbmNvZGluZyBkZXRl
Y3RlZEVuY29kaW5nOwotICAgICAgICAgaWYgKGRldGVjdFRleHRFbmNvZGluZyhtX2J1ZmZlci5k
YXRhKCksIG1fYnVmZmVyLnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9oaW50RW5jb2RpbmcsICZkZXRlY3RlZEVuY29kaW5nKSkKLSAgICAgICAgICAgICBzZXRFbmNv
ZGluZyhkZXRlY3RlZEVuY29kaW5nLCBBdXRvRGV0ZWN0ZWRFbmNvZGluZyk7CisgICAgICAgIFRl
eHRFbmNvZGluZyBkZXRlY3RlZEVuY29kaW5nOworICAgICAgICBpZiAoZGV0ZWN0VGV4dEVuY29k
aW5nKG1fYnVmZmVyLmRhdGEoKSwgbV9idWZmZXIuc2l6ZSgpLCBtX3BhcmVudEZyYW1lQXV0b0Rl
dGVjdGVkRW5jb2RpbmcsICZkZXRlY3RlZEVuY29kaW5nKSkKKyAgICAgICAgICAgIHNldEVuY29k
aW5nKGRldGVjdGVkRW5jb2RpbmcsIEF1dG9EZXRlY3RlZEVuY29kaW5nKTsKICAgICB9CiAKICAg
ICBpZiAoIW1fY29kZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFJl
c291cmNlRGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29k
ZXIuaAppbmRleCA5OGVjOTI1N2FhZDBlMzliYzkwZDliZGIwYjcwNDk0ODJhM2U4M2FkLi4xZGUy
MjUyMWNmMGY0Y2YxM2ZkZDUyMWEzYjk2ZGZjMjY5MWQxNzZkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICAgIENv
cHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQogICAgIENv
cHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCi0gICAg
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAgICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4LDYgKzI4LDcgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgSFRNTE1ldGFDaGFyc2V0UGFyc2VyOworY2xhc3MgVGV4dENvZGVjOwog
CiBjbGFzcyBUZXh0UmVzb3VyY2VEZWNvZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8VGV4dFJlc291
cmNlRGVjb2Rlcj4gewogcHVibGljOgpAQCAtNDIsMzUgKzQzLDI2IEBAIHB1YmxpYzoKICAgICAg
ICAgRW5jb2RpbmdGcm9tUGFyZW50RnJhbWUKICAgICB9OwogCi0gICAgc3RhdGljIFJlZjxUZXh0
UmVzb3VyY2VEZWNvZGVyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVGV4
dEVuY29kaW5nJiBkZWZhdWx0RW5jb2RpbmcgPSBUZXh0RW5jb2RpbmcoKSwgYm9vbCB1c2VzRW5j
b2RpbmdEZXRlY3RvciA9IGZhbHNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgVGV4dFJlc291cmNlRGVjb2RlcihtaW1lVHlwZSwgZGVmYXVsdEVuY29kaW5nLCB1c2VzRW5j
b2RpbmdEZXRlY3RvcikpOwotICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFRl
eHRSZXNvdXJjZURlY29kZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBU
ZXh0RW5jb2RpbmcmIGRlZmF1bHRFbmNvZGluZyA9IHsgfSwgYm9vbCB1c2VzRW5jb2RpbmdEZXRl
Y3RvciA9IGZhbHNlKTsKICAgICBXRUJDT1JFX0VYUE9SVCB+VGV4dFJlc291cmNlRGVjb2Rlcigp
OwogCiAgICAgdm9pZCBzZXRFbmNvZGluZyhjb25zdCBUZXh0RW5jb2RpbmcmLCBFbmNvZGluZ1Nv
dXJjZSk7CiAgICAgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZygpIGNvbnN0IHsgcmV0dXJu
IG1fZW5jb2Rpbmc7IH0KIAotICAgIGJvb2wgaGFzRXF1YWxFbmNvZGluZ0ZvckNoYXJzZXQoY29u
c3QgU3RyaW5nJikgY29uc3Q7CisgICAgYm9vbCBoYXNFcXVhbEVuY29kaW5nRm9yQ2hhcnNldChj
b25zdCBTdHJpbmcmIGNoYXJzZXQpIGNvbnN0OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5n
IGRlY29kZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsKICAgICBXRUJDT1JFX0VY
UE9SVCBTdHJpbmcgZmx1c2goKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBkZWNvZGVB
bmRGbHVzaChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsKIAotICAgIHZvaWQgc2V0
SGludEVuY29kaW5nKGNvbnN0IFRleHRSZXNvdXJjZURlY29kZXIqIGhpbnREZWNvZGVyKQotICAg
IHsKLSAgICAgICAgLy8gaGludEVuY29kaW5nIGlzIGZvciB1c2Ugd2l0aCBhdXRvZGV0ZWN0aW9u
LCB3aGljaCBzaG91bGQgYmUgCi0gICAgICAgIC8vIG9ubHkgaW52b2tlZCB3aGVuIGhpbnRFbmNv
ZGluZyBjb21lcyBmcm9tIGF1dG8tZGV0ZWN0aW9uLgotICAgICAgICBpZiAoaGludERlY29kZXIg
JiYgaGludERlY29kZXItPm1fc291cmNlID09IEF1dG9EZXRlY3RlZEVuY29kaW5nKQotICAgICAg
ICAgICAgbV9oaW50RW5jb2RpbmcgPSBoaW50RGVjb2Rlci0+ZW5jb2RpbmcoKS5uYW1lKCk7Ci0g
ICAgfQorICAgIHZvaWQgc2V0SGludEVuY29kaW5nKGNvbnN0IFRleHRSZXNvdXJjZURlY29kZXIq
IHBhcmVudEZyYW1lRGVjb2Rlcik7CiAgICAKICAgICB2b2lkIHVzZUxlbmllbnRYTUxEZWNvZGlu
ZygpIHsgbV91c2VMZW5pZW50WE1MRGVjb2RpbmcgPSB0cnVlOyB9CiAgICAgYm9vbCBzYXdFcnJv
cigpIGNvbnN0IHsgcmV0dXJuIG1fc2F3RXJyb3I7IH0KIAogcHJpdmF0ZToKLSAgICBXRUJDT1JF
X0VYUE9SVCBUZXh0UmVzb3VyY2VEZWNvZGVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0
IFRleHRFbmNvZGluZyYgZGVmYXVsdEVuY29kaW5nLCBib29sIHVzZXNFbmNvZGluZ0RldGVjdG9y
KTsKKyAgICBUZXh0UmVzb3VyY2VEZWNvZGVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0
IFRleHRFbmNvZGluZyYgZGVmYXVsdEVuY29kaW5nLCBib29sIHVzZXNFbmNvZGluZ0RldGVjdG9y
KTsKIAogICAgIGVudW0gQ29udGVudFR5cGUgeyBQbGFpblRleHQsIEhUTUwsIFhNTCwgQ1NTIH07
IC8vIFBsYWluVGV4dCBvbmx5IGNoZWNrcyBmb3IgQk9NLgogICAgIHN0YXRpYyBDb250ZW50VHlw
ZSBkZXRlcm1pbmVDb250ZW50VHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKQEAgLTg2LDE3
ICs3OCwyMiBAQCBwcml2YXRlOgogICAgIENvbnRlbnRUeXBlIG1fY29udGVudFR5cGU7CiAgICAg
VGV4dEVuY29kaW5nIG1fZW5jb2Rpbmc7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFRleHRDb2RlYz4g
bV9jb2RlYzsKLSAgICBFbmNvZGluZ1NvdXJjZSBtX3NvdXJjZTsKLSAgICBjb25zdCBjaGFyKiBt
X2hpbnRFbmNvZGluZzsKLSAgICBWZWN0b3I8Y2hhcj4gbV9idWZmZXI7Ci0gICAgYm9vbCBtX2No
ZWNrZWRGb3JCT007Ci0gICAgYm9vbCBtX2NoZWNrZWRGb3JDU1NDaGFyc2V0OwotICAgIGJvb2wg
bV9jaGVja2VkRm9ySGVhZENoYXJzZXQ7Ci0gICAgYm9vbCBtX3VzZUxlbmllbnRYTUxEZWNvZGlu
ZzsgLy8gRG9uJ3Qgc3RvcCBvbiBYTUwgZGVjb2RpbmcgZXJyb3JzLgotICAgIGJvb2wgbV9zYXdF
cnJvcjsKLSAgICBib29sIG1fdXNlc0VuY29kaW5nRGV0ZWN0b3I7Ci0KICAgICBzdGQ6OnVuaXF1
ZV9wdHI8SFRNTE1ldGFDaGFyc2V0UGFyc2VyPiBtX2NoYXJzZXRQYXJzZXI7CisgICAgRW5jb2Rp
bmdTb3VyY2UgbV9zb3VyY2UgeyBEZWZhdWx0RW5jb2RpbmcgfTsKKyAgICBjb25zdCBjaGFyKiBt
X3BhcmVudEZyYW1lQXV0b0RldGVjdGVkRW5jb2RpbmcgeyBudWxscHRyIH07CisgICAgVmVjdG9y
PGNoYXI+IG1fYnVmZmVyOworICAgIGJvb2wgbV9jaGVja2VkRm9yQk9NIHsgZmFsc2UgfTsKKyAg
ICBib29sIG1fY2hlY2tlZEZvckNTU0NoYXJzZXQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9jaGVj
a2VkRm9ySGVhZENoYXJzZXQgeyBmYWxzZSB9OworICAgIGJvb2wgbV91c2VMZW5pZW50WE1MRGVj
b2RpbmcgeyBmYWxzZSB9OyAvLyBEb24ndCBzdG9wIG9uIFhNTCBkZWNvZGluZyBlcnJvcnMuCisg
ICAgYm9vbCBtX3Nhd0Vycm9yIHsgZmFsc2UgfTsKKyAgICBib29sIG1fdXNlc0VuY29kaW5nRGV0
ZWN0b3IgeyBmYWxzZSB9OwogfTsKIAoraW5saW5lIHZvaWQgVGV4dFJlc291cmNlRGVjb2Rlcjo6
c2V0SGludEVuY29kaW5nKGNvbnN0IFRleHRSZXNvdXJjZURlY29kZXIqIHBhcmVudEZyYW1lRGVj
b2RlcikKK3sKKyAgICBpZiAocGFyZW50RnJhbWVEZWNvZGVyICYmIHBhcmVudEZyYW1lRGVjb2Rl
ci0+bV9zb3VyY2UgPT0gQXV0b0RldGVjdGVkRW5jb2RpbmcpCisgICAgICAgIG1fcGFyZW50RnJh
bWVBdXRvRGV0ZWN0ZWRFbmNvZGluZyA9IHBhcmVudEZyYW1lRGVjb2Rlci0+ZW5jb2RpbmcoKS5u
YW1lKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCmlu
ZGV4IDE1M2U4ODQwMjFiZDc4MzI4NTg4NmZhNzJmYzgyYzRlNTQ2MTI2NzUuLjljMWNjMzgwYTEx
YWM2ZDM4MTRmNzM0MTJiYTAxNDgxMGYwMGM5ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcApAQCAt
MzgsNyArMzgsNiBAQAogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luRGF0YS5oIgogI2luY2x1ZGUg
IlVSTC5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvU3Ry
aW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1VVSUQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVRyZWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVRyZWUuY3BwCmluZGV4IDMwZDFkY2RlMDUwMjM2MzIxNGRmNzBkZGNjNThhY2Y0Zjlh
YmJhMjAuLjMwM2M1MWEzYmU5N2RiNWYyNTZjNTQ4YTJlNzhkOGU0ZmQwMDhhODAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVUcmVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVHJlZS5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJQYWdlLmgi
CiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8
d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAppbmRleCBlYzEwY2Q1ZmZmMGZlNGQ1
Y2Y5MmIxMWZmMzZlYjU5N2Q2NDg0ZGI3Li5mZDc0MzNjMjBmMzU3MTM5ZjY0YTg4YzE5ZTlhN2Qx
ODIzNjJjMTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcApAQCAtMTk5
LDggKzE5OSw3IEBAIHZvaWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUZyYW1lKEZyYW1lKiBm
cmFtZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBTdHJpbmcgdGV4dCA9IGFjY3VtdWxh
dG9yLnNlcmlhbGl6ZU5vZGVzKCpkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCksIEluY2x1ZGVO
b2RlKTsKLSAgICBDU3RyaW5nIGZyYW1lSFRNTCA9IHRleHRFbmNvZGluZy5lbmNvZGUodGV4dCwg
RW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwotICAgIG1fcmVzb3VyY2VzLmFwcGVuZCh7IHVybCwg
ZG9jdW1lbnQtPnN1Z2dlc3RlZE1JTUVUeXBlKCksIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGZyYW1l
SFRNTC5kYXRhKCksIGZyYW1lSFRNTC5sZW5ndGgoKSkgfSk7CisgICAgbV9yZXNvdXJjZXMuYXBw
ZW5kKHsgdXJsLCBkb2N1bWVudC0+c3VnZ2VzdGVkTUlNRVR5cGUoKSwgU2hhcmVkQnVmZmVyOjpj
cmVhdGUodGV4dEVuY29kaW5nLmVuY29kZSh0ZXh0LCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcykp
IH0pOwogICAgIG1fcmVzb3VyY2VVUkxzLmFkZCh1cmwpOwogCiAgICAgZm9yIChhdXRvJiBub2Rl
IDogbm9kZXMpIHsKQEAgLTI2NCw5ICsyNjMsNyBAQCB2b2lkIFBhZ2VTZXJpYWxpemVyOjpzZXJp
YWxpemVDU1NTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQsIGNvbnN0IFVSTAog
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNoZWNrIHdoZXRoZXIgYSBjaGFyc2V0IGhhcyBi
ZWVuIHNwZWNpZmllZCBhbmQgaWYgbm9uZSB3YXMgZm91bmQgYWRkIG9uZS4KICAgICAgICAgVGV4
dEVuY29kaW5nIHRleHRFbmNvZGluZyhzdHlsZVNoZWV0LT5jb250ZW50cygpLmNoYXJzZXQoKSk7
CiAgICAgICAgIEFTU0VSVCh0ZXh0RW5jb2RpbmcuaXNWYWxpZCgpKTsKLSAgICAgICAgU3RyaW5n
IHRleHRTdHJpbmcgPSBjc3NUZXh0LnRvU3RyaW5nKCk7Ci0gICAgICAgIENTdHJpbmcgdGV4dCA9
IHRleHRFbmNvZGluZy5lbmNvZGUodGV4dFN0cmluZywgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMp
OwotICAgICAgICBtX3Jlc291cmNlcy5hcHBlbmQoeyB1cmwsIEFTQ0lJTGl0ZXJhbCB7ICJ0ZXh0
L2NzcyIgfSwgU2hhcmVkQnVmZmVyOjpjcmVhdGUodGV4dC5kYXRhKCksIHRleHQubGVuZ3RoKCkp
IH0pOworICAgICAgICBtX3Jlc291cmNlcy5hcHBlbmQoeyB1cmwsIEFTQ0lJTGl0ZXJhbCB7ICJ0
ZXh0L2NzcyIgfSwgU2hhcmVkQnVmZmVyOjpjcmVhdGUodGV4dEVuY29kaW5nLmVuY29kZShjc3NU
ZXh0LnRvU3RyaW5nKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKSkgfSk7CiAgICAgICAgIG1f
cmVzb3VyY2VVUkxzLmFkZCh1cmwpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCmluZGV4IDYxMDFmZmFlMDAzNDA5M2Jh
MjhhZGI3YzE1YWVmOTliZTI3YTBmZjMuLmZhMWUwNGZhOTEyMTk1NzQ3YTBlNDQ4MTYzMzFjYzE3
MTBhZDEzODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1
cml0eVBvbGljeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3Vy
aXR5UG9saWN5LmNwcApAQCAtMzMyLDExICszMzIsMTEgQEAgQ29udGVudFNlY3VyaXR5UG9saWN5
OjpIYXNoSW5FbmZvcmNlZEFuZFJlcG9ydE9ubHlQb2xpY2llc1BhaXIgQ29udGVudFNlY3VyaXR5
UG8KIAogICAgIC8vIEZJWE1FOiBDb21wdXRlIHRoZSBkaWdlc3Qgd2l0aCByZXNwZWN0IHRvIHRo
ZSByYXcgYnl0ZXMgcmVjZWl2ZWQgZnJvbSB0aGUgcGFnZS4KICAgICAvLyBTZWUgPGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTUxODQ+LgotICAgIENTdHJpbmcgY29u
dGVudENTdHJpbmcgPSBlbmNvZGluZ1RvVXNlLmVuY29kZShjb250ZW50LCBFbnRpdGllc0ZvclVu
ZW5jb2RhYmxlcyk7CisgICAgYXV0byBlbmNvZGVkQ29udGVudCA9IGVuY29kaW5nVG9Vc2UuZW5j
b2RlKGNvbnRlbnQsIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKICAgICBib29sIGZvdW5kSGFz
aEluRW5mb3JjZWRQb2xpY2llcyA9IGZhbHNlOwogICAgIGJvb2wgZm91bmRIYXNoSW5SZXBvcnRP
bmx5UG9saWNpZXMgPSBmYWxzZTsKICAgICBmb3IgKGF1dG8gYWxnb3JpdGhtIDogYWxnb3JpdGht
cykgewotICAgICAgICBDb250ZW50U2VjdXJpdHlQb2xpY3lIYXNoIGhhc2ggPSBjcnlwdG9ncmFw
aGljRGlnZXN0Rm9yQnl0ZXMoYWxnb3JpdGhtLCBjb250ZW50Q1N0cmluZy5kYXRhKCksIGNvbnRl
bnRDU3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAgQ29udGVudFNlY3VyaXR5UG9saWN5SGFzaCBo
YXNoID0gY3J5cHRvZ3JhcGhpY0RpZ2VzdEZvckJ5dGVzKGFsZ29yaXRobSwgZW5jb2RlZENvbnRl
bnQuZGF0YSgpLCBlbmNvZGVkQ29udGVudC5zaXplKCkpOwogICAgICAgICBpZiAoIWZvdW5kSGFz
aEluRW5mb3JjZWRQb2xpY2llcyAmJiBhbGxQb2xpY2llc1dpdGhEaXNwb3NpdGlvbkFsbG93KENv
bnRlbnRTZWN1cml0eVBvbGljeTo6RGlzcG9zaXRpb246OkVuZm9yY2UsIHN0ZDo6Zm9yd2FyZDxQ
cmVkaWNhdGU+KHByZWRpY2F0ZSksIGhhc2gpKQogICAgICAgICAgICAgZm91bmRIYXNoSW5FbmZv
cmNlZFBvbGljaWVzID0gdHJ1ZTsKICAgICAgICAgaWYgKCFmb3VuZEhhc2hJblJlcG9ydE9ubHlQ
b2xpY2llcyAmJiBhbGxQb2xpY2llc1dpdGhEaXNwb3NpdGlvbkFsbG93KENvbnRlbnRTZWN1cml0
eVBvbGljeTo6RGlzcG9zaXRpb246OlJlcG9ydE9ubHksIHN0ZDo6Zm9yd2FyZDxQcmVkaWNhdGU+
KHByZWRpY2F0ZSksIGhhc2gpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
RmlsZUhhbmRsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlSGFuZGxlLmNwcApp
bmRleCAyYTBhNjM0YzZmNjgxMmNmNmZjZTdiMjA4MWNkOWVhYjhiYWU1OTAzLi4xYzNmNTMyODlk
NTQwZjE1MDkzYzQxMmU0NDFjZTZmY2Q2MDk3YmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9GaWxlSGFuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9G
aWxlSGFuZGxlLmNwcApAQCAtMjksOCArMjksNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkZpbGVIYW5kbGUuaCIKIAotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KLQog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBGaWxlSGFuZGxlOjpGaWxlSGFuZGxlKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlIG1vZGUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2hhcmVkQnVmZmVyLmNwcAppbmRleCAwZDM1YjIxM2JmYzIxZDlkOGE5YjFkYTFmM2Iy
YmM5MDU3NGI5MjVlLi5kNjZiNTMwOWUxYjFiZjZkYWI1ZWY0NjRlMThmMzBiYzNkZWRiOTkxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKQEAgLTc0LDYgKzc0LDEy
IEBAIFJlZjxTaGFyZWRCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFZlY3RvcjxjaGFyPiYm
IHZlY3RvcikKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRCdWZmZXIoV1RGTW92ZSh2
ZWN0b3IpKSk7CiB9CiAKKy8vIEZJWE1FOiBNb3ZlIHRoZSB3aG9sZSBjbGFzcyBmcm9tIFZlY3Rv
cjxjaGFyPiB0byBWZWN0b3I8dWludDhfdD4gYW5kIG1ha2UgdGhpcyBlZmZpY2llbnQsIHJlcGxh
Y2luZyB0aGUgVmVjdG9yPGNoYXI+IHZlcnNpb24gYWJvdmUuCitSZWY8U2hhcmVkQnVmZmVyPiBT
aGFyZWRCdWZmZXI6OmNyZWF0ZShWZWN0b3I8dWludDhfdD4mJiB2ZWN0b3IpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVkQnVmZmVyIHsgdmVjdG9yLmRhdGEoKSwgdmVjdG9yLnNp
emUoKSB9KTsKK30KKwogdm9pZCBTaGFyZWRCdWZmZXI6OmNvbWJpbmVJbnRvT25lU2VnbWVudCgp
IGNvbnN0CiB7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFy
ZWRCdWZmZXIuaAppbmRleCAzNGZmNzFjNjM4NmQ4MmNlYzc1ZGZhMjVjNWQyMGEwYTRmZWZhMjQy
Li4zMDVhOTEzMzUyZDIyZTFlMWQ3MzFhMDc4OTNmNjM3YjdmYjc3MzVkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaApAQCAtNjAsNyArNjAsOCBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGNyZWF0ZVdpdGhDb250ZW50c09mRmlsZShjb25z
dCBTdHJpbmcmIGZpbGVQYXRoKTsKIAogICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVh
dGUoVmVjdG9yPGNoYXI+JiYpOwotICAgIAorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBj
cmVhdGUoVmVjdG9yPHVpbnQ4X3Q+JiYpOworCiAjaWYgVVNFKEZPVU5EQVRJT04pCiAgICAgUmV0
YWluUHRyPE5TRGF0YT4gY3JlYXRlTlNEYXRhKCkgY29uc3Q7CiAgICAgUmV0YWluUHRyPE5TQXJy
YXk+IGNyZWF0ZU5TRGF0YUFycmF5KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9VUkxQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFy
c2VyLmNwcAppbmRleCA2NzI4NjEyZWQwMzI0OWZmOTc2Mjg4MjE1ZGM5YjQ1MTNjYTk3ZDFhLi5l
OGRiNzNmZTU1ZGQyNWQ1MjI4ZjgzOGZiZDBkZWZjYTBiNTdjNjlmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1VSTFBhcnNlci5jcHAKQEAgLTYyMSw5ICs2MjEsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPgogdm9pZCBVUkxQYXJzZXI6OmVuY29kZVF1ZXJ5KGNvbnN0IFZlY3Rv
cjxVQ2hhcj4mIHNvdXJjZSwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgQ29kZVBvaW50
SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4gaXRlcmF0b3IpCiB7CiAgICAgLy8gRklYTUU6IEl0IGlz
IHVuY2xlYXIgaW4gdGhlIHNwZWMgd2hhdCB0byBkbyB3aGVuIGVuY29kaW5nIGZhaWxzLiBUaGUg
YmVoYXZpb3Igc2hvdWxkIGJlIHNwZWNpZmllZCBhbmQgdGVzdGVkLgotICAgIENTdHJpbmcgZW5j
b2RlZCA9IGVuY29kaW5nLmVuY29kZShTdHJpbmdWaWV3KHNvdXJjZS5kYXRhKCksIHNvdXJjZS5z
aXplKCkpLCBVUkxFbmNvZGVkRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwotICAgIGNvbnN0IGNo
YXIqIGRhdGEgPSBlbmNvZGVkLmRhdGEoKTsKLSAgICBzaXplX3QgbGVuZ3RoID0gZW5jb2RlZC5s
ZW5ndGgoKTsKKyAgICBhdXRvIGVuY29kZWQgPSBlbmNvZGluZy5lbmNvZGUoU3RyaW5nVmlldyhz
b3VyY2UuZGF0YSgpLCBzb3VyY2Uuc2l6ZSgpKSwgVVJMRW5jb2RlZEVudGl0aWVzRm9yVW5lbmNv
ZGFibGVzKTsKKyAgICBhdXRvKiBkYXRhID0gZW5jb2RlZC5kYXRhKCk7CisgICAgc2l6ZV90IGxl
bmd0aCA9IGVuY29kZWQuc2l6ZSgpOwogICAgIAogICAgIGlmICghbGVuZ3RoID09ICFpdGVyYXRv
ci5hdEVuZCgpKSB7CiAgICAgICAgIHN5bnRheFZpb2xhdGlvbihpdGVyYXRvcik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9N
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQy5tbQppbmRleCBhZTIzZDhiM2RmZjI4Mzc3MzkzMWFlZTY5ODFlODlkYzg5OGUz
MTZlLi42ZjQ1NzllMDBiNTNjNjZmYmZjMDZmYzJhYWRlMzQ4NTk4YTViOGU3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakMubW0KQEAgLTE3ODcsMTEgKzE3ODcsMTAgQEAgYm9vbCBNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzaG91bGRXYWl0Rm9yTG9hZGluZ09mUmVzb3VyY2UoQVZB
c3NldFIKIAogICAgIGlmIChzY2hlbWUgPT0gImNsZWFya2V5IikgewogICAgICAgICBTdHJpbmcg
a2V5SUQgPSBbW1thdlJlcXVlc3QgcmVxdWVzdF0gVVJMXSByZXNvdXJjZVNwZWNpZmllcl07Ci0g
ICAgICAgIFN0cmluZ1ZpZXcga2V5SURWaWV3KGtleUlEKTsKLSAgICAgICAgQ1N0cmluZyB1dGY4
RW5jb2RlZEtleUlkID0gVVRGOEVuY29kaW5nKCkuZW5jb2RlKGtleUlEVmlldywgVVJMRW5jb2Rl
ZEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKKyAgICAgICAgYXV0byBlbmNvZGVkS2V5SWQgPSBV
VEY4RW5jb2RpbmcoKS5lbmNvZGUoa2V5SUQsIFVSTEVuY29kZWRFbnRpdGllc0ZvclVuZW5jb2Rh
Ymxlcyk7CiAKLSAgICAgICAgUmVmUHRyPFVpbnQ4QXJyYXk+IGluaXREYXRhID0gVWludDhBcnJh
eTo6Y3JlYXRlKHV0ZjhFbmNvZGVkS2V5SWQubGVuZ3RoKCkpOwotICAgICAgICBpbml0RGF0YS0+
c2V0UmFuZ2UocmVpbnRlcnByZXRfY2FzdDxjb25zdCBKU0M6OlVpbnQ4QWRhcHRvcjo6VHlwZSo+
KHV0ZjhFbmNvZGVkS2V5SWQuZGF0YSgpKSwgdXRmOEVuY29kZWRLZXlJZC5sZW5ndGgoKSwgMCk7
CisgICAgICAgIGF1dG8gaW5pdERhdGEgPSBVaW50OEFycmF5OjpjcmVhdGUoZW5jb2RlZEtleUlk
LnNpemUoKSk7CisgICAgICAgIGluaXREYXRhLT5zZXRSYW5nZShlbmNvZGVkS2V5SWQuZGF0YSgp
LCBlbmNvZGVkS2V5SWQuc2l6ZSgpLCAwKTsKIAogICAgICAgICBhdXRvIGtleURhdGEgPSBwbGF5
ZXIoKS0+Y2FjaGVkS2V5Rm9yS2V5SWQoa2V5SUQpOwogICAgICAgICBpZiAoa2V5RGF0YSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1D
QUxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3Jt
Q0FMYXllci5jcHAKaW5kZXggMjdjZWVkMmU3MTE3ZDgxZGMwODU0MTljNzM5ZWNmOGEyYzllYTIx
Mi4uYzQyZjg4OWM0OGQzYzlmY2I1Mjk0ZmUzYjgwOTRiZGUyODg2NTA2YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIu
Y3BwCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyQ2xpZW50Lmgi
CiAjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KICNpbmNsdWRlIDxD
b3JlVGV4dC9Db3JlVGV4dC5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKICNpZiBQTEFURk9STShXSU4pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCmluZGV4IDNjOGVlMDhkMTU5
MTkzZGEwZmM3MDVhMGFjZmQ4MzQyOGU1YjdjMmMuLmNiNTI4YmRkZmQ5NWY3NmE3NjZlYjU1MTNj
MDU4NmJhZDcwNTRjYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvRm9ybURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9y
bURhdGEuY3BwCkBAIC04MSwxNiArODEsMTcgQEAgUmVmPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3Jl
YXRlKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKQogCiBSZWY8Rm9ybURhdGE+IEZvcm1E
YXRhOjpjcmVhdGUoY29uc3QgQ1N0cmluZyYgc3RyaW5nKQogewotICAgIGF1dG8gcmVzdWx0ID0g
Y3JlYXRlKCk7Ci0gICAgcmVzdWx0LT5hcHBlbmREYXRhKHN0cmluZy5kYXRhKCksIHN0cmluZy5s
ZW5ndGgoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gY3JlYXRlKHN0cmluZy5k
YXRhKCksIHN0cmluZy5sZW5ndGgoKSk7CiB9CiAKIFJlZjxGb3JtRGF0YT4gRm9ybURhdGE6OmNy
ZWF0ZShjb25zdCBWZWN0b3I8Y2hhcj4mIHZlY3RvcikKIHsKLSAgICBhdXRvIHJlc3VsdCA9IGNy
ZWF0ZSgpOwotICAgIHJlc3VsdC0+YXBwZW5kRGF0YSh2ZWN0b3IuZGF0YSgpLCB2ZWN0b3Iuc2l6
ZSgpKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBjcmVhdGUodmVjdG9yLmRhdGEo
KSwgdmVjdG9yLnNpemUoKSk7Cit9CisKK1JlZjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZShj
b25zdCBWZWN0b3I8dWludDhfdD4mIHZlY3RvcikKK3sKKyAgICByZXR1cm4gY3JlYXRlKHZlY3Rv
ci5kYXRhKCksIHZlY3Rvci5zaXplKCkpOwogfQogCiBSZWY8Rm9ybURhdGE+IEZvcm1EYXRhOjpj
cmVhdGUoY29uc3QgRE9NRm9ybURhdGEmIGZvcm1EYXRhLCBFbmNvZGluZ1R5cGUgZW5jb2RpbmdU
eXBlKQpAQCAtMTE0LDcgKzExNSw5IEBAIFJlZjxGb3JtRGF0YT4gRm9ybURhdGE6OmNvcHkoKSBj
b25zdAogCiBSZWY8Rm9ybURhdGE+IEZvcm1EYXRhOjppc29sYXRlZENvcHkoKSBjb25zdAogewot
ICAgIC8vIEZJWE1FOiBpc29sYXRlZENvcHkoKSAoaGlzdG9yaWNhbGx5IGRlZXBDb3B5KCkpIG9u
bHkgY29waWVzIGNlcnRhaW4gdmFsdWVzIGZyb20gYHRoaXNgLiBXaHkgaXMgdGhhdD8KKyAgICAv
LyBGSVhNRTogaXNvbGF0ZWRDb3B5KCkgZG9lcyBub3QgY29weSBtX2lkZW50aWZlciwgbV9ib3Vu
ZGFyeSwgb3IgbV9jb250YWluc1Bhc3N3b3JkRGF0YS4KKyAgICAvLyBJcyBhbGwgb2YgdGhhdCBj
b3JyZWN0IGFuZCBpbnRlbnRpb25hbD8KKwogICAgIGF1dG8gZm9ybURhdGEgPSBjcmVhdGUoKTsK
IAogICAgIGZvcm1EYXRhLT5tX2Fsd2F5c1N0cmVhbSA9IG1fYWx3YXlzU3RyZWFtOwpAQCAtMTgz
LDcgKzE4Niw3IEBAIHZvaWQgRm9ybURhdGE6OmFwcGVuZEJsb2IoY29uc3QgVVJMJiBibG9iVVJM
KQogICAgIG1fbGVuZ3RoSW5CeXRlcyA9IHN0ZDo6bnVsbG9wdDsKIH0KIAotc3RhdGljIENTdHJp
bmcgbm9ybWFsaXplU3RyaW5nRGF0YShUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQorc3RhdGljIFZlY3Rvcjx1aW50OF90PiBub3JtYWxpemVTdHJpbmdEYXRhKFRl
eHRFbmNvZGluZyYgZW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgcmV0dXJu
IG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9DUkxGKGVuY29kaW5nLmVuY29kZSh2YWx1ZSwgRW50aXRp
ZXNGb3JVbmVuY29kYWJsZXMpKTsKIH0KQEAgLTIzMCw3ICsyMzMsNyBAQCB2b2lkIEZvcm1EYXRh
OjphcHBlbmRNdWx0aVBhcnRTdHJpbmdWYWx1ZShjb25zdCBTdHJpbmcmIHN0cmluZywgVmVjdG9y
PGNoYXI+JiBoZQogICAgIGFwcGVuZERhdGEoaGVhZGVyLmRhdGEoKSwgaGVhZGVyLnNpemUoKSk7
CiAKICAgICBhdXRvIG5vcm1hbGl6ZWRTdHJpbmdEYXRhID0gbm9ybWFsaXplU3RyaW5nRGF0YShl
bmNvZGluZywgc3RyaW5nKTsKLSAgICBhcHBlbmREYXRhKG5vcm1hbGl6ZWRTdHJpbmdEYXRhLmRh
dGEoKSwgbm9ybWFsaXplZFN0cmluZ0RhdGEubGVuZ3RoKCkpOworICAgIGFwcGVuZERhdGEobm9y
bWFsaXplZFN0cmluZ0RhdGEuZGF0YSgpLCBub3JtYWxpemVkU3RyaW5nRGF0YS5zaXplKCkpOwog
fQogCiB2b2lkIEZvcm1EYXRhOjphcHBlbmRNdWx0aVBhcnRLZXlWYWx1ZVBhaXJJdGVtcyhjb25z
dCBET01Gb3JtRGF0YSYgZm9ybURhdGEsIERvY3VtZW50KiBkb2N1bWVudCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaAppbmRleCA2ZjlhN2E3MmJmZjk4MjI2NTc5
NjVkMzkwNmExNTMyZjBkZmE1OGY0Li40MDg3YjlkZDYyOWNiOTg1YjhmNTRkNWFhZGU4ZjdhNzAy
ZDFlNjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1E
YXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oCkBA
IC0zNCwxMyArMzQsMTEgQEAgY2xhc3MgRmlsZTsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIGNsYXNz
IFRleHRFbmNvZGluZzsKIAorLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBhIFZhcmlhbnQgb2Yg
c3RydWN0cyBhbmQgcmVtb3ZlICJUeXBlIiBhbmQgYWxzbyB0aGUgIm1fIiBwcmVmaXhlcyBmcm9t
IHRoZSBkYXRhIG1lbWJlcnMuCisvLyBUaGUgbWVtYmVyIGZ1bmN0aW9ucyBjYW4gYmVjb21lIG5v
bi1tZW1iZXIgZnVjbnRpb25zLgogY2xhc3MgRm9ybURhdGFFbGVtZW50IHsKIHB1YmxpYzoKLSAg
ICBlbnVtIGNsYXNzIFR5cGUgewotICAgICAgICBEYXRhLAotICAgICAgICBFbmNvZGVkRmlsZSwK
LSAgICAgICAgRW5jb2RlZEJsb2IsCi0gICAgfTsKKyAgICBlbnVtIGNsYXNzIFR5cGUgeyBEYXRh
LCBFbmNvZGVkRmlsZSwgRW5jb2RlZEJsb2IgfTsKIAogICAgIEZvcm1EYXRhRWxlbWVudCgpCiAg
ICAgICAgIDogbV90eXBlKFR5cGU6OkRhdGEpCkBAIC03NCwxMCArNzIsOCBAQCBwdWJsaWM6CiAK
ICAgICBGb3JtRGF0YUVsZW1lbnQgaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBFbmNvZGVyPgotICAgIHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPgotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEZv
cm1EYXRhRWxlbWVudD4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBF
bmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8Rm9ybURhdGFFbGVtZW50PiBkZWNvZGUo
RGVjb2RlciYpOwogCiAgICAgVHlwZSBtX3R5cGU7CiAgICAgVmVjdG9yPGNoYXI+IG1fZGF0YTsK
QEAgLTg3LDkgKzgzLDggQEAgcHVibGljOgogICAgIGludDY0X3QgbV9maWxlTGVuZ3RoOwogICAg
IGRvdWJsZSBtX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWU7CiAgICAgLy8gRklYTUU6IEdl
bmVyYXRlZCBmaWxlIHN1cHBvcnQgaW4gRm9ybURhdGEgaXMgYWxtb3N0IGlkZW50aWNhbCB0byBC
bG9iLCB0aGV5IHNob3VsZCBiZSBtZXJnZWQuCi0gICAgLy8gV2UgY2FuJ3QganVzdCBzd2l0Y2gg
dG8gdXNpbmcgQmxvYnMgZm9yIGFsbCBmaWxlcyBmb3IgdHdvIHJlYXNvbnM6Ci0gICAgLy8gMS4g
Tm90IGFsbCBwbGF0Zm9ybXMgZW5hYmxlIEJMT0Igc3VwcG9ydC4KLSAgICAvLyAyLiBFbmNvZGVk
RmlsZSBmb3JtIGRhdGEgZWxlbWVudHMgZG8gbm90IGhhdmUgYSB2YWxpZCBtX2V4cGVjdGVkRmls
ZU1vZGlmaWNhdGlvblRpbWUsIG1lYW5pbmcgdGhhdCB3ZSBhbHdheXMgdXBsb2FkIHRoZSBsYXRl
c3QgY29udGVudCBmcm9tIGRpc2suCisgICAgLy8gV2UgY2FuJ3QganVzdCBzd2l0Y2ggdG8gdXNp
bmcgQmxvYnMgZm9yIGFsbCBmaWxlcyBiZWNhdXNlCisgICAgLy8gRW5jb2RlZEZpbGUgZm9ybSBk
YXRhIGVsZW1lbnRzIGRvIG5vdCBoYXZlIGEgdmFsaWQgbV9leHBlY3RlZEZpbGVNb2RpZmljYXRp
b25UaW1lLCBtZWFuaW5nIHRoYXQgd2UgYWx3YXlzIHVwbG9hZCB0aGUgbGF0ZXN0IGNvbnRlbnQg
ZnJvbSBkaXNrLgogICAgIFN0cmluZyBtX2dlbmVyYXRlZEZpbGVuYW1lOwogICAgIGJvb2wgbV9z
aG91bGRHZW5lcmF0ZUZpbGU7CiAgICAgYm9vbCBtX293bnNHZW5lcmF0ZWRGaWxlOwpAQCAtMTE3
LDcgKzExMiw2IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9ybURhdGFFbGVtZW50
JiBhLCBjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGIpCiAgICAgcmV0dXJuICEoYSA9PSBiKTsKIH0K
IAotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgogdm9pZCBGb3JtRGF0YUVsZW1lbnQ6OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewpAQCAtMjA0LDYgKzE5OCw3IEBAIHB1Ymxp
YzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZvcm1EYXRhPiBjcmVhdGUoY29uc3Qg
dm9pZCosIHNpemVfdCk7CiAgICAgc3RhdGljIFJlZjxGb3JtRGF0YT4gY3JlYXRlKGNvbnN0IENT
dHJpbmcmKTsKICAgICBzdGF0aWMgUmVmPEZvcm1EYXRhPiBjcmVhdGUoY29uc3QgVmVjdG9yPGNo
YXI+Jik7CisgICAgc3RhdGljIFJlZjxGb3JtRGF0YT4gY3JlYXRlKGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYpOwogICAgIHN0YXRpYyBSZWY8Rm9ybURhdGE+IGNyZWF0ZShjb25zdCBET01Gb3JtRGF0
YSYsIEVuY29kaW5nVHlwZSA9IEZvcm1VUkxFbmNvZGVkKTsKICAgICBzdGF0aWMgUmVmPEZvcm1E
YXRhPiBjcmVhdGVNdWx0aVBhcnQoY29uc3QgRE9NRm9ybURhdGEmLCBEb2N1bWVudCopOwogICAg
IFdFQkNPUkVfRVhQT1JUIH5Gb3JtRGF0YSgpOwpAQCAtMzAwLDYgKzI5NSw3IEBAIHZvaWQgRm9y
bURhdGE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgbV9i
b3VuZGFyeTsKICAgICBlbmNvZGVyIDw8IG1fZWxlbWVudHM7CiAgICAgZW5jb2RlciA8PCBtX2lk
ZW50aWZpZXI7CisgICAgLy8gRklYTUU6IERvZXMgbm90IGVuY29kZSBtX2NvbnRhaW5zUGFzc3dv
cmREYXRhLiBXaHkgaXMgdGhhdCBPSz8KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWls
ZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVy
LmNwcAppbmRleCA2ODg4YjJjY2ViNGI5N2NjYTk1NTE4Mzc1MDRlNTFjZjY2MzEwODhhLi40NTZk
OGQ3NzQ1MjBkYWMzMWYyZDc4NWFhMDFmY2JjOTA3YTUwMGVlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YUJ1aWxkZXIuY3BwCkBAIC0yLDcgKzIs
NyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAg
KiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAg
KiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogICAgICAgICAgIChDKSAyMDA2IEFsZXhleSBQcm9za3Vy
eWFrb3YgKGFwQG55cG9wLmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQog
ICoKQEAgLTM2LDcgKzM2LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBIZWxwZXIg
ZnVuY3Rpb25zCituYW1lc3BhY2UgRm9ybURhdGFCdWlsZGVyIHsKKwogc3RhdGljIGlubGluZSB2
b2lkIGFwcGVuZChWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY2hhciBzdHJpbmcpCiB7CiAgICAgYnVm
ZmVyLmFwcGVuZChzdHJpbmcpOwpAQCAtNTIsMTQgKzUzLDIwIEBAIHN0YXRpYyBpbmxpbmUgdm9p
ZCBhcHBlbmQoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNvbnN0IENTdHJpbmcmIHN0cmluZykKICAg
ICBidWZmZXIuYXBwZW5kKHN0cmluZy5kYXRhKCksIHN0cmluZy5sZW5ndGgoKSk7CiB9CiAKLXN0
YXRpYyB2b2lkIGFwcGVuZFF1b3RlZFN0cmluZyhWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3Qg
Q1N0cmluZyYgc3RyaW5nKQorc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZChWZWN0b3I8Y2hhcj4m
IGJ1ZmZlciwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBzdHJpbmcpCit7CisgICAgYnVmZmVyLmFw
cGVuZFZlY3RvcihzdHJpbmcpOworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRRdW90ZWQoVmVjdG9y
PGNoYXI+JiBidWZmZXIsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc3RyaW5nKQogewogICAgIC8v
IEFwcGVuZCBhIHN0cmluZyBhcyBhIHF1b3RlZCB2YWx1ZSwgZXNjYXBpbmcgcXVvdGVzIGFuZCBs
aW5lIGJyZWFrcy4KICAgICAvLyBGSVhNRTogSXMgaXQgY29ycmVjdCB0byB1c2UgcGVyY2VudCBl
c2NhcGluZyBoZXJlPyBPdGhlciBicm93c2VycyBkbyBub3QgZW5jb2RlIHRoZXNlIGNoYXJhY3Rl
cnMgeWV0LAogICAgIC8vIHNvIHdlIHNob3VsZCB0ZXN0IHBvcHVsYXIgc2VydmVycyB0byBmaW5k
IG91dCBpZiB0aGVyZSBpcyBhbiBlbmNvZGluZyBmb3JtIHRoZXkgY2FuIGhhbmRsZS4KLSAgICBz
aXplX3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgY2hhciBjID0gc3RyaW5nLmRhdGEoKVtpXTsKKyAg
ICAvLyBGSVhNRTogSWYgd2UgcmVhbGx5IHdhbnQgdG8gdXNlIHBlcmNlbnQgZXNjYXBpbmcgaW4g
YSBnb29kIHdheSwgd2UgbmVlZCB0byBlc2NhcGUgdGhlICIlIiBjaGFyYWN0ZXIgdG9vIQorICAg
IHNpemVfdCBzaXplID0gc3RyaW5nLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNpemU7ICsraSkgeworICAgICAgICBjaGFyIGMgPSBzdHJpbmdbaV07CiAgICAgICAgIHN3aXRj
aCAoYykgewogICAgICAgICBjYXNlIDB4QToKICAgICAgICAgICAgIGFwcGVuZChidWZmZXIsICIl
MEEiKTsKQEAgLTc2LDcgKzgzLDM0IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFF1b3RlZFN0cmluZyhW
ZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3QgQ1N0cmluZyYgc3RyaW5nKQogICAgIH0KIH0KIAot
VmVjdG9yPGNoYXI+IEZvcm1EYXRhQnVpbGRlcjo6Z2VuZXJhdGVVbmlxdWVCb3VuZGFyeVN0cmlu
ZygpCitzdGF0aWMgdm9pZCBhcHBlbmRFbmNvZGVkQXNGb3JtRGF0YShWZWN0b3I8Y2hhcj4mIGJ1
ZmZlciwgY29uc3QgdWludDhfdCogc3RyaW5nLCBzaXplX3QgbGVuZ3RoKQoreworICAgIC8vIFNh
bWUgc2FmZSBjaGFyYWN0ZXJzIGFzIE5ldHNjYXBlIGZvciBjb21wYXRpYmlsaXR5LgorICAgIHN0
YXRpYyBjb25zdCBjaGFyIHNhZmVDaGFyYWN0ZXJzW10gPSAiLS5fKiI7CisKKyAgICAvLyBodHRw
Oi8vd3d3LnczLm9yZy9UUi9odG1sNC9pbnRlcmFjdC9mb3Jtcy5odG1sI2gtMTcuMTMuNC4xCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBhdXRvIGMg
PSBzdHJpbmdbaV07CisKKyAgICAgICAgaWYgKGlzQVNDSUlBbHBoYW51bWVyaWMoYykgfHwgc3Ry
Y2hyKHNhZmVDaGFyYWN0ZXJzLCBjKSkKKyAgICAgICAgICAgIGFwcGVuZChidWZmZXIsIGMpOwor
ICAgICAgICBlbHNlIGlmIChjID09ICcgJykKKyAgICAgICAgICAgIGFwcGVuZChidWZmZXIsICcr
Jyk7CisgICAgICAgIGVsc2UgaWYgKGMgPT0gJ1xuJyB8fCAoYyA9PSAnXHInICYmIChpICsgMSA+
PSBsZW5ndGggfHwgc3RyaW5nW2kgKyAxXSAhPSAnXG4nKSkpCisgICAgICAgICAgICBhcHBlbmQo
YnVmZmVyLCAiJTBEJTBBIik7CisgICAgICAgIGVsc2UgaWYgKGMgIT0gJ1xyJykgeworICAgICAg
ICAgICAgYXBwZW5kKGJ1ZmZlciwgJyUnKTsKKyAgICAgICAgICAgIGFwcGVuZEJ5dGVBc0hleChj
LCBidWZmZXIpOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBhcHBlbmRFbmNv
ZGVkQXNGb3JtRGF0YShWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBzdHJpbmcpCit7CisgICAgYXBwZW5kRW5jb2RlZEFzRm9ybURhdGEoYnVmZmVyLCBzdHJpbmcu
ZGF0YSgpLCBzdHJpbmcuc2l6ZSgpKTsKK30KKworVmVjdG9yPGNoYXI+IGdlbmVyYXRlVW5pcXVl
Qm91bmRhcnlTdHJpbmcoKQogewogICAgIFZlY3RvcjxjaGFyPiBib3VuZGFyeTsKIApAQCAtMTE3
LDE4ICsxNTEsMTggQEAgVmVjdG9yPGNoYXI+IEZvcm1EYXRhQnVpbGRlcjo6Z2VuZXJhdGVVbmlx
dWVCb3VuZGFyeVN0cmluZygpCiAgICAgcmV0dXJuIGJvdW5kYXJ5OwogfQogCi12b2lkIEZvcm1E
YXRhQnVpbGRlcjo6YmVnaW5NdWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNv
bnN0IENTdHJpbmcmIGJvdW5kYXJ5LCBjb25zdCBDU3RyaW5nJiBuYW1lKQordm9pZCBiZWdpbk11
bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3QgQ1N0cmluZyYgYm91bmRh
cnksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbmFtZSkKIHsKICAgICBhZGRCb3VuZGFyeVRvTXVs
dGlQYXJ0SGVhZGVyKGJ1ZmZlciwgYm91bmRhcnkpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgbG9z
ZXMgZGF0YSBpcnJldmVyc2libHkgaWYgdGhlIGlucHV0IG5hbWUgaW5jbHVkZXMgY2hhcmFjdGVy
cyB5b3UgY2FuJ3QgZW5jb2RlCiAgICAgLy8gaW4gdGhlIHdlYnNpdGUncyBjaGFyYWN0ZXIgc2V0
LgogICAgIGFwcGVuZChidWZmZXIsICJDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5h
bWU9XCIiKTsKLSAgICBhcHBlbmRRdW90ZWRTdHJpbmcoYnVmZmVyLCBuYW1lKTsKKyAgICBhcHBl
bmRRdW90ZWQoYnVmZmVyLCBuYW1lKTsKICAgICBhcHBlbmQoYnVmZmVyLCAnIicpOwogfQogCi12
b2lkIEZvcm1EYXRhQnVpbGRlcjo6YWRkQm91bmRhcnlUb011bHRpUGFydEhlYWRlcihWZWN0b3I8
Y2hhcj4mIGJ1ZmZlciwgY29uc3QgQ1N0cmluZyYgYm91bmRhcnksIGJvb2wgaXNMYXN0Qm91bmRh
cnkpCit2b2lkIGFkZEJvdW5kYXJ5VG9NdWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+JiBidWZm
ZXIsIGNvbnN0IENTdHJpbmcmIGJvdW5kYXJ5LCBib29sIGlzTGFzdEJvdW5kYXJ5KQogewogICAg
IGFwcGVuZChidWZmZXIsICItLSIpOwogICAgIGFwcGVuZChidWZmZXIsIGJvdW5kYXJ5KTsKQEAg
LTEzOSwyOCArMTczLDI4IEBAIHZvaWQgRm9ybURhdGFCdWlsZGVyOjphZGRCb3VuZGFyeVRvTXVs
dGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCBDCiAgICAgYXBwZW5kKGJ1
ZmZlciwgIlxyXG4iKTsKIH0KIAotdm9pZCBGb3JtRGF0YUJ1aWxkZXI6OmFkZEZpbGVuYW1lVG9N
dWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNvbnN0IFRleHRFbmNvZGluZyYg
ZW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCit2b2lkIGFkZEZpbGVuYW1lVG9NdWx0
aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5j
b2RpbmcsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgbG9z
ZXMgZGF0YSBpcnJldmVyc2libHkgaWYgdGhlIGZpbGVuYW1lIGluY2x1ZGVzIGNoYXJhY3RlcnMg
eW91IGNhbid0IGVuY29kZQogICAgIC8vIGluIHRoZSB3ZWJzaXRlJ3MgY2hhcmFjdGVyIHNldC4K
ICAgICBhcHBlbmQoYnVmZmVyLCAiOyBmaWxlbmFtZT1cIiIpOwotICAgIGFwcGVuZFF1b3RlZFN0
cmluZyhidWZmZXIsIGVuY29kaW5nLmVuY29kZShmaWxlbmFtZSwgUXVlc3Rpb25NYXJrc0ZvclVu
ZW5jb2RhYmxlcykpOworICAgIGFwcGVuZFF1b3RlZChidWZmZXIsIGVuY29kaW5nLmVuY29kZShm
aWxlbmFtZSwgUXVlc3Rpb25NYXJrc0ZvclVuZW5jb2RhYmxlcykpOwogICAgIGFwcGVuZChidWZm
ZXIsICciJyk7CiB9CiAKLXZvaWQgRm9ybURhdGFCdWlsZGVyOjphZGRDb250ZW50VHlwZVRvTXVs
dGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCBDU3RyaW5nJiBtaW1lVHlw
ZSkKK3ZvaWQgYWRkQ29udGVudFR5cGVUb011bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4mIGJ1
ZmZlciwgY29uc3QgQ1N0cmluZyYgbWltZVR5cGUpCiB7CiAgICAgQVNTRVJUKEJsb2I6OmlzTm9y
bWFsaXplZENvbnRlbnRUeXBlKG1pbWVUeXBlKSk7CiAgICAgYXBwZW5kKGJ1ZmZlciwgIlxyXG5D
b250ZW50LVR5cGU6ICIpOwogICAgIGFwcGVuZChidWZmZXIsIG1pbWVUeXBlKTsKIH0KIAotdm9p
ZCBGb3JtRGF0YUJ1aWxkZXI6OmZpbmlzaE11bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4mIGJ1
ZmZlcikKK3ZvaWQgZmluaXNoTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYgYnVmZmVyKQog
ewogICAgIGFwcGVuZChidWZmZXIsICJcclxuXHJcbiIpOwogfQogCi12b2lkIEZvcm1EYXRhQnVp
bGRlcjo6YWRkS2V5VmFsdWVQYWlyQXNGb3JtRGF0YShWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29u
c3QgQ1N0cmluZyYga2V5LCBjb25zdCBDU3RyaW5nJiB2YWx1ZSwgRm9ybURhdGE6OkVuY29kaW5n
VHlwZSBlbmNvZGluZ1R5cGUpCit2b2lkIGFkZEtleVZhbHVlUGFpckFzRm9ybURhdGEoVmVjdG9y
PGNoYXI+JiBidWZmZXIsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBjb25zdCBWZWN0b3I8
dWludDhfdD4mIHZhbHVlLCBGb3JtRGF0YTo6RW5jb2RpbmdUeXBlIGVuY29kaW5nVHlwZSkKIHsK
ICAgICBpZiAoZW5jb2RpbmdUeXBlID09IEZvcm1EYXRhOjpUZXh0UGxhaW4pIHsKICAgICAgICAg
aWYgKCFidWZmZXIuaXNFbXB0eSgpKQpAQCAtMTcxLDMzICsyMDUsMTcgQEAgdm9pZCBGb3JtRGF0
YUJ1aWxkZXI6OmFkZEtleVZhbHVlUGFpckFzRm9ybURhdGEoVmVjdG9yPGNoYXI+JiBidWZmZXIs
IGNvbnN0IENTdHIKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIWJ1ZmZlci5pc0VtcHR5KCkp
CiAgICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCAnJicpOwotICAgICAgICBlbmNvZGVTdHJpbmdB
c0Zvcm1EYXRhKGJ1ZmZlciwga2V5KTsKKyAgICAgICAgYXBwZW5kRW5jb2RlZEFzRm9ybURhdGEo
YnVmZmVyLCBrZXkpOwogICAgICAgICBhcHBlbmQoYnVmZmVyLCAnPScpOwotICAgICAgICBlbmNv
ZGVTdHJpbmdBc0Zvcm1EYXRhKGJ1ZmZlciwgdmFsdWUpOworICAgICAgICBhcHBlbmRFbmNvZGVk
QXNGb3JtRGF0YShidWZmZXIsIHZhbHVlKTsKICAgICB9CiB9CiAKLXZvaWQgRm9ybURhdGFCdWls
ZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCBD
U3RyaW5nJiBzdHJpbmcpCit2b2lkIGVuY29kZVN0cmluZ0FzRm9ybURhdGEoVmVjdG9yPGNoYXI+
JiBidWZmZXIsIGNvbnN0IENTdHJpbmcmIHN0cmluZykKIHsKLSAgICAvLyBTYW1lIHNhZmUgY2hh
cmFjdGVycyBhcyBOZXRzY2FwZSBmb3IgY29tcGF0aWJpbGl0eS4KLSAgICBzdGF0aWMgY29uc3Qg
Y2hhciBzYWZlQ2hhcmFjdGVyc1tdID0gIi0uXyoiOwotCi0gICAgLy8gaHR0cDovL3d3dy53My5v
cmcvVFIvaHRtbDQvaW50ZXJhY3QvZm9ybXMuaHRtbCNoLTE3LjEzLjQuMQotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gc3RyaW5nLmRhdGEoKVtp
XTsKKyAgICBhcHBlbmRFbmNvZGVkQXNGb3JtRGF0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDhfdCo+KHN0cmluZy5kYXRhKCkpLCBzdHJpbmcubGVuZ3RoKCkpOworfQogCi0g
ICAgICAgIGlmIChpc0FTQ0lJQWxwaGFudW1lcmljKGMpIHx8IHN0cmNocihzYWZlQ2hhcmFjdGVy
cywgYykpCi0gICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCBjKTsKLSAgICAgICAgZWxzZSBpZiAo
YyA9PSAnICcpCi0gICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCAnKycpOwotICAgICAgICBlbHNl
IGlmIChjID09ICdcbicgfHwgKGMgPT0gJ1xyJyAmJiAoaSArIDEgPj0gbGVuZ3RoIHx8IHN0cmlu
Zy5kYXRhKClbaSArIDFdICE9ICdcbicpKSkKLSAgICAgICAgICAgIGFwcGVuZChidWZmZXIsICIl
MEQlMEEiKTsKLSAgICAgICAgZWxzZSBpZiAoYyAhPSAnXHInKSB7Ci0gICAgICAgICAgICBhcHBl
bmQoYnVmZmVyLCAnJScpOwotICAgICAgICAgICAgYXBwZW5kQnl0ZUFzSGV4KGMsIGJ1ZmZlcik7
Ci0gICAgICAgIH0KLSAgICB9CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5oCmluZGV4IDdhZGVjYWE2NmE3YWQwZTdjOGMxY2E2
ZDM3ZjEyZWRkOTk2ZTllNmIuLmQwZTA3YmNkMDhmZDNkNGMxYjljYmE1MjVhMTNjMTM5NmIyYTgy
YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFC
dWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YUJ1
aWxkZXIuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2gg
TW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUu
Y29tLykKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE4LDggKzE5LDcgQEAKICAqCiAgKi8KIAotI2lm
bmRlZiBGb3JtRGF0YUJ1aWxkZXJfaAotI2RlZmluZSBGb3JtRGF0YUJ1aWxkZXJfaAorI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJGb3JtRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CkBAIC0yOCwyNSArMjgsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBUZXh0RW5j
b2Rpbmc7CiAKLWNsYXNzIEZvcm1EYXRhQnVpbGRlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoRm9ybURhdGFCdWlsZGVyKTsKLXB1YmxpYzoKLSAgICAvLyBIZWxwZXIgZnVuY3Rpb25zIHVz
ZWQgYnkgSFRNTEZvcm1FbGVtZW50IGZvciBtdWx0aS1wYXJ0IGZvcm0gZGF0YQotICAgIHN0YXRp
YyBWZWN0b3I8Y2hhcj4gZ2VuZXJhdGVVbmlxdWVCb3VuZGFyeVN0cmluZygpOwotICAgIHN0YXRp
YyB2b2lkIGJlZ2luTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYsIGNvbnN0IENTdHJpbmcm
IGJvdW5kYXJ5LCBjb25zdCBDU3RyaW5nJiBuYW1lKTsKLSAgICBzdGF0aWMgdm9pZCBhZGRCb3Vu
ZGFyeVRvTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYsIGNvbnN0IENTdHJpbmcmIGJvdW5k
YXJ5LCBib29sIGlzTGFzdEJvdW5kYXJ5ID0gZmFsc2UpOwotICAgIHN0YXRpYyB2b2lkIGFkZEZp
bGVuYW1lVG9NdWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+JiwgY29uc3QgVGV4dEVuY29kaW5n
JiwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSk7Ci0gICAgc3RhdGljIHZvaWQgYWRkQ29udGVudFR5
cGVUb011bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4mLCBjb25zdCBDU3RyaW5nJiBtaW1lVHlw
ZSk7Ci0gICAgc3RhdGljIHZvaWQgZmluaXNoTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYp
OwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IEhUTUxGb3JtRWxlbWVudCBmb3Ig
bm9uIG11bHRpLXBhcnQgZm9ybSBkYXRhCi0gICAgc3RhdGljIHZvaWQgYWRkS2V5VmFsdWVQYWly
QXNGb3JtRGF0YShWZWN0b3I8Y2hhcj4mLCBjb25zdCBDU3RyaW5nJiBrZXksIGNvbnN0IENTdHJp
bmcmIHZhbHVlLCBGb3JtRGF0YTo6RW5jb2RpbmdUeXBlID0gRm9ybURhdGE6OkZvcm1VUkxFbmNv
ZGVkKTsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKFZlY3RvcjxjaGFy
PiYsIGNvbnN0IENTdHJpbmcmKTsKLQotcHJpdmF0ZToKLSAgICBGb3JtRGF0YUJ1aWxkZXIoKSB7
fQotfTsKK25hbWVzcGFjZSBGb3JtRGF0YUJ1aWxkZXIgeworCisvLyBIZWxwZXIgZnVuY3Rpb25z
IHVzZWQgYnkgSFRNTEZvcm1FbGVtZW50IGZvciBtdWx0aS1wYXJ0IGZvcm0gZGF0YS4KK1ZlY3Rv
cjxjaGFyPiBnZW5lcmF0ZVVuaXF1ZUJvdW5kYXJ5U3RyaW5nKCk7Cit2b2lkIGJlZ2luTXVsdGlQ
YXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYsIGNvbnN0IENTdHJpbmcmIGJvdW5kYXJ5LCBjb25zdCBW
ZWN0b3I8dWludDhfdD4mIG5hbWUpOwordm9pZCBhZGRCb3VuZGFyeVRvTXVsdGlQYXJ0SGVhZGVy
KFZlY3RvcjxjaGFyPiYsIGNvbnN0IENTdHJpbmcmIGJvdW5kYXJ5LCBib29sIGlzTGFzdEJvdW5k
YXJ5ID0gZmFsc2UpOwordm9pZCBhZGRGaWxlbmFtZVRvTXVsdGlQYXJ0SGVhZGVyKFZlY3Rvcjxj
aGFyPiYsIGNvbnN0IFRleHRFbmNvZGluZyYsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpOwordm9p
ZCBhZGRDb250ZW50VHlwZVRvTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYsIGNvbnN0IENT
dHJpbmcmIG1pbWVUeXBlKTsKK3ZvaWQgZmluaXNoTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFy
PiYpOworCisvLyBIZWxwZXIgZnVuY3Rpb25zIHVzZWQgYnkgSFRNTEZvcm1FbGVtZW50IGZvciBu
b24tbXVsdGktcGFydCBmb3JtIGRhdGEuCit2b2lkIGFkZEtleVZhbHVlUGFpckFzRm9ybURhdGEo
VmVjdG9yPGNoYXI+JiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYgdmFsdWUsIEZvcm1EYXRhOjpFbmNvZGluZ1R5cGUgPSBGb3JtRGF0YTo6Rm9ybVVS
TEVuY29kZWQpOwordm9pZCBlbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKFZlY3RvcjxjaGFyPiYsIGNv
bnN0IENTdHJpbmcmKTsKIAogfQogCi0jZW5kaWYKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJs
RGVsZWdhdGUuY3BwCmluZGV4IDdhNzU5YzRhOWZlN2QwMmQ1MjQzOWE4OGZhMzI2OWE5YTgzMmE0
MGQuLjI3ODQzOWUxNTIwMTk3M2Q3YTZjYTVlOTQzMGQ2ODM4OTMzNzMxYmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxE
ZWxlZ2F0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jl
c291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmNwcApAQCAtNDU3LDkgKzQ1Nyw5IEBAIHZvaWQgUmVz
b3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmhhbmRsZURhdGFVUkwoKQogCiAgICAgICAgIC8vIGRp
ZFJlY2VpdmVSZXNwb25zZSBtaWdodCBjYXVzZSB0aGUgY2xpZW50IHRvIGJlIGRlbGV0ZWQuCiAg
ICAgICAgIGlmIChtX2hhbmRsZS0+Y2xpZW50KCkpIHsKLSAgICAgICAgICAgIENTdHJpbmcgZW5j
b2RlZERhdGEgPSBlbmNvZGluZy5lbmNvZGUoZGF0YSwgVVJMRW5jb2RlZEVudGl0aWVzRm9yVW5l
bmNvZGFibGVzKTsKLSAgICAgICAgICAgIGlmIChlbmNvZGVkRGF0YS5sZW5ndGgoKSkKLSAgICAg
ICAgICAgICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZFJlY2VpdmVCdWZmZXIobV9oYW5kbGUs
IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZWREYXRhLmRhdGEoKSwgZW5jb2RlZERhdGEubGVu
Z3RoKCkpLCBvcmlnaW5hbFNpemUpOworICAgICAgICAgICAgYXV0byBlbmNvZGVkRGF0YSA9IGVu
Y29kaW5nLmVuY29kZShkYXRhLCBVUkxFbmNvZGVkRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwor
ICAgICAgICAgICAgaWYgKGVuY29kZWREYXRhLnNpemUoKSkKKyAgICAgICAgICAgICAgICBtX2hh
bmRsZS0+Y2xpZW50KCktPmRpZFJlY2VpdmVCdWZmZXIobV9oYW5kbGUsIFNoYXJlZEJ1ZmZlcjo6
Y3JlYXRlKFdURk1vdmUoZW5jb2RlZERhdGEpKSwgb3JpZ2luYWxTaXplKTsKICAgICAgICAgfQog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EZWNvZGVF
c2NhcGVTZXF1ZW5jZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRGVjb2RlRXNj
YXBlU2VxdWVuY2VzLmgKaW5kZXggYjhjODM5ZDgwM2M0Zjk3MzdhYWMzZmZkY2RhOTEwOTk0YTAw
NDcwNC4uN2YyNmU4Y2NjZTFmM2Q4YTZjYmIwOTgxYjYzMTVjYWY4ZDY0MDJiNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RlY29kZUVzY2FwZVNlcXVlbmNlcy5o
CkBAIC0yNyw4ICsyNyw3IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgRGVjb2Rl
RXNjYXBlU2VxdWVuY2VzX2gKLSNkZWZpbmUgRGVjb2RlRXNjYXBlU2VxdWVuY2VzX2gKKyNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSA8d3RmL0FTQ0lJ
Q1R5cGUuaD4KQEAgLTE1NSwxMSArMTU0LDExIEBAIFN0cmluZyBkZWNvZGVFc2NhcGVTZXF1ZW5j
ZXMoU3RyaW5nVmlldyBzdHJpbmcsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCiAgICAg
cmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCi1pbmxpbmUgVmVjdG9yPGNoYXI+IGRlY29k
ZVVSTEVzY2FwZVNlcXVlbmNlc0FzRGF0YShTdHJpbmdWaWV3IHN0cmluZywgY29uc3QgVGV4dEVu
Y29kaW5nJiBlbmNvZGluZykKK2lubGluZSBWZWN0b3I8dWludDhfdD4gZGVjb2RlVVJMRXNjYXBl
U2VxdWVuY2VzQXNEYXRhKFN0cmluZ1ZpZXcgc3RyaW5nLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVu
Y29kaW5nKQogewogICAgIEFTU0VSVChlbmNvZGluZy5pc1ZhbGlkKCkpOwogCi0gICAgVmVjdG9y
PGNoYXI+IHJlc3VsdDsKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OwogICAgIHNpemVfdCBk
ZWNvZGVkUG9zaXRpb24gPSAwOwogICAgIHNpemVfdCBzZWFyY2hQb3NpdGlvbiA9IDA7CiAgICAg
d2hpbGUgKHRydWUpIHsKQEAgLTE3MywxMCArMTcyLDkgQEAgaW5saW5lIFZlY3RvcjxjaGFyPiBk
ZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXNBc0RhdGEoU3RyaW5nVmlldyBzdHJpbmcsIGNvbnN0IFRl
eHQKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQor
CiAgICAgICAgIC8vIFN0cmluZ3MgYXJlIGVuY29kZWQgYXMgcmVxdWVzdGVkLgotICAgICAgICBh
dXRvIHN0cmluZ0ZyYWdtZW50ID0gc3RyaW5nLnN1YnN0cmluZyhkZWNvZGVkUG9zaXRpb24sIGVu
Y29kZWRSdW5Qb3NpdGlvbiAtIGRlY29kZWRQb3NpdGlvbik7Ci0gICAgICAgIGF1dG8gZW5jb2Rl
ZFN0cmluZ0ZyYWdtZW50ID0gZW5jb2RpbmcuZW5jb2RlKHN0cmluZ0ZyYWdtZW50LCBVUkxFbmNv
ZGVkRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGVuY29k
ZWRTdHJpbmdGcmFnbWVudC5kYXRhKCksIGVuY29kZWRTdHJpbmdGcmFnbWVudC5sZW5ndGgoKSk7
CisgICAgICAgIHJlc3VsdC5hcHBlbmRWZWN0b3IoZW5jb2RpbmcuZW5jb2RlKHN0cmluZy5zdWJz
dHJpbmcoZGVjb2RlZFBvc2l0aW9uLCBlbmNvZGVkUnVuUG9zaXRpb24gLSBkZWNvZGVkUG9zaXRp
b24pLCBVUkxFbmNvZGVkRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpKTsKIAogICAgICAgICBpZiAo
ZW5jb2RlZFJ1blBvc2l0aW9uID09IG5vdEZvdW5kKQogICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKQEAgLTE5Miw0ICsxOTAsMyBAQCBpbmxpbmUgVmVjdG9yPGNoYXI+IGRlY29kZVVSTEVzY2Fw
ZVNlcXVlbmNlc0FzRGF0YShTdHJpbmdWaWV3IHN0cmluZywgY29uc3QgVGV4dAogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBEZWNvZGVFc2NhcGVTZXF1ZW5jZXNfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuY3BwCmluZGV4IDYzYWVmNDdkNzM1
NDQyNjIzY2Y0NmVjNGYzYzEyYmY1ZDAxZmFhYjMuLmUyNDA3ZGVlZTQ0MTk5Mzk2ZTFlMzBhNjk3
MTQyYjM2MGZhNmY1NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
VGV4dENvZGVjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2Rl
Yy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
QWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAt
MjcsMjkgKzI3LDI0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGV4dENvZGVj
LmgiCiAKLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8YXJyYXk+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
VGV4dENvZGVjOjp+VGV4dENvZGVjKCkgPSBkZWZhdWx0OwotCi1pbnQgVGV4dENvZGVjOjpnZXRV
bmVuY29kYWJsZVJlcGxhY2VtZW50KHVuc2lnbmVkIGNvZGVQb2ludCwgVW5lbmNvZGFibGVIYW5k
bGluZyBoYW5kbGluZywgVW5lbmNvZGFibGVSZXBsYWNlbWVudEFycmF5IHJlcGxhY2VtZW50KQor
aW50IFRleHRDb2RlYzo6Z2V0VW5lbmNvZGFibGVSZXBsYWNlbWVudChVQ2hhcjMyIGNvZGVQb2lu
dCwgVW5lbmNvZGFibGVIYW5kbGluZyBoYW5kbGluZywgVW5lbmNvZGFibGVSZXBsYWNlbWVudEFy
cmF5JiByZXBsYWNlbWVudCkKIHsKICAgICBzd2l0Y2ggKGhhbmRsaW5nKSB7Ci0gICAgICAgIGNh
c2UgUXVlc3Rpb25NYXJrc0ZvclVuZW5jb2RhYmxlczoKLSAgICAgICAgICAgIHJlcGxhY2VtZW50
WzBdID0gJz8nOwotICAgICAgICAgICAgcmVwbGFjZW1lbnRbMV0gPSAwOwotICAgICAgICAgICAg
cmV0dXJuIDE7Ci0gICAgICAgIGNhc2UgRW50aXRpZXNGb3JVbmVuY29kYWJsZXM6Ci0gICAgICAg
ICAgICBzbnByaW50ZihyZXBsYWNlbWVudCwgc2l6ZW9mKFVuZW5jb2RhYmxlUmVwbGFjZW1lbnRB
cnJheSksICImIyV1OyIsIGNvZGVQb2ludCk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8aW50PihzdHJsZW4ocmVwbGFjZW1lbnQpKTsKLSAgICAgICAgY2FzZSBVUkxFbmNvZGVkRW50
aXRpZXNGb3JVbmVuY29kYWJsZXM6Ci0gICAgICAgICAgICBzbnByaW50ZihyZXBsYWNlbWVudCwg
c2l6ZW9mKFVuZW5jb2RhYmxlUmVwbGFjZW1lbnRBcnJheSksICIlJTI2JSUyMyV1JSUzQiIsIGNv
ZGVQb2ludCk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihzdHJsZW4ocmVw
bGFjZW1lbnQpKTsKKyAgICBjYXNlIFF1ZXN0aW9uTWFya3NGb3JVbmVuY29kYWJsZXM6CisgICAg
ICAgIHJlcGxhY2VtZW50LmRhdGEoKVswXSA9ICc/JzsKKyAgICAgICAgcmVwbGFjZW1lbnQuZGF0
YSgpWzFdID0gMDsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBFbnRpdGllc0ZvclVuZW5j
b2RhYmxlczoKKyAgICAgICAgcmV0dXJuIHNucHJpbnRmKHJlcGxhY2VtZW50LmRhdGEoKSwgc2l6
ZW9mKFVuZW5jb2RhYmxlUmVwbGFjZW1lbnRBcnJheSksICImIyV1OyIsIGNvZGVQb2ludCk7Cisg
ICAgY2FzZSBVUkxFbmNvZGVkRW50aXRpZXNGb3JVbmVuY29kYWJsZXM6CisgICAgICAgIHJldHVy
biBzbnByaW50ZihyZXBsYWNlbWVudC5kYXRhKCksIHNpemVvZihVbmVuY29kYWJsZVJlcGxhY2Vt
ZW50QXJyYXkpLCAiJSUyNiUlMjMldSUlM0IiLCBjb2RlUG9pbnQpOwogICAgIH0KICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXBsYWNlbWVudFswXSA9IDA7CisgICAgcmVwbGFjZW1l
bnQuZGF0YSgpWzBdID0gMDsKICAgICByZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dENvZGVjLmgKaW5kZXggZjMwY2QxMjYxNWU1M2UwOTVhNTkyZjM5ZmY4ZTlj
NzdjYWEzYWE3Zi4uNDgzZTUwMWU2YjhlMmU0MDc4MjlkYmYxYWEwNDhjNTZmN2FjZDcxNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlYy5oCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFw
QG55cG9wLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI0LDYxICsyNCwzOSBAQAogICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBUZXh0Q29kZWNfaAotI2RlZmluZSBUZXh0Q29kZWNf
aAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8cGFsL3RleHQv
VW5lbmNvZGFibGVIYW5kbGluZy5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdW1hY2hpbmUuaD4KICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAg
Y2xhc3MgVGV4dEVuY29kaW5nOwogCi0gICAgLy8gU3BlY2lmaWVzIHdoYXQgd2lsbCBoYXBwZW4g
d2hlbiBhIGNoYXJhY3RlciBpcyBlbmNvdW50ZXJlZCB0aGF0IGlzCi0gICAgLy8gbm90IGVuY29k
YWJsZSBpbiB0aGUgY2hhcmFjdGVyIHNldC4KLSAgICBlbnVtIFVuZW5jb2RhYmxlSGFuZGxpbmcg
ewotICAgICAgICAvLyBTdWJzdGl0dXRlcyB0aGUgcmVwbGFjZW1lbnQgY2hhcmFjdGVyICI/Ii4K
LSAgICAgICAgUXVlc3Rpb25NYXJrc0ZvclVuZW5jb2RhYmxlcywKK2NsYXNzIFRleHRFbmNvZGlu
ZzsKIAotICAgICAgICAvLyBFbmNvZGVzIHRoZSBjaGFyYWN0ZXIgYXMgYW4gWE1MIGVudGl0eS4g
Rm9yIGV4YW1wbGUsIFUrMDZERQotICAgICAgICAvLyB3b3VsZCBiZSAiJiMxNzU4OyIgKDB4NkRF
ID0gMTc1OCBpbiBvY3RhbCkuCi0gICAgICAgIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzLAordXNp
bmcgVW5lbmNvZGFibGVSZXBsYWNlbWVudEFycmF5ID0gc3RkOjphcnJheTxjaGFyLCAzMj47CiAK
LSAgICAgICAgLy8gRW5jb2RlcyB0aGUgY2hhcmFjdGVyIGFzIGVuIGVudGl0eSBhcyBhYm92ZSwg
YnV0IGVzY2FwZWQKLSAgICAgICAgLy8gbm9uLWFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLiBUaGlz
IGlzIHVzZWQgaW4gVVJMcy4KLSAgICAgICAgLy8gRm9yIGV4YW1wbGUsIFUrNkRFIHdvdWxkIGJl
ICIlMjYlMjMxNzU4JTNCIi4KLSAgICAgICAgVVJMRW5jb2RlZEVudGl0aWVzRm9yVW5lbmNvZGFi
bGVzCi0gICAgfTsKK2NsYXNzIFRleHRDb2RlYyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
VGV4dENvZGVjKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgVGV4dENv
ZGVjKCkgPSBkZWZhdWx0OworICAgIHZpcnR1YWwgflRleHRDb2RlYygpID0gZGVmYXVsdDsKIAot
ICAgIHR5cGVkZWYgY2hhciBVbmVuY29kYWJsZVJlcGxhY2VtZW50QXJyYXlbMzJdOworICAgIHZp
cnR1YWwgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVz
aCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpID0gMDsKKyAgICB2aXJ0dWFsIFZl
Y3Rvcjx1aW50OF90PiBlbmNvZGUoU3RyaW5nVmlldywgVW5lbmNvZGFibGVIYW5kbGluZykgPSAw
OwogCi0gICAgY2xhc3MgVGV4dENvZGVjIHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
VGV4dENvZGVjKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAg
ICBUZXh0Q29kZWMoKSB7IH0KLSAgICAgICAgdmlydHVhbCB+VGV4dENvZGVjKCk7CisgICAgLy8g
RmlsbHMgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZl
bgorICAgIC8vIHVuZW5jb2RhYmxlIGNoYXJhY3RlciBpbnRvIHRoZSBnaXZlbiByZXBsYWNlbWVu
dCBidWZmZXIuCisgICAgLy8gVGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIChub3QgaW5jbHVkaW5n
IHRoZSBudWxsKSB3aWxsIGJlIHJldHVybmVkLgorICAgIHN0YXRpYyBpbnQgZ2V0VW5lbmNvZGFi
bGVSZXBsYWNlbWVudChVQ2hhcjMyLCBVbmVuY29kYWJsZUhhbmRsaW5nLCBVbmVuY29kYWJsZVJl
cGxhY2VtZW50QXJyYXkmKTsKK307CiAKLSAgICAgICAgU3RyaW5nIGRlY29kZShjb25zdCBjaGFy
KiBzdHIsIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2ggPSBmYWxzZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgYm9vbCBpZ25vcmVkOwotICAgICAgICAgICAgcmV0dXJuIGRlY29kZShzdHIsIGxl
bmd0aCwgZmx1c2gsIGZhbHNlLCBpZ25vcmVkKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgdmlydHVhbCBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29s
IGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcikgPSAwOwotICAgICAgICB2
aXJ0dWFsIENTdHJpbmcgZW5jb2RlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgVW5lbmNv
ZGFibGVIYW5kbGluZykgPSAwOwordXNpbmcgRW5jb2RpbmdOYW1lUmVnaXN0cmFyID0gdm9pZCAo
KikoY29uc3QgY2hhciogYWxpYXMsIGNvbnN0IGNoYXIqIG5hbWUpOwogCi0gICAgICAgIC8vIEZp
bGxzIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4K
LSAgICAgICAgLy8gdW5lbmNvZGFibGUgY2hhcmFjdGVyIGludG8gdGhlIGdpdmVuIHJlcGxhY2Vt
ZW50IGJ1ZmZlci4gCi0gICAgICAgIC8vIFRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyAobm90IGlu
Y2x1ZGluZyB0aGUgbnVsbCkgd2lsbCBiZSByZXR1cm5lZC4KLSAgICAgICAgc3RhdGljIGludCBn
ZXRVbmVuY29kYWJsZVJlcGxhY2VtZW50KHVuc2lnbmVkIGNvZGVQb2ludCwgVW5lbmNvZGFibGVI
YW5kbGluZywgVW5lbmNvZGFibGVSZXBsYWNlbWVudEFycmF5KTsKLSAgICB9OwotCi0gICAgdHlw
ZWRlZiB2b2lkICgqRW5jb2RpbmdOYW1lUmVnaXN0cmFyKShjb25zdCBjaGFyKiBhbGlhcywgY29u
c3QgY2hhciogbmFtZSk7Ci0KLSAgICB0eXBlZGVmIHN0ZDo6dW5pcXVlX3B0cjxUZXh0Q29kZWM+
ICgqTmV3VGV4dENvZGVjRnVuY3Rpb24pKGNvbnN0IFRleHRFbmNvZGluZyYsIGNvbnN0IHZvaWQq
IGFkZGl0aW9uYWxEYXRhKTsKLSAgICB0eXBlZGVmIHZvaWQgKCpUZXh0Q29kZWNSZWdpc3RyYXIp
KGNvbnN0IGNoYXIqIG5hbWUsIE5ld1RleHRDb2RlY0Z1bmN0aW9uLCBjb25zdCB2b2lkKiBhZGRp
dGlvbmFsRGF0YSk7Cit1c2luZyBOZXdUZXh0Q29kZWNGdW5jdGlvbiA9IFdURjo6RnVuY3Rpb248
c3RkOjp1bmlxdWVfcHRyPFRleHRDb2RlYz4oKT47Cit1c2luZyBUZXh0Q29kZWNSZWdpc3RyYXIg
PSB2b2lkICgqKShjb25zdCBjaGFyKiBuYW1lLCBOZXdUZXh0Q29kZWNGdW5jdGlvbiYmKTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gVGV4dENvZGVjX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcAppbmRleCA2ZTI3MzY2OTlj
OGFhNjkzMzdkYWM3ZDMzOTExMDk0NDVmMDYyM2Y1Li5iNGE5YzYyMTM5ZTM1MWYxNDc3YjBiY2M4
YzY5OWIyYTFjOTc1NGYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRDb2RlY0lDVS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
Q29kZWNJQ1UuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNiwgMjAwNywgMjAwOCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29t
PgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzAsMTAgKzMwLDggQEAKICNpbmNsdWRlICJUZXh0RW5j
b2RpbmcuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmdSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlRo
cmVhZEdsb2JhbERhdGEuaCIKLSNpbmNsdWRlIDx1bmljb2RlL3VjbnYuaD4KKyNpbmNsdWRlIDxh
cnJheT4KICNpbmNsdWRlIDx1bmljb2RlL3VjbnZfY2IuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KQEAgLTQzLDIzICs0MSw2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY29uc3Qgc2l6ZV90IENvbnZlcnNpb25CdWZmZXJTaXplID0gMTYzODQ7CiAKLUlDVUNv
bnZlcnRlcldyYXBwZXI6On5JQ1VDb252ZXJ0ZXJXcmFwcGVyKCkKLXsKLSAgICBpZiAoY29udmVy
dGVyKQotICAgICAgICB1Y252X2Nsb3NlKGNvbnZlcnRlcik7Ci19Ci0KLXN0YXRpYyBVQ29udmVy
dGVyKiYgY2FjaGVkQ29udmVydGVySUNVKCkKLXsKLSAgICByZXR1cm4gdGhyZWFkR2xvYmFsRGF0
YSgpLmNhY2hlZENvbnZlcnRlcklDVSgpLmNvbnZlcnRlcjsKLX0KLQotc3RkOjp1bmlxdWVfcHRy
PFRleHRDb2RlYz4gVGV4dENvZGVjSUNVOjpjcmVhdGUoY29uc3QgVGV4dEVuY29kaW5nJiBlbmNv
ZGluZywgY29uc3Qgdm9pZCogYWRkaXRpb25hbERhdGEpCi17Ci0gICAgLy8gTmFtZSBzdHJpbmdz
IGFyZSBwZXJzaXN0ZW50bHkga2VwdCBpbiBUZXh0RW5jb2RpbmdSZWdpc3RyeSBtYXBzLCBzbyB0
aGV5IGFyZSBuZXZlciBkZWxldGVkLgotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFRleHRD
b2RlY0lDVT4oZW5jb2RpbmcubmFtZSgpLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYWRkaXRp
b25hbERhdGEpKTsKLX0KLQogI2RlZmluZSBERUNMQVJFX0FMSUFTRVMoZW5jb2RpbmcsIC4uLikg
XAogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbmNvZGluZyMjX2FsaWFzZXNbXSB7IF9f
VkFfQVJHU19fIH0KIApAQCAtMTY5LDExNCArMTUwLDExNSBAQCB2b2lkIFRleHRDb2RlY0lDVTo6
cmVnaXN0ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIpCiB2
b2lkIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lz
dHJhcikKIHsKICAgICBmb3IgKGF1dG8mIGVuY29kaW5nTmFtZSA6IGVuY29kaW5nTmFtZXMpIHsK
KyAgICAgICAgY29uc3QgY2hhciogbmFtZSA9IGVuY29kaW5nTmFtZS5uYW1lOworCiAgICAgICAg
IC8vIFRoZXNlIGVuY29kaW5ncyBjdXJyZW50bHkgZG9uJ3QgaGF2ZSBzdGFuZGFyZCBuYW1lcywg
c28gd2UgbmVlZCB0byByZWdpc3RlciBlbmNvZGVycyBtYW51YWxseS4KICAgICAgICAgLy8gaHR0
cDovL2RlbW8uaWN1LXByb2plY3Qub3JnL2ljdS1iaW4vY29udmV4cAotICAgICAgICBpZiAoIXN0
cmNtcChlbmNvZGluZ05hbWUubmFtZSwgIndpbmRvd3MtODc0IikpIHsKLSAgICAgICAgICAgIHJl
Z2lzdHJhcihlbmNvZGluZ05hbWUubmFtZSwgY3JlYXRlLCAid2luZG93cy04NzQtMjAwMCIpOwor
ICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAid2luZG93cy04NzQiKSkgeworICAgICAgICAgICAg
cmVnaXN0cmFyKG5hbWUsIFtuYW1lXSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV91bmlxdWU8VGV4dENvZGVjSUNVPihuYW1lLCAid2luZG93cy04NzQtMjAwMCIpOworICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAo
IXN0cmNtcChlbmNvZGluZ05hbWUubmFtZSwgIndpbmRvd3MtOTQ5IikpIHsKLSAgICAgICAgICAg
IHJlZ2lzdHJhcihlbmNvZGluZ05hbWUubmFtZSwgY3JlYXRlLCAid2luZG93cy05NDktMjAwMCIp
OworICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAid2luZG93cy05NDkiKSkgeworICAgICAgICAg
ICAgcmVnaXN0cmFyKG5hbWUsIFtuYW1lXSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bWFrZV91bmlxdWU8VGV4dENvZGVjSUNVPihuYW1lLCAid2luZG93cy05NDktMjAwMCIpOworICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBp
ZiAoIXN0cmNtcChlbmNvZGluZ05hbWUubmFtZSwgIngtbWFjLWN5cmlsbGljIikpIHsKLSAgICAg
ICAgICAgIHJlZ2lzdHJhcihlbmNvZGluZ05hbWUubmFtZSwgY3JlYXRlLCAibWFjb3MtN18zLTEw
LjIiKTsKKyAgICAgICAgaWYgKCFzdHJjbXAobmFtZSwgIngtbWFjLWN5cmlsbGljIikpIHsKKyAg
ICAgICAgICAgIHJlZ2lzdHJhcihuYW1lLCBbbmFtZV0geworICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1ha2VfdW5pcXVlPFRleHRDb2RlY0lDVT4obmFtZSwgIm1hY29zLTdfMy0xMC4yIik7
CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAg
ICAgIGlmICghc3RyY21wKGVuY29kaW5nTmFtZS5uYW1lLCAieC1tYWMtZ3JlZWsiKSkgewotICAg
ICAgICAgICAgcmVnaXN0cmFyKGVuY29kaW5nTmFtZS5uYW1lLCBjcmVhdGUsICJtYWNvcy02XzIt
MTAuNCIpOworICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAieC1tYWMtZ3JlZWsiKSkgeworICAg
ICAgICAgICAgcmVnaXN0cmFyKG5hbWUsIFtuYW1lXSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjSUNVPihuYW1lLCAibWFjb3MtNl8yLTEwLjQiKTsK
KyAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAg
ICAgaWYgKCFzdHJjbXAoZW5jb2RpbmdOYW1lLm5hbWUsICJ4LW1hYy1jZW50cmFsZXVycm9tYW4i
KSkgewotICAgICAgICAgICAgcmVnaXN0cmFyKGVuY29kaW5nTmFtZS5uYW1lLCBjcmVhdGUsICJt
YWNvcy0yOS0xMC4yIik7CisgICAgICAgIGlmICghc3RyY21wKG5hbWUsICJ4LW1hYy1jZW50cmFs
ZXVycm9tYW4iKSkgeworICAgICAgICAgICAgcmVnaXN0cmFyKG5hbWUsIFtuYW1lXSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjSUNVPihuYW1lLCAi
bWFjb3MtMjktMTAuMiIpOworICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQotICAgICAgICBpZiAoIXN0cmNtcChlbmNvZGluZ05hbWUubmFtZSwgIngtbWFj
LXR1cmtpc2giKSkgewotICAgICAgICAgICAgcmVnaXN0cmFyKGVuY29kaW5nTmFtZS5uYW1lLCBj
cmVhdGUsICJtYWNvcy0zNS0xMC4yIik7CisgICAgICAgIGlmICghc3RyY21wKG5hbWUsICJ4LW1h
Yy10dXJraXNoIikpIHsKKyAgICAgICAgICAgIHJlZ2lzdHJhcihuYW1lLCBbbmFtZV0geworICAg
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFRleHRDb2RlY0lDVT4obmFtZSwg
Im1hY29zLTM1LTEwLjIiKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFzdHJjbXAoZW5jb2RpbmdOYW1lLm5hbWUsICJFVUMt
S1IiKSkgewotICAgICAgICAgICAgcmVnaXN0cmFyKGVuY29kaW5nTmFtZS5uYW1lLCBjcmVhdGUs
ICJ3aW5kb3dzLTk0OSIpOworICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAiRVVDLUtSIikpIHsK
KyAgICAgICAgICAgIHJlZ2lzdHJhcihuYW1lLCBbbmFtZV0geworICAgICAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPFRleHRDb2RlY0lDVT4obmFtZSwgIndpbmRvd3MtOTQ5Iik7
CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKICAg
ICAgICAgVUVycm9yQ29kZSBlcnJvciA9IFVfWkVST19FUlJPUjsKLSAgICAgICAgY29uc3QgY2hh
ciogY2Fub25pY2FsQ29udmVydGVyTmFtZSA9IHVjbnZfZ2V0Q2Fub25pY2FsTmFtZShlbmNvZGlu
Z05hbWUubmFtZSwgIklBTkEiLCAmZXJyb3IpOworICAgICAgICBjb25zdCBjaGFyKiBjYW5vbmlj
YWxDb252ZXJ0ZXJOYW1lID0gdWNudl9nZXRDYW5vbmljYWxOYW1lKG5hbWUsICJJQU5BIiwgJmVy
cm9yKTsKICAgICAgICAgQVNTRVJUKFVfU1VDQ0VTUyhlcnJvcikpOwotICAgICAgICByZWdpc3Ry
YXIoZW5jb2RpbmdOYW1lLm5hbWUsIGNyZWF0ZSwgY2Fub25pY2FsQ29udmVydGVyTmFtZSk7Cisg
ICAgICAgIHJlZ2lzdHJhcihuYW1lLCBbbmFtZSwgY2Fub25pY2FsQ29udmVydGVyTmFtZV0gewor
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjSUNVPihuYW1lLCBj
YW5vbmljYWxDb252ZXJ0ZXJOYW1lKTsKKyAgICAgICAgfSk7CiAgICAgfQogfQogCiBUZXh0Q29k
ZWNJQ1U6OlRleHRDb2RlY0lDVShjb25zdCBjaGFyKiBlbmNvZGluZywgY29uc3QgY2hhciogY2Fu
b25pY2FsQ29udmVydGVyTmFtZSkKICAgICA6IG1fZW5jb2RpbmdOYW1lKGVuY29kaW5nKQogICAg
ICwgbV9jYW5vbmljYWxDb252ZXJ0ZXJOYW1lKGNhbm9uaWNhbENvbnZlcnRlck5hbWUpCi0gICAg
LCBtX2NvbnZlcnRlcklDVSgwKQotICAgICwgbV9uZWVkc0dCS0ZhbGxiYWNrcyhmYWxzZSkKIHsK
IH0KIAogVGV4dENvZGVjSUNVOjp+VGV4dENvZGVjSUNVKCkKIHsKLSAgICByZWxlYXNlSUNVQ29u
dmVydGVyKCk7Ci19Ci0KLXZvaWQgVGV4dENvZGVjSUNVOjpyZWxlYXNlSUNVQ29udmVydGVyKCkg
Y29uc3QKLXsKLSAgICBpZiAobV9jb252ZXJ0ZXJJQ1UpIHsKLSAgICAgICAgVUNvbnZlcnRlciom
IGNhY2hlZENvbnZlcnRlciA9IGNhY2hlZENvbnZlcnRlcklDVSgpOwotICAgICAgICBpZiAoY2Fj
aGVkQ29udmVydGVyKQotICAgICAgICAgICAgdWNudl9jbG9zZShjYWNoZWRDb252ZXJ0ZXIpOwot
ICAgICAgICB1Y252X3Jlc2V0KG1fY29udmVydGVySUNVKTsKLSAgICAgICAgY2FjaGVkQ29udmVy
dGVyID0gbV9jb252ZXJ0ZXJJQ1U7Ci0gICAgICAgIG1fY29udmVydGVySUNVID0gMDsKKyAgICBp
ZiAobV9jb252ZXJ0ZXIpIHsKKyAgICAgICAgdWNudl9yZXNldChtX2NvbnZlcnRlci5nZXQoKSk7
CisgICAgICAgIHRocmVhZEdsb2JhbERhdGEoKS5jYWNoZWRDb252ZXJ0ZXJJQ1UoKS5jb252ZXJ0
ZXIgPSBXVEZNb3ZlKG1fY29udmVydGVyKTsKICAgICB9CiB9CiAKIHZvaWQgVGV4dENvZGVjSUNV
OjpjcmVhdGVJQ1VDb252ZXJ0ZXIoKSBjb25zdAogewotICAgIEFTU0VSVCghbV9jb252ZXJ0ZXJJ
Q1UpOwotCi0gICAgVUVycm9yQ29kZSBlcnI7CisgICAgQVNTRVJUKCFtX2NvbnZlcnRlcik7CiAK
ICAgICBtX25lZWRzR0JLRmFsbGJhY2tzID0gIXN0cmNtcChtX2VuY29kaW5nTmFtZSwgIkdCSyIp
OwogCi0gICAgVUNvbnZlcnRlciomIGNhY2hlZENvbnZlcnRlciA9IGNhY2hlZENvbnZlcnRlcklD
VSgpOworICAgIGF1dG8mIGNhY2hlZENvbnZlcnRlciA9IHRocmVhZEdsb2JhbERhdGEoKS5jYWNo
ZWRDb252ZXJ0ZXJJQ1UoKS5jb252ZXJ0ZXI7CiAgICAgaWYgKGNhY2hlZENvbnZlcnRlcikgewot
ICAgICAgICBlcnIgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGNhY2hlZENv
bnZlcnRlck5hbWUgPSB1Y252X2dldE5hbWUoY2FjaGVkQ29udmVydGVyLCAmZXJyKTsKLSAgICAg
ICAgaWYgKFVfU1VDQ0VTUyhlcnIpICYmICFzdHJjbXAobV9jYW5vbmljYWxDb252ZXJ0ZXJOYW1l
LCBjYWNoZWRDb252ZXJ0ZXJOYW1lKSkgewotICAgICAgICAgICAgbV9jb252ZXJ0ZXJJQ1UgPSBj
YWNoZWRDb252ZXJ0ZXI7Ci0gICAgICAgICAgICBjYWNoZWRDb252ZXJ0ZXIgPSAwOworICAgICAg
ICBVRXJyb3JDb2RlIGVycm9yID0gVV9aRVJPX0VSUk9SOworICAgICAgICBjb25zdCBjaGFyKiBj
YWNoZWRDb252ZXJ0ZXJOYW1lID0gdWNudl9nZXROYW1lKGNhY2hlZENvbnZlcnRlci5nZXQoKSwg
JmVycm9yKTsKKyAgICAgICAgaWYgKFVfU1VDQ0VTUyhlcnJvcikgJiYgIXN0cmNtcChtX2Nhbm9u
aWNhbENvbnZlcnRlck5hbWUsIGNhY2hlZENvbnZlcnRlck5hbWUpKSB7CisgICAgICAgICAgICBt
X2NvbnZlcnRlciA9IFdURk1vdmUoY2FjaGVkQ29udmVydGVyKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgIH0KIAotICAgIGVyciA9IFVfWkVST19FUlJPUjsKLSAgICBtX2Nv
bnZlcnRlcklDVSA9IHVjbnZfb3BlbihtX2Nhbm9uaWNhbENvbnZlcnRlck5hbWUsICZlcnIpOwot
ICAgIEFTU0VSVChVX1NVQ0NFU1MoZXJyKSk7Ci0gICAgaWYgKG1fY29udmVydGVySUNVKQotICAg
ICAgICB1Y252X3NldEZhbGxiYWNrKG1fY29udmVydGVySUNVLCBUUlVFKTsKKyAgICBVRXJyb3JD
b2RlIGVycm9yID0gVV9aRVJPX0VSUk9SOworICAgIG1fY29udmVydGVyID0gSUNVQ29udmVydGVy
UHRyIHsgdWNudl9vcGVuKG1fY2Fub25pY2FsQ29udmVydGVyTmFtZSwgJmVycm9yKSwgdWNudl9j
bG9zZSB9OworICAgIGlmIChtX2NvbnZlcnRlcikKKyAgICAgICAgdWNudl9zZXRGYWxsYmFjayht
X2NvbnZlcnRlci5nZXQoKSwgVFJVRSk7CiB9CiAKLWludCBUZXh0Q29kZWNJQ1U6OmRlY29kZVRv
QnVmZmVyKFVDaGFyKiB0YXJnZXQsIFVDaGFyKiB0YXJnZXRMaW1pdCwgY29uc3QgY2hhciomIHNv
dXJjZSwgY29uc3QgY2hhciogc291cmNlTGltaXQsIGludDMyX3QqIG9mZnNldHMsIGJvb2wgZmx1
c2gsIFVFcnJvckNvZGUmIGVycikKK2ludCBUZXh0Q29kZWNJQ1U6OmRlY29kZVRvQnVmZmVyKFVD
aGFyKiB0YXJnZXQsIFVDaGFyKiB0YXJnZXRMaW1pdCwgY29uc3QgY2hhciomIHNvdXJjZSwgY29u
c3QgY2hhciogc291cmNlTGltaXQsIGludDMyX3QqIG9mZnNldHMsIGJvb2wgZmx1c2gsIFVFcnJv
ckNvZGUmIGVycm9yKQogewogICAgIFVDaGFyKiB0YXJnZXRTdGFydCA9IHRhcmdldDsKLSAgICBl
cnIgPSBVX1pFUk9fRVJST1I7Ci0gICAgdWNudl90b1VuaWNvZGUobV9jb252ZXJ0ZXJJQ1UsICZ0
YXJnZXQsIHRhcmdldExpbWl0LCAmc291cmNlLCBzb3VyY2VMaW1pdCwgb2Zmc2V0cywgZmx1c2gs
ICZlcnIpOworICAgIGVycm9yID0gVV9aRVJPX0VSUk9SOworICAgIHVjbnZfdG9Vbmljb2RlKG1f
Y29udmVydGVyLmdldCgpLCAmdGFyZ2V0LCB0YXJnZXRMaW1pdCwgJnNvdXJjZSwgc291cmNlTGlt
aXQsIG9mZnNldHMsIGZsdXNoLCAmZXJyb3IpOwogICAgIHJldHVybiB0YXJnZXQgLSB0YXJnZXRT
dGFydDsKIH0KIAogY2xhc3MgRXJyb3JDYWxsYmFja1NldHRlciB7CiBwdWJsaWM6Ci0gICAgRXJy
b3JDYWxsYmFja1NldHRlcihVQ29udmVydGVyKiBjb252ZXJ0ZXIsIGJvb2wgc3RvcE9uRXJyb3Ip
CisgICAgRXJyb3JDYWxsYmFja1NldHRlcihVQ29udmVydGVyJiBjb252ZXJ0ZXIsIGJvb2wgc3Rv
cE9uRXJyb3IpCiAgICAgICAgIDogbV9jb252ZXJ0ZXIoY29udmVydGVyKQogICAgICAgICAsIG1f
c2hvdWxkU3RvcE9uRW5jb2RpbmdFcnJvcnMoc3RvcE9uRXJyb3IpCiAgICAgewogICAgICAgICBp
ZiAobV9zaG91bGRTdG9wT25FbmNvZGluZ0Vycm9ycykgewogICAgICAgICAgICAgVUVycm9yQ29k
ZSBlcnIgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAgICAgICB1Y252X3NldFRvVUNhbGxCYWNrKG1f
Y29udmVydGVyLCBVQ05WX1RPX1VfQ0FMTEJBQ0tfU1VCU1RJVFVURSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFVDTlZfU1VCX1NUT1BfT05fSUxMRUdBTCwgJm1fc2F2ZWRBY3Rpb24sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAmbV9zYXZlZENvbnRleHQsICZlcnIpOworICAgICAg
ICAgICAgdWNudl9zZXRUb1VDYWxsQmFjaygmbV9jb252ZXJ0ZXIsIFVDTlZfVE9fVV9DQUxMQkFD
S19TVUJTVElUVVRFLCBVQ05WX1NVQl9TVE9QX09OX0lMTEVHQUwsICZtX3NhdmVkQWN0aW9uLCAm
bV9zYXZlZENvbnRleHQsICZlcnIpOwogICAgICAgICAgICAgQVNTRVJUKGVyciA9PSBVX1pFUk9f
RVJST1IpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjg2LDkgKzI2OCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIFVFcnJvckNvZGUgZXJyID0gVV9aRVJPX0VSUk9SOwogICAgICAgICAgICAgY29u
c3Qgdm9pZCogb2xkQ29udGV4dDsKICAgICAgICAgICAgIFVDb252ZXJ0ZXJUb1VDYWxsYmFjayBv
bGRBY3Rpb247Ci0gICAgICAgICAgICB1Y252X3NldFRvVUNhbGxCYWNrKG1fY29udmVydGVyLCBt
X3NhdmVkQWN0aW9uLAotICAgICAgICAgICAgICAgICAgIG1fc2F2ZWRDb250ZXh0LCAmb2xkQWN0
aW9uLAotICAgICAgICAgICAgICAgICAgICZvbGRDb250ZXh0LCAmZXJyKTsKKyAgICAgICAgICAg
IHVjbnZfc2V0VG9VQ2FsbEJhY2soJm1fY29udmVydGVyLCBtX3NhdmVkQWN0aW9uLCBtX3NhdmVk
Q29udGV4dCwgJm9sZEFjdGlvbiwgJm9sZENvbnRleHQsICZlcnIpOwogICAgICAgICAgICAgQVNT
RVJUKG9sZEFjdGlvbiA9PSBVQ05WX1RPX1VfQ0FMTEJBQ0tfU1VCU1RJVFVURSk7CiAgICAgICAg
ICAgICBBU1NFUlQoIXN0cmNtcChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4ob2xkQ29udGV4dCks
IFVDTlZfU1VCX1NUT1BfT05fSUxMRUdBTCkpOwogICAgICAgICAgICAgQVNTRVJUKGVyciA9PSBV
X1pFUk9fRVJST1IpOwpAQCAtMjk2LDcgKzI3Niw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZh
dGU6Ci0gICAgVUNvbnZlcnRlciogbV9jb252ZXJ0ZXI7CisgICAgVUNvbnZlcnRlciYgbV9jb252
ZXJ0ZXI7CiAgICAgYm9vbCBtX3Nob3VsZFN0b3BPbkVuY29kaW5nRXJyb3JzOwogICAgIGNvbnN0
IHZvaWQqIG1fc2F2ZWRDb250ZXh0OwogICAgIFVDb252ZXJ0ZXJUb1VDYWxsYmFjayBtX3NhdmVk
QWN0aW9uOwpAQCAtMzA1LDE2ICsyODUsMTYgQEAgcHJpdmF0ZToKIFN0cmluZyBUZXh0Q29kZWNJ
Q1U6OmRlY29kZShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwg
Ym9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpCiB7CiAgICAgLy8gR2V0IGEgY29udmVy
dGVyIGZvciB0aGUgcGFzc2VkLWluIGVuY29kaW5nLgotICAgIGlmICghbV9jb252ZXJ0ZXJJQ1Up
IHsKKyAgICBpZiAoIW1fY29udmVydGVyKSB7CiAgICAgICAgIGNyZWF0ZUlDVUNvbnZlcnRlcigp
OwotICAgICAgICBBU1NFUlQobV9jb252ZXJ0ZXJJQ1UpOwotICAgICAgICBpZiAoIW1fY29udmVy
dGVySUNVKSB7CisgICAgICAgIGlmICghbV9jb252ZXJ0ZXIpIHsKICAgICAgICAgICAgIExPR19F
UlJPUigiZXJyb3IgY3JlYXRpbmcgSUNVIGVuY29kZXIgZXZlbiB0aG91Z2ggZW5jb2Rpbmcgd2Fz
IGluIHRhYmxlIik7Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgICAgICBz
YXdFcnJvciA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9CiAgICAg
fQogICAgIAotICAgIEVycm9yQ2FsbGJhY2tTZXR0ZXIgY2FsbGJhY2tTZXR0ZXIobV9jb252ZXJ0
ZXJJQ1UsIHN0b3BPbkVycm9yKTsKKyAgICBFcnJvckNhbGxiYWNrU2V0dGVyIGNhbGxiYWNrU2V0
dGVyKCptX2NvbnZlcnRlciwgc3RvcE9uRXJyb3IpOwogCiAgICAgU3RyaW5nQnVpbGRlciByZXN1
bHQ7CiAKQEAgLTM0MCwxNyArMzIwLDE1IEBAIFN0cmluZyBUZXh0Q29kZWNJQ1U6OmRlY29kZShj
b25zdCBjaGFyKiBieXRlcywgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzCiAKICAg
ICBTdHJpbmcgcmVzdWx0U3RyaW5nID0gcmVzdWx0LnRvU3RyaW5nKCk7CiAKLSAgICAvLyA8aHR0
cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMTQ+CiAgICAgLy8gU2ltcGxp
ZmllZCBDaGluZXNlIHBhZ2VzIHVzZSB0aGUgY29kZSBBM0EwIHRvIG1lYW4gImZ1bGwtd2lkdGgg
c3BhY2UiLCBidXQgSUNVIGRlY29kZXMgaXQgYXMgVStFNUU1LgotICAgIC8vIEZJWE1FOiBzdHJj
YXNlY21wIGlzIGxvY2FsZSBzZW5zaXRpdmUsIHdlIHNob3VsZCBub3QgYmUgdXNpbmcgaXQuCi0g
ICAgaWYgKHN0cmNtcChtX2VuY29kaW5nTmFtZSwgIkdCSyIpID09IDAgfHwgc3RyY2FzZWNtcCht
X2VuY29kaW5nTmFtZSwgImdiMTgwMzAiKSA9PSAwKQorICAgIGlmICghc3RyY21wKG1fZW5jb2Rp
bmdOYW1lLCAiR0JLIikgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobV9lbmNvZGlu
Z05hbWUsICJnYjE4MDMwIikpCiAgICAgICAgIHJlc3VsdFN0cmluZy5yZXBsYWNlKDB4RTVFNSwg
aWRlb2dyYXBoaWNTcGFjZSk7CiAKICAgICByZXR1cm4gcmVzdWx0U3RyaW5nOwogfQogCiAvLyBX
ZSBuZWVkIHRvIGFwcGx5IHRoZXNlIGZhbGxiYWNrcyBvdXJzZWx2ZXMgYXMgdGhleSBhcmUgbm90
IGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgSUNVIGFuZAotLy8gdGhleSB3ZXJlIHByb3ZpZGVkIGJ5
IHRoZSBvbGQgVEVDIGVuY29kaW5nIHBhdGguIE5lZWRlZCB0byBmaXggPHJkYXI6Ly9wcm9ibGVt
LzQ3MDg2ODk+LgorLy8gdGhleSB3ZXJlIHByb3ZpZGVkIGJ5IHRoZSBNYWMgVEVDIGVuY29kaW5n
IHBhdGguIE5lZWRlZCB0byBmaXggPHJkYXI6Ly9wcm9ibGVtLzQ3MDg2ODk+Lgogc3RhdGljIFVD
aGFyIGZhbGxiYWNrRm9yR0JLKFVDaGFyMzIgY2hhcmFjdGVyKQogewogICAgIHN3aXRjaCAoY2hh
cmFjdGVyKSB7CkBAIC0zNjksMTMwICszNDcsMTIyIEBAIHN0YXRpYyBVQ2hhciBmYWxsYmFja0Zv
ckdCSyhVQ2hhcjMyIGNoYXJhY3RlcikKIC8vIEludmFsaWQgY2hhcmFjdGVyIGhhbmRsZXIgd2hl
biB3cml0aW5nIGVzY2FwZWQgZW50aXRpZXMgZm9yIHVucmVwcmVzZW50YWJsZQogLy8gY2hhcmFj
dGVycy4gU2VlIHRoZSBkZWNsYXJhdGlvbiBvZiBUZXh0Q29kZWM6OmVuY29kZSBmb3IgbW9yZS4K
IHN0YXRpYyB2b2lkIHVybEVzY2FwZWRFbnRpdHlDYWxsYmFjayhjb25zdCB2b2lkKiBjb250ZXh0
LCBVQ29udmVydGVyRnJvbVVuaWNvZGVBcmdzKiBmcm9tVUFyZ3MsIGNvbnN0IFVDaGFyKiBjb2Rl
VW5pdHMsIGludDMyX3QgbGVuZ3RoLAotICAgIFVDaGFyMzIgY29kZVBvaW50LCBVQ29udmVydGVy
Q2FsbGJhY2tSZWFzb24gcmVhc29uLCBVRXJyb3JDb2RlKiBlcnIpCisgICAgVUNoYXIzMiBjb2Rl
UG9pbnQsIFVDb252ZXJ0ZXJDYWxsYmFja1JlYXNvbiByZWFzb24sIFVFcnJvckNvZGUqIGVycm9y
KQogewogICAgIGlmIChyZWFzb24gPT0gVUNOVl9VTkFTU0lHTkVEKSB7Ci0gICAgICAgICplcnIg
PSBVX1pFUk9fRVJST1I7Ci0KKyAgICAgICAgKmVycm9yID0gVV9aRVJPX0VSUk9SOwogICAgICAg
ICBVbmVuY29kYWJsZVJlcGxhY2VtZW50QXJyYXkgZW50aXR5OwogICAgICAgICBpbnQgZW50aXR5
TGVuID0gVGV4dENvZGVjOjpnZXRVbmVuY29kYWJsZVJlcGxhY2VtZW50KGNvZGVQb2ludCwgVVJM
RW5jb2RlZEVudGl0aWVzRm9yVW5lbmNvZGFibGVzLCBlbnRpdHkpOwotICAgICAgICB1Y252X2Ni
RnJvbVVXcml0ZUJ5dGVzKGZyb21VQXJncywgZW50aXR5LCBlbnRpdHlMZW4sIDAsIGVycik7Cisg
ICAgICAgIHVjbnZfY2JGcm9tVVdyaXRlQnl0ZXMoZnJvbVVBcmdzLCBlbnRpdHkuZGF0YSgpLCBl
bnRpdHlMZW4sIDAsIGVycm9yKTsKICAgICB9IGVsc2UKLSAgICAgICAgVUNOVl9GUk9NX1VfQ0FM
TEJBQ0tfRVNDQVBFKGNvbnRleHQsIGZyb21VQXJncywgY29kZVVuaXRzLCBsZW5ndGgsIGNvZGVQ
b2ludCwgcmVhc29uLCBlcnIpOworICAgICAgICBVQ05WX0ZST01fVV9DQUxMQkFDS19FU0NBUEUo
Y29udGV4dCwgZnJvbVVBcmdzLCBjb2RlVW5pdHMsIGxlbmd0aCwgY29kZVBvaW50LCByZWFzb24s
IGVycm9yKTsKIH0KIAogLy8gU3Vic3RpdHV0ZXMgc3BlY2lhbCBHQksgY2hhcmFjdGVycywgZXNj
YXBpbmcgYWxsIG90aGVyIHVuYXNzaWduZWQgZW50aXRpZXMuCiBzdGF0aWMgdm9pZCBnYmtDYWxs
YmFja0VzY2FwZShjb25zdCB2b2lkKiBjb250ZXh0LCBVQ29udmVydGVyRnJvbVVuaWNvZGVBcmdz
KiBmcm9tVUFyZ3MsIGNvbnN0IFVDaGFyKiBjb2RlVW5pdHMsIGludDMyX3QgbGVuZ3RoLAotICAg
IFVDaGFyMzIgY29kZVBvaW50LCBVQ29udmVydGVyQ2FsbGJhY2tSZWFzb24gcmVhc29uLCBVRXJy
b3JDb2RlKiBlcnIpIAorICAgIFVDaGFyMzIgY29kZVBvaW50LCBVQ29udmVydGVyQ2FsbGJhY2tS
ZWFzb24gcmVhc29uLCBVRXJyb3JDb2RlKiBlcnJvcikKIHsKICAgICBVQ2hhciBvdXRDaGFyOwog
ICAgIGlmIChyZWFzb24gPT0gVUNOVl9VTkFTU0lHTkVEICYmIChvdXRDaGFyID0gZmFsbGJhY2tG
b3JHQksoY29kZVBvaW50KSkpIHsKICAgICAgICAgY29uc3QgVUNoYXIqIHNvdXJjZSA9ICZvdXRD
aGFyOwotICAgICAgICAqZXJyID0gVV9aRVJPX0VSUk9SOwotICAgICAgICB1Y252X2NiRnJvbVVX
cml0ZVVDaGFycyhmcm9tVUFyZ3MsICZzb3VyY2UsIHNvdXJjZSArIDEsIDAsIGVycik7CisgICAg
ICAgICplcnJvciA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgdWNudl9jYkZyb21VV3JpdGVVQ2hh
cnMoZnJvbVVBcmdzLCAmc291cmNlLCBzb3VyY2UgKyAxLCAwLCBlcnJvcik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgVUNOVl9GUk9NX1VfQ0FMTEJBQ0tfRVNDQVBFKGNvbnRleHQsIGZy
b21VQXJncywgY29kZVVuaXRzLCBsZW5ndGgsIGNvZGVQb2ludCwgcmVhc29uLCBlcnIpOworICAg
IFVDTlZfRlJPTV9VX0NBTExCQUNLX0VTQ0FQRShjb250ZXh0LCBmcm9tVUFyZ3MsIGNvZGVVbml0
cywgbGVuZ3RoLCBjb2RlUG9pbnQsIHJlYXNvbiwgZXJyb3IpOwogfQogCiAvLyBDb21iaW5lcyBi
b3RoIGdia1VybEVzY2FwZWRFbnRpdHlDYWxsYmFjayBhbmQgR0JLIGNoYXJhY3RlciBzdWJzdGl0
dXRpb24uCiBzdGF0aWMgdm9pZCBnYmtVcmxFc2NhcGVkRW50aXR5Q2FsbGFjayhjb25zdCB2b2lk
KiBjb250ZXh0LCBVQ29udmVydGVyRnJvbVVuaWNvZGVBcmdzKiBmcm9tVUFyZ3MsIGNvbnN0IFVD
aGFyKiBjb2RlVW5pdHMsIGludDMyX3QgbGVuZ3RoLAotICAgIFVDaGFyMzIgY29kZVBvaW50LCBV
Q29udmVydGVyQ2FsbGJhY2tSZWFzb24gcmVhc29uLCBVRXJyb3JDb2RlKiBlcnIpIAorICAgIFVD
aGFyMzIgY29kZVBvaW50LCBVQ29udmVydGVyQ2FsbGJhY2tSZWFzb24gcmVhc29uLCBVRXJyb3JD
b2RlKiBlcnJvcikKIHsKICAgICBpZiAocmVhc29uID09IFVDTlZfVU5BU1NJR05FRCkgewogICAg
ICAgICBpZiAoVUNoYXIgb3V0Q2hhciA9IGZhbGxiYWNrRm9yR0JLKGNvZGVQb2ludCkpIHsKICAg
ICAgICAgICAgIGNvbnN0IFVDaGFyKiBzb3VyY2UgPSAmb3V0Q2hhcjsKLSAgICAgICAgICAgICpl
cnIgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAgICAgICB1Y252X2NiRnJvbVVXcml0ZVVDaGFycyhm
cm9tVUFyZ3MsICZzb3VyY2UsIHNvdXJjZSArIDEsIDAsIGVycik7CisgICAgICAgICAgICAqZXJy
b3IgPSBVX1pFUk9fRVJST1I7CisgICAgICAgICAgICB1Y252X2NiRnJvbVVXcml0ZVVDaGFycyhm
cm9tVUFyZ3MsICZzb3VyY2UsIHNvdXJjZSArIDEsIDAsIGVycm9yKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotICAgICAgICB1cmxFc2NhcGVkRW50aXR5Q2FsbGJhY2soY29udGV4
dCwgZnJvbVVBcmdzLCBjb2RlVW5pdHMsIGxlbmd0aCwgY29kZVBvaW50LCByZWFzb24sIGVycik7
CisgICAgICAgIHVybEVzY2FwZWRFbnRpdHlDYWxsYmFjayhjb250ZXh0LCBmcm9tVUFyZ3MsIGNv
ZGVVbml0cywgbGVuZ3RoLCBjb2RlUG9pbnQsIHJlYXNvbiwgZXJyb3IpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIFVDTlZfRlJPTV9VX0NBTExCQUNLX0VTQ0FQRShjb250ZXh0LCBmcm9t
VUFyZ3MsIGNvZGVVbml0cywgbGVuZ3RoLCBjb2RlUG9pbnQsIHJlYXNvbiwgZXJyKTsKKyAgICBV
Q05WX0ZST01fVV9DQUxMQkFDS19FU0NBUEUoY29udGV4dCwgZnJvbVVBcmdzLCBjb2RlVW5pdHMs
IGxlbmd0aCwgY29kZVBvaW50LCByZWFzb24sIGVycm9yKTsKIH0KIAogc3RhdGljIHZvaWQgZ2Jr
Q2FsbGJhY2tTdWJzdGl0dXRlKGNvbnN0IHZvaWQqIGNvbnRleHQsIFVDb252ZXJ0ZXJGcm9tVW5p
Y29kZUFyZ3MqIGZyb21VQXJncywgY29uc3QgVUNoYXIqIGNvZGVVbml0cywgaW50MzJfdCBsZW5n
dGgsCi0gICAgVUNoYXIzMiBjb2RlUG9pbnQsIFVDb252ZXJ0ZXJDYWxsYmFja1JlYXNvbiByZWFz
b24sIFVFcnJvckNvZGUqIGVycikgCisgICAgVUNoYXIzMiBjb2RlUG9pbnQsIFVDb252ZXJ0ZXJD
YWxsYmFja1JlYXNvbiByZWFzb24sIFVFcnJvckNvZGUqIGVycm9yKQogewogICAgIFVDaGFyIG91
dENoYXI7CiAgICAgaWYgKHJlYXNvbiA9PSBVQ05WX1VOQVNTSUdORUQgJiYgKG91dENoYXIgPSBm
YWxsYmFja0ZvckdCSyhjb2RlUG9pbnQpKSkgewogICAgICAgICBjb25zdCBVQ2hhciogc291cmNl
ID0gJm91dENoYXI7Ci0gICAgICAgICplcnIgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAgIHVjbnZf
Y2JGcm9tVVdyaXRlVUNoYXJzKGZyb21VQXJncywgJnNvdXJjZSwgc291cmNlICsgMSwgMCwgZXJy
KTsKKyAgICAgICAgKmVycm9yID0gVV9aRVJPX0VSUk9SOworICAgICAgICB1Y252X2NiRnJvbVVX
cml0ZVVDaGFycyhmcm9tVUFyZ3MsICZzb3VyY2UsIHNvdXJjZSArIDEsIDAsIGVycm9yKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBVQ05WX0ZST01fVV9DQUxMQkFDS19TVUJTVElUVVRF
KGNvbnRleHQsIGZyb21VQXJncywgY29kZVVuaXRzLCBsZW5ndGgsIGNvZGVQb2ludCwgcmVhc29u
LCBlcnIpOworICAgIFVDTlZfRlJPTV9VX0NBTExCQUNLX1NVQlNUSVRVVEUoY29udGV4dCwgZnJv
bVVBcmdzLCBjb2RlVW5pdHMsIGxlbmd0aCwgY29kZVBvaW50LCByZWFzb24sIGVycm9yKTsKIH0K
IAotQ1N0cmluZyBUZXh0Q29kZWNJQ1U6OmVuY29kZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
c2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZyBoYW5kbGluZykKK1ZlY3Rvcjx1aW50
OF90PiBUZXh0Q29kZWNJQ1U6OmVuY29kZShTdHJpbmdWaWV3IHN0cmluZywgVW5lbmNvZGFibGVI
YW5kbGluZyBoYW5kbGluZykKIHsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuICIi
OworICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9OwogCi0gICAg
aWYgKCFtX2NvbnZlcnRlcklDVSkKKyAgICBpZiAoIW1fY29udmVydGVyKSB7CiAgICAgICAgIGNy
ZWF0ZUlDVUNvbnZlcnRlcigpOwotICAgIGlmICghbV9jb252ZXJ0ZXJJQ1UpCi0gICAgICAgIHJl
dHVybiBDU3RyaW5nKCk7CisgICAgICAgIGlmICghbV9jb252ZXJ0ZXIpCisgICAgICAgICAgICBy
ZXR1cm4geyB9OworICAgIH0KIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc2VlIGlmIHRoZXJl
IGlzICJmb3JjZSBBU0NJSSByYW5nZSIgbW9kZSBpbiBJQ1U7CiAgICAgLy8gdW50aWwgdGhlbiwg
d2UgY2hhbmdlIHRoZSBiYWNrc2xhc2ggaW50byBhIHllbiBzaWduLgogICAgIC8vIEVuY29kaW5n
IHdpbGwgY2hhbmdlIHRoZSB5ZW4gc2lnbiBiYWNrIGludG8gYSBiYWNrc2xhc2guCi0gICAgVmVj
dG9yPFVDaGFyPiBjb3B5OwotICAgIGNvbnN0IFVDaGFyKiBzb3VyY2UgPSBjaGFyYWN0ZXJzOwor
ICAgIFN0cmluZyBjb3B5OwogICAgIGlmIChzaG91bGRTaG93QmFja3NsYXNoQXNDdXJyZW5jeVN5
bWJvbEluKG1fZW5jb2RpbmdOYW1lKSkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoY2hhcmFjdGVyc1tpXSA9PSAnXFwnKSB7
Ci0gICAgICAgICAgICAgICAgY29weS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7Ci0g
ICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBpOyArK2opCi0gICAgICAgICAg
ICAgICAgICAgIGNvcHkudW5jaGVja2VkQXBwZW5kKGNoYXJhY3RlcnNbal0pOwotICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGogPSBpOyBqIDwgbGVuZ3RoOyArK2opIHsKLSAgICAgICAgICAg
ICAgICAgICAgVUNoYXIgY2hhcmFjdGVyID0gY2hhcmFjdGVyc1tqXTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGNoYXJhY3RlciA9PSAnXFwnKQotICAgICAgICAgICAgICAgICAgICAgICAgY2hh
cmFjdGVyID0geWVuU2lnbjsKLSAgICAgICAgICAgICAgICAgICAgY29weS51bmNoZWNrZWRBcHBl
bmQoY2hhcmFjdGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc291cmNl
ID0gY29weS5kYXRhKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KKyAgICAgICAgY29weSA9IHN0cmluZy50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCk7
CisgICAgICAgIGNvcHkucmVwbGFjZSgnXFwnLCB5ZW5TaWduKTsKKyAgICAgICAgc3RyaW5nID0g
Y29weTsKICAgICB9Ci0gICAgY29uc3QgVUNoYXIqIHNvdXJjZUxpbWl0ID0gc291cmNlICsgbGVu
Z3RoOwotCi0gICAgVUVycm9yQ29kZSBlcnIgPSBVX1pFUk9fRVJST1I7CiAKKyAgICBVRXJyb3JD
b2RlIGVycm9yOwogICAgIHN3aXRjaCAoaGFuZGxpbmcpIHsKLSAgICAgICAgY2FzZSBRdWVzdGlv
bk1hcmtzRm9yVW5lbmNvZGFibGVzOgotICAgICAgICAgICAgdWNudl9zZXRTdWJzdENoYXJzKG1f
Y29udmVydGVySUNVLCAiPyIsIDEsICZlcnIpOwotICAgICAgICAgICAgdWNudl9zZXRGcm9tVUNh
bGxCYWNrKG1fY29udmVydGVySUNVLCBtX25lZWRzR0JLRmFsbGJhY2tzID8gZ2JrQ2FsbGJhY2tT
dWJzdGl0dXRlIDogVUNOVl9GUk9NX1VfQ0FMTEJBQ0tfU1VCU1RJVFVURSwgMCwgMCwgMCwgJmVy
cik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFbnRpdGllc0ZvclVuZW5jb2Rh
YmxlczoKLSAgICAgICAgICAgIHVjbnZfc2V0RnJvbVVDYWxsQmFjayhtX2NvbnZlcnRlcklDVSwg
bV9uZWVkc0dCS0ZhbGxiYWNrcyA/IGdia0NhbGxiYWNrRXNjYXBlIDogVUNOVl9GUk9NX1VfQ0FM
TEJBQ0tfRVNDQVBFLCBVQ05WX0VTQ0FQRV9YTUxfREVDLCAwLCAwLCAmZXJyKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVSTEVuY29kZWRFbnRpdGllc0ZvclVuZW5jb2RhYmxl
czoKLSAgICAgICAgICAgIHVjbnZfc2V0RnJvbVVDYWxsQmFjayhtX2NvbnZlcnRlcklDVSwgbV9u
ZWVkc0dCS0ZhbGxiYWNrcyA/IGdia1VybEVzY2FwZWRFbnRpdHlDYWxsYWNrIDogdXJsRXNjYXBl
ZEVudGl0eUNhbGxiYWNrLCAwLCAwLCAwLCAmZXJyKTsKLSAgICAgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUXVlc3Rpb25NYXJrc0ZvclVuZW5jb2RhYmxlczoKKyAgICAgICAgZXJyb3IgPSBVX1pF
Uk9fRVJST1I7CisgICAgICAgIHVjbnZfc2V0U3Vic3RDaGFycyhtX2NvbnZlcnRlci5nZXQoKSwg
Ij8iLCAxLCAmZXJyb3IpOworICAgICAgICBpZiAoVV9GQUlMVVJFKGVycm9yKSkKKyAgICAgICAg
ICAgIHJldHVybiB7IH07CisgICAgICAgIGVycm9yID0gVV9aRVJPX0VSUk9SOworICAgICAgICB1
Y252X3NldEZyb21VQ2FsbEJhY2sobV9jb252ZXJ0ZXIuZ2V0KCksIG1fbmVlZHNHQktGYWxsYmFj
a3MgPyBnYmtDYWxsYmFja1N1YnN0aXR1dGUgOiBVQ05WX0ZST01fVV9DQUxMQkFDS19TVUJTVElU
VVRFLCAwLCAwLCAwLCAmZXJyb3IpOworICAgICAgICBpZiAoVV9GQUlMVVJFKGVycm9yKSkKKyAg
ICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRW50aXRpZXNG
b3JVbmVuY29kYWJsZXM6CisgICAgICAgIGVycm9yID0gVV9aRVJPX0VSUk9SOworICAgICAgICB1
Y252X3NldEZyb21VQ2FsbEJhY2sobV9jb252ZXJ0ZXIuZ2V0KCksIG1fbmVlZHNHQktGYWxsYmFj
a3MgPyBnYmtDYWxsYmFja0VzY2FwZSA6IFVDTlZfRlJPTV9VX0NBTExCQUNLX0VTQ0FQRSwgVUNO
Vl9FU0NBUEVfWE1MX0RFQywgMCwgMCwgJmVycm9yKTsKKyAgICAgICAgaWYgKFVfRkFJTFVSRShl
cnJvcikpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFVSTEVuY29kZWRFbnRpdGllc0ZvclVuZW5jb2RhYmxlczoKKyAgICAgICAgZXJyb3IgPSBVX1pF
Uk9fRVJST1I7CisgICAgICAgIHVjbnZfc2V0RnJvbVVDYWxsQmFjayhtX2NvbnZlcnRlci5nZXQo
KSwgbV9uZWVkc0dCS0ZhbGxiYWNrcyA/IGdia1VybEVzY2FwZWRFbnRpdHlDYWxsYWNrIDogdXJs
RXNjYXBlZEVudGl0eUNhbGxiYWNrLCAwLCAwLCAwLCAmZXJyb3IpOworICAgICAgICBpZiAoVV9G
QUlMVVJFKGVycm9yKSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIGJyZWFrOwog
ICAgIH0KIAotICAgIEFTU0VSVChVX1NVQ0NFU1MoZXJyKSk7Ci0gICAgaWYgKFVfRkFJTFVSRShl
cnIpKQotICAgICAgICByZXR1cm4gQ1N0cmluZygpOworICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzID0gc3RyaW5nLnVwY29udmVydGVkQ2hhcmFjdGVycygpOworICAgIGF1dG8qIHNvdXJj
ZSA9IHVwY29udmVydGVkQ2hhcmFjdGVycy5nZXQoKTsKKyAgICBhdXRvKiBzb3VyY2VMaW1pdCA9
IHNvdXJjZSArIHN0cmluZy5sZW5ndGgoKTsKIAotICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7Ci0g
ICAgc2l6ZV90IHNpemUgPSAwOworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7CiAgICAgZG8g
ewogICAgICAgICBjaGFyIGJ1ZmZlcltDb252ZXJzaW9uQnVmZmVyU2l6ZV07CiAgICAgICAgIGNo
YXIqIHRhcmdldCA9IGJ1ZmZlcjsKICAgICAgICAgY2hhciogdGFyZ2V0TGltaXQgPSB0YXJnZXQg
KyBDb252ZXJzaW9uQnVmZmVyU2l6ZTsKLSAgICAgICAgZXJyID0gVV9aRVJPX0VSUk9SOwotICAg
ICAgICB1Y252X2Zyb21Vbmljb2RlKG1fY29udmVydGVySUNVLCAmdGFyZ2V0LCB0YXJnZXRMaW1p
dCwgJnNvdXJjZSwgc291cmNlTGltaXQsIDAsIHRydWUsICZlcnIpOwotICAgICAgICBzaXplX3Qg
Y291bnQgPSB0YXJnZXQgLSBidWZmZXI7Ci0gICAgICAgIHJlc3VsdC5ncm93KHNpemUgKyBjb3Vu
dCk7Ci0gICAgICAgIG1lbWNweShyZXN1bHQuZGF0YSgpICsgc2l6ZSwgYnVmZmVyLCBjb3VudCk7
Ci0gICAgICAgIHNpemUgKz0gY291bnQ7Ci0gICAgfSB3aGlsZSAoZXJyID09IFVfQlVGRkVSX09W
RVJGTE9XX0VSUk9SKTsKLQotICAgIHJldHVybiBDU3RyaW5nKHJlc3VsdC5kYXRhKCksIHNpemUp
OworICAgICAgICBlcnJvciA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgdWNudl9mcm9tVW5pY29k
ZShtX2NvbnZlcnRlci5nZXQoKSwgJnRhcmdldCwgdGFyZ2V0TGltaXQsICZzb3VyY2UsIHNvdXJj
ZUxpbWl0LCAwLCB0cnVlLCAmZXJyb3IpOworICAgICAgICByZXN1bHQuYXBwZW5kKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksIHRhcmdldCAtIGJ1ZmZlcik7CisgICAgfSB3aGls
ZSAoZXJyb3IgPT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpOworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRDb2RlY0lDVS5oCmluZGV4IDBjMTc5OGM5YmY3YWU1M2ViN2MzN2RlNWY0MjhjNGIx
N2U3NWQwNWEuLmFiZmQ3MDk4NjBlMTJlMWQyZDA4OGQ5MzliYjUxMDcxZWE5ZDYxNTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuaApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDcsIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQ
cm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI0LDU0ICsy
NCw0NSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBUZXh0Q29kZWNJQ1VfaAot
I2RlZmluZSBUZXh0Q29kZWNJQ1VfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJUZXh0Q29k
ZWMuaCIKLSNpbmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgotCi10eXBlZGVmIHN0cnVjdCBVQ29u
dmVydGVyIFVDb252ZXJ0ZXI7CisjaW5jbHVkZSA8dW5pY29kZS91Y252Lmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIFRleHRDb2RlY0lDVSA6IHB1YmxpYyBUZXh0Q29kZWMg
ewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxUZXh0Q29kZWM+
IGNyZWF0ZShjb25zdCBUZXh0RW5jb2RpbmcmLCBjb25zdCB2b2lkKiBhZGRpdGlvbmFsRGF0YSk7
Cit1c2luZyBJQ1VDb252ZXJ0ZXJQdHIgPSBzdGQ6OnVuaXF1ZV9wdHI8VUNvbnZlcnRlciwgdm9p
ZCAoKikoVUNvbnZlcnRlciopPjsKIAotICAgICAgICBUZXh0Q29kZWNJQ1UoY29uc3QgY2hhciog
ZW5jb2RpbmcsIGNvbnN0IGNoYXIqIGNhbm9uaWNhbENvbnZlcnRlck5hbWUpOworY2xhc3MgVGV4
dENvZGVjSUNVIDogcHVibGljIFRleHRDb2RlYyB7CitwdWJsaWM6CisgICAgVGV4dENvZGVjSUNV
KGNvbnN0IGNoYXIqIGVuY29kaW5nLCBjb25zdCBjaGFyKiBjYW5vbmljYWxDb252ZXJ0ZXJOYW1l
KTsKKyAgICB2aXJ0dWFsIH5UZXh0Q29kZWNJQ1UoKTsKIAotICAgICAgICBzdGF0aWMgdm9pZCBy
ZWdpc3RlckVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyKTsKLSAgICAgICAgc3Rh
dGljIHZvaWQgcmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyKTsKKyAgICBzdGF0aWMg
dm9pZCByZWdpc3RlckVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyKTsKKyAgICBz
dGF0aWMgdm9pZCByZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIpOwogCi0gICAgICAg
IHZpcnR1YWwgflRleHRDb2RlY0lDVSgpOworcHJpdmF0ZToKKyAgICBTdHJpbmcgZGVjb2RlKGNv
bnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBi
b29sJiBzYXdFcnJvcikgZmluYWw7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZShTdHJpbmdW
aWV3LCBVbmVuY29kYWJsZUhhbmRsaW5nKSBmaW5hbDsKIAotICAgIHByaXZhdGU6Ci0gICAgICAg
IFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJv
b2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9yKSBvdmVycmlkZTsKLSAgICAgICAgQ1N0cmlu
ZyBlbmNvZGUoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5n
KSBvdmVycmlkZTsKKyAgICB2b2lkIGNyZWF0ZUlDVUNvbnZlcnRlcigpIGNvbnN0OworICAgIHZv
aWQgcmVsZWFzZUlDVUNvbnZlcnRlcigpIGNvbnN0OworICAgIGJvb2wgbmVlZHNHQktGYWxsYmFj
a3MoKSBjb25zdCB7IHJldHVybiBtX25lZWRzR0JLRmFsbGJhY2tzOyB9CisgICAgdm9pZCBzZXRO
ZWVkc0dCS0ZhbGxiYWNrcyhib29sIG5lZWRzRmFsbGJhY2tzKSB7IG1fbmVlZHNHQktGYWxsYmFj
a3MgPSBuZWVkc0ZhbGxiYWNrczsgfQogCi0gICAgICAgIHZvaWQgY3JlYXRlSUNVQ29udmVydGVy
KCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgcmVsZWFzZUlDVUNvbnZlcnRlcigpIGNvbnN0OwotICAg
ICAgICBib29sIG5lZWRzR0JLRmFsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc0dCS0Zh
bGxiYWNrczsgfQotICAgICAgICB2b2lkIHNldE5lZWRzR0JLRmFsbGJhY2tzKGJvb2wgbmVlZHNG
YWxsYmFja3MpIHsgbV9uZWVkc0dCS0ZhbGxiYWNrcyA9IG5lZWRzRmFsbGJhY2tzOyB9Ci0gICAg
ICAgIAotICAgICAgICBpbnQgZGVjb2RlVG9CdWZmZXIoVUNoYXIqIGJ1ZmZlciwgVUNoYXIqIGJ1
ZmZlckxpbWl0LCBjb25zdCBjaGFyKiYgc291cmNlLAotICAgICAgICAgICAgY29uc3QgY2hhciog
c291cmNlTGltaXQsIGludDMyX3QqIG9mZnNldHMsIGJvb2wgZmx1c2gsIFVFcnJvckNvZGUmIGVy
cik7CisgICAgaW50IGRlY29kZVRvQnVmZmVyKFVDaGFyKiBidWZmZXIsIFVDaGFyKiBidWZmZXJM
aW1pdCwgY29uc3QgY2hhciomIHNvdXJjZSwgY29uc3QgY2hhciogc291cmNlTGltaXQsIGludDMy
X3QqIG9mZnNldHMsIGJvb2wgZmx1c2gsIFVFcnJvckNvZGUmKTsKIAotICAgICAgICBjb25zdCBj
aGFyKiBjb25zdCBtX2VuY29kaW5nTmFtZTsKLSAgICAgICAgY29uc3QgY2hhciogY29uc3QgbV9j
YW5vbmljYWxDb252ZXJ0ZXJOYW1lOwotICAgICAgICBtdXRhYmxlIFVDb252ZXJ0ZXIqIG1fY29u
dmVydGVySUNVOwotICAgICAgICBtdXRhYmxlIGJvb2wgbV9uZWVkc0dCS0ZhbGxiYWNrczsKLSAg
ICB9OworICAgIGNvbnN0IGNoYXIqIGNvbnN0IG1fZW5jb2RpbmdOYW1lOworICAgIGNvbnN0IGNo
YXIqIGNvbnN0IG1fY2Fub25pY2FsQ29udmVydGVyTmFtZTsKKyAgICBtdXRhYmxlIElDVUNvbnZl
cnRlclB0ciBtX2NvbnZlcnRlciB7IG51bGxwdHIsIHVjbnZfY2xvc2UgfTsKKyAgICBtdXRhYmxl
IGJvb2wgbV9uZWVkc0dCS0ZhbGxiYWNrcyB7IGZhbHNlIH07Cit9OwogCi0gICAgc3RydWN0IElD
VUNvbnZlcnRlcldyYXBwZXIgewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJQ1VDb252
ZXJ0ZXJXcmFwcGVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAg
ICAgICBJQ1VDb252ZXJ0ZXJXcmFwcGVyKCkgOiBjb252ZXJ0ZXIoMCkgeyB9Ci0gICAgICAgIH5J
Q1VDb252ZXJ0ZXJXcmFwcGVyKCk7CitzdHJ1Y3QgSUNVQ29udmVydGVyV3JhcHBlciB7CisgICAg
SUNVQ29udmVydGVyUHRyIGNvbnZlcnRlciB7IG51bGxwdHIsIHVjbnZfY2xvc2UgfTsKIAotICAg
ICAgICBVQ29udmVydGVyKiBjb252ZXJ0ZXI7Ci0gICAgfTsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIFRleHRD
b2RlY0lDVV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRD
b2RlY0xhdGluMS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xh
dGluMS5jcHAKaW5kZXggMDdhNmQxNjgzOWRhZWQ1OWM4ZmM1Yjg4MWU4ZWQ0ZWQ2YWU1NTk5NC4u
ZmRhNzhlMTc0NWRhNzcyNjAxZGFmMTNiNGJlNjUyYjBjZDg3MWEzYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
Nyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiVGV4dENvZGVjTGF0aW4xLmgiCiAKICNpbmNsdWRlICJU
ZXh0Q29kZWNBU0NJSUZhc3RQYXRoLmgiCisjaW5jbHVkZSA8YXJyYXk+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1ZmZlci5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtMzUsNyArMzYsNyBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIFdURjsKIAotc3RhdGljIGNvbnN0IFVDaGFyIHRh
YmxlWzI1Nl0gPSB7CitzdGF0aWMgY29uc3QgVUNoYXIgbGF0aW4xQ29udmVyc2lvblRhYmxlWzI1
Nl0gPSB7CiAgICAgMHgwMDAwLCAweDAwMDEsIDB4MDAwMiwgMHgwMDAzLCAweDAwMDQsIDB4MDAw
NSwgMHgwMDA2LCAweDAwMDcsIC8vIDAwLTA3CiAgICAgMHgwMDA4LCAweDAwMDksIDB4MDAwQSwg
MHgwMDBCLCAweDAwMEMsIDB4MDAwRCwgMHgwMDBFLCAweDAwMEYsIC8vIDA4LTBGCiAgICAgMHgw
MDEwLCAweDAwMTEsIDB4MDAxMiwgMHgwMDEzLCAweDAwMTQsIDB4MDAxNSwgMHgwMDE2LCAweDAw
MTcsIC8vIDEwLTE3CkBAIC05MiwxNCArOTMsMTEgQEAgdm9pZCBUZXh0Q29kZWNMYXRpbjE6OnJl
Z2lzdGVyRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQogICAg
IHJlZ2lzdHJhcigieC1jcDEyNTIiLCAid2luZG93cy0xMjUyIik7CiB9CiAKLXN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8VGV4dENvZGVjPiBuZXdTdHJlYW1pbmdUZXh0RGVjb2RlcldpbmRvd3NMYXRp
bjEoY29uc3QgVGV4dEVuY29kaW5nJiwgY29uc3Qgdm9pZCopCi17Ci0gICAgcmV0dXJuIHN0ZDo6
bWFrZV91bmlxdWU8VGV4dENvZGVjTGF0aW4xPigpOwotfQotCiB2b2lkIFRleHRDb2RlY0xhdGlu
MTo6cmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKIHsKLSAgICBy
ZWdpc3RyYXIoIndpbmRvd3MtMTI1MiIsIG5ld1N0cmVhbWluZ1RleHREZWNvZGVyV2luZG93c0xh
dGluMSwgMCk7CisgICAgcmVnaXN0cmFyKCJ3aW5kb3dzLTEyNTIiLCBbXSB7CisgICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPFRleHRDb2RlY0xhdGluMT4oKTsKKyAgICB9KTsKIH0KIAog
U3RyaW5nIFRleHRDb2RlY0xhdGluMTo6ZGVjb2RlKGNvbnN0IGNoYXIqIGJ5dGVzLCBzaXplX3Qg
bGVuZ3RoLCBib29sLCBib29sLCBib29sJikKQEAgLTEzOSwxMCArMTM3LDEwIEBAIFN0cmluZyBU
ZXh0Q29kZWNMYXRpbjE6OmRlY29kZShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90IGxlbmd0aCwg
Ym9vbCwgYm9vbCwgYm9vCiAgICAgICAgICAgICAqZGVzdGluYXRpb24gPSAqc291cmNlOwogICAg
ICAgICB9IGVsc2UgewogdXNlTG9va3VwVGFibGU6Ci0gICAgICAgICAgICBpZiAodGFibGVbKnNv
dXJjZV0gPiAweGZmKQorICAgICAgICAgICAgaWYgKGxhdGluMUNvbnZlcnNpb25UYWJsZVsqc291
cmNlXSA+IDB4ZmYpCiAgICAgICAgICAgICAgICAgZ290byB1cENvbnZlcnRUbzE2Qml0OwogCi0g
ICAgICAgICAgICAqZGVzdGluYXRpb24gPSB0YWJsZVsqc291cmNlXTsKKyAgICAgICAgICAgICpk
ZXN0aW5hdGlvbiA9IGxhdGluMUNvbnZlcnNpb25UYWJsZVsqc291cmNlXTsKICAgICAgICAgfQog
CiAgICAgICAgICsrc291cmNlOwpAQCAtMTY1LDcgKzE2Myw3IEBAIHVwQ29udmVydFRvMTZCaXQ6
CiAgICAgICAgICpkZXN0aW5hdGlvbjE2KysgPSAqcHRyOCsrOwogCiAgICAgLy8gSGFuZGxlIHRo
ZSBjaGFyYWN0ZXIgdGhhdCB0cmlnZ2VyZWQgdGhlIDE2IGJpdCBwYXRoCi0gICAgKmRlc3RpbmF0
aW9uMTYgPSB0YWJsZVsqc291cmNlXTsKKyAgICAqZGVzdGluYXRpb24xNiA9IGxhdGluMUNvbnZl
cnNpb25UYWJsZVsqc291cmNlXTsKICAgICArK3NvdXJjZTsKICAgICArK2Rlc3RpbmF0aW9uMTY7
CiAKQEAgLTE5NCw3ICsxOTIsNyBAQCB1cENvbnZlcnRUbzE2Qml0OgogICAgICAgICAgICAgKmRl
c3RpbmF0aW9uMTYgPSAqc291cmNlOwogICAgICAgICB9IGVsc2UgewogdXNlTG9va3VwVGFibGUx
NjoKLSAgICAgICAgICAgICpkZXN0aW5hdGlvbjE2ID0gdGFibGVbKnNvdXJjZV07CisgICAgICAg
ICAgICAqZGVzdGluYXRpb24xNiA9IGxhdGluMUNvbnZlcnNpb25UYWJsZVsqc291cmNlXTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgKytzb3VyY2U7CkBAIC0yMDQsNTggKzIwMiw1MSBA
QCB1c2VMb29rdXBUYWJsZTE2OgogICAgIHJldHVybiByZXN1bHQxNjsKIH0KIAotc3RhdGljIENT
dHJpbmcgZW5jb2RlQ29tcGxleFdpbmRvd3NMYXRpbjEoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcgaGFuZGxpbmcpCitzdGF0aWMgVmVj
dG9yPHVpbnQ4X3Q+IGVuY29kZUNvbXBsZXhXaW5kb3dzTGF0aW4xKFN0cmluZ1ZpZXcgc3RyaW5n
LCBVbmVuY29kYWJsZUhhbmRsaW5nIGhhbmRsaW5nKQogewotICAgIFZlY3RvcjxjaGFyPiByZXN1
bHQobGVuZ3RoKTsKLSAgICBjaGFyKiBieXRlcyA9IHJlc3VsdC5kYXRhKCk7CisgICAgVmVjdG9y
PHVpbnQ4X3Q+IHJlc3VsdDsKIAotICAgIHNpemVfdCByZXN1bHRMZW5ndGggPSAwOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyApIHsKLSAgICAgICAgVUNoYXIzMiBjOwotICAg
ICAgICBVMTZfTkVYVChjaGFyYWN0ZXJzLCBpLCBsZW5ndGgsIGMpOwotICAgICAgICB1bnNpZ25l
ZCBjaGFyIGIgPSBjOworICAgIGZvciAoYXV0byBjaGFyYWN0ZXIgOiBzdHJpbmcuY29kZVBvaW50
cygpKSB7CisgICAgICAgIHVpbnQ4X3QgYiA9IGNoYXJhY3RlcjsKICAgICAgICAgLy8gRG8gYW4g
ZWZmaWNpZW50IGNoZWNrIHRvIGRldGVjdCBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gMDAtN0YgYW5k
IEEwLUZGLgotICAgICAgICBpZiAoYiAhPSBjIHx8IChjICYgMHhFMCkgPT0gMHg4MCkgeworICAg
ICAgICBpZiAoYiAhPSBjaGFyYWN0ZXIgfHwgKGNoYXJhY3RlciAmIDB4RTApID09IDB4ODApIHsK
ICAgICAgICAgICAgIC8vIExvb2sgZm9yIGEgd2F5IHRvIGVuY29kZSB0aGlzIHdpdGggV2luZG93
cyBMYXRpbi0xLgotICAgICAgICAgICAgZm9yIChiID0gMHg4MDsgYiA8IDB4QTA7ICsrYikKLSAg
ICAgICAgICAgICAgICBpZiAodGFibGVbYl0gPT0gYykKKyAgICAgICAgICAgIGZvciAoYiA9IDB4
ODA7IGIgPCAweEEwOyArK2IpIHsKKyAgICAgICAgICAgICAgICBpZiAobGF0aW4xQ29udmVyc2lv
blRhYmxlW2JdID09IGNoYXJhY3RlcikKICAgICAgICAgICAgICAgICAgICAgZ290byBnb3RCeXRl
OworICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gTm8gd2F5IHRvIGVuY29kZSB0aGlzIGNo
YXJhY3RlciB3aXRoIFdpbmRvd3MgTGF0aW4tMS4KICAgICAgICAgICAgIFVuZW5jb2RhYmxlUmVw
bGFjZW1lbnRBcnJheSByZXBsYWNlbWVudDsKLSAgICAgICAgICAgIGludCByZXBsYWNlbWVudExl
bmd0aCA9IFRleHRDb2RlYzo6Z2V0VW5lbmNvZGFibGVSZXBsYWNlbWVudChjLCBoYW5kbGluZywg
cmVwbGFjZW1lbnQpOwotICAgICAgICAgICAgcmVzdWx0Lmdyb3cocmVzdWx0TGVuZ3RoICsgcmVw
bGFjZW1lbnRMZW5ndGggKyBsZW5ndGggLSBpKTsKLSAgICAgICAgICAgIGJ5dGVzID0gcmVzdWx0
LmRhdGEoKTsKLSAgICAgICAgICAgIG1lbWNweShieXRlcyArIHJlc3VsdExlbmd0aCwgcmVwbGFj
ZW1lbnQsIHJlcGxhY2VtZW50TGVuZ3RoKTsKLSAgICAgICAgICAgIHJlc3VsdExlbmd0aCArPSBy
ZXBsYWNlbWVudExlbmd0aDsKKyAgICAgICAgICAgIGludCByZXBsYWNlbWVudExlbmd0aCA9IFRl
eHRDb2RlYzo6Z2V0VW5lbmNvZGFibGVSZXBsYWNlbWVudChjaGFyYWN0ZXIsIGhhbmRsaW5nLCBy
ZXBsYWNlbWVudCk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJlcGxhY2VtZW50LmRhdGEo
KSwgcmVwbGFjZW1lbnRMZW5ndGgpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0K
ICAgICBnb3RCeXRlOgotICAgICAgICBieXRlc1tyZXN1bHRMZW5ndGgrK10gPSBiOworICAgICAg
ICByZXN1bHQuYXBwZW5kKGIpOwogICAgIH0KIAotICAgIHJldHVybiBDU3RyaW5nKGJ5dGVzLCBy
ZXN1bHRMZW5ndGgpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUNTdHJpbmcgVGV4dENvZGVj
TGF0aW4xOjplbmNvZGUoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFVu
ZW5jb2RhYmxlSGFuZGxpbmcgaGFuZGxpbmcpCitWZWN0b3I8dWludDhfdD4gVGV4dENvZGVjTGF0
aW4xOjplbmNvZGUoU3RyaW5nVmlldyBzdHJpbmcsIFVuZW5jb2RhYmxlSGFuZGxpbmcgaGFuZGxp
bmcpCiB7CiAgICAgewotICAgICAgICBjaGFyKiBieXRlczsKLSAgICAgICAgQ1N0cmluZyBzdHJp
bmcgPSBDU3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKGxlbmd0aCwgYnl0ZXMpOworICAgICAgICBW
ZWN0b3I8dWludDhfdD4gcmVzdWx0KHN0cmluZy5sZW5ndGgoKSk7CisgICAgICAgIGF1dG8qIGJ5
dGVzID0gcmVzdWx0LmRhdGEoKTsKIAotICAgICAgICAvLyBDb252ZXJ0IHRoZSBzdHJpbmcgYSBm
YXN0IHdheSBhbmQgc2ltdWx0YW5lb3VzbHkgZG8gYW4gZWZmaWNpZW50IGNoZWNrIHRvIHNlZSBp
ZiBpdCdzIGFsbCBBU0NJSS4KKyAgICAgICAgLy8gQ29udmVydCBhbmQgc2ltdWx0YW5lb3VzbHkg
ZG8gYSBjaGVjayB0byBzZWUgaWYgaXQncyBhbGwgQVNDSUkuCiAgICAgICAgIFVDaGFyIG9yZWQg
PSAwOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgICAgICBVQ2hhciBjID0gY2hhcmFjdGVyc1tpXTsKLSAgICAgICAgICAgIGJ5dGVzW2ldID0g
YzsKLSAgICAgICAgICAgIG9yZWQgfD0gYzsKKyAgICAgICAgZm9yIChhdXRvIGNoYXJhY3RlciA6
IHN0cmluZy5jb2RlVW5pdHMoKSkgeworICAgICAgICAgICAgKmJ5dGVzKysgPSBjaGFyYWN0ZXI7
CisgICAgICAgICAgICBvcmVkIHw9IGNoYXJhY3RlcjsKICAgICAgICAgfQogCiAgICAgICAgIGlm
ICghKG9yZWQgJiAweEZGODApKQotICAgICAgICAgICAgcmV0dXJuIHN0cmluZzsKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgLy8gSWYgaXQgd2Fzbid0IGFsbCBBU0NJ
SSwgY2FsbCB0aGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIG1vcmUtY29tcGxleCBjYXNlcy4KLSAg
ICByZXR1cm4gZW5jb2RlQ29tcGxleFdpbmRvd3NMYXRpbjEoY2hhcmFjdGVycywgbGVuZ3RoLCBo
YW5kbGluZyk7CisgICAgcmV0dXJuIGVuY29kZUNvbXBsZXhXaW5kb3dzTGF0aW4xKHN0cmluZywg
aGFuZGxpbmcpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuaAppbmRleCA5ZDA4YWEzZjU5NzRlOTYy
YTE1NDFkMDNlZDc5ZGY5YmNhMmRlNDIxLi43NGFiYzc2YWMzZDBkODc5OTAzZTNjNDIwZWQ2ZThh
NDc0Mzc2MjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRD
b2RlY0xhdGluMS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVj
TGF0aW4xLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTIzLDIyICsyMywyMSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAot
I2lmbmRlZiBUZXh0Q29kZWNMYXRpbjFfaAotI2RlZmluZSBUZXh0Q29kZWNMYXRpbjFfaAorI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJUZXh0Q29kZWMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi0gICAgY2xhc3MgVGV4dENvZGVjTGF0aW4xIDogcHVibGljIFRleHRDb2RlYyB7Ci0gICAg
cHVibGljOgotICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckVuY29kaW5nTmFtZXMoRW5jb2Rp
bmdOYW1lUmVnaXN0cmFyKTsKLSAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJDb2RlY3MoVGV4
dENvZGVjUmVnaXN0cmFyKTsKK2NsYXNzIFRleHRDb2RlY0xhdGluMSBmaW5hbCA6IHB1YmxpYyBU
ZXh0Q29kZWMgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRW5jb2RpbmdOYW1l
cyhFbmNvZGluZ05hbWVSZWdpc3RyYXIpOworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ29kZWNz
KFRleHRDb2RlY1JlZ2lzdHJhcik7CiAKLSAgICAgICAgU3RyaW5nIGRlY29kZShjb25zdCBjaGFy
Kiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3
RXJyb3IpIG92ZXJyaWRlOwotICAgICAgICBDU3RyaW5nIGVuY29kZShjb25zdCBVQ2hhciosIHNp
emVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcpIG92ZXJyaWRlOwotICAgIH07Citwcml2
YXRlOgorICAgIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wg
Zmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9yKSBmaW5hbDsKKyAgICBWZWN0
b3I8dWludDhfdD4gZW5jb2RlKFN0cmluZ1ZpZXcsIFVuZW5jb2RhYmxlSGFuZGxpbmcpIGZpbmFs
OworfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gVGV4dENvZGVjTGF0
aW4xX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVj
UmVwbGFjZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNS
ZXBsYWNlbWVudC5jcHAKaW5kZXggZmMzOWIxOGI4Yzk5NzUxMGM4YzQxYzY2MThhZDE4N2I3NTg0
ZTIyYS4uYmEyNjE0Y2ExNDhhNDI1MGFiZDI5MjJkZGMzNzZjNjBkMjIyODlkZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNSZXBsYWNlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNSZXBsYWNlbWVudC5j
cHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzAsMjIgKzMwLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RkOjp1bmlxdWVf
cHRyPFRleHRDb2RlYz4gVGV4dENvZGVjUmVwbGFjZW1lbnQ6OmNyZWF0ZShjb25zdCBUZXh0RW5j
b2RpbmcmLCBjb25zdCB2b2lkKikKLXsKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxUZXh0
Q29kZWNSZXBsYWNlbWVudD4oKTsKLX0KLQotVGV4dENvZGVjUmVwbGFjZW1lbnQ6OlRleHRDb2Rl
Y1JlcGxhY2VtZW50KCkKLXsKLX0KLQogdm9pZCBUZXh0Q29kZWNSZXBsYWNlbWVudDo6cmVnaXN0
ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIpCiB7Ci0gICAg
Ly8gVGhlICdyZXBsYWNlbWVudCcgaXRzZWxmIGlzIG5vdCBhIHZhbGlkIGxhYmVsLiBJdCBpcyB0
aGUgbmFtZSBvZgorICAgIC8vIFRoZSBzdHJpbmcgJ3JlcGxhY2VtZW50JyBpdHNlbGYgaXMgbm90
IGEgdmFsaWQgbGFiZWwuIEl0IGlzIHRoZSBuYW1lIG9mCiAgICAgLy8gYSBncm91cCBvZiBsZWdh
Y3kgZW5jb2RpbmcgbGFiZWxzLiBIZW5jZSwgaXQgY2Fubm90IGJlIHVzZWQgZGlyZWN0bHkuCisg
ICAgLy8gVGhlIFRleHRFbmNvZGluZyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBhYm92ZSBydWxlOyBo
ZXJlIHdlIHJlZ2lzdGVyIGl0IG5vcm1hbGx5LgogICAgIHJlZ2lzdHJhcigicmVwbGFjZW1lbnQi
LCAicmVwbGFjZW1lbnQiKTsKIAotICAgIC8vIFRoZSBsYWJlbHMKICAgICByZWdpc3RyYXIoImNz
aXNvMjAyMmtyIiwgInJlcGxhY2VtZW50Iik7CiAgICAgcmVnaXN0cmFyKCJoei1nYi0yMzEyIiwg
InJlcGxhY2VtZW50Iik7CiAgICAgcmVnaXN0cmFyKCJpc28tMjAyMi1jbiIsICJyZXBsYWNlbWVu
dCIpOwpAQCAtNTUsNyArNDYsOSBAQCB2b2lkIFRleHRDb2RlY1JlcGxhY2VtZW50OjpyZWdpc3Rl
ckVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhcgogCiB2b2lkIFRl
eHRDb2RlY1JlcGxhY2VtZW50OjpyZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVn
aXN0cmFyKQogewotICAgIHJlZ2lzdHJhcigicmVwbGFjZW1lbnQiLCBjcmVhdGUsIDApOworICAg
IHJlZ2lzdHJhcigicmVwbGFjZW1lbnQiLCBbXSB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2Vf
dW5pcXVlPFRleHRDb2RlY1JlcGxhY2VtZW50PigpOworICAgIH0pOwogfQogCiBTdHJpbmcgVGV4
dENvZGVjUmVwbGFjZW1lbnQ6OmRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90LCBib29sLCBib29s
LCBib29sJiBzYXdFcnJvcikKQEAgLTYzLDkgKzU2LDggQEAgU3RyaW5nIFRleHRDb2RlY1JlcGxh
Y2VtZW50OjpkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCwgYm9vbCwgYm9vbCwgYm9vbCYgc2F3
RXIKICAgICBzYXdFcnJvciA9IHRydWU7CiAgICAgaWYgKG1fc2VudEVPRikKICAgICAgICAgcmV0
dXJuIGVtcHR5U3RyaW5nKCk7Ci0KICAgICBtX3NlbnRFT0YgPSB0cnVlOwotICAgIHJldHVybiBT
dHJpbmcoJnJlcGxhY2VtZW50Q2hhcmFjdGVyLCAxKTsKKyAgICByZXR1cm4gU3RyaW5nIHsgJnJl
cGxhY2VtZW50Q2hhcmFjdGVyLCAxIH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjUmVwbGFjZW1l
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjUmVwbGFjZW1lbnQu
aAppbmRleCA3YTY3ZDUxNmRiNzBjMTZlOTYwZjVjYjJiYTg0MGU5NjJlOGI1MWY0Li5jZTJiYzYz
NjM0OWE3ZDg4ZGVhNzY2ZTBiMGM3NTRmMDE1MGViZGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1JlcGxhY2VtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNSZXBsYWNlbWVudC5oCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDggKzIzLDcgQEAK
ICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFRleHRD
b2RlY1JlcGxhY2VtZW50X2gKLSNkZWZpbmUgVGV4dENvZGVjUmVwbGFjZW1lbnRfaAorI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJUZXh0Q29kZWNVVEY4LmgiCiAKQEAgLTMyLDIwICszMSwxNCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFRleHRDb2RlY1JlcGxhY2VtZW50IDogcHVi
bGljIFRleHRDb2RlY1VURjggewogcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
VGV4dENvZGVjPiBjcmVhdGUoY29uc3QgVGV4dEVuY29kaW5nJiwgY29uc3Qgdm9pZCopOwotCi0g
ICAgVGV4dENvZGVjUmVwbGFjZW1lbnQoKTsKLQogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRW5j
b2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIpOwogICAgIHN0YXRpYyB2b2lkIHJlZ2lz
dGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7CiAKIHByaXZhdGU6Ci0gICAgU3RyaW5nIGRl
Y29kZShjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25F
cnJvciwgYm9vbCYgc2F3RXJyb3IpIG92ZXJyaWRlOworICAgIFN0cmluZyBkZWNvZGUoY29uc3Qg
Y2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wm
IHNhd0Vycm9yKSBmaW5hbDsKIAogICAgIGJvb2wgbV9zZW50RU9GIHsgZmFsc2UgfTsKIAogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLyogVGV4dENvZGVjUmVwbGFjZW1l
bnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29k
ZWNVVEYxNi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2
LmNwcAppbmRleCAwZTM5ZGUxMjg1MTEyODI2NGFiODUyYTg0ZGMwZDM5OWMxYTAxNzhmLi4yZmM5
ZTYzOGZlODYyMGI0YzBiZjk3NGNmZGJmMDVkOTE0ODdlZWEwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
NywyMCArNDcsMTQgQEAgdm9pZCBUZXh0Q29kZWNVVEYxNjo6cmVnaXN0ZXJFbmNvZGluZ05hbWVz
KEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIpCiAgICAgcmVnaXN0cmFyKCJ1bmljb2Rl
RkZGRSIsICJVVEYtMTZCRSIpOwogfQogCi1zdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFRleHRDb2Rl
Yz4gbmV3U3RyZWFtaW5nVGV4dERlY29kZXJVVEYxNkxFKGNvbnN0IFRleHRFbmNvZGluZyYsIGNv
bnN0IHZvaWQqKQotewotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFRleHRDb2RlY1VURjE2
Pih0cnVlKTsKLX0KLQotc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxUZXh0Q29kZWM+IG5ld1N0cmVh
bWluZ1RleHREZWNvZGVyVVRGMTZCRShjb25zdCBUZXh0RW5jb2RpbmcmLCBjb25zdCB2b2lkKikK
LXsKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxUZXh0Q29kZWNVVEYxNj4oZmFsc2UpOwot
fQotCiB2b2lkIFRleHRDb2RlY1VURjE2OjpyZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3Ry
YXIgcmVnaXN0cmFyKQogewotICAgIHJlZ2lzdHJhcigiVVRGLTE2TEUiLCBuZXdTdHJlYW1pbmdU
ZXh0RGVjb2RlclVURjE2TEUsIDApOwotICAgIHJlZ2lzdHJhcigiVVRGLTE2QkUiLCBuZXdTdHJl
YW1pbmdUZXh0RGVjb2RlclVURjE2QkUsIDApOworICAgIHJlZ2lzdHJhcigiVVRGLTE2TEUiLCBb
XSB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFRleHRDb2RlY1VURjE2Pih0cnVl
KTsKKyAgICB9KTsKKyAgICByZWdpc3RyYXIoIlVURi0xNkJFIiwgW10geworICAgICAgICByZXR1
cm4gc3RkOjptYWtlX3VuaXF1ZTxUZXh0Q29kZWNVVEYxNj4oZmFsc2UpOworICAgIH0pOwogfQog
CiBTdHJpbmcgVGV4dENvZGVjVVRGMTY6OmRlY29kZShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90
IGxlbmd0aCwgYm9vbCwgYm9vbCwgYm9vbCYpCkBAIC0xMTQsMzYgKzEwOCwyNCBAQCBTdHJpbmcg
VGV4dENvZGVjVVRGMTY6OmRlY29kZShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90IGxlbmd0aCwg
Ym9vbCwgYm9vbCwgYm9vbAogICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KFdURk1vdmUoYnVmZmVy
KSk7CiB9CiAKLUNTdHJpbmcgVGV4dENvZGVjVVRGMTY6OmVuY29kZShjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZykKK1ZlY3Rvcjx1aW50
OF90PiBUZXh0Q29kZWNVVEYxNjo6ZW5jb2RlKFN0cmluZ1ZpZXcgc3RyaW5nLCBVbmVuY29kYWJs
ZUhhbmRsaW5nKQogewotICAgIC8vIFdlIG5lZWQgdG8gYmUgc3VyZSB3ZSBjYW4gZG91YmxlIHRo
ZSBsZW5ndGggd2l0aG91dCBvdmVyZmxvd2luZy4KLSAgICAvLyBTaW5jZSB0aGUgcGFzc2VkLWlu
IGxlbmd0aCBpcyB0aGUgbGVuZ3RoIG9mIGFuIGFjdHVhbCBleGlzdGluZwotICAgIC8vIGNoYXJh
Y3RlciBidWZmZXIsIGVhY2ggY2hhcmFjdGVyIGlzIHR3byBieXRlcywgYW5kIHdlIGtub3cKLSAg
ICAvLyB0aGUgYnVmZmVyIGRvZXNuJ3Qgb2NjdXB5IHRoZSBlbnRpcmUgYWRkcmVzcyBzcGFjZSwg
d2UgY2FuCi0gICAgLy8gYXNzZXJ0IGhlcmUgdGhhdCBkb3VibGluZyB0aGUgbGVuZ3RoIGRvZXMg
bm90IG92ZXJmbG93IHNpemVfdAotICAgIC8vIGFuZCB0aGVyZSdzIG5vIG5lZWQgZm9yIGEgcnVu
dGltZSBjaGVjay4KLSAgICBBU1NFUlQobGVuZ3RoIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6
ZV90Pjo6bWF4KCkgLyAyKTsKLQotICAgIGNoYXIqIGJ5dGVzOwotICAgIENTdHJpbmcgc3RyaW5n
ID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChsZW5ndGggKiAyLCBieXRlcyk7Ci0KLSAgICAv
LyBGSVhNRTogQ1N0cmluZyBpcyBub3QgYSByZWFzb25hYmxlIGRhdGEgc3RydWN0dXJlIGZvciBl
bmNvZGVkIFVURi0xNiwgd2hpY2ggd2lsbCBoYXZlCi0gICAgLy8gbnVsbCBjaGFyYWN0ZXJzIGlu
c2lkZSBpdC4gUGVyaGFwcyB0aGUgcmVzdWx0IG9mIGVuY29kZSBzaG91bGQgbm90IGJlIGEgQ1N0
cmluZy4KKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KFdURjo6Y2hlY2tlZFByb2R1Y3Q8c2l6
ZV90PihzdHJpbmcubGVuZ3RoKCksIDIpLnVuc2FmZUdldCgpKTsKKyAgICBhdXRvKiBieXRlcyA9
IHJlc3VsdC5kYXRhKCk7CisKICAgICBpZiAobV9saXR0bGVFbmRpYW4pIHsKLSAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgVUNoYXIgYyA9
IGNoYXJhY3RlcnNbaV07Ci0gICAgICAgICAgICBieXRlc1tpICogMl0gPSBjOwotICAgICAgICAg
ICAgYnl0ZXNbaSAqIDIgKyAxXSA9IGMgPj4gODsKKyAgICAgICAgZm9yIChhdXRvIGNoYXJhY3Rl
ciA6IHN0cmluZy5jb2RlVW5pdHMoKSkgeworICAgICAgICAgICAgKmJ5dGVzKysgPSBjaGFyYWN0
ZXI7CisgICAgICAgICAgICAqYnl0ZXMrKyA9IGNoYXJhY3RlciA+PiA4OwogICAgICAgICB9CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewotICAgICAgICAgICAgVUNoYXIgYyA9IGNoYXJhY3RlcnNbaV07Ci0gICAgICAgICAgICBieXRl
c1tpICogMl0gPSBjID4+IDg7Ci0gICAgICAgICAgICBieXRlc1tpICogMiArIDFdID0gYzsKKyAg
ICAgICAgZm9yIChhdXRvIGNoYXJhY3RlciA6IHN0cmluZy5jb2RlVW5pdHMoKSkgeworICAgICAg
ICAgICAgKmJ5dGVzKysgPSBjaGFyYWN0ZXIgPj4gODsKKyAgICAgICAgICAgICpieXRlcysrID0g
Y2hhcmFjdGVyOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIHN0cmluZzsKKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmgKaW5kZXggMjg3NjBjZGVlNmRjYjJh
OGVmNmZiYzk2YjVhODI4OWYwZmEzMjVmMi4uMzFiYjEyYTFjNTlmZjg3ZWZmZTdmZTIwMWJjNTlm
MmI0ODQzNTRkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
Q29kZWNVVEYxNi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVj
VVRGMTYuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjMsMjkgKzIzLDI2IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0j
aWZuZGVmIFRleHRDb2RlY1VURjE2X2gKLSNkZWZpbmUgVGV4dENvZGVjVVRGMTZfaAorI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJUZXh0Q29kZWMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci0gICAgY2xhc3MgVGV4dENvZGVjVVRGMTYgOiBwdWJsaWMgVGV4dENvZGVjIHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05h
bWVSZWdpc3RyYXIpOwotICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckNvZGVjcyhUZXh0Q29k
ZWNSZWdpc3RyYXIpOworY2xhc3MgVGV4dENvZGVjVVRGMTYgOiBwdWJsaWMgVGV4dENvZGVjIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlckVuY29kaW5nTmFtZXMoRW5jb2RpbmdO
YW1lUmVnaXN0cmFyKTsKKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNS
ZWdpc3RyYXIpOwogCi0gICAgICAgIFRleHRDb2RlY1VURjE2KGJvb2wgbGl0dGxlRW5kaWFuKSA6
IG1fbGl0dGxlRW5kaWFuKGxpdHRsZUVuZGlhbiksIG1faGF2ZUJ1ZmZlcmVkQnl0ZShmYWxzZSkg
eyB9CisgICAgZXhwbGljaXQgVGV4dENvZGVjVVRGMTYoYm9vbCBsaXR0bGVFbmRpYW4pIDogbV9s
aXR0bGVFbmRpYW4obGl0dGxlRW5kaWFuKSB7IH0KIAotICAgICAgICBTdHJpbmcgZGVjb2RlKGNv
bnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBi
b29sJiBzYXdFcnJvcikgb3ZlcnJpZGU7Ci0gICAgICAgIENTdHJpbmcgZW5jb2RlKGNvbnN0IFVD
aGFyKiwgc2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZykgb3ZlcnJpZGU7Citwcml2
YXRlOgorICAgIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wg
Zmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9yKSBmaW5hbDsKKyAgICBWZWN0
b3I8dWludDhfdD4gZW5jb2RlKFN0cmluZ1ZpZXcsIFVuZW5jb2RhYmxlSGFuZGxpbmcpIGZpbmFs
OwogCi0gICAgcHJpdmF0ZToKLSAgICAgICAgYm9vbCBtX2xpdHRsZUVuZGlhbjsKLSAgICAgICAg
Ym9vbCBtX2hhdmVCdWZmZXJlZEJ5dGU7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgbV9idWZmZXJl
ZEJ5dGU7Ci0gICAgfTsKKyAgICBib29sIG1fbGl0dGxlRW5kaWFuOworICAgIGJvb2wgbV9oYXZl
QnVmZmVyZWRCeXRlIHsgZmFsc2UgfTsKKyAgICB1bnNpZ25lZCBjaGFyIG1fYnVmZmVyZWRCeXRl
OworfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVGV4dENvZGVjVVRG
MTZfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNV
VEY4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGOC5jcHAK
aW5kZXggY2Q1MDQyNzk5MGZmNTZhMmYxYTkxYjM2Y2U1MzM2YjVmZTliMjQ2My4uOTIyNGZhNzdi
ZGUxNzEyOWU5Y2M2ZGRlZjY0OGEyNzMyMjE1OTY3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEY4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjguY3BwCkBAIC01NSw5ICs1NSw5IEBAIHZvaWQgVGV4
dENvZGVjVVRGODo6cmVnaXN0ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciBy
ZWdpc3RyYXIpCiAKIHZvaWQgVGV4dENvZGVjVVRGODo6cmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVj
UmVnaXN0cmFyIHJlZ2lzdHJhcikKIHsKLSAgICByZWdpc3RyYXIoIlVURi04IiwgW10gKGNvbnN0
IFRleHRFbmNvZGluZyYsIGNvbnN0IHZvaWQqKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8VGV4dENvZGVj
PiB7CisgICAgcmVnaXN0cmFyKCJVVEYtOCIsIFtdIHsKICAgICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV91bmlxdWU8VGV4dENvZGVjVVRGOD4oKTsKLSAgICB9LCBudWxscHRyKTsKKyAgICB9KTsKIH0K
IAogc3RhdGljIGlubGluZSBpbnQgbm9uQVNDSUlTZXF1ZW5jZUxlbmd0aCh1aW50OF90IGZpcnN0
Qnl0ZSkKQEAgLTQzMiwyMiArNDMyLDE2IEBAIHVwQ29udmVydFRvMTZCaXQ6CiAgICAgcmV0dXJu
IFN0cmluZzo6YWRvcHQoV1RGTW92ZShidWZmZXIxNikpOwogfQogCi1DU3RyaW5nIFRleHRDb2Rl
Y1VURjg6OmVuY29kZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVW5l
bmNvZGFibGVIYW5kbGluZykKK1ZlY3Rvcjx1aW50OF90PiBUZXh0Q29kZWNVVEY4OjplbmNvZGUo
U3RyaW5nVmlldyBzdHJpbmcsIFVuZW5jb2RhYmxlSGFuZGxpbmcpCiB7CiAgICAgLy8gVGhlIG1h
eGltdW0gbnVtYmVyIG9mIFVURi04IGJ5dGVzIG5lZWRlZCBwZXIgVVRGLTE2IGNvZGUgdW5pdCBp
cyAzLgogICAgIC8vIEJNUCBjaGFyYWN0ZXJzIHRha2Ugb25seSBvbmUgVVRGLTE2IGNvZGUgdW5p
dCBhbmQgY2FuIHRha2UgdXAgdG8gMyBieXRlcyAoM3gpLgogICAgIC8vIE5vbi1CTVAgY2hhcmFj
dGVycyB0YWtlIHR3byBVVEYtMTYgY29kZSB1bml0cyBhbmQgY2FuIHRha2UgdXAgdG8gNCBieXRl
cyAoMngpLgotICAgIGlmIChsZW5ndGggPiBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1h
eCgpIC8gMykKLSAgICAgICAgQ1JBU0goKTsKLQotICAgIFZlY3RvcjxjaGFyLCAzMDAwPiBieXRl
cyhsZW5ndGggKiAzKTsKKyAgICBWZWN0b3I8dWludDhfdD4gYnl0ZXMoV1RGOjpjaGVja2VkUHJv
ZHVjdDxzaXplX3Q+KHN0cmluZy5sZW5ndGgoKSwgMykudW5zYWZlR2V0KCkpOwogICAgIHNpemVf
dCBieXRlc1dyaXR0ZW4gPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyAp
IHsKLSAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXI7Ci0gICAgICAgIFUxNl9ORVhUKGNoYXJhY3Rl
cnMsIGksIGxlbmd0aCwgY2hhcmFjdGVyKTsKKyAgICBmb3IgKGF1dG8gY2hhcmFjdGVyIDogc3Ry
aW5nLmNvZGVQb2ludHMoKSkKICAgICAgICAgVThfQVBQRU5EX1VOU0FGRShieXRlcy5kYXRhKCks
IGJ5dGVzV3JpdHRlbiwgY2hhcmFjdGVyKTsKLSAgICB9Ci0gICAgcmV0dXJuIENTdHJpbmcgeyBi
eXRlcy5kYXRhKCksIGJ5dGVzV3JpdHRlbiB9OworICAgIHJldHVybiBieXRlczsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9UZXh0Q29kZWNVVEY4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRD
b2RlY1VURjguaAppbmRleCAyMDgxM2MyZmVhNTkwMjgxYWY0MTU5NTQ4MzhiMGM5Y2JkZDU3YjI2
Li5mODI4MmI1ZjM0YTg5NDczZGU5YWQ3YTIxNzY1YWY2YTMyYWNmOTVjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjguaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjguaApAQCAtMjYsNiArMjYsNyBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJUZXh0Q29kZWMuaCIKKyNpbmNsdWRlIDx3dGYvdGV4
dC9MQ2hhci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM2LDcgKzM3LDcgQEAgcHVi
bGljOgogCiBwcml2YXRlOgogICAgIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBs
ZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9yKSBvdmVy
cmlkZTsKLSAgICBDU3RyaW5nIGVuY29kZShjb25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIFVu
ZW5jb2RhYmxlSGFuZGxpbmcpIG92ZXJyaWRlOworICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGUo
U3RyaW5nVmlldywgVW5lbmNvZGFibGVIYW5kbGluZykgZmluYWw7CiAKICAgICBib29sIGhhbmRs
ZVBhcnRpYWxTZXF1ZW5jZShMQ2hhciomIGRlc3RpbmF0aW9uLCBjb25zdCB1aW50OF90KiYgc291
cmNlLCBjb25zdCB1aW50OF90KiBlbmQsIGJvb2wgZmx1c2gpOwogICAgIHZvaWQgaGFuZGxlUGFy
dGlhbFNlcXVlbmNlKFVDaGFyKiYgZGVzdGluYXRpb24sIGNvbnN0IHVpbnQ4X3QqJiBzb3VyY2Us
IGNvbnN0IHVpbnQ4X3QqIGVuZCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYg
c2F3RXJyb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
Q29kZWNVc2VyRGVmaW5lZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRD
b2RlY1VzZXJEZWZpbmVkLmNwcAppbmRleCBlMzE5MjE0ZTRmNTAyZjJkYWM0Mzg3ZmI5YzQ4N2Y2
Y2M1NWUxMGM3Li4yOTZjNDY5ZjE2OWZiOTExZGM4ZGJkN2E2NDdlYTU2NDFlMmZmZTE5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VzZXJEZWZpbmVk
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VzZXJEZWZp
bmVkLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgg
QXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0y
MDE3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI2LDkgKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJUZXh0Q29kZWNVc2VyRGVmaW5lZC5oIgogCi0jaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNs
dWRlIDxhcnJheT4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC0zOSw3MyArMzgsNjIgQEAg
dm9pZCBUZXh0Q29kZWNVc2VyRGVmaW5lZDo6cmVnaXN0ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5n
TmFtZVJlZ2lzdHJhciByZWdpc3RyYXIKICAgICByZWdpc3RyYXIoIngtdXNlci1kZWZpbmVkIiwg
IngtdXNlci1kZWZpbmVkIik7CiB9CiAKLXN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VGV4dENvZGVj
PiBuZXdTdHJlYW1pbmdUZXh0RGVjb2RlclVzZXJEZWZpbmVkKGNvbnN0IFRleHRFbmNvZGluZyYs
IGNvbnN0IHZvaWQqKQotewotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFRleHRDb2RlY1Vz
ZXJEZWZpbmVkPigpOwotfQotCiB2b2lkIFRleHRDb2RlY1VzZXJEZWZpbmVkOjpyZWdpc3RlckNv
ZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFyKQogewotICAgIHJlZ2lzdHJhcigieC11
c2VyLWRlZmluZWQiLCBuZXdTdHJlYW1pbmdUZXh0RGVjb2RlclVzZXJEZWZpbmVkLCAwKTsKKyAg
ICByZWdpc3RyYXIoIngtdXNlci1kZWZpbmVkIiwgW10geworICAgICAgICByZXR1cm4gc3RkOjpt
YWtlX3VuaXF1ZTxUZXh0Q29kZWNVc2VyRGVmaW5lZD4oKTsKKyAgICB9KTsKIH0KIAogU3RyaW5n
IFRleHRDb2RlY1VzZXJEZWZpbmVkOjpkZWNvZGUoY29uc3QgY2hhciogYnl0ZXMsIHNpemVfdCBs
ZW5ndGgsIGJvb2wsIGJvb2wsIGJvb2wmKQogewogICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0Owog
ICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKLQogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgc2lnbmVkIGNoYXIgYyA9IGJ5dGVzW2ld
OwogICAgICAgICByZXN1bHQuYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPihjICYgMHhGN0ZGKSk7
CiAgICAgfQotCiAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCi1zdGF0aWMgQ1N0
cmluZyBlbmNvZGVDb21wbGV4VXNlckRlZmluZWQoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNp
emVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcgaGFuZGxpbmcpCitzdGF0aWMgVmVjdG9y
PHVpbnQ4X3Q+IGVuY29kZUNvbXBsZXhVc2VyRGVmaW5lZChTdHJpbmdWaWV3IHN0cmluZywgVW5l
bmNvZGFibGVIYW5kbGluZyBoYW5kbGluZykKIHsKLSAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0KGxl
bmd0aCk7Ci0gICAgY2hhciogYnl0ZXMgPSByZXN1bHQuZGF0YSgpOworICAgIFZlY3Rvcjx1aW50
OF90PiByZXN1bHQ7CiAKLSAgICBzaXplX3QgcmVzdWx0TGVuZ3RoID0gMDsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKSB7Ci0gICAgICAgIFVDaGFyMzIgYzsKLSAgICAgICAg
VTE2X05FWFQoY2hhcmFjdGVycywgaSwgbGVuZ3RoLCBjKTsKLSAgICAgICAgc2lnbmVkIGNoYXIg
c2lnbmVkQnl0ZSA9IGM7Ci0gICAgICAgIGlmICgoc2lnbmVkQnl0ZSAmIDB4RjdGRikgPT0gYykK
LSAgICAgICAgICAgIGJ5dGVzW3Jlc3VsdExlbmd0aCsrXSA9IHNpZ25lZEJ5dGU7CisgICAgZm9y
IChhdXRvIGNoYXJhY3RlciA6IHN0cmluZy5jb2RlUG9pbnRzKCkpIHsKKyAgICAgICAgaW50OF90
IHNpZ25lZEJ5dGUgPSBjaGFyYWN0ZXI7CisgICAgICAgIGlmICgoc2lnbmVkQnl0ZSAmIDB4RjdG
RikgPT0gY2hhcmFjdGVyKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzaWduZWRCeXRlKTsK
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvLyBObyB3YXkgdG8gZW5jb2RlIHRoaXMgY2hh
cmFjdGVyIHdpdGggeC11c2VyLWRlZmluZWQuCiAgICAgICAgICAgICBVbmVuY29kYWJsZVJlcGxh
Y2VtZW50QXJyYXkgcmVwbGFjZW1lbnQ7Ci0gICAgICAgICAgICBpbnQgcmVwbGFjZW1lbnRMZW5n
dGggPSBUZXh0Q29kZWM6OmdldFVuZW5jb2RhYmxlUmVwbGFjZW1lbnQoYywgaGFuZGxpbmcsIHJl
cGxhY2VtZW50KTsKLSAgICAgICAgICAgIHJlc3VsdC5ncm93KHJlc3VsdExlbmd0aCArIHJlcGxh
Y2VtZW50TGVuZ3RoICsgbGVuZ3RoIC0gaSk7Ci0gICAgICAgICAgICBieXRlcyA9IHJlc3VsdC5k
YXRhKCk7Ci0gICAgICAgICAgICBtZW1jcHkoYnl0ZXMgKyByZXN1bHRMZW5ndGgsIHJlcGxhY2Vt
ZW50LCByZXBsYWNlbWVudExlbmd0aCk7Ci0gICAgICAgICAgICByZXN1bHRMZW5ndGggKz0gcmVw
bGFjZW1lbnRMZW5ndGg7CisgICAgICAgICAgICBpbnQgcmVwbGFjZW1lbnRMZW5ndGggPSBUZXh0
Q29kZWM6OmdldFVuZW5jb2RhYmxlUmVwbGFjZW1lbnQoY2hhcmFjdGVyLCBoYW5kbGluZywgcmVw
bGFjZW1lbnQpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChyZXBsYWNlbWVudC5kYXRhKCks
IHJlcGxhY2VtZW50TGVuZ3RoKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBDU3Ry
aW5nKGJ5dGVzLCByZXN1bHRMZW5ndGgpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUNTdHJp
bmcgVGV4dENvZGVjVXNlckRlZmluZWQ6OmVuY29kZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
c2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZyBoYW5kbGluZykKK1ZlY3Rvcjx1aW50
OF90PiBUZXh0Q29kZWNVc2VyRGVmaW5lZDo6ZW5jb2RlKFN0cmluZ1ZpZXcgc3RyaW5nLCBVbmVu
Y29kYWJsZUhhbmRsaW5nIGhhbmRsaW5nKQogewotICAgIGNoYXIqIGJ5dGVzOwotICAgIENTdHJp
bmcgc3RyaW5nID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChsZW5ndGgsIGJ5dGVzKTsKKyAg
ICB7CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQoc3RyaW5nLmxlbmd0aCgpKTsKKyAg
ICAgICAgYXV0byogYnl0ZXMgPSByZXN1bHQuZGF0YSgpOworCisgICAgICAgIC8vIENvbnZlcnQg
YW5kIHNpbXVsdGFuZW91c2x5IGRvIGEgY2hlY2sgdG8gc2VlIGlmIGl0J3MgYWxsIEFTQ0lJLgor
ICAgICAgICBVQ2hhciBvcmVkID0gMDsKKyAgICAgICAgZm9yIChhdXRvIGNoYXJhY3RlciA6IHN0
cmluZy5jb2RlVW5pdHMoKSkgeworICAgICAgICAgICAgKmJ5dGVzKysgPSBjaGFyYWN0ZXI7Cisg
ICAgICAgICAgICBvcmVkIHw9IGNoYXJhY3RlcjsKKyAgICAgICAgfQogCi0gICAgLy8gQ29udmVy
dCB0aGUgc3RyaW5nIGEgZmFzdCB3YXkgYW5kIHNpbXVsdGFuZW91c2x5IGRvIGFuIGVmZmljaWVu
dCBjaGVjayB0byBzZWUgaWYgaXQncyBhbGwgQVNDSUkuCi0gICAgVUNoYXIgb3JlZCA9IDA7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBVQ2hhciBj
ID0gY2hhcmFjdGVyc1tpXTsKLSAgICAgICAgYnl0ZXNbaV0gPSBjOwotICAgICAgICBvcmVkIHw9
IGM7CisgICAgICAgIGlmICghKG9yZWQgJiAweEZGODApKQorICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAKLSAgICBpZiAoIShvcmVkICYgMHhGRjgwKSkKLSAgICAgICAgcmV0dXJu
IHN0cmluZzsKLQogICAgIC8vIElmIGl0IHdhc24ndCBhbGwgQVNDSUksIGNhbGwgdGhlIGZ1bmN0
aW9uIHRoYXQgaGFuZGxlcyBtb3JlLWNvbXBsZXggY2FzZXMuCi0gICAgcmV0dXJuIGVuY29kZUNv
bXBsZXhVc2VyRGVmaW5lZChjaGFyYWN0ZXJzLCBsZW5ndGgsIGhhbmRsaW5nKTsKKyAgICByZXR1
cm4gZW5jb2RlQ29tcGxleFVzZXJEZWZpbmVkKHN0cmluZywgaGFuZGxpbmcpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRDb2RlY1VzZXJEZWZpbmVkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRDb2RlY1VzZXJEZWZpbmVkLmgKaW5kZXggNTgyMWNhMzc4MTUxOTFlY2IyYTBjNTc4ZmUz
MjNmZDg1NGFkNWUwYi4uNzQ0ZmQzMDEzYWUxYjE2ZjM2YmE3MmM4NDRmYzhkNTMwZTIxNWI0ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVm
aW5lZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRl
ZmluZWQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxNyBB
cHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yMywyMiArMjMsMjAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5k
ZWYgVGV4dENvZGVjVXNlckRlZmluZWRfaAotI2RlZmluZSBUZXh0Q29kZWNVc2VyRGVmaW5lZF9o
CisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIlRleHRDb2RlYy5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLSAgICBjbGFzcyBUZXh0Q29kZWNVc2VyRGVmaW5lZCA6IHB1YmxpYyBUZXh0Q29k
ZWMgewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJFbmNvZGluZ05h
bWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhcik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVy
Q29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7CitjbGFzcyBUZXh0Q29kZWNVc2VyRGVmaW5lZCA6
IHB1YmxpYyBUZXh0Q29kZWMgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRW5j
b2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIpOworICAgIHN0YXRpYyB2b2lkIHJlZ2lz
dGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7CiAKLSAgICAgICAgU3RyaW5nIGRlY29kZShj
b25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwg
Ym9vbCYgc2F3RXJyb3IpIG92ZXJyaWRlOwotICAgICAgICBDU3RyaW5nIGVuY29kZShjb25zdCBV
Q2hhciosIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcpIG92ZXJyaWRlOwotICAg
IH07Citwcml2YXRlOgorICAgIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5n
dGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9yKSBmaW5hbDsK
KyAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlKFN0cmluZ1ZpZXcsIFVuZW5jb2RhYmxlSGFuZGxp
bmcpIGZpbmFsOworfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVGV4
dENvZGVjVXNlckRlZmluZWRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9UZXh0RW5jb2RpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
RW5jb2RpbmcuY3BwCmluZGV4IDdkYWJhNjdlMjI0OGJmZDI2Mzg5MWUzN2FmZjk5Y2Q4Y2U0OTEz
YmIuLjAzMjdhNWMwYjQ1MjAyMzBmNDdiMmExYmZiYjAyMzU0MzZkOWY5MWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHAKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4
ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAw
OSBUb3JjaCBNb2JpbGUsIEluYy4KICAqCkBAIC00OCw3ICs0OCw3IEBAIFRleHRFbmNvZGluZzo6
VGV4dEVuY29kaW5nKGNvbnN0IGNoYXIqIG5hbWUpCiAgICAgLCBtX2JhY2tzbGFzaEFzQ3VycmVu
Y3lTeW1ib2woYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKQogewogICAgIC8vIEFsaWFzZXMg
YXJlIHZhbGlkLCBidXQgbm90ICJyZXBsYWNlbWVudCIgaXRzZWxmLgotICAgIGlmIChtX25hbWUg
JiYgaXNSZXBsYWNlbWVudEVuY29kaW5nKG5hbWUpKQorICAgIGlmIChlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShuYW1lLCAicmVwbGFjZW1lbnQiKSkKICAgICAgICAgbV9uYW1lID0gbnVs
bHB0cjsKIH0KIApAQCAtNTcsNyArNTcsNyBAQCBUZXh0RW5jb2Rpbmc6OlRleHRFbmNvZGluZyhj
b25zdCBTdHJpbmcmIG5hbWUpCiAgICAgLCBtX2JhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woYmFj
a3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKQogewogICAgIC8vIEFsaWFzZXMgYXJlIHZhbGlkLCBi
dXQgbm90ICJyZXBsYWNlbWVudCIgaXRzZWxmLgotICAgIGlmIChtX25hbWUgJiYgaXNSZXBsYWNl
bWVudEVuY29kaW5nKG5hbWUpKQorICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZShuYW1lLCAicmVwbGFjZW1lbnQiKSkKICAgICAgICAgbV9uYW1lID0gbnVsbHB0cjsKIH0KIApA
QCAtNjksMTMgKzY5LDEyIEBAIFN0cmluZyBUZXh0RW5jb2Rpbmc6OmRlY29kZShjb25zdCBjaGFy
KiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBib29sIHN0b3BPbkVycm9yLCBiCiAgICAgcmV0dXJuIG5l
d1RleHRDb2RlYygqdGhpcyktPmRlY29kZShkYXRhLCBsZW5ndGgsIHRydWUsIHN0b3BPbkVycm9y
LCBzYXdFcnJvcik7CiB9CiAKLUNTdHJpbmcgVGV4dEVuY29kaW5nOjplbmNvZGUoU3RyaW5nVmll
dyB0ZXh0LCBVbmVuY29kYWJsZUhhbmRsaW5nIGhhbmRsaW5nKSBjb25zdAorVmVjdG9yPHVpbnQ4
X3Q+IFRleHRFbmNvZGluZzo6ZW5jb2RlKFN0cmluZ1ZpZXcgdGV4dCwgVW5lbmNvZGFibGVIYW5k
bGluZyBoYW5kbGluZykgY29uc3QKIHsKLSAgICBpZiAoIW1fbmFtZSkKLSAgICAgICAgcmV0dXJu
IENTdHJpbmcoKTsKKyAgICBpZiAoIW1fbmFtZSB8fCB0ZXh0LmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIHsgfTsKIAotICAgIGlmICh0ZXh0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuICIi
OworICAgIC8vIEZJWE1FOiBDb25zaWRlciBhZGRpbmcgYSBmYXN0IGNhc2UgZm9yIEFTQ0lJLgog
CiAgICAgLy8gRklYTUU6IFdoYXQncyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8gbm9ybWFsaXphdGlv
bj8KICAgICAvLyBJdCdzIGEgbGl0dGxlIHN0cmFuZ2UgdG8gZG8gaXQgaW5zaWRlIHRoZSBlbmNv
ZGUgZnVuY3Rpb24uCkBAIC04NCw3ICs4Myw3IEBAIENTdHJpbmcgVGV4dEVuY29kaW5nOjplbmNv
ZGUoU3RyaW5nVmlldyB0ZXh0LCBVbmVuY29kYWJsZUhhbmRsaW5nIGhhbmRsaW5nKSBjb25zCiAg
ICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSB0ZXh0LnVwY29udmVydGVkQ2hhcmFjdGVy
cygpOwogCiAgICAgY29uc3QgVUNoYXIqIHNvdXJjZSA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsK
LSAgICBzaXplX3Qgc291cmNlTGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBz
b3VyY2VMZW5ndGggPSB0ZXh0Lmxlbmd0aCgpOwogCiAgICAgVmVjdG9yPFVDaGFyPiBub3JtYWxp
emVkQ2hhcmFjdGVyczsKIApAQCAtMTA0LDcgKzEwMyw3IEBAIENTdHJpbmcgVGV4dEVuY29kaW5n
OjplbmNvZGUoU3RyaW5nVmlldyB0ZXh0LCBVbmVuY29kYWJsZUhhbmRsaW5nIGhhbmRsaW5nKSBj
b25zCiAgICAgICAgIHNvdXJjZUxlbmd0aCA9IG5vcm1hbGl6ZWRMZW5ndGg7CiAgICAgfQogCi0g
ICAgcmV0dXJuIG5ld1RleHRDb2RlYygqdGhpcyktPmVuY29kZShzb3VyY2UsIHNvdXJjZUxlbmd0
aCwgaGFuZGxpbmcpOworICAgIHJldHVybiBuZXdUZXh0Q29kZWMoKnRoaXMpLT5lbmNvZGUoU3Ry
aW5nVmlldyB7IHNvdXJjZSwgc291cmNlTGVuZ3RoIH0sIGhhbmRsaW5nKTsKIH0KIAogY29uc3Qg
Y2hhciogVGV4dEVuY29kaW5nOjpkb21OYW1lKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5oCmluZGV4IDIwNGQ0Nzg1YzVjODJlMzQ2ODk2OTk0YjEy
ZDExZGQ1ODE4MTdjM2YuLmFjMTA5YWE4YWFhNDQwODQzNmFiNTU3ZjhjMWYzOGM5M2I1YzRjZjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuaApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDcsIDIwMDgsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yNSw4ICsyNSw4IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVk
ZSAiVGV4dENvZGVjLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDxwYWwv
dGV4dC9VbmVuY29kYWJsZUhhbmRsaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAK
ICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QgbGVu
Z3RoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcikgY29uc3Q7CiAgICAgU3RyaW5n
IGRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCkgY29uc3Q7Ci0gICAgQ1N0cmluZyBl
bmNvZGUoU3RyaW5nVmlldywgVW5lbmNvZGFibGVIYW5kbGluZykgY29uc3Q7CisgICAgVmVjdG9y
PHVpbnQ4X3Q+IGVuY29kZShTdHJpbmdWaWV3LCBVbmVuY29kYWJsZUhhbmRsaW5nKSBjb25zdDsK
IAogICAgIFVDaGFyIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSBjb25zdDsKICAgICBib29s
IGlzQnl0ZUJhc2VkRW5jb2RpbmcoKSBjb25zdCB7IHJldHVybiAhaXNOb25CeXRlQmFzZWRFbmNv
ZGluZygpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRF
bmNvZGluZ1JlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVu
Y29kaW5nUmVnaXN0cnkuY3BwCmluZGV4IDZlNTQyMzMzYWIwMTAwYjBjNzM3OGRkZTYxMjgyMGEy
MzJjOGI3NWEuLjU1NmRmZjNlYzU0YzQ3NGIwNGYzMDFkZmY5NmFiZGNlMzM4ODlhZDEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnku
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0
cnkuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMwLDIz
ICszMCwyMSBAQAogI2luY2x1ZGUgIlRleHRDb2RlY0lDVS5oIgogI2luY2x1ZGUgIlRleHRDb2Rl
Y0xhdGluMS5oIgogI2luY2x1ZGUgIlRleHRDb2RlY1JlcGxhY2VtZW50LmgiCi0jaW5jbHVkZSAi
VGV4dENvZGVjVXNlckRlZmluZWQuaCIKICNpbmNsdWRlICJUZXh0Q29kZWNVVEYxNi5oIgogI2lu
Y2x1ZGUgIlRleHRDb2RlY1VURjguaCIKKyNpbmNsdWRlICJUZXh0Q29kZWNVc2VyRGVmaW5lZC5o
IgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUgPG11dGV4PgogI2luY2x1ZGUg
PHd0Zi9BU0NJSUNUeXBlLmg+CisjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+Cisj
aW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8
d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgotCi0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVz
aW5nIG5hbWVzcGFjZSBXVEY7CiAKQEAgLTkwLDE0ICs4OCw4IEBAIHN0cnVjdCBUZXh0RW5jb2Rp
bmdOYW1lSGFzaCB7CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlP
ckRlbGV0ZWQgPSBmYWxzZTsKIH07CiAKLXN0cnVjdCBUZXh0Q29kZWNGYWN0b3J5IHsKLSAgICBO
ZXdUZXh0Q29kZWNGdW5jdGlvbiBmdW5jdGlvbjsKLSAgICBjb25zdCB2b2lkKiBhZGRpdGlvbmFs
RGF0YTsKLSAgICBUZXh0Q29kZWNGYWN0b3J5KE5ld1RleHRDb2RlY0Z1bmN0aW9uIGYgPSAwLCBj
b25zdCB2b2lkKiBkID0gMCkgOiBmdW5jdGlvbihmKSwgYWRkaXRpb25hbERhdGEoZCkgeyB9Ci19
OwotCi10eXBlZGVmIEhhc2hNYXA8Y29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBUZXh0RW5jb2Rp
bmdOYW1lSGFzaD4gVGV4dEVuY29kaW5nTmFtZU1hcDsKLXR5cGVkZWYgSGFzaE1hcDxjb25zdCBj
aGFyKiwgVGV4dENvZGVjRmFjdG9yeT4gVGV4dENvZGVjTWFwOwordXNpbmcgVGV4dEVuY29kaW5n
TmFtZU1hcCA9IEhhc2hNYXA8Y29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBUZXh0RW5jb2RpbmdO
YW1lSGFzaD47Cit1c2luZyBUZXh0Q29kZWNNYXAgPSBIYXNoTWFwPGNvbnN0IGNoYXIqLCBOZXdU
ZXh0Q29kZWNGdW5jdGlvbj47CiAKIHN0YXRpYyBTdGF0aWNMb2NrIGVuY29kaW5nUmVnaXN0cnlN
dXRleDsKIApAQCAtMTM4LDExICsxMzAsMTEgQEAgc3RhdGljIHZvaWQgYWRkVG9UZXh0RW5jb2Rp
bmdOYW1lTWFwKGNvbnN0IGNoYXIqIGFsaWFzLCBjb25zdCBjaGFyKiBuYW1lKQogICAgIHRleHRF
bmNvZGluZ05hbWVNYXAtPmFkZChhbGlhcywgYXRvbWljTmFtZSk7CiB9CiAKLXN0YXRpYyB2b2lk
IGFkZFRvVGV4dENvZGVjTWFwKGNvbnN0IGNoYXIqIG5hbWUsIE5ld1RleHRDb2RlY0Z1bmN0aW9u
IGZ1bmN0aW9uLCBjb25zdCB2b2lkKiBhZGRpdGlvbmFsRGF0YSkKK3N0YXRpYyB2b2lkIGFkZFRv
VGV4dENvZGVjTWFwKGNvbnN0IGNoYXIqIG5hbWUsIE5ld1RleHRDb2RlY0Z1bmN0aW9uJiYgZnVu
Y3Rpb24pCiB7CiAgICAgY29uc3QgY2hhciogYXRvbWljTmFtZSA9IHRleHRFbmNvZGluZ05hbWVN
YXAtPmdldChuYW1lKTsKICAgICBBU1NFUlQoYXRvbWljTmFtZSk7Ci0gICAgdGV4dENvZGVjTWFw
LT5hZGQoYXRvbWljTmFtZSwgVGV4dENvZGVjRmFjdG9yeShmdW5jdGlvbiwgYWRkaXRpb25hbERh
dGEpKTsKKyAgICB0ZXh0Q29kZWNNYXAtPmFkZChhdG9taWNOYW1lLCBXVEZNb3ZlKGZ1bmN0aW9u
KSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBydW5lQmxhY2tsaXN0ZWRDb2RlY3MoKQpAQCAtMjM0LDIy
ICsyMjYsNiBAQCBib29sIGlzSmFwYW5lc2VFbmNvZGluZyhjb25zdCBjaGFyKiBjYW5vbmljYWxF
bmNvZGluZ05hbWUpCiAgICAgcmV0dXJuIGNhbm9uaWNhbEVuY29kaW5nTmFtZSAmJiBqYXBhbmVz
ZUVuY29kaW5ncyAmJiBqYXBhbmVzZUVuY29kaW5ncy0+Y29udGFpbnMoY2Fub25pY2FsRW5jb2Rp
bmdOYW1lKTsKIH0KIAotYm9vbCBpc1JlcGxhY2VtZW50RW5jb2RpbmcoY29uc3QgY2hhciogYWxp
YXMpCi17Ci0gICAgaWYgKCFhbGlhcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KHN0cmxlbihhbGlhcykgIT0gMTEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVy
biAhc3RyY2FzZWNtcChhbGlhcywgInJlcGxhY2VtZW50Iik7Ci19Ci0KLWJvb2wgaXNSZXBsYWNl
bWVudEVuY29kaW5nKGNvbnN0IFN0cmluZyYgYWxpYXMpCi17Ci0gICAgcmV0dXJuIGVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGFsaWFzLCAicmVwbGFjZW1lbnQiKTsKLX0KLQogYm9vbCBz
aG91bGRTaG93QmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbEluKGNvbnN0IGNoYXIqIGNhbm9uaWNh
bEVuY29kaW5nTmFtZSkKIHsKICAgICByZXR1cm4gY2Fub25pY2FsRW5jb2RpbmdOYW1lICYmIG5v
bkJhY2tzbGFzaEVuY29kaW5ncyAmJiBub25CYWNrc2xhc2hFbmNvZGluZ3MtPmNvbnRhaW5zKGNh
bm9uaWNhbEVuY29kaW5nTmFtZSk7CkBAIC0yNzIsOSArMjQ4LDkgQEAgc3RkOjp1bmlxdWVfcHRy
PFRleHRDb2RlYz4gbmV3VGV4dENvZGVjKGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCiAg
ICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2soZW5jb2RpbmdSZWdpc3RyeU11dGV4
KTsKIAogICAgIEFTU0VSVCh0ZXh0Q29kZWNNYXApOwotICAgIFRleHRDb2RlY0ZhY3RvcnkgZmFj
dG9yeSA9IHRleHRDb2RlY01hcC0+Z2V0KGVuY29kaW5nLm5hbWUoKSk7Ci0gICAgQVNTRVJUKGZh
Y3RvcnkuZnVuY3Rpb24pOwotICAgIHJldHVybiBmYWN0b3J5LmZ1bmN0aW9uKGVuY29kaW5nLCBm
YWN0b3J5LmFkZGl0aW9uYWxEYXRhKTsKKyAgICBhdXRvIHJlc3VsdCA9IHRleHRDb2RlY01hcC0+
ZmluZChlbmNvZGluZy5uYW1lKCkpOworICAgIEFTU0VSVChyZXN1bHQgIT0gdGV4dENvZGVjTWFw
LT5lbmQoKSk7CisgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWUoKTsKIH0KIAogY29uc3QgY2hhciog
YXRvbWljQ2Fub25pY2FsVGV4dEVuY29kaW5nTmFtZShjb25zdCBjaGFyKiBuYW1lKQpAQCAtMjk3
LDE2ICsyNzMsMTQgQEAgY29uc3QgY2hhciogYXRvbWljQ2Fub25pY2FsVGV4dEVuY29kaW5nTmFt
ZShjb25zdCBjaGFyKiBuYW1lKQogICAgIHJldHVybiB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5nZXQo
bmFtZSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotY29uc3QgY2hh
ciogYXRvbWljQ2Fub25pY2FsVGV4dEVuY29kaW5nTmFtZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBj
aGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4gc3RhdGljIGNvbnN0IGNoYXIqIGF0b21pY0Nhbm9uaWNhbFRleHRFbmNvZGluZ05hbWUoY29u
c3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKIHsKICAgICBjaGFy
IGJ1ZmZlclttYXhFbmNvZGluZ05hbWVMZW5ndGggKyAxXTsKICAgICBzaXplX3QgaiA9IDA7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBDaGFyYWN0
ZXJUeXBlIGMgPSBjaGFyYWN0ZXJzW2ldOwogICAgICAgICBpZiAoaiA9PSBtYXhFbmNvZGluZ05h
bWVMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgYnVmZmVyW2orK10gPSBj
OworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGJ1ZmZlcltqKytdID0gY2hh
cmFjdGVyc1tpXTsKICAgICB9CiAgICAgYnVmZmVyW2pdID0gMDsKICAgICByZXR1cm4gYXRvbWlj
Q2Fub25pY2FsVGV4dEVuY29kaW5nTmFtZShidWZmZXIpOwpAQCAtMzE0LDcgKzI4OCw3IEBAIGNv
bnN0IGNoYXIqIGF0b21pY0Nhbm9uaWNhbFRleHRFbmNvZGluZ05hbWUoY29uc3QgQ2hhcmFjdGVy
VHlwZSogY2hhcmFjdGVycywgc2l6CiAKIGNvbnN0IGNoYXIqIGF0b21pY0Nhbm9uaWNhbFRleHRF
bmNvZGluZ05hbWUoY29uc3QgU3RyaW5nJiBhbGlhcykKIHsKLSAgICBpZiAoIWFsaWFzLmxlbmd0
aCgpKQorICAgIGlmIChhbGlhcy5pc0VtcHR5KCkgfHwgIWFsaWFzLmlzQWxsQVNDSUkoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoYWxpYXMuaXM4Qml0KCkpCkBAIC0zNTMs
MTkgKzMyNyw0IEBAIFN0cmluZyBkZWZhdWx0VGV4dEVuY29kaW5nTmFtZUZvclN5c3RlbUxhbmd1
YWdlKCkKICNlbmRpZgogfQogCi0jaWZuZGVmIE5ERUJVRwotdm9pZCBkdW1wVGV4dEVuY29kaW5n
TmFtZU1hcCgpCi17Ci0gICAgdW5zaWduZWQgc2l6ZSA9IHRleHRFbmNvZGluZ05hbWVNYXAtPnNp
emUoKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIkR1bXBpbmcgJXUgZW50cmllcyBpbiBXZWJDb3Jl
Ojp0ZXh0RW5jb2RpbmdOYW1lTWFwLi4uXG4iLCBzaXplKTsKLQotICAgIHN0ZDo6bG9ja19ndWFy
ZDxTdGF0aWNMb2NrPiBsb2NrKGVuY29kaW5nUmVnaXN0cnlNdXRleCk7Ci0KLSAgICBUZXh0RW5j
b2RpbmdOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHRleHRFbmNvZGluZ05hbWVNYXAtPmJl
Z2luKCk7Ci0gICAgVGV4dEVuY29kaW5nTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGV4
dEVuY29kaW5nTmFtZU1hcC0+ZW5kKCk7Ci0gICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgZnByaW50ZihzdGRlcnIsICInJXMnID0+ICclcydcbiIsIGl0LT5rZXksIGl0LT52YWx1
ZSk7Ci19Ci0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5oCmluZGV4IGJjYzRi
ODc1NjdhY2UzM2EwMjM1MDQxMjc1ZjhlOWI4NjdlNWY2ZWIuLjlmYzM5Njk5YTdiOWU5ZmQwNGVj
ZjNkYjc2MWI3NGI3ZWMxOGU1YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmgKQEAgLTI2LDcgKzI2LDcgQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
MzksMjIgKzM5LDE1IEBAIFdFQkNPUkVfRVhQT1JUIHN0ZDo6dW5pcXVlX3B0cjxUZXh0Q29kZWM+
IG5ld1RleHRDb2RlYyhjb25zdCBUZXh0RW5jb2RpbmcmKTsKIAogLy8gT25seSBUZXh0RW5jb2Rp
bmcgc2hvdWxkIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBkaXJlY3RseS4KIGNvbnN0IGNo
YXIqIGF0b21pY0Nhbm9uaWNhbFRleHRFbmNvZGluZ05hbWUoY29uc3QgY2hhciogYWxpYXMpOwot
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1jb25zdCBjaGFyKiBhdG9taWNDYW5v
bmljYWxUZXh0RW5jb2RpbmdOYW1lKGNvbnN0IENoYXJhY3RlclR5cGUqLCBzaXplX3QpOwogY29u
c3QgY2hhciogYXRvbWljQ2Fub25pY2FsVGV4dEVuY29kaW5nTmFtZShjb25zdCBTdHJpbmcmKTsK
IGJvb2wgbm9FeHRlbmRlZFRleHRFbmNvZGluZ05hbWVVc2VkKCk7CiBib29sIGlzSmFwYW5lc2VF
bmNvZGluZyhjb25zdCBjaGFyKiBjYW5vbmljYWxFbmNvZGluZ05hbWUpOwogYm9vbCBzaG91bGRT
aG93QmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbEluKGNvbnN0IGNoYXIqIGNhbm9uaWNhbEVuY29k
aW5nTmFtZSk7Ci1ib29sIGlzUmVwbGFjZW1lbnRFbmNvZGluZyhjb25zdCBjaGFyKiBhbGlhcyk7
Ci1ib29sIGlzUmVwbGFjZW1lbnRFbmNvZGluZyhjb25zdCBTdHJpbmcmIGFsaWFzKTsKIAogV0VC
Q09SRV9FWFBPUlQgU3RyaW5nIGRlZmF1bHRUZXh0RW5jb2RpbmdOYW1lRm9yU3lzdGVtTGFuZ3Vh
Z2UoKTsKKwogI2lmIFBMQVRGT1JNKENPQ09BKQogV0VCQ09SRV9FWFBPUlQgQ0ZTdHJpbmdFbmNv
ZGluZyB3ZWJEZWZhdWx0Q0ZTdHJpbmdFbmNvZGluZygpOwogI2VuZGlmCiAKLSNpZm5kZWYgTkRF
QlVHCi12b2lkIGR1bXBUZXh0RW5jb2RpbmdOYW1lTWFwKCk7Ci0jZW5kaWYKLQogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hTTFRVbmljb2Rl
U29ydC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFVuaWNvZGVTb3J0LmNwcAppbmRleCBj
MmQ4NTZlZjZiMTU1NDUwY2MyY2M4MWEyYTFiMDRmZjNlYTRhOTZiLi5mOWU1NmI5YjJhZmNhNWE3
MDc3N2IzMDA2MWQ4MjNkZDYzYjgzODQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwv
WFNMVFVuaWNvZGVTb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFVuaWNvZGVT
b3J0LmNwcApAQCAtMzMsNyArMzMsNiBAQAogCiAjaW5jbHVkZSA8bGlieHNsdC90ZW1wbGF0ZXMu
aD4KICNpbmNsdWRlIDxsaWJ4c2x0L3hzbHR1dGlscy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdF
eHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUv
Q29sbGF0b3IuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxE
b2N1bWVudFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50
UGFyc2VyLmNwcAppbmRleCA4ZTZiODM1NGNmOGNlMjExZTA3NjI3NTE3NjJlYTA0YTVkNzI4OGY3
Li4xZjI4YThlYmE1OWRmMWU2ZTIxZmNjODc1ZTBmNDkwYmFhNjA4ODVmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNwcApAQCAtNTEsNyArNTEs
NiBAQAogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKICNpbmNsdWRlICJUcmVlRGVw
dGhMaW1pdC5oIgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBh
cnNlckxpYnhtbDIuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBh
cnNlckxpYnhtbDIuY3BwCmluZGV4IGEzN2Q2MTUxNmE2MjgwMGY1YTQzMWI4OTFjNzI3MzRmMDkw
MzViY2MuLjBhOTIyZTdmMTFkYjllMjk3MWVjMTc3ZmJhYjdmZjU4NTE5Njc1OWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1s
Mi5jcHAKQEAgLTUzLDcgKzUzLDYgQEAKICNpbmNsdWRlICJYTUxOU05hbWVzLmgiCiAjaW5jbHVk
ZSAiWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5oIgogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXJJbnRl
cm5hbHMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3Vu
aWNvZGUvVVRGOC5oPgogCiAjaWYgRU5BQkxFKFhTTFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZUJyb3dzZXJGdW5jcy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZUJyb3dz
ZXJGdW5jcy5jcHAKaW5kZXggNmE0ZGFiMDE2NDg4Mjg5YzlhYTc2ZThlM2E1ZWFjZjE4NDM5YTQ5
YS4uM2JlNGY0OGFkMjk5MWJlODI4Njg1YTY1M2U2NDFmZjEyOGEyMmJmZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVCcm93c2Vy
RnVuY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBl
L05ldHNjYXBlQnJvd3NlckZ1bmNzLmNwcApAQCAtODgwLDkgKzg4MCw5IEBAIHN0YXRpYyBOUEVy
cm9yIE5QTl9TZXRWYWx1ZUZvclVSTChOUFAgbnBwLCBOUE5VUkxWYXJpYWJsZSB2YXJpYWJsZSwg
Y29uc3QgY2hhcioKIHN0YXRpYyBib29sIGluaXRpYWxpemVQcm90ZWN0aW9uU3BhY2UoY29uc3Qg
Y2hhciogcHJvdG9jb2wsIGNvbnN0IGNoYXIqIGhvc3QsIGludCBwb3J0LCBjb25zdCBjaGFyKiBz
Y2hlbWUsIGNvbnN0IGNoYXIqIHJlYWxtLCBQcm90ZWN0aW9uU3BhY2UmIHByb3RlY3Rpb25TcGFj
ZSkKIHsKICAgICBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJUeXBlIHNlcnZlclR5cGU7Ci0gICAgaWYg
KCFzdHJjYXNlY21wKHByb3RvY29sLCAiaHR0cCIpKQorICAgIGlmIChlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShwcm90b2NvbCwgImh0dHAiKSkKICAgICAgICAgc2VydmVyVHlwZSA9IFBy
b3RlY3Rpb25TcGFjZVNlcnZlckhUVFA7Ci0gICAgZWxzZSBpZiAoIXN0cmNhc2VjbXAocHJvdG9j
b2wsICJodHRwcyIpKQorICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KHByb3RvY29sLCAiaHR0cHMiKSkKICAgICAgICAgc2VydmVyVHlwZSA9IFByb3RlY3Rpb25TcGFj
ZVNlcnZlckhUVFBTOwogICAgIGVsc2UgewogICAgICAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQg
aHR0cCBhbmQgaHR0cHMuCkBAIC04OTEsOSArODkxLDkgQEAgc3RhdGljIGJvb2wgaW5pdGlhbGl6
ZVByb3RlY3Rpb25TcGFjZShjb25zdCBjaGFyKiBwcm90b2NvbCwgY29uc3QgY2hhciogaG9zdCwg
aW4KIAogICAgIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lIGF1dGhlbnRpY2F0
aW9uU2NoZW1lID0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVEZWZhdWx0Owog
ICAgIGlmIChzZXJ2ZXJUeXBlID09IFByb3RlY3Rpb25TcGFjZVNlcnZlckhUVFApIHsKLSAgICAg
ICAgaWYgKCFzdHJjYXNlY21wKHNjaGVtZSwgImJhc2ljIikpCisgICAgICAgIGlmIChlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzY2hlbWUsICJiYXNpYyIpKQogICAgICAgICAgICAgYXV0
aGVudGljYXRpb25TY2hlbWUgPSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUhU
VFBCYXNpYzsKLSAgICAgICAgZWxzZSBpZiAoIXN0cmNtcChzY2hlbWUsICJkaWdlc3QiKSkKKyAg
ICAgICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc2NoZW1lLCAiZGln
ZXN0IikpCiAgICAgICAgICAgICBhdXRoZW50aWNhdGlvblNjaGVtZSA9IFByb3RlY3Rpb25TcGFj
ZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRUUERpZ2VzdDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3RvcnkvSGlzdG9yeVByb3BlcnR5TGlzdC5tbSBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3RvcnkvSGlzdG9yeVByb3BlcnR5TGlzdC5tbQppbmRl
eCAwNjBhM2JmNzg3MWQyMWE3ZWQ1OGVkMTU5MmUwOGEwZmExNjU4MTJkLi40NzkxNmU3ODFhMjQz
MDQxZTFkNTgyNDhhYmZhZWFhYzBjNTdiYjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9IaXN0b3J5L0hpc3RvcnlQcm9wZXJ0eUxpc3QubW0KKysrIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvSGlzdG9yeS9IaXN0b3J5UHJvcGVydHlMaXN0Lm1tCkBAIC0yNyw3ICsyNyw2
IEBACiAKICNpbXBvcnQgIldlYkhpc3RvcnlJdGVtSW50ZXJuYWwuaCIKICNpbXBvcnQgPFdlYkNv
cmUvSGlzdG9yeUl0ZW0uaD4KLSNpbXBvcnQgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KIAogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1BsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1BsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5tbQppbmRleCA3NGU3OWMw
ZGU0YmMxYWZlMGUxODYzYzIwMzA4OWQ2N2RiZjhlNGYyLi44ZTg5NTRiOWE5N2UzNzE4NDQ0MGVl
ZTUzOTBkMzRmZDJjY2JmZmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9Q
bHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCkBAIC04NTQsMTEg
Kzg1NCw5IEBAIEBlbmQKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWJvb2wgZ2V0QXV0aGVudGlj
YXRpb25JbmZvKGNvbnN0IGNoYXIqIHByb3RvY29sU3RyLCBjb25zdCBjaGFyKiBob3N0U3RyLCBp
bnQzMl90IHBvcnQsIGNvbnN0IGNoYXIqIHNjaGVtZVN0ciwgY29uc3QgY2hhciogcmVhbG1TdHIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBDU3RyaW5nJiB1c2VybmFtZSwgQ1N0cmluZyYg
cGFzc3dvcmQpCitib29sIGdldEF1dGhlbnRpY2F0aW9uSW5mbyhjb25zdCBjaGFyKiBwcm90b2Nv
bFN0ciwgY29uc3QgY2hhciogaG9zdFN0ciwgaW50MzJfdCBwb3J0LCBjb25zdCBjaGFyKiBzY2hl
bWVTdHIsIGNvbnN0IGNoYXIqIHJlYWxtU3RyLCBDU3RyaW5nJiB1c2VybmFtZSwgQ1N0cmluZyYg
cGFzc3dvcmQpCiB7Ci0gICAgaWYgKHN0cmNhc2VjbXAocHJvdG9jb2xTdHIsICJodHRwIikgIT0g
MCAmJiAKLSAgICAgICAgc3RyY2FzZWNtcChwcm90b2NvbFN0ciwgImh0dHBzIikgIT0gMCkKKyAg
ICBpZiAoIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHByb3RvY29sU3RyLCAiaHR0cCIp
ICYmICFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwcm90b2NvbFN0ciwgImh0dHBzIikp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIE5TU3RyaW5nICpob3N0ID0gW05TU3RyaW5n
IHN0cmluZ1dpdGhVVEY4U3RyaW5nOmhvc3RTdHJdOwpAQCAtODc0LDEwICs4NzIsMTAgQEAgYm9v
bCBnZXRBdXRoZW50aWNhdGlvbkluZm8oY29uc3QgY2hhciogcHJvdG9jb2xTdHIsIGNvbnN0IGNo
YXIqIGhvc3RTdHIsIGludDMyX3QKICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7
CiAgICAgCiAgICAgTlNTdHJpbmcgKmF1dGhlbnRpY2F0aW9uTWV0aG9kID0gTlNVUkxBdXRoZW50
aWNhdGlvbk1ldGhvZERlZmF1bHQ7Ci0gICAgaWYgKCFzdHJjYXNlY21wKHByb3RvY29sU3RyLCAi
aHR0cCIpKSB7Ci0gICAgICAgIGlmICghc3RyY2FzZWNtcChzY2hlbWVTdHIsICJiYXNpYyIpKQor
ICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwcm90b2NvbFN0ciwgImh0dHAi
KSkgeworICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc2NoZW1lU3Ry
LCAiYmFzaWMiKSkKICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uTWV0aG9kID0gTlNVUkxBdXRo
ZW50aWNhdGlvbk1ldGhvZEhUVFBCYXNpYzsKLSAgICAgICAgZWxzZSBpZiAoIXN0cmNhc2VjbXAo
c2NoZW1lU3RyLCAiZGlnZXN0IikpCisgICAgICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKHNjaGVtZVN0ciwgImRpZ2VzdCIpKQogICAgICAgICAgICAgYXV0aGVudGlj
YXRpb25NZXRob2QgPSBOU1VSTEF1dGhlbnRpY2F0aW9uTWV0aG9kSFRUUERpZ2VzdDsKICAgICB9
CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlBy
ZWZlcmVuY2VzLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJl
bmNlcy5tbQppbmRleCBlMDRjNGExZjhlMDIwNzgyZWNkNjZhMTc1NmY5MTgwNTE5MmQ1YmVmLi5h
NjcxYjM2NzliOWQ4N2UxNDVmOWEwOTc4NTEzYzk3MjNiYTc3YmE1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KQEAgLTc2LDE0ICs3
NiwxNCBAQCBzdGF0aWMgTlNNdXRhYmxlRGljdGlvbmFyeSAqd2ViUHJlZmVyZW5jZXNJbnN0YW5j
ZXM7CiAKIHN0YXRpYyB1bnNpZ25lZCB3ZWJQcmVmZXJlbmNlc0luc3RhbmNlQ291bnRXaXRoUHJp
dmF0ZUJyb3dzaW5nRW5hYmxlZDsKIAotc3RhdGljIGJvb2wgY29udGFpbnMoY29uc3QgY2hhciog
Y29uc3QgYXJyYXlbXSwgaW50IGNvdW50LCBjb25zdCBjaGFyKiBpdGVtKQordGVtcGxhdGU8dW5z
aWduZWQgc2l6ZT4gc3RhdGljIGJvb2wgY29udGFpbnMoY29uc3QgY2hhciogY29uc3QgKCZhcnJh
eSlbc2l6ZV0sIGNvbnN0IGNoYXIqIGl0ZW0pCiB7CiAgICAgaWYgKCFpdGVtKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAg
ICAgIGlmICghc3RyY2FzZWNtcChhcnJheVtpXSwgaXRlbSkpCisgICAgZm9yIChhdXRvKiBzdHJp
bmcgOiBhcnJheSkgeworICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcs
IGl0ZW0pKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIApAQCAtMTQwLDExICsxNDAsMTEgQEAgc3RhdGljIFdlYkNhY2hlTW9kZWwgY2FjaGVN
b2RlbEZvck1haW5CdW5kbGUodm9pZCkKICAgICAgICAgfTsKIAogICAgICAgICBjb25zdCBjaGFy
KiBidW5kbGVJRCA9IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdIFVU
RjhTdHJpbmddOwotICAgICAgICBpZiAoY29udGFpbnMoZG9jdW1lbnRWaWV3ZXJJRHMsIHNpemVv
Zihkb2N1bWVudFZpZXdlcklEcykgLyBzaXplb2YoZG9jdW1lbnRWaWV3ZXJJRHNbMF0pLCBidW5k
bGVJRCkpCisgICAgICAgIGlmIChjb250YWlucyhkb2N1bWVudFZpZXdlcklEcywgYnVuZGxlSUQp
KQogICAgICAgICAgICAgcmV0dXJuIFdlYkNhY2hlTW9kZWxEb2N1bWVudFZpZXdlcjsKLSAgICAg
ICAgaWYgKGNvbnRhaW5zKGRvY3VtZW50QnJvd3NlcklEcywgc2l6ZW9mKGRvY3VtZW50QnJvd3Nl
cklEcykgLyBzaXplb2YoZG9jdW1lbnRCcm93c2VySURzWzBdKSwgYnVuZGxlSUQpKQorICAgICAg
ICBpZiAoY29udGFpbnMoZG9jdW1lbnRCcm93c2VySURzLCBidW5kbGVJRCkpCiAgICAgICAgICAg
ICByZXR1cm4gV2ViQ2FjaGVNb2RlbERvY3VtZW50QnJvd3NlcjsKLSAgICAgICAgaWYgKGNvbnRh
aW5zKHByaW1hcnlXZWJCcm93c2VySURzLCBzaXplb2YocHJpbWFyeVdlYkJyb3dzZXJJRHMpIC8g
c2l6ZW9mKHByaW1hcnlXZWJCcm93c2VySURzWzBdKSwgYnVuZGxlSUQpKQorICAgICAgICBpZiAo
Y29udGFpbnMocHJpbWFyeVdlYkJyb3dzZXJJRHMsIGJ1bmRsZUlEKSkKICAgICAgICAgICAgIHJl
dHVybiBXZWJDYWNoZU1vZGVsUHJpbWFyeVdlYkJyb3dzZXI7CiAKICAgICAgICAgYm9vbCBpc0xp
bmtlZEFnYWluc3RXZWJLaXQgPSBXZWJLaXRMaW5rZWRPbk9yQWZ0ZXIoMCk7CmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMGE1MTIyZWNjOTg0MjRm
Y2NhN2ZhNjNjMTlmZDU1ZjU3YzdkNjJlOC4uN2Q4ZTFmYTAxM2E3NmViNmQ5MWFkM2QxYTMwODYx
YjEzODM4ODNjYSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE3LTExLTI0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KKworICAgICAgICBNb2Rlcm5pemUgc29tZSBhc3BlY3RzIG9mIHRleHQgY29kZWNz
LCBlbGltaW5hdGUgV2ViS2l0IHVzZSBvZiBzdHJjYXNlY21wCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODAwMDkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVt
cFN1cHBvcnRDRy5jcHA6IFJlbW92ZWQgaW5jbHVkZSBvZiBTdHJpbmdFeHRyYXMuaC4KKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwOiBEaXR0by4KKwog
MjAxNy0xMS0yNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9PcHRpb25TZXQuY3BwOgpkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3VwcG9ydENHLmNwcCBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHAKaW5kZXggOGFjYjlhNzAxZjE4ZDliMTZh
YjM5ZDZlZDljYjY4NWYzZTJlODg1MS4uYWJmN2Y4OTg3ZDc4NmI2NmM0NGIxYTExY2IzMGZmYjg2
ZjU1OTAyMyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3Vw
cG9ydENHLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0
Q0cuY3BwCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KIAogI2lmIFBMQVRGT1JNKFdJTikKICNpbmNsdWRlICJN
RDUuaCIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2cvVGVzdEludm9jYXRp
b25DRy5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3Bw
CmluZGV4IDMzYTViODE5YTljNWVjZDRjNDliNzE1NTRkMjdjYzA2NTgyMDY1NjYuLjc2MDNkMzc3
ZTljY2U3NjdhYTUxNzkwNjE3NzllYmMwZWU1NWM2ODUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvY2cvVGVzdEludm9jYXRpb25DRy5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcApAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1
ZGUgPFdlYktpdC9XS0ltYWdlQ0cuaD4KICNpbmNsdWRlIDx3dGYvTUQ1Lmg+CiAjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KIAogI2lmIFBM
QVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxMYXVuY2hTZXJ2aWNlcy9V
VENvcmVUeXBlcy5oPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327726</attachid>
            <date>2017-11-27 21:49:15 -0800</date>
            <delta_ts>2017-11-27 23:19:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-180009-20171127214914.patch</filename>
            <type>text/plain</type>
            <size>162123</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI1MjA3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBA
CisyMDE3LTExLTI3ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBN
b2Rlcm5pemUgc29tZSBhc3BlY3RzIG9mIHRleHQgY29kZWNzLCBlbGltaW5hdGUgV2ViS2l0IHVz
ZSBvZiBzdHJjYXNlY21wCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xODAwMDkKKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVuc2VuLgor
CisgICAgICAgICogYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmNwcDogUmVtb3ZlZCBpbmNsdWRlIG9m
IFN0cmluZ0V4dHJhcy5oLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6IERpdHRv
LgorICAgICAgICAqIGJ5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwOiBEaXR0by4KKyAgICAg
ICAgKiBydW50aW1lL0NvbmZpZ0ZpbGUuY3BwOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1lL0Rh
dGVQcm90b3R5cGUuY3BwOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nVHlwZS5j
cHA6IERpdHRvLgorICAgICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1ZS5jcHA6IERpdHRvLgorICAg
ICAgICAqIHJ1bnRpbWUvSlNEYXRlTWF0aC5jcHA6IERpdHRvLgorICAgICAgICAqIHJ1bnRpbWUv
SlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1lL09w
dGlvbnMuY3BwOiBEaXR0by4KKyAgICAgICAgKEpTQzo6cGFyc2UpOiBVc2UgZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UgaW5zdGVhZCBvZiBzdHJjYXNlY21wLgorCiAyMDE3LTExLTI3ICBT
YWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIFNwcmVhZCBjYW4gZXNj
YXBlIHdoZW4gQ3JlYXRlUmVzdCBkb2VzIG5vdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0FycmF5UHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5jcHAJKHJldmlzaW9uIDIyNTIwNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KLSNpbmNsdWRlIDx3
dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw2IEBA
CiAjaW5jbHVkZSA8d3RmL0JhZ1RvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50
ZXIuaD4KICNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5n
RXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvVW5pcXVlZFN0cmluZ0ltcGwuaD4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAkocmV2aXNpb24gMjI1
MjA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiRXhlY3V0YWJs
ZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJWTUlubGlu
ZXMuaCIKLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBKU0Mgewog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25maWdGaWxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25maWdGaWxlLmNwcAko
cmV2aXNpb24gMjI1MjA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uZmln
RmlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxzdHJp
bmcuaD4KICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9n
Lmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KIAogI2lmIEhBVkUoUkVHRVhfSCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMjUyMDcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNiBAQAogI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogCiAjaWYgSEFWRShMQU5HSU5GT19IKQogI2luY2x1ZGUg
PGxhbmdpbmZvLmg+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGlu
Z1R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
ZGV4aW5nVHlwZS5jcHAJKHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luZGV4aW5nVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDYg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKIAotI2lu
Y2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KLQogbmFtZXNwYWNlIEpTQyB7CiAKIEluZGV4aW5n
VHlwZSBsZWFzdFVwcGVyQm91bmRPZkluZGV4aW5nVHlwZXMoSW5kZXhpbmdUeXBlIGEsIEluZGV4
aW5nVHlwZSBiKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNW
YWx1ZS5jcHAJKHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ0pTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw2IEBACiAjaW5j
bHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJOdW1iZXJPYmplY3QuaCIKICNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KIAog
bmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RGF0ZU1hdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRGF0ZU1hdGguY3BwCShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0RhdGVNYXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNiBA
QAogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdF
eHRyYXMuaD4KIAogI2lmIEhBVkUoRVJSTk9fSCkKICNpbmNsdWRlIDxlcnJuby5oPgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMjI1MjA3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Myw3ICs1Myw2IEBACiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3
dGYvSGV4TnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3
dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL2R0b2EuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVVRGOC5oPgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDIy
NTIwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNp
bmNsdWRlIDx3dGYvTnVtYmVyT2ZDb3Jlcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90aHJlYWRzL1NpZ25hbHMuaD4KIApAQCAtNzEs
MTEgKzcwLDExIEBAIHZvaWQgT3B0aW9uczo6ZW5hYmxlUmVzdHJpY3RlZE9wdGlvbnMoYm8KICAg
ICAKIHN0YXRpYyBib29sIHBhcnNlKGNvbnN0IGNoYXIqIHN0cmluZywgYm9vbCYgdmFsdWUpCiB7
Ci0gICAgaWYgKCFzdHJjYXNlY21wKHN0cmluZywgInRydWUiKSB8fCAhc3RyY2FzZWNtcChzdHJp
bmcsICJ5ZXMiKSB8fCAhc3RyY21wKHN0cmluZywgIjEiKSkgeworICAgIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcsICJ0cnVlIikgfHwgZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2Uoc3RyaW5nLCAieWVzIikgfHwgIXN0cmNtcChzdHJpbmcsICIxIikpIHsKICAg
ICAgICAgdmFsdWUgPSB0cnVlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgaWYg
KCFzdHJjYXNlY21wKHN0cmluZywgImZhbHNlIikgfHwgIXN0cmNhc2VjbXAoc3RyaW5nLCAibm8i
KSB8fCAhc3RyY21wKHN0cmluZywgIjAiKSkgeworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShzdHJpbmcsICJmYWxzZSIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKHN0cmluZywgIm5vIikgfHwgIXN0cmNtcChzdHJpbmcsICIwIikpIHsKICAgICAgICAgdmFs
dWUgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTI3LDE3ICsxMjYs
MTcgQEAgc3RhdGljIGJvb2wgcGFyc2UoY29uc3QgY2hhciogc3RyaW5nLCBjbwogCiBzdGF0aWMg
Ym9vbCBwYXJzZShjb25zdCBjaGFyKiBzdHJpbmcsIEdDTG9nZ2luZzo6TGV2ZWwmIHZhbHVlKQog
ewotICAgIGlmICghc3RyY2FzZWNtcChzdHJpbmcsICJub25lIikgfHwgIXN0cmNhc2VjbXAoc3Ry
aW5nLCAibm8iKSB8fCAhc3RyY2FzZWNtcChzdHJpbmcsICJmYWxzZSIpIHx8ICFzdHJjbXAoc3Ry
aW5nLCAiMCIpKSB7CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmlu
ZywgIm5vbmUiKSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcsICJubyIp
IHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmluZywgImZhbHNlIikgfHwgIXN0
cmNtcChzdHJpbmcsICIwIikpIHsKICAgICAgICAgdmFsdWUgPSBHQ0xvZ2dpbmc6Ok5vbmU7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlmICghc3RyY2FzZWNtcChzdHJpbmcs
ICJiYXNpYyIpIHx8ICFzdHJjYXNlY21wKHN0cmluZywgInllcyIpIHx8ICFzdHJjYXNlY21wKHN0
cmluZywgInRydWUiKSB8fCAhc3RyY21wKHN0cmluZywgIjEiKSkgeworICAgIGlmIChlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcsICJiYXNpYyIpIHx8IGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKHN0cmluZywgInllcyIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKHN0cmluZywgInRydWUiKSB8fCAhc3RyY21wKHN0cmluZywgIjEiKSkgewogICAgICAg
ICB2YWx1ZSA9IEdDTG9nZ2luZzo6QmFzaWM7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAotICAgIGlmICghc3RyY2FzZWNtcChzdHJpbmcsICJ2ZXJib3NlIikgfHwgIXN0cmNtcChzdHJp
bmcsICIyIikpIHsKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5n
LCAidmVyYm9zZSIpIHx8ICFzdHJjbXAoc3RyaW5nLCAiMiIpKSB7CiAgICAgICAgIHZhbHVlID0g
R0NMb2dnaW5nOjpWZXJib3NlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBT
b3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwko
cmV2aXNpb24gMjI1MjA3KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwzOSBAQAorMjAxNy0xMS0yNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5j
b20+CisKKyAgICAgICAgTW9kZXJuaXplIHNvbWUgYXNwZWN0cyBvZiB0ZXh0IGNvZGVjcywgZWxp
bWluYXRlIFdlYktpdCB1c2Ugb2Ygc3RyY2FzZWNtcAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMDA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxl
eCBDaHJpc3RlbnNlbi4KKworICAgICAgICAqIHd0Zi9Bc3NlcnRpb25zLmNwcDogUmVtb3ZlZCBp
bmNsdWRlIG9mIFN0cmluZ0V4dHJhcy5oLgorICAgICAgICAoV1RGTG9nQ2hhbm5lbEJ5TmFtZSk6
IFVzZSBlcXVhbElnbm9yaW5nQVNDSUlDYXNlIGluc3RlYWQgb2Ygc3RyY2FzZWNtcC4KKyAgICAg
ICAgKiB3dGYvRGF0ZU1hdGguY3BwOiBSZW1vdmVkIGluY2x1ZGUgb2YgU3RyaW5nRXh0cmFzLmgu
CisgICAgICAgICogd3RmL01ENS5jcHA6IERpdHRvLiBBbHNvIHJlbW92ZWQgaW5jbHVkZSBvZiBD
U3RyaW5nLmguCisgICAgICAgICogd3RmL1NIQTEuY3BwOiBEaXR0by4KKworICAgICAgICAqIHd0
Zi9TdHJpbmdFeHRyYXMuaDoKKyAgICAgICAgKHN0cm5jYXNlY21wKTogRGVsZXRlZC4KKyAgICAg
ICAgKHN0cmNhc2VjbXApOiBEZWxldGVkLgorCisgICAgICAgICogd3RmL1N0cmluZ1ByaW50U3Ry
ZWFtLmNwcDogUmVtb3ZlZCBpbmNsdWRlIG9mIFN0cmluZ0V4dHJhcy5oLgorICAgICAgICAqIHd0
Zi90ZXh0L0Jhc2U2NC5jcHA6IERpdHRvLgorCisgICAgICAgICogd3RmL3RleHQvTGluZUVuZGlu
Zy5jcHA6CisgICAgICAgIChXVEY6Om5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9MRik6IFJlcGxhY2Vk
IG9sZCBtb3JlIGdlbmVyYWwgcHVycG9zZSBmdW5jdGlvbiB3aXRoCisgICAgICAgIHRoaXMuIENo
YW5nZWQgYXJndW1lbnQgdHlwZSB0byB2ZWN0b3IgYW5kIHVzZWQgYW4gcnZhbHVlIHJlZmVyZW5j
ZSBhbmQgcmV0dXJuIHZhbHVlLgorICAgICAgICBBbHNvIGZpeGVkIHNvbWUgc21hbGwgbG9naWMg
ZXJyb3JzLgorICAgICAgICAoV1RGOjpub3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JMRik6IERpdHRv
LgorICAgICAgICAoV1RGOjpub3JtYWxpemVMaW5lRW5kaW5nc1RvTmF0aXZlKTogVXBkYXRlZCBm
b3IgYWJvdmUgY2hhbmdlcy4KKyAgICAgICAgKiB3dGYvdGV4dC9MaW5lRW5kaW5nLmg6IFVwZGF0
ZWQgZm9yIGFib3ZlIGNoYW5nZXMuCisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdDb21tb24u
aDoKKyAgICAgICAgKFdURjo6ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSk6IEFkZGVkIG92ZXJsb2Fk
IGZvciBjb25zdCBjaGFyKi4KKyAgICAgICAgKFdURjo6ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UpOiBEaXR0by4KKworICAgICAgICAqIHd0Zi90ZXh0L1RleHRTdHJlYW0uY3BwOiBSZW1v
dmVkIGluY2x1ZGUgb2YgU3RyaW5nRXh0cmFzLmguCisgICAgICAgICogd3RmL3RleHQvV1RGU3Ry
aW5nLmNwcDogRGl0dG8uCisgICAgICAgICogd3RmL3VuaWNvZGUvaWN1L0NvbGxhdG9ySUNVLmNw
cDogRGl0dG8uCisKIDIwMTctMTEtMjcgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
IAogICAgICAgICBNb3ZlIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KCkgZnJvbSBTb2NrZXRTdHJl
YW1IYW5kbGVJbXBsQ0ZOZXQuY3BwIHRvIE1haW5UaHJlYWQuaApJbmRleDogU291cmNlL1dURi93
dGYvQXNzZXJ0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXNzZXJ0aW9u
cy5jcHAJKHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw2IEBACiAjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9TdGFja1RyYWNlLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNTIwLDcgKzUxOSw3IEBAIFdURkxvZ0NoYW5u
ZWwqIFdURkxvZ0NoYW5uZWxCeU5hbWUoV1RGTG8KIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgV1RGTG9nQ2hhbm5lbCogY2hhbm5lbCA9IGNoYW5u
ZWxzW2ldOwotICAgICAgICBpZiAoIXN0cmNhc2VjbXAobmFtZSwgY2hhbm5lbC0+bmFtZSkpCisg
ICAgICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIGNoYW5uZWwtPm5hbWUpKQog
ICAgICAgICAgICAgcmV0dXJuIGNoYW5uZWw7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9EYXRlTWF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRGF0ZU1hdGguY3Bw
CShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3VyY2UvV1RGL3d0Zi9EYXRlTWF0aC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc3LDcgKzc3LDYgQEAKICNpbmNsdWRlICJDdXJyZW50VGltZS5oIgogI2lu
Y2x1ZGUgIk1hdGhFeHRyYXMuaCIKICNpbmNsdWRlICJTdGRMaWJFeHRyYXMuaCIKLSNpbmNsdWRl
ICJTdHJpbmdFeHRyYXMuaCIKIAogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxsaW1p
dHMuaD4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01ENS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvTUQ1LmNwcAkocmV2aXNpb24gMjI1MjA3KQorKysgU291cmNlL1dURi93dGYvTUQ1
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTAgKzUxLDYgQEAKICNpbmNsdWRlICJNRDUuaCIK
IAogI2luY2x1ZGUgIkFzc2VydGlvbnMuaCIKLSNpZm5kZWYgTkRFQlVHCi0jaW5jbHVkZSAiU3Ry
aW5nRXh0cmFzLmgiCi0jaW5jbHVkZSAidGV4dC9DU3RyaW5nLmgiCi0jZW5kaWYKICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL1dU
Ri93dGYvU0hBMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU0hBMS5jcHAJKHJl
dmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XVEYvd3RmL1NIQTEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw4ICszMyw2IEBACiAjaW5jbHVkZSAiU0hBMS5oIgogCiAjaW5jbHVkZSAiQXNzZXJ0
aW9ucy5oIgotCi0jaW5jbHVkZSAiU3RyaW5nRXh0cmFzLmgiCiAjaW5jbHVkZSAidGV4dC9DU3Ry
aW5nLmgiCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL1dURi93dGYvU3RyaW5nRXh0
cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RyaW5nRXh0cmFzLmgJKHJldmlz
aW9uIDIyNTIwNykKKysrIFNvdXJjZS9XVEYvd3RmL1N0cmluZ0V4dHJhcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgRWxl
Y3Ryb25pYyBBcnRzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CkBAIC0yNCwzMyArMjQsMTAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgV1RG
X1N0cmluZ0V4dHJhc19oCi0jZGVmaW5lIFdURl9TdHJpbmdFeHRyYXNfaAorI3ByYWdtYSBvbmNl
CiAKLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0
cmluZy5oPgogCi0jaWYgSEFWRShTVFJJTkdTX0gpIAotI2luY2x1ZGUgPHN0cmluZ3MuaD4gCi0j
ZW5kaWYgCi0KLSNpZiBDT01QSUxFUihNU1ZDKQotCi0vLyBGSVhNRTogV2Ugc2hvdWxkIHN0b3Ag
dXNpbmcgdGhlc2UgZW50aXJlbHkgYW5kIHVzZSBzdWl0YWJsZSB2ZXJzaW9ucyBvZiBlcXVhbEln
bm9yaW5nQVNDSUlDYXNlIGluc3RlYWQuCi0KLWlubGluZSBpbnQgc3RybmNhc2VjbXAoY29uc3Qg
Y2hhciogczEsIGNvbnN0IGNoYXIqIHMyLCBzaXplX3QgbGVuKQotewotICAgIHJldHVybiBfc3Ry
bmljbXAoczEsIHMyLCBsZW4pOwotfQotCi1pbmxpbmUgaW50IHN0cmNhc2VjbXAoY29uc3QgY2hh
ciogczEsIGNvbnN0IGNoYXIqIHMyKQotewotICAgIHJldHVybiBfc3RyaWNtcChzMSwgczIpOwot
fQotCi0jZW5kaWYKLQogI2lmICFIQVZFKFNUUk5TVFIpCiAKIGlubGluZSBjaGFyKiBzdHJuc3Ry
KGNvbnN0IGNoYXIqIGJ1ZmZlciwgY29uc3QgY2hhciogdGFyZ2V0LCBzaXplX3QgYnVmZmVyTGVu
Z3RoKQpAQCAtNjYsNSArNDMsMyBAQCBpbmxpbmUgY2hhciogc3RybnN0cihjb25zdCBjaGFyKiBi
dWZmZXIsCiB9CiAKICNlbmRpZgotCi0jZW5kaWYgLy8gV1RGX1N0cmluZ0V4dHJhc19oCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9TdHJpbmdQcmludFN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvU3RyaW5nUHJpbnRTdHJlYW0uY3BwCShyZXZpc2lvbiAyMjUyMDcpCisrKyBT
b3VyY2UvV1RGL3d0Zi9TdHJpbmdQcmludFN0cmVhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDcgKzI5LDYgQEAKICNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2lu
Y2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgog
CiBuYW1lc3BhY2UgV1RGIHsKIApJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmNwcAkocmV2aXNpb24g
MjI1MjA3KQorKysgU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSAiQmFzZTY0LmgiCiAKICNpbmNsdWRlIDxsaW1p
dHMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL1dURi93dGYvdGV4
dC9MaW5lRW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L0xpbmVF
bmRpbmcuY3BwCShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0xpbmVF
bmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNSwgMjAwNiwgMjAwOCwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMyLDExNCArMzIsOTMgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJMaW5lRW5kaW5nLmgiCiAKLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCi1uYW1lc3BhY2UgewotCi1jbGFzcyBPdXRwdXRCdWZmZXIgewotcHVibGlj
OgotICAgIHZpcnR1YWwgdWludDhfdCogYWxsb2NhdGUoc2l6ZV90KSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGNvcHkoY29uc3QgQ1N0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIH5PdXRwdXRCdWZm
ZXIoKSB7IH0KLX07Ci0KLWNsYXNzIENTdHJpbmdCdWZmZXIgOiBwdWJsaWMgT3V0cHV0QnVmZmVy
IHsKLXB1YmxpYzoKLSAgICBDU3RyaW5nQnVmZmVyKENTdHJpbmcmIGJ1ZmZlcikKLSAgICAgICAg
OiBtX2J1ZmZlcihidWZmZXIpCi0gICAgewotICAgIH0KLSAgICB2aXJ0dWFsIH5DU3RyaW5nQnVm
ZmVyKCkgeyB9Ci0KLSAgICB1aW50OF90KiBhbGxvY2F0ZShzaXplX3Qgc2l6ZSkgb3ZlcnJpZGUK
LSAgICB7Ci0gICAgICAgIGNoYXIqIHB0cjsKLSAgICAgICAgbV9idWZmZXIgPSBDU3RyaW5nOjpu
ZXdVbmluaXRpYWxpemVkKHNpemUsIHB0cik7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PHVpbnQ4X3QqPihwdHIpOwotICAgIH0KLQotICAgIHZvaWQgY29weShjb25zdCBDU3RyaW5n
JiBzb3VyY2UpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBtX2J1ZmZlciA9IHNvdXJjZTsKLSAg
ICB9Ci0KLSAgICBjb25zdCBDU3RyaW5nJiBidWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZl
cjsgfQorbmFtZXNwYWNlIFdURiB7CiAKLXByaXZhdGU6Ci0gICAgQ1N0cmluZyBtX2J1ZmZlcjsK
LX07CisvLyBGSVhNRTogSG93IGNhbiB0aGlzIGJlIHRoZSBjb3JyZWN0IGNvbmRpdGlvbmFsPwor
Ly8gSSBkb24ndCB0aGluayB0aGUgT1MgaXMgcmVhbGx5IHdoYXQgZGV0ZXJtaW5lcyAibmF0aXZl
IGxpbmUgZW5kaW5ncyIuCisjaWYgIU9TKFdJTkRPV1MpCiAKLSNpZiBPUyhXSU5ET1dTKQotY2xh
c3MgVmVjdG9yQ2hhckFwcGVuZEJ1ZmZlciA6IHB1YmxpYyBPdXRwdXRCdWZmZXIgewotcHVibGlj
OgotICAgIFZlY3RvckNoYXJBcHBlbmRCdWZmZXIoVmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIpCi0g
ICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQotICAgIHsKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4g
bm9ybWFsaXplTGluZUVuZGluZ3NUb0xGKFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSkKK3sKKyAg
ICBzaXplX3QgcmVzdWx0TGVuZ3RoID0gMDsKKyAgICBib29sIG5lZWRGaXggPSBmYWxzZTsKKyAg
ICBjb25zdCBhdXRvKiBwID0gc291cmNlLmRhdGEoKTsKKyAgICBhdXRvKiBlbmQgPSBwICsgc291
cmNlLnNpemUoKTsKKyAgICB3aGlsZSAocCAhPSBlbmQpIHsKKyAgICAgICAgY2hhciBjID0gKnAr
KzsKKyAgICAgICAgaWYgKGMgPT0gJ1xyJyAmJiBwICE9IGVuZCAmJiAqcCA9PSAnXG4nKSB7Cisg
ICAgICAgICAgICAvLyBUdXJuIENSTEYgaW50byBMRi4KKyAgICAgICAgICAgICsrcDsKKyAgICAg
ICAgICAgIG5lZWRGaXggPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ1xyJykgewor
ICAgICAgICAgICAgLy8gVHVybiBDUiBpbnRvIExGLgorICAgICAgICAgICAgbmVlZEZpeCA9IHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgKytyZXN1bHRMZW5ndGg7CiAgICAgfQotICAgIHZpcnR1
YWwgflZlY3RvckNoYXJBcHBlbmRCdWZmZXIoKSB7IH0KIAotICAgIHVpbnQ4X3QqIGFsbG9jYXRl
KHNpemVfdCBzaXplKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBt
X2J1ZmZlci5zaXplKCk7Ci0gICAgICAgIG1fYnVmZmVyLmdyb3cob2xkU2l6ZSArIHNpemUpOwot
ICAgICAgICByZXR1cm4gbV9idWZmZXIuZGF0YSgpICsgb2xkU2l6ZTsKLSAgICB9CisgICAgaWYg
KCFuZWVkRml4KQorICAgICAgICByZXR1cm4gV1RGTW92ZShzb3VyY2UpOwogCi0gICAgdm9pZCBj
b3B5KGNvbnN0IENTdHJpbmcmIHNvdXJjZSkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIG1fYnVm
ZmVyLmFwcGVuZChzb3VyY2UuZGF0YSgpLCBzb3VyY2UubGVuZ3RoKCkpOworICAgIFZlY3Rvcjx1
aW50OF90PiByZXN1bHQocmVzdWx0TGVuZ3RoKTsKKyAgICBwID0gc291cmNlLmRhdGEoKTsKKyAg
ICBhdXRvKiBxID0gcmVzdWx0LmRhdGEoKTsKKyAgICB3aGlsZSAocCAhPSBlbmQpIHsKKyAgICAg
ICAgY2hhciBjID0gKnArKzsKKyAgICAgICAgaWYgKGMgPT0gJ1xyJyAmJiBwICE9IGVuZCAmJiAq
cCA9PSAnXG4nKSB7CisgICAgICAgICAgICAvLyBUdXJuIENSTEYgaW50byBMRi4KKyAgICAgICAg
ICAgICsrcDsKKyAgICAgICAgICAgICpxKysgPSAnXG4nOworICAgICAgICB9IGVsc2UgaWYgKGMg
PT0gJ1xyJykgeworICAgICAgICAgICAgLy8gVHVybiBDUiBpbnRvIExGLgorICAgICAgICAgICAg
KnErKyA9ICdcbic7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBMZWF2ZSBvdGhl
ciBjaGFyYWN0ZXJzIGFsb25lLgorICAgICAgICAgICAgKnErKyA9IGM7CisgICAgICAgIH0KICAg
ICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KIAotcHJpdmF0ZToKLSAgICBWZWN0b3I8dWludDhf
dD4mIG1fYnVmZmVyOwotfTsKICNlbmRpZgogCi12b2lkIGludGVybmFsTm9ybWFsaXplTGluZUVu
ZGluZ3NUb0NSTEYoY29uc3QgQ1N0cmluZyYgZnJvbSwgT3V0cHV0QnVmZmVyJiBidWZmZXIpCitW
ZWN0b3I8dWludDhfdD4gbm9ybWFsaXplTGluZUVuZGluZ3NUb0NSTEYoVmVjdG9yPHVpbnQ4X3Q+
JiYgc291cmNlKQogewotICAgIGlmICghZnJvbS5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIC8vIENvbXB1dGUgdGhlIG5ldyBsZW5ndGguCi0gICAgc2l6ZV90IG5ld0xlbiA9IDA7Ci0g
ICAgY29uc3QgY2hhciogcCA9IGZyb20uZGF0YSgpOwotICAgIHdoaWxlIChwIDwgZnJvbS5kYXRh
KCkgKyBmcm9tLmxlbmd0aCgpKSB7CisgICAgc2l6ZV90IHJlc3VsdExlbmd0aCA9IDA7CisgICAg
Y29uc3QgYXV0byogcCA9IHNvdXJjZS5kYXRhKCk7CisgICAgYXV0byogZW5kID0gcCArIHNvdXJj
ZS5zaXplKCk7CisgICAgd2hpbGUgKHAgIT0gZW5kKSB7CiAgICAgICAgIGNoYXIgYyA9ICpwKys7
CiAgICAgICAgIGlmIChjID09ICdccicpIHsKLSAgICAgICAgICAgIC8vIFNhZmUgdG8gbG9vayBh
aGVhZCBiZWNhdXNlIG9mIHRyYWlsaW5nICdcMCcuCi0gICAgICAgICAgICBpZiAoKnAgIT0gJ1xu
JykgewotICAgICAgICAgICAgICAgIC8vIFR1cm4gQ1IgaW50byBDUkxGLgotICAgICAgICAgICAg
ICAgIG5ld0xlbiArPSAyOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gVHVybiBDUiBv
ciBDUkxGIGludG8gQ1JMRjsKKyAgICAgICAgICAgIGlmIChwICE9IGVuZCAmJiAqcCA9PSAnXG4n
KQorICAgICAgICAgICAgICAgICsrcDsKKyAgICAgICAgICAgIHJlc3VsdExlbmd0aCArPSAyOwog
ICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ1xuJykgewogICAgICAgICAgICAgLy8gVHVybiBMRiBp
bnRvIENSTEYuCi0gICAgICAgICAgICBuZXdMZW4gKz0gMjsKKyAgICAgICAgICAgIHJlc3VsdExl
bmd0aCArPSAyOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gTGVhdmUgb3RoZXIg
Y2hhcmFjdGVycyBhbG9uZS4KLSAgICAgICAgICAgIG5ld0xlbiArPSAxOworICAgICAgICAgICAg
cmVzdWx0TGVuZ3RoICs9IDE7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKG5ld0xlbiA8IGZy
b20ubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChuZXdMZW4gPT0gZnJvbS5s
ZW5ndGgoKSkgewotICAgICAgICBidWZmZXIuY29weShmcm9tKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KIAotICAgIHAgPSBmcm9tLmRhdGEoKTsKLSAgICB1aW50OF90KiBxID0gYnVmZmVyLmFs
bG9jYXRlKG5ld0xlbik7CisgICAgaWYgKHJlc3VsdExlbmd0aCA9PSBzb3VyY2Uuc2l6ZSgpKQor
ICAgICAgICByZXR1cm4gV1RGTW92ZShzb3VyY2UpOwogCi0gICAgLy8gTWFrZSBhIGNvcHkgb2Yg
dGhlIHN0cmluZy4KLSAgICB3aGlsZSAocCA8IGZyb20uZGF0YSgpICsgZnJvbS5sZW5ndGgoKSkg
eworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQocmVzdWx0TGVuZ3RoKTsKKyAgICBwID0gc291
cmNlLmRhdGEoKTsKKyAgICBhdXRvKiBxID0gcmVzdWx0LmRhdGEoKTsKKyAgICB3aGlsZSAocCAh
PSBlbmQpIHsKICAgICAgICAgY2hhciBjID0gKnArKzsKICAgICAgICAgaWYgKGMgPT0gJ1xyJykg
ewotICAgICAgICAgICAgLy8gU2FmZSB0byBsb29rIGFoZWFkIGJlY2F1c2Ugb2YgdHJhaWxpbmcg
J1wwJy4KLSAgICAgICAgICAgIGlmICgqcCAhPSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgLy8g
VHVybiBDUiBpbnRvIENSTEYuCi0gICAgICAgICAgICAgICAgKnErKyA9ICdccic7Ci0gICAgICAg
ICAgICAgICAgKnErKyA9ICdcbic7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBUdXJu
IENSIG9yIENSTEYgaW50byBDUkxGOworICAgICAgICAgICAgaWYgKHAgIT0gZW5kICYmICpwID09
ICdcbicpCisgICAgICAgICAgICAgICAgKytwOworICAgICAgICAgICAgKnErKyA9ICdccic7Cisg
ICAgICAgICAgICAqcSsrID0gJ1xuJzsKICAgICAgICAgfSBlbHNlIGlmIChjID09ICdcbicpIHsK
ICAgICAgICAgICAgIC8vIFR1cm4gTEYgaW50byBDUkxGLgogICAgICAgICAgICAgKnErKyA9ICdc
cic7CkBAIC0xNDksNzggKzEyOCwxNSBAQCB2b2lkIGludGVybmFsTm9ybWFsaXplTGluZUVuZGlu
Z3NUb0NSTEYoCiAgICAgICAgICAgICAqcSsrID0gYzsKICAgICAgICAgfQogICAgIH0KKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi19OwotCi1uYW1lc3BhY2UgV1RGIHsKLQotLy8gTm9ybWFsaXpl
IGFsbCBsaW5lLWVuZGluZ3MgdG8gQ1Igb3IgTEYuCi1zdGF0aWMgdm9pZCBub3JtYWxpemVUb0NS
T3JMRihjb25zdCBDU3RyaW5nJiBmcm9tLCBWZWN0b3I8dWludDhfdD4mIHJlc3VsdCwgYm9vbCB0
b0NSKQotewotICAgIC8vIENvbXB1dGUgdGhlIG5ldyBsZW5ndGguCi0gICAgc2l6ZV90IG5ld0xl
biA9IDA7Ci0gICAgYm9vbCBuZWVkRml4ID0gZmFsc2U7Ci0gICAgY29uc3QgY2hhciogcCA9IGZy
b20uZGF0YSgpOwotICAgIGNoYXIgZnJvbUVuZGluZ0NoYXIgPSB0b0NSID8gJ1xuJyA6ICdccic7
Ci0gICAgY2hhciB0b0VuZGluZ0NoYXIgPSB0b0NSID8gJ1xyJyA6ICdcbic7Ci0gICAgd2hpbGUg
KHAgPCBmcm9tLmRhdGEoKSArIGZyb20ubGVuZ3RoKCkpIHsKLSAgICAgICAgY2hhciBjID0gKnAr
KzsKLSAgICAgICAgaWYgKGMgPT0gJ1xyJyAmJiAqcCA9PSAnXG4nKSB7Ci0gICAgICAgICAgICAv
LyBUdXJuIENSTEYgaW50byBDUiBvciBMRi4KLSAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAg
IG5lZWRGaXggPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKGMgPT0gZnJvbUVuZGluZ0NoYXIp
IHsKLSAgICAgICAgICAgIC8vIFR1cm4gQ1IvTEYgaW50byBMRi9DUi4KLSAgICAgICAgICAgIG5l
ZWRGaXggPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIG5ld0xlbiArPSAxOwotICAgIH0KLQot
ICAgIC8vIEdyb3cgdGhlIHJlc3VsdCBidWZmZXIuCi0gICAgcCA9IGZyb20uZGF0YSgpOwotICAg
IHNpemVfdCBvbGRSZXN1bHRTaXplID0gcmVzdWx0LnNpemUoKTsKLSAgICByZXN1bHQuZ3Jvdyhv
bGRSZXN1bHRTaXplICsgbmV3TGVuKTsKLSAgICB1aW50OF90KiBxID0gcmVzdWx0LmRhdGEoKSAr
IG9sZFJlc3VsdFNpemU7Ci0KLSAgICAvLyBJZiBubyBuZWVkIHRvIGZpeCB0aGUgc3RyaW5nLCBq
dXN0IGNvcHkgdGhlIHN0cmluZyBvdmVyLgotICAgIGlmICghbmVlZEZpeCkgewotICAgICAgICBt
ZW1jcHkocSwgcCwgZnJvbS5sZW5ndGgoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyBNYWtlIGEgY29weSBvZiB0aGUgc3RyaW5nLgotICAgIHdoaWxlIChwIDwgZnJvbS5kYXRh
KCkgKyBmcm9tLmxlbmd0aCgpKSB7Ci0gICAgICAgIGNoYXIgYyA9ICpwKys7Ci0gICAgICAgIGlm
IChjID09ICdccicgJiYgKnAgPT0gJ1xuJykgewotICAgICAgICAgICAgLy8gVHVybiBDUkxGIG9y
IENSIGludG8gQ1Igb3IgTEYuCi0gICAgICAgICAgICBwKys7Ci0gICAgICAgICAgICAqcSsrID0g
dG9FbmRpbmdDaGFyOwotICAgICAgICB9IGVsc2UgaWYgKGMgPT0gZnJvbUVuZGluZ0NoYXIpIHsK
LSAgICAgICAgICAgIC8vIFR1cm4gQ1IvTEYgaW50byBMRi9DUi4KLSAgICAgICAgICAgICpxKysg
PSB0b0VuZGluZ0NoYXI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBMZWF2ZSBv
dGhlciBjaGFyYWN0ZXJzIGFsb25lLgotICAgICAgICAgICAgKnErKyA9IGM7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLUNTdHJpbmcgbm9ybWFsaXplTGluZUVuZGluZ3NUb0NSTEYoY29uc3QgQ1N0
cmluZyYgZnJvbSkKLXsKLSAgICBDU3RyaW5nIHJlc3VsdDsKLSAgICA6OkNTdHJpbmdCdWZmZXIg
YnVmZmVyKHJlc3VsdCk7Ci0gICAgaW50ZXJuYWxOb3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JMRihm
cm9tLCBidWZmZXIpOwotICAgIHJldHVybiBidWZmZXIuYnVmZmVyKCk7Ci19Ci0KLXZvaWQgbm9y
bWFsaXplQW5kQXBwZW5kTGluZUVuZGluZ3NUb05hdGl2ZShjb25zdCBDU3RyaW5nJiBmcm9tLCBW
ZWN0b3I8dWludDhfdD4mIHJlc3VsdCkKK1ZlY3Rvcjx1aW50OF90PiBub3JtYWxpemVMaW5lRW5k
aW5nc1RvTmF0aXZlKFZlY3Rvcjx1aW50OF90PiYmIGZyb20pCiB7CiAjaWYgT1MoV0lORE9XUykK
LSAgICBWZWN0b3JDaGFyQXBwZW5kQnVmZmVyIGJ1ZmZlcihyZXN1bHQpOwotICAgIGludGVybmFs
Tm9ybWFsaXplTGluZUVuZGluZ3NUb0NSTEYoZnJvbSwgYnVmZmVyKTsKKyAgICByZXR1cm4gbm9y
bWFsaXplTGluZUVuZGluZ3NUb0NSTEYoV1RGTW92ZShmcm9tKSk7CiAjZWxzZQotICAgIG5vcm1h
bGl6ZVRvQ1JPckxGKGZyb20sIHJlc3VsdCwgZmFsc2UpOworICAgIHJldHVybiBub3JtYWxpemVM
aW5lRW5kaW5nc1RvTEYoV1RGTW92ZShmcm9tKSk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNl
L1dURi93dGYvdGV4dC9MaW5lRW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
dGV4dC9MaW5lRW5kaW5nLmgJKHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XVEYvd3RmL3Rl
eHQvTGluZUVuZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOCwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMyLDE4ICszMiwxNiBAQAogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIAogbmFtZXNwYWNlIFdURiB7CiAKIC8vIE5vcm1hbGl6ZSBhbGwgbGluZS1lbmRpbmdzIGlu
IHRoZSBnaXZlbiBzdHJpbmcgdG8gQ1JMRi4KLVdURl9FWFBPUlQgQ1N0cmluZyBub3JtYWxpemVM
aW5lRW5kaW5nc1RvQ1JMRihjb25zdCBDU3RyaW5nJiBmcm9tKTsKK1dURl9FWFBPUlQgVmVjdG9y
PHVpbnQ4X3Q+IG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9DUkxGKFZlY3Rvcjx1aW50OF90PiYmKTsK
IAotLy8gTm9ybWFsaXplIGFsbCBsaW5lLWVuZGluZ3MgaW4gdGhlIGdpdmVuIHN0cmluZyB0byB0
aGUgbmF0aXZlIGxpbmUtZW5kaW5ncyBhbmQgYXBwZW5kIHRoZSByZXN1bHQgdG8gdGhlIGdpdmVu
IGJ1ZmZlci4KLS8vIChOb3JtYWxpemUgdG8gQ1JMRiBvbiBXaW5kb3dzIGFuZCBub3JtYWxpemUg
dG8gTEYgb24gYWxsIG90aGVyIHBsYXRmb3Jtcy4pCi1XVEZfRVhQT1JUIHZvaWQgbm9ybWFsaXpl
QW5kQXBwZW5kTGluZUVuZGluZ3NUb05hdGl2ZShjb25zdCBDU3RyaW5nJiBmcm9tLCBWZWN0b3I8
dWludDhfdD4mIHJlc3VsdCk7CisvLyBOb3JtYWxpemUgYWxsIGxpbmUtZW5kaW5ncyAgdG8gQ1JM
RiBvbiBXaW5kb3dzIGFuZCB0byBMRiBvbiBhbGwgb3RoZXIgcGxhdGZvcm1zLgorV1RGX0VYUE9S
VCBWZWN0b3I8dWludDhfdD4gbm9ybWFsaXplTGluZUVuZGluZ3NUb05hdGl2ZShWZWN0b3I8dWlu
dDhfdD4mJik7CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6Om5vcm1hbGl6ZUxp
bmVFbmRpbmdzVG9DUkxGOwotdXNpbmcgV1RGOjpub3JtYWxpemVBbmRBcHBlbmRMaW5lRW5kaW5n
c1RvTmF0aXZlOwordXNpbmcgV1RGOjpub3JtYWxpemVMaW5lRW5kaW5nc1RvTmF0aXZlOwpJbmRl
eDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbW1vbi5oCShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0
NSw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHVuc2lnbmUKIAogdGVtcGxh
dGU8dHlwZW5hbWUgU3RyaW5nQ2xhc3MsIHVuc2lnbmVkIGxlbmd0aD4gYm9vbCBlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZUNvbW1vbihjb25zdCBTdHJpbmdDbGFzcyYsIGNvbnN0IGNoYXIg
KCZsb3dlcmNhc2VMZXR0ZXJzKVtsZW5ndGhdKTsKIAorYm9vbCBlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7Cit0ZW1wbGF0ZTx1bnNpZ25lZCBsb3dlcmNh
c2VMZXR0ZXJzTGVuZ3RoPiBib29sIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0
IGNoYXIqLCBjb25zdCBjaGFyICgmbG93ZXJjYXNlTGV0dGVycylbbG93ZXJjYXNlTGV0dGVyc0xl
bmd0aF0pOworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogaW5saW5lIFQgbG9hZFVuYWxpZ25lZChj
b25zdCBjaGFyKiBzKQogewpAQCAtNjUyLDYgKzY1NSwxOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBT
dHJpbmdDbGFzcywgdW5zaWduZWQgCiAgICAgcmV0dXJuIHN0YXJ0c1dpdGhMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2VDb21tb25XaXRob3V0TGVuZ3RoKHN0cmluZywgcG9pbnRlcik7CiB9CiAKK2lu
bGluZSBib29sIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgY2hhciogYSwgY29uc3QgY2hh
ciogYikKK3sKKyAgICBhdXRvIGxlbmd0aCA9IHN0cmxlbihhKTsKKyAgICByZXR1cm4gbGVuZ3Ro
ID09IHN0cmxlbihiKSAmJiBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGEsIGIsIGxlbmd0aCk7Cit9
CisKK3RlbXBsYXRlPHVuc2lnbmVkIGxvd2VyY2FzZUxldHRlcnNMZW5ndGg+IGlubGluZSBib29s
IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IGNoYXIqIHN0cmluZywgY29uc3Qg
Y2hhciAoJmxvd2VyY2FzZUxldHRlcnMpW2xvd2VyY2FzZUxldHRlcnNMZW5ndGhdKQoreworICAg
IGF1dG8gbGVuZ3RoID0gc3RybGVuKGxvd2VyY2FzZUxldHRlcnMpOworICAgIHJldHVybiBzdHJs
ZW4oc3RyaW5nKSA9PSBsZW5ndGggJiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3Ry
aW5nLCBsb3dlcmNhc2VMZXR0ZXJzLCBsZW5ndGgpOworfQorCiB9CiAKIHVzaW5nIFdURjo6ZXF1
YWxJZ25vcmluZ0FTQ0lJQ2FzZTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvVGV4dFN0cmVh
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9UZXh0U3RyZWFtLmNwcAko
cmV2aXNpb24gMjI1MjA3KQorKysgU291cmNlL1dURi93dGYvdGV4dC9UZXh0U3RyZWFtLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIK
IAogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAJKHJldmlzaW9uIDIyNTIwNykKKysrIFNv
dXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyAr
MzAsNiBAQAogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0
Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3Rm
L2R0b2EuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgpJbmRleDog
U291cmNlL1dURi93dGYvdW5pY29kZS9pY3UvQ29sbGF0b3JJQ1UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL3VuaWNvZGUvaWN1L0NvbGxhdG9ySUNVLmNwcAkocmV2aXNpb24gMjI1
MjA3KQorKysgU291cmNlL1dURi93dGYvdW5pY29kZS9pY3UvQ29sbGF0b3JJQ1UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSA8bXV0ZXg+CiAjaW5jbHVkZSA8
dW5pY29kZS91Y29sLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvU3Ry
aW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogCiAjaWYgT1Mo
REFSV0lOKSAmJiBVU0UoQ0YpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjUyMDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxODQgQEAK
KzIwMTctMTEtMjcgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1v
ZGVybml6ZSBzb21lIGFzcGVjdHMgb2YgdGV4dCBjb2RlY3MsIGVsaW1pbmF0ZSBXZWJLaXQgdXNl
IG9mIHN0cmNhc2VjbXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4MDAwOQorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisK
KyAgICAgICAgKiBNb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGZXRjaEJvZHk6OmNvbnN1bWVBc1N0cmVhbSk6IFVwZGF0ZSB0byB1c2Ugc2l6ZSBzaW5jZSB0
aGUgcmVzdWx0IG9mCisgICAgICAgIGVuY29kZSBpcyBub3cgVmVjdG9yIHJhdGhlciB0aGFuIENT
dHJpbmcuCisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmNvbnN1bWVUZXh0KTogUmVtb3Zl
ZCBub3ctdW5uZWVkZWQgdHlwZSBjYXN0LgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojp0
YWtlKTogUGFzcyByZXN1bHQgb2YgZW5jb2RlIGRpcmVjdGx5IHRvIFNoYXJlZEJ1ZmZlcjo6Y3Jl
YXRlLgorCisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVyLmNw
cDogUmVtb3ZlZCBpbmNsdWRlIG9mIFN0cmluZ0V4dHJhcy5oLgorICAgICAgICAqIGJyaWRnZS9J
ZGVudGlmaWVyUmVwLmg6IERpdHRvLgorICAgICAgICAqIGJyaWRnZS9jL2NfaW5zdGFuY2UuY3Bw
OiBEaXR0by4KKworICAgICAgICAqIGZpbGVhcGkvQmxvYkJ1aWxkZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QmxvYkJ1aWxkZXI6OmFwcGVuZCk6IFVwZGF0ZWQgZm9yIENTdHJpbmcgdG8gVmVj
dG9yIGNoYW5nZS4KKworICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWV0YUNoYXJzZXRQYXJzZXI6OmNoZWNrRm9y
TWV0YUNoYXJzZXQpOiBDYWxsIHRoZSBkZWNvZGUgZnVuY3Rpb24KKyAgICAgICAgd2l0aCBhbGwg
dGhlIGFyZ3VtZW50cyBzaW5jZSB0aGVyZSBpcyBvbmx5IG9uZSBkZWNvZGUgZnVuY3Rpb24gbm93
LgorCisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21wdXRlQ29udGVudFNlY3VyaXR5UG9saWN5U0hBMjU2SGFzaCk6
IFVwZGF0ZWQgZm9yIENTdHJpbmcgdG8gVmVjdG9yIGNoYW5nZS4KKworICAgICAgICAqIGxvYWRl
ci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3J5
cHRvZ3JhcGhpY0RpZ2VzdEZvckJ5dGVzKTogQ2hhbmdlZCBhcmd1bWVudCB0eXBlIHRvIGNvbnN0
IHZvaWQqLgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuaDog
RGl0dG8uCisKKyAgICAgICAgKiBsb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpUZXh0UmVzb3VyY2VEZWNvZGVyKTog
TW92ZWQgaW5pdGlhbGl6YXRpb24gb2YgZGF0YQorICAgICAgICBtZW1iZXJzIHRvIGNsYXNzIGRl
ZmluaXRpb24uCisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUp
OiBNb3ZlZCBmdW5jdGlvbiBib2R5IGhlcmUgZnJvbSB0aGUgaGVhZGVyLgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dFJlc291cmNlRGVjb2Rlcjo6c2V0RW5jb2RpbmcpOiBVc2UgZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UuCisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVy
OjpzaG91bGRBdXRvRGV0ZWN0IGNvbnN0KTogVXBkYXRlZCBmb3IgbmFtZSBjaGFuZ2UKKyAgICAg
ICAgdG8gbV9wYXJlbnRGcmFtZUF1dG9EZXRlY3RlZEVuY29kaW5nLCB3aGljaCBvYnZpYXRlcyBh
IGNvbW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpmbHVzaCk6
IERpdHRvLgorICAgICAgICAqIGxvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmg6IE1vdmVkIGlu
aXRpYWxpemF0aW9uIGhlcmUgZnJvbSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgTW92ZWQgZnVuY3Rp
b24gYm9kaWVzIG91dCBvZiB0aGUgY2xhc3MuIFJlbmFtZWQgbV9oaW50RW5jb2RpbmcgdG8KKyAg
ICAgICAgbV9wYXJlbnRGcmFtZUF1dG9EZXRlY3RlZEVuY29kaW5nIHNpbmNlIHRoYXQgaXMgYSBt
b3JlIGFjY3VyYXRlIGRlc2NyaXB0aW9uLgorCisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDogUmVtb3ZlZCBpbmNsdWRlIG9mIFN0cmluZ0V4dHJh
cy5oLgorICAgICAgICAqIHBhZ2UvRnJhbWVUcmVlLmNwcDogRGl0dG8uCisgICAgICAgICogcGFn
ZS9QYWdlU2VyaWFsaXplci5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNlcmlh
bGl6ZXI6OnNlcmlhbGl6ZUZyYW1lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYWdlU2Vy
aWFsaXplcjo6c2VyaWFsaXplQ1NTU3R5bGVTaGVldCk6IERpdHRvLgorCisgICAgICAgICogcGFn
ZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRTZWN1cml0eVBvbGljeTo6ZmluZEhhc2hPZkNvbnRlbnRJblBvbGljaWVzIGNvbnN0KTogUGFz
cyByZXN1bHQKKyAgICAgICAgb2YgZW5jb2RlIGRpcmVjdGx5IHRvIFN0cmluZ0J1ZmZlcjo6Y3Jl
YXRlLgorCisgICAgICAgICogcGxhdGZvcm0vRmlsZUhhbmRsZS5jcHA6IFJlbW92ZWQgaW5jbHVk
ZSBvZiBTdHJpbmdFeHRyYXMuaC4KKworICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZSk6IEFkZGVkIGFuIG92
ZXJsb2FkIHRoYXQgdGFrZXMgVmVjdG9yPHVpbnQ4X3Q+LgorICAgICAgICAqIHBsYXRmb3JtL1No
YXJlZEJ1ZmZlci5oOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL1VSTFBhcnNlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpVUkxQYXJzZXI6OmVuY29kZVF1ZXJ5KTogVXBkYXRlZCBzaW5j
ZSBlbmNvZGUgcmV0dXJucyBhIFZlY3RvciBpbnN0ZWFkCisgICAgICAgIG9mIGEgQ1N0cmluZyBu
b3cuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNob3VsZFdhaXRGb3JMb2FkaW5nT2ZSZXNv
dXJjZSk6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1D
QUxheWVyLmNwcDogUmVtb3ZlZCBpbmNsdWRlIG9mIFN0cmluZ0V4dHJhcy5oLgorCisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpoYW5kbGVEYXRh
VVJMKTogVXBkYXRlZCBmb3IgVmVjdG9yIGluc3RlYWQKKyAgICAgICAgb2YgQ1N0cmluZy4KKwor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9ybURhdGE6OmNyZWF0ZSk6IEFkZGVkIG5ldyBvdmVybG9hZCwgYW5kIHNpbXBsaWZpZWQg
c29tZSBleGlzdGluZyBvbmVzLgorICAgICAgICAoV2ViQ29yZTo6bm9ybWFsaXplU3RyaW5nRGF0
YSk6IENoYW5nZWQgcmV0dXJuIHR5cGUgdG8gVmVjdG9yPHVpbnQ4X3Q+LgorICAgICAgICAoV2Vi
Q29yZTo6Rm9ybURhdGE6OmFwcGVuZE11bHRpUGFydFN0cmluZ1ZhbHVlKTogVXBkYXRlZCBmb3Ig
Y2hhbmdlIGluIHR5cGUgb2YKKyAgICAgICAgcmVzdWx0IG9mIG5vcm1hbGl6ZVN0cmluZ0RhdGEu
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oOiBVcGRhdGVkIGZvciB0aGUg
YWJvdmUgYW5kIHVwZGF0ZWQgY29tbWVudHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L0Zvcm1EYXRhQnVpbGRlci5jcHA6IE1hZGUgdGhpcyBhIG5hbWVzcGFjZSBpbnN0ZWFkIG9mIGEg
Y2xhc3MuCisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUJ1aWxkZXI6OmFwcGVuZCk6IEFkZGVk
IGFuIG92ZXJsb2FkIGZvciBWZWN0b3I8dWludDhfdD4uCisgICAgICAgIChXZWJDb3JlOjpGb3Jt
RGF0YUJ1aWxkZXI6OmFwcGVuZFF1b3RlZCk6IFJlbmFtZWQgZnJvbSBhcHBlbmRRdW90ZWRTdHJp
bmcgYW5kCisgICAgICAgIGNoYW5nZWQgdGhlIGFyZ3VtZW50IHR5cGUuCisgICAgICAgIChXZWJD
b3JlOjpGb3JtRGF0YUJ1aWxkZXI6OmFwcGVuZEVuY29kZWRBc0Zvcm1EYXRhKTogTW92ZWQgbG9n
aWMgdXAgZnJvbSB0aGUKKyAgICAgICAgZW5jb2RlU3RyaW5nQXNGb3JtRGF0YSBmdW5jdGlvbiBp
bnRvIGEgbmV3IHNlcGFyYXRlIGhlbHBlci4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhQnVp
bGRlcjo6YmVnaW5NdWx0aVBhcnRIZWFkZXIpOiBDaGFuZ2VkIGFyZ3VtZW50IHR5cGUuCisgICAg
ICAgIChXZWJDb3JlOjpGb3JtRGF0YUJ1aWxkZXI6OmFkZEtleVZhbHVlUGFpckFzRm9ybURhdGEp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5n
QXNGb3JtRGF0YSk6IFVwZGF0ZWQgdG8gY2FsbCBoZWxwZXIuCisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9Gb3JtRGF0YUJ1aWxkZXIuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAg
ICAgICogcGxhdGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaDogVXNlIFZlY3Rvcjx1
aW50OF90PiBpbnN0ZWFkIG9mCisgICAgICAgIFZlY3RvcjxjaGFyPiwgYWxzbyB1cGRhdGVkIHRo
ZSBjb2RlIHRoYXQgY2FsbHMgZW5jb2RlIGZvciB0aGUgbmV3IHJldHVybiB0eXBlLgorCisgICAg
ICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dENvZGVjOjpnZXRVbmVuY29kYWJsZVJlcGxhY2VtZW50KTogVXBkYXRlZCBzaW5jZSB3ZSBhcmUg
dXNpbmcKKyAgICAgICAgc3RkOjphcnJheSBub3csIHNvIHRoZSBvdXQgYXJndW1lbnQgaXMgZWFz
aWVyIHRvIHVuZGVyc3RhbmQuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuaDog
VXNlIHN0ZDo6YXJyYXkgZm9yIHRoZSBVbmVuY29kYWJsZVJlcGxhY2VtZW50QXJyYXkKKyAgICAg
ICAgdHlwZSwgcmVtb3ZlZCB0aGUgb3ZlcmxvYWQgb2YgZGVjb2RlIHNvIHRoZXJlIGlzIG9ubHkg
b25lIGRlY29kZSBmdW5jdGlvbi4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVj
SUNVLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklDVUNvbnZlcnRlcldyYXBwZXI6On5JQ1VDb252
ZXJ0ZXJXcmFwcGVyKTogRGVsZXRlZC4KKyAgICAgICAgTm90IG5lZWRlZCBhbnkgbW9yZSBzaW5j
ZSB3ZSB1c2UgSUNVQ29udmVydGVyUHRyIGluc3RlYWQgbm93LgorICAgICAgICAoV2ViQ29yZTo6
Y2FjaGVkQ29udmVydGVySUNVKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2Rl
Y0lDVTo6Y3JlYXRlKTogRGVsZXRlZC4gQ2FsbGVycyBqdXN0IHVzZSBtYWtlX3VuaXF1ZQorICAg
ICAgICBkaXJlY3RseSBub3cuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNJQ1U6OnJlZ2lz
dGVyQ29kZWNzKTogUmV3cm90ZSB0byB1c2UgbGFtYmRhcyBpbnN0ZWFkCisgICAgICAgIG9mIGZ1
bmN0aW9ucyB3aXRoIHZvaWQqIHBvaW50ZXJzLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVj
SUNVOjpUZXh0Q29kZWNJQ1UpOiBNb3ZlZCBpbml0aWFsaXplcnMgaW50byB0aGUgaGVhZGVyLgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjSUNVOjp+VGV4dENvZGVjSUNVKTogTW92ZWQgdGhl
IGJvZHkgb2YgcmVsZWFzZUlDVUNvbnZlcnRlcgorICAgICAgICBpbiBoZXJlLiBBbHNvIGdyZWF0
bHkgc2ltcGxpZmllZCBpdCBub3cgdGhhdCBJQ1VDb252ZXJ0ZXJQdHIgaGFuZGxlcyBjbG9zaW5n
CisgICAgICAgIGl0IGFzIG5lZWRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0lDVTo6
cmVsZWFzZUlDVUNvbnZlcnRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpU
ZXh0Q29kZWNJQ1U6OmNyZWF0ZUlDVUNvbnZlcnRlciBjb25zdCk6IFJld3JvdGUgdG8gc2ltcGxm
eSBub3cgdGhhdAorICAgICAgICB3ZSBjYW4gdXNlIElDVUNvbnZlcnRlclB0ci4KKyAgICAgICAg
KFdlYkNvcmU6OkVycm9yQ2FsbGJhY2tTZXR0ZXI6OkVycm9yQ2FsbGJhY2tTZXR0ZXIpOiBUYWtl
IGEgcmVmZXJlbmNlIGluc3RlYWQKKyAgICAgICAgb2YgYSBwb2ludGVyLgorICAgICAgICAoV2Vi
Q29yZTo6RXJyb3JDYWxsYmFja1NldHRlcjo6fkVycm9yQ2FsbGJhY2tTZXR0ZXIpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0lDVTo6ZGVjb2RlKTogVXNlIGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlIGluc3RlYWQgb2YKKyAgICAgICAgc3RyY2FzZWNtcC4KKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRDb2RlY0lDVTo6ZW5jb2RlKTogUmV0dXJuIGEgVmVjdG9yIGluc3Rl
YWQgb2YgYSBDU3RyaW5nLgorICAgICAgICBUYWtlIGEgU3RyaW5nVmlldyBpbnN0ZWFkIG9mIGEg
cG9pbnRlciBhbmQgbGVuZ3RoLiBTaW1wbGlmaWVkCisgICAgICAgIHRoZSBiYWNrc2xhc2gtYXMt
Y3VycmVuY3ktc3ltYm9sIGNvZGUgYnkgdXNpbmcgU3RyaW5nOjpyZXBsYWNlLgorICAgICAgICAq
IHBsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmg6IFVwZGF0ZWQgZm9yIGFib3ZlLiBGaXhlZCBp
bmRlbnRhdGlvbi4KKyAgICAgICAgQWRkZWQgYSBuZXcgSUNVQ29udmVydGVyUHRyIHR5cGVkZWYg
dGhhdCB1c2VzIHN0ZDo6dW5pcXVlX3B0ciB0byBjbG9zZSB0aGUKKyAgICAgICAgY29udmVydGVy
OyBjb21iaW5lZCB3aXRoIG1vdmUgc2VtYW50aWNzIGl0IHNpbXBsaWZpZXMgdGhpbmdzIHNvIHdl
IGRvbid0IGhhdmUKKyAgICAgICAgdG8gYmUgc28gY2FyZWZ1bCBhYm91dCBjYWxsaW5nIHVjbnZf
Y2xvc2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5jcHA6IFJl
bmFtZWQgdGhlIExhdGluLTEgdG8gVW5pY29kZSB0YWJsZSBmcm9tCisgICAgICAgICJ0YWJsZSIg
dG8gbGF0aW4xQ29udmVyc2lvblRhYmxlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjTGF0
aW4xOjpyZWdpc3RlckNvZGVjcyk6IFVzZSBhIGxhbWJkYS4KKyAgICAgICAgKFdlYkNvcmU6OmVu
Y29kZUNvbXBsZXhXaW5kb3dzTGF0aW4xKTogUmV0dXJuIGEgVmVjdG9yIGluc3RhZCBvZiBDU3Ry
aW5nLgorICAgICAgICBBbHNvIHVzZSBTdHJpbmdWaWV3Ojpjb2RlUG9pbnRzIGluc3RlYWQgb2Yg
b3VyIG93biBVMTZfTkVYVC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0xhdGluMTo6ZW5j
b2RlKTogTW9yZSBvZiB0aGUgc2FtZS4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2Rl
Y0xhdGluMS5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90
ZXh0L1RleHRDb2RlY1JlcGxhY2VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2Rl
Y1JlcGxhY2VtZW50OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENv
ZGVjUmVwbGFjZW1lbnQ6OlRleHRDb2RlY1JlcGxhY2VtZW50KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlRleHRDb2RlY1JlcGxhY2VtZW50OjpyZWdpc3RlckNvZGVjcyk6IFVzZSBhIGxh
bWJkYS4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1JlcGxhY2VtZW50Lmg6IFVw
ZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVj
VVRGMTYuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmV3U3RyZWFtaW5nVGV4dERlY29kZXJVVEYx
NkxFKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om5ld1N0cmVhbWluZ1RleHREZWNvZGVy
VVRGMTZCRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNVVEYxNjo6cmVn
aXN0ZXJDb2RlY3MpOiBVc2UgbGFtYmRhcy4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY1VU
RjE2OjplbmNvZGUpOiBSZXR1cm4gYSBWZWN0b3IuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9U
ZXh0Q29kZWNVVEYxNi5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS90ZXh0L1RleHRDb2RlY1VURjguY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVj
VVRGODo6cmVnaXN0ZXJDb2RlY3MpOiBVc2UgYSBsYW1iZGEuCisgICAgICAgIChXZWJDb3JlOjpU
ZXh0Q29kZWNVVEY4OjplbmNvZGUpOiBSZXR1cm4gYSBWZWN0b3IuCisgICAgICAgICogcGxhdGZv
cm0vdGV4dC9UZXh0Q29kZWNVVEY4Lmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6bmV3U3RyZWFtaW5nVGV4dERlY29kZXJVc2VyRGVmaW5lZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpUZXh0Q29kZWNVc2VyRGVmaW5lZDo6cmVnaXN0ZXJDb2RlY3MpOiBVc2Ug
YSBsYW1iZGEuCisgICAgICAgIChXZWJDb3JlOjplbmNvZGVDb21wbGV4VXNlckRlZmluZWQpOiBS
ZXR1cm4gYSBWZWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNVc2VyRGVmaW5lZDo6
ZW5jb2RlKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVm
aW5lZC5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0
L1RleHRFbmNvZGluZy5jcHA6IENoYW5nZWQgVGV4dENvZGVjTWFwIHRvIGp1c3QgaG9sZCBhCisg
ICAgICAgIFdURjo6RnVuY3Rpb24gaW5zdGVhZCBvZiBob2xkaW5nIGEgZnVuY3Rpb24gYW5kIGFu
IGFkZGl0aW9uYWwgZGF0YSBwb2ludGVyLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEVuY29kaW5n
OjpUZXh0RW5jb2RpbmcpOiBVc2UgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UKKyAgICAg
ICAgaW5zdGVhZCBvZiBhIHNwZWNpYWwgaXNSZXBsYWNlbWVudEVuY29kaW5nIGZ1bmN0aW9uLgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dEVuY29kaW5nOjplbmNvZGUgY29uc3QpOiBSZXR1cm4gYSBW
ZWN0b3IgaW5zdGVhZCBvZiBhIENTdHJpbmcuCisgICAgICAgIFBhc3MgU3RyaW5nVmlldyBpbnN0
ZWFkIG9mIGEgcG9pbnRlciBhbmQgbGVuZ3RoLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4
dEVuY29kaW5nLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIHBsYXRmb3Jt
L3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRkVG9U
ZXh0Q29kZWNNYXApOiBSZW1vdmVkIHRoZSBhZGRpdGlvbmFsRGF0YSBwb2ludGVyIGFuZCB1c2Vk
CisgICAgICAgIFdURk1vdmUgc2luY2UgTmV3VGV4dENvZGVjRnVuY3Rpb24gaXMgbm93IGEgV1RG
OjpGdW5jdGlvbiByYXRoZXIgdGhhbiBhIEMKKyAgICAgICAgZnVuY3Rpb24gcG9pbnRlci4KKyAg
ICAgICAgKFdlYkNvcmU6OmlzUmVwbGFjZW1lbnRFbmNvZGluZyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpuZXdUZXh0Q29kZWMpOiBVc2UgZmluZCBpbnN0ZWFkIG9mIGdldCBub3cgdGhh
dCB0aGUgZnVjbnRpb25zIGluCisgICAgICAgIHRoZSBtYXAgYXJlIFdURjo6RnVuY3Rpb24gYW5k
IGNhbid0IGJlIGNvcGllZC4KKyAgICAgICAgKFdlYkNvcmU6OmR1bXBUZXh0RW5jb2RpbmdOYW1l
TWFwKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lz
dHJ5Lmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIHhtbC9YU0xUVW5pY29k
ZVNvcnQuY3BwOiBSZW1vdmVkIGluY2x1ZGUgb2YgU3RyaW5nRXh0cmFzLmguCisgICAgICAgICog
eG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5jcHA6IERpdHRvLgorICAgICAgICAqIHhtbC9w
YXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcDogRGl0dG8uCisKIDIwMTctMTEtMjcg
IFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIENv
bnRlbnQgcHJvY2VzcyBjcmFzaGVzIHdoZW4gZHJhZ2dpbmcgYSBsaW5rIGluIHJlY292ZXJ5IG1v
ZGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5jcHAJKHJl
dmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDYgKzE1Nyw3IEBAIHZvaWQgRmV0Y2hCb2R5Ojpj
b25zdW1lKEZldGNoQm9keU93bmVyJiAKIH0KIAogI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKwog
dm9pZCBGZXRjaEJvZHk6OmNvbnN1bWVBc1N0cmVhbShGZXRjaEJvZHlPd25lciYgb3duZXIsIEZl
dGNoQm9keVNvdXJjZSYgc291cmNlKQogewogICAgIGJvb2wgY2xvc2VTdHJlYW0gPSBmYWxzZTsK
QEAgLTE2OCwxMSArMTY5LDExIEBAIHZvaWQgRmV0Y2hCb2R5Ojpjb25zdW1lQXNTdHJlYW0oRmV0
Y2hCb2QKICAgICAgICAgbV9kYXRhID0gbnVsbHB0cjsKICAgICB9IGVsc2UgaWYgKGlzVGV4dCgp
KSB7CiAgICAgICAgIGF1dG8gZGF0YSA9IFVURjhFbmNvZGluZygpLmVuY29kZSh0ZXh0Qm9keSgp
LCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7Ci0gICAgICAgIGNsb3NlU3RyZWFtID0gc291cmNl
LmVucXVldWUoQXJyYXlCdWZmZXI6OnRyeUNyZWF0ZShkYXRhLmRhdGEoKSwgZGF0YS5sZW5ndGgo
KSkpOworICAgICAgICBjbG9zZVN0cmVhbSA9IHNvdXJjZS5lbnF1ZXVlKEFycmF5QnVmZmVyOjp0
cnlDcmVhdGUoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKSk7CiAgICAgICAgIG1fZGF0YSA9IG51
bGxwdHI7CiAgICAgfSBlbHNlIGlmIChpc1VSTFNlYXJjaFBhcmFtcygpKSB7CiAgICAgICAgIGF1
dG8gZGF0YSA9IFVURjhFbmNvZGluZygpLmVuY29kZSh1cmxTZWFyY2hQYXJhbXNCb2R5KCkudG9T
dHJpbmcoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwotICAgICAgICBjbG9zZVN0cmVhbSA9
IHNvdXJjZS5lbnF1ZXVlKEFycmF5QnVmZmVyOjp0cnlDcmVhdGUoZGF0YS5kYXRhKCksIGRhdGEu
bGVuZ3RoKCkpKTsKKyAgICAgICAgY2xvc2VTdHJlYW0gPSBzb3VyY2UuZW5xdWV1ZShBcnJheUJ1
ZmZlcjo6dHJ5Q3JlYXRlKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSkpOwogICAgICAgICBtX2Rh
dGEgPSBudWxscHRyOwogICAgIH0gZWxzZSBpZiAoaXNCbG9iKCkpIHsKICAgICAgICAgb3duZXIu
bG9hZEJsb2IoYmxvYkJvZHkoKSwgbnVsbHB0cik7CkBAIC0xODcsNiArMTg4LDcgQEAgdm9pZCBG
ZXRjaEJvZHk6OmNvbnN1bWVBc1N0cmVhbShGZXRjaEJvZAogICAgIGlmIChjbG9zZVN0cmVhbSkK
ICAgICAgICAgc291cmNlLmNsb3NlKCk7CiB9CisKICNlbmRpZgogCiB2b2lkIEZldGNoQm9keTo6
Y29uc3VtZUFycmF5QnVmZmVyKFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKQEAgLTIw
NCw3ICsyMDYsNyBAQCB2b2lkIEZldGNoQm9keTo6Y29uc3VtZUFycmF5QnVmZmVyVmlldyhSCiB2
b2lkIEZldGNoQm9keTo6Y29uc3VtZVRleHQoUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNl
LCBjb25zdCBTdHJpbmcmIHRleHQpCiB7CiAgICAgYXV0byBkYXRhID0gVVRGOEVuY29kaW5nKCku
ZW5jb2RlKHRleHQsIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKLSAgICBtX2NvbnN1bWVyLnJl
c29sdmVXaXRoRGF0YShXVEZNb3ZlKHByb21pc2UpLCByZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQ4X3QqPihkYXRhLmRhdGEoKSksIGRhdGEubGVuZ3RoKCkpOworICAgIG1fY29uc3VtZXIucmVz
b2x2ZVdpdGhEYXRhKFdURk1vdmUocHJvbWlzZSksIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7
CiAgICAgbV9kYXRhID0gbnVsbHB0cjsKIH0KIApAQCAtMjcxLDE1ICsyNzMsMTAgQEAgRmV0Y2hC
b2R5OjpUYWtlbkRhdGEgRmV0Y2hCb2R5Ojp0YWtlKCkKICAgICBpZiAoaXNGb3JtRGF0YSgpKQog
ICAgICAgICByZXR1cm4gZm9ybURhdGFCb2R5KCk7CiAKLSAgICBpZiAoaXNUZXh0KCkpIHsKLSAg
ICAgICAgYXV0byBkYXRhID0gVVRGOEVuY29kaW5nKCkuZW5jb2RlKHRleHRCb2R5KCksIEVudGl0
aWVzRm9yVW5lbmNvZGFibGVzKTsKLSAgICAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRl
KGRhdGEuZGF0YSgpLCBkYXRhLmxlbmd0aCgpKTsKLSAgICB9Ci0KLSAgICBpZiAoaXNVUkxTZWFy
Y2hQYXJhbXMoKSkgewotICAgICAgICBhdXRvIGRhdGEgPSBVVEY4RW5jb2RpbmcoKS5lbmNvZGUo
dXJsU2VhcmNoUGFyYW1zQm9keSgpLnRvU3RyaW5nKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVz
KTsKLSAgICAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEuZGF0YSgpLCBkYXRh
Lmxlbmd0aCgpKTsKLSAgICB9CisgICAgaWYgKGlzVGV4dCgpKQorICAgICAgICByZXR1cm4gU2hh
cmVkQnVmZmVyOjpjcmVhdGUoVVRGOEVuY29kaW5nKCkuZW5jb2RlKHRleHRCb2R5KCksIEVudGl0
aWVzRm9yVW5lbmNvZGFibGVzKSk7CisgICAgaWYgKGlzVVJMU2VhcmNoUGFyYW1zKCkpCisgICAg
ICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShVVEY4RW5jb2RpbmcoKS5lbmNvZGUodXJs
U2VhcmNoUGFyYW1zQm9keSgpLnRvU3RyaW5nKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKSk7
CiAKICAgICBpZiAoaXNBcnJheUJ1ZmZlcigpKQogICAgICAgICByZXR1cm4gU2hhcmVkQnVmZmVy
OjpjcmVhdGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYXJyYXlCdWZmZXJCb2R5KCku
ZGF0YSgpKSwgYXJyYXlCdWZmZXJCb2R5KCkuYnl0ZUxlbmd0aCgpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVy
LmNwcAkocmV2aXNpb24gMjI1MjA3KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2Nr
ZXRzL1dlYlNvY2tldERlZmxhdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNiBA
QAogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
ICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KICNpbmNsdWRlIDx6bGliLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Q
QUwvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxNy0xMS0yNyAgRGFyaW4gQWRsZXIgIDxkYXJp
bkBhcHBsZS5jb20+CisKKyAgICAgICAgTW9kZXJuaXplIHNvbWUgYXNwZWN0cyBvZiB0ZXh0IGNv
ZGVjcywgZWxpbWluYXRlIFdlYktpdCB1c2Ugb2Ygc3RyY2FzZWNtcAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMDA5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAgICAqIFBBTC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOiBBZGRlZCBVbmVuY29kYWJsZUhhbmRsaW5nLmguCisgICAgICAgICogcGFsL3Rl
eHQvVW5lbmNvZGFibGVIYW5kbGluZy5oOiBNb3ZlZCB0aGUgVW5lbmNvZGFibGVIYW5kbGluZyBl
bnVtZXJhdGlvbgorICAgICAgICBoZXJlIGZyb20gVGV4dENvZGVjLmguCisKIDIwMTctMTEtMjcg
IFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgT25lIHRv
byBtYW55IHplcm9lcyBpbiBtYWNPUyB2ZXJzaW9uIG51bWJlciBpbiBGZWF0dXJlRGVmaW5lcwpJ
bmRleDogU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BBTC9QQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMjI1MjA3KQorKysgU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsNiArMjUzLDcgQEAKIAkJ
MUM0ODc2REYxRjhEODM3NTAwQ0NFRUJEIC8qIExvZ2dpbmdDb2NvYS5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IExvZ2dpbmdDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUM2N0NFQTExRTMyRURBODAwRjgwRjJFIC8qIEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzY3Q0VBMjFFMzJFRTI2MDBGODBGMkUgLyogVmVy
c2lvbi54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBWZXJzaW9uLnhj
Y29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U1OTA5QzFGOTNCRjFFMDA2
N0Y4Q0YgLyogVW5lbmNvZGFibGVIYW5kbGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmVuY29kYWJs
ZUhhbmRsaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExMDI2NTg2MUY1Njc0
NjEwMEI0Qzg0NCAvKiBGb3VuZGF0aW9uU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZvdW5kYXRpb25TUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTEw
MjY1ODgxRjU2NzQ3QTAwQjRDODQ0IC8qIEhJVG9vbGJveFNQSS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBISVRvb2xib3hTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTEwMjY1OEExRjU2NzQ4QzAwQjRDODQ0IC8qIFF1aWNrRHJhd1NQSS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWlja0RyYXdTUEkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTU0MCw2ICs1NDEsNyBAQAogCQkJCUEzMEQ0MTIzMUYwREQxMDUwMEI3
MTk1NCAvKiBtYWMgKi8sCiAJCQkJQTMwRDQxMUYxRjBERDBFQTAwQjcxOTU0IC8qIEtpbGxSaW5n
LmNwcCAqLywKIAkJCQlBMzBENDExRTFGMEREMEVBMDBCNzE5NTQgLyogS2lsbFJpbmcuaCAqLywK
KwkJCQk5M0U1OTA5QzFGOTNCRjFFMDA2N0Y4Q0YgLyogVW5lbmNvZGFibGVIYW5kbGluZy5oICov
LAogCQkJKTsKIAkJCXBhdGggPSB0ZXh0OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9VbmVuY29kYWJsZUhhbmRsaW5nLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L1VuZW5jb2RhYmxlSGFuZGxp
bmcuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvVW5lbmNv
ZGFibGVIYW5kbGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFNwZWNpZmllcyB3aGF0IHdpbGwgaGFwcGVuIHdo
ZW4gYSBjaGFyYWN0ZXIgaXMgZW5jb3VudGVyZWQgdGhhdCBpcworLy8gbm90IGVuY29kYWJsZSBp
biB0aGUgY2hhcmFjdGVyIHNldC4KK2VudW0gVW5lbmNvZGFibGVIYW5kbGluZyB7CisgICAgLy8g
U3Vic3RpdHV0ZXMgdGhlIHJlcGxhY2VtZW50IGNoYXJhY3RlciAiPyIuCisgICAgUXVlc3Rpb25N
YXJrc0ZvclVuZW5jb2RhYmxlcywKKworICAgIC8vIEVuY29kZXMgdGhlIGNoYXJhY3RlciBhcyBh
biBYTUwgZW50aXR5LiBGb3IgZXhhbXBsZSwgVSswNkRFCisgICAgLy8gd291bGQgYmUgIiYjMTc1
ODsiICgweDZERSA9IDE3NTggaW4gb2N0YWwpLgorICAgIEVudGl0aWVzRm9yVW5lbmNvZGFibGVz
LAorCisgICAgLy8gRW5jb2RlcyB0aGUgY2hhcmFjdGVyIGFzIGVuIGVudGl0eSBhcyBhYm92ZSwg
YnV0IGVzY2FwZWQKKyAgICAvLyBub24tYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuIFRoaXMgaXMg
dXNlZCBpbiBVUkxzLgorICAgIC8vIEZvciBleGFtcGxlLCBVKzZERSB3b3VsZCBiZSAiJTI2JTIz
MTc1OCUzQiIuCisgICAgVVJMRW5jb2RlZEVudGl0aWVzRm9yVW5lbmNvZGFibGVzCit9OworCit9
CisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9JZGVudGlmaWVyUmVwLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL0lkZW50aWZpZXJSZXAuaAkocmV2aXNpb24gMjI1
MjA3KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL0lkZW50aWZpZXJSZXAuaAkod29ya2luZyBj
b3B5KQpAQCAtMjMsMTIgKzIzLDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVm
IElkZW50aWZpZXJSZXBfaAotI2RlZmluZSBJZGVudGlmaWVyUmVwX2gKKyNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5o
PgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzAsNCArNjgsMyBAQCBwcml2YXRlOgogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBJZGVudGlmaWVyUmVwX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcs
NyArNDcsNiBAQAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUg
PHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iQnVpbGRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iQnVpbGRlci5j
cHAJKHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYkJ1aWxk
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxNCArNDksMTQgQEAgdm9pZCBCbG9iQnVpbGRl
cjo6YXBwZW5kKFJlZlB0cjxBcnJheUJ1ZgogewogICAgIGlmICghYXJyYXlCdWZmZXIpCiAgICAg
ICAgIHJldHVybjsKLSAgICBtX2FwcGVuZGFibGVEYXRhLmFwcGVuZChzdGF0aWNfY2FzdDxjb25z
dCBjaGFyKj4oYXJyYXlCdWZmZXItPmRhdGEoKSksIGFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkp
OworICAgIG1fYXBwZW5kYWJsZURhdGEuYXBwZW5kKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihhcnJheUJ1ZmZlci0+ZGF0YSgpKSwgYXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSk7CiB9CiAK
IHZvaWQgQmxvYkJ1aWxkZXI6OmFwcGVuZChSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiYmIGFycmF5
QnVmZmVyVmlldykKIHsKICAgICBpZiAoIWFycmF5QnVmZmVyVmlldykKICAgICAgICAgcmV0dXJu
OwotICAgIG1fYXBwZW5kYWJsZURhdGEuYXBwZW5kKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihh
cnJheUJ1ZmZlclZpZXctPmJhc2VBZGRyZXNzKCkpLCBhcnJheUJ1ZmZlclZpZXctPmJ5dGVMZW5n
dGgoKSk7CisgICAgbV9hcHBlbmRhYmxlRGF0YS5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KGFycmF5QnVmZmVyVmlldy0+YmFzZUFkZHJlc3MoKSksIGFycmF5QnVmZmVyVmlldy0+
Ynl0ZUxlbmd0aCgpKTsKIH0KIAogdm9pZCBCbG9iQnVpbGRlcjo6YXBwZW5kKFJlZlB0cjxCbG9i
PiYmIGJsb2IpCkBAIC03MCwxMyArNzAsMTYgQEAgdm9pZCBCbG9iQnVpbGRlcjo6YXBwZW5kKFJl
ZlB0cjxCbG9iPiYmIAogCiB2b2lkIEJsb2JCdWlsZGVyOjphcHBlbmQoY29uc3QgU3RyaW5nJiB0
ZXh0KQogewotICAgIENTdHJpbmcgdXRmOFRleHQgPSBVVEY4RW5jb2RpbmcoKS5lbmNvZGUodGV4
dCwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOworICAgIGF1dG8gYnl0ZXMgPSBVVEY4RW5jb2Rp
bmcoKS5lbmNvZGUodGV4dCwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwogCiAgICAgaWYgKG1f
ZW5kaW5ncyA9PSBCbG9iTGluZUVuZGluZ3M6Ok5hdGl2ZSkKLSAgICAgICAgbm9ybWFsaXplQW5k
QXBwZW5kTGluZUVuZGluZ3NUb05hdGl2ZSh1dGY4VGV4dCwgbV9hcHBlbmRhYmxlRGF0YSk7Cisg
ICAgICAgIGJ5dGVzID0gbm9ybWFsaXplTGluZUVuZGluZ3NUb05hdGl2ZShXVEZNb3ZlKGJ5dGVz
KSk7CisKKyAgICBpZiAobV9hcHBlbmRhYmxlRGF0YS5pc0VtcHR5KCkpCisgICAgICAgIG1fYXBw
ZW5kYWJsZURhdGEgPSBXVEZNb3ZlKGJ5dGVzKTsKICAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJU
KG1fZW5kaW5ncyA9PSBCbG9iTGluZUVuZGluZ3M6OlRyYW5zcGFyZW50KTsKLSAgICAgICAgbV9h
cHBlbmRhYmxlRGF0YS5hcHBlbmQodXRmOFRleHQuZGF0YSgpLCB1dGY4VGV4dC5sZW5ndGgoKSk7
CisgICAgICAgIC8vIEZJWE1FOiBXb3VsZCBpdCBiZSBiZXR0ZXIgdG8gbW92ZSBtdWx0aXBsZSB2
ZWN0b3JzIGludG8gbV9pdGVtcyBpbnN0ZWFkIG9mIG1lcmdpbmcgdGhlbSBpbnRvIG9uZT8KKyAg
ICAgICAgbV9hcHBlbmRhYmxlRGF0YS5hcHBlbmRWZWN0b3IoYnl0ZXMpOwogICAgIH0KIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJz
ZXRQYXJzZXIuY3BwCShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw2ICsy
OSw3IEBACiAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRp
b21zLmgiCisjaW5jbHVkZSAiVGV4dENvZGVjLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nUmVn
aXN0cnkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTUzLDcgKzE1NCw4IEBAIGJvb2wg
SFRNTE1ldGFDaGFyc2V0UGFyc2VyOjpjaGVja0Zvck1ldGEKIAogICAgIGNvbnN0ZXhwciBpbnQg
Ynl0ZXNUb0NoZWNrVW5jb25kaXRpb25hbGx5ID0gMTAyNDsKIAotICAgIG1faW5wdXQuYXBwZW5k
KG1fY29kZWMtPmRlY29kZShkYXRhLCBsZW5ndGgpKTsKKyAgICBib29sIGlnbm9yZWRTYXdFcnJv
ckZsYWc7CisgICAgbV9pbnB1dC5hcHBlbmQobV9jb2RlYy0+ZGVjb2RlKGRhdGEsIGxlbmd0aCwg
ZmFsc2UsIGZhbHNlLCBpZ25vcmVkU2F3RXJyb3JGbGFnKSk7CiAKICAgICB3aGlsZSAoYXV0byB0
b2tlbiA9IG1fdG9rZW5pemVyLm5leHRUb2tlbihtX2lucHV0KSkgewogICAgICAgICBib29sIGlz
RW5kID0gdG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW46OkVuZFRhZzsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
CShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckRPTUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxNSwxMCArMTQxNSwxMCBA
QCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVDb250ZW50U2VjdXJpdHlQb2xpCiAgICAgLy8gU2VlIDxo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1MTg0Pi4KICAgICBUZXh0
RW5jb2RpbmcgZG9jdW1lbnRFbmNvZGluZyA9IGVsZW1lbnQuZG9jdW1lbnQoKS50ZXh0RW5jb2Rp
bmcoKTsKICAgICBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nVG9Vc2UgPSBkb2N1bWVudEVu
Y29kaW5nLmlzVmFsaWQoKSA/IGRvY3VtZW50RW5jb2RpbmcgOiBVVEY4RW5jb2RpbmcoKTsKLSAg
ICBDU3RyaW5nIGNvbnRlbnQgPSBlbmNvZGluZ1RvVXNlLmVuY29kZShUZXh0Tm9kZVRyYXZlcnNh
bDo6Y29udGVudHNBc1N0cmluZyhlbGVtZW50KSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwor
ICAgIGF1dG8gY29udGVudCA9IGVuY29kaW5nVG9Vc2UuZW5jb2RlKFRleHROb2RlVHJhdmVyc2Fs
Ojpjb250ZW50c0FzU3RyaW5nKGVsZW1lbnQpLCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7CiAg
ICAgYXV0byBjcnlwdG9EaWdlc3QgPSBQQUw6OkNyeXB0b0RpZ2VzdDo6Y3JlYXRlKFBBTDo6Q3J5
cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV8yNTYpOwotICAgIGNyeXB0b0RpZ2VzdC0+YWRkQnl0
ZXMoY29udGVudC5kYXRhKCksIGNvbnRlbnQubGVuZ3RoKCkpOwotICAgIFZlY3Rvcjx1aW50OF90
PiBkaWdlc3QgPSBjcnlwdG9EaWdlc3QtPmNvbXB1dGVIYXNoKCk7CisgICAgY3J5cHRvRGlnZXN0
LT5hZGRCeXRlcyhjb250ZW50LmRhdGEoKSwgY29udGVudC5zaXplKCkpOworICAgIGF1dG8gZGln
ZXN0ID0gY3J5cHRvRGlnZXN0LT5jb21wdXRlSGFzaCgpOwogICAgIHJldHVybiBtYWtlU3RyaW5n
KCJzaGEyNTYtIiwgYmFzZTY0RW5jb2RlKGRpZ2VzdC5kYXRhKCksIGRpZ2VzdC5zaXplKCkpKTsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0Rp
Z2VzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5
cHRvZ3JhcGhpY0RpZ2VzdC5jcHAJKHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTQsNyArMTU0LDcgQEAgc3RhdGljIFBBTDo6Q3J5cHRvRGlnZXN0OjpBbGdvcml0aG0gdG9D
cgogICAgIHJldHVybiBQQUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfNTEyOwogfQog
Ci1SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QgY3J5cHRvZ3JhcGhpY0RpZ2VzdEZvckJ5dGVz
KFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3JpdGhtIGFsZ29yaXRobSwgY29uc3Qg
Y2hhciogYnl0ZXMsIHNpemVfdCBsZW5ndGgpCitSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Qg
Y3J5cHRvZ3JhcGhpY0RpZ2VzdEZvckJ5dGVzKFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6
QWxnb3JpdGhtIGFsZ29yaXRobSwgY29uc3Qgdm9pZCogYnl0ZXMsIHNpemVfdCBsZW5ndGgpCiB7
CiAgICAgYXV0byBjcnlwdG9EaWdlc3QgPSBQQUw6OkNyeXB0b0RpZ2VzdDo6Y3JlYXRlKHRvQ3J5
cHRvRGlnZXN0QWxnb3JpdGhtKGFsZ29yaXRobSkpOwogICAgIGNyeXB0b0RpZ2VzdC0+YWRkQnl0
ZXMoYnl0ZXMsIGxlbmd0aCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VD
cnlwdG9ncmFwaGljRGlnZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVy
L1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oCShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc2LDcgKzc2LDcgQEAgc3RkOjpvcHRpb25hbDxFbmNvZGVkUmVzb3VyY2VDcnlw
dG9ncmFwaAogCiBzdGQ6Om9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gZGVj
b2RlRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBFbmNvZGVkUmVzb3Vy
Y2VDcnlwdG9ncmFwaGljRGlnZXN0Jik7CiAKLVJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCBj
cnlwdG9ncmFwaGljRGlnZXN0Rm9yQnl0ZXMoUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpB
bGdvcml0aG0sIGNvbnN0IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoKTsKK1Jlc291cmNlQ3J5
cHRvZ3JhcGhpY0RpZ2VzdCBjcnlwdG9ncmFwaGljRGlnZXN0Rm9yQnl0ZXMoUmVzb3VyY2VDcnlw
dG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG0sIGNvbnN0IHZvaWQqIGJ5dGVzLCBzaXplX3QgbGVu
Z3RoKTsKIAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVj
b2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJj
ZURlY29kZXIuY3BwCShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
VGV4dFJlc291cmNlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAv
KgogICAgIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRl
KQotICAgIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwg
MjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgQ29weXJpZ2h0
IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgIENvcHly
aWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5j
b20pCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiVGV4dEVuY29kaW5n
RGV0ZWN0b3IuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmdSZWdpc3RyeS5oIgogI2luY2x1ZGUg
PHd0Zi9BU0NJSUNUeXBlLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMyMiwyMCArMzIxLDE4IEBAIGNvbnN0IFRleHRFbmNvZGlu
ZyYgVGV4dFJlc291cmNlRGVjb2RlcjoKICAgICByZXR1cm4gc3BlY2lmaWVkRGVmYXVsdEVuY29k
aW5nOwogfQogCi1UZXh0UmVzb3VyY2VEZWNvZGVyOjpUZXh0UmVzb3VyY2VEZWNvZGVyKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYgc3BlY2lmaWVkRGVmYXVsdEVu
Y29kaW5nLCBib29sIHVzZXNFbmNvZGluZ0RldGVjdG9yKQoraW5saW5lIFRleHRSZXNvdXJjZURl
Y29kZXI6OlRleHRSZXNvdXJjZURlY29kZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3Qg
VGV4dEVuY29kaW5nJiBzcGVjaWZpZWREZWZhdWx0RW5jb2RpbmcsIGJvb2wgdXNlc0VuY29kaW5n
RGV0ZWN0b3IpCiAgICAgOiBtX2NvbnRlbnRUeXBlKGRldGVybWluZUNvbnRlbnRUeXBlKG1pbWVU
eXBlKSkKICAgICAsIG1fZW5jb2RpbmcoZGVmYXVsdEVuY29kaW5nKG1fY29udGVudFR5cGUsIHNw
ZWNpZmllZERlZmF1bHRFbmNvZGluZykpCi0gICAgLCBtX3NvdXJjZShEZWZhdWx0RW5jb2Rpbmcp
Ci0gICAgLCBtX2hpbnRFbmNvZGluZyhudWxscHRyKQotICAgICwgbV9jaGVja2VkRm9yQk9NKGZh
bHNlKQotICAgICwgbV9jaGVja2VkRm9yQ1NTQ2hhcnNldChmYWxzZSkKLSAgICAsIG1fY2hlY2tl
ZEZvckhlYWRDaGFyc2V0KGZhbHNlKQotICAgICwgbV91c2VMZW5pZW50WE1MRGVjb2RpbmcoZmFs
c2UpCi0gICAgLCBtX3Nhd0Vycm9yKGZhbHNlKQogICAgICwgbV91c2VzRW5jb2RpbmdEZXRlY3Rv
cih1c2VzRW5jb2RpbmdEZXRlY3RvcikKIHsKIH0KIAorUmVmPFRleHRSZXNvdXJjZURlY29kZXI+
IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25z
dCBUZXh0RW5jb2RpbmcmIGRlZmF1bHRFbmNvZGluZywgYm9vbCB1c2VzRW5jb2RpbmdEZXRlY3Rv
cikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUZXh0UmVzb3VyY2VEZWNvZGVyKG1pbWVU
eXBlLCBkZWZhdWx0RW5jb2RpbmcsIHVzZXNFbmNvZGluZ0RldGVjdG9yKSk7Cit9CisKIFRleHRS
ZXNvdXJjZURlY29kZXI6On5UZXh0UmVzb3VyY2VEZWNvZGVyKCkgPSBkZWZhdWx0OwogCiB2b2lk
IFRleHRSZXNvdXJjZURlY29kZXI6OnNldEVuY29kaW5nKGNvbnN0IFRleHRFbmNvZGluZyYgZW5j
b2RpbmcsIEVuY29kaW5nU291cmNlIHNvdXJjZSkKQEAgLTM0Niw3ICszNDMsNyBAQCB2b2lkIFRl
eHRSZXNvdXJjZURlY29kZXI6OnNldEVuY29kaW5nKGNvCiAKICAgICAvLyBXaGVuIGVuY29kaW5n
IGNvbWVzIGZyb20gbWV0YSB0YWcgKGkuZS4gaXQgY2Fubm90IGJlIFhNTCBmaWxlcyBzZW50IHZp
YSBYSFIpLAogICAgIC8vIHRyZWF0IHgtdXNlci1kZWZpbmVkIGFzIHdpbmRvd3MtMTI1MiAoYnVn
IDE4MjcwKQotICAgIGlmIChzb3VyY2UgPT0gRW5jb2RpbmdGcm9tTWV0YVRhZyAmJiBzdHJjYXNl
Y21wKGVuY29kaW5nLm5hbWUoKSwgIngtdXNlci1kZWZpbmVkIikgPT0gMCkKKyAgICBpZiAoc291
cmNlID09IEVuY29kaW5nRnJvbU1ldGFUYWcgJiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UoZW5jb2RpbmcubmFtZSgpLCAieC11c2VyLWRlZmluZWQiKSkKICAgICAgICAgbV9lbmNvZGlu
ZyA9ICJ3aW5kb3dzLTEyNTIiOwogICAgIGVsc2UgaWYgKHNvdXJjZSA9PSBFbmNvZGluZ0Zyb21N
ZXRhVGFnIHx8IHNvdXJjZSA9PSBFbmNvZGluZ0Zyb21YTUxIZWFkZXIgfHwgc291cmNlID09IEVu
Y29kaW5nRnJvbUNTU0NoYXJzZXQpICAgICAgICAKICAgICAgICAgbV9lbmNvZGluZyA9IGVuY29k
aW5nLmNsb3Nlc3RCeXRlQmFzZWRFcXVpdmFsZW50KCk7CkBAIC01OTMsMzUgKzU5MCwzMyBAQCB2
b2lkIFRleHRSZXNvdXJjZURlY29kZXI6OmRldGVjdEphcGFuZXNlCiAvLyAgIGluIHRoZSBmaXJz
dCBwbGFjZS4gCiBib29sIFRleHRSZXNvdXJjZURlY29kZXI6OnNob3VsZEF1dG9EZXRlY3QoKSBj
b25zdAogewotICAgIC8vIEp1c3QgY2hlY2tpbmcgbV9oaW50RW5jb2Rpbmcgc3VmZmljZXMgaGVy
ZSBiZWNhdXNlIGl0J3Mgb25seSBzZXQKLSAgICAvLyBpbiBzZXRIaW50RW5jb2Rpbmcgd2hlbiB0
aGUgc291cmNlIGlzIEF1dG9EZXRlY3RlZEVuY29kaW5nLgogICAgIHJldHVybiBtX3VzZXNFbmNv
ZGluZ0RldGVjdG9yCi0gICAgICAgICYmIChtX3NvdXJjZSA9PSBEZWZhdWx0RW5jb2RpbmcgfHwg
KG1fc291cmNlID09IEVuY29kaW5nRnJvbVBhcmVudEZyYW1lICYmIG1faGludEVuY29kaW5nKSk7
IAorICAgICAgICAmJiAobV9zb3VyY2UgPT0gRGVmYXVsdEVuY29kaW5nIHx8IChtX3NvdXJjZSA9
PSBFbmNvZGluZ0Zyb21QYXJlbnRGcmFtZSAmJiBtX3BhcmVudEZyYW1lQXV0b0RldGVjdGVkRW5j
b2RpbmcpKTsKIH0KIAotU3RyaW5nIFRleHRSZXNvdXJjZURlY29kZXI6OmRlY29kZShjb25zdCBj
aGFyKiBkYXRhLCBzaXplX3QgbGVuKQorU3RyaW5nIFRleHRSZXNvdXJjZURlY29kZXI6OmRlY29k
ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKQogewogICAgIHNpemVfdCBsZW5ndGhP
ZkJPTSA9IDA7CiAgICAgaWYgKCFtX2NoZWNrZWRGb3JCT00pCi0gICAgICAgIGxlbmd0aE9mQk9N
ID0gY2hlY2tGb3JCT00oZGF0YSwgbGVuKTsKKyAgICAgICAgbGVuZ3RoT2ZCT00gPSBjaGVja0Zv
ckJPTShkYXRhLCBsZW5ndGgpOwogCiAgICAgYm9vbCBtb3ZlZERhdGFUb0J1ZmZlciA9IGZhbHNl
OwogCiAgICAgaWYgKG1fY29udGVudFR5cGUgPT0gQ1NTICYmICFtX2NoZWNrZWRGb3JDU1NDaGFy
c2V0KQotICAgICAgICBpZiAoIWNoZWNrRm9yQ1NTQ2hhcnNldChkYXRhLCBsZW4sIG1vdmVkRGF0
YVRvQnVmZmVyKSkKKyAgICAgICAgaWYgKCFjaGVja0ZvckNTU0NoYXJzZXQoZGF0YSwgbGVuZ3Ro
LCBtb3ZlZERhdGFUb0J1ZmZlcikpCiAgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsK
IAogICAgIGlmICgobV9jb250ZW50VHlwZSA9PSBIVE1MIHx8IG1fY29udGVudFR5cGUgPT0gWE1M
KSAmJiAhbV9jaGVja2VkRm9ySGVhZENoYXJzZXQpIC8vIEhUTUwgYW5kIFhNTAotICAgICAgICBp
ZiAoIWNoZWNrRm9ySGVhZENoYXJzZXQoZGF0YSwgbGVuLCBtb3ZlZERhdGFUb0J1ZmZlcikpCisg
ICAgICAgIGlmICghY2hlY2tGb3JIZWFkQ2hhcnNldChkYXRhLCBsZW5ndGgsIG1vdmVkRGF0YVRv
QnVmZmVyKSkKICAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCiAgICAgLy8gRklY
TUU6IEl0IGlzIHdyb25nIHRvIGNoYW5nZSB0aGUgZW5jb2RpbmcgZG93bnN0cmVhbSBhZnRlciB3
ZSBoYXZlIGFscmVhZHkgZG9uZSBzb21lIGRlY29kaW5nLgogICAgIGlmIChzaG91bGRBdXRvRGV0
ZWN0KCkpIHsKICAgICAgICAgaWYgKG1fZW5jb2RpbmcuaXNKYXBhbmVzZSgpKQotICAgICAgICAg
ICAgZGV0ZWN0SmFwYW5lc2VFbmNvZGluZyhkYXRhLCBsZW4pOyAvLyBGSVhNRTogV2Ugc2hvdWxk
IHVzZSBkZXRlY3RUZXh0RW5jb2RpbmcoKSBmb3IgYWxsIGxhbmd1YWdlcy4KKyAgICAgICAgICAg
IGRldGVjdEphcGFuZXNlRW5jb2RpbmcoZGF0YSwgbGVuZ3RoKTsgLy8gRklYTUU6IFdlIHNob3Vs
ZCB1c2UgZGV0ZWN0VGV4dEVuY29kaW5nKCkgZm9yIGFsbCBsYW5ndWFnZXMuCiAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgVGV4dEVuY29kaW5nIGRldGVjdGVkRW5jb2Rpbmc7Ci0gICAgICAg
ICAgICBpZiAoZGV0ZWN0VGV4dEVuY29kaW5nKGRhdGEsIGxlbiwgbV9oaW50RW5jb2RpbmcsICZk
ZXRlY3RlZEVuY29kaW5nKSkKKyAgICAgICAgICAgIGlmIChkZXRlY3RUZXh0RW5jb2RpbmcoZGF0
YSwgbGVuZ3RoLCBtX3BhcmVudEZyYW1lQXV0b0RldGVjdGVkRW5jb2RpbmcsICZkZXRlY3RlZEVu
Y29kaW5nKSkKICAgICAgICAgICAgICAgICBzZXRFbmNvZGluZyhkZXRlY3RlZEVuY29kaW5nLCBB
dXRvRGV0ZWN0ZWRFbmNvZGluZyk7CiAgICAgICAgIH0KICAgICB9CkBAIC02MzIsMTIgKzYyNywx
MiBAQCBTdHJpbmcgVGV4dFJlc291cmNlRGVjb2Rlcjo6ZGVjb2RlKGNvbnN0CiAgICAgICAgIG1f
Y29kZWMgPSBuZXdUZXh0Q29kZWMobV9lbmNvZGluZyk7CiAKICAgICBpZiAobV9idWZmZXIuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gbV9jb2RlYy0+ZGVjb2RlKGRhdGEgKyBsZW5ndGhPZkJP
TSwgbGVuIC0gbGVuZ3RoT2ZCT00sIGZhbHNlLCBtX2NvbnRlbnRUeXBlID09IFhNTCwgbV9zYXdF
cnJvcik7CisgICAgICAgIHJldHVybiBtX2NvZGVjLT5kZWNvZGUoZGF0YSArIGxlbmd0aE9mQk9N
LCBsZW5ndGggLSBsZW5ndGhPZkJPTSwgZmFsc2UsIG1fY29udGVudFR5cGUgPT0gWE1MLCBtX3Nh
d0Vycm9yKTsKIAogICAgIGlmICghbW92ZWREYXRhVG9CdWZmZXIpIHsKICAgICAgICAgc2l6ZV90
IG9sZFNpemUgPSBtX2J1ZmZlci5zaXplKCk7Ci0gICAgICAgIG1fYnVmZmVyLmdyb3cob2xkU2l6
ZSArIGxlbik7Ci0gICAgICAgIG1lbWNweShtX2J1ZmZlci5kYXRhKCkgKyBvbGRTaXplLCBkYXRh
LCBsZW4pOworICAgICAgICBtX2J1ZmZlci5ncm93KG9sZFNpemUgKyBsZW5ndGgpOworICAgICAg
ICBtZW1jcHkobV9idWZmZXIuZGF0YSgpICsgb2xkU2l6ZSwgZGF0YSwgbGVuZ3RoKTsKICAgICB9
CiAKICAgICBTdHJpbmcgcmVzdWx0ID0gbV9jb2RlYy0+ZGVjb2RlKG1fYnVmZmVyLmRhdGEoKSAr
IGxlbmd0aE9mQk9NLCBtX2J1ZmZlci5zaXplKCkgLSBsZW5ndGhPZkJPTSwgZmFsc2UsIG1fY29u
dGVudFR5cGUgPT0gWE1MICYmICFtX3VzZUxlbmllbnRYTUxEZWNvZGluZywgbV9zYXdFcnJvcik7
CkBAIC02NDcsMTUgKzY0MiwxNCBAQCBTdHJpbmcgVGV4dFJlc291cmNlRGVjb2Rlcjo6ZGVjb2Rl
KGNvbnN0CiAKIFN0cmluZyBUZXh0UmVzb3VyY2VEZWNvZGVyOjpmbHVzaCgpCiB7Ci0gICAvLyBJ
ZiB3ZSBjYW4gbm90IGlkZW50aWZ5IHRoZSBlbmNvZGluZyBldmVuIGFmdGVyIGEgZG9jdW1lbnQg
aXMgY29tcGxldGVseQotICAgLy8gbG9hZGVkLCB3ZSBuZWVkIHRvIGRldGVjdCB0aGUgZW5jb2Rp
bmcgaWYgb3RoZXIgY29uZGl0aW9ucyBmb3IKLSAgIC8vIGF1dG9kZXRlY3Rpb24gaXMgc2F0aXNm
aWVkLgorICAgIC8vIElmIHdlIGNhbiBub3QgaWRlbnRpZnkgdGhlIGVuY29kaW5nIGV2ZW4gYWZ0
ZXIgYSBkb2N1bWVudCBpcyBjb21wbGV0ZWx5CisgICAgLy8gbG9hZGVkLCB3ZSBuZWVkIHRvIGRl
dGVjdCB0aGUgZW5jb2RpbmcgaWYgb3RoZXIgY29uZGl0aW9ucyBmb3IKKyAgICAvLyBhdXRvZGV0
ZWN0aW9uIGlzIHNhdGlzZmllZC4KICAgICBpZiAobV9idWZmZXIuc2l6ZSgpICYmIHNob3VsZEF1
dG9EZXRlY3QoKQogICAgICAgICAmJiAoKCFtX2NoZWNrZWRGb3JIZWFkQ2hhcnNldCAmJiAobV9j
b250ZW50VHlwZSA9PSBIVE1MIHx8IG1fY29udGVudFR5cGUgPT0gWE1MKSkgfHwgKCFtX2NoZWNr
ZWRGb3JDU1NDaGFyc2V0ICYmIChtX2NvbnRlbnRUeXBlID09IENTUykpKSkgewotICAgICAgICAg
VGV4dEVuY29kaW5nIGRldGVjdGVkRW5jb2Rpbmc7Ci0gICAgICAgICBpZiAoZGV0ZWN0VGV4dEVu
Y29kaW5nKG1fYnVmZmVyLmRhdGEoKSwgbV9idWZmZXIuc2l6ZSgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2hpbnRFbmNvZGluZywgJmRldGVjdGVkRW5jb2RpbmcpKQotICAg
ICAgICAgICAgIHNldEVuY29kaW5nKGRldGVjdGVkRW5jb2RpbmcsIEF1dG9EZXRlY3RlZEVuY29k
aW5nKTsKKyAgICAgICAgVGV4dEVuY29kaW5nIGRldGVjdGVkRW5jb2Rpbmc7CisgICAgICAgIGlm
IChkZXRlY3RUZXh0RW5jb2RpbmcobV9idWZmZXIuZGF0YSgpLCBtX2J1ZmZlci5zaXplKCksIG1f
cGFyZW50RnJhbWVBdXRvRGV0ZWN0ZWRFbmNvZGluZywgJmRldGVjdGVkRW5jb2RpbmcpKQorICAg
ICAgICAgICAgc2V0RW5jb2RpbmcoZGV0ZWN0ZWRFbmNvZGluZywgQXV0b0RldGVjdGVkRW5jb2Rp
bmcpOwogICAgIH0KIAogICAgIGlmICghbV9jb2RlYykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
bG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuaAkocmV2aXNpb24gMjI1MjA3KQorKysgU291cmNl
L1dlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw3ICsxLDcgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xs
QG1waS1oZC5tcGcuZGUpCiAgICAgQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFr
b3YgKGFwQG55cG9wLmNvbSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgIENvcHlyaWdodCAoQykgMjAwNi0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjgsNiAr
MjgsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MTWV0YUNoYXJzZXRQYXJz
ZXI7CitjbGFzcyBUZXh0Q29kZWM7CiAKIGNsYXNzIFRleHRSZXNvdXJjZURlY29kZXIgOiBwdWJs
aWMgUmVmQ291bnRlZDxUZXh0UmVzb3VyY2VEZWNvZGVyPiB7CiBwdWJsaWM6CkBAIC00MiwzNSAr
NDMsMjYgQEAgcHVibGljOgogICAgICAgICBFbmNvZGluZ0Zyb21QYXJlbnRGcmFtZQogICAgIH07
CiAKLSAgICBzdGF0aWMgUmVmPFRleHRSZXNvdXJjZURlY29kZXI+IGNyZWF0ZShjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBjb25zdCBUZXh0RW5jb2RpbmcmIGRlZmF1bHRFbmNvZGluZyA9IFRleHRF
bmNvZGluZygpLCBib29sIHVzZXNFbmNvZGluZ0RldGVjdG9yID0gZmFsc2UpCi0gICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUZXh0UmVzb3VyY2VEZWNvZGVyKG1pbWVUeXBlLCBk
ZWZhdWx0RW5jb2RpbmcsIHVzZXNFbmNvZGluZ0RldGVjdG9yKSk7Ci0gICAgfQorICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBSZWY8VGV4dFJlc291cmNlRGVjb2Rlcj4gY3JlYXRlKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYgZGVmYXVsdEVuY29kaW5nID0geyB9
LCBib29sIHVzZXNFbmNvZGluZ0RldGVjdG9yID0gZmFsc2UpOwogICAgIFdFQkNPUkVfRVhQT1JU
IH5UZXh0UmVzb3VyY2VEZWNvZGVyKCk7CiAKICAgICB2b2lkIHNldEVuY29kaW5nKGNvbnN0IFRl
eHRFbmNvZGluZyYsIEVuY29kaW5nU291cmNlKTsKICAgICBjb25zdCBUZXh0RW5jb2RpbmcmIGVu
Y29kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGluZzsgfQogCi0gICAgYm9vbCBoYXNFcXVh
bEVuY29kaW5nRm9yQ2hhcnNldChjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICBib29sIGhhc0Vx
dWFsRW5jb2RpbmdGb3JDaGFyc2V0KGNvbnN0IFN0cmluZyYgY2hhcnNldCkgY29uc3Q7CiAKICAg
ICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBs
ZW5ndGgpOwogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBmbHVzaCgpOwogCiAgICAgV0VCQ09S
RV9FWFBPUlQgU3RyaW5nIGRlY29kZUFuZEZsdXNoKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBs
ZW5ndGgpOwogCi0gICAgdm9pZCBzZXRIaW50RW5jb2RpbmcoY29uc3QgVGV4dFJlc291cmNlRGVj
b2RlciogaGludERlY29kZXIpCi0gICAgewotICAgICAgICAvLyBoaW50RW5jb2RpbmcgaXMgZm9y
IHVzZSB3aXRoIGF1dG9kZXRlY3Rpb24sIHdoaWNoIHNob3VsZCBiZSAKLSAgICAgICAgLy8gb25s
eSBpbnZva2VkIHdoZW4gaGludEVuY29kaW5nIGNvbWVzIGZyb20gYXV0by1kZXRlY3Rpb24uCi0g
ICAgICAgIGlmIChoaW50RGVjb2RlciAmJiBoaW50RGVjb2Rlci0+bV9zb3VyY2UgPT0gQXV0b0Rl
dGVjdGVkRW5jb2RpbmcpCi0gICAgICAgICAgICBtX2hpbnRFbmNvZGluZyA9IGhpbnREZWNvZGVy
LT5lbmNvZGluZygpLm5hbWUoKTsKLSAgICB9CisgICAgdm9pZCBzZXRIaW50RW5jb2RpbmcoY29u
c3QgVGV4dFJlc291cmNlRGVjb2RlciogcGFyZW50RnJhbWVEZWNvZGVyKTsKICAgIAogICAgIHZv
aWQgdXNlTGVuaWVudFhNTERlY29kaW5nKCkgeyBtX3VzZUxlbmllbnRYTUxEZWNvZGluZyA9IHRy
dWU7IH0KICAgICBib29sIHNhd0Vycm9yKCkgY29uc3QgeyByZXR1cm4gbV9zYXdFcnJvcjsgfQog
CiBwcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFRleHRSZXNvdXJjZURlY29kZXIoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVGV4dEVuY29kaW5nJiBkZWZhdWx0RW5jb2RpbmcsIGJv
b2wgdXNlc0VuY29kaW5nRGV0ZWN0b3IpOworICAgIFRleHRSZXNvdXJjZURlY29kZXIoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVGV4dEVuY29kaW5nJiBkZWZhdWx0RW5jb2RpbmcsIGJv
b2wgdXNlc0VuY29kaW5nRGV0ZWN0b3IpOwogCiAgICAgZW51bSBDb250ZW50VHlwZSB7IFBsYWlu
VGV4dCwgSFRNTCwgWE1MLCBDU1MgfTsgLy8gUGxhaW5UZXh0IG9ubHkgY2hlY2tzIGZvciBCT00u
CiAgICAgc3RhdGljIENvbnRlbnRUeXBlIGRldGVybWluZUNvbnRlbnRUeXBlKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpOwpAQCAtODYsMTcgKzc4LDIyIEBAIHByaXZhdGU6CiAgICAgQ29udGVudFR5
cGUgbV9jb250ZW50VHlwZTsKICAgICBUZXh0RW5jb2RpbmcgbV9lbmNvZGluZzsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8VGV4dENvZGVjPiBtX2NvZGVjOwotICAgIEVuY29kaW5nU291cmNlIG1fc291
cmNlOwotICAgIGNvbnN0IGNoYXIqIG1faGludEVuY29kaW5nOwotICAgIFZlY3RvcjxjaGFyPiBt
X2J1ZmZlcjsKLSAgICBib29sIG1fY2hlY2tlZEZvckJPTTsKLSAgICBib29sIG1fY2hlY2tlZEZv
ckNTU0NoYXJzZXQ7Ci0gICAgYm9vbCBtX2NoZWNrZWRGb3JIZWFkQ2hhcnNldDsKLSAgICBib29s
IG1fdXNlTGVuaWVudFhNTERlY29kaW5nOyAvLyBEb24ndCBzdG9wIG9uIFhNTCBkZWNvZGluZyBl
cnJvcnMuCi0gICAgYm9vbCBtX3Nhd0Vycm9yOwotICAgIGJvb2wgbV91c2VzRW5jb2RpbmdEZXRl
Y3RvcjsKLQogICAgIHN0ZDo6dW5pcXVlX3B0cjxIVE1MTWV0YUNoYXJzZXRQYXJzZXI+IG1fY2hh
cnNldFBhcnNlcjsKKyAgICBFbmNvZGluZ1NvdXJjZSBtX3NvdXJjZSB7IERlZmF1bHRFbmNvZGlu
ZyB9OworICAgIGNvbnN0IGNoYXIqIG1fcGFyZW50RnJhbWVBdXRvRGV0ZWN0ZWRFbmNvZGluZyB7
IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8Y2hhcj4gbV9idWZmZXI7CisgICAgYm9vbCBtX2NoZWNr
ZWRGb3JCT00geyBmYWxzZSB9OworICAgIGJvb2wgbV9jaGVja2VkRm9yQ1NTQ2hhcnNldCB7IGZh
bHNlIH07CisgICAgYm9vbCBtX2NoZWNrZWRGb3JIZWFkQ2hhcnNldCB7IGZhbHNlIH07CisgICAg
Ym9vbCBtX3VzZUxlbmllbnRYTUxEZWNvZGluZyB7IGZhbHNlIH07IC8vIERvbid0IHN0b3Agb24g
WE1MIGRlY29kaW5nIGVycm9ycy4KKyAgICBib29sIG1fc2F3RXJyb3IgeyBmYWxzZSB9OworICAg
IGJvb2wgbV91c2VzRW5jb2RpbmdEZXRlY3RvciB7IGZhbHNlIH07CiB9OwogCitpbmxpbmUgdm9p
ZCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpzZXRIaW50RW5jb2RpbmcoY29uc3QgVGV4dFJlc291cmNl
RGVjb2RlciogcGFyZW50RnJhbWVEZWNvZGVyKQoreworICAgIGlmIChwYXJlbnRGcmFtZURlY29k
ZXIgJiYgcGFyZW50RnJhbWVEZWNvZGVyLT5tX3NvdXJjZSA9PSBBdXRvRGV0ZWN0ZWRFbmNvZGlu
ZykKKyAgICAgICAgbV9wYXJlbnRGcmFtZUF1dG9EZXRlY3RlZEVuY29kaW5nID0gcGFyZW50RnJh
bWVEZWNvZGVyLT5lbmNvZGluZygpLm5hbWUoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5EYXRh
LmgiCiAjaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2lu
Y2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVVVJRC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVHJlZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVRyZWUuY3BwCShyZXZpc2lvbiAyMjUyMDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDcgKzI4LDYgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCiAj
aW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlU2VyaWFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
U2VyaWFsaXplci5jcHAJKHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZVNlcmlhbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksOCArMTk5LDcgQEAgdm9p
ZCBQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplRnJhbWUoRnJhbQogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIFN0cmluZyB0ZXh0ID0gYWNjdW11bGF0b3Iuc2VyaWFsaXplTm9kZXMoKmRvY3Vt
ZW50LT5kb2N1bWVudEVsZW1lbnQoKSwgSW5jbHVkZU5vZGUpOwotICAgIENTdHJpbmcgZnJhbWVI
VE1MID0gdGV4dEVuY29kaW5nLmVuY29kZSh0ZXh0LCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7
Ci0gICAgbV9yZXNvdXJjZXMuYXBwZW5kKHsgdXJsLCBkb2N1bWVudC0+c3VnZ2VzdGVkTUlNRVR5
cGUoKSwgU2hhcmVkQnVmZmVyOjpjcmVhdGUoZnJhbWVIVE1MLmRhdGEoKSwgZnJhbWVIVE1MLmxl
bmd0aCgpKSB9KTsKKyAgICBtX3Jlc291cmNlcy5hcHBlbmQoeyB1cmwsIGRvY3VtZW50LT5zdWdn
ZXN0ZWRNSU1FVHlwZSgpLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZSh0ZXh0RW5jb2RpbmcuZW5jb2Rl
KHRleHQsIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKSkgfSk7CiAgICAgbV9yZXNvdXJjZVVSTHMu
YWRkKHVybCk7CiAKICAgICBmb3IgKGF1dG8mIG5vZGUgOiBub2RlcykgewpAQCAtMjY0LDkgKzI2
Myw3IEBAIHZvaWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUNTU1N0eWxlU2gKICAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBjaGVjayB3aGV0aGVyIGEgY2hhcnNldCBoYXMgYmVlbiBzcGVj
aWZpZWQgYW5kIGlmIG5vbmUgd2FzIGZvdW5kIGFkZCBvbmUuCiAgICAgICAgIFRleHRFbmNvZGlu
ZyB0ZXh0RW5jb2Rpbmcoc3R5bGVTaGVldC0+Y29udGVudHMoKS5jaGFyc2V0KCkpOwogICAgICAg
ICBBU1NFUlQodGV4dEVuY29kaW5nLmlzVmFsaWQoKSk7Ci0gICAgICAgIFN0cmluZyB0ZXh0U3Ry
aW5nID0gY3NzVGV4dC50b1N0cmluZygpOwotICAgICAgICBDU3RyaW5nIHRleHQgPSB0ZXh0RW5j
b2RpbmcuZW5jb2RlKHRleHRTdHJpbmcsIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKLSAgICAg
ICAgbV9yZXNvdXJjZXMuYXBwZW5kKHsgdXJsLCBBU0NJSUxpdGVyYWwgeyAidGV4dC9jc3MiIH0s
IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHRleHQuZGF0YSgpLCB0ZXh0Lmxlbmd0aCgpKSB9KTsKKyAg
ICAgICAgbV9yZXNvdXJjZXMuYXBwZW5kKHsgdXJsLCBBU0NJSUxpdGVyYWwgeyAidGV4dC9jc3Mi
IH0sIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHRleHRFbmNvZGluZy5lbmNvZGUoY3NzVGV4dC50b1N0
cmluZygpLCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcykpIH0pOwogICAgICAgICBtX3Jlc291cmNl
VVJMcy5hZGQodXJsKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9D
b250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAJKHJldmlzaW9uIDIyNTIwNykKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzMiwxMSArMzMyLDExIEBAIENvbnRlbnRTZWN1cml0eVBvbGljeTo6SGFzaElu
RW5mb3JjZWRBbmQKIAogICAgIC8vIEZJWE1FOiBDb21wdXRlIHRoZSBkaWdlc3Qgd2l0aCByZXNw
ZWN0IHRvIHRoZSByYXcgYnl0ZXMgcmVjZWl2ZWQgZnJvbSB0aGUgcGFnZS4KICAgICAvLyBTZWUg
PGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTUxODQ+LgotICAgIENT
dHJpbmcgY29udGVudENTdHJpbmcgPSBlbmNvZGluZ1RvVXNlLmVuY29kZShjb250ZW50LCBFbnRp
dGllc0ZvclVuZW5jb2RhYmxlcyk7CisgICAgYXV0byBlbmNvZGVkQ29udGVudCA9IGVuY29kaW5n
VG9Vc2UuZW5jb2RlKGNvbnRlbnQsIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKICAgICBib29s
IGZvdW5kSGFzaEluRW5mb3JjZWRQb2xpY2llcyA9IGZhbHNlOwogICAgIGJvb2wgZm91bmRIYXNo
SW5SZXBvcnRPbmx5UG9saWNpZXMgPSBmYWxzZTsKICAgICBmb3IgKGF1dG8gYWxnb3JpdGhtIDog
YWxnb3JpdGhtcykgewotICAgICAgICBDb250ZW50U2VjdXJpdHlQb2xpY3lIYXNoIGhhc2ggPSBj
cnlwdG9ncmFwaGljRGlnZXN0Rm9yQnl0ZXMoYWxnb3JpdGhtLCBjb250ZW50Q1N0cmluZy5kYXRh
KCksIGNvbnRlbnRDU3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAgQ29udGVudFNlY3VyaXR5UG9s
aWN5SGFzaCBoYXNoID0gY3J5cHRvZ3JhcGhpY0RpZ2VzdEZvckJ5dGVzKGFsZ29yaXRobSwgZW5j
b2RlZENvbnRlbnQuZGF0YSgpLCBlbmNvZGVkQ29udGVudC5zaXplKCkpOwogICAgICAgICBpZiAo
IWZvdW5kSGFzaEluRW5mb3JjZWRQb2xpY2llcyAmJiBhbGxQb2xpY2llc1dpdGhEaXNwb3NpdGlv
bkFsbG93KENvbnRlbnRTZWN1cml0eVBvbGljeTo6RGlzcG9zaXRpb246OkVuZm9yY2UsIHN0ZDo6
Zm9yd2FyZDxQcmVkaWNhdGU+KHByZWRpY2F0ZSksIGhhc2gpKQogICAgICAgICAgICAgZm91bmRI
YXNoSW5FbmZvcmNlZFBvbGljaWVzID0gdHJ1ZTsKICAgICAgICAgaWYgKCFmb3VuZEhhc2hJblJl
cG9ydE9ubHlQb2xpY2llcyAmJiBhbGxQb2xpY2llc1dpdGhEaXNwb3NpdGlvbkFsbG93KENvbnRl
bnRTZWN1cml0eVBvbGljeTo6RGlzcG9zaXRpb246OlJlcG9ydE9ubHksIHN0ZDo6Zm9yd2FyZDxQ
cmVkaWNhdGU+KHByZWRpY2F0ZSksIGhhc2gpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vRmlsZUhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
RmlsZUhhbmRsZS5jcHAJKHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0ZpbGVIYW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw2IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRmlsZUhhbmRsZS5oIgogCi0jaW5jbHVkZSA8d3Rm
L1N0cmluZ0V4dHJhcy5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZpbGVIYW5kbGU6OkZp
bGVIYW5kbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGUgbW9k
ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkocmV2aXNp
b24gMjI1MjA3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsMTIgQEAgUmVmPFNoYXJlZEJ1ZmZlcj4gU2hhcmVk
QnVmZmVyOjpjcmVhdGUoVgogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihX
VEZNb3ZlKHZlY3RvcikpKTsKIH0KIAorLy8gRklYTUU6IE1vdmUgdGhlIHdob2xlIGNsYXNzIGZy
b20gVmVjdG9yPGNoYXI+IHRvIFZlY3Rvcjx1aW50OF90PiBhbmQgbWFrZSB0aGlzIGVmZmljaWVu
dCwgcmVwbGFjaW5nIHRoZSBWZWN0b3I8Y2hhcj4gdmVyc2lvbiBhYm92ZS4KK1JlZjxTaGFyZWRC
dWZmZXI+IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFZlY3Rvcjx1aW50OF90PiYmIHZlY3RvcikKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRCdWZmZXIgeyB2ZWN0b3IuZGF0YSgpLCB2
ZWN0b3Iuc2l6ZSgpIH0pOworfQorCiB2b2lkIFNoYXJlZEJ1ZmZlcjo6Y29tYmluZUludG9PbmVT
ZWdtZW50KCkgY29uc3QKIHsKICNpZiAhQVNTRVJUX0RJU0FCTEVECkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAkocmV2aXNpb24gMjI1MjA3KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYw
LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBjcmVhdGVXaXRo
Q29udGVudHNPZkZpbGUoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCk7CiAKICAgICBzdGF0aWMgUmVm
PFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFZlY3RvcjxjaGFyPiYmKTsKLSAgICAKKyAgICBzdGF0aWMg
UmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFZlY3Rvcjx1aW50OF90PiYmKTsKKwogI2lmIFVTRShG
T1VOREFUSU9OKQogICAgIFJldGFpblB0cjxOU0RhdGE+IGNyZWF0ZU5TRGF0YSgpIGNvbnN0Owog
ICAgIFJldGFpblB0cjxOU0FycmF5PiBjcmVhdGVOU0RhdGFBcnJheSgpIGNvbnN0OwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuY3BwCShyZXZpc2lvbiAyMjUyMDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MjEsOSArNjIxLDkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KIHZvaWQgVVJM
UGFyc2VyOjplbmNvZGVRdWVyeShjb25zdCBWZWN0b3I8VUNoYXI+JiBzb3VyY2UsIGNvbnN0IFRl
eHRFbmNvZGluZyYgZW5jb2RpbmcsIENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+IGl0
ZXJhdG9yKQogewogICAgIC8vIEZJWE1FOiBJdCBpcyB1bmNsZWFyIGluIHRoZSBzcGVjIHdoYXQg
dG8gZG8gd2hlbiBlbmNvZGluZyBmYWlscy4gVGhlIGJlaGF2aW9yIHNob3VsZCBiZSBzcGVjaWZp
ZWQgYW5kIHRlc3RlZC4KLSAgICBDU3RyaW5nIGVuY29kZWQgPSBlbmNvZGluZy5lbmNvZGUoU3Ry
aW5nVmlldyhzb3VyY2UuZGF0YSgpLCBzb3VyY2Uuc2l6ZSgpKSwgVVJMRW5jb2RlZEVudGl0aWVz
Rm9yVW5lbmNvZGFibGVzKTsKLSAgICBjb25zdCBjaGFyKiBkYXRhID0gZW5jb2RlZC5kYXRhKCk7
Ci0gICAgc2l6ZV90IGxlbmd0aCA9IGVuY29kZWQubGVuZ3RoKCk7CisgICAgYXV0byBlbmNvZGVk
ID0gZW5jb2RpbmcuZW5jb2RlKFN0cmluZ1ZpZXcoc291cmNlLmRhdGEoKSwgc291cmNlLnNpemUo
KSksIFVSTEVuY29kZWRFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7CisgICAgYXV0byogZGF0YSA9
IGVuY29kZWQuZGF0YSgpOworICAgIHNpemVfdCBsZW5ndGggPSBlbmNvZGVkLnNpemUoKTsKICAg
ICAKICAgICBpZiAoIWxlbmd0aCA9PSAhaXRlcmF0b3IuYXRFbmQoKSkgewogICAgICAgICBzeW50
YXhWaW9sYXRpb24oaXRlcmF0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCShyZXZp
c2lvbiAyMjUyMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzg3LDExICsxNzg3LDEwIEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQzoKIAogICAgIGlmIChzY2hlbWUgPT0gImNsZWFya2V5IikgewogICAgICAg
ICBTdHJpbmcga2V5SUQgPSBbW1thdlJlcXVlc3QgcmVxdWVzdF0gVVJMXSByZXNvdXJjZVNwZWNp
Zmllcl07Ci0gICAgICAgIFN0cmluZ1ZpZXcga2V5SURWaWV3KGtleUlEKTsKLSAgICAgICAgQ1N0
cmluZyB1dGY4RW5jb2RlZEtleUlkID0gVVRGOEVuY29kaW5nKCkuZW5jb2RlKGtleUlEVmlldywg
VVJMRW5jb2RlZEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKKyAgICAgICAgYXV0byBlbmNvZGVk
S2V5SWQgPSBVVEY4RW5jb2RpbmcoKS5lbmNvZGUoa2V5SUQsIFVSTEVuY29kZWRFbnRpdGllc0Zv
clVuZW5jb2RhYmxlcyk7CiAKLSAgICAgICAgUmVmUHRyPFVpbnQ4QXJyYXk+IGluaXREYXRhID0g
VWludDhBcnJheTo6Y3JlYXRlKHV0ZjhFbmNvZGVkS2V5SWQubGVuZ3RoKCkpOwotICAgICAgICBp
bml0RGF0YS0+c2V0UmFuZ2UocmVpbnRlcnByZXRfY2FzdDxjb25zdCBKU0M6OlVpbnQ4QWRhcHRv
cjo6VHlwZSo+KHV0ZjhFbmNvZGVkS2V5SWQuZGF0YSgpKSwgdXRmOEVuY29kZWRLZXlJZC5sZW5n
dGgoKSwgMCk7CisgICAgICAgIGF1dG8gaW5pdERhdGEgPSBVaW50OEFycmF5OjpjcmVhdGUoZW5j
b2RlZEtleUlkLnNpemUoKSk7CisgICAgICAgIGluaXREYXRhLT5zZXRSYW5nZShlbmNvZGVkS2V5
SWQuZGF0YSgpLCBlbmNvZGVkS2V5SWQuc2l6ZSgpLCAwKTsKIAogICAgICAgICBhdXRvIGtleURh
dGEgPSBwbGF5ZXIoKS0+Y2FjaGVkS2V5Rm9yS2V5SWQoa2V5SUQpOwogICAgICAgICBpZiAoa2V5
RGF0YSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZv
cm1DQUxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuY3BwCShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyQ2xpZW50
LmgiCiAjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KICNpbmNsdWRl
IDxDb3JlVGV4dC9Db3JlVGV4dC5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKICNpZiBQTEFURk9STShXSU4pCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAkocmV2aXNp
b24gMjI1MjA3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDE2ICs4MSwxNyBAQCBSZWY8Rm9ybURhdGE+IEZvcm1E
YXRhOjpjcmVhdGUoY29uc3Qgdm9pCiAKIFJlZjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZShj
b25zdCBDU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBjcmVhdGUoKTsKLSAg
ICByZXN1bHQtPmFwcGVuZERhdGEoc3RyaW5nLmRhdGEoKSwgc3RyaW5nLmxlbmd0aCgpKTsKLSAg
ICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBjcmVhdGUoc3RyaW5nLmRhdGEoKSwgc3RyaW5n
Lmxlbmd0aCgpKTsKIH0KIAogUmVmPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IFZl
Y3RvcjxjaGFyPiYgdmVjdG9yKQogewotICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlKCk7Ci0gICAg
cmVzdWx0LT5hcHBlbmREYXRhKHZlY3Rvci5kYXRhKCksIHZlY3Rvci5zaXplKCkpOwotICAgIHJl
dHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGNyZWF0ZSh2ZWN0b3IuZGF0YSgpLCB2ZWN0b3Iuc2l6
ZSgpKTsKK30KKworUmVmPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYgdmVjdG9yKQoreworICAgIHJldHVybiBjcmVhdGUodmVjdG9yLmRhdGEoKSwgdmVj
dG9yLnNpemUoKSk7CiB9CiAKIFJlZjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCBE
T01Gb3JtRGF0YSYgZm9ybURhdGEsIEVuY29kaW5nVHlwZSBlbmNvZGluZ1R5cGUpCkBAIC0xMTQs
NyArMTE1LDkgQEAgUmVmPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y29weSgpIGNvbnN0CiAKIFJlZjxG
b3JtRGF0YT4gRm9ybURhdGE6Omlzb2xhdGVkQ29weSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6
IGlzb2xhdGVkQ29weSgpIChoaXN0b3JpY2FsbHkgZGVlcENvcHkoKSkgb25seSBjb3BpZXMgY2Vy
dGFpbiB2YWx1ZXMgZnJvbSBgdGhpc2AuIFdoeSBpcyB0aGF0PworICAgIC8vIEZJWE1FOiBpc29s
YXRlZENvcHkoKSBkb2VzIG5vdCBjb3B5IG1faWRlbnRpZmVyLCBtX2JvdW5kYXJ5LCBvciBtX2Nv
bnRhaW5zUGFzc3dvcmREYXRhLgorICAgIC8vIElzIGFsbCBvZiB0aGF0IGNvcnJlY3QgYW5kIGlu
dGVudGlvbmFsPworCiAgICAgYXV0byBmb3JtRGF0YSA9IGNyZWF0ZSgpOwogCiAgICAgZm9ybURh
dGEtPm1fYWx3YXlzU3RyZWFtID0gbV9hbHdheXNTdHJlYW07CkBAIC0xODMsNyArMTg2LDcgQEAg
dm9pZCBGb3JtRGF0YTo6YXBwZW5kQmxvYihjb25zdCBVUkwmIGJsbwogICAgIG1fbGVuZ3RoSW5C
eXRlcyA9IHN0ZDo6bnVsbG9wdDsKIH0KIAotc3RhdGljIENTdHJpbmcgbm9ybWFsaXplU3RyaW5n
RGF0YShUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorc3RhdGlj
IFZlY3Rvcjx1aW50OF90PiBub3JtYWxpemVTdHJpbmdEYXRhKFRleHRFbmNvZGluZyYgZW5jb2Rp
bmcsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgcmV0dXJuIG5vcm1hbGl6ZUxpbmVFbmRp
bmdzVG9DUkxGKGVuY29kaW5nLmVuY29kZSh2YWx1ZSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMp
KTsKIH0KQEAgLTIzMCw3ICsyMzMsNyBAQCB2b2lkIEZvcm1EYXRhOjphcHBlbmRNdWx0aVBhcnRT
dHJpbmdWYWx1CiAgICAgYXBwZW5kRGF0YShoZWFkZXIuZGF0YSgpLCBoZWFkZXIuc2l6ZSgpKTsK
IAogICAgIGF1dG8gbm9ybWFsaXplZFN0cmluZ0RhdGEgPSBub3JtYWxpemVTdHJpbmdEYXRhKGVu
Y29kaW5nLCBzdHJpbmcpOwotICAgIGFwcGVuZERhdGEobm9ybWFsaXplZFN0cmluZ0RhdGEuZGF0
YSgpLCBub3JtYWxpemVkU3RyaW5nRGF0YS5sZW5ndGgoKSk7CisgICAgYXBwZW5kRGF0YShub3Jt
YWxpemVkU3RyaW5nRGF0YS5kYXRhKCksIG5vcm1hbGl6ZWRTdHJpbmdEYXRhLnNpemUoKSk7CiB9
CiAKIHZvaWQgRm9ybURhdGE6OmFwcGVuZE11bHRpUGFydEtleVZhbHVlUGFpckl0ZW1zKGNvbnN0
IERPTUZvcm1EYXRhJiBmb3JtRGF0YSwgRG9jdW1lbnQqIGRvY3VtZW50KQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaAkocmV2aXNpb24gMjI1MjA3KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCwxMyArMzQsMTEgQEAgY2xhc3MgRmlsZTsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsK
IGNsYXNzIFRleHRFbmNvZGluZzsKIAorLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBhIFZhcmlh
bnQgb2Ygc3RydWN0cyBhbmQgcmVtb3ZlICJUeXBlIiBhbmQgYWxzbyB0aGUgIm1fIiBwcmVmaXhl
cyBmcm9tIHRoZSBkYXRhIG1lbWJlcnMuCisvLyBUaGUgbWVtYmVyIGZ1bmN0aW9ucyBjYW4gYmVj
b21lIG5vbi1tZW1iZXIgZnVjbnRpb25zLgogY2xhc3MgRm9ybURhdGFFbGVtZW50IHsKIHB1Ymxp
YzoKLSAgICBlbnVtIGNsYXNzIFR5cGUgewotICAgICAgICBEYXRhLAotICAgICAgICBFbmNvZGVk
RmlsZSwKLSAgICAgICAgRW5jb2RlZEJsb2IsCi0gICAgfTsKKyAgICBlbnVtIGNsYXNzIFR5cGUg
eyBEYXRhLCBFbmNvZGVkRmlsZSwgRW5jb2RlZEJsb2IgfTsKIAogICAgIEZvcm1EYXRhRWxlbWVu
dCgpCiAgICAgICAgIDogbV90eXBlKFR5cGU6OkRhdGEpCkBAIC03NCwxMCArNzIsOCBAQCBwdWJs
aWM6CiAKICAgICBGb3JtRGF0YUVsZW1lbnQgaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgotICAgIHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPgotICAgIHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPEZvcm1EYXRhRWxlbWVudD4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8Rm9ybURhdGFFbGVtZW50PiBk
ZWNvZGUoRGVjb2RlciYpOwogCiAgICAgVHlwZSBtX3R5cGU7CiAgICAgVmVjdG9yPGNoYXI+IG1f
ZGF0YTsKQEAgLTg3LDkgKzgzLDggQEAgcHVibGljOgogICAgIGludDY0X3QgbV9maWxlTGVuZ3Ro
OwogICAgIGRvdWJsZSBtX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWU7CiAgICAgLy8gRklY
TUU6IEdlbmVyYXRlZCBmaWxlIHN1cHBvcnQgaW4gRm9ybURhdGEgaXMgYWxtb3N0IGlkZW50aWNh
bCB0byBCbG9iLCB0aGV5IHNob3VsZCBiZSBtZXJnZWQuCi0gICAgLy8gV2UgY2FuJ3QganVzdCBz
d2l0Y2ggdG8gdXNpbmcgQmxvYnMgZm9yIGFsbCBmaWxlcyBmb3IgdHdvIHJlYXNvbnM6Ci0gICAg
Ly8gMS4gTm90IGFsbCBwbGF0Zm9ybXMgZW5hYmxlIEJMT0Igc3VwcG9ydC4KLSAgICAvLyAyLiBF
bmNvZGVkRmlsZSBmb3JtIGRhdGEgZWxlbWVudHMgZG8gbm90IGhhdmUgYSB2YWxpZCBtX2V4cGVj
dGVkRmlsZU1vZGlmaWNhdGlvblRpbWUsIG1lYW5pbmcgdGhhdCB3ZSBhbHdheXMgdXBsb2FkIHRo
ZSBsYXRlc3QgY29udGVudCBmcm9tIGRpc2suCisgICAgLy8gV2UgY2FuJ3QganVzdCBzd2l0Y2gg
dG8gdXNpbmcgQmxvYnMgZm9yIGFsbCBmaWxlcyBiZWNhdXNlCisgICAgLy8gRW5jb2RlZEZpbGUg
Zm9ybSBkYXRhIGVsZW1lbnRzIGRvIG5vdCBoYXZlIGEgdmFsaWQgbV9leHBlY3RlZEZpbGVNb2Rp
ZmljYXRpb25UaW1lLCBtZWFuaW5nIHRoYXQgd2UgYWx3YXlzIHVwbG9hZCB0aGUgbGF0ZXN0IGNv
bnRlbnQgZnJvbSBkaXNrLgogICAgIFN0cmluZyBtX2dlbmVyYXRlZEZpbGVuYW1lOwogICAgIGJv
b2wgbV9zaG91bGRHZW5lcmF0ZUZpbGU7CiAgICAgYm9vbCBtX293bnNHZW5lcmF0ZWRGaWxlOwpA
QCAtMTE3LDcgKzExMiw2IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9ybURhdGFF
bGUKICAgICByZXR1cm4gIShhID09IGIpOwogfQogCi0KIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29k
ZXI+CiB2b2lkIEZvcm1EYXRhRWxlbWVudDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
CiB7CkBAIC0yMDQsNiArMTk4LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBSZWY8Rm9ybURhdGE+IGNyZWF0ZShjb25zdCB2b2lkKiwgc2l6ZV90KTsKICAgICBzdGF0aWMg
UmVmPEZvcm1EYXRhPiBjcmVhdGUoY29uc3QgQ1N0cmluZyYpOwogICAgIHN0YXRpYyBSZWY8Rm9y
bURhdGE+IGNyZWF0ZShjb25zdCBWZWN0b3I8Y2hhcj4mKTsKKyAgICBzdGF0aWMgUmVmPEZvcm1E
YXRhPiBjcmVhdGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik7CiAgICAgc3RhdGljIFJlZjxGb3Jt
RGF0YT4gY3JlYXRlKGNvbnN0IERPTUZvcm1EYXRhJiwgRW5jb2RpbmdUeXBlID0gRm9ybVVSTEVu
Y29kZWQpOwogICAgIHN0YXRpYyBSZWY8Rm9ybURhdGE+IGNyZWF0ZU11bHRpUGFydChjb25zdCBE
T01Gb3JtRGF0YSYsIERvY3VtZW50Kik7CiAgICAgV0VCQ09SRV9FWFBPUlQgfkZvcm1EYXRhKCk7
CkBAIC0zMDAsNiArMjk1LDcgQEAgdm9pZCBGb3JtRGF0YTo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIAogICAgIGVuY29kZXIgPDwgbV9ib3VuZGFyeTsKICAgICBlbmNvZGVyIDw8IG1fZWxlbWVu
dHM7CiAgICAgZW5jb2RlciA8PCBtX2lkZW50aWZpZXI7CisgICAgLy8gRklYTUU6IERvZXMgbm90
IGVuY29kZSBtX2NvbnRhaW5zUGFzc3dvcmREYXRhLiBXaHkgaXMgdGhhdCBPSz8KIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvRm9ybURhdGFCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5jcHAJKHJldmlzaW9uIDIyNTIwNykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtu
b2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3Rv
IChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAo
bXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAgICAgICAo
QykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93
d3cudG9yY2htb2JpbGUuY29tLykKICAqCkBAIC0zNiw3ICszNiw4IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotLy8gSGVscGVyIGZ1bmN0aW9ucworbmFtZXNwYWNlIEZvcm1EYXRhQnVpbGRl
ciB7CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmQoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNo
YXIgc3RyaW5nKQogewogICAgIGJ1ZmZlci5hcHBlbmQoc3RyaW5nKTsKQEAgLTUyLDE0ICs1Mywy
MCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kKFZlY3RvcjxjaGFyPiYgCiAgICAgYnVmZmVy
LmFwcGVuZChzdHJpbmcuZGF0YSgpLCBzdHJpbmcubGVuZ3RoKCkpOwogfQogCi1zdGF0aWMgdm9p
ZCBhcHBlbmRRdW90ZWRTdHJpbmcoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNvbnN0IENTdHJpbmcm
IHN0cmluZykKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmQoVmVjdG9yPGNoYXI+JiBidWZmZXIs
IGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc3RyaW5nKQoreworICAgIGJ1ZmZlci5hcHBlbmRWZWN0
b3Ioc3RyaW5nKTsKK30KKworc3RhdGljIHZvaWQgYXBwZW5kUXVvdGVkKFZlY3RvcjxjaGFyPiYg
YnVmZmVyLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHN0cmluZykKIHsKICAgICAvLyBBcHBlbmQg
YSBzdHJpbmcgYXMgYSBxdW90ZWQgdmFsdWUsIGVzY2FwaW5nIHF1b3RlcyBhbmQgbGluZSBicmVh
a3MuCiAgICAgLy8gRklYTUU6IElzIGl0IGNvcnJlY3QgdG8gdXNlIHBlcmNlbnQgZXNjYXBpbmcg
aGVyZT8gT3RoZXIgYnJvd3NlcnMgZG8gbm90IGVuY29kZSB0aGVzZSBjaGFyYWN0ZXJzIHlldCwK
ICAgICAvLyBzbyB3ZSBzaG91bGQgdGVzdCBwb3B1bGFyIHNlcnZlcnMgdG8gZmluZCBvdXQgaWYg
dGhlcmUgaXMgYW4gZW5jb2RpbmcgZm9ybSB0aGV5IGNhbiBoYW5kbGUuCi0gICAgc2l6ZV90IGxl
bmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7Ci0gICAgICAgIGNoYXIgYyA9IHN0cmluZy5kYXRhKClbaV07CisgICAgLy8gRklY
TUU6IElmIHdlIHJlYWxseSB3YW50IHRvIHVzZSBwZXJjZW50IGVzY2FwaW5nIGluIGEgZ29vZCB3
YXksIHdlIG5lZWQgdG8gZXNjYXBlIHRoZSAiJSIgY2hhcmFjdGVyIHRvbyEKKyAgICBzaXplX3Qg
c2l6ZSA9IHN0cmluZy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyAr
K2kpIHsKKyAgICAgICAgY2hhciBjID0gc3RyaW5nW2ldOwogICAgICAgICBzd2l0Y2ggKGMpIHsK
ICAgICAgICAgY2FzZSAweEE6CiAgICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCAiJTBBIik7CkBA
IC03Niw3ICs4MywzNCBAQCBzdGF0aWMgdm9pZCBhcHBlbmRRdW90ZWRTdHJpbmcoVmVjdG9yPGNo
CiAgICAgfQogfQogCi1WZWN0b3I8Y2hhcj4gRm9ybURhdGFCdWlsZGVyOjpnZW5lcmF0ZVVuaXF1
ZUJvdW5kYXJ5U3RyaW5nKCkKK3N0YXRpYyB2b2lkIGFwcGVuZEVuY29kZWRBc0Zvcm1EYXRhKFZl
Y3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCB1aW50OF90KiBzdHJpbmcsIHNpemVfdCBsZW5ndGgp
Cit7CisgICAgLy8gU2FtZSBzYWZlIGNoYXJhY3RlcnMgYXMgTmV0c2NhcGUgZm9yIGNvbXBhdGli
aWxpdHkuCisgICAgc3RhdGljIGNvbnN0IGNoYXIgc2FmZUNoYXJhY3RlcnNbXSA9ICItLl8qIjsK
KworICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2ludGVyYWN0L2Zvcm1zLmh0bWwj
aC0xNy4xMy40LjEKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Cisg
ICAgICAgIGF1dG8gYyA9IHN0cmluZ1tpXTsKKworICAgICAgICBpZiAoaXNBU0NJSUFscGhhbnVt
ZXJpYyhjKSB8fCBzdHJjaHIoc2FmZUNoYXJhY3RlcnMsIGMpKQorICAgICAgICAgICAgYXBwZW5k
KGJ1ZmZlciwgYyk7CisgICAgICAgIGVsc2UgaWYgKGMgPT0gJyAnKQorICAgICAgICAgICAgYXBw
ZW5kKGJ1ZmZlciwgJysnKTsKKyAgICAgICAgZWxzZSBpZiAoYyA9PSAnXG4nIHx8IChjID09ICdc
cicgJiYgKGkgKyAxID49IGxlbmd0aCB8fCBzdHJpbmdbaSArIDFdICE9ICdcbicpKSkKKyAgICAg
ICAgICAgIGFwcGVuZChidWZmZXIsICIlMEQlMEEiKTsKKyAgICAgICAgZWxzZSBpZiAoYyAhPSAn
XHInKSB7CisgICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCAnJScpOworICAgICAgICAgICAgYXBw
ZW5kQnl0ZUFzSGV4KGMsIGJ1ZmZlcik7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2
b2lkIGFwcGVuZEVuY29kZWRBc0Zvcm1EYXRhKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCBW
ZWN0b3I8dWludDhfdD4mIHN0cmluZykKK3sKKyAgICBhcHBlbmRFbmNvZGVkQXNGb3JtRGF0YShi
dWZmZXIsIHN0cmluZy5kYXRhKCksIHN0cmluZy5zaXplKCkpOworfQorCitWZWN0b3I8Y2hhcj4g
Z2VuZXJhdGVVbmlxdWVCb3VuZGFyeVN0cmluZygpCiB7CiAgICAgVmVjdG9yPGNoYXI+IGJvdW5k
YXJ5OwogCkBAIC0xMTcsMTggKzE1MSwxOCBAQCBWZWN0b3I8Y2hhcj4gRm9ybURhdGFCdWlsZGVy
OjpnZW5lcmF0ZVVuCiAgICAgcmV0dXJuIGJvdW5kYXJ5OwogfQogCi12b2lkIEZvcm1EYXRhQnVp
bGRlcjo6YmVnaW5NdWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNvbnN0IENT
dHJpbmcmIGJvdW5kYXJ5LCBjb25zdCBDU3RyaW5nJiBuYW1lKQordm9pZCBiZWdpbk11bHRpUGFy
dEhlYWRlcihWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3QgQ1N0cmluZyYgYm91bmRhcnksIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgbmFtZSkKIHsKICAgICBhZGRCb3VuZGFyeVRvTXVsdGlQYXJ0
SGVhZGVyKGJ1ZmZlciwgYm91bmRhcnkpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgbG9zZXMgZGF0
YSBpcnJldmVyc2libHkgaWYgdGhlIGlucHV0IG5hbWUgaW5jbHVkZXMgY2hhcmFjdGVycyB5b3Ug
Y2FuJ3QgZW5jb2RlCiAgICAgLy8gaW4gdGhlIHdlYnNpdGUncyBjaGFyYWN0ZXIgc2V0LgogICAg
IGFwcGVuZChidWZmZXIsICJDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9XCIi
KTsKLSAgICBhcHBlbmRRdW90ZWRTdHJpbmcoYnVmZmVyLCBuYW1lKTsKKyAgICBhcHBlbmRRdW90
ZWQoYnVmZmVyLCBuYW1lKTsKICAgICBhcHBlbmQoYnVmZmVyLCAnIicpOwogfQogCi12b2lkIEZv
cm1EYXRhQnVpbGRlcjo6YWRkQm91bmRhcnlUb011bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4m
IGJ1ZmZlciwgY29uc3QgQ1N0cmluZyYgYm91bmRhcnksIGJvb2wgaXNMYXN0Qm91bmRhcnkpCit2
b2lkIGFkZEJvdW5kYXJ5VG9NdWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNv
bnN0IENTdHJpbmcmIGJvdW5kYXJ5LCBib29sIGlzTGFzdEJvdW5kYXJ5KQogewogICAgIGFwcGVu
ZChidWZmZXIsICItLSIpOwogICAgIGFwcGVuZChidWZmZXIsIGJvdW5kYXJ5KTsKQEAgLTEzOSwy
OCArMTczLDI4IEBAIHZvaWQgRm9ybURhdGFCdWlsZGVyOjphZGRCb3VuZGFyeVRvTXVsdGkKICAg
ICBhcHBlbmQoYnVmZmVyLCAiXHJcbiIpOwogfQogCi12b2lkIEZvcm1EYXRhQnVpbGRlcjo6YWRk
RmlsZW5hbWVUb011bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3QgVGV4
dEVuY29kaW5nJiBlbmNvZGluZywgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKK3ZvaWQgYWRkRmls
ZW5hbWVUb011bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3QgVGV4dEVu
Y29kaW5nJiBlbmNvZGluZywgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKIHsKICAgICAvLyBGSVhN
RTogVGhpcyBsb3NlcyBkYXRhIGlycmV2ZXJzaWJseSBpZiB0aGUgZmlsZW5hbWUgaW5jbHVkZXMg
Y2hhcmFjdGVycyB5b3UgY2FuJ3QgZW5jb2RlCiAgICAgLy8gaW4gdGhlIHdlYnNpdGUncyBjaGFy
YWN0ZXIgc2V0LgogICAgIGFwcGVuZChidWZmZXIsICI7IGZpbGVuYW1lPVwiIik7Ci0gICAgYXBw
ZW5kUXVvdGVkU3RyaW5nKGJ1ZmZlciwgZW5jb2RpbmcuZW5jb2RlKGZpbGVuYW1lLCBRdWVzdGlv
bk1hcmtzRm9yVW5lbmNvZGFibGVzKSk7CisgICAgYXBwZW5kUXVvdGVkKGJ1ZmZlciwgZW5jb2Rp
bmcuZW5jb2RlKGZpbGVuYW1lLCBRdWVzdGlvbk1hcmtzRm9yVW5lbmNvZGFibGVzKSk7CiAgICAg
YXBwZW5kKGJ1ZmZlciwgJyInKTsKIH0KIAotdm9pZCBGb3JtRGF0YUJ1aWxkZXI6OmFkZENvbnRl
bnRUeXBlVG9NdWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNvbnN0IENTdHJp
bmcmIG1pbWVUeXBlKQordm9pZCBhZGRDb250ZW50VHlwZVRvTXVsdGlQYXJ0SGVhZGVyKFZlY3Rv
cjxjaGFyPiYgYnVmZmVyLCBjb25zdCBDU3RyaW5nJiBtaW1lVHlwZSkKIHsKICAgICBBU1NFUlQo
QmxvYjo6aXNOb3JtYWxpemVkQ29udGVudFR5cGUobWltZVR5cGUpKTsKICAgICBhcHBlbmQoYnVm
ZmVyLCAiXHJcbkNvbnRlbnQtVHlwZTogIik7CiAgICAgYXBwZW5kKGJ1ZmZlciwgbWltZVR5cGUp
OwogfQogCi12b2lkIEZvcm1EYXRhQnVpbGRlcjo6ZmluaXNoTXVsdGlQYXJ0SGVhZGVyKFZlY3Rv
cjxjaGFyPiYgYnVmZmVyKQordm9pZCBmaW5pc2hNdWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+
JiBidWZmZXIpCiB7CiAgICAgYXBwZW5kKGJ1ZmZlciwgIlxyXG5cclxuIik7CiB9CiAKLXZvaWQg
Rm9ybURhdGFCdWlsZGVyOjphZGRLZXlWYWx1ZVBhaXJBc0Zvcm1EYXRhKFZlY3RvcjxjaGFyPiYg
YnVmZmVyLCBjb25zdCBDU3RyaW5nJiBrZXksIGNvbnN0IENTdHJpbmcmIHZhbHVlLCBGb3JtRGF0
YTo6RW5jb2RpbmdUeXBlIGVuY29kaW5nVHlwZSkKK3ZvaWQgYWRkS2V5VmFsdWVQYWlyQXNGb3Jt
RGF0YShWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgdmFsdWUsIEZvcm1EYXRhOjpFbmNvZGluZ1R5cGUgZW5jb2Rp
bmdUeXBlKQogewogICAgIGlmIChlbmNvZGluZ1R5cGUgPT0gRm9ybURhdGE6OlRleHRQbGFpbikg
ewogICAgICAgICBpZiAoIWJ1ZmZlci5pc0VtcHR5KCkpCkBAIC0xNzEsMzMgKzIwNSwxNyBAQCB2
b2lkIEZvcm1EYXRhQnVpbGRlcjo6YWRkS2V5VmFsdWVQYWlyQXNGCiAgICAgfSBlbHNlIHsKICAg
ICAgICAgaWYgKCFidWZmZXIuaXNFbXB0eSgpKQogICAgICAgICAgICAgYXBwZW5kKGJ1ZmZlciwg
JyYnKTsKLSAgICAgICAgZW5jb2RlU3RyaW5nQXNGb3JtRGF0YShidWZmZXIsIGtleSk7CisgICAg
ICAgIGFwcGVuZEVuY29kZWRBc0Zvcm1EYXRhKGJ1ZmZlciwga2V5KTsKICAgICAgICAgYXBwZW5k
KGJ1ZmZlciwgJz0nKTsKLSAgICAgICAgZW5jb2RlU3RyaW5nQXNGb3JtRGF0YShidWZmZXIsIHZh
bHVlKTsKKyAgICAgICAgYXBwZW5kRW5jb2RlZEFzRm9ybURhdGEoYnVmZmVyLCB2YWx1ZSk7CiAg
ICAgfQogfQogCi12b2lkIEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YShW
ZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3QgQ1N0cmluZyYgc3RyaW5nKQordm9pZCBlbmNvZGVT
dHJpbmdBc0Zvcm1EYXRhKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCBDU3RyaW5nJiBzdHJp
bmcpCiB7Ci0gICAgLy8gU2FtZSBzYWZlIGNoYXJhY3RlcnMgYXMgTmV0c2NhcGUgZm9yIGNvbXBh
dGliaWxpdHkuCi0gICAgc3RhdGljIGNvbnN0IGNoYXIgc2FmZUNoYXJhY3RlcnNbXSA9ICItLl8q
IjsKLQotICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2ludGVyYWN0L2Zvcm1zLmh0
bWwjaC0xNy4xMy40LjEKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHVuc2ln
bmVkIGNoYXIgYyA9IHN0cmluZy5kYXRhKClbaV07CisgICAgYXBwZW5kRW5jb2RlZEFzRm9ybURh
dGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzdHJpbmcuZGF0YSgp
KSwgc3RyaW5nLmxlbmd0aCgpKTsKK30KIAotICAgICAgICBpZiAoaXNBU0NJSUFscGhhbnVtZXJp
YyhjKSB8fCBzdHJjaHIoc2FmZUNoYXJhY3RlcnMsIGMpKQotICAgICAgICAgICAgYXBwZW5kKGJ1
ZmZlciwgYyk7Ci0gICAgICAgIGVsc2UgaWYgKGMgPT0gJyAnKQotICAgICAgICAgICAgYXBwZW5k
KGJ1ZmZlciwgJysnKTsKLSAgICAgICAgZWxzZSBpZiAoYyA9PSAnXG4nIHx8IChjID09ICdccicg
JiYgKGkgKyAxID49IGxlbmd0aCB8fCBzdHJpbmcuZGF0YSgpW2kgKyAxXSAhPSAnXG4nKSkpCi0g
ICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCAiJTBEJTBBIik7Ci0gICAgICAgIGVsc2UgaWYgKGMg
IT0gJ1xyJykgewotICAgICAgICAgICAgYXBwZW5kKGJ1ZmZlciwgJyUnKTsKLSAgICAgICAgICAg
IGFwcGVuZEJ5dGVBc0hleChjLCBidWZmZXIpOwotICAgICAgICB9Ci0gICAgfQogfQogCiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWls
ZGVyLmgJKHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvRm9ybURhdGFCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0x
OCw4ICsxOSw3IEBACiAgKgogICovCiAKLSNpZm5kZWYgRm9ybURhdGFCdWlsZGVyX2gKLSNkZWZp
bmUgRm9ybURhdGFCdWlsZGVyX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRm9ybURhdGEu
aCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtMjgsMjUgKzI4LDIwIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgVGV4dEVuY29kaW5nOwogCi1jbGFzcyBGb3JtRGF0YUJ1aWxk
ZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZvcm1EYXRhQnVpbGRlcik7Ci1wdWJsaWM6
Ci0gICAgLy8gSGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IEhUTUxGb3JtRWxlbWVudCBmb3IgbXVs
dGktcGFydCBmb3JtIGRhdGEKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGdlbmVyYXRlVW5pcXVl
Qm91bmRhcnlTdHJpbmcoKTsKLSAgICBzdGF0aWMgdm9pZCBiZWdpbk11bHRpUGFydEhlYWRlcihW
ZWN0b3I8Y2hhcj4mLCBjb25zdCBDU3RyaW5nJiBib3VuZGFyeSwgY29uc3QgQ1N0cmluZyYgbmFt
ZSk7Ci0gICAgc3RhdGljIHZvaWQgYWRkQm91bmRhcnlUb011bHRpUGFydEhlYWRlcihWZWN0b3I8
Y2hhcj4mLCBjb25zdCBDU3RyaW5nJiBib3VuZGFyeSwgYm9vbCBpc0xhc3RCb3VuZGFyeSA9IGZh
bHNlKTsKLSAgICBzdGF0aWMgdm9pZCBhZGRGaWxlbmFtZVRvTXVsdGlQYXJ0SGVhZGVyKFZlY3Rv
cjxjaGFyPiYsIGNvbnN0IFRleHRFbmNvZGluZyYsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpOwot
ICAgIHN0YXRpYyB2b2lkIGFkZENvbnRlbnRUeXBlVG9NdWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNo
YXI+JiwgY29uc3QgQ1N0cmluZyYgbWltZVR5cGUpOwotICAgIHN0YXRpYyB2b2lkIGZpbmlzaE11
bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4mKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbnMg
dXNlZCBieSBIVE1MRm9ybUVsZW1lbnQgZm9yIG5vbiBtdWx0aS1wYXJ0IGZvcm0gZGF0YQotICAg
IHN0YXRpYyB2b2lkIGFkZEtleVZhbHVlUGFpckFzRm9ybURhdGEoVmVjdG9yPGNoYXI+JiwgY29u
c3QgQ1N0cmluZyYga2V5LCBjb25zdCBDU3RyaW5nJiB2YWx1ZSwgRm9ybURhdGE6OkVuY29kaW5n
VHlwZSA9IEZvcm1EYXRhOjpGb3JtVVJMRW5jb2RlZCk7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2Rl
U3RyaW5nQXNGb3JtRGF0YShWZWN0b3I8Y2hhcj4mLCBjb25zdCBDU3RyaW5nJik7Ci0KLXByaXZh
dGU6Ci0gICAgRm9ybURhdGFCdWlsZGVyKCkge30KLX07CituYW1lc3BhY2UgRm9ybURhdGFCdWls
ZGVyIHsKKworLy8gSGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IEhUTUxGb3JtRWxlbWVudCBmb3Ig
bXVsdGktcGFydCBmb3JtIGRhdGEuCitWZWN0b3I8Y2hhcj4gZ2VuZXJhdGVVbmlxdWVCb3VuZGFy
eVN0cmluZygpOwordm9pZCBiZWdpbk11bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4mLCBjb25z
dCBDU3RyaW5nJiBib3VuZGFyeSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBuYW1lKTsKK3ZvaWQg
YWRkQm91bmRhcnlUb011bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4mLCBjb25zdCBDU3RyaW5n
JiBib3VuZGFyeSwgYm9vbCBpc0xhc3RCb3VuZGFyeSA9IGZhbHNlKTsKK3ZvaWQgYWRkRmlsZW5h
bWVUb011bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4mLCBjb25zdCBUZXh0RW5jb2RpbmcmLCBj
b25zdCBTdHJpbmcmIGZpbGVuYW1lKTsKK3ZvaWQgYWRkQ29udGVudFR5cGVUb011bHRpUGFydEhl
YWRlcihWZWN0b3I8Y2hhcj4mLCBjb25zdCBDU3RyaW5nJiBtaW1lVHlwZSk7Cit2b2lkIGZpbmlz
aE11bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4mKTsKKworLy8gSGVscGVyIGZ1bmN0aW9ucyB1
c2VkIGJ5IEhUTUxGb3JtRWxlbWVudCBmb3Igbm9uLW11bHRpLXBhcnQgZm9ybSBkYXRhLgordm9p
ZCBhZGRLZXlWYWx1ZVBhaXJBc0Zvcm1EYXRhKFZlY3RvcjxjaGFyPiYsIGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYga2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhbHVlLCBGb3JtRGF0YTo6RW5j
b2RpbmdUeXBlID0gRm9ybURhdGE6OkZvcm1VUkxFbmNvZGVkKTsKK3ZvaWQgZW5jb2RlU3RyaW5n
QXNGb3JtRGF0YShWZWN0b3I8Y2hhcj4mLCBjb25zdCBDU3RyaW5nJik7CiAKIH0KIAotI2VuZGlm
Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VI
YW5kbGVDdXJsRGVsZWdhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5jcHAJKHJldmlzaW9u
IDIyNTIwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJj
ZUhhbmRsZUN1cmxEZWxlZ2F0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1Nyw5ICs0NTcsOSBA
QCB2b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpoYW5kbGVECiAKICAgICAgICAgLy8g
ZGlkUmVjZWl2ZVJlc3BvbnNlIG1pZ2h0IGNhdXNlIHRoZSBjbGllbnQgdG8gYmUgZGVsZXRlZC4K
ICAgICAgICAgaWYgKG1faGFuZGxlLT5jbGllbnQoKSkgewotICAgICAgICAgICAgQ1N0cmluZyBl
bmNvZGVkRGF0YSA9IGVuY29kaW5nLmVuY29kZShkYXRhLCBVUkxFbmNvZGVkRW50aXRpZXNGb3JV
bmVuY29kYWJsZXMpOwotICAgICAgICAgICAgaWYgKGVuY29kZWREYXRhLmxlbmd0aCgpKQotICAg
ICAgICAgICAgICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZUJ1ZmZlcihtX2hhbmRs
ZSwgU2hhcmVkQnVmZmVyOjpjcmVhdGUoZW5jb2RlZERhdGEuZGF0YSgpLCBlbmNvZGVkRGF0YS5s
ZW5ndGgoKSksIG9yaWdpbmFsU2l6ZSk7CisgICAgICAgICAgICBhdXRvIGVuY29kZWREYXRhID0g
ZW5jb2RpbmcuZW5jb2RlKGRhdGEsIFVSTEVuY29kZWRFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7
CisgICAgICAgICAgICBpZiAoZW5jb2RlZERhdGEuc2l6ZSgpKQorICAgICAgICAgICAgICAgIG1f
aGFuZGxlLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZUJ1ZmZlcihtX2hhbmRsZSwgU2hhcmVkQnVmZmVy
OjpjcmVhdGUoV1RGTW92ZShlbmNvZGVkRGF0YSkpLCBvcmlnaW5hbFNpemUpOwogICAgICAgICB9
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RlY29kZUVzY2Fw
ZVNlcXVlbmNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
RGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgJKHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDggKzI3LDcgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBEZWNvZGVF
c2NhcGVTZXF1ZW5jZXNfaAotI2RlZmluZSBEZWNvZGVFc2NhcGVTZXF1ZW5jZXNfaAorI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlD
VHlwZS5oPgpAQCAtMTU1LDExICsxNTQsMTEgQEAgU3RyaW5nIGRlY29kZUVzY2FwZVNlcXVlbmNl
cyhTdHJpbmdWaWV3IAogICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAotaW5saW5l
IFZlY3RvcjxjaGFyPiBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXNBc0RhdGEoU3RyaW5nVmlldyBz
dHJpbmcsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCitpbmxpbmUgVmVjdG9yPHVpbnQ4
X3Q+IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlc0FzRGF0YShTdHJpbmdWaWV3IHN0cmluZywgY29u
c3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKIHsKICAgICBBU1NFUlQoZW5jb2RpbmcuaXNWYWxp
ZCgpKTsKIAotICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJl
c3VsdDsKICAgICBzaXplX3QgZGVjb2RlZFBvc2l0aW9uID0gMDsKICAgICBzaXplX3Qgc2VhcmNo
UG9zaXRpb24gPSAwOwogICAgIHdoaWxlICh0cnVlKSB7CkBAIC0xNzMsMTAgKzE3Miw5IEBAIGlu
bGluZSBWZWN0b3I8Y2hhcj4gZGVjb2RlVVJMRXNjYXBlU2VxdWUKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIC8vIFN0cmluZ3Mg
YXJlIGVuY29kZWQgYXMgcmVxdWVzdGVkLgotICAgICAgICBhdXRvIHN0cmluZ0ZyYWdtZW50ID0g
c3RyaW5nLnN1YnN0cmluZyhkZWNvZGVkUG9zaXRpb24sIGVuY29kZWRSdW5Qb3NpdGlvbiAtIGRl
Y29kZWRQb3NpdGlvbik7Ci0gICAgICAgIGF1dG8gZW5jb2RlZFN0cmluZ0ZyYWdtZW50ID0gZW5j
b2RpbmcuZW5jb2RlKHN0cmluZ0ZyYWdtZW50LCBVUkxFbmNvZGVkRW50aXRpZXNGb3JVbmVuY29k
YWJsZXMpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGVuY29kZWRTdHJpbmdGcmFnbWVudC5kYXRh
KCksIGVuY29kZWRTdHJpbmdGcmFnbWVudC5sZW5ndGgoKSk7CisgICAgICAgIHJlc3VsdC5hcHBl
bmRWZWN0b3IoZW5jb2RpbmcuZW5jb2RlKHN0cmluZy5zdWJzdHJpbmcoZGVjb2RlZFBvc2l0aW9u
LCBlbmNvZGVkUnVuUG9zaXRpb24gLSBkZWNvZGVkUG9zaXRpb24pLCBVUkxFbmNvZGVkRW50aXRp
ZXNGb3JVbmVuY29kYWJsZXMpKTsKIAogICAgICAgICBpZiAoZW5jb2RlZFJ1blBvc2l0aW9uID09
IG5vdEZvdW5kKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE5Miw0ICsxOTAsMyBA
QCBpbmxpbmUgVmVjdG9yPGNoYXI+IGRlY29kZVVSTEVzY2FwZVNlcXVlCiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIERlY29kZUVzY2FwZVNlcXVlbmNlc19oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlYy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuY3BwCShyZXZpc2lvbiAyMjUy
MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlYy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApA
QCAtMjcsMjkgKzI3LDI0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGV4dENv
ZGVjLmgiCiAKLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8YXJyYXk+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotVGV4dENvZGVjOjp+VGV4dENvZGVjKCkgPSBkZWZhdWx0OwotCi1pbnQgVGV4dENvZGVjOjpn
ZXRVbmVuY29kYWJsZVJlcGxhY2VtZW50KHVuc2lnbmVkIGNvZGVQb2ludCwgVW5lbmNvZGFibGVI
YW5kbGluZyBoYW5kbGluZywgVW5lbmNvZGFibGVSZXBsYWNlbWVudEFycmF5IHJlcGxhY2VtZW50
KQoraW50IFRleHRDb2RlYzo6Z2V0VW5lbmNvZGFibGVSZXBsYWNlbWVudChVQ2hhcjMyIGNvZGVQ
b2ludCwgVW5lbmNvZGFibGVIYW5kbGluZyBoYW5kbGluZywgVW5lbmNvZGFibGVSZXBsYWNlbWVu
dEFycmF5JiByZXBsYWNlbWVudCkKIHsKICAgICBzd2l0Y2ggKGhhbmRsaW5nKSB7Ci0gICAgICAg
IGNhc2UgUXVlc3Rpb25NYXJrc0ZvclVuZW5jb2RhYmxlczoKLSAgICAgICAgICAgIHJlcGxhY2Vt
ZW50WzBdID0gJz8nOwotICAgICAgICAgICAgcmVwbGFjZW1lbnRbMV0gPSAwOwotICAgICAgICAg
ICAgcmV0dXJuIDE7Ci0gICAgICAgIGNhc2UgRW50aXRpZXNGb3JVbmVuY29kYWJsZXM6Ci0gICAg
ICAgICAgICBzbnByaW50ZihyZXBsYWNlbWVudCwgc2l6ZW9mKFVuZW5jb2RhYmxlUmVwbGFjZW1l
bnRBcnJheSksICImIyV1OyIsIGNvZGVQb2ludCk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50PihzdHJsZW4ocmVwbGFjZW1lbnQpKTsKLSAgICAgICAgY2FzZSBVUkxFbmNvZGVk
RW50aXRpZXNGb3JVbmVuY29kYWJsZXM6Ci0gICAgICAgICAgICBzbnByaW50ZihyZXBsYWNlbWVu
dCwgc2l6ZW9mKFVuZW5jb2RhYmxlUmVwbGFjZW1lbnRBcnJheSksICIlJTI2JSUyMyV1JSUzQiIs
IGNvZGVQb2ludCk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihzdHJsZW4o
cmVwbGFjZW1lbnQpKTsKKyAgICBjYXNlIFF1ZXN0aW9uTWFya3NGb3JVbmVuY29kYWJsZXM6Cisg
ICAgICAgIHJlcGxhY2VtZW50LmRhdGEoKVswXSA9ICc/JzsKKyAgICAgICAgcmVwbGFjZW1lbnQu
ZGF0YSgpWzFdID0gMDsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBFbnRpdGllc0ZvclVu
ZW5jb2RhYmxlczoKKyAgICAgICAgcmV0dXJuIHNucHJpbnRmKHJlcGxhY2VtZW50LmRhdGEoKSwg
c2l6ZW9mKFVuZW5jb2RhYmxlUmVwbGFjZW1lbnRBcnJheSksICImIyV1OyIsIGNvZGVQb2ludCk7
CisgICAgY2FzZSBVUkxFbmNvZGVkRW50aXRpZXNGb3JVbmVuY29kYWJsZXM6CisgICAgICAgIHJl
dHVybiBzbnByaW50ZihyZXBsYWNlbWVudC5kYXRhKCksIHNpemVvZihVbmVuY29kYWJsZVJlcGxh
Y2VtZW50QXJyYXkpLCAiJSUyNiUlMjMldSUlM0IiLCBjb2RlUG9pbnQpOwogICAgIH0KICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXBsYWNlbWVudFswXSA9IDA7CisgICAgcmVwbGFj
ZW1lbnQuZGF0YSgpWzBdID0gMDsKICAgICByZXR1cm4gMDsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlYy5oCShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9z
a3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI0LDYxICsyNCwz
OSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBUZXh0Q29kZWNfaAotI2RlZmlu
ZSBUZXh0Q29kZWNfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVk
ZSA8cGFsL3RleHQvVW5lbmNvZGFibGVIYW5kbGluZy5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdW1h
Y2hpbmUuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0gICAgY2xhc3MgVGV4dEVuY29kaW5nOwogCi0gICAgLy8gU3BlY2lmaWVzIHdoYXQg
d2lsbCBoYXBwZW4gd2hlbiBhIGNoYXJhY3RlciBpcyBlbmNvdW50ZXJlZCB0aGF0IGlzCi0gICAg
Ly8gbm90IGVuY29kYWJsZSBpbiB0aGUgY2hhcmFjdGVyIHNldC4KLSAgICBlbnVtIFVuZW5jb2Rh
YmxlSGFuZGxpbmcgewotICAgICAgICAvLyBTdWJzdGl0dXRlcyB0aGUgcmVwbGFjZW1lbnQgY2hh
cmFjdGVyICI/Ii4KLSAgICAgICAgUXVlc3Rpb25NYXJrc0ZvclVuZW5jb2RhYmxlcywKLQotICAg
ICAgICAvLyBFbmNvZGVzIHRoZSBjaGFyYWN0ZXIgYXMgYW4gWE1MIGVudGl0eS4gRm9yIGV4YW1w
bGUsIFUrMDZERQotICAgICAgICAvLyB3b3VsZCBiZSAiJiMxNzU4OyIgKDB4NkRFID0gMTc1OCBp
biBvY3RhbCkuCi0gICAgICAgIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzLAotCi0gICAgICAgIC8v
IEVuY29kZXMgdGhlIGNoYXJhY3RlciBhcyBlbiBlbnRpdHkgYXMgYWJvdmUsIGJ1dCBlc2NhcGVk
Ci0gICAgICAgIC8vIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycy4gVGhpcyBpcyB1c2VkIGlu
IFVSTHMuCi0gICAgICAgIC8vIEZvciBleGFtcGxlLCBVKzZERSB3b3VsZCBiZSAiJTI2JTIzMTc1
OCUzQiIuCi0gICAgICAgIFVSTEVuY29kZWRFbnRpdGllc0ZvclVuZW5jb2RhYmxlcwotICAgIH07
Ci0KLSAgICB0eXBlZGVmIGNoYXIgVW5lbmNvZGFibGVSZXBsYWNlbWVudEFycmF5WzMyXTsKLQot
ICAgIGNsYXNzIFRleHRDb2RlYyB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRleHRD
b2RlYyk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoKLSAgICAgICAgVGV4
dENvZGVjKCkgeyB9Ci0gICAgICAgIHZpcnR1YWwgflRleHRDb2RlYygpOwotCi0gICAgICAgIFN0
cmluZyBkZWNvZGUoY29uc3QgY2hhciogc3RyLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoID0g
ZmFsc2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJvb2wgaWdub3JlZDsKLSAgICAgICAgICAg
IHJldHVybiBkZWNvZGUoc3RyLCBsZW5ndGgsIGZsdXNoLCBmYWxzZSwgaWdub3JlZCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgU3RyaW5nIGRlY29kZShjb25zdCBjaGFy
Kiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3
RXJyb3IpID0gMDsKLSAgICAgICAgdmlydHVhbCBDU3RyaW5nIGVuY29kZShjb25zdCBVQ2hhcios
IHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcpID0gMDsKLQotICAgICAgICAvLyBG
aWxscyBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVu
Ci0gICAgICAgIC8vIHVuZW5jb2RhYmxlIGNoYXJhY3RlciBpbnRvIHRoZSBnaXZlbiByZXBsYWNl
bWVudCBidWZmZXIuIAotICAgICAgICAvLyBUaGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgKG5vdCBp
bmNsdWRpbmcgdGhlIG51bGwpIHdpbGwgYmUgcmV0dXJuZWQuCi0gICAgICAgIHN0YXRpYyBpbnQg
Z2V0VW5lbmNvZGFibGVSZXBsYWNlbWVudCh1bnNpZ25lZCBjb2RlUG9pbnQsIFVuZW5jb2RhYmxl
SGFuZGxpbmcsIFVuZW5jb2RhYmxlUmVwbGFjZW1lbnRBcnJheSk7Ci0gICAgfTsKK2NsYXNzIFRl
eHRFbmNvZGluZzsKIAotICAgIHR5cGVkZWYgdm9pZCAoKkVuY29kaW5nTmFtZVJlZ2lzdHJhciko
Y29uc3QgY2hhciogYWxpYXMsIGNvbnN0IGNoYXIqIG5hbWUpOwordXNpbmcgVW5lbmNvZGFibGVS
ZXBsYWNlbWVudEFycmF5ID0gc3RkOjphcnJheTxjaGFyLCAzMj47CiAKLSAgICB0eXBlZGVmIHN0
ZDo6dW5pcXVlX3B0cjxUZXh0Q29kZWM+ICgqTmV3VGV4dENvZGVjRnVuY3Rpb24pKGNvbnN0IFRl
eHRFbmNvZGluZyYsIGNvbnN0IHZvaWQqIGFkZGl0aW9uYWxEYXRhKTsKLSAgICB0eXBlZGVmIHZv
aWQgKCpUZXh0Q29kZWNSZWdpc3RyYXIpKGNvbnN0IGNoYXIqIG5hbWUsIE5ld1RleHRDb2RlY0Z1
bmN0aW9uLCBjb25zdCB2b2lkKiBhZGRpdGlvbmFsRGF0YSk7CitjbGFzcyBUZXh0Q29kZWMgewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRleHRDb2RlYyk7IFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIFRleHRDb2RlYygpID0gZGVmYXVsdDsKKyAgICB2aXJ0dWFsIH5U
ZXh0Q29kZWMoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIFN0cmluZyBkZWNvZGUoY29uc3Qg
Y2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wm
IHNhd0Vycm9yKSA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gZW5jb2RlKFN0cmlu
Z1ZpZXcsIFVuZW5jb2RhYmxlSGFuZGxpbmcpID0gMDsKKworICAgIC8vIEZpbGxzIGEgbnVsbC10
ZXJtaW5hdGVkIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4KKyAgICAvLyB1bmVu
Y29kYWJsZSBjaGFyYWN0ZXIgaW50byB0aGUgZ2l2ZW4gcmVwbGFjZW1lbnQgYnVmZmVyLgorICAg
IC8vIFRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyAobm90IGluY2x1ZGluZyB0aGUgbnVsbCkgd2ls
bCBiZSByZXR1cm5lZC4KKyAgICBzdGF0aWMgaW50IGdldFVuZW5jb2RhYmxlUmVwbGFjZW1lbnQo
VUNoYXIzMiwgVW5lbmNvZGFibGVIYW5kbGluZywgVW5lbmNvZGFibGVSZXBsYWNlbWVudEFycmF5
Jik7Cit9OworCit1c2luZyBFbmNvZGluZ05hbWVSZWdpc3RyYXIgPSB2b2lkICgqKShjb25zdCBj
aGFyKiBhbGlhcywgY29uc3QgY2hhciogbmFtZSk7CisKK3VzaW5nIE5ld1RleHRDb2RlY0Z1bmN0
aW9uID0gV1RGOjpGdW5jdGlvbjxzdGQ6OnVuaXF1ZV9wdHI8VGV4dENvZGVjPigpPjsKK3VzaW5n
IFRleHRDb2RlY1JlZ2lzdHJhciA9IHZvaWQgKCopKGNvbnN0IGNoYXIqIG5hbWUsIE5ld1RleHRD
b2RlY0Z1bmN0aW9uJiYpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBU
ZXh0Q29kZWNfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJ
Q1UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENv
ZGVjSUNVLmNwcAkocmV2aXNpb24gMjI1MjA3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9UZXh0Q29kZWNJQ1UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCwgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFBy
b3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzAsMTAgKzMw
LDggQEAKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmdS
ZWdpc3RyeS5oIgogI2luY2x1ZGUgIlRocmVhZEdsb2JhbERhdGEuaCIKLSNpbmNsdWRlIDx1bmlj
b2RlL3VjbnYuaD4KKyNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDx1bmljb2RlL3VjbnZfY2Iu
aD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRy
YXMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KQEAgLTQzLDIzICs0
MSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY29uc3Qgc2l6ZV90IENvbnZlcnNpb25CdWZm
ZXJTaXplID0gMTYzODQ7CiAKLUlDVUNvbnZlcnRlcldyYXBwZXI6On5JQ1VDb252ZXJ0ZXJXcmFw
cGVyKCkKLXsKLSAgICBpZiAoY29udmVydGVyKQotICAgICAgICB1Y252X2Nsb3NlKGNvbnZlcnRl
cik7Ci19Ci0KLXN0YXRpYyBVQ29udmVydGVyKiYgY2FjaGVkQ29udmVydGVySUNVKCkKLXsKLSAg
ICByZXR1cm4gdGhyZWFkR2xvYmFsRGF0YSgpLmNhY2hlZENvbnZlcnRlcklDVSgpLmNvbnZlcnRl
cjsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFRleHRDb2RlYz4gVGV4dENvZGVjSUNVOjpjcmVhdGUo
Y29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgY29uc3Qgdm9pZCogYWRkaXRpb25hbERhdGEp
Ci17Ci0gICAgLy8gTmFtZSBzdHJpbmdzIGFyZSBwZXJzaXN0ZW50bHkga2VwdCBpbiBUZXh0RW5j
b2RpbmdSZWdpc3RyeSBtYXBzLCBzbyB0aGV5IGFyZSBuZXZlciBkZWxldGVkLgotICAgIHJldHVy
biBzdGQ6Om1ha2VfdW5pcXVlPFRleHRDb2RlY0lDVT4oZW5jb2RpbmcubmFtZSgpLCBzdGF0aWNf
Y2FzdDxjb25zdCBjaGFyKj4oYWRkaXRpb25hbERhdGEpKTsKLX0KLQogI2RlZmluZSBERUNMQVJF
X0FMSUFTRVMoZW5jb2RpbmcsIC4uLikgXAogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBl
bmNvZGluZyMjX2FsaWFzZXNbXSB7IF9fVkFfQVJHU19fIH0KIApAQCAtMTY5LDExNCArMTUwLDEx
NSBAQCB2b2lkIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJFbmNvZGluZ05hbWVzCiB2b2lkIFRleHRD
b2RlY0lDVTo6cmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKIHsK
ICAgICBmb3IgKGF1dG8mIGVuY29kaW5nTmFtZSA6IGVuY29kaW5nTmFtZXMpIHsKKyAgICAgICAg
Y29uc3QgY2hhciogbmFtZSA9IGVuY29kaW5nTmFtZS5uYW1lOworCiAgICAgICAgIC8vIFRoZXNl
IGVuY29kaW5ncyBjdXJyZW50bHkgZG9uJ3QgaGF2ZSBzdGFuZGFyZCBuYW1lcywgc28gd2UgbmVl
ZCB0byByZWdpc3RlciBlbmNvZGVycyBtYW51YWxseS4KICAgICAgICAgLy8gaHR0cDovL2RlbW8u
aWN1LXByb2plY3Qub3JnL2ljdS1iaW4vY29udmV4cAotICAgICAgICBpZiAoIXN0cmNtcChlbmNv
ZGluZ05hbWUubmFtZSwgIndpbmRvd3MtODc0IikpIHsKLSAgICAgICAgICAgIHJlZ2lzdHJhcihl
bmNvZGluZ05hbWUubmFtZSwgY3JlYXRlLCAid2luZG93cy04NzQtMjAwMCIpOworICAgICAgICBp
ZiAoIXN0cmNtcChuYW1lLCAid2luZG93cy04NzQiKSkgeworICAgICAgICAgICAgcmVnaXN0cmFy
KG5hbWUsIFtuYW1lXSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8
VGV4dENvZGVjSUNVPihuYW1lLCAid2luZG93cy04NzQtMjAwMCIpOworICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoIXN0cmNtcChl
bmNvZGluZ05hbWUubmFtZSwgIndpbmRvd3MtOTQ5IikpIHsKLSAgICAgICAgICAgIHJlZ2lzdHJh
cihlbmNvZGluZ05hbWUubmFtZSwgY3JlYXRlLCAid2luZG93cy05NDktMjAwMCIpOworICAgICAg
ICBpZiAoIXN0cmNtcChuYW1lLCAid2luZG93cy05NDkiKSkgeworICAgICAgICAgICAgcmVnaXN0
cmFyKG5hbWUsIFtuYW1lXSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlx
dWU8VGV4dENvZGVjSUNVPihuYW1lLCAid2luZG93cy05NDktMjAwMCIpOworICAgICAgICAgICAg
fSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoIXN0cmNt
cChlbmNvZGluZ05hbWUubmFtZSwgIngtbWFjLWN5cmlsbGljIikpIHsKLSAgICAgICAgICAgIHJl
Z2lzdHJhcihlbmNvZGluZ05hbWUubmFtZSwgY3JlYXRlLCAibWFjb3MtN18zLTEwLjIiKTsKKyAg
ICAgICAgaWYgKCFzdHJjbXAobmFtZSwgIngtbWFjLWN5cmlsbGljIikpIHsKKyAgICAgICAgICAg
IHJlZ2lzdHJhcihuYW1lLCBbbmFtZV0geworICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1h
a2VfdW5pcXVlPFRleHRDb2RlY0lDVT4obmFtZSwgIm1hY29zLTdfMy0xMC4yIik7CisgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmICgh
c3RyY21wKGVuY29kaW5nTmFtZS5uYW1lLCAieC1tYWMtZ3JlZWsiKSkgewotICAgICAgICAgICAg
cmVnaXN0cmFyKGVuY29kaW5nTmFtZS5uYW1lLCBjcmVhdGUsICJtYWNvcy02XzItMTAuNCIpOwor
ICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAieC1tYWMtZ3JlZWsiKSkgeworICAgICAgICAgICAg
cmVnaXN0cmFyKG5hbWUsIFtuYW1lXSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV91bmlxdWU8VGV4dENvZGVjSUNVPihuYW1lLCAibWFjb3MtNl8yLTEwLjQiKTsKKyAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFz
dHJjbXAoZW5jb2RpbmdOYW1lLm5hbWUsICJ4LW1hYy1jZW50cmFsZXVycm9tYW4iKSkgewotICAg
ICAgICAgICAgcmVnaXN0cmFyKGVuY29kaW5nTmFtZS5uYW1lLCBjcmVhdGUsICJtYWNvcy0yOS0x
MC4yIik7CisgICAgICAgIGlmICghc3RyY21wKG5hbWUsICJ4LW1hYy1jZW50cmFsZXVycm9tYW4i
KSkgeworICAgICAgICAgICAgcmVnaXN0cmFyKG5hbWUsIFtuYW1lXSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjSUNVPihuYW1lLCAibWFjb3MtMjkt
MTAuMiIpOworICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQotICAgICAgICBpZiAoIXN0cmNtcChlbmNvZGluZ05hbWUubmFtZSwgIngtbWFjLXR1cmtpc2gi
KSkgewotICAgICAgICAgICAgcmVnaXN0cmFyKGVuY29kaW5nTmFtZS5uYW1lLCBjcmVhdGUsICJt
YWNvcy0zNS0xMC4yIik7CisgICAgICAgIGlmICghc3RyY21wKG5hbWUsICJ4LW1hYy10dXJraXNo
IikpIHsKKyAgICAgICAgICAgIHJlZ2lzdHJhcihuYW1lLCBbbmFtZV0geworICAgICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFRleHRDb2RlY0lDVT4obmFtZSwgIm1hY29zLTM1
LTEwLjIiKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KLSAgICAgICAgaWYgKCFzdHJjbXAoZW5jb2RpbmdOYW1lLm5hbWUsICJFVUMtS1IiKSkgewot
ICAgICAgICAgICAgcmVnaXN0cmFyKGVuY29kaW5nTmFtZS5uYW1lLCBjcmVhdGUsICJ3aW5kb3dz
LTk0OSIpOworICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAiRVVDLUtSIikpIHsKKyAgICAgICAg
ICAgIHJlZ2lzdHJhcihuYW1lLCBbbmFtZV0geworICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1ha2VfdW5pcXVlPFRleHRDb2RlY0lDVT4obmFtZSwgIndpbmRvd3MtOTQ5Iik7CisgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKICAgICAgICAgVUVy
cm9yQ29kZSBlcnJvciA9IFVfWkVST19FUlJPUjsKLSAgICAgICAgY29uc3QgY2hhciogY2Fub25p
Y2FsQ29udmVydGVyTmFtZSA9IHVjbnZfZ2V0Q2Fub25pY2FsTmFtZShlbmNvZGluZ05hbWUubmFt
ZSwgIklBTkEiLCAmZXJyb3IpOworICAgICAgICBjb25zdCBjaGFyKiBjYW5vbmljYWxDb252ZXJ0
ZXJOYW1lID0gdWNudl9nZXRDYW5vbmljYWxOYW1lKG5hbWUsICJJQU5BIiwgJmVycm9yKTsKICAg
ICAgICAgQVNTRVJUKFVfU1VDQ0VTUyhlcnJvcikpOwotICAgICAgICByZWdpc3RyYXIoZW5jb2Rp
bmdOYW1lLm5hbWUsIGNyZWF0ZSwgY2Fub25pY2FsQ29udmVydGVyTmFtZSk7CisgICAgICAgIHJl
Z2lzdHJhcihuYW1lLCBbbmFtZSwgY2Fub25pY2FsQ29udmVydGVyTmFtZV0geworICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjSUNVPihuYW1lLCBjYW5vbmljYWxD
b252ZXJ0ZXJOYW1lKTsKKyAgICAgICAgfSk7CiAgICAgfQogfQogCiBUZXh0Q29kZWNJQ1U6OlRl
eHRDb2RlY0lDVShjb25zdCBjaGFyKiBlbmNvZGluZywgY29uc3QgY2hhciogY2Fub25pY2FsQ29u
dmVydGVyTmFtZSkKICAgICA6IG1fZW5jb2RpbmdOYW1lKGVuY29kaW5nKQogICAgICwgbV9jYW5v
bmljYWxDb252ZXJ0ZXJOYW1lKGNhbm9uaWNhbENvbnZlcnRlck5hbWUpCi0gICAgLCBtX2NvbnZl
cnRlcklDVSgwKQotICAgICwgbV9uZWVkc0dCS0ZhbGxiYWNrcyhmYWxzZSkKIHsKIH0KIAogVGV4
dENvZGVjSUNVOjp+VGV4dENvZGVjSUNVKCkKIHsKLSAgICByZWxlYXNlSUNVQ29udmVydGVyKCk7
Ci19Ci0KLXZvaWQgVGV4dENvZGVjSUNVOjpyZWxlYXNlSUNVQ29udmVydGVyKCkgY29uc3QKLXsK
LSAgICBpZiAobV9jb252ZXJ0ZXJJQ1UpIHsKLSAgICAgICAgVUNvbnZlcnRlciomIGNhY2hlZENv
bnZlcnRlciA9IGNhY2hlZENvbnZlcnRlcklDVSgpOwotICAgICAgICBpZiAoY2FjaGVkQ29udmVy
dGVyKQotICAgICAgICAgICAgdWNudl9jbG9zZShjYWNoZWRDb252ZXJ0ZXIpOwotICAgICAgICB1
Y252X3Jlc2V0KG1fY29udmVydGVySUNVKTsKLSAgICAgICAgY2FjaGVkQ29udmVydGVyID0gbV9j
b252ZXJ0ZXJJQ1U7Ci0gICAgICAgIG1fY29udmVydGVySUNVID0gMDsKKyAgICBpZiAobV9jb252
ZXJ0ZXIpIHsKKyAgICAgICAgdWNudl9yZXNldChtX2NvbnZlcnRlci5nZXQoKSk7CisgICAgICAg
IHRocmVhZEdsb2JhbERhdGEoKS5jYWNoZWRDb252ZXJ0ZXJJQ1UoKS5jb252ZXJ0ZXIgPSBXVEZN
b3ZlKG1fY29udmVydGVyKTsKICAgICB9CiB9CiAKIHZvaWQgVGV4dENvZGVjSUNVOjpjcmVhdGVJ
Q1VDb252ZXJ0ZXIoKSBjb25zdAogewotICAgIEFTU0VSVCghbV9jb252ZXJ0ZXJJQ1UpOwotCi0g
ICAgVUVycm9yQ29kZSBlcnI7CisgICAgQVNTRVJUKCFtX2NvbnZlcnRlcik7CiAKICAgICBtX25l
ZWRzR0JLRmFsbGJhY2tzID0gIXN0cmNtcChtX2VuY29kaW5nTmFtZSwgIkdCSyIpOwogCi0gICAg
VUNvbnZlcnRlciomIGNhY2hlZENvbnZlcnRlciA9IGNhY2hlZENvbnZlcnRlcklDVSgpOworICAg
IGF1dG8mIGNhY2hlZENvbnZlcnRlciA9IHRocmVhZEdsb2JhbERhdGEoKS5jYWNoZWRDb252ZXJ0
ZXJJQ1UoKS5jb252ZXJ0ZXI7CiAgICAgaWYgKGNhY2hlZENvbnZlcnRlcikgewotICAgICAgICBl
cnIgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGNhY2hlZENvbnZlcnRlck5h
bWUgPSB1Y252X2dldE5hbWUoY2FjaGVkQ29udmVydGVyLCAmZXJyKTsKLSAgICAgICAgaWYgKFVf
U1VDQ0VTUyhlcnIpICYmICFzdHJjbXAobV9jYW5vbmljYWxDb252ZXJ0ZXJOYW1lLCBjYWNoZWRD
b252ZXJ0ZXJOYW1lKSkgewotICAgICAgICAgICAgbV9jb252ZXJ0ZXJJQ1UgPSBjYWNoZWRDb252
ZXJ0ZXI7Ci0gICAgICAgICAgICBjYWNoZWRDb252ZXJ0ZXIgPSAwOworICAgICAgICBVRXJyb3JD
b2RlIGVycm9yID0gVV9aRVJPX0VSUk9SOworICAgICAgICBjb25zdCBjaGFyKiBjYWNoZWRDb252
ZXJ0ZXJOYW1lID0gdWNudl9nZXROYW1lKGNhY2hlZENvbnZlcnRlci5nZXQoKSwgJmVycm9yKTsK
KyAgICAgICAgaWYgKFVfU1VDQ0VTUyhlcnJvcikgJiYgIXN0cmNtcChtX2Nhbm9uaWNhbENvbnZl
cnRlck5hbWUsIGNhY2hlZENvbnZlcnRlck5hbWUpKSB7CisgICAgICAgICAgICBtX2NvbnZlcnRl
ciA9IFdURk1vdmUoY2FjaGVkQ29udmVydGVyKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgIH0KIAotICAgIGVyciA9IFVfWkVST19FUlJPUjsKLSAgICBtX2NvbnZlcnRlcklD
VSA9IHVjbnZfb3BlbihtX2Nhbm9uaWNhbENvbnZlcnRlck5hbWUsICZlcnIpOwotICAgIEFTU0VS
VChVX1NVQ0NFU1MoZXJyKSk7Ci0gICAgaWYgKG1fY29udmVydGVySUNVKQotICAgICAgICB1Y252
X3NldEZhbGxiYWNrKG1fY29udmVydGVySUNVLCBUUlVFKTsKKyAgICBVRXJyb3JDb2RlIGVycm9y
ID0gVV9aRVJPX0VSUk9SOworICAgIG1fY29udmVydGVyID0gSUNVQ29udmVydGVyUHRyIHsgdWNu
dl9vcGVuKG1fY2Fub25pY2FsQ29udmVydGVyTmFtZSwgJmVycm9yKSwgdWNudl9jbG9zZSB9Owor
ICAgIGlmIChtX2NvbnZlcnRlcikKKyAgICAgICAgdWNudl9zZXRGYWxsYmFjayhtX2NvbnZlcnRl
ci5nZXQoKSwgVFJVRSk7CiB9CiAKLWludCBUZXh0Q29kZWNJQ1U6OmRlY29kZVRvQnVmZmVyKFVD
aGFyKiB0YXJnZXQsIFVDaGFyKiB0YXJnZXRMaW1pdCwgY29uc3QgY2hhciomIHNvdXJjZSwgY29u
c3QgY2hhciogc291cmNlTGltaXQsIGludDMyX3QqIG9mZnNldHMsIGJvb2wgZmx1c2gsIFVFcnJv
ckNvZGUmIGVycikKK2ludCBUZXh0Q29kZWNJQ1U6OmRlY29kZVRvQnVmZmVyKFVDaGFyKiB0YXJn
ZXQsIFVDaGFyKiB0YXJnZXRMaW1pdCwgY29uc3QgY2hhciomIHNvdXJjZSwgY29uc3QgY2hhciog
c291cmNlTGltaXQsIGludDMyX3QqIG9mZnNldHMsIGJvb2wgZmx1c2gsIFVFcnJvckNvZGUmIGVy
cm9yKQogewogICAgIFVDaGFyKiB0YXJnZXRTdGFydCA9IHRhcmdldDsKLSAgICBlcnIgPSBVX1pF
Uk9fRVJST1I7Ci0gICAgdWNudl90b1VuaWNvZGUobV9jb252ZXJ0ZXJJQ1UsICZ0YXJnZXQsIHRh
cmdldExpbWl0LCAmc291cmNlLCBzb3VyY2VMaW1pdCwgb2Zmc2V0cywgZmx1c2gsICZlcnIpOwor
ICAgIGVycm9yID0gVV9aRVJPX0VSUk9SOworICAgIHVjbnZfdG9Vbmljb2RlKG1fY29udmVydGVy
LmdldCgpLCAmdGFyZ2V0LCB0YXJnZXRMaW1pdCwgJnNvdXJjZSwgc291cmNlTGltaXQsIG9mZnNl
dHMsIGZsdXNoLCAmZXJyb3IpOwogICAgIHJldHVybiB0YXJnZXQgLSB0YXJnZXRTdGFydDsKIH0K
IAogY2xhc3MgRXJyb3JDYWxsYmFja1NldHRlciB7CiBwdWJsaWM6Ci0gICAgRXJyb3JDYWxsYmFj
a1NldHRlcihVQ29udmVydGVyKiBjb252ZXJ0ZXIsIGJvb2wgc3RvcE9uRXJyb3IpCisgICAgRXJy
b3JDYWxsYmFja1NldHRlcihVQ29udmVydGVyJiBjb252ZXJ0ZXIsIGJvb2wgc3RvcE9uRXJyb3Ip
CiAgICAgICAgIDogbV9jb252ZXJ0ZXIoY29udmVydGVyKQogICAgICAgICAsIG1fc2hvdWxkU3Rv
cE9uRW5jb2RpbmdFcnJvcnMoc3RvcE9uRXJyb3IpCiAgICAgewogICAgICAgICBpZiAobV9zaG91
bGRTdG9wT25FbmNvZGluZ0Vycm9ycykgewogICAgICAgICAgICAgVUVycm9yQ29kZSBlcnIgPSBV
X1pFUk9fRVJST1I7Ci0gICAgICAgICAgICB1Y252X3NldFRvVUNhbGxCYWNrKG1fY29udmVydGVy
LCBVQ05WX1RPX1VfQ0FMTEJBQ0tfU1VCU1RJVFVURSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFVDTlZfU1VCX1NUT1BfT05fSUxMRUdBTCwgJm1fc2F2ZWRBY3Rpb24sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAmbV9zYXZlZENvbnRleHQsICZlcnIpOworICAgICAgICAgICAgdWNu
dl9zZXRUb1VDYWxsQmFjaygmbV9jb252ZXJ0ZXIsIFVDTlZfVE9fVV9DQUxMQkFDS19TVUJTVElU
VVRFLCBVQ05WX1NVQl9TVE9QX09OX0lMTEVHQUwsICZtX3NhdmVkQWN0aW9uLCAmbV9zYXZlZENv
bnRleHQsICZlcnIpOwogICAgICAgICAgICAgQVNTRVJUKGVyciA9PSBVX1pFUk9fRVJST1IpOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMjg2LDkgKzI2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IFVFcnJvckNvZGUgZXJyID0gVV9aRVJPX0VSUk9SOwogICAgICAgICAgICAgY29uc3Qgdm9pZCog
b2xkQ29udGV4dDsKICAgICAgICAgICAgIFVDb252ZXJ0ZXJUb1VDYWxsYmFjayBvbGRBY3Rpb247
Ci0gICAgICAgICAgICB1Y252X3NldFRvVUNhbGxCYWNrKG1fY29udmVydGVyLCBtX3NhdmVkQWN0
aW9uLAotICAgICAgICAgICAgICAgICAgIG1fc2F2ZWRDb250ZXh0LCAmb2xkQWN0aW9uLAotICAg
ICAgICAgICAgICAgICAgICZvbGRDb250ZXh0LCAmZXJyKTsKKyAgICAgICAgICAgIHVjbnZfc2V0
VG9VQ2FsbEJhY2soJm1fY29udmVydGVyLCBtX3NhdmVkQWN0aW9uLCBtX3NhdmVkQ29udGV4dCwg
Jm9sZEFjdGlvbiwgJm9sZENvbnRleHQsICZlcnIpOwogICAgICAgICAgICAgQVNTRVJUKG9sZEFj
dGlvbiA9PSBVQ05WX1RPX1VfQ0FMTEJBQ0tfU1VCU1RJVFVURSk7CiAgICAgICAgICAgICBBU1NF
UlQoIXN0cmNtcChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4ob2xkQ29udGV4dCksIFVDTlZfU1VC
X1NUT1BfT05fSUxMRUdBTCkpOwogICAgICAgICAgICAgQVNTRVJUKGVyciA9PSBVX1pFUk9fRVJS
T1IpOwpAQCAtMjk2LDcgKzI3Niw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAg
VUNvbnZlcnRlciogbV9jb252ZXJ0ZXI7CisgICAgVUNvbnZlcnRlciYgbV9jb252ZXJ0ZXI7CiAg
ICAgYm9vbCBtX3Nob3VsZFN0b3BPbkVuY29kaW5nRXJyb3JzOwogICAgIGNvbnN0IHZvaWQqIG1f
c2F2ZWRDb250ZXh0OwogICAgIFVDb252ZXJ0ZXJUb1VDYWxsYmFjayBtX3NhdmVkQWN0aW9uOwpA
QCAtMzA1LDE2ICsyODUsMTYgQEAgcHJpdmF0ZToKIFN0cmluZyBUZXh0Q29kZWNJQ1U6OmRlY29k
ZShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9w
T25FcnJvciwgYm9vbCYgc2F3RXJyb3IpCiB7CiAgICAgLy8gR2V0IGEgY29udmVydGVyIGZvciB0
aGUgcGFzc2VkLWluIGVuY29kaW5nLgotICAgIGlmICghbV9jb252ZXJ0ZXJJQ1UpIHsKKyAgICBp
ZiAoIW1fY29udmVydGVyKSB7CiAgICAgICAgIGNyZWF0ZUlDVUNvbnZlcnRlcigpOwotICAgICAg
ICBBU1NFUlQobV9jb252ZXJ0ZXJJQ1UpOwotICAgICAgICBpZiAoIW1fY29udmVydGVySUNVKSB7
CisgICAgICAgIGlmICghbV9jb252ZXJ0ZXIpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiZXJy
b3IgY3JlYXRpbmcgSUNVIGVuY29kZXIgZXZlbiB0aG91Z2ggZW5jb2Rpbmcgd2FzIGluIHRhYmxl
Iik7Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgICAgICBzYXdFcnJvciA9
IHRydWU7CisgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9CiAgICAgfQogICAgIAot
ICAgIEVycm9yQ2FsbGJhY2tTZXR0ZXIgY2FsbGJhY2tTZXR0ZXIobV9jb252ZXJ0ZXJJQ1UsIHN0
b3BPbkVycm9yKTsKKyAgICBFcnJvckNhbGxiYWNrU2V0dGVyIGNhbGxiYWNrU2V0dGVyKCptX2Nv
bnZlcnRlciwgc3RvcE9uRXJyb3IpOwogCiAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAKQEAg
LTM0MCwxNyArMzIwLDE1IEBAIFN0cmluZyBUZXh0Q29kZWNJQ1U6OmRlY29kZShjb25zdCBjaGFy
KiAKIAogICAgIFN0cmluZyByZXN1bHRTdHJpbmcgPSByZXN1bHQudG9TdHJpbmcoKTsKIAotICAg
IC8vIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAxND4KICAgICAv
LyBTaW1wbGlmaWVkIENoaW5lc2UgcGFnZXMgdXNlIHRoZSBjb2RlIEEzQTAgdG8gbWVhbiAiZnVs
bC13aWR0aCBzcGFjZSIsIGJ1dCBJQ1UgZGVjb2RlcyBpdCBhcyBVK0U1RTUuCi0gICAgLy8gRklY
TUU6IHN0cmNhc2VjbXAgaXMgbG9jYWxlIHNlbnNpdGl2ZSwgd2Ugc2hvdWxkIG5vdCBiZSB1c2lu
ZyBpdC4KLSAgICBpZiAoc3RyY21wKG1fZW5jb2RpbmdOYW1lLCAiR0JLIikgPT0gMCB8fCBzdHJj
YXNlY21wKG1fZW5jb2RpbmdOYW1lLCAiZ2IxODAzMCIpID09IDApCisgICAgaWYgKCFzdHJjbXAo
bV9lbmNvZGluZ05hbWUsICJHQksiKSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSht
X2VuY29kaW5nTmFtZSwgImdiMTgwMzAiKSkKICAgICAgICAgcmVzdWx0U3RyaW5nLnJlcGxhY2Uo
MHhFNUU1LCBpZGVvZ3JhcGhpY1NwYWNlKTsKIAogICAgIHJldHVybiByZXN1bHRTdHJpbmc7CiB9
CiAKIC8vIFdlIG5lZWQgdG8gYXBwbHkgdGhlc2UgZmFsbGJhY2tzIG91cnNlbHZlcyBhcyB0aGV5
IGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZCBieSBJQ1UgYW5kCi0vLyB0aGV5IHdlcmUgcHJv
dmlkZWQgYnkgdGhlIG9sZCBURUMgZW5jb2RpbmcgcGF0aC4gTmVlZGVkIHRvIGZpeCA8cmRhcjov
L3Byb2JsZW0vNDcwODY4OT4uCisvLyB0aGV5IHdlcmUgcHJvdmlkZWQgYnkgdGhlIE1hYyBURUMg
ZW5jb2RpbmcgcGF0aC4gTmVlZGVkIHRvIGZpeCA8cmRhcjovL3Byb2JsZW0vNDcwODY4OT4uCiBz
dGF0aWMgVUNoYXIgZmFsbGJhY2tGb3JHQksoVUNoYXIzMiBjaGFyYWN0ZXIpCiB7CiAgICAgc3dp
dGNoIChjaGFyYWN0ZXIpIHsKQEAgLTM2OSwxMzAgKzM0NywxMjIgQEAgc3RhdGljIFVDaGFyIGZh
bGxiYWNrRm9yR0JLKFVDaGFyMzIgY2hhcgogLy8gSW52YWxpZCBjaGFyYWN0ZXIgaGFuZGxlciB3
aGVuIHdyaXRpbmcgZXNjYXBlZCBlbnRpdGllcyBmb3IgdW5yZXByZXNlbnRhYmxlCiAvLyBjaGFy
YWN0ZXJzLiBTZWUgdGhlIGRlY2xhcmF0aW9uIG9mIFRleHRDb2RlYzo6ZW5jb2RlIGZvciBtb3Jl
Lgogc3RhdGljIHZvaWQgdXJsRXNjYXBlZEVudGl0eUNhbGxiYWNrKGNvbnN0IHZvaWQqIGNvbnRl
eHQsIFVDb252ZXJ0ZXJGcm9tVW5pY29kZUFyZ3MqIGZyb21VQXJncywgY29uc3QgVUNoYXIqIGNv
ZGVVbml0cywgaW50MzJfdCBsZW5ndGgsCi0gICAgVUNoYXIzMiBjb2RlUG9pbnQsIFVDb252ZXJ0
ZXJDYWxsYmFja1JlYXNvbiByZWFzb24sIFVFcnJvckNvZGUqIGVycikKKyAgICBVQ2hhcjMyIGNv
ZGVQb2ludCwgVUNvbnZlcnRlckNhbGxiYWNrUmVhc29uIHJlYXNvbiwgVUVycm9yQ29kZSogZXJy
b3IpCiB7CiAgICAgaWYgKHJlYXNvbiA9PSBVQ05WX1VOQVNTSUdORUQpIHsKLSAgICAgICAgKmVy
ciA9IFVfWkVST19FUlJPUjsKLQorICAgICAgICAqZXJyb3IgPSBVX1pFUk9fRVJST1I7CiAgICAg
ICAgIFVuZW5jb2RhYmxlUmVwbGFjZW1lbnRBcnJheSBlbnRpdHk7CiAgICAgICAgIGludCBlbnRp
dHlMZW4gPSBUZXh0Q29kZWM6OmdldFVuZW5jb2RhYmxlUmVwbGFjZW1lbnQoY29kZVBvaW50LCBV
UkxFbmNvZGVkRW50aXRpZXNGb3JVbmVuY29kYWJsZXMsIGVudGl0eSk7Ci0gICAgICAgIHVjbnZf
Y2JGcm9tVVdyaXRlQnl0ZXMoZnJvbVVBcmdzLCBlbnRpdHksIGVudGl0eUxlbiwgMCwgZXJyKTsK
KyAgICAgICAgdWNudl9jYkZyb21VV3JpdGVCeXRlcyhmcm9tVUFyZ3MsIGVudGl0eS5kYXRhKCks
IGVudGl0eUxlbiwgMCwgZXJyb3IpOwogICAgIH0gZWxzZQotICAgICAgICBVQ05WX0ZST01fVV9D
QUxMQkFDS19FU0NBUEUoY29udGV4dCwgZnJvbVVBcmdzLCBjb2RlVW5pdHMsIGxlbmd0aCwgY29k
ZVBvaW50LCByZWFzb24sIGVycik7CisgICAgICAgIFVDTlZfRlJPTV9VX0NBTExCQUNLX0VTQ0FQ
RShjb250ZXh0LCBmcm9tVUFyZ3MsIGNvZGVVbml0cywgbGVuZ3RoLCBjb2RlUG9pbnQsIHJlYXNv
biwgZXJyb3IpOwogfQogCiAvLyBTdWJzdGl0dXRlcyBzcGVjaWFsIEdCSyBjaGFyYWN0ZXJzLCBl
c2NhcGluZyBhbGwgb3RoZXIgdW5hc3NpZ25lZCBlbnRpdGllcy4KIHN0YXRpYyB2b2lkIGdia0Nh
bGxiYWNrRXNjYXBlKGNvbnN0IHZvaWQqIGNvbnRleHQsIFVDb252ZXJ0ZXJGcm9tVW5pY29kZUFy
Z3MqIGZyb21VQXJncywgY29uc3QgVUNoYXIqIGNvZGVVbml0cywgaW50MzJfdCBsZW5ndGgsCi0g
ICAgVUNoYXIzMiBjb2RlUG9pbnQsIFVDb252ZXJ0ZXJDYWxsYmFja1JlYXNvbiByZWFzb24sIFVF
cnJvckNvZGUqIGVycikgCisgICAgVUNoYXIzMiBjb2RlUG9pbnQsIFVDb252ZXJ0ZXJDYWxsYmFj
a1JlYXNvbiByZWFzb24sIFVFcnJvckNvZGUqIGVycm9yKQogewogICAgIFVDaGFyIG91dENoYXI7
CiAgICAgaWYgKHJlYXNvbiA9PSBVQ05WX1VOQVNTSUdORUQgJiYgKG91dENoYXIgPSBmYWxsYmFj
a0ZvckdCSyhjb2RlUG9pbnQpKSkgewogICAgICAgICBjb25zdCBVQ2hhciogc291cmNlID0gJm91
dENoYXI7Ci0gICAgICAgICplcnIgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAgIHVjbnZfY2JGcm9t
VVdyaXRlVUNoYXJzKGZyb21VQXJncywgJnNvdXJjZSwgc291cmNlICsgMSwgMCwgZXJyKTsKKyAg
ICAgICAgKmVycm9yID0gVV9aRVJPX0VSUk9SOworICAgICAgICB1Y252X2NiRnJvbVVXcml0ZVVD
aGFycyhmcm9tVUFyZ3MsICZzb3VyY2UsIHNvdXJjZSArIDEsIDAsIGVycm9yKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICBVQ05WX0ZST01fVV9DQUxMQkFDS19FU0NBUEUoY29udGV4dCwg
ZnJvbVVBcmdzLCBjb2RlVW5pdHMsIGxlbmd0aCwgY29kZVBvaW50LCByZWFzb24sIGVycik7Cisg
ICAgVUNOVl9GUk9NX1VfQ0FMTEJBQ0tfRVNDQVBFKGNvbnRleHQsIGZyb21VQXJncywgY29kZVVu
aXRzLCBsZW5ndGgsIGNvZGVQb2ludCwgcmVhc29uLCBlcnJvcik7CiB9CiAKIC8vIENvbWJpbmVz
IGJvdGggZ2JrVXJsRXNjYXBlZEVudGl0eUNhbGxiYWNrIGFuZCBHQksgY2hhcmFjdGVyIHN1YnN0
aXR1dGlvbi4KIHN0YXRpYyB2b2lkIGdia1VybEVzY2FwZWRFbnRpdHlDYWxsYWNrKGNvbnN0IHZv
aWQqIGNvbnRleHQsIFVDb252ZXJ0ZXJGcm9tVW5pY29kZUFyZ3MqIGZyb21VQXJncywgY29uc3Qg
VUNoYXIqIGNvZGVVbml0cywgaW50MzJfdCBsZW5ndGgsCi0gICAgVUNoYXIzMiBjb2RlUG9pbnQs
IFVDb252ZXJ0ZXJDYWxsYmFja1JlYXNvbiByZWFzb24sIFVFcnJvckNvZGUqIGVycikgCisgICAg
VUNoYXIzMiBjb2RlUG9pbnQsIFVDb252ZXJ0ZXJDYWxsYmFja1JlYXNvbiByZWFzb24sIFVFcnJv
ckNvZGUqIGVycm9yKQogewogICAgIGlmIChyZWFzb24gPT0gVUNOVl9VTkFTU0lHTkVEKSB7CiAg
ICAgICAgIGlmIChVQ2hhciBvdXRDaGFyID0gZmFsbGJhY2tGb3JHQksoY29kZVBvaW50KSkgewog
ICAgICAgICAgICAgY29uc3QgVUNoYXIqIHNvdXJjZSA9ICZvdXRDaGFyOwotICAgICAgICAgICAg
KmVyciA9IFVfWkVST19FUlJPUjsKLSAgICAgICAgICAgIHVjbnZfY2JGcm9tVVdyaXRlVUNoYXJz
KGZyb21VQXJncywgJnNvdXJjZSwgc291cmNlICsgMSwgMCwgZXJyKTsKKyAgICAgICAgICAgICpl
cnJvciA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgICAgIHVjbnZfY2JGcm9tVVdyaXRlVUNoYXJz
KGZyb21VQXJncywgJnNvdXJjZSwgc291cmNlICsgMSwgMCwgZXJyb3IpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHVybEVzY2FwZWRFbnRpdHlDYWxsYmFjayhjb250
ZXh0LCBmcm9tVUFyZ3MsIGNvZGVVbml0cywgbGVuZ3RoLCBjb2RlUG9pbnQsIHJlYXNvbiwgZXJy
KTsKKyAgICAgICAgdXJsRXNjYXBlZEVudGl0eUNhbGxiYWNrKGNvbnRleHQsIGZyb21VQXJncywg
Y29kZVVuaXRzLCBsZW5ndGgsIGNvZGVQb2ludCwgcmVhc29uLCBlcnJvcik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgVUNOVl9GUk9NX1VfQ0FMTEJBQ0tfRVNDQVBFKGNvbnRleHQsIGZy
b21VQXJncywgY29kZVVuaXRzLCBsZW5ndGgsIGNvZGVQb2ludCwgcmVhc29uLCBlcnIpOworICAg
IFVDTlZfRlJPTV9VX0NBTExCQUNLX0VTQ0FQRShjb250ZXh0LCBmcm9tVUFyZ3MsIGNvZGVVbml0
cywgbGVuZ3RoLCBjb2RlUG9pbnQsIHJlYXNvbiwgZXJyb3IpOwogfQogCiBzdGF0aWMgdm9pZCBn
YmtDYWxsYmFja1N1YnN0aXR1dGUoY29uc3Qgdm9pZCogY29udGV4dCwgVUNvbnZlcnRlckZyb21V
bmljb2RlQXJncyogZnJvbVVBcmdzLCBjb25zdCBVQ2hhciogY29kZVVuaXRzLCBpbnQzMl90IGxl
bmd0aCwKLSAgICBVQ2hhcjMyIGNvZGVQb2ludCwgVUNvbnZlcnRlckNhbGxiYWNrUmVhc29uIHJl
YXNvbiwgVUVycm9yQ29kZSogZXJyKSAKKyAgICBVQ2hhcjMyIGNvZGVQb2ludCwgVUNvbnZlcnRl
ckNhbGxiYWNrUmVhc29uIHJlYXNvbiwgVUVycm9yQ29kZSogZXJyb3IpCiB7CiAgICAgVUNoYXIg
b3V0Q2hhcjsKICAgICBpZiAocmVhc29uID09IFVDTlZfVU5BU1NJR05FRCAmJiAob3V0Q2hhciA9
IGZhbGxiYWNrRm9yR0JLKGNvZGVQb2ludCkpKSB7CiAgICAgICAgIGNvbnN0IFVDaGFyKiBzb3Vy
Y2UgPSAmb3V0Q2hhcjsKLSAgICAgICAgKmVyciA9IFVfWkVST19FUlJPUjsKLSAgICAgICAgdWNu
dl9jYkZyb21VV3JpdGVVQ2hhcnMoZnJvbVVBcmdzLCAmc291cmNlLCBzb3VyY2UgKyAxLCAwLCBl
cnIpOworICAgICAgICAqZXJyb3IgPSBVX1pFUk9fRVJST1I7CisgICAgICAgIHVjbnZfY2JGcm9t
VVdyaXRlVUNoYXJzKGZyb21VQXJncywgJnNvdXJjZSwgc291cmNlICsgMSwgMCwgZXJyb3IpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIFVDTlZfRlJPTV9VX0NBTExCQUNLX1NVQlNUSVRV
VEUoY29udGV4dCwgZnJvbVVBcmdzLCBjb2RlVW5pdHMsIGxlbmd0aCwgY29kZVBvaW50LCByZWFz
b24sIGVycik7CisgICAgVUNOVl9GUk9NX1VfQ0FMTEJBQ0tfU1VCU1RJVFVURShjb250ZXh0LCBm
cm9tVUFyZ3MsIGNvZGVVbml0cywgbGVuZ3RoLCBjb2RlUG9pbnQsIHJlYXNvbiwgZXJyb3IpOwog
fQogCi1DU3RyaW5nIFRleHRDb2RlY0lDVTo6ZW5jb2RlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5nIGhhbmRsaW5nKQorVmVjdG9yPHVp
bnQ4X3Q+IFRleHRDb2RlY0lDVTo6ZW5jb2RlKFN0cmluZ1ZpZXcgc3RyaW5nLCBVbmVuY29kYWJs
ZUhhbmRsaW5nIGhhbmRsaW5nKQogewotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4g
IiI7CisgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CiAKLSAg
ICBpZiAoIW1fY29udmVydGVySUNVKQorICAgIGlmICghbV9jb252ZXJ0ZXIpIHsKICAgICAgICAg
Y3JlYXRlSUNVQ29udmVydGVyKCk7Ci0gICAgaWYgKCFtX2NvbnZlcnRlcklDVSkKLSAgICAgICAg
cmV0dXJuIENTdHJpbmcoKTsKKyAgICAgICAgaWYgKCFtX2NvbnZlcnRlcikKKyAgICAgICAgICAg
IHJldHVybiB7IH07CisgICAgfQogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBzZWUgaWYgdGhl
cmUgaXMgImZvcmNlIEFTQ0lJIHJhbmdlIiBtb2RlIGluIElDVTsKICAgICAvLyB1bnRpbCB0aGVu
LCB3ZSBjaGFuZ2UgdGhlIGJhY2tzbGFzaCBpbnRvIGEgeWVuIHNpZ24uCiAgICAgLy8gRW5jb2Rp
bmcgd2lsbCBjaGFuZ2UgdGhlIHllbiBzaWduIGJhY2sgaW50byBhIGJhY2tzbGFzaC4KLSAgICBW
ZWN0b3I8VUNoYXI+IGNvcHk7Ci0gICAgY29uc3QgVUNoYXIqIHNvdXJjZSA9IGNoYXJhY3RlcnM7
CisgICAgU3RyaW5nIGNvcHk7CiAgICAgaWYgKHNob3VsZFNob3dCYWNrc2xhc2hBc0N1cnJlbmN5
U3ltYm9sSW4obV9lbmNvZGluZ05hbWUpKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJzW2ldID09ICdcXCcp
IHsKLSAgICAgICAgICAgICAgICBjb3B5LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKTsK
LSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGk7ICsraikKLSAgICAgICAg
ICAgICAgICAgICAgY29weS51bmNoZWNrZWRBcHBlbmQoY2hhcmFjdGVyc1tqXSk7Ci0gICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgaiA9IGk7IGogPCBsZW5ndGg7ICsraikgewotICAgICAgICAg
ICAgICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW2pdOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoY2hhcmFjdGVyID09ICdcXCcpCi0gICAgICAgICAgICAgICAgICAgICAgICBj
aGFyYWN0ZXIgPSB5ZW5TaWduOwotICAgICAgICAgICAgICAgICAgICBjb3B5LnVuY2hlY2tlZEFw
cGVuZChjaGFyYWN0ZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzb3Vy
Y2UgPSBjb3B5LmRhdGEoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQorICAgICAgICBjb3B5ID0gc3RyaW5nLnRvU3RyaW5nV2l0aG91dENvcHlpbmco
KTsKKyAgICAgICAgY29weS5yZXBsYWNlKCdcXCcsIHllblNpZ24pOworICAgICAgICBzdHJpbmcg
PSBjb3B5OwogICAgIH0KLSAgICBjb25zdCBVQ2hhciogc291cmNlTGltaXQgPSBzb3VyY2UgKyBs
ZW5ndGg7Ci0KLSAgICBVRXJyb3JDb2RlIGVyciA9IFVfWkVST19FUlJPUjsKIAorICAgIFVFcnJv
ckNvZGUgZXJyb3I7CiAgICAgc3dpdGNoIChoYW5kbGluZykgewotICAgICAgICBjYXNlIFF1ZXN0
aW9uTWFya3NGb3JVbmVuY29kYWJsZXM6Ci0gICAgICAgICAgICB1Y252X3NldFN1YnN0Q2hhcnMo
bV9jb252ZXJ0ZXJJQ1UsICI/IiwgMSwgJmVycik7Ci0gICAgICAgICAgICB1Y252X3NldEZyb21V
Q2FsbEJhY2sobV9jb252ZXJ0ZXJJQ1UsIG1fbmVlZHNHQktGYWxsYmFja3MgPyBnYmtDYWxsYmFj
a1N1YnN0aXR1dGUgOiBVQ05WX0ZST01fVV9DQUxMQkFDS19TVUJTVElUVVRFLCAwLCAwLCAwLCAm
ZXJyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVudGl0aWVzRm9yVW5lbmNv
ZGFibGVzOgotICAgICAgICAgICAgdWNudl9zZXRGcm9tVUNhbGxCYWNrKG1fY29udmVydGVySUNV
LCBtX25lZWRzR0JLRmFsbGJhY2tzID8gZ2JrQ2FsbGJhY2tFc2NhcGUgOiBVQ05WX0ZST01fVV9D
QUxMQkFDS19FU0NBUEUsIFVDTlZfRVNDQVBFX1hNTF9ERUMsIDAsIDAsICZlcnIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVVJMRW5jb2RlZEVudGl0aWVzRm9yVW5lbmNvZGFi
bGVzOgotICAgICAgICAgICAgdWNudl9zZXRGcm9tVUNhbGxCYWNrKG1fY29udmVydGVySUNVLCBt
X25lZWRzR0JLRmFsbGJhY2tzID8gZ2JrVXJsRXNjYXBlZEVudGl0eUNhbGxhY2sgOiB1cmxFc2Nh
cGVkRW50aXR5Q2FsbGJhY2ssIDAsIDAsIDAsICZlcnIpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgQVNTRVJUKFVfU1VDQ0VTUyhlcnIpKTsKLSAgICBpZiAoVV9GQUlMVVJFKGVy
cikpCi0gICAgICAgIHJldHVybiBDU3RyaW5nKCk7CisgICAgY2FzZSBRdWVzdGlvbk1hcmtzRm9y
VW5lbmNvZGFibGVzOgorICAgICAgICBlcnJvciA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgdWNu
dl9zZXRTdWJzdENoYXJzKG1fY29udmVydGVyLmdldCgpLCAiPyIsIDEsICZlcnJvcik7CisgICAg
ICAgIGlmIChVX0ZBSUxVUkUoZXJyb3IpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAg
ICAgZXJyb3IgPSBVX1pFUk9fRVJST1I7CisgICAgICAgIHVjbnZfc2V0RnJvbVVDYWxsQmFjayht
X2NvbnZlcnRlci5nZXQoKSwgbV9uZWVkc0dCS0ZhbGxiYWNrcyA/IGdia0NhbGxiYWNrU3Vic3Rp
dHV0ZSA6IFVDTlZfRlJPTV9VX0NBTExCQUNLX1NVQlNUSVRVVEUsIDAsIDAsIDAsICZlcnJvcik7
CisgICAgICAgIGlmIChVX0ZBSUxVUkUoZXJyb3IpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFbnRpdGllc0ZvclVuZW5jb2RhYmxlczoKKyAgICAg
ICAgZXJyb3IgPSBVX1pFUk9fRVJST1I7CisgICAgICAgIHVjbnZfc2V0RnJvbVVDYWxsQmFjayht
X2NvbnZlcnRlci5nZXQoKSwgbV9uZWVkc0dCS0ZhbGxiYWNrcyA/IGdia0NhbGxiYWNrRXNjYXBl
IDogVUNOVl9GUk9NX1VfQ0FMTEJBQ0tfRVNDQVBFLCBVQ05WX0VTQ0FQRV9YTUxfREVDLCAwLCAw
LCAmZXJyb3IpOworICAgICAgICBpZiAoVV9GQUlMVVJFKGVycm9yKSkKKyAgICAgICAgICAgIHJl
dHVybiB7IH07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVVJMRW5jb2RlZEVudGl0aWVzRm9y
VW5lbmNvZGFibGVzOgorICAgICAgICBlcnJvciA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgdWNu
dl9zZXRGcm9tVUNhbGxCYWNrKG1fY29udmVydGVyLmdldCgpLCBtX25lZWRzR0JLRmFsbGJhY2tz
ID8gZ2JrVXJsRXNjYXBlZEVudGl0eUNhbGxhY2sgOiB1cmxFc2NhcGVkRW50aXR5Q2FsbGJhY2ss
IDAsIDAsIDAsICZlcnJvcik7CisgICAgICAgIGlmIChVX0ZBSUxVUkUoZXJyb3IpKQorICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgYXV0byB1cGNv
bnZlcnRlZENoYXJhY3RlcnMgPSBzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CisgICAg
YXV0byogc291cmNlID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzLmdldCgpOworICAgIGF1dG8qIHNv
dXJjZUxpbWl0ID0gc291cmNlICsgc3RyaW5nLmxlbmd0aCgpOwogCi0gICAgVmVjdG9yPGNoYXI+
IHJlc3VsdDsKLSAgICBzaXplX3Qgc2l6ZSA9IDA7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3Vs
dDsKICAgICBkbyB7CiAgICAgICAgIGNoYXIgYnVmZmVyW0NvbnZlcnNpb25CdWZmZXJTaXplXTsK
ICAgICAgICAgY2hhciogdGFyZ2V0ID0gYnVmZmVyOwogICAgICAgICBjaGFyKiB0YXJnZXRMaW1p
dCA9IHRhcmdldCArIENvbnZlcnNpb25CdWZmZXJTaXplOwotICAgICAgICBlcnIgPSBVX1pFUk9f
RVJST1I7Ci0gICAgICAgIHVjbnZfZnJvbVVuaWNvZGUobV9jb252ZXJ0ZXJJQ1UsICZ0YXJnZXQs
IHRhcmdldExpbWl0LCAmc291cmNlLCBzb3VyY2VMaW1pdCwgMCwgdHJ1ZSwgJmVycik7Ci0gICAg
ICAgIHNpemVfdCBjb3VudCA9IHRhcmdldCAtIGJ1ZmZlcjsKLSAgICAgICAgcmVzdWx0Lmdyb3co
c2l6ZSArIGNvdW50KTsKLSAgICAgICAgbWVtY3B5KHJlc3VsdC5kYXRhKCkgKyBzaXplLCBidWZm
ZXIsIGNvdW50KTsKLSAgICAgICAgc2l6ZSArPSBjb3VudDsKLSAgICB9IHdoaWxlIChlcnIgPT0g
VV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpOwotCi0gICAgcmV0dXJuIENTdHJpbmcocmVzdWx0LmRh
dGEoKSwgc2l6ZSk7CisgICAgICAgIGVycm9yID0gVV9aRVJPX0VSUk9SOworICAgICAgICB1Y252
X2Zyb21Vbmljb2RlKG1fY29udmVydGVyLmdldCgpLCAmdGFyZ2V0LCB0YXJnZXRMaW1pdCwgJnNv
dXJjZSwgc291cmNlTGltaXQsIDAsIHRydWUsICZlcnJvcik7CisgICAgICAgIHJlc3VsdC5hcHBl
bmQocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgdGFyZ2V0IC0gYnVmZmVyKTsK
KyAgICB9IHdoaWxlIChlcnJvciA9PSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUik7CisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5oCShyZXZpc2lvbiAyMjUyMDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAw
NywgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dApAQCAtMjQsNTQgKzI0LDQ1IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVm
IFRleHRDb2RlY0lDVV9oCi0jZGVmaW5lIFRleHRDb2RlY0lDVV9oCisjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgIlRleHRDb2RlYy5oIgotI2luY2x1ZGUgPHVuaWNvZGUvdXR5cGVzLmg+Ci0KLXR5
cGVkZWYgc3RydWN0IFVDb252ZXJ0ZXIgVUNvbnZlcnRlcjsKKyNpbmNsdWRlIDx1bmljb2RlL3Vj
bnYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgVGV4dENvZGVjSUNVIDog
cHVibGljIFRleHRDb2RlYyB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPFRleHRDb2RlYz4gY3JlYXRlKGNvbnN0IFRleHRFbmNvZGluZyYsIGNvbnN0IHZvaWQq
IGFkZGl0aW9uYWxEYXRhKTsKLQotICAgICAgICBUZXh0Q29kZWNJQ1UoY29uc3QgY2hhciogZW5j
b2RpbmcsIGNvbnN0IGNoYXIqIGNhbm9uaWNhbENvbnZlcnRlck5hbWUpOwotCi0gICAgICAgIHN0
YXRpYyB2b2lkIHJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIpOwot
ICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIpOwot
Ci0gICAgICAgIHZpcnR1YWwgflRleHRDb2RlY0lDVSgpOwotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwg
Ym9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpIG92ZXJyaWRlOwotICAgICAgICBDU3Ry
aW5nIGVuY29kZShjb25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxp
bmcpIG92ZXJyaWRlOwotCi0gICAgICAgIHZvaWQgY3JlYXRlSUNVQ29udmVydGVyKCkgY29uc3Q7
Ci0gICAgICAgIHZvaWQgcmVsZWFzZUlDVUNvbnZlcnRlcigpIGNvbnN0OwotICAgICAgICBib29s
IG5lZWRzR0JLRmFsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc0dCS0ZhbGxiYWNrczsg
fQotICAgICAgICB2b2lkIHNldE5lZWRzR0JLRmFsbGJhY2tzKGJvb2wgbmVlZHNGYWxsYmFja3Mp
IHsgbV9uZWVkc0dCS0ZhbGxiYWNrcyA9IG5lZWRzRmFsbGJhY2tzOyB9Ci0gICAgICAgIAotICAg
ICAgICBpbnQgZGVjb2RlVG9CdWZmZXIoVUNoYXIqIGJ1ZmZlciwgVUNoYXIqIGJ1ZmZlckxpbWl0
LCBjb25zdCBjaGFyKiYgc291cmNlLAotICAgICAgICAgICAgY29uc3QgY2hhciogc291cmNlTGlt
aXQsIGludDMyX3QqIG9mZnNldHMsIGJvb2wgZmx1c2gsIFVFcnJvckNvZGUmIGVycik7Ci0KLSAg
ICAgICAgY29uc3QgY2hhciogY29uc3QgbV9lbmNvZGluZ05hbWU7Ci0gICAgICAgIGNvbnN0IGNo
YXIqIGNvbnN0IG1fY2Fub25pY2FsQ29udmVydGVyTmFtZTsKLSAgICAgICAgbXV0YWJsZSBVQ29u
dmVydGVyKiBtX2NvbnZlcnRlcklDVTsKLSAgICAgICAgbXV0YWJsZSBib29sIG1fbmVlZHNHQktG
YWxsYmFja3M7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBJQ1VDb252ZXJ0ZXJXcmFwcGVyIHsKLSAg
ICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSUNVQ29udmVydGVyV3JhcHBlcik7IFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoKLSAgICAgICAgSUNVQ29udmVydGVyV3JhcHBl
cigpIDogY29udmVydGVyKDApIHsgfQotICAgICAgICB+SUNVQ29udmVydGVyV3JhcHBlcigpOwor
dXNpbmcgSUNVQ29udmVydGVyUHRyID0gc3RkOjp1bmlxdWVfcHRyPFVDb252ZXJ0ZXIsIHZvaWQg
KCopKFVDb252ZXJ0ZXIqKT47CisKK2NsYXNzIFRleHRDb2RlY0lDVSA6IHB1YmxpYyBUZXh0Q29k
ZWMgeworcHVibGljOgorICAgIFRleHRDb2RlY0lDVShjb25zdCBjaGFyKiBlbmNvZGluZywgY29u
c3QgY2hhciogY2Fub25pY2FsQ29udmVydGVyTmFtZSk7CisgICAgdmlydHVhbCB+VGV4dENvZGVj
SUNVKCk7CisKKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlckVuY29kaW5nTmFtZXMoRW5jb2RpbmdO
YW1lUmVnaXN0cmFyKTsKKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNS
ZWdpc3RyYXIpOworCitwcml2YXRlOgorICAgIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNp
emVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9y
KSBmaW5hbDsKKyAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlKFN0cmluZ1ZpZXcsIFVuZW5jb2Rh
YmxlSGFuZGxpbmcpIGZpbmFsOworCisgICAgdm9pZCBjcmVhdGVJQ1VDb252ZXJ0ZXIoKSBjb25z
dDsKKyAgICB2b2lkIHJlbGVhc2VJQ1VDb252ZXJ0ZXIoKSBjb25zdDsKKyAgICBib29sIG5lZWRz
R0JLRmFsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc0dCS0ZhbGxiYWNrczsgfQorICAg
IHZvaWQgc2V0TmVlZHNHQktGYWxsYmFja3MoYm9vbCBuZWVkc0ZhbGxiYWNrcykgeyBtX25lZWRz
R0JLRmFsbGJhY2tzID0gbmVlZHNGYWxsYmFja3M7IH0KKworICAgIGludCBkZWNvZGVUb0J1ZmZl
cihVQ2hhciogYnVmZmVyLCBVQ2hhciogYnVmZmVyTGltaXQsIGNvbnN0IGNoYXIqJiBzb3VyY2Us
IGNvbnN0IGNoYXIqIHNvdXJjZUxpbWl0LCBpbnQzMl90KiBvZmZzZXRzLCBib29sIGZsdXNoLCBV
RXJyb3JDb2RlJik7CisKKyAgICBjb25zdCBjaGFyKiBjb25zdCBtX2VuY29kaW5nTmFtZTsKKyAg
ICBjb25zdCBjaGFyKiBjb25zdCBtX2Nhbm9uaWNhbENvbnZlcnRlck5hbWU7CisgICAgbXV0YWJs
ZSBJQ1VDb252ZXJ0ZXJQdHIgbV9jb252ZXJ0ZXIgeyBudWxscHRyLCB1Y252X2Nsb3NlIH07Cisg
ICAgbXV0YWJsZSBib29sIG1fbmVlZHNHQktGYWxsYmFja3MgeyBmYWxzZSB9OworfTsKKworc3Ry
dWN0IElDVUNvbnZlcnRlcldyYXBwZXIgeworICAgIElDVUNvbnZlcnRlclB0ciBjb252ZXJ0ZXIg
eyBudWxscHRyLCB1Y252X2Nsb3NlIH07CiAKLSAgICAgICAgVUNvbnZlcnRlciogY29udmVydGVy
OwotICAgIH07CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Cit9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBUZXh0Q29kZWNJQ1VfaApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcAkocmV2aXNpb24g
MjI1MjA3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJU
ZXh0Q29kZWNMYXRpbjEuaCIKIAogI2luY2x1ZGUgIlRleHRDb2RlY0FTQ0lJRmFzdFBhdGguaCIK
KyNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CkBAIC0zNSw3ICszNiw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3Bh
Y2UgV1RGOwogCi1zdGF0aWMgY29uc3QgVUNoYXIgdGFibGVbMjU2XSA9IHsKK3N0YXRpYyBjb25z
dCBVQ2hhciBsYXRpbjFDb252ZXJzaW9uVGFibGVbMjU2XSA9IHsKICAgICAweDAwMDAsIDB4MDAw
MSwgMHgwMDAyLCAweDAwMDMsIDB4MDAwNCwgMHgwMDA1LCAweDAwMDYsIDB4MDAwNywgLy8gMDAt
MDcKICAgICAweDAwMDgsIDB4MDAwOSwgMHgwMDBBLCAweDAwMEIsIDB4MDAwQywgMHgwMDBELCAw
eDAwMEUsIDB4MDAwRiwgLy8gMDgtMEYKICAgICAweDAwMTAsIDB4MDAxMSwgMHgwMDEyLCAweDAw
MTMsIDB4MDAxNCwgMHgwMDE1LCAweDAwMTYsIDB4MDAxNywgLy8gMTAtMTcKQEAgLTkyLDE0ICs5
MywxMSBAQCB2b2lkIFRleHRDb2RlY0xhdGluMTo6cmVnaXN0ZXJFbmNvZGluZ05hCiAgICAgcmVn
aXN0cmFyKCJ4LWNwMTI1MiIsICJ3aW5kb3dzLTEyNTIiKTsKIH0KIAotc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxUZXh0Q29kZWM+IG5ld1N0cmVhbWluZ1RleHREZWNvZGVyV2luZG93c0xhdGluMShj
b25zdCBUZXh0RW5jb2RpbmcmLCBjb25zdCB2b2lkKikKLXsKLSAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxUZXh0Q29kZWNMYXRpbjE+KCk7Ci19Ci0KIHZvaWQgVGV4dENvZGVjTGF0aW4xOjpy
ZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFyKQogewotICAgIHJlZ2lz
dHJhcigid2luZG93cy0xMjUyIiwgbmV3U3RyZWFtaW5nVGV4dERlY29kZXJXaW5kb3dzTGF0aW4x
LCAwKTsKKyAgICByZWdpc3RyYXIoIndpbmRvd3MtMTI1MiIsIFtdIHsKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjTGF0aW4xPigpOworICAgIH0pOwogfQogCiBTdHJp
bmcgVGV4dENvZGVjTGF0aW4xOjpkZWNvZGUoY29uc3QgY2hhciogYnl0ZXMsIHNpemVfdCBsZW5n
dGgsIGJvb2wsIGJvb2wsIGJvb2wmKQpAQCAtMTM5LDEwICsxMzcsMTAgQEAgU3RyaW5nIFRleHRD
b2RlY0xhdGluMTo6ZGVjb2RlKGNvbnN0IGNoYQogICAgICAgICAgICAgKmRlc3RpbmF0aW9uID0g
KnNvdXJjZTsKICAgICAgICAgfSBlbHNlIHsKIHVzZUxvb2t1cFRhYmxlOgotICAgICAgICAgICAg
aWYgKHRhYmxlWypzb3VyY2VdID4gMHhmZikKKyAgICAgICAgICAgIGlmIChsYXRpbjFDb252ZXJz
aW9uVGFibGVbKnNvdXJjZV0gPiAweGZmKQogICAgICAgICAgICAgICAgIGdvdG8gdXBDb252ZXJ0
VG8xNkJpdDsKIAotICAgICAgICAgICAgKmRlc3RpbmF0aW9uID0gdGFibGVbKnNvdXJjZV07Cisg
ICAgICAgICAgICAqZGVzdGluYXRpb24gPSBsYXRpbjFDb252ZXJzaW9uVGFibGVbKnNvdXJjZV07
CiAgICAgICAgIH0KIAogICAgICAgICArK3NvdXJjZTsKQEAgLTE2NSw3ICsxNjMsNyBAQCB1cENv
bnZlcnRUbzE2Qml0OgogICAgICAgICAqZGVzdGluYXRpb24xNisrID0gKnB0cjgrKzsKIAogICAg
IC8vIEhhbmRsZSB0aGUgY2hhcmFjdGVyIHRoYXQgdHJpZ2dlcmVkIHRoZSAxNiBiaXQgcGF0aAot
ICAgICpkZXN0aW5hdGlvbjE2ID0gdGFibGVbKnNvdXJjZV07CisgICAgKmRlc3RpbmF0aW9uMTYg
PSBsYXRpbjFDb252ZXJzaW9uVGFibGVbKnNvdXJjZV07CiAgICAgKytzb3VyY2U7CiAgICAgKytk
ZXN0aW5hdGlvbjE2OwogCkBAIC0xOTQsNyArMTkyLDcgQEAgdXBDb252ZXJ0VG8xNkJpdDoKICAg
ICAgICAgICAgICpkZXN0aW5hdGlvbjE2ID0gKnNvdXJjZTsKICAgICAgICAgfSBlbHNlIHsKIHVz
ZUxvb2t1cFRhYmxlMTY6Ci0gICAgICAgICAgICAqZGVzdGluYXRpb24xNiA9IHRhYmxlWypzb3Vy
Y2VdOworICAgICAgICAgICAgKmRlc3RpbmF0aW9uMTYgPSBsYXRpbjFDb252ZXJzaW9uVGFibGVb
KnNvdXJjZV07CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgICsrc291cmNlOwpAQCAtMjA0
LDU4ICsyMDIsNTEgQEAgdXNlTG9va3VwVGFibGUxNjoKICAgICByZXR1cm4gcmVzdWx0MTY7CiB9
CiAKLXN0YXRpYyBDU3RyaW5nIGVuY29kZUNvbXBsZXhXaW5kb3dzTGF0aW4xKGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5nIGhhbmRsaW5n
KQorc3RhdGljIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVDb21wbGV4V2luZG93c0xhdGluMShTdHJp
bmdWaWV3IHN0cmluZywgVW5lbmNvZGFibGVIYW5kbGluZyBoYW5kbGluZykKIHsKLSAgICBWZWN0
b3I8Y2hhcj4gcmVzdWx0KGxlbmd0aCk7Ci0gICAgY2hhciogYnl0ZXMgPSByZXN1bHQuZGF0YSgp
OworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7CiAKLSAgICBzaXplX3QgcmVzdWx0TGVuZ3Ro
ID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKSB7Ci0gICAgICAgIFVD
aGFyMzIgYzsKLSAgICAgICAgVTE2X05FWFQoY2hhcmFjdGVycywgaSwgbGVuZ3RoLCBjKTsKLSAg
ICAgICAgdW5zaWduZWQgY2hhciBiID0gYzsKKyAgICBmb3IgKGF1dG8gY2hhcmFjdGVyIDogc3Ry
aW5nLmNvZGVQb2ludHMoKSkgeworICAgICAgICB1aW50OF90IGIgPSBjaGFyYWN0ZXI7CiAgICAg
ICAgIC8vIERvIGFuIGVmZmljaWVudCBjaGVjayB0byBkZXRlY3QgY2hhcmFjdGVycyBvdGhlciB0
aGFuIDAwLTdGIGFuZCBBMC1GRi4KLSAgICAgICAgaWYgKGIgIT0gYyB8fCAoYyAmIDB4RTApID09
IDB4ODApIHsKKyAgICAgICAgaWYgKGIgIT0gY2hhcmFjdGVyIHx8IChjaGFyYWN0ZXIgJiAweEUw
KSA9PSAweDgwKSB7CiAgICAgICAgICAgICAvLyBMb29rIGZvciBhIHdheSB0byBlbmNvZGUgdGhp
cyB3aXRoIFdpbmRvd3MgTGF0aW4tMS4KLSAgICAgICAgICAgIGZvciAoYiA9IDB4ODA7IGIgPCAw
eEEwOyArK2IpCi0gICAgICAgICAgICAgICAgaWYgKHRhYmxlW2JdID09IGMpCisgICAgICAgICAg
ICBmb3IgKGIgPSAweDgwOyBiIDwgMHhBMDsgKytiKSB7CisgICAgICAgICAgICAgICAgaWYgKGxh
dGluMUNvbnZlcnNpb25UYWJsZVtiXSA9PSBjaGFyYWN0ZXIpCiAgICAgICAgICAgICAgICAgICAg
IGdvdG8gZ290Qnl0ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIE5vIHdheSB0byBl
bmNvZGUgdGhpcyBjaGFyYWN0ZXIgd2l0aCBXaW5kb3dzIExhdGluLTEuCiAgICAgICAgICAgICBV
bmVuY29kYWJsZVJlcGxhY2VtZW50QXJyYXkgcmVwbGFjZW1lbnQ7Ci0gICAgICAgICAgICBpbnQg
cmVwbGFjZW1lbnRMZW5ndGggPSBUZXh0Q29kZWM6OmdldFVuZW5jb2RhYmxlUmVwbGFjZW1lbnQo
YywgaGFuZGxpbmcsIHJlcGxhY2VtZW50KTsKLSAgICAgICAgICAgIHJlc3VsdC5ncm93KHJlc3Vs
dExlbmd0aCArIHJlcGxhY2VtZW50TGVuZ3RoICsgbGVuZ3RoIC0gaSk7Ci0gICAgICAgICAgICBi
eXRlcyA9IHJlc3VsdC5kYXRhKCk7Ci0gICAgICAgICAgICBtZW1jcHkoYnl0ZXMgKyByZXN1bHRM
ZW5ndGgsIHJlcGxhY2VtZW50LCByZXBsYWNlbWVudExlbmd0aCk7Ci0gICAgICAgICAgICByZXN1
bHRMZW5ndGggKz0gcmVwbGFjZW1lbnRMZW5ndGg7CisgICAgICAgICAgICBpbnQgcmVwbGFjZW1l
bnRMZW5ndGggPSBUZXh0Q29kZWM6OmdldFVuZW5jb2RhYmxlUmVwbGFjZW1lbnQoY2hhcmFjdGVy
LCBoYW5kbGluZywgcmVwbGFjZW1lbnQpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChyZXBs
YWNlbWVudC5kYXRhKCksIHJlcGxhY2VtZW50TGVuZ3RoKTsKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9CiAgICAgZ290Qnl0ZToKLSAgICAgICAgYnl0ZXNbcmVzdWx0TGVuZ3RoKytd
ID0gYjsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChiKTsKICAgICB9CiAKLSAgICByZXR1cm4gQ1N0
cmluZyhieXRlcywgcmVzdWx0TGVuZ3RoKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1DU3Ry
aW5nIFRleHRDb2RlY0xhdGluMTo6ZW5jb2RlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXpl
X3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5nIGhhbmRsaW5nKQorVmVjdG9yPHVpbnQ4X3Q+
IFRleHRDb2RlY0xhdGluMTo6ZW5jb2RlKFN0cmluZ1ZpZXcgc3RyaW5nLCBVbmVuY29kYWJsZUhh
bmRsaW5nIGhhbmRsaW5nKQogewogICAgIHsKLSAgICAgICAgY2hhciogYnl0ZXM7Ci0gICAgICAg
IENTdHJpbmcgc3RyaW5nID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChsZW5ndGgsIGJ5dGVz
KTsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdChzdHJpbmcubGVuZ3RoKCkpOworICAg
ICAgICBhdXRvKiBieXRlcyA9IHJlc3VsdC5kYXRhKCk7CiAKLSAgICAgICAgLy8gQ29udmVydCB0
aGUgc3RyaW5nIGEgZmFzdCB3YXkgYW5kIHNpbXVsdGFuZW91c2x5IGRvIGFuIGVmZmljaWVudCBj
aGVjayB0byBzZWUgaWYgaXQncyBhbGwgQVNDSUkuCisgICAgICAgIC8vIENvbnZlcnQgYW5kIHNp
bXVsdGFuZW91c2x5IGRvIGEgY2hlY2sgdG8gc2VlIGlmIGl0J3MgYWxsIEFTQ0lJLgogICAgICAg
ICBVQ2hhciBvcmVkID0gMDsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkgewotICAgICAgICAgICAgVUNoYXIgYyA9IGNoYXJhY3RlcnNbaV07Ci0gICAgICAgICAg
ICBieXRlc1tpXSA9IGM7Ci0gICAgICAgICAgICBvcmVkIHw9IGM7CisgICAgICAgIGZvciAoYXV0
byBjaGFyYWN0ZXIgOiBzdHJpbmcuY29kZVVuaXRzKCkpIHsKKyAgICAgICAgICAgICpieXRlcysr
ID0gY2hhcmFjdGVyOworICAgICAgICAgICAgb3JlZCB8PSBjaGFyYWN0ZXI7CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoIShvcmVkICYgMHhGRjgwKSkKLSAgICAgICAgICAgIHJldHVybiBzdHJp
bmc7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIC8vIElmIGl0IHdh
c24ndCBhbGwgQVNDSUksIGNhbGwgdGhlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBtb3JlLWNvbXBs
ZXggY2FzZXMuCi0gICAgcmV0dXJuIGVuY29kZUNvbXBsZXhXaW5kb3dzTGF0aW4xKGNoYXJhY3Rl
cnMsIGxlbmd0aCwgaGFuZGxpbmcpOworICAgIHJldHVybiBlbmNvZGVDb21wbGV4V2luZG93c0xh
dGluMShzdHJpbmcsIGhhbmRsaW5nKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5oCShy
ZXZpc2lvbiAyMjUyMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2Rl
Y0xhdGluMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMywyMiArMjMsMjEgQEAKICAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAogICovCiAKLSNpZm5kZWYgVGV4dENvZGVjTGF0aW4xX2gKLSNkZWZpbmUgVGV4dENv
ZGVjTGF0aW4xX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiVGV4dENvZGVjLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIFRleHRDb2RlY0xhdGluMSA6IHB1YmxpYyBU
ZXh0Q29kZWMgewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJFbmNv
ZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhcik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHJl
Z2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7Ci0KLSAgICAgICAgU3RyaW5nIGRlY29k
ZShjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJv
ciwgYm9vbCYgc2F3RXJyb3IpIG92ZXJyaWRlOwotICAgICAgICBDU3RyaW5nIGVuY29kZShjb25z
dCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcpIG92ZXJyaWRlOwot
ICAgIH07CitjbGFzcyBUZXh0Q29kZWNMYXRpbjEgZmluYWwgOiBwdWJsaWMgVGV4dENvZGVjIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlckVuY29kaW5nTmFtZXMoRW5jb2RpbmdO
YW1lUmVnaXN0cmFyKTsKKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNS
ZWdpc3RyYXIpOworCitwcml2YXRlOgorICAgIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNp
emVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9y
KSBmaW5hbDsKKyAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlKFN0cmluZ1ZpZXcsIFVuZW5jb2Rh
YmxlSGFuZGxpbmcpIGZpbmFsOworfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5k
aWYgLy8gVGV4dENvZGVjTGF0aW4xX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dENvZGVjUmVwbGFjZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dENvZGVjUmVwbGFjZW1lbnQuY3BwCShyZXZpc2lvbiAyMjUyMDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1JlcGxhY2VtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zMCwyMiArMzAsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1zdGQ6OnVuaXF1ZV9wdHI8VGV4dENvZGVjPiBUZXh0Q29kZWNSZXBsYWNlbWVudDo6Y3JlYXRl
KGNvbnN0IFRleHRFbmNvZGluZyYsIGNvbnN0IHZvaWQqKQotewotICAgIHJldHVybiBzdGQ6Om1h
a2VfdW5pcXVlPFRleHRDb2RlY1JlcGxhY2VtZW50PigpOwotfQotCi1UZXh0Q29kZWNSZXBsYWNl
bWVudDo6VGV4dENvZGVjUmVwbGFjZW1lbnQoKQotewotfQotCiB2b2lkIFRleHRDb2RlY1JlcGxh
Y2VtZW50OjpyZWdpc3RlckVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lz
dHJhcikKIHsKLSAgICAvLyBUaGUgJ3JlcGxhY2VtZW50JyBpdHNlbGYgaXMgbm90IGEgdmFsaWQg
bGFiZWwuIEl0IGlzIHRoZSBuYW1lIG9mCisgICAgLy8gVGhlIHN0cmluZyAncmVwbGFjZW1lbnQn
IGl0c2VsZiBpcyBub3QgYSB2YWxpZCBsYWJlbC4gSXQgaXMgdGhlIG5hbWUgb2YKICAgICAvLyBh
IGdyb3VwIG9mIGxlZ2FjeSBlbmNvZGluZyBsYWJlbHMuIEhlbmNlLCBpdCBjYW5ub3QgYmUgdXNl
ZCBkaXJlY3RseS4KKyAgICAvLyBUaGUgVGV4dEVuY29kaW5nIGNsYXNzIGltcGxlbWVudHMgdGhl
IGFib3ZlIHJ1bGU7IGhlcmUgd2UgcmVnaXN0ZXIgaXQgbm9ybWFsbHkuCiAgICAgcmVnaXN0cmFy
KCJyZXBsYWNlbWVudCIsICJyZXBsYWNlbWVudCIpOwogCi0gICAgLy8gVGhlIGxhYmVscwogICAg
IHJlZ2lzdHJhcigiY3Npc28yMDIya3IiLCAicmVwbGFjZW1lbnQiKTsKICAgICByZWdpc3RyYXIo
Imh6LWdiLTIzMTIiLCAicmVwbGFjZW1lbnQiKTsKICAgICByZWdpc3RyYXIoImlzby0yMDIyLWNu
IiwgInJlcGxhY2VtZW50Iik7CkBAIC01NSw3ICs0Niw5IEBAIHZvaWQgVGV4dENvZGVjUmVwbGFj
ZW1lbnQ6OnJlZ2lzdGVyRW5jb2QKIAogdm9pZCBUZXh0Q29kZWNSZXBsYWNlbWVudDo6cmVnaXN0
ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKIHsKLSAgICByZWdpc3RyYXIo
InJlcGxhY2VtZW50IiwgY3JlYXRlLCAwKTsKKyAgICByZWdpc3RyYXIoInJlcGxhY2VtZW50Iiwg
W10geworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxUZXh0Q29kZWNSZXBsYWNlbWVu
dD4oKTsKKyAgICB9KTsKIH0KIAogU3RyaW5nIFRleHRDb2RlY1JlcGxhY2VtZW50OjpkZWNvZGUo
Y29uc3QgY2hhciosIHNpemVfdCwgYm9vbCwgYm9vbCwgYm9vbCYgc2F3RXJyb3IpCkBAIC02Myw5
ICs1Niw4IEBAIFN0cmluZyBUZXh0Q29kZWNSZXBsYWNlbWVudDo6ZGVjb2RlKGNvbnMKICAgICBz
YXdFcnJvciA9IHRydWU7CiAgICAgaWYgKG1fc2VudEVPRikKICAgICAgICAgcmV0dXJuIGVtcHR5
U3RyaW5nKCk7Ci0KICAgICBtX3NlbnRFT0YgPSB0cnVlOwotICAgIHJldHVybiBTdHJpbmcoJnJl
cGxhY2VtZW50Q2hhcmFjdGVyLCAxKTsKKyAgICByZXR1cm4gU3RyaW5nIHsgJnJlcGxhY2VtZW50
Q2hhcmFjdGVyLCAxIH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjUmVwbGFjZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1JlcGxhY2VtZW50LmgJ
KHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENv
ZGVjUmVwbGFjZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBUZXh0Q29kZWNSZXBsYWNl
bWVudF9oCi0jZGVmaW5lIFRleHRDb2RlY1JlcGxhY2VtZW50X2gKKyNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSAiVGV4dENvZGVjVVRGOC5oIgogCkBAIC0zMiwyMCArMzEsMTQgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBUZXh0Q29kZWNSZXBsYWNlbWVudCA6IHB1YmxpYyBUZXh0Q29k
ZWNVVEY4IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFRleHRDb2RlYz4g
Y3JlYXRlKGNvbnN0IFRleHRFbmNvZGluZyYsIGNvbnN0IHZvaWQqKTsKLQotICAgIFRleHRDb2Rl
Y1JlcGxhY2VtZW50KCk7Ci0KICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckVuY29kaW5nTmFtZXMo
RW5jb2RpbmdOYW1lUmVnaXN0cmFyKTsKICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckNvZGVjcyhU
ZXh0Q29kZWNSZWdpc3RyYXIpOwogCiBwcml2YXRlOgotICAgIFN0cmluZyBkZWNvZGUoY29uc3Qg
Y2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wm
IHNhd0Vycm9yKSBvdmVycmlkZTsKKyAgICBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXpl
X3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcikg
ZmluYWw7CiAKICAgICBib29sIG1fc2VudEVPRiB7IGZhbHNlIH07CiAKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8qIFRleHRDb2RlY1JlcGxhY2VtZW50X2ggKi8KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGOC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEY4LmNwcAko
cmV2aXNpb24gMjI1MjA3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29k
ZWNVVEY4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsOSArNTUsOSBAQCB2b2lkIFRleHRDb2Rl
Y1VURjg6OnJlZ2lzdGVyRW5jb2RpbmdOYW1lCiAKIHZvaWQgVGV4dENvZGVjVVRGODo6cmVnaXN0
ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKIHsKLSAgICByZWdpc3RyYXIo
IlVURi04IiwgW10gKGNvbnN0IFRleHRFbmNvZGluZyYsIGNvbnN0IHZvaWQqKSAtPiBzdGQ6OnVu
aXF1ZV9wdHI8VGV4dENvZGVjPiB7CisgICAgcmVnaXN0cmFyKCJVVEYtOCIsIFtdIHsKICAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjVVRGOD4oKTsKLSAgICB9LCBudWxs
cHRyKTsKKyAgICB9KTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgbm9uQVNDSUlTZXF1ZW5jZUxl
bmd0aCh1aW50OF90IGZpcnN0Qnl0ZSkKQEAgLTQzMiwyMiArNDMyLDE2IEBAIHVwQ29udmVydFRv
MTZCaXQ6CiAgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoV1RGTW92ZShidWZmZXIxNikpOwogfQog
Ci1DU3RyaW5nIFRleHRDb2RlY1VURjg6OmVuY29kZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
c2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZykKK1ZlY3Rvcjx1aW50OF90PiBUZXh0
Q29kZWNVVEY4OjplbmNvZGUoU3RyaW5nVmlldyBzdHJpbmcsIFVuZW5jb2RhYmxlSGFuZGxpbmcp
CiB7CiAgICAgLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIFVURi04IGJ5dGVzIG5lZWRlZCBwZXIg
VVRGLTE2IGNvZGUgdW5pdCBpcyAzLgogICAgIC8vIEJNUCBjaGFyYWN0ZXJzIHRha2Ugb25seSBv
bmUgVVRGLTE2IGNvZGUgdW5pdCBhbmQgY2FuIHRha2UgdXAgdG8gMyBieXRlcyAoM3gpLgogICAg
IC8vIE5vbi1CTVAgY2hhcmFjdGVycyB0YWtlIHR3byBVVEYtMTYgY29kZSB1bml0cyBhbmQgY2Fu
IHRha2UgdXAgdG8gNCBieXRlcyAoMngpLgotICAgIGlmIChsZW5ndGggPiBzdGQ6Om51bWVyaWNf
bGltaXRzPHNpemVfdD46Om1heCgpIC8gMykKLSAgICAgICAgQ1JBU0goKTsKLQotICAgIFZlY3Rv
cjxjaGFyLCAzMDAwPiBieXRlcyhsZW5ndGggKiAzKTsKKyAgICBWZWN0b3I8dWludDhfdD4gYnl0
ZXMoV1RGOjpjaGVja2VkUHJvZHVjdDxzaXplX3Q+KHN0cmluZy5sZW5ndGgoKSwgMykudW5zYWZl
R2V0KCkpOwogICAgIHNpemVfdCBieXRlc1dyaXR0ZW4gPSAwOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGVuZ3RoOyApIHsKLSAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXI7Ci0gICAgICAg
IFUxNl9ORVhUKGNoYXJhY3RlcnMsIGksIGxlbmd0aCwgY2hhcmFjdGVyKTsKKyAgICBmb3IgKGF1
dG8gY2hhcmFjdGVyIDogc3RyaW5nLmNvZGVQb2ludHMoKSkKICAgICAgICAgVThfQVBQRU5EX1VO
U0FGRShieXRlcy5kYXRhKCksIGJ5dGVzV3JpdHRlbiwgY2hhcmFjdGVyKTsKLSAgICB9Ci0gICAg
cmV0dXJuIENTdHJpbmcgeyBieXRlcy5kYXRhKCksIGJ5dGVzV3JpdHRlbiB9OworICAgIHJldHVy
biBieXRlczsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEY4LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEY4LmgJKHJldmlzaW9uIDIyNTIwNykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGOC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIlRleHRDb2Rl
Yy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0xDaGFyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtMzYsNyArMzcsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgU3RyaW5nIGRlY29k
ZShjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJv
ciwgYm9vbCYgc2F3RXJyb3IpIG92ZXJyaWRlOwotICAgIENTdHJpbmcgZW5jb2RlKGNvbnN0IFVD
aGFyKiwgc2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZykgb3ZlcnJpZGU7CisgICAg
VmVjdG9yPHVpbnQ4X3Q+IGVuY29kZShTdHJpbmdWaWV3LCBVbmVuY29kYWJsZUhhbmRsaW5nKSBm
aW5hbDsKIAogICAgIGJvb2wgaGFuZGxlUGFydGlhbFNlcXVlbmNlKExDaGFyKiYgZGVzdGluYXRp
b24sIGNvbnN0IHVpbnQ4X3QqJiBzb3VyY2UsIGNvbnN0IHVpbnQ4X3QqIGVuZCwgYm9vbCBmbHVz
aCk7CiAgICAgdm9pZCBoYW5kbGVQYXJ0aWFsU2VxdWVuY2UoVUNoYXIqJiBkZXN0aW5hdGlvbiwg
Y29uc3QgdWludDhfdComIHNvdXJjZSwgY29uc3QgdWludDhfdCogZW5kLCBib29sIGZsdXNoLCBi
b29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcAkocmV2aXNpb24gMjI1MjA3KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEYxNi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2
LCAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcsMjAgKzQ3LDE0IEBAIHZvaWQgVGV4dENvZGVj
VVRGMTY6OnJlZ2lzdGVyRW5jb2RpbmdOYW0KICAgICByZWdpc3RyYXIoInVuaWNvZGVGRkZFIiwg
IlVURi0xNkJFIik7CiB9CiAKLXN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VGV4dENvZGVjPiBuZXdT
dHJlYW1pbmdUZXh0RGVjb2RlclVURjE2TEUoY29uc3QgVGV4dEVuY29kaW5nJiwgY29uc3Qgdm9p
ZCopCi17Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjVVRGMTY+KHRydWUp
OwotfQotCi1zdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFRleHRDb2RlYz4gbmV3U3RyZWFtaW5nVGV4
dERlY29kZXJVVEYxNkJFKGNvbnN0IFRleHRFbmNvZGluZyYsIGNvbnN0IHZvaWQqKQotewotICAg
IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFRleHRDb2RlY1VURjE2PihmYWxzZSk7Ci19Ci0KIHZv
aWQgVGV4dENvZGVjVVRGMTY6OnJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciByZWdp
c3RyYXIpCiB7Ci0gICAgcmVnaXN0cmFyKCJVVEYtMTZMRSIsIG5ld1N0cmVhbWluZ1RleHREZWNv
ZGVyVVRGMTZMRSwgMCk7Ci0gICAgcmVnaXN0cmFyKCJVVEYtMTZCRSIsIG5ld1N0cmVhbWluZ1Rl
eHREZWNvZGVyVVRGMTZCRSwgMCk7CisgICAgcmVnaXN0cmFyKCJVVEYtMTZMRSIsIFtdIHsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjVVRGMTY+KHRydWUpOworICAg
IH0pOworICAgIHJlZ2lzdHJhcigiVVRGLTE2QkUiLCBbXSB7CisgICAgICAgIHJldHVybiBzdGQ6
Om1ha2VfdW5pcXVlPFRleHRDb2RlY1VURjE2PihmYWxzZSk7CisgICAgfSk7CiB9CiAKIFN0cmlu
ZyBUZXh0Q29kZWNVVEYxNjo6ZGVjb2RlKGNvbnN0IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3Ro
LCBib29sLCBib29sLCBib29sJikKQEAgLTExNCwzNiArMTA4LDI0IEBAIFN0cmluZyBUZXh0Q29k
ZWNVVEYxNjo6ZGVjb2RlKGNvbnN0IGNoYXIKICAgICByZXR1cm4gU3RyaW5nOjphZG9wdChXVEZN
b3ZlKGJ1ZmZlcikpOwogfQogCi1DU3RyaW5nIFRleHRDb2RlY1VURjE2OjplbmNvZGUoY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcpCitW
ZWN0b3I8dWludDhfdD4gVGV4dENvZGVjVVRGMTY6OmVuY29kZShTdHJpbmdWaWV3IHN0cmluZywg
VW5lbmNvZGFibGVIYW5kbGluZykKIHsKLSAgICAvLyBXZSBuZWVkIHRvIGJlIHN1cmUgd2UgY2Fu
IGRvdWJsZSB0aGUgbGVuZ3RoIHdpdGhvdXQgb3ZlcmZsb3dpbmcuCi0gICAgLy8gU2luY2UgdGhl
IHBhc3NlZC1pbiBsZW5ndGggaXMgdGhlIGxlbmd0aCBvZiBhbiBhY3R1YWwgZXhpc3RpbmcKLSAg
ICAvLyBjaGFyYWN0ZXIgYnVmZmVyLCBlYWNoIGNoYXJhY3RlciBpcyB0d28gYnl0ZXMsIGFuZCB3
ZSBrbm93Ci0gICAgLy8gdGhlIGJ1ZmZlciBkb2Vzbid0IG9jY3VweSB0aGUgZW50aXJlIGFkZHJl
c3Mgc3BhY2UsIHdlIGNhbgotICAgIC8vIGFzc2VydCBoZXJlIHRoYXQgZG91YmxpbmcgdGhlIGxl
bmd0aCBkb2VzIG5vdCBvdmVyZmxvdyBzaXplX3QKLSAgICAvLyBhbmQgdGhlcmUncyBubyBuZWVk
IGZvciBhIHJ1bnRpbWUgY2hlY2suCi0gICAgQVNTRVJUKGxlbmd0aCA8PSBzdGQ6Om51bWVyaWNf
bGltaXRzPHNpemVfdD46Om1heCgpIC8gMik7Ci0KLSAgICBjaGFyKiBieXRlczsKLSAgICBDU3Ry
aW5nIHN0cmluZyA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobGVuZ3RoICogMiwgYnl0ZXMp
OworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQoV1RGOjpjaGVja2VkUHJvZHVjdDxzaXplX3Q+
KHN0cmluZy5sZW5ndGgoKSwgMikudW5zYWZlR2V0KCkpOworICAgIGF1dG8qIGJ5dGVzID0gcmVz
dWx0LmRhdGEoKTsKIAotICAgIC8vIEZJWE1FOiBDU3RyaW5nIGlzIG5vdCBhIHJlYXNvbmFibGUg
ZGF0YSBzdHJ1Y3R1cmUgZm9yIGVuY29kZWQgVVRGLTE2LCB3aGljaCB3aWxsIGhhdmUKLSAgICAv
LyBudWxsIGNoYXJhY3RlcnMgaW5zaWRlIGl0LiBQZXJoYXBzIHRoZSByZXN1bHQgb2YgZW5jb2Rl
IHNob3VsZCBub3QgYmUgYSBDU3RyaW5nLgogICAgIGlmIChtX2xpdHRsZUVuZGlhbikgewotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBV
Q2hhciBjID0gY2hhcmFjdGVyc1tpXTsKLSAgICAgICAgICAgIGJ5dGVzW2kgKiAyXSA9IGM7Ci0g
ICAgICAgICAgICBieXRlc1tpICogMiArIDFdID0gYyA+PiA4OworICAgICAgICBmb3IgKGF1dG8g
Y2hhcmFjdGVyIDogc3RyaW5nLmNvZGVVbml0cygpKSB7CisgICAgICAgICAgICAqYnl0ZXMrKyA9
IGNoYXJhY3RlcjsKKyAgICAgICAgICAgICpieXRlcysrID0gY2hhcmFjdGVyID4+IDg7CiAgICAg
ICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7Ci0gICAgICAgICAgICBVQ2hhciBjID0gY2hhcmFjdGVyc1tpXTsKLSAgICAgICAg
ICAgIGJ5dGVzW2kgKiAyXSA9IGMgPj4gODsKLSAgICAgICAgICAgIGJ5dGVzW2kgKiAyICsgMV0g
PSBjOworICAgICAgICBmb3IgKGF1dG8gY2hhcmFjdGVyIDogc3RyaW5nLmNvZGVVbml0cygpKSB7
CisgICAgICAgICAgICAqYnl0ZXMrKyA9IGNoYXJhY3RlciA+PiA4OworICAgICAgICAgICAgKmJ5
dGVzKysgPSBjaGFyYWN0ZXI7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gc3RyaW5n
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGMTYuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmgJKHJldmlz
aW9uIDIyNTIwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRG
MTYuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsMjkgKzIzLDI4IEBACiAgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKICAqLwogCi0jaWZuZGVmIFRleHRDb2RlY1VURjE2X2gKLSNkZWZpbmUgVGV4dENvZGVjVVRG
MTZfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJUZXh0Q29kZWMuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi0gICAgY2xhc3MgVGV4dENvZGVjVVRGMTYgOiBwdWJsaWMgVGV4dENvZGVj
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRW5jb2RpbmdOYW1l
cyhFbmNvZGluZ05hbWVSZWdpc3RyYXIpOwotICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckNv
ZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIpOwotCi0gICAgICAgIFRleHRDb2RlY1VURjE2KGJvb2wg
bGl0dGxlRW5kaWFuKSA6IG1fbGl0dGxlRW5kaWFuKGxpdHRsZUVuZGlhbiksIG1faGF2ZUJ1ZmZl
cmVkQnl0ZShmYWxzZSkgeyB9Ci0KLSAgICAgICAgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwg
c2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJy
b3IpIG92ZXJyaWRlOwotICAgICAgICBDU3RyaW5nIGVuY29kZShjb25zdCBVQ2hhciosIHNpemVf
dCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcpIG92ZXJyaWRlOwotCi0gICAgcHJpdmF0ZToK
LSAgICAgICAgYm9vbCBtX2xpdHRsZUVuZGlhbjsKLSAgICAgICAgYm9vbCBtX2hhdmVCdWZmZXJl
ZEJ5dGU7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgbV9idWZmZXJlZEJ5dGU7Ci0gICAgfTsKK2Ns
YXNzIFRleHRDb2RlY1VURjE2IDogcHVibGljIFRleHRDb2RlYyB7CitwdWJsaWM6CisgICAgc3Rh
dGljIHZvaWQgcmVnaXN0ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhcik7Cisg
ICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyKTsKKworICAg
IGV4cGxpY2l0IFRleHRDb2RlY1VURjE2KGJvb2wgbGl0dGxlRW5kaWFuKQorICAgICAgICA6IG1f
bGl0dGxlRW5kaWFuKGxpdHRsZUVuZGlhbikKKyAgICB7IH0KKworcHJpdmF0ZToKKyAgICBTdHJp
bmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0
b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcikgZmluYWw7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGVu
Y29kZShTdHJpbmdWaWV3LCBVbmVuY29kYWJsZUhhbmRsaW5nKSBmaW5hbDsKKworICAgIGJvb2wg
bV9saXR0bGVFbmRpYW47CisgICAgYm9vbCBtX2hhdmVCdWZmZXJlZEJ5dGUgeyBmYWxzZSB9Owor
ICAgIHVuc2lnbmVkIGNoYXIgbV9idWZmZXJlZEJ5dGU7Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBUZXh0Q29kZWNVVEYxNl9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VzZXJEZWZpbmVkLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VzZXJEZWZpbmVkLmNwcAkocmV2
aXNpb24gMjI1MjA3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNV
c2VyRGVmaW5lZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw5ICsyNiw4IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGV4dENvZGVjVXNlckRlZmluZWQuaCIKIAotI2lu
Y2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8YXJyYXk+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1ZmZlci5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IApAQCAtMzksNzMgKzM4LDYyIEBAIHZvaWQgVGV4dENvZGVjVXNlckRlZmluZWQ6OnJlZ2lzdGVy
RW5jb2QKICAgICByZWdpc3RyYXIoIngtdXNlci1kZWZpbmVkIiwgIngtdXNlci1kZWZpbmVkIik7
CiB9CiAKLXN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VGV4dENvZGVjPiBuZXdTdHJlYW1pbmdUZXh0
RGVjb2RlclVzZXJEZWZpbmVkKGNvbnN0IFRleHRFbmNvZGluZyYsIGNvbnN0IHZvaWQqKQotewot
ICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFRleHRDb2RlY1VzZXJEZWZpbmVkPigpOwotfQot
CiB2b2lkIFRleHRDb2RlY1VzZXJEZWZpbmVkOjpyZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdp
c3RyYXIgcmVnaXN0cmFyKQogewotICAgIHJlZ2lzdHJhcigieC11c2VyLWRlZmluZWQiLCBuZXdT
dHJlYW1pbmdUZXh0RGVjb2RlclVzZXJEZWZpbmVkLCAwKTsKKyAgICByZWdpc3RyYXIoIngtdXNl
ci1kZWZpbmVkIiwgW10geworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxUZXh0Q29k
ZWNVc2VyRGVmaW5lZD4oKTsKKyAgICB9KTsKIH0KIAogU3RyaW5nIFRleHRDb2RlY1VzZXJEZWZp
bmVkOjpkZWNvZGUoY29uc3QgY2hhciogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIGJvb2wsIGJvb2ws
IGJvb2wmKQogewogICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwogICAgIHJlc3VsdC5yZXNlcnZl
Q2FwYWNpdHkobGVuZ3RoKTsKLQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpIHsKICAgICAgICAgc2lnbmVkIGNoYXIgYyA9IGJ5dGVzW2ldOwogICAgICAgICByZXN1bHQu
YXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPihjICYgMHhGN0ZGKSk7CiAgICAgfQotCiAgICAgcmV0
dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCi1zdGF0aWMgQ1N0cmluZyBlbmNvZGVDb21wbGV4
VXNlckRlZmluZWQoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFVuZW5j
b2RhYmxlSGFuZGxpbmcgaGFuZGxpbmcpCitzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZUNv
bXBsZXhVc2VyRGVmaW5lZChTdHJpbmdWaWV3IHN0cmluZywgVW5lbmNvZGFibGVIYW5kbGluZyBo
YW5kbGluZykKIHsKLSAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0KGxlbmd0aCk7Ci0gICAgY2hhciog
Ynl0ZXMgPSByZXN1bHQuZGF0YSgpOworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7CiAKLSAg
ICBzaXplX3QgcmVzdWx0TGVuZ3RoID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxl
bmd0aDsgKSB7Ci0gICAgICAgIFVDaGFyMzIgYzsKLSAgICAgICAgVTE2X05FWFQoY2hhcmFjdGVy
cywgaSwgbGVuZ3RoLCBjKTsKLSAgICAgICAgc2lnbmVkIGNoYXIgc2lnbmVkQnl0ZSA9IGM7Ci0g
ICAgICAgIGlmICgoc2lnbmVkQnl0ZSAmIDB4RjdGRikgPT0gYykKLSAgICAgICAgICAgIGJ5dGVz
W3Jlc3VsdExlbmd0aCsrXSA9IHNpZ25lZEJ5dGU7CisgICAgZm9yIChhdXRvIGNoYXJhY3RlciA6
IHN0cmluZy5jb2RlUG9pbnRzKCkpIHsKKyAgICAgICAgaW50OF90IHNpZ25lZEJ5dGUgPSBjaGFy
YWN0ZXI7CisgICAgICAgIGlmICgoc2lnbmVkQnl0ZSAmIDB4RjdGRikgPT0gY2hhcmFjdGVyKQor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzaWduZWRCeXRlKTsKICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICAvLyBObyB3YXkgdG8gZW5jb2RlIHRoaXMgY2hhcmFjdGVyIHdpdGggeC11c2Vy
LWRlZmluZWQuCiAgICAgICAgICAgICBVbmVuY29kYWJsZVJlcGxhY2VtZW50QXJyYXkgcmVwbGFj
ZW1lbnQ7Ci0gICAgICAgICAgICBpbnQgcmVwbGFjZW1lbnRMZW5ndGggPSBUZXh0Q29kZWM6Omdl
dFVuZW5jb2RhYmxlUmVwbGFjZW1lbnQoYywgaGFuZGxpbmcsIHJlcGxhY2VtZW50KTsKLSAgICAg
ICAgICAgIHJlc3VsdC5ncm93KHJlc3VsdExlbmd0aCArIHJlcGxhY2VtZW50TGVuZ3RoICsgbGVu
Z3RoIC0gaSk7Ci0gICAgICAgICAgICBieXRlcyA9IHJlc3VsdC5kYXRhKCk7Ci0gICAgICAgICAg
ICBtZW1jcHkoYnl0ZXMgKyByZXN1bHRMZW5ndGgsIHJlcGxhY2VtZW50LCByZXBsYWNlbWVudExl
bmd0aCk7Ci0gICAgICAgICAgICByZXN1bHRMZW5ndGggKz0gcmVwbGFjZW1lbnRMZW5ndGg7Cisg
ICAgICAgICAgICBpbnQgcmVwbGFjZW1lbnRMZW5ndGggPSBUZXh0Q29kZWM6OmdldFVuZW5jb2Rh
YmxlUmVwbGFjZW1lbnQoY2hhcmFjdGVyLCBoYW5kbGluZywgcmVwbGFjZW1lbnQpOworICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChyZXBsYWNlbWVudC5kYXRhKCksIHJlcGxhY2VtZW50TGVuZ3Ro
KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBDU3RyaW5nKGJ5dGVzLCByZXN1bHRM
ZW5ndGgpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUNTdHJpbmcgVGV4dENvZGVjVXNlckRl
ZmluZWQ6OmVuY29kZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVW5l
bmNvZGFibGVIYW5kbGluZyBoYW5kbGluZykKK1ZlY3Rvcjx1aW50OF90PiBUZXh0Q29kZWNVc2Vy
RGVmaW5lZDo6ZW5jb2RlKFN0cmluZ1ZpZXcgc3RyaW5nLCBVbmVuY29kYWJsZUhhbmRsaW5nIGhh
bmRsaW5nKQogewotICAgIGNoYXIqIGJ5dGVzOwotICAgIENTdHJpbmcgc3RyaW5nID0gQ1N0cmlu
Zzo6bmV3VW5pbml0aWFsaXplZChsZW5ndGgsIGJ5dGVzKTsKKyAgICB7CisgICAgICAgIFZlY3Rv
cjx1aW50OF90PiByZXN1bHQoc3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAgYXV0byogYnl0ZXMg
PSByZXN1bHQuZGF0YSgpOwogCi0gICAgLy8gQ29udmVydCB0aGUgc3RyaW5nIGEgZmFzdCB3YXkg
YW5kIHNpbXVsdGFuZW91c2x5IGRvIGFuIGVmZmljaWVudCBjaGVjayB0byBzZWUgaWYgaXQncyBh
bGwgQVNDSUkuCi0gICAgVUNoYXIgb3JlZCA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgewotICAgICAgICBVQ2hhciBjID0gY2hhcmFjdGVyc1tpXTsKLSAgICAg
ICAgYnl0ZXNbaV0gPSBjOwotICAgICAgICBvcmVkIHw9IGM7Ci0gICAgfQorICAgICAgICAvLyBD
b252ZXJ0IGFuZCBzaW11bHRhbmVvdXNseSBkbyBhIGNoZWNrIHRvIHNlZSBpZiBpdCdzIGFsbCBB
U0NJSS4KKyAgICAgICAgVUNoYXIgb3JlZCA9IDA7CisgICAgICAgIGZvciAoYXV0byBjaGFyYWN0
ZXIgOiBzdHJpbmcuY29kZVVuaXRzKCkpIHsKKyAgICAgICAgICAgICpieXRlcysrID0gY2hhcmFj
dGVyOworICAgICAgICAgICAgb3JlZCB8PSBjaGFyYWN0ZXI7CisgICAgICAgIH0KIAotICAgIGlm
ICghKG9yZWQgJiAweEZGODApKQotICAgICAgICByZXR1cm4gc3RyaW5nOworICAgICAgICBpZiAo
IShvcmVkICYgMHhGRjgwKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogCiAg
ICAgLy8gSWYgaXQgd2Fzbid0IGFsbCBBU0NJSSwgY2FsbCB0aGUgZnVuY3Rpb24gdGhhdCBoYW5k
bGVzIG1vcmUtY29tcGxleCBjYXNlcy4KLSAgICByZXR1cm4gZW5jb2RlQ29tcGxleFVzZXJEZWZp
bmVkKGNoYXJhY3RlcnMsIGxlbmd0aCwgaGFuZGxpbmcpOworICAgIHJldHVybiBlbmNvZGVDb21w
bGV4VXNlckRlZmluZWQoc3RyaW5nLCBoYW5kbGluZyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRl
ZmluZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRD
b2RlY1VzZXJEZWZpbmVkLmgJKHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxNyBBcHBsZSwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMywy
MiArMjMsMjAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgVGV4dENvZGVjVXNl
ckRlZmluZWRfaAotI2RlZmluZSBUZXh0Q29kZWNVc2VyRGVmaW5lZF9oCisjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgIlRleHRDb2RlYy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBj
bGFzcyBUZXh0Q29kZWNVc2VyRGVmaW5lZCA6IHB1YmxpYyBUZXh0Q29kZWMgewotICAgIHB1Ymxp
YzoKLSAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFt
ZVJlZ2lzdHJhcik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ29kZWNzKFRleHRDb2Rl
Y1JlZ2lzdHJhcik7Ci0KLSAgICAgICAgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90
IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpIG92
ZXJyaWRlOwotICAgICAgICBDU3RyaW5nIGVuY29kZShjb25zdCBVQ2hhciosIHNpemVfdCBsZW5n
dGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcpIG92ZXJyaWRlOwotICAgIH07CitjbGFzcyBUZXh0Q29k
ZWNVc2VyRGVmaW5lZCA6IHB1YmxpYyBUZXh0Q29kZWMgeworcHVibGljOgorICAgIHN0YXRpYyB2
b2lkIHJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIpOworICAgIHN0
YXRpYyB2b2lkIHJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7CisKK3ByaXZhdGU6
CisgICAgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVz
aCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpIGZpbmFsOworICAgIFZlY3Rvcjx1
aW50OF90PiBlbmNvZGUoU3RyaW5nVmlldywgVW5lbmNvZGFibGVIYW5kbGluZykgZmluYWw7Cit9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBUZXh0Q29kZWNVc2VyRGVm
aW5lZF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rp
bmcuY3BwCShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRFbmNvZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1
cnlha292IDxhcEBueXBvcC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBN
b2JpbGUsIEluYy4KICAqCkBAIC00OCw3ICs0OCw3IEBAIFRleHRFbmNvZGluZzo6VGV4dEVuY29k
aW5nKGNvbnN0IGNoYXIqIG4KICAgICAsIG1fYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbChiYWNr
c2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkpCiB7CiAgICAgLy8gQWxpYXNlcyBhcmUgdmFsaWQsIGJ1
dCBub3QgInJlcGxhY2VtZW50IiBpdHNlbGYuCi0gICAgaWYgKG1fbmFtZSAmJiBpc1JlcGxhY2Vt
ZW50RW5jb2RpbmcobmFtZSkpCisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KG5hbWUsICJyZXBsYWNlbWVudCIpKQogICAgICAgICBtX25hbWUgPSBudWxscHRyOwogfQogCkBA
IC01Nyw3ICs1Nyw3IEBAIFRleHRFbmNvZGluZzo6VGV4dEVuY29kaW5nKGNvbnN0IFN0cmluZyYK
ICAgICAsIG1fYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbChiYWNrc2xhc2hBc0N1cnJlbmN5U3lt
Ym9sKCkpCiB7CiAgICAgLy8gQWxpYXNlcyBhcmUgdmFsaWQsIGJ1dCBub3QgInJlcGxhY2VtZW50
IiBpdHNlbGYuCi0gICAgaWYgKG1fbmFtZSAmJiBpc1JlcGxhY2VtZW50RW5jb2RpbmcobmFtZSkp
CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUsICJyZXBsYWNlbWVu
dCIpKQogICAgICAgICBtX25hbWUgPSBudWxscHRyOwogfQogCkBAIC02OSwxMyArNjksMTIgQEAg
U3RyaW5nIFRleHRFbmNvZGluZzo6ZGVjb2RlKGNvbnN0IGNoYXIqIAogICAgIHJldHVybiBuZXdU
ZXh0Q29kZWMoKnRoaXMpLT5kZWNvZGUoZGF0YSwgbGVuZ3RoLCB0cnVlLCBzdG9wT25FcnJvciwg
c2F3RXJyb3IpOwogfQogCi1DU3RyaW5nIFRleHRFbmNvZGluZzo6ZW5jb2RlKFN0cmluZ1ZpZXcg
dGV4dCwgVW5lbmNvZGFibGVIYW5kbGluZyBoYW5kbGluZykgY29uc3QKK1ZlY3Rvcjx1aW50OF90
PiBUZXh0RW5jb2Rpbmc6OmVuY29kZShTdHJpbmdWaWV3IHRleHQsIFVuZW5jb2RhYmxlSGFuZGxp
bmcgaGFuZGxpbmcpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX25hbWUpCi0gICAgICAgIHJldHVybiBD
U3RyaW5nKCk7CisgICAgaWYgKCFtX25hbWUgfHwgdGV4dC5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiB7IH07CiAKLSAgICBpZiAodGV4dC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAiIjsK
KyAgICAvLyBGSVhNRTogQ29uc2lkZXIgYWRkaW5nIGEgZmFzdCBjYXNlIGZvciBBU0NJSS4KIAog
ICAgIC8vIEZJWE1FOiBXaGF0J3MgdGhlIHJpZ2h0IHBsYWNlIHRvIGRvIG5vcm1hbGl6YXRpb24/
CiAgICAgLy8gSXQncyBhIGxpdHRsZSBzdHJhbmdlIHRvIGRvIGl0IGluc2lkZSB0aGUgZW5jb2Rl
IGZ1bmN0aW9uLgpAQCAtODQsNyArODMsNyBAQCBDU3RyaW5nIFRleHRFbmNvZGluZzo6ZW5jb2Rl
KFN0cmluZ1ZpZXcgCiAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSB0ZXh0LnVwY29u
dmVydGVkQ2hhcmFjdGVycygpOwogCiAgICAgY29uc3QgVUNoYXIqIHNvdXJjZSA9IHVwY29udmVy
dGVkQ2hhcmFjdGVyczsKLSAgICBzaXplX3Qgc291cmNlTGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsK
KyAgICB1bnNpZ25lZCBzb3VyY2VMZW5ndGggPSB0ZXh0Lmxlbmd0aCgpOwogCiAgICAgVmVjdG9y
PFVDaGFyPiBub3JtYWxpemVkQ2hhcmFjdGVyczsKIApAQCAtMTA0LDcgKzEwMyw3IEBAIENTdHJp
bmcgVGV4dEVuY29kaW5nOjplbmNvZGUoU3RyaW5nVmlldyAKICAgICAgICAgc291cmNlTGVuZ3Ro
ID0gbm9ybWFsaXplZExlbmd0aDsKICAgICB9CiAKLSAgICByZXR1cm4gbmV3VGV4dENvZGVjKCp0
aGlzKS0+ZW5jb2RlKHNvdXJjZSwgc291cmNlTGVuZ3RoLCBoYW5kbGluZyk7CisgICAgcmV0dXJu
IG5ld1RleHRDb2RlYygqdGhpcyktPmVuY29kZShTdHJpbmdWaWV3IHsgc291cmNlLCBzb3VyY2VM
ZW5ndGggfSwgaGFuZGxpbmcpOwogfQogCiBjb25zdCBjaGFyKiBUZXh0RW5jb2Rpbmc6OmRvbU5h
bWUoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rp
bmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNv
ZGluZy5oCShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRFbmNvZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1
LDggKzI1LDggQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJUZXh0Q29kZWMuaCIKLSNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHBhbC90ZXh0L1VuZW5jb2RhYmxlSGFu
ZGxpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JU
IFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgc3RvcE9uRXJy
b3IsIGJvb2wmIHNhd0Vycm9yKSBjb25zdDsKICAgICBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIq
LCBzaXplX3QgbGVuZ3RoKSBjb25zdDsKLSAgICBDU3RyaW5nIGVuY29kZShTdHJpbmdWaWV3LCBV
bmVuY29kYWJsZUhhbmRsaW5nKSBjb25zdDsKKyAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlKFN0
cmluZ1ZpZXcsIFVuZW5jb2RhYmxlSGFuZGxpbmcpIGNvbnN0OwogCiAgICAgVUNoYXIgYmFja3Ns
YXNoQXNDdXJyZW5jeVN5bWJvbCgpIGNvbnN0OwogICAgIGJvb2wgaXNCeXRlQmFzZWRFbmNvZGlu
ZygpIGNvbnN0IHsgcmV0dXJuICFpc05vbkJ5dGVCYXNlZEVuY29kaW5nKCk7IH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0
cnkuY3BwCShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxl
LCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMCwyMyArMzAsMjEgQEAKICNpbmNsdWRlICJU
ZXh0Q29kZWNJQ1UuaCIKICNpbmNsdWRlICJUZXh0Q29kZWNMYXRpbjEuaCIKICNpbmNsdWRlICJU
ZXh0Q29kZWNSZXBsYWNlbWVudC5oIgotI2luY2x1ZGUgIlRleHRDb2RlY1VzZXJEZWZpbmVkLmgi
CiAjaW5jbHVkZSAiVGV4dENvZGVjVVRGMTYuaCIKICNpbmNsdWRlICJUZXh0Q29kZWNVVEY4Lmgi
CisjaW5jbHVkZSAiVGV4dENvZGVjVXNlckRlZmluZWQuaCIKICNpbmNsdWRlICJUZXh0RW5jb2Rp
bmcuaCIKICNpbmNsdWRlIDxtdXRleD4KICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
ICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4K
LQotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KIAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCkBA
IC05MCwxNCArODgsOCBAQCBzdHJ1Y3QgVGV4dEVuY29kaW5nTmFtZUhhc2ggewogICAgIHN0YXRp
YyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CiB9Owog
Ci1zdHJ1Y3QgVGV4dENvZGVjRmFjdG9yeSB7Ci0gICAgTmV3VGV4dENvZGVjRnVuY3Rpb24gZnVu
Y3Rpb247Ci0gICAgY29uc3Qgdm9pZCogYWRkaXRpb25hbERhdGE7Ci0gICAgVGV4dENvZGVjRmFj
dG9yeShOZXdUZXh0Q29kZWNGdW5jdGlvbiBmID0gMCwgY29uc3Qgdm9pZCogZCA9IDApIDogZnVu
Y3Rpb24oZiksIGFkZGl0aW9uYWxEYXRhKGQpIHsgfQotfTsKLQotdHlwZWRlZiBIYXNoTWFwPGNv
bnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgVGV4dEVuY29kaW5nTmFtZUhhc2g+IFRleHRFbmNvZGlu
Z05hbWVNYXA7Ci10eXBlZGVmIEhhc2hNYXA8Y29uc3QgY2hhciosIFRleHRDb2RlY0ZhY3Rvcnk+
IFRleHRDb2RlY01hcDsKK3VzaW5nIFRleHRFbmNvZGluZ05hbWVNYXAgPSBIYXNoTWFwPGNvbnN0
IGNoYXIqLCBjb25zdCBjaGFyKiwgVGV4dEVuY29kaW5nTmFtZUhhc2g+OwordXNpbmcgVGV4dENv
ZGVjTWFwID0gSGFzaE1hcDxjb25zdCBjaGFyKiwgTmV3VGV4dENvZGVjRnVuY3Rpb24+OwogCiBz
dGF0aWMgU3RhdGljTG9jayBlbmNvZGluZ1JlZ2lzdHJ5TXV0ZXg7CiAKQEAgLTEzOCwxMSArMTMw
LDExIEBAIHN0YXRpYyB2b2lkIGFkZFRvVGV4dEVuY29kaW5nTmFtZU1hcChjb24KICAgICB0ZXh0
RW5jb2RpbmdOYW1lTWFwLT5hZGQoYWxpYXMsIGF0b21pY05hbWUpOwogfQogCi1zdGF0aWMgdm9p
ZCBhZGRUb1RleHRDb2RlY01hcChjb25zdCBjaGFyKiBuYW1lLCBOZXdUZXh0Q29kZWNGdW5jdGlv
biBmdW5jdGlvbiwgY29uc3Qgdm9pZCogYWRkaXRpb25hbERhdGEpCitzdGF0aWMgdm9pZCBhZGRU
b1RleHRDb2RlY01hcChjb25zdCBjaGFyKiBuYW1lLCBOZXdUZXh0Q29kZWNGdW5jdGlvbiYmIGZ1
bmN0aW9uKQogewogICAgIGNvbnN0IGNoYXIqIGF0b21pY05hbWUgPSB0ZXh0RW5jb2RpbmdOYW1l
TWFwLT5nZXQobmFtZSk7CiAgICAgQVNTRVJUKGF0b21pY05hbWUpOwotICAgIHRleHRDb2RlY01h
cC0+YWRkKGF0b21pY05hbWUsIFRleHRDb2RlY0ZhY3RvcnkoZnVuY3Rpb24sIGFkZGl0aW9uYWxE
YXRhKSk7CisgICAgdGV4dENvZGVjTWFwLT5hZGQoYXRvbWljTmFtZSwgV1RGTW92ZShmdW5jdGlv
bikpOwogfQogCiBzdGF0aWMgdm9pZCBwcnVuZUJsYWNrbGlzdGVkQ29kZWNzKCkKQEAgLTIzNCwy
MiArMjI2LDYgQEAgYm9vbCBpc0phcGFuZXNlRW5jb2RpbmcoY29uc3QgY2hhciogY2FubwogICAg
IHJldHVybiBjYW5vbmljYWxFbmNvZGluZ05hbWUgJiYgamFwYW5lc2VFbmNvZGluZ3MgJiYgamFw
YW5lc2VFbmNvZGluZ3MtPmNvbnRhaW5zKGNhbm9uaWNhbEVuY29kaW5nTmFtZSk7CiB9CiAKLWJv
b2wgaXNSZXBsYWNlbWVudEVuY29kaW5nKGNvbnN0IGNoYXIqIGFsaWFzKQotewotICAgIGlmICgh
YWxpYXMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChzdHJsZW4oYWxpYXMpICE9
IDExKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gIXN0cmNhc2VjbXAoYWxp
YXMsICJyZXBsYWNlbWVudCIpOwotfQotCi1ib29sIGlzUmVwbGFjZW1lbnRFbmNvZGluZyhjb25z
dCBTdHJpbmcmIGFsaWFzKQotewotICAgIHJldHVybiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZShhbGlhcywgInJlcGxhY2VtZW50Iik7Ci19Ci0KIGJvb2wgc2hvdWxkU2hvd0JhY2tzbGFz
aEFzQ3VycmVuY3lTeW1ib2xJbihjb25zdCBjaGFyKiBjYW5vbmljYWxFbmNvZGluZ05hbWUpCiB7
CiAgICAgcmV0dXJuIGNhbm9uaWNhbEVuY29kaW5nTmFtZSAmJiBub25CYWNrc2xhc2hFbmNvZGlu
Z3MgJiYgbm9uQmFja3NsYXNoRW5jb2RpbmdzLT5jb250YWlucyhjYW5vbmljYWxFbmNvZGluZ05h
bWUpOwpAQCAtMjcyLDkgKzI0OCw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxUZXh0Q29kZWM+IG5ld1Rl
eHRDb2RlYygKICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayhlbmNvZGluZ1Jl
Z2lzdHJ5TXV0ZXgpOwogCiAgICAgQVNTRVJUKHRleHRDb2RlY01hcCk7Ci0gICAgVGV4dENvZGVj
RmFjdG9yeSBmYWN0b3J5ID0gdGV4dENvZGVjTWFwLT5nZXQoZW5jb2RpbmcubmFtZSgpKTsKLSAg
ICBBU1NFUlQoZmFjdG9yeS5mdW5jdGlvbik7Ci0gICAgcmV0dXJuIGZhY3RvcnkuZnVuY3Rpb24o
ZW5jb2RpbmcsIGZhY3RvcnkuYWRkaXRpb25hbERhdGEpOworICAgIGF1dG8gcmVzdWx0ID0gdGV4
dENvZGVjTWFwLT5maW5kKGVuY29kaW5nLm5hbWUoKSk7CisgICAgQVNTRVJUKHJlc3VsdCAhPSB0
ZXh0Q29kZWNNYXAtPmVuZCgpKTsKKyAgICByZXR1cm4gcmVzdWx0LT52YWx1ZSgpOwogfQogCiBj
b25zdCBjaGFyKiBhdG9taWNDYW5vbmljYWxUZXh0RW5jb2RpbmdOYW1lKGNvbnN0IGNoYXIqIG5h
bWUpCkBAIC0yOTcsMTYgKzI3MywxNCBAQCBjb25zdCBjaGFyKiBhdG9taWNDYW5vbmljYWxUZXh0
RW5jb2RpbmdOCiAgICAgcmV0dXJuIHRleHRFbmNvZGluZ05hbWVNYXAtPmdldChuYW1lKTsKIH0K
IAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1jb25zdCBjaGFyKiBhdG9taWND
YW5vbmljYWxUZXh0RW5jb2RpbmdOYW1lKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMs
IHNpemVfdCBsZW5ndGgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMg
Y29uc3QgY2hhciogYXRvbWljQ2Fub25pY2FsVGV4dEVuY29kaW5nTmFtZShjb25zdCBDaGFyYWN0
ZXJUeXBlKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQogewogICAgIGNoYXIgYnVmZmVyW21h
eEVuY29kaW5nTmFtZUxlbmd0aCArIDFdOwogICAgIHNpemVfdCBqID0gMDsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIENoYXJhY3RlclR5cGUgYyA9
IGNoYXJhY3RlcnNbaV07CiAgICAgICAgIGlmIChqID09IG1heEVuY29kaW5nTmFtZUxlbmd0aCkK
LSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBidWZmZXJbaisrXSA9IGM7CisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgYnVmZmVyW2orK10gPSBjaGFyYWN0ZXJzW2ld
OwogICAgIH0KICAgICBidWZmZXJbal0gPSAwOwogICAgIHJldHVybiBhdG9taWNDYW5vbmljYWxU
ZXh0RW5jb2RpbmdOYW1lKGJ1ZmZlcik7CkBAIC0zMTQsNyArMjg4LDcgQEAgY29uc3QgY2hhciog
YXRvbWljQ2Fub25pY2FsVGV4dEVuY29kaW5nTgogCiBjb25zdCBjaGFyKiBhdG9taWNDYW5vbmlj
YWxUZXh0RW5jb2RpbmdOYW1lKGNvbnN0IFN0cmluZyYgYWxpYXMpCiB7Ci0gICAgaWYgKCFhbGlh
cy5sZW5ndGgoKSkKKyAgICBpZiAoYWxpYXMuaXNFbXB0eSgpIHx8ICFhbGlhcy5pc0FsbEFTQ0lJ
KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKGFsaWFzLmlzOEJpdCgpKQpA
QCAtMzUzLDE5ICszMjcsNCBAQCBTdHJpbmcgZGVmYXVsdFRleHRFbmNvZGluZ05hbWVGb3JTeXN0
ZW1MCiAjZW5kaWYKIH0KIAotI2lmbmRlZiBOREVCVUcKLXZvaWQgZHVtcFRleHRFbmNvZGluZ05h
bWVNYXAoKQotewotICAgIHVuc2lnbmVkIHNpemUgPSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5zaXpl
KCk7Ci0gICAgZnByaW50ZihzdGRlcnIsICJEdW1waW5nICV1IGVudHJpZXMgaW4gV2ViQ29yZTo6
dGV4dEVuY29kaW5nTmFtZU1hcC4uLlxuIiwgc2l6ZSk7Ci0KLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8
U3RhdGljTG9jaz4gbG9jayhlbmNvZGluZ1JlZ2lzdHJ5TXV0ZXgpOwotCi0gICAgVGV4dEVuY29k
aW5nTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5iZWdp
bigpOwotICAgIFRleHRFbmNvZGluZ05hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRleHRF
bmNvZGluZ05hbWVNYXAtPmVuZCgpOwotICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiJyVzJyA9PiAnJXMnXG4iLCBpdC0+a2V5LCBpdC0+dmFsdWUp
OwotfQotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmgJKHJldmlz
aW9uIDIyNTIwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5n
UmVnaXN0cnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Cisj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOSwy
MiArMzksMTUgQEAgV0VCQ09SRV9FWFBPUlQgc3RkOjp1bmlxdWVfcHRyPFRleHRDb2RlYwogCiAv
LyBPbmx5IFRleHRFbmNvZGluZyBzaG91bGQgdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGRp
cmVjdGx5LgogY29uc3QgY2hhciogYXRvbWljQ2Fub25pY2FsVGV4dEVuY29kaW5nTmFtZShjb25z
dCBjaGFyKiBhbGlhcyk7Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWNvbnN0
IGNoYXIqIGF0b21pY0Nhbm9uaWNhbFRleHRFbmNvZGluZ05hbWUoY29uc3QgQ2hhcmFjdGVyVHlw
ZSosIHNpemVfdCk7CiBjb25zdCBjaGFyKiBhdG9taWNDYW5vbmljYWxUZXh0RW5jb2RpbmdOYW1l
KGNvbnN0IFN0cmluZyYpOwogYm9vbCBub0V4dGVuZGVkVGV4dEVuY29kaW5nTmFtZVVzZWQoKTsK
IGJvb2wgaXNKYXBhbmVzZUVuY29kaW5nKGNvbnN0IGNoYXIqIGNhbm9uaWNhbEVuY29kaW5nTmFt
ZSk7CiBib29sIHNob3VsZFNob3dCYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sSW4oY29uc3QgY2hh
ciogY2Fub25pY2FsRW5jb2RpbmdOYW1lKTsKLWJvb2wgaXNSZXBsYWNlbWVudEVuY29kaW5nKGNv
bnN0IGNoYXIqIGFsaWFzKTsKLWJvb2wgaXNSZXBsYWNlbWVudEVuY29kaW5nKGNvbnN0IFN0cmlu
ZyYgYWxpYXMpOwogCiBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgZGVmYXVsdFRleHRFbmNvZGluZ05h
bWVGb3JTeXN0ZW1MYW5ndWFnZSgpOworCiAjaWYgUExBVEZPUk0oQ09DT0EpCiBXRUJDT1JFX0VY
UE9SVCBDRlN0cmluZ0VuY29kaW5nIHdlYkRlZmF1bHRDRlN0cmluZ0VuY29kaW5nKCk7CiAjZW5k
aWYKIAotI2lmbmRlZiBOREVCVUcKLXZvaWQgZHVtcFRleHRFbmNvZGluZ05hbWVNYXAoKTsKLSNl
bmRpZgotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwv
WFNMVFVuaWNvZGVTb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWFNM
VFVuaWNvZGVTb3J0LmNwcAkocmV2aXNpb24gMjI1MjA3KQorKysgU291cmNlL1dlYkNvcmUveG1s
L1hTTFRVbmljb2RlU29ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKIAog
I2luY2x1ZGUgPGxpYnhzbHQvdGVtcGxhdGVzLmg+CiAjaW5jbHVkZSA8bGlieHNsdC94c2x0dXRp
bHMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NvbGxhdG9yLmg+CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwCShyZXZpc2lvbiAy
MjUyMDcpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNiBAQAogI2luY2x1ZGUgIlRleHRSZXNvdXJj
ZURlY29kZXIuaCIKICNpbmNsdWRlICJUcmVlRGVwdGhMaW1pdC5oIgogI2luY2x1ZGUgPHd0Zi9S
ZWYuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUv
eG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAkocmV2
aXNpb24gMjI1MjA3KQorKysgU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBh
cnNlckxpYnhtbDIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw2IEBACiAjaW5jbHVk
ZSAiWE1MTlNOYW1lcy5oIgogI2luY2x1ZGUgIlhNTERvY3VtZW50UGFyc2VyU2NvcGUuaCIKICNp
bmNsdWRlIDxsaWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4
dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VURjguaD4KIAogI2lmIEVOQUJMRShYU0xU
KQpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTctMTEtMjcgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybml6ZSBzb21lIGFzcGVjdHMg
b2YgdGV4dCBjb2RlY3MsIGVsaW1pbmF0ZSBXZWJLaXQgdXNlIG9mIHN0cmNhc2VjbXAKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDAwOQorCisgICAg
ICAgIFJldmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVCcm93c2VyRnVuY3MuY3BwOgorICAgICAgICAoV2Vi
S2l0Ojppbml0aWFsaXplUHJvdGVjdGlvblNwYWNlKTogVXNlIGVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlIGluc3RlYWQKKyAgICAgICAgb2Ygc3RyY2FzZWNtcC4KKwogMjAxNy0xMS0yNyAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEFTU0VSVElPTiBGQUlM
RUQ6IGFkZFJlc3VsdC5pc05ld0VudHJ5IFdlYkNvcmU6OlNXU2VydmVyUmVnaXN0cmF0aW9uOjph
ZGRDbGllbnRVc2luZ1JlZ2lzdHJhdGlvbihXZWJDb3JlOjpTZXJ2aWNlV29ya2VyQ2xpZW50SWRl
bnRpZmllciBjb25zdCYpICsgMTQxCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1
Z2lucy9OZXRzY2FwZS9OZXRzY2FwZUJyb3dzZXJGdW5jcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVCcm93c2VyRnVu
Y3MuY3BwCShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1
Z2lucy9OZXRzY2FwZS9OZXRzY2FwZUJyb3dzZXJGdW5jcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg4MCw5ICs4ODAsOSBAQCBzdGF0aWMgTlBFcnJvciBOUE5fU2V0VmFsdWVGb3JVUkwoTlBQIG5w
CiBzdGF0aWMgYm9vbCBpbml0aWFsaXplUHJvdGVjdGlvblNwYWNlKGNvbnN0IGNoYXIqIHByb3Rv
Y29sLCBjb25zdCBjaGFyKiBob3N0LCBpbnQgcG9ydCwgY29uc3QgY2hhciogc2NoZW1lLCBjb25z
dCBjaGFyKiByZWFsbSwgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UpCiB7CiAgICAg
UHJvdGVjdGlvblNwYWNlU2VydmVyVHlwZSBzZXJ2ZXJUeXBlOwotICAgIGlmICghc3RyY2FzZWNt
cChwcm90b2NvbCwgImh0dHAiKSkKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UocHJvdG9jb2wsICJodHRwIikpCiAgICAgICAgIHNlcnZlclR5cGUgPSBQcm90ZWN0aW9uU3Bh
Y2VTZXJ2ZXJIVFRQOwotICAgIGVsc2UgaWYgKCFzdHJjYXNlY21wKHByb3RvY29sLCAiaHR0cHMi
KSkKKyAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwcm90b2NvbCwg
Imh0dHBzIikpCiAgICAgICAgIHNlcnZlclR5cGUgPSBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJIVFRQ
UzsKICAgICBlbHNlIHsKICAgICAgICAgLy8gV2Ugb25seSBjYXJlIGFib3V0IGh0dHAgYW5kIGh0
dHBzLgpAQCAtODkxLDkgKzg5MSw5IEBAIHN0YXRpYyBib29sIGluaXRpYWxpemVQcm90ZWN0aW9u
U3BhY2UoY28KIAogICAgIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lIGF1dGhl
bnRpY2F0aW9uU2NoZW1lID0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVEZWZh
dWx0OwogICAgIGlmIChzZXJ2ZXJUeXBlID09IFByb3RlY3Rpb25TcGFjZVNlcnZlckhUVFApIHsK
LSAgICAgICAgaWYgKCFzdHJjYXNlY21wKHNjaGVtZSwgImJhc2ljIikpCisgICAgICAgIGlmIChl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzY2hlbWUsICJiYXNpYyIpKQogICAgICAgICAg
ICAgYXV0aGVudGljYXRpb25TY2hlbWUgPSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNj
aGVtZUhUVFBCYXNpYzsKLSAgICAgICAgZWxzZSBpZiAoIXN0cmNtcChzY2hlbWUsICJkaWdlc3Qi
KSkKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc2NoZW1l
LCAiZGlnZXN0IikpCiAgICAgICAgICAgICBhdXRoZW50aWNhdGlvblNjaGVtZSA9IFByb3RlY3Rp
b25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRUUERpZ2VzdDsKICAgICB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisy
MDE3LTExLTI3ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNb2Rl
cm5pemUgc29tZSBhc3BlY3RzIG9mIHRleHQgY29kZWNzLCBlbGltaW5hdGUgV2ViS2l0IHVzZSBv
ZiBzdHJjYXNlY21wCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xODAwMDkKKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisg
ICAgICAgICogSGlzdG9yeS9IaXN0b3J5UHJvcGVydHlMaXN0Lm1tOiBSZW1vdmVkIGluY2x1ZGUg
b2YgU3RyaW5nRXh0cmFzLmguCisKKyAgICAgICAgKiBQbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBs
dWdpblZpZXcubW06CisgICAgICAgIChXZWJLaXQ6OmdldEF1dGhlbnRpY2F0aW9uSW5mbyk6IFVz
ZSBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSBpbnN0ZWFkCisgICAgICAgIG9mIHN0cmNh
c2VjbXAuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tOgorICAgICAgICAo
Y29udGFpbnMpOiBEaXR0by4gQWxzbyBtYWRlIHRoaXMgYSB0ZW1wbGF0ZSBzbyBpdCdzIGVhc2ll
ciB0byBjYWxsIG9uIGFuIGFycmF5LgorICAgICAgICAoY2FjaGVNb2RlbEZvck1haW5CdW5kbGUp
OiBUYWtlIGFkdmFudGFnZSBvZiB0aGUgYWJvdmUgdG8gbWFrZSBpdCBjbGVhbmVyLgorCiAyMDE3
LTExLTI3ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAg
IE9uZSB0b28gbWFueSB6ZXJvZXMgaW4gbWFjT1MgdmVyc2lvbiBudW1iZXIgaW4gRmVhdHVyZURl
ZmluZXMKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3RvcnkvSGlzdG9yeVByb3Bl
cnR5TGlzdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5
L0hpc3RvcnlQcm9wZXJ0eUxpc3QubW0JKHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0hpc3RvcnkvSGlzdG9yeVByb3BlcnR5TGlzdC5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjcsNyArMjcsNiBAQAogCiAjaW1wb3J0ICJXZWJIaXN0b3J5SXRlbUludGVybmFsLmgi
CiAjaW1wb3J0IDxXZWJDb3JlL0hpc3RvcnlJdGVtLmg+Ci0jaW1wb3J0IDx3dGYvU3RyaW5nRXh0
cmFzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVn
aW5WaWV3Lm1tCShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9Q
bHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTg1
NCwxMSArODU0LDkgQEAgLSAoQk9PTClnZXRGb3JtVmFsdWU6KE5TU3RyaW5nICoqKXZhbHVlCiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCi1ib29sIGdldEF1dGhlbnRpY2F0aW9uSW5mbyhjb25zdCBj
aGFyKiBwcm90b2NvbFN0ciwgY29uc3QgY2hhciogaG9zdFN0ciwgaW50MzJfdCBwb3J0LCBjb25z
dCBjaGFyKiBzY2hlbWVTdHIsIGNvbnN0IGNoYXIqIHJlYWxtU3RyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ1N0cmluZyYgdXNlcm5hbWUsIENTdHJpbmcmIHBhc3N3b3JkKQorYm9vbCBn
ZXRBdXRoZW50aWNhdGlvbkluZm8oY29uc3QgY2hhciogcHJvdG9jb2xTdHIsIGNvbnN0IGNoYXIq
IGhvc3RTdHIsIGludDMyX3QgcG9ydCwgY29uc3QgY2hhciogc2NoZW1lU3RyLCBjb25zdCBjaGFy
KiByZWFsbVN0ciwgQ1N0cmluZyYgdXNlcm5hbWUsIENTdHJpbmcmIHBhc3N3b3JkKQogewotICAg
IGlmIChzdHJjYXNlY21wKHByb3RvY29sU3RyLCAiaHR0cCIpICE9IDAgJiYgCi0gICAgICAgIHN0
cmNhc2VjbXAocHJvdG9jb2xTdHIsICJodHRwcyIpICE9IDApCisgICAgaWYgKCFlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShwcm90b2NvbFN0ciwgImh0dHAiKSAmJiAhZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UocHJvdG9jb2xTdHIsICJodHRwcyIpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBOU1N0cmluZyAqaG9zdCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0
cmluZzpob3N0U3RyXTsKQEAgLTg3NCwxMCArODcyLDEwIEBAICAgICBpZiAoIXByb3RvY29sKQog
ICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKICAgICAKICAgICBOU1N0cmluZyAq
YXV0aGVudGljYXRpb25NZXRob2QgPSBOU1VSTEF1dGhlbnRpY2F0aW9uTWV0aG9kRGVmYXVsdDsK
LSAgICBpZiAoIXN0cmNhc2VjbXAocHJvdG9jb2xTdHIsICJodHRwIikpIHsKLSAgICAgICAgaWYg
KCFzdHJjYXNlY21wKHNjaGVtZVN0ciwgImJhc2ljIikpCisgICAgaWYgKGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKHByb3RvY29sU3RyLCAiaHR0cCIpKSB7CisgICAgICAgIGlmIChlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzY2hlbWVTdHIsICJiYXNpYyIpKQogICAgICAgICAg
ICAgYXV0aGVudGljYXRpb25NZXRob2QgPSBOU1VSTEF1dGhlbnRpY2F0aW9uTWV0aG9kSFRUUEJh
c2ljOwotICAgICAgICBlbHNlIGlmICghc3RyY2FzZWNtcChzY2hlbWVTdHIsICJkaWdlc3QiKSkK
KyAgICAgICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc2NoZW1lU3Ry
LCAiZGlnZXN0IikpCiAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbk1ldGhvZCA9IE5TVVJMQXV0
aGVudGljYXRpb25NZXRob2RIVFRQRGlnZXN0OwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQkocmV2aXNp
b24gMjI1MjA3KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJl
bmNlcy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzYsMTQgKzc2LDE0IEBAIHN0YXRpYyBOU011dGFi
bGVEaWN0aW9uYXJ5ICp3ZWJQcmVmZXJlbmMKIAogc3RhdGljIHVuc2lnbmVkIHdlYlByZWZlcmVu
Y2VzSW5zdGFuY2VDb3VudFdpdGhQcml2YXRlQnJvd3NpbmdFbmFibGVkOwogCi1zdGF0aWMgYm9v
bCBjb250YWlucyhjb25zdCBjaGFyKiBjb25zdCBhcnJheVtdLCBpbnQgY291bnQsIGNvbnN0IGNo
YXIqIGl0ZW0pCit0ZW1wbGF0ZTx1bnNpZ25lZCBzaXplPiBzdGF0aWMgYm9vbCBjb250YWlucyhj
b25zdCBjaGFyKiBjb25zdCAoJmFycmF5KVtzaXplXSwgY29uc3QgY2hhciogaXRlbSkKIHsKICAg
ICBpZiAoIWl0ZW0pCiAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgaWYgKCFzdHJjYXNlY21wKGFycmF5W2ldLCBpdGVt
KSkKKyAgICBmb3IgKGF1dG8qIHN0cmluZyA6IGFycmF5KSB7CisgICAgICAgIGlmIChlcXVhbEln
bm9yaW5nQVNDSUlDYXNlKHN0cmluZywgaXRlbSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xNDAsMTEgKzE0MCwxMSBAQCBzdGF0
aWMgV2ViQ2FjaGVNb2RlbCBjYWNoZU1vZGVsRm9yTWFpbkJ1CiAgICAgICAgIH07CiAKICAgICAg
ICAgY29uc3QgY2hhciogYnVuZGxlSUQgPSBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJ
ZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsKLSAgICAgICAgaWYgKGNvbnRhaW5zKGRvY3VtZW50Vmll
d2VySURzLCBzaXplb2YoZG9jdW1lbnRWaWV3ZXJJRHMpIC8gc2l6ZW9mKGRvY3VtZW50Vmlld2Vy
SURzWzBdKSwgYnVuZGxlSUQpKQorICAgICAgICBpZiAoY29udGFpbnMoZG9jdW1lbnRWaWV3ZXJJ
RHMsIGJ1bmRsZUlEKSkKICAgICAgICAgICAgIHJldHVybiBXZWJDYWNoZU1vZGVsRG9jdW1lbnRW
aWV3ZXI7Ci0gICAgICAgIGlmIChjb250YWlucyhkb2N1bWVudEJyb3dzZXJJRHMsIHNpemVvZihk
b2N1bWVudEJyb3dzZXJJRHMpIC8gc2l6ZW9mKGRvY3VtZW50QnJvd3NlcklEc1swXSksIGJ1bmRs
ZUlEKSkKKyAgICAgICAgaWYgKGNvbnRhaW5zKGRvY3VtZW50QnJvd3NlcklEcywgYnVuZGxlSUQp
KQogICAgICAgICAgICAgcmV0dXJuIFdlYkNhY2hlTW9kZWxEb2N1bWVudEJyb3dzZXI7Ci0gICAg
ICAgIGlmIChjb250YWlucyhwcmltYXJ5V2ViQnJvd3NlcklEcywgc2l6ZW9mKHByaW1hcnlXZWJC
cm93c2VySURzKSAvIHNpemVvZihwcmltYXJ5V2ViQnJvd3NlcklEc1swXSksIGJ1bmRsZUlEKSkK
KyAgICAgICAgaWYgKGNvbnRhaW5zKHByaW1hcnlXZWJCcm93c2VySURzLCBidW5kbGVJRCkpCiAg
ICAgICAgICAgICByZXR1cm4gV2ViQ2FjaGVNb2RlbFByaW1hcnlXZWJCcm93c2VyOwogCiAgICAg
ICAgIGJvb2wgaXNMaW5rZWRBZ2FpbnN0V2ViS2l0ID0gV2ViS2l0TGlua2VkT25PckFmdGVyKDAp
OwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwko
cmV2aXNpb24gMjI1MjA3KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTMgQEAKKzIwMTctMTEtMjcgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgor
CisgICAgICAgIE1vZGVybml6ZSBzb21lIGFzcGVjdHMgb2YgdGV4dCBjb2RlY3MsIGVsaW1pbmF0
ZSBXZWJLaXQgdXNlIG9mIHN0cmNhc2VjbXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE4MDAwOQorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hy
aXN0ZW5zZW4uCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0
Q0cuY3BwOiBSZW1vdmVkIGluY2x1ZGUgb2YgU3RyaW5nRXh0cmFzLmguCisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcDogRGl0dG8uCisKIDIwMTctMTEt
MjcgIEFha2FzaCBKYWluICA8YWFrYXNoX2phaW5AYXBwbGUuY29tPgogCiAgICAgICAgIERvIG5v
dCBydW4gd2Via2l0cHkgdGVzdHMgb24gbXVsdGlwbGUgRVdTZXMKSW5kZXg6IFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3VwcG9ydENHLmNwcAkocmV2aXNpb24gMjI1MjA3
KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3VwcG9ydENHLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNp
bmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAKICNpZiBQTEFURk9STShXSU4pCiAjaW5jbHVk
ZSAiTUQ1LmgiCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVGV4dENv
ZGVjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
VGV4dENvZGVjLmNwcAkocmV2aXNpb24gMjI1MjA3KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL1RleHRDb2RlYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcg
QEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0Q29kZWMu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRFbmNvZGluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
VGV4dEVuY29kaW5nUmVnaXN0cnkuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2cvVGVzdEludm9jYXRpb25D
Ry5jcHAJKHJldmlzaW9uIDIyNTIwNykKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2cvVGVz
dEludm9jYXRpb25DRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNs
dWRlIDxXZWJLaXQvV0tJbWFnZUNHLmg+CiAjaW5jbHVkZSA8d3RmL01ENS5oPgogI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAKICNpZiBQ
TEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8TGF1bmNoU2VydmljZXMv
VVRDb3JlVHlwZXMuaD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327732</attachid>
            <date>2017-11-27 23:19:29 -0800</date>
            <delta_ts>2017-12-02 11:57:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-180009-20171127231928.patch</filename>
            <type>text/plain</type>
            <size>162918</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI1MjA3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBA
CisyMDE3LTExLTI3ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBN
b2Rlcm5pemUgc29tZSBhc3BlY3RzIG9mIHRleHQgY29kZWNzLCBlbGltaW5hdGUgV2ViS2l0IHVz
ZSBvZiBzdHJjYXNlY21wCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xODAwMDkKKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVuc2VuLgor
CisgICAgICAgICogYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmNwcDogUmVtb3ZlZCBpbmNsdWRlIG9m
IFN0cmluZ0V4dHJhcy5oLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6IERpdHRv
LgorICAgICAgICAqIGJ5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwOiBEaXR0by4KKyAgICAg
ICAgKiBydW50aW1lL0NvbmZpZ0ZpbGUuY3BwOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1lL0Rh
dGVQcm90b3R5cGUuY3BwOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nVHlwZS5j
cHA6IERpdHRvLgorICAgICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1ZS5jcHA6IERpdHRvLgorICAg
ICAgICAqIHJ1bnRpbWUvSlNEYXRlTWF0aC5jcHA6IERpdHRvLgorICAgICAgICAqIHJ1bnRpbWUv
SlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1lL09w
dGlvbnMuY3BwOiBEaXR0by4KKyAgICAgICAgKEpTQzo6cGFyc2UpOiBVc2UgZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UgaW5zdGVhZCBvZiBzdHJjYXNlY21wLgorCiAyMDE3LTExLTI3ICBT
YWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIFNwcmVhZCBjYW4gZXNj
YXBlIHdoZW4gQ3JlYXRlUmVzdCBkb2VzIG5vdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0FycmF5UHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5jcHAJKHJldmlzaW9uIDIyNTIwNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KLSNpbmNsdWRlIDx3
dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw2IEBA
CiAjaW5jbHVkZSA8d3RmL0JhZ1RvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50
ZXIuaD4KICNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5n
RXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvVW5pcXVlZFN0cmluZ0ltcGwuaD4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAkocmV2aXNpb24gMjI1
MjA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiRXhlY3V0YWJs
ZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJWTUlubGlu
ZXMuaCIKLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBKU0Mgewog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25maWdGaWxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25maWdGaWxlLmNwcAko
cmV2aXNpb24gMjI1MjA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uZmln
RmlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxzdHJp
bmcuaD4KICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9n
Lmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KIAogI2lmIEhBVkUoUkVHRVhfSCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMjUyMDcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNiBAQAogI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogCiAjaWYgSEFWRShMQU5HSU5GT19IKQogI2luY2x1ZGUg
PGxhbmdpbmZvLmg+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGlu
Z1R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
ZGV4aW5nVHlwZS5jcHAJKHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luZGV4aW5nVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDYg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKIAotI2lu
Y2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KLQogbmFtZXNwYWNlIEpTQyB7CiAKIEluZGV4aW5n
VHlwZSBsZWFzdFVwcGVyQm91bmRPZkluZGV4aW5nVHlwZXMoSW5kZXhpbmdUeXBlIGEsIEluZGV4
aW5nVHlwZSBiKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNW
YWx1ZS5jcHAJKHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ0pTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw2IEBACiAjaW5j
bHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJOdW1iZXJPYmplY3QuaCIKICNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KIAog
bmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RGF0ZU1hdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRGF0ZU1hdGguY3BwCShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0RhdGVNYXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNiBA
QAogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdF
eHRyYXMuaD4KIAogI2lmIEhBVkUoRVJSTk9fSCkKICNpbmNsdWRlIDxlcnJuby5oPgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMjI1MjA3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Myw3ICs1Myw2IEBACiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3
dGYvSGV4TnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3
dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL2R0b2EuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVVRGOC5oPgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDIy
NTIwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNp
bmNsdWRlIDx3dGYvTnVtYmVyT2ZDb3Jlcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90aHJlYWRzL1NpZ25hbHMuaD4KIApAQCAtNzEs
MTEgKzcwLDExIEBAIHZvaWQgT3B0aW9uczo6ZW5hYmxlUmVzdHJpY3RlZE9wdGlvbnMoYm8KICAg
ICAKIHN0YXRpYyBib29sIHBhcnNlKGNvbnN0IGNoYXIqIHN0cmluZywgYm9vbCYgdmFsdWUpCiB7
Ci0gICAgaWYgKCFzdHJjYXNlY21wKHN0cmluZywgInRydWUiKSB8fCAhc3RyY2FzZWNtcChzdHJp
bmcsICJ5ZXMiKSB8fCAhc3RyY21wKHN0cmluZywgIjEiKSkgeworICAgIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcsICJ0cnVlIikgfHwgZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2Uoc3RyaW5nLCAieWVzIikgfHwgIXN0cmNtcChzdHJpbmcsICIxIikpIHsKICAg
ICAgICAgdmFsdWUgPSB0cnVlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgaWYg
KCFzdHJjYXNlY21wKHN0cmluZywgImZhbHNlIikgfHwgIXN0cmNhc2VjbXAoc3RyaW5nLCAibm8i
KSB8fCAhc3RyY21wKHN0cmluZywgIjAiKSkgeworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShzdHJpbmcsICJmYWxzZSIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKHN0cmluZywgIm5vIikgfHwgIXN0cmNtcChzdHJpbmcsICIwIikpIHsKICAgICAgICAgdmFs
dWUgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTI3LDE3ICsxMjYs
MTcgQEAgc3RhdGljIGJvb2wgcGFyc2UoY29uc3QgY2hhciogc3RyaW5nLCBjbwogCiBzdGF0aWMg
Ym9vbCBwYXJzZShjb25zdCBjaGFyKiBzdHJpbmcsIEdDTG9nZ2luZzo6TGV2ZWwmIHZhbHVlKQog
ewotICAgIGlmICghc3RyY2FzZWNtcChzdHJpbmcsICJub25lIikgfHwgIXN0cmNhc2VjbXAoc3Ry
aW5nLCAibm8iKSB8fCAhc3RyY2FzZWNtcChzdHJpbmcsICJmYWxzZSIpIHx8ICFzdHJjbXAoc3Ry
aW5nLCAiMCIpKSB7CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmlu
ZywgIm5vbmUiKSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcsICJubyIp
IHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmluZywgImZhbHNlIikgfHwgIXN0
cmNtcChzdHJpbmcsICIwIikpIHsKICAgICAgICAgdmFsdWUgPSBHQ0xvZ2dpbmc6Ok5vbmU7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlmICghc3RyY2FzZWNtcChzdHJpbmcs
ICJiYXNpYyIpIHx8ICFzdHJjYXNlY21wKHN0cmluZywgInllcyIpIHx8ICFzdHJjYXNlY21wKHN0
cmluZywgInRydWUiKSB8fCAhc3RyY21wKHN0cmluZywgIjEiKSkgeworICAgIGlmIChlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcsICJiYXNpYyIpIHx8IGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKHN0cmluZywgInllcyIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKHN0cmluZywgInRydWUiKSB8fCAhc3RyY21wKHN0cmluZywgIjEiKSkgewogICAgICAg
ICB2YWx1ZSA9IEdDTG9nZ2luZzo6QmFzaWM7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAotICAgIGlmICghc3RyY2FzZWNtcChzdHJpbmcsICJ2ZXJib3NlIikgfHwgIXN0cmNtcChzdHJp
bmcsICIyIikpIHsKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5n
LCAidmVyYm9zZSIpIHx8ICFzdHJjbXAoc3RyaW5nLCAiMiIpKSB7CiAgICAgICAgIHZhbHVlID0g
R0NMb2dnaW5nOjpWZXJib3NlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBT
b3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwko
cmV2aXNpb24gMjI1MjA3KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwzOSBAQAorMjAxNy0xMS0yNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5j
b20+CisKKyAgICAgICAgTW9kZXJuaXplIHNvbWUgYXNwZWN0cyBvZiB0ZXh0IGNvZGVjcywgZWxp
bWluYXRlIFdlYktpdCB1c2Ugb2Ygc3RyY2FzZWNtcAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMDA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxl
eCBDaHJpc3RlbnNlbi4KKworICAgICAgICAqIHd0Zi9Bc3NlcnRpb25zLmNwcDogUmVtb3ZlZCBp
bmNsdWRlIG9mIFN0cmluZ0V4dHJhcy5oLgorICAgICAgICAoV1RGTG9nQ2hhbm5lbEJ5TmFtZSk6
IFVzZSBlcXVhbElnbm9yaW5nQVNDSUlDYXNlIGluc3RlYWQgb2Ygc3RyY2FzZWNtcC4KKyAgICAg
ICAgKiB3dGYvRGF0ZU1hdGguY3BwOiBSZW1vdmVkIGluY2x1ZGUgb2YgU3RyaW5nRXh0cmFzLmgu
CisgICAgICAgICogd3RmL01ENS5jcHA6IERpdHRvLiBBbHNvIHJlbW92ZWQgaW5jbHVkZSBvZiBD
U3RyaW5nLmguCisgICAgICAgICogd3RmL1NIQTEuY3BwOiBEaXR0by4KKworICAgICAgICAqIHd0
Zi9TdHJpbmdFeHRyYXMuaDoKKyAgICAgICAgKHN0cm5jYXNlY21wKTogRGVsZXRlZC4KKyAgICAg
ICAgKHN0cmNhc2VjbXApOiBEZWxldGVkLgorCisgICAgICAgICogd3RmL1N0cmluZ1ByaW50U3Ry
ZWFtLmNwcDogUmVtb3ZlZCBpbmNsdWRlIG9mIFN0cmluZ0V4dHJhcy5oLgorICAgICAgICAqIHd0
Zi90ZXh0L0Jhc2U2NC5jcHA6IERpdHRvLgorCisgICAgICAgICogd3RmL3RleHQvTGluZUVuZGlu
Zy5jcHA6CisgICAgICAgIChXVEY6Om5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9MRik6IFJlcGxhY2Vk
IG9sZCBtb3JlIGdlbmVyYWwgcHVycG9zZSBmdW5jdGlvbiB3aXRoCisgICAgICAgIHRoaXMuIENo
YW5nZWQgYXJndW1lbnQgdHlwZSB0byB2ZWN0b3IgYW5kIHVzZWQgYW4gcnZhbHVlIHJlZmVyZW5j
ZSBhbmQgcmV0dXJuIHZhbHVlLgorICAgICAgICBBbHNvIGZpeGVkIHNvbWUgc21hbGwgbG9naWMg
ZXJyb3JzLgorICAgICAgICAoV1RGOjpub3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JMRik6IERpdHRv
LgorICAgICAgICAoV1RGOjpub3JtYWxpemVMaW5lRW5kaW5nc1RvTmF0aXZlKTogVXBkYXRlZCBm
b3IgYWJvdmUgY2hhbmdlcy4KKyAgICAgICAgKiB3dGYvdGV4dC9MaW5lRW5kaW5nLmg6IFVwZGF0
ZWQgZm9yIGFib3ZlIGNoYW5nZXMuCisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdDb21tb24u
aDoKKyAgICAgICAgKFdURjo6ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSk6IEFkZGVkIG92ZXJsb2Fk
IGZvciBjb25zdCBjaGFyKi4KKyAgICAgICAgKFdURjo6ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UpOiBEaXR0by4KKworICAgICAgICAqIHd0Zi90ZXh0L1RleHRTdHJlYW0uY3BwOiBSZW1v
dmVkIGluY2x1ZGUgb2YgU3RyaW5nRXh0cmFzLmguCisgICAgICAgICogd3RmL3RleHQvV1RGU3Ry
aW5nLmNwcDogRGl0dG8uCisgICAgICAgICogd3RmL3VuaWNvZGUvaWN1L0NvbGxhdG9ySUNVLmNw
cDogRGl0dG8uCisKIDIwMTctMTEtMjcgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
IAogICAgICAgICBNb3ZlIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KCkgZnJvbSBTb2NrZXRTdHJl
YW1IYW5kbGVJbXBsQ0ZOZXQuY3BwIHRvIE1haW5UaHJlYWQuaApJbmRleDogU291cmNlL1dURi93
dGYvQXNzZXJ0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXNzZXJ0aW9u
cy5jcHAJKHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw2IEBACiAjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9TdGFja1RyYWNlLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNTIwLDcgKzUxOSw3IEBAIFdURkxvZ0NoYW5u
ZWwqIFdURkxvZ0NoYW5uZWxCeU5hbWUoV1RGTG8KIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgV1RGTG9nQ2hhbm5lbCogY2hhbm5lbCA9IGNoYW5u
ZWxzW2ldOwotICAgICAgICBpZiAoIXN0cmNhc2VjbXAobmFtZSwgY2hhbm5lbC0+bmFtZSkpCisg
ICAgICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIGNoYW5uZWwtPm5hbWUpKQog
ICAgICAgICAgICAgcmV0dXJuIGNoYW5uZWw7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9EYXRlTWF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRGF0ZU1hdGguY3Bw
CShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3VyY2UvV1RGL3d0Zi9EYXRlTWF0aC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc3LDcgKzc3LDYgQEAKICNpbmNsdWRlICJDdXJyZW50VGltZS5oIgogI2lu
Y2x1ZGUgIk1hdGhFeHRyYXMuaCIKICNpbmNsdWRlICJTdGRMaWJFeHRyYXMuaCIKLSNpbmNsdWRl
ICJTdHJpbmdFeHRyYXMuaCIKIAogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxsaW1p
dHMuaD4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01ENS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvTUQ1LmNwcAkocmV2aXNpb24gMjI1MjA3KQorKysgU291cmNlL1dURi93dGYvTUQ1
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTAgKzUxLDYgQEAKICNpbmNsdWRlICJNRDUuaCIK
IAogI2luY2x1ZGUgIkFzc2VydGlvbnMuaCIKLSNpZm5kZWYgTkRFQlVHCi0jaW5jbHVkZSAiU3Ry
aW5nRXh0cmFzLmgiCi0jaW5jbHVkZSAidGV4dC9DU3RyaW5nLmgiCi0jZW5kaWYKICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL1dU
Ri93dGYvU0hBMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU0hBMS5jcHAJKHJl
dmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XVEYvd3RmL1NIQTEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw4ICszMyw2IEBACiAjaW5jbHVkZSAiU0hBMS5oIgogCiAjaW5jbHVkZSAiQXNzZXJ0
aW9ucy5oIgotCi0jaW5jbHVkZSAiU3RyaW5nRXh0cmFzLmgiCiAjaW5jbHVkZSAidGV4dC9DU3Ry
aW5nLmgiCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL1dURi93dGYvU3RyaW5nRXh0
cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RyaW5nRXh0cmFzLmgJKHJldmlz
aW9uIDIyNTIwNykKKysrIFNvdXJjZS9XVEYvd3RmL1N0cmluZ0V4dHJhcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgRWxl
Y3Ryb25pYyBBcnRzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CkBAIC0yNCwzMyArMjQsMTAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgV1RG
X1N0cmluZ0V4dHJhc19oCi0jZGVmaW5lIFdURl9TdHJpbmdFeHRyYXNfaAorI3ByYWdtYSBvbmNl
CiAKLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0
cmluZy5oPgogCi0jaWYgSEFWRShTVFJJTkdTX0gpIAotI2luY2x1ZGUgPHN0cmluZ3MuaD4gCi0j
ZW5kaWYgCi0KLSNpZiBDT01QSUxFUihNU1ZDKQotCi0vLyBGSVhNRTogV2Ugc2hvdWxkIHN0b3Ag
dXNpbmcgdGhlc2UgZW50aXJlbHkgYW5kIHVzZSBzdWl0YWJsZSB2ZXJzaW9ucyBvZiBlcXVhbEln
bm9yaW5nQVNDSUlDYXNlIGluc3RlYWQuCi0KLWlubGluZSBpbnQgc3RybmNhc2VjbXAoY29uc3Qg
Y2hhciogczEsIGNvbnN0IGNoYXIqIHMyLCBzaXplX3QgbGVuKQotewotICAgIHJldHVybiBfc3Ry
bmljbXAoczEsIHMyLCBsZW4pOwotfQotCi1pbmxpbmUgaW50IHN0cmNhc2VjbXAoY29uc3QgY2hh
ciogczEsIGNvbnN0IGNoYXIqIHMyKQotewotICAgIHJldHVybiBfc3RyaWNtcChzMSwgczIpOwot
fQotCi0jZW5kaWYKLQogI2lmICFIQVZFKFNUUk5TVFIpCiAKIGlubGluZSBjaGFyKiBzdHJuc3Ry
KGNvbnN0IGNoYXIqIGJ1ZmZlciwgY29uc3QgY2hhciogdGFyZ2V0LCBzaXplX3QgYnVmZmVyTGVu
Z3RoKQpAQCAtNjYsNSArNDMsMyBAQCBpbmxpbmUgY2hhciogc3RybnN0cihjb25zdCBjaGFyKiBi
dWZmZXIsCiB9CiAKICNlbmRpZgotCi0jZW5kaWYgLy8gV1RGX1N0cmluZ0V4dHJhc19oCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9TdHJpbmdQcmludFN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvU3RyaW5nUHJpbnRTdHJlYW0uY3BwCShyZXZpc2lvbiAyMjUyMDcpCisrKyBT
b3VyY2UvV1RGL3d0Zi9TdHJpbmdQcmludFN0cmVhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDcgKzI5LDYgQEAKICNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2lu
Y2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgog
CiBuYW1lc3BhY2UgV1RGIHsKIApJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmNwcAkocmV2aXNpb24g
MjI1MjA3KQorKysgU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSAiQmFzZTY0LmgiCiAKICNpbmNsdWRlIDxsaW1p
dHMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL1dURi93dGYvdGV4
dC9MaW5lRW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L0xpbmVF
bmRpbmcuY3BwCShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0xpbmVF
bmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNSwgMjAwNiwgMjAwOCwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMyLDExNCArMzIsOTMgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJMaW5lRW5kaW5nLmgiCiAKLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCi1uYW1lc3BhY2UgewotCi1jbGFzcyBPdXRwdXRCdWZmZXIgewotcHVibGlj
OgotICAgIHZpcnR1YWwgdWludDhfdCogYWxsb2NhdGUoc2l6ZV90KSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGNvcHkoY29uc3QgQ1N0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIH5PdXRwdXRCdWZm
ZXIoKSB7IH0KLX07Ci0KLWNsYXNzIENTdHJpbmdCdWZmZXIgOiBwdWJsaWMgT3V0cHV0QnVmZmVy
IHsKLXB1YmxpYzoKLSAgICBDU3RyaW5nQnVmZmVyKENTdHJpbmcmIGJ1ZmZlcikKLSAgICAgICAg
OiBtX2J1ZmZlcihidWZmZXIpCi0gICAgewotICAgIH0KLSAgICB2aXJ0dWFsIH5DU3RyaW5nQnVm
ZmVyKCkgeyB9Ci0KLSAgICB1aW50OF90KiBhbGxvY2F0ZShzaXplX3Qgc2l6ZSkgb3ZlcnJpZGUK
LSAgICB7Ci0gICAgICAgIGNoYXIqIHB0cjsKLSAgICAgICAgbV9idWZmZXIgPSBDU3RyaW5nOjpu
ZXdVbmluaXRpYWxpemVkKHNpemUsIHB0cik7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PHVpbnQ4X3QqPihwdHIpOwotICAgIH0KLQotICAgIHZvaWQgY29weShjb25zdCBDU3RyaW5n
JiBzb3VyY2UpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBtX2J1ZmZlciA9IHNvdXJjZTsKLSAg
ICB9Ci0KLSAgICBjb25zdCBDU3RyaW5nJiBidWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZl
cjsgfQorbmFtZXNwYWNlIFdURiB7CiAKLXByaXZhdGU6Ci0gICAgQ1N0cmluZyBtX2J1ZmZlcjsK
LX07CisvLyBGSVhNRTogSG93IGNhbiB0aGlzIGJlIHRoZSBjb3JyZWN0IGNvbmRpdGlvbmFsPwor
Ly8gSSBkb24ndCB0aGluayB0aGUgT1MgaXMgcmVhbGx5IHdoYXQgZGV0ZXJtaW5lcyAibmF0aXZl
IGxpbmUgZW5kaW5ncyIuCisjaWYgIU9TKFdJTkRPV1MpCiAKLSNpZiBPUyhXSU5ET1dTKQotY2xh
c3MgVmVjdG9yQ2hhckFwcGVuZEJ1ZmZlciA6IHB1YmxpYyBPdXRwdXRCdWZmZXIgewotcHVibGlj
OgotICAgIFZlY3RvckNoYXJBcHBlbmRCdWZmZXIoVmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIpCi0g
ICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQotICAgIHsKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4g
bm9ybWFsaXplTGluZUVuZGluZ3NUb0xGKFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSkKK3sKKyAg
ICBzaXplX3QgcmVzdWx0TGVuZ3RoID0gMDsKKyAgICBib29sIG5lZWRGaXggPSBmYWxzZTsKKyAg
ICBjb25zdCBhdXRvKiBwID0gc291cmNlLmRhdGEoKTsKKyAgICBhdXRvKiBlbmQgPSBwICsgc291
cmNlLnNpemUoKTsKKyAgICB3aGlsZSAocCAhPSBlbmQpIHsKKyAgICAgICAgY2hhciBjID0gKnAr
KzsKKyAgICAgICAgaWYgKGMgPT0gJ1xyJyAmJiBwICE9IGVuZCAmJiAqcCA9PSAnXG4nKSB7Cisg
ICAgICAgICAgICAvLyBUdXJuIENSTEYgaW50byBMRi4KKyAgICAgICAgICAgICsrcDsKKyAgICAg
ICAgICAgIG5lZWRGaXggPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ1xyJykgewor
ICAgICAgICAgICAgLy8gVHVybiBDUiBpbnRvIExGLgorICAgICAgICAgICAgbmVlZEZpeCA9IHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgKytyZXN1bHRMZW5ndGg7CiAgICAgfQotICAgIHZpcnR1
YWwgflZlY3RvckNoYXJBcHBlbmRCdWZmZXIoKSB7IH0KIAotICAgIHVpbnQ4X3QqIGFsbG9jYXRl
KHNpemVfdCBzaXplKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBt
X2J1ZmZlci5zaXplKCk7Ci0gICAgICAgIG1fYnVmZmVyLmdyb3cob2xkU2l6ZSArIHNpemUpOwot
ICAgICAgICByZXR1cm4gbV9idWZmZXIuZGF0YSgpICsgb2xkU2l6ZTsKLSAgICB9CisgICAgaWYg
KCFuZWVkRml4KQorICAgICAgICByZXR1cm4gV1RGTW92ZShzb3VyY2UpOwogCi0gICAgdm9pZCBj
b3B5KGNvbnN0IENTdHJpbmcmIHNvdXJjZSkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIG1fYnVm
ZmVyLmFwcGVuZChzb3VyY2UuZGF0YSgpLCBzb3VyY2UubGVuZ3RoKCkpOworICAgIFZlY3Rvcjx1
aW50OF90PiByZXN1bHQocmVzdWx0TGVuZ3RoKTsKKyAgICBwID0gc291cmNlLmRhdGEoKTsKKyAg
ICBhdXRvKiBxID0gcmVzdWx0LmRhdGEoKTsKKyAgICB3aGlsZSAocCAhPSBlbmQpIHsKKyAgICAg
ICAgY2hhciBjID0gKnArKzsKKyAgICAgICAgaWYgKGMgPT0gJ1xyJyAmJiBwICE9IGVuZCAmJiAq
cCA9PSAnXG4nKSB7CisgICAgICAgICAgICAvLyBUdXJuIENSTEYgaW50byBMRi4KKyAgICAgICAg
ICAgICsrcDsKKyAgICAgICAgICAgICpxKysgPSAnXG4nOworICAgICAgICB9IGVsc2UgaWYgKGMg
PT0gJ1xyJykgeworICAgICAgICAgICAgLy8gVHVybiBDUiBpbnRvIExGLgorICAgICAgICAgICAg
KnErKyA9ICdcbic7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBMZWF2ZSBvdGhl
ciBjaGFyYWN0ZXJzIGFsb25lLgorICAgICAgICAgICAgKnErKyA9IGM7CisgICAgICAgIH0KICAg
ICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KIAotcHJpdmF0ZToKLSAgICBWZWN0b3I8dWludDhf
dD4mIG1fYnVmZmVyOwotfTsKICNlbmRpZgogCi12b2lkIGludGVybmFsTm9ybWFsaXplTGluZUVu
ZGluZ3NUb0NSTEYoY29uc3QgQ1N0cmluZyYgZnJvbSwgT3V0cHV0QnVmZmVyJiBidWZmZXIpCitW
ZWN0b3I8dWludDhfdD4gbm9ybWFsaXplTGluZUVuZGluZ3NUb0NSTEYoVmVjdG9yPHVpbnQ4X3Q+
JiYgc291cmNlKQogewotICAgIGlmICghZnJvbS5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIC8vIENvbXB1dGUgdGhlIG5ldyBsZW5ndGguCi0gICAgc2l6ZV90IG5ld0xlbiA9IDA7Ci0g
ICAgY29uc3QgY2hhciogcCA9IGZyb20uZGF0YSgpOwotICAgIHdoaWxlIChwIDwgZnJvbS5kYXRh
KCkgKyBmcm9tLmxlbmd0aCgpKSB7CisgICAgc2l6ZV90IHJlc3VsdExlbmd0aCA9IDA7CisgICAg
Y29uc3QgYXV0byogcCA9IHNvdXJjZS5kYXRhKCk7CisgICAgYXV0byogZW5kID0gcCArIHNvdXJj
ZS5zaXplKCk7CisgICAgd2hpbGUgKHAgIT0gZW5kKSB7CiAgICAgICAgIGNoYXIgYyA9ICpwKys7
CiAgICAgICAgIGlmIChjID09ICdccicpIHsKLSAgICAgICAgICAgIC8vIFNhZmUgdG8gbG9vayBh
aGVhZCBiZWNhdXNlIG9mIHRyYWlsaW5nICdcMCcuCi0gICAgICAgICAgICBpZiAoKnAgIT0gJ1xu
JykgewotICAgICAgICAgICAgICAgIC8vIFR1cm4gQ1IgaW50byBDUkxGLgotICAgICAgICAgICAg
ICAgIG5ld0xlbiArPSAyOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gVHVybiBDUiBv
ciBDUkxGIGludG8gQ1JMRjsKKyAgICAgICAgICAgIGlmIChwICE9IGVuZCAmJiAqcCA9PSAnXG4n
KQorICAgICAgICAgICAgICAgICsrcDsKKyAgICAgICAgICAgIHJlc3VsdExlbmd0aCArPSAyOwog
ICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ1xuJykgewogICAgICAgICAgICAgLy8gVHVybiBMRiBp
bnRvIENSTEYuCi0gICAgICAgICAgICBuZXdMZW4gKz0gMjsKKyAgICAgICAgICAgIHJlc3VsdExl
bmd0aCArPSAyOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gTGVhdmUgb3RoZXIg
Y2hhcmFjdGVycyBhbG9uZS4KLSAgICAgICAgICAgIG5ld0xlbiArPSAxOworICAgICAgICAgICAg
cmVzdWx0TGVuZ3RoICs9IDE7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKG5ld0xlbiA8IGZy
b20ubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChuZXdMZW4gPT0gZnJvbS5s
ZW5ndGgoKSkgewotICAgICAgICBidWZmZXIuY29weShmcm9tKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KIAotICAgIHAgPSBmcm9tLmRhdGEoKTsKLSAgICB1aW50OF90KiBxID0gYnVmZmVyLmFs
bG9jYXRlKG5ld0xlbik7CisgICAgaWYgKHJlc3VsdExlbmd0aCA9PSBzb3VyY2Uuc2l6ZSgpKQor
ICAgICAgICByZXR1cm4gV1RGTW92ZShzb3VyY2UpOwogCi0gICAgLy8gTWFrZSBhIGNvcHkgb2Yg
dGhlIHN0cmluZy4KLSAgICB3aGlsZSAocCA8IGZyb20uZGF0YSgpICsgZnJvbS5sZW5ndGgoKSkg
eworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQocmVzdWx0TGVuZ3RoKTsKKyAgICBwID0gc291
cmNlLmRhdGEoKTsKKyAgICBhdXRvKiBxID0gcmVzdWx0LmRhdGEoKTsKKyAgICB3aGlsZSAocCAh
PSBlbmQpIHsKICAgICAgICAgY2hhciBjID0gKnArKzsKICAgICAgICAgaWYgKGMgPT0gJ1xyJykg
ewotICAgICAgICAgICAgLy8gU2FmZSB0byBsb29rIGFoZWFkIGJlY2F1c2Ugb2YgdHJhaWxpbmcg
J1wwJy4KLSAgICAgICAgICAgIGlmICgqcCAhPSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgLy8g
VHVybiBDUiBpbnRvIENSTEYuCi0gICAgICAgICAgICAgICAgKnErKyA9ICdccic7Ci0gICAgICAg
ICAgICAgICAgKnErKyA9ICdcbic7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBUdXJu
IENSIG9yIENSTEYgaW50byBDUkxGOworICAgICAgICAgICAgaWYgKHAgIT0gZW5kICYmICpwID09
ICdcbicpCisgICAgICAgICAgICAgICAgKytwOworICAgICAgICAgICAgKnErKyA9ICdccic7Cisg
ICAgICAgICAgICAqcSsrID0gJ1xuJzsKICAgICAgICAgfSBlbHNlIGlmIChjID09ICdcbicpIHsK
ICAgICAgICAgICAgIC8vIFR1cm4gTEYgaW50byBDUkxGLgogICAgICAgICAgICAgKnErKyA9ICdc
cic7CkBAIC0xNDksNzggKzEyOCwxNSBAQCB2b2lkIGludGVybmFsTm9ybWFsaXplTGluZUVuZGlu
Z3NUb0NSTEYoCiAgICAgICAgICAgICAqcSsrID0gYzsKICAgICAgICAgfQogICAgIH0KKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi19OwotCi1uYW1lc3BhY2UgV1RGIHsKLQotLy8gTm9ybWFsaXpl
IGFsbCBsaW5lLWVuZGluZ3MgdG8gQ1Igb3IgTEYuCi1zdGF0aWMgdm9pZCBub3JtYWxpemVUb0NS
T3JMRihjb25zdCBDU3RyaW5nJiBmcm9tLCBWZWN0b3I8dWludDhfdD4mIHJlc3VsdCwgYm9vbCB0
b0NSKQotewotICAgIC8vIENvbXB1dGUgdGhlIG5ldyBsZW5ndGguCi0gICAgc2l6ZV90IG5ld0xl
biA9IDA7Ci0gICAgYm9vbCBuZWVkRml4ID0gZmFsc2U7Ci0gICAgY29uc3QgY2hhciogcCA9IGZy
b20uZGF0YSgpOwotICAgIGNoYXIgZnJvbUVuZGluZ0NoYXIgPSB0b0NSID8gJ1xuJyA6ICdccic7
Ci0gICAgY2hhciB0b0VuZGluZ0NoYXIgPSB0b0NSID8gJ1xyJyA6ICdcbic7Ci0gICAgd2hpbGUg
KHAgPCBmcm9tLmRhdGEoKSArIGZyb20ubGVuZ3RoKCkpIHsKLSAgICAgICAgY2hhciBjID0gKnAr
KzsKLSAgICAgICAgaWYgKGMgPT0gJ1xyJyAmJiAqcCA9PSAnXG4nKSB7Ci0gICAgICAgICAgICAv
LyBUdXJuIENSTEYgaW50byBDUiBvciBMRi4KLSAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAg
IG5lZWRGaXggPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKGMgPT0gZnJvbUVuZGluZ0NoYXIp
IHsKLSAgICAgICAgICAgIC8vIFR1cm4gQ1IvTEYgaW50byBMRi9DUi4KLSAgICAgICAgICAgIG5l
ZWRGaXggPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIG5ld0xlbiArPSAxOwotICAgIH0KLQot
ICAgIC8vIEdyb3cgdGhlIHJlc3VsdCBidWZmZXIuCi0gICAgcCA9IGZyb20uZGF0YSgpOwotICAg
IHNpemVfdCBvbGRSZXN1bHRTaXplID0gcmVzdWx0LnNpemUoKTsKLSAgICByZXN1bHQuZ3Jvdyhv
bGRSZXN1bHRTaXplICsgbmV3TGVuKTsKLSAgICB1aW50OF90KiBxID0gcmVzdWx0LmRhdGEoKSAr
IG9sZFJlc3VsdFNpemU7Ci0KLSAgICAvLyBJZiBubyBuZWVkIHRvIGZpeCB0aGUgc3RyaW5nLCBq
dXN0IGNvcHkgdGhlIHN0cmluZyBvdmVyLgotICAgIGlmICghbmVlZEZpeCkgewotICAgICAgICBt
ZW1jcHkocSwgcCwgZnJvbS5sZW5ndGgoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyBNYWtlIGEgY29weSBvZiB0aGUgc3RyaW5nLgotICAgIHdoaWxlIChwIDwgZnJvbS5kYXRh
KCkgKyBmcm9tLmxlbmd0aCgpKSB7Ci0gICAgICAgIGNoYXIgYyA9ICpwKys7Ci0gICAgICAgIGlm
IChjID09ICdccicgJiYgKnAgPT0gJ1xuJykgewotICAgICAgICAgICAgLy8gVHVybiBDUkxGIG9y
IENSIGludG8gQ1Igb3IgTEYuCi0gICAgICAgICAgICBwKys7Ci0gICAgICAgICAgICAqcSsrID0g
dG9FbmRpbmdDaGFyOwotICAgICAgICB9IGVsc2UgaWYgKGMgPT0gZnJvbUVuZGluZ0NoYXIpIHsK
LSAgICAgICAgICAgIC8vIFR1cm4gQ1IvTEYgaW50byBMRi9DUi4KLSAgICAgICAgICAgICpxKysg
PSB0b0VuZGluZ0NoYXI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBMZWF2ZSBv
dGhlciBjaGFyYWN0ZXJzIGFsb25lLgotICAgICAgICAgICAgKnErKyA9IGM7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLUNTdHJpbmcgbm9ybWFsaXplTGluZUVuZGluZ3NUb0NSTEYoY29uc3QgQ1N0
cmluZyYgZnJvbSkKLXsKLSAgICBDU3RyaW5nIHJlc3VsdDsKLSAgICA6OkNTdHJpbmdCdWZmZXIg
YnVmZmVyKHJlc3VsdCk7Ci0gICAgaW50ZXJuYWxOb3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JMRihm
cm9tLCBidWZmZXIpOwotICAgIHJldHVybiBidWZmZXIuYnVmZmVyKCk7Ci19Ci0KLXZvaWQgbm9y
bWFsaXplQW5kQXBwZW5kTGluZUVuZGluZ3NUb05hdGl2ZShjb25zdCBDU3RyaW5nJiBmcm9tLCBW
ZWN0b3I8dWludDhfdD4mIHJlc3VsdCkKK1ZlY3Rvcjx1aW50OF90PiBub3JtYWxpemVMaW5lRW5k
aW5nc1RvTmF0aXZlKFZlY3Rvcjx1aW50OF90PiYmIGZyb20pCiB7CiAjaWYgT1MoV0lORE9XUykK
LSAgICBWZWN0b3JDaGFyQXBwZW5kQnVmZmVyIGJ1ZmZlcihyZXN1bHQpOwotICAgIGludGVybmFs
Tm9ybWFsaXplTGluZUVuZGluZ3NUb0NSTEYoZnJvbSwgYnVmZmVyKTsKKyAgICByZXR1cm4gbm9y
bWFsaXplTGluZUVuZGluZ3NUb0NSTEYoV1RGTW92ZShmcm9tKSk7CiAjZWxzZQotICAgIG5vcm1h
bGl6ZVRvQ1JPckxGKGZyb20sIHJlc3VsdCwgZmFsc2UpOworICAgIHJldHVybiBub3JtYWxpemVM
aW5lRW5kaW5nc1RvTEYoV1RGTW92ZShmcm9tKSk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNl
L1dURi93dGYvdGV4dC9MaW5lRW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
dGV4dC9MaW5lRW5kaW5nLmgJKHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XVEYvd3RmL3Rl
eHQvTGluZUVuZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOCwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMyLDE4ICszMiwxNiBAQAogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIAogbmFtZXNwYWNlIFdURiB7CiAKIC8vIE5vcm1hbGl6ZSBhbGwgbGluZS1lbmRpbmdzIGlu
IHRoZSBnaXZlbiBzdHJpbmcgdG8gQ1JMRi4KLVdURl9FWFBPUlQgQ1N0cmluZyBub3JtYWxpemVM
aW5lRW5kaW5nc1RvQ1JMRihjb25zdCBDU3RyaW5nJiBmcm9tKTsKK1dURl9FWFBPUlQgVmVjdG9y
PHVpbnQ4X3Q+IG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9DUkxGKFZlY3Rvcjx1aW50OF90PiYmKTsK
IAotLy8gTm9ybWFsaXplIGFsbCBsaW5lLWVuZGluZ3MgaW4gdGhlIGdpdmVuIHN0cmluZyB0byB0
aGUgbmF0aXZlIGxpbmUtZW5kaW5ncyBhbmQgYXBwZW5kIHRoZSByZXN1bHQgdG8gdGhlIGdpdmVu
IGJ1ZmZlci4KLS8vIChOb3JtYWxpemUgdG8gQ1JMRiBvbiBXaW5kb3dzIGFuZCBub3JtYWxpemUg
dG8gTEYgb24gYWxsIG90aGVyIHBsYXRmb3Jtcy4pCi1XVEZfRVhQT1JUIHZvaWQgbm9ybWFsaXpl
QW5kQXBwZW5kTGluZUVuZGluZ3NUb05hdGl2ZShjb25zdCBDU3RyaW5nJiBmcm9tLCBWZWN0b3I8
dWludDhfdD4mIHJlc3VsdCk7CisvLyBOb3JtYWxpemUgYWxsIGxpbmUtZW5kaW5ncyAgdG8gQ1JM
RiBvbiBXaW5kb3dzIGFuZCB0byBMRiBvbiBhbGwgb3RoZXIgcGxhdGZvcm1zLgorV1RGX0VYUE9S
VCBWZWN0b3I8dWludDhfdD4gbm9ybWFsaXplTGluZUVuZGluZ3NUb05hdGl2ZShWZWN0b3I8dWlu
dDhfdD4mJik7CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6Om5vcm1hbGl6ZUxp
bmVFbmRpbmdzVG9DUkxGOwotdXNpbmcgV1RGOjpub3JtYWxpemVBbmRBcHBlbmRMaW5lRW5kaW5n
c1RvTmF0aXZlOwordXNpbmcgV1RGOjpub3JtYWxpemVMaW5lRW5kaW5nc1RvTmF0aXZlOwpJbmRl
eDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbW1vbi5oCShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0
NSw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHVuc2lnbmUKIAogdGVtcGxh
dGU8dHlwZW5hbWUgU3RyaW5nQ2xhc3MsIHVuc2lnbmVkIGxlbmd0aD4gYm9vbCBlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZUNvbW1vbihjb25zdCBTdHJpbmdDbGFzcyYsIGNvbnN0IGNoYXIg
KCZsb3dlcmNhc2VMZXR0ZXJzKVtsZW5ndGhdKTsKIAorYm9vbCBlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7Cit0ZW1wbGF0ZTx1bnNpZ25lZCBsb3dlcmNh
c2VMZXR0ZXJzTGVuZ3RoPiBib29sIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0
IGNoYXIqLCBjb25zdCBjaGFyICgmbG93ZXJjYXNlTGV0dGVycylbbG93ZXJjYXNlTGV0dGVyc0xl
bmd0aF0pOworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogaW5saW5lIFQgbG9hZFVuYWxpZ25lZChj
b25zdCBjaGFyKiBzKQogewpAQCAtNjUyLDYgKzY1NSwxOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBT
dHJpbmdDbGFzcywgdW5zaWduZWQgCiAgICAgcmV0dXJuIHN0YXJ0c1dpdGhMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2VDb21tb25XaXRob3V0TGVuZ3RoKHN0cmluZywgcG9pbnRlcik7CiB9CiAKK2lu
bGluZSBib29sIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgY2hhciogYSwgY29uc3QgY2hh
ciogYikKK3sKKyAgICBhdXRvIGxlbmd0aCA9IHN0cmxlbihhKTsKKyAgICByZXR1cm4gbGVuZ3Ro
ID09IHN0cmxlbihiKSAmJiBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGEsIGIsIGxlbmd0aCk7Cit9
CisKK3RlbXBsYXRlPHVuc2lnbmVkIGxvd2VyY2FzZUxldHRlcnNMZW5ndGg+IGlubGluZSBib29s
IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IGNoYXIqIHN0cmluZywgY29uc3Qg
Y2hhciAoJmxvd2VyY2FzZUxldHRlcnMpW2xvd2VyY2FzZUxldHRlcnNMZW5ndGhdKQoreworICAg
IGF1dG8gbGVuZ3RoID0gc3RybGVuKGxvd2VyY2FzZUxldHRlcnMpOworICAgIHJldHVybiBzdHJs
ZW4oc3RyaW5nKSA9PSBsZW5ndGggJiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3Ry
aW5nLCBsb3dlcmNhc2VMZXR0ZXJzLCBsZW5ndGgpOworfQorCiB9CiAKIHVzaW5nIFdURjo6ZXF1
YWxJZ25vcmluZ0FTQ0lJQ2FzZTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvVGV4dFN0cmVh
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9UZXh0U3RyZWFtLmNwcAko
cmV2aXNpb24gMjI1MjA3KQorKysgU291cmNlL1dURi93dGYvdGV4dC9UZXh0U3RyZWFtLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIK
IAogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAJKHJldmlzaW9uIDIyNTIwNykKKysrIFNv
dXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyAr
MzAsNiBAQAogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0
Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3Rm
L2R0b2EuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgpJbmRleDog
U291cmNlL1dURi93dGYvdW5pY29kZS9pY3UvQ29sbGF0b3JJQ1UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL3VuaWNvZGUvaWN1L0NvbGxhdG9ySUNVLmNwcAkocmV2aXNpb24gMjI1
MjA3KQorKysgU291cmNlL1dURi93dGYvdW5pY29kZS9pY3UvQ29sbGF0b3JJQ1UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSA8bXV0ZXg+CiAjaW5jbHVkZSA8
dW5pY29kZS91Y29sLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvU3Ry
aW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogCiAjaWYgT1Mo
REFSV0lOKSAmJiBVU0UoQ0YpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjUyMDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxODQgQEAK
KzIwMTctMTEtMjcgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1v
ZGVybml6ZSBzb21lIGFzcGVjdHMgb2YgdGV4dCBjb2RlY3MsIGVsaW1pbmF0ZSBXZWJLaXQgdXNl
IG9mIHN0cmNhc2VjbXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4MDAwOQorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisK
KyAgICAgICAgKiBNb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGZXRjaEJvZHk6OmNvbnN1bWVBc1N0cmVhbSk6IFVwZGF0ZSB0byB1c2Ugc2l6ZSBzaW5jZSB0
aGUgcmVzdWx0IG9mCisgICAgICAgIGVuY29kZSBpcyBub3cgVmVjdG9yIHJhdGhlciB0aGFuIENT
dHJpbmcuCisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmNvbnN1bWVUZXh0KTogUmVtb3Zl
ZCBub3ctdW5uZWVkZWQgdHlwZSBjYXN0LgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojp0
YWtlKTogUGFzcyByZXN1bHQgb2YgZW5jb2RlIGRpcmVjdGx5IHRvIFNoYXJlZEJ1ZmZlcjo6Y3Jl
YXRlLgorCisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVyLmNw
cDogUmVtb3ZlZCBpbmNsdWRlIG9mIFN0cmluZ0V4dHJhcy5oLgorICAgICAgICAqIGJyaWRnZS9J
ZGVudGlmaWVyUmVwLmg6IERpdHRvLgorICAgICAgICAqIGJyaWRnZS9jL2NfaW5zdGFuY2UuY3Bw
OiBEaXR0by4KKworICAgICAgICAqIGZpbGVhcGkvQmxvYkJ1aWxkZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QmxvYkJ1aWxkZXI6OmFwcGVuZCk6IFVwZGF0ZWQgZm9yIENTdHJpbmcgdG8gVmVj
dG9yIGNoYW5nZS4KKworICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWV0YUNoYXJzZXRQYXJzZXI6OmNoZWNrRm9y
TWV0YUNoYXJzZXQpOiBDYWxsIHRoZSBkZWNvZGUgZnVuY3Rpb24KKyAgICAgICAgd2l0aCBhbGwg
dGhlIGFyZ3VtZW50cyBzaW5jZSB0aGVyZSBpcyBvbmx5IG9uZSBkZWNvZGUgZnVuY3Rpb24gbm93
LgorCisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21wdXRlQ29udGVudFNlY3VyaXR5UG9saWN5U0hBMjU2SGFzaCk6
IFVwZGF0ZWQgZm9yIENTdHJpbmcgdG8gVmVjdG9yIGNoYW5nZS4KKworICAgICAgICAqIGxvYWRl
ci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3J5
cHRvZ3JhcGhpY0RpZ2VzdEZvckJ5dGVzKTogQ2hhbmdlZCBhcmd1bWVudCB0eXBlIHRvIGNvbnN0
IHZvaWQqLgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuaDog
RGl0dG8uCisKKyAgICAgICAgKiBsb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpUZXh0UmVzb3VyY2VEZWNvZGVyKTog
TW92ZWQgaW5pdGlhbGl6YXRpb24gb2YgZGF0YQorICAgICAgICBtZW1iZXJzIHRvIGNsYXNzIGRl
ZmluaXRpb24uCisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUp
OiBNb3ZlZCBmdW5jdGlvbiBib2R5IGhlcmUgZnJvbSB0aGUgaGVhZGVyLgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dFJlc291cmNlRGVjb2Rlcjo6c2V0RW5jb2RpbmcpOiBVc2UgZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UuCisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVy
OjpzaG91bGRBdXRvRGV0ZWN0IGNvbnN0KTogVXBkYXRlZCBmb3IgbmFtZSBjaGFuZ2UKKyAgICAg
ICAgdG8gbV9wYXJlbnRGcmFtZUF1dG9EZXRlY3RlZEVuY29kaW5nLCB3aGljaCBvYnZpYXRlcyBh
IGNvbW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpmbHVzaCk6
IERpdHRvLgorICAgICAgICAqIGxvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmg6IE1vdmVkIGlu
aXRpYWxpemF0aW9uIGhlcmUgZnJvbSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgTW92ZWQgZnVuY3Rp
b24gYm9kaWVzIG91dCBvZiB0aGUgY2xhc3MuIFJlbmFtZWQgbV9oaW50RW5jb2RpbmcgdG8KKyAg
ICAgICAgbV9wYXJlbnRGcmFtZUF1dG9EZXRlY3RlZEVuY29kaW5nIHNpbmNlIHRoYXQgaXMgYSBt
b3JlIGFjY3VyYXRlIGRlc2NyaXB0aW9uLgorCisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDogUmVtb3ZlZCBpbmNsdWRlIG9mIFN0cmluZ0V4dHJh
cy5oLgorICAgICAgICAqIHBhZ2UvRnJhbWVUcmVlLmNwcDogRGl0dG8uCisgICAgICAgICogcGFn
ZS9QYWdlU2VyaWFsaXplci5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNlcmlh
bGl6ZXI6OnNlcmlhbGl6ZUZyYW1lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYWdlU2Vy
aWFsaXplcjo6c2VyaWFsaXplQ1NTU3R5bGVTaGVldCk6IERpdHRvLgorCisgICAgICAgICogcGFn
ZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRTZWN1cml0eVBvbGljeTo6ZmluZEhhc2hPZkNvbnRlbnRJblBvbGljaWVzIGNvbnN0KTogUGFz
cyByZXN1bHQKKyAgICAgICAgb2YgZW5jb2RlIGRpcmVjdGx5IHRvIFN0cmluZ0J1ZmZlcjo6Y3Jl
YXRlLgorCisgICAgICAgICogcGxhdGZvcm0vRmlsZUhhbmRsZS5jcHA6IFJlbW92ZWQgaW5jbHVk
ZSBvZiBTdHJpbmdFeHRyYXMuaC4KKworICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZSk6IEFkZGVkIGFuIG92
ZXJsb2FkIHRoYXQgdGFrZXMgVmVjdG9yPHVpbnQ4X3Q+LgorICAgICAgICAqIHBsYXRmb3JtL1No
YXJlZEJ1ZmZlci5oOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL1VSTFBhcnNlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpVUkxQYXJzZXI6OmVuY29kZVF1ZXJ5KTogVXBkYXRlZCBzaW5j
ZSBlbmNvZGUgcmV0dXJucyBhIFZlY3RvciBpbnN0ZWFkCisgICAgICAgIG9mIGEgQ1N0cmluZyBu
b3cuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNob3VsZFdhaXRGb3JMb2FkaW5nT2ZSZXNv
dXJjZSk6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1D
QUxheWVyLmNwcDogUmVtb3ZlZCBpbmNsdWRlIG9mIFN0cmluZ0V4dHJhcy5oLgorCisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpoYW5kbGVEYXRh
VVJMKTogVXBkYXRlZCBmb3IgVmVjdG9yIGluc3RlYWQKKyAgICAgICAgb2YgQ1N0cmluZy4KKwor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9ybURhdGE6OmNyZWF0ZSk6IEFkZGVkIG5ldyBvdmVybG9hZCwgYW5kIHNpbXBsaWZpZWQg
c29tZSBleGlzdGluZyBvbmVzLgorICAgICAgICAoV2ViQ29yZTo6bm9ybWFsaXplU3RyaW5nRGF0
YSk6IENoYW5nZWQgcmV0dXJuIHR5cGUgdG8gVmVjdG9yPHVpbnQ4X3Q+LgorICAgICAgICAoV2Vi
Q29yZTo6Rm9ybURhdGE6OmFwcGVuZE11bHRpUGFydFN0cmluZ1ZhbHVlKTogVXBkYXRlZCBmb3Ig
Y2hhbmdlIGluIHR5cGUgb2YKKyAgICAgICAgcmVzdWx0IG9mIG5vcm1hbGl6ZVN0cmluZ0RhdGEu
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oOiBVcGRhdGVkIGZvciB0aGUg
YWJvdmUgYW5kIHVwZGF0ZWQgY29tbWVudHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L0Zvcm1EYXRhQnVpbGRlci5jcHA6IE1hZGUgdGhpcyBhIG5hbWVzcGFjZSBpbnN0ZWFkIG9mIGEg
Y2xhc3MuCisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUJ1aWxkZXI6OmFwcGVuZCk6IEFkZGVk
IGFuIG92ZXJsb2FkIGZvciBWZWN0b3I8dWludDhfdD4uCisgICAgICAgIChXZWJDb3JlOjpGb3Jt
RGF0YUJ1aWxkZXI6OmFwcGVuZFF1b3RlZCk6IFJlbmFtZWQgZnJvbSBhcHBlbmRRdW90ZWRTdHJp
bmcgYW5kCisgICAgICAgIGNoYW5nZWQgdGhlIGFyZ3VtZW50IHR5cGUuCisgICAgICAgIChXZWJD
b3JlOjpGb3JtRGF0YUJ1aWxkZXI6OmFwcGVuZEVuY29kZWRBc0Zvcm1EYXRhKTogTW92ZWQgbG9n
aWMgdXAgZnJvbSB0aGUKKyAgICAgICAgZW5jb2RlU3RyaW5nQXNGb3JtRGF0YSBmdW5jdGlvbiBp
bnRvIGEgbmV3IHNlcGFyYXRlIGhlbHBlci4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhQnVp
bGRlcjo6YmVnaW5NdWx0aVBhcnRIZWFkZXIpOiBDaGFuZ2VkIGFyZ3VtZW50IHR5cGUuCisgICAg
ICAgIChXZWJDb3JlOjpGb3JtRGF0YUJ1aWxkZXI6OmFkZEtleVZhbHVlUGFpckFzRm9ybURhdGEp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5n
QXNGb3JtRGF0YSk6IFVwZGF0ZWQgdG8gY2FsbCBoZWxwZXIuCisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9Gb3JtRGF0YUJ1aWxkZXIuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAg
ICAgICogcGxhdGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaDogVXNlIFZlY3Rvcjx1
aW50OF90PiBpbnN0ZWFkIG9mCisgICAgICAgIFZlY3RvcjxjaGFyPiwgYWxzbyB1cGRhdGVkIHRo
ZSBjb2RlIHRoYXQgY2FsbHMgZW5jb2RlIGZvciB0aGUgbmV3IHJldHVybiB0eXBlLgorCisgICAg
ICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dENvZGVjOjpnZXRVbmVuY29kYWJsZVJlcGxhY2VtZW50KTogVXBkYXRlZCBzaW5jZSB3ZSBhcmUg
dXNpbmcKKyAgICAgICAgc3RkOjphcnJheSBub3csIHNvIHRoZSBvdXQgYXJndW1lbnQgaXMgZWFz
aWVyIHRvIHVuZGVyc3RhbmQuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuaDog
VXNlIHN0ZDo6YXJyYXkgZm9yIHRoZSBVbmVuY29kYWJsZVJlcGxhY2VtZW50QXJyYXkKKyAgICAg
ICAgdHlwZSwgcmVtb3ZlZCB0aGUgb3ZlcmxvYWQgb2YgZGVjb2RlIHNvIHRoZXJlIGlzIG9ubHkg
b25lIGRlY29kZSBmdW5jdGlvbi4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVj
SUNVLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklDVUNvbnZlcnRlcldyYXBwZXI6On5JQ1VDb252
ZXJ0ZXJXcmFwcGVyKTogRGVsZXRlZC4KKyAgICAgICAgTm90IG5lZWRlZCBhbnkgbW9yZSBzaW5j
ZSB3ZSB1c2UgSUNVQ29udmVydGVyUHRyIGluc3RlYWQgbm93LgorICAgICAgICAoV2ViQ29yZTo6
Y2FjaGVkQ29udmVydGVySUNVKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2Rl
Y0lDVTo6Y3JlYXRlKTogRGVsZXRlZC4gQ2FsbGVycyBqdXN0IHVzZSBtYWtlX3VuaXF1ZQorICAg
ICAgICBkaXJlY3RseSBub3cuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNJQ1U6OnJlZ2lz
dGVyQ29kZWNzKTogUmV3cm90ZSB0byB1c2UgbGFtYmRhcyBpbnN0ZWFkCisgICAgICAgIG9mIGZ1
bmN0aW9ucyB3aXRoIHZvaWQqIHBvaW50ZXJzLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVj
SUNVOjpUZXh0Q29kZWNJQ1UpOiBNb3ZlZCBpbml0aWFsaXplcnMgaW50byB0aGUgaGVhZGVyLgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjSUNVOjp+VGV4dENvZGVjSUNVKTogTW92ZWQgdGhl
IGJvZHkgb2YgcmVsZWFzZUlDVUNvbnZlcnRlcgorICAgICAgICBpbiBoZXJlLiBBbHNvIGdyZWF0
bHkgc2ltcGxpZmllZCBpdCBub3cgdGhhdCBJQ1VDb252ZXJ0ZXJQdHIgaGFuZGxlcyBjbG9zaW5n
CisgICAgICAgIGl0IGFzIG5lZWRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0lDVTo6
cmVsZWFzZUlDVUNvbnZlcnRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpU
ZXh0Q29kZWNJQ1U6OmNyZWF0ZUlDVUNvbnZlcnRlciBjb25zdCk6IFJld3JvdGUgdG8gc2ltcGxm
eSBub3cgdGhhdAorICAgICAgICB3ZSBjYW4gdXNlIElDVUNvbnZlcnRlclB0ci4KKyAgICAgICAg
KFdlYkNvcmU6OkVycm9yQ2FsbGJhY2tTZXR0ZXI6OkVycm9yQ2FsbGJhY2tTZXR0ZXIpOiBUYWtl
IGEgcmVmZXJlbmNlIGluc3RlYWQKKyAgICAgICAgb2YgYSBwb2ludGVyLgorICAgICAgICAoV2Vi
Q29yZTo6RXJyb3JDYWxsYmFja1NldHRlcjo6fkVycm9yQ2FsbGJhY2tTZXR0ZXIpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0lDVTo6ZGVjb2RlKTogVXNlIGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlIGluc3RlYWQgb2YKKyAgICAgICAgc3RyY2FzZWNtcC4KKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRDb2RlY0lDVTo6ZW5jb2RlKTogUmV0dXJuIGEgVmVjdG9yIGluc3Rl
YWQgb2YgYSBDU3RyaW5nLgorICAgICAgICBUYWtlIGEgU3RyaW5nVmlldyBpbnN0ZWFkIG9mIGEg
cG9pbnRlciBhbmQgbGVuZ3RoLiBTaW1wbGlmaWVkCisgICAgICAgIHRoZSBiYWNrc2xhc2gtYXMt
Y3VycmVuY3ktc3ltYm9sIGNvZGUgYnkgdXNpbmcgU3RyaW5nOjpyZXBsYWNlLgorICAgICAgICAq
IHBsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmg6IFVwZGF0ZWQgZm9yIGFib3ZlLiBGaXhlZCBp
bmRlbnRhdGlvbi4KKyAgICAgICAgQWRkZWQgYSBuZXcgSUNVQ29udmVydGVyUHRyIHR5cGVkZWYg
dGhhdCB1c2VzIHN0ZDo6dW5pcXVlX3B0ciB0byBjbG9zZSB0aGUKKyAgICAgICAgY29udmVydGVy
OyBjb21iaW5lZCB3aXRoIG1vdmUgc2VtYW50aWNzIGl0IHNpbXBsaWZpZXMgdGhpbmdzIHNvIHdl
IGRvbid0IGhhdmUKKyAgICAgICAgdG8gYmUgc28gY2FyZWZ1bCBhYm91dCBjYWxsaW5nIHVjbnZf
Y2xvc2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5jcHA6IFJl
bmFtZWQgdGhlIExhdGluLTEgdG8gVW5pY29kZSB0YWJsZSBmcm9tCisgICAgICAgICJ0YWJsZSIg
dG8gbGF0aW4xQ29udmVyc2lvblRhYmxlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjTGF0
aW4xOjpyZWdpc3RlckNvZGVjcyk6IFVzZSBhIGxhbWJkYS4KKyAgICAgICAgKFdlYkNvcmU6OmVu
Y29kZUNvbXBsZXhXaW5kb3dzTGF0aW4xKTogUmV0dXJuIGEgVmVjdG9yIGluc3RhZCBvZiBDU3Ry
aW5nLgorICAgICAgICBBbHNvIHVzZSBTdHJpbmdWaWV3Ojpjb2RlUG9pbnRzIGluc3RlYWQgb2Yg
b3VyIG93biBVMTZfTkVYVC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0xhdGluMTo6ZW5j
b2RlKTogTW9yZSBvZiB0aGUgc2FtZS4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2Rl
Y0xhdGluMS5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90
ZXh0L1RleHRDb2RlY1JlcGxhY2VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2Rl
Y1JlcGxhY2VtZW50OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENv
ZGVjUmVwbGFjZW1lbnQ6OlRleHRDb2RlY1JlcGxhY2VtZW50KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlRleHRDb2RlY1JlcGxhY2VtZW50OjpyZWdpc3RlckNvZGVjcyk6IFVzZSBhIGxh
bWJkYS4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1JlcGxhY2VtZW50Lmg6IFVw
ZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVj
VVRGMTYuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmV3U3RyZWFtaW5nVGV4dERlY29kZXJVVEYx
NkxFKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om5ld1N0cmVhbWluZ1RleHREZWNvZGVy
VVRGMTZCRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNVVEYxNjo6cmVn
aXN0ZXJDb2RlY3MpOiBVc2UgbGFtYmRhcy4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY1VU
RjE2OjplbmNvZGUpOiBSZXR1cm4gYSBWZWN0b3IuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9U
ZXh0Q29kZWNVVEYxNi5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS90ZXh0L1RleHRDb2RlY1VURjguY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVj
VVRGODo6cmVnaXN0ZXJDb2RlY3MpOiBVc2UgYSBsYW1iZGEuCisgICAgICAgIChXZWJDb3JlOjpU
ZXh0Q29kZWNVVEY4OjplbmNvZGUpOiBSZXR1cm4gYSBWZWN0b3IuCisgICAgICAgICogcGxhdGZv
cm0vdGV4dC9UZXh0Q29kZWNVVEY4Lmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6bmV3U3RyZWFtaW5nVGV4dERlY29kZXJVc2VyRGVmaW5lZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpUZXh0Q29kZWNVc2VyRGVmaW5lZDo6cmVnaXN0ZXJDb2RlY3MpOiBVc2Ug
YSBsYW1iZGEuCisgICAgICAgIChXZWJDb3JlOjplbmNvZGVDb21wbGV4VXNlckRlZmluZWQpOiBS
ZXR1cm4gYSBWZWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNVc2VyRGVmaW5lZDo6
ZW5jb2RlKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVm
aW5lZC5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0
L1RleHRFbmNvZGluZy5jcHA6IENoYW5nZWQgVGV4dENvZGVjTWFwIHRvIGp1c3QgaG9sZCBhCisg
ICAgICAgIFdURjo6RnVuY3Rpb24gaW5zdGVhZCBvZiBob2xkaW5nIGEgZnVuY3Rpb24gYW5kIGFu
IGFkZGl0aW9uYWwgZGF0YSBwb2ludGVyLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEVuY29kaW5n
OjpUZXh0RW5jb2RpbmcpOiBVc2UgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UKKyAgICAg
ICAgaW5zdGVhZCBvZiBhIHNwZWNpYWwgaXNSZXBsYWNlbWVudEVuY29kaW5nIGZ1bmN0aW9uLgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dEVuY29kaW5nOjplbmNvZGUgY29uc3QpOiBSZXR1cm4gYSBW
ZWN0b3IgaW5zdGVhZCBvZiBhIENTdHJpbmcuCisgICAgICAgIFBhc3MgU3RyaW5nVmlldyBpbnN0
ZWFkIG9mIGEgcG9pbnRlciBhbmQgbGVuZ3RoLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4
dEVuY29kaW5nLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIHBsYXRmb3Jt
L3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRkVG9U
ZXh0Q29kZWNNYXApOiBSZW1vdmVkIHRoZSBhZGRpdGlvbmFsRGF0YSBwb2ludGVyIGFuZCB1c2Vk
CisgICAgICAgIFdURk1vdmUgc2luY2UgTmV3VGV4dENvZGVjRnVuY3Rpb24gaXMgbm93IGEgV1RG
OjpGdW5jdGlvbiByYXRoZXIgdGhhbiBhIEMKKyAgICAgICAgZnVuY3Rpb24gcG9pbnRlci4KKyAg
ICAgICAgKFdlYkNvcmU6OmlzUmVwbGFjZW1lbnRFbmNvZGluZyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpuZXdUZXh0Q29kZWMpOiBVc2UgZmluZCBpbnN0ZWFkIG9mIGdldCBub3cgdGhh
dCB0aGUgZnVjbnRpb25zIGluCisgICAgICAgIHRoZSBtYXAgYXJlIFdURjo6RnVuY3Rpb24gYW5k
IGNhbid0IGJlIGNvcGllZC4KKyAgICAgICAgKFdlYkNvcmU6OmR1bXBUZXh0RW5jb2RpbmdOYW1l
TWFwKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lz
dHJ5Lmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIHhtbC9YU0xUVW5pY29k
ZVNvcnQuY3BwOiBSZW1vdmVkIGluY2x1ZGUgb2YgU3RyaW5nRXh0cmFzLmguCisgICAgICAgICog
eG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5jcHA6IERpdHRvLgorICAgICAgICAqIHhtbC9w
YXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcDogRGl0dG8uCisKIDIwMTctMTEtMjcg
IFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIENv
bnRlbnQgcHJvY2VzcyBjcmFzaGVzIHdoZW4gZHJhZ2dpbmcgYSBsaW5rIGluIHJlY292ZXJ5IG1v
ZGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5jcHAJKHJl
dmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDYgKzE1Nyw3IEBAIHZvaWQgRmV0Y2hCb2R5Ojpj
b25zdW1lKEZldGNoQm9keU93bmVyJiAKIH0KIAogI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKwog
dm9pZCBGZXRjaEJvZHk6OmNvbnN1bWVBc1N0cmVhbShGZXRjaEJvZHlPd25lciYgb3duZXIsIEZl
dGNoQm9keVNvdXJjZSYgc291cmNlKQogewogICAgIGJvb2wgY2xvc2VTdHJlYW0gPSBmYWxzZTsK
QEAgLTE2OCwxMSArMTY5LDExIEBAIHZvaWQgRmV0Y2hCb2R5Ojpjb25zdW1lQXNTdHJlYW0oRmV0
Y2hCb2QKICAgICAgICAgbV9kYXRhID0gbnVsbHB0cjsKICAgICB9IGVsc2UgaWYgKGlzVGV4dCgp
KSB7CiAgICAgICAgIGF1dG8gZGF0YSA9IFVURjhFbmNvZGluZygpLmVuY29kZSh0ZXh0Qm9keSgp
LCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7Ci0gICAgICAgIGNsb3NlU3RyZWFtID0gc291cmNl
LmVucXVldWUoQXJyYXlCdWZmZXI6OnRyeUNyZWF0ZShkYXRhLmRhdGEoKSwgZGF0YS5sZW5ndGgo
KSkpOworICAgICAgICBjbG9zZVN0cmVhbSA9IHNvdXJjZS5lbnF1ZXVlKEFycmF5QnVmZmVyOjp0
cnlDcmVhdGUoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKSk7CiAgICAgICAgIG1fZGF0YSA9IG51
bGxwdHI7CiAgICAgfSBlbHNlIGlmIChpc1VSTFNlYXJjaFBhcmFtcygpKSB7CiAgICAgICAgIGF1
dG8gZGF0YSA9IFVURjhFbmNvZGluZygpLmVuY29kZSh1cmxTZWFyY2hQYXJhbXNCb2R5KCkudG9T
dHJpbmcoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwotICAgICAgICBjbG9zZVN0cmVhbSA9
IHNvdXJjZS5lbnF1ZXVlKEFycmF5QnVmZmVyOjp0cnlDcmVhdGUoZGF0YS5kYXRhKCksIGRhdGEu
bGVuZ3RoKCkpKTsKKyAgICAgICAgY2xvc2VTdHJlYW0gPSBzb3VyY2UuZW5xdWV1ZShBcnJheUJ1
ZmZlcjo6dHJ5Q3JlYXRlKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSkpOwogICAgICAgICBtX2Rh
dGEgPSBudWxscHRyOwogICAgIH0gZWxzZSBpZiAoaXNCbG9iKCkpIHsKICAgICAgICAgb3duZXIu
bG9hZEJsb2IoYmxvYkJvZHkoKSwgbnVsbHB0cik7CkBAIC0xODcsNiArMTg4LDcgQEAgdm9pZCBG
ZXRjaEJvZHk6OmNvbnN1bWVBc1N0cmVhbShGZXRjaEJvZAogICAgIGlmIChjbG9zZVN0cmVhbSkK
ICAgICAgICAgc291cmNlLmNsb3NlKCk7CiB9CisKICNlbmRpZgogCiB2b2lkIEZldGNoQm9keTo6
Y29uc3VtZUFycmF5QnVmZmVyKFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKQEAgLTIw
NCw3ICsyMDYsNyBAQCB2b2lkIEZldGNoQm9keTo6Y29uc3VtZUFycmF5QnVmZmVyVmlldyhSCiB2
b2lkIEZldGNoQm9keTo6Y29uc3VtZVRleHQoUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNl
LCBjb25zdCBTdHJpbmcmIHRleHQpCiB7CiAgICAgYXV0byBkYXRhID0gVVRGOEVuY29kaW5nKCku
ZW5jb2RlKHRleHQsIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKLSAgICBtX2NvbnN1bWVyLnJl
c29sdmVXaXRoRGF0YShXVEZNb3ZlKHByb21pc2UpLCByZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQ4X3QqPihkYXRhLmRhdGEoKSksIGRhdGEubGVuZ3RoKCkpOworICAgIG1fY29uc3VtZXIucmVz
b2x2ZVdpdGhEYXRhKFdURk1vdmUocHJvbWlzZSksIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7
CiAgICAgbV9kYXRhID0gbnVsbHB0cjsKIH0KIApAQCAtMjcxLDE1ICsyNzMsMTAgQEAgRmV0Y2hC
b2R5OjpUYWtlbkRhdGEgRmV0Y2hCb2R5Ojp0YWtlKCkKICAgICBpZiAoaXNGb3JtRGF0YSgpKQog
ICAgICAgICByZXR1cm4gZm9ybURhdGFCb2R5KCk7CiAKLSAgICBpZiAoaXNUZXh0KCkpIHsKLSAg
ICAgICAgYXV0byBkYXRhID0gVVRGOEVuY29kaW5nKCkuZW5jb2RlKHRleHRCb2R5KCksIEVudGl0
aWVzRm9yVW5lbmNvZGFibGVzKTsKLSAgICAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRl
KGRhdGEuZGF0YSgpLCBkYXRhLmxlbmd0aCgpKTsKLSAgICB9Ci0KLSAgICBpZiAoaXNVUkxTZWFy
Y2hQYXJhbXMoKSkgewotICAgICAgICBhdXRvIGRhdGEgPSBVVEY4RW5jb2RpbmcoKS5lbmNvZGUo
dXJsU2VhcmNoUGFyYW1zQm9keSgpLnRvU3RyaW5nKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVz
KTsKLSAgICAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEuZGF0YSgpLCBkYXRh
Lmxlbmd0aCgpKTsKLSAgICB9CisgICAgaWYgKGlzVGV4dCgpKQorICAgICAgICByZXR1cm4gU2hh
cmVkQnVmZmVyOjpjcmVhdGUoVVRGOEVuY29kaW5nKCkuZW5jb2RlKHRleHRCb2R5KCksIEVudGl0
aWVzRm9yVW5lbmNvZGFibGVzKSk7CisgICAgaWYgKGlzVVJMU2VhcmNoUGFyYW1zKCkpCisgICAg
ICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShVVEY4RW5jb2RpbmcoKS5lbmNvZGUodXJs
U2VhcmNoUGFyYW1zQm9keSgpLnRvU3RyaW5nKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKSk7
CiAKICAgICBpZiAoaXNBcnJheUJ1ZmZlcigpKQogICAgICAgICByZXR1cm4gU2hhcmVkQnVmZmVy
OjpjcmVhdGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYXJyYXlCdWZmZXJCb2R5KCku
ZGF0YSgpKSwgYXJyYXlCdWZmZXJCb2R5KCkuYnl0ZUxlbmd0aCgpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVy
LmNwcAkocmV2aXNpb24gMjI1MjA3KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2Nr
ZXRzL1dlYlNvY2tldERlZmxhdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNiBA
QAogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
ICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KICNpbmNsdWRlIDx6bGliLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Q
QUwvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxNy0xMS0yNyAgRGFyaW4gQWRsZXIgIDxkYXJp
bkBhcHBsZS5jb20+CisKKyAgICAgICAgTW9kZXJuaXplIHNvbWUgYXNwZWN0cyBvZiB0ZXh0IGNv
ZGVjcywgZWxpbWluYXRlIFdlYktpdCB1c2Ugb2Ygc3RyY2FzZWNtcAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMDA5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAgICAqIFBBTC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOiBBZGRlZCBVbmVuY29kYWJsZUhhbmRsaW5nLmguCisgICAgICAgICogcGFsL3Rl
eHQvVW5lbmNvZGFibGVIYW5kbGluZy5oOiBNb3ZlZCB0aGUgVW5lbmNvZGFibGVIYW5kbGluZyBl
bnVtZXJhdGlvbgorICAgICAgICBoZXJlIGZyb20gVGV4dENvZGVjLmguCisKIDIwMTctMTEtMjcg
IFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgT25lIHRv
byBtYW55IHplcm9lcyBpbiBtYWNPUyB2ZXJzaW9uIG51bWJlciBpbiBGZWF0dXJlRGVmaW5lcwpJ
bmRleDogU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BBTC9QQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMjI1MjA3KQorKysgU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsNiArMjUzLDcgQEAKIAkJ
MUM0ODc2REYxRjhEODM3NTAwQ0NFRUJEIC8qIExvZ2dpbmdDb2NvYS5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IExvZ2dpbmdDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUM2N0NFQTExRTMyRURBODAwRjgwRjJFIC8qIEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzY3Q0VBMjFFMzJFRTI2MDBGODBGMkUgLyogVmVy
c2lvbi54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBWZXJzaW9uLnhj
Y29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U1OTA5QzFGOTNCRjFFMDA2
N0Y4Q0YgLyogVW5lbmNvZGFibGVIYW5kbGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmVuY29kYWJs
ZUhhbmRsaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExMDI2NTg2MUY1Njc0
NjEwMEI0Qzg0NCAvKiBGb3VuZGF0aW9uU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZvdW5kYXRpb25TUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTEw
MjY1ODgxRjU2NzQ3QTAwQjRDODQ0IC8qIEhJVG9vbGJveFNQSS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBISVRvb2xib3hTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTEwMjY1OEExRjU2NzQ4QzAwQjRDODQ0IC8qIFF1aWNrRHJhd1NQSS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWlja0RyYXdTUEkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTU0MCw2ICs1NDEsNyBAQAogCQkJCUEzMEQ0MTIzMUYwREQxMDUwMEI3
MTk1NCAvKiBtYWMgKi8sCiAJCQkJQTMwRDQxMUYxRjBERDBFQTAwQjcxOTU0IC8qIEtpbGxSaW5n
LmNwcCAqLywKIAkJCQlBMzBENDExRTFGMEREMEVBMDBCNzE5NTQgLyogS2lsbFJpbmcuaCAqLywK
KwkJCQk5M0U1OTA5QzFGOTNCRjFFMDA2N0Y4Q0YgLyogVW5lbmNvZGFibGVIYW5kbGluZy5oICov
LAogCQkJKTsKIAkJCXBhdGggPSB0ZXh0OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9VbmVuY29kYWJsZUhhbmRsaW5nLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L1VuZW5jb2RhYmxlSGFuZGxp
bmcuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvVW5lbmNv
ZGFibGVIYW5kbGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFNwZWNpZmllcyB3aGF0IHdpbGwgaGFwcGVuIHdo
ZW4gYSBjaGFyYWN0ZXIgaXMgZW5jb3VudGVyZWQgdGhhdCBpcworLy8gbm90IGVuY29kYWJsZSBp
biB0aGUgY2hhcmFjdGVyIHNldC4KK2VudW0gVW5lbmNvZGFibGVIYW5kbGluZyB7CisgICAgLy8g
U3Vic3RpdHV0ZXMgdGhlIHJlcGxhY2VtZW50IGNoYXJhY3RlciAiPyIuCisgICAgUXVlc3Rpb25N
YXJrc0ZvclVuZW5jb2RhYmxlcywKKworICAgIC8vIEVuY29kZXMgdGhlIGNoYXJhY3RlciBhcyBh
biBYTUwgZW50aXR5LiBGb3IgZXhhbXBsZSwgVSswNkRFCisgICAgLy8gd291bGQgYmUgIiYjMTc1
ODsiICgweDZERSA9IDE3NTggaW4gb2N0YWwpLgorICAgIEVudGl0aWVzRm9yVW5lbmNvZGFibGVz
LAorCisgICAgLy8gRW5jb2RlcyB0aGUgY2hhcmFjdGVyIGFzIGVuIGVudGl0eSBhcyBhYm92ZSwg
YnV0IGVzY2FwZWQKKyAgICAvLyBub24tYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuIFRoaXMgaXMg
dXNlZCBpbiBVUkxzLgorICAgIC8vIEZvciBleGFtcGxlLCBVKzZERSB3b3VsZCBiZSAiJTI2JTIz
MTc1OCUzQiIuCisgICAgVVJMRW5jb2RlZEVudGl0aWVzRm9yVW5lbmNvZGFibGVzCit9OworCit9
CisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9JZGVudGlmaWVyUmVwLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL0lkZW50aWZpZXJSZXAuaAkocmV2aXNpb24gMjI1
MjA3KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL0lkZW50aWZpZXJSZXAuaAkod29ya2luZyBj
b3B5KQpAQCAtMjMsMTIgKzIzLDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVm
IElkZW50aWZpZXJSZXBfaAotI2RlZmluZSBJZGVudGlmaWVyUmVwX2gKKyNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5o
PgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzAsNCArNjgsMyBAQCBwcml2YXRlOgogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBJZGVudGlmaWVyUmVwX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcs
NyArNDcsNiBAQAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUg
PHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iQnVpbGRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iQnVpbGRlci5j
cHAJKHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYkJ1aWxk
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxNCArNDksMTQgQEAgdm9pZCBCbG9iQnVpbGRl
cjo6YXBwZW5kKFJlZlB0cjxBcnJheUJ1ZgogewogICAgIGlmICghYXJyYXlCdWZmZXIpCiAgICAg
ICAgIHJldHVybjsKLSAgICBtX2FwcGVuZGFibGVEYXRhLmFwcGVuZChzdGF0aWNfY2FzdDxjb25z
dCBjaGFyKj4oYXJyYXlCdWZmZXItPmRhdGEoKSksIGFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkp
OworICAgIG1fYXBwZW5kYWJsZURhdGEuYXBwZW5kKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihhcnJheUJ1ZmZlci0+ZGF0YSgpKSwgYXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSk7CiB9CiAK
IHZvaWQgQmxvYkJ1aWxkZXI6OmFwcGVuZChSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiYmIGFycmF5
QnVmZmVyVmlldykKIHsKICAgICBpZiAoIWFycmF5QnVmZmVyVmlldykKICAgICAgICAgcmV0dXJu
OwotICAgIG1fYXBwZW5kYWJsZURhdGEuYXBwZW5kKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihh
cnJheUJ1ZmZlclZpZXctPmJhc2VBZGRyZXNzKCkpLCBhcnJheUJ1ZmZlclZpZXctPmJ5dGVMZW5n
dGgoKSk7CisgICAgbV9hcHBlbmRhYmxlRGF0YS5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KGFycmF5QnVmZmVyVmlldy0+YmFzZUFkZHJlc3MoKSksIGFycmF5QnVmZmVyVmlldy0+
Ynl0ZUxlbmd0aCgpKTsKIH0KIAogdm9pZCBCbG9iQnVpbGRlcjo6YXBwZW5kKFJlZlB0cjxCbG9i
PiYmIGJsb2IpCkBAIC03MCwxMyArNzAsMTYgQEAgdm9pZCBCbG9iQnVpbGRlcjo6YXBwZW5kKFJl
ZlB0cjxCbG9iPiYmIAogCiB2b2lkIEJsb2JCdWlsZGVyOjphcHBlbmQoY29uc3QgU3RyaW5nJiB0
ZXh0KQogewotICAgIENTdHJpbmcgdXRmOFRleHQgPSBVVEY4RW5jb2RpbmcoKS5lbmNvZGUodGV4
dCwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOworICAgIGF1dG8gYnl0ZXMgPSBVVEY4RW5jb2Rp
bmcoKS5lbmNvZGUodGV4dCwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwogCiAgICAgaWYgKG1f
ZW5kaW5ncyA9PSBCbG9iTGluZUVuZGluZ3M6Ok5hdGl2ZSkKLSAgICAgICAgbm9ybWFsaXplQW5k
QXBwZW5kTGluZUVuZGluZ3NUb05hdGl2ZSh1dGY4VGV4dCwgbV9hcHBlbmRhYmxlRGF0YSk7Cisg
ICAgICAgIGJ5dGVzID0gbm9ybWFsaXplTGluZUVuZGluZ3NUb05hdGl2ZShXVEZNb3ZlKGJ5dGVz
KSk7CisKKyAgICBpZiAobV9hcHBlbmRhYmxlRGF0YS5pc0VtcHR5KCkpCisgICAgICAgIG1fYXBw
ZW5kYWJsZURhdGEgPSBXVEZNb3ZlKGJ5dGVzKTsKICAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJU
KG1fZW5kaW5ncyA9PSBCbG9iTGluZUVuZGluZ3M6OlRyYW5zcGFyZW50KTsKLSAgICAgICAgbV9h
cHBlbmRhYmxlRGF0YS5hcHBlbmQodXRmOFRleHQuZGF0YSgpLCB1dGY4VGV4dC5sZW5ndGgoKSk7
CisgICAgICAgIC8vIEZJWE1FOiBXb3VsZCBpdCBiZSBiZXR0ZXIgdG8gbW92ZSBtdWx0aXBsZSB2
ZWN0b3JzIGludG8gbV9pdGVtcyBpbnN0ZWFkIG9mIG1lcmdpbmcgdGhlbSBpbnRvIG9uZT8KKyAg
ICAgICAgbV9hcHBlbmRhYmxlRGF0YS5hcHBlbmRWZWN0b3IoYnl0ZXMpOwogICAgIH0KIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJz
ZXRQYXJzZXIuY3BwCShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw2ICsy
OSw3IEBACiAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRp
b21zLmgiCisjaW5jbHVkZSAiVGV4dENvZGVjLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nUmVn
aXN0cnkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTUzLDcgKzE1NCw4IEBAIGJvb2wg
SFRNTE1ldGFDaGFyc2V0UGFyc2VyOjpjaGVja0Zvck1ldGEKIAogICAgIGNvbnN0ZXhwciBpbnQg
Ynl0ZXNUb0NoZWNrVW5jb25kaXRpb25hbGx5ID0gMTAyNDsKIAotICAgIG1faW5wdXQuYXBwZW5k
KG1fY29kZWMtPmRlY29kZShkYXRhLCBsZW5ndGgpKTsKKyAgICBib29sIGlnbm9yZWRTYXdFcnJv
ckZsYWc7CisgICAgbV9pbnB1dC5hcHBlbmQobV9jb2RlYy0+ZGVjb2RlKGRhdGEsIGxlbmd0aCwg
ZmFsc2UsIGZhbHNlLCBpZ25vcmVkU2F3RXJyb3JGbGFnKSk7CiAKICAgICB3aGlsZSAoYXV0byB0
b2tlbiA9IG1fdG9rZW5pemVyLm5leHRUb2tlbihtX2lucHV0KSkgewogICAgICAgICBib29sIGlz
RW5kID0gdG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW46OkVuZFRhZzsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
CShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckRPTUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxNSwxMCArMTQxNSwxMCBA
QCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVDb250ZW50U2VjdXJpdHlQb2xpCiAgICAgLy8gU2VlIDxo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1MTg0Pi4KICAgICBUZXh0
RW5jb2RpbmcgZG9jdW1lbnRFbmNvZGluZyA9IGVsZW1lbnQuZG9jdW1lbnQoKS50ZXh0RW5jb2Rp
bmcoKTsKICAgICBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nVG9Vc2UgPSBkb2N1bWVudEVu
Y29kaW5nLmlzVmFsaWQoKSA/IGRvY3VtZW50RW5jb2RpbmcgOiBVVEY4RW5jb2RpbmcoKTsKLSAg
ICBDU3RyaW5nIGNvbnRlbnQgPSBlbmNvZGluZ1RvVXNlLmVuY29kZShUZXh0Tm9kZVRyYXZlcnNh
bDo6Y29udGVudHNBc1N0cmluZyhlbGVtZW50KSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwor
ICAgIGF1dG8gY29udGVudCA9IGVuY29kaW5nVG9Vc2UuZW5jb2RlKFRleHROb2RlVHJhdmVyc2Fs
Ojpjb250ZW50c0FzU3RyaW5nKGVsZW1lbnQpLCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7CiAg
ICAgYXV0byBjcnlwdG9EaWdlc3QgPSBQQUw6OkNyeXB0b0RpZ2VzdDo6Y3JlYXRlKFBBTDo6Q3J5
cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV8yNTYpOwotICAgIGNyeXB0b0RpZ2VzdC0+YWRkQnl0
ZXMoY29udGVudC5kYXRhKCksIGNvbnRlbnQubGVuZ3RoKCkpOwotICAgIFZlY3Rvcjx1aW50OF90
PiBkaWdlc3QgPSBjcnlwdG9EaWdlc3QtPmNvbXB1dGVIYXNoKCk7CisgICAgY3J5cHRvRGlnZXN0
LT5hZGRCeXRlcyhjb250ZW50LmRhdGEoKSwgY29udGVudC5zaXplKCkpOworICAgIGF1dG8gZGln
ZXN0ID0gY3J5cHRvRGlnZXN0LT5jb21wdXRlSGFzaCgpOwogICAgIHJldHVybiBtYWtlU3RyaW5n
KCJzaGEyNTYtIiwgYmFzZTY0RW5jb2RlKGRpZ2VzdC5kYXRhKCksIGRpZ2VzdC5zaXplKCkpKTsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0Rp
Z2VzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5
cHRvZ3JhcGhpY0RpZ2VzdC5jcHAJKHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTQsNyArMTU0LDcgQEAgc3RhdGljIFBBTDo6Q3J5cHRvRGlnZXN0OjpBbGdvcml0aG0gdG9D
cgogICAgIHJldHVybiBQQUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfNTEyOwogfQog
Ci1SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QgY3J5cHRvZ3JhcGhpY0RpZ2VzdEZvckJ5dGVz
KFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3JpdGhtIGFsZ29yaXRobSwgY29uc3Qg
Y2hhciogYnl0ZXMsIHNpemVfdCBsZW5ndGgpCitSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Qg
Y3J5cHRvZ3JhcGhpY0RpZ2VzdEZvckJ5dGVzKFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6
QWxnb3JpdGhtIGFsZ29yaXRobSwgY29uc3Qgdm9pZCogYnl0ZXMsIHNpemVfdCBsZW5ndGgpCiB7
CiAgICAgYXV0byBjcnlwdG9EaWdlc3QgPSBQQUw6OkNyeXB0b0RpZ2VzdDo6Y3JlYXRlKHRvQ3J5
cHRvRGlnZXN0QWxnb3JpdGhtKGFsZ29yaXRobSkpOwogICAgIGNyeXB0b0RpZ2VzdC0+YWRkQnl0
ZXMoYnl0ZXMsIGxlbmd0aCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VD
cnlwdG9ncmFwaGljRGlnZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVy
L1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oCShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc2LDcgKzc2LDcgQEAgc3RkOjpvcHRpb25hbDxFbmNvZGVkUmVzb3VyY2VDcnlw
dG9ncmFwaAogCiBzdGQ6Om9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gZGVj
b2RlRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBFbmNvZGVkUmVzb3Vy
Y2VDcnlwdG9ncmFwaGljRGlnZXN0Jik7CiAKLVJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCBj
cnlwdG9ncmFwaGljRGlnZXN0Rm9yQnl0ZXMoUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpB
bGdvcml0aG0sIGNvbnN0IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoKTsKK1Jlc291cmNlQ3J5
cHRvZ3JhcGhpY0RpZ2VzdCBjcnlwdG9ncmFwaGljRGlnZXN0Rm9yQnl0ZXMoUmVzb3VyY2VDcnlw
dG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG0sIGNvbnN0IHZvaWQqIGJ5dGVzLCBzaXplX3QgbGVu
Z3RoKTsKIAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVj
b2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJj
ZURlY29kZXIuY3BwCShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
VGV4dFJlc291cmNlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAv
KgogICAgIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRl
KQotICAgIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwg
MjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgQ29weXJpZ2h0
IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgIENvcHly
aWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5j
b20pCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiVGV4dEVuY29kaW5n
RGV0ZWN0b3IuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmdSZWdpc3RyeS5oIgogI2luY2x1ZGUg
PHd0Zi9BU0NJSUNUeXBlLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMyMiwyMCArMzIxLDE4IEBAIGNvbnN0IFRleHRFbmNvZGlu
ZyYgVGV4dFJlc291cmNlRGVjb2RlcjoKICAgICByZXR1cm4gc3BlY2lmaWVkRGVmYXVsdEVuY29k
aW5nOwogfQogCi1UZXh0UmVzb3VyY2VEZWNvZGVyOjpUZXh0UmVzb3VyY2VEZWNvZGVyKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYgc3BlY2lmaWVkRGVmYXVsdEVu
Y29kaW5nLCBib29sIHVzZXNFbmNvZGluZ0RldGVjdG9yKQoraW5saW5lIFRleHRSZXNvdXJjZURl
Y29kZXI6OlRleHRSZXNvdXJjZURlY29kZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3Qg
VGV4dEVuY29kaW5nJiBzcGVjaWZpZWREZWZhdWx0RW5jb2RpbmcsIGJvb2wgdXNlc0VuY29kaW5n
RGV0ZWN0b3IpCiAgICAgOiBtX2NvbnRlbnRUeXBlKGRldGVybWluZUNvbnRlbnRUeXBlKG1pbWVU
eXBlKSkKICAgICAsIG1fZW5jb2RpbmcoZGVmYXVsdEVuY29kaW5nKG1fY29udGVudFR5cGUsIHNw
ZWNpZmllZERlZmF1bHRFbmNvZGluZykpCi0gICAgLCBtX3NvdXJjZShEZWZhdWx0RW5jb2Rpbmcp
Ci0gICAgLCBtX2hpbnRFbmNvZGluZyhudWxscHRyKQotICAgICwgbV9jaGVja2VkRm9yQk9NKGZh
bHNlKQotICAgICwgbV9jaGVja2VkRm9yQ1NTQ2hhcnNldChmYWxzZSkKLSAgICAsIG1fY2hlY2tl
ZEZvckhlYWRDaGFyc2V0KGZhbHNlKQotICAgICwgbV91c2VMZW5pZW50WE1MRGVjb2RpbmcoZmFs
c2UpCi0gICAgLCBtX3Nhd0Vycm9yKGZhbHNlKQogICAgICwgbV91c2VzRW5jb2RpbmdEZXRlY3Rv
cih1c2VzRW5jb2RpbmdEZXRlY3RvcikKIHsKIH0KIAorUmVmPFRleHRSZXNvdXJjZURlY29kZXI+
IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25z
dCBUZXh0RW5jb2RpbmcmIGRlZmF1bHRFbmNvZGluZywgYm9vbCB1c2VzRW5jb2RpbmdEZXRlY3Rv
cikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUZXh0UmVzb3VyY2VEZWNvZGVyKG1pbWVU
eXBlLCBkZWZhdWx0RW5jb2RpbmcsIHVzZXNFbmNvZGluZ0RldGVjdG9yKSk7Cit9CisKIFRleHRS
ZXNvdXJjZURlY29kZXI6On5UZXh0UmVzb3VyY2VEZWNvZGVyKCkgPSBkZWZhdWx0OwogCiB2b2lk
IFRleHRSZXNvdXJjZURlY29kZXI6OnNldEVuY29kaW5nKGNvbnN0IFRleHRFbmNvZGluZyYgZW5j
b2RpbmcsIEVuY29kaW5nU291cmNlIHNvdXJjZSkKQEAgLTM0Niw3ICszNDMsNyBAQCB2b2lkIFRl
eHRSZXNvdXJjZURlY29kZXI6OnNldEVuY29kaW5nKGNvCiAKICAgICAvLyBXaGVuIGVuY29kaW5n
IGNvbWVzIGZyb20gbWV0YSB0YWcgKGkuZS4gaXQgY2Fubm90IGJlIFhNTCBmaWxlcyBzZW50IHZp
YSBYSFIpLAogICAgIC8vIHRyZWF0IHgtdXNlci1kZWZpbmVkIGFzIHdpbmRvd3MtMTI1MiAoYnVn
IDE4MjcwKQotICAgIGlmIChzb3VyY2UgPT0gRW5jb2RpbmdGcm9tTWV0YVRhZyAmJiBzdHJjYXNl
Y21wKGVuY29kaW5nLm5hbWUoKSwgIngtdXNlci1kZWZpbmVkIikgPT0gMCkKKyAgICBpZiAoc291
cmNlID09IEVuY29kaW5nRnJvbU1ldGFUYWcgJiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UoZW5jb2RpbmcubmFtZSgpLCAieC11c2VyLWRlZmluZWQiKSkKICAgICAgICAgbV9lbmNvZGlu
ZyA9ICJ3aW5kb3dzLTEyNTIiOwogICAgIGVsc2UgaWYgKHNvdXJjZSA9PSBFbmNvZGluZ0Zyb21N
ZXRhVGFnIHx8IHNvdXJjZSA9PSBFbmNvZGluZ0Zyb21YTUxIZWFkZXIgfHwgc291cmNlID09IEVu
Y29kaW5nRnJvbUNTU0NoYXJzZXQpICAgICAgICAKICAgICAgICAgbV9lbmNvZGluZyA9IGVuY29k
aW5nLmNsb3Nlc3RCeXRlQmFzZWRFcXVpdmFsZW50KCk7CkBAIC01OTMsMzUgKzU5MCwzMyBAQCB2
b2lkIFRleHRSZXNvdXJjZURlY29kZXI6OmRldGVjdEphcGFuZXNlCiAvLyAgIGluIHRoZSBmaXJz
dCBwbGFjZS4gCiBib29sIFRleHRSZXNvdXJjZURlY29kZXI6OnNob3VsZEF1dG9EZXRlY3QoKSBj
b25zdAogewotICAgIC8vIEp1c3QgY2hlY2tpbmcgbV9oaW50RW5jb2Rpbmcgc3VmZmljZXMgaGVy
ZSBiZWNhdXNlIGl0J3Mgb25seSBzZXQKLSAgICAvLyBpbiBzZXRIaW50RW5jb2Rpbmcgd2hlbiB0
aGUgc291cmNlIGlzIEF1dG9EZXRlY3RlZEVuY29kaW5nLgogICAgIHJldHVybiBtX3VzZXNFbmNv
ZGluZ0RldGVjdG9yCi0gICAgICAgICYmIChtX3NvdXJjZSA9PSBEZWZhdWx0RW5jb2RpbmcgfHwg
KG1fc291cmNlID09IEVuY29kaW5nRnJvbVBhcmVudEZyYW1lICYmIG1faGludEVuY29kaW5nKSk7
IAorICAgICAgICAmJiAobV9zb3VyY2UgPT0gRGVmYXVsdEVuY29kaW5nIHx8IChtX3NvdXJjZSA9
PSBFbmNvZGluZ0Zyb21QYXJlbnRGcmFtZSAmJiBtX3BhcmVudEZyYW1lQXV0b0RldGVjdGVkRW5j
b2RpbmcpKTsKIH0KIAotU3RyaW5nIFRleHRSZXNvdXJjZURlY29kZXI6OmRlY29kZShjb25zdCBj
aGFyKiBkYXRhLCBzaXplX3QgbGVuKQorU3RyaW5nIFRleHRSZXNvdXJjZURlY29kZXI6OmRlY29k
ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKQogewogICAgIHNpemVfdCBsZW5ndGhP
ZkJPTSA9IDA7CiAgICAgaWYgKCFtX2NoZWNrZWRGb3JCT00pCi0gICAgICAgIGxlbmd0aE9mQk9N
ID0gY2hlY2tGb3JCT00oZGF0YSwgbGVuKTsKKyAgICAgICAgbGVuZ3RoT2ZCT00gPSBjaGVja0Zv
ckJPTShkYXRhLCBsZW5ndGgpOwogCiAgICAgYm9vbCBtb3ZlZERhdGFUb0J1ZmZlciA9IGZhbHNl
OwogCiAgICAgaWYgKG1fY29udGVudFR5cGUgPT0gQ1NTICYmICFtX2NoZWNrZWRGb3JDU1NDaGFy
c2V0KQotICAgICAgICBpZiAoIWNoZWNrRm9yQ1NTQ2hhcnNldChkYXRhLCBsZW4sIG1vdmVkRGF0
YVRvQnVmZmVyKSkKKyAgICAgICAgaWYgKCFjaGVja0ZvckNTU0NoYXJzZXQoZGF0YSwgbGVuZ3Ro
LCBtb3ZlZERhdGFUb0J1ZmZlcikpCiAgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsK
IAogICAgIGlmICgobV9jb250ZW50VHlwZSA9PSBIVE1MIHx8IG1fY29udGVudFR5cGUgPT0gWE1M
KSAmJiAhbV9jaGVja2VkRm9ySGVhZENoYXJzZXQpIC8vIEhUTUwgYW5kIFhNTAotICAgICAgICBp
ZiAoIWNoZWNrRm9ySGVhZENoYXJzZXQoZGF0YSwgbGVuLCBtb3ZlZERhdGFUb0J1ZmZlcikpCisg
ICAgICAgIGlmICghY2hlY2tGb3JIZWFkQ2hhcnNldChkYXRhLCBsZW5ndGgsIG1vdmVkRGF0YVRv
QnVmZmVyKSkKICAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCiAgICAgLy8gRklY
TUU6IEl0IGlzIHdyb25nIHRvIGNoYW5nZSB0aGUgZW5jb2RpbmcgZG93bnN0cmVhbSBhZnRlciB3
ZSBoYXZlIGFscmVhZHkgZG9uZSBzb21lIGRlY29kaW5nLgogICAgIGlmIChzaG91bGRBdXRvRGV0
ZWN0KCkpIHsKICAgICAgICAgaWYgKG1fZW5jb2RpbmcuaXNKYXBhbmVzZSgpKQotICAgICAgICAg
ICAgZGV0ZWN0SmFwYW5lc2VFbmNvZGluZyhkYXRhLCBsZW4pOyAvLyBGSVhNRTogV2Ugc2hvdWxk
IHVzZSBkZXRlY3RUZXh0RW5jb2RpbmcoKSBmb3IgYWxsIGxhbmd1YWdlcy4KKyAgICAgICAgICAg
IGRldGVjdEphcGFuZXNlRW5jb2RpbmcoZGF0YSwgbGVuZ3RoKTsgLy8gRklYTUU6IFdlIHNob3Vs
ZCB1c2UgZGV0ZWN0VGV4dEVuY29kaW5nKCkgZm9yIGFsbCBsYW5ndWFnZXMuCiAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgVGV4dEVuY29kaW5nIGRldGVjdGVkRW5jb2Rpbmc7Ci0gICAgICAg
ICAgICBpZiAoZGV0ZWN0VGV4dEVuY29kaW5nKGRhdGEsIGxlbiwgbV9oaW50RW5jb2RpbmcsICZk
ZXRlY3RlZEVuY29kaW5nKSkKKyAgICAgICAgICAgIGlmIChkZXRlY3RUZXh0RW5jb2RpbmcoZGF0
YSwgbGVuZ3RoLCBtX3BhcmVudEZyYW1lQXV0b0RldGVjdGVkRW5jb2RpbmcsICZkZXRlY3RlZEVu
Y29kaW5nKSkKICAgICAgICAgICAgICAgICBzZXRFbmNvZGluZyhkZXRlY3RlZEVuY29kaW5nLCBB
dXRvRGV0ZWN0ZWRFbmNvZGluZyk7CiAgICAgICAgIH0KICAgICB9CkBAIC02MzIsMTIgKzYyNywx
MiBAQCBTdHJpbmcgVGV4dFJlc291cmNlRGVjb2Rlcjo6ZGVjb2RlKGNvbnN0CiAgICAgICAgIG1f
Y29kZWMgPSBuZXdUZXh0Q29kZWMobV9lbmNvZGluZyk7CiAKICAgICBpZiAobV9idWZmZXIuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gbV9jb2RlYy0+ZGVjb2RlKGRhdGEgKyBsZW5ndGhPZkJP
TSwgbGVuIC0gbGVuZ3RoT2ZCT00sIGZhbHNlLCBtX2NvbnRlbnRUeXBlID09IFhNTCwgbV9zYXdF
cnJvcik7CisgICAgICAgIHJldHVybiBtX2NvZGVjLT5kZWNvZGUoZGF0YSArIGxlbmd0aE9mQk9N
LCBsZW5ndGggLSBsZW5ndGhPZkJPTSwgZmFsc2UsIG1fY29udGVudFR5cGUgPT0gWE1MLCBtX3Nh
d0Vycm9yKTsKIAogICAgIGlmICghbW92ZWREYXRhVG9CdWZmZXIpIHsKICAgICAgICAgc2l6ZV90
IG9sZFNpemUgPSBtX2J1ZmZlci5zaXplKCk7Ci0gICAgICAgIG1fYnVmZmVyLmdyb3cob2xkU2l6
ZSArIGxlbik7Ci0gICAgICAgIG1lbWNweShtX2J1ZmZlci5kYXRhKCkgKyBvbGRTaXplLCBkYXRh
LCBsZW4pOworICAgICAgICBtX2J1ZmZlci5ncm93KG9sZFNpemUgKyBsZW5ndGgpOworICAgICAg
ICBtZW1jcHkobV9idWZmZXIuZGF0YSgpICsgb2xkU2l6ZSwgZGF0YSwgbGVuZ3RoKTsKICAgICB9
CiAKICAgICBTdHJpbmcgcmVzdWx0ID0gbV9jb2RlYy0+ZGVjb2RlKG1fYnVmZmVyLmRhdGEoKSAr
IGxlbmd0aE9mQk9NLCBtX2J1ZmZlci5zaXplKCkgLSBsZW5ndGhPZkJPTSwgZmFsc2UsIG1fY29u
dGVudFR5cGUgPT0gWE1MICYmICFtX3VzZUxlbmllbnRYTUxEZWNvZGluZywgbV9zYXdFcnJvcik7
CkBAIC02NDcsMTUgKzY0MiwxNCBAQCBTdHJpbmcgVGV4dFJlc291cmNlRGVjb2Rlcjo6ZGVjb2Rl
KGNvbnN0CiAKIFN0cmluZyBUZXh0UmVzb3VyY2VEZWNvZGVyOjpmbHVzaCgpCiB7Ci0gICAvLyBJ
ZiB3ZSBjYW4gbm90IGlkZW50aWZ5IHRoZSBlbmNvZGluZyBldmVuIGFmdGVyIGEgZG9jdW1lbnQg
aXMgY29tcGxldGVseQotICAgLy8gbG9hZGVkLCB3ZSBuZWVkIHRvIGRldGVjdCB0aGUgZW5jb2Rp
bmcgaWYgb3RoZXIgY29uZGl0aW9ucyBmb3IKLSAgIC8vIGF1dG9kZXRlY3Rpb24gaXMgc2F0aXNm
aWVkLgorICAgIC8vIElmIHdlIGNhbiBub3QgaWRlbnRpZnkgdGhlIGVuY29kaW5nIGV2ZW4gYWZ0
ZXIgYSBkb2N1bWVudCBpcyBjb21wbGV0ZWx5CisgICAgLy8gbG9hZGVkLCB3ZSBuZWVkIHRvIGRl
dGVjdCB0aGUgZW5jb2RpbmcgaWYgb3RoZXIgY29uZGl0aW9ucyBmb3IKKyAgICAvLyBhdXRvZGV0
ZWN0aW9uIGlzIHNhdGlzZmllZC4KICAgICBpZiAobV9idWZmZXIuc2l6ZSgpICYmIHNob3VsZEF1
dG9EZXRlY3QoKQogICAgICAgICAmJiAoKCFtX2NoZWNrZWRGb3JIZWFkQ2hhcnNldCAmJiAobV9j
b250ZW50VHlwZSA9PSBIVE1MIHx8IG1fY29udGVudFR5cGUgPT0gWE1MKSkgfHwgKCFtX2NoZWNr
ZWRGb3JDU1NDaGFyc2V0ICYmIChtX2NvbnRlbnRUeXBlID09IENTUykpKSkgewotICAgICAgICAg
VGV4dEVuY29kaW5nIGRldGVjdGVkRW5jb2Rpbmc7Ci0gICAgICAgICBpZiAoZGV0ZWN0VGV4dEVu
Y29kaW5nKG1fYnVmZmVyLmRhdGEoKSwgbV9idWZmZXIuc2l6ZSgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2hpbnRFbmNvZGluZywgJmRldGVjdGVkRW5jb2RpbmcpKQotICAg
ICAgICAgICAgIHNldEVuY29kaW5nKGRldGVjdGVkRW5jb2RpbmcsIEF1dG9EZXRlY3RlZEVuY29k
aW5nKTsKKyAgICAgICAgVGV4dEVuY29kaW5nIGRldGVjdGVkRW5jb2Rpbmc7CisgICAgICAgIGlm
IChkZXRlY3RUZXh0RW5jb2RpbmcobV9idWZmZXIuZGF0YSgpLCBtX2J1ZmZlci5zaXplKCksIG1f
cGFyZW50RnJhbWVBdXRvRGV0ZWN0ZWRFbmNvZGluZywgJmRldGVjdGVkRW5jb2RpbmcpKQorICAg
ICAgICAgICAgc2V0RW5jb2RpbmcoZGV0ZWN0ZWRFbmNvZGluZywgQXV0b0RldGVjdGVkRW5jb2Rp
bmcpOwogICAgIH0KIAogICAgIGlmICghbV9jb2RlYykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
bG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuaAkocmV2aXNpb24gMjI1MjA3KQorKysgU291cmNl
L1dlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw3ICsxLDcgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xs
QG1waS1oZC5tcGcuZGUpCiAgICAgQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFr
b3YgKGFwQG55cG9wLmNvbSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgIENvcHlyaWdodCAoQykgMjAwNi0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjgsNiAr
MjgsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MTWV0YUNoYXJzZXRQYXJz
ZXI7CitjbGFzcyBUZXh0Q29kZWM7CiAKIGNsYXNzIFRleHRSZXNvdXJjZURlY29kZXIgOiBwdWJs
aWMgUmVmQ291bnRlZDxUZXh0UmVzb3VyY2VEZWNvZGVyPiB7CiBwdWJsaWM6CkBAIC00MiwzNSAr
NDMsMjYgQEAgcHVibGljOgogICAgICAgICBFbmNvZGluZ0Zyb21QYXJlbnRGcmFtZQogICAgIH07
CiAKLSAgICBzdGF0aWMgUmVmPFRleHRSZXNvdXJjZURlY29kZXI+IGNyZWF0ZShjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBjb25zdCBUZXh0RW5jb2RpbmcmIGRlZmF1bHRFbmNvZGluZyA9IFRleHRF
bmNvZGluZygpLCBib29sIHVzZXNFbmNvZGluZ0RldGVjdG9yID0gZmFsc2UpCi0gICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUZXh0UmVzb3VyY2VEZWNvZGVyKG1pbWVUeXBlLCBk
ZWZhdWx0RW5jb2RpbmcsIHVzZXNFbmNvZGluZ0RldGVjdG9yKSk7Ci0gICAgfQorICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBSZWY8VGV4dFJlc291cmNlRGVjb2Rlcj4gY3JlYXRlKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYgZGVmYXVsdEVuY29kaW5nID0geyB9
LCBib29sIHVzZXNFbmNvZGluZ0RldGVjdG9yID0gZmFsc2UpOwogICAgIFdFQkNPUkVfRVhQT1JU
IH5UZXh0UmVzb3VyY2VEZWNvZGVyKCk7CiAKICAgICB2b2lkIHNldEVuY29kaW5nKGNvbnN0IFRl
eHRFbmNvZGluZyYsIEVuY29kaW5nU291cmNlKTsKICAgICBjb25zdCBUZXh0RW5jb2RpbmcmIGVu
Y29kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGluZzsgfQogCi0gICAgYm9vbCBoYXNFcXVh
bEVuY29kaW5nRm9yQ2hhcnNldChjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICBib29sIGhhc0Vx
dWFsRW5jb2RpbmdGb3JDaGFyc2V0KGNvbnN0IFN0cmluZyYgY2hhcnNldCkgY29uc3Q7CiAKICAg
ICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBs
ZW5ndGgpOwogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBmbHVzaCgpOwogCiAgICAgV0VCQ09S
RV9FWFBPUlQgU3RyaW5nIGRlY29kZUFuZEZsdXNoKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBs
ZW5ndGgpOwogCi0gICAgdm9pZCBzZXRIaW50RW5jb2RpbmcoY29uc3QgVGV4dFJlc291cmNlRGVj
b2RlciogaGludERlY29kZXIpCi0gICAgewotICAgICAgICAvLyBoaW50RW5jb2RpbmcgaXMgZm9y
IHVzZSB3aXRoIGF1dG9kZXRlY3Rpb24sIHdoaWNoIHNob3VsZCBiZSAKLSAgICAgICAgLy8gb25s
eSBpbnZva2VkIHdoZW4gaGludEVuY29kaW5nIGNvbWVzIGZyb20gYXV0by1kZXRlY3Rpb24uCi0g
ICAgICAgIGlmIChoaW50RGVjb2RlciAmJiBoaW50RGVjb2Rlci0+bV9zb3VyY2UgPT0gQXV0b0Rl
dGVjdGVkRW5jb2RpbmcpCi0gICAgICAgICAgICBtX2hpbnRFbmNvZGluZyA9IGhpbnREZWNvZGVy
LT5lbmNvZGluZygpLm5hbWUoKTsKLSAgICB9CisgICAgdm9pZCBzZXRIaW50RW5jb2RpbmcoY29u
c3QgVGV4dFJlc291cmNlRGVjb2RlciogcGFyZW50RnJhbWVEZWNvZGVyKTsKICAgIAogICAgIHZv
aWQgdXNlTGVuaWVudFhNTERlY29kaW5nKCkgeyBtX3VzZUxlbmllbnRYTUxEZWNvZGluZyA9IHRy
dWU7IH0KICAgICBib29sIHNhd0Vycm9yKCkgY29uc3QgeyByZXR1cm4gbV9zYXdFcnJvcjsgfQog
CiBwcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFRleHRSZXNvdXJjZURlY29kZXIoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVGV4dEVuY29kaW5nJiBkZWZhdWx0RW5jb2RpbmcsIGJv
b2wgdXNlc0VuY29kaW5nRGV0ZWN0b3IpOworICAgIFRleHRSZXNvdXJjZURlY29kZXIoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVGV4dEVuY29kaW5nJiBkZWZhdWx0RW5jb2RpbmcsIGJv
b2wgdXNlc0VuY29kaW5nRGV0ZWN0b3IpOwogCiAgICAgZW51bSBDb250ZW50VHlwZSB7IFBsYWlu
VGV4dCwgSFRNTCwgWE1MLCBDU1MgfTsgLy8gUGxhaW5UZXh0IG9ubHkgY2hlY2tzIGZvciBCT00u
CiAgICAgc3RhdGljIENvbnRlbnRUeXBlIGRldGVybWluZUNvbnRlbnRUeXBlKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpOwpAQCAtODYsMTcgKzc4LDIyIEBAIHByaXZhdGU6CiAgICAgQ29udGVudFR5
cGUgbV9jb250ZW50VHlwZTsKICAgICBUZXh0RW5jb2RpbmcgbV9lbmNvZGluZzsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8VGV4dENvZGVjPiBtX2NvZGVjOwotICAgIEVuY29kaW5nU291cmNlIG1fc291
cmNlOwotICAgIGNvbnN0IGNoYXIqIG1faGludEVuY29kaW5nOwotICAgIFZlY3RvcjxjaGFyPiBt
X2J1ZmZlcjsKLSAgICBib29sIG1fY2hlY2tlZEZvckJPTTsKLSAgICBib29sIG1fY2hlY2tlZEZv
ckNTU0NoYXJzZXQ7Ci0gICAgYm9vbCBtX2NoZWNrZWRGb3JIZWFkQ2hhcnNldDsKLSAgICBib29s
IG1fdXNlTGVuaWVudFhNTERlY29kaW5nOyAvLyBEb24ndCBzdG9wIG9uIFhNTCBkZWNvZGluZyBl
cnJvcnMuCi0gICAgYm9vbCBtX3Nhd0Vycm9yOwotICAgIGJvb2wgbV91c2VzRW5jb2RpbmdEZXRl
Y3RvcjsKLQogICAgIHN0ZDo6dW5pcXVlX3B0cjxIVE1MTWV0YUNoYXJzZXRQYXJzZXI+IG1fY2hh
cnNldFBhcnNlcjsKKyAgICBFbmNvZGluZ1NvdXJjZSBtX3NvdXJjZSB7IERlZmF1bHRFbmNvZGlu
ZyB9OworICAgIGNvbnN0IGNoYXIqIG1fcGFyZW50RnJhbWVBdXRvRGV0ZWN0ZWRFbmNvZGluZyB7
IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8Y2hhcj4gbV9idWZmZXI7CisgICAgYm9vbCBtX2NoZWNr
ZWRGb3JCT00geyBmYWxzZSB9OworICAgIGJvb2wgbV9jaGVja2VkRm9yQ1NTQ2hhcnNldCB7IGZh
bHNlIH07CisgICAgYm9vbCBtX2NoZWNrZWRGb3JIZWFkQ2hhcnNldCB7IGZhbHNlIH07CisgICAg
Ym9vbCBtX3VzZUxlbmllbnRYTUxEZWNvZGluZyB7IGZhbHNlIH07IC8vIERvbid0IHN0b3Agb24g
WE1MIGRlY29kaW5nIGVycm9ycy4KKyAgICBib29sIG1fc2F3RXJyb3IgeyBmYWxzZSB9OworICAg
IGJvb2wgbV91c2VzRW5jb2RpbmdEZXRlY3RvciB7IGZhbHNlIH07CiB9OwogCitpbmxpbmUgdm9p
ZCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpzZXRIaW50RW5jb2RpbmcoY29uc3QgVGV4dFJlc291cmNl
RGVjb2RlciogcGFyZW50RnJhbWVEZWNvZGVyKQoreworICAgIGlmIChwYXJlbnRGcmFtZURlY29k
ZXIgJiYgcGFyZW50RnJhbWVEZWNvZGVyLT5tX3NvdXJjZSA9PSBBdXRvRGV0ZWN0ZWRFbmNvZGlu
ZykKKyAgICAgICAgbV9wYXJlbnRGcmFtZUF1dG9EZXRlY3RlZEVuY29kaW5nID0gcGFyZW50RnJh
bWVEZWNvZGVyLT5lbmNvZGluZygpLm5hbWUoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5EYXRh
LmgiCiAjaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2lu
Y2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVVVJRC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVHJlZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVRyZWUuY3BwCShyZXZpc2lvbiAyMjUyMDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDcgKzI4LDYgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCiAj
aW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlU2VyaWFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
U2VyaWFsaXplci5jcHAJKHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZVNlcmlhbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksOCArMTk5LDcgQEAgdm9p
ZCBQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplRnJhbWUoRnJhbQogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIFN0cmluZyB0ZXh0ID0gYWNjdW11bGF0b3Iuc2VyaWFsaXplTm9kZXMoKmRvY3Vt
ZW50LT5kb2N1bWVudEVsZW1lbnQoKSwgSW5jbHVkZU5vZGUpOwotICAgIENTdHJpbmcgZnJhbWVI
VE1MID0gdGV4dEVuY29kaW5nLmVuY29kZSh0ZXh0LCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7
Ci0gICAgbV9yZXNvdXJjZXMuYXBwZW5kKHsgdXJsLCBkb2N1bWVudC0+c3VnZ2VzdGVkTUlNRVR5
cGUoKSwgU2hhcmVkQnVmZmVyOjpjcmVhdGUoZnJhbWVIVE1MLmRhdGEoKSwgZnJhbWVIVE1MLmxl
bmd0aCgpKSB9KTsKKyAgICBtX3Jlc291cmNlcy5hcHBlbmQoeyB1cmwsIGRvY3VtZW50LT5zdWdn
ZXN0ZWRNSU1FVHlwZSgpLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZSh0ZXh0RW5jb2RpbmcuZW5jb2Rl
KHRleHQsIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKSkgfSk7CiAgICAgbV9yZXNvdXJjZVVSTHMu
YWRkKHVybCk7CiAKICAgICBmb3IgKGF1dG8mIG5vZGUgOiBub2RlcykgewpAQCAtMjY0LDkgKzI2
Myw3IEBAIHZvaWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUNTU1N0eWxlU2gKICAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBjaGVjayB3aGV0aGVyIGEgY2hhcnNldCBoYXMgYmVlbiBzcGVj
aWZpZWQgYW5kIGlmIG5vbmUgd2FzIGZvdW5kIGFkZCBvbmUuCiAgICAgICAgIFRleHRFbmNvZGlu
ZyB0ZXh0RW5jb2Rpbmcoc3R5bGVTaGVldC0+Y29udGVudHMoKS5jaGFyc2V0KCkpOwogICAgICAg
ICBBU1NFUlQodGV4dEVuY29kaW5nLmlzVmFsaWQoKSk7Ci0gICAgICAgIFN0cmluZyB0ZXh0U3Ry
aW5nID0gY3NzVGV4dC50b1N0cmluZygpOwotICAgICAgICBDU3RyaW5nIHRleHQgPSB0ZXh0RW5j
b2RpbmcuZW5jb2RlKHRleHRTdHJpbmcsIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKLSAgICAg
ICAgbV9yZXNvdXJjZXMuYXBwZW5kKHsgdXJsLCBBU0NJSUxpdGVyYWwgeyAidGV4dC9jc3MiIH0s
IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHRleHQuZGF0YSgpLCB0ZXh0Lmxlbmd0aCgpKSB9KTsKKyAg
ICAgICAgbV9yZXNvdXJjZXMuYXBwZW5kKHsgdXJsLCBBU0NJSUxpdGVyYWwgeyAidGV4dC9jc3Mi
IH0sIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHRleHRFbmNvZGluZy5lbmNvZGUoY3NzVGV4dC50b1N0
cmluZygpLCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcykpIH0pOwogICAgICAgICBtX3Jlc291cmNl
VVJMcy5hZGQodXJsKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9D
b250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAJKHJldmlzaW9uIDIyNTIwNykKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzMiwxMSArMzMyLDExIEBAIENvbnRlbnRTZWN1cml0eVBvbGljeTo6SGFzaElu
RW5mb3JjZWRBbmQKIAogICAgIC8vIEZJWE1FOiBDb21wdXRlIHRoZSBkaWdlc3Qgd2l0aCByZXNw
ZWN0IHRvIHRoZSByYXcgYnl0ZXMgcmVjZWl2ZWQgZnJvbSB0aGUgcGFnZS4KICAgICAvLyBTZWUg
PGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTUxODQ+LgotICAgIENT
dHJpbmcgY29udGVudENTdHJpbmcgPSBlbmNvZGluZ1RvVXNlLmVuY29kZShjb250ZW50LCBFbnRp
dGllc0ZvclVuZW5jb2RhYmxlcyk7CisgICAgYXV0byBlbmNvZGVkQ29udGVudCA9IGVuY29kaW5n
VG9Vc2UuZW5jb2RlKGNvbnRlbnQsIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKICAgICBib29s
IGZvdW5kSGFzaEluRW5mb3JjZWRQb2xpY2llcyA9IGZhbHNlOwogICAgIGJvb2wgZm91bmRIYXNo
SW5SZXBvcnRPbmx5UG9saWNpZXMgPSBmYWxzZTsKICAgICBmb3IgKGF1dG8gYWxnb3JpdGhtIDog
YWxnb3JpdGhtcykgewotICAgICAgICBDb250ZW50U2VjdXJpdHlQb2xpY3lIYXNoIGhhc2ggPSBj
cnlwdG9ncmFwaGljRGlnZXN0Rm9yQnl0ZXMoYWxnb3JpdGhtLCBjb250ZW50Q1N0cmluZy5kYXRh
KCksIGNvbnRlbnRDU3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAgQ29udGVudFNlY3VyaXR5UG9s
aWN5SGFzaCBoYXNoID0gY3J5cHRvZ3JhcGhpY0RpZ2VzdEZvckJ5dGVzKGFsZ29yaXRobSwgZW5j
b2RlZENvbnRlbnQuZGF0YSgpLCBlbmNvZGVkQ29udGVudC5zaXplKCkpOwogICAgICAgICBpZiAo
IWZvdW5kSGFzaEluRW5mb3JjZWRQb2xpY2llcyAmJiBhbGxQb2xpY2llc1dpdGhEaXNwb3NpdGlv
bkFsbG93KENvbnRlbnRTZWN1cml0eVBvbGljeTo6RGlzcG9zaXRpb246OkVuZm9yY2UsIHN0ZDo6
Zm9yd2FyZDxQcmVkaWNhdGU+KHByZWRpY2F0ZSksIGhhc2gpKQogICAgICAgICAgICAgZm91bmRI
YXNoSW5FbmZvcmNlZFBvbGljaWVzID0gdHJ1ZTsKICAgICAgICAgaWYgKCFmb3VuZEhhc2hJblJl
cG9ydE9ubHlQb2xpY2llcyAmJiBhbGxQb2xpY2llc1dpdGhEaXNwb3NpdGlvbkFsbG93KENvbnRl
bnRTZWN1cml0eVBvbGljeTo6RGlzcG9zaXRpb246OlJlcG9ydE9ubHksIHN0ZDo6Zm9yd2FyZDxQ
cmVkaWNhdGU+KHByZWRpY2F0ZSksIGhhc2gpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vRmlsZUhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
RmlsZUhhbmRsZS5jcHAJKHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0ZpbGVIYW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw2IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRmlsZUhhbmRsZS5oIgogCi0jaW5jbHVkZSA8d3Rm
L1N0cmluZ0V4dHJhcy5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZpbGVIYW5kbGU6OkZp
bGVIYW5kbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGUgbW9k
ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkocmV2aXNp
b24gMjI1MjA3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsMTIgQEAgUmVmPFNoYXJlZEJ1ZmZlcj4gU2hhcmVk
QnVmZmVyOjpjcmVhdGUoVgogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihX
VEZNb3ZlKHZlY3RvcikpKTsKIH0KIAorLy8gRklYTUU6IE1vdmUgdGhlIHdob2xlIGNsYXNzIGZy
b20gVmVjdG9yPGNoYXI+IHRvIFZlY3Rvcjx1aW50OF90PiBhbmQgbWFrZSB0aGlzIGVmZmljaWVu
dCwgcmVwbGFjaW5nIHRoZSBWZWN0b3I8Y2hhcj4gdmVyc2lvbiBhYm92ZS4KK1JlZjxTaGFyZWRC
dWZmZXI+IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFZlY3Rvcjx1aW50OF90PiYmIHZlY3RvcikKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRCdWZmZXIgeyB2ZWN0b3IuZGF0YSgpLCB2
ZWN0b3Iuc2l6ZSgpIH0pOworfQorCiB2b2lkIFNoYXJlZEJ1ZmZlcjo6Y29tYmluZUludG9PbmVT
ZWdtZW50KCkgY29uc3QKIHsKICNpZiAhQVNTRVJUX0RJU0FCTEVECkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAkocmV2aXNpb24gMjI1MjA3KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYw
LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBjcmVhdGVXaXRo
Q29udGVudHNPZkZpbGUoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCk7CiAKICAgICBzdGF0aWMgUmVm
PFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFZlY3RvcjxjaGFyPiYmKTsKLSAgICAKKyAgICBzdGF0aWMg
UmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKFZlY3Rvcjx1aW50OF90PiYmKTsKKwogI2lmIFVTRShG
T1VOREFUSU9OKQogICAgIFJldGFpblB0cjxOU0RhdGE+IGNyZWF0ZU5TRGF0YSgpIGNvbnN0Owog
ICAgIFJldGFpblB0cjxOU0FycmF5PiBjcmVhdGVOU0RhdGFBcnJheSgpIGNvbnN0OwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuY3BwCShyZXZpc2lvbiAyMjUyMDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MjEsOSArNjIxLDkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KIHZvaWQgVVJM
UGFyc2VyOjplbmNvZGVRdWVyeShjb25zdCBWZWN0b3I8VUNoYXI+JiBzb3VyY2UsIGNvbnN0IFRl
eHRFbmNvZGluZyYgZW5jb2RpbmcsIENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+IGl0
ZXJhdG9yKQogewogICAgIC8vIEZJWE1FOiBJdCBpcyB1bmNsZWFyIGluIHRoZSBzcGVjIHdoYXQg
dG8gZG8gd2hlbiBlbmNvZGluZyBmYWlscy4gVGhlIGJlaGF2aW9yIHNob3VsZCBiZSBzcGVjaWZp
ZWQgYW5kIHRlc3RlZC4KLSAgICBDU3RyaW5nIGVuY29kZWQgPSBlbmNvZGluZy5lbmNvZGUoU3Ry
aW5nVmlldyhzb3VyY2UuZGF0YSgpLCBzb3VyY2Uuc2l6ZSgpKSwgVVJMRW5jb2RlZEVudGl0aWVz
Rm9yVW5lbmNvZGFibGVzKTsKLSAgICBjb25zdCBjaGFyKiBkYXRhID0gZW5jb2RlZC5kYXRhKCk7
Ci0gICAgc2l6ZV90IGxlbmd0aCA9IGVuY29kZWQubGVuZ3RoKCk7CisgICAgYXV0byBlbmNvZGVk
ID0gZW5jb2RpbmcuZW5jb2RlKFN0cmluZ1ZpZXcoc291cmNlLmRhdGEoKSwgc291cmNlLnNpemUo
KSksIFVSTEVuY29kZWRFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7CisgICAgYXV0byogZGF0YSA9
IGVuY29kZWQuZGF0YSgpOworICAgIHNpemVfdCBsZW5ndGggPSBlbmNvZGVkLnNpemUoKTsKICAg
ICAKICAgICBpZiAoIWxlbmd0aCA9PSAhaXRlcmF0b3IuYXRFbmQoKSkgewogICAgICAgICBzeW50
YXhWaW9sYXRpb24oaXRlcmF0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCShyZXZp
c2lvbiAyMjUyMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzg3LDExICsxNzg3LDEwIEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQzoKIAogICAgIGlmIChzY2hlbWUgPT0gImNsZWFya2V5IikgewogICAgICAg
ICBTdHJpbmcga2V5SUQgPSBbW1thdlJlcXVlc3QgcmVxdWVzdF0gVVJMXSByZXNvdXJjZVNwZWNp
Zmllcl07Ci0gICAgICAgIFN0cmluZ1ZpZXcga2V5SURWaWV3KGtleUlEKTsKLSAgICAgICAgQ1N0
cmluZyB1dGY4RW5jb2RlZEtleUlkID0gVVRGOEVuY29kaW5nKCkuZW5jb2RlKGtleUlEVmlldywg
VVJMRW5jb2RlZEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKKyAgICAgICAgYXV0byBlbmNvZGVk
S2V5SWQgPSBVVEY4RW5jb2RpbmcoKS5lbmNvZGUoa2V5SUQsIFVSTEVuY29kZWRFbnRpdGllc0Zv
clVuZW5jb2RhYmxlcyk7CiAKLSAgICAgICAgUmVmUHRyPFVpbnQ4QXJyYXk+IGluaXREYXRhID0g
VWludDhBcnJheTo6Y3JlYXRlKHV0ZjhFbmNvZGVkS2V5SWQubGVuZ3RoKCkpOwotICAgICAgICBp
bml0RGF0YS0+c2V0UmFuZ2UocmVpbnRlcnByZXRfY2FzdDxjb25zdCBKU0M6OlVpbnQ4QWRhcHRv
cjo6VHlwZSo+KHV0ZjhFbmNvZGVkS2V5SWQuZGF0YSgpKSwgdXRmOEVuY29kZWRLZXlJZC5sZW5n
dGgoKSwgMCk7CisgICAgICAgIGF1dG8gaW5pdERhdGEgPSBVaW50OEFycmF5OjpjcmVhdGUoZW5j
b2RlZEtleUlkLnNpemUoKSk7CisgICAgICAgIGluaXREYXRhLT5zZXRSYW5nZShlbmNvZGVkS2V5
SWQuZGF0YSgpLCBlbmNvZGVkS2V5SWQuc2l6ZSgpLCAwKTsKIAogICAgICAgICBhdXRvIGtleURh
dGEgPSBwbGF5ZXIoKS0+Y2FjaGVkS2V5Rm9yS2V5SWQoa2V5SUQpOwogICAgICAgICBpZiAoa2V5
RGF0YSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZv
cm1DQUxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuY3BwCShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyQ2xpZW50
LmgiCiAjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KICNpbmNsdWRl
IDxDb3JlVGV4dC9Db3JlVGV4dC5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKICNpZiBQTEFURk9STShXSU4pCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAkocmV2aXNp
b24gMjI1MjA3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDE2ICs4MSwxNyBAQCBSZWY8Rm9ybURhdGE+IEZvcm1E
YXRhOjpjcmVhdGUoY29uc3Qgdm9pCiAKIFJlZjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZShj
b25zdCBDU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBjcmVhdGUoKTsKLSAg
ICByZXN1bHQtPmFwcGVuZERhdGEoc3RyaW5nLmRhdGEoKSwgc3RyaW5nLmxlbmd0aCgpKTsKLSAg
ICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBjcmVhdGUoc3RyaW5nLmRhdGEoKSwgc3RyaW5n
Lmxlbmd0aCgpKTsKIH0KIAogUmVmPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IFZl
Y3RvcjxjaGFyPiYgdmVjdG9yKQogewotICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlKCk7Ci0gICAg
cmVzdWx0LT5hcHBlbmREYXRhKHZlY3Rvci5kYXRhKCksIHZlY3Rvci5zaXplKCkpOwotICAgIHJl
dHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGNyZWF0ZSh2ZWN0b3IuZGF0YSgpLCB2ZWN0b3Iuc2l6
ZSgpKTsKK30KKworUmVmPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYgdmVjdG9yKQoreworICAgIHJldHVybiBjcmVhdGUodmVjdG9yLmRhdGEoKSwgdmVj
dG9yLnNpemUoKSk7CiB9CiAKIFJlZjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCBE
T01Gb3JtRGF0YSYgZm9ybURhdGEsIEVuY29kaW5nVHlwZSBlbmNvZGluZ1R5cGUpCkBAIC0xMTQs
NyArMTE1LDkgQEAgUmVmPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y29weSgpIGNvbnN0CiAKIFJlZjxG
b3JtRGF0YT4gRm9ybURhdGE6Omlzb2xhdGVkQ29weSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6
IGlzb2xhdGVkQ29weSgpIChoaXN0b3JpY2FsbHkgZGVlcENvcHkoKSkgb25seSBjb3BpZXMgY2Vy
dGFpbiB2YWx1ZXMgZnJvbSBgdGhpc2AuIFdoeSBpcyB0aGF0PworICAgIC8vIEZJWE1FOiBpc29s
YXRlZENvcHkoKSBkb2VzIG5vdCBjb3B5IG1faWRlbnRpZmVyLCBtX2JvdW5kYXJ5LCBvciBtX2Nv
bnRhaW5zUGFzc3dvcmREYXRhLgorICAgIC8vIElzIGFsbCBvZiB0aGF0IGNvcnJlY3QgYW5kIGlu
dGVudGlvbmFsPworCiAgICAgYXV0byBmb3JtRGF0YSA9IGNyZWF0ZSgpOwogCiAgICAgZm9ybURh
dGEtPm1fYWx3YXlzU3RyZWFtID0gbV9hbHdheXNTdHJlYW07CkBAIC0xODMsNyArMTg2LDcgQEAg
dm9pZCBGb3JtRGF0YTo6YXBwZW5kQmxvYihjb25zdCBVUkwmIGJsbwogICAgIG1fbGVuZ3RoSW5C
eXRlcyA9IHN0ZDo6bnVsbG9wdDsKIH0KIAotc3RhdGljIENTdHJpbmcgbm9ybWFsaXplU3RyaW5n
RGF0YShUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorc3RhdGlj
IFZlY3Rvcjx1aW50OF90PiBub3JtYWxpemVTdHJpbmdEYXRhKFRleHRFbmNvZGluZyYgZW5jb2Rp
bmcsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgcmV0dXJuIG5vcm1hbGl6ZUxpbmVFbmRp
bmdzVG9DUkxGKGVuY29kaW5nLmVuY29kZSh2YWx1ZSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMp
KTsKIH0KQEAgLTIzMCw3ICsyMzMsNyBAQCB2b2lkIEZvcm1EYXRhOjphcHBlbmRNdWx0aVBhcnRT
dHJpbmdWYWx1CiAgICAgYXBwZW5kRGF0YShoZWFkZXIuZGF0YSgpLCBoZWFkZXIuc2l6ZSgpKTsK
IAogICAgIGF1dG8gbm9ybWFsaXplZFN0cmluZ0RhdGEgPSBub3JtYWxpemVTdHJpbmdEYXRhKGVu
Y29kaW5nLCBzdHJpbmcpOwotICAgIGFwcGVuZERhdGEobm9ybWFsaXplZFN0cmluZ0RhdGEuZGF0
YSgpLCBub3JtYWxpemVkU3RyaW5nRGF0YS5sZW5ndGgoKSk7CisgICAgYXBwZW5kRGF0YShub3Jt
YWxpemVkU3RyaW5nRGF0YS5kYXRhKCksIG5vcm1hbGl6ZWRTdHJpbmdEYXRhLnNpemUoKSk7CiB9
CiAKIHZvaWQgRm9ybURhdGE6OmFwcGVuZE11bHRpUGFydEtleVZhbHVlUGFpckl0ZW1zKGNvbnN0
IERPTUZvcm1EYXRhJiBmb3JtRGF0YSwgRG9jdW1lbnQqIGRvY3VtZW50KQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaAkocmV2aXNpb24gMjI1MjA3KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCwxMyArMzQsMTEgQEAgY2xhc3MgRmlsZTsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsK
IGNsYXNzIFRleHRFbmNvZGluZzsKIAorLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBhIFZhcmlh
bnQgb2Ygc3RydWN0cyBhbmQgcmVtb3ZlICJUeXBlIiBhbmQgYWxzbyB0aGUgIm1fIiBwcmVmaXhl
cyBmcm9tIHRoZSBkYXRhIG1lbWJlcnMuCisvLyBUaGUgbWVtYmVyIGZ1bmN0aW9ucyBjYW4gYmVj
b21lIG5vbi1tZW1iZXIgZnVjbnRpb25zLgogY2xhc3MgRm9ybURhdGFFbGVtZW50IHsKIHB1Ymxp
YzoKLSAgICBlbnVtIGNsYXNzIFR5cGUgewotICAgICAgICBEYXRhLAotICAgICAgICBFbmNvZGVk
RmlsZSwKLSAgICAgICAgRW5jb2RlZEJsb2IsCi0gICAgfTsKKyAgICBlbnVtIGNsYXNzIFR5cGUg
eyBEYXRhLCBFbmNvZGVkRmlsZSwgRW5jb2RlZEJsb2IgfTsKIAogICAgIEZvcm1EYXRhRWxlbWVu
dCgpCiAgICAgICAgIDogbV90eXBlKFR5cGU6OkRhdGEpCkBAIC03NCwxMCArNzIsOCBAQCBwdWJs
aWM6CiAKICAgICBGb3JtRGF0YUVsZW1lbnQgaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgotICAgIHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPgotICAgIHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPEZvcm1EYXRhRWxlbWVudD4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8Rm9ybURhdGFFbGVtZW50PiBk
ZWNvZGUoRGVjb2RlciYpOwogCiAgICAgVHlwZSBtX3R5cGU7CiAgICAgVmVjdG9yPGNoYXI+IG1f
ZGF0YTsKQEAgLTg3LDkgKzgzLDggQEAgcHVibGljOgogICAgIGludDY0X3QgbV9maWxlTGVuZ3Ro
OwogICAgIGRvdWJsZSBtX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWU7CiAgICAgLy8gRklY
TUU6IEdlbmVyYXRlZCBmaWxlIHN1cHBvcnQgaW4gRm9ybURhdGEgaXMgYWxtb3N0IGlkZW50aWNh
bCB0byBCbG9iLCB0aGV5IHNob3VsZCBiZSBtZXJnZWQuCi0gICAgLy8gV2UgY2FuJ3QganVzdCBz
d2l0Y2ggdG8gdXNpbmcgQmxvYnMgZm9yIGFsbCBmaWxlcyBmb3IgdHdvIHJlYXNvbnM6Ci0gICAg
Ly8gMS4gTm90IGFsbCBwbGF0Zm9ybXMgZW5hYmxlIEJMT0Igc3VwcG9ydC4KLSAgICAvLyAyLiBF
bmNvZGVkRmlsZSBmb3JtIGRhdGEgZWxlbWVudHMgZG8gbm90IGhhdmUgYSB2YWxpZCBtX2V4cGVj
dGVkRmlsZU1vZGlmaWNhdGlvblRpbWUsIG1lYW5pbmcgdGhhdCB3ZSBhbHdheXMgdXBsb2FkIHRo
ZSBsYXRlc3QgY29udGVudCBmcm9tIGRpc2suCisgICAgLy8gV2UgY2FuJ3QganVzdCBzd2l0Y2gg
dG8gdXNpbmcgQmxvYnMgZm9yIGFsbCBmaWxlcyBiZWNhdXNlCisgICAgLy8gRW5jb2RlZEZpbGUg
Zm9ybSBkYXRhIGVsZW1lbnRzIGRvIG5vdCBoYXZlIGEgdmFsaWQgbV9leHBlY3RlZEZpbGVNb2Rp
ZmljYXRpb25UaW1lLCBtZWFuaW5nIHRoYXQgd2UgYWx3YXlzIHVwbG9hZCB0aGUgbGF0ZXN0IGNv
bnRlbnQgZnJvbSBkaXNrLgogICAgIFN0cmluZyBtX2dlbmVyYXRlZEZpbGVuYW1lOwogICAgIGJv
b2wgbV9zaG91bGRHZW5lcmF0ZUZpbGU7CiAgICAgYm9vbCBtX293bnNHZW5lcmF0ZWRGaWxlOwpA
QCAtMTE3LDcgKzExMiw2IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9ybURhdGFF
bGUKICAgICByZXR1cm4gIShhID09IGIpOwogfQogCi0KIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29k
ZXI+CiB2b2lkIEZvcm1EYXRhRWxlbWVudDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
CiB7CkBAIC0yMDQsNiArMTk4LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBSZWY8Rm9ybURhdGE+IGNyZWF0ZShjb25zdCB2b2lkKiwgc2l6ZV90KTsKICAgICBzdGF0aWMg
UmVmPEZvcm1EYXRhPiBjcmVhdGUoY29uc3QgQ1N0cmluZyYpOwogICAgIHN0YXRpYyBSZWY8Rm9y
bURhdGE+IGNyZWF0ZShjb25zdCBWZWN0b3I8Y2hhcj4mKTsKKyAgICBzdGF0aWMgUmVmPEZvcm1E
YXRhPiBjcmVhdGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik7CiAgICAgc3RhdGljIFJlZjxGb3Jt
RGF0YT4gY3JlYXRlKGNvbnN0IERPTUZvcm1EYXRhJiwgRW5jb2RpbmdUeXBlID0gRm9ybVVSTEVu
Y29kZWQpOwogICAgIHN0YXRpYyBSZWY8Rm9ybURhdGE+IGNyZWF0ZU11bHRpUGFydChjb25zdCBE
T01Gb3JtRGF0YSYsIERvY3VtZW50Kik7CiAgICAgV0VCQ09SRV9FWFBPUlQgfkZvcm1EYXRhKCk7
CkBAIC0zMDAsNiArMjk1LDcgQEAgdm9pZCBGb3JtRGF0YTo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIAogICAgIGVuY29kZXIgPDwgbV9ib3VuZGFyeTsKICAgICBlbmNvZGVyIDw8IG1fZWxlbWVu
dHM7CiAgICAgZW5jb2RlciA8PCBtX2lkZW50aWZpZXI7CisgICAgLy8gRklYTUU6IERvZXMgbm90
IGVuY29kZSBtX2NvbnRhaW5zUGFzc3dvcmREYXRhLiBXaHkgaXMgdGhhdCBPSz8KIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvRm9ybURhdGFCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5jcHAJKHJldmlzaW9uIDIyNTIwNykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtu
b2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3Rv
IChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAo
bXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAgICAgICAo
QykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93
d3cudG9yY2htb2JpbGUuY29tLykKICAqCkBAIC0zNiw3ICszNiw4IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotLy8gSGVscGVyIGZ1bmN0aW9ucworbmFtZXNwYWNlIEZvcm1EYXRhQnVpbGRl
ciB7CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmQoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNo
YXIgc3RyaW5nKQogewogICAgIGJ1ZmZlci5hcHBlbmQoc3RyaW5nKTsKQEAgLTUyLDE0ICs1Mywy
MCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kKFZlY3RvcjxjaGFyPiYgCiAgICAgYnVmZmVy
LmFwcGVuZChzdHJpbmcuZGF0YSgpLCBzdHJpbmcubGVuZ3RoKCkpOwogfQogCi1zdGF0aWMgdm9p
ZCBhcHBlbmRRdW90ZWRTdHJpbmcoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNvbnN0IENTdHJpbmcm
IHN0cmluZykKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmQoVmVjdG9yPGNoYXI+JiBidWZmZXIs
IGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc3RyaW5nKQoreworICAgIGJ1ZmZlci5hcHBlbmRWZWN0
b3Ioc3RyaW5nKTsKK30KKworc3RhdGljIHZvaWQgYXBwZW5kUXVvdGVkKFZlY3RvcjxjaGFyPiYg
YnVmZmVyLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHN0cmluZykKIHsKICAgICAvLyBBcHBlbmQg
YSBzdHJpbmcgYXMgYSBxdW90ZWQgdmFsdWUsIGVzY2FwaW5nIHF1b3RlcyBhbmQgbGluZSBicmVh
a3MuCiAgICAgLy8gRklYTUU6IElzIGl0IGNvcnJlY3QgdG8gdXNlIHBlcmNlbnQgZXNjYXBpbmcg
aGVyZT8gT3RoZXIgYnJvd3NlcnMgZG8gbm90IGVuY29kZSB0aGVzZSBjaGFyYWN0ZXJzIHlldCwK
ICAgICAvLyBzbyB3ZSBzaG91bGQgdGVzdCBwb3B1bGFyIHNlcnZlcnMgdG8gZmluZCBvdXQgaWYg
dGhlcmUgaXMgYW4gZW5jb2RpbmcgZm9ybSB0aGV5IGNhbiBoYW5kbGUuCi0gICAgc2l6ZV90IGxl
bmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7Ci0gICAgICAgIGNoYXIgYyA9IHN0cmluZy5kYXRhKClbaV07CisgICAgLy8gRklY
TUU6IElmIHdlIHJlYWxseSB3YW50IHRvIHVzZSBwZXJjZW50IGVzY2FwaW5nIGluIGEgZ29vZCB3
YXksIHdlIG5lZWQgdG8gZXNjYXBlIHRoZSAiJSIgY2hhcmFjdGVyIHRvbyEKKyAgICBzaXplX3Qg
c2l6ZSA9IHN0cmluZy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyAr
K2kpIHsKKyAgICAgICAgY2hhciBjID0gc3RyaW5nW2ldOwogICAgICAgICBzd2l0Y2ggKGMpIHsK
ICAgICAgICAgY2FzZSAweEE6CiAgICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCAiJTBBIik7CkBA
IC03Niw3ICs4MywzNCBAQCBzdGF0aWMgdm9pZCBhcHBlbmRRdW90ZWRTdHJpbmcoVmVjdG9yPGNo
CiAgICAgfQogfQogCi1WZWN0b3I8Y2hhcj4gRm9ybURhdGFCdWlsZGVyOjpnZW5lcmF0ZVVuaXF1
ZUJvdW5kYXJ5U3RyaW5nKCkKK3N0YXRpYyB2b2lkIGFwcGVuZEVuY29kZWRBc0Zvcm1EYXRhKFZl
Y3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCB1aW50OF90KiBzdHJpbmcsIHNpemVfdCBsZW5ndGgp
Cit7CisgICAgLy8gU2FtZSBzYWZlIGNoYXJhY3RlcnMgYXMgTmV0c2NhcGUgZm9yIGNvbXBhdGli
aWxpdHkuCisgICAgc3RhdGljIGNvbnN0IGNoYXIgc2FmZUNoYXJhY3RlcnNbXSA9ICItLl8qIjsK
KworICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2ludGVyYWN0L2Zvcm1zLmh0bWwj
aC0xNy4xMy40LjEKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Cisg
ICAgICAgIGF1dG8gYyA9IHN0cmluZ1tpXTsKKworICAgICAgICBpZiAoaXNBU0NJSUFscGhhbnVt
ZXJpYyhjKSB8fCBzdHJjaHIoc2FmZUNoYXJhY3RlcnMsIGMpKQorICAgICAgICAgICAgYXBwZW5k
KGJ1ZmZlciwgYyk7CisgICAgICAgIGVsc2UgaWYgKGMgPT0gJyAnKQorICAgICAgICAgICAgYXBw
ZW5kKGJ1ZmZlciwgJysnKTsKKyAgICAgICAgZWxzZSBpZiAoYyA9PSAnXG4nIHx8IChjID09ICdc
cicgJiYgKGkgKyAxID49IGxlbmd0aCB8fCBzdHJpbmdbaSArIDFdICE9ICdcbicpKSkKKyAgICAg
ICAgICAgIGFwcGVuZChidWZmZXIsICIlMEQlMEEiKTsKKyAgICAgICAgZWxzZSBpZiAoYyAhPSAn
XHInKSB7CisgICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCAnJScpOworICAgICAgICAgICAgYXBw
ZW5kQnl0ZUFzSGV4KGMsIGJ1ZmZlcik7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2
b2lkIGFwcGVuZEVuY29kZWRBc0Zvcm1EYXRhKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCBW
ZWN0b3I8dWludDhfdD4mIHN0cmluZykKK3sKKyAgICBhcHBlbmRFbmNvZGVkQXNGb3JtRGF0YShi
dWZmZXIsIHN0cmluZy5kYXRhKCksIHN0cmluZy5zaXplKCkpOworfQorCitWZWN0b3I8Y2hhcj4g
Z2VuZXJhdGVVbmlxdWVCb3VuZGFyeVN0cmluZygpCiB7CiAgICAgVmVjdG9yPGNoYXI+IGJvdW5k
YXJ5OwogCkBAIC0xMTcsMTggKzE1MSwxOCBAQCBWZWN0b3I8Y2hhcj4gRm9ybURhdGFCdWlsZGVy
OjpnZW5lcmF0ZVVuCiAgICAgcmV0dXJuIGJvdW5kYXJ5OwogfQogCi12b2lkIEZvcm1EYXRhQnVp
bGRlcjo6YmVnaW5NdWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNvbnN0IENT
dHJpbmcmIGJvdW5kYXJ5LCBjb25zdCBDU3RyaW5nJiBuYW1lKQordm9pZCBiZWdpbk11bHRpUGFy
dEhlYWRlcihWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3QgQ1N0cmluZyYgYm91bmRhcnksIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgbmFtZSkKIHsKICAgICBhZGRCb3VuZGFyeVRvTXVsdGlQYXJ0
SGVhZGVyKGJ1ZmZlciwgYm91bmRhcnkpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgbG9zZXMgZGF0
YSBpcnJldmVyc2libHkgaWYgdGhlIGlucHV0IG5hbWUgaW5jbHVkZXMgY2hhcmFjdGVycyB5b3Ug
Y2FuJ3QgZW5jb2RlCiAgICAgLy8gaW4gdGhlIHdlYnNpdGUncyBjaGFyYWN0ZXIgc2V0LgogICAg
IGFwcGVuZChidWZmZXIsICJDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9XCIi
KTsKLSAgICBhcHBlbmRRdW90ZWRTdHJpbmcoYnVmZmVyLCBuYW1lKTsKKyAgICBhcHBlbmRRdW90
ZWQoYnVmZmVyLCBuYW1lKTsKICAgICBhcHBlbmQoYnVmZmVyLCAnIicpOwogfQogCi12b2lkIEZv
cm1EYXRhQnVpbGRlcjo6YWRkQm91bmRhcnlUb011bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4m
IGJ1ZmZlciwgY29uc3QgQ1N0cmluZyYgYm91bmRhcnksIGJvb2wgaXNMYXN0Qm91bmRhcnkpCit2
b2lkIGFkZEJvdW5kYXJ5VG9NdWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNv
bnN0IENTdHJpbmcmIGJvdW5kYXJ5LCBib29sIGlzTGFzdEJvdW5kYXJ5KQogewogICAgIGFwcGVu
ZChidWZmZXIsICItLSIpOwogICAgIGFwcGVuZChidWZmZXIsIGJvdW5kYXJ5KTsKQEAgLTEzOSwy
OCArMTczLDI4IEBAIHZvaWQgRm9ybURhdGFCdWlsZGVyOjphZGRCb3VuZGFyeVRvTXVsdGkKICAg
ICBhcHBlbmQoYnVmZmVyLCAiXHJcbiIpOwogfQogCi12b2lkIEZvcm1EYXRhQnVpbGRlcjo6YWRk
RmlsZW5hbWVUb011bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3QgVGV4
dEVuY29kaW5nJiBlbmNvZGluZywgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKK3ZvaWQgYWRkRmls
ZW5hbWVUb011bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3QgVGV4dEVu
Y29kaW5nJiBlbmNvZGluZywgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKIHsKICAgICAvLyBGSVhN
RTogVGhpcyBsb3NlcyBkYXRhIGlycmV2ZXJzaWJseSBpZiB0aGUgZmlsZW5hbWUgaW5jbHVkZXMg
Y2hhcmFjdGVycyB5b3UgY2FuJ3QgZW5jb2RlCiAgICAgLy8gaW4gdGhlIHdlYnNpdGUncyBjaGFy
YWN0ZXIgc2V0LgogICAgIGFwcGVuZChidWZmZXIsICI7IGZpbGVuYW1lPVwiIik7Ci0gICAgYXBw
ZW5kUXVvdGVkU3RyaW5nKGJ1ZmZlciwgZW5jb2RpbmcuZW5jb2RlKGZpbGVuYW1lLCBRdWVzdGlv
bk1hcmtzRm9yVW5lbmNvZGFibGVzKSk7CisgICAgYXBwZW5kUXVvdGVkKGJ1ZmZlciwgZW5jb2Rp
bmcuZW5jb2RlKGZpbGVuYW1lLCBRdWVzdGlvbk1hcmtzRm9yVW5lbmNvZGFibGVzKSk7CiAgICAg
YXBwZW5kKGJ1ZmZlciwgJyInKTsKIH0KIAotdm9pZCBGb3JtRGF0YUJ1aWxkZXI6OmFkZENvbnRl
bnRUeXBlVG9NdWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNvbnN0IENTdHJp
bmcmIG1pbWVUeXBlKQordm9pZCBhZGRDb250ZW50VHlwZVRvTXVsdGlQYXJ0SGVhZGVyKFZlY3Rv
cjxjaGFyPiYgYnVmZmVyLCBjb25zdCBDU3RyaW5nJiBtaW1lVHlwZSkKIHsKICAgICBBU1NFUlQo
QmxvYjo6aXNOb3JtYWxpemVkQ29udGVudFR5cGUobWltZVR5cGUpKTsKICAgICBhcHBlbmQoYnVm
ZmVyLCAiXHJcbkNvbnRlbnQtVHlwZTogIik7CiAgICAgYXBwZW5kKGJ1ZmZlciwgbWltZVR5cGUp
OwogfQogCi12b2lkIEZvcm1EYXRhQnVpbGRlcjo6ZmluaXNoTXVsdGlQYXJ0SGVhZGVyKFZlY3Rv
cjxjaGFyPiYgYnVmZmVyKQordm9pZCBmaW5pc2hNdWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+
JiBidWZmZXIpCiB7CiAgICAgYXBwZW5kKGJ1ZmZlciwgIlxyXG5cclxuIik7CiB9CiAKLXZvaWQg
Rm9ybURhdGFCdWlsZGVyOjphZGRLZXlWYWx1ZVBhaXJBc0Zvcm1EYXRhKFZlY3RvcjxjaGFyPiYg
YnVmZmVyLCBjb25zdCBDU3RyaW5nJiBrZXksIGNvbnN0IENTdHJpbmcmIHZhbHVlLCBGb3JtRGF0
YTo6RW5jb2RpbmdUeXBlIGVuY29kaW5nVHlwZSkKK3ZvaWQgYWRkS2V5VmFsdWVQYWlyQXNGb3Jt
RGF0YShWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgdmFsdWUsIEZvcm1EYXRhOjpFbmNvZGluZ1R5cGUgZW5jb2Rp
bmdUeXBlKQogewogICAgIGlmIChlbmNvZGluZ1R5cGUgPT0gRm9ybURhdGE6OlRleHRQbGFpbikg
ewogICAgICAgICBpZiAoIWJ1ZmZlci5pc0VtcHR5KCkpCkBAIC0xNzEsMzMgKzIwNSwxNyBAQCB2
b2lkIEZvcm1EYXRhQnVpbGRlcjo6YWRkS2V5VmFsdWVQYWlyQXNGCiAgICAgfSBlbHNlIHsKICAg
ICAgICAgaWYgKCFidWZmZXIuaXNFbXB0eSgpKQogICAgICAgICAgICAgYXBwZW5kKGJ1ZmZlciwg
JyYnKTsKLSAgICAgICAgZW5jb2RlU3RyaW5nQXNGb3JtRGF0YShidWZmZXIsIGtleSk7CisgICAg
ICAgIGFwcGVuZEVuY29kZWRBc0Zvcm1EYXRhKGJ1ZmZlciwga2V5KTsKICAgICAgICAgYXBwZW5k
KGJ1ZmZlciwgJz0nKTsKLSAgICAgICAgZW5jb2RlU3RyaW5nQXNGb3JtRGF0YShidWZmZXIsIHZh
bHVlKTsKKyAgICAgICAgYXBwZW5kRW5jb2RlZEFzRm9ybURhdGEoYnVmZmVyLCB2YWx1ZSk7CiAg
ICAgfQogfQogCi12b2lkIEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YShW
ZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3QgQ1N0cmluZyYgc3RyaW5nKQordm9pZCBlbmNvZGVT
dHJpbmdBc0Zvcm1EYXRhKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCBDU3RyaW5nJiBzdHJp
bmcpCiB7Ci0gICAgLy8gU2FtZSBzYWZlIGNoYXJhY3RlcnMgYXMgTmV0c2NhcGUgZm9yIGNvbXBh
dGliaWxpdHkuCi0gICAgc3RhdGljIGNvbnN0IGNoYXIgc2FmZUNoYXJhY3RlcnNbXSA9ICItLl8q
IjsKLQotICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2ludGVyYWN0L2Zvcm1zLmh0
bWwjaC0xNy4xMy40LjEKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHVuc2ln
bmVkIGNoYXIgYyA9IHN0cmluZy5kYXRhKClbaV07CisgICAgYXBwZW5kRW5jb2RlZEFzRm9ybURh
dGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzdHJpbmcuZGF0YSgp
KSwgc3RyaW5nLmxlbmd0aCgpKTsKK30KIAotICAgICAgICBpZiAoaXNBU0NJSUFscGhhbnVtZXJp
YyhjKSB8fCBzdHJjaHIoc2FmZUNoYXJhY3RlcnMsIGMpKQotICAgICAgICAgICAgYXBwZW5kKGJ1
ZmZlciwgYyk7Ci0gICAgICAgIGVsc2UgaWYgKGMgPT0gJyAnKQotICAgICAgICAgICAgYXBwZW5k
KGJ1ZmZlciwgJysnKTsKLSAgICAgICAgZWxzZSBpZiAoYyA9PSAnXG4nIHx8IChjID09ICdccicg
JiYgKGkgKyAxID49IGxlbmd0aCB8fCBzdHJpbmcuZGF0YSgpW2kgKyAxXSAhPSAnXG4nKSkpCi0g
ICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCAiJTBEJTBBIik7Ci0gICAgICAgIGVsc2UgaWYgKGMg
IT0gJ1xyJykgewotICAgICAgICAgICAgYXBwZW5kKGJ1ZmZlciwgJyUnKTsKLSAgICAgICAgICAg
IGFwcGVuZEJ5dGVBc0hleChjLCBidWZmZXIpOwotICAgICAgICB9Ci0gICAgfQogfQogCiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWls
ZGVyLmgJKHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvRm9ybURhdGFCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0x
OCw4ICsxOSw3IEBACiAgKgogICovCiAKLSNpZm5kZWYgRm9ybURhdGFCdWlsZGVyX2gKLSNkZWZp
bmUgRm9ybURhdGFCdWlsZGVyX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRm9ybURhdGEu
aCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtMjgsMjUgKzI4LDIwIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgVGV4dEVuY29kaW5nOwogCi1jbGFzcyBGb3JtRGF0YUJ1aWxk
ZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZvcm1EYXRhQnVpbGRlcik7Ci1wdWJsaWM6
Ci0gICAgLy8gSGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IEhUTUxGb3JtRWxlbWVudCBmb3IgbXVs
dGktcGFydCBmb3JtIGRhdGEKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGdlbmVyYXRlVW5pcXVl
Qm91bmRhcnlTdHJpbmcoKTsKLSAgICBzdGF0aWMgdm9pZCBiZWdpbk11bHRpUGFydEhlYWRlcihW
ZWN0b3I8Y2hhcj4mLCBjb25zdCBDU3RyaW5nJiBib3VuZGFyeSwgY29uc3QgQ1N0cmluZyYgbmFt
ZSk7Ci0gICAgc3RhdGljIHZvaWQgYWRkQm91bmRhcnlUb011bHRpUGFydEhlYWRlcihWZWN0b3I8
Y2hhcj4mLCBjb25zdCBDU3RyaW5nJiBib3VuZGFyeSwgYm9vbCBpc0xhc3RCb3VuZGFyeSA9IGZh
bHNlKTsKLSAgICBzdGF0aWMgdm9pZCBhZGRGaWxlbmFtZVRvTXVsdGlQYXJ0SGVhZGVyKFZlY3Rv
cjxjaGFyPiYsIGNvbnN0IFRleHRFbmNvZGluZyYsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpOwot
ICAgIHN0YXRpYyB2b2lkIGFkZENvbnRlbnRUeXBlVG9NdWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNo
YXI+JiwgY29uc3QgQ1N0cmluZyYgbWltZVR5cGUpOwotICAgIHN0YXRpYyB2b2lkIGZpbmlzaE11
bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4mKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbnMg
dXNlZCBieSBIVE1MRm9ybUVsZW1lbnQgZm9yIG5vbiBtdWx0aS1wYXJ0IGZvcm0gZGF0YQotICAg
IHN0YXRpYyB2b2lkIGFkZEtleVZhbHVlUGFpckFzRm9ybURhdGEoVmVjdG9yPGNoYXI+JiwgY29u
c3QgQ1N0cmluZyYga2V5LCBjb25zdCBDU3RyaW5nJiB2YWx1ZSwgRm9ybURhdGE6OkVuY29kaW5n
VHlwZSA9IEZvcm1EYXRhOjpGb3JtVVJMRW5jb2RlZCk7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2Rl
U3RyaW5nQXNGb3JtRGF0YShWZWN0b3I8Y2hhcj4mLCBjb25zdCBDU3RyaW5nJik7Ci0KLXByaXZh
dGU6Ci0gICAgRm9ybURhdGFCdWlsZGVyKCkge30KLX07CituYW1lc3BhY2UgRm9ybURhdGFCdWls
ZGVyIHsKKworLy8gSGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IEhUTUxGb3JtRWxlbWVudCBmb3Ig
bXVsdGktcGFydCBmb3JtIGRhdGEuCitWZWN0b3I8Y2hhcj4gZ2VuZXJhdGVVbmlxdWVCb3VuZGFy
eVN0cmluZygpOwordm9pZCBiZWdpbk11bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4mLCBjb25z
dCBDU3RyaW5nJiBib3VuZGFyeSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBuYW1lKTsKK3ZvaWQg
YWRkQm91bmRhcnlUb011bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4mLCBjb25zdCBDU3RyaW5n
JiBib3VuZGFyeSwgYm9vbCBpc0xhc3RCb3VuZGFyeSA9IGZhbHNlKTsKK3ZvaWQgYWRkRmlsZW5h
bWVUb011bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4mLCBjb25zdCBUZXh0RW5jb2RpbmcmLCBj
b25zdCBTdHJpbmcmIGZpbGVuYW1lKTsKK3ZvaWQgYWRkQ29udGVudFR5cGVUb011bHRpUGFydEhl
YWRlcihWZWN0b3I8Y2hhcj4mLCBjb25zdCBDU3RyaW5nJiBtaW1lVHlwZSk7Cit2b2lkIGZpbmlz
aE11bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4mKTsKKworLy8gSGVscGVyIGZ1bmN0aW9ucyB1
c2VkIGJ5IEhUTUxGb3JtRWxlbWVudCBmb3Igbm9uLW11bHRpLXBhcnQgZm9ybSBkYXRhLgordm9p
ZCBhZGRLZXlWYWx1ZVBhaXJBc0Zvcm1EYXRhKFZlY3RvcjxjaGFyPiYsIGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYga2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhbHVlLCBGb3JtRGF0YTo6RW5j
b2RpbmdUeXBlID0gRm9ybURhdGE6OkZvcm1VUkxFbmNvZGVkKTsKK3ZvaWQgZW5jb2RlU3RyaW5n
QXNGb3JtRGF0YShWZWN0b3I8Y2hhcj4mLCBjb25zdCBDU3RyaW5nJik7CiAKIH0KIAotI2VuZGlm
Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VI
YW5kbGVDdXJsRGVsZWdhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5jcHAJKHJldmlzaW9u
IDIyNTIwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJj
ZUhhbmRsZUN1cmxEZWxlZ2F0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1Nyw5ICs0NTcsOSBA
QCB2b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpoYW5kbGVECiAKICAgICAgICAgLy8g
ZGlkUmVjZWl2ZVJlc3BvbnNlIG1pZ2h0IGNhdXNlIHRoZSBjbGllbnQgdG8gYmUgZGVsZXRlZC4K
ICAgICAgICAgaWYgKG1faGFuZGxlLT5jbGllbnQoKSkgewotICAgICAgICAgICAgQ1N0cmluZyBl
bmNvZGVkRGF0YSA9IGVuY29kaW5nLmVuY29kZShkYXRhLCBVUkxFbmNvZGVkRW50aXRpZXNGb3JV
bmVuY29kYWJsZXMpOwotICAgICAgICAgICAgaWYgKGVuY29kZWREYXRhLmxlbmd0aCgpKQotICAg
ICAgICAgICAgICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZUJ1ZmZlcihtX2hhbmRs
ZSwgU2hhcmVkQnVmZmVyOjpjcmVhdGUoZW5jb2RlZERhdGEuZGF0YSgpLCBlbmNvZGVkRGF0YS5s
ZW5ndGgoKSksIG9yaWdpbmFsU2l6ZSk7CisgICAgICAgICAgICBhdXRvIGVuY29kZWREYXRhID0g
ZW5jb2RpbmcuZW5jb2RlKGRhdGEsIFVSTEVuY29kZWRFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7
CisgICAgICAgICAgICBpZiAoZW5jb2RlZERhdGEuc2l6ZSgpKQorICAgICAgICAgICAgICAgIG1f
aGFuZGxlLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZUJ1ZmZlcihtX2hhbmRsZSwgU2hhcmVkQnVmZmVy
OjpjcmVhdGUoV1RGTW92ZShlbmNvZGVkRGF0YSkpLCBvcmlnaW5hbFNpemUpOwogICAgICAgICB9
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RlY29kZUVzY2Fw
ZVNlcXVlbmNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
RGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgJKHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDggKzI3LDcgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBEZWNvZGVF
c2NhcGVTZXF1ZW5jZXNfaAotI2RlZmluZSBEZWNvZGVFc2NhcGVTZXF1ZW5jZXNfaAorI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlD
VHlwZS5oPgpAQCAtMTU1LDExICsxNTQsMTEgQEAgU3RyaW5nIGRlY29kZUVzY2FwZVNlcXVlbmNl
cyhTdHJpbmdWaWV3IAogICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAotaW5saW5l
IFZlY3RvcjxjaGFyPiBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXNBc0RhdGEoU3RyaW5nVmlldyBz
dHJpbmcsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCitpbmxpbmUgVmVjdG9yPHVpbnQ4
X3Q+IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlc0FzRGF0YShTdHJpbmdWaWV3IHN0cmluZywgY29u
c3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKIHsKICAgICBBU1NFUlQoZW5jb2RpbmcuaXNWYWxp
ZCgpKTsKIAotICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJl
c3VsdDsKICAgICBzaXplX3QgZGVjb2RlZFBvc2l0aW9uID0gMDsKICAgICBzaXplX3Qgc2VhcmNo
UG9zaXRpb24gPSAwOwogICAgIHdoaWxlICh0cnVlKSB7CkBAIC0xNzMsMTAgKzE3Miw5IEBAIGlu
bGluZSBWZWN0b3I8Y2hhcj4gZGVjb2RlVVJMRXNjYXBlU2VxdWUKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIC8vIFN0cmluZ3Mg
YXJlIGVuY29kZWQgYXMgcmVxdWVzdGVkLgotICAgICAgICBhdXRvIHN0cmluZ0ZyYWdtZW50ID0g
c3RyaW5nLnN1YnN0cmluZyhkZWNvZGVkUG9zaXRpb24sIGVuY29kZWRSdW5Qb3NpdGlvbiAtIGRl
Y29kZWRQb3NpdGlvbik7Ci0gICAgICAgIGF1dG8gZW5jb2RlZFN0cmluZ0ZyYWdtZW50ID0gZW5j
b2RpbmcuZW5jb2RlKHN0cmluZ0ZyYWdtZW50LCBVUkxFbmNvZGVkRW50aXRpZXNGb3JVbmVuY29k
YWJsZXMpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGVuY29kZWRTdHJpbmdGcmFnbWVudC5kYXRh
KCksIGVuY29kZWRTdHJpbmdGcmFnbWVudC5sZW5ndGgoKSk7CisgICAgICAgIHJlc3VsdC5hcHBl
bmRWZWN0b3IoZW5jb2RpbmcuZW5jb2RlKHN0cmluZy5zdWJzdHJpbmcoZGVjb2RlZFBvc2l0aW9u
LCBlbmNvZGVkUnVuUG9zaXRpb24gLSBkZWNvZGVkUG9zaXRpb24pLCBVUkxFbmNvZGVkRW50aXRp
ZXNGb3JVbmVuY29kYWJsZXMpKTsKIAogICAgICAgICBpZiAoZW5jb2RlZFJ1blBvc2l0aW9uID09
IG5vdEZvdW5kKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE5Miw0ICsxOTAsMyBA
QCBpbmxpbmUgVmVjdG9yPGNoYXI+IGRlY29kZVVSTEVzY2FwZVNlcXVlCiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIERlY29kZUVzY2FwZVNlcXVlbmNlc19oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlYy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuY3BwCShyZXZpc2lvbiAyMjUy
MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlYy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApA
QCAtMjcsMjkgKzI3LDI0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGV4dENv
ZGVjLmgiCiAKLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8YXJyYXk+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotVGV4dENvZGVjOjp+VGV4dENvZGVjKCkgPSBkZWZhdWx0OwotCi1pbnQgVGV4dENvZGVjOjpn
ZXRVbmVuY29kYWJsZVJlcGxhY2VtZW50KHVuc2lnbmVkIGNvZGVQb2ludCwgVW5lbmNvZGFibGVI
YW5kbGluZyBoYW5kbGluZywgVW5lbmNvZGFibGVSZXBsYWNlbWVudEFycmF5IHJlcGxhY2VtZW50
KQoraW50IFRleHRDb2RlYzo6Z2V0VW5lbmNvZGFibGVSZXBsYWNlbWVudChVQ2hhcjMyIGNvZGVQ
b2ludCwgVW5lbmNvZGFibGVIYW5kbGluZyBoYW5kbGluZywgVW5lbmNvZGFibGVSZXBsYWNlbWVu
dEFycmF5JiByZXBsYWNlbWVudCkKIHsKICAgICBzd2l0Y2ggKGhhbmRsaW5nKSB7Ci0gICAgICAg
IGNhc2UgUXVlc3Rpb25NYXJrc0ZvclVuZW5jb2RhYmxlczoKLSAgICAgICAgICAgIHJlcGxhY2Vt
ZW50WzBdID0gJz8nOwotICAgICAgICAgICAgcmVwbGFjZW1lbnRbMV0gPSAwOwotICAgICAgICAg
ICAgcmV0dXJuIDE7Ci0gICAgICAgIGNhc2UgRW50aXRpZXNGb3JVbmVuY29kYWJsZXM6Ci0gICAg
ICAgICAgICBzbnByaW50ZihyZXBsYWNlbWVudCwgc2l6ZW9mKFVuZW5jb2RhYmxlUmVwbGFjZW1l
bnRBcnJheSksICImIyV1OyIsIGNvZGVQb2ludCk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50PihzdHJsZW4ocmVwbGFjZW1lbnQpKTsKLSAgICAgICAgY2FzZSBVUkxFbmNvZGVk
RW50aXRpZXNGb3JVbmVuY29kYWJsZXM6Ci0gICAgICAgICAgICBzbnByaW50ZihyZXBsYWNlbWVu
dCwgc2l6ZW9mKFVuZW5jb2RhYmxlUmVwbGFjZW1lbnRBcnJheSksICIlJTI2JSUyMyV1JSUzQiIs
IGNvZGVQb2ludCk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihzdHJsZW4o
cmVwbGFjZW1lbnQpKTsKKyAgICBjYXNlIFF1ZXN0aW9uTWFya3NGb3JVbmVuY29kYWJsZXM6Cisg
ICAgICAgIHJlcGxhY2VtZW50LmRhdGEoKVswXSA9ICc/JzsKKyAgICAgICAgcmVwbGFjZW1lbnQu
ZGF0YSgpWzFdID0gMDsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBFbnRpdGllc0ZvclVu
ZW5jb2RhYmxlczoKKyAgICAgICAgcmV0dXJuIHNucHJpbnRmKHJlcGxhY2VtZW50LmRhdGEoKSwg
c2l6ZW9mKFVuZW5jb2RhYmxlUmVwbGFjZW1lbnRBcnJheSksICImIyV1OyIsIGNvZGVQb2ludCk7
CisgICAgY2FzZSBVUkxFbmNvZGVkRW50aXRpZXNGb3JVbmVuY29kYWJsZXM6CisgICAgICAgIHJl
dHVybiBzbnByaW50ZihyZXBsYWNlbWVudC5kYXRhKCksIHNpemVvZihVbmVuY29kYWJsZVJlcGxh
Y2VtZW50QXJyYXkpLCAiJSUyNiUlMjMldSUlM0IiLCBjb2RlUG9pbnQpOwogICAgIH0KICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXBsYWNlbWVudFswXSA9IDA7CisgICAgcmVwbGFj
ZW1lbnQuZGF0YSgpWzBdID0gMDsKICAgICByZXR1cm4gMDsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlYy5oCShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9z
a3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI0LDYxICsyNCwz
OSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBUZXh0Q29kZWNfaAotI2RlZmlu
ZSBUZXh0Q29kZWNfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVk
ZSA8cGFsL3RleHQvVW5lbmNvZGFibGVIYW5kbGluZy5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdW1h
Y2hpbmUuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0gICAgY2xhc3MgVGV4dEVuY29kaW5nOwogCi0gICAgLy8gU3BlY2lmaWVzIHdoYXQg
d2lsbCBoYXBwZW4gd2hlbiBhIGNoYXJhY3RlciBpcyBlbmNvdW50ZXJlZCB0aGF0IGlzCi0gICAg
Ly8gbm90IGVuY29kYWJsZSBpbiB0aGUgY2hhcmFjdGVyIHNldC4KLSAgICBlbnVtIFVuZW5jb2Rh
YmxlSGFuZGxpbmcgewotICAgICAgICAvLyBTdWJzdGl0dXRlcyB0aGUgcmVwbGFjZW1lbnQgY2hh
cmFjdGVyICI/Ii4KLSAgICAgICAgUXVlc3Rpb25NYXJrc0ZvclVuZW5jb2RhYmxlcywKLQotICAg
ICAgICAvLyBFbmNvZGVzIHRoZSBjaGFyYWN0ZXIgYXMgYW4gWE1MIGVudGl0eS4gRm9yIGV4YW1w
bGUsIFUrMDZERQotICAgICAgICAvLyB3b3VsZCBiZSAiJiMxNzU4OyIgKDB4NkRFID0gMTc1OCBp
biBvY3RhbCkuCi0gICAgICAgIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzLAotCi0gICAgICAgIC8v
IEVuY29kZXMgdGhlIGNoYXJhY3RlciBhcyBlbiBlbnRpdHkgYXMgYWJvdmUsIGJ1dCBlc2NhcGVk
Ci0gICAgICAgIC8vIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycy4gVGhpcyBpcyB1c2VkIGlu
IFVSTHMuCi0gICAgICAgIC8vIEZvciBleGFtcGxlLCBVKzZERSB3b3VsZCBiZSAiJTI2JTIzMTc1
OCUzQiIuCi0gICAgICAgIFVSTEVuY29kZWRFbnRpdGllc0ZvclVuZW5jb2RhYmxlcwotICAgIH07
Ci0KLSAgICB0eXBlZGVmIGNoYXIgVW5lbmNvZGFibGVSZXBsYWNlbWVudEFycmF5WzMyXTsKLQot
ICAgIGNsYXNzIFRleHRDb2RlYyB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRleHRD
b2RlYyk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoKLSAgICAgICAgVGV4
dENvZGVjKCkgeyB9Ci0gICAgICAgIHZpcnR1YWwgflRleHRDb2RlYygpOwotCi0gICAgICAgIFN0
cmluZyBkZWNvZGUoY29uc3QgY2hhciogc3RyLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoID0g
ZmFsc2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJvb2wgaWdub3JlZDsKLSAgICAgICAgICAg
IHJldHVybiBkZWNvZGUoc3RyLCBsZW5ndGgsIGZsdXNoLCBmYWxzZSwgaWdub3JlZCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgU3RyaW5nIGRlY29kZShjb25zdCBjaGFy
Kiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3
RXJyb3IpID0gMDsKLSAgICAgICAgdmlydHVhbCBDU3RyaW5nIGVuY29kZShjb25zdCBVQ2hhcios
IHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcpID0gMDsKLQotICAgICAgICAvLyBG
aWxscyBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVu
Ci0gICAgICAgIC8vIHVuZW5jb2RhYmxlIGNoYXJhY3RlciBpbnRvIHRoZSBnaXZlbiByZXBsYWNl
bWVudCBidWZmZXIuIAotICAgICAgICAvLyBUaGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgKG5vdCBp
bmNsdWRpbmcgdGhlIG51bGwpIHdpbGwgYmUgcmV0dXJuZWQuCi0gICAgICAgIHN0YXRpYyBpbnQg
Z2V0VW5lbmNvZGFibGVSZXBsYWNlbWVudCh1bnNpZ25lZCBjb2RlUG9pbnQsIFVuZW5jb2RhYmxl
SGFuZGxpbmcsIFVuZW5jb2RhYmxlUmVwbGFjZW1lbnRBcnJheSk7Ci0gICAgfTsKK2NsYXNzIFRl
eHRFbmNvZGluZzsKIAotICAgIHR5cGVkZWYgdm9pZCAoKkVuY29kaW5nTmFtZVJlZ2lzdHJhciko
Y29uc3QgY2hhciogYWxpYXMsIGNvbnN0IGNoYXIqIG5hbWUpOwordXNpbmcgVW5lbmNvZGFibGVS
ZXBsYWNlbWVudEFycmF5ID0gc3RkOjphcnJheTxjaGFyLCAzMj47CiAKLSAgICB0eXBlZGVmIHN0
ZDo6dW5pcXVlX3B0cjxUZXh0Q29kZWM+ICgqTmV3VGV4dENvZGVjRnVuY3Rpb24pKGNvbnN0IFRl
eHRFbmNvZGluZyYsIGNvbnN0IHZvaWQqIGFkZGl0aW9uYWxEYXRhKTsKLSAgICB0eXBlZGVmIHZv
aWQgKCpUZXh0Q29kZWNSZWdpc3RyYXIpKGNvbnN0IGNoYXIqIG5hbWUsIE5ld1RleHRDb2RlY0Z1
bmN0aW9uLCBjb25zdCB2b2lkKiBhZGRpdGlvbmFsRGF0YSk7CitjbGFzcyBUZXh0Q29kZWMgewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRleHRDb2RlYyk7IFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIFRleHRDb2RlYygpID0gZGVmYXVsdDsKKyAgICB2aXJ0dWFsIH5U
ZXh0Q29kZWMoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIFN0cmluZyBkZWNvZGUoY29uc3Qg
Y2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wm
IHNhd0Vycm9yKSA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gZW5jb2RlKFN0cmlu
Z1ZpZXcsIFVuZW5jb2RhYmxlSGFuZGxpbmcpID0gMDsKKworICAgIC8vIEZpbGxzIGEgbnVsbC10
ZXJtaW5hdGVkIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4KKyAgICAvLyB1bmVu
Y29kYWJsZSBjaGFyYWN0ZXIgaW50byB0aGUgZ2l2ZW4gcmVwbGFjZW1lbnQgYnVmZmVyLgorICAg
IC8vIFRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyAobm90IGluY2x1ZGluZyB0aGUgbnVsbCkgd2ls
bCBiZSByZXR1cm5lZC4KKyAgICBzdGF0aWMgaW50IGdldFVuZW5jb2RhYmxlUmVwbGFjZW1lbnQo
VUNoYXIzMiwgVW5lbmNvZGFibGVIYW5kbGluZywgVW5lbmNvZGFibGVSZXBsYWNlbWVudEFycmF5
Jik7Cit9OworCit1c2luZyBFbmNvZGluZ05hbWVSZWdpc3RyYXIgPSB2b2lkICgqKShjb25zdCBj
aGFyKiBhbGlhcywgY29uc3QgY2hhciogbmFtZSk7CisKK3VzaW5nIE5ld1RleHRDb2RlY0Z1bmN0
aW9uID0gV1RGOjpGdW5jdGlvbjxzdGQ6OnVuaXF1ZV9wdHI8VGV4dENvZGVjPigpPjsKK3VzaW5n
IFRleHRDb2RlY1JlZ2lzdHJhciA9IHZvaWQgKCopKGNvbnN0IGNoYXIqIG5hbWUsIE5ld1RleHRD
b2RlY0Z1bmN0aW9uJiYpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBU
ZXh0Q29kZWNfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJ
Q1UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENv
ZGVjSUNVLmNwcAkocmV2aXNpb24gMjI1MjA3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9UZXh0Q29kZWNJQ1UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCwgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFBy
b3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzAsMTAgKzMw
LDggQEAKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmdS
ZWdpc3RyeS5oIgogI2luY2x1ZGUgIlRocmVhZEdsb2JhbERhdGEuaCIKLSNpbmNsdWRlIDx1bmlj
b2RlL3VjbnYuaD4KKyNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDx1bmljb2RlL3VjbnZfY2Iu
aD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRy
YXMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KQEAgLTQzLDIzICs0
MSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY29uc3Qgc2l6ZV90IENvbnZlcnNpb25CdWZm
ZXJTaXplID0gMTYzODQ7CiAKLUlDVUNvbnZlcnRlcldyYXBwZXI6On5JQ1VDb252ZXJ0ZXJXcmFw
cGVyKCkKLXsKLSAgICBpZiAoY29udmVydGVyKQotICAgICAgICB1Y252X2Nsb3NlKGNvbnZlcnRl
cik7Ci19Ci0KLXN0YXRpYyBVQ29udmVydGVyKiYgY2FjaGVkQ29udmVydGVySUNVKCkKLXsKLSAg
ICByZXR1cm4gdGhyZWFkR2xvYmFsRGF0YSgpLmNhY2hlZENvbnZlcnRlcklDVSgpLmNvbnZlcnRl
cjsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFRleHRDb2RlYz4gVGV4dENvZGVjSUNVOjpjcmVhdGUo
Y29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgY29uc3Qgdm9pZCogYWRkaXRpb25hbERhdGEp
Ci17Ci0gICAgLy8gTmFtZSBzdHJpbmdzIGFyZSBwZXJzaXN0ZW50bHkga2VwdCBpbiBUZXh0RW5j
b2RpbmdSZWdpc3RyeSBtYXBzLCBzbyB0aGV5IGFyZSBuZXZlciBkZWxldGVkLgotICAgIHJldHVy
biBzdGQ6Om1ha2VfdW5pcXVlPFRleHRDb2RlY0lDVT4oZW5jb2RpbmcubmFtZSgpLCBzdGF0aWNf
Y2FzdDxjb25zdCBjaGFyKj4oYWRkaXRpb25hbERhdGEpKTsKLX0KLQogI2RlZmluZSBERUNMQVJF
X0FMSUFTRVMoZW5jb2RpbmcsIC4uLikgXAogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBl
bmNvZGluZyMjX2FsaWFzZXNbXSB7IF9fVkFfQVJHU19fIH0KIApAQCAtMTY5LDExNCArMTUwLDEx
NSBAQCB2b2lkIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJFbmNvZGluZ05hbWVzCiB2b2lkIFRleHRD
b2RlY0lDVTo6cmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKIHsK
ICAgICBmb3IgKGF1dG8mIGVuY29kaW5nTmFtZSA6IGVuY29kaW5nTmFtZXMpIHsKKyAgICAgICAg
Y29uc3QgY2hhciogbmFtZSA9IGVuY29kaW5nTmFtZS5uYW1lOworCiAgICAgICAgIC8vIFRoZXNl
IGVuY29kaW5ncyBjdXJyZW50bHkgZG9uJ3QgaGF2ZSBzdGFuZGFyZCBuYW1lcywgc28gd2UgbmVl
ZCB0byByZWdpc3RlciBlbmNvZGVycyBtYW51YWxseS4KICAgICAgICAgLy8gaHR0cDovL2RlbW8u
aWN1LXByb2plY3Qub3JnL2ljdS1iaW4vY29udmV4cAotICAgICAgICBpZiAoIXN0cmNtcChlbmNv
ZGluZ05hbWUubmFtZSwgIndpbmRvd3MtODc0IikpIHsKLSAgICAgICAgICAgIHJlZ2lzdHJhcihl
bmNvZGluZ05hbWUubmFtZSwgY3JlYXRlLCAid2luZG93cy04NzQtMjAwMCIpOworICAgICAgICBp
ZiAoIXN0cmNtcChuYW1lLCAid2luZG93cy04NzQiKSkgeworICAgICAgICAgICAgcmVnaXN0cmFy
KG5hbWUsIFtuYW1lXSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8
VGV4dENvZGVjSUNVPihuYW1lLCAid2luZG93cy04NzQtMjAwMCIpOworICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoIXN0cmNtcChl
bmNvZGluZ05hbWUubmFtZSwgIndpbmRvd3MtOTQ5IikpIHsKLSAgICAgICAgICAgIHJlZ2lzdHJh
cihlbmNvZGluZ05hbWUubmFtZSwgY3JlYXRlLCAid2luZG93cy05NDktMjAwMCIpOworICAgICAg
ICBpZiAoIXN0cmNtcChuYW1lLCAid2luZG93cy05NDkiKSkgeworICAgICAgICAgICAgcmVnaXN0
cmFyKG5hbWUsIFtuYW1lXSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlx
dWU8VGV4dENvZGVjSUNVPihuYW1lLCAid2luZG93cy05NDktMjAwMCIpOworICAgICAgICAgICAg
fSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoIXN0cmNt
cChlbmNvZGluZ05hbWUubmFtZSwgIngtbWFjLWN5cmlsbGljIikpIHsKLSAgICAgICAgICAgIHJl
Z2lzdHJhcihlbmNvZGluZ05hbWUubmFtZSwgY3JlYXRlLCAibWFjb3MtN18zLTEwLjIiKTsKKyAg
ICAgICAgaWYgKCFzdHJjbXAobmFtZSwgIngtbWFjLWN5cmlsbGljIikpIHsKKyAgICAgICAgICAg
IHJlZ2lzdHJhcihuYW1lLCBbbmFtZV0geworICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1h
a2VfdW5pcXVlPFRleHRDb2RlY0lDVT4obmFtZSwgIm1hY29zLTdfMy0xMC4yIik7CisgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmICgh
c3RyY21wKGVuY29kaW5nTmFtZS5uYW1lLCAieC1tYWMtZ3JlZWsiKSkgewotICAgICAgICAgICAg
cmVnaXN0cmFyKGVuY29kaW5nTmFtZS5uYW1lLCBjcmVhdGUsICJtYWNvcy02XzItMTAuNCIpOwor
ICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAieC1tYWMtZ3JlZWsiKSkgeworICAgICAgICAgICAg
cmVnaXN0cmFyKG5hbWUsIFtuYW1lXSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV91bmlxdWU8VGV4dENvZGVjSUNVPihuYW1lLCAibWFjb3MtNl8yLTEwLjQiKTsKKyAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFz
dHJjbXAoZW5jb2RpbmdOYW1lLm5hbWUsICJ4LW1hYy1jZW50cmFsZXVycm9tYW4iKSkgewotICAg
ICAgICAgICAgcmVnaXN0cmFyKGVuY29kaW5nTmFtZS5uYW1lLCBjcmVhdGUsICJtYWNvcy0yOS0x
MC4yIik7CisgICAgICAgIGlmICghc3RyY21wKG5hbWUsICJ4LW1hYy1jZW50cmFsZXVycm9tYW4i
KSkgeworICAgICAgICAgICAgcmVnaXN0cmFyKG5hbWUsIFtuYW1lXSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjSUNVPihuYW1lLCAibWFjb3MtMjkt
MTAuMiIpOworICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQotICAgICAgICBpZiAoIXN0cmNtcChlbmNvZGluZ05hbWUubmFtZSwgIngtbWFjLXR1cmtpc2gi
KSkgewotICAgICAgICAgICAgcmVnaXN0cmFyKGVuY29kaW5nTmFtZS5uYW1lLCBjcmVhdGUsICJt
YWNvcy0zNS0xMC4yIik7CisgICAgICAgIGlmICghc3RyY21wKG5hbWUsICJ4LW1hYy10dXJraXNo
IikpIHsKKyAgICAgICAgICAgIHJlZ2lzdHJhcihuYW1lLCBbbmFtZV0geworICAgICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFRleHRDb2RlY0lDVT4obmFtZSwgIm1hY29zLTM1
LTEwLjIiKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KLSAgICAgICAgaWYgKCFzdHJjbXAoZW5jb2RpbmdOYW1lLm5hbWUsICJFVUMtS1IiKSkgewot
ICAgICAgICAgICAgcmVnaXN0cmFyKGVuY29kaW5nTmFtZS5uYW1lLCBjcmVhdGUsICJ3aW5kb3dz
LTk0OSIpOworICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAiRVVDLUtSIikpIHsKKyAgICAgICAg
ICAgIHJlZ2lzdHJhcihuYW1lLCBbbmFtZV0geworICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1ha2VfdW5pcXVlPFRleHRDb2RlY0lDVT4obmFtZSwgIndpbmRvd3MtOTQ5Iik7CisgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKICAgICAgICAgVUVy
cm9yQ29kZSBlcnJvciA9IFVfWkVST19FUlJPUjsKLSAgICAgICAgY29uc3QgY2hhciogY2Fub25p
Y2FsQ29udmVydGVyTmFtZSA9IHVjbnZfZ2V0Q2Fub25pY2FsTmFtZShlbmNvZGluZ05hbWUubmFt
ZSwgIklBTkEiLCAmZXJyb3IpOworICAgICAgICBjb25zdCBjaGFyKiBjYW5vbmljYWxDb252ZXJ0
ZXJOYW1lID0gdWNudl9nZXRDYW5vbmljYWxOYW1lKG5hbWUsICJJQU5BIiwgJmVycm9yKTsKICAg
ICAgICAgQVNTRVJUKFVfU1VDQ0VTUyhlcnJvcikpOwotICAgICAgICByZWdpc3RyYXIoZW5jb2Rp
bmdOYW1lLm5hbWUsIGNyZWF0ZSwgY2Fub25pY2FsQ29udmVydGVyTmFtZSk7CisgICAgICAgIHJl
Z2lzdHJhcihuYW1lLCBbbmFtZSwgY2Fub25pY2FsQ29udmVydGVyTmFtZV0geworICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjSUNVPihuYW1lLCBjYW5vbmljYWxD
b252ZXJ0ZXJOYW1lKTsKKyAgICAgICAgfSk7CiAgICAgfQogfQogCiBUZXh0Q29kZWNJQ1U6OlRl
eHRDb2RlY0lDVShjb25zdCBjaGFyKiBlbmNvZGluZywgY29uc3QgY2hhciogY2Fub25pY2FsQ29u
dmVydGVyTmFtZSkKICAgICA6IG1fZW5jb2RpbmdOYW1lKGVuY29kaW5nKQogICAgICwgbV9jYW5v
bmljYWxDb252ZXJ0ZXJOYW1lKGNhbm9uaWNhbENvbnZlcnRlck5hbWUpCi0gICAgLCBtX2NvbnZl
cnRlcklDVSgwKQotICAgICwgbV9uZWVkc0dCS0ZhbGxiYWNrcyhmYWxzZSkKIHsKIH0KIAogVGV4
dENvZGVjSUNVOjp+VGV4dENvZGVjSUNVKCkKIHsKLSAgICByZWxlYXNlSUNVQ29udmVydGVyKCk7
Ci19Ci0KLXZvaWQgVGV4dENvZGVjSUNVOjpyZWxlYXNlSUNVQ29udmVydGVyKCkgY29uc3QKLXsK
LSAgICBpZiAobV9jb252ZXJ0ZXJJQ1UpIHsKLSAgICAgICAgVUNvbnZlcnRlciomIGNhY2hlZENv
bnZlcnRlciA9IGNhY2hlZENvbnZlcnRlcklDVSgpOwotICAgICAgICBpZiAoY2FjaGVkQ29udmVy
dGVyKQotICAgICAgICAgICAgdWNudl9jbG9zZShjYWNoZWRDb252ZXJ0ZXIpOwotICAgICAgICB1
Y252X3Jlc2V0KG1fY29udmVydGVySUNVKTsKLSAgICAgICAgY2FjaGVkQ29udmVydGVyID0gbV9j
b252ZXJ0ZXJJQ1U7Ci0gICAgICAgIG1fY29udmVydGVySUNVID0gMDsKKyAgICBpZiAobV9jb252
ZXJ0ZXIpIHsKKyAgICAgICAgdWNudl9yZXNldChtX2NvbnZlcnRlci5nZXQoKSk7CisgICAgICAg
IHRocmVhZEdsb2JhbERhdGEoKS5jYWNoZWRDb252ZXJ0ZXJJQ1UoKS5jb252ZXJ0ZXIgPSBXVEZN
b3ZlKG1fY29udmVydGVyKTsKICAgICB9CiB9CiAKIHZvaWQgVGV4dENvZGVjSUNVOjpjcmVhdGVJ
Q1VDb252ZXJ0ZXIoKSBjb25zdAogewotICAgIEFTU0VSVCghbV9jb252ZXJ0ZXJJQ1UpOwotCi0g
ICAgVUVycm9yQ29kZSBlcnI7CisgICAgQVNTRVJUKCFtX2NvbnZlcnRlcik7CiAKICAgICBtX25l
ZWRzR0JLRmFsbGJhY2tzID0gIXN0cmNtcChtX2VuY29kaW5nTmFtZSwgIkdCSyIpOwogCi0gICAg
VUNvbnZlcnRlciomIGNhY2hlZENvbnZlcnRlciA9IGNhY2hlZENvbnZlcnRlcklDVSgpOworICAg
IGF1dG8mIGNhY2hlZENvbnZlcnRlciA9IHRocmVhZEdsb2JhbERhdGEoKS5jYWNoZWRDb252ZXJ0
ZXJJQ1UoKS5jb252ZXJ0ZXI7CiAgICAgaWYgKGNhY2hlZENvbnZlcnRlcikgewotICAgICAgICBl
cnIgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGNhY2hlZENvbnZlcnRlck5h
bWUgPSB1Y252X2dldE5hbWUoY2FjaGVkQ29udmVydGVyLCAmZXJyKTsKLSAgICAgICAgaWYgKFVf
U1VDQ0VTUyhlcnIpICYmICFzdHJjbXAobV9jYW5vbmljYWxDb252ZXJ0ZXJOYW1lLCBjYWNoZWRD
b252ZXJ0ZXJOYW1lKSkgewotICAgICAgICAgICAgbV9jb252ZXJ0ZXJJQ1UgPSBjYWNoZWRDb252
ZXJ0ZXI7Ci0gICAgICAgICAgICBjYWNoZWRDb252ZXJ0ZXIgPSAwOworICAgICAgICBVRXJyb3JD
b2RlIGVycm9yID0gVV9aRVJPX0VSUk9SOworICAgICAgICBjb25zdCBjaGFyKiBjYWNoZWRDb252
ZXJ0ZXJOYW1lID0gdWNudl9nZXROYW1lKGNhY2hlZENvbnZlcnRlci5nZXQoKSwgJmVycm9yKTsK
KyAgICAgICAgaWYgKFVfU1VDQ0VTUyhlcnJvcikgJiYgIXN0cmNtcChtX2Nhbm9uaWNhbENvbnZl
cnRlck5hbWUsIGNhY2hlZENvbnZlcnRlck5hbWUpKSB7CisgICAgICAgICAgICBtX2NvbnZlcnRl
ciA9IFdURk1vdmUoY2FjaGVkQ29udmVydGVyKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgIH0KIAotICAgIGVyciA9IFVfWkVST19FUlJPUjsKLSAgICBtX2NvbnZlcnRlcklD
VSA9IHVjbnZfb3BlbihtX2Nhbm9uaWNhbENvbnZlcnRlck5hbWUsICZlcnIpOwotICAgIEFTU0VS
VChVX1NVQ0NFU1MoZXJyKSk7Ci0gICAgaWYgKG1fY29udmVydGVySUNVKQotICAgICAgICB1Y252
X3NldEZhbGxiYWNrKG1fY29udmVydGVySUNVLCBUUlVFKTsKKyAgICBVRXJyb3JDb2RlIGVycm9y
ID0gVV9aRVJPX0VSUk9SOworICAgIG1fY29udmVydGVyID0gSUNVQ29udmVydGVyUHRyIHsgdWNu
dl9vcGVuKG1fY2Fub25pY2FsQ29udmVydGVyTmFtZSwgJmVycm9yKSwgdWNudl9jbG9zZSB9Owor
ICAgIGlmIChtX2NvbnZlcnRlcikKKyAgICAgICAgdWNudl9zZXRGYWxsYmFjayhtX2NvbnZlcnRl
ci5nZXQoKSwgVFJVRSk7CiB9CiAKLWludCBUZXh0Q29kZWNJQ1U6OmRlY29kZVRvQnVmZmVyKFVD
aGFyKiB0YXJnZXQsIFVDaGFyKiB0YXJnZXRMaW1pdCwgY29uc3QgY2hhciomIHNvdXJjZSwgY29u
c3QgY2hhciogc291cmNlTGltaXQsIGludDMyX3QqIG9mZnNldHMsIGJvb2wgZmx1c2gsIFVFcnJv
ckNvZGUmIGVycikKK2ludCBUZXh0Q29kZWNJQ1U6OmRlY29kZVRvQnVmZmVyKFVDaGFyKiB0YXJn
ZXQsIFVDaGFyKiB0YXJnZXRMaW1pdCwgY29uc3QgY2hhciomIHNvdXJjZSwgY29uc3QgY2hhciog
c291cmNlTGltaXQsIGludDMyX3QqIG9mZnNldHMsIGJvb2wgZmx1c2gsIFVFcnJvckNvZGUmIGVy
cm9yKQogewogICAgIFVDaGFyKiB0YXJnZXRTdGFydCA9IHRhcmdldDsKLSAgICBlcnIgPSBVX1pF
Uk9fRVJST1I7Ci0gICAgdWNudl90b1VuaWNvZGUobV9jb252ZXJ0ZXJJQ1UsICZ0YXJnZXQsIHRh
cmdldExpbWl0LCAmc291cmNlLCBzb3VyY2VMaW1pdCwgb2Zmc2V0cywgZmx1c2gsICZlcnIpOwor
ICAgIGVycm9yID0gVV9aRVJPX0VSUk9SOworICAgIHVjbnZfdG9Vbmljb2RlKG1fY29udmVydGVy
LmdldCgpLCAmdGFyZ2V0LCB0YXJnZXRMaW1pdCwgJnNvdXJjZSwgc291cmNlTGltaXQsIG9mZnNl
dHMsIGZsdXNoLCAmZXJyb3IpOwogICAgIHJldHVybiB0YXJnZXQgLSB0YXJnZXRTdGFydDsKIH0K
IAogY2xhc3MgRXJyb3JDYWxsYmFja1NldHRlciB7CiBwdWJsaWM6Ci0gICAgRXJyb3JDYWxsYmFj
a1NldHRlcihVQ29udmVydGVyKiBjb252ZXJ0ZXIsIGJvb2wgc3RvcE9uRXJyb3IpCisgICAgRXJy
b3JDYWxsYmFja1NldHRlcihVQ29udmVydGVyJiBjb252ZXJ0ZXIsIGJvb2wgc3RvcE9uRXJyb3Ip
CiAgICAgICAgIDogbV9jb252ZXJ0ZXIoY29udmVydGVyKQogICAgICAgICAsIG1fc2hvdWxkU3Rv
cE9uRW5jb2RpbmdFcnJvcnMoc3RvcE9uRXJyb3IpCiAgICAgewogICAgICAgICBpZiAobV9zaG91
bGRTdG9wT25FbmNvZGluZ0Vycm9ycykgewogICAgICAgICAgICAgVUVycm9yQ29kZSBlcnIgPSBV
X1pFUk9fRVJST1I7Ci0gICAgICAgICAgICB1Y252X3NldFRvVUNhbGxCYWNrKG1fY29udmVydGVy
LCBVQ05WX1RPX1VfQ0FMTEJBQ0tfU1VCU1RJVFVURSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFVDTlZfU1VCX1NUT1BfT05fSUxMRUdBTCwgJm1fc2F2ZWRBY3Rpb24sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAmbV9zYXZlZENvbnRleHQsICZlcnIpOworICAgICAgICAgICAgdWNu
dl9zZXRUb1VDYWxsQmFjaygmbV9jb252ZXJ0ZXIsIFVDTlZfVE9fVV9DQUxMQkFDS19TVUJTVElU
VVRFLCBVQ05WX1NVQl9TVE9QX09OX0lMTEVHQUwsICZtX3NhdmVkQWN0aW9uLCAmbV9zYXZlZENv
bnRleHQsICZlcnIpOwogICAgICAgICAgICAgQVNTRVJUKGVyciA9PSBVX1pFUk9fRVJST1IpOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMjg2LDkgKzI2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IFVFcnJvckNvZGUgZXJyID0gVV9aRVJPX0VSUk9SOwogICAgICAgICAgICAgY29uc3Qgdm9pZCog
b2xkQ29udGV4dDsKICAgICAgICAgICAgIFVDb252ZXJ0ZXJUb1VDYWxsYmFjayBvbGRBY3Rpb247
Ci0gICAgICAgICAgICB1Y252X3NldFRvVUNhbGxCYWNrKG1fY29udmVydGVyLCBtX3NhdmVkQWN0
aW9uLAotICAgICAgICAgICAgICAgICAgIG1fc2F2ZWRDb250ZXh0LCAmb2xkQWN0aW9uLAotICAg
ICAgICAgICAgICAgICAgICZvbGRDb250ZXh0LCAmZXJyKTsKKyAgICAgICAgICAgIHVjbnZfc2V0
VG9VQ2FsbEJhY2soJm1fY29udmVydGVyLCBtX3NhdmVkQWN0aW9uLCBtX3NhdmVkQ29udGV4dCwg
Jm9sZEFjdGlvbiwgJm9sZENvbnRleHQsICZlcnIpOwogICAgICAgICAgICAgQVNTRVJUKG9sZEFj
dGlvbiA9PSBVQ05WX1RPX1VfQ0FMTEJBQ0tfU1VCU1RJVFVURSk7CiAgICAgICAgICAgICBBU1NF
UlQoIXN0cmNtcChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4ob2xkQ29udGV4dCksIFVDTlZfU1VC
X1NUT1BfT05fSUxMRUdBTCkpOwogICAgICAgICAgICAgQVNTRVJUKGVyciA9PSBVX1pFUk9fRVJS
T1IpOwpAQCAtMjk2LDcgKzI3Niw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAg
VUNvbnZlcnRlciogbV9jb252ZXJ0ZXI7CisgICAgVUNvbnZlcnRlciYgbV9jb252ZXJ0ZXI7CiAg
ICAgYm9vbCBtX3Nob3VsZFN0b3BPbkVuY29kaW5nRXJyb3JzOwogICAgIGNvbnN0IHZvaWQqIG1f
c2F2ZWRDb250ZXh0OwogICAgIFVDb252ZXJ0ZXJUb1VDYWxsYmFjayBtX3NhdmVkQWN0aW9uOwpA
QCAtMzA1LDE2ICsyODUsMTYgQEAgcHJpdmF0ZToKIFN0cmluZyBUZXh0Q29kZWNJQ1U6OmRlY29k
ZShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9w
T25FcnJvciwgYm9vbCYgc2F3RXJyb3IpCiB7CiAgICAgLy8gR2V0IGEgY29udmVydGVyIGZvciB0
aGUgcGFzc2VkLWluIGVuY29kaW5nLgotICAgIGlmICghbV9jb252ZXJ0ZXJJQ1UpIHsKKyAgICBp
ZiAoIW1fY29udmVydGVyKSB7CiAgICAgICAgIGNyZWF0ZUlDVUNvbnZlcnRlcigpOwotICAgICAg
ICBBU1NFUlQobV9jb252ZXJ0ZXJJQ1UpOwotICAgICAgICBpZiAoIW1fY29udmVydGVySUNVKSB7
CisgICAgICAgIGlmICghbV9jb252ZXJ0ZXIpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiZXJy
b3IgY3JlYXRpbmcgSUNVIGVuY29kZXIgZXZlbiB0aG91Z2ggZW5jb2Rpbmcgd2FzIGluIHRhYmxl
Iik7Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgICAgICBzYXdFcnJvciA9
IHRydWU7CisgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9CiAgICAgfQogICAgIAot
ICAgIEVycm9yQ2FsbGJhY2tTZXR0ZXIgY2FsbGJhY2tTZXR0ZXIobV9jb252ZXJ0ZXJJQ1UsIHN0
b3BPbkVycm9yKTsKKyAgICBFcnJvckNhbGxiYWNrU2V0dGVyIGNhbGxiYWNrU2V0dGVyKCptX2Nv
bnZlcnRlciwgc3RvcE9uRXJyb3IpOwogCiAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAKQEAg
LTM0MCwxNyArMzIwLDE1IEBAIFN0cmluZyBUZXh0Q29kZWNJQ1U6OmRlY29kZShjb25zdCBjaGFy
KiAKIAogICAgIFN0cmluZyByZXN1bHRTdHJpbmcgPSByZXN1bHQudG9TdHJpbmcoKTsKIAotICAg
IC8vIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAxND4KICAgICAv
LyBTaW1wbGlmaWVkIENoaW5lc2UgcGFnZXMgdXNlIHRoZSBjb2RlIEEzQTAgdG8gbWVhbiAiZnVs
bC13aWR0aCBzcGFjZSIsIGJ1dCBJQ1UgZGVjb2RlcyBpdCBhcyBVK0U1RTUuCi0gICAgLy8gRklY
TUU6IHN0cmNhc2VjbXAgaXMgbG9jYWxlIHNlbnNpdGl2ZSwgd2Ugc2hvdWxkIG5vdCBiZSB1c2lu
ZyBpdC4KLSAgICBpZiAoc3RyY21wKG1fZW5jb2RpbmdOYW1lLCAiR0JLIikgPT0gMCB8fCBzdHJj
YXNlY21wKG1fZW5jb2RpbmdOYW1lLCAiZ2IxODAzMCIpID09IDApCisgICAgaWYgKCFzdHJjbXAo
bV9lbmNvZGluZ05hbWUsICJHQksiKSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSht
X2VuY29kaW5nTmFtZSwgImdiMTgwMzAiKSkKICAgICAgICAgcmVzdWx0U3RyaW5nLnJlcGxhY2Uo
MHhFNUU1LCBpZGVvZ3JhcGhpY1NwYWNlKTsKIAogICAgIHJldHVybiByZXN1bHRTdHJpbmc7CiB9
CiAKIC8vIFdlIG5lZWQgdG8gYXBwbHkgdGhlc2UgZmFsbGJhY2tzIG91cnNlbHZlcyBhcyB0aGV5
IGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZCBieSBJQ1UgYW5kCi0vLyB0aGV5IHdlcmUgcHJv
dmlkZWQgYnkgdGhlIG9sZCBURUMgZW5jb2RpbmcgcGF0aC4gTmVlZGVkIHRvIGZpeCA8cmRhcjov
L3Byb2JsZW0vNDcwODY4OT4uCisvLyB0aGV5IHdlcmUgcHJvdmlkZWQgYnkgdGhlIE1hYyBURUMg
ZW5jb2RpbmcgcGF0aC4gTmVlZGVkIHRvIGZpeCA8cmRhcjovL3Byb2JsZW0vNDcwODY4OT4uCiBz
dGF0aWMgVUNoYXIgZmFsbGJhY2tGb3JHQksoVUNoYXIzMiBjaGFyYWN0ZXIpCiB7CiAgICAgc3dp
dGNoIChjaGFyYWN0ZXIpIHsKQEAgLTM2OSwxMzAgKzM0NywxMjIgQEAgc3RhdGljIFVDaGFyIGZh
bGxiYWNrRm9yR0JLKFVDaGFyMzIgY2hhcgogLy8gSW52YWxpZCBjaGFyYWN0ZXIgaGFuZGxlciB3
aGVuIHdyaXRpbmcgZXNjYXBlZCBlbnRpdGllcyBmb3IgdW5yZXByZXNlbnRhYmxlCiAvLyBjaGFy
YWN0ZXJzLiBTZWUgdGhlIGRlY2xhcmF0aW9uIG9mIFRleHRDb2RlYzo6ZW5jb2RlIGZvciBtb3Jl
Lgogc3RhdGljIHZvaWQgdXJsRXNjYXBlZEVudGl0eUNhbGxiYWNrKGNvbnN0IHZvaWQqIGNvbnRl
eHQsIFVDb252ZXJ0ZXJGcm9tVW5pY29kZUFyZ3MqIGZyb21VQXJncywgY29uc3QgVUNoYXIqIGNv
ZGVVbml0cywgaW50MzJfdCBsZW5ndGgsCi0gICAgVUNoYXIzMiBjb2RlUG9pbnQsIFVDb252ZXJ0
ZXJDYWxsYmFja1JlYXNvbiByZWFzb24sIFVFcnJvckNvZGUqIGVycikKKyAgICBVQ2hhcjMyIGNv
ZGVQb2ludCwgVUNvbnZlcnRlckNhbGxiYWNrUmVhc29uIHJlYXNvbiwgVUVycm9yQ29kZSogZXJy
b3IpCiB7CiAgICAgaWYgKHJlYXNvbiA9PSBVQ05WX1VOQVNTSUdORUQpIHsKLSAgICAgICAgKmVy
ciA9IFVfWkVST19FUlJPUjsKLQorICAgICAgICAqZXJyb3IgPSBVX1pFUk9fRVJST1I7CiAgICAg
ICAgIFVuZW5jb2RhYmxlUmVwbGFjZW1lbnRBcnJheSBlbnRpdHk7CiAgICAgICAgIGludCBlbnRp
dHlMZW4gPSBUZXh0Q29kZWM6OmdldFVuZW5jb2RhYmxlUmVwbGFjZW1lbnQoY29kZVBvaW50LCBV
UkxFbmNvZGVkRW50aXRpZXNGb3JVbmVuY29kYWJsZXMsIGVudGl0eSk7Ci0gICAgICAgIHVjbnZf
Y2JGcm9tVVdyaXRlQnl0ZXMoZnJvbVVBcmdzLCBlbnRpdHksIGVudGl0eUxlbiwgMCwgZXJyKTsK
KyAgICAgICAgdWNudl9jYkZyb21VV3JpdGVCeXRlcyhmcm9tVUFyZ3MsIGVudGl0eS5kYXRhKCks
IGVudGl0eUxlbiwgMCwgZXJyb3IpOwogICAgIH0gZWxzZQotICAgICAgICBVQ05WX0ZST01fVV9D
QUxMQkFDS19FU0NBUEUoY29udGV4dCwgZnJvbVVBcmdzLCBjb2RlVW5pdHMsIGxlbmd0aCwgY29k
ZVBvaW50LCByZWFzb24sIGVycik7CisgICAgICAgIFVDTlZfRlJPTV9VX0NBTExCQUNLX0VTQ0FQ
RShjb250ZXh0LCBmcm9tVUFyZ3MsIGNvZGVVbml0cywgbGVuZ3RoLCBjb2RlUG9pbnQsIHJlYXNv
biwgZXJyb3IpOwogfQogCiAvLyBTdWJzdGl0dXRlcyBzcGVjaWFsIEdCSyBjaGFyYWN0ZXJzLCBl
c2NhcGluZyBhbGwgb3RoZXIgdW5hc3NpZ25lZCBlbnRpdGllcy4KIHN0YXRpYyB2b2lkIGdia0Nh
bGxiYWNrRXNjYXBlKGNvbnN0IHZvaWQqIGNvbnRleHQsIFVDb252ZXJ0ZXJGcm9tVW5pY29kZUFy
Z3MqIGZyb21VQXJncywgY29uc3QgVUNoYXIqIGNvZGVVbml0cywgaW50MzJfdCBsZW5ndGgsCi0g
ICAgVUNoYXIzMiBjb2RlUG9pbnQsIFVDb252ZXJ0ZXJDYWxsYmFja1JlYXNvbiByZWFzb24sIFVF
cnJvckNvZGUqIGVycikgCisgICAgVUNoYXIzMiBjb2RlUG9pbnQsIFVDb252ZXJ0ZXJDYWxsYmFj
a1JlYXNvbiByZWFzb24sIFVFcnJvckNvZGUqIGVycm9yKQogewogICAgIFVDaGFyIG91dENoYXI7
CiAgICAgaWYgKHJlYXNvbiA9PSBVQ05WX1VOQVNTSUdORUQgJiYgKG91dENoYXIgPSBmYWxsYmFj
a0ZvckdCSyhjb2RlUG9pbnQpKSkgewogICAgICAgICBjb25zdCBVQ2hhciogc291cmNlID0gJm91
dENoYXI7Ci0gICAgICAgICplcnIgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAgIHVjbnZfY2JGcm9t
VVdyaXRlVUNoYXJzKGZyb21VQXJncywgJnNvdXJjZSwgc291cmNlICsgMSwgMCwgZXJyKTsKKyAg
ICAgICAgKmVycm9yID0gVV9aRVJPX0VSUk9SOworICAgICAgICB1Y252X2NiRnJvbVVXcml0ZVVD
aGFycyhmcm9tVUFyZ3MsICZzb3VyY2UsIHNvdXJjZSArIDEsIDAsIGVycm9yKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICBVQ05WX0ZST01fVV9DQUxMQkFDS19FU0NBUEUoY29udGV4dCwg
ZnJvbVVBcmdzLCBjb2RlVW5pdHMsIGxlbmd0aCwgY29kZVBvaW50LCByZWFzb24sIGVycik7Cisg
ICAgVUNOVl9GUk9NX1VfQ0FMTEJBQ0tfRVNDQVBFKGNvbnRleHQsIGZyb21VQXJncywgY29kZVVu
aXRzLCBsZW5ndGgsIGNvZGVQb2ludCwgcmVhc29uLCBlcnJvcik7CiB9CiAKIC8vIENvbWJpbmVz
IGJvdGggZ2JrVXJsRXNjYXBlZEVudGl0eUNhbGxiYWNrIGFuZCBHQksgY2hhcmFjdGVyIHN1YnN0
aXR1dGlvbi4KIHN0YXRpYyB2b2lkIGdia1VybEVzY2FwZWRFbnRpdHlDYWxsYWNrKGNvbnN0IHZv
aWQqIGNvbnRleHQsIFVDb252ZXJ0ZXJGcm9tVW5pY29kZUFyZ3MqIGZyb21VQXJncywgY29uc3Qg
VUNoYXIqIGNvZGVVbml0cywgaW50MzJfdCBsZW5ndGgsCi0gICAgVUNoYXIzMiBjb2RlUG9pbnQs
IFVDb252ZXJ0ZXJDYWxsYmFja1JlYXNvbiByZWFzb24sIFVFcnJvckNvZGUqIGVycikgCisgICAg
VUNoYXIzMiBjb2RlUG9pbnQsIFVDb252ZXJ0ZXJDYWxsYmFja1JlYXNvbiByZWFzb24sIFVFcnJv
ckNvZGUqIGVycm9yKQogewogICAgIGlmIChyZWFzb24gPT0gVUNOVl9VTkFTU0lHTkVEKSB7CiAg
ICAgICAgIGlmIChVQ2hhciBvdXRDaGFyID0gZmFsbGJhY2tGb3JHQksoY29kZVBvaW50KSkgewog
ICAgICAgICAgICAgY29uc3QgVUNoYXIqIHNvdXJjZSA9ICZvdXRDaGFyOwotICAgICAgICAgICAg
KmVyciA9IFVfWkVST19FUlJPUjsKLSAgICAgICAgICAgIHVjbnZfY2JGcm9tVVdyaXRlVUNoYXJz
KGZyb21VQXJncywgJnNvdXJjZSwgc291cmNlICsgMSwgMCwgZXJyKTsKKyAgICAgICAgICAgICpl
cnJvciA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgICAgIHVjbnZfY2JGcm9tVVdyaXRlVUNoYXJz
KGZyb21VQXJncywgJnNvdXJjZSwgc291cmNlICsgMSwgMCwgZXJyb3IpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHVybEVzY2FwZWRFbnRpdHlDYWxsYmFjayhjb250
ZXh0LCBmcm9tVUFyZ3MsIGNvZGVVbml0cywgbGVuZ3RoLCBjb2RlUG9pbnQsIHJlYXNvbiwgZXJy
KTsKKyAgICAgICAgdXJsRXNjYXBlZEVudGl0eUNhbGxiYWNrKGNvbnRleHQsIGZyb21VQXJncywg
Y29kZVVuaXRzLCBsZW5ndGgsIGNvZGVQb2ludCwgcmVhc29uLCBlcnJvcik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgVUNOVl9GUk9NX1VfQ0FMTEJBQ0tfRVNDQVBFKGNvbnRleHQsIGZy
b21VQXJncywgY29kZVVuaXRzLCBsZW5ndGgsIGNvZGVQb2ludCwgcmVhc29uLCBlcnIpOworICAg
IFVDTlZfRlJPTV9VX0NBTExCQUNLX0VTQ0FQRShjb250ZXh0LCBmcm9tVUFyZ3MsIGNvZGVVbml0
cywgbGVuZ3RoLCBjb2RlUG9pbnQsIHJlYXNvbiwgZXJyb3IpOwogfQogCiBzdGF0aWMgdm9pZCBn
YmtDYWxsYmFja1N1YnN0aXR1dGUoY29uc3Qgdm9pZCogY29udGV4dCwgVUNvbnZlcnRlckZyb21V
bmljb2RlQXJncyogZnJvbVVBcmdzLCBjb25zdCBVQ2hhciogY29kZVVuaXRzLCBpbnQzMl90IGxl
bmd0aCwKLSAgICBVQ2hhcjMyIGNvZGVQb2ludCwgVUNvbnZlcnRlckNhbGxiYWNrUmVhc29uIHJl
YXNvbiwgVUVycm9yQ29kZSogZXJyKSAKKyAgICBVQ2hhcjMyIGNvZGVQb2ludCwgVUNvbnZlcnRl
ckNhbGxiYWNrUmVhc29uIHJlYXNvbiwgVUVycm9yQ29kZSogZXJyb3IpCiB7CiAgICAgVUNoYXIg
b3V0Q2hhcjsKICAgICBpZiAocmVhc29uID09IFVDTlZfVU5BU1NJR05FRCAmJiAob3V0Q2hhciA9
IGZhbGxiYWNrRm9yR0JLKGNvZGVQb2ludCkpKSB7CiAgICAgICAgIGNvbnN0IFVDaGFyKiBzb3Vy
Y2UgPSAmb3V0Q2hhcjsKLSAgICAgICAgKmVyciA9IFVfWkVST19FUlJPUjsKLSAgICAgICAgdWNu
dl9jYkZyb21VV3JpdGVVQ2hhcnMoZnJvbVVBcmdzLCAmc291cmNlLCBzb3VyY2UgKyAxLCAwLCBl
cnIpOworICAgICAgICAqZXJyb3IgPSBVX1pFUk9fRVJST1I7CisgICAgICAgIHVjbnZfY2JGcm9t
VVdyaXRlVUNoYXJzKGZyb21VQXJncywgJnNvdXJjZSwgc291cmNlICsgMSwgMCwgZXJyb3IpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIFVDTlZfRlJPTV9VX0NBTExCQUNLX1NVQlNUSVRV
VEUoY29udGV4dCwgZnJvbVVBcmdzLCBjb2RlVW5pdHMsIGxlbmd0aCwgY29kZVBvaW50LCByZWFz
b24sIGVycik7CisgICAgVUNOVl9GUk9NX1VfQ0FMTEJBQ0tfU1VCU1RJVFVURShjb250ZXh0LCBm
cm9tVUFyZ3MsIGNvZGVVbml0cywgbGVuZ3RoLCBjb2RlUG9pbnQsIHJlYXNvbiwgZXJyb3IpOwog
fQogCi1DU3RyaW5nIFRleHRDb2RlY0lDVTo6ZW5jb2RlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5nIGhhbmRsaW5nKQorVmVjdG9yPHVp
bnQ4X3Q+IFRleHRDb2RlY0lDVTo6ZW5jb2RlKFN0cmluZ1ZpZXcgc3RyaW5nLCBVbmVuY29kYWJs
ZUhhbmRsaW5nIGhhbmRsaW5nKQogewotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4g
IiI7CisgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CiAKLSAg
ICBpZiAoIW1fY29udmVydGVySUNVKQorICAgIGlmICghbV9jb252ZXJ0ZXIpIHsKICAgICAgICAg
Y3JlYXRlSUNVQ29udmVydGVyKCk7Ci0gICAgaWYgKCFtX2NvbnZlcnRlcklDVSkKLSAgICAgICAg
cmV0dXJuIENTdHJpbmcoKTsKKyAgICAgICAgaWYgKCFtX2NvbnZlcnRlcikKKyAgICAgICAgICAg
IHJldHVybiB7IH07CisgICAgfQogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBzZWUgaWYgdGhl
cmUgaXMgImZvcmNlIEFTQ0lJIHJhbmdlIiBtb2RlIGluIElDVTsKICAgICAvLyB1bnRpbCB0aGVu
LCB3ZSBjaGFuZ2UgdGhlIGJhY2tzbGFzaCBpbnRvIGEgeWVuIHNpZ24uCiAgICAgLy8gRW5jb2Rp
bmcgd2lsbCBjaGFuZ2UgdGhlIHllbiBzaWduIGJhY2sgaW50byBhIGJhY2tzbGFzaC4KLSAgICBW
ZWN0b3I8VUNoYXI+IGNvcHk7Ci0gICAgY29uc3QgVUNoYXIqIHNvdXJjZSA9IGNoYXJhY3RlcnM7
CisgICAgU3RyaW5nIGNvcHk7CiAgICAgaWYgKHNob3VsZFNob3dCYWNrc2xhc2hBc0N1cnJlbmN5
U3ltYm9sSW4obV9lbmNvZGluZ05hbWUpKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJzW2ldID09ICdcXCcp
IHsKLSAgICAgICAgICAgICAgICBjb3B5LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKTsK
LSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGk7ICsraikKLSAgICAgICAg
ICAgICAgICAgICAgY29weS51bmNoZWNrZWRBcHBlbmQoY2hhcmFjdGVyc1tqXSk7Ci0gICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgaiA9IGk7IGogPCBsZW5ndGg7ICsraikgewotICAgICAgICAg
ICAgICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW2pdOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoY2hhcmFjdGVyID09ICdcXCcpCi0gICAgICAgICAgICAgICAgICAgICAgICBj
aGFyYWN0ZXIgPSB5ZW5TaWduOwotICAgICAgICAgICAgICAgICAgICBjb3B5LnVuY2hlY2tlZEFw
cGVuZChjaGFyYWN0ZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzb3Vy
Y2UgPSBjb3B5LmRhdGEoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQorICAgICAgICBjb3B5ID0gc3RyaW5nLnRvU3RyaW5nV2l0aG91dENvcHlpbmco
KTsKKyAgICAgICAgY29weS5yZXBsYWNlKCdcXCcsIHllblNpZ24pOworICAgICAgICBzdHJpbmcg
PSBjb3B5OwogICAgIH0KLSAgICBjb25zdCBVQ2hhciogc291cmNlTGltaXQgPSBzb3VyY2UgKyBs
ZW5ndGg7Ci0KLSAgICBVRXJyb3JDb2RlIGVyciA9IFVfWkVST19FUlJPUjsKIAorICAgIFVFcnJv
ckNvZGUgZXJyb3I7CiAgICAgc3dpdGNoIChoYW5kbGluZykgewotICAgICAgICBjYXNlIFF1ZXN0
aW9uTWFya3NGb3JVbmVuY29kYWJsZXM6Ci0gICAgICAgICAgICB1Y252X3NldFN1YnN0Q2hhcnMo
bV9jb252ZXJ0ZXJJQ1UsICI/IiwgMSwgJmVycik7Ci0gICAgICAgICAgICB1Y252X3NldEZyb21V
Q2FsbEJhY2sobV9jb252ZXJ0ZXJJQ1UsIG1fbmVlZHNHQktGYWxsYmFja3MgPyBnYmtDYWxsYmFj
a1N1YnN0aXR1dGUgOiBVQ05WX0ZST01fVV9DQUxMQkFDS19TVUJTVElUVVRFLCAwLCAwLCAwLCAm
ZXJyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVudGl0aWVzRm9yVW5lbmNv
ZGFibGVzOgotICAgICAgICAgICAgdWNudl9zZXRGcm9tVUNhbGxCYWNrKG1fY29udmVydGVySUNV
LCBtX25lZWRzR0JLRmFsbGJhY2tzID8gZ2JrQ2FsbGJhY2tFc2NhcGUgOiBVQ05WX0ZST01fVV9D
QUxMQkFDS19FU0NBUEUsIFVDTlZfRVNDQVBFX1hNTF9ERUMsIDAsIDAsICZlcnIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVVJMRW5jb2RlZEVudGl0aWVzRm9yVW5lbmNvZGFi
bGVzOgotICAgICAgICAgICAgdWNudl9zZXRGcm9tVUNhbGxCYWNrKG1fY29udmVydGVySUNVLCBt
X25lZWRzR0JLRmFsbGJhY2tzID8gZ2JrVXJsRXNjYXBlZEVudGl0eUNhbGxhY2sgOiB1cmxFc2Nh
cGVkRW50aXR5Q2FsbGJhY2ssIDAsIDAsIDAsICZlcnIpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgQVNTRVJUKFVfU1VDQ0VTUyhlcnIpKTsKLSAgICBpZiAoVV9GQUlMVVJFKGVy
cikpCi0gICAgICAgIHJldHVybiBDU3RyaW5nKCk7CisgICAgY2FzZSBRdWVzdGlvbk1hcmtzRm9y
VW5lbmNvZGFibGVzOgorICAgICAgICBlcnJvciA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgdWNu
dl9zZXRTdWJzdENoYXJzKG1fY29udmVydGVyLmdldCgpLCAiPyIsIDEsICZlcnJvcik7CisgICAg
ICAgIGlmIChVX0ZBSUxVUkUoZXJyb3IpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAg
ICAgZXJyb3IgPSBVX1pFUk9fRVJST1I7CisgICAgICAgIHVjbnZfc2V0RnJvbVVDYWxsQmFjayht
X2NvbnZlcnRlci5nZXQoKSwgbV9uZWVkc0dCS0ZhbGxiYWNrcyA/IGdia0NhbGxiYWNrU3Vic3Rp
dHV0ZSA6IFVDTlZfRlJPTV9VX0NBTExCQUNLX1NVQlNUSVRVVEUsIDAsIDAsIDAsICZlcnJvcik7
CisgICAgICAgIGlmIChVX0ZBSUxVUkUoZXJyb3IpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFbnRpdGllc0ZvclVuZW5jb2RhYmxlczoKKyAgICAg
ICAgZXJyb3IgPSBVX1pFUk9fRVJST1I7CisgICAgICAgIHVjbnZfc2V0RnJvbVVDYWxsQmFjayht
X2NvbnZlcnRlci5nZXQoKSwgbV9uZWVkc0dCS0ZhbGxiYWNrcyA/IGdia0NhbGxiYWNrRXNjYXBl
IDogVUNOVl9GUk9NX1VfQ0FMTEJBQ0tfRVNDQVBFLCBVQ05WX0VTQ0FQRV9YTUxfREVDLCAwLCAw
LCAmZXJyb3IpOworICAgICAgICBpZiAoVV9GQUlMVVJFKGVycm9yKSkKKyAgICAgICAgICAgIHJl
dHVybiB7IH07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVVJMRW5jb2RlZEVudGl0aWVzRm9y
VW5lbmNvZGFibGVzOgorICAgICAgICBlcnJvciA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgdWNu
dl9zZXRGcm9tVUNhbGxCYWNrKG1fY29udmVydGVyLmdldCgpLCBtX25lZWRzR0JLRmFsbGJhY2tz
ID8gZ2JrVXJsRXNjYXBlZEVudGl0eUNhbGxhY2sgOiB1cmxFc2NhcGVkRW50aXR5Q2FsbGJhY2ss
IDAsIDAsIDAsICZlcnJvcik7CisgICAgICAgIGlmIChVX0ZBSUxVUkUoZXJyb3IpKQorICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgYXV0byB1cGNv
bnZlcnRlZENoYXJhY3RlcnMgPSBzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CisgICAg
YXV0byogc291cmNlID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzLmdldCgpOworICAgIGF1dG8qIHNv
dXJjZUxpbWl0ID0gc291cmNlICsgc3RyaW5nLmxlbmd0aCgpOwogCi0gICAgVmVjdG9yPGNoYXI+
IHJlc3VsdDsKLSAgICBzaXplX3Qgc2l6ZSA9IDA7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3Vs
dDsKICAgICBkbyB7CiAgICAgICAgIGNoYXIgYnVmZmVyW0NvbnZlcnNpb25CdWZmZXJTaXplXTsK
ICAgICAgICAgY2hhciogdGFyZ2V0ID0gYnVmZmVyOwogICAgICAgICBjaGFyKiB0YXJnZXRMaW1p
dCA9IHRhcmdldCArIENvbnZlcnNpb25CdWZmZXJTaXplOwotICAgICAgICBlcnIgPSBVX1pFUk9f
RVJST1I7Ci0gICAgICAgIHVjbnZfZnJvbVVuaWNvZGUobV9jb252ZXJ0ZXJJQ1UsICZ0YXJnZXQs
IHRhcmdldExpbWl0LCAmc291cmNlLCBzb3VyY2VMaW1pdCwgMCwgdHJ1ZSwgJmVycik7Ci0gICAg
ICAgIHNpemVfdCBjb3VudCA9IHRhcmdldCAtIGJ1ZmZlcjsKLSAgICAgICAgcmVzdWx0Lmdyb3co
c2l6ZSArIGNvdW50KTsKLSAgICAgICAgbWVtY3B5KHJlc3VsdC5kYXRhKCkgKyBzaXplLCBidWZm
ZXIsIGNvdW50KTsKLSAgICAgICAgc2l6ZSArPSBjb3VudDsKLSAgICB9IHdoaWxlIChlcnIgPT0g
VV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpOwotCi0gICAgcmV0dXJuIENTdHJpbmcocmVzdWx0LmRh
dGEoKSwgc2l6ZSk7CisgICAgICAgIGVycm9yID0gVV9aRVJPX0VSUk9SOworICAgICAgICB1Y252
X2Zyb21Vbmljb2RlKG1fY29udmVydGVyLmdldCgpLCAmdGFyZ2V0LCB0YXJnZXRMaW1pdCwgJnNv
dXJjZSwgc291cmNlTGltaXQsIDAsIHRydWUsICZlcnJvcik7CisgICAgICAgIHJlc3VsdC5hcHBl
bmQocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgdGFyZ2V0IC0gYnVmZmVyKTsK
KyAgICB9IHdoaWxlIChlcnJvciA9PSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUik7CisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5oCShyZXZpc2lvbiAyMjUyMDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAw
NywgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dApAQCAtMjQsNTQgKzI0LDQ1IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVm
IFRleHRDb2RlY0lDVV9oCi0jZGVmaW5lIFRleHRDb2RlY0lDVV9oCisjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgIlRleHRDb2RlYy5oIgotI2luY2x1ZGUgPHVuaWNvZGUvdXR5cGVzLmg+Ci0KLXR5
cGVkZWYgc3RydWN0IFVDb252ZXJ0ZXIgVUNvbnZlcnRlcjsKKyNpbmNsdWRlIDx1bmljb2RlL3Vj
bnYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgVGV4dENvZGVjSUNVIDog
cHVibGljIFRleHRDb2RlYyB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPFRleHRDb2RlYz4gY3JlYXRlKGNvbnN0IFRleHRFbmNvZGluZyYsIGNvbnN0IHZvaWQq
IGFkZGl0aW9uYWxEYXRhKTsKLQotICAgICAgICBUZXh0Q29kZWNJQ1UoY29uc3QgY2hhciogZW5j
b2RpbmcsIGNvbnN0IGNoYXIqIGNhbm9uaWNhbENvbnZlcnRlck5hbWUpOwotCi0gICAgICAgIHN0
YXRpYyB2b2lkIHJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIpOwot
ICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIpOwot
Ci0gICAgICAgIHZpcnR1YWwgflRleHRDb2RlY0lDVSgpOwotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwg
Ym9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpIG92ZXJyaWRlOwotICAgICAgICBDU3Ry
aW5nIGVuY29kZShjb25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxp
bmcpIG92ZXJyaWRlOwotCi0gICAgICAgIHZvaWQgY3JlYXRlSUNVQ29udmVydGVyKCkgY29uc3Q7
Ci0gICAgICAgIHZvaWQgcmVsZWFzZUlDVUNvbnZlcnRlcigpIGNvbnN0OwotICAgICAgICBib29s
IG5lZWRzR0JLRmFsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc0dCS0ZhbGxiYWNrczsg
fQotICAgICAgICB2b2lkIHNldE5lZWRzR0JLRmFsbGJhY2tzKGJvb2wgbmVlZHNGYWxsYmFja3Mp
IHsgbV9uZWVkc0dCS0ZhbGxiYWNrcyA9IG5lZWRzRmFsbGJhY2tzOyB9Ci0gICAgICAgIAotICAg
ICAgICBpbnQgZGVjb2RlVG9CdWZmZXIoVUNoYXIqIGJ1ZmZlciwgVUNoYXIqIGJ1ZmZlckxpbWl0
LCBjb25zdCBjaGFyKiYgc291cmNlLAotICAgICAgICAgICAgY29uc3QgY2hhciogc291cmNlTGlt
aXQsIGludDMyX3QqIG9mZnNldHMsIGJvb2wgZmx1c2gsIFVFcnJvckNvZGUmIGVycik7Ci0KLSAg
ICAgICAgY29uc3QgY2hhciogY29uc3QgbV9lbmNvZGluZ05hbWU7Ci0gICAgICAgIGNvbnN0IGNo
YXIqIGNvbnN0IG1fY2Fub25pY2FsQ29udmVydGVyTmFtZTsKLSAgICAgICAgbXV0YWJsZSBVQ29u
dmVydGVyKiBtX2NvbnZlcnRlcklDVTsKLSAgICAgICAgbXV0YWJsZSBib29sIG1fbmVlZHNHQktG
YWxsYmFja3M7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBJQ1VDb252ZXJ0ZXJXcmFwcGVyIHsKLSAg
ICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSUNVQ29udmVydGVyV3JhcHBlcik7IFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoKLSAgICAgICAgSUNVQ29udmVydGVyV3JhcHBl
cigpIDogY29udmVydGVyKDApIHsgfQotICAgICAgICB+SUNVQ29udmVydGVyV3JhcHBlcigpOwor
dXNpbmcgSUNVQ29udmVydGVyUHRyID0gc3RkOjp1bmlxdWVfcHRyPFVDb252ZXJ0ZXIsIHZvaWQg
KCopKFVDb252ZXJ0ZXIqKT47CisKK2NsYXNzIFRleHRDb2RlY0lDVSA6IHB1YmxpYyBUZXh0Q29k
ZWMgeworcHVibGljOgorICAgIFRleHRDb2RlY0lDVShjb25zdCBjaGFyKiBlbmNvZGluZywgY29u
c3QgY2hhciogY2Fub25pY2FsQ29udmVydGVyTmFtZSk7CisgICAgdmlydHVhbCB+VGV4dENvZGVj
SUNVKCk7CisKKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlckVuY29kaW5nTmFtZXMoRW5jb2RpbmdO
YW1lUmVnaXN0cmFyKTsKKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNS
ZWdpc3RyYXIpOworCitwcml2YXRlOgorICAgIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNp
emVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9y
KSBmaW5hbDsKKyAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlKFN0cmluZ1ZpZXcsIFVuZW5jb2Rh
YmxlSGFuZGxpbmcpIGZpbmFsOworCisgICAgdm9pZCBjcmVhdGVJQ1VDb252ZXJ0ZXIoKSBjb25z
dDsKKyAgICB2b2lkIHJlbGVhc2VJQ1VDb252ZXJ0ZXIoKSBjb25zdDsKKyAgICBib29sIG5lZWRz
R0JLRmFsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc0dCS0ZhbGxiYWNrczsgfQorICAg
IHZvaWQgc2V0TmVlZHNHQktGYWxsYmFja3MoYm9vbCBuZWVkc0ZhbGxiYWNrcykgeyBtX25lZWRz
R0JLRmFsbGJhY2tzID0gbmVlZHNGYWxsYmFja3M7IH0KKworICAgIGludCBkZWNvZGVUb0J1ZmZl
cihVQ2hhciogYnVmZmVyLCBVQ2hhciogYnVmZmVyTGltaXQsIGNvbnN0IGNoYXIqJiBzb3VyY2Us
IGNvbnN0IGNoYXIqIHNvdXJjZUxpbWl0LCBpbnQzMl90KiBvZmZzZXRzLCBib29sIGZsdXNoLCBV
RXJyb3JDb2RlJik7CisKKyAgICBjb25zdCBjaGFyKiBjb25zdCBtX2VuY29kaW5nTmFtZTsKKyAg
ICBjb25zdCBjaGFyKiBjb25zdCBtX2Nhbm9uaWNhbENvbnZlcnRlck5hbWU7CisgICAgbXV0YWJs
ZSBJQ1VDb252ZXJ0ZXJQdHIgbV9jb252ZXJ0ZXIgeyBudWxscHRyLCB1Y252X2Nsb3NlIH07Cisg
ICAgbXV0YWJsZSBib29sIG1fbmVlZHNHQktGYWxsYmFja3MgeyBmYWxzZSB9OworfTsKKworc3Ry
dWN0IElDVUNvbnZlcnRlcldyYXBwZXIgeworICAgIElDVUNvbnZlcnRlclB0ciBjb252ZXJ0ZXIg
eyBudWxscHRyLCB1Y252X2Nsb3NlIH07CiAKLSAgICAgICAgVUNvbnZlcnRlciogY29udmVydGVy
OwotICAgIH07CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Cit9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBUZXh0Q29kZWNJQ1VfaApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcAkocmV2aXNpb24g
MjI1MjA3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJU
ZXh0Q29kZWNMYXRpbjEuaCIKIAogI2luY2x1ZGUgIlRleHRDb2RlY0FTQ0lJRmFzdFBhdGguaCIK
KyNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CkBAIC0zNSw3ICszNiw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3Bh
Y2UgV1RGOwogCi1zdGF0aWMgY29uc3QgVUNoYXIgdGFibGVbMjU2XSA9IHsKK3N0YXRpYyBjb25z
dCBVQ2hhciBsYXRpbjFDb252ZXJzaW9uVGFibGVbMjU2XSA9IHsKICAgICAweDAwMDAsIDB4MDAw
MSwgMHgwMDAyLCAweDAwMDMsIDB4MDAwNCwgMHgwMDA1LCAweDAwMDYsIDB4MDAwNywgLy8gMDAt
MDcKICAgICAweDAwMDgsIDB4MDAwOSwgMHgwMDBBLCAweDAwMEIsIDB4MDAwQywgMHgwMDBELCAw
eDAwMEUsIDB4MDAwRiwgLy8gMDgtMEYKICAgICAweDAwMTAsIDB4MDAxMSwgMHgwMDEyLCAweDAw
MTMsIDB4MDAxNCwgMHgwMDE1LCAweDAwMTYsIDB4MDAxNywgLy8gMTAtMTcKQEAgLTkyLDE0ICs5
MywxMSBAQCB2b2lkIFRleHRDb2RlY0xhdGluMTo6cmVnaXN0ZXJFbmNvZGluZ05hCiAgICAgcmVn
aXN0cmFyKCJ4LWNwMTI1MiIsICJ3aW5kb3dzLTEyNTIiKTsKIH0KIAotc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxUZXh0Q29kZWM+IG5ld1N0cmVhbWluZ1RleHREZWNvZGVyV2luZG93c0xhdGluMShj
b25zdCBUZXh0RW5jb2RpbmcmLCBjb25zdCB2b2lkKikKLXsKLSAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxUZXh0Q29kZWNMYXRpbjE+KCk7Ci19Ci0KIHZvaWQgVGV4dENvZGVjTGF0aW4xOjpy
ZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFyKQogewotICAgIHJlZ2lz
dHJhcigid2luZG93cy0xMjUyIiwgbmV3U3RyZWFtaW5nVGV4dERlY29kZXJXaW5kb3dzTGF0aW4x
LCAwKTsKKyAgICByZWdpc3RyYXIoIndpbmRvd3MtMTI1MiIsIFtdIHsKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjTGF0aW4xPigpOworICAgIH0pOwogfQogCiBTdHJp
bmcgVGV4dENvZGVjTGF0aW4xOjpkZWNvZGUoY29uc3QgY2hhciogYnl0ZXMsIHNpemVfdCBsZW5n
dGgsIGJvb2wsIGJvb2wsIGJvb2wmKQpAQCAtMTM5LDEwICsxMzcsMTAgQEAgU3RyaW5nIFRleHRD
b2RlY0xhdGluMTo6ZGVjb2RlKGNvbnN0IGNoYQogICAgICAgICAgICAgKmRlc3RpbmF0aW9uID0g
KnNvdXJjZTsKICAgICAgICAgfSBlbHNlIHsKIHVzZUxvb2t1cFRhYmxlOgotICAgICAgICAgICAg
aWYgKHRhYmxlWypzb3VyY2VdID4gMHhmZikKKyAgICAgICAgICAgIGlmIChsYXRpbjFDb252ZXJz
aW9uVGFibGVbKnNvdXJjZV0gPiAweGZmKQogICAgICAgICAgICAgICAgIGdvdG8gdXBDb252ZXJ0
VG8xNkJpdDsKIAotICAgICAgICAgICAgKmRlc3RpbmF0aW9uID0gdGFibGVbKnNvdXJjZV07Cisg
ICAgICAgICAgICAqZGVzdGluYXRpb24gPSBsYXRpbjFDb252ZXJzaW9uVGFibGVbKnNvdXJjZV07
CiAgICAgICAgIH0KIAogICAgICAgICArK3NvdXJjZTsKQEAgLTE2NSw3ICsxNjMsNyBAQCB1cENv
bnZlcnRUbzE2Qml0OgogICAgICAgICAqZGVzdGluYXRpb24xNisrID0gKnB0cjgrKzsKIAogICAg
IC8vIEhhbmRsZSB0aGUgY2hhcmFjdGVyIHRoYXQgdHJpZ2dlcmVkIHRoZSAxNiBiaXQgcGF0aAot
ICAgICpkZXN0aW5hdGlvbjE2ID0gdGFibGVbKnNvdXJjZV07CisgICAgKmRlc3RpbmF0aW9uMTYg
PSBsYXRpbjFDb252ZXJzaW9uVGFibGVbKnNvdXJjZV07CiAgICAgKytzb3VyY2U7CiAgICAgKytk
ZXN0aW5hdGlvbjE2OwogCkBAIC0xOTQsNyArMTkyLDcgQEAgdXBDb252ZXJ0VG8xNkJpdDoKICAg
ICAgICAgICAgICpkZXN0aW5hdGlvbjE2ID0gKnNvdXJjZTsKICAgICAgICAgfSBlbHNlIHsKIHVz
ZUxvb2t1cFRhYmxlMTY6Ci0gICAgICAgICAgICAqZGVzdGluYXRpb24xNiA9IHRhYmxlWypzb3Vy
Y2VdOworICAgICAgICAgICAgKmRlc3RpbmF0aW9uMTYgPSBsYXRpbjFDb252ZXJzaW9uVGFibGVb
KnNvdXJjZV07CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgICsrc291cmNlOwpAQCAtMjA0
LDU4ICsyMDIsNTEgQEAgdXNlTG9va3VwVGFibGUxNjoKICAgICByZXR1cm4gcmVzdWx0MTY7CiB9
CiAKLXN0YXRpYyBDU3RyaW5nIGVuY29kZUNvbXBsZXhXaW5kb3dzTGF0aW4xKGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5nIGhhbmRsaW5n
KQorc3RhdGljIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVDb21wbGV4V2luZG93c0xhdGluMShTdHJp
bmdWaWV3IHN0cmluZywgVW5lbmNvZGFibGVIYW5kbGluZyBoYW5kbGluZykKIHsKLSAgICBWZWN0
b3I8Y2hhcj4gcmVzdWx0KGxlbmd0aCk7Ci0gICAgY2hhciogYnl0ZXMgPSByZXN1bHQuZGF0YSgp
OworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7CiAKLSAgICBzaXplX3QgcmVzdWx0TGVuZ3Ro
ID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKSB7Ci0gICAgICAgIFVD
aGFyMzIgYzsKLSAgICAgICAgVTE2X05FWFQoY2hhcmFjdGVycywgaSwgbGVuZ3RoLCBjKTsKLSAg
ICAgICAgdW5zaWduZWQgY2hhciBiID0gYzsKKyAgICBmb3IgKGF1dG8gY2hhcmFjdGVyIDogc3Ry
aW5nLmNvZGVQb2ludHMoKSkgeworICAgICAgICB1aW50OF90IGIgPSBjaGFyYWN0ZXI7CiAgICAg
ICAgIC8vIERvIGFuIGVmZmljaWVudCBjaGVjayB0byBkZXRlY3QgY2hhcmFjdGVycyBvdGhlciB0
aGFuIDAwLTdGIGFuZCBBMC1GRi4KLSAgICAgICAgaWYgKGIgIT0gYyB8fCAoYyAmIDB4RTApID09
IDB4ODApIHsKKyAgICAgICAgaWYgKGIgIT0gY2hhcmFjdGVyIHx8IChjaGFyYWN0ZXIgJiAweEUw
KSA9PSAweDgwKSB7CiAgICAgICAgICAgICAvLyBMb29rIGZvciBhIHdheSB0byBlbmNvZGUgdGhp
cyB3aXRoIFdpbmRvd3MgTGF0aW4tMS4KLSAgICAgICAgICAgIGZvciAoYiA9IDB4ODA7IGIgPCAw
eEEwOyArK2IpCi0gICAgICAgICAgICAgICAgaWYgKHRhYmxlW2JdID09IGMpCisgICAgICAgICAg
ICBmb3IgKGIgPSAweDgwOyBiIDwgMHhBMDsgKytiKSB7CisgICAgICAgICAgICAgICAgaWYgKGxh
dGluMUNvbnZlcnNpb25UYWJsZVtiXSA9PSBjaGFyYWN0ZXIpCiAgICAgICAgICAgICAgICAgICAg
IGdvdG8gZ290Qnl0ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIE5vIHdheSB0byBl
bmNvZGUgdGhpcyBjaGFyYWN0ZXIgd2l0aCBXaW5kb3dzIExhdGluLTEuCiAgICAgICAgICAgICBV
bmVuY29kYWJsZVJlcGxhY2VtZW50QXJyYXkgcmVwbGFjZW1lbnQ7Ci0gICAgICAgICAgICBpbnQg
cmVwbGFjZW1lbnRMZW5ndGggPSBUZXh0Q29kZWM6OmdldFVuZW5jb2RhYmxlUmVwbGFjZW1lbnQo
YywgaGFuZGxpbmcsIHJlcGxhY2VtZW50KTsKLSAgICAgICAgICAgIHJlc3VsdC5ncm93KHJlc3Vs
dExlbmd0aCArIHJlcGxhY2VtZW50TGVuZ3RoICsgbGVuZ3RoIC0gaSk7Ci0gICAgICAgICAgICBi
eXRlcyA9IHJlc3VsdC5kYXRhKCk7Ci0gICAgICAgICAgICBtZW1jcHkoYnl0ZXMgKyByZXN1bHRM
ZW5ndGgsIHJlcGxhY2VtZW50LCByZXBsYWNlbWVudExlbmd0aCk7Ci0gICAgICAgICAgICByZXN1
bHRMZW5ndGggKz0gcmVwbGFjZW1lbnRMZW5ndGg7CisgICAgICAgICAgICBpbnQgcmVwbGFjZW1l
bnRMZW5ndGggPSBUZXh0Q29kZWM6OmdldFVuZW5jb2RhYmxlUmVwbGFjZW1lbnQoY2hhcmFjdGVy
LCBoYW5kbGluZywgcmVwbGFjZW1lbnQpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChyZXBs
YWNlbWVudC5kYXRhKCksIHJlcGxhY2VtZW50TGVuZ3RoKTsKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9CiAgICAgZ290Qnl0ZToKLSAgICAgICAgYnl0ZXNbcmVzdWx0TGVuZ3RoKytd
ID0gYjsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChiKTsKICAgICB9CiAKLSAgICByZXR1cm4gQ1N0
cmluZyhieXRlcywgcmVzdWx0TGVuZ3RoKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1DU3Ry
aW5nIFRleHRDb2RlY0xhdGluMTo6ZW5jb2RlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXpl
X3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5nIGhhbmRsaW5nKQorVmVjdG9yPHVpbnQ4X3Q+
IFRleHRDb2RlY0xhdGluMTo6ZW5jb2RlKFN0cmluZ1ZpZXcgc3RyaW5nLCBVbmVuY29kYWJsZUhh
bmRsaW5nIGhhbmRsaW5nKQogewogICAgIHsKLSAgICAgICAgY2hhciogYnl0ZXM7Ci0gICAgICAg
IENTdHJpbmcgc3RyaW5nID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChsZW5ndGgsIGJ5dGVz
KTsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdChzdHJpbmcubGVuZ3RoKCkpOworICAg
ICAgICBhdXRvKiBieXRlcyA9IHJlc3VsdC5kYXRhKCk7CiAKLSAgICAgICAgLy8gQ29udmVydCB0
aGUgc3RyaW5nIGEgZmFzdCB3YXkgYW5kIHNpbXVsdGFuZW91c2x5IGRvIGFuIGVmZmljaWVudCBj
aGVjayB0byBzZWUgaWYgaXQncyBhbGwgQVNDSUkuCisgICAgICAgIC8vIENvbnZlcnQgYW5kIHNp
bXVsdGFuZW91c2x5IGRvIGEgY2hlY2sgdG8gc2VlIGlmIGl0J3MgYWxsIEFTQ0lJLgogICAgICAg
ICBVQ2hhciBvcmVkID0gMDsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkgewotICAgICAgICAgICAgVUNoYXIgYyA9IGNoYXJhY3RlcnNbaV07Ci0gICAgICAgICAg
ICBieXRlc1tpXSA9IGM7Ci0gICAgICAgICAgICBvcmVkIHw9IGM7CisgICAgICAgIGZvciAoYXV0
byBjaGFyYWN0ZXIgOiBzdHJpbmcuY29kZVVuaXRzKCkpIHsKKyAgICAgICAgICAgICpieXRlcysr
ID0gY2hhcmFjdGVyOworICAgICAgICAgICAgb3JlZCB8PSBjaGFyYWN0ZXI7CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoIShvcmVkICYgMHhGRjgwKSkKLSAgICAgICAgICAgIHJldHVybiBzdHJp
bmc7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIC8vIElmIGl0IHdh
c24ndCBhbGwgQVNDSUksIGNhbGwgdGhlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBtb3JlLWNvbXBs
ZXggY2FzZXMuCi0gICAgcmV0dXJuIGVuY29kZUNvbXBsZXhXaW5kb3dzTGF0aW4xKGNoYXJhY3Rl
cnMsIGxlbmd0aCwgaGFuZGxpbmcpOworICAgIHJldHVybiBlbmNvZGVDb21wbGV4V2luZG93c0xh
dGluMShzdHJpbmcsIGhhbmRsaW5nKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5oCShy
ZXZpc2lvbiAyMjUyMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2Rl
Y0xhdGluMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMywyMiArMjMsMjEgQEAKICAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAogICovCiAKLSNpZm5kZWYgVGV4dENvZGVjTGF0aW4xX2gKLSNkZWZpbmUgVGV4dENv
ZGVjTGF0aW4xX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiVGV4dENvZGVjLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIFRleHRDb2RlY0xhdGluMSA6IHB1YmxpYyBU
ZXh0Q29kZWMgewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJFbmNv
ZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhcik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHJl
Z2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7Ci0KLSAgICAgICAgU3RyaW5nIGRlY29k
ZShjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJv
ciwgYm9vbCYgc2F3RXJyb3IpIG92ZXJyaWRlOwotICAgICAgICBDU3RyaW5nIGVuY29kZShjb25z
dCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcpIG92ZXJyaWRlOwot
ICAgIH07CitjbGFzcyBUZXh0Q29kZWNMYXRpbjEgZmluYWwgOiBwdWJsaWMgVGV4dENvZGVjIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlckVuY29kaW5nTmFtZXMoRW5jb2RpbmdO
YW1lUmVnaXN0cmFyKTsKKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNS
ZWdpc3RyYXIpOworCitwcml2YXRlOgorICAgIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNp
emVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9y
KSBmaW5hbDsKKyAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlKFN0cmluZ1ZpZXcsIFVuZW5jb2Rh
YmxlSGFuZGxpbmcpIGZpbmFsOworfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5k
aWYgLy8gVGV4dENvZGVjTGF0aW4xX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dENvZGVjUmVwbGFjZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dENvZGVjUmVwbGFjZW1lbnQuY3BwCShyZXZpc2lvbiAyMjUyMDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1JlcGxhY2VtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zMCwyMiArMzAsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1zdGQ6OnVuaXF1ZV9wdHI8VGV4dENvZGVjPiBUZXh0Q29kZWNSZXBsYWNlbWVudDo6Y3JlYXRl
KGNvbnN0IFRleHRFbmNvZGluZyYsIGNvbnN0IHZvaWQqKQotewotICAgIHJldHVybiBzdGQ6Om1h
a2VfdW5pcXVlPFRleHRDb2RlY1JlcGxhY2VtZW50PigpOwotfQotCi1UZXh0Q29kZWNSZXBsYWNl
bWVudDo6VGV4dENvZGVjUmVwbGFjZW1lbnQoKQotewotfQotCiB2b2lkIFRleHRDb2RlY1JlcGxh
Y2VtZW50OjpyZWdpc3RlckVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lz
dHJhcikKIHsKLSAgICAvLyBUaGUgJ3JlcGxhY2VtZW50JyBpdHNlbGYgaXMgbm90IGEgdmFsaWQg
bGFiZWwuIEl0IGlzIHRoZSBuYW1lIG9mCisgICAgLy8gVGhlIHN0cmluZyAncmVwbGFjZW1lbnQn
IGl0c2VsZiBpcyBub3QgYSB2YWxpZCBsYWJlbC4gSXQgaXMgdGhlIG5hbWUgb2YKICAgICAvLyBh
IGdyb3VwIG9mIGxlZ2FjeSBlbmNvZGluZyBsYWJlbHMuIEhlbmNlLCBpdCBjYW5ub3QgYmUgdXNl
ZCBkaXJlY3RseS4KKyAgICAvLyBUaGUgVGV4dEVuY29kaW5nIGNsYXNzIGltcGxlbWVudHMgdGhl
IGFib3ZlIHJ1bGU7IGhlcmUgd2UgcmVnaXN0ZXIgaXQgbm9ybWFsbHkuCiAgICAgcmVnaXN0cmFy
KCJyZXBsYWNlbWVudCIsICJyZXBsYWNlbWVudCIpOwogCi0gICAgLy8gVGhlIGxhYmVscwogICAg
IHJlZ2lzdHJhcigiY3Npc28yMDIya3IiLCAicmVwbGFjZW1lbnQiKTsKICAgICByZWdpc3RyYXIo
Imh6LWdiLTIzMTIiLCAicmVwbGFjZW1lbnQiKTsKICAgICByZWdpc3RyYXIoImlzby0yMDIyLWNu
IiwgInJlcGxhY2VtZW50Iik7CkBAIC01NSw3ICs0Niw5IEBAIHZvaWQgVGV4dENvZGVjUmVwbGFj
ZW1lbnQ6OnJlZ2lzdGVyRW5jb2QKIAogdm9pZCBUZXh0Q29kZWNSZXBsYWNlbWVudDo6cmVnaXN0
ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKIHsKLSAgICByZWdpc3RyYXIo
InJlcGxhY2VtZW50IiwgY3JlYXRlLCAwKTsKKyAgICByZWdpc3RyYXIoInJlcGxhY2VtZW50Iiwg
W10geworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxUZXh0Q29kZWNSZXBsYWNlbWVu
dD4oKTsKKyAgICB9KTsKIH0KIAogU3RyaW5nIFRleHRDb2RlY1JlcGxhY2VtZW50OjpkZWNvZGUo
Y29uc3QgY2hhciosIHNpemVfdCwgYm9vbCwgYm9vbCwgYm9vbCYgc2F3RXJyb3IpCkBAIC02Myw5
ICs1Niw4IEBAIFN0cmluZyBUZXh0Q29kZWNSZXBsYWNlbWVudDo6ZGVjb2RlKGNvbnMKICAgICBz
YXdFcnJvciA9IHRydWU7CiAgICAgaWYgKG1fc2VudEVPRikKICAgICAgICAgcmV0dXJuIGVtcHR5
U3RyaW5nKCk7Ci0KICAgICBtX3NlbnRFT0YgPSB0cnVlOwotICAgIHJldHVybiBTdHJpbmcoJnJl
cGxhY2VtZW50Q2hhcmFjdGVyLCAxKTsKKyAgICByZXR1cm4gU3RyaW5nIHsgJnJlcGxhY2VtZW50
Q2hhcmFjdGVyLCAxIH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjUmVwbGFjZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1JlcGxhY2VtZW50LmgJ
KHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENv
ZGVjUmVwbGFjZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBUZXh0Q29kZWNSZXBsYWNl
bWVudF9oCi0jZGVmaW5lIFRleHRDb2RlY1JlcGxhY2VtZW50X2gKKyNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSAiVGV4dENvZGVjVVRGOC5oIgogCkBAIC0zMiwyMCArMzEsMTQgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBUZXh0Q29kZWNSZXBsYWNlbWVudCA6IHB1YmxpYyBUZXh0Q29k
ZWNVVEY4IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFRleHRDb2RlYz4g
Y3JlYXRlKGNvbnN0IFRleHRFbmNvZGluZyYsIGNvbnN0IHZvaWQqKTsKLQotICAgIFRleHRDb2Rl
Y1JlcGxhY2VtZW50KCk7Ci0KICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckVuY29kaW5nTmFtZXMo
RW5jb2RpbmdOYW1lUmVnaXN0cmFyKTsKICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckNvZGVjcyhU
ZXh0Q29kZWNSZWdpc3RyYXIpOwogCiBwcml2YXRlOgotICAgIFN0cmluZyBkZWNvZGUoY29uc3Qg
Y2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wm
IHNhd0Vycm9yKSBvdmVycmlkZTsKKyAgICBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXpl
X3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcikg
ZmluYWw7CiAKICAgICBib29sIG1fc2VudEVPRiB7IGZhbHNlIH07CiAKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8qIFRleHRDb2RlY1JlcGxhY2VtZW50X2ggKi8KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGOC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEY4LmNwcAko
cmV2aXNpb24gMjI1MjA3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29k
ZWNVVEY4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsOSArNTUsOSBAQCB2b2lkIFRleHRDb2Rl
Y1VURjg6OnJlZ2lzdGVyRW5jb2RpbmdOYW1lCiAKIHZvaWQgVGV4dENvZGVjVVRGODo6cmVnaXN0
ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKIHsKLSAgICByZWdpc3RyYXIo
IlVURi04IiwgW10gKGNvbnN0IFRleHRFbmNvZGluZyYsIGNvbnN0IHZvaWQqKSAtPiBzdGQ6OnVu
aXF1ZV9wdHI8VGV4dENvZGVjPiB7CisgICAgcmVnaXN0cmFyKCJVVEYtOCIsIFtdIHsKICAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjVVRGOD4oKTsKLSAgICB9LCBudWxs
cHRyKTsKKyAgICB9KTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgbm9uQVNDSUlTZXF1ZW5jZUxl
bmd0aCh1aW50OF90IGZpcnN0Qnl0ZSkKQEAgLTQzMiwyMiArNDMyLDE2IEBAIHVwQ29udmVydFRv
MTZCaXQ6CiAgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoV1RGTW92ZShidWZmZXIxNikpOwogfQog
Ci1DU3RyaW5nIFRleHRDb2RlY1VURjg6OmVuY29kZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
c2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZykKK1ZlY3Rvcjx1aW50OF90PiBUZXh0
Q29kZWNVVEY4OjplbmNvZGUoU3RyaW5nVmlldyBzdHJpbmcsIFVuZW5jb2RhYmxlSGFuZGxpbmcp
CiB7CiAgICAgLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIFVURi04IGJ5dGVzIG5lZWRlZCBwZXIg
VVRGLTE2IGNvZGUgdW5pdCBpcyAzLgogICAgIC8vIEJNUCBjaGFyYWN0ZXJzIHRha2Ugb25seSBv
bmUgVVRGLTE2IGNvZGUgdW5pdCBhbmQgY2FuIHRha2UgdXAgdG8gMyBieXRlcyAoM3gpLgogICAg
IC8vIE5vbi1CTVAgY2hhcmFjdGVycyB0YWtlIHR3byBVVEYtMTYgY29kZSB1bml0cyBhbmQgY2Fu
IHRha2UgdXAgdG8gNCBieXRlcyAoMngpLgotICAgIGlmIChsZW5ndGggPiBzdGQ6Om51bWVyaWNf
bGltaXRzPHNpemVfdD46Om1heCgpIC8gMykKLSAgICAgICAgQ1JBU0goKTsKLQotICAgIFZlY3Rv
cjxjaGFyLCAzMDAwPiBieXRlcyhsZW5ndGggKiAzKTsKKyAgICBWZWN0b3I8dWludDhfdD4gYnl0
ZXMoV1RGOjpjaGVja2VkUHJvZHVjdDxzaXplX3Q+KHN0cmluZy5sZW5ndGgoKSwgMykudW5zYWZl
R2V0KCkpOwogICAgIHNpemVfdCBieXRlc1dyaXR0ZW4gPSAwOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGVuZ3RoOyApIHsKLSAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXI7Ci0gICAgICAg
IFUxNl9ORVhUKGNoYXJhY3RlcnMsIGksIGxlbmd0aCwgY2hhcmFjdGVyKTsKKyAgICBmb3IgKGF1
dG8gY2hhcmFjdGVyIDogc3RyaW5nLmNvZGVQb2ludHMoKSkKICAgICAgICAgVThfQVBQRU5EX1VO
U0FGRShieXRlcy5kYXRhKCksIGJ5dGVzV3JpdHRlbiwgY2hhcmFjdGVyKTsKLSAgICB9Ci0gICAg
cmV0dXJuIENTdHJpbmcgeyBieXRlcy5kYXRhKCksIGJ5dGVzV3JpdHRlbiB9OworICAgIHJldHVy
biBieXRlczsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEY4LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEY4LmgJKHJldmlzaW9uIDIyNTIwNykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGOC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIlRleHRDb2Rl
Yy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0xDaGFyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtMzYsNyArMzcsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgU3RyaW5nIGRlY29k
ZShjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJv
ciwgYm9vbCYgc2F3RXJyb3IpIG92ZXJyaWRlOwotICAgIENTdHJpbmcgZW5jb2RlKGNvbnN0IFVD
aGFyKiwgc2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZykgb3ZlcnJpZGU7CisgICAg
VmVjdG9yPHVpbnQ4X3Q+IGVuY29kZShTdHJpbmdWaWV3LCBVbmVuY29kYWJsZUhhbmRsaW5nKSBm
aW5hbDsKIAogICAgIGJvb2wgaGFuZGxlUGFydGlhbFNlcXVlbmNlKExDaGFyKiYgZGVzdGluYXRp
b24sIGNvbnN0IHVpbnQ4X3QqJiBzb3VyY2UsIGNvbnN0IHVpbnQ4X3QqIGVuZCwgYm9vbCBmbHVz
aCk7CiAgICAgdm9pZCBoYW5kbGVQYXJ0aWFsU2VxdWVuY2UoVUNoYXIqJiBkZXN0aW5hdGlvbiwg
Y29uc3QgdWludDhfdComIHNvdXJjZSwgY29uc3QgdWludDhfdCogZW5kLCBib29sIGZsdXNoLCBi
b29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcAkocmV2aXNpb24gMjI1MjA3KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEYxNi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2
LCAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcsMjAgKzQ3LDE0IEBAIHZvaWQgVGV4dENvZGVj
VVRGMTY6OnJlZ2lzdGVyRW5jb2RpbmdOYW0KICAgICByZWdpc3RyYXIoInVuaWNvZGVGRkZFIiwg
IlVURi0xNkJFIik7CiB9CiAKLXN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VGV4dENvZGVjPiBuZXdT
dHJlYW1pbmdUZXh0RGVjb2RlclVURjE2TEUoY29uc3QgVGV4dEVuY29kaW5nJiwgY29uc3Qgdm9p
ZCopCi17Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjVVRGMTY+KHRydWUp
OwotfQotCi1zdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFRleHRDb2RlYz4gbmV3U3RyZWFtaW5nVGV4
dERlY29kZXJVVEYxNkJFKGNvbnN0IFRleHRFbmNvZGluZyYsIGNvbnN0IHZvaWQqKQotewotICAg
IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFRleHRDb2RlY1VURjE2PihmYWxzZSk7Ci19Ci0KIHZv
aWQgVGV4dENvZGVjVVRGMTY6OnJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciByZWdp
c3RyYXIpCiB7Ci0gICAgcmVnaXN0cmFyKCJVVEYtMTZMRSIsIG5ld1N0cmVhbWluZ1RleHREZWNv
ZGVyVVRGMTZMRSwgMCk7Ci0gICAgcmVnaXN0cmFyKCJVVEYtMTZCRSIsIG5ld1N0cmVhbWluZ1Rl
eHREZWNvZGVyVVRGMTZCRSwgMCk7CisgICAgcmVnaXN0cmFyKCJVVEYtMTZMRSIsIFtdIHsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjVVRGMTY+KHRydWUpOworICAg
IH0pOworICAgIHJlZ2lzdHJhcigiVVRGLTE2QkUiLCBbXSB7CisgICAgICAgIHJldHVybiBzdGQ6
Om1ha2VfdW5pcXVlPFRleHRDb2RlY1VURjE2PihmYWxzZSk7CisgICAgfSk7CiB9CiAKIFN0cmlu
ZyBUZXh0Q29kZWNVVEYxNjo6ZGVjb2RlKGNvbnN0IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3Ro
LCBib29sLCBib29sLCBib29sJikKQEAgLTExNCwzNiArMTA4LDI0IEBAIFN0cmluZyBUZXh0Q29k
ZWNVVEYxNjo6ZGVjb2RlKGNvbnN0IGNoYXIKICAgICByZXR1cm4gU3RyaW5nOjphZG9wdChXVEZN
b3ZlKGJ1ZmZlcikpOwogfQogCi1DU3RyaW5nIFRleHRDb2RlY1VURjE2OjplbmNvZGUoY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcpCitW
ZWN0b3I8dWludDhfdD4gVGV4dENvZGVjVVRGMTY6OmVuY29kZShTdHJpbmdWaWV3IHN0cmluZywg
VW5lbmNvZGFibGVIYW5kbGluZykKIHsKLSAgICAvLyBXZSBuZWVkIHRvIGJlIHN1cmUgd2UgY2Fu
IGRvdWJsZSB0aGUgbGVuZ3RoIHdpdGhvdXQgb3ZlcmZsb3dpbmcuCi0gICAgLy8gU2luY2UgdGhl
IHBhc3NlZC1pbiBsZW5ndGggaXMgdGhlIGxlbmd0aCBvZiBhbiBhY3R1YWwgZXhpc3RpbmcKLSAg
ICAvLyBjaGFyYWN0ZXIgYnVmZmVyLCBlYWNoIGNoYXJhY3RlciBpcyB0d28gYnl0ZXMsIGFuZCB3
ZSBrbm93Ci0gICAgLy8gdGhlIGJ1ZmZlciBkb2Vzbid0IG9jY3VweSB0aGUgZW50aXJlIGFkZHJl
c3Mgc3BhY2UsIHdlIGNhbgotICAgIC8vIGFzc2VydCBoZXJlIHRoYXQgZG91YmxpbmcgdGhlIGxl
bmd0aCBkb2VzIG5vdCBvdmVyZmxvdyBzaXplX3QKLSAgICAvLyBhbmQgdGhlcmUncyBubyBuZWVk
IGZvciBhIHJ1bnRpbWUgY2hlY2suCi0gICAgQVNTRVJUKGxlbmd0aCA8PSBzdGQ6Om51bWVyaWNf
bGltaXRzPHNpemVfdD46Om1heCgpIC8gMik7Ci0KLSAgICBjaGFyKiBieXRlczsKLSAgICBDU3Ry
aW5nIHN0cmluZyA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobGVuZ3RoICogMiwgYnl0ZXMp
OworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQoV1RGOjpjaGVja2VkUHJvZHVjdDxzaXplX3Q+
KHN0cmluZy5sZW5ndGgoKSwgMikudW5zYWZlR2V0KCkpOworICAgIGF1dG8qIGJ5dGVzID0gcmVz
dWx0LmRhdGEoKTsKIAotICAgIC8vIEZJWE1FOiBDU3RyaW5nIGlzIG5vdCBhIHJlYXNvbmFibGUg
ZGF0YSBzdHJ1Y3R1cmUgZm9yIGVuY29kZWQgVVRGLTE2LCB3aGljaCB3aWxsIGhhdmUKLSAgICAv
LyBudWxsIGNoYXJhY3RlcnMgaW5zaWRlIGl0LiBQZXJoYXBzIHRoZSByZXN1bHQgb2YgZW5jb2Rl
IHNob3VsZCBub3QgYmUgYSBDU3RyaW5nLgogICAgIGlmIChtX2xpdHRsZUVuZGlhbikgewotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBV
Q2hhciBjID0gY2hhcmFjdGVyc1tpXTsKLSAgICAgICAgICAgIGJ5dGVzW2kgKiAyXSA9IGM7Ci0g
ICAgICAgICAgICBieXRlc1tpICogMiArIDFdID0gYyA+PiA4OworICAgICAgICBmb3IgKGF1dG8g
Y2hhcmFjdGVyIDogc3RyaW5nLmNvZGVVbml0cygpKSB7CisgICAgICAgICAgICAqYnl0ZXMrKyA9
IGNoYXJhY3RlcjsKKyAgICAgICAgICAgICpieXRlcysrID0gY2hhcmFjdGVyID4+IDg7CiAgICAg
ICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7Ci0gICAgICAgICAgICBVQ2hhciBjID0gY2hhcmFjdGVyc1tpXTsKLSAgICAgICAg
ICAgIGJ5dGVzW2kgKiAyXSA9IGMgPj4gODsKLSAgICAgICAgICAgIGJ5dGVzW2kgKiAyICsgMV0g
PSBjOworICAgICAgICBmb3IgKGF1dG8gY2hhcmFjdGVyIDogc3RyaW5nLmNvZGVVbml0cygpKSB7
CisgICAgICAgICAgICAqYnl0ZXMrKyA9IGNoYXJhY3RlciA+PiA4OworICAgICAgICAgICAgKmJ5
dGVzKysgPSBjaGFyYWN0ZXI7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gc3RyaW5n
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGMTYuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmgJKHJldmlz
aW9uIDIyNTIwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRG
MTYuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsMjkgKzIzLDI4IEBACiAgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKICAqLwogCi0jaWZuZGVmIFRleHRDb2RlY1VURjE2X2gKLSNkZWZpbmUgVGV4dENvZGVjVVRG
MTZfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJUZXh0Q29kZWMuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi0gICAgY2xhc3MgVGV4dENvZGVjVVRGMTYgOiBwdWJsaWMgVGV4dENvZGVj
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRW5jb2RpbmdOYW1l
cyhFbmNvZGluZ05hbWVSZWdpc3RyYXIpOwotICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckNv
ZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIpOwotCi0gICAgICAgIFRleHRDb2RlY1VURjE2KGJvb2wg
bGl0dGxlRW5kaWFuKSA6IG1fbGl0dGxlRW5kaWFuKGxpdHRsZUVuZGlhbiksIG1faGF2ZUJ1ZmZl
cmVkQnl0ZShmYWxzZSkgeyB9Ci0KLSAgICAgICAgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwg
c2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJy
b3IpIG92ZXJyaWRlOwotICAgICAgICBDU3RyaW5nIGVuY29kZShjb25zdCBVQ2hhciosIHNpemVf
dCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcpIG92ZXJyaWRlOwotCi0gICAgcHJpdmF0ZToK
LSAgICAgICAgYm9vbCBtX2xpdHRsZUVuZGlhbjsKLSAgICAgICAgYm9vbCBtX2hhdmVCdWZmZXJl
ZEJ5dGU7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgbV9idWZmZXJlZEJ5dGU7Ci0gICAgfTsKK2Ns
YXNzIFRleHRDb2RlY1VURjE2IDogcHVibGljIFRleHRDb2RlYyB7CitwdWJsaWM6CisgICAgc3Rh
dGljIHZvaWQgcmVnaXN0ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhcik7Cisg
ICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyKTsKKworICAg
IGV4cGxpY2l0IFRleHRDb2RlY1VURjE2KGJvb2wgbGl0dGxlRW5kaWFuKQorICAgICAgICA6IG1f
bGl0dGxlRW5kaWFuKGxpdHRsZUVuZGlhbikKKyAgICB7IH0KKworcHJpdmF0ZToKKyAgICBTdHJp
bmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0
b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcikgZmluYWw7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGVu
Y29kZShTdHJpbmdWaWV3LCBVbmVuY29kYWJsZUhhbmRsaW5nKSBmaW5hbDsKKworICAgIGJvb2wg
bV9saXR0bGVFbmRpYW47CisgICAgYm9vbCBtX2hhdmVCdWZmZXJlZEJ5dGUgeyBmYWxzZSB9Owor
ICAgIHVuc2lnbmVkIGNoYXIgbV9idWZmZXJlZEJ5dGU7Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBUZXh0Q29kZWNVVEYxNl9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VzZXJEZWZpbmVkLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VzZXJEZWZpbmVkLmNwcAkocmV2
aXNpb24gMjI1MjA3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNV
c2VyRGVmaW5lZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw5ICsyNiw4IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGV4dENvZGVjVXNlckRlZmluZWQuaCIKIAotI2lu
Y2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8YXJyYXk+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1ZmZlci5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IApAQCAtMzksNzMgKzM4LDYyIEBAIHZvaWQgVGV4dENvZGVjVXNlckRlZmluZWQ6OnJlZ2lzdGVy
RW5jb2QKICAgICByZWdpc3RyYXIoIngtdXNlci1kZWZpbmVkIiwgIngtdXNlci1kZWZpbmVkIik7
CiB9CiAKLXN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VGV4dENvZGVjPiBuZXdTdHJlYW1pbmdUZXh0
RGVjb2RlclVzZXJEZWZpbmVkKGNvbnN0IFRleHRFbmNvZGluZyYsIGNvbnN0IHZvaWQqKQotewot
ICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFRleHRDb2RlY1VzZXJEZWZpbmVkPigpOwotfQot
CiB2b2lkIFRleHRDb2RlY1VzZXJEZWZpbmVkOjpyZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdp
c3RyYXIgcmVnaXN0cmFyKQogewotICAgIHJlZ2lzdHJhcigieC11c2VyLWRlZmluZWQiLCBuZXdT
dHJlYW1pbmdUZXh0RGVjb2RlclVzZXJEZWZpbmVkLCAwKTsKKyAgICByZWdpc3RyYXIoIngtdXNl
ci1kZWZpbmVkIiwgW10geworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxUZXh0Q29k
ZWNVc2VyRGVmaW5lZD4oKTsKKyAgICB9KTsKIH0KIAogU3RyaW5nIFRleHRDb2RlY1VzZXJEZWZp
bmVkOjpkZWNvZGUoY29uc3QgY2hhciogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIGJvb2wsIGJvb2ws
IGJvb2wmKQogewogICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwogICAgIHJlc3VsdC5yZXNlcnZl
Q2FwYWNpdHkobGVuZ3RoKTsKLQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpIHsKICAgICAgICAgc2lnbmVkIGNoYXIgYyA9IGJ5dGVzW2ldOwogICAgICAgICByZXN1bHQu
YXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPihjICYgMHhGN0ZGKSk7CiAgICAgfQotCiAgICAgcmV0
dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCi1zdGF0aWMgQ1N0cmluZyBlbmNvZGVDb21wbGV4
VXNlckRlZmluZWQoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFVuZW5j
b2RhYmxlSGFuZGxpbmcgaGFuZGxpbmcpCitzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZUNv
bXBsZXhVc2VyRGVmaW5lZChTdHJpbmdWaWV3IHN0cmluZywgVW5lbmNvZGFibGVIYW5kbGluZyBo
YW5kbGluZykKIHsKLSAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0KGxlbmd0aCk7Ci0gICAgY2hhciog
Ynl0ZXMgPSByZXN1bHQuZGF0YSgpOworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7CiAKLSAg
ICBzaXplX3QgcmVzdWx0TGVuZ3RoID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxl
bmd0aDsgKSB7Ci0gICAgICAgIFVDaGFyMzIgYzsKLSAgICAgICAgVTE2X05FWFQoY2hhcmFjdGVy
cywgaSwgbGVuZ3RoLCBjKTsKLSAgICAgICAgc2lnbmVkIGNoYXIgc2lnbmVkQnl0ZSA9IGM7Ci0g
ICAgICAgIGlmICgoc2lnbmVkQnl0ZSAmIDB4RjdGRikgPT0gYykKLSAgICAgICAgICAgIGJ5dGVz
W3Jlc3VsdExlbmd0aCsrXSA9IHNpZ25lZEJ5dGU7CisgICAgZm9yIChhdXRvIGNoYXJhY3RlciA6
IHN0cmluZy5jb2RlUG9pbnRzKCkpIHsKKyAgICAgICAgaW50OF90IHNpZ25lZEJ5dGUgPSBjaGFy
YWN0ZXI7CisgICAgICAgIGlmICgoc2lnbmVkQnl0ZSAmIDB4RjdGRikgPT0gY2hhcmFjdGVyKQor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzaWduZWRCeXRlKTsKICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICAvLyBObyB3YXkgdG8gZW5jb2RlIHRoaXMgY2hhcmFjdGVyIHdpdGggeC11c2Vy
LWRlZmluZWQuCiAgICAgICAgICAgICBVbmVuY29kYWJsZVJlcGxhY2VtZW50QXJyYXkgcmVwbGFj
ZW1lbnQ7Ci0gICAgICAgICAgICBpbnQgcmVwbGFjZW1lbnRMZW5ndGggPSBUZXh0Q29kZWM6Omdl
dFVuZW5jb2RhYmxlUmVwbGFjZW1lbnQoYywgaGFuZGxpbmcsIHJlcGxhY2VtZW50KTsKLSAgICAg
ICAgICAgIHJlc3VsdC5ncm93KHJlc3VsdExlbmd0aCArIHJlcGxhY2VtZW50TGVuZ3RoICsgbGVu
Z3RoIC0gaSk7Ci0gICAgICAgICAgICBieXRlcyA9IHJlc3VsdC5kYXRhKCk7Ci0gICAgICAgICAg
ICBtZW1jcHkoYnl0ZXMgKyByZXN1bHRMZW5ndGgsIHJlcGxhY2VtZW50LCByZXBsYWNlbWVudExl
bmd0aCk7Ci0gICAgICAgICAgICByZXN1bHRMZW5ndGggKz0gcmVwbGFjZW1lbnRMZW5ndGg7Cisg
ICAgICAgICAgICBpbnQgcmVwbGFjZW1lbnRMZW5ndGggPSBUZXh0Q29kZWM6OmdldFVuZW5jb2Rh
YmxlUmVwbGFjZW1lbnQoY2hhcmFjdGVyLCBoYW5kbGluZywgcmVwbGFjZW1lbnQpOworICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChyZXBsYWNlbWVudC5kYXRhKCksIHJlcGxhY2VtZW50TGVuZ3Ro
KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBDU3RyaW5nKGJ5dGVzLCByZXN1bHRM
ZW5ndGgpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUNTdHJpbmcgVGV4dENvZGVjVXNlckRl
ZmluZWQ6OmVuY29kZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVW5l
bmNvZGFibGVIYW5kbGluZyBoYW5kbGluZykKK1ZlY3Rvcjx1aW50OF90PiBUZXh0Q29kZWNVc2Vy
RGVmaW5lZDo6ZW5jb2RlKFN0cmluZ1ZpZXcgc3RyaW5nLCBVbmVuY29kYWJsZUhhbmRsaW5nIGhh
bmRsaW5nKQogewotICAgIGNoYXIqIGJ5dGVzOwotICAgIENTdHJpbmcgc3RyaW5nID0gQ1N0cmlu
Zzo6bmV3VW5pbml0aWFsaXplZChsZW5ndGgsIGJ5dGVzKTsKKyAgICB7CisgICAgICAgIFZlY3Rv
cjx1aW50OF90PiByZXN1bHQoc3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAgYXV0byogYnl0ZXMg
PSByZXN1bHQuZGF0YSgpOwogCi0gICAgLy8gQ29udmVydCB0aGUgc3RyaW5nIGEgZmFzdCB3YXkg
YW5kIHNpbXVsdGFuZW91c2x5IGRvIGFuIGVmZmljaWVudCBjaGVjayB0byBzZWUgaWYgaXQncyBh
bGwgQVNDSUkuCi0gICAgVUNoYXIgb3JlZCA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgewotICAgICAgICBVQ2hhciBjID0gY2hhcmFjdGVyc1tpXTsKLSAgICAg
ICAgYnl0ZXNbaV0gPSBjOwotICAgICAgICBvcmVkIHw9IGM7Ci0gICAgfQorICAgICAgICAvLyBD
b252ZXJ0IGFuZCBzaW11bHRhbmVvdXNseSBkbyBhIGNoZWNrIHRvIHNlZSBpZiBpdCdzIGFsbCBB
U0NJSS4KKyAgICAgICAgVUNoYXIgb3JlZCA9IDA7CisgICAgICAgIGZvciAoYXV0byBjaGFyYWN0
ZXIgOiBzdHJpbmcuY29kZVVuaXRzKCkpIHsKKyAgICAgICAgICAgICpieXRlcysrID0gY2hhcmFj
dGVyOworICAgICAgICAgICAgb3JlZCB8PSBjaGFyYWN0ZXI7CisgICAgICAgIH0KIAotICAgIGlm
ICghKG9yZWQgJiAweEZGODApKQotICAgICAgICByZXR1cm4gc3RyaW5nOworICAgICAgICBpZiAo
IShvcmVkICYgMHhGRjgwKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogCiAg
ICAgLy8gSWYgaXQgd2Fzbid0IGFsbCBBU0NJSSwgY2FsbCB0aGUgZnVuY3Rpb24gdGhhdCBoYW5k
bGVzIG1vcmUtY29tcGxleCBjYXNlcy4KLSAgICByZXR1cm4gZW5jb2RlQ29tcGxleFVzZXJEZWZp
bmVkKGNoYXJhY3RlcnMsIGxlbmd0aCwgaGFuZGxpbmcpOworICAgIHJldHVybiBlbmNvZGVDb21w
bGV4VXNlckRlZmluZWQoc3RyaW5nLCBoYW5kbGluZyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRl
ZmluZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRD
b2RlY1VzZXJEZWZpbmVkLmgJKHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxNyBBcHBsZSwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMywy
MiArMjMsMjAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgVGV4dENvZGVjVXNl
ckRlZmluZWRfaAotI2RlZmluZSBUZXh0Q29kZWNVc2VyRGVmaW5lZF9oCisjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgIlRleHRDb2RlYy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBj
bGFzcyBUZXh0Q29kZWNVc2VyRGVmaW5lZCA6IHB1YmxpYyBUZXh0Q29kZWMgewotICAgIHB1Ymxp
YzoKLSAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFt
ZVJlZ2lzdHJhcik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ29kZWNzKFRleHRDb2Rl
Y1JlZ2lzdHJhcik7Ci0KLSAgICAgICAgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90
IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpIG92
ZXJyaWRlOwotICAgICAgICBDU3RyaW5nIGVuY29kZShjb25zdCBVQ2hhciosIHNpemVfdCBsZW5n
dGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcpIG92ZXJyaWRlOwotICAgIH07CitjbGFzcyBUZXh0Q29k
ZWNVc2VyRGVmaW5lZCA6IHB1YmxpYyBUZXh0Q29kZWMgeworcHVibGljOgorICAgIHN0YXRpYyB2
b2lkIHJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIpOworICAgIHN0
YXRpYyB2b2lkIHJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7CisKK3ByaXZhdGU6
CisgICAgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVz
aCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpIGZpbmFsOworICAgIFZlY3Rvcjx1
aW50OF90PiBlbmNvZGUoU3RyaW5nVmlldywgVW5lbmNvZGFibGVIYW5kbGluZykgZmluYWw7Cit9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBUZXh0Q29kZWNVc2VyRGVm
aW5lZF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rp
bmcuY3BwCShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRFbmNvZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1
cnlha292IDxhcEBueXBvcC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBN
b2JpbGUsIEluYy4KICAqCkBAIC00OCw3ICs0OCw3IEBAIFRleHRFbmNvZGluZzo6VGV4dEVuY29k
aW5nKGNvbnN0IGNoYXIqIG4KICAgICAsIG1fYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbChiYWNr
c2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkpCiB7CiAgICAgLy8gQWxpYXNlcyBhcmUgdmFsaWQsIGJ1
dCBub3QgInJlcGxhY2VtZW50IiBpdHNlbGYuCi0gICAgaWYgKG1fbmFtZSAmJiBpc1JlcGxhY2Vt
ZW50RW5jb2RpbmcobmFtZSkpCisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KG5hbWUsICJyZXBsYWNlbWVudCIpKQogICAgICAgICBtX25hbWUgPSBudWxscHRyOwogfQogCkBA
IC01Nyw3ICs1Nyw3IEBAIFRleHRFbmNvZGluZzo6VGV4dEVuY29kaW5nKGNvbnN0IFN0cmluZyYK
ICAgICAsIG1fYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbChiYWNrc2xhc2hBc0N1cnJlbmN5U3lt
Ym9sKCkpCiB7CiAgICAgLy8gQWxpYXNlcyBhcmUgdmFsaWQsIGJ1dCBub3QgInJlcGxhY2VtZW50
IiBpdHNlbGYuCi0gICAgaWYgKG1fbmFtZSAmJiBpc1JlcGxhY2VtZW50RW5jb2RpbmcobmFtZSkp
CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUsICJyZXBsYWNlbWVu
dCIpKQogICAgICAgICBtX25hbWUgPSBudWxscHRyOwogfQogCkBAIC02OSwxMyArNjksMTIgQEAg
U3RyaW5nIFRleHRFbmNvZGluZzo6ZGVjb2RlKGNvbnN0IGNoYXIqIAogICAgIHJldHVybiBuZXdU
ZXh0Q29kZWMoKnRoaXMpLT5kZWNvZGUoZGF0YSwgbGVuZ3RoLCB0cnVlLCBzdG9wT25FcnJvciwg
c2F3RXJyb3IpOwogfQogCi1DU3RyaW5nIFRleHRFbmNvZGluZzo6ZW5jb2RlKFN0cmluZ1ZpZXcg
dGV4dCwgVW5lbmNvZGFibGVIYW5kbGluZyBoYW5kbGluZykgY29uc3QKK1ZlY3Rvcjx1aW50OF90
PiBUZXh0RW5jb2Rpbmc6OmVuY29kZShTdHJpbmdWaWV3IHRleHQsIFVuZW5jb2RhYmxlSGFuZGxp
bmcgaGFuZGxpbmcpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX25hbWUpCi0gICAgICAgIHJldHVybiBD
U3RyaW5nKCk7CisgICAgaWYgKCFtX25hbWUgfHwgdGV4dC5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiB7IH07CiAKLSAgICBpZiAodGV4dC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAiIjsK
KyAgICAvLyBGSVhNRTogQ29uc2lkZXIgYWRkaW5nIGEgZmFzdCBjYXNlIGZvciBBU0NJSS4KIAog
ICAgIC8vIEZJWE1FOiBXaGF0J3MgdGhlIHJpZ2h0IHBsYWNlIHRvIGRvIG5vcm1hbGl6YXRpb24/
CiAgICAgLy8gSXQncyBhIGxpdHRsZSBzdHJhbmdlIHRvIGRvIGl0IGluc2lkZSB0aGUgZW5jb2Rl
IGZ1bmN0aW9uLgpAQCAtODQsNyArODMsNyBAQCBDU3RyaW5nIFRleHRFbmNvZGluZzo6ZW5jb2Rl
KFN0cmluZ1ZpZXcgCiAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSB0ZXh0LnVwY29u
dmVydGVkQ2hhcmFjdGVycygpOwogCiAgICAgY29uc3QgVUNoYXIqIHNvdXJjZSA9IHVwY29udmVy
dGVkQ2hhcmFjdGVyczsKLSAgICBzaXplX3Qgc291cmNlTGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsK
KyAgICB1bnNpZ25lZCBzb3VyY2VMZW5ndGggPSB0ZXh0Lmxlbmd0aCgpOwogCiAgICAgVmVjdG9y
PFVDaGFyPiBub3JtYWxpemVkQ2hhcmFjdGVyczsKIApAQCAtMTA0LDcgKzEwMyw3IEBAIENTdHJp
bmcgVGV4dEVuY29kaW5nOjplbmNvZGUoU3RyaW5nVmlldyAKICAgICAgICAgc291cmNlTGVuZ3Ro
ID0gbm9ybWFsaXplZExlbmd0aDsKICAgICB9CiAKLSAgICByZXR1cm4gbmV3VGV4dENvZGVjKCp0
aGlzKS0+ZW5jb2RlKHNvdXJjZSwgc291cmNlTGVuZ3RoLCBoYW5kbGluZyk7CisgICAgcmV0dXJu
IG5ld1RleHRDb2RlYygqdGhpcyktPmVuY29kZShTdHJpbmdWaWV3IHsgc291cmNlLCBzb3VyY2VM
ZW5ndGggfSwgaGFuZGxpbmcpOwogfQogCiBjb25zdCBjaGFyKiBUZXh0RW5jb2Rpbmc6OmRvbU5h
bWUoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rp
bmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNv
ZGluZy5oCShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRFbmNvZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1
LDggKzI1LDggQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJUZXh0Q29kZWMuaCIKLSNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHBhbC90ZXh0L1VuZW5jb2RhYmxlSGFu
ZGxpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JU
IFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgc3RvcE9uRXJy
b3IsIGJvb2wmIHNhd0Vycm9yKSBjb25zdDsKICAgICBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIq
LCBzaXplX3QgbGVuZ3RoKSBjb25zdDsKLSAgICBDU3RyaW5nIGVuY29kZShTdHJpbmdWaWV3LCBV
bmVuY29kYWJsZUhhbmRsaW5nKSBjb25zdDsKKyAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlKFN0
cmluZ1ZpZXcsIFVuZW5jb2RhYmxlSGFuZGxpbmcpIGNvbnN0OwogCiAgICAgVUNoYXIgYmFja3Ns
YXNoQXNDdXJyZW5jeVN5bWJvbCgpIGNvbnN0OwogICAgIGJvb2wgaXNCeXRlQmFzZWRFbmNvZGlu
ZygpIGNvbnN0IHsgcmV0dXJuICFpc05vbkJ5dGVCYXNlZEVuY29kaW5nKCk7IH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0
cnkuY3BwCShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxl
LCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMCwyMyArMzAsMjEgQEAKICNpbmNsdWRlICJU
ZXh0Q29kZWNJQ1UuaCIKICNpbmNsdWRlICJUZXh0Q29kZWNMYXRpbjEuaCIKICNpbmNsdWRlICJU
ZXh0Q29kZWNSZXBsYWNlbWVudC5oIgotI2luY2x1ZGUgIlRleHRDb2RlY1VzZXJEZWZpbmVkLmgi
CiAjaW5jbHVkZSAiVGV4dENvZGVjVVRGMTYuaCIKICNpbmNsdWRlICJUZXh0Q29kZWNVVEY4Lmgi
CisjaW5jbHVkZSAiVGV4dENvZGVjVXNlckRlZmluZWQuaCIKICNpbmNsdWRlICJUZXh0RW5jb2Rp
bmcuaCIKICNpbmNsdWRlIDxtdXRleD4KICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
ICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4K
LQotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KIAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCkBA
IC05MCwxNCArODgsOCBAQCBzdHJ1Y3QgVGV4dEVuY29kaW5nTmFtZUhhc2ggewogICAgIHN0YXRp
YyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CiB9Owog
Ci1zdHJ1Y3QgVGV4dENvZGVjRmFjdG9yeSB7Ci0gICAgTmV3VGV4dENvZGVjRnVuY3Rpb24gZnVu
Y3Rpb247Ci0gICAgY29uc3Qgdm9pZCogYWRkaXRpb25hbERhdGE7Ci0gICAgVGV4dENvZGVjRmFj
dG9yeShOZXdUZXh0Q29kZWNGdW5jdGlvbiBmID0gMCwgY29uc3Qgdm9pZCogZCA9IDApIDogZnVu
Y3Rpb24oZiksIGFkZGl0aW9uYWxEYXRhKGQpIHsgfQotfTsKLQotdHlwZWRlZiBIYXNoTWFwPGNv
bnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgVGV4dEVuY29kaW5nTmFtZUhhc2g+IFRleHRFbmNvZGlu
Z05hbWVNYXA7Ci10eXBlZGVmIEhhc2hNYXA8Y29uc3QgY2hhciosIFRleHRDb2RlY0ZhY3Rvcnk+
IFRleHRDb2RlY01hcDsKK3VzaW5nIFRleHRFbmNvZGluZ05hbWVNYXAgPSBIYXNoTWFwPGNvbnN0
IGNoYXIqLCBjb25zdCBjaGFyKiwgVGV4dEVuY29kaW5nTmFtZUhhc2g+OwordXNpbmcgVGV4dENv
ZGVjTWFwID0gSGFzaE1hcDxjb25zdCBjaGFyKiwgTmV3VGV4dENvZGVjRnVuY3Rpb24+OwogCiBz
dGF0aWMgU3RhdGljTG9jayBlbmNvZGluZ1JlZ2lzdHJ5TXV0ZXg7CiAKQEAgLTEzOCwxMSArMTMw
LDExIEBAIHN0YXRpYyB2b2lkIGFkZFRvVGV4dEVuY29kaW5nTmFtZU1hcChjb24KICAgICB0ZXh0
RW5jb2RpbmdOYW1lTWFwLT5hZGQoYWxpYXMsIGF0b21pY05hbWUpOwogfQogCi1zdGF0aWMgdm9p
ZCBhZGRUb1RleHRDb2RlY01hcChjb25zdCBjaGFyKiBuYW1lLCBOZXdUZXh0Q29kZWNGdW5jdGlv
biBmdW5jdGlvbiwgY29uc3Qgdm9pZCogYWRkaXRpb25hbERhdGEpCitzdGF0aWMgdm9pZCBhZGRU
b1RleHRDb2RlY01hcChjb25zdCBjaGFyKiBuYW1lLCBOZXdUZXh0Q29kZWNGdW5jdGlvbiYmIGZ1
bmN0aW9uKQogewogICAgIGNvbnN0IGNoYXIqIGF0b21pY05hbWUgPSB0ZXh0RW5jb2RpbmdOYW1l
TWFwLT5nZXQobmFtZSk7CiAgICAgQVNTRVJUKGF0b21pY05hbWUpOwotICAgIHRleHRDb2RlY01h
cC0+YWRkKGF0b21pY05hbWUsIFRleHRDb2RlY0ZhY3RvcnkoZnVuY3Rpb24sIGFkZGl0aW9uYWxE
YXRhKSk7CisgICAgdGV4dENvZGVjTWFwLT5hZGQoYXRvbWljTmFtZSwgV1RGTW92ZShmdW5jdGlv
bikpOwogfQogCiBzdGF0aWMgdm9pZCBwcnVuZUJsYWNrbGlzdGVkQ29kZWNzKCkKQEAgLTIzNCwy
MiArMjI2LDYgQEAgYm9vbCBpc0phcGFuZXNlRW5jb2RpbmcoY29uc3QgY2hhciogY2FubwogICAg
IHJldHVybiBjYW5vbmljYWxFbmNvZGluZ05hbWUgJiYgamFwYW5lc2VFbmNvZGluZ3MgJiYgamFw
YW5lc2VFbmNvZGluZ3MtPmNvbnRhaW5zKGNhbm9uaWNhbEVuY29kaW5nTmFtZSk7CiB9CiAKLWJv
b2wgaXNSZXBsYWNlbWVudEVuY29kaW5nKGNvbnN0IGNoYXIqIGFsaWFzKQotewotICAgIGlmICgh
YWxpYXMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChzdHJsZW4oYWxpYXMpICE9
IDExKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gIXN0cmNhc2VjbXAoYWxp
YXMsICJyZXBsYWNlbWVudCIpOwotfQotCi1ib29sIGlzUmVwbGFjZW1lbnRFbmNvZGluZyhjb25z
dCBTdHJpbmcmIGFsaWFzKQotewotICAgIHJldHVybiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZShhbGlhcywgInJlcGxhY2VtZW50Iik7Ci19Ci0KIGJvb2wgc2hvdWxkU2hvd0JhY2tzbGFz
aEFzQ3VycmVuY3lTeW1ib2xJbihjb25zdCBjaGFyKiBjYW5vbmljYWxFbmNvZGluZ05hbWUpCiB7
CiAgICAgcmV0dXJuIGNhbm9uaWNhbEVuY29kaW5nTmFtZSAmJiBub25CYWNrc2xhc2hFbmNvZGlu
Z3MgJiYgbm9uQmFja3NsYXNoRW5jb2RpbmdzLT5jb250YWlucyhjYW5vbmljYWxFbmNvZGluZ05h
bWUpOwpAQCAtMjcyLDkgKzI0OCw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxUZXh0Q29kZWM+IG5ld1Rl
eHRDb2RlYygKICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayhlbmNvZGluZ1Jl
Z2lzdHJ5TXV0ZXgpOwogCiAgICAgQVNTRVJUKHRleHRDb2RlY01hcCk7Ci0gICAgVGV4dENvZGVj
RmFjdG9yeSBmYWN0b3J5ID0gdGV4dENvZGVjTWFwLT5nZXQoZW5jb2RpbmcubmFtZSgpKTsKLSAg
ICBBU1NFUlQoZmFjdG9yeS5mdW5jdGlvbik7Ci0gICAgcmV0dXJuIGZhY3RvcnkuZnVuY3Rpb24o
ZW5jb2RpbmcsIGZhY3RvcnkuYWRkaXRpb25hbERhdGEpOworICAgIGF1dG8gcmVzdWx0ID0gdGV4
dENvZGVjTWFwLT5maW5kKGVuY29kaW5nLm5hbWUoKSk7CisgICAgQVNTRVJUKHJlc3VsdCAhPSB0
ZXh0Q29kZWNNYXAtPmVuZCgpKTsKKyAgICByZXR1cm4gcmVzdWx0LT52YWx1ZSgpOwogfQogCiBj
b25zdCBjaGFyKiBhdG9taWNDYW5vbmljYWxUZXh0RW5jb2RpbmdOYW1lKGNvbnN0IGNoYXIqIG5h
bWUpCkBAIC0yOTcsMTYgKzI3MywxNCBAQCBjb25zdCBjaGFyKiBhdG9taWNDYW5vbmljYWxUZXh0
RW5jb2RpbmdOCiAgICAgcmV0dXJuIHRleHRFbmNvZGluZ05hbWVNYXAtPmdldChuYW1lKTsKIH0K
IAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1jb25zdCBjaGFyKiBhdG9taWND
YW5vbmljYWxUZXh0RW5jb2RpbmdOYW1lKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMs
IHNpemVfdCBsZW5ndGgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMg
Y29uc3QgY2hhciogYXRvbWljQ2Fub25pY2FsVGV4dEVuY29kaW5nTmFtZShjb25zdCBDaGFyYWN0
ZXJUeXBlKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQogewogICAgIGNoYXIgYnVmZmVyW21h
eEVuY29kaW5nTmFtZUxlbmd0aCArIDFdOwogICAgIHNpemVfdCBqID0gMDsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIENoYXJhY3RlclR5cGUgYyA9
IGNoYXJhY3RlcnNbaV07CiAgICAgICAgIGlmIChqID09IG1heEVuY29kaW5nTmFtZUxlbmd0aCkK
LSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBidWZmZXJbaisrXSA9IGM7CisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgYnVmZmVyW2orK10gPSBjaGFyYWN0ZXJzW2ld
OwogICAgIH0KICAgICBidWZmZXJbal0gPSAwOwogICAgIHJldHVybiBhdG9taWNDYW5vbmljYWxU
ZXh0RW5jb2RpbmdOYW1lKGJ1ZmZlcik7CkBAIC0zMTQsNyArMjg4LDcgQEAgY29uc3QgY2hhciog
YXRvbWljQ2Fub25pY2FsVGV4dEVuY29kaW5nTgogCiBjb25zdCBjaGFyKiBhdG9taWNDYW5vbmlj
YWxUZXh0RW5jb2RpbmdOYW1lKGNvbnN0IFN0cmluZyYgYWxpYXMpCiB7Ci0gICAgaWYgKCFhbGlh
cy5sZW5ndGgoKSkKKyAgICBpZiAoYWxpYXMuaXNFbXB0eSgpIHx8ICFhbGlhcy5pc0FsbEFTQ0lJ
KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKGFsaWFzLmlzOEJpdCgpKQpA
QCAtMzUzLDE5ICszMjcsNCBAQCBTdHJpbmcgZGVmYXVsdFRleHRFbmNvZGluZ05hbWVGb3JTeXN0
ZW1MCiAjZW5kaWYKIH0KIAotI2lmbmRlZiBOREVCVUcKLXZvaWQgZHVtcFRleHRFbmNvZGluZ05h
bWVNYXAoKQotewotICAgIHVuc2lnbmVkIHNpemUgPSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5zaXpl
KCk7Ci0gICAgZnByaW50ZihzdGRlcnIsICJEdW1waW5nICV1IGVudHJpZXMgaW4gV2ViQ29yZTo6
dGV4dEVuY29kaW5nTmFtZU1hcC4uLlxuIiwgc2l6ZSk7Ci0KLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8
U3RhdGljTG9jaz4gbG9jayhlbmNvZGluZ1JlZ2lzdHJ5TXV0ZXgpOwotCi0gICAgVGV4dEVuY29k
aW5nTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5iZWdp
bigpOwotICAgIFRleHRFbmNvZGluZ05hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRleHRF
bmNvZGluZ05hbWVNYXAtPmVuZCgpOwotICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiJyVzJyA9PiAnJXMnXG4iLCBpdC0+a2V5LCBpdC0+dmFsdWUp
OwotfQotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmgJKHJldmlz
aW9uIDIyNTIwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5n
UmVnaXN0cnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Cisj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOSwy
MiArMzksMTUgQEAgV0VCQ09SRV9FWFBPUlQgc3RkOjp1bmlxdWVfcHRyPFRleHRDb2RlYwogCiAv
LyBPbmx5IFRleHRFbmNvZGluZyBzaG91bGQgdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGRp
cmVjdGx5LgogY29uc3QgY2hhciogYXRvbWljQ2Fub25pY2FsVGV4dEVuY29kaW5nTmFtZShjb25z
dCBjaGFyKiBhbGlhcyk7Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWNvbnN0
IGNoYXIqIGF0b21pY0Nhbm9uaWNhbFRleHRFbmNvZGluZ05hbWUoY29uc3QgQ2hhcmFjdGVyVHlw
ZSosIHNpemVfdCk7CiBjb25zdCBjaGFyKiBhdG9taWNDYW5vbmljYWxUZXh0RW5jb2RpbmdOYW1l
KGNvbnN0IFN0cmluZyYpOwogYm9vbCBub0V4dGVuZGVkVGV4dEVuY29kaW5nTmFtZVVzZWQoKTsK
IGJvb2wgaXNKYXBhbmVzZUVuY29kaW5nKGNvbnN0IGNoYXIqIGNhbm9uaWNhbEVuY29kaW5nTmFt
ZSk7CiBib29sIHNob3VsZFNob3dCYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sSW4oY29uc3QgY2hh
ciogY2Fub25pY2FsRW5jb2RpbmdOYW1lKTsKLWJvb2wgaXNSZXBsYWNlbWVudEVuY29kaW5nKGNv
bnN0IGNoYXIqIGFsaWFzKTsKLWJvb2wgaXNSZXBsYWNlbWVudEVuY29kaW5nKGNvbnN0IFN0cmlu
ZyYgYWxpYXMpOwogCiBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgZGVmYXVsdFRleHRFbmNvZGluZ05h
bWVGb3JTeXN0ZW1MYW5ndWFnZSgpOworCiAjaWYgUExBVEZPUk0oQ09DT0EpCiBXRUJDT1JFX0VY
UE9SVCBDRlN0cmluZ0VuY29kaW5nIHdlYkRlZmF1bHRDRlN0cmluZ0VuY29kaW5nKCk7CiAjZW5k
aWYKIAotI2lmbmRlZiBOREVCVUcKLXZvaWQgZHVtcFRleHRFbmNvZGluZ05hbWVNYXAoKTsKLSNl
bmRpZgotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwv
WFNMVFVuaWNvZGVTb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWFNM
VFVuaWNvZGVTb3J0LmNwcAkocmV2aXNpb24gMjI1MjA3KQorKysgU291cmNlL1dlYkNvcmUveG1s
L1hTTFRVbmljb2RlU29ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKIAog
I2luY2x1ZGUgPGxpYnhzbHQvdGVtcGxhdGVzLmg+CiAjaW5jbHVkZSA8bGlieHNsdC94c2x0dXRp
bHMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NvbGxhdG9yLmg+CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwCShyZXZpc2lvbiAy
MjUyMDcpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNiBAQAogI2luY2x1ZGUgIlRleHRSZXNvdXJj
ZURlY29kZXIuaCIKICNpbmNsdWRlICJUcmVlRGVwdGhMaW1pdC5oIgogI2luY2x1ZGUgPHd0Zi9S
ZWYuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUv
eG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAkocmV2
aXNpb24gMjI1MjA3KQorKysgU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBh
cnNlckxpYnhtbDIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw2IEBACiAjaW5jbHVk
ZSAiWE1MTlNOYW1lcy5oIgogI2luY2x1ZGUgIlhNTERvY3VtZW50UGFyc2VyU2NvcGUuaCIKICNp
bmNsdWRlIDxsaWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4
dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VURjguaD4KIAogI2lmIEVOQUJMRShYU0xU
KQpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTctMTEtMjcgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybml6ZSBzb21lIGFzcGVjdHMg
b2YgdGV4dCBjb2RlY3MsIGVsaW1pbmF0ZSBXZWJLaXQgdXNlIG9mIHN0cmNhc2VjbXAKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDAwOQorCisgICAg
ICAgIFJldmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVCcm93c2VyRnVuY3MuY3BwOgorICAgICAgICAoV2Vi
S2l0Ojppbml0aWFsaXplUHJvdGVjdGlvblNwYWNlKTogVXNlIGVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlIGluc3RlYWQKKyAgICAgICAgb2Ygc3RyY2FzZWNtcC4KKwogMjAxNy0xMS0yNyAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEFTU0VSVElPTiBGQUlM
RUQ6IGFkZFJlc3VsdC5pc05ld0VudHJ5IFdlYkNvcmU6OlNXU2VydmVyUmVnaXN0cmF0aW9uOjph
ZGRDbGllbnRVc2luZ1JlZ2lzdHJhdGlvbihXZWJDb3JlOjpTZXJ2aWNlV29ya2VyQ2xpZW50SWRl
bnRpZmllciBjb25zdCYpICsgMTQxCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1
Z2lucy9OZXRzY2FwZS9OZXRzY2FwZUJyb3dzZXJGdW5jcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVCcm93c2VyRnVu
Y3MuY3BwCShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1
Z2lucy9OZXRzY2FwZS9OZXRzY2FwZUJyb3dzZXJGdW5jcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg4MCw5ICs4ODAsOSBAQCBzdGF0aWMgTlBFcnJvciBOUE5fU2V0VmFsdWVGb3JVUkwoTlBQIG5w
CiBzdGF0aWMgYm9vbCBpbml0aWFsaXplUHJvdGVjdGlvblNwYWNlKGNvbnN0IGNoYXIqIHByb3Rv
Y29sLCBjb25zdCBjaGFyKiBob3N0LCBpbnQgcG9ydCwgY29uc3QgY2hhciogc2NoZW1lLCBjb25z
dCBjaGFyKiByZWFsbSwgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UpCiB7CiAgICAg
UHJvdGVjdGlvblNwYWNlU2VydmVyVHlwZSBzZXJ2ZXJUeXBlOwotICAgIGlmICghc3RyY2FzZWNt
cChwcm90b2NvbCwgImh0dHAiKSkKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UocHJvdG9jb2wsICJodHRwIikpCiAgICAgICAgIHNlcnZlclR5cGUgPSBQcm90ZWN0aW9uU3Bh
Y2VTZXJ2ZXJIVFRQOwotICAgIGVsc2UgaWYgKCFzdHJjYXNlY21wKHByb3RvY29sLCAiaHR0cHMi
KSkKKyAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwcm90b2NvbCwg
Imh0dHBzIikpCiAgICAgICAgIHNlcnZlclR5cGUgPSBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJIVFRQ
UzsKICAgICBlbHNlIHsKICAgICAgICAgLy8gV2Ugb25seSBjYXJlIGFib3V0IGh0dHAgYW5kIGh0
dHBzLgpAQCAtODkxLDkgKzg5MSw5IEBAIHN0YXRpYyBib29sIGluaXRpYWxpemVQcm90ZWN0aW9u
U3BhY2UoY28KIAogICAgIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lIGF1dGhl
bnRpY2F0aW9uU2NoZW1lID0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVEZWZh
dWx0OwogICAgIGlmIChzZXJ2ZXJUeXBlID09IFByb3RlY3Rpb25TcGFjZVNlcnZlckhUVFApIHsK
LSAgICAgICAgaWYgKCFzdHJjYXNlY21wKHNjaGVtZSwgImJhc2ljIikpCisgICAgICAgIGlmIChl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzY2hlbWUsICJiYXNpYyIpKQogICAgICAgICAg
ICAgYXV0aGVudGljYXRpb25TY2hlbWUgPSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNj
aGVtZUhUVFBCYXNpYzsKLSAgICAgICAgZWxzZSBpZiAoIXN0cmNtcChzY2hlbWUsICJkaWdlc3Qi
KSkKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc2NoZW1l
LCAiZGlnZXN0IikpCiAgICAgICAgICAgICBhdXRoZW50aWNhdGlvblNjaGVtZSA9IFByb3RlY3Rp
b25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRUUERpZ2VzdDsKICAgICB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisy
MDE3LTExLTI3ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNb2Rl
cm5pemUgc29tZSBhc3BlY3RzIG9mIHRleHQgY29kZWNzLCBlbGltaW5hdGUgV2ViS2l0IHVzZSBv
ZiBzdHJjYXNlY21wCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xODAwMDkKKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisg
ICAgICAgICogSGlzdG9yeS9IaXN0b3J5UHJvcGVydHlMaXN0Lm1tOiBSZW1vdmVkIGluY2x1ZGUg
b2YgU3RyaW5nRXh0cmFzLmguCisKKyAgICAgICAgKiBQbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBs
dWdpblZpZXcubW06CisgICAgICAgIChXZWJLaXQ6OmdldEF1dGhlbnRpY2F0aW9uSW5mbyk6IFVz
ZSBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSBpbnN0ZWFkCisgICAgICAgIG9mIHN0cmNh
c2VjbXAuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tOgorICAgICAgICAo
Y29udGFpbnMpOiBEaXR0by4gQWxzbyBtYWRlIHRoaXMgYSB0ZW1wbGF0ZSBzbyBpdCdzIGVhc2ll
ciB0byBjYWxsIG9uIGFuIGFycmF5LgorICAgICAgICAoY2FjaGVNb2RlbEZvck1haW5CdW5kbGUp
OiBUYWtlIGFkdmFudGFnZSBvZiB0aGUgYWJvdmUgdG8gbWFrZSBpdCBjbGVhbmVyLgorCiAyMDE3
LTExLTI3ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAg
IE9uZSB0b28gbWFueSB6ZXJvZXMgaW4gbWFjT1MgdmVyc2lvbiBudW1iZXIgaW4gRmVhdHVyZURl
ZmluZXMKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3RvcnkvSGlzdG9yeVByb3Bl
cnR5TGlzdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5
L0hpc3RvcnlQcm9wZXJ0eUxpc3QubW0JKHJldmlzaW9uIDIyNTIwNykKKysrIFNvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0hpc3RvcnkvSGlzdG9yeVByb3BlcnR5TGlzdC5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjcsNyArMjcsNiBAQAogCiAjaW1wb3J0ICJXZWJIaXN0b3J5SXRlbUludGVybmFsLmgi
CiAjaW1wb3J0IDxXZWJDb3JlL0hpc3RvcnlJdGVtLmg+Ci0jaW1wb3J0IDx3dGYvU3RyaW5nRXh0
cmFzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVn
aW5WaWV3Lm1tCShyZXZpc2lvbiAyMjUyMDcpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9Q
bHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTg1
NCwxMSArODU0LDkgQEAgLSAoQk9PTClnZXRGb3JtVmFsdWU6KE5TU3RyaW5nICoqKXZhbHVlCiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCi1ib29sIGdldEF1dGhlbnRpY2F0aW9uSW5mbyhjb25zdCBj
aGFyKiBwcm90b2NvbFN0ciwgY29uc3QgY2hhciogaG9zdFN0ciwgaW50MzJfdCBwb3J0LCBjb25z
dCBjaGFyKiBzY2hlbWVTdHIsIGNvbnN0IGNoYXIqIHJlYWxtU3RyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ1N0cmluZyYgdXNlcm5hbWUsIENTdHJpbmcmIHBhc3N3b3JkKQorYm9vbCBn
ZXRBdXRoZW50aWNhdGlvbkluZm8oY29uc3QgY2hhciogcHJvdG9jb2xTdHIsIGNvbnN0IGNoYXIq
IGhvc3RTdHIsIGludDMyX3QgcG9ydCwgY29uc3QgY2hhciogc2NoZW1lU3RyLCBjb25zdCBjaGFy
KiByZWFsbVN0ciwgQ1N0cmluZyYgdXNlcm5hbWUsIENTdHJpbmcmIHBhc3N3b3JkKQogewotICAg
IGlmIChzdHJjYXNlY21wKHByb3RvY29sU3RyLCAiaHR0cCIpICE9IDAgJiYgCi0gICAgICAgIHN0
cmNhc2VjbXAocHJvdG9jb2xTdHIsICJodHRwcyIpICE9IDApCisgICAgaWYgKCFlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShwcm90b2NvbFN0ciwgImh0dHAiKSAmJiAhZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UocHJvdG9jb2xTdHIsICJodHRwcyIpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBOU1N0cmluZyAqaG9zdCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0
cmluZzpob3N0U3RyXTsKQEAgLTg3NCwxMCArODcyLDEwIEBAICAgICBpZiAoIXByb3RvY29sKQog
ICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKICAgICAKICAgICBOU1N0cmluZyAq
YXV0aGVudGljYXRpb25NZXRob2QgPSBOU1VSTEF1dGhlbnRpY2F0aW9uTWV0aG9kRGVmYXVsdDsK
LSAgICBpZiAoIXN0cmNhc2VjbXAocHJvdG9jb2xTdHIsICJodHRwIikpIHsKLSAgICAgICAgaWYg
KCFzdHJjYXNlY21wKHNjaGVtZVN0ciwgImJhc2ljIikpCisgICAgaWYgKGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKHByb3RvY29sU3RyLCAiaHR0cCIpKSB7CisgICAgICAgIGlmIChlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzY2hlbWVTdHIsICJiYXNpYyIpKQogICAgICAgICAg
ICAgYXV0aGVudGljYXRpb25NZXRob2QgPSBOU1VSTEF1dGhlbnRpY2F0aW9uTWV0aG9kSFRUUEJh
c2ljOwotICAgICAgICBlbHNlIGlmICghc3RyY2FzZWNtcChzY2hlbWVTdHIsICJkaWdlc3QiKSkK
KyAgICAgICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc2NoZW1lU3Ry
LCAiZGlnZXN0IikpCiAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbk1ldGhvZCA9IE5TVVJMQXV0
aGVudGljYXRpb25NZXRob2RIVFRQRGlnZXN0OwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQkocmV2aXNp
b24gMjI1MjA3KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJl
bmNlcy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzYsMTQgKzc2LDE0IEBAIHN0YXRpYyBOU011dGFi
bGVEaWN0aW9uYXJ5ICp3ZWJQcmVmZXJlbmMKIAogc3RhdGljIHVuc2lnbmVkIHdlYlByZWZlcmVu
Y2VzSW5zdGFuY2VDb3VudFdpdGhQcml2YXRlQnJvd3NpbmdFbmFibGVkOwogCi1zdGF0aWMgYm9v
bCBjb250YWlucyhjb25zdCBjaGFyKiBjb25zdCBhcnJheVtdLCBpbnQgY291bnQsIGNvbnN0IGNo
YXIqIGl0ZW0pCit0ZW1wbGF0ZTx1bnNpZ25lZCBzaXplPiBzdGF0aWMgYm9vbCBjb250YWlucyhj
b25zdCBjaGFyKiBjb25zdCAoJmFycmF5KVtzaXplXSwgY29uc3QgY2hhciogaXRlbSkKIHsKICAg
ICBpZiAoIWl0ZW0pCiAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgaWYgKCFzdHJjYXNlY21wKGFycmF5W2ldLCBpdGVt
KSkKKyAgICBmb3IgKGF1dG8qIHN0cmluZyA6IGFycmF5KSB7CisgICAgICAgIGlmIChlcXVhbEln
bm9yaW5nQVNDSUlDYXNlKHN0cmluZywgaXRlbSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xNDAsMTEgKzE0MCwxMSBAQCBzdGF0
aWMgV2ViQ2FjaGVNb2RlbCBjYWNoZU1vZGVsRm9yTWFpbkJ1CiAgICAgICAgIH07CiAKICAgICAg
ICAgY29uc3QgY2hhciogYnVuZGxlSUQgPSBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJ
ZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsKLSAgICAgICAgaWYgKGNvbnRhaW5zKGRvY3VtZW50Vmll
d2VySURzLCBzaXplb2YoZG9jdW1lbnRWaWV3ZXJJRHMpIC8gc2l6ZW9mKGRvY3VtZW50Vmlld2Vy
SURzWzBdKSwgYnVuZGxlSUQpKQorICAgICAgICBpZiAoY29udGFpbnMoZG9jdW1lbnRWaWV3ZXJJ
RHMsIGJ1bmRsZUlEKSkKICAgICAgICAgICAgIHJldHVybiBXZWJDYWNoZU1vZGVsRG9jdW1lbnRW
aWV3ZXI7Ci0gICAgICAgIGlmIChjb250YWlucyhkb2N1bWVudEJyb3dzZXJJRHMsIHNpemVvZihk
b2N1bWVudEJyb3dzZXJJRHMpIC8gc2l6ZW9mKGRvY3VtZW50QnJvd3NlcklEc1swXSksIGJ1bmRs
ZUlEKSkKKyAgICAgICAgaWYgKGNvbnRhaW5zKGRvY3VtZW50QnJvd3NlcklEcywgYnVuZGxlSUQp
KQogICAgICAgICAgICAgcmV0dXJuIFdlYkNhY2hlTW9kZWxEb2N1bWVudEJyb3dzZXI7Ci0gICAg
ICAgIGlmIChjb250YWlucyhwcmltYXJ5V2ViQnJvd3NlcklEcywgc2l6ZW9mKHByaW1hcnlXZWJC
cm93c2VySURzKSAvIHNpemVvZihwcmltYXJ5V2ViQnJvd3NlcklEc1swXSksIGJ1bmRsZUlEKSkK
KyAgICAgICAgaWYgKGNvbnRhaW5zKHByaW1hcnlXZWJCcm93c2VySURzLCBidW5kbGVJRCkpCiAg
ICAgICAgICAgICByZXR1cm4gV2ViQ2FjaGVNb2RlbFByaW1hcnlXZWJCcm93c2VyOwogCiAgICAg
ICAgIGJvb2wgaXNMaW5rZWRBZ2FpbnN0V2ViS2l0ID0gV2ViS2l0TGlua2VkT25PckFmdGVyKDAp
OwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwko
cmV2aXNpb24gMjI1MjA3KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTMgQEAKKzIwMTctMTEtMjcgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgor
CisgICAgICAgIE1vZGVybml6ZSBzb21lIGFzcGVjdHMgb2YgdGV4dCBjb2RlY3MsIGVsaW1pbmF0
ZSBXZWJLaXQgdXNlIG9mIHN0cmNhc2VjbXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE4MDAwOQorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hy
aXN0ZW5zZW4uCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0
Q0cuY3BwOiBSZW1vdmVkIGluY2x1ZGUgb2YgU3RyaW5nRXh0cmFzLmguCisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcDogRGl0dG8uCisKIDIwMTctMTEt
MjcgIEFha2FzaCBKYWluICA8YWFrYXNoX2phaW5AYXBwbGUuY29tPgogCiAgICAgICAgIERvIG5v
dCBydW4gd2Via2l0cHkgdGVzdHMgb24gbXVsdGlwbGUgRVdTZXMKSW5kZXg6IFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3VwcG9ydENHLmNwcAkocmV2aXNpb24gMjI1MjA3
KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3VwcG9ydENHLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNp
bmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAKICNpZiBQTEFURk9STShXSU4pCiAjaW5jbHVk
ZSAiTUQ1LmgiCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVGV4dENv
ZGVjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
VGV4dENvZGVjLmNwcAkocmV2aXNpb24gMjI1MjA3KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL1RleHRDb2RlYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcg
QEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0Q29kZWMu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRFbmNvZGluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
VGV4dEVuY29kaW5nUmVnaXN0cnkuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CkBAIC04NywxMiArODgsMTMgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGVzY2FwZU5vbkFTQ0lJ
UHJpbnRhYgogc3RhdGljIGNvbnN0IGNoYXIqIHRlc3REZWNvZGUoY29uc3QgY2hhciogZW5jb2Rp
bmdOYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Y29uc3QgY2hhcio+IGlucHV0cykKIHsKICAg
ICBTdHJpbmdCdWlsZGVyIHJlc3VsdEJ1aWxkZXI7CisgICAgYm9vbCBpZ25vcmVkOwogICAgIGF1
dG8gY29kZWMgPSBuZXdUZXh0Q29kZWMoV2ViQ29yZTo6VGV4dEVuY29kaW5nIHsgZW5jb2RpbmdO
YW1lIH0pOwogICAgIHNpemVfdCBzaXplID0gaW5wdXRzLnNpemUoKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBhdXRvIHZlY3RvciA9IGRlY29kZUhl
eFRlc3RCeXRlcyhpbnB1dHMuYmVnaW4oKVtpXSk7CiAgICAgICAgIGJvb2wgbGFzdCA9IGkgPT0g
c2l6ZSAtIDE7Ci0gICAgICAgIHJlc3VsdEJ1aWxkZXIuYXBwZW5kKGVzY2FwZU5vbkFTQ0lJUHJp
bnRhYmxlQ2hhcmFjdGVycyhjb2RlYy0+ZGVjb2RlKHZlY3Rvci5kYXRhKCksIHZlY3Rvci5zaXpl
KCksIGxhc3QpKSk7CisgICAgICAgIHJlc3VsdEJ1aWxkZXIuYXBwZW5kKGVzY2FwZU5vbkFTQ0lJ
UHJpbnRhYmxlQ2hhcmFjdGVycyhjb2RlYy0+ZGVjb2RlKHZlY3Rvci5kYXRhKCksIHZlY3Rvci5z
aXplKCksIGxhc3QsIGZhbHNlLCBpZ25vcmVkKSkpOwogICAgIH0KICAgICByZXR1cm4gZXNjYXBl
Tm9uQVNDSUlQcmludGFibGVDaGFyYWN0ZXJzKHJlc3VsdEJ1aWxkZXIudG9TdHJpbmcoKSk7CiB9
CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2cvVGVzdEludm9jYXRpb25DRy5j
cHAJKHJldmlzaW9uIDIyNTIwNykKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2cvVGVzdElu
dm9jYXRpb25DRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRl
IDxXZWJLaXQvV0tJbWFnZUNHLmg+CiAjaW5jbHVkZSA8d3RmL01ENS5oPgogI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAKICNpZiBQTEFU
Rk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8TGF1bmNoU2VydmljZXMvVVRD
b3JlVHlwZXMuaD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328245</attachid>
            <date>2017-12-02 11:57:26 -0800</date>
            <delta_ts>2017-12-02 12:10:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-180009-20171202115724.patch</filename>
            <type>text/plain</type>
            <size>200786</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI1NDUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
ZDI4ZTNiNzZhZGVjZWZkZGQyMjBmNjEzMGY4ZjM5ZGEzOThjMmU0Li44NWM0ZWYzMDczZGRkYTEy
OTEyZjcxOGI1YjUyZjVmNzMxZGFjOGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMiBAQAorMjAxNy0xMi0wMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgTW9kZXJuaXplIHNvbWUgYXNwZWN0cyBvZiB0ZXh0IGNvZGVjcywgZWxpbWluYXRl
IFdlYktpdCB1c2Ugb2Ygc3RyY2FzZWNtcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMDA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwOiBSZW1vdmVkIGlu
Y2x1ZGUgb2YgU3RyaW5nRXh0cmFzLmguCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cDogRGl0dG8uCisgICAgICAgICogYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHA6IERpdHRv
LgorICAgICAgICAqIHJ1bnRpbWUvQ29uZmlnRmlsZS5jcHA6IERpdHRvLgorICAgICAgICAqIHJ1
bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHA6IERpdHRvLgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhp
bmdUeXBlLmNwcDogRGl0dG8uCisgICAgICAgICogcnVudGltZS9KU0NKU1ZhbHVlLmNwcDogRGl0
dG8uCisgICAgICAgICogcnVudGltZS9KU0RhdGVNYXRoLmNwcDogRGl0dG8uCisgICAgICAgICog
cnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHA6IERpdHRvLgorICAgICAgICAqIHJ1
bnRpbWUvT3B0aW9ucy5jcHA6IERpdHRvLgorICAgICAgICAoSlNDOjpwYXJzZSk6IFVzZSBlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSBpbnN0ZWFkIG9mIHN0cmNhc2VjbXAuCisKIDIwMTct
MTItMDEgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEphdmFT
Y3JpcHRDb3JlOiBtaXNzaW5nIGV4Y2VwdGlvbiBjaGVja3MgaW4gTWF0aCBmdW5jdGlvbnMgdGhh
dCB0YWtlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggMDliZTRjNDVjZDQ2ZDE4NjI5NTY5
YjdjN2E1MGNhZWRlMmE4OTdiMC4uYTZjMDUwM2IxZmRjMzA4YTk4NTdjMWM5Yzc3MWJiNmU1NDA5
NGE0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwzOSBAQAorMjAxNy0xMi0wMiAgRGFyaW4gQWRsZXIgIDxkYXJp
bkBhcHBsZS5jb20+CisKKyAgICAgICAgTW9kZXJuaXplIHNvbWUgYXNwZWN0cyBvZiB0ZXh0IGNv
ZGVjcywgZWxpbWluYXRlIFdlYktpdCB1c2Ugb2Ygc3RyY2FzZWNtcAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMDA5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvQXNzZXJ0aW9ucy5jcHA6IFJl
bW92ZWQgaW5jbHVkZSBvZiBTdHJpbmdFeHRyYXMuaC4KKyAgICAgICAgKFdURkxvZ0NoYW5uZWxC
eU5hbWUpOiBVc2UgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSBpbnN0ZWFkIG9mIHN0cmNhc2VjbXAu
CisgICAgICAgICogd3RmL0RhdGVNYXRoLmNwcDogUmVtb3ZlZCBpbmNsdWRlIG9mIFN0cmluZ0V4
dHJhcy5oLgorICAgICAgICAqIHd0Zi9NRDUuY3BwOiBEaXR0by4gQWxzbyByZW1vdmVkIGluY2x1
ZGUgb2YgQ1N0cmluZy5oLgorICAgICAgICAqIHd0Zi9TSEExLmNwcDogRGl0dG8uCisKKyAgICAg
ICAgKiB3dGYvU3RyaW5nRXh0cmFzLmg6CisgICAgICAgIChzdHJuY2FzZWNtcCk6IERlbGV0ZWQu
CisgICAgICAgIChzdHJjYXNlY21wKTogRGVsZXRlZC4KKworICAgICAgICAqIHd0Zi9TdHJpbmdQ
cmludFN0cmVhbS5jcHA6IFJlbW92ZWQgaW5jbHVkZSBvZiBTdHJpbmdFeHRyYXMuaC4KKyAgICAg
ICAgKiB3dGYvdGV4dC9CYXNlNjQuY3BwOiBEaXR0by4KKworICAgICAgICAqIHd0Zi90ZXh0L0xp
bmVFbmRpbmcuY3BwOgorICAgICAgICAoV1RGOjpub3JtYWxpemVMaW5lRW5kaW5nc1RvTEYpOiBS
ZXBsYWNlZCBvbGQgbW9yZSBnZW5lcmFsIHB1cnBvc2UgZnVuY3Rpb24gd2l0aAorICAgICAgICB0
aGlzLiBDaGFuZ2VkIGFyZ3VtZW50IHR5cGUgdG8gdmVjdG9yIGFuZCB1c2VkIGFuIHJ2YWx1ZSBy
ZWZlcmVuY2UgYW5kIHJldHVybiB2YWx1ZS4KKyAgICAgICAgQWxzbyBmaXhlZCBzb21lIHNtYWxs
IGxvZ2ljIGVycm9ycy4KKyAgICAgICAgKFdURjo6bm9ybWFsaXplTGluZUVuZGluZ3NUb0NSTEYp
OiBEaXR0by4KKyAgICAgICAgKFdURjo6bm9ybWFsaXplTGluZUVuZGluZ3NUb05hdGl2ZSk6IFVw
ZGF0ZWQgZm9yIGFib3ZlIGNoYW5nZXMuCisgICAgICAgICogd3RmL3RleHQvTGluZUVuZGluZy5o
OiBVcGRhdGVkIGZvciBhYm92ZSBjaGFuZ2VzLgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5n
Q29tbW9uLmg6CisgICAgICAgIChXVEY6OmVxdWFsSWdub3JpbmdBU0NJSUNhc2UpOiBBZGRlZCBv
dmVybG9hZCBmb3IgY29uc3QgY2hhciouCisgICAgICAgIChXVEY6OmVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKTogRGl0dG8uCisKKyAgICAgICAgKiB3dGYvdGV4dC9UZXh0U3RyZWFtLmNw
cDogUmVtb3ZlZCBpbmNsdWRlIG9mIFN0cmluZ0V4dHJhcy5oLgorICAgICAgICAqIHd0Zi90ZXh0
L1dURlN0cmluZy5jcHA6IERpdHRvLgorICAgICAgICAqIHd0Zi91bmljb2RlL2ljdS9Db2xsYXRv
cklDVS5jcHA6IERpdHRvLgorCiAyMDE3LTEyLTAyICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFw
cGxlLmNvbT4KIAogICAgICAgICBGYWN0b3Igb3V0IHRoZSAiZGF0YWJhc2VUYXNrUXVldWUiIHBh
cnRzIG9mIElEQlNlcnZlciBpbnRvIHNvbWV0aGluZyByZXVzYWJsZS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5
N2VmYTJiYjVlOTRmOTE0NjY2Yzg5NmE2MDhlMjcwOGEyOTY0ZDU3Li43Nzk4NzQwY2RiNmJhMTk0
NTc0M2IwMmY4MmEwNzg0NWI5MTUyMjJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTk4IEBACisy
MDE3LTEyLTAyICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNb2Rl
cm5pemUgc29tZSBhc3BlY3RzIG9mIHRleHQgY29kZWNzLCBlbGltaW5hdGUgV2ViS2l0IHVzZSBv
ZiBzdHJjYXNlY21wCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xODAwMDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIE1vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZl
dGNoQm9keTo6Y29uc3VtZUFzU3RyZWFtKTogVXBkYXRlIHRvIHVzZSBzaXplIHNpbmNlIHRoZSBy
ZXN1bHQgb2YKKyAgICAgICAgZW5jb2RlIGlzIG5vdyBWZWN0b3IgcmF0aGVyIHRoYW4gQ1N0cmlu
Zy4gQW5kIGZvciB0aGUgbmV3IFVuZW5jb2RhYmxlSGFuZGxpbmcuCisgICAgICAgIChXZWJDb3Jl
OjpGZXRjaEJvZHk6OmNvbnN1bWVUZXh0KTogUmVtb3ZlZCBub3ctdW5uZWVkZWQgdHlwZSBjYXN0
LiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6Ym9keUFzRm9ybURhdGEgY29u
c3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6dGFrZSk6IFBhc3MgcmVz
dWx0IG9mIGVuY29kZSBkaXJlY3RseSB0byBTaGFyZWRCdWZmZXI6OmNyZWF0ZS4KKworICAgICAg
ICAqIE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRlci5jcHA6IFJlbW92ZWQgaW5j
bHVkZSBvZiBTdHJpbmdFeHRyYXMuaC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2Vi
U29ja2V0SGFuZHNoYWtlLmNwcDogRGl0dG8uCisgICAgICAgICogYnJpZGdlL0lkZW50aWZpZXJS
ZXAuaDogRGl0dG8uCisgICAgICAgICogYnJpZGdlL2MvY19pbnN0YW5jZS5jcHA6IERpdHRvLgor
CisgICAgICAgICogZmlsZWFwaS9CbG9iQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpC
bG9iQnVpbGRlcjo6YXBwZW5kKTogVXBkYXRlZCBmb3IgQ1N0cmluZyB0byBWZWN0b3IgY2hhbmdl
IGFuZAorICAgICAgICBmb3IgVW5lbmNvZGFibGVIYW5kbGluZy4KKworICAgICAgICAqIGh0bWwv
cGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWV0YUNoYXJzZXRQYXJzZXI6OmNoZWNrRm9yTWV0YUNoYXJzZXQpOiBDYWxsIHRoZSBkZWNvZGUg
ZnVuY3Rpb24KKyAgICAgICAgd2l0aCBhbGwgdGhlIGFyZ3VtZW50cyBzaW5jZSB0aGVyZSBpcyBv
bmx5IG9uZSBkZWNvZGUgZnVuY3Rpb24gbm93LgorCisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQ29udGVu
dFNlY3VyaXR5UG9saWN5U0hBMjU2SGFzaCk6IFVwZGF0ZWQgZm9yIENTdHJpbmcgdG8gVmVjdG9y
CisgICAgICAgIGNoYW5nZSBhbmQgZm9yIFVuZW5jb2RhYmxlSGFuZGxpbmcuCisKKyAgICAgICAg
KiBsb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNyeXB0b2dyYXBoaWNEaWdlc3RGb3JCeXRlcyk6IENoYW5nZWQgYXJndW1lbnQgdHlwZSB0
byBjb25zdCB2b2lkKi4KKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGln
ZXN0Lmg6IERpdHRvLgorCisgICAgICAgICogbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJlc291cmNlRGVjb2Rlcjo6VGV4dFJlc291cmNlRGVj
b2Rlcik6IE1vdmVkIGluaXRpYWxpemF0aW9uIG9mIGRhdGEKKyAgICAgICAgbWVtYmVycyB0byBj
bGFzcyBkZWZpbml0aW9uLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJlc291cmNlRGVjb2Rlcjo6
Y3JlYXRlKTogTW92ZWQgZnVuY3Rpb24gYm9keSBoZXJlIGZyb20gdGhlIGhlYWRlci4KKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRSZXNvdXJjZURlY29kZXI6OnNldEVuY29kaW5nKTogVXNlIGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJlc291cmNl
RGVjb2Rlcjo6c2hvdWxkQXV0b0RldGVjdCBjb25zdCk6IFVwZGF0ZWQgZm9yIG5hbWUgY2hhbmdl
CisgICAgICAgIHRvIG1fcGFyZW50RnJhbWVBdXRvRGV0ZWN0ZWRFbmNvZGluZywgd2hpY2ggb2J2
aWF0ZXMgYSBjb21tZW50LgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJlc291cmNlRGVjb2Rlcjo6
Zmx1c2gpOiBEaXR0by4KKyAgICAgICAgKiBsb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5oOiBN
b3ZlZCBpbml0aWFsaXphdGlvbiBoZXJlIGZyb20gY29uc3RydWN0b3IuCisgICAgICAgIE1vdmVk
IGZ1bmN0aW9uIGJvZGllcyBvdXQgb2YgdGhlIGNsYXNzLiBSZW5hbWVkIG1faGludEVuY29kaW5n
IHRvCisgICAgICAgIG1fcGFyZW50RnJhbWVBdXRvRGV0ZWN0ZWRFbmNvZGluZyBzaW5jZSB0aGF0
IGlzIGEgbW9yZSBhY2N1cmF0ZSBkZXNjcmlwdGlvbi4KKworICAgICAgICAqIGxvYWRlci9hcHBj
YWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHA6IFJlbW92ZWQgaW5jbHVkZSBvZiBTdHJp
bmdFeHRyYXMuaC4KKyAgICAgICAgKiBwYWdlL0ZyYW1lVHJlZS5jcHA6IERpdHRvLgorICAgICAg
ICAqIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBh
Z2VTZXJpYWxpemVyOjpzZXJpYWxpemVGcmFtZSk6IFBhc3MgcmVzdWx0IG9mIGVuY29kZSBkaXJl
Y3RseSB0bworICAgICAgICBTdHJpbmdCdWZmZXI6OmNyZWF0ZSBhbmQgdXBkYXRlIGZvciBVbmVu
Y29kYWJsZUhhbmRsaW5nLgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNlcmlhbGl6ZXI6OnNlcmlh
bGl6ZUNTU1N0eWxlU2hlZXQpOiBEaXR0by4KKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2Vj
dXJpdHlQb2xpY3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5
OjpmaW5kSGFzaE9mQ29udGVudEluUG9saWNpZXMgY29uc3QpOiBEaXR0by4KKworICAgICAgICAq
IHBsYXRmb3JtL0ZpbGVIYW5kbGUuY3BwOiBSZW1vdmVkIGluY2x1ZGUgb2YgU3RyaW5nRXh0cmFz
LmguCisKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUpOiBBZGRlZCBhbiBvdmVybG9hZCB0aGF0IHRha2Vz
IFZlY3Rvcjx1aW50OF90Pi4KKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDogRGl0
dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9VUkxQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VVJMUGFyc2VyOjplbmNvZGVRdWVyeSk6IFVwZGF0ZWQgc2luY2UgZW5jb2RlIHJldHVybnMg
YSBWZWN0b3IgaW5zdGVhZAorICAgICAgICBvZiBhIENTdHJpbmcgbm93IGFuZCBmb3IgVW5lbmNv
ZGFibGVIYW5kbGluZy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2hvdWxkV2FpdEZvckxv
YWRpbmdPZlJlc291cmNlKTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YS9QbGF0Zm9ybUNBTGF5ZXIuY3BwOiBSZW1vdmVkIGluY2x1ZGUgb2YgU3RyaW5nRXh0cmFzLmgu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsRGVs
ZWdhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6
OmhhbmRsZURhdGFVUkwpOiBVcGRhdGVkIGZvciBWZWN0b3IgaW5zdGVhZAorICAgICAgICBvZiBD
U3RyaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6Y3JlYXRlKTogQWRkZWQgbmV3IG92ZXJsb2FkLCBhbmQg
c2ltcGxpZmllZCBzb21lIGV4aXN0aW5nIG9uZXMuCisgICAgICAgIChXZWJDb3JlOjpub3JtYWxp
emVTdHJpbmdEYXRhKTogQ2hhbmdlZCByZXR1cm4gdHlwZSB0byBWZWN0b3I8dWludDhfdD4gYW5k
IHVwZGF0ZWQKKyAgICAgICAgZm9yIFVuZW5jb2RhYmxlSGFuZGxpbmcuCisgICAgICAgIChXZWJD
b3JlOjpGb3JtRGF0YTo6YXBwZW5kTXVsdGlQYXJ0U3RyaW5nVmFsdWUpOiBVcGRhdGVkIGZvciBj
aGFuZ2UgaW4gdHlwZSBvZgorICAgICAgICByZXN1bHQgb2Ygbm9ybWFsaXplU3RyaW5nRGF0YS4K
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmg6IFVwZGF0ZWQgZm9yIHRoZSBh
Ym92ZSBhbmQgdXBkYXRlZCBjb21tZW50cy4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
Rm9ybURhdGFCdWlsZGVyLmNwcDogTWFkZSB0aGlzIGEgbmFtZXNwYWNlIGluc3RlYWQgb2YgYSBj
bGFzcy4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhQnVpbGRlcjo6YXBwZW5kKTogQWRkZWQg
YW4gb3ZlcmxvYWQgZm9yIFZlY3Rvcjx1aW50OF90Pi4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1E
YXRhQnVpbGRlcjo6YXBwZW5kUXVvdGVkKTogUmVuYW1lZCBmcm9tIGFwcGVuZFF1b3RlZFN0cmlu
ZyBhbmQKKyAgICAgICAgY2hhbmdlZCB0aGUgYXJndW1lbnQgdHlwZS4KKyAgICAgICAgKFdlYkNv
cmU6OkZvcm1EYXRhQnVpbGRlcjo6YXBwZW5kRm9ybVVSTEVuY29kZWQpOiBNb3ZlZCBsb2dpYyB1
cCBmcm9tIHRoZQorICAgICAgICBlbmNvZGVTdHJpbmdBc0Zvcm1EYXRhIGZ1bmN0aW9uIGludG8g
YSBuZXcgc2VwYXJhdGUgaGVscGVyLgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFCdWlsZGVy
OjphZGRGaWxlbmFtZVRvTXVsdGlQYXJ0SGVhZGVyKTogVXBkYXRlZCBmb3IgY2hhbmdlIHRvCisg
ICAgICAgIFVuZW5jb2RhYmxlSGFuZGxpbmcuCisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUJ1
aWxkZXI6OmJlZ2luTXVsdGlQYXJ0SGVhZGVyKTogQ2hhbmdlZCBhcmd1bWVudCB0eXBlLgorICAg
ICAgICAoV2ViQ29yZTo6Rm9ybURhdGFCdWlsZGVyOjphZGRLZXlWYWx1ZVBhaXJBc0Zvcm1EYXRh
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmlu
Z0FzRm9ybURhdGEpOiBVcGRhdGVkIHRvIGNhbGwgaGVscGVyLgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAg
ICAgICAqIHBsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmg6IFVzZSBWZWN0b3I8
dWludDhfdD4gaW5zdGVhZCBvZgorICAgICAgICBWZWN0b3I8Y2hhcj4sIGFsc28gdXBkYXRlZCB0
aGUgY29kZSB0aGF0IGNhbGxzIGVuY29kZSBmb3IgdGhlIG5ldyByZXR1cm4gdHlwZQorICAgICAg
ICBhbmQgdXBkYXRlZCBmb3IgY2hhbmdlIHRvIFVuZW5jb2RhYmxlSGFuZGxlci4KKworICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRD
b2RlYzo6Z2V0VW5lbmNvZGFibGVSZXBsYWNlbWVudCk6IFVwZGF0ZWQgc2luY2Ugd2UgYXJlIHVz
aW5nCisgICAgICAgIHN0ZDo6YXJyYXkgbm93LCBzbyB0aGUgb3V0IGFyZ3VtZW50IGlzIGVhc2ll
ciB0byB1bmRlcnN0YW5kLCBhbHNvIHVwZGF0ZWQgZm9yCisgICAgICAgIGNoYW5nZSB0byBVbmVu
Y29kYWJsYUhhbmRsZXIuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuaDogVXNl
IHN0ZDo6YXJyYXkgZm9yIHRoZSBVbmVuY29kYWJsZVJlcGxhY2VtZW50QXJyYXkKKyAgICAgICAg
dHlwZSwgcmVtb3ZlZCB0aGUgb3ZlcmxvYWQgb2YgZGVjb2RlIHNvIHRoZXJlIGlzIG9ubHkgb25l
IGRlY29kZSBmdW5jdGlvbi4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNV
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklDVUNvbnZlcnRlcldyYXBwZXI6On5JQ1VDb252ZXJ0
ZXJXcmFwcGVyKTogRGVsZXRlZC4KKyAgICAgICAgTm90IG5lZWRlZCBhbnkgbW9yZSBzaW5jZSB3
ZSB1c2UgSUNVQ29udmVydGVyUHRyIGluc3RlYWQgbm93LgorICAgICAgICAoV2ViQ29yZTo6Y2Fj
aGVkQ29udmVydGVySUNVKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0lD
VTo6Y3JlYXRlKTogRGVsZXRlZC4gQ2FsbGVycyBqdXN0IHVzZSBtYWtlX3VuaXF1ZQorICAgICAg
ICBkaXJlY3RseSBub3cuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVy
Q29kZWNzKTogUmV3cm90ZSB0byB1c2UgbGFtYmRhcyBpbnN0ZWFkCisgICAgICAgIG9mIGZ1bmN0
aW9ucyB3aXRoIHZvaWQqIHBvaW50ZXJzLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjSUNV
OjpUZXh0Q29kZWNJQ1UpOiBNb3ZlZCBpbml0aWFsaXplcnMgaW50byB0aGUgaGVhZGVyLgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dENvZGVjSUNVOjp+VGV4dENvZGVjSUNVKTogTW92ZWQgdGhlIGJv
ZHkgb2YgcmVsZWFzZUlDVUNvbnZlcnRlcgorICAgICAgICBpbiBoZXJlLiBBbHNvIGdyZWF0bHkg
c2ltcGxpZmllZCBpdCBub3cgdGhhdCBJQ1VDb252ZXJ0ZXJQdHIgaGFuZGxlcyBjbG9zaW5nCisg
ICAgICAgIGl0IGFzIG5lZWRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0lDVTo6cmVs
ZWFzZUlDVUNvbnZlcnRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0
Q29kZWNJQ1U6OmNyZWF0ZUlDVUNvbnZlcnRlciBjb25zdCk6IFJld3JvdGUgdG8gc2ltcGxmeSBu
b3cgdGhhdAorICAgICAgICB3ZSBjYW4gdXNlIElDVUNvbnZlcnRlclB0ci4KKyAgICAgICAgKFdl
YkNvcmU6OkVycm9yQ2FsbGJhY2tTZXR0ZXI6OkVycm9yQ2FsbGJhY2tTZXR0ZXIpOiBUYWtlIGEg
cmVmZXJlbmNlIGluc3RlYWQKKyAgICAgICAgb2YgYSBwb2ludGVyLgorICAgICAgICAoV2ViQ29y
ZTo6RXJyb3JDYWxsYmFja1NldHRlcjo6fkVycm9yQ2FsbGJhY2tTZXR0ZXIpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0lDVTo6ZGVjb2RlKTogVXNlIGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlIGluc3RlYWQgb2YKKyAgICAgICAgc3RyY2FzZWNtcC4KKyAgICAgICAg
KFdlYkNvcmU6OlRleHRDb2RlY0lDVTo6ZW5jb2RlKTogUmV0dXJuIGEgVmVjdG9yIGluc3RlYWQg
b2YgYSBDU3RyaW5nLgorICAgICAgICBUYWtlIGEgU3RyaW5nVmlldyBpbnN0ZWFkIG9mIGEgcG9p
bnRlciBhbmQgbGVuZ3RoLiBTaW1wbGlmaWVkCisgICAgICAgIHRoZSBiYWNrc2xhc2gtYXMtY3Vy
cmVuY3ktc3ltYm9sIGNvZGUgYnkgdXNpbmcgU3RyaW5nOjpyZXBsYWNlLgorICAgICAgICAqIHBs
YXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmg6IFVwZGF0ZWQgZm9yIGFib3ZlLiBGaXhlZCBpbmRl
bnRhdGlvbi4KKyAgICAgICAgQWRkZWQgYSBuZXcgSUNVQ29udmVydGVyUHRyIHR5cGVkZWYgdGhh
dCB1c2VzIHN0ZDo6dW5pcXVlX3B0ciB0byBjbG9zZSB0aGUKKyAgICAgICAgY29udmVydGVyOyBj
b21iaW5lZCB3aXRoIG1vdmUgc2VtYW50aWNzIGl0IHNpbXBsaWZpZXMgdGhpbmdzIHNvIHdlIGRv
bid0IGhhdmUKKyAgICAgICAgdG8gYmUgc28gY2FyZWZ1bCBhYm91dCBjYWxsaW5nIHVjbnZfY2xv
c2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5jcHA6IFJlbmFt
ZWQgdGhlIExhdGluLTEgdG8gVW5pY29kZSB0YWJsZSBmcm9tCisgICAgICAgICJ0YWJsZSIgdG8g
bGF0aW4xQ29udmVyc2lvblRhYmxlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjTGF0aW4x
OjpyZWdpc3RlckNvZGVjcyk6IFVzZSBhIGxhbWJkYS4KKyAgICAgICAgKFdlYkNvcmU6OmVuY29k
ZUNvbXBsZXhXaW5kb3dzTGF0aW4xKTogUmV0dXJuIGEgVmVjdG9yIGluc3RhZCBvZiBDU3RyaW5n
LgorICAgICAgICBBbHNvIHVzZSBTdHJpbmdWaWV3Ojpjb2RlUG9pbnRzIGluc3RlYWQgb2Ygb3Vy
IG93biBVMTZfTkVYVC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0xhdGluMTo6ZW5jb2Rl
KTogTW9yZSBvZiB0aGUgc2FtZS4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xh
dGluMS5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0
L1RleHRDb2RlY1JlcGxhY2VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY1Jl
cGxhY2VtZW50OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVj
UmVwbGFjZW1lbnQ6OlRleHRDb2RlY1JlcGxhY2VtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlRleHRDb2RlY1JlcGxhY2VtZW50OjpyZWdpc3RlckNvZGVjcyk6IFVzZSBhIGxhbWJk
YS4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1JlcGxhY2VtZW50Lmg6IFVwZGF0
ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRG
MTYuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmV3U3RyZWFtaW5nVGV4dERlY29kZXJVVEYxNkxF
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om5ld1N0cmVhbWluZ1RleHREZWNvZGVyVVRG
MTZCRSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNVVEYxNjo6cmVnaXN0
ZXJDb2RlY3MpOiBVc2UgbGFtYmRhcy4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY1VURjE2
OjplbmNvZGUpOiBSZXR1cm4gYSBWZWN0b3IuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0
Q29kZWNVVEYxNi5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS90ZXh0L1RleHRDb2RlY1VURjguY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjVVRG
ODo6cmVnaXN0ZXJDb2RlY3MpOiBVc2UgYSBsYW1iZGEuCisgICAgICAgIChXZWJDb3JlOjpUZXh0
Q29kZWNVVEY4OjplbmNvZGUpOiBSZXR1cm4gYSBWZWN0b3IuCisgICAgICAgICogcGxhdGZvcm0v
dGV4dC9UZXh0Q29kZWNVVEY4Lmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAq
IHBsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6bmV3U3RyZWFtaW5nVGV4dERlY29kZXJVc2VyRGVmaW5lZCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpUZXh0Q29kZWNVc2VyRGVmaW5lZDo6cmVnaXN0ZXJDb2RlY3MpOiBVc2UgYSBs
YW1iZGEuCisgICAgICAgIChXZWJDb3JlOjplbmNvZGVDb21wbGV4VXNlckRlZmluZWQpOiBSZXR1
cm4gYSBWZWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNVc2VyRGVmaW5lZDo6ZW5j
b2RlKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5l
ZC5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1Rl
eHRFbmNvZGluZy5jcHA6IENoYW5nZWQgVGV4dENvZGVjTWFwIHRvIGp1c3QgaG9sZCBhCisgICAg
ICAgIFdURjo6RnVuY3Rpb24gaW5zdGVhZCBvZiBob2xkaW5nIGEgZnVuY3Rpb24gYW5kIGFuIGFk
ZGl0aW9uYWwgZGF0YSBwb2ludGVyLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEVuY29kaW5nOjpU
ZXh0RW5jb2RpbmcpOiBVc2UgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UKKyAgICAgICAg
aW5zdGVhZCBvZiBhIHNwZWNpYWwgaXNSZXBsYWNlbWVudEVuY29kaW5nIGZ1bmN0aW9uLgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dEVuY29kaW5nOjplbmNvZGUgY29uc3QpOiBSZXR1cm4gYSBWZWN0
b3IgaW5zdGVhZCBvZiBhIENTdHJpbmcuCisgICAgICAgIFBhc3MgU3RyaW5nVmlldyBpbnN0ZWFk
IG9mIGEgcG9pbnRlciBhbmQgbGVuZ3RoLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEVu
Y29kaW5nLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRkVG9UZXh0
Q29kZWNNYXApOiBSZW1vdmVkIHRoZSBhZGRpdGlvbmFsRGF0YSBwb2ludGVyIGFuZCB1c2VkCisg
ICAgICAgIFdURk1vdmUgc2luY2UgTmV3VGV4dENvZGVjRnVuY3Rpb24gaXMgbm93IGEgV1RGOjpG
dW5jdGlvbiByYXRoZXIgdGhhbiBhIEMKKyAgICAgICAgZnVuY3Rpb24gcG9pbnRlci4KKyAgICAg
ICAgKFdlYkNvcmU6OmlzUmVwbGFjZW1lbnRFbmNvZGluZyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpuZXdUZXh0Q29kZWMpOiBVc2UgZmluZCBpbnN0ZWFkIG9mIGdldCBub3cgdGhhdCB0
aGUgZnVjbnRpb25zIGluCisgICAgICAgIHRoZSBtYXAgYXJlIFdURjo6RnVuY3Rpb24gYW5kIGNh
bid0IGJlIGNvcGllZC4KKyAgICAgICAgKFdlYkNvcmU6OmR1bXBUZXh0RW5jb2RpbmdOYW1lTWFw
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5
Lmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvd2lu
L1RleHRDb2RlY1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNXaW46OmVuY29k
ZSk6IFVwZGF0ZWQgY29tbWVudC4KKworICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6c2VuZCk6IFVwZGF0ZWQgZm9yIGNo
YW5nZSB0byBVbmVuY29kYWJsZUhhbmRsaW5nLgorCisgICAgICAgICogeG1sL1hTTFRVbmljb2Rl
U29ydC5jcHA6IFJlbW92ZWQgaW5jbHVkZSBvZiBTdHJpbmdFeHRyYXMuaC4KKyAgICAgICAgKiB4
bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNwcDogRGl0dG8uCisgICAgICAgICogeG1sL3Bh
cnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwOiBEaXR0by4KKwogMjAxNy0xMi0wMiAg
WW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IGh0
dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjbGllbnRzLWdldGFsbApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9D
aGFuZ2VMb2cKaW5kZXggOWIyYjEyMzIxYmQ2ZjlmOThlNmVmZTU3ZmY0M2I4MTdmNjliMDViMC4u
NmQ4MWVlZmI0NzFhMmVmNDRjMTlmYmQwMTY2ZGMzMWFmMjE2MGU4NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTctMTItMDIgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgorCisgICAgICAgIE1vZGVybml6ZSBzb21lIGFzcGVjdHMgb2YgdGV4dCBjb2RlY3Ms
IGVsaW1pbmF0ZSBXZWJLaXQgdXNlIG9mIHN0cmNhc2VjbXAKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDAwOQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6IEFkZGVkIFVuZW5jb2RhYmxlSGFuZGxpbmcuaC4KKyAgICAgICAgKiBwYWwvdGV4dC9VbmVu
Y29kYWJsZUhhbmRsaW5nLmg6IE1vdmVkIHRoZSBVbmVuY29kYWJsZUhhbmRsaW5nIGVudW1lcmF0
aW9uCisgICAgICAgIGhlcmUgZnJvbSBUZXh0Q29kZWMuaCBhbmQgY2hhbmdlZCBpdCB0byBhbiBl
bnVtIGNsYXNzLgorCiAyMDE3LTExLTMwICBTdGVwaGFuIFN6YWJvICA8c3RlcGhhbi5zemFib0Bz
b255LmNvbT4KIAogICAgICAgICBNYWtlIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlciBvcHRp
b25hbCBmb3IgbmV0d29yayBwcm9jZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDY0Mzc1MDJiY2RmZDA3YmVhMjM0
NmRhOGU1ZjI0NDFmN2EyNWY1OGQuLmUxZjc0NzQyZDgyMTk0NmU5YTVmYTQ4OGNlYTgzNzY5Yzgx
OTA3ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTctMTItMDIgIERhcmluIEFkbGVy
ICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybml6ZSBzb21lIGFzcGVjdHMgb2Yg
dGV4dCBjb2RlY3MsIGVsaW1pbmF0ZSBXZWJLaXQgdXNlIG9mIHN0cmNhc2VjbXAKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDAwOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVn
aW5zL05ldHNjYXBlL05ldHNjYXBlQnJvd3NlckZ1bmNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
aW5pdGlhbGl6ZVByb3RlY3Rpb25TcGFjZSk6IFVzZSBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZSBpbnN0ZWFkCisgICAgICAgIG9mIHN0cmNhc2VjbXAuCisKIDIwMTctMTItMDIgIFlvdWVu
biBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIEltcGxlbWVudCBodHRwczov
L3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jY2xpZW50cy1nZXRhbGwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0NoYW5nZUxvZwppbmRleCA4ZjhkNTljN2QxYThjMzlmMmQyOGNlZWViZGE4NDE2MDU4OTc5
MDRhLi41YjFlMDBhNmE5NTI2MWNmZGFmODZiNTQ3ZjM2MGYwYzk5MGI4OTVhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTctMTItMDIgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybml6ZSBzb21lIGFzcGVjdHMg
b2YgdGV4dCBjb2RlY3MsIGVsaW1pbmF0ZSBXZWJLaXQgdXNlIG9mIHN0cmNhc2VjbXAKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDAwOQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSGlzdG9yeS9IaXN0
b3J5UHJvcGVydHlMaXN0Lm1tOiBSZW1vdmVkIGluY2x1ZGUgb2YgU3RyaW5nRXh0cmFzLmguCisK
KyAgICAgICAgKiBQbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW06CisgICAgICAg
IChXZWJLaXQ6OmdldEF1dGhlbnRpY2F0aW9uSW5mbyk6IFVzZSBlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZSBpbnN0ZWFkCisgICAgICAgIG9mIHN0cmNhc2VjbXAuCisKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tOgorICAgICAgICAoY29udGFpbnMpOiBEaXR0by4gQWxz
byBtYWRlIHRoaXMgYSB0ZW1wbGF0ZSBzbyBpdCdzIGVhc2llciB0byBjYWxsIG9uIGFuIGFycmF5
LgorICAgICAgICAoY2FjaGVNb2RlbEZvck1haW5CdW5kbGUpOiBUYWtlIGFkdmFudGFnZSBvZiB0
aGUgYWJvdmUgdG8gbWFrZSBpdCBjbGVhbmVyLgorCiAyMDE3LTExLTMwICBTdGVwaGFuIFN6YWJv
ICA8c3RlcGhhbi5zemFib0Bzb255LmNvbT4KIAogICAgICAgICBNYWtlIExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlciBvcHRpb25hbCBmb3IgbmV0d29yayBwcm9jZXNzCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwCmluZGV4IDMxNDZiMThmOGQ1
MmJiZmI1MmY0OTEzYmQxOGRiZDlkY2RlYWMwYzEuLmNiMWI3NTg1YjIyZWMzMTQ3MWY4NGMyZjE1
NjdkNjg1OGIxNjg0OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9BcnJheVByb2ZpbGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
cnJheVByb2ZpbGUuY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgi
CiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4K
LSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50
U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCAxZmIzZTE0M2U5NTE3NzNkYzYxNTM1NGM5ZTZmYzJh
YTVmYTgzZmVlLi4wNmZjMTk0NDdkNDBiOGRmODg0NTIxMDU0NTc1NmE1NWE3ZDdkYzE2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtODMsNyAr
ODMsNiBAQAogI2luY2x1ZGUgPHd0Zi9CYWdUb0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvQ29t
bWFQcmludGVyLmg+CiAjaW5jbHVkZSA8d3RmL1NpbXBsZVN0YXRzLmg+Ci0jaW5jbHVkZSA8d3Rm
L1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1VuaXF1ZWRTdHJpbmdJbXBsLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAppbmRleCAyMzdjMGU3
NTIyNTgyZGQzZTQ3YmEwYzdkODFjYmNiMjZkYmRlYzUxLi5mYmFkNzg3Y2Y0OGU4MGNjODM1MGQy
YjdlMWM0ZGFhODU1NGYyOTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAi
RXhlY3V0YWJsZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRl
ICJWTUlubGluZXMuaCIKLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25m
aWdGaWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmZpZ0ZpbGUuY3Bw
CmluZGV4IGI2MWExMzFjNzZlNmI3ZjI4YjgzN2RiNjU3ZDk1MjVhZDM2NzZlMzYuLjFiMTZjMmU3
NWY4YTRmMTQ1M2YwMmM1NDA0MzBiYTc5NDQ5MTM0OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbmZpZ0ZpbGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbmZpZ0ZpbGUuY3BwCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSA8
c3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvRGF0
YUxvZy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAKICNpZiBIQVZFKFJFR0VYX0gpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCmluZGV4IGIzMGY4ZWVlZDVhZjE4
NWMxZDE1M2E3ZDAyNjk4MGNlNmIyOGNmY2UuLjVhYjAwN2ZjMTdmNjRlOWNiZDI4YzE5YjVmZDcz
OTZlYWNmOWQyZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rh
dGVQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQ
cm90b3R5cGUuY3BwCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8dGltZS5oPgogI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNs
dWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAKICNpZiBIQVZFKExBTkdJTkZPX0gpCiAjaW5jbHVk
ZSA8bGFuZ2luZm8uaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZGV4aW5nVHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGlu
Z1R5cGUuY3BwCmluZGV4IGY3ZDU0NzU0ZDU5M2VhMjI4YTcxMGRlZjI1MjIwN2UzNGZjNTNjYTEu
LjhiNWFiM2M1YmM4MGY4MzJmYTBkYTY0N2VhYmE3NTQ1ZTJhMTc0ZDQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmNwcApAQCAtMjYsOCArMjYsNiBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgogCi0jaW5j
bHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgotCiBuYW1lc3BhY2UgSlNDIHsKIAogSW5kZXhpbmdU
eXBlIGxlYXN0VXBwZXJCb3VuZE9mSW5kZXhpbmdUeXBlcyhJbmRleGluZ1R5cGUgYSwgSW5kZXhp
bmdUeXBlIGIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NK
U1ZhbHVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3Bw
CmluZGV4IGQwMzA0NTIyMGQ1ZTk1MjY3ZWQ5ZjhmN2I5ZDMzNjVhODMxNzlkZDMuLmJhZjRkZmQy
Yjg3OTRkMmI3NTJiZDJlYjUwZDQyMjkxMWUyOGFlZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAi
SlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJOdW1iZXJPYmplY3QuaCIKICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KIAogbmFtZXNw
YWNlIEpTQyB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RGF0ZU1hdGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5j
cHAKaW5kZXggN2U2ZGY0NTdhN2QxMzg0OTQzMDBlOWQ5NmUxMjkyMzBjYTNhZDNiZC4uNmMwNGUz
Y2Q4NjYwYzRlOGUxNjgzMjAwY2RiMjVmNmE0NzY2MDc0ZSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5jcHAKQEAgLTg2LDcgKzg2LDYgQEAKICNpbmNsdWRl
IDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAK
ICNpZiBIQVZFKEVSUk5PX0gpCiAjaW5jbHVkZSA8ZXJybm8uaD4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcApp
bmRleCAyZDQ5ODJkODNmYzBkZDM3NDk3N2VlYjdjZTNhZThmMzE3NWVlMDNjLi5mNDU3ZGNhNDY4
ZWM5NTdhODQzZDhmODFlODcyN2NkODE0OGU5OWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCkBAIC01
Myw3ICs1Myw2IEBACiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYv
SGV4TnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYv
U3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL2R0b2EuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVVRGOC5oPgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAppbmRleCBhZTk3N2I2MjMxOTcyY2Ux
ZDAzOTllNmU5ODA0NDRlZTkyN2UxZWQzLi43Yzk3MjFiMjA0NTY4ODc3NWFiMTc0YjhkNDExMGE4
MjRhOWQ5NzI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcApA
QCAtNDIsNyArNDIsNiBAQAogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8d3Rm
L051bWJlck9mQ29yZXMuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KICNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKQEAgLTcxLDExICs3MCwxMSBA
QCB2b2lkIE9wdGlvbnM6OmVuYWJsZVJlc3RyaWN0ZWRPcHRpb25zKGJvb2wgZW5hYmxlT3JOb3Qp
CiAgICAgCiBzdGF0aWMgYm9vbCBwYXJzZShjb25zdCBjaGFyKiBzdHJpbmcsIGJvb2wmIHZhbHVl
KQogewotICAgIGlmICghc3RyY2FzZWNtcChzdHJpbmcsICJ0cnVlIikgfHwgIXN0cmNhc2VjbXAo
c3RyaW5nLCAieWVzIikgfHwgIXN0cmNtcChzdHJpbmcsICIxIikpIHsKKyAgICBpZiAoZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLCAidHJ1ZSIpIHx8IGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKHN0cmluZywgInllcyIpIHx8ICFzdHJjbXAoc3RyaW5nLCAiMSIpKSB7
CiAgICAgICAgIHZhbHVlID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAg
IGlmICghc3RyY2FzZWNtcChzdHJpbmcsICJmYWxzZSIpIHx8ICFzdHJjYXNlY21wKHN0cmluZywg
Im5vIikgfHwgIXN0cmNtcChzdHJpbmcsICIwIikpIHsKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2Uoc3RyaW5nLCAiZmFsc2UiKSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShzdHJpbmcsICJubyIpIHx8ICFzdHJjbXAoc3RyaW5nLCAiMCIpKSB7CiAgICAgICAg
IHZhbHVlID0gZmFsc2U7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTEyNywxNyAr
MTI2LDE3IEBAIHN0YXRpYyBib29sIHBhcnNlKGNvbnN0IGNoYXIqIHN0cmluZywgY29uc3QgY2hh
ciomIHZhbHVlKQogCiBzdGF0aWMgYm9vbCBwYXJzZShjb25zdCBjaGFyKiBzdHJpbmcsIEdDTG9n
Z2luZzo6TGV2ZWwmIHZhbHVlKQogewotICAgIGlmICghc3RyY2FzZWNtcChzdHJpbmcsICJub25l
IikgfHwgIXN0cmNhc2VjbXAoc3RyaW5nLCAibm8iKSB8fCAhc3RyY2FzZWNtcChzdHJpbmcsICJm
YWxzZSIpIHx8ICFzdHJjbXAoc3RyaW5nLCAiMCIpKSB7CisgICAgaWYgKGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKHN0cmluZywgIm5vbmUiKSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShzdHJpbmcsICJubyIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0
cmluZywgImZhbHNlIikgfHwgIXN0cmNtcChzdHJpbmcsICIwIikpIHsKICAgICAgICAgdmFsdWUg
PSBHQ0xvZ2dpbmc6Ok5vbmU7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlm
ICghc3RyY2FzZWNtcChzdHJpbmcsICJiYXNpYyIpIHx8ICFzdHJjYXNlY21wKHN0cmluZywgInll
cyIpIHx8ICFzdHJjYXNlY21wKHN0cmluZywgInRydWUiKSB8fCAhc3RyY21wKHN0cmluZywgIjEi
KSkgeworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcsICJiYXNp
YyIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmluZywgInllcyIpIHx8IGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmluZywgInRydWUiKSB8fCAhc3RyY21wKHN0
cmluZywgIjEiKSkgewogICAgICAgICB2YWx1ZSA9IEdDTG9nZ2luZzo6QmFzaWM7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlmICghc3RyY2FzZWNtcChzdHJpbmcsICJ2ZXJi
b3NlIikgfHwgIXN0cmNtcChzdHJpbmcsICIyIikpIHsKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2Uoc3RyaW5nLCAidmVyYm9zZSIpIHx8ICFzdHJjbXAoc3RyaW5nLCAiMiIp
KSB7CiAgICAgICAgIHZhbHVlID0gR0NMb2dnaW5nOjpWZXJib3NlOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmNwcCBi
L1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwCmluZGV4IDRjODBjNmI5Mzg2YjIwZWU3MzE3
MmFlMTNhNDdkYzlmYjkzYzU5MzIuLjE1OGNiZWY3NjEyM2Q5M2Q3ZjQxZjJiZmYyMDE2NTZlMjk4
ZThhMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwCkBAIC00NSw3ICs0NSw2IEBACiAjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9TdGFja1RyYWNlLmg+CiAjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNTI0LDcgKzUyMyw3IEBA
IFdURkxvZ0NoYW5uZWwqIFdURkxvZ0NoYW5uZWxCeU5hbWUoV1RGTG9nQ2hhbm5lbCogY2hhbm5l
bHNbXSwgc2l6ZV90IGNvdW50LCBjb25zCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
b3VudDsgKytpKSB7CiAgICAgICAgIFdURkxvZ0NoYW5uZWwqIGNoYW5uZWwgPSBjaGFubmVsc1tp
XTsKLSAgICAgICAgaWYgKCFzdHJjYXNlY21wKG5hbWUsIGNoYW5uZWwtPm5hbWUpKQorICAgICAg
ICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBjaGFubmVsLT5uYW1lKSkKICAgICAg
ICAgICAgIHJldHVybiBjaGFubmVsOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvRGF0ZU1hdGguY3BwIGIvU291cmNlL1dURi93dGYvRGF0ZU1hdGguY3BwCmluZGV4IDU3ZTI0
ZGRmNGVkODMyNzNiMGJiNjRlMDAyYTA0MWFhMWNlYWFlNjUuLjY0MjBiNWQ4YTA3MDg3NDg4NDg2
YzBjYzliMWFjZjExOTE4NThlMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0RhdGVNYXRo
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9EYXRlTWF0aC5jcHAKQEAgLTc3LDcgKzc3LDYgQEAK
ICNpbmNsdWRlICJDdXJyZW50VGltZS5oIgogI2luY2x1ZGUgIk1hdGhFeHRyYXMuaCIKICNpbmNs
dWRlICJTdGRMaWJFeHRyYXMuaCIKLSNpbmNsdWRlICJTdHJpbmdFeHRyYXMuaCIKIAogI2luY2x1
ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxsaW1pdHMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL01ENS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9NRDUuY3BwCmluZGV4IDU1MDgwZjIxNWNj
M2Q4YWNjN2VkN2U2YWZjNTA5NWQzMzdhMGM5ZDcuLmI2NmRhMTg5MmIwYzNjMTg1ZDZmZDg2MTUw
ZDQ3OGIwNjBkM2YxNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL01ENS5jcHAKKysrIGIv
U291cmNlL1dURi93dGYvTUQ1LmNwcApAQCAtNTEsMTAgKzUxLDYgQEAKICNpbmNsdWRlICJNRDUu
aCIKIAogI2luY2x1ZGUgIkFzc2VydGlvbnMuaCIKLSNpZm5kZWYgTkRFQlVHCi0jaW5jbHVkZSAi
U3RyaW5nRXh0cmFzLmgiCi0jaW5jbHVkZSAidGV4dC9DU3RyaW5nLmgiCi0jZW5kaWYKICNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvU0hBMS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9TSEExLmNwcAppbmRleCAy
Zjg0YTFlOTUzOGI4NDRkOTMyMTM2YmNlZmU3MjQyNmMxMGVjYTRkLi44MWVhNDJjMzBiZDkxZjM2
MjBjNWEwYjc5Y2IzOWRlOGU5ZDU1MThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9TSEEx
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9TSEExLmNwcApAQCAtMzMsOCArMzMsNiBAQAogI2lu
Y2x1ZGUgIlNIQTEuaCIKIAogI2luY2x1ZGUgIkFzc2VydGlvbnMuaCIKLQotI2luY2x1ZGUgIlN0
cmluZ0V4dHJhcy5oIgogI2luY2x1ZGUgInRleHQvQ1N0cmluZy5oIgogCiBuYW1lc3BhY2UgV1RG
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1N0cmluZ0V4dHJhcy5oIGIvU291cmNlL1dU
Ri93dGYvU3RyaW5nRXh0cmFzLmgKaW5kZXggNjc5N2QyY2UxMWFkMWI4YTU0YTg3OTdlMDE0MmVh
MzkzNjA5NzAxZC4uYWYwNWQyY2QxMjhmOTUxM2I4NjFhMDAwYjc0NjE3MDQ0OTY0ZmNjZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3RyaW5nRXh0cmFzLmgKKysrIGIvU291cmNlL1dURi93
dGYvU3RyaW5nRXh0cmFzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAxNSBFbGVjdHJvbmljIEFydHMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKQEAgLTI0LDMzICsyNCwxMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8K
IAotI2lmbmRlZiBXVEZfU3RyaW5nRXh0cmFzX2gKLSNkZWZpbmUgV1RGX1N0cmluZ0V4dHJhc19o
CisjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+
CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKLSNpZiBIQVZFKFNUUklOR1NfSCkgCi0jaW5jbHVkZSA8
c3RyaW5ncy5oPiAKLSNlbmRpZiAKLQotI2lmIENPTVBJTEVSKE1TVkMpCi0KLS8vIEZJWE1FOiBX
ZSBzaG91bGQgc3RvcCB1c2luZyB0aGVzZSBlbnRpcmVseSBhbmQgdXNlIHN1aXRhYmxlIHZlcnNp
b25zIG9mIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UgaW5zdGVhZC4KLQotaW5saW5lIGludCBzdHJu
Y2FzZWNtcChjb25zdCBjaGFyKiBzMSwgY29uc3QgY2hhciogczIsIHNpemVfdCBsZW4pCi17Ci0g
ICAgcmV0dXJuIF9zdHJuaWNtcChzMSwgczIsIGxlbik7Ci19Ci0KLWlubGluZSBpbnQgc3RyY2Fz
ZWNtcChjb25zdCBjaGFyKiBzMSwgY29uc3QgY2hhciogczIpCi17Ci0gICAgcmV0dXJuIF9zdHJp
Y21wKHMxLCBzMik7Ci19Ci0KLSNlbmRpZgotCiAjaWYgIUhBVkUoU1RSTlNUUikKIAogaW5saW5l
IGNoYXIqIHN0cm5zdHIoY29uc3QgY2hhciogYnVmZmVyLCBjb25zdCBjaGFyKiB0YXJnZXQsIHNp
emVfdCBidWZmZXJMZW5ndGgpCkBAIC02Niw1ICs0MywzIEBAIGlubGluZSBjaGFyKiBzdHJuc3Ry
KGNvbnN0IGNoYXIqIGJ1ZmZlciwgY29uc3QgY2hhciogdGFyZ2V0LCBzaXplX3QgYnVmZmVyTGVu
Z3RoCiB9CiAKICNlbmRpZgotCi0jZW5kaWYgLy8gV1RGX1N0cmluZ0V4dHJhc19oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9TdHJpbmdQcmludFN0cmVhbS5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi9TdHJpbmdQcmludFN0cmVhbS5jcHAKaW5kZXggNmE4ODgxYzViYmQwYmIzYTE5MWE2NDI5Njg2
OTM5NWZkY2YxMzA1Yy4uMzNmZDVhYmJiZTU4ZDg1Mzk4MmIzMmU3YTVlOGExYTY1ZjY5MTcxYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3RyaW5nUHJpbnRTdHJlYW0uY3BwCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL1N0cmluZ1ByaW50U3RyZWFtLmNwcApAQCAtMjksNyArMjksNiBAQAogI2lu
Y2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RN
YWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXVEYg
ewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAKaW5kZXggMmFlNWRlMjIyY2Q2YzM5NDFjZTc1NmJiNzNk
Y2IxYWRiMGNiMWY0NS4uODA0ZmUxZjQxMjk0YTliMTMyNzE1NTk5MzdkYjA5ZWE2ZmQwMzg3ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCisrKyBiL1NvdXJjZS9X
VEYvd3RmL3RleHQvQmFzZTY0LmNwcApAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgIkJhc2U2
NC5oIgogCiAjaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvTGluZUVuZGluZy5jcHAgYi9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L0xpbmVFbmRpbmcuY3BwCmluZGV4IGU4MTlhZWY1NDllMDFhY2ExODg0MmUyNmRk
NGI1N2M5NjM3MTNjNjQuLmEzNjM3MWJiNmQ2NmZmYzA4NmYxMWUxNWI0NGZlMmE3MDVmNzVkYmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvTGluZUVuZGluZy5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvdGV4dC9MaW5lRW5kaW5nLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDgsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMiwxOTUgKzMyLDgwIEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTGluZUVuZGluZy5oIgogCi0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAotbmFtZXNwYWNlIHsKLQotY2xhc3MgT3V0cHV0QnVmZmVyIHsK
LXB1YmxpYzoKLSAgICB2aXJ0dWFsIHVpbnQ4X3QqIGFsbG9jYXRlKHNpemVfdCkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBjb3B5KGNvbnN0IENTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB+T3V0
cHV0QnVmZmVyKCkgeyB9Ci19OwotCi1jbGFzcyBDU3RyaW5nQnVmZmVyIDogcHVibGljIE91dHB1
dEJ1ZmZlciB7Ci1wdWJsaWM6Ci0gICAgQ1N0cmluZ0J1ZmZlcihDU3RyaW5nJiBidWZmZXIpCi0g
ICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQotICAgIHsKLSAgICB9Ci0gICAgdmlydHVhbCB+Q1N0
cmluZ0J1ZmZlcigpIHsgfQotCi0gICAgdWludDhfdCogYWxsb2NhdGUoc2l6ZV90IHNpemUpIG92
ZXJyaWRlCi0gICAgewotICAgICAgICBjaGFyKiBwdHI7Ci0gICAgICAgIG1fYnVmZmVyID0gQ1N0
cmluZzo6bmV3VW5pbml0aWFsaXplZChzaXplLCBwdHIpOwotICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDx1aW50OF90Kj4ocHRyKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvcHkoY29uc3Qg
Q1N0cmluZyYgc291cmNlKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgbV9idWZmZXIgPSBzb3Vy
Y2U7Ci0gICAgfQotCi0gICAgY29uc3QgQ1N0cmluZyYgYnVmZmVyKCkgY29uc3QgeyByZXR1cm4g
bV9idWZmZXI7IH0KLQotcHJpdmF0ZToKLSAgICBDU3RyaW5nIG1fYnVmZmVyOwotfTsKLQotI2lm
IE9TKFdJTkRPV1MpCi1jbGFzcyBWZWN0b3JDaGFyQXBwZW5kQnVmZmVyIDogcHVibGljIE91dHB1
dEJ1ZmZlciB7Ci1wdWJsaWM6Ci0gICAgVmVjdG9yQ2hhckFwcGVuZEJ1ZmZlcihWZWN0b3I8dWlu
dDhfdD4mIGJ1ZmZlcikKLSAgICAgICAgOiBtX2J1ZmZlcihidWZmZXIpCi0gICAgewotICAgIH0K
LSAgICB2aXJ0dWFsIH5WZWN0b3JDaGFyQXBwZW5kQnVmZmVyKCkgeyB9Ci0KLSAgICB1aW50OF90
KiBhbGxvY2F0ZShzaXplX3Qgc2l6ZSkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIHNpemVfdCBv
bGRTaXplID0gbV9idWZmZXIuc2l6ZSgpOwotICAgICAgICBtX2J1ZmZlci5ncm93KG9sZFNpemUg
KyBzaXplKTsKLSAgICAgICAgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKSArIG9sZFNpemU7Ci0gICAg
fQotCi0gICAgdm9pZCBjb3B5KGNvbnN0IENTdHJpbmcmIHNvdXJjZSkgb3ZlcnJpZGUKLSAgICB7
Ci0gICAgICAgIG1fYnVmZmVyLmFwcGVuZChzb3VyY2UuZGF0YSgpLCBzb3VyY2UubGVuZ3RoKCkp
OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBWZWN0b3I8dWludDhfdD4mIG1fYnVmZmVyOwotfTsK
LSNlbmRpZgorbmFtZXNwYWNlIFdURiB7CiAKLXZvaWQgaW50ZXJuYWxOb3JtYWxpemVMaW5lRW5k
aW5nc1RvQ1JMRihjb25zdCBDU3RyaW5nJiBmcm9tLCBPdXRwdXRCdWZmZXImIGJ1ZmZlcikKK1Zl
Y3Rvcjx1aW50OF90PiBub3JtYWxpemVMaW5lRW5kaW5nc1RvTEYoVmVjdG9yPHVpbnQ4X3Q+JiYg
dmVjdG9yKQogewotICAgIGlmICghZnJvbS5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IC8vIENvbXB1dGUgdGhlIG5ldyBsZW5ndGguCi0gICAgc2l6ZV90IG5ld0xlbiA9IDA7Ci0gICAg
Y29uc3QgY2hhciogcCA9IGZyb20uZGF0YSgpOwotICAgIHdoaWxlIChwIDwgZnJvbS5kYXRhKCkg
KyBmcm9tLmxlbmd0aCgpKSB7Ci0gICAgICAgIGNoYXIgYyA9ICpwKys7Ci0gICAgICAgIGlmIChj
ID09ICdccicpIHsKLSAgICAgICAgICAgIC8vIFNhZmUgdG8gbG9vayBhaGVhZCBiZWNhdXNlIG9m
IHRyYWlsaW5nICdcMCcuCi0gICAgICAgICAgICBpZiAoKnAgIT0gJ1xuJykgewotICAgICAgICAg
ICAgICAgIC8vIFR1cm4gQ1IgaW50byBDUkxGLgotICAgICAgICAgICAgICAgIG5ld0xlbiArPSAy
OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ1xuJykgewotICAgICAg
ICAgICAgLy8gVHVybiBMRiBpbnRvIENSTEYuCi0gICAgICAgICAgICBuZXdMZW4gKz0gMjsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIExlYXZlIG90aGVyIGNoYXJhY3RlcnMgYWxv
bmUuCi0gICAgICAgICAgICBuZXdMZW4gKz0gMTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAo
bmV3TGVuIDwgZnJvbS5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG5ld0xl
biA9PSBmcm9tLmxlbmd0aCgpKSB7Ci0gICAgICAgIGJ1ZmZlci5jb3B5KGZyb20pOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgcCA9IGZyb20uZGF0YSgpOwotICAgIHVpbnQ4X3QqIHEg
PSBidWZmZXIuYWxsb2NhdGUobmV3TGVuKTsKLQotICAgIC8vIE1ha2UgYSBjb3B5IG9mIHRoZSBz
dHJpbmcuCi0gICAgd2hpbGUgKHAgPCBmcm9tLmRhdGEoKSArIGZyb20ubGVuZ3RoKCkpIHsKLSAg
ICAgICAgY2hhciBjID0gKnArKzsKLSAgICAgICAgaWYgKGMgPT0gJ1xyJykgewotICAgICAgICAg
ICAgLy8gU2FmZSB0byBsb29rIGFoZWFkIGJlY2F1c2Ugb2YgdHJhaWxpbmcgJ1wwJy4KLSAgICAg
ICAgICAgIGlmICgqcCAhPSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgLy8gVHVybiBDUiBpbnRv
IENSTEYuCi0gICAgICAgICAgICAgICAgKnErKyA9ICdccic7Ci0gICAgICAgICAgICAgICAgKnEr
KyA9ICdcbic7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnXG4nKSB7
Ci0gICAgICAgICAgICAvLyBUdXJuIExGIGludG8gQ1JMRi4KLSAgICAgICAgICAgICpxKysgPSAn
XHInOworICAgIGF1dG8gcSA9IHZlY3Rvci5kYXRhKCk7CisgICAgZm9yIChhdXRvIHAgPSB2ZWN0
b3IuZGF0YSgpLCBlbmQgPSBwICsgdmVjdG9yLnNpemUoKTsgcCAhPSBlbmQ7ICkgeworICAgICAg
ICBhdXRvIGNoYXJhY3RlciA9ICpwKys7CisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJ1xyJykg
eworICAgICAgICAgICAgLy8gVHVybiBDUkxGIGFuZCBDUiBpbnRvIExGLgorICAgICAgICAgICAg
aWYgKHAgIT0gZW5kICYmICpwID09ICdcbicpCisgICAgICAgICAgICAgICAgKytwOwogICAgICAg
ICAgICAgKnErKyA9ICdcbic7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBMZWF2
ZSBvdGhlciBjaGFyYWN0ZXJzIGFsb25lLgotICAgICAgICAgICAgKnErKyA9IGM7CisgICAgICAg
ICAgICAqcSsrID0gY2hhcmFjdGVyOwogICAgICAgICB9CiAgICAgfQorICAgIHZlY3Rvci5zaHJp
bmsocSAtIHZlY3Rvci5kYXRhKCkpOworICAgIHJldHVybiBXVEZNb3ZlKHZlY3Rvcik7CiB9CiAK
LX07Ci0KLW5hbWVzcGFjZSBXVEYgewotCi0vLyBOb3JtYWxpemUgYWxsIGxpbmUtZW5kaW5ncyB0
byBDUiBvciBMRi4KLXN0YXRpYyB2b2lkIG5vcm1hbGl6ZVRvQ1JPckxGKGNvbnN0IENTdHJpbmcm
IGZyb20sIFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0LCBib29sIHRvQ1IpCitWZWN0b3I8dWludDhf
dD4gbm9ybWFsaXplTGluZUVuZGluZ3NUb0NSTEYoVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlKQog
ewotICAgIC8vIENvbXB1dGUgdGhlIG5ldyBsZW5ndGguCi0gICAgc2l6ZV90IG5ld0xlbiA9IDA7
Ci0gICAgYm9vbCBuZWVkRml4ID0gZmFsc2U7Ci0gICAgY29uc3QgY2hhciogcCA9IGZyb20uZGF0
YSgpOwotICAgIGNoYXIgZnJvbUVuZGluZ0NoYXIgPSB0b0NSID8gJ1xuJyA6ICdccic7Ci0gICAg
Y2hhciB0b0VuZGluZ0NoYXIgPSB0b0NSID8gJ1xyJyA6ICdcbic7Ci0gICAgd2hpbGUgKHAgPCBm
cm9tLmRhdGEoKSArIGZyb20ubGVuZ3RoKCkpIHsKLSAgICAgICAgY2hhciBjID0gKnArKzsKLSAg
ICAgICAgaWYgKGMgPT0gJ1xyJyAmJiAqcCA9PSAnXG4nKSB7Ci0gICAgICAgICAgICAvLyBUdXJu
IENSTEYgaW50byBDUiBvciBMRi4KLSAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgIG5lZWRG
aXggPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKGMgPT0gZnJvbUVuZGluZ0NoYXIpIHsKLSAg
ICAgICAgICAgIC8vIFR1cm4gQ1IvTEYgaW50byBMRi9DUi4KLSAgICAgICAgICAgIG5lZWRGaXgg
PSB0cnVlOworICAgIHNpemVfdCByZXN1bHRMZW5ndGggPSAwOworICAgIGZvciAoYXV0byBwID0g
c291cmNlLmRhdGEoKSwgZW5kID0gcCArIHNvdXJjZS5zaXplKCk7IHAgIT0gZW5kOyApIHsKKyAg
ICAgICAgYXV0byBjaGFyYWN0ZXIgPSAqcCsrOworICAgICAgICBpZiAoY2hhcmFjdGVyID09ICdc
cicpIHsKKyAgICAgICAgICAgIC8vIFR1cm4gQ1Igb3IgQ1JMRiBpbnRvIENSTEY7CisgICAgICAg
ICAgICBpZiAocCAhPSBlbmQgJiYgKnAgPT0gJ1xuJykKKyAgICAgICAgICAgICAgICArK3A7Cisg
ICAgICAgICAgICByZXN1bHRMZW5ndGggKz0gMjsKKyAgICAgICAgfSBlbHNlIGlmIChjaGFyYWN0
ZXIgPT0gJ1xuJykgeworICAgICAgICAgICAgLy8gVHVybiBMRiBpbnRvIENSTEYuCisgICAgICAg
ICAgICByZXN1bHRMZW5ndGggKz0gMjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IExlYXZlIG90aGVyIGNoYXJhY3RlcnMgYWxvbmUuCisgICAgICAgICAgICByZXN1bHRMZW5ndGgg
Kz0gMTsKICAgICAgICAgfQotICAgICAgICBuZXdMZW4gKz0gMTsKICAgICB9CiAKLSAgICAvLyBH
cm93IHRoZSByZXN1bHQgYnVmZmVyLgotICAgIHAgPSBmcm9tLmRhdGEoKTsKLSAgICBzaXplX3Qg
b2xkUmVzdWx0U2l6ZSA9IHJlc3VsdC5zaXplKCk7Ci0gICAgcmVzdWx0Lmdyb3cob2xkUmVzdWx0
U2l6ZSArIG5ld0xlbik7Ci0gICAgdWludDhfdCogcSA9IHJlc3VsdC5kYXRhKCkgKyBvbGRSZXN1
bHRTaXplOwotCi0gICAgLy8gSWYgbm8gbmVlZCB0byBmaXggdGhlIHN0cmluZywganVzdCBjb3B5
IHRoZSBzdHJpbmcgb3Zlci4KLSAgICBpZiAoIW5lZWRGaXgpIHsKLSAgICAgICAgbWVtY3B5KHEs
IHAsIGZyb20ubGVuZ3RoKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gTWFr
ZSBhIGNvcHkgb2YgdGhlIHN0cmluZy4KLSAgICB3aGlsZSAocCA8IGZyb20uZGF0YSgpICsgZnJv
bS5sZW5ndGgoKSkgewotICAgICAgICBjaGFyIGMgPSAqcCsrOwotICAgICAgICBpZiAoYyA9PSAn
XHInICYmICpwID09ICdcbicpIHsKLSAgICAgICAgICAgIC8vIFR1cm4gQ1JMRiBvciBDUiBpbnRv
IENSIG9yIExGLgotICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgKnErKyA9IHRvRW5kaW5n
Q2hhcjsKLSAgICAgICAgfSBlbHNlIGlmIChjID09IGZyb21FbmRpbmdDaGFyKSB7Ci0gICAgICAg
ICAgICAvLyBUdXJuIENSL0xGIGludG8gTEYvQ1IuCi0gICAgICAgICAgICAqcSsrID0gdG9FbmRp
bmdDaGFyOworICAgIGlmIChyZXN1bHRMZW5ndGggPT0gc291cmNlLnNpemUoKSkKKyAgICAgICAg
cmV0dXJuIFdURk1vdmUoc291cmNlKTsKKworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQocmVz
dWx0TGVuZ3RoKTsKKyAgICBhdXRvIHEgPSByZXN1bHQuZGF0YSgpOworICAgIGZvciAoYXV0byBw
ID0gc291cmNlLmRhdGEoKSwgZW5kID0gcCArIHNvdXJjZS5zaXplKCk7IHAgIT0gZW5kOyApIHsK
KyAgICAgICAgYXV0byBjaGFyYWN0ZXIgPSAqcCsrOworICAgICAgICBpZiAoY2hhcmFjdGVyID09
ICdccicpIHsKKyAgICAgICAgICAgIC8vIFR1cm4gQ1Igb3IgQ1JMRiBpbnRvIENSTEY7CisgICAg
ICAgICAgICBpZiAocCAhPSBlbmQgJiYgKnAgPT0gJ1xuJykKKyAgICAgICAgICAgICAgICArK3A7
CisgICAgICAgICAgICAqcSsrID0gJ1xyJzsKKyAgICAgICAgICAgICpxKysgPSAnXG4nOworICAg
ICAgICB9IGVsc2UgaWYgKGNoYXJhY3RlciA9PSAnXG4nKSB7CisgICAgICAgICAgICAvLyBUdXJu
IExGIGludG8gQ1JMRi4KKyAgICAgICAgICAgICpxKysgPSAnXHInOworICAgICAgICAgICAgKnEr
KyA9ICdcbic7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBMZWF2ZSBvdGhlciBj
aGFyYWN0ZXJzIGFsb25lLgotICAgICAgICAgICAgKnErKyA9IGM7CisgICAgICAgICAgICAqcSsr
ID0gY2hhcmFjdGVyOwogICAgICAgICB9CiAgICAgfQorICAgIEFTU0VSVChxID09IHJlc3VsdC5k
YXRhKCkgKyByZXN1bHRMZW5ndGgpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUNTdHJpbmcg
bm9ybWFsaXplTGluZUVuZGluZ3NUb0NSTEYoY29uc3QgQ1N0cmluZyYgZnJvbSkKLXsKLSAgICBD
U3RyaW5nIHJlc3VsdDsKLSAgICA6OkNTdHJpbmdCdWZmZXIgYnVmZmVyKHJlc3VsdCk7Ci0gICAg
aW50ZXJuYWxOb3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JMRihmcm9tLCBidWZmZXIpOwotICAgIHJl
dHVybiBidWZmZXIuYnVmZmVyKCk7Ci19Ci0KLXZvaWQgbm9ybWFsaXplQW5kQXBwZW5kTGluZUVu
ZGluZ3NUb05hdGl2ZShjb25zdCBDU3RyaW5nJiBmcm9tLCBWZWN0b3I8dWludDhfdD4mIHJlc3Vs
dCkKK1ZlY3Rvcjx1aW50OF90PiBub3JtYWxpemVMaW5lRW5kaW5nc1RvTmF0aXZlKFZlY3Rvcjx1
aW50OF90PiYmIGZyb20pCiB7CiAjaWYgT1MoV0lORE9XUykKLSAgICBWZWN0b3JDaGFyQXBwZW5k
QnVmZmVyIGJ1ZmZlcihyZXN1bHQpOwotICAgIGludGVybmFsTm9ybWFsaXplTGluZUVuZGluZ3NU
b0NSTEYoZnJvbSwgYnVmZmVyKTsKKyAgICByZXR1cm4gbm9ybWFsaXplTGluZUVuZGluZ3NUb0NS
TEYoV1RGTW92ZShmcm9tKSk7CiAjZWxzZQotICAgIG5vcm1hbGl6ZVRvQ1JPckxGKGZyb20sIHJl
c3VsdCwgZmFsc2UpOworICAgIHJldHVybiBub3JtYWxpemVMaW5lRW5kaW5nc1RvTEYoV1RGTW92
ZShmcm9tKSk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9M
aW5lRW5kaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0xpbmVFbmRpbmcuaAppbmRleCA1MWFm
MDQ1MjEzOTRiNDM3YWM2ZDMzYzc2Zjc0YjQ2MzExNWFhZTE5Li44NzAwYTEzNzJhYjhiNGZkYTcx
MDZjZjk4ZWM2MTNmYzkxOThmMDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0xp
bmVFbmRpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0xpbmVFbmRpbmcuaApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDgsIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMiwx
OCArMzIsMTggQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCi0vLyBOb3JtYWxpemUg
YWxsIGxpbmUtZW5kaW5ncyBpbiB0aGUgZ2l2ZW4gc3RyaW5nIHRvIENSTEYuCi1XVEZfRVhQT1JU
IENTdHJpbmcgbm9ybWFsaXplTGluZUVuZGluZ3NUb0NSTEYoY29uc3QgQ1N0cmluZyYgZnJvbSk7
CisvLyBOb3JtYWxpemUgYWxsIGxpbmUtZW5kaW5ncyBpbiB0aGUgZ2l2ZW4gc3RyaW5nLgorV1RG
X0VYUE9SVCBWZWN0b3I8dWludDhfdD4gbm9ybWFsaXplTGluZUVuZGluZ3NUb0xGKFZlY3Rvcjx1
aW50OF90PiYmKTsKK1dURl9FWFBPUlQgVmVjdG9yPHVpbnQ4X3Q+IG5vcm1hbGl6ZUxpbmVFbmRp
bmdzVG9DUkxGKFZlY3Rvcjx1aW50OF90PiYmKTsKIAotLy8gTm9ybWFsaXplIGFsbCBsaW5lLWVu
ZGluZ3MgaW4gdGhlIGdpdmVuIHN0cmluZyB0byB0aGUgbmF0aXZlIGxpbmUtZW5kaW5ncyBhbmQg
YXBwZW5kIHRoZSByZXN1bHQgdG8gdGhlIGdpdmVuIGJ1ZmZlci4KLS8vIChOb3JtYWxpemUgdG8g
Q1JMRiBvbiBXaW5kb3dzIGFuZCBub3JtYWxpemUgdG8gTEYgb24gYWxsIG90aGVyIHBsYXRmb3Jt
cy4pCi1XVEZfRVhQT1JUIHZvaWQgbm9ybWFsaXplQW5kQXBwZW5kTGluZUVuZGluZ3NUb05hdGl2
ZShjb25zdCBDU3RyaW5nJiBmcm9tLCBWZWN0b3I8dWludDhfdD4mIHJlc3VsdCk7CisvLyBOb3Jt
YWxpemUgYWxsIGxpbmUtZW5kaW5ncyB0byBDUkxGIG9uIFdpbmRvd3MsIHRvIExGIG9uIGFsbCBv
dGhlciBwbGF0Zm9ybXMuCitXVEZfRVhQT1JUIFZlY3Rvcjx1aW50OF90PiBub3JtYWxpemVMaW5l
RW5kaW5nc1RvTmF0aXZlKFZlY3Rvcjx1aW50OF90PiYmKTsKIAogfSAvLyBuYW1lc3BhY2UgV1RG
CiAKIHVzaW5nIFdURjo6bm9ybWFsaXplTGluZUVuZGluZ3NUb0NSTEY7Ci11c2luZyBXVEY6Om5v
cm1hbGl6ZUFuZEFwcGVuZExpbmVFbmRpbmdzVG9OYXRpdmU7Cit1c2luZyBXVEY6Om5vcm1hbGl6
ZUxpbmVFbmRpbmdzVG9MRjsKK3VzaW5nIFdURjo6bm9ybWFsaXplTGluZUVuZGluZ3NUb05hdGl2
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQ29tbW9uLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbW1vbi5oCmluZGV4IGQyYzhkMDY0ZWM0MmRjNDUzZWQy
M2ZhNzk0MjM1ZWYxZDYwMThlNzQuLjVhNDlmOGM1NWEyNjY2MTYwYTRmYzc3ZDAzNzM5YzNlNGRi
ODE0NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQ29tbW9uLmgKKysr
IGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb21tb24uaApAQCAtNDUsNiArNDUsOSBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB1bnNpZ25lZCBsb3dlcmNhc2VMZXR0ZXJz
TGVuZ3RoPiBib29sIGVxdWFsTGV0dAogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdDbGFzcywg
dW5zaWduZWQgbGVuZ3RoPiBib29sIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlQ29tbW9u
KGNvbnN0IFN0cmluZ0NsYXNzJiwgY29uc3QgY2hhciAoJmxvd2VyY2FzZUxldHRlcnMpW2xlbmd0
aF0pOwogCitib29sIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgY2hhciosIGNvbnN0IGNo
YXIqKTsKK3RlbXBsYXRlPHVuc2lnbmVkIGxvd2VyY2FzZUxldHRlcnNMZW5ndGg+IGJvb2wgZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgY2hhciosIGNvbnN0IGNoYXIgKCZsb3dl
cmNhc2VMZXR0ZXJzKVtsb3dlcmNhc2VMZXR0ZXJzTGVuZ3RoXSk7CisKIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CiBpbmxpbmUgVCBsb2FkVW5hbGlnbmVkKGNvbnN0IGNoYXIqIHMpCiB7CkBAIC02NTIs
NiArNjU1LDE4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ0NsYXNzLCB1bnNpZ25lZCBsZW5n
dGg+IGlubGluZSBib29sIHN0YXJ0c1dpdGhMZXR0ZXJzSWduCiAgICAgcmV0dXJuIHN0YXJ0c1dp
dGhMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2VDb21tb25XaXRob3V0TGVuZ3RoKHN0cmluZywgcG9p
bnRlcik7CiB9CiAKK2lubGluZSBib29sIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgY2hh
ciogYSwgY29uc3QgY2hhciogYikKK3sKKyAgICBhdXRvIGxlbmd0aCA9IHN0cmxlbihhKTsKKyAg
ICByZXR1cm4gbGVuZ3RoID09IHN0cmxlbihiKSAmJiBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGEs
IGIsIGxlbmd0aCk7Cit9CisKK3RlbXBsYXRlPHVuc2lnbmVkIGxvd2VyY2FzZUxldHRlcnNMZW5n
dGg+IGlubGluZSBib29sIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IGNoYXIq
IHN0cmluZywgY29uc3QgY2hhciAoJmxvd2VyY2FzZUxldHRlcnMpW2xvd2VyY2FzZUxldHRlcnNM
ZW5ndGhdKQoreworICAgIGF1dG8gbGVuZ3RoID0gc3RybGVuKGxvd2VyY2FzZUxldHRlcnMpOwor
ICAgIHJldHVybiBzdHJsZW4oc3RyaW5nKSA9PSBsZW5ndGggJiYgZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2Uoc3RyaW5nLCBsb3dlcmNhc2VMZXR0ZXJzLCBsZW5ndGgpOworfQorCiB9CiAK
IHVzaW5nIFdURjo6ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL3RleHQvVGV4dFN0cmVhbS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1RleHRTdHJl
YW0uY3BwCmluZGV4IGMyZjJlZjI3NTY4OGVjNGJmZWQzM2QzYWE5ZWJjYTkzNTU2YjU2YzMuLmFh
ZjYxOTRhYmZlNThlNWEzNGEwMGZjZDgxMGY5ZjM5NzZjOGIyNDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL3RleHQvVGV4dFN0cmVhbS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9U
ZXh0U3RyZWFtLmNwcApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIK
IAogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcCBiL1NvdXJjZS9X
VEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAppbmRleCA3MDg1MjZhYTlhNmRmODgyNTgwZWQxN2I4
ODQxNmUzYjczMmVhNDhjLi43MjczM2ZlYWE1MGQwN2YzZTU5MWUyNzFkNWM4NzlkZWUwYWQyOGI0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvZHRvYS5oPgogI2luY2x1
ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi91bmljb2RlL2ljdS9Db2xsYXRvcklDVS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi91bmljb2Rl
L2ljdS9Db2xsYXRvcklDVS5jcHAKaW5kZXggMjZhNGQ4Mzg2YWJmZmE5MDVkZTFhZTgxODg3ZTM1
NWMyMjk0YjQ5OS4uZjVlMzJhMWJmZjNmOTdhOTZjMTU0YzIxZDc2NmRhYWQ0M2I1N2RlNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvdW5pY29kZS9pY3UvQ29sbGF0b3JJQ1UuY3BwCisrKyBi
L1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvaWN1L0NvbGxhdG9ySUNVLmNwcApAQCAtMzYsNyArMzYs
NiBAQAogI2luY2x1ZGUgPG11dGV4PgogI2luY2x1ZGUgPHVuaWNvZGUvdWNvbC5oPgogI2luY2x1
ZGUgPHd0Zi9Mb2NrLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIAogI2lmIE9TKERBUldJTikgJiYgVVNFKENGKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuY3BwCmluZGV4IGZhOThkZDgwZTRh
MjZkZTRjYTE3NzhmM2Y1NDBlMjFiYTM0MDdlYTguLmEzNWJhYWYxYjg1N2YxMWJkZDcwODM3ODIy
NDY1ZjE5ZmZkZGMwYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gv
RmV0Y2hCb2R5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9k
eS5jcHAKQEAgLTE1Nyw2ICsxNTcsNyBAQCB2b2lkIEZldGNoQm9keTo6Y29uc3VtZShGZXRjaEJv
ZHlPd25lciYgb3duZXIsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKIH0KIAogI2lm
IEVOQUJMRShTVFJFQU1TX0FQSSkKKwogdm9pZCBGZXRjaEJvZHk6OmNvbnN1bWVBc1N0cmVhbShG
ZXRjaEJvZHlPd25lciYgb3duZXIsIEZldGNoQm9keVNvdXJjZSYgc291cmNlKQogewogICAgIGJv
b2wgY2xvc2VTdHJlYW0gPSBmYWxzZTsKQEAgLTE2NywxMiArMTY4LDEyIEBAIHZvaWQgRmV0Y2hC
b2R5Ojpjb25zdW1lQXNTdHJlYW0oRmV0Y2hCb2R5T3duZXImIG93bmVyLCBGZXRjaEJvZHlTb3Vy
Y2UmIHNvdXJjZSkKICAgICAgICAgY2xvc2VTdHJlYW0gPSBzb3VyY2UuZW5xdWV1ZShBcnJheUJ1
ZmZlcjo6dHJ5Q3JlYXRlKGFycmF5QnVmZmVyVmlld0JvZHkoKS5iYXNlQWRkcmVzcygpLCBhcnJh
eUJ1ZmZlclZpZXdCb2R5KCkuYnl0ZUxlbmd0aCgpKSk7CiAgICAgICAgIG1fZGF0YSA9IG51bGxw
dHI7CiAgICAgfSBlbHNlIGlmIChpc1RleHQoKSkgewotICAgICAgICBhdXRvIGRhdGEgPSBVVEY4
RW5jb2RpbmcoKS5lbmNvZGUodGV4dEJvZHkoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwot
ICAgICAgICBjbG9zZVN0cmVhbSA9IHNvdXJjZS5lbnF1ZXVlKEFycmF5QnVmZmVyOjp0cnlDcmVh
dGUoZGF0YS5kYXRhKCksIGRhdGEubGVuZ3RoKCkpKTsKKyAgICAgICAgYXV0byBkYXRhID0gVVRG
OEVuY29kaW5nKCkuZW5jb2RlKHRleHRCb2R5KCksIFVuZW5jb2RhYmxlSGFuZGxpbmc6OkVudGl0
aWVzKTsKKyAgICAgICAgY2xvc2VTdHJlYW0gPSBzb3VyY2UuZW5xdWV1ZShBcnJheUJ1ZmZlcjo6
dHJ5Q3JlYXRlKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSkpOwogICAgICAgICBtX2RhdGEgPSBu
dWxscHRyOwogICAgIH0gZWxzZSBpZiAoaXNVUkxTZWFyY2hQYXJhbXMoKSkgewotICAgICAgICBh
dXRvIGRhdGEgPSBVVEY4RW5jb2RpbmcoKS5lbmNvZGUodXJsU2VhcmNoUGFyYW1zQm9keSgpLnRv
U3RyaW5nKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKLSAgICAgICAgY2xvc2VTdHJlYW0g
PSBzb3VyY2UuZW5xdWV1ZShBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKGRhdGEuZGF0YSgpLCBkYXRh
Lmxlbmd0aCgpKSk7CisgICAgICAgIGF1dG8gZGF0YSA9IFVURjhFbmNvZGluZygpLmVuY29kZSh1
cmxTZWFyY2hQYXJhbXNCb2R5KCkudG9TdHJpbmcoKSwgVW5lbmNvZGFibGVIYW5kbGluZzo6RW50
aXRpZXMpOworICAgICAgICBjbG9zZVN0cmVhbSA9IHNvdXJjZS5lbnF1ZXVlKEFycmF5QnVmZmVy
Ojp0cnlDcmVhdGUoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKSk7CiAgICAgICAgIG1fZGF0YSA9
IG51bGxwdHI7CiAgICAgfSBlbHNlIGlmIChpc0Jsb2IoKSkgewogICAgICAgICBvd25lci5sb2Fk
QmxvYihibG9iQm9keSgpLCBudWxscHRyKTsKQEAgLTE4Nyw2ICsxODgsNyBAQCB2b2lkIEZldGNo
Qm9keTo6Y29uc3VtZUFzU3RyZWFtKEZldGNoQm9keU93bmVyJiBvd25lciwgRmV0Y2hCb2R5U291
cmNlJiBzb3VyY2UpCiAgICAgaWYgKGNsb3NlU3RyZWFtKQogICAgICAgICBzb3VyY2UuY2xvc2Uo
KTsKIH0KKwogI2VuZGlmCiAKIHZvaWQgRmV0Y2hCb2R5Ojpjb25zdW1lQXJyYXlCdWZmZXIoUmVm
PERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQpAQCAtMjAzLDggKzIwNSw4IEBAIHZvaWQgRmV0
Y2hCb2R5Ojpjb25zdW1lQXJyYXlCdWZmZXJWaWV3KFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJv
bWlzZSkKIAogdm9pZCBGZXRjaEJvZHk6OmNvbnN1bWVUZXh0KFJlZjxEZWZlcnJlZFByb21pc2U+
JiYgcHJvbWlzZSwgY29uc3QgU3RyaW5nJiB0ZXh0KQogewotICAgIGF1dG8gZGF0YSA9IFVURjhF
bmNvZGluZygpLmVuY29kZSh0ZXh0LCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7Ci0gICAgbV9j
b25zdW1lci5yZXNvbHZlV2l0aERhdGEoV1RGTW92ZShwcm9taXNlKSwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKCkpLCBkYXRhLmxlbmd0aCgpKTsKKyAgICBhdXRv
IGRhdGEgPSBVVEY4RW5jb2RpbmcoKS5lbmNvZGUodGV4dCwgVW5lbmNvZGFibGVIYW5kbGluZzo6
RW50aXRpZXMpOworICAgIG1fY29uc3VtZXIucmVzb2x2ZVdpdGhEYXRhKFdURk1vdmUocHJvbWlz
ZSksIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CiAgICAgbV9kYXRhID0gbnVsbHB0cjsKIH0K
IApAQCAtMjI4LDkgKzIzMCw5IEBAIHZvaWQgRmV0Y2hCb2R5Ojpsb2FkaW5nU3VjY2VlZGVkKCkK
IFJlZlB0cjxGb3JtRGF0YT4gRmV0Y2hCb2R5Ojpib2R5QXNGb3JtRGF0YShTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGlmIChpc1RleHQoKSkKLSAgICAgICAg
cmV0dXJuIEZvcm1EYXRhOjpjcmVhdGUoVVRGOEVuY29kaW5nKCkuZW5jb2RlKHRleHRCb2R5KCks
IEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKSk7CisgICAgICAgIHJldHVybiBGb3JtRGF0YTo6Y3Jl
YXRlKFVURjhFbmNvZGluZygpLmVuY29kZSh0ZXh0Qm9keSgpLCBVbmVuY29kYWJsZUhhbmRsaW5n
OjpFbnRpdGllcykpOwogICAgIGlmIChpc1VSTFNlYXJjaFBhcmFtcygpKQotICAgICAgICByZXR1
cm4gRm9ybURhdGE6OmNyZWF0ZShVVEY4RW5jb2RpbmcoKS5lbmNvZGUodXJsU2VhcmNoUGFyYW1z
Qm9keSgpLnRvU3RyaW5nKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKSk7CisgICAgICAgIHJl
dHVybiBGb3JtRGF0YTo6Y3JlYXRlKFVURjhFbmNvZGluZygpLmVuY29kZSh1cmxTZWFyY2hQYXJh
bXNCb2R5KCkudG9TdHJpbmcoKSwgVW5lbmNvZGFibGVIYW5kbGluZzo6RW50aXRpZXMpKTsKICAg
ICBpZiAoaXNCbG9iKCkpIHsKICAgICAgICAgUmVmUHRyPEZvcm1EYXRhPiBib2R5ID0gRm9ybURh
dGE6OmNyZWF0ZSgpOwogICAgICAgICBib2R5LT5hcHBlbmRCbG9iKGJsb2JCb2R5KCkudXJsKCkp
OwpAQCAtMjcxLDE1ICsyNzMsMTAgQEAgRmV0Y2hCb2R5OjpUYWtlbkRhdGEgRmV0Y2hCb2R5Ojp0
YWtlKCkKICAgICBpZiAoaXNGb3JtRGF0YSgpKQogICAgICAgICByZXR1cm4gZm9ybURhdGFCb2R5
KCk7CiAKLSAgICBpZiAoaXNUZXh0KCkpIHsKLSAgICAgICAgYXV0byBkYXRhID0gVVRGOEVuY29k
aW5nKCkuZW5jb2RlKHRleHRCb2R5KCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKLSAgICAg
ICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEuZGF0YSgpLCBkYXRhLmxlbmd0aCgp
KTsKLSAgICB9Ci0KLSAgICBpZiAoaXNVUkxTZWFyY2hQYXJhbXMoKSkgewotICAgICAgICBhdXRv
IGRhdGEgPSBVVEY4RW5jb2RpbmcoKS5lbmNvZGUodXJsU2VhcmNoUGFyYW1zQm9keSgpLnRvU3Ry
aW5nKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKLSAgICAgICAgcmV0dXJuIFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKGRhdGEuZGF0YSgpLCBkYXRhLmxlbmd0aCgpKTsKLSAgICB9CisgICAgaWYg
KGlzVGV4dCgpKQorICAgICAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoVVRGOEVuY29k
aW5nKCkuZW5jb2RlKHRleHRCb2R5KCksIFVuZW5jb2RhYmxlSGFuZGxpbmc6OkVudGl0aWVzKSk7
CisgICAgaWYgKGlzVVJMU2VhcmNoUGFyYW1zKCkpCisgICAgICAgIHJldHVybiBTaGFyZWRCdWZm
ZXI6OmNyZWF0ZShVVEY4RW5jb2RpbmcoKS5lbmNvZGUodXJsU2VhcmNoUGFyYW1zQm9keSgpLnRv
U3RyaW5nKCksIFVuZW5jb2RhYmxlSGFuZGxpbmc6OkVudGl0aWVzKSk7CiAKICAgICBpZiAoaXNB
cnJheUJ1ZmZlcigpKQogICAgICAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYXJyYXlCdWZmZXJCb2R5KCkuZGF0YSgpKSwgYXJyYXlC
dWZmZXJCb2R5KCkuYnl0ZUxlbmd0aCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RGVmbGF0ZXIuY3BwCmluZGV4IGU1YjJlMzYzOGEw
MDg0NTI3OTdiY2YzMDhiYmQ5N2E5ZjgzNGFhNmQuLjdkMzk3MWQ1Nzk2YmJkY2M0Njg5ZWEyZTk5
YmIxNGE1OGZjMDhkYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXREZWZsYXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVyLmNwcApAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1
ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KICNpbmNsdWRlIDx6bGliLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCmluZGV4IDdlYzI3ODYzODBk
NmEwYTgzYjdjMzBlY2I0NjAzMjkxYjVhMjhjOTMuLjI2NTIzZGNiYzNiNmM0NmUzMGVjZDJkMjMz
NDJmYjUxMzVmMDc5NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCkBAIC00NCwxMiArNDQsMTIgQEAKICNp
bmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgIldl
YlNvY2tldC5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBl
Lmg+CiAjaW5jbHVkZSA8d3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+CiAjaW5j
bHVkZSA8d3RmL01ENS5oPgogI2luY2x1ZGUgPHd0Zi9TSEExLmg+CiAjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGNlNGE2NDNjZDFkNDYzMmQwZDhlNTY3OGI0MTg4ZDEwMDdk
ODEyOGYuLmQ4ODNmY2VhNzE3ZmEyZjliZGY5YzEwMjJiYzViNzgxYjlkZmM5MWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9QQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI1
NSw2ICsyNTUsNyBAQAogCQkxQzY3Q0VBMTFFMzJFREE4MDBGODBGMkUgLyogRmVhdHVyZURlZmlu
ZXMueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gRmVhdHVyZURlZmlu
ZXMueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDNjdDRUEyMUUzMkVF
MjYwMEY4MEYyRSAvKiBWZXJzaW9uLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsg
cGF0aCA9IFZlcnNpb24ueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdB
MTY1NjQzMUY5N0IyQjgwMEJBM0NFNCAvKiBOU0tleWVkQXJjaGl2ZXJTUEkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTlNLZXllZEFyY2hpdmVyU1BJLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTkzRTU5MDlDMUY5M0JGMUUwMDY3RjhDRiAvKiBVbmVuY29kYWJs
ZUhhbmRsaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZW5jb2RhYmxlSGFuZGxpbmcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTEwMjY1ODYxRjU2NzQ2MTAwQjRDODQ0IC8qIEZvdW5k
YXRpb25TUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm91bmRhdGlvblNQ
SS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTAyNjU4ODFGNTY3NDdBMDBCNEM4
NDQgLyogSElUb29sYm94U1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhJ
VG9vbGJveFNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTAyNjU4QTFGNTY3
NDhDMDBCNEM4NDQgLyogUXVpY2tEcmF3U1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFF1aWNrRHJhd1NQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTQz
LDYgKzU0NCw3IEBACiAJCQkJQTMwRDQxMjMxRjBERDEwNTAwQjcxOTU0IC8qIG1hYyAqLywKIAkJ
CQlBMzBENDExRjFGMEREMEVBMDBCNzE5NTQgLyogS2lsbFJpbmcuY3BwICovLAogCQkJCUEzMEQ0
MTFFMUYwREQwRUEwMEI3MTk1NCAvKiBLaWxsUmluZy5oICovLAorCQkJCTkzRTU5MDlDMUY5M0JG
MUUwMDY3RjhDRiAvKiBVbmVuY29kYWJsZUhhbmRsaW5nLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9
IHRleHQ7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvUEFML3BhbC90ZXh0L1VuZW5jb2RhYmxlSGFuZGxpbmcuaCBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvdGV4dC9VbmVuY29kYWJsZUhhbmRsaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmExYjVlODc0
MWIxZTczMGIzNjg5ZmJkMTU3ZGM4ZjE2ZDU5MmU3MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9VbmVuY29kYWJsZUhhbmRsaW5nLmgKQEAgLTAsMCArMSw0
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gU3BlY2lmaWVzIHdoYXQg
d2lsbCBoYXBwZW4gd2hlbiBhIGNoYXJhY3RlciBpcyBlbmNvdW50ZXJlZCB0aGF0IGlzCisvLyBu
b3QgZW5jb2RhYmxlIGluIHRoZSBjaGFyYWN0ZXIgc2V0LgorZW51bSBjbGFzcyBVbmVuY29kYWJs
ZUhhbmRsaW5nIHsKKyAgICAvLyBTdWJzdGl0dXRlcyB0aGUgcmVwbGFjZW1lbnQgY2hhcmFjdGVy
ICI/Ii4KKyAgICBRdWVzdGlvbk1hcmtzLAorCisgICAgLy8gRW5jb2RlcyB0aGUgY2hhcmFjdGVy
IGFzIGFuIFhNTCBlbnRpdHkuIEZvciBleGFtcGxlLCBVKzA2REUKKyAgICAvLyB3b3VsZCBiZSAi
JiMxNzU4OyIgKDB4NkRFID0gMTc1OCBpbiBvY3RhbCkuCisgICAgRW50aXRpZXMsCisKKyAgICAv
LyBFbmNvZGVzIHRoZSBjaGFyYWN0ZXIgYXMgZW4gZW50aXR5IGFzIGFib3ZlLCBidXQgZXNjYXBl
ZAorICAgIC8vIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycy4gVGhpcyBpcyB1c2VkIGluIFVS
THMuCisgICAgLy8gRm9yIGV4YW1wbGUsIFUrNkRFIHdvdWxkIGJlICIlMjYlMjMxNzU4JTNCIi4K
KyAgICBVUkxFbmNvZGVkRW50aXRpZXMKK307CisKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYnJpZGdlL0lkZW50aWZpZXJSZXAuaCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9JZGVu
dGlmaWVyUmVwLmgKaW5kZXggMjQ4ZWY4OTMxM2U2NmNiZGEzNTY4YTQ5YWE0YjU1ZjM1OGZiN2Nm
YS4uMzU0MDBmMTdjMzM2MzU3ZTY5NWQxODZiOTExMWNjY2RhOWQzNDFiOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYnJpZGdlL0lkZW50aWZpZXJSZXAuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvSWRlbnRpZmllclJlcC5oCkBAIC0yMywxMiArMjMsMTAgQEAKICAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAogICovCiAKLSNpZm5kZWYgSWRlbnRpZmllclJlcF9oCi0jZGVmaW5lIElkZW50aWZpZXJS
ZXBfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1
ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2lu
Y2x1ZGUgPHN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03MCw0ICs2OCwzIEBA
IHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIElkZW50aWZp
ZXJSZXBfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNwcAppbmRleCA5NjkyZTVi
YzFkZGY1N2FlY2I0MTJlYzAwMDRlODk1OWMxOGZiNGU2Li44ZWYyYWE0NjkyZWFjZjFiMDRiMmY2
Y2UwMjIwNWVhMGMxOWMzNDVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9j
X2luc3RhbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNw
cApAQCAtNDcsNyArNDcsNiBAQAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgot
I2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9CbG9iQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2JCdWlsZGVy
LmNwcAppbmRleCBhZjZkMWU2ZGM2NDJkYmI1MWNlYzMzMTExZjlkOTcwNDkzMzYyOGNiLi41OWE2
MzA4ZDIxZDliYTc4N2MzYjMzNTE3NWFiN2I5YjNkNzI3NWZjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9maWxlYXBpL0Jsb2JCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxl
YXBpL0Jsb2JCdWlsZGVyLmNwcApAQCAtNDksMTQgKzQ5LDE0IEBAIHZvaWQgQmxvYkJ1aWxkZXI6
OmFwcGVuZChSZWZQdHI8QXJyYXlCdWZmZXI+JiYgYXJyYXlCdWZmZXIpCiB7CiAgICAgaWYgKCFh
cnJheUJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwotICAgIG1fYXBwZW5kYWJsZURhdGEuYXBwZW5k
KHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihhcnJheUJ1ZmZlci0+ZGF0YSgpKSwgYXJyYXlCdWZm
ZXItPmJ5dGVMZW5ndGgoKSk7CisgICAgbV9hcHBlbmRhYmxlRGF0YS5hcHBlbmQoc3RhdGljX2Nh
c3Q8Y29uc3QgdWludDhfdCo+KGFycmF5QnVmZmVyLT5kYXRhKCkpLCBhcnJheUJ1ZmZlci0+Ynl0
ZUxlbmd0aCgpKTsKIH0KIAogdm9pZCBCbG9iQnVpbGRlcjo6YXBwZW5kKFJlZlB0cjxBcnJheUJ1
ZmZlclZpZXc+JiYgYXJyYXlCdWZmZXJWaWV3KQogewogICAgIGlmICghYXJyYXlCdWZmZXJWaWV3
KQogICAgICAgICByZXR1cm47Ci0gICAgbV9hcHBlbmRhYmxlRGF0YS5hcHBlbmQoc3RhdGljX2Nh
c3Q8Y29uc3QgY2hhcio+KGFycmF5QnVmZmVyVmlldy0+YmFzZUFkZHJlc3MoKSksIGFycmF5QnVm
ZmVyVmlldy0+Ynl0ZUxlbmd0aCgpKTsKKyAgICBtX2FwcGVuZGFibGVEYXRhLmFwcGVuZChzdGF0
aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYXJyYXlCdWZmZXJWaWV3LT5iYXNlQWRkcmVzcygpKSwg
YXJyYXlCdWZmZXJWaWV3LT5ieXRlTGVuZ3RoKCkpOwogfQogCiB2b2lkIEJsb2JCdWlsZGVyOjph
cHBlbmQoUmVmUHRyPEJsb2I+JiYgYmxvYikKQEAgLTcwLDEzICs3MCwxNiBAQCB2b2lkIEJsb2JC
dWlsZGVyOjphcHBlbmQoUmVmUHRyPEJsb2I+JiYgYmxvYikKIAogdm9pZCBCbG9iQnVpbGRlcjo6
YXBwZW5kKGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKLSAgICBDU3RyaW5nIHV0ZjhUZXh0ID0gVVRG
OEVuY29kaW5nKCkuZW5jb2RlKHRleHQsIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKKyAgICBh
dXRvIGJ5dGVzID0gVVRGOEVuY29kaW5nKCkuZW5jb2RlKHRleHQsIFVuZW5jb2RhYmxlSGFuZGxp
bmc6OkVudGl0aWVzKTsKIAogICAgIGlmIChtX2VuZGluZ3MgPT0gQmxvYkxpbmVFbmRpbmdzOjpO
YXRpdmUpCi0gICAgICAgIG5vcm1hbGl6ZUFuZEFwcGVuZExpbmVFbmRpbmdzVG9OYXRpdmUodXRm
OFRleHQsIG1fYXBwZW5kYWJsZURhdGEpOworICAgICAgICBieXRlcyA9IG5vcm1hbGl6ZUxpbmVF
bmRpbmdzVG9OYXRpdmUoV1RGTW92ZShieXRlcykpOworCisgICAgaWYgKG1fYXBwZW5kYWJsZURh
dGEuaXNFbXB0eSgpKQorICAgICAgICBtX2FwcGVuZGFibGVEYXRhID0gV1RGTW92ZShieXRlcyk7
CiAgICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVChtX2VuZGluZ3MgPT0gQmxvYkxpbmVFbmRpbmdz
OjpUcmFuc3BhcmVudCk7Ci0gICAgICAgIG1fYXBwZW5kYWJsZURhdGEuYXBwZW5kKHV0ZjhUZXh0
LmRhdGEoKSwgdXRmOFRleHQubGVuZ3RoKCkpOworICAgICAgICAvLyBGSVhNRTogV291bGQgaXQg
YmUgYmV0dGVyIHRvIG1vdmUgbXVsdGlwbGUgdmVjdG9ycyBpbnRvIG1faXRlbXMgaW5zdGVhZCBv
ZiBtZXJnaW5nIHRoZW0gaW50byBvbmU/CisgICAgICAgIG1fYXBwZW5kYWJsZURhdGEuYXBwZW5k
VmVjdG9yKGJ5dGVzKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwCmluZGV4IDhkMzNlZTY2M2ZiMzMwNzA0
YTk4OGEyMTE1YzA0MzBjYjE5ZTM2ZWYuLmI1Y2E0NmMyMWZiNmNhMjVjYjk4MjVjNzk1ZjA4ODdi
NDQ0NTIwZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRh
Q2hhcnNldFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1l
dGFDaGFyc2V0UGFyc2VyLmNwcApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgorI2luY2x1ZGUgIlRleHRDb2Rl
Yy5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZ1JlZ2lzdHJ5LmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTE1Myw3ICsxNTQsOCBAQCBib29sIEhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6Y2hl
Y2tGb3JNZXRhQ2hhcnNldChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKQogCiAgICAg
Y29uc3RleHByIGludCBieXRlc1RvQ2hlY2tVbmNvbmRpdGlvbmFsbHkgPSAxMDI0OwogCi0gICAg
bV9pbnB1dC5hcHBlbmQobV9jb2RlYy0+ZGVjb2RlKGRhdGEsIGxlbmd0aCkpOworICAgIGJvb2wg
aWdub3JlZFNhd0Vycm9yRmxhZzsKKyAgICBtX2lucHV0LmFwcGVuZChtX2NvZGVjLT5kZWNvZGUo
ZGF0YSwgbGVuZ3RoLCBmYWxzZSwgZmFsc2UsIGlnbm9yZWRTYXdFcnJvckZsYWcpKTsKIAogICAg
IHdoaWxlIChhdXRvIHRva2VuID0gbV90b2tlbml6ZXIubmV4dFRva2VuKG1faW5wdXQpKSB7CiAg
ICAgICAgIGJvb2wgaXNFbmQgPSB0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlbjo6RW5kVGFnOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01B
Z2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFn
ZW50LmNwcAppbmRleCBkMmM2MzVkZmU1YTA4MzlhNjNhOWQwYzY3MmZlMGY5YTdiY2M0MDk2Li5k
M2U0YzIzNTAxZTk0OTc5OTg4OTQxYjEyNmUyNDE5MDhiYjg2NWY3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAt
MTQxNiwxMCArMTQxNiwxMCBAQCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVDb250ZW50U2VjdXJpdHlQ
b2xpY3lTSEEyNTZIYXNoKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgLy8gU2VlIDxodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1MTg0Pi4KICAgICBUZXh0RW5j
b2RpbmcgZG9jdW1lbnRFbmNvZGluZyA9IGVsZW1lbnQuZG9jdW1lbnQoKS50ZXh0RW5jb2Rpbmco
KTsKICAgICBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nVG9Vc2UgPSBkb2N1bWVudEVuY29k
aW5nLmlzVmFsaWQoKSA/IGRvY3VtZW50RW5jb2RpbmcgOiBVVEY4RW5jb2RpbmcoKTsKLSAgICBD
U3RyaW5nIGNvbnRlbnQgPSBlbmNvZGluZ1RvVXNlLmVuY29kZShUZXh0Tm9kZVRyYXZlcnNhbDo6
Y29udGVudHNBc1N0cmluZyhlbGVtZW50KSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOworICAg
IGF1dG8gY29udGVudCA9IGVuY29kaW5nVG9Vc2UuZW5jb2RlKFRleHROb2RlVHJhdmVyc2FsOjpj
b250ZW50c0FzU3RyaW5nKGVsZW1lbnQpLCBVbmVuY29kYWJsZUhhbmRsaW5nOjpFbnRpdGllcyk7
CiAgICAgYXV0byBjcnlwdG9EaWdlc3QgPSBQQUw6OkNyeXB0b0RpZ2VzdDo6Y3JlYXRlKFBBTDo6
Q3J5cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV8yNTYpOwotICAgIGNyeXB0b0RpZ2VzdC0+YWRk
Qnl0ZXMoY29udGVudC5kYXRhKCksIGNvbnRlbnQubGVuZ3RoKCkpOwotICAgIFZlY3Rvcjx1aW50
OF90PiBkaWdlc3QgPSBjcnlwdG9EaWdlc3QtPmNvbXB1dGVIYXNoKCk7CisgICAgY3J5cHRvRGln
ZXN0LT5hZGRCeXRlcyhjb250ZW50LmRhdGEoKSwgY29udGVudC5zaXplKCkpOworICAgIGF1dG8g
ZGlnZXN0ID0gY3J5cHRvRGlnZXN0LT5jb21wdXRlSGFzaCgpOwogICAgIHJldHVybiBtYWtlU3Ry
aW5nKCJzaGEyNTYtIiwgYmFzZTY0RW5jb2RlKGRpZ2VzdC5kYXRhKCksIGRpZ2VzdC5zaXplKCkp
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRv
Z3JhcGhpY0RpZ2VzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9n
cmFwaGljRGlnZXN0LmNwcAppbmRleCBiYWU5MTJhMzI4NzliOGU4OWNjM2JiOGFkN2MyYTc2NGY1
ZGMyOWM2Li4xNTgzMjNhZmE0NjA0YzYwZWQ1NzNmNTFiOTI4Nzk5YWEzMjZiZWNiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0
LmNwcApAQCAtMTU0LDcgKzE1NCw3IEBAIHN0YXRpYyBQQUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3Jp
dGhtIHRvQ3J5cHRvRGlnZXN0QWxnb3JpdGhtKFJlc291cmNlQ3J5cHRvZ3JhcGhpCiAgICAgcmV0
dXJuIFBBTDo6Q3J5cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV81MTI7CiB9CiAKLVJlc291cmNl
Q3J5cHRvZ3JhcGhpY0RpZ2VzdCBjcnlwdG9ncmFwaGljRGlnZXN0Rm9yQnl0ZXMoUmVzb3VyY2VD
cnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG0gYWxnb3JpdGhtLCBjb25zdCBjaGFyKiBieXRl
cywgc2l6ZV90IGxlbmd0aCkKK1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCBjcnlwdG9ncmFw
aGljRGlnZXN0Rm9yQnl0ZXMoUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG0g
YWxnb3JpdGhtLCBjb25zdCB2b2lkKiBieXRlcywgc2l6ZV90IGxlbmd0aCkKIHsKICAgICBhdXRv
IGNyeXB0b0RpZ2VzdCA9IFBBTDo6Q3J5cHRvRGlnZXN0OjpjcmVhdGUodG9DcnlwdG9EaWdlc3RB
bGdvcml0aG0oYWxnb3JpdGhtKSk7CiAgICAgY3J5cHRvRGlnZXN0LT5hZGRCeXRlcyhieXRlcywg
bGVuZ3RoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUNyeXB0
b2dyYXBoaWNEaWdlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUNyeXB0b2dy
YXBoaWNEaWdlc3QuaAppbmRleCA2MzhhNGEzZjIxNTBlMTA3YTk2NjQzYjRhNDZiNDM4MWM4YzZk
ZWI4Li5lNGE4MmFlNzQ2NTgxNTZjNzc2YjU3ZmVmMWE4ZmQ5N2Q0NDkxYmE0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oCkBA
IC03Niw3ICs3Niw3IEBAIHN0ZDo6b3B0aW9uYWw8RW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhp
Y0RpZ2VzdD4gcGFyc2VFbmNvZGVkQ3J5cHRvZ3JhcGhpY0RpZ2VzCiAKIHN0ZDo6b3B0aW9uYWw8
UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBkZWNvZGVFbmNvZGVkUmVzb3VyY2VDcnlwdG9n
cmFwaGljRGlnZXN0KGNvbnN0IEVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QmKTsK
IAotUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IGNyeXB0b2dyYXBoaWNEaWdlc3RGb3JCeXRl
cyhSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRobSwgY29uc3QgY2hhciogYnl0
ZXMsIHNpemVfdCBsZW5ndGgpOworUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0IGNyeXB0b2dy
YXBoaWNEaWdlc3RGb3JCeXRlcyhSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q6OkFsZ29yaXRo
bSwgY29uc3Qgdm9pZCogYnl0ZXMsIHNpemVfdCBsZW5ndGgpOwogCiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNwcAppbmRleCA1ZDA5YzIzOGVjMGYy
OWRlMjRlZDY0YzdjMzdkYjIxMDU4OTFhOWYxLi5hMGY5MzJlNmE5NjlhZWY1MTdlYTA0ZTM3YzA3
NzU5NDUzMzZiYmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291
cmNlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURl
Y29kZXIuY3BwCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDE5OTkgTGFy
cyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICAgIENvcHlyaWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAgICBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcgQWxl
eGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMzEsNyArMzEs
NiBAQAogI2luY2x1ZGUgIlRleHRFbmNvZGluZ0RldGVjdG9yLmgiCiAjaW5jbHVkZSAiVGV4dEVu
Y29kaW5nUmVnaXN0cnkuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgotI2luY2x1ZGUg
PHd0Zi9TdHJpbmdFeHRyYXMuaD4KIAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zMjIsMjAg
KzMyMSwxOCBAQCBjb25zdCBUZXh0RW5jb2RpbmcmIFRleHRSZXNvdXJjZURlY29kZXI6OmRlZmF1
bHRFbmNvZGluZyhDb250ZW50VHlwZSBjb250ZW50VHlwZQogICAgIHJldHVybiBzcGVjaWZpZWRE
ZWZhdWx0RW5jb2Rpbmc7CiB9CiAKLVRleHRSZXNvdXJjZURlY29kZXI6OlRleHRSZXNvdXJjZURl
Y29kZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVGV4dEVuY29kaW5nJiBzcGVjaWZp
ZWREZWZhdWx0RW5jb2RpbmcsIGJvb2wgdXNlc0VuY29kaW5nRGV0ZWN0b3IpCitpbmxpbmUgVGV4
dFJlc291cmNlRGVjb2Rlcjo6VGV4dFJlc291cmNlRGVjb2Rlcihjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBjb25zdCBUZXh0RW5jb2RpbmcmIHNwZWNpZmllZERlZmF1bHRFbmNvZGluZywgYm9vbCB1
c2VzRW5jb2RpbmdEZXRlY3RvcikKICAgICA6IG1fY29udGVudFR5cGUoZGV0ZXJtaW5lQ29udGVu
dFR5cGUobWltZVR5cGUpKQogICAgICwgbV9lbmNvZGluZyhkZWZhdWx0RW5jb2RpbmcobV9jb250
ZW50VHlwZSwgc3BlY2lmaWVkRGVmYXVsdEVuY29kaW5nKSkKLSAgICAsIG1fc291cmNlKERlZmF1
bHRFbmNvZGluZykKLSAgICAsIG1faGludEVuY29kaW5nKG51bGxwdHIpCi0gICAgLCBtX2NoZWNr
ZWRGb3JCT00oZmFsc2UpCi0gICAgLCBtX2NoZWNrZWRGb3JDU1NDaGFyc2V0KGZhbHNlKQotICAg
ICwgbV9jaGVja2VkRm9ySGVhZENoYXJzZXQoZmFsc2UpCi0gICAgLCBtX3VzZUxlbmllbnRYTUxE
ZWNvZGluZyhmYWxzZSkKLSAgICAsIG1fc2F3RXJyb3IoZmFsc2UpCiAgICAgLCBtX3VzZXNFbmNv
ZGluZ0RldGVjdG9yKHVzZXNFbmNvZGluZ0RldGVjdG9yKQogewogfQogCitSZWY8VGV4dFJlc291
cmNlRGVjb2Rlcj4gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYgZGVmYXVsdEVuY29kaW5nLCBib29sIHVzZXNFbmNv
ZGluZ0RldGVjdG9yKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRleHRSZXNvdXJjZURl
Y29kZXIobWltZVR5cGUsIGRlZmF1bHRFbmNvZGluZywgdXNlc0VuY29kaW5nRGV0ZWN0b3IpKTsK
K30KKwogVGV4dFJlc291cmNlRGVjb2Rlcjo6flRleHRSZXNvdXJjZURlY29kZXIoKSA9IGRlZmF1
bHQ7CiAKIHZvaWQgVGV4dFJlc291cmNlRGVjb2Rlcjo6c2V0RW5jb2RpbmcoY29uc3QgVGV4dEVu
Y29kaW5nJiBlbmNvZGluZywgRW5jb2RpbmdTb3VyY2Ugc291cmNlKQpAQCAtMzQ2LDcgKzM0Myw3
IEBAIHZvaWQgVGV4dFJlc291cmNlRGVjb2Rlcjo6c2V0RW5jb2RpbmcoY29uc3QgVGV4dEVuY29k
aW5nJiBlbmNvZGluZywgRW5jb2RpbmdTb3VyCiAKICAgICAvLyBXaGVuIGVuY29kaW5nIGNvbWVz
IGZyb20gbWV0YSB0YWcgKGkuZS4gaXQgY2Fubm90IGJlIFhNTCBmaWxlcyBzZW50IHZpYSBYSFIp
LAogICAgIC8vIHRyZWF0IHgtdXNlci1kZWZpbmVkIGFzIHdpbmRvd3MtMTI1MiAoYnVnIDE4Mjcw
KQotICAgIGlmIChzb3VyY2UgPT0gRW5jb2RpbmdGcm9tTWV0YVRhZyAmJiBzdHJjYXNlY21wKGVu
Y29kaW5nLm5hbWUoKSwgIngtdXNlci1kZWZpbmVkIikgPT0gMCkKKyAgICBpZiAoc291cmNlID09
IEVuY29kaW5nRnJvbU1ldGFUYWcgJiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZW5j
b2RpbmcubmFtZSgpLCAieC11c2VyLWRlZmluZWQiKSkKICAgICAgICAgbV9lbmNvZGluZyA9ICJ3
aW5kb3dzLTEyNTIiOwogICAgIGVsc2UgaWYgKHNvdXJjZSA9PSBFbmNvZGluZ0Zyb21NZXRhVGFn
IHx8IHNvdXJjZSA9PSBFbmNvZGluZ0Zyb21YTUxIZWFkZXIgfHwgc291cmNlID09IEVuY29kaW5n
RnJvbUNTU0NoYXJzZXQpICAgICAgICAKICAgICAgICAgbV9lbmNvZGluZyA9IGVuY29kaW5nLmNs
b3Nlc3RCeXRlQmFzZWRFcXVpdmFsZW50KCk7CkBAIC01OTMsMzUgKzU5MCwzMyBAQCB2b2lkIFRl
eHRSZXNvdXJjZURlY29kZXI6OmRldGVjdEphcGFuZXNlRW5jb2RpbmcoY29uc3QgY2hhciogZGF0
YSwgc2l6ZV90IGxlbikKIC8vICAgaW4gdGhlIGZpcnN0IHBsYWNlLiAKIGJvb2wgVGV4dFJlc291
cmNlRGVjb2Rlcjo6c2hvdWxkQXV0b0RldGVjdCgpIGNvbnN0CiB7Ci0gICAgLy8gSnVzdCBjaGVj
a2luZyBtX2hpbnRFbmNvZGluZyBzdWZmaWNlcyBoZXJlIGJlY2F1c2UgaXQncyBvbmx5IHNldAot
ICAgIC8vIGluIHNldEhpbnRFbmNvZGluZyB3aGVuIHRoZSBzb3VyY2UgaXMgQXV0b0RldGVjdGVk
RW5jb2RpbmcuCiAgICAgcmV0dXJuIG1fdXNlc0VuY29kaW5nRGV0ZWN0b3IKLSAgICAgICAgJiYg
KG1fc291cmNlID09IERlZmF1bHRFbmNvZGluZyB8fCAobV9zb3VyY2UgPT0gRW5jb2RpbmdGcm9t
UGFyZW50RnJhbWUgJiYgbV9oaW50RW5jb2RpbmcpKTsgCisgICAgICAgICYmIChtX3NvdXJjZSA9
PSBEZWZhdWx0RW5jb2RpbmcgfHwgKG1fc291cmNlID09IEVuY29kaW5nRnJvbVBhcmVudEZyYW1l
ICYmIG1fcGFyZW50RnJhbWVBdXRvRGV0ZWN0ZWRFbmNvZGluZykpOwogfQogCi1TdHJpbmcgVGV4
dFJlc291cmNlRGVjb2Rlcjo6ZGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW4pCitT
dHJpbmcgVGV4dFJlc291cmNlRGVjb2Rlcjo6ZGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVf
dCBsZW5ndGgpCiB7CiAgICAgc2l6ZV90IGxlbmd0aE9mQk9NID0gMDsKICAgICBpZiAoIW1fY2hl
Y2tlZEZvckJPTSkKLSAgICAgICAgbGVuZ3RoT2ZCT00gPSBjaGVja0ZvckJPTShkYXRhLCBsZW4p
OworICAgICAgICBsZW5ndGhPZkJPTSA9IGNoZWNrRm9yQk9NKGRhdGEsIGxlbmd0aCk7CiAKICAg
ICBib29sIG1vdmVkRGF0YVRvQnVmZmVyID0gZmFsc2U7CiAKICAgICBpZiAobV9jb250ZW50VHlw
ZSA9PSBDU1MgJiYgIW1fY2hlY2tlZEZvckNTU0NoYXJzZXQpCi0gICAgICAgIGlmICghY2hlY2tG
b3JDU1NDaGFyc2V0KGRhdGEsIGxlbiwgbW92ZWREYXRhVG9CdWZmZXIpKQorICAgICAgICBpZiAo
IWNoZWNrRm9yQ1NTQ2hhcnNldChkYXRhLCBsZW5ndGgsIG1vdmVkRGF0YVRvQnVmZmVyKSkKICAg
ICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCiAgICAgaWYgKChtX2NvbnRlbnRUeXBl
ID09IEhUTUwgfHwgbV9jb250ZW50VHlwZSA9PSBYTUwpICYmICFtX2NoZWNrZWRGb3JIZWFkQ2hh
cnNldCkgLy8gSFRNTCBhbmQgWE1MCi0gICAgICAgIGlmICghY2hlY2tGb3JIZWFkQ2hhcnNldChk
YXRhLCBsZW4sIG1vdmVkRGF0YVRvQnVmZmVyKSkKKyAgICAgICAgaWYgKCFjaGVja0ZvckhlYWRD
aGFyc2V0KGRhdGEsIGxlbmd0aCwgbW92ZWREYXRhVG9CdWZmZXIpKQogICAgICAgICAgICAgcmV0
dXJuIGVtcHR5U3RyaW5nKCk7CiAKICAgICAvLyBGSVhNRTogSXQgaXMgd3JvbmcgdG8gY2hhbmdl
IHRoZSBlbmNvZGluZyBkb3duc3RyZWFtIGFmdGVyIHdlIGhhdmUgYWxyZWFkeSBkb25lIHNvbWUg
ZGVjb2RpbmcuCiAgICAgaWYgKHNob3VsZEF1dG9EZXRlY3QoKSkgewogICAgICAgICBpZiAobV9l
bmNvZGluZy5pc0phcGFuZXNlKCkpCi0gICAgICAgICAgICBkZXRlY3RKYXBhbmVzZUVuY29kaW5n
KGRhdGEsIGxlbik7IC8vIEZJWE1FOiBXZSBzaG91bGQgdXNlIGRldGVjdFRleHRFbmNvZGluZygp
IGZvciBhbGwgbGFuZ3VhZ2VzLgorICAgICAgICAgICAgZGV0ZWN0SmFwYW5lc2VFbmNvZGluZyhk
YXRhLCBsZW5ndGgpOyAvLyBGSVhNRTogV2Ugc2hvdWxkIHVzZSBkZXRlY3RUZXh0RW5jb2Rpbmco
KSBmb3IgYWxsIGxhbmd1YWdlcy4KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBUZXh0RW5j
b2RpbmcgZGV0ZWN0ZWRFbmNvZGluZzsKLSAgICAgICAgICAgIGlmIChkZXRlY3RUZXh0RW5jb2Rp
bmcoZGF0YSwgbGVuLCBtX2hpbnRFbmNvZGluZywgJmRldGVjdGVkRW5jb2RpbmcpKQorICAgICAg
ICAgICAgaWYgKGRldGVjdFRleHRFbmNvZGluZyhkYXRhLCBsZW5ndGgsIG1fcGFyZW50RnJhbWVB
dXRvRGV0ZWN0ZWRFbmNvZGluZywgJmRldGVjdGVkRW5jb2RpbmcpKQogICAgICAgICAgICAgICAg
IHNldEVuY29kaW5nKGRldGVjdGVkRW5jb2RpbmcsIEF1dG9EZXRlY3RlZEVuY29kaW5nKTsKICAg
ICAgICAgfQogICAgIH0KQEAgLTYzMiwxMiArNjI3LDEyIEBAIFN0cmluZyBUZXh0UmVzb3VyY2VE
ZWNvZGVyOjpkZWNvZGUoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbikKICAgICAgICAgbV9j
b2RlYyA9IG5ld1RleHRDb2RlYyhtX2VuY29kaW5nKTsKIAogICAgIGlmIChtX2J1ZmZlci5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBtX2NvZGVjLT5kZWNvZGUoZGF0YSArIGxlbmd0aE9mQk9N
LCBsZW4gLSBsZW5ndGhPZkJPTSwgZmFsc2UsIG1fY29udGVudFR5cGUgPT0gWE1MLCBtX3Nhd0Vy
cm9yKTsKKyAgICAgICAgcmV0dXJuIG1fY29kZWMtPmRlY29kZShkYXRhICsgbGVuZ3RoT2ZCT00s
IGxlbmd0aCAtIGxlbmd0aE9mQk9NLCBmYWxzZSwgbV9jb250ZW50VHlwZSA9PSBYTUwsIG1fc2F3
RXJyb3IpOwogCiAgICAgaWYgKCFtb3ZlZERhdGFUb0J1ZmZlcikgewogICAgICAgICBzaXplX3Qg
b2xkU2l6ZSA9IG1fYnVmZmVyLnNpemUoKTsKLSAgICAgICAgbV9idWZmZXIuZ3JvdyhvbGRTaXpl
ICsgbGVuKTsKLSAgICAgICAgbWVtY3B5KG1fYnVmZmVyLmRhdGEoKSArIG9sZFNpemUsIGRhdGEs
IGxlbik7CisgICAgICAgIG1fYnVmZmVyLmdyb3cob2xkU2l6ZSArIGxlbmd0aCk7CisgICAgICAg
IG1lbWNweShtX2J1ZmZlci5kYXRhKCkgKyBvbGRTaXplLCBkYXRhLCBsZW5ndGgpOwogICAgIH0K
IAogICAgIFN0cmluZyByZXN1bHQgPSBtX2NvZGVjLT5kZWNvZGUobV9idWZmZXIuZGF0YSgpICsg
bGVuZ3RoT2ZCT00sIG1fYnVmZmVyLnNpemUoKSAtIGxlbmd0aE9mQk9NLCBmYWxzZSwgbV9jb250
ZW50VHlwZSA9PSBYTUwgJiYgIW1fdXNlTGVuaWVudFhNTERlY29kaW5nLCBtX3Nhd0Vycm9yKTsK
QEAgLTY0NywxNSArNjQyLDE0IEBAIFN0cmluZyBUZXh0UmVzb3VyY2VEZWNvZGVyOjpkZWNvZGUo
Y29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbikKIAogU3RyaW5nIFRleHRSZXNvdXJjZURlY29k
ZXI6OmZsdXNoKCkKIHsKLSAgIC8vIElmIHdlIGNhbiBub3QgaWRlbnRpZnkgdGhlIGVuY29kaW5n
IGV2ZW4gYWZ0ZXIgYSBkb2N1bWVudCBpcyBjb21wbGV0ZWx5Ci0gICAvLyBsb2FkZWQsIHdlIG5l
ZWQgdG8gZGV0ZWN0IHRoZSBlbmNvZGluZyBpZiBvdGhlciBjb25kaXRpb25zIGZvcgotICAgLy8g
YXV0b2RldGVjdGlvbiBpcyBzYXRpc2ZpZWQuCisgICAgLy8gSWYgd2UgY2FuIG5vdCBpZGVudGlm
eSB0aGUgZW5jb2RpbmcgZXZlbiBhZnRlciBhIGRvY3VtZW50IGlzIGNvbXBsZXRlbHkKKyAgICAv
LyBsb2FkZWQsIHdlIG5lZWQgdG8gZGV0ZWN0IHRoZSBlbmNvZGluZyBpZiBvdGhlciBjb25kaXRp
b25zIGZvcgorICAgIC8vIGF1dG9kZXRlY3Rpb24gaXMgc2F0aXNmaWVkLgogICAgIGlmIChtX2J1
ZmZlci5zaXplKCkgJiYgc2hvdWxkQXV0b0RldGVjdCgpCiAgICAgICAgICYmICgoIW1fY2hlY2tl
ZEZvckhlYWRDaGFyc2V0ICYmIChtX2NvbnRlbnRUeXBlID09IEhUTUwgfHwgbV9jb250ZW50VHlw
ZSA9PSBYTUwpKSB8fCAoIW1fY2hlY2tlZEZvckNTU0NoYXJzZXQgJiYgKG1fY29udGVudFR5cGUg
PT0gQ1NTKSkpKSB7Ci0gICAgICAgICBUZXh0RW5jb2RpbmcgZGV0ZWN0ZWRFbmNvZGluZzsKLSAg
ICAgICAgIGlmIChkZXRlY3RUZXh0RW5jb2RpbmcobV9idWZmZXIuZGF0YSgpLCBtX2J1ZmZlci5z
aXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faGludEVuY29kaW5nLCAm
ZGV0ZWN0ZWRFbmNvZGluZykpCi0gICAgICAgICAgICAgc2V0RW5jb2RpbmcoZGV0ZWN0ZWRFbmNv
ZGluZywgQXV0b0RldGVjdGVkRW5jb2RpbmcpOworICAgICAgICBUZXh0RW5jb2RpbmcgZGV0ZWN0
ZWRFbmNvZGluZzsKKyAgICAgICAgaWYgKGRldGVjdFRleHRFbmNvZGluZyhtX2J1ZmZlci5kYXRh
KCksIG1fYnVmZmVyLnNpemUoKSwgbV9wYXJlbnRGcmFtZUF1dG9EZXRlY3RlZEVuY29kaW5nLCAm
ZGV0ZWN0ZWRFbmNvZGluZykpCisgICAgICAgICAgICBzZXRFbmNvZGluZyhkZXRlY3RlZEVuY29k
aW5nLCBBdXRvRGV0ZWN0ZWRFbmNvZGluZyk7CiAgICAgfQogCiAgICAgaWYgKCFtX2NvZGVjKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmgKaW5kZXggOThlYzky
NTdhYWQwZTM5YmM5MGQ5YmRiMGI3MDQ5NDgyYTNlODNhZC4uMWRlMjI1MjFjZjBmNGNmMTNmZGQ1
MjFhM2I5NmRmYzI2OTFkMTc2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Rl
eHRSZXNvdXJjZURlY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291
cmNlRGVjb2Rlci5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDE5OTkg
TGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKICAgICBDb3B5cmlnaHQgKEMpIDIwMDYg
QWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQotICAgIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgQ29weXJpZ2h0IChD
KSAyMDA2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yOCw2ICsyOCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhU
TUxNZXRhQ2hhcnNldFBhcnNlcjsKK2NsYXNzIFRleHRDb2RlYzsKIAogY2xhc3MgVGV4dFJlc291
cmNlRGVjb2RlciA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHRSZXNvdXJjZURlY29kZXI+IHsKIHB1
YmxpYzoKQEAgLTQyLDM1ICs0MywyNiBAQCBwdWJsaWM6CiAgICAgICAgIEVuY29kaW5nRnJvbVBh
cmVudEZyYW1lCiAgICAgfTsKIAotICAgIHN0YXRpYyBSZWY8VGV4dFJlc291cmNlRGVjb2Rlcj4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYgZGVmYXVs
dEVuY29kaW5nID0gVGV4dEVuY29kaW5nKCksIGJvb2wgdXNlc0VuY29kaW5nRGV0ZWN0b3IgPSBm
YWxzZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRleHRSZXNvdXJjZURl
Y29kZXIobWltZVR5cGUsIGRlZmF1bHRFbmNvZGluZywgdXNlc0VuY29kaW5nRGV0ZWN0b3IpKTsK
LSAgICB9CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxUZXh0UmVzb3VyY2VEZWNvZGVy
PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVGV4dEVuY29kaW5nJiBkZWZh
dWx0RW5jb2RpbmcgPSB7IH0sIGJvb2wgdXNlc0VuY29kaW5nRGV0ZWN0b3IgPSBmYWxzZSk7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgflRleHRSZXNvdXJjZURlY29kZXIoKTsKIAogICAgIHZvaWQgc2V0
RW5jb2RpbmcoY29uc3QgVGV4dEVuY29kaW5nJiwgRW5jb2RpbmdTb3VyY2UpOwogICAgIGNvbnN0
IFRleHRFbmNvZGluZyYgZW5jb2RpbmcoKSBjb25zdCB7IHJldHVybiBtX2VuY29kaW5nOyB9CiAK
LSAgICBib29sIGhhc0VxdWFsRW5jb2RpbmdGb3JDaGFyc2V0KGNvbnN0IFN0cmluZyYpIGNvbnN0
OworICAgIGJvb2wgaGFzRXF1YWxFbmNvZGluZ0ZvckNoYXJzZXQoY29uc3QgU3RyaW5nJiBjaGFy
c2V0KSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBkZWNvZGUoY29uc3QgY2hh
ciogZGF0YSwgc2l6ZV90IGxlbmd0aCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGZsdXNo
KCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgZGVjb2RlQW5kRmx1c2goY29uc3QgY2hh
ciogZGF0YSwgc2l6ZV90IGxlbmd0aCk7CiAKLSAgICB2b2lkIHNldEhpbnRFbmNvZGluZyhjb25z
dCBUZXh0UmVzb3VyY2VEZWNvZGVyKiBoaW50RGVjb2RlcikKLSAgICB7Ci0gICAgICAgIC8vIGhp
bnRFbmNvZGluZyBpcyBmb3IgdXNlIHdpdGggYXV0b2RldGVjdGlvbiwgd2hpY2ggc2hvdWxkIGJl
IAotICAgICAgICAvLyBvbmx5IGludm9rZWQgd2hlbiBoaW50RW5jb2RpbmcgY29tZXMgZnJvbSBh
dXRvLWRldGVjdGlvbi4KLSAgICAgICAgaWYgKGhpbnREZWNvZGVyICYmIGhpbnREZWNvZGVyLT5t
X3NvdXJjZSA9PSBBdXRvRGV0ZWN0ZWRFbmNvZGluZykKLSAgICAgICAgICAgIG1faGludEVuY29k
aW5nID0gaGludERlY29kZXItPmVuY29kaW5nKCkubmFtZSgpOwotICAgIH0KKyAgICB2b2lkIHNl
dEhpbnRFbmNvZGluZyhjb25zdCBUZXh0UmVzb3VyY2VEZWNvZGVyKiBwYXJlbnRGcmFtZURlY29k
ZXIpOwogICAgCiAgICAgdm9pZCB1c2VMZW5pZW50WE1MRGVjb2RpbmcoKSB7IG1fdXNlTGVuaWVu
dFhNTERlY29kaW5nID0gdHJ1ZTsgfQogICAgIGJvb2wgc2F3RXJyb3IoKSBjb25zdCB7IHJldHVy
biBtX3Nhd0Vycm9yOyB9CiAKIHByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgVGV4dFJlc291
cmNlRGVjb2Rlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBUZXh0RW5jb2RpbmcmIGRl
ZmF1bHRFbmNvZGluZywgYm9vbCB1c2VzRW5jb2RpbmdEZXRlY3Rvcik7CisgICAgVGV4dFJlc291
cmNlRGVjb2Rlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBUZXh0RW5jb2RpbmcmIGRl
ZmF1bHRFbmNvZGluZywgYm9vbCB1c2VzRW5jb2RpbmdEZXRlY3Rvcik7CiAKICAgICBlbnVtIENv
bnRlbnRUeXBlIHsgUGxhaW5UZXh0LCBIVE1MLCBYTUwsIENTUyB9OyAvLyBQbGFpblRleHQgb25s
eSBjaGVja3MgZm9yIEJPTS4KICAgICBzdGF0aWMgQ29udGVudFR5cGUgZGV0ZXJtaW5lQ29udGVu
dFR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CkBAIC04NiwxNyArNzgsMjIgQEAgcHJpdmF0
ZToKICAgICBDb250ZW50VHlwZSBtX2NvbnRlbnRUeXBlOwogICAgIFRleHRFbmNvZGluZyBtX2Vu
Y29kaW5nOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0Q29kZWM+IG1fY29kZWM7Ci0gICAgRW5j
b2RpbmdTb3VyY2UgbV9zb3VyY2U7Ci0gICAgY29uc3QgY2hhciogbV9oaW50RW5jb2Rpbmc7Ci0g
ICAgVmVjdG9yPGNoYXI+IG1fYnVmZmVyOwotICAgIGJvb2wgbV9jaGVja2VkRm9yQk9NOwotICAg
IGJvb2wgbV9jaGVja2VkRm9yQ1NTQ2hhcnNldDsKLSAgICBib29sIG1fY2hlY2tlZEZvckhlYWRD
aGFyc2V0OwotICAgIGJvb2wgbV91c2VMZW5pZW50WE1MRGVjb2Rpbmc7IC8vIERvbid0IHN0b3Ag
b24gWE1MIGRlY29kaW5nIGVycm9ycy4KLSAgICBib29sIG1fc2F3RXJyb3I7Ci0gICAgYm9vbCBt
X3VzZXNFbmNvZGluZ0RldGVjdG9yOwotCiAgICAgc3RkOjp1bmlxdWVfcHRyPEhUTUxNZXRhQ2hh
cnNldFBhcnNlcj4gbV9jaGFyc2V0UGFyc2VyOworICAgIEVuY29kaW5nU291cmNlIG1fc291cmNl
IHsgRGVmYXVsdEVuY29kaW5nIH07CisgICAgY29uc3QgY2hhciogbV9wYXJlbnRGcmFtZUF1dG9E
ZXRlY3RlZEVuY29kaW5nIHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxjaGFyPiBtX2J1ZmZlcjsK
KyAgICBib29sIG1fY2hlY2tlZEZvckJPTSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2NoZWNrZWRG
b3JDU1NDaGFyc2V0IHsgZmFsc2UgfTsKKyAgICBib29sIG1fY2hlY2tlZEZvckhlYWRDaGFyc2V0
IHsgZmFsc2UgfTsKKyAgICBib29sIG1fdXNlTGVuaWVudFhNTERlY29kaW5nIHsgZmFsc2UgfTsg
Ly8gRG9uJ3Qgc3RvcCBvbiBYTUwgZGVjb2RpbmcgZXJyb3JzLgorICAgIGJvb2wgbV9zYXdFcnJv
ciB7IGZhbHNlIH07CisgICAgYm9vbCBtX3VzZXNFbmNvZGluZ0RldGVjdG9yIHsgZmFsc2UgfTsK
IH07CiAKK2lubGluZSB2b2lkIFRleHRSZXNvdXJjZURlY29kZXI6OnNldEhpbnRFbmNvZGluZyhj
b25zdCBUZXh0UmVzb3VyY2VEZWNvZGVyKiBwYXJlbnRGcmFtZURlY29kZXIpCit7CisgICAgaWYg
KHBhcmVudEZyYW1lRGVjb2RlciAmJiBwYXJlbnRGcmFtZURlY29kZXItPm1fc291cmNlID09IEF1
dG9EZXRlY3RlZEVuY29kaW5nKQorICAgICAgICBtX3BhcmVudEZyYW1lQXV0b0RldGVjdGVkRW5j
b2RpbmcgPSBwYXJlbnRGcmFtZURlY29kZXItPmVuY29kaW5nKCkubmFtZSgpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBw
Y2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAppbmRleCAxNTNlODg0MDIxYmQ3
ODMyODU4ODZmYTcyZmM4MmM0ZTU0NjEyNjc1Li45YzFjYzM4MGExMWFjNmQzODE0ZjczNDEyYmEw
MTQ4MTBmMDBjOWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKQEAgLTM4LDcgKzM4LDYgQEAKICNp
bmNsdWRlICJTZWN1cml0eU9yaWdpbkRhdGEuaCIKICNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9VVUlELmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVUcmVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVUcmVlLmNwcApp
bmRleCAzMGQxZGNkZTA1MDIzNjMyMTRkZjcwZGRjYzU4YWNmNGY5YWJiYTIwLi4zMDNjNTFhM2Jl
OTdkYjVmMjU2YzU0OGEyZTc4ZDhlNGZkMDA4YTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVHJlZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVRyZWUu
Y3BwCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VH
cm91cC5oIgogI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlU2VyaWFsaXplci5jcHAKaW5kZXggZWMxMGNkNWZmZjBmZTRkNWNmOTJiMTFmZjM2ZWI1OTdk
NjQ4NGRiNy4uNzFlYTI3MGY1Mzg4NGQ5ZjM1YmE4NDJhZjY3MjRiNjg4NjEyYmYyNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKQEAgLTE5OSw4ICsxOTksNyBAQCB2b2lk
IFBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemVGcmFtZShGcmFtZSogZnJhbWUpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgU3RyaW5nIHRleHQgPSBhY2N1bXVsYXRvci5zZXJpYWxpemVOb2Rl
cygqZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpLCBJbmNsdWRlTm9kZSk7Ci0gICAgQ1N0cmlu
ZyBmcmFtZUhUTUwgPSB0ZXh0RW5jb2RpbmcuZW5jb2RlKHRleHQsIEVudGl0aWVzRm9yVW5lbmNv
ZGFibGVzKTsKLSAgICBtX3Jlc291cmNlcy5hcHBlbmQoeyB1cmwsIGRvY3VtZW50LT5zdWdnZXN0
ZWRNSU1FVHlwZSgpLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShmcmFtZUhUTUwuZGF0YSgpLCBmcmFt
ZUhUTUwubGVuZ3RoKCkpIH0pOworICAgIG1fcmVzb3VyY2VzLmFwcGVuZCh7IHVybCwgZG9jdW1l
bnQtPnN1Z2dlc3RlZE1JTUVUeXBlKCksIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHRleHRFbmNvZGlu
Zy5lbmNvZGUodGV4dCwgVW5lbmNvZGFibGVIYW5kbGluZzo6RW50aXRpZXMpKSB9KTsKICAgICBt
X3Jlc291cmNlVVJMcy5hZGQodXJsKTsKIAogICAgIGZvciAoYXV0byYgbm9kZSA6IG5vZGVzKSB7
CkBAIC0yNjQsOSArMjYzLDcgQEAgdm9pZCBQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplQ1NTU3R5
bGVTaGVldChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0LCBjb25zdCBVUkwKICAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCBjaGVjayB3aGV0aGVyIGEgY2hhcnNldCBoYXMgYmVlbiBzcGVjaWZp
ZWQgYW5kIGlmIG5vbmUgd2FzIGZvdW5kIGFkZCBvbmUuCiAgICAgICAgIFRleHRFbmNvZGluZyB0
ZXh0RW5jb2Rpbmcoc3R5bGVTaGVldC0+Y29udGVudHMoKS5jaGFyc2V0KCkpOwogICAgICAgICBB
U1NFUlQodGV4dEVuY29kaW5nLmlzVmFsaWQoKSk7Ci0gICAgICAgIFN0cmluZyB0ZXh0U3RyaW5n
ID0gY3NzVGV4dC50b1N0cmluZygpOwotICAgICAgICBDU3RyaW5nIHRleHQgPSB0ZXh0RW5jb2Rp
bmcuZW5jb2RlKHRleHRTdHJpbmcsIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKLSAgICAgICAg
bV9yZXNvdXJjZXMuYXBwZW5kKHsgdXJsLCBBU0NJSUxpdGVyYWwgeyAidGV4dC9jc3MiIH0sIFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKHRleHQuZGF0YSgpLCB0ZXh0Lmxlbmd0aCgpKSB9KTsKKyAgICAg
ICAgbV9yZXNvdXJjZXMuYXBwZW5kKHsgdXJsLCBBU0NJSUxpdGVyYWwgeyAidGV4dC9jc3MiIH0s
IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHRleHRFbmNvZGluZy5lbmNvZGUoY3NzVGV4dC50b1N0cmlu
ZygpLCBVbmVuY29kYWJsZUhhbmRsaW5nOjpFbnRpdGllcykpIH0pOwogICAgICAgICBtX3Jlc291
cmNlVVJMcy5hZGQodXJsKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9j
c3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAppbmRleCBhNDY0ODkwNzQyY2E3Mzc5YjdhZmVm
NDQ0M2ZkMWIxZTk3NWY4NTUyLi4yM2MzZjI3YzM2ZjYyYTYyNTMzMTA0MGViZmFlMTA0NWJkOWQw
NzZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQ
b2xpY3kuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBv
bGljeS5jcHAKQEAgLTMzMiwxMSArMzMyLDExIEBAIENvbnRlbnRTZWN1cml0eVBvbGljeTo6SGFz
aEluRW5mb3JjZWRBbmRSZXBvcnRPbmx5UG9saWNpZXNQYWlyIENvbnRlbnRTZWN1cml0eVBvCiAK
ICAgICAvLyBGSVhNRTogQ29tcHV0ZSB0aGUgZGlnZXN0IHdpdGggcmVzcGVjdCB0byB0aGUgcmF3
IGJ5dGVzIHJlY2VpdmVkIGZyb20gdGhlIHBhZ2UuCiAgICAgLy8gU2VlIDxodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1MTg0Pi4KLSAgICBDU3RyaW5nIGNvbnRlbnRD
U3RyaW5nID0gZW5jb2RpbmdUb1VzZS5lbmNvZGUoY29udGVudCwgRW50aXRpZXNGb3JVbmVuY29k
YWJsZXMpOworICAgIGF1dG8gZW5jb2RlZENvbnRlbnQgPSBlbmNvZGluZ1RvVXNlLmVuY29kZShj
b250ZW50LCBVbmVuY29kYWJsZUhhbmRsaW5nOjpFbnRpdGllcyk7CiAgICAgYm9vbCBmb3VuZEhh
c2hJbkVuZm9yY2VkUG9saWNpZXMgPSBmYWxzZTsKICAgICBib29sIGZvdW5kSGFzaEluUmVwb3J0
T25seVBvbGljaWVzID0gZmFsc2U7CiAgICAgZm9yIChhdXRvIGFsZ29yaXRobSA6IGFsZ29yaXRo
bXMpIHsKLSAgICAgICAgQ29udGVudFNlY3VyaXR5UG9saWN5SGFzaCBoYXNoID0gY3J5cHRvZ3Jh
cGhpY0RpZ2VzdEZvckJ5dGVzKGFsZ29yaXRobSwgY29udGVudENTdHJpbmcuZGF0YSgpLCBjb250
ZW50Q1N0cmluZy5sZW5ndGgoKSk7CisgICAgICAgIENvbnRlbnRTZWN1cml0eVBvbGljeUhhc2gg
aGFzaCA9IGNyeXB0b2dyYXBoaWNEaWdlc3RGb3JCeXRlcyhhbGdvcml0aG0sIGVuY29kZWRDb250
ZW50LmRhdGEoKSwgZW5jb2RlZENvbnRlbnQuc2l6ZSgpKTsKICAgICAgICAgaWYgKCFmb3VuZEhh
c2hJbkVuZm9yY2VkUG9saWNpZXMgJiYgYWxsUG9saWNpZXNXaXRoRGlzcG9zaXRpb25BbGxvdyhD
b250ZW50U2VjdXJpdHlQb2xpY3k6OkRpc3Bvc2l0aW9uOjpFbmZvcmNlLCBzdGQ6OmZvcndhcmQ8
UHJlZGljYXRlPihwcmVkaWNhdGUpLCBoYXNoKSkKICAgICAgICAgICAgIGZvdW5kSGFzaEluRW5m
b3JjZWRQb2xpY2llcyA9IHRydWU7CiAgICAgICAgIGlmICghZm91bmRIYXNoSW5SZXBvcnRPbmx5
UG9saWNpZXMgJiYgYWxsUG9saWNpZXNXaXRoRGlzcG9zaXRpb25BbGxvdyhDb250ZW50U2VjdXJp
dHlQb2xpY3k6OkRpc3Bvc2l0aW9uOjpSZXBvcnRPbmx5LCBzdGQ6OmZvcndhcmQ8UHJlZGljYXRl
PihwcmVkaWNhdGUpLCBoYXNoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0ZpbGVIYW5kbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUhhbmRsZS5jcHAK
aW5kZXggMmEwYTYzNGM2ZjY4MTJjZjZmY2U3YjIwODFjZDllYWI4YmFlNTkwMy4uMWMzZjUzMjg5
ZDU0MGYxNTA5M2M0MTJlNDQxY2U2ZmNkNjA5N2JkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vRmlsZUhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
RmlsZUhhbmRsZS5jcHAKQEAgLTI5LDggKzI5LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJGaWxlSGFuZGxlLmgiCiAKLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+Ci0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRmlsZUhhbmRsZTo6RmlsZUhhbmRsZShjb25zdCBTdHJp
bmcmIHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZSBtb2RlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKaW5kZXggMGQzNWIyMTNiZmMyMWQ5ZDhhOWIxZGExZjNi
MmJjOTA1NzRiOTI1ZS4uZDY2YjUzMDllMWIxYmY2ZGFiNWVmNDY0ZTE4ZjMwYmMzZGVkYjk5MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCkBAIC03NCw2ICs3NCwx
MiBAQCBSZWY8U2hhcmVkQnVmZmVyPiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShWZWN0b3I8Y2hhcj4m
JiB2ZWN0b3IpCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVkQnVmZmVyKFdURk1vdmUo
dmVjdG9yKSkpOwogfQogCisvLyBGSVhNRTogTW92ZSB0aGUgd2hvbGUgY2xhc3MgZnJvbSBWZWN0
b3I8Y2hhcj4gdG8gVmVjdG9yPHVpbnQ4X3Q+IGFuZCBtYWtlIHRoaXMgZWZmaWNpZW50LCByZXBs
YWNpbmcgdGhlIFZlY3RvcjxjaGFyPiB2ZXJzaW9uIGFib3ZlLgorUmVmPFNoYXJlZEJ1ZmZlcj4g
U2hhcmVkQnVmZmVyOjpjcmVhdGUoVmVjdG9yPHVpbnQ4X3Q+JiYgdmVjdG9yKQoreworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlciB7IHZlY3Rvci5kYXRhKCksIHZlY3Rvci5z
aXplKCkgfSk7Cit9CisKIHZvaWQgU2hhcmVkQnVmZmVyOjpjb21iaW5lSW50b09uZVNlZ21lbnQo
KSBjb25zdAogewogI2lmICFBU1NFUlRfRElTQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hh
cmVkQnVmZmVyLmgKaW5kZXggMzRmZjcxYzYzODZkODJjZWM3NWRmYTI1YzVkMjBhMGE0ZmVmYTI0
Mi4uMzA1YTkxMzM1MmQyMmUxZTFkNzMxYTA3ODkzZjYzN2I3ZmI3NzM1ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKQEAgLTYwLDcgKzYwLDggQEAgcHVibGljOgogICAg
IHN0YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBjcmVhdGVXaXRoQ29udGVudHNPZkZpbGUoY29u
c3QgU3RyaW5nJiBmaWxlUGF0aCk7CiAKICAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3Jl
YXRlKFZlY3RvcjxjaGFyPiYmKTsKLSAgICAKKyAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4g
Y3JlYXRlKFZlY3Rvcjx1aW50OF90PiYmKTsKKwogI2lmIFVTRShGT1VOREFUSU9OKQogICAgIFJl
dGFpblB0cjxOU0RhdGE+IGNyZWF0ZU5TRGF0YSgpIGNvbnN0OwogICAgIFJldGFpblB0cjxOU0Fy
cmF5PiBjcmVhdGVOU0RhdGFBcnJheSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBh
cnNlci5jcHAKaW5kZXggNjcyODYxMmVkMDMyNDlmZjk3NjI4ODIxNWRjOWI0NTEzY2E5N2QxYS4u
MDI3OTkxZDFlZWZiNDE3ZWUyYzlhZjcyYmUxZjU4OTc0MTk3MWUwNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9VUkxQYXJzZXIuY3BwCkBAIC02MjEsOSArNjIxLDkgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KIHZvaWQgVVJMUGFyc2VyOjplbmNvZGVRdWVyeShjb25zdCBWZWN0
b3I8VUNoYXI+JiBzb3VyY2UsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIENvZGVQb2lu
dEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+IGl0ZXJhdG9yKQogewogICAgIC8vIEZJWE1FOiBJdCBp
cyB1bmNsZWFyIGluIHRoZSBzcGVjIHdoYXQgdG8gZG8gd2hlbiBlbmNvZGluZyBmYWlscy4gVGhl
IGJlaGF2aW9yIHNob3VsZCBiZSBzcGVjaWZpZWQgYW5kIHRlc3RlZC4KLSAgICBDU3RyaW5nIGVu
Y29kZWQgPSBlbmNvZGluZy5lbmNvZGUoU3RyaW5nVmlldyhzb3VyY2UuZGF0YSgpLCBzb3VyY2Uu
c2l6ZSgpKSwgVVJMRW5jb2RlZEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKLSAgICBjb25zdCBj
aGFyKiBkYXRhID0gZW5jb2RlZC5kYXRhKCk7Ci0gICAgc2l6ZV90IGxlbmd0aCA9IGVuY29kZWQu
bGVuZ3RoKCk7CisgICAgYXV0byBlbmNvZGVkID0gZW5jb2RpbmcuZW5jb2RlKFN0cmluZ1ZpZXco
c291cmNlLmRhdGEoKSwgc291cmNlLnNpemUoKSksIFVuZW5jb2RhYmxlSGFuZGxpbmc6OlVSTEVu
Y29kZWRFbnRpdGllcyk7CisgICAgYXV0byogZGF0YSA9IGVuY29kZWQuZGF0YSgpOworICAgIHNp
emVfdCBsZW5ndGggPSBlbmNvZGVkLnNpemUoKTsKICAgICAKICAgICBpZiAoIWxlbmd0aCA9PSAh
aXRlcmF0b3IuYXRFbmQoKSkgewogICAgICAgICBzeW50YXhWaW9sYXRpb24oaXRlcmF0b3IpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakMubW0KaW5kZXggYWUyM2Q4YjNkZmYyODM3NzM5MzFhZWU2OTgxZTg5
ZGM4OThlMzE2ZS4uZjViNzRmYWFiMTViYTAyNzdhMjYwMzIwNGMyN2VlZjVhMWI0ODRiZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDLm1tCkBAIC0xNzg3LDExICsxNzg3LDEwIEBAIGJvb2wgTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2hvdWxkV2FpdEZvckxvYWRpbmdPZlJlc291
cmNlKEFWQXNzZXRSCiAKICAgICBpZiAoc2NoZW1lID09ICJjbGVhcmtleSIpIHsKICAgICAgICAg
U3RyaW5nIGtleUlEID0gW1tbYXZSZXF1ZXN0IHJlcXVlc3RdIFVSTF0gcmVzb3VyY2VTcGVjaWZp
ZXJdOwotICAgICAgICBTdHJpbmdWaWV3IGtleUlEVmlldyhrZXlJRCk7Ci0gICAgICAgIENTdHJp
bmcgdXRmOEVuY29kZWRLZXlJZCA9IFVURjhFbmNvZGluZygpLmVuY29kZShrZXlJRFZpZXcsIFVS
TEVuY29kZWRFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7CisgICAgICAgIGF1dG8gZW5jb2RlZEtl
eUlkID0gVVRGOEVuY29kaW5nKCkuZW5jb2RlKGtleUlELCBVbmVuY29kYWJsZUhhbmRsaW5nOjpV
UkxFbmNvZGVkRW50aXRpZXMpOwogCi0gICAgICAgIFJlZlB0cjxVaW50OEFycmF5PiBpbml0RGF0
YSA9IFVpbnQ4QXJyYXk6OmNyZWF0ZSh1dGY4RW5jb2RlZEtleUlkLmxlbmd0aCgpKTsKLSAgICAg
ICAgaW5pdERhdGEtPnNldFJhbmdlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSlNDOjpVaW50OEFk
YXB0b3I6OlR5cGUqPih1dGY4RW5jb2RlZEtleUlkLmRhdGEoKSksIHV0ZjhFbmNvZGVkS2V5SWQu
bGVuZ3RoKCksIDApOworICAgICAgICBhdXRvIGluaXREYXRhID0gVWludDhBcnJheTo6Y3JlYXRl
KGVuY29kZWRLZXlJZC5zaXplKCkpOworICAgICAgICBpbml0RGF0YS0+c2V0UmFuZ2UoZW5jb2Rl
ZEtleUlkLmRhdGEoKSwgZW5jb2RlZEtleUlkLnNpemUoKSwgMCk7CiAKICAgICAgICAgYXV0byBr
ZXlEYXRhID0gcGxheWVyKCktPmNhY2hlZEtleUZvcktleUlkKGtleUlEKTsKICAgICAgICAgaWYg
KGtleURhdGEpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL1BsYXRmb3JtQ0FMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9QbGF0Zm9ybUNBTGF5ZXIuY3BwCmluZGV4IDI3Y2VlZDJlNzExN2Q4MWRjMDg1NDE5Yzcz
OWVjZjhhMmM5ZWEyMTIuLmM0MmY4ODljNDhkM2M5ZmNiNTI5NGZlM2I4MDk0YmRlMjg4NjUwNmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3Jt
Q0FMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxh
dGZvcm1DQUxheWVyLmNwcApAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIlBsYXRmb3JtQ0FM
YXllckNsaWVudC5oIgogI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+
CiAjaW5jbHVkZSA8Q29yZVRleHQvQ29yZVRleHQuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiAjaWYgUExBVEZPUk0o
V0lOKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0
YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAppbmRl
eCAzYzhlZTA4ZDE1OTE5M2RhMGZjNzA1YTBhY2ZkODM0MjhlNWI3YzJjLi5mNDU4MjJiYWZmNWYw
ODAzYzBjYTExMDBlZmU4Nzg3ODkyNjYzYjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0Zvcm1EYXRhLmNwcApAQCAtODEsMTYgKzgxLDE3IEBAIFJlZjxGb3JtRGF0YT4g
Rm9ybURhdGE6OmNyZWF0ZShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkKIAogUmVmPEZv
cm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IENTdHJpbmcmIHN0cmluZykKIHsKLSAgICBh
dXRvIHJlc3VsdCA9IGNyZWF0ZSgpOwotICAgIHJlc3VsdC0+YXBwZW5kRGF0YShzdHJpbmcuZGF0
YSgpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGNy
ZWF0ZShzdHJpbmcuZGF0YSgpLCBzdHJpbmcubGVuZ3RoKCkpOwogfQogCiBSZWY8Rm9ybURhdGE+
IEZvcm1EYXRhOjpjcmVhdGUoY29uc3QgVmVjdG9yPGNoYXI+JiB2ZWN0b3IpCiB7Ci0gICAgYXV0
byByZXN1bHQgPSBjcmVhdGUoKTsKLSAgICByZXN1bHQtPmFwcGVuZERhdGEodmVjdG9yLmRhdGEo
KSwgdmVjdG9yLnNpemUoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gY3JlYXRl
KHZlY3Rvci5kYXRhKCksIHZlY3Rvci5zaXplKCkpOworfQorCitSZWY8Rm9ybURhdGE+IEZvcm1E
YXRhOjpjcmVhdGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2ZWN0b3IpCit7CisgICAgcmV0dXJu
IGNyZWF0ZSh2ZWN0b3IuZGF0YSgpLCB2ZWN0b3Iuc2l6ZSgpKTsKIH0KIAogUmVmPEZvcm1EYXRh
PiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IERPTUZvcm1EYXRhJiBmb3JtRGF0YSwgRW5jb2RpbmdU
eXBlIGVuY29kaW5nVHlwZSkKQEAgLTExNCw3ICsxMTUsOSBAQCBSZWY8Rm9ybURhdGE+IEZvcm1E
YXRhOjpjb3B5KCkgY29uc3QKIAogUmVmPEZvcm1EYXRhPiBGb3JtRGF0YTo6aXNvbGF0ZWRDb3B5
KCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaXNvbGF0ZWRDb3B5KCkgKGhpc3RvcmljYWxseSBk
ZWVwQ29weSgpKSBvbmx5IGNvcGllcyBjZXJ0YWluIHZhbHVlcyBmcm9tIGB0aGlzYC4gV2h5IGlz
IHRoYXQ/CisgICAgLy8gRklYTUU6IGlzb2xhdGVkQ29weSgpIGRvZXMgbm90IGNvcHkgbV9pZGVu
dGlmaWVyLCBtX2JvdW5kYXJ5LCBvciBtX2NvbnRhaW5zUGFzc3dvcmREYXRhLgorICAgIC8vIElz
IGFsbCBvZiB0aGF0IGNvcnJlY3QgYW5kIGludGVudGlvbmFsPworCiAgICAgYXV0byBmb3JtRGF0
YSA9IGNyZWF0ZSgpOwogCiAgICAgZm9ybURhdGEtPm1fYWx3YXlzU3RyZWFtID0gbV9hbHdheXNT
dHJlYW07CkBAIC0xODMsOSArMTg2LDkgQEAgdm9pZCBGb3JtRGF0YTo6YXBwZW5kQmxvYihjb25z
dCBVUkwmIGJsb2JVUkwpCiAgICAgbV9sZW5ndGhJbkJ5dGVzID0gc3RkOjpudWxsb3B0OwogfQog
Ci1zdGF0aWMgQ1N0cmluZyBub3JtYWxpemVTdHJpbmdEYXRhKFRleHRFbmNvZGluZyYgZW5jb2Rp
bmcsIGNvbnN0IFN0cmluZyYgdmFsdWUpCitzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IG5vcm1hbGl6
ZVN0cmluZ0RhdGEoVGV4dEVuY29kaW5nJiBlbmNvZGluZywgY29uc3QgU3RyaW5nJiB2YWx1ZSkK
IHsKLSAgICByZXR1cm4gbm9ybWFsaXplTGluZUVuZGluZ3NUb0NSTEYoZW5jb2RpbmcuZW5jb2Rl
KHZhbHVlLCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcykpOworICAgIHJldHVybiBub3JtYWxpemVM
aW5lRW5kaW5nc1RvQ1JMRihlbmNvZGluZy5lbmNvZGUodmFsdWUsIFVuZW5jb2RhYmxlSGFuZGxp
bmc6OkVudGl0aWVzKSk7CiB9CiAKIHZvaWQgRm9ybURhdGE6OmFwcGVuZE11bHRpUGFydEZpbGVW
YWx1ZShjb25zdCBGaWxlJiBmaWxlLCBWZWN0b3I8Y2hhcj4mIGhlYWRlciwgVGV4dEVuY29kaW5n
JiBlbmNvZGluZywgRG9jdW1lbnQqIGRvY3VtZW50KQpAQCAtMjMwLDcgKzIzMyw3IEBAIHZvaWQg
Rm9ybURhdGE6OmFwcGVuZE11bHRpUGFydFN0cmluZ1ZhbHVlKGNvbnN0IFN0cmluZyYgc3RyaW5n
LCBWZWN0b3I8Y2hhcj4mIGhlCiAgICAgYXBwZW5kRGF0YShoZWFkZXIuZGF0YSgpLCBoZWFkZXIu
c2l6ZSgpKTsKIAogICAgIGF1dG8gbm9ybWFsaXplZFN0cmluZ0RhdGEgPSBub3JtYWxpemVTdHJp
bmdEYXRhKGVuY29kaW5nLCBzdHJpbmcpOwotICAgIGFwcGVuZERhdGEobm9ybWFsaXplZFN0cmlu
Z0RhdGEuZGF0YSgpLCBub3JtYWxpemVkU3RyaW5nRGF0YS5sZW5ndGgoKSk7CisgICAgYXBwZW5k
RGF0YShub3JtYWxpemVkU3RyaW5nRGF0YS5kYXRhKCksIG5vcm1hbGl6ZWRTdHJpbmdEYXRhLnNp
emUoKSk7CiB9CiAKIHZvaWQgRm9ybURhdGE6OmFwcGVuZE11bHRpUGFydEtleVZhbHVlUGFpckl0
ZW1zKGNvbnN0IERPTUZvcm1EYXRhJiBmb3JtRGF0YSwgRG9jdW1lbnQqIGRvY3VtZW50KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oCmluZGV4IDZmOWE3YTcyYmZm
OTgyMjY1Nzk2NWQzOTA2YTE1MzJmMGRmYTU4ZjQuLmRhZDBiNDM3N2M3ODM2OWU3NWE5M2Q1NTIy
Mzg1NjRiMTNmZTJiYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvRm9ybURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1E
YXRhLmgKQEAgLTM0LDEzICszNCwxMSBAQCBjbGFzcyBGaWxlOwogY2xhc3MgU2hhcmVkQnVmZmVy
OwogY2xhc3MgVGV4dEVuY29kaW5nOwogCisvLyBGSVhNRTogQ29udmVydCB0aGlzIHRvIGEgVmFy
aWFudCBvZiBzdHJ1Y3RzIGFuZCByZW1vdmUgIlR5cGUiIGFuZCBhbHNvIHRoZSAibV8iIHByZWZp
eGVzIGZyb20gdGhlIGRhdGEgbWVtYmVycy4KKy8vIFRoZSBtZW1iZXIgZnVuY3Rpb25zIGNhbiBi
ZWNvbWUgbm9uLW1lbWJlciBmdWNudGlvbnMuCiBjbGFzcyBGb3JtRGF0YUVsZW1lbnQgewogcHVi
bGljOgotICAgIGVudW0gY2xhc3MgVHlwZSB7Ci0gICAgICAgIERhdGEsCi0gICAgICAgIEVuY29k
ZWRGaWxlLAotICAgICAgICBFbmNvZGVkQmxvYiwKLSAgICB9OworICAgIGVudW0gY2xhc3MgVHlw
ZSB7IERhdGEsIEVuY29kZWRGaWxlLCBFbmNvZGVkQmxvYiB9OwogCiAgICAgRm9ybURhdGFFbGVt
ZW50KCkKICAgICAgICAgOiBtX3R5cGUoVHlwZTo6RGF0YSkKQEAgLTc0LDEwICs3Miw4IEBAIHB1
YmxpYzoKIAogICAgIEZvcm1EYXRhRWxlbWVudCBpc29sYXRlZENvcHkoKSBjb25zdDsKIAotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+Ci0gICAgdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+Ci0gICAgc3RhdGljIHN0ZDo6b3B0
aW9uYWw8Rm9ybURhdGFFbGVtZW50PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxGb3JtRGF0YUVsZW1lbnQ+
IGRlY29kZShEZWNvZGVyJik7CiAKICAgICBUeXBlIG1fdHlwZTsKICAgICBWZWN0b3I8Y2hhcj4g
bV9kYXRhOwpAQCAtODcsOSArODMsOCBAQCBwdWJsaWM6CiAgICAgaW50NjRfdCBtX2ZpbGVMZW5n
dGg7CiAgICAgZG91YmxlIG1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZTsKICAgICAvLyBG
SVhNRTogR2VuZXJhdGVkIGZpbGUgc3VwcG9ydCBpbiBGb3JtRGF0YSBpcyBhbG1vc3QgaWRlbnRp
Y2FsIHRvIEJsb2IsIHRoZXkgc2hvdWxkIGJlIG1lcmdlZC4KLSAgICAvLyBXZSBjYW4ndCBqdXN0
IHN3aXRjaCB0byB1c2luZyBCbG9icyBmb3IgYWxsIGZpbGVzIGZvciB0d28gcmVhc29uczoKLSAg
ICAvLyAxLiBOb3QgYWxsIHBsYXRmb3JtcyBlbmFibGUgQkxPQiBzdXBwb3J0LgotICAgIC8vIDIu
IEVuY29kZWRGaWxlIGZvcm0gZGF0YSBlbGVtZW50cyBkbyBub3QgaGF2ZSBhIHZhbGlkIG1fZXhw
ZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSwgbWVhbmluZyB0aGF0IHdlIGFsd2F5cyB1cGxvYWQg
dGhlIGxhdGVzdCBjb250ZW50IGZyb20gZGlzay4KKyAgICAvLyBXZSBjYW4ndCBqdXN0IHN3aXRj
aCB0byB1c2luZyBCbG9icyBmb3IgYWxsIGZpbGVzIGJlY2F1c2UgRW5jb2RlZEZpbGUgZm9ybSBk
YXRhIGVsZW1lbnRzIGRvIG5vdAorICAgIC8vIGhhdmUgYSB2YWxpZCBtX2V4cGVjdGVkRmlsZU1v
ZGlmaWNhdGlvblRpbWUsIG1lYW5pbmcgd2UgYWx3YXlzIHVwbG9hZCB0aGUgbGF0ZXN0IGNvbnRl
bnQgZnJvbSBkaXNrLgogICAgIFN0cmluZyBtX2dlbmVyYXRlZEZpbGVuYW1lOwogICAgIGJvb2wg
bV9zaG91bGRHZW5lcmF0ZUZpbGU7CiAgICAgYm9vbCBtX293bnNHZW5lcmF0ZWRGaWxlOwpAQCAt
MTE3LDcgKzExMiw2IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9ybURhdGFFbGVt
ZW50JiBhLCBjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGIpCiAgICAgcmV0dXJuICEoYSA9PSBiKTsK
IH0KIAotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgogdm9pZCBGb3JtRGF0YUVsZW1lbnQ6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewpAQCAtMjA0LDYgKzE5OCw3IEBAIHB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZvcm1EYXRhPiBjcmVhdGUoY29u
c3Qgdm9pZCosIHNpemVfdCk7CiAgICAgc3RhdGljIFJlZjxGb3JtRGF0YT4gY3JlYXRlKGNvbnN0
IENTdHJpbmcmKTsKICAgICBzdGF0aWMgUmVmPEZvcm1EYXRhPiBjcmVhdGUoY29uc3QgVmVjdG9y
PGNoYXI+Jik7CisgICAgc3RhdGljIFJlZjxGb3JtRGF0YT4gY3JlYXRlKGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYpOwogICAgIHN0YXRpYyBSZWY8Rm9ybURhdGE+IGNyZWF0ZShjb25zdCBET01Gb3Jt
RGF0YSYsIEVuY29kaW5nVHlwZSA9IEZvcm1VUkxFbmNvZGVkKTsKICAgICBzdGF0aWMgUmVmPEZv
cm1EYXRhPiBjcmVhdGVNdWx0aVBhcnQoY29uc3QgRE9NRm9ybURhdGEmLCBEb2N1bWVudCopOwog
ICAgIFdFQkNPUkVfRVhQT1JUIH5Gb3JtRGF0YSgpOwpAQCAtMzAwLDYgKzI5NSw3IEBAIHZvaWQg
Rm9ybURhdGE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwg
bV9ib3VuZGFyeTsKICAgICBlbmNvZGVyIDw8IG1fZWxlbWVudHM7CiAgICAgZW5jb2RlciA8PCBt
X2lkZW50aWZpZXI7CisgICAgLy8gRklYTUU6IERvZXMgbm90IGVuY29kZSBtX2NvbnRhaW5zUGFz
c3dvcmREYXRhLiBXaHkgaXMgdGhhdCBPSz8KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rl
cj4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFC
dWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWls
ZGVyLmNwcAppbmRleCA2ODg4YjJjY2ViNGI5N2NjYTk1NTE4Mzc1MDRlNTFjZjY2MzEwODhhLi45
YTNjNGI1OWNkNDJhYmVmOTk2NTljYTMyOGVkMTBkZWI3MDI4MTY1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YUJ1aWxkZXIuY3BwCkBAIC0yLDcg
KzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogICAgICAgICAgIChDKSAyMDA2IEFsZXhleSBQcm9z
a3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2Jp
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20v
KQogICoKQEAgLTM2LDcgKzM2LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBIZWxw
ZXIgZnVuY3Rpb25zCituYW1lc3BhY2UgRm9ybURhdGFCdWlsZGVyIHsKKwogc3RhdGljIGlubGlu
ZSB2b2lkIGFwcGVuZChWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY2hhciBzdHJpbmcpCiB7CiAgICAg
YnVmZmVyLmFwcGVuZChzdHJpbmcpOwpAQCAtNTIsMTUgKzUzLDIyIEBAIHN0YXRpYyBpbmxpbmUg
dm9pZCBhcHBlbmQoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNvbnN0IENTdHJpbmcmIHN0cmluZykK
ICAgICBidWZmZXIuYXBwZW5kKHN0cmluZy5kYXRhKCksIHN0cmluZy5sZW5ndGgoKSk7CiB9CiAK
LXN0YXRpYyB2b2lkIGFwcGVuZFF1b3RlZFN0cmluZyhWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29u
c3QgQ1N0cmluZyYgc3RyaW5nKQorc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZChWZWN0b3I8Y2hh
cj4mIGJ1ZmZlciwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBzdHJpbmcpCit7CisgICAgYnVmZmVy
LmFwcGVuZFZlY3RvcihzdHJpbmcpOworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRRdW90ZWQoVmVj
dG9yPGNoYXI+JiBidWZmZXIsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc3RyaW5nKQogewogICAg
IC8vIEFwcGVuZCBhIHN0cmluZyBhcyBhIHF1b3RlZCB2YWx1ZSwgZXNjYXBpbmcgcXVvdGVzIGFu
ZCBsaW5lIGJyZWFrcy4KLSAgICAvLyBGSVhNRTogSXMgaXQgY29ycmVjdCB0byB1c2UgcGVyY2Vu
dCBlc2NhcGluZyBoZXJlPyBPdGhlciBicm93c2VycyBkbyBub3QgZW5jb2RlIHRoZXNlIGNoYXJh
Y3RlcnMgeWV0LAotICAgIC8vIHNvIHdlIHNob3VsZCB0ZXN0IHBvcHVsYXIgc2VydmVycyB0byBm
aW5kIG91dCBpZiB0aGVyZSBpcyBhbiBlbmNvZGluZyBmb3JtIHRoZXkgY2FuIGhhbmRsZS4KLSAg
ICBzaXplX3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgY2hhciBjID0gc3RyaW5nLmRhdGEoKVtpXTsK
LSAgICAgICAgc3dpdGNoIChjKSB7CisgICAgLy8gRklYTUU6IElzIGl0IGNvcnJlY3QgdG8gdXNl
IHBlcmNlbnQgZXNjYXBpbmcgaGVyZT8gV2hlbiB0aGlzIGNvZGUgd2FzIG9yaWdpbmFsbHkgd3Jp
dHRlbiwKKyAgICAvLyBvdGhlciBicm93c2VycyB3ZXJlIG5vdCBlbmNvZGluZyB0aGVzZSBjaGFy
YWN0ZXJzLCBzbyBzb21lb25lIHNob3VsZCB0ZXN0IHNlcnZlcnMgb3IgZG8KKyAgICAvLyByZXNl
YXJjaCB0byBmaW5kIG91dCBpZiB0aGVyZSBpcyBhbiBlbmNvZGluZyBmb3JtIHRoYXQgd29ya3Mg
d2VsbC4KKyAgICAvLyBGSVhNRTogSWYgd2Ugd2FudCB0byB1c2UgcGVyY2VudCBlc2NhcGluZyBz
ZW5zaWJseSwgd2UgbmVlZCB0byBlc2NhcGUgIiUiIGNoYXJhY3RlcnMgdG9vLgorICAgIHNpemVf
dCBzaXplID0gc3RyaW5nLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkgeworICAgICAgICBhdXRvIGNoYXJhY3RlciA9IHN0cmluZ1tpXTsKKyAgICAgICAgc3dp
dGNoIChjaGFyYWN0ZXIpIHsKICAgICAgICAgY2FzZSAweEE6CiAgICAgICAgICAgICBhcHBlbmQo
YnVmZmVyLCAiJTBBIik7CiAgICAgICAgICAgICBicmVhazsKQEAgLTcxLDEyICs3OSwzNiBAQCBz
dGF0aWMgdm9pZCBhcHBlbmRRdW90ZWRTdHJpbmcoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNvbnN0
IENTdHJpbmcmIHN0cmluZykKICAgICAgICAgICAgIGFwcGVuZChidWZmZXIsICIlMjIiKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYXBwZW5kKGJ1
ZmZlciwgYyk7CisgICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCBjaGFyYWN0ZXIpOworICAgICAg
ICB9CisgICAgfQorfQorCisvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQt
dXJsZW5jb2RlZC1ieXRlLXNlcmlhbGl6ZXIKK3N0YXRpYyB2b2lkIGFwcGVuZEZvcm1VUkxFbmNv
ZGVkKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCB1aW50OF90KiBzdHJpbmcsIHNpemVfdCBs
ZW5ndGgpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgc2FmZUNoYXJhY3RlcnNbXSA9ICItLl8q
IjsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGF1
dG8gY2hhcmFjdGVyID0gc3RyaW5nW2ldOworICAgICAgICBpZiAoaXNBU0NJSUFscGhhbnVtZXJp
YyhjaGFyYWN0ZXIpIHx8IHN0cmNocihzYWZlQ2hhcmFjdGVycywgY2hhcmFjdGVyKSkKKyAgICAg
ICAgICAgIGFwcGVuZChidWZmZXIsIGNoYXJhY3Rlcik7CisgICAgICAgIGVsc2UgaWYgKGNoYXJh
Y3RlciA9PSAnICcpCisgICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCAnKycpOworICAgICAgICBl
bHNlIGlmIChjaGFyYWN0ZXIgPT0gJ1xuJyB8fCAoY2hhcmFjdGVyID09ICdccicgJiYgKGkgKyAx
ID49IGxlbmd0aCB8fCBzdHJpbmdbaSArIDFdICE9ICdcbicpKSkKKyAgICAgICAgICAgIGFwcGVu
ZChidWZmZXIsICIlMEQlMEEiKTsgLy8gRklYTUU6IFVuY2xlYXIgZXhhY3RseSB3aGVyZSB0aGlz
IHJ1bGUgYWJvdXQgbm9ybWFsaXppbmcgbGluZSBlbmRpbmdzIHRvIENSTEYgY29tZXMgZnJvbS4K
KyAgICAgICAgZWxzZSBpZiAoY2hhcmFjdGVyICE9ICdccicpIHsKKyAgICAgICAgICAgIGFwcGVu
ZChidWZmZXIsICclJyk7CisgICAgICAgICAgICBhcHBlbmRCeXRlQXNIZXgoY2hhcmFjdGVyLCBi
dWZmZXIpOwogICAgICAgICB9CiAgICAgfQogfQogCi1WZWN0b3I8Y2hhcj4gRm9ybURhdGFCdWls
ZGVyOjpnZW5lcmF0ZVVuaXF1ZUJvdW5kYXJ5U3RyaW5nKCkKK3N0YXRpYyB2b2lkIGFwcGVuZEZv
cm1VUkxFbmNvZGVkKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCBWZWN0b3I8dWludDhfdD4m
IHN0cmluZykKK3sKKyAgICBhcHBlbmRGb3JtVVJMRW5jb2RlZChidWZmZXIsIHN0cmluZy5kYXRh
KCksIHN0cmluZy5zaXplKCkpOworfQorCitWZWN0b3I8Y2hhcj4gZ2VuZXJhdGVVbmlxdWVCb3Vu
ZGFyeVN0cmluZygpCiB7CiAgICAgVmVjdG9yPGNoYXI+IGJvdW5kYXJ5OwogCkBAIC0xMTcsMTgg
KzE0OSwxOCBAQCBWZWN0b3I8Y2hhcj4gRm9ybURhdGFCdWlsZGVyOjpnZW5lcmF0ZVVuaXF1ZUJv
dW5kYXJ5U3RyaW5nKCkKICAgICByZXR1cm4gYm91bmRhcnk7CiB9CiAKLXZvaWQgRm9ybURhdGFC
dWlsZGVyOjpiZWdpbk11bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3Qg
Q1N0cmluZyYgYm91bmRhcnksIGNvbnN0IENTdHJpbmcmIG5hbWUpCit2b2lkIGJlZ2luTXVsdGlQ
YXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCBDU3RyaW5nJiBib3VuZGFyeSwg
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBuYW1lKQogewogICAgIGFkZEJvdW5kYXJ5VG9NdWx0aVBh
cnRIZWFkZXIoYnVmZmVyLCBib3VuZGFyeSk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBsb3NlcyBk
YXRhIGlycmV2ZXJzaWJseSBpZiB0aGUgaW5wdXQgbmFtZSBpbmNsdWRlcyBjaGFyYWN0ZXJzIHlv
dSBjYW4ndCBlbmNvZGUKICAgICAvLyBpbiB0aGUgd2Vic2l0ZSdzIGNoYXJhY3RlciBzZXQuCiAg
ICAgYXBwZW5kKGJ1ZmZlciwgIkNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT1c
IiIpOwotICAgIGFwcGVuZFF1b3RlZFN0cmluZyhidWZmZXIsIG5hbWUpOworICAgIGFwcGVuZFF1
b3RlZChidWZmZXIsIG5hbWUpOwogICAgIGFwcGVuZChidWZmZXIsICciJyk7CiB9CiAKLXZvaWQg
Rm9ybURhdGFCdWlsZGVyOjphZGRCb3VuZGFyeVRvTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFy
PiYgYnVmZmVyLCBjb25zdCBDU3RyaW5nJiBib3VuZGFyeSwgYm9vbCBpc0xhc3RCb3VuZGFyeSkK
K3ZvaWQgYWRkQm91bmRhcnlUb011bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwg
Y29uc3QgQ1N0cmluZyYgYm91bmRhcnksIGJvb2wgaXNMYXN0Qm91bmRhcnkpCiB7CiAgICAgYXBw
ZW5kKGJ1ZmZlciwgIi0tIik7CiAgICAgYXBwZW5kKGJ1ZmZlciwgYm91bmRhcnkpOwpAQCAtMTM5
LDI4ICsxNzEsMjggQEAgdm9pZCBGb3JtRGF0YUJ1aWxkZXI6OmFkZEJvdW5kYXJ5VG9NdWx0aVBh
cnRIZWFkZXIoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNvbnN0IEMKICAgICBhcHBlbmQoYnVmZmVy
LCAiXHJcbiIpOwogfQogCi12b2lkIEZvcm1EYXRhQnVpbGRlcjo6YWRkRmlsZW5hbWVUb011bHRp
UGFydEhlYWRlcihWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNv
ZGluZywgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKK3ZvaWQgYWRkRmlsZW5hbWVUb011bHRpUGFy
dEhlYWRlcihWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGlu
ZywgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKIHsKICAgICAvLyBGSVhNRTogVGhpcyBsb3NlcyBk
YXRhIGlycmV2ZXJzaWJseSBpZiB0aGUgZmlsZW5hbWUgaW5jbHVkZXMgY2hhcmFjdGVycyB5b3Ug
Y2FuJ3QgZW5jb2RlCiAgICAgLy8gaW4gdGhlIHdlYnNpdGUncyBjaGFyYWN0ZXIgc2V0LgogICAg
IGFwcGVuZChidWZmZXIsICI7IGZpbGVuYW1lPVwiIik7Ci0gICAgYXBwZW5kUXVvdGVkU3RyaW5n
KGJ1ZmZlciwgZW5jb2RpbmcuZW5jb2RlKGZpbGVuYW1lLCBRdWVzdGlvbk1hcmtzRm9yVW5lbmNv
ZGFibGVzKSk7CisgICAgYXBwZW5kUXVvdGVkKGJ1ZmZlciwgZW5jb2RpbmcuZW5jb2RlKGZpbGVu
YW1lLCBVbmVuY29kYWJsZUhhbmRsaW5nOjpRdWVzdGlvbk1hcmtzKSk7CiAgICAgYXBwZW5kKGJ1
ZmZlciwgJyInKTsKIH0KIAotdm9pZCBGb3JtRGF0YUJ1aWxkZXI6OmFkZENvbnRlbnRUeXBlVG9N
dWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNvbnN0IENTdHJpbmcmIG1pbWVU
eXBlKQordm9pZCBhZGRDb250ZW50VHlwZVRvTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYg
YnVmZmVyLCBjb25zdCBDU3RyaW5nJiBtaW1lVHlwZSkKIHsKICAgICBBU1NFUlQoQmxvYjo6aXNO
b3JtYWxpemVkQ29udGVudFR5cGUobWltZVR5cGUpKTsKICAgICBhcHBlbmQoYnVmZmVyLCAiXHJc
bkNvbnRlbnQtVHlwZTogIik7CiAgICAgYXBwZW5kKGJ1ZmZlciwgbWltZVR5cGUpOwogfQogCi12
b2lkIEZvcm1EYXRhQnVpbGRlcjo6ZmluaXNoTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYg
YnVmZmVyKQordm9pZCBmaW5pc2hNdWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+JiBidWZmZXIp
CiB7CiAgICAgYXBwZW5kKGJ1ZmZlciwgIlxyXG5cclxuIik7CiB9CiAKLXZvaWQgRm9ybURhdGFC
dWlsZGVyOjphZGRLZXlWYWx1ZVBhaXJBc0Zvcm1EYXRhKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBj
b25zdCBDU3RyaW5nJiBrZXksIGNvbnN0IENTdHJpbmcmIHZhbHVlLCBGb3JtRGF0YTo6RW5jb2Rp
bmdUeXBlIGVuY29kaW5nVHlwZSkKK3ZvaWQgYWRkS2V5VmFsdWVQYWlyQXNGb3JtRGF0YShWZWN0
b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgdmFsdWUsIEZvcm1EYXRhOjpFbmNvZGluZ1R5cGUgZW5jb2RpbmdUeXBlKQog
ewogICAgIGlmIChlbmNvZGluZ1R5cGUgPT0gRm9ybURhdGE6OlRleHRQbGFpbikgewogICAgICAg
ICBpZiAoIWJ1ZmZlci5pc0VtcHR5KCkpCkBAIC0xNzEsMzMgKzIwMywxNyBAQCB2b2lkIEZvcm1E
YXRhQnVpbGRlcjo6YWRkS2V5VmFsdWVQYWlyQXNGb3JtRGF0YShWZWN0b3I8Y2hhcj4mIGJ1ZmZl
ciwgY29uc3QgQ1N0cgogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghYnVmZmVyLmlzRW1wdHko
KSkKICAgICAgICAgICAgIGFwcGVuZChidWZmZXIsICcmJyk7Ci0gICAgICAgIGVuY29kZVN0cmlu
Z0FzRm9ybURhdGEoYnVmZmVyLCBrZXkpOworICAgICAgICBhcHBlbmRGb3JtVVJMRW5jb2RlZChi
dWZmZXIsIGtleSk7CiAgICAgICAgIGFwcGVuZChidWZmZXIsICc9Jyk7Ci0gICAgICAgIGVuY29k
ZVN0cmluZ0FzRm9ybURhdGEoYnVmZmVyLCB2YWx1ZSk7CisgICAgICAgIGFwcGVuZEZvcm1VUkxF
bmNvZGVkKGJ1ZmZlciwgdmFsdWUpOwogICAgIH0KIH0KIAotdm9pZCBGb3JtRGF0YUJ1aWxkZXI6
OmVuY29kZVN0cmluZ0FzRm9ybURhdGEoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNvbnN0IENTdHJp
bmcmIHN0cmluZykKK3ZvaWQgZW5jb2RlU3RyaW5nQXNGb3JtRGF0YShWZWN0b3I8Y2hhcj4mIGJ1
ZmZlciwgY29uc3QgQ1N0cmluZyYgc3RyaW5nKQogewotICAgIC8vIFNhbWUgc2FmZSBjaGFyYWN0
ZXJzIGFzIE5ldHNjYXBlIGZvciBjb21wYXRpYmlsaXR5LgotICAgIHN0YXRpYyBjb25zdCBjaGFy
IHNhZmVDaGFyYWN0ZXJzW10gPSAiLS5fKiI7Ci0KLSAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9U
Ui9odG1sNC9pbnRlcmFjdC9mb3Jtcy5odG1sI2gtMTcuMTMuNC4xCi0gICAgdW5zaWduZWQgbGVu
Z3RoID0gc3RyaW5nLmxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBzdHJpbmcuZGF0YSgpW2ldOwor
ICAgIGFwcGVuZEZvcm1VUkxFbmNvZGVkKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50OF90Kj4oc3RyaW5nLmRhdGEoKSksIHN0cmluZy5sZW5ndGgoKSk7Cit9CiAKLSAgICAgICAg
aWYgKGlzQVNDSUlBbHBoYW51bWVyaWMoYykgfHwgc3RyY2hyKHNhZmVDaGFyYWN0ZXJzLCBjKSkK
LSAgICAgICAgICAgIGFwcGVuZChidWZmZXIsIGMpOwotICAgICAgICBlbHNlIGlmIChjID09ICcg
JykKLSAgICAgICAgICAgIGFwcGVuZChidWZmZXIsICcrJyk7Ci0gICAgICAgIGVsc2UgaWYgKGMg
PT0gJ1xuJyB8fCAoYyA9PSAnXHInICYmIChpICsgMSA+PSBsZW5ndGggfHwgc3RyaW5nLmRhdGEo
KVtpICsgMV0gIT0gJ1xuJykpKQotICAgICAgICAgICAgYXBwZW5kKGJ1ZmZlciwgIiUwRCUwQSIp
OwotICAgICAgICBlbHNlIGlmIChjICE9ICdccicpIHsKLSAgICAgICAgICAgIGFwcGVuZChidWZm
ZXIsICclJyk7Ci0gICAgICAgICAgICBhcHBlbmRCeXRlQXNIZXgoYywgYnVmZmVyKTsKLSAgICAg
ICAgfQotICAgIH0KIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9Gb3JtRGF0YUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvRm9ybURhdGFCdWlsZGVyLmgKaW5kZXggN2FkZWNhYTY2YTdhZDBlN2M4YzFjYTZkMzdmMTJl
ZGQ5OTZlOWU2Yi4uZDBlMDdiY2QwOGZkM2Q0YzFiOWNiYTUyNWExM2MxMzk2YjJhODJhYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YUJ1aWxkZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5o
CkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMTgsOCArMTksNyBAQAogICoKICAqLwogCi0jaWZuZGVmIEZv
cm1EYXRhQnVpbGRlcl9oCi0jZGVmaW5lIEZvcm1EYXRhQnVpbGRlcl9oCisjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgIkZvcm1EYXRhLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTI4
LDI1ICsyOCwyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFRleHRFbmNvZGluZzsK
IAotY2xhc3MgRm9ybURhdGFCdWlsZGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGb3Jt
RGF0YUJ1aWxkZXIpOwotcHVibGljOgotICAgIC8vIEhlbHBlciBmdW5jdGlvbnMgdXNlZCBieSBI
VE1MRm9ybUVsZW1lbnQgZm9yIG11bHRpLXBhcnQgZm9ybSBkYXRhCi0gICAgc3RhdGljIFZlY3Rv
cjxjaGFyPiBnZW5lcmF0ZVVuaXF1ZUJvdW5kYXJ5U3RyaW5nKCk7Ci0gICAgc3RhdGljIHZvaWQg
YmVnaW5NdWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+JiwgY29uc3QgQ1N0cmluZyYgYm91bmRh
cnksIGNvbnN0IENTdHJpbmcmIG5hbWUpOwotICAgIHN0YXRpYyB2b2lkIGFkZEJvdW5kYXJ5VG9N
dWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+JiwgY29uc3QgQ1N0cmluZyYgYm91bmRhcnksIGJv
b2wgaXNMYXN0Qm91bmRhcnkgPSBmYWxzZSk7Ci0gICAgc3RhdGljIHZvaWQgYWRkRmlsZW5hbWVU
b011bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4mLCBjb25zdCBUZXh0RW5jb2RpbmcmLCBjb25z
dCBTdHJpbmcmIGZpbGVuYW1lKTsKLSAgICBzdGF0aWMgdm9pZCBhZGRDb250ZW50VHlwZVRvTXVs
dGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYsIGNvbnN0IENTdHJpbmcmIG1pbWVUeXBlKTsKLSAg
ICBzdGF0aWMgdm9pZCBmaW5pc2hNdWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+Jik7Ci0KLSAg
ICAvLyBIZWxwZXIgZnVuY3Rpb25zIHVzZWQgYnkgSFRNTEZvcm1FbGVtZW50IGZvciBub24gbXVs
dGktcGFydCBmb3JtIGRhdGEKLSAgICBzdGF0aWMgdm9pZCBhZGRLZXlWYWx1ZVBhaXJBc0Zvcm1E
YXRhKFZlY3RvcjxjaGFyPiYsIGNvbnN0IENTdHJpbmcmIGtleSwgY29uc3QgQ1N0cmluZyYgdmFs
dWUsIEZvcm1EYXRhOjpFbmNvZGluZ1R5cGUgPSBGb3JtRGF0YTo6Rm9ybVVSTEVuY29kZWQpOwot
ICAgIHN0YXRpYyB2b2lkIGVuY29kZVN0cmluZ0FzRm9ybURhdGEoVmVjdG9yPGNoYXI+JiwgY29u
c3QgQ1N0cmluZyYpOwotCi1wcml2YXRlOgotICAgIEZvcm1EYXRhQnVpbGRlcigpIHt9Ci19Owor
bmFtZXNwYWNlIEZvcm1EYXRhQnVpbGRlciB7CisKKy8vIEhlbHBlciBmdW5jdGlvbnMgdXNlZCBi
eSBIVE1MRm9ybUVsZW1lbnQgZm9yIG11bHRpLXBhcnQgZm9ybSBkYXRhLgorVmVjdG9yPGNoYXI+
IGdlbmVyYXRlVW5pcXVlQm91bmRhcnlTdHJpbmcoKTsKK3ZvaWQgYmVnaW5NdWx0aVBhcnRIZWFk
ZXIoVmVjdG9yPGNoYXI+JiwgY29uc3QgQ1N0cmluZyYgYm91bmRhcnksIGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYgbmFtZSk7Cit2b2lkIGFkZEJvdW5kYXJ5VG9NdWx0aVBhcnRIZWFkZXIoVmVjdG9y
PGNoYXI+JiwgY29uc3QgQ1N0cmluZyYgYm91bmRhcnksIGJvb2wgaXNMYXN0Qm91bmRhcnkgPSBm
YWxzZSk7Cit2b2lkIGFkZEZpbGVuYW1lVG9NdWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+Jiwg
Y29uc3QgVGV4dEVuY29kaW5nJiwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSk7Cit2b2lkIGFkZENv
bnRlbnRUeXBlVG9NdWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+JiwgY29uc3QgQ1N0cmluZyYg
bWltZVR5cGUpOwordm9pZCBmaW5pc2hNdWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+Jik7CisK
Ky8vIEhlbHBlciBmdW5jdGlvbnMgdXNlZCBieSBIVE1MRm9ybUVsZW1lbnQgZm9yIG5vbi1tdWx0
aS1wYXJ0IGZvcm0gZGF0YS4KK3ZvaWQgYWRkS2V5VmFsdWVQYWlyQXNGb3JtRGF0YShWZWN0b3I8
Y2hhcj4mLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiB2YWx1ZSwgRm9ybURhdGE6OkVuY29kaW5nVHlwZSA9IEZvcm1EYXRhOjpGb3JtVVJMRW5jb2Rl
ZCk7Cit2b2lkIGVuY29kZVN0cmluZ0FzRm9ybURhdGEoVmVjdG9yPGNoYXI+JiwgY29uc3QgQ1N0
cmluZyYpOwogCiB9CiAKLSNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0
ZS5jcHAKaW5kZXggN2E3NTljNGE5ZmU3ZDAyZDUyNDM5YTg4ZmEzMjY5YTlhODMyYTQwZC4uMjc4
NDM5ZTE1MjAxOTczZDdhNmNhNWU5NDMwZDY4Mzg5MzM3MzFiZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VI
YW5kbGVDdXJsRGVsZWdhdGUuY3BwCkBAIC00NTcsOSArNDU3LDkgQEAgdm9pZCBSZXNvdXJjZUhh
bmRsZUN1cmxEZWxlZ2F0ZTo6aGFuZGxlRGF0YVVSTCgpCiAKICAgICAgICAgLy8gZGlkUmVjZWl2
ZVJlc3BvbnNlIG1pZ2h0IGNhdXNlIHRoZSBjbGllbnQgdG8gYmUgZGVsZXRlZC4KICAgICAgICAg
aWYgKG1faGFuZGxlLT5jbGllbnQoKSkgewotICAgICAgICAgICAgQ1N0cmluZyBlbmNvZGVkRGF0
YSA9IGVuY29kaW5nLmVuY29kZShkYXRhLCBVUkxFbmNvZGVkRW50aXRpZXNGb3JVbmVuY29kYWJs
ZXMpOwotICAgICAgICAgICAgaWYgKGVuY29kZWREYXRhLmxlbmd0aCgpKQotICAgICAgICAgICAg
ICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZUJ1ZmZlcihtX2hhbmRsZSwgU2hhcmVk
QnVmZmVyOjpjcmVhdGUoZW5jb2RlZERhdGEuZGF0YSgpLCBlbmNvZGVkRGF0YS5sZW5ndGgoKSks
IG9yaWdpbmFsU2l6ZSk7CisgICAgICAgICAgICBhdXRvIGVuY29kZWREYXRhID0gZW5jb2Rpbmcu
ZW5jb2RlKGRhdGEsIFVSTEVuY29kZWRFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7CisgICAgICAg
ICAgICBpZiAoZW5jb2RlZERhdGEuc2l6ZSgpKQorICAgICAgICAgICAgICAgIG1faGFuZGxlLT5j
bGllbnQoKS0+ZGlkUmVjZWl2ZUJ1ZmZlcihtX2hhbmRsZSwgU2hhcmVkQnVmZmVyOjpjcmVhdGUo
V1RGTW92ZShlbmNvZGVkRGF0YSkpLCBvcmlnaW5hbFNpemUpOwogICAgICAgICB9CiAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RlY29kZUVzY2FwZVNl
cXVlbmNlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1
ZW5jZXMuaAppbmRleCBiOGM4MzlkODAzYzRmOTczN2FhYzNmZmRjZGE5MTA5OTRhMDA0NzA0Li4x
NGNmNDE1MzZmMzBlZDY3NmNhMmU4YzM2OTk3MWRmMTJlMDM4ZmY3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RlY29kZUVzY2FwZVNlcXVlbmNlcy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgKQEAgLTI3
LDggKzI3LDcgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBEZWNvZGVFc2NhcGVT
ZXF1ZW5jZXNfaAotI2RlZmluZSBEZWNvZGVFc2NhcGVTZXF1ZW5jZXNfaAorI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5o
PgpAQCAtMTU1LDExICsxNTQsMTEgQEAgU3RyaW5nIGRlY29kZUVzY2FwZVNlcXVlbmNlcyhTdHJp
bmdWaWV3IHN0cmluZywgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKICAgICByZXR1cm4g
cmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKLWlubGluZSBWZWN0b3I8Y2hhcj4gZGVjb2RlVVJMRXNj
YXBlU2VxdWVuY2VzQXNEYXRhKFN0cmluZ1ZpZXcgc3RyaW5nLCBjb25zdCBUZXh0RW5jb2Rpbmcm
IGVuY29kaW5nKQoraW5saW5lIFZlY3Rvcjx1aW50OF90PiBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5j
ZXNBc0RhdGEoU3RyaW5nVmlldyBzdHJpbmcsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2Rpbmcp
CiB7CiAgICAgQVNTRVJUKGVuY29kaW5nLmlzVmFsaWQoKSk7CiAKLSAgICBWZWN0b3I8Y2hhcj4g
cmVzdWx0OworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7CiAgICAgc2l6ZV90IGRlY29kZWRQ
b3NpdGlvbiA9IDA7CiAgICAgc2l6ZV90IHNlYXJjaFBvc2l0aW9uID0gMDsKICAgICB3aGlsZSAo
dHJ1ZSkgewpAQCAtMTczLDEwICsxNzIsOSBAQCBpbmxpbmUgVmVjdG9yPGNoYXI+IGRlY29kZVVS
TEVzY2FwZVNlcXVlbmNlc0FzRGF0YShTdHJpbmdWaWV3IHN0cmluZywgY29uc3QgVGV4dAogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CisKICAgICAg
ICAgLy8gU3RyaW5ncyBhcmUgZW5jb2RlZCBhcyByZXF1ZXN0ZWQuCi0gICAgICAgIGF1dG8gc3Ry
aW5nRnJhZ21lbnQgPSBzdHJpbmcuc3Vic3RyaW5nKGRlY29kZWRQb3NpdGlvbiwgZW5jb2RlZFJ1
blBvc2l0aW9uIC0gZGVjb2RlZFBvc2l0aW9uKTsKLSAgICAgICAgYXV0byBlbmNvZGVkU3RyaW5n
RnJhZ21lbnQgPSBlbmNvZGluZy5lbmNvZGUoc3RyaW5nRnJhZ21lbnQsIFVSTEVuY29kZWRFbnRp
dGllc0ZvclVuZW5jb2RhYmxlcyk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoZW5jb2RlZFN0cmlu
Z0ZyYWdtZW50LmRhdGEoKSwgZW5jb2RlZFN0cmluZ0ZyYWdtZW50Lmxlbmd0aCgpKTsKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZFZlY3RvcihlbmNvZGluZy5lbmNvZGUoc3RyaW5nLnN1YnN0cmluZyhk
ZWNvZGVkUG9zaXRpb24sIGVuY29kZWRSdW5Qb3NpdGlvbiAtIGRlY29kZWRQb3NpdGlvbiksIFVu
ZW5jb2RhYmxlSGFuZGxpbmc6OlVSTEVuY29kZWRFbnRpdGllcykpOwogCiAgICAgICAgIGlmIChl
bmNvZGVkUnVuUG9zaXRpb24gPT0gbm90Rm91bmQpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwpAQCAtMTkyLDQgKzE5MCwzIEBAIGlubGluZSBWZWN0b3I8Y2hhcj4gZGVjb2RlVVJMRXNjYXBl
U2VxdWVuY2VzQXNEYXRhKFN0cmluZ1ZpZXcgc3RyaW5nLCBjb25zdCBUZXh0CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIERlY29kZUVzY2FwZVNlcXVlbmNlc19oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlYy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlYy5jcHAKaW5kZXggNjNhZWY0N2Q3MzU0
NDI2MjNjZjQ2ZWM0ZjNjMTJiZjVkMDFmYWFiMy4uODZiODljZmM0NzZmMDNiNmRiNGY3OGZiNDJj
MTgzZjQ4OTdkYWQ4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0Q29kZWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVj
LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBB
bGV4ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0y
NywyOSArMjcsMjQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXh0Q29kZWMu
aCIKIAotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKyNpbmNsdWRlIDxhcnJheT4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1U
ZXh0Q29kZWM6On5UZXh0Q29kZWMoKSA9IGRlZmF1bHQ7Ci0KLWludCBUZXh0Q29kZWM6OmdldFVu
ZW5jb2RhYmxlUmVwbGFjZW1lbnQodW5zaWduZWQgY29kZVBvaW50LCBVbmVuY29kYWJsZUhhbmRs
aW5nIGhhbmRsaW5nLCBVbmVuY29kYWJsZVJlcGxhY2VtZW50QXJyYXkgcmVwbGFjZW1lbnQpCitp
bnQgVGV4dENvZGVjOjpnZXRVbmVuY29kYWJsZVJlcGxhY2VtZW50KFVDaGFyMzIgY29kZVBvaW50
LCBVbmVuY29kYWJsZUhhbmRsaW5nIGhhbmRsaW5nLCBVbmVuY29kYWJsZVJlcGxhY2VtZW50QXJy
YXkmIHJlcGxhY2VtZW50KQogewogICAgIHN3aXRjaCAoaGFuZGxpbmcpIHsKLSAgICAgICAgY2Fz
ZSBRdWVzdGlvbk1hcmtzRm9yVW5lbmNvZGFibGVzOgotICAgICAgICAgICAgcmVwbGFjZW1lbnRb
MF0gPSAnPyc7Ci0gICAgICAgICAgICByZXBsYWNlbWVudFsxXSA9IDA7Ci0gICAgICAgICAgICBy
ZXR1cm4gMTsKLSAgICAgICAgY2FzZSBFbnRpdGllc0ZvclVuZW5jb2RhYmxlczoKLSAgICAgICAg
ICAgIHNucHJpbnRmKHJlcGxhY2VtZW50LCBzaXplb2YoVW5lbmNvZGFibGVSZXBsYWNlbWVudEFy
cmF5KSwgIiYjJXU7IiwgY29kZVBvaW50KTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxpbnQ+KHN0cmxlbihyZXBsYWNlbWVudCkpOwotICAgICAgICBjYXNlIFVSTEVuY29kZWRFbnRp
dGllc0ZvclVuZW5jb2RhYmxlczoKLSAgICAgICAgICAgIHNucHJpbnRmKHJlcGxhY2VtZW50LCBz
aXplb2YoVW5lbmNvZGFibGVSZXBsYWNlbWVudEFycmF5KSwgIiUlMjYlJTIzJXUlJTNCIiwgY29k
ZVBvaW50KTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHN0cmxlbihyZXBs
YWNlbWVudCkpOworICAgIGNhc2UgVW5lbmNvZGFibGVIYW5kbGluZzo6UXVlc3Rpb25NYXJrczoK
KyAgICAgICAgcmVwbGFjZW1lbnQuZGF0YSgpWzBdID0gJz8nOworICAgICAgICByZXBsYWNlbWVu
dC5kYXRhKClbMV0gPSAwOworICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIFVuZW5jb2RhYmxl
SGFuZGxpbmc6OkVudGl0aWVzOgorICAgICAgICByZXR1cm4gc25wcmludGYocmVwbGFjZW1lbnQu
ZGF0YSgpLCBzaXplb2YoVW5lbmNvZGFibGVSZXBsYWNlbWVudEFycmF5KSwgIiYjJXU7IiwgY29k
ZVBvaW50KTsKKyAgICBjYXNlIFVuZW5jb2RhYmxlSGFuZGxpbmc6OlVSTEVuY29kZWRFbnRpdGll
czoKKyAgICAgICAgcmV0dXJuIHNucHJpbnRmKHJlcGxhY2VtZW50LmRhdGEoKSwgc2l6ZW9mKFVu
ZW5jb2RhYmxlUmVwbGFjZW1lbnRBcnJheSksICIlJTI2JSUyMyV1JSUzQiIsIGNvZGVQb2ludCk7
CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJlcGxhY2VtZW50WzBdID0g
MDsKKyAgICByZXBsYWNlbWVudC5kYXRhKClbMF0gPSAwOwogICAgIHJldHVybiAwOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlYy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuaAppbmRleCBmMzBjZDEyNjE1ZTUz
ZTA5NWE1OTJmMzlmZjhlOWM3N2NhYTNhYTdmLi40ODNlNTAxZTZiOGUyZTQwNzgyOWRiZjFhYTA0
OGM1NmY3YWNkNzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRDb2RlYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjLmgK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5
IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjQsNjEg
KzI0LDM5IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIFRleHRDb2RlY19oCi0j
ZGVmaW5lIFRleHRDb2RlY19oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPG1lbW9yeT4KKyNp
bmNsdWRlIDxwYWwvdGV4dC9VbmVuY29kYWJsZUhhbmRsaW5nLmg+CisjaW5jbHVkZSA8dW5pY29k
ZS91bWFjaGluZS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBUZXh0RW5jb2Rpbmc7CiAKLSAgICAvLyBTcGVjaWZpZXMg
d2hhdCB3aWxsIGhhcHBlbiB3aGVuIGEgY2hhcmFjdGVyIGlzIGVuY291bnRlcmVkIHRoYXQgaXMK
LSAgICAvLyBub3QgZW5jb2RhYmxlIGluIHRoZSBjaGFyYWN0ZXIgc2V0LgotICAgIGVudW0gVW5l
bmNvZGFibGVIYW5kbGluZyB7Ci0gICAgICAgIC8vIFN1YnN0aXR1dGVzIHRoZSByZXBsYWNlbWVu
dCBjaGFyYWN0ZXIgIj8iLgotICAgICAgICBRdWVzdGlvbk1hcmtzRm9yVW5lbmNvZGFibGVzLAor
Y2xhc3MgVGV4dEVuY29kaW5nOwogCi0gICAgICAgIC8vIEVuY29kZXMgdGhlIGNoYXJhY3RlciBh
cyBhbiBYTUwgZW50aXR5LiBGb3IgZXhhbXBsZSwgVSswNkRFCi0gICAgICAgIC8vIHdvdWxkIGJl
ICImIzE3NTg7IiAoMHg2REUgPSAxNzU4IGluIG9jdGFsKS4KLSAgICAgICAgRW50aXRpZXNGb3JV
bmVuY29kYWJsZXMsCit1c2luZyBVbmVuY29kYWJsZVJlcGxhY2VtZW50QXJyYXkgPSBzdGQ6OmFy
cmF5PGNoYXIsIDMyPjsKIAotICAgICAgICAvLyBFbmNvZGVzIHRoZSBjaGFyYWN0ZXIgYXMgZW4g
ZW50aXR5IGFzIGFib3ZlLCBidXQgZXNjYXBlZAotICAgICAgICAvLyBub24tYWxwaGFudW1lcmlj
IGNoYXJhY3RlcnMuIFRoaXMgaXMgdXNlZCBpbiBVUkxzLgotICAgICAgICAvLyBGb3IgZXhhbXBs
ZSwgVSs2REUgd291bGQgYmUgIiUyNiUyMzE3NTglM0IiLgotICAgICAgICBVUkxFbmNvZGVkRW50
aXRpZXNGb3JVbmVuY29kYWJsZXMKLSAgICB9OworY2xhc3MgVGV4dENvZGVjIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShUZXh0Q29kZWMpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBUZXh0Q29kZWMoKSA9IGRlZmF1bHQ7CisgICAgdmlydHVhbCB+VGV4dENvZGVj
KCkgPSBkZWZhdWx0OwogCi0gICAgdHlwZWRlZiBjaGFyIFVuZW5jb2RhYmxlUmVwbGFjZW1lbnRB
cnJheVszMl07CisgICAgdmlydHVhbCBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3Qg
bGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcikgPSAw
OworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZShTdHJpbmdWaWV3LCBVbmVuY29k
YWJsZUhhbmRsaW5nKSA9IDA7CiAKLSAgICBjbGFzcyBUZXh0Q29kZWMgewotICAgICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShUZXh0Q29kZWMpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIFRleHRDb2RlYygpIHsgfQotICAgICAgICB2aXJ0dWFsIH5UZXh0
Q29kZWMoKTsKKyAgICAvLyBGaWxscyBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcgcmVwcmVzZW50
YXRpb24gb2YgdGhlIGdpdmVuCisgICAgLy8gdW5lbmNvZGFibGUgY2hhcmFjdGVyIGludG8gdGhl
IGdpdmVuIHJlcGxhY2VtZW50IGJ1ZmZlci4KKyAgICAvLyBUaGUgbGVuZ3RoIG9mIHRoZSBzdHJp
bmcgKG5vdCBpbmNsdWRpbmcgdGhlIG51bGwpIHdpbGwgYmUgcmV0dXJuZWQuCisgICAgc3RhdGlj
IGludCBnZXRVbmVuY29kYWJsZVJlcGxhY2VtZW50KFVDaGFyMzIsIFVuZW5jb2RhYmxlSGFuZGxp
bmcsIFVuZW5jb2RhYmxlUmVwbGFjZW1lbnRBcnJheSYpOworfTsKIAotICAgICAgICBTdHJpbmcg
ZGVjb2RlKGNvbnN0IGNoYXIqIHN0ciwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCA9IGZhbHNl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBib29sIGlnbm9yZWQ7Ci0gICAgICAgICAgICByZXR1
cm4gZGVjb2RlKHN0ciwgbGVuZ3RoLCBmbHVzaCwgZmFsc2UsIGlnbm9yZWQpOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICB2aXJ0dWFsIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNp
emVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9y
KSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgQ1N0cmluZyBlbmNvZGUoY29uc3QgVUNoYXIqLCBzaXpl
X3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5nKSA9IDA7Cit1c2luZyBFbmNvZGluZ05hbWVS
ZWdpc3RyYXIgPSB2b2lkICgqKShjb25zdCBjaGFyKiBhbGlhcywgY29uc3QgY2hhciogbmFtZSk7
CiAKLSAgICAgICAgLy8gRmlsbHMgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHJlcHJlc2VudGF0
aW9uIG9mIHRoZSBnaXZlbgotICAgICAgICAvLyB1bmVuY29kYWJsZSBjaGFyYWN0ZXIgaW50byB0
aGUgZ2l2ZW4gcmVwbGFjZW1lbnQgYnVmZmVyLiAKLSAgICAgICAgLy8gVGhlIGxlbmd0aCBvZiB0
aGUgc3RyaW5nIChub3QgaW5jbHVkaW5nIHRoZSBudWxsKSB3aWxsIGJlIHJldHVybmVkLgotICAg
ICAgICBzdGF0aWMgaW50IGdldFVuZW5jb2RhYmxlUmVwbGFjZW1lbnQodW5zaWduZWQgY29kZVBv
aW50LCBVbmVuY29kYWJsZUhhbmRsaW5nLCBVbmVuY29kYWJsZVJlcGxhY2VtZW50QXJyYXkpOwot
ICAgIH07Ci0KLSAgICB0eXBlZGVmIHZvaWQgKCpFbmNvZGluZ05hbWVSZWdpc3RyYXIpKGNvbnN0
IGNoYXIqIGFsaWFzLCBjb25zdCBjaGFyKiBuYW1lKTsKLQotICAgIHR5cGVkZWYgc3RkOjp1bmlx
dWVfcHRyPFRleHRDb2RlYz4gKCpOZXdUZXh0Q29kZWNGdW5jdGlvbikoY29uc3QgVGV4dEVuY29k
aW5nJiwgY29uc3Qgdm9pZCogYWRkaXRpb25hbERhdGEpOwotICAgIHR5cGVkZWYgdm9pZCAoKlRl
eHRDb2RlY1JlZ2lzdHJhcikoY29uc3QgY2hhciogbmFtZSwgTmV3VGV4dENvZGVjRnVuY3Rpb24s
IGNvbnN0IHZvaWQqIGFkZGl0aW9uYWxEYXRhKTsKK3VzaW5nIE5ld1RleHRDb2RlY0Z1bmN0aW9u
ID0gV1RGOjpGdW5jdGlvbjxzdGQ6OnVuaXF1ZV9wdHI8VGV4dENvZGVjPigpPjsKK3VzaW5nIFRl
eHRDb2RlY1JlZ2lzdHJhciA9IHZvaWQgKCopKGNvbnN0IGNoYXIqIG5hbWUsIE5ld1RleHRDb2Rl
Y0Z1bmN0aW9uJiYpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBUZXh0
Q29kZWNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29k
ZWNJQ1UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3Bw
CmluZGV4IDZlMjczNjY5OWM4YWE2OTMzN2RhYzdkMzM5MTEwOTQ0NWYwNjIzZjUuLmQyZTJhZTdm
YjkyZmYzYWQ4YzJkOWM3M2QyMDk1YTk0MjY5YjFjOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlh
a292IDxhcEBueXBvcC5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMCwxMCArMzAsOCBAQAog
I2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZ1JlZ2lzdHJ5
LmgiCiAjaW5jbHVkZSAiVGhyZWFkR2xvYmFsRGF0YS5oIgotI2luY2x1ZGUgPHVuaWNvZGUvdWNu
di5oPgorI2luY2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPHVuaWNvZGUvdWNudl9jYi5oPgotI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgog
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpAQCAtNDMsMjMgKzQxLDYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjb25zdCBzaXplX3QgQ29udmVyc2lvbkJ1ZmZlclNpemUg
PSAxNjM4NDsKIAotSUNVQ29udmVydGVyV3JhcHBlcjo6fklDVUNvbnZlcnRlcldyYXBwZXIoKQot
ewotICAgIGlmIChjb252ZXJ0ZXIpCi0gICAgICAgIHVjbnZfY2xvc2UoY29udmVydGVyKTsKLX0K
LQotc3RhdGljIFVDb252ZXJ0ZXIqJiBjYWNoZWRDb252ZXJ0ZXJJQ1UoKQotewotICAgIHJldHVy
biB0aHJlYWRHbG9iYWxEYXRhKCkuY2FjaGVkQ29udmVydGVySUNVKCkuY29udmVydGVyOwotfQot
Ci1zdGQ6OnVuaXF1ZV9wdHI8VGV4dENvZGVjPiBUZXh0Q29kZWNJQ1U6OmNyZWF0ZShjb25zdCBU
ZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBjb25zdCB2b2lkKiBhZGRpdGlvbmFsRGF0YSkKLXsKLSAg
ICAvLyBOYW1lIHN0cmluZ3MgYXJlIHBlcnNpc3RlbnRseSBrZXB0IGluIFRleHRFbmNvZGluZ1Jl
Z2lzdHJ5IG1hcHMsIHNvIHRoZXkgYXJlIG5ldmVyIGRlbGV0ZWQuCi0gICAgcmV0dXJuIHN0ZDo6
bWFrZV91bmlxdWU8VGV4dENvZGVjSUNVPihlbmNvZGluZy5uYW1lKCksIHN0YXRpY19jYXN0PGNv
bnN0IGNoYXIqPihhZGRpdGlvbmFsRGF0YSkpOwotfQotCiAjZGVmaW5lIERFQ0xBUkVfQUxJQVNF
UyhlbmNvZGluZywgLi4uKSBcCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVuY29kaW5n
IyNfYWxpYXNlc1tdIHsgX19WQV9BUkdTX18gfQogCkBAIC0xNjksMTE0ICsxNTAsMTE1IEBAIHZv
aWQgVGV4dENvZGVjSUNVOjpyZWdpc3RlckVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0
cmFyIHJlZ2lzdHJhcikKIHZvaWQgVGV4dENvZGVjSUNVOjpyZWdpc3RlckNvZGVjcyhUZXh0Q29k
ZWNSZWdpc3RyYXIgcmVnaXN0cmFyKQogewogICAgIGZvciAoYXV0byYgZW5jb2RpbmdOYW1lIDog
ZW5jb2RpbmdOYW1lcykgeworICAgICAgICBjb25zdCBjaGFyKiBuYW1lID0gZW5jb2RpbmdOYW1l
Lm5hbWU7CisKICAgICAgICAgLy8gVGhlc2UgZW5jb2RpbmdzIGN1cnJlbnRseSBkb24ndCBoYXZl
IHN0YW5kYXJkIG5hbWVzLCBzbyB3ZSBuZWVkIHRvIHJlZ2lzdGVyIGVuY29kZXJzIG1hbnVhbGx5
LgogICAgICAgICAvLyBodHRwOi8vZGVtby5pY3UtcHJvamVjdC5vcmcvaWN1LWJpbi9jb252ZXhw
Ci0gICAgICAgIGlmICghc3RyY21wKGVuY29kaW5nTmFtZS5uYW1lLCAid2luZG93cy04NzQiKSkg
ewotICAgICAgICAgICAgcmVnaXN0cmFyKGVuY29kaW5nTmFtZS5uYW1lLCBjcmVhdGUsICJ3aW5k
b3dzLTg3NC0yMDAwIik7CisgICAgICAgIGlmICghc3RyY21wKG5hbWUsICJ3aW5kb3dzLTg3NCIp
KSB7CisgICAgICAgICAgICByZWdpc3RyYXIobmFtZSwgW25hbWVdIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxUZXh0Q29kZWNJQ1U+KG5hbWUsICJ3aW5kb3dzLTg3
NC0yMDAwIik7CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9Ci0gICAgICAgIGlmICghc3RyY21wKGVuY29kaW5nTmFtZS5uYW1lLCAid2luZG93cy05NDki
KSkgewotICAgICAgICAgICAgcmVnaXN0cmFyKGVuY29kaW5nTmFtZS5uYW1lLCBjcmVhdGUsICJ3
aW5kb3dzLTk0OS0yMDAwIik7CisgICAgICAgIGlmICghc3RyY21wKG5hbWUsICJ3aW5kb3dzLTk0
OSIpKSB7CisgICAgICAgICAgICByZWdpc3RyYXIobmFtZSwgW25hbWVdIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxUZXh0Q29kZWNJQ1U+KG5hbWUsICJ3aW5kb3dz
LTk0OS0yMDAwIik7CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICB9Ci0gICAgICAgIGlmICghc3RyY21wKGVuY29kaW5nTmFtZS5uYW1lLCAieC1tYWMtY3ly
aWxsaWMiKSkgewotICAgICAgICAgICAgcmVnaXN0cmFyKGVuY29kaW5nTmFtZS5uYW1lLCBjcmVh
dGUsICJtYWNvcy03XzMtMTAuMiIpOworICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAieC1tYWMt
Y3lyaWxsaWMiKSkgeworICAgICAgICAgICAgcmVnaXN0cmFyKG5hbWUsIFtuYW1lXSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjSUNVPihuYW1lLCAi
bWFjb3MtN18zLTEwLjIiKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFzdHJjbXAoZW5jb2RpbmdOYW1lLm5hbWUsICJ4LW1h
Yy1ncmVlayIpKSB7Ci0gICAgICAgICAgICByZWdpc3RyYXIoZW5jb2RpbmdOYW1lLm5hbWUsIGNy
ZWF0ZSwgIm1hY29zLTZfMi0xMC40Iik7CisgICAgICAgIGlmICghc3RyY21wKG5hbWUsICJ4LW1h
Yy1ncmVlayIpKSB7CisgICAgICAgICAgICByZWdpc3RyYXIobmFtZSwgW25hbWVdIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxUZXh0Q29kZWNJQ1U+KG5hbWUsICJt
YWNvcy02XzItMTAuNCIpOworICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQotICAgICAgICBpZiAoIXN0cmNtcChlbmNvZGluZ05hbWUubmFtZSwgIngtbWFj
LWNlbnRyYWxldXJyb21hbiIpKSB7Ci0gICAgICAgICAgICByZWdpc3RyYXIoZW5jb2RpbmdOYW1l
Lm5hbWUsIGNyZWF0ZSwgIm1hY29zLTI5LTEwLjIiKTsKKyAgICAgICAgaWYgKCFzdHJjbXAobmFt
ZSwgIngtbWFjLWNlbnRyYWxldXJyb21hbiIpKSB7CisgICAgICAgICAgICByZWdpc3RyYXIobmFt
ZSwgW25hbWVdIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxUZXh0
Q29kZWNJQ1U+KG5hbWUsICJtYWNvcy0yOS0xMC4yIik7CisgICAgICAgICAgICB9KTsKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmICghc3RyY21wKGVuY29kaW5n
TmFtZS5uYW1lLCAieC1tYWMtdHVya2lzaCIpKSB7Ci0gICAgICAgICAgICByZWdpc3RyYXIoZW5j
b2RpbmdOYW1lLm5hbWUsIGNyZWF0ZSwgIm1hY29zLTM1LTEwLjIiKTsKKyAgICAgICAgaWYgKCFz
dHJjbXAobmFtZSwgIngtbWFjLXR1cmtpc2giKSkgeworICAgICAgICAgICAgcmVnaXN0cmFyKG5h
bWUsIFtuYW1lXSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4
dENvZGVjSUNVPihuYW1lLCAibWFjb3MtMzUtMTAuMiIpOworICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoIXN0cmNtcChlbmNvZGlu
Z05hbWUubmFtZSwgIkVVQy1LUiIpKSB7Ci0gICAgICAgICAgICByZWdpc3RyYXIoZW5jb2RpbmdO
YW1lLm5hbWUsIGNyZWF0ZSwgIndpbmRvd3MtOTQ5Iik7CisgICAgICAgIGlmICghc3RyY21wKG5h
bWUsICJFVUMtS1IiKSkgeworICAgICAgICAgICAgcmVnaXN0cmFyKG5hbWUsIFtuYW1lXSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjSUNVPihuYW1l
LCAid2luZG93cy05NDkiKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIH0KIAogICAgICAgICBVRXJyb3JDb2RlIGVycm9yID0gVV9aRVJPX0VSUk9SOwot
ICAgICAgICBjb25zdCBjaGFyKiBjYW5vbmljYWxDb252ZXJ0ZXJOYW1lID0gdWNudl9nZXRDYW5v
bmljYWxOYW1lKGVuY29kaW5nTmFtZS5uYW1lLCAiSUFOQSIsICZlcnJvcik7CisgICAgICAgIGNv
bnN0IGNoYXIqIGNhbm9uaWNhbENvbnZlcnRlck5hbWUgPSB1Y252X2dldENhbm9uaWNhbE5hbWUo
bmFtZSwgIklBTkEiLCAmZXJyb3IpOwogICAgICAgICBBU1NFUlQoVV9TVUNDRVNTKGVycm9yKSk7
Ci0gICAgICAgIHJlZ2lzdHJhcihlbmNvZGluZ05hbWUubmFtZSwgY3JlYXRlLCBjYW5vbmljYWxD
b252ZXJ0ZXJOYW1lKTsKKyAgICAgICAgcmVnaXN0cmFyKG5hbWUsIFtuYW1lLCBjYW5vbmljYWxD
b252ZXJ0ZXJOYW1lXSB7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxUZXh0
Q29kZWNJQ1U+KG5hbWUsIGNhbm9uaWNhbENvbnZlcnRlck5hbWUpOworICAgICAgICB9KTsKICAg
ICB9CiB9CiAKIFRleHRDb2RlY0lDVTo6VGV4dENvZGVjSUNVKGNvbnN0IGNoYXIqIGVuY29kaW5n
LCBjb25zdCBjaGFyKiBjYW5vbmljYWxDb252ZXJ0ZXJOYW1lKQogICAgIDogbV9lbmNvZGluZ05h
bWUoZW5jb2RpbmcpCiAgICAgLCBtX2Nhbm9uaWNhbENvbnZlcnRlck5hbWUoY2Fub25pY2FsQ29u
dmVydGVyTmFtZSkKLSAgICAsIG1fY29udmVydGVySUNVKDApCi0gICAgLCBtX25lZWRzR0JLRmFs
bGJhY2tzKGZhbHNlKQogewogfQogCiBUZXh0Q29kZWNJQ1U6On5UZXh0Q29kZWNJQ1UoKQogewot
ICAgIHJlbGVhc2VJQ1VDb252ZXJ0ZXIoKTsKLX0KLQotdm9pZCBUZXh0Q29kZWNJQ1U6OnJlbGVh
c2VJQ1VDb252ZXJ0ZXIoKSBjb25zdAotewotICAgIGlmIChtX2NvbnZlcnRlcklDVSkgewotICAg
ICAgICBVQ29udmVydGVyKiYgY2FjaGVkQ29udmVydGVyID0gY2FjaGVkQ29udmVydGVySUNVKCk7
Ci0gICAgICAgIGlmIChjYWNoZWRDb252ZXJ0ZXIpCi0gICAgICAgICAgICB1Y252X2Nsb3NlKGNh
Y2hlZENvbnZlcnRlcik7Ci0gICAgICAgIHVjbnZfcmVzZXQobV9jb252ZXJ0ZXJJQ1UpOwotICAg
ICAgICBjYWNoZWRDb252ZXJ0ZXIgPSBtX2NvbnZlcnRlcklDVTsKLSAgICAgICAgbV9jb252ZXJ0
ZXJJQ1UgPSAwOworICAgIGlmIChtX2NvbnZlcnRlcikgeworICAgICAgICB1Y252X3Jlc2V0KG1f
Y29udmVydGVyLmdldCgpKTsKKyAgICAgICAgdGhyZWFkR2xvYmFsRGF0YSgpLmNhY2hlZENvbnZl
cnRlcklDVSgpLmNvbnZlcnRlciA9IFdURk1vdmUobV9jb252ZXJ0ZXIpOwogICAgIH0KIH0KIAog
dm9pZCBUZXh0Q29kZWNJQ1U6OmNyZWF0ZUlDVUNvbnZlcnRlcigpIGNvbnN0CiB7Ci0gICAgQVNT
RVJUKCFtX2NvbnZlcnRlcklDVSk7Ci0KLSAgICBVRXJyb3JDb2RlIGVycjsKKyAgICBBU1NFUlQo
IW1fY29udmVydGVyKTsKIAogICAgIG1fbmVlZHNHQktGYWxsYmFja3MgPSAhc3RyY21wKG1fZW5j
b2RpbmdOYW1lLCAiR0JLIik7CiAKLSAgICBVQ29udmVydGVyKiYgY2FjaGVkQ29udmVydGVyID0g
Y2FjaGVkQ29udmVydGVySUNVKCk7CisgICAgYXV0byYgY2FjaGVkQ29udmVydGVyID0gdGhyZWFk
R2xvYmFsRGF0YSgpLmNhY2hlZENvbnZlcnRlcklDVSgpLmNvbnZlcnRlcjsKICAgICBpZiAoY2Fj
aGVkQ29udmVydGVyKSB7Ci0gICAgICAgIGVyciA9IFVfWkVST19FUlJPUjsKLSAgICAgICAgY29u
c3QgY2hhciogY2FjaGVkQ29udmVydGVyTmFtZSA9IHVjbnZfZ2V0TmFtZShjYWNoZWRDb252ZXJ0
ZXIsICZlcnIpOwotICAgICAgICBpZiAoVV9TVUNDRVNTKGVycikgJiYgIXN0cmNtcChtX2Nhbm9u
aWNhbENvbnZlcnRlck5hbWUsIGNhY2hlZENvbnZlcnRlck5hbWUpKSB7Ci0gICAgICAgICAgICBt
X2NvbnZlcnRlcklDVSA9IGNhY2hlZENvbnZlcnRlcjsKLSAgICAgICAgICAgIGNhY2hlZENvbnZl
cnRlciA9IDA7CisgICAgICAgIFVFcnJvckNvZGUgZXJyb3IgPSBVX1pFUk9fRVJST1I7CisgICAg
ICAgIGNvbnN0IGNoYXIqIGNhY2hlZENvbnZlcnRlck5hbWUgPSB1Y252X2dldE5hbWUoY2FjaGVk
Q29udmVydGVyLmdldCgpLCAmZXJyb3IpOworICAgICAgICBpZiAoVV9TVUNDRVNTKGVycm9yKSAm
JiAhc3RyY21wKG1fY2Fub25pY2FsQ29udmVydGVyTmFtZSwgY2FjaGVkQ29udmVydGVyTmFtZSkp
IHsKKyAgICAgICAgICAgIG1fY29udmVydGVyID0gV1RGTW92ZShjYWNoZWRDb252ZXJ0ZXIpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCi0gICAgZXJyID0gVV9aRVJP
X0VSUk9SOwotICAgIG1fY29udmVydGVySUNVID0gdWNudl9vcGVuKG1fY2Fub25pY2FsQ29udmVy
dGVyTmFtZSwgJmVycik7Ci0gICAgQVNTRVJUKFVfU1VDQ0VTUyhlcnIpKTsKLSAgICBpZiAobV9j
b252ZXJ0ZXJJQ1UpCi0gICAgICAgIHVjbnZfc2V0RmFsbGJhY2sobV9jb252ZXJ0ZXJJQ1UsIFRS
VUUpOworICAgIFVFcnJvckNvZGUgZXJyb3IgPSBVX1pFUk9fRVJST1I7CisgICAgbV9jb252ZXJ0
ZXIgPSBJQ1VDb252ZXJ0ZXJQdHIgeyB1Y252X29wZW4obV9jYW5vbmljYWxDb252ZXJ0ZXJOYW1l
LCAmZXJyb3IpLCB1Y252X2Nsb3NlIH07CisgICAgaWYgKG1fY29udmVydGVyKQorICAgICAgICB1
Y252X3NldEZhbGxiYWNrKG1fY29udmVydGVyLmdldCgpLCBUUlVFKTsKIH0KIAotaW50IFRleHRD
b2RlY0lDVTo6ZGVjb2RlVG9CdWZmZXIoVUNoYXIqIHRhcmdldCwgVUNoYXIqIHRhcmdldExpbWl0
LCBjb25zdCBjaGFyKiYgc291cmNlLCBjb25zdCBjaGFyKiBzb3VyY2VMaW1pdCwgaW50MzJfdCog
b2Zmc2V0cywgYm9vbCBmbHVzaCwgVUVycm9yQ29kZSYgZXJyKQoraW50IFRleHRDb2RlY0lDVTo6
ZGVjb2RlVG9CdWZmZXIoVUNoYXIqIHRhcmdldCwgVUNoYXIqIHRhcmdldExpbWl0LCBjb25zdCBj
aGFyKiYgc291cmNlLCBjb25zdCBjaGFyKiBzb3VyY2VMaW1pdCwgaW50MzJfdCogb2Zmc2V0cywg
Ym9vbCBmbHVzaCwgVUVycm9yQ29kZSYgZXJyb3IpCiB7CiAgICAgVUNoYXIqIHRhcmdldFN0YXJ0
ID0gdGFyZ2V0OwotICAgIGVyciA9IFVfWkVST19FUlJPUjsKLSAgICB1Y252X3RvVW5pY29kZSht
X2NvbnZlcnRlcklDVSwgJnRhcmdldCwgdGFyZ2V0TGltaXQsICZzb3VyY2UsIHNvdXJjZUxpbWl0
LCBvZmZzZXRzLCBmbHVzaCwgJmVycik7CisgICAgZXJyb3IgPSBVX1pFUk9fRVJST1I7CisgICAg
dWNudl90b1VuaWNvZGUobV9jb252ZXJ0ZXIuZ2V0KCksICZ0YXJnZXQsIHRhcmdldExpbWl0LCAm
c291cmNlLCBzb3VyY2VMaW1pdCwgb2Zmc2V0cywgZmx1c2gsICZlcnJvcik7CiAgICAgcmV0dXJu
IHRhcmdldCAtIHRhcmdldFN0YXJ0OwogfQogCiBjbGFzcyBFcnJvckNhbGxiYWNrU2V0dGVyIHsK
IHB1YmxpYzoKLSAgICBFcnJvckNhbGxiYWNrU2V0dGVyKFVDb252ZXJ0ZXIqIGNvbnZlcnRlciwg
Ym9vbCBzdG9wT25FcnJvcikKKyAgICBFcnJvckNhbGxiYWNrU2V0dGVyKFVDb252ZXJ0ZXImIGNv
bnZlcnRlciwgYm9vbCBzdG9wT25FcnJvcikKICAgICAgICAgOiBtX2NvbnZlcnRlcihjb252ZXJ0
ZXIpCiAgICAgICAgICwgbV9zaG91bGRTdG9wT25FbmNvZGluZ0Vycm9ycyhzdG9wT25FcnJvcikK
ICAgICB7CiAgICAgICAgIGlmIChtX3Nob3VsZFN0b3BPbkVuY29kaW5nRXJyb3JzKSB7CiAgICAg
ICAgICAgICBVRXJyb3JDb2RlIGVyciA9IFVfWkVST19FUlJPUjsKLSAgICAgICAgICAgIHVjbnZf
c2V0VG9VQ2FsbEJhY2sobV9jb252ZXJ0ZXIsIFVDTlZfVE9fVV9DQUxMQkFDS19TVUJTVElUVVRF
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNOVl9TVUJfU1RPUF9PTl9JTExFR0FMLCAm
bV9zYXZlZEFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZtX3NhdmVkQ29udGV4
dCwgJmVycik7CisgICAgICAgICAgICB1Y252X3NldFRvVUNhbGxCYWNrKCZtX2NvbnZlcnRlciwg
VUNOVl9UT19VX0NBTExCQUNLX1NVQlNUSVRVVEUsIFVDTlZfU1VCX1NUT1BfT05fSUxMRUdBTCwg
Jm1fc2F2ZWRBY3Rpb24sICZtX3NhdmVkQ29udGV4dCwgJmVycik7CiAgICAgICAgICAgICBBU1NF
UlQoZXJyID09IFVfWkVST19FUlJPUik7CiAgICAgICAgIH0KICAgICB9CkBAIC0yODYsOSArMjY4
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgVUVycm9yQ29kZSBlcnIgPSBVX1pFUk9fRVJST1I7
CiAgICAgICAgICAgICBjb25zdCB2b2lkKiBvbGRDb250ZXh0OwogICAgICAgICAgICAgVUNvbnZl
cnRlclRvVUNhbGxiYWNrIG9sZEFjdGlvbjsKLSAgICAgICAgICAgIHVjbnZfc2V0VG9VQ2FsbEJh
Y2sobV9jb252ZXJ0ZXIsIG1fc2F2ZWRBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgbV9zYXZl
ZENvbnRleHQsICZvbGRBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgJm9sZENvbnRleHQsICZl
cnIpOworICAgICAgICAgICAgdWNudl9zZXRUb1VDYWxsQmFjaygmbV9jb252ZXJ0ZXIsIG1fc2F2
ZWRBY3Rpb24sIG1fc2F2ZWRDb250ZXh0LCAmb2xkQWN0aW9uLCAmb2xkQ29udGV4dCwgJmVycik7
CiAgICAgICAgICAgICBBU1NFUlQob2xkQWN0aW9uID09IFVDTlZfVE9fVV9DQUxMQkFDS19TVUJT
VElUVVRFKTsKICAgICAgICAgICAgIEFTU0VSVCghc3RyY21wKHN0YXRpY19jYXN0PGNvbnN0IGNo
YXIqPihvbGRDb250ZXh0KSwgVUNOVl9TVUJfU1RPUF9PTl9JTExFR0FMKSk7CiAgICAgICAgICAg
ICBBU1NFUlQoZXJyID09IFVfWkVST19FUlJPUik7CkBAIC0yOTYsNyArMjc2LDcgQEAgcHVibGlj
OgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBVQ29udmVydGVyKiBtX2NvbnZlcnRlcjsKKyAgICBV
Q29udmVydGVyJiBtX2NvbnZlcnRlcjsKICAgICBib29sIG1fc2hvdWxkU3RvcE9uRW5jb2RpbmdF
cnJvcnM7CiAgICAgY29uc3Qgdm9pZCogbV9zYXZlZENvbnRleHQ7CiAgICAgVUNvbnZlcnRlclRv
VUNhbGxiYWNrIG1fc2F2ZWRBY3Rpb247CkBAIC0zMDUsMTYgKzI4NSwxNiBAQCBwcml2YXRlOgog
U3RyaW5nIFRleHRDb2RlY0lDVTo6ZGVjb2RlKGNvbnN0IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVu
Z3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcikKIHsKICAg
ICAvLyBHZXQgYSBjb252ZXJ0ZXIgZm9yIHRoZSBwYXNzZWQtaW4gZW5jb2RpbmcuCi0gICAgaWYg
KCFtX2NvbnZlcnRlcklDVSkgeworICAgIGlmICghbV9jb252ZXJ0ZXIpIHsKICAgICAgICAgY3Jl
YXRlSUNVQ29udmVydGVyKCk7Ci0gICAgICAgIEFTU0VSVChtX2NvbnZlcnRlcklDVSk7Ci0gICAg
ICAgIGlmICghbV9jb252ZXJ0ZXJJQ1UpIHsKKyAgICAgICAgaWYgKCFtX2NvbnZlcnRlcikgewog
ICAgICAgICAgICAgTE9HX0VSUk9SKCJlcnJvciBjcmVhdGluZyBJQ1UgZW5jb2RlciBldmVuIHRo
b3VnaCBlbmNvZGluZyB3YXMgaW4gdGFibGUiKTsKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKyAgICAgICAgICAgIHNhd0Vycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiB7IH07
CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgRXJyb3JDYWxsYmFja1NldHRlciBjYWxsYmFj
a1NldHRlcihtX2NvbnZlcnRlcklDVSwgc3RvcE9uRXJyb3IpOworICAgIEVycm9yQ2FsbGJhY2tT
ZXR0ZXIgY2FsbGJhY2tTZXR0ZXIoKm1fY29udmVydGVyLCBzdG9wT25FcnJvcik7CiAKICAgICBT
dHJpbmdCdWlsZGVyIHJlc3VsdDsKIApAQCAtMzQwLDE3ICszMjAsMTUgQEAgU3RyaW5nIFRleHRD
b2RlY0lDVTo6ZGVjb2RlKGNvbnN0IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sIGZs
dXNoLCBib29sIHMKIAogICAgIFN0cmluZyByZXN1bHRTdHJpbmcgPSByZXN1bHQudG9TdHJpbmco
KTsKIAotICAgIC8vIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAx
ND4KICAgICAvLyBTaW1wbGlmaWVkIENoaW5lc2UgcGFnZXMgdXNlIHRoZSBjb2RlIEEzQTAgdG8g
bWVhbiAiZnVsbC13aWR0aCBzcGFjZSIsIGJ1dCBJQ1UgZGVjb2RlcyBpdCBhcyBVK0U1RTUuCi0g
ICAgLy8gRklYTUU6IHN0cmNhc2VjbXAgaXMgbG9jYWxlIHNlbnNpdGl2ZSwgd2Ugc2hvdWxkIG5v
dCBiZSB1c2luZyBpdC4KLSAgICBpZiAoc3RyY21wKG1fZW5jb2RpbmdOYW1lLCAiR0JLIikgPT0g
MCB8fCBzdHJjYXNlY21wKG1fZW5jb2RpbmdOYW1lLCAiZ2IxODAzMCIpID09IDApCisgICAgaWYg
KCFzdHJjbXAobV9lbmNvZGluZ05hbWUsICJHQksiKSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShtX2VuY29kaW5nTmFtZSwgImdiMTgwMzAiKSkKICAgICAgICAgcmVzdWx0U3RyaW5n
LnJlcGxhY2UoMHhFNUU1LCBpZGVvZ3JhcGhpY1NwYWNlKTsKIAogICAgIHJldHVybiByZXN1bHRT
dHJpbmc7CiB9CiAKIC8vIFdlIG5lZWQgdG8gYXBwbHkgdGhlc2UgZmFsbGJhY2tzIG91cnNlbHZl
cyBhcyB0aGV5IGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZCBieSBJQ1UgYW5kCi0vLyB0aGV5
IHdlcmUgcHJvdmlkZWQgYnkgdGhlIG9sZCBURUMgZW5jb2RpbmcgcGF0aC4gTmVlZGVkIHRvIGZp
eCA8cmRhcjovL3Byb2JsZW0vNDcwODY4OT4uCisvLyB0aGV5IHdlcmUgcHJvdmlkZWQgYnkgdGhl
IE1hYyBURUMgZW5jb2RpbmcgcGF0aC4gTmVlZGVkIHRvIGZpeCA8cmRhcjovL3Byb2JsZW0vNDcw
ODY4OT4uCiBzdGF0aWMgVUNoYXIgZmFsbGJhY2tGb3JHQksoVUNoYXIzMiBjaGFyYWN0ZXIpCiB7
CiAgICAgc3dpdGNoIChjaGFyYWN0ZXIpIHsKQEAgLTM2OSwxMzAgKzM0NywxMjIgQEAgc3RhdGlj
IFVDaGFyIGZhbGxiYWNrRm9yR0JLKFVDaGFyMzIgY2hhcmFjdGVyKQogLy8gSW52YWxpZCBjaGFy
YWN0ZXIgaGFuZGxlciB3aGVuIHdyaXRpbmcgZXNjYXBlZCBlbnRpdGllcyBmb3IgdW5yZXByZXNl
bnRhYmxlCiAvLyBjaGFyYWN0ZXJzLiBTZWUgdGhlIGRlY2xhcmF0aW9uIG9mIFRleHRDb2RlYzo6
ZW5jb2RlIGZvciBtb3JlLgogc3RhdGljIHZvaWQgdXJsRXNjYXBlZEVudGl0eUNhbGxiYWNrKGNv
bnN0IHZvaWQqIGNvbnRleHQsIFVDb252ZXJ0ZXJGcm9tVW5pY29kZUFyZ3MqIGZyb21VQXJncywg
Y29uc3QgVUNoYXIqIGNvZGVVbml0cywgaW50MzJfdCBsZW5ndGgsCi0gICAgVUNoYXIzMiBjb2Rl
UG9pbnQsIFVDb252ZXJ0ZXJDYWxsYmFja1JlYXNvbiByZWFzb24sIFVFcnJvckNvZGUqIGVycikK
KyAgICBVQ2hhcjMyIGNvZGVQb2ludCwgVUNvbnZlcnRlckNhbGxiYWNrUmVhc29uIHJlYXNvbiwg
VUVycm9yQ29kZSogZXJyb3IpCiB7CiAgICAgaWYgKHJlYXNvbiA9PSBVQ05WX1VOQVNTSUdORUQp
IHsKLSAgICAgICAgKmVyciA9IFVfWkVST19FUlJPUjsKLQorICAgICAgICAqZXJyb3IgPSBVX1pF
Uk9fRVJST1I7CiAgICAgICAgIFVuZW5jb2RhYmxlUmVwbGFjZW1lbnRBcnJheSBlbnRpdHk7Ci0g
ICAgICAgIGludCBlbnRpdHlMZW4gPSBUZXh0Q29kZWM6OmdldFVuZW5jb2RhYmxlUmVwbGFjZW1l
bnQoY29kZVBvaW50LCBVUkxFbmNvZGVkRW50aXRpZXNGb3JVbmVuY29kYWJsZXMsIGVudGl0eSk7
Ci0gICAgICAgIHVjbnZfY2JGcm9tVVdyaXRlQnl0ZXMoZnJvbVVBcmdzLCBlbnRpdHksIGVudGl0
eUxlbiwgMCwgZXJyKTsKKyAgICAgICAgaW50IGVudGl0eUxlbiA9IFRleHRDb2RlYzo6Z2V0VW5l
bmNvZGFibGVSZXBsYWNlbWVudChjb2RlUG9pbnQsIFVuZW5jb2RhYmxlSGFuZGxpbmc6OlVSTEVu
Y29kZWRFbnRpdGllcywgZW50aXR5KTsKKyAgICAgICAgdWNudl9jYkZyb21VV3JpdGVCeXRlcyhm
cm9tVUFyZ3MsIGVudGl0eS5kYXRhKCksIGVudGl0eUxlbiwgMCwgZXJyb3IpOwogICAgIH0gZWxz
ZQotICAgICAgICBVQ05WX0ZST01fVV9DQUxMQkFDS19FU0NBUEUoY29udGV4dCwgZnJvbVVBcmdz
LCBjb2RlVW5pdHMsIGxlbmd0aCwgY29kZVBvaW50LCByZWFzb24sIGVycik7CisgICAgICAgIFVD
TlZfRlJPTV9VX0NBTExCQUNLX0VTQ0FQRShjb250ZXh0LCBmcm9tVUFyZ3MsIGNvZGVVbml0cywg
bGVuZ3RoLCBjb2RlUG9pbnQsIHJlYXNvbiwgZXJyb3IpOwogfQogCiAvLyBTdWJzdGl0dXRlcyBz
cGVjaWFsIEdCSyBjaGFyYWN0ZXJzLCBlc2NhcGluZyBhbGwgb3RoZXIgdW5hc3NpZ25lZCBlbnRp
dGllcy4KIHN0YXRpYyB2b2lkIGdia0NhbGxiYWNrRXNjYXBlKGNvbnN0IHZvaWQqIGNvbnRleHQs
IFVDb252ZXJ0ZXJGcm9tVW5pY29kZUFyZ3MqIGZyb21VQXJncywgY29uc3QgVUNoYXIqIGNvZGVV
bml0cywgaW50MzJfdCBsZW5ndGgsCi0gICAgVUNoYXIzMiBjb2RlUG9pbnQsIFVDb252ZXJ0ZXJD
YWxsYmFja1JlYXNvbiByZWFzb24sIFVFcnJvckNvZGUqIGVycikgCisgICAgVUNoYXIzMiBjb2Rl
UG9pbnQsIFVDb252ZXJ0ZXJDYWxsYmFja1JlYXNvbiByZWFzb24sIFVFcnJvckNvZGUqIGVycm9y
KQogewogICAgIFVDaGFyIG91dENoYXI7CiAgICAgaWYgKHJlYXNvbiA9PSBVQ05WX1VOQVNTSUdO
RUQgJiYgKG91dENoYXIgPSBmYWxsYmFja0ZvckdCSyhjb2RlUG9pbnQpKSkgewogICAgICAgICBj
b25zdCBVQ2hhciogc291cmNlID0gJm91dENoYXI7Ci0gICAgICAgICplcnIgPSBVX1pFUk9fRVJS
T1I7Ci0gICAgICAgIHVjbnZfY2JGcm9tVVdyaXRlVUNoYXJzKGZyb21VQXJncywgJnNvdXJjZSwg
c291cmNlICsgMSwgMCwgZXJyKTsKKyAgICAgICAgKmVycm9yID0gVV9aRVJPX0VSUk9SOworICAg
ICAgICB1Y252X2NiRnJvbVVXcml0ZVVDaGFycyhmcm9tVUFyZ3MsICZzb3VyY2UsIHNvdXJjZSAr
IDEsIDAsIGVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBVQ05WX0ZST01fVV9D
QUxMQkFDS19FU0NBUEUoY29udGV4dCwgZnJvbVVBcmdzLCBjb2RlVW5pdHMsIGxlbmd0aCwgY29k
ZVBvaW50LCByZWFzb24sIGVycik7CisgICAgVUNOVl9GUk9NX1VfQ0FMTEJBQ0tfRVNDQVBFKGNv
bnRleHQsIGZyb21VQXJncywgY29kZVVuaXRzLCBsZW5ndGgsIGNvZGVQb2ludCwgcmVhc29uLCBl
cnJvcik7CiB9CiAKIC8vIENvbWJpbmVzIGJvdGggZ2JrVXJsRXNjYXBlZEVudGl0eUNhbGxiYWNr
IGFuZCBHQksgY2hhcmFjdGVyIHN1YnN0aXR1dGlvbi4KIHN0YXRpYyB2b2lkIGdia1VybEVzY2Fw
ZWRFbnRpdHlDYWxsYWNrKGNvbnN0IHZvaWQqIGNvbnRleHQsIFVDb252ZXJ0ZXJGcm9tVW5pY29k
ZUFyZ3MqIGZyb21VQXJncywgY29uc3QgVUNoYXIqIGNvZGVVbml0cywgaW50MzJfdCBsZW5ndGgs
Ci0gICAgVUNoYXIzMiBjb2RlUG9pbnQsIFVDb252ZXJ0ZXJDYWxsYmFja1JlYXNvbiByZWFzb24s
IFVFcnJvckNvZGUqIGVycikgCisgICAgVUNoYXIzMiBjb2RlUG9pbnQsIFVDb252ZXJ0ZXJDYWxs
YmFja1JlYXNvbiByZWFzb24sIFVFcnJvckNvZGUqIGVycm9yKQogewogICAgIGlmIChyZWFzb24g
PT0gVUNOVl9VTkFTU0lHTkVEKSB7CiAgICAgICAgIGlmIChVQ2hhciBvdXRDaGFyID0gZmFsbGJh
Y2tGb3JHQksoY29kZVBvaW50KSkgewogICAgICAgICAgICAgY29uc3QgVUNoYXIqIHNvdXJjZSA9
ICZvdXRDaGFyOwotICAgICAgICAgICAgKmVyciA9IFVfWkVST19FUlJPUjsKLSAgICAgICAgICAg
IHVjbnZfY2JGcm9tVVdyaXRlVUNoYXJzKGZyb21VQXJncywgJnNvdXJjZSwgc291cmNlICsgMSwg
MCwgZXJyKTsKKyAgICAgICAgICAgICplcnJvciA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgICAg
IHVjbnZfY2JGcm9tVVdyaXRlVUNoYXJzKGZyb21VQXJncywgJnNvdXJjZSwgc291cmNlICsgMSwg
MCwgZXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHVybEVz
Y2FwZWRFbnRpdHlDYWxsYmFjayhjb250ZXh0LCBmcm9tVUFyZ3MsIGNvZGVVbml0cywgbGVuZ3Ro
LCBjb2RlUG9pbnQsIHJlYXNvbiwgZXJyKTsKKyAgICAgICAgdXJsRXNjYXBlZEVudGl0eUNhbGxi
YWNrKGNvbnRleHQsIGZyb21VQXJncywgY29kZVVuaXRzLCBsZW5ndGgsIGNvZGVQb2ludCwgcmVh
c29uLCBlcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgVUNOVl9GUk9NX1VfQ0FM
TEJBQ0tfRVNDQVBFKGNvbnRleHQsIGZyb21VQXJncywgY29kZVVuaXRzLCBsZW5ndGgsIGNvZGVQ
b2ludCwgcmVhc29uLCBlcnIpOworICAgIFVDTlZfRlJPTV9VX0NBTExCQUNLX0VTQ0FQRShjb250
ZXh0LCBmcm9tVUFyZ3MsIGNvZGVVbml0cywgbGVuZ3RoLCBjb2RlUG9pbnQsIHJlYXNvbiwgZXJy
b3IpOwogfQogCiBzdGF0aWMgdm9pZCBnYmtDYWxsYmFja1N1YnN0aXR1dGUoY29uc3Qgdm9pZCog
Y29udGV4dCwgVUNvbnZlcnRlckZyb21Vbmljb2RlQXJncyogZnJvbVVBcmdzLCBjb25zdCBVQ2hh
ciogY29kZVVuaXRzLCBpbnQzMl90IGxlbmd0aCwKLSAgICBVQ2hhcjMyIGNvZGVQb2ludCwgVUNv
bnZlcnRlckNhbGxiYWNrUmVhc29uIHJlYXNvbiwgVUVycm9yQ29kZSogZXJyKSAKKyAgICBVQ2hh
cjMyIGNvZGVQb2ludCwgVUNvbnZlcnRlckNhbGxiYWNrUmVhc29uIHJlYXNvbiwgVUVycm9yQ29k
ZSogZXJyb3IpCiB7CiAgICAgVUNoYXIgb3V0Q2hhcjsKICAgICBpZiAocmVhc29uID09IFVDTlZf
VU5BU1NJR05FRCAmJiAob3V0Q2hhciA9IGZhbGxiYWNrRm9yR0JLKGNvZGVQb2ludCkpKSB7CiAg
ICAgICAgIGNvbnN0IFVDaGFyKiBzb3VyY2UgPSAmb3V0Q2hhcjsKLSAgICAgICAgKmVyciA9IFVf
WkVST19FUlJPUjsKLSAgICAgICAgdWNudl9jYkZyb21VV3JpdGVVQ2hhcnMoZnJvbVVBcmdzLCAm
c291cmNlLCBzb3VyY2UgKyAxLCAwLCBlcnIpOworICAgICAgICAqZXJyb3IgPSBVX1pFUk9fRVJS
T1I7CisgICAgICAgIHVjbnZfY2JGcm9tVVdyaXRlVUNoYXJzKGZyb21VQXJncywgJnNvdXJjZSwg
c291cmNlICsgMSwgMCwgZXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIFVDTlZf
RlJPTV9VX0NBTExCQUNLX1NVQlNUSVRVVEUoY29udGV4dCwgZnJvbVVBcmdzLCBjb2RlVW5pdHMs
IGxlbmd0aCwgY29kZVBvaW50LCByZWFzb24sIGVycik7CisgICAgVUNOVl9GUk9NX1VfQ0FMTEJB
Q0tfU1VCU1RJVFVURShjb250ZXh0LCBmcm9tVUFyZ3MsIGNvZGVVbml0cywgbGVuZ3RoLCBjb2Rl
UG9pbnQsIHJlYXNvbiwgZXJyb3IpOwogfQogCi1DU3RyaW5nIFRleHRDb2RlY0lDVTo6ZW5jb2Rl
KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRs
aW5nIGhhbmRsaW5nKQorVmVjdG9yPHVpbnQ4X3Q+IFRleHRDb2RlY0lDVTo6ZW5jb2RlKFN0cmlu
Z1ZpZXcgc3RyaW5nLCBVbmVuY29kYWJsZUhhbmRsaW5nIGhhbmRsaW5nKQogewotICAgIGlmICgh
bGVuZ3RoKQotICAgICAgICByZXR1cm4gIiI7CisgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiB7IH07CiAKLSAgICBpZiAoIW1fY29udmVydGVySUNVKQorICAgIGlmICgh
bV9jb252ZXJ0ZXIpIHsKICAgICAgICAgY3JlYXRlSUNVQ29udmVydGVyKCk7Ci0gICAgaWYgKCFt
X2NvbnZlcnRlcklDVSkKLSAgICAgICAgcmV0dXJuIENTdHJpbmcoKTsKKyAgICAgICAgaWYgKCFt
X2NvbnZlcnRlcikKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgfQogCiAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBzZWUgaWYgdGhlcmUgaXMgImZvcmNlIEFTQ0lJIHJhbmdlIiBtb2RlIGlu
IElDVTsKICAgICAvLyB1bnRpbCB0aGVuLCB3ZSBjaGFuZ2UgdGhlIGJhY2tzbGFzaCBpbnRvIGEg
eWVuIHNpZ24uCiAgICAgLy8gRW5jb2Rpbmcgd2lsbCBjaGFuZ2UgdGhlIHllbiBzaWduIGJhY2sg
aW50byBhIGJhY2tzbGFzaC4KLSAgICBWZWN0b3I8VUNoYXI+IGNvcHk7Ci0gICAgY29uc3QgVUNo
YXIqIHNvdXJjZSA9IGNoYXJhY3RlcnM7CisgICAgU3RyaW5nIGNvcHk7CiAgICAgaWYgKHNob3Vs
ZFNob3dCYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sSW4obV9lbmNvZGluZ05hbWUpKSB7Ci0gICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlm
IChjaGFyYWN0ZXJzW2ldID09ICdcXCcpIHsKLSAgICAgICAgICAgICAgICBjb3B5LnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkobGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0g
MDsgaiA8IGk7ICsraikKLSAgICAgICAgICAgICAgICAgICAgY29weS51bmNoZWNrZWRBcHBlbmQo
Y2hhcmFjdGVyc1tqXSk7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IGk7IGogPCBs
ZW5ndGg7ICsraikgewotICAgICAgICAgICAgICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSBjaGFy
YWN0ZXJzW2pdOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVyID09ICdcXCcpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgPSB5ZW5TaWduOwotICAgICAgICAgICAg
ICAgICAgICBjb3B5LnVuY2hlY2tlZEFwcGVuZChjaGFyYWN0ZXIpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBzb3VyY2UgPSBjb3B5LmRhdGEoKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBjb3B5ID0gc3RyaW5n
LnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKTsKKyAgICAgICAgY29weS5yZXBsYWNlKCdcXCcsIHll
blNpZ24pOworICAgICAgICBzdHJpbmcgPSBjb3B5OwogICAgIH0KLSAgICBjb25zdCBVQ2hhciog
c291cmNlTGltaXQgPSBzb3VyY2UgKyBsZW5ndGg7Ci0KLSAgICBVRXJyb3JDb2RlIGVyciA9IFVf
WkVST19FUlJPUjsKIAorICAgIFVFcnJvckNvZGUgZXJyb3I7CiAgICAgc3dpdGNoIChoYW5kbGlu
ZykgewotICAgICAgICBjYXNlIFF1ZXN0aW9uTWFya3NGb3JVbmVuY29kYWJsZXM6Ci0gICAgICAg
ICAgICB1Y252X3NldFN1YnN0Q2hhcnMobV9jb252ZXJ0ZXJJQ1UsICI/IiwgMSwgJmVycik7Ci0g
ICAgICAgICAgICB1Y252X3NldEZyb21VQ2FsbEJhY2sobV9jb252ZXJ0ZXJJQ1UsIG1fbmVlZHNH
QktGYWxsYmFja3MgPyBnYmtDYWxsYmFja1N1YnN0aXR1dGUgOiBVQ05WX0ZST01fVV9DQUxMQkFD
S19TVUJTVElUVVRFLCAwLCAwLCAwLCAmZXJyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzOgotICAgICAgICAgICAgdWNudl9zZXRGcm9t
VUNhbGxCYWNrKG1fY29udmVydGVySUNVLCBtX25lZWRzR0JLRmFsbGJhY2tzID8gZ2JrQ2FsbGJh
Y2tFc2NhcGUgOiBVQ05WX0ZST01fVV9DQUxMQkFDS19FU0NBUEUsIFVDTlZfRVNDQVBFX1hNTF9E
RUMsIDAsIDAsICZlcnIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVVJMRW5j
b2RlZEVudGl0aWVzRm9yVW5lbmNvZGFibGVzOgotICAgICAgICAgICAgdWNudl9zZXRGcm9tVUNh
bGxCYWNrKG1fY29udmVydGVySUNVLCBtX25lZWRzR0JLRmFsbGJhY2tzID8gZ2JrVXJsRXNjYXBl
ZEVudGl0eUNhbGxhY2sgOiB1cmxFc2NhcGVkRW50aXR5Q2FsbGJhY2ssIDAsIDAsIDAsICZlcnIp
OwotICAgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBVbmVuY29kYWJsZUhhbmRsaW5nOjpRdWVz
dGlvbk1hcmtzOgorICAgICAgICBlcnJvciA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgdWNudl9z
ZXRTdWJzdENoYXJzKG1fY29udmVydGVyLmdldCgpLCAiPyIsIDEsICZlcnJvcik7CisgICAgICAg
IGlmIChVX0ZBSUxVUkUoZXJyb3IpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAg
ZXJyb3IgPSBVX1pFUk9fRVJST1I7CisgICAgICAgIHVjbnZfc2V0RnJvbVVDYWxsQmFjayhtX2Nv
bnZlcnRlci5nZXQoKSwgbV9uZWVkc0dCS0ZhbGxiYWNrcyA/IGdia0NhbGxiYWNrU3Vic3RpdHV0
ZSA6IFVDTlZfRlJPTV9VX0NBTExCQUNLX1NVQlNUSVRVVEUsIDAsIDAsIDAsICZlcnJvcik7Cisg
ICAgICAgIGlmIChVX0ZBSUxVUkUoZXJyb3IpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBVbmVuY29kYWJsZUhhbmRsaW5nOjpFbnRpdGllczoKKyAg
ICAgICAgZXJyb3IgPSBVX1pFUk9fRVJST1I7CisgICAgICAgIHVjbnZfc2V0RnJvbVVDYWxsQmFj
ayhtX2NvbnZlcnRlci5nZXQoKSwgbV9uZWVkc0dCS0ZhbGxiYWNrcyA/IGdia0NhbGxiYWNrRXNj
YXBlIDogVUNOVl9GUk9NX1VfQ0FMTEJBQ0tfRVNDQVBFLCBVQ05WX0VTQ0FQRV9YTUxfREVDLCAw
LCAwLCAmZXJyb3IpOworICAgICAgICBpZiAoVV9GQUlMVVJFKGVycm9yKSkKKyAgICAgICAgICAg
IHJldHVybiB7IH07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVW5lbmNvZGFibGVIYW5kbGlu
Zzo6VVJMRW5jb2RlZEVudGl0aWVzOgorICAgICAgICBlcnJvciA9IFVfWkVST19FUlJPUjsKKyAg
ICAgICAgdWNudl9zZXRGcm9tVUNhbGxCYWNrKG1fY29udmVydGVyLmdldCgpLCBtX25lZWRzR0JL
RmFsbGJhY2tzID8gZ2JrVXJsRXNjYXBlZEVudGl0eUNhbGxhY2sgOiB1cmxFc2NhcGVkRW50aXR5
Q2FsbGJhY2ssIDAsIDAsIDAsICZlcnJvcik7CisgICAgICAgIGlmIChVX0ZBSUxVUkUoZXJyb3Ip
KQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAg
QVNTRVJUKFVfU1VDQ0VTUyhlcnIpKTsKLSAgICBpZiAoVV9GQUlMVVJFKGVycikpCi0gICAgICAg
IHJldHVybiBDU3RyaW5nKCk7CisgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBzdHJp
bmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CisgICAgYXV0byogc291cmNlID0gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzLmdldCgpOworICAgIGF1dG8qIHNvdXJjZUxpbWl0ID0gc291cmNlICsgc3Ry
aW5nLmxlbmd0aCgpOwogCi0gICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKLSAgICBzaXplX3Qgc2l6
ZSA9IDA7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdDsKICAgICBkbyB7CiAgICAgICAgIGNo
YXIgYnVmZmVyW0NvbnZlcnNpb25CdWZmZXJTaXplXTsKICAgICAgICAgY2hhciogdGFyZ2V0ID0g
YnVmZmVyOwogICAgICAgICBjaGFyKiB0YXJnZXRMaW1pdCA9IHRhcmdldCArIENvbnZlcnNpb25C
dWZmZXJTaXplOwotICAgICAgICBlcnIgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAgIHVjbnZfZnJv
bVVuaWNvZGUobV9jb252ZXJ0ZXJJQ1UsICZ0YXJnZXQsIHRhcmdldExpbWl0LCAmc291cmNlLCBz
b3VyY2VMaW1pdCwgMCwgdHJ1ZSwgJmVycik7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IHRhcmdl
dCAtIGJ1ZmZlcjsKLSAgICAgICAgcmVzdWx0Lmdyb3coc2l6ZSArIGNvdW50KTsKLSAgICAgICAg
bWVtY3B5KHJlc3VsdC5kYXRhKCkgKyBzaXplLCBidWZmZXIsIGNvdW50KTsKLSAgICAgICAgc2l6
ZSArPSBjb3VudDsKLSAgICB9IHdoaWxlIChlcnIgPT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1Ip
OwotCi0gICAgcmV0dXJuIENTdHJpbmcocmVzdWx0LmRhdGEoKSwgc2l6ZSk7CisgICAgICAgIGVy
cm9yID0gVV9aRVJPX0VSUk9SOworICAgICAgICB1Y252X2Zyb21Vbmljb2RlKG1fY29udmVydGVy
LmdldCgpLCAmdGFyZ2V0LCB0YXJnZXRMaW1pdCwgJnNvdXJjZSwgc291cmNlTGltaXQsIDAsIHRy
dWUsICZlcnJvcik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oYnVmZmVyKSwgdGFyZ2V0IC0gYnVmZmVyKTsKKyAgICB9IHdoaWxlIChlcnJvciA9PSBV
X0JVRkZFUl9PVkVSRkxPV19FUlJPUik7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0Q29kZWNJQ1UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVj
SUNVLmgKaW5kZXggMGMxNzk4YzliZjdhZTUzZWI3YzM3ZGU1ZjQyOGM0YjE3ZTc1ZDA1YS4uYWJm
ZDcwOTg2MGUxMmUxZDJkMDg4ZDkzOWJiNTEwNzFlYTlkNjE1MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNywgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8
YXBAbnlwb3AuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjQsNTQgKzI0LDQ1IEBACiAgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIFRleHRDb2RlY0lDVV9oCi0jZGVmaW5lIFRleHRD
b2RlY0lDVV9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIlRleHRDb2RlYy5oIgotI2luY2x1
ZGUgPHVuaWNvZGUvdXR5cGVzLmg+Ci0KLXR5cGVkZWYgc3RydWN0IFVDb252ZXJ0ZXIgVUNvbnZl
cnRlcjsKKyNpbmNsdWRlIDx1bmljb2RlL3VjbnYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci0gICAgY2xhc3MgVGV4dENvZGVjSUNVIDogcHVibGljIFRleHRDb2RlYyB7Ci0gICAgcHVibGlj
OgotICAgICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFRleHRDb2RlYz4gY3JlYXRlKGNvbnN0
IFRleHRFbmNvZGluZyYsIGNvbnN0IHZvaWQqIGFkZGl0aW9uYWxEYXRhKTsKK3VzaW5nIElDVUNv
bnZlcnRlclB0ciA9IHN0ZDo6dW5pcXVlX3B0cjxVQ29udmVydGVyLCB2b2lkICgqKShVQ29udmVy
dGVyKik+OwogCi0gICAgICAgIFRleHRDb2RlY0lDVShjb25zdCBjaGFyKiBlbmNvZGluZywgY29u
c3QgY2hhciogY2Fub25pY2FsQ29udmVydGVyTmFtZSk7CitjbGFzcyBUZXh0Q29kZWNJQ1UgOiBw
dWJsaWMgVGV4dENvZGVjIHsKK3B1YmxpYzoKKyAgICBUZXh0Q29kZWNJQ1UoY29uc3QgY2hhciog
ZW5jb2RpbmcsIGNvbnN0IGNoYXIqIGNhbm9uaWNhbENvbnZlcnRlck5hbWUpOworICAgIHZpcnR1
YWwgflRleHRDb2RlY0lDVSgpOwogCi0gICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRW5jb2Rp
bmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIpOwotICAgICAgICBzdGF0aWMgdm9pZCByZWdp
c3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIpOworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVy
RW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIpOworICAgIHN0YXRpYyB2b2lkIHJl
Z2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7CiAKLSAgICAgICAgdmlydHVhbCB+VGV4
dENvZGVjSUNVKCk7Citwcml2YXRlOgorICAgIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNp
emVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9y
KSBmaW5hbDsKKyAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlKFN0cmluZ1ZpZXcsIFVuZW5jb2Rh
YmxlSGFuZGxpbmcpIGZpbmFsOwogCi0gICAgcHJpdmF0ZToKLSAgICAgICAgU3RyaW5nIGRlY29k
ZShjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJv
ciwgYm9vbCYgc2F3RXJyb3IpIG92ZXJyaWRlOwotICAgICAgICBDU3RyaW5nIGVuY29kZShjb25z
dCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcpIG92ZXJyaWRlOwor
ICAgIHZvaWQgY3JlYXRlSUNVQ29udmVydGVyKCkgY29uc3Q7CisgICAgdm9pZCByZWxlYXNlSUNV
Q29udmVydGVyKCkgY29uc3Q7CisgICAgYm9vbCBuZWVkc0dCS0ZhbGxiYWNrcygpIGNvbnN0IHsg
cmV0dXJuIG1fbmVlZHNHQktGYWxsYmFja3M7IH0KKyAgICB2b2lkIHNldE5lZWRzR0JLRmFsbGJh
Y2tzKGJvb2wgbmVlZHNGYWxsYmFja3MpIHsgbV9uZWVkc0dCS0ZhbGxiYWNrcyA9IG5lZWRzRmFs
bGJhY2tzOyB9CiAKLSAgICAgICAgdm9pZCBjcmVhdGVJQ1VDb252ZXJ0ZXIoKSBjb25zdDsKLSAg
ICAgICAgdm9pZCByZWxlYXNlSUNVQ29udmVydGVyKCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgbmVl
ZHNHQktGYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX25lZWRzR0JLRmFsbGJhY2tzOyB9Ci0g
ICAgICAgIHZvaWQgc2V0TmVlZHNHQktGYWxsYmFja3MoYm9vbCBuZWVkc0ZhbGxiYWNrcykgeyBt
X25lZWRzR0JLRmFsbGJhY2tzID0gbmVlZHNGYWxsYmFja3M7IH0KLSAgICAgICAgCi0gICAgICAg
IGludCBkZWNvZGVUb0J1ZmZlcihVQ2hhciogYnVmZmVyLCBVQ2hhciogYnVmZmVyTGltaXQsIGNv
bnN0IGNoYXIqJiBzb3VyY2UsCi0gICAgICAgICAgICBjb25zdCBjaGFyKiBzb3VyY2VMaW1pdCwg
aW50MzJfdCogb2Zmc2V0cywgYm9vbCBmbHVzaCwgVUVycm9yQ29kZSYgZXJyKTsKKyAgICBpbnQg
ZGVjb2RlVG9CdWZmZXIoVUNoYXIqIGJ1ZmZlciwgVUNoYXIqIGJ1ZmZlckxpbWl0LCBjb25zdCBj
aGFyKiYgc291cmNlLCBjb25zdCBjaGFyKiBzb3VyY2VMaW1pdCwgaW50MzJfdCogb2Zmc2V0cywg
Ym9vbCBmbHVzaCwgVUVycm9yQ29kZSYpOwogCi0gICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IG1f
ZW5jb2RpbmdOYW1lOwotICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBtX2Nhbm9uaWNhbENvbnZl
cnRlck5hbWU7Ci0gICAgICAgIG11dGFibGUgVUNvbnZlcnRlciogbV9jb252ZXJ0ZXJJQ1U7Ci0g
ICAgICAgIG11dGFibGUgYm9vbCBtX25lZWRzR0JLRmFsbGJhY2tzOwotICAgIH07CisgICAgY29u
c3QgY2hhciogY29uc3QgbV9lbmNvZGluZ05hbWU7CisgICAgY29uc3QgY2hhciogY29uc3QgbV9j
YW5vbmljYWxDb252ZXJ0ZXJOYW1lOworICAgIG11dGFibGUgSUNVQ29udmVydGVyUHRyIG1fY29u
dmVydGVyIHsgbnVsbHB0ciwgdWNudl9jbG9zZSB9OworICAgIG11dGFibGUgYm9vbCBtX25lZWRz
R0JLRmFsbGJhY2tzIHsgZmFsc2UgfTsKK307CiAKLSAgICBzdHJ1Y3QgSUNVQ29udmVydGVyV3Jh
cHBlciB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKElDVUNvbnZlcnRlcldyYXBwZXIp
OyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIElDVUNvbnZl
cnRlcldyYXBwZXIoKSA6IGNvbnZlcnRlcigwKSB7IH0KLSAgICAgICAgfklDVUNvbnZlcnRlcldy
YXBwZXIoKTsKK3N0cnVjdCBJQ1VDb252ZXJ0ZXJXcmFwcGVyIHsKKyAgICBJQ1VDb252ZXJ0ZXJQ
dHIgY29udmVydGVyIHsgbnVsbHB0ciwgdWNudl9jbG9zZSB9OwogCi0gICAgICAgIFVDb252ZXJ0
ZXIqIGNvbnZlcnRlcjsKLSAgICB9OworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gVGV4dENvZGVjSUNVX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcAppbmRl
eCAwN2E2ZDE2ODM5ZGFlZDU5YzhmYzViODgxZThlZDRlZDZhZTU1OTk0Li5mZGE3OGUxNzQ1ZGE3
NzI2MDFkYWYxM2I0YmU2NTJiMGNkODcxYTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDYgKzI3LDcgQEAK
ICNpbmNsdWRlICJUZXh0Q29kZWNMYXRpbjEuaCIKIAogI2luY2x1ZGUgIlRleHRDb2RlY0FTQ0lJ
RmFzdFBhdGguaCIKKyNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CkBAIC0zNSw3ICszNiw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1
c2luZyBuYW1lc3BhY2UgV1RGOwogCi1zdGF0aWMgY29uc3QgVUNoYXIgdGFibGVbMjU2XSA9IHsK
K3N0YXRpYyBjb25zdCBVQ2hhciBsYXRpbjFDb252ZXJzaW9uVGFibGVbMjU2XSA9IHsKICAgICAw
eDAwMDAsIDB4MDAwMSwgMHgwMDAyLCAweDAwMDMsIDB4MDAwNCwgMHgwMDA1LCAweDAwMDYsIDB4
MDAwNywgLy8gMDAtMDcKICAgICAweDAwMDgsIDB4MDAwOSwgMHgwMDBBLCAweDAwMEIsIDB4MDAw
QywgMHgwMDBELCAweDAwMEUsIDB4MDAwRiwgLy8gMDgtMEYKICAgICAweDAwMTAsIDB4MDAxMSwg
MHgwMDEyLCAweDAwMTMsIDB4MDAxNCwgMHgwMDE1LCAweDAwMTYsIDB4MDAxNywgLy8gMTAtMTcK
QEAgLTkyLDE0ICs5MywxMSBAQCB2b2lkIFRleHRDb2RlY0xhdGluMTo6cmVnaXN0ZXJFbmNvZGlu
Z05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIpCiAgICAgcmVnaXN0cmFyKCJ4
LWNwMTI1MiIsICJ3aW5kb3dzLTEyNTIiKTsKIH0KIAotc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxU
ZXh0Q29kZWM+IG5ld1N0cmVhbWluZ1RleHREZWNvZGVyV2luZG93c0xhdGluMShjb25zdCBUZXh0
RW5jb2RpbmcmLCBjb25zdCB2b2lkKikKLXsKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxU
ZXh0Q29kZWNMYXRpbjE+KCk7Ci19Ci0KIHZvaWQgVGV4dENvZGVjTGF0aW4xOjpyZWdpc3RlckNv
ZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFyKQogewotICAgIHJlZ2lzdHJhcigid2lu
ZG93cy0xMjUyIiwgbmV3U3RyZWFtaW5nVGV4dERlY29kZXJXaW5kb3dzTGF0aW4xLCAwKTsKKyAg
ICByZWdpc3RyYXIoIndpbmRvd3MtMTI1MiIsIFtdIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV91bmlxdWU8VGV4dENvZGVjTGF0aW4xPigpOworICAgIH0pOwogfQogCiBTdHJpbmcgVGV4dENv
ZGVjTGF0aW4xOjpkZWNvZGUoY29uc3QgY2hhciogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIGJvb2ws
IGJvb2wsIGJvb2wmKQpAQCAtMTM5LDEwICsxMzcsMTAgQEAgU3RyaW5nIFRleHRDb2RlY0xhdGlu
MTo6ZGVjb2RlKGNvbnN0IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sLCBib29sLCBi
b28KICAgICAgICAgICAgICpkZXN0aW5hdGlvbiA9ICpzb3VyY2U7CiAgICAgICAgIH0gZWxzZSB7
CiB1c2VMb29rdXBUYWJsZToKLSAgICAgICAgICAgIGlmICh0YWJsZVsqc291cmNlXSA+IDB4ZmYp
CisgICAgICAgICAgICBpZiAobGF0aW4xQ29udmVyc2lvblRhYmxlWypzb3VyY2VdID4gMHhmZikK
ICAgICAgICAgICAgICAgICBnb3RvIHVwQ29udmVydFRvMTZCaXQ7CiAKLSAgICAgICAgICAgICpk
ZXN0aW5hdGlvbiA9IHRhYmxlWypzb3VyY2VdOworICAgICAgICAgICAgKmRlc3RpbmF0aW9uID0g
bGF0aW4xQ29udmVyc2lvblRhYmxlWypzb3VyY2VdOwogICAgICAgICB9CiAKICAgICAgICAgKytz
b3VyY2U7CkBAIC0xNjUsNyArMTYzLDcgQEAgdXBDb252ZXJ0VG8xNkJpdDoKICAgICAgICAgKmRl
c3RpbmF0aW9uMTYrKyA9ICpwdHI4Kys7CiAKICAgICAvLyBIYW5kbGUgdGhlIGNoYXJhY3RlciB0
aGF0IHRyaWdnZXJlZCB0aGUgMTYgYml0IHBhdGgKLSAgICAqZGVzdGluYXRpb24xNiA9IHRhYmxl
Wypzb3VyY2VdOworICAgICpkZXN0aW5hdGlvbjE2ID0gbGF0aW4xQ29udmVyc2lvblRhYmxlWypz
b3VyY2VdOwogICAgICsrc291cmNlOwogICAgICsrZGVzdGluYXRpb24xNjsKIApAQCAtMTk0LDcg
KzE5Miw3IEBAIHVwQ29udmVydFRvMTZCaXQ6CiAgICAgICAgICAgICAqZGVzdGluYXRpb24xNiA9
ICpzb3VyY2U7CiAgICAgICAgIH0gZWxzZSB7CiB1c2VMb29rdXBUYWJsZTE2OgotICAgICAgICAg
ICAgKmRlc3RpbmF0aW9uMTYgPSB0YWJsZVsqc291cmNlXTsKKyAgICAgICAgICAgICpkZXN0aW5h
dGlvbjE2ID0gbGF0aW4xQ29udmVyc2lvblRhYmxlWypzb3VyY2VdOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICArK3NvdXJjZTsKQEAgLTIwNCw1OCArMjAyLDUxIEBAIHVzZUxvb2t1cFRh
YmxlMTY6CiAgICAgcmV0dXJuIHJlc3VsdDE2OwogfQogCi1zdGF0aWMgQ1N0cmluZyBlbmNvZGVD
b21wbGV4V2luZG93c0xhdGluMShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0
aCwgVW5lbmNvZGFibGVIYW5kbGluZyBoYW5kbGluZykKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4g
ZW5jb2RlQ29tcGxleFdpbmRvd3NMYXRpbjEoU3RyaW5nVmlldyBzdHJpbmcsIFVuZW5jb2RhYmxl
SGFuZGxpbmcgaGFuZGxpbmcpCiB7Ci0gICAgVmVjdG9yPGNoYXI+IHJlc3VsdChsZW5ndGgpOwot
ICAgIGNoYXIqIGJ5dGVzID0gcmVzdWx0LmRhdGEoKTsKKyAgICBWZWN0b3I8dWludDhfdD4gcmVz
dWx0OwogCi0gICAgc2l6ZV90IHJlc3VsdExlbmd0aCA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsZW5ndGg7ICkgewotICAgICAgICBVQ2hhcjMyIGM7Ci0gICAgICAgIFUxNl9ORVhU
KGNoYXJhY3RlcnMsIGksIGxlbmd0aCwgYyk7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYiA9IGM7
CisgICAgZm9yIChhdXRvIGNoYXJhY3RlciA6IHN0cmluZy5jb2RlUG9pbnRzKCkpIHsKKyAgICAg
ICAgdWludDhfdCBiID0gY2hhcmFjdGVyOwogICAgICAgICAvLyBEbyBhbiBlZmZpY2llbnQgY2hl
Y2sgdG8gZGV0ZWN0IGNoYXJhY3RlcnMgb3RoZXIgdGhhbiAwMC03RiBhbmQgQTAtRkYuCi0gICAg
ICAgIGlmIChiICE9IGMgfHwgKGMgJiAweEUwKSA9PSAweDgwKSB7CisgICAgICAgIGlmIChiICE9
IGNoYXJhY3RlciB8fCAoY2hhcmFjdGVyICYgMHhFMCkgPT0gMHg4MCkgewogICAgICAgICAgICAg
Ly8gTG9vayBmb3IgYSB3YXkgdG8gZW5jb2RlIHRoaXMgd2l0aCBXaW5kb3dzIExhdGluLTEuCi0g
ICAgICAgICAgICBmb3IgKGIgPSAweDgwOyBiIDwgMHhBMDsgKytiKQotICAgICAgICAgICAgICAg
IGlmICh0YWJsZVtiXSA9PSBjKQorICAgICAgICAgICAgZm9yIChiID0gMHg4MDsgYiA8IDB4QTA7
ICsrYikgeworICAgICAgICAgICAgICAgIGlmIChsYXRpbjFDb252ZXJzaW9uVGFibGVbYl0gPT0g
Y2hhcmFjdGVyKQogICAgICAgICAgICAgICAgICAgICBnb3RvIGdvdEJ5dGU7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAvLyBObyB3YXkgdG8gZW5jb2RlIHRoaXMgY2hhcmFjdGVyIHdpdGgg
V2luZG93cyBMYXRpbi0xLgogICAgICAgICAgICAgVW5lbmNvZGFibGVSZXBsYWNlbWVudEFycmF5
IHJlcGxhY2VtZW50OwotICAgICAgICAgICAgaW50IHJlcGxhY2VtZW50TGVuZ3RoID0gVGV4dENv
ZGVjOjpnZXRVbmVuY29kYWJsZVJlcGxhY2VtZW50KGMsIGhhbmRsaW5nLCByZXBsYWNlbWVudCk7
Ci0gICAgICAgICAgICByZXN1bHQuZ3JvdyhyZXN1bHRMZW5ndGggKyByZXBsYWNlbWVudExlbmd0
aCArIGxlbmd0aCAtIGkpOwotICAgICAgICAgICAgYnl0ZXMgPSByZXN1bHQuZGF0YSgpOwotICAg
ICAgICAgICAgbWVtY3B5KGJ5dGVzICsgcmVzdWx0TGVuZ3RoLCByZXBsYWNlbWVudCwgcmVwbGFj
ZW1lbnRMZW5ndGgpOwotICAgICAgICAgICAgcmVzdWx0TGVuZ3RoICs9IHJlcGxhY2VtZW50TGVu
Z3RoOworICAgICAgICAgICAgaW50IHJlcGxhY2VtZW50TGVuZ3RoID0gVGV4dENvZGVjOjpnZXRV
bmVuY29kYWJsZVJlcGxhY2VtZW50KGNoYXJhY3RlciwgaGFuZGxpbmcsIHJlcGxhY2VtZW50KTsK
KyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVwbGFjZW1lbnQuZGF0YSgpLCByZXBsYWNlbWVu
dExlbmd0aCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgIGdvdEJ5dGU6
Ci0gICAgICAgIGJ5dGVzW3Jlc3VsdExlbmd0aCsrXSA9IGI7CisgICAgICAgIHJlc3VsdC5hcHBl
bmQoYik7CiAgICAgfQogCi0gICAgcmV0dXJuIENTdHJpbmcoYnl0ZXMsIHJlc3VsdExlbmd0aCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotQ1N0cmluZyBUZXh0Q29kZWNMYXRpbjE6OmVuY29k
ZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5k
bGluZyBoYW5kbGluZykKK1ZlY3Rvcjx1aW50OF90PiBUZXh0Q29kZWNMYXRpbjE6OmVuY29kZShT
dHJpbmdWaWV3IHN0cmluZywgVW5lbmNvZGFibGVIYW5kbGluZyBoYW5kbGluZykKIHsKICAgICB7
Ci0gICAgICAgIGNoYXIqIGJ5dGVzOwotICAgICAgICBDU3RyaW5nIHN0cmluZyA9IENTdHJpbmc6
Om5ld1VuaW5pdGlhbGl6ZWQobGVuZ3RoLCBieXRlcyk7CisgICAgICAgIFZlY3Rvcjx1aW50OF90
PiByZXN1bHQoc3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAgYXV0byogYnl0ZXMgPSByZXN1bHQu
ZGF0YSgpOwogCi0gICAgICAgIC8vIENvbnZlcnQgdGhlIHN0cmluZyBhIGZhc3Qgd2F5IGFuZCBz
aW11bHRhbmVvdXNseSBkbyBhbiBlZmZpY2llbnQgY2hlY2sgdG8gc2VlIGlmIGl0J3MgYWxsIEFT
Q0lJLgorICAgICAgICAvLyBDb252ZXJ0IGFuZCBzaW11bHRhbmVvdXNseSBkbyBhIGNoZWNrIHRv
IHNlZSBpZiBpdCdzIGFsbCBBU0NJSS4KICAgICAgICAgVUNoYXIgb3JlZCA9IDA7Ci0gICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIFVDaGFy
IGMgPSBjaGFyYWN0ZXJzW2ldOwotICAgICAgICAgICAgYnl0ZXNbaV0gPSBjOwotICAgICAgICAg
ICAgb3JlZCB8PSBjOworICAgICAgICBmb3IgKGF1dG8gY2hhcmFjdGVyIDogc3RyaW5nLmNvZGVV
bml0cygpKSB7CisgICAgICAgICAgICAqYnl0ZXMrKyA9IGNoYXJhY3RlcjsKKyAgICAgICAgICAg
IG9yZWQgfD0gY2hhcmFjdGVyOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCEob3JlZCAmIDB4
RkY4MCkpCi0gICAgICAgICAgICByZXR1cm4gc3RyaW5nOworICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAKICAgICAvLyBJZiBpdCB3YXNuJ3QgYWxsIEFTQ0lJLCBjYWxsIHRoZSBm
dW5jdGlvbiB0aGF0IGhhbmRsZXMgbW9yZS1jb21wbGV4IGNhc2VzLgotICAgIHJldHVybiBlbmNv
ZGVDb21wbGV4V2luZG93c0xhdGluMShjaGFyYWN0ZXJzLCBsZW5ndGgsIGhhbmRsaW5nKTsKKyAg
ICByZXR1cm4gZW5jb2RlQ29tcGxleFdpbmRvd3NMYXRpbjEoc3RyaW5nLCBoYW5kbGluZyk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRDb2RlY0xhdGluMS5oCmluZGV4IDlkMDhhYTNmNTk3NGU5NjJhMTU0MWQwM2VkNzlk
ZjliY2EyZGU0MjEuLjc0YWJjNzZhYzNkMGQ4Nzk5MDNlM2M0MjBlZDZlOGE0NzQzNzYyMjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuaApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjMsMjIgKzIzLDIxIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIFRleHRD
b2RlY0xhdGluMV9oCi0jZGVmaW5lIFRleHRDb2RlY0xhdGluMV9oCisjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgIlRleHRDb2RlYy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFz
cyBUZXh0Q29kZWNMYXRpbjEgOiBwdWJsaWMgVGV4dENvZGVjIHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3Ry
YXIpOwotICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3Ry
YXIpOworY2xhc3MgVGV4dENvZGVjTGF0aW4xIGZpbmFsIDogcHVibGljIFRleHRDb2RlYyB7Citw
dWJsaWM6CisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFt
ZVJlZ2lzdHJhcik7CisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVn
aXN0cmFyKTsKIAotICAgICAgICBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QgbGVu
Z3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcikgb3ZlcnJp
ZGU7Ci0gICAgICAgIENTdHJpbmcgZW5jb2RlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwg
VW5lbmNvZGFibGVIYW5kbGluZykgb3ZlcnJpZGU7Ci0gICAgfTsKK3ByaXZhdGU6CisgICAgU3Ry
aW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBz
dG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpIGZpbmFsOworICAgIFZlY3Rvcjx1aW50OF90PiBl
bmNvZGUoU3RyaW5nVmlldywgVW5lbmNvZGFibGVIYW5kbGluZykgZmluYWw7Cit9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBUZXh0Q29kZWNMYXRpbjFfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNSZXBsYWNlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1JlcGxhY2VtZW50LmNw
cAppbmRleCBmYzM5YjE4YjhjOTk3NTEwYzhjNDFjNjYxOGFkMTg3Yjc1ODRlMjJhLi5iYTI2MTRj
YTE0OGE0MjUwYWJkMjkyMmRkYzM3NmM2MGQyMjI4OWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1JlcGxhY2VtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1JlcGxhY2VtZW50LmNwcApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwyMiArMzAs
MTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGQ6OnVuaXF1ZV9wdHI8VGV4dENvZGVj
PiBUZXh0Q29kZWNSZXBsYWNlbWVudDo6Y3JlYXRlKGNvbnN0IFRleHRFbmNvZGluZyYsIGNvbnN0
IHZvaWQqKQotewotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFRleHRDb2RlY1JlcGxhY2Vt
ZW50PigpOwotfQotCi1UZXh0Q29kZWNSZXBsYWNlbWVudDo6VGV4dENvZGVjUmVwbGFjZW1lbnQo
KQotewotfQotCiB2b2lkIFRleHRDb2RlY1JlcGxhY2VtZW50OjpyZWdpc3RlckVuY29kaW5nTmFt
ZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhcikKIHsKLSAgICAvLyBUaGUgJ3JlcGxh
Y2VtZW50JyBpdHNlbGYgaXMgbm90IGEgdmFsaWQgbGFiZWwuIEl0IGlzIHRoZSBuYW1lIG9mCisg
ICAgLy8gVGhlIHN0cmluZyAncmVwbGFjZW1lbnQnIGl0c2VsZiBpcyBub3QgYSB2YWxpZCBsYWJl
bC4gSXQgaXMgdGhlIG5hbWUgb2YKICAgICAvLyBhIGdyb3VwIG9mIGxlZ2FjeSBlbmNvZGluZyBs
YWJlbHMuIEhlbmNlLCBpdCBjYW5ub3QgYmUgdXNlZCBkaXJlY3RseS4KKyAgICAvLyBUaGUgVGV4
dEVuY29kaW5nIGNsYXNzIGltcGxlbWVudHMgdGhlIGFib3ZlIHJ1bGU7IGhlcmUgd2UgcmVnaXN0
ZXIgaXQgbm9ybWFsbHkuCiAgICAgcmVnaXN0cmFyKCJyZXBsYWNlbWVudCIsICJyZXBsYWNlbWVu
dCIpOwogCi0gICAgLy8gVGhlIGxhYmVscwogICAgIHJlZ2lzdHJhcigiY3Npc28yMDIya3IiLCAi
cmVwbGFjZW1lbnQiKTsKICAgICByZWdpc3RyYXIoImh6LWdiLTIzMTIiLCAicmVwbGFjZW1lbnQi
KTsKICAgICByZWdpc3RyYXIoImlzby0yMDIyLWNuIiwgInJlcGxhY2VtZW50Iik7CkBAIC01NSw3
ICs0Niw5IEBAIHZvaWQgVGV4dENvZGVjUmVwbGFjZW1lbnQ6OnJlZ2lzdGVyRW5jb2RpbmdOYW1l
cyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyCiAKIHZvaWQgVGV4dENvZGVjUmVwbGFj
ZW1lbnQ6OnJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciByZWdpc3RyYXIpCiB7Ci0g
ICAgcmVnaXN0cmFyKCJyZXBsYWNlbWVudCIsIGNyZWF0ZSwgMCk7CisgICAgcmVnaXN0cmFyKCJy
ZXBsYWNlbWVudCIsIFtdIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4dENv
ZGVjUmVwbGFjZW1lbnQ+KCk7CisgICAgfSk7CiB9CiAKIFN0cmluZyBUZXh0Q29kZWNSZXBsYWNl
bWVudDo6ZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QsIGJvb2wsIGJvb2wsIGJvb2wmIHNhd0Vy
cm9yKQpAQCAtNjMsOSArNTYsOCBAQCBTdHJpbmcgVGV4dENvZGVjUmVwbGFjZW1lbnQ6OmRlY29k
ZShjb25zdCBjaGFyKiwgc2l6ZV90LCBib29sLCBib29sLCBib29sJiBzYXdFcgogICAgIHNhd0Vy
cm9yID0gdHJ1ZTsKICAgICBpZiAobV9zZW50RU9GKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJp
bmcoKTsKLQogICAgIG1fc2VudEVPRiA9IHRydWU7Ci0gICAgcmV0dXJuIFN0cmluZygmcmVwbGFj
ZW1lbnRDaGFyYWN0ZXIsIDEpOworICAgIHJldHVybiBTdHJpbmcgeyAmcmVwbGFjZW1lbnRDaGFy
YWN0ZXIsIDEgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNSZXBsYWNlbWVudC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNSZXBsYWNlbWVudC5oCmluZGV4IDdhNjdk
NTE2ZGI3MGMxNmU5NjBmNWNiMmJhODQwZTk2MmU4YjUxZjQuLmNlMmJjNjM2MzQ5YTdkODhkZWE3
NjZlMGIwYzc1NGYwMTUwZWJkYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dENvZGVjUmVwbGFjZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1RleHRDb2RlY1JlcGxhY2VtZW50LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsOCArMjMsNyBAQAogICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgVGV4dENvZGVjUmVwbGFjZW1l
bnRfaAotI2RlZmluZSBUZXh0Q29kZWNSZXBsYWNlbWVudF9oCisjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgIlRleHRDb2RlY1VURjguaCIKIApAQCAtMzIsMjAgKzMxLDE0IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgVGV4dENvZGVjUmVwbGFjZW1lbnQgOiBwdWJsaWMgVGV4dENvZGVj
VVRGOCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxUZXh0Q29kZWM+IGNy
ZWF0ZShjb25zdCBUZXh0RW5jb2RpbmcmLCBjb25zdCB2b2lkKik7Ci0KLSAgICBUZXh0Q29kZWNS
ZXBsYWNlbWVudCgpOwotCiAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJFbmNvZGluZ05hbWVzKEVu
Y29kaW5nTmFtZVJlZ2lzdHJhcik7CiAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJDb2RlY3MoVGV4
dENvZGVjUmVnaXN0cmFyKTsKIAogcHJpdmF0ZToKLSAgICBTdHJpbmcgZGVjb2RlKGNvbnN0IGNo
YXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBz
YXdFcnJvcikgb3ZlcnJpZGU7CisgICAgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90
IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpIGZp
bmFsOwogCiAgICAgYm9vbCBtX3NlbnRFT0YgeyBmYWxzZSB9OwogCiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvKiBUZXh0Q29kZWNSZXBsYWNlbWVudF9oICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGMTYuY3BwCmluZGV4IDBl
MzlkZTEyODUxMTI4MjY0YWI4NTJhODRkYzBkMzk5YzFhMDE3OGYuLjM4NmExNzgyNjI3MjZkODEx
MzQ0YjdmZGIyZmM5MjVmY2M4OTc4NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dENvZGVjVVRGMTYuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dENvZGVjVVRGMTYuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNiwgMjAwOCwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDYgKzMyLDExIEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAoraW5saW5lIFRleHRDb2RlY1VURjE2OjpUZXh0Q29k
ZWNVVEYxNihib29sIGxpdHRsZUVuZGlhbikKKyAgICA6IG1fbGl0dGxlRW5kaWFuKGxpdHRsZUVu
ZGlhbikKK3sKK30KKwogdm9pZCBUZXh0Q29kZWNVVEYxNjo6cmVnaXN0ZXJFbmNvZGluZ05hbWVz
KEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIpCiB7CiAgICAgcmVnaXN0cmFyKCJVVEYt
MTZMRSIsICJVVEYtMTZMRSIpOwpAQCAtNDcsMjAgKzUyLDE0IEBAIHZvaWQgVGV4dENvZGVjVVRG
MTY6OnJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFy
KQogICAgIHJlZ2lzdHJhcigidW5pY29kZUZGRkUiLCAiVVRGLTE2QkUiKTsKIH0KIAotc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxUZXh0Q29kZWM+IG5ld1N0cmVhbWluZ1RleHREZWNvZGVyVVRGMTZM
RShjb25zdCBUZXh0RW5jb2RpbmcmLCBjb25zdCB2b2lkKikKLXsKLSAgICByZXR1cm4gc3RkOjpt
YWtlX3VuaXF1ZTxUZXh0Q29kZWNVVEYxNj4odHJ1ZSk7Ci19Ci0KLXN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8VGV4dENvZGVjPiBuZXdTdHJlYW1pbmdUZXh0RGVjb2RlclVURjE2QkUoY29uc3QgVGV4
dEVuY29kaW5nJiwgY29uc3Qgdm9pZCopCi17Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8
VGV4dENvZGVjVVRGMTY+KGZhbHNlKTsKLX0KLQogdm9pZCBUZXh0Q29kZWNVVEYxNjo6cmVnaXN0
ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKIHsKLSAgICByZWdpc3RyYXIo
IlVURi0xNkxFIiwgbmV3U3RyZWFtaW5nVGV4dERlY29kZXJVVEYxNkxFLCAwKTsKLSAgICByZWdp
c3RyYXIoIlVURi0xNkJFIiwgbmV3U3RyZWFtaW5nVGV4dERlY29kZXJVVEYxNkJFLCAwKTsKKyAg
ICByZWdpc3RyYXIoIlVURi0xNkxFIiwgW10geworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxUZXh0Q29kZWNVVEYxNj4odHJ1ZSk7CisgICAgfSk7CisgICAgcmVnaXN0cmFyKCJVVEYt
MTZCRSIsIFtdIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjVVRG
MTY+KGZhbHNlKTsKKyAgICB9KTsKIH0KIAogU3RyaW5nIFRleHRDb2RlY1VURjE2OjpkZWNvZGUo
Y29uc3QgY2hhciogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIGJvb2wsIGJvb2wsIGJvb2wmKQpAQCAt
MTE0LDM2ICsxMTMsMjQgQEAgU3RyaW5nIFRleHRDb2RlY1VURjE2OjpkZWNvZGUoY29uc3QgY2hh
ciogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIGJvb2wsIGJvb2wsIGJvb2wKICAgICByZXR1cm4gU3Ry
aW5nOjphZG9wdChXVEZNb3ZlKGJ1ZmZlcikpOwogfQogCi1DU3RyaW5nIFRleHRDb2RlY1VURjE2
OjplbmNvZGUoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFVuZW5jb2Rh
YmxlSGFuZGxpbmcpCitWZWN0b3I8dWludDhfdD4gVGV4dENvZGVjVVRGMTY6OmVuY29kZShTdHJp
bmdWaWV3IHN0cmluZywgVW5lbmNvZGFibGVIYW5kbGluZykKIHsKLSAgICAvLyBXZSBuZWVkIHRv
IGJlIHN1cmUgd2UgY2FuIGRvdWJsZSB0aGUgbGVuZ3RoIHdpdGhvdXQgb3ZlcmZsb3dpbmcuCi0g
ICAgLy8gU2luY2UgdGhlIHBhc3NlZC1pbiBsZW5ndGggaXMgdGhlIGxlbmd0aCBvZiBhbiBhY3R1
YWwgZXhpc3RpbmcKLSAgICAvLyBjaGFyYWN0ZXIgYnVmZmVyLCBlYWNoIGNoYXJhY3RlciBpcyB0
d28gYnl0ZXMsIGFuZCB3ZSBrbm93Ci0gICAgLy8gdGhlIGJ1ZmZlciBkb2Vzbid0IG9jY3VweSB0
aGUgZW50aXJlIGFkZHJlc3Mgc3BhY2UsIHdlIGNhbgotICAgIC8vIGFzc2VydCBoZXJlIHRoYXQg
ZG91YmxpbmcgdGhlIGxlbmd0aCBkb2VzIG5vdCBvdmVyZmxvdyBzaXplX3QKLSAgICAvLyBhbmQg
dGhlcmUncyBubyBuZWVkIGZvciBhIHJ1bnRpbWUgY2hlY2suCi0gICAgQVNTRVJUKGxlbmd0aCA8
PSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIC8gMik7Ci0KLSAgICBjaGFyKiBi
eXRlczsKLSAgICBDU3RyaW5nIHN0cmluZyA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobGVu
Z3RoICogMiwgYnl0ZXMpOwotCi0gICAgLy8gRklYTUU6IENTdHJpbmcgaXMgbm90IGEgcmVhc29u
YWJsZSBkYXRhIHN0cnVjdHVyZSBmb3IgZW5jb2RlZCBVVEYtMTYsIHdoaWNoIHdpbGwgaGF2ZQot
ICAgIC8vIG51bGwgY2hhcmFjdGVycyBpbnNpZGUgaXQuIFBlcmhhcHMgdGhlIHJlc3VsdCBvZiBl
bmNvZGUgc2hvdWxkIG5vdCBiZSBhIENTdHJpbmcuCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3Vs
dChXVEY6OmNoZWNrZWRQcm9kdWN0PHNpemVfdD4oc3RyaW5nLmxlbmd0aCgpLCAyKS51bnNhZmVH
ZXQoKSk7CisgICAgYXV0byogYnl0ZXMgPSByZXN1bHQuZGF0YSgpOworCiAgICAgaWYgKG1fbGl0
dGxlRW5kaWFuKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgIFVDaGFyIGMgPSBjaGFyYWN0ZXJzW2ldOwotICAgICAgICAgICAgYnl0
ZXNbaSAqIDJdID0gYzsKLSAgICAgICAgICAgIGJ5dGVzW2kgKiAyICsgMV0gPSBjID4+IDg7Cisg
ICAgICAgIGZvciAoYXV0byBjaGFyYWN0ZXIgOiBzdHJpbmcuY29kZVVuaXRzKCkpIHsKKyAgICAg
ICAgICAgICpieXRlcysrID0gY2hhcmFjdGVyOworICAgICAgICAgICAgKmJ5dGVzKysgPSBjaGFy
YWN0ZXIgPj4gODsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIFVDaGFyIGMgPSBjaGFyYWN0
ZXJzW2ldOwotICAgICAgICAgICAgYnl0ZXNbaSAqIDJdID0gYyA+PiA4OwotICAgICAgICAgICAg
Ynl0ZXNbaSAqIDIgKyAxXSA9IGM7CisgICAgICAgIGZvciAoYXV0byBjaGFyYWN0ZXIgOiBzdHJp
bmcuY29kZVVuaXRzKCkpIHsKKyAgICAgICAgICAgICpieXRlcysrID0gY2hhcmFjdGVyID4+IDg7
CisgICAgICAgICAgICAqYnl0ZXMrKyA9IGNoYXJhY3RlcjsKICAgICAgICAgfQogICAgIH0KIAot
ICAgIHJldHVybiBzdHJpbmc7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
Q29kZWNVVEYxNi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEYx
Ni5oCmluZGV4IDI4NzYwY2RlZTZkY2IyYThlZjZmYmM5NmI1YTgyODlmMGZhMzI1ZjIuLmMxMWJi
ZmIxY2E4YjhmM2E5MWIxYTdlZjg1ZTI0YmI0ZWMxODM5YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGMTYuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDI5ICsyMywyNiBAQAog
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBUZXh0Q29kZWNVVEYxNl9oCi0jZGVmaW5l
IFRleHRDb2RlY1VURjE2X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiVGV4dENvZGVjLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIFRleHRDb2RlY1VURjE2IDogcHVi
bGljIFRleHRDb2RlYyB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3Rl
ckVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyKTsKLSAgICAgICAgc3RhdGljIHZv
aWQgcmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyKTsKK2NsYXNzIFRleHRDb2RlY1VU
RjE2IDogcHVibGljIFRleHRDb2RlYyB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgcmVnaXN0
ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhcik7CisgICAgc3RhdGljIHZvaWQg
cmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyKTsKIAotICAgICAgICBUZXh0Q29kZWNV
VEYxNihib29sIGxpdHRsZUVuZGlhbikgOiBtX2xpdHRsZUVuZGlhbihsaXR0bGVFbmRpYW4pLCBt
X2hhdmVCdWZmZXJlZEJ5dGUoZmFsc2UpIHsgfQorICAgIGV4cGxpY2l0IFRleHRDb2RlY1VURjE2
KGJvb2wgbGl0dGxlRW5kaWFuKTsKIAotICAgICAgICBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIq
LCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdF
cnJvcikgb3ZlcnJpZGU7Ci0gICAgICAgIENTdHJpbmcgZW5jb2RlKGNvbnN0IFVDaGFyKiwgc2l6
ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZykgb3ZlcnJpZGU7Citwcml2YXRlOgorICAg
IFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJv
b2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9yKSBmaW5hbDsKKyAgICBWZWN0b3I8dWludDhf
dD4gZW5jb2RlKFN0cmluZ1ZpZXcsIFVuZW5jb2RhYmxlSGFuZGxpbmcpIGZpbmFsOwogCi0gICAg
cHJpdmF0ZToKLSAgICAgICAgYm9vbCBtX2xpdHRsZUVuZGlhbjsKLSAgICAgICAgYm9vbCBtX2hh
dmVCdWZmZXJlZEJ5dGU7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgbV9idWZmZXJlZEJ5dGU7Ci0g
ICAgfTsKKyAgICBib29sIG1fbGl0dGxlRW5kaWFuOworICAgIGJvb2wgbV9oYXZlQnVmZmVyZWRC
eXRlIHsgZmFsc2UgfTsKKyAgICB1bnNpZ25lZCBjaGFyIG1fYnVmZmVyZWRCeXRlOworfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVGV4dENvZGVjVVRGMTZfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEY4LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGOC5jcHAKaW5kZXggY2Q1
MDQyNzk5MGZmNTZhMmYxYTkxYjM2Y2U1MzM2YjVmZTliMjQ2My4uYjMxOGU2MjJiY2JlMTE4MDE5
YTQxNjg1NjMzMzU1NmYxMDcyZDc5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0Q29kZWNVVEY4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRDb2RlY1VURjguY3BwCkBAIC01NSw5ICs1NSw5IEBAIHZvaWQgVGV4dENvZGVjVVRG
ODo6cmVnaXN0ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIp
CiAKIHZvaWQgVGV4dENvZGVjVVRGODo6cmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFy
IHJlZ2lzdHJhcikKIHsKLSAgICByZWdpc3RyYXIoIlVURi04IiwgW10gKGNvbnN0IFRleHRFbmNv
ZGluZyYsIGNvbnN0IHZvaWQqKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8VGV4dENvZGVjPiB7CisgICAg
cmVnaXN0cmFyKCJVVEYtOCIsIFtdIHsKICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8
VGV4dENvZGVjVVRGOD4oKTsKLSAgICB9LCBudWxscHRyKTsKKyAgICB9KTsKIH0KIAogc3RhdGlj
IGlubGluZSBpbnQgbm9uQVNDSUlTZXF1ZW5jZUxlbmd0aCh1aW50OF90IGZpcnN0Qnl0ZSkKQEAg
LTQzMiwyMiArNDMyLDE3IEBAIHVwQ29udmVydFRvMTZCaXQ6CiAgICAgcmV0dXJuIFN0cmluZzo6
YWRvcHQoV1RGTW92ZShidWZmZXIxNikpOwogfQogCi1DU3RyaW5nIFRleHRDb2RlY1VURjg6OmVu
Y29kZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVI
YW5kbGluZykKK1ZlY3Rvcjx1aW50OF90PiBUZXh0Q29kZWNVVEY4OjplbmNvZGUoU3RyaW5nVmll
dyBzdHJpbmcsIFVuZW5jb2RhYmxlSGFuZGxpbmcpCiB7CiAgICAgLy8gVGhlIG1heGltdW0gbnVt
YmVyIG9mIFVURi04IGJ5dGVzIG5lZWRlZCBwZXIgVVRGLTE2IGNvZGUgdW5pdCBpcyAzLgogICAg
IC8vIEJNUCBjaGFyYWN0ZXJzIHRha2Ugb25seSBvbmUgVVRGLTE2IGNvZGUgdW5pdCBhbmQgY2Fu
IHRha2UgdXAgdG8gMyBieXRlcyAoM3gpLgogICAgIC8vIE5vbi1CTVAgY2hhcmFjdGVycyB0YWtl
IHR3byBVVEYtMTYgY29kZSB1bml0cyBhbmQgY2FuIHRha2UgdXAgdG8gNCBieXRlcyAoMngpLgot
ICAgIGlmIChsZW5ndGggPiBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIC8gMykK
LSAgICAgICAgQ1JBU0goKTsKLQotICAgIFZlY3RvcjxjaGFyLCAzMDAwPiBieXRlcyhsZW5ndGgg
KiAzKTsKKyAgICBWZWN0b3I8dWludDhfdD4gYnl0ZXMoV1RGOjpjaGVja2VkUHJvZHVjdDxzaXpl
X3Q+KHN0cmluZy5sZW5ndGgoKSwgMykudW5zYWZlR2V0KCkpOwogICAgIHNpemVfdCBieXRlc1dy
aXR0ZW4gPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyApIHsKLSAgICAg
ICAgVUNoYXIzMiBjaGFyYWN0ZXI7Ci0gICAgICAgIFUxNl9ORVhUKGNoYXJhY3RlcnMsIGksIGxl
bmd0aCwgY2hhcmFjdGVyKTsKKyAgICBmb3IgKGF1dG8gY2hhcmFjdGVyIDogc3RyaW5nLmNvZGVQ
b2ludHMoKSkKICAgICAgICAgVThfQVBQRU5EX1VOU0FGRShieXRlcy5kYXRhKCksIGJ5dGVzV3Jp
dHRlbiwgY2hhcmFjdGVyKTsKLSAgICB9Ci0gICAgcmV0dXJuIENTdHJpbmcgeyBieXRlcy5kYXRh
KCksIGJ5dGVzV3JpdHRlbiB9OworICAgIGJ5dGVzLnNocmluayhieXRlc1dyaXR0ZW4pOworICAg
IHJldHVybiBieXRlczsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEY4LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjguaAppbmRleCAyMDgxM2MyZmVhNTkwMjgx
YWY0MTU5NTQ4MzhiMGM5Y2JkZDU3YjI2Li5mODI4MmI1ZjM0YTg5NDczZGU5YWQ3YTIxNzY1YWY2
YTMyYWNmOTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRD
b2RlY1VURjguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VU
RjguaApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJUZXh0Q29k
ZWMuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9MQ2hhci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTM2LDcgKzM3LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIFN0cmluZyBkZWNv
ZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJy
b3IsIGJvb2wmIHNhd0Vycm9yKSBvdmVycmlkZTsKLSAgICBDU3RyaW5nIGVuY29kZShjb25zdCBV
Q2hhciosIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcpIG92ZXJyaWRlOworICAg
IFZlY3Rvcjx1aW50OF90PiBlbmNvZGUoU3RyaW5nVmlldywgVW5lbmNvZGFibGVIYW5kbGluZykg
ZmluYWw7CiAKICAgICBib29sIGhhbmRsZVBhcnRpYWxTZXF1ZW5jZShMQ2hhciomIGRlc3RpbmF0
aW9uLCBjb25zdCB1aW50OF90KiYgc291cmNlLCBjb25zdCB1aW50OF90KiBlbmQsIGJvb2wgZmx1
c2gpOwogICAgIHZvaWQgaGFuZGxlUGFydGlhbFNlcXVlbmNlKFVDaGFyKiYgZGVzdGluYXRpb24s
IGNvbnN0IHVpbnQ4X3QqJiBzb3VyY2UsIGNvbnN0IHVpbnQ4X3QqIGVuZCwgYm9vbCBmbHVzaCwg
Ym9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VzZXJEZWZpbmVkLmNwcAppbmRleCBlMzE5MjE0
ZTRmNTAyZjJkYWM0Mzg3ZmI5YzQ4N2Y2Y2M1NWUxMGM3Li4yOTZjNDY5ZjE2OWZiOTExZGM4ZGJk
N2E2NDdlYTU2NDFlMmZmZTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRDb2RlY1VzZXJEZWZpbmVkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1RleHRDb2RlY1VzZXJEZWZpbmVkLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDkgKzI2LDggQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXh0Q29kZWNVc2VyRGVmaW5lZC5oIgogCi0j
aW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVmZmVyLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCkBAIC0zOSw3MyArMzgsNjIgQEAgdm9pZCBUZXh0Q29kZWNVc2VyRGVmaW5lZDo6cmVnaXN0
ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIKICAgICByZWdp
c3RyYXIoIngtdXNlci1kZWZpbmVkIiwgIngtdXNlci1kZWZpbmVkIik7CiB9CiAKLXN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8VGV4dENvZGVjPiBuZXdTdHJlYW1pbmdUZXh0RGVjb2RlclVzZXJEZWZp
bmVkKGNvbnN0IFRleHRFbmNvZGluZyYsIGNvbnN0IHZvaWQqKQotewotICAgIHJldHVybiBzdGQ6
Om1ha2VfdW5pcXVlPFRleHRDb2RlY1VzZXJEZWZpbmVkPigpOwotfQotCiB2b2lkIFRleHRDb2Rl
Y1VzZXJEZWZpbmVkOjpyZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFy
KQogewotICAgIHJlZ2lzdHJhcigieC11c2VyLWRlZmluZWQiLCBuZXdTdHJlYW1pbmdUZXh0RGVj
b2RlclVzZXJEZWZpbmVkLCAwKTsKKyAgICByZWdpc3RyYXIoIngtdXNlci1kZWZpbmVkIiwgW10g
eworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxUZXh0Q29kZWNVc2VyRGVmaW5lZD4o
KTsKKyAgICB9KTsKIH0KIAogU3RyaW5nIFRleHRDb2RlY1VzZXJEZWZpbmVkOjpkZWNvZGUoY29u
c3QgY2hhciogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIGJvb2wsIGJvb2wsIGJvb2wmKQogewogICAg
IFN0cmluZ0J1aWxkZXIgcmVzdWx0OwogICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkobGVuZ3Ro
KTsKLQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAg
c2lnbmVkIGNoYXIgYyA9IGJ5dGVzW2ldOwogICAgICAgICByZXN1bHQuYXBwZW5kKHN0YXRpY19j
YXN0PFVDaGFyPihjICYgMHhGN0ZGKSk7CiAgICAgfQotCiAgICAgcmV0dXJuIHJlc3VsdC50b1N0
cmluZygpOwogfQogCi1zdGF0aWMgQ1N0cmluZyBlbmNvZGVDb21wbGV4VXNlckRlZmluZWQoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcg
aGFuZGxpbmcpCitzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZUNvbXBsZXhVc2VyRGVmaW5l
ZChTdHJpbmdWaWV3IHN0cmluZywgVW5lbmNvZGFibGVIYW5kbGluZyBoYW5kbGluZykKIHsKLSAg
ICBWZWN0b3I8Y2hhcj4gcmVzdWx0KGxlbmd0aCk7Ci0gICAgY2hhciogYnl0ZXMgPSByZXN1bHQu
ZGF0YSgpOworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7CiAKLSAgICBzaXplX3QgcmVzdWx0
TGVuZ3RoID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKSB7Ci0gICAg
ICAgIFVDaGFyMzIgYzsKLSAgICAgICAgVTE2X05FWFQoY2hhcmFjdGVycywgaSwgbGVuZ3RoLCBj
KTsKLSAgICAgICAgc2lnbmVkIGNoYXIgc2lnbmVkQnl0ZSA9IGM7Ci0gICAgICAgIGlmICgoc2ln
bmVkQnl0ZSAmIDB4RjdGRikgPT0gYykKLSAgICAgICAgICAgIGJ5dGVzW3Jlc3VsdExlbmd0aCsr
XSA9IHNpZ25lZEJ5dGU7CisgICAgZm9yIChhdXRvIGNoYXJhY3RlciA6IHN0cmluZy5jb2RlUG9p
bnRzKCkpIHsKKyAgICAgICAgaW50OF90IHNpZ25lZEJ5dGUgPSBjaGFyYWN0ZXI7CisgICAgICAg
IGlmICgoc2lnbmVkQnl0ZSAmIDB4RjdGRikgPT0gY2hhcmFjdGVyKQorICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChzaWduZWRCeXRlKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvLyBO
byB3YXkgdG8gZW5jb2RlIHRoaXMgY2hhcmFjdGVyIHdpdGggeC11c2VyLWRlZmluZWQuCiAgICAg
ICAgICAgICBVbmVuY29kYWJsZVJlcGxhY2VtZW50QXJyYXkgcmVwbGFjZW1lbnQ7Ci0gICAgICAg
ICAgICBpbnQgcmVwbGFjZW1lbnRMZW5ndGggPSBUZXh0Q29kZWM6OmdldFVuZW5jb2RhYmxlUmVw
bGFjZW1lbnQoYywgaGFuZGxpbmcsIHJlcGxhY2VtZW50KTsKLSAgICAgICAgICAgIHJlc3VsdC5n
cm93KHJlc3VsdExlbmd0aCArIHJlcGxhY2VtZW50TGVuZ3RoICsgbGVuZ3RoIC0gaSk7Ci0gICAg
ICAgICAgICBieXRlcyA9IHJlc3VsdC5kYXRhKCk7Ci0gICAgICAgICAgICBtZW1jcHkoYnl0ZXMg
KyByZXN1bHRMZW5ndGgsIHJlcGxhY2VtZW50LCByZXBsYWNlbWVudExlbmd0aCk7Ci0gICAgICAg
ICAgICByZXN1bHRMZW5ndGggKz0gcmVwbGFjZW1lbnRMZW5ndGg7CisgICAgICAgICAgICBpbnQg
cmVwbGFjZW1lbnRMZW5ndGggPSBUZXh0Q29kZWM6OmdldFVuZW5jb2RhYmxlUmVwbGFjZW1lbnQo
Y2hhcmFjdGVyLCBoYW5kbGluZywgcmVwbGFjZW1lbnQpOworICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZChyZXBsYWNlbWVudC5kYXRhKCksIHJlcGxhY2VtZW50TGVuZ3RoKTsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIHJldHVybiBDU3RyaW5nKGJ5dGVzLCByZXN1bHRMZW5ndGgpOworICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLUNTdHJpbmcgVGV4dENvZGVjVXNlckRlZmluZWQ6OmVuY29kZShj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5kbGlu
ZyBoYW5kbGluZykKK1ZlY3Rvcjx1aW50OF90PiBUZXh0Q29kZWNVc2VyRGVmaW5lZDo6ZW5jb2Rl
KFN0cmluZ1ZpZXcgc3RyaW5nLCBVbmVuY29kYWJsZUhhbmRsaW5nIGhhbmRsaW5nKQogewotICAg
IGNoYXIqIGJ5dGVzOwotICAgIENTdHJpbmcgc3RyaW5nID0gQ1N0cmluZzo6bmV3VW5pbml0aWFs
aXplZChsZW5ndGgsIGJ5dGVzKTsKKyAgICB7CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiByZXN1
bHQoc3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAgYXV0byogYnl0ZXMgPSByZXN1bHQuZGF0YSgp
OworCisgICAgICAgIC8vIENvbnZlcnQgYW5kIHNpbXVsdGFuZW91c2x5IGRvIGEgY2hlY2sgdG8g
c2VlIGlmIGl0J3MgYWxsIEFTQ0lJLgorICAgICAgICBVQ2hhciBvcmVkID0gMDsKKyAgICAgICAg
Zm9yIChhdXRvIGNoYXJhY3RlciA6IHN0cmluZy5jb2RlVW5pdHMoKSkgeworICAgICAgICAgICAg
KmJ5dGVzKysgPSBjaGFyYWN0ZXI7CisgICAgICAgICAgICBvcmVkIHw9IGNoYXJhY3RlcjsKKyAg
ICAgICAgfQogCi0gICAgLy8gQ29udmVydCB0aGUgc3RyaW5nIGEgZmFzdCB3YXkgYW5kIHNpbXVs
dGFuZW91c2x5IGRvIGFuIGVmZmljaWVudCBjaGVjayB0byBzZWUgaWYgaXQncyBhbGwgQVNDSUku
Ci0gICAgVUNoYXIgb3JlZCA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkgewotICAgICAgICBVQ2hhciBjID0gY2hhcmFjdGVyc1tpXTsKLSAgICAgICAgYnl0ZXNb
aV0gPSBjOwotICAgICAgICBvcmVkIHw9IGM7CisgICAgICAgIGlmICghKG9yZWQgJiAweEZGODAp
KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBpZiAoIShvcmVkICYg
MHhGRjgwKSkKLSAgICAgICAgcmV0dXJuIHN0cmluZzsKLQogICAgIC8vIElmIGl0IHdhc24ndCBh
bGwgQVNDSUksIGNhbGwgdGhlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBtb3JlLWNvbXBsZXggY2Fz
ZXMuCi0gICAgcmV0dXJuIGVuY29kZUNvbXBsZXhVc2VyRGVmaW5lZChjaGFyYWN0ZXJzLCBsZW5n
dGgsIGhhbmRsaW5nKTsKKyAgICByZXR1cm4gZW5jb2RlQ29tcGxleFVzZXJEZWZpbmVkKHN0cmlu
ZywgaGFuZGxpbmcpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VzZXJEZWZpbmVkLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VzZXJEZWZpbmVkLmgKaW5kZXggNTgy
MWNhMzc4MTUxOTFlY2IyYTBjNTc4ZmUzMjNmZDg1NGFkNWUwYi4uNzQ0ZmQzMDEzYWUxYjE2ZjM2
YmE3MmM4NDRmYzhkNTMwZTIxNWI0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDctMjAxNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMywyMiArMjMsMjAgQEAKICAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgVGV4dENvZGVjVXNlckRlZmluZWRfaAotI2RlZmlu
ZSBUZXh0Q29kZWNVc2VyRGVmaW5lZF9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIlRleHRD
b2RlYy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBUZXh0Q29kZWNVc2Vy
RGVmaW5lZCA6IHB1YmxpYyBUZXh0Q29kZWMgewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGlj
IHZvaWQgcmVnaXN0ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhcik7Ci0gICAg
ICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7CitjbGFz
cyBUZXh0Q29kZWNVc2VyRGVmaW5lZCA6IHB1YmxpYyBUZXh0Q29kZWMgeworcHVibGljOgorICAg
IHN0YXRpYyB2b2lkIHJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIp
OworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7CiAK
LSAgICAgICAgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBm
bHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpIG92ZXJyaWRlOwotICAgICAg
ICBDU3RyaW5nIGVuY29kZShjb25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxl
SGFuZGxpbmcpIG92ZXJyaWRlOwotICAgIH07Citwcml2YXRlOgorICAgIFN0cmluZyBkZWNvZGUo
Y29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3Is
IGJvb2wmIHNhd0Vycm9yKSBmaW5hbDsKKyAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlKFN0cmlu
Z1ZpZXcsIFVuZW5jb2RhYmxlSGFuZGxpbmcpIGZpbmFsOworfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gVGV4dENvZGVjVXNlckRlZmluZWRfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwCmluZGV4IDdkYWJhNjdlMjI0OGJm
ZDI2Mzg5MWUzN2FmZjk5Y2Q4Y2U0OTEzYmIuLjAzMjdhNWMwYjQ1MjAyMzBmNDdiMmExYmZiYjAy
MzU0MzZkOWY5MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dEVuY29kaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNv
ZGluZy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2
LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+CiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KICAqCkBAIC00OCw3
ICs0OCw3IEBAIFRleHRFbmNvZGluZzo6VGV4dEVuY29kaW5nKGNvbnN0IGNoYXIqIG5hbWUpCiAg
ICAgLCBtX2JhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJv
bCgpKQogewogICAgIC8vIEFsaWFzZXMgYXJlIHZhbGlkLCBidXQgbm90ICJyZXBsYWNlbWVudCIg
aXRzZWxmLgotICAgIGlmIChtX25hbWUgJiYgaXNSZXBsYWNlbWVudEVuY29kaW5nKG5hbWUpKQor
ICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCAicmVwbGFjZW1lbnQi
KSkKICAgICAgICAgbV9uYW1lID0gbnVsbHB0cjsKIH0KIApAQCAtNTcsNyArNTcsNyBAQCBUZXh0
RW5jb2Rpbmc6OlRleHRFbmNvZGluZyhjb25zdCBTdHJpbmcmIG5hbWUpCiAgICAgLCBtX2JhY2tz
bGFzaEFzQ3VycmVuY3lTeW1ib2woYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKQogewogICAg
IC8vIEFsaWFzZXMgYXJlIHZhbGlkLCBidXQgbm90ICJyZXBsYWNlbWVudCIgaXRzZWxmLgotICAg
IGlmIChtX25hbWUgJiYgaXNSZXBsYWNlbWVudEVuY29kaW5nKG5hbWUpKQorICAgIGlmIChlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCAicmVwbGFjZW1lbnQiKSkKICAgICAgICAg
bV9uYW1lID0gbnVsbHB0cjsKIH0KIApAQCAtNjksMTMgKzY5LDEyIEBAIFN0cmluZyBUZXh0RW5j
b2Rpbmc6OmRlY29kZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBib29sIHN0b3BP
bkVycm9yLCBiCiAgICAgcmV0dXJuIG5ld1RleHRDb2RlYygqdGhpcyktPmRlY29kZShkYXRhLCBs
ZW5ndGgsIHRydWUsIHN0b3BPbkVycm9yLCBzYXdFcnJvcik7CiB9CiAKLUNTdHJpbmcgVGV4dEVu
Y29kaW5nOjplbmNvZGUoU3RyaW5nVmlldyB0ZXh0LCBVbmVuY29kYWJsZUhhbmRsaW5nIGhhbmRs
aW5nKSBjb25zdAorVmVjdG9yPHVpbnQ4X3Q+IFRleHRFbmNvZGluZzo6ZW5jb2RlKFN0cmluZ1Zp
ZXcgdGV4dCwgVW5lbmNvZGFibGVIYW5kbGluZyBoYW5kbGluZykgY29uc3QKIHsKLSAgICBpZiAo
IW1fbmFtZSkKLSAgICAgICAgcmV0dXJuIENTdHJpbmcoKTsKKyAgICBpZiAoIW1fbmFtZSB8fCB0
ZXh0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGlmICh0ZXh0LmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuICIiOworICAgIC8vIEZJWE1FOiBDb25zaWRlciBhZGRpbmcg
YSBmYXN0IGNhc2UgZm9yIEFTQ0lJLgogCiAgICAgLy8gRklYTUU6IFdoYXQncyB0aGUgcmlnaHQg
cGxhY2UgdG8gZG8gbm9ybWFsaXphdGlvbj8KICAgICAvLyBJdCdzIGEgbGl0dGxlIHN0cmFuZ2Ug
dG8gZG8gaXQgaW5zaWRlIHRoZSBlbmNvZGUgZnVuY3Rpb24uCkBAIC04NCw3ICs4Myw3IEBAIENT
dHJpbmcgVGV4dEVuY29kaW5nOjplbmNvZGUoU3RyaW5nVmlldyB0ZXh0LCBVbmVuY29kYWJsZUhh
bmRsaW5nIGhhbmRsaW5nKSBjb25zCiAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSB0
ZXh0LnVwY29udmVydGVkQ2hhcmFjdGVycygpOwogCiAgICAgY29uc3QgVUNoYXIqIHNvdXJjZSA9
IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBzaXplX3Qgc291cmNlTGVuZ3RoID0gdGV4dC5s
ZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBzb3VyY2VMZW5ndGggPSB0ZXh0Lmxlbmd0aCgpOwogCiAg
ICAgVmVjdG9yPFVDaGFyPiBub3JtYWxpemVkQ2hhcmFjdGVyczsKIApAQCAtMTA0LDcgKzEwMyw3
IEBAIENTdHJpbmcgVGV4dEVuY29kaW5nOjplbmNvZGUoU3RyaW5nVmlldyB0ZXh0LCBVbmVuY29k
YWJsZUhhbmRsaW5nIGhhbmRsaW5nKSBjb25zCiAgICAgICAgIHNvdXJjZUxlbmd0aCA9IG5vcm1h
bGl6ZWRMZW5ndGg7CiAgICAgfQogCi0gICAgcmV0dXJuIG5ld1RleHRDb2RlYygqdGhpcyktPmVu
Y29kZShzb3VyY2UsIHNvdXJjZUxlbmd0aCwgaGFuZGxpbmcpOworICAgIHJldHVybiBuZXdUZXh0
Q29kZWMoKnRoaXMpLT5lbmNvZGUoU3RyaW5nVmlldyB7IHNvdXJjZSwgc291cmNlTGVuZ3RoIH0s
IGhhbmRsaW5nKTsKIH0KIAogY29uc3QgY2hhciogVGV4dEVuY29kaW5nOjpkb21OYW1lKCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5n
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5oCmluZGV4IDIw
NGQ0Nzg1YzVjODJlMzQ2ODk2OTk0YjEyZDExZGQ1ODE4MTdjM2YuLmFjMTA5YWE4YWFhNDQwODQz
NmFiNTU3ZjhjMWYzOGM5M2I1YzRjZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dEVuY29kaW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0RW5jb2RpbmcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw4ICsyNSw4IEBACiAK
ICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiVGV4dENvZGVjLmgiCi0jaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KKyNpbmNsdWRlIDxwYWwvdGV4dC9VbmVuY29kYWJsZUhhbmRsaW5nLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NDcsNyArNDcsNyBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgZGVjb2Rl
KGNvbnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdF
cnJvcikgY29uc3Q7CiAgICAgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0
aCkgY29uc3Q7Ci0gICAgQ1N0cmluZyBlbmNvZGUoU3RyaW5nVmlldywgVW5lbmNvZGFibGVIYW5k
bGluZykgY29uc3Q7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZShTdHJpbmdWaWV3LCBVbmVu
Y29kYWJsZUhhbmRsaW5nKSBjb25zdDsKIAogICAgIFVDaGFyIGJhY2tzbGFzaEFzQ3VycmVuY3lT
eW1ib2woKSBjb25zdDsKICAgICBib29sIGlzQnl0ZUJhc2VkRW5jb2RpbmcoKSBjb25zdCB7IHJl
dHVybiAhaXNOb25CeXRlQmFzZWRFbmNvZGluZygpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCmluZGV4IDZlNTQyMzMz
YWIwMTAwYjBjNzM3OGRkZTYxMjgyMGEyMzJjOGI3NWEuLjU1NmRmZjNlYzU0YzQ3NGIwNGYzMDFk
ZmY5NmFiZGNlMzM4ODlhZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKQEAgLTMwLDIzICszMCwyMSBAQAogI2luY2x1ZGUgIlRleHRDb2RlY0lD
VS5oIgogI2luY2x1ZGUgIlRleHRDb2RlY0xhdGluMS5oIgogI2luY2x1ZGUgIlRleHRDb2RlY1Jl
cGxhY2VtZW50LmgiCi0jaW5jbHVkZSAiVGV4dENvZGVjVXNlckRlZmluZWQuaCIKICNpbmNsdWRl
ICJUZXh0Q29kZWNVVEYxNi5oIgogI2luY2x1ZGUgIlRleHRDb2RlY1VURjguaCIKKyNpbmNsdWRl
ICJUZXh0Q29kZWNVc2VyRGVmaW5lZC5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2lu
Y2x1ZGUgPG11dGV4PgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CisjaW5jbHVkZSA8d3Rm
L0NoZWNrZWRBcml0aG1ldGljLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUg
PHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgotCi0jaW5jbHVk
ZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCi0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKQEAgLTkwLDE0ICs4
OCw4IEBAIHN0cnVjdCBUZXh0RW5jb2RpbmdOYW1lSGFzaCB7CiAgICAgc3RhdGljIGNvbnN0IGJv
b2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKIH07CiAKLXN0cnVjdCBU
ZXh0Q29kZWNGYWN0b3J5IHsKLSAgICBOZXdUZXh0Q29kZWNGdW5jdGlvbiBmdW5jdGlvbjsKLSAg
ICBjb25zdCB2b2lkKiBhZGRpdGlvbmFsRGF0YTsKLSAgICBUZXh0Q29kZWNGYWN0b3J5KE5ld1Rl
eHRDb2RlY0Z1bmN0aW9uIGYgPSAwLCBjb25zdCB2b2lkKiBkID0gMCkgOiBmdW5jdGlvbihmKSwg
YWRkaXRpb25hbERhdGEoZCkgeyB9Ci19OwotCi10eXBlZGVmIEhhc2hNYXA8Y29uc3QgY2hhcios
IGNvbnN0IGNoYXIqLCBUZXh0RW5jb2RpbmdOYW1lSGFzaD4gVGV4dEVuY29kaW5nTmFtZU1hcDsK
LXR5cGVkZWYgSGFzaE1hcDxjb25zdCBjaGFyKiwgVGV4dENvZGVjRmFjdG9yeT4gVGV4dENvZGVj
TWFwOwordXNpbmcgVGV4dEVuY29kaW5nTmFtZU1hcCA9IEhhc2hNYXA8Y29uc3QgY2hhciosIGNv
bnN0IGNoYXIqLCBUZXh0RW5jb2RpbmdOYW1lSGFzaD47Cit1c2luZyBUZXh0Q29kZWNNYXAgPSBI
YXNoTWFwPGNvbnN0IGNoYXIqLCBOZXdUZXh0Q29kZWNGdW5jdGlvbj47CiAKIHN0YXRpYyBTdGF0
aWNMb2NrIGVuY29kaW5nUmVnaXN0cnlNdXRleDsKIApAQCAtMTM4LDExICsxMzAsMTEgQEAgc3Rh
dGljIHZvaWQgYWRkVG9UZXh0RW5jb2RpbmdOYW1lTWFwKGNvbnN0IGNoYXIqIGFsaWFzLCBjb25z
dCBjaGFyKiBuYW1lKQogICAgIHRleHRFbmNvZGluZ05hbWVNYXAtPmFkZChhbGlhcywgYXRvbWlj
TmFtZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZFRvVGV4dENvZGVjTWFwKGNvbnN0IGNoYXIqIG5h
bWUsIE5ld1RleHRDb2RlY0Z1bmN0aW9uIGZ1bmN0aW9uLCBjb25zdCB2b2lkKiBhZGRpdGlvbmFs
RGF0YSkKK3N0YXRpYyB2b2lkIGFkZFRvVGV4dENvZGVjTWFwKGNvbnN0IGNoYXIqIG5hbWUsIE5l
d1RleHRDb2RlY0Z1bmN0aW9uJiYgZnVuY3Rpb24pCiB7CiAgICAgY29uc3QgY2hhciogYXRvbWlj
TmFtZSA9IHRleHRFbmNvZGluZ05hbWVNYXAtPmdldChuYW1lKTsKICAgICBBU1NFUlQoYXRvbWlj
TmFtZSk7Ci0gICAgdGV4dENvZGVjTWFwLT5hZGQoYXRvbWljTmFtZSwgVGV4dENvZGVjRmFjdG9y
eShmdW5jdGlvbiwgYWRkaXRpb25hbERhdGEpKTsKKyAgICB0ZXh0Q29kZWNNYXAtPmFkZChhdG9t
aWNOYW1lLCBXVEZNb3ZlKGZ1bmN0aW9uKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBydW5lQmxhY2ts
aXN0ZWRDb2RlY3MoKQpAQCAtMjM0LDIyICsyMjYsNiBAQCBib29sIGlzSmFwYW5lc2VFbmNvZGlu
Zyhjb25zdCBjaGFyKiBjYW5vbmljYWxFbmNvZGluZ05hbWUpCiAgICAgcmV0dXJuIGNhbm9uaWNh
bEVuY29kaW5nTmFtZSAmJiBqYXBhbmVzZUVuY29kaW5ncyAmJiBqYXBhbmVzZUVuY29kaW5ncy0+
Y29udGFpbnMoY2Fub25pY2FsRW5jb2RpbmdOYW1lKTsKIH0KIAotYm9vbCBpc1JlcGxhY2VtZW50
RW5jb2RpbmcoY29uc3QgY2hhciogYWxpYXMpCi17Ci0gICAgaWYgKCFhbGlhcykKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHN0cmxlbihhbGlhcykgIT0gMTEpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJldHVybiAhc3RyY2FzZWNtcChhbGlhcywgInJlcGxhY2VtZW50
Iik7Ci19Ci0KLWJvb2wgaXNSZXBsYWNlbWVudEVuY29kaW5nKGNvbnN0IFN0cmluZyYgYWxpYXMp
Ci17Ci0gICAgcmV0dXJuIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGFsaWFzLCAicmVw
bGFjZW1lbnQiKTsKLX0KLQogYm9vbCBzaG91bGRTaG93QmFja3NsYXNoQXNDdXJyZW5jeVN5bWJv
bEluKGNvbnN0IGNoYXIqIGNhbm9uaWNhbEVuY29kaW5nTmFtZSkKIHsKICAgICByZXR1cm4gY2Fu
b25pY2FsRW5jb2RpbmdOYW1lICYmIG5vbkJhY2tzbGFzaEVuY29kaW5ncyAmJiBub25CYWNrc2xh
c2hFbmNvZGluZ3MtPmNvbnRhaW5zKGNhbm9uaWNhbEVuY29kaW5nTmFtZSk7CkBAIC0yNzIsOSAr
MjQ4LDkgQEAgc3RkOjp1bmlxdWVfcHRyPFRleHRDb2RlYz4gbmV3VGV4dENvZGVjKGNvbnN0IFRl
eHRFbmNvZGluZyYgZW5jb2RpbmcpCiAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxv
Y2soZW5jb2RpbmdSZWdpc3RyeU11dGV4KTsKIAogICAgIEFTU0VSVCh0ZXh0Q29kZWNNYXApOwot
ICAgIFRleHRDb2RlY0ZhY3RvcnkgZmFjdG9yeSA9IHRleHRDb2RlY01hcC0+Z2V0KGVuY29kaW5n
Lm5hbWUoKSk7Ci0gICAgQVNTRVJUKGZhY3RvcnkuZnVuY3Rpb24pOwotICAgIHJldHVybiBmYWN0
b3J5LmZ1bmN0aW9uKGVuY29kaW5nLCBmYWN0b3J5LmFkZGl0aW9uYWxEYXRhKTsKKyAgICBhdXRv
IHJlc3VsdCA9IHRleHRDb2RlY01hcC0+ZmluZChlbmNvZGluZy5uYW1lKCkpOworICAgIEFTU0VS
VChyZXN1bHQgIT0gdGV4dENvZGVjTWFwLT5lbmQoKSk7CisgICAgcmV0dXJuIHJlc3VsdC0+dmFs
dWUoKTsKIH0KIAogY29uc3QgY2hhciogYXRvbWljQ2Fub25pY2FsVGV4dEVuY29kaW5nTmFtZShj
b25zdCBjaGFyKiBuYW1lKQpAQCAtMjk3LDE2ICsyNzMsMTQgQEAgY29uc3QgY2hhciogYXRvbWlj
Q2Fub25pY2FsVGV4dEVuY29kaW5nTmFtZShjb25zdCBjaGFyKiBuYW1lKQogICAgIHJldHVybiB0
ZXh0RW5jb2RpbmdOYW1lTWFwLT5nZXQobmFtZSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPgotY29uc3QgY2hhciogYXRvbWljQ2Fub25pY2FsVGV4dEVuY29kaW5nTmFt
ZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQordGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGNvbnN0IGNoYXIqIGF0b21pY0Nhbm9u
aWNhbFRleHRFbmNvZGluZ05hbWUoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgc2l6
ZV90IGxlbmd0aCkKIHsKICAgICBjaGFyIGJ1ZmZlclttYXhFbmNvZGluZ05hbWVMZW5ndGggKyAx
XTsKICAgICBzaXplX3QgaiA9IDA7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkgewotICAgICAgICBDaGFyYWN0ZXJUeXBlIGMgPSBjaGFyYWN0ZXJzW2ldOwogICAgICAg
ICBpZiAoaiA9PSBtYXhFbmNvZGluZ05hbWVMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gMDsK
LSAgICAgICAgYnVmZmVyW2orK10gPSBjOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIGJ1ZmZlcltqKytdID0gY2hhcmFjdGVyc1tpXTsKICAgICB9CiAgICAgYnVmZmVyW2pd
ID0gMDsKICAgICByZXR1cm4gYXRvbWljQ2Fub25pY2FsVGV4dEVuY29kaW5nTmFtZShidWZmZXIp
OwpAQCAtMzE0LDcgKzI4OCw3IEBAIGNvbnN0IGNoYXIqIGF0b21pY0Nhbm9uaWNhbFRleHRFbmNv
ZGluZ05hbWUoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgc2l6CiAKIGNvbnN0IGNo
YXIqIGF0b21pY0Nhbm9uaWNhbFRleHRFbmNvZGluZ05hbWUoY29uc3QgU3RyaW5nJiBhbGlhcykK
IHsKLSAgICBpZiAoIWFsaWFzLmxlbmd0aCgpKQorICAgIGlmIChhbGlhcy5pc0VtcHR5KCkgfHwg
IWFsaWFzLmlzQWxsQVNDSUkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAo
YWxpYXMuaXM4Qml0KCkpCkBAIC0zNTMsMTkgKzMyNyw0IEBAIFN0cmluZyBkZWZhdWx0VGV4dEVu
Y29kaW5nTmFtZUZvclN5c3RlbUxhbmd1YWdlKCkKICNlbmRpZgogfQogCi0jaWZuZGVmIE5ERUJV
Rwotdm9pZCBkdW1wVGV4dEVuY29kaW5nTmFtZU1hcCgpCi17Ci0gICAgdW5zaWduZWQgc2l6ZSA9
IHRleHRFbmNvZGluZ05hbWVNYXAtPnNpemUoKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIkR1bXBp
bmcgJXUgZW50cmllcyBpbiBXZWJDb3JlOjp0ZXh0RW5jb2RpbmdOYW1lTWFwLi4uXG4iLCBzaXpl
KTsKLQotICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKGVuY29kaW5nUmVnaXN0
cnlNdXRleCk7Ci0KLSAgICBUZXh0RW5jb2RpbmdOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IHRleHRFbmNvZGluZ05hbWVNYXAtPmJlZ2luKCk7Ci0gICAgVGV4dEVuY29kaW5nTmFtZU1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gdGV4dEVuY29kaW5nTmFtZU1hcC0+ZW5kKCk7Ci0gICAgZm9y
ICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICInJXMnID0+ICcl
cydcbiIsIGl0LT5rZXksIGl0LT52YWx1ZSk7Ci19Ci0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5j
b2RpbmdSZWdpc3RyeS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rp
bmdSZWdpc3RyeS5oCmluZGV4IGJjYzRiODc1NjdhY2UzM2EwMjM1MDQxMjc1ZjhlOWI4NjdlNWY2
ZWIuLjlmYzM5Njk5YTdiOWU5ZmQwNGVjZjNkYjc2MWI3NGI3ZWMxOGU1YjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmgKQEAg
LTI2LDcgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzksMjIgKzM5LDE1IEBAIFdFQkNPUkVfRVhQT1JUIHN0
ZDo6dW5pcXVlX3B0cjxUZXh0Q29kZWM+IG5ld1RleHRDb2RlYyhjb25zdCBUZXh0RW5jb2Rpbmcm
KTsKIAogLy8gT25seSBUZXh0RW5jb2Rpbmcgc2hvdWxkIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0
aW9ucyBkaXJlY3RseS4KIGNvbnN0IGNoYXIqIGF0b21pY0Nhbm9uaWNhbFRleHRFbmNvZGluZ05h
bWUoY29uc3QgY2hhciogYWxpYXMpOwotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
Ci1jb25zdCBjaGFyKiBhdG9taWNDYW5vbmljYWxUZXh0RW5jb2RpbmdOYW1lKGNvbnN0IENoYXJh
Y3RlclR5cGUqLCBzaXplX3QpOwogY29uc3QgY2hhciogYXRvbWljQ2Fub25pY2FsVGV4dEVuY29k
aW5nTmFtZShjb25zdCBTdHJpbmcmKTsKIGJvb2wgbm9FeHRlbmRlZFRleHRFbmNvZGluZ05hbWVV
c2VkKCk7CiBib29sIGlzSmFwYW5lc2VFbmNvZGluZyhjb25zdCBjaGFyKiBjYW5vbmljYWxFbmNv
ZGluZ05hbWUpOwogYm9vbCBzaG91bGRTaG93QmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbEluKGNv
bnN0IGNoYXIqIGNhbm9uaWNhbEVuY29kaW5nTmFtZSk7Ci1ib29sIGlzUmVwbGFjZW1lbnRFbmNv
ZGluZyhjb25zdCBjaGFyKiBhbGlhcyk7Ci1ib29sIGlzUmVwbGFjZW1lbnRFbmNvZGluZyhjb25z
dCBTdHJpbmcmIGFsaWFzKTsKIAogV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGRlZmF1bHRUZXh0RW5j
b2RpbmdOYW1lRm9yU3lzdGVtTGFuZ3VhZ2UoKTsKKwogI2lmIFBMQVRGT1JNKENPQ09BKQogV0VC
Q09SRV9FWFBPUlQgQ0ZTdHJpbmdFbmNvZGluZyB3ZWJEZWZhdWx0Q0ZTdHJpbmdFbmNvZGluZygp
OwogI2VuZGlmCiAKLSNpZm5kZWYgTkRFQlVHCi12b2lkIGR1bXBUZXh0RW5jb2RpbmdOYW1lTWFw
KCk7Ci0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93aW4vVGV4dENvZGVjV2luLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvd2luL1RleHRDb2RlY1dpbi5jcHAKaW5kZXggNGYxNzhlODAxMjg2
MGI1YWMyOTlkZjBkYzAzYTgxNDIxODQyNmViYi4uYWY0NjkxMzkwODFlODBjMTIwN2I4MmM5N2Zk
ZmEzYzc3MjFhNjUxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93
aW4vVGV4dENvZGVjV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dp
bi9UZXh0Q29kZWNXaW4uY3BwCkBAIC0yODEsNyArMjgxLDcgQEAgQ1N0cmluZyBUZXh0Q29kZWNX
aW46OmVuY29kZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVW5lbmNv
ZGFibGUKIAogICAgIGludCByZXN1bHRMZW5ndGggPSBXaWRlQ2hhclRvTXVsdGlCeXRlKG1fY29k
ZVBhZ2UsIFdDX0NPTVBPU0lURUNIRUNLLCBjaGFyYWN0ZXJzLCBsZW5ndGgsIDAsIDAsIDAsIDAp
OwogCi0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gaW1wbGVtZW50IFVuZW5jb2RhYmxlSGFuZGxp
bmc6IFF1ZXN0aW9uTWFya3NGb3JVbmVuY29kYWJsZXMsIEVudGl0aWVzRm9yVW5lbmNvZGFibGVz
LCBhbmQgVVJMRW5jb2RlZEVudGl0aWVzRm9yVW5lbmNvZGFibGVzLgorICAgIC8vIEZJWE1FOiBX
ZSBuZWVkIHRvIGltcGxlbWVudCBVbmVuY29kYWJsZUhhbmRsaW5nLgogCiAgICAgaWYgKHJlc3Vs
dExlbmd0aCA8PSAwKQogICAgICAgICByZXR1cm4gIj8iOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRw
UmVxdWVzdC5jcHAKaW5kZXggMDk2ZjA1NTVhYzFlZTQ1MmI2NDVhMmJiOWNlZDUyZTE2NTE1NGJh
MS4uMzMzMWY5MzlkOTEwYWEwOGU5Y2UwZmJjNjdmNDJjNzA1YWUxMGU2OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCkBAIC00NjUsNyArNDY1LDcgQEAgRXhjZXB0aW9uT3I8
dm9pZD4gWE1MSHR0cFJlcXVlc3Q6OnNlbmQoRG9jdW1lbnQmIGRvY3VtZW50KQogCiAgICAgICAg
IC8vIEZJWE1FOiBBY2NvcmRpbmcgdG8gWE1MSHR0cFJlcXVlc3QgTGV2ZWwgMiwgdGhpcyBzaG91
bGQgdXNlIHRoZSBEb2N1bWVudC5pbm5lckhUTUwgYWxnb3JpdGhtCiAgICAgICAgIC8vIGZyb20g
dGhlIEhUTUw1IHNwZWNpZmljYXRpb24gdG8gc2VyaWFsaXplIHRoZSBkb2N1bWVudC4KLSAgICAg
ICAgbV9yZXF1ZXN0RW50aXR5Qm9keSA9IEZvcm1EYXRhOjpjcmVhdGUoVVRGOEVuY29kaW5nKCku
ZW5jb2RlKGNyZWF0ZU1hcmt1cChkb2N1bWVudCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKSk7
CisgICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHkgPSBGb3JtRGF0YTo6Y3JlYXRlKFVURjhFbmNv
ZGluZygpLmVuY29kZShjcmVhdGVNYXJrdXAoZG9jdW1lbnQpLCBVbmVuY29kYWJsZUhhbmRsaW5n
OjpFbnRpdGllcykpOwogICAgICAgICBpZiAobV91cGxvYWQpCiAgICAgICAgICAgICBtX3JlcXVl
c3RFbnRpdHlCb2R5LT5zZXRBbHdheXNTdHJlYW0odHJ1ZSk7CiAgICAgfQpAQCAtNDkyLDcgKzQ5
Miw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFhNTEh0dHBSZXF1ZXN0OjpzZW5kKGNvbnN0IFN0cmlu
ZyYgYm9keSkKICAgICAgICAgICAgIG1fcmVxdWVzdEhlYWRlcnMuc2V0KEhUVFBIZWFkZXJOYW1l
OjpDb250ZW50VHlwZSwgY29udGVudFR5cGUpOwogICAgICAgICB9CiAKLSAgICAgICAgbV9yZXF1
ZXN0RW50aXR5Qm9keSA9IEZvcm1EYXRhOjpjcmVhdGUoVVRGOEVuY29kaW5nKCkuZW5jb2RlKGJv
ZHksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKSk7CisgICAgICAgIG1fcmVxdWVzdEVudGl0eUJv
ZHkgPSBGb3JtRGF0YTo6Y3JlYXRlKFVURjhFbmNvZGluZygpLmVuY29kZShib2R5LCBVbmVuY29k
YWJsZUhhbmRsaW5nOjpFbnRpdGllcykpOwogICAgICAgICBpZiAobV91cGxvYWQpCiAgICAgICAg
ICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5LT5zZXRBbHdheXNTdHJlYW0odHJ1ZSk7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hTTFRVbmljb2RlU29ydC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS94bWwvWFNMVFVuaWNvZGVTb3J0LmNwcAppbmRleCBjMmQ4NTZlZjZiMTU1NDUw
Y2MyY2M4MWEyYTFiMDRmZjNlYTRhOTZiLi5mOWU1NmI5YjJhZmNhNWE3MDc3N2IzMDA2MWQ4MjNk
ZDYzYjgzODQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFVuaWNvZGVTb3J0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFVuaWNvZGVTb3J0LmNwcApAQCAtMzMs
NyArMzMsNiBAQAogCiAjaW5jbHVkZSA8bGlieHNsdC90ZW1wbGF0ZXMuaD4KICNpbmNsdWRlIDxs
aWJ4c2x0L3hzbHR1dGlscy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ29sbGF0b3IuaD4KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNwcAppbmRl
eCA4ZTZiODM1NGNmOGNlMjExZTA3NjI3NTE3NjJlYTA0YTVkNzI4OGY3Li4xZjI4YThlYmE1OWRm
MWU2ZTIxZmNjODc1ZTBmNDkwYmFhNjA4ODVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94
bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwv
cGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNwcApAQCAtNTEsNyArNTEsNiBAQAogI2luY2x1ZGUg
IlRleHRSZXNvdXJjZURlY29kZXIuaCIKICNpbmNsdWRlICJUcmVlRGVwdGhMaW1pdC5oIgogI2lu
Y2x1ZGUgPHd0Zi9SZWYuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3Bw
IGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3Bw
CmluZGV4IGEzN2Q2MTUxNmE2MjgwMGY1YTQzMWI4OTFjNzI3MzRmMDkwMzViY2MuLjBhOTIyZTdm
MTFkYjllMjk3MWVjMTc3ZmJhYjdmZjU4NTE5Njc1OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKQEAgLTUzLDcg
KzUzLDYgQEAKICNpbmNsdWRlICJYTUxOU05hbWVzLmgiCiAjaW5jbHVkZSAiWE1MRG9jdW1lbnRQ
YXJzZXJTY29wZS5oIgogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaD4KLSNpbmNs
dWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVVRGOC5oPgog
CiAjaWYgRU5BQkxFKFhTTFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
UGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZUJyb3dzZXJGdW5jcy5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZUJyb3dzZXJGdW5jcy5jcHAKaW5k
ZXggNmE0ZGFiMDE2NDg4Mjg5YzlhYTc2ZThlM2E1ZWFjZjE4NDM5YTQ5YS4uM2JlNGY0OGFkMjk5
MWJlODI4Njg1YTY1M2U2NDFmZjEyOGEyMmJmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVCcm93c2VyRnVuY3MuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlQnJvd3Nl
ckZ1bmNzLmNwcApAQCAtODgwLDkgKzg4MCw5IEBAIHN0YXRpYyBOUEVycm9yIE5QTl9TZXRWYWx1
ZUZvclVSTChOUFAgbnBwLCBOUE5VUkxWYXJpYWJsZSB2YXJpYWJsZSwgY29uc3QgY2hhcioKIHN0
YXRpYyBib29sIGluaXRpYWxpemVQcm90ZWN0aW9uU3BhY2UoY29uc3QgY2hhciogcHJvdG9jb2ws
IGNvbnN0IGNoYXIqIGhvc3QsIGludCBwb3J0LCBjb25zdCBjaGFyKiBzY2hlbWUsIGNvbnN0IGNo
YXIqIHJlYWxtLCBQcm90ZWN0aW9uU3BhY2UmIHByb3RlY3Rpb25TcGFjZSkKIHsKICAgICBQcm90
ZWN0aW9uU3BhY2VTZXJ2ZXJUeXBlIHNlcnZlclR5cGU7Ci0gICAgaWYgKCFzdHJjYXNlY21wKHBy
b3RvY29sLCAiaHR0cCIpKQorICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShw
cm90b2NvbCwgImh0dHAiKSkKICAgICAgICAgc2VydmVyVHlwZSA9IFByb3RlY3Rpb25TcGFjZVNl
cnZlckhUVFA7Ci0gICAgZWxzZSBpZiAoIXN0cmNhc2VjbXAocHJvdG9jb2wsICJodHRwcyIpKQor
ICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHByb3RvY29sLCAiaHR0
cHMiKSkKICAgICAgICAgc2VydmVyVHlwZSA9IFByb3RlY3Rpb25TcGFjZVNlcnZlckhUVFBTOwog
ICAgIGVsc2UgewogICAgICAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgaHR0cCBhbmQgaHR0cHMu
CkBAIC04OTEsOSArODkxLDkgQEAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZVByb3RlY3Rpb25TcGFj
ZShjb25zdCBjaGFyKiBwcm90b2NvbCwgY29uc3QgY2hhciogaG9zdCwgaW4KIAogICAgIFByb3Rl
Y3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lIGF1dGhlbnRpY2F0aW9uU2NoZW1lID0gUHJv
dGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVEZWZhdWx0OwogICAgIGlmIChzZXJ2ZXJU
eXBlID09IFByb3RlY3Rpb25TcGFjZVNlcnZlckhUVFApIHsKLSAgICAgICAgaWYgKCFzdHJjYXNl
Y21wKHNjaGVtZSwgImJhc2ljIikpCisgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShzY2hlbWUsICJiYXNpYyIpKQogICAgICAgICAgICAgYXV0aGVudGljYXRpb25TY2hl
bWUgPSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUhUVFBCYXNpYzsKLSAgICAg
ICAgZWxzZSBpZiAoIXN0cmNtcChzY2hlbWUsICJkaWdlc3QiKSkKKyAgICAgICAgZWxzZSBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc2NoZW1lLCAiZGlnZXN0IikpCiAgICAgICAg
ICAgICBhdXRoZW50aWNhdGlvblNjaGVtZSA9IFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9u
U2NoZW1lSFRUUERpZ2VzdDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0hpc3RvcnkvSGlzdG9yeVByb3BlcnR5TGlzdC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0hpc3RvcnkvSGlzdG9yeVByb3BlcnR5TGlzdC5tbQppbmRleCAwNjBhM2JmNzg3MWQy
MWE3ZWQ1OGVkMTU5MmUwOGEwZmExNjU4MTJkLi40NzkxNmU3ODFhMjQzMDQxZTFkNTgyNDhhYmZh
ZWFhYzBjNTdiYjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5
L0hpc3RvcnlQcm9wZXJ0eUxpc3QubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlz
dG9yeS9IaXN0b3J5UHJvcGVydHlMaXN0Lm1tCkBAIC0yNyw3ICsyNyw2IEBACiAKICNpbXBvcnQg
IldlYkhpc3RvcnlJdGVtSW50ZXJuYWwuaCIKICNpbXBvcnQgPFdlYkNvcmUvSGlzdG9yeUl0ZW0u
aD4KLSNpbXBvcnQgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViQmFz
ZU5ldHNjYXBlUGx1Z2luVmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMv
V2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5tbQppbmRleCA3NGU3OWMwZGU0YmMxYWZlMGUxODYz
YzIwMzA4OWQ2N2RiZjhlNGYyLi44ZTg5NTRiOWE5N2UzNzE4NDQ0MGVlZTUzOTBkMzRmZDJjY2Jm
ZmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYkJhc2VO
ZXRzY2FwZVBsdWdpblZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lu
cy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCkBAIC04NTQsMTEgKzg1NCw5IEBAIEBlbmQK
IAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWJvb2wgZ2V0QXV0aGVudGljYXRpb25JbmZvKGNvbnN0
IGNoYXIqIHByb3RvY29sU3RyLCBjb25zdCBjaGFyKiBob3N0U3RyLCBpbnQzMl90IHBvcnQsIGNv
bnN0IGNoYXIqIHNjaGVtZVN0ciwgY29uc3QgY2hhciogcmVhbG1TdHIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICBDU3RyaW5nJiB1c2VybmFtZSwgQ1N0cmluZyYgcGFzc3dvcmQpCitib29s
IGdldEF1dGhlbnRpY2F0aW9uSW5mbyhjb25zdCBjaGFyKiBwcm90b2NvbFN0ciwgY29uc3QgY2hh
ciogaG9zdFN0ciwgaW50MzJfdCBwb3J0LCBjb25zdCBjaGFyKiBzY2hlbWVTdHIsIGNvbnN0IGNo
YXIqIHJlYWxtU3RyLCBDU3RyaW5nJiB1c2VybmFtZSwgQ1N0cmluZyYgcGFzc3dvcmQpCiB7Ci0g
ICAgaWYgKHN0cmNhc2VjbXAocHJvdG9jb2xTdHIsICJodHRwIikgIT0gMCAmJiAKLSAgICAgICAg
c3RyY2FzZWNtcChwcm90b2NvbFN0ciwgImh0dHBzIikgIT0gMCkKKyAgICBpZiAoIWVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHByb3RvY29sU3RyLCAiaHR0cCIpICYmICFlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShwcm90b2NvbFN0ciwgImh0dHBzIikpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIE5TU3RyaW5nICpob3N0ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4
U3RyaW5nOmhvc3RTdHJdOwpAQCAtODc0LDEwICs4NzIsMTAgQEAgYm9vbCBnZXRBdXRoZW50aWNh
dGlvbkluZm8oY29uc3QgY2hhciogcHJvdG9jb2xTdHIsIGNvbnN0IGNoYXIqIGhvc3RTdHIsIGlu
dDMyX3QKICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CiAgICAgCiAgICAgTlNT
dHJpbmcgKmF1dGhlbnRpY2F0aW9uTWV0aG9kID0gTlNVUkxBdXRoZW50aWNhdGlvbk1ldGhvZERl
ZmF1bHQ7Ci0gICAgaWYgKCFzdHJjYXNlY21wKHByb3RvY29sU3RyLCAiaHR0cCIpKSB7Ci0gICAg
ICAgIGlmICghc3RyY2FzZWNtcChzY2hlbWVTdHIsICJiYXNpYyIpKQorICAgIGlmIChlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwcm90b2NvbFN0ciwgImh0dHAiKSkgeworICAgICAgICBp
ZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc2NoZW1lU3RyLCAiYmFzaWMiKSkKICAg
ICAgICAgICAgIGF1dGhlbnRpY2F0aW9uTWV0aG9kID0gTlNVUkxBdXRoZW50aWNhdGlvbk1ldGhv
ZEhUVFBCYXNpYzsKLSAgICAgICAgZWxzZSBpZiAoIXN0cmNhc2VjbXAoc2NoZW1lU3RyLCAiZGln
ZXN0IikpCisgICAgICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHNj
aGVtZVN0ciwgImRpZ2VzdCIpKQogICAgICAgICAgICAgYXV0aGVudGljYXRpb25NZXRob2QgPSBO
U1VSTEF1dGhlbnRpY2F0aW9uTWV0aG9kSFRUUERpZ2VzdDsKICAgICB9CiAgICAgCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQppbmRleCBi
MzRkMmRlMmFiNjc4NjM2ZDE3OGYyNTE0MjgzOGJhZmE3NTc1NjM1Li4zM2JmMGQ5YWQ1MDVmYjEx
ODUwMmQ1NTRjZjg0YWQ0MGRkZTEzMWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KQEAgLTc1LDE0ICs3NSwxNCBAQCBzdGF0aWMg
TlNNdXRhYmxlRGljdGlvbmFyeSAqd2ViUHJlZmVyZW5jZXNJbnN0YW5jZXM7CiAKIHN0YXRpYyB1
bnNpZ25lZCB3ZWJQcmVmZXJlbmNlc0luc3RhbmNlQ291bnRXaXRoUHJpdmF0ZUJyb3dzaW5nRW5h
YmxlZDsKIAotc3RhdGljIGJvb2wgY29udGFpbnMoY29uc3QgY2hhciogY29uc3QgYXJyYXlbXSwg
aW50IGNvdW50LCBjb25zdCBjaGFyKiBpdGVtKQordGVtcGxhdGU8dW5zaWduZWQgc2l6ZT4gc3Rh
dGljIGJvb2wgY29udGFpbnMoY29uc3QgY2hhciogY29uc3QgKCZhcnJheSlbc2l6ZV0sIGNvbnN0
IGNoYXIqIGl0ZW0pCiB7CiAgICAgaWYgKCFpdGVtKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIGlmICghc3RyY2Fz
ZWNtcChhcnJheVtpXSwgaXRlbSkpCisgICAgZm9yIChhdXRvKiBzdHJpbmcgOiBhcnJheSkgewor
ICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcsIGl0ZW0pKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTM5
LDExICsxMzksMTEgQEAgc3RhdGljIFdlYkNhY2hlTW9kZWwgY2FjaGVNb2RlbEZvck1haW5CdW5k
bGUodm9pZCkKICAgICAgICAgfTsKIAogICAgICAgICBjb25zdCBjaGFyKiBidW5kbGVJRCA9IFtb
W05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdIFVURjhTdHJpbmddOwotICAg
ICAgICBpZiAoY29udGFpbnMoZG9jdW1lbnRWaWV3ZXJJRHMsIHNpemVvZihkb2N1bWVudFZpZXdl
cklEcykgLyBzaXplb2YoZG9jdW1lbnRWaWV3ZXJJRHNbMF0pLCBidW5kbGVJRCkpCisgICAgICAg
IGlmIChjb250YWlucyhkb2N1bWVudFZpZXdlcklEcywgYnVuZGxlSUQpKQogICAgICAgICAgICAg
cmV0dXJuIFdlYkNhY2hlTW9kZWxEb2N1bWVudFZpZXdlcjsKLSAgICAgICAgaWYgKGNvbnRhaW5z
KGRvY3VtZW50QnJvd3NlcklEcywgc2l6ZW9mKGRvY3VtZW50QnJvd3NlcklEcykgLyBzaXplb2Yo
ZG9jdW1lbnRCcm93c2VySURzWzBdKSwgYnVuZGxlSUQpKQorICAgICAgICBpZiAoY29udGFpbnMo
ZG9jdW1lbnRCcm93c2VySURzLCBidW5kbGVJRCkpCiAgICAgICAgICAgICByZXR1cm4gV2ViQ2Fj
aGVNb2RlbERvY3VtZW50QnJvd3NlcjsKLSAgICAgICAgaWYgKGNvbnRhaW5zKHByaW1hcnlXZWJC
cm93c2VySURzLCBzaXplb2YocHJpbWFyeVdlYkJyb3dzZXJJRHMpIC8gc2l6ZW9mKHByaW1hcnlX
ZWJCcm93c2VySURzWzBdKSwgYnVuZGxlSUQpKQorICAgICAgICBpZiAoY29udGFpbnMocHJpbWFy
eVdlYkJyb3dzZXJJRHMsIGJ1bmRsZUlEKSkKICAgICAgICAgICAgIHJldHVybiBXZWJDYWNoZU1v
ZGVsUHJpbWFyeVdlYkJyb3dzZXI7CiAKICAgICAgICAgYm9vbCBpc0xpbmtlZEFnYWluc3RXZWJL
aXQgPSBXZWJLaXRMaW5rZWRPbk9yQWZ0ZXIoMCk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZDFhYWRkZTVjNDkxMzYzMGFlYzkwODA0Mzg2NDRj
MWVmMjEyOWE2NS4uZGU0NTYwNTFiY2EzMzkxZGU1YjY4ZGMxZDNiNTZkNDhkZmExZjQ2NiAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI0IEBACisyMDE3LTEyLTAyICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAg
ICAgICBNb2Rlcm5pemUgc29tZSBhc3BlY3RzIG9mIHRleHQgY29kZWNzLCBlbGltaW5hdGUgV2Vi
S2l0IHVzZSBvZiBzdHJjYXNlY21wCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xODAwMDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHA6
IFJlbW92ZWQgaW5jbHVkZSBvZiBTdHJpbmdFeHRyYXMuaC4KKworICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvQ01ha2VMaXN0cy50eHQ6IEFkZGVkIExpbmVFbmRpbmcuY3BwLgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBEaXR0
by4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9MaW5lRW5kaW5nLmNwcDogQWRk
ZWQuIEhhcyB0ZXN0cyBmb3IgdGhlIExpbmVFbmRpbmcKKyAgICAgICAgZnVuY3Rpb25zIHJld3Jp
dHRlbiBpbiB0aGlzIHBhdGNoLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL1RleHRDb2RlYy5jcHA6IFVwZGF0ZWQgdGVzdCBub3cgdGhhdCB0aGUgZGVjb2RlCisgICAg
ICAgIGZ1bmN0aW9uIGRvZXNuJ3QgaGF2ZSBkZWZhdWx0cyBmb3IgYXMgbWFueSBhcmd1bWVudHMg
YW55IG1vcmUuIEFsc28gY2hhbmdlZCBzbworICAgICAgICB0aGF0IHRoZSB0ZXN0cyBsb2cgdGhl
IGZhY3QgdGhhdCB0aGUgZGVjb2RlIGZ1bmN0aW9uIHJldHVybnMgYW4gZXJyb3IgYW5kIHVwZGF0
ZWQKKyAgICAgICAgZXhwZWN0ZWQgcmVzdWx0cyB0byBleHBlY3QgYWxsIHRoZSBlcnJvcnMuCisK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwOiBEaXR0
by4KKwogMjAxNy0xMi0wMSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5j
b20+CiAKICAgICAgICAgV2ViRHJpdmVyOiBhdXRvLWluc3RhbGwgcHl0ZXN0IGluc3RlYWQgb2Yg
aW1wb3J0aW5nIGl0IGZyb20gd3B0IHRvb2xzIGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3VwcG9ydENHLmNwcCBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHAKaW5kZXggOGFjYjlhNzAxZjE4ZDliMTZh
YjM5ZDZlZDljYjY4NWYzZTJlODg1MS4uYWJmN2Y4OTg3ZDc4NmI2NmM0NGIxYTExY2IzMGZmYjg2
ZjU1OTAyMyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3Vw
cG9ydENHLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0
Q0cuY3BwCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KIAogI2lmIFBMQVRGT1JNKFdJTikKICNpbmNsdWRlICJN
RDUuaCIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQgYi9U
b29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CmluZGV4IDJkZWIxZWEzZmI1YjgzYTYx
MTVjY2I3NTE0ZjcwNWMzNzJjMDc3MDMuLjM4ZjRkYzRmOTkwMWQwNWI1MTkwMGNhN2I2NDE0ZDky
MmRjNWM1NjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQK
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dApAQCAtMTA3LDYgKzEwNyw3
IEBAIHNldChUZXN0V1RGX1NPVVJDRVMKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9X
VEYvSlNPTlZhbHVlLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9MRUJE
ZWNvZGVyLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9MaWZlY3ljbGVM
b2dnZXIuY3BwCisgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0xpbmVFbmRpbmcu
Y3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0xpc3RIYXNoU2V0LmNwcAog
ICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9Mb2NrLmNwcAogICAgICR7VEVTVFdF
QktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9Mb2dnZXIuY3BwCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDM1Mzc5YzEyNmYyMWQ1M2Y1ZGJhMTM1MTQ3NGI0YTU0ZWU1ODI1M2QuLjJmNzgwNzlkODU0
NjBkZjhlMjkyNjI2ZGI3ZDIzOTZkOTE3OWFhZDUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC01MzksNiArNTM5LDcgQEAKIAkJOTNBRjRFQ0UxNTA2RjA2NDAwN0ZENTdFIC8qIE5ld0ZpcnN0
VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckltYWdlc19CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBRjRFQ0QxNTA2RjA2NDAwN0ZENTdF
IC8qIE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckltYWdlc19CdW5kbGUuY3BwICov
OyB9OwogCQk5M0FGNEVEMTE1MDZGMTMwMDA3RkQ1N0UgLyogbG90cy1vZi1pbWFnZXMuaHRtbCBp
biBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0FG
NEVDRjE1MDZGMTIzMDA3RkQ1N0UgLyogbG90cy1vZi1pbWFnZXMuaHRtbCAqLzsgfTsKIAkJOTND
RkE4NjcxQ0VCOUUzODAwMDU2NUE4IC8qIGF1dG9mb2N1c2VkLXRleHQtaW5wdXQuaHRtbCBpbiBD
b3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0NGQTg2
NjFDRUI5REUxMDAwNTY1QTggLyogYXV0b2ZvY3VzZWQtdGV4dC1pbnB1dC5odG1sICovOyB9Owor
CQk5M0UyQzU1NTFGRDMyMDQxMDBFMURGNkEgLyogTGluZUVuZGluZy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0UyQzU1NDFGRDMyMDQxMDBFMURG
NkEgLyogTGluZUVuZGluZy5jcHAgKi87IH07CiAJCTkzRTJEMjc2MUVEN0Q1MzIwMEZBNzZGNiAv
KiBvZmZzY3JlZW4taWZyYW1lLW9mLW1lZGlhLWRvY3VtZW50Lmh0bWwgaW4gQ29weSBSZXNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFMkQyNzUxRUQ3RDUxNzAw
RkE3NkY2IC8qIG9mZnNjcmVlbi1pZnJhbWUtb2YtbWVkaWEtZG9jdW1lbnQuaHRtbCAqLzsgfTsK
IAkJOTNFNjE5M0IxRjkzMUIzQTAwQUYyNDVFIC8qIFRleHRDb2RlYy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0EyNTg5ODFGOTJGRjE1MDAzRTUx
MEMgLyogVGV4dENvZGVjLmNwcCAqLzsgfTsKIAkJOTNGMURCMzQxNERBMjA4NzAwMjRDMzYyIC8q
IE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dF9CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNGMURCMzMxNERBMjA4NzAwMjRDMzYy
IC8qIE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dF9CdW5kbGUuY3BwICovOyB9OwpAQCAt
MTUxNiw2ICsxNTE3LDcgQEAKIAkJOTNDRkE4NjgxQ0VCQ0ZFRDAwMDU2NUE4IC8qIENhbmRpZGF0
ZVRlc3RzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ2FuZGlk
YXRlVGVzdHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRDNEMTlCMTdCMUE3
QjAwMEM3QzQxNSAvKiBhbGwtY29udGVudC1pbi1vbmUtaWZyYW1lLmh0bWwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0Lmh0bWw7IHBhdGggPSAiYWxsLWNvbnRlbnQtaW4tb25lLWlmcmFtZS5odG1sIjsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNEM0QxOUQxN0IxQTg0MjAwQzdDNDE1IC8qIExheW91
dE1pbGVzdG9uZXNXaXRoQWxsQ29udGVudEluRnJhbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0TWlsZXN0b25lc1dpdGhBbGxDb250ZW50SW5GcmFtZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTJDNTU0MUZEMzIwNDEwMEUxREY2
QSAvKiBMaW5lRW5kaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IExpbmVFbmRpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0UyRDI3NTFF
RDdENTE3MDBGQTc2RjYgLyogb2Zmc2NyZWVuLWlmcmFtZS1vZi1tZWRpYS1kb2N1bWVudC5odG1s
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gIm9mZnNjcmVlbi1pZnJhbWUtb2YtbWVkaWEt
ZG9jdW1lbnQuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRTk0M0YxMUNE
M0U4N0UwMEFDMDhDMiAvKiBWaWRlb0NvbnRyb2xzTWFuYWdlci5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFZpZGVvQ29udHJvbHNNYW5hZ2VyLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5M0YxREIzMDE0REEyMDc2MDAyNEMzNjIgLyogTmV3Rmly
c3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yNjExLDYgKzI2MTMsNyBAQAogCQkJCTUzMUMxRDhEMURGOEVG
NzIwMDZFOTc5RiAvKiBMRUJEZWNvZGVyLmNwcCAqLywKIAkJCQlBNTdENTRGNzFGMzM5N0I0MDBB
OTdBQTcgLyogTGlmZWN5Y2xlTG9nZ2VyLmNwcCAqLywKIAkJCQlBNTdENTRGODFGMzM5N0I0MDBB
OTdBQTcgLyogTGlmZWN5Y2xlTG9nZ2VyLmggKi8sCisJCQkJOTNFMkM1NTQxRkQzMjA0MTAwRTFE
RjZBIC8qIExpbmVFbmRpbmcuY3BwICovLAogCQkJCTI2MzAwQjE3MTY3NTVDRDkwMDY2ODg2RCAv
KiBMaXN0SGFzaFNldC5jcHAgKi8sCiAJCQkJMEZGQzQ1QTQxQjczRUJFMjAwODVCRDYyIC8qIExv
Y2suY3BwICovLAogCQkJCUE1N0Q1NEY0MUYzMzk1RDAwMEE5N0FBNyAvKiBMb2dnZXIuY3BwICov
LApAQCAtMjc1OCw3ICsyNzYxLDYgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCiAJCQkJNzU2MDkxNzYxOTI1OUM1OTAwOUVGMDZFIC8qIGlvcyAqLywKLQkJCQlGRTIxN0VD
QjE2NDBBNTRBMDA1Mjk4OEIgLyogSmF2YVNjcmlwdENvcmUgKi8sCiAJCQkJQzA3RTZDQUQxM0ZE
Njc2NTAwMzhCMjJCIC8qIG1hYyAqLywKIAkJCQlDMDg1ODdGOTEzRkVDMzlCMDAxRUY0RTUgLyog
VGVzdFdlYktpdEFQSSAqLywKIAkJCQk0NDBBMUQzNjE0QTAxMDAwMDA4QTY2RjIgLyogV2ViQ29y
ZSAqLywKQEAgLTI5NjksMTMgKzI5NzEsNiBAQAogCQkJbmFtZSA9IFJlc291cmNlczsKIAkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCUZFMjE3RUNCMTY0MEE1NEEwMDUyOTg4QiAv
KiBKYXZhU2NyaXB0Q29yZSAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4g
PSAoCi0JCQkpOwotCQkJcGF0aCA9IEphdmFTY3JpcHRDb3JlOwotCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKLQkJfTsKIC8qIEVuZCBQQlhHcm91cCBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBC
WE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCkBAIC0zMTcwLDYgKzMxNjUsNyBAQAogCQkJCTdBMDUw
OTQxMUZCOUYwNjQwMEIzM0ZCOCAvKiBKU09OVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTMxQzFEOEUxREY4RUY3MjAwNkU5NzlGIC8qIExFQkRlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTU3RDU0RjkxRjMzOTdCNDAwQTk3QUE3IC8qIExpZmVjeWNsZUxvZ2dlci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk5M0UyQzU1NTFGRDMyMDQxMDBFMURGNkEgLyogTGluZUVuZGluZy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREVFODFEMEE1OTBDMDBGRUJDRjMgLyogTGlzdEhh
c2hTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMUQxRDBBNTkwQzAwRkVCQ0YzIC8q
IExvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3RDU0RjYxRjMzOTVEMDAwQTk3QUE3IC8q
IExvZ2dlci5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL0xpbmVFbmRpbmcuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvTGluZUVuZGluZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOThmMDAyODVlZDYxMWUzZmUwMDBiMDU2Njli
NWY1M2U0ZGI5MzM4YQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL0xpbmVFbmRpbmcuY3BwCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0xpbmVFbmRpbmcuaD4KKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitjb25z
dCBhdXRvIENSID0gJ1xyJzsKK2NvbnN0IGF1dG8gTEYgPSAnXG4nOworCitzdGF0aWMgY29uc3Qg
Y2hhciogc3RyaW5naWZ5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmVjdG9yKQoreworICAgIHN0
YXRpYyBjaGFyIGJ1ZmZlclsxMDBdOworICAgIGNoYXIqIG91dCA9IGJ1ZmZlcjsKKyAgICBmb3Ig
KGF1dG8gY2hhcmFjdGVyIDogdmVjdG9yKSB7CisgICAgICAgIHN3aXRjaCAoY2hhcmFjdGVyKSB7
CisgICAgICAgIGNhc2UgJ1wwJzoKKyAgICAgICAgICAgICpvdXQrKyA9ICc8JzsKKyAgICAgICAg
ICAgICpvdXQrKyA9ICcwJzsKKyAgICAgICAgICAgICpvdXQrKyA9ICc+JzsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlICdccic6CisgICAgICAgICAgICAqb3V0KysgPSAnPCc7Cisg
ICAgICAgICAgICAqb3V0KysgPSAnQyc7CisgICAgICAgICAgICAqb3V0KysgPSAnUic7CisgICAg
ICAgICAgICAqb3V0KysgPSAnPic7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAn
XG4nOgorICAgICAgICAgICAgKm91dCsrID0gJzwnOworICAgICAgICAgICAgKm91dCsrID0gJ0wn
OworICAgICAgICAgICAgKm91dCsrID0gJ0YnOworICAgICAgICAgICAgKm91dCsrID0gJz4nOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqb3V0Kysg
PSBjaGFyYWN0ZXI7CisgICAgICAgIH0KKyAgICB9CisgICAgKm91dCA9ICdcMCc7CisgICAgcmV0
dXJuIGJ1ZmZlcjsKK30KKworVEVTVChXVEYsIExpbmVFbmRpbmdOb3JtYWxpemVUb0xGKQorewor
ICAgIEVYUEVDVF9TVFJFUSgiIiwgc3RyaW5naWZ5KG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9MRih7
IH0pKSk7CisKKyAgICBFWFBFQ1RfU1RSRVEoIjwwPiIsIHN0cmluZ2lmeShub3JtYWxpemVMaW5l
RW5kaW5nc1RvTEYoeyAnXDAnIH0pKSk7CisgICAgRVhQRUNUX1NUUkVRKCJhIiwgc3RyaW5naWZ5
KG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9MRih7ICdhJyB9KSkpOworICAgIEVYUEVDVF9TVFJFUSgi
PExGPiIsIHN0cmluZ2lmeShub3JtYWxpemVMaW5lRW5kaW5nc1RvTEYoeyBDUiB9KSkpOworICAg
IEVYUEVDVF9TVFJFUSgiPExGPiIsIHN0cmluZ2lmeShub3JtYWxpemVMaW5lRW5kaW5nc1RvTEYo
eyBMRiB9KSkpOworCisgICAgRVhQRUNUX1NUUkVRKCI8TEY+Iiwgc3RyaW5naWZ5KG5vcm1hbGl6
ZUxpbmVFbmRpbmdzVG9MRih7IENSLCBMRiB9KSkpOworICAgIEVYUEVDVF9TVFJFUSgiPExGPjxM
Rj4iLCBzdHJpbmdpZnkobm9ybWFsaXplTGluZUVuZGluZ3NUb0xGKHsgTEYsIExGIH0pKSk7Cisg
ICAgRVhQRUNUX1NUUkVRKCI8TEY+PExGPiIsIHN0cmluZ2lmeShub3JtYWxpemVMaW5lRW5kaW5n
c1RvTEYoeyBDUiwgQ1IgfSkpKTsKKyAgICBFWFBFQ1RfU1RSRVEoIjxMRj48TEY+Iiwgc3RyaW5n
aWZ5KG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9MRih7IExGLCBDUiB9KSkpOworCisgICAgRVhQRUNU
X1NUUkVRKCJhPExGPiIsIHN0cmluZ2lmeShub3JtYWxpemVMaW5lRW5kaW5nc1RvTEYoeyAnYScs
IENSIH0pKSk7CisgICAgRVhQRUNUX1NUUkVRKCJhPExGPiIsIHN0cmluZ2lmeShub3JtYWxpemVM
aW5lRW5kaW5nc1RvTEYoeyAnYScsIExGIH0pKSk7CisgICAgRVhQRUNUX1NUUkVRKCJhPExGPiIs
IHN0cmluZ2lmeShub3JtYWxpemVMaW5lRW5kaW5nc1RvTEYoeyAnYScsIENSLCBMRiB9KSkpOwor
ICAgIEVYUEVDVF9TVFJFUSgiYTxMRj48TEY+Iiwgc3RyaW5naWZ5KG5vcm1hbGl6ZUxpbmVFbmRp
bmdzVG9MRih7ICdhJywgTEYsIENSIH0pKSk7CisKKyAgICBFWFBFQ1RfU1RSRVEoImE8TEY+YiIs
IHN0cmluZ2lmeShub3JtYWxpemVMaW5lRW5kaW5nc1RvTEYoeyAnYScsIENSLCAnYicgfSkpKTsK
KyAgICBFWFBFQ1RfU1RSRVEoImE8TEY+YiIsIHN0cmluZ2lmeShub3JtYWxpemVMaW5lRW5kaW5n
c1RvTEYoeyAnYScsIExGLCAnYicgfSkpKTsKKyAgICBFWFBFQ1RfU1RSRVEoImE8TEY+YiIsIHN0
cmluZ2lmeShub3JtYWxpemVMaW5lRW5kaW5nc1RvTEYoeyAnYScsIENSLCBMRiwgJ2InIH0pKSk7
CisgICAgRVhQRUNUX1NUUkVRKCJhPExGPjxMRj5iIiwgc3RyaW5naWZ5KG5vcm1hbGl6ZUxpbmVF
bmRpbmdzVG9MRih7ICdhJywgTEYsIENSLCAnYicgfSkpKTsKK30KKworVEVTVChXVEYsIExpbmVF
bmRpbmdOb3JtYWxpemVUb0NSTEYpCit7CisgICAgRVhQRUNUX1NUUkVRKCIiLCBzdHJpbmdpZnko
bm9ybWFsaXplTGluZUVuZGluZ3NUb0NSTEYoeyB9KSkpOworCisgICAgRVhQRUNUX1NUUkVRKCI8
MD4iLCBzdHJpbmdpZnkobm9ybWFsaXplTGluZUVuZGluZ3NUb0NSTEYoeyAnXDAnIH0pKSk7Cisg
ICAgRVhQRUNUX1NUUkVRKCJhIiwgc3RyaW5naWZ5KG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9DUkxG
KHsgJ2EnIH0pKSk7CisgICAgRVhQRUNUX1NUUkVRKCI8Q1I+PExGPiIsIHN0cmluZ2lmeShub3Jt
YWxpemVMaW5lRW5kaW5nc1RvQ1JMRih7IENSIH0pKSk7CisgICAgRVhQRUNUX1NUUkVRKCI8Q1I+
PExGPiIsIHN0cmluZ2lmeShub3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JMRih7IExGIH0pKSk7CisK
KyAgICBFWFBFQ1RfU1RSRVEoIjxDUj48TEY+Iiwgc3RyaW5naWZ5KG5vcm1hbGl6ZUxpbmVFbmRp
bmdzVG9DUkxGKHsgQ1IsIExGIH0pKSk7CisgICAgRVhQRUNUX1NUUkVRKCI8Q1I+PExGPjxDUj48
TEY+Iiwgc3RyaW5naWZ5KG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9DUkxGKHsgTEYsIExGIH0pKSk7
CisgICAgRVhQRUNUX1NUUkVRKCI8Q1I+PExGPjxDUj48TEY+Iiwgc3RyaW5naWZ5KG5vcm1hbGl6
ZUxpbmVFbmRpbmdzVG9DUkxGKHsgQ1IsIENSIH0pKSk7CisgICAgRVhQRUNUX1NUUkVRKCI8Q1I+
PExGPjxDUj48TEY+Iiwgc3RyaW5naWZ5KG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9DUkxGKHsgTEYs
IENSIH0pKSk7CisKKyAgICBFWFBFQ1RfU1RSRVEoImE8Q1I+PExGPiIsIHN0cmluZ2lmeShub3Jt
YWxpemVMaW5lRW5kaW5nc1RvQ1JMRih7ICdhJywgQ1IgfSkpKTsKKyAgICBFWFBFQ1RfU1RSRVEo
ImE8Q1I+PExGPiIsIHN0cmluZ2lmeShub3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JMRih7ICdhJywg
TEYgfSkpKTsKKyAgICBFWFBFQ1RfU1RSRVEoImE8Q1I+PExGPiIsIHN0cmluZ2lmeShub3JtYWxp
emVMaW5lRW5kaW5nc1RvQ1JMRih7ICdhJywgQ1IsIExGIH0pKSk7CisgICAgRVhQRUNUX1NUUkVR
KCJhPENSPjxMRj48Q1I+PExGPiIsIHN0cmluZ2lmeShub3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JM
Rih7ICdhJywgTEYsIENSIH0pKSk7CisKKyAgICBFWFBFQ1RfU1RSRVEoImE8Q1I+PExGPmIiLCBz
dHJpbmdpZnkobm9ybWFsaXplTGluZUVuZGluZ3NUb0NSTEYoeyAnYScsIENSLCAnYicgfSkpKTsK
KyAgICBFWFBFQ1RfU1RSRVEoImE8Q1I+PExGPmIiLCBzdHJpbmdpZnkobm9ybWFsaXplTGluZUVu
ZGluZ3NUb0NSTEYoeyAnYScsIExGLCAnYicgfSkpKTsKKyAgICBFWFBFQ1RfU1RSRVEoImE8Q1I+
PExGPmIiLCBzdHJpbmdpZnkobm9ybWFsaXplTGluZUVuZGluZ3NUb0NSTEYoeyAnYScsIENSLCBM
RiwgJ2InIH0pKSk7CisgICAgRVhQRUNUX1NUUkVRKCJhPENSPjxMRj48Q1I+PExGPmIiLCBzdHJp
bmdpZnkobm9ybWFsaXplTGluZUVuZGluZ3NUb0NSTEYoeyAnYScsIExGLCBDUiwgJ2InIH0pKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9UZXh0Q29kZWMuY3BwIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL1RleHRDb2RlYy5jcHAKaW5kZXggZTMzZDc2MDI3Yzg3NGJhZGVm
OTk0ZDNjYzEzNzBmYzVlYjc3YmUyYi4uZmQwNTA1MGFjMDA4MjdiZGVkYmYyY2U4NjU2MjA5M2M2
MWJhZjA2MSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1Rl
eHRDb2RlYy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1RleHRD
b2RlYy5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCisjaW5j
bHVkZSA8V2ViQ29yZS9UZXh0Q29kZWMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRFbmNvZGlu
Zy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dEVuY29kaW5nUmVnaXN0cnkuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CkBAIC05Miw3ICs5MywxMCBAQCBzdGF0aWMgY29u
c3QgY2hhciogdGVzdERlY29kZShjb25zdCBjaGFyKiBlbmNvZGluZ05hbWUsIHN0ZDo6aW5pdGlh
bGl6ZXJfbGlzdDxjbwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAg
ICAgICAgIGF1dG8gdmVjdG9yID0gZGVjb2RlSGV4VGVzdEJ5dGVzKGlucHV0cy5iZWdpbigpW2ld
KTsKICAgICAgICAgYm9vbCBsYXN0ID0gaSA9PSBzaXplIC0gMTsKLSAgICAgICAgcmVzdWx0QnVp
bGRlci5hcHBlbmQoZXNjYXBlTm9uQVNDSUlQcmludGFibGVDaGFyYWN0ZXJzKGNvZGVjLT5kZWNv
ZGUodmVjdG9yLmRhdGEoKSwgdmVjdG9yLnNpemUoKSwgbGFzdCkpKTsKKyAgICAgICAgYm9vbCBz
YXdFcnJvciA9IGZhbHNlOworICAgICAgICByZXN1bHRCdWlsZGVyLmFwcGVuZChlc2NhcGVOb25B
U0NJSVByaW50YWJsZUNoYXJhY3RlcnMoY29kZWMtPmRlY29kZSh2ZWN0b3IuZGF0YSgpLCB2ZWN0
b3Iuc2l6ZSgpLCBsYXN0LCBmYWxzZSwgc2F3RXJyb3IpKSk7CisgICAgICAgIGlmIChzYXdFcnJv
cikKKyAgICAgICAgICAgIHJlc3VsdEJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIEVSUk9SIik7CiAg
ICAgfQogICAgIHJldHVybiBlc2NhcGVOb25BU0NJSVByaW50YWJsZUNoYXJhY3RlcnMocmVzdWx0
QnVpbGRlci50b1N0cmluZygpKTsKIH0KQEAgLTEzNCwxMDMgKzEzOCwxMDMgQEAgVEVTVChUZXh0
Q29kZWMsIFVURjgpCiAKIFRFU1QoVGV4dENvZGVjLCBVVEY4SW52YWxpZFNlcXVlbmNlcykKIHsK
LSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfT8iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkUwIEE1
IDNGIiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH0/IiwgdGVzdERlY29kZSgiVVRGLTgi
LCB7ICJFMCBBNSIsICIzRiIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9PyIsIHRlc3RE
ZWNvZGUoIlVURi04IiwgeyAiRTAiLCAiQTUgM0YiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntG
RkZEfT8iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkUwIiwgIkE1IiwgIjNGIiB9KSk7Ci0gICAg
RVhQRUNUX1NUUkVRKCJ7RkZGRH0/IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJFMCIsICIiLCAi
QTUiLCAiIiwgIjNGIiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH0/IiwgdGVzdERlY29k
ZSgiVVRGLTgiLCB7ICJFMCIsICIiLCAiQTUiLCAiIiwgIjNGIiwgIiIgfSkpOwotICAgIEVYUEVD
VF9TVFJFUSgie0ZGRkR9PyIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiIiwgIkUwIiwgIiIsICJB
NSIsICIiLCAiM0YiLCAiIiB9KSk7Ci0KLSAgICBFWFBFQ1RfU1RSRVEoImF7RkZGRH0/IiwgdGVz
dERlY29kZSgiVVRGLTgiLCB7ICI2MSBFMCBBNSAzRiIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgi
YXtGRkZEfT8iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIjYxIEUwIEE1IiwgIjNGIiB9KSk7Ci0g
ICAgRVhQRUNUX1NUUkVRKCJhe0ZGRkR9PyIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiNjEgRTAi
LCAiQTUgM0YiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoImF7RkZGRH0/IiwgdGVzdERlY29kZSgi
VVRGLTgiLCB7ICI2MSBFMCIsICJBNSIsICIzRiIgfSkpOwotCi0gICAgRVhQRUNUX1NUUkVRKCJ7
QjZ9e0ZGRkR9PyIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiQzIgQjYgRTAgQTUgM0YiIH0pKTsK
LSAgICBFWFBFQ1RfU1RSRVEoIntCNn17RkZGRH0/IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJD
MiBCNiBFMCBBNSIsICIzRiIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0I2fXtGRkZEfT8iLCB0
ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkMyIEI2IEUwIiwgIkE1IDNGIiB9KSk7Ci0gICAgRVhQRUNU
X1NUUkVRKCJ7QjZ9e0ZGRkR9PyIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiQzIgQjYgRTAiLCAi
QTUiLCAiM0YiIH0pKTsKLQotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9IiwgdGVzdERlY29kZSgi
VVRGLTgiLCB7ICJDMiIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9IiwgdGVzdERlY29k
ZSgiVVRGLTgiLCB7ICJFMiIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9IiwgdGVzdERl
Y29kZSgiVVRGLTgiLCB7ICJFMiA5OCIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9Iiwg
dGVzdERlY29kZSgiVVRGLTgiLCB7ICJGMCIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9
IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGMCA5RiIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgi
e0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGMCA5RiA5MiIgfSkpOwotCi0gICAgRVhQ
RUNUX1NUUkVRKCJ7RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkUyIiwgIjk4IiB9KSk7
Ci0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkYwIiwg
IjlGIiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIs
IHsgIkYwIDlGIiwgIjkyIiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH0iLCB0ZXN0RGVj
b2RlKCJVVEYtOCIsIHsgIkYwIiwgIjlGOTIiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZE
fSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjAiLCAiOUYiLCAiOTIiIH0pKTsKLQotICAgIEVY
UEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJDMCA4MCIg
fSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9IiwgdGVzdERlY29kZSgi
VVRGLTgiLCB7ICJFMCA4MCA4MCIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9
e0ZGRkR9e0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGMCA4MCA4MCA4MCIgfSkpOwot
ICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IiwgdGVzdERl
Y29kZSgiVVRGLTgiLCB7ICJGOCA4MCA4MCA4MCA4MCIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgi
e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgi
LCB7ICJGQyA4MCA4MCA4MCA4MCA4MCIgfSkpOwotCi0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17
RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkMxIEJGIiB9KSk7Ci0gICAgRVhQRUNUX1NU
UkVRKCJ7RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkUwIDgxIEJG
IiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0
RGVjb2RlKCJVVEYtOCIsIHsgIkYwIDgwIDgxIEJGIiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7
RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkY4
IDgwIDgwIDgxIEJGIiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17
RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkZDIDgwIDgwIDgwIDgx
IEJGIiB9KSk7Ci0KLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfSIsIHRlc3RE
ZWNvZGUoIlVURi04IiwgeyAiRTAgODIgODAiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZE
fXtGRkZEfXtGRkZEfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjAgODAgODIgODAi
IH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSIs
IHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjggODAgODAgODIgODAiIH0pKTsKLSAgICBFWFBFQ1Rf
U1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSIsIHRlc3REZWNvZGUo
IlVURi04IiwgeyAiRkMgODAgODAgODAgODIgODAiIH0pKTsKLQotICAgIEVYUEVDVF9TVFJFUSgi
e0ZGRkR9e0ZGRkR9e0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJFMCA5RiBCRiIgfSkp
OwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IiwgdGVzdERlY29k
ZSgiVVRGLTgiLCB7ICJGMCA4MCA5RiBCRiIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9
e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGOCA4MCA4
MCA5RiBCRiIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9
e0ZGRkR9e0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGQyA4MCA4MCA4MCA5RiBCRiIg
fSkpOwotCi0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0
RGVjb2RlKCJVVEYtOCIsIHsgIkYwIDgwIEEwIDgwIiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7
RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkY4
IDgwIDgwIEEwIDgwIiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17
RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkZDIDgwIDgwIDgwIEEw
IDgwIiB9KSk7Ci0KLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSIs
IHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjAgOEYgQkYgQkYiIH0pKTsKLSAgICBFWFBFQ1RfU1RS
RVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04Iiwg
eyAiRjggODAgOEYgQkYgQkYiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtG
RkZEfXtGRkZEfXtGRkZEfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRkMgODAgODAg
OEYgQkYgQkYiIH0pKTsKLQotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZG
RkR9e0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGOCA4MCA5MCA4MCA4MCIgfSkpOwot
ICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9Iiwg
dGVzdERlY29kZSgiVVRGLTgiLCB7ICJGQyA4MCA4MCA5MCA4MCA4MCIgfSkpOwotCi0gICAgRVhQ
RUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0RGVjb2RlKCJV
VEYtOCIsIHsgIkY4IDg0IDhGIEJGIEJGIiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17
RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkZD
IDgwIDg0IDhGIEJGIEJGIiB9KSk7Ci0KLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtG
RkZEfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjQgOTAgODAgODAiIH0pKTsKLSAg
ICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSIsIHRlc3REZWNv
ZGUoIlVURi04IiwgeyAiRkIgQkYgQkYgQkYgQkYiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntG
RkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04Iiwg
eyAiRkQgQkYgQkYgQkYgQkYgQkYiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZE
fXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRUQgQTAgODAiIH0pKTsKLSAgICBFWFBF
Q1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRUQg
QkYgQkYiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtG
RkZEfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRUQgQTAgQkQgRUQgQjIgQTkiIH0p
KTsKLQotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9Iiwg
dGVzdERlY29kZSgiVVRGLTgiLCB7ICJGOCA4NCA5MCA4MCA4MCIgfSkpOwotICAgIEVYUEVDVF9T
VFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IiwgdGVzdERlY29kZSgi
VVRGLTgiLCB7ICJGQyA4MCA4NCA5MCA4MCA4MCIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZG
RkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGMCA4RCBBMCA4
MCIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IiwgdGVz
dERlY29kZSgiVVRGLTgiLCB7ICJGMCA4RCBCRiBCRiIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgi
e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IiwgdGVzdERl
Y29kZSgiVVRGLTgiLCB7ICJGMCA4RCBBMCBCRCBGMCA4RCBCMiBBOSIgfSkpOwotCi0gICAgRVhQ
RUNUX1NUUkVRKCJ7RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIjgwIiB9KSk7Ci0gICAg
RVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIjgwIDgw
IiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0RGVjb2Rl
KCJVVEYtOCIsIHsgIjgwIDgwIDgwIiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZG
RH17RkZGRH17RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIjgwIDgwIDgwIDgwIiB9KSk7
Ci0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0
RGVjb2RlKCJVVEYtOCIsIHsgIjgwIDgwIDgwIDgwIDgwIiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVR
KCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYt
OCIsIHsgIjgwIDgwIDgwIDgwIDgwIDgwIiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17
RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIs
IHsgIjgwIDgwIDgwIDgwIDgwIDgwIDgwIiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7QjZ9e0ZG
RkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJDMiBCNiA4MCIgfSkpOwotICAgIEVYUEVDVF9T
VFJFUSgiezI2MDN9e0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJFMiA5OCA4MyA4MCIg
fSkpOwotICAgIEVYUEVDVF9TVFJFUSgiezFGNEE5fXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04
IiwgeyAiRjAgOUYgOTIgQTkgODAiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZE
fXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRkIgQkYg
QkYgQkYgQkYgODAiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtG
RkZEfXtGRkZEfXtGRkZEfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRkQgQkYgQkYg
QkYgQkYgQkYgODAiIH0pKTsKLQotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9IiwgdGVzdERlY29k
ZSgiVVRGLTgiLCB7ICJGRSIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9Iiwg
dGVzdERlY29kZSgiVVRGLTgiLCB7ICJGRSA4MCIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZG
RkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGRiIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgi
e0ZGRkR9e0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGRiA4MCIgfSkpOworICAgIEVY
UEVDVF9TVFJFUSgie0ZGRkR9PyBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRTAgQTUg
M0YiIH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfT8gRVJST1IiLCB0ZXN0RGVjb2RlKCJV
VEYtOCIsIHsgIkUwIEE1IiwgIjNGIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH0/IEVS
Uk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJFMCIsICJBNSAzRiIgfSkpOworICAgIEVYUEVD
VF9TVFJFUSgie0ZGRkR9PyBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRTAiLCAiQTUi
LCAiM0YiIH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfT8gRVJST1IiLCB0ZXN0RGVjb2Rl
KCJVVEYtOCIsIHsgIkUwIiwgIiIsICJBNSIsICIiLCAiM0YiIH0pKTsKKyAgICBFWFBFQ1RfU1RS
RVEoIntGRkZEfT8gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkUwIiwgIiIsICJBNSIs
ICIiLCAiM0YiLCAiIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH0/IEVSUk9SIiwgdGVz
dERlY29kZSgiVVRGLTgiLCB7ICIiLCAiRTAiLCAiIiwgIkE1IiwgIiIsICIzRiIsICIiIH0pKTsK
KworICAgIEVYUEVDVF9TVFJFUSgiYXtGRkZEfT8gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIs
IHsgIjYxIEUwIEE1IDNGIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJhe0ZGRkR9PyBFUlJPUiIs
IHRlc3REZWNvZGUoIlVURi04IiwgeyAiNjEgRTAgQTUiLCAiM0YiIH0pKTsKKyAgICBFWFBFQ1Rf
U1RSRVEoImF7RkZGRH0/IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICI2MSBFMCIsICJB
NSAzRiIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgiYXtGRkZEfT8gRVJST1IiLCB0ZXN0RGVjb2Rl
KCJVVEYtOCIsIHsgIjYxIEUwIiwgIkE1IiwgIjNGIiB9KSk7CisKKyAgICBFWFBFQ1RfU1RSRVEo
IntCNn17RkZGRH0/IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJDMiBCNiBFMCBBNSAz
RiIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0I2fXtGRkZEfT8gRVJST1IiLCB0ZXN0RGVjb2Rl
KCJVVEYtOCIsIHsgIkMyIEI2IEUwIEE1IiwgIjNGIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7
QjZ9e0ZGRkR9PyBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiQzIgQjYgRTAiLCAiQTUg
M0YiIH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEoIntCNn17RkZGRH0/IEVSUk9SIiwgdGVzdERlY29k
ZSgiVVRGLTgiLCB7ICJDMiBCNiBFMCIsICJBNSIsICIzRiIgfSkpOworCisgICAgRVhQRUNUX1NU
UkVRKCJ7RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkMyIiB9KSk7CisgICAg
RVhQRUNUX1NUUkVRKCJ7RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkUyIiB9
KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIs
IHsgIkUyIDk4IiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH0gRVJST1IiLCB0ZXN0RGVj
b2RlKCJVVEYtOCIsIHsgIkYwIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH0gRVJST1Ii
LCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkYwIDlGIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7
RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkYwIDlGIDkyIiB9KSk7CisKKyAg
ICBFWFBFQ1RfU1RSRVEoIntGRkZEfSBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRTIi
LCAiOTgiIH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfSBFUlJPUiIsIHRlc3REZWNvZGUo
IlVURi04IiwgeyAiRjAiLCAiOUYiIH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfSBFUlJP
UiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjAgOUYiLCAiOTIiIH0pKTsKKyAgICBFWFBFQ1Rf
U1RSRVEoIntGRkZEfSBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjAiLCAiOUY5MiIg
fSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgi
LCB7ICJGMCIsICI5RiIsICI5MiIgfSkpOworCisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZG
RH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkMwIDgwIiB9KSk7CisgICAgRVhQRUNU
X1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsg
IkUwIDgwIDgwIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZG
RH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkYwIDgwIDgwIDgwIiB9KSk7CisgICAg
RVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0
RGVjb2RlKCJVVEYtOCIsIHsgIkY4IDgwIDgwIDgwIDgwIiB9KSk7CisgICAgRVhQRUNUX1NUUkVR
KCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2Rl
KCJVVEYtOCIsIHsgIkZDIDgwIDgwIDgwIDgwIDgwIiB9KSk7CisKKyAgICBFWFBFQ1RfU1RSRVEo
IntGRkZEfXtGRkZEfSBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiQzEgQkYiIH0pKTsK
KyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfSBFUlJPUiIsIHRlc3REZWNvZGUo
IlVURi04IiwgeyAiRTAgODEgQkYiIH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZE
fXtGRkZEfXtGRkZEfSBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjAgODAgODEgQkYi
IH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSBF
UlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjggODAgODAgODEgQkYiIH0pKTsKKyAgICBF
WFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSBFUlJPUiIs
IHRlc3REZWNvZGUoIlVURi04IiwgeyAiRkMgODAgODAgODAgODEgQkYiIH0pKTsKKworICAgIEVY
UEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgi
LCB7ICJFMCA4MiA4MCIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9
e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGMCA4MCA4MiA4MCIgfSkpOwor
ICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IEVSUk9SIiwg
dGVzdERlY29kZSgiVVRGLTgiLCB7ICJGOCA4MCA4MCA4MiA4MCIgfSkpOworICAgIEVYUEVDVF9T
VFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERl
Y29kZSgiVVRGLTgiLCB7ICJGQyA4MCA4MCA4MCA4MiA4MCIgfSkpOworCisgICAgRVhQRUNUX1NU
UkVRKCJ7RkZGRH17RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkUw
IDlGIEJGIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH0g
RVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkYwIDgwIDlGIEJGIiB9KSk7CisgICAgRVhQ
RUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0RGVj
b2RlKCJVVEYtOCIsIHsgIkY4IDgwIDgwIDlGIEJGIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7
RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJV
VEYtOCIsIHsgIkZDIDgwIDgwIDgwIDlGIEJGIiB9KSk7CisKKyAgICBFWFBFQ1RfU1RSRVEoIntG
RkZEfXtGRkZEfXtGRkZEfXtGRkZEfSBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjAg
ODAgQTAgODAiIH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZE
fXtGRkZEfSBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjggODAgODAgQTAgODAiIH0p
KTsKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZE
fSBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRkMgODAgODAgODAgQTAgODAiIH0pKTsK
KworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVz
dERlY29kZSgiVVRGLTgiLCB7ICJGMCA4RiBCRiBCRiIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgi
e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgi
LCB7ICJGOCA4MCA4RiBCRiBCRiIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9
e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJG
QyA4MCA4MCA4RiBCRiBCRiIgfSkpOworCisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17
RkZGRH17RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkY4IDgwIDkw
IDgwIDgwIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH17
RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkZDIDgwIDgwIDkwIDgw
IDgwIiB9KSk7CisKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtG
RkZEfSBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjggODQgOEYgQkYgQkYiIH0pKTsK
KyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSBF
UlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRkMgODAgODQgOEYgQkYgQkYiIH0pKTsKKwor
ICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERl
Y29kZSgiVVRGLTgiLCB7ICJGNCA5MCA4MCA4MCIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZG
RkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7
ICJGQiBCRiBCRiBCRiBCRiIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZG
RkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGRCBC
RiBCRiBCRiBCRiBCRiIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9
IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJFRCBBMCA4MCIgfSkpOworICAgIEVYUEVD
VF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7
ICJFRCBCRiBCRiIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZG
RkR9e0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJFRCBBMCBCRCBF
RCBCMiBBOSIgfSkpOworCisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZG
RH17RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkY4IDg0IDkwIDgwIDgwIiB9
KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZG
RH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkZDIDgwIDg0IDkwIDgwIDgwIiB9KSk7
CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0
RGVjb2RlKCJVVEYtOCIsIHsgIkYwIDhEIEEwIDgwIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7
RkZGRH17RkZGRH17RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkYw
IDhEIEJGIEJGIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZG
RH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsg
IkYwIDhEIEEwIEJEIEYwIDhEIEIyIEE5IiB9KSk7CisKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZE
fSBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiODAiIH0pKTsKKyAgICBFWFBFQ1RfU1RS
RVEoIntGRkZEfXtGRkZEfSBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiODAgODAiIH0p
KTsKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfSBFUlJPUiIsIHRlc3REZWNv
ZGUoIlVURi04IiwgeyAiODAgODAgODAiIH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtG
RkZEfXtGRkZEfXtGRkZEfSBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiODAgODAgODAg
ODAiIH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZE
fSBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiODAgODAgODAgODAgODAiIH0pKTsKKyAg
ICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSBFUlJP
UiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiODAgODAgODAgODAgODAgODAiIH0pKTsKKyAgICBF
WFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSBF
UlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiODAgODAgODAgODAgODAgODAgODAiIH0pKTsK
KyAgICBFWFBFQ1RfU1RSRVEoIntCNn17RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIs
IHsgIkMyIEI2IDgwIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7MjYwM317RkZGRH0gRVJST1Ii
LCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkUyIDk4IDgzIDgwIiB9KSk7CisgICAgRVhQRUNUX1NU
UkVRKCJ7MUY0QTl9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGMCA5RiA5
MiBBOSA4MCIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9
e0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGQiBCRiBCRiBCRiBC
RiA4MCIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZG
RkR9e0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGRCBCRiBCRiBC
RiBCRiBCRiA4MCIgfSkpOworCisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH0gRVJST1IiLCB0ZXN0
RGVjb2RlKCJVVEYtOCIsIHsgIkZFIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZG
RH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkZFIDgwIiB9KSk7CisgICAgRVhQRUNU
X1NUUkVRKCJ7RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkZGIiB9KSk7Cisg
ICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIs
IHsgIkZGIDgwIiB9KSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvY2cvVGVzdEludm9jYXRpb25DRy5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rl
c3RJbnZvY2F0aW9uQ0cuY3BwCmluZGV4IDMzYTViODE5YTljNWVjZDRjNDliNzE1NTRkMjdjYzA2
NTgyMDY1NjYuLjc2MDNkMzc3ZTljY2U3NjdhYTUxNzkwNjE3NzllYmMwZWU1NWM2ODUgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2cvVGVzdEludm9jYXRpb25DRy5jcHAKKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcApAQCAtMzMs
NyArMzMsNiBAQAogI2luY2x1ZGUgPFdlYktpdC9XS0ltYWdlQ0cuaD4KICNpbmNsdWRlIDx3dGYv
TUQ1Lmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdF
eHRyYXMuaD4KIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRl
IDxMYXVuY2hTZXJ2aWNlcy9VVENvcmVUeXBlcy5oPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328247</attachid>
            <date>2017-12-02 12:10:59 -0800</date>
            <delta_ts>2017-12-02 14:29:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-180009-20171202121058.patch</filename>
            <type>text/plain</type>
            <size>199992</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI1NDUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
ZDI4ZTNiNzZhZGVjZWZkZGQyMjBmNjEzMGY4ZjM5ZGEzOThjMmU0Li44NWM0ZWYzMDczZGRkYTEy
OTEyZjcxOGI1YjUyZjVmNzMxZGFjOGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMiBAQAorMjAxNy0xMi0wMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgTW9kZXJuaXplIHNvbWUgYXNwZWN0cyBvZiB0ZXh0IGNvZGVjcywgZWxpbWluYXRl
IFdlYktpdCB1c2Ugb2Ygc3RyY2FzZWNtcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMDA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwOiBSZW1vdmVkIGlu
Y2x1ZGUgb2YgU3RyaW5nRXh0cmFzLmguCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cDogRGl0dG8uCisgICAgICAgICogYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHA6IERpdHRv
LgorICAgICAgICAqIHJ1bnRpbWUvQ29uZmlnRmlsZS5jcHA6IERpdHRvLgorICAgICAgICAqIHJ1
bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHA6IERpdHRvLgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhp
bmdUeXBlLmNwcDogRGl0dG8uCisgICAgICAgICogcnVudGltZS9KU0NKU1ZhbHVlLmNwcDogRGl0
dG8uCisgICAgICAgICogcnVudGltZS9KU0RhdGVNYXRoLmNwcDogRGl0dG8uCisgICAgICAgICog
cnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHA6IERpdHRvLgorICAgICAgICAqIHJ1
bnRpbWUvT3B0aW9ucy5jcHA6IERpdHRvLgorICAgICAgICAoSlNDOjpwYXJzZSk6IFVzZSBlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSBpbnN0ZWFkIG9mIHN0cmNhc2VjbXAuCisKIDIwMTct
MTItMDEgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEphdmFT
Y3JpcHRDb3JlOiBtaXNzaW5nIGV4Y2VwdGlvbiBjaGVja3MgaW4gTWF0aCBmdW5jdGlvbnMgdGhh
dCB0YWtlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggMDliZTRjNDVjZDQ2ZDE4NjI5NTY5
YjdjN2E1MGNhZWRlMmE4OTdiMC4uYTZjMDUwM2IxZmRjMzA4YTk4NTdjMWM5Yzc3MWJiNmU1NDA5
NGE0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwzOSBAQAorMjAxNy0xMi0wMiAgRGFyaW4gQWRsZXIgIDxkYXJp
bkBhcHBsZS5jb20+CisKKyAgICAgICAgTW9kZXJuaXplIHNvbWUgYXNwZWN0cyBvZiB0ZXh0IGNv
ZGVjcywgZWxpbWluYXRlIFdlYktpdCB1c2Ugb2Ygc3RyY2FzZWNtcAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMDA5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvQXNzZXJ0aW9ucy5jcHA6IFJl
bW92ZWQgaW5jbHVkZSBvZiBTdHJpbmdFeHRyYXMuaC4KKyAgICAgICAgKFdURkxvZ0NoYW5uZWxC
eU5hbWUpOiBVc2UgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSBpbnN0ZWFkIG9mIHN0cmNhc2VjbXAu
CisgICAgICAgICogd3RmL0RhdGVNYXRoLmNwcDogUmVtb3ZlZCBpbmNsdWRlIG9mIFN0cmluZ0V4
dHJhcy5oLgorICAgICAgICAqIHd0Zi9NRDUuY3BwOiBEaXR0by4gQWxzbyByZW1vdmVkIGluY2x1
ZGUgb2YgQ1N0cmluZy5oLgorICAgICAgICAqIHd0Zi9TSEExLmNwcDogRGl0dG8uCisKKyAgICAg
ICAgKiB3dGYvU3RyaW5nRXh0cmFzLmg6CisgICAgICAgIChzdHJuY2FzZWNtcCk6IERlbGV0ZWQu
CisgICAgICAgIChzdHJjYXNlY21wKTogRGVsZXRlZC4KKworICAgICAgICAqIHd0Zi9TdHJpbmdQ
cmludFN0cmVhbS5jcHA6IFJlbW92ZWQgaW5jbHVkZSBvZiBTdHJpbmdFeHRyYXMuaC4KKyAgICAg
ICAgKiB3dGYvdGV4dC9CYXNlNjQuY3BwOiBEaXR0by4KKworICAgICAgICAqIHd0Zi90ZXh0L0xp
bmVFbmRpbmcuY3BwOgorICAgICAgICAoV1RGOjpub3JtYWxpemVMaW5lRW5kaW5nc1RvTEYpOiBS
ZXBsYWNlZCBvbGQgbW9yZSBnZW5lcmFsIHB1cnBvc2UgZnVuY3Rpb24gd2l0aAorICAgICAgICB0
aGlzLiBDaGFuZ2VkIGFyZ3VtZW50IHR5cGUgdG8gdmVjdG9yIGFuZCB1c2VkIGFuIHJ2YWx1ZSBy
ZWZlcmVuY2UgYW5kIHJldHVybiB2YWx1ZS4KKyAgICAgICAgQWxzbyBmaXhlZCBzb21lIHNtYWxs
IGxvZ2ljIGVycm9ycy4KKyAgICAgICAgKFdURjo6bm9ybWFsaXplTGluZUVuZGluZ3NUb0NSTEYp
OiBEaXR0by4KKyAgICAgICAgKFdURjo6bm9ybWFsaXplTGluZUVuZGluZ3NUb05hdGl2ZSk6IFVw
ZGF0ZWQgZm9yIGFib3ZlIGNoYW5nZXMuCisgICAgICAgICogd3RmL3RleHQvTGluZUVuZGluZy5o
OiBVcGRhdGVkIGZvciBhYm92ZSBjaGFuZ2VzLgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5n
Q29tbW9uLmg6CisgICAgICAgIChXVEY6OmVxdWFsSWdub3JpbmdBU0NJSUNhc2UpOiBBZGRlZCBv
dmVybG9hZCBmb3IgY29uc3QgY2hhciouCisgICAgICAgIChXVEY6OmVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKTogRGl0dG8uCisKKyAgICAgICAgKiB3dGYvdGV4dC9UZXh0U3RyZWFtLmNw
cDogUmVtb3ZlZCBpbmNsdWRlIG9mIFN0cmluZ0V4dHJhcy5oLgorICAgICAgICAqIHd0Zi90ZXh0
L1dURlN0cmluZy5jcHA6IERpdHRvLgorICAgICAgICAqIHd0Zi91bmljb2RlL2ljdS9Db2xsYXRv
cklDVS5jcHA6IERpdHRvLgorCiAyMDE3LTEyLTAyICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFw
cGxlLmNvbT4KIAogICAgICAgICBGYWN0b3Igb3V0IHRoZSAiZGF0YWJhc2VUYXNrUXVldWUiIHBh
cnRzIG9mIElEQlNlcnZlciBpbnRvIHNvbWV0aGluZyByZXVzYWJsZS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5
N2VmYTJiYjVlOTRmOTE0NjY2Yzg5NmE2MDhlMjcwOGEyOTY0ZDU3Li5kZDFhNWMxM2FlODYyNTM0
NmY4YzMzOTU3NWE4NGYwMDRjMTI3MTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTk3IEBACisy
MDE3LTEyLTAyICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNb2Rl
cm5pemUgc29tZSBhc3BlY3RzIG9mIHRleHQgY29kZWNzLCBlbGltaW5hdGUgV2ViS2l0IHVzZSBv
ZiBzdHJjYXNlY21wCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xODAwMDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIE1vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZl
dGNoQm9keTo6Y29uc3VtZUFzU3RyZWFtKTogVXBkYXRlIHRvIHVzZSBzaXplIHNpbmNlIHRoZSBy
ZXN1bHQgb2YKKyAgICAgICAgZW5jb2RlIGlzIG5vdyBWZWN0b3IgcmF0aGVyIHRoYW4gQ1N0cmlu
Zy4gQW5kIGZvciB0aGUgbmV3IFVuZW5jb2RhYmxlSGFuZGxpbmcuCisgICAgICAgIChXZWJDb3Jl
OjpGZXRjaEJvZHk6OmNvbnN1bWVUZXh0KTogUmVtb3ZlZCBub3ctdW5uZWVkZWQgdHlwZSBjYXN0
LiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6Ym9keUFzRm9ybURhdGEgY29u
c3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6dGFrZSk6IFBhc3MgcmVz
dWx0IG9mIGVuY29kZSBkaXJlY3RseSB0byBTaGFyZWRCdWZmZXI6OmNyZWF0ZS4KKworICAgICAg
ICAqIE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRlci5jcHA6IFJlbW92ZWQgaW5j
bHVkZSBvZiBTdHJpbmdFeHRyYXMuaC4KKyAgICAgICAgKiBicmlkZ2UvSWRlbnRpZmllclJlcC5o
OiBEaXR0by4KKyAgICAgICAgKiBicmlkZ2UvYy9jX2luc3RhbmNlLmNwcDogRGl0dG8uCisKKyAg
ICAgICAgKiBmaWxlYXBpL0Jsb2JCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JC
dWlsZGVyOjphcHBlbmQpOiBVcGRhdGVkIGZvciBDU3RyaW5nIHRvIFZlY3RvciBjaGFuZ2UgYW5k
CisgICAgICAgIGZvciBVbmVuY29kYWJsZUhhbmRsaW5nLgorCisgICAgICAgICogaHRtbC9wYXJz
ZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZXRh
Q2hhcnNldFBhcnNlcjo6Y2hlY2tGb3JNZXRhQ2hhcnNldCk6IENhbGwgdGhlIGRlY29kZSBmdW5j
dGlvbgorICAgICAgICB3aXRoIGFsbCB0aGUgYXJndW1lbnRzIHNpbmNlIHRoZXJlIGlzIG9ubHkg
b25lIGRlY29kZSBmdW5jdGlvbiBub3cuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVDb250ZW50U2Vj
dXJpdHlQb2xpY3lTSEEyNTZIYXNoKTogVXBkYXRlZCBmb3IgQ1N0cmluZyB0byBWZWN0b3IKKyAg
ICAgICAgY2hhbmdlIGFuZCBmb3IgVW5lbmNvZGFibGVIYW5kbGluZy4KKworICAgICAgICAqIGxv
YWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y3J5cHRvZ3JhcGhpY0RpZ2VzdEZvckJ5dGVzKTogQ2hhbmdlZCBhcmd1bWVudCB0eXBlIHRvIGNv
bnN0IHZvaWQqLgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Qu
aDogRGl0dG8uCisKKyAgICAgICAgKiBsb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpUZXh0UmVzb3VyY2VEZWNvZGVy
KTogTW92ZWQgaW5pdGlhbGl6YXRpb24gb2YgZGF0YQorICAgICAgICBtZW1iZXJzIHRvIGNsYXNz
IGRlZmluaXRpb24uCisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVh
dGUpOiBNb3ZlZCBmdW5jdGlvbiBib2R5IGhlcmUgZnJvbSB0aGUgaGVhZGVyLgorICAgICAgICAo
V2ViQ29yZTo6VGV4dFJlc291cmNlRGVjb2Rlcjo6c2V0RW5jb2RpbmcpOiBVc2UgZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UuCisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNv
ZGVyOjpzaG91bGRBdXRvRGV0ZWN0IGNvbnN0KTogVXBkYXRlZCBmb3IgbmFtZSBjaGFuZ2UKKyAg
ICAgICAgdG8gbV9wYXJlbnRGcmFtZUF1dG9EZXRlY3RlZEVuY29kaW5nLCB3aGljaCBvYnZpYXRl
cyBhIGNvbW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpmbHVz
aCk6IERpdHRvLgorICAgICAgICAqIGxvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmg6IE1vdmVk
IGluaXRpYWxpemF0aW9uIGhlcmUgZnJvbSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgTW92ZWQgZnVu
Y3Rpb24gYm9kaWVzIG91dCBvZiB0aGUgY2xhc3MuIFJlbmFtZWQgbV9oaW50RW5jb2RpbmcgdG8K
KyAgICAgICAgbV9wYXJlbnRGcmFtZUF1dG9EZXRlY3RlZEVuY29kaW5nIHNpbmNlIHRoYXQgaXMg
YSBtb3JlIGFjY3VyYXRlIGRlc2NyaXB0aW9uLgorCisgICAgICAgICogbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDogUmVtb3ZlZCBpbmNsdWRlIG9mIFN0cmluZ0V4
dHJhcy5oLgorICAgICAgICAqIHBhZ2UvRnJhbWVUcmVlLmNwcDogRGl0dG8uCisgICAgICAgICog
cGFnZS9QYWdlU2VyaWFsaXplci5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNl
cmlhbGl6ZXI6OnNlcmlhbGl6ZUZyYW1lKTogUGFzcyByZXN1bHQgb2YgZW5jb2RlIGRpcmVjdGx5
IHRvCisgICAgICAgIFN0cmluZ0J1ZmZlcjo6Y3JlYXRlIGFuZCB1cGRhdGUgZm9yIFVuZW5jb2Rh
YmxlSGFuZGxpbmcuCisgICAgICAgIChXZWJDb3JlOjpQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXpl
Q1NTU3R5bGVTaGVldCk6IERpdHRvLgorICAgICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0
eVBvbGljeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6OmZp
bmRIYXNoT2ZDb250ZW50SW5Qb2xpY2llcyBjb25zdCk6IERpdHRvLgorCisgICAgICAgICogcGxh
dGZvcm0vRmlsZUhhbmRsZS5jcHA6IFJlbW92ZWQgaW5jbHVkZSBvZiBTdHJpbmdFeHRyYXMuaC4K
KworICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI6OmNyZWF0ZSk6IEFkZGVkIGFuIG92ZXJsb2FkIHRoYXQgdGFrZXMgVmVj
dG9yPHVpbnQ4X3Q+LgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oOiBEaXR0by4K
KworICAgICAgICAqIHBsYXRmb3JtL1VSTFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpV
UkxQYXJzZXI6OmVuY29kZVF1ZXJ5KTogVXBkYXRlZCBzaW5jZSBlbmNvZGUgcmV0dXJucyBhIFZl
Y3RvciBpbnN0ZWFkCisgICAgICAgIG9mIGEgQ1N0cmluZyBub3cgYW5kIGZvciBVbmVuY29kYWJs
ZUhhbmRsaW5nLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW06CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzaG91bGRXYWl0Rm9yTG9hZGlu
Z09mUmVzb3VyY2UpOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1Bs
YXRmb3JtQ0FMYXllci5jcHA6IFJlbW92ZWQgaW5jbHVkZSBvZiBTdHJpbmdFeHRyYXMuaC4KKwor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6aGFu
ZGxlRGF0YVVSTCk6IFVwZGF0ZWQgZm9yIFZlY3RvciBpbnN0ZWFkCisgICAgICAgIG9mIENTdHJp
bmcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1EYXRhOjpjcmVhdGUpOiBBZGRlZCBuZXcgb3ZlcmxvYWQsIGFuZCBzaW1w
bGlmaWVkIHNvbWUgZXhpc3Rpbmcgb25lcy4KKyAgICAgICAgKFdlYkNvcmU6Om5vcm1hbGl6ZVN0
cmluZ0RhdGEpOiBDaGFuZ2VkIHJldHVybiB0eXBlIHRvIFZlY3Rvcjx1aW50OF90PiBhbmQgdXBk
YXRlZAorICAgICAgICBmb3IgVW5lbmNvZGFibGVIYW5kbGluZy4KKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1EYXRhOjphcHBlbmRNdWx0aVBhcnRTdHJpbmdWYWx1ZSk6IFVwZGF0ZWQgZm9yIGNoYW5n
ZSBpbiB0eXBlIG9mCisgICAgICAgIHJlc3VsdCBvZiBub3JtYWxpemVTdHJpbmdEYXRhLgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaDogVXBkYXRlZCBmb3IgdGhlIGFib3Zl
IGFuZCB1cGRhdGVkIGNvbW1lbnRzLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3Jt
RGF0YUJ1aWxkZXIuY3BwOiBNYWRlIHRoaXMgYSBuYW1lc3BhY2UgaW5zdGVhZCBvZiBhIGNsYXNz
LgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFCdWlsZGVyOjphcHBlbmQpOiBBZGRlZCBhbiBv
dmVybG9hZCBmb3IgVmVjdG9yPHVpbnQ4X3Q+LgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFC
dWlsZGVyOjphcHBlbmRRdW90ZWQpOiBSZW5hbWVkIGZyb20gYXBwZW5kUXVvdGVkU3RyaW5nIGFu
ZAorICAgICAgICBjaGFuZ2VkIHRoZSBhcmd1bWVudCB0eXBlLgorICAgICAgICAoV2ViQ29yZTo6
Rm9ybURhdGFCdWlsZGVyOjphcHBlbmRGb3JtVVJMRW5jb2RlZCk6IE1vdmVkIGxvZ2ljIHVwIGZy
b20gdGhlCisgICAgICAgIGVuY29kZVN0cmluZ0FzRm9ybURhdGEgZnVuY3Rpb24gaW50byBhIG5l
dyBzZXBhcmF0ZSBoZWxwZXIuCisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUJ1aWxkZXI6OmFk
ZEZpbGVuYW1lVG9NdWx0aVBhcnRIZWFkZXIpOiBVcGRhdGVkIGZvciBjaGFuZ2UgdG8KKyAgICAg
ICAgVW5lbmNvZGFibGVIYW5kbGluZy4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhQnVpbGRl
cjo6YmVnaW5NdWx0aVBhcnRIZWFkZXIpOiBDaGFuZ2VkIGFyZ3VtZW50IHR5cGUuCisgICAgICAg
IChXZWJDb3JlOjpGb3JtRGF0YUJ1aWxkZXI6OmFkZEtleVZhbHVlUGFpckFzRm9ybURhdGEpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNG
b3JtRGF0YSk6IFVwZGF0ZWQgdG8gY2FsbCBoZWxwZXIuCisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9Gb3JtRGF0YUJ1aWxkZXIuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAgICAg
ICogcGxhdGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaDogVXNlIFZlY3Rvcjx1aW50
OF90PiBpbnN0ZWFkIG9mCisgICAgICAgIFZlY3RvcjxjaGFyPiwgYWxzbyB1cGRhdGVkIHRoZSBj
b2RlIHRoYXQgY2FsbHMgZW5jb2RlIGZvciB0aGUgbmV3IHJldHVybiB0eXBlCisgICAgICAgIGFu
ZCB1cGRhdGVkIGZvciBjaGFuZ2UgdG8gVW5lbmNvZGFibGVIYW5kbGVyLgorCisgICAgICAgICog
cGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVj
OjpnZXRVbmVuY29kYWJsZVJlcGxhY2VtZW50KTogVXBkYXRlZCBzaW5jZSB3ZSBhcmUgdXNpbmcK
KyAgICAgICAgc3RkOjphcnJheSBub3csIHNvIHRoZSBvdXQgYXJndW1lbnQgaXMgZWFzaWVyIHRv
IHVuZGVyc3RhbmQsIGFsc28gdXBkYXRlZCBmb3IKKyAgICAgICAgY2hhbmdlIHRvIFVuZW5jb2Rh
YmxhSGFuZGxlci4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlYy5oOiBVc2Ugc3Rk
OjphcnJheSBmb3IgdGhlIFVuZW5jb2RhYmxlUmVwbGFjZW1lbnRBcnJheQorICAgICAgICB0eXBl
LCByZW1vdmVkIHRoZSBvdmVybG9hZCBvZiBkZWNvZGUgc28gdGhlcmUgaXMgb25seSBvbmUgZGVj
b2RlIGZ1bmN0aW9uLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SUNVQ29udmVydGVyV3JhcHBlcjo6fklDVUNvbnZlcnRlcldy
YXBwZXIpOiBEZWxldGVkLgorICAgICAgICBOb3QgbmVlZGVkIGFueSBtb3JlIHNpbmNlIHdlIHVz
ZSBJQ1VDb252ZXJ0ZXJQdHIgaW5zdGVhZCBub3cuCisgICAgICAgIChXZWJDb3JlOjpjYWNoZWRD
b252ZXJ0ZXJJQ1UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjSUNVOjpj
cmVhdGUpOiBEZWxldGVkLiBDYWxsZXJzIGp1c3QgdXNlIG1ha2VfdW5pcXVlCisgICAgICAgIGRp
cmVjdGx5IG5vdy4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0lDVTo6cmVnaXN0ZXJDb2Rl
Y3MpOiBSZXdyb3RlIHRvIHVzZSBsYW1iZGFzIGluc3RlYWQKKyAgICAgICAgb2YgZnVuY3Rpb25z
IHdpdGggdm9pZCogcG9pbnRlcnMuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNJQ1U6OlRl
eHRDb2RlY0lDVSk6IE1vdmVkIGluaXRpYWxpemVycyBpbnRvIHRoZSBoZWFkZXIuCisgICAgICAg
IChXZWJDb3JlOjpUZXh0Q29kZWNJQ1U6On5UZXh0Q29kZWNJQ1UpOiBNb3ZlZCB0aGUgYm9keSBv
ZiByZWxlYXNlSUNVQ29udmVydGVyCisgICAgICAgIGluIGhlcmUuIEFsc28gZ3JlYXRseSBzaW1w
bGlmaWVkIGl0IG5vdyB0aGF0IElDVUNvbnZlcnRlclB0ciBoYW5kbGVzIGNsb3NpbmcKKyAgICAg
ICAgaXQgYXMgbmVlZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjSUNVOjpyZWxlYXNl
SUNVQ29udmVydGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2Rl
Y0lDVTo6Y3JlYXRlSUNVQ29udmVydGVyIGNvbnN0KTogUmV3cm90ZSB0byBzaW1wbGZ5IG5vdyB0
aGF0CisgICAgICAgIHdlIGNhbiB1c2UgSUNVQ29udmVydGVyUHRyLgorICAgICAgICAoV2ViQ29y
ZTo6RXJyb3JDYWxsYmFja1NldHRlcjo6RXJyb3JDYWxsYmFja1NldHRlcik6IFRha2UgYSByZWZl
cmVuY2UgaW5zdGVhZAorICAgICAgICBvZiBhIHBvaW50ZXIuCisgICAgICAgIChXZWJDb3JlOjpF
cnJvckNhbGxiYWNrU2V0dGVyOjp+RXJyb3JDYWxsYmFja1NldHRlcik6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dENvZGVjSUNVOjpkZWNvZGUpOiBVc2UgZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UgaW5zdGVhZCBvZgorICAgICAgICBzdHJjYXNlY21wLgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dENvZGVjSUNVOjplbmNvZGUpOiBSZXR1cm4gYSBWZWN0b3IgaW5zdGVhZCBvZiBh
IENTdHJpbmcuCisgICAgICAgIFRha2UgYSBTdHJpbmdWaWV3IGluc3RlYWQgb2YgYSBwb2ludGVy
IGFuZCBsZW5ndGguIFNpbXBsaWZpZWQKKyAgICAgICAgdGhlIGJhY2tzbGFzaC1hcy1jdXJyZW5j
eS1zeW1ib2wgY29kZSBieSB1c2luZyBTdHJpbmc6OnJlcGxhY2UuCisgICAgICAgICogcGxhdGZv
cm0vdGV4dC9UZXh0Q29kZWNJQ1UuaDogVXBkYXRlZCBmb3IgYWJvdmUuIEZpeGVkIGluZGVudGF0
aW9uLgorICAgICAgICBBZGRlZCBhIG5ldyBJQ1VDb252ZXJ0ZXJQdHIgdHlwZWRlZiB0aGF0IHVz
ZXMgc3RkOjp1bmlxdWVfcHRyIHRvIGNsb3NlIHRoZQorICAgICAgICBjb252ZXJ0ZXI7IGNvbWJp
bmVkIHdpdGggbW92ZSBzZW1hbnRpY3MgaXQgc2ltcGxpZmllcyB0aGluZ3Mgc28gd2UgZG9uJ3Qg
aGF2ZQorICAgICAgICB0byBiZSBzbyBjYXJlZnVsIGFib3V0IGNhbGxpbmcgdWNudl9jbG9zZS4K
KworICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcDogUmVuYW1lZCB0
aGUgTGF0aW4tMSB0byBVbmljb2RlIHRhYmxlIGZyb20KKyAgICAgICAgInRhYmxlIiB0byBsYXRp
bjFDb252ZXJzaW9uVGFibGUuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNMYXRpbjE6OnJl
Z2lzdGVyQ29kZWNzKTogVXNlIGEgbGFtYmRhLgorICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlQ29t
cGxleFdpbmRvd3NMYXRpbjEpOiBSZXR1cm4gYSBWZWN0b3IgaW5zdGFkIG9mIENTdHJpbmcuCisg
ICAgICAgIEFsc28gdXNlIFN0cmluZ1ZpZXc6OmNvZGVQb2ludHMgaW5zdGVhZCBvZiBvdXIgb3du
IFUxNl9ORVhULgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjTGF0aW4xOjplbmNvZGUpOiBN
b3JlIG9mIHRoZSBzYW1lLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4x
Lmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4
dENvZGVjUmVwbGFjZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjUmVwbGFj
ZW1lbnQ6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNSZXBs
YWNlbWVudDo6VGV4dENvZGVjUmVwbGFjZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dENvZGVjUmVwbGFjZW1lbnQ6OnJlZ2lzdGVyQ29kZWNzKTogVXNlIGEgbGFtYmRhLgor
ICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjUmVwbGFjZW1lbnQuaDogVXBkYXRlZCBm
b3IgdGhlIGFib3ZlLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEYxNi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpuZXdTdHJlYW1pbmdUZXh0RGVjb2RlclVURjE2TEUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bmV3U3RyZWFtaW5nVGV4dERlY29kZXJVVEYxNkJF
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY1VURjE2OjpyZWdpc3RlckNv
ZGVjcyk6IFVzZSBsYW1iZGFzLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjVVRGMTY6OmVu
Y29kZSk6IFJldHVybiBhIFZlY3Rvci4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2Rl
Y1VURjE2Lmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvVGV4dENvZGVjVVRGOC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNVVEY4Ojpy
ZWdpc3RlckNvZGVjcyk6IFVzZSBhIGxhbWJkYS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2Rl
Y1VURjg6OmVuY29kZSk6IFJldHVybiBhIFZlY3Rvci4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0
L1RleHRDb2RlY1VURjguaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAgICAgICogcGxh
dGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpu
ZXdTdHJlYW1pbmdUZXh0RGVjb2RlclVzZXJEZWZpbmVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlRleHRDb2RlY1VzZXJEZWZpbmVkOjpyZWdpc3RlckNvZGVjcyk6IFVzZSBhIGxhbWJk
YS4KKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZUNvbXBsZXhVc2VyRGVmaW5lZCk6IFJldHVybiBh
IFZlY3Rvci4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY1VzZXJEZWZpbmVkOjplbmNvZGUp
OiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VzZXJEZWZpbmVkLmg6
IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEVu
Y29kaW5nLmNwcDogQ2hhbmdlZCBUZXh0Q29kZWNNYXAgdG8ganVzdCBob2xkIGEKKyAgICAgICAg
V1RGOjpGdW5jdGlvbiBpbnN0ZWFkIG9mIGhvbGRpbmcgYSBmdW5jdGlvbiBhbmQgYW4gYWRkaXRp
b25hbCBkYXRhIHBvaW50ZXIuCisgICAgICAgIChXZWJDb3JlOjpUZXh0RW5jb2Rpbmc6OlRleHRF
bmNvZGluZyk6IFVzZSBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZQorICAgICAgICBpbnN0
ZWFkIG9mIGEgc3BlY2lhbCBpc1JlcGxhY2VtZW50RW5jb2RpbmcgZnVuY3Rpb24uCisgICAgICAg
IChXZWJDb3JlOjpUZXh0RW5jb2Rpbmc6OmVuY29kZSBjb25zdCk6IFJldHVybiBhIFZlY3RvciBp
bnN0ZWFkIG9mIGEgQ1N0cmluZy4KKyAgICAgICAgUGFzcyBTdHJpbmdWaWV3IGluc3RlYWQgb2Yg
YSBwb2ludGVyIGFuZCBsZW5ndGguCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rp
bmcuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9U
ZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZGRUb1RleHRDb2Rl
Y01hcCk6IFJlbW92ZWQgdGhlIGFkZGl0aW9uYWxEYXRhIHBvaW50ZXIgYW5kIHVzZWQKKyAgICAg
ICAgV1RGTW92ZSBzaW5jZSBOZXdUZXh0Q29kZWNGdW5jdGlvbiBpcyBub3cgYSBXVEY6OkZ1bmN0
aW9uIHJhdGhlciB0aGFuIGEgQworICAgICAgICBmdW5jdGlvbiBwb2ludGVyLgorICAgICAgICAo
V2ViQ29yZTo6aXNSZXBsYWNlbWVudEVuY29kaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6Om5ld1RleHRDb2RlYyk6IFVzZSBmaW5kIGluc3RlYWQgb2YgZ2V0IG5vdyB0aGF0IHRoZSBm
dWNudGlvbnMgaW4KKyAgICAgICAgdGhlIG1hcCBhcmUgV1RGOjpGdW5jdGlvbiBhbmQgY2FuJ3Qg
YmUgY29waWVkLgorICAgICAgICAoV2ViQ29yZTo6ZHVtcFRleHRFbmNvZGluZ05hbWVNYXApOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuaDog
VXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC93aW4vVGV4
dENvZGVjV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY1dpbjo6ZW5jb2RlKTog
VXBkYXRlZCBjb21tZW50LgorCisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpzZW5kKTogVXBkYXRlZCBmb3IgY2hhbmdl
IHRvIFVuZW5jb2RhYmxlSGFuZGxpbmcuCisKKyAgICAgICAgKiB4bWwvWFNMVFVuaWNvZGVTb3J0
LmNwcDogUmVtb3ZlZCBpbmNsdWRlIG9mIFN0cmluZ0V4dHJhcy5oLgorICAgICAgICAqIHhtbC9w
YXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwOiBEaXR0by4KKyAgICAgICAgKiB4bWwvcGFyc2Vy
L1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHA6IERpdHRvLgorCiAyMDE3LTEyLTAyICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgaHR0cHM6
Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2NsaWVudHMtZ2V0YWxsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5n
ZUxvZwppbmRleCA5YjJiMTIzMjFiZDZmOWY5OGU2ZWZlNTdmZjQzYjgxN2Y2OWIwNWIwLi42ZDgx
ZWVmYjQ3MWEyZWY0NGMxOWZiZDAxNjZkYzMxYWYyMTYwZTg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9QQUwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNCBAQAorMjAxNy0xMi0wMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5j
b20+CisKKyAgICAgICAgTW9kZXJuaXplIHNvbWUgYXNwZWN0cyBvZiB0ZXh0IGNvZGVjcywgZWxp
bWluYXRlIFdlYktpdCB1c2Ugb2Ygc3RyY2FzZWNtcAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMDA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajog
QWRkZWQgVW5lbmNvZGFibGVIYW5kbGluZy5oLgorICAgICAgICAqIHBhbC90ZXh0L1VuZW5jb2Rh
YmxlSGFuZGxpbmcuaDogTW92ZWQgdGhlIFVuZW5jb2RhYmxlSGFuZGxpbmcgZW51bWVyYXRpb24K
KyAgICAgICAgaGVyZSBmcm9tIFRleHRDb2RlYy5oIGFuZCBjaGFuZ2VkIGl0IHRvIGFuIGVudW0g
Y2xhc3MuCisKIDIwMTctMTEtMzAgIFN0ZXBoYW4gU3phYm8gIDxzdGVwaGFuLnN6YWJvQHNvbnku
Y29tPgogCiAgICAgICAgIE1ha2UgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyIG9wdGlvbmFs
IGZvciBuZXR3b3JrIHByb2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNjQzNzUwMmJjZGZkMDdiZWEyMzQ2ZGE4
ZTVmMjQ0MWY3YTI1ZjU4ZC4uZTFmNzQ3NDJkODIxOTQ2ZTlhNWZhNDg4Y2VhODM3NjljODE5MDc4
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNy0xMi0wMiAgRGFyaW4gQWRsZXIgIDxk
YXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW9kZXJuaXplIHNvbWUgYXNwZWN0cyBvZiB0ZXh0
IGNvZGVjcywgZWxpbWluYXRlIFdlYktpdCB1c2Ugb2Ygc3RyY2FzZWNtcAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMDA5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMv
TmV0c2NhcGUvTmV0c2NhcGVCcm93c2VyRnVuY3MuY3BwOgorICAgICAgICAoV2ViS2l0Ojppbml0
aWFsaXplUHJvdGVjdGlvblNwYWNlKTogVXNlIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
IGluc3RlYWQKKyAgICAgICAgb2Ygc3RyY2FzZWNtcC4KKwogMjAxNy0xMi0wMiAgWW91ZW5uIEZh
YmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IGh0dHBzOi8vdzNj
LmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjbGllbnRzLWdldGFsbApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
Q2hhbmdlTG9nCmluZGV4IDhmOGQ1OWM3ZDFhOGMzOWYyZDI4Y2VlZWJkYTg0MTYwNTg5NzkwNGEu
LjViMWUwMGE2YTk1MjYxY2ZkYWY4NmI1NDdmMzYwZjBjOTkwYjg5NWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxNy0xMi0wMiAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW9kZXJuaXplIHNvbWUgYXNwZWN0cyBvZiB0
ZXh0IGNvZGVjcywgZWxpbWluYXRlIFdlYktpdCB1c2Ugb2Ygc3RyY2FzZWNtcAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMDA5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBIaXN0b3J5L0hpc3RvcnlQ
cm9wZXJ0eUxpc3QubW06IFJlbW92ZWQgaW5jbHVkZSBvZiBTdHJpbmdFeHRyYXMuaC4KKworICAg
ICAgICAqIFBsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5tbToKKyAgICAgICAgKFdl
YktpdDo6Z2V0QXV0aGVudGljYXRpb25JbmZvKTogVXNlIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlIGluc3RlYWQKKyAgICAgICAgb2Ygc3RyY2FzZWNtcC4KKworICAgICAgICAqIFdlYlZp
ZXcvV2ViUHJlZmVyZW5jZXMubW06CisgICAgICAgIChjb250YWlucyk6IERpdHRvLiBBbHNvIG1h
ZGUgdGhpcyBhIHRlbXBsYXRlIHNvIGl0J3MgZWFzaWVyIHRvIGNhbGwgb24gYW4gYXJyYXkuCisg
ICAgICAgIChjYWNoZU1vZGVsRm9yTWFpbkJ1bmRsZSk6IFRha2UgYWR2YW50YWdlIG9mIHRoZSBh
Ym92ZSB0byBtYWtlIGl0IGNsZWFuZXIuCisKIDIwMTctMTEtMzAgIFN0ZXBoYW4gU3phYm8gIDxz
dGVwaGFuLnN6YWJvQHNvbnkuY29tPgogCiAgICAgICAgIE1ha2UgTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyIG9wdGlvbmFsIGZvciBuZXR3b3JrIHByb2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5jcHAKaW5kZXggMzE0NmIxOGY4ZDUyYmJm
YjUyZjQ5MTNiZDE4ZGJkOWRjZGVhYzBjMS4uY2IxYjc1ODViMjJlYzMxNDcxZjg0YzJmMTU2N2Q2
ODU4YjE2ODQ4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fy
cmF5UHJvZmlsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5
UHJvZmlsZS5jcHAKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgotI2lu
Y2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJl
YW0uaD4KIAogbmFtZXNwYWNlIEpTQyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCmluZGV4IDFmYjNlMTQzZTk1MTc3M2RjNjE1MzU0YzllNmZjMmFhNWZh
ODNmZWUuLjA2ZmMxOTQ0N2Q0MGI4ZGY4ODQ1MjEwNTQ1NzU2YTU1YTdkN2RjMTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC04Myw3ICs4Myw2
IEBACiAjaW5jbHVkZSA8d3RmL0JhZ1RvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Db21tYVBy
aW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMuaD4KLSNpbmNsdWRlIDx3dGYvU3Ry
aW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvVW5pcXVlZFN0cmluZ0ltcGwuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCmluZGV4IDIzN2MwZTc1MjI1
ODJkZDNlNDdiYTBjN2Q4MWNiY2IyNmRiZGVjNTEuLmZiYWQ3ODdjZjQ4ZTgwY2M4MzUwZDJiN2Ux
YzRkYWE4NTU0ZjI5MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FeGVjdXRpb25Db3VudGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhlY3V0aW9uQ291bnRlci5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJFeGVj
dXRhYmxlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlZN
SW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KIAogbmFtZXNwYWNlIEpT
QyB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmZpZ0Zp
bGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uZmlnRmlsZS5jcHAKaW5k
ZXggYjYxYTEzMWM3NmU2YjdmMjhiODM3ZGI2NTdkOTUyNWFkMzY3NmUzNi4uMWIxNmMyZTc1Zjhh
NGYxNDUzZjAyYzU0MDQzMGJhNzk0NDkxMzQ5OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29uZmlnRmlsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29uZmlnRmlsZS5jcHAKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxzdHJp
bmcuaD4KICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9n
Lmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KIAogI2lmIEhBVkUoUkVHRVhfSCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAKaW5kZXggYjMwZjhlZWVkNWFmMTg1YzFk
MTUzYTdkMDI2OTgwY2U2YjI4Y2ZjZS4uNWFiMDA3ZmMxN2Y2NGU5Y2JkMjhjMTliNWZkNzM5NmVh
Y2Y5ZDJkMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVBy
b3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3Rv
dHlwZS5jcHAKQEAgLTQyLDcgKzQyLDYgQEAKICNpbmNsdWRlIDx0aW1lLmg+CiAjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUg
PHd0Zi9TdHJpbmdFeHRyYXMuaD4KIAogI2lmIEhBVkUoTEFOR0lORk9fSCkKICNpbmNsdWRlIDxs
YW5naW5mby5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5k
ZXhpbmdUeXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlw
ZS5jcHAKaW5kZXggZjdkNTQ3NTRkNTkzZWEyMjhhNzEwZGVmMjUyMjA3ZTM0ZmM1M2NhMS4uOGI1
YWIzYzViYzgwZjgzMmZhMGRhNjQ3ZWFiYTc1NDVlMmExNzRkNCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuY3BwCkBAIC0yNiw4ICsyNiw2IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCiAKLSNpbmNsdWRl
IDx3dGYvU3RyaW5nRXh0cmFzLmg+Ci0KIG5hbWVzcGFjZSBKU0MgewogCiBJbmRleGluZ1R5cGUg
bGVhc3RVcHBlckJvdW5kT2ZJbmRleGluZ1R5cGVzKEluZGV4aW5nVHlwZSBhLCBJbmRleGluZ1R5
cGUgYikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFs
dWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKaW5k
ZXggZDAzMDQ1MjIwZDVlOTUyNjdlZDlmOGY3YjlkMzM2NWE4MzE3OWRkMy4uYmFmNGRmZDJiODc5
NGQyYjc1MmJkMmViNTBkNDIyOTExZTI4YWVkYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJKU0ds
b2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIk51bWJlck9iamVjdC5oIgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRl
TWF0aC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGVNYXRoLmNwcApp
bmRleCA3ZTZkZjQ1N2E3ZDEzODQ5NDMwMGU5ZDk2ZTEyOTIzMGNhM2FkM2JkLi42YzA0ZTNjZDg2
NjBjNGU4ZTE2ODMyMDBjZGIyNWY2YTQ3NjYwNzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0RhdGVNYXRoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0RhdGVNYXRoLmNwcApAQCAtODYsNyArODYsNiBAQAogI2luY2x1ZGUgPHd0
Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KIAogI2lm
IEhBVkUoRVJSTk9fSCkKICNpbmNsdWRlIDxlcnJuby5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCmluZGV4
IDJkNDk4MmQ4M2ZjMGRkMzc0OTc3ZWViN2NlM2FlOGYzMTc1ZWUwM2MuLmY0NTdkY2E0NjhlYzk1
N2E4NDNkOGY4MWU4NzI3Y2Q4MTQ4ZTk5ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKQEAgLTUzLDcg
KzUzLDYgQEAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9IZXhO
dW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJp
bmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvZHRvYS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9VVEY4Lmg+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCmluZGV4IGFlOTc3YjYyMzE5NzJjZTFkMDM5
OWU2ZTk4MDQ0NGVlOTI3ZTFlZDMuLjdjOTcyMWIyMDQ1Njg4Nzc1YWIxNzRiOGQ0MTEwYTgyNGE5
ZDk3MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCkBAIC00
Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYvTnVt
YmVyT2ZDb3Jlcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3
dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgog
I2luY2x1ZGUgPHd0Zi90aHJlYWRzL1NpZ25hbHMuaD4KIApAQCAtNzEsMTEgKzcwLDExIEBAIHZv
aWQgT3B0aW9uczo6ZW5hYmxlUmVzdHJpY3RlZE9wdGlvbnMoYm9vbCBlbmFibGVPck5vdCkKICAg
ICAKIHN0YXRpYyBib29sIHBhcnNlKGNvbnN0IGNoYXIqIHN0cmluZywgYm9vbCYgdmFsdWUpCiB7
Ci0gICAgaWYgKCFzdHJjYXNlY21wKHN0cmluZywgInRydWUiKSB8fCAhc3RyY2FzZWNtcChzdHJp
bmcsICJ5ZXMiKSB8fCAhc3RyY21wKHN0cmluZywgIjEiKSkgeworICAgIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcsICJ0cnVlIikgfHwgZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2Uoc3RyaW5nLCAieWVzIikgfHwgIXN0cmNtcChzdHJpbmcsICIxIikpIHsKICAg
ICAgICAgdmFsdWUgPSB0cnVlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgaWYg
KCFzdHJjYXNlY21wKHN0cmluZywgImZhbHNlIikgfHwgIXN0cmNhc2VjbXAoc3RyaW5nLCAibm8i
KSB8fCAhc3RyY21wKHN0cmluZywgIjAiKSkgeworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShzdHJpbmcsICJmYWxzZSIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKHN0cmluZywgIm5vIikgfHwgIXN0cmNtcChzdHJpbmcsICIwIikpIHsKICAgICAgICAgdmFs
dWUgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTI3LDE3ICsxMjYs
MTcgQEAgc3RhdGljIGJvb2wgcGFyc2UoY29uc3QgY2hhciogc3RyaW5nLCBjb25zdCBjaGFyKiYg
dmFsdWUpCiAKIHN0YXRpYyBib29sIHBhcnNlKGNvbnN0IGNoYXIqIHN0cmluZywgR0NMb2dnaW5n
OjpMZXZlbCYgdmFsdWUpCiB7Ci0gICAgaWYgKCFzdHJjYXNlY21wKHN0cmluZywgIm5vbmUiKSB8
fCAhc3RyY2FzZWNtcChzdHJpbmcsICJubyIpIHx8ICFzdHJjYXNlY21wKHN0cmluZywgImZhbHNl
IikgfHwgIXN0cmNtcChzdHJpbmcsICIwIikpIHsKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2Uoc3RyaW5nLCAibm9uZSIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKHN0cmluZywgIm5vIikgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5n
LCAiZmFsc2UiKSB8fCAhc3RyY21wKHN0cmluZywgIjAiKSkgewogICAgICAgICB2YWx1ZSA9IEdD
TG9nZ2luZzo6Tm9uZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKCFz
dHJjYXNlY21wKHN0cmluZywgImJhc2ljIikgfHwgIXN0cmNhc2VjbXAoc3RyaW5nLCAieWVzIikg
fHwgIXN0cmNhc2VjbXAoc3RyaW5nLCAidHJ1ZSIpIHx8ICFzdHJjbXAoc3RyaW5nLCAiMSIpKSB7
CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmluZywgImJhc2ljIikg
fHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLCAieWVzIikgfHwgZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLCAidHJ1ZSIpIHx8ICFzdHJjbXAoc3RyaW5n
LCAiMSIpKSB7CiAgICAgICAgIHZhbHVlID0gR0NMb2dnaW5nOjpCYXNpYzsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKCFzdHJjYXNlY21wKHN0cmluZywgInZlcmJvc2Ui
KSB8fCAhc3RyY21wKHN0cmluZywgIjIiKSkgeworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShzdHJpbmcsICJ2ZXJib3NlIikgfHwgIXN0cmNtcChzdHJpbmcsICIyIikpIHsK
ICAgICAgICAgdmFsdWUgPSBHQ0xvZ2dpbmc6OlZlcmJvc2U7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwIGIvU291
cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5jcHAKaW5kZXggNGM4MGM2YjkzODZiMjBlZTczMTcyYWUx
M2E0N2RjOWZiOTNjNTkzMi4uMTU4Y2JlZjc2MTIzZDkzZDdmNDFmMmJmZjIwMTY1NmUyOThlOGEw
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5jcHAKKysrIGIvU291cmNl
L1dURi93dGYvQXNzZXJ0aW9ucy5jcHAKQEAgLTQ1LDcgKzQ1LDYgQEAKICNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1N0YWNrVHJhY2UuaD4KICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC01MjQsNyArNTIzLDcgQEAgV1RG
TG9nQ2hhbm5lbCogV1RGTG9nQ2hhbm5lbEJ5TmFtZShXVEZMb2dDaGFubmVsKiBjaGFubmVsc1td
LCBzaXplX3QgY291bnQsIGNvbnMKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50
OyArK2kpIHsKICAgICAgICAgV1RGTG9nQ2hhbm5lbCogY2hhbm5lbCA9IGNoYW5uZWxzW2ldOwot
ICAgICAgICBpZiAoIXN0cmNhc2VjbXAobmFtZSwgY2hhbm5lbC0+bmFtZSkpCisgICAgICAgIGlm
IChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIGNoYW5uZWwtPm5hbWUpKQogICAgICAgICAg
ICAgcmV0dXJuIGNoYW5uZWw7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9E
YXRlTWF0aC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9EYXRlTWF0aC5jcHAKaW5kZXggNTdlMjRkZGY0
ZWQ4MzI3M2IwYmI2NGUwMDJhMDQxYWExY2VhYWU2NS4uNjQyMGI1ZDhhMDcwODc0ODg0ODZjMGNj
OWIxYWNmMTE5MTg1OGUxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvRGF0ZU1hdGguY3Bw
CisrKyBiL1NvdXJjZS9XVEYvd3RmL0RhdGVNYXRoLmNwcApAQCAtNzcsNyArNzcsNiBAQAogI2lu
Y2x1ZGUgIkN1cnJlbnRUaW1lLmgiCiAjaW5jbHVkZSAiTWF0aEV4dHJhcy5oIgogI2luY2x1ZGUg
IlN0ZExpYkV4dHJhcy5oIgotI2luY2x1ZGUgIlN0cmluZ0V4dHJhcy5oIgogCiAjaW5jbHVkZSA8
YWxnb3JpdGhtPgogI2luY2x1ZGUgPGxpbWl0cy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvTUQ1LmNwcCBiL1NvdXJjZS9XVEYvd3RmL01ENS5jcHAKaW5kZXggNTUwODBmMjE1Y2MzZDhh
Y2M3ZWQ3ZTZhZmM1MDk1ZDMzN2EwYzlkNy4uYjY2ZGExODkyYjBjM2MxODVkNmZkODYxNTBkNDc4
YjA2MGQzZjE1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTUQ1LmNwcAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9NRDUuY3BwCkBAIC01MSwxMCArNTEsNiBAQAogI2luY2x1ZGUgIk1ENS5oIgog
CiAjaW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgotI2lmbmRlZiBOREVCVUcKLSNpbmNsdWRlICJTdHJp
bmdFeHRyYXMuaCIKLSNpbmNsdWRlICJ0ZXh0L0NTdHJpbmcuaCIKLSNlbmRpZgogI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdURiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9TSEExLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1NIQTEuY3BwCmluZGV4IDJmODRh
MWU5NTM4Yjg0NGQ5MzIxMzZiY2VmZTcyNDI2YzEwZWNhNGQuLjgxZWE0MmMzMGJkOTFmMzYyMGM1
YTBiNzljYjM5ZGU4ZTlkNTUxOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1NIQTEuY3Bw
CisrKyBiL1NvdXJjZS9XVEYvd3RmL1NIQTEuY3BwCkBAIC0zMyw4ICszMyw2IEBACiAjaW5jbHVk
ZSAiU0hBMS5oIgogCiAjaW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgotCi0jaW5jbHVkZSAiU3RyaW5n
RXh0cmFzLmgiCiAjaW5jbHVkZSAidGV4dC9DU3RyaW5nLmgiCiAKIG5hbWVzcGFjZSBXVEYgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU3RyaW5nRXh0cmFzLmggYi9Tb3VyY2UvV1RGL3d0
Zi9TdHJpbmdFeHRyYXMuaAppbmRleCA2Nzk3ZDJjZTExYWQxYjhhNTRhODc5N2UwMTQyZWEzOTM2
MDk3MDFkLi5hZjA1ZDJjZDEyOGY5NTEzYjg2MWEwMDBiNzQ2MTcwNDQ5NjRmY2NkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9TdHJpbmdFeHRyYXMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9T
dHJpbmdFeHRyYXMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDE1IEVsZWN0cm9uaWMgQXJ0cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtMjQsMzMgKzI0LDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0j
aWZuZGVmIFdURl9TdHJpbmdFeHRyYXNfaAotI2RlZmluZSBXVEZfU3RyaW5nRXh0cmFzX2gKKyNw
cmFnbWEgb25jZQogCi0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KICNp
bmNsdWRlIDxzdHJpbmcuaD4KIAotI2lmIEhBVkUoU1RSSU5HU19IKSAKLSNpbmNsdWRlIDxzdHJp
bmdzLmg+IAotI2VuZGlmIAotCi0jaWYgQ09NUElMRVIoTVNWQykKLQotLy8gRklYTUU6IFdlIHNo
b3VsZCBzdG9wIHVzaW5nIHRoZXNlIGVudGlyZWx5IGFuZCB1c2Ugc3VpdGFibGUgdmVyc2lvbnMg
b2YgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSBpbnN0ZWFkLgotCi1pbmxpbmUgaW50IHN0cm5jYXNl
Y21wKGNvbnN0IGNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMiwgc2l6ZV90IGxlbikKLXsKLSAgICBy
ZXR1cm4gX3N0cm5pY21wKHMxLCBzMiwgbGVuKTsKLX0KLQotaW5saW5lIGludCBzdHJjYXNlY21w
KGNvbnN0IGNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMikKLXsKLSAgICByZXR1cm4gX3N0cmljbXAo
czEsIHMyKTsKLX0KLQotI2VuZGlmCi0KICNpZiAhSEFWRShTVFJOU1RSKQogCiBpbmxpbmUgY2hh
ciogc3RybnN0cihjb25zdCBjaGFyKiBidWZmZXIsIGNvbnN0IGNoYXIqIHRhcmdldCwgc2l6ZV90
IGJ1ZmZlckxlbmd0aCkKQEAgLTY2LDUgKzQzLDMgQEAgaW5saW5lIGNoYXIqIHN0cm5zdHIoY29u
c3QgY2hhciogYnVmZmVyLCBjb25zdCBjaGFyKiB0YXJnZXQsIHNpemVfdCBidWZmZXJMZW5ndGgK
IH0KIAogI2VuZGlmCi0KLSNlbmRpZiAvLyBXVEZfU3RyaW5nRXh0cmFzX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1N0cmluZ1ByaW50U3RyZWFtLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1N0
cmluZ1ByaW50U3RyZWFtLmNwcAppbmRleCA2YTg4ODFjNWJiZDBiYjNhMTkxYTY0Mjk2ODY5Mzk1
ZmRjZjEzMDVjLi4zM2ZkNWFiYmJlNThkODUzOTgyYjMyZTdhNWU4YTFhNjVmNjkxNzFjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9TdHJpbmdQcmludFN0cmVhbS5jcHAKKysrIGIvU291cmNl
L1dURi93dGYvU3RyaW5nUHJpbnRTdHJlYW0uY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVk
ZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmNwcCBiL1NvdXJjZS9XVEYv
d3RmL3RleHQvQmFzZTY0LmNwcAppbmRleCAyYWU1ZGUyMjJjZDZjMzk0MWNlNzU2YmI3M2RjYjFh
ZGIwY2IxZjQ1Li44MDRmZTFmNDEyOTRhOWIxMzI3MTU1OTkzN2RiMDllYTZmZDAzODdkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAKKysrIGIvU291cmNlL1dURi93
dGYvdGV4dC9CYXNlNjQuY3BwCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSAiQmFzZTY0Lmgi
CiAKICNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9MaW5lRW5kaW5nLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L3RleHQvTGluZUVuZGluZy5jcHAKaW5kZXggZTgxOWFlZjU0OWUwMWFjYTE4ODQyZTI2ZGQ0YjU3
Yzk2MzcxM2M2NC4uYTM2MzcxYmI2ZDY2ZmZjMDg2ZjExZTE1YjQ0ZmUyYTcwNWY3NWRiZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9MaW5lRW5kaW5nLmNwcAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L0xpbmVFbmRpbmcuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOCwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMyLDE5NSArMzIsODAgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJMaW5lRW5kaW5nLmgiCiAKLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCi1uYW1lc3BhY2UgewotCi1jbGFzcyBPdXRwdXRCdWZmZXIgewotcHVi
bGljOgotICAgIHZpcnR1YWwgdWludDhfdCogYWxsb2NhdGUoc2l6ZV90KSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGNvcHkoY29uc3QgQ1N0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIH5PdXRwdXRC
dWZmZXIoKSB7IH0KLX07Ci0KLWNsYXNzIENTdHJpbmdCdWZmZXIgOiBwdWJsaWMgT3V0cHV0QnVm
ZmVyIHsKLXB1YmxpYzoKLSAgICBDU3RyaW5nQnVmZmVyKENTdHJpbmcmIGJ1ZmZlcikKLSAgICAg
ICAgOiBtX2J1ZmZlcihidWZmZXIpCi0gICAgewotICAgIH0KLSAgICB2aXJ0dWFsIH5DU3RyaW5n
QnVmZmVyKCkgeyB9Ci0KLSAgICB1aW50OF90KiBhbGxvY2F0ZShzaXplX3Qgc2l6ZSkgb3ZlcnJp
ZGUKLSAgICB7Ci0gICAgICAgIGNoYXIqIHB0cjsKLSAgICAgICAgbV9idWZmZXIgPSBDU3RyaW5n
OjpuZXdVbmluaXRpYWxpemVkKHNpemUsIHB0cik7Ci0gICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPihwdHIpOwotICAgIH0KLQotICAgIHZvaWQgY29weShjb25zdCBDU3Ry
aW5nJiBzb3VyY2UpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBtX2J1ZmZlciA9IHNvdXJjZTsK
LSAgICB9Ci0KLSAgICBjb25zdCBDU3RyaW5nJiBidWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1
ZmZlcjsgfQotCi1wcml2YXRlOgotICAgIENTdHJpbmcgbV9idWZmZXI7Ci19OwotCi0jaWYgT1Mo
V0lORE9XUykKLWNsYXNzIFZlY3RvckNoYXJBcHBlbmRCdWZmZXIgOiBwdWJsaWMgT3V0cHV0QnVm
ZmVyIHsKLXB1YmxpYzoKLSAgICBWZWN0b3JDaGFyQXBwZW5kQnVmZmVyKFZlY3Rvcjx1aW50OF90
PiYgYnVmZmVyKQotICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKLSAgICB7Ci0gICAgfQotICAg
IHZpcnR1YWwgflZlY3RvckNoYXJBcHBlbmRCdWZmZXIoKSB7IH0KLQotICAgIHVpbnQ4X3QqIGFs
bG9jYXRlKHNpemVfdCBzaXplKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgc2l6ZV90IG9sZFNp
emUgPSBtX2J1ZmZlci5zaXplKCk7Ci0gICAgICAgIG1fYnVmZmVyLmdyb3cob2xkU2l6ZSArIHNp
emUpOwotICAgICAgICByZXR1cm4gbV9idWZmZXIuZGF0YSgpICsgb2xkU2l6ZTsKLSAgICB9Ci0K
LSAgICB2b2lkIGNvcHkoY29uc3QgQ1N0cmluZyYgc291cmNlKSBvdmVycmlkZQotICAgIHsKLSAg
ICAgICAgbV9idWZmZXIuYXBwZW5kKHNvdXJjZS5kYXRhKCksIHNvdXJjZS5sZW5ndGgoKSk7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIFZlY3Rvcjx1aW50OF90PiYgbV9idWZmZXI7Ci19OwotI2Vu
ZGlmCituYW1lc3BhY2UgV1RGIHsKIAotdm9pZCBpbnRlcm5hbE5vcm1hbGl6ZUxpbmVFbmRpbmdz
VG9DUkxGKGNvbnN0IENTdHJpbmcmIGZyb20sIE91dHB1dEJ1ZmZlciYgYnVmZmVyKQorVmVjdG9y
PHVpbnQ4X3Q+IG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9MRihWZWN0b3I8dWludDhfdD4mJiB2ZWN0
b3IpCiB7Ci0gICAgaWYgKCFmcm9tLmxlbmd0aCgpKQotICAgICAgICByZXR1cm47Ci0gICAgLy8g
Q29tcHV0ZSB0aGUgbmV3IGxlbmd0aC4KLSAgICBzaXplX3QgbmV3TGVuID0gMDsKLSAgICBjb25z
dCBjaGFyKiBwID0gZnJvbS5kYXRhKCk7Ci0gICAgd2hpbGUgKHAgPCBmcm9tLmRhdGEoKSArIGZy
b20ubGVuZ3RoKCkpIHsKLSAgICAgICAgY2hhciBjID0gKnArKzsKLSAgICAgICAgaWYgKGMgPT0g
J1xyJykgewotICAgICAgICAgICAgLy8gU2FmZSB0byBsb29rIGFoZWFkIGJlY2F1c2Ugb2YgdHJh
aWxpbmcgJ1wwJy4KLSAgICAgICAgICAgIGlmICgqcCAhPSAnXG4nKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gVHVybiBDUiBpbnRvIENSTEYuCi0gICAgICAgICAgICAgICAgbmV3TGVuICs9IDI7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnXG4nKSB7Ci0gICAgICAgICAg
ICAvLyBUdXJuIExGIGludG8gQ1JMRi4KLSAgICAgICAgICAgIG5ld0xlbiArPSAyOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgLy8gTGVhdmUgb3RoZXIgY2hhcmFjdGVycyBhbG9uZS4K
LSAgICAgICAgICAgIG5ld0xlbiArPSAxOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChuZXdM
ZW4gPCBmcm9tLmxlbmd0aCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobmV3TGVuID09
IGZyb20ubGVuZ3RoKCkpIHsKLSAgICAgICAgYnVmZmVyLmNvcHkoZnJvbSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBwID0gZnJvbS5kYXRhKCk7Ci0gICAgdWludDhfdCogcSA9IGJ1
ZmZlci5hbGxvY2F0ZShuZXdMZW4pOwotCi0gICAgLy8gTWFrZSBhIGNvcHkgb2YgdGhlIHN0cmlu
Zy4KLSAgICB3aGlsZSAocCA8IGZyb20uZGF0YSgpICsgZnJvbS5sZW5ndGgoKSkgewotICAgICAg
ICBjaGFyIGMgPSAqcCsrOwotICAgICAgICBpZiAoYyA9PSAnXHInKSB7Ci0gICAgICAgICAgICAv
LyBTYWZlIHRvIGxvb2sgYWhlYWQgYmVjYXVzZSBvZiB0cmFpbGluZyAnXDAnLgotICAgICAgICAg
ICAgaWYgKCpwICE9ICdcbicpIHsKLSAgICAgICAgICAgICAgICAvLyBUdXJuIENSIGludG8gQ1JM
Ri4KLSAgICAgICAgICAgICAgICAqcSsrID0gJ1xyJzsKLSAgICAgICAgICAgICAgICAqcSsrID0g
J1xuJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChjID09ICdcbicpIHsKLSAg
ICAgICAgICAgIC8vIFR1cm4gTEYgaW50byBDUkxGLgotICAgICAgICAgICAgKnErKyA9ICdccic7
CisgICAgYXV0byBxID0gdmVjdG9yLmRhdGEoKTsKKyAgICBmb3IgKGF1dG8gcCA9IHZlY3Rvci5k
YXRhKCksIGVuZCA9IHAgKyB2ZWN0b3Iuc2l6ZSgpOyBwICE9IGVuZDsgKSB7CisgICAgICAgIGF1
dG8gY2hhcmFjdGVyID0gKnArKzsKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnXHInKSB7Cisg
ICAgICAgICAgICAvLyBUdXJuIENSTEYgYW5kIENSIGludG8gTEYuCisgICAgICAgICAgICBpZiAo
cCAhPSBlbmQgJiYgKnAgPT0gJ1xuJykKKyAgICAgICAgICAgICAgICArK3A7CiAgICAgICAgICAg
ICAqcSsrID0gJ1xuJzsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIExlYXZlIG90
aGVyIGNoYXJhY3RlcnMgYWxvbmUuCi0gICAgICAgICAgICAqcSsrID0gYzsKKyAgICAgICAgICAg
ICpxKysgPSBjaGFyYWN0ZXI7CiAgICAgICAgIH0KICAgICB9CisgICAgdmVjdG9yLnNocmluayhx
IC0gdmVjdG9yLmRhdGEoKSk7CisgICAgcmV0dXJuIFdURk1vdmUodmVjdG9yKTsKIH0KIAotfTsK
LQotbmFtZXNwYWNlIFdURiB7Ci0KLS8vIE5vcm1hbGl6ZSBhbGwgbGluZS1lbmRpbmdzIHRvIENS
IG9yIExGLgotc3RhdGljIHZvaWQgbm9ybWFsaXplVG9DUk9yTEYoY29uc3QgQ1N0cmluZyYgZnJv
bSwgVmVjdG9yPHVpbnQ4X3Q+JiByZXN1bHQsIGJvb2wgdG9DUikKK1ZlY3Rvcjx1aW50OF90PiBu
b3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JMRihWZWN0b3I8dWludDhfdD4mJiBzb3VyY2UpCiB7Ci0g
ICAgLy8gQ29tcHV0ZSB0aGUgbmV3IGxlbmd0aC4KLSAgICBzaXplX3QgbmV3TGVuID0gMDsKLSAg
ICBib29sIG5lZWRGaXggPSBmYWxzZTsKLSAgICBjb25zdCBjaGFyKiBwID0gZnJvbS5kYXRhKCk7
Ci0gICAgY2hhciBmcm9tRW5kaW5nQ2hhciA9IHRvQ1IgPyAnXG4nIDogJ1xyJzsKLSAgICBjaGFy
IHRvRW5kaW5nQ2hhciA9IHRvQ1IgPyAnXHInIDogJ1xuJzsKLSAgICB3aGlsZSAocCA8IGZyb20u
ZGF0YSgpICsgZnJvbS5sZW5ndGgoKSkgewotICAgICAgICBjaGFyIGMgPSAqcCsrOwotICAgICAg
ICBpZiAoYyA9PSAnXHInICYmICpwID09ICdcbicpIHsKLSAgICAgICAgICAgIC8vIFR1cm4gQ1JM
RiBpbnRvIENSIG9yIExGLgotICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgbmVlZEZpeCA9
IHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoYyA9PSBmcm9tRW5kaW5nQ2hhcikgewotICAgICAg
ICAgICAgLy8gVHVybiBDUi9MRiBpbnRvIExGL0NSLgotICAgICAgICAgICAgbmVlZEZpeCA9IHRy
dWU7CisgICAgc2l6ZV90IHJlc3VsdExlbmd0aCA9IDA7CisgICAgZm9yIChhdXRvIHAgPSBzb3Vy
Y2UuZGF0YSgpLCBlbmQgPSBwICsgc291cmNlLnNpemUoKTsgcCAhPSBlbmQ7ICkgeworICAgICAg
ICBhdXRvIGNoYXJhY3RlciA9ICpwKys7CisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJ1xyJykg
eworICAgICAgICAgICAgLy8gVHVybiBDUiBvciBDUkxGIGludG8gQ1JMRjsKKyAgICAgICAgICAg
IGlmIChwICE9IGVuZCAmJiAqcCA9PSAnXG4nKQorICAgICAgICAgICAgICAgICsrcDsKKyAgICAg
ICAgICAgIHJlc3VsdExlbmd0aCArPSAyOworICAgICAgICB9IGVsc2UgaWYgKGNoYXJhY3RlciA9
PSAnXG4nKSB7CisgICAgICAgICAgICAvLyBUdXJuIExGIGludG8gQ1JMRi4KKyAgICAgICAgICAg
IHJlc3VsdExlbmd0aCArPSAyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTGVh
dmUgb3RoZXIgY2hhcmFjdGVycyBhbG9uZS4KKyAgICAgICAgICAgIHJlc3VsdExlbmd0aCArPSAx
OwogICAgICAgICB9Ci0gICAgICAgIG5ld0xlbiArPSAxOwogICAgIH0KIAotICAgIC8vIEdyb3cg
dGhlIHJlc3VsdCBidWZmZXIuCi0gICAgcCA9IGZyb20uZGF0YSgpOwotICAgIHNpemVfdCBvbGRS
ZXN1bHRTaXplID0gcmVzdWx0LnNpemUoKTsKLSAgICByZXN1bHQuZ3JvdyhvbGRSZXN1bHRTaXpl
ICsgbmV3TGVuKTsKLSAgICB1aW50OF90KiBxID0gcmVzdWx0LmRhdGEoKSArIG9sZFJlc3VsdFNp
emU7Ci0KLSAgICAvLyBJZiBubyBuZWVkIHRvIGZpeCB0aGUgc3RyaW5nLCBqdXN0IGNvcHkgdGhl
IHN0cmluZyBvdmVyLgotICAgIGlmICghbmVlZEZpeCkgewotICAgICAgICBtZW1jcHkocSwgcCwg
ZnJvbS5sZW5ndGgoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIGEg
Y29weSBvZiB0aGUgc3RyaW5nLgotICAgIHdoaWxlIChwIDwgZnJvbS5kYXRhKCkgKyBmcm9tLmxl
bmd0aCgpKSB7Ci0gICAgICAgIGNoYXIgYyA9ICpwKys7Ci0gICAgICAgIGlmIChjID09ICdccicg
JiYgKnAgPT0gJ1xuJykgewotICAgICAgICAgICAgLy8gVHVybiBDUkxGIG9yIENSIGludG8gQ1Ig
b3IgTEYuCi0gICAgICAgICAgICBwKys7Ci0gICAgICAgICAgICAqcSsrID0gdG9FbmRpbmdDaGFy
OwotICAgICAgICB9IGVsc2UgaWYgKGMgPT0gZnJvbUVuZGluZ0NoYXIpIHsKLSAgICAgICAgICAg
IC8vIFR1cm4gQ1IvTEYgaW50byBMRi9DUi4KLSAgICAgICAgICAgICpxKysgPSB0b0VuZGluZ0No
YXI7CisgICAgaWYgKHJlc3VsdExlbmd0aCA9PSBzb3VyY2Uuc2l6ZSgpKQorICAgICAgICByZXR1
cm4gV1RGTW92ZShzb3VyY2UpOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdChyZXN1bHRM
ZW5ndGgpOworICAgIGF1dG8gcSA9IHJlc3VsdC5kYXRhKCk7CisgICAgZm9yIChhdXRvIHAgPSBz
b3VyY2UuZGF0YSgpLCBlbmQgPSBwICsgc291cmNlLnNpemUoKTsgcCAhPSBlbmQ7ICkgeworICAg
ICAgICBhdXRvIGNoYXJhY3RlciA9ICpwKys7CisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJ1xy
JykgeworICAgICAgICAgICAgLy8gVHVybiBDUiBvciBDUkxGIGludG8gQ1JMRjsKKyAgICAgICAg
ICAgIGlmIChwICE9IGVuZCAmJiAqcCA9PSAnXG4nKQorICAgICAgICAgICAgICAgICsrcDsKKyAg
ICAgICAgICAgICpxKysgPSAnXHInOworICAgICAgICAgICAgKnErKyA9ICdcbic7CisgICAgICAg
IH0gZWxzZSBpZiAoY2hhcmFjdGVyID09ICdcbicpIHsKKyAgICAgICAgICAgIC8vIFR1cm4gTEYg
aW50byBDUkxGLgorICAgICAgICAgICAgKnErKyA9ICdccic7CisgICAgICAgICAgICAqcSsrID0g
J1xuJzsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIExlYXZlIG90aGVyIGNoYXJh
Y3RlcnMgYWxvbmUuCi0gICAgICAgICAgICAqcSsrID0gYzsKKyAgICAgICAgICAgICpxKysgPSBj
aGFyYWN0ZXI7CiAgICAgICAgIH0KICAgICB9CisgICAgQVNTRVJUKHEgPT0gcmVzdWx0LmRhdGEo
KSArIHJlc3VsdExlbmd0aCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotQ1N0cmluZyBub3Jt
YWxpemVMaW5lRW5kaW5nc1RvQ1JMRihjb25zdCBDU3RyaW5nJiBmcm9tKQotewotICAgIENTdHJp
bmcgcmVzdWx0OwotICAgIDo6Q1N0cmluZ0J1ZmZlciBidWZmZXIocmVzdWx0KTsKLSAgICBpbnRl
cm5hbE5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9DUkxGKGZyb20sIGJ1ZmZlcik7Ci0gICAgcmV0dXJu
IGJ1ZmZlci5idWZmZXIoKTsKLX0KLQotdm9pZCBub3JtYWxpemVBbmRBcHBlbmRMaW5lRW5kaW5n
c1RvTmF0aXZlKGNvbnN0IENTdHJpbmcmIGZyb20sIFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0KQor
VmVjdG9yPHVpbnQ4X3Q+IG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9OYXRpdmUoVmVjdG9yPHVpbnQ4
X3Q+JiYgZnJvbSkKIHsKICNpZiBPUyhXSU5ET1dTKQotICAgIFZlY3RvckNoYXJBcHBlbmRCdWZm
ZXIgYnVmZmVyKHJlc3VsdCk7Ci0gICAgaW50ZXJuYWxOb3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JM
Rihmcm9tLCBidWZmZXIpOworICAgIHJldHVybiBub3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JMRihX
VEZNb3ZlKGZyb20pKTsKICNlbHNlCi0gICAgbm9ybWFsaXplVG9DUk9yTEYoZnJvbSwgcmVzdWx0
LCBmYWxzZSk7CisgICAgcmV0dXJuIG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9MRihXVEZNb3ZlKGZy
b20pKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0xpbmVF
bmRpbmcuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvTGluZUVuZGluZy5oCmluZGV4IDUxYWYwNDUy
MTM5NGI0MzdhYzZkMzNjNzZmNzRiNDYzMTE1YWFlMTkuLjg3MDBhMTM3MmFiOGI0ZmRhNzEwNmNm
OThlYzYxM2ZjOTE5OGYwMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvTGluZUVu
ZGluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvTGluZUVuZGluZy5oCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOCwgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMyLDE4ICsz
MiwxOCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKLS8vIE5vcm1hbGl6ZSBhbGwg
bGluZS1lbmRpbmdzIGluIHRoZSBnaXZlbiBzdHJpbmcgdG8gQ1JMRi4KLVdURl9FWFBPUlQgQ1N0
cmluZyBub3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JMRihjb25zdCBDU3RyaW5nJiBmcm9tKTsKKy8v
IE5vcm1hbGl6ZSBhbGwgbGluZS1lbmRpbmdzIGluIHRoZSBnaXZlbiBzdHJpbmcuCitXVEZfRVhQ
T1JUIFZlY3Rvcjx1aW50OF90PiBub3JtYWxpemVMaW5lRW5kaW5nc1RvTEYoVmVjdG9yPHVpbnQ4
X3Q+JiYpOworV1RGX0VYUE9SVCBWZWN0b3I8dWludDhfdD4gbm9ybWFsaXplTGluZUVuZGluZ3NU
b0NSTEYoVmVjdG9yPHVpbnQ4X3Q+JiYpOwogCi0vLyBOb3JtYWxpemUgYWxsIGxpbmUtZW5kaW5n
cyBpbiB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHRoZSBuYXRpdmUgbGluZS1lbmRpbmdzIGFuZCBhcHBl
bmQgdGhlIHJlc3VsdCB0byB0aGUgZ2l2ZW4gYnVmZmVyLgotLy8gKE5vcm1hbGl6ZSB0byBDUkxG
IG9uIFdpbmRvd3MgYW5kIG5vcm1hbGl6ZSB0byBMRiBvbiBhbGwgb3RoZXIgcGxhdGZvcm1zLikK
LVdURl9FWFBPUlQgdm9pZCBub3JtYWxpemVBbmRBcHBlbmRMaW5lRW5kaW5nc1RvTmF0aXZlKGNv
bnN0IENTdHJpbmcmIGZyb20sIFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0KTsKKy8vIE5vcm1hbGl6
ZSBhbGwgbGluZS1lbmRpbmdzIHRvIENSTEYgb24gV2luZG93cywgdG8gTEYgb24gYWxsIG90aGVy
IHBsYXRmb3Jtcy4KK1dURl9FWFBPUlQgVmVjdG9yPHVpbnQ4X3Q+IG5vcm1hbGl6ZUxpbmVFbmRp
bmdzVG9OYXRpdmUoVmVjdG9yPHVpbnQ4X3Q+JiYpOwogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAog
dXNpbmcgV1RGOjpub3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JMRjsKLXVzaW5nIFdURjo6bm9ybWFs
aXplQW5kQXBwZW5kTGluZUVuZGluZ3NUb05hdGl2ZTsKK3VzaW5nIFdURjo6bm9ybWFsaXplTGlu
ZUVuZGluZ3NUb0xGOwordXNpbmcgV1RGOjpub3JtYWxpemVMaW5lRW5kaW5nc1RvTmF0aXZlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb21tb24uaCBiL1NvdXJjZS9X
VEYvd3RmL3RleHQvU3RyaW5nQ29tbW9uLmgKaW5kZXggZDJjOGQwNjRlYzQyZGM0NTNlZDIzZmE3
OTQyMzVlZjFkNjAxOGU3NC4uNWE0OWY4YzU1YTI2NjYxNjBhNGZjNzdkMDM3MzljM2U0ZGI4MTQ3
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb21tb24uaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbW1vbi5oCkBAIC00NSw2ICs0NSw5IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHVuc2lnbmVkIGxvd2VyY2FzZUxldHRlcnNMZW5n
dGg+IGJvb2wgZXF1YWxMZXR0CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ0NsYXNzLCB1bnNp
Z25lZCBsZW5ndGg+IGJvb2wgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2VDb21tb24oY29u
c3QgU3RyaW5nQ2xhc3MmLCBjb25zdCBjaGFyICgmbG93ZXJjYXNlTGV0dGVycylbbGVuZ3RoXSk7
CiAKK2Jvb2wgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBjaGFyKiwgY29uc3QgY2hhciop
OwordGVtcGxhdGU8dW5zaWduZWQgbG93ZXJjYXNlTGV0dGVyc0xlbmd0aD4gYm9vbCBlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBjaGFyKiwgY29uc3QgY2hhciAoJmxvd2VyY2Fz
ZUxldHRlcnMpW2xvd2VyY2FzZUxldHRlcnNMZW5ndGhdKTsKKwogdGVtcGxhdGU8dHlwZW5hbWUg
VD4KIGlubGluZSBUIGxvYWRVbmFsaWduZWQoY29uc3QgY2hhciogcykKIHsKQEAgLTY1Miw2ICs2
NTUsMTggQEAgdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nQ2xhc3MsIHVuc2lnbmVkIGxlbmd0aD4g
aW5saW5lIGJvb2wgc3RhcnRzV2l0aExldHRlcnNJZ24KICAgICByZXR1cm4gc3RhcnRzV2l0aExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZUNvbW1vbldpdGhvdXRMZW5ndGgoc3RyaW5nLCBwb2ludGVy
KTsKIH0KIAoraW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBjaGFyKiBh
LCBjb25zdCBjaGFyKiBiKQoreworICAgIGF1dG8gbGVuZ3RoID0gc3RybGVuKGEpOworICAgIHJl
dHVybiBsZW5ndGggPT0gc3RybGVuKGIpICYmIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYSwgYiwg
bGVuZ3RoKTsKK30KKwordGVtcGxhdGU8dW5zaWduZWQgbG93ZXJjYXNlTGV0dGVyc0xlbmd0aD4g
aW5saW5lIGJvb2wgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgY2hhciogc3Ry
aW5nLCBjb25zdCBjaGFyICgmbG93ZXJjYXNlTGV0dGVycylbbG93ZXJjYXNlTGV0dGVyc0xlbmd0
aF0pCit7CisgICAgYXV0byBsZW5ndGggPSBzdHJsZW4obG93ZXJjYXNlTGV0dGVycyk7CisgICAg
cmV0dXJuIHN0cmxlbihzdHJpbmcpID09IGxlbmd0aCAmJiBlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShzdHJpbmcsIGxvd2VyY2FzZUxldHRlcnMsIGxlbmd0aCk7Cit9CisKIH0KIAogdXNp
bmcgV1RGOjplcXVhbElnbm9yaW5nQVNDSUlDYXNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvdGV4dC9UZXh0U3RyZWFtLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvVGV4dFN0cmVhbS5j
cHAKaW5kZXggYzJmMmVmMjc1Njg4ZWM0YmZlZDMzZDNhYTllYmNhOTM1NTZiNTZjMy4uYWFmNjE5
NGFiZmU1OGU1YTM0YTAwZmNkODEwZjlmMzk3NmM4YjI0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvdGV4dC9UZXh0U3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1RleHRT
dHJlYW0uY3BwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogCiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwIGIvU291cmNlL1dURi93
dGYvdGV4dC9XVEZTdHJpbmcuY3BwCmluZGV4IDcwODUyNmFhOWE2ZGY4ODI1ODBlZDE3Yjg4NDE2
ZTNiNzMyZWE0OGMuLjcyNzMzZmVhYTUwZDA3ZjNlNTkxZTI3MWQ1Yzg3OWRlZTBhZDI4YjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9kdG9hLmg+CiAjaW5jbHVkZSA8
d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L3VuaWNvZGUvaWN1L0NvbGxhdG9ySUNVLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvaWN1
L0NvbGxhdG9ySUNVLmNwcAppbmRleCAyNmE0ZDgzODZhYmZmYTkwNWRlMWFlODE4ODdlMzU1YzIy
OTRiNDk5Li5mNWUzMmExYmZmM2Y5N2E5NmMxNTRjMjFkNzY2ZGFhZDQzYjU3ZGU1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL2ljdS9Db2xsYXRvcklDVS5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvdW5pY29kZS9pY3UvQ29sbGF0b3JJQ1UuY3BwCkBAIC0zNiw3ICszNiw2IEBA
CiAjaW5jbHVkZSA8bXV0ZXg+CiAjaW5jbHVkZSA8dW5pY29kZS91Y29sLmg+CiAjaW5jbHVkZSA8
d3RmL0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nVmlldy5oPgogCiAjaWYgT1MoREFSV0lOKSAmJiBVU0UoQ0YpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5jcHAKaW5kZXggZmE5OGRkODBlNGEyNmRl
NGNhMTc3OGYzZjU0MGUyMWJhMzQwN2VhOC4uYTM1YmFhZjFiODU3ZjExYmRkNzA4Mzc4MjI0NjVm
MTlmZmRkYzBhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRj
aEJvZHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmNw
cApAQCAtMTU3LDYgKzE1Nyw3IEBAIHZvaWQgRmV0Y2hCb2R5Ojpjb25zdW1lKEZldGNoQm9keU93
bmVyJiBvd25lciwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQogfQogCiAjaWYgRU5B
QkxFKFNUUkVBTVNfQVBJKQorCiB2b2lkIEZldGNoQm9keTo6Y29uc3VtZUFzU3RyZWFtKEZldGNo
Qm9keU93bmVyJiBvd25lciwgRmV0Y2hCb2R5U291cmNlJiBzb3VyY2UpCiB7CiAgICAgYm9vbCBj
bG9zZVN0cmVhbSA9IGZhbHNlOwpAQCAtMTY3LDEyICsxNjgsMTIgQEAgdm9pZCBGZXRjaEJvZHk6
OmNvbnN1bWVBc1N0cmVhbShGZXRjaEJvZHlPd25lciYgb3duZXIsIEZldGNoQm9keVNvdXJjZSYg
c291cmNlKQogICAgICAgICBjbG9zZVN0cmVhbSA9IHNvdXJjZS5lbnF1ZXVlKEFycmF5QnVmZmVy
Ojp0cnlDcmVhdGUoYXJyYXlCdWZmZXJWaWV3Qm9keSgpLmJhc2VBZGRyZXNzKCksIGFycmF5QnVm
ZmVyVmlld0JvZHkoKS5ieXRlTGVuZ3RoKCkpKTsKICAgICAgICAgbV9kYXRhID0gbnVsbHB0cjsK
ICAgICB9IGVsc2UgaWYgKGlzVGV4dCgpKSB7Ci0gICAgICAgIGF1dG8gZGF0YSA9IFVURjhFbmNv
ZGluZygpLmVuY29kZSh0ZXh0Qm9keSgpLCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7Ci0gICAg
ICAgIGNsb3NlU3RyZWFtID0gc291cmNlLmVucXVldWUoQXJyYXlCdWZmZXI6OnRyeUNyZWF0ZShk
YXRhLmRhdGEoKSwgZGF0YS5sZW5ndGgoKSkpOworICAgICAgICBhdXRvIGRhdGEgPSBVVEY4RW5j
b2RpbmcoKS5lbmNvZGUodGV4dEJvZHkoKSwgVW5lbmNvZGFibGVIYW5kbGluZzo6RW50aXRpZXMp
OworICAgICAgICBjbG9zZVN0cmVhbSA9IHNvdXJjZS5lbnF1ZXVlKEFycmF5QnVmZmVyOjp0cnlD
cmVhdGUoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKSk7CiAgICAgICAgIG1fZGF0YSA9IG51bGxw
dHI7CiAgICAgfSBlbHNlIGlmIChpc1VSTFNlYXJjaFBhcmFtcygpKSB7Ci0gICAgICAgIGF1dG8g
ZGF0YSA9IFVURjhFbmNvZGluZygpLmVuY29kZSh1cmxTZWFyY2hQYXJhbXNCb2R5KCkudG9TdHJp
bmcoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwotICAgICAgICBjbG9zZVN0cmVhbSA9IHNv
dXJjZS5lbnF1ZXVlKEFycmF5QnVmZmVyOjp0cnlDcmVhdGUoZGF0YS5kYXRhKCksIGRhdGEubGVu
Z3RoKCkpKTsKKyAgICAgICAgYXV0byBkYXRhID0gVVRGOEVuY29kaW5nKCkuZW5jb2RlKHVybFNl
YXJjaFBhcmFtc0JvZHkoKS50b1N0cmluZygpLCBVbmVuY29kYWJsZUhhbmRsaW5nOjpFbnRpdGll
cyk7CisgICAgICAgIGNsb3NlU3RyZWFtID0gc291cmNlLmVucXVldWUoQXJyYXlCdWZmZXI6OnRy
eUNyZWF0ZShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpKTsKICAgICAgICAgbV9kYXRhID0gbnVs
bHB0cjsKICAgICB9IGVsc2UgaWYgKGlzQmxvYigpKSB7CiAgICAgICAgIG93bmVyLmxvYWRCbG9i
KGJsb2JCb2R5KCksIG51bGxwdHIpOwpAQCAtMTg3LDYgKzE4OCw3IEBAIHZvaWQgRmV0Y2hCb2R5
Ojpjb25zdW1lQXNTdHJlYW0oRmV0Y2hCb2R5T3duZXImIG93bmVyLCBGZXRjaEJvZHlTb3VyY2Um
IHNvdXJjZSkKICAgICBpZiAoY2xvc2VTdHJlYW0pCiAgICAgICAgIHNvdXJjZS5jbG9zZSgpOwog
fQorCiAjZW5kaWYKIAogdm9pZCBGZXRjaEJvZHk6OmNvbnN1bWVBcnJheUJ1ZmZlcihSZWY8RGVm
ZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCkBAIC0yMDMsOCArMjA1LDggQEAgdm9pZCBGZXRjaEJv
ZHk6OmNvbnN1bWVBcnJheUJ1ZmZlclZpZXcoUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNl
KQogCiB2b2lkIEZldGNoQm9keTo6Y29uc3VtZVRleHQoUmVmPERlZmVycmVkUHJvbWlzZT4mJiBw
cm9taXNlLCBjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgYXV0byBkYXRhID0gVVRGOEVuY29k
aW5nKCkuZW5jb2RlKHRleHQsIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKLSAgICBtX2NvbnN1
bWVyLnJlc29sdmVXaXRoRGF0YShXVEZNb3ZlKHByb21pc2UpLCByZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEoKSksIGRhdGEubGVuZ3RoKCkpOworICAgIGF1dG8gZGF0
YSA9IFVURjhFbmNvZGluZygpLmVuY29kZSh0ZXh0LCBVbmVuY29kYWJsZUhhbmRsaW5nOjpFbnRp
dGllcyk7CisgICAgbV9jb25zdW1lci5yZXNvbHZlV2l0aERhdGEoV1RGTW92ZShwcm9taXNlKSwg
ZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKICAgICBtX2RhdGEgPSBudWxscHRyOwogfQogCkBA
IC0yMjgsOSArMjMwLDkgQEAgdm9pZCBGZXRjaEJvZHk6OmxvYWRpbmdTdWNjZWVkZWQoKQogUmVm
UHRyPEZvcm1EYXRhPiBGZXRjaEJvZHk6OmJvZHlBc0Zvcm1EYXRhKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgaWYgKGlzVGV4dCgpKQotICAgICAgICByZXR1
cm4gRm9ybURhdGE6OmNyZWF0ZShVVEY4RW5jb2RpbmcoKS5lbmNvZGUodGV4dEJvZHkoKSwgRW50
aXRpZXNGb3JVbmVuY29kYWJsZXMpKTsKKyAgICAgICAgcmV0dXJuIEZvcm1EYXRhOjpjcmVhdGUo
VVRGOEVuY29kaW5nKCkuZW5jb2RlKHRleHRCb2R5KCksIFVuZW5jb2RhYmxlSGFuZGxpbmc6OkVu
dGl0aWVzKSk7CiAgICAgaWYgKGlzVVJMU2VhcmNoUGFyYW1zKCkpCi0gICAgICAgIHJldHVybiBG
b3JtRGF0YTo6Y3JlYXRlKFVURjhFbmNvZGluZygpLmVuY29kZSh1cmxTZWFyY2hQYXJhbXNCb2R5
KCkudG9TdHJpbmcoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpKTsKKyAgICAgICAgcmV0dXJu
IEZvcm1EYXRhOjpjcmVhdGUoVVRGOEVuY29kaW5nKCkuZW5jb2RlKHVybFNlYXJjaFBhcmFtc0Jv
ZHkoKS50b1N0cmluZygpLCBVbmVuY29kYWJsZUhhbmRsaW5nOjpFbnRpdGllcykpOwogICAgIGlm
IChpc0Jsb2IoKSkgewogICAgICAgICBSZWZQdHI8Rm9ybURhdGE+IGJvZHkgPSBGb3JtRGF0YTo6
Y3JlYXRlKCk7CiAgICAgICAgIGJvZHktPmFwcGVuZEJsb2IoYmxvYkJvZHkoKS51cmwoKSk7CkBA
IC0yNzEsMTUgKzI3MywxMCBAQCBGZXRjaEJvZHk6OlRha2VuRGF0YSBGZXRjaEJvZHk6OnRha2Uo
KQogICAgIGlmIChpc0Zvcm1EYXRhKCkpCiAgICAgICAgIHJldHVybiBmb3JtRGF0YUJvZHkoKTsK
IAotICAgIGlmIChpc1RleHQoKSkgewotICAgICAgICBhdXRvIGRhdGEgPSBVVEY4RW5jb2Rpbmco
KS5lbmNvZGUodGV4dEJvZHkoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwotICAgICAgICBy
ZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZGF0YS5kYXRhKCksIGRhdGEubGVuZ3RoKCkpOwot
ICAgIH0KLQotICAgIGlmIChpc1VSTFNlYXJjaFBhcmFtcygpKSB7Ci0gICAgICAgIGF1dG8gZGF0
YSA9IFVURjhFbmNvZGluZygpLmVuY29kZSh1cmxTZWFyY2hQYXJhbXNCb2R5KCkudG9TdHJpbmco
KSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwotICAgICAgICByZXR1cm4gU2hhcmVkQnVmZmVy
OjpjcmVhdGUoZGF0YS5kYXRhKCksIGRhdGEubGVuZ3RoKCkpOwotICAgIH0KKyAgICBpZiAoaXNU
ZXh0KCkpCisgICAgICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShVVEY4RW5jb2Rpbmco
KS5lbmNvZGUodGV4dEJvZHkoKSwgVW5lbmNvZGFibGVIYW5kbGluZzo6RW50aXRpZXMpKTsKKyAg
ICBpZiAoaXNVUkxTZWFyY2hQYXJhbXMoKSkKKyAgICAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6
Y3JlYXRlKFVURjhFbmNvZGluZygpLmVuY29kZSh1cmxTZWFyY2hQYXJhbXNCb2R5KCkudG9TdHJp
bmcoKSwgVW5lbmNvZGFibGVIYW5kbGluZzo6RW50aXRpZXMpKTsKIAogICAgIGlmIChpc0FycmF5
QnVmZmVyKCkpCiAgICAgICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShyZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPihhcnJheUJ1ZmZlckJvZHkoKS5kYXRhKCkpLCBhcnJheUJ1ZmZl
ckJvZHkoKS5ieXRlTGVuZ3RoKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRlci5jcHAKaW5kZXggZTViMmUzNjM4YTAwODQ1
Mjc5N2JjZjMwOGJiZDk3YTlmODM0YWE2ZC4uN2QzOTcxZDU3OTZiYmRjYzQ2ODllYTJlOTliYjE0
YTU4ZmMwOGRiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRz
L1dlYlNvY2tldERlZmxhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNv
Y2tldHMvV2ViU29ja2V0RGVmbGF0ZXIuY3BwCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSA8
d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogI2luY2x1ZGUgPHpsaWIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9QQUwu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1BBTC9QQUwueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjZTRhNjQzY2QxZDQ2MzJkMGQ4ZTU2NzhiNDE4OGQx
MDA3ZDgxMjhmLi5kODgzZmNlYTcxN2ZhMmY5YmRmOWMxMDIyYmM1Yjc4MWI5ZGZjOTFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0yNTUsNiArMjU1LDcgQEAKIAkJMUM2N0NFQTExRTMyRURBODAwRjgwRjJFIC8qIEZlYXR1cmVE
ZWZpbmVzLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEZlYXR1cmVE
ZWZpbmVzLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzY3Q0VBMjFF
MzJFRTI2MDBGODBGMkUgLyogVmVyc2lvbi54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25m
aWc7IHBhdGggPSBWZXJzaW9uLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3QTE2NTY0MzFGOTdCMkI4MDBCQTNDRTQgLyogTlNLZXllZEFyY2hpdmVyU1BJLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5TS2V5ZWRBcmNoaXZlclNQSS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk5M0U1OTA5QzFGOTNCRjFFMDA2N0Y4Q0YgLyogVW5lbmNv
ZGFibGVIYW5kbGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmVuY29kYWJsZUhhbmRsaW5nLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExMDI2NTg2MUY1Njc0NjEwMEI0Qzg0NCAvKiBG
b3VuZGF0aW9uU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvdW5kYXRp
b25TUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTEwMjY1ODgxRjU2NzQ3QTAw
QjRDODQ0IC8qIEhJVG9vbGJveFNQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBISVRvb2xib3hTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTEwMjY1OEEx
RjU2NzQ4QzAwQjRDODQ0IC8qIFF1aWNrRHJhd1NQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBRdWlja0RyYXdTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTU0Myw2ICs1NDQsNyBAQAogCQkJCUEzMEQ0MTIzMUYwREQxMDUwMEI3MTk1NCAvKiBtYWMgKi8s
CiAJCQkJQTMwRDQxMUYxRjBERDBFQTAwQjcxOTU0IC8qIEtpbGxSaW5nLmNwcCAqLywKIAkJCQlB
MzBENDExRTFGMEREMEVBMDBCNzE5NTQgLyogS2lsbFJpbmcuaCAqLywKKwkJCQk5M0U1OTA5QzFG
OTNCRjFFMDA2N0Y4Q0YgLyogVW5lbmNvZGFibGVIYW5kbGluZy5oICovLAogCQkJKTsKIAkJCXBh
dGggPSB0ZXh0OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9VbmVuY29kYWJsZUhhbmRsaW5nLmggYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL3RleHQvVW5lbmNvZGFibGVIYW5kbGluZy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZhMWI1
ZTg3NDFiMWU3MzBiMzY4OWZiZDE1N2RjOGYxNmQ1OTJlNzEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvVW5lbmNvZGFibGVIYW5kbGluZy5oCkBAIC0wLDAg
KzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFNwZWNpZmllcyB3
aGF0IHdpbGwgaGFwcGVuIHdoZW4gYSBjaGFyYWN0ZXIgaXMgZW5jb3VudGVyZWQgdGhhdCBpcwor
Ly8gbm90IGVuY29kYWJsZSBpbiB0aGUgY2hhcmFjdGVyIHNldC4KK2VudW0gY2xhc3MgVW5lbmNv
ZGFibGVIYW5kbGluZyB7CisgICAgLy8gU3Vic3RpdHV0ZXMgdGhlIHJlcGxhY2VtZW50IGNoYXJh
Y3RlciAiPyIuCisgICAgUXVlc3Rpb25NYXJrcywKKworICAgIC8vIEVuY29kZXMgdGhlIGNoYXJh
Y3RlciBhcyBhbiBYTUwgZW50aXR5LiBGb3IgZXhhbXBsZSwgVSswNkRFCisgICAgLy8gd291bGQg
YmUgIiYjMTc1ODsiICgweDZERSA9IDE3NTggaW4gb2N0YWwpLgorICAgIEVudGl0aWVzLAorCisg
ICAgLy8gRW5jb2RlcyB0aGUgY2hhcmFjdGVyIGFzIGVuIGVudGl0eSBhcyBhYm92ZSwgYnV0IGVz
Y2FwZWQKKyAgICAvLyBub24tYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuIFRoaXMgaXMgdXNlZCBp
biBVUkxzLgorICAgIC8vIEZvciBleGFtcGxlLCBVKzZERSB3b3VsZCBiZSAiJTI2JTIzMTc1OCUz
QiIuCisgICAgVVJMRW5jb2RlZEVudGl0aWVzCit9OworCit9CisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9JZGVudGlmaWVyUmVwLmggYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
SWRlbnRpZmllclJlcC5oCmluZGV4IDI0OGVmODkzMTNlNjZjYmRhMzU2OGE0OWFhNGI1NWYzNThm
YjdjZmEuLjM1NDAwZjE3YzMzNjM1N2U2OTVkMTg2YjkxMTFjY2NkYTlkMzQxYjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9JZGVudGlmaWVyUmVwLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvYnJpZGdlL0lkZW50aWZpZXJSZXAuaApAQCAtMjMsMTIgKzIzLDEwIEBACiAgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKICAqLwogCi0jaWZuZGVmIElkZW50aWZpZXJSZXBfaAotI2RlZmluZSBJZGVudGlm
aWVyUmVwX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4K
ICNpbmNsdWRlIDxzdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzAsNCArNjgs
MyBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBJZGVu
dGlmaWVyUmVwX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFu
Y2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAKaW5kZXggOTY5
MmU1YmMxZGRmNTdhZWNiNDEyZWMwMDA0ZTg5NTljMThmYjRlNi4uOGVmMmFhNDY5MmVhY2YxYjA0
YjJmNmNlMDIyMDVlYTBjMTljMzQ1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdl
L2MvY19pbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5j
ZS5jcHAKQEAgLTQ3LDcgKzQ3LDYgQEAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvQmxvYkJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iQnVp
bGRlci5jcHAKaW5kZXggYWY2ZDFlNmRjNjQyZGJiNTFjZWMzMzExMWY5ZDk3MDQ5MzM2MjhjYi4u
NTlhNjMwOGQyMWQ5YmE3ODdjM2IzMzUxNzVhYjdiOWIzZDcyNzVmYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9CbG9iQnVpbGRlci5jcHAKQEAgLTQ5LDE0ICs0OSwxNCBAQCB2b2lkIEJsb2JCdWls
ZGVyOjphcHBlbmQoUmVmUHRyPEFycmF5QnVmZmVyPiYmIGFycmF5QnVmZmVyKQogewogICAgIGlm
ICghYXJyYXlCdWZmZXIpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2FwcGVuZGFibGVEYXRhLmFw
cGVuZChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYXJyYXlCdWZmZXItPmRhdGEoKSksIGFycmF5
QnVmZmVyLT5ieXRlTGVuZ3RoKCkpOworICAgIG1fYXBwZW5kYWJsZURhdGEuYXBwZW5kKHN0YXRp
Y19jYXN0PGNvbnN0IHVpbnQ4X3QqPihhcnJheUJ1ZmZlci0+ZGF0YSgpKSwgYXJyYXlCdWZmZXIt
PmJ5dGVMZW5ndGgoKSk7CiB9CiAKIHZvaWQgQmxvYkJ1aWxkZXI6OmFwcGVuZChSZWZQdHI8QXJy
YXlCdWZmZXJWaWV3PiYmIGFycmF5QnVmZmVyVmlldykKIHsKICAgICBpZiAoIWFycmF5QnVmZmVy
VmlldykKICAgICAgICAgcmV0dXJuOwotICAgIG1fYXBwZW5kYWJsZURhdGEuYXBwZW5kKHN0YXRp
Y19jYXN0PGNvbnN0IGNoYXIqPihhcnJheUJ1ZmZlclZpZXctPmJhc2VBZGRyZXNzKCkpLCBhcnJh
eUJ1ZmZlclZpZXctPmJ5dGVMZW5ndGgoKSk7CisgICAgbV9hcHBlbmRhYmxlRGF0YS5hcHBlbmQo
c3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGFycmF5QnVmZmVyVmlldy0+YmFzZUFkZHJlc3Mo
KSksIGFycmF5QnVmZmVyVmlldy0+Ynl0ZUxlbmd0aCgpKTsKIH0KIAogdm9pZCBCbG9iQnVpbGRl
cjo6YXBwZW5kKFJlZlB0cjxCbG9iPiYmIGJsb2IpCkBAIC03MCwxMyArNzAsMTYgQEAgdm9pZCBC
bG9iQnVpbGRlcjo6YXBwZW5kKFJlZlB0cjxCbG9iPiYmIGJsb2IpCiAKIHZvaWQgQmxvYkJ1aWxk
ZXI6OmFwcGVuZChjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgQ1N0cmluZyB1dGY4VGV4dCA9
IFVURjhFbmNvZGluZygpLmVuY29kZSh0ZXh0LCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7Cisg
ICAgYXV0byBieXRlcyA9IFVURjhFbmNvZGluZygpLmVuY29kZSh0ZXh0LCBVbmVuY29kYWJsZUhh
bmRsaW5nOjpFbnRpdGllcyk7CiAKICAgICBpZiAobV9lbmRpbmdzID09IEJsb2JMaW5lRW5kaW5n
czo6TmF0aXZlKQotICAgICAgICBub3JtYWxpemVBbmRBcHBlbmRMaW5lRW5kaW5nc1RvTmF0aXZl
KHV0ZjhUZXh0LCBtX2FwcGVuZGFibGVEYXRhKTsKKyAgICAgICAgYnl0ZXMgPSBub3JtYWxpemVM
aW5lRW5kaW5nc1RvTmF0aXZlKFdURk1vdmUoYnl0ZXMpKTsKKworICAgIGlmIChtX2FwcGVuZGFi
bGVEYXRhLmlzRW1wdHkoKSkKKyAgICAgICAgbV9hcHBlbmRhYmxlRGF0YSA9IFdURk1vdmUoYnl0
ZXMpOwogICAgIGVsc2UgewotICAgICAgICBBU1NFUlQobV9lbmRpbmdzID09IEJsb2JMaW5lRW5k
aW5nczo6VHJhbnNwYXJlbnQpOwotICAgICAgICBtX2FwcGVuZGFibGVEYXRhLmFwcGVuZCh1dGY4
VGV4dC5kYXRhKCksIHV0ZjhUZXh0Lmxlbmd0aCgpKTsKKyAgICAgICAgLy8gRklYTUU6IFdvdWxk
IGl0IGJlIGJldHRlciB0byBtb3ZlIG11bHRpcGxlIHZlY3RvcnMgaW50byBtX2l0ZW1zIGluc3Rl
YWQgb2YgbWVyZ2luZyB0aGVtIGludG8gb25lPworICAgICAgICBtX2FwcGVuZGFibGVEYXRhLmFw
cGVuZFZlY3RvcihieXRlcyk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcAppbmRleCA4ZDMzZWU2NjNmYjMz
MDcwNGE5ODhhMjExNWMwNDMwY2IxOWUzNmVmLi5iNWNhNDZjMjFmYjZjYTI1Y2I5ODI1Yzc5NWYw
ODg3YjQ0NDUyMGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
TWV0YUNoYXJzZXRQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxNZXRhQ2hhcnNldFBhcnNlci5jcHAKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKKyNpbmNsdWRlICJUZXh0
Q29kZWMuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmdSZWdpc3RyeS5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC0xNTMsNyArMTU0LDggQEAgYm9vbCBIVE1MTWV0YUNoYXJzZXRQYXJzZXI6
OmNoZWNrRm9yTWV0YUNoYXJzZXQoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkKIAog
ICAgIGNvbnN0ZXhwciBpbnQgYnl0ZXNUb0NoZWNrVW5jb25kaXRpb25hbGx5ID0gMTAyNDsKIAot
ICAgIG1faW5wdXQuYXBwZW5kKG1fY29kZWMtPmRlY29kZShkYXRhLCBsZW5ndGgpKTsKKyAgICBi
b29sIGlnbm9yZWRTYXdFcnJvckZsYWc7CisgICAgbV9pbnB1dC5hcHBlbmQobV9jb2RlYy0+ZGVj
b2RlKGRhdGEsIGxlbmd0aCwgZmFsc2UsIGZhbHNlLCBpZ25vcmVkU2F3RXJyb3JGbGFnKSk7CiAK
ICAgICB3aGlsZSAoYXV0byB0b2tlbiA9IG1fdG9rZW5pemVyLm5leHRUb2tlbihtX2lucHV0KSkg
ewogICAgICAgICBib29sIGlzRW5kID0gdG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW46OkVuZFRh
ZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
RE9NQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JE
T01BZ2VudC5jcHAKaW5kZXggZDJjNjM1ZGZlNWEwODM5YTYzYTlkMGM2NzJmZTBmOWE3YmNjNDA5
Ni4uZDNlNGMyMzUwMWU5NDk3OTk4ODk0MWIxMjZlMjQxOTA4YmI4NjVmNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAK
QEAgLTE0MTYsMTAgKzE0MTYsMTAgQEAgc3RhdGljIFN0cmluZyBjb21wdXRlQ29udGVudFNlY3Vy
aXR5UG9saWN5U0hBMjU2SGFzaChjb25zdCBFbGVtZW50JiBlbGVtZW50KQogICAgIC8vIFNlZSA8
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTE4ND4uCiAgICAgVGV4
dEVuY29kaW5nIGRvY3VtZW50RW5jb2RpbmcgPSBlbGVtZW50LmRvY3VtZW50KCkudGV4dEVuY29k
aW5nKCk7CiAgICAgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZ1RvVXNlID0gZG9jdW1lbnRF
bmNvZGluZy5pc1ZhbGlkKCkgPyBkb2N1bWVudEVuY29kaW5nIDogVVRGOEVuY29kaW5nKCk7Ci0g
ICAgQ1N0cmluZyBjb250ZW50ID0gZW5jb2RpbmdUb1VzZS5lbmNvZGUoVGV4dE5vZGVUcmF2ZXJz
YWw6OmNvbnRlbnRzQXNTdHJpbmcoZWxlbWVudCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsK
KyAgICBhdXRvIGNvbnRlbnQgPSBlbmNvZGluZ1RvVXNlLmVuY29kZShUZXh0Tm9kZVRyYXZlcnNh
bDo6Y29udGVudHNBc1N0cmluZyhlbGVtZW50KSwgVW5lbmNvZGFibGVIYW5kbGluZzo6RW50aXRp
ZXMpOwogICAgIGF1dG8gY3J5cHRvRGlnZXN0ID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZShQ
QUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMjU2KTsKLSAgICBjcnlwdG9EaWdlc3Qt
PmFkZEJ5dGVzKGNvbnRlbnQuZGF0YSgpLCBjb250ZW50Lmxlbmd0aCgpKTsKLSAgICBWZWN0b3I8
dWludDhfdD4gZGlnZXN0ID0gY3J5cHRvRGlnZXN0LT5jb21wdXRlSGFzaCgpOworICAgIGNyeXB0
b0RpZ2VzdC0+YWRkQnl0ZXMoY29udGVudC5kYXRhKCksIGNvbnRlbnQuc2l6ZSgpKTsKKyAgICBh
dXRvIGRpZ2VzdCA9IGNyeXB0b0RpZ2VzdC0+Y29tcHV0ZUhhc2goKTsKICAgICByZXR1cm4gbWFr
ZVN0cmluZygic2hhMjU2LSIsIGJhc2U2NEVuY29kZShkaWdlc3QuZGF0YSgpLCBkaWdlc3Quc2l6
ZSgpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUNy
eXB0b2dyYXBoaWNEaWdlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5
cHRvZ3JhcGhpY0RpZ2VzdC5jcHAKaW5kZXggYmFlOTEyYTMyODc5YjhlODljYzNiYjhhZDdjMmE3
NjRmNWRjMjljNi4uMTU4MzIzYWZhNDYwNGM2MGVkNTczZjUxYjkyODc5OWFhMzI2YmVjYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2Vz
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0Rp
Z2VzdC5jcHAKQEAgLTE1NCw3ICsxNTQsNyBAQCBzdGF0aWMgUEFMOjpDcnlwdG9EaWdlc3Q6OkFs
Z29yaXRobSB0b0NyeXB0b0RpZ2VzdEFsZ29yaXRobShSZXNvdXJjZUNyeXB0b2dyYXBoaQogICAg
IHJldHVybiBQQUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfNTEyOwogfQogCi1SZXNv
dXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QgY3J5cHRvZ3JhcGhpY0RpZ2VzdEZvckJ5dGVzKFJlc291
cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3JpdGhtIGFsZ29yaXRobSwgY29uc3QgY2hhciog
Ynl0ZXMsIHNpemVfdCBsZW5ndGgpCitSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QgY3J5cHRv
Z3JhcGhpY0RpZ2VzdEZvckJ5dGVzKFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3Jp
dGhtIGFsZ29yaXRobSwgY29uc3Qgdm9pZCogYnl0ZXMsIHNpemVfdCBsZW5ndGgpCiB7CiAgICAg
YXV0byBjcnlwdG9EaWdlc3QgPSBQQUw6OkNyeXB0b0RpZ2VzdDo6Y3JlYXRlKHRvQ3J5cHRvRGln
ZXN0QWxnb3JpdGhtKGFsZ29yaXRobSkpOwogICAgIGNyeXB0b0RpZ2VzdC0+YWRkQnl0ZXMoYnl0
ZXMsIGxlbmd0aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VD
cnlwdG9ncmFwaGljRGlnZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlw
dG9ncmFwaGljRGlnZXN0LmgKaW5kZXggNjM4YTRhM2YyMTUwZTEwN2E5NjY0M2I0YTQ2YjQzODFj
OGM2ZGViOC4uZTRhODJhZTc0NjU4MTU2Yzc3NmI1N2ZlZjFhOGZkOTdkNDQ5MWJhNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Qu
aApAQCAtNzYsNyArNzYsNyBAQCBzdGQ6Om9wdGlvbmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dy
YXBoaWNEaWdlc3Q+IHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlcwogCiBzdGQ6Om9wdGlv
bmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gZGVjb2RlRW5jb2RlZFJlc291cmNlQ3J5
cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0
Jik7CiAKLVJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCBjcnlwdG9ncmFwaGljRGlnZXN0Rm9y
Qnl0ZXMoUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG0sIGNvbnN0IGNoYXIq
IGJ5dGVzLCBzaXplX3QgbGVuZ3RoKTsKK1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCBjcnlw
dG9ncmFwaGljRGlnZXN0Rm9yQnl0ZXMoUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdv
cml0aG0sIGNvbnN0IHZvaWQqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoKTsKIAogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHAKaW5kZXggNWQwOWMyMzhl
YzBmMjlkZTI0ZWQ2NGM3YzM3ZGIyMTA1ODkxYTlmMS4uYTBmOTMyZTZhOTY5YWVmNTE3ZWEwNGUz
N2MwNzc1OTQ1MzM2YmJmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1RleHRS
ZXNvdXJjZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9UZXh0UmVzb3Vy
Y2VEZWNvZGVyLmNwcApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAxOTk5
IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3
IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKIAogICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTMxLDcg
KzMxLDYgQEAKICNpbmNsdWRlICJUZXh0RW5jb2RpbmdEZXRlY3Rvci5oIgogI2luY2x1ZGUgIlRl
eHRFbmNvZGluZ1JlZ2lzdHJ5LmgiCiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KLSNpbmNs
dWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzIy
LDIwICszMjEsMTggQEAgY29uc3QgVGV4dEVuY29kaW5nJiBUZXh0UmVzb3VyY2VEZWNvZGVyOjpk
ZWZhdWx0RW5jb2RpbmcoQ29udGVudFR5cGUgY29udGVudFR5cGUKICAgICByZXR1cm4gc3BlY2lm
aWVkRGVmYXVsdEVuY29kaW5nOwogfQogCi1UZXh0UmVzb3VyY2VEZWNvZGVyOjpUZXh0UmVzb3Vy
Y2VEZWNvZGVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYgc3Bl
Y2lmaWVkRGVmYXVsdEVuY29kaW5nLCBib29sIHVzZXNFbmNvZGluZ0RldGVjdG9yKQoraW5saW5l
IFRleHRSZXNvdXJjZURlY29kZXI6OlRleHRSZXNvdXJjZURlY29kZXIoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgY29uc3QgVGV4dEVuY29kaW5nJiBzcGVjaWZpZWREZWZhdWx0RW5jb2RpbmcsIGJv
b2wgdXNlc0VuY29kaW5nRGV0ZWN0b3IpCiAgICAgOiBtX2NvbnRlbnRUeXBlKGRldGVybWluZUNv
bnRlbnRUeXBlKG1pbWVUeXBlKSkKICAgICAsIG1fZW5jb2RpbmcoZGVmYXVsdEVuY29kaW5nKG1f
Y29udGVudFR5cGUsIHNwZWNpZmllZERlZmF1bHRFbmNvZGluZykpCi0gICAgLCBtX3NvdXJjZShE
ZWZhdWx0RW5jb2RpbmcpCi0gICAgLCBtX2hpbnRFbmNvZGluZyhudWxscHRyKQotICAgICwgbV9j
aGVja2VkRm9yQk9NKGZhbHNlKQotICAgICwgbV9jaGVja2VkRm9yQ1NTQ2hhcnNldChmYWxzZSkK
LSAgICAsIG1fY2hlY2tlZEZvckhlYWRDaGFyc2V0KGZhbHNlKQotICAgICwgbV91c2VMZW5pZW50
WE1MRGVjb2RpbmcoZmFsc2UpCi0gICAgLCBtX3Nhd0Vycm9yKGZhbHNlKQogICAgICwgbV91c2Vz
RW5jb2RpbmdEZXRlY3Rvcih1c2VzRW5jb2RpbmdEZXRlY3RvcikKIHsKIH0KIAorUmVmPFRleHRS
ZXNvdXJjZURlY29kZXI+IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBjb25zdCBUZXh0RW5jb2RpbmcmIGRlZmF1bHRFbmNvZGluZywgYm9vbCB1c2Vz
RW5jb2RpbmdEZXRlY3RvcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUZXh0UmVzb3Vy
Y2VEZWNvZGVyKG1pbWVUeXBlLCBkZWZhdWx0RW5jb2RpbmcsIHVzZXNFbmNvZGluZ0RldGVjdG9y
KSk7Cit9CisKIFRleHRSZXNvdXJjZURlY29kZXI6On5UZXh0UmVzb3VyY2VEZWNvZGVyKCkgPSBk
ZWZhdWx0OwogCiB2b2lkIFRleHRSZXNvdXJjZURlY29kZXI6OnNldEVuY29kaW5nKGNvbnN0IFRl
eHRFbmNvZGluZyYgZW5jb2RpbmcsIEVuY29kaW5nU291cmNlIHNvdXJjZSkKQEAgLTM0Niw3ICsz
NDMsNyBAQCB2b2lkIFRleHRSZXNvdXJjZURlY29kZXI6OnNldEVuY29kaW5nKGNvbnN0IFRleHRF
bmNvZGluZyYgZW5jb2RpbmcsIEVuY29kaW5nU291cgogCiAgICAgLy8gV2hlbiBlbmNvZGluZyBj
b21lcyBmcm9tIG1ldGEgdGFnIChpLmUuIGl0IGNhbm5vdCBiZSBYTUwgZmlsZXMgc2VudCB2aWEg
WEhSKSwKICAgICAvLyB0cmVhdCB4LXVzZXItZGVmaW5lZCBhcyB3aW5kb3dzLTEyNTIgKGJ1ZyAx
ODI3MCkKLSAgICBpZiAoc291cmNlID09IEVuY29kaW5nRnJvbU1ldGFUYWcgJiYgc3RyY2FzZWNt
cChlbmNvZGluZy5uYW1lKCksICJ4LXVzZXItZGVmaW5lZCIpID09IDApCisgICAgaWYgKHNvdXJj
ZSA9PSBFbmNvZGluZ0Zyb21NZXRhVGFnICYmIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KGVuY29kaW5nLm5hbWUoKSwgIngtdXNlci1kZWZpbmVkIikpCiAgICAgICAgIG1fZW5jb2Rpbmcg
PSAid2luZG93cy0xMjUyIjsKICAgICBlbHNlIGlmIChzb3VyY2UgPT0gRW5jb2RpbmdGcm9tTWV0
YVRhZyB8fCBzb3VyY2UgPT0gRW5jb2RpbmdGcm9tWE1MSGVhZGVyIHx8IHNvdXJjZSA9PSBFbmNv
ZGluZ0Zyb21DU1NDaGFyc2V0KSAgICAgICAgCiAgICAgICAgIG1fZW5jb2RpbmcgPSBlbmNvZGlu
Zy5jbG9zZXN0Qnl0ZUJhc2VkRXF1aXZhbGVudCgpOwpAQCAtNTkzLDM1ICs1OTAsMzMgQEAgdm9p
ZCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpkZXRlY3RKYXBhbmVzZUVuY29kaW5nKGNvbnN0IGNoYXIq
IGRhdGEsIHNpemVfdCBsZW4pCiAvLyAgIGluIHRoZSBmaXJzdCBwbGFjZS4gCiBib29sIFRleHRS
ZXNvdXJjZURlY29kZXI6OnNob3VsZEF1dG9EZXRlY3QoKSBjb25zdAogewotICAgIC8vIEp1c3Qg
Y2hlY2tpbmcgbV9oaW50RW5jb2Rpbmcgc3VmZmljZXMgaGVyZSBiZWNhdXNlIGl0J3Mgb25seSBz
ZXQKLSAgICAvLyBpbiBzZXRIaW50RW5jb2Rpbmcgd2hlbiB0aGUgc291cmNlIGlzIEF1dG9EZXRl
Y3RlZEVuY29kaW5nLgogICAgIHJldHVybiBtX3VzZXNFbmNvZGluZ0RldGVjdG9yCi0gICAgICAg
ICYmIChtX3NvdXJjZSA9PSBEZWZhdWx0RW5jb2RpbmcgfHwgKG1fc291cmNlID09IEVuY29kaW5n
RnJvbVBhcmVudEZyYW1lICYmIG1faGludEVuY29kaW5nKSk7IAorICAgICAgICAmJiAobV9zb3Vy
Y2UgPT0gRGVmYXVsdEVuY29kaW5nIHx8IChtX3NvdXJjZSA9PSBFbmNvZGluZ0Zyb21QYXJlbnRG
cmFtZSAmJiBtX3BhcmVudEZyYW1lQXV0b0RldGVjdGVkRW5jb2RpbmcpKTsKIH0KIAotU3RyaW5n
IFRleHRSZXNvdXJjZURlY29kZXI6OmRlY29kZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVu
KQorU3RyaW5nIFRleHRSZXNvdXJjZURlY29kZXI6OmRlY29kZShjb25zdCBjaGFyKiBkYXRhLCBz
aXplX3QgbGVuZ3RoKQogewogICAgIHNpemVfdCBsZW5ndGhPZkJPTSA9IDA7CiAgICAgaWYgKCFt
X2NoZWNrZWRGb3JCT00pCi0gICAgICAgIGxlbmd0aE9mQk9NID0gY2hlY2tGb3JCT00oZGF0YSwg
bGVuKTsKKyAgICAgICAgbGVuZ3RoT2ZCT00gPSBjaGVja0ZvckJPTShkYXRhLCBsZW5ndGgpOwog
CiAgICAgYm9vbCBtb3ZlZERhdGFUb0J1ZmZlciA9IGZhbHNlOwogCiAgICAgaWYgKG1fY29udGVu
dFR5cGUgPT0gQ1NTICYmICFtX2NoZWNrZWRGb3JDU1NDaGFyc2V0KQotICAgICAgICBpZiAoIWNo
ZWNrRm9yQ1NTQ2hhcnNldChkYXRhLCBsZW4sIG1vdmVkRGF0YVRvQnVmZmVyKSkKKyAgICAgICAg
aWYgKCFjaGVja0ZvckNTU0NoYXJzZXQoZGF0YSwgbGVuZ3RoLCBtb3ZlZERhdGFUb0J1ZmZlcikp
CiAgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAogICAgIGlmICgobV9jb250ZW50
VHlwZSA9PSBIVE1MIHx8IG1fY29udGVudFR5cGUgPT0gWE1MKSAmJiAhbV9jaGVja2VkRm9ySGVh
ZENoYXJzZXQpIC8vIEhUTUwgYW5kIFhNTAotICAgICAgICBpZiAoIWNoZWNrRm9ySGVhZENoYXJz
ZXQoZGF0YSwgbGVuLCBtb3ZlZERhdGFUb0J1ZmZlcikpCisgICAgICAgIGlmICghY2hlY2tGb3JI
ZWFkQ2hhcnNldChkYXRhLCBsZW5ndGgsIG1vdmVkRGF0YVRvQnVmZmVyKSkKICAgICAgICAgICAg
IHJldHVybiBlbXB0eVN0cmluZygpOwogCiAgICAgLy8gRklYTUU6IEl0IGlzIHdyb25nIHRvIGNo
YW5nZSB0aGUgZW5jb2RpbmcgZG93bnN0cmVhbSBhZnRlciB3ZSBoYXZlIGFscmVhZHkgZG9uZSBz
b21lIGRlY29kaW5nLgogICAgIGlmIChzaG91bGRBdXRvRGV0ZWN0KCkpIHsKICAgICAgICAgaWYg
KG1fZW5jb2RpbmcuaXNKYXBhbmVzZSgpKQotICAgICAgICAgICAgZGV0ZWN0SmFwYW5lc2VFbmNv
ZGluZyhkYXRhLCBsZW4pOyAvLyBGSVhNRTogV2Ugc2hvdWxkIHVzZSBkZXRlY3RUZXh0RW5jb2Rp
bmcoKSBmb3IgYWxsIGxhbmd1YWdlcy4KKyAgICAgICAgICAgIGRldGVjdEphcGFuZXNlRW5jb2Rp
bmcoZGF0YSwgbGVuZ3RoKTsgLy8gRklYTUU6IFdlIHNob3VsZCB1c2UgZGV0ZWN0VGV4dEVuY29k
aW5nKCkgZm9yIGFsbCBsYW5ndWFnZXMuCiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgVGV4
dEVuY29kaW5nIGRldGVjdGVkRW5jb2Rpbmc7Ci0gICAgICAgICAgICBpZiAoZGV0ZWN0VGV4dEVu
Y29kaW5nKGRhdGEsIGxlbiwgbV9oaW50RW5jb2RpbmcsICZkZXRlY3RlZEVuY29kaW5nKSkKKyAg
ICAgICAgICAgIGlmIChkZXRlY3RUZXh0RW5jb2RpbmcoZGF0YSwgbGVuZ3RoLCBtX3BhcmVudEZy
YW1lQXV0b0RldGVjdGVkRW5jb2RpbmcsICZkZXRlY3RlZEVuY29kaW5nKSkKICAgICAgICAgICAg
ICAgICBzZXRFbmNvZGluZyhkZXRlY3RlZEVuY29kaW5nLCBBdXRvRGV0ZWN0ZWRFbmNvZGluZyk7
CiAgICAgICAgIH0KICAgICB9CkBAIC02MzIsMTIgKzYyNywxMiBAQCBTdHJpbmcgVGV4dFJlc291
cmNlRGVjb2Rlcjo6ZGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW4pCiAgICAgICAg
IG1fY29kZWMgPSBuZXdUZXh0Q29kZWMobV9lbmNvZGluZyk7CiAKICAgICBpZiAobV9idWZmZXIu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV9jb2RlYy0+ZGVjb2RlKGRhdGEgKyBsZW5ndGhP
ZkJPTSwgbGVuIC0gbGVuZ3RoT2ZCT00sIGZhbHNlLCBtX2NvbnRlbnRUeXBlID09IFhNTCwgbV9z
YXdFcnJvcik7CisgICAgICAgIHJldHVybiBtX2NvZGVjLT5kZWNvZGUoZGF0YSArIGxlbmd0aE9m
Qk9NLCBsZW5ndGggLSBsZW5ndGhPZkJPTSwgZmFsc2UsIG1fY29udGVudFR5cGUgPT0gWE1MLCBt
X3Nhd0Vycm9yKTsKIAogICAgIGlmICghbW92ZWREYXRhVG9CdWZmZXIpIHsKICAgICAgICAgc2l6
ZV90IG9sZFNpemUgPSBtX2J1ZmZlci5zaXplKCk7Ci0gICAgICAgIG1fYnVmZmVyLmdyb3cob2xk
U2l6ZSArIGxlbik7Ci0gICAgICAgIG1lbWNweShtX2J1ZmZlci5kYXRhKCkgKyBvbGRTaXplLCBk
YXRhLCBsZW4pOworICAgICAgICBtX2J1ZmZlci5ncm93KG9sZFNpemUgKyBsZW5ndGgpOworICAg
ICAgICBtZW1jcHkobV9idWZmZXIuZGF0YSgpICsgb2xkU2l6ZSwgZGF0YSwgbGVuZ3RoKTsKICAg
ICB9CiAKICAgICBTdHJpbmcgcmVzdWx0ID0gbV9jb2RlYy0+ZGVjb2RlKG1fYnVmZmVyLmRhdGEo
KSArIGxlbmd0aE9mQk9NLCBtX2J1ZmZlci5zaXplKCkgLSBsZW5ndGhPZkJPTSwgZmFsc2UsIG1f
Y29udGVudFR5cGUgPT0gWE1MICYmICFtX3VzZUxlbmllbnRYTUxEZWNvZGluZywgbV9zYXdFcnJv
cik7CkBAIC02NDcsMTUgKzY0MiwxNCBAQCBTdHJpbmcgVGV4dFJlc291cmNlRGVjb2Rlcjo6ZGVj
b2RlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW4pCiAKIFN0cmluZyBUZXh0UmVzb3VyY2VE
ZWNvZGVyOjpmbHVzaCgpCiB7Ci0gICAvLyBJZiB3ZSBjYW4gbm90IGlkZW50aWZ5IHRoZSBlbmNv
ZGluZyBldmVuIGFmdGVyIGEgZG9jdW1lbnQgaXMgY29tcGxldGVseQotICAgLy8gbG9hZGVkLCB3
ZSBuZWVkIHRvIGRldGVjdCB0aGUgZW5jb2RpbmcgaWYgb3RoZXIgY29uZGl0aW9ucyBmb3IKLSAg
IC8vIGF1dG9kZXRlY3Rpb24gaXMgc2F0aXNmaWVkLgorICAgIC8vIElmIHdlIGNhbiBub3QgaWRl
bnRpZnkgdGhlIGVuY29kaW5nIGV2ZW4gYWZ0ZXIgYSBkb2N1bWVudCBpcyBjb21wbGV0ZWx5Cisg
ICAgLy8gbG9hZGVkLCB3ZSBuZWVkIHRvIGRldGVjdCB0aGUgZW5jb2RpbmcgaWYgb3RoZXIgY29u
ZGl0aW9ucyBmb3IKKyAgICAvLyBhdXRvZGV0ZWN0aW9uIGlzIHNhdGlzZmllZC4KICAgICBpZiAo
bV9idWZmZXIuc2l6ZSgpICYmIHNob3VsZEF1dG9EZXRlY3QoKQogICAgICAgICAmJiAoKCFtX2No
ZWNrZWRGb3JIZWFkQ2hhcnNldCAmJiAobV9jb250ZW50VHlwZSA9PSBIVE1MIHx8IG1fY29udGVu
dFR5cGUgPT0gWE1MKSkgfHwgKCFtX2NoZWNrZWRGb3JDU1NDaGFyc2V0ICYmIChtX2NvbnRlbnRU
eXBlID09IENTUykpKSkgewotICAgICAgICAgVGV4dEVuY29kaW5nIGRldGVjdGVkRW5jb2Rpbmc7
Ci0gICAgICAgICBpZiAoZGV0ZWN0VGV4dEVuY29kaW5nKG1fYnVmZmVyLmRhdGEoKSwgbV9idWZm
ZXIuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2hpbnRFbmNvZGlu
ZywgJmRldGVjdGVkRW5jb2RpbmcpKQotICAgICAgICAgICAgIHNldEVuY29kaW5nKGRldGVjdGVk
RW5jb2RpbmcsIEF1dG9EZXRlY3RlZEVuY29kaW5nKTsKKyAgICAgICAgVGV4dEVuY29kaW5nIGRl
dGVjdGVkRW5jb2Rpbmc7CisgICAgICAgIGlmIChkZXRlY3RUZXh0RW5jb2RpbmcobV9idWZmZXIu
ZGF0YSgpLCBtX2J1ZmZlci5zaXplKCksIG1fcGFyZW50RnJhbWVBdXRvRGV0ZWN0ZWRFbmNvZGlu
ZywgJmRldGVjdGVkRW5jb2RpbmcpKQorICAgICAgICAgICAgc2V0RW5jb2RpbmcoZGV0ZWN0ZWRF
bmNvZGluZywgQXV0b0RldGVjdGVkRW5jb2RpbmcpOwogICAgIH0KIAogICAgIGlmICghbV9jb2Rl
YykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5oCmluZGV4IDk4
ZWM5MjU3YWFkMGUzOWJjOTBkOWJkYjBiNzA0OTQ4MmEzZTgzYWQuLjFkZTIyNTIxY2YwZjRjZjEz
ZmRkNTIxYTNiOTZkZmMyNjkxZDE3NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9UZXh0UmVzb3VyY2VEZWNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1RleHRS
ZXNvdXJjZURlY29kZXIuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAx
OTk5IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCiAgICAgQ29weXJpZ2h0IChDKSAy
MDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKLSAgICBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgIENvcHlyaWdo
dCAoQykgMjAwNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMjgsNiArMjgsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBIVE1MTWV0YUNoYXJzZXRQYXJzZXI7CitjbGFzcyBUZXh0Q29kZWM7CiAKIGNsYXNzIFRleHRS
ZXNvdXJjZURlY29kZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxUZXh0UmVzb3VyY2VEZWNvZGVyPiB7
CiBwdWJsaWM6CkBAIC00MiwzNSArNDMsMjYgQEAgcHVibGljOgogICAgICAgICBFbmNvZGluZ0Zy
b21QYXJlbnRGcmFtZQogICAgIH07CiAKLSAgICBzdGF0aWMgUmVmPFRleHRSZXNvdXJjZURlY29k
ZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBUZXh0RW5jb2RpbmcmIGRl
ZmF1bHRFbmNvZGluZyA9IFRleHRFbmNvZGluZygpLCBib29sIHVzZXNFbmNvZGluZ0RldGVjdG9y
ID0gZmFsc2UpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUZXh0UmVzb3Vy
Y2VEZWNvZGVyKG1pbWVUeXBlLCBkZWZhdWx0RW5jb2RpbmcsIHVzZXNFbmNvZGluZ0RldGVjdG9y
KSk7Ci0gICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8VGV4dFJlc291cmNlRGVj
b2Rlcj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYg
ZGVmYXVsdEVuY29kaW5nID0geyB9LCBib29sIHVzZXNFbmNvZGluZ0RldGVjdG9yID0gZmFsc2Up
OwogICAgIFdFQkNPUkVfRVhQT1JUIH5UZXh0UmVzb3VyY2VEZWNvZGVyKCk7CiAKICAgICB2b2lk
IHNldEVuY29kaW5nKGNvbnN0IFRleHRFbmNvZGluZyYsIEVuY29kaW5nU291cmNlKTsKICAgICBj
b25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGluZzsg
fQogCi0gICAgYm9vbCBoYXNFcXVhbEVuY29kaW5nRm9yQ2hhcnNldChjb25zdCBTdHJpbmcmKSBj
b25zdDsKKyAgICBib29sIGhhc0VxdWFsRW5jb2RpbmdGb3JDaGFyc2V0KGNvbnN0IFN0cmluZyYg
Y2hhcnNldCkgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgZGVjb2RlKGNvbnN0
IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpOwogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBm
bHVzaCgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGRlY29kZUFuZEZsdXNoKGNvbnN0
IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpOwogCi0gICAgdm9pZCBzZXRIaW50RW5jb2Rpbmco
Y29uc3QgVGV4dFJlc291cmNlRGVjb2RlciogaGludERlY29kZXIpCi0gICAgewotICAgICAgICAv
LyBoaW50RW5jb2RpbmcgaXMgZm9yIHVzZSB3aXRoIGF1dG9kZXRlY3Rpb24sIHdoaWNoIHNob3Vs
ZCBiZSAKLSAgICAgICAgLy8gb25seSBpbnZva2VkIHdoZW4gaGludEVuY29kaW5nIGNvbWVzIGZy
b20gYXV0by1kZXRlY3Rpb24uCi0gICAgICAgIGlmIChoaW50RGVjb2RlciAmJiBoaW50RGVjb2Rl
ci0+bV9zb3VyY2UgPT0gQXV0b0RldGVjdGVkRW5jb2RpbmcpCi0gICAgICAgICAgICBtX2hpbnRF
bmNvZGluZyA9IGhpbnREZWNvZGVyLT5lbmNvZGluZygpLm5hbWUoKTsKLSAgICB9CisgICAgdm9p
ZCBzZXRIaW50RW5jb2RpbmcoY29uc3QgVGV4dFJlc291cmNlRGVjb2RlciogcGFyZW50RnJhbWVE
ZWNvZGVyKTsKICAgIAogICAgIHZvaWQgdXNlTGVuaWVudFhNTERlY29kaW5nKCkgeyBtX3VzZUxl
bmllbnRYTUxEZWNvZGluZyA9IHRydWU7IH0KICAgICBib29sIHNhd0Vycm9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9zYXdFcnJvcjsgfQogCiBwcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFRleHRS
ZXNvdXJjZURlY29kZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVGV4dEVuY29kaW5n
JiBkZWZhdWx0RW5jb2RpbmcsIGJvb2wgdXNlc0VuY29kaW5nRGV0ZWN0b3IpOworICAgIFRleHRS
ZXNvdXJjZURlY29kZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVGV4dEVuY29kaW5n
JiBkZWZhdWx0RW5jb2RpbmcsIGJvb2wgdXNlc0VuY29kaW5nRGV0ZWN0b3IpOwogCiAgICAgZW51
bSBDb250ZW50VHlwZSB7IFBsYWluVGV4dCwgSFRNTCwgWE1MLCBDU1MgfTsgLy8gUGxhaW5UZXh0
IG9ubHkgY2hlY2tzIGZvciBCT00uCiAgICAgc3RhdGljIENvbnRlbnRUeXBlIGRldGVybWluZUNv
bnRlbnRUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwpAQCAtODYsMTcgKzc4LDIyIEBAIHBy
aXZhdGU6CiAgICAgQ29udGVudFR5cGUgbV9jb250ZW50VHlwZTsKICAgICBUZXh0RW5jb2Rpbmcg
bV9lbmNvZGluZzsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dENvZGVjPiBtX2NvZGVjOwotICAg
IEVuY29kaW5nU291cmNlIG1fc291cmNlOwotICAgIGNvbnN0IGNoYXIqIG1faGludEVuY29kaW5n
OwotICAgIFZlY3RvcjxjaGFyPiBtX2J1ZmZlcjsKLSAgICBib29sIG1fY2hlY2tlZEZvckJPTTsK
LSAgICBib29sIG1fY2hlY2tlZEZvckNTU0NoYXJzZXQ7Ci0gICAgYm9vbCBtX2NoZWNrZWRGb3JI
ZWFkQ2hhcnNldDsKLSAgICBib29sIG1fdXNlTGVuaWVudFhNTERlY29kaW5nOyAvLyBEb24ndCBz
dG9wIG9uIFhNTCBkZWNvZGluZyBlcnJvcnMuCi0gICAgYm9vbCBtX3Nhd0Vycm9yOwotICAgIGJv
b2wgbV91c2VzRW5jb2RpbmdEZXRlY3RvcjsKLQogICAgIHN0ZDo6dW5pcXVlX3B0cjxIVE1MTWV0
YUNoYXJzZXRQYXJzZXI+IG1fY2hhcnNldFBhcnNlcjsKKyAgICBFbmNvZGluZ1NvdXJjZSBtX3Nv
dXJjZSB7IERlZmF1bHRFbmNvZGluZyB9OworICAgIGNvbnN0IGNoYXIqIG1fcGFyZW50RnJhbWVB
dXRvRGV0ZWN0ZWRFbmNvZGluZyB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8Y2hhcj4gbV9idWZm
ZXI7CisgICAgYm9vbCBtX2NoZWNrZWRGb3JCT00geyBmYWxzZSB9OworICAgIGJvb2wgbV9jaGVj
a2VkRm9yQ1NTQ2hhcnNldCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2NoZWNrZWRGb3JIZWFkQ2hh
cnNldCB7IGZhbHNlIH07CisgICAgYm9vbCBtX3VzZUxlbmllbnRYTUxEZWNvZGluZyB7IGZhbHNl
IH07IC8vIERvbid0IHN0b3Agb24gWE1MIGRlY29kaW5nIGVycm9ycy4KKyAgICBib29sIG1fc2F3
RXJyb3IgeyBmYWxzZSB9OworICAgIGJvb2wgbV91c2VzRW5jb2RpbmdEZXRlY3RvciB7IGZhbHNl
IH07CiB9OwogCitpbmxpbmUgdm9pZCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpzZXRIaW50RW5jb2Rp
bmcoY29uc3QgVGV4dFJlc291cmNlRGVjb2RlciogcGFyZW50RnJhbWVEZWNvZGVyKQoreworICAg
IGlmIChwYXJlbnRGcmFtZURlY29kZXIgJiYgcGFyZW50RnJhbWVEZWNvZGVyLT5tX3NvdXJjZSA9
PSBBdXRvRGV0ZWN0ZWRFbmNvZGluZykKKyAgICAgICAgbV9wYXJlbnRGcmFtZUF1dG9EZXRlY3Rl
ZEVuY29kaW5nID0gcGFyZW50RnJhbWVEZWNvZGVyLT5lbmNvZGluZygpLm5hbWUoKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKaW5kZXggMTUzZTg4NDAy
MWJkNzgzMjg1ODg2ZmE3MmZjODJjNGU1NDYxMjY3NS4uOWMxY2MzODBhMTFhYzZkMzgxNGY3MzQx
MmJhMDE0ODEwZjAwYzllNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNh
Y2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCkBAIC0zOCw3ICszOCw2IEBA
CiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5EYXRhLmgiCiAjaW5jbHVkZSAiVVJMLmgiCiAjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvVVVJRC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVHJlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVHJlZS5j
cHAKaW5kZXggMzBkMWRjZGUwNTAyMzYzMjE0ZGY3MGRkY2M1OGFjZjRmOWFiYmEyMC4uMzAzYzUx
YTNiZTk3ZGI1ZjI1NmM1NDhhMmU3OGQ4ZTRmZDAwOGE4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVRyZWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVU
cmVlLmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQ
YWdlR3JvdXAuaCIKICNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZVNlcmlhbGl6ZXIuY3BwCmluZGV4IGVjMTBjZDVmZmYwZmU0ZDVjZjkyYjExZmYzNmVi
NTk3ZDY0ODRkYjcuLjcxZWEyNzBmNTM4ODRkOWYzNWJhODQyYWY2NzI0YjY4ODYxMmJmMjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCkBAIC0xOTksOCArMTk5LDcgQEAg
dm9pZCBQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplRnJhbWUoRnJhbWUqIGZyYW1lKQogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIFN0cmluZyB0ZXh0ID0gYWNjdW11bGF0b3Iuc2VyaWFsaXpl
Tm9kZXMoKmRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSwgSW5jbHVkZU5vZGUpOwotICAgIENT
dHJpbmcgZnJhbWVIVE1MID0gdGV4dEVuY29kaW5nLmVuY29kZSh0ZXh0LCBFbnRpdGllc0ZvclVu
ZW5jb2RhYmxlcyk7Ci0gICAgbV9yZXNvdXJjZXMuYXBwZW5kKHsgdXJsLCBkb2N1bWVudC0+c3Vn
Z2VzdGVkTUlNRVR5cGUoKSwgU2hhcmVkQnVmZmVyOjpjcmVhdGUoZnJhbWVIVE1MLmRhdGEoKSwg
ZnJhbWVIVE1MLmxlbmd0aCgpKSB9KTsKKyAgICBtX3Jlc291cmNlcy5hcHBlbmQoeyB1cmwsIGRv
Y3VtZW50LT5zdWdnZXN0ZWRNSU1FVHlwZSgpLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZSh0ZXh0RW5j
b2RpbmcuZW5jb2RlKHRleHQsIFVuZW5jb2RhYmxlSGFuZGxpbmc6OkVudGl0aWVzKSkgfSk7CiAg
ICAgbV9yZXNvdXJjZVVSTHMuYWRkKHVybCk7CiAKICAgICBmb3IgKGF1dG8mIG5vZGUgOiBub2Rl
cykgewpAQCAtMjY0LDkgKzI2Myw3IEBAIHZvaWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUNT
U1N0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCwgY29uc3QgVVJMCiAgICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgY2hlY2sgd2hldGhlciBhIGNoYXJzZXQgaGFzIGJlZW4gc3Bl
Y2lmaWVkIGFuZCBpZiBub25lIHdhcyBmb3VuZCBhZGQgb25lLgogICAgICAgICBUZXh0RW5jb2Rp
bmcgdGV4dEVuY29kaW5nKHN0eWxlU2hlZXQtPmNvbnRlbnRzKCkuY2hhcnNldCgpKTsKICAgICAg
ICAgQVNTRVJUKHRleHRFbmNvZGluZy5pc1ZhbGlkKCkpOwotICAgICAgICBTdHJpbmcgdGV4dFN0
cmluZyA9IGNzc1RleHQudG9TdHJpbmcoKTsKLSAgICAgICAgQ1N0cmluZyB0ZXh0ID0gdGV4dEVu
Y29kaW5nLmVuY29kZSh0ZXh0U3RyaW5nLCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7Ci0gICAg
ICAgIG1fcmVzb3VyY2VzLmFwcGVuZCh7IHVybCwgQVNDSUlMaXRlcmFsIHsgInRleHQvY3NzIiB9
LCBTaGFyZWRCdWZmZXI6OmNyZWF0ZSh0ZXh0LmRhdGEoKSwgdGV4dC5sZW5ndGgoKSkgfSk7Cisg
ICAgICAgIG1fcmVzb3VyY2VzLmFwcGVuZCh7IHVybCwgQVNDSUlMaXRlcmFsIHsgInRleHQvY3Nz
IiB9LCBTaGFyZWRCdWZmZXI6OmNyZWF0ZSh0ZXh0RW5jb2RpbmcuZW5jb2RlKGNzc1RleHQudG9T
dHJpbmcoKSwgVW5lbmNvZGFibGVIYW5kbGluZzo6RW50aXRpZXMpKSB9KTsKICAgICAgICAgbV9y
ZXNvdXJjZVVSTHMuYWRkKHVybCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKaW5kZXggYTQ2NDg5MDc0MmNhNzM3OWI3
YWZlZjQ0NDNmZDFiMWU5NzVmODU1Mi4uMjNjM2YyN2MzNmY2MmE2MjUzMzEwNDBlYmZhZTEwNDVi
ZDlkMDc2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3Vy
aXR5UG9saWN5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJp
dHlQb2xpY3kuY3BwCkBAIC0zMzIsMTEgKzMzMiwxMSBAQCBDb250ZW50U2VjdXJpdHlQb2xpY3k6
Okhhc2hJbkVuZm9yY2VkQW5kUmVwb3J0T25seVBvbGljaWVzUGFpciBDb250ZW50U2VjdXJpdHlQ
bwogCiAgICAgLy8gRklYTUU6IENvbXB1dGUgdGhlIGRpZ2VzdCB3aXRoIHJlc3BlY3QgdG8gdGhl
IHJhdyBieXRlcyByZWNlaXZlZCBmcm9tIHRoZSBwYWdlLgogICAgIC8vIFNlZSA8aHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTE4ND4uCi0gICAgQ1N0cmluZyBjb250
ZW50Q1N0cmluZyA9IGVuY29kaW5nVG9Vc2UuZW5jb2RlKGNvbnRlbnQsIEVudGl0aWVzRm9yVW5l
bmNvZGFibGVzKTsKKyAgICBhdXRvIGVuY29kZWRDb250ZW50ID0gZW5jb2RpbmdUb1VzZS5lbmNv
ZGUoY29udGVudCwgVW5lbmNvZGFibGVIYW5kbGluZzo6RW50aXRpZXMpOwogICAgIGJvb2wgZm91
bmRIYXNoSW5FbmZvcmNlZFBvbGljaWVzID0gZmFsc2U7CiAgICAgYm9vbCBmb3VuZEhhc2hJblJl
cG9ydE9ubHlQb2xpY2llcyA9IGZhbHNlOwogICAgIGZvciAoYXV0byBhbGdvcml0aG0gOiBhbGdv
cml0aG1zKSB7Ci0gICAgICAgIENvbnRlbnRTZWN1cml0eVBvbGljeUhhc2ggaGFzaCA9IGNyeXB0
b2dyYXBoaWNEaWdlc3RGb3JCeXRlcyhhbGdvcml0aG0sIGNvbnRlbnRDU3RyaW5nLmRhdGEoKSwg
Y29udGVudENTdHJpbmcubGVuZ3RoKCkpOworICAgICAgICBDb250ZW50U2VjdXJpdHlQb2xpY3lI
YXNoIGhhc2ggPSBjcnlwdG9ncmFwaGljRGlnZXN0Rm9yQnl0ZXMoYWxnb3JpdGhtLCBlbmNvZGVk
Q29udGVudC5kYXRhKCksIGVuY29kZWRDb250ZW50LnNpemUoKSk7CiAgICAgICAgIGlmICghZm91
bmRIYXNoSW5FbmZvcmNlZFBvbGljaWVzICYmIGFsbFBvbGljaWVzV2l0aERpc3Bvc2l0aW9uQWxs
b3coQ29udGVudFNlY3VyaXR5UG9saWN5OjpEaXNwb3NpdGlvbjo6RW5mb3JjZSwgc3RkOjpmb3J3
YXJkPFByZWRpY2F0ZT4ocHJlZGljYXRlKSwgaGFzaCkpCiAgICAgICAgICAgICBmb3VuZEhhc2hJ
bkVuZm9yY2VkUG9saWNpZXMgPSB0cnVlOwogICAgICAgICBpZiAoIWZvdW5kSGFzaEluUmVwb3J0
T25seVBvbGljaWVzICYmIGFsbFBvbGljaWVzV2l0aERpc3Bvc2l0aW9uQWxsb3coQ29udGVudFNl
Y3VyaXR5UG9saWN5OjpEaXNwb3NpdGlvbjo6UmVwb3J0T25seSwgc3RkOjpmb3J3YXJkPFByZWRp
Y2F0ZT4ocHJlZGljYXRlKSwgaGFzaCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9GaWxlSGFuZGxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVIYW5kbGUu
Y3BwCmluZGV4IDJhMGE2MzRjNmY2ODEyY2Y2ZmNlN2IyMDgxY2Q5ZWFiOGJhZTU5MDMuLjFjM2Y1
MzI4OWQ1NDBmMTUwOTNjNDEyZTQ0MWNlNmZjZDYwOTdiZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0ZpbGVIYW5kbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0ZpbGVIYW5kbGUuY3BwCkBAIC0yOSw4ICsyOSw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiRmlsZUhhbmRsZS5oIgogCi0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5o
PgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZpbGVIYW5kbGU6OkZpbGVIYW5kbGUoY29uc3Qg
U3RyaW5nJiBwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGUgbW9kZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCmluZGV4IDBkMzViMjEzYmZjMjFkOWQ4YTliMWRh
MWYzYjJiYzkwNTc0YjkyNWUuLmQ2NmI1MzA5ZTFiMWJmNmRhYjVlZjQ2NGUxOGYzMGJjM2RlZGI5
OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcApAQCAtNzQsNiAr
NzQsMTIgQEAgUmVmPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoVmVjdG9yPGNo
YXI+JiYgdmVjdG9yKQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihXVEZN
b3ZlKHZlY3RvcikpKTsKIH0KIAorLy8gRklYTUU6IE1vdmUgdGhlIHdob2xlIGNsYXNzIGZyb20g
VmVjdG9yPGNoYXI+IHRvIFZlY3Rvcjx1aW50OF90PiBhbmQgbWFrZSB0aGlzIGVmZmljaWVudCwg
cmVwbGFjaW5nIHRoZSBWZWN0b3I8Y2hhcj4gdmVyc2lvbiBhYm92ZS4KK1JlZjxTaGFyZWRCdWZm
ZXI+IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFZlY3Rvcjx1aW50OF90PiYmIHZlY3RvcikKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRCdWZmZXIgeyB2ZWN0b3IuZGF0YSgpLCB2ZWN0
b3Iuc2l6ZSgpIH0pOworfQorCiB2b2lkIFNoYXJlZEJ1ZmZlcjo6Y29tYmluZUludG9PbmVTZWdt
ZW50KCkgY29uc3QKIHsKICNpZiAhQVNTRVJUX0RJU0FCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1NoYXJlZEJ1ZmZlci5oCmluZGV4IDM0ZmY3MWM2Mzg2ZDgyY2VjNzVkZmEyNWM1ZDIwYTBhNGZl
ZmEyNDIuLjMwNWE5MTMzNTJkMjJlMWUxZDczMWEwNzg5M2Y2MzdiN2ZiNzczNWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCkBAIC02MCw3ICs2MCw4IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlV2l0aENvbnRlbnRzT2ZGaWxl
KGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpOwogCiAgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+
IGNyZWF0ZShWZWN0b3I8Y2hhcj4mJik7Ci0gICAgCisgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZm
ZXI+IGNyZWF0ZShWZWN0b3I8dWludDhfdD4mJik7CisKICNpZiBVU0UoRk9VTkRBVElPTikKICAg
ICBSZXRhaW5QdHI8TlNEYXRhPiBjcmVhdGVOU0RhdGEoKSBjb25zdDsKICAgICBSZXRhaW5QdHI8
TlNBcnJheT4gY3JlYXRlTlNEYXRhQXJyYXkoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9V
UkxQYXJzZXIuY3BwCmluZGV4IDY3Mjg2MTJlZDAzMjQ5ZmY5NzYyODgyMTVkYzliNDUxM2NhOTdk
MWEuLjAyNzk5MWQxZWVmYjQxN2VlMmM5YWY3MmJlMWY1ODk3NDE5NzFlMDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNwcApAQCAtNjIxLDkgKzYyMSw5IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+CiB2b2lkIFVSTFBhcnNlcjo6ZW5jb2RlUXVlcnkoY29uc3Qg
VmVjdG9yPFVDaGFyPiYgc291cmNlLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBDb2Rl
UG9pbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPiBpdGVyYXRvcikKIHsKICAgICAvLyBGSVhNRTog
SXQgaXMgdW5jbGVhciBpbiB0aGUgc3BlYyB3aGF0IHRvIGRvIHdoZW4gZW5jb2RpbmcgZmFpbHMu
IFRoZSBiZWhhdmlvciBzaG91bGQgYmUgc3BlY2lmaWVkIGFuZCB0ZXN0ZWQuCi0gICAgQ1N0cmlu
ZyBlbmNvZGVkID0gZW5jb2RpbmcuZW5jb2RlKFN0cmluZ1ZpZXcoc291cmNlLmRhdGEoKSwgc291
cmNlLnNpemUoKSksIFVSTEVuY29kZWRFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7Ci0gICAgY29u
c3QgY2hhciogZGF0YSA9IGVuY29kZWQuZGF0YSgpOwotICAgIHNpemVfdCBsZW5ndGggPSBlbmNv
ZGVkLmxlbmd0aCgpOworICAgIGF1dG8gZW5jb2RlZCA9IGVuY29kaW5nLmVuY29kZShTdHJpbmdW
aWV3KHNvdXJjZS5kYXRhKCksIHNvdXJjZS5zaXplKCkpLCBVbmVuY29kYWJsZUhhbmRsaW5nOjpV
UkxFbmNvZGVkRW50aXRpZXMpOworICAgIGF1dG8qIGRhdGEgPSBlbmNvZGVkLmRhdGEoKTsKKyAg
ICBzaXplX3QgbGVuZ3RoID0gZW5jb2RlZC5zaXplKCk7CiAgICAgCiAgICAgaWYgKCFsZW5ndGgg
PT0gIWl0ZXJhdG9yLmF0RW5kKCkpIHsKICAgICAgICAgc3ludGF4VmlvbGF0aW9uKGl0ZXJhdG9y
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCmluZGV4IGFlMjNkOGIzZGZmMjgzNzczOTMxYWVlNjk4
MWU4OWRjODk4ZTMxNmUuLmY1Yjc0ZmFhYjE1YmEwMjc3YTI2MDMyMDRjMjdlZWY1YTFiNDg0YmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQpAQCAtMTc4NywxMSArMTc4NywxMCBAQCBib29sIE1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNob3VsZFdhaXRGb3JMb2FkaW5nT2ZS
ZXNvdXJjZShBVkFzc2V0UgogCiAgICAgaWYgKHNjaGVtZSA9PSAiY2xlYXJrZXkiKSB7CiAgICAg
ICAgIFN0cmluZyBrZXlJRCA9IFtbW2F2UmVxdWVzdCByZXF1ZXN0XSBVUkxdIHJlc291cmNlU3Bl
Y2lmaWVyXTsKLSAgICAgICAgU3RyaW5nVmlldyBrZXlJRFZpZXcoa2V5SUQpOwotICAgICAgICBD
U3RyaW5nIHV0ZjhFbmNvZGVkS2V5SWQgPSBVVEY4RW5jb2RpbmcoKS5lbmNvZGUoa2V5SURWaWV3
LCBVUkxFbmNvZGVkRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOworICAgICAgICBhdXRvIGVuY29k
ZWRLZXlJZCA9IFVURjhFbmNvZGluZygpLmVuY29kZShrZXlJRCwgVW5lbmNvZGFibGVIYW5kbGlu
Zzo6VVJMRW5jb2RlZEVudGl0aWVzKTsKIAotICAgICAgICBSZWZQdHI8VWludDhBcnJheT4gaW5p
dERhdGEgPSBVaW50OEFycmF5OjpjcmVhdGUodXRmOEVuY29kZWRLZXlJZC5sZW5ndGgoKSk7Ci0g
ICAgICAgIGluaXREYXRhLT5zZXRSYW5nZShyZWludGVycHJldF9jYXN0PGNvbnN0IEpTQzo6VWlu
dDhBZGFwdG9yOjpUeXBlKj4odXRmOEVuY29kZWRLZXlJZC5kYXRhKCkpLCB1dGY4RW5jb2RlZEtl
eUlkLmxlbmd0aCgpLCAwKTsKKyAgICAgICAgYXV0byBpbml0RGF0YSA9IFVpbnQ4QXJyYXk6OmNy
ZWF0ZShlbmNvZGVkS2V5SWQuc2l6ZSgpKTsKKyAgICAgICAgaW5pdERhdGEtPnNldFJhbmdlKGVu
Y29kZWRLZXlJZC5kYXRhKCksIGVuY29kZWRLZXlJZC5zaXplKCksIDApOwogCiAgICAgICAgIGF1
dG8ga2V5RGF0YSA9IHBsYXllcigpLT5jYWNoZWRLZXlGb3JLZXlJZChrZXlJRCk7CiAgICAgICAg
IGlmIChrZXlEYXRhKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmNwcAppbmRleCAyN2NlZWQyZTcxMTdkODFkYzA4NTQx
OWM3MzllY2Y4YTJjOWVhMjEyLi5jNDJmODg5YzQ4ZDNjOWZjYjUyOTRmZTNiODA5NGJkZTI4ODY1
MDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0
Zm9ybUNBTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L1BsYXRmb3JtQ0FMYXllci5jcHAKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJQbGF0Zm9y
bUNBTGF5ZXJDbGllbnQuaCIKICNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlv
bi5oPgogI2luY2x1ZGUgPENvcmVUZXh0L0NvcmVUZXh0Lmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmlu
Z0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogI2lmIFBMQVRG
T1JNKFdJTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9y
bURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAK
aW5kZXggM2M4ZWUwOGQxNTkxOTNkYTBmYzcwNWEwYWNmZDgzNDI4ZTViN2MyYy4uZjQ1ODIyYmFm
ZjVmMDgwM2MwY2ExMTAwZWZlODc4Nzg5MjY2M2IyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKQEAgLTgxLDE2ICs4MSwxNyBAQCBSZWY8Rm9ybURh
dGE+IEZvcm1EYXRhOjpjcmVhdGUoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpCiAKIFJl
ZjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCBDU3RyaW5nJiBzdHJpbmcpCiB7Ci0g
ICAgYXV0byByZXN1bHQgPSBjcmVhdGUoKTsKLSAgICByZXN1bHQtPmFwcGVuZERhdGEoc3RyaW5n
LmRhdGEoKSwgc3RyaW5nLmxlbmd0aCgpKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVy
biBjcmVhdGUoc3RyaW5nLmRhdGEoKSwgc3RyaW5nLmxlbmd0aCgpKTsKIH0KIAogUmVmPEZvcm1E
YXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IFZlY3RvcjxjaGFyPiYgdmVjdG9yKQogewotICAg
IGF1dG8gcmVzdWx0ID0gY3JlYXRlKCk7Ci0gICAgcmVzdWx0LT5hcHBlbmREYXRhKHZlY3Rvci5k
YXRhKCksIHZlY3Rvci5zaXplKCkpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGNy
ZWF0ZSh2ZWN0b3IuZGF0YSgpLCB2ZWN0b3Iuc2l6ZSgpKTsKK30KKworUmVmPEZvcm1EYXRhPiBG
b3JtRGF0YTo6Y3JlYXRlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmVjdG9yKQoreworICAgIHJl
dHVybiBjcmVhdGUodmVjdG9yLmRhdGEoKSwgdmVjdG9yLnNpemUoKSk7CiB9CiAKIFJlZjxGb3Jt
RGF0YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCBET01Gb3JtRGF0YSYgZm9ybURhdGEsIEVuY29k
aW5nVHlwZSBlbmNvZGluZ1R5cGUpCkBAIC0xMTQsNyArMTE1LDkgQEAgUmVmPEZvcm1EYXRhPiBG
b3JtRGF0YTo6Y29weSgpIGNvbnN0CiAKIFJlZjxGb3JtRGF0YT4gRm9ybURhdGE6Omlzb2xhdGVk
Q29weSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGlzb2xhdGVkQ29weSgpIChoaXN0b3JpY2Fs
bHkgZGVlcENvcHkoKSkgb25seSBjb3BpZXMgY2VydGFpbiB2YWx1ZXMgZnJvbSBgdGhpc2AuIFdo
eSBpcyB0aGF0PworICAgIC8vIEZJWE1FOiBpc29sYXRlZENvcHkoKSBkb2VzIG5vdCBjb3B5IG1f
aWRlbnRpZmllciwgbV9ib3VuZGFyeSwgb3IgbV9jb250YWluc1Bhc3N3b3JkRGF0YS4KKyAgICAv
LyBJcyBhbGwgb2YgdGhhdCBjb3JyZWN0IGFuZCBpbnRlbnRpb25hbD8KKwogICAgIGF1dG8gZm9y
bURhdGEgPSBjcmVhdGUoKTsKIAogICAgIGZvcm1EYXRhLT5tX2Fsd2F5c1N0cmVhbSA9IG1fYWx3
YXlzU3RyZWFtOwpAQCAtMTgzLDkgKzE4Niw5IEBAIHZvaWQgRm9ybURhdGE6OmFwcGVuZEJsb2Io
Y29uc3QgVVJMJiBibG9iVVJMKQogICAgIG1fbGVuZ3RoSW5CeXRlcyA9IHN0ZDo6bnVsbG9wdDsK
IH0KIAotc3RhdGljIENTdHJpbmcgbm9ybWFsaXplU3RyaW5nRGF0YShUZXh0RW5jb2RpbmcmIGVu
Y29kaW5nLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorc3RhdGljIFZlY3Rvcjx1aW50OF90PiBub3Jt
YWxpemVTdHJpbmdEYXRhKFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgdmFs
dWUpCiB7Ci0gICAgcmV0dXJuIG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9DUkxGKGVuY29kaW5nLmVu
Y29kZSh2YWx1ZSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpKTsKKyAgICByZXR1cm4gbm9ybWFs
aXplTGluZUVuZGluZ3NUb0NSTEYoZW5jb2RpbmcuZW5jb2RlKHZhbHVlLCBVbmVuY29kYWJsZUhh
bmRsaW5nOjpFbnRpdGllcykpOwogfQogCiB2b2lkIEZvcm1EYXRhOjphcHBlbmRNdWx0aVBhcnRG
aWxlVmFsdWUoY29uc3QgRmlsZSYgZmlsZSwgVmVjdG9yPGNoYXI+JiBoZWFkZXIsIFRleHRFbmNv
ZGluZyYgZW5jb2RpbmcsIERvY3VtZW50KiBkb2N1bWVudCkKQEAgLTIzMCw3ICsyMzMsNyBAQCB2
b2lkIEZvcm1EYXRhOjphcHBlbmRNdWx0aVBhcnRTdHJpbmdWYWx1ZShjb25zdCBTdHJpbmcmIHN0
cmluZywgVmVjdG9yPGNoYXI+JiBoZQogICAgIGFwcGVuZERhdGEoaGVhZGVyLmRhdGEoKSwgaGVh
ZGVyLnNpemUoKSk7CiAKICAgICBhdXRvIG5vcm1hbGl6ZWRTdHJpbmdEYXRhID0gbm9ybWFsaXpl
U3RyaW5nRGF0YShlbmNvZGluZywgc3RyaW5nKTsKLSAgICBhcHBlbmREYXRhKG5vcm1hbGl6ZWRT
dHJpbmdEYXRhLmRhdGEoKSwgbm9ybWFsaXplZFN0cmluZ0RhdGEubGVuZ3RoKCkpOworICAgIGFw
cGVuZERhdGEobm9ybWFsaXplZFN0cmluZ0RhdGEuZGF0YSgpLCBub3JtYWxpemVkU3RyaW5nRGF0
YS5zaXplKCkpOwogfQogCiB2b2lkIEZvcm1EYXRhOjphcHBlbmRNdWx0aVBhcnRLZXlWYWx1ZVBh
aXJJdGVtcyhjb25zdCBET01Gb3JtRGF0YSYgZm9ybURhdGEsIERvY3VtZW50KiBkb2N1bWVudCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaAppbmRleCA2ZjlhN2E3
MmJmZjk4MjI2NTc5NjVkMzkwNmExNTMyZjBkZmE1OGY0Li5kYWQwYjQzNzdjNzgzNjllNzVhOTNk
NTUyMjM4NTY0YjEzZmUyYmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0Zvcm1EYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9G
b3JtRGF0YS5oCkBAIC0zNCwxMyArMzQsMTEgQEAgY2xhc3MgRmlsZTsKIGNsYXNzIFNoYXJlZEJ1
ZmZlcjsKIGNsYXNzIFRleHRFbmNvZGluZzsKIAorLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBh
IFZhcmlhbnQgb2Ygc3RydWN0cyBhbmQgcmVtb3ZlICJUeXBlIiBhbmQgYWxzbyB0aGUgIm1fIiBw
cmVmaXhlcyBmcm9tIHRoZSBkYXRhIG1lbWJlcnMuCisvLyBUaGUgbWVtYmVyIGZ1bmN0aW9ucyBj
YW4gYmVjb21lIG5vbi1tZW1iZXIgZnVjbnRpb25zLgogY2xhc3MgRm9ybURhdGFFbGVtZW50IHsK
IHB1YmxpYzoKLSAgICBlbnVtIGNsYXNzIFR5cGUgewotICAgICAgICBEYXRhLAotICAgICAgICBF
bmNvZGVkRmlsZSwKLSAgICAgICAgRW5jb2RlZEJsb2IsCi0gICAgfTsKKyAgICBlbnVtIGNsYXNz
IFR5cGUgeyBEYXRhLCBFbmNvZGVkRmlsZSwgRW5jb2RlZEJsb2IgfTsKIAogICAgIEZvcm1EYXRh
RWxlbWVudCgpCiAgICAgICAgIDogbV90eXBlKFR5cGU6OkRhdGEpCkBAIC03NCwxMCArNzIsOCBA
QCBwdWJsaWM6CiAKICAgICBGb3JtRGF0YUVsZW1lbnQgaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgotICAgIHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPgotICAgIHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPEZvcm1EYXRhRWxlbWVudD4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8Rm9ybURhdGFFbGVt
ZW50PiBkZWNvZGUoRGVjb2RlciYpOwogCiAgICAgVHlwZSBtX3R5cGU7CiAgICAgVmVjdG9yPGNo
YXI+IG1fZGF0YTsKQEAgLTg3LDkgKzgzLDggQEAgcHVibGljOgogICAgIGludDY0X3QgbV9maWxl
TGVuZ3RoOwogICAgIGRvdWJsZSBtX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWU7CiAgICAg
Ly8gRklYTUU6IEdlbmVyYXRlZCBmaWxlIHN1cHBvcnQgaW4gRm9ybURhdGEgaXMgYWxtb3N0IGlk
ZW50aWNhbCB0byBCbG9iLCB0aGV5IHNob3VsZCBiZSBtZXJnZWQuCi0gICAgLy8gV2UgY2FuJ3Qg
anVzdCBzd2l0Y2ggdG8gdXNpbmcgQmxvYnMgZm9yIGFsbCBmaWxlcyBmb3IgdHdvIHJlYXNvbnM6
Ci0gICAgLy8gMS4gTm90IGFsbCBwbGF0Zm9ybXMgZW5hYmxlIEJMT0Igc3VwcG9ydC4KLSAgICAv
LyAyLiBFbmNvZGVkRmlsZSBmb3JtIGRhdGEgZWxlbWVudHMgZG8gbm90IGhhdmUgYSB2YWxpZCBt
X2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUsIG1lYW5pbmcgdGhhdCB3ZSBhbHdheXMgdXBs
b2FkIHRoZSBsYXRlc3QgY29udGVudCBmcm9tIGRpc2suCisgICAgLy8gV2UgY2FuJ3QganVzdCBz
d2l0Y2ggdG8gdXNpbmcgQmxvYnMgZm9yIGFsbCBmaWxlcyBiZWNhdXNlIEVuY29kZWRGaWxlIGZv
cm0gZGF0YSBlbGVtZW50cyBkbyBub3QKKyAgICAvLyBoYXZlIGEgdmFsaWQgbV9leHBlY3RlZEZp
bGVNb2RpZmljYXRpb25UaW1lLCBtZWFuaW5nIHdlIGFsd2F5cyB1cGxvYWQgdGhlIGxhdGVzdCBj
b250ZW50IGZyb20gZGlzay4KICAgICBTdHJpbmcgbV9nZW5lcmF0ZWRGaWxlbmFtZTsKICAgICBi
b29sIG1fc2hvdWxkR2VuZXJhdGVGaWxlOwogICAgIGJvb2wgbV9vd25zR2VuZXJhdGVkRmlsZTsK
QEAgLTExNyw3ICsxMTIsNiBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZvcm1EYXRh
RWxlbWVudCYgYSwgY29uc3QgRm9ybURhdGFFbGVtZW50JiBiKQogICAgIHJldHVybiAhKGEgPT0g
Yik7CiB9CiAKLQogdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KIHZvaWQgRm9ybURhdGFFbGVt
ZW50OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKQEAgLTIwNCw2ICsxOTgsNyBA
QCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxGb3JtRGF0YT4gY3JlYXRl
KGNvbnN0IHZvaWQqLCBzaXplX3QpOwogICAgIHN0YXRpYyBSZWY8Rm9ybURhdGE+IGNyZWF0ZShj
b25zdCBDU3RyaW5nJik7CiAgICAgc3RhdGljIFJlZjxGb3JtRGF0YT4gY3JlYXRlKGNvbnN0IFZl
Y3RvcjxjaGFyPiYpOworICAgIHN0YXRpYyBSZWY8Rm9ybURhdGE+IGNyZWF0ZShjb25zdCBWZWN0
b3I8dWludDhfdD4mKTsKICAgICBzdGF0aWMgUmVmPEZvcm1EYXRhPiBjcmVhdGUoY29uc3QgRE9N
Rm9ybURhdGEmLCBFbmNvZGluZ1R5cGUgPSBGb3JtVVJMRW5jb2RlZCk7CiAgICAgc3RhdGljIFJl
ZjxGb3JtRGF0YT4gY3JlYXRlTXVsdGlQYXJ0KGNvbnN0IERPTUZvcm1EYXRhJiwgRG9jdW1lbnQq
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB+Rm9ybURhdGEoKTsKQEAgLTMwMCw2ICsyOTUsNyBAQCB2
b2lkIEZvcm1EYXRhOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVy
IDw8IG1fYm91bmRhcnk7CiAgICAgZW5jb2RlciA8PCBtX2VsZW1lbnRzOwogICAgIGVuY29kZXIg
PDwgbV9pZGVudGlmaWVyOworICAgIC8vIEZJWE1FOiBEb2VzIG5vdCBlbmNvZGUgbV9jb250YWlu
c1Bhc3N3b3JkRGF0YS4gV2h5IGlzIHRoYXQgT0s/CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIERl
Y29kZXI+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1E
YXRhQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRh
QnVpbGRlci5jcHAKaW5kZXggNjg4OGIyY2NlYjRiOTdjY2E5NTUxODM3NTA0ZTUxY2Y2NjMxMDg4
YS4uOWEzYzRiNTljZDQyYWJlZjk5NjU5Y2EzMjhlZDEwZGViNzAyODE2NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YUJ1aWxkZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmNwcApAQCAt
Miw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUu
b3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUu
b3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3Jn
KQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkg
UHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2gg
TW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUu
Y29tLykKICAqCkBAIC0zNiw3ICszNiw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8g
SGVscGVyIGZ1bmN0aW9ucworbmFtZXNwYWNlIEZvcm1EYXRhQnVpbGRlciB7CisKIHN0YXRpYyBp
bmxpbmUgdm9pZCBhcHBlbmQoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNoYXIgc3RyaW5nKQogewog
ICAgIGJ1ZmZlci5hcHBlbmQoc3RyaW5nKTsKQEAgLTUyLDE1ICs1MywyMiBAQCBzdGF0aWMgaW5s
aW5lIHZvaWQgYXBwZW5kKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCBDU3RyaW5nJiBzdHJp
bmcpCiAgICAgYnVmZmVyLmFwcGVuZChzdHJpbmcuZGF0YSgpLCBzdHJpbmcubGVuZ3RoKCkpOwog
fQogCi1zdGF0aWMgdm9pZCBhcHBlbmRRdW90ZWRTdHJpbmcoVmVjdG9yPGNoYXI+JiBidWZmZXIs
IGNvbnN0IENTdHJpbmcmIHN0cmluZykKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmQoVmVjdG9y
PGNoYXI+JiBidWZmZXIsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc3RyaW5nKQoreworICAgIGJ1
ZmZlci5hcHBlbmRWZWN0b3Ioc3RyaW5nKTsKK30KKworc3RhdGljIHZvaWQgYXBwZW5kUXVvdGVk
KFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHN0cmluZykKIHsK
ICAgICAvLyBBcHBlbmQgYSBzdHJpbmcgYXMgYSBxdW90ZWQgdmFsdWUsIGVzY2FwaW5nIHF1b3Rl
cyBhbmQgbGluZSBicmVha3MuCi0gICAgLy8gRklYTUU6IElzIGl0IGNvcnJlY3QgdG8gdXNlIHBl
cmNlbnQgZXNjYXBpbmcgaGVyZT8gT3RoZXIgYnJvd3NlcnMgZG8gbm90IGVuY29kZSB0aGVzZSBj
aGFyYWN0ZXJzIHlldCwKLSAgICAvLyBzbyB3ZSBzaG91bGQgdGVzdCBwb3B1bGFyIHNlcnZlcnMg
dG8gZmluZCBvdXQgaWYgdGhlcmUgaXMgYW4gZW5jb2RpbmcgZm9ybSB0aGV5IGNhbiBoYW5kbGUu
Ci0gICAgc2l6ZV90IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGNoYXIgYyA9IHN0cmluZy5kYXRhKClb
aV07Ci0gICAgICAgIHN3aXRjaCAoYykgeworICAgIC8vIEZJWE1FOiBJcyBpdCBjb3JyZWN0IHRv
IHVzZSBwZXJjZW50IGVzY2FwaW5nIGhlcmU/IFdoZW4gdGhpcyBjb2RlIHdhcyBvcmlnaW5hbGx5
IHdyaXR0ZW4sCisgICAgLy8gb3RoZXIgYnJvd3NlcnMgd2VyZSBub3QgZW5jb2RpbmcgdGhlc2Ug
Y2hhcmFjdGVycywgc28gc29tZW9uZSBzaG91bGQgdGVzdCBzZXJ2ZXJzIG9yIGRvCisgICAgLy8g
cmVzZWFyY2ggdG8gZmluZCBvdXQgaWYgdGhlcmUgaXMgYW4gZW5jb2RpbmcgZm9ybSB0aGF0IHdv
cmtzIHdlbGwuCisgICAgLy8gRklYTUU6IElmIHdlIHdhbnQgdG8gdXNlIHBlcmNlbnQgZXNjYXBp
bmcgc2Vuc2libHksIHdlIG5lZWQgdG8gZXNjYXBlICIlIiBjaGFyYWN0ZXJzIHRvby4KKyAgICBz
aXplX3Qgc2l6ZSA9IHN0cmluZy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
aXplOyArK2kpIHsKKyAgICAgICAgYXV0byBjaGFyYWN0ZXIgPSBzdHJpbmdbaV07CisgICAgICAg
IHN3aXRjaCAoY2hhcmFjdGVyKSB7CiAgICAgICAgIGNhc2UgMHhBOgogICAgICAgICAgICAgYXBw
ZW5kKGJ1ZmZlciwgIiUwQSIpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC03MSwxMiArNzksMzYg
QEAgc3RhdGljIHZvaWQgYXBwZW5kUXVvdGVkU3RyaW5nKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBj
b25zdCBDU3RyaW5nJiBzdHJpbmcpCiAgICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCAiJTIyIik7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGFwcGVu
ZChidWZmZXIsIGMpOworICAgICAgICAgICAgYXBwZW5kKGJ1ZmZlciwgY2hhcmFjdGVyKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKworLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNjb25j
ZXB0LXVybGVuY29kZWQtYnl0ZS1zZXJpYWxpemVyCitzdGF0aWMgdm9pZCBhcHBlbmRGb3JtVVJM
RW5jb2RlZChWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3QgdWludDhfdCogc3RyaW5nLCBzaXpl
X3QgbGVuZ3RoKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyIHNhZmVDaGFyYWN0ZXJzW10gPSAi
LS5fKiI7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAg
ICBhdXRvIGNoYXJhY3RlciA9IHN0cmluZ1tpXTsKKyAgICAgICAgaWYgKGlzQVNDSUlBbHBoYW51
bWVyaWMoY2hhcmFjdGVyKSB8fCBzdHJjaHIoc2FmZUNoYXJhY3RlcnMsIGNoYXJhY3RlcikpCisg
ICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCBjaGFyYWN0ZXIpOworICAgICAgICBlbHNlIGlmIChj
aGFyYWN0ZXIgPT0gJyAnKQorICAgICAgICAgICAgYXBwZW5kKGJ1ZmZlciwgJysnKTsKKyAgICAg
ICAgZWxzZSBpZiAoY2hhcmFjdGVyID09ICdcbicgfHwgKGNoYXJhY3RlciA9PSAnXHInICYmIChp
ICsgMSA+PSBsZW5ndGggfHwgc3RyaW5nW2kgKyAxXSAhPSAnXG4nKSkpCisgICAgICAgICAgICBh
cHBlbmQoYnVmZmVyLCAiJTBEJTBBIik7IC8vIEZJWE1FOiBVbmNsZWFyIGV4YWN0bHkgd2hlcmUg
dGhpcyBydWxlIGFib3V0IG5vcm1hbGl6aW5nIGxpbmUgZW5kaW5ncyB0byBDUkxGIGNvbWVzIGZy
b20uCisgICAgICAgIGVsc2UgaWYgKGNoYXJhY3RlciAhPSAnXHInKSB7CisgICAgICAgICAgICBh
cHBlbmQoYnVmZmVyLCAnJScpOworICAgICAgICAgICAgYXBwZW5kQnl0ZUFzSGV4KGNoYXJhY3Rl
ciwgYnVmZmVyKTsKICAgICAgICAgfQogICAgIH0KIH0KIAotVmVjdG9yPGNoYXI+IEZvcm1EYXRh
QnVpbGRlcjo6Z2VuZXJhdGVVbmlxdWVCb3VuZGFyeVN0cmluZygpCitzdGF0aWMgdm9pZCBhcHBl
bmRGb3JtVVJMRW5jb2RlZChWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBzdHJpbmcpCit7CisgICAgYXBwZW5kRm9ybVVSTEVuY29kZWQoYnVmZmVyLCBzdHJpbmcu
ZGF0YSgpLCBzdHJpbmcuc2l6ZSgpKTsKK30KKworVmVjdG9yPGNoYXI+IGdlbmVyYXRlVW5pcXVl
Qm91bmRhcnlTdHJpbmcoKQogewogICAgIFZlY3RvcjxjaGFyPiBib3VuZGFyeTsKIApAQCAtMTE3
LDE4ICsxNDksMTggQEAgVmVjdG9yPGNoYXI+IEZvcm1EYXRhQnVpbGRlcjo6Z2VuZXJhdGVVbmlx
dWVCb3VuZGFyeVN0cmluZygpCiAgICAgcmV0dXJuIGJvdW5kYXJ5OwogfQogCi12b2lkIEZvcm1E
YXRhQnVpbGRlcjo6YmVnaW5NdWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNv
bnN0IENTdHJpbmcmIGJvdW5kYXJ5LCBjb25zdCBDU3RyaW5nJiBuYW1lKQordm9pZCBiZWdpbk11
bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3QgQ1N0cmluZyYgYm91bmRh
cnksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbmFtZSkKIHsKICAgICBhZGRCb3VuZGFyeVRvTXVs
dGlQYXJ0SGVhZGVyKGJ1ZmZlciwgYm91bmRhcnkpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgbG9z
ZXMgZGF0YSBpcnJldmVyc2libHkgaWYgdGhlIGlucHV0IG5hbWUgaW5jbHVkZXMgY2hhcmFjdGVy
cyB5b3UgY2FuJ3QgZW5jb2RlCiAgICAgLy8gaW4gdGhlIHdlYnNpdGUncyBjaGFyYWN0ZXIgc2V0
LgogICAgIGFwcGVuZChidWZmZXIsICJDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5h
bWU9XCIiKTsKLSAgICBhcHBlbmRRdW90ZWRTdHJpbmcoYnVmZmVyLCBuYW1lKTsKKyAgICBhcHBl
bmRRdW90ZWQoYnVmZmVyLCBuYW1lKTsKICAgICBhcHBlbmQoYnVmZmVyLCAnIicpOwogfQogCi12
b2lkIEZvcm1EYXRhQnVpbGRlcjo6YWRkQm91bmRhcnlUb011bHRpUGFydEhlYWRlcihWZWN0b3I8
Y2hhcj4mIGJ1ZmZlciwgY29uc3QgQ1N0cmluZyYgYm91bmRhcnksIGJvb2wgaXNMYXN0Qm91bmRh
cnkpCit2b2lkIGFkZEJvdW5kYXJ5VG9NdWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+JiBidWZm
ZXIsIGNvbnN0IENTdHJpbmcmIGJvdW5kYXJ5LCBib29sIGlzTGFzdEJvdW5kYXJ5KQogewogICAg
IGFwcGVuZChidWZmZXIsICItLSIpOwogICAgIGFwcGVuZChidWZmZXIsIGJvdW5kYXJ5KTsKQEAg
LTEzOSwyOCArMTcxLDI4IEBAIHZvaWQgRm9ybURhdGFCdWlsZGVyOjphZGRCb3VuZGFyeVRvTXVs
dGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCBDCiAgICAgYXBwZW5kKGJ1
ZmZlciwgIlxyXG4iKTsKIH0KIAotdm9pZCBGb3JtRGF0YUJ1aWxkZXI6OmFkZEZpbGVuYW1lVG9N
dWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNvbnN0IFRleHRFbmNvZGluZyYg
ZW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCit2b2lkIGFkZEZpbGVuYW1lVG9NdWx0
aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5j
b2RpbmcsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgbG9z
ZXMgZGF0YSBpcnJldmVyc2libHkgaWYgdGhlIGZpbGVuYW1lIGluY2x1ZGVzIGNoYXJhY3RlcnMg
eW91IGNhbid0IGVuY29kZQogICAgIC8vIGluIHRoZSB3ZWJzaXRlJ3MgY2hhcmFjdGVyIHNldC4K
ICAgICBhcHBlbmQoYnVmZmVyLCAiOyBmaWxlbmFtZT1cIiIpOwotICAgIGFwcGVuZFF1b3RlZFN0
cmluZyhidWZmZXIsIGVuY29kaW5nLmVuY29kZShmaWxlbmFtZSwgUXVlc3Rpb25NYXJrc0ZvclVu
ZW5jb2RhYmxlcykpOworICAgIGFwcGVuZFF1b3RlZChidWZmZXIsIGVuY29kaW5nLmVuY29kZShm
aWxlbmFtZSwgVW5lbmNvZGFibGVIYW5kbGluZzo6UXVlc3Rpb25NYXJrcykpOwogICAgIGFwcGVu
ZChidWZmZXIsICciJyk7CiB9CiAKLXZvaWQgRm9ybURhdGFCdWlsZGVyOjphZGRDb250ZW50VHlw
ZVRvTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCBDU3RyaW5nJiBt
aW1lVHlwZSkKK3ZvaWQgYWRkQ29udGVudFR5cGVUb011bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hh
cj4mIGJ1ZmZlciwgY29uc3QgQ1N0cmluZyYgbWltZVR5cGUpCiB7CiAgICAgQVNTRVJUKEJsb2I6
OmlzTm9ybWFsaXplZENvbnRlbnRUeXBlKG1pbWVUeXBlKSk7CiAgICAgYXBwZW5kKGJ1ZmZlciwg
IlxyXG5Db250ZW50LVR5cGU6ICIpOwogICAgIGFwcGVuZChidWZmZXIsIG1pbWVUeXBlKTsKIH0K
IAotdm9pZCBGb3JtRGF0YUJ1aWxkZXI6OmZpbmlzaE11bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hh
cj4mIGJ1ZmZlcikKK3ZvaWQgZmluaXNoTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYgYnVm
ZmVyKQogewogICAgIGFwcGVuZChidWZmZXIsICJcclxuXHJcbiIpOwogfQogCi12b2lkIEZvcm1E
YXRhQnVpbGRlcjo6YWRkS2V5VmFsdWVQYWlyQXNGb3JtRGF0YShWZWN0b3I8Y2hhcj4mIGJ1ZmZl
ciwgY29uc3QgQ1N0cmluZyYga2V5LCBjb25zdCBDU3RyaW5nJiB2YWx1ZSwgRm9ybURhdGE6OkVu
Y29kaW5nVHlwZSBlbmNvZGluZ1R5cGUpCit2b2lkIGFkZEtleVZhbHVlUGFpckFzRm9ybURhdGEo
VmVjdG9yPGNoYXI+JiBidWZmZXIsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBjb25zdCBW
ZWN0b3I8dWludDhfdD4mIHZhbHVlLCBGb3JtRGF0YTo6RW5jb2RpbmdUeXBlIGVuY29kaW5nVHlw
ZSkKIHsKICAgICBpZiAoZW5jb2RpbmdUeXBlID09IEZvcm1EYXRhOjpUZXh0UGxhaW4pIHsKICAg
ICAgICAgaWYgKCFidWZmZXIuaXNFbXB0eSgpKQpAQCAtMTcxLDMzICsyMDMsMTcgQEAgdm9pZCBG
b3JtRGF0YUJ1aWxkZXI6OmFkZEtleVZhbHVlUGFpckFzRm9ybURhdGEoVmVjdG9yPGNoYXI+JiBi
dWZmZXIsIGNvbnN0IENTdHIKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIWJ1ZmZlci5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCAnJicpOwotICAgICAgICBlbmNvZGVT
dHJpbmdBc0Zvcm1EYXRhKGJ1ZmZlciwga2V5KTsKKyAgICAgICAgYXBwZW5kRm9ybVVSTEVuY29k
ZWQoYnVmZmVyLCBrZXkpOwogICAgICAgICBhcHBlbmQoYnVmZmVyLCAnPScpOwotICAgICAgICBl
bmNvZGVTdHJpbmdBc0Zvcm1EYXRhKGJ1ZmZlciwgdmFsdWUpOworICAgICAgICBhcHBlbmRGb3Jt
VVJMRW5jb2RlZChidWZmZXIsIHZhbHVlKTsKICAgICB9CiB9CiAKLXZvaWQgRm9ybURhdGFCdWls
ZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCBD
U3RyaW5nJiBzdHJpbmcpCit2b2lkIGVuY29kZVN0cmluZ0FzRm9ybURhdGEoVmVjdG9yPGNoYXI+
JiBidWZmZXIsIGNvbnN0IENTdHJpbmcmIHN0cmluZykKIHsKLSAgICAvLyBTYW1lIHNhZmUgY2hh
cmFjdGVycyBhcyBOZXRzY2FwZSBmb3IgY29tcGF0aWJpbGl0eS4KLSAgICBzdGF0aWMgY29uc3Qg
Y2hhciBzYWZlQ2hhcmFjdGVyc1tdID0gIi0uXyoiOwotCi0gICAgLy8gaHR0cDovL3d3dy53My5v
cmcvVFIvaHRtbDQvaW50ZXJhY3QvZm9ybXMuaHRtbCNoLTE3LjEzLjQuMQotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gc3RyaW5nLmRhdGEoKVtp
XTsKKyAgICBhcHBlbmRGb3JtVVJMRW5jb2RlZChidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KHN0cmluZy5kYXRhKCkpLCBzdHJpbmcubGVuZ3RoKCkpOworfQogCi0gICAg
ICAgIGlmIChpc0FTQ0lJQWxwaGFudW1lcmljKGMpIHx8IHN0cmNocihzYWZlQ2hhcmFjdGVycywg
YykpCi0gICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCBjKTsKLSAgICAgICAgZWxzZSBpZiAoYyA9
PSAnICcpCi0gICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCAnKycpOwotICAgICAgICBlbHNlIGlm
IChjID09ICdcbicgfHwgKGMgPT0gJ1xyJyAmJiAoaSArIDEgPj0gbGVuZ3RoIHx8IHN0cmluZy5k
YXRhKClbaSArIDFdICE9ICdcbicpKSkKLSAgICAgICAgICAgIGFwcGVuZChidWZmZXIsICIlMEQl
MEEiKTsKLSAgICAgICAgZWxzZSBpZiAoYyAhPSAnXHInKSB7Ci0gICAgICAgICAgICBhcHBlbmQo
YnVmZmVyLCAnJScpOwotICAgICAgICAgICAgYXBwZW5kQnl0ZUFzSGV4KGMsIGJ1ZmZlcik7Ci0g
ICAgICAgIH0KLSAgICB9CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5oCmluZGV4IDdhZGVjYWE2NmE3YWQwZTdjOGMxY2E2ZDM3
ZjEyZWRkOTk2ZTllNmIuLmQwZTA3YmNkMDhmZDNkNGMxYjljYmE1MjVhMTNjMTM5NmIyYTgyYWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWls
ZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YUJ1aWxk
ZXIuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9i
aWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29t
LykKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE4LDggKzE5LDcgQEAKICAqCiAgKi8KIAotI2lmbmRl
ZiBGb3JtRGF0YUJ1aWxkZXJfaAotI2RlZmluZSBGb3JtRGF0YUJ1aWxkZXJfaAorI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlICJGb3JtRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBA
IC0yOCwyNSArMjgsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBUZXh0RW5jb2Rp
bmc7CiAKLWNsYXNzIEZvcm1EYXRhQnVpbGRlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
Rm9ybURhdGFCdWlsZGVyKTsKLXB1YmxpYzoKLSAgICAvLyBIZWxwZXIgZnVuY3Rpb25zIHVzZWQg
YnkgSFRNTEZvcm1FbGVtZW50IGZvciBtdWx0aS1wYXJ0IGZvcm0gZGF0YQotICAgIHN0YXRpYyBW
ZWN0b3I8Y2hhcj4gZ2VuZXJhdGVVbmlxdWVCb3VuZGFyeVN0cmluZygpOwotICAgIHN0YXRpYyB2
b2lkIGJlZ2luTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYsIGNvbnN0IENTdHJpbmcmIGJv
dW5kYXJ5LCBjb25zdCBDU3RyaW5nJiBuYW1lKTsKLSAgICBzdGF0aWMgdm9pZCBhZGRCb3VuZGFy
eVRvTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYsIGNvbnN0IENTdHJpbmcmIGJvdW5kYXJ5
LCBib29sIGlzTGFzdEJvdW5kYXJ5ID0gZmFsc2UpOwotICAgIHN0YXRpYyB2b2lkIGFkZEZpbGVu
YW1lVG9NdWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+JiwgY29uc3QgVGV4dEVuY29kaW5nJiwg
Y29uc3QgU3RyaW5nJiBmaWxlbmFtZSk7Ci0gICAgc3RhdGljIHZvaWQgYWRkQ29udGVudFR5cGVU
b011bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4mLCBjb25zdCBDU3RyaW5nJiBtaW1lVHlwZSk7
Ci0gICAgc3RhdGljIHZvaWQgZmluaXNoTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYpOwot
Ci0gICAgLy8gSGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IEhUTUxGb3JtRWxlbWVudCBmb3Igbm9u
IG11bHRpLXBhcnQgZm9ybSBkYXRhCi0gICAgc3RhdGljIHZvaWQgYWRkS2V5VmFsdWVQYWlyQXNG
b3JtRGF0YShWZWN0b3I8Y2hhcj4mLCBjb25zdCBDU3RyaW5nJiBrZXksIGNvbnN0IENTdHJpbmcm
IHZhbHVlLCBGb3JtRGF0YTo6RW5jb2RpbmdUeXBlID0gRm9ybURhdGE6OkZvcm1VUkxFbmNvZGVk
KTsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKFZlY3RvcjxjaGFyPiYs
IGNvbnN0IENTdHJpbmcmKTsKLQotcHJpdmF0ZToKLSAgICBGb3JtRGF0YUJ1aWxkZXIoKSB7fQot
fTsKK25hbWVzcGFjZSBGb3JtRGF0YUJ1aWxkZXIgeworCisvLyBIZWxwZXIgZnVuY3Rpb25zIHVz
ZWQgYnkgSFRNTEZvcm1FbGVtZW50IGZvciBtdWx0aS1wYXJ0IGZvcm0gZGF0YS4KK1ZlY3Rvcjxj
aGFyPiBnZW5lcmF0ZVVuaXF1ZUJvdW5kYXJ5U3RyaW5nKCk7Cit2b2lkIGJlZ2luTXVsdGlQYXJ0
SGVhZGVyKFZlY3RvcjxjaGFyPiYsIGNvbnN0IENTdHJpbmcmIGJvdW5kYXJ5LCBjb25zdCBWZWN0
b3I8dWludDhfdD4mIG5hbWUpOwordm9pZCBhZGRCb3VuZGFyeVRvTXVsdGlQYXJ0SGVhZGVyKFZl
Y3RvcjxjaGFyPiYsIGNvbnN0IENTdHJpbmcmIGJvdW5kYXJ5LCBib29sIGlzTGFzdEJvdW5kYXJ5
ID0gZmFsc2UpOwordm9pZCBhZGRGaWxlbmFtZVRvTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFy
PiYsIGNvbnN0IFRleHRFbmNvZGluZyYsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpOwordm9pZCBh
ZGRDb250ZW50VHlwZVRvTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYsIGNvbnN0IENTdHJp
bmcmIG1pbWVUeXBlKTsKK3ZvaWQgZmluaXNoTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYp
OworCisvLyBIZWxwZXIgZnVuY3Rpb25zIHVzZWQgYnkgSFRNTEZvcm1FbGVtZW50IGZvciBub24t
bXVsdGktcGFydCBmb3JtIGRhdGEuCit2b2lkIGFkZEtleVZhbHVlUGFpckFzRm9ybURhdGEoVmVj
dG9yPGNoYXI+JiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYgdmFsdWUsIEZvcm1EYXRhOjpFbmNvZGluZ1R5cGUgPSBGb3JtRGF0YTo6Rm9ybVVSTEVu
Y29kZWQpOwordm9pZCBlbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKFZlY3RvcjxjaGFyPiYsIGNvbnN0
IENTdHJpbmcmKTsKIAogfQogCi0jZW5kaWYKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsRGVs
ZWdhdGUuY3BwCmluZGV4IDdhNzU5YzRhOWZlN2QwMmQ1MjQzOWE4OGZhMzI2OWE5YTgzMmE0MGQu
LjI3ODQzOWUxNTIwMTk3M2Q3YTZjYTVlOTQzMGQ2ODM4OTMzNzMxYmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxl
Z2F0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291
cmNlSGFuZGxlQ3VybERlbGVnYXRlLmNwcApAQCAtNDU3LDkgKzQ1Nyw5IEBAIHZvaWQgUmVzb3Vy
Y2VIYW5kbGVDdXJsRGVsZWdhdGU6OmhhbmRsZURhdGFVUkwoKQogCiAgICAgICAgIC8vIGRpZFJl
Y2VpdmVSZXNwb25zZSBtaWdodCBjYXVzZSB0aGUgY2xpZW50IHRvIGJlIGRlbGV0ZWQuCiAgICAg
ICAgIGlmIChtX2hhbmRsZS0+Y2xpZW50KCkpIHsKLSAgICAgICAgICAgIENTdHJpbmcgZW5jb2Rl
ZERhdGEgPSBlbmNvZGluZy5lbmNvZGUoZGF0YSwgVVJMRW5jb2RlZEVudGl0aWVzRm9yVW5lbmNv
ZGFibGVzKTsKLSAgICAgICAgICAgIGlmIChlbmNvZGVkRGF0YS5sZW5ndGgoKSkKLSAgICAgICAg
ICAgICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZFJlY2VpdmVCdWZmZXIobV9oYW5kbGUsIFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZWREYXRhLmRhdGEoKSwgZW5jb2RlZERhdGEubGVuZ3Ro
KCkpLCBvcmlnaW5hbFNpemUpOworICAgICAgICAgICAgYXV0byBlbmNvZGVkRGF0YSA9IGVuY29k
aW5nLmVuY29kZShkYXRhLCBVUkxFbmNvZGVkRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOworICAg
ICAgICAgICAgaWYgKGVuY29kZWREYXRhLnNpemUoKSkKKyAgICAgICAgICAgICAgICBtX2hhbmRs
ZS0+Y2xpZW50KCktPmRpZFJlY2VpdmVCdWZmZXIobV9oYW5kbGUsIFNoYXJlZEJ1ZmZlcjo6Y3Jl
YXRlKFdURk1vdmUoZW5jb2RlZERhdGEpKSwgb3JpZ2luYWxTaXplKTsKICAgICAgICAgfQogICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EZWNvZGVFc2Nh
cGVTZXF1ZW5jZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBl
U2VxdWVuY2VzLmgKaW5kZXggYjhjODM5ZDgwM2M0Zjk3MzdhYWMzZmZkY2RhOTEwOTk0YTAwNDcw
NC4uMTRjZjQxNTM2ZjMwZWQ2NzZjYTJlOGMzNjk5NzFkZjEyZTAzOGZmNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RlY29kZUVzY2FwZVNlcXVlbmNlcy5oCkBA
IC0yNyw4ICsyNyw3IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgRGVjb2RlRXNj
YXBlU2VxdWVuY2VzX2gKLSNkZWZpbmUgRGVjb2RlRXNjYXBlU2VxdWVuY2VzX2gKKyNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5
cGUuaD4KQEAgLTE1NSwxMSArMTU0LDExIEBAIFN0cmluZyBkZWNvZGVFc2NhcGVTZXF1ZW5jZXMo
U3RyaW5nVmlldyBzdHJpbmcsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCiAgICAgcmV0
dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCi1pbmxpbmUgVmVjdG9yPGNoYXI+IGRlY29kZVVS
TEVzY2FwZVNlcXVlbmNlc0FzRGF0YShTdHJpbmdWaWV3IHN0cmluZywgY29uc3QgVGV4dEVuY29k
aW5nJiBlbmNvZGluZykKK2lubGluZSBWZWN0b3I8dWludDhfdD4gZGVjb2RlVVJMRXNjYXBlU2Vx
dWVuY2VzQXNEYXRhKFN0cmluZ1ZpZXcgc3RyaW5nLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29k
aW5nKQogewogICAgIEFTU0VSVChlbmNvZGluZy5pc1ZhbGlkKCkpOwogCi0gICAgVmVjdG9yPGNo
YXI+IHJlc3VsdDsKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OwogICAgIHNpemVfdCBkZWNv
ZGVkUG9zaXRpb24gPSAwOwogICAgIHNpemVfdCBzZWFyY2hQb3NpdGlvbiA9IDA7CiAgICAgd2hp
bGUgKHRydWUpIHsKQEAgLTE3MywxMCArMTcyLDkgQEAgaW5saW5lIFZlY3RvcjxjaGFyPiBkZWNv
ZGVVUkxFc2NhcGVTZXF1ZW5jZXNBc0RhdGEoU3RyaW5nVmlldyBzdHJpbmcsIGNvbnN0IFRleHQK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAg
ICAgICAgIC8vIFN0cmluZ3MgYXJlIGVuY29kZWQgYXMgcmVxdWVzdGVkLgotICAgICAgICBhdXRv
IHN0cmluZ0ZyYWdtZW50ID0gc3RyaW5nLnN1YnN0cmluZyhkZWNvZGVkUG9zaXRpb24sIGVuY29k
ZWRSdW5Qb3NpdGlvbiAtIGRlY29kZWRQb3NpdGlvbik7Ci0gICAgICAgIGF1dG8gZW5jb2RlZFN0
cmluZ0ZyYWdtZW50ID0gZW5jb2RpbmcuZW5jb2RlKHN0cmluZ0ZyYWdtZW50LCBVUkxFbmNvZGVk
RW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGVuY29kZWRT
dHJpbmdGcmFnbWVudC5kYXRhKCksIGVuY29kZWRTdHJpbmdGcmFnbWVudC5sZW5ndGgoKSk7Cisg
ICAgICAgIHJlc3VsdC5hcHBlbmRWZWN0b3IoZW5jb2RpbmcuZW5jb2RlKHN0cmluZy5zdWJzdHJp
bmcoZGVjb2RlZFBvc2l0aW9uLCBlbmNvZGVkUnVuUG9zaXRpb24gLSBkZWNvZGVkUG9zaXRpb24p
LCBVbmVuY29kYWJsZUhhbmRsaW5nOjpVUkxFbmNvZGVkRW50aXRpZXMpKTsKIAogICAgICAgICBp
ZiAoZW5jb2RlZFJ1blBvc2l0aW9uID09IG5vdEZvdW5kKQogICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKQEAgLTE5Miw0ICsxOTAsMyBAQCBpbmxpbmUgVmVjdG9yPGNoYXI+IGRlY29kZVVSTEVz
Y2FwZVNlcXVlbmNlc0FzRGF0YShTdHJpbmdWaWV3IHN0cmluZywgY29uc3QgVGV4dAogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBEZWNvZGVFc2NhcGVTZXF1ZW5jZXNfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuY3BwCmluZGV4IDYzYWVmNDdk
NzM1NDQyNjIzY2Y0NmVjNGYzYzEyYmY1ZDAxZmFhYjMuLjg2Yjg5Y2ZjNDc2ZjAzYjZkYjRmNzhm
YjQyYzE4M2Y0ODk3ZGFkODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dENvZGVjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRD
b2RlYy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApA
QCAtMjcsMjkgKzI3LDI0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGV4dENv
ZGVjLmgiCiAKLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8YXJyYXk+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotVGV4dENvZGVjOjp+VGV4dENvZGVjKCkgPSBkZWZhdWx0OwotCi1pbnQgVGV4dENvZGVjOjpn
ZXRVbmVuY29kYWJsZVJlcGxhY2VtZW50KHVuc2lnbmVkIGNvZGVQb2ludCwgVW5lbmNvZGFibGVI
YW5kbGluZyBoYW5kbGluZywgVW5lbmNvZGFibGVSZXBsYWNlbWVudEFycmF5IHJlcGxhY2VtZW50
KQoraW50IFRleHRDb2RlYzo6Z2V0VW5lbmNvZGFibGVSZXBsYWNlbWVudChVQ2hhcjMyIGNvZGVQ
b2ludCwgVW5lbmNvZGFibGVIYW5kbGluZyBoYW5kbGluZywgVW5lbmNvZGFibGVSZXBsYWNlbWVu
dEFycmF5JiByZXBsYWNlbWVudCkKIHsKICAgICBzd2l0Y2ggKGhhbmRsaW5nKSB7Ci0gICAgICAg
IGNhc2UgUXVlc3Rpb25NYXJrc0ZvclVuZW5jb2RhYmxlczoKLSAgICAgICAgICAgIHJlcGxhY2Vt
ZW50WzBdID0gJz8nOwotICAgICAgICAgICAgcmVwbGFjZW1lbnRbMV0gPSAwOwotICAgICAgICAg
ICAgcmV0dXJuIDE7Ci0gICAgICAgIGNhc2UgRW50aXRpZXNGb3JVbmVuY29kYWJsZXM6Ci0gICAg
ICAgICAgICBzbnByaW50ZihyZXBsYWNlbWVudCwgc2l6ZW9mKFVuZW5jb2RhYmxlUmVwbGFjZW1l
bnRBcnJheSksICImIyV1OyIsIGNvZGVQb2ludCk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50PihzdHJsZW4ocmVwbGFjZW1lbnQpKTsKLSAgICAgICAgY2FzZSBVUkxFbmNvZGVk
RW50aXRpZXNGb3JVbmVuY29kYWJsZXM6Ci0gICAgICAgICAgICBzbnByaW50ZihyZXBsYWNlbWVu
dCwgc2l6ZW9mKFVuZW5jb2RhYmxlUmVwbGFjZW1lbnRBcnJheSksICIlJTI2JSUyMyV1JSUzQiIs
IGNvZGVQb2ludCk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihzdHJsZW4o
cmVwbGFjZW1lbnQpKTsKKyAgICBjYXNlIFVuZW5jb2RhYmxlSGFuZGxpbmc6OlF1ZXN0aW9uTWFy
a3M6CisgICAgICAgIHJlcGxhY2VtZW50LmRhdGEoKVswXSA9ICc/JzsKKyAgICAgICAgcmVwbGFj
ZW1lbnQuZGF0YSgpWzFdID0gMDsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBVbmVuY29k
YWJsZUhhbmRsaW5nOjpFbnRpdGllczoKKyAgICAgICAgcmV0dXJuIHNucHJpbnRmKHJlcGxhY2Vt
ZW50LmRhdGEoKSwgc2l6ZW9mKFVuZW5jb2RhYmxlUmVwbGFjZW1lbnRBcnJheSksICImIyV1OyIs
IGNvZGVQb2ludCk7CisgICAgY2FzZSBVbmVuY29kYWJsZUhhbmRsaW5nOjpVUkxFbmNvZGVkRW50
aXRpZXM6CisgICAgICAgIHJldHVybiBzbnByaW50ZihyZXBsYWNlbWVudC5kYXRhKCksIHNpemVv
ZihVbmVuY29kYWJsZVJlcGxhY2VtZW50QXJyYXkpLCAiJSUyNiUlMjMldSUlM0IiLCBjb2RlUG9p
bnQpOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXBsYWNlbWVudFsw
XSA9IDA7CisgICAgcmVwbGFjZW1lbnQuZGF0YSgpWzBdID0gMDsKICAgICByZXR1cm4gMDsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjLmgKaW5kZXggZjMwY2QxMjYx
NWU1M2UwOTVhNTkyZjM5ZmY4ZTljNzdjYWEzYWE3Zi4uNDgzZTUwMWU2YjhlMmU0MDc4MjlkYmYx
YWEwNDhjNTZmN2FjZDcxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0Q29kZWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2Rl
Yy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFs
ZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI0
LDYxICsyNCwzOSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBUZXh0Q29kZWNf
aAotI2RlZmluZSBUZXh0Q29kZWNfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxtZW1vcnk+
CisjaW5jbHVkZSA8cGFsL3RleHQvVW5lbmNvZGFibGVIYW5kbGluZy5oPgorI2luY2x1ZGUgPHVu
aWNvZGUvdW1hY2hpbmUuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgVGV4dEVuY29kaW5nOwogCi0gICAgLy8gU3BlY2lm
aWVzIHdoYXQgd2lsbCBoYXBwZW4gd2hlbiBhIGNoYXJhY3RlciBpcyBlbmNvdW50ZXJlZCB0aGF0
IGlzCi0gICAgLy8gbm90IGVuY29kYWJsZSBpbiB0aGUgY2hhcmFjdGVyIHNldC4KLSAgICBlbnVt
IFVuZW5jb2RhYmxlSGFuZGxpbmcgewotICAgICAgICAvLyBTdWJzdGl0dXRlcyB0aGUgcmVwbGFj
ZW1lbnQgY2hhcmFjdGVyICI/Ii4KLSAgICAgICAgUXVlc3Rpb25NYXJrc0ZvclVuZW5jb2RhYmxl
cywKK2NsYXNzIFRleHRFbmNvZGluZzsKIAotICAgICAgICAvLyBFbmNvZGVzIHRoZSBjaGFyYWN0
ZXIgYXMgYW4gWE1MIGVudGl0eS4gRm9yIGV4YW1wbGUsIFUrMDZERQotICAgICAgICAvLyB3b3Vs
ZCBiZSAiJiMxNzU4OyIgKDB4NkRFID0gMTc1OCBpbiBvY3RhbCkuCi0gICAgICAgIEVudGl0aWVz
Rm9yVW5lbmNvZGFibGVzLAordXNpbmcgVW5lbmNvZGFibGVSZXBsYWNlbWVudEFycmF5ID0gc3Rk
OjphcnJheTxjaGFyLCAzMj47CiAKLSAgICAgICAgLy8gRW5jb2RlcyB0aGUgY2hhcmFjdGVyIGFz
IGVuIGVudGl0eSBhcyBhYm92ZSwgYnV0IGVzY2FwZWQKLSAgICAgICAgLy8gbm9uLWFscGhhbnVt
ZXJpYyBjaGFyYWN0ZXJzLiBUaGlzIGlzIHVzZWQgaW4gVVJMcy4KLSAgICAgICAgLy8gRm9yIGV4
YW1wbGUsIFUrNkRFIHdvdWxkIGJlICIlMjYlMjMxNzU4JTNCIi4KLSAgICAgICAgVVJMRW5jb2Rl
ZEVudGl0aWVzRm9yVW5lbmNvZGFibGVzCi0gICAgfTsKK2NsYXNzIFRleHRDb2RlYyB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoVGV4dENvZGVjKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgVGV4dENvZGVjKCkgPSBkZWZhdWx0OworICAgIHZpcnR1YWwgflRleHRD
b2RlYygpID0gZGVmYXVsdDsKIAotICAgIHR5cGVkZWYgY2hhciBVbmVuY29kYWJsZVJlcGxhY2Vt
ZW50QXJyYXlbMzJdOworICAgIHZpcnR1YWwgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6
ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3Ip
ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiBlbmNvZGUoU3RyaW5nVmlldywgVW5l
bmNvZGFibGVIYW5kbGluZykgPSAwOwogCi0gICAgY2xhc3MgVGV4dENvZGVjIHsKLSAgICAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoVGV4dENvZGVjKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci0gICAgcHVibGljOgotICAgICAgICBUZXh0Q29kZWMoKSB7IH0KLSAgICAgICAgdmlydHVhbCB+
VGV4dENvZGVjKCk7CisgICAgLy8gRmlsbHMgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHJlcHJl
c2VudGF0aW9uIG9mIHRoZSBnaXZlbgorICAgIC8vIHVuZW5jb2RhYmxlIGNoYXJhY3RlciBpbnRv
IHRoZSBnaXZlbiByZXBsYWNlbWVudCBidWZmZXIuCisgICAgLy8gVGhlIGxlbmd0aCBvZiB0aGUg
c3RyaW5nIChub3QgaW5jbHVkaW5nIHRoZSBudWxsKSB3aWxsIGJlIHJldHVybmVkLgorICAgIHN0
YXRpYyBpbnQgZ2V0VW5lbmNvZGFibGVSZXBsYWNlbWVudChVQ2hhcjMyLCBVbmVuY29kYWJsZUhh
bmRsaW5nLCBVbmVuY29kYWJsZVJlcGxhY2VtZW50QXJyYXkmKTsKK307CiAKLSAgICAgICAgU3Ry
aW5nIGRlY29kZShjb25zdCBjaGFyKiBzdHIsIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2ggPSBm
YWxzZSkKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbCBpZ25vcmVkOwotICAgICAgICAgICAg
cmV0dXJuIGRlY29kZShzdHIsIGxlbmd0aCwgZmx1c2gsIGZhbHNlLCBpZ25vcmVkKTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgdmlydHVhbCBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIq
LCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdF
cnJvcikgPSAwOwotICAgICAgICB2aXJ0dWFsIENTdHJpbmcgZW5jb2RlKGNvbnN0IFVDaGFyKiwg
c2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZykgPSAwOwordXNpbmcgRW5jb2RpbmdO
YW1lUmVnaXN0cmFyID0gdm9pZCAoKikoY29uc3QgY2hhciogYWxpYXMsIGNvbnN0IGNoYXIqIG5h
bWUpOwogCi0gICAgICAgIC8vIEZpbGxzIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyByZXByZXNl
bnRhdGlvbiBvZiB0aGUgZ2l2ZW4KLSAgICAgICAgLy8gdW5lbmNvZGFibGUgY2hhcmFjdGVyIGlu
dG8gdGhlIGdpdmVuIHJlcGxhY2VtZW50IGJ1ZmZlci4gCi0gICAgICAgIC8vIFRoZSBsZW5ndGgg
b2YgdGhlIHN0cmluZyAobm90IGluY2x1ZGluZyB0aGUgbnVsbCkgd2lsbCBiZSByZXR1cm5lZC4K
LSAgICAgICAgc3RhdGljIGludCBnZXRVbmVuY29kYWJsZVJlcGxhY2VtZW50KHVuc2lnbmVkIGNv
ZGVQb2ludCwgVW5lbmNvZGFibGVIYW5kbGluZywgVW5lbmNvZGFibGVSZXBsYWNlbWVudEFycmF5
KTsKLSAgICB9OwotCi0gICAgdHlwZWRlZiB2b2lkICgqRW5jb2RpbmdOYW1lUmVnaXN0cmFyKShj
b25zdCBjaGFyKiBhbGlhcywgY29uc3QgY2hhciogbmFtZSk7Ci0KLSAgICB0eXBlZGVmIHN0ZDo6
dW5pcXVlX3B0cjxUZXh0Q29kZWM+ICgqTmV3VGV4dENvZGVjRnVuY3Rpb24pKGNvbnN0IFRleHRF
bmNvZGluZyYsIGNvbnN0IHZvaWQqIGFkZGl0aW9uYWxEYXRhKTsKLSAgICB0eXBlZGVmIHZvaWQg
KCpUZXh0Q29kZWNSZWdpc3RyYXIpKGNvbnN0IGNoYXIqIG5hbWUsIE5ld1RleHRDb2RlY0Z1bmN0
aW9uLCBjb25zdCB2b2lkKiBhZGRpdGlvbmFsRGF0YSk7Cit1c2luZyBOZXdUZXh0Q29kZWNGdW5j
dGlvbiA9IFdURjo6RnVuY3Rpb248c3RkOjp1bmlxdWVfcHRyPFRleHRDb2RlYz4oKT47Cit1c2lu
ZyBUZXh0Q29kZWNSZWdpc3RyYXIgPSB2b2lkICgqKShjb25zdCBjaGFyKiBuYW1lLCBOZXdUZXh0
Q29kZWNGdW5jdGlvbiYmKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8g
VGV4dENvZGVjX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dENvZGVjSUNVLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNV
LmNwcAppbmRleCA2ZTI3MzY2OTljOGFhNjkzMzdkYWM3ZDMzOTExMDk0NDVmMDYyM2Y1Li5kMmUy
YWU3ZmI5MmZmM2FkOGMyZDljNzNkMjA5NWE5NDI2OWIxYzhlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCwgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3Nr
dXJ5YWtvdiA8YXBAbnlwb3AuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzAsMTAgKzMwLDgg
QEAKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmdSZWdp
c3RyeS5oIgogI2luY2x1ZGUgIlRocmVhZEdsb2JhbERhdGEuaCIKLSNpbmNsdWRlIDx1bmljb2Rl
L3VjbnYuaD4KKyNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDx1bmljb2RlL3VjbnZfY2IuaD4K
LSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMu
aD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KQEAgLTQzLDIzICs0MSw2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY29uc3Qgc2l6ZV90IENvbnZlcnNpb25CdWZmZXJT
aXplID0gMTYzODQ7CiAKLUlDVUNvbnZlcnRlcldyYXBwZXI6On5JQ1VDb252ZXJ0ZXJXcmFwcGVy
KCkKLXsKLSAgICBpZiAoY29udmVydGVyKQotICAgICAgICB1Y252X2Nsb3NlKGNvbnZlcnRlcik7
Ci19Ci0KLXN0YXRpYyBVQ29udmVydGVyKiYgY2FjaGVkQ29udmVydGVySUNVKCkKLXsKLSAgICBy
ZXR1cm4gdGhyZWFkR2xvYmFsRGF0YSgpLmNhY2hlZENvbnZlcnRlcklDVSgpLmNvbnZlcnRlcjsK
LX0KLQotc3RkOjp1bmlxdWVfcHRyPFRleHRDb2RlYz4gVGV4dENvZGVjSUNVOjpjcmVhdGUoY29u
c3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgY29uc3Qgdm9pZCogYWRkaXRpb25hbERhdGEpCi17
Ci0gICAgLy8gTmFtZSBzdHJpbmdzIGFyZSBwZXJzaXN0ZW50bHkga2VwdCBpbiBUZXh0RW5jb2Rp
bmdSZWdpc3RyeSBtYXBzLCBzbyB0aGV5IGFyZSBuZXZlciBkZWxldGVkLgotICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPFRleHRDb2RlY0lDVT4oZW5jb2RpbmcubmFtZSgpLCBzdGF0aWNfY2Fz
dDxjb25zdCBjaGFyKj4oYWRkaXRpb25hbERhdGEpKTsKLX0KLQogI2RlZmluZSBERUNMQVJFX0FM
SUFTRVMoZW5jb2RpbmcsIC4uLikgXAogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbmNv
ZGluZyMjX2FsaWFzZXNbXSB7IF9fVkFfQVJHU19fIH0KIApAQCAtMTY5LDExNCArMTUwLDExNSBA
QCB2b2lkIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJl
Z2lzdHJhciByZWdpc3RyYXIpCiB2b2lkIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJDb2RlY3MoVGV4
dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKIHsKICAgICBmb3IgKGF1dG8mIGVuY29kaW5nTmFt
ZSA6IGVuY29kaW5nTmFtZXMpIHsKKyAgICAgICAgY29uc3QgY2hhciogbmFtZSA9IGVuY29kaW5n
TmFtZS5uYW1lOworCiAgICAgICAgIC8vIFRoZXNlIGVuY29kaW5ncyBjdXJyZW50bHkgZG9uJ3Qg
aGF2ZSBzdGFuZGFyZCBuYW1lcywgc28gd2UgbmVlZCB0byByZWdpc3RlciBlbmNvZGVycyBtYW51
YWxseS4KICAgICAgICAgLy8gaHR0cDovL2RlbW8uaWN1LXByb2plY3Qub3JnL2ljdS1iaW4vY29u
dmV4cAotICAgICAgICBpZiAoIXN0cmNtcChlbmNvZGluZ05hbWUubmFtZSwgIndpbmRvd3MtODc0
IikpIHsKLSAgICAgICAgICAgIHJlZ2lzdHJhcihlbmNvZGluZ05hbWUubmFtZSwgY3JlYXRlLCAi
d2luZG93cy04NzQtMjAwMCIpOworICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAid2luZG93cy04
NzQiKSkgeworICAgICAgICAgICAgcmVnaXN0cmFyKG5hbWUsIFtuYW1lXSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjSUNVPihuYW1lLCAid2luZG93
cy04NzQtMjAwMCIpOworICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgfQotICAgICAgICBpZiAoIXN0cmNtcChlbmNvZGluZ05hbWUubmFtZSwgIndpbmRvd3Mt
OTQ5IikpIHsKLSAgICAgICAgICAgIHJlZ2lzdHJhcihlbmNvZGluZ05hbWUubmFtZSwgY3JlYXRl
LCAid2luZG93cy05NDktMjAwMCIpOworICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAid2luZG93
cy05NDkiKSkgeworICAgICAgICAgICAgcmVnaXN0cmFyKG5hbWUsIFtuYW1lXSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjSUNVPihuYW1lLCAid2lu
ZG93cy05NDktMjAwMCIpOworICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQotICAgICAgICBpZiAoIXN0cmNtcChlbmNvZGluZ05hbWUubmFtZSwgIngtbWFj
LWN5cmlsbGljIikpIHsKLSAgICAgICAgICAgIHJlZ2lzdHJhcihlbmNvZGluZ05hbWUubmFtZSwg
Y3JlYXRlLCAibWFjb3MtN18zLTEwLjIiKTsKKyAgICAgICAgaWYgKCFzdHJjbXAobmFtZSwgIngt
bWFjLWN5cmlsbGljIikpIHsKKyAgICAgICAgICAgIHJlZ2lzdHJhcihuYW1lLCBbbmFtZV0gewor
ICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFRleHRDb2RlY0lDVT4obmFt
ZSwgIm1hY29zLTdfMy0xMC4yIik7CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmICghc3RyY21wKGVuY29kaW5nTmFtZS5uYW1lLCAi
eC1tYWMtZ3JlZWsiKSkgewotICAgICAgICAgICAgcmVnaXN0cmFyKGVuY29kaW5nTmFtZS5uYW1l
LCBjcmVhdGUsICJtYWNvcy02XzItMTAuNCIpOworICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAi
eC1tYWMtZ3JlZWsiKSkgeworICAgICAgICAgICAgcmVnaXN0cmFyKG5hbWUsIFtuYW1lXSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjSUNVPihuYW1l
LCAibWFjb3MtNl8yLTEwLjQiKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFzdHJjbXAoZW5jb2RpbmdOYW1lLm5hbWUsICJ4
LW1hYy1jZW50cmFsZXVycm9tYW4iKSkgewotICAgICAgICAgICAgcmVnaXN0cmFyKGVuY29kaW5n
TmFtZS5uYW1lLCBjcmVhdGUsICJtYWNvcy0yOS0xMC4yIik7CisgICAgICAgIGlmICghc3RyY21w
KG5hbWUsICJ4LW1hYy1jZW50cmFsZXVycm9tYW4iKSkgeworICAgICAgICAgICAgcmVnaXN0cmFy
KG5hbWUsIFtuYW1lXSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8
VGV4dENvZGVjSUNVPihuYW1lLCAibWFjb3MtMjktMTAuMiIpOworICAgICAgICAgICAgfSk7CiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoIXN0cmNtcChlbmNv
ZGluZ05hbWUubmFtZSwgIngtbWFjLXR1cmtpc2giKSkgewotICAgICAgICAgICAgcmVnaXN0cmFy
KGVuY29kaW5nTmFtZS5uYW1lLCBjcmVhdGUsICJtYWNvcy0zNS0xMC4yIik7CisgICAgICAgIGlm
ICghc3RyY21wKG5hbWUsICJ4LW1hYy10dXJraXNoIikpIHsKKyAgICAgICAgICAgIHJlZ2lzdHJh
cihuYW1lLCBbbmFtZV0geworICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVl
PFRleHRDb2RlY0lDVT4obmFtZSwgIm1hY29zLTM1LTEwLjIiKTsKKyAgICAgICAgICAgIH0pOwog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFzdHJjbXAoZW5j
b2RpbmdOYW1lLm5hbWUsICJFVUMtS1IiKSkgewotICAgICAgICAgICAgcmVnaXN0cmFyKGVuY29k
aW5nTmFtZS5uYW1lLCBjcmVhdGUsICJ3aW5kb3dzLTk0OSIpOworICAgICAgICBpZiAoIXN0cmNt
cChuYW1lLCAiRVVDLUtSIikpIHsKKyAgICAgICAgICAgIHJlZ2lzdHJhcihuYW1lLCBbbmFtZV0g
eworICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFRleHRDb2RlY0lDVT4o
bmFtZSwgIndpbmRvd3MtOTQ5Iik7CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9CiAKICAgICAgICAgVUVycm9yQ29kZSBlcnJvciA9IFVfWkVST19FUlJP
UjsKLSAgICAgICAgY29uc3QgY2hhciogY2Fub25pY2FsQ29udmVydGVyTmFtZSA9IHVjbnZfZ2V0
Q2Fub25pY2FsTmFtZShlbmNvZGluZ05hbWUubmFtZSwgIklBTkEiLCAmZXJyb3IpOworICAgICAg
ICBjb25zdCBjaGFyKiBjYW5vbmljYWxDb252ZXJ0ZXJOYW1lID0gdWNudl9nZXRDYW5vbmljYWxO
YW1lKG5hbWUsICJJQU5BIiwgJmVycm9yKTsKICAgICAgICAgQVNTRVJUKFVfU1VDQ0VTUyhlcnJv
cikpOwotICAgICAgICByZWdpc3RyYXIoZW5jb2RpbmdOYW1lLm5hbWUsIGNyZWF0ZSwgY2Fub25p
Y2FsQ29udmVydGVyTmFtZSk7CisgICAgICAgIHJlZ2lzdHJhcihuYW1lLCBbbmFtZSwgY2Fub25p
Y2FsQ29udmVydGVyTmFtZV0geworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8
VGV4dENvZGVjSUNVPihuYW1lLCBjYW5vbmljYWxDb252ZXJ0ZXJOYW1lKTsKKyAgICAgICAgfSk7
CiAgICAgfQogfQogCiBUZXh0Q29kZWNJQ1U6OlRleHRDb2RlY0lDVShjb25zdCBjaGFyKiBlbmNv
ZGluZywgY29uc3QgY2hhciogY2Fub25pY2FsQ29udmVydGVyTmFtZSkKICAgICA6IG1fZW5jb2Rp
bmdOYW1lKGVuY29kaW5nKQogICAgICwgbV9jYW5vbmljYWxDb252ZXJ0ZXJOYW1lKGNhbm9uaWNh
bENvbnZlcnRlck5hbWUpCi0gICAgLCBtX2NvbnZlcnRlcklDVSgwKQotICAgICwgbV9uZWVkc0dC
S0ZhbGxiYWNrcyhmYWxzZSkKIHsKIH0KIAogVGV4dENvZGVjSUNVOjp+VGV4dENvZGVjSUNVKCkK
IHsKLSAgICByZWxlYXNlSUNVQ29udmVydGVyKCk7Ci19Ci0KLXZvaWQgVGV4dENvZGVjSUNVOjpy
ZWxlYXNlSUNVQ29udmVydGVyKCkgY29uc3QKLXsKLSAgICBpZiAobV9jb252ZXJ0ZXJJQ1UpIHsK
LSAgICAgICAgVUNvbnZlcnRlciomIGNhY2hlZENvbnZlcnRlciA9IGNhY2hlZENvbnZlcnRlcklD
VSgpOwotICAgICAgICBpZiAoY2FjaGVkQ29udmVydGVyKQotICAgICAgICAgICAgdWNudl9jbG9z
ZShjYWNoZWRDb252ZXJ0ZXIpOwotICAgICAgICB1Y252X3Jlc2V0KG1fY29udmVydGVySUNVKTsK
LSAgICAgICAgY2FjaGVkQ29udmVydGVyID0gbV9jb252ZXJ0ZXJJQ1U7Ci0gICAgICAgIG1fY29u
dmVydGVySUNVID0gMDsKKyAgICBpZiAobV9jb252ZXJ0ZXIpIHsKKyAgICAgICAgdWNudl9yZXNl
dChtX2NvbnZlcnRlci5nZXQoKSk7CisgICAgICAgIHRocmVhZEdsb2JhbERhdGEoKS5jYWNoZWRD
b252ZXJ0ZXJJQ1UoKS5jb252ZXJ0ZXIgPSBXVEZNb3ZlKG1fY29udmVydGVyKTsKICAgICB9CiB9
CiAKIHZvaWQgVGV4dENvZGVjSUNVOjpjcmVhdGVJQ1VDb252ZXJ0ZXIoKSBjb25zdAogewotICAg
IEFTU0VSVCghbV9jb252ZXJ0ZXJJQ1UpOwotCi0gICAgVUVycm9yQ29kZSBlcnI7CisgICAgQVNT
RVJUKCFtX2NvbnZlcnRlcik7CiAKICAgICBtX25lZWRzR0JLRmFsbGJhY2tzID0gIXN0cmNtcCht
X2VuY29kaW5nTmFtZSwgIkdCSyIpOwogCi0gICAgVUNvbnZlcnRlciomIGNhY2hlZENvbnZlcnRl
ciA9IGNhY2hlZENvbnZlcnRlcklDVSgpOworICAgIGF1dG8mIGNhY2hlZENvbnZlcnRlciA9IHRo
cmVhZEdsb2JhbERhdGEoKS5jYWNoZWRDb252ZXJ0ZXJJQ1UoKS5jb252ZXJ0ZXI7CiAgICAgaWYg
KGNhY2hlZENvbnZlcnRlcikgewotICAgICAgICBlcnIgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAg
IGNvbnN0IGNoYXIqIGNhY2hlZENvbnZlcnRlck5hbWUgPSB1Y252X2dldE5hbWUoY2FjaGVkQ29u
dmVydGVyLCAmZXJyKTsKLSAgICAgICAgaWYgKFVfU1VDQ0VTUyhlcnIpICYmICFzdHJjbXAobV9j
YW5vbmljYWxDb252ZXJ0ZXJOYW1lLCBjYWNoZWRDb252ZXJ0ZXJOYW1lKSkgewotICAgICAgICAg
ICAgbV9jb252ZXJ0ZXJJQ1UgPSBjYWNoZWRDb252ZXJ0ZXI7Ci0gICAgICAgICAgICBjYWNoZWRD
b252ZXJ0ZXIgPSAwOworICAgICAgICBVRXJyb3JDb2RlIGVycm9yID0gVV9aRVJPX0VSUk9SOwor
ICAgICAgICBjb25zdCBjaGFyKiBjYWNoZWRDb252ZXJ0ZXJOYW1lID0gdWNudl9nZXROYW1lKGNh
Y2hlZENvbnZlcnRlci5nZXQoKSwgJmVycm9yKTsKKyAgICAgICAgaWYgKFVfU1VDQ0VTUyhlcnJv
cikgJiYgIXN0cmNtcChtX2Nhbm9uaWNhbENvbnZlcnRlck5hbWUsIGNhY2hlZENvbnZlcnRlck5h
bWUpKSB7CisgICAgICAgICAgICBtX2NvbnZlcnRlciA9IFdURk1vdmUoY2FjaGVkQ29udmVydGVy
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAotICAgIGVyciA9IFVf
WkVST19FUlJPUjsKLSAgICBtX2NvbnZlcnRlcklDVSA9IHVjbnZfb3BlbihtX2Nhbm9uaWNhbENv
bnZlcnRlck5hbWUsICZlcnIpOwotICAgIEFTU0VSVChVX1NVQ0NFU1MoZXJyKSk7Ci0gICAgaWYg
KG1fY29udmVydGVySUNVKQotICAgICAgICB1Y252X3NldEZhbGxiYWNrKG1fY29udmVydGVySUNV
LCBUUlVFKTsKKyAgICBVRXJyb3JDb2RlIGVycm9yID0gVV9aRVJPX0VSUk9SOworICAgIG1fY29u
dmVydGVyID0gSUNVQ29udmVydGVyUHRyIHsgdWNudl9vcGVuKG1fY2Fub25pY2FsQ29udmVydGVy
TmFtZSwgJmVycm9yKSwgdWNudl9jbG9zZSB9OworICAgIGlmIChtX2NvbnZlcnRlcikKKyAgICAg
ICAgdWNudl9zZXRGYWxsYmFjayhtX2NvbnZlcnRlci5nZXQoKSwgVFJVRSk7CiB9CiAKLWludCBU
ZXh0Q29kZWNJQ1U6OmRlY29kZVRvQnVmZmVyKFVDaGFyKiB0YXJnZXQsIFVDaGFyKiB0YXJnZXRM
aW1pdCwgY29uc3QgY2hhciomIHNvdXJjZSwgY29uc3QgY2hhciogc291cmNlTGltaXQsIGludDMy
X3QqIG9mZnNldHMsIGJvb2wgZmx1c2gsIFVFcnJvckNvZGUmIGVycikKK2ludCBUZXh0Q29kZWNJ
Q1U6OmRlY29kZVRvQnVmZmVyKFVDaGFyKiB0YXJnZXQsIFVDaGFyKiB0YXJnZXRMaW1pdCwgY29u
c3QgY2hhciomIHNvdXJjZSwgY29uc3QgY2hhciogc291cmNlTGltaXQsIGludDMyX3QqIG9mZnNl
dHMsIGJvb2wgZmx1c2gsIFVFcnJvckNvZGUmIGVycm9yKQogewogICAgIFVDaGFyKiB0YXJnZXRT
dGFydCA9IHRhcmdldDsKLSAgICBlcnIgPSBVX1pFUk9fRVJST1I7Ci0gICAgdWNudl90b1VuaWNv
ZGUobV9jb252ZXJ0ZXJJQ1UsICZ0YXJnZXQsIHRhcmdldExpbWl0LCAmc291cmNlLCBzb3VyY2VM
aW1pdCwgb2Zmc2V0cywgZmx1c2gsICZlcnIpOworICAgIGVycm9yID0gVV9aRVJPX0VSUk9SOwor
ICAgIHVjbnZfdG9Vbmljb2RlKG1fY29udmVydGVyLmdldCgpLCAmdGFyZ2V0LCB0YXJnZXRMaW1p
dCwgJnNvdXJjZSwgc291cmNlTGltaXQsIG9mZnNldHMsIGZsdXNoLCAmZXJyb3IpOwogICAgIHJl
dHVybiB0YXJnZXQgLSB0YXJnZXRTdGFydDsKIH0KIAogY2xhc3MgRXJyb3JDYWxsYmFja1NldHRl
ciB7CiBwdWJsaWM6Ci0gICAgRXJyb3JDYWxsYmFja1NldHRlcihVQ29udmVydGVyKiBjb252ZXJ0
ZXIsIGJvb2wgc3RvcE9uRXJyb3IpCisgICAgRXJyb3JDYWxsYmFja1NldHRlcihVQ29udmVydGVy
JiBjb252ZXJ0ZXIsIGJvb2wgc3RvcE9uRXJyb3IpCiAgICAgICAgIDogbV9jb252ZXJ0ZXIoY29u
dmVydGVyKQogICAgICAgICAsIG1fc2hvdWxkU3RvcE9uRW5jb2RpbmdFcnJvcnMoc3RvcE9uRXJy
b3IpCiAgICAgewogICAgICAgICBpZiAobV9zaG91bGRTdG9wT25FbmNvZGluZ0Vycm9ycykgewog
ICAgICAgICAgICAgVUVycm9yQ29kZSBlcnIgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAgICAgICB1
Y252X3NldFRvVUNhbGxCYWNrKG1fY29udmVydGVyLCBVQ05WX1RPX1VfQ0FMTEJBQ0tfU1VCU1RJ
VFVURSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDTlZfU1VCX1NUT1BfT05fSUxMRUdB
TCwgJm1fc2F2ZWRBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmbV9zYXZlZENv
bnRleHQsICZlcnIpOworICAgICAgICAgICAgdWNudl9zZXRUb1VDYWxsQmFjaygmbV9jb252ZXJ0
ZXIsIFVDTlZfVE9fVV9DQUxMQkFDS19TVUJTVElUVVRFLCBVQ05WX1NVQl9TVE9QX09OX0lMTEVH
QUwsICZtX3NhdmVkQWN0aW9uLCAmbV9zYXZlZENvbnRleHQsICZlcnIpOwogICAgICAgICAgICAg
QVNTRVJUKGVyciA9PSBVX1pFUk9fRVJST1IpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjg2LDkg
KzI2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIFVFcnJvckNvZGUgZXJyID0gVV9aRVJPX0VS
Uk9SOwogICAgICAgICAgICAgY29uc3Qgdm9pZCogb2xkQ29udGV4dDsKICAgICAgICAgICAgIFVD
b252ZXJ0ZXJUb1VDYWxsYmFjayBvbGRBY3Rpb247Ci0gICAgICAgICAgICB1Y252X3NldFRvVUNh
bGxCYWNrKG1fY29udmVydGVyLCBtX3NhdmVkQWN0aW9uLAotICAgICAgICAgICAgICAgICAgIG1f
c2F2ZWRDb250ZXh0LCAmb2xkQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICZvbGRDb250ZXh0
LCAmZXJyKTsKKyAgICAgICAgICAgIHVjbnZfc2V0VG9VQ2FsbEJhY2soJm1fY29udmVydGVyLCBt
X3NhdmVkQWN0aW9uLCBtX3NhdmVkQ29udGV4dCwgJm9sZEFjdGlvbiwgJm9sZENvbnRleHQsICZl
cnIpOwogICAgICAgICAgICAgQVNTRVJUKG9sZEFjdGlvbiA9PSBVQ05WX1RPX1VfQ0FMTEJBQ0tf
U1VCU1RJVFVURSk7CiAgICAgICAgICAgICBBU1NFUlQoIXN0cmNtcChzdGF0aWNfY2FzdDxjb25z
dCBjaGFyKj4ob2xkQ29udGV4dCksIFVDTlZfU1VCX1NUT1BfT05fSUxMRUdBTCkpOwogICAgICAg
ICAgICAgQVNTRVJUKGVyciA9PSBVX1pFUk9fRVJST1IpOwpAQCAtMjk2LDcgKzI3Niw3IEBAIHB1
YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVUNvbnZlcnRlciogbV9jb252ZXJ0ZXI7Cisg
ICAgVUNvbnZlcnRlciYgbV9jb252ZXJ0ZXI7CiAgICAgYm9vbCBtX3Nob3VsZFN0b3BPbkVuY29k
aW5nRXJyb3JzOwogICAgIGNvbnN0IHZvaWQqIG1fc2F2ZWRDb250ZXh0OwogICAgIFVDb252ZXJ0
ZXJUb1VDYWxsYmFjayBtX3NhdmVkQWN0aW9uOwpAQCAtMzA1LDE2ICsyODUsMTYgQEAgcHJpdmF0
ZToKIFN0cmluZyBUZXh0Q29kZWNJQ1U6OmRlY29kZShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90
IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpCiB7
CiAgICAgLy8gR2V0IGEgY29udmVydGVyIGZvciB0aGUgcGFzc2VkLWluIGVuY29kaW5nLgotICAg
IGlmICghbV9jb252ZXJ0ZXJJQ1UpIHsKKyAgICBpZiAoIW1fY29udmVydGVyKSB7CiAgICAgICAg
IGNyZWF0ZUlDVUNvbnZlcnRlcigpOwotICAgICAgICBBU1NFUlQobV9jb252ZXJ0ZXJJQ1UpOwot
ICAgICAgICBpZiAoIW1fY29udmVydGVySUNVKSB7CisgICAgICAgIGlmICghbV9jb252ZXJ0ZXIp
IHsKICAgICAgICAgICAgIExPR19FUlJPUigiZXJyb3IgY3JlYXRpbmcgSUNVIGVuY29kZXIgZXZl
biB0aG91Z2ggZW5jb2Rpbmcgd2FzIGluIHRhYmxlIik7Ci0gICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CisgICAgICAgICAgICBzYXdFcnJvciA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4g
eyB9OwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIEVycm9yQ2FsbGJhY2tTZXR0ZXIgY2Fs
bGJhY2tTZXR0ZXIobV9jb252ZXJ0ZXJJQ1UsIHN0b3BPbkVycm9yKTsKKyAgICBFcnJvckNhbGxi
YWNrU2V0dGVyIGNhbGxiYWNrU2V0dGVyKCptX2NvbnZlcnRlciwgc3RvcE9uRXJyb3IpOwogCiAg
ICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAKQEAgLTM0MCwxNyArMzIwLDE1IEBAIFN0cmluZyBU
ZXh0Q29kZWNJQ1U6OmRlY29kZShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90IGxlbmd0aCwgYm9v
bCBmbHVzaCwgYm9vbCBzCiAKICAgICBTdHJpbmcgcmVzdWx0U3RyaW5nID0gcmVzdWx0LnRvU3Ry
aW5nKCk7CiAKLSAgICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTcwMTQ+CiAgICAgLy8gU2ltcGxpZmllZCBDaGluZXNlIHBhZ2VzIHVzZSB0aGUgY29kZSBBM0Ew
IHRvIG1lYW4gImZ1bGwtd2lkdGggc3BhY2UiLCBidXQgSUNVIGRlY29kZXMgaXQgYXMgVStFNUU1
LgotICAgIC8vIEZJWE1FOiBzdHJjYXNlY21wIGlzIGxvY2FsZSBzZW5zaXRpdmUsIHdlIHNob3Vs
ZCBub3QgYmUgdXNpbmcgaXQuCi0gICAgaWYgKHN0cmNtcChtX2VuY29kaW5nTmFtZSwgIkdCSyIp
ID09IDAgfHwgc3RyY2FzZWNtcChtX2VuY29kaW5nTmFtZSwgImdiMTgwMzAiKSA9PSAwKQorICAg
IGlmICghc3RyY21wKG1fZW5jb2RpbmdOYW1lLCAiR0JLIikgfHwgZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UobV9lbmNvZGluZ05hbWUsICJnYjE4MDMwIikpCiAgICAgICAgIHJlc3VsdFN0
cmluZy5yZXBsYWNlKDB4RTVFNSwgaWRlb2dyYXBoaWNTcGFjZSk7CiAKICAgICByZXR1cm4gcmVz
dWx0U3RyaW5nOwogfQogCiAvLyBXZSBuZWVkIHRvIGFwcGx5IHRoZXNlIGZhbGxiYWNrcyBvdXJz
ZWx2ZXMgYXMgdGhleSBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgSUNVIGFuZAotLy8g
dGhleSB3ZXJlIHByb3ZpZGVkIGJ5IHRoZSBvbGQgVEVDIGVuY29kaW5nIHBhdGguIE5lZWRlZCB0
byBmaXggPHJkYXI6Ly9wcm9ibGVtLzQ3MDg2ODk+LgorLy8gdGhleSB3ZXJlIHByb3ZpZGVkIGJ5
IHRoZSBNYWMgVEVDIGVuY29kaW5nIHBhdGguIE5lZWRlZCB0byBmaXggPHJkYXI6Ly9wcm9ibGVt
LzQ3MDg2ODk+Lgogc3RhdGljIFVDaGFyIGZhbGxiYWNrRm9yR0JLKFVDaGFyMzIgY2hhcmFjdGVy
KQogewogICAgIHN3aXRjaCAoY2hhcmFjdGVyKSB7CkBAIC0zNjksMTMwICszNDcsMTIyIEBAIHN0
YXRpYyBVQ2hhciBmYWxsYmFja0ZvckdCSyhVQ2hhcjMyIGNoYXJhY3RlcikKIC8vIEludmFsaWQg
Y2hhcmFjdGVyIGhhbmRsZXIgd2hlbiB3cml0aW5nIGVzY2FwZWQgZW50aXRpZXMgZm9yIHVucmVw
cmVzZW50YWJsZQogLy8gY2hhcmFjdGVycy4gU2VlIHRoZSBkZWNsYXJhdGlvbiBvZiBUZXh0Q29k
ZWM6OmVuY29kZSBmb3IgbW9yZS4KIHN0YXRpYyB2b2lkIHVybEVzY2FwZWRFbnRpdHlDYWxsYmFj
ayhjb25zdCB2b2lkKiBjb250ZXh0LCBVQ29udmVydGVyRnJvbVVuaWNvZGVBcmdzKiBmcm9tVUFy
Z3MsIGNvbnN0IFVDaGFyKiBjb2RlVW5pdHMsIGludDMyX3QgbGVuZ3RoLAotICAgIFVDaGFyMzIg
Y29kZVBvaW50LCBVQ29udmVydGVyQ2FsbGJhY2tSZWFzb24gcmVhc29uLCBVRXJyb3JDb2RlKiBl
cnIpCisgICAgVUNoYXIzMiBjb2RlUG9pbnQsIFVDb252ZXJ0ZXJDYWxsYmFja1JlYXNvbiByZWFz
b24sIFVFcnJvckNvZGUqIGVycm9yKQogewogICAgIGlmIChyZWFzb24gPT0gVUNOVl9VTkFTU0lH
TkVEKSB7Ci0gICAgICAgICplcnIgPSBVX1pFUk9fRVJST1I7Ci0KKyAgICAgICAgKmVycm9yID0g
VV9aRVJPX0VSUk9SOwogICAgICAgICBVbmVuY29kYWJsZVJlcGxhY2VtZW50QXJyYXkgZW50aXR5
OwotICAgICAgICBpbnQgZW50aXR5TGVuID0gVGV4dENvZGVjOjpnZXRVbmVuY29kYWJsZVJlcGxh
Y2VtZW50KGNvZGVQb2ludCwgVVJMRW5jb2RlZEVudGl0aWVzRm9yVW5lbmNvZGFibGVzLCBlbnRp
dHkpOwotICAgICAgICB1Y252X2NiRnJvbVVXcml0ZUJ5dGVzKGZyb21VQXJncywgZW50aXR5LCBl
bnRpdHlMZW4sIDAsIGVycik7CisgICAgICAgIGludCBlbnRpdHlMZW4gPSBUZXh0Q29kZWM6Omdl
dFVuZW5jb2RhYmxlUmVwbGFjZW1lbnQoY29kZVBvaW50LCBVbmVuY29kYWJsZUhhbmRsaW5nOjpV
UkxFbmNvZGVkRW50aXRpZXMsIGVudGl0eSk7CisgICAgICAgIHVjbnZfY2JGcm9tVVdyaXRlQnl0
ZXMoZnJvbVVBcmdzLCBlbnRpdHkuZGF0YSgpLCBlbnRpdHlMZW4sIDAsIGVycm9yKTsKICAgICB9
IGVsc2UKLSAgICAgICAgVUNOVl9GUk9NX1VfQ0FMTEJBQ0tfRVNDQVBFKGNvbnRleHQsIGZyb21V
QXJncywgY29kZVVuaXRzLCBsZW5ndGgsIGNvZGVQb2ludCwgcmVhc29uLCBlcnIpOworICAgICAg
ICBVQ05WX0ZST01fVV9DQUxMQkFDS19FU0NBUEUoY29udGV4dCwgZnJvbVVBcmdzLCBjb2RlVW5p
dHMsIGxlbmd0aCwgY29kZVBvaW50LCByZWFzb24sIGVycm9yKTsKIH0KIAogLy8gU3Vic3RpdHV0
ZXMgc3BlY2lhbCBHQksgY2hhcmFjdGVycywgZXNjYXBpbmcgYWxsIG90aGVyIHVuYXNzaWduZWQg
ZW50aXRpZXMuCiBzdGF0aWMgdm9pZCBnYmtDYWxsYmFja0VzY2FwZShjb25zdCB2b2lkKiBjb250
ZXh0LCBVQ29udmVydGVyRnJvbVVuaWNvZGVBcmdzKiBmcm9tVUFyZ3MsIGNvbnN0IFVDaGFyKiBj
b2RlVW5pdHMsIGludDMyX3QgbGVuZ3RoLAotICAgIFVDaGFyMzIgY29kZVBvaW50LCBVQ29udmVy
dGVyQ2FsbGJhY2tSZWFzb24gcmVhc29uLCBVRXJyb3JDb2RlKiBlcnIpIAorICAgIFVDaGFyMzIg
Y29kZVBvaW50LCBVQ29udmVydGVyQ2FsbGJhY2tSZWFzb24gcmVhc29uLCBVRXJyb3JDb2RlKiBl
cnJvcikKIHsKICAgICBVQ2hhciBvdXRDaGFyOwogICAgIGlmIChyZWFzb24gPT0gVUNOVl9VTkFT
U0lHTkVEICYmIChvdXRDaGFyID0gZmFsbGJhY2tGb3JHQksoY29kZVBvaW50KSkpIHsKICAgICAg
ICAgY29uc3QgVUNoYXIqIHNvdXJjZSA9ICZvdXRDaGFyOwotICAgICAgICAqZXJyID0gVV9aRVJP
X0VSUk9SOwotICAgICAgICB1Y252X2NiRnJvbVVXcml0ZVVDaGFycyhmcm9tVUFyZ3MsICZzb3Vy
Y2UsIHNvdXJjZSArIDEsIDAsIGVycik7CisgICAgICAgICplcnJvciA9IFVfWkVST19FUlJPUjsK
KyAgICAgICAgdWNudl9jYkZyb21VV3JpdGVVQ2hhcnMoZnJvbVVBcmdzLCAmc291cmNlLCBzb3Vy
Y2UgKyAxLCAwLCBlcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgVUNOVl9GUk9N
X1VfQ0FMTEJBQ0tfRVNDQVBFKGNvbnRleHQsIGZyb21VQXJncywgY29kZVVuaXRzLCBsZW5ndGgs
IGNvZGVQb2ludCwgcmVhc29uLCBlcnIpOworICAgIFVDTlZfRlJPTV9VX0NBTExCQUNLX0VTQ0FQ
RShjb250ZXh0LCBmcm9tVUFyZ3MsIGNvZGVVbml0cywgbGVuZ3RoLCBjb2RlUG9pbnQsIHJlYXNv
biwgZXJyb3IpOwogfQogCiAvLyBDb21iaW5lcyBib3RoIGdia1VybEVzY2FwZWRFbnRpdHlDYWxs
YmFjayBhbmQgR0JLIGNoYXJhY3RlciBzdWJzdGl0dXRpb24uCiBzdGF0aWMgdm9pZCBnYmtVcmxF
c2NhcGVkRW50aXR5Q2FsbGFjayhjb25zdCB2b2lkKiBjb250ZXh0LCBVQ29udmVydGVyRnJvbVVu
aWNvZGVBcmdzKiBmcm9tVUFyZ3MsIGNvbnN0IFVDaGFyKiBjb2RlVW5pdHMsIGludDMyX3QgbGVu
Z3RoLAotICAgIFVDaGFyMzIgY29kZVBvaW50LCBVQ29udmVydGVyQ2FsbGJhY2tSZWFzb24gcmVh
c29uLCBVRXJyb3JDb2RlKiBlcnIpIAorICAgIFVDaGFyMzIgY29kZVBvaW50LCBVQ29udmVydGVy
Q2FsbGJhY2tSZWFzb24gcmVhc29uLCBVRXJyb3JDb2RlKiBlcnJvcikKIHsKICAgICBpZiAocmVh
c29uID09IFVDTlZfVU5BU1NJR05FRCkgewogICAgICAgICBpZiAoVUNoYXIgb3V0Q2hhciA9IGZh
bGxiYWNrRm9yR0JLKGNvZGVQb2ludCkpIHsKICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBzb3Vy
Y2UgPSAmb3V0Q2hhcjsKLSAgICAgICAgICAgICplcnIgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAg
ICAgICB1Y252X2NiRnJvbVVXcml0ZVVDaGFycyhmcm9tVUFyZ3MsICZzb3VyY2UsIHNvdXJjZSAr
IDEsIDAsIGVycik7CisgICAgICAgICAgICAqZXJyb3IgPSBVX1pFUk9fRVJST1I7CisgICAgICAg
ICAgICB1Y252X2NiRnJvbVVXcml0ZVVDaGFycyhmcm9tVUFyZ3MsICZzb3VyY2UsIHNvdXJjZSAr
IDEsIDAsIGVycm9yKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICB1
cmxFc2NhcGVkRW50aXR5Q2FsbGJhY2soY29udGV4dCwgZnJvbVVBcmdzLCBjb2RlVW5pdHMsIGxl
bmd0aCwgY29kZVBvaW50LCByZWFzb24sIGVycik7CisgICAgICAgIHVybEVzY2FwZWRFbnRpdHlD
YWxsYmFjayhjb250ZXh0LCBmcm9tVUFyZ3MsIGNvZGVVbml0cywgbGVuZ3RoLCBjb2RlUG9pbnQs
IHJlYXNvbiwgZXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIFVDTlZfRlJPTV9V
X0NBTExCQUNLX0VTQ0FQRShjb250ZXh0LCBmcm9tVUFyZ3MsIGNvZGVVbml0cywgbGVuZ3RoLCBj
b2RlUG9pbnQsIHJlYXNvbiwgZXJyKTsKKyAgICBVQ05WX0ZST01fVV9DQUxMQkFDS19FU0NBUEUo
Y29udGV4dCwgZnJvbVVBcmdzLCBjb2RlVW5pdHMsIGxlbmd0aCwgY29kZVBvaW50LCByZWFzb24s
IGVycm9yKTsKIH0KIAogc3RhdGljIHZvaWQgZ2JrQ2FsbGJhY2tTdWJzdGl0dXRlKGNvbnN0IHZv
aWQqIGNvbnRleHQsIFVDb252ZXJ0ZXJGcm9tVW5pY29kZUFyZ3MqIGZyb21VQXJncywgY29uc3Qg
VUNoYXIqIGNvZGVVbml0cywgaW50MzJfdCBsZW5ndGgsCi0gICAgVUNoYXIzMiBjb2RlUG9pbnQs
IFVDb252ZXJ0ZXJDYWxsYmFja1JlYXNvbiByZWFzb24sIFVFcnJvckNvZGUqIGVycikgCisgICAg
VUNoYXIzMiBjb2RlUG9pbnQsIFVDb252ZXJ0ZXJDYWxsYmFja1JlYXNvbiByZWFzb24sIFVFcnJv
ckNvZGUqIGVycm9yKQogewogICAgIFVDaGFyIG91dENoYXI7CiAgICAgaWYgKHJlYXNvbiA9PSBV
Q05WX1VOQVNTSUdORUQgJiYgKG91dENoYXIgPSBmYWxsYmFja0ZvckdCSyhjb2RlUG9pbnQpKSkg
ewogICAgICAgICBjb25zdCBVQ2hhciogc291cmNlID0gJm91dENoYXI7Ci0gICAgICAgICplcnIg
PSBVX1pFUk9fRVJST1I7Ci0gICAgICAgIHVjbnZfY2JGcm9tVVdyaXRlVUNoYXJzKGZyb21VQXJn
cywgJnNvdXJjZSwgc291cmNlICsgMSwgMCwgZXJyKTsKKyAgICAgICAgKmVycm9yID0gVV9aRVJP
X0VSUk9SOworICAgICAgICB1Y252X2NiRnJvbVVXcml0ZVVDaGFycyhmcm9tVUFyZ3MsICZzb3Vy
Y2UsIHNvdXJjZSArIDEsIDAsIGVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBV
Q05WX0ZST01fVV9DQUxMQkFDS19TVUJTVElUVVRFKGNvbnRleHQsIGZyb21VQXJncywgY29kZVVu
aXRzLCBsZW5ndGgsIGNvZGVQb2ludCwgcmVhc29uLCBlcnIpOworICAgIFVDTlZfRlJPTV9VX0NB
TExCQUNLX1NVQlNUSVRVVEUoY29udGV4dCwgZnJvbVVBcmdzLCBjb2RlVW5pdHMsIGxlbmd0aCwg
Y29kZVBvaW50LCByZWFzb24sIGVycm9yKTsKIH0KIAotQ1N0cmluZyBUZXh0Q29kZWNJQ1U6OmVu
Y29kZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVI
YW5kbGluZyBoYW5kbGluZykKK1ZlY3Rvcjx1aW50OF90PiBUZXh0Q29kZWNJQ1U6OmVuY29kZShT
dHJpbmdWaWV3IHN0cmluZywgVW5lbmNvZGFibGVIYW5kbGluZyBoYW5kbGluZykKIHsKLSAgICBp
ZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuICIiOworICAgIGlmIChzdHJpbmcuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4geyB9OwogCi0gICAgaWYgKCFtX2NvbnZlcnRlcklDVSkKKyAgICBp
ZiAoIW1fY29udmVydGVyKSB7CiAgICAgICAgIGNyZWF0ZUlDVUNvbnZlcnRlcigpOwotICAgIGlm
ICghbV9jb252ZXJ0ZXJJQ1UpCi0gICAgICAgIHJldHVybiBDU3RyaW5nKCk7CisgICAgICAgIGlm
ICghbV9jb252ZXJ0ZXIpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgIH0KIAogICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgc2VlIGlmIHRoZXJlIGlzICJmb3JjZSBBU0NJSSByYW5nZSIgbW9k
ZSBpbiBJQ1U7CiAgICAgLy8gdW50aWwgdGhlbiwgd2UgY2hhbmdlIHRoZSBiYWNrc2xhc2ggaW50
byBhIHllbiBzaWduLgogICAgIC8vIEVuY29kaW5nIHdpbGwgY2hhbmdlIHRoZSB5ZW4gc2lnbiBi
YWNrIGludG8gYSBiYWNrc2xhc2guCi0gICAgVmVjdG9yPFVDaGFyPiBjb3B5OwotICAgIGNvbnN0
IFVDaGFyKiBzb3VyY2UgPSBjaGFyYWN0ZXJzOworICAgIFN0cmluZyBjb3B5OwogICAgIGlmIChz
aG91bGRTaG93QmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbEluKG1fZW5jb2RpbmdOYW1lKSkgewot
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAg
ICBpZiAoY2hhcmFjdGVyc1tpXSA9PSAnXFwnKSB7Ci0gICAgICAgICAgICAgICAgY29weS5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3Qg
aiA9IDA7IGogPCBpOyArK2opCi0gICAgICAgICAgICAgICAgICAgIGNvcHkudW5jaGVja2VkQXBw
ZW5kKGNoYXJhY3RlcnNbal0pOwotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpOyBq
IDwgbGVuZ3RoOyArK2opIHsKLSAgICAgICAgICAgICAgICAgICAgVUNoYXIgY2hhcmFjdGVyID0g
Y2hhcmFjdGVyc1tqXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnXFwn
KQotICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyID0geWVuU2lnbjsKLSAgICAgICAg
ICAgICAgICAgICAgY29weS51bmNoZWNrZWRBcHBlbmQoY2hhcmFjdGVyKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgc291cmNlID0gY29weS5kYXRhKCk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgY29weSA9IHN0
cmluZy50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCk7CisgICAgICAgIGNvcHkucmVwbGFjZSgnXFwn
LCB5ZW5TaWduKTsKKyAgICAgICAgc3RyaW5nID0gY29weTsKICAgICB9Ci0gICAgY29uc3QgVUNo
YXIqIHNvdXJjZUxpbWl0ID0gc291cmNlICsgbGVuZ3RoOwotCi0gICAgVUVycm9yQ29kZSBlcnIg
PSBVX1pFUk9fRVJST1I7CiAKKyAgICBVRXJyb3JDb2RlIGVycm9yOwogICAgIHN3aXRjaCAoaGFu
ZGxpbmcpIHsKLSAgICAgICAgY2FzZSBRdWVzdGlvbk1hcmtzRm9yVW5lbmNvZGFibGVzOgotICAg
ICAgICAgICAgdWNudl9zZXRTdWJzdENoYXJzKG1fY29udmVydGVySUNVLCAiPyIsIDEsICZlcnIp
OwotICAgICAgICAgICAgdWNudl9zZXRGcm9tVUNhbGxCYWNrKG1fY29udmVydGVySUNVLCBtX25l
ZWRzR0JLRmFsbGJhY2tzID8gZ2JrQ2FsbGJhY2tTdWJzdGl0dXRlIDogVUNOVl9GUk9NX1VfQ0FM
TEJBQ0tfU1VCU1RJVFVURSwgMCwgMCwgMCwgJmVycik7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBFbnRpdGllc0ZvclVuZW5jb2RhYmxlczoKLSAgICAgICAgICAgIHVjbnZfc2V0
RnJvbVVDYWxsQmFjayhtX2NvbnZlcnRlcklDVSwgbV9uZWVkc0dCS0ZhbGxiYWNrcyA/IGdia0Nh
bGxiYWNrRXNjYXBlIDogVUNOVl9GUk9NX1VfQ0FMTEJBQ0tfRVNDQVBFLCBVQ05WX0VTQ0FQRV9Y
TUxfREVDLCAwLCAwLCAmZXJyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVS
TEVuY29kZWRFbnRpdGllc0ZvclVuZW5jb2RhYmxlczoKLSAgICAgICAgICAgIHVjbnZfc2V0RnJv
bVVDYWxsQmFjayhtX2NvbnZlcnRlcklDVSwgbV9uZWVkc0dCS0ZhbGxiYWNrcyA/IGdia1VybEVz
Y2FwZWRFbnRpdHlDYWxsYWNrIDogdXJsRXNjYXBlZEVudGl0eUNhbGxiYWNrLCAwLCAwLCAwLCAm
ZXJyKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgVW5lbmNvZGFibGVIYW5kbGluZzo6
UXVlc3Rpb25NYXJrczoKKyAgICAgICAgZXJyb3IgPSBVX1pFUk9fRVJST1I7CisgICAgICAgIHVj
bnZfc2V0U3Vic3RDaGFycyhtX2NvbnZlcnRlci5nZXQoKSwgIj8iLCAxLCAmZXJyb3IpOworICAg
ICAgICBpZiAoVV9GQUlMVVJFKGVycm9yKSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAg
ICAgIGVycm9yID0gVV9aRVJPX0VSUk9SOworICAgICAgICB1Y252X3NldEZyb21VQ2FsbEJhY2so
bV9jb252ZXJ0ZXIuZ2V0KCksIG1fbmVlZHNHQktGYWxsYmFja3MgPyBnYmtDYWxsYmFja1N1YnN0
aXR1dGUgOiBVQ05WX0ZST01fVV9DQUxMQkFDS19TVUJTVElUVVRFLCAwLCAwLCAwLCAmZXJyb3Ip
OworICAgICAgICBpZiAoVV9GQUlMVVJFKGVycm9yKSkKKyAgICAgICAgICAgIHJldHVybiB7IH07
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVW5lbmNvZGFibGVIYW5kbGluZzo6RW50aXRpZXM6
CisgICAgICAgIGVycm9yID0gVV9aRVJPX0VSUk9SOworICAgICAgICB1Y252X3NldEZyb21VQ2Fs
bEJhY2sobV9jb252ZXJ0ZXIuZ2V0KCksIG1fbmVlZHNHQktGYWxsYmFja3MgPyBnYmtDYWxsYmFj
a0VzY2FwZSA6IFVDTlZfRlJPTV9VX0NBTExCQUNLX0VTQ0FQRSwgVUNOVl9FU0NBUEVfWE1MX0RF
QywgMCwgMCwgJmVycm9yKTsKKyAgICAgICAgaWYgKFVfRkFJTFVSRShlcnJvcikpCisgICAgICAg
ICAgICByZXR1cm4geyB9OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFVuZW5jb2RhYmxlSGFu
ZGxpbmc6OlVSTEVuY29kZWRFbnRpdGllczoKKyAgICAgICAgZXJyb3IgPSBVX1pFUk9fRVJST1I7
CisgICAgICAgIHVjbnZfc2V0RnJvbVVDYWxsQmFjayhtX2NvbnZlcnRlci5nZXQoKSwgbV9uZWVk
c0dCS0ZhbGxiYWNrcyA/IGdia1VybEVzY2FwZWRFbnRpdHlDYWxsYWNrIDogdXJsRXNjYXBlZEVu
dGl0eUNhbGxiYWNrLCAwLCAwLCAwLCAmZXJyb3IpOworICAgICAgICBpZiAoVV9GQUlMVVJFKGVy
cm9yKSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIGJyZWFrOwogICAgIH0KIAot
ICAgIEFTU0VSVChVX1NVQ0NFU1MoZXJyKSk7Ci0gICAgaWYgKFVfRkFJTFVSRShlcnIpKQotICAg
ICAgICByZXR1cm4gQ1N0cmluZygpOworICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0g
c3RyaW5nLnVwY29udmVydGVkQ2hhcmFjdGVycygpOworICAgIGF1dG8qIHNvdXJjZSA9IHVwY29u
dmVydGVkQ2hhcmFjdGVycy5nZXQoKTsKKyAgICBhdXRvKiBzb3VyY2VMaW1pdCA9IHNvdXJjZSAr
IHN0cmluZy5sZW5ndGgoKTsKIAotICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7Ci0gICAgc2l6ZV90
IHNpemUgPSAwOworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7CiAgICAgZG8gewogICAgICAg
ICBjaGFyIGJ1ZmZlcltDb252ZXJzaW9uQnVmZmVyU2l6ZV07CiAgICAgICAgIGNoYXIqIHRhcmdl
dCA9IGJ1ZmZlcjsKICAgICAgICAgY2hhciogdGFyZ2V0TGltaXQgPSB0YXJnZXQgKyBDb252ZXJz
aW9uQnVmZmVyU2l6ZTsKLSAgICAgICAgZXJyID0gVV9aRVJPX0VSUk9SOwotICAgICAgICB1Y252
X2Zyb21Vbmljb2RlKG1fY29udmVydGVySUNVLCAmdGFyZ2V0LCB0YXJnZXRMaW1pdCwgJnNvdXJj
ZSwgc291cmNlTGltaXQsIDAsIHRydWUsICZlcnIpOwotICAgICAgICBzaXplX3QgY291bnQgPSB0
YXJnZXQgLSBidWZmZXI7Ci0gICAgICAgIHJlc3VsdC5ncm93KHNpemUgKyBjb3VudCk7Ci0gICAg
ICAgIG1lbWNweShyZXN1bHQuZGF0YSgpICsgc2l6ZSwgYnVmZmVyLCBjb3VudCk7Ci0gICAgICAg
IHNpemUgKz0gY291bnQ7Ci0gICAgfSB3aGlsZSAoZXJyID09IFVfQlVGRkVSX09WRVJGTE9XX0VS
Uk9SKTsKLQotICAgIHJldHVybiBDU3RyaW5nKHJlc3VsdC5kYXRhKCksIHNpemUpOworICAgICAg
ICBlcnJvciA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgdWNudl9mcm9tVW5pY29kZShtX2NvbnZl
cnRlci5nZXQoKSwgJnRhcmdldCwgdGFyZ2V0TGltaXQsICZzb3VyY2UsIHNvdXJjZUxpbWl0LCAw
LCB0cnVlLCAmZXJyb3IpOworICAgICAgICByZXN1bHQuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KGJ1ZmZlciksIHRhcmdldCAtIGJ1ZmZlcik7CisgICAgfSB3aGlsZSAoZXJyb3Ig
PT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dENvZGVjSUNVLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRD
b2RlY0lDVS5oCmluZGV4IDBjMTc5OGM5YmY3YWU1M2ViN2MzN2RlNWY0MjhjNGIxN2U3NWQwNWEu
LmFiZmQ3MDk4NjBlMTJlMWQyZDA4OGQ5MzliYjUxMDcxZWE5ZDYxNTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDcsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFr
b3YgPGFwQG55cG9wLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI0LDU0ICsyNCw0NSBAQAog
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBUZXh0Q29kZWNJQ1VfaAotI2RlZmluZSBU
ZXh0Q29kZWNJQ1VfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJUZXh0Q29kZWMuaCIKLSNp
bmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgotCi10eXBlZGVmIHN0cnVjdCBVQ29udmVydGVyIFVD
b252ZXJ0ZXI7CisjaW5jbHVkZSA8dW5pY29kZS91Y252Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotICAgIGNsYXNzIFRleHRDb2RlY0lDVSA6IHB1YmxpYyBUZXh0Q29kZWMgewotICAgIHB1
YmxpYzoKLSAgICAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxUZXh0Q29kZWM+IGNyZWF0ZShj
b25zdCBUZXh0RW5jb2RpbmcmLCBjb25zdCB2b2lkKiBhZGRpdGlvbmFsRGF0YSk7Cit1c2luZyBJ
Q1VDb252ZXJ0ZXJQdHIgPSBzdGQ6OnVuaXF1ZV9wdHI8VUNvbnZlcnRlciwgdm9pZCAoKikoVUNv
bnZlcnRlciopPjsKIAotICAgICAgICBUZXh0Q29kZWNJQ1UoY29uc3QgY2hhciogZW5jb2Rpbmcs
IGNvbnN0IGNoYXIqIGNhbm9uaWNhbENvbnZlcnRlck5hbWUpOworY2xhc3MgVGV4dENvZGVjSUNV
IDogcHVibGljIFRleHRDb2RlYyB7CitwdWJsaWM6CisgICAgVGV4dENvZGVjSUNVKGNvbnN0IGNo
YXIqIGVuY29kaW5nLCBjb25zdCBjaGFyKiBjYW5vbmljYWxDb252ZXJ0ZXJOYW1lKTsKKyAgICB2
aXJ0dWFsIH5UZXh0Q29kZWNJQ1UoKTsKIAotICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckVu
Y29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyKTsKLSAgICAgICAgc3RhdGljIHZvaWQg
cmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyKTsKKyAgICBzdGF0aWMgdm9pZCByZWdp
c3RlckVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyKTsKKyAgICBzdGF0aWMgdm9p
ZCByZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIpOwogCi0gICAgICAgIHZpcnR1YWwg
flRleHRDb2RlY0lDVSgpOworcHJpdmF0ZToKKyAgICBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIq
LCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdF
cnJvcikgZmluYWw7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZShTdHJpbmdWaWV3LCBVbmVu
Y29kYWJsZUhhbmRsaW5nKSBmaW5hbDsKIAotICAgIHByaXZhdGU6Ci0gICAgICAgIFN0cmluZyBk
ZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9u
RXJyb3IsIGJvb2wmIHNhd0Vycm9yKSBvdmVycmlkZTsKLSAgICAgICAgQ1N0cmluZyBlbmNvZGUo
Y29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5nKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGNyZWF0ZUlDVUNvbnZlcnRlcigpIGNvbnN0OworICAgIHZvaWQgcmVsZWFz
ZUlDVUNvbnZlcnRlcigpIGNvbnN0OworICAgIGJvb2wgbmVlZHNHQktGYWxsYmFja3MoKSBjb25z
dCB7IHJldHVybiBtX25lZWRzR0JLRmFsbGJhY2tzOyB9CisgICAgdm9pZCBzZXROZWVkc0dCS0Zh
bGxiYWNrcyhib29sIG5lZWRzRmFsbGJhY2tzKSB7IG1fbmVlZHNHQktGYWxsYmFja3MgPSBuZWVk
c0ZhbGxiYWNrczsgfQogCi0gICAgICAgIHZvaWQgY3JlYXRlSUNVQ29udmVydGVyKCkgY29uc3Q7
Ci0gICAgICAgIHZvaWQgcmVsZWFzZUlDVUNvbnZlcnRlcigpIGNvbnN0OwotICAgICAgICBib29s
IG5lZWRzR0JLRmFsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc0dCS0ZhbGxiYWNrczsg
fQotICAgICAgICB2b2lkIHNldE5lZWRzR0JLRmFsbGJhY2tzKGJvb2wgbmVlZHNGYWxsYmFja3Mp
IHsgbV9uZWVkc0dCS0ZhbGxiYWNrcyA9IG5lZWRzRmFsbGJhY2tzOyB9Ci0gICAgICAgIAotICAg
ICAgICBpbnQgZGVjb2RlVG9CdWZmZXIoVUNoYXIqIGJ1ZmZlciwgVUNoYXIqIGJ1ZmZlckxpbWl0
LCBjb25zdCBjaGFyKiYgc291cmNlLAotICAgICAgICAgICAgY29uc3QgY2hhciogc291cmNlTGlt
aXQsIGludDMyX3QqIG9mZnNldHMsIGJvb2wgZmx1c2gsIFVFcnJvckNvZGUmIGVycik7CisgICAg
aW50IGRlY29kZVRvQnVmZmVyKFVDaGFyKiBidWZmZXIsIFVDaGFyKiBidWZmZXJMaW1pdCwgY29u
c3QgY2hhciomIHNvdXJjZSwgY29uc3QgY2hhciogc291cmNlTGltaXQsIGludDMyX3QqIG9mZnNl
dHMsIGJvb2wgZmx1c2gsIFVFcnJvckNvZGUmKTsKIAotICAgICAgICBjb25zdCBjaGFyKiBjb25z
dCBtX2VuY29kaW5nTmFtZTsKLSAgICAgICAgY29uc3QgY2hhciogY29uc3QgbV9jYW5vbmljYWxD
b252ZXJ0ZXJOYW1lOwotICAgICAgICBtdXRhYmxlIFVDb252ZXJ0ZXIqIG1fY29udmVydGVySUNV
OwotICAgICAgICBtdXRhYmxlIGJvb2wgbV9uZWVkc0dCS0ZhbGxiYWNrczsKLSAgICB9OworICAg
IGNvbnN0IGNoYXIqIGNvbnN0IG1fZW5jb2RpbmdOYW1lOworICAgIGNvbnN0IGNoYXIqIGNvbnN0
IG1fY2Fub25pY2FsQ29udmVydGVyTmFtZTsKKyAgICBtdXRhYmxlIElDVUNvbnZlcnRlclB0ciBt
X2NvbnZlcnRlciB7IG51bGxwdHIsIHVjbnZfY2xvc2UgfTsKKyAgICBtdXRhYmxlIGJvb2wgbV9u
ZWVkc0dCS0ZhbGxiYWNrcyB7IGZhbHNlIH07Cit9OwogCi0gICAgc3RydWN0IElDVUNvbnZlcnRl
cldyYXBwZXIgewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJQ1VDb252ZXJ0ZXJXcmFw
cGVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICBJQ1VD
b252ZXJ0ZXJXcmFwcGVyKCkgOiBjb252ZXJ0ZXIoMCkgeyB9Ci0gICAgICAgIH5JQ1VDb252ZXJ0
ZXJXcmFwcGVyKCk7CitzdHJ1Y3QgSUNVQ29udmVydGVyV3JhcHBlciB7CisgICAgSUNVQ29udmVy
dGVyUHRyIGNvbnZlcnRlciB7IG51bGxwdHIsIHVjbnZfY2xvc2UgfTsKIAotICAgICAgICBVQ29u
dmVydGVyKiBjb252ZXJ0ZXI7Ci0gICAgfTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIFRleHRDb2RlY0lDVV9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGlu
MS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5jcHAK
aW5kZXggMDdhNmQxNjgzOWRhZWQ1OWM4ZmM1Yjg4MWU4ZWQ0ZWQ2YWU1NTk5NC4uZmRhNzhlMTc0
NWRhNzcyNjAxZGFmMTNiNGJlNjUyYjBjZDg3MWEzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNyw3
IEBACiAjaW5jbHVkZSAiVGV4dENvZGVjTGF0aW4xLmgiCiAKICNpbmNsdWRlICJUZXh0Q29kZWNB
U0NJSUZhc3RQYXRoLmgiCisjaW5jbHVkZSA8YXJyYXk+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1ZmZlci5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtMzUsNyArMzYsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogdXNpbmcgbmFtZXNwYWNlIFdURjsKIAotc3RhdGljIGNvbnN0IFVDaGFyIHRhYmxlWzI1Nl0g
PSB7CitzdGF0aWMgY29uc3QgVUNoYXIgbGF0aW4xQ29udmVyc2lvblRhYmxlWzI1Nl0gPSB7CiAg
ICAgMHgwMDAwLCAweDAwMDEsIDB4MDAwMiwgMHgwMDAzLCAweDAwMDQsIDB4MDAwNSwgMHgwMDA2
LCAweDAwMDcsIC8vIDAwLTA3CiAgICAgMHgwMDA4LCAweDAwMDksIDB4MDAwQSwgMHgwMDBCLCAw
eDAwMEMsIDB4MDAwRCwgMHgwMDBFLCAweDAwMEYsIC8vIDA4LTBGCiAgICAgMHgwMDEwLCAweDAw
MTEsIDB4MDAxMiwgMHgwMDEzLCAweDAwMTQsIDB4MDAxNSwgMHgwMDE2LCAweDAwMTcsIC8vIDEw
LTE3CkBAIC05MiwxNCArOTMsMTEgQEAgdm9pZCBUZXh0Q29kZWNMYXRpbjE6OnJlZ2lzdGVyRW5j
b2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQogICAgIHJlZ2lzdHJh
cigieC1jcDEyNTIiLCAid2luZG93cy0xMjUyIik7CiB9CiAKLXN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8VGV4dENvZGVjPiBuZXdTdHJlYW1pbmdUZXh0RGVjb2RlcldpbmRvd3NMYXRpbjEoY29uc3Qg
VGV4dEVuY29kaW5nJiwgY29uc3Qgdm9pZCopCi17Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlx
dWU8VGV4dENvZGVjTGF0aW4xPigpOwotfQotCiB2b2lkIFRleHRDb2RlY0xhdGluMTo6cmVnaXN0
ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKIHsKLSAgICByZWdpc3RyYXIo
IndpbmRvd3MtMTI1MiIsIG5ld1N0cmVhbWluZ1RleHREZWNvZGVyV2luZG93c0xhdGluMSwgMCk7
CisgICAgcmVnaXN0cmFyKCJ3aW5kb3dzLTEyNTIiLCBbXSB7CisgICAgICAgIHJldHVybiBzdGQ6
Om1ha2VfdW5pcXVlPFRleHRDb2RlY0xhdGluMT4oKTsKKyAgICB9KTsKIH0KIAogU3RyaW5nIFRl
eHRDb2RlY0xhdGluMTo6ZGVjb2RlKGNvbnN0IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBi
b29sLCBib29sLCBib29sJikKQEAgLTEzOSwxMCArMTM3LDEwIEBAIFN0cmluZyBUZXh0Q29kZWNM
YXRpbjE6OmRlY29kZShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90IGxlbmd0aCwgYm9vbCwgYm9v
bCwgYm9vCiAgICAgICAgICAgICAqZGVzdGluYXRpb24gPSAqc291cmNlOwogICAgICAgICB9IGVs
c2UgewogdXNlTG9va3VwVGFibGU6Ci0gICAgICAgICAgICBpZiAodGFibGVbKnNvdXJjZV0gPiAw
eGZmKQorICAgICAgICAgICAgaWYgKGxhdGluMUNvbnZlcnNpb25UYWJsZVsqc291cmNlXSA+IDB4
ZmYpCiAgICAgICAgICAgICAgICAgZ290byB1cENvbnZlcnRUbzE2Qml0OwogCi0gICAgICAgICAg
ICAqZGVzdGluYXRpb24gPSB0YWJsZVsqc291cmNlXTsKKyAgICAgICAgICAgICpkZXN0aW5hdGlv
biA9IGxhdGluMUNvbnZlcnNpb25UYWJsZVsqc291cmNlXTsKICAgICAgICAgfQogCiAgICAgICAg
ICsrc291cmNlOwpAQCAtMTY1LDcgKzE2Myw3IEBAIHVwQ29udmVydFRvMTZCaXQ6CiAgICAgICAg
ICpkZXN0aW5hdGlvbjE2KysgPSAqcHRyOCsrOwogCiAgICAgLy8gSGFuZGxlIHRoZSBjaGFyYWN0
ZXIgdGhhdCB0cmlnZ2VyZWQgdGhlIDE2IGJpdCBwYXRoCi0gICAgKmRlc3RpbmF0aW9uMTYgPSB0
YWJsZVsqc291cmNlXTsKKyAgICAqZGVzdGluYXRpb24xNiA9IGxhdGluMUNvbnZlcnNpb25UYWJs
ZVsqc291cmNlXTsKICAgICArK3NvdXJjZTsKICAgICArK2Rlc3RpbmF0aW9uMTY7CiAKQEAgLTE5
NCw3ICsxOTIsNyBAQCB1cENvbnZlcnRUbzE2Qml0OgogICAgICAgICAgICAgKmRlc3RpbmF0aW9u
MTYgPSAqc291cmNlOwogICAgICAgICB9IGVsc2UgewogdXNlTG9va3VwVGFibGUxNjoKLSAgICAg
ICAgICAgICpkZXN0aW5hdGlvbjE2ID0gdGFibGVbKnNvdXJjZV07CisgICAgICAgICAgICAqZGVz
dGluYXRpb24xNiA9IGxhdGluMUNvbnZlcnNpb25UYWJsZVsqc291cmNlXTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgKytzb3VyY2U7CkBAIC0yMDQsNTggKzIwMiw1MSBAQCB1c2VMb29r
dXBUYWJsZTE2OgogICAgIHJldHVybiByZXN1bHQxNjsKIH0KIAotc3RhdGljIENTdHJpbmcgZW5j
b2RlQ29tcGxleFdpbmRvd3NMYXRpbjEoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBs
ZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcgaGFuZGxpbmcpCitzdGF0aWMgVmVjdG9yPHVpbnQ4
X3Q+IGVuY29kZUNvbXBsZXhXaW5kb3dzTGF0aW4xKFN0cmluZ1ZpZXcgc3RyaW5nLCBVbmVuY29k
YWJsZUhhbmRsaW5nIGhhbmRsaW5nKQogewotICAgIFZlY3RvcjxjaGFyPiByZXN1bHQobGVuZ3Ro
KTsKLSAgICBjaGFyKiBieXRlcyA9IHJlc3VsdC5kYXRhKCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+
IHJlc3VsdDsKIAotICAgIHNpemVfdCByZXN1bHRMZW5ndGggPSAwOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGVuZ3RoOyApIHsKLSAgICAgICAgVUNoYXIzMiBjOwotICAgICAgICBVMTZf
TkVYVChjaGFyYWN0ZXJzLCBpLCBsZW5ndGgsIGMpOwotICAgICAgICB1bnNpZ25lZCBjaGFyIGIg
PSBjOworICAgIGZvciAoYXV0byBjaGFyYWN0ZXIgOiBzdHJpbmcuY29kZVBvaW50cygpKSB7Cisg
ICAgICAgIHVpbnQ4X3QgYiA9IGNoYXJhY3RlcjsKICAgICAgICAgLy8gRG8gYW4gZWZmaWNpZW50
IGNoZWNrIHRvIGRldGVjdCBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gMDAtN0YgYW5kIEEwLUZGLgot
ICAgICAgICBpZiAoYiAhPSBjIHx8IChjICYgMHhFMCkgPT0gMHg4MCkgeworICAgICAgICBpZiAo
YiAhPSBjaGFyYWN0ZXIgfHwgKGNoYXJhY3RlciAmIDB4RTApID09IDB4ODApIHsKICAgICAgICAg
ICAgIC8vIExvb2sgZm9yIGEgd2F5IHRvIGVuY29kZSB0aGlzIHdpdGggV2luZG93cyBMYXRpbi0x
LgotICAgICAgICAgICAgZm9yIChiID0gMHg4MDsgYiA8IDB4QTA7ICsrYikKLSAgICAgICAgICAg
ICAgICBpZiAodGFibGVbYl0gPT0gYykKKyAgICAgICAgICAgIGZvciAoYiA9IDB4ODA7IGIgPCAw
eEEwOyArK2IpIHsKKyAgICAgICAgICAgICAgICBpZiAobGF0aW4xQ29udmVyc2lvblRhYmxlW2Jd
ID09IGNoYXJhY3RlcikKICAgICAgICAgICAgICAgICAgICAgZ290byBnb3RCeXRlOworICAgICAg
ICAgICAgfQogICAgICAgICAgICAgLy8gTm8gd2F5IHRvIGVuY29kZSB0aGlzIGNoYXJhY3RlciB3
aXRoIFdpbmRvd3MgTGF0aW4tMS4KICAgICAgICAgICAgIFVuZW5jb2RhYmxlUmVwbGFjZW1lbnRB
cnJheSByZXBsYWNlbWVudDsKLSAgICAgICAgICAgIGludCByZXBsYWNlbWVudExlbmd0aCA9IFRl
eHRDb2RlYzo6Z2V0VW5lbmNvZGFibGVSZXBsYWNlbWVudChjLCBoYW5kbGluZywgcmVwbGFjZW1l
bnQpOwotICAgICAgICAgICAgcmVzdWx0Lmdyb3cocmVzdWx0TGVuZ3RoICsgcmVwbGFjZW1lbnRM
ZW5ndGggKyBsZW5ndGggLSBpKTsKLSAgICAgICAgICAgIGJ5dGVzID0gcmVzdWx0LmRhdGEoKTsK
LSAgICAgICAgICAgIG1lbWNweShieXRlcyArIHJlc3VsdExlbmd0aCwgcmVwbGFjZW1lbnQsIHJl
cGxhY2VtZW50TGVuZ3RoKTsKLSAgICAgICAgICAgIHJlc3VsdExlbmd0aCArPSByZXBsYWNlbWVu
dExlbmd0aDsKKyAgICAgICAgICAgIGludCByZXBsYWNlbWVudExlbmd0aCA9IFRleHRDb2RlYzo6
Z2V0VW5lbmNvZGFibGVSZXBsYWNlbWVudChjaGFyYWN0ZXIsIGhhbmRsaW5nLCByZXBsYWNlbWVu
dCk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJlcGxhY2VtZW50LmRhdGEoKSwgcmVwbGFj
ZW1lbnRMZW5ndGgpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICBnb3RC
eXRlOgotICAgICAgICBieXRlc1tyZXN1bHRMZW5ndGgrK10gPSBiOworICAgICAgICByZXN1bHQu
YXBwZW5kKGIpOwogICAgIH0KIAotICAgIHJldHVybiBDU3RyaW5nKGJ5dGVzLCByZXN1bHRMZW5n
dGgpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUNTdHJpbmcgVGV4dENvZGVjTGF0aW4xOjpl
bmNvZGUoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxl
SGFuZGxpbmcgaGFuZGxpbmcpCitWZWN0b3I8dWludDhfdD4gVGV4dENvZGVjTGF0aW4xOjplbmNv
ZGUoU3RyaW5nVmlldyBzdHJpbmcsIFVuZW5jb2RhYmxlSGFuZGxpbmcgaGFuZGxpbmcpCiB7CiAg
ICAgewotICAgICAgICBjaGFyKiBieXRlczsKLSAgICAgICAgQ1N0cmluZyBzdHJpbmcgPSBDU3Ry
aW5nOjpuZXdVbmluaXRpYWxpemVkKGxlbmd0aCwgYnl0ZXMpOworICAgICAgICBWZWN0b3I8dWlu
dDhfdD4gcmVzdWx0KHN0cmluZy5sZW5ndGgoKSk7CisgICAgICAgIGF1dG8qIGJ5dGVzID0gcmVz
dWx0LmRhdGEoKTsKIAotICAgICAgICAvLyBDb252ZXJ0IHRoZSBzdHJpbmcgYSBmYXN0IHdheSBh
bmQgc2ltdWx0YW5lb3VzbHkgZG8gYW4gZWZmaWNpZW50IGNoZWNrIHRvIHNlZSBpZiBpdCdzIGFs
bCBBU0NJSS4KKyAgICAgICAgLy8gQ29udmVydCBhbmQgc2ltdWx0YW5lb3VzbHkgZG8gYSBjaGVj
ayB0byBzZWUgaWYgaXQncyBhbGwgQVNDSUkuCiAgICAgICAgIFVDaGFyIG9yZWQgPSAwOwotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBV
Q2hhciBjID0gY2hhcmFjdGVyc1tpXTsKLSAgICAgICAgICAgIGJ5dGVzW2ldID0gYzsKLSAgICAg
ICAgICAgIG9yZWQgfD0gYzsKKyAgICAgICAgZm9yIChhdXRvIGNoYXJhY3RlciA6IHN0cmluZy5j
b2RlVW5pdHMoKSkgeworICAgICAgICAgICAgKmJ5dGVzKysgPSBjaGFyYWN0ZXI7CisgICAgICAg
ICAgICBvcmVkIHw9IGNoYXJhY3RlcjsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghKG9yZWQg
JiAweEZGODApKQotICAgICAgICAgICAgcmV0dXJuIHN0cmluZzsKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogCiAgICAgLy8gSWYgaXQgd2Fzbid0IGFsbCBBU0NJSSwgY2FsbCB0
aGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIG1vcmUtY29tcGxleCBjYXNlcy4KLSAgICByZXR1cm4g
ZW5jb2RlQ29tcGxleFdpbmRvd3NMYXRpbjEoY2hhcmFjdGVycywgbGVuZ3RoLCBoYW5kbGluZyk7
CisgICAgcmV0dXJuIGVuY29kZUNvbXBsZXhXaW5kb3dzTGF0aW4xKHN0cmluZywgaGFuZGxpbmcp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuaAppbmRleCA5ZDA4YWEzZjU5NzRlOTYyYTE1NDFkMDNl
ZDc5ZGY5YmNhMmRlNDIxLi43NGFiYzc2YWMzZDBkODc5OTAzZTNjNDIwZWQ2ZThhNDc0Mzc2MjI1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGlu
MS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmgK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTIzLDIyICsyMywyMSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBU
ZXh0Q29kZWNMYXRpbjFfaAotI2RlZmluZSBUZXh0Q29kZWNMYXRpbjFfaAorI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJUZXh0Q29kZWMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAg
Y2xhc3MgVGV4dENvZGVjTGF0aW4xIDogcHVibGljIFRleHRDb2RlYyB7Ci0gICAgcHVibGljOgot
ICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVn
aXN0cmFyKTsKLSAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVn
aXN0cmFyKTsKK2NsYXNzIFRleHRDb2RlY0xhdGluMSBmaW5hbCA6IHB1YmxpYyBUZXh0Q29kZWMg
eworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhFbmNvZGlu
Z05hbWVSZWdpc3RyYXIpOworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ29kZWNzKFRleHRDb2Rl
Y1JlZ2lzdHJhcik7CiAKLSAgICAgICAgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90
IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpIG92
ZXJyaWRlOwotICAgICAgICBDU3RyaW5nIGVuY29kZShjb25zdCBVQ2hhciosIHNpemVfdCBsZW5n
dGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcpIG92ZXJyaWRlOwotICAgIH07Citwcml2YXRlOgorICAg
IFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJv
b2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9yKSBmaW5hbDsKKyAgICBWZWN0b3I8dWludDhf
dD4gZW5jb2RlKFN0cmluZ1ZpZXcsIFVuZW5jb2RhYmxlSGFuZGxpbmcpIGZpbmFsOworfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gVGV4dENvZGVjTGF0aW4xX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjUmVwbGFjZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNSZXBsYWNlbWVu
dC5jcHAKaW5kZXggZmMzOWIxOGI4Yzk5NzUxMGM4YzQxYzY2MThhZDE4N2I3NTg0ZTIyYS4uYmEy
NjE0Y2ExNDhhNDI1MGFiZDI5MjJkZGMzNzZjNjBkMjIyODlkZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNSZXBsYWNlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNSZXBsYWNlbWVudC5jcHAKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMjIg
KzMwLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RkOjp1bmlxdWVfcHRyPFRleHRD
b2RlYz4gVGV4dENvZGVjUmVwbGFjZW1lbnQ6OmNyZWF0ZShjb25zdCBUZXh0RW5jb2RpbmcmLCBj
b25zdCB2b2lkKikKLXsKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxUZXh0Q29kZWNSZXBs
YWNlbWVudD4oKTsKLX0KLQotVGV4dENvZGVjUmVwbGFjZW1lbnQ6OlRleHRDb2RlY1JlcGxhY2Vt
ZW50KCkKLXsKLX0KLQogdm9pZCBUZXh0Q29kZWNSZXBsYWNlbWVudDo6cmVnaXN0ZXJFbmNvZGlu
Z05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIpCiB7Ci0gICAgLy8gVGhlICdy
ZXBsYWNlbWVudCcgaXRzZWxmIGlzIG5vdCBhIHZhbGlkIGxhYmVsLiBJdCBpcyB0aGUgbmFtZSBv
ZgorICAgIC8vIFRoZSBzdHJpbmcgJ3JlcGxhY2VtZW50JyBpdHNlbGYgaXMgbm90IGEgdmFsaWQg
bGFiZWwuIEl0IGlzIHRoZSBuYW1lIG9mCiAgICAgLy8gYSBncm91cCBvZiBsZWdhY3kgZW5jb2Rp
bmcgbGFiZWxzLiBIZW5jZSwgaXQgY2Fubm90IGJlIHVzZWQgZGlyZWN0bHkuCisgICAgLy8gVGhl
IFRleHRFbmNvZGluZyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBhYm92ZSBydWxlOyBoZXJlIHdlIHJl
Z2lzdGVyIGl0IG5vcm1hbGx5LgogICAgIHJlZ2lzdHJhcigicmVwbGFjZW1lbnQiLCAicmVwbGFj
ZW1lbnQiKTsKIAotICAgIC8vIFRoZSBsYWJlbHMKICAgICByZWdpc3RyYXIoImNzaXNvMjAyMmty
IiwgInJlcGxhY2VtZW50Iik7CiAgICAgcmVnaXN0cmFyKCJoei1nYi0yMzEyIiwgInJlcGxhY2Vt
ZW50Iik7CiAgICAgcmVnaXN0cmFyKCJpc28tMjAyMi1jbiIsICJyZXBsYWNlbWVudCIpOwpAQCAt
NTUsNyArNDYsOSBAQCB2b2lkIFRleHRDb2RlY1JlcGxhY2VtZW50OjpyZWdpc3RlckVuY29kaW5n
TmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhcgogCiB2b2lkIFRleHRDb2RlY1Jl
cGxhY2VtZW50OjpyZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFyKQog
ewotICAgIHJlZ2lzdHJhcigicmVwbGFjZW1lbnQiLCBjcmVhdGUsIDApOworICAgIHJlZ2lzdHJh
cigicmVwbGFjZW1lbnQiLCBbXSB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFRl
eHRDb2RlY1JlcGxhY2VtZW50PigpOworICAgIH0pOwogfQogCiBTdHJpbmcgVGV4dENvZGVjUmVw
bGFjZW1lbnQ6OmRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90LCBib29sLCBib29sLCBib29sJiBz
YXdFcnJvcikKQEAgLTYzLDkgKzU2LDggQEAgU3RyaW5nIFRleHRDb2RlY1JlcGxhY2VtZW50Ojpk
ZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCwgYm9vbCwgYm9vbCwgYm9vbCYgc2F3RXIKICAgICBz
YXdFcnJvciA9IHRydWU7CiAgICAgaWYgKG1fc2VudEVPRikKICAgICAgICAgcmV0dXJuIGVtcHR5
U3RyaW5nKCk7Ci0KICAgICBtX3NlbnRFT0YgPSB0cnVlOwotICAgIHJldHVybiBTdHJpbmcoJnJl
cGxhY2VtZW50Q2hhcmFjdGVyLCAxKTsKKyAgICByZXR1cm4gU3RyaW5nIHsgJnJlcGxhY2VtZW50
Q2hhcmFjdGVyLCAxIH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjUmVwbGFjZW1lbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjUmVwbGFjZW1lbnQuaAppbmRleCA3
YTY3ZDUxNmRiNzBjMTZlOTYwZjVjYjJiYTg0MGU5NjJlOGI1MWY0Li5jZTJiYzYzNjM0OWE3ZDg4
ZGVhNzY2ZTBiMGM3NTRmMDE1MGViZGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRDb2RlY1JlcGxhY2VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9UZXh0Q29kZWNSZXBsYWNlbWVudC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFRleHRDb2RlY1JlcGxh
Y2VtZW50X2gKLSNkZWZpbmUgVGV4dENvZGVjUmVwbGFjZW1lbnRfaAorI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlICJUZXh0Q29kZWNVVEY4LmgiCiAKQEAgLTMyLDIwICszMSwxNCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIFRleHRDb2RlY1JlcGxhY2VtZW50IDogcHVibGljIFRleHRD
b2RlY1VURjggewogcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VGV4dENvZGVj
PiBjcmVhdGUoY29uc3QgVGV4dEVuY29kaW5nJiwgY29uc3Qgdm9pZCopOwotCi0gICAgVGV4dENv
ZGVjUmVwbGFjZW1lbnQoKTsKLQogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRW5jb2RpbmdOYW1l
cyhFbmNvZGluZ05hbWVSZWdpc3RyYXIpOwogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ29kZWNz
KFRleHRDb2RlY1JlZ2lzdHJhcik7CiAKIHByaXZhdGU6Ci0gICAgU3RyaW5nIGRlY29kZShjb25z
dCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9v
bCYgc2F3RXJyb3IpIG92ZXJyaWRlOworICAgIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNp
emVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9y
KSBmaW5hbDsKIAogICAgIGJvb2wgbV9zZW50RU9GIHsgZmFsc2UgfTsKIAogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLyogVGV4dENvZGVjUmVwbGFjZW1lbnRfaCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEYxNi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcAppbmRl
eCAwZTM5ZGUxMjg1MTEyODI2NGFiODUyYTg0ZGMwZDM5OWMxYTAxNzhmLi4zODZhMTc4MjYyNzI2
ZDgxMTM0NGI3ZmRiMmZjOTI1ZmNjODk3ODQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw2ICszMiwx
MSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2lubGluZSBUZXh0Q29kZWNVVEYxNjo6VGV4
dENvZGVjVVRGMTYoYm9vbCBsaXR0bGVFbmRpYW4pCisgICAgOiBtX2xpdHRsZUVuZGlhbihsaXR0
bGVFbmRpYW4pCit7Cit9CisKIHZvaWQgVGV4dENvZGVjVVRGMTY6OnJlZ2lzdGVyRW5jb2RpbmdO
YW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQogewogICAgIHJlZ2lzdHJhcigi
VVRGLTE2TEUiLCAiVVRGLTE2TEUiKTsKQEAgLTQ3LDIwICs1MiwxNCBAQCB2b2lkIFRleHRDb2Rl
Y1VURjE2OjpyZWdpc3RlckVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lz
dHJhcikKICAgICByZWdpc3RyYXIoInVuaWNvZGVGRkZFIiwgIlVURi0xNkJFIik7CiB9CiAKLXN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VGV4dENvZGVjPiBuZXdTdHJlYW1pbmdUZXh0RGVjb2RlclVU
RjE2TEUoY29uc3QgVGV4dEVuY29kaW5nJiwgY29uc3Qgdm9pZCopCi17Ci0gICAgcmV0dXJuIHN0
ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjVVRGMTY+KHRydWUpOwotfQotCi1zdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPFRleHRDb2RlYz4gbmV3U3RyZWFtaW5nVGV4dERlY29kZXJVVEYxNkJFKGNvbnN0
IFRleHRFbmNvZGluZyYsIGNvbnN0IHZvaWQqKQotewotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPFRleHRDb2RlY1VURjE2PihmYWxzZSk7Ci19Ci0KIHZvaWQgVGV4dENvZGVjVVRGMTY6OnJl
Z2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciByZWdpc3RyYXIpCiB7Ci0gICAgcmVnaXN0
cmFyKCJVVEYtMTZMRSIsIG5ld1N0cmVhbWluZ1RleHREZWNvZGVyVVRGMTZMRSwgMCk7Ci0gICAg
cmVnaXN0cmFyKCJVVEYtMTZCRSIsIG5ld1N0cmVhbWluZ1RleHREZWNvZGVyVVRGMTZCRSwgMCk7
CisgICAgcmVnaXN0cmFyKCJVVEYtMTZMRSIsIFtdIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV91bmlxdWU8VGV4dENvZGVjVVRGMTY+KHRydWUpOworICAgIH0pOworICAgIHJlZ2lzdHJhcigi
VVRGLTE2QkUiLCBbXSB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFRleHRDb2Rl
Y1VURjE2PihmYWxzZSk7CisgICAgfSk7CiB9CiAKIFN0cmluZyBUZXh0Q29kZWNVVEYxNjo6ZGVj
b2RlKGNvbnN0IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sLCBib29sLCBib29sJikK
QEAgLTExNCwzNiArMTEzLDI0IEBAIFN0cmluZyBUZXh0Q29kZWNVVEYxNjo6ZGVjb2RlKGNvbnN0
IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sLCBib29sLCBib29sCiAgICAgcmV0dXJu
IFN0cmluZzo6YWRvcHQoV1RGTW92ZShidWZmZXIpKTsKIH0KIAotQ1N0cmluZyBUZXh0Q29kZWNV
VEYxNjo6ZW5jb2RlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBVbmVu
Y29kYWJsZUhhbmRsaW5nKQorVmVjdG9yPHVpbnQ4X3Q+IFRleHRDb2RlY1VURjE2OjplbmNvZGUo
U3RyaW5nVmlldyBzdHJpbmcsIFVuZW5jb2RhYmxlSGFuZGxpbmcpCiB7Ci0gICAgLy8gV2UgbmVl
ZCB0byBiZSBzdXJlIHdlIGNhbiBkb3VibGUgdGhlIGxlbmd0aCB3aXRob3V0IG92ZXJmbG93aW5n
LgotICAgIC8vIFNpbmNlIHRoZSBwYXNzZWQtaW4gbGVuZ3RoIGlzIHRoZSBsZW5ndGggb2YgYW4g
YWN0dWFsIGV4aXN0aW5nCi0gICAgLy8gY2hhcmFjdGVyIGJ1ZmZlciwgZWFjaCBjaGFyYWN0ZXIg
aXMgdHdvIGJ5dGVzLCBhbmQgd2Uga25vdwotICAgIC8vIHRoZSBidWZmZXIgZG9lc24ndCBvY2N1
cHkgdGhlIGVudGlyZSBhZGRyZXNzIHNwYWNlLCB3ZSBjYW4KLSAgICAvLyBhc3NlcnQgaGVyZSB0
aGF0IGRvdWJsaW5nIHRoZSBsZW5ndGggZG9lcyBub3Qgb3ZlcmZsb3cgc2l6ZV90Ci0gICAgLy8g
YW5kIHRoZXJlJ3Mgbm8gbmVlZCBmb3IgYSBydW50aW1lIGNoZWNrLgotICAgIEFTU0VSVChsZW5n
dGggPD0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAvIDIpOwotCi0gICAgY2hh
ciogYnl0ZXM7Ci0gICAgQ1N0cmluZyBzdHJpbmcgPSBDU3RyaW5nOjpuZXdVbmluaXRpYWxpemVk
KGxlbmd0aCAqIDIsIGJ5dGVzKTsKLQotICAgIC8vIEZJWE1FOiBDU3RyaW5nIGlzIG5vdCBhIHJl
YXNvbmFibGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIGVuY29kZWQgVVRGLTE2LCB3aGljaCB3aWxsIGhh
dmUKLSAgICAvLyBudWxsIGNoYXJhY3RlcnMgaW5zaWRlIGl0LiBQZXJoYXBzIHRoZSByZXN1bHQg
b2YgZW5jb2RlIHNob3VsZCBub3QgYmUgYSBDU3RyaW5nLgorICAgIFZlY3Rvcjx1aW50OF90PiBy
ZXN1bHQoV1RGOjpjaGVja2VkUHJvZHVjdDxzaXplX3Q+KHN0cmluZy5sZW5ndGgoKSwgMikudW5z
YWZlR2V0KCkpOworICAgIGF1dG8qIGJ5dGVzID0gcmVzdWx0LmRhdGEoKTsKKwogICAgIGlmICht
X2xpdHRsZUVuZGlhbikgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKSB7Ci0gICAgICAgICAgICBVQ2hhciBjID0gY2hhcmFjdGVyc1tpXTsKLSAgICAgICAgICAg
IGJ5dGVzW2kgKiAyXSA9IGM7Ci0gICAgICAgICAgICBieXRlc1tpICogMiArIDFdID0gYyA+PiA4
OworICAgICAgICBmb3IgKGF1dG8gY2hhcmFjdGVyIDogc3RyaW5nLmNvZGVVbml0cygpKSB7Cisg
ICAgICAgICAgICAqYnl0ZXMrKyA9IGNoYXJhY3RlcjsKKyAgICAgICAgICAgICpieXRlcysrID0g
Y2hhcmFjdGVyID4+IDg7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBVQ2hhciBjID0gY2hh
cmFjdGVyc1tpXTsKLSAgICAgICAgICAgIGJ5dGVzW2kgKiAyXSA9IGMgPj4gODsKLSAgICAgICAg
ICAgIGJ5dGVzW2kgKiAyICsgMV0gPSBjOworICAgICAgICBmb3IgKGF1dG8gY2hhcmFjdGVyIDog
c3RyaW5nLmNvZGVVbml0cygpKSB7CisgICAgICAgICAgICAqYnl0ZXMrKyA9IGNoYXJhY3RlciA+
PiA4OworICAgICAgICAgICAgKmJ5dGVzKysgPSBjaGFyYWN0ZXI7CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICByZXR1cm4gc3RyaW5nOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
VGV4dENvZGVjVVRGMTYuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVj
VVRGMTYuaAppbmRleCAyODc2MGNkZWU2ZGNiMmE4ZWY2ZmJjOTZiNWE4Mjg5ZjBmYTMyNWYyLi5j
MTFiYmZiMWNhOGI4ZjNhOTFiMWE3ZWY4NWUyNGJiNGVjMTgzOWM3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEYxNi5oCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMywyOSArMjMsMjYg
QEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgVGV4dENvZGVjVVRGMTZfaAotI2Rl
ZmluZSBUZXh0Q29kZWNVVEYxNl9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIlRleHRDb2Rl
Yy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBUZXh0Q29kZWNVVEYxNiA6
IHB1YmxpYyBUZXh0Q29kZWMgewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIHZvaWQgcmVn
aXN0ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhcik7Ci0gICAgICAgIHN0YXRp
YyB2b2lkIHJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7CitjbGFzcyBUZXh0Q29k
ZWNVVEYxNiA6IHB1YmxpYyBUZXh0Q29kZWMgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIHJl
Z2lzdGVyRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIpOworICAgIHN0YXRpYyB2
b2lkIHJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7CiAKLSAgICAgICAgVGV4dENv
ZGVjVVRGMTYoYm9vbCBsaXR0bGVFbmRpYW4pIDogbV9saXR0bGVFbmRpYW4obGl0dGxlRW5kaWFu
KSwgbV9oYXZlQnVmZmVyZWRCeXRlKGZhbHNlKSB7IH0KKyAgICBleHBsaWNpdCBUZXh0Q29kZWNV
VEYxNihib29sIGxpdHRsZUVuZGlhbik7CiAKLSAgICAgICAgU3RyaW5nIGRlY29kZShjb25zdCBj
aGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYg
c2F3RXJyb3IpIG92ZXJyaWRlOwotICAgICAgICBDU3RyaW5nIGVuY29kZShjb25zdCBVQ2hhcios
IHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcpIG92ZXJyaWRlOworcHJpdmF0ZToK
KyAgICBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNo
LCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcikgZmluYWw7CisgICAgVmVjdG9yPHVp
bnQ4X3Q+IGVuY29kZShTdHJpbmdWaWV3LCBVbmVuY29kYWJsZUhhbmRsaW5nKSBmaW5hbDsKIAot
ICAgIHByaXZhdGU6Ci0gICAgICAgIGJvb2wgbV9saXR0bGVFbmRpYW47Ci0gICAgICAgIGJvb2wg
bV9oYXZlQnVmZmVyZWRCeXRlOwotICAgICAgICB1bnNpZ25lZCBjaGFyIG1fYnVmZmVyZWRCeXRl
OwotICAgIH07CisgICAgYm9vbCBtX2xpdHRsZUVuZGlhbjsKKyAgICBib29sIG1faGF2ZUJ1ZmZl
cmVkQnl0ZSB7IGZhbHNlIH07CisgICAgdW5zaWduZWQgY2hhciBtX2J1ZmZlcmVkQnl0ZTsKK307
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFRleHRDb2RlY1VURjE2X2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGOC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjguY3BwCmluZGV4
IGNkNTA0Mjc5OTBmZjU2YTJmMWE5MWIzNmNlNTMzNmI1ZmU5YjI0NjMuLmIzMThlNjIyYmNiZTEx
ODAxOWE0MTY4NTYzMzM1NTZmMTA3MmQ3OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dENvZGVjVVRGOC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0Q29kZWNVVEY4LmNwcApAQCAtNTUsOSArNTUsOSBAQCB2b2lkIFRleHRDb2Rl
Y1VURjg6OnJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0
cmFyKQogCiB2b2lkIFRleHRDb2RlY1VURjg6OnJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lz
dHJhciByZWdpc3RyYXIpCiB7Ci0gICAgcmVnaXN0cmFyKCJVVEYtOCIsIFtdIChjb25zdCBUZXh0
RW5jb2RpbmcmLCBjb25zdCB2b2lkKikgLT4gc3RkOjp1bmlxdWVfcHRyPFRleHRDb2RlYz4gewor
ICAgIHJlZ2lzdHJhcigiVVRGLTgiLCBbXSB7CiAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPFRleHRDb2RlY1VURjg+KCk7Ci0gICAgfSwgbnVsbHB0cik7CisgICAgfSk7CiB9CiAKIHN0
YXRpYyBpbmxpbmUgaW50IG5vbkFTQ0lJU2VxdWVuY2VMZW5ndGgodWludDhfdCBmaXJzdEJ5dGUp
CkBAIC00MzIsMjIgKzQzMiwxNyBAQCB1cENvbnZlcnRUbzE2Qml0OgogICAgIHJldHVybiBTdHJp
bmc6OmFkb3B0KFdURk1vdmUoYnVmZmVyMTYpKTsKIH0KIAotQ1N0cmluZyBUZXh0Q29kZWNVVEY4
OjplbmNvZGUoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFVuZW5jb2Rh
YmxlSGFuZGxpbmcpCitWZWN0b3I8dWludDhfdD4gVGV4dENvZGVjVVRGODo6ZW5jb2RlKFN0cmlu
Z1ZpZXcgc3RyaW5nLCBVbmVuY29kYWJsZUhhbmRsaW5nKQogewogICAgIC8vIFRoZSBtYXhpbXVt
IG51bWJlciBvZiBVVEYtOCBieXRlcyBuZWVkZWQgcGVyIFVURi0xNiBjb2RlIHVuaXQgaXMgMy4K
ICAgICAvLyBCTVAgY2hhcmFjdGVycyB0YWtlIG9ubHkgb25lIFVURi0xNiBjb2RlIHVuaXQgYW5k
IGNhbiB0YWtlIHVwIHRvIDMgYnl0ZXMgKDN4KS4KICAgICAvLyBOb24tQk1QIGNoYXJhY3RlcnMg
dGFrZSB0d28gVVRGLTE2IGNvZGUgdW5pdHMgYW5kIGNhbiB0YWtlIHVwIHRvIDQgYnl0ZXMgKDJ4
KS4KLSAgICBpZiAobGVuZ3RoID4gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAv
IDMpCi0gICAgICAgIENSQVNIKCk7Ci0KLSAgICBWZWN0b3I8Y2hhciwgMzAwMD4gYnl0ZXMobGVu
Z3RoICogMyk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ5dGVzKFdURjo6Y2hlY2tlZFByb2R1Y3Q8
c2l6ZV90PihzdHJpbmcubGVuZ3RoKCksIDMpLnVuc2FmZUdldCgpKTsKICAgICBzaXplX3QgYnl0
ZXNXcml0dGVuID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKSB7Ci0g
ICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyOwotICAgICAgICBVMTZfTkVYVChjaGFyYWN0ZXJzLCBp
LCBsZW5ndGgsIGNoYXJhY3Rlcik7CisgICAgZm9yIChhdXRvIGNoYXJhY3RlciA6IHN0cmluZy5j
b2RlUG9pbnRzKCkpCiAgICAgICAgIFU4X0FQUEVORF9VTlNBRkUoYnl0ZXMuZGF0YSgpLCBieXRl
c1dyaXR0ZW4sIGNoYXJhY3Rlcik7Ci0gICAgfQotICAgIHJldHVybiBDU3RyaW5nIHsgYnl0ZXMu
ZGF0YSgpLCBieXRlc1dyaXR0ZW4gfTsKKyAgICBieXRlcy5zaHJpbmsoYnl0ZXNXcml0dGVuKTsK
KyAgICByZXR1cm4gYnl0ZXM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGOC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEY4LmgKaW5kZXggMjA4MTNjMmZlYTU5
MDI4MWFmNDE1OTU0ODM4YjBjOWNiZGQ1N2IyNi4uZjgyODJiNWYzNGE4OTQ3M2RlOWFkN2EyMTc2
NWFmNmEzMmFjZjk1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0Q29kZWNVVEY4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29k
ZWNVVEY4LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiVGV4
dENvZGVjLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvTENoYXIuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC0zNiw3ICszNyw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBTdHJpbmcg
ZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BP
bkVycm9yLCBib29sJiBzYXdFcnJvcikgb3ZlcnJpZGU7Ci0gICAgQ1N0cmluZyBlbmNvZGUoY29u
c3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5nKSBvdmVycmlkZTsK
KyAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlKFN0cmluZ1ZpZXcsIFVuZW5jb2RhYmxlSGFuZGxp
bmcpIGZpbmFsOwogCiAgICAgYm9vbCBoYW5kbGVQYXJ0aWFsU2VxdWVuY2UoTENoYXIqJiBkZXN0
aW5hdGlvbiwgY29uc3QgdWludDhfdComIHNvdXJjZSwgY29uc3QgdWludDhfdCogZW5kLCBib29s
IGZsdXNoKTsKICAgICB2b2lkIGhhbmRsZVBhcnRpYWxTZXF1ZW5jZShVQ2hhciomIGRlc3RpbmF0
aW9uLCBjb25zdCB1aW50OF90KiYgc291cmNlLCBjb25zdCB1aW50OF90KiBlbmQsIGJvb2wgZmx1
c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9yKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHAKaW5kZXggZTMx
OTIxNGU0ZjUwMmYyZGFjNDM4N2ZiOWM0ODdmNmNjNTVlMTBjNy4uMjk2YzQ2OWYxNjlmYjkxMWRj
OGRiZDdhNjQ3ZWE1NjQxZTJmZmUxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw5ICsyNiw4IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGV4dENvZGVjVXNlckRlZmluZWQuaCIK
IAotI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8YXJyYXk+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1ZmZlci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIApAQCAtMzksNzMgKzM4LDYyIEBAIHZvaWQgVGV4dENvZGVjVXNlckRlZmluZWQ6OnJl
Z2lzdGVyRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyCiAgICAg
cmVnaXN0cmFyKCJ4LXVzZXItZGVmaW5lZCIsICJ4LXVzZXItZGVmaW5lZCIpOwogfQogCi1zdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPFRleHRDb2RlYz4gbmV3U3RyZWFtaW5nVGV4dERlY29kZXJVc2Vy
RGVmaW5lZChjb25zdCBUZXh0RW5jb2RpbmcmLCBjb25zdCB2b2lkKikKLXsKLSAgICByZXR1cm4g
c3RkOjptYWtlX3VuaXF1ZTxUZXh0Q29kZWNVc2VyRGVmaW5lZD4oKTsKLX0KLQogdm9pZCBUZXh0
Q29kZWNVc2VyRGVmaW5lZDo6cmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lz
dHJhcikKIHsKLSAgICByZWdpc3RyYXIoIngtdXNlci1kZWZpbmVkIiwgbmV3U3RyZWFtaW5nVGV4
dERlY29kZXJVc2VyRGVmaW5lZCwgMCk7CisgICAgcmVnaXN0cmFyKCJ4LXVzZXItZGVmaW5lZCIs
IFtdIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjVXNlckRlZmlu
ZWQ+KCk7CisgICAgfSk7CiB9CiAKIFN0cmluZyBUZXh0Q29kZWNVc2VyRGVmaW5lZDo6ZGVjb2Rl
KGNvbnN0IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sLCBib29sLCBib29sJikKIHsK
ICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKICAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KGxl
bmd0aCk7Ci0KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAg
ICAgIHNpZ25lZCBjaGFyIGMgPSBieXRlc1tpXTsKICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGF0
aWNfY2FzdDxVQ2hhcj4oYyAmIDB4RjdGRikpOwogICAgIH0KLQogICAgIHJldHVybiByZXN1bHQu
dG9TdHJpbmcoKTsKIH0KIAotc3RhdGljIENTdHJpbmcgZW5jb2RlQ29tcGxleFVzZXJEZWZpbmVk
KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRs
aW5nIGhhbmRsaW5nKQorc3RhdGljIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVDb21wbGV4VXNlckRl
ZmluZWQoU3RyaW5nVmlldyBzdHJpbmcsIFVuZW5jb2RhYmxlSGFuZGxpbmcgaGFuZGxpbmcpCiB7
Ci0gICAgVmVjdG9yPGNoYXI+IHJlc3VsdChsZW5ndGgpOwotICAgIGNoYXIqIGJ5dGVzID0gcmVz
dWx0LmRhdGEoKTsKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OwogCi0gICAgc2l6ZV90IHJl
c3VsdExlbmd0aCA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICkgewot
ICAgICAgICBVQ2hhcjMyIGM7Ci0gICAgICAgIFUxNl9ORVhUKGNoYXJhY3RlcnMsIGksIGxlbmd0
aCwgYyk7Ci0gICAgICAgIHNpZ25lZCBjaGFyIHNpZ25lZEJ5dGUgPSBjOwotICAgICAgICBpZiAo
KHNpZ25lZEJ5dGUgJiAweEY3RkYpID09IGMpCi0gICAgICAgICAgICBieXRlc1tyZXN1bHRMZW5n
dGgrK10gPSBzaWduZWRCeXRlOworICAgIGZvciAoYXV0byBjaGFyYWN0ZXIgOiBzdHJpbmcuY29k
ZVBvaW50cygpKSB7CisgICAgICAgIGludDhfdCBzaWduZWRCeXRlID0gY2hhcmFjdGVyOworICAg
ICAgICBpZiAoKHNpZ25lZEJ5dGUgJiAweEY3RkYpID09IGNoYXJhY3RlcikKKyAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoc2lnbmVkQnl0ZSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
Ly8gTm8gd2F5IHRvIGVuY29kZSB0aGlzIGNoYXJhY3RlciB3aXRoIHgtdXNlci1kZWZpbmVkLgog
ICAgICAgICAgICAgVW5lbmNvZGFibGVSZXBsYWNlbWVudEFycmF5IHJlcGxhY2VtZW50OwotICAg
ICAgICAgICAgaW50IHJlcGxhY2VtZW50TGVuZ3RoID0gVGV4dENvZGVjOjpnZXRVbmVuY29kYWJs
ZVJlcGxhY2VtZW50KGMsIGhhbmRsaW5nLCByZXBsYWNlbWVudCk7Ci0gICAgICAgICAgICByZXN1
bHQuZ3JvdyhyZXN1bHRMZW5ndGggKyByZXBsYWNlbWVudExlbmd0aCArIGxlbmd0aCAtIGkpOwot
ICAgICAgICAgICAgYnl0ZXMgPSByZXN1bHQuZGF0YSgpOwotICAgICAgICAgICAgbWVtY3B5KGJ5
dGVzICsgcmVzdWx0TGVuZ3RoLCByZXBsYWNlbWVudCwgcmVwbGFjZW1lbnRMZW5ndGgpOwotICAg
ICAgICAgICAgcmVzdWx0TGVuZ3RoICs9IHJlcGxhY2VtZW50TGVuZ3RoOworICAgICAgICAgICAg
aW50IHJlcGxhY2VtZW50TGVuZ3RoID0gVGV4dENvZGVjOjpnZXRVbmVuY29kYWJsZVJlcGxhY2Vt
ZW50KGNoYXJhY3RlciwgaGFuZGxpbmcsIHJlcGxhY2VtZW50KTsKKyAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQocmVwbGFjZW1lbnQuZGF0YSgpLCByZXBsYWNlbWVudExlbmd0aCk7CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICByZXR1cm4gQ1N0cmluZyhieXRlcywgcmVzdWx0TGVuZ3RoKTsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1DU3RyaW5nIFRleHRDb2RlY1VzZXJEZWZpbmVkOjplbmNv
ZGUoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFu
ZGxpbmcgaGFuZGxpbmcpCitWZWN0b3I8dWludDhfdD4gVGV4dENvZGVjVXNlckRlZmluZWQ6OmVu
Y29kZShTdHJpbmdWaWV3IHN0cmluZywgVW5lbmNvZGFibGVIYW5kbGluZyBoYW5kbGluZykKIHsK
LSAgICBjaGFyKiBieXRlczsKLSAgICBDU3RyaW5nIHN0cmluZyA9IENTdHJpbmc6Om5ld1VuaW5p
dGlhbGl6ZWQobGVuZ3RoLCBieXRlcyk7CisgICAgeworICAgICAgICBWZWN0b3I8dWludDhfdD4g
cmVzdWx0KHN0cmluZy5sZW5ndGgoKSk7CisgICAgICAgIGF1dG8qIGJ5dGVzID0gcmVzdWx0LmRh
dGEoKTsKKworICAgICAgICAvLyBDb252ZXJ0IGFuZCBzaW11bHRhbmVvdXNseSBkbyBhIGNoZWNr
IHRvIHNlZSBpZiBpdCdzIGFsbCBBU0NJSS4KKyAgICAgICAgVUNoYXIgb3JlZCA9IDA7CisgICAg
ICAgIGZvciAoYXV0byBjaGFyYWN0ZXIgOiBzdHJpbmcuY29kZVVuaXRzKCkpIHsKKyAgICAgICAg
ICAgICpieXRlcysrID0gY2hhcmFjdGVyOworICAgICAgICAgICAgb3JlZCB8PSBjaGFyYWN0ZXI7
CisgICAgICAgIH0KIAotICAgIC8vIENvbnZlcnQgdGhlIHN0cmluZyBhIGZhc3Qgd2F5IGFuZCBz
aW11bHRhbmVvdXNseSBkbyBhbiBlZmZpY2llbnQgY2hlY2sgdG8gc2VlIGlmIGl0J3MgYWxsIEFT
Q0lJLgotICAgIFVDaGFyIG9yZWQgPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgVUNoYXIgYyA9IGNoYXJhY3RlcnNbaV07Ci0gICAgICAgIGJ5
dGVzW2ldID0gYzsKLSAgICAgICAgb3JlZCB8PSBjOworICAgICAgICBpZiAoIShvcmVkICYgMHhG
RjgwKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgaWYgKCEob3Jl
ZCAmIDB4RkY4MCkpCi0gICAgICAgIHJldHVybiBzdHJpbmc7Ci0KICAgICAvLyBJZiBpdCB3YXNu
J3QgYWxsIEFTQ0lJLCBjYWxsIHRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgbW9yZS1jb21wbGV4
IGNhc2VzLgotICAgIHJldHVybiBlbmNvZGVDb21wbGV4VXNlckRlZmluZWQoY2hhcmFjdGVycywg
bGVuZ3RoLCBoYW5kbGluZyk7CisgICAgcmV0dXJuIGVuY29kZUNvbXBsZXhVc2VyRGVmaW5lZChz
dHJpbmcsIGhhbmRsaW5nKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5oCmluZGV4
IDU4MjFjYTM3ODE1MTkxZWNiMmEwYzU3OGZlMzIzZmQ4NTRhZDVlMGIuLjc0NGZkMzAxM2FlMWIx
NmYzNmJhNzJjODQ0ZmM4ZDUzMGUyMTViNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VzZXJEZWZpbmVkLmgKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsMjIgKzIzLDIwIEBACiAg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIFRleHRDb2RlY1VzZXJEZWZpbmVkX2gKLSNk
ZWZpbmUgVGV4dENvZGVjVXNlckRlZmluZWRfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJU
ZXh0Q29kZWMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgVGV4dENvZGVj
VXNlckRlZmluZWQgOiBwdWJsaWMgVGV4dENvZGVjIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0
YXRpYyB2b2lkIHJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIpOwot
ICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIpOwor
Y2xhc3MgVGV4dENvZGVjVXNlckRlZmluZWQgOiBwdWJsaWMgVGV4dENvZGVjIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgdm9pZCByZWdpc3RlckVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0
cmFyKTsKKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIp
OwogCi0gICAgICAgIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJv
b2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9yKSBvdmVycmlkZTsKLSAg
ICAgICAgQ1N0cmluZyBlbmNvZGUoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29k
YWJsZUhhbmRsaW5nKSBvdmVycmlkZTsKLSAgICB9OworcHJpdmF0ZToKKyAgICBTdHJpbmcgZGVj
b2RlKGNvbnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVy
cm9yLCBib29sJiBzYXdFcnJvcikgZmluYWw7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZShT
dHJpbmdWaWV3LCBVbmVuY29kYWJsZUhhbmRsaW5nKSBmaW5hbDsKK307CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFRleHRDb2RlY1VzZXJEZWZpbmVkX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcAppbmRleCA3ZGFiYTY3ZTIy
NDhiZmQyNjM4OTFlMzdhZmY5OWNkOGNlNDkxM2JiLi4wMzI3YTVjMGI0NTIwMjMwZjQ3YjJhMWJm
YmIwMjM1NDM2ZDlmOTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRFbmNvZGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
RW5jb2RpbmcuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29t
PgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCiAgKgpAQCAt
NDgsNyArNDgsNyBAQCBUZXh0RW5jb2Rpbmc6OlRleHRFbmNvZGluZyhjb25zdCBjaGFyKiBuYW1l
KQogICAgICwgbV9iYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKGJhY2tzbGFzaEFzQ3VycmVuY3lT
eW1ib2woKSkKIHsKICAgICAvLyBBbGlhc2VzIGFyZSB2YWxpZCwgYnV0IG5vdCAicmVwbGFjZW1l
bnQiIGl0c2VsZi4KLSAgICBpZiAobV9uYW1lICYmIGlzUmVwbGFjZW1lbnRFbmNvZGluZyhuYW1l
KSkKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgInJlcGxhY2Vt
ZW50IikpCiAgICAgICAgIG1fbmFtZSA9IG51bGxwdHI7CiB9CiAKQEAgLTU3LDcgKzU3LDcgQEAg
VGV4dEVuY29kaW5nOjpUZXh0RW5jb2RpbmcoY29uc3QgU3RyaW5nJiBuYW1lKQogICAgICwgbV9i
YWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSkKIHsK
ICAgICAvLyBBbGlhc2VzIGFyZSB2YWxpZCwgYnV0IG5vdCAicmVwbGFjZW1lbnQiIGl0c2VsZi4K
LSAgICBpZiAobV9uYW1lICYmIGlzUmVwbGFjZW1lbnRFbmNvZGluZyhuYW1lKSkKKyAgICBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgInJlcGxhY2VtZW50IikpCiAgICAg
ICAgIG1fbmFtZSA9IG51bGxwdHI7CiB9CiAKQEAgLTY5LDEzICs2OSwxMiBAQCBTdHJpbmcgVGV4
dEVuY29kaW5nOjpkZWNvZGUoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCwgYm9vbCBz
dG9wT25FcnJvciwgYgogICAgIHJldHVybiBuZXdUZXh0Q29kZWMoKnRoaXMpLT5kZWNvZGUoZGF0
YSwgbGVuZ3RoLCB0cnVlLCBzdG9wT25FcnJvciwgc2F3RXJyb3IpOwogfQogCi1DU3RyaW5nIFRl
eHRFbmNvZGluZzo6ZW5jb2RlKFN0cmluZ1ZpZXcgdGV4dCwgVW5lbmNvZGFibGVIYW5kbGluZyBo
YW5kbGluZykgY29uc3QKK1ZlY3Rvcjx1aW50OF90PiBUZXh0RW5jb2Rpbmc6OmVuY29kZShTdHJp
bmdWaWV3IHRleHQsIFVuZW5jb2RhYmxlSGFuZGxpbmcgaGFuZGxpbmcpIGNvbnN0CiB7Ci0gICAg
aWYgKCFtX25hbWUpCi0gICAgICAgIHJldHVybiBDU3RyaW5nKCk7CisgICAgaWYgKCFtX25hbWUg
fHwgdGV4dC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBpZiAodGV4dC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAiIjsKKyAgICAvLyBGSVhNRTogQ29uc2lkZXIgYWRk
aW5nIGEgZmFzdCBjYXNlIGZvciBBU0NJSS4KIAogICAgIC8vIEZJWE1FOiBXaGF0J3MgdGhlIHJp
Z2h0IHBsYWNlIHRvIGRvIG5vcm1hbGl6YXRpb24/CiAgICAgLy8gSXQncyBhIGxpdHRsZSBzdHJh
bmdlIHRvIGRvIGl0IGluc2lkZSB0aGUgZW5jb2RlIGZ1bmN0aW9uLgpAQCAtODQsNyArODMsNyBA
QCBDU3RyaW5nIFRleHRFbmNvZGluZzo6ZW5jb2RlKFN0cmluZ1ZpZXcgdGV4dCwgVW5lbmNvZGFi
bGVIYW5kbGluZyBoYW5kbGluZykgY29ucwogICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
ID0gdGV4dC51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKIAogICAgIGNvbnN0IFVDaGFyKiBzb3Vy
Y2UgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgc2l6ZV90IHNvdXJjZUxlbmd0aCA9IHRl
eHQubGVuZ3RoKCk7CisgICAgdW5zaWduZWQgc291cmNlTGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsK
IAogICAgIFZlY3RvcjxVQ2hhcj4gbm9ybWFsaXplZENoYXJhY3RlcnM7CiAKQEAgLTEwNCw3ICsx
MDMsNyBAQCBDU3RyaW5nIFRleHRFbmNvZGluZzo6ZW5jb2RlKFN0cmluZ1ZpZXcgdGV4dCwgVW5l
bmNvZGFibGVIYW5kbGluZyBoYW5kbGluZykgY29ucwogICAgICAgICBzb3VyY2VMZW5ndGggPSBu
b3JtYWxpemVkTGVuZ3RoOwogICAgIH0KIAotICAgIHJldHVybiBuZXdUZXh0Q29kZWMoKnRoaXMp
LT5lbmNvZGUoc291cmNlLCBzb3VyY2VMZW5ndGgsIGhhbmRsaW5nKTsKKyAgICByZXR1cm4gbmV3
VGV4dENvZGVjKCp0aGlzKS0+ZW5jb2RlKFN0cmluZ1ZpZXcgeyBzb3VyY2UsIHNvdXJjZUxlbmd0
aCB9LCBoYW5kbGluZyk7CiB9CiAKIGNvbnN0IGNoYXIqIFRleHRFbmNvZGluZzo6ZG9tTmFtZSgp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNv
ZGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuaAppbmRl
eCAyMDRkNDc4NWM1YzgyZTM0Njg5Njk5NGIxMmQxMWRkNTgxODE3YzNmLi5hYzEwOWFhOGFhYTQ0
MDg0MzZhYjU1N2Y4YzFmMzhjOTNiNWM0Y2Y1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dEVuY29kaW5nLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsOCArMjUsOCBA
QAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlRleHRDb2RlYy5oIgotI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8cGFsL3RleHQvVW5lbmNvZGFibGVIYW5kbGluZy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGRl
Y29kZShjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYg
c2F3RXJyb3IpIGNvbnN0OwogICAgIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBs
ZW5ndGgpIGNvbnN0OwotICAgIENTdHJpbmcgZW5jb2RlKFN0cmluZ1ZpZXcsIFVuZW5jb2RhYmxl
SGFuZGxpbmcpIGNvbnN0OworICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGUoU3RyaW5nVmlldywg
VW5lbmNvZGFibGVIYW5kbGluZykgY29uc3Q7CiAKICAgICBVQ2hhciBiYWNrc2xhc2hBc0N1cnJl
bmN5U3ltYm9sKCkgY29uc3Q7CiAgICAgYm9vbCBpc0J5dGVCYXNlZEVuY29kaW5nKCkgY29uc3Qg
eyByZXR1cm4gIWlzTm9uQnl0ZUJhc2VkRW5jb2RpbmcoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAppbmRleCA2ZTU0
MjMzM2FiMDEwMGIwYzczNzhkZGU2MTI4MjBhMjMyYzhiNzVhLi41NTZkZmYzZWM1NGM0NzRiMDRm
MzAxZGZmOTZhYmRjZTMzODg5YWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CkBAIC0zMCwyMyArMzAsMjEgQEAKICNpbmNsdWRlICJUZXh0Q29k
ZWNJQ1UuaCIKICNpbmNsdWRlICJUZXh0Q29kZWNMYXRpbjEuaCIKICNpbmNsdWRlICJUZXh0Q29k
ZWNSZXBsYWNlbWVudC5oIgotI2luY2x1ZGUgIlRleHRDb2RlY1VzZXJEZWZpbmVkLmgiCiAjaW5j
bHVkZSAiVGV4dENvZGVjVVRGMTYuaCIKICNpbmNsdWRlICJUZXh0Q29kZWNVVEY4LmgiCisjaW5j
bHVkZSAiVGV4dENvZGVjVXNlckRlZmluZWQuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIK
ICNpbmNsdWRlIDxtdXRleD4KICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1ZGUg
PHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNs
dWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KLQotI2lu
Y2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
IAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCkBAIC05MCwx
NCArODgsOCBAQCBzdHJ1Y3QgVGV4dEVuY29kaW5nTmFtZUhhc2ggewogICAgIHN0YXRpYyBjb25z
dCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CiB9OwogCi1zdHJ1
Y3QgVGV4dENvZGVjRmFjdG9yeSB7Ci0gICAgTmV3VGV4dENvZGVjRnVuY3Rpb24gZnVuY3Rpb247
Ci0gICAgY29uc3Qgdm9pZCogYWRkaXRpb25hbERhdGE7Ci0gICAgVGV4dENvZGVjRmFjdG9yeShO
ZXdUZXh0Q29kZWNGdW5jdGlvbiBmID0gMCwgY29uc3Qgdm9pZCogZCA9IDApIDogZnVuY3Rpb24o
ZiksIGFkZGl0aW9uYWxEYXRhKGQpIHsgfQotfTsKLQotdHlwZWRlZiBIYXNoTWFwPGNvbnN0IGNo
YXIqLCBjb25zdCBjaGFyKiwgVGV4dEVuY29kaW5nTmFtZUhhc2g+IFRleHRFbmNvZGluZ05hbWVN
YXA7Ci10eXBlZGVmIEhhc2hNYXA8Y29uc3QgY2hhciosIFRleHRDb2RlY0ZhY3Rvcnk+IFRleHRD
b2RlY01hcDsKK3VzaW5nIFRleHRFbmNvZGluZ05hbWVNYXAgPSBIYXNoTWFwPGNvbnN0IGNoYXIq
LCBjb25zdCBjaGFyKiwgVGV4dEVuY29kaW5nTmFtZUhhc2g+OwordXNpbmcgVGV4dENvZGVjTWFw
ID0gSGFzaE1hcDxjb25zdCBjaGFyKiwgTmV3VGV4dENvZGVjRnVuY3Rpb24+OwogCiBzdGF0aWMg
U3RhdGljTG9jayBlbmNvZGluZ1JlZ2lzdHJ5TXV0ZXg7CiAKQEAgLTEzOCwxMSArMTMwLDExIEBA
IHN0YXRpYyB2b2lkIGFkZFRvVGV4dEVuY29kaW5nTmFtZU1hcChjb25zdCBjaGFyKiBhbGlhcywg
Y29uc3QgY2hhciogbmFtZSkKICAgICB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5hZGQoYWxpYXMsIGF0
b21pY05hbWUpOwogfQogCi1zdGF0aWMgdm9pZCBhZGRUb1RleHRDb2RlY01hcChjb25zdCBjaGFy
KiBuYW1lLCBOZXdUZXh0Q29kZWNGdW5jdGlvbiBmdW5jdGlvbiwgY29uc3Qgdm9pZCogYWRkaXRp
b25hbERhdGEpCitzdGF0aWMgdm9pZCBhZGRUb1RleHRDb2RlY01hcChjb25zdCBjaGFyKiBuYW1l
LCBOZXdUZXh0Q29kZWNGdW5jdGlvbiYmIGZ1bmN0aW9uKQogewogICAgIGNvbnN0IGNoYXIqIGF0
b21pY05hbWUgPSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5nZXQobmFtZSk7CiAgICAgQVNTRVJUKGF0
b21pY05hbWUpOwotICAgIHRleHRDb2RlY01hcC0+YWRkKGF0b21pY05hbWUsIFRleHRDb2RlY0Zh
Y3RvcnkoZnVuY3Rpb24sIGFkZGl0aW9uYWxEYXRhKSk7CisgICAgdGV4dENvZGVjTWFwLT5hZGQo
YXRvbWljTmFtZSwgV1RGTW92ZShmdW5jdGlvbikpOwogfQogCiBzdGF0aWMgdm9pZCBwcnVuZUJs
YWNrbGlzdGVkQ29kZWNzKCkKQEAgLTIzNCwyMiArMjI2LDYgQEAgYm9vbCBpc0phcGFuZXNlRW5j
b2RpbmcoY29uc3QgY2hhciogY2Fub25pY2FsRW5jb2RpbmdOYW1lKQogICAgIHJldHVybiBjYW5v
bmljYWxFbmNvZGluZ05hbWUgJiYgamFwYW5lc2VFbmNvZGluZ3MgJiYgamFwYW5lc2VFbmNvZGlu
Z3MtPmNvbnRhaW5zKGNhbm9uaWNhbEVuY29kaW5nTmFtZSk7CiB9CiAKLWJvb2wgaXNSZXBsYWNl
bWVudEVuY29kaW5nKGNvbnN0IGNoYXIqIGFsaWFzKQotewotICAgIGlmICghYWxpYXMpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChzdHJsZW4oYWxpYXMpICE9IDExKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gIXN0cmNhc2VjbXAoYWxpYXMsICJyZXBsYWNl
bWVudCIpOwotfQotCi1ib29sIGlzUmVwbGFjZW1lbnRFbmNvZGluZyhjb25zdCBTdHJpbmcmIGFs
aWFzKQotewotICAgIHJldHVybiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShhbGlhcywg
InJlcGxhY2VtZW50Iik7Ci19Ci0KIGJvb2wgc2hvdWxkU2hvd0JhY2tzbGFzaEFzQ3VycmVuY3lT
eW1ib2xJbihjb25zdCBjaGFyKiBjYW5vbmljYWxFbmNvZGluZ05hbWUpCiB7CiAgICAgcmV0dXJu
IGNhbm9uaWNhbEVuY29kaW5nTmFtZSAmJiBub25CYWNrc2xhc2hFbmNvZGluZ3MgJiYgbm9uQmFj
a3NsYXNoRW5jb2RpbmdzLT5jb250YWlucyhjYW5vbmljYWxFbmNvZGluZ05hbWUpOwpAQCAtMjcy
LDkgKzI0OCw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxUZXh0Q29kZWM+IG5ld1RleHRDb2RlYyhjb25z
dCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQogICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2Nr
PiBsb2NrKGVuY29kaW5nUmVnaXN0cnlNdXRleCk7CiAKICAgICBBU1NFUlQodGV4dENvZGVjTWFw
KTsKLSAgICBUZXh0Q29kZWNGYWN0b3J5IGZhY3RvcnkgPSB0ZXh0Q29kZWNNYXAtPmdldChlbmNv
ZGluZy5uYW1lKCkpOwotICAgIEFTU0VSVChmYWN0b3J5LmZ1bmN0aW9uKTsKLSAgICByZXR1cm4g
ZmFjdG9yeS5mdW5jdGlvbihlbmNvZGluZywgZmFjdG9yeS5hZGRpdGlvbmFsRGF0YSk7CisgICAg
YXV0byByZXN1bHQgPSB0ZXh0Q29kZWNNYXAtPmZpbmQoZW5jb2RpbmcubmFtZSgpKTsKKyAgICBB
U1NFUlQocmVzdWx0ICE9IHRleHRDb2RlY01hcC0+ZW5kKCkpOworICAgIHJldHVybiByZXN1bHQt
PnZhbHVlKCk7CiB9CiAKIGNvbnN0IGNoYXIqIGF0b21pY0Nhbm9uaWNhbFRleHRFbmNvZGluZ05h
bWUoY29uc3QgY2hhciogbmFtZSkKQEAgLTI5NywxNiArMjczLDE0IEBAIGNvbnN0IGNoYXIqIGF0
b21pY0Nhbm9uaWNhbFRleHRFbmNvZGluZ05hbWUoY29uc3QgY2hhciogbmFtZSkKICAgICByZXR1
cm4gdGV4dEVuY29kaW5nTmFtZU1hcC0+Z2V0KG5hbWUpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KLWNvbnN0IGNoYXIqIGF0b21pY0Nhbm9uaWNhbFRleHRFbmNvZGlu
Z05hbWUoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKK3Rl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBjb25zdCBjaGFyKiBhdG9taWND
YW5vbmljYWxUZXh0RW5jb2RpbmdOYW1lKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMs
IHNpemVfdCBsZW5ndGgpCiB7CiAgICAgY2hhciBidWZmZXJbbWF4RW5jb2RpbmdOYW1lTGVuZ3Ro
ICsgMV07CiAgICAgc2l6ZV90IGogPSAwOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgQ2hhcmFjdGVyVHlwZSBjID0gY2hhcmFjdGVyc1tpXTsKICAg
ICAgICAgaWYgKGogPT0gbWF4RW5jb2RpbmdOYW1lTGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgIGJ1ZmZlcltqKytdID0gYzsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICBidWZmZXJbaisrXSA9IGNoYXJhY3RlcnNbaV07CiAgICAgfQogICAgIGJ1ZmZl
cltqXSA9IDA7CiAgICAgcmV0dXJuIGF0b21pY0Nhbm9uaWNhbFRleHRFbmNvZGluZ05hbWUoYnVm
ZmVyKTsKQEAgLTMxNCw3ICsyODgsNyBAQCBjb25zdCBjaGFyKiBhdG9taWNDYW5vbmljYWxUZXh0
RW5jb2RpbmdOYW1lKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHNpegogCiBjb25z
dCBjaGFyKiBhdG9taWNDYW5vbmljYWxUZXh0RW5jb2RpbmdOYW1lKGNvbnN0IFN0cmluZyYgYWxp
YXMpCiB7Ci0gICAgaWYgKCFhbGlhcy5sZW5ndGgoKSkKKyAgICBpZiAoYWxpYXMuaXNFbXB0eSgp
IHx8ICFhbGlhcy5pc0FsbEFTQ0lJKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAg
aWYgKGFsaWFzLmlzOEJpdCgpKQpAQCAtMzUzLDE5ICszMjcsNCBAQCBTdHJpbmcgZGVmYXVsdFRl
eHRFbmNvZGluZ05hbWVGb3JTeXN0ZW1MYW5ndWFnZSgpCiAjZW5kaWYKIH0KIAotI2lmbmRlZiBO
REVCVUcKLXZvaWQgZHVtcFRleHRFbmNvZGluZ05hbWVNYXAoKQotewotICAgIHVuc2lnbmVkIHNp
emUgPSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5zaXplKCk7Ci0gICAgZnByaW50ZihzdGRlcnIsICJE
dW1waW5nICV1IGVudHJpZXMgaW4gV2ViQ29yZTo6dGV4dEVuY29kaW5nTmFtZU1hcC4uLlxuIiwg
c2l6ZSk7Ci0KLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayhlbmNvZGluZ1Jl
Z2lzdHJ5TXV0ZXgpOwotCi0gICAgVGV4dEVuY29kaW5nTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5iZWdpbigpOwotICAgIFRleHRFbmNvZGluZ05hbWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRleHRFbmNvZGluZ05hbWVNYXAtPmVuZCgpOwotICAg
IGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJyVzJyA9
PiAnJXMnXG4iLCBpdC0+a2V5LCBpdC0+dmFsdWUpOwotfQotI2VuZGlmCi0KIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dEVuY29kaW5nUmVnaXN0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVu
Y29kaW5nUmVnaXN0cnkuaAppbmRleCBiY2M0Yjg3NTY3YWNlMzNhMDIzNTA0MTI3NWY4ZTliODY3
ZTVmNmViLi45ZmMzOTY5OWE3YjllOWZkMDRlY2YzZGI3NjFiNzRiN2VjMThlNWIxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5o
CkBAIC0yNiw3ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPG1lbW9yeT4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM5LDIyICszOSwxNSBAQCBXRUJDT1JFX0VYUE9S
VCBzdGQ6OnVuaXF1ZV9wdHI8VGV4dENvZGVjPiBuZXdUZXh0Q29kZWMoY29uc3QgVGV4dEVuY29k
aW5nJik7CiAKIC8vIE9ubHkgVGV4dEVuY29kaW5nIHNob3VsZCB1c2UgdGhlIGZvbGxvd2luZyBm
dW5jdGlvbnMgZGlyZWN0bHkuCiBjb25zdCBjaGFyKiBhdG9taWNDYW5vbmljYWxUZXh0RW5jb2Rp
bmdOYW1lKGNvbnN0IGNoYXIqIGFsaWFzKTsKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPgotY29uc3QgY2hhciogYXRvbWljQ2Fub25pY2FsVGV4dEVuY29kaW5nTmFtZShjb25zdCBD
aGFyYWN0ZXJUeXBlKiwgc2l6ZV90KTsKIGNvbnN0IGNoYXIqIGF0b21pY0Nhbm9uaWNhbFRleHRF
bmNvZGluZ05hbWUoY29uc3QgU3RyaW5nJik7CiBib29sIG5vRXh0ZW5kZWRUZXh0RW5jb2RpbmdO
YW1lVXNlZCgpOwogYm9vbCBpc0phcGFuZXNlRW5jb2RpbmcoY29uc3QgY2hhciogY2Fub25pY2Fs
RW5jb2RpbmdOYW1lKTsKIGJvb2wgc2hvdWxkU2hvd0JhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2xJ
bihjb25zdCBjaGFyKiBjYW5vbmljYWxFbmNvZGluZ05hbWUpOwotYm9vbCBpc1JlcGxhY2VtZW50
RW5jb2RpbmcoY29uc3QgY2hhciogYWxpYXMpOwotYm9vbCBpc1JlcGxhY2VtZW50RW5jb2Rpbmco
Y29uc3QgU3RyaW5nJiBhbGlhcyk7CiAKIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBkZWZhdWx0VGV4
dEVuY29kaW5nTmFtZUZvclN5c3RlbUxhbmd1YWdlKCk7CisKICNpZiBQTEFURk9STShDT0NPQSkK
IFdFQkNPUkVfRVhQT1JUIENGU3RyaW5nRW5jb2Rpbmcgd2ViRGVmYXVsdENGU3RyaW5nRW5jb2Rp
bmcoKTsKICNlbmRpZgogCi0jaWZuZGVmIE5ERUJVRwotdm9pZCBkdW1wVGV4dEVuY29kaW5nTmFt
ZU1hcCgpOwotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luL1RleHRDb2RlY1dpbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbi9UZXh0Q29kZWNXaW4uY3BwCmluZGV4IDRmMTc4ZTgw
MTI4NjBiNWFjMjk5ZGYwZGMwM2E4MTQyMTg0MjZlYmIuLmFmNDY5MTM5MDgxZTgwYzEyMDdiODJj
OTdmZGZhM2M3NzIxYTY1MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvd2luL1RleHRDb2RlY1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC93aW4vVGV4dENvZGVjV2luLmNwcApAQCAtMjgxLDcgKzI4MSw3IEBAIENTdHJpbmcgVGV4dENv
ZGVjV2luOjplbmNvZGUoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFVu
ZW5jb2RhYmxlCiAKICAgICBpbnQgcmVzdWx0TGVuZ3RoID0gV2lkZUNoYXJUb011bHRpQnl0ZSht
X2NvZGVQYWdlLCBXQ19DT01QT1NJVEVDSEVDSywgY2hhcmFjdGVycywgbGVuZ3RoLCAwLCAwLCAw
LCAwKTsKIAotICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGltcGxlbWVudCBVbmVuY29kYWJsZUhh
bmRsaW5nOiBRdWVzdGlvbk1hcmtzRm9yVW5lbmNvZGFibGVzLCBFbnRpdGllc0ZvclVuZW5jb2Rh
YmxlcywgYW5kIFVSTEVuY29kZWRFbnRpdGllc0ZvclVuZW5jb2RhYmxlcy4KKyAgICAvLyBGSVhN
RTogV2UgbmVlZCB0byBpbXBsZW1lbnQgVW5lbmNvZGFibGVIYW5kbGluZy4KIAogICAgIGlmIChy
ZXN1bHRMZW5ndGggPD0gMCkKICAgICAgICAgcmV0dXJuICI/IjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuY3BwCmluZGV4IDA5NmYwNTU1YWMxZWU0NTJiNjQ1YTJiYjljZWQ1MmUxNjUx
NTRiYTEuLjMzMzFmOTM5ZDkxMGFhMDhlOWNlMGZiYzY3ZjQyYzcwNWFlMTBlNjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtNDY1LDcgKzQ2NSw3IEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IFhNTEh0dHBSZXF1ZXN0OjpzZW5kKERvY3VtZW50JiBkb2N1bWVudCkKIAogICAg
ICAgICAvLyBGSVhNRTogQWNjb3JkaW5nIHRvIFhNTEh0dHBSZXF1ZXN0IExldmVsIDIsIHRoaXMg
c2hvdWxkIHVzZSB0aGUgRG9jdW1lbnQuaW5uZXJIVE1MIGFsZ29yaXRobQogICAgICAgICAvLyBm
cm9tIHRoZSBIVE1MNSBzcGVjaWZpY2F0aW9uIHRvIHNlcmlhbGl6ZSB0aGUgZG9jdW1lbnQuCi0g
ICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHkgPSBGb3JtRGF0YTo6Y3JlYXRlKFVURjhFbmNvZGlu
ZygpLmVuY29kZShjcmVhdGVNYXJrdXAoZG9jdW1lbnQpLCBFbnRpdGllc0ZvclVuZW5jb2RhYmxl
cykpOworICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5ID0gRm9ybURhdGE6OmNyZWF0ZShVVEY4
RW5jb2RpbmcoKS5lbmNvZGUoY3JlYXRlTWFya3VwKGRvY3VtZW50KSwgVW5lbmNvZGFibGVIYW5k
bGluZzo6RW50aXRpZXMpKTsKICAgICAgICAgaWYgKG1fdXBsb2FkKQogICAgICAgICAgICAgbV9y
ZXF1ZXN0RW50aXR5Qm9keS0+c2V0QWx3YXlzU3RyZWFtKHRydWUpOwogICAgIH0KQEAgLTQ5Miw3
ICs0OTIsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBYTUxIdHRwUmVxdWVzdDo6c2VuZChjb25zdCBT
dHJpbmcmIGJvZHkpCiAgICAgICAgICAgICBtX3JlcXVlc3RIZWFkZXJzLnNldChIVFRQSGVhZGVy
TmFtZTo6Q29udGVudFR5cGUsIGNvbnRlbnRUeXBlKTsKICAgICAgICAgfQogCi0gICAgICAgIG1f
cmVxdWVzdEVudGl0eUJvZHkgPSBGb3JtRGF0YTo6Y3JlYXRlKFVURjhFbmNvZGluZygpLmVuY29k
ZShib2R5LCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcykpOworICAgICAgICBtX3JlcXVlc3RFbnRp
dHlCb2R5ID0gRm9ybURhdGE6OmNyZWF0ZShVVEY4RW5jb2RpbmcoKS5lbmNvZGUoYm9keSwgVW5l
bmNvZGFibGVIYW5kbGluZzo6RW50aXRpZXMpKTsKICAgICAgICAgaWYgKG1fdXBsb2FkKQogICAg
ICAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keS0+c2V0QWx3YXlzU3RyZWFtKHRydWUpOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUVW5pY29kZVNvcnQuY3BwIGIv
U291cmNlL1dlYkNvcmUveG1sL1hTTFRVbmljb2RlU29ydC5jcHAKaW5kZXggYzJkODU2ZWY2YjE1
NTQ1MGNjMmNjODFhMmExYjA0ZmYzZWE0YTk2Yi4uZjllNTZiOWIyYWZjYTVhNzA3NzdiMzAwNjFk
ODIzZGQ2M2I4Mzg0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hTTFRVbmljb2Rl
U29ydC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hTTFRVbmljb2RlU29ydC5jcHAKQEAg
LTMzLDcgKzMzLDYgQEAKIAogI2luY2x1ZGUgPGxpYnhzbHQvdGVtcGxhdGVzLmg+CiAjaW5jbHVk
ZSA8bGlieHNsdC94c2x0dXRpbHMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NvbGxhdG9yLmg+
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJz
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5jcHAK
aW5kZXggOGU2YjgzNTRjZjhjZTIxMWUwNzYyNzUxNzYyZWEwNGE1ZDcyODhmNy4uMWYyOGE4ZWJh
NTlkZjFlNmUyMWZjYzg3NWUwZjQ5MGJhYTYwODg1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
eG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5jcHAKQEAgLTUxLDcgKzUxLDYgQEAKICNpbmNs
dWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiVHJlZURlcHRoTGltaXQuaCIK
ICNpbmNsdWRlIDx3dGYvUmVmLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwy
LmNwcAppbmRleCBhMzdkNjE1MTZhNjI4MDBmNWE0MzFiODkxYzcyNzM0ZjA5MDM1YmNjLi4wYTky
MmU3ZjExZGI5ZTI5NzFlYzE3N2ZiYWI3ZmY1ODUxOTY3NTlmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCkBAIC01
Myw3ICs1Myw2IEBACiAjaW5jbHVkZSAiWE1MTlNOYW1lcy5oIgogI2luY2x1ZGUgIlhNTERvY3Vt
ZW50UGFyc2VyU2NvcGUuaCIKICNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg+Ci0j
aW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VURjgu
aD4KIAogI2lmIEVOQUJMRShYU0xUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVCcm93c2VyRnVuY3MuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVCcm93c2VyRnVuY3MuY3Bw
CmluZGV4IDZhNGRhYjAxNjQ4ODI4OWM5YWE3NmU4ZTNhNWVhY2YxODQzOWE0OWEuLjNiZTRmNDhh
ZDI5OTFiZTgyODY4NWE2NTNlNjQxZmYxMjhhMjJiZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlQnJvd3NlckZ1bmNzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZUJy
b3dzZXJGdW5jcy5jcHAKQEAgLTg4MCw5ICs4ODAsOSBAQCBzdGF0aWMgTlBFcnJvciBOUE5fU2V0
VmFsdWVGb3JVUkwoTlBQIG5wcCwgTlBOVVJMVmFyaWFibGUgdmFyaWFibGUsIGNvbnN0IGNoYXIq
CiBzdGF0aWMgYm9vbCBpbml0aWFsaXplUHJvdGVjdGlvblNwYWNlKGNvbnN0IGNoYXIqIHByb3Rv
Y29sLCBjb25zdCBjaGFyKiBob3N0LCBpbnQgcG9ydCwgY29uc3QgY2hhciogc2NoZW1lLCBjb25z
dCBjaGFyKiByZWFsbSwgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UpCiB7CiAgICAg
UHJvdGVjdGlvblNwYWNlU2VydmVyVHlwZSBzZXJ2ZXJUeXBlOwotICAgIGlmICghc3RyY2FzZWNt
cChwcm90b2NvbCwgImh0dHAiKSkKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UocHJvdG9jb2wsICJodHRwIikpCiAgICAgICAgIHNlcnZlclR5cGUgPSBQcm90ZWN0aW9uU3Bh
Y2VTZXJ2ZXJIVFRQOwotICAgIGVsc2UgaWYgKCFzdHJjYXNlY21wKHByb3RvY29sLCAiaHR0cHMi
KSkKKyAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwcm90b2NvbCwg
Imh0dHBzIikpCiAgICAgICAgIHNlcnZlclR5cGUgPSBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJIVFRQ
UzsKICAgICBlbHNlIHsKICAgICAgICAgLy8gV2Ugb25seSBjYXJlIGFib3V0IGh0dHAgYW5kIGh0
dHBzLgpAQCAtODkxLDkgKzg5MSw5IEBAIHN0YXRpYyBib29sIGluaXRpYWxpemVQcm90ZWN0aW9u
U3BhY2UoY29uc3QgY2hhciogcHJvdG9jb2wsIGNvbnN0IGNoYXIqIGhvc3QsIGluCiAKICAgICBQ
cm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZSBhdXRoZW50aWNhdGlvblNjaGVtZSA9
IFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lRGVmYXVsdDsKICAgICBpZiAoc2Vy
dmVyVHlwZSA9PSBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJIVFRQKSB7Ci0gICAgICAgIGlmICghc3Ry
Y2FzZWNtcChzY2hlbWUsICJiYXNpYyIpKQorICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2Uoc2NoZW1lLCAiYmFzaWMiKSkKICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9u
U2NoZW1lID0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVIVFRQQmFzaWM7Ci0g
ICAgICAgIGVsc2UgaWYgKCFzdHJjbXAoc2NoZW1lLCAiZGlnZXN0IikpCisgICAgICAgIGVsc2Ug
aWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHNjaGVtZSwgImRpZ2VzdCIpKQogICAg
ICAgICAgICAgYXV0aGVudGljYXRpb25TY2hlbWUgPSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNh
dGlvblNjaGVtZUhUVFBEaWdlc3Q7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9IaXN0b3J5L0hpc3RvcnlQcm9wZXJ0eUxpc3QubW0gYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9IaXN0b3J5L0hpc3RvcnlQcm9wZXJ0eUxpc3QubW0KaW5kZXggMDYwYTNiZjc4
NzFkMjFhN2VkNThlZDE1OTJlMDhhMGZhMTY1ODEyZC4uNDc5MTZlNzgxYTI0MzA0MWUxZDU4MjQ4
YWJmYWVhYWMwYzU3YmI1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlz
dG9yeS9IaXN0b3J5UHJvcGVydHlMaXN0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0hpc3RvcnkvSGlzdG9yeVByb3BlcnR5TGlzdC5tbQpAQCAtMjcsNyArMjcsNiBAQAogCiAjaW1w
b3J0ICJXZWJIaXN0b3J5SXRlbUludGVybmFsLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0hpc3RvcnlJ
dGVtLmg+Ci0jaW1wb3J0IDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dl
YkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVn
aW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW0KaW5kZXggNzRlNzljMGRlNGJjMWFmZTBl
MTg2M2MyMDMwODlkNjdkYmY4ZTRmMi4uOGU4OTU0YjlhOTdlMzcxODQ0NDBlZWU1MzkwZDM0ZmQy
Y2NiZmZlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJC
YXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1Bs
dWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5tbQpAQCAtODU0LDExICs4NTQsOSBAQCBA
ZW5kCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1ib29sIGdldEF1dGhlbnRpY2F0aW9uSW5mbyhj
b25zdCBjaGFyKiBwcm90b2NvbFN0ciwgY29uc3QgY2hhciogaG9zdFN0ciwgaW50MzJfdCBwb3J0
LCBjb25zdCBjaGFyKiBzY2hlbWVTdHIsIGNvbnN0IGNoYXIqIHJlYWxtU3RyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ1N0cmluZyYgdXNlcm5hbWUsIENTdHJpbmcmIHBhc3N3b3JkKQor
Ym9vbCBnZXRBdXRoZW50aWNhdGlvbkluZm8oY29uc3QgY2hhciogcHJvdG9jb2xTdHIsIGNvbnN0
IGNoYXIqIGhvc3RTdHIsIGludDMyX3QgcG9ydCwgY29uc3QgY2hhciogc2NoZW1lU3RyLCBjb25z
dCBjaGFyKiByZWFsbVN0ciwgQ1N0cmluZyYgdXNlcm5hbWUsIENTdHJpbmcmIHBhc3N3b3JkKQog
ewotICAgIGlmIChzdHJjYXNlY21wKHByb3RvY29sU3RyLCAiaHR0cCIpICE9IDAgJiYgCi0gICAg
ICAgIHN0cmNhc2VjbXAocHJvdG9jb2xTdHIsICJodHRwcyIpICE9IDApCisgICAgaWYgKCFlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwcm90b2NvbFN0ciwgImh0dHAiKSAmJiAhZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocHJvdG9jb2xTdHIsICJodHRwcyIpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBOU1N0cmluZyAqaG9zdCA9IFtOU1N0cmluZyBzdHJpbmdXaXRo
VVRGOFN0cmluZzpob3N0U3RyXTsKQEAgLTg3NCwxMCArODcyLDEwIEBAIGJvb2wgZ2V0QXV0aGVu
dGljYXRpb25JbmZvKGNvbnN0IGNoYXIqIHByb3RvY29sU3RyLCBjb25zdCBjaGFyKiBob3N0U3Ry
LCBpbnQzMl90CiAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwogICAgIAogICAg
IE5TU3RyaW5nICphdXRoZW50aWNhdGlvbk1ldGhvZCA9IE5TVVJMQXV0aGVudGljYXRpb25NZXRo
b2REZWZhdWx0OwotICAgIGlmICghc3RyY2FzZWNtcChwcm90b2NvbFN0ciwgImh0dHAiKSkgewot
ICAgICAgICBpZiAoIXN0cmNhc2VjbXAoc2NoZW1lU3RyLCAiYmFzaWMiKSkKKyAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocHJvdG9jb2xTdHIsICJodHRwIikpIHsKKyAgICAg
ICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHNjaGVtZVN0ciwgImJhc2ljIikp
CiAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbk1ldGhvZCA9IE5TVVJMQXV0aGVudGljYXRpb25N
ZXRob2RIVFRQQmFzaWM7Ci0gICAgICAgIGVsc2UgaWYgKCFzdHJjYXNlY21wKHNjaGVtZVN0ciwg
ImRpZ2VzdCIpKQorICAgICAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZShzY2hlbWVTdHIsICJkaWdlc3QiKSkKICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uTWV0aG9k
ID0gTlNVUkxBdXRoZW50aWNhdGlvbk1ldGhvZEhUVFBEaWdlc3Q7CiAgICAgfQogICAgIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5t
bSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KaW5k
ZXggYjM0ZDJkZTJhYjY3ODYzNmQxNzhmMjUxNDI4MzhiYWZhNzU3NTYzNS4uMzNiZjBkOWFkNTA1
ZmIxMTg1MDJkNTU0Y2Y4NGFkNDBkZGUxMzFlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCkBAIC03NSwxNCArNzUsMTQgQEAgc3Rh
dGljIE5TTXV0YWJsZURpY3Rpb25hcnkgKndlYlByZWZlcmVuY2VzSW5zdGFuY2VzOwogCiBzdGF0
aWMgdW5zaWduZWQgd2ViUHJlZmVyZW5jZXNJbnN0YW5jZUNvdW50V2l0aFByaXZhdGVCcm93c2lu
Z0VuYWJsZWQ7CiAKLXN0YXRpYyBib29sIGNvbnRhaW5zKGNvbnN0IGNoYXIqIGNvbnN0IGFycmF5
W10sIGludCBjb3VudCwgY29uc3QgY2hhciogaXRlbSkKK3RlbXBsYXRlPHVuc2lnbmVkIHNpemU+
IHN0YXRpYyBib29sIGNvbnRhaW5zKGNvbnN0IGNoYXIqIGNvbnN0ICgmYXJyYXkpW3NpemVdLCBj
b25zdCBjaGFyKiBpdGVtKQogewogICAgIGlmICghaXRlbSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICBpZiAoIXN0
cmNhc2VjbXAoYXJyYXlbaV0sIGl0ZW0pKQorICAgIGZvciAoYXV0byogc3RyaW5nIDogYXJyYXkp
IHsKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLCBpdGVtKSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAg
LTEzOSwxMSArMTM5LDExIEBAIHN0YXRpYyBXZWJDYWNoZU1vZGVsIGNhY2hlTW9kZWxGb3JNYWlu
QnVuZGxlKHZvaWQpCiAgICAgICAgIH07CiAKICAgICAgICAgY29uc3QgY2hhciogYnVuZGxlSUQg
PSBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsK
LSAgICAgICAgaWYgKGNvbnRhaW5zKGRvY3VtZW50Vmlld2VySURzLCBzaXplb2YoZG9jdW1lbnRW
aWV3ZXJJRHMpIC8gc2l6ZW9mKGRvY3VtZW50Vmlld2VySURzWzBdKSwgYnVuZGxlSUQpKQorICAg
ICAgICBpZiAoY29udGFpbnMoZG9jdW1lbnRWaWV3ZXJJRHMsIGJ1bmRsZUlEKSkKICAgICAgICAg
ICAgIHJldHVybiBXZWJDYWNoZU1vZGVsRG9jdW1lbnRWaWV3ZXI7Ci0gICAgICAgIGlmIChjb250
YWlucyhkb2N1bWVudEJyb3dzZXJJRHMsIHNpemVvZihkb2N1bWVudEJyb3dzZXJJRHMpIC8gc2l6
ZW9mKGRvY3VtZW50QnJvd3NlcklEc1swXSksIGJ1bmRsZUlEKSkKKyAgICAgICAgaWYgKGNvbnRh
aW5zKGRvY3VtZW50QnJvd3NlcklEcywgYnVuZGxlSUQpKQogICAgICAgICAgICAgcmV0dXJuIFdl
YkNhY2hlTW9kZWxEb2N1bWVudEJyb3dzZXI7Ci0gICAgICAgIGlmIChjb250YWlucyhwcmltYXJ5
V2ViQnJvd3NlcklEcywgc2l6ZW9mKHByaW1hcnlXZWJCcm93c2VySURzKSAvIHNpemVvZihwcmlt
YXJ5V2ViQnJvd3NlcklEc1swXSksIGJ1bmRsZUlEKSkKKyAgICAgICAgaWYgKGNvbnRhaW5zKHBy
aW1hcnlXZWJCcm93c2VySURzLCBidW5kbGVJRCkpCiAgICAgICAgICAgICByZXR1cm4gV2ViQ2Fj
aGVNb2RlbFByaW1hcnlXZWJCcm93c2VyOwogCiAgICAgICAgIGJvb2wgaXNMaW5rZWRBZ2FpbnN0
V2ViS2l0ID0gV2ViS2l0TGlua2VkT25PckFmdGVyKDApOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hh
bmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGQxYWFkZGU1YzQ5MTM2MzBhZWM5MDgwNDM4
NjQ0YzFlZjIxMjlhNjUuLmRlNDU2MDUxYmNhMzM5MWRlNWI2OGRjMWQzYjU2ZDQ4ZGZhMWY0NjYg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNCBAQAorMjAxNy0xMi0wMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgTW9kZXJuaXplIHNvbWUgYXNwZWN0cyBvZiB0ZXh0IGNvZGVjcywgZWxpbWluYXRl
IFdlYktpdCB1c2Ugb2Ygc3RyY2FzZWNtcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMDA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0Q0cu
Y3BwOiBSZW1vdmVkIGluY2x1ZGUgb2YgU3RyaW5nRXh0cmFzLmguCisKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0OiBBZGRlZCBMaW5lRW5kaW5nLmNwcC4KKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajog
RGl0dG8uCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTGluZUVuZGluZy5jcHA6
IEFkZGVkLiBIYXMgdGVzdHMgZm9yIHRoZSBMaW5lRW5kaW5nCisgICAgICAgIGZ1bmN0aW9ucyBy
ZXdyaXR0ZW4gaW4gdGhpcyBwYXRjaC4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9UZXh0Q29kZWMuY3BwOiBVcGRhdGVkIHRlc3Qgbm93IHRoYXQgdGhlIGRlY29kZQor
ICAgICAgICBmdW5jdGlvbiBkb2Vzbid0IGhhdmUgZGVmYXVsdHMgZm9yIGFzIG1hbnkgYXJndW1l
bnRzIGFueSBtb3JlLiBBbHNvIGNoYW5nZWQgc28KKyAgICAgICAgdGhhdCB0aGUgdGVzdHMgbG9n
IHRoZSBmYWN0IHRoYXQgdGhlIGRlY29kZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGFuZCB1
cGRhdGVkCisgICAgICAgIGV4cGVjdGVkIHJlc3VsdHMgdG8gZXhwZWN0IGFsbCB0aGUgZXJyb3Jz
LgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcDog
RGl0dG8uCisKIDIwMTctMTItMDEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFdlYkRyaXZlcjogYXV0by1pbnN0YWxsIHB5dGVzdCBpbnN0ZWFk
IG9mIGltcG9ydGluZyBpdCBmcm9tIHdwdCB0b29scyBkaXJlY3RvcnkKZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHAgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0Q0cuY3BwCmluZGV4IDhhY2I5YTcwMWYxOGQ5
YjE2YWIzOWQ2ZWQ5Y2I2ODVmM2UyZTg4NTEuLmFiZjdmODk4N2Q3ODZiNjZjNDRiMWExMWNiMzBm
ZmI4NmY1NTkwMjMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVt
cFN1cHBvcnRDRy5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3Vw
cG9ydENHLmNwcApAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNp
bmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAKICNpZiBQTEFURk9STShXSU4pCiAjaW5jbHVk
ZSAiTUQ1LmgiCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dAppbmRleCAyZGViMWVhM2ZiNWI4
M2E2MTE1Y2NiNzUxNGY3MDVjMzcyYzA3NzAzLi4zOGY0ZGM0Zjk5MDFkMDViNTE5MDBjYTdiNjQx
NGQ5MjJkYzVjNTYyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMu
dHh0CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQKQEAgLTEwNyw2ICsx
MDcsNyBAQCBzZXQoVGVzdFdURl9TT1VSQ0VTCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVz
dHMvV1RGL0pTT05WYWx1ZS5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYv
TEVCRGVjb2Rlci5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvTGlmZWN5
Y2xlTG9nZ2VyLmNwcAorICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9MaW5lRW5k
aW5nLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9MaXN0SGFzaFNldC5j
cHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvTG9jay5jcHAKICAgICAke1RF
U1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvTG9nZ2VyLmNwcApkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCAzNTM3OWMxMjZmMjFkNTNmNWRiYTEzNTE0NzRiNGE1NGVlNTgyNTNkLi4yZjc4MDc5
ZDg1NDYwZGY4ZTI5MjYyNmRiN2QyMzk2ZDkxNzlhYWQ1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtNTM5LDYgKzUzOSw3IEBACiAJCTkzQUY0RUNFMTUwNkYwNjQwMDdGRDU3RSAvKiBOZXdG
aXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQUY0RUNEMTUwNkYwNjQwMDdG
RDU3RSAvKiBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNw
cCAqLzsgfTsKIAkJOTNBRjRFRDExNTA2RjEzMDAwN0ZENTdFIC8qIGxvdHMtb2YtaW1hZ2VzLmh0
bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTNBRjRFQ0YxNTA2RjEyMzAwN0ZENTdFIC8qIGxvdHMtb2YtaW1hZ2VzLmh0bWwgKi87IH07CiAJ
CTkzQ0ZBODY3MUNFQjlFMzgwMDA1NjVBOCAvKiBhdXRvZm9jdXNlZC10ZXh0LWlucHV0Lmh0bWwg
aW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTND
RkE4NjYxQ0VCOURFMTAwMDU2NUE4IC8qIGF1dG9mb2N1c2VkLXRleHQtaW5wdXQuaHRtbCAqLzsg
fTsKKwkJOTNFMkM1NTUxRkQzMjA0MTAwRTFERjZBIC8qIExpbmVFbmRpbmcuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFMkM1NTQxRkQzMjA0MTAw
RTFERjZBIC8qIExpbmVFbmRpbmcuY3BwICovOyB9OwogCQk5M0UyRDI3NjFFRDdENTMyMDBGQTc2
RjYgLyogb2Zmc2NyZWVuLWlmcmFtZS1vZi1tZWRpYS1kb2N1bWVudC5odG1sIGluIENvcHkgUmVz
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTJEMjc1MUVEN0Q1
MTcwMEZBNzZGNiAvKiBvZmZzY3JlZW4taWZyYW1lLW9mLW1lZGlhLWRvY3VtZW50Lmh0bWwgKi87
IH07CiAJCTkzRTYxOTNCMUY5MzFCM0EwMEFGMjQ1RSAvKiBUZXh0Q29kZWMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBMjU4OTgxRjkyRkYxNTAw
M0U1MTBDIC8qIFRleHRDb2RlYy5jcHAgKi87IH07CiAJCTkzRjFEQjM0MTREQTIwODcwMDI0QzM2
MiAvKiBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRfQnVuZGxlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjFEQjMzMTREQTIwODcwMDI0
QzM2MiAvKiBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRfQnVuZGxlLmNwcCAqLzsgfTsK
QEAgLTE1MTYsNiArMTUxNyw3IEBACiAJCTkzQ0ZBODY4MUNFQkNGRUQwMDA1NjVBOCAvKiBDYW5k
aWRhdGVUZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENh
bmRpZGF0ZVRlc3RzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0QzRDE5QjE3
QjFBN0IwMDBDN0M0MTUgLyogYWxsLWNvbnRlbnQtaW4tb25lLWlmcmFtZS5odG1sICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dC5odG1sOyBwYXRoID0gImFsbC1jb250ZW50LWluLW9uZS1pZnJhbWUuaHRtbCI7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRDNEMTlEMTdCMUE4NDIwMEM3QzQxNSAvKiBM
YXlvdXRNaWxlc3RvbmVzV2l0aEFsbENvbnRlbnRJbkZyYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dE1pbGVzdG9uZXNXaXRoQWxsQ29udGVudEluRnJh
bWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0UyQzU1NDFGRDMyMDQxMDBF
MURGNkEgLyogTGluZUVuZGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBMaW5lRW5kaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNFMkQy
NzUxRUQ3RDUxNzAwRkE3NkY2IC8qIG9mZnNjcmVlbi1pZnJhbWUtb2YtbWVkaWEtZG9jdW1lbnQu
aHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJvZmZzY3JlZW4taWZyYW1lLW9mLW1l
ZGlhLWRvY3VtZW50Lmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0U5NDNG
MTFDRDNFODdFMDBBQzA4QzIgLyogVmlkZW9Db250cm9sc01hbmFnZXIubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBWaWRlb0NvbnRyb2xzTWFuYWdlci5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNGMURCMzAxNERBMjA3NjAwMjRDMzYyIC8qIE5l
d0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjYxMSw2ICsyNjEzLDcgQEAKIAkJCQk1MzFDMUQ4RDFE
RjhFRjcyMDA2RTk3OUYgLyogTEVCRGVjb2Rlci5jcHAgKi8sCiAJCQkJQTU3RDU0RjcxRjMzOTdC
NDAwQTk3QUE3IC8qIExpZmVjeWNsZUxvZ2dlci5jcHAgKi8sCiAJCQkJQTU3RDU0RjgxRjMzOTdC
NDAwQTk3QUE3IC8qIExpZmVjeWNsZUxvZ2dlci5oICovLAorCQkJCTkzRTJDNTU0MUZEMzIwNDEw
MEUxREY2QSAvKiBMaW5lRW5kaW5nLmNwcCAqLywKIAkJCQkyNjMwMEIxNzE2NzU1Q0Q5MDA2Njg4
NkQgLyogTGlzdEhhc2hTZXQuY3BwICovLAogCQkJCTBGRkM0NUE0MUI3M0VCRTIwMDg1QkQ2MiAv
KiBMb2NrLmNwcCAqLywKIAkJCQlBNTdENTRGNDFGMzM5NUQwMDBBOTdBQTcgLyogTG9nZ2VyLmNw
cCAqLywKQEAgLTI3NTgsNyArMjc2MSw2IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAogCQkJCTc1NjA5MTc2MTkyNTlDNTkwMDlFRjA2RSAvKiBpb3MgKi8sCi0JCQkJRkUy
MTdFQ0IxNjQwQTU0QTAwNTI5ODhCIC8qIEphdmFTY3JpcHRDb3JlICovLAogCQkJCUMwN0U2Q0FE
MTNGRDY3NjUwMDM4QjIyQiAvKiBtYWMgKi8sCiAJCQkJQzA4NTg3RjkxM0ZFQzM5QjAwMUVGNEU1
IC8qIFRlc3RXZWJLaXRBUEkgKi8sCiAJCQkJNDQwQTFEMzYxNEEwMTAwMDAwOEE2NkYyIC8qIFdl
YkNvcmUgKi8sCkBAIC0yOTY5LDEzICsyOTcxLDYgQEAKIAkJCW5hbWUgPSBSZXNvdXJjZXM7CiAJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQlGRTIxN0VDQjE2NDBBNTRBMDA1Mjk4
OEIgLyogSmF2YVNjcmlwdENvcmUgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxk
cmVuID0gKAotCQkJKTsKLQkJCXBhdGggPSBKYXZhU2NyaXB0Q29yZTsKLQkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7Ci0JCX07CiAvKiBFbmQgUEJYR3JvdXAgc2VjdGlvbiAqLwogCiAvKiBCZWdp
biBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLwpAQCAtMzE3MCw2ICszMTY1LDcgQEAKIAkJCQk3
QTA1MDk0MTFGQjlGMDY0MDBCMzNGQjggLyogSlNPTlZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUzMUMxRDhFMURGOEVGNzIwMDZFOTc5RiAvKiBMRUJEZWNvZGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1N0Q1NEY5MUYzMzk3QjQwMEE5N0FBNyAvKiBMaWZlY3ljbGVMb2dnZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJOTNFMkM1NTUxRkQzMjA0MTAwRTFERjZBIC8qIExpbmVFbmRp
bmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RFRTgxRDBBNTkwQzAwRkVCQ0YzIC8qIExp
c3RIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjFEMUQwQTU5MEMwMEZFQkNG
MyAvKiBMb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1N0Q1NEY2MUYzMzk1RDAwMEE5N0FB
NyAvKiBMb2dnZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9MaW5lRW5kaW5nLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL0xpbmVFbmRpbmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk4ZjAwMjg1ZWQ2MTFlM2ZlMDAwYjA1
NjY5YjVmNTNlNGRiOTMzOGEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9MaW5lRW5kaW5nLmNwcApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9MaW5lRW5kaW5nLmg+CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKwor
Y29uc3QgYXV0byBDUiA9ICdccic7Citjb25zdCBhdXRvIExGID0gJ1xuJzsKKworc3RhdGljIGNv
bnN0IGNoYXIqIHN0cmluZ2lmeShjb25zdCBWZWN0b3I8dWludDhfdD4mIHZlY3RvcikKK3sKKyAg
ICBzdGF0aWMgY2hhciBidWZmZXJbMTAwXTsKKyAgICBjaGFyKiBvdXQgPSBidWZmZXI7CisgICAg
Zm9yIChhdXRvIGNoYXJhY3RlciA6IHZlY3RvcikgeworICAgICAgICBzd2l0Y2ggKGNoYXJhY3Rl
cikgeworICAgICAgICBjYXNlICdcMCc6CisgICAgICAgICAgICAqb3V0KysgPSAnPCc7CisgICAg
ICAgICAgICAqb3V0KysgPSAnMCc7CisgICAgICAgICAgICAqb3V0KysgPSAnPic7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnXHInOgorICAgICAgICAgICAgKm91dCsrID0gJzwn
OworICAgICAgICAgICAgKm91dCsrID0gJ0MnOworICAgICAgICAgICAgKm91dCsrID0gJ1InOwor
ICAgICAgICAgICAgKm91dCsrID0gJz4nOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgJ1xuJzoKKyAgICAgICAgICAgICpvdXQrKyA9ICc8JzsKKyAgICAgICAgICAgICpvdXQrKyA9
ICdMJzsKKyAgICAgICAgICAgICpvdXQrKyA9ICdGJzsKKyAgICAgICAgICAgICpvdXQrKyA9ICc+
JzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKm91
dCsrID0gY2hhcmFjdGVyOworICAgICAgICB9CisgICAgfQorICAgICpvdXQgPSAnXDAnOworICAg
IHJldHVybiBidWZmZXI7Cit9CisKK1RFU1QoV1RGLCBMaW5lRW5kaW5nTm9ybWFsaXplVG9MRikK
K3sKKyAgICBFWFBFQ1RfU1RSRVEoIiIsIHN0cmluZ2lmeShub3JtYWxpemVMaW5lRW5kaW5nc1Rv
TEYoeyB9KSkpOworCisgICAgRVhQRUNUX1NUUkVRKCI8MD4iLCBzdHJpbmdpZnkobm9ybWFsaXpl
TGluZUVuZGluZ3NUb0xGKHsgJ1wwJyB9KSkpOworICAgIEVYUEVDVF9TVFJFUSgiYSIsIHN0cmlu
Z2lmeShub3JtYWxpemVMaW5lRW5kaW5nc1RvTEYoeyAnYScgfSkpKTsKKyAgICBFWFBFQ1RfU1RS
RVEoIjxMRj4iLCBzdHJpbmdpZnkobm9ybWFsaXplTGluZUVuZGluZ3NUb0xGKHsgQ1IgfSkpKTsK
KyAgICBFWFBFQ1RfU1RSRVEoIjxMRj4iLCBzdHJpbmdpZnkobm9ybWFsaXplTGluZUVuZGluZ3NU
b0xGKHsgTEYgfSkpKTsKKworICAgIEVYUEVDVF9TVFJFUSgiPExGPiIsIHN0cmluZ2lmeShub3Jt
YWxpemVMaW5lRW5kaW5nc1RvTEYoeyBDUiwgTEYgfSkpKTsKKyAgICBFWFBFQ1RfU1RSRVEoIjxM
Rj48TEY+Iiwgc3RyaW5naWZ5KG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9MRih7IExGLCBMRiB9KSkp
OworICAgIEVYUEVDVF9TVFJFUSgiPExGPjxMRj4iLCBzdHJpbmdpZnkobm9ybWFsaXplTGluZUVu
ZGluZ3NUb0xGKHsgQ1IsIENSIH0pKSk7CisgICAgRVhQRUNUX1NUUkVRKCI8TEY+PExGPiIsIHN0
cmluZ2lmeShub3JtYWxpemVMaW5lRW5kaW5nc1RvTEYoeyBMRiwgQ1IgfSkpKTsKKworICAgIEVY
UEVDVF9TVFJFUSgiYTxMRj4iLCBzdHJpbmdpZnkobm9ybWFsaXplTGluZUVuZGluZ3NUb0xGKHsg
J2EnLCBDUiB9KSkpOworICAgIEVYUEVDVF9TVFJFUSgiYTxMRj4iLCBzdHJpbmdpZnkobm9ybWFs
aXplTGluZUVuZGluZ3NUb0xGKHsgJ2EnLCBMRiB9KSkpOworICAgIEVYUEVDVF9TVFJFUSgiYTxM
Rj4iLCBzdHJpbmdpZnkobm9ybWFsaXplTGluZUVuZGluZ3NUb0xGKHsgJ2EnLCBDUiwgTEYgfSkp
KTsKKyAgICBFWFBFQ1RfU1RSRVEoImE8TEY+PExGPiIsIHN0cmluZ2lmeShub3JtYWxpemVMaW5l
RW5kaW5nc1RvTEYoeyAnYScsIExGLCBDUiB9KSkpOworCisgICAgRVhQRUNUX1NUUkVRKCJhPExG
PmIiLCBzdHJpbmdpZnkobm9ybWFsaXplTGluZUVuZGluZ3NUb0xGKHsgJ2EnLCBDUiwgJ2InIH0p
KSk7CisgICAgRVhQRUNUX1NUUkVRKCJhPExGPmIiLCBzdHJpbmdpZnkobm9ybWFsaXplTGluZUVu
ZGluZ3NUb0xGKHsgJ2EnLCBMRiwgJ2InIH0pKSk7CisgICAgRVhQRUNUX1NUUkVRKCJhPExGPmIi
LCBzdHJpbmdpZnkobm9ybWFsaXplTGluZUVuZGluZ3NUb0xGKHsgJ2EnLCBDUiwgTEYsICdiJyB9
KSkpOworICAgIEVYUEVDVF9TVFJFUSgiYTxMRj48TEY+YiIsIHN0cmluZ2lmeShub3JtYWxpemVM
aW5lRW5kaW5nc1RvTEYoeyAnYScsIExGLCBDUiwgJ2InIH0pKSk7Cit9CisKK1RFU1QoV1RGLCBM
aW5lRW5kaW5nTm9ybWFsaXplVG9DUkxGKQoreworICAgIEVYUEVDVF9TVFJFUSgiIiwgc3RyaW5n
aWZ5KG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9DUkxGKHsgfSkpKTsKKworICAgIEVYUEVDVF9TVFJF
USgiPDA+Iiwgc3RyaW5naWZ5KG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9DUkxGKHsgJ1wwJyB9KSkp
OworICAgIEVYUEVDVF9TVFJFUSgiYSIsIHN0cmluZ2lmeShub3JtYWxpemVMaW5lRW5kaW5nc1Rv
Q1JMRih7ICdhJyB9KSkpOworICAgIEVYUEVDVF9TVFJFUSgiPENSPjxMRj4iLCBzdHJpbmdpZnko
bm9ybWFsaXplTGluZUVuZGluZ3NUb0NSTEYoeyBDUiB9KSkpOworICAgIEVYUEVDVF9TVFJFUSgi
PENSPjxMRj4iLCBzdHJpbmdpZnkobm9ybWFsaXplTGluZUVuZGluZ3NUb0NSTEYoeyBMRiB9KSkp
OworCisgICAgRVhQRUNUX1NUUkVRKCI8Q1I+PExGPiIsIHN0cmluZ2lmeShub3JtYWxpemVMaW5l
RW5kaW5nc1RvQ1JMRih7IENSLCBMRiB9KSkpOworICAgIEVYUEVDVF9TVFJFUSgiPENSPjxMRj48
Q1I+PExGPiIsIHN0cmluZ2lmeShub3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JMRih7IExGLCBMRiB9
KSkpOworICAgIEVYUEVDVF9TVFJFUSgiPENSPjxMRj48Q1I+PExGPiIsIHN0cmluZ2lmeShub3Jt
YWxpemVMaW5lRW5kaW5nc1RvQ1JMRih7IENSLCBDUiB9KSkpOworICAgIEVYUEVDVF9TVFJFUSgi
PENSPjxMRj48Q1I+PExGPiIsIHN0cmluZ2lmeShub3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JMRih7
IExGLCBDUiB9KSkpOworCisgICAgRVhQRUNUX1NUUkVRKCJhPENSPjxMRj4iLCBzdHJpbmdpZnko
bm9ybWFsaXplTGluZUVuZGluZ3NUb0NSTEYoeyAnYScsIENSIH0pKSk7CisgICAgRVhQRUNUX1NU
UkVRKCJhPENSPjxMRj4iLCBzdHJpbmdpZnkobm9ybWFsaXplTGluZUVuZGluZ3NUb0NSTEYoeyAn
YScsIExGIH0pKSk7CisgICAgRVhQRUNUX1NUUkVRKCJhPENSPjxMRj4iLCBzdHJpbmdpZnkobm9y
bWFsaXplTGluZUVuZGluZ3NUb0NSTEYoeyAnYScsIENSLCBMRiB9KSkpOworICAgIEVYUEVDVF9T
VFJFUSgiYTxDUj48TEY+PENSPjxMRj4iLCBzdHJpbmdpZnkobm9ybWFsaXplTGluZUVuZGluZ3NU
b0NSTEYoeyAnYScsIExGLCBDUiB9KSkpOworCisgICAgRVhQRUNUX1NUUkVRKCJhPENSPjxMRj5i
Iiwgc3RyaW5naWZ5KG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9DUkxGKHsgJ2EnLCBDUiwgJ2InIH0p
KSk7CisgICAgRVhQRUNUX1NUUkVRKCJhPENSPjxMRj5iIiwgc3RyaW5naWZ5KG5vcm1hbGl6ZUxp
bmVFbmRpbmdzVG9DUkxGKHsgJ2EnLCBMRiwgJ2InIH0pKSk7CisgICAgRVhQRUNUX1NUUkVRKCJh
PENSPjxMRj5iIiwgc3RyaW5naWZ5KG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9DUkxGKHsgJ2EnLCBD
UiwgTEYsICdiJyB9KSkpOworICAgIEVYUEVDVF9TVFJFUSgiYTxDUj48TEY+PENSPjxMRj5iIiwg
c3RyaW5naWZ5KG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9DUkxGKHsgJ2EnLCBMRiwgQ1IsICdiJyB9
KSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVGV4dENvZGVjLmNwcCBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9UZXh0Q29kZWMuY3BwCmluZGV4IGUzM2Q3NjAyN2M4NzRi
YWRlZjk5NGQzY2MxMzcwZmM1ZWI3N2JlMmIuLmZkMDUwNTBhYzAwODI3YmRlZGJmMmNlODY1NjIw
OTNjNjFiYWYwNjEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9UZXh0Q29kZWMuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9U
ZXh0Q29kZWMuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAor
I2luY2x1ZGUgPFdlYkNvcmUvVGV4dENvZGVjLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0RW5j
b2RpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRFbmNvZGluZ1JlZ2lzdHJ5Lmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpAQCAtOTIsNyArOTMsMTAgQEAgc3RhdGlj
IGNvbnN0IGNoYXIqIHRlc3REZWNvZGUoY29uc3QgY2hhciogZW5jb2RpbmdOYW1lLCBzdGQ6Omlu
aXRpYWxpemVyX2xpc3Q8Y28KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkg
ewogICAgICAgICBhdXRvIHZlY3RvciA9IGRlY29kZUhleFRlc3RCeXRlcyhpbnB1dHMuYmVnaW4o
KVtpXSk7CiAgICAgICAgIGJvb2wgbGFzdCA9IGkgPT0gc2l6ZSAtIDE7Ci0gICAgICAgIHJlc3Vs
dEJ1aWxkZXIuYXBwZW5kKGVzY2FwZU5vbkFTQ0lJUHJpbnRhYmxlQ2hhcmFjdGVycyhjb2RlYy0+
ZGVjb2RlKHZlY3Rvci5kYXRhKCksIHZlY3Rvci5zaXplKCksIGxhc3QpKSk7CisgICAgICAgIGJv
b2wgc2F3RXJyb3IgPSBmYWxzZTsKKyAgICAgICAgcmVzdWx0QnVpbGRlci5hcHBlbmQoZXNjYXBl
Tm9uQVNDSUlQcmludGFibGVDaGFyYWN0ZXJzKGNvZGVjLT5kZWNvZGUodmVjdG9yLmRhdGEoKSwg
dmVjdG9yLnNpemUoKSwgbGFzdCwgZmFsc2UsIHNhd0Vycm9yKSkpOworICAgICAgICBpZiAoc2F3
RXJyb3IpCisgICAgICAgICAgICByZXN1bHRCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBFUlJPUiIp
OwogICAgIH0KICAgICByZXR1cm4gZXNjYXBlTm9uQVNDSUlQcmludGFibGVDaGFyYWN0ZXJzKHJl
c3VsdEJ1aWxkZXIudG9TdHJpbmcoKSk7CiB9CkBAIC0xMzQsMTAzICsxMzgsMTAzIEBAIFRFU1Qo
VGV4dENvZGVjLCBVVEY4KQogCiBURVNUKFRleHRDb2RlYywgVVRGOEludmFsaWRTZXF1ZW5jZXMp
CiB7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH0/IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJF
MCBBNSAzRiIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9PyIsIHRlc3REZWNvZGUoIlVU
Ri04IiwgeyAiRTAgQTUiLCAiM0YiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfT8iLCB0
ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkUwIiwgIkE1IDNGIiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVR
KCJ7RkZGRH0/IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJFMCIsICJBNSIsICIzRiIgfSkpOwot
ICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9PyIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRTAiLCAi
IiwgIkE1IiwgIiIsICIzRiIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9PyIsIHRlc3RE
ZWNvZGUoIlVURi04IiwgeyAiRTAiLCAiIiwgIkE1IiwgIiIsICIzRiIsICIiIH0pKTsKLSAgICBF
WFBFQ1RfU1RSRVEoIntGRkZEfT8iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIiIsICJFMCIsICIi
LCAiQTUiLCAiIiwgIjNGIiwgIiIgfSkpOwotCi0gICAgRVhQRUNUX1NUUkVRKCJhe0ZGRkR9PyIs
IHRlc3REZWNvZGUoIlVURi04IiwgeyAiNjEgRTAgQTUgM0YiIH0pKTsKLSAgICBFWFBFQ1RfU1RS
RVEoImF7RkZGRH0/IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICI2MSBFMCBBNSIsICIzRiIgfSkp
OwotICAgIEVYUEVDVF9TVFJFUSgiYXtGRkZEfT8iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIjYx
IEUwIiwgIkE1IDNGIiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJhe0ZGRkR9PyIsIHRlc3REZWNv
ZGUoIlVURi04IiwgeyAiNjEgRTAiLCAiQTUiLCAiM0YiIH0pKTsKLQotICAgIEVYUEVDVF9TVFJF
USgie0I2fXtGRkZEfT8iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkMyIEI2IEUwIEE1IDNGIiB9
KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7QjZ9e0ZGRkR9PyIsIHRlc3REZWNvZGUoIlVURi04Iiwg
eyAiQzIgQjYgRTAgQTUiLCAiM0YiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntCNn17RkZGRH0/
IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJDMiBCNiBFMCIsICJBNSAzRiIgfSkpOwotICAgIEVY
UEVDVF9TVFJFUSgie0I2fXtGRkZEfT8iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkMyIEI2IEUw
IiwgIkE1IiwgIjNGIiB9KSk7Ci0KLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfSIsIHRlc3REZWNv
ZGUoIlVURi04IiwgeyAiQzIiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfSIsIHRlc3RE
ZWNvZGUoIlVURi04IiwgeyAiRTIiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfSIsIHRl
c3REZWNvZGUoIlVURi04IiwgeyAiRTIgOTgiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZE
fSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjAiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntG
RkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjAgOUYiIH0pKTsKLSAgICBFWFBFQ1RfU1RS
RVEoIntGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjAgOUYgOTIiIH0pKTsKLQotICAg
IEVYUEVDVF9TVFJFUSgie0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJFMiIsICI5OCIg
fSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJG
MCIsICI5RiIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9IiwgdGVzdERlY29kZSgiVVRG
LTgiLCB7ICJGMCA5RiIsICI5MiIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9IiwgdGVz
dERlY29kZSgiVVRGLTgiLCB7ICJGMCIsICI5RjkyIiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7
RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkYwIiwgIjlGIiwgIjkyIiB9KSk7Ci0KLSAg
ICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiQzAg
ODAiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfSIsIHRlc3REZWNv
ZGUoIlVURi04IiwgeyAiRTAgODAgODAiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtG
RkZEfXtGRkZEfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjAgODAgODAgODAiIH0p
KTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSIsIHRl
c3REZWNvZGUoIlVURi04IiwgeyAiRjggODAgODAgODAgODAiIH0pKTsKLSAgICBFWFBFQ1RfU1RS
RVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVU
Ri04IiwgeyAiRkMgODAgODAgODAgODAgODAiIH0pKTsKLQotICAgIEVYUEVDVF9TVFJFUSgie0ZG
RkR9e0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJDMSBCRiIgfSkpOwotICAgIEVYUEVD
VF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJFMCA4
MSBCRiIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9Iiwg
dGVzdERlY29kZSgiVVRGLTgiLCB7ICJGMCA4MCA4MSBCRiIgfSkpOwotICAgIEVYUEVDVF9TVFJF
USgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7
ICJGOCA4MCA4MCA4MSBCRiIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZG
RkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGQyA4MCA4MCA4
MCA4MSBCRiIgfSkpOwotCi0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH0iLCB0
ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkUwIDgyIDgwIiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7
RkZGRH17RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkYwIDgwIDgy
IDgwIiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZG
RH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkY4IDgwIDgwIDgyIDgwIiB9KSk7Ci0gICAgRVhQ
RUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0RGVj
b2RlKCJVVEYtOCIsIHsgIkZDIDgwIDgwIDgwIDgyIDgwIiB9KSk7Ci0KLSAgICBFWFBFQ1RfU1RS
RVEoIntGRkZEfXtGRkZEfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRTAgOUYgQkYi
IH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSIsIHRlc3RE
ZWNvZGUoIlVURi04IiwgeyAiRjAgODAgOUYgQkYiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntG
RkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjgg
ODAgODAgOUYgQkYiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtG
RkZEfXtGRkZEfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRkMgODAgODAgODAgOUYg
QkYiIH0pKTsKLQotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9Iiwg
dGVzdERlY29kZSgiVVRGLTgiLCB7ICJGMCA4MCBBMCA4MCIgfSkpOwotICAgIEVYUEVDVF9TVFJF
USgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7
ICJGOCA4MCA4MCBBMCA4MCIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZG
RkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGQyA4MCA4MCA4
MCBBMCA4MCIgfSkpOwotCi0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZG
RH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkYwIDhGIEJGIEJGIiB9KSk7Ci0gICAgRVhQRUNU
X1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYt
OCIsIHsgIkY4IDgwIDhGIEJGIEJGIiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZG
RH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkZDIDgw
IDgwIDhGIEJGIEJGIiB9KSk7Ci0KLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZE
fXtGRkZEfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjggODAgOTAgODAgODAiIH0p
KTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZE
fSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRkMgODAgODAgOTAgODAgODAiIH0pKTsKLQotICAg
IEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IiwgdGVzdERlY29k
ZSgiVVRGLTgiLCB7ICJGOCA4NCA4RiBCRiBCRiIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZG
RkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7
ICJGQyA4MCA4NCA4RiBCRiBCRiIgfSkpOwotCi0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZG
RH17RkZGRH17RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkY0IDkwIDgwIDgwIiB9KSk7
Ci0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0
RGVjb2RlKCJVVEYtOCIsIHsgIkZCIEJGIEJGIEJGIEJGIiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVR
KCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYt
OCIsIHsgIkZEIEJGIEJGIEJGIEJGIEJGIiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17
RkZGRH17RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkVEIEEwIDgwIiB9KSk7Ci0gICAg
RVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsg
IkVEIEJGIEJGIiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZG
RH17RkZGRH17RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkVEIEEwIEJEIEVEIEIyIEE5
IiB9KSk7Ci0KLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZE
fSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjggODQgOTAgODAgODAiIH0pKTsKLSAgICBFWFBF
Q1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSIsIHRlc3REZWNv
ZGUoIlVURi04IiwgeyAiRkMgODAgODQgOTAgODAgODAiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEo
IntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjAgOEQg
QTAgODAiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSIs
IHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjAgOEQgQkYgQkYiIH0pKTsKLSAgICBFWFBFQ1RfU1RS
RVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSIsIHRl
c3REZWNvZGUoIlVURi04IiwgeyAiRjAgOEQgQTAgQkQgRjAgOEQgQjIgQTkiIH0pKTsKLQotICAg
IEVYUEVDVF9TVFJFUSgie0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICI4MCIgfSkpOwot
ICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICI4
MCA4MCIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9IiwgdGVzdERl
Y29kZSgiVVRGLTgiLCB7ICI4MCA4MCA4MCIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9
e0ZGRkR9e0ZGRkR9e0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICI4MCA4MCA4MCA4MCIg
fSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9Iiwg
dGVzdERlY29kZSgiVVRGLTgiLCB7ICI4MCA4MCA4MCA4MCA4MCIgfSkpOwotICAgIEVYUEVDVF9T
VFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IiwgdGVzdERlY29kZSgi
VVRGLTgiLCB7ICI4MCA4MCA4MCA4MCA4MCA4MCIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZG
RkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IiwgdGVzdERlY29kZSgiVVRG
LTgiLCB7ICI4MCA4MCA4MCA4MCA4MCA4MCA4MCIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0I2
fXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiQzIgQjYgODAiIH0pKTsKLSAgICBFWFBF
Q1RfU1RSRVEoInsyNjAzfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRTIgOTggODMg
ODAiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoInsxRjRBOX17RkZGRH0iLCB0ZXN0RGVjb2RlKCJV
VEYtOCIsIHsgIkYwIDlGIDkyIEE5IDgwIiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17
RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkZC
IEJGIEJGIEJGIEJGIDgwIiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZG
RH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkZEIEJG
IEJGIEJGIEJGIEJGIDgwIiB9KSk7Ci0KLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfSIsIHRlc3RE
ZWNvZGUoIlVURi04IiwgeyAiRkUiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZE
fSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRkUgODAiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEo
IntGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRkYiIH0pKTsKLSAgICBFWFBFQ1RfU1RS
RVEoIntGRkZEfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRkYgODAiIH0pKTsKKyAg
ICBFWFBFQ1RfU1RSRVEoIntGRkZEfT8gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkUw
IEE1IDNGIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH0/IEVSUk9SIiwgdGVzdERlY29k
ZSgiVVRGLTgiLCB7ICJFMCBBNSIsICIzRiIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9
PyBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRTAiLCAiQTUgM0YiIH0pKTsKKyAgICBF
WFBFQ1RfU1RSRVEoIntGRkZEfT8gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkUwIiwg
IkE1IiwgIjNGIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH0/IEVSUk9SIiwgdGVzdERl
Y29kZSgiVVRGLTgiLCB7ICJFMCIsICIiLCAiQTUiLCAiIiwgIjNGIiB9KSk7CisgICAgRVhQRUNU
X1NUUkVRKCJ7RkZGRH0/IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJFMCIsICIiLCAi
QTUiLCAiIiwgIjNGIiwgIiIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9PyBFUlJPUiIs
IHRlc3REZWNvZGUoIlVURi04IiwgeyAiIiwgIkUwIiwgIiIsICJBNSIsICIiLCAiM0YiLCAiIiB9
KSk7CisKKyAgICBFWFBFQ1RfU1RSRVEoImF7RkZGRH0/IEVSUk9SIiwgdGVzdERlY29kZSgiVVRG
LTgiLCB7ICI2MSBFMCBBNSAzRiIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgiYXtGRkZEfT8gRVJS
T1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIjYxIEUwIEE1IiwgIjNGIiB9KSk7CisgICAgRVhQ
RUNUX1NUUkVRKCJhe0ZGRkR9PyBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiNjEgRTAi
LCAiQTUgM0YiIH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEoImF7RkZGRH0/IEVSUk9SIiwgdGVzdERl
Y29kZSgiVVRGLTgiLCB7ICI2MSBFMCIsICJBNSIsICIzRiIgfSkpOworCisgICAgRVhQRUNUX1NU
UkVRKCJ7QjZ9e0ZGRkR9PyBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiQzIgQjYgRTAg
QTUgM0YiIH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEoIntCNn17RkZGRH0/IEVSUk9SIiwgdGVzdERl
Y29kZSgiVVRGLTgiLCB7ICJDMiBCNiBFMCBBNSIsICIzRiIgfSkpOworICAgIEVYUEVDVF9TVFJF
USgie0I2fXtGRkZEfT8gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkMyIEI2IEUwIiwg
IkE1IDNGIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7QjZ9e0ZGRkR9PyBFUlJPUiIsIHRlc3RE
ZWNvZGUoIlVURi04IiwgeyAiQzIgQjYgRTAiLCAiQTUiLCAiM0YiIH0pKTsKKworICAgIEVYUEVD
VF9TVFJFUSgie0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJDMiIgfSkpOwor
ICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJF
MiIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRG
LTgiLCB7ICJFMiA5OCIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9IEVSUk9SIiwgdGVz
dERlY29kZSgiVVRGLTgiLCB7ICJGMCIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9IEVS
Uk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGMCA5RiIgfSkpOworICAgIEVYUEVDVF9TVFJF
USgie0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGMCA5RiA5MiIgfSkpOwor
CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsg
IkUyIiwgIjk4IiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH0gRVJST1IiLCB0ZXN0RGVj
b2RlKCJVVEYtOCIsIHsgIkYwIiwgIjlGIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH0g
RVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkYwIDlGIiwgIjkyIiB9KSk7CisgICAgRVhQ
RUNUX1NUUkVRKCJ7RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkYwIiwgIjlG
OTIiIH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfSBFUlJPUiIsIHRlc3REZWNvZGUoIlVU
Ri04IiwgeyAiRjAiLCAiOUYiLCAiOTIiIH0pKTsKKworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9
e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJDMCA4MCIgfSkpOworICAgIEVY
UEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgi
LCB7ICJFMCA4MCA4MCIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9
e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGMCA4MCA4MCA4MCIgfSkpOwor
ICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IEVSUk9SIiwg
dGVzdERlY29kZSgiVVRGLTgiLCB7ICJGOCA4MCA4MCA4MCA4MCIgfSkpOworICAgIEVYUEVDVF9T
VFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERl
Y29kZSgiVVRGLTgiLCB7ICJGQyA4MCA4MCA4MCA4MCA4MCIgfSkpOworCisgICAgRVhQRUNUX1NU
UkVRKCJ7RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkMxIEJGIiB9
KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0RGVj
b2RlKCJVVEYtOCIsIHsgIkUwIDgxIEJGIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17
RkZGRH17RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkYwIDgwIDgx
IEJGIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZG
RH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkY4IDgwIDgwIDgxIEJGIiB9KSk7Cisg
ICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0gRVJS
T1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkZDIDgwIDgwIDgwIDgxIEJGIiB9KSk7CisKKyAg
ICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfSBFUlJPUiIsIHRlc3REZWNvZGUoIlVU
Ri04IiwgeyAiRTAgODIgODAiIH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtG
RkZEfXtGRkZEfSBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjAgODAgODIgODAiIH0p
KTsKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSBFUlJP
UiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjggODAgODAgODIgODAiIH0pKTsKKyAgICBFWFBF
Q1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSBFUlJPUiIsIHRl
c3REZWNvZGUoIlVURi04IiwgeyAiRkMgODAgODAgODAgODIgODAiIH0pKTsKKworICAgIEVYUEVD
VF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7
ICJFMCA5RiBCRiIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZG
RkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGMCA4MCA5RiBCRiIgfSkpOworICAg
IEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVz
dERlY29kZSgiVVRGLTgiLCB7ICJGOCA4MCA4MCA5RiBCRiIgfSkpOworICAgIEVYUEVDVF9TVFJF
USgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29k
ZSgiVVRGLTgiLCB7ICJGQyA4MCA4MCA4MCA5RiBCRiIgfSkpOworCisgICAgRVhQRUNUX1NUUkVR
KCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsg
IkYwIDgwIEEwIDgwIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17
RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkY4IDgwIDgwIEEwIDgw
IiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH17
RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkZDIDgwIDgwIDgwIEEwIDgwIiB9
KSk7CisKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSBFUlJPUiIs
IHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjAgOEYgQkYgQkYiIH0pKTsKKyAgICBFWFBFQ1RfU1RS
RVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSBFUlJPUiIsIHRlc3REZWNvZGUoIlVU
Ri04IiwgeyAiRjggODAgOEYgQkYgQkYiIH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtG
RkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04Iiwg
eyAiRkMgODAgODAgOEYgQkYgQkYiIH0pKTsKKworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZG
RkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGOCA4
MCA5MCA4MCA4MCIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZG
RkR9e0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGQyA4MCA4MCA5
MCA4MCA4MCIgfSkpOworCisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZG
RH17RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkY4IDg0IDhGIEJGIEJGIiB9
KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZG
RH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkZDIDgwIDg0IDhGIEJGIEJGIiB9KSk7
CisKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSBFUlJPUiIsIHRl
c3REZWNvZGUoIlVURi04IiwgeyAiRjQgOTAgODAgODAiIH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEo
IntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04
IiwgeyAiRkIgQkYgQkYgQkYgQkYiIH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZE
fXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAi
RkQgQkYgQkYgQkYgQkYgQkYiIH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtG
RkZEfSBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRUQgQTAgODAiIH0pKTsKKyAgICBF
WFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfSBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04
IiwgeyAiRUQgQkYgQkYiIH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZE
fXtGRkZEfXtGRkZEfXtGRkZEfSBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRUQgQTAg
QkQgRUQgQjIgQTkiIH0pKTsKKworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9
e0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGOCA4NCA5MCA4MCA4
MCIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9
e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGQyA4MCA4NCA5MCA4MCA4MCIg
fSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IEVSUk9SIiwg
dGVzdERlY29kZSgiVVRGLTgiLCB7ICJGMCA4RCBBMCA4MCIgfSkpOworICAgIEVYUEVDVF9TVFJF
USgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7
ICJGMCA4RCBCRiBCRiIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9
e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgi
LCB7ICJGMCA4RCBBMCBCRCBGMCA4RCBCMiBBOSIgfSkpOworCisgICAgRVhQRUNUX1NUUkVRKCJ7
RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIjgwIiB9KSk7CisgICAgRVhQRUNU
X1NUUkVRKCJ7RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIjgwIDgw
IiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0
RGVjb2RlKCJVVEYtOCIsIHsgIjgwIDgwIDgwIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZG
RH17RkZGRH17RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIjgwIDgw
IDgwIDgwIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH17
RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIjgwIDgwIDgwIDgwIDgwIiB9KSk7
CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0g
RVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIjgwIDgwIDgwIDgwIDgwIDgwIiB9KSk7Cisg
ICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZG
RH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIjgwIDgwIDgwIDgwIDgwIDgwIDgwIiB9
KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7QjZ9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRG
LTgiLCB7ICJDMiBCNiA4MCIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgiezI2MDN9e0ZGRkR9IEVS
Uk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJFMiA5OCA4MyA4MCIgfSkpOworICAgIEVYUEVD
VF9TVFJFUSgiezFGNEE5fXtGRkZEfSBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjAg
OUYgOTIgQTkgODAiIH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtG
RkZEfXtGRkZEfXtGRkZEfSBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRkIgQkYgQkYg
QkYgQkYgODAiIH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZE
fXtGRkZEfXtGRkZEfXtGRkZEfSBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRkQgQkYg
QkYgQkYgQkYgQkYgODAiIH0pKTsKKworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9IEVSUk9SIiwg
dGVzdERlY29kZSgiVVRGLTgiLCB7ICJGRSIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9
e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGRSA4MCIgfSkpOworICAgIEVY
UEVDVF9TVFJFUSgie0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGRiIgfSkp
OworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRG
LTgiLCB7ICJGRiA4MCIgfSkpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9j
Zy9UZXN0SW52b2NhdGlvbkNHLmNwcAppbmRleCAzM2E1YjgxOWE5YzVlY2Q0YzQ5YjcxNTU0ZDI3
Y2MwNjU4MjA2NTY2Li43NjAzZDM3N2U5Y2NlNzY3YWE1MTc5MDYxNzc5ZWJjMGVlNTVjNjg1IDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3Bw
CisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2cvVGVzdEludm9jYXRpb25DRy5jcHAKQEAg
LTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxXZWJLaXQvV0tJbWFnZUNHLmg+CiAjaW5jbHVkZSA8
d3RmL01ENS5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvU3Ry
aW5nRXh0cmFzLmg+CiAKICNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAjaW5j
bHVkZSA8TGF1bmNoU2VydmljZXMvVVRDb3JlVHlwZXMuaD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328255</attachid>
            <date>2017-12-02 14:29:55 -0800</date>
            <delta_ts>2017-12-06 13:00:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-180009-20171202142953.patch</filename>
            <type>text/plain</type>
            <size>200187</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI1NDUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
ZDI4ZTNiNzZhZGVjZWZkZGQyMjBmNjEzMGY4ZjM5ZGEzOThjMmU0Li44NWM0ZWYzMDczZGRkYTEy
OTEyZjcxOGI1YjUyZjVmNzMxZGFjOGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMiBAQAorMjAxNy0xMi0wMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgTW9kZXJuaXplIHNvbWUgYXNwZWN0cyBvZiB0ZXh0IGNvZGVjcywgZWxpbWluYXRl
IFdlYktpdCB1c2Ugb2Ygc3RyY2FzZWNtcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMDA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwOiBSZW1vdmVkIGlu
Y2x1ZGUgb2YgU3RyaW5nRXh0cmFzLmguCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cDogRGl0dG8uCisgICAgICAgICogYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHA6IERpdHRv
LgorICAgICAgICAqIHJ1bnRpbWUvQ29uZmlnRmlsZS5jcHA6IERpdHRvLgorICAgICAgICAqIHJ1
bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHA6IERpdHRvLgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhp
bmdUeXBlLmNwcDogRGl0dG8uCisgICAgICAgICogcnVudGltZS9KU0NKU1ZhbHVlLmNwcDogRGl0
dG8uCisgICAgICAgICogcnVudGltZS9KU0RhdGVNYXRoLmNwcDogRGl0dG8uCisgICAgICAgICog
cnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHA6IERpdHRvLgorICAgICAgICAqIHJ1
bnRpbWUvT3B0aW9ucy5jcHA6IERpdHRvLgorICAgICAgICAoSlNDOjpwYXJzZSk6IFVzZSBlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSBpbnN0ZWFkIG9mIHN0cmNhc2VjbXAuCisKIDIwMTct
MTItMDEgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEphdmFT
Y3JpcHRDb3JlOiBtaXNzaW5nIGV4Y2VwdGlvbiBjaGVja3MgaW4gTWF0aCBmdW5jdGlvbnMgdGhh
dCB0YWtlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggMDliZTRjNDVjZDQ2ZDE4NjI5NTY5
YjdjN2E1MGNhZWRlMmE4OTdiMC4uYTZjMDUwM2IxZmRjMzA4YTk4NTdjMWM5Yzc3MWJiNmU1NDA5
NGE0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwzOSBAQAorMjAxNy0xMi0wMiAgRGFyaW4gQWRsZXIgIDxkYXJp
bkBhcHBsZS5jb20+CisKKyAgICAgICAgTW9kZXJuaXplIHNvbWUgYXNwZWN0cyBvZiB0ZXh0IGNv
ZGVjcywgZWxpbWluYXRlIFdlYktpdCB1c2Ugb2Ygc3RyY2FzZWNtcAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMDA5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvQXNzZXJ0aW9ucy5jcHA6IFJl
bW92ZWQgaW5jbHVkZSBvZiBTdHJpbmdFeHRyYXMuaC4KKyAgICAgICAgKFdURkxvZ0NoYW5uZWxC
eU5hbWUpOiBVc2UgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSBpbnN0ZWFkIG9mIHN0cmNhc2VjbXAu
CisgICAgICAgICogd3RmL0RhdGVNYXRoLmNwcDogUmVtb3ZlZCBpbmNsdWRlIG9mIFN0cmluZ0V4
dHJhcy5oLgorICAgICAgICAqIHd0Zi9NRDUuY3BwOiBEaXR0by4gQWxzbyByZW1vdmVkIGluY2x1
ZGUgb2YgQ1N0cmluZy5oLgorICAgICAgICAqIHd0Zi9TSEExLmNwcDogRGl0dG8uCisKKyAgICAg
ICAgKiB3dGYvU3RyaW5nRXh0cmFzLmg6CisgICAgICAgIChzdHJuY2FzZWNtcCk6IERlbGV0ZWQu
CisgICAgICAgIChzdHJjYXNlY21wKTogRGVsZXRlZC4KKworICAgICAgICAqIHd0Zi9TdHJpbmdQ
cmludFN0cmVhbS5jcHA6IFJlbW92ZWQgaW5jbHVkZSBvZiBTdHJpbmdFeHRyYXMuaC4KKyAgICAg
ICAgKiB3dGYvdGV4dC9CYXNlNjQuY3BwOiBEaXR0by4KKworICAgICAgICAqIHd0Zi90ZXh0L0xp
bmVFbmRpbmcuY3BwOgorICAgICAgICAoV1RGOjpub3JtYWxpemVMaW5lRW5kaW5nc1RvTEYpOiBS
ZXBsYWNlZCBvbGQgbW9yZSBnZW5lcmFsIHB1cnBvc2UgZnVuY3Rpb24gd2l0aAorICAgICAgICB0
aGlzLiBDaGFuZ2VkIGFyZ3VtZW50IHR5cGUgdG8gdmVjdG9yIGFuZCB1c2VkIGFuIHJ2YWx1ZSBy
ZWZlcmVuY2UgYW5kIHJldHVybiB2YWx1ZS4KKyAgICAgICAgQWxzbyBmaXhlZCBzb21lIHNtYWxs
IGxvZ2ljIGVycm9ycy4KKyAgICAgICAgKFdURjo6bm9ybWFsaXplTGluZUVuZGluZ3NUb0NSTEYp
OiBEaXR0by4KKyAgICAgICAgKFdURjo6bm9ybWFsaXplTGluZUVuZGluZ3NUb05hdGl2ZSk6IFVw
ZGF0ZWQgZm9yIGFib3ZlIGNoYW5nZXMuCisgICAgICAgICogd3RmL3RleHQvTGluZUVuZGluZy5o
OiBVcGRhdGVkIGZvciBhYm92ZSBjaGFuZ2VzLgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5n
Q29tbW9uLmg6CisgICAgICAgIChXVEY6OmVxdWFsSWdub3JpbmdBU0NJSUNhc2UpOiBBZGRlZCBv
dmVybG9hZCBmb3IgY29uc3QgY2hhciouCisgICAgICAgIChXVEY6OmVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKTogRGl0dG8uCisKKyAgICAgICAgKiB3dGYvdGV4dC9UZXh0U3RyZWFtLmNw
cDogUmVtb3ZlZCBpbmNsdWRlIG9mIFN0cmluZ0V4dHJhcy5oLgorICAgICAgICAqIHd0Zi90ZXh0
L1dURlN0cmluZy5jcHA6IERpdHRvLgorICAgICAgICAqIHd0Zi91bmljb2RlL2ljdS9Db2xsYXRv
cklDVS5jcHA6IERpdHRvLgorCiAyMDE3LTEyLTAyICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFw
cGxlLmNvbT4KIAogICAgICAgICBGYWN0b3Igb3V0IHRoZSAiZGF0YWJhc2VUYXNrUXVldWUiIHBh
cnRzIG9mIElEQlNlcnZlciBpbnRvIHNvbWV0aGluZyByZXVzYWJsZS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5
N2VmYTJiYjVlOTRmOTE0NjY2Yzg5NmE2MDhlMjcwOGEyOTY0ZDU3Li5kZDFhNWMxM2FlODYyNTM0
NmY4YzMzOTU3NWE4NGYwMDRjMTI3MTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTk3IEBACisy
MDE3LTEyLTAyICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNb2Rl
cm5pemUgc29tZSBhc3BlY3RzIG9mIHRleHQgY29kZWNzLCBlbGltaW5hdGUgV2ViS2l0IHVzZSBv
ZiBzdHJjYXNlY21wCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xODAwMDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIE1vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZl
dGNoQm9keTo6Y29uc3VtZUFzU3RyZWFtKTogVXBkYXRlIHRvIHVzZSBzaXplIHNpbmNlIHRoZSBy
ZXN1bHQgb2YKKyAgICAgICAgZW5jb2RlIGlzIG5vdyBWZWN0b3IgcmF0aGVyIHRoYW4gQ1N0cmlu
Zy4gQW5kIGZvciB0aGUgbmV3IFVuZW5jb2RhYmxlSGFuZGxpbmcuCisgICAgICAgIChXZWJDb3Jl
OjpGZXRjaEJvZHk6OmNvbnN1bWVUZXh0KTogUmVtb3ZlZCBub3ctdW5uZWVkZWQgdHlwZSBjYXN0
LiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6Ym9keUFzRm9ybURhdGEgY29u
c3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6dGFrZSk6IFBhc3MgcmVz
dWx0IG9mIGVuY29kZSBkaXJlY3RseSB0byBTaGFyZWRCdWZmZXI6OmNyZWF0ZS4KKworICAgICAg
ICAqIE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRlci5jcHA6IFJlbW92ZWQgaW5j
bHVkZSBvZiBTdHJpbmdFeHRyYXMuaC4KKyAgICAgICAgKiBicmlkZ2UvSWRlbnRpZmllclJlcC5o
OiBEaXR0by4KKyAgICAgICAgKiBicmlkZ2UvYy9jX2luc3RhbmNlLmNwcDogRGl0dG8uCisKKyAg
ICAgICAgKiBmaWxlYXBpL0Jsb2JCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JC
dWlsZGVyOjphcHBlbmQpOiBVcGRhdGVkIGZvciBDU3RyaW5nIHRvIFZlY3RvciBjaGFuZ2UgYW5k
CisgICAgICAgIGZvciBVbmVuY29kYWJsZUhhbmRsaW5nLgorCisgICAgICAgICogaHRtbC9wYXJz
ZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZXRh
Q2hhcnNldFBhcnNlcjo6Y2hlY2tGb3JNZXRhQ2hhcnNldCk6IENhbGwgdGhlIGRlY29kZSBmdW5j
dGlvbgorICAgICAgICB3aXRoIGFsbCB0aGUgYXJndW1lbnRzIHNpbmNlIHRoZXJlIGlzIG9ubHkg
b25lIGRlY29kZSBmdW5jdGlvbiBub3cuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVDb250ZW50U2Vj
dXJpdHlQb2xpY3lTSEEyNTZIYXNoKTogVXBkYXRlZCBmb3IgQ1N0cmluZyB0byBWZWN0b3IKKyAg
ICAgICAgY2hhbmdlIGFuZCBmb3IgVW5lbmNvZGFibGVIYW5kbGluZy4KKworICAgICAgICAqIGxv
YWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y3J5cHRvZ3JhcGhpY0RpZ2VzdEZvckJ5dGVzKTogQ2hhbmdlZCBhcmd1bWVudCB0eXBlIHRvIGNv
bnN0IHZvaWQqLgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Qu
aDogRGl0dG8uCisKKyAgICAgICAgKiBsb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpUZXh0UmVzb3VyY2VEZWNvZGVy
KTogTW92ZWQgaW5pdGlhbGl6YXRpb24gb2YgZGF0YQorICAgICAgICBtZW1iZXJzIHRvIGNsYXNz
IGRlZmluaXRpb24uCisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVh
dGUpOiBNb3ZlZCBmdW5jdGlvbiBib2R5IGhlcmUgZnJvbSB0aGUgaGVhZGVyLgorICAgICAgICAo
V2ViQ29yZTo6VGV4dFJlc291cmNlRGVjb2Rlcjo6c2V0RW5jb2RpbmcpOiBVc2UgZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UuCisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNv
ZGVyOjpzaG91bGRBdXRvRGV0ZWN0IGNvbnN0KTogVXBkYXRlZCBmb3IgbmFtZSBjaGFuZ2UKKyAg
ICAgICAgdG8gbV9wYXJlbnRGcmFtZUF1dG9EZXRlY3RlZEVuY29kaW5nLCB3aGljaCBvYnZpYXRl
cyBhIGNvbW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpmbHVz
aCk6IERpdHRvLgorICAgICAgICAqIGxvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmg6IE1vdmVk
IGluaXRpYWxpemF0aW9uIGhlcmUgZnJvbSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgTW92ZWQgZnVu
Y3Rpb24gYm9kaWVzIG91dCBvZiB0aGUgY2xhc3MuIFJlbmFtZWQgbV9oaW50RW5jb2RpbmcgdG8K
KyAgICAgICAgbV9wYXJlbnRGcmFtZUF1dG9EZXRlY3RlZEVuY29kaW5nIHNpbmNlIHRoYXQgaXMg
YSBtb3JlIGFjY3VyYXRlIGRlc2NyaXB0aW9uLgorCisgICAgICAgICogbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDogUmVtb3ZlZCBpbmNsdWRlIG9mIFN0cmluZ0V4
dHJhcy5oLgorICAgICAgICAqIHBhZ2UvRnJhbWVUcmVlLmNwcDogRGl0dG8uCisgICAgICAgICog
cGFnZS9QYWdlU2VyaWFsaXplci5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNl
cmlhbGl6ZXI6OnNlcmlhbGl6ZUZyYW1lKTogUGFzcyByZXN1bHQgb2YgZW5jb2RlIGRpcmVjdGx5
IHRvCisgICAgICAgIFN0cmluZ0J1ZmZlcjo6Y3JlYXRlIGFuZCB1cGRhdGUgZm9yIFVuZW5jb2Rh
YmxlSGFuZGxpbmcuCisgICAgICAgIChXZWJDb3JlOjpQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXpl
Q1NTU3R5bGVTaGVldCk6IERpdHRvLgorICAgICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0
eVBvbGljeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6OmZp
bmRIYXNoT2ZDb250ZW50SW5Qb2xpY2llcyBjb25zdCk6IERpdHRvLgorCisgICAgICAgICogcGxh
dGZvcm0vRmlsZUhhbmRsZS5jcHA6IFJlbW92ZWQgaW5jbHVkZSBvZiBTdHJpbmdFeHRyYXMuaC4K
KworICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI6OmNyZWF0ZSk6IEFkZGVkIGFuIG92ZXJsb2FkIHRoYXQgdGFrZXMgVmVj
dG9yPHVpbnQ4X3Q+LgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oOiBEaXR0by4K
KworICAgICAgICAqIHBsYXRmb3JtL1VSTFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpV
UkxQYXJzZXI6OmVuY29kZVF1ZXJ5KTogVXBkYXRlZCBzaW5jZSBlbmNvZGUgcmV0dXJucyBhIFZl
Y3RvciBpbnN0ZWFkCisgICAgICAgIG9mIGEgQ1N0cmluZyBub3cgYW5kIGZvciBVbmVuY29kYWJs
ZUhhbmRsaW5nLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW06CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzaG91bGRXYWl0Rm9yTG9hZGlu
Z09mUmVzb3VyY2UpOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1Bs
YXRmb3JtQ0FMYXllci5jcHA6IFJlbW92ZWQgaW5jbHVkZSBvZiBTdHJpbmdFeHRyYXMuaC4KKwor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6aGFu
ZGxlRGF0YVVSTCk6IFVwZGF0ZWQgZm9yIFZlY3RvciBpbnN0ZWFkCisgICAgICAgIG9mIENTdHJp
bmcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1EYXRhOjpjcmVhdGUpOiBBZGRlZCBuZXcgb3ZlcmxvYWQsIGFuZCBzaW1w
bGlmaWVkIHNvbWUgZXhpc3Rpbmcgb25lcy4KKyAgICAgICAgKFdlYkNvcmU6Om5vcm1hbGl6ZVN0
cmluZ0RhdGEpOiBDaGFuZ2VkIHJldHVybiB0eXBlIHRvIFZlY3Rvcjx1aW50OF90PiBhbmQgdXBk
YXRlZAorICAgICAgICBmb3IgVW5lbmNvZGFibGVIYW5kbGluZy4KKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1EYXRhOjphcHBlbmRNdWx0aVBhcnRTdHJpbmdWYWx1ZSk6IFVwZGF0ZWQgZm9yIGNoYW5n
ZSBpbiB0eXBlIG9mCisgICAgICAgIHJlc3VsdCBvZiBub3JtYWxpemVTdHJpbmdEYXRhLgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaDogVXBkYXRlZCBmb3IgdGhlIGFib3Zl
IGFuZCB1cGRhdGVkIGNvbW1lbnRzLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3Jt
RGF0YUJ1aWxkZXIuY3BwOiBNYWRlIHRoaXMgYSBuYW1lc3BhY2UgaW5zdGVhZCBvZiBhIGNsYXNz
LgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFCdWlsZGVyOjphcHBlbmQpOiBBZGRlZCBhbiBv
dmVybG9hZCBmb3IgVmVjdG9yPHVpbnQ4X3Q+LgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFC
dWlsZGVyOjphcHBlbmRRdW90ZWQpOiBSZW5hbWVkIGZyb20gYXBwZW5kUXVvdGVkU3RyaW5nIGFu
ZAorICAgICAgICBjaGFuZ2VkIHRoZSBhcmd1bWVudCB0eXBlLgorICAgICAgICAoV2ViQ29yZTo6
Rm9ybURhdGFCdWlsZGVyOjphcHBlbmRGb3JtVVJMRW5jb2RlZCk6IE1vdmVkIGxvZ2ljIHVwIGZy
b20gdGhlCisgICAgICAgIGVuY29kZVN0cmluZ0FzRm9ybURhdGEgZnVuY3Rpb24gaW50byBhIG5l
dyBzZXBhcmF0ZSBoZWxwZXIuCisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUJ1aWxkZXI6OmFk
ZEZpbGVuYW1lVG9NdWx0aVBhcnRIZWFkZXIpOiBVcGRhdGVkIGZvciBjaGFuZ2UgdG8KKyAgICAg
ICAgVW5lbmNvZGFibGVIYW5kbGluZy4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhQnVpbGRl
cjo6YmVnaW5NdWx0aVBhcnRIZWFkZXIpOiBDaGFuZ2VkIGFyZ3VtZW50IHR5cGUuCisgICAgICAg
IChXZWJDb3JlOjpGb3JtRGF0YUJ1aWxkZXI6OmFkZEtleVZhbHVlUGFpckFzRm9ybURhdGEpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNG
b3JtRGF0YSk6IFVwZGF0ZWQgdG8gY2FsbCBoZWxwZXIuCisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9Gb3JtRGF0YUJ1aWxkZXIuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAgICAg
ICogcGxhdGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaDogVXNlIFZlY3Rvcjx1aW50
OF90PiBpbnN0ZWFkIG9mCisgICAgICAgIFZlY3RvcjxjaGFyPiwgYWxzbyB1cGRhdGVkIHRoZSBj
b2RlIHRoYXQgY2FsbHMgZW5jb2RlIGZvciB0aGUgbmV3IHJldHVybiB0eXBlCisgICAgICAgIGFu
ZCB1cGRhdGVkIGZvciBjaGFuZ2UgdG8gVW5lbmNvZGFibGVIYW5kbGVyLgorCisgICAgICAgICog
cGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVj
OjpnZXRVbmVuY29kYWJsZVJlcGxhY2VtZW50KTogVXBkYXRlZCBzaW5jZSB3ZSBhcmUgdXNpbmcK
KyAgICAgICAgc3RkOjphcnJheSBub3csIHNvIHRoZSBvdXQgYXJndW1lbnQgaXMgZWFzaWVyIHRv
IHVuZGVyc3RhbmQsIGFsc28gdXBkYXRlZCBmb3IKKyAgICAgICAgY2hhbmdlIHRvIFVuZW5jb2Rh
YmxhSGFuZGxlci4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlYy5oOiBVc2Ugc3Rk
OjphcnJheSBmb3IgdGhlIFVuZW5jb2RhYmxlUmVwbGFjZW1lbnRBcnJheQorICAgICAgICB0eXBl
LCByZW1vdmVkIHRoZSBvdmVybG9hZCBvZiBkZWNvZGUgc28gdGhlcmUgaXMgb25seSBvbmUgZGVj
b2RlIGZ1bmN0aW9uLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SUNVQ29udmVydGVyV3JhcHBlcjo6fklDVUNvbnZlcnRlcldy
YXBwZXIpOiBEZWxldGVkLgorICAgICAgICBOb3QgbmVlZGVkIGFueSBtb3JlIHNpbmNlIHdlIHVz
ZSBJQ1VDb252ZXJ0ZXJQdHIgaW5zdGVhZCBub3cuCisgICAgICAgIChXZWJDb3JlOjpjYWNoZWRD
b252ZXJ0ZXJJQ1UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjSUNVOjpj
cmVhdGUpOiBEZWxldGVkLiBDYWxsZXJzIGp1c3QgdXNlIG1ha2VfdW5pcXVlCisgICAgICAgIGRp
cmVjdGx5IG5vdy4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0lDVTo6cmVnaXN0ZXJDb2Rl
Y3MpOiBSZXdyb3RlIHRvIHVzZSBsYW1iZGFzIGluc3RlYWQKKyAgICAgICAgb2YgZnVuY3Rpb25z
IHdpdGggdm9pZCogcG9pbnRlcnMuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNJQ1U6OlRl
eHRDb2RlY0lDVSk6IE1vdmVkIGluaXRpYWxpemVycyBpbnRvIHRoZSBoZWFkZXIuCisgICAgICAg
IChXZWJDb3JlOjpUZXh0Q29kZWNJQ1U6On5UZXh0Q29kZWNJQ1UpOiBNb3ZlZCB0aGUgYm9keSBv
ZiByZWxlYXNlSUNVQ29udmVydGVyCisgICAgICAgIGluIGhlcmUuIEFsc28gZ3JlYXRseSBzaW1w
bGlmaWVkIGl0IG5vdyB0aGF0IElDVUNvbnZlcnRlclB0ciBoYW5kbGVzIGNsb3NpbmcKKyAgICAg
ICAgaXQgYXMgbmVlZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjSUNVOjpyZWxlYXNl
SUNVQ29udmVydGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2Rl
Y0lDVTo6Y3JlYXRlSUNVQ29udmVydGVyIGNvbnN0KTogUmV3cm90ZSB0byBzaW1wbGZ5IG5vdyB0
aGF0CisgICAgICAgIHdlIGNhbiB1c2UgSUNVQ29udmVydGVyUHRyLgorICAgICAgICAoV2ViQ29y
ZTo6RXJyb3JDYWxsYmFja1NldHRlcjo6RXJyb3JDYWxsYmFja1NldHRlcik6IFRha2UgYSByZWZl
cmVuY2UgaW5zdGVhZAorICAgICAgICBvZiBhIHBvaW50ZXIuCisgICAgICAgIChXZWJDb3JlOjpF
cnJvckNhbGxiYWNrU2V0dGVyOjp+RXJyb3JDYWxsYmFja1NldHRlcik6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dENvZGVjSUNVOjpkZWNvZGUpOiBVc2UgZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UgaW5zdGVhZCBvZgorICAgICAgICBzdHJjYXNlY21wLgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dENvZGVjSUNVOjplbmNvZGUpOiBSZXR1cm4gYSBWZWN0b3IgaW5zdGVhZCBvZiBh
IENTdHJpbmcuCisgICAgICAgIFRha2UgYSBTdHJpbmdWaWV3IGluc3RlYWQgb2YgYSBwb2ludGVy
IGFuZCBsZW5ndGguIFNpbXBsaWZpZWQKKyAgICAgICAgdGhlIGJhY2tzbGFzaC1hcy1jdXJyZW5j
eS1zeW1ib2wgY29kZSBieSB1c2luZyBTdHJpbmc6OnJlcGxhY2UuCisgICAgICAgICogcGxhdGZv
cm0vdGV4dC9UZXh0Q29kZWNJQ1UuaDogVXBkYXRlZCBmb3IgYWJvdmUuIEZpeGVkIGluZGVudGF0
aW9uLgorICAgICAgICBBZGRlZCBhIG5ldyBJQ1VDb252ZXJ0ZXJQdHIgdHlwZWRlZiB0aGF0IHVz
ZXMgc3RkOjp1bmlxdWVfcHRyIHRvIGNsb3NlIHRoZQorICAgICAgICBjb252ZXJ0ZXI7IGNvbWJp
bmVkIHdpdGggbW92ZSBzZW1hbnRpY3MgaXQgc2ltcGxpZmllcyB0aGluZ3Mgc28gd2UgZG9uJ3Qg
aGF2ZQorICAgICAgICB0byBiZSBzbyBjYXJlZnVsIGFib3V0IGNhbGxpbmcgdWNudl9jbG9zZS4K
KworICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcDogUmVuYW1lZCB0
aGUgTGF0aW4tMSB0byBVbmljb2RlIHRhYmxlIGZyb20KKyAgICAgICAgInRhYmxlIiB0byBsYXRp
bjFDb252ZXJzaW9uVGFibGUuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNMYXRpbjE6OnJl
Z2lzdGVyQ29kZWNzKTogVXNlIGEgbGFtYmRhLgorICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlQ29t
cGxleFdpbmRvd3NMYXRpbjEpOiBSZXR1cm4gYSBWZWN0b3IgaW5zdGFkIG9mIENTdHJpbmcuCisg
ICAgICAgIEFsc28gdXNlIFN0cmluZ1ZpZXc6OmNvZGVQb2ludHMgaW5zdGVhZCBvZiBvdXIgb3du
IFUxNl9ORVhULgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjTGF0aW4xOjplbmNvZGUpOiBN
b3JlIG9mIHRoZSBzYW1lLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4x
Lmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4
dENvZGVjUmVwbGFjZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjUmVwbGFj
ZW1lbnQ6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNSZXBs
YWNlbWVudDo6VGV4dENvZGVjUmVwbGFjZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dENvZGVjUmVwbGFjZW1lbnQ6OnJlZ2lzdGVyQ29kZWNzKTogVXNlIGEgbGFtYmRhLgor
ICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjUmVwbGFjZW1lbnQuaDogVXBkYXRlZCBm
b3IgdGhlIGFib3ZlLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEYxNi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpuZXdTdHJlYW1pbmdUZXh0RGVjb2RlclVURjE2TEUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bmV3U3RyZWFtaW5nVGV4dERlY29kZXJVVEYxNkJF
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY1VURjE2OjpyZWdpc3RlckNv
ZGVjcyk6IFVzZSBsYW1iZGFzLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjVVRGMTY6OmVu
Y29kZSk6IFJldHVybiBhIFZlY3Rvci4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2Rl
Y1VURjE2Lmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvVGV4dENvZGVjVVRGOC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNVVEY4Ojpy
ZWdpc3RlckNvZGVjcyk6IFVzZSBhIGxhbWJkYS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2Rl
Y1VURjg6OmVuY29kZSk6IFJldHVybiBhIFZlY3Rvci4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0
L1RleHRDb2RlY1VURjguaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAgICAgICogcGxh
dGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpu
ZXdTdHJlYW1pbmdUZXh0RGVjb2RlclVzZXJEZWZpbmVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlRleHRDb2RlY1VzZXJEZWZpbmVkOjpyZWdpc3RlckNvZGVjcyk6IFVzZSBhIGxhbWJk
YS4KKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZUNvbXBsZXhVc2VyRGVmaW5lZCk6IFJldHVybiBh
IFZlY3Rvci4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY1VzZXJEZWZpbmVkOjplbmNvZGUp
OiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VzZXJEZWZpbmVkLmg6
IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEVu
Y29kaW5nLmNwcDogQ2hhbmdlZCBUZXh0Q29kZWNNYXAgdG8ganVzdCBob2xkIGEKKyAgICAgICAg
V1RGOjpGdW5jdGlvbiBpbnN0ZWFkIG9mIGhvbGRpbmcgYSBmdW5jdGlvbiBhbmQgYW4gYWRkaXRp
b25hbCBkYXRhIHBvaW50ZXIuCisgICAgICAgIChXZWJDb3JlOjpUZXh0RW5jb2Rpbmc6OlRleHRF
bmNvZGluZyk6IFVzZSBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZQorICAgICAgICBpbnN0
ZWFkIG9mIGEgc3BlY2lhbCBpc1JlcGxhY2VtZW50RW5jb2RpbmcgZnVuY3Rpb24uCisgICAgICAg
IChXZWJDb3JlOjpUZXh0RW5jb2Rpbmc6OmVuY29kZSBjb25zdCk6IFJldHVybiBhIFZlY3RvciBp
bnN0ZWFkIG9mIGEgQ1N0cmluZy4KKyAgICAgICAgUGFzcyBTdHJpbmdWaWV3IGluc3RlYWQgb2Yg
YSBwb2ludGVyIGFuZCBsZW5ndGguCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rp
bmcuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9U
ZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZGRUb1RleHRDb2Rl
Y01hcCk6IFJlbW92ZWQgdGhlIGFkZGl0aW9uYWxEYXRhIHBvaW50ZXIgYW5kIHVzZWQKKyAgICAg
ICAgV1RGTW92ZSBzaW5jZSBOZXdUZXh0Q29kZWNGdW5jdGlvbiBpcyBub3cgYSBXVEY6OkZ1bmN0
aW9uIHJhdGhlciB0aGFuIGEgQworICAgICAgICBmdW5jdGlvbiBwb2ludGVyLgorICAgICAgICAo
V2ViQ29yZTo6aXNSZXBsYWNlbWVudEVuY29kaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6Om5ld1RleHRDb2RlYyk6IFVzZSBmaW5kIGluc3RlYWQgb2YgZ2V0IG5vdyB0aGF0IHRoZSBm
dWNudGlvbnMgaW4KKyAgICAgICAgdGhlIG1hcCBhcmUgV1RGOjpGdW5jdGlvbiBhbmQgY2FuJ3Qg
YmUgY29waWVkLgorICAgICAgICAoV2ViQ29yZTo6ZHVtcFRleHRFbmNvZGluZ05hbWVNYXApOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuaDog
VXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC93aW4vVGV4
dENvZGVjV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY1dpbjo6ZW5jb2RlKTog
VXBkYXRlZCBjb21tZW50LgorCisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpzZW5kKTogVXBkYXRlZCBmb3IgY2hhbmdl
IHRvIFVuZW5jb2RhYmxlSGFuZGxpbmcuCisKKyAgICAgICAgKiB4bWwvWFNMVFVuaWNvZGVTb3J0
LmNwcDogUmVtb3ZlZCBpbmNsdWRlIG9mIFN0cmluZ0V4dHJhcy5oLgorICAgICAgICAqIHhtbC9w
YXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwOiBEaXR0by4KKyAgICAgICAgKiB4bWwvcGFyc2Vy
L1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHA6IERpdHRvLgorCiAyMDE3LTEyLTAyICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgaHR0cHM6
Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2NsaWVudHMtZ2V0YWxsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5n
ZUxvZwppbmRleCA5YjJiMTIzMjFiZDZmOWY5OGU2ZWZlNTdmZjQzYjgxN2Y2OWIwNWIwLi42ZDgx
ZWVmYjQ3MWEyZWY0NGMxOWZiZDAxNjZkYzMxYWYyMTYwZTg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9QQUwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNCBAQAorMjAxNy0xMi0wMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5j
b20+CisKKyAgICAgICAgTW9kZXJuaXplIHNvbWUgYXNwZWN0cyBvZiB0ZXh0IGNvZGVjcywgZWxp
bWluYXRlIFdlYktpdCB1c2Ugb2Ygc3RyY2FzZWNtcAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMDA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajog
QWRkZWQgVW5lbmNvZGFibGVIYW5kbGluZy5oLgorICAgICAgICAqIHBhbC90ZXh0L1VuZW5jb2Rh
YmxlSGFuZGxpbmcuaDogTW92ZWQgdGhlIFVuZW5jb2RhYmxlSGFuZGxpbmcgZW51bWVyYXRpb24K
KyAgICAgICAgaGVyZSBmcm9tIFRleHRDb2RlYy5oIGFuZCBjaGFuZ2VkIGl0IHRvIGFuIGVudW0g
Y2xhc3MuCisKIDIwMTctMTEtMzAgIFN0ZXBoYW4gU3phYm8gIDxzdGVwaGFuLnN6YWJvQHNvbnku
Y29tPgogCiAgICAgICAgIE1ha2UgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyIG9wdGlvbmFs
IGZvciBuZXR3b3JrIHByb2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNjQzNzUwMmJjZGZkMDdiZWEyMzQ2ZGE4
ZTVmMjQ0MWY3YTI1ZjU4ZC4uZTFmNzQ3NDJkODIxOTQ2ZTlhNWZhNDg4Y2VhODM3NjljODE5MDc4
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNy0xMi0wMiAgRGFyaW4gQWRsZXIgIDxk
YXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW9kZXJuaXplIHNvbWUgYXNwZWN0cyBvZiB0ZXh0
IGNvZGVjcywgZWxpbWluYXRlIFdlYktpdCB1c2Ugb2Ygc3RyY2FzZWNtcAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMDA5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMv
TmV0c2NhcGUvTmV0c2NhcGVCcm93c2VyRnVuY3MuY3BwOgorICAgICAgICAoV2ViS2l0Ojppbml0
aWFsaXplUHJvdGVjdGlvblNwYWNlKTogVXNlIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
IGluc3RlYWQKKyAgICAgICAgb2Ygc3RyY2FzZWNtcC4KKwogMjAxNy0xMi0wMiAgWW91ZW5uIEZh
YmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IGh0dHBzOi8vdzNj
LmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjbGllbnRzLWdldGFsbApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
Q2hhbmdlTG9nCmluZGV4IDhmOGQ1OWM3ZDFhOGMzOWYyZDI4Y2VlZWJkYTg0MTYwNTg5NzkwNGEu
LjViMWUwMGE2YTk1MjYxY2ZkYWY4NmI1NDdmMzYwZjBjOTkwYjg5NWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxNy0xMi0wMiAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW9kZXJuaXplIHNvbWUgYXNwZWN0cyBvZiB0
ZXh0IGNvZGVjcywgZWxpbWluYXRlIFdlYktpdCB1c2Ugb2Ygc3RyY2FzZWNtcAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMDA5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBIaXN0b3J5L0hpc3RvcnlQ
cm9wZXJ0eUxpc3QubW06IFJlbW92ZWQgaW5jbHVkZSBvZiBTdHJpbmdFeHRyYXMuaC4KKworICAg
ICAgICAqIFBsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5tbToKKyAgICAgICAgKFdl
YktpdDo6Z2V0QXV0aGVudGljYXRpb25JbmZvKTogVXNlIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlIGluc3RlYWQKKyAgICAgICAgb2Ygc3RyY2FzZWNtcC4KKworICAgICAgICAqIFdlYlZp
ZXcvV2ViUHJlZmVyZW5jZXMubW06CisgICAgICAgIChjb250YWlucyk6IERpdHRvLiBBbHNvIG1h
ZGUgdGhpcyBhIHRlbXBsYXRlIHNvIGl0J3MgZWFzaWVyIHRvIGNhbGwgb24gYW4gYXJyYXkuCisg
ICAgICAgIChjYWNoZU1vZGVsRm9yTWFpbkJ1bmRsZSk6IFRha2UgYWR2YW50YWdlIG9mIHRoZSBh
Ym92ZSB0byBtYWtlIGl0IGNsZWFuZXIuCisKIDIwMTctMTEtMzAgIFN0ZXBoYW4gU3phYm8gIDxz
dGVwaGFuLnN6YWJvQHNvbnkuY29tPgogCiAgICAgICAgIE1ha2UgTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyIG9wdGlvbmFsIGZvciBuZXR3b3JrIHByb2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5jcHAKaW5kZXggMzE0NmIxOGY4ZDUyYmJm
YjUyZjQ5MTNiZDE4ZGJkOWRjZGVhYzBjMS4uY2IxYjc1ODViMjJlYzMxNDcxZjg0YzJmMTU2N2Q2
ODU4YjE2ODQ4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fy
cmF5UHJvZmlsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5
UHJvZmlsZS5jcHAKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgotI2lu
Y2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJl
YW0uaD4KIAogbmFtZXNwYWNlIEpTQyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCmluZGV4IDFmYjNlMTQzZTk1MTc3M2RjNjE1MzU0YzllNmZjMmFhNWZh
ODNmZWUuLjA2ZmMxOTQ0N2Q0MGI4ZGY4ODQ1MjEwNTQ1NzU2YTU1YTdkN2RjMTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC04Myw3ICs4Myw2
IEBACiAjaW5jbHVkZSA8d3RmL0JhZ1RvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Db21tYVBy
aW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMuaD4KLSNpbmNsdWRlIDx3dGYvU3Ry
aW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvVW5pcXVlZFN0cmluZ0ltcGwuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCmluZGV4IDIzN2MwZTc1MjI1
ODJkZDNlNDdiYTBjN2Q4MWNiY2IyNmRiZGVjNTEuLmZiYWQ3ODdjZjQ4ZTgwY2M4MzUwZDJiN2Ux
YzRkYWE4NTU0ZjI5MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FeGVjdXRpb25Db3VudGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhlY3V0aW9uQ291bnRlci5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJFeGVj
dXRhYmxlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlZN
SW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KIAogbmFtZXNwYWNlIEpT
QyB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmZpZ0Zp
bGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uZmlnRmlsZS5jcHAKaW5k
ZXggYjYxYTEzMWM3NmU2YjdmMjhiODM3ZGI2NTdkOTUyNWFkMzY3NmUzNi4uMWIxNmMyZTc1Zjhh
NGYxNDUzZjAyYzU0MDQzMGJhNzk0NDkxMzQ5OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29uZmlnRmlsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29uZmlnRmlsZS5jcHAKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxzdHJp
bmcuaD4KICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9n
Lmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KIAogI2lmIEhBVkUoUkVHRVhfSCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAKaW5kZXggYjMwZjhlZWVkNWFmMTg1YzFk
MTUzYTdkMDI2OTgwY2U2YjI4Y2ZjZS4uNWFiMDA3ZmMxN2Y2NGU5Y2JkMjhjMTliNWZkNzM5NmVh
Y2Y5ZDJkMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVBy
b3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3Rv
dHlwZS5jcHAKQEAgLTQyLDcgKzQyLDYgQEAKICNpbmNsdWRlIDx0aW1lLmg+CiAjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUg
PHd0Zi9TdHJpbmdFeHRyYXMuaD4KIAogI2lmIEhBVkUoTEFOR0lORk9fSCkKICNpbmNsdWRlIDxs
YW5naW5mby5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5k
ZXhpbmdUeXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlw
ZS5jcHAKaW5kZXggZjdkNTQ3NTRkNTkzZWEyMjhhNzEwZGVmMjUyMjA3ZTM0ZmM1M2NhMS4uOGI1
YWIzYzViYzgwZjgzMmZhMGRhNjQ3ZWFiYTc1NDVlMmExNzRkNCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuY3BwCkBAIC0yNiw4ICsyNiw2IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCiAKLSNpbmNsdWRl
IDx3dGYvU3RyaW5nRXh0cmFzLmg+Ci0KIG5hbWVzcGFjZSBKU0MgewogCiBJbmRleGluZ1R5cGUg
bGVhc3RVcHBlckJvdW5kT2ZJbmRleGluZ1R5cGVzKEluZGV4aW5nVHlwZSBhLCBJbmRleGluZ1R5
cGUgYikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFs
dWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKaW5k
ZXggZDAzMDQ1MjIwZDVlOTUyNjdlZDlmOGY3YjlkMzM2NWE4MzE3OWRkMy4uYmFmNGRmZDJiODc5
NGQyYjc1MmJkMmViNTBkNDIyOTExZTI4YWVkYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJKU0ds
b2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIk51bWJlck9iamVjdC5oIgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRl
TWF0aC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGVNYXRoLmNwcApp
bmRleCA3ZTZkZjQ1N2E3ZDEzODQ5NDMwMGU5ZDk2ZTEyOTIzMGNhM2FkM2JkLi42YzA0ZTNjZDg2
NjBjNGU4ZTE2ODMyMDBjZGIyNWY2YTQ3NjYwNzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0RhdGVNYXRoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0RhdGVNYXRoLmNwcApAQCAtODYsNyArODYsNiBAQAogI2luY2x1ZGUgPHd0
Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KIAogI2lm
IEhBVkUoRVJSTk9fSCkKICNpbmNsdWRlIDxlcnJuby5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCmluZGV4
IDJkNDk4MmQ4M2ZjMGRkMzc0OTc3ZWViN2NlM2FlOGYzMTc1ZWUwM2MuLmY0NTdkY2E0NjhlYzk1
N2E4NDNkOGY4MWU4NzI3Y2Q4MTQ4ZTk5ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKQEAgLTUzLDcg
KzUzLDYgQEAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9IZXhO
dW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJp
bmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvZHRvYS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9VVEY4Lmg+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCmluZGV4IGFlOTc3YjYyMzE5NzJjZTFkMDM5
OWU2ZTk4MDQ0NGVlOTI3ZTFlZDMuLjdjOTcyMWIyMDQ1Njg4Nzc1YWIxNzRiOGQ0MTEwYTgyNGE5
ZDk3MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCkBAIC00
Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYvTnVt
YmVyT2ZDb3Jlcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3
dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgog
I2luY2x1ZGUgPHd0Zi90aHJlYWRzL1NpZ25hbHMuaD4KIApAQCAtNzEsMTEgKzcwLDExIEBAIHZv
aWQgT3B0aW9uczo6ZW5hYmxlUmVzdHJpY3RlZE9wdGlvbnMoYm9vbCBlbmFibGVPck5vdCkKICAg
ICAKIHN0YXRpYyBib29sIHBhcnNlKGNvbnN0IGNoYXIqIHN0cmluZywgYm9vbCYgdmFsdWUpCiB7
Ci0gICAgaWYgKCFzdHJjYXNlY21wKHN0cmluZywgInRydWUiKSB8fCAhc3RyY2FzZWNtcChzdHJp
bmcsICJ5ZXMiKSB8fCAhc3RyY21wKHN0cmluZywgIjEiKSkgeworICAgIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcsICJ0cnVlIikgfHwgZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2Uoc3RyaW5nLCAieWVzIikgfHwgIXN0cmNtcChzdHJpbmcsICIxIikpIHsKICAg
ICAgICAgdmFsdWUgPSB0cnVlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgaWYg
KCFzdHJjYXNlY21wKHN0cmluZywgImZhbHNlIikgfHwgIXN0cmNhc2VjbXAoc3RyaW5nLCAibm8i
KSB8fCAhc3RyY21wKHN0cmluZywgIjAiKSkgeworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShzdHJpbmcsICJmYWxzZSIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKHN0cmluZywgIm5vIikgfHwgIXN0cmNtcChzdHJpbmcsICIwIikpIHsKICAgICAgICAgdmFs
dWUgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTI3LDE3ICsxMjYs
MTcgQEAgc3RhdGljIGJvb2wgcGFyc2UoY29uc3QgY2hhciogc3RyaW5nLCBjb25zdCBjaGFyKiYg
dmFsdWUpCiAKIHN0YXRpYyBib29sIHBhcnNlKGNvbnN0IGNoYXIqIHN0cmluZywgR0NMb2dnaW5n
OjpMZXZlbCYgdmFsdWUpCiB7Ci0gICAgaWYgKCFzdHJjYXNlY21wKHN0cmluZywgIm5vbmUiKSB8
fCAhc3RyY2FzZWNtcChzdHJpbmcsICJubyIpIHx8ICFzdHJjYXNlY21wKHN0cmluZywgImZhbHNl
IikgfHwgIXN0cmNtcChzdHJpbmcsICIwIikpIHsKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2Uoc3RyaW5nLCAibm9uZSIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKHN0cmluZywgIm5vIikgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5n
LCAiZmFsc2UiKSB8fCAhc3RyY21wKHN0cmluZywgIjAiKSkgewogICAgICAgICB2YWx1ZSA9IEdD
TG9nZ2luZzo6Tm9uZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKCFz
dHJjYXNlY21wKHN0cmluZywgImJhc2ljIikgfHwgIXN0cmNhc2VjbXAoc3RyaW5nLCAieWVzIikg
fHwgIXN0cmNhc2VjbXAoc3RyaW5nLCAidHJ1ZSIpIHx8ICFzdHJjbXAoc3RyaW5nLCAiMSIpKSB7
CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmluZywgImJhc2ljIikg
fHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLCAieWVzIikgfHwgZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLCAidHJ1ZSIpIHx8ICFzdHJjbXAoc3RyaW5n
LCAiMSIpKSB7CiAgICAgICAgIHZhbHVlID0gR0NMb2dnaW5nOjpCYXNpYzsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKCFzdHJjYXNlY21wKHN0cmluZywgInZlcmJvc2Ui
KSB8fCAhc3RyY21wKHN0cmluZywgIjIiKSkgeworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShzdHJpbmcsICJ2ZXJib3NlIikgfHwgIXN0cmNtcChzdHJpbmcsICIyIikpIHsK
ICAgICAgICAgdmFsdWUgPSBHQ0xvZ2dpbmc6OlZlcmJvc2U7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwIGIvU291
cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5jcHAKaW5kZXggNGM4MGM2YjkzODZiMjBlZTczMTcyYWUx
M2E0N2RjOWZiOTNjNTkzMi4uMTU4Y2JlZjc2MTIzZDkzZDdmNDFmMmJmZjIwMTY1NmUyOThlOGEw
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5jcHAKKysrIGIvU291cmNl
L1dURi93dGYvQXNzZXJ0aW9ucy5jcHAKQEAgLTQ1LDcgKzQ1LDYgQEAKICNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1N0YWNrVHJhY2UuaD4KICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC01MjQsNyArNTIzLDcgQEAgV1RG
TG9nQ2hhbm5lbCogV1RGTG9nQ2hhbm5lbEJ5TmFtZShXVEZMb2dDaGFubmVsKiBjaGFubmVsc1td
LCBzaXplX3QgY291bnQsIGNvbnMKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50
OyArK2kpIHsKICAgICAgICAgV1RGTG9nQ2hhbm5lbCogY2hhbm5lbCA9IGNoYW5uZWxzW2ldOwot
ICAgICAgICBpZiAoIXN0cmNhc2VjbXAobmFtZSwgY2hhbm5lbC0+bmFtZSkpCisgICAgICAgIGlm
IChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIGNoYW5uZWwtPm5hbWUpKQogICAgICAgICAg
ICAgcmV0dXJuIGNoYW5uZWw7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9E
YXRlTWF0aC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9EYXRlTWF0aC5jcHAKaW5kZXggNTdlMjRkZGY0
ZWQ4MzI3M2IwYmI2NGUwMDJhMDQxYWExY2VhYWU2NS4uNjQyMGI1ZDhhMDcwODc0ODg0ODZjMGNj
OWIxYWNmMTE5MTg1OGUxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvRGF0ZU1hdGguY3Bw
CisrKyBiL1NvdXJjZS9XVEYvd3RmL0RhdGVNYXRoLmNwcApAQCAtNzcsNyArNzcsNiBAQAogI2lu
Y2x1ZGUgIkN1cnJlbnRUaW1lLmgiCiAjaW5jbHVkZSAiTWF0aEV4dHJhcy5oIgogI2luY2x1ZGUg
IlN0ZExpYkV4dHJhcy5oIgotI2luY2x1ZGUgIlN0cmluZ0V4dHJhcy5oIgogCiAjaW5jbHVkZSA8
YWxnb3JpdGhtPgogI2luY2x1ZGUgPGxpbWl0cy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvTUQ1LmNwcCBiL1NvdXJjZS9XVEYvd3RmL01ENS5jcHAKaW5kZXggNTUwODBmMjE1Y2MzZDhh
Y2M3ZWQ3ZTZhZmM1MDk1ZDMzN2EwYzlkNy4uYjY2ZGExODkyYjBjM2MxODVkNmZkODYxNTBkNDc4
YjA2MGQzZjE1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTUQ1LmNwcAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9NRDUuY3BwCkBAIC01MSwxMCArNTEsNiBAQAogI2luY2x1ZGUgIk1ENS5oIgog
CiAjaW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgotI2lmbmRlZiBOREVCVUcKLSNpbmNsdWRlICJTdHJp
bmdFeHRyYXMuaCIKLSNpbmNsdWRlICJ0ZXh0L0NTdHJpbmcuaCIKLSNlbmRpZgogI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdURiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9TSEExLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1NIQTEuY3BwCmluZGV4IDJmODRh
MWU5NTM4Yjg0NGQ5MzIxMzZiY2VmZTcyNDI2YzEwZWNhNGQuLjgxZWE0MmMzMGJkOTFmMzYyMGM1
YTBiNzljYjM5ZGU4ZTlkNTUxOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1NIQTEuY3Bw
CisrKyBiL1NvdXJjZS9XVEYvd3RmL1NIQTEuY3BwCkBAIC0zMyw4ICszMyw2IEBACiAjaW5jbHVk
ZSAiU0hBMS5oIgogCiAjaW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgotCi0jaW5jbHVkZSAiU3RyaW5n
RXh0cmFzLmgiCiAjaW5jbHVkZSAidGV4dC9DU3RyaW5nLmgiCiAKIG5hbWVzcGFjZSBXVEYgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU3RyaW5nRXh0cmFzLmggYi9Tb3VyY2UvV1RGL3d0
Zi9TdHJpbmdFeHRyYXMuaAppbmRleCA2Nzk3ZDJjZTExYWQxYjhhNTRhODc5N2UwMTQyZWEzOTM2
MDk3MDFkLi5hZjA1ZDJjZDEyOGY5NTEzYjg2MWEwMDBiNzQ2MTcwNDQ5NjRmY2NkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9TdHJpbmdFeHRyYXMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9T
dHJpbmdFeHRyYXMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDE1IEVsZWN0cm9uaWMgQXJ0cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtMjQsMzMgKzI0LDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0j
aWZuZGVmIFdURl9TdHJpbmdFeHRyYXNfaAotI2RlZmluZSBXVEZfU3RyaW5nRXh0cmFzX2gKKyNw
cmFnbWEgb25jZQogCi0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KICNp
bmNsdWRlIDxzdHJpbmcuaD4KIAotI2lmIEhBVkUoU1RSSU5HU19IKSAKLSNpbmNsdWRlIDxzdHJp
bmdzLmg+IAotI2VuZGlmIAotCi0jaWYgQ09NUElMRVIoTVNWQykKLQotLy8gRklYTUU6IFdlIHNo
b3VsZCBzdG9wIHVzaW5nIHRoZXNlIGVudGlyZWx5IGFuZCB1c2Ugc3VpdGFibGUgdmVyc2lvbnMg
b2YgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSBpbnN0ZWFkLgotCi1pbmxpbmUgaW50IHN0cm5jYXNl
Y21wKGNvbnN0IGNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMiwgc2l6ZV90IGxlbikKLXsKLSAgICBy
ZXR1cm4gX3N0cm5pY21wKHMxLCBzMiwgbGVuKTsKLX0KLQotaW5saW5lIGludCBzdHJjYXNlY21w
KGNvbnN0IGNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMikKLXsKLSAgICByZXR1cm4gX3N0cmljbXAo
czEsIHMyKTsKLX0KLQotI2VuZGlmCi0KICNpZiAhSEFWRShTVFJOU1RSKQogCiBpbmxpbmUgY2hh
ciogc3RybnN0cihjb25zdCBjaGFyKiBidWZmZXIsIGNvbnN0IGNoYXIqIHRhcmdldCwgc2l6ZV90
IGJ1ZmZlckxlbmd0aCkKQEAgLTY2LDUgKzQzLDMgQEAgaW5saW5lIGNoYXIqIHN0cm5zdHIoY29u
c3QgY2hhciogYnVmZmVyLCBjb25zdCBjaGFyKiB0YXJnZXQsIHNpemVfdCBidWZmZXJMZW5ndGgK
IH0KIAogI2VuZGlmCi0KLSNlbmRpZiAvLyBXVEZfU3RyaW5nRXh0cmFzX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1N0cmluZ1ByaW50U3RyZWFtLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1N0
cmluZ1ByaW50U3RyZWFtLmNwcAppbmRleCA2YTg4ODFjNWJiZDBiYjNhMTkxYTY0Mjk2ODY5Mzk1
ZmRjZjEzMDVjLi4zM2ZkNWFiYmJlNThkODUzOTgyYjMyZTdhNWU4YTFhNjVmNjkxNzFjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9TdHJpbmdQcmludFN0cmVhbS5jcHAKKysrIGIvU291cmNl
L1dURi93dGYvU3RyaW5nUHJpbnRTdHJlYW0uY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVk
ZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmNwcCBiL1NvdXJjZS9XVEYv
d3RmL3RleHQvQmFzZTY0LmNwcAppbmRleCAyYWU1ZGUyMjJjZDZjMzk0MWNlNzU2YmI3M2RjYjFh
ZGIwY2IxZjQ1Li44MDRmZTFmNDEyOTRhOWIxMzI3MTU1OTkzN2RiMDllYTZmZDAzODdkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAKKysrIGIvU291cmNlL1dURi93
dGYvdGV4dC9CYXNlNjQuY3BwCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSAiQmFzZTY0Lmgi
CiAKICNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9MaW5lRW5kaW5nLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L3RleHQvTGluZUVuZGluZy5jcHAKaW5kZXggZTgxOWFlZjU0OWUwMWFjYTE4ODQyZTI2ZGQ0YjU3
Yzk2MzcxM2M2NC4uYTM2MzcxYmI2ZDY2ZmZjMDg2ZjExZTE1YjQ0ZmUyYTcwNWY3NWRiZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9MaW5lRW5kaW5nLmNwcAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L0xpbmVFbmRpbmcuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOCwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMyLDE5NSArMzIsODAgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJMaW5lRW5kaW5nLmgiCiAKLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCi1uYW1lc3BhY2UgewotCi1jbGFzcyBPdXRwdXRCdWZmZXIgewotcHVi
bGljOgotICAgIHZpcnR1YWwgdWludDhfdCogYWxsb2NhdGUoc2l6ZV90KSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGNvcHkoY29uc3QgQ1N0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIH5PdXRwdXRC
dWZmZXIoKSB7IH0KLX07Ci0KLWNsYXNzIENTdHJpbmdCdWZmZXIgOiBwdWJsaWMgT3V0cHV0QnVm
ZmVyIHsKLXB1YmxpYzoKLSAgICBDU3RyaW5nQnVmZmVyKENTdHJpbmcmIGJ1ZmZlcikKLSAgICAg
ICAgOiBtX2J1ZmZlcihidWZmZXIpCi0gICAgewotICAgIH0KLSAgICB2aXJ0dWFsIH5DU3RyaW5n
QnVmZmVyKCkgeyB9Ci0KLSAgICB1aW50OF90KiBhbGxvY2F0ZShzaXplX3Qgc2l6ZSkgb3ZlcnJp
ZGUKLSAgICB7Ci0gICAgICAgIGNoYXIqIHB0cjsKLSAgICAgICAgbV9idWZmZXIgPSBDU3RyaW5n
OjpuZXdVbmluaXRpYWxpemVkKHNpemUsIHB0cik7Ci0gICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPihwdHIpOwotICAgIH0KLQotICAgIHZvaWQgY29weShjb25zdCBDU3Ry
aW5nJiBzb3VyY2UpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBtX2J1ZmZlciA9IHNvdXJjZTsK
LSAgICB9Ci0KLSAgICBjb25zdCBDU3RyaW5nJiBidWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1
ZmZlcjsgfQotCi1wcml2YXRlOgotICAgIENTdHJpbmcgbV9idWZmZXI7Ci19OwotCi0jaWYgT1Mo
V0lORE9XUykKLWNsYXNzIFZlY3RvckNoYXJBcHBlbmRCdWZmZXIgOiBwdWJsaWMgT3V0cHV0QnVm
ZmVyIHsKLXB1YmxpYzoKLSAgICBWZWN0b3JDaGFyQXBwZW5kQnVmZmVyKFZlY3Rvcjx1aW50OF90
PiYgYnVmZmVyKQotICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKLSAgICB7Ci0gICAgfQotICAg
IHZpcnR1YWwgflZlY3RvckNoYXJBcHBlbmRCdWZmZXIoKSB7IH0KLQotICAgIHVpbnQ4X3QqIGFs
bG9jYXRlKHNpemVfdCBzaXplKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgc2l6ZV90IG9sZFNp
emUgPSBtX2J1ZmZlci5zaXplKCk7Ci0gICAgICAgIG1fYnVmZmVyLmdyb3cob2xkU2l6ZSArIHNp
emUpOwotICAgICAgICByZXR1cm4gbV9idWZmZXIuZGF0YSgpICsgb2xkU2l6ZTsKLSAgICB9Ci0K
LSAgICB2b2lkIGNvcHkoY29uc3QgQ1N0cmluZyYgc291cmNlKSBvdmVycmlkZQotICAgIHsKLSAg
ICAgICAgbV9idWZmZXIuYXBwZW5kKHNvdXJjZS5kYXRhKCksIHNvdXJjZS5sZW5ndGgoKSk7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIFZlY3Rvcjx1aW50OF90PiYgbV9idWZmZXI7Ci19OwotI2Vu
ZGlmCituYW1lc3BhY2UgV1RGIHsKIAotdm9pZCBpbnRlcm5hbE5vcm1hbGl6ZUxpbmVFbmRpbmdz
VG9DUkxGKGNvbnN0IENTdHJpbmcmIGZyb20sIE91dHB1dEJ1ZmZlciYgYnVmZmVyKQorVmVjdG9y
PHVpbnQ4X3Q+IG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9MRihWZWN0b3I8dWludDhfdD4mJiB2ZWN0
b3IpCiB7Ci0gICAgaWYgKCFmcm9tLmxlbmd0aCgpKQotICAgICAgICByZXR1cm47Ci0gICAgLy8g
Q29tcHV0ZSB0aGUgbmV3IGxlbmd0aC4KLSAgICBzaXplX3QgbmV3TGVuID0gMDsKLSAgICBjb25z
dCBjaGFyKiBwID0gZnJvbS5kYXRhKCk7Ci0gICAgd2hpbGUgKHAgPCBmcm9tLmRhdGEoKSArIGZy
b20ubGVuZ3RoKCkpIHsKLSAgICAgICAgY2hhciBjID0gKnArKzsKLSAgICAgICAgaWYgKGMgPT0g
J1xyJykgewotICAgICAgICAgICAgLy8gU2FmZSB0byBsb29rIGFoZWFkIGJlY2F1c2Ugb2YgdHJh
aWxpbmcgJ1wwJy4KLSAgICAgICAgICAgIGlmICgqcCAhPSAnXG4nKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gVHVybiBDUiBpbnRvIENSTEYuCi0gICAgICAgICAgICAgICAgbmV3TGVuICs9IDI7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnXG4nKSB7Ci0gICAgICAgICAg
ICAvLyBUdXJuIExGIGludG8gQ1JMRi4KLSAgICAgICAgICAgIG5ld0xlbiArPSAyOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgLy8gTGVhdmUgb3RoZXIgY2hhcmFjdGVycyBhbG9uZS4K
LSAgICAgICAgICAgIG5ld0xlbiArPSAxOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChuZXdM
ZW4gPCBmcm9tLmxlbmd0aCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobmV3TGVuID09
IGZyb20ubGVuZ3RoKCkpIHsKLSAgICAgICAgYnVmZmVyLmNvcHkoZnJvbSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBwID0gZnJvbS5kYXRhKCk7Ci0gICAgdWludDhfdCogcSA9IGJ1
ZmZlci5hbGxvY2F0ZShuZXdMZW4pOwotCi0gICAgLy8gTWFrZSBhIGNvcHkgb2YgdGhlIHN0cmlu
Zy4KLSAgICB3aGlsZSAocCA8IGZyb20uZGF0YSgpICsgZnJvbS5sZW5ndGgoKSkgewotICAgICAg
ICBjaGFyIGMgPSAqcCsrOwotICAgICAgICBpZiAoYyA9PSAnXHInKSB7Ci0gICAgICAgICAgICAv
LyBTYWZlIHRvIGxvb2sgYWhlYWQgYmVjYXVzZSBvZiB0cmFpbGluZyAnXDAnLgotICAgICAgICAg
ICAgaWYgKCpwICE9ICdcbicpIHsKLSAgICAgICAgICAgICAgICAvLyBUdXJuIENSIGludG8gQ1JM
Ri4KLSAgICAgICAgICAgICAgICAqcSsrID0gJ1xyJzsKLSAgICAgICAgICAgICAgICAqcSsrID0g
J1xuJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChjID09ICdcbicpIHsKLSAg
ICAgICAgICAgIC8vIFR1cm4gTEYgaW50byBDUkxGLgotICAgICAgICAgICAgKnErKyA9ICdccic7
CisgICAgYXV0byBxID0gdmVjdG9yLmRhdGEoKTsKKyAgICBmb3IgKGF1dG8gcCA9IHZlY3Rvci5k
YXRhKCksIGVuZCA9IHAgKyB2ZWN0b3Iuc2l6ZSgpOyBwICE9IGVuZDsgKSB7CisgICAgICAgIGF1
dG8gY2hhcmFjdGVyID0gKnArKzsKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnXHInKSB7Cisg
ICAgICAgICAgICAvLyBUdXJuIENSTEYgYW5kIENSIGludG8gTEYuCisgICAgICAgICAgICBpZiAo
cCAhPSBlbmQgJiYgKnAgPT0gJ1xuJykKKyAgICAgICAgICAgICAgICArK3A7CiAgICAgICAgICAg
ICAqcSsrID0gJ1xuJzsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIExlYXZlIG90
aGVyIGNoYXJhY3RlcnMgYWxvbmUuCi0gICAgICAgICAgICAqcSsrID0gYzsKKyAgICAgICAgICAg
ICpxKysgPSBjaGFyYWN0ZXI7CiAgICAgICAgIH0KICAgICB9CisgICAgdmVjdG9yLnNocmluayhx
IC0gdmVjdG9yLmRhdGEoKSk7CisgICAgcmV0dXJuIFdURk1vdmUodmVjdG9yKTsKIH0KIAotfTsK
LQotbmFtZXNwYWNlIFdURiB7Ci0KLS8vIE5vcm1hbGl6ZSBhbGwgbGluZS1lbmRpbmdzIHRvIENS
IG9yIExGLgotc3RhdGljIHZvaWQgbm9ybWFsaXplVG9DUk9yTEYoY29uc3QgQ1N0cmluZyYgZnJv
bSwgVmVjdG9yPHVpbnQ4X3Q+JiByZXN1bHQsIGJvb2wgdG9DUikKK1ZlY3Rvcjx1aW50OF90PiBu
b3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JMRihWZWN0b3I8dWludDhfdD4mJiBzb3VyY2UpCiB7Ci0g
ICAgLy8gQ29tcHV0ZSB0aGUgbmV3IGxlbmd0aC4KLSAgICBzaXplX3QgbmV3TGVuID0gMDsKLSAg
ICBib29sIG5lZWRGaXggPSBmYWxzZTsKLSAgICBjb25zdCBjaGFyKiBwID0gZnJvbS5kYXRhKCk7
Ci0gICAgY2hhciBmcm9tRW5kaW5nQ2hhciA9IHRvQ1IgPyAnXG4nIDogJ1xyJzsKLSAgICBjaGFy
IHRvRW5kaW5nQ2hhciA9IHRvQ1IgPyAnXHInIDogJ1xuJzsKLSAgICB3aGlsZSAocCA8IGZyb20u
ZGF0YSgpICsgZnJvbS5sZW5ndGgoKSkgewotICAgICAgICBjaGFyIGMgPSAqcCsrOwotICAgICAg
ICBpZiAoYyA9PSAnXHInICYmICpwID09ICdcbicpIHsKLSAgICAgICAgICAgIC8vIFR1cm4gQ1JM
RiBpbnRvIENSIG9yIExGLgotICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgbmVlZEZpeCA9
IHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoYyA9PSBmcm9tRW5kaW5nQ2hhcikgewotICAgICAg
ICAgICAgLy8gVHVybiBDUi9MRiBpbnRvIExGL0NSLgotICAgICAgICAgICAgbmVlZEZpeCA9IHRy
dWU7CisgICAgc2l6ZV90IHJlc3VsdExlbmd0aCA9IDA7CisgICAgZm9yIChhdXRvIHAgPSBzb3Vy
Y2UuZGF0YSgpLCBlbmQgPSBwICsgc291cmNlLnNpemUoKTsgcCAhPSBlbmQ7ICkgeworICAgICAg
ICBhdXRvIGNoYXJhY3RlciA9ICpwKys7CisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJ1xyJykg
eworICAgICAgICAgICAgLy8gVHVybiBDUiBvciBDUkxGIGludG8gQ1JMRjsKKyAgICAgICAgICAg
IGlmIChwICE9IGVuZCAmJiAqcCA9PSAnXG4nKQorICAgICAgICAgICAgICAgICsrcDsKKyAgICAg
ICAgICAgIHJlc3VsdExlbmd0aCArPSAyOworICAgICAgICB9IGVsc2UgaWYgKGNoYXJhY3RlciA9
PSAnXG4nKSB7CisgICAgICAgICAgICAvLyBUdXJuIExGIGludG8gQ1JMRi4KKyAgICAgICAgICAg
IHJlc3VsdExlbmd0aCArPSAyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTGVh
dmUgb3RoZXIgY2hhcmFjdGVycyBhbG9uZS4KKyAgICAgICAgICAgIHJlc3VsdExlbmd0aCArPSAx
OwogICAgICAgICB9Ci0gICAgICAgIG5ld0xlbiArPSAxOwogICAgIH0KIAotICAgIC8vIEdyb3cg
dGhlIHJlc3VsdCBidWZmZXIuCi0gICAgcCA9IGZyb20uZGF0YSgpOwotICAgIHNpemVfdCBvbGRS
ZXN1bHRTaXplID0gcmVzdWx0LnNpemUoKTsKLSAgICByZXN1bHQuZ3JvdyhvbGRSZXN1bHRTaXpl
ICsgbmV3TGVuKTsKLSAgICB1aW50OF90KiBxID0gcmVzdWx0LmRhdGEoKSArIG9sZFJlc3VsdFNp
emU7Ci0KLSAgICAvLyBJZiBubyBuZWVkIHRvIGZpeCB0aGUgc3RyaW5nLCBqdXN0IGNvcHkgdGhl
IHN0cmluZyBvdmVyLgotICAgIGlmICghbmVlZEZpeCkgewotICAgICAgICBtZW1jcHkocSwgcCwg
ZnJvbS5sZW5ndGgoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIGEg
Y29weSBvZiB0aGUgc3RyaW5nLgotICAgIHdoaWxlIChwIDwgZnJvbS5kYXRhKCkgKyBmcm9tLmxl
bmd0aCgpKSB7Ci0gICAgICAgIGNoYXIgYyA9ICpwKys7Ci0gICAgICAgIGlmIChjID09ICdccicg
JiYgKnAgPT0gJ1xuJykgewotICAgICAgICAgICAgLy8gVHVybiBDUkxGIG9yIENSIGludG8gQ1Ig
b3IgTEYuCi0gICAgICAgICAgICBwKys7Ci0gICAgICAgICAgICAqcSsrID0gdG9FbmRpbmdDaGFy
OwotICAgICAgICB9IGVsc2UgaWYgKGMgPT0gZnJvbUVuZGluZ0NoYXIpIHsKLSAgICAgICAgICAg
IC8vIFR1cm4gQ1IvTEYgaW50byBMRi9DUi4KLSAgICAgICAgICAgICpxKysgPSB0b0VuZGluZ0No
YXI7CisgICAgaWYgKHJlc3VsdExlbmd0aCA9PSBzb3VyY2Uuc2l6ZSgpKQorICAgICAgICByZXR1
cm4gV1RGTW92ZShzb3VyY2UpOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdChyZXN1bHRM
ZW5ndGgpOworICAgIGF1dG8gcSA9IHJlc3VsdC5kYXRhKCk7CisgICAgZm9yIChhdXRvIHAgPSBz
b3VyY2UuZGF0YSgpLCBlbmQgPSBwICsgc291cmNlLnNpemUoKTsgcCAhPSBlbmQ7ICkgeworICAg
ICAgICBhdXRvIGNoYXJhY3RlciA9ICpwKys7CisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJ1xy
JykgeworICAgICAgICAgICAgLy8gVHVybiBDUiBvciBDUkxGIGludG8gQ1JMRjsKKyAgICAgICAg
ICAgIGlmIChwICE9IGVuZCAmJiAqcCA9PSAnXG4nKQorICAgICAgICAgICAgICAgICsrcDsKKyAg
ICAgICAgICAgICpxKysgPSAnXHInOworICAgICAgICAgICAgKnErKyA9ICdcbic7CisgICAgICAg
IH0gZWxzZSBpZiAoY2hhcmFjdGVyID09ICdcbicpIHsKKyAgICAgICAgICAgIC8vIFR1cm4gTEYg
aW50byBDUkxGLgorICAgICAgICAgICAgKnErKyA9ICdccic7CisgICAgICAgICAgICAqcSsrID0g
J1xuJzsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIExlYXZlIG90aGVyIGNoYXJh
Y3RlcnMgYWxvbmUuCi0gICAgICAgICAgICAqcSsrID0gYzsKKyAgICAgICAgICAgICpxKysgPSBj
aGFyYWN0ZXI7CiAgICAgICAgIH0KICAgICB9CisgICAgQVNTRVJUKHEgPT0gcmVzdWx0LmRhdGEo
KSArIHJlc3VsdExlbmd0aCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotQ1N0cmluZyBub3Jt
YWxpemVMaW5lRW5kaW5nc1RvQ1JMRihjb25zdCBDU3RyaW5nJiBmcm9tKQotewotICAgIENTdHJp
bmcgcmVzdWx0OwotICAgIDo6Q1N0cmluZ0J1ZmZlciBidWZmZXIocmVzdWx0KTsKLSAgICBpbnRl
cm5hbE5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9DUkxGKGZyb20sIGJ1ZmZlcik7Ci0gICAgcmV0dXJu
IGJ1ZmZlci5idWZmZXIoKTsKLX0KLQotdm9pZCBub3JtYWxpemVBbmRBcHBlbmRMaW5lRW5kaW5n
c1RvTmF0aXZlKGNvbnN0IENTdHJpbmcmIGZyb20sIFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0KQor
VmVjdG9yPHVpbnQ4X3Q+IG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9OYXRpdmUoVmVjdG9yPHVpbnQ4
X3Q+JiYgZnJvbSkKIHsKICNpZiBPUyhXSU5ET1dTKQotICAgIFZlY3RvckNoYXJBcHBlbmRCdWZm
ZXIgYnVmZmVyKHJlc3VsdCk7Ci0gICAgaW50ZXJuYWxOb3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JM
Rihmcm9tLCBidWZmZXIpOworICAgIHJldHVybiBub3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JMRihX
VEZNb3ZlKGZyb20pKTsKICNlbHNlCi0gICAgbm9ybWFsaXplVG9DUk9yTEYoZnJvbSwgcmVzdWx0
LCBmYWxzZSk7CisgICAgcmV0dXJuIG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9MRihXVEZNb3ZlKGZy
b20pKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0xpbmVF
bmRpbmcuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvTGluZUVuZGluZy5oCmluZGV4IDUxYWYwNDUy
MTM5NGI0MzdhYzZkMzNjNzZmNzRiNDYzMTE1YWFlMTkuLjg3MDBhMTM3MmFiOGI0ZmRhNzEwNmNm
OThlYzYxM2ZjOTE5OGYwMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvTGluZUVu
ZGluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvTGluZUVuZGluZy5oCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOCwgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMyLDE4ICsz
MiwxOCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKLS8vIE5vcm1hbGl6ZSBhbGwg
bGluZS1lbmRpbmdzIGluIHRoZSBnaXZlbiBzdHJpbmcgdG8gQ1JMRi4KLVdURl9FWFBPUlQgQ1N0
cmluZyBub3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JMRihjb25zdCBDU3RyaW5nJiBmcm9tKTsKKy8v
IE5vcm1hbGl6ZSBhbGwgbGluZS1lbmRpbmdzIGluIHRoZSBnaXZlbiBzdHJpbmcuCitXVEZfRVhQ
T1JUIFZlY3Rvcjx1aW50OF90PiBub3JtYWxpemVMaW5lRW5kaW5nc1RvTEYoVmVjdG9yPHVpbnQ4
X3Q+JiYpOworV1RGX0VYUE9SVCBWZWN0b3I8dWludDhfdD4gbm9ybWFsaXplTGluZUVuZGluZ3NU
b0NSTEYoVmVjdG9yPHVpbnQ4X3Q+JiYpOwogCi0vLyBOb3JtYWxpemUgYWxsIGxpbmUtZW5kaW5n
cyBpbiB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHRoZSBuYXRpdmUgbGluZS1lbmRpbmdzIGFuZCBhcHBl
bmQgdGhlIHJlc3VsdCB0byB0aGUgZ2l2ZW4gYnVmZmVyLgotLy8gKE5vcm1hbGl6ZSB0byBDUkxG
IG9uIFdpbmRvd3MgYW5kIG5vcm1hbGl6ZSB0byBMRiBvbiBhbGwgb3RoZXIgcGxhdGZvcm1zLikK
LVdURl9FWFBPUlQgdm9pZCBub3JtYWxpemVBbmRBcHBlbmRMaW5lRW5kaW5nc1RvTmF0aXZlKGNv
bnN0IENTdHJpbmcmIGZyb20sIFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0KTsKKy8vIE5vcm1hbGl6
ZSBhbGwgbGluZS1lbmRpbmdzIHRvIENSTEYgb24gV2luZG93cywgdG8gTEYgb24gYWxsIG90aGVy
IHBsYXRmb3Jtcy4KK1dURl9FWFBPUlQgVmVjdG9yPHVpbnQ4X3Q+IG5vcm1hbGl6ZUxpbmVFbmRp
bmdzVG9OYXRpdmUoVmVjdG9yPHVpbnQ4X3Q+JiYpOwogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAog
dXNpbmcgV1RGOjpub3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JMRjsKLXVzaW5nIFdURjo6bm9ybWFs
aXplQW5kQXBwZW5kTGluZUVuZGluZ3NUb05hdGl2ZTsKK3VzaW5nIFdURjo6bm9ybWFsaXplTGlu
ZUVuZGluZ3NUb0xGOwordXNpbmcgV1RGOjpub3JtYWxpemVMaW5lRW5kaW5nc1RvTmF0aXZlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb21tb24uaCBiL1NvdXJjZS9X
VEYvd3RmL3RleHQvU3RyaW5nQ29tbW9uLmgKaW5kZXggZDJjOGQwNjRlYzQyZGM0NTNlZDIzZmE3
OTQyMzVlZjFkNjAxOGU3NC4uNWE0OWY4YzU1YTI2NjYxNjBhNGZjNzdkMDM3MzljM2U0ZGI4MTQ3
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb21tb24uaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbW1vbi5oCkBAIC00NSw2ICs0NSw5IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHVuc2lnbmVkIGxvd2VyY2FzZUxldHRlcnNMZW5n
dGg+IGJvb2wgZXF1YWxMZXR0CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ0NsYXNzLCB1bnNp
Z25lZCBsZW5ndGg+IGJvb2wgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2VDb21tb24oY29u
c3QgU3RyaW5nQ2xhc3MmLCBjb25zdCBjaGFyICgmbG93ZXJjYXNlTGV0dGVycylbbGVuZ3RoXSk7
CiAKK2Jvb2wgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBjaGFyKiwgY29uc3QgY2hhciop
OwordGVtcGxhdGU8dW5zaWduZWQgbG93ZXJjYXNlTGV0dGVyc0xlbmd0aD4gYm9vbCBlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBjaGFyKiwgY29uc3QgY2hhciAoJmxvd2VyY2Fz
ZUxldHRlcnMpW2xvd2VyY2FzZUxldHRlcnNMZW5ndGhdKTsKKwogdGVtcGxhdGU8dHlwZW5hbWUg
VD4KIGlubGluZSBUIGxvYWRVbmFsaWduZWQoY29uc3QgY2hhciogcykKIHsKQEAgLTY1Miw2ICs2
NTUsMTggQEAgdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nQ2xhc3MsIHVuc2lnbmVkIGxlbmd0aD4g
aW5saW5lIGJvb2wgc3RhcnRzV2l0aExldHRlcnNJZ24KICAgICByZXR1cm4gc3RhcnRzV2l0aExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZUNvbW1vbldpdGhvdXRMZW5ndGgoc3RyaW5nLCBwb2ludGVy
KTsKIH0KIAoraW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBjaGFyKiBh
LCBjb25zdCBjaGFyKiBiKQoreworICAgIGF1dG8gbGVuZ3RoID0gc3RybGVuKGEpOworICAgIHJl
dHVybiBsZW5ndGggPT0gc3RybGVuKGIpICYmIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYSwgYiwg
bGVuZ3RoKTsKK30KKwordGVtcGxhdGU8dW5zaWduZWQgbG93ZXJjYXNlTGV0dGVyc0xlbmd0aD4g
aW5saW5lIGJvb2wgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgY2hhciogc3Ry
aW5nLCBjb25zdCBjaGFyICgmbG93ZXJjYXNlTGV0dGVycylbbG93ZXJjYXNlTGV0dGVyc0xlbmd0
aF0pCit7CisgICAgYXV0byBsZW5ndGggPSBzdHJsZW4obG93ZXJjYXNlTGV0dGVycyk7CisgICAg
cmV0dXJuIHN0cmxlbihzdHJpbmcpID09IGxlbmd0aCAmJiBlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShzdHJpbmcsIGxvd2VyY2FzZUxldHRlcnMsIGxlbmd0aCk7Cit9CisKIH0KIAogdXNp
bmcgV1RGOjplcXVhbElnbm9yaW5nQVNDSUlDYXNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvdGV4dC9UZXh0U3RyZWFtLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvVGV4dFN0cmVhbS5j
cHAKaW5kZXggYzJmMmVmMjc1Njg4ZWM0YmZlZDMzZDNhYTllYmNhOTM1NTZiNTZjMy4uYWFmNjE5
NGFiZmU1OGU1YTM0YTAwZmNkODEwZjlmMzk3NmM4YjI0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvdGV4dC9UZXh0U3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1RleHRT
dHJlYW0uY3BwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogCiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwIGIvU291cmNlL1dURi93
dGYvdGV4dC9XVEZTdHJpbmcuY3BwCmluZGV4IDcwODUyNmFhOWE2ZGY4ODI1ODBlZDE3Yjg4NDE2
ZTNiNzMyZWE0OGMuLjcyNzMzZmVhYTUwZDA3ZjNlNTkxZTI3MWQ1Yzg3OWRlZTBhZDI4YjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9kdG9hLmg+CiAjaW5jbHVkZSA8
d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L3VuaWNvZGUvaWN1L0NvbGxhdG9ySUNVLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvaWN1
L0NvbGxhdG9ySUNVLmNwcAppbmRleCAyNmE0ZDgzODZhYmZmYTkwNWRlMWFlODE4ODdlMzU1YzIy
OTRiNDk5Li5mNWUzMmExYmZmM2Y5N2E5NmMxNTRjMjFkNzY2ZGFhZDQzYjU3ZGU1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL2ljdS9Db2xsYXRvcklDVS5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvdW5pY29kZS9pY3UvQ29sbGF0b3JJQ1UuY3BwCkBAIC0zNiw3ICszNiw2IEBA
CiAjaW5jbHVkZSA8bXV0ZXg+CiAjaW5jbHVkZSA8dW5pY29kZS91Y29sLmg+CiAjaW5jbHVkZSA8
d3RmL0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nVmlldy5oPgogCiAjaWYgT1MoREFSV0lOKSAmJiBVU0UoQ0YpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5jcHAKaW5kZXggZmE5OGRkODBlNGEyNmRl
NGNhMTc3OGYzZjU0MGUyMWJhMzQwN2VhOC4uYTM1YmFhZjFiODU3ZjExYmRkNzA4Mzc4MjI0NjVm
MTlmZmRkYzBhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRj
aEJvZHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmNw
cApAQCAtMTU3LDYgKzE1Nyw3IEBAIHZvaWQgRmV0Y2hCb2R5Ojpjb25zdW1lKEZldGNoQm9keU93
bmVyJiBvd25lciwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQogfQogCiAjaWYgRU5B
QkxFKFNUUkVBTVNfQVBJKQorCiB2b2lkIEZldGNoQm9keTo6Y29uc3VtZUFzU3RyZWFtKEZldGNo
Qm9keU93bmVyJiBvd25lciwgRmV0Y2hCb2R5U291cmNlJiBzb3VyY2UpCiB7CiAgICAgYm9vbCBj
bG9zZVN0cmVhbSA9IGZhbHNlOwpAQCAtMTY3LDEyICsxNjgsMTIgQEAgdm9pZCBGZXRjaEJvZHk6
OmNvbnN1bWVBc1N0cmVhbShGZXRjaEJvZHlPd25lciYgb3duZXIsIEZldGNoQm9keVNvdXJjZSYg
c291cmNlKQogICAgICAgICBjbG9zZVN0cmVhbSA9IHNvdXJjZS5lbnF1ZXVlKEFycmF5QnVmZmVy
Ojp0cnlDcmVhdGUoYXJyYXlCdWZmZXJWaWV3Qm9keSgpLmJhc2VBZGRyZXNzKCksIGFycmF5QnVm
ZmVyVmlld0JvZHkoKS5ieXRlTGVuZ3RoKCkpKTsKICAgICAgICAgbV9kYXRhID0gbnVsbHB0cjsK
ICAgICB9IGVsc2UgaWYgKGlzVGV4dCgpKSB7Ci0gICAgICAgIGF1dG8gZGF0YSA9IFVURjhFbmNv
ZGluZygpLmVuY29kZSh0ZXh0Qm9keSgpLCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7Ci0gICAg
ICAgIGNsb3NlU3RyZWFtID0gc291cmNlLmVucXVldWUoQXJyYXlCdWZmZXI6OnRyeUNyZWF0ZShk
YXRhLmRhdGEoKSwgZGF0YS5sZW5ndGgoKSkpOworICAgICAgICBhdXRvIGRhdGEgPSBVVEY4RW5j
b2RpbmcoKS5lbmNvZGUodGV4dEJvZHkoKSwgVW5lbmNvZGFibGVIYW5kbGluZzo6RW50aXRpZXMp
OworICAgICAgICBjbG9zZVN0cmVhbSA9IHNvdXJjZS5lbnF1ZXVlKEFycmF5QnVmZmVyOjp0cnlD
cmVhdGUoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKSk7CiAgICAgICAgIG1fZGF0YSA9IG51bGxw
dHI7CiAgICAgfSBlbHNlIGlmIChpc1VSTFNlYXJjaFBhcmFtcygpKSB7Ci0gICAgICAgIGF1dG8g
ZGF0YSA9IFVURjhFbmNvZGluZygpLmVuY29kZSh1cmxTZWFyY2hQYXJhbXNCb2R5KCkudG9TdHJp
bmcoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwotICAgICAgICBjbG9zZVN0cmVhbSA9IHNv
dXJjZS5lbnF1ZXVlKEFycmF5QnVmZmVyOjp0cnlDcmVhdGUoZGF0YS5kYXRhKCksIGRhdGEubGVu
Z3RoKCkpKTsKKyAgICAgICAgYXV0byBkYXRhID0gVVRGOEVuY29kaW5nKCkuZW5jb2RlKHVybFNl
YXJjaFBhcmFtc0JvZHkoKS50b1N0cmluZygpLCBVbmVuY29kYWJsZUhhbmRsaW5nOjpFbnRpdGll
cyk7CisgICAgICAgIGNsb3NlU3RyZWFtID0gc291cmNlLmVucXVldWUoQXJyYXlCdWZmZXI6OnRy
eUNyZWF0ZShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpKTsKICAgICAgICAgbV9kYXRhID0gbnVs
bHB0cjsKICAgICB9IGVsc2UgaWYgKGlzQmxvYigpKSB7CiAgICAgICAgIG93bmVyLmxvYWRCbG9i
KGJsb2JCb2R5KCksIG51bGxwdHIpOwpAQCAtMTg3LDYgKzE4OCw3IEBAIHZvaWQgRmV0Y2hCb2R5
Ojpjb25zdW1lQXNTdHJlYW0oRmV0Y2hCb2R5T3duZXImIG93bmVyLCBGZXRjaEJvZHlTb3VyY2Um
IHNvdXJjZSkKICAgICBpZiAoY2xvc2VTdHJlYW0pCiAgICAgICAgIHNvdXJjZS5jbG9zZSgpOwog
fQorCiAjZW5kaWYKIAogdm9pZCBGZXRjaEJvZHk6OmNvbnN1bWVBcnJheUJ1ZmZlcihSZWY8RGVm
ZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCkBAIC0yMDMsOCArMjA1LDggQEAgdm9pZCBGZXRjaEJv
ZHk6OmNvbnN1bWVBcnJheUJ1ZmZlclZpZXcoUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNl
KQogCiB2b2lkIEZldGNoQm9keTo6Y29uc3VtZVRleHQoUmVmPERlZmVycmVkUHJvbWlzZT4mJiBw
cm9taXNlLCBjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgYXV0byBkYXRhID0gVVRGOEVuY29k
aW5nKCkuZW5jb2RlKHRleHQsIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKLSAgICBtX2NvbnN1
bWVyLnJlc29sdmVXaXRoRGF0YShXVEZNb3ZlKHByb21pc2UpLCByZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEoKSksIGRhdGEubGVuZ3RoKCkpOworICAgIGF1dG8gZGF0
YSA9IFVURjhFbmNvZGluZygpLmVuY29kZSh0ZXh0LCBVbmVuY29kYWJsZUhhbmRsaW5nOjpFbnRp
dGllcyk7CisgICAgbV9jb25zdW1lci5yZXNvbHZlV2l0aERhdGEoV1RGTW92ZShwcm9taXNlKSwg
ZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKICAgICBtX2RhdGEgPSBudWxscHRyOwogfQogCkBA
IC0yMjgsOSArMjMwLDkgQEAgdm9pZCBGZXRjaEJvZHk6OmxvYWRpbmdTdWNjZWVkZWQoKQogUmVm
UHRyPEZvcm1EYXRhPiBGZXRjaEJvZHk6OmJvZHlBc0Zvcm1EYXRhKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgaWYgKGlzVGV4dCgpKQotICAgICAgICByZXR1
cm4gRm9ybURhdGE6OmNyZWF0ZShVVEY4RW5jb2RpbmcoKS5lbmNvZGUodGV4dEJvZHkoKSwgRW50
aXRpZXNGb3JVbmVuY29kYWJsZXMpKTsKKyAgICAgICAgcmV0dXJuIEZvcm1EYXRhOjpjcmVhdGUo
VVRGOEVuY29kaW5nKCkuZW5jb2RlKHRleHRCb2R5KCksIFVuZW5jb2RhYmxlSGFuZGxpbmc6OkVu
dGl0aWVzKSk7CiAgICAgaWYgKGlzVVJMU2VhcmNoUGFyYW1zKCkpCi0gICAgICAgIHJldHVybiBG
b3JtRGF0YTo6Y3JlYXRlKFVURjhFbmNvZGluZygpLmVuY29kZSh1cmxTZWFyY2hQYXJhbXNCb2R5
KCkudG9TdHJpbmcoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpKTsKKyAgICAgICAgcmV0dXJu
IEZvcm1EYXRhOjpjcmVhdGUoVVRGOEVuY29kaW5nKCkuZW5jb2RlKHVybFNlYXJjaFBhcmFtc0Jv
ZHkoKS50b1N0cmluZygpLCBVbmVuY29kYWJsZUhhbmRsaW5nOjpFbnRpdGllcykpOwogICAgIGlm
IChpc0Jsb2IoKSkgewogICAgICAgICBSZWZQdHI8Rm9ybURhdGE+IGJvZHkgPSBGb3JtRGF0YTo6
Y3JlYXRlKCk7CiAgICAgICAgIGJvZHktPmFwcGVuZEJsb2IoYmxvYkJvZHkoKS51cmwoKSk7CkBA
IC0yNzEsMTUgKzI3MywxMCBAQCBGZXRjaEJvZHk6OlRha2VuRGF0YSBGZXRjaEJvZHk6OnRha2Uo
KQogICAgIGlmIChpc0Zvcm1EYXRhKCkpCiAgICAgICAgIHJldHVybiBmb3JtRGF0YUJvZHkoKTsK
IAotICAgIGlmIChpc1RleHQoKSkgewotICAgICAgICBhdXRvIGRhdGEgPSBVVEY4RW5jb2Rpbmco
KS5lbmNvZGUodGV4dEJvZHkoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwotICAgICAgICBy
ZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZGF0YS5kYXRhKCksIGRhdGEubGVuZ3RoKCkpOwot
ICAgIH0KLQotICAgIGlmIChpc1VSTFNlYXJjaFBhcmFtcygpKSB7Ci0gICAgICAgIGF1dG8gZGF0
YSA9IFVURjhFbmNvZGluZygpLmVuY29kZSh1cmxTZWFyY2hQYXJhbXNCb2R5KCkudG9TdHJpbmco
KSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwotICAgICAgICByZXR1cm4gU2hhcmVkQnVmZmVy
OjpjcmVhdGUoZGF0YS5kYXRhKCksIGRhdGEubGVuZ3RoKCkpOwotICAgIH0KKyAgICBpZiAoaXNU
ZXh0KCkpCisgICAgICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShVVEY4RW5jb2Rpbmco
KS5lbmNvZGUodGV4dEJvZHkoKSwgVW5lbmNvZGFibGVIYW5kbGluZzo6RW50aXRpZXMpKTsKKyAg
ICBpZiAoaXNVUkxTZWFyY2hQYXJhbXMoKSkKKyAgICAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6
Y3JlYXRlKFVURjhFbmNvZGluZygpLmVuY29kZSh1cmxTZWFyY2hQYXJhbXNCb2R5KCkudG9TdHJp
bmcoKSwgVW5lbmNvZGFibGVIYW5kbGluZzo6RW50aXRpZXMpKTsKIAogICAgIGlmIChpc0FycmF5
QnVmZmVyKCkpCiAgICAgICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShyZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPihhcnJheUJ1ZmZlckJvZHkoKS5kYXRhKCkpLCBhcnJheUJ1ZmZl
ckJvZHkoKS5ieXRlTGVuZ3RoKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRlci5jcHAKaW5kZXggZTViMmUzNjM4YTAwODQ1
Mjc5N2JjZjMwOGJiZDk3YTlmODM0YWE2ZC4uN2QzOTcxZDU3OTZiYmRjYzQ2ODllYTJlOTliYjE0
YTU4ZmMwOGRiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRz
L1dlYlNvY2tldERlZmxhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNv
Y2tldHMvV2ViU29ja2V0RGVmbGF0ZXIuY3BwCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSA8
d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogI2luY2x1ZGUgPHpsaWIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9QQUwu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1BBTC9QQUwueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjZTRhNjQzY2QxZDQ2MzJkMGQ4ZTU2NzhiNDE4OGQx
MDA3ZDgxMjhmLi5kODgzZmNlYTcxN2ZhMmY5YmRmOWMxMDIyYmM1Yjc4MWI5ZGZjOTFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0yNTUsNiArMjU1LDcgQEAKIAkJMUM2N0NFQTExRTMyRURBODAwRjgwRjJFIC8qIEZlYXR1cmVE
ZWZpbmVzLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEZlYXR1cmVE
ZWZpbmVzLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzY3Q0VBMjFF
MzJFRTI2MDBGODBGMkUgLyogVmVyc2lvbi54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25m
aWc7IHBhdGggPSBWZXJzaW9uLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3QTE2NTY0MzFGOTdCMkI4MDBCQTNDRTQgLyogTlNLZXllZEFyY2hpdmVyU1BJLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5TS2V5ZWRBcmNoaXZlclNQSS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk5M0U1OTA5QzFGOTNCRjFFMDA2N0Y4Q0YgLyogVW5lbmNv
ZGFibGVIYW5kbGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmVuY29kYWJsZUhhbmRsaW5nLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExMDI2NTg2MUY1Njc0NjEwMEI0Qzg0NCAvKiBG
b3VuZGF0aW9uU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvdW5kYXRp
b25TUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTEwMjY1ODgxRjU2NzQ3QTAw
QjRDODQ0IC8qIEhJVG9vbGJveFNQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBISVRvb2xib3hTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTEwMjY1OEEx
RjU2NzQ4QzAwQjRDODQ0IC8qIFF1aWNrRHJhd1NQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBRdWlja0RyYXdTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTU0Myw2ICs1NDQsNyBAQAogCQkJCUEzMEQ0MTIzMUYwREQxMDUwMEI3MTk1NCAvKiBtYWMgKi8s
CiAJCQkJQTMwRDQxMUYxRjBERDBFQTAwQjcxOTU0IC8qIEtpbGxSaW5nLmNwcCAqLywKIAkJCQlB
MzBENDExRTFGMEREMEVBMDBCNzE5NTQgLyogS2lsbFJpbmcuaCAqLywKKwkJCQk5M0U1OTA5QzFG
OTNCRjFFMDA2N0Y4Q0YgLyogVW5lbmNvZGFibGVIYW5kbGluZy5oICovLAogCQkJKTsKIAkJCXBh
dGggPSB0ZXh0OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9VbmVuY29kYWJsZUhhbmRsaW5nLmggYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL3RleHQvVW5lbmNvZGFibGVIYW5kbGluZy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZhMWI1
ZTg3NDFiMWU3MzBiMzY4OWZiZDE1N2RjOGYxNmQ1OTJlNzEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvVW5lbmNvZGFibGVIYW5kbGluZy5oCkBAIC0wLDAg
KzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFNwZWNpZmllcyB3
aGF0IHdpbGwgaGFwcGVuIHdoZW4gYSBjaGFyYWN0ZXIgaXMgZW5jb3VudGVyZWQgdGhhdCBpcwor
Ly8gbm90IGVuY29kYWJsZSBpbiB0aGUgY2hhcmFjdGVyIHNldC4KK2VudW0gY2xhc3MgVW5lbmNv
ZGFibGVIYW5kbGluZyB7CisgICAgLy8gU3Vic3RpdHV0ZXMgdGhlIHJlcGxhY2VtZW50IGNoYXJh
Y3RlciAiPyIuCisgICAgUXVlc3Rpb25NYXJrcywKKworICAgIC8vIEVuY29kZXMgdGhlIGNoYXJh
Y3RlciBhcyBhbiBYTUwgZW50aXR5LiBGb3IgZXhhbXBsZSwgVSswNkRFCisgICAgLy8gd291bGQg
YmUgIiYjMTc1ODsiICgweDZERSA9IDE3NTggaW4gb2N0YWwpLgorICAgIEVudGl0aWVzLAorCisg
ICAgLy8gRW5jb2RlcyB0aGUgY2hhcmFjdGVyIGFzIGVuIGVudGl0eSBhcyBhYm92ZSwgYnV0IGVz
Y2FwZWQKKyAgICAvLyBub24tYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuIFRoaXMgaXMgdXNlZCBp
biBVUkxzLgorICAgIC8vIEZvciBleGFtcGxlLCBVKzZERSB3b3VsZCBiZSAiJTI2JTIzMTc1OCUz
QiIuCisgICAgVVJMRW5jb2RlZEVudGl0aWVzCit9OworCit9CisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9JZGVudGlmaWVyUmVwLmggYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
SWRlbnRpZmllclJlcC5oCmluZGV4IDI0OGVmODkzMTNlNjZjYmRhMzU2OGE0OWFhNGI1NWYzNThm
YjdjZmEuLjM1NDAwZjE3YzMzNjM1N2U2OTVkMTg2YjkxMTFjY2NkYTlkMzQxYjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9JZGVudGlmaWVyUmVwLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvYnJpZGdlL0lkZW50aWZpZXJSZXAuaApAQCAtMjMsMTIgKzIzLDEwIEBACiAgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKICAqLwogCi0jaWZuZGVmIElkZW50aWZpZXJSZXBfaAotI2RlZmluZSBJZGVudGlm
aWVyUmVwX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4K
ICNpbmNsdWRlIDxzdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzAsNCArNjgs
MyBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBJZGVu
dGlmaWVyUmVwX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFu
Y2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAKaW5kZXggOTY5
MmU1YmMxZGRmNTdhZWNiNDEyZWMwMDA0ZTg5NTljMThmYjRlNi4uOGVmMmFhNDY5MmVhY2YxYjA0
YjJmNmNlMDIyMDVlYTBjMTljMzQ1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdl
L2MvY19pbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5j
ZS5jcHAKQEAgLTQ3LDcgKzQ3LDYgQEAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvQmxvYkJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iQnVp
bGRlci5jcHAKaW5kZXggYWY2ZDFlNmRjNjQyZGJiNTFjZWMzMzExMWY5ZDk3MDQ5MzM2MjhjYi4u
NTlhNjMwOGQyMWQ5YmE3ODdjM2IzMzUxNzVhYjdiOWIzZDcyNzVmYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9CbG9iQnVpbGRlci5jcHAKQEAgLTQ5LDE0ICs0OSwxNCBAQCB2b2lkIEJsb2JCdWls
ZGVyOjphcHBlbmQoUmVmUHRyPEFycmF5QnVmZmVyPiYmIGFycmF5QnVmZmVyKQogewogICAgIGlm
ICghYXJyYXlCdWZmZXIpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2FwcGVuZGFibGVEYXRhLmFw
cGVuZChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYXJyYXlCdWZmZXItPmRhdGEoKSksIGFycmF5
QnVmZmVyLT5ieXRlTGVuZ3RoKCkpOworICAgIG1fYXBwZW5kYWJsZURhdGEuYXBwZW5kKHN0YXRp
Y19jYXN0PGNvbnN0IHVpbnQ4X3QqPihhcnJheUJ1ZmZlci0+ZGF0YSgpKSwgYXJyYXlCdWZmZXIt
PmJ5dGVMZW5ndGgoKSk7CiB9CiAKIHZvaWQgQmxvYkJ1aWxkZXI6OmFwcGVuZChSZWZQdHI8QXJy
YXlCdWZmZXJWaWV3PiYmIGFycmF5QnVmZmVyVmlldykKIHsKICAgICBpZiAoIWFycmF5QnVmZmVy
VmlldykKICAgICAgICAgcmV0dXJuOwotICAgIG1fYXBwZW5kYWJsZURhdGEuYXBwZW5kKHN0YXRp
Y19jYXN0PGNvbnN0IGNoYXIqPihhcnJheUJ1ZmZlclZpZXctPmJhc2VBZGRyZXNzKCkpLCBhcnJh
eUJ1ZmZlclZpZXctPmJ5dGVMZW5ndGgoKSk7CisgICAgbV9hcHBlbmRhYmxlRGF0YS5hcHBlbmQo
c3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGFycmF5QnVmZmVyVmlldy0+YmFzZUFkZHJlc3Mo
KSksIGFycmF5QnVmZmVyVmlldy0+Ynl0ZUxlbmd0aCgpKTsKIH0KIAogdm9pZCBCbG9iQnVpbGRl
cjo6YXBwZW5kKFJlZlB0cjxCbG9iPiYmIGJsb2IpCkBAIC03MCwxMyArNzAsMTYgQEAgdm9pZCBC
bG9iQnVpbGRlcjo6YXBwZW5kKFJlZlB0cjxCbG9iPiYmIGJsb2IpCiAKIHZvaWQgQmxvYkJ1aWxk
ZXI6OmFwcGVuZChjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgQ1N0cmluZyB1dGY4VGV4dCA9
IFVURjhFbmNvZGluZygpLmVuY29kZSh0ZXh0LCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7Cisg
ICAgYXV0byBieXRlcyA9IFVURjhFbmNvZGluZygpLmVuY29kZSh0ZXh0LCBVbmVuY29kYWJsZUhh
bmRsaW5nOjpFbnRpdGllcyk7CiAKICAgICBpZiAobV9lbmRpbmdzID09IEJsb2JMaW5lRW5kaW5n
czo6TmF0aXZlKQotICAgICAgICBub3JtYWxpemVBbmRBcHBlbmRMaW5lRW5kaW5nc1RvTmF0aXZl
KHV0ZjhUZXh0LCBtX2FwcGVuZGFibGVEYXRhKTsKKyAgICAgICAgYnl0ZXMgPSBub3JtYWxpemVM
aW5lRW5kaW5nc1RvTmF0aXZlKFdURk1vdmUoYnl0ZXMpKTsKKworICAgIGlmIChtX2FwcGVuZGFi
bGVEYXRhLmlzRW1wdHkoKSkKKyAgICAgICAgbV9hcHBlbmRhYmxlRGF0YSA9IFdURk1vdmUoYnl0
ZXMpOwogICAgIGVsc2UgewotICAgICAgICBBU1NFUlQobV9lbmRpbmdzID09IEJsb2JMaW5lRW5k
aW5nczo6VHJhbnNwYXJlbnQpOwotICAgICAgICBtX2FwcGVuZGFibGVEYXRhLmFwcGVuZCh1dGY4
VGV4dC5kYXRhKCksIHV0ZjhUZXh0Lmxlbmd0aCgpKTsKKyAgICAgICAgLy8gRklYTUU6IFdvdWxk
IGl0IGJlIGJldHRlciB0byBtb3ZlIG11bHRpcGxlIHZlY3RvcnMgaW50byBtX2l0ZW1zIGluc3Rl
YWQgb2YgbWVyZ2luZyB0aGVtIGludG8gb25lPworICAgICAgICBtX2FwcGVuZGFibGVEYXRhLmFw
cGVuZFZlY3RvcihieXRlcyk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcAppbmRleCA4ZDMzZWU2NjNmYjMz
MDcwNGE5ODhhMjExNWMwNDMwY2IxOWUzNmVmLi5iNWNhNDZjMjFmYjZjYTI1Y2I5ODI1Yzc5NWYw
ODg3YjQ0NDUyMGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
TWV0YUNoYXJzZXRQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxNZXRhQ2hhcnNldFBhcnNlci5jcHAKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKKyNpbmNsdWRlICJUZXh0
Q29kZWMuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmdSZWdpc3RyeS5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC0xNTMsNyArMTU0LDggQEAgYm9vbCBIVE1MTWV0YUNoYXJzZXRQYXJzZXI6
OmNoZWNrRm9yTWV0YUNoYXJzZXQoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkKIAog
ICAgIGNvbnN0ZXhwciBpbnQgYnl0ZXNUb0NoZWNrVW5jb25kaXRpb25hbGx5ID0gMTAyNDsKIAot
ICAgIG1faW5wdXQuYXBwZW5kKG1fY29kZWMtPmRlY29kZShkYXRhLCBsZW5ndGgpKTsKKyAgICBi
b29sIGlnbm9yZWRTYXdFcnJvckZsYWc7CisgICAgbV9pbnB1dC5hcHBlbmQobV9jb2RlYy0+ZGVj
b2RlKGRhdGEsIGxlbmd0aCwgZmFsc2UsIGZhbHNlLCBpZ25vcmVkU2F3RXJyb3JGbGFnKSk7CiAK
ICAgICB3aGlsZSAoYXV0byB0b2tlbiA9IG1fdG9rZW5pemVyLm5leHRUb2tlbihtX2lucHV0KSkg
ewogICAgICAgICBib29sIGlzRW5kID0gdG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW46OkVuZFRh
ZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
RE9NQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JE
T01BZ2VudC5jcHAKaW5kZXggZDJjNjM1ZGZlNWEwODM5YTYzYTlkMGM2NzJmZTBmOWE3YmNjNDA5
Ni4uZDNlNGMyMzUwMWU5NDk3OTk4ODk0MWIxMjZlMjQxOTA4YmI4NjVmNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAK
QEAgLTE0MTYsMTAgKzE0MTYsMTAgQEAgc3RhdGljIFN0cmluZyBjb21wdXRlQ29udGVudFNlY3Vy
aXR5UG9saWN5U0hBMjU2SGFzaChjb25zdCBFbGVtZW50JiBlbGVtZW50KQogICAgIC8vIFNlZSA8
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTE4ND4uCiAgICAgVGV4
dEVuY29kaW5nIGRvY3VtZW50RW5jb2RpbmcgPSBlbGVtZW50LmRvY3VtZW50KCkudGV4dEVuY29k
aW5nKCk7CiAgICAgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZ1RvVXNlID0gZG9jdW1lbnRF
bmNvZGluZy5pc1ZhbGlkKCkgPyBkb2N1bWVudEVuY29kaW5nIDogVVRGOEVuY29kaW5nKCk7Ci0g
ICAgQ1N0cmluZyBjb250ZW50ID0gZW5jb2RpbmdUb1VzZS5lbmNvZGUoVGV4dE5vZGVUcmF2ZXJz
YWw6OmNvbnRlbnRzQXNTdHJpbmcoZWxlbWVudCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsK
KyAgICBhdXRvIGNvbnRlbnQgPSBlbmNvZGluZ1RvVXNlLmVuY29kZShUZXh0Tm9kZVRyYXZlcnNh
bDo6Y29udGVudHNBc1N0cmluZyhlbGVtZW50KSwgVW5lbmNvZGFibGVIYW5kbGluZzo6RW50aXRp
ZXMpOwogICAgIGF1dG8gY3J5cHRvRGlnZXN0ID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZShQ
QUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMjU2KTsKLSAgICBjcnlwdG9EaWdlc3Qt
PmFkZEJ5dGVzKGNvbnRlbnQuZGF0YSgpLCBjb250ZW50Lmxlbmd0aCgpKTsKLSAgICBWZWN0b3I8
dWludDhfdD4gZGlnZXN0ID0gY3J5cHRvRGlnZXN0LT5jb21wdXRlSGFzaCgpOworICAgIGNyeXB0
b0RpZ2VzdC0+YWRkQnl0ZXMoY29udGVudC5kYXRhKCksIGNvbnRlbnQuc2l6ZSgpKTsKKyAgICBh
dXRvIGRpZ2VzdCA9IGNyeXB0b0RpZ2VzdC0+Y29tcHV0ZUhhc2goKTsKICAgICByZXR1cm4gbWFr
ZVN0cmluZygic2hhMjU2LSIsIGJhc2U2NEVuY29kZShkaWdlc3QuZGF0YSgpLCBkaWdlc3Quc2l6
ZSgpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUNy
eXB0b2dyYXBoaWNEaWdlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5
cHRvZ3JhcGhpY0RpZ2VzdC5jcHAKaW5kZXggYmFlOTEyYTMyODc5YjhlODljYzNiYjhhZDdjMmE3
NjRmNWRjMjljNi4uMTU4MzIzYWZhNDYwNGM2MGVkNTczZjUxYjkyODc5OWFhMzI2YmVjYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2Vz
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0Rp
Z2VzdC5jcHAKQEAgLTE1NCw3ICsxNTQsNyBAQCBzdGF0aWMgUEFMOjpDcnlwdG9EaWdlc3Q6OkFs
Z29yaXRobSB0b0NyeXB0b0RpZ2VzdEFsZ29yaXRobShSZXNvdXJjZUNyeXB0b2dyYXBoaQogICAg
IHJldHVybiBQQUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfNTEyOwogfQogCi1SZXNv
dXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QgY3J5cHRvZ3JhcGhpY0RpZ2VzdEZvckJ5dGVzKFJlc291
cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3JpdGhtIGFsZ29yaXRobSwgY29uc3QgY2hhciog
Ynl0ZXMsIHNpemVfdCBsZW5ndGgpCitSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QgY3J5cHRv
Z3JhcGhpY0RpZ2VzdEZvckJ5dGVzKFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdDo6QWxnb3Jp
dGhtIGFsZ29yaXRobSwgY29uc3Qgdm9pZCogYnl0ZXMsIHNpemVfdCBsZW5ndGgpCiB7CiAgICAg
YXV0byBjcnlwdG9EaWdlc3QgPSBQQUw6OkNyeXB0b0RpZ2VzdDo6Y3JlYXRlKHRvQ3J5cHRvRGln
ZXN0QWxnb3JpdGhtKGFsZ29yaXRobSkpOwogICAgIGNyeXB0b0RpZ2VzdC0+YWRkQnl0ZXMoYnl0
ZXMsIGxlbmd0aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VD
cnlwdG9ncmFwaGljRGlnZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlw
dG9ncmFwaGljRGlnZXN0LmgKaW5kZXggNjM4YTRhM2YyMTUwZTEwN2E5NjY0M2I0YTQ2YjQzODFj
OGM2ZGViOC4uZTRhODJhZTc0NjU4MTU2Yzc3NmI1N2ZlZjFhOGZkOTdkNDQ5MWJhNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Qu
aApAQCAtNzYsNyArNzYsNyBAQCBzdGQ6Om9wdGlvbmFsPEVuY29kZWRSZXNvdXJjZUNyeXB0b2dy
YXBoaWNEaWdlc3Q+IHBhcnNlRW5jb2RlZENyeXB0b2dyYXBoaWNEaWdlcwogCiBzdGQ6Om9wdGlv
bmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gZGVjb2RlRW5jb2RlZFJlc291cmNlQ3J5
cHRvZ3JhcGhpY0RpZ2VzdChjb25zdCBFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0
Jik7CiAKLVJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCBjcnlwdG9ncmFwaGljRGlnZXN0Rm9y
Qnl0ZXMoUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG0sIGNvbnN0IGNoYXIq
IGJ5dGVzLCBzaXplX3QgbGVuZ3RoKTsKK1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCBjcnlw
dG9ncmFwaGljRGlnZXN0Rm9yQnl0ZXMoUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdv
cml0aG0sIGNvbnN0IHZvaWQqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoKTsKIAogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHAKaW5kZXggNWQwOWMyMzhl
YzBmMjlkZTI0ZWQ2NGM3YzM3ZGIyMTA1ODkxYTlmMS4uYTBmOTMyZTZhOTY5YWVmNTE3ZWEwNGUz
N2MwNzc1OTQ1MzM2YmJmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1RleHRS
ZXNvdXJjZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9UZXh0UmVzb3Vy
Y2VEZWNvZGVyLmNwcApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAxOTk5
IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3
IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKIAogICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTMxLDcg
KzMxLDYgQEAKICNpbmNsdWRlICJUZXh0RW5jb2RpbmdEZXRlY3Rvci5oIgogI2luY2x1ZGUgIlRl
eHRFbmNvZGluZ1JlZ2lzdHJ5LmgiCiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KLSNpbmNs
dWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzIy
LDIwICszMjEsMTggQEAgY29uc3QgVGV4dEVuY29kaW5nJiBUZXh0UmVzb3VyY2VEZWNvZGVyOjpk
ZWZhdWx0RW5jb2RpbmcoQ29udGVudFR5cGUgY29udGVudFR5cGUKICAgICByZXR1cm4gc3BlY2lm
aWVkRGVmYXVsdEVuY29kaW5nOwogfQogCi1UZXh0UmVzb3VyY2VEZWNvZGVyOjpUZXh0UmVzb3Vy
Y2VEZWNvZGVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYgc3Bl
Y2lmaWVkRGVmYXVsdEVuY29kaW5nLCBib29sIHVzZXNFbmNvZGluZ0RldGVjdG9yKQoraW5saW5l
IFRleHRSZXNvdXJjZURlY29kZXI6OlRleHRSZXNvdXJjZURlY29kZXIoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgY29uc3QgVGV4dEVuY29kaW5nJiBzcGVjaWZpZWREZWZhdWx0RW5jb2RpbmcsIGJv
b2wgdXNlc0VuY29kaW5nRGV0ZWN0b3IpCiAgICAgOiBtX2NvbnRlbnRUeXBlKGRldGVybWluZUNv
bnRlbnRUeXBlKG1pbWVUeXBlKSkKICAgICAsIG1fZW5jb2RpbmcoZGVmYXVsdEVuY29kaW5nKG1f
Y29udGVudFR5cGUsIHNwZWNpZmllZERlZmF1bHRFbmNvZGluZykpCi0gICAgLCBtX3NvdXJjZShE
ZWZhdWx0RW5jb2RpbmcpCi0gICAgLCBtX2hpbnRFbmNvZGluZyhudWxscHRyKQotICAgICwgbV9j
aGVja2VkRm9yQk9NKGZhbHNlKQotICAgICwgbV9jaGVja2VkRm9yQ1NTQ2hhcnNldChmYWxzZSkK
LSAgICAsIG1fY2hlY2tlZEZvckhlYWRDaGFyc2V0KGZhbHNlKQotICAgICwgbV91c2VMZW5pZW50
WE1MRGVjb2RpbmcoZmFsc2UpCi0gICAgLCBtX3Nhd0Vycm9yKGZhbHNlKQogICAgICwgbV91c2Vz
RW5jb2RpbmdEZXRlY3Rvcih1c2VzRW5jb2RpbmdEZXRlY3RvcikKIHsKIH0KIAorUmVmPFRleHRS
ZXNvdXJjZURlY29kZXI+IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBjb25zdCBUZXh0RW5jb2RpbmcmIGRlZmF1bHRFbmNvZGluZywgYm9vbCB1c2Vz
RW5jb2RpbmdEZXRlY3RvcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUZXh0UmVzb3Vy
Y2VEZWNvZGVyKG1pbWVUeXBlLCBkZWZhdWx0RW5jb2RpbmcsIHVzZXNFbmNvZGluZ0RldGVjdG9y
KSk7Cit9CisKIFRleHRSZXNvdXJjZURlY29kZXI6On5UZXh0UmVzb3VyY2VEZWNvZGVyKCkgPSBk
ZWZhdWx0OwogCiB2b2lkIFRleHRSZXNvdXJjZURlY29kZXI6OnNldEVuY29kaW5nKGNvbnN0IFRl
eHRFbmNvZGluZyYgZW5jb2RpbmcsIEVuY29kaW5nU291cmNlIHNvdXJjZSkKQEAgLTM0Niw3ICsz
NDMsNyBAQCB2b2lkIFRleHRSZXNvdXJjZURlY29kZXI6OnNldEVuY29kaW5nKGNvbnN0IFRleHRF
bmNvZGluZyYgZW5jb2RpbmcsIEVuY29kaW5nU291cgogCiAgICAgLy8gV2hlbiBlbmNvZGluZyBj
b21lcyBmcm9tIG1ldGEgdGFnIChpLmUuIGl0IGNhbm5vdCBiZSBYTUwgZmlsZXMgc2VudCB2aWEg
WEhSKSwKICAgICAvLyB0cmVhdCB4LXVzZXItZGVmaW5lZCBhcyB3aW5kb3dzLTEyNTIgKGJ1ZyAx
ODI3MCkKLSAgICBpZiAoc291cmNlID09IEVuY29kaW5nRnJvbU1ldGFUYWcgJiYgc3RyY2FzZWNt
cChlbmNvZGluZy5uYW1lKCksICJ4LXVzZXItZGVmaW5lZCIpID09IDApCisgICAgaWYgKHNvdXJj
ZSA9PSBFbmNvZGluZ0Zyb21NZXRhVGFnICYmIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KGVuY29kaW5nLm5hbWUoKSwgIngtdXNlci1kZWZpbmVkIikpCiAgICAgICAgIG1fZW5jb2Rpbmcg
PSAid2luZG93cy0xMjUyIjsKICAgICBlbHNlIGlmIChzb3VyY2UgPT0gRW5jb2RpbmdGcm9tTWV0
YVRhZyB8fCBzb3VyY2UgPT0gRW5jb2RpbmdGcm9tWE1MSGVhZGVyIHx8IHNvdXJjZSA9PSBFbmNv
ZGluZ0Zyb21DU1NDaGFyc2V0KSAgICAgICAgCiAgICAgICAgIG1fZW5jb2RpbmcgPSBlbmNvZGlu
Zy5jbG9zZXN0Qnl0ZUJhc2VkRXF1aXZhbGVudCgpOwpAQCAtNTkzLDM1ICs1OTAsMzMgQEAgdm9p
ZCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpkZXRlY3RKYXBhbmVzZUVuY29kaW5nKGNvbnN0IGNoYXIq
IGRhdGEsIHNpemVfdCBsZW4pCiAvLyAgIGluIHRoZSBmaXJzdCBwbGFjZS4gCiBib29sIFRleHRS
ZXNvdXJjZURlY29kZXI6OnNob3VsZEF1dG9EZXRlY3QoKSBjb25zdAogewotICAgIC8vIEp1c3Qg
Y2hlY2tpbmcgbV9oaW50RW5jb2Rpbmcgc3VmZmljZXMgaGVyZSBiZWNhdXNlIGl0J3Mgb25seSBz
ZXQKLSAgICAvLyBpbiBzZXRIaW50RW5jb2Rpbmcgd2hlbiB0aGUgc291cmNlIGlzIEF1dG9EZXRl
Y3RlZEVuY29kaW5nLgogICAgIHJldHVybiBtX3VzZXNFbmNvZGluZ0RldGVjdG9yCi0gICAgICAg
ICYmIChtX3NvdXJjZSA9PSBEZWZhdWx0RW5jb2RpbmcgfHwgKG1fc291cmNlID09IEVuY29kaW5n
RnJvbVBhcmVudEZyYW1lICYmIG1faGludEVuY29kaW5nKSk7IAorICAgICAgICAmJiAobV9zb3Vy
Y2UgPT0gRGVmYXVsdEVuY29kaW5nIHx8IChtX3NvdXJjZSA9PSBFbmNvZGluZ0Zyb21QYXJlbnRG
cmFtZSAmJiBtX3BhcmVudEZyYW1lQXV0b0RldGVjdGVkRW5jb2RpbmcpKTsKIH0KIAotU3RyaW5n
IFRleHRSZXNvdXJjZURlY29kZXI6OmRlY29kZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVu
KQorU3RyaW5nIFRleHRSZXNvdXJjZURlY29kZXI6OmRlY29kZShjb25zdCBjaGFyKiBkYXRhLCBz
aXplX3QgbGVuZ3RoKQogewogICAgIHNpemVfdCBsZW5ndGhPZkJPTSA9IDA7CiAgICAgaWYgKCFt
X2NoZWNrZWRGb3JCT00pCi0gICAgICAgIGxlbmd0aE9mQk9NID0gY2hlY2tGb3JCT00oZGF0YSwg
bGVuKTsKKyAgICAgICAgbGVuZ3RoT2ZCT00gPSBjaGVja0ZvckJPTShkYXRhLCBsZW5ndGgpOwog
CiAgICAgYm9vbCBtb3ZlZERhdGFUb0J1ZmZlciA9IGZhbHNlOwogCiAgICAgaWYgKG1fY29udGVu
dFR5cGUgPT0gQ1NTICYmICFtX2NoZWNrZWRGb3JDU1NDaGFyc2V0KQotICAgICAgICBpZiAoIWNo
ZWNrRm9yQ1NTQ2hhcnNldChkYXRhLCBsZW4sIG1vdmVkRGF0YVRvQnVmZmVyKSkKKyAgICAgICAg
aWYgKCFjaGVja0ZvckNTU0NoYXJzZXQoZGF0YSwgbGVuZ3RoLCBtb3ZlZERhdGFUb0J1ZmZlcikp
CiAgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAogICAgIGlmICgobV9jb250ZW50
VHlwZSA9PSBIVE1MIHx8IG1fY29udGVudFR5cGUgPT0gWE1MKSAmJiAhbV9jaGVja2VkRm9ySGVh
ZENoYXJzZXQpIC8vIEhUTUwgYW5kIFhNTAotICAgICAgICBpZiAoIWNoZWNrRm9ySGVhZENoYXJz
ZXQoZGF0YSwgbGVuLCBtb3ZlZERhdGFUb0J1ZmZlcikpCisgICAgICAgIGlmICghY2hlY2tGb3JI
ZWFkQ2hhcnNldChkYXRhLCBsZW5ndGgsIG1vdmVkRGF0YVRvQnVmZmVyKSkKICAgICAgICAgICAg
IHJldHVybiBlbXB0eVN0cmluZygpOwogCiAgICAgLy8gRklYTUU6IEl0IGlzIHdyb25nIHRvIGNo
YW5nZSB0aGUgZW5jb2RpbmcgZG93bnN0cmVhbSBhZnRlciB3ZSBoYXZlIGFscmVhZHkgZG9uZSBz
b21lIGRlY29kaW5nLgogICAgIGlmIChzaG91bGRBdXRvRGV0ZWN0KCkpIHsKICAgICAgICAgaWYg
KG1fZW5jb2RpbmcuaXNKYXBhbmVzZSgpKQotICAgICAgICAgICAgZGV0ZWN0SmFwYW5lc2VFbmNv
ZGluZyhkYXRhLCBsZW4pOyAvLyBGSVhNRTogV2Ugc2hvdWxkIHVzZSBkZXRlY3RUZXh0RW5jb2Rp
bmcoKSBmb3IgYWxsIGxhbmd1YWdlcy4KKyAgICAgICAgICAgIGRldGVjdEphcGFuZXNlRW5jb2Rp
bmcoZGF0YSwgbGVuZ3RoKTsgLy8gRklYTUU6IFdlIHNob3VsZCB1c2UgZGV0ZWN0VGV4dEVuY29k
aW5nKCkgZm9yIGFsbCBsYW5ndWFnZXMuCiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgVGV4
dEVuY29kaW5nIGRldGVjdGVkRW5jb2Rpbmc7Ci0gICAgICAgICAgICBpZiAoZGV0ZWN0VGV4dEVu
Y29kaW5nKGRhdGEsIGxlbiwgbV9oaW50RW5jb2RpbmcsICZkZXRlY3RlZEVuY29kaW5nKSkKKyAg
ICAgICAgICAgIGlmIChkZXRlY3RUZXh0RW5jb2RpbmcoZGF0YSwgbGVuZ3RoLCBtX3BhcmVudEZy
YW1lQXV0b0RldGVjdGVkRW5jb2RpbmcsICZkZXRlY3RlZEVuY29kaW5nKSkKICAgICAgICAgICAg
ICAgICBzZXRFbmNvZGluZyhkZXRlY3RlZEVuY29kaW5nLCBBdXRvRGV0ZWN0ZWRFbmNvZGluZyk7
CiAgICAgICAgIH0KICAgICB9CkBAIC02MzIsMTIgKzYyNywxMiBAQCBTdHJpbmcgVGV4dFJlc291
cmNlRGVjb2Rlcjo6ZGVjb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW4pCiAgICAgICAg
IG1fY29kZWMgPSBuZXdUZXh0Q29kZWMobV9lbmNvZGluZyk7CiAKICAgICBpZiAobV9idWZmZXIu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV9jb2RlYy0+ZGVjb2RlKGRhdGEgKyBsZW5ndGhP
ZkJPTSwgbGVuIC0gbGVuZ3RoT2ZCT00sIGZhbHNlLCBtX2NvbnRlbnRUeXBlID09IFhNTCwgbV9z
YXdFcnJvcik7CisgICAgICAgIHJldHVybiBtX2NvZGVjLT5kZWNvZGUoZGF0YSArIGxlbmd0aE9m
Qk9NLCBsZW5ndGggLSBsZW5ndGhPZkJPTSwgZmFsc2UsIG1fY29udGVudFR5cGUgPT0gWE1MLCBt
X3Nhd0Vycm9yKTsKIAogICAgIGlmICghbW92ZWREYXRhVG9CdWZmZXIpIHsKICAgICAgICAgc2l6
ZV90IG9sZFNpemUgPSBtX2J1ZmZlci5zaXplKCk7Ci0gICAgICAgIG1fYnVmZmVyLmdyb3cob2xk
U2l6ZSArIGxlbik7Ci0gICAgICAgIG1lbWNweShtX2J1ZmZlci5kYXRhKCkgKyBvbGRTaXplLCBk
YXRhLCBsZW4pOworICAgICAgICBtX2J1ZmZlci5ncm93KG9sZFNpemUgKyBsZW5ndGgpOworICAg
ICAgICBtZW1jcHkobV9idWZmZXIuZGF0YSgpICsgb2xkU2l6ZSwgZGF0YSwgbGVuZ3RoKTsKICAg
ICB9CiAKICAgICBTdHJpbmcgcmVzdWx0ID0gbV9jb2RlYy0+ZGVjb2RlKG1fYnVmZmVyLmRhdGEo
KSArIGxlbmd0aE9mQk9NLCBtX2J1ZmZlci5zaXplKCkgLSBsZW5ndGhPZkJPTSwgZmFsc2UsIG1f
Y29udGVudFR5cGUgPT0gWE1MICYmICFtX3VzZUxlbmllbnRYTUxEZWNvZGluZywgbV9zYXdFcnJv
cik7CkBAIC02NDcsMTUgKzY0MiwxNCBAQCBTdHJpbmcgVGV4dFJlc291cmNlRGVjb2Rlcjo6ZGVj
b2RlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW4pCiAKIFN0cmluZyBUZXh0UmVzb3VyY2VE
ZWNvZGVyOjpmbHVzaCgpCiB7Ci0gICAvLyBJZiB3ZSBjYW4gbm90IGlkZW50aWZ5IHRoZSBlbmNv
ZGluZyBldmVuIGFmdGVyIGEgZG9jdW1lbnQgaXMgY29tcGxldGVseQotICAgLy8gbG9hZGVkLCB3
ZSBuZWVkIHRvIGRldGVjdCB0aGUgZW5jb2RpbmcgaWYgb3RoZXIgY29uZGl0aW9ucyBmb3IKLSAg
IC8vIGF1dG9kZXRlY3Rpb24gaXMgc2F0aXNmaWVkLgorICAgIC8vIElmIHdlIGNhbiBub3QgaWRl
bnRpZnkgdGhlIGVuY29kaW5nIGV2ZW4gYWZ0ZXIgYSBkb2N1bWVudCBpcyBjb21wbGV0ZWx5Cisg
ICAgLy8gbG9hZGVkLCB3ZSBuZWVkIHRvIGRldGVjdCB0aGUgZW5jb2RpbmcgaWYgb3RoZXIgY29u
ZGl0aW9ucyBmb3IKKyAgICAvLyBhdXRvZGV0ZWN0aW9uIGlzIHNhdGlzZmllZC4KICAgICBpZiAo
bV9idWZmZXIuc2l6ZSgpICYmIHNob3VsZEF1dG9EZXRlY3QoKQogICAgICAgICAmJiAoKCFtX2No
ZWNrZWRGb3JIZWFkQ2hhcnNldCAmJiAobV9jb250ZW50VHlwZSA9PSBIVE1MIHx8IG1fY29udGVu
dFR5cGUgPT0gWE1MKSkgfHwgKCFtX2NoZWNrZWRGb3JDU1NDaGFyc2V0ICYmIChtX2NvbnRlbnRU
eXBlID09IENTUykpKSkgewotICAgICAgICAgVGV4dEVuY29kaW5nIGRldGVjdGVkRW5jb2Rpbmc7
Ci0gICAgICAgICBpZiAoZGV0ZWN0VGV4dEVuY29kaW5nKG1fYnVmZmVyLmRhdGEoKSwgbV9idWZm
ZXIuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2hpbnRFbmNvZGlu
ZywgJmRldGVjdGVkRW5jb2RpbmcpKQotICAgICAgICAgICAgIHNldEVuY29kaW5nKGRldGVjdGVk
RW5jb2RpbmcsIEF1dG9EZXRlY3RlZEVuY29kaW5nKTsKKyAgICAgICAgVGV4dEVuY29kaW5nIGRl
dGVjdGVkRW5jb2Rpbmc7CisgICAgICAgIGlmIChkZXRlY3RUZXh0RW5jb2RpbmcobV9idWZmZXIu
ZGF0YSgpLCBtX2J1ZmZlci5zaXplKCksIG1fcGFyZW50RnJhbWVBdXRvRGV0ZWN0ZWRFbmNvZGlu
ZywgJmRldGVjdGVkRW5jb2RpbmcpKQorICAgICAgICAgICAgc2V0RW5jb2RpbmcoZGV0ZWN0ZWRF
bmNvZGluZywgQXV0b0RldGVjdGVkRW5jb2RpbmcpOwogICAgIH0KIAogICAgIGlmICghbV9jb2Rl
YykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5oCmluZGV4IDk4
ZWM5MjU3YWFkMGUzOWJjOTBkOWJkYjBiNzA0OTQ4MmEzZTgzYWQuLjFkZTIyNTIxY2YwZjRjZjEz
ZmRkNTIxYTNiOTZkZmMyNjkxZDE3NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9UZXh0UmVzb3VyY2VEZWNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1RleHRS
ZXNvdXJjZURlY29kZXIuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAx
OTk5IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCiAgICAgQ29weXJpZ2h0IChDKSAy
MDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKLSAgICBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgIENvcHlyaWdo
dCAoQykgMjAwNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMjgsNiArMjgsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBIVE1MTWV0YUNoYXJzZXRQYXJzZXI7CitjbGFzcyBUZXh0Q29kZWM7CiAKIGNsYXNzIFRleHRS
ZXNvdXJjZURlY29kZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxUZXh0UmVzb3VyY2VEZWNvZGVyPiB7
CiBwdWJsaWM6CkBAIC00MiwzNSArNDMsMjYgQEAgcHVibGljOgogICAgICAgICBFbmNvZGluZ0Zy
b21QYXJlbnRGcmFtZQogICAgIH07CiAKLSAgICBzdGF0aWMgUmVmPFRleHRSZXNvdXJjZURlY29k
ZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBUZXh0RW5jb2RpbmcmIGRl
ZmF1bHRFbmNvZGluZyA9IFRleHRFbmNvZGluZygpLCBib29sIHVzZXNFbmNvZGluZ0RldGVjdG9y
ID0gZmFsc2UpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUZXh0UmVzb3Vy
Y2VEZWNvZGVyKG1pbWVUeXBlLCBkZWZhdWx0RW5jb2RpbmcsIHVzZXNFbmNvZGluZ0RldGVjdG9y
KSk7Ci0gICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8VGV4dFJlc291cmNlRGVj
b2Rlcj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYg
ZGVmYXVsdEVuY29kaW5nID0geyB9LCBib29sIHVzZXNFbmNvZGluZ0RldGVjdG9yID0gZmFsc2Up
OwogICAgIFdFQkNPUkVfRVhQT1JUIH5UZXh0UmVzb3VyY2VEZWNvZGVyKCk7CiAKICAgICB2b2lk
IHNldEVuY29kaW5nKGNvbnN0IFRleHRFbmNvZGluZyYsIEVuY29kaW5nU291cmNlKTsKICAgICBj
b25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGluZzsg
fQogCi0gICAgYm9vbCBoYXNFcXVhbEVuY29kaW5nRm9yQ2hhcnNldChjb25zdCBTdHJpbmcmKSBj
b25zdDsKKyAgICBib29sIGhhc0VxdWFsRW5jb2RpbmdGb3JDaGFyc2V0KGNvbnN0IFN0cmluZyYg
Y2hhcnNldCkgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgZGVjb2RlKGNvbnN0
IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpOwogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBm
bHVzaCgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGRlY29kZUFuZEZsdXNoKGNvbnN0
IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpOwogCi0gICAgdm9pZCBzZXRIaW50RW5jb2Rpbmco
Y29uc3QgVGV4dFJlc291cmNlRGVjb2RlciogaGludERlY29kZXIpCi0gICAgewotICAgICAgICAv
LyBoaW50RW5jb2RpbmcgaXMgZm9yIHVzZSB3aXRoIGF1dG9kZXRlY3Rpb24sIHdoaWNoIHNob3Vs
ZCBiZSAKLSAgICAgICAgLy8gb25seSBpbnZva2VkIHdoZW4gaGludEVuY29kaW5nIGNvbWVzIGZy
b20gYXV0by1kZXRlY3Rpb24uCi0gICAgICAgIGlmIChoaW50RGVjb2RlciAmJiBoaW50RGVjb2Rl
ci0+bV9zb3VyY2UgPT0gQXV0b0RldGVjdGVkRW5jb2RpbmcpCi0gICAgICAgICAgICBtX2hpbnRF
bmNvZGluZyA9IGhpbnREZWNvZGVyLT5lbmNvZGluZygpLm5hbWUoKTsKLSAgICB9CisgICAgdm9p
ZCBzZXRIaW50RW5jb2RpbmcoY29uc3QgVGV4dFJlc291cmNlRGVjb2RlciogcGFyZW50RnJhbWVE
ZWNvZGVyKTsKICAgIAogICAgIHZvaWQgdXNlTGVuaWVudFhNTERlY29kaW5nKCkgeyBtX3VzZUxl
bmllbnRYTUxEZWNvZGluZyA9IHRydWU7IH0KICAgICBib29sIHNhd0Vycm9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9zYXdFcnJvcjsgfQogCiBwcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFRleHRS
ZXNvdXJjZURlY29kZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVGV4dEVuY29kaW5n
JiBkZWZhdWx0RW5jb2RpbmcsIGJvb2wgdXNlc0VuY29kaW5nRGV0ZWN0b3IpOworICAgIFRleHRS
ZXNvdXJjZURlY29kZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVGV4dEVuY29kaW5n
JiBkZWZhdWx0RW5jb2RpbmcsIGJvb2wgdXNlc0VuY29kaW5nRGV0ZWN0b3IpOwogCiAgICAgZW51
bSBDb250ZW50VHlwZSB7IFBsYWluVGV4dCwgSFRNTCwgWE1MLCBDU1MgfTsgLy8gUGxhaW5UZXh0
IG9ubHkgY2hlY2tzIGZvciBCT00uCiAgICAgc3RhdGljIENvbnRlbnRUeXBlIGRldGVybWluZUNv
bnRlbnRUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwpAQCAtODYsMTcgKzc4LDIyIEBAIHBy
aXZhdGU6CiAgICAgQ29udGVudFR5cGUgbV9jb250ZW50VHlwZTsKICAgICBUZXh0RW5jb2Rpbmcg
bV9lbmNvZGluZzsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dENvZGVjPiBtX2NvZGVjOwotICAg
IEVuY29kaW5nU291cmNlIG1fc291cmNlOwotICAgIGNvbnN0IGNoYXIqIG1faGludEVuY29kaW5n
OwotICAgIFZlY3RvcjxjaGFyPiBtX2J1ZmZlcjsKLSAgICBib29sIG1fY2hlY2tlZEZvckJPTTsK
LSAgICBib29sIG1fY2hlY2tlZEZvckNTU0NoYXJzZXQ7Ci0gICAgYm9vbCBtX2NoZWNrZWRGb3JI
ZWFkQ2hhcnNldDsKLSAgICBib29sIG1fdXNlTGVuaWVudFhNTERlY29kaW5nOyAvLyBEb24ndCBz
dG9wIG9uIFhNTCBkZWNvZGluZyBlcnJvcnMuCi0gICAgYm9vbCBtX3Nhd0Vycm9yOwotICAgIGJv
b2wgbV91c2VzRW5jb2RpbmdEZXRlY3RvcjsKLQogICAgIHN0ZDo6dW5pcXVlX3B0cjxIVE1MTWV0
YUNoYXJzZXRQYXJzZXI+IG1fY2hhcnNldFBhcnNlcjsKKyAgICBFbmNvZGluZ1NvdXJjZSBtX3Nv
dXJjZSB7IERlZmF1bHRFbmNvZGluZyB9OworICAgIGNvbnN0IGNoYXIqIG1fcGFyZW50RnJhbWVB
dXRvRGV0ZWN0ZWRFbmNvZGluZyB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8Y2hhcj4gbV9idWZm
ZXI7CisgICAgYm9vbCBtX2NoZWNrZWRGb3JCT00geyBmYWxzZSB9OworICAgIGJvb2wgbV9jaGVj
a2VkRm9yQ1NTQ2hhcnNldCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2NoZWNrZWRGb3JIZWFkQ2hh
cnNldCB7IGZhbHNlIH07CisgICAgYm9vbCBtX3VzZUxlbmllbnRYTUxEZWNvZGluZyB7IGZhbHNl
IH07IC8vIERvbid0IHN0b3Agb24gWE1MIGRlY29kaW5nIGVycm9ycy4KKyAgICBib29sIG1fc2F3
RXJyb3IgeyBmYWxzZSB9OworICAgIGJvb2wgbV91c2VzRW5jb2RpbmdEZXRlY3RvciB7IGZhbHNl
IH07CiB9OwogCitpbmxpbmUgdm9pZCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpzZXRIaW50RW5jb2Rp
bmcoY29uc3QgVGV4dFJlc291cmNlRGVjb2RlciogcGFyZW50RnJhbWVEZWNvZGVyKQoreworICAg
IGlmIChwYXJlbnRGcmFtZURlY29kZXIgJiYgcGFyZW50RnJhbWVEZWNvZGVyLT5tX3NvdXJjZSA9
PSBBdXRvRGV0ZWN0ZWRFbmNvZGluZykKKyAgICAgICAgbV9wYXJlbnRGcmFtZUF1dG9EZXRlY3Rl
ZEVuY29kaW5nID0gcGFyZW50RnJhbWVEZWNvZGVyLT5lbmNvZGluZygpLm5hbWUoKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKaW5kZXggMTUzZTg4NDAy
MWJkNzgzMjg1ODg2ZmE3MmZjODJjNGU1NDYxMjY3NS4uOWMxY2MzODBhMTFhYzZkMzgxNGY3MzQx
MmJhMDE0ODEwZjAwYzllNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNh
Y2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCkBAIC0zOCw3ICszOCw2IEBA
CiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5EYXRhLmgiCiAjaW5jbHVkZSAiVVJMLmgiCiAjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvVVVJRC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVHJlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVHJlZS5j
cHAKaW5kZXggMzBkMWRjZGUwNTAyMzYzMjE0ZGY3MGRkY2M1OGFjZjRmOWFiYmEyMC4uMzAzYzUx
YTNiZTk3ZGI1ZjI1NmM1NDhhMmU3OGQ4ZTRmZDAwOGE4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVRyZWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVU
cmVlLmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQ
YWdlR3JvdXAuaCIKICNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZVNlcmlhbGl6ZXIuY3BwCmluZGV4IGVjMTBjZDVmZmYwZmU0ZDVjZjkyYjExZmYzNmVi
NTk3ZDY0ODRkYjcuLjcxZWEyNzBmNTM4ODRkOWYzNWJhODQyYWY2NzI0YjY4ODYxMmJmMjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCkBAIC0xOTksOCArMTk5LDcgQEAg
dm9pZCBQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplRnJhbWUoRnJhbWUqIGZyYW1lKQogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIFN0cmluZyB0ZXh0ID0gYWNjdW11bGF0b3Iuc2VyaWFsaXpl
Tm9kZXMoKmRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSwgSW5jbHVkZU5vZGUpOwotICAgIENT
dHJpbmcgZnJhbWVIVE1MID0gdGV4dEVuY29kaW5nLmVuY29kZSh0ZXh0LCBFbnRpdGllc0ZvclVu
ZW5jb2RhYmxlcyk7Ci0gICAgbV9yZXNvdXJjZXMuYXBwZW5kKHsgdXJsLCBkb2N1bWVudC0+c3Vn
Z2VzdGVkTUlNRVR5cGUoKSwgU2hhcmVkQnVmZmVyOjpjcmVhdGUoZnJhbWVIVE1MLmRhdGEoKSwg
ZnJhbWVIVE1MLmxlbmd0aCgpKSB9KTsKKyAgICBtX3Jlc291cmNlcy5hcHBlbmQoeyB1cmwsIGRv
Y3VtZW50LT5zdWdnZXN0ZWRNSU1FVHlwZSgpLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZSh0ZXh0RW5j
b2RpbmcuZW5jb2RlKHRleHQsIFVuZW5jb2RhYmxlSGFuZGxpbmc6OkVudGl0aWVzKSkgfSk7CiAg
ICAgbV9yZXNvdXJjZVVSTHMuYWRkKHVybCk7CiAKICAgICBmb3IgKGF1dG8mIG5vZGUgOiBub2Rl
cykgewpAQCAtMjY0LDkgKzI2Myw3IEBAIHZvaWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUNT
U1N0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCwgY29uc3QgVVJMCiAgICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgY2hlY2sgd2hldGhlciBhIGNoYXJzZXQgaGFzIGJlZW4gc3Bl
Y2lmaWVkIGFuZCBpZiBub25lIHdhcyBmb3VuZCBhZGQgb25lLgogICAgICAgICBUZXh0RW5jb2Rp
bmcgdGV4dEVuY29kaW5nKHN0eWxlU2hlZXQtPmNvbnRlbnRzKCkuY2hhcnNldCgpKTsKICAgICAg
ICAgQVNTRVJUKHRleHRFbmNvZGluZy5pc1ZhbGlkKCkpOwotICAgICAgICBTdHJpbmcgdGV4dFN0
cmluZyA9IGNzc1RleHQudG9TdHJpbmcoKTsKLSAgICAgICAgQ1N0cmluZyB0ZXh0ID0gdGV4dEVu
Y29kaW5nLmVuY29kZSh0ZXh0U3RyaW5nLCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7Ci0gICAg
ICAgIG1fcmVzb3VyY2VzLmFwcGVuZCh7IHVybCwgQVNDSUlMaXRlcmFsIHsgInRleHQvY3NzIiB9
LCBTaGFyZWRCdWZmZXI6OmNyZWF0ZSh0ZXh0LmRhdGEoKSwgdGV4dC5sZW5ndGgoKSkgfSk7Cisg
ICAgICAgIG1fcmVzb3VyY2VzLmFwcGVuZCh7IHVybCwgQVNDSUlMaXRlcmFsIHsgInRleHQvY3Nz
IiB9LCBTaGFyZWRCdWZmZXI6OmNyZWF0ZSh0ZXh0RW5jb2RpbmcuZW5jb2RlKGNzc1RleHQudG9T
dHJpbmcoKSwgVW5lbmNvZGFibGVIYW5kbGluZzo6RW50aXRpZXMpKSB9KTsKICAgICAgICAgbV9y
ZXNvdXJjZVVSTHMuYWRkKHVybCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKaW5kZXggYTQ2NDg5MDc0MmNhNzM3OWI3
YWZlZjQ0NDNmZDFiMWU5NzVmODU1Mi4uMjNjM2YyN2MzNmY2MmE2MjUzMzEwNDBlYmZhZTEwNDVi
ZDlkMDc2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3Vy
aXR5UG9saWN5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJp
dHlQb2xpY3kuY3BwCkBAIC0zMzIsMTEgKzMzMiwxMSBAQCBDb250ZW50U2VjdXJpdHlQb2xpY3k6
Okhhc2hJbkVuZm9yY2VkQW5kUmVwb3J0T25seVBvbGljaWVzUGFpciBDb250ZW50U2VjdXJpdHlQ
bwogCiAgICAgLy8gRklYTUU6IENvbXB1dGUgdGhlIGRpZ2VzdCB3aXRoIHJlc3BlY3QgdG8gdGhl
IHJhdyBieXRlcyByZWNlaXZlZCBmcm9tIHRoZSBwYWdlLgogICAgIC8vIFNlZSA8aHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTE4ND4uCi0gICAgQ1N0cmluZyBjb250
ZW50Q1N0cmluZyA9IGVuY29kaW5nVG9Vc2UuZW5jb2RlKGNvbnRlbnQsIEVudGl0aWVzRm9yVW5l
bmNvZGFibGVzKTsKKyAgICBhdXRvIGVuY29kZWRDb250ZW50ID0gZW5jb2RpbmdUb1VzZS5lbmNv
ZGUoY29udGVudCwgVW5lbmNvZGFibGVIYW5kbGluZzo6RW50aXRpZXMpOwogICAgIGJvb2wgZm91
bmRIYXNoSW5FbmZvcmNlZFBvbGljaWVzID0gZmFsc2U7CiAgICAgYm9vbCBmb3VuZEhhc2hJblJl
cG9ydE9ubHlQb2xpY2llcyA9IGZhbHNlOwogICAgIGZvciAoYXV0byBhbGdvcml0aG0gOiBhbGdv
cml0aG1zKSB7Ci0gICAgICAgIENvbnRlbnRTZWN1cml0eVBvbGljeUhhc2ggaGFzaCA9IGNyeXB0
b2dyYXBoaWNEaWdlc3RGb3JCeXRlcyhhbGdvcml0aG0sIGNvbnRlbnRDU3RyaW5nLmRhdGEoKSwg
Y29udGVudENTdHJpbmcubGVuZ3RoKCkpOworICAgICAgICBDb250ZW50U2VjdXJpdHlQb2xpY3lI
YXNoIGhhc2ggPSBjcnlwdG9ncmFwaGljRGlnZXN0Rm9yQnl0ZXMoYWxnb3JpdGhtLCBlbmNvZGVk
Q29udGVudC5kYXRhKCksIGVuY29kZWRDb250ZW50LnNpemUoKSk7CiAgICAgICAgIGlmICghZm91
bmRIYXNoSW5FbmZvcmNlZFBvbGljaWVzICYmIGFsbFBvbGljaWVzV2l0aERpc3Bvc2l0aW9uQWxs
b3coQ29udGVudFNlY3VyaXR5UG9saWN5OjpEaXNwb3NpdGlvbjo6RW5mb3JjZSwgc3RkOjpmb3J3
YXJkPFByZWRpY2F0ZT4ocHJlZGljYXRlKSwgaGFzaCkpCiAgICAgICAgICAgICBmb3VuZEhhc2hJ
bkVuZm9yY2VkUG9saWNpZXMgPSB0cnVlOwogICAgICAgICBpZiAoIWZvdW5kSGFzaEluUmVwb3J0
T25seVBvbGljaWVzICYmIGFsbFBvbGljaWVzV2l0aERpc3Bvc2l0aW9uQWxsb3coQ29udGVudFNl
Y3VyaXR5UG9saWN5OjpEaXNwb3NpdGlvbjo6UmVwb3J0T25seSwgc3RkOjpmb3J3YXJkPFByZWRp
Y2F0ZT4ocHJlZGljYXRlKSwgaGFzaCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9GaWxlSGFuZGxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVIYW5kbGUu
Y3BwCmluZGV4IDJhMGE2MzRjNmY2ODEyY2Y2ZmNlN2IyMDgxY2Q5ZWFiOGJhZTU5MDMuLjFjM2Y1
MzI4OWQ1NDBmMTUwOTNjNDEyZTQ0MWNlNmZjZDYwOTdiZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0ZpbGVIYW5kbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0ZpbGVIYW5kbGUuY3BwCkBAIC0yOSw4ICsyOSw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiRmlsZUhhbmRsZS5oIgogCi0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5o
PgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZpbGVIYW5kbGU6OkZpbGVIYW5kbGUoY29uc3Qg
U3RyaW5nJiBwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGUgbW9kZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCmluZGV4IDBkMzViMjEzYmZjMjFkOWQ4YTliMWRh
MWYzYjJiYzkwNTc0YjkyNWUuLmQ2NmI1MzA5ZTFiMWJmNmRhYjVlZjQ2NGUxOGYzMGJjM2RlZGI5
OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcApAQCAtNzQsNiAr
NzQsMTIgQEAgUmVmPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoVmVjdG9yPGNo
YXI+JiYgdmVjdG9yKQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihXVEZN
b3ZlKHZlY3RvcikpKTsKIH0KIAorLy8gRklYTUU6IE1vdmUgdGhlIHdob2xlIGNsYXNzIGZyb20g
VmVjdG9yPGNoYXI+IHRvIFZlY3Rvcjx1aW50OF90PiBhbmQgbWFrZSB0aGlzIGVmZmljaWVudCwg
cmVwbGFjaW5nIHRoZSBWZWN0b3I8Y2hhcj4gdmVyc2lvbiBhYm92ZS4KK1JlZjxTaGFyZWRCdWZm
ZXI+IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFZlY3Rvcjx1aW50OF90PiYmIHZlY3RvcikKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRCdWZmZXIgeyB2ZWN0b3IuZGF0YSgpLCB2ZWN0
b3Iuc2l6ZSgpIH0pOworfQorCiB2b2lkIFNoYXJlZEJ1ZmZlcjo6Y29tYmluZUludG9PbmVTZWdt
ZW50KCkgY29uc3QKIHsKICNpZiAhQVNTRVJUX0RJU0FCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1NoYXJlZEJ1ZmZlci5oCmluZGV4IDM0ZmY3MWM2Mzg2ZDgyY2VjNzVkZmEyNWM1ZDIwYTBhNGZl
ZmEyNDIuLjMwNWE5MTMzNTJkMjJlMWUxZDczMWEwNzg5M2Y2MzdiN2ZiNzczNWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCkBAIC02MCw3ICs2MCw4IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlV2l0aENvbnRlbnRzT2ZGaWxl
KGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpOwogCiAgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+
IGNyZWF0ZShWZWN0b3I8Y2hhcj4mJik7Ci0gICAgCisgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZm
ZXI+IGNyZWF0ZShWZWN0b3I8dWludDhfdD4mJik7CisKICNpZiBVU0UoRk9VTkRBVElPTikKICAg
ICBSZXRhaW5QdHI8TlNEYXRhPiBjcmVhdGVOU0RhdGEoKSBjb25zdDsKICAgICBSZXRhaW5QdHI8
TlNBcnJheT4gY3JlYXRlTlNEYXRhQXJyYXkoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9V
UkxQYXJzZXIuY3BwCmluZGV4IDY3Mjg2MTJlZDAzMjQ5ZmY5NzYyODgyMTVkYzliNDUxM2NhOTdk
MWEuLjAyNzk5MWQxZWVmYjQxN2VlMmM5YWY3MmJlMWY1ODk3NDE5NzFlMDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNwcApAQCAtNjIxLDkgKzYyMSw5IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+CiB2b2lkIFVSTFBhcnNlcjo6ZW5jb2RlUXVlcnkoY29uc3Qg
VmVjdG9yPFVDaGFyPiYgc291cmNlLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBDb2Rl
UG9pbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPiBpdGVyYXRvcikKIHsKICAgICAvLyBGSVhNRTog
SXQgaXMgdW5jbGVhciBpbiB0aGUgc3BlYyB3aGF0IHRvIGRvIHdoZW4gZW5jb2RpbmcgZmFpbHMu
IFRoZSBiZWhhdmlvciBzaG91bGQgYmUgc3BlY2lmaWVkIGFuZCB0ZXN0ZWQuCi0gICAgQ1N0cmlu
ZyBlbmNvZGVkID0gZW5jb2RpbmcuZW5jb2RlKFN0cmluZ1ZpZXcoc291cmNlLmRhdGEoKSwgc291
cmNlLnNpemUoKSksIFVSTEVuY29kZWRFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7Ci0gICAgY29u
c3QgY2hhciogZGF0YSA9IGVuY29kZWQuZGF0YSgpOwotICAgIHNpemVfdCBsZW5ndGggPSBlbmNv
ZGVkLmxlbmd0aCgpOworICAgIGF1dG8gZW5jb2RlZCA9IGVuY29kaW5nLmVuY29kZShTdHJpbmdW
aWV3KHNvdXJjZS5kYXRhKCksIHNvdXJjZS5zaXplKCkpLCBVbmVuY29kYWJsZUhhbmRsaW5nOjpV
UkxFbmNvZGVkRW50aXRpZXMpOworICAgIGF1dG8qIGRhdGEgPSBlbmNvZGVkLmRhdGEoKTsKKyAg
ICBzaXplX3QgbGVuZ3RoID0gZW5jb2RlZC5zaXplKCk7CiAgICAgCiAgICAgaWYgKCFsZW5ndGgg
PT0gIWl0ZXJhdG9yLmF0RW5kKCkpIHsKICAgICAgICAgc3ludGF4VmlvbGF0aW9uKGl0ZXJhdG9y
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCmluZGV4IGFlMjNkOGIzZGZmMjgzNzczOTMxYWVlNjk4
MWU4OWRjODk4ZTMxNmUuLmY1Yjc0ZmFhYjE1YmEwMjc3YTI2MDMyMDRjMjdlZWY1YTFiNDg0YmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQpAQCAtMTc4NywxMSArMTc4NywxMCBAQCBib29sIE1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNob3VsZFdhaXRGb3JMb2FkaW5nT2ZS
ZXNvdXJjZShBVkFzc2V0UgogCiAgICAgaWYgKHNjaGVtZSA9PSAiY2xlYXJrZXkiKSB7CiAgICAg
ICAgIFN0cmluZyBrZXlJRCA9IFtbW2F2UmVxdWVzdCByZXF1ZXN0XSBVUkxdIHJlc291cmNlU3Bl
Y2lmaWVyXTsKLSAgICAgICAgU3RyaW5nVmlldyBrZXlJRFZpZXcoa2V5SUQpOwotICAgICAgICBD
U3RyaW5nIHV0ZjhFbmNvZGVkS2V5SWQgPSBVVEY4RW5jb2RpbmcoKS5lbmNvZGUoa2V5SURWaWV3
LCBVUkxFbmNvZGVkRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOworICAgICAgICBhdXRvIGVuY29k
ZWRLZXlJZCA9IFVURjhFbmNvZGluZygpLmVuY29kZShrZXlJRCwgVW5lbmNvZGFibGVIYW5kbGlu
Zzo6VVJMRW5jb2RlZEVudGl0aWVzKTsKIAotICAgICAgICBSZWZQdHI8VWludDhBcnJheT4gaW5p
dERhdGEgPSBVaW50OEFycmF5OjpjcmVhdGUodXRmOEVuY29kZWRLZXlJZC5sZW5ndGgoKSk7Ci0g
ICAgICAgIGluaXREYXRhLT5zZXRSYW5nZShyZWludGVycHJldF9jYXN0PGNvbnN0IEpTQzo6VWlu
dDhBZGFwdG9yOjpUeXBlKj4odXRmOEVuY29kZWRLZXlJZC5kYXRhKCkpLCB1dGY4RW5jb2RlZEtl
eUlkLmxlbmd0aCgpLCAwKTsKKyAgICAgICAgYXV0byBpbml0RGF0YSA9IFVpbnQ4QXJyYXk6OmNy
ZWF0ZShlbmNvZGVkS2V5SWQuc2l6ZSgpKTsKKyAgICAgICAgaW5pdERhdGEtPnNldFJhbmdlKGVu
Y29kZWRLZXlJZC5kYXRhKCksIGVuY29kZWRLZXlJZC5zaXplKCksIDApOwogCiAgICAgICAgIGF1
dG8ga2V5RGF0YSA9IHBsYXllcigpLT5jYWNoZWRLZXlGb3JLZXlJZChrZXlJRCk7CiAgICAgICAg
IGlmIChrZXlEYXRhKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmNwcAppbmRleCAyN2NlZWQyZTcxMTdkODFkYzA4NTQx
OWM3MzllY2Y4YTJjOWVhMjEyLi5jNDJmODg5YzQ4ZDNjOWZjYjUyOTRmZTNiODA5NGJkZTI4ODY1
MDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0
Zm9ybUNBTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L1BsYXRmb3JtQ0FMYXllci5jcHAKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJQbGF0Zm9y
bUNBTGF5ZXJDbGllbnQuaCIKICNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlv
bi5oPgogI2luY2x1ZGUgPENvcmVUZXh0L0NvcmVUZXh0Lmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmlu
Z0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogI2lmIFBMQVRG
T1JNKFdJTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9y
bURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAK
aW5kZXggM2M4ZWUwOGQxNTkxOTNkYTBmYzcwNWEwYWNmZDgzNDI4ZTViN2MyYy4uZjQ1ODIyYmFm
ZjVmMDgwM2MwY2ExMTAwZWZlODc4Nzg5MjY2M2IyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKQEAgLTgxLDE2ICs4MSwxNyBAQCBSZWY8Rm9ybURh
dGE+IEZvcm1EYXRhOjpjcmVhdGUoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpCiAKIFJl
ZjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCBDU3RyaW5nJiBzdHJpbmcpCiB7Ci0g
ICAgYXV0byByZXN1bHQgPSBjcmVhdGUoKTsKLSAgICByZXN1bHQtPmFwcGVuZERhdGEoc3RyaW5n
LmRhdGEoKSwgc3RyaW5nLmxlbmd0aCgpKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVy
biBjcmVhdGUoc3RyaW5nLmRhdGEoKSwgc3RyaW5nLmxlbmd0aCgpKTsKIH0KIAogUmVmPEZvcm1E
YXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IFZlY3RvcjxjaGFyPiYgdmVjdG9yKQogewotICAg
IGF1dG8gcmVzdWx0ID0gY3JlYXRlKCk7Ci0gICAgcmVzdWx0LT5hcHBlbmREYXRhKHZlY3Rvci5k
YXRhKCksIHZlY3Rvci5zaXplKCkpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGNy
ZWF0ZSh2ZWN0b3IuZGF0YSgpLCB2ZWN0b3Iuc2l6ZSgpKTsKK30KKworUmVmPEZvcm1EYXRhPiBG
b3JtRGF0YTo6Y3JlYXRlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmVjdG9yKQoreworICAgIHJl
dHVybiBjcmVhdGUodmVjdG9yLmRhdGEoKSwgdmVjdG9yLnNpemUoKSk7CiB9CiAKIFJlZjxGb3Jt
RGF0YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCBET01Gb3JtRGF0YSYgZm9ybURhdGEsIEVuY29k
aW5nVHlwZSBlbmNvZGluZ1R5cGUpCkBAIC0xMTQsNyArMTE1LDkgQEAgUmVmPEZvcm1EYXRhPiBG
b3JtRGF0YTo6Y29weSgpIGNvbnN0CiAKIFJlZjxGb3JtRGF0YT4gRm9ybURhdGE6Omlzb2xhdGVk
Q29weSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGlzb2xhdGVkQ29weSgpIChoaXN0b3JpY2Fs
bHkgZGVlcENvcHkoKSkgb25seSBjb3BpZXMgY2VydGFpbiB2YWx1ZXMgZnJvbSBgdGhpc2AuIFdo
eSBpcyB0aGF0PworICAgIC8vIEZJWE1FOiBpc29sYXRlZENvcHkoKSBkb2VzIG5vdCBjb3B5IG1f
aWRlbnRpZmllciwgbV9ib3VuZGFyeSwgb3IgbV9jb250YWluc1Bhc3N3b3JkRGF0YS4KKyAgICAv
LyBJcyBhbGwgb2YgdGhhdCBjb3JyZWN0IGFuZCBpbnRlbnRpb25hbD8KKwogICAgIGF1dG8gZm9y
bURhdGEgPSBjcmVhdGUoKTsKIAogICAgIGZvcm1EYXRhLT5tX2Fsd2F5c1N0cmVhbSA9IG1fYWx3
YXlzU3RyZWFtOwpAQCAtMTgzLDkgKzE4Niw5IEBAIHZvaWQgRm9ybURhdGE6OmFwcGVuZEJsb2Io
Y29uc3QgVVJMJiBibG9iVVJMKQogICAgIG1fbGVuZ3RoSW5CeXRlcyA9IHN0ZDo6bnVsbG9wdDsK
IH0KIAotc3RhdGljIENTdHJpbmcgbm9ybWFsaXplU3RyaW5nRGF0YShUZXh0RW5jb2RpbmcmIGVu
Y29kaW5nLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorc3RhdGljIFZlY3Rvcjx1aW50OF90PiBub3Jt
YWxpemVTdHJpbmdEYXRhKFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgdmFs
dWUpCiB7Ci0gICAgcmV0dXJuIG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9DUkxGKGVuY29kaW5nLmVu
Y29kZSh2YWx1ZSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpKTsKKyAgICByZXR1cm4gbm9ybWFs
aXplTGluZUVuZGluZ3NUb0NSTEYoZW5jb2RpbmcuZW5jb2RlKHZhbHVlLCBVbmVuY29kYWJsZUhh
bmRsaW5nOjpFbnRpdGllcykpOwogfQogCiB2b2lkIEZvcm1EYXRhOjphcHBlbmRNdWx0aVBhcnRG
aWxlVmFsdWUoY29uc3QgRmlsZSYgZmlsZSwgVmVjdG9yPGNoYXI+JiBoZWFkZXIsIFRleHRFbmNv
ZGluZyYgZW5jb2RpbmcsIERvY3VtZW50KiBkb2N1bWVudCkKQEAgLTIzMCw3ICsyMzMsNyBAQCB2
b2lkIEZvcm1EYXRhOjphcHBlbmRNdWx0aVBhcnRTdHJpbmdWYWx1ZShjb25zdCBTdHJpbmcmIHN0
cmluZywgVmVjdG9yPGNoYXI+JiBoZQogICAgIGFwcGVuZERhdGEoaGVhZGVyLmRhdGEoKSwgaGVh
ZGVyLnNpemUoKSk7CiAKICAgICBhdXRvIG5vcm1hbGl6ZWRTdHJpbmdEYXRhID0gbm9ybWFsaXpl
U3RyaW5nRGF0YShlbmNvZGluZywgc3RyaW5nKTsKLSAgICBhcHBlbmREYXRhKG5vcm1hbGl6ZWRT
dHJpbmdEYXRhLmRhdGEoKSwgbm9ybWFsaXplZFN0cmluZ0RhdGEubGVuZ3RoKCkpOworICAgIGFw
cGVuZERhdGEobm9ybWFsaXplZFN0cmluZ0RhdGEuZGF0YSgpLCBub3JtYWxpemVkU3RyaW5nRGF0
YS5zaXplKCkpOwogfQogCiB2b2lkIEZvcm1EYXRhOjphcHBlbmRNdWx0aVBhcnRLZXlWYWx1ZVBh
aXJJdGVtcyhjb25zdCBET01Gb3JtRGF0YSYgZm9ybURhdGEsIERvY3VtZW50KiBkb2N1bWVudCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaAppbmRleCA2ZjlhN2E3
MmJmZjk4MjI2NTc5NjVkMzkwNmExNTMyZjBkZmE1OGY0Li5kYWQwYjQzNzdjNzgzNjllNzVhOTNk
NTUyMjM4NTY0YjEzZmUyYmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0Zvcm1EYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9G
b3JtRGF0YS5oCkBAIC0zNCwxMyArMzQsMTEgQEAgY2xhc3MgRmlsZTsKIGNsYXNzIFNoYXJlZEJ1
ZmZlcjsKIGNsYXNzIFRleHRFbmNvZGluZzsKIAorLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBh
IFZhcmlhbnQgb2Ygc3RydWN0cyBhbmQgcmVtb3ZlICJUeXBlIiBhbmQgYWxzbyB0aGUgIm1fIiBw
cmVmaXhlcyBmcm9tIHRoZSBkYXRhIG1lbWJlcnMuCisvLyBUaGUgbWVtYmVyIGZ1bmN0aW9ucyBj
YW4gYmVjb21lIG5vbi1tZW1iZXIgZnVjbnRpb25zLgogY2xhc3MgRm9ybURhdGFFbGVtZW50IHsK
IHB1YmxpYzoKLSAgICBlbnVtIGNsYXNzIFR5cGUgewotICAgICAgICBEYXRhLAotICAgICAgICBF
bmNvZGVkRmlsZSwKLSAgICAgICAgRW5jb2RlZEJsb2IsCi0gICAgfTsKKyAgICBlbnVtIGNsYXNz
IFR5cGUgeyBEYXRhLCBFbmNvZGVkRmlsZSwgRW5jb2RlZEJsb2IgfTsKIAogICAgIEZvcm1EYXRh
RWxlbWVudCgpCiAgICAgICAgIDogbV90eXBlKFR5cGU6OkRhdGEpCkBAIC03NCwxMCArNzIsOCBA
QCBwdWJsaWM6CiAKICAgICBGb3JtRGF0YUVsZW1lbnQgaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgotICAgIHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPgotICAgIHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPEZvcm1EYXRhRWxlbWVudD4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8Rm9ybURhdGFFbGVt
ZW50PiBkZWNvZGUoRGVjb2RlciYpOwogCiAgICAgVHlwZSBtX3R5cGU7CiAgICAgVmVjdG9yPGNo
YXI+IG1fZGF0YTsKQEAgLTg3LDkgKzgzLDggQEAgcHVibGljOgogICAgIGludDY0X3QgbV9maWxl
TGVuZ3RoOwogICAgIGRvdWJsZSBtX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWU7CiAgICAg
Ly8gRklYTUU6IEdlbmVyYXRlZCBmaWxlIHN1cHBvcnQgaW4gRm9ybURhdGEgaXMgYWxtb3N0IGlk
ZW50aWNhbCB0byBCbG9iLCB0aGV5IHNob3VsZCBiZSBtZXJnZWQuCi0gICAgLy8gV2UgY2FuJ3Qg
anVzdCBzd2l0Y2ggdG8gdXNpbmcgQmxvYnMgZm9yIGFsbCBmaWxlcyBmb3IgdHdvIHJlYXNvbnM6
Ci0gICAgLy8gMS4gTm90IGFsbCBwbGF0Zm9ybXMgZW5hYmxlIEJMT0Igc3VwcG9ydC4KLSAgICAv
LyAyLiBFbmNvZGVkRmlsZSBmb3JtIGRhdGEgZWxlbWVudHMgZG8gbm90IGhhdmUgYSB2YWxpZCBt
X2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUsIG1lYW5pbmcgdGhhdCB3ZSBhbHdheXMgdXBs
b2FkIHRoZSBsYXRlc3QgY29udGVudCBmcm9tIGRpc2suCisgICAgLy8gV2UgY2FuJ3QganVzdCBz
d2l0Y2ggdG8gdXNpbmcgQmxvYnMgZm9yIGFsbCBmaWxlcyBiZWNhdXNlIEVuY29kZWRGaWxlIGZv
cm0gZGF0YSBlbGVtZW50cyBkbyBub3QKKyAgICAvLyBoYXZlIGEgdmFsaWQgbV9leHBlY3RlZEZp
bGVNb2RpZmljYXRpb25UaW1lLCBtZWFuaW5nIHdlIGFsd2F5cyB1cGxvYWQgdGhlIGxhdGVzdCBj
b250ZW50IGZyb20gZGlzay4KICAgICBTdHJpbmcgbV9nZW5lcmF0ZWRGaWxlbmFtZTsKICAgICBi
b29sIG1fc2hvdWxkR2VuZXJhdGVGaWxlOwogICAgIGJvb2wgbV9vd25zR2VuZXJhdGVkRmlsZTsK
QEAgLTExNyw3ICsxMTIsNiBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZvcm1EYXRh
RWxlbWVudCYgYSwgY29uc3QgRm9ybURhdGFFbGVtZW50JiBiKQogICAgIHJldHVybiAhKGEgPT0g
Yik7CiB9CiAKLQogdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KIHZvaWQgRm9ybURhdGFFbGVt
ZW50OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKQEAgLTIwNCw2ICsxOTgsNyBA
QCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxGb3JtRGF0YT4gY3JlYXRl
KGNvbnN0IHZvaWQqLCBzaXplX3QpOwogICAgIHN0YXRpYyBSZWY8Rm9ybURhdGE+IGNyZWF0ZShj
b25zdCBDU3RyaW5nJik7CiAgICAgc3RhdGljIFJlZjxGb3JtRGF0YT4gY3JlYXRlKGNvbnN0IFZl
Y3RvcjxjaGFyPiYpOworICAgIHN0YXRpYyBSZWY8Rm9ybURhdGE+IGNyZWF0ZShjb25zdCBWZWN0
b3I8dWludDhfdD4mKTsKICAgICBzdGF0aWMgUmVmPEZvcm1EYXRhPiBjcmVhdGUoY29uc3QgRE9N
Rm9ybURhdGEmLCBFbmNvZGluZ1R5cGUgPSBGb3JtVVJMRW5jb2RlZCk7CiAgICAgc3RhdGljIFJl
ZjxGb3JtRGF0YT4gY3JlYXRlTXVsdGlQYXJ0KGNvbnN0IERPTUZvcm1EYXRhJiwgRG9jdW1lbnQq
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB+Rm9ybURhdGEoKTsKQEAgLTMwMCw2ICsyOTUsNyBAQCB2
b2lkIEZvcm1EYXRhOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVy
IDw8IG1fYm91bmRhcnk7CiAgICAgZW5jb2RlciA8PCBtX2VsZW1lbnRzOwogICAgIGVuY29kZXIg
PDwgbV9pZGVudGlmaWVyOworICAgIC8vIEZJWE1FOiBEb2VzIG5vdCBlbmNvZGUgbV9jb250YWlu
c1Bhc3N3b3JkRGF0YS4gV2h5IGlzIHRoYXQgT0s/CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIERl
Y29kZXI+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1E
YXRhQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRh
QnVpbGRlci5jcHAKaW5kZXggNjg4OGIyY2NlYjRiOTdjY2E5NTUxODM3NTA0ZTUxY2Y2NjMxMDg4
YS4uOWEzYzRiNTljZDQyYWJlZjk5NjU5Y2EzMjhlZDEwZGViNzAyODE2NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YUJ1aWxkZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmNwcApAQCAt
Miw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUu
b3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUu
b3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3Jn
KQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkg
UHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2gg
TW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUu
Y29tLykKICAqCkBAIC0zNiw3ICszNiw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8g
SGVscGVyIGZ1bmN0aW9ucworbmFtZXNwYWNlIEZvcm1EYXRhQnVpbGRlciB7CisKIHN0YXRpYyBp
bmxpbmUgdm9pZCBhcHBlbmQoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNoYXIgc3RyaW5nKQogewog
ICAgIGJ1ZmZlci5hcHBlbmQoc3RyaW5nKTsKQEAgLTUyLDE1ICs1MywyMiBAQCBzdGF0aWMgaW5s
aW5lIHZvaWQgYXBwZW5kKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCBDU3RyaW5nJiBzdHJp
bmcpCiAgICAgYnVmZmVyLmFwcGVuZChzdHJpbmcuZGF0YSgpLCBzdHJpbmcubGVuZ3RoKCkpOwog
fQogCi1zdGF0aWMgdm9pZCBhcHBlbmRRdW90ZWRTdHJpbmcoVmVjdG9yPGNoYXI+JiBidWZmZXIs
IGNvbnN0IENTdHJpbmcmIHN0cmluZykKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmQoVmVjdG9y
PGNoYXI+JiBidWZmZXIsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc3RyaW5nKQoreworICAgIGJ1
ZmZlci5hcHBlbmRWZWN0b3Ioc3RyaW5nKTsKK30KKworc3RhdGljIHZvaWQgYXBwZW5kUXVvdGVk
KFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHN0cmluZykKIHsK
ICAgICAvLyBBcHBlbmQgYSBzdHJpbmcgYXMgYSBxdW90ZWQgdmFsdWUsIGVzY2FwaW5nIHF1b3Rl
cyBhbmQgbGluZSBicmVha3MuCi0gICAgLy8gRklYTUU6IElzIGl0IGNvcnJlY3QgdG8gdXNlIHBl
cmNlbnQgZXNjYXBpbmcgaGVyZT8gT3RoZXIgYnJvd3NlcnMgZG8gbm90IGVuY29kZSB0aGVzZSBj
aGFyYWN0ZXJzIHlldCwKLSAgICAvLyBzbyB3ZSBzaG91bGQgdGVzdCBwb3B1bGFyIHNlcnZlcnMg
dG8gZmluZCBvdXQgaWYgdGhlcmUgaXMgYW4gZW5jb2RpbmcgZm9ybSB0aGV5IGNhbiBoYW5kbGUu
Ci0gICAgc2l6ZV90IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGNoYXIgYyA9IHN0cmluZy5kYXRhKClb
aV07Ci0gICAgICAgIHN3aXRjaCAoYykgeworICAgIC8vIEZJWE1FOiBJcyBpdCBjb3JyZWN0IHRv
IHVzZSBwZXJjZW50IGVzY2FwaW5nIGhlcmU/IFdoZW4gdGhpcyBjb2RlIHdhcyBvcmlnaW5hbGx5
IHdyaXR0ZW4sCisgICAgLy8gb3RoZXIgYnJvd3NlcnMgd2VyZSBub3QgZW5jb2RpbmcgdGhlc2Ug
Y2hhcmFjdGVycywgc28gc29tZW9uZSBzaG91bGQgdGVzdCBzZXJ2ZXJzIG9yIGRvCisgICAgLy8g
cmVzZWFyY2ggdG8gZmluZCBvdXQgaWYgdGhlcmUgaXMgYW4gZW5jb2RpbmcgZm9ybSB0aGF0IHdv
cmtzIHdlbGwuCisgICAgLy8gRklYTUU6IElmIHdlIHdhbnQgdG8gdXNlIHBlcmNlbnQgZXNjYXBp
bmcgc2Vuc2libHksIHdlIG5lZWQgdG8gZXNjYXBlICIlIiBjaGFyYWN0ZXJzIHRvby4KKyAgICBz
aXplX3Qgc2l6ZSA9IHN0cmluZy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
aXplOyArK2kpIHsKKyAgICAgICAgYXV0byBjaGFyYWN0ZXIgPSBzdHJpbmdbaV07CisgICAgICAg
IHN3aXRjaCAoY2hhcmFjdGVyKSB7CiAgICAgICAgIGNhc2UgMHhBOgogICAgICAgICAgICAgYXBw
ZW5kKGJ1ZmZlciwgIiUwQSIpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC03MSwxMiArNzksMzYg
QEAgc3RhdGljIHZvaWQgYXBwZW5kUXVvdGVkU3RyaW5nKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBj
b25zdCBDU3RyaW5nJiBzdHJpbmcpCiAgICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCAiJTIyIik7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGFwcGVu
ZChidWZmZXIsIGMpOworICAgICAgICAgICAgYXBwZW5kKGJ1ZmZlciwgY2hhcmFjdGVyKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKworLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNjb25j
ZXB0LXVybGVuY29kZWQtYnl0ZS1zZXJpYWxpemVyCitzdGF0aWMgdm9pZCBhcHBlbmRGb3JtVVJM
RW5jb2RlZChWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3QgdWludDhfdCogc3RyaW5nLCBzaXpl
X3QgbGVuZ3RoKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyIHNhZmVDaGFyYWN0ZXJzW10gPSAi
LS5fKiI7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAg
ICBhdXRvIGNoYXJhY3RlciA9IHN0cmluZ1tpXTsKKyAgICAgICAgaWYgKGlzQVNDSUlBbHBoYW51
bWVyaWMoY2hhcmFjdGVyKSB8fCBzdHJjaHIoc2FmZUNoYXJhY3RlcnMsIGNoYXJhY3RlcikpCisg
ICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCBjaGFyYWN0ZXIpOworICAgICAgICBlbHNlIGlmIChj
aGFyYWN0ZXIgPT0gJyAnKQorICAgICAgICAgICAgYXBwZW5kKGJ1ZmZlciwgJysnKTsKKyAgICAg
ICAgZWxzZSBpZiAoY2hhcmFjdGVyID09ICdcbicgfHwgKGNoYXJhY3RlciA9PSAnXHInICYmIChp
ICsgMSA+PSBsZW5ndGggfHwgc3RyaW5nW2kgKyAxXSAhPSAnXG4nKSkpCisgICAgICAgICAgICBh
cHBlbmQoYnVmZmVyLCAiJTBEJTBBIik7IC8vIEZJWE1FOiBVbmNsZWFyIGV4YWN0bHkgd2hlcmUg
dGhpcyBydWxlIGFib3V0IG5vcm1hbGl6aW5nIGxpbmUgZW5kaW5ncyB0byBDUkxGIGNvbWVzIGZy
b20uCisgICAgICAgIGVsc2UgaWYgKGNoYXJhY3RlciAhPSAnXHInKSB7CisgICAgICAgICAgICBh
cHBlbmQoYnVmZmVyLCAnJScpOworICAgICAgICAgICAgYXBwZW5kQnl0ZUFzSGV4KGNoYXJhY3Rl
ciwgYnVmZmVyKTsKICAgICAgICAgfQogICAgIH0KIH0KIAotVmVjdG9yPGNoYXI+IEZvcm1EYXRh
QnVpbGRlcjo6Z2VuZXJhdGVVbmlxdWVCb3VuZGFyeVN0cmluZygpCitzdGF0aWMgdm9pZCBhcHBl
bmRGb3JtVVJMRW5jb2RlZChWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBzdHJpbmcpCit7CisgICAgYXBwZW5kRm9ybVVSTEVuY29kZWQoYnVmZmVyLCBzdHJpbmcu
ZGF0YSgpLCBzdHJpbmcuc2l6ZSgpKTsKK30KKworVmVjdG9yPGNoYXI+IGdlbmVyYXRlVW5pcXVl
Qm91bmRhcnlTdHJpbmcoKQogewogICAgIFZlY3RvcjxjaGFyPiBib3VuZGFyeTsKIApAQCAtMTE3
LDE4ICsxNDksMTggQEAgVmVjdG9yPGNoYXI+IEZvcm1EYXRhQnVpbGRlcjo6Z2VuZXJhdGVVbmlx
dWVCb3VuZGFyeVN0cmluZygpCiAgICAgcmV0dXJuIGJvdW5kYXJ5OwogfQogCi12b2lkIEZvcm1E
YXRhQnVpbGRlcjo6YmVnaW5NdWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNv
bnN0IENTdHJpbmcmIGJvdW5kYXJ5LCBjb25zdCBDU3RyaW5nJiBuYW1lKQordm9pZCBiZWdpbk11
bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3QgQ1N0cmluZyYgYm91bmRh
cnksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbmFtZSkKIHsKICAgICBhZGRCb3VuZGFyeVRvTXVs
dGlQYXJ0SGVhZGVyKGJ1ZmZlciwgYm91bmRhcnkpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgbG9z
ZXMgZGF0YSBpcnJldmVyc2libHkgaWYgdGhlIGlucHV0IG5hbWUgaW5jbHVkZXMgY2hhcmFjdGVy
cyB5b3UgY2FuJ3QgZW5jb2RlCiAgICAgLy8gaW4gdGhlIHdlYnNpdGUncyBjaGFyYWN0ZXIgc2V0
LgogICAgIGFwcGVuZChidWZmZXIsICJDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5h
bWU9XCIiKTsKLSAgICBhcHBlbmRRdW90ZWRTdHJpbmcoYnVmZmVyLCBuYW1lKTsKKyAgICBhcHBl
bmRRdW90ZWQoYnVmZmVyLCBuYW1lKTsKICAgICBhcHBlbmQoYnVmZmVyLCAnIicpOwogfQogCi12
b2lkIEZvcm1EYXRhQnVpbGRlcjo6YWRkQm91bmRhcnlUb011bHRpUGFydEhlYWRlcihWZWN0b3I8
Y2hhcj4mIGJ1ZmZlciwgY29uc3QgQ1N0cmluZyYgYm91bmRhcnksIGJvb2wgaXNMYXN0Qm91bmRh
cnkpCit2b2lkIGFkZEJvdW5kYXJ5VG9NdWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+JiBidWZm
ZXIsIGNvbnN0IENTdHJpbmcmIGJvdW5kYXJ5LCBib29sIGlzTGFzdEJvdW5kYXJ5KQogewogICAg
IGFwcGVuZChidWZmZXIsICItLSIpOwogICAgIGFwcGVuZChidWZmZXIsIGJvdW5kYXJ5KTsKQEAg
LTEzOSwyOCArMTcxLDI4IEBAIHZvaWQgRm9ybURhdGFCdWlsZGVyOjphZGRCb3VuZGFyeVRvTXVs
dGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCBDCiAgICAgYXBwZW5kKGJ1
ZmZlciwgIlxyXG4iKTsKIH0KIAotdm9pZCBGb3JtRGF0YUJ1aWxkZXI6OmFkZEZpbGVuYW1lVG9N
dWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNvbnN0IFRleHRFbmNvZGluZyYg
ZW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCit2b2lkIGFkZEZpbGVuYW1lVG9NdWx0
aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5j
b2RpbmcsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgbG9z
ZXMgZGF0YSBpcnJldmVyc2libHkgaWYgdGhlIGZpbGVuYW1lIGluY2x1ZGVzIGNoYXJhY3RlcnMg
eW91IGNhbid0IGVuY29kZQogICAgIC8vIGluIHRoZSB3ZWJzaXRlJ3MgY2hhcmFjdGVyIHNldC4K
ICAgICBhcHBlbmQoYnVmZmVyLCAiOyBmaWxlbmFtZT1cIiIpOwotICAgIGFwcGVuZFF1b3RlZFN0
cmluZyhidWZmZXIsIGVuY29kaW5nLmVuY29kZShmaWxlbmFtZSwgUXVlc3Rpb25NYXJrc0ZvclVu
ZW5jb2RhYmxlcykpOworICAgIGFwcGVuZFF1b3RlZChidWZmZXIsIGVuY29kaW5nLmVuY29kZShm
aWxlbmFtZSwgVW5lbmNvZGFibGVIYW5kbGluZzo6UXVlc3Rpb25NYXJrcykpOwogICAgIGFwcGVu
ZChidWZmZXIsICciJyk7CiB9CiAKLXZvaWQgRm9ybURhdGFCdWlsZGVyOjphZGRDb250ZW50VHlw
ZVRvTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCBDU3RyaW5nJiBt
aW1lVHlwZSkKK3ZvaWQgYWRkQ29udGVudFR5cGVUb011bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hh
cj4mIGJ1ZmZlciwgY29uc3QgQ1N0cmluZyYgbWltZVR5cGUpCiB7CiAgICAgQVNTRVJUKEJsb2I6
OmlzTm9ybWFsaXplZENvbnRlbnRUeXBlKG1pbWVUeXBlKSk7CiAgICAgYXBwZW5kKGJ1ZmZlciwg
IlxyXG5Db250ZW50LVR5cGU6ICIpOwogICAgIGFwcGVuZChidWZmZXIsIG1pbWVUeXBlKTsKIH0K
IAotdm9pZCBGb3JtRGF0YUJ1aWxkZXI6OmZpbmlzaE11bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hh
cj4mIGJ1ZmZlcikKK3ZvaWQgZmluaXNoTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYgYnVm
ZmVyKQogewogICAgIGFwcGVuZChidWZmZXIsICJcclxuXHJcbiIpOwogfQogCi12b2lkIEZvcm1E
YXRhQnVpbGRlcjo6YWRkS2V5VmFsdWVQYWlyQXNGb3JtRGF0YShWZWN0b3I8Y2hhcj4mIGJ1ZmZl
ciwgY29uc3QgQ1N0cmluZyYga2V5LCBjb25zdCBDU3RyaW5nJiB2YWx1ZSwgRm9ybURhdGE6OkVu
Y29kaW5nVHlwZSBlbmNvZGluZ1R5cGUpCit2b2lkIGFkZEtleVZhbHVlUGFpckFzRm9ybURhdGEo
VmVjdG9yPGNoYXI+JiBidWZmZXIsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBjb25zdCBW
ZWN0b3I8dWludDhfdD4mIHZhbHVlLCBGb3JtRGF0YTo6RW5jb2RpbmdUeXBlIGVuY29kaW5nVHlw
ZSkKIHsKICAgICBpZiAoZW5jb2RpbmdUeXBlID09IEZvcm1EYXRhOjpUZXh0UGxhaW4pIHsKICAg
ICAgICAgaWYgKCFidWZmZXIuaXNFbXB0eSgpKQpAQCAtMTcxLDMzICsyMDMsMTcgQEAgdm9pZCBG
b3JtRGF0YUJ1aWxkZXI6OmFkZEtleVZhbHVlUGFpckFzRm9ybURhdGEoVmVjdG9yPGNoYXI+JiBi
dWZmZXIsIGNvbnN0IENTdHIKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIWJ1ZmZlci5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCAnJicpOwotICAgICAgICBlbmNvZGVT
dHJpbmdBc0Zvcm1EYXRhKGJ1ZmZlciwga2V5KTsKKyAgICAgICAgYXBwZW5kRm9ybVVSTEVuY29k
ZWQoYnVmZmVyLCBrZXkpOwogICAgICAgICBhcHBlbmQoYnVmZmVyLCAnPScpOwotICAgICAgICBl
bmNvZGVTdHJpbmdBc0Zvcm1EYXRhKGJ1ZmZlciwgdmFsdWUpOworICAgICAgICBhcHBlbmRGb3Jt
VVJMRW5jb2RlZChidWZmZXIsIHZhbHVlKTsKICAgICB9CiB9CiAKLXZvaWQgRm9ybURhdGFCdWls
ZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCBD
U3RyaW5nJiBzdHJpbmcpCit2b2lkIGVuY29kZVN0cmluZ0FzRm9ybURhdGEoVmVjdG9yPGNoYXI+
JiBidWZmZXIsIGNvbnN0IENTdHJpbmcmIHN0cmluZykKIHsKLSAgICAvLyBTYW1lIHNhZmUgY2hh
cmFjdGVycyBhcyBOZXRzY2FwZSBmb3IgY29tcGF0aWJpbGl0eS4KLSAgICBzdGF0aWMgY29uc3Qg
Y2hhciBzYWZlQ2hhcmFjdGVyc1tdID0gIi0uXyoiOwotCi0gICAgLy8gaHR0cDovL3d3dy53My5v
cmcvVFIvaHRtbDQvaW50ZXJhY3QvZm9ybXMuaHRtbCNoLTE3LjEzLjQuMQotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gc3RyaW5nLmRhdGEoKVtp
XTsKKyAgICBhcHBlbmRGb3JtVVJMRW5jb2RlZChidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KHN0cmluZy5kYXRhKCkpLCBzdHJpbmcubGVuZ3RoKCkpOworfQogCi0gICAg
ICAgIGlmIChpc0FTQ0lJQWxwaGFudW1lcmljKGMpIHx8IHN0cmNocihzYWZlQ2hhcmFjdGVycywg
YykpCi0gICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCBjKTsKLSAgICAgICAgZWxzZSBpZiAoYyA9
PSAnICcpCi0gICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCAnKycpOwotICAgICAgICBlbHNlIGlm
IChjID09ICdcbicgfHwgKGMgPT0gJ1xyJyAmJiAoaSArIDEgPj0gbGVuZ3RoIHx8IHN0cmluZy5k
YXRhKClbaSArIDFdICE9ICdcbicpKSkKLSAgICAgICAgICAgIGFwcGVuZChidWZmZXIsICIlMEQl
MEEiKTsKLSAgICAgICAgZWxzZSBpZiAoYyAhPSAnXHInKSB7Ci0gICAgICAgICAgICBhcHBlbmQo
YnVmZmVyLCAnJScpOwotICAgICAgICAgICAgYXBwZW5kQnl0ZUFzSGV4KGMsIGJ1ZmZlcik7Ci0g
ICAgICAgIH0KLSAgICB9CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5oCmluZGV4IDdhZGVjYWE2NmE3YWQwZTdjOGMxY2E2ZDM3
ZjEyZWRkOTk2ZTllNmIuLmQwZTA3YmNkMDhmZDNkNGMxYjljYmE1MjVhMTNjMTM5NmIyYTgyYWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWls
ZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YUJ1aWxk
ZXIuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9i
aWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29t
LykKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE4LDggKzE5LDcgQEAKICAqCiAgKi8KIAotI2lmbmRl
ZiBGb3JtRGF0YUJ1aWxkZXJfaAotI2RlZmluZSBGb3JtRGF0YUJ1aWxkZXJfaAorI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlICJGb3JtRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBA
IC0yOCwyNSArMjgsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBUZXh0RW5jb2Rp
bmc7CiAKLWNsYXNzIEZvcm1EYXRhQnVpbGRlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
Rm9ybURhdGFCdWlsZGVyKTsKLXB1YmxpYzoKLSAgICAvLyBIZWxwZXIgZnVuY3Rpb25zIHVzZWQg
YnkgSFRNTEZvcm1FbGVtZW50IGZvciBtdWx0aS1wYXJ0IGZvcm0gZGF0YQotICAgIHN0YXRpYyBW
ZWN0b3I8Y2hhcj4gZ2VuZXJhdGVVbmlxdWVCb3VuZGFyeVN0cmluZygpOwotICAgIHN0YXRpYyB2
b2lkIGJlZ2luTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYsIGNvbnN0IENTdHJpbmcmIGJv
dW5kYXJ5LCBjb25zdCBDU3RyaW5nJiBuYW1lKTsKLSAgICBzdGF0aWMgdm9pZCBhZGRCb3VuZGFy
eVRvTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYsIGNvbnN0IENTdHJpbmcmIGJvdW5kYXJ5
LCBib29sIGlzTGFzdEJvdW5kYXJ5ID0gZmFsc2UpOwotICAgIHN0YXRpYyB2b2lkIGFkZEZpbGVu
YW1lVG9NdWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+JiwgY29uc3QgVGV4dEVuY29kaW5nJiwg
Y29uc3QgU3RyaW5nJiBmaWxlbmFtZSk7Ci0gICAgc3RhdGljIHZvaWQgYWRkQ29udGVudFR5cGVU
b011bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4mLCBjb25zdCBDU3RyaW5nJiBtaW1lVHlwZSk7
Ci0gICAgc3RhdGljIHZvaWQgZmluaXNoTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYpOwot
Ci0gICAgLy8gSGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IEhUTUxGb3JtRWxlbWVudCBmb3Igbm9u
IG11bHRpLXBhcnQgZm9ybSBkYXRhCi0gICAgc3RhdGljIHZvaWQgYWRkS2V5VmFsdWVQYWlyQXNG
b3JtRGF0YShWZWN0b3I8Y2hhcj4mLCBjb25zdCBDU3RyaW5nJiBrZXksIGNvbnN0IENTdHJpbmcm
IHZhbHVlLCBGb3JtRGF0YTo6RW5jb2RpbmdUeXBlID0gRm9ybURhdGE6OkZvcm1VUkxFbmNvZGVk
KTsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKFZlY3RvcjxjaGFyPiYs
IGNvbnN0IENTdHJpbmcmKTsKLQotcHJpdmF0ZToKLSAgICBGb3JtRGF0YUJ1aWxkZXIoKSB7fQot
fTsKK25hbWVzcGFjZSBGb3JtRGF0YUJ1aWxkZXIgeworCisvLyBIZWxwZXIgZnVuY3Rpb25zIHVz
ZWQgYnkgSFRNTEZvcm1FbGVtZW50IGZvciBtdWx0aS1wYXJ0IGZvcm0gZGF0YS4KK1ZlY3Rvcjxj
aGFyPiBnZW5lcmF0ZVVuaXF1ZUJvdW5kYXJ5U3RyaW5nKCk7Cit2b2lkIGJlZ2luTXVsdGlQYXJ0
SGVhZGVyKFZlY3RvcjxjaGFyPiYsIGNvbnN0IENTdHJpbmcmIGJvdW5kYXJ5LCBjb25zdCBWZWN0
b3I8dWludDhfdD4mIG5hbWUpOwordm9pZCBhZGRCb3VuZGFyeVRvTXVsdGlQYXJ0SGVhZGVyKFZl
Y3RvcjxjaGFyPiYsIGNvbnN0IENTdHJpbmcmIGJvdW5kYXJ5LCBib29sIGlzTGFzdEJvdW5kYXJ5
ID0gZmFsc2UpOwordm9pZCBhZGRGaWxlbmFtZVRvTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFy
PiYsIGNvbnN0IFRleHRFbmNvZGluZyYsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpOwordm9pZCBh
ZGRDb250ZW50VHlwZVRvTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYsIGNvbnN0IENTdHJp
bmcmIG1pbWVUeXBlKTsKK3ZvaWQgZmluaXNoTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYp
OworCisvLyBIZWxwZXIgZnVuY3Rpb25zIHVzZWQgYnkgSFRNTEZvcm1FbGVtZW50IGZvciBub24t
bXVsdGktcGFydCBmb3JtIGRhdGEuCit2b2lkIGFkZEtleVZhbHVlUGFpckFzRm9ybURhdGEoVmVj
dG9yPGNoYXI+JiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYgdmFsdWUsIEZvcm1EYXRhOjpFbmNvZGluZ1R5cGUgPSBGb3JtRGF0YTo6Rm9ybVVSTEVu
Y29kZWQpOwordm9pZCBlbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKFZlY3RvcjxjaGFyPiYsIGNvbnN0
IENTdHJpbmcmKTsKIAogfQogCi0jZW5kaWYKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsRGVs
ZWdhdGUuY3BwCmluZGV4IDdhNzU5YzRhOWZlN2QwMmQ1MjQzOWE4OGZhMzI2OWE5YTgzMmE0MGQu
LjI3ODQzOWUxNTIwMTk3M2Q3YTZjYTVlOTQzMGQ2ODM4OTMzNzMxYmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxl
Z2F0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291
cmNlSGFuZGxlQ3VybERlbGVnYXRlLmNwcApAQCAtNDU3LDkgKzQ1Nyw5IEBAIHZvaWQgUmVzb3Vy
Y2VIYW5kbGVDdXJsRGVsZWdhdGU6OmhhbmRsZURhdGFVUkwoKQogCiAgICAgICAgIC8vIGRpZFJl
Y2VpdmVSZXNwb25zZSBtaWdodCBjYXVzZSB0aGUgY2xpZW50IHRvIGJlIGRlbGV0ZWQuCiAgICAg
ICAgIGlmIChtX2hhbmRsZS0+Y2xpZW50KCkpIHsKLSAgICAgICAgICAgIENTdHJpbmcgZW5jb2Rl
ZERhdGEgPSBlbmNvZGluZy5lbmNvZGUoZGF0YSwgVVJMRW5jb2RlZEVudGl0aWVzRm9yVW5lbmNv
ZGFibGVzKTsKLSAgICAgICAgICAgIGlmIChlbmNvZGVkRGF0YS5sZW5ndGgoKSkKLSAgICAgICAg
ICAgICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZFJlY2VpdmVCdWZmZXIobV9oYW5kbGUsIFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKGVuY29kZWREYXRhLmRhdGEoKSwgZW5jb2RlZERhdGEubGVuZ3Ro
KCkpLCBvcmlnaW5hbFNpemUpOworICAgICAgICAgICAgYXV0byBlbmNvZGVkRGF0YSA9IGVuY29k
aW5nLmVuY29kZShkYXRhLCBVUkxFbmNvZGVkRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOworICAg
ICAgICAgICAgaWYgKGVuY29kZWREYXRhLnNpemUoKSkKKyAgICAgICAgICAgICAgICBtX2hhbmRs
ZS0+Y2xpZW50KCktPmRpZFJlY2VpdmVCdWZmZXIobV9oYW5kbGUsIFNoYXJlZEJ1ZmZlcjo6Y3Jl
YXRlKFdURk1vdmUoZW5jb2RlZERhdGEpKSwgb3JpZ2luYWxTaXplKTsKICAgICAgICAgfQogICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EZWNvZGVFc2Nh
cGVTZXF1ZW5jZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBl
U2VxdWVuY2VzLmgKaW5kZXggYjhjODM5ZDgwM2M0Zjk3MzdhYWMzZmZkY2RhOTEwOTk0YTAwNDcw
NC4uMTRjZjQxNTM2ZjMwZWQ2NzZjYTJlOGMzNjk5NzFkZjEyZTAzOGZmNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RlY29kZUVzY2FwZVNlcXVlbmNlcy5oCkBA
IC0yNyw4ICsyNyw3IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgRGVjb2RlRXNj
YXBlU2VxdWVuY2VzX2gKLSNkZWZpbmUgRGVjb2RlRXNjYXBlU2VxdWVuY2VzX2gKKyNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5
cGUuaD4KQEAgLTE1NSwxMSArMTU0LDExIEBAIFN0cmluZyBkZWNvZGVFc2NhcGVTZXF1ZW5jZXMo
U3RyaW5nVmlldyBzdHJpbmcsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCiAgICAgcmV0
dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCi1pbmxpbmUgVmVjdG9yPGNoYXI+IGRlY29kZVVS
TEVzY2FwZVNlcXVlbmNlc0FzRGF0YShTdHJpbmdWaWV3IHN0cmluZywgY29uc3QgVGV4dEVuY29k
aW5nJiBlbmNvZGluZykKK2lubGluZSBWZWN0b3I8dWludDhfdD4gZGVjb2RlVVJMRXNjYXBlU2Vx
dWVuY2VzQXNEYXRhKFN0cmluZ1ZpZXcgc3RyaW5nLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29k
aW5nKQogewogICAgIEFTU0VSVChlbmNvZGluZy5pc1ZhbGlkKCkpOwogCi0gICAgVmVjdG9yPGNo
YXI+IHJlc3VsdDsKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OwogICAgIHNpemVfdCBkZWNv
ZGVkUG9zaXRpb24gPSAwOwogICAgIHNpemVfdCBzZWFyY2hQb3NpdGlvbiA9IDA7CiAgICAgd2hp
bGUgKHRydWUpIHsKQEAgLTE3MywxMCArMTcyLDkgQEAgaW5saW5lIFZlY3RvcjxjaGFyPiBkZWNv
ZGVVUkxFc2NhcGVTZXF1ZW5jZXNBc0RhdGEoU3RyaW5nVmlldyBzdHJpbmcsIGNvbnN0IFRleHQK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAg
ICAgICAgIC8vIFN0cmluZ3MgYXJlIGVuY29kZWQgYXMgcmVxdWVzdGVkLgotICAgICAgICBhdXRv
IHN0cmluZ0ZyYWdtZW50ID0gc3RyaW5nLnN1YnN0cmluZyhkZWNvZGVkUG9zaXRpb24sIGVuY29k
ZWRSdW5Qb3NpdGlvbiAtIGRlY29kZWRQb3NpdGlvbik7Ci0gICAgICAgIGF1dG8gZW5jb2RlZFN0
cmluZ0ZyYWdtZW50ID0gZW5jb2RpbmcuZW5jb2RlKHN0cmluZ0ZyYWdtZW50LCBVUkxFbmNvZGVk
RW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGVuY29kZWRT
dHJpbmdGcmFnbWVudC5kYXRhKCksIGVuY29kZWRTdHJpbmdGcmFnbWVudC5sZW5ndGgoKSk7Cisg
ICAgICAgIHJlc3VsdC5hcHBlbmRWZWN0b3IoZW5jb2RpbmcuZW5jb2RlKHN0cmluZy5zdWJzdHJp
bmcoZGVjb2RlZFBvc2l0aW9uLCBlbmNvZGVkUnVuUG9zaXRpb24gLSBkZWNvZGVkUG9zaXRpb24p
LCBVbmVuY29kYWJsZUhhbmRsaW5nOjpVUkxFbmNvZGVkRW50aXRpZXMpKTsKIAogICAgICAgICBp
ZiAoZW5jb2RlZFJ1blBvc2l0aW9uID09IG5vdEZvdW5kKQogICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKQEAgLTE5Miw0ICsxOTAsMyBAQCBpbmxpbmUgVmVjdG9yPGNoYXI+IGRlY29kZVVSTEVz
Y2FwZVNlcXVlbmNlc0FzRGF0YShTdHJpbmdWaWV3IHN0cmluZywgY29uc3QgVGV4dAogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBEZWNvZGVFc2NhcGVTZXF1ZW5jZXNfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuY3BwCmluZGV4IDYzYWVmNDdk
NzM1NDQyNjIzY2Y0NmVjNGYzYzEyYmY1ZDAxZmFhYjMuLjg2Yjg5Y2ZjNDc2ZjAzYjZkYjRmNzhm
YjQyYzE4M2Y0ODk3ZGFkODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dENvZGVjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRD
b2RlYy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApA
QCAtMjcsMjkgKzI3LDI0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGV4dENv
ZGVjLmgiCiAKLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8YXJyYXk+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotVGV4dENvZGVjOjp+VGV4dENvZGVjKCkgPSBkZWZhdWx0OwotCi1pbnQgVGV4dENvZGVjOjpn
ZXRVbmVuY29kYWJsZVJlcGxhY2VtZW50KHVuc2lnbmVkIGNvZGVQb2ludCwgVW5lbmNvZGFibGVI
YW5kbGluZyBoYW5kbGluZywgVW5lbmNvZGFibGVSZXBsYWNlbWVudEFycmF5IHJlcGxhY2VtZW50
KQoraW50IFRleHRDb2RlYzo6Z2V0VW5lbmNvZGFibGVSZXBsYWNlbWVudChVQ2hhcjMyIGNvZGVQ
b2ludCwgVW5lbmNvZGFibGVIYW5kbGluZyBoYW5kbGluZywgVW5lbmNvZGFibGVSZXBsYWNlbWVu
dEFycmF5JiByZXBsYWNlbWVudCkKIHsKICAgICBzd2l0Y2ggKGhhbmRsaW5nKSB7Ci0gICAgICAg
IGNhc2UgUXVlc3Rpb25NYXJrc0ZvclVuZW5jb2RhYmxlczoKLSAgICAgICAgICAgIHJlcGxhY2Vt
ZW50WzBdID0gJz8nOwotICAgICAgICAgICAgcmVwbGFjZW1lbnRbMV0gPSAwOwotICAgICAgICAg
ICAgcmV0dXJuIDE7Ci0gICAgICAgIGNhc2UgRW50aXRpZXNGb3JVbmVuY29kYWJsZXM6Ci0gICAg
ICAgICAgICBzbnByaW50ZihyZXBsYWNlbWVudCwgc2l6ZW9mKFVuZW5jb2RhYmxlUmVwbGFjZW1l
bnRBcnJheSksICImIyV1OyIsIGNvZGVQb2ludCk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50PihzdHJsZW4ocmVwbGFjZW1lbnQpKTsKLSAgICAgICAgY2FzZSBVUkxFbmNvZGVk
RW50aXRpZXNGb3JVbmVuY29kYWJsZXM6Ci0gICAgICAgICAgICBzbnByaW50ZihyZXBsYWNlbWVu
dCwgc2l6ZW9mKFVuZW5jb2RhYmxlUmVwbGFjZW1lbnRBcnJheSksICIlJTI2JSUyMyV1JSUzQiIs
IGNvZGVQb2ludCk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihzdHJsZW4o
cmVwbGFjZW1lbnQpKTsKKyAgICBjYXNlIFVuZW5jb2RhYmxlSGFuZGxpbmc6OlF1ZXN0aW9uTWFy
a3M6CisgICAgICAgIHJlcGxhY2VtZW50LmRhdGEoKVswXSA9ICc/JzsKKyAgICAgICAgcmVwbGFj
ZW1lbnQuZGF0YSgpWzFdID0gMDsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBVbmVuY29k
YWJsZUhhbmRsaW5nOjpFbnRpdGllczoKKyAgICAgICAgcmV0dXJuIHNucHJpbnRmKHJlcGxhY2Vt
ZW50LmRhdGEoKSwgc2l6ZW9mKFVuZW5jb2RhYmxlUmVwbGFjZW1lbnRBcnJheSksICImIyV1OyIs
IGNvZGVQb2ludCk7CisgICAgY2FzZSBVbmVuY29kYWJsZUhhbmRsaW5nOjpVUkxFbmNvZGVkRW50
aXRpZXM6CisgICAgICAgIHJldHVybiBzbnByaW50ZihyZXBsYWNlbWVudC5kYXRhKCksIHNpemVv
ZihVbmVuY29kYWJsZVJlcGxhY2VtZW50QXJyYXkpLCAiJSUyNiUlMjMldSUlM0IiLCBjb2RlUG9p
bnQpOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXBsYWNlbWVudFsw
XSA9IDA7CisgICAgcmVwbGFjZW1lbnQuZGF0YSgpWzBdID0gMDsKICAgICByZXR1cm4gMDsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjLmgKaW5kZXggZjMwY2QxMjYx
NWU1M2UwOTVhNTkyZjM5ZmY4ZTljNzdjYWEzYWE3Zi4uNDgzZTUwMWU2YjhlMmU0MDc4MjlkYmYx
YWEwNDhjNTZmN2FjZDcxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0Q29kZWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2Rl
Yy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFs
ZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI0
LDYxICsyNCwzOSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBUZXh0Q29kZWNf
aAotI2RlZmluZSBUZXh0Q29kZWNfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxtZW1vcnk+
CisjaW5jbHVkZSA8cGFsL3RleHQvVW5lbmNvZGFibGVIYW5kbGluZy5oPgorI2luY2x1ZGUgPHVu
aWNvZGUvdW1hY2hpbmUuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgVGV4dEVuY29kaW5nOwogCi0gICAgLy8gU3BlY2lm
aWVzIHdoYXQgd2lsbCBoYXBwZW4gd2hlbiBhIGNoYXJhY3RlciBpcyBlbmNvdW50ZXJlZCB0aGF0
IGlzCi0gICAgLy8gbm90IGVuY29kYWJsZSBpbiB0aGUgY2hhcmFjdGVyIHNldC4KLSAgICBlbnVt
IFVuZW5jb2RhYmxlSGFuZGxpbmcgewotICAgICAgICAvLyBTdWJzdGl0dXRlcyB0aGUgcmVwbGFj
ZW1lbnQgY2hhcmFjdGVyICI/Ii4KLSAgICAgICAgUXVlc3Rpb25NYXJrc0ZvclVuZW5jb2RhYmxl
cywKK2NsYXNzIFRleHRFbmNvZGluZzsKIAotICAgICAgICAvLyBFbmNvZGVzIHRoZSBjaGFyYWN0
ZXIgYXMgYW4gWE1MIGVudGl0eS4gRm9yIGV4YW1wbGUsIFUrMDZERQotICAgICAgICAvLyB3b3Vs
ZCBiZSAiJiMxNzU4OyIgKDB4NkRFID0gMTc1OCBpbiBvY3RhbCkuCi0gICAgICAgIEVudGl0aWVz
Rm9yVW5lbmNvZGFibGVzLAordXNpbmcgVW5lbmNvZGFibGVSZXBsYWNlbWVudEFycmF5ID0gc3Rk
OjphcnJheTxjaGFyLCAzMj47CiAKLSAgICAgICAgLy8gRW5jb2RlcyB0aGUgY2hhcmFjdGVyIGFz
IGVuIGVudGl0eSBhcyBhYm92ZSwgYnV0IGVzY2FwZWQKLSAgICAgICAgLy8gbm9uLWFscGhhbnVt
ZXJpYyBjaGFyYWN0ZXJzLiBUaGlzIGlzIHVzZWQgaW4gVVJMcy4KLSAgICAgICAgLy8gRm9yIGV4
YW1wbGUsIFUrNkRFIHdvdWxkIGJlICIlMjYlMjMxNzU4JTNCIi4KLSAgICAgICAgVVJMRW5jb2Rl
ZEVudGl0aWVzRm9yVW5lbmNvZGFibGVzCi0gICAgfTsKK2NsYXNzIFRleHRDb2RlYyB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoVGV4dENvZGVjKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgVGV4dENvZGVjKCkgPSBkZWZhdWx0OworICAgIHZpcnR1YWwgflRleHRD
b2RlYygpID0gZGVmYXVsdDsKIAotICAgIHR5cGVkZWYgY2hhciBVbmVuY29kYWJsZVJlcGxhY2Vt
ZW50QXJyYXlbMzJdOworICAgIHZpcnR1YWwgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6
ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3Ip
ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiBlbmNvZGUoU3RyaW5nVmlldywgVW5l
bmNvZGFibGVIYW5kbGluZykgPSAwOwogCi0gICAgY2xhc3MgVGV4dENvZGVjIHsKLSAgICAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoVGV4dENvZGVjKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci0gICAgcHVibGljOgotICAgICAgICBUZXh0Q29kZWMoKSB7IH0KLSAgICAgICAgdmlydHVhbCB+
VGV4dENvZGVjKCk7CisgICAgLy8gRmlsbHMgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHJlcHJl
c2VudGF0aW9uIG9mIHRoZSBnaXZlbgorICAgIC8vIHVuZW5jb2RhYmxlIGNoYXJhY3RlciBpbnRv
IHRoZSBnaXZlbiByZXBsYWNlbWVudCBidWZmZXIuCisgICAgLy8gVGhlIGxlbmd0aCBvZiB0aGUg
c3RyaW5nIChub3QgaW5jbHVkaW5nIHRoZSBudWxsKSB3aWxsIGJlIHJldHVybmVkLgorICAgIHN0
YXRpYyBpbnQgZ2V0VW5lbmNvZGFibGVSZXBsYWNlbWVudChVQ2hhcjMyLCBVbmVuY29kYWJsZUhh
bmRsaW5nLCBVbmVuY29kYWJsZVJlcGxhY2VtZW50QXJyYXkmKTsKK307CiAKLSAgICAgICAgU3Ry
aW5nIGRlY29kZShjb25zdCBjaGFyKiBzdHIsIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2ggPSBm
YWxzZSkKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbCBpZ25vcmVkOwotICAgICAgICAgICAg
cmV0dXJuIGRlY29kZShzdHIsIGxlbmd0aCwgZmx1c2gsIGZhbHNlLCBpZ25vcmVkKTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgdmlydHVhbCBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIq
LCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdF
cnJvcikgPSAwOwotICAgICAgICB2aXJ0dWFsIENTdHJpbmcgZW5jb2RlKGNvbnN0IFVDaGFyKiwg
c2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZykgPSAwOwordXNpbmcgRW5jb2RpbmdO
YW1lUmVnaXN0cmFyID0gdm9pZCAoKikoY29uc3QgY2hhciogYWxpYXMsIGNvbnN0IGNoYXIqIG5h
bWUpOwogCi0gICAgICAgIC8vIEZpbGxzIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyByZXByZXNl
bnRhdGlvbiBvZiB0aGUgZ2l2ZW4KLSAgICAgICAgLy8gdW5lbmNvZGFibGUgY2hhcmFjdGVyIGlu
dG8gdGhlIGdpdmVuIHJlcGxhY2VtZW50IGJ1ZmZlci4gCi0gICAgICAgIC8vIFRoZSBsZW5ndGgg
b2YgdGhlIHN0cmluZyAobm90IGluY2x1ZGluZyB0aGUgbnVsbCkgd2lsbCBiZSByZXR1cm5lZC4K
LSAgICAgICAgc3RhdGljIGludCBnZXRVbmVuY29kYWJsZVJlcGxhY2VtZW50KHVuc2lnbmVkIGNv
ZGVQb2ludCwgVW5lbmNvZGFibGVIYW5kbGluZywgVW5lbmNvZGFibGVSZXBsYWNlbWVudEFycmF5
KTsKLSAgICB9OwotCi0gICAgdHlwZWRlZiB2b2lkICgqRW5jb2RpbmdOYW1lUmVnaXN0cmFyKShj
b25zdCBjaGFyKiBhbGlhcywgY29uc3QgY2hhciogbmFtZSk7Ci0KLSAgICB0eXBlZGVmIHN0ZDo6
dW5pcXVlX3B0cjxUZXh0Q29kZWM+ICgqTmV3VGV4dENvZGVjRnVuY3Rpb24pKGNvbnN0IFRleHRF
bmNvZGluZyYsIGNvbnN0IHZvaWQqIGFkZGl0aW9uYWxEYXRhKTsKLSAgICB0eXBlZGVmIHZvaWQg
KCpUZXh0Q29kZWNSZWdpc3RyYXIpKGNvbnN0IGNoYXIqIG5hbWUsIE5ld1RleHRDb2RlY0Z1bmN0
aW9uLCBjb25zdCB2b2lkKiBhZGRpdGlvbmFsRGF0YSk7Cit1c2luZyBOZXdUZXh0Q29kZWNGdW5j
dGlvbiA9IFdURjo6RnVuY3Rpb248c3RkOjp1bmlxdWVfcHRyPFRleHRDb2RlYz4oKT47Cit1c2lu
ZyBUZXh0Q29kZWNSZWdpc3RyYXIgPSB2b2lkICgqKShjb25zdCBjaGFyKiBuYW1lLCBOZXdUZXh0
Q29kZWNGdW5jdGlvbiYmKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8g
VGV4dENvZGVjX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dENvZGVjSUNVLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNV
LmNwcAppbmRleCA2ZTI3MzY2OTljOGFhNjkzMzdkYWM3ZDMzOTExMDk0NDVmMDYyM2Y1Li5kMmUy
YWU3ZmI5MmZmM2FkOGMyZDljNzNkMjA5NWE5NDI2OWIxYzhlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCwgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3Nr
dXJ5YWtvdiA8YXBAbnlwb3AuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzAsMTAgKzMwLDgg
QEAKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmdSZWdp
c3RyeS5oIgogI2luY2x1ZGUgIlRocmVhZEdsb2JhbERhdGEuaCIKLSNpbmNsdWRlIDx1bmljb2Rl
L3VjbnYuaD4KKyNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDx1bmljb2RlL3VjbnZfY2IuaD4K
LSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMu
aD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KQEAgLTQzLDIzICs0MSw2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY29uc3Qgc2l6ZV90IENvbnZlcnNpb25CdWZmZXJT
aXplID0gMTYzODQ7CiAKLUlDVUNvbnZlcnRlcldyYXBwZXI6On5JQ1VDb252ZXJ0ZXJXcmFwcGVy
KCkKLXsKLSAgICBpZiAoY29udmVydGVyKQotICAgICAgICB1Y252X2Nsb3NlKGNvbnZlcnRlcik7
Ci19Ci0KLXN0YXRpYyBVQ29udmVydGVyKiYgY2FjaGVkQ29udmVydGVySUNVKCkKLXsKLSAgICBy
ZXR1cm4gdGhyZWFkR2xvYmFsRGF0YSgpLmNhY2hlZENvbnZlcnRlcklDVSgpLmNvbnZlcnRlcjsK
LX0KLQotc3RkOjp1bmlxdWVfcHRyPFRleHRDb2RlYz4gVGV4dENvZGVjSUNVOjpjcmVhdGUoY29u
c3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgY29uc3Qgdm9pZCogYWRkaXRpb25hbERhdGEpCi17
Ci0gICAgLy8gTmFtZSBzdHJpbmdzIGFyZSBwZXJzaXN0ZW50bHkga2VwdCBpbiBUZXh0RW5jb2Rp
bmdSZWdpc3RyeSBtYXBzLCBzbyB0aGV5IGFyZSBuZXZlciBkZWxldGVkLgotICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPFRleHRDb2RlY0lDVT4oZW5jb2RpbmcubmFtZSgpLCBzdGF0aWNfY2Fz
dDxjb25zdCBjaGFyKj4oYWRkaXRpb25hbERhdGEpKTsKLX0KLQogI2RlZmluZSBERUNMQVJFX0FM
SUFTRVMoZW5jb2RpbmcsIC4uLikgXAogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbmNv
ZGluZyMjX2FsaWFzZXNbXSB7IF9fVkFfQVJHU19fIH0KIApAQCAtMTY5LDExNCArMTUwLDExNSBA
QCB2b2lkIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJl
Z2lzdHJhciByZWdpc3RyYXIpCiB2b2lkIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJDb2RlY3MoVGV4
dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKIHsKICAgICBmb3IgKGF1dG8mIGVuY29kaW5nTmFt
ZSA6IGVuY29kaW5nTmFtZXMpIHsKKyAgICAgICAgY29uc3QgY2hhciogbmFtZSA9IGVuY29kaW5n
TmFtZS5uYW1lOworCiAgICAgICAgIC8vIFRoZXNlIGVuY29kaW5ncyBjdXJyZW50bHkgZG9uJ3Qg
aGF2ZSBzdGFuZGFyZCBuYW1lcywgc28gd2UgbmVlZCB0byByZWdpc3RlciBlbmNvZGVycyBtYW51
YWxseS4KICAgICAgICAgLy8gaHR0cDovL2RlbW8uaWN1LXByb2plY3Qub3JnL2ljdS1iaW4vY29u
dmV4cAotICAgICAgICBpZiAoIXN0cmNtcChlbmNvZGluZ05hbWUubmFtZSwgIndpbmRvd3MtODc0
IikpIHsKLSAgICAgICAgICAgIHJlZ2lzdHJhcihlbmNvZGluZ05hbWUubmFtZSwgY3JlYXRlLCAi
d2luZG93cy04NzQtMjAwMCIpOworICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAid2luZG93cy04
NzQiKSkgeworICAgICAgICAgICAgcmVnaXN0cmFyKG5hbWUsIFtuYW1lXSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjSUNVPihuYW1lLCAid2luZG93
cy04NzQtMjAwMCIpOworICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgfQotICAgICAgICBpZiAoIXN0cmNtcChlbmNvZGluZ05hbWUubmFtZSwgIndpbmRvd3Mt
OTQ5IikpIHsKLSAgICAgICAgICAgIHJlZ2lzdHJhcihlbmNvZGluZ05hbWUubmFtZSwgY3JlYXRl
LCAid2luZG93cy05NDktMjAwMCIpOworICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAid2luZG93
cy05NDkiKSkgeworICAgICAgICAgICAgcmVnaXN0cmFyKG5hbWUsIFtuYW1lXSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjSUNVPihuYW1lLCAid2lu
ZG93cy05NDktMjAwMCIpOworICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQotICAgICAgICBpZiAoIXN0cmNtcChlbmNvZGluZ05hbWUubmFtZSwgIngtbWFj
LWN5cmlsbGljIikpIHsKLSAgICAgICAgICAgIHJlZ2lzdHJhcihlbmNvZGluZ05hbWUubmFtZSwg
Y3JlYXRlLCAibWFjb3MtN18zLTEwLjIiKTsKKyAgICAgICAgaWYgKCFzdHJjbXAobmFtZSwgIngt
bWFjLWN5cmlsbGljIikpIHsKKyAgICAgICAgICAgIHJlZ2lzdHJhcihuYW1lLCBbbmFtZV0gewor
ICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFRleHRDb2RlY0lDVT4obmFt
ZSwgIm1hY29zLTdfMy0xMC4yIik7CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmICghc3RyY21wKGVuY29kaW5nTmFtZS5uYW1lLCAi
eC1tYWMtZ3JlZWsiKSkgewotICAgICAgICAgICAgcmVnaXN0cmFyKGVuY29kaW5nTmFtZS5uYW1l
LCBjcmVhdGUsICJtYWNvcy02XzItMTAuNCIpOworICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAi
eC1tYWMtZ3JlZWsiKSkgeworICAgICAgICAgICAgcmVnaXN0cmFyKG5hbWUsIFtuYW1lXSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjSUNVPihuYW1l
LCAibWFjb3MtNl8yLTEwLjQiKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFzdHJjbXAoZW5jb2RpbmdOYW1lLm5hbWUsICJ4
LW1hYy1jZW50cmFsZXVycm9tYW4iKSkgewotICAgICAgICAgICAgcmVnaXN0cmFyKGVuY29kaW5n
TmFtZS5uYW1lLCBjcmVhdGUsICJtYWNvcy0yOS0xMC4yIik7CisgICAgICAgIGlmICghc3RyY21w
KG5hbWUsICJ4LW1hYy1jZW50cmFsZXVycm9tYW4iKSkgeworICAgICAgICAgICAgcmVnaXN0cmFy
KG5hbWUsIFtuYW1lXSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8
VGV4dENvZGVjSUNVPihuYW1lLCAibWFjb3MtMjktMTAuMiIpOworICAgICAgICAgICAgfSk7CiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoIXN0cmNtcChlbmNv
ZGluZ05hbWUubmFtZSwgIngtbWFjLXR1cmtpc2giKSkgewotICAgICAgICAgICAgcmVnaXN0cmFy
KGVuY29kaW5nTmFtZS5uYW1lLCBjcmVhdGUsICJtYWNvcy0zNS0xMC4yIik7CisgICAgICAgIGlm
ICghc3RyY21wKG5hbWUsICJ4LW1hYy10dXJraXNoIikpIHsKKyAgICAgICAgICAgIHJlZ2lzdHJh
cihuYW1lLCBbbmFtZV0geworICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVl
PFRleHRDb2RlY0lDVT4obmFtZSwgIm1hY29zLTM1LTEwLjIiKTsKKyAgICAgICAgICAgIH0pOwog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFzdHJjbXAoZW5j
b2RpbmdOYW1lLm5hbWUsICJFVUMtS1IiKSkgewotICAgICAgICAgICAgcmVnaXN0cmFyKGVuY29k
aW5nTmFtZS5uYW1lLCBjcmVhdGUsICJ3aW5kb3dzLTk0OSIpOworICAgICAgICBpZiAoIXN0cmNt
cChuYW1lLCAiRVVDLUtSIikpIHsKKyAgICAgICAgICAgIHJlZ2lzdHJhcihuYW1lLCBbbmFtZV0g
eworICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFRleHRDb2RlY0lDVT4o
bmFtZSwgIndpbmRvd3MtOTQ5Iik7CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9CiAKICAgICAgICAgVUVycm9yQ29kZSBlcnJvciA9IFVfWkVST19FUlJP
UjsKLSAgICAgICAgY29uc3QgY2hhciogY2Fub25pY2FsQ29udmVydGVyTmFtZSA9IHVjbnZfZ2V0
Q2Fub25pY2FsTmFtZShlbmNvZGluZ05hbWUubmFtZSwgIklBTkEiLCAmZXJyb3IpOworICAgICAg
ICBjb25zdCBjaGFyKiBjYW5vbmljYWxDb252ZXJ0ZXJOYW1lID0gdWNudl9nZXRDYW5vbmljYWxO
YW1lKG5hbWUsICJJQU5BIiwgJmVycm9yKTsKICAgICAgICAgQVNTRVJUKFVfU1VDQ0VTUyhlcnJv
cikpOwotICAgICAgICByZWdpc3RyYXIoZW5jb2RpbmdOYW1lLm5hbWUsIGNyZWF0ZSwgY2Fub25p
Y2FsQ29udmVydGVyTmFtZSk7CisgICAgICAgIHJlZ2lzdHJhcihuYW1lLCBbbmFtZSwgY2Fub25p
Y2FsQ29udmVydGVyTmFtZV0geworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8
VGV4dENvZGVjSUNVPihuYW1lLCBjYW5vbmljYWxDb252ZXJ0ZXJOYW1lKTsKKyAgICAgICAgfSk7
CiAgICAgfQogfQogCiBUZXh0Q29kZWNJQ1U6OlRleHRDb2RlY0lDVShjb25zdCBjaGFyKiBlbmNv
ZGluZywgY29uc3QgY2hhciogY2Fub25pY2FsQ29udmVydGVyTmFtZSkKICAgICA6IG1fZW5jb2Rp
bmdOYW1lKGVuY29kaW5nKQogICAgICwgbV9jYW5vbmljYWxDb252ZXJ0ZXJOYW1lKGNhbm9uaWNh
bENvbnZlcnRlck5hbWUpCi0gICAgLCBtX2NvbnZlcnRlcklDVSgwKQotICAgICwgbV9uZWVkc0dC
S0ZhbGxiYWNrcyhmYWxzZSkKIHsKIH0KIAogVGV4dENvZGVjSUNVOjp+VGV4dENvZGVjSUNVKCkK
IHsKLSAgICByZWxlYXNlSUNVQ29udmVydGVyKCk7Ci19Ci0KLXZvaWQgVGV4dENvZGVjSUNVOjpy
ZWxlYXNlSUNVQ29udmVydGVyKCkgY29uc3QKLXsKLSAgICBpZiAobV9jb252ZXJ0ZXJJQ1UpIHsK
LSAgICAgICAgVUNvbnZlcnRlciomIGNhY2hlZENvbnZlcnRlciA9IGNhY2hlZENvbnZlcnRlcklD
VSgpOwotICAgICAgICBpZiAoY2FjaGVkQ29udmVydGVyKQotICAgICAgICAgICAgdWNudl9jbG9z
ZShjYWNoZWRDb252ZXJ0ZXIpOwotICAgICAgICB1Y252X3Jlc2V0KG1fY29udmVydGVySUNVKTsK
LSAgICAgICAgY2FjaGVkQ29udmVydGVyID0gbV9jb252ZXJ0ZXJJQ1U7Ci0gICAgICAgIG1fY29u
dmVydGVySUNVID0gMDsKKyAgICBpZiAobV9jb252ZXJ0ZXIpIHsKKyAgICAgICAgdWNudl9yZXNl
dChtX2NvbnZlcnRlci5nZXQoKSk7CisgICAgICAgIHRocmVhZEdsb2JhbERhdGEoKS5jYWNoZWRD
b252ZXJ0ZXJJQ1UoKS5jb252ZXJ0ZXIgPSBXVEZNb3ZlKG1fY29udmVydGVyKTsKICAgICB9CiB9
CiAKIHZvaWQgVGV4dENvZGVjSUNVOjpjcmVhdGVJQ1VDb252ZXJ0ZXIoKSBjb25zdAogewotICAg
IEFTU0VSVCghbV9jb252ZXJ0ZXJJQ1UpOwotCi0gICAgVUVycm9yQ29kZSBlcnI7CisgICAgQVNT
RVJUKCFtX2NvbnZlcnRlcik7CiAKICAgICBtX25lZWRzR0JLRmFsbGJhY2tzID0gIXN0cmNtcCht
X2VuY29kaW5nTmFtZSwgIkdCSyIpOwogCi0gICAgVUNvbnZlcnRlciomIGNhY2hlZENvbnZlcnRl
ciA9IGNhY2hlZENvbnZlcnRlcklDVSgpOworICAgIGF1dG8mIGNhY2hlZENvbnZlcnRlciA9IHRo
cmVhZEdsb2JhbERhdGEoKS5jYWNoZWRDb252ZXJ0ZXJJQ1UoKS5jb252ZXJ0ZXI7CiAgICAgaWYg
KGNhY2hlZENvbnZlcnRlcikgewotICAgICAgICBlcnIgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAg
IGNvbnN0IGNoYXIqIGNhY2hlZENvbnZlcnRlck5hbWUgPSB1Y252X2dldE5hbWUoY2FjaGVkQ29u
dmVydGVyLCAmZXJyKTsKLSAgICAgICAgaWYgKFVfU1VDQ0VTUyhlcnIpICYmICFzdHJjbXAobV9j
YW5vbmljYWxDb252ZXJ0ZXJOYW1lLCBjYWNoZWRDb252ZXJ0ZXJOYW1lKSkgewotICAgICAgICAg
ICAgbV9jb252ZXJ0ZXJJQ1UgPSBjYWNoZWRDb252ZXJ0ZXI7Ci0gICAgICAgICAgICBjYWNoZWRD
b252ZXJ0ZXIgPSAwOworICAgICAgICBVRXJyb3JDb2RlIGVycm9yID0gVV9aRVJPX0VSUk9SOwor
ICAgICAgICBjb25zdCBjaGFyKiBjYWNoZWRDb252ZXJ0ZXJOYW1lID0gdWNudl9nZXROYW1lKGNh
Y2hlZENvbnZlcnRlci5nZXQoKSwgJmVycm9yKTsKKyAgICAgICAgaWYgKFVfU1VDQ0VTUyhlcnJv
cikgJiYgIXN0cmNtcChtX2Nhbm9uaWNhbENvbnZlcnRlck5hbWUsIGNhY2hlZENvbnZlcnRlck5h
bWUpKSB7CisgICAgICAgICAgICBtX2NvbnZlcnRlciA9IFdURk1vdmUoY2FjaGVkQ29udmVydGVy
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAotICAgIGVyciA9IFVf
WkVST19FUlJPUjsKLSAgICBtX2NvbnZlcnRlcklDVSA9IHVjbnZfb3BlbihtX2Nhbm9uaWNhbENv
bnZlcnRlck5hbWUsICZlcnIpOwotICAgIEFTU0VSVChVX1NVQ0NFU1MoZXJyKSk7Ci0gICAgaWYg
KG1fY29udmVydGVySUNVKQotICAgICAgICB1Y252X3NldEZhbGxiYWNrKG1fY29udmVydGVySUNV
LCBUUlVFKTsKKyAgICBVRXJyb3JDb2RlIGVycm9yID0gVV9aRVJPX0VSUk9SOworICAgIG1fY29u
dmVydGVyID0gSUNVQ29udmVydGVyUHRyIHsgdWNudl9vcGVuKG1fY2Fub25pY2FsQ29udmVydGVy
TmFtZSwgJmVycm9yKSwgdWNudl9jbG9zZSB9OworICAgIGlmIChtX2NvbnZlcnRlcikKKyAgICAg
ICAgdWNudl9zZXRGYWxsYmFjayhtX2NvbnZlcnRlci5nZXQoKSwgVFJVRSk7CiB9CiAKLWludCBU
ZXh0Q29kZWNJQ1U6OmRlY29kZVRvQnVmZmVyKFVDaGFyKiB0YXJnZXQsIFVDaGFyKiB0YXJnZXRM
aW1pdCwgY29uc3QgY2hhciomIHNvdXJjZSwgY29uc3QgY2hhciogc291cmNlTGltaXQsIGludDMy
X3QqIG9mZnNldHMsIGJvb2wgZmx1c2gsIFVFcnJvckNvZGUmIGVycikKK2ludCBUZXh0Q29kZWNJ
Q1U6OmRlY29kZVRvQnVmZmVyKFVDaGFyKiB0YXJnZXQsIFVDaGFyKiB0YXJnZXRMaW1pdCwgY29u
c3QgY2hhciomIHNvdXJjZSwgY29uc3QgY2hhciogc291cmNlTGltaXQsIGludDMyX3QqIG9mZnNl
dHMsIGJvb2wgZmx1c2gsIFVFcnJvckNvZGUmIGVycm9yKQogewogICAgIFVDaGFyKiB0YXJnZXRT
dGFydCA9IHRhcmdldDsKLSAgICBlcnIgPSBVX1pFUk9fRVJST1I7Ci0gICAgdWNudl90b1VuaWNv
ZGUobV9jb252ZXJ0ZXJJQ1UsICZ0YXJnZXQsIHRhcmdldExpbWl0LCAmc291cmNlLCBzb3VyY2VM
aW1pdCwgb2Zmc2V0cywgZmx1c2gsICZlcnIpOworICAgIGVycm9yID0gVV9aRVJPX0VSUk9SOwor
ICAgIHVjbnZfdG9Vbmljb2RlKG1fY29udmVydGVyLmdldCgpLCAmdGFyZ2V0LCB0YXJnZXRMaW1p
dCwgJnNvdXJjZSwgc291cmNlTGltaXQsIG9mZnNldHMsIGZsdXNoLCAmZXJyb3IpOwogICAgIHJl
dHVybiB0YXJnZXQgLSB0YXJnZXRTdGFydDsKIH0KIAogY2xhc3MgRXJyb3JDYWxsYmFja1NldHRl
ciB7CiBwdWJsaWM6Ci0gICAgRXJyb3JDYWxsYmFja1NldHRlcihVQ29udmVydGVyKiBjb252ZXJ0
ZXIsIGJvb2wgc3RvcE9uRXJyb3IpCisgICAgRXJyb3JDYWxsYmFja1NldHRlcihVQ29udmVydGVy
JiBjb252ZXJ0ZXIsIGJvb2wgc3RvcE9uRXJyb3IpCiAgICAgICAgIDogbV9jb252ZXJ0ZXIoY29u
dmVydGVyKQogICAgICAgICAsIG1fc2hvdWxkU3RvcE9uRW5jb2RpbmdFcnJvcnMoc3RvcE9uRXJy
b3IpCiAgICAgewogICAgICAgICBpZiAobV9zaG91bGRTdG9wT25FbmNvZGluZ0Vycm9ycykgewog
ICAgICAgICAgICAgVUVycm9yQ29kZSBlcnIgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAgICAgICB1
Y252X3NldFRvVUNhbGxCYWNrKG1fY29udmVydGVyLCBVQ05WX1RPX1VfQ0FMTEJBQ0tfU1VCU1RJ
VFVURSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDTlZfU1VCX1NUT1BfT05fSUxMRUdB
TCwgJm1fc2F2ZWRBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmbV9zYXZlZENv
bnRleHQsICZlcnIpOworICAgICAgICAgICAgdWNudl9zZXRUb1VDYWxsQmFjaygmbV9jb252ZXJ0
ZXIsIFVDTlZfVE9fVV9DQUxMQkFDS19TVUJTVElUVVRFLCBVQ05WX1NVQl9TVE9QX09OX0lMTEVH
QUwsICZtX3NhdmVkQWN0aW9uLCAmbV9zYXZlZENvbnRleHQsICZlcnIpOwogICAgICAgICAgICAg
QVNTRVJUKGVyciA9PSBVX1pFUk9fRVJST1IpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjg2LDkg
KzI2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIFVFcnJvckNvZGUgZXJyID0gVV9aRVJPX0VS
Uk9SOwogICAgICAgICAgICAgY29uc3Qgdm9pZCogb2xkQ29udGV4dDsKICAgICAgICAgICAgIFVD
b252ZXJ0ZXJUb1VDYWxsYmFjayBvbGRBY3Rpb247Ci0gICAgICAgICAgICB1Y252X3NldFRvVUNh
bGxCYWNrKG1fY29udmVydGVyLCBtX3NhdmVkQWN0aW9uLAotICAgICAgICAgICAgICAgICAgIG1f
c2F2ZWRDb250ZXh0LCAmb2xkQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICZvbGRDb250ZXh0
LCAmZXJyKTsKKyAgICAgICAgICAgIHVjbnZfc2V0VG9VQ2FsbEJhY2soJm1fY29udmVydGVyLCBt
X3NhdmVkQWN0aW9uLCBtX3NhdmVkQ29udGV4dCwgJm9sZEFjdGlvbiwgJm9sZENvbnRleHQsICZl
cnIpOwogICAgICAgICAgICAgQVNTRVJUKG9sZEFjdGlvbiA9PSBVQ05WX1RPX1VfQ0FMTEJBQ0tf
U1VCU1RJVFVURSk7CiAgICAgICAgICAgICBBU1NFUlQoIXN0cmNtcChzdGF0aWNfY2FzdDxjb25z
dCBjaGFyKj4ob2xkQ29udGV4dCksIFVDTlZfU1VCX1NUT1BfT05fSUxMRUdBTCkpOwogICAgICAg
ICAgICAgQVNTRVJUKGVyciA9PSBVX1pFUk9fRVJST1IpOwpAQCAtMjk2LDcgKzI3Niw3IEBAIHB1
YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVUNvbnZlcnRlciogbV9jb252ZXJ0ZXI7Cisg
ICAgVUNvbnZlcnRlciYgbV9jb252ZXJ0ZXI7CiAgICAgYm9vbCBtX3Nob3VsZFN0b3BPbkVuY29k
aW5nRXJyb3JzOwogICAgIGNvbnN0IHZvaWQqIG1fc2F2ZWRDb250ZXh0OwogICAgIFVDb252ZXJ0
ZXJUb1VDYWxsYmFjayBtX3NhdmVkQWN0aW9uOwpAQCAtMzA1LDE2ICsyODUsMTYgQEAgcHJpdmF0
ZToKIFN0cmluZyBUZXh0Q29kZWNJQ1U6OmRlY29kZShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90
IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpCiB7
CiAgICAgLy8gR2V0IGEgY29udmVydGVyIGZvciB0aGUgcGFzc2VkLWluIGVuY29kaW5nLgotICAg
IGlmICghbV9jb252ZXJ0ZXJJQ1UpIHsKKyAgICBpZiAoIW1fY29udmVydGVyKSB7CiAgICAgICAg
IGNyZWF0ZUlDVUNvbnZlcnRlcigpOwotICAgICAgICBBU1NFUlQobV9jb252ZXJ0ZXJJQ1UpOwot
ICAgICAgICBpZiAoIW1fY29udmVydGVySUNVKSB7CisgICAgICAgIGlmICghbV9jb252ZXJ0ZXIp
IHsKICAgICAgICAgICAgIExPR19FUlJPUigiZXJyb3IgY3JlYXRpbmcgSUNVIGVuY29kZXIgZXZl
biB0aG91Z2ggZW5jb2Rpbmcgd2FzIGluIHRhYmxlIik7Ci0gICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CisgICAgICAgICAgICBzYXdFcnJvciA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4g
eyB9OwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIEVycm9yQ2FsbGJhY2tTZXR0ZXIgY2Fs
bGJhY2tTZXR0ZXIobV9jb252ZXJ0ZXJJQ1UsIHN0b3BPbkVycm9yKTsKKyAgICBFcnJvckNhbGxi
YWNrU2V0dGVyIGNhbGxiYWNrU2V0dGVyKCptX2NvbnZlcnRlciwgc3RvcE9uRXJyb3IpOwogCiAg
ICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAKQEAgLTM0MCwxNyArMzIwLDE1IEBAIFN0cmluZyBU
ZXh0Q29kZWNJQ1U6OmRlY29kZShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90IGxlbmd0aCwgYm9v
bCBmbHVzaCwgYm9vbCBzCiAKICAgICBTdHJpbmcgcmVzdWx0U3RyaW5nID0gcmVzdWx0LnRvU3Ry
aW5nKCk7CiAKLSAgICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTcwMTQ+CiAgICAgLy8gU2ltcGxpZmllZCBDaGluZXNlIHBhZ2VzIHVzZSB0aGUgY29kZSBBM0Ew
IHRvIG1lYW4gImZ1bGwtd2lkdGggc3BhY2UiLCBidXQgSUNVIGRlY29kZXMgaXQgYXMgVStFNUU1
LgotICAgIC8vIEZJWE1FOiBzdHJjYXNlY21wIGlzIGxvY2FsZSBzZW5zaXRpdmUsIHdlIHNob3Vs
ZCBub3QgYmUgdXNpbmcgaXQuCi0gICAgaWYgKHN0cmNtcChtX2VuY29kaW5nTmFtZSwgIkdCSyIp
ID09IDAgfHwgc3RyY2FzZWNtcChtX2VuY29kaW5nTmFtZSwgImdiMTgwMzAiKSA9PSAwKQorICAg
IGlmICghc3RyY21wKG1fZW5jb2RpbmdOYW1lLCAiR0JLIikgfHwgZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UobV9lbmNvZGluZ05hbWUsICJnYjE4MDMwIikpCiAgICAgICAgIHJlc3VsdFN0
cmluZy5yZXBsYWNlKDB4RTVFNSwgaWRlb2dyYXBoaWNTcGFjZSk7CiAKICAgICByZXR1cm4gcmVz
dWx0U3RyaW5nOwogfQogCiAvLyBXZSBuZWVkIHRvIGFwcGx5IHRoZXNlIGZhbGxiYWNrcyBvdXJz
ZWx2ZXMgYXMgdGhleSBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgSUNVIGFuZAotLy8g
dGhleSB3ZXJlIHByb3ZpZGVkIGJ5IHRoZSBvbGQgVEVDIGVuY29kaW5nIHBhdGguIE5lZWRlZCB0
byBmaXggPHJkYXI6Ly9wcm9ibGVtLzQ3MDg2ODk+LgorLy8gdGhleSB3ZXJlIHByb3ZpZGVkIGJ5
IHRoZSBNYWMgVEVDIGVuY29kaW5nIHBhdGguIE5lZWRlZCB0byBmaXggPHJkYXI6Ly9wcm9ibGVt
LzQ3MDg2ODk+Lgogc3RhdGljIFVDaGFyIGZhbGxiYWNrRm9yR0JLKFVDaGFyMzIgY2hhcmFjdGVy
KQogewogICAgIHN3aXRjaCAoY2hhcmFjdGVyKSB7CkBAIC0zNjksMTMwICszNDcsMTIyIEBAIHN0
YXRpYyBVQ2hhciBmYWxsYmFja0ZvckdCSyhVQ2hhcjMyIGNoYXJhY3RlcikKIC8vIEludmFsaWQg
Y2hhcmFjdGVyIGhhbmRsZXIgd2hlbiB3cml0aW5nIGVzY2FwZWQgZW50aXRpZXMgZm9yIHVucmVw
cmVzZW50YWJsZQogLy8gY2hhcmFjdGVycy4gU2VlIHRoZSBkZWNsYXJhdGlvbiBvZiBUZXh0Q29k
ZWM6OmVuY29kZSBmb3IgbW9yZS4KIHN0YXRpYyB2b2lkIHVybEVzY2FwZWRFbnRpdHlDYWxsYmFj
ayhjb25zdCB2b2lkKiBjb250ZXh0LCBVQ29udmVydGVyRnJvbVVuaWNvZGVBcmdzKiBmcm9tVUFy
Z3MsIGNvbnN0IFVDaGFyKiBjb2RlVW5pdHMsIGludDMyX3QgbGVuZ3RoLAotICAgIFVDaGFyMzIg
Y29kZVBvaW50LCBVQ29udmVydGVyQ2FsbGJhY2tSZWFzb24gcmVhc29uLCBVRXJyb3JDb2RlKiBl
cnIpCisgICAgVUNoYXIzMiBjb2RlUG9pbnQsIFVDb252ZXJ0ZXJDYWxsYmFja1JlYXNvbiByZWFz
b24sIFVFcnJvckNvZGUqIGVycm9yKQogewogICAgIGlmIChyZWFzb24gPT0gVUNOVl9VTkFTU0lH
TkVEKSB7Ci0gICAgICAgICplcnIgPSBVX1pFUk9fRVJST1I7Ci0KKyAgICAgICAgKmVycm9yID0g
VV9aRVJPX0VSUk9SOwogICAgICAgICBVbmVuY29kYWJsZVJlcGxhY2VtZW50QXJyYXkgZW50aXR5
OwotICAgICAgICBpbnQgZW50aXR5TGVuID0gVGV4dENvZGVjOjpnZXRVbmVuY29kYWJsZVJlcGxh
Y2VtZW50KGNvZGVQb2ludCwgVVJMRW5jb2RlZEVudGl0aWVzRm9yVW5lbmNvZGFibGVzLCBlbnRp
dHkpOwotICAgICAgICB1Y252X2NiRnJvbVVXcml0ZUJ5dGVzKGZyb21VQXJncywgZW50aXR5LCBl
bnRpdHlMZW4sIDAsIGVycik7CisgICAgICAgIGludCBlbnRpdHlMZW4gPSBUZXh0Q29kZWM6Omdl
dFVuZW5jb2RhYmxlUmVwbGFjZW1lbnQoY29kZVBvaW50LCBVbmVuY29kYWJsZUhhbmRsaW5nOjpV
UkxFbmNvZGVkRW50aXRpZXMsIGVudGl0eSk7CisgICAgICAgIHVjbnZfY2JGcm9tVVdyaXRlQnl0
ZXMoZnJvbVVBcmdzLCBlbnRpdHkuZGF0YSgpLCBlbnRpdHlMZW4sIDAsIGVycm9yKTsKICAgICB9
IGVsc2UKLSAgICAgICAgVUNOVl9GUk9NX1VfQ0FMTEJBQ0tfRVNDQVBFKGNvbnRleHQsIGZyb21V
QXJncywgY29kZVVuaXRzLCBsZW5ndGgsIGNvZGVQb2ludCwgcmVhc29uLCBlcnIpOworICAgICAg
ICBVQ05WX0ZST01fVV9DQUxMQkFDS19FU0NBUEUoY29udGV4dCwgZnJvbVVBcmdzLCBjb2RlVW5p
dHMsIGxlbmd0aCwgY29kZVBvaW50LCByZWFzb24sIGVycm9yKTsKIH0KIAogLy8gU3Vic3RpdHV0
ZXMgc3BlY2lhbCBHQksgY2hhcmFjdGVycywgZXNjYXBpbmcgYWxsIG90aGVyIHVuYXNzaWduZWQg
ZW50aXRpZXMuCiBzdGF0aWMgdm9pZCBnYmtDYWxsYmFja0VzY2FwZShjb25zdCB2b2lkKiBjb250
ZXh0LCBVQ29udmVydGVyRnJvbVVuaWNvZGVBcmdzKiBmcm9tVUFyZ3MsIGNvbnN0IFVDaGFyKiBj
b2RlVW5pdHMsIGludDMyX3QgbGVuZ3RoLAotICAgIFVDaGFyMzIgY29kZVBvaW50LCBVQ29udmVy
dGVyQ2FsbGJhY2tSZWFzb24gcmVhc29uLCBVRXJyb3JDb2RlKiBlcnIpIAorICAgIFVDaGFyMzIg
Y29kZVBvaW50LCBVQ29udmVydGVyQ2FsbGJhY2tSZWFzb24gcmVhc29uLCBVRXJyb3JDb2RlKiBl
cnJvcikKIHsKICAgICBVQ2hhciBvdXRDaGFyOwogICAgIGlmIChyZWFzb24gPT0gVUNOVl9VTkFT
U0lHTkVEICYmIChvdXRDaGFyID0gZmFsbGJhY2tGb3JHQksoY29kZVBvaW50KSkpIHsKICAgICAg
ICAgY29uc3QgVUNoYXIqIHNvdXJjZSA9ICZvdXRDaGFyOwotICAgICAgICAqZXJyID0gVV9aRVJP
X0VSUk9SOwotICAgICAgICB1Y252X2NiRnJvbVVXcml0ZVVDaGFycyhmcm9tVUFyZ3MsICZzb3Vy
Y2UsIHNvdXJjZSArIDEsIDAsIGVycik7CisgICAgICAgICplcnJvciA9IFVfWkVST19FUlJPUjsK
KyAgICAgICAgdWNudl9jYkZyb21VV3JpdGVVQ2hhcnMoZnJvbVVBcmdzLCAmc291cmNlLCBzb3Vy
Y2UgKyAxLCAwLCBlcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgVUNOVl9GUk9N
X1VfQ0FMTEJBQ0tfRVNDQVBFKGNvbnRleHQsIGZyb21VQXJncywgY29kZVVuaXRzLCBsZW5ndGgs
IGNvZGVQb2ludCwgcmVhc29uLCBlcnIpOworICAgIFVDTlZfRlJPTV9VX0NBTExCQUNLX0VTQ0FQ
RShjb250ZXh0LCBmcm9tVUFyZ3MsIGNvZGVVbml0cywgbGVuZ3RoLCBjb2RlUG9pbnQsIHJlYXNv
biwgZXJyb3IpOwogfQogCiAvLyBDb21iaW5lcyBib3RoIGdia1VybEVzY2FwZWRFbnRpdHlDYWxs
YmFjayBhbmQgR0JLIGNoYXJhY3RlciBzdWJzdGl0dXRpb24uCiBzdGF0aWMgdm9pZCBnYmtVcmxF
c2NhcGVkRW50aXR5Q2FsbGFjayhjb25zdCB2b2lkKiBjb250ZXh0LCBVQ29udmVydGVyRnJvbVVu
aWNvZGVBcmdzKiBmcm9tVUFyZ3MsIGNvbnN0IFVDaGFyKiBjb2RlVW5pdHMsIGludDMyX3QgbGVu
Z3RoLAotICAgIFVDaGFyMzIgY29kZVBvaW50LCBVQ29udmVydGVyQ2FsbGJhY2tSZWFzb24gcmVh
c29uLCBVRXJyb3JDb2RlKiBlcnIpIAorICAgIFVDaGFyMzIgY29kZVBvaW50LCBVQ29udmVydGVy
Q2FsbGJhY2tSZWFzb24gcmVhc29uLCBVRXJyb3JDb2RlKiBlcnJvcikKIHsKICAgICBpZiAocmVh
c29uID09IFVDTlZfVU5BU1NJR05FRCkgewogICAgICAgICBpZiAoVUNoYXIgb3V0Q2hhciA9IGZh
bGxiYWNrRm9yR0JLKGNvZGVQb2ludCkpIHsKICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBzb3Vy
Y2UgPSAmb3V0Q2hhcjsKLSAgICAgICAgICAgICplcnIgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAg
ICAgICB1Y252X2NiRnJvbVVXcml0ZVVDaGFycyhmcm9tVUFyZ3MsICZzb3VyY2UsIHNvdXJjZSAr
IDEsIDAsIGVycik7CisgICAgICAgICAgICAqZXJyb3IgPSBVX1pFUk9fRVJST1I7CisgICAgICAg
ICAgICB1Y252X2NiRnJvbVVXcml0ZVVDaGFycyhmcm9tVUFyZ3MsICZzb3VyY2UsIHNvdXJjZSAr
IDEsIDAsIGVycm9yKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICB1
cmxFc2NhcGVkRW50aXR5Q2FsbGJhY2soY29udGV4dCwgZnJvbVVBcmdzLCBjb2RlVW5pdHMsIGxl
bmd0aCwgY29kZVBvaW50LCByZWFzb24sIGVycik7CisgICAgICAgIHVybEVzY2FwZWRFbnRpdHlD
YWxsYmFjayhjb250ZXh0LCBmcm9tVUFyZ3MsIGNvZGVVbml0cywgbGVuZ3RoLCBjb2RlUG9pbnQs
IHJlYXNvbiwgZXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIFVDTlZfRlJPTV9V
X0NBTExCQUNLX0VTQ0FQRShjb250ZXh0LCBmcm9tVUFyZ3MsIGNvZGVVbml0cywgbGVuZ3RoLCBj
b2RlUG9pbnQsIHJlYXNvbiwgZXJyKTsKKyAgICBVQ05WX0ZST01fVV9DQUxMQkFDS19FU0NBUEUo
Y29udGV4dCwgZnJvbVVBcmdzLCBjb2RlVW5pdHMsIGxlbmd0aCwgY29kZVBvaW50LCByZWFzb24s
IGVycm9yKTsKIH0KIAogc3RhdGljIHZvaWQgZ2JrQ2FsbGJhY2tTdWJzdGl0dXRlKGNvbnN0IHZv
aWQqIGNvbnRleHQsIFVDb252ZXJ0ZXJGcm9tVW5pY29kZUFyZ3MqIGZyb21VQXJncywgY29uc3Qg
VUNoYXIqIGNvZGVVbml0cywgaW50MzJfdCBsZW5ndGgsCi0gICAgVUNoYXIzMiBjb2RlUG9pbnQs
IFVDb252ZXJ0ZXJDYWxsYmFja1JlYXNvbiByZWFzb24sIFVFcnJvckNvZGUqIGVycikgCisgICAg
VUNoYXIzMiBjb2RlUG9pbnQsIFVDb252ZXJ0ZXJDYWxsYmFja1JlYXNvbiByZWFzb24sIFVFcnJv
ckNvZGUqIGVycm9yKQogewogICAgIFVDaGFyIG91dENoYXI7CiAgICAgaWYgKHJlYXNvbiA9PSBV
Q05WX1VOQVNTSUdORUQgJiYgKG91dENoYXIgPSBmYWxsYmFja0ZvckdCSyhjb2RlUG9pbnQpKSkg
ewogICAgICAgICBjb25zdCBVQ2hhciogc291cmNlID0gJm91dENoYXI7Ci0gICAgICAgICplcnIg
PSBVX1pFUk9fRVJST1I7Ci0gICAgICAgIHVjbnZfY2JGcm9tVVdyaXRlVUNoYXJzKGZyb21VQXJn
cywgJnNvdXJjZSwgc291cmNlICsgMSwgMCwgZXJyKTsKKyAgICAgICAgKmVycm9yID0gVV9aRVJP
X0VSUk9SOworICAgICAgICB1Y252X2NiRnJvbVVXcml0ZVVDaGFycyhmcm9tVUFyZ3MsICZzb3Vy
Y2UsIHNvdXJjZSArIDEsIDAsIGVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBV
Q05WX0ZST01fVV9DQUxMQkFDS19TVUJTVElUVVRFKGNvbnRleHQsIGZyb21VQXJncywgY29kZVVu
aXRzLCBsZW5ndGgsIGNvZGVQb2ludCwgcmVhc29uLCBlcnIpOworICAgIFVDTlZfRlJPTV9VX0NB
TExCQUNLX1NVQlNUSVRVVEUoY29udGV4dCwgZnJvbVVBcmdzLCBjb2RlVW5pdHMsIGxlbmd0aCwg
Y29kZVBvaW50LCByZWFzb24sIGVycm9yKTsKIH0KIAotQ1N0cmluZyBUZXh0Q29kZWNJQ1U6OmVu
Y29kZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVI
YW5kbGluZyBoYW5kbGluZykKK1ZlY3Rvcjx1aW50OF90PiBUZXh0Q29kZWNJQ1U6OmVuY29kZShT
dHJpbmdWaWV3IHN0cmluZywgVW5lbmNvZGFibGVIYW5kbGluZyBoYW5kbGluZykKIHsKLSAgICBp
ZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuICIiOworICAgIGlmIChzdHJpbmcuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4geyB9OwogCi0gICAgaWYgKCFtX2NvbnZlcnRlcklDVSkKKyAgICBp
ZiAoIW1fY29udmVydGVyKSB7CiAgICAgICAgIGNyZWF0ZUlDVUNvbnZlcnRlcigpOwotICAgIGlm
ICghbV9jb252ZXJ0ZXJJQ1UpCi0gICAgICAgIHJldHVybiBDU3RyaW5nKCk7CisgICAgICAgIGlm
ICghbV9jb252ZXJ0ZXIpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgIH0KIAogICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgc2VlIGlmIHRoZXJlIGlzICJmb3JjZSBBU0NJSSByYW5nZSIgbW9k
ZSBpbiBJQ1U7CiAgICAgLy8gdW50aWwgdGhlbiwgd2UgY2hhbmdlIHRoZSBiYWNrc2xhc2ggaW50
byBhIHllbiBzaWduLgogICAgIC8vIEVuY29kaW5nIHdpbGwgY2hhbmdlIHRoZSB5ZW4gc2lnbiBi
YWNrIGludG8gYSBiYWNrc2xhc2guCi0gICAgVmVjdG9yPFVDaGFyPiBjb3B5OwotICAgIGNvbnN0
IFVDaGFyKiBzb3VyY2UgPSBjaGFyYWN0ZXJzOworICAgIFN0cmluZyBjb3B5OwogICAgIGlmIChz
aG91bGRTaG93QmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbEluKG1fZW5jb2RpbmdOYW1lKSkgewot
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAg
ICBpZiAoY2hhcmFjdGVyc1tpXSA9PSAnXFwnKSB7Ci0gICAgICAgICAgICAgICAgY29weS5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3Qg
aiA9IDA7IGogPCBpOyArK2opCi0gICAgICAgICAgICAgICAgICAgIGNvcHkudW5jaGVja2VkQXBw
ZW5kKGNoYXJhY3RlcnNbal0pOwotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpOyBq
IDwgbGVuZ3RoOyArK2opIHsKLSAgICAgICAgICAgICAgICAgICAgVUNoYXIgY2hhcmFjdGVyID0g
Y2hhcmFjdGVyc1tqXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnXFwn
KQotICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyID0geWVuU2lnbjsKLSAgICAgICAg
ICAgICAgICAgICAgY29weS51bmNoZWNrZWRBcHBlbmQoY2hhcmFjdGVyKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgc291cmNlID0gY29weS5kYXRhKCk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgY29weSA9IHN0
cmluZy50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCk7CisgICAgICAgIGNvcHkucmVwbGFjZSgnXFwn
LCB5ZW5TaWduKTsKKyAgICAgICAgc3RyaW5nID0gY29weTsKICAgICB9Ci0gICAgY29uc3QgVUNo
YXIqIHNvdXJjZUxpbWl0ID0gc291cmNlICsgbGVuZ3RoOwotCi0gICAgVUVycm9yQ29kZSBlcnIg
PSBVX1pFUk9fRVJST1I7CiAKKyAgICBVRXJyb3JDb2RlIGVycm9yOwogICAgIHN3aXRjaCAoaGFu
ZGxpbmcpIHsKLSAgICAgICAgY2FzZSBRdWVzdGlvbk1hcmtzRm9yVW5lbmNvZGFibGVzOgotICAg
ICAgICAgICAgdWNudl9zZXRTdWJzdENoYXJzKG1fY29udmVydGVySUNVLCAiPyIsIDEsICZlcnIp
OwotICAgICAgICAgICAgdWNudl9zZXRGcm9tVUNhbGxCYWNrKG1fY29udmVydGVySUNVLCBtX25l
ZWRzR0JLRmFsbGJhY2tzID8gZ2JrQ2FsbGJhY2tTdWJzdGl0dXRlIDogVUNOVl9GUk9NX1VfQ0FM
TEJBQ0tfU1VCU1RJVFVURSwgMCwgMCwgMCwgJmVycik7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBFbnRpdGllc0ZvclVuZW5jb2RhYmxlczoKLSAgICAgICAgICAgIHVjbnZfc2V0
RnJvbVVDYWxsQmFjayhtX2NvbnZlcnRlcklDVSwgbV9uZWVkc0dCS0ZhbGxiYWNrcyA/IGdia0Nh
bGxiYWNrRXNjYXBlIDogVUNOVl9GUk9NX1VfQ0FMTEJBQ0tfRVNDQVBFLCBVQ05WX0VTQ0FQRV9Y
TUxfREVDLCAwLCAwLCAmZXJyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVS
TEVuY29kZWRFbnRpdGllc0ZvclVuZW5jb2RhYmxlczoKLSAgICAgICAgICAgIHVjbnZfc2V0RnJv
bVVDYWxsQmFjayhtX2NvbnZlcnRlcklDVSwgbV9uZWVkc0dCS0ZhbGxiYWNrcyA/IGdia1VybEVz
Y2FwZWRFbnRpdHlDYWxsYWNrIDogdXJsRXNjYXBlZEVudGl0eUNhbGxiYWNrLCAwLCAwLCAwLCAm
ZXJyKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgVW5lbmNvZGFibGVIYW5kbGluZzo6
UXVlc3Rpb25NYXJrczoKKyAgICAgICAgZXJyb3IgPSBVX1pFUk9fRVJST1I7CisgICAgICAgIHVj
bnZfc2V0U3Vic3RDaGFycyhtX2NvbnZlcnRlci5nZXQoKSwgIj8iLCAxLCAmZXJyb3IpOworICAg
ICAgICBpZiAoVV9GQUlMVVJFKGVycm9yKSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAg
ICAgIGVycm9yID0gVV9aRVJPX0VSUk9SOworICAgICAgICB1Y252X3NldEZyb21VQ2FsbEJhY2so
bV9jb252ZXJ0ZXIuZ2V0KCksIG1fbmVlZHNHQktGYWxsYmFja3MgPyBnYmtDYWxsYmFja1N1YnN0
aXR1dGUgOiBVQ05WX0ZST01fVV9DQUxMQkFDS19TVUJTVElUVVRFLCAwLCAwLCAwLCAmZXJyb3Ip
OworICAgICAgICBpZiAoVV9GQUlMVVJFKGVycm9yKSkKKyAgICAgICAgICAgIHJldHVybiB7IH07
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVW5lbmNvZGFibGVIYW5kbGluZzo6RW50aXRpZXM6
CisgICAgICAgIGVycm9yID0gVV9aRVJPX0VSUk9SOworICAgICAgICB1Y252X3NldEZyb21VQ2Fs
bEJhY2sobV9jb252ZXJ0ZXIuZ2V0KCksIG1fbmVlZHNHQktGYWxsYmFja3MgPyBnYmtDYWxsYmFj
a0VzY2FwZSA6IFVDTlZfRlJPTV9VX0NBTExCQUNLX0VTQ0FQRSwgVUNOVl9FU0NBUEVfWE1MX0RF
QywgMCwgMCwgJmVycm9yKTsKKyAgICAgICAgaWYgKFVfRkFJTFVSRShlcnJvcikpCisgICAgICAg
ICAgICByZXR1cm4geyB9OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFVuZW5jb2RhYmxlSGFu
ZGxpbmc6OlVSTEVuY29kZWRFbnRpdGllczoKKyAgICAgICAgZXJyb3IgPSBVX1pFUk9fRVJST1I7
CisgICAgICAgIHVjbnZfc2V0RnJvbVVDYWxsQmFjayhtX2NvbnZlcnRlci5nZXQoKSwgbV9uZWVk
c0dCS0ZhbGxiYWNrcyA/IGdia1VybEVzY2FwZWRFbnRpdHlDYWxsYWNrIDogdXJsRXNjYXBlZEVu
dGl0eUNhbGxiYWNrLCAwLCAwLCAwLCAmZXJyb3IpOworICAgICAgICBpZiAoVV9GQUlMVVJFKGVy
cm9yKSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIGJyZWFrOwogICAgIH0KIAot
ICAgIEFTU0VSVChVX1NVQ0NFU1MoZXJyKSk7Ci0gICAgaWYgKFVfRkFJTFVSRShlcnIpKQotICAg
ICAgICByZXR1cm4gQ1N0cmluZygpOworICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0g
c3RyaW5nLnVwY29udmVydGVkQ2hhcmFjdGVycygpOworICAgIGF1dG8qIHNvdXJjZSA9IHVwY29u
dmVydGVkQ2hhcmFjdGVycy5nZXQoKTsKKyAgICBhdXRvKiBzb3VyY2VMaW1pdCA9IHNvdXJjZSAr
IHN0cmluZy5sZW5ndGgoKTsKIAotICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7Ci0gICAgc2l6ZV90
IHNpemUgPSAwOworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7CiAgICAgZG8gewogICAgICAg
ICBjaGFyIGJ1ZmZlcltDb252ZXJzaW9uQnVmZmVyU2l6ZV07CiAgICAgICAgIGNoYXIqIHRhcmdl
dCA9IGJ1ZmZlcjsKICAgICAgICAgY2hhciogdGFyZ2V0TGltaXQgPSB0YXJnZXQgKyBDb252ZXJz
aW9uQnVmZmVyU2l6ZTsKLSAgICAgICAgZXJyID0gVV9aRVJPX0VSUk9SOwotICAgICAgICB1Y252
X2Zyb21Vbmljb2RlKG1fY29udmVydGVySUNVLCAmdGFyZ2V0LCB0YXJnZXRMaW1pdCwgJnNvdXJj
ZSwgc291cmNlTGltaXQsIDAsIHRydWUsICZlcnIpOwotICAgICAgICBzaXplX3QgY291bnQgPSB0
YXJnZXQgLSBidWZmZXI7Ci0gICAgICAgIHJlc3VsdC5ncm93KHNpemUgKyBjb3VudCk7Ci0gICAg
ICAgIG1lbWNweShyZXN1bHQuZGF0YSgpICsgc2l6ZSwgYnVmZmVyLCBjb3VudCk7Ci0gICAgICAg
IHNpemUgKz0gY291bnQ7Ci0gICAgfSB3aGlsZSAoZXJyID09IFVfQlVGRkVSX09WRVJGTE9XX0VS
Uk9SKTsKLQotICAgIHJldHVybiBDU3RyaW5nKHJlc3VsdC5kYXRhKCksIHNpemUpOworICAgICAg
ICBlcnJvciA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgdWNudl9mcm9tVW5pY29kZShtX2NvbnZl
cnRlci5nZXQoKSwgJnRhcmdldCwgdGFyZ2V0TGltaXQsICZzb3VyY2UsIHNvdXJjZUxpbWl0LCAw
LCB0cnVlLCAmZXJyb3IpOworICAgICAgICByZXN1bHQuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KGJ1ZmZlciksIHRhcmdldCAtIGJ1ZmZlcik7CisgICAgfSB3aGlsZSAoZXJyb3Ig
PT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dENvZGVjSUNVLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRD
b2RlY0lDVS5oCmluZGV4IDBjMTc5OGM5YmY3YWU1M2ViN2MzN2RlNWY0MjhjNGIxN2U3NWQwNWEu
LmFiZmQ3MDk4NjBlMTJlMWQyZDA4OGQ5MzliYjUxMDcxZWE5ZDYxNTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDcsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFr
b3YgPGFwQG55cG9wLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI0LDU0ICsyNCw0NSBAQAog
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBUZXh0Q29kZWNJQ1VfaAotI2RlZmluZSBU
ZXh0Q29kZWNJQ1VfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJUZXh0Q29kZWMuaCIKLSNp
bmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgotCi10eXBlZGVmIHN0cnVjdCBVQ29udmVydGVyIFVD
b252ZXJ0ZXI7CisjaW5jbHVkZSA8dW5pY29kZS91Y252Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotICAgIGNsYXNzIFRleHRDb2RlY0lDVSA6IHB1YmxpYyBUZXh0Q29kZWMgewotICAgIHB1
YmxpYzoKLSAgICAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxUZXh0Q29kZWM+IGNyZWF0ZShj
b25zdCBUZXh0RW5jb2RpbmcmLCBjb25zdCB2b2lkKiBhZGRpdGlvbmFsRGF0YSk7Cit1c2luZyBJ
Q1VDb252ZXJ0ZXJQdHIgPSBzdGQ6OnVuaXF1ZV9wdHI8VUNvbnZlcnRlciwgdm9pZCAoKikoVUNv
bnZlcnRlciopPjsKIAotICAgICAgICBUZXh0Q29kZWNJQ1UoY29uc3QgY2hhciogZW5jb2Rpbmcs
IGNvbnN0IGNoYXIqIGNhbm9uaWNhbENvbnZlcnRlck5hbWUpOworY2xhc3MgVGV4dENvZGVjSUNV
IDogcHVibGljIFRleHRDb2RlYyB7CitwdWJsaWM6CisgICAgVGV4dENvZGVjSUNVKGNvbnN0IGNo
YXIqIGVuY29kaW5nLCBjb25zdCBjaGFyKiBjYW5vbmljYWxDb252ZXJ0ZXJOYW1lKTsKKyAgICB2
aXJ0dWFsIH5UZXh0Q29kZWNJQ1UoKTsKIAotICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckVu
Y29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyKTsKLSAgICAgICAgc3RhdGljIHZvaWQg
cmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyKTsKKyAgICBzdGF0aWMgdm9pZCByZWdp
c3RlckVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyKTsKKyAgICBzdGF0aWMgdm9p
ZCByZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIpOwogCi0gICAgICAgIHZpcnR1YWwg
flRleHRDb2RlY0lDVSgpOworcHJpdmF0ZToKKyAgICBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIq
LCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdF
cnJvcikgZmluYWw7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZShTdHJpbmdWaWV3LCBVbmVu
Y29kYWJsZUhhbmRsaW5nKSBmaW5hbDsKIAotICAgIHByaXZhdGU6Ci0gICAgICAgIFN0cmluZyBk
ZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9u
RXJyb3IsIGJvb2wmIHNhd0Vycm9yKSBvdmVycmlkZTsKLSAgICAgICAgQ1N0cmluZyBlbmNvZGUo
Y29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5nKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGNyZWF0ZUlDVUNvbnZlcnRlcigpIGNvbnN0OworICAgIHZvaWQgcmVsZWFz
ZUlDVUNvbnZlcnRlcigpIGNvbnN0OworICAgIGJvb2wgbmVlZHNHQktGYWxsYmFja3MoKSBjb25z
dCB7IHJldHVybiBtX25lZWRzR0JLRmFsbGJhY2tzOyB9CisgICAgdm9pZCBzZXROZWVkc0dCS0Zh
bGxiYWNrcyhib29sIG5lZWRzRmFsbGJhY2tzKSB7IG1fbmVlZHNHQktGYWxsYmFja3MgPSBuZWVk
c0ZhbGxiYWNrczsgfQogCi0gICAgICAgIHZvaWQgY3JlYXRlSUNVQ29udmVydGVyKCkgY29uc3Q7
Ci0gICAgICAgIHZvaWQgcmVsZWFzZUlDVUNvbnZlcnRlcigpIGNvbnN0OwotICAgICAgICBib29s
IG5lZWRzR0JLRmFsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc0dCS0ZhbGxiYWNrczsg
fQotICAgICAgICB2b2lkIHNldE5lZWRzR0JLRmFsbGJhY2tzKGJvb2wgbmVlZHNGYWxsYmFja3Mp
IHsgbV9uZWVkc0dCS0ZhbGxiYWNrcyA9IG5lZWRzRmFsbGJhY2tzOyB9Ci0gICAgICAgIAotICAg
ICAgICBpbnQgZGVjb2RlVG9CdWZmZXIoVUNoYXIqIGJ1ZmZlciwgVUNoYXIqIGJ1ZmZlckxpbWl0
LCBjb25zdCBjaGFyKiYgc291cmNlLAotICAgICAgICAgICAgY29uc3QgY2hhciogc291cmNlTGlt
aXQsIGludDMyX3QqIG9mZnNldHMsIGJvb2wgZmx1c2gsIFVFcnJvckNvZGUmIGVycik7CisgICAg
aW50IGRlY29kZVRvQnVmZmVyKFVDaGFyKiBidWZmZXIsIFVDaGFyKiBidWZmZXJMaW1pdCwgY29u
c3QgY2hhciomIHNvdXJjZSwgY29uc3QgY2hhciogc291cmNlTGltaXQsIGludDMyX3QqIG9mZnNl
dHMsIGJvb2wgZmx1c2gsIFVFcnJvckNvZGUmKTsKIAotICAgICAgICBjb25zdCBjaGFyKiBjb25z
dCBtX2VuY29kaW5nTmFtZTsKLSAgICAgICAgY29uc3QgY2hhciogY29uc3QgbV9jYW5vbmljYWxD
b252ZXJ0ZXJOYW1lOwotICAgICAgICBtdXRhYmxlIFVDb252ZXJ0ZXIqIG1fY29udmVydGVySUNV
OwotICAgICAgICBtdXRhYmxlIGJvb2wgbV9uZWVkc0dCS0ZhbGxiYWNrczsKLSAgICB9OworICAg
IGNvbnN0IGNoYXIqIGNvbnN0IG1fZW5jb2RpbmdOYW1lOworICAgIGNvbnN0IGNoYXIqIGNvbnN0
IG1fY2Fub25pY2FsQ29udmVydGVyTmFtZTsKKyAgICBtdXRhYmxlIElDVUNvbnZlcnRlclB0ciBt
X2NvbnZlcnRlciB7IG51bGxwdHIsIHVjbnZfY2xvc2UgfTsKKyAgICBtdXRhYmxlIGJvb2wgbV9u
ZWVkc0dCS0ZhbGxiYWNrcyB7IGZhbHNlIH07Cit9OwogCi0gICAgc3RydWN0IElDVUNvbnZlcnRl
cldyYXBwZXIgewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJQ1VDb252ZXJ0ZXJXcmFw
cGVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICBJQ1VD
b252ZXJ0ZXJXcmFwcGVyKCkgOiBjb252ZXJ0ZXIoMCkgeyB9Ci0gICAgICAgIH5JQ1VDb252ZXJ0
ZXJXcmFwcGVyKCk7CitzdHJ1Y3QgSUNVQ29udmVydGVyV3JhcHBlciB7CisgICAgSUNVQ29udmVy
dGVyUHRyIGNvbnZlcnRlciB7IG51bGxwdHIsIHVjbnZfY2xvc2UgfTsKIAotICAgICAgICBVQ29u
dmVydGVyKiBjb252ZXJ0ZXI7Ci0gICAgfTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIFRleHRDb2RlY0lDVV9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGlu
MS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5jcHAK
aW5kZXggMDdhNmQxNjgzOWRhZWQ1OWM4ZmM1Yjg4MWU4ZWQ0ZWQ2YWU1NTk5NC4uZmRhNzhlMTc0
NWRhNzcyNjAxZGFmMTNiNGJlNjUyYjBjZDg3MWEzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNyw3
IEBACiAjaW5jbHVkZSAiVGV4dENvZGVjTGF0aW4xLmgiCiAKICNpbmNsdWRlICJUZXh0Q29kZWNB
U0NJSUZhc3RQYXRoLmgiCisjaW5jbHVkZSA8YXJyYXk+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1ZmZlci5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtMzUsNyArMzYsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogdXNpbmcgbmFtZXNwYWNlIFdURjsKIAotc3RhdGljIGNvbnN0IFVDaGFyIHRhYmxlWzI1Nl0g
PSB7CitzdGF0aWMgY29uc3QgVUNoYXIgbGF0aW4xQ29udmVyc2lvblRhYmxlWzI1Nl0gPSB7CiAg
ICAgMHgwMDAwLCAweDAwMDEsIDB4MDAwMiwgMHgwMDAzLCAweDAwMDQsIDB4MDAwNSwgMHgwMDA2
LCAweDAwMDcsIC8vIDAwLTA3CiAgICAgMHgwMDA4LCAweDAwMDksIDB4MDAwQSwgMHgwMDBCLCAw
eDAwMEMsIDB4MDAwRCwgMHgwMDBFLCAweDAwMEYsIC8vIDA4LTBGCiAgICAgMHgwMDEwLCAweDAw
MTEsIDB4MDAxMiwgMHgwMDEzLCAweDAwMTQsIDB4MDAxNSwgMHgwMDE2LCAweDAwMTcsIC8vIDEw
LTE3CkBAIC05MiwxNCArOTMsMTEgQEAgdm9pZCBUZXh0Q29kZWNMYXRpbjE6OnJlZ2lzdGVyRW5j
b2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQogICAgIHJlZ2lzdHJh
cigieC1jcDEyNTIiLCAid2luZG93cy0xMjUyIik7CiB9CiAKLXN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8VGV4dENvZGVjPiBuZXdTdHJlYW1pbmdUZXh0RGVjb2RlcldpbmRvd3NMYXRpbjEoY29uc3Qg
VGV4dEVuY29kaW5nJiwgY29uc3Qgdm9pZCopCi17Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlx
dWU8VGV4dENvZGVjTGF0aW4xPigpOwotfQotCiB2b2lkIFRleHRDb2RlY0xhdGluMTo6cmVnaXN0
ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKIHsKLSAgICByZWdpc3RyYXIo
IndpbmRvd3MtMTI1MiIsIG5ld1N0cmVhbWluZ1RleHREZWNvZGVyV2luZG93c0xhdGluMSwgMCk7
CisgICAgcmVnaXN0cmFyKCJ3aW5kb3dzLTEyNTIiLCBbXSB7CisgICAgICAgIHJldHVybiBzdGQ6
Om1ha2VfdW5pcXVlPFRleHRDb2RlY0xhdGluMT4oKTsKKyAgICB9KTsKIH0KIAogU3RyaW5nIFRl
eHRDb2RlY0xhdGluMTo6ZGVjb2RlKGNvbnN0IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBi
b29sLCBib29sLCBib29sJikKQEAgLTEzOSwxMCArMTM3LDEwIEBAIFN0cmluZyBUZXh0Q29kZWNM
YXRpbjE6OmRlY29kZShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90IGxlbmd0aCwgYm9vbCwgYm9v
bCwgYm9vCiAgICAgICAgICAgICAqZGVzdGluYXRpb24gPSAqc291cmNlOwogICAgICAgICB9IGVs
c2UgewogdXNlTG9va3VwVGFibGU6Ci0gICAgICAgICAgICBpZiAodGFibGVbKnNvdXJjZV0gPiAw
eGZmKQorICAgICAgICAgICAgaWYgKGxhdGluMUNvbnZlcnNpb25UYWJsZVsqc291cmNlXSA+IDB4
ZmYpCiAgICAgICAgICAgICAgICAgZ290byB1cENvbnZlcnRUbzE2Qml0OwogCi0gICAgICAgICAg
ICAqZGVzdGluYXRpb24gPSB0YWJsZVsqc291cmNlXTsKKyAgICAgICAgICAgICpkZXN0aW5hdGlv
biA9IGxhdGluMUNvbnZlcnNpb25UYWJsZVsqc291cmNlXTsKICAgICAgICAgfQogCiAgICAgICAg
ICsrc291cmNlOwpAQCAtMTY1LDcgKzE2Myw3IEBAIHVwQ29udmVydFRvMTZCaXQ6CiAgICAgICAg
ICpkZXN0aW5hdGlvbjE2KysgPSAqcHRyOCsrOwogCiAgICAgLy8gSGFuZGxlIHRoZSBjaGFyYWN0
ZXIgdGhhdCB0cmlnZ2VyZWQgdGhlIDE2IGJpdCBwYXRoCi0gICAgKmRlc3RpbmF0aW9uMTYgPSB0
YWJsZVsqc291cmNlXTsKKyAgICAqZGVzdGluYXRpb24xNiA9IGxhdGluMUNvbnZlcnNpb25UYWJs
ZVsqc291cmNlXTsKICAgICArK3NvdXJjZTsKICAgICArK2Rlc3RpbmF0aW9uMTY7CiAKQEAgLTE5
NCw3ICsxOTIsNyBAQCB1cENvbnZlcnRUbzE2Qml0OgogICAgICAgICAgICAgKmRlc3RpbmF0aW9u
MTYgPSAqc291cmNlOwogICAgICAgICB9IGVsc2UgewogdXNlTG9va3VwVGFibGUxNjoKLSAgICAg
ICAgICAgICpkZXN0aW5hdGlvbjE2ID0gdGFibGVbKnNvdXJjZV07CisgICAgICAgICAgICAqZGVz
dGluYXRpb24xNiA9IGxhdGluMUNvbnZlcnNpb25UYWJsZVsqc291cmNlXTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgKytzb3VyY2U7CkBAIC0yMDQsNTggKzIwMiw1MSBAQCB1c2VMb29r
dXBUYWJsZTE2OgogICAgIHJldHVybiByZXN1bHQxNjsKIH0KIAotc3RhdGljIENTdHJpbmcgZW5j
b2RlQ29tcGxleFdpbmRvd3NMYXRpbjEoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBs
ZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcgaGFuZGxpbmcpCitzdGF0aWMgVmVjdG9yPHVpbnQ4
X3Q+IGVuY29kZUNvbXBsZXhXaW5kb3dzTGF0aW4xKFN0cmluZ1ZpZXcgc3RyaW5nLCBVbmVuY29k
YWJsZUhhbmRsaW5nIGhhbmRsaW5nKQogewotICAgIFZlY3RvcjxjaGFyPiByZXN1bHQobGVuZ3Ro
KTsKLSAgICBjaGFyKiBieXRlcyA9IHJlc3VsdC5kYXRhKCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+
IHJlc3VsdDsKIAotICAgIHNpemVfdCByZXN1bHRMZW5ndGggPSAwOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGVuZ3RoOyApIHsKLSAgICAgICAgVUNoYXIzMiBjOwotICAgICAgICBVMTZf
TkVYVChjaGFyYWN0ZXJzLCBpLCBsZW5ndGgsIGMpOwotICAgICAgICB1bnNpZ25lZCBjaGFyIGIg
PSBjOworICAgIGZvciAoYXV0byBjaGFyYWN0ZXIgOiBzdHJpbmcuY29kZVBvaW50cygpKSB7Cisg
ICAgICAgIHVpbnQ4X3QgYiA9IGNoYXJhY3RlcjsKICAgICAgICAgLy8gRG8gYW4gZWZmaWNpZW50
IGNoZWNrIHRvIGRldGVjdCBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gMDAtN0YgYW5kIEEwLUZGLgot
ICAgICAgICBpZiAoYiAhPSBjIHx8IChjICYgMHhFMCkgPT0gMHg4MCkgeworICAgICAgICBpZiAo
YiAhPSBjaGFyYWN0ZXIgfHwgKGNoYXJhY3RlciAmIDB4RTApID09IDB4ODApIHsKICAgICAgICAg
ICAgIC8vIExvb2sgZm9yIGEgd2F5IHRvIGVuY29kZSB0aGlzIHdpdGggV2luZG93cyBMYXRpbi0x
LgotICAgICAgICAgICAgZm9yIChiID0gMHg4MDsgYiA8IDB4QTA7ICsrYikKLSAgICAgICAgICAg
ICAgICBpZiAodGFibGVbYl0gPT0gYykKKyAgICAgICAgICAgIGZvciAoYiA9IDB4ODA7IGIgPCAw
eEEwOyArK2IpIHsKKyAgICAgICAgICAgICAgICBpZiAobGF0aW4xQ29udmVyc2lvblRhYmxlW2Jd
ID09IGNoYXJhY3RlcikKICAgICAgICAgICAgICAgICAgICAgZ290byBnb3RCeXRlOworICAgICAg
ICAgICAgfQogICAgICAgICAgICAgLy8gTm8gd2F5IHRvIGVuY29kZSB0aGlzIGNoYXJhY3RlciB3
aXRoIFdpbmRvd3MgTGF0aW4tMS4KICAgICAgICAgICAgIFVuZW5jb2RhYmxlUmVwbGFjZW1lbnRB
cnJheSByZXBsYWNlbWVudDsKLSAgICAgICAgICAgIGludCByZXBsYWNlbWVudExlbmd0aCA9IFRl
eHRDb2RlYzo6Z2V0VW5lbmNvZGFibGVSZXBsYWNlbWVudChjLCBoYW5kbGluZywgcmVwbGFjZW1l
bnQpOwotICAgICAgICAgICAgcmVzdWx0Lmdyb3cocmVzdWx0TGVuZ3RoICsgcmVwbGFjZW1lbnRM
ZW5ndGggKyBsZW5ndGggLSBpKTsKLSAgICAgICAgICAgIGJ5dGVzID0gcmVzdWx0LmRhdGEoKTsK
LSAgICAgICAgICAgIG1lbWNweShieXRlcyArIHJlc3VsdExlbmd0aCwgcmVwbGFjZW1lbnQsIHJl
cGxhY2VtZW50TGVuZ3RoKTsKLSAgICAgICAgICAgIHJlc3VsdExlbmd0aCArPSByZXBsYWNlbWVu
dExlbmd0aDsKKyAgICAgICAgICAgIGludCByZXBsYWNlbWVudExlbmd0aCA9IFRleHRDb2RlYzo6
Z2V0VW5lbmNvZGFibGVSZXBsYWNlbWVudChjaGFyYWN0ZXIsIGhhbmRsaW5nLCByZXBsYWNlbWVu
dCk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJlcGxhY2VtZW50LmRhdGEoKSwgcmVwbGFj
ZW1lbnRMZW5ndGgpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICBnb3RC
eXRlOgotICAgICAgICBieXRlc1tyZXN1bHRMZW5ndGgrK10gPSBiOworICAgICAgICByZXN1bHQu
YXBwZW5kKGIpOwogICAgIH0KIAotICAgIHJldHVybiBDU3RyaW5nKGJ5dGVzLCByZXN1bHRMZW5n
dGgpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUNTdHJpbmcgVGV4dENvZGVjTGF0aW4xOjpl
bmNvZGUoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxl
SGFuZGxpbmcgaGFuZGxpbmcpCitWZWN0b3I8dWludDhfdD4gVGV4dENvZGVjTGF0aW4xOjplbmNv
ZGUoU3RyaW5nVmlldyBzdHJpbmcsIFVuZW5jb2RhYmxlSGFuZGxpbmcgaGFuZGxpbmcpCiB7CiAg
ICAgewotICAgICAgICBjaGFyKiBieXRlczsKLSAgICAgICAgQ1N0cmluZyBzdHJpbmcgPSBDU3Ry
aW5nOjpuZXdVbmluaXRpYWxpemVkKGxlbmd0aCwgYnl0ZXMpOworICAgICAgICBWZWN0b3I8dWlu
dDhfdD4gcmVzdWx0KHN0cmluZy5sZW5ndGgoKSk7CisgICAgICAgIGF1dG8qIGJ5dGVzID0gcmVz
dWx0LmRhdGEoKTsKIAotICAgICAgICAvLyBDb252ZXJ0IHRoZSBzdHJpbmcgYSBmYXN0IHdheSBh
bmQgc2ltdWx0YW5lb3VzbHkgZG8gYW4gZWZmaWNpZW50IGNoZWNrIHRvIHNlZSBpZiBpdCdzIGFs
bCBBU0NJSS4KKyAgICAgICAgLy8gQ29udmVydCBhbmQgc2ltdWx0YW5lb3VzbHkgZG8gYSBjaGVj
ayB0byBzZWUgaWYgaXQncyBhbGwgQVNDSUkuCiAgICAgICAgIFVDaGFyIG9yZWQgPSAwOwotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBV
Q2hhciBjID0gY2hhcmFjdGVyc1tpXTsKLSAgICAgICAgICAgIGJ5dGVzW2ldID0gYzsKLSAgICAg
ICAgICAgIG9yZWQgfD0gYzsKKyAgICAgICAgZm9yIChhdXRvIGNoYXJhY3RlciA6IHN0cmluZy5j
b2RlVW5pdHMoKSkgeworICAgICAgICAgICAgKmJ5dGVzKysgPSBjaGFyYWN0ZXI7CisgICAgICAg
ICAgICBvcmVkIHw9IGNoYXJhY3RlcjsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghKG9yZWQg
JiAweEZGODApKQotICAgICAgICAgICAgcmV0dXJuIHN0cmluZzsKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogCiAgICAgLy8gSWYgaXQgd2Fzbid0IGFsbCBBU0NJSSwgY2FsbCB0
aGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIG1vcmUtY29tcGxleCBjYXNlcy4KLSAgICByZXR1cm4g
ZW5jb2RlQ29tcGxleFdpbmRvd3NMYXRpbjEoY2hhcmFjdGVycywgbGVuZ3RoLCBoYW5kbGluZyk7
CisgICAgcmV0dXJuIGVuY29kZUNvbXBsZXhXaW5kb3dzTGF0aW4xKHN0cmluZywgaGFuZGxpbmcp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuaAppbmRleCA5ZDA4YWEzZjU5NzRlOTYyYTE1NDFkMDNl
ZDc5ZGY5YmNhMmRlNDIxLi43NGFiYzc2YWMzZDBkODc5OTAzZTNjNDIwZWQ2ZThhNDc0Mzc2MjI1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGlu
MS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmgK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTIzLDIyICsyMywyMSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBU
ZXh0Q29kZWNMYXRpbjFfaAotI2RlZmluZSBUZXh0Q29kZWNMYXRpbjFfaAorI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJUZXh0Q29kZWMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAg
Y2xhc3MgVGV4dENvZGVjTGF0aW4xIDogcHVibGljIFRleHRDb2RlYyB7Ci0gICAgcHVibGljOgot
ICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVn
aXN0cmFyKTsKLSAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVn
aXN0cmFyKTsKK2NsYXNzIFRleHRDb2RlY0xhdGluMSBmaW5hbCA6IHB1YmxpYyBUZXh0Q29kZWMg
eworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhFbmNvZGlu
Z05hbWVSZWdpc3RyYXIpOworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ29kZWNzKFRleHRDb2Rl
Y1JlZ2lzdHJhcik7CiAKLSAgICAgICAgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90
IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpIG92
ZXJyaWRlOwotICAgICAgICBDU3RyaW5nIGVuY29kZShjb25zdCBVQ2hhciosIHNpemVfdCBsZW5n
dGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcpIG92ZXJyaWRlOwotICAgIH07Citwcml2YXRlOgorICAg
IFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJv
b2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9yKSBmaW5hbDsKKyAgICBWZWN0b3I8dWludDhf
dD4gZW5jb2RlKFN0cmluZ1ZpZXcsIFVuZW5jb2RhYmxlSGFuZGxpbmcpIGZpbmFsOworfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gVGV4dENvZGVjTGF0aW4xX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjUmVwbGFjZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNSZXBsYWNlbWVu
dC5jcHAKaW5kZXggZmMzOWIxOGI4Yzk5NzUxMGM4YzQxYzY2MThhZDE4N2I3NTg0ZTIyYS4uYmEy
NjE0Y2ExNDhhNDI1MGFiZDI5MjJkZGMzNzZjNjBkMjIyODlkZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNSZXBsYWNlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNSZXBsYWNlbWVudC5jcHAKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMjIg
KzMwLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RkOjp1bmlxdWVfcHRyPFRleHRD
b2RlYz4gVGV4dENvZGVjUmVwbGFjZW1lbnQ6OmNyZWF0ZShjb25zdCBUZXh0RW5jb2RpbmcmLCBj
b25zdCB2b2lkKikKLXsKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxUZXh0Q29kZWNSZXBs
YWNlbWVudD4oKTsKLX0KLQotVGV4dENvZGVjUmVwbGFjZW1lbnQ6OlRleHRDb2RlY1JlcGxhY2Vt
ZW50KCkKLXsKLX0KLQogdm9pZCBUZXh0Q29kZWNSZXBsYWNlbWVudDo6cmVnaXN0ZXJFbmNvZGlu
Z05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIpCiB7Ci0gICAgLy8gVGhlICdy
ZXBsYWNlbWVudCcgaXRzZWxmIGlzIG5vdCBhIHZhbGlkIGxhYmVsLiBJdCBpcyB0aGUgbmFtZSBv
ZgorICAgIC8vIFRoZSBzdHJpbmcgJ3JlcGxhY2VtZW50JyBpdHNlbGYgaXMgbm90IGEgdmFsaWQg
bGFiZWwuIEl0IGlzIHRoZSBuYW1lIG9mCiAgICAgLy8gYSBncm91cCBvZiBsZWdhY3kgZW5jb2Rp
bmcgbGFiZWxzLiBIZW5jZSwgaXQgY2Fubm90IGJlIHVzZWQgZGlyZWN0bHkuCisgICAgLy8gVGhl
IFRleHRFbmNvZGluZyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBhYm92ZSBydWxlOyBoZXJlIHdlIHJl
Z2lzdGVyIGl0IG5vcm1hbGx5LgogICAgIHJlZ2lzdHJhcigicmVwbGFjZW1lbnQiLCAicmVwbGFj
ZW1lbnQiKTsKIAotICAgIC8vIFRoZSBsYWJlbHMKICAgICByZWdpc3RyYXIoImNzaXNvMjAyMmty
IiwgInJlcGxhY2VtZW50Iik7CiAgICAgcmVnaXN0cmFyKCJoei1nYi0yMzEyIiwgInJlcGxhY2Vt
ZW50Iik7CiAgICAgcmVnaXN0cmFyKCJpc28tMjAyMi1jbiIsICJyZXBsYWNlbWVudCIpOwpAQCAt
NTUsNyArNDYsOSBAQCB2b2lkIFRleHRDb2RlY1JlcGxhY2VtZW50OjpyZWdpc3RlckVuY29kaW5n
TmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhcgogCiB2b2lkIFRleHRDb2RlY1Jl
cGxhY2VtZW50OjpyZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFyKQog
ewotICAgIHJlZ2lzdHJhcigicmVwbGFjZW1lbnQiLCBjcmVhdGUsIDApOworICAgIHJlZ2lzdHJh
cigicmVwbGFjZW1lbnQiLCBbXSB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFRl
eHRDb2RlY1JlcGxhY2VtZW50PigpOworICAgIH0pOwogfQogCiBTdHJpbmcgVGV4dENvZGVjUmVw
bGFjZW1lbnQ6OmRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90LCBib29sLCBib29sLCBib29sJiBz
YXdFcnJvcikKQEAgLTYzLDkgKzU2LDggQEAgU3RyaW5nIFRleHRDb2RlY1JlcGxhY2VtZW50Ojpk
ZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCwgYm9vbCwgYm9vbCwgYm9vbCYgc2F3RXIKICAgICBz
YXdFcnJvciA9IHRydWU7CiAgICAgaWYgKG1fc2VudEVPRikKICAgICAgICAgcmV0dXJuIGVtcHR5
U3RyaW5nKCk7Ci0KICAgICBtX3NlbnRFT0YgPSB0cnVlOwotICAgIHJldHVybiBTdHJpbmcoJnJl
cGxhY2VtZW50Q2hhcmFjdGVyLCAxKTsKKyAgICByZXR1cm4gU3RyaW5nIHsgJnJlcGxhY2VtZW50
Q2hhcmFjdGVyLCAxIH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjUmVwbGFjZW1lbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjUmVwbGFjZW1lbnQuaAppbmRleCA3
YTY3ZDUxNmRiNzBjMTZlOTYwZjVjYjJiYTg0MGU5NjJlOGI1MWY0Li5jZTJiYzYzNjM0OWE3ZDg4
ZGVhNzY2ZTBiMGM3NTRmMDE1MGViZGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRDb2RlY1JlcGxhY2VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9UZXh0Q29kZWNSZXBsYWNlbWVudC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFRleHRDb2RlY1JlcGxh
Y2VtZW50X2gKLSNkZWZpbmUgVGV4dENvZGVjUmVwbGFjZW1lbnRfaAorI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlICJUZXh0Q29kZWNVVEY4LmgiCiAKQEAgLTMyLDIwICszMSwxNCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIFRleHRDb2RlY1JlcGxhY2VtZW50IDogcHVibGljIFRleHRD
b2RlY1VURjggewogcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VGV4dENvZGVj
PiBjcmVhdGUoY29uc3QgVGV4dEVuY29kaW5nJiwgY29uc3Qgdm9pZCopOwotCi0gICAgVGV4dENv
ZGVjUmVwbGFjZW1lbnQoKTsKLQogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRW5jb2RpbmdOYW1l
cyhFbmNvZGluZ05hbWVSZWdpc3RyYXIpOwogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ29kZWNz
KFRleHRDb2RlY1JlZ2lzdHJhcik7CiAKIHByaXZhdGU6Ci0gICAgU3RyaW5nIGRlY29kZShjb25z
dCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9v
bCYgc2F3RXJyb3IpIG92ZXJyaWRlOworICAgIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNp
emVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9y
KSBmaW5hbDsKIAogICAgIGJvb2wgbV9zZW50RU9GIHsgZmFsc2UgfTsKIAogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLyogVGV4dENvZGVjUmVwbGFjZW1lbnRfaCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEYxNi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcAppbmRl
eCAwZTM5ZGUxMjg1MTEyODI2NGFiODUyYTg0ZGMwZDM5OWMxYTAxNzhmLi4zODZhMTc4MjYyNzI2
ZDgxMTM0NGI3ZmRiMmZjOTI1ZmNjODk3ODQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw2ICszMiwx
MSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2lubGluZSBUZXh0Q29kZWNVVEYxNjo6VGV4
dENvZGVjVVRGMTYoYm9vbCBsaXR0bGVFbmRpYW4pCisgICAgOiBtX2xpdHRsZUVuZGlhbihsaXR0
bGVFbmRpYW4pCit7Cit9CisKIHZvaWQgVGV4dENvZGVjVVRGMTY6OnJlZ2lzdGVyRW5jb2RpbmdO
YW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQogewogICAgIHJlZ2lzdHJhcigi
VVRGLTE2TEUiLCAiVVRGLTE2TEUiKTsKQEAgLTQ3LDIwICs1MiwxNCBAQCB2b2lkIFRleHRDb2Rl
Y1VURjE2OjpyZWdpc3RlckVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lz
dHJhcikKICAgICByZWdpc3RyYXIoInVuaWNvZGVGRkZFIiwgIlVURi0xNkJFIik7CiB9CiAKLXN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VGV4dENvZGVjPiBuZXdTdHJlYW1pbmdUZXh0RGVjb2RlclVU
RjE2TEUoY29uc3QgVGV4dEVuY29kaW5nJiwgY29uc3Qgdm9pZCopCi17Ci0gICAgcmV0dXJuIHN0
ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjVVRGMTY+KHRydWUpOwotfQotCi1zdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPFRleHRDb2RlYz4gbmV3U3RyZWFtaW5nVGV4dERlY29kZXJVVEYxNkJFKGNvbnN0
IFRleHRFbmNvZGluZyYsIGNvbnN0IHZvaWQqKQotewotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPFRleHRDb2RlY1VURjE2PihmYWxzZSk7Ci19Ci0KIHZvaWQgVGV4dENvZGVjVVRGMTY6OnJl
Z2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciByZWdpc3RyYXIpCiB7Ci0gICAgcmVnaXN0
cmFyKCJVVEYtMTZMRSIsIG5ld1N0cmVhbWluZ1RleHREZWNvZGVyVVRGMTZMRSwgMCk7Ci0gICAg
cmVnaXN0cmFyKCJVVEYtMTZCRSIsIG5ld1N0cmVhbWluZ1RleHREZWNvZGVyVVRGMTZCRSwgMCk7
CisgICAgcmVnaXN0cmFyKCJVVEYtMTZMRSIsIFtdIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV91bmlxdWU8VGV4dENvZGVjVVRGMTY+KHRydWUpOworICAgIH0pOworICAgIHJlZ2lzdHJhcigi
VVRGLTE2QkUiLCBbXSB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFRleHRDb2Rl
Y1VURjE2PihmYWxzZSk7CisgICAgfSk7CiB9CiAKIFN0cmluZyBUZXh0Q29kZWNVVEYxNjo6ZGVj
b2RlKGNvbnN0IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sLCBib29sLCBib29sJikK
QEAgLTExNCwzNiArMTEzLDI0IEBAIFN0cmluZyBUZXh0Q29kZWNVVEYxNjo6ZGVjb2RlKGNvbnN0
IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sLCBib29sLCBib29sCiAgICAgcmV0dXJu
IFN0cmluZzo6YWRvcHQoV1RGTW92ZShidWZmZXIpKTsKIH0KIAotQ1N0cmluZyBUZXh0Q29kZWNV
VEYxNjo6ZW5jb2RlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBVbmVu
Y29kYWJsZUhhbmRsaW5nKQorVmVjdG9yPHVpbnQ4X3Q+IFRleHRDb2RlY1VURjE2OjplbmNvZGUo
U3RyaW5nVmlldyBzdHJpbmcsIFVuZW5jb2RhYmxlSGFuZGxpbmcpCiB7Ci0gICAgLy8gV2UgbmVl
ZCB0byBiZSBzdXJlIHdlIGNhbiBkb3VibGUgdGhlIGxlbmd0aCB3aXRob3V0IG92ZXJmbG93aW5n
LgotICAgIC8vIFNpbmNlIHRoZSBwYXNzZWQtaW4gbGVuZ3RoIGlzIHRoZSBsZW5ndGggb2YgYW4g
YWN0dWFsIGV4aXN0aW5nCi0gICAgLy8gY2hhcmFjdGVyIGJ1ZmZlciwgZWFjaCBjaGFyYWN0ZXIg
aXMgdHdvIGJ5dGVzLCBhbmQgd2Uga25vdwotICAgIC8vIHRoZSBidWZmZXIgZG9lc24ndCBvY2N1
cHkgdGhlIGVudGlyZSBhZGRyZXNzIHNwYWNlLCB3ZSBjYW4KLSAgICAvLyBhc3NlcnQgaGVyZSB0
aGF0IGRvdWJsaW5nIHRoZSBsZW5ndGggZG9lcyBub3Qgb3ZlcmZsb3cgc2l6ZV90Ci0gICAgLy8g
YW5kIHRoZXJlJ3Mgbm8gbmVlZCBmb3IgYSBydW50aW1lIGNoZWNrLgotICAgIEFTU0VSVChsZW5n
dGggPD0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAvIDIpOwotCi0gICAgY2hh
ciogYnl0ZXM7Ci0gICAgQ1N0cmluZyBzdHJpbmcgPSBDU3RyaW5nOjpuZXdVbmluaXRpYWxpemVk
KGxlbmd0aCAqIDIsIGJ5dGVzKTsKLQotICAgIC8vIEZJWE1FOiBDU3RyaW5nIGlzIG5vdCBhIHJl
YXNvbmFibGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIGVuY29kZWQgVVRGLTE2LCB3aGljaCB3aWxsIGhh
dmUKLSAgICAvLyBudWxsIGNoYXJhY3RlcnMgaW5zaWRlIGl0LiBQZXJoYXBzIHRoZSByZXN1bHQg
b2YgZW5jb2RlIHNob3VsZCBub3QgYmUgYSBDU3RyaW5nLgorICAgIFZlY3Rvcjx1aW50OF90PiBy
ZXN1bHQoV1RGOjpjaGVja2VkUHJvZHVjdDxzaXplX3Q+KHN0cmluZy5sZW5ndGgoKSwgMikudW5z
YWZlR2V0KCkpOworICAgIGF1dG8qIGJ5dGVzID0gcmVzdWx0LmRhdGEoKTsKKwogICAgIGlmICht
X2xpdHRsZUVuZGlhbikgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKSB7Ci0gICAgICAgICAgICBVQ2hhciBjID0gY2hhcmFjdGVyc1tpXTsKLSAgICAgICAgICAg
IGJ5dGVzW2kgKiAyXSA9IGM7Ci0gICAgICAgICAgICBieXRlc1tpICogMiArIDFdID0gYyA+PiA4
OworICAgICAgICBmb3IgKGF1dG8gY2hhcmFjdGVyIDogc3RyaW5nLmNvZGVVbml0cygpKSB7Cisg
ICAgICAgICAgICAqYnl0ZXMrKyA9IGNoYXJhY3RlcjsKKyAgICAgICAgICAgICpieXRlcysrID0g
Y2hhcmFjdGVyID4+IDg7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBVQ2hhciBjID0gY2hh
cmFjdGVyc1tpXTsKLSAgICAgICAgICAgIGJ5dGVzW2kgKiAyXSA9IGMgPj4gODsKLSAgICAgICAg
ICAgIGJ5dGVzW2kgKiAyICsgMV0gPSBjOworICAgICAgICBmb3IgKGF1dG8gY2hhcmFjdGVyIDog
c3RyaW5nLmNvZGVVbml0cygpKSB7CisgICAgICAgICAgICAqYnl0ZXMrKyA9IGNoYXJhY3RlciA+
PiA4OworICAgICAgICAgICAgKmJ5dGVzKysgPSBjaGFyYWN0ZXI7CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICByZXR1cm4gc3RyaW5nOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
VGV4dENvZGVjVVRGMTYuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVj
VVRGMTYuaAppbmRleCAyODc2MGNkZWU2ZGNiMmE4ZWY2ZmJjOTZiNWE4Mjg5ZjBmYTMyNWYyLi5j
MTFiYmZiMWNhOGI4ZjNhOTFiMWE3ZWY4NWUyNGJiNGVjMTgzOWM3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEYxNi5oCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMywyOSArMjMsMjYg
QEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgVGV4dENvZGVjVVRGMTZfaAotI2Rl
ZmluZSBUZXh0Q29kZWNVVEYxNl9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIlRleHRDb2Rl
Yy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBUZXh0Q29kZWNVVEYxNiA6
IHB1YmxpYyBUZXh0Q29kZWMgewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIHZvaWQgcmVn
aXN0ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhcik7Ci0gICAgICAgIHN0YXRp
YyB2b2lkIHJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7CitjbGFzcyBUZXh0Q29k
ZWNVVEYxNiA6IHB1YmxpYyBUZXh0Q29kZWMgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIHJl
Z2lzdGVyRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIpOworICAgIHN0YXRpYyB2
b2lkIHJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7CiAKLSAgICAgICAgVGV4dENv
ZGVjVVRGMTYoYm9vbCBsaXR0bGVFbmRpYW4pIDogbV9saXR0bGVFbmRpYW4obGl0dGxlRW5kaWFu
KSwgbV9oYXZlQnVmZmVyZWRCeXRlKGZhbHNlKSB7IH0KKyAgICBleHBsaWNpdCBUZXh0Q29kZWNV
VEYxNihib29sIGxpdHRsZUVuZGlhbik7CiAKLSAgICAgICAgU3RyaW5nIGRlY29kZShjb25zdCBj
aGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYg
c2F3RXJyb3IpIG92ZXJyaWRlOwotICAgICAgICBDU3RyaW5nIGVuY29kZShjb25zdCBVQ2hhcios
IHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcpIG92ZXJyaWRlOworcHJpdmF0ZToK
KyAgICBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNo
LCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcikgZmluYWw7CisgICAgVmVjdG9yPHVp
bnQ4X3Q+IGVuY29kZShTdHJpbmdWaWV3LCBVbmVuY29kYWJsZUhhbmRsaW5nKSBmaW5hbDsKIAot
ICAgIHByaXZhdGU6Ci0gICAgICAgIGJvb2wgbV9saXR0bGVFbmRpYW47Ci0gICAgICAgIGJvb2wg
bV9oYXZlQnVmZmVyZWRCeXRlOwotICAgICAgICB1bnNpZ25lZCBjaGFyIG1fYnVmZmVyZWRCeXRl
OwotICAgIH07CisgICAgYm9vbCBtX2xpdHRsZUVuZGlhbjsKKyAgICBib29sIG1faGF2ZUJ1ZmZl
cmVkQnl0ZSB7IGZhbHNlIH07CisgICAgdW5zaWduZWQgY2hhciBtX2J1ZmZlcmVkQnl0ZTsKK307
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFRleHRDb2RlY1VURjE2X2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGOC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjguY3BwCmluZGV4
IGNkNTA0Mjc5OTBmZjU2YTJmMWE5MWIzNmNlNTMzNmI1ZmU5YjI0NjMuLmIzMThlNjIyYmNiZTEx
ODAxOWE0MTY4NTYzMzM1NTZmMTA3MmQ3OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dENvZGVjVVRGOC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0Q29kZWNVVEY4LmNwcApAQCAtNTUsOSArNTUsOSBAQCB2b2lkIFRleHRDb2Rl
Y1VURjg6OnJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0
cmFyKQogCiB2b2lkIFRleHRDb2RlY1VURjg6OnJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lz
dHJhciByZWdpc3RyYXIpCiB7Ci0gICAgcmVnaXN0cmFyKCJVVEYtOCIsIFtdIChjb25zdCBUZXh0
RW5jb2RpbmcmLCBjb25zdCB2b2lkKikgLT4gc3RkOjp1bmlxdWVfcHRyPFRleHRDb2RlYz4gewor
ICAgIHJlZ2lzdHJhcigiVVRGLTgiLCBbXSB7CiAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPFRleHRDb2RlY1VURjg+KCk7Ci0gICAgfSwgbnVsbHB0cik7CisgICAgfSk7CiB9CiAKIHN0
YXRpYyBpbmxpbmUgaW50IG5vbkFTQ0lJU2VxdWVuY2VMZW5ndGgodWludDhfdCBmaXJzdEJ5dGUp
CkBAIC00MzIsMjIgKzQzMiwxNyBAQCB1cENvbnZlcnRUbzE2Qml0OgogICAgIHJldHVybiBTdHJp
bmc6OmFkb3B0KFdURk1vdmUoYnVmZmVyMTYpKTsKIH0KIAotQ1N0cmluZyBUZXh0Q29kZWNVVEY4
OjplbmNvZGUoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFVuZW5jb2Rh
YmxlSGFuZGxpbmcpCitWZWN0b3I8dWludDhfdD4gVGV4dENvZGVjVVRGODo6ZW5jb2RlKFN0cmlu
Z1ZpZXcgc3RyaW5nLCBVbmVuY29kYWJsZUhhbmRsaW5nKQogewogICAgIC8vIFRoZSBtYXhpbXVt
IG51bWJlciBvZiBVVEYtOCBieXRlcyBuZWVkZWQgcGVyIFVURi0xNiBjb2RlIHVuaXQgaXMgMy4K
ICAgICAvLyBCTVAgY2hhcmFjdGVycyB0YWtlIG9ubHkgb25lIFVURi0xNiBjb2RlIHVuaXQgYW5k
IGNhbiB0YWtlIHVwIHRvIDMgYnl0ZXMgKDN4KS4KICAgICAvLyBOb24tQk1QIGNoYXJhY3RlcnMg
dGFrZSB0d28gVVRGLTE2IGNvZGUgdW5pdHMgYW5kIGNhbiB0YWtlIHVwIHRvIDQgYnl0ZXMgKDJ4
KS4KLSAgICBpZiAobGVuZ3RoID4gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAv
IDMpCi0gICAgICAgIENSQVNIKCk7Ci0KLSAgICBWZWN0b3I8Y2hhciwgMzAwMD4gYnl0ZXMobGVu
Z3RoICogMyk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ5dGVzKFdURjo6Y2hlY2tlZFByb2R1Y3Q8
c2l6ZV90PihzdHJpbmcubGVuZ3RoKCksIDMpLnVuc2FmZUdldCgpKTsKICAgICBzaXplX3QgYnl0
ZXNXcml0dGVuID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKSB7Ci0g
ICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyOwotICAgICAgICBVMTZfTkVYVChjaGFyYWN0ZXJzLCBp
LCBsZW5ndGgsIGNoYXJhY3Rlcik7CisgICAgZm9yIChhdXRvIGNoYXJhY3RlciA6IHN0cmluZy5j
b2RlUG9pbnRzKCkpCiAgICAgICAgIFU4X0FQUEVORF9VTlNBRkUoYnl0ZXMuZGF0YSgpLCBieXRl
c1dyaXR0ZW4sIGNoYXJhY3Rlcik7Ci0gICAgfQotICAgIHJldHVybiBDU3RyaW5nIHsgYnl0ZXMu
ZGF0YSgpLCBieXRlc1dyaXR0ZW4gfTsKKyAgICBieXRlcy5zaHJpbmsoYnl0ZXNXcml0dGVuKTsK
KyAgICByZXR1cm4gYnl0ZXM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGOC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEY4LmgKaW5kZXggMjA4MTNjMmZlYTU5
MDI4MWFmNDE1OTU0ODM4YjBjOWNiZGQ1N2IyNi4uZjgyODJiNWYzNGE4OTQ3M2RlOWFkN2EyMTc2
NWFmNmEzMmFjZjk1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0Q29kZWNVVEY4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29k
ZWNVVEY4LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiVGV4
dENvZGVjLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvTENoYXIuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC0zNiw3ICszNyw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBTdHJpbmcg
ZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BP
bkVycm9yLCBib29sJiBzYXdFcnJvcikgb3ZlcnJpZGU7Ci0gICAgQ1N0cmluZyBlbmNvZGUoY29u
c3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5nKSBvdmVycmlkZTsK
KyAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlKFN0cmluZ1ZpZXcsIFVuZW5jb2RhYmxlSGFuZGxp
bmcpIGZpbmFsOwogCiAgICAgYm9vbCBoYW5kbGVQYXJ0aWFsU2VxdWVuY2UoTENoYXIqJiBkZXN0
aW5hdGlvbiwgY29uc3QgdWludDhfdComIHNvdXJjZSwgY29uc3QgdWludDhfdCogZW5kLCBib29s
IGZsdXNoKTsKICAgICB2b2lkIGhhbmRsZVBhcnRpYWxTZXF1ZW5jZShVQ2hhciomIGRlc3RpbmF0
aW9uLCBjb25zdCB1aW50OF90KiYgc291cmNlLCBjb25zdCB1aW50OF90KiBlbmQsIGJvb2wgZmx1
c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9yKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHAKaW5kZXggZTMx
OTIxNGU0ZjUwMmYyZGFjNDM4N2ZiOWM0ODdmNmNjNTVlMTBjNy4uMjk2YzQ2OWYxNjlmYjkxMWRj
OGRiZDdhNjQ3ZWE1NjQxZTJmZmUxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw5ICsyNiw4IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGV4dENvZGVjVXNlckRlZmluZWQuaCIK
IAotI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8YXJyYXk+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1ZmZlci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIApAQCAtMzksNzMgKzM4LDYyIEBAIHZvaWQgVGV4dENvZGVjVXNlckRlZmluZWQ6OnJl
Z2lzdGVyRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyCiAgICAg
cmVnaXN0cmFyKCJ4LXVzZXItZGVmaW5lZCIsICJ4LXVzZXItZGVmaW5lZCIpOwogfQogCi1zdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPFRleHRDb2RlYz4gbmV3U3RyZWFtaW5nVGV4dERlY29kZXJVc2Vy
RGVmaW5lZChjb25zdCBUZXh0RW5jb2RpbmcmLCBjb25zdCB2b2lkKikKLXsKLSAgICByZXR1cm4g
c3RkOjptYWtlX3VuaXF1ZTxUZXh0Q29kZWNVc2VyRGVmaW5lZD4oKTsKLX0KLQogdm9pZCBUZXh0
Q29kZWNVc2VyRGVmaW5lZDo6cmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lz
dHJhcikKIHsKLSAgICByZWdpc3RyYXIoIngtdXNlci1kZWZpbmVkIiwgbmV3U3RyZWFtaW5nVGV4
dERlY29kZXJVc2VyRGVmaW5lZCwgMCk7CisgICAgcmVnaXN0cmFyKCJ4LXVzZXItZGVmaW5lZCIs
IFtdIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4dENvZGVjVXNlckRlZmlu
ZWQ+KCk7CisgICAgfSk7CiB9CiAKIFN0cmluZyBUZXh0Q29kZWNVc2VyRGVmaW5lZDo6ZGVjb2Rl
KGNvbnN0IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sLCBib29sLCBib29sJikKIHsK
ICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKICAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KGxl
bmd0aCk7Ci0KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAg
ICAgIHNpZ25lZCBjaGFyIGMgPSBieXRlc1tpXTsKICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGF0
aWNfY2FzdDxVQ2hhcj4oYyAmIDB4RjdGRikpOwogICAgIH0KLQogICAgIHJldHVybiByZXN1bHQu
dG9TdHJpbmcoKTsKIH0KIAotc3RhdGljIENTdHJpbmcgZW5jb2RlQ29tcGxleFVzZXJEZWZpbmVk
KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRs
aW5nIGhhbmRsaW5nKQorc3RhdGljIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVDb21wbGV4VXNlckRl
ZmluZWQoU3RyaW5nVmlldyBzdHJpbmcsIFVuZW5jb2RhYmxlSGFuZGxpbmcgaGFuZGxpbmcpCiB7
Ci0gICAgVmVjdG9yPGNoYXI+IHJlc3VsdChsZW5ndGgpOwotICAgIGNoYXIqIGJ5dGVzID0gcmVz
dWx0LmRhdGEoKTsKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OwogCi0gICAgc2l6ZV90IHJl
c3VsdExlbmd0aCA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICkgewot
ICAgICAgICBVQ2hhcjMyIGM7Ci0gICAgICAgIFUxNl9ORVhUKGNoYXJhY3RlcnMsIGksIGxlbmd0
aCwgYyk7Ci0gICAgICAgIHNpZ25lZCBjaGFyIHNpZ25lZEJ5dGUgPSBjOwotICAgICAgICBpZiAo
KHNpZ25lZEJ5dGUgJiAweEY3RkYpID09IGMpCi0gICAgICAgICAgICBieXRlc1tyZXN1bHRMZW5n
dGgrK10gPSBzaWduZWRCeXRlOworICAgIGZvciAoYXV0byBjaGFyYWN0ZXIgOiBzdHJpbmcuY29k
ZVBvaW50cygpKSB7CisgICAgICAgIGludDhfdCBzaWduZWRCeXRlID0gY2hhcmFjdGVyOworICAg
ICAgICBpZiAoKHNpZ25lZEJ5dGUgJiAweEY3RkYpID09IGNoYXJhY3RlcikKKyAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoc2lnbmVkQnl0ZSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
Ly8gTm8gd2F5IHRvIGVuY29kZSB0aGlzIGNoYXJhY3RlciB3aXRoIHgtdXNlci1kZWZpbmVkLgog
ICAgICAgICAgICAgVW5lbmNvZGFibGVSZXBsYWNlbWVudEFycmF5IHJlcGxhY2VtZW50OwotICAg
ICAgICAgICAgaW50IHJlcGxhY2VtZW50TGVuZ3RoID0gVGV4dENvZGVjOjpnZXRVbmVuY29kYWJs
ZVJlcGxhY2VtZW50KGMsIGhhbmRsaW5nLCByZXBsYWNlbWVudCk7Ci0gICAgICAgICAgICByZXN1
bHQuZ3JvdyhyZXN1bHRMZW5ndGggKyByZXBsYWNlbWVudExlbmd0aCArIGxlbmd0aCAtIGkpOwot
ICAgICAgICAgICAgYnl0ZXMgPSByZXN1bHQuZGF0YSgpOwotICAgICAgICAgICAgbWVtY3B5KGJ5
dGVzICsgcmVzdWx0TGVuZ3RoLCByZXBsYWNlbWVudCwgcmVwbGFjZW1lbnRMZW5ndGgpOwotICAg
ICAgICAgICAgcmVzdWx0TGVuZ3RoICs9IHJlcGxhY2VtZW50TGVuZ3RoOworICAgICAgICAgICAg
aW50IHJlcGxhY2VtZW50TGVuZ3RoID0gVGV4dENvZGVjOjpnZXRVbmVuY29kYWJsZVJlcGxhY2Vt
ZW50KGNoYXJhY3RlciwgaGFuZGxpbmcsIHJlcGxhY2VtZW50KTsKKyAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQocmVwbGFjZW1lbnQuZGF0YSgpLCByZXBsYWNlbWVudExlbmd0aCk7CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICByZXR1cm4gQ1N0cmluZyhieXRlcywgcmVzdWx0TGVuZ3RoKTsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1DU3RyaW5nIFRleHRDb2RlY1VzZXJEZWZpbmVkOjplbmNv
ZGUoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFu
ZGxpbmcgaGFuZGxpbmcpCitWZWN0b3I8dWludDhfdD4gVGV4dENvZGVjVXNlckRlZmluZWQ6OmVu
Y29kZShTdHJpbmdWaWV3IHN0cmluZywgVW5lbmNvZGFibGVIYW5kbGluZyBoYW5kbGluZykKIHsK
LSAgICBjaGFyKiBieXRlczsKLSAgICBDU3RyaW5nIHN0cmluZyA9IENTdHJpbmc6Om5ld1VuaW5p
dGlhbGl6ZWQobGVuZ3RoLCBieXRlcyk7CisgICAgeworICAgICAgICBWZWN0b3I8dWludDhfdD4g
cmVzdWx0KHN0cmluZy5sZW5ndGgoKSk7CisgICAgICAgIGF1dG8qIGJ5dGVzID0gcmVzdWx0LmRh
dGEoKTsKKworICAgICAgICAvLyBDb252ZXJ0IGFuZCBzaW11bHRhbmVvdXNseSBkbyBhIGNoZWNr
IHRvIHNlZSBpZiBpdCdzIGFsbCBBU0NJSS4KKyAgICAgICAgVUNoYXIgb3JlZCA9IDA7CisgICAg
ICAgIGZvciAoYXV0byBjaGFyYWN0ZXIgOiBzdHJpbmcuY29kZVVuaXRzKCkpIHsKKyAgICAgICAg
ICAgICpieXRlcysrID0gY2hhcmFjdGVyOworICAgICAgICAgICAgb3JlZCB8PSBjaGFyYWN0ZXI7
CisgICAgICAgIH0KIAotICAgIC8vIENvbnZlcnQgdGhlIHN0cmluZyBhIGZhc3Qgd2F5IGFuZCBz
aW11bHRhbmVvdXNseSBkbyBhbiBlZmZpY2llbnQgY2hlY2sgdG8gc2VlIGlmIGl0J3MgYWxsIEFT
Q0lJLgotICAgIFVDaGFyIG9yZWQgPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgVUNoYXIgYyA9IGNoYXJhY3RlcnNbaV07Ci0gICAgICAgIGJ5
dGVzW2ldID0gYzsKLSAgICAgICAgb3JlZCB8PSBjOworICAgICAgICBpZiAoIShvcmVkICYgMHhG
RjgwKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgaWYgKCEob3Jl
ZCAmIDB4RkY4MCkpCi0gICAgICAgIHJldHVybiBzdHJpbmc7Ci0KICAgICAvLyBJZiBpdCB3YXNu
J3QgYWxsIEFTQ0lJLCBjYWxsIHRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgbW9yZS1jb21wbGV4
IGNhc2VzLgotICAgIHJldHVybiBlbmNvZGVDb21wbGV4VXNlckRlZmluZWQoY2hhcmFjdGVycywg
bGVuZ3RoLCBoYW5kbGluZyk7CisgICAgcmV0dXJuIGVuY29kZUNvbXBsZXhVc2VyRGVmaW5lZChz
dHJpbmcsIGhhbmRsaW5nKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5oCmluZGV4
IDU4MjFjYTM3ODE1MTkxZWNiMmEwYzU3OGZlMzIzZmQ4NTRhZDVlMGIuLjc0NGZkMzAxM2FlMWIx
NmYzNmJhNzJjODQ0ZmM4ZDUzMGUyMTViNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VzZXJEZWZpbmVkLmgKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsMjIgKzIzLDIwIEBACiAg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIFRleHRDb2RlY1VzZXJEZWZpbmVkX2gKLSNk
ZWZpbmUgVGV4dENvZGVjVXNlckRlZmluZWRfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJU
ZXh0Q29kZWMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgVGV4dENvZGVj
VXNlckRlZmluZWQgOiBwdWJsaWMgVGV4dENvZGVjIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0
YXRpYyB2b2lkIHJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIpOwot
ICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIpOwor
Y2xhc3MgVGV4dENvZGVjVXNlckRlZmluZWQgOiBwdWJsaWMgVGV4dENvZGVjIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgdm9pZCByZWdpc3RlckVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0
cmFyKTsKKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIp
OwogCi0gICAgICAgIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJv
b2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9yKSBvdmVycmlkZTsKLSAg
ICAgICAgQ1N0cmluZyBlbmNvZGUoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29k
YWJsZUhhbmRsaW5nKSBvdmVycmlkZTsKLSAgICB9OworcHJpdmF0ZToKKyAgICBTdHJpbmcgZGVj
b2RlKGNvbnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVy
cm9yLCBib29sJiBzYXdFcnJvcikgZmluYWw7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZShT
dHJpbmdWaWV3LCBVbmVuY29kYWJsZUhhbmRsaW5nKSBmaW5hbDsKK307CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFRleHRDb2RlY1VzZXJEZWZpbmVkX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcAppbmRleCA3ZGFiYTY3ZTIy
NDhiZmQyNjM4OTFlMzdhZmY5OWNkOGNlNDkxM2JiLi4wMzI3YTVjMGI0NTIwMjMwZjQ3YjJhMWJm
YmIwMjM1NDM2ZDlmOTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRFbmNvZGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
RW5jb2RpbmcuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29t
PgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCiAgKgpAQCAt
NDgsNyArNDgsNyBAQCBUZXh0RW5jb2Rpbmc6OlRleHRFbmNvZGluZyhjb25zdCBjaGFyKiBuYW1l
KQogICAgICwgbV9iYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKGJhY2tzbGFzaEFzQ3VycmVuY3lT
eW1ib2woKSkKIHsKICAgICAvLyBBbGlhc2VzIGFyZSB2YWxpZCwgYnV0IG5vdCAicmVwbGFjZW1l
bnQiIGl0c2VsZi4KLSAgICBpZiAobV9uYW1lICYmIGlzUmVwbGFjZW1lbnRFbmNvZGluZyhuYW1l
KSkKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgInJlcGxhY2Vt
ZW50IikpCiAgICAgICAgIG1fbmFtZSA9IG51bGxwdHI7CiB9CiAKQEAgLTU3LDcgKzU3LDcgQEAg
VGV4dEVuY29kaW5nOjpUZXh0RW5jb2RpbmcoY29uc3QgU3RyaW5nJiBuYW1lKQogICAgICwgbV9i
YWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSkKIHsK
ICAgICAvLyBBbGlhc2VzIGFyZSB2YWxpZCwgYnV0IG5vdCAicmVwbGFjZW1lbnQiIGl0c2VsZi4K
LSAgICBpZiAobV9uYW1lICYmIGlzUmVwbGFjZW1lbnRFbmNvZGluZyhuYW1lKSkKKyAgICBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgInJlcGxhY2VtZW50IikpCiAgICAg
ICAgIG1fbmFtZSA9IG51bGxwdHI7CiB9CiAKQEAgLTY5LDEzICs2OSwxMiBAQCBTdHJpbmcgVGV4
dEVuY29kaW5nOjpkZWNvZGUoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCwgYm9vbCBz
dG9wT25FcnJvciwgYgogICAgIHJldHVybiBuZXdUZXh0Q29kZWMoKnRoaXMpLT5kZWNvZGUoZGF0
YSwgbGVuZ3RoLCB0cnVlLCBzdG9wT25FcnJvciwgc2F3RXJyb3IpOwogfQogCi1DU3RyaW5nIFRl
eHRFbmNvZGluZzo6ZW5jb2RlKFN0cmluZ1ZpZXcgdGV4dCwgVW5lbmNvZGFibGVIYW5kbGluZyBo
YW5kbGluZykgY29uc3QKK1ZlY3Rvcjx1aW50OF90PiBUZXh0RW5jb2Rpbmc6OmVuY29kZShTdHJp
bmdWaWV3IHRleHQsIFVuZW5jb2RhYmxlSGFuZGxpbmcgaGFuZGxpbmcpIGNvbnN0CiB7Ci0gICAg
aWYgKCFtX25hbWUpCi0gICAgICAgIHJldHVybiBDU3RyaW5nKCk7CisgICAgaWYgKCFtX25hbWUg
fHwgdGV4dC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBpZiAodGV4dC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAiIjsKKyAgICAvLyBGSVhNRTogQ29uc2lkZXIgYWRk
aW5nIGEgZmFzdCBjYXNlIGZvciBBU0NJSS4KIAogICAgIC8vIEZJWE1FOiBXaGF0J3MgdGhlIHJp
Z2h0IHBsYWNlIHRvIGRvIG5vcm1hbGl6YXRpb24/CiAgICAgLy8gSXQncyBhIGxpdHRsZSBzdHJh
bmdlIHRvIGRvIGl0IGluc2lkZSB0aGUgZW5jb2RlIGZ1bmN0aW9uLgpAQCAtODQsNyArODMsNyBA
QCBDU3RyaW5nIFRleHRFbmNvZGluZzo6ZW5jb2RlKFN0cmluZ1ZpZXcgdGV4dCwgVW5lbmNvZGFi
bGVIYW5kbGluZyBoYW5kbGluZykgY29ucwogICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
ID0gdGV4dC51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKIAogICAgIGNvbnN0IFVDaGFyKiBzb3Vy
Y2UgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgc2l6ZV90IHNvdXJjZUxlbmd0aCA9IHRl
eHQubGVuZ3RoKCk7CisgICAgdW5zaWduZWQgc291cmNlTGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsK
IAogICAgIFZlY3RvcjxVQ2hhcj4gbm9ybWFsaXplZENoYXJhY3RlcnM7CiAKQEAgLTEwNCw3ICsx
MDMsNyBAQCBDU3RyaW5nIFRleHRFbmNvZGluZzo6ZW5jb2RlKFN0cmluZ1ZpZXcgdGV4dCwgVW5l
bmNvZGFibGVIYW5kbGluZyBoYW5kbGluZykgY29ucwogICAgICAgICBzb3VyY2VMZW5ndGggPSBu
b3JtYWxpemVkTGVuZ3RoOwogICAgIH0KIAotICAgIHJldHVybiBuZXdUZXh0Q29kZWMoKnRoaXMp
LT5lbmNvZGUoc291cmNlLCBzb3VyY2VMZW5ndGgsIGhhbmRsaW5nKTsKKyAgICByZXR1cm4gbmV3
VGV4dENvZGVjKCp0aGlzKS0+ZW5jb2RlKFN0cmluZ1ZpZXcgeyBzb3VyY2UsIHNvdXJjZUxlbmd0
aCB9LCBoYW5kbGluZyk7CiB9CiAKIGNvbnN0IGNoYXIqIFRleHRFbmNvZGluZzo6ZG9tTmFtZSgp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNv
ZGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuaAppbmRl
eCAyMDRkNDc4NWM1YzgyZTM0Njg5Njk5NGIxMmQxMWRkNTgxODE3YzNmLi5hYzEwOWFhOGFhYTQ0
MDg0MzZhYjU1N2Y4YzFmMzhjOTNiNWM0Y2Y1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dEVuY29kaW5nLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsOCArMjUsOCBA
QAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlRleHRDb2RlYy5oIgotI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8cGFsL3RleHQvVW5lbmNvZGFibGVIYW5kbGluZy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGRl
Y29kZShjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYg
c2F3RXJyb3IpIGNvbnN0OwogICAgIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBs
ZW5ndGgpIGNvbnN0OwotICAgIENTdHJpbmcgZW5jb2RlKFN0cmluZ1ZpZXcsIFVuZW5jb2RhYmxl
SGFuZGxpbmcpIGNvbnN0OworICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGUoU3RyaW5nVmlldywg
VW5lbmNvZGFibGVIYW5kbGluZykgY29uc3Q7CiAKICAgICBVQ2hhciBiYWNrc2xhc2hBc0N1cnJl
bmN5U3ltYm9sKCkgY29uc3Q7CiAgICAgYm9vbCBpc0J5dGVCYXNlZEVuY29kaW5nKCkgY29uc3Qg
eyByZXR1cm4gIWlzTm9uQnl0ZUJhc2VkRW5jb2RpbmcoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAppbmRleCA2ZTU0
MjMzM2FiMDEwMGIwYzczNzhkZGU2MTI4MjBhMjMyYzhiNzVhLi41NTZkZmYzZWM1NGM0NzRiMDRm
MzAxZGZmOTZhYmRjZTMzODg5YWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CkBAIC0zMCwyMyArMzAsMjEgQEAKICNpbmNsdWRlICJUZXh0Q29k
ZWNJQ1UuaCIKICNpbmNsdWRlICJUZXh0Q29kZWNMYXRpbjEuaCIKICNpbmNsdWRlICJUZXh0Q29k
ZWNSZXBsYWNlbWVudC5oIgotI2luY2x1ZGUgIlRleHRDb2RlY1VzZXJEZWZpbmVkLmgiCiAjaW5j
bHVkZSAiVGV4dENvZGVjVVRGMTYuaCIKICNpbmNsdWRlICJUZXh0Q29kZWNVVEY4LmgiCisjaW5j
bHVkZSAiVGV4dENvZGVjVXNlckRlZmluZWQuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIK
ICNpbmNsdWRlIDxtdXRleD4KICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1ZGUg
PHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNs
dWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KLQotI2lu
Y2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
IAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCkBAIC05MCwx
NCArODgsOCBAQCBzdHJ1Y3QgVGV4dEVuY29kaW5nTmFtZUhhc2ggewogICAgIHN0YXRpYyBjb25z
dCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CiB9OwogCi1zdHJ1
Y3QgVGV4dENvZGVjRmFjdG9yeSB7Ci0gICAgTmV3VGV4dENvZGVjRnVuY3Rpb24gZnVuY3Rpb247
Ci0gICAgY29uc3Qgdm9pZCogYWRkaXRpb25hbERhdGE7Ci0gICAgVGV4dENvZGVjRmFjdG9yeShO
ZXdUZXh0Q29kZWNGdW5jdGlvbiBmID0gMCwgY29uc3Qgdm9pZCogZCA9IDApIDogZnVuY3Rpb24o
ZiksIGFkZGl0aW9uYWxEYXRhKGQpIHsgfQotfTsKLQotdHlwZWRlZiBIYXNoTWFwPGNvbnN0IGNo
YXIqLCBjb25zdCBjaGFyKiwgVGV4dEVuY29kaW5nTmFtZUhhc2g+IFRleHRFbmNvZGluZ05hbWVN
YXA7Ci10eXBlZGVmIEhhc2hNYXA8Y29uc3QgY2hhciosIFRleHRDb2RlY0ZhY3Rvcnk+IFRleHRD
b2RlY01hcDsKK3VzaW5nIFRleHRFbmNvZGluZ05hbWVNYXAgPSBIYXNoTWFwPGNvbnN0IGNoYXIq
LCBjb25zdCBjaGFyKiwgVGV4dEVuY29kaW5nTmFtZUhhc2g+OwordXNpbmcgVGV4dENvZGVjTWFw
ID0gSGFzaE1hcDxjb25zdCBjaGFyKiwgTmV3VGV4dENvZGVjRnVuY3Rpb24+OwogCiBzdGF0aWMg
U3RhdGljTG9jayBlbmNvZGluZ1JlZ2lzdHJ5TXV0ZXg7CiAKQEAgLTEzOCwxMSArMTMwLDExIEBA
IHN0YXRpYyB2b2lkIGFkZFRvVGV4dEVuY29kaW5nTmFtZU1hcChjb25zdCBjaGFyKiBhbGlhcywg
Y29uc3QgY2hhciogbmFtZSkKICAgICB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5hZGQoYWxpYXMsIGF0
b21pY05hbWUpOwogfQogCi1zdGF0aWMgdm9pZCBhZGRUb1RleHRDb2RlY01hcChjb25zdCBjaGFy
KiBuYW1lLCBOZXdUZXh0Q29kZWNGdW5jdGlvbiBmdW5jdGlvbiwgY29uc3Qgdm9pZCogYWRkaXRp
b25hbERhdGEpCitzdGF0aWMgdm9pZCBhZGRUb1RleHRDb2RlY01hcChjb25zdCBjaGFyKiBuYW1l
LCBOZXdUZXh0Q29kZWNGdW5jdGlvbiYmIGZ1bmN0aW9uKQogewogICAgIGNvbnN0IGNoYXIqIGF0
b21pY05hbWUgPSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5nZXQobmFtZSk7CiAgICAgQVNTRVJUKGF0
b21pY05hbWUpOwotICAgIHRleHRDb2RlY01hcC0+YWRkKGF0b21pY05hbWUsIFRleHRDb2RlY0Zh
Y3RvcnkoZnVuY3Rpb24sIGFkZGl0aW9uYWxEYXRhKSk7CisgICAgdGV4dENvZGVjTWFwLT5hZGQo
YXRvbWljTmFtZSwgV1RGTW92ZShmdW5jdGlvbikpOwogfQogCiBzdGF0aWMgdm9pZCBwcnVuZUJs
YWNrbGlzdGVkQ29kZWNzKCkKQEAgLTIzNCwyMiArMjI2LDYgQEAgYm9vbCBpc0phcGFuZXNlRW5j
b2RpbmcoY29uc3QgY2hhciogY2Fub25pY2FsRW5jb2RpbmdOYW1lKQogICAgIHJldHVybiBjYW5v
bmljYWxFbmNvZGluZ05hbWUgJiYgamFwYW5lc2VFbmNvZGluZ3MgJiYgamFwYW5lc2VFbmNvZGlu
Z3MtPmNvbnRhaW5zKGNhbm9uaWNhbEVuY29kaW5nTmFtZSk7CiB9CiAKLWJvb2wgaXNSZXBsYWNl
bWVudEVuY29kaW5nKGNvbnN0IGNoYXIqIGFsaWFzKQotewotICAgIGlmICghYWxpYXMpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChzdHJsZW4oYWxpYXMpICE9IDExKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gIXN0cmNhc2VjbXAoYWxpYXMsICJyZXBsYWNl
bWVudCIpOwotfQotCi1ib29sIGlzUmVwbGFjZW1lbnRFbmNvZGluZyhjb25zdCBTdHJpbmcmIGFs
aWFzKQotewotICAgIHJldHVybiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShhbGlhcywg
InJlcGxhY2VtZW50Iik7Ci19Ci0KIGJvb2wgc2hvdWxkU2hvd0JhY2tzbGFzaEFzQ3VycmVuY3lT
eW1ib2xJbihjb25zdCBjaGFyKiBjYW5vbmljYWxFbmNvZGluZ05hbWUpCiB7CiAgICAgcmV0dXJu
IGNhbm9uaWNhbEVuY29kaW5nTmFtZSAmJiBub25CYWNrc2xhc2hFbmNvZGluZ3MgJiYgbm9uQmFj
a3NsYXNoRW5jb2RpbmdzLT5jb250YWlucyhjYW5vbmljYWxFbmNvZGluZ05hbWUpOwpAQCAtMjcy
LDkgKzI0OCw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxUZXh0Q29kZWM+IG5ld1RleHRDb2RlYyhjb25z
dCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQogICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2Nr
PiBsb2NrKGVuY29kaW5nUmVnaXN0cnlNdXRleCk7CiAKICAgICBBU1NFUlQodGV4dENvZGVjTWFw
KTsKLSAgICBUZXh0Q29kZWNGYWN0b3J5IGZhY3RvcnkgPSB0ZXh0Q29kZWNNYXAtPmdldChlbmNv
ZGluZy5uYW1lKCkpOwotICAgIEFTU0VSVChmYWN0b3J5LmZ1bmN0aW9uKTsKLSAgICByZXR1cm4g
ZmFjdG9yeS5mdW5jdGlvbihlbmNvZGluZywgZmFjdG9yeS5hZGRpdGlvbmFsRGF0YSk7CisgICAg
YXV0byByZXN1bHQgPSB0ZXh0Q29kZWNNYXAtPmZpbmQoZW5jb2RpbmcubmFtZSgpKTsKKyAgICBB
U1NFUlQocmVzdWx0ICE9IHRleHRDb2RlY01hcC0+ZW5kKCkpOworICAgIHJldHVybiByZXN1bHQt
PnZhbHVlKCk7CiB9CiAKIGNvbnN0IGNoYXIqIGF0b21pY0Nhbm9uaWNhbFRleHRFbmNvZGluZ05h
bWUoY29uc3QgY2hhciogbmFtZSkKQEAgLTI5NywxNiArMjczLDE0IEBAIGNvbnN0IGNoYXIqIGF0
b21pY0Nhbm9uaWNhbFRleHRFbmNvZGluZ05hbWUoY29uc3QgY2hhciogbmFtZSkKICAgICByZXR1
cm4gdGV4dEVuY29kaW5nTmFtZU1hcC0+Z2V0KG5hbWUpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KLWNvbnN0IGNoYXIqIGF0b21pY0Nhbm9uaWNhbFRleHRFbmNvZGlu
Z05hbWUoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKK3Rl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBjb25zdCBjaGFyKiBhdG9taWND
YW5vbmljYWxUZXh0RW5jb2RpbmdOYW1lKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMs
IHNpemVfdCBsZW5ndGgpCiB7CiAgICAgY2hhciBidWZmZXJbbWF4RW5jb2RpbmdOYW1lTGVuZ3Ro
ICsgMV07CiAgICAgc2l6ZV90IGogPSAwOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgQ2hhcmFjdGVyVHlwZSBjID0gY2hhcmFjdGVyc1tpXTsKICAg
ICAgICAgaWYgKGogPT0gbWF4RW5jb2RpbmdOYW1lTGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgIGJ1ZmZlcltqKytdID0gYzsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICBidWZmZXJbaisrXSA9IGNoYXJhY3RlcnNbaV07CiAgICAgfQogICAgIGJ1ZmZl
cltqXSA9IDA7CiAgICAgcmV0dXJuIGF0b21pY0Nhbm9uaWNhbFRleHRFbmNvZGluZ05hbWUoYnVm
ZmVyKTsKQEAgLTMxNCw3ICsyODgsNyBAQCBjb25zdCBjaGFyKiBhdG9taWNDYW5vbmljYWxUZXh0
RW5jb2RpbmdOYW1lKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHNpegogCiBjb25z
dCBjaGFyKiBhdG9taWNDYW5vbmljYWxUZXh0RW5jb2RpbmdOYW1lKGNvbnN0IFN0cmluZyYgYWxp
YXMpCiB7Ci0gICAgaWYgKCFhbGlhcy5sZW5ndGgoKSkKKyAgICBpZiAoYWxpYXMuaXNFbXB0eSgp
IHx8ICFhbGlhcy5pc0FsbEFTQ0lJKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAg
aWYgKGFsaWFzLmlzOEJpdCgpKQpAQCAtMzUzLDE5ICszMjcsNCBAQCBTdHJpbmcgZGVmYXVsdFRl
eHRFbmNvZGluZ05hbWVGb3JTeXN0ZW1MYW5ndWFnZSgpCiAjZW5kaWYKIH0KIAotI2lmbmRlZiBO
REVCVUcKLXZvaWQgZHVtcFRleHRFbmNvZGluZ05hbWVNYXAoKQotewotICAgIHVuc2lnbmVkIHNp
emUgPSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5zaXplKCk7Ci0gICAgZnByaW50ZihzdGRlcnIsICJE
dW1waW5nICV1IGVudHJpZXMgaW4gV2ViQ29yZTo6dGV4dEVuY29kaW5nTmFtZU1hcC4uLlxuIiwg
c2l6ZSk7Ci0KLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayhlbmNvZGluZ1Jl
Z2lzdHJ5TXV0ZXgpOwotCi0gICAgVGV4dEVuY29kaW5nTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5iZWdpbigpOwotICAgIFRleHRFbmNvZGluZ05hbWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRleHRFbmNvZGluZ05hbWVNYXAtPmVuZCgpOwotICAg
IGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJyVzJyA9
PiAnJXMnXG4iLCBpdC0+a2V5LCBpdC0+dmFsdWUpOwotfQotI2VuZGlmCi0KIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dEVuY29kaW5nUmVnaXN0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVu
Y29kaW5nUmVnaXN0cnkuaAppbmRleCBiY2M0Yjg3NTY3YWNlMzNhMDIzNTA0MTI3NWY4ZTliODY3
ZTVmNmViLi45ZmMzOTY5OWE3YjllOWZkMDRlY2YzZGI3NjFiNzRiN2VjMThlNWIxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5o
CkBAIC0yNiw3ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPG1lbW9yeT4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM5LDIyICszOSwxNSBAQCBXRUJDT1JFX0VYUE9S
VCBzdGQ6OnVuaXF1ZV9wdHI8VGV4dENvZGVjPiBuZXdUZXh0Q29kZWMoY29uc3QgVGV4dEVuY29k
aW5nJik7CiAKIC8vIE9ubHkgVGV4dEVuY29kaW5nIHNob3VsZCB1c2UgdGhlIGZvbGxvd2luZyBm
dW5jdGlvbnMgZGlyZWN0bHkuCiBjb25zdCBjaGFyKiBhdG9taWNDYW5vbmljYWxUZXh0RW5jb2Rp
bmdOYW1lKGNvbnN0IGNoYXIqIGFsaWFzKTsKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPgotY29uc3QgY2hhciogYXRvbWljQ2Fub25pY2FsVGV4dEVuY29kaW5nTmFtZShjb25zdCBD
aGFyYWN0ZXJUeXBlKiwgc2l6ZV90KTsKIGNvbnN0IGNoYXIqIGF0b21pY0Nhbm9uaWNhbFRleHRF
bmNvZGluZ05hbWUoY29uc3QgU3RyaW5nJik7CiBib29sIG5vRXh0ZW5kZWRUZXh0RW5jb2RpbmdO
YW1lVXNlZCgpOwogYm9vbCBpc0phcGFuZXNlRW5jb2RpbmcoY29uc3QgY2hhciogY2Fub25pY2Fs
RW5jb2RpbmdOYW1lKTsKIGJvb2wgc2hvdWxkU2hvd0JhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2xJ
bihjb25zdCBjaGFyKiBjYW5vbmljYWxFbmNvZGluZ05hbWUpOwotYm9vbCBpc1JlcGxhY2VtZW50
RW5jb2RpbmcoY29uc3QgY2hhciogYWxpYXMpOwotYm9vbCBpc1JlcGxhY2VtZW50RW5jb2Rpbmco
Y29uc3QgU3RyaW5nJiBhbGlhcyk7CiAKIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBkZWZhdWx0VGV4
dEVuY29kaW5nTmFtZUZvclN5c3RlbUxhbmd1YWdlKCk7CisKICNpZiBQTEFURk9STShDT0NPQSkK
IFdFQkNPUkVfRVhQT1JUIENGU3RyaW5nRW5jb2Rpbmcgd2ViRGVmYXVsdENGU3RyaW5nRW5jb2Rp
bmcoKTsKICNlbmRpZgogCi0jaWZuZGVmIE5ERUJVRwotdm9pZCBkdW1wVGV4dEVuY29kaW5nTmFt
ZU1hcCgpOwotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luL1RleHRDb2RlY1dpbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbi9UZXh0Q29kZWNXaW4uY3BwCmluZGV4IDRmMTc4ZTgw
MTI4NjBiNWFjMjk5ZGYwZGMwM2E4MTQyMTg0MjZlYmIuLmFmNDY5MTM5MDgxZTgwYzEyMDdiODJj
OTdmZGZhM2M3NzIxYTY1MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvd2luL1RleHRDb2RlY1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC93aW4vVGV4dENvZGVjV2luLmNwcApAQCAtMjgxLDcgKzI4MSw3IEBAIENTdHJpbmcgVGV4dENv
ZGVjV2luOjplbmNvZGUoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFVu
ZW5jb2RhYmxlCiAKICAgICBpbnQgcmVzdWx0TGVuZ3RoID0gV2lkZUNoYXJUb011bHRpQnl0ZSht
X2NvZGVQYWdlLCBXQ19DT01QT1NJVEVDSEVDSywgY2hhcmFjdGVycywgbGVuZ3RoLCAwLCAwLCAw
LCAwKTsKIAotICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGltcGxlbWVudCBVbmVuY29kYWJsZUhh
bmRsaW5nOiBRdWVzdGlvbk1hcmtzRm9yVW5lbmNvZGFibGVzLCBFbnRpdGllc0ZvclVuZW5jb2Rh
YmxlcywgYW5kIFVSTEVuY29kZWRFbnRpdGllc0ZvclVuZW5jb2RhYmxlcy4KKyAgICAvLyBGSVhN
RTogV2UgbmVlZCB0byBpbXBsZW1lbnQgVW5lbmNvZGFibGVIYW5kbGluZy4KIAogICAgIGlmIChy
ZXN1bHRMZW5ndGggPD0gMCkKICAgICAgICAgcmV0dXJuICI/IjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuY3BwCmluZGV4IDA5NmYwNTU1YWMxZWU0NTJiNjQ1YTJiYjljZWQ1MmUxNjUx
NTRiYTEuLjMzMzFmOTM5ZDkxMGFhMDhlOWNlMGZiYzY3ZjQyYzcwNWFlMTBlNjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtNDY1LDcgKzQ2NSw3IEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IFhNTEh0dHBSZXF1ZXN0OjpzZW5kKERvY3VtZW50JiBkb2N1bWVudCkKIAogICAg
ICAgICAvLyBGSVhNRTogQWNjb3JkaW5nIHRvIFhNTEh0dHBSZXF1ZXN0IExldmVsIDIsIHRoaXMg
c2hvdWxkIHVzZSB0aGUgRG9jdW1lbnQuaW5uZXJIVE1MIGFsZ29yaXRobQogICAgICAgICAvLyBm
cm9tIHRoZSBIVE1MNSBzcGVjaWZpY2F0aW9uIHRvIHNlcmlhbGl6ZSB0aGUgZG9jdW1lbnQuCi0g
ICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHkgPSBGb3JtRGF0YTo6Y3JlYXRlKFVURjhFbmNvZGlu
ZygpLmVuY29kZShjcmVhdGVNYXJrdXAoZG9jdW1lbnQpLCBFbnRpdGllc0ZvclVuZW5jb2RhYmxl
cykpOworICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5ID0gRm9ybURhdGE6OmNyZWF0ZShVVEY4
RW5jb2RpbmcoKS5lbmNvZGUoY3JlYXRlTWFya3VwKGRvY3VtZW50KSwgVW5lbmNvZGFibGVIYW5k
bGluZzo6RW50aXRpZXMpKTsKICAgICAgICAgaWYgKG1fdXBsb2FkKQogICAgICAgICAgICAgbV9y
ZXF1ZXN0RW50aXR5Qm9keS0+c2V0QWx3YXlzU3RyZWFtKHRydWUpOwogICAgIH0KQEAgLTQ5Miw3
ICs0OTIsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBYTUxIdHRwUmVxdWVzdDo6c2VuZChjb25zdCBT
dHJpbmcmIGJvZHkpCiAgICAgICAgICAgICBtX3JlcXVlc3RIZWFkZXJzLnNldChIVFRQSGVhZGVy
TmFtZTo6Q29udGVudFR5cGUsIGNvbnRlbnRUeXBlKTsKICAgICAgICAgfQogCi0gICAgICAgIG1f
cmVxdWVzdEVudGl0eUJvZHkgPSBGb3JtRGF0YTo6Y3JlYXRlKFVURjhFbmNvZGluZygpLmVuY29k
ZShib2R5LCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcykpOworICAgICAgICBtX3JlcXVlc3RFbnRp
dHlCb2R5ID0gRm9ybURhdGE6OmNyZWF0ZShVVEY4RW5jb2RpbmcoKS5lbmNvZGUoYm9keSwgVW5l
bmNvZGFibGVIYW5kbGluZzo6RW50aXRpZXMpKTsKICAgICAgICAgaWYgKG1fdXBsb2FkKQogICAg
ICAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keS0+c2V0QWx3YXlzU3RyZWFtKHRydWUpOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUVW5pY29kZVNvcnQuY3BwIGIv
U291cmNlL1dlYkNvcmUveG1sL1hTTFRVbmljb2RlU29ydC5jcHAKaW5kZXggYzJkODU2ZWY2YjE1
NTQ1MGNjMmNjODFhMmExYjA0ZmYzZWE0YTk2Yi4uZjllNTZiOWIyYWZjYTVhNzA3NzdiMzAwNjFk
ODIzZGQ2M2I4Mzg0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hTTFRVbmljb2Rl
U29ydC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hTTFRVbmljb2RlU29ydC5jcHAKQEAg
LTMzLDcgKzMzLDYgQEAKIAogI2luY2x1ZGUgPGxpYnhzbHQvdGVtcGxhdGVzLmg+CiAjaW5jbHVk
ZSA8bGlieHNsdC94c2x0dXRpbHMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NvbGxhdG9yLmg+
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJz
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5jcHAK
aW5kZXggOGU2YjgzNTRjZjhjZTIxMWUwNzYyNzUxNzYyZWEwNGE1ZDcyODhmNy4uMWYyOGE4ZWJh
NTlkZjFlNmUyMWZjYzg3NWUwZjQ5MGJhYTYwODg1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
eG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5jcHAKQEAgLTUxLDcgKzUxLDYgQEAKICNpbmNs
dWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiVHJlZURlcHRoTGltaXQuaCIK
ICNpbmNsdWRlIDx3dGYvUmVmLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwy
LmNwcAppbmRleCBhMzdkNjE1MTZhNjI4MDBmNWE0MzFiODkxYzcyNzM0ZjA5MDM1YmNjLi4wYTky
MmU3ZjExZGI5ZTI5NzFlYzE3N2ZiYWI3ZmY1ODUxOTY3NTlmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCkBAIC01
Myw3ICs1Myw2IEBACiAjaW5jbHVkZSAiWE1MTlNOYW1lcy5oIgogI2luY2x1ZGUgIlhNTERvY3Vt
ZW50UGFyc2VyU2NvcGUuaCIKICNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg+Ci0j
aW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VURjgu
aD4KIAogI2lmIEVOQUJMRShYU0xUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVCcm93c2VyRnVuY3MuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVCcm93c2VyRnVuY3MuY3Bw
CmluZGV4IDZhNGRhYjAxNjQ4ODI4OWM5YWE3NmU4ZTNhNWVhY2YxODQzOWE0OWEuLjNiZTRmNDhh
ZDI5OTFiZTgyODY4NWE2NTNlNjQxZmYxMjhhMjJiZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlQnJvd3NlckZ1bmNzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZUJy
b3dzZXJGdW5jcy5jcHAKQEAgLTg4MCw5ICs4ODAsOSBAQCBzdGF0aWMgTlBFcnJvciBOUE5fU2V0
VmFsdWVGb3JVUkwoTlBQIG5wcCwgTlBOVVJMVmFyaWFibGUgdmFyaWFibGUsIGNvbnN0IGNoYXIq
CiBzdGF0aWMgYm9vbCBpbml0aWFsaXplUHJvdGVjdGlvblNwYWNlKGNvbnN0IGNoYXIqIHByb3Rv
Y29sLCBjb25zdCBjaGFyKiBob3N0LCBpbnQgcG9ydCwgY29uc3QgY2hhciogc2NoZW1lLCBjb25z
dCBjaGFyKiByZWFsbSwgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UpCiB7CiAgICAg
UHJvdGVjdGlvblNwYWNlU2VydmVyVHlwZSBzZXJ2ZXJUeXBlOwotICAgIGlmICghc3RyY2FzZWNt
cChwcm90b2NvbCwgImh0dHAiKSkKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UocHJvdG9jb2wsICJodHRwIikpCiAgICAgICAgIHNlcnZlclR5cGUgPSBQcm90ZWN0aW9uU3Bh
Y2VTZXJ2ZXJIVFRQOwotICAgIGVsc2UgaWYgKCFzdHJjYXNlY21wKHByb3RvY29sLCAiaHR0cHMi
KSkKKyAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwcm90b2NvbCwg
Imh0dHBzIikpCiAgICAgICAgIHNlcnZlclR5cGUgPSBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJIVFRQ
UzsKICAgICBlbHNlIHsKICAgICAgICAgLy8gV2Ugb25seSBjYXJlIGFib3V0IGh0dHAgYW5kIGh0
dHBzLgpAQCAtODkxLDkgKzg5MSw5IEBAIHN0YXRpYyBib29sIGluaXRpYWxpemVQcm90ZWN0aW9u
U3BhY2UoY29uc3QgY2hhciogcHJvdG9jb2wsIGNvbnN0IGNoYXIqIGhvc3QsIGluCiAKICAgICBQ
cm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZSBhdXRoZW50aWNhdGlvblNjaGVtZSA9
IFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lRGVmYXVsdDsKICAgICBpZiAoc2Vy
dmVyVHlwZSA9PSBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJIVFRQKSB7Ci0gICAgICAgIGlmICghc3Ry
Y2FzZWNtcChzY2hlbWUsICJiYXNpYyIpKQorICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2Uoc2NoZW1lLCAiYmFzaWMiKSkKICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9u
U2NoZW1lID0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVIVFRQQmFzaWM7Ci0g
ICAgICAgIGVsc2UgaWYgKCFzdHJjbXAoc2NoZW1lLCAiZGlnZXN0IikpCisgICAgICAgIGVsc2Ug
aWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHNjaGVtZSwgImRpZ2VzdCIpKQogICAg
ICAgICAgICAgYXV0aGVudGljYXRpb25TY2hlbWUgPSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNh
dGlvblNjaGVtZUhUVFBEaWdlc3Q7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9IaXN0b3J5L0hpc3RvcnlQcm9wZXJ0eUxpc3QubW0gYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9IaXN0b3J5L0hpc3RvcnlQcm9wZXJ0eUxpc3QubW0KaW5kZXggMDYwYTNiZjc4
NzFkMjFhN2VkNThlZDE1OTJlMDhhMGZhMTY1ODEyZC4uNDc5MTZlNzgxYTI0MzA0MWUxZDU4MjQ4
YWJmYWVhYWMwYzU3YmI1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlz
dG9yeS9IaXN0b3J5UHJvcGVydHlMaXN0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0hpc3RvcnkvSGlzdG9yeVByb3BlcnR5TGlzdC5tbQpAQCAtMjcsNyArMjcsNiBAQAogCiAjaW1w
b3J0ICJXZWJIaXN0b3J5SXRlbUludGVybmFsLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0hpc3RvcnlJ
dGVtLmg+Ci0jaW1wb3J0IDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dl
YkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVn
aW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW0KaW5kZXggNzRlNzljMGRlNGJjMWFmZTBl
MTg2M2MyMDMwODlkNjdkYmY4ZTRmMi4uOGU4OTU0YjlhOTdlMzcxODQ0NDBlZWU1MzkwZDM0ZmQy
Y2NiZmZlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJC
YXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1Bs
dWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5tbQpAQCAtODU0LDExICs4NTQsOSBAQCBA
ZW5kCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1ib29sIGdldEF1dGhlbnRpY2F0aW9uSW5mbyhj
b25zdCBjaGFyKiBwcm90b2NvbFN0ciwgY29uc3QgY2hhciogaG9zdFN0ciwgaW50MzJfdCBwb3J0
LCBjb25zdCBjaGFyKiBzY2hlbWVTdHIsIGNvbnN0IGNoYXIqIHJlYWxtU3RyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ1N0cmluZyYgdXNlcm5hbWUsIENTdHJpbmcmIHBhc3N3b3JkKQor
Ym9vbCBnZXRBdXRoZW50aWNhdGlvbkluZm8oY29uc3QgY2hhciogcHJvdG9jb2xTdHIsIGNvbnN0
IGNoYXIqIGhvc3RTdHIsIGludDMyX3QgcG9ydCwgY29uc3QgY2hhciogc2NoZW1lU3RyLCBjb25z
dCBjaGFyKiByZWFsbVN0ciwgQ1N0cmluZyYgdXNlcm5hbWUsIENTdHJpbmcmIHBhc3N3b3JkKQog
ewotICAgIGlmIChzdHJjYXNlY21wKHByb3RvY29sU3RyLCAiaHR0cCIpICE9IDAgJiYgCi0gICAg
ICAgIHN0cmNhc2VjbXAocHJvdG9jb2xTdHIsICJodHRwcyIpICE9IDApCisgICAgaWYgKCFlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwcm90b2NvbFN0ciwgImh0dHAiKSAmJiAhZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocHJvdG9jb2xTdHIsICJodHRwcyIpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBOU1N0cmluZyAqaG9zdCA9IFtOU1N0cmluZyBzdHJpbmdXaXRo
VVRGOFN0cmluZzpob3N0U3RyXTsKQEAgLTg3NCwxMCArODcyLDEwIEBAIGJvb2wgZ2V0QXV0aGVu
dGljYXRpb25JbmZvKGNvbnN0IGNoYXIqIHByb3RvY29sU3RyLCBjb25zdCBjaGFyKiBob3N0U3Ry
LCBpbnQzMl90CiAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwogICAgIAogICAg
IE5TU3RyaW5nICphdXRoZW50aWNhdGlvbk1ldGhvZCA9IE5TVVJMQXV0aGVudGljYXRpb25NZXRo
b2REZWZhdWx0OwotICAgIGlmICghc3RyY2FzZWNtcChwcm90b2NvbFN0ciwgImh0dHAiKSkgewot
ICAgICAgICBpZiAoIXN0cmNhc2VjbXAoc2NoZW1lU3RyLCAiYmFzaWMiKSkKKyAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocHJvdG9jb2xTdHIsICJodHRwIikpIHsKKyAgICAg
ICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHNjaGVtZVN0ciwgImJhc2ljIikp
CiAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbk1ldGhvZCA9IE5TVVJMQXV0aGVudGljYXRpb25N
ZXRob2RIVFRQQmFzaWM7Ci0gICAgICAgIGVsc2UgaWYgKCFzdHJjYXNlY21wKHNjaGVtZVN0ciwg
ImRpZ2VzdCIpKQorICAgICAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZShzY2hlbWVTdHIsICJkaWdlc3QiKSkKICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uTWV0aG9k
ID0gTlNVUkxBdXRoZW50aWNhdGlvbk1ldGhvZEhUVFBEaWdlc3Q7CiAgICAgfQogICAgIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5t
bSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KaW5k
ZXggYjM0ZDJkZTJhYjY3ODYzNmQxNzhmMjUxNDI4MzhiYWZhNzU3NTYzNS4uMzNiZjBkOWFkNTA1
ZmIxMTg1MDJkNTU0Y2Y4NGFkNDBkZGUxMzFlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCkBAIC03NSwxNCArNzUsMTQgQEAgc3Rh
dGljIE5TTXV0YWJsZURpY3Rpb25hcnkgKndlYlByZWZlcmVuY2VzSW5zdGFuY2VzOwogCiBzdGF0
aWMgdW5zaWduZWQgd2ViUHJlZmVyZW5jZXNJbnN0YW5jZUNvdW50V2l0aFByaXZhdGVCcm93c2lu
Z0VuYWJsZWQ7CiAKLXN0YXRpYyBib29sIGNvbnRhaW5zKGNvbnN0IGNoYXIqIGNvbnN0IGFycmF5
W10sIGludCBjb3VudCwgY29uc3QgY2hhciogaXRlbSkKK3RlbXBsYXRlPHVuc2lnbmVkIHNpemU+
IHN0YXRpYyBib29sIGNvbnRhaW5zKGNvbnN0IGNoYXIqIGNvbnN0ICgmYXJyYXkpW3NpemVdLCBj
b25zdCBjaGFyKiBpdGVtKQogewogICAgIGlmICghaXRlbSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICBpZiAoIXN0
cmNhc2VjbXAoYXJyYXlbaV0sIGl0ZW0pKQorICAgIGZvciAoYXV0byogc3RyaW5nIDogYXJyYXkp
IHsKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLCBpdGVtKSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAg
LTEzOSwxMSArMTM5LDExIEBAIHN0YXRpYyBXZWJDYWNoZU1vZGVsIGNhY2hlTW9kZWxGb3JNYWlu
QnVuZGxlKHZvaWQpCiAgICAgICAgIH07CiAKICAgICAgICAgY29uc3QgY2hhciogYnVuZGxlSUQg
PSBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsK
LSAgICAgICAgaWYgKGNvbnRhaW5zKGRvY3VtZW50Vmlld2VySURzLCBzaXplb2YoZG9jdW1lbnRW
aWV3ZXJJRHMpIC8gc2l6ZW9mKGRvY3VtZW50Vmlld2VySURzWzBdKSwgYnVuZGxlSUQpKQorICAg
ICAgICBpZiAoY29udGFpbnMoZG9jdW1lbnRWaWV3ZXJJRHMsIGJ1bmRsZUlEKSkKICAgICAgICAg
ICAgIHJldHVybiBXZWJDYWNoZU1vZGVsRG9jdW1lbnRWaWV3ZXI7Ci0gICAgICAgIGlmIChjb250
YWlucyhkb2N1bWVudEJyb3dzZXJJRHMsIHNpemVvZihkb2N1bWVudEJyb3dzZXJJRHMpIC8gc2l6
ZW9mKGRvY3VtZW50QnJvd3NlcklEc1swXSksIGJ1bmRsZUlEKSkKKyAgICAgICAgaWYgKGNvbnRh
aW5zKGRvY3VtZW50QnJvd3NlcklEcywgYnVuZGxlSUQpKQogICAgICAgICAgICAgcmV0dXJuIFdl
YkNhY2hlTW9kZWxEb2N1bWVudEJyb3dzZXI7Ci0gICAgICAgIGlmIChjb250YWlucyhwcmltYXJ5
V2ViQnJvd3NlcklEcywgc2l6ZW9mKHByaW1hcnlXZWJCcm93c2VySURzKSAvIHNpemVvZihwcmlt
YXJ5V2ViQnJvd3NlcklEc1swXSksIGJ1bmRsZUlEKSkKKyAgICAgICAgaWYgKGNvbnRhaW5zKHBy
aW1hcnlXZWJCcm93c2VySURzLCBidW5kbGVJRCkpCiAgICAgICAgICAgICByZXR1cm4gV2ViQ2Fj
aGVNb2RlbFByaW1hcnlXZWJCcm93c2VyOwogCiAgICAgICAgIGJvb2wgaXNMaW5rZWRBZ2FpbnN0
V2ViS2l0ID0gV2ViS2l0TGlua2VkT25PckFmdGVyKDApOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hh
bmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGQxYWFkZGU1YzQ5MTM2MzBhZWM5MDgwNDM4
NjQ0YzFlZjIxMjlhNjUuLmRlNDU2MDUxYmNhMzM5MWRlNWI2OGRjMWQzYjU2ZDQ4ZGZhMWY0NjYg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNCBAQAorMjAxNy0xMi0wMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgTW9kZXJuaXplIHNvbWUgYXNwZWN0cyBvZiB0ZXh0IGNvZGVjcywgZWxpbWluYXRl
IFdlYktpdCB1c2Ugb2Ygc3RyY2FzZWNtcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMDA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0Q0cu
Y3BwOiBSZW1vdmVkIGluY2x1ZGUgb2YgU3RyaW5nRXh0cmFzLmguCisKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0OiBBZGRlZCBMaW5lRW5kaW5nLmNwcC4KKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajog
RGl0dG8uCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTGluZUVuZGluZy5jcHA6
IEFkZGVkLiBIYXMgdGVzdHMgZm9yIHRoZSBMaW5lRW5kaW5nCisgICAgICAgIGZ1bmN0aW9ucyBy
ZXdyaXR0ZW4gaW4gdGhpcyBwYXRjaC4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9UZXh0Q29kZWMuY3BwOiBVcGRhdGVkIHRlc3Qgbm93IHRoYXQgdGhlIGRlY29kZQor
ICAgICAgICBmdW5jdGlvbiBkb2Vzbid0IGhhdmUgZGVmYXVsdHMgZm9yIGFzIG1hbnkgYXJndW1l
bnRzIGFueSBtb3JlLiBBbHNvIGNoYW5nZWQgc28KKyAgICAgICAgdGhhdCB0aGUgdGVzdHMgbG9n
IHRoZSBmYWN0IHRoYXQgdGhlIGRlY29kZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGFuZCB1
cGRhdGVkCisgICAgICAgIGV4cGVjdGVkIHJlc3VsdHMgdG8gZXhwZWN0IGFsbCB0aGUgZXJyb3Jz
LgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcDog
RGl0dG8uCisKIDIwMTctMTItMDEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFdlYkRyaXZlcjogYXV0by1pbnN0YWxsIHB5dGVzdCBpbnN0ZWFk
IG9mIGltcG9ydGluZyBpdCBmcm9tIHdwdCB0b29scyBkaXJlY3RvcnkKZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHAgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jZy9QaXhlbER1bXBTdXBwb3J0Q0cuY3BwCmluZGV4IDhhY2I5YTcwMWYxOGQ5
YjE2YWIzOWQ2ZWQ5Y2I2ODVmM2UyZTg4NTEuLmFiZjdmODk4N2Q3ODZiNjZjNDRiMWExMWNiMzBm
ZmI4NmY1NTkwMjMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVt
cFN1cHBvcnRDRy5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3Vw
cG9ydENHLmNwcApAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNp
bmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAKICNpZiBQTEFURk9STShXSU4pCiAjaW5jbHVk
ZSAiTUQ1LmgiCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dAppbmRleCAyZGViMWVhM2ZiNWI4
M2E2MTE1Y2NiNzUxNGY3MDVjMzcyYzA3NzAzLi4zOGY0ZGM0Zjk5MDFkMDViNTE5MDBjYTdiNjQx
NGQ5MjJkYzVjNTYyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMu
dHh0CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQKQEAgLTEwNyw2ICsx
MDcsNyBAQCBzZXQoVGVzdFdURl9TT1VSQ0VTCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVz
dHMvV1RGL0pTT05WYWx1ZS5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYv
TEVCRGVjb2Rlci5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvTGlmZWN5
Y2xlTG9nZ2VyLmNwcAorICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9MaW5lRW5k
aW5nLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9MaXN0SGFzaFNldC5j
cHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvTG9jay5jcHAKICAgICAke1RF
U1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvTG9nZ2VyLmNwcApkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCAzNTM3OWMxMjZmMjFkNTNmNWRiYTEzNTE0NzRiNGE1NGVlNTgyNTNkLi4yZjc4MDc5
ZDg1NDYwZGY4ZTI5MjYyNmRiN2QyMzk2ZDkxNzlhYWQ1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtNTM5LDYgKzUzOSw3IEBACiAJCTkzQUY0RUNFMTUwNkYwNjQwMDdGRDU3RSAvKiBOZXdG
aXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQUY0RUNEMTUwNkYwNjQwMDdG
RDU3RSAvKiBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNw
cCAqLzsgfTsKIAkJOTNBRjRFRDExNTA2RjEzMDAwN0ZENTdFIC8qIGxvdHMtb2YtaW1hZ2VzLmh0
bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTNBRjRFQ0YxNTA2RjEyMzAwN0ZENTdFIC8qIGxvdHMtb2YtaW1hZ2VzLmh0bWwgKi87IH07CiAJ
CTkzQ0ZBODY3MUNFQjlFMzgwMDA1NjVBOCAvKiBhdXRvZm9jdXNlZC10ZXh0LWlucHV0Lmh0bWwg
aW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTND
RkE4NjYxQ0VCOURFMTAwMDU2NUE4IC8qIGF1dG9mb2N1c2VkLXRleHQtaW5wdXQuaHRtbCAqLzsg
fTsKKwkJOTNFMkM1NTUxRkQzMjA0MTAwRTFERjZBIC8qIExpbmVFbmRpbmcuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFMkM1NTQxRkQzMjA0MTAw
RTFERjZBIC8qIExpbmVFbmRpbmcuY3BwICovOyB9OwogCQk5M0UyRDI3NjFFRDdENTMyMDBGQTc2
RjYgLyogb2Zmc2NyZWVuLWlmcmFtZS1vZi1tZWRpYS1kb2N1bWVudC5odG1sIGluIENvcHkgUmVz
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTJEMjc1MUVEN0Q1
MTcwMEZBNzZGNiAvKiBvZmZzY3JlZW4taWZyYW1lLW9mLW1lZGlhLWRvY3VtZW50Lmh0bWwgKi87
IH07CiAJCTkzRTYxOTNCMUY5MzFCM0EwMEFGMjQ1RSAvKiBUZXh0Q29kZWMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBMjU4OTgxRjkyRkYxNTAw
M0U1MTBDIC8qIFRleHRDb2RlYy5jcHAgKi87IH07CiAJCTkzRjFEQjM0MTREQTIwODcwMDI0QzM2
MiAvKiBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRfQnVuZGxlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjFEQjMzMTREQTIwODcwMDI0
QzM2MiAvKiBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRfQnVuZGxlLmNwcCAqLzsgfTsK
QEAgLTE1MTYsNiArMTUxNyw3IEBACiAJCTkzQ0ZBODY4MUNFQkNGRUQwMDA1NjVBOCAvKiBDYW5k
aWRhdGVUZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENh
bmRpZGF0ZVRlc3RzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0QzRDE5QjE3
QjFBN0IwMDBDN0M0MTUgLyogYWxsLWNvbnRlbnQtaW4tb25lLWlmcmFtZS5odG1sICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dC5odG1sOyBwYXRoID0gImFsbC1jb250ZW50LWluLW9uZS1pZnJhbWUuaHRtbCI7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRDNEMTlEMTdCMUE4NDIwMEM3QzQxNSAvKiBM
YXlvdXRNaWxlc3RvbmVzV2l0aEFsbENvbnRlbnRJbkZyYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dE1pbGVzdG9uZXNXaXRoQWxsQ29udGVudEluRnJh
bWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0UyQzU1NDFGRDMyMDQxMDBF
MURGNkEgLyogTGluZUVuZGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBMaW5lRW5kaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNFMkQy
NzUxRUQ3RDUxNzAwRkE3NkY2IC8qIG9mZnNjcmVlbi1pZnJhbWUtb2YtbWVkaWEtZG9jdW1lbnQu
aHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJvZmZzY3JlZW4taWZyYW1lLW9mLW1l
ZGlhLWRvY3VtZW50Lmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0U5NDNG
MTFDRDNFODdFMDBBQzA4QzIgLyogVmlkZW9Db250cm9sc01hbmFnZXIubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBWaWRlb0NvbnRyb2xzTWFuYWdlci5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNGMURCMzAxNERBMjA3NjAwMjRDMzYyIC8qIE5l
d0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjYxMSw2ICsyNjEzLDcgQEAKIAkJCQk1MzFDMUQ4RDFE
RjhFRjcyMDA2RTk3OUYgLyogTEVCRGVjb2Rlci5jcHAgKi8sCiAJCQkJQTU3RDU0RjcxRjMzOTdC
NDAwQTk3QUE3IC8qIExpZmVjeWNsZUxvZ2dlci5jcHAgKi8sCiAJCQkJQTU3RDU0RjgxRjMzOTdC
NDAwQTk3QUE3IC8qIExpZmVjeWNsZUxvZ2dlci5oICovLAorCQkJCTkzRTJDNTU0MUZEMzIwNDEw
MEUxREY2QSAvKiBMaW5lRW5kaW5nLmNwcCAqLywKIAkJCQkyNjMwMEIxNzE2NzU1Q0Q5MDA2Njg4
NkQgLyogTGlzdEhhc2hTZXQuY3BwICovLAogCQkJCTBGRkM0NUE0MUI3M0VCRTIwMDg1QkQ2MiAv
KiBMb2NrLmNwcCAqLywKIAkJCQlBNTdENTRGNDFGMzM5NUQwMDBBOTdBQTcgLyogTG9nZ2VyLmNw
cCAqLywKQEAgLTI3NTgsNyArMjc2MSw2IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAogCQkJCTc1NjA5MTc2MTkyNTlDNTkwMDlFRjA2RSAvKiBpb3MgKi8sCi0JCQkJRkUy
MTdFQ0IxNjQwQTU0QTAwNTI5ODhCIC8qIEphdmFTY3JpcHRDb3JlICovLAogCQkJCUMwN0U2Q0FE
MTNGRDY3NjUwMDM4QjIyQiAvKiBtYWMgKi8sCiAJCQkJQzA4NTg3RjkxM0ZFQzM5QjAwMUVGNEU1
IC8qIFRlc3RXZWJLaXRBUEkgKi8sCiAJCQkJNDQwQTFEMzYxNEEwMTAwMDAwOEE2NkYyIC8qIFdl
YkNvcmUgKi8sCkBAIC0yOTY5LDEzICsyOTcxLDYgQEAKIAkJCW5hbWUgPSBSZXNvdXJjZXM7CiAJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQlGRTIxN0VDQjE2NDBBNTRBMDA1Mjk4
OEIgLyogSmF2YVNjcmlwdENvcmUgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxk
cmVuID0gKAotCQkJKTsKLQkJCXBhdGggPSBKYXZhU2NyaXB0Q29yZTsKLQkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7Ci0JCX07CiAvKiBFbmQgUEJYR3JvdXAgc2VjdGlvbiAqLwogCiAvKiBCZWdp
biBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLwpAQCAtMzE3MCw2ICszMTY1LDcgQEAKIAkJCQk3
QTA1MDk0MTFGQjlGMDY0MDBCMzNGQjggLyogSlNPTlZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUzMUMxRDhFMURGOEVGNzIwMDZFOTc5RiAvKiBMRUJEZWNvZGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1N0Q1NEY5MUYzMzk3QjQwMEE5N0FBNyAvKiBMaWZlY3ljbGVMb2dnZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJOTNFMkM1NTUxRkQzMjA0MTAwRTFERjZBIC8qIExpbmVFbmRp
bmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RFRTgxRDBBNTkwQzAwRkVCQ0YzIC8qIExp
c3RIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjFEMUQwQTU5MEMwMEZFQkNG
MyAvKiBMb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1N0Q1NEY2MUYzMzk1RDAwMEE5N0FB
NyAvKiBMb2dnZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9MaW5lRW5kaW5nLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL0xpbmVFbmRpbmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdhZDNlY2YzMTU0ZGY5NzI1YjA3MGZk
ZWVmZjcwYmZiNzI4ODVlYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9MaW5lRW5kaW5nLmNwcApAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9MaW5lRW5kaW5nLmg+CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKwor
Y29uc3QgdWludDhfdCBudWxsID0gMDsKK2NvbnN0IHVpbnQ4X3QgQ1IgPSAnXHInOworY29uc3Qg
dWludDhfdCBMRiA9ICdcbic7Citjb25zdCB1aW50OF90IGxldHRlckEgPSAnYSc7Citjb25zdCB1
aW50OF90IGxldHRlckIgPSAnYic7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBzdHJpbmdpZnkoY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiB2ZWN0b3IpCit7CisgICAgc3RhdGljIGNoYXIgYnVmZmVyWzEw
MF07CisgICAgY2hhciogb3V0ID0gYnVmZmVyOworICAgIGZvciAoYXV0byBjaGFyYWN0ZXIgOiB2
ZWN0b3IpIHsKKyAgICAgICAgc3dpdGNoIChjaGFyYWN0ZXIpIHsKKyAgICAgICAgY2FzZSAnXDAn
OgorICAgICAgICAgICAgKm91dCsrID0gJzwnOworICAgICAgICAgICAgKm91dCsrID0gJzAnOwor
ICAgICAgICAgICAgKm91dCsrID0gJz4nOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgJ1xyJzoKKyAgICAgICAgICAgICpvdXQrKyA9ICc8JzsKKyAgICAgICAgICAgICpvdXQrKyA9
ICdDJzsKKyAgICAgICAgICAgICpvdXQrKyA9ICdSJzsKKyAgICAgICAgICAgICpvdXQrKyA9ICc+
JzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdcbic6CisgICAgICAgICAgICAq
b3V0KysgPSAnPCc7CisgICAgICAgICAgICAqb3V0KysgPSAnTCc7CisgICAgICAgICAgICAqb3V0
KysgPSAnRic7CisgICAgICAgICAgICAqb3V0KysgPSAnPic7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICpvdXQrKyA9IGNoYXJhY3RlcjsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAqb3V0ID0gJ1wwJzsKKyAgICByZXR1cm4gYnVmZmVyOworfQorCitU
RVNUKFdURiwgTGluZUVuZGluZ05vcm1hbGl6ZVRvTEYpCit7CisgICAgRVhQRUNUX1NUUkVRKCIi
LCBzdHJpbmdpZnkobm9ybWFsaXplTGluZUVuZGluZ3NUb0xGKHsgfSkpKTsKKworICAgIEVYUEVD
VF9TVFJFUSgiPDA+Iiwgc3RyaW5naWZ5KG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9MRih7IG51bGwg
fSkpKTsKKyAgICBFWFBFQ1RfU1RSRVEoImEiLCBzdHJpbmdpZnkobm9ybWFsaXplTGluZUVuZGlu
Z3NUb0xGKHsgbGV0dGVyQSB9KSkpOworICAgIEVYUEVDVF9TVFJFUSgiPExGPiIsIHN0cmluZ2lm
eShub3JtYWxpemVMaW5lRW5kaW5nc1RvTEYoeyBDUiB9KSkpOworICAgIEVYUEVDVF9TVFJFUSgi
PExGPiIsIHN0cmluZ2lmeShub3JtYWxpemVMaW5lRW5kaW5nc1RvTEYoeyBMRiB9KSkpOworCisg
ICAgRVhQRUNUX1NUUkVRKCI8TEY+Iiwgc3RyaW5naWZ5KG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9M
Rih7IENSLCBMRiB9KSkpOworICAgIEVYUEVDVF9TVFJFUSgiPExGPjxMRj4iLCBzdHJpbmdpZnko
bm9ybWFsaXplTGluZUVuZGluZ3NUb0xGKHsgTEYsIExGIH0pKSk7CisgICAgRVhQRUNUX1NUUkVR
KCI8TEY+PExGPiIsIHN0cmluZ2lmeShub3JtYWxpemVMaW5lRW5kaW5nc1RvTEYoeyBDUiwgQ1Ig
fSkpKTsKKyAgICBFWFBFQ1RfU1RSRVEoIjxMRj48TEY+Iiwgc3RyaW5naWZ5KG5vcm1hbGl6ZUxp
bmVFbmRpbmdzVG9MRih7IExGLCBDUiB9KSkpOworCisgICAgRVhQRUNUX1NUUkVRKCJhPExGPiIs
IHN0cmluZ2lmeShub3JtYWxpemVMaW5lRW5kaW5nc1RvTEYoeyBsZXR0ZXJBLCBDUiB9KSkpOwor
ICAgIEVYUEVDVF9TVFJFUSgiYTxMRj4iLCBzdHJpbmdpZnkobm9ybWFsaXplTGluZUVuZGluZ3NU
b0xGKHsgbGV0dGVyQSwgTEYgfSkpKTsKKyAgICBFWFBFQ1RfU1RSRVEoImE8TEY+Iiwgc3RyaW5n
aWZ5KG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9MRih7IGxldHRlckEsIENSLCBMRiB9KSkpOworICAg
IEVYUEVDVF9TVFJFUSgiYTxMRj48TEY+Iiwgc3RyaW5naWZ5KG5vcm1hbGl6ZUxpbmVFbmRpbmdz
VG9MRih7IGxldHRlckEsIExGLCBDUiB9KSkpOworCisgICAgRVhQRUNUX1NUUkVRKCJhPExGPmIi
LCBzdHJpbmdpZnkobm9ybWFsaXplTGluZUVuZGluZ3NUb0xGKHsgbGV0dGVyQSwgQ1IsIGxldHRl
ckIgfSkpKTsKKyAgICBFWFBFQ1RfU1RSRVEoImE8TEY+YiIsIHN0cmluZ2lmeShub3JtYWxpemVM
aW5lRW5kaW5nc1RvTEYoeyBsZXR0ZXJBLCBMRiwgbGV0dGVyQiB9KSkpOworICAgIEVYUEVDVF9T
VFJFUSgiYTxMRj5iIiwgc3RyaW5naWZ5KG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9MRih7IGxldHRl
ckEsIENSLCBMRiwgbGV0dGVyQiB9KSkpOworICAgIEVYUEVDVF9TVFJFUSgiYTxMRj48TEY+YiIs
IHN0cmluZ2lmeShub3JtYWxpemVMaW5lRW5kaW5nc1RvTEYoeyBsZXR0ZXJBLCBMRiwgQ1IsIGxl
dHRlckIgfSkpKTsKK30KKworVEVTVChXVEYsIExpbmVFbmRpbmdOb3JtYWxpemVUb0NSTEYpCit7
CisgICAgRVhQRUNUX1NUUkVRKCIiLCBzdHJpbmdpZnkobm9ybWFsaXplTGluZUVuZGluZ3NUb0NS
TEYoeyB9KSkpOworCisgICAgRVhQRUNUX1NUUkVRKCI8MD4iLCBzdHJpbmdpZnkobm9ybWFsaXpl
TGluZUVuZGluZ3NUb0NSTEYoeyBudWxsIH0pKSk7CisgICAgRVhQRUNUX1NUUkVRKCJhIiwgc3Ry
aW5naWZ5KG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9DUkxGKHsgbGV0dGVyQSB9KSkpOworICAgIEVY
UEVDVF9TVFJFUSgiPENSPjxMRj4iLCBzdHJpbmdpZnkobm9ybWFsaXplTGluZUVuZGluZ3NUb0NS
TEYoeyBDUiB9KSkpOworICAgIEVYUEVDVF9TVFJFUSgiPENSPjxMRj4iLCBzdHJpbmdpZnkobm9y
bWFsaXplTGluZUVuZGluZ3NUb0NSTEYoeyBMRiB9KSkpOworCisgICAgRVhQRUNUX1NUUkVRKCI8
Q1I+PExGPiIsIHN0cmluZ2lmeShub3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JMRih7IENSLCBMRiB9
KSkpOworICAgIEVYUEVDVF9TVFJFUSgiPENSPjxMRj48Q1I+PExGPiIsIHN0cmluZ2lmeShub3Jt
YWxpemVMaW5lRW5kaW5nc1RvQ1JMRih7IExGLCBMRiB9KSkpOworICAgIEVYUEVDVF9TVFJFUSgi
PENSPjxMRj48Q1I+PExGPiIsIHN0cmluZ2lmeShub3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JMRih7
IENSLCBDUiB9KSkpOworICAgIEVYUEVDVF9TVFJFUSgiPENSPjxMRj48Q1I+PExGPiIsIHN0cmlu
Z2lmeShub3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JMRih7IExGLCBDUiB9KSkpOworCisgICAgRVhQ
RUNUX1NUUkVRKCJhPENSPjxMRj4iLCBzdHJpbmdpZnkobm9ybWFsaXplTGluZUVuZGluZ3NUb0NS
TEYoeyBsZXR0ZXJBLCBDUiB9KSkpOworICAgIEVYUEVDVF9TVFJFUSgiYTxDUj48TEY+Iiwgc3Ry
aW5naWZ5KG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9DUkxGKHsgbGV0dGVyQSwgTEYgfSkpKTsKKyAg
ICBFWFBFQ1RfU1RSRVEoImE8Q1I+PExGPiIsIHN0cmluZ2lmeShub3JtYWxpemVMaW5lRW5kaW5n
c1RvQ1JMRih7IGxldHRlckEsIENSLCBMRiB9KSkpOworICAgIEVYUEVDVF9TVFJFUSgiYTxDUj48
TEY+PENSPjxMRj4iLCBzdHJpbmdpZnkobm9ybWFsaXplTGluZUVuZGluZ3NUb0NSTEYoeyBsZXR0
ZXJBLCBMRiwgQ1IgfSkpKTsKKworICAgIEVYUEVDVF9TVFJFUSgiYTxDUj48TEY+YiIsIHN0cmlu
Z2lmeShub3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JMRih7IGxldHRlckEsIENSLCBsZXR0ZXJCIH0p
KSk7CisgICAgRVhQRUNUX1NUUkVRKCJhPENSPjxMRj5iIiwgc3RyaW5naWZ5KG5vcm1hbGl6ZUxp
bmVFbmRpbmdzVG9DUkxGKHsgbGV0dGVyQSwgTEYsIGxldHRlckIgfSkpKTsKKyAgICBFWFBFQ1Rf
U1RSRVEoImE8Q1I+PExGPmIiLCBzdHJpbmdpZnkobm9ybWFsaXplTGluZUVuZGluZ3NUb0NSTEYo
eyBsZXR0ZXJBLCBDUiwgTEYsIGxldHRlckIgfSkpKTsKKyAgICBFWFBFQ1RfU1RSRVEoImE8Q1I+
PExGPjxDUj48TEY+YiIsIHN0cmluZ2lmeShub3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JMRih7IGxl
dHRlckEsIExGLCBDUiwgbGV0dGVyQiB9KSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2Vi
S2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVGV4
dENvZGVjLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9UZXh0Q29kZWMu
Y3BwCmluZGV4IGUzM2Q3NjAyN2M4NzRiYWRlZjk5NGQzY2MxMzcwZmM1ZWI3N2JlMmIuLmZkMDUw
NTBhYzAwODI3YmRlZGJmMmNlODY1NjIwOTNjNjFiYWYwNjEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9UZXh0Q29kZWMuY3BwCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9UZXh0Q29kZWMuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAK
ICNpbmNsdWRlICJjb25maWcuaCIKIAorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dENvZGVjLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9UZXh0RW5jb2RpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRF
bmNvZGluZ1JlZ2lzdHJ5Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpA
QCAtOTIsNyArOTMsMTAgQEAgc3RhdGljIGNvbnN0IGNoYXIqIHRlc3REZWNvZGUoY29uc3QgY2hh
ciogZW5jb2RpbmdOYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Y28KICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBhdXRvIHZlY3RvciA9IGRlY29kZUhl
eFRlc3RCeXRlcyhpbnB1dHMuYmVnaW4oKVtpXSk7CiAgICAgICAgIGJvb2wgbGFzdCA9IGkgPT0g
c2l6ZSAtIDE7Ci0gICAgICAgIHJlc3VsdEJ1aWxkZXIuYXBwZW5kKGVzY2FwZU5vbkFTQ0lJUHJp
bnRhYmxlQ2hhcmFjdGVycyhjb2RlYy0+ZGVjb2RlKHZlY3Rvci5kYXRhKCksIHZlY3Rvci5zaXpl
KCksIGxhc3QpKSk7CisgICAgICAgIGJvb2wgc2F3RXJyb3IgPSBmYWxzZTsKKyAgICAgICAgcmVz
dWx0QnVpbGRlci5hcHBlbmQoZXNjYXBlTm9uQVNDSUlQcmludGFibGVDaGFyYWN0ZXJzKGNvZGVj
LT5kZWNvZGUodmVjdG9yLmRhdGEoKSwgdmVjdG9yLnNpemUoKSwgbGFzdCwgZmFsc2UsIHNhd0Vy
cm9yKSkpOworICAgICAgICBpZiAoc2F3RXJyb3IpCisgICAgICAgICAgICByZXN1bHRCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIiBFUlJPUiIpOwogICAgIH0KICAgICByZXR1cm4gZXNjYXBlTm9uQVND
SUlQcmludGFibGVDaGFyYWN0ZXJzKHJlc3VsdEJ1aWxkZXIudG9TdHJpbmcoKSk7CiB9CkBAIC0x
MzQsMTAzICsxMzgsMTAzIEBAIFRFU1QoVGV4dENvZGVjLCBVVEY4KQogCiBURVNUKFRleHRDb2Rl
YywgVVRGOEludmFsaWRTZXF1ZW5jZXMpCiB7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH0/Iiwg
dGVzdERlY29kZSgiVVRGLTgiLCB7ICJFMCBBNSAzRiIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgi
e0ZGRkR9PyIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRTAgQTUiLCAiM0YiIH0pKTsKLSAgICBF
WFBFQ1RfU1RSRVEoIntGRkZEfT8iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkUwIiwgIkE1IDNG
IiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH0/IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7
ICJFMCIsICJBNSIsICIzRiIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9PyIsIHRlc3RE
ZWNvZGUoIlVURi04IiwgeyAiRTAiLCAiIiwgIkE1IiwgIiIsICIzRiIgfSkpOwotICAgIEVYUEVD
VF9TVFJFUSgie0ZGRkR9PyIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRTAiLCAiIiwgIkE1Iiwg
IiIsICIzRiIsICIiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfT8iLCB0ZXN0RGVjb2Rl
KCJVVEYtOCIsIHsgIiIsICJFMCIsICIiLCAiQTUiLCAiIiwgIjNGIiwgIiIgfSkpOwotCi0gICAg
RVhQRUNUX1NUUkVRKCJhe0ZGRkR9PyIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiNjEgRTAgQTUg
M0YiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoImF7RkZGRH0/IiwgdGVzdERlY29kZSgiVVRGLTgi
LCB7ICI2MSBFMCBBNSIsICIzRiIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgiYXtGRkZEfT8iLCB0
ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIjYxIEUwIiwgIkE1IDNGIiB9KSk7Ci0gICAgRVhQRUNUX1NU
UkVRKCJhe0ZGRkR9PyIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiNjEgRTAiLCAiQTUiLCAiM0Yi
IH0pKTsKLQotICAgIEVYUEVDVF9TVFJFUSgie0I2fXtGRkZEfT8iLCB0ZXN0RGVjb2RlKCJVVEYt
OCIsIHsgIkMyIEI2IEUwIEE1IDNGIiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7QjZ9e0ZGRkR9
PyIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiQzIgQjYgRTAgQTUiLCAiM0YiIH0pKTsKLSAgICBF
WFBFQ1RfU1RSRVEoIntCNn17RkZGRH0/IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJDMiBCNiBF
MCIsICJBNSAzRiIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0I2fXtGRkZEfT8iLCB0ZXN0RGVj
b2RlKCJVVEYtOCIsIHsgIkMyIEI2IEUwIiwgIkE1IiwgIjNGIiB9KSk7Ci0KLSAgICBFWFBFQ1Rf
U1RSRVEoIntGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiQzIiIH0pKTsKLSAgICBFWFBF
Q1RfU1RSRVEoIntGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRTIiIH0pKTsKLSAgICBF
WFBFQ1RfU1RSRVEoIntGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRTIgOTgiIH0pKTsK
LSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjAiIH0p
KTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjAg
OUYiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04Iiwg
eyAiRjAgOUYgOTIiIH0pKTsKLQotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9IiwgdGVzdERlY29k
ZSgiVVRGLTgiLCB7ICJFMiIsICI5OCIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9Iiwg
dGVzdERlY29kZSgiVVRGLTgiLCB7ICJGMCIsICI5RiIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgi
e0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGMCA5RiIsICI5MiIgfSkpOwotICAgIEVY
UEVDVF9TVFJFUSgie0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGMCIsICI5RjkyIiB9
KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkYw
IiwgIjlGIiwgIjkyIiB9KSk7Ci0KLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfSIsIHRl
c3REZWNvZGUoIlVURi04IiwgeyAiQzAgODAiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZE
fXtGRkZEfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRTAgODAgODAiIH0pKTsKLSAg
ICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVU
Ri04IiwgeyAiRjAgODAgODAgODAiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZE
fXtGRkZEfXtGRkZEfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjggODAgODAgODAg
ODAiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZE
fXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRkMgODAgODAgODAgODAgODAiIH0pKTsK
LQotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7
ICJDMSBCRiIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9IiwgdGVz
dERlY29kZSgiVVRGLTgiLCB7ICJFMCA4MSBCRiIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZG
RkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGMCA4MCA4MSBC
RiIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9
IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGOCA4MCA4MCA4MSBCRiIgfSkpOwotICAgIEVYUEVD
VF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IiwgdGVzdERlY29k
ZSgiVVRGLTgiLCB7ICJGQyA4MCA4MCA4MCA4MSBCRiIgfSkpOwotCi0gICAgRVhQRUNUX1NUUkVR
KCJ7RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkUwIDgyIDgwIiB9
KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0RGVj
b2RlKCJVVEYtOCIsIHsgIkYwIDgwIDgyIDgwIiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7RkZG
RH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkY4IDgw
IDgwIDgyIDgwIiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZG
RH17RkZGRH17RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkZDIDgwIDgwIDgwIDgyIDgw
IiB9KSk7Ci0KLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfSIsIHRlc3REZWNv
ZGUoIlVURi04IiwgeyAiRTAgOUYgQkYiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtG
RkZEfXtGRkZEfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjAgODAgOUYgQkYiIH0p
KTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSIsIHRl
c3REZWNvZGUoIlVURi04IiwgeyAiRjggODAgODAgOUYgQkYiIH0pKTsKLSAgICBFWFBFQ1RfU1RS
RVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVU
Ri04IiwgeyAiRkMgODAgODAgODAgOUYgQkYiIH0pKTsKLQotICAgIEVYUEVDVF9TVFJFUSgie0ZG
RkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGMCA4MCBBMCA4
MCIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9
IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGOCA4MCA4MCBBMCA4MCIgfSkpOwotICAgIEVYUEVD
VF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IiwgdGVzdERlY29k
ZSgiVVRGLTgiLCB7ICJGQyA4MCA4MCA4MCBBMCA4MCIgfSkpOwotCi0gICAgRVhQRUNUX1NUUkVR
KCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkYwIDhG
IEJGIEJGIiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH17
RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkY4IDgwIDhGIEJGIEJGIiB9KSk7Ci0gICAg
RVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0
RGVjb2RlKCJVVEYtOCIsIHsgIkZDIDgwIDgwIDhGIEJGIEJGIiB9KSk7Ci0KLSAgICBFWFBFQ1Rf
U1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04
IiwgeyAiRjggODAgOTAgODAgODAiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZE
fXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRkMgODAg
ODAgOTAgODAgODAiIH0pKTsKLQotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9
e0ZGRkR9e0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGOCA4NCA4RiBCRiBCRiIgfSkp
OwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9
IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGQyA4MCA4NCA4RiBCRiBCRiIgfSkpOwotCi0gICAg
RVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYt
OCIsIHsgIkY0IDkwIDgwIDgwIiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17
RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkZCIEJGIEJGIEJGIEJG
IiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH17
RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkZEIEJGIEJGIEJGIEJGIEJGIiB9KSk7Ci0g
ICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIs
IHsgIkVEIEEwIDgwIiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH0i
LCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkVEIEJGIEJGIiB9KSk7Ci0gICAgRVhQRUNUX1NUUkVR
KCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYt
OCIsIHsgIkVEIEEwIEJEIEVEIEIyIEE5IiB9KSk7Ci0KLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZE
fXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjggODQg
OTAgODAgODAiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZE
fXtGRkZEfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRkMgODAgODQgOTAgODAgODAi
IH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSIsIHRlc3RE
ZWNvZGUoIlVURi04IiwgeyAiRjAgOEQgQTAgODAiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntG
RkZEfXtGRkZEfXtGRkZEfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjAgOEQgQkYg
QkYiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZE
fXtGRkZEfXtGRkZEfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjAgOEQgQTAgQkQg
RjAgOEQgQjIgQTkiIH0pKTsKLQotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9IiwgdGVzdERlY29k
ZSgiVVRGLTgiLCB7ICI4MCIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9Iiwg
dGVzdERlY29kZSgiVVRGLTgiLCB7ICI4MCA4MCIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZG
RkR9e0ZGRkR9e0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICI4MCA4MCA4MCIgfSkpOwot
ICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IiwgdGVzdERlY29kZSgi
VVRGLTgiLCB7ICI4MCA4MCA4MCA4MCIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZG
RkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICI4MCA4MCA4MCA4
MCA4MCIgfSkpOwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZG
RkR9e0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICI4MCA4MCA4MCA4MCA4MCA4MCIgfSkp
OwotICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9
e0ZGRkR9IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICI4MCA4MCA4MCA4MCA4MCA4MCA4MCIgfSkp
OwotICAgIEVYUEVDVF9TVFJFUSgie0I2fXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAi
QzIgQjYgODAiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoInsyNjAzfXtGRkZEfSIsIHRlc3REZWNv
ZGUoIlVURi04IiwgeyAiRTIgOTggODMgODAiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoInsxRjRB
OX17RkZGRH0iLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkYwIDlGIDkyIEE5IDgwIiB9KSk7Ci0g
ICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0iLCB0
ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkZCIEJGIEJGIEJGIEJGIDgwIiB9KSk7Ci0gICAgRVhQRUNU
X1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0iLCB0ZXN0
RGVjb2RlKCJVVEYtOCIsIHsgIkZEIEJGIEJGIEJGIEJGIEJGIDgwIiB9KSk7Ci0KLSAgICBFWFBF
Q1RfU1RSRVEoIntGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRkUiIH0pKTsKLSAgICBF
WFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRkUgODAi
IH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfSIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAi
RkYiIH0pKTsKLSAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfSIsIHRlc3REZWNvZGUoIlVU
Ri04IiwgeyAiRkYgODAiIH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfT8gRVJST1IiLCB0
ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkUwIEE1IDNGIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7
RkZGRH0/IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJFMCBBNSIsICIzRiIgfSkpOwor
ICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9PyBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAi
RTAiLCAiQTUgM0YiIH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfT8gRVJST1IiLCB0ZXN0
RGVjb2RlKCJVVEYtOCIsIHsgIkUwIiwgIkE1IiwgIjNGIiB9KSk7CisgICAgRVhQRUNUX1NUUkVR
KCJ7RkZGRH0/IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJFMCIsICIiLCAiQTUiLCAi
IiwgIjNGIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH0/IEVSUk9SIiwgdGVzdERlY29k
ZSgiVVRGLTgiLCB7ICJFMCIsICIiLCAiQTUiLCAiIiwgIjNGIiwgIiIgfSkpOworICAgIEVYUEVD
VF9TVFJFUSgie0ZGRkR9PyBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiIiwgIkUwIiwg
IiIsICJBNSIsICIiLCAiM0YiLCAiIiB9KSk7CisKKyAgICBFWFBFQ1RfU1RSRVEoImF7RkZGRH0/
IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICI2MSBFMCBBNSAzRiIgfSkpOworICAgIEVY
UEVDVF9TVFJFUSgiYXtGRkZEfT8gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIjYxIEUw
IEE1IiwgIjNGIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJhe0ZGRkR9PyBFUlJPUiIsIHRlc3RE
ZWNvZGUoIlVURi04IiwgeyAiNjEgRTAiLCAiQTUgM0YiIH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEo
ImF7RkZGRH0/IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICI2MSBFMCIsICJBNSIsICIz
RiIgfSkpOworCisgICAgRVhQRUNUX1NUUkVRKCJ7QjZ9e0ZGRkR9PyBFUlJPUiIsIHRlc3REZWNv
ZGUoIlVURi04IiwgeyAiQzIgQjYgRTAgQTUgM0YiIH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEoIntC
Nn17RkZGRH0/IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJDMiBCNiBFMCBBNSIsICIz
RiIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0I2fXtGRkZEfT8gRVJST1IiLCB0ZXN0RGVjb2Rl
KCJVVEYtOCIsIHsgIkMyIEI2IEUwIiwgIkE1IDNGIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7
QjZ9e0ZGRkR9PyBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiQzIgQjYgRTAiLCAiQTUi
LCAiM0YiIH0pKTsKKworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9IEVSUk9SIiwgdGVzdERlY29k
ZSgiVVRGLTgiLCB7ICJDMiIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9IEVSUk9SIiwg
dGVzdERlY29kZSgiVVRGLTgiLCB7ICJFMiIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9
IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJFMiA5OCIgfSkpOworICAgIEVYUEVDVF9T
VFJFUSgie0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGMCIgfSkpOworICAg
IEVYUEVDVF9TVFJFUSgie0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGMCA5
RiIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRG
LTgiLCB7ICJGMCA5RiA5MiIgfSkpOworCisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH0gRVJST1Ii
LCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkUyIiwgIjk4IiB9KSk7CisgICAgRVhQRUNUX1NUUkVR
KCJ7RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkYwIiwgIjlGIiB9KSk7Cisg
ICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkYw
IDlGIiwgIjkyIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH0gRVJST1IiLCB0ZXN0RGVj
b2RlKCJVVEYtOCIsIHsgIkYwIiwgIjlGOTIiIH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZE
fSBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjAiLCAiOUYiLCAiOTIiIH0pKTsKKwor
ICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgi
LCB7ICJDMCA4MCIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9IEVS
Uk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJFMCA4MCA4MCIgfSkpOworICAgIEVYUEVDVF9T
VFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgi
LCB7ICJGMCA4MCA4MCA4MCIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZG
RkR9e0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGOCA4MCA4MCA4
MCA4MCIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZG
RkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGQyA4MCA4MCA4MCA4MCA4
MCIgfSkpOworCisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0RGVj
b2RlKCJVVEYtOCIsIHsgIkMxIEJGIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZG
RH17RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkUwIDgxIEJGIiB9KSk7Cisg
ICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0RGVj
b2RlKCJVVEYtOCIsIHsgIkYwIDgwIDgxIEJGIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZG
RH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsg
IkY4IDgwIDgwIDgxIEJGIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZG
RH17RkZGRH17RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkZDIDgw
IDgwIDgwIDgxIEJGIiB9KSk7CisKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZE
fSBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRTAgODIgODAiIH0pKTsKKyAgICBFWFBF
Q1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSBFUlJPUiIsIHRlc3REZWNvZGUoIlVU
Ri04IiwgeyAiRjAgODAgODIgODAiIH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZE
fXtGRkZEfXtGRkZEfXtGRkZEfSBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjggODAg
ODAgODIgODAiIH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZE
fXtGRkZEfXtGRkZEfSBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRkMgODAgODAgODAg
ODIgODAiIH0pKTsKKworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9IEVSUk9S
IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJFMCA5RiBCRiIgfSkpOworICAgIEVYUEVDVF9TVFJF
USgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7
ICJGMCA4MCA5RiBCRiIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9
e0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGOCA4MCA4MCA5RiBC
RiIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9
e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGQyA4MCA4MCA4MCA5RiBCRiIg
fSkpOworCisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH0gRVJST1Ii
LCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIkYwIDgwIEEwIDgwIiB9KSk7CisgICAgRVhQRUNUX1NU
UkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJV
VEYtOCIsIHsgIkY4IDgwIDgwIEEwIDgwIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17
RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIs
IHsgIkZDIDgwIDgwIDgwIEEwIDgwIiB9KSk7CisKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtG
RkZEfXtGRkZEfXtGRkZEfSBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjAgOEYgQkYg
QkYiIH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZE
fSBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjggODAgOEYgQkYgQkYiIH0pKTsKKyAg
ICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSBFUlJP
UiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRkMgODAgODAgOEYgQkYgQkYiIH0pKTsKKworICAg
IEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVz
dERlY29kZSgiVVRGLTgiLCB7ICJGOCA4MCA5MCA4MCA4MCIgfSkpOworICAgIEVYUEVDVF9TVFJF
USgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29k
ZSgiVVRGLTgiLCB7ICJGQyA4MCA4MCA5MCA4MCA4MCIgfSkpOworCisgICAgRVhQRUNUX1NUUkVR
KCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYt
OCIsIHsgIkY4IDg0IDhGIEJGIEJGIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZG
RH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsg
IkZDIDgwIDg0IDhGIEJGIEJGIiB9KSk7CisKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZE
fXtGRkZEfXtGRkZEfSBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRjQgOTAgODAgODAi
IH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSBF
UlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRkIgQkYgQkYgQkYgQkYiIH0pKTsKKyAgICBF
WFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSBFUlJPUiIs
IHRlc3REZWNvZGUoIlVURi04IiwgeyAiRkQgQkYgQkYgQkYgQkYgQkYiIH0pKTsKKyAgICBFWFBF
Q1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfSBFUlJPUiIsIHRlc3REZWNvZGUoIlVURi04Iiwg
eyAiRUQgQTAgODAiIH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfSBF
UlJPUiIsIHRlc3REZWNvZGUoIlVURi04IiwgeyAiRUQgQkYgQkYiIH0pKTsKKyAgICBFWFBFQ1Rf
U1RSRVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSBFUlJPUiIsIHRlc3RE
ZWNvZGUoIlVURi04IiwgeyAiRUQgQTAgQkQgRUQgQjIgQTkiIH0pKTsKKworICAgIEVYUEVDVF9T
VFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgi
VVRGLTgiLCB7ICJGOCA4NCA5MCA4MCA4MCIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9
e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgi
LCB7ICJGQyA4MCA4NCA5MCA4MCA4MCIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZG
RkR9e0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGMCA4RCBBMCA4
MCIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IEVSUk9S
IiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGMCA4RCBCRiBCRiIgfSkpOworICAgIEVYUEVDVF9T
VFJFUSgie0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9e0ZGRkR9IEVS
Uk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGMCA4RCBBMCBCRCBGMCA4RCBCMiBBOSIgfSkp
OworCisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIs
IHsgIjgwIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0
RGVjb2RlKCJVVEYtOCIsIHsgIjgwIDgwIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17
RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIjgwIDgwIDgwIiB9KSk7
CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0
RGVjb2RlKCJVVEYtOCIsIHsgIjgwIDgwIDgwIDgwIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7
RkZGRH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIs
IHsgIjgwIDgwIDgwIDgwIDgwIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17
RkZGRH17RkZGRH17RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsgIjgw
IDgwIDgwIDgwIDgwIDgwIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7RkZGRH17RkZGRH17RkZG
RH17RkZGRH17RkZGRH17RkZGRH17RkZGRH0gRVJST1IiLCB0ZXN0RGVjb2RlKCJVVEYtOCIsIHsg
IjgwIDgwIDgwIDgwIDgwIDgwIDgwIiB9KSk7CisgICAgRVhQRUNUX1NUUkVRKCJ7QjZ9e0ZGRkR9
IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJDMiBCNiA4MCIgfSkpOworICAgIEVYUEVD
VF9TVFJFUSgiezI2MDN9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJFMiA5
OCA4MyA4MCIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgiezFGNEE5fXtGRkZEfSBFUlJPUiIsIHRl
c3REZWNvZGUoIlVURi04IiwgeyAiRjAgOUYgOTIgQTkgODAiIH0pKTsKKyAgICBFWFBFQ1RfU1RS
RVEoIntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSBFUlJPUiIsIHRlc3REZWNv
ZGUoIlVURi04IiwgeyAiRkIgQkYgQkYgQkYgQkYgODAiIH0pKTsKKyAgICBFWFBFQ1RfU1RSRVEo
IntGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfXtGRkZEfSBFUlJPUiIsIHRlc3RE
ZWNvZGUoIlVURi04IiwgeyAiRkQgQkYgQkYgQkYgQkYgQkYgODAiIH0pKTsKKworICAgIEVYUEVD
VF9TVFJFUSgie0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGRSIgfSkpOwor
ICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgi
LCB7ICJGRSA4MCIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9IEVSUk9SIiwgdGVzdERl
Y29kZSgiVVRGLTgiLCB7ICJGRiIgfSkpOworICAgIEVYUEVDVF9TVFJFUSgie0ZGRkR9e0ZGRkR9
IEVSUk9SIiwgdGVzdERlY29kZSgiVVRGLTgiLCB7ICJGRiA4MCIgfSkpOwogfQogCiB9CmRpZmYg
LS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcAppbmRleCAzM2E1
YjgxOWE5YzVlY2Q0YzQ5YjcxNTU0ZDI3Y2MwNjU4MjA2NTY2Li43NjAzZDM3N2U5Y2NlNzY3YWE1
MTc5MDYxNzc5ZWJjMGVlNTVjNjg1IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2cv
VGVzdEludm9jYXRpb25DRy5jcHAKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxXZWJLaXQv
V0tJbWFnZUNHLmg+CiAjaW5jbHVkZSA8d3RmL01ENS5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAKICNpZiBQTEFURk9STShNQUMp
ICYmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8TGF1bmNoU2VydmljZXMvVVRDb3JlVHlwZXMu
aD4K
</data>
<flag name="review"
          id="347446"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>