<?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>222110</bug_id>
          
          <creation_ts>2021-02-18 08:55:55 -0800</creation_ts>
          <short_desc>color(lab ...) should serialize as color(lab ...) not lab() according to latest CSS Color 4 spec</short_desc>
          <delta_ts>2021-03-17 21:48:14 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>pdr</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1730873</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-02-18 08:55:55 -0800</bug_when>
    <thetext>color(lab ...) should serialize as color(lab ...) not lab() according to latest CSS Color 4 spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1730880</commentid>
    <comment_count>1</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-02-18 08:59:20 -0800</bug_when>
    <thetext>I&apos;m going to take this opportunity to add some new functionality to WebCore::Color to have it store a bit saying whether to use the color(...) serialization or default serialization for an underlying color type. 

For some color types (like DisplayP3, for instance), the default is the color(...) serialization, so this bit won&apos;t have any effect, but it will allow us to do the optimization I have been wanting to do for a while to store color(srgb ...) colors that can be represented as SRGBA&lt;uint8_t&gt; losslessly in the efficient form and still retain the correct serialization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731182</commentid>
    <comment_count>2</comment_count>
      <attachid>420909</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-02-18 20:03:03 -0800</bug_when>
    <thetext>Created attachment 420909
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731185</commentid>
    <comment_count>3</comment_count>
      <attachid>420911</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-02-18 20:09:47 -0800</bug_when>
    <thetext>Created attachment 420911
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731186</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-02-18 20:10:22 -0800</bug_when>
    <thetext>I&apos;m not sure how I feel about this change. It turned out bigger than I anticipated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731303</commentid>
    <comment_count>5</comment_count>
      <attachid>420911</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2021-02-19 04:05:30 -0800</bug_when>
    <thetext>Comment on attachment 420911
Patch

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

&gt; Source/WebCore/platform/graphics/Color.cpp:129
&gt; +            auto result = colorWithOverridenAlpha(underlyingColor, alpha);

Not new in this patch, but there is a typo in Overridden.

&gt; Source/WebCore/platform/graphics/Color.h:198
&gt; +    enum class AllFlags {

It is common to have this All* enum? I would have thought you call this one Flags and the earlier one FlagsSubset or something?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731353</commentid>
    <comment_count>6</comment_count>
      <attachid>420911</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-02-19 08:52:14 -0800</bug_when>
    <thetext>Comment on attachment 420911
Patch

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

&gt; Source/WebCore/platform/graphics/Color.h:85
&gt; +    Color(SRGBA&lt;uint8_t&gt;, OptionSet&lt;Flags&gt;);
&gt; +    Color(Optional&lt;SRGBA&lt;uint8_t&gt;&gt;, OptionSet&lt;Flags&gt;);

Could we use default values for the flags to reduce the total number of constructors? Would not want to sacrifice runtime efficiency, but would love to have the list be much shorter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731356</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-02-19 08:52:54 -0800</bug_when>
    <thetext>(In reply to Sam Weinig from comment #1)
&gt; I&apos;m going to take this opportunity to add some new functionality to
&gt; WebCore::Color to have it store a bit saying whether to use the color(...)
&gt; serialization or default serialization for an underlying color type. 
&gt; 
&gt; For some color types (like DisplayP3, for instance), the default is the
&gt; color(...) serialization, so this bit won&apos;t have any effect, but it will
&gt; allow us to do the optimization I have been wanting to do for a while to
&gt; store color(srgb ...) colors that can be represented as SRGBA&lt;uint8_t&gt;
&gt; losslessly in the efficient form and still retain the correct serialization.

I don’t understand why this is separate state in the Color object rather than a property of the color space.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731430</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-02-19 11:04:11 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #7)
&gt; (In reply to Sam Weinig from comment #1)
&gt; &gt; I&apos;m going to take this opportunity to add some new functionality to
&gt; &gt; WebCore::Color to have it store a bit saying whether to use the color(...)
&gt; &gt; serialization or default serialization for an underlying color type. 
&gt; &gt; 
&gt; &gt; For some color types (like DisplayP3, for instance), the default is the
&gt; &gt; color(...) serialization, so this bit won&apos;t have any effect, but it will
&gt; &gt; allow us to do the optimization I have been wanting to do for a while to
&gt; &gt; store color(srgb ...) colors that can be represented as SRGBA&lt;uint8_t&gt;
&gt; &gt; losslessly in the efficient form and still retain the correct serialization.
&gt; 
&gt; I don’t understand why this is separate state in the Color object rather
&gt; than a property of the color space.

Currently, color spaces don&apos;t have any additional state, so I used the fact that Color does have extra state and serialization always goes through Color to store it.

Another approach would be to add new values to the ColorSpace enum (and unfortunately new color types as well, since we map from color type to ColorSpace enum) for the colors that can have an alternative serialization.

For this, that would mean adding a ColorSpace::LabUsingColorSerialization and a LabUsingColorSerialization&lt;float&gt; type. Not horrible, but also not ideal when we can just use a bit from Color.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731431</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-02-19 11:05:04 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #6)
&gt; Comment on attachment 420911 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=420911&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.h:85
&gt; &gt; +    Color(SRGBA&lt;uint8_t&gt;, OptionSet&lt;Flags&gt;);
&gt; &gt; +    Color(Optional&lt;SRGBA&lt;uint8_t&gt;&gt;, OptionSet&lt;Flags&gt;);
&gt; 
&gt; Could we use default values for the flags to reduce the total number of
&gt; constructors? Would not want to sacrifice runtime efficiency, but would love
&gt; to have the list be much shorter.

Yes, we can. I think it is extremely unlikely to cause any runtime change in release builds at all. Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731434</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-02-19 11:06:28 -0800</bug_when>
    <thetext>(In reply to Dean Jackson from comment #5)
&gt; Comment on attachment 420911 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=420911&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.cpp:129
&gt; &gt; +            auto result = colorWithOverridenAlpha(underlyingColor, alpha);
&gt; 
&gt; Not new in this patch, but there is a typo in Overridden.

:). Will fix.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.h:198
&gt; &gt; +    enum class AllFlags {
&gt; 
&gt; It is common to have this All* enum? I would have thought you call this one
&gt; Flags and the earlier one FlagsSubset or something?

I want the public enum to be called Flags, so this one had to be called something else. I agree AllFlags is not perfect. Maybe FlagsAndInternalState?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731485</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-02-19 11:56:17 -0800</bug_when>
    <thetext>I would choose the name FlagsIncludingInternal or since it’s C++ and the language calls it &quot;private&quot;, FlagsIncludingPrivate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731488</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-02-19 11:57:25 -0800</bug_when>
    <thetext>Irritating that we can’t use inheritance or anything like that. For the common flags I would at least suggest using the same symbolic constants to prove they match. Not sure how to check that the private flags don’t accidentally overlap the public.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731514</commentid>
    <comment_count>13</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-02-19 12:31:44 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #12)
&gt; Irritating that we can’t use inheritance or anything like that. For the
&gt; common flags I would at least suggest using the same symbolic constants to
&gt; prove they match. Not sure how to check that the private flags don’t
&gt; accidentally overlap the public.

I do currently do a static_assert for the common ones:

+   static_assert(static_cast&lt;unsigned&gt;(Flags::Semantic) == static_cast&lt;unsigned&gt;(AllFlags::Semantic));
+   static_assert(static_cast&lt;unsigned&gt;(Flags::UseColorFunctionSerialization) == static_cast&lt;unsigned&gt;(AllFlags::UseColorFunctionSerialization));

Did you mean something past that?

Another options might be to fake it like this:


```
class Color {
public:
    struct Flags {
        enum Flag : uint16_t;
        static constexpr Flag Semantic                      = 1 &lt;&lt; 0;
        static constexpr Flag UseColorFunctionSerialization = 1 &lt;&lt; 1;
    };

...
private:
    struct FlagsIncludingPrivate : Flags {
        static constexpr Flag Valid                         = 1 &lt;&lt; 2;
        static constexpr Flag Extended                      = 1 &lt;&lt; 3;
        static constexpr Flag HashTableEmptyValue           = 1 &lt;&lt; 4;
        static constexpr Flag HashTableDeletedValue         = 1 &lt;&lt; 5;
    };
```

And then I think I could use OptionSet&lt;Flags::Flag&gt; everywhere, but only internally would the additional names be available.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731550</commentid>
    <comment_count>14</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2021-02-19 13:12:15 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #12)
&gt; Irritating that we can’t use inheritance or anything like that.

Time to adopt Swift!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731553</commentid>
    <comment_count>15</comment_count>
      <attachid>420911</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2021-02-19 13:13:51 -0800</bug_when>
    <thetext>Comment on attachment 420911
Patch

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

&gt; Source/WebCore/platform/graphics/Color.cpp:127
&gt;      return callOnUnderlyingType(WTF::makeVisitor(

I want to make this comment because I felt smart for finding it, but also dumb for not being confident in saying it..... you don&apos;t need a visitor any more since you now only have one function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731810</commentid>
    <comment_count>16</comment_count>
      <attachid>421092</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-02-20 10:34:48 -0800</bug_when>
    <thetext>Created attachment 421092
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731891</commentid>
    <comment_count>17</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-02-20 16:48:06 -0800</bug_when>
    <thetext>Committed r273211: &lt;https://commits.webkit.org/r273211&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 421092.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731892</commentid>
    <comment_count>18</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-02-20 16:49:14 -0800</bug_when>
    <thetext>&lt;rdar://problem/74560531&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1741039</commentid>
    <comment_count>19</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-03-17 21:48:14 -0700</bug_when>
    <thetext>When you change Color data layout please also remember to fix Tools/lldb/lldb_webkit.py</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420909</attachid>
            <date>2021-02-18 20:03:03 -0800</date>
            <delta_ts>2021-02-18 20:18:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222110-20210218200302.patch</filename>
            <type>text/plain</type>
            <size>58828</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MzEwMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk1IEBACisyMDIxLTAyLTE4ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBjb2xvcihsYWIgLi4uKSBzaG91bGQg
c2VyaWFsaXplIGFzIGNvbG9yKGxhYiAuLi4pIG5vdCBsYWIoKSBhY2NvcmRpbmcgdG8gbGF0ZXN0
IENTUyBDb2xvciA0IHNwZWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyMjExMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRvIG1ha2UgdGhpcyB3b3JrIGl0IHdhcyBuZWNlc3NhcnkgdG8gbWFrZSBpdCBz
byB0aGF0IGV4dGVuZGVkIGNvbG9ycywgbGlrZSBMYWIsCisgICAgICAgIGNvdWxkIHN0b3JlIGFu
IGV4dHJhIGJpdCBvZiBkYXRhIG9uIENvbG9yIHRvIGluZGljYXRlIHRoYXQgaXQgc2hvdWxkIHVz
ZSB0aGUKKyAgICAgICAgY29sb3IoKSBmdW5jdGlvbiBmb3Igc2VyaWFsaXphdGlvbiB3aGVuIHBh
cnNlZCB1c2luZyB0aGUgY29sb3IoKSBmb3JtLgorCisgICAgICAgIFRvIGRvIHRoYXQsIENvbG9y
IHdhcyByZXdvcmtlZCB0byBhbGxvdyBleHRyYSBtZXRhZGF0YSBmbGFncyBmb3IgYm90aCBpbmxp
bmUgYW5kIAorICAgICAgICBleHRlbmRlZCBjb2xvcnMuIFByZXZpb3VzbHksIG9ubHkgaW5saW5l
IGNvbG9ycyBjb3VsZCBtYWtlIHVzZSBvZiB0aGUgZXh0cmEgYml0cy4KKyAgICAgICAgTm93LCB3
ZSB0YWtlIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgdGhlIGhpZ2ggMTYgYml0
cyBhdmFpbGFibGUgdG8gdXMKKyAgICAgICAgZm9yIHBvaW50ZXJzIHRvIGFsc28gc3RvcmUgdGhh
dCBtZXRhZGF0YSBmb3IgZXh0ZW5kZWQgY29sb3JzLiBSYXRoZXIgdGhhbiB1c2luZyBhCisgICAg
ICAgIHVuaW9uLCB3ZSBlbmNvZGUgdGhlIHBvaW50ZXIgLyBpbmxpbmUgY29sb3IgaW50byBhIHVp
bnQ2NF90LCBhbmQgdXNlIHRoZSBleHRyYSBiaXRzCisgICAgICAgIGZvciB0aGUgZmxhZ3Mgd2Ug
bmVlZC4gQ3VycmVudGx5IHdlIG9ubHkgdXNlIDYsIHNvIHRoZXJlIGlzIHF1aXRlIGEgYml0IG1v
cmUgdGhhdAorICAgICAgICBjb3VsZCBiZSB1c2VkIGhlcmUuCisKKyAgICAgICAgRmluYWxseSwg
dGhlIGNvbG9yIHNlcmlhbGl6YXRpb24gY29kZSBoYXMgYmVlbiB1cGRhdGVkIHRvIGNoZWNrIGZv
ciB0aGUgbmV3IGJpdCwKKyAgICAgICAgY2FsbGVkIFVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0
aW9uLCBhbmQgdG8gc2VyaWFsaXplIHVzaW5nIGNvbG9yKCkgbm90YXRpb24KKyAgICAgICAgaWYg
aXQgaXMgc2V0LgorCisgICAgICAgIFdlIGFyZSBjdXJyZW50bHkgb25seSB0YWtpbmcgYWR2YW50
YWdlIG9mIHRoaXMgZm9yIGRpZmZlcmVudGlhdGluZyBiZXR3ZWVuIGxhYiguLi4pCisgICAgICAg
IGFuZCBjb2xvcihsYWIgLi4uKSwgYnV0IGluIHRoZSBmdXR1cmUgd2Ugc2hvdWxkIGJlIGFibGUg
dG8gYWxzbyBvcHRpbWl6ZSBjb2xvcihzcmdiIC4uLikKKyAgICAgICAgdmFsdWVzIHRoYXQgY2Fu
IGJlIHJlcHJlc2VudGVkIGZ1bGx5IGJ5IFNSR0JBPHVpbnQ4X3Q+LgorCisgICAgICAgIFNpbmNl
IHdlIGNhbiBub3cgYWRkIGZsYWdzIGZvciBleHRlbmRlZCBjb2xvcnMsIHRoZSBzZW1hbnRpYyBi
aXQgaXMgYWxzbyBub3cgdXNhYmxlCisgICAgICAgIGZvciBleHRlbmRlZCBjb2xvcnMsIHRob3Vn
aCBub25lIGN1cnJlbnRseSBleGlzdC4KKworICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6cGFyc2VDb2xvckZ1bmN0aW9uRm9yUkdCVHlwZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUNvbG9yRnVuY3Rpb25Gb3JMYWJQYXJh
bWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFy
c2VDb2xvckZ1bmN0aW9uRm9yWFlaUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlQ29sb3JGdW5jdGlvblBhcmFtZXRlcnMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3I9KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6c2VtYW50aWNDb2xvciBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Q29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29sb3I6OnRvQWxsRmxhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OnNldENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpzZXRFeHRlbmRlZENvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6ZXh0ZW5k
ZWRDb2xvcnNFcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpleHRlbmRlZENvbG9yc0VxdWFsSWdu
b3JpbmdTZW1hbnRpY0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmVxdWFsSWdub3JpbmdTZW1h
bnRpY0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp+Q29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6Omhhc2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Omlz
VmFsaWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzU2VtYW50aWMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnVzZXNDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlv
biBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZmxhZ3MgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29sb3I6OmlzRXh0ZW5kZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q29sb3I6OmlzSW5saW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjphc0V4dGVu
ZGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjphc0V4dGVuZGVkUmVmIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjphc0lubGluZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6YXNQYWNrZWRJbmxpbmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q29sb3I6OmVuY29kZWRGbGFncyk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZW5jb2RlZElu
bGluZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjplbmNvZGVkUGFja2VkSW5saW5l
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmVuY29kZWRFeHRlbmRlZENvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpkZWNvZGVkRmxhZ3MpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29sb3I6OmRlY29kZWRJbmxpbmVDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
ZGVjb2RlZFBhY2tlZElubGluZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpkZWNv
ZGVkRXh0ZW5kZWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6c2V0SW52YWxpZCk6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRhZ0FzU2VtYW50
aWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRhZ0FzVmFsaWQpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6YmxlbmRXaXRoV2hpdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yU2VyaWFsaXphdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemF0
aW9uRm9yQ1NTKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JIVE1MKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Vc2luZ0NvbG9yRnVuY3Rpb24pOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29s
b3I6OkNvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW06
CisgICAgICAgIChXZWJDb3JlOjpzZW1hbnRpY0NvbG9yRnJvbU5TQ29sb3IpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnN5c3RlbUNv
bG9yRnJvbUNTU1ZhbHVlSURTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzeXN0ZW1Db2xv
ckZyb21DU1NWYWx1ZUlEKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6c3lzdGVtQ29sb3IgY29uc3QpOgor
CiAyMDIxLTAyLTE4ICBLYXRlIENoZW5leSAgPGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgog
CiAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBub24gYXBwLWJvdW5kIHJlcXVlc3RzCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnMuY3BwCShyZXZpc2lvbiAyNzMxMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2Vy
L0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3OSw3ICs5
NzksNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRpYyBDb2xvCiAgICAgaWYg
KCFhbHBoYSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHJldHVybiBDb2xvclR5cGUgeyBj
bGFtcFRvPGZsb2F0PihjaGFubmVsc1swXSwgMC4wLCAxLjApLCBjbGFtcFRvPGZsb2F0PihjaGFu
bmVsc1sxXSwgMC4wLCAxLjApLCBjbGFtcFRvPGZsb2F0PihjaGFubmVsc1syXSwgMC4wLCAxLjAp
LCBzdGF0aWNfY2FzdDxmbG9hdD4oKmFscGhhKSB9OworICAgIHJldHVybiB7IENvbG9yVHlwZSB7
IGNsYW1wVG88ZmxvYXQ+KGNoYW5uZWxzWzBdLCAwLjAsIDEuMCksIGNsYW1wVG88ZmxvYXQ+KGNo
YW5uZWxzWzFdLCAwLjAsIDEuMCksIGNsYW1wVG88ZmxvYXQ+KGNoYW5uZWxzWzJdLCAwLjAsIDEu
MCksIHN0YXRpY19jYXN0PGZsb2F0PigqYWxwaGEpIH0sIENvbG9yOjpGbGFnczo6VXNlQ29sb3JG
dW5jdGlvblNlcmlhbGl6YXRpb24gfTsKIH0KIAogc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5j
dGlvbkZvckxhYlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncykKQEAgLTEwMTEs
NyArMTAxMSw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25Gb3JMYWJQYXIKIAog
ICAgIGF1dG8gbm9ybWFsaXplZExpZ2h0bmVzcyA9IHN0ZDo6bWF4KDAuMCwgY2hhbm5lbHNbMF0p
OwogCi0gICAgcmV0dXJuIExhYjxmbG9hdD4geyBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsaXpl
ZExpZ2h0bmVzcyksIHN0YXRpY19jYXN0PGZsb2F0PihjaGFubmVsc1sxXSksIHN0YXRpY19jYXN0
PGZsb2F0PihjaGFubmVsc1syXSksIHN0YXRpY19jYXN0PGZsb2F0PigqYWxwaGEpIH07CisgICAg
cmV0dXJuIHsgTGFiPGZsb2F0PiB7IHN0YXRpY19jYXN0PGZsb2F0Pihub3JtYWxpemVkTGlnaHRu
ZXNzKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNoYW5uZWxzWzFdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGNoYW5uZWxzWzJdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCphbHBoYSkgfSwgQ29sb3I6OkZsYWdz
OjpVc2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbiB9OwogfQogCiBzdGF0aWMgQ29sb3IgcGFy
c2VDb2xvckZ1bmN0aW9uRm9yWFlaUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdz
KQpAQCAtMTA0MSw3ICsxMDQxLDcgQEAgc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbkZv
clhZWlBhcgogICAgIGlmICghYWxwaGEpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1
cm4gWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDUwPiB7IHN0YXRpY19jYXN0PGZsb2F0PihjaGFu
bmVsc1swXSksIHN0YXRpY19jYXN0PGZsb2F0PihjaGFubmVsc1sxXSksIHN0YXRpY19jYXN0PGZs
b2F0PihjaGFubmVsc1syXSksIHN0YXRpY19jYXN0PGZsb2F0PigqYWxwaGEpIH07CisgICAgcmV0
dXJuIHsgWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDUwPiB7IHN0YXRpY19jYXN0PGZsb2F0Pihj
aGFubmVsc1swXSksIHN0YXRpY19jYXN0PGZsb2F0PihjaGFubmVsc1sxXSksIHN0YXRpY19jYXN0
PGZsb2F0PihjaGFubmVsc1syXSksIHN0YXRpY19jYXN0PGZsb2F0PigqYWxwaGEpIH0sIENvbG9y
OjpGbGFnczo6VXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24gfTsKIH0KIAogc3RhdGljIENv
bG9yIHBhcnNlQ29sb3JGdW5jdGlvblBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UpCkBAIC0xMDg0LDYgKzEwODQsNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9u
UGFyYW1ldGVyCiAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAK
KyAgICBBU1NFUlQoY29sb3IudXNlc0NvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKCkpOwogICAg
IHJldHVybiBjb2xvcjsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmNwcAkocmV2aXNpb24gMjczMTAyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCArMzcsMTAgQEAg
c3RhdGljIGNvbnN0ZXhwciBhdXRvIGxpZ2h0ZW5lZEJsYWNrID0gUwogc3RhdGljIGNvbnN0ZXhw
ciBhdXRvIGRhcmtlbmVkV2hpdGUgPSBTUkdCQTx1aW50OF90PiB7IDE3MSwgMTcxLCAxNzEgfTsK
IAogQ29sb3I6OkNvbG9yKGNvbnN0IENvbG9yJiBvdGhlcikKLSAgICA6IG1fY29sb3JEYXRhKG90
aGVyLm1fY29sb3JEYXRhKQorICAgIDogbV9jb2xvckFuZEZsYWdzKG90aGVyLm1fY29sb3JBbmRG
bGFncykKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICBtX2NvbG9yRGF0YS5leHRl
bmRlZENvbG9yLT5yZWYoKTsKKyAgICAgICAgYXNFeHRlbmRlZCgpLnJlZigpOwogfQogCiBDb2xv
cjo6Q29sb3IoQ29sb3ImJiBvdGhlcikKQEAgLTU0LDEyICs1NCwxMyBAQCBDb2xvciYgQ29sb3I6
Om9wZXJhdG9yPShjb25zdCBDb2xvciYgb3RoCiAgICAgICAgIHJldHVybiAqdGhpczsKIAogICAg
IGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAgIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmRl
cmVmKCk7CisgICAgICAgIGFzRXh0ZW5kZWQoKS5kZXJlZigpOwogCi0gICAgbV9jb2xvckRhdGEg
PSBvdGhlci5tX2NvbG9yRGF0YTsKKyAgICBtX2NvbG9yQW5kRmxhZ3MgPSBvdGhlci5tX2NvbG9y
QW5kRmxhZ3M7CiAKICAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICBtX2NvbG9yRGF0YS5l
eHRlbmRlZENvbG9yLT5yZWYoKTsKKyAgICAgICAgYXNFeHRlbmRlZCgpLnJlZigpOworCiAgICAg
cmV0dXJuICp0aGlzOwogfQogCkBAIC02OSwxMCArNzAsMTAgQEAgQ29sb3ImIENvbG9yOjpvcGVy
YXRvcj0oQ29sb3ImJiBvdGhlcikKICAgICAgICAgcmV0dXJuICp0aGlzOwogCiAgICAgaWYgKGlz
RXh0ZW5kZWQoKSkKLSAgICAgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+ZGVyZWYoKTsK
KyAgICAgICAgYXNFeHRlbmRlZCgpLmRlcmVmKCk7CiAKLSAgICBtX2NvbG9yRGF0YSA9IG90aGVy
Lm1fY29sb3JEYXRhOwotICAgIG90aGVyLm1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3Mg
PSBpbnZhbGlkSW5saW5lQ29sb3I7CisgICAgbV9jb2xvckFuZEZsYWdzID0gb3RoZXIubV9jb2xv
ckFuZEZsYWdzOworICAgIG90aGVyLm1fY29sb3JBbmRGbGFncyA9IGludmFsaWRDb2xvckFuZEZs
YWdzOwogCiAgICAgcmV0dXJuICp0aGlzOwogfQpAQCAtMTI0LDE2ICsxMjUsMTQgQEAgZmxvYXQg
Q29sb3I6Omx1bWluYW5jZSgpIGNvbnN0CiBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEoZmxv
YXQgYWxwaGEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhbGxPblVuZGVybHlpbmdUeXBlKFdURjo6
bWFrZVZpc2l0b3IoCi0gICAgICAgIFsmXSAoY29uc3QgU1JHQkE8dWludDhfdD4mIHVuZGVybHlp
bmdDb2xvcikgLT4gQ29sb3IgewotICAgICAgICAgICAgQ29sb3IgcmVzdWx0ID0gY29sb3JXaXRo
T3ZlcnJpZGVuQWxwaGEodW5kZXJseWluZ0NvbG9yLCBhbHBoYSk7CisgICAgICAgIFsmXSAoY29u
c3QgYXV0byYgdW5kZXJseWluZ0NvbG9yKSAtPiBDb2xvciB7CisgICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IGNvbG9yV2l0aE92ZXJyaWRlbkFscGhhKHVuZGVybHlpbmdDb2xvciwgYWxwaGEpOwog
CiAgICAgICAgICAgICAvLyBGSVhNRTogV2h5IGlzIHByZXNlcnZpbmcgdGhlIHNlbWFudGljIGJp
dCBkZXNpcmVkIGFuZC9vciBjb3JyZWN0IGhlcmU/CiAgICAgICAgICAgICBpZiAoaXNTZW1hbnRp
YygpKQotICAgICAgICAgICAgICAgIHJlc3VsdC50YWdBc1NlbWFudGljKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IGF1dG8mIHVu
ZGVybHlpbmdDb2xvcikgLT4gQ29sb3IgewotICAgICAgICAgICAgcmV0dXJuIGNvbG9yV2l0aE92
ZXJyaWRlbkFscGhhKHVuZGVybHlpbmdDb2xvciwgYWxwaGEpOworICAgICAgICAgICAgICAgIHJl
dHVybiB7IHJlc3VsdCwgRmxhZ3M6OlNlbWFudGljIH07CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHJldHVybiB7IHJlc3VsdCB9OwogICAgICAgICB9CiAgICAgKSk7CiB9CkBAIC0xNTcsOCAr
MTU2LDEwIEBAIENvbG9yIENvbG9yOjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKIHsKICAgICBpZiAo
aXNTZW1hbnRpYygpKQogICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICByZXR1cm4geyB0b1NS
R0JBTG9zc3k8dWludDhfdD4oKSwgU2VtYW50aWMgfTsKKyAgICAKKyAgICBpZiAoaXNFeHRlbmRl
ZCgpKQorICAgICAgICByZXR1cm4geyBhc0V4dGVuZGVkUmVmKCksIEZsYWdzOjpTZW1hbnRpYyB9
OworICAgIHJldHVybiB7IGFzSW5saW5lKCksIEZsYWdzOjpTZW1hbnRpYyB9OwogfQogCiBzdGQ6
OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0Pj4gQ29sb3I6OmNvbG9yU3Bh
Y2VBbmRDb21wb25lbnRzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjczMTAyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMxLDkgQEAKICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hlci5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KICNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKICNp
ZiBVU0UoQ0cpCiB0eXBlZGVmIHN0cnVjdCBDR0NvbG9yKiBDR0NvbG9yUmVmOwpAQCAtNjUsMjMg
KzY3LDMwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENvbG9yIHsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICBlbnVtIGNsYXNzIEZsYWdzIHsKKyAgICAg
ICAgU2VtYW50aWMgICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwKKyAgICAgICAgVXNl
Q29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24gICA9IDEgPDwgMSwKKyAgICB9OworCiAgICAgQ29s
b3IoKSA9IGRlZmF1bHQ7CiAKICAgICBDb2xvcihTUkdCQTx1aW50OF90Pik7CiAgICAgQ29sb3Io
T3B0aW9uYWw8U1JHQkE8dWludDhfdD4+KTsKIAotICAgIGVudW0gU2VtYW50aWNUYWcgeyBTZW1h
bnRpYyB9OwotICAgIENvbG9yKFNSR0JBPHVpbnQ4X3Q+LCBTZW1hbnRpY1RhZyk7Ci0gICAgQ29s
b3IoT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+LCBTZW1hbnRpY1RhZyk7Ci0KICAgICBDb2xvcihD
b2xvckNvbXBvbmVudHM8ZmxvYXQ+LCBDb2xvclNwYWNlKTsKLQogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxJc0NvbG9yVHlwZVdpdGhD
b21wb25lbnRUeXBlPENvbG9yVHlwZSwgZmxvYXQ+PiogPSBudWxscHRyPgogICAgIENvbG9yKGNv
bnN0IENvbG9yVHlwZSYpOwogCisgICAgQ29sb3IoU1JHQkE8dWludDhfdD4sIE9wdGlvblNldDxG
bGFncz4pOworICAgIENvbG9yKE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiwgT3B0aW9uU2V0PEZs
YWdzPik7CisKKyAgICBDb2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+LCBDb2xvclNwYWNlLCBP
cHRpb25TZXQ8RmxhZ3M+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8SXNDb2xvclR5cGVXaXRoQ29tcG9uZW50VHlwZTxDb2xvclR5
cGUsIGZsb2F0Pj4qID0gbnVsbHB0cj4KKyAgICBDb2xvcihjb25zdCBDb2xvclR5cGUmLCBPcHRp
b25TZXQ8RmxhZ3M+KTsKKwogICAgIGV4cGxpY2l0IENvbG9yKFdURjo6SGFzaFRhYmxlRW1wdHlW
YWx1ZVR5cGUpOwogICAgIGV4cGxpY2l0IENvbG9yKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVl
VHlwZSk7Ci0gICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgPT0gZGVsZXRlZEhhc2hWYWx1ZTsgfQor
ICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBmbGFncygp
LmNvbnRhaW5zKEFsbEZsYWdzOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpOyB9CiAKICAgICBXRUJD
T1JFX0VYUE9SVCBDb2xvcihjb25zdCBDb2xvciYpOwogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9y
KENvbG9yJiYpOwpAQCAtOTMsOCArMTAyLDkgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0OwogCi0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRl
ZCgpIHx8IChtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzICYgdmFsaWRJbmxpbmVDb2xv
ckJpdCk7IH0KLSAgICBib29sIGlzU2VtYW50aWMoKSBjb25zdCB7IHJldHVybiBpc0lubGluZSgp
ICYmIChtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzICYgaXNTZW1hbnRpY0lubGluZUNv
bG9yQml0KTsgfQorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworICAgIGJvb2wgaXNTZW1hbnRp
YygpIGNvbnN0OworICAgIGJvb2wgdXNlc0NvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKCkgY29u
c3Q7CiAKICAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8g
YXNFeHRlbmRlZCgpLmFscGhhKCkgPT0gMS4wIDogYXNJbmxpbmUoKS5hbHBoYSA9PSAyNTU7IH0K
ICAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0
ZW5kZWQoKS5hbHBoYSgpID4gMC4wIDogYXNJbmxpbmUoKS5hbHBoYSA+IDA7IH0KQEAgLTE0MCw3
ICsxNTAsNyBAQCBwdWJsaWM6CiAKICNpZiBVU0UoQ0cpCiAgICAgV0VCQ09SRV9FWFBPUlQgQ29s
b3IoQ0dDb2xvclJlZik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ0dDb2xvclJlZiwgU2Vt
YW50aWNUYWcpOworICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKENHQ29sb3JSZWYsIE9wdGlvblNl
dDxGbGFncz4pOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pCkBAIC0xNjQsOCArMTc0LDgg
QEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBkYXJrR3JlZW4gPSBTUkdCQTx1
aW50OF90PiB7IDAsIDEyOCwgMCB9OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBvcmFuZ2Ug
PSBTUkdCQTx1aW50OF90PiB7IDI1NSwgMTI4LCAwIH07CiAKLSAgICBib29sIGlzRXh0ZW5kZWQo
KSBjb25zdCB7IHJldHVybiAhKG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgJiBpbnZh
bGlkSW5saW5lQ29sb3IpOyB9Ci0gICAgYm9vbCBpc0lubGluZSgpIGNvbnN0IHsgcmV0dXJuICFp
c0V4dGVuZGVkKCk7IH0KKyAgICBib29sIGlzRXh0ZW5kZWQoKSBjb25zdDsKKyAgICBib29sIGlz
SW5saW5lKCkgY29uc3Q7CiAKICAgICBjb25zdCBFeHRlbmRlZENvbG9yJiBhc0V4dGVuZGVkKCkg
Y29uc3Q7CiAgICAgU1JHQkE8dWludDhfdD4gYXNJbmxpbmUoKSBjb25zdDsKQEAgLTE3NCw2ICsx
ODQsNyBAQCBwdWJsaWM6CiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2xvciYg
YSwgY29uc3QgQ29sb3ImIGIpOwogICAgIGZyaWVuZCBib29sIGVxdWFsSWdub3JpbmdTZW1hbnRp
Y0NvbG9yKGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYik7CiAgICAgZnJpZW5kIGJvb2wg
ZXh0ZW5kZWRDb2xvcnNFcXVhbChjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7CisgICAgZnJp
ZW5kIGJvb2wgZXh0ZW5kZWRDb2xvcnNFcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcihjb25zdCBD
b2xvciYsIGNvbnN0IENvbG9yJik7CiAKICAgICBzdGF0aWMgYm9vbCBpc0JsYWNrQ29sb3IoY29u
c3QgQ29sb3ImKTsKICAgICBzdGF0aWMgYm9vbCBpc1doaXRlQ29sb3IoY29uc3QgQ29sb3ImKTsK
QEAgLTE4MiwzMCArMTkzLDQ3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGF0aWMgT3B0aW9uYWw8Q29sb3I+IGRlY29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6Ci0g
ICAgQ29sb3IoUmVmPEV4dGVuZGVkQ29sb3I+JiYpOworICAgIENvbG9yKFJlZjxFeHRlbmRlZENv
bG9yPiYmLCBPcHRpb25TZXQ8RmxhZ3M+ID0geyB9KTsKIAotICAgIHZvaWQgc2V0Q29sb3IoU1JH
QkE8dWludDhfdD4pOwotICAgIHZvaWQgc2V0RXh0ZW5kZWRDb2xvcihSZWY8RXh0ZW5kZWRDb2xv
cj4mJik7CisgICAgZW51bSBjbGFzcyBBbGxGbGFncyB7CisgICAgICAgIFNlbWFudGljICAgICAg
ICAgICAgICAgICAgICAgICAgPSAxIDw8IDAsCisgICAgICAgIFVzZUNvbG9yRnVuY3Rpb25TZXJp
YWxpemF0aW9uICAgPSAxIDw8IDEsCisgICAgICAgIFZhbGlkICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPSAxIDw8IDIsCisgICAgICAgIEV4dGVuZGVkICAgICAgICAgICAgICAgICAgICAgICAg
PSAxIDw8IDMsCisgICAgICAgIEhhc2hUYWJsZUVtcHR5VmFsdWUgICAgICAgICAgICAgPSAxIDw8
IDQsCisgICAgICAgIEhhc2hUYWJsZURlbGV0ZWRWYWx1ZSAgICAgICAgICAgPSAxIDw8IDUsCisg
ICAgfTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHVuc2lnbmVkPihGbGFnczo6U2Vt
YW50aWMpID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihBbGxGbGFnczo6U2VtYW50aWMpKTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHVuc2lnbmVkPihGbGFnczo6VXNlQ29sb3JGdW5j
dGlvblNlcmlhbGl6YXRpb24pID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihBbGxGbGFnczo6VXNl
Q29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pKTsKKyAgICBzdGF0aWMgT3B0aW9uU2V0PEFsbEZs
YWdzPiB0b0FsbEZsYWdzKE9wdGlvblNldDxGbGFncz4gZmxhZ3MpIHsgcmV0dXJuIE9wdGlvblNl
dDxBbGxGbGFncz46OmZyb21SYXcoZmxhZ3MudG9SYXcoKSk7IH0KKworICAgIE9wdGlvblNldDxB
bGxGbGFncz4gZmxhZ3MoKSBjb25zdDsKKworICAgIHZvaWQgc2V0Q29sb3IoU1JHQkE8dWludDhf
dD4sIE9wdGlvblNldDxBbGxGbGFncz4gPSB7IH0pOworICAgIHZvaWQgc2V0RXh0ZW5kZWRDb2xv
cihSZWY8RXh0ZW5kZWRDb2xvcj4mJiwgT3B0aW9uU2V0PEFsbEZsYWdzPiA9IHsgfSk7CisKKyAg
ICBQYWNrZWRDb2xvcjo6UkdCQSBhc1BhY2tlZElubGluZSgpIGNvbnN0OworICAgIFJlZjxFeHRl
bmRlZENvbG9yPiBhc0V4dGVuZGVkUmVmKCkgY29uc3Q7CisKKyNpZiBDUFUoQUREUkVTUzY0KQor
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TnVtYmVyT2ZCaXRzSW5Qb2ludGVyID0g
NDg7CisjZWxzZQorICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TnVtYmVyT2ZCaXRz
SW5Qb2ludGVyID0gMzI7CisjZW5kaWYKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGNv
bG9yVmFsdWVNYXNrID0gKDFVTEwgPDwgbWF4TnVtYmVyT2ZCaXRzSW5Qb2ludGVyKSAtIDE7CiAK
LSAgICB2b2lkIHRhZ0FzU2VtYW50aWMoKSB7IG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxh
Z3MgfD0gaXNTZW1hbnRpY0lubGluZUNvbG9yQml0OyB9Ci0gICAgdm9pZCB0YWdBc1ZhbGlkKCkg
eyBtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzIHw9IHZhbGlkSW5saW5lQ29sb3I7IH0K
KyAgICBzdGF0aWMgdWludDY0X3QgZW5jb2RlZEZsYWdzKE9wdGlvblNldDxBbGxGbGFncz4pOwor
ICAgIHN0YXRpYyB1aW50NjRfdCBlbmNvZGVkSW5saW5lQ29sb3IoU1JHQkE8dWludDhfdD4pOwor
ICAgIHN0YXRpYyB1aW50NjRfdCBlbmNvZGVkUGFja2VkSW5saW5lQ29sb3IoUGFja2VkQ29sb3I6
OlJHQkEpOworICAgIHN0YXRpYyB1aW50NjRfdCBlbmNvZGVkRXh0ZW5kZWRDb2xvcihSZWY8RXh0
ZW5kZWRDb2xvcj4mJik7CisKKyAgICBzdGF0aWMgT3B0aW9uU2V0PEFsbEZsYWdzPiBkZWNvZGVk
RmxhZ3ModWludDY0X3QpOworICAgIHN0YXRpYyBTUkdCQTx1aW50OF90PiBkZWNvZGVkSW5saW5l
Q29sb3IodWludDY0X3QpOworICAgIHN0YXRpYyBQYWNrZWRDb2xvcjo6UkdCQSBkZWNvZGVkUGFj
a2VkSW5saW5lQ29sb3IodWludDY0X3QpOworICAgIHN0YXRpYyBFeHRlbmRlZENvbG9yJiBkZWNv
ZGVkRXh0ZW5kZWRDb2xvcih1aW50NjRfdCk7CiAKLSAgICAvLyAweF9fX19fX18wMCBpcyBhbiBF
eHRlbmRlZENvbG9yIHBvaW50ZXIuCi0gICAgLy8gMHhfX19fX19fMDEgaXMgYW4gaW52YWxpZCBp
bmxpbmUgY29sb3IuCi0gICAgLy8gMHhfX19fX19fMTEgaXMgYSB2YWxpZCBpbmxpbmUgY29sb3Iu
Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGV4dGVuZGVkQ29sb3IgPSAweDA7Ci0gICAgc3Rh
dGljIGNvbnN0IHVpbnQ2NF90IGludmFsaWRJbmxpbmVDb2xvciA9IDB4MTsKLSAgICBzdGF0aWMg
Y29uc3QgdWludDY0X3QgdmFsaWRJbmxpbmVDb2xvckJpdCA9IDB4MjsKLSAgICBzdGF0aWMgY29u
c3QgdWludDY0X3QgdmFsaWRJbmxpbmVDb2xvciA9IDB4MzsKLSAgICBzdGF0aWMgY29uc3QgdWlu
dDY0X3QgaXNTZW1hbnRpY0lubGluZUNvbG9yQml0ID0gMHg0OwotCi0gICAgc3RhdGljIGNvbnN0
IHVpbnQ2NF90IGRlbGV0ZWRIYXNoVmFsdWUgPSAweEZGRkZGRkZGRkZGRkZGRkQ7Ci0gICAgc3Rh
dGljIGNvbnN0IHVpbnQ2NF90IGVtcHR5SGFzaFZhbHVlID0gMHhGRkZGRkZGRkZGRkZGRkZCOwot
Ci0gICAgdW5pb24gewotICAgICAgICB1aW50NjRfdCBpbmxpbmVDb2xvckFuZEZsYWdzIHsgaW52
YWxpZElubGluZUNvbG9yIH07Ci0gICAgICAgIEV4dGVuZGVkQ29sb3IqIGV4dGVuZGVkQ29sb3I7
Ci0gICAgfSBtX2NvbG9yRGF0YTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGludmFs
aWRDb2xvckFuZEZsYWdzID0gMDsKKyAgICB1aW50NjRfdCBtX2NvbG9yQW5kRmxhZ3MgeyBpbnZh
bGlkQ29sb3JBbmRGbGFncyB9OwogfTsKIAogYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiwg
Y29uc3QgQ29sb3ImKTsKQEAgLTIxMyw2ICsyNDEsNyBAQCBib29sIG9wZXJhdG9yIT0oY29uc3Qg
Q29sb3ImLCBjb25zdCBDb2xvCiAKIC8vIE9uZSBvciBib3RoIG11c3QgYmUgZXh0ZW5kZWQgY29s
b3JzLgogYm9vbCBleHRlbmRlZENvbG9yc0VxdWFsKGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3Im
KTsKK2Jvb2wgZXh0ZW5kZWRDb2xvcnNFcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcihjb25zdCBD
b2xvciYsIGNvbnN0IENvbG9yJik7CiAKICNpZiBVU0UoQ0cpCiBXRUJDT1JFX0VYUE9SVCBDR0Nv
bG9yUmVmIGNhY2hlZENHQ29sb3IoY29uc3QgQ29sb3ImKTsKQEAgLTIyNCw4ICsyNTMsNyBAQCBp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiBhLCBjCiB7CiAgICAgaWYgKGEuaXNF
eHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgpKQogICAgICAgICByZXR1cm4gZXh0ZW5kZWRDb2xv
cnNFcXVhbChhLCBiKTsKLQotICAgIHJldHVybiBhLm1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5k
RmxhZ3MgPT0gYi5tX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzOworICAgIHJldHVybiBh
Lm1fY29sb3JBbmRGbGFncyA9PSBiLm1fY29sb3JBbmRGbGFnczsKIH0KIAogaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCkBAIC0yMzYsNyArMjY0
LDE5IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29sb3ImIGEsIGMKIGlubGluZSBi
b29sIGV4dGVuZGVkQ29sb3JzRXF1YWwoY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKQog
ewogICAgIGlmIChhLmlzRXh0ZW5kZWQoKSAmJiBiLmlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0
dXJuIGEuYXNFeHRlbmRlZCgpID09IGIuYXNFeHRlbmRlZCgpOworICAgICAgICByZXR1cm4gYS5h
c0V4dGVuZGVkKCkgPT0gYi5hc0V4dGVuZGVkKCkgJiYgYS5mbGFncygpID09IGIuZmxhZ3MoKTsK
KworICAgIEFTU0VSVChhLmlzRXh0ZW5kZWQoKSB8fCBiLmlzRXh0ZW5kZWQoKSk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitpbmxpbmUgYm9vbCBleHRlbmRlZENvbG9yc0VxdWFsSWdub3JpbmdT
ZW1hbnRpY0NvbG9yKGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYikKK3sKKyAgICBpZiAo
YS5pc0V4dGVuZGVkKCkgJiYgYi5pc0V4dGVuZGVkKCkpIHsKKyAgICAgICAgYXV0byBhRmxhZ3Mg
PSBhLmZsYWdzKCkgLSBDb2xvcjo6QWxsRmxhZ3M6OlNlbWFudGljOworICAgICAgICBhdXRvIGJG
bGFncyA9IGIuZmxhZ3MoKSAtIENvbG9yOjpBbGxGbGFnczo6U2VtYW50aWM7CisgICAgICAgIHJl
dHVybiBhLmFzRXh0ZW5kZWQoKSA9PSBiLmFzRXh0ZW5kZWQoKSAmJiBhRmxhZ3MgPT0gYkZsYWdz
OworICAgIH0KIAogICAgIEFTU0VSVChhLmlzRXh0ZW5kZWQoKSB8fCBiLmlzRXh0ZW5kZWQoKSk7
CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjQ1LDggKzI4NSwxMSBAQCBpbmxpbmUgYm9vbCBleHRl
bmRlZENvbG9yc0VxdWFsKGNvbnN0IENvCiBpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nU2VtYW50
aWNDb2xvcihjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCiB7CiAgICAgaWYgKGEuaXNF
eHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gZXh0ZW5kZWRDb2xv
cnNFcXVhbChhLCBiKTsKLSAgICByZXR1cm4gKGEubV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRG
bGFncyAmIH5Db2xvcjo6aXNTZW1hbnRpY0lubGluZUNvbG9yQml0KSA9PSAoYi5tX2NvbG9yRGF0
YS5pbmxpbmVDb2xvckFuZEZsYWdzICYgfkNvbG9yOjppc1NlbWFudGljSW5saW5lQ29sb3JCaXQp
OworICAgICAgICByZXR1cm4gZXh0ZW5kZWRDb2xvcnNFcXVhbElnbm9yaW5nU2VtYW50aWNDb2xv
cihhLCBiKTsKKworICAgIGF1dG8gYUZsYWdzID0gYS5mbGFncygpIC0gQ29sb3I6OkFsbEZsYWdz
OjpTZW1hbnRpYzsKKyAgICBhdXRvIGJGbGFncyA9IGIuZmxhZ3MoKSAtIENvbG9yOjpBbGxGbGFn
czo6U2VtYW50aWM7CisgICAgcmV0dXJuIGEuYXNQYWNrZWRJbmxpbmUoKS52YWx1ZSA9PSBiLmFz
UGFja2VkSW5saW5lKCkudmFsdWUgJiYgYUZsYWdzID09IGJGbGFnczsKIH0KIAogaW5saW5lIENv
bG9yOjpDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvcikKQEAgLTI2MCwxOCArMzAzLDE1IEBAIGlu
bGluZSBDb2xvcjo6Q29sb3IoT3B0aW9uYWw8U1JHQkE8dWludDgKICAgICAgICAgc2V0Q29sb3Io
KmNvbG9yKTsKIH0KIAotaW5saW5lIENvbG9yOjpDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvciwg
U2VtYW50aWNUYWcpCitpbmxpbmUgQ29sb3I6OkNvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yLCBP
cHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQogewotICAgIHNldENvbG9yKGNvbG9yKTsKLSAgICB0YWdB
c1NlbWFudGljKCk7CisgICAgc2V0Q29sb3IoY29sb3IsIHRvQWxsRmxhZ3MoZmxhZ3MpKTsKIH0K
IAotaW5saW5lIENvbG9yOjpDb2xvcihPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gY29sb3IsIFNl
bWFudGljVGFnKQoraW5saW5lIENvbG9yOjpDb2xvcihPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4g
Y29sb3IsIE9wdGlvblNldDxGbGFncz4gZmxhZ3MpCiB7Ci0gICAgaWYgKGNvbG9yKSB7Ci0gICAg
ICAgIHNldENvbG9yKCpjb2xvcik7Ci0gICAgICAgIHRhZ0FzU2VtYW50aWMoKTsKLSAgICB9Cisg
ICAgaWYgKGNvbG9yKQorICAgICAgICBzZXRDb2xvcigqY29sb3IsIHRvQWxsRmxhZ3MoZmxhZ3Mp
KTsKIH0KIAogaW5saW5lIENvbG9yOjpDb2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGNvbXBv
bmVudHMsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKQEAgLTI3OSw0NSArMzE5LDY0IEBAIGlubGlu
ZSBDb2xvcjo6Q29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2EKICAgICBzZXRFeHRlbmRlZENvbG9y
KEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShjb21wb25lbnRzLCBjb2xvclNwYWNlKSk7CiB9CiAKK2lu
bGluZSBDb2xvcjo6Q29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0PiBjb21wb25lbnRzLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIE9wdGlvblNldDxGbGFncz4gZmxhZ3MpCit7CisgICAgc2V0RXh0
ZW5kZWRDb2xvcihFeHRlbmRlZENvbG9yOjpjcmVhdGUoY29tcG9uZW50cywgY29sb3JTcGFjZSks
IHRvQWxsRmxhZ3MoZmxhZ3MpKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PElzQ29sb3JUeXBlV2l0aENvbXBvbmVudFR5cGU8Q29s
b3JUeXBlLCBmbG9hdD4+Kj4KIGlubGluZSBDb2xvcjo6Q29sb3IoY29uc3QgQ29sb3JUeXBlJiBj
b2xvcikKIHsKICAgICBzZXRFeHRlbmRlZENvbG9yKEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShjb2xv
cikpOwogfQogCi1pbmxpbmUgQ29sb3I6OkNvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVu
ZGVkQ29sb3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmX3Q8SXNDb2xvclR5cGVXaXRoQ29tcG9uZW50VHlwZTxDb2xvclR5cGUsIGZsb2F0Pj4q
PgoraW5saW5lIENvbG9yOjpDb2xvcihjb25zdCBDb2xvclR5cGUmIGNvbG9yLCBPcHRpb25TZXQ8
RmxhZ3M+IGZsYWdzKQogewotICAgIHNldEV4dGVuZGVkQ29sb3IoV1RGTW92ZShleHRlbmRlZENv
bG9yKSk7CisgICAgc2V0RXh0ZW5kZWRDb2xvcihFeHRlbmRlZENvbG9yOjpjcmVhdGUoY29sb3Ip
LCB0b0FsbEZsYWdzKGZsYWdzKSk7Cit9CisKK2lubGluZSBDb2xvcjo6Q29sb3IoUmVmPEV4dGVu
ZGVkQ29sb3I+JiYgZXh0ZW5kZWRDb2xvciwgT3B0aW9uU2V0PEZsYWdzPiBmbGFncykKK3sKKyAg
ICBzZXRFeHRlbmRlZENvbG9yKFdURk1vdmUoZXh0ZW5kZWRDb2xvciksIHRvQWxsRmxhZ3MoZmxh
Z3MpKTsKIH0KIAogaW5saW5lIENvbG9yOjpDb2xvcihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1
ZVR5cGUpCiB7Ci0gICAgc3RhdGljX2Fzc2VydChkZWxldGVkSGFzaFZhbHVlICYgaW52YWxpZElu
bGluZUNvbG9yLCAiQ29sb3IncyBkZWxldGVkIGhhc2ggdmFsdWUgbXVzdCBub3QgbG9vayBsaWtl
IGFuIEV4dGVuZGVkQ29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KCEoZGVsZXRlZEhhc2hWYWx1
ZSAmIHZhbGlkSW5saW5lQ29sb3JCaXQpLCAiQ29sb3IncyBkZWxldGVkIGhhc2ggdmFsdWUgbXVz
dCBub3QgbG9vayBsaWtlIGEgdmFsaWQgSW5saW5lQ29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0
KGRlbGV0ZWRIYXNoVmFsdWUgJiAoMSA8PCA0KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVl
IG11c3QgaGF2ZSBzb21lIGJpdHMgc2V0IHRoYXQgYW4gSW5saW5lQ29sb3Igd291bGRuJ3QgaGF2
ZSIpOwotICAgIG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgPSBkZWxldGVkSGFzaFZh
bHVlOwotICAgIEFTU0VSVCghaXNFeHRlbmRlZCgpKTsKKyAgICBtX2NvbG9yQW5kRmxhZ3MgPSBl
bmNvZGVkRmxhZ3MoeyBBbGxGbGFnczo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlIH0pOwogfQogCiBp
bmxpbmUgQ29sb3I6OkNvbG9yKFdURjo6SGFzaFRhYmxlRW1wdHlWYWx1ZVR5cGUpCiB7Ci0gICAg
c3RhdGljX2Fzc2VydChlbXB0eUhhc2hWYWx1ZSAmIGludmFsaWRJbmxpbmVDb2xvciwgIkNvbG9y
J3MgZW1wdHkgaGFzaCB2YWx1ZSBtdXN0IG5vdCBsb29rIGxpa2UgYW4gRXh0ZW5kZWRDb2xvciIp
OwotICAgIHN0YXRpY19hc3NlcnQoZW1wdHlIYXNoVmFsdWUgJiAoMSA8PCA0KSwgIkNvbG9yJ3Mg
ZGVsZXRlZCBoYXNoIHZhbHVlIG11c3QgaGF2ZSBzb21lIGJpdHMgc2V0IHRoYXQgYW4gSW5saW5l
Q29sb3Igd291bGRuJ3QgaGF2ZSIpOwotICAgIG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxh
Z3MgPSBlbXB0eUhhc2hWYWx1ZTsKLSAgICBBU1NFUlQoIWlzRXh0ZW5kZWQoKSk7CisgICAgbV9j
b2xvckFuZEZsYWdzID0gZW5jb2RlZEZsYWdzKHsgQWxsRmxhZ3M6Okhhc2hUYWJsZUVtcHR5VmFs
dWUgfSk7CiB9CiAKIGlubGluZSBDb2xvcjo6fkNvbG9yKCkKIHsKICAgICBpZiAoaXNFeHRlbmRl
ZCgpKQotICAgICAgICBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5kZXJlZigpOworICAgICAg
ICBhc0V4dGVuZGVkKCkuZGVyZWYoKTsKIH0KIAogaW5saW5lIHVuc2lnbmVkIENvbG9yOjpoYXNo
KCkgY29uc3QKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gY29tcHV0
ZUhhc2goYXNFeHRlbmRlZCgpLmNvbXBvbmVudHMoKSwgYXNFeHRlbmRlZCgpLmNvbG9yU3BhY2Uo
KSk7Ci0gICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZs
YWdzKTsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVIYXNoKGFzRXh0ZW5kZWQoKS5jb21wb25lbnRz
KCksIGFzRXh0ZW5kZWQoKS5jb2xvclNwYWNlKCksIGZsYWdzKCkudG9SYXcoKSk7CisgICAgcmV0
dXJuIGNvbXB1dGVIYXNoKGFzUGFja2VkSW5saW5lKCkudmFsdWUsIGZsYWdzKCkudG9SYXcoKSk7
Cit9CisKK2lubGluZSBib29sIENvbG9yOjppc1ZhbGlkKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
ZmxhZ3MoKS5jb250YWlucyhBbGxGbGFnczo6VmFsaWQpOworfQorCitpbmxpbmUgYm9vbCBDb2xv
cjo6aXNTZW1hbnRpYygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZsYWdzKCkuY29udGFpbnMoQWxs
RmxhZ3M6OlNlbWFudGljKTsKK30KKworaW5saW5lIGJvb2wgQ29sb3I6OnVzZXNDb2xvckZ1bmN0
aW9uU2VyaWFsaXphdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZsYWdzKCkuY29udGFpbnMo
QWxsRmxhZ3M6OlVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gZGVjbHR5cGUoYXV0bykgQ29sb3I6OmNhbGxPblVuZGVybHlpbmdU
eXBlKEZ1bmN0b3ImJiBmdW5jdG9yKSBjb25zdApAQCAtMzU0LDMwICs0MTMsOTYgQEAgaW5saW5l
IENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYShPcHRpbwogICAgIHJldHVybiBhbHBoYSA/IGNv
bG9yV2l0aEFscGhhKGFscGhhLnZhbHVlKCkpIDogKnRoaXM7CiB9CiAKK2lubGluZSBPcHRpb25T
ZXQ8Q29sb3I6OkFsbEZsYWdzPiBDb2xvcjo6ZmxhZ3MoKSBjb25zdAoreworICAgIHJldHVybiBk
ZWNvZGVkRmxhZ3MobV9jb2xvckFuZEZsYWdzKTsKK30KKworaW5saW5lIGJvb2wgQ29sb3I6Omlz
RXh0ZW5kZWQoKSBjb25zdAoreworICAgIHJldHVybiBmbGFncygpLmNvbnRhaW5zKEFsbEZsYWdz
OjpFeHRlbmRlZCk7Cit9CisKK2lubGluZSBib29sIENvbG9yOjppc0lubGluZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuICFmbGFncygpLmNvbnRhaW5zKEFsbEZsYWdzOjpFeHRlbmRlZCk7Cit9CisK
IGlubGluZSBjb25zdCBFeHRlbmRlZENvbG9yJiBDb2xvcjo6YXNFeHRlbmRlZCgpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKGlzRXh0ZW5kZWQoKSk7Ci0gICAgcmV0dXJuICptX2NvbG9yRGF0YS5leHRl
bmRlZENvbG9yOworICAgIHJldHVybiBkZWNvZGVkRXh0ZW5kZWRDb2xvcihtX2NvbG9yQW5kRmxh
Z3MpOworfQorCitpbmxpbmUgUmVmPEV4dGVuZGVkQ29sb3I+IENvbG9yOjphc0V4dGVuZGVkUmVm
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNFeHRlbmRlZCgpKTsKKyAgICByZXR1cm4gZGVjb2Rl
ZEV4dGVuZGVkQ29sb3IobV9jb2xvckFuZEZsYWdzKTsKIH0KIAogaW5saW5lIFNSR0JBPHVpbnQ4
X3Q+IENvbG9yOjphc0lubGluZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzSW5saW5lKCkpOwot
ICAgIHJldHVybiBhc1NSR0JBKFBhY2tlZENvbG9yOjpSR0JBIHsgc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgPj4gMzIpIH0pOworICAgIHJldHVy
biBhc1NSR0JBKGFzUGFja2VkSW5saW5lKCkpOworfQorCitpbmxpbmUgUGFja2VkQ29sb3I6OlJH
QkEgQ29sb3I6OmFzUGFja2VkSW5saW5lKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNJbmxpbmUo
KSk7CisgICAgcmV0dXJuIGRlY29kZWRQYWNrZWRJbmxpbmVDb2xvcihtX2NvbG9yQW5kRmxhZ3Mp
OwogfQogCi1pbmxpbmUgdm9pZCBDb2xvcjo6c2V0Q29sb3IoU1JHQkE8dWludDhfdD4gY29sb3Ip
CitpbmxpbmUgdWludDY0X3QgQ29sb3I6OmVuY29kZWRGbGFncyhPcHRpb25TZXQ8QWxsRmxhZ3M+
IGZsYWdzKQogewotICAgIG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgPSBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oUGFja2VkQ29sb3I6OlJHQkEgeyBjb2xvciB9LnZhbHVlKSA8PCAzMjsK
LSAgICB0YWdBc1ZhbGlkKCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ2NF90PihmbGFn
cy50b1JhdygpKSA8PCBtYXhOdW1iZXJPZkJpdHNJblBvaW50ZXI7CiB9CiAKLWlubGluZSB2b2lk
IENvbG9yOjpzZXRFeHRlbmRlZENvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVuZGVkQ29s
b3IpCitpbmxpbmUgdWludDY0X3QgQ29sb3I6OmVuY29kZWRJbmxpbmVDb2xvcihTUkdCQTx1aW50
OF90PiBjb2xvcikKIHsKLSAgICAvLyBaZXJvIHRoZSB1bmlvbiwganVzdCBpbiBjYXNlIGEgMzIt
Yml0IHN5c3RlbSBvbmx5IGFzc2lnbnMgdGhlCi0gICAgLy8gdG9wIDMyIGJpdHMgd2hlbiBjb3B5
aW5nIHRoZSBFeHRlbmRlZENvbG9yIHBvaW50ZXIgYmVsb3cuCi0gICAgbV9jb2xvckRhdGEuaW5s
aW5lQ29sb3JBbmRGbGFncyA9IDA7Ci0gICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvciA9ICZl
eHRlbmRlZENvbG9yLmxlYWtSZWYoKTsKKyAgICByZXR1cm4gZW5jb2RlZFBhY2tlZElubGluZUNv
bG9yKFBhY2tlZENvbG9yOjpSR0JBIHsgY29sb3IgfSk7Cit9CisKK2lubGluZSB1aW50NjRfdCBD
b2xvcjo6ZW5jb2RlZFBhY2tlZElubGluZUNvbG9yKFBhY2tlZENvbG9yOjpSR0JBIGNvbG9yKQor
eworICAgIHJldHVybiBjb2xvci52YWx1ZTsKK30KKworaW5saW5lIHVpbnQ2NF90IENvbG9yOjpl
bmNvZGVkRXh0ZW5kZWRDb2xvcihSZWY8RXh0ZW5kZWRDb2xvcj4mJiBleHRlbmRlZENvbG9yKQor
eworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KCZleHRlbmRlZENvbG9yLmxlYWtS
ZWYoKSk7Cit9CisKK2lubGluZSBPcHRpb25TZXQ8Q29sb3I6OkFsbEZsYWdzPiBDb2xvcjo6ZGVj
b2RlZEZsYWdzKHVpbnQ2NF90IHZhbHVlKQoreworICAgIHJldHVybiBPcHRpb25TZXQ8Q29sb3I6
OkFsbEZsYWdzPjo6ZnJvbVJhdyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFsdWUgPj4gbWF4TnVt
YmVyT2ZCaXRzSW5Qb2ludGVyKSk7Cit9CisKK2lubGluZSBTUkdCQTx1aW50OF90PiBDb2xvcjo6
ZGVjb2RlZElubGluZUNvbG9yKHVpbnQ2NF90IHZhbHVlKQoreworICAgIHJldHVybiBhc1NSR0JB
KGRlY29kZWRQYWNrZWRJbmxpbmVDb2xvcih2YWx1ZSkpOworfQorCitpbmxpbmUgUGFja2VkQ29s
b3I6OlJHQkEgQ29sb3I6OmRlY29kZWRQYWNrZWRJbmxpbmVDb2xvcih1aW50NjRfdCB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gUGFja2VkQ29sb3I6OlJHQkEgeyBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
dmFsdWUgJiBjb2xvclZhbHVlTWFzaykgfTsKK30KKworaW5saW5lIEV4dGVuZGVkQ29sb3ImIENv
bG9yOjpkZWNvZGVkRXh0ZW5kZWRDb2xvcih1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
KmJpdHdpc2VfY2FzdDxFeHRlbmRlZENvbG9yKj4odmFsdWUgJiBjb2xvclZhbHVlTWFzayk7Cit9
CisKK2lubGluZSB2b2lkIENvbG9yOjpzZXRDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvciwgT3B0
aW9uU2V0PEFsbEZsYWdzPiBmbGFncykKK3sKKyAgICBmbGFncy5hZGQoeyBBbGxGbGFnczo6VmFs
aWQgfSk7CisgICAgbV9jb2xvckFuZEZsYWdzID0gZW5jb2RlZElubGluZUNvbG9yKGNvbG9yKSB8
IGVuY29kZWRGbGFncyhmbGFncyk7CisgICAgQVNTRVJUKGlzSW5saW5lKCkpOworfQorCitpbmxp
bmUgdm9pZCBDb2xvcjo6c2V0RXh0ZW5kZWRDb2xvcihSZWY8RXh0ZW5kZWRDb2xvcj4mJiBjb2xv
ciwgT3B0aW9uU2V0PEFsbEZsYWdzPiBmbGFncykKK3sKKyAgICBmbGFncy5hZGQoeyBBbGxGbGFn
czo6VmFsaWQsIEFsbEZsYWdzOjpFeHRlbmRlZCB9KTsKKyAgICBtX2NvbG9yQW5kRmxhZ3MgPSBl
bmNvZGVkRXh0ZW5kZWRDb2xvcihXVEZNb3ZlKGNvbG9yKSkgfCBlbmNvZGVkRmxhZ3MoZmxhZ3Mp
OwogICAgIEFTU0VSVChpc0V4dGVuZGVkKCkpOwogfQogCkBAIC0zOTcsNiArNTIyLDE1IEBAIGlu
bGluZSBib29sIENvbG9yOjppc1doaXRlQ29sb3IoY29uc3QgQ28KIAogdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4gdm9pZCBDb2xvcjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7Cisg
ICAgaWYgKCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgZW5jb2RlciA8PCBmYWxzZTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBlbmNvZGVyIDw8IHRydWU7CisKKyAgICBlbmNvZGVyIDw8IGZs
YWdzKCkuY29udGFpbnMoQWxsRmxhZ3M6OlNlbWFudGljKTsKKyAgICBlbmNvZGVyIDw8IGZsYWdz
KCkuY29udGFpbnMoQWxsRmxhZ3M6OlVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKTsKKwog
ICAgIGlmIChpc0V4dGVuZGVkKCkpIHsKICAgICAgICAgZW5jb2RlciA8PCB0cnVlOwogCkBAIC00
MDksMjIgKzU0MywzNiBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIENvbG9yOjplbmNv
CiAgICAgICAgIGVuY29kZXIgPDwgZXh0ZW5kZWRDb2xvci5jb2xvclNwYWNlKCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0KICAgICBlbmNvZGVyIDw8IGZhbHNlOwogCi0gICAgaWYgKCFpc1Zh
bGlkKCkpIHsKLSAgICAgICAgZW5jb2RlciA8PCBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBlbmNvZGUgd2hldGhlciB0aGUgY29sb3Ig
aXMgc2VtYW50aWMuCi0KLSAgICBlbmNvZGVyIDw8IHRydWU7Ci0gICAgZW5jb2RlciA8PCBQYWNr
ZWRDb2xvcjo6UkdCQSB7IGFzSW5saW5lKCkgfS52YWx1ZTsKKyAgICBlbmNvZGVyIDw8IGFzUGFj
a2VkSW5saW5lKCkudmFsdWU7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IE9wdGlvbmFs
PENvbG9yPiBDb2xvcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CisgICAgYm9vbCBpc1Zh
bGlkOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNWYWxpZCkpCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisKKyAgICBpZiAoIWlzVmFsaWQpCisgICAgICAgIHJldHVybiBDb2xvciB7
IH07CisKKyAgICBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzOworCisgICAgYm9vbCBpc1NlbWFudGlj
OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNTZW1hbnRpYykpCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisKKyAgICBpZiAoaXNTZW1hbnRpYykKKyAgICAgICAgZmxhZ3MuYWRkKEZs
YWdzOjpTZW1hbnRpYyk7CisKKyAgICBib29sIHVzZXNDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlv
bjsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHVzZXNDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlv
bikpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAodXNlc0NvbG9yRnVu
Y3Rpb25TZXJpYWxpemF0aW9uKQorICAgICAgICBmbGFncy5hZGQoRmxhZ3M6OlVzZUNvbG9yRnVu
Y3Rpb25TZXJpYWxpemF0aW9uKTsKKwogICAgIGJvb2wgaXNFeHRlbmRlZDsKICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGlzRXh0ZW5kZWQpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpA
QCAtNDQ1LDIxICs1OTMsMTQgQEAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gT3B0aW9uYWw8Q29s
b3I+IAogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShjb2xvclNwYWNlKSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0gICAgICAgIHJldHVybiBDb2xvciB7IEV4dGVuZGVkQ29sb3I6OmNyZWF0ZSh7IGMxLCBjMiwg
YzMsIGFscGhhIH0sIGNvbG9yU3BhY2UpIH07CisgICAgICAgIHJldHVybiBDb2xvciB7IEV4dGVu
ZGVkQ29sb3I6OmNyZWF0ZSh7IGMxLCBjMiwgYzMsIGFscGhhIH0sIGNvbG9yU3BhY2UpLCBmbGFn
cyB9OwogICAgIH0KIAotICAgIGJvb2wgaXNWYWxpZDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGlzVmFsaWQpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgaWYgKCFpc1Zh
bGlkKQotICAgICAgICByZXR1cm4gQ29sb3IgeyB9OwotCiAgICAgdWludDMyX3QgdmFsdWU7CiAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZSkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKLSAgICByZXR1cm4gQ29sb3IgeyBhc1NSR0JBKFBhY2tlZENvbG9yOjpSR0JBIHsgdmFs
dWUgfSkgfTsKKyAgICByZXR1cm4gQ29sb3IgeyBhc1NSR0JBKFBhY2tlZENvbG9yOjpSR0JBIHsg
dmFsdWUgfSksIGZsYWdzIH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3Bw
CShyZXZpc2lvbiAyNzMxMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvckJsZW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBDb2xvciBi
bGVuZFdpdGhXaGl0ZShjb25zdCBDb2xvciYgY29sb3IpCiAKICAgICAvLyBGSVhNRTogV2h5IGlz
IHByZXNlcnZpbmcgdGhlIHNlbWFudGljIGJpdCBkZXNpcmVkIGFuZC9vciBjb3JyZWN0IGhlcmU/
CiAgICAgaWYgKGNvbG9yLmlzU2VtYW50aWMoKSkKLSAgICAgICAgcmV0dXJuIENvbG9yKHJlc3Vs
dCwgQ29sb3I6OlNlbWFudGljKTsKKyAgICAgICAgcmV0dXJuIHsgcmVzdWx0LCBDb2xvcjo6Rmxh
Z3M6OlNlbWFudGljIH07CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24u
Y3BwCShyZXZpc2lvbiAyNzMxMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvclNlcmlhbGl6YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2NSArMzYsNjUg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25G
b3JDU1MoY29uc3QgQTk4UkdCPGZsb2F0PiYpOwotc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9u
Rm9ySFRNTChjb25zdCBBOThSR0I8ZmxvYXQ+Jik7Ci1zdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRp
b25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IEE5OFJHQjxmbG9hdD4mKTsKLQotc3RhdGljIFN0
cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mKTsKLXN0YXRp
YyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYpOwot
c3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBEaXNw
bGF5UDM8ZmxvYXQ+Jik7Ci0KLXN0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25z
dCBMQ0hBPGZsb2F0PiYpOwotc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25z
dCBMQ0hBPGZsb2F0PiYpOwotc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJl
ZUFzVGV4dChjb25zdCBMQ0hBPGZsb2F0PiYpOwotCi1zdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRp
b25Gb3JDU1MoY29uc3QgTGFiPGZsb2F0PiYpOwotc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9u
Rm9ySFRNTChjb25zdCBMYWI8ZmxvYXQ+Jik7Ci1zdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25G
b3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IExhYjxmbG9hdD4mKTsKLQotc3RhdGljIFN0cmluZyBz
ZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYpOwotc3RhdGljIFN0
cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mKTsKLXN0
YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgTGluZWFy
U1JHQkE8ZmxvYXQ+Jik7Ci0KLXN0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25z
dCBQcm9QaG90b1JHQjxmbG9hdD4mKTsKLXN0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhU
TUwoY29uc3QgUHJvUGhvdG9SR0I8ZmxvYXQ+Jik7Ci1zdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRp
b25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IFByb1Bob3RvUkdCPGZsb2F0PiYpOwotCi1zdGF0
aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgUmVjMjAyMDxmbG9hdD4mKTsKLXN0
YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgUmVjMjAyMDxmbG9hdD4mKTsK
LXN0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgUmVj
MjAyMDxmbG9hdD4mKTsKLQotc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0
IFNSR0JBPGZsb2F0PiYpOwotc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25z
dCBTUkdCQTxmbG9hdD4mKTsKLXN0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRy
ZWVBc1RleHQoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7Ci0KLXN0YXRpYyBTdHJpbmcgc2VyaWFsaXph
dGlvbkZvckNTUyhTUkdCQTx1aW50OF90Pik7Ci1zdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25G
b3JIVE1MKFNSR0JBPHVpbnQ4X3Q+KTsKLXN0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJl
bmRlclRyZWVBc1RleHQoU1JHQkE8dWludDhfdD4pOwotCi1zdGF0aWMgU3RyaW5nIHNlcmlhbGl6
YXRpb25Gb3JDU1MoY29uc3QgWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDUwPiYpOwotc3RhdGlj
IFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50
OjpENTA+Jik7Ci1zdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0
KGNvbnN0IFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4mKTsKK3N0YXRpYyBTdHJpbmcgc2Vy
aWFsaXphdGlvbkZvckNTUyhjb25zdCBBOThSR0I8ZmxvYXQ+JiwgYm9vbCB1c2VDb2xvckZ1bmN0
aW9uU2VyaWFsaXphdGlvbik7CitzdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNv
bnN0IEE5OFJHQjxmbG9hdD4mLCBib29sIHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKTsK
K3N0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgQTk4
UkdCPGZsb2F0PiYsIGJvb2wgdXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pOworCitzdGF0
aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYsIGJv
b2wgdXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pOworc3RhdGljIFN0cmluZyBzZXJpYWxp
emF0aW9uRm9ySFRNTChjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+JiwgYm9vbCB1c2VDb2xvckZ1bmN0
aW9uU2VyaWFsaXphdGlvbik7CitzdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJU
cmVlQXNUZXh0KGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mLCBib29sIHVzZUNvbG9yRnVuY3Rpb25T
ZXJpYWxpemF0aW9uKTsKKworc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0
IExDSEE8ZmxvYXQ+JiwgYm9vbCB1c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbik7CitzdGF0
aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IExDSEE8ZmxvYXQ+JiwgYm9vbCB1
c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbik7CitzdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRp
b25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IExDSEE8ZmxvYXQ+JiwgYm9vbCB1c2VDb2xvckZ1
bmN0aW9uU2VyaWFsaXphdGlvbik7CisKK3N0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNT
Uyhjb25zdCBMYWI8ZmxvYXQ+JiwgYm9vbCB1c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbik7
CitzdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IExhYjxmbG9hdD4mLCBi
b29sIHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKTsKK3N0YXRpYyBTdHJpbmcgc2VyaWFs
aXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgTGFiPGZsb2F0PiYsIGJvb2wgdXNlQ29s
b3JGdW5jdGlvblNlcmlhbGl6YXRpb24pOworCitzdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25G
b3JDU1MoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+JiwgYm9vbCB1c2VDb2xvckZ1bmN0aW9uU2Vy
aWFsaXphdGlvbik7CitzdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IExp
bmVhclNSR0JBPGZsb2F0PiYsIGJvb2wgdXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pOwor
c3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBMaW5l
YXJTUkdCQTxmbG9hdD4mLCBib29sIHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKTsKKwor
c3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IFByb1Bob3RvUkdCPGZsb2F0
PiYsIGJvb2wgdXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pOworc3RhdGljIFN0cmluZyBz
ZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBQcm9QaG90b1JHQjxmbG9hdD4mLCBib29sIHVzZUNv
bG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKTsKK3N0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZv
clJlbmRlclRyZWVBc1RleHQoY29uc3QgUHJvUGhvdG9SR0I8ZmxvYXQ+JiwgYm9vbCB1c2VDb2xv
ckZ1bmN0aW9uU2VyaWFsaXphdGlvbik7CisKK3N0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZv
ckNTUyhjb25zdCBSZWMyMDIwPGZsb2F0PiYsIGJvb2wgdXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6
YXRpb24pOworc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBSZWMyMDIw
PGZsb2F0PiYsIGJvb2wgdXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pOworc3RhdGljIFN0
cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBSZWMyMDIwPGZsb2F0
PiYsIGJvb2wgdXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pOworCitzdGF0aWMgU3RyaW5n
IHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgU1JHQkE8ZmxvYXQ+JiwgYm9vbCB1c2VDb2xvckZ1
bmN0aW9uU2VyaWFsaXphdGlvbik7CitzdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1M
KGNvbnN0IFNSR0JBPGZsb2F0PiYsIGJvb2wgdXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24p
Oworc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBT
UkdCQTxmbG9hdD4mLCBib29sIHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKTsKKworc3Rh
dGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKFNSR0JBPHVpbnQ4X3Q+LCBib29sIHVzZUNv
bG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKTsKK3N0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZv
ckhUTUwoU1JHQkE8dWludDhfdD4sIGJvb2wgdXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24p
Oworc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChTUkdCQTx1
aW50OF90PiwgYm9vbCB1c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbik7CisKK3N0YXRpYyBT
dHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpE
NTA+JiwgYm9vbCB1c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbik7CitzdGF0aWMgU3RyaW5n
IHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4m
LCBib29sIHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKTsKK3N0YXRpYyBTdHJpbmcgc2Vy
aWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgWFlaQTxmbG9hdCwgV2hpdGVQb2lu
dDo6RDUwPiYsIGJvb2wgdXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pOwogCiAKIFN0cmlu
ZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICByZXR1cm4g
Y29sb3IuY2FsbE9uVW5kZXJseWluZ1R5cGUoW10gKGF1dG8gdW5kZXJseWluZ0NvbG9yKSB7Ci0g
ICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKHVuZGVybHlpbmdDb2xvcik7CisgICAg
cmV0dXJuIGNvbG9yLmNhbGxPblVuZGVybHlpbmdUeXBlKFsmXSAoYXV0byB1bmRlcmx5aW5nQ29s
b3IpIHsKKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JDU1ModW5kZXJseWluZ0NvbG9y
LCBjb2xvci51c2VzQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24oKSk7CiAgICAgfSk7CiB9CiAK
IFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAg
cmV0dXJuIGNvbG9yLmNhbGxPblVuZGVybHlpbmdUeXBlKFtdIChhdXRvIHVuZGVybHlpbmdDb2xv
cikgewotICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckhUTUwodW5kZXJseWluZ0NvbG9y
KTsKKyAgICByZXR1cm4gY29sb3IuY2FsbE9uVW5kZXJseWluZ1R5cGUoWyZdIChhdXRvIHVuZGVy
bHlpbmdDb2xvcikgeworICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckhUTUwodW5kZXJs
eWluZ0NvbG9yLCBjb2xvci51c2VzQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24oKSk7CiAgICAg
fSk7CiB9CiAKIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBD
b2xvciYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIGNvbG9yLmNhbGxPblVuZGVybHlpbmdUeXBlKFtd
IChhdXRvIHVuZGVybHlpbmdDb2xvcikgewotICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZv
clJlbmRlclRyZWVBc1RleHQodW5kZXJseWluZ0NvbG9yKTsKKyAgICByZXR1cm4gY29sb3IuY2Fs
bE9uVW5kZXJseWluZ1R5cGUoWyZdIChhdXRvIHVuZGVybHlpbmdDb2xvcikgeworICAgICAgICBy
ZXR1cm4gc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQodW5kZXJseWluZ0NvbG9yLCBj
b2xvci51c2VzQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24oKSk7CiAgICAgfSk7CiB9CiAKQEAg
LTEyNSw1MyArMTI1LDcwIEBAIHN0YXRpYyBBU0NJSUxpdGVyYWwgc2VyaWFsaXphdGlvbihDb2xv
clMKICAgICByZXR1cm4gIiJfczsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBz
dGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpb24oY29uc3QgQ29sb3JUeXBlJiBjb2xvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uVXNpbmdD
b2xvckZ1bmN0aW9uKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCiB7CisgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGUsIGZsb2F0
Pik7CisKICAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKICAgICBpZiAoV1RG
OjphcmVFc3NlbnRpYWxseUVxdWFsKGFscGhhLCAxLjBmKSkKICAgICAgICAgcmV0dXJuIG1ha2VT
dHJpbmcoImNvbG9yKCIsIHNlcmlhbGl6YXRpb24oQ29sb3JTcGFjZUZvcjxDb2xvclR5cGU+KSwg
JyAnLCBjMSwgJyAnLCBjMiwgJyAnLCBjMywgJyknKTsKICAgICByZXR1cm4gbWFrZVN0cmluZygi
Y29sb3IoIiwgc2VyaWFsaXphdGlvbihDb2xvclNwYWNlRm9yPENvbG9yVHlwZT4pLCAnICcsIGMx
LCAnICcsIGMyLCAnICcsIGMzLCAiIC8gIiwgYWxwaGEsICcpJyk7CiB9CiAKK3N0YXRpYyBTdHJp
bmcgc2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbihjb25zdCBMYWI8ZmxvYXQ+JiBjb2xv
cikKK3sKKyAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKKyAgICBpZiAoV1RG
OjphcmVFc3NlbnRpYWxseUVxdWFsKGFscGhhLCAxLjBmKSkKKyAgICAgICAgcmV0dXJuIG1ha2VT
dHJpbmcoImNvbG9yKCIsIHNlcmlhbGl6YXRpb24oQ29sb3JTcGFjZUZvcjxMYWI8ZmxvYXQ+Piks
ICcgJywgYzEsICIlICIsIGMyLCAnICcsIGMzLCAnKScpOworICAgIHJldHVybiBtYWtlU3RyaW5n
KCJjb2xvcigiLCBzZXJpYWxpemF0aW9uKENvbG9yU3BhY2VGb3I8TGFiPGZsb2F0Pj4pLCAnICcs
IGMxLCAiJSAiLCBjMiwgJyAnLCBjMywgIiAvICIsIGFscGhhLCAnKScpOworfQorCitzdGF0aWMg
U3RyaW5nIHNlcmlhbGl6YXRpb25Vc2luZ0NvbG9yRnVuY3Rpb24oY29uc3QgU1JHQkE8dWludDhf
dD4mIGNvbG9yKQoreworICAgIHJldHVybiBzZXJpYWxpemF0aW9uVXNpbmdDb2xvckZ1bmN0aW9u
KGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGNvbG9yKSk7Cit9CisKIC8vIE1BUks6IEE5OFJH
QjxmbG9hdD4gb3ZlcmxvYWRzCiAKLVN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IEE5
OFJHQjxmbG9hdD4mIGNvbG9yKQorU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgQTk4
UkdCPGZsb2F0PiYgY29sb3IsIGJvb2wpCiB7Ci0gICAgcmV0dXJuIHNlcmlhbGl6YXRpb24oY29s
b3IpOworICAgIHJldHVybiBzZXJpYWxpemF0aW9uVXNpbmdDb2xvckZ1bmN0aW9uKGNvbG9yKTsK
IH0KIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IEE5OFJHQjxmbG9hdD4mIGNv
bG9yKQorU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IEE5OFJHQjxmbG9hdD4mIGNv
bG9yLCBib29sKQogewotICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKKyAgICByZXR1
cm4gc2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbihjb2xvcik7CiB9CiAKLVN0cmluZyBz
ZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBBOThSR0I8ZmxvYXQ+JiBjb2xv
cikKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBBOThSR0I8
ZmxvYXQ+JiBjb2xvciwgYm9vbCkKIHsKLSAgICByZXR1cm4gc2VyaWFsaXphdGlvbihjb2xvcik7
CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Vc2luZ0NvbG9yRnVuY3Rpb24oY29sb3IpOwogfQog
CiAvLyBNQVJLOiBEaXNwbGF5UDM8ZmxvYXQ+IG92ZXJsb2FkcwogCi1TdHJpbmcgc2VyaWFsaXph
dGlvbkZvckNTUyhjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikKK1N0cmluZyBzZXJpYWxp
emF0aW9uRm9yQ1NTKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mIGNvbG9yLCBib29sKQogewotICAg
IHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvblVz
aW5nQ29sb3JGdW5jdGlvbihjb2xvcik7CiB9CiAKLVN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRN
TChjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9y
SFRNTChjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvciwgYm9vbCkKIHsKLSAgICByZXR1cm4g
c2VyaWFsaXphdGlvbihjb2xvcik7CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Vc2luZ0NvbG9y
RnVuY3Rpb24oY29sb3IpOwogfQogCi1TdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVB
c1RleHQoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYgY29sb3IpCitTdHJpbmcgc2VyaWFsaXphdGlv
bkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYgY29sb3IsIGJvb2wp
CiB7Ci0gICAgcmV0dXJuIHNlcmlhbGl6YXRpb24oY29sb3IpOworICAgIHJldHVybiBzZXJpYWxp
emF0aW9uVXNpbmdDb2xvckZ1bmN0aW9uKGNvbG9yKTsKIH0KIAogLy8gTUFSSzogTENIQTxmbG9h
dD4gb3ZlcmxvYWRzCiAKLVN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IExDSEE8Zmxv
YXQ+JiBjb2xvcikKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IExDSEE8ZmxvYXQ+
JiBjb2xvciwgYm9vbCB1c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbikKIHsKICAgICAvLyBo
dHRwczovL3d3dy53My5vcmcvVFIvY3NzLWNvbG9yLTQvI3NlcmlhbGl6aW5nLWxhYi1sY2gKKyAg
ICBpZiAodXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pCisgICAgICAgIHJldHVybiBzZXJp
YWxpemF0aW9uVXNpbmdDb2xvckZ1bmN0aW9uKGNvbG9yKTsKIAogICAgIGF1dG8gW2MxLCBjMiwg
YzMsIGFscGhhXSA9IGNvbG9yOwogICAgIGlmIChXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoYWxw
aGEsIDEuMGYpKQpAQCAtMTc5LDIxICsxOTYsMjMgQEAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JD
U1MoY29uc3QgTENIQTxmbAogICAgIHJldHVybiBtYWtlU3RyaW5nKCJsY2goIiwgYzEsICIlICIs
IGMyLCAnICcsIGMzLCAiIC8gIiwgYWxwaGEsICcpJyk7CiB9CiAKLVN0cmluZyBzZXJpYWxpemF0
aW9uRm9ySFRNTChjb25zdCBMQ0hBPGZsb2F0PiYgY29sb3IpCitTdHJpbmcgc2VyaWFsaXphdGlv
bkZvckhUTUwoY29uc3QgTENIQTxmbG9hdD4mIGNvbG9yLCBib29sIHVzZUNvbG9yRnVuY3Rpb25T
ZXJpYWxpemF0aW9uKQogewotICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbG9yKTsK
KyAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckNTUyhjb2xvciwgdXNlQ29sb3JGdW5jdGlvblNl
cmlhbGl6YXRpb24pOwogfQogCi1TdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1Rl
eHQoY29uc3QgTENIQTxmbG9hdD4mIGNvbG9yKQorU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5k
ZXJUcmVlQXNUZXh0KGNvbnN0IExDSEE8ZmxvYXQ+JiBjb2xvciwgYm9vbCB1c2VDb2xvckZ1bmN0
aW9uU2VyaWFsaXphdGlvbikKIHsKLSAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckNTUyhjb2xv
cik7CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29sb3IsIHVzZUNvbG9yRnVuY3Rp
b25TZXJpYWxpemF0aW9uKTsKIH0KIAogLy8gTUFSSzogTGFiPGZsb2F0PiBvdmVybG9hZHMKIAot
U3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgTGFiPGZsb2F0PiYgY29sb3IpCitTdHJp
bmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBMYWI8ZmxvYXQ+JiBjb2xvciwgYm9vbCB1c2VD
b2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbikKIHsKICAgICAvLyBodHRwczovL3d3dy53My5vcmcv
VFIvY3NzLWNvbG9yLTQvI3NlcmlhbGl6aW5nLWxhYi1sY2gKKyAgICBpZiAodXNlQ29sb3JGdW5j
dGlvblNlcmlhbGl6YXRpb24pCisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uVXNpbmdDb2xv
ckZ1bmN0aW9uKGNvbG9yKTsKIAogICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9y
OwogICAgIGlmIChXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoYWxwaGEsIDEuMGYpKQpAQCAtMjAx
LDgyICsyMjAsODIgQEAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgTGFiPGZsbwog
ICAgIHJldHVybiBtYWtlU3RyaW5nKCJsYWIoIiwgYzEsICIlICIsIGMyLCAnICcsIGMzLCAiIC8g
IiwgYWxwaGEsICcpJyk7CiB9CiAKLVN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBM
YWI8ZmxvYXQ+JiBjb2xvcikKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBMYWI8
ZmxvYXQ+JiBjb2xvciwgYm9vbCB1c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbikKIHsKLSAg
ICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckNTUyhjb2xvcik7CisgICAgcmV0dXJuIHNlcmlhbGl6
YXRpb25Gb3JDU1MoY29sb3IsIHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKTsKIH0KIAot
U3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IExhYjxmbG9hdD4m
IGNvbG9yKQorU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IExh
YjxmbG9hdD4mIGNvbG9yLCBib29sIHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKQogewot
ICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbG9yKTsKKyAgICByZXR1cm4gc2VyaWFs
aXphdGlvbkZvckNTUyhjb2xvciwgdXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pOwogfQog
CiAvLyBNQVJLOiBMaW5lYXJTUkdCQTxmbG9hdD4gb3ZlcmxvYWRzCiAKLVN0cmluZyBzZXJpYWxp
emF0aW9uRm9yQ1NTKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYgY29sb3IpCitTdHJpbmcgc2Vy
aWFsaXphdGlvbkZvckNTUyhjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mIGNvbG9yLCBib29sKQog
ewotICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKKyAgICByZXR1cm4gc2VyaWFsaXph
dGlvblVzaW5nQ29sb3JGdW5jdGlvbihjb2xvcik7CiB9CiAKLVN0cmluZyBzZXJpYWxpemF0aW9u
Rm9ySFRNTChjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mIGNvbG9yKQorU3RyaW5nIHNlcmlhbGl6
YXRpb25Gb3JIVE1MKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYgY29sb3IsIGJvb2wpCiB7Ci0g
ICAgcmV0dXJuIHNlcmlhbGl6YXRpb24oY29sb3IpOworICAgIHJldHVybiBzZXJpYWxpemF0aW9u
VXNpbmdDb2xvckZ1bmN0aW9uKGNvbG9yKTsKIH0KIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JS
ZW5kZXJUcmVlQXNUZXh0KGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYgY29sb3IpCitTdHJpbmcg
c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+
JiBjb2xvciwgYm9vbCkKIHsKLSAgICByZXR1cm4gc2VyaWFsaXphdGlvbihjb2xvcik7CisgICAg
cmV0dXJuIHNlcmlhbGl6YXRpb25Vc2luZ0NvbG9yRnVuY3Rpb24oY29sb3IpOwogfQogCiAvLyBN
QVJLOiBQcm9QaG90b1JHQjxmbG9hdD4gb3ZlcmxvYWRzCiAKLVN0cmluZyBzZXJpYWxpemF0aW9u
Rm9yQ1NTKGNvbnN0IFByb1Bob3RvUkdCPGZsb2F0PiYgY29sb3IpCitTdHJpbmcgc2VyaWFsaXph
dGlvbkZvckNTUyhjb25zdCBQcm9QaG90b1JHQjxmbG9hdD4mIGNvbG9yLCBib29sKQogewotICAg
IHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvblVz
aW5nQ29sb3JGdW5jdGlvbihjb2xvcik7CiB9CiAKLVN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRN
TChjb25zdCBQcm9QaG90b1JHQjxmbG9hdD4mIGNvbG9yKQorU3RyaW5nIHNlcmlhbGl6YXRpb25G
b3JIVE1MKGNvbnN0IFByb1Bob3RvUkdCPGZsb2F0PiYgY29sb3IsIGJvb2wpCiB7Ci0gICAgcmV0
dXJuIHNlcmlhbGl6YXRpb24oY29sb3IpOworICAgIHJldHVybiBzZXJpYWxpemF0aW9uVXNpbmdD
b2xvckZ1bmN0aW9uKGNvbG9yKTsKIH0KIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJU
cmVlQXNUZXh0KGNvbnN0IFByb1Bob3RvUkdCPGZsb2F0PiYgY29sb3IpCitTdHJpbmcgc2VyaWFs
aXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgUHJvUGhvdG9SR0I8ZmxvYXQ+JiBjb2xv
ciwgYm9vbCkKIHsKLSAgICByZXR1cm4gc2VyaWFsaXphdGlvbihjb2xvcik7CisgICAgcmV0dXJu
IHNlcmlhbGl6YXRpb25Vc2luZ0NvbG9yRnVuY3Rpb24oY29sb3IpOwogfQogCiAvLyBNQVJLOiBS
ZWMyMDIwPGZsb2F0PiBvdmVybG9hZHMKIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29u
c3QgUmVjMjAyMDxmbG9hdD4mIGNvbG9yKQorU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29u
c3QgUmVjMjAyMDxmbG9hdD4mIGNvbG9yLCBib29sKQogewotICAgIHJldHVybiBzZXJpYWxpemF0
aW9uKGNvbG9yKTsKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbihj
b2xvcik7CiB9CiAKLVN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBSZWMyMDIwPGZs
b2F0PiYgY29sb3IpCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgUmVjMjAyMDxm
bG9hdD4mIGNvbG9yLCBib29sKQogewotICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsK
KyAgICByZXR1cm4gc2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbihjb2xvcik7CiB9CiAK
LVN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBSZWMyMDIwPGZs
b2F0PiYgY29sb3IpCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29u
c3QgUmVjMjAyMDxmbG9hdD4mIGNvbG9yLCBib29sKQogewotICAgIHJldHVybiBzZXJpYWxpemF0
aW9uKGNvbG9yKTsKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbihj
b2xvcik7CiB9CiAKIC8vIE1BUks6IFNSR0JBPGZsb2F0PiBvdmVybG9hZHMKIAotU3RyaW5nIHNl
cmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKK1N0cmluZyBzZXJp
YWxpemF0aW9uRm9yQ1NTKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IsIGJvb2wpCiB7Ci0gICAg
cmV0dXJuIHNlcmlhbGl6YXRpb24oY29sb3IpOworICAgIHJldHVybiBzZXJpYWxpemF0aW9uVXNp
bmdDb2xvckZ1bmN0aW9uKGNvbG9yKTsKIH0KIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1M
KGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwo
Y29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvciwgYm9vbCkKIHsKLSAgICByZXR1cm4gc2VyaWFsaXph
dGlvbihjb2xvcik7CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Vc2luZ0NvbG9yRnVuY3Rpb24o
Y29sb3IpOwogfQogCi1TdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29u
c3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJl
ZUFzVGV4dChjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yLCBib29sKQogewotICAgIHJldHVybiBz
ZXJpYWxpemF0aW9uKGNvbG9yKTsKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvblVzaW5nQ29sb3JG
dW5jdGlvbihjb2xvcik7CiB9CiAKIC8vIE1BUks6IFNSR0JBPHVpbnQ4X3Q+IG92ZXJsb2FkcwpA
QCAtMjk4LDggKzMxNywxMSBAQCBzdGF0aWMgc3RkOjphcnJheTxjaGFyLCA0PiBmcmFjdGlvbkRp
Z2l0CiAgICAgcmV0dXJuIHsgeyBkZWNpbWFsRGlnaXQoKGFscGhhICogMTAgKyAweDdGKSAvIDB4
RkYpLCAnXDAnLCAnXDAnLCAnXDAnIH0gfTsKIH0KIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JD
U1MoU1JHQkE8dWludDhfdD4gY29sb3IpCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhTUkdC
QTx1aW50OF90PiBjb2xvciwgYm9vbCB1c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbikKIHsK
KyAgICBpZiAodXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pCisgICAgICAgIHJldHVybiBz
ZXJpYWxpemF0aW9uVXNpbmdDb2xvckZ1bmN0aW9uKGNvbG9yKTsKKwogICAgIGF1dG8gW3JlZCwg
Z3JlZW4sIGJsdWUsIGFscGhhXSA9IGNvbG9yOwogICAgIHN3aXRjaCAoYWxwaGEpIHsKICAgICBj
YXNlIDA6CkBAIC0zMTEsMTYgKzMzMywyMiBAQCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhT
UkdCQTx1aW50OF90CiAgICAgfQogfQogCi1TdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoU1JH
QkE8dWludDhfdD4gY29sb3IpCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoU1JHQkE8dWlu
dDhfdD4gY29sb3IsIGJvb2wgdXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pCiB7CisgICAg
aWYgKHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKQorICAgICAgICByZXR1cm4gc2VyaWFs
aXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbihjb2xvcik7CisKICAgICBhdXRvIFtyZWQsIGdyZWVu
LCBibHVlLCBhbHBoYV0gPSBjb2xvcjsKICAgICBpZiAoYWxwaGEgPT0gMHhGRikKICAgICAgICAg
cmV0dXJuIG1ha2VTdHJpbmcoJyMnLCBoZXgocmVkLCAyLCBMb3dlcmNhc2UpLCBoZXgoZ3JlZW4s
IDIsIExvd2VyY2FzZSksIGhleChibHVlLCAyLCBMb3dlcmNhc2UpKTsKICAgICByZXR1cm4gc2Vy
aWFsaXphdGlvbkZvckNTUyhjb2xvcik7CiB9CiAKLVN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVu
ZGVyVHJlZUFzVGV4dChTUkdCQTx1aW50OF90PiBjb2xvcikKK1N0cmluZyBzZXJpYWxpemF0aW9u
Rm9yUmVuZGVyVHJlZUFzVGV4dChTUkdCQTx1aW50OF90PiBjb2xvciwgYm9vbCB1c2VDb2xvckZ1
bmN0aW9uU2VyaWFsaXphdGlvbikKIHsKKyAgICBpZiAodXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6
YXRpb24pCisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uVXNpbmdDb2xvckZ1bmN0aW9uKGNv
bG9yKTsKKwogICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9IGNvbG9yOwogICAg
IGlmIChhbHBoYSA8IDB4RkYpCiAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJl
ZCwgMiksIGhleChncmVlbiwgMiksIGhleChibHVlLCAyKSwgaGV4KGFscGhhLCAyKSk7CkBAIC0z
MjksMTkgKzM1NywxOSBAQCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQo
CiAKIC8vIE1BUks6IFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4gb3ZlcmxvYWRzCiAKLVN0
cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1
MD4mIGNvbG9yKQorU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgWFlaQTxmbG9hdCwg
V2hpdGVQb2ludDo6RDUwPiYgY29sb3IsIGJvb2wpCiB7Ci0gICAgcmV0dXJuIHNlcmlhbGl6YXRp
b24oY29sb3IpOworICAgIHJldHVybiBzZXJpYWxpemF0aW9uVXNpbmdDb2xvckZ1bmN0aW9uKGNv
bG9yKTsKIH0KIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IFhZWkE8ZmxvYXQs
IFdoaXRlUG9pbnQ6OkQ1MD4mIGNvbG9yKQorU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNv
bnN0IFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4mIGNvbG9yLCBib29sKQogewotICAgIHJl
dHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvblVzaW5n
Q29sb3JGdW5jdGlvbihjb2xvcik7CiB9CiAKLVN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVy
VHJlZUFzVGV4dChjb25zdCBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+JiBjb2xvcikKK1N0
cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBYWVpBPGZsb2F0LCBX
aGl0ZVBvaW50OjpENTA+JiBjb2xvciwgYm9vbCkKIHsKLSAgICByZXR1cm4gc2VyaWFsaXphdGlv
bihjb2xvcik7CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Vc2luZ0NvbG9yRnVuY3Rpb24oY29s
b3IpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9D
b2xvckNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9Db2xvckNHLmNwcAkocmV2aXNpb24gMjczMTAyKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDggKzg5
LDggQEAgQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3IpCiB7CiB9CiAKLUNvbG9yOjpDb2xv
cihDR0NvbG9yUmVmIGNvbG9yLCBTZW1hbnRpY1RhZyB0YWcpCi0gICAgOiBDb2xvcihyb3VuZEFu
ZENsYW1wVG9TUkdCQUxvc3N5KGNvbG9yKSwgdGFnKQorQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYg
Y29sb3IsIE9wdGlvblNldDxGbGFncz4gZmxhZ3MpCisgICAgOiBDb2xvcihyb3VuZEFuZENsYW1w
VG9TUkdCQUxvc3N5KGNvbG9yKSwgZmxhZ3MpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0JKHJldmlzaW9uIDI3MzEw
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIENvbG9yIGNvbG9yRnJvbU5TQ29sb3Io
TlNDb2xvciAqY29sb3IpCiAKIENvbG9yIHNlbWFudGljQ29sb3JGcm9tTlNDb2xvcihOU0NvbG9y
ICpjb2xvcikKIHsKLSAgICByZXR1cm4gQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbU5TQ29sb3Io
Y29sb3IpLCBDb2xvcjo6U2VtYW50aWMpOworICAgIHJldHVybiBDb2xvcihtYWtlU2ltcGxlQ29s
b3JGcm9tTlNDb2xvcihjb2xvciksIENvbG9yOjpGbGFnczo6U2VtYW50aWMpOwogfQogCiBOU0Nv
bG9yICpuc0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHJldmlzaW9uIDI3MzEwMikKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTM5
MSw3ICsxMzkxLDcgQEAgc3RhdGljIGNvbnN0IFZlY3RvcjxDU1NWYWx1ZUlEQW5kU2VsZWN0bwog
c3RhdGljIGlubGluZSBPcHRpb25hbDxDb2xvcj4gc3lzdGVtQ29sb3JGcm9tQ1NTVmFsdWVJRFNl
bGVjdG9yKENTU1ZhbHVlSURBbmRTZWxlY3RvciBpZEFuZFNlbGVjdG9yKQogewogICAgIGlmIChh
dXRvIGNvbG9yID0gd3RmT2JqQ01zZ1NlbmQ8VUlDb2xvciAqPihQQUw6OmdldFVJQ29sb3JDbGFz
cygpLCBpZEFuZFNlbGVjdG9yLnNlbGVjdG9yKSkKLSAgICAgICAgcmV0dXJuIENvbG9yIHsgY29s
b3IuQ0dDb2xvciwgQ29sb3I6OlNlbWFudGljIH07CisgICAgICAgIHJldHVybiBDb2xvciB7IGNv
bG9yLkNHQ29sb3IsIENvbG9yOjpGbGFnczo6U2VtYW50aWMgfTsKICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogfQogCkBAIC0xNDA5LDcgKzE0MDksNyBAQCBzdGF0aWMgT3B0aW9uYWw8Q29sb3I+
IHN5c3RlbUNvbG9yRnJvbUNTCiAKICAgICBpZiAoYXV0byBzZWxlY3RvciA9IGNzc0NvbG9yVG9T
ZWxlY3RvcigpKSB7CiAgICAgICAgIGlmIChhdXRvIGNvbG9yID0gd3RmT2JqQ01zZ1NlbmQ8VUlD
b2xvciAqPihQQUw6OmdldFVJQ29sb3JDbGFzcygpLCBzZWxlY3RvcikpCi0gICAgICAgICAgICBy
ZXR1cm4gQ29sb3IoY29sb3IuQ0dDb2xvciwgQ29sb3I6OlNlbWFudGljKTsKKyAgICAgICAgICAg
IHJldHVybiBDb2xvciB7IGNvbG9yLkNHQ29sb3IsIENvbG9yOjpGbGFnczo6U2VtYW50aWMgfTsK
ICAgICB9CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHJldmlzaW9uIDI3MzEwMikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
NzI5LDI2ICs3MjksMjYgQEAgQ29sb3IgUmVuZGVyVGhlbWVNYWM6OnN5c3RlbUNvbG9yKENTU1Zh
bAogICAgICAgICBjYXNlIENTU1ZhbHVlQWN0aXZlYm9yZGVyOgogICAgICAgICAgICAgLy8gSGFy
ZGNvZGVkIHRvIGF2b2lkIGV4cG9zaW5nIGEgdXNlciBhcHBlYXJhbmNlIHByZWZlcmVuY2UgdG8g
dGhlIHdlYiBmb3IgZmluZ2VycHJpbnRpbmcuCiAgICAgICAgICAgICBpZiAobG9jYWxBcHBlYXJh
bmNlLnVzaW5nRGFya0FwcGVhcmFuY2UoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4geyBTUkdC
QTx1aW50OF90PiB7IDI2LCAxNjksIDI1NSB9LCBDb2xvcjo6U2VtYW50aWMgfTsKLSAgICAgICAg
ICAgIHJldHVybiB7IFNSR0JBPHVpbnQ4X3Q+IHsgMCwgMTAzLCAyNDQgfSwgQ29sb3I6OlNlbWFu
dGljIH07CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgU1JHQkE8dWludDhfdD4geyAyNiwgMTY5
LCAyNTUgfSwgQ29sb3I6OkZsYWdzOjpTZW1hbnRpYyB9OworICAgICAgICAgICAgcmV0dXJuIHsg
U1JHQkE8dWludDhfdD4geyAwLCAxMDMsIDI0NCB9LCBDb2xvcjo6RmxhZ3M6OlNlbWFudGljIH07
CiAKICAgICAgICAgY2FzZSBDU1NWYWx1ZUFwcGxlU3lzdGVtQ29udHJvbEFjY2VudDoKICAgICAg
ICAgICAgIC8vIEhhcmRjb2RlZCB0byBhdm9pZCBleHBvc2luZyBhIHVzZXIgYXBwZWFyYW5jZSBw
cmVmZXJlbmNlIHRvIHRoZSB3ZWIgZm9yIGZpbmdlcnByaW50aW5nLgogICAgICAgICAgICAgLy8g
U2FtZSBjb2xvciBpbiBsaWdodCBhbmQgZGFyayBhcHBlYXJhbmNlcy4KLSAgICAgICAgICAgIHJl
dHVybiB7IFNSR0JBPHVpbnQ4X3Q+IHsgMCwgMTIyLCAyNTUgfSwgQ29sb3I6OlNlbWFudGljIH07
CisgICAgICAgICAgICByZXR1cm4geyBTUkdCQTx1aW50OF90PiB7IDAsIDEyMiwgMjU1IH0sIENv
bG9yOjpGbGFnczo6U2VtYW50aWMgfTsKIAogICAgICAgICBjYXNlIENTU1ZhbHVlQXBwbGVTeXN0
ZW1TZWxlY3RlZENvbnRlbnRCYWNrZ3JvdW5kOgogICAgICAgICAgICAgLy8gSGFyZGNvZGVkIHRv
IGF2b2lkIGV4cG9zaW5nIGEgdXNlciBhcHBlYXJhbmNlIHByZWZlcmVuY2UgdG8gdGhlIHdlYiBm
b3IgZmluZ2VycHJpbnRpbmcuCiAgICAgICAgICAgICBpZiAobG9jYWxBcHBlYXJhbmNlLnVzaW5n
RGFya0FwcGVhcmFuY2UoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4geyBTUkdCQTx1aW50OF90
PiB7IDAsIDg4LCAyMDggfSwgQ29sb3I6OlNlbWFudGljIH07Ci0gICAgICAgICAgICByZXR1cm4g
eyBTUkdCQTx1aW50OF90PiB7IDAsIDk5LCAyMjUgfSwgQ29sb3I6OlNlbWFudGljIH07CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHsgU1JHQkE8dWludDhfdD4geyAwLCA4OCwgMjA4IH0sIENvbG9y
OjpGbGFnczo6U2VtYW50aWMgfTsKKyAgICAgICAgICAgIHJldHVybiB7IFNSR0JBPHVpbnQ4X3Q+
IHsgMCwgOTksIDIyNSB9LCBDb2xvcjo6RmxhZ3M6OlNlbWFudGljIH07CiAKICAgICAgICAgY2Fz
ZSBDU1NWYWx1ZUhpZ2hsaWdodDoKICAgICAgICAgY2FzZSBDU1NWYWx1ZUFwcGxlU3lzdGVtU2Vs
ZWN0ZWRUZXh0QmFja2dyb3VuZDoKICAgICAgICAgICAgIC8vIEhhcmRjb2RlZCB0byBhdm9pZCBl
eHBvc2luZyBhIHVzZXIgYXBwZWFyYW5jZSBwcmVmZXJlbmNlIHRvIHRoZSB3ZWIgZm9yIGZpbmdl
cnByaW50aW5nLgogICAgICAgICAgICAgaWYgKGxvY2FsQXBwZWFyYW5jZS51c2luZ0RhcmtBcHBl
YXJhbmNlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHsgU1JHQkE8dWludDhfdD4geyA2Mywg
OTksIDEzOSwgMjA0IH0sIENvbG9yOjpTZW1hbnRpYyB9OwotICAgICAgICAgICAgcmV0dXJuIHsg
U1JHQkE8dWludDhfdD4geyAxMjgsIDE4OCwgMjU0LCAxNTMgfSwgQ29sb3I6OlNlbWFudGljIH07
CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgU1JHQkE8dWludDhfdD4geyA2MywgOTksIDEzOSwg
MjA0IH0sIENvbG9yOjpGbGFnczo6U2VtYW50aWMgfTsKKyAgICAgICAgICAgIHJldHVybiB7IFNS
R0JBPHVpbnQ4X3Q+IHsgMTI4LCAxODgsIDI1NCwgMTUzIH0sIENvbG9yOjpGbGFnczo6U2VtYW50
aWMgfTsKIAogI2lmICFIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQogICAgICAgICBjYXNlIENT
U1ZhbHVlQXBwbGVTeXN0ZW1Db250YWluZXJCb3JkZXI6CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzMx
MDIpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NCBAQAorMjAyMS0wMi0xOCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAg
ICAgY29sb3IobGFiIC4uLikgc2hvdWxkIHNlcmlhbGl6ZSBhcyBjb2xvcihsYWIgLi4uKSBub3Qg
bGFiKCkgYWNjb3JkaW5nIHRvIGxhdGVzdCBDU1MgQ29sb3IgNCBzcGVjCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjIxMTAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvY3NzL3BhcnNpbmctbGFi
LWNvbG9ycy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9jc3MvcGFyc2luZy1sYWItY29s
b3JzLmh0bWw6CisgICAgICAgIFVwZGF0ZSB0ZXN0IGFuZCByZXN1bHRzIGZvciBuZXcgc2VyaWFs
aXphdGlvbiBvZiBjb2xvcihsYWIgLi4uKS4KKwogMjAyMS0wMi0xOCAgQW1pciBNYXJrIEpyICA8
YW1pcl9tYXJrQGFwcGxlLmNvbT4KIAogICAgICAgICBbQmlnU3VyXSBpbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtY291bnRlci1zdHlsZXMvdGliZXRhbi9jc3MzLWNvdW50
ZXItc3R5bGVzLTE1Ni5odG1sIGlzIGNvbnNpc3RlbnRseSBmYWlsaW5nCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2Nzcy9wYXJzaW5nLWxhYi1jb2xvcnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvY3NzL3BhcnNpbmctbGFiLWNvbG9ycy1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDI3MzEwMikKKysrIExheW91dFRlc3RzL2Zhc3QvY3NzL3BhcnNpbmctbGFiLWNv
bG9ycy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi1UZXN0IHRo
ZSBwYXJzaW5nIG9mIGxhYiwgbGNoIGFuZCBncmF5IGNvbG9ycy4KK1Rlc3QgdGhlIHBhcnNpbmcg
b2YgbGFiKC4uLiksIGxjaCguLi4pIGFuZCBjb2xvcihsYWIgLi4uKSBjb2xvcnMuCiAKIE9uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KIApAQCAtNDAsMjYgKzQwLDI2IEBAIFBBU1MgY29tcHV0ZWRT
dHlsZSgiYmFja2dyb3VuZC1jb2xvciIsICIKIFBBU1MgY29tcHV0ZWRTdHlsZSgiYmFja2dyb3Vu
ZC1jb2xvciIsICJsY2goMTAlIDIwIC03MDApIikgaXMgImxjaCgxMCUgMjAgMjApIgogCiBjb2xv
cihsYWIgKQotUEFTUyBjb21wdXRlZFN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxh
YiAwJSAwIDApIikgaXMgImxhYigwJSAwIDApIgotUEFTUyBjb21wdXRlZFN0eWxlKCJiYWNrZ3Jv
dW5kLWNvbG9yIiwgImNvbG9yKGxhYiAwJSAwIDAgLyAxKSIpIGlzICJsYWIoMCUgMCAwKSIKLVBB
U1MgY29tcHV0ZWRTdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgMCUgMCAwIC8g
MC41KSIpIGlzICJsYWIoMCUgMCAwIC8gMC41KSIKLVBBU1MgY29tcHV0ZWRTdHlsZSgiYmFja2dy
b3VuZC1jb2xvciIsICJjb2xvcihsYWIgMjAlIDAgMTAvMC41KSIpIGlzICJsYWIoMjAlIDAgMTAg
LyAwLjUpIgotUEFTUyBjb21wdXRlZFN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxh
YiAyMCUgMCAxMC81MCUpIikgaXMgImxhYigyMCUgMCAxMCAvIDAuNSkiCi1QQVNTIGNvbXB1dGVk
U3R5bGUoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIDQwMCUgMCAxMC81MCUpIikgaXMg
ImxhYig0MDAlIDAgMTAgLyAwLjUpIgotUEFTUyBjb21wdXRlZFN0eWxlKCJiYWNrZ3JvdW5kLWNv
bG9yIiwgImNvbG9yKGxhYiA1MCUgLTE2MCAxNjApIikgaXMgImxhYig1MCUgLTE2MCAxNjApIgot
UEFTUyBjb21wdXRlZFN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiA1MCUgLTIw
MCAyMDApIikgaXMgImxhYig1MCUgLTIwMCAyMDApIgotUEFTUyBjb21wdXRlZFN0eWxlKCJiYWNr
Z3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiAwJSAwIDAgLyAtMTAlKSIpIGlzICJsYWIoMCUgMCAw
IC8gMCkiCi1QQVNTIGNvbXB1dGVkU3R5bGUoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFi
IDAlIDAgMCAvIDExMCUpIikgaXMgImxhYigwJSAwIDApIgotUEFTUyBjb21wdXRlZFN0eWxlKCJi
YWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiAwJSAwIDAgLyAzMDAlKSIpIGlzICJsYWIoMCUg
MCAwKSIKLVBBU1MgY29tcHV0ZWRTdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIg
NTAlIC0yMDApIikgaXMgImxhYig1MCUgLTIwMCAwKSIKLVBBU1MgY29tcHV0ZWRTdHlsZSgiYmFj
a2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgNTAlKSIpIGlzICJsYWIoNTAlIDAgMCkiCi1QQVNT
IGNvbXB1dGVkU3R5bGUoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiKSIpIGlzICJsYWIo
MCUgMCAwKSIKLVBBU1MgY29tcHV0ZWRTdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihs
YWIgNTAlIC0yMDAgLyAwLjUpIikgaXMgImxhYig1MCUgLTIwMCAwIC8gMC41KSIKLVBBU1MgY29t
cHV0ZWRTdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgNTAlIC8gMC41KSIpIGlz
ICJsYWIoNTAlIDAgMCAvIDAuNSkiCi1QQVNTIGNvbXB1dGVkU3R5bGUoImJhY2tncm91bmQtY29s
b3IiLCAiY29sb3IobGFiIC8gMC41KSIpIGlzICJsYWIoMCUgMCAwIC8gMC41KSIKLVBBU1MgY29t
cHV0ZWRTdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgLTQwJSAwIDApIikgaXMg
ImxhYigwJSAwIDApIgotUEFTUyBjb21wdXRlZFN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNv
bG9yKGxhYiA1MCUgLTIwIDApIikgaXMgImxhYig1MCUgLTIwIDApIgotUEFTUyBjb21wdXRlZFN0
eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiA1MCUgMCAtMjApIikgaXMgImxhYig1
MCUgMCAtMjApIgorUEFTUyBjb21wdXRlZFN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9y
KGxhYiAwJSAwIDApIikgaXMgImNvbG9yKGxhYiAwJSAwIDApIgorUEFTUyBjb21wdXRlZFN0eWxl
KCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiAwJSAwIDAgLyAxKSIpIGlzICJjb2xvcihs
YWIgMCUgMCAwKSIKK1BBU1MgY29tcHV0ZWRTdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xv
cihsYWIgMCUgMCAwIC8gMC41KSIpIGlzICJjb2xvcihsYWIgMCUgMCAwIC8gMC41KSIKK1BBU1Mg
Y29tcHV0ZWRTdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgMjAlIDAgMTAvMC41
KSIpIGlzICJjb2xvcihsYWIgMjAlIDAgMTAgLyAwLjUpIgorUEFTUyBjb21wdXRlZFN0eWxlKCJi
YWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiAyMCUgMCAxMC81MCUpIikgaXMgImNvbG9yKGxh
YiAyMCUgMCAxMCAvIDAuNSkiCitQQVNTIGNvbXB1dGVkU3R5bGUoImJhY2tncm91bmQtY29sb3Ii
LCAiY29sb3IobGFiIDQwMCUgMCAxMC81MCUpIikgaXMgImNvbG9yKGxhYiA0MDAlIDAgMTAgLyAw
LjUpIgorUEFTUyBjb21wdXRlZFN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiA1
MCUgLTE2MCAxNjApIikgaXMgImNvbG9yKGxhYiA1MCUgLTE2MCAxNjApIgorUEFTUyBjb21wdXRl
ZFN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiA1MCUgLTIwMCAyMDApIikgaXMg
ImNvbG9yKGxhYiA1MCUgLTIwMCAyMDApIgorUEFTUyBjb21wdXRlZFN0eWxlKCJiYWNrZ3JvdW5k
LWNvbG9yIiwgImNvbG9yKGxhYiAwJSAwIDAgLyAtMTAlKSIpIGlzICJjb2xvcihsYWIgMCUgMCAw
IC8gMCkiCitQQVNTIGNvbXB1dGVkU3R5bGUoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFi
IDAlIDAgMCAvIDExMCUpIikgaXMgImNvbG9yKGxhYiAwJSAwIDApIgorUEFTUyBjb21wdXRlZFN0
eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiAwJSAwIDAgLyAzMDAlKSIpIGlzICJj
b2xvcihsYWIgMCUgMCAwKSIKK1BBU1MgY29tcHV0ZWRTdHlsZSgiYmFja2dyb3VuZC1jb2xvciIs
ICJjb2xvcihsYWIgNTAlIC0yMDApIikgaXMgImNvbG9yKGxhYiA1MCUgLTIwMCAwKSIKK1BBU1Mg
Y29tcHV0ZWRTdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgNTAlKSIpIGlzICJj
b2xvcihsYWIgNTAlIDAgMCkiCitQQVNTIGNvbXB1dGVkU3R5bGUoImJhY2tncm91bmQtY29sb3Ii
LCAiY29sb3IobGFiKSIpIGlzICJjb2xvcihsYWIgMCUgMCAwKSIKK1BBU1MgY29tcHV0ZWRTdHls
ZSgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgNTAlIC0yMDAgLyAwLjUpIikgaXMgImNv
bG9yKGxhYiA1MCUgLTIwMCAwIC8gMC41KSIKK1BBU1MgY29tcHV0ZWRTdHlsZSgiYmFja2dyb3Vu
ZC1jb2xvciIsICJjb2xvcihsYWIgNTAlIC8gMC41KSIpIGlzICJjb2xvcihsYWIgNTAlIDAgMCAv
IDAuNSkiCitQQVNTIGNvbXB1dGVkU3R5bGUoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFi
IC8gMC41KSIpIGlzICJjb2xvcihsYWIgMCUgMCAwIC8gMC41KSIKK1BBU1MgY29tcHV0ZWRTdHls
ZSgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgLTQwJSAwIDApIikgaXMgImNvbG9yKGxh
YiAwJSAwIDApIgorUEFTUyBjb21wdXRlZFN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9y
KGxhYiA1MCUgLTIwIDApIikgaXMgImNvbG9yKGxhYiA1MCUgLTIwIDApIgorUEFTUyBjb21wdXRl
ZFN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiA1MCUgMCAtMjApIikgaXMgImNv
bG9yKGxhYiA1MCUgMCAtMjApIgogCiBUZXN0IGludmFsaWQgdmFsdWVzCiBQQVNTIGNvbXB1dGVk
U3R5bGUoImJhY2tncm91bmQtY29sb3IiLCAibGFiKDAgMCAwKSIpIGlzICJyZ2JhKDAsIDAsIDAs
IDApIgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jc3MvcGFyc2luZy1sYWItY29sb3JzLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jc3MvcGFyc2luZy1sYWItY29sb3JzLmh0
bWwJKHJldmlzaW9uIDI3MzEwMikKKysrIExheW91dFRlc3RzL2Zhc3QvY3NzL3BhcnNpbmctbGFi
LWNvbG9ycy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogPC9oZWFkPgogPGJv
ZHk+CiA8c2NyaXB0PgotICAgIGRlc2NyaXB0aW9uKCJUZXN0IHRoZSBwYXJzaW5nIG9mIGxhYiwg
bGNoIGFuZCBncmF5IGNvbG9ycy4iKTsKKyAgICBkZXNjcmlwdGlvbigiVGVzdCB0aGUgcGFyc2lu
ZyBvZiBsYWIoLi4uKSwgbGNoKC4uLikgYW5kIGNvbG9yKGxhYiAuLi4pIGNvbG9ycy4iKTsKIAog
ICAgIGZ1bmN0aW9uIGNvbXB1dGVkU3R5bGUocHJvcGVydHksIHZhbHVlKQogICAgIHsKQEAgLTc0
LDI2ICs3NCwyNiBAQAogCiAgICAgZGVidWcoJycpOwogICAgIGRlYnVnKCdjb2xvcihsYWIgKScp
OwotICAgIHRlc3RDb21wdXRlZCgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgMCUgMCAw
KSIsICJsYWIoMCUgMCAwKSIpOwotICAgIHRlc3RDb21wdXRlZCgiYmFja2dyb3VuZC1jb2xvciIs
ICJjb2xvcihsYWIgMCUgMCAwIC8gMSkiLCAibGFiKDAlIDAgMCkiKTsKLSAgICB0ZXN0Q29tcHV0
ZWQoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIDAlIDAgMCAvIDAuNSkiLCAibGFiKDAl
IDAgMCAvIDAuNSkiKTsKLSAgICB0ZXN0Q29tcHV0ZWQoImJhY2tncm91bmQtY29sb3IiLCAiY29s
b3IobGFiIDIwJSAwIDEwLzAuNSkiLCAibGFiKDIwJSAwIDEwIC8gMC41KSIpOwotICAgIHRlc3RD
b21wdXRlZCgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgMjAlIDAgMTAvNTAlKSIsICJs
YWIoMjAlIDAgMTAgLyAwLjUpIik7Ci0gICAgdGVzdENvbXB1dGVkKCJiYWNrZ3JvdW5kLWNvbG9y
IiwgImNvbG9yKGxhYiA0MDAlIDAgMTAvNTAlKSIsICJsYWIoNDAwJSAwIDEwIC8gMC41KSIpOwot
ICAgIHRlc3RDb21wdXRlZCgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgNTAlIC0xNjAg
MTYwKSIsICJsYWIoNTAlIC0xNjAgMTYwKSIpOwotICAgIHRlc3RDb21wdXRlZCgiYmFja2dyb3Vu
ZC1jb2xvciIsICJjb2xvcihsYWIgNTAlIC0yMDAgMjAwKSIsICJsYWIoNTAlIC0yMDAgMjAwKSIp
OwotICAgIHRlc3RDb21wdXRlZCgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgMCUgMCAw
IC8gLTEwJSkiLCAibGFiKDAlIDAgMCAvIDApIik7Ci0gICAgdGVzdENvbXB1dGVkKCJiYWNrZ3Jv
dW5kLWNvbG9yIiwgImNvbG9yKGxhYiAwJSAwIDAgLyAxMTAlKSIsICJsYWIoMCUgMCAwKSIpOwot
ICAgIHRlc3RDb21wdXRlZCgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgMCUgMCAwIC8g
MzAwJSkiLCAibGFiKDAlIDAgMCkiKTsKLSAgICB0ZXN0Q29tcHV0ZWQoImJhY2tncm91bmQtY29s
b3IiLCAiY29sb3IobGFiIDUwJSAtMjAwKSIsICJsYWIoNTAlIC0yMDAgMCkiKTsKLSAgICB0ZXN0
Q29tcHV0ZWQoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIDUwJSkiLCAibGFiKDUwJSAw
IDApIik7Ci0gICAgdGVzdENvbXB1dGVkKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiki
LCAibGFiKDAlIDAgMCkiKTsKLSAgICB0ZXN0Q29tcHV0ZWQoImJhY2tncm91bmQtY29sb3IiLCAi
Y29sb3IobGFiIDUwJSAtMjAwIC8gMC41KSIsICJsYWIoNTAlIC0yMDAgMCAvIDAuNSkiKTsKLSAg
ICB0ZXN0Q29tcHV0ZWQoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIDUwJSAvIDAuNSki
LCAibGFiKDUwJSAwIDAgLyAwLjUpIik7Ci0gICAgdGVzdENvbXB1dGVkKCJiYWNrZ3JvdW5kLWNv
bG9yIiwgImNvbG9yKGxhYiAvIDAuNSkiLCAibGFiKDAlIDAgMCAvIDAuNSkiKTsKLSAgICB0ZXN0
Q29tcHV0ZWQoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIC00MCUgMCAwKSIsICJsYWIo
MCUgMCAwKSIpOwotICAgIHRlc3RDb21wdXRlZCgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihs
YWIgNTAlIC0yMCAwKSIsICJsYWIoNTAlIC0yMCAwKSIpOwotICAgIHRlc3RDb21wdXRlZCgiYmFj
a2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgNTAlIDAgLTIwKSIsICJsYWIoNTAlIDAgLTIwKSIp
OworICAgIHRlc3RDb21wdXRlZCgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgMCUgMCAw
KSIsICJjb2xvcihsYWIgMCUgMCAwKSIpOworICAgIHRlc3RDb21wdXRlZCgiYmFja2dyb3VuZC1j
b2xvciIsICJjb2xvcihsYWIgMCUgMCAwIC8gMSkiLCAiY29sb3IobGFiIDAlIDAgMCkiKTsKKyAg
ICB0ZXN0Q29tcHV0ZWQoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIDAlIDAgMCAvIDAu
NSkiLCAiY29sb3IobGFiIDAlIDAgMCAvIDAuNSkiKTsKKyAgICB0ZXN0Q29tcHV0ZWQoImJhY2tn
cm91bmQtY29sb3IiLCAiY29sb3IobGFiIDIwJSAwIDEwLzAuNSkiLCAiY29sb3IobGFiIDIwJSAw
IDEwIC8gMC41KSIpOworICAgIHRlc3RDb21wdXRlZCgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xv
cihsYWIgMjAlIDAgMTAvNTAlKSIsICJjb2xvcihsYWIgMjAlIDAgMTAgLyAwLjUpIik7CisgICAg
dGVzdENvbXB1dGVkKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiA0MDAlIDAgMTAvNTAl
KSIsICJjb2xvcihsYWIgNDAwJSAwIDEwIC8gMC41KSIpOworICAgIHRlc3RDb21wdXRlZCgiYmFj
a2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgNTAlIC0xNjAgMTYwKSIsICJjb2xvcihsYWIgNTAl
IC0xNjAgMTYwKSIpOworICAgIHRlc3RDb21wdXRlZCgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xv
cihsYWIgNTAlIC0yMDAgMjAwKSIsICJjb2xvcihsYWIgNTAlIC0yMDAgMjAwKSIpOworICAgIHRl
c3RDb21wdXRlZCgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgMCUgMCAwIC8gLTEwJSki
LCAiY29sb3IobGFiIDAlIDAgMCAvIDApIik7CisgICAgdGVzdENvbXB1dGVkKCJiYWNrZ3JvdW5k
LWNvbG9yIiwgImNvbG9yKGxhYiAwJSAwIDAgLyAxMTAlKSIsICJjb2xvcihsYWIgMCUgMCAwKSIp
OworICAgIHRlc3RDb21wdXRlZCgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgMCUgMCAw
IC8gMzAwJSkiLCAiY29sb3IobGFiIDAlIDAgMCkiKTsKKyAgICB0ZXN0Q29tcHV0ZWQoImJhY2tn
cm91bmQtY29sb3IiLCAiY29sb3IobGFiIDUwJSAtMjAwKSIsICJjb2xvcihsYWIgNTAlIC0yMDAg
MCkiKTsKKyAgICB0ZXN0Q29tcHV0ZWQoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIDUw
JSkiLCAiY29sb3IobGFiIDUwJSAwIDApIik7CisgICAgdGVzdENvbXB1dGVkKCJiYWNrZ3JvdW5k
LWNvbG9yIiwgImNvbG9yKGxhYikiLCAiY29sb3IobGFiIDAlIDAgMCkiKTsKKyAgICB0ZXN0Q29t
cHV0ZWQoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIDUwJSAtMjAwIC8gMC41KSIsICJj
b2xvcihsYWIgNTAlIC0yMDAgMCAvIDAuNSkiKTsKKyAgICB0ZXN0Q29tcHV0ZWQoImJhY2tncm91
bmQtY29sb3IiLCAiY29sb3IobGFiIDUwJSAvIDAuNSkiLCAiY29sb3IobGFiIDUwJSAwIDAgLyAw
LjUpIik7CisgICAgdGVzdENvbXB1dGVkKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiAv
IDAuNSkiLCAiY29sb3IobGFiIDAlIDAgMCAvIDAuNSkiKTsKKyAgICB0ZXN0Q29tcHV0ZWQoImJh
Y2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIC00MCUgMCAwKSIsICJjb2xvcihsYWIgMCUgMCAw
KSIpOworICAgIHRlc3RDb21wdXRlZCgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgNTAl
IC0yMCAwKSIsICJjb2xvcihsYWIgNTAlIC0yMCAwKSIpOworICAgIHRlc3RDb21wdXRlZCgiYmFj
a2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgNTAlIDAgLTIwKSIsICJjb2xvcihsYWIgNTAlIDAg
LTIwKSIpOwogCiAgICAgZGVidWcoJycpOwogICAgIGRlYnVnKCdUZXN0IGludmFsaWQgdmFsdWVz
Jyk7Cg==
</data>
<flag name="commit-queue"
          id="439600"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420911</attachid>
            <date>2021-02-18 20:09:47 -0800</date>
            <delta_ts>2021-02-20 10:34:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222110-20210218200946.patch</filename>
            <type>text/plain</type>
            <size>58926</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MzEwMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk1IEBACisyMDIxLTAyLTE4ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBjb2xvcihsYWIgLi4uKSBzaG91bGQg
c2VyaWFsaXplIGFzIGNvbG9yKGxhYiAuLi4pIG5vdCBsYWIoKSBhY2NvcmRpbmcgdG8gbGF0ZXN0
IENTUyBDb2xvciA0IHNwZWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyMjExMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRvIG1ha2UgdGhpcyB3b3JrIGl0IHdhcyBuZWNlc3NhcnkgdG8gbWFrZSBpdCBz
byB0aGF0IGV4dGVuZGVkIGNvbG9ycywgbGlrZSBMYWIsCisgICAgICAgIGNvdWxkIHN0b3JlIGFu
IGV4dHJhIGJpdCBvZiBkYXRhIG9uIENvbG9yIHRvIGluZGljYXRlIHRoYXQgaXQgc2hvdWxkIHVz
ZSB0aGUKKyAgICAgICAgY29sb3IoKSBmdW5jdGlvbiBmb3Igc2VyaWFsaXphdGlvbiB3aGVuIHBh
cnNlZCB1c2luZyB0aGUgY29sb3IoKSBmb3JtLgorCisgICAgICAgIFRvIGRvIHRoYXQsIENvbG9y
IHdhcyByZXdvcmtlZCB0byBhbGxvdyBleHRyYSBtZXRhZGF0YSBmbGFncyBmb3IgYm90aCBpbmxp
bmUgYW5kIAorICAgICAgICBleHRlbmRlZCBjb2xvcnMuIFByZXZpb3VzbHksIG9ubHkgaW5saW5l
IGNvbG9ycyBjb3VsZCBtYWtlIHVzZSBvZiB0aGUgZXh0cmEgYml0cy4KKyAgICAgICAgTm93LCB3
ZSB0YWtlIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgdGhlIGhpZ2ggMTYgYml0
cyBhdmFpbGFibGUgdG8gdXMKKyAgICAgICAgZm9yIHBvaW50ZXJzIHRvIGFsc28gc3RvcmUgdGhh
dCBtZXRhZGF0YSBmb3IgZXh0ZW5kZWQgY29sb3JzLiBSYXRoZXIgdGhhbiB1c2luZyBhCisgICAg
ICAgIHVuaW9uLCB3ZSBlbmNvZGUgdGhlIHBvaW50ZXIgLyBpbmxpbmUgY29sb3IgaW50byBhIHVp
bnQ2NF90LCBhbmQgdXNlIHRoZSBleHRyYSBiaXRzCisgICAgICAgIGZvciB0aGUgZmxhZ3Mgd2Ug
bmVlZC4gQ3VycmVudGx5IHdlIG9ubHkgdXNlIDYsIHNvIHRoZXJlIGlzIHF1aXRlIGEgYml0IG1v
cmUgdGhhdAorICAgICAgICBjb3VsZCBiZSB1c2VkIGhlcmUuCisKKyAgICAgICAgRmluYWxseSwg
dGhlIGNvbG9yIHNlcmlhbGl6YXRpb24gY29kZSBoYXMgYmVlbiB1cGRhdGVkIHRvIGNoZWNrIGZv
ciB0aGUgbmV3IGJpdCwKKyAgICAgICAgY2FsbGVkIFVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0
aW9uLCBhbmQgdG8gc2VyaWFsaXplIHVzaW5nIGNvbG9yKCkgbm90YXRpb24KKyAgICAgICAgaWYg
aXQgaXMgc2V0LgorCisgICAgICAgIFdlIGFyZSBjdXJyZW50bHkgb25seSB0YWtpbmcgYWR2YW50
YWdlIG9mIHRoaXMgZm9yIGRpZmZlcmVudGlhdGluZyBiZXR3ZWVuIGxhYiguLi4pCisgICAgICAg
IGFuZCBjb2xvcihsYWIgLi4uKSwgYnV0IGluIHRoZSBmdXR1cmUgd2Ugc2hvdWxkIGJlIGFibGUg
dG8gYWxzbyBvcHRpbWl6ZSBjb2xvcihzcmdiIC4uLikKKyAgICAgICAgdmFsdWVzIHRoYXQgY2Fu
IGJlIHJlcHJlc2VudGVkIGZ1bGx5IGJ5IFNSR0JBPHVpbnQ4X3Q+LgorCisgICAgICAgIFNpbmNl
IHdlIGNhbiBub3cgYWRkIGZsYWdzIGZvciBleHRlbmRlZCBjb2xvcnMsIHRoZSBzZW1hbnRpYyBi
aXQgaXMgYWxzbyBub3cgdXNhYmxlCisgICAgICAgIGZvciBleHRlbmRlZCBjb2xvcnMsIHRob3Vn
aCBub25lIGN1cnJlbnRseSBleGlzdC4KKworICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6cGFyc2VDb2xvckZ1bmN0aW9uRm9yUkdCVHlwZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUNvbG9yRnVuY3Rpb25Gb3JMYWJQYXJh
bWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFy
c2VDb2xvckZ1bmN0aW9uRm9yWFlaUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlQ29sb3JGdW5jdGlvblBhcmFtZXRlcnMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3I9KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6c2VtYW50aWNDb2xvciBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Q29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29sb3I6OnRvQWxsRmxhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OnNldENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpzZXRFeHRlbmRlZENvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6ZXh0ZW5k
ZWRDb2xvcnNFcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpleHRlbmRlZENvbG9yc0VxdWFsSWdu
b3JpbmdTZW1hbnRpY0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmVxdWFsSWdub3JpbmdTZW1h
bnRpY0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp+Q29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6Omhhc2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Omlz
VmFsaWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzU2VtYW50aWMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnVzZXNDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlv
biBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZmxhZ3MgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29sb3I6OmlzRXh0ZW5kZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q29sb3I6OmlzSW5saW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjphc0V4dGVu
ZGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjphc0V4dGVuZGVkUmVmIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjphc0lubGluZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6YXNQYWNrZWRJbmxpbmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q29sb3I6OmVuY29kZWRGbGFncyk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZW5jb2RlZElu
bGluZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjplbmNvZGVkUGFja2VkSW5saW5l
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmVuY29kZWRFeHRlbmRlZENvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpkZWNvZGVkRmxhZ3MpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29sb3I6OmRlY29kZWRJbmxpbmVDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
ZGVjb2RlZFBhY2tlZElubGluZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpkZWNv
ZGVkRXh0ZW5kZWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6c2V0SW52YWxpZCk6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRhZ0FzU2VtYW50
aWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRhZ0FzVmFsaWQpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6YmxlbmRXaXRoV2hpdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yU2VyaWFsaXphdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemF0
aW9uRm9yQ1NTKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JIVE1MKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Vc2luZ0NvbG9yRnVuY3Rpb24pOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29s
b3I6OkNvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW06
CisgICAgICAgIChXZWJDb3JlOjpzZW1hbnRpY0NvbG9yRnJvbU5TQ29sb3IpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnN5c3RlbUNv
bG9yRnJvbUNTU1ZhbHVlSURTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzeXN0ZW1Db2xv
ckZyb21DU1NWYWx1ZUlEKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6c3lzdGVtQ29sb3IgY29uc3QpOgor
CiAyMDIxLTAyLTE4ICBLYXRlIENoZW5leSAgPGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgog
CiAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBub24gYXBwLWJvdW5kIHJlcXVlc3RzCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnMuY3BwCShyZXZpc2lvbiAyNzMxMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2Vy
L0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3OSw3ICs5
NzksNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRpYyBDb2xvCiAgICAgaWYg
KCFhbHBoYSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHJldHVybiBDb2xvclR5cGUgeyBj
bGFtcFRvPGZsb2F0PihjaGFubmVsc1swXSwgMC4wLCAxLjApLCBjbGFtcFRvPGZsb2F0PihjaGFu
bmVsc1sxXSwgMC4wLCAxLjApLCBjbGFtcFRvPGZsb2F0PihjaGFubmVsc1syXSwgMC4wLCAxLjAp
LCBzdGF0aWNfY2FzdDxmbG9hdD4oKmFscGhhKSB9OworICAgIHJldHVybiB7IENvbG9yVHlwZSB7
IGNsYW1wVG88ZmxvYXQ+KGNoYW5uZWxzWzBdLCAwLjAsIDEuMCksIGNsYW1wVG88ZmxvYXQ+KGNo
YW5uZWxzWzFdLCAwLjAsIDEuMCksIGNsYW1wVG88ZmxvYXQ+KGNoYW5uZWxzWzJdLCAwLjAsIDEu
MCksIHN0YXRpY19jYXN0PGZsb2F0PigqYWxwaGEpIH0sIENvbG9yOjpGbGFnczo6VXNlQ29sb3JG
dW5jdGlvblNlcmlhbGl6YXRpb24gfTsKIH0KIAogc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5j
dGlvbkZvckxhYlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncykKQEAgLTEwMTEs
NyArMTAxMSw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25Gb3JMYWJQYXIKIAog
ICAgIGF1dG8gbm9ybWFsaXplZExpZ2h0bmVzcyA9IHN0ZDo6bWF4KDAuMCwgY2hhbm5lbHNbMF0p
OwogCi0gICAgcmV0dXJuIExhYjxmbG9hdD4geyBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsaXpl
ZExpZ2h0bmVzcyksIHN0YXRpY19jYXN0PGZsb2F0PihjaGFubmVsc1sxXSksIHN0YXRpY19jYXN0
PGZsb2F0PihjaGFubmVsc1syXSksIHN0YXRpY19jYXN0PGZsb2F0PigqYWxwaGEpIH07CisgICAg
cmV0dXJuIHsgTGFiPGZsb2F0PiB7IHN0YXRpY19jYXN0PGZsb2F0Pihub3JtYWxpemVkTGlnaHRu
ZXNzKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNoYW5uZWxzWzFdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGNoYW5uZWxzWzJdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCphbHBoYSkgfSwgQ29sb3I6OkZsYWdz
OjpVc2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbiB9OwogfQogCiBzdGF0aWMgQ29sb3IgcGFy
c2VDb2xvckZ1bmN0aW9uRm9yWFlaUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdz
KQpAQCAtMTA0MSw3ICsxMDQxLDcgQEAgc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbkZv
clhZWlBhcgogICAgIGlmICghYWxwaGEpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1
cm4gWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDUwPiB7IHN0YXRpY19jYXN0PGZsb2F0PihjaGFu
bmVsc1swXSksIHN0YXRpY19jYXN0PGZsb2F0PihjaGFubmVsc1sxXSksIHN0YXRpY19jYXN0PGZs
b2F0PihjaGFubmVsc1syXSksIHN0YXRpY19jYXN0PGZsb2F0PigqYWxwaGEpIH07CisgICAgcmV0
dXJuIHsgWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDUwPiB7IHN0YXRpY19jYXN0PGZsb2F0Pihj
aGFubmVsc1swXSksIHN0YXRpY19jYXN0PGZsb2F0PihjaGFubmVsc1sxXSksIHN0YXRpY19jYXN0
PGZsb2F0PihjaGFubmVsc1syXSksIHN0YXRpY19jYXN0PGZsb2F0PigqYWxwaGEpIH0sIENvbG9y
OjpGbGFnczo6VXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24gfTsKIH0KIAogc3RhdGljIENv
bG9yIHBhcnNlQ29sb3JGdW5jdGlvblBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UpCkBAIC0xMDg0LDYgKzEwODQsNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9u
UGFyYW1ldGVyCiAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAK
KyAgICBBU1NFUlQoY29sb3IudXNlc0NvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKCkpOwogICAg
IHJldHVybiBjb2xvcjsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmNwcAkocmV2aXNpb24gMjczMTAyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCArMzcsMTAgQEAg
c3RhdGljIGNvbnN0ZXhwciBhdXRvIGxpZ2h0ZW5lZEJsYWNrID0gUwogc3RhdGljIGNvbnN0ZXhw
ciBhdXRvIGRhcmtlbmVkV2hpdGUgPSBTUkdCQTx1aW50OF90PiB7IDE3MSwgMTcxLCAxNzEgfTsK
IAogQ29sb3I6OkNvbG9yKGNvbnN0IENvbG9yJiBvdGhlcikKLSAgICA6IG1fY29sb3JEYXRhKG90
aGVyLm1fY29sb3JEYXRhKQorICAgIDogbV9jb2xvckFuZEZsYWdzKG90aGVyLm1fY29sb3JBbmRG
bGFncykKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICBtX2NvbG9yRGF0YS5leHRl
bmRlZENvbG9yLT5yZWYoKTsKKyAgICAgICAgYXNFeHRlbmRlZCgpLnJlZigpOwogfQogCiBDb2xv
cjo6Q29sb3IoQ29sb3ImJiBvdGhlcikKQEAgLTU0LDEyICs1NCwxMyBAQCBDb2xvciYgQ29sb3I6
Om9wZXJhdG9yPShjb25zdCBDb2xvciYgb3RoCiAgICAgICAgIHJldHVybiAqdGhpczsKIAogICAg
IGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAgIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmRl
cmVmKCk7CisgICAgICAgIGFzRXh0ZW5kZWQoKS5kZXJlZigpOwogCi0gICAgbV9jb2xvckRhdGEg
PSBvdGhlci5tX2NvbG9yRGF0YTsKKyAgICBtX2NvbG9yQW5kRmxhZ3MgPSBvdGhlci5tX2NvbG9y
QW5kRmxhZ3M7CiAKICAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICBtX2NvbG9yRGF0YS5l
eHRlbmRlZENvbG9yLT5yZWYoKTsKKyAgICAgICAgYXNFeHRlbmRlZCgpLnJlZigpOworCiAgICAg
cmV0dXJuICp0aGlzOwogfQogCkBAIC02OSwxMCArNzAsMTAgQEAgQ29sb3ImIENvbG9yOjpvcGVy
YXRvcj0oQ29sb3ImJiBvdGhlcikKICAgICAgICAgcmV0dXJuICp0aGlzOwogCiAgICAgaWYgKGlz
RXh0ZW5kZWQoKSkKLSAgICAgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+ZGVyZWYoKTsK
KyAgICAgICAgYXNFeHRlbmRlZCgpLmRlcmVmKCk7CiAKLSAgICBtX2NvbG9yRGF0YSA9IG90aGVy
Lm1fY29sb3JEYXRhOwotICAgIG90aGVyLm1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3Mg
PSBpbnZhbGlkSW5saW5lQ29sb3I7CisgICAgbV9jb2xvckFuZEZsYWdzID0gb3RoZXIubV9jb2xv
ckFuZEZsYWdzOworICAgIG90aGVyLm1fY29sb3JBbmRGbGFncyA9IGludmFsaWRDb2xvckFuZEZs
YWdzOwogCiAgICAgcmV0dXJuICp0aGlzOwogfQpAQCAtMTI0LDE2ICsxMjUsMTQgQEAgZmxvYXQg
Q29sb3I6Omx1bWluYW5jZSgpIGNvbnN0CiBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEoZmxv
YXQgYWxwaGEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhbGxPblVuZGVybHlpbmdUeXBlKFdURjo6
bWFrZVZpc2l0b3IoCi0gICAgICAgIFsmXSAoY29uc3QgU1JHQkE8dWludDhfdD4mIHVuZGVybHlp
bmdDb2xvcikgLT4gQ29sb3IgewotICAgICAgICAgICAgQ29sb3IgcmVzdWx0ID0gY29sb3JXaXRo
T3ZlcnJpZGVuQWxwaGEodW5kZXJseWluZ0NvbG9yLCBhbHBoYSk7CisgICAgICAgIFsmXSAoY29u
c3QgYXV0byYgdW5kZXJseWluZ0NvbG9yKSAtPiBDb2xvciB7CisgICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IGNvbG9yV2l0aE92ZXJyaWRlbkFscGhhKHVuZGVybHlpbmdDb2xvciwgYWxwaGEpOwog
CiAgICAgICAgICAgICAvLyBGSVhNRTogV2h5IGlzIHByZXNlcnZpbmcgdGhlIHNlbWFudGljIGJp
dCBkZXNpcmVkIGFuZC9vciBjb3JyZWN0IGhlcmU/CiAgICAgICAgICAgICBpZiAoaXNTZW1hbnRp
YygpKQotICAgICAgICAgICAgICAgIHJlc3VsdC50YWdBc1NlbWFudGljKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IGF1dG8mIHVu
ZGVybHlpbmdDb2xvcikgLT4gQ29sb3IgewotICAgICAgICAgICAgcmV0dXJuIGNvbG9yV2l0aE92
ZXJyaWRlbkFscGhhKHVuZGVybHlpbmdDb2xvciwgYWxwaGEpOworICAgICAgICAgICAgICAgIHJl
dHVybiB7IHJlc3VsdCwgRmxhZ3M6OlNlbWFudGljIH07CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHJldHVybiB7IHJlc3VsdCB9OwogICAgICAgICB9CiAgICAgKSk7CiB9CkBAIC0xNTcsOCAr
MTU2LDEwIEBAIENvbG9yIENvbG9yOjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKIHsKICAgICBpZiAo
aXNTZW1hbnRpYygpKQogICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICByZXR1cm4geyB0b1NS
R0JBTG9zc3k8dWludDhfdD4oKSwgU2VtYW50aWMgfTsKKyAgICAKKyAgICBpZiAoaXNFeHRlbmRl
ZCgpKQorICAgICAgICByZXR1cm4geyBhc0V4dGVuZGVkUmVmKCksIEZsYWdzOjpTZW1hbnRpYyB9
OworICAgIHJldHVybiB7IGFzSW5saW5lKCksIEZsYWdzOjpTZW1hbnRpYyB9OwogfQogCiBzdGQ6
OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0Pj4gQ29sb3I6OmNvbG9yU3Bh
Y2VBbmRDb21wb25lbnRzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjczMTAyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMxLDkgQEAKICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hlci5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KICNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKICNp
ZiBVU0UoQ0cpCiB0eXBlZGVmIHN0cnVjdCBDR0NvbG9yKiBDR0NvbG9yUmVmOwpAQCAtNjUsMjMg
KzY3LDMwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENvbG9yIHsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICBlbnVtIGNsYXNzIEZsYWdzIHsKKyAgICAg
ICAgU2VtYW50aWMgICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwKKyAgICAgICAgVXNl
Q29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24gICA9IDEgPDwgMSwKKyAgICB9OworCiAgICAgQ29s
b3IoKSA9IGRlZmF1bHQ7CiAKICAgICBDb2xvcihTUkdCQTx1aW50OF90Pik7CiAgICAgQ29sb3Io
T3B0aW9uYWw8U1JHQkE8dWludDhfdD4+KTsKIAotICAgIGVudW0gU2VtYW50aWNUYWcgeyBTZW1h
bnRpYyB9OwotICAgIENvbG9yKFNSR0JBPHVpbnQ4X3Q+LCBTZW1hbnRpY1RhZyk7Ci0gICAgQ29s
b3IoT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+LCBTZW1hbnRpY1RhZyk7Ci0KICAgICBDb2xvcihD
b2xvckNvbXBvbmVudHM8ZmxvYXQ+LCBDb2xvclNwYWNlKTsKLQogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxJc0NvbG9yVHlwZVdpdGhD
b21wb25lbnRUeXBlPENvbG9yVHlwZSwgZmxvYXQ+PiogPSBudWxscHRyPgogICAgIENvbG9yKGNv
bnN0IENvbG9yVHlwZSYpOwogCisgICAgQ29sb3IoU1JHQkE8dWludDhfdD4sIE9wdGlvblNldDxG
bGFncz4pOworICAgIENvbG9yKE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiwgT3B0aW9uU2V0PEZs
YWdzPik7CisKKyAgICBDb2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+LCBDb2xvclNwYWNlLCBP
cHRpb25TZXQ8RmxhZ3M+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8SXNDb2xvclR5cGVXaXRoQ29tcG9uZW50VHlwZTxDb2xvclR5
cGUsIGZsb2F0Pj4qID0gbnVsbHB0cj4KKyAgICBDb2xvcihjb25zdCBDb2xvclR5cGUmLCBPcHRp
b25TZXQ8RmxhZ3M+KTsKKwogICAgIGV4cGxpY2l0IENvbG9yKFdURjo6SGFzaFRhYmxlRW1wdHlW
YWx1ZVR5cGUpOwogICAgIGV4cGxpY2l0IENvbG9yKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVl
VHlwZSk7Ci0gICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgPT0gZGVsZXRlZEhhc2hWYWx1ZTsgfQor
ICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBmbGFncygp
LmNvbnRhaW5zKEFsbEZsYWdzOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpOyB9CiAKICAgICBXRUJD
T1JFX0VYUE9SVCBDb2xvcihjb25zdCBDb2xvciYpOwogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9y
KENvbG9yJiYpOwpAQCAtOTMsOCArMTAyLDkgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0OwogCi0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRl
ZCgpIHx8IChtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzICYgdmFsaWRJbmxpbmVDb2xv
ckJpdCk7IH0KLSAgICBib29sIGlzU2VtYW50aWMoKSBjb25zdCB7IHJldHVybiBpc0lubGluZSgp
ICYmIChtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzICYgaXNTZW1hbnRpY0lubGluZUNv
bG9yQml0KTsgfQorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworICAgIGJvb2wgaXNTZW1hbnRp
YygpIGNvbnN0OworICAgIGJvb2wgdXNlc0NvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKCkgY29u
c3Q7CiAKICAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8g
YXNFeHRlbmRlZCgpLmFscGhhKCkgPT0gMS4wIDogYXNJbmxpbmUoKS5hbHBoYSA9PSAyNTU7IH0K
ICAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0
ZW5kZWQoKS5hbHBoYSgpID4gMC4wIDogYXNJbmxpbmUoKS5hbHBoYSA+IDA7IH0KQEAgLTE0MCw3
ICsxNTAsNyBAQCBwdWJsaWM6CiAKICNpZiBVU0UoQ0cpCiAgICAgV0VCQ09SRV9FWFBPUlQgQ29s
b3IoQ0dDb2xvclJlZik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ0dDb2xvclJlZiwgU2Vt
YW50aWNUYWcpOworICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKENHQ29sb3JSZWYsIE9wdGlvblNl
dDxGbGFncz4pOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pCkBAIC0xNjQsOCArMTc0LDgg
QEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBkYXJrR3JlZW4gPSBTUkdCQTx1
aW50OF90PiB7IDAsIDEyOCwgMCB9OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBvcmFuZ2Ug
PSBTUkdCQTx1aW50OF90PiB7IDI1NSwgMTI4LCAwIH07CiAKLSAgICBib29sIGlzRXh0ZW5kZWQo
KSBjb25zdCB7IHJldHVybiAhKG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgJiBpbnZh
bGlkSW5saW5lQ29sb3IpOyB9Ci0gICAgYm9vbCBpc0lubGluZSgpIGNvbnN0IHsgcmV0dXJuICFp
c0V4dGVuZGVkKCk7IH0KKyAgICBib29sIGlzRXh0ZW5kZWQoKSBjb25zdDsKKyAgICBib29sIGlz
SW5saW5lKCkgY29uc3Q7CiAKICAgICBjb25zdCBFeHRlbmRlZENvbG9yJiBhc0V4dGVuZGVkKCkg
Y29uc3Q7CiAgICAgU1JHQkE8dWludDhfdD4gYXNJbmxpbmUoKSBjb25zdDsKQEAgLTE3NCw2ICsx
ODQsNyBAQCBwdWJsaWM6CiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2xvciYg
YSwgY29uc3QgQ29sb3ImIGIpOwogICAgIGZyaWVuZCBib29sIGVxdWFsSWdub3JpbmdTZW1hbnRp
Y0NvbG9yKGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYik7CiAgICAgZnJpZW5kIGJvb2wg
ZXh0ZW5kZWRDb2xvcnNFcXVhbChjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7CisgICAgZnJp
ZW5kIGJvb2wgZXh0ZW5kZWRDb2xvcnNFcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcihjb25zdCBD
b2xvciYsIGNvbnN0IENvbG9yJik7CiAKICAgICBzdGF0aWMgYm9vbCBpc0JsYWNrQ29sb3IoY29u
c3QgQ29sb3ImKTsKICAgICBzdGF0aWMgYm9vbCBpc1doaXRlQ29sb3IoY29uc3QgQ29sb3ImKTsK
QEAgLTE4MiwzMCArMTkzLDQ3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGF0aWMgT3B0aW9uYWw8Q29sb3I+IGRlY29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6Ci0g
ICAgQ29sb3IoUmVmPEV4dGVuZGVkQ29sb3I+JiYpOworICAgIENvbG9yKFJlZjxFeHRlbmRlZENv
bG9yPiYmLCBPcHRpb25TZXQ8RmxhZ3M+ID0geyB9KTsKIAotICAgIHZvaWQgc2V0Q29sb3IoU1JH
QkE8dWludDhfdD4pOwotICAgIHZvaWQgc2V0RXh0ZW5kZWRDb2xvcihSZWY8RXh0ZW5kZWRDb2xv
cj4mJik7CisgICAgZW51bSBjbGFzcyBBbGxGbGFncyB7CisgICAgICAgIFNlbWFudGljICAgICAg
ICAgICAgICAgICAgICAgICAgPSAxIDw8IDAsCisgICAgICAgIFVzZUNvbG9yRnVuY3Rpb25TZXJp
YWxpemF0aW9uICAgPSAxIDw8IDEsCisgICAgICAgIFZhbGlkICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPSAxIDw8IDIsCisgICAgICAgIEV4dGVuZGVkICAgICAgICAgICAgICAgICAgICAgICAg
PSAxIDw8IDMsCisgICAgICAgIEhhc2hUYWJsZUVtcHR5VmFsdWUgICAgICAgICAgICAgPSAxIDw8
IDQsCisgICAgICAgIEhhc2hUYWJsZURlbGV0ZWRWYWx1ZSAgICAgICAgICAgPSAxIDw8IDUsCisg
ICAgfTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHVuc2lnbmVkPihGbGFnczo6U2Vt
YW50aWMpID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihBbGxGbGFnczo6U2VtYW50aWMpKTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHVuc2lnbmVkPihGbGFnczo6VXNlQ29sb3JGdW5j
dGlvblNlcmlhbGl6YXRpb24pID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihBbGxGbGFnczo6VXNl
Q29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pKTsKKyAgICBzdGF0aWMgT3B0aW9uU2V0PEFsbEZs
YWdzPiB0b0FsbEZsYWdzKE9wdGlvblNldDxGbGFncz4gZmxhZ3MpIHsgcmV0dXJuIE9wdGlvblNl
dDxBbGxGbGFncz46OmZyb21SYXcoZmxhZ3MudG9SYXcoKSk7IH0KKworICAgIE9wdGlvblNldDxB
bGxGbGFncz4gZmxhZ3MoKSBjb25zdDsKKworICAgIHZvaWQgc2V0Q29sb3IoU1JHQkE8dWludDhf
dD4sIE9wdGlvblNldDxBbGxGbGFncz4gPSB7IH0pOworICAgIHZvaWQgc2V0RXh0ZW5kZWRDb2xv
cihSZWY8RXh0ZW5kZWRDb2xvcj4mJiwgT3B0aW9uU2V0PEFsbEZsYWdzPiA9IHsgfSk7CisKKyAg
ICBQYWNrZWRDb2xvcjo6UkdCQSBhc1BhY2tlZElubGluZSgpIGNvbnN0OworICAgIFJlZjxFeHRl
bmRlZENvbG9yPiBhc0V4dGVuZGVkUmVmKCkgY29uc3Q7CisKKyNpZiBDUFUoQUREUkVTUzY0KQor
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TnVtYmVyT2ZCaXRzSW5Qb2ludGVyID0g
NDg7CisjZWxzZQorICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TnVtYmVyT2ZCaXRz
SW5Qb2ludGVyID0gMzI7CisjZW5kaWYKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGNv
bG9yVmFsdWVNYXNrID0gKDFVTEwgPDwgbWF4TnVtYmVyT2ZCaXRzSW5Qb2ludGVyKSAtIDE7CiAK
LSAgICB2b2lkIHRhZ0FzU2VtYW50aWMoKSB7IG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxh
Z3MgfD0gaXNTZW1hbnRpY0lubGluZUNvbG9yQml0OyB9Ci0gICAgdm9pZCB0YWdBc1ZhbGlkKCkg
eyBtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzIHw9IHZhbGlkSW5saW5lQ29sb3I7IH0K
KyAgICBzdGF0aWMgdWludDY0X3QgZW5jb2RlZEZsYWdzKE9wdGlvblNldDxBbGxGbGFncz4pOwor
ICAgIHN0YXRpYyB1aW50NjRfdCBlbmNvZGVkSW5saW5lQ29sb3IoU1JHQkE8dWludDhfdD4pOwor
ICAgIHN0YXRpYyB1aW50NjRfdCBlbmNvZGVkUGFja2VkSW5saW5lQ29sb3IoUGFja2VkQ29sb3I6
OlJHQkEpOworICAgIHN0YXRpYyB1aW50NjRfdCBlbmNvZGVkRXh0ZW5kZWRDb2xvcihSZWY8RXh0
ZW5kZWRDb2xvcj4mJik7CisKKyAgICBzdGF0aWMgT3B0aW9uU2V0PEFsbEZsYWdzPiBkZWNvZGVk
RmxhZ3ModWludDY0X3QpOworICAgIHN0YXRpYyBTUkdCQTx1aW50OF90PiBkZWNvZGVkSW5saW5l
Q29sb3IodWludDY0X3QpOworICAgIHN0YXRpYyBQYWNrZWRDb2xvcjo6UkdCQSBkZWNvZGVkUGFj
a2VkSW5saW5lQ29sb3IodWludDY0X3QpOworICAgIHN0YXRpYyBFeHRlbmRlZENvbG9yJiBkZWNv
ZGVkRXh0ZW5kZWRDb2xvcih1aW50NjRfdCk7CiAKLSAgICAvLyAweF9fX19fX18wMCBpcyBhbiBF
eHRlbmRlZENvbG9yIHBvaW50ZXIuCi0gICAgLy8gMHhfX19fX19fMDEgaXMgYW4gaW52YWxpZCBp
bmxpbmUgY29sb3IuCi0gICAgLy8gMHhfX19fX19fMTEgaXMgYSB2YWxpZCBpbmxpbmUgY29sb3Iu
Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGV4dGVuZGVkQ29sb3IgPSAweDA7Ci0gICAgc3Rh
dGljIGNvbnN0IHVpbnQ2NF90IGludmFsaWRJbmxpbmVDb2xvciA9IDB4MTsKLSAgICBzdGF0aWMg
Y29uc3QgdWludDY0X3QgdmFsaWRJbmxpbmVDb2xvckJpdCA9IDB4MjsKLSAgICBzdGF0aWMgY29u
c3QgdWludDY0X3QgdmFsaWRJbmxpbmVDb2xvciA9IDB4MzsKLSAgICBzdGF0aWMgY29uc3QgdWlu
dDY0X3QgaXNTZW1hbnRpY0lubGluZUNvbG9yQml0ID0gMHg0OwotCi0gICAgc3RhdGljIGNvbnN0
IHVpbnQ2NF90IGRlbGV0ZWRIYXNoVmFsdWUgPSAweEZGRkZGRkZGRkZGRkZGRkQ7Ci0gICAgc3Rh
dGljIGNvbnN0IHVpbnQ2NF90IGVtcHR5SGFzaFZhbHVlID0gMHhGRkZGRkZGRkZGRkZGRkZCOwot
Ci0gICAgdW5pb24gewotICAgICAgICB1aW50NjRfdCBpbmxpbmVDb2xvckFuZEZsYWdzIHsgaW52
YWxpZElubGluZUNvbG9yIH07Ci0gICAgICAgIEV4dGVuZGVkQ29sb3IqIGV4dGVuZGVkQ29sb3I7
Ci0gICAgfSBtX2NvbG9yRGF0YTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGludmFs
aWRDb2xvckFuZEZsYWdzID0gMDsKKyAgICB1aW50NjRfdCBtX2NvbG9yQW5kRmxhZ3MgeyBpbnZh
bGlkQ29sb3JBbmRGbGFncyB9OwogfTsKIAogYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiwg
Y29uc3QgQ29sb3ImKTsKQEAgLTIxMyw2ICsyNDEsNyBAQCBib29sIG9wZXJhdG9yIT0oY29uc3Qg
Q29sb3ImLCBjb25zdCBDb2xvCiAKIC8vIE9uZSBvciBib3RoIG11c3QgYmUgZXh0ZW5kZWQgY29s
b3JzLgogYm9vbCBleHRlbmRlZENvbG9yc0VxdWFsKGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3Im
KTsKK2Jvb2wgZXh0ZW5kZWRDb2xvcnNFcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcihjb25zdCBD
b2xvciYsIGNvbnN0IENvbG9yJik7CiAKICNpZiBVU0UoQ0cpCiBXRUJDT1JFX0VYUE9SVCBDR0Nv
bG9yUmVmIGNhY2hlZENHQ29sb3IoY29uc3QgQ29sb3ImKTsKQEAgLTIyNCw4ICsyNTMsNyBAQCBp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiBhLCBjCiB7CiAgICAgaWYgKGEuaXNF
eHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgpKQogICAgICAgICByZXR1cm4gZXh0ZW5kZWRDb2xv
cnNFcXVhbChhLCBiKTsKLQotICAgIHJldHVybiBhLm1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5k
RmxhZ3MgPT0gYi5tX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzOworICAgIHJldHVybiBh
Lm1fY29sb3JBbmRGbGFncyA9PSBiLm1fY29sb3JBbmRGbGFnczsKIH0KIAogaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCkBAIC0yMzYsNyArMjY0
LDE5IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29sb3ImIGEsIGMKIGlubGluZSBi
b29sIGV4dGVuZGVkQ29sb3JzRXF1YWwoY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKQog
ewogICAgIGlmIChhLmlzRXh0ZW5kZWQoKSAmJiBiLmlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0
dXJuIGEuYXNFeHRlbmRlZCgpID09IGIuYXNFeHRlbmRlZCgpOworICAgICAgICByZXR1cm4gYS5h
c0V4dGVuZGVkKCkgPT0gYi5hc0V4dGVuZGVkKCkgJiYgYS5mbGFncygpID09IGIuZmxhZ3MoKTsK
KworICAgIEFTU0VSVChhLmlzRXh0ZW5kZWQoKSB8fCBiLmlzRXh0ZW5kZWQoKSk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitpbmxpbmUgYm9vbCBleHRlbmRlZENvbG9yc0VxdWFsSWdub3JpbmdT
ZW1hbnRpY0NvbG9yKGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYikKK3sKKyAgICBpZiAo
YS5pc0V4dGVuZGVkKCkgJiYgYi5pc0V4dGVuZGVkKCkpIHsKKyAgICAgICAgYXV0byBhRmxhZ3Mg
PSBhLmZsYWdzKCkgLSBDb2xvcjo6QWxsRmxhZ3M6OlNlbWFudGljOworICAgICAgICBhdXRvIGJG
bGFncyA9IGIuZmxhZ3MoKSAtIENvbG9yOjpBbGxGbGFnczo6U2VtYW50aWM7CisgICAgICAgIHJl
dHVybiBhLmFzRXh0ZW5kZWQoKSA9PSBiLmFzRXh0ZW5kZWQoKSAmJiBhRmxhZ3MgPT0gYkZsYWdz
OworICAgIH0KIAogICAgIEFTU0VSVChhLmlzRXh0ZW5kZWQoKSB8fCBiLmlzRXh0ZW5kZWQoKSk7
CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjQ1LDggKzI4NSwxMSBAQCBpbmxpbmUgYm9vbCBleHRl
bmRlZENvbG9yc0VxdWFsKGNvbnN0IENvCiBpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nU2VtYW50
aWNDb2xvcihjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCiB7CiAgICAgaWYgKGEuaXNF
eHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gZXh0ZW5kZWRDb2xv
cnNFcXVhbChhLCBiKTsKLSAgICByZXR1cm4gKGEubV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRG
bGFncyAmIH5Db2xvcjo6aXNTZW1hbnRpY0lubGluZUNvbG9yQml0KSA9PSAoYi5tX2NvbG9yRGF0
YS5pbmxpbmVDb2xvckFuZEZsYWdzICYgfkNvbG9yOjppc1NlbWFudGljSW5saW5lQ29sb3JCaXQp
OworICAgICAgICByZXR1cm4gZXh0ZW5kZWRDb2xvcnNFcXVhbElnbm9yaW5nU2VtYW50aWNDb2xv
cihhLCBiKTsKKworICAgIGF1dG8gYUZsYWdzID0gYS5mbGFncygpIC0gQ29sb3I6OkFsbEZsYWdz
OjpTZW1hbnRpYzsKKyAgICBhdXRvIGJGbGFncyA9IGIuZmxhZ3MoKSAtIENvbG9yOjpBbGxGbGFn
czo6U2VtYW50aWM7CisgICAgcmV0dXJuIGEuYXNQYWNrZWRJbmxpbmUoKS52YWx1ZSA9PSBiLmFz
UGFja2VkSW5saW5lKCkudmFsdWUgJiYgYUZsYWdzID09IGJGbGFnczsKIH0KIAogaW5saW5lIENv
bG9yOjpDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvcikKQEAgLTI2MCwxOCArMzAzLDE1IEBAIGlu
bGluZSBDb2xvcjo6Q29sb3IoT3B0aW9uYWw8U1JHQkE8dWludDgKICAgICAgICAgc2V0Q29sb3Io
KmNvbG9yKTsKIH0KIAotaW5saW5lIENvbG9yOjpDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvciwg
U2VtYW50aWNUYWcpCitpbmxpbmUgQ29sb3I6OkNvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yLCBP
cHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQogewotICAgIHNldENvbG9yKGNvbG9yKTsKLSAgICB0YWdB
c1NlbWFudGljKCk7CisgICAgc2V0Q29sb3IoY29sb3IsIHRvQWxsRmxhZ3MoZmxhZ3MpKTsKIH0K
IAotaW5saW5lIENvbG9yOjpDb2xvcihPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gY29sb3IsIFNl
bWFudGljVGFnKQoraW5saW5lIENvbG9yOjpDb2xvcihPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4g
Y29sb3IsIE9wdGlvblNldDxGbGFncz4gZmxhZ3MpCiB7Ci0gICAgaWYgKGNvbG9yKSB7Ci0gICAg
ICAgIHNldENvbG9yKCpjb2xvcik7Ci0gICAgICAgIHRhZ0FzU2VtYW50aWMoKTsKLSAgICB9Cisg
ICAgaWYgKGNvbG9yKQorICAgICAgICBzZXRDb2xvcigqY29sb3IsIHRvQWxsRmxhZ3MoZmxhZ3Mp
KTsKIH0KIAogaW5saW5lIENvbG9yOjpDb2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGNvbXBv
bmVudHMsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKQEAgLTI3OSw0NSArMzE5LDY0IEBAIGlubGlu
ZSBDb2xvcjo6Q29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2EKICAgICBzZXRFeHRlbmRlZENvbG9y
KEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShjb21wb25lbnRzLCBjb2xvclNwYWNlKSk7CiB9CiAKK2lu
bGluZSBDb2xvcjo6Q29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0PiBjb21wb25lbnRzLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIE9wdGlvblNldDxGbGFncz4gZmxhZ3MpCit7CisgICAgc2V0RXh0
ZW5kZWRDb2xvcihFeHRlbmRlZENvbG9yOjpjcmVhdGUoY29tcG9uZW50cywgY29sb3JTcGFjZSks
IHRvQWxsRmxhZ3MoZmxhZ3MpKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PElzQ29sb3JUeXBlV2l0aENvbXBvbmVudFR5cGU8Q29s
b3JUeXBlLCBmbG9hdD4+Kj4KIGlubGluZSBDb2xvcjo6Q29sb3IoY29uc3QgQ29sb3JUeXBlJiBj
b2xvcikKIHsKICAgICBzZXRFeHRlbmRlZENvbG9yKEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShjb2xv
cikpOwogfQogCi1pbmxpbmUgQ29sb3I6OkNvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVu
ZGVkQ29sb3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmX3Q8SXNDb2xvclR5cGVXaXRoQ29tcG9uZW50VHlwZTxDb2xvclR5cGUsIGZsb2F0Pj4q
PgoraW5saW5lIENvbG9yOjpDb2xvcihjb25zdCBDb2xvclR5cGUmIGNvbG9yLCBPcHRpb25TZXQ8
RmxhZ3M+IGZsYWdzKQogewotICAgIHNldEV4dGVuZGVkQ29sb3IoV1RGTW92ZShleHRlbmRlZENv
bG9yKSk7CisgICAgc2V0RXh0ZW5kZWRDb2xvcihFeHRlbmRlZENvbG9yOjpjcmVhdGUoY29sb3Ip
LCB0b0FsbEZsYWdzKGZsYWdzKSk7Cit9CisKK2lubGluZSBDb2xvcjo6Q29sb3IoUmVmPEV4dGVu
ZGVkQ29sb3I+JiYgZXh0ZW5kZWRDb2xvciwgT3B0aW9uU2V0PEZsYWdzPiBmbGFncykKK3sKKyAg
ICBzZXRFeHRlbmRlZENvbG9yKFdURk1vdmUoZXh0ZW5kZWRDb2xvciksIHRvQWxsRmxhZ3MoZmxh
Z3MpKTsKIH0KIAogaW5saW5lIENvbG9yOjpDb2xvcihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1
ZVR5cGUpCiB7Ci0gICAgc3RhdGljX2Fzc2VydChkZWxldGVkSGFzaFZhbHVlICYgaW52YWxpZElu
bGluZUNvbG9yLCAiQ29sb3IncyBkZWxldGVkIGhhc2ggdmFsdWUgbXVzdCBub3QgbG9vayBsaWtl
IGFuIEV4dGVuZGVkQ29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KCEoZGVsZXRlZEhhc2hWYWx1
ZSAmIHZhbGlkSW5saW5lQ29sb3JCaXQpLCAiQ29sb3IncyBkZWxldGVkIGhhc2ggdmFsdWUgbXVz
dCBub3QgbG9vayBsaWtlIGEgdmFsaWQgSW5saW5lQ29sb3IiKTsKLSAgICBzdGF0aWNfYXNzZXJ0
KGRlbGV0ZWRIYXNoVmFsdWUgJiAoMSA8PCA0KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVl
IG11c3QgaGF2ZSBzb21lIGJpdHMgc2V0IHRoYXQgYW4gSW5saW5lQ29sb3Igd291bGRuJ3QgaGF2
ZSIpOwotICAgIG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgPSBkZWxldGVkSGFzaFZh
bHVlOwotICAgIEFTU0VSVCghaXNFeHRlbmRlZCgpKTsKKyAgICBtX2NvbG9yQW5kRmxhZ3MgPSBl
bmNvZGVkRmxhZ3MoeyBBbGxGbGFnczo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlIH0pOwogfQogCiBp
bmxpbmUgQ29sb3I6OkNvbG9yKFdURjo6SGFzaFRhYmxlRW1wdHlWYWx1ZVR5cGUpCiB7Ci0gICAg
c3RhdGljX2Fzc2VydChlbXB0eUhhc2hWYWx1ZSAmIGludmFsaWRJbmxpbmVDb2xvciwgIkNvbG9y
J3MgZW1wdHkgaGFzaCB2YWx1ZSBtdXN0IG5vdCBsb29rIGxpa2UgYW4gRXh0ZW5kZWRDb2xvciIp
OwotICAgIHN0YXRpY19hc3NlcnQoZW1wdHlIYXNoVmFsdWUgJiAoMSA8PCA0KSwgIkNvbG9yJ3Mg
ZGVsZXRlZCBoYXNoIHZhbHVlIG11c3QgaGF2ZSBzb21lIGJpdHMgc2V0IHRoYXQgYW4gSW5saW5l
Q29sb3Igd291bGRuJ3QgaGF2ZSIpOwotICAgIG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxh
Z3MgPSBlbXB0eUhhc2hWYWx1ZTsKLSAgICBBU1NFUlQoIWlzRXh0ZW5kZWQoKSk7CisgICAgbV9j
b2xvckFuZEZsYWdzID0gZW5jb2RlZEZsYWdzKHsgQWxsRmxhZ3M6Okhhc2hUYWJsZUVtcHR5VmFs
dWUgfSk7CiB9CiAKIGlubGluZSBDb2xvcjo6fkNvbG9yKCkKIHsKICAgICBpZiAoaXNFeHRlbmRl
ZCgpKQotICAgICAgICBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5kZXJlZigpOworICAgICAg
ICBhc0V4dGVuZGVkKCkuZGVyZWYoKTsKIH0KIAogaW5saW5lIHVuc2lnbmVkIENvbG9yOjpoYXNo
KCkgY29uc3QKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gY29tcHV0
ZUhhc2goYXNFeHRlbmRlZCgpLmNvbXBvbmVudHMoKSwgYXNFeHRlbmRlZCgpLmNvbG9yU3BhY2Uo
KSk7Ci0gICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZs
YWdzKTsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVIYXNoKGFzRXh0ZW5kZWQoKS5jb21wb25lbnRz
KCksIGFzRXh0ZW5kZWQoKS5jb2xvclNwYWNlKCksIGZsYWdzKCkudG9SYXcoKSk7CisgICAgcmV0
dXJuIGNvbXB1dGVIYXNoKGFzUGFja2VkSW5saW5lKCkudmFsdWUsIGZsYWdzKCkudG9SYXcoKSk7
Cit9CisKK2lubGluZSBib29sIENvbG9yOjppc1ZhbGlkKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
ZmxhZ3MoKS5jb250YWlucyhBbGxGbGFnczo6VmFsaWQpOworfQorCitpbmxpbmUgYm9vbCBDb2xv
cjo6aXNTZW1hbnRpYygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZsYWdzKCkuY29udGFpbnMoQWxs
RmxhZ3M6OlNlbWFudGljKTsKK30KKworaW5saW5lIGJvb2wgQ29sb3I6OnVzZXNDb2xvckZ1bmN0
aW9uU2VyaWFsaXphdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZsYWdzKCkuY29udGFpbnMo
QWxsRmxhZ3M6OlVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gZGVjbHR5cGUoYXV0bykgQ29sb3I6OmNhbGxPblVuZGVybHlpbmdU
eXBlKEZ1bmN0b3ImJiBmdW5jdG9yKSBjb25zdApAQCAtMzU0LDMwICs0MTMsMTAwIEBAIGlubGlu
ZSBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEoT3B0aW8KICAgICByZXR1cm4gYWxwaGEgPyBj
b2xvcldpdGhBbHBoYShhbHBoYS52YWx1ZSgpKSA6ICp0aGlzOwogfQogCitpbmxpbmUgT3B0aW9u
U2V0PENvbG9yOjpBbGxGbGFncz4gQ29sb3I6OmZsYWdzKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
ZGVjb2RlZEZsYWdzKG1fY29sb3JBbmRGbGFncyk7Cit9CisKK2lubGluZSBib29sIENvbG9yOjpp
c0V4dGVuZGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmxhZ3MoKS5jb250YWlucyhBbGxGbGFn
czo6RXh0ZW5kZWQpOworfQorCitpbmxpbmUgYm9vbCBDb2xvcjo6aXNJbmxpbmUoKSBjb25zdAor
eworICAgIHJldHVybiAhZmxhZ3MoKS5jb250YWlucyhBbGxGbGFnczo6RXh0ZW5kZWQpOworfQor
CiBpbmxpbmUgY29uc3QgRXh0ZW5kZWRDb2xvciYgQ29sb3I6OmFzRXh0ZW5kZWQoKSBjb25zdAog
ewogICAgIEFTU0VSVChpc0V4dGVuZGVkKCkpOwotICAgIHJldHVybiAqbV9jb2xvckRhdGEuZXh0
ZW5kZWRDb2xvcjsKKyAgICByZXR1cm4gZGVjb2RlZEV4dGVuZGVkQ29sb3IobV9jb2xvckFuZEZs
YWdzKTsKK30KKworaW5saW5lIFJlZjxFeHRlbmRlZENvbG9yPiBDb2xvcjo6YXNFeHRlbmRlZFJl
ZigpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzRXh0ZW5kZWQoKSk7CisgICAgcmV0dXJuIGRlY29k
ZWRFeHRlbmRlZENvbG9yKG1fY29sb3JBbmRGbGFncyk7CiB9CiAKIGlubGluZSBTUkdCQTx1aW50
OF90PiBDb2xvcjo6YXNJbmxpbmUoKSBjb25zdAogewogICAgIEFTU0VSVChpc0lubGluZSgpKTsK
LSAgICByZXR1cm4gYXNTUkdCQShQYWNrZWRDb2xvcjo6UkdCQSB7IHN0YXRpY19jYXN0PHVpbnQz
Ml90PihtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzID4+IDMyKSB9KTsKKyAgICByZXR1
cm4gYXNTUkdCQShhc1BhY2tlZElubGluZSgpKTsKK30KKworaW5saW5lIFBhY2tlZENvbG9yOjpS
R0JBIENvbG9yOjphc1BhY2tlZElubGluZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzSW5saW5l
KCkpOworICAgIHJldHVybiBkZWNvZGVkUGFja2VkSW5saW5lQ29sb3IobV9jb2xvckFuZEZsYWdz
KTsKK30KKworaW5saW5lIHVpbnQ2NF90IENvbG9yOjplbmNvZGVkRmxhZ3MoT3B0aW9uU2V0PEFs
bEZsYWdzPiBmbGFncykKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGZsYWdz
LnRvUmF3KCkpIDw8IG1heE51bWJlck9mQml0c0luUG9pbnRlcjsKK30KKworaW5saW5lIHVpbnQ2
NF90IENvbG9yOjplbmNvZGVkSW5saW5lQ29sb3IoU1JHQkE8dWludDhfdD4gY29sb3IpCit7Cisg
ICAgcmV0dXJuIGVuY29kZWRQYWNrZWRJbmxpbmVDb2xvcihQYWNrZWRDb2xvcjo6UkdCQSB7IGNv
bG9yIH0pOworfQorCitpbmxpbmUgdWludDY0X3QgQ29sb3I6OmVuY29kZWRQYWNrZWRJbmxpbmVD
b2xvcihQYWNrZWRDb2xvcjo6UkdCQSBjb2xvcikKK3sKKyAgICByZXR1cm4gY29sb3IudmFsdWU7
Cit9CisKK2lubGluZSB1aW50NjRfdCBDb2xvcjo6ZW5jb2RlZEV4dGVuZGVkQ29sb3IoUmVmPEV4
dGVuZGVkQ29sb3I+JiYgZXh0ZW5kZWRDb2xvcikKK3sKKyNpZiBDUFUoQUREUkVTUzY0KQorICAg
IHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KCZleHRlbmRlZENvbG9yLmxlYWtSZWYoKSk7
CisjZWxzZQorICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KCZleHRlbmRlZENvbG9y
LmxlYWtSZWYoKSk7CisjZW5kaWYKK30KKworaW5saW5lIE9wdGlvblNldDxDb2xvcjo6QWxsRmxh
Z3M+IENvbG9yOjpkZWNvZGVkRmxhZ3ModWludDY0X3QgdmFsdWUpCit7CisgICAgcmV0dXJuIE9w
dGlvblNldDxDb2xvcjo6QWxsRmxhZ3M+Ojpmcm9tUmF3KHN0YXRpY19jYXN0PHVuc2lnbmVkPih2
YWx1ZSA+PiBtYXhOdW1iZXJPZkJpdHNJblBvaW50ZXIpKTsKK30KKworaW5saW5lIFNSR0JBPHVp
bnQ4X3Q+IENvbG9yOjpkZWNvZGVkSW5saW5lQ29sb3IodWludDY0X3QgdmFsdWUpCit7CisgICAg
cmV0dXJuIGFzU1JHQkEoZGVjb2RlZFBhY2tlZElubGluZUNvbG9yKHZhbHVlKSk7CiB9CiAKLWlu
bGluZSB2b2lkIENvbG9yOjpzZXRDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvcikKK2lubGluZSBQ
YWNrZWRDb2xvcjo6UkdCQSBDb2xvcjo6ZGVjb2RlZFBhY2tlZElubGluZUNvbG9yKHVpbnQ2NF90
IHZhbHVlKQogewotICAgIG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgPSBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oUGFja2VkQ29sb3I6OlJHQkEgeyBjb2xvciB9LnZhbHVlKSA8PCAzMjsK
LSAgICB0YWdBc1ZhbGlkKCk7CisgICAgcmV0dXJuIFBhY2tlZENvbG9yOjpSR0JBIHsgc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KHZhbHVlICYgY29sb3JWYWx1ZU1hc2spIH07CiB9CiAKLWlubGluZSB2
b2lkIENvbG9yOjpzZXRFeHRlbmRlZENvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVuZGVk
Q29sb3IpCitpbmxpbmUgRXh0ZW5kZWRDb2xvciYgQ29sb3I6OmRlY29kZWRFeHRlbmRlZENvbG9y
KHVpbnQ2NF90IHZhbHVlKQogewotICAgIC8vIFplcm8gdGhlIHVuaW9uLCBqdXN0IGluIGNhc2Ug
YSAzMi1iaXQgc3lzdGVtIG9ubHkgYXNzaWducyB0aGUKLSAgICAvLyB0b3AgMzIgYml0cyB3aGVu
IGNvcHlpbmcgdGhlIEV4dGVuZGVkQ29sb3IgcG9pbnRlciBiZWxvdy4KLSAgICBtX2NvbG9yRGF0
YS5pbmxpbmVDb2xvckFuZEZsYWdzID0gMDsKLSAgICBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9y
ID0gJmV4dGVuZGVkQ29sb3IubGVha1JlZigpOworICAgIHJldHVybiAqYml0d2lzZV9jYXN0PEV4
dGVuZGVkQ29sb3IqPih2YWx1ZSAmIGNvbG9yVmFsdWVNYXNrKTsKK30KKworaW5saW5lIHZvaWQg
Q29sb3I6OnNldENvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yLCBPcHRpb25TZXQ8QWxsRmxhZ3M+
IGZsYWdzKQoreworICAgIGZsYWdzLmFkZCh7IEFsbEZsYWdzOjpWYWxpZCB9KTsKKyAgICBtX2Nv
bG9yQW5kRmxhZ3MgPSBlbmNvZGVkSW5saW5lQ29sb3IoY29sb3IpIHwgZW5jb2RlZEZsYWdzKGZs
YWdzKTsKKyAgICBBU1NFUlQoaXNJbmxpbmUoKSk7Cit9CisKK2lubGluZSB2b2lkIENvbG9yOjpz
ZXRFeHRlbmRlZENvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmIGNvbG9yLCBPcHRpb25TZXQ8QWxs
RmxhZ3M+IGZsYWdzKQoreworICAgIGZsYWdzLmFkZCh7IEFsbEZsYWdzOjpWYWxpZCwgQWxsRmxh
Z3M6OkV4dGVuZGVkIH0pOworICAgIG1fY29sb3JBbmRGbGFncyA9IGVuY29kZWRFeHRlbmRlZENv
bG9yKFdURk1vdmUoY29sb3IpKSB8IGVuY29kZWRGbGFncyhmbGFncyk7CiAgICAgQVNTRVJUKGlz
RXh0ZW5kZWQoKSk7CiB9CiAKQEAgLTM5Nyw2ICs1MjYsMTUgQEAgaW5saW5lIGJvb2wgQ29sb3I6
OmlzV2hpdGVDb2xvcihjb25zdCBDbwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIENv
bG9yOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKKyAgICBpZiAoIWlzVmFsaWQo
KSkgeworICAgICAgICBlbmNvZGVyIDw8IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGVuY29kZXIgPDwgdHJ1ZTsKKworICAgIGVuY29kZXIgPDwgZmxhZ3MoKS5jb250YWlucyhB
bGxGbGFnczo6U2VtYW50aWMpOworICAgIGVuY29kZXIgPDwgZmxhZ3MoKS5jb250YWlucyhBbGxG
bGFnczo6VXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pOworCiAgICAgaWYgKGlzRXh0ZW5k
ZWQoKSkgewogICAgICAgICBlbmNvZGVyIDw8IHRydWU7CiAKQEAgLTQwOSwyMiArNTQ3LDM2IEBA
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgQ29sb3I6OmVuY28KICAgICAgICAgZW5jb2Rl
ciA8PCBleHRlbmRlZENvbG9yLmNvbG9yU3BhY2UoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LQogICAgIGVuY29kZXIgPDwgZmFsc2U7CiAKLSAgICBpZiAoIWlzVmFsaWQoKSkgewotICAgICAg
ICBlbmNvZGVyIDw8IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIGVuY29kZSB3aGV0aGVyIHRoZSBjb2xvciBpcyBzZW1hbnRpYy4KLQot
ICAgIGVuY29kZXIgPDwgdHJ1ZTsKLSAgICBlbmNvZGVyIDw8IFBhY2tlZENvbG9yOjpSR0JBIHsg
YXNJbmxpbmUoKSB9LnZhbHVlOworICAgIGVuY29kZXIgPDwgYXNQYWNrZWRJbmxpbmUoKS52YWx1
ZTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gT3B0aW9uYWw8Q29sb3I+IENvbG9yOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKKyAgICBib29sIGlzVmFsaWQ7CisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShpc1ZhbGlkKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKwor
ICAgIGlmICghaXNWYWxpZCkKKyAgICAgICAgcmV0dXJuIENvbG9yIHsgfTsKKworICAgIE9wdGlv
blNldDxGbGFncz4gZmxhZ3M7CisKKyAgICBib29sIGlzU2VtYW50aWM7CisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShpc1NlbWFudGljKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKwor
ICAgIGlmIChpc1NlbWFudGljKQorICAgICAgICBmbGFncy5hZGQoRmxhZ3M6OlNlbWFudGljKTsK
KworICAgIGJvb2wgdXNlc0NvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uOworICAgIGlmICghZGVj
b2Rlci5kZWNvZGUodXNlc0NvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKSkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlmICh1c2VzQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRp
b24pCisgICAgICAgIGZsYWdzLmFkZChGbGFnczo6VXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRp
b24pOworCiAgICAgYm9vbCBpc0V4dGVuZGVkOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNF
eHRlbmRlZCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CkBAIC00NDUsMjEgKzU5Nywx
NCBAQCB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBPcHRpb25hbDxDb2xvcj4gCiAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvbG9y
U3BhY2UpKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJu
IENvbG9yIHsgRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKHsgYzEsIGMyLCBjMywgYWxwaGEgfSwgY29s
b3JTcGFjZSkgfTsKKyAgICAgICAgcmV0dXJuIENvbG9yIHsgRXh0ZW5kZWRDb2xvcjo6Y3JlYXRl
KHsgYzEsIGMyLCBjMywgYWxwaGEgfSwgY29sb3JTcGFjZSksIGZsYWdzIH07CiAgICAgfQogCi0g
ICAgYm9vbCBpc1ZhbGlkOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNWYWxpZCkpCi0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBpZiAoIWlzVmFsaWQpCi0gICAgICAgIHJl
dHVybiBDb2xvciB7IH07Ci0KICAgICB1aW50MzJfdCB2YWx1ZTsKICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHZhbHVlKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVy
biBDb2xvciB7IGFzU1JHQkEoUGFja2VkQ29sb3I6OlJHQkEgeyB2YWx1ZSB9KSB9OworICAgIHJl
dHVybiBDb2xvciB7IGFzU1JHQkEoUGFja2VkQ29sb3I6OlJHQkEgeyB2YWx1ZSB9KSwgZmxhZ3Mg
fTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAJKHJldmlzaW9uIDI3MzEw
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIENvbG9yIGJsZW5kV2l0aFdoaXRlKGNv
bnN0IENvbG9yJiBjb2xvcikKIAogICAgIC8vIEZJWE1FOiBXaHkgaXMgcHJlc2VydmluZyB0aGUg
c2VtYW50aWMgYml0IGRlc2lyZWQgYW5kL29yIGNvcnJlY3QgaGVyZT8KICAgICBpZiAoY29sb3Iu
aXNTZW1hbnRpYygpKQotICAgICAgICByZXR1cm4gQ29sb3IocmVzdWx0LCBDb2xvcjo6U2VtYW50
aWMpOworICAgICAgICByZXR1cm4geyByZXN1bHQsIENvbG9yOjpGbGFnczo6U2VtYW50aWMgfTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5jcHAJKHJldmlzaW9uIDI3
MzEwMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXph
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDY1ICszNiw2NSBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXN0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBBOThS
R0I8ZmxvYXQ+Jik7Ci1zdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IEE5
OFJHQjxmbG9hdD4mKTsKLXN0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVB
c1RleHQoY29uc3QgQTk4UkdCPGZsb2F0PiYpOwotCi1zdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRp
b25Gb3JDU1MoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYpOwotc3RhdGljIFN0cmluZyBzZXJpYWxp
emF0aW9uRm9ySFRNTChjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7Ci1zdGF0aWMgU3RyaW5nIHNl
cmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mKTsK
LQotc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IExDSEE8ZmxvYXQ+Jik7
Ci1zdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IExDSEE8ZmxvYXQ+Jik7
Ci1zdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IExD
SEE8ZmxvYXQ+Jik7Ci0KLXN0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBM
YWI8ZmxvYXQ+Jik7Ci1zdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IExh
YjxmbG9hdD4mKTsKLXN0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1Rl
eHQoY29uc3QgTGFiPGZsb2F0PiYpOwotCi1zdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JD
U1MoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+Jik7Ci1zdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRp
b25Gb3JIVE1MKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYpOwotc3RhdGljIFN0cmluZyBzZXJp
YWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mKTsK
LQotc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IFByb1Bob3RvUkdCPGZs
b2F0PiYpOwotc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBQcm9QaG90
b1JHQjxmbG9hdD4mKTsKLXN0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVB
c1RleHQoY29uc3QgUHJvUGhvdG9SR0I8ZmxvYXQ+Jik7Ci0KLXN0YXRpYyBTdHJpbmcgc2VyaWFs
aXphdGlvbkZvckNTUyhjb25zdCBSZWMyMDIwPGZsb2F0PiYpOwotc3RhdGljIFN0cmluZyBzZXJp
YWxpemF0aW9uRm9ySFRNTChjb25zdCBSZWMyMDIwPGZsb2F0PiYpOwotc3RhdGljIFN0cmluZyBz
ZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBSZWMyMDIwPGZsb2F0PiYpOwot
Ci1zdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7
Ci1zdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IFNSR0JBPGZsb2F0PiYp
Owotc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBT
UkdCQTxmbG9hdD4mKTsKLQotc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKFNSR0JB
PHVpbnQ4X3Q+KTsKLXN0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoU1JHQkE8dWlu
dDhfdD4pOwotc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChT
UkdCQTx1aW50OF90Pik7Ci0KLXN0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25z
dCBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+Jik7Ci1zdGF0aWMgU3RyaW5nIHNlcmlhbGl6
YXRpb25Gb3JIVE1MKGNvbnN0IFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4mKTsKLXN0YXRp
YyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgWFlaQTxmbG9h
dCwgV2hpdGVQb2ludDo6RDUwPiYpOworc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NT
KGNvbnN0IEE5OFJHQjxmbG9hdD4mLCBib29sIHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9u
KTsKK3N0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgQTk4UkdCPGZsb2F0
PiYsIGJvb2wgdXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pOworc3RhdGljIFN0cmluZyBz
ZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBBOThSR0I8ZmxvYXQ+JiwgYm9v
bCB1c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbik7CisKK3N0YXRpYyBTdHJpbmcgc2VyaWFs
aXphdGlvbkZvckNTUyhjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+JiwgYm9vbCB1c2VDb2xvckZ1bmN0
aW9uU2VyaWFsaXphdGlvbik7CitzdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNv
bnN0IERpc3BsYXlQMzxmbG9hdD4mLCBib29sIHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9u
KTsKK3N0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3Qg
RGlzcGxheVAzPGZsb2F0PiYsIGJvb2wgdXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pOwor
CitzdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgTENIQTxmbG9hdD4mLCBi
b29sIHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKTsKK3N0YXRpYyBTdHJpbmcgc2VyaWFs
aXphdGlvbkZvckhUTUwoY29uc3QgTENIQTxmbG9hdD4mLCBib29sIHVzZUNvbG9yRnVuY3Rpb25T
ZXJpYWxpemF0aW9uKTsKK3N0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVB
c1RleHQoY29uc3QgTENIQTxmbG9hdD4mLCBib29sIHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0
aW9uKTsKKworc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IExhYjxmbG9h
dD4mLCBib29sIHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKTsKK3N0YXRpYyBTdHJpbmcg
c2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgTGFiPGZsb2F0PiYsIGJvb2wgdXNlQ29sb3JGdW5j
dGlvblNlcmlhbGl6YXRpb24pOworc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVy
VHJlZUFzVGV4dChjb25zdCBMYWI8ZmxvYXQ+JiwgYm9vbCB1c2VDb2xvckZ1bmN0aW9uU2VyaWFs
aXphdGlvbik7CisKK3N0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBMaW5l
YXJTUkdCQTxmbG9hdD4mLCBib29sIHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKTsKK3N0
YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+
JiwgYm9vbCB1c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbik7CitzdGF0aWMgU3RyaW5nIHNl
cmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYs
IGJvb2wgdXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pOworCitzdGF0aWMgU3RyaW5nIHNl
cmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgUHJvUGhvdG9SR0I8ZmxvYXQ+JiwgYm9vbCB1c2VDb2xv
ckZ1bmN0aW9uU2VyaWFsaXphdGlvbik7CitzdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JI
VE1MKGNvbnN0IFByb1Bob3RvUkdCPGZsb2F0PiYsIGJvb2wgdXNlQ29sb3JGdW5jdGlvblNlcmlh
bGl6YXRpb24pOworc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4
dChjb25zdCBQcm9QaG90b1JHQjxmbG9hdD4mLCBib29sIHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxp
emF0aW9uKTsKKworc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IFJlYzIw
MjA8ZmxvYXQ+JiwgYm9vbCB1c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbik7CitzdGF0aWMg
U3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IFJlYzIwMjA8ZmxvYXQ+JiwgYm9vbCB1
c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbik7CitzdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRp
b25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IFJlYzIwMjA8ZmxvYXQ+JiwgYm9vbCB1c2VDb2xv
ckZ1bmN0aW9uU2VyaWFsaXphdGlvbik7CisKK3N0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZv
ckNTUyhjb25zdCBTUkdCQTxmbG9hdD4mLCBib29sIHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0
aW9uKTsKK3N0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgU1JHQkE8Zmxv
YXQ+JiwgYm9vbCB1c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbik7CitzdGF0aWMgU3RyaW5n
IHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IFNSR0JBPGZsb2F0PiYsIGJv
b2wgdXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pOworCitzdGF0aWMgU3RyaW5nIHNlcmlh
bGl6YXRpb25Gb3JDU1MoU1JHQkE8dWludDhfdD4sIGJvb2wgdXNlQ29sb3JGdW5jdGlvblNlcmlh
bGl6YXRpb24pOworc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChTUkdCQTx1aW50
OF90PiwgYm9vbCB1c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbik7CitzdGF0aWMgU3RyaW5n
IHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KFNSR0JBPHVpbnQ4X3Q+LCBib29sIHVz
ZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKTsKKworc3RhdGljIFN0cmluZyBzZXJpYWxpemF0
aW9uRm9yQ1NTKGNvbnN0IFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4mLCBib29sIHVzZUNv
bG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKTsKK3N0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZv
ckhUTUwoY29uc3QgWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDUwPiYsIGJvb2wgdXNlQ29sb3JG
dW5jdGlvblNlcmlhbGl6YXRpb24pOworc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVu
ZGVyVHJlZUFzVGV4dChjb25zdCBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+JiwgYm9vbCB1
c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbik7CiAKIAogU3RyaW5nIHNlcmlhbGl6YXRpb25G
b3JDU1MoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIHJldHVybiBjb2xvci5jYWxsT25VbmRl
cmx5aW5nVHlwZShbXSAoYXV0byB1bmRlcmx5aW5nQ29sb3IpIHsKLSAgICAgICAgcmV0dXJuIHNl
cmlhbGl6YXRpb25Gb3JDU1ModW5kZXJseWluZ0NvbG9yKTsKKyAgICByZXR1cm4gY29sb3IuY2Fs
bE9uVW5kZXJseWluZ1R5cGUoWyZdIChhdXRvIHVuZGVybHlpbmdDb2xvcikgeworICAgICAgICBy
ZXR1cm4gc2VyaWFsaXphdGlvbkZvckNTUyh1bmRlcmx5aW5nQ29sb3IsIGNvbG9yLnVzZXNDb2xv
ckZ1bmN0aW9uU2VyaWFsaXphdGlvbigpKTsKICAgICB9KTsKIH0KIAogU3RyaW5nIHNlcmlhbGl6
YXRpb25Gb3JIVE1MKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICByZXR1cm4gY29sb3IuY2Fs
bE9uVW5kZXJseWluZ1R5cGUoW10gKGF1dG8gdW5kZXJseWluZ0NvbG9yKSB7Ci0gICAgICAgIHJl
dHVybiBzZXJpYWxpemF0aW9uRm9ySFRNTCh1bmRlcmx5aW5nQ29sb3IpOworICAgIHJldHVybiBj
b2xvci5jYWxsT25VbmRlcmx5aW5nVHlwZShbJl0gKGF1dG8gdW5kZXJseWluZ0NvbG9yKSB7Cisg
ICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9ySFRNTCh1bmRlcmx5aW5nQ29sb3IsIGNvbG9y
LnVzZXNDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbigpKTsKICAgICB9KTsKIH0KIAogU3RyaW5n
IHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IENvbG9yJiBjb2xvcikKIHsK
LSAgICByZXR1cm4gY29sb3IuY2FsbE9uVW5kZXJseWluZ1R5cGUoW10gKGF1dG8gdW5kZXJseWlu
Z0NvbG9yKSB7Ci0gICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4
dCh1bmRlcmx5aW5nQ29sb3IpOworICAgIHJldHVybiBjb2xvci5jYWxsT25VbmRlcmx5aW5nVHlw
ZShbJl0gKGF1dG8gdW5kZXJseWluZ0NvbG9yKSB7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0
aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCh1bmRlcmx5aW5nQ29sb3IsIGNvbG9yLnVzZXNDb2xvckZ1
bmN0aW9uU2VyaWFsaXphdGlvbigpKTsKICAgICB9KTsKIH0KIApAQCAtMTI1LDUzICsxMjUsNzAg
QEAgc3RhdGljIEFTQ0lJTGl0ZXJhbCBzZXJpYWxpemF0aW9uKENvbG9yUwogICAgIHJldHVybiAi
Il9zOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRpYyBTdHJpbmcgc2Vy
aWFsaXphdGlvbihjb25zdCBDb2xvclR5cGUmIGNvbG9yKQordGVtcGxhdGU8dHlwZW5hbWUgQ29s
b3JUeXBlPiBzdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Vc2luZ0NvbG9yRnVuY3Rpb24oY29u
c3QgQ29sb3JUeXBlJiBjb2xvcikKIHsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZV92
PHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZSwgZmxvYXQ+KTsKKwogICAgIGF1dG8g
W2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yOwogICAgIGlmIChXVEY6OmFyZUVzc2VudGlhbGx5
RXF1YWwoYWxwaGEsIDEuMGYpKQogICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiY29sb3IoIiwg
c2VyaWFsaXphdGlvbihDb2xvclNwYWNlRm9yPENvbG9yVHlwZT4pLCAnICcsIGMxLCAnICcsIGMy
LCAnICcsIGMzLCAnKScpOwogICAgIHJldHVybiBtYWtlU3RyaW5nKCJjb2xvcigiLCBzZXJpYWxp
emF0aW9uKENvbG9yU3BhY2VGb3I8Q29sb3JUeXBlPiksICcgJywgYzEsICcgJywgYzIsICcgJywg
YzMsICIgLyAiLCBhbHBoYSwgJyknKTsKIH0KIAorc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9u
VXNpbmdDb2xvckZ1bmN0aW9uKGNvbnN0IExhYjxmbG9hdD4mIGNvbG9yKQoreworICAgIGF1dG8g
W2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yOworICAgIGlmIChXVEY6OmFyZUVzc2VudGlhbGx5
RXF1YWwoYWxwaGEsIDEuMGYpKQorICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiY29sb3IoIiwg
c2VyaWFsaXphdGlvbihDb2xvclNwYWNlRm9yPExhYjxmbG9hdD4+KSwgJyAnLCBjMSwgIiUgIiwg
YzIsICcgJywgYzMsICcpJyk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoImNvbG9yKCIsIHNlcmlh
bGl6YXRpb24oQ29sb3JTcGFjZUZvcjxMYWI8ZmxvYXQ+PiksICcgJywgYzEsICIlICIsIGMyLCAn
ICcsIGMzLCAiIC8gIiwgYWxwaGEsICcpJyk7Cit9CisKK3N0YXRpYyBTdHJpbmcgc2VyaWFsaXph
dGlvblVzaW5nQ29sb3JGdW5jdGlvbihjb25zdCBTUkdCQTx1aW50OF90PiYgY29sb3IpCit7Cisg
ICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Vc2luZ0NvbG9yRnVuY3Rpb24oY29udmVydENvbG9yPFNS
R0JBPGZsb2F0Pj4oY29sb3IpKTsKK30KKwogLy8gTUFSSzogQTk4UkdCPGZsb2F0PiBvdmVybG9h
ZHMKIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgQTk4UkdCPGZsb2F0PiYgY29s
b3IpCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBBOThSR0I8ZmxvYXQ+JiBjb2xv
ciwgYm9vbCkKIHsKLSAgICByZXR1cm4gc2VyaWFsaXphdGlvbihjb2xvcik7CisgICAgcmV0dXJu
IHNlcmlhbGl6YXRpb25Vc2luZ0NvbG9yRnVuY3Rpb24oY29sb3IpOwogfQogCi1TdHJpbmcgc2Vy
aWFsaXphdGlvbkZvckhUTUwoY29uc3QgQTk4UkdCPGZsb2F0PiYgY29sb3IpCitTdHJpbmcgc2Vy
aWFsaXphdGlvbkZvckhUTUwoY29uc3QgQTk4UkdCPGZsb2F0PiYgY29sb3IsIGJvb2wpCiB7Ci0g
ICAgcmV0dXJuIHNlcmlhbGl6YXRpb24oY29sb3IpOworICAgIHJldHVybiBzZXJpYWxpemF0aW9u
VXNpbmdDb2xvckZ1bmN0aW9uKGNvbG9yKTsKIH0KIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JS
ZW5kZXJUcmVlQXNUZXh0KGNvbnN0IEE5OFJHQjxmbG9hdD4mIGNvbG9yKQorU3RyaW5nIHNlcmlh
bGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IEE5OFJHQjxmbG9hdD4mIGNvbG9yLCBi
b29sKQogewotICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKKyAgICByZXR1cm4gc2Vy
aWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbihjb2xvcik7CiB9CiAKIC8vIE1BUks6IERpc3Bs
YXlQMzxmbG9hdD4gb3ZlcmxvYWRzCiAKLVN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0
IERpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKQorU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29u
c3QgRGlzcGxheVAzPGZsb2F0PiYgY29sb3IsIGJvb2wpCiB7Ci0gICAgcmV0dXJuIHNlcmlhbGl6
YXRpb24oY29sb3IpOworICAgIHJldHVybiBzZXJpYWxpemF0aW9uVXNpbmdDb2xvckZ1bmN0aW9u
KGNvbG9yKTsKIH0KIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IERpc3BsYXlQ
MzxmbG9hdD4mIGNvbG9yKQorU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IERpc3Bs
YXlQMzxmbG9hdD4mIGNvbG9yLCBib29sKQogewotICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNv
bG9yKTsKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbihjb2xvcik7
CiB9CiAKLVN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBEaXNw
bGF5UDM8ZmxvYXQ+JiBjb2xvcikKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFz
VGV4dChjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvciwgYm9vbCkKIHsKLSAgICByZXR1cm4g
c2VyaWFsaXphdGlvbihjb2xvcik7CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Vc2luZ0NvbG9y
RnVuY3Rpb24oY29sb3IpOwogfQogCiAvLyBNQVJLOiBMQ0hBPGZsb2F0PiBvdmVybG9hZHMKIAot
U3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgTENIQTxmbG9hdD4mIGNvbG9yKQorU3Ry
aW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgTENIQTxmbG9hdD4mIGNvbG9yLCBib29sIHVz
ZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKQogewogICAgIC8vIGh0dHBzOi8vd3d3LnczLm9y
Zy9UUi9jc3MtY29sb3ItNC8jc2VyaWFsaXppbmctbGFiLWxjaAorICAgIGlmICh1c2VDb2xvckZ1
bmN0aW9uU2VyaWFsaXphdGlvbikKKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Vc2luZ0Nv
bG9yRnVuY3Rpb24oY29sb3IpOwogCiAgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29s
b3I7CiAgICAgaWYgKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChhbHBoYSwgMS4wZikpCkBAIC0x
NzksMjEgKzE5NiwyMyBAQCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBMQ0hBPGZs
CiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoImxjaCgiLCBjMSwgIiUgIiwgYzIsICcgJywgYzMsICIg
LyAiLCBhbHBoYSwgJyknKTsKIH0KIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0
IExDSEE8ZmxvYXQ+JiBjb2xvcikKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBM
Q0hBPGZsb2F0PiYgY29sb3IsIGJvb2wgdXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pCiB7
Ci0gICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29sb3IpOworICAgIHJldHVybiBzZXJp
YWxpemF0aW9uRm9yQ1NTKGNvbG9yLCB1c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbik7CiB9
CiAKLVN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBMQ0hBPGZs
b2F0PiYgY29sb3IpCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29u
c3QgTENIQTxmbG9hdD4mIGNvbG9yLCBib29sIHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9u
KQogewotICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbG9yKTsKKyAgICByZXR1cm4g
c2VyaWFsaXphdGlvbkZvckNTUyhjb2xvciwgdXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24p
OwogfQogCiAvLyBNQVJLOiBMYWI8ZmxvYXQ+IG92ZXJsb2FkcwogCi1TdHJpbmcgc2VyaWFsaXph
dGlvbkZvckNTUyhjb25zdCBMYWI8ZmxvYXQ+JiBjb2xvcikKK1N0cmluZyBzZXJpYWxpemF0aW9u
Rm9yQ1NTKGNvbnN0IExhYjxmbG9hdD4mIGNvbG9yLCBib29sIHVzZUNvbG9yRnVuY3Rpb25TZXJp
YWxpemF0aW9uKQogewogICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtY29sb3ItNC8j
c2VyaWFsaXppbmctbGFiLWxjaAorICAgIGlmICh1c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlv
bikKKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Vc2luZ0NvbG9yRnVuY3Rpb24oY29sb3Ip
OwogCiAgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3I7CiAgICAgaWYgKFdURjo6
YXJlRXNzZW50aWFsbHlFcXVhbChhbHBoYSwgMS4wZikpCkBAIC0yMDEsODIgKzIyMCw4MiBAQCBT
dHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBMYWI8ZmxvCiAgICAgcmV0dXJuIG1ha2VT
dHJpbmcoImxhYigiLCBjMSwgIiUgIiwgYzIsICcgJywgYzMsICIgLyAiLCBhbHBoYSwgJyknKTsK
IH0KIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IExhYjxmbG9hdD4mIGNvbG9y
KQorU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IExhYjxmbG9hdD4mIGNvbG9yLCBi
b29sIHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKQogewotICAgIHJldHVybiBzZXJpYWxp
emF0aW9uRm9yQ1NTKGNvbG9yKTsKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckNTUyhjb2xv
ciwgdXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pOwogfQogCi1TdHJpbmcgc2VyaWFsaXph
dGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgTGFiPGZsb2F0PiYgY29sb3IpCitTdHJpbmcg
c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgTGFiPGZsb2F0PiYgY29sb3Is
IGJvb2wgdXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pCiB7Ci0gICAgcmV0dXJuIHNlcmlh
bGl6YXRpb25Gb3JDU1MoY29sb3IpOworICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKGNv
bG9yLCB1c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbik7CiB9CiAKIC8vIE1BUks6IExpbmVh
clNSR0JBPGZsb2F0PiBvdmVybG9hZHMKIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29u
c3QgTGluZWFyU1JHQkE8ZmxvYXQ+JiBjb2xvcikKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NT
KGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYgY29sb3IsIGJvb2wpCiB7Ci0gICAgcmV0dXJuIHNl
cmlhbGl6YXRpb24oY29sb3IpOworICAgIHJldHVybiBzZXJpYWxpemF0aW9uVXNpbmdDb2xvckZ1
bmN0aW9uKGNvbG9yKTsKIH0KIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IExp
bmVhclNSR0JBPGZsb2F0PiYgY29sb3IpCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29u
c3QgTGluZWFyU1JHQkE8ZmxvYXQ+JiBjb2xvciwgYm9vbCkKIHsKLSAgICByZXR1cm4gc2VyaWFs
aXphdGlvbihjb2xvcik7CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Vc2luZ0NvbG9yRnVuY3Rp
b24oY29sb3IpOwogfQogCi1TdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQo
Y29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+JiBjb2xvcikKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9y
UmVuZGVyVHJlZUFzVGV4dChjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mIGNvbG9yLCBib29sKQog
ewotICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKKyAgICByZXR1cm4gc2VyaWFsaXph
dGlvblVzaW5nQ29sb3JGdW5jdGlvbihjb2xvcik7CiB9CiAKIC8vIE1BUks6IFByb1Bob3RvUkdC
PGZsb2F0PiBvdmVybG9hZHMKIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgUHJv
UGhvdG9SR0I8ZmxvYXQ+JiBjb2xvcikKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0
IFByb1Bob3RvUkdCPGZsb2F0PiYgY29sb3IsIGJvb2wpCiB7Ci0gICAgcmV0dXJuIHNlcmlhbGl6
YXRpb24oY29sb3IpOworICAgIHJldHVybiBzZXJpYWxpemF0aW9uVXNpbmdDb2xvckZ1bmN0aW9u
KGNvbG9yKTsKIH0KIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IFByb1Bob3Rv
UkdCPGZsb2F0PiYgY29sb3IpCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgUHJv
UGhvdG9SR0I8ZmxvYXQ+JiBjb2xvciwgYm9vbCkKIHsKLSAgICByZXR1cm4gc2VyaWFsaXphdGlv
bihjb2xvcik7CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Vc2luZ0NvbG9yRnVuY3Rpb24oY29s
b3IpOwogfQogCi1TdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3Qg
UHJvUGhvdG9SR0I8ZmxvYXQ+JiBjb2xvcikKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVy
VHJlZUFzVGV4dChjb25zdCBQcm9QaG90b1JHQjxmbG9hdD4mIGNvbG9yLCBib29sKQogewotICAg
IHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvblVz
aW5nQ29sb3JGdW5jdGlvbihjb2xvcik7CiB9CiAKIC8vIE1BUks6IFJlYzIwMjA8ZmxvYXQ+IG92
ZXJsb2FkcwogCi1TdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBSZWMyMDIwPGZsb2F0
PiYgY29sb3IpCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBSZWMyMDIwPGZsb2F0
PiYgY29sb3IsIGJvb2wpCiB7Ci0gICAgcmV0dXJuIHNlcmlhbGl6YXRpb24oY29sb3IpOworICAg
IHJldHVybiBzZXJpYWxpemF0aW9uVXNpbmdDb2xvckZ1bmN0aW9uKGNvbG9yKTsKIH0KIAotU3Ry
aW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IFJlYzIwMjA8ZmxvYXQ+JiBjb2xvcikKK1N0
cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBSZWMyMDIwPGZsb2F0PiYgY29sb3IsIGJv
b2wpCiB7Ci0gICAgcmV0dXJuIHNlcmlhbGl6YXRpb24oY29sb3IpOworICAgIHJldHVybiBzZXJp
YWxpemF0aW9uVXNpbmdDb2xvckZ1bmN0aW9uKGNvbG9yKTsKIH0KIAotU3RyaW5nIHNlcmlhbGl6
YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IFJlYzIwMjA8ZmxvYXQ+JiBjb2xvcikKK1N0
cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBSZWMyMDIwPGZsb2F0
PiYgY29sb3IsIGJvb2wpCiB7Ci0gICAgcmV0dXJuIHNlcmlhbGl6YXRpb24oY29sb3IpOworICAg
IHJldHVybiBzZXJpYWxpemF0aW9uVXNpbmdDb2xvckZ1bmN0aW9uKGNvbG9yKTsKIH0KIAogLy8g
TUFSSzogU1JHQkE8ZmxvYXQ+IG92ZXJsb2FkcwogCi1TdHJpbmcgc2VyaWFsaXphdGlvbkZvckNT
Uyhjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQorU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1Mo
Y29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvciwgYm9vbCkKIHsKLSAgICByZXR1cm4gc2VyaWFsaXph
dGlvbihjb2xvcik7CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Vc2luZ0NvbG9yRnVuY3Rpb24o
Y29sb3IpOwogfQogCi1TdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgU1JHQkE8Zmxv
YXQ+JiBjb2xvcikKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBTUkdCQTxmbG9h
dD4mIGNvbG9yLCBib29sKQogewotICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKKyAg
ICByZXR1cm4gc2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbihjb2xvcik7CiB9CiAKLVN0
cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBTUkdCQTxmbG9hdD4m
IGNvbG9yKQorU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IFNS
R0JBPGZsb2F0PiYgY29sb3IsIGJvb2wpCiB7Ci0gICAgcmV0dXJuIHNlcmlhbGl6YXRpb24oY29s
b3IpOworICAgIHJldHVybiBzZXJpYWxpemF0aW9uVXNpbmdDb2xvckZ1bmN0aW9uKGNvbG9yKTsK
IH0KIAogLy8gTUFSSzogU1JHQkE8dWludDhfdD4gb3ZlcmxvYWRzCkBAIC0yOTgsOCArMzE3LDEx
IEBAIHN0YXRpYyBzdGQ6OmFycmF5PGNoYXIsIDQ+IGZyYWN0aW9uRGlnaXQKICAgICByZXR1cm4g
eyB7IGRlY2ltYWxEaWdpdCgoYWxwaGEgKiAxMCArIDB4N0YpIC8gMHhGRiksICdcMCcsICdcMCcs
ICdcMCcgfSB9OwogfQogCi1TdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhTUkdCQTx1aW50OF90
PiBjb2xvcikKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKFNSR0JBPHVpbnQ4X3Q+IGNvbG9y
LCBib29sIHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKQogeworICAgIGlmICh1c2VDb2xv
ckZ1bmN0aW9uU2VyaWFsaXphdGlvbikKKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Vc2lu
Z0NvbG9yRnVuY3Rpb24oY29sb3IpOworCiAgICAgYXV0byBbcmVkLCBncmVlbiwgYmx1ZSwgYWxw
aGFdID0gY29sb3I7CiAgICAgc3dpdGNoIChhbHBoYSkgewogICAgIGNhc2UgMDoKQEAgLTMxMSwx
NiArMzMzLDIyIEBAIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKFNSR0JBPHVpbnQ4X3QKICAg
ICB9CiB9CiAKLVN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChTUkdCQTx1aW50OF90PiBjb2xv
cikKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChTUkdCQTx1aW50OF90PiBjb2xvciwgYm9v
bCB1c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbikKIHsKKyAgICBpZiAodXNlQ29sb3JGdW5j
dGlvblNlcmlhbGl6YXRpb24pCisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uVXNpbmdDb2xv
ckZ1bmN0aW9uKGNvbG9yKTsKKwogICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9
IGNvbG9yOwogICAgIGlmIChhbHBoYSA9PSAweEZGKQogICAgICAgICByZXR1cm4gbWFrZVN0cmlu
ZygnIycsIGhleChyZWQsIDIsIExvd2VyY2FzZSksIGhleChncmVlbiwgMiwgTG93ZXJjYXNlKSwg
aGV4KGJsdWUsIDIsIExvd2VyY2FzZSkpOwogICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NT
KGNvbG9yKTsKIH0KIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KFNS
R0JBPHVpbnQ4X3Q+IGNvbG9yKQorU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNU
ZXh0KFNSR0JBPHVpbnQ4X3Q+IGNvbG9yLCBib29sIHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0
aW9uKQogeworICAgIGlmICh1c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbikKKyAgICAgICAg
cmV0dXJuIHNlcmlhbGl6YXRpb25Vc2luZ0NvbG9yRnVuY3Rpb24oY29sb3IpOworCiAgICAgYXV0
byBbcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFdID0gY29sb3I7CiAgICAgaWYgKGFscGhhIDwgMHhG
RikKICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoJyMnLCBoZXgocmVkLCAyKSwgaGV4KGdyZWVu
LCAyKSwgaGV4KGJsdWUsIDIpLCBoZXgoYWxwaGEsIDIpKTsKQEAgLTMyOSwxOSArMzU3LDE5IEBA
IFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCgKIAogLy8gTUFSSzogWFla
QTxmbG9hdCwgV2hpdGVQb2ludDo6RDUwPiBvdmVybG9hZHMKIAotU3RyaW5nIHNlcmlhbGl6YXRp
b25Gb3JDU1MoY29uc3QgWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDUwPiYgY29sb3IpCitTdHJp
bmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+
JiBjb2xvciwgYm9vbCkKIHsKLSAgICByZXR1cm4gc2VyaWFsaXphdGlvbihjb2xvcik7CisgICAg
cmV0dXJuIHNlcmlhbGl6YXRpb25Vc2luZ0NvbG9yRnVuY3Rpb24oY29sb3IpOwogfQogCi1TdHJp
bmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDUw
PiYgY29sb3IpCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgWFlaQTxmbG9hdCwg
V2hpdGVQb2ludDo6RDUwPiYgY29sb3IsIGJvb2wpCiB7Ci0gICAgcmV0dXJuIHNlcmlhbGl6YXRp
b24oY29sb3IpOworICAgIHJldHVybiBzZXJpYWxpemF0aW9uVXNpbmdDb2xvckZ1bmN0aW9uKGNv
bG9yKTsKIH0KIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0
IFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4mIGNvbG9yKQorU3RyaW5nIHNlcmlhbGl6YXRp
b25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4m
IGNvbG9yLCBib29sKQogewotICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKKyAgICBy
ZXR1cm4gc2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbihjb2xvcik7CiB9CiAKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3Bw
CShyZXZpc2lvbiAyNzMxMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9Db2xvckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksOCArODksOCBAQCBDb2xvcjo6Q29s
b3IoQ0dDb2xvclJlZiBjb2xvcikKIHsKIH0KIAotQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29s
b3IsIFNlbWFudGljVGFnIHRhZykKLSAgICA6IENvbG9yKHJvdW5kQW5kQ2xhbXBUb1NSR0JBTG9z
c3koY29sb3IpLCB0YWcpCitDb2xvcjo6Q29sb3IoQ0dDb2xvclJlZiBjb2xvciwgT3B0aW9uU2V0
PEZsYWdzPiBmbGFncykKKyAgICA6IENvbG9yKHJvdW5kQW5kQ2xhbXBUb1NSR0JBTG9zc3koY29s
b3IpLCBmbGFncykKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0NvbG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQkocmV2aXNpb24gMjczMTAyKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDgsNyArMTA4LDcgQEAgQ29sb3IgY29sb3JGcm9tTlNDb2xvcihOU0NvbG9yICpjb2xvcikK
IAogQ29sb3Igc2VtYW50aWNDb2xvckZyb21OU0NvbG9yKE5TQ29sb3IgKmNvbG9yKQogewotICAg
IHJldHVybiBDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tTlNDb2xvcihjb2xvciksIENvbG9yOjpT
ZW1hbnRpYyk7CisgICAgcmV0dXJuIENvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21OU0NvbG9yKGNv
bG9yKSwgQ29sb3I6OkZsYWdzOjpTZW1hbnRpYyk7CiB9CiAKIE5TQ29sb3IgKm5zQ29sb3IoY29u
c3QgQ29sb3ImIGNvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZUlPUy5tbQkocmV2aXNpb24gMjczMTAyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzkxLDcgKzEzOTEsNyBAQCBz
dGF0aWMgY29uc3QgVmVjdG9yPENTU1ZhbHVlSURBbmRTZWxlY3RvCiBzdGF0aWMgaW5saW5lIE9w
dGlvbmFsPENvbG9yPiBzeXN0ZW1Db2xvckZyb21DU1NWYWx1ZUlEU2VsZWN0b3IoQ1NTVmFsdWVJ
REFuZFNlbGVjdG9yIGlkQW5kU2VsZWN0b3IpCiB7CiAgICAgaWYgKGF1dG8gY29sb3IgPSB3dGZP
YmpDTXNnU2VuZDxVSUNvbG9yICo+KFBBTDo6Z2V0VUlDb2xvckNsYXNzKCksIGlkQW5kU2VsZWN0
b3Iuc2VsZWN0b3IpKQotICAgICAgICByZXR1cm4gQ29sb3IgeyBjb2xvci5DR0NvbG9yLCBDb2xv
cjo6U2VtYW50aWMgfTsKKyAgICAgICAgcmV0dXJuIENvbG9yIHsgY29sb3IuQ0dDb2xvciwgQ29s
b3I6OkZsYWdzOjpTZW1hbnRpYyB9OwogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKQEAg
LTE0MDksNyArMTQwOSw3IEBAIHN0YXRpYyBPcHRpb25hbDxDb2xvcj4gc3lzdGVtQ29sb3JGcm9t
Q1MKIAogICAgIGlmIChhdXRvIHNlbGVjdG9yID0gY3NzQ29sb3JUb1NlbGVjdG9yKCkpIHsKICAg
ICAgICAgaWYgKGF1dG8gY29sb3IgPSB3dGZPYmpDTXNnU2VuZDxVSUNvbG9yICo+KFBBTDo6Z2V0
VUlDb2xvckNsYXNzKCksIHNlbGVjdG9yKSkKLSAgICAgICAgICAgIHJldHVybiBDb2xvcihjb2xv
ci5DR0NvbG9yLCBDb2xvcjo6U2VtYW50aWMpOworICAgICAgICAgICAgcmV0dXJuIENvbG9yIHsg
Y29sb3IuQ0dDb2xvciwgQ29sb3I6OkZsYWdzOjpTZW1hbnRpYyB9OwogICAgIH0KICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZU1hYy5tbQkocmV2aXNpb24gMjczMTAyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03MjksMjYgKzcyOSwyNiBA
QCBDb2xvciBSZW5kZXJUaGVtZU1hYzo6c3lzdGVtQ29sb3IoQ1NTVmFsCiAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVBY3RpdmVib3JkZXI6CiAgICAgICAgICAgICAvLyBIYXJkY29kZWQgdG8gYXZvaWQg
ZXhwb3NpbmcgYSB1c2VyIGFwcGVhcmFuY2UgcHJlZmVyZW5jZSB0byB0aGUgd2ViIGZvciBmaW5n
ZXJwcmludGluZy4KICAgICAgICAgICAgIGlmIChsb2NhbEFwcGVhcmFuY2UudXNpbmdEYXJrQXBw
ZWFyYW5jZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiB7IFNSR0JBPHVpbnQ4X3Q+IHsgMjYs
IDE2OSwgMjU1IH0sIENvbG9yOjpTZW1hbnRpYyB9OwotICAgICAgICAgICAgcmV0dXJuIHsgU1JH
QkE8dWludDhfdD4geyAwLCAxMDMsIDI0NCB9LCBDb2xvcjo6U2VtYW50aWMgfTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4geyBTUkdCQTx1aW50OF90PiB7IDI2LCAxNjksIDI1NSB9LCBDb2xvcjo6
RmxhZ3M6OlNlbWFudGljIH07CisgICAgICAgICAgICByZXR1cm4geyBTUkdCQTx1aW50OF90PiB7
IDAsIDEwMywgMjQ0IH0sIENvbG9yOjpGbGFnczo6U2VtYW50aWMgfTsKIAogICAgICAgICBjYXNl
IENTU1ZhbHVlQXBwbGVTeXN0ZW1Db250cm9sQWNjZW50OgogICAgICAgICAgICAgLy8gSGFyZGNv
ZGVkIHRvIGF2b2lkIGV4cG9zaW5nIGEgdXNlciBhcHBlYXJhbmNlIHByZWZlcmVuY2UgdG8gdGhl
IHdlYiBmb3IgZmluZ2VycHJpbnRpbmcuCiAgICAgICAgICAgICAvLyBTYW1lIGNvbG9yIGluIGxp
Z2h0IGFuZCBkYXJrIGFwcGVhcmFuY2VzLgotICAgICAgICAgICAgcmV0dXJuIHsgU1JHQkE8dWlu
dDhfdD4geyAwLCAxMjIsIDI1NSB9LCBDb2xvcjo6U2VtYW50aWMgfTsKKyAgICAgICAgICAgIHJl
dHVybiB7IFNSR0JBPHVpbnQ4X3Q+IHsgMCwgMTIyLCAyNTUgfSwgQ29sb3I6OkZsYWdzOjpTZW1h
bnRpYyB9OwogCiAgICAgICAgIGNhc2UgQ1NTVmFsdWVBcHBsZVN5c3RlbVNlbGVjdGVkQ29udGVu
dEJhY2tncm91bmQ6CiAgICAgICAgICAgICAvLyBIYXJkY29kZWQgdG8gYXZvaWQgZXhwb3Npbmcg
YSB1c2VyIGFwcGVhcmFuY2UgcHJlZmVyZW5jZSB0byB0aGUgd2ViIGZvciBmaW5nZXJwcmludGlu
Zy4KICAgICAgICAgICAgIGlmIChsb2NhbEFwcGVhcmFuY2UudXNpbmdEYXJrQXBwZWFyYW5jZSgp
KQotICAgICAgICAgICAgICAgIHJldHVybiB7IFNSR0JBPHVpbnQ4X3Q+IHsgMCwgODgsIDIwOCB9
LCBDb2xvcjo6U2VtYW50aWMgfTsKLSAgICAgICAgICAgIHJldHVybiB7IFNSR0JBPHVpbnQ4X3Q+
IHsgMCwgOTksIDIyNSB9LCBDb2xvcjo6U2VtYW50aWMgfTsKKyAgICAgICAgICAgICAgICByZXR1
cm4geyBTUkdCQTx1aW50OF90PiB7IDAsIDg4LCAyMDggfSwgQ29sb3I6OkZsYWdzOjpTZW1hbnRp
YyB9OworICAgICAgICAgICAgcmV0dXJuIHsgU1JHQkE8dWludDhfdD4geyAwLCA5OSwgMjI1IH0s
IENvbG9yOjpGbGFnczo6U2VtYW50aWMgfTsKIAogICAgICAgICBjYXNlIENTU1ZhbHVlSGlnaGxp
Z2h0OgogICAgICAgICBjYXNlIENTU1ZhbHVlQXBwbGVTeXN0ZW1TZWxlY3RlZFRleHRCYWNrZ3Jv
dW5kOgogICAgICAgICAgICAgLy8gSGFyZGNvZGVkIHRvIGF2b2lkIGV4cG9zaW5nIGEgdXNlciBh
cHBlYXJhbmNlIHByZWZlcmVuY2UgdG8gdGhlIHdlYiBmb3IgZmluZ2VycHJpbnRpbmcuCiAgICAg
ICAgICAgICBpZiAobG9jYWxBcHBlYXJhbmNlLnVzaW5nRGFya0FwcGVhcmFuY2UoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4geyBTUkdCQTx1aW50OF90PiB7IDYzLCA5OSwgMTM5LCAyMDQgfSwg
Q29sb3I6OlNlbWFudGljIH07Ci0gICAgICAgICAgICByZXR1cm4geyBTUkdCQTx1aW50OF90PiB7
IDEyOCwgMTg4LCAyNTQsIDE1MyB9LCBDb2xvcjo6U2VtYW50aWMgfTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4geyBTUkdCQTx1aW50OF90PiB7IDYzLCA5OSwgMTM5LCAyMDQgfSwgQ29sb3I6OkZs
YWdzOjpTZW1hbnRpYyB9OworICAgICAgICAgICAgcmV0dXJuIHsgU1JHQkE8dWludDhfdD4geyAx
MjgsIDE4OCwgMjU0LCAxNTMgfSwgQ29sb3I6OkZsYWdzOjpTZW1hbnRpYyB9OwogCiAjaWYgIUhB
VkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiAgICAgICAgIGNhc2UgQ1NTVmFsdWVBcHBsZVN5c3Rl
bUNvbnRhaW5lckJvcmRlcjoKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MzEwMikKKysrIExheW91dFRl
c3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDIxLTAyLTE4
ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBjb2xvcihsYWIgLi4u
KSBzaG91bGQgc2VyaWFsaXplIGFzIGNvbG9yKGxhYiAuLi4pIG5vdCBsYWIoKSBhY2NvcmRpbmcg
dG8gbGF0ZXN0IENTUyBDb2xvciA0IHNwZWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIyMjExMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogZmFzdC9jc3MvcGFyc2luZy1sYWItY29sb3JzLWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiBmYXN0L2Nzcy9wYXJzaW5nLWxhYi1jb2xvcnMuaHRtbDoKKyAgICAg
ICAgVXBkYXRlIHRlc3QgYW5kIHJlc3VsdHMgZm9yIG5ldyBzZXJpYWxpemF0aW9uIG9mIGNvbG9y
KGxhYiAuLi4pLgorCiAyMDIxLTAyLTE4ICBBbWlyIE1hcmsgSnIgIDxhbWlyX21hcmtAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtCaWdTdXJdIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
Y3NzL2Nzcy1jb3VudGVyLXN0eWxlcy90aWJldGFuL2NzczMtY291bnRlci1zdHlsZXMtMTU2Lmh0
bWwgaXMgY29uc2lzdGVudGx5IGZhaWxpbmcKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY3NzL3Bh
cnNpbmctbGFiLWNvbG9ycy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9jc3MvcGFyc2luZy1sYWItY29sb3JzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjczMTAy
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jc3MvcGFyc2luZy1sYWItY29sb3JzLWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLVRlc3QgdGhlIHBhcnNpbmcgb2YgbGFi
LCBsY2ggYW5kIGdyYXkgY29sb3JzLgorVGVzdCB0aGUgcGFyc2luZyBvZiBsYWIoLi4uKSwgbGNo
KC4uLikgYW5kIGNvbG9yKGxhYiAuLi4pIGNvbG9ycy4KIAogT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgogCkBAIC00MCwyNiArNDAsMjYgQEAgUEFTUyBjb21wdXRlZFN0eWxlKCJiYWNrZ3JvdW5k
LWNvbG9yIiwgIgogUEFTUyBjb21wdXRlZFN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImxjaCgx
MCUgMjAgLTcwMCkiKSBpcyAibGNoKDEwJSAyMCAyMCkiCiAKIGNvbG9yKGxhYiApCi1QQVNTIGNv
bXB1dGVkU3R5bGUoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIDAlIDAgMCkiKSBpcyAi
bGFiKDAlIDAgMCkiCi1QQVNTIGNvbXB1dGVkU3R5bGUoImJhY2tncm91bmQtY29sb3IiLCAiY29s
b3IobGFiIDAlIDAgMCAvIDEpIikgaXMgImxhYigwJSAwIDApIgotUEFTUyBjb21wdXRlZFN0eWxl
KCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiAwJSAwIDAgLyAwLjUpIikgaXMgImxhYigw
JSAwIDAgLyAwLjUpIgotUEFTUyBjb21wdXRlZFN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNv
bG9yKGxhYiAyMCUgMCAxMC8wLjUpIikgaXMgImxhYigyMCUgMCAxMCAvIDAuNSkiCi1QQVNTIGNv
bXB1dGVkU3R5bGUoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIDIwJSAwIDEwLzUwJSki
KSBpcyAibGFiKDIwJSAwIDEwIC8gMC41KSIKLVBBU1MgY29tcHV0ZWRTdHlsZSgiYmFja2dyb3Vu
ZC1jb2xvciIsICJjb2xvcihsYWIgNDAwJSAwIDEwLzUwJSkiKSBpcyAibGFiKDQwMCUgMCAxMCAv
IDAuNSkiCi1QQVNTIGNvbXB1dGVkU3R5bGUoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFi
IDUwJSAtMTYwIDE2MCkiKSBpcyAibGFiKDUwJSAtMTYwIDE2MCkiCi1QQVNTIGNvbXB1dGVkU3R5
bGUoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIDUwJSAtMjAwIDIwMCkiKSBpcyAibGFi
KDUwJSAtMjAwIDIwMCkiCi1QQVNTIGNvbXB1dGVkU3R5bGUoImJhY2tncm91bmQtY29sb3IiLCAi
Y29sb3IobGFiIDAlIDAgMCAvIC0xMCUpIikgaXMgImxhYigwJSAwIDAgLyAwKSIKLVBBU1MgY29t
cHV0ZWRTdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgMCUgMCAwIC8gMTEwJSki
KSBpcyAibGFiKDAlIDAgMCkiCi1QQVNTIGNvbXB1dGVkU3R5bGUoImJhY2tncm91bmQtY29sb3Ii
LCAiY29sb3IobGFiIDAlIDAgMCAvIDMwMCUpIikgaXMgImxhYigwJSAwIDApIgotUEFTUyBjb21w
dXRlZFN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiA1MCUgLTIwMCkiKSBpcyAi
bGFiKDUwJSAtMjAwIDApIgotUEFTUyBjb21wdXRlZFN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwg
ImNvbG9yKGxhYiA1MCUpIikgaXMgImxhYig1MCUgMCAwKSIKLVBBU1MgY29tcHV0ZWRTdHlsZSgi
YmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIpIikgaXMgImxhYigwJSAwIDApIgotUEFTUyBj
b21wdXRlZFN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiA1MCUgLTIwMCAvIDAu
NSkiKSBpcyAibGFiKDUwJSAtMjAwIDAgLyAwLjUpIgotUEFTUyBjb21wdXRlZFN0eWxlKCJiYWNr
Z3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiA1MCUgLyAwLjUpIikgaXMgImxhYig1MCUgMCAwIC8g
MC41KSIKLVBBU1MgY29tcHV0ZWRTdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIg
LyAwLjUpIikgaXMgImxhYigwJSAwIDAgLyAwLjUpIgotUEFTUyBjb21wdXRlZFN0eWxlKCJiYWNr
Z3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiAtNDAlIDAgMCkiKSBpcyAibGFiKDAlIDAgMCkiCi1Q
QVNTIGNvbXB1dGVkU3R5bGUoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIDUwJSAtMjAg
MCkiKSBpcyAibGFiKDUwJSAtMjAgMCkiCi1QQVNTIGNvbXB1dGVkU3R5bGUoImJhY2tncm91bmQt
Y29sb3IiLCAiY29sb3IobGFiIDUwJSAwIC0yMCkiKSBpcyAibGFiKDUwJSAwIC0yMCkiCitQQVNT
IGNvbXB1dGVkU3R5bGUoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIDAlIDAgMCkiKSBp
cyAiY29sb3IobGFiIDAlIDAgMCkiCitQQVNTIGNvbXB1dGVkU3R5bGUoImJhY2tncm91bmQtY29s
b3IiLCAiY29sb3IobGFiIDAlIDAgMCAvIDEpIikgaXMgImNvbG9yKGxhYiAwJSAwIDApIgorUEFT
UyBjb21wdXRlZFN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiAwJSAwIDAgLyAw
LjUpIikgaXMgImNvbG9yKGxhYiAwJSAwIDAgLyAwLjUpIgorUEFTUyBjb21wdXRlZFN0eWxlKCJi
YWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiAyMCUgMCAxMC8wLjUpIikgaXMgImNvbG9yKGxh
YiAyMCUgMCAxMCAvIDAuNSkiCitQQVNTIGNvbXB1dGVkU3R5bGUoImJhY2tncm91bmQtY29sb3Ii
LCAiY29sb3IobGFiIDIwJSAwIDEwLzUwJSkiKSBpcyAiY29sb3IobGFiIDIwJSAwIDEwIC8gMC41
KSIKK1BBU1MgY29tcHV0ZWRTdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgNDAw
JSAwIDEwLzUwJSkiKSBpcyAiY29sb3IobGFiIDQwMCUgMCAxMCAvIDAuNSkiCitQQVNTIGNvbXB1
dGVkU3R5bGUoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIDUwJSAtMTYwIDE2MCkiKSBp
cyAiY29sb3IobGFiIDUwJSAtMTYwIDE2MCkiCitQQVNTIGNvbXB1dGVkU3R5bGUoImJhY2tncm91
bmQtY29sb3IiLCAiY29sb3IobGFiIDUwJSAtMjAwIDIwMCkiKSBpcyAiY29sb3IobGFiIDUwJSAt
MjAwIDIwMCkiCitQQVNTIGNvbXB1dGVkU3R5bGUoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3Io
bGFiIDAlIDAgMCAvIC0xMCUpIikgaXMgImNvbG9yKGxhYiAwJSAwIDAgLyAwKSIKK1BBU1MgY29t
cHV0ZWRTdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgMCUgMCAwIC8gMTEwJSki
KSBpcyAiY29sb3IobGFiIDAlIDAgMCkiCitQQVNTIGNvbXB1dGVkU3R5bGUoImJhY2tncm91bmQt
Y29sb3IiLCAiY29sb3IobGFiIDAlIDAgMCAvIDMwMCUpIikgaXMgImNvbG9yKGxhYiAwJSAwIDAp
IgorUEFTUyBjb21wdXRlZFN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiA1MCUg
LTIwMCkiKSBpcyAiY29sb3IobGFiIDUwJSAtMjAwIDApIgorUEFTUyBjb21wdXRlZFN0eWxlKCJi
YWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiA1MCUpIikgaXMgImNvbG9yKGxhYiA1MCUgMCAw
KSIKK1BBU1MgY29tcHV0ZWRTdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIpIikg
aXMgImNvbG9yKGxhYiAwJSAwIDApIgorUEFTUyBjb21wdXRlZFN0eWxlKCJiYWNrZ3JvdW5kLWNv
bG9yIiwgImNvbG9yKGxhYiA1MCUgLTIwMCAvIDAuNSkiKSBpcyAiY29sb3IobGFiIDUwJSAtMjAw
IDAgLyAwLjUpIgorUEFTUyBjb21wdXRlZFN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9y
KGxhYiA1MCUgLyAwLjUpIikgaXMgImNvbG9yKGxhYiA1MCUgMCAwIC8gMC41KSIKK1BBU1MgY29t
cHV0ZWRTdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgLyAwLjUpIikgaXMgImNv
bG9yKGxhYiAwJSAwIDAgLyAwLjUpIgorUEFTUyBjb21wdXRlZFN0eWxlKCJiYWNrZ3JvdW5kLWNv
bG9yIiwgImNvbG9yKGxhYiAtNDAlIDAgMCkiKSBpcyAiY29sb3IobGFiIDAlIDAgMCkiCitQQVNT
IGNvbXB1dGVkU3R5bGUoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIDUwJSAtMjAgMCki
KSBpcyAiY29sb3IobGFiIDUwJSAtMjAgMCkiCitQQVNTIGNvbXB1dGVkU3R5bGUoImJhY2tncm91
bmQtY29sb3IiLCAiY29sb3IobGFiIDUwJSAwIC0yMCkiKSBpcyAiY29sb3IobGFiIDUwJSAwIC0y
MCkiCiAKIFRlc3QgaW52YWxpZCB2YWx1ZXMKIFBBU1MgY29tcHV0ZWRTdHlsZSgiYmFja2dyb3Vu
ZC1jb2xvciIsICJsYWIoMCAwIDApIikgaXMgInJnYmEoMCwgMCwgMCwgMCkiCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2Nzcy9wYXJzaW5nLWxhYi1jb2xvcnMuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2Nzcy9wYXJzaW5nLWxhYi1jb2xvcnMuaHRtbAkocmV2aXNpb24gMjcz
MTAyKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jc3MvcGFyc2luZy1sYWItY29sb3JzLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiA8L2hlYWQ+CiA8Ym9keT4KIDxzY3JpcHQ+Ci0g
ICAgZGVzY3JpcHRpb24oIlRlc3QgdGhlIHBhcnNpbmcgb2YgbGFiLCBsY2ggYW5kIGdyYXkgY29s
b3JzLiIpOworICAgIGRlc2NyaXB0aW9uKCJUZXN0IHRoZSBwYXJzaW5nIG9mIGxhYiguLi4pLCBs
Y2goLi4uKSBhbmQgY29sb3IobGFiIC4uLikgY29sb3JzLiIpOwogCiAgICAgZnVuY3Rpb24gY29t
cHV0ZWRTdHlsZShwcm9wZXJ0eSwgdmFsdWUpCiAgICAgewpAQCAtNzQsMjYgKzc0LDI2IEBACiAK
ICAgICBkZWJ1ZygnJyk7CiAgICAgZGVidWcoJ2NvbG9yKGxhYiApJyk7Ci0gICAgdGVzdENvbXB1
dGVkKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiAwJSAwIDApIiwgImxhYigwJSAwIDAp
Iik7Ci0gICAgdGVzdENvbXB1dGVkKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiAwJSAw
IDAgLyAxKSIsICJsYWIoMCUgMCAwKSIpOwotICAgIHRlc3RDb21wdXRlZCgiYmFja2dyb3VuZC1j
b2xvciIsICJjb2xvcihsYWIgMCUgMCAwIC8gMC41KSIsICJsYWIoMCUgMCAwIC8gMC41KSIpOwot
ICAgIHRlc3RDb21wdXRlZCgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgMjAlIDAgMTAv
MC41KSIsICJsYWIoMjAlIDAgMTAgLyAwLjUpIik7Ci0gICAgdGVzdENvbXB1dGVkKCJiYWNrZ3Jv
dW5kLWNvbG9yIiwgImNvbG9yKGxhYiAyMCUgMCAxMC81MCUpIiwgImxhYigyMCUgMCAxMCAvIDAu
NSkiKTsKLSAgICB0ZXN0Q29tcHV0ZWQoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIDQw
MCUgMCAxMC81MCUpIiwgImxhYig0MDAlIDAgMTAgLyAwLjUpIik7Ci0gICAgdGVzdENvbXB1dGVk
KCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiA1MCUgLTE2MCAxNjApIiwgImxhYig1MCUg
LTE2MCAxNjApIik7Ci0gICAgdGVzdENvbXB1dGVkKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9y
KGxhYiA1MCUgLTIwMCAyMDApIiwgImxhYig1MCUgLTIwMCAyMDApIik7Ci0gICAgdGVzdENvbXB1
dGVkKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiAwJSAwIDAgLyAtMTAlKSIsICJsYWIo
MCUgMCAwIC8gMCkiKTsKLSAgICB0ZXN0Q29tcHV0ZWQoImJhY2tncm91bmQtY29sb3IiLCAiY29s
b3IobGFiIDAlIDAgMCAvIDExMCUpIiwgImxhYigwJSAwIDApIik7Ci0gICAgdGVzdENvbXB1dGVk
KCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiAwJSAwIDAgLyAzMDAlKSIsICJsYWIoMCUg
MCAwKSIpOwotICAgIHRlc3RDb21wdXRlZCgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIg
NTAlIC0yMDApIiwgImxhYig1MCUgLTIwMCAwKSIpOwotICAgIHRlc3RDb21wdXRlZCgiYmFja2dy
b3VuZC1jb2xvciIsICJjb2xvcihsYWIgNTAlKSIsICJsYWIoNTAlIDAgMCkiKTsKLSAgICB0ZXN0
Q29tcHV0ZWQoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiKSIsICJsYWIoMCUgMCAwKSIp
OwotICAgIHRlc3RDb21wdXRlZCgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgNTAlIC0y
MDAgLyAwLjUpIiwgImxhYig1MCUgLTIwMCAwIC8gMC41KSIpOwotICAgIHRlc3RDb21wdXRlZCgi
YmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgNTAlIC8gMC41KSIsICJsYWIoNTAlIDAgMCAv
IDAuNSkiKTsKLSAgICB0ZXN0Q29tcHV0ZWQoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFi
IC8gMC41KSIsICJsYWIoMCUgMCAwIC8gMC41KSIpOwotICAgIHRlc3RDb21wdXRlZCgiYmFja2dy
b3VuZC1jb2xvciIsICJjb2xvcihsYWIgLTQwJSAwIDApIiwgImxhYigwJSAwIDApIik7Ci0gICAg
dGVzdENvbXB1dGVkKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiA1MCUgLTIwIDApIiwg
ImxhYig1MCUgLTIwIDApIik7Ci0gICAgdGVzdENvbXB1dGVkKCJiYWNrZ3JvdW5kLWNvbG9yIiwg
ImNvbG9yKGxhYiA1MCUgMCAtMjApIiwgImxhYig1MCUgMCAtMjApIik7CisgICAgdGVzdENvbXB1
dGVkKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiAwJSAwIDApIiwgImNvbG9yKGxhYiAw
JSAwIDApIik7CisgICAgdGVzdENvbXB1dGVkKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxh
YiAwJSAwIDAgLyAxKSIsICJjb2xvcihsYWIgMCUgMCAwKSIpOworICAgIHRlc3RDb21wdXRlZCgi
YmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgMCUgMCAwIC8gMC41KSIsICJjb2xvcihsYWIg
MCUgMCAwIC8gMC41KSIpOworICAgIHRlc3RDb21wdXRlZCgiYmFja2dyb3VuZC1jb2xvciIsICJj
b2xvcihsYWIgMjAlIDAgMTAvMC41KSIsICJjb2xvcihsYWIgMjAlIDAgMTAgLyAwLjUpIik7Cisg
ICAgdGVzdENvbXB1dGVkKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiAyMCUgMCAxMC81
MCUpIiwgImNvbG9yKGxhYiAyMCUgMCAxMCAvIDAuNSkiKTsKKyAgICB0ZXN0Q29tcHV0ZWQoImJh
Y2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIDQwMCUgMCAxMC81MCUpIiwgImNvbG9yKGxhYiA0
MDAlIDAgMTAgLyAwLjUpIik7CisgICAgdGVzdENvbXB1dGVkKCJiYWNrZ3JvdW5kLWNvbG9yIiwg
ImNvbG9yKGxhYiA1MCUgLTE2MCAxNjApIiwgImNvbG9yKGxhYiA1MCUgLTE2MCAxNjApIik7Cisg
ICAgdGVzdENvbXB1dGVkKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiA1MCUgLTIwMCAy
MDApIiwgImNvbG9yKGxhYiA1MCUgLTIwMCAyMDApIik7CisgICAgdGVzdENvbXB1dGVkKCJiYWNr
Z3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiAwJSAwIDAgLyAtMTAlKSIsICJjb2xvcihsYWIgMCUg
MCAwIC8gMCkiKTsKKyAgICB0ZXN0Q29tcHV0ZWQoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3Io
bGFiIDAlIDAgMCAvIDExMCUpIiwgImNvbG9yKGxhYiAwJSAwIDApIik7CisgICAgdGVzdENvbXB1
dGVkKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiAwJSAwIDAgLyAzMDAlKSIsICJjb2xv
cihsYWIgMCUgMCAwKSIpOworICAgIHRlc3RDb21wdXRlZCgiYmFja2dyb3VuZC1jb2xvciIsICJj
b2xvcihsYWIgNTAlIC0yMDApIiwgImNvbG9yKGxhYiA1MCUgLTIwMCAwKSIpOworICAgIHRlc3RD
b21wdXRlZCgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgNTAlKSIsICJjb2xvcihsYWIg
NTAlIDAgMCkiKTsKKyAgICB0ZXN0Q29tcHV0ZWQoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3Io
bGFiKSIsICJjb2xvcihsYWIgMCUgMCAwKSIpOworICAgIHRlc3RDb21wdXRlZCgiYmFja2dyb3Vu
ZC1jb2xvciIsICJjb2xvcihsYWIgNTAlIC0yMDAgLyAwLjUpIiwgImNvbG9yKGxhYiA1MCUgLTIw
MCAwIC8gMC41KSIpOworICAgIHRlc3RDb21wdXRlZCgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xv
cihsYWIgNTAlIC8gMC41KSIsICJjb2xvcihsYWIgNTAlIDAgMCAvIDAuNSkiKTsKKyAgICB0ZXN0
Q29tcHV0ZWQoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIC8gMC41KSIsICJjb2xvcihs
YWIgMCUgMCAwIC8gMC41KSIpOworICAgIHRlc3RDb21wdXRlZCgiYmFja2dyb3VuZC1jb2xvciIs
ICJjb2xvcihsYWIgLTQwJSAwIDApIiwgImNvbG9yKGxhYiAwJSAwIDApIik7CisgICAgdGVzdENv
bXB1dGVkKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiA1MCUgLTIwIDApIiwgImNvbG9y
KGxhYiA1MCUgLTIwIDApIik7CisgICAgdGVzdENvbXB1dGVkKCJiYWNrZ3JvdW5kLWNvbG9yIiwg
ImNvbG9yKGxhYiA1MCUgMCAtMjApIiwgImNvbG9yKGxhYiA1MCUgMCAtMjApIik7CiAKICAgICBk
ZWJ1ZygnJyk7CiAgICAgZGVidWcoJ1Rlc3QgaW52YWxpZCB2YWx1ZXMnKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421092</attachid>
            <date>2021-02-20 10:34:48 -0800</date>
            <delta_ts>2021-02-20 16:48:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222110-20210220103447.patch</filename>
            <type>text/plain</type>
            <size>64260</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MzE5OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk1IEBACisyMDIxLTAyLTIwICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBjb2xvcihsYWIgLi4uKSBzaG91bGQg
c2VyaWFsaXplIGFzIGNvbG9yKGxhYiAuLi4pIG5vdCBsYWIoKSBhY2NvcmRpbmcgdG8gbGF0ZXN0
IENTUyBDb2xvciA0IHNwZWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyMjExMAorCisgICAgICAgIFJldmlld2VkIGJ5IERlYW4gSmFja3Nvbi4KKwor
ICAgICAgICBUbyBtYWtlIHRoaXMgd29yayBpdCB3YXMgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgc28g
dGhhdCBleHRlbmRlZCBjb2xvcnMsIGxpa2UgTGFiLAorICAgICAgICBjb3VsZCBzdG9yZSBhbiBl
eHRyYSBiaXQgb2YgZGF0YSBvbiBDb2xvciB0byBpbmRpY2F0ZSB0aGF0IGl0IHNob3VsZCB1c2Ug
dGhlCisgICAgICAgIGNvbG9yKCkgZnVuY3Rpb24gZm9yIHNlcmlhbGl6YXRpb24gd2hlbiBwYXJz
ZWQgdXNpbmcgdGhlIGNvbG9yKCkgZm9ybS4KKworICAgICAgICBUbyBkbyB0aGF0LCBDb2xvciB3
YXMgcmV3b3JrZWQgdG8gYWxsb3cgZXh0cmEgbWV0YWRhdGEgZmxhZ3MgZm9yIGJvdGggaW5saW5l
IGFuZCAKKyAgICAgICAgZXh0ZW5kZWQgY29sb3JzLiBQcmV2aW91c2x5LCBvbmx5IGlubGluZSBj
b2xvcnMgY291bGQgbWFrZSB1c2Ugb2YgdGhlIGV4dHJhIGJpdHMuCisgICAgICAgIE5vdywgd2Ug
dGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdCB3ZSBoYXZlIHRoZSBoaWdoIDE2IGJpdHMg
YXZhaWxhYmxlIHRvIHVzCisgICAgICAgIGZvciBwb2ludGVycyB0byBhbHNvIHN0b3JlIHRoYXQg
bWV0YWRhdGEgZm9yIGV4dGVuZGVkIGNvbG9ycy4gUmF0aGVyIHRoYW4gdXNpbmcgYQorICAgICAg
ICB1bmlvbiwgd2UgZW5jb2RlIHRoZSBwb2ludGVyIC8gaW5saW5lIGNvbG9yIGludG8gYSB1aW50
NjRfdCwgYW5kIHVzZSB0aGUgZXh0cmEgYml0cworICAgICAgICBmb3IgdGhlIGZsYWdzIHdlIG5l
ZWQuIEN1cnJlbnRseSB3ZSBvbmx5IHVzZSA2LCBzbyB0aGVyZSBpcyBxdWl0ZSBhIGJpdCBtb3Jl
IHRoYXQKKyAgICAgICAgY291bGQgYmUgdXNlZCBoZXJlLgorCisgICAgICAgIEZpbmFsbHksIHRo
ZSBjb2xvciBzZXJpYWxpemF0aW9uIGNvZGUgaGFzIGJlZW4gdXBkYXRlZCB0byBjaGVjayBmb3Ig
dGhlIG5ldyBiaXQsCisgICAgICAgIGNhbGxlZCBVc2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlv
biwgYW5kIHRvIHNlcmlhbGl6ZSB1c2luZyBjb2xvcigpIG5vdGF0aW9uCisgICAgICAgIGlmIGl0
IGlzIHNldC4KKworICAgICAgICBXZSBhcmUgY3VycmVudGx5IG9ubHkgdGFraW5nIGFkdmFudGFn
ZSBvZiB0aGlzIGZvciBkaWZmZXJlbnRpYXRpbmcgYmV0d2VlbiBsYWIoLi4uKQorICAgICAgICBh
bmQgY29sb3IobGFiIC4uLiksIGJ1dCBpbiB0aGUgZnV0dXJlIHdlIHNob3VsZCBiZSBhYmxlIHRv
IGFsc28gb3B0aW1pemUgY29sb3Ioc3JnYiAuLi4pCisgICAgICAgIHZhbHVlcyB0aGF0IGNhbiBi
ZSByZXByZXNlbnRlZCBmdWxseSBieSBTUkdCQTx1aW50OF90Pi4KKworICAgICAgICBTaW5jZSB3
ZSBjYW4gbm93IGFkZCBmbGFncyBmb3IgZXh0ZW5kZWQgY29sb3JzLCB0aGUgc2VtYW50aWMgYml0
IGlzIGFsc28gbm93IHVzYWJsZQorICAgICAgICBmb3IgZXh0ZW5kZWQgY29sb3JzLCB0aG91Z2gg
bm9uZSBjdXJyZW50bHkgZXhpc3QuCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5
UGFyc2VySGVscGVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnM6OnBhcnNlQ29sb3JGdW5jdGlvbkZvclJHQlR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VDb2xvckZ1bmN0aW9uRm9yTGFiUGFyYW1l
dGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNl
Q29sb3JGdW5jdGlvbkZvclhZWlBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUNvbG9yRnVuY3Rpb25QYXJhbWV0ZXJzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Om9wZXJhdG9yPSk6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29sb3I6OnNlbWFudGljQ29sb3IgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNIYXNoVGFibGVEZWxldGVk
VmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OkNvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjp0b0FsbEZsYWdzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpz
ZXRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6c2V0RXh0ZW5kZWRDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OmV4dGVuZGVk
Q29sb3JzRXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6ZXh0ZW5kZWRDb2xvcnNFcXVhbElnbm9y
aW5nU2VtYW50aWNDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjplcXVhbElnbm9yaW5nU2VtYW50
aWNDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6fkNvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjpoYXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc1Zh
bGlkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc1NlbWFudGljIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp1c2VzQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmZsYWdzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjppc0V4dGVuZGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjppc0lubGluZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YXNFeHRlbmRl
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YXNFeHRlbmRlZFJlZiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YXNJbmxpbmUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29sb3I6OmFzUGFja2VkSW5saW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjplbmNvZGVkRmxhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmVuY29kZWRJbmxp
bmVDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZW5jb2RlZFBhY2tlZElubGluZUNv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjplbmNvZGVkRXh0ZW5kZWRDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGVjb2RlZEZsYWdzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjpkZWNvZGVkSW5saW5lQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRl
Y29kZWRQYWNrZWRJbmxpbmVDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGVjb2Rl
ZEV4dGVuZGVkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNldEludmFsaWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0YWdBc1NlbWFudGlj
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0YWdBc1ZhbGlkKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckJsZW5kaW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmJsZW5kV2l0aFdoaXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvclNlcmlhbGl6YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXphdGlv
bkZvckNTUyk6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemF0aW9uRm9ySFRNTCk6CisgICAg
ICAgIChXZWJDb3JlOjpzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpzZXJpYWxpemF0aW9uVXNpbmdDb2xvckZ1bmN0aW9uKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
OjpDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6c2VtYW50aWNDb2xvckZyb21OU0NvbG9yKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpzeXN0ZW1Db2xv
ckZyb21DU1NWYWx1ZUlEU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c3lzdGVtQ29sb3JG
cm9tQ1NTVmFsdWVJRCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnN5c3RlbUNvbG9yIGNvbnN0KToKKwog
MjAyMS0wMi0yMCAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtM
RkNdW0ludGVncmF0aW9uXSBFbmNsb3NpbmcgdG9wIGFuZCBib3R0b20gdmFsdWUgYXJlIHJlbGF0
aXZlIHRvIHRoZSBjb250YWluaW5nIGJsb2NrJ3MgYm9yZGVyIGJveApJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNw
cAkocmV2aXNpb24gMjczMTk5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcxLDcgKzEzNzEsNyBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRpYyBDb2xvCiAgICAgaWYgKCFhbHBo
YSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHJldHVybiBDb2xvclR5cGUgeyBjbGFtcFRv
PGZsb2F0PihjaGFubmVsc1swXSwgMC4wLCAxLjApLCBjbGFtcFRvPGZsb2F0PihjaGFubmVsc1sx
XSwgMC4wLCAxLjApLCBjbGFtcFRvPGZsb2F0PihjaGFubmVsc1syXSwgMC4wLCAxLjApLCBzdGF0
aWNfY2FzdDxmbG9hdD4oKmFscGhhKSB9OworICAgIHJldHVybiB7IENvbG9yVHlwZSB7IGNsYW1w
VG88ZmxvYXQ+KGNoYW5uZWxzWzBdLCAwLjAsIDEuMCksIGNsYW1wVG88ZmxvYXQ+KGNoYW5uZWxz
WzFdLCAwLjAsIDEuMCksIGNsYW1wVG88ZmxvYXQ+KGNoYW5uZWxzWzJdLCAwLjAsIDEuMCksIHN0
YXRpY19jYXN0PGZsb2F0PigqYWxwaGEpIH0sIENvbG9yOjpGbGFnczo6VXNlQ29sb3JGdW5jdGlv
blNlcmlhbGl6YXRpb24gfTsKIH0KIAogc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbkZv
ckxhYlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncykKQEAgLTE0MDMsNyArMTQw
Myw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25Gb3JMYWJQYXIKIAogICAgIGF1
dG8gbm9ybWFsaXplZExpZ2h0bmVzcyA9IHN0ZDo6bWF4KDAuMCwgY2hhbm5lbHNbMF0pOwogCi0g
ICAgcmV0dXJuIExhYjxmbG9hdD4geyBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsaXplZExpZ2h0
bmVzcyksIHN0YXRpY19jYXN0PGZsb2F0PihjaGFubmVsc1sxXSksIHN0YXRpY19jYXN0PGZsb2F0
PihjaGFubmVsc1syXSksIHN0YXRpY19jYXN0PGZsb2F0PigqYWxwaGEpIH07CisgICAgcmV0dXJu
IHsgTGFiPGZsb2F0PiB7IHN0YXRpY19jYXN0PGZsb2F0Pihub3JtYWxpemVkTGlnaHRuZXNzKSwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGNoYW5uZWxzWzFdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNoYW5u
ZWxzWzJdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCphbHBoYSkgfSwgQ29sb3I6OkZsYWdzOjpVc2VD
b2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbiB9OwogfQogCiBzdGF0aWMgQ29sb3IgcGFyc2VDb2xv
ckZ1bmN0aW9uRm9yWFlaUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzKQpAQCAt
MTQzMyw3ICsxNDMzLDcgQEAgc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbkZvclhZWlBh
cgogICAgIGlmICghYWxwaGEpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4gWFla
QTxmbG9hdCwgV2hpdGVQb2ludDo6RDUwPiB7IHN0YXRpY19jYXN0PGZsb2F0PihjaGFubmVsc1sw
XSksIHN0YXRpY19jYXN0PGZsb2F0PihjaGFubmVsc1sxXSksIHN0YXRpY19jYXN0PGZsb2F0Pihj
aGFubmVsc1syXSksIHN0YXRpY19jYXN0PGZsb2F0PigqYWxwaGEpIH07CisgICAgcmV0dXJuIHsg
WFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDUwPiB7IHN0YXRpY19jYXN0PGZsb2F0PihjaGFubmVs
c1swXSksIHN0YXRpY19jYXN0PGZsb2F0PihjaGFubmVsc1sxXSksIHN0YXRpY19jYXN0PGZsb2F0
PihjaGFubmVsc1syXSksIHN0YXRpY19jYXN0PGZsb2F0PigqYWxwaGEpIH0sIENvbG9yOjpGbGFn
czo6VXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24gfTsKIH0KIAogc3RhdGljIENvbG9yIHBh
cnNlQ29sb3JGdW5jdGlvblBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCkBA
IC0xNDc2LDYgKzE0NzYsNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uUGFyYW1l
dGVyCiAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKKyAgICBB
U1NFUlQoY29sb3IudXNlc0NvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKCkpOwogICAgIHJldHVy
biBjb2xvcjsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yLmNwcAkocmV2aXNpb24gMjczMTk5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsMTAgKzM3LDEwIEBAIHN0YXRp
YyBjb25zdGV4cHIgYXV0byBsaWdodGVuZWRCbGFjayA9IFMKIHN0YXRpYyBjb25zdGV4cHIgYXV0
byBkYXJrZW5lZFdoaXRlID0gU1JHQkE8dWludDhfdD4geyAxNzEsIDE3MSwgMTcxIH07CiAKIENv
bG9yOjpDb2xvcihjb25zdCBDb2xvciYgb3RoZXIpCi0gICAgOiBtX2NvbG9yRGF0YShvdGhlci5t
X2NvbG9yRGF0YSkKKyAgICA6IG1fY29sb3JBbmRGbGFncyhvdGhlci5tX2NvbG9yQW5kRmxhZ3Mp
CiB7CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRD
b2xvci0+cmVmKCk7CisgICAgICAgIGFzRXh0ZW5kZWQoKS5yZWYoKTsKIH0KIAogQ29sb3I6OkNv
bG9yKENvbG9yJiYgb3RoZXIpCkBAIC01NCwxMiArNTQsMTMgQEAgQ29sb3ImIENvbG9yOjpvcGVy
YXRvcj0oY29uc3QgQ29sb3ImIG90aAogICAgICAgICByZXR1cm4gKnRoaXM7CiAKICAgICBpZiAo
aXNFeHRlbmRlZCgpKQotICAgICAgICBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5kZXJlZigp
OworICAgICAgICBhc0V4dGVuZGVkKCkuZGVyZWYoKTsKIAotICAgIG1fY29sb3JEYXRhID0gb3Ro
ZXIubV9jb2xvckRhdGE7CisgICAgbV9jb2xvckFuZEZsYWdzID0gb3RoZXIubV9jb2xvckFuZEZs
YWdzOwogCiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgbV9jb2xvckRhdGEuZXh0ZW5k
ZWRDb2xvci0+cmVmKCk7CisgICAgICAgIGFzRXh0ZW5kZWQoKS5yZWYoKTsKKwogICAgIHJldHVy
biAqdGhpczsKIH0KIApAQCAtNjksMTAgKzcwLDEwIEBAIENvbG9yJiBDb2xvcjo6b3BlcmF0b3I9
KENvbG9yJiYgb3RoZXIpCiAgICAgICAgIHJldHVybiAqdGhpczsKIAogICAgIGlmIChpc0V4dGVu
ZGVkKCkpCi0gICAgICAgIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmRlcmVmKCk7CisgICAg
ICAgIGFzRXh0ZW5kZWQoKS5kZXJlZigpOwogCi0gICAgbV9jb2xvckRhdGEgPSBvdGhlci5tX2Nv
bG9yRGF0YTsKLSAgICBvdGhlci5tX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzID0gaW52
YWxpZElubGluZUNvbG9yOworICAgIG1fY29sb3JBbmRGbGFncyA9IG90aGVyLm1fY29sb3JBbmRG
bGFnczsKKyAgICBvdGhlci5tX2NvbG9yQW5kRmxhZ3MgPSBpbnZhbGlkQ29sb3JBbmRGbGFnczsK
IAogICAgIHJldHVybiAqdGhpczsKIH0KQEAgLTEyMywxOSArMTI0LDE1IEBAIGZsb2F0IENvbG9y
OjpsdW1pbmFuY2UoKSBjb25zdAogCiBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEoZmxvYXQg
YWxwaGEpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNhbGxPblVuZGVybHlpbmdUeXBlKFdURjo6bWFr
ZVZpc2l0b3IoCi0gICAgICAgIFsmXSAoY29uc3QgU1JHQkE8dWludDhfdD4mIHVuZGVybHlpbmdD
b2xvcikgLT4gQ29sb3IgewotICAgICAgICAgICAgQ29sb3IgcmVzdWx0ID0gY29sb3JXaXRoT3Zl
cnJpZGVuQWxwaGEodW5kZXJseWluZ0NvbG9yLCBhbHBoYSk7Ci0KLSAgICAgICAgICAgIC8vIEZJ
WE1FOiBXaHkgaXMgcHJlc2VydmluZyB0aGUgc2VtYW50aWMgYml0IGRlc2lyZWQgYW5kL29yIGNv
cnJlY3QgaGVyZT8KLSAgICAgICAgICAgIGlmIChpc1NlbWFudGljKCkpCi0gICAgICAgICAgICAg
ICAgcmVzdWx0LnRhZ0FzU2VtYW50aWMoKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29uc3QgYXV0byYgdW5kZXJseWluZ0NvbG9yKSAtPiBD
b2xvciB7Ci0gICAgICAgICAgICByZXR1cm4gY29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEodW5kZXJs
eWluZ0NvbG9yLCBhbHBoYSk7Ci0gICAgICAgIH0KLSAgICApKTsKKyAgICByZXR1cm4gY2FsbE9u
VW5kZXJseWluZ1R5cGUoWyZdIChjb25zdCBhdXRvJiB1bmRlcmx5aW5nQ29sb3IpIC0+IENvbG9y
IHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBjb2xvcldpdGhPdmVycmlkZGVuQWxwaGEodW5kZXJs
eWluZ0NvbG9yLCBhbHBoYSk7CisKKyAgICAgICAgLy8gRklYTUU6IFdoeSBpcyBwcmVzZXJ2aW5n
IHRoZSBzZW1hbnRpYyBiaXQgZGVzaXJlZCBhbmQvb3IgY29ycmVjdCBoZXJlPworICAgICAgICBp
ZiAoaXNTZW1hbnRpYygpKQorICAgICAgICAgICAgcmV0dXJuIHsgcmVzdWx0LCBGbGFnczo6U2Vt
YW50aWMgfTsKKworICAgICAgICByZXR1cm4geyByZXN1bHQgfTsKKyAgICB9KTsKIH0KIAogQ29s
b3IgQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpIGNvbnN0CkBAIC0x
NDcsOSArMTQ0LDkgQEAgQ29sb3IgQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYQog
ICAgICAgICAvLyBiZXR0ZXIgZm9yIG5vbi1pbnZlcnRpYmxlIGNvbG9yIHR5cGVzIGxpa2UgTGFi
IG9yIGNvbnNpZGVyIHJlbW92aW5nIHRoaXMgaW4gZmF2b3IKICAgICAgICAgLy8gb2YgYWx0ZXJu
YXRpdmVzLgogICAgICAgICBpZiBjb25zdGV4cHIgKENvbG9yVHlwZTo6TW9kZWw6OmlzSW52ZXJ0
aWJsZSkKLSAgICAgICAgICAgIHJldHVybiBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFscGhh
KHVuZGVybHlpbmdDb2xvciwgYWxwaGEpOworICAgICAgICAgICAgcmV0dXJuIGludmVydGVkY29s
b3JXaXRoT3ZlcnJpZGRlbkFscGhhKHVuZGVybHlpbmdDb2xvciwgYWxwaGEpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICByZXR1cm4gaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYShj
b252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pih1bmRlcmx5aW5nQ29sb3IpLCBhbHBoYSk7CisgICAg
ICAgICAgICByZXR1cm4gaW52ZXJ0ZWRjb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29udmVydENv
bG9yPFNSR0JBPGZsb2F0Pj4odW5kZXJseWluZ0NvbG9yKSwgYWxwaGEpOwogICAgIH0pOwogfQog
CkBAIC0xNTcsOCArMTU0LDEwIEBAIENvbG9yIENvbG9yOjpzZW1hbnRpY0NvbG9yKCkgY29uc3QK
IHsKICAgICBpZiAoaXNTZW1hbnRpYygpKQogICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICBy
ZXR1cm4geyB0b1NSR0JBTG9zc3k8dWludDhfdD4oKSwgU2VtYW50aWMgfTsKKyAgICAKKyAgICBp
ZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICByZXR1cm4geyBhc0V4dGVuZGVkUmVmKCksIEZsYWdz
OjpTZW1hbnRpYyB9OworICAgIHJldHVybiB7IGFzSW5saW5lKCksIEZsYWdzOjpTZW1hbnRpYyB9
OwogfQogCiBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0Pj4gQ29s
b3I6OmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjczMTk5KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDcg
KzMxLDkgQEAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoRnVu
Y3Rpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hlci5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25T
ZXQuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CiAKICNpZiBVU0UoQ0cpCiB0eXBlZGVmIHN0cnVjdCBDR0NvbG9yKiBDR0NvbG9yUmVm
OwpAQCAtNTYsMzIgKzU4LDI3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vICAgIC0gU3BlY2lh
bCAiaW52YWxpZCBjb2xvciIgc3RhdGUsIHRyZWF0ZWQgYXMgdHJhbnNwYXJlbnQgYmxhY2sgYnV0
IGRpc3Rpbmd1aXNoYWJsZQogLy8gICAgLSA0eCA4LWJpdCAoMC0yNTUpIHNSR0JBLCBzdG9yZWQg
aW5saW5lLCBubyBhbGxvY2F0aW9uCiAvLyAgICAtIDR4IGZsb2F0IGNvbG9yIGNvbXBvbmVudHMg
KyBjb2xvciBzcGFjZSwgc3RvcmVkIGluIGEgcmVmZXJlbmNlIGNvdW50ZWQgc3ViLW9iamVjdAot
Ly8KLS8vIEFkZGl0aW9uYWxseSwgdGhlIGlubGluZSA4LWJpdCBzUkdCQSBjYW4gaGF2ZSBhbiBv
cHRpb25hbCAic2VtYW50aWMiIGJpdCBzZXQgb24gaXQsCi0vLyB3aGljaCBpbmRpY2F0ZXMgdGhl
IGNvbG9yIG9yaWdpbmF0ZWQgZnJvbSBhIENTUyBzZW1hbnRpYyBjb2xvciBuYW1lLgotLy8gRklY
TUU6IElmIHdlIGtlZXAgdGhlICJzZW1hbnRpYyIgYml0IG9uIENvbG9yLCB3ZSBzaG91bGQgZXh0
ZW5kIHN1cHBvcnQgdG8gYWxsIGNvbG9ycywKLS8vIG5vdCBqdXN0IGlubGluZSBvbmVzLCBieSB1
c2luZyB0aGUgdW51c2VkIHBvaW50ZXIgYml0cy4KIAogY2xhc3MgQ29sb3IgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIENvbG9yKCkgPSBkZWZhdWx0OwotCi0g
ICAgQ29sb3IoU1JHQkE8dWludDhfdD4pOwotICAgIENvbG9yKE9wdGlvbmFsPFNSR0JBPHVpbnQ4
X3Q+Pik7CisgICAgZW51bSBjbGFzcyBGbGFncyB7CisgICAgICAgIFNlbWFudGljICAgICAgICAg
ICAgICAgICAgICAgICAgPSAxIDw8IDAsCisgICAgICAgIFVzZUNvbG9yRnVuY3Rpb25TZXJpYWxp
emF0aW9uICAgPSAxIDw8IDEsCisgICAgfTsKIAotICAgIGVudW0gU2VtYW50aWNUYWcgeyBTZW1h
bnRpYyB9OwotICAgIENvbG9yKFNSR0JBPHVpbnQ4X3Q+LCBTZW1hbnRpY1RhZyk7Ci0gICAgQ29s
b3IoT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+LCBTZW1hbnRpY1RhZyk7CisgICAgQ29sb3IoKSA9
IGRlZmF1bHQ7CiAKLSAgICBDb2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+LCBDb2xvclNwYWNl
KTsKKyAgICBDb2xvcihTUkdCQTx1aW50OF90PiwgT3B0aW9uU2V0PEZsYWdzPiA9IHsgfSk7Cisg
ICAgQ29sb3IoT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+LCBPcHRpb25TZXQ8RmxhZ3M+ID0geyB9
KTsKIAorICAgIENvbG9yKENvbG9yQ29tcG9uZW50czxmbG9hdD4sIENvbG9yU3BhY2UsIE9wdGlv
blNldDxGbGFncz4gPSB7IH0pOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWZfdDxJc0NvbG9yVHlwZVdpdGhDb21wb25lbnRUeXBlPENvbG9y
VHlwZSwgZmxvYXQ+PiogPSBudWxscHRyPgotICAgIENvbG9yKGNvbnN0IENvbG9yVHlwZSYpOwor
ICAgIENvbG9yKGNvbnN0IENvbG9yVHlwZSYsIE9wdGlvblNldDxGbGFncz4gPSB7IH0pOwogCiAg
ICAgZXhwbGljaXQgQ29sb3IoV1RGOjpIYXNoVGFibGVFbXB0eVZhbHVlVHlwZSk7CiAgICAgZXhw
bGljaXQgQ29sb3IoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKTsKLSAgICBib29sIGlz
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvckRhdGEuaW5saW5l
Q29sb3JBbmRGbGFncyA9PSBkZWxldGVkSGFzaFZhbHVlOyB9CisgICAgYm9vbCBpc0hhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSgpIGNvbnN0OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoY29uc3Qg
Q29sb3ImKTsKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihDb2xvciYmKTsKQEAgLTkzLDggKzkw
LDkgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OwogCi0gICAgYm9vbCBp
c1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpIHx8IChtX2NvbG9yRGF0YS5pbmxp
bmVDb2xvckFuZEZsYWdzICYgdmFsaWRJbmxpbmVDb2xvckJpdCk7IH0KLSAgICBib29sIGlzU2Vt
YW50aWMoKSBjb25zdCB7IHJldHVybiBpc0lubGluZSgpICYmIChtX2NvbG9yRGF0YS5pbmxpbmVD
b2xvckFuZEZsYWdzICYgaXNTZW1hbnRpY0lubGluZUNvbG9yQml0KTsgfQorICAgIGJvb2wgaXNW
YWxpZCgpIGNvbnN0OworICAgIGJvb2wgaXNTZW1hbnRpYygpIGNvbnN0OworICAgIGJvb2wgdXNl
c0NvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKCkgY29uc3Q7CiAKICAgICBib29sIGlzT3BhcXVl
KCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgPT0g
MS4wIDogYXNJbmxpbmUoKS5hbHBoYSA9PSAyNTU7IH0KICAgICBib29sIGlzVmlzaWJsZSgpIGNv
bnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpID4gMC4wIDog
YXNJbmxpbmUoKS5hbHBoYSA+IDA7IH0KQEAgLTE0MCw3ICsxMzgsNyBAQCBwdWJsaWM6CiAKICNp
ZiBVU0UoQ0cpCiAgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ0dDb2xvclJlZik7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgQ29sb3IoQ0dDb2xvclJlZiwgU2VtYW50aWNUYWcpOworICAgIFdFQkNPUkVf
RVhQT1JUIENvbG9yKENHQ29sb3JSZWYsIE9wdGlvblNldDxGbGFncz4pOwogI2VuZGlmCiAKICNp
ZiBQTEFURk9STShXSU4pCkBAIC0xNjQsOCArMTYyLDggQEAgcHVibGljOgogICAgIHN0YXRpYyBj
b25zdGV4cHIgYXV0byBkYXJrR3JlZW4gPSBTUkdCQTx1aW50OF90PiB7IDAsIDEyOCwgMCB9Owog
ICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBvcmFuZ2UgPSBTUkdCQTx1aW50OF90PiB7IDI1NSwg
MTI4LCAwIH07CiAKLSAgICBib29sIGlzRXh0ZW5kZWQoKSBjb25zdCB7IHJldHVybiAhKG1fY29s
b3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgJiBpbnZhbGlkSW5saW5lQ29sb3IpOyB9Ci0gICAg
Ym9vbCBpc0lubGluZSgpIGNvbnN0IHsgcmV0dXJuICFpc0V4dGVuZGVkKCk7IH0KKyAgICBib29s
IGlzRXh0ZW5kZWQoKSBjb25zdDsKKyAgICBib29sIGlzSW5saW5lKCkgY29uc3Q7CiAKICAgICBj
b25zdCBFeHRlbmRlZENvbG9yJiBhc0V4dGVuZGVkKCkgY29uc3Q7CiAgICAgU1JHQkE8dWludDhf
dD4gYXNJbmxpbmUoKSBjb25zdDsKQEAgLTE3NCw2ICsxNzIsNyBAQCBwdWJsaWM6CiAgICAgZnJp
ZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpOwogICAg
IGZyaWVuZCBib29sIGVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGNvbnN0IENvbG9yJiBhLCBj
b25zdCBDb2xvciYgYik7CiAgICAgZnJpZW5kIGJvb2wgZXh0ZW5kZWRDb2xvcnNFcXVhbChjb25z
dCBDb2xvciYsIGNvbnN0IENvbG9yJik7CisgICAgZnJpZW5kIGJvb2wgZXh0ZW5kZWRDb2xvcnNF
cXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcihjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7CiAK
ICAgICBzdGF0aWMgYm9vbCBpc0JsYWNrQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICBzdGF0aWMg
Ym9vbCBpc1doaXRlQ29sb3IoY29uc3QgQ29sb3ImKTsKQEAgLTE4MiwzMCArMTgxLDQ1IEBAIHB1
YmxpYzoKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q29sb3I+
IGRlY29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6Ci0gICAgQ29sb3IoUmVmPEV4dGVuZGVkQ29s
b3I+JiYpOworICAgIENvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmLCBPcHRpb25TZXQ8RmxhZ3M+
ID0geyB9KTsKIAotICAgIHZvaWQgc2V0Q29sb3IoU1JHQkE8dWludDhfdD4pOwotICAgIHZvaWQg
c2V0RXh0ZW5kZWRDb2xvcihSZWY8RXh0ZW5kZWRDb2xvcj4mJik7CisgICAgZW51bSBjbGFzcyBG
bGFnc0luY2x1ZGluZ1ByaXZhdGUgOiB1aW50MTZfdCB7CisgICAgICAgIFNlbWFudGljICAgICAg
ICAgICAgICAgICAgICAgICAgPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oRmxhZ3M6OlNlbWFudGlj
KSwKKyAgICAgICAgVXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24gICA9IHN0YXRpY19jYXN0
PHVpbnQxNl90PihGbGFnczo6VXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pLAorICAgICAg
ICBWYWxpZCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAyLAorICAgICAgICBFeHRl
bmRlZCAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAzLAorICAgICAgICBIYXNoVGFibGVF
bXB0eVZhbHVlICAgICAgICAgICAgID0gMSA8PCA0LAorICAgICAgICBIYXNoVGFibGVEZWxldGVk
VmFsdWUgICAgICAgICAgID0gMSA8PCA1LAorICAgIH07CisgICAgc3RhdGljIE9wdGlvblNldDxG
bGFnc0luY2x1ZGluZ1ByaXZhdGU+IHRvRmxhZ3NJbmNsdWRpbmdQcml2YXRlKE9wdGlvblNldDxG
bGFncz4gZmxhZ3MpIHsgcmV0dXJuIE9wdGlvblNldDxGbGFnc0luY2x1ZGluZ1ByaXZhdGU+Ojpm
cm9tUmF3KGZsYWdzLnRvUmF3KCkpOyB9CisKKyAgICBPcHRpb25TZXQ8RmxhZ3NJbmNsdWRpbmdQ
cml2YXRlPiBmbGFncygpIGNvbnN0OworCisgICAgdm9pZCBzZXRDb2xvcihTUkdCQTx1aW50OF90
PiwgT3B0aW9uU2V0PEZsYWdzSW5jbHVkaW5nUHJpdmF0ZT4gPSB7IH0pOworICAgIHZvaWQgc2V0
RXh0ZW5kZWRDb2xvcihSZWY8RXh0ZW5kZWRDb2xvcj4mJiwgT3B0aW9uU2V0PEZsYWdzSW5jbHVk
aW5nUHJpdmF0ZT4gPSB7IH0pOworCisgICAgUGFja2VkQ29sb3I6OlJHQkEgYXNQYWNrZWRJbmxp
bmUoKSBjb25zdDsKKyAgICBSZWY8RXh0ZW5kZWRDb2xvcj4gYXNFeHRlbmRlZFJlZigpIGNvbnN0
OworCisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1h
eE51bWJlck9mQml0c0luUG9pbnRlciA9IDQ4OworI2Vsc2UKKyAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIG1heE51bWJlck9mQml0c0luUG9pbnRlciA9IDMyOworI2VuZGlmCisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1aW50NjRfdCBjb2xvclZhbHVlTWFzayA9ICgxVUxMIDw8IG1heE51bWJl
ck9mQml0c0luUG9pbnRlcikgLSAxOwogCi0gICAgdm9pZCB0YWdBc1NlbWFudGljKCkgeyBtX2Nv
bG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzIHw9IGlzU2VtYW50aWNJbmxpbmVDb2xvckJpdDsg
fQotICAgIHZvaWQgdGFnQXNWYWxpZCgpIHsgbV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFn
cyB8PSB2YWxpZElubGluZUNvbG9yOyB9CisgICAgc3RhdGljIHVpbnQ2NF90IGVuY29kZWRGbGFn
cyhPcHRpb25TZXQ8RmxhZ3NJbmNsdWRpbmdQcml2YXRlPik7CisgICAgc3RhdGljIHVpbnQ2NF90
IGVuY29kZWRJbmxpbmVDb2xvcihTUkdCQTx1aW50OF90Pik7CisgICAgc3RhdGljIHVpbnQ2NF90
IGVuY29kZWRQYWNrZWRJbmxpbmVDb2xvcihQYWNrZWRDb2xvcjo6UkdCQSk7CisgICAgc3RhdGlj
IHVpbnQ2NF90IGVuY29kZWRFeHRlbmRlZENvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmKTsKKwor
ICAgIHN0YXRpYyBPcHRpb25TZXQ8RmxhZ3NJbmNsdWRpbmdQcml2YXRlPiBkZWNvZGVkRmxhZ3Mo
dWludDY0X3QpOworICAgIHN0YXRpYyBTUkdCQTx1aW50OF90PiBkZWNvZGVkSW5saW5lQ29sb3Io
dWludDY0X3QpOworICAgIHN0YXRpYyBQYWNrZWRDb2xvcjo6UkdCQSBkZWNvZGVkUGFja2VkSW5s
aW5lQ29sb3IodWludDY0X3QpOworICAgIHN0YXRpYyBFeHRlbmRlZENvbG9yJiBkZWNvZGVkRXh0
ZW5kZWRDb2xvcih1aW50NjRfdCk7CiAKLSAgICAvLyAweF9fX19fX18wMCBpcyBhbiBFeHRlbmRl
ZENvbG9yIHBvaW50ZXIuCi0gICAgLy8gMHhfX19fX19fMDEgaXMgYW4gaW52YWxpZCBpbmxpbmUg
Y29sb3IuCi0gICAgLy8gMHhfX19fX19fMTEgaXMgYSB2YWxpZCBpbmxpbmUgY29sb3IuCi0gICAg
c3RhdGljIGNvbnN0IHVpbnQ2NF90IGV4dGVuZGVkQ29sb3IgPSAweDA7Ci0gICAgc3RhdGljIGNv
bnN0IHVpbnQ2NF90IGludmFsaWRJbmxpbmVDb2xvciA9IDB4MTsKLSAgICBzdGF0aWMgY29uc3Qg
dWludDY0X3QgdmFsaWRJbmxpbmVDb2xvckJpdCA9IDB4MjsKLSAgICBzdGF0aWMgY29uc3QgdWlu
dDY0X3QgdmFsaWRJbmxpbmVDb2xvciA9IDB4MzsKLSAgICBzdGF0aWMgY29uc3QgdWludDY0X3Qg
aXNTZW1hbnRpY0lubGluZUNvbG9yQml0ID0gMHg0OwotCi0gICAgc3RhdGljIGNvbnN0IHVpbnQ2
NF90IGRlbGV0ZWRIYXNoVmFsdWUgPSAweEZGRkZGRkZGRkZGRkZGRkQ7Ci0gICAgc3RhdGljIGNv
bnN0IHVpbnQ2NF90IGVtcHR5SGFzaFZhbHVlID0gMHhGRkZGRkZGRkZGRkZGRkZCOwotCi0gICAg
dW5pb24gewotICAgICAgICB1aW50NjRfdCBpbmxpbmVDb2xvckFuZEZsYWdzIHsgaW52YWxpZElu
bGluZUNvbG9yIH07Ci0gICAgICAgIEV4dGVuZGVkQ29sb3IqIGV4dGVuZGVkQ29sb3I7Ci0gICAg
fSBtX2NvbG9yRGF0YTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGludmFsaWRDb2xv
ckFuZEZsYWdzID0gMDsKKyAgICB1aW50NjRfdCBtX2NvbG9yQW5kRmxhZ3MgeyBpbnZhbGlkQ29s
b3JBbmRGbGFncyB9OwogfTsKIAogYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiwgY29uc3Qg
Q29sb3ImKTsKQEAgLTIxMyw2ICsyMjcsNyBAQCBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29sb3Im
LCBjb25zdCBDb2xvCiAKIC8vIE9uZSBvciBib3RoIG11c3QgYmUgZXh0ZW5kZWQgY29sb3JzLgog
Ym9vbCBleHRlbmRlZENvbG9yc0VxdWFsKGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3ImKTsKK2Jv
b2wgZXh0ZW5kZWRDb2xvcnNFcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcihjb25zdCBDb2xvciYs
IGNvbnN0IENvbG9yJik7CiAKICNpZiBVU0UoQ0cpCiBXRUJDT1JFX0VYUE9SVCBDR0NvbG9yUmVm
IGNhY2hlZENHQ29sb3IoY29uc3QgQ29sb3ImKTsKQEAgLTIyNCw4ICsyMzksNyBAQCBpbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiBhLCBjCiB7CiAgICAgaWYgKGEuaXNFeHRlbmRl
ZCgpIHx8IGIuaXNFeHRlbmRlZCgpKQogICAgICAgICByZXR1cm4gZXh0ZW5kZWRDb2xvcnNFcXVh
bChhLCBiKTsKLQotICAgIHJldHVybiBhLm1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3Mg
PT0gYi5tX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzOworICAgIHJldHVybiBhLm1fY29s
b3JBbmRGbGFncyA9PSBiLm1fY29sb3JBbmRGbGFnczsKIH0KIAogaW5saW5lIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCkBAIC0yMzYsODggKzI1MCwxMDIg
QEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDb2xvciYgYSwgYwogaW5saW5lIGJvb2wg
ZXh0ZW5kZWRDb2xvcnNFcXVhbChjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCiB7CiAg
ICAgaWYgKGEuaXNFeHRlbmRlZCgpICYmIGIuaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4g
YS5hc0V4dGVuZGVkKCkgPT0gYi5hc0V4dGVuZGVkKCk7CisgICAgICAgIHJldHVybiBhLmFzRXh0
ZW5kZWQoKSA9PSBiLmFzRXh0ZW5kZWQoKSAmJiBhLmZsYWdzKCkgPT0gYi5mbGFncygpOwogCiAg
ICAgQVNTRVJUKGEuaXNFeHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgpKTsKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLWlubGluZSBib29sIGVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGNvbnN0
IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYikKK2lubGluZSBib29sIGV4dGVuZGVkQ29sb3JzRXF1
YWxJZ25vcmluZ1NlbWFudGljQ29sb3IoY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKQog
ewotICAgIGlmIChhLmlzRXh0ZW5kZWQoKSB8fCBiLmlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0
dXJuIGV4dGVuZGVkQ29sb3JzRXF1YWwoYSwgYik7Ci0gICAgcmV0dXJuIChhLm1fY29sb3JEYXRh
LmlubGluZUNvbG9yQW5kRmxhZ3MgJiB+Q29sb3I6OmlzU2VtYW50aWNJbmxpbmVDb2xvckJpdCkg
PT0gKGIubV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyAmIH5Db2xvcjo6aXNTZW1hbnRp
Y0lubGluZUNvbG9yQml0KTsKKyAgICBpZiAoYS5pc0V4dGVuZGVkKCkgJiYgYi5pc0V4dGVuZGVk
KCkpIHsKKyAgICAgICAgYXV0byBhRmxhZ3MgPSBhLmZsYWdzKCkgLSBDb2xvcjo6RmxhZ3NJbmNs
dWRpbmdQcml2YXRlOjpTZW1hbnRpYzsKKyAgICAgICAgYXV0byBiRmxhZ3MgPSBiLmZsYWdzKCkg
LSBDb2xvcjo6RmxhZ3NJbmNsdWRpbmdQcml2YXRlOjpTZW1hbnRpYzsKKyAgICAgICAgcmV0dXJu
IGEuYXNFeHRlbmRlZCgpID09IGIuYXNFeHRlbmRlZCgpICYmIGFGbGFncyA9PSBiRmxhZ3M7Cisg
ICAgfQorCisgICAgQVNTRVJUKGEuaXNFeHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgpKTsKKyAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLWlubGluZSBDb2xvcjo6Q29sb3IoU1JHQkE8dWludDhfdD4g
Y29sb3IpCitpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcihjb25zdCBDb2xv
ciYgYSwgY29uc3QgQ29sb3ImIGIpCiB7Ci0gICAgc2V0Q29sb3IoY29sb3IpOworICAgIGlmIChh
LmlzRXh0ZW5kZWQoKSB8fCBiLmlzRXh0ZW5kZWQoKSkKKyAgICAgICAgcmV0dXJuIGV4dGVuZGVk
Q29sb3JzRXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IoYSwgYik7CisKKyAgICBhdXRvIGFGbGFn
cyA9IGEuZmxhZ3MoKSAtIENvbG9yOjpGbGFnc0luY2x1ZGluZ1ByaXZhdGU6OlNlbWFudGljOwor
ICAgIGF1dG8gYkZsYWdzID0gYi5mbGFncygpIC0gQ29sb3I6OkZsYWdzSW5jbHVkaW5nUHJpdmF0
ZTo6U2VtYW50aWM7CisgICAgcmV0dXJuIGEuYXNQYWNrZWRJbmxpbmUoKS52YWx1ZSA9PSBiLmFz
UGFja2VkSW5saW5lKCkudmFsdWUgJiYgYUZsYWdzID09IGJGbGFnczsKIH0KIAotaW5saW5lIENv
bG9yOjpDb2xvcihPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gY29sb3IpCitpbmxpbmUgQ29sb3I6
OkNvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQogewot
ICAgIGlmIChjb2xvcikKLSAgICAgICAgc2V0Q29sb3IoKmNvbG9yKTsKKyAgICBzZXRDb2xvcihj
b2xvciwgdG9GbGFnc0luY2x1ZGluZ1ByaXZhdGUoZmxhZ3MpKTsKIH0KIAotaW5saW5lIENvbG9y
OjpDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvciwgU2VtYW50aWNUYWcpCitpbmxpbmUgQ29sb3I6
OkNvbG9yKE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBjb2xvciwgT3B0aW9uU2V0PEZsYWdzPiBm
bGFncykKIHsKLSAgICBzZXRDb2xvcihjb2xvcik7Ci0gICAgdGFnQXNTZW1hbnRpYygpOworICAg
IGlmIChjb2xvcikKKyAgICAgICAgc2V0Q29sb3IoKmNvbG9yLCB0b0ZsYWdzSW5jbHVkaW5nUHJp
dmF0ZShmbGFncykpOwogfQogCi1pbmxpbmUgQ29sb3I6OkNvbG9yKE9wdGlvbmFsPFNSR0JBPHVp
bnQ4X3Q+PiBjb2xvciwgU2VtYW50aWNUYWcpCitpbmxpbmUgQ29sb3I6OkNvbG9yKENvbG9yQ29t
cG9uZW50czxmbG9hdD4gY29tcG9uZW50cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBPcHRpb25T
ZXQ8RmxhZ3M+IGZsYWdzKQogewotICAgIGlmIChjb2xvcikgewotICAgICAgICBzZXRDb2xvcigq
Y29sb3IpOwotICAgICAgICB0YWdBc1NlbWFudGljKCk7Ci0gICAgfQorICAgIHNldEV4dGVuZGVk
Q29sb3IoRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGNvbXBvbmVudHMsIGNvbG9yU3BhY2UpLCB0b0Zs
YWdzSW5jbHVkaW5nUHJpdmF0ZShmbGFncykpOwogfQogCi1pbmxpbmUgQ29sb3I6OkNvbG9yKENv
bG9yQ29tcG9uZW50czxmbG9hdD4gY29tcG9uZW50cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQor
dGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PElz
Q29sb3JUeXBlV2l0aENvbXBvbmVudFR5cGU8Q29sb3JUeXBlLCBmbG9hdD4+Kj4KK2lubGluZSBD
b2xvcjo6Q29sb3IoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgT3B0aW9uU2V0PEZsYWdzPiBmbGFn
cykKIHsKLSAgICBzZXRFeHRlbmRlZENvbG9yKEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShjb21wb25l
bnRzLCBjb2xvclNwYWNlKSk7CisgICAgc2V0RXh0ZW5kZWRDb2xvcihFeHRlbmRlZENvbG9yOjpj
cmVhdGUoY29sb3IpLCB0b0ZsYWdzSW5jbHVkaW5nUHJpdmF0ZShmbGFncykpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8SXNDb2xv
clR5cGVXaXRoQ29tcG9uZW50VHlwZTxDb2xvclR5cGUsIGZsb2F0Pj4qPgotaW5saW5lIENvbG9y
OjpDb2xvcihjb25zdCBDb2xvclR5cGUmIGNvbG9yKQoraW5saW5lIENvbG9yOjpDb2xvcihSZWY8
RXh0ZW5kZWRDb2xvcj4mJiBleHRlbmRlZENvbG9yLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQog
ewotICAgIHNldEV4dGVuZGVkQ29sb3IoRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGNvbG9yKSk7Cisg
ICAgc2V0RXh0ZW5kZWRDb2xvcihXVEZNb3ZlKGV4dGVuZGVkQ29sb3IpLCB0b0ZsYWdzSW5jbHVk
aW5nUHJpdmF0ZShmbGFncykpOwogfQogCi1pbmxpbmUgQ29sb3I6OkNvbG9yKFJlZjxFeHRlbmRl
ZENvbG9yPiYmIGV4dGVuZGVkQ29sb3IpCitpbmxpbmUgQ29sb3I6OkNvbG9yKFdURjo6SGFzaFRh
YmxlRW1wdHlWYWx1ZVR5cGUpCiB7Ci0gICAgc2V0RXh0ZW5kZWRDb2xvcihXVEZNb3ZlKGV4dGVu
ZGVkQ29sb3IpKTsKKyAgICBtX2NvbG9yQW5kRmxhZ3MgPSBlbmNvZGVkRmxhZ3MoeyBGbGFnc0lu
Y2x1ZGluZ1ByaXZhdGU6Okhhc2hUYWJsZUVtcHR5VmFsdWUgfSk7CiB9CiAKIGlubGluZSBDb2xv
cjo6Q29sb3IoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQogewotICAgIHN0YXRpY19h
c3NlcnQoZGVsZXRlZEhhc2hWYWx1ZSAmIGludmFsaWRJbmxpbmVDb2xvciwgIkNvbG9yJ3MgZGVs
ZXRlZCBoYXNoIHZhbHVlIG11c3Qgbm90IGxvb2sgbGlrZSBhbiBFeHRlbmRlZENvbG9yIik7Ci0g
ICAgc3RhdGljX2Fzc2VydCghKGRlbGV0ZWRIYXNoVmFsdWUgJiB2YWxpZElubGluZUNvbG9yQml0
KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3Qgbm90IGxvb2sgbGlrZSBhIHZhbGlk
IElubGluZUNvbG9yIik7Ci0gICAgc3RhdGljX2Fzc2VydChkZWxldGVkSGFzaFZhbHVlICYgKDEg
PDwgNCksICJDb2xvcidzIGRlbGV0ZWQgaGFzaCB2YWx1ZSBtdXN0IGhhdmUgc29tZSBiaXRzIHNl
dCB0aGF0IGFuIElubGluZUNvbG9yIHdvdWxkbid0IGhhdmUiKTsKLSAgICBtX2NvbG9yRGF0YS5p
bmxpbmVDb2xvckFuZEZsYWdzID0gZGVsZXRlZEhhc2hWYWx1ZTsKLSAgICBBU1NFUlQoIWlzRXh0
ZW5kZWQoKSk7CisgICAgbV9jb2xvckFuZEZsYWdzID0gZW5jb2RlZEZsYWdzKHsgRmxhZ3NJbmNs
dWRpbmdQcml2YXRlOjpIYXNoVGFibGVEZWxldGVkVmFsdWUgfSk7CiB9CiAKLWlubGluZSBDb2xv
cjo6Q29sb3IoV1RGOjpIYXNoVGFibGVFbXB0eVZhbHVlVHlwZSkKK2lubGluZSBib29sIENvbG9y
Ojppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgc3RhdGljX2Fzc2VydChl
bXB0eUhhc2hWYWx1ZSAmIGludmFsaWRJbmxpbmVDb2xvciwgIkNvbG9yJ3MgZW1wdHkgaGFzaCB2
YWx1ZSBtdXN0IG5vdCBsb29rIGxpa2UgYW4gRXh0ZW5kZWRDb2xvciIpOwotICAgIHN0YXRpY19h
c3NlcnQoZW1wdHlIYXNoVmFsdWUgJiAoMSA8PCA0KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZh
bHVlIG11c3QgaGF2ZSBzb21lIGJpdHMgc2V0IHRoYXQgYW4gSW5saW5lQ29sb3Igd291bGRuJ3Qg
aGF2ZSIpOwotICAgIG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgPSBlbXB0eUhhc2hW
YWx1ZTsKLSAgICBBU1NFUlQoIWlzRXh0ZW5kZWQoKSk7CisgICAgcmV0dXJuIGZsYWdzKCkuY29u
dGFpbnMoRmxhZ3NJbmNsdWRpbmdQcml2YXRlOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpOwogfQog
CiBpbmxpbmUgQ29sb3I6On5Db2xvcigpCiB7CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAg
ICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+ZGVyZWYoKTsKKyAgICAgICAgYXNFeHRlbmRl
ZCgpLmRlcmVmKCk7CiB9CiAKIGlubGluZSB1bnNpZ25lZCBDb2xvcjo6aGFzaCgpIGNvbnN0CiB7
CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVIYXNoKGFzRXh0
ZW5kZWQoKS5jb21wb25lbnRzKCksIGFzRXh0ZW5kZWQoKS5jb2xvclNwYWNlKCkpOwotICAgIHJl
dHVybiBXVEY6OmludEhhc2gobV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyk7CisgICAg
ICAgIHJldHVybiBjb21wdXRlSGFzaChhc0V4dGVuZGVkKCkuY29tcG9uZW50cygpLCBhc0V4dGVu
ZGVkKCkuY29sb3JTcGFjZSgpLCBmbGFncygpLnRvUmF3KCkpOworICAgIHJldHVybiBjb21wdXRl
SGFzaChhc1BhY2tlZElubGluZSgpLnZhbHVlLCBmbGFncygpLnRvUmF3KCkpOworfQorCitpbmxp
bmUgYm9vbCBDb2xvcjo6aXNWYWxpZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZsYWdzKCkuY29u
dGFpbnMoRmxhZ3NJbmNsdWRpbmdQcml2YXRlOjpWYWxpZCk7Cit9CisKK2lubGluZSBib29sIENv
bG9yOjppc1NlbWFudGljKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmxhZ3MoKS5jb250YWlucyhG
bGFnc0luY2x1ZGluZ1ByaXZhdGU6OlNlbWFudGljKTsKK30KKworaW5saW5lIGJvb2wgQ29sb3I6
OnVzZXNDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZs
YWdzKCkuY29udGFpbnMoRmxhZ3NJbmNsdWRpbmdQcml2YXRlOjpVc2VDb2xvckZ1bmN0aW9uU2Vy
aWFsaXphdGlvbik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGRlY2x0eXBlKGF1
dG8pIENvbG9yOjpjYWxsT25VbmRlcmx5aW5nVHlwZShGdW5jdG9yJiYgZnVuY3RvcikgY29uc3QK
QEAgLTM1NCwzMCArMzgyLDEwNCBAQCBpbmxpbmUgQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhh
KE9wdGlvCiAgICAgcmV0dXJuIGFscGhhID8gY29sb3JXaXRoQWxwaGEoYWxwaGEudmFsdWUoKSkg
OiAqdGhpczsKIH0KIAoraW5saW5lIE9wdGlvblNldDxDb2xvcjo6RmxhZ3NJbmNsdWRpbmdQcml2
YXRlPiBDb2xvcjo6ZmxhZ3MoKSBjb25zdAoreworICAgIHJldHVybiBkZWNvZGVkRmxhZ3MobV9j
b2xvckFuZEZsYWdzKTsKK30KKworaW5saW5lIGJvb2wgQ29sb3I6OmlzRXh0ZW5kZWQoKSBjb25z
dAoreworICAgIHJldHVybiBmbGFncygpLmNvbnRhaW5zKEZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6
RXh0ZW5kZWQpOworfQorCitpbmxpbmUgYm9vbCBDb2xvcjo6aXNJbmxpbmUoKSBjb25zdAorewor
ICAgIHJldHVybiAhZmxhZ3MoKS5jb250YWlucyhGbGFnc0luY2x1ZGluZ1ByaXZhdGU6OkV4dGVu
ZGVkKTsKK30KKwogaW5saW5lIGNvbnN0IEV4dGVuZGVkQ29sb3ImIENvbG9yOjphc0V4dGVuZGVk
KCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNFeHRlbmRlZCgpKTsKLSAgICByZXR1cm4gKm1fY29s
b3JEYXRhLmV4dGVuZGVkQ29sb3I7CisgICAgcmV0dXJuIGRlY29kZWRFeHRlbmRlZENvbG9yKG1f
Y29sb3JBbmRGbGFncyk7Cit9CisKK2lubGluZSBSZWY8RXh0ZW5kZWRDb2xvcj4gQ29sb3I6OmFz
RXh0ZW5kZWRSZWYoKSBjb25zdAoreworICAgIEFTU0VSVChpc0V4dGVuZGVkKCkpOworICAgIHJl
dHVybiBkZWNvZGVkRXh0ZW5kZWRDb2xvcihtX2NvbG9yQW5kRmxhZ3MpOwogfQogCiBpbmxpbmUg
U1JHQkE8dWludDhfdD4gQ29sb3I6OmFzSW5saW5lKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNJ
bmxpbmUoKSk7Ci0gICAgcmV0dXJuIGFzU1JHQkEoUGFja2VkQ29sb3I6OlJHQkEgeyBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4obV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyA+PiAzMikgfSk7
CisgICAgcmV0dXJuIGFzU1JHQkEoYXNQYWNrZWRJbmxpbmUoKSk7Cit9CisKK2lubGluZSBQYWNr
ZWRDb2xvcjo6UkdCQSBDb2xvcjo6YXNQYWNrZWRJbmxpbmUoKSBjb25zdAoreworICAgIEFTU0VS
VChpc0lubGluZSgpKTsKKyAgICByZXR1cm4gZGVjb2RlZFBhY2tlZElubGluZUNvbG9yKG1fY29s
b3JBbmRGbGFncyk7Cit9CisKK2lubGluZSB1aW50NjRfdCBDb2xvcjo6ZW5jb2RlZEZsYWdzKE9w
dGlvblNldDxGbGFnc0luY2x1ZGluZ1ByaXZhdGU+IGZsYWdzKQoreworICAgIHJldHVybiBzdGF0
aWNfY2FzdDx1aW50NjRfdD4oZmxhZ3MudG9SYXcoKSkgPDwgbWF4TnVtYmVyT2ZCaXRzSW5Qb2lu
dGVyOwogfQogCi1pbmxpbmUgdm9pZCBDb2xvcjo6c2V0Q29sb3IoU1JHQkE8dWludDhfdD4gY29s
b3IpCitpbmxpbmUgdWludDY0X3QgQ29sb3I6OmVuY29kZWRJbmxpbmVDb2xvcihTUkdCQTx1aW50
OF90PiBjb2xvcikKIHsKLSAgICBtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzID0gc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KFBhY2tlZENvbG9yOjpSR0JBIHsgY29sb3IgfS52YWx1ZSkgPDwg
MzI7Ci0gICAgdGFnQXNWYWxpZCgpOworICAgIHJldHVybiBlbmNvZGVkUGFja2VkSW5saW5lQ29s
b3IoUGFja2VkQ29sb3I6OlJHQkEgeyBjb2xvciB9KTsKIH0KIAotaW5saW5lIHZvaWQgQ29sb3I6
OnNldEV4dGVuZGVkQ29sb3IoUmVmPEV4dGVuZGVkQ29sb3I+JiYgZXh0ZW5kZWRDb2xvcikKK2lu
bGluZSB1aW50NjRfdCBDb2xvcjo6ZW5jb2RlZFBhY2tlZElubGluZUNvbG9yKFBhY2tlZENvbG9y
OjpSR0JBIGNvbG9yKQogewotICAgIC8vIFplcm8gdGhlIHVuaW9uLCBqdXN0IGluIGNhc2UgYSAz
Mi1iaXQgc3lzdGVtIG9ubHkgYXNzaWducyB0aGUKLSAgICAvLyB0b3AgMzIgYml0cyB3aGVuIGNv
cHlpbmcgdGhlIEV4dGVuZGVkQ29sb3IgcG9pbnRlciBiZWxvdy4KLSAgICBtX2NvbG9yRGF0YS5p
bmxpbmVDb2xvckFuZEZsYWdzID0gMDsKLSAgICBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yID0g
JmV4dGVuZGVkQ29sb3IubGVha1JlZigpOworICAgIHJldHVybiBjb2xvci52YWx1ZTsKK30KKwor
aW5saW5lIHVpbnQ2NF90IENvbG9yOjplbmNvZGVkRXh0ZW5kZWRDb2xvcihSZWY8RXh0ZW5kZWRD
b2xvcj4mJiBleHRlbmRlZENvbG9yKQoreworI2lmIENQVShBRERSRVNTNjQpCisgICAgcmV0dXJu
IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oJmV4dGVuZGVkQ29sb3IubGVha1JlZigpKTsKKyNlbHNl
CisgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oJmV4dGVuZGVkQ29sb3IubGVha1Jl
ZigpKTsKKyNlbmRpZgorfQorCitpbmxpbmUgT3B0aW9uU2V0PENvbG9yOjpGbGFnc0luY2x1ZGlu
Z1ByaXZhdGU+IENvbG9yOjpkZWNvZGVkRmxhZ3ModWludDY0X3QgdmFsdWUpCit7CisgICAgcmV0
dXJuIE9wdGlvblNldDxDb2xvcjo6RmxhZ3NJbmNsdWRpbmdQcml2YXRlPjo6ZnJvbVJhdyhzdGF0
aWNfY2FzdDx1bnNpZ25lZD4odmFsdWUgPj4gbWF4TnVtYmVyT2ZCaXRzSW5Qb2ludGVyKSk7Cit9
CisKK2lubGluZSBTUkdCQTx1aW50OF90PiBDb2xvcjo6ZGVjb2RlZElubGluZUNvbG9yKHVpbnQ2
NF90IHZhbHVlKQoreworICAgIHJldHVybiBhc1NSR0JBKGRlY29kZWRQYWNrZWRJbmxpbmVDb2xv
cih2YWx1ZSkpOworfQorCitpbmxpbmUgUGFja2VkQ29sb3I6OlJHQkEgQ29sb3I6OmRlY29kZWRQ
YWNrZWRJbmxpbmVDb2xvcih1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gUGFja2VkQ29s
b3I6OlJHQkEgeyBzdGF0aWNfY2FzdDx1aW50MzJfdD4odmFsdWUgJiBjb2xvclZhbHVlTWFzaykg
fTsKK30KKworaW5saW5lIEV4dGVuZGVkQ29sb3ImIENvbG9yOjpkZWNvZGVkRXh0ZW5kZWRDb2xv
cih1aW50NjRfdCB2YWx1ZSkKK3sKKyNpZiBDUFUoQUREUkVTUzY0KQorICAgIHJldHVybiAqYml0
d2lzZV9jYXN0PEV4dGVuZGVkQ29sb3IqPih2YWx1ZSAmIGNvbG9yVmFsdWVNYXNrKTsKKyNlbHNl
CisgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8RXh0ZW5kZWRDb2xvcio+KHN0YXRpY19jYXN0PHVp
bnQzMl90Pih2YWx1ZSAmIGNvbG9yVmFsdWVNYXNrKSk7CisjZW5kaWYKK30KKworaW5saW5lIHZv
aWQgQ29sb3I6OnNldENvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yLCBPcHRpb25TZXQ8RmxhZ3NJ
bmNsdWRpbmdQcml2YXRlPiBmbGFncykKK3sKKyAgICBmbGFncy5hZGQoeyBGbGFnc0luY2x1ZGlu
Z1ByaXZhdGU6OlZhbGlkIH0pOworICAgIG1fY29sb3JBbmRGbGFncyA9IGVuY29kZWRJbmxpbmVD
b2xvcihjb2xvcikgfCBlbmNvZGVkRmxhZ3MoZmxhZ3MpOworICAgIEFTU0VSVChpc0lubGluZSgp
KTsKK30KKworaW5saW5lIHZvaWQgQ29sb3I6OnNldEV4dGVuZGVkQ29sb3IoUmVmPEV4dGVuZGVk
Q29sb3I+JiYgY29sb3IsIE9wdGlvblNldDxGbGFnc0luY2x1ZGluZ1ByaXZhdGU+IGZsYWdzKQor
eworICAgIGZsYWdzLmFkZCh7IEZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6VmFsaWQsIEZsYWdzSW5j
bHVkaW5nUHJpdmF0ZTo6RXh0ZW5kZWQgfSk7CisgICAgbV9jb2xvckFuZEZsYWdzID0gZW5jb2Rl
ZEV4dGVuZGVkQ29sb3IoV1RGTW92ZShjb2xvcikpIHwgZW5jb2RlZEZsYWdzKGZsYWdzKTsKICAg
ICBBU1NFUlQoaXNFeHRlbmRlZCgpKTsKIH0KIApAQCAtMzk3LDYgKzQ5OSwxNSBAQCBpbmxpbmUg
Ym9vbCBDb2xvcjo6aXNXaGl0ZUNvbG9yKGNvbnN0IENvCiAKIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgQ29sb3I6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogeworICAgIGlm
ICghaXNWYWxpZCgpKSB7CisgICAgICAgIGVuY29kZXIgPDwgZmFsc2U7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgZW5jb2RlciA8PCB0cnVlOworCisgICAgZW5jb2RlciA8PCBmbGFncygp
LmNvbnRhaW5zKEZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6U2VtYW50aWMpOworICAgIGVuY29kZXIg
PDwgZmxhZ3MoKS5jb250YWlucyhGbGFnc0luY2x1ZGluZ1ByaXZhdGU6OlVzZUNvbG9yRnVuY3Rp
b25TZXJpYWxpemF0aW9uKTsKKwogICAgIGlmIChpc0V4dGVuZGVkKCkpIHsKICAgICAgICAgZW5j
b2RlciA8PCB0cnVlOwogCkBAIC00MDksMjIgKzUyMCwzNiBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIENvbG9yOjplbmNvCiAgICAgICAgIGVuY29kZXIgPDwgZXh0ZW5kZWRDb2xvci5j
b2xvclNwYWNlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KICAgICBlbmNvZGVyIDw8IGZh
bHNlOwogCi0gICAgaWYgKCFpc1ZhbGlkKCkpIHsKLSAgICAgICAgZW5jb2RlciA8PCBmYWxzZTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBlbmNv
ZGUgd2hldGhlciB0aGUgY29sb3IgaXMgc2VtYW50aWMuCi0KLSAgICBlbmNvZGVyIDw8IHRydWU7
Ci0gICAgZW5jb2RlciA8PCBQYWNrZWRDb2xvcjo6UkdCQSB7IGFzSW5saW5lKCkgfS52YWx1ZTsK
KyAgICBlbmNvZGVyIDw8IGFzUGFja2VkSW5saW5lKCkudmFsdWU7CiB9CiAKIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IE9wdGlvbmFsPENvbG9yPiBDb2xvcjo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCiB7CisgICAgYm9vbCBpc1ZhbGlkOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNWYWxp
ZCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoIWlzVmFsaWQpCisg
ICAgICAgIHJldHVybiBDb2xvciB7IH07CisKKyAgICBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzOwor
CisgICAgYm9vbCBpc1NlbWFudGljOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNTZW1hbnRp
YykpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoaXNTZW1hbnRpYykK
KyAgICAgICAgZmxhZ3MuYWRkKEZsYWdzOjpTZW1hbnRpYyk7CisKKyAgICBib29sIHVzZXNDb2xv
ckZ1bmN0aW9uU2VyaWFsaXphdGlvbjsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHVzZXNDb2xv
ckZ1bmN0aW9uU2VyaWFsaXphdGlvbikpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisK
KyAgICBpZiAodXNlc0NvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKQorICAgICAgICBmbGFncy5h
ZGQoRmxhZ3M6OlVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKTsKKwogICAgIGJvb2wgaXNF
eHRlbmRlZDsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzRXh0ZW5kZWQpKQogICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwpAQCAtNDQ1LDIxICs1NzAsMTQgQEAgdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4gT3B0aW9uYWw8Q29sb3I+IAogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb2xvclNwYWNlKSkKICAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIHJldHVybiBDb2xvciB7IEV4dGVuZGVkQ29s
b3I6OmNyZWF0ZSh7IGMxLCBjMiwgYzMsIGFscGhhIH0sIGNvbG9yU3BhY2UpIH07CisgICAgICAg
IHJldHVybiBDb2xvciB7IEV4dGVuZGVkQ29sb3I6OmNyZWF0ZSh7IGMxLCBjMiwgYzMsIGFscGhh
IH0sIGNvbG9yU3BhY2UpLCBmbGFncyB9OwogICAgIH0KIAotICAgIGJvb2wgaXNWYWxpZDsKLSAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzVmFsaWQpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotCi0gICAgaWYgKCFpc1ZhbGlkKQotICAgICAgICByZXR1cm4gQ29sb3IgeyB9OwotCiAg
ICAgdWludDMyX3QgdmFsdWU7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZSkpCiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gQ29sb3IgeyBhc1NSR0JBKFBh
Y2tlZENvbG9yOjpSR0JBIHsgdmFsdWUgfSkgfTsKKyAgICByZXR1cm4gQ29sb3IgeyBhc1NSR0JB
KFBhY2tlZENvbG9yOjpSR0JBIHsgdmFsdWUgfSksIGZsYWdzIH07CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
QmxlbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yQmxlbmRpbmcuY3BwCShyZXZpc2lvbiAyNzMxOTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckJsZW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODYsNyArODYsNyBAQCBDb2xvciBibGVuZFdpdGhXaGl0ZShjb25zdCBDb2xvciYgY29sb3IpCiAK
ICAgICAvLyBGSVhNRTogV2h5IGlzIHByZXNlcnZpbmcgdGhlIHNlbWFudGljIGJpdCBkZXNpcmVk
IGFuZC9vciBjb3JyZWN0IGhlcmU/CiAgICAgaWYgKGNvbG9yLmlzU2VtYW50aWMoKSkKLSAgICAg
ICAgcmV0dXJuIENvbG9yKHJlc3VsdCwgQ29sb3I6OlNlbWFudGljKTsKKyAgICAgICAgcmV0dXJu
IHsgcmVzdWx0LCBDb2xvcjo6RmxhZ3M6OlNlbWFudGljIH07CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxp
emF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvclNlcmlhbGl6YXRpb24uY3BwCShyZXZpc2lvbiAyNzMxOTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw2NSArMzYsNjUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMg
U3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgQTk4UkdCPGZsb2F0PiYpOwotc3RhdGlj
IFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBBOThSR0I8ZmxvYXQ+Jik7Ci1zdGF0
aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IEE5OFJHQjxm
bG9hdD4mKTsKLQotc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IERpc3Bs
YXlQMzxmbG9hdD4mKTsKLXN0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3Qg
RGlzcGxheVAzPGZsb2F0PiYpOwotc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVy
VHJlZUFzVGV4dChjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7Ci0KLXN0YXRpYyBTdHJpbmcgc2Vy
aWFsaXphdGlvbkZvckNTUyhjb25zdCBMQ0hBPGZsb2F0PiYpOwotc3RhdGljIFN0cmluZyBzZXJp
YWxpemF0aW9uRm9ySFRNTChjb25zdCBMQ0hBPGZsb2F0PiYpOwotc3RhdGljIFN0cmluZyBzZXJp
YWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBMQ0hBPGZsb2F0PiYpOwotCi1zdGF0
aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgTGFiPGZsb2F0PiYpOwotc3RhdGlj
IFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBMYWI8ZmxvYXQ+Jik7Ci1zdGF0aWMg
U3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IExhYjxmbG9hdD4m
KTsKLQotc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IExpbmVhclNSR0JB
PGZsb2F0PiYpOwotc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBMaW5l
YXJTUkdCQTxmbG9hdD4mKTsKLXN0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRy
ZWVBc1RleHQoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+Jik7Ci0KLXN0YXRpYyBTdHJpbmcgc2Vy
aWFsaXphdGlvbkZvckNTUyhjb25zdCBQcm9QaG90b1JHQjxmbG9hdD4mKTsKLXN0YXRpYyBTdHJp
bmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgUHJvUGhvdG9SR0I8ZmxvYXQ+Jik7Ci1zdGF0
aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IFByb1Bob3Rv
UkdCPGZsb2F0PiYpOwotCi1zdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3Qg
UmVjMjAyMDxmbG9hdD4mKTsKLXN0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29u
c3QgUmVjMjAyMDxmbG9hdD4mKTsKLXN0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRl
clRyZWVBc1RleHQoY29uc3QgUmVjMjAyMDxmbG9hdD4mKTsKLQotc3RhdGljIFN0cmluZyBzZXJp
YWxpemF0aW9uRm9yQ1NTKGNvbnN0IFNSR0JBPGZsb2F0PiYpOwotc3RhdGljIFN0cmluZyBzZXJp
YWxpemF0aW9uRm9ySFRNTChjb25zdCBTUkdCQTxmbG9hdD4mKTsKLXN0YXRpYyBTdHJpbmcgc2Vy
aWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7Ci0KLXN0
YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhTUkdCQTx1aW50OF90Pik7Ci1zdGF0aWMg
U3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKFNSR0JBPHVpbnQ4X3Q+KTsKLXN0YXRpYyBTdHJp
bmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoU1JHQkE8dWludDhfdD4pOwotCi1z
dGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgWFlaQTxmbG9hdCwgV2hpdGVQ
b2ludDo6RDUwPiYpOwotc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBY
WVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+Jik7Ci1zdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRp
b25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4m
KTsKK3N0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBBOThSR0I8ZmxvYXQ+
JiwgYm9vbCB1c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbik7CitzdGF0aWMgU3RyaW5nIHNl
cmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IEE5OFJHQjxmbG9hdD4mLCBib29sIHVzZUNvbG9yRnVu
Y3Rpb25TZXJpYWxpemF0aW9uKTsKK3N0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRl
clRyZWVBc1RleHQoY29uc3QgQTk4UkdCPGZsb2F0PiYsIGJvb2wgdXNlQ29sb3JGdW5jdGlvblNl
cmlhbGl6YXRpb24pOworCitzdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3Qg
RGlzcGxheVAzPGZsb2F0PiYsIGJvb2wgdXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pOwor
c3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+
JiwgYm9vbCB1c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbik7CitzdGF0aWMgU3RyaW5nIHNl
cmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mLCBi
b29sIHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKTsKKworc3RhdGljIFN0cmluZyBzZXJp
YWxpemF0aW9uRm9yQ1NTKGNvbnN0IExDSEE8ZmxvYXQ+JiwgYm9vbCB1c2VDb2xvckZ1bmN0aW9u
U2VyaWFsaXphdGlvbik7CitzdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0
IExDSEE8ZmxvYXQ+JiwgYm9vbCB1c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbik7CitzdGF0
aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IExDSEE8Zmxv
YXQ+JiwgYm9vbCB1c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbik7CisKK3N0YXRpYyBTdHJp
bmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBMYWI8ZmxvYXQ+JiwgYm9vbCB1c2VDb2xvckZ1
bmN0aW9uU2VyaWFsaXphdGlvbik7CitzdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1M
KGNvbnN0IExhYjxmbG9hdD4mLCBib29sIHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKTsK
K3N0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgTGFi
PGZsb2F0PiYsIGJvb2wgdXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pOworCitzdGF0aWMg
U3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+JiwgYm9v
bCB1c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbik7CitzdGF0aWMgU3RyaW5nIHNlcmlhbGl6
YXRpb25Gb3JIVE1MKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYsIGJvb2wgdXNlQ29sb3JGdW5j
dGlvblNlcmlhbGl6YXRpb24pOworc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVy
VHJlZUFzVGV4dChjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mLCBib29sIHVzZUNvbG9yRnVuY3Rp
b25TZXJpYWxpemF0aW9uKTsKKworc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNv
bnN0IFByb1Bob3RvUkdCPGZsb2F0PiYsIGJvb2wgdXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRp
b24pOworc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBQcm9QaG90b1JH
QjxmbG9hdD4mLCBib29sIHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKTsKK3N0YXRpYyBT
dHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgUHJvUGhvdG9SR0I8
ZmxvYXQ+JiwgYm9vbCB1c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbik7CisKK3N0YXRpYyBT
dHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBSZWMyMDIwPGZsb2F0PiYsIGJvb2wgdXNl
Q29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pOworc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9u
Rm9ySFRNTChjb25zdCBSZWMyMDIwPGZsb2F0PiYsIGJvb2wgdXNlQ29sb3JGdW5jdGlvblNlcmlh
bGl6YXRpb24pOworc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4
dChjb25zdCBSZWMyMDIwPGZsb2F0PiYsIGJvb2wgdXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRp
b24pOworCitzdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgU1JHQkE8Zmxv
YXQ+JiwgYm9vbCB1c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbik7CitzdGF0aWMgU3RyaW5n
IHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IFNSR0JBPGZsb2F0PiYsIGJvb2wgdXNlQ29sb3JG
dW5jdGlvblNlcmlhbGl6YXRpb24pOworc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVu
ZGVyVHJlZUFzVGV4dChjb25zdCBTUkdCQTxmbG9hdD4mLCBib29sIHVzZUNvbG9yRnVuY3Rpb25T
ZXJpYWxpemF0aW9uKTsKKworc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKFNSR0JB
PHVpbnQ4X3Q+LCBib29sIHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKTsKK3N0YXRpYyBT
dHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoU1JHQkE8dWludDhfdD4sIGJvb2wgdXNlQ29sb3JG
dW5jdGlvblNlcmlhbGl6YXRpb24pOworc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVu
ZGVyVHJlZUFzVGV4dChTUkdCQTx1aW50OF90PiwgYm9vbCB1c2VDb2xvckZ1bmN0aW9uU2VyaWFs
aXphdGlvbik7CisKK3N0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBYWVpB
PGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+JiwgYm9vbCB1c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXph
dGlvbik7CitzdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IFhZWkE8Zmxv
YXQsIFdoaXRlUG9pbnQ6OkQ1MD4mLCBib29sIHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9u
KTsKK3N0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3Qg
WFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDUwPiYsIGJvb2wgdXNlQ29sb3JGdW5jdGlvblNlcmlh
bGl6YXRpb24pOwogCiAKIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IENvbG9yJiBj
b2xvcikKIHsKLSAgICByZXR1cm4gY29sb3IuY2FsbE9uVW5kZXJseWluZ1R5cGUoW10gKGF1dG8g
dW5kZXJseWluZ0NvbG9yKSB7Ci0gICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKHVu
ZGVybHlpbmdDb2xvcik7CisgICAgcmV0dXJuIGNvbG9yLmNhbGxPblVuZGVybHlpbmdUeXBlKFsm
XSAoYXV0byB1bmRlcmx5aW5nQ29sb3IpIHsKKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25G
b3JDU1ModW5kZXJseWluZ0NvbG9yLCBjb2xvci51c2VzQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRp
b24oKSk7CiAgICAgfSk7CiB9CiAKIFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBD
b2xvciYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIGNvbG9yLmNhbGxPblVuZGVybHlpbmdUeXBlKFtd
IChhdXRvIHVuZGVybHlpbmdDb2xvcikgewotICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZv
ckhUTUwodW5kZXJseWluZ0NvbG9yKTsKKyAgICByZXR1cm4gY29sb3IuY2FsbE9uVW5kZXJseWlu
Z1R5cGUoWyZdIChhdXRvIHVuZGVybHlpbmdDb2xvcikgeworICAgICAgICByZXR1cm4gc2VyaWFs
aXphdGlvbkZvckhUTUwodW5kZXJseWluZ0NvbG9yLCBjb2xvci51c2VzQ29sb3JGdW5jdGlvblNl
cmlhbGl6YXRpb24oKSk7CiAgICAgfSk7CiB9CiAKIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVu
ZGVyVHJlZUFzVGV4dChjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIGNvbG9yLmNh
bGxPblVuZGVybHlpbmdUeXBlKFtdIChhdXRvIHVuZGVybHlpbmdDb2xvcikgewotICAgICAgICBy
ZXR1cm4gc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQodW5kZXJseWluZ0NvbG9yKTsK
KyAgICByZXR1cm4gY29sb3IuY2FsbE9uVW5kZXJseWluZ1R5cGUoWyZdIChhdXRvIHVuZGVybHlp
bmdDb2xvcikgeworICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1Rl
eHQodW5kZXJseWluZ0NvbG9yLCBjb2xvci51c2VzQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24o
KSk7CiAgICAgfSk7CiB9CiAKQEAgLTEyNSw1MyArMTI1LDcwIEBAIHN0YXRpYyBBU0NJSUxpdGVy
YWwgc2VyaWFsaXphdGlvbihDb2xvclMKICAgICByZXR1cm4gIiJfczsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgQ29sb3JUeXBlPiBzdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpb24oY29uc3QgQ29s
b3JUeXBlJiBjb2xvcikKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RhdGljIFN0cmlu
ZyBzZXJpYWxpemF0aW9uVXNpbmdDb2xvckZ1bmN0aW9uKGNvbnN0IENvbG9yVHlwZSYgY29sb3Ip
CiB7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6
OkNvbXBvbmVudFR5cGUsIGZsb2F0Pik7CisKICAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0g
PSBjb2xvcjsKICAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGFscGhhLCAxLjBmKSkK
ICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoImNvbG9yKCIsIHNlcmlhbGl6YXRpb24oQ29sb3JT
cGFjZUZvcjxDb2xvclR5cGU+KSwgJyAnLCBjMSwgJyAnLCBjMiwgJyAnLCBjMywgJyknKTsKICAg
ICByZXR1cm4gbWFrZVN0cmluZygiY29sb3IoIiwgc2VyaWFsaXphdGlvbihDb2xvclNwYWNlRm9y
PENvbG9yVHlwZT4pLCAnICcsIGMxLCAnICcsIGMyLCAnICcsIGMzLCAiIC8gIiwgYWxwaGEsICcp
Jyk7CiB9CiAKK3N0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbihj
b25zdCBMYWI8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0g
PSBjb2xvcjsKKyAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGFscGhhLCAxLjBmKSkK
KyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoImNvbG9yKCIsIHNlcmlhbGl6YXRpb24oQ29sb3JT
cGFjZUZvcjxMYWI8ZmxvYXQ+PiksICcgJywgYzEsICIlICIsIGMyLCAnICcsIGMzLCAnKScpOwor
ICAgIHJldHVybiBtYWtlU3RyaW5nKCJjb2xvcigiLCBzZXJpYWxpemF0aW9uKENvbG9yU3BhY2VG
b3I8TGFiPGZsb2F0Pj4pLCAnICcsIGMxLCAiJSAiLCBjMiwgJyAnLCBjMywgIiAvICIsIGFscGhh
LCAnKScpOworfQorCitzdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpb25Vc2luZ0NvbG9yRnVuY3Rp
b24oY29uc3QgU1JHQkE8dWludDhfdD4mIGNvbG9yKQoreworICAgIHJldHVybiBzZXJpYWxpemF0
aW9uVXNpbmdDb2xvckZ1bmN0aW9uKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGNvbG9yKSk7
Cit9CisKIC8vIE1BUks6IEE5OFJHQjxmbG9hdD4gb3ZlcmxvYWRzCiAKLVN0cmluZyBzZXJpYWxp
emF0aW9uRm9yQ1NTKGNvbnN0IEE5OFJHQjxmbG9hdD4mIGNvbG9yKQorU3RyaW5nIHNlcmlhbGl6
YXRpb25Gb3JDU1MoY29uc3QgQTk4UkdCPGZsb2F0PiYgY29sb3IsIGJvb2wpCiB7Ci0gICAgcmV0
dXJuIHNlcmlhbGl6YXRpb24oY29sb3IpOworICAgIHJldHVybiBzZXJpYWxpemF0aW9uVXNpbmdD
b2xvckZ1bmN0aW9uKGNvbG9yKTsKIH0KIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNv
bnN0IEE5OFJHQjxmbG9hdD4mIGNvbG9yKQorU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNv
bnN0IEE5OFJHQjxmbG9hdD4mIGNvbG9yLCBib29sKQogewotICAgIHJldHVybiBzZXJpYWxpemF0
aW9uKGNvbG9yKTsKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbihj
b2xvcik7CiB9CiAKLVN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25z
dCBBOThSR0I8ZmxvYXQ+JiBjb2xvcikKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJl
ZUFzVGV4dChjb25zdCBBOThSR0I8ZmxvYXQ+JiBjb2xvciwgYm9vbCkKIHsKLSAgICByZXR1cm4g
c2VyaWFsaXphdGlvbihjb2xvcik7CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Vc2luZ0NvbG9y
RnVuY3Rpb24oY29sb3IpOwogfQogCiAvLyBNQVJLOiBEaXNwbGF5UDM8ZmxvYXQ+IG92ZXJsb2Fk
cwogCi1TdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+JiBj
b2xvcikKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4m
IGNvbG9yLCBib29sKQogewotICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKKyAgICBy
ZXR1cm4gc2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbihjb2xvcik7CiB9CiAKLVN0cmlu
ZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikKK1N0
cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvciwg
Ym9vbCkKIHsKLSAgICByZXR1cm4gc2VyaWFsaXphdGlvbihjb2xvcik7CisgICAgcmV0dXJuIHNl
cmlhbGl6YXRpb25Vc2luZ0NvbG9yRnVuY3Rpb24oY29sb3IpOwogfQogCi1TdHJpbmcgc2VyaWFs
aXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYgY29sb3Ip
CitTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgRGlzcGxheVAz
PGZsb2F0PiYgY29sb3IsIGJvb2wpCiB7Ci0gICAgcmV0dXJuIHNlcmlhbGl6YXRpb24oY29sb3Ip
OworICAgIHJldHVybiBzZXJpYWxpemF0aW9uVXNpbmdDb2xvckZ1bmN0aW9uKGNvbG9yKTsKIH0K
IAogLy8gTUFSSzogTENIQTxmbG9hdD4gb3ZlcmxvYWRzCiAKLVN0cmluZyBzZXJpYWxpemF0aW9u
Rm9yQ1NTKGNvbnN0IExDSEE8ZmxvYXQ+JiBjb2xvcikKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9y
Q1NTKGNvbnN0IExDSEE8ZmxvYXQ+JiBjb2xvciwgYm9vbCB1c2VDb2xvckZ1bmN0aW9uU2VyaWFs
aXphdGlvbikKIHsKICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLWNvbG9yLTQvI3Nl
cmlhbGl6aW5nLWxhYi1sY2gKKyAgICBpZiAodXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24p
CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uVXNpbmdDb2xvckZ1bmN0aW9uKGNvbG9yKTsK
IAogICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yOwogICAgIGlmIChXVEY6OmFy
ZUVzc2VudGlhbGx5RXF1YWwoYWxwaGEsIDEuMGYpKQpAQCAtMTc5LDIxICsxOTYsMjMgQEAgU3Ry
aW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgTENIQTxmbAogICAgIHJldHVybiBtYWtlU3Ry
aW5nKCJsY2goIiwgYzEsICIlICIsIGMyLCAnICcsIGMzLCAiIC8gIiwgYWxwaGEsICcpJyk7CiB9
CiAKLVN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBMQ0hBPGZsb2F0PiYgY29sb3Ip
CitTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgTENIQTxmbG9hdD4mIGNvbG9yLCBi
b29sIHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKQogewotICAgIHJldHVybiBzZXJpYWxp
emF0aW9uRm9yQ1NTKGNvbG9yKTsKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckNTUyhjb2xv
ciwgdXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pOwogfQogCi1TdHJpbmcgc2VyaWFsaXph
dGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgTENIQTxmbG9hdD4mIGNvbG9yKQorU3RyaW5n
IHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IExDSEE8ZmxvYXQ+JiBjb2xv
ciwgYm9vbCB1c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbikKIHsKLSAgICByZXR1cm4gc2Vy
aWFsaXphdGlvbkZvckNTUyhjb2xvcik7CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JDU1Mo
Y29sb3IsIHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKTsKIH0KIAogLy8gTUFSSzogTGFi
PGZsb2F0PiBvdmVybG9hZHMKIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgTGFi
PGZsb2F0PiYgY29sb3IpCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBMYWI8Zmxv
YXQ+JiBjb2xvciwgYm9vbCB1c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbikKIHsKICAgICAv
LyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLWNvbG9yLTQvI3NlcmlhbGl6aW5nLWxhYi1sY2gK
KyAgICBpZiAodXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pCisgICAgICAgIHJldHVybiBz
ZXJpYWxpemF0aW9uVXNpbmdDb2xvckZ1bmN0aW9uKGNvbG9yKTsKIAogICAgIGF1dG8gW2MxLCBj
MiwgYzMsIGFscGhhXSA9IGNvbG9yOwogICAgIGlmIChXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwo
YWxwaGEsIDEuMGYpKQpAQCAtMjAxLDgyICsyMjAsODIgQEAgU3RyaW5nIHNlcmlhbGl6YXRpb25G
b3JDU1MoY29uc3QgTGFiPGZsbwogICAgIHJldHVybiBtYWtlU3RyaW5nKCJsYWIoIiwgYzEsICIl
ICIsIGMyLCAnICcsIGMzLCAiIC8gIiwgYWxwaGEsICcpJyk7CiB9CiAKLVN0cmluZyBzZXJpYWxp
emF0aW9uRm9ySFRNTChjb25zdCBMYWI8ZmxvYXQ+JiBjb2xvcikKK1N0cmluZyBzZXJpYWxpemF0
aW9uRm9ySFRNTChjb25zdCBMYWI8ZmxvYXQ+JiBjb2xvciwgYm9vbCB1c2VDb2xvckZ1bmN0aW9u
U2VyaWFsaXphdGlvbikKIHsKLSAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckNTUyhjb2xvcik7
CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29sb3IsIHVzZUNvbG9yRnVuY3Rpb25T
ZXJpYWxpemF0aW9uKTsKIH0KIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNU
ZXh0KGNvbnN0IExhYjxmbG9hdD4mIGNvbG9yKQorU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5k
ZXJUcmVlQXNUZXh0KGNvbnN0IExhYjxmbG9hdD4mIGNvbG9yLCBib29sIHVzZUNvbG9yRnVuY3Rp
b25TZXJpYWxpemF0aW9uKQogewotICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbG9y
KTsKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckNTUyhjb2xvciwgdXNlQ29sb3JGdW5jdGlv
blNlcmlhbGl6YXRpb24pOwogfQogCiAvLyBNQVJLOiBMaW5lYXJTUkdCQTxmbG9hdD4gb3Zlcmxv
YWRzCiAKLVN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0
PiYgY29sb3IpCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBMaW5lYXJTUkdCQTxm
bG9hdD4mIGNvbG9yLCBib29sKQogewotICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsK
KyAgICByZXR1cm4gc2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbihjb2xvcik7CiB9CiAK
LVN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mIGNv
bG9yKQorU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0
PiYgY29sb3IsIGJvb2wpCiB7Ci0gICAgcmV0dXJuIHNlcmlhbGl6YXRpb24oY29sb3IpOworICAg
IHJldHVybiBzZXJpYWxpemF0aW9uVXNpbmdDb2xvckZ1bmN0aW9uKGNvbG9yKTsKIH0KIAotU3Ry
aW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IExpbmVhclNSR0JBPGZs
b2F0PiYgY29sb3IpCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29u
c3QgTGluZWFyU1JHQkE8ZmxvYXQ+JiBjb2xvciwgYm9vbCkKIHsKLSAgICByZXR1cm4gc2VyaWFs
aXphdGlvbihjb2xvcik7CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Vc2luZ0NvbG9yRnVuY3Rp
b24oY29sb3IpOwogfQogCiAvLyBNQVJLOiBQcm9QaG90b1JHQjxmbG9hdD4gb3ZlcmxvYWRzCiAK
LVN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IFByb1Bob3RvUkdCPGZsb2F0PiYgY29s
b3IpCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBQcm9QaG90b1JHQjxmbG9hdD4m
IGNvbG9yLCBib29sKQogewotICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKKyAgICBy
ZXR1cm4gc2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbihjb2xvcik7CiB9CiAKLVN0cmlu
ZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBQcm9QaG90b1JHQjxmbG9hdD4mIGNvbG9yKQor
U3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IFByb1Bob3RvUkdCPGZsb2F0PiYgY29s
b3IsIGJvb2wpCiB7Ci0gICAgcmV0dXJuIHNlcmlhbGl6YXRpb24oY29sb3IpOworICAgIHJldHVy
biBzZXJpYWxpemF0aW9uVXNpbmdDb2xvckZ1bmN0aW9uKGNvbG9yKTsKIH0KIAotU3RyaW5nIHNl
cmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IFByb1Bob3RvUkdCPGZsb2F0PiYg
Y29sb3IpCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgUHJv
UGhvdG9SR0I8ZmxvYXQ+JiBjb2xvciwgYm9vbCkKIHsKLSAgICByZXR1cm4gc2VyaWFsaXphdGlv
bihjb2xvcik7CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Vc2luZ0NvbG9yRnVuY3Rpb24oY29s
b3IpOwogfQogCiAvLyBNQVJLOiBSZWMyMDIwPGZsb2F0PiBvdmVybG9hZHMKIAotU3RyaW5nIHNl
cmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgUmVjMjAyMDxmbG9hdD4mIGNvbG9yKQorU3RyaW5nIHNl
cmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgUmVjMjAyMDxmbG9hdD4mIGNvbG9yLCBib29sKQogewot
ICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKKyAgICByZXR1cm4gc2VyaWFsaXphdGlv
blVzaW5nQ29sb3JGdW5jdGlvbihjb2xvcik7CiB9CiAKLVN0cmluZyBzZXJpYWxpemF0aW9uRm9y
SFRNTChjb25zdCBSZWMyMDIwPGZsb2F0PiYgY29sb3IpCitTdHJpbmcgc2VyaWFsaXphdGlvbkZv
ckhUTUwoY29uc3QgUmVjMjAyMDxmbG9hdD4mIGNvbG9yLCBib29sKQogewotICAgIHJldHVybiBz
ZXJpYWxpemF0aW9uKGNvbG9yKTsKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvblVzaW5nQ29sb3JG
dW5jdGlvbihjb2xvcik7CiB9CiAKLVN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFz
VGV4dChjb25zdCBSZWMyMDIwPGZsb2F0PiYgY29sb3IpCitTdHJpbmcgc2VyaWFsaXphdGlvbkZv
clJlbmRlclRyZWVBc1RleHQoY29uc3QgUmVjMjAyMDxmbG9hdD4mIGNvbG9yLCBib29sKQogewot
ICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKKyAgICByZXR1cm4gc2VyaWFsaXphdGlv
blVzaW5nQ29sb3JGdW5jdGlvbihjb2xvcik7CiB9CiAKIC8vIE1BUks6IFNSR0JBPGZsb2F0PiBv
dmVybG9hZHMKIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgU1JHQkE8ZmxvYXQ+
JiBjb2xvcikKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IFNSR0JBPGZsb2F0PiYg
Y29sb3IsIGJvb2wpCiB7Ci0gICAgcmV0dXJuIHNlcmlhbGl6YXRpb24oY29sb3IpOworICAgIHJl
dHVybiBzZXJpYWxpemF0aW9uVXNpbmdDb2xvckZ1bmN0aW9uKGNvbG9yKTsKIH0KIAotU3RyaW5n
IHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCitTdHJpbmcg
c2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvciwgYm9vbCkKIHsK
LSAgICByZXR1cm4gc2VyaWFsaXphdGlvbihjb2xvcik7CisgICAgcmV0dXJuIHNlcmlhbGl6YXRp
b25Vc2luZ0NvbG9yRnVuY3Rpb24oY29sb3IpOwogfQogCi1TdHJpbmcgc2VyaWFsaXphdGlvbkZv
clJlbmRlclRyZWVBc1RleHQoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKK1N0cmluZyBzZXJp
YWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yLCBi
b29sKQogewotICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKKyAgICByZXR1cm4gc2Vy
aWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbihjb2xvcik7CiB9CiAKIC8vIE1BUks6IFNSR0JB
PHVpbnQ4X3Q+IG92ZXJsb2FkcwpAQCAtMjk4LDggKzMxNywxMSBAQCBzdGF0aWMgc3RkOjphcnJh
eTxjaGFyLCA0PiBmcmFjdGlvbkRpZ2l0CiAgICAgcmV0dXJuIHsgeyBkZWNpbWFsRGlnaXQoKGFs
cGhhICogMTAgKyAweDdGKSAvIDB4RkYpLCAnXDAnLCAnXDAnLCAnXDAnIH0gfTsKIH0KIAotU3Ry
aW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoU1JHQkE8dWludDhfdD4gY29sb3IpCitTdHJpbmcgc2Vy
aWFsaXphdGlvbkZvckNTUyhTUkdCQTx1aW50OF90PiBjb2xvciwgYm9vbCB1c2VDb2xvckZ1bmN0
aW9uU2VyaWFsaXphdGlvbikKIHsKKyAgICBpZiAodXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRp
b24pCisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uVXNpbmdDb2xvckZ1bmN0aW9uKGNvbG9y
KTsKKwogICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9IGNvbG9yOwogICAgIHN3
aXRjaCAoYWxwaGEpIHsKICAgICBjYXNlIDA6CkBAIC0zMTEsMTYgKzMzMywyMiBAQCBTdHJpbmcg
c2VyaWFsaXphdGlvbkZvckNTUyhTUkdCQTx1aW50OF90CiAgICAgfQogfQogCi1TdHJpbmcgc2Vy
aWFsaXphdGlvbkZvckhUTUwoU1JHQkE8dWludDhfdD4gY29sb3IpCitTdHJpbmcgc2VyaWFsaXph
dGlvbkZvckhUTUwoU1JHQkE8dWludDhfdD4gY29sb3IsIGJvb2wgdXNlQ29sb3JGdW5jdGlvblNl
cmlhbGl6YXRpb24pCiB7CisgICAgaWYgKHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKQor
ICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbihjb2xvcik7CisK
ICAgICBhdXRvIFtyZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0gPSBjb2xvcjsKICAgICBpZiAoYWxw
aGEgPT0gMHhGRikKICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoJyMnLCBoZXgocmVkLCAyLCBM
b3dlcmNhc2UpLCBoZXgoZ3JlZW4sIDIsIExvd2VyY2FzZSksIGhleChibHVlLCAyLCBMb3dlcmNh
c2UpKTsKICAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckNTUyhjb2xvcik7CiB9CiAKLVN0cmlu
ZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChTUkdCQTx1aW50OF90PiBjb2xvcikK
K1N0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChTUkdCQTx1aW50OF90PiBj
b2xvciwgYm9vbCB1c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbikKIHsKKyAgICBpZiAodXNl
Q29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pCisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9u
VXNpbmdDb2xvckZ1bmN0aW9uKGNvbG9yKTsKKwogICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUs
IGFscGhhXSA9IGNvbG9yOwogICAgIGlmIChhbHBoYSA8IDB4RkYpCiAgICAgICAgIHJldHVybiBt
YWtlU3RyaW5nKCcjJywgaGV4KHJlZCwgMiksIGhleChncmVlbiwgMiksIGhleChibHVlLCAyKSwg
aGV4KGFscGhhLCAyKSk7CkBAIC0zMjksMTkgKzM1NywxOSBAQCBTdHJpbmcgc2VyaWFsaXphdGlv
bkZvclJlbmRlclRyZWVBc1RleHQoCiAKIC8vIE1BUks6IFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6
OkQ1MD4gb3ZlcmxvYWRzCiAKLVN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IFhZWkE8
ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4mIGNvbG9yKQorU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JD
U1MoY29uc3QgWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDUwPiYgY29sb3IsIGJvb2wpCiB7Ci0g
ICAgcmV0dXJuIHNlcmlhbGl6YXRpb24oY29sb3IpOworICAgIHJldHVybiBzZXJpYWxpemF0aW9u
VXNpbmdDb2xvckZ1bmN0aW9uKGNvbG9yKTsKIH0KIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JI
VE1MKGNvbnN0IFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4mIGNvbG9yKQorU3RyaW5nIHNl
cmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4mIGNv
bG9yLCBib29sKQogewotICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKKyAgICByZXR1
cm4gc2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbihjb2xvcik7CiB9CiAKLVN0cmluZyBz
ZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBYWVpBPGZsb2F0LCBXaGl0ZVBv
aW50OjpENTA+JiBjb2xvcikKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4
dChjb25zdCBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+JiBjb2xvciwgYm9vbCkKIHsKLSAg
ICByZXR1cm4gc2VyaWFsaXphdGlvbihjb2xvcik7CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25V
c2luZ0NvbG9yRnVuY3Rpb24oY29sb3IpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI3MzE5
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUyLDExICs1MiwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBU
IGNvbnZlcnRGbG9hdEFscGhhCiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5h
bWUgRnVuY3Rvcj4gQ29sb3JUeXBlIGNvbG9yQnlNb2RpZmluZ0VhY2hOb25BbHBoYUNvbXBvbmVu
dChjb25zdCBDb2xvclR5cGUmLCBGdW5jdG9yJiYpOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xv
clR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGUgY29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEoY29uc3Qg
Q29sb3JUeXBlJiwgdWludDhfdCBvdmVycmlkZUFscGhhKTsKLXRlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZT4gQ29sb3JUeXBlIGNvbG9yV2l0aE92ZXJyaWRlbkFscGhhKGNvbnN0IENvbG9yVHlw
ZSYsIGZsb2F0IG92ZXJyaWRlQWxwaGEpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBj
b25zdGV4cHIgQ29sb3JUeXBlIGNvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5
cGUmLCB1aW50OF90IG92ZXJyaWRlQWxwaGEpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBl
PiBDb2xvclR5cGUgY29sb3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYsIGZs
b2F0IG92ZXJyaWRlQWxwaGEpOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0
ZXhwciBDb2xvclR5cGUgaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYShjb25zdCBDb2xv
clR5cGUmLCB1aW50OF90IG92ZXJyaWRlQWxwaGEpOwotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JU
eXBlPiBDb2xvclR5cGUgaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYShjb25zdCBDb2xv
clR5cGUmLCBmbG9hdCBvdmVycmlkZUFscGhhKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlw
ZT4gY29uc3RleHByIENvbG9yVHlwZSBpbnZlcnRlZGNvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYShj
b25zdCBDb2xvclR5cGUmLCB1aW50OF90IG92ZXJyaWRlQWxwaGEpOwordGVtcGxhdGU8dHlwZW5h
bWUgQ29sb3JUeXBlPiBDb2xvclR5cGUgaW52ZXJ0ZWRjb2xvcldpdGhPdmVycmlkZGVuQWxwaGEo
Y29uc3QgQ29sb3JUeXBlJiwgZmxvYXQgb3ZlcnJpZGVBbHBoYSk7CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWVfdjx0
eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsLCBSR0JNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNv
bXBvbmVudFR5cGU+Pj4qID0gbnVsbHB0cj4gY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBD
b2xvclR5cGUmKTsKIHRlbXBsYXRlPFdoaXRlUG9pbnQgVz4gY29uc3RleHByIGJvb2wgaXNCbGFj
ayhjb25zdCBYWVpBPGZsb2F0LCBXPiYpOwpAQCAtMTA3LDIxICsxMDcsMjEgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBGdQogICAgIHJldHVybiB7IGNvcHlbMF0sIGNv
cHlbMV0sIGNvcHlbMl0sIGNvcHlbM10gfTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JU
eXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlIGNvbG9yV2l0aE92ZXJyaWRlbkFscGhhKGNvbnN0IENv
bG9yVHlwZSYgY29sb3IsIHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSkKK3RlbXBsYXRlPHR5cGVuYW1l
IENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yVHlwZSBjb2xvcldpdGhPdmVycmlkZGVuQWxwaGEo
Y29uc3QgQ29sb3JUeXBlJiBjb2xvciwgdWludDhfdCBvdmVycmlkZUFscGhhKQogewogICAgIGF1
dG8gY29weSA9IGNvbG9yOwogICAgIGNvcHkuYWxwaGEgPSBjb252ZXJ0Qnl0ZUFscGhhVG88dHlw
ZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPihvdmVycmlkZUFscGhhKTsKICAgICByZXR1
cm4gY29weTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xvclR5cGUgY29s
b3JXaXRoT3ZlcnJpZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgZmxvYXQgb3ZlcnJp
ZGVBbHBoYSkKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBlIGNvbG9yV2l0
aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmIGNvbG9yLCBmbG9hdCBvdmVycmlkZUFs
cGhhKQogewogICAgIGF1dG8gY29weSA9IGNvbG9yOwogICAgIGNvcHkuYWxwaGEgPSBjb252ZXJ0
RmxvYXRBbHBoYVRvPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4ob3ZlcnJpZGVB
bHBoYSk7CiAgICAgcmV0dXJuIGNvcHk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlw
ZT4gY29uc3RleHByIENvbG9yVHlwZSBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFscGhhKGNv
bnN0IENvbG9yVHlwZSYgY29sb3IsIHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSkKK3RlbXBsYXRlPHR5
cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yVHlwZSBpbnZlcnRlZGNvbG9yV2l0aE92
ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmIGNvbG9yLCB1aW50OF90IG92ZXJyaWRlQWxw
aGEpCiB7CiAgICAgc3RhdGljX2Fzc2VydChDb2xvclR5cGU6Ok1vZGVsOjppc0ludmVydGlibGUp
OwogCkBAIC0xMzUsNyArMTM1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25z
dGV4cHIgQwogICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPihjb3B5KTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xvclR5cGUgaW52ZXJ0ZWRDb2xv
cldpdGhPdmVycmlkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmIGNvbG9yLCBmbG9hdCBvdmVycmlk
ZUFscGhhKQordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xvclR5cGUgaW52ZXJ0ZWRj
b2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgZmxvYXQgb3Zl
cnJpZGVBbHBoYSkKIHsKICAgICBzdGF0aWNfYXNzZXJ0KENvbG9yVHlwZTo6TW9kZWw6OmlzSW52
ZXJ0aWJsZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Nv
bG9yQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0NvbG9yQ0cuY3BwCShyZXZpc2lvbiAyNzMxOTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksOCArODks
OCBAQCBDb2xvcjo6Q29sb3IoQ0dDb2xvclJlZiBjb2xvcikKIHsKIH0KIAotQ29sb3I6OkNvbG9y
KENHQ29sb3JSZWYgY29sb3IsIFNlbWFudGljVGFnIHRhZykKLSAgICA6IENvbG9yKHJvdW5kQW5k
Q2xhbXBUb1NSR0JBTG9zc3koY29sb3IpLCB0YWcpCitDb2xvcjo6Q29sb3IoQ0dDb2xvclJlZiBj
b2xvciwgT3B0aW9uU2V0PEZsYWdzPiBmbGFncykKKyAgICA6IENvbG9yKHJvdW5kQW5kQ2xhbXBU
b1NSR0JBTG9zc3koY29sb3IpLCBmbGFncykKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQkocmV2aXNpb24gMjczMTk5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgQ29sb3IgY29sb3JGcm9tTlNDb2xvcihO
U0NvbG9yICpjb2xvcikKIAogQ29sb3Igc2VtYW50aWNDb2xvckZyb21OU0NvbG9yKE5TQ29sb3Ig
KmNvbG9yKQogewotICAgIHJldHVybiBDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tTlNDb2xvcihj
b2xvciksIENvbG9yOjpTZW1hbnRpYyk7CisgICAgcmV0dXJuIENvbG9yKG1ha2VTaW1wbGVDb2xv
ckZyb21OU0NvbG9yKGNvbG9yKSwgQ29sb3I6OkZsYWdzOjpTZW1hbnRpYyk7CiB9CiAKIE5TQ29s
b3IgKm5zQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkocmV2aXNpb24gMjczMTk5KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzkx
LDcgKzEzOTEsNyBAQCBzdGF0aWMgY29uc3QgVmVjdG9yPENTU1ZhbHVlSURBbmRTZWxlY3RvCiBz
dGF0aWMgaW5saW5lIE9wdGlvbmFsPENvbG9yPiBzeXN0ZW1Db2xvckZyb21DU1NWYWx1ZUlEU2Vs
ZWN0b3IoQ1NTVmFsdWVJREFuZFNlbGVjdG9yIGlkQW5kU2VsZWN0b3IpCiB7CiAgICAgaWYgKGF1
dG8gY29sb3IgPSB3dGZPYmpDTXNnU2VuZDxVSUNvbG9yICo+KFBBTDo6Z2V0VUlDb2xvckNsYXNz
KCksIGlkQW5kU2VsZWN0b3Iuc2VsZWN0b3IpKQotICAgICAgICByZXR1cm4gQ29sb3IgeyBjb2xv
ci5DR0NvbG9yLCBDb2xvcjo6U2VtYW50aWMgfTsKKyAgICAgICAgcmV0dXJuIENvbG9yIHsgY29s
b3IuQ0dDb2xvciwgQ29sb3I6OkZsYWdzOjpTZW1hbnRpYyB9OwogICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiB9CiAKQEAgLTE0MDksNyArMTQwOSw3IEBAIHN0YXRpYyBPcHRpb25hbDxDb2xvcj4g
c3lzdGVtQ29sb3JGcm9tQ1MKIAogICAgIGlmIChhdXRvIHNlbGVjdG9yID0gY3NzQ29sb3JUb1Nl
bGVjdG9yKCkpIHsKICAgICAgICAgaWYgKGF1dG8gY29sb3IgPSB3dGZPYmpDTXNnU2VuZDxVSUNv
bG9yICo+KFBBTDo6Z2V0VUlDb2xvckNsYXNzKCksIHNlbGVjdG9yKSkKLSAgICAgICAgICAgIHJl
dHVybiBDb2xvcihjb2xvci5DR0NvbG9yLCBDb2xvcjo6U2VtYW50aWMpOworICAgICAgICAgICAg
cmV0dXJuIENvbG9yIHsgY29sb3IuQ0dDb2xvciwgQ29sb3I6OkZsYWdzOjpTZW1hbnRpYyB9Owog
ICAgIH0KICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkocmV2aXNpb24gMjczMTk5KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03
MjksMjYgKzcyOSwyNiBAQCBDb2xvciBSZW5kZXJUaGVtZU1hYzo6c3lzdGVtQ29sb3IoQ1NTVmFs
CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVBY3RpdmVib3JkZXI6CiAgICAgICAgICAgICAvLyBIYXJk
Y29kZWQgdG8gYXZvaWQgZXhwb3NpbmcgYSB1c2VyIGFwcGVhcmFuY2UgcHJlZmVyZW5jZSB0byB0
aGUgd2ViIGZvciBmaW5nZXJwcmludGluZy4KICAgICAgICAgICAgIGlmIChsb2NhbEFwcGVhcmFu
Y2UudXNpbmdEYXJrQXBwZWFyYW5jZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiB7IFNSR0JB
PHVpbnQ4X3Q+IHsgMjYsIDE2OSwgMjU1IH0sIENvbG9yOjpTZW1hbnRpYyB9OwotICAgICAgICAg
ICAgcmV0dXJuIHsgU1JHQkE8dWludDhfdD4geyAwLCAxMDMsIDI0NCB9LCBDb2xvcjo6U2VtYW50
aWMgfTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyBTUkdCQTx1aW50OF90PiB7IDI2LCAxNjks
IDI1NSB9LCBDb2xvcjo6RmxhZ3M6OlNlbWFudGljIH07CisgICAgICAgICAgICByZXR1cm4geyBT
UkdCQTx1aW50OF90PiB7IDAsIDEwMywgMjQ0IH0sIENvbG9yOjpGbGFnczo6U2VtYW50aWMgfTsK
IAogICAgICAgICBjYXNlIENTU1ZhbHVlQXBwbGVTeXN0ZW1Db250cm9sQWNjZW50OgogICAgICAg
ICAgICAgLy8gSGFyZGNvZGVkIHRvIGF2b2lkIGV4cG9zaW5nIGEgdXNlciBhcHBlYXJhbmNlIHBy
ZWZlcmVuY2UgdG8gdGhlIHdlYiBmb3IgZmluZ2VycHJpbnRpbmcuCiAgICAgICAgICAgICAvLyBT
YW1lIGNvbG9yIGluIGxpZ2h0IGFuZCBkYXJrIGFwcGVhcmFuY2VzLgotICAgICAgICAgICAgcmV0
dXJuIHsgU1JHQkE8dWludDhfdD4geyAwLCAxMjIsIDI1NSB9LCBDb2xvcjo6U2VtYW50aWMgfTsK
KyAgICAgICAgICAgIHJldHVybiB7IFNSR0JBPHVpbnQ4X3Q+IHsgMCwgMTIyLCAyNTUgfSwgQ29s
b3I6OkZsYWdzOjpTZW1hbnRpYyB9OwogCiAgICAgICAgIGNhc2UgQ1NTVmFsdWVBcHBsZVN5c3Rl
bVNlbGVjdGVkQ29udGVudEJhY2tncm91bmQ6CiAgICAgICAgICAgICAvLyBIYXJkY29kZWQgdG8g
YXZvaWQgZXhwb3NpbmcgYSB1c2VyIGFwcGVhcmFuY2UgcHJlZmVyZW5jZSB0byB0aGUgd2ViIGZv
ciBmaW5nZXJwcmludGluZy4KICAgICAgICAgICAgIGlmIChsb2NhbEFwcGVhcmFuY2UudXNpbmdE
YXJrQXBwZWFyYW5jZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiB7IFNSR0JBPHVpbnQ4X3Q+
IHsgMCwgODgsIDIwOCB9LCBDb2xvcjo6U2VtYW50aWMgfTsKLSAgICAgICAgICAgIHJldHVybiB7
IFNSR0JBPHVpbnQ4X3Q+IHsgMCwgOTksIDIyNSB9LCBDb2xvcjo6U2VtYW50aWMgfTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4geyBTUkdCQTx1aW50OF90PiB7IDAsIDg4LCAyMDggfSwgQ29sb3I6
OkZsYWdzOjpTZW1hbnRpYyB9OworICAgICAgICAgICAgcmV0dXJuIHsgU1JHQkE8dWludDhfdD4g
eyAwLCA5OSwgMjI1IH0sIENvbG9yOjpGbGFnczo6U2VtYW50aWMgfTsKIAogICAgICAgICBjYXNl
IENTU1ZhbHVlSGlnaGxpZ2h0OgogICAgICAgICBjYXNlIENTU1ZhbHVlQXBwbGVTeXN0ZW1TZWxl
Y3RlZFRleHRCYWNrZ3JvdW5kOgogICAgICAgICAgICAgLy8gSGFyZGNvZGVkIHRvIGF2b2lkIGV4
cG9zaW5nIGEgdXNlciBhcHBlYXJhbmNlIHByZWZlcmVuY2UgdG8gdGhlIHdlYiBmb3IgZmluZ2Vy
cHJpbnRpbmcuCiAgICAgICAgICAgICBpZiAobG9jYWxBcHBlYXJhbmNlLnVzaW5nRGFya0FwcGVh
cmFuY2UoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4geyBTUkdCQTx1aW50OF90PiB7IDYzLCA5
OSwgMTM5LCAyMDQgfSwgQ29sb3I6OlNlbWFudGljIH07Ci0gICAgICAgICAgICByZXR1cm4geyBT
UkdCQTx1aW50OF90PiB7IDEyOCwgMTg4LCAyNTQsIDE1MyB9LCBDb2xvcjo6U2VtYW50aWMgfTsK
KyAgICAgICAgICAgICAgICByZXR1cm4geyBTUkdCQTx1aW50OF90PiB7IDYzLCA5OSwgMTM5LCAy
MDQgfSwgQ29sb3I6OkZsYWdzOjpTZW1hbnRpYyB9OworICAgICAgICAgICAgcmV0dXJuIHsgU1JH
QkE8dWludDhfdD4geyAxMjgsIDE4OCwgMjU0LCAxNTMgfSwgQ29sb3I6OkZsYWdzOjpTZW1hbnRp
YyB9OwogCiAjaWYgIUhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiAgICAgICAgIGNhc2UgQ1NT
VmFsdWVBcHBsZVN5c3RlbUNvbnRhaW5lckJvcmRlcjoKSW5kZXg6IExheW91dFRlc3RzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MzE5
OSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0
IEBACisyMDIxLTAyLTIwICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAg
ICBjb2xvcihsYWIgLi4uKSBzaG91bGQgc2VyaWFsaXplIGFzIGNvbG9yKGxhYiAuLi4pIG5vdCBs
YWIoKSBhY2NvcmRpbmcgdG8gbGF0ZXN0IENTUyBDb2xvciA0IHNwZWMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjExMAorCisgICAgICAgIFJldmll
d2VkIGJ5IERlYW4gSmFja3Nvbi4KKworICAgICAgICAqIGZhc3QvY3NzL3BhcnNpbmctbGFiLWNv
bG9ycy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9jc3MvcGFyc2luZy1sYWItY29sb3Jz
Lmh0bWw6CisgICAgICAgIFVwZGF0ZSB0ZXN0IGFuZCByZXN1bHRzIGZvciBuZXcgc2VyaWFsaXph
dGlvbiBvZiBjb2xvcihsYWIgLi4uKS4KKwogMjAyMS0wMi0xOSAgUm9iIEJ1aXMgIDxyYnVpc0Bp
Z2FsaWEuY29tPgogCiAgICAgICAgIFN1cHBvcnQgYXNwZWN0LXJhdGlvIG9uIGZsZXhib3ggaXRl
bXMKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY3NzL3BhcnNpbmctbGFiLWNvbG9ycy1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jc3MvcGFyc2luZy1sYWItY29s
b3JzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjczMTk5KQorKysgTGF5b3V0VGVzdHMvZmFzdC9j
c3MvcGFyc2luZy1sYWItY29sb3JzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw0
ICsxLDQgQEAKLVRlc3QgdGhlIHBhcnNpbmcgb2YgbGFiLCBsY2ggYW5kIGdyYXkgY29sb3JzLgor
VGVzdCB0aGUgcGFyc2luZyBvZiBsYWIoLi4uKSwgbGNoKC4uLikgYW5kIGNvbG9yKGxhYiAuLi4p
IGNvbG9ycy4KIAogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgogCkBAIC00MCwyNiArNDAsMjYg
QEAgUEFTUyBjb21wdXRlZFN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwgIgogUEFTUyBjb21wdXRl
ZFN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImxjaCgxMCUgMjAgLTcwMCkiKSBpcyAibGNoKDEw
JSAyMCAyMCkiCiAKIGNvbG9yKGxhYiApCi1QQVNTIGNvbXB1dGVkU3R5bGUoImJhY2tncm91bmQt
Y29sb3IiLCAiY29sb3IobGFiIDAlIDAgMCkiKSBpcyAibGFiKDAlIDAgMCkiCi1QQVNTIGNvbXB1
dGVkU3R5bGUoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIDAlIDAgMCAvIDEpIikgaXMg
ImxhYigwJSAwIDApIgotUEFTUyBjb21wdXRlZFN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNv
bG9yKGxhYiAwJSAwIDAgLyAwLjUpIikgaXMgImxhYigwJSAwIDAgLyAwLjUpIgotUEFTUyBjb21w
dXRlZFN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiAyMCUgMCAxMC8wLjUpIikg
aXMgImxhYigyMCUgMCAxMCAvIDAuNSkiCi1QQVNTIGNvbXB1dGVkU3R5bGUoImJhY2tncm91bmQt
Y29sb3IiLCAiY29sb3IobGFiIDIwJSAwIDEwLzUwJSkiKSBpcyAibGFiKDIwJSAwIDEwIC8gMC41
KSIKLVBBU1MgY29tcHV0ZWRTdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgNDAw
JSAwIDEwLzUwJSkiKSBpcyAibGFiKDQwMCUgMCAxMCAvIDAuNSkiCi1QQVNTIGNvbXB1dGVkU3R5
bGUoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIDUwJSAtMTYwIDE2MCkiKSBpcyAibGFi
KDUwJSAtMTYwIDE2MCkiCi1QQVNTIGNvbXB1dGVkU3R5bGUoImJhY2tncm91bmQtY29sb3IiLCAi
Y29sb3IobGFiIDUwJSAtMjAwIDIwMCkiKSBpcyAibGFiKDUwJSAtMjAwIDIwMCkiCi1QQVNTIGNv
bXB1dGVkU3R5bGUoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIDAlIDAgMCAvIC0xMCUp
IikgaXMgImxhYigwJSAwIDAgLyAwKSIKLVBBU1MgY29tcHV0ZWRTdHlsZSgiYmFja2dyb3VuZC1j
b2xvciIsICJjb2xvcihsYWIgMCUgMCAwIC8gMTEwJSkiKSBpcyAibGFiKDAlIDAgMCkiCi1QQVNT
IGNvbXB1dGVkU3R5bGUoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIDAlIDAgMCAvIDMw
MCUpIikgaXMgImxhYigwJSAwIDApIgotUEFTUyBjb21wdXRlZFN0eWxlKCJiYWNrZ3JvdW5kLWNv
bG9yIiwgImNvbG9yKGxhYiA1MCUgLTIwMCkiKSBpcyAibGFiKDUwJSAtMjAwIDApIgotUEFTUyBj
b21wdXRlZFN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiA1MCUpIikgaXMgImxh
Yig1MCUgMCAwKSIKLVBBU1MgY29tcHV0ZWRTdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xv
cihsYWIpIikgaXMgImxhYigwJSAwIDApIgotUEFTUyBjb21wdXRlZFN0eWxlKCJiYWNrZ3JvdW5k
LWNvbG9yIiwgImNvbG9yKGxhYiA1MCUgLTIwMCAvIDAuNSkiKSBpcyAibGFiKDUwJSAtMjAwIDAg
LyAwLjUpIgotUEFTUyBjb21wdXRlZFN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxh
YiA1MCUgLyAwLjUpIikgaXMgImxhYig1MCUgMCAwIC8gMC41KSIKLVBBU1MgY29tcHV0ZWRTdHls
ZSgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgLyAwLjUpIikgaXMgImxhYigwJSAwIDAg
LyAwLjUpIgotUEFTUyBjb21wdXRlZFN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxh
YiAtNDAlIDAgMCkiKSBpcyAibGFiKDAlIDAgMCkiCi1QQVNTIGNvbXB1dGVkU3R5bGUoImJhY2tn
cm91bmQtY29sb3IiLCAiY29sb3IobGFiIDUwJSAtMjAgMCkiKSBpcyAibGFiKDUwJSAtMjAgMCki
Ci1QQVNTIGNvbXB1dGVkU3R5bGUoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIDUwJSAw
IC0yMCkiKSBpcyAibGFiKDUwJSAwIC0yMCkiCitQQVNTIGNvbXB1dGVkU3R5bGUoImJhY2tncm91
bmQtY29sb3IiLCAiY29sb3IobGFiIDAlIDAgMCkiKSBpcyAiY29sb3IobGFiIDAlIDAgMCkiCitQ
QVNTIGNvbXB1dGVkU3R5bGUoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIDAlIDAgMCAv
IDEpIikgaXMgImNvbG9yKGxhYiAwJSAwIDApIgorUEFTUyBjb21wdXRlZFN0eWxlKCJiYWNrZ3Jv
dW5kLWNvbG9yIiwgImNvbG9yKGxhYiAwJSAwIDAgLyAwLjUpIikgaXMgImNvbG9yKGxhYiAwJSAw
IDAgLyAwLjUpIgorUEFTUyBjb21wdXRlZFN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9y
KGxhYiAyMCUgMCAxMC8wLjUpIikgaXMgImNvbG9yKGxhYiAyMCUgMCAxMCAvIDAuNSkiCitQQVNT
IGNvbXB1dGVkU3R5bGUoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIDIwJSAwIDEwLzUw
JSkiKSBpcyAiY29sb3IobGFiIDIwJSAwIDEwIC8gMC41KSIKK1BBU1MgY29tcHV0ZWRTdHlsZSgi
YmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgNDAwJSAwIDEwLzUwJSkiKSBpcyAiY29sb3Io
bGFiIDQwMCUgMCAxMCAvIDAuNSkiCitQQVNTIGNvbXB1dGVkU3R5bGUoImJhY2tncm91bmQtY29s
b3IiLCAiY29sb3IobGFiIDUwJSAtMTYwIDE2MCkiKSBpcyAiY29sb3IobGFiIDUwJSAtMTYwIDE2
MCkiCitQQVNTIGNvbXB1dGVkU3R5bGUoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIDUw
JSAtMjAwIDIwMCkiKSBpcyAiY29sb3IobGFiIDUwJSAtMjAwIDIwMCkiCitQQVNTIGNvbXB1dGVk
U3R5bGUoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIDAlIDAgMCAvIC0xMCUpIikgaXMg
ImNvbG9yKGxhYiAwJSAwIDAgLyAwKSIKK1BBU1MgY29tcHV0ZWRTdHlsZSgiYmFja2dyb3VuZC1j
b2xvciIsICJjb2xvcihsYWIgMCUgMCAwIC8gMTEwJSkiKSBpcyAiY29sb3IobGFiIDAlIDAgMCki
CitQQVNTIGNvbXB1dGVkU3R5bGUoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIDAlIDAg
MCAvIDMwMCUpIikgaXMgImNvbG9yKGxhYiAwJSAwIDApIgorUEFTUyBjb21wdXRlZFN0eWxlKCJi
YWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiA1MCUgLTIwMCkiKSBpcyAiY29sb3IobGFiIDUw
JSAtMjAwIDApIgorUEFTUyBjb21wdXRlZFN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9y
KGxhYiA1MCUpIikgaXMgImNvbG9yKGxhYiA1MCUgMCAwKSIKK1BBU1MgY29tcHV0ZWRTdHlsZSgi
YmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIpIikgaXMgImNvbG9yKGxhYiAwJSAwIDApIgor
UEFTUyBjb21wdXRlZFN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiA1MCUgLTIw
MCAvIDAuNSkiKSBpcyAiY29sb3IobGFiIDUwJSAtMjAwIDAgLyAwLjUpIgorUEFTUyBjb21wdXRl
ZFN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiA1MCUgLyAwLjUpIikgaXMgImNv
bG9yKGxhYiA1MCUgMCAwIC8gMC41KSIKK1BBU1MgY29tcHV0ZWRTdHlsZSgiYmFja2dyb3VuZC1j
b2xvciIsICJjb2xvcihsYWIgLyAwLjUpIikgaXMgImNvbG9yKGxhYiAwJSAwIDAgLyAwLjUpIgor
UEFTUyBjb21wdXRlZFN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiAtNDAlIDAg
MCkiKSBpcyAiY29sb3IobGFiIDAlIDAgMCkiCitQQVNTIGNvbXB1dGVkU3R5bGUoImJhY2tncm91
bmQtY29sb3IiLCAiY29sb3IobGFiIDUwJSAtMjAgMCkiKSBpcyAiY29sb3IobGFiIDUwJSAtMjAg
MCkiCitQQVNTIGNvbXB1dGVkU3R5bGUoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIDUw
JSAwIC0yMCkiKSBpcyAiY29sb3IobGFiIDUwJSAwIC0yMCkiCiAKIFRlc3QgaW52YWxpZCB2YWx1
ZXMKIFBBU1MgY29tcHV0ZWRTdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsICJsYWIoMCAwIDApIikg
aXMgInJnYmEoMCwgMCwgMCwgMCkiCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9wYXJzaW5n
LWxhYi1jb2xvcnMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9wYXJz
aW5nLWxhYi1jb2xvcnMuaHRtbAkocmV2aXNpb24gMjczMTk5KQorKysgTGF5b3V0VGVzdHMvZmFz
dC9jc3MvcGFyc2luZy1sYWItY29sb3JzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3
IEBACiA8L2hlYWQ+CiA8Ym9keT4KIDxzY3JpcHQ+Ci0gICAgZGVzY3JpcHRpb24oIlRlc3QgdGhl
IHBhcnNpbmcgb2YgbGFiLCBsY2ggYW5kIGdyYXkgY29sb3JzLiIpOworICAgIGRlc2NyaXB0aW9u
KCJUZXN0IHRoZSBwYXJzaW5nIG9mIGxhYiguLi4pLCBsY2goLi4uKSBhbmQgY29sb3IobGFiIC4u
LikgY29sb3JzLiIpOwogCiAgICAgZnVuY3Rpb24gY29tcHV0ZWRTdHlsZShwcm9wZXJ0eSwgdmFs
dWUpCiAgICAgewpAQCAtNzQsMjYgKzc0LDI2IEBACiAKICAgICBkZWJ1ZygnJyk7CiAgICAgZGVi
dWcoJ2NvbG9yKGxhYiApJyk7Ci0gICAgdGVzdENvbXB1dGVkKCJiYWNrZ3JvdW5kLWNvbG9yIiwg
ImNvbG9yKGxhYiAwJSAwIDApIiwgImxhYigwJSAwIDApIik7Ci0gICAgdGVzdENvbXB1dGVkKCJi
YWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiAwJSAwIDAgLyAxKSIsICJsYWIoMCUgMCAwKSIp
OwotICAgIHRlc3RDb21wdXRlZCgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgMCUgMCAw
IC8gMC41KSIsICJsYWIoMCUgMCAwIC8gMC41KSIpOwotICAgIHRlc3RDb21wdXRlZCgiYmFja2dy
b3VuZC1jb2xvciIsICJjb2xvcihsYWIgMjAlIDAgMTAvMC41KSIsICJsYWIoMjAlIDAgMTAgLyAw
LjUpIik7Ci0gICAgdGVzdENvbXB1dGVkKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiAy
MCUgMCAxMC81MCUpIiwgImxhYigyMCUgMCAxMCAvIDAuNSkiKTsKLSAgICB0ZXN0Q29tcHV0ZWQo
ImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIDQwMCUgMCAxMC81MCUpIiwgImxhYig0MDAl
IDAgMTAgLyAwLjUpIik7Ci0gICAgdGVzdENvbXB1dGVkKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNv
bG9yKGxhYiA1MCUgLTE2MCAxNjApIiwgImxhYig1MCUgLTE2MCAxNjApIik7Ci0gICAgdGVzdENv
bXB1dGVkKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiA1MCUgLTIwMCAyMDApIiwgImxh
Yig1MCUgLTIwMCAyMDApIik7Ci0gICAgdGVzdENvbXB1dGVkKCJiYWNrZ3JvdW5kLWNvbG9yIiwg
ImNvbG9yKGxhYiAwJSAwIDAgLyAtMTAlKSIsICJsYWIoMCUgMCAwIC8gMCkiKTsKLSAgICB0ZXN0
Q29tcHV0ZWQoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIDAlIDAgMCAvIDExMCUpIiwg
ImxhYigwJSAwIDApIik7Ci0gICAgdGVzdENvbXB1dGVkKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNv
bG9yKGxhYiAwJSAwIDAgLyAzMDAlKSIsICJsYWIoMCUgMCAwKSIpOwotICAgIHRlc3RDb21wdXRl
ZCgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgNTAlIC0yMDApIiwgImxhYig1MCUgLTIw
MCAwKSIpOwotICAgIHRlc3RDb21wdXRlZCgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIg
NTAlKSIsICJsYWIoNTAlIDAgMCkiKTsKLSAgICB0ZXN0Q29tcHV0ZWQoImJhY2tncm91bmQtY29s
b3IiLCAiY29sb3IobGFiKSIsICJsYWIoMCUgMCAwKSIpOwotICAgIHRlc3RDb21wdXRlZCgiYmFj
a2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgNTAlIC0yMDAgLyAwLjUpIiwgImxhYig1MCUgLTIw
MCAwIC8gMC41KSIpOwotICAgIHRlc3RDb21wdXRlZCgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xv
cihsYWIgNTAlIC8gMC41KSIsICJsYWIoNTAlIDAgMCAvIDAuNSkiKTsKLSAgICB0ZXN0Q29tcHV0
ZWQoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIC8gMC41KSIsICJsYWIoMCUgMCAwIC8g
MC41KSIpOwotICAgIHRlc3RDb21wdXRlZCgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIg
LTQwJSAwIDApIiwgImxhYigwJSAwIDApIik7Ci0gICAgdGVzdENvbXB1dGVkKCJiYWNrZ3JvdW5k
LWNvbG9yIiwgImNvbG9yKGxhYiA1MCUgLTIwIDApIiwgImxhYig1MCUgLTIwIDApIik7Ci0gICAg
dGVzdENvbXB1dGVkKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiA1MCUgMCAtMjApIiwg
ImxhYig1MCUgMCAtMjApIik7CisgICAgdGVzdENvbXB1dGVkKCJiYWNrZ3JvdW5kLWNvbG9yIiwg
ImNvbG9yKGxhYiAwJSAwIDApIiwgImNvbG9yKGxhYiAwJSAwIDApIik7CisgICAgdGVzdENvbXB1
dGVkKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiAwJSAwIDAgLyAxKSIsICJjb2xvcihs
YWIgMCUgMCAwKSIpOworICAgIHRlc3RDb21wdXRlZCgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xv
cihsYWIgMCUgMCAwIC8gMC41KSIsICJjb2xvcihsYWIgMCUgMCAwIC8gMC41KSIpOworICAgIHRl
c3RDb21wdXRlZCgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgMjAlIDAgMTAvMC41KSIs
ICJjb2xvcihsYWIgMjAlIDAgMTAgLyAwLjUpIik7CisgICAgdGVzdENvbXB1dGVkKCJiYWNrZ3Jv
dW5kLWNvbG9yIiwgImNvbG9yKGxhYiAyMCUgMCAxMC81MCUpIiwgImNvbG9yKGxhYiAyMCUgMCAx
MCAvIDAuNSkiKTsKKyAgICB0ZXN0Q29tcHV0ZWQoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3Io
bGFiIDQwMCUgMCAxMC81MCUpIiwgImNvbG9yKGxhYiA0MDAlIDAgMTAgLyAwLjUpIik7CisgICAg
dGVzdENvbXB1dGVkKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiA1MCUgLTE2MCAxNjAp
IiwgImNvbG9yKGxhYiA1MCUgLTE2MCAxNjApIik7CisgICAgdGVzdENvbXB1dGVkKCJiYWNrZ3Jv
dW5kLWNvbG9yIiwgImNvbG9yKGxhYiA1MCUgLTIwMCAyMDApIiwgImNvbG9yKGxhYiA1MCUgLTIw
MCAyMDApIik7CisgICAgdGVzdENvbXB1dGVkKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxh
YiAwJSAwIDAgLyAtMTAlKSIsICJjb2xvcihsYWIgMCUgMCAwIC8gMCkiKTsKKyAgICB0ZXN0Q29t
cHV0ZWQoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiIDAlIDAgMCAvIDExMCUpIiwgImNv
bG9yKGxhYiAwJSAwIDApIik7CisgICAgdGVzdENvbXB1dGVkKCJiYWNrZ3JvdW5kLWNvbG9yIiwg
ImNvbG9yKGxhYiAwJSAwIDAgLyAzMDAlKSIsICJjb2xvcihsYWIgMCUgMCAwKSIpOworICAgIHRl
c3RDb21wdXRlZCgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgNTAlIC0yMDApIiwgImNv
bG9yKGxhYiA1MCUgLTIwMCAwKSIpOworICAgIHRlc3RDb21wdXRlZCgiYmFja2dyb3VuZC1jb2xv
ciIsICJjb2xvcihsYWIgNTAlKSIsICJjb2xvcihsYWIgNTAlIDAgMCkiKTsKKyAgICB0ZXN0Q29t
cHV0ZWQoImJhY2tncm91bmQtY29sb3IiLCAiY29sb3IobGFiKSIsICJjb2xvcihsYWIgMCUgMCAw
KSIpOworICAgIHRlc3RDb21wdXRlZCgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgNTAl
IC0yMDAgLyAwLjUpIiwgImNvbG9yKGxhYiA1MCUgLTIwMCAwIC8gMC41KSIpOworICAgIHRlc3RD
b21wdXRlZCgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgNTAlIC8gMC41KSIsICJjb2xv
cihsYWIgNTAlIDAgMCAvIDAuNSkiKTsKKyAgICB0ZXN0Q29tcHV0ZWQoImJhY2tncm91bmQtY29s
b3IiLCAiY29sb3IobGFiIC8gMC41KSIsICJjb2xvcihsYWIgMCUgMCAwIC8gMC41KSIpOworICAg
IHRlc3RDb21wdXRlZCgiYmFja2dyb3VuZC1jb2xvciIsICJjb2xvcihsYWIgLTQwJSAwIDApIiwg
ImNvbG9yKGxhYiAwJSAwIDApIik7CisgICAgdGVzdENvbXB1dGVkKCJiYWNrZ3JvdW5kLWNvbG9y
IiwgImNvbG9yKGxhYiA1MCUgLTIwIDApIiwgImNvbG9yKGxhYiA1MCUgLTIwIDApIik7CisgICAg
dGVzdENvbXB1dGVkKCJiYWNrZ3JvdW5kLWNvbG9yIiwgImNvbG9yKGxhYiA1MCUgMCAtMjApIiwg
ImNvbG9yKGxhYiA1MCUgMCAtMjApIik7CiAKICAgICBkZWJ1ZygnJyk7CiAgICAgZGVidWcoJ1Rl
c3QgaW52YWxpZCB2YWx1ZXMnKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>