<?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>240777</bug_id>
          
          <creation_ts>2022-05-22 16:03:42 -0700</creation_ts>
          <short_desc>[GPU Process] [Filters] Don&apos;t use Uint8ClampedArray in software filter appliers</short_desc>
          <delta_ts>2022-05-26 11:37:17 -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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=240964</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>231253</blocked>
    
    <blocked>240269</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>heycam</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1871041</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-05-22 16:03:42 -0700</bug_when>
    <thetext>The plan is to allocate the FilterImage buffers differently for GPUProcess. So the first step is to hide the underlying memory of PixelBuffer from the software filter appliers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1871043</commentid>
    <comment_count>1</comment_count>
      <attachid>459654</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-05-22 16:15:12 -0700</bug_when>
    <thetext>Created attachment 459654
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1871047</commentid>
    <comment_count>2</comment_count>
      <attachid>459655</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-05-22 17:04:07 -0700</bug_when>
    <thetext>Created attachment 459655
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1871048</commentid>
    <comment_count>3</comment_count>
      <attachid>459656</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-05-22 17:21:11 -0700</bug_when>
    <thetext>Created attachment 459656
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1871058</commentid>
    <comment_count>4</comment_count>
      <attachid>459660</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-05-22 20:59:32 -0700</bug_when>
    <thetext>Created attachment 459660
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1871065</commentid>
    <comment_count>5</comment_count>
      <attachid>459662</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-05-22 22:43:10 -0700</bug_when>
    <thetext>Created attachment 459662
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1871230</commentid>
    <comment_count>6</comment_count>
      <attachid>459685</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-05-23 10:26:29 -0700</bug_when>
    <thetext>Created attachment 459685
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1871251</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-05-23 12:00:09 -0700</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #0)
&gt; The plan is to allocate the FilterImage buffers differently for GPUProcess.
&gt; So the first step is to hide the underlying memory of PixelBuffer from the
&gt; software filter appliers.

This doesn&apos;t really seem to be hiding the buffers. It is in fact seems to make getting raw access to the bytes even easier:

  uint8_t* bytes() const;
  size_t byteLength() const;


Can you expand a bit on what the intent of these changes are?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1871252</commentid>
    <comment_count>8</comment_count>
      <attachid>459685</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-05-23 12:06:54 -0700</bug_when>
    <thetext>Comment on attachment 459685
Patch

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

&gt; Source/WebCore/platform/graphics/PixelBuffer.h:67
&gt; +    bool setRange(const void* data, size_t dataByteLength, size_t byteOffset);

Please don&apos;t introduce new functions that take raw void* pointers. If it must be a raw pointer, please use uint8_t* for data buffers. But also, please prefer Span&lt;&gt;.

&gt; Source/WebCore/platform/graphics/filters/software/FEGaussianBlurSoftwareApplier.cpp:389
&gt; +                    // FIXME: No need to create a PixelBuffer if it is RefCounted class.

Can you clarify what this FIXME means? If what is RefCounted?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1871256</commentid>
    <comment_count>9</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-05-23 12:16:25 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #7)
&gt; (In reply to Said Abou-Hallawa from comment #0)
&gt; &gt; The plan is to allocate the FilterImage buffers differently for GPUProcess.
&gt; &gt; So the first step is to hide the underlying memory of PixelBuffer from the
&gt; &gt; software filter appliers.
&gt; 
&gt; This doesn&apos;t really seem to be hiding the buffers. It is in fact seems to
&gt; make getting raw access to the bytes even easier:
&gt; 
&gt;   uint8_t* bytes() const;
&gt;   size_t byteLength() const;
&gt; 
&gt; 
&gt; Can you expand a bit on what the intent of these changes are?

We want to allocate shared memory for PixelBuffer when it is created for Software filter appliers in GPUP. The goal is to attribute them to WebProcess so we can avoid jetsam the GPUP when the filter is a little bit large or complex (has many effects).

The JS Uint8ClampedArray does not work well in this case. In fact I do not think there is any need to back the PixelBuffer with Uint8ClampedArray even if it is created in WebProcess.

The full change is in https://bugs.webkit.org/attachment.cgi?id=459639&amp;action=review. 

I think the final change should be something like this:

class PixelBuffer : public RefCounted&lt;PixelBuffer&gt; {
{
public:
    virtual uint8_t* bytes() const = 0;
    virtual size_t byteLength() const = 0;
};

class JSPixelBuffer : public PixelBuffer {
{
public:
    virtual uint8_t* bytes() const override { return m_data-&gt;data(); }
    virtual size_t byteLength() const { return m_data-&gt;byteLength(); }
private:
    Ref&lt;JSC::Uint8ClampedArray&gt; m_data;
};

class ShareablePixelBuffer : public WebCore::PixelBuffer {
public:
    virtual uint8_t* bytes() const override { return static_cast&lt;uint8_t*&gt;(m_data-&gt;data()); }
    virtual size_t byteLength() const { return m_data-&gt;size(); }
private:
    Ref&lt;SharedMemory&gt; m_data;
};</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1871259</commentid>
    <comment_count>10</comment_count>
      <attachid>459685</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-05-23 12:31:48 -0700</bug_when>
    <thetext>Comment on attachment 459685
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/filters/software/FEGaussianBlurSoftwareApplier.cpp:389
&gt;&gt; +                    // FIXME: No need to create a PixelBuffer if it is RefCounted class.
&gt; 
&gt; Can you clarify what this FIXME means? If what is RefCounted?

Although we start by a PixelBuffer in FEGaussianBlurSoftwareApplier::apply() and we fall back to use Uint8ClampedArray because it is RefCounted. The problem is when if (!job) is true we used to store ioBuffer and tmpPixelArray in FEGaussianBlurSoftwareApplier::ApplyParameters. When  if (!job) is false we used to create new Uint8ClampedArray. Because I need to change everything to be PixelBuffer. I changed FEGaussianBlurSoftwareApplier::ApplyParameters to look like this:

    struct ApplyParameters {
        std::optional&lt;PixelBuffer&gt; ioBuffer;
        std::optional&lt;PixelBuffer&gt; tempBuffer;
    }

So I needed to copy (but not deep copy) the PixelBuffers ioBuffer and tempBuffer. If we make PixelBuffer RefCounted, ApplyParameters will be changed to be like this:

    struct ApplyParameters {
        RefPtr&lt;PixelBuffer&gt; ioBuffer;
        RefPtr&lt;PixelBuffer&gt; tempBuffer;
    }

And the code below will be changed to be like this:

params.ioBuffer = &amp;ioBuffer;
params.tempBuffer = &amp;tempBuffer;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1871416</commentid>
    <comment_count>11</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-05-23 22:14:47 -0700</bug_when>
    <thetext>Pull request: https://github.com/WebKit/WebKit/pull/967</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1871789</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-05-25 11:32:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/93916935&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1871873</commentid>
    <comment_count>13</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-05-25 15:58:54 -0700</bug_when>
    <thetext>Committed r294832 (250982@main): &lt;https://commits.webkit.org/250982@main&gt;

Reviewed commits have been landed. Closing PR #967 and removing active labels.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459654</attachid>
            <date>2022-05-22 16:15:12 -0700</date>
            <delta_ts>2022-05-22 17:35:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-240777-20220522161511.patch</filename>
            <type>text/plain</type>
            <size>62125</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">RnJvbSAzOTc2MmRkOWUzMGI3ZWExZDI1Y2EwOTNjNzNlYTAzYjRiN2M3NmNjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTYWlkIEFib3UtSGFsbGF3YSA8c2FpZEBhcHBsZS5jb20+CkRh
dGU6IFN1biwgMjIgTWF5IDIwMjIgMTY6MTM6NDUgLTA3MDAKU3ViamVjdDogW1BBVENIXSBbR1BV
IFByb2Nlc3NdIFtGaWx0ZXJzXSBEb24ndCB1c2UgVWludDhDbGFtcGVkQXJyYXkgaW4KIHNvZnR3
YXJlIGZpbHRlciBhcHBsaWVycyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjQwNzc3CgpUaGUgcGxhbiBpcyB0byBhbGxvY2F0ZSB0aGUgRmlsdGVySW1hZ2UgYnVmZmVy
cyBkaWZmZXJlbnRseSBmb3IgR1BVUHJvY2Vzcy4gU28gdGhlIGZpcnN0IHN0ZXAgaXMgdG8gaGlk
ZSB0aGUgdW5kZXJseWluZyBtZW1vcnkgb2YgUGl4ZWxCdWZmZXIgZnJvbSB0aGUgc29mdHdhcmUg
ZmlsdGVyIGFwcGxpZXJzLgotLS0KIC4uLi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVs
QnVmZmVyLmNwcCB8IDUwICsrKysrKysrKysrKy0KIC4uLi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BpeGVsQnVmZmVyLmggICB8IDE2ICsrKy0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9zaXRlLmggICB8ICAyIC0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckltYWdlLmNwcCB8IDM5ICsrKysrLS0tLS0KIC4uLi9zb2Z0d2FyZS9GRUNvbG9yTWF0
cml4U29mdHdhcmVBcHBsaWVyLmNwcCB8IDY5ICsrKysrKysrLS0tLS0tLS0tLQogLi4uL0ZFQ29t
cG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIuY3BwICAgIHwgIDkgKy0tCiAuLi4vc29mdHdh
cmUvRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIuY3BwICAgfCAxMiArLS0KIC4uLi9GRUNvbnZv
bHZlTWF0cml4U29mdHdhcmVBcHBsaWVyLmNwcCAgICAgICB8IDM3ICsrKysrLS0tLS0KIC4uLi9G
RUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyLmggICAgICAgICB8ICA2ICstCiAuLi4vRkVE
aXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIuY3BwICAgICAgfCAxNiArKy0tCiAuLi4vc29m
dHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyLmNwcCAgfCAgNSArLQogLi4uL0ZFR2F1
c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmNwcCAgICAgICAgIHwgNzMgKysrKysrKysrLS0tLS0t
LS0tLQogLi4uL3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmggIHwgMTYg
KystLQogLi4uL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3BwICAgIHwgIDYg
Ky0KIC4uLi9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmggICAgICB8ICAyICst
CiAuLi4vc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmNwcCAgfCAyNSArKyst
LS0tCiAuLi4vc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmggICAgfCAgNiAr
LQogLi4uL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllci5jcHAgIHwgMjAgKysr
LS0KIC4uLi9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuaCAgICB8ICA2ICst
CiAxOSBmaWxlcyBjaGFuZ2VkLCAyMjIgaW5zZXJ0aW9ucygrKSwgMTkzIGRlbGV0aW9ucygtKQoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmNwcApp
bmRleCA3NTQzZjQ3NWEyN2EuLmNlNThkMGFjOGNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjAsOSArMTIwLDU1IEBAIFBpeGVs
QnVmZmVyIFBpeGVsQnVmZmVyOjpkZWVwQ2xvbmUoKSBjb25zdAogICAgIHJldHVybiB7IG1fZm9y
bWF0LCBtX3NpemUsIFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUobV9kYXRhLT5kYXRhKCksIG1f
ZGF0YS0+bGVuZ3RoKCkpIH07CiB9CiAKK3VpbnQ4X3QqIFBpeGVsQnVmZmVyOjpieXRlcygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YS0+ZGF0YSgpOworfQorCitzaXplX3QgUGl4ZWxCdWZm
ZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAoreworICAgIEFTU0VSVChtX2RhdGEtPmJ5dGVMZW5ndGgo
KSA9PSBtX3NpemUuYXJlYSgpICogNCk7CisgICAgcmV0dXJuIG1fZGF0YS0+Ynl0ZUxlbmd0aCgp
OworfQorCitib29sIFBpeGVsQnVmZmVyOjpzZXRSYW5nZShjb25zdCB2b2lkKiBkYXRhLCBzaXpl
X3QgZGF0YUJ5dGVMZW5ndGgsIHNpemVfdCBieXRlT2Zmc2V0KQoreworICAgIGlmICghaXNTdW1T
bWFsbGVyVGhhbk9yRXF1YWwoYnl0ZU9mZnNldCwgZGF0YUJ5dGVMZW5ndGgsIGJ5dGVMZW5ndGgo
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1lbW1vdmUoYnl0ZXMoKSArIGJ5dGVP
ZmZzZXQsIGRhdGEsIGRhdGFCeXRlTGVuZ3RoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBQaXhlbEJ1ZmZlcjo6emVyb1JhbmdlKHNpemVfdCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VC
eXRlTGVuZ3RoKQoreworICAgIGlmICghaXNTdW1TbWFsbGVyVGhhbk9yRXF1YWwoYnl0ZU9mZnNl
dCwgcmFuZ2VCeXRlTGVuZ3RoLCBieXRlTGVuZ3RoKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBtZW1zZXQoYnl0ZXMoKSArIGJ5dGVPZmZzZXQsIDAsIHJhbmdlQnl0ZUxlbmd0aCk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3VpbnQ4X3QgUGl4ZWxCdWZmZXI6Oml0ZW0oc2l6ZV90
IGluZGV4KSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04oaW5kZXggPCBieXRlTGVuZ3RoKCkpOworICAgIHJldHVybiBieXRlcygpW2luZGV4XTsK
K30KKwordm9pZCBQaXhlbEJ1ZmZlcjo6c2V0KHNpemVfdCBpbmRleCwgZmxvYXQgdmFsdWUpCit7
CisgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IGJ5
dGVMZW5ndGgoKSk7CisgICAgYnl0ZXMoKVtpbmRleF0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2
YWx1ZSk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IFBpeGVsQnVmZmVyOjpjcmVh
dGVTY3JhdGNoUGl4ZWxCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShtX2Zvcm1hdCwgc2l6ZSk7Cit9CisKIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFBpeGVsQnVmZmVyJiBwaXhl
bEJ1ZmZlcikKIHsKICAgICByZXR1cm4gdHMgPDwgJnBpeGVsQnVmZmVyLmRhdGEoKSA8PCAiZm9y
bWF0ICggIiA8PCBwaXhlbEJ1ZmZlci5mb3JtYXQoKSA8PCAiKSI7CiB9CiAKLX0KK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BpeGVsQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhl
bEJ1ZmZlci5oCmluZGV4IDA0MzRjZWViOTg3Zi4uNGRlNzg3NTUzOGFjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjEsNiArNjEsMTggQEAg
cHVibGljOgogCiAgICAgUGl4ZWxCdWZmZXIgZGVlcENsb25lKCkgY29uc3Q7CiAKKyAgICB1aW50
OF90KiBieXRlcygpIGNvbnN0OworICAgIHNpemVfdCBieXRlTGVuZ3RoKCkgY29uc3Q7CisKKyAg
ICBib29sIHNldFJhbmdlKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhQnl0ZUxlbmd0aCwg
c2l6ZV90IGJ5dGVPZmZzZXQpOworICAgIGJvb2wgemVyb1JhbmdlKHNpemVfdCBieXRlT2Zmc2V0
LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKTsKKyAgICB2b2lkIHplcm9GaWxsKCkgeyB6ZXJvUmFu
Z2UoMCwgYnl0ZUxlbmd0aCgpKTsgfQorCisgICAgdWludDhfdCBpdGVtKHNpemVfdCBpbmRleCkg
Y29uc3Q7CisgICAgdm9pZCBzZXQoc2l6ZV90IGluZGV4LCBmbG9hdCB2YWx1ZSk7CisKKyAgICBz
dGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBjcmVhdGVTY3JhdGNoUGl4ZWxCdWZmZXIoY29uc3Qg
SW50U2l6ZSYpIGNvbnN0OworCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBkZWNvZGUoRGVjb2RlciYpOwogCkBAIC0xMTksNCAr
MTMxLDQgQEAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZl
cj4gUGl4ZWxCdWZmZXI6OmRlY29kZShEZWNvZGVyJgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAppbmRleCAxOWI2OGY0YWU5ZDIu
LjY4MDFiN2RjZjU0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaApAQCAtNzMsOCArNzMsNiBAQCBwcml2YXRlOgog
CiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGlubGlu
ZSB2b2lkIHBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5
JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgZmxvYXQgazEsIGZsb2F0
IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOwotCiAjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNT
KQogICAgIHRlbXBsYXRlIDxpbnQgYjEsIGludCBiND4KICAgICBzdGF0aWMgaW5saW5lIHZvaWQg
Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHNOZW9uKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhf
dCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9h
dCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKaW5kZXggYjEwNmRmM2Ix
ZmZjLi44MDhkNDg1YjRjZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAwLDQ2ICszMDAsNDUgQEAg
dm9pZCBGaWx0ZXJJbWFnZTo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpCiAgICAg
aWYgKCFtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlciB8fCBtX2lzVmFsaWRQcmVtdWx0aXBsaWVk
KQogICAgICAgICByZXR1cm47CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSYgaW1hZ2VBcnJheSA9
IG1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgdWludDhfdCogcGl4ZWxE
YXRhID0gaW1hZ2VBcnJheS5kYXRhKCk7Ci0gICAgaW50IHBpeGVsQXJyYXlMZW5ndGggPSBpbWFn
ZUFycmF5Lmxlbmd0aCgpOworICAgIHVpbnQ4X3QqIHBpeGVsQnl0ZXMgPSBtX3ByZW11bHRpcGxp
ZWRQaXhlbEJ1ZmZlci0+Ynl0ZXMoKTsKKyAgICBpbnQgcGl4ZWxCeXRlTGVuZ3RoID0gbV9wcmVt
dWx0aXBsaWVkUGl4ZWxCdWZmZXItPmJ5dGVMZW5ndGgoKTsKIAogICAgIC8vIFdlIG11c3QgaGF2
ZSBmb3VyIGJ5dGVzIHBlciBwaXhlbCwgYW5kIGNvbXBsZXRlIHBpeGVscwotICAgIEFTU0VSVCgh
KHBpeGVsQXJyYXlMZW5ndGggJSA0KSk7CisgICAgQVNTRVJUKCEocGl4ZWxCeXRlTGVuZ3RoICUg
NCkpOwogCiAjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgIGlmIChwaXhlbEFycmF5
TGVuZ3RoID49IDY0KSB7Ci0gICAgICAgIHVpbnQ4X3QqIGxhc3RQaXhlbCA9IHBpeGVsRGF0YSAr
IChwaXhlbEFycmF5TGVuZ3RoICYgfjB4M2YpOworICAgIGlmIChwaXhlbEJ5dGVMZW5ndGggPj0g
NjQpIHsKKyAgICAgICAgdWludDhfdCogbGFzdFBpeGVsID0gcGl4ZWxCeXRlcyArIChwaXhlbEJ5
dGVMZW5ndGggJiB+MHgzZik7CiAgICAgICAgIGRvIHsKLSAgICAgICAgICAgIC8vIEluY3JlbWVu
dHMgcGl4ZWxEYXRhIGJ5IDY0LgotICAgICAgICAgICAgdWludDh4MTZ4NF90IHNpeHRlZW5QaXhl
bHMgPSB2bGQ0cV91OChwaXhlbERhdGEpOworICAgICAgICAgICAgLy8gSW5jcmVtZW50cyBwaXhl
bEJ5dGVzIGJ5IDY0LgorICAgICAgICAgICAgdWludDh4MTZ4NF90IHNpeHRlZW5QaXhlbHMgPSB2
bGQ0cV91OChwaXhlbEJ5dGVzKTsKICAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzBdID0g
dm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMF0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKICAg
ICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzFdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52
YWxbMV0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKICAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMu
dmFsWzJdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMl0sIHNpeHRlZW5QaXhlbHMudmFs
WzNdKTsKLSAgICAgICAgICAgIHZzdDRxX3U4KHBpeGVsRGF0YSwgc2l4dGVlblBpeGVscyk7Ci0g
ICAgICAgICAgICBwaXhlbERhdGEgKz0gNjQ7Ci0gICAgICAgIH0gd2hpbGUgKHBpeGVsRGF0YSA8
IGxhc3RQaXhlbCk7CisgICAgICAgICAgICB2c3Q0cV91OChwaXhlbEJ5dGVzLCBzaXh0ZWVuUGl4
ZWxzKTsKKyAgICAgICAgICAgIHBpeGVsQnl0ZXMgKz0gNjQ7CisgICAgICAgIH0gd2hpbGUgKHBp
eGVsQnl0ZXMgPCBsYXN0UGl4ZWwpOwogCi0gICAgICAgIHBpeGVsQXJyYXlMZW5ndGggJj0gMHgz
ZjsKLSAgICAgICAgaWYgKCFwaXhlbEFycmF5TGVuZ3RoKQorICAgICAgICBwaXhlbEJ5dGVMZW5n
dGggJj0gMHgzZjsKKyAgICAgICAgaWYgKCFwaXhlbEJ5dGVMZW5ndGgpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgfQogI2VuZGlmCiAKLSAgICBpbnQgbnVtUGl4ZWxzID0gcGl4ZWxBcnJheUxl
bmd0aCAvIDQ7CisgICAgaW50IG51bVBpeGVscyA9IHBpeGVsQnl0ZUxlbmd0aCAvIDQ7CiAKICAg
ICAvLyBJdGVyYXRlIG92ZXIgZWFjaCBwaXhlbCwgY2hlY2tpbmcgYWxwaGEgYW5kIGFkanVzdGlu
ZyBjb2xvciBjb21wb25lbnRzIGlmIG5lY2Vzc2FyeQogICAgIHdoaWxlICgtLW51bVBpeGVscyA+
PSAwKSB7CiAgICAgICAgIC8vIEFscGhhIGlzIHRoZSA0dGggYnl0ZSBpbiBhIHBpeGVsCi0gICAg
ICAgIHVpbnQ4X3QgYSA9ICoocGl4ZWxEYXRhICsgMyk7CisgICAgICAgIHVpbnQ4X3QgYSA9ICoo
cGl4ZWxCeXRlcyArIDMpOwogICAgICAgICAvLyBDbGFtcCBlYWNoIGNvbXBvbmVudCB0byBhbHBo
YSwgYW5kIGluY3JlbWVudCB0aGUgcGl4ZWwgbG9jYXRpb24KICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAgICAgIGlmICgqcGl4ZWxEYXRhID4gYSkKLSAgICAg
ICAgICAgICAgICAqcGl4ZWxEYXRhID0gYTsKLSAgICAgICAgICAgICsrcGl4ZWxEYXRhOworICAg
ICAgICAgICAgaWYgKCpwaXhlbEJ5dGVzID4gYSkKKyAgICAgICAgICAgICAgICAqcGl4ZWxCeXRl
cyA9IGE7CisgICAgICAgICAgICArK3BpeGVsQnl0ZXM7CiAgICAgICAgIH0KICAgICAgICAgLy8g
SW5jcmVtZW50IGZvciBhbHBoYQotICAgICAgICArK3BpeGVsRGF0YTsKKyAgICAgICAgKytwaXhl
bEJ5dGVzOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVD
b2xvck1hdHJpeFNvZnR3YXJlQXBwbGllci5jcHAKaW5kZXggMzE2M2E1NmRlNDM1Li4zMjczYTQ1
MGEzN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4
U29mdHdhcmVBcHBsaWVyLmNwcApAQCAtMyw3ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBT
Y2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTgzLDI1
ICs4MywyMSBAQCBpbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjpsdW1p
bmFuY2UoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbAogI2lmIFVTRShBQ0NFTEVSQVRFKQog
dm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtQWNjZWxlcmF0
ZWQoUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyKSBjb25zdAogewotICAgIGF1dG8mIHBpeGVsQXJy
YXkgPSBwaXhlbEJ1ZmZlci5kYXRhKCk7CisgICAgYXV0byogcGl4ZWxCeXRlcyA9IHBpeGVsQnVm
ZmVyLmJ5dGVzKCk7CiAgICAgYXV0byBidWZmZXJTaXplID0gcGl4ZWxCdWZmZXIuc2l6ZSgpOwot
Ci0gICAgQVNTRVJUKHBpeGVsQXJyYXkubGVuZ3RoKCkgPT0gYnVmZmVyU2l6ZS5hcmVhKCkgKiA0
KTsKLSAgICAKICAgICBjb25zdCBpbnQzMl90IGRpdmlzb3IgPSAyNTY7Ci0gICAgdWludDhfdCog
ZGF0YSA9IHBpeGVsQXJyYXkuZGF0YSgpOwogCiAgICAgdkltYWdlX0J1ZmZlciBzcmM7CiAgICAg
c3JjLndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOwogICAgIHNyYy5oZWlnaHQgPSBidWZmZXJT
aXplLmhlaWdodCgpOwogICAgIHNyYy5yb3dCeXRlcyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7
Ci0gICAgc3JjLmRhdGEgPSBkYXRhOworICAgIHNyYy5kYXRhID0gcGl4ZWxCeXRlczsKICAgICAK
ICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7CiAgICAgZGVzdC53aWR0aCA9IGJ1ZmZlclNpemUud2lk
dGgoKTsKICAgICBkZXN0LmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0KCk7CiAgICAgZGVzdC5y
b3dCeXRlcyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0gICAgZGVzdC5kYXRhID0gZGF0YTsK
KyAgICBkZXN0LmRhdGEgPSBwaXhlbEJ5dGVzOwogCiAgICAgc3dpdGNoIChtX2VmZmVjdC50eXBl
KCkpIHsKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgpAQCAtMTkyLDUzICsx
ODgsNTIgQEAgdm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3Jt
QWNjZWxlcmF0ZWQoUGl4ZWxCdWZmZXImIHBpeGVsQnUKIAogdm9pZCBGRUNvbG9yTWF0cml4U29m
dHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtVW5hY2NlbGVyYXRlZChQaXhlbEJ1ZmZlciYgcGl4
ZWxCdWZmZXIpIGNvbnN0CiB7Ci0gICAgYXV0byYgcGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLmRh
dGEoKTsKLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS5sZW5ndGgo
KTsKKyAgICBhdXRvIHBpeGVsQnl0ZUxlbmd0aCA9IHBpeGVsQnVmZmVyLmJ5dGVMZW5ndGgoKTsK
IAogICAgIHN3aXRjaCAobV9lZmZlY3QudHlwZSgpKSB7CiAgICAgY2FzZSBGRUNPTE9STUFUUklY
X1RZUEVfVU5LTk9XTjoKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhf
VFlQRV9NQVRSSVg6Ci0gICAgICAgIGZvciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsg
cGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQp
IHsKLSAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZz
ZXQpOwotICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRl
T2Zmc2V0ICsgMSk7Ci0gICAgICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBp
eGVsQnl0ZU9mZnNldCArIDIpOwotICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5
Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CisgICAgICAgIGZvciAodW5zaWduZWQgcGl4ZWxC
eXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxCeXRlTGVuZ3RoOyBwaXhlbEJ5
dGVPZmZzZXQgKz0gNCkgeworICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxCdWZmZXIuaXRl
bShwaXhlbEJ5dGVPZmZzZXQpOworICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEJ1ZmZl
ci5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEpOworICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBp
eGVsQnVmZmVyLml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7CisgICAgICAgICAgICBmbG9hdCBh
bHBoYSA9IHBpeGVsQnVmZmVyLml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CiAgICAgICAgICAg
ICBtYXRyaXgocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgICAgICAgICAgcGl4ZWxBcnJh
eS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQo
cGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQo
cGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChw
aXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7CisgICAgICAgICAgICBwaXhlbEJ1ZmZlci5zZXQo
cGl4ZWxCeXRlT2Zmc2V0LCByZWQpOworICAgICAgICAgICAgcGl4ZWxCdWZmZXIuc2V0KHBpeGVs
Qnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKKyAgICAgICAgICAgIHBpeGVsQnVmZmVyLnNldChwaXhl
bEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKKyAgICAgICAgICAgIHBpeGVsQnVmZmVyLnNldChwaXhl
bEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKICAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKICAgICBjYXNlIEZFQ09MT1JNQVRS
SVhfVFlQRV9IVUVST1RBVEU6Ci0gICAgICAgIGZvciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0
ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0
ICs9IDQpIHsKLSAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5
dGVPZmZzZXQpOwotICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4
ZWxCeXRlT2Zmc2V0ICsgMSk7Ci0gICAgICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5p
dGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOwotICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhl
bEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CisgICAgICAgIGZvciAodW5zaWduZWQg
cGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxCeXRlTGVuZ3RoOyBw
aXhlbEJ5dGVPZmZzZXQgKz0gNCkgeworICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxCdWZm
ZXIuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOworICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhl
bEJ1ZmZlci5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEpOworICAgICAgICAgICAgZmxvYXQgYmx1
ZSA9IHBpeGVsQnVmZmVyLml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7CisgICAgICAgICAgICBm
bG9hdCBhbHBoYSA9IHBpeGVsQnVmZmVyLml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CiAgICAg
ICAgICAgICBzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShyZWQsIGdyZWVuLCBibHVlKTsKLSAgICAgICAg
ICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKLSAgICAgICAgICAgIHBp
eGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKLSAgICAgICAgICAgIHBp
eGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJsdWUpOwotICAgICAgICAgICAgcGl4
ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGEpOworICAgICAgICAgICAgcGl4
ZWxCdWZmZXIuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKKyAgICAgICAgICAgIHBpeGVsQnVm
ZmVyLnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7CisgICAgICAgICAgICBwaXhlbEJ1
ZmZlci5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7CisgICAgICAgICAgICBwaXhlbEJ1
ZmZlci5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGEpOwogICAgICAgICB9CiAgICAgICAg
IGJyZWFrOwogCiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZz
ZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewotICAgICAgICAg
ICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7Ci0gICAgICAg
ICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsK
LSAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0
ICsgMik7Ci0gICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5
dGVPZmZzZXQgKyAzKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAw
OyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEJ5dGVMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0
KSB7CisgICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEJ1ZmZlci5pdGVtKHBpeGVsQnl0ZU9m
ZnNldCk7CisgICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQnVmZmVyLml0ZW0ocGl4ZWxC
eXRlT2Zmc2V0ICsgMSk7CisgICAgICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxCdWZmZXIuaXRl
bShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKKyAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxC
dWZmZXIuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKICAgICAgICAgICAgIGx1bWluYW5jZShy
ZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhl
bEJ5dGVPZmZzZXQsIHJlZCk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVP
ZmZzZXQgKyAxLCBncmVlbik7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVP
ZmZzZXQgKyAyLCBibHVlKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9m
ZnNldCArIDMsIGFscGhhKTsKKyAgICAgICAgICAgIHBpeGVsQnVmZmVyLnNldChwaXhlbEJ5dGVP
ZmZzZXQsIHJlZCk7CisgICAgICAgICAgICBwaXhlbEJ1ZmZlci5zZXQocGl4ZWxCeXRlT2Zmc2V0
ICsgMSwgZ3JlZW4pOworICAgICAgICAgICAgcGl4ZWxCdWZmZXIuc2V0KHBpeGVsQnl0ZU9mZnNl
dCArIDIsIGJsdWUpOworICAgICAgICAgICAgcGl4ZWxCdWZmZXIuc2V0KHBpeGVsQnl0ZU9mZnNl
dCArIDMsIGFscGhhKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
Q29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdh
cmVBcHBsaWVyLmNwcAppbmRleCA0ZjRiMzIwMTNlMWEuLjEyODcxNTFhOGU5MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNv
bXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0
d2FyZUFwcGxpZXIuY3BwCkBAIC00LDcgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBT
Y2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMS0yMDIyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTExNCwxNiArMTE0LDE1IEBAIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFw
cGxpZXI6Okxvb2t1cFRhYmxlIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpCiAKIHZv
aWQgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybShQaXhl
bEJ1ZmZlciYgcGl4ZWxCdWZmZXIpIGNvbnN0CiB7Ci0gICAgYXV0byYgcGl4ZWxBcnJheSA9IHBp
eGVsQnVmZmVyLmRhdGEoKTsKLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxB
cnJheS5sZW5ndGgoKTsKLSAgICB1aW50OF90KiBkYXRhID0gcGl4ZWxBcnJheS5kYXRhKCk7Cisg
ICAgYXV0byogZGF0YSA9IHBpeGVsQnVmZmVyLmJ5dGVzKCk7CisgICAgYXV0byBwaXhlbEJ5dGVM
ZW5ndGggPSBwaXhlbEJ1ZmZlci5ieXRlTGVuZ3RoKCk7CiAKICAgICBhdXRvIHJlZFRhYmxlICAg
PSBjb21wdXRlTG9va3VwVGFibGUobV9lZmZlY3QucmVkRnVuY3Rpb24oKSk7CiAgICAgYXV0byBn
cmVlblRhYmxlID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fZWZmZWN0LmdyZWVuRnVuY3Rpb24oKSk7
CiAgICAgYXV0byBibHVlVGFibGUgID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fZWZmZWN0LmJsdWVG
dW5jdGlvbigpKTsKICAgICBhdXRvIGFscGhhVGFibGUgPSBjb21wdXRlTG9va3VwVGFibGUobV9l
ZmZlY3QuYWxwaGFGdW5jdGlvbigpKTsKIAotICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQg
PSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsK
KyAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEJ5
dGVMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKICAgICAgICAgZGF0YVtwaXhlbE9mZnNldF0g
ICAgID0gcmVkVGFibGVbZGF0YVtwaXhlbE9mZnNldF1dOwogICAgICAgICBkYXRhW3BpeGVsT2Zm
c2V0ICsgMV0gPSBncmVlblRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAxXV07CiAgICAgICAgIGRh
dGFbcGl4ZWxPZmZzZXQgKyAyXSA9IGJsdWVUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgMl1dOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVy
LmNwcAppbmRleCAyOGExNmNlNzViYmMuLjNiYzMzMWE1YWE1YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNv
ZnR3YXJlQXBwbGllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5jcHAKQEAgLTQsNyAr
NCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4K
ICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTQwLDEzICsxNDAsMTMg
QEAgYm9vbCBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlBcml0aG1ldGljKEZpbHRl
ckltYWdlJiBpbnB1dCwgRmlsdGVySW1hZ2UKICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVj
dCA9IHJlc3VsdC5hYnNvbHV0ZUltYWdlUmVjdFJlbGF0aXZlVG8oaW5wdXQyKTsKICAgICBpbnB1
dDIuY29weVBpeGVsQnVmZmVyKCpkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBlZmZlY3RCRHJhd2lu
Z1JlY3QpOwogCi0gICAgYXV0byYgc291cmNlUGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQnVmZmVy
LT5kYXRhKCk7Ci0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGF1dG8qIHNvdXJjZVBpeGVsQnl0ZXMgPSBzb3VyY2VQ
aXhlbEJ1ZmZlci0+Ynl0ZXMoKTsKKyAgICBhdXRvKiBkZXN0aW5hdGlvblBpeGVsQnl0ZXMgPSBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5ieXRlcygpOwogCi0gICAgaW50IGxlbmd0aCA9IHNvdXJj
ZVBpeGVsQXJyYXkubGVuZ3RoKCk7Ci0gICAgQVNTRVJUKGxlbmd0aCA9PSBzdGF0aWNfY2FzdDxp
bnQ+KGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5sZW5ndGgoKSkpOworICAgIGF1dG8gbGVuZ3RoID0g
c291cmNlUGl4ZWxCdWZmZXItPmJ5dGVMZW5ndGgoKTsKKyAgICBBU1NFUlQobGVuZ3RoID09IGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXItPmJ5dGVMZW5ndGgoKSk7CiAjaWYgIUhBVkUoQVJNX05FT05f
SU5UUklOU0lDUykKLSAgICBhcHBseVBsYXRmb3JtQXJpdGhtZXRpYyhzb3VyY2VQaXhlbEFycmF5
LmRhdGEoKSwgZGVzdGluYXRpb25QaXhlbEFycmF5LmRhdGEoKSwgbGVuZ3RoLCBtX2VmZmVjdC5r
MSgpLCBtX2VmZmVjdC5rMigpLCBtX2VmZmVjdC5rMygpLCBtX2VmZmVjdC5rNCgpKTsKKyAgICBh
cHBseVBsYXRmb3JtQXJpdGhtZXRpYyhzb3VyY2VQaXhlbEJ5dGVzLCBkZXN0aW5hdGlvblBpeGVs
Qnl0ZXMsIGxlbmd0aCwgbV9lZmZlY3QuazEoKSwgbV9lZmZlY3QuazIoKSwgbV9lZmZlY3QuazMo
KSwgbV9lZmZlY3QuazQoKSk7CiAjZW5kaWYKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVD
b252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxp
ZXIuY3BwCmluZGV4IGU2MTQxMjA0ZDA1Yi4uNmJlMGIzMjFjZDA3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVN
YXRyaXhTb2Z0d2FyZUFwcGxpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5j
cHAKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8emhlcmN6
ZWdAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtOTksMTcgKzk5LDE3IEBA
IGlubGluZSB1aW50OF90IEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmNsYW1wUkdC
QVZhbHVlKGZsb2F0IGNoYW5uZWwsIHVpCiAgICAgcmV0dXJuIGNoYW5uZWw7CiB9CiAKLWlubGlu
ZSB2b2lkIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNldERlc3RpbmF0aW9uUGl4
ZWxzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2VQaXhlbHMsIFVpbnQ4Q2xhbXBlZEFy
cmF5JiBkZXN0UGl4ZWxzLCBpbnQmIHBpeGVsLCBmbG9hdCogdG90YWxzLCBmbG9hdCBkaXZpc29y
LCBmbG9hdCBiaWFzLCBib29sIHByZXNlcnZlQWxwaGFWYWx1ZXMpCitpbmxpbmUgdm9pZCBGRUNv
bnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzZXREZXN0aW5hdGlvblBpeGVscyhjb25zdCBQ
aXhlbEJ1ZmZlciYgc291cmNlUGl4ZWxCdWZmZXIsIFBpeGVsQnVmZmVyJiBkZXN0aW5hdGlvblBp
eGVsQnVmZmVyLCBpbnQmIHBpeGVsLCBmbG9hdCogdG90YWxzLCBmbG9hdCBkaXZpc29yLCBmbG9h
dCBiaWFzLCBib29sIHByZXNlcnZlQWxwaGFWYWx1ZXMpCiB7CiAgICAgdWludDhfdCBtYXhBbHBo
YSA9IHByZXNlcnZlQWxwaGFWYWx1ZXMgPyAyNTUgOiBjbGFtcFJHQkFWYWx1ZSh0b3RhbHNbM10g
LyBkaXZpc29yICsgYmlhcyk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpCi0gICAg
ICAgIGRlc3RQaXhlbHMuc2V0KHBpeGVsKyssIGNsYW1wUkdCQVZhbHVlKHRvdGFsc1tpXSAvIGRp
dmlzb3IgKyBiaWFzLCBtYXhBbHBoYSkpOworICAgICAgICBkZXN0aW5hdGlvblBpeGVsQnVmZmVy
LnNldChwaXhlbCsrLCBjbGFtcFJHQkFWYWx1ZSh0b3RhbHNbaV0gLyBkaXZpc29yICsgYmlhcywg
bWF4QWxwaGEpKTsKIAogICAgIGlmIChwcmVzZXJ2ZUFscGhhVmFsdWVzKSB7Ci0gICAgICAgIGRl
c3RQaXhlbHMuc2V0KHBpeGVsLCBzb3VyY2VQaXhlbHMuaXRlbShwaXhlbCkpOworICAgICAgICBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyLnNldChwaXhlbCwgc291cmNlUGl4ZWxCdWZmZXIuaXRlbShw
aXhlbCkpOwogICAgICAgICArK3BpeGVsOwogICAgIH0gZWxzZQotICAgICAgICBkZXN0UGl4ZWxz
LnNldChwaXhlbCsrLCBtYXhBbHBoYSk7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIu
c2V0KHBpeGVsKyssIG1heEFscGhhKTsKIH0KIAogaW5saW5lIGludCBGRUNvbnZvbHZlTWF0cml4
U29mdHdhcmVBcHBsaWVyOjpnZXRQaXhlbFZhbHVlKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLCBpbnQgeCwgaW50IHkpCkBAIC0xNzAsMTEgKzE3MCwxMSBAQCBpbmxpbmUgdm9pZCBG
RUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzZXRJbnRlcmlvclBpeGVscyhQYWludGlu
Z0RhdGEmIHBhaQogICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKIAogICAgICAgICAgICAgd2hp
bGUgKGtlcm5lbFZhbHVlID49IDApIHsKLSAgICAgICAgICAgICAgICB0b3RhbHNbMF0gKz0gcGFp
bnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4o
cGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7Ci0gICAgICAg
ICAgICAgICAgdG90YWxzWzFdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFs
dWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0o
a2VybmVsUGl4ZWwrKykpOwotICAgICAgICAgICAgICAgIHRvdGFsc1syXSArPSBwYWludGluZ0Rh
dGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGlu
Z0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKyspKTsKKyAgICAgICAgICAgICAg
ICB0b3RhbHNbMF0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBz
dGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNvdXJjZVBpeGVsQnVmZmVyLml0ZW0oa2Vy
bmVsUGl4ZWwrKykpOworICAgICAgICAgICAgICAgIHRvdGFsc1sxXSArPSBwYWludGluZ0RhdGEu
a2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0Rh
dGEuc291cmNlUGl4ZWxCdWZmZXIuaXRlbShrZXJuZWxQaXhlbCsrKSk7CisgICAgICAgICAgICAg
ICAgdG90YWxzWzJdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICog
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zb3VyY2VQaXhlbEJ1ZmZlci5pdGVtKGtl
cm5lbFBpeGVsKyspKTsKICAgICAgICAgICAgICAgICBpZiAoIXBhaW50aW5nRGF0YS5wcmVzZXJ2
ZUFscGhhKQotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRhLmtl
cm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRh
LnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCkpOworICAgICAgICAgICAgICAgICAgICB0
b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0
aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNvdXJjZVBpeGVsQnVmZmVyLml0ZW0oa2VybmVs
UGl4ZWwpKTsKICAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsOwogICAgICAgICAgICAgICAg
IC0ta2VybmVsVmFsdWU7CiAgICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7CkBAIC0xODMs
NyArMTgzLDcgQEAgaW5saW5lIHZvaWQgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6
c2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWkKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzKHBhaW50aW5n
RGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRv
dGFscywgcGFpbnRpbmdEYXRhLmRpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzLCBwYWludGluZ0Rh
dGEucHJlc2VydmVBbHBoYSk7CisgICAgICAgICAgICBzZXREZXN0aW5hdGlvblBpeGVscyhwYWlu
dGluZ0RhdGEuc291cmNlUGl4ZWxCdWZmZXIsIHBhaW50aW5nRGF0YS5kZXN0aW5hdGlvblBpeGVs
QnVmZmVyLCBwaXhlbCwgdG90YWxzLCBwYWludGluZ0RhdGEuZGl2aXNvciwgcGFpbnRpbmdEYXRh
LmJpYXMsIHBhaW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhhKTsKICAgICAgICAgICAgIHN0YXJ0S2Vy
bmVsUGl4ZWwgKz0gNDsKICAgICAgICAgfQogICAgICAgICBwaXhlbCArPSB4SW5jcmVhc2U7CkBA
IC0yMjIsMTIgKzIyMiwxMiBAQCBpbmxpbmUgdm9pZCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVB
cHBsaWVyOjpzZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aQogICAgICAgICAgICAg
d2hpbGUgKGtlcm5lbFZhbHVlID49IDApIHsKICAgICAgICAgICAgICAgICBpbnQgcGl4ZWxJbmRl
eCA9IGdldFBpeGVsVmFsdWUocGFpbnRpbmdEYXRhLCBrZXJuZWxQaXhlbFgsIGtlcm5lbFBpeGVs
WSk7CiAgICAgICAgICAgICAgICAgaWYgKHBpeGVsSW5kZXggPj0gMCkgewotICAgICAgICAgICAg
ICAgICAgICB0b3RhbHNbMF0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1
ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShw
aXhlbEluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgIHRvdGFsc1sxXSArPSBwYWludGluZ0Rh
dGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGlu
Z0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXggKyAxKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHRvdGFsc1syXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVl
XSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBp
eGVsSW5kZXggKyAyKSk7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsc1swXSArPSBwYWludGlu
Z0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWlu
dGluZ0RhdGEuc291cmNlUGl4ZWxCdWZmZXIuaXRlbShwaXhlbEluZGV4KSk7CisgICAgICAgICAg
ICAgICAgICAgIHRvdGFsc1sxXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZh
bHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc291cmNlUGl4ZWxCdWZmZXIu
aXRlbShwaXhlbEluZGV4ICsgMSkpOworICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMl0gKz0g
cGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9h
dD4ocGFpbnRpbmdEYXRhLnNvdXJjZVBpeGVsQnVmZmVyLml0ZW0ocGl4ZWxJbmRleCArIDIpKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFwYWludGluZ0RhdGEucHJl
c2VydmVBbHBoYSAmJiBwaXhlbEluZGV4ID49IDApCi0gICAgICAgICAgICAgICAgICAgIHRvdGFs
c1szXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19j
YXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXggKyAz
KSk7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsc1szXSArPSBwYWludGluZ0RhdGEua2VybmVs
TWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc291
cmNlUGl4ZWxCdWZmZXIuaXRlbShwaXhlbEluZGV4ICsgMykpOwogICAgICAgICAgICAgICAgICsr
a2VybmVsUGl4ZWxYOwogICAgICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7CiAgICAgICAgICAg
ICAgICAgaWYgKCEtLXdpZHRoKSB7CkBAIC0yMzcsNyArMjM3LDcgQEAgaW5saW5lIHZvaWQgRkVD
b252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6c2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRh
JiBwYWludGkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IHNldERlc3RpbmF0aW9uUGl4ZWxzKHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGlu
Z0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgcGFpbnRpbmdEYXRhLmRpdmlzb3Is
IHBhaW50aW5nRGF0YS5iaWFzLCBwYWludGluZ0RhdGEucHJlc2VydmVBbHBoYSk7CisgICAgICAg
ICAgICBzZXREZXN0aW5hdGlvblBpeGVscyhwYWludGluZ0RhdGEuc291cmNlUGl4ZWxCdWZmZXIs
IHBhaW50aW5nRGF0YS5kZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBwaXhlbCwgdG90YWxzLCBwYWlu
dGluZ0RhdGEuZGl2aXNvciwgcGFpbnRpbmdEYXRhLmJpYXMsIHBhaW50aW5nRGF0YS5wcmVzZXJ2
ZUFscGhhKTsKICAgICAgICAgICAgICsrc3RhcnRLZXJuZWxQaXhlbFg7CiAgICAgICAgIH0KICAg
ICAgICAgcGl4ZWwgKz0geEluY3JlYXNlOwpAQCAtMzAwLDE0ICszMDAsMTEgQEAgYm9vbCBGRUNv
bnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBG
aWx0ZXJJbWFnZVZlY3QKICAgICBpZiAoIXNvdXJjZVBpeGVsQnVmZmVyKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBzb3VyY2VQaXhlbEFycmF5ID0gc291cmNlUGl4ZWxCdWZm
ZXItPmRhdGEoKTsKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgCiAgICAgYXV0byBwYWludFNpemUgPSByZXN1bHQu
YWJzb2x1dGVJbWFnZVJlY3QoKS5zaXplKCk7CiAKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdE
YXRhID0gewotICAgICAgICBzb3VyY2VQaXhlbEFycmF5LAotICAgICAgICBkZXN0aW5hdGlvblBp
eGVsQXJyYXksCisgICAgICAgICpzb3VyY2VQaXhlbEJ1ZmZlciwKKyAgICAgICAgKmRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIsCiAgICAgICAgIHBhaW50U2l6ZS53aWR0aCgpLAogICAgICAgICBwYWlu
dFNpemUuaGVpZ2h0KCksCiAgICAgICAgIG1fZWZmZWN0Lmtlcm5lbFNpemUoKSwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVD
b252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVy
LmgKaW5kZXggNTNhMThhNjI5NDk2Li44OGMzNTJmODQ3M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJp
eFNvZnR3YXJlQXBwbGllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5oCkBAIC00
NSw4ICs0NSw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBGaWx0ZXJJbWFnZSYgcmVzdWx0KSBjb25zdCBm
aW5hbDsKIAogICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewotICAgICAgICBjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheTsKLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkmIGRz
dFBpeGVsQXJyYXk7CisgICAgICAgIGNvbnN0IFBpeGVsQnVmZmVyJiBzb3VyY2VQaXhlbEJ1ZmZl
cjsKKyAgICAgICAgUGl4ZWxCdWZmZXImIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXI7CiAgICAgICAg
IGludCB3aWR0aDsKICAgICAgICAgaW50IGhlaWdodDsKIApAQCAtNjAsNyArNjAsNyBAQCBwcml2
YXRlOgogICAgIH07CiAKICAgICBzdGF0aWMgaW5saW5lIHVpbnQ4X3QgY2xhbXBSR0JBVmFsdWUo
ZmxvYXQgY2hhbm5lbCwgdWludDhfdCBtYXggPSAyNTUpOwotICAgIHN0YXRpYyBpbmxpbmUgdm9p
ZCBzZXREZXN0aW5hdGlvblBpeGVscyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlUGl4
ZWxzLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdFBpeGVscywgaW50JiBwaXhlbCwgZmxvYXQqIHRv
dGFscywgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgYm9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVz
KTsKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgc2V0RGVzdGluYXRpb25QaXhlbHMoY29uc3QgUGl4
ZWxCdWZmZXImIHNvdXJjZVBpeGVsQnVmZmVyLCBQaXhlbEJ1ZmZlciYgZGVzdGluYXRpb25QaXhl
bEJ1ZmZlciwgaW50JiBwaXhlbCwgZmxvYXQqIHRvdGFscywgZmxvYXQgZGl2aXNvciwgZmxvYXQg
YmlhcywgYm9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzKTsKIAogICAgIHN0YXRpYyBpbmxpbmUgaW50
IGdldFBpeGVsVmFsdWUoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5KTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdh
cmVBcHBsaWVyLmNwcAppbmRleCAxMjE2NGUzNzhjMjkuLmY3ZmM0NWI3NzAyZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURp
c3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURpc3BsYWNlbWVudE1hcFNvZnR3YXJl
QXBwbGllci5jcHAKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIx
LTIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtNTgsOCArNTgsNiBAQCBib29sIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVy
OjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySQogICAgIGlmICghZGVz
dGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byYg
ZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwot
CiAgICAgYXV0byBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXN1bHQuYWJzb2x1dGVJbWFnZVJlY3RS
ZWxhdGl2ZVRvKGlucHV0KTsKICAgICBhdXRvIGlucHV0UGl4ZWxCdWZmZXIgPSBpbnB1dC5nZXRQ
aXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBlZmZlY3RB
RHJhd2luZ1JlY3QpOwogCkBAIC03MCw5ICs2OCw3IEBAIGJvb2wgRkVEaXNwbGFjZW1lbnRNYXBT
b2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJ
CiAgICAgaWYgKCFpbnB1dFBpeGVsQnVmZmVyIHx8ICFkaXNwbGFjZW1lbnRQaXhlbEJ1ZmZlcikK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byYgaW5wdXRQaXhlbEFycmF5ID0gaW5w
dXRQaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIGF1dG8mIGRpc3BsYWNlbWVudFBpeGVsQXJyYXkg
PSBkaXNwbGFjZW1lbnRQaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIEFTU0VSVChpbnB1dFBpeGVs
QXJyYXkubGVuZ3RoKCkgPT0gZGlzcGxhY2VtZW50UGl4ZWxBcnJheS5sZW5ndGgoKSk7CisgICAg
QVNTRVJUKGlucHV0UGl4ZWxCdWZmZXItPmJ5dGVMZW5ndGgoKSA9PSBkaXNwbGFjZW1lbnRQaXhl
bEJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKIAogICAgIGF1dG8gcGFpbnRTaXplID0gcmVzdWx0LmFi
c29sdXRlSW1hZ2VSZWN0KCkuc2l6ZSgpOwogICAgIGF1dG8gc2NhbGUgPSBmaWx0ZXIucmVzb2x2
ZWRTaXplKHsgbV9lZmZlY3Quc2NhbGUoKSwgbV9lZmZlY3Quc2NhbGUoKSB9KTsKQEAgLTk0LDE2
ICs5MCwxNiBAQCBib29sIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjphcHBseShj
b25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySQogICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHBhaW50U2l6ZS53aWR0aCgpOyArK3gpIHsKICAgICAgICAgICAgIGludCBkZXN0aW5h
dGlvbkluZGV4ID0gbGluZVN0YXJ0T2Zmc2V0ICsgeCAqIDQ7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGludCBzcmNYID0geCArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclggKiBk
aXNwbGFjZW1lbnRQaXhlbEFycmF5Lml0ZW0oZGVzdGluYXRpb25JbmRleCArIGRpc3BsYWNlbWVu
dENoYW5uZWxYKSArIHNjYWxlZE9mZnNldFgpOwotICAgICAgICAgICAgaW50IHNyY1kgPSB5ICsg
c3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWSAqIGRpc3BsYWNlbWVudFBpeGVsQXJyYXku
aXRlbShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFkpICsgc2NhbGVkT2Zm
c2V0WSk7CisgICAgICAgICAgICBpbnQgc3JjWCA9IHggKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxl
Rm9yQ29sb3JYICogZGlzcGxhY2VtZW50UGl4ZWxCdWZmZXItPml0ZW0oZGVzdGluYXRpb25JbmRl
eCArIGRpc3BsYWNlbWVudENoYW5uZWxYKSArIHNjYWxlZE9mZnNldFgpOworICAgICAgICAgICAg
aW50IHNyY1kgPSB5ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWSAqIGRpc3BsYWNl
bWVudFBpeGVsQnVmZmVyLT5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFjZW1lbnRDaGFu
bmVsWSkgKyBzY2FsZWRPZmZzZXRZKTsKIAotICAgICAgICAgICAgdW5zaWduZWQqIGRlc3RpbmF0
aW9uUGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZGVzdGluYXRpb25QaXhl
bEFycmF5LmRhdGEoKSArIGRlc3RpbmF0aW9uSW5kZXgpOworICAgICAgICAgICAgdW5zaWduZWQq
IGRlc3RpbmF0aW9uUGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlci0+Ynl0ZXMoKSArIGRlc3RpbmF0aW9uSW5kZXgpOwogICAgICAgICAg
ICAgaWYgKHNyY1ggPCAwIHx8IHNyY1ggPj0gcGFpbnRTaXplLndpZHRoKCkgfHwgc3JjWSA8IDAg
fHwgc3JjWSA+PSBwYWludFNpemUuaGVpZ2h0KCkpIHsKICAgICAgICAgICAgICAgICAqZGVzdGlu
YXRpb25QaXhlbFB0ciA9IDA7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICpkZXN0aW5hdGlvblBpeGVsUHRyID0gKnJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQqPihpbnB1dFBpeGVsQXJyYXkuZGF0YSgpICsgYnl0ZU9mZnNldE9mUGl4ZWwo
c3JjWCwgc3JjWSwgcm93Qnl0ZXMpKTsKKyAgICAgICAgICAgICpkZXN0aW5hdGlvblBpeGVsUHRy
ID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihpbnB1dFBpeGVsQnVmZmVyLT5ieXRlcygp
ICsgYnl0ZU9mZnNldE9mUGl4ZWwoc3JjWCwgc3JjWSwgcm93Qnl0ZXMpKTsKICAgICAgICAgfQog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0
d2FyZUFwcGxpZXIuY3BwCmluZGV4IDQ0N2M4OTVkMTk4NC4uNmRiMDNjNDQzOWQ5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
RHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXIu
Y3BwCkBAIC02NSw5ICs2NSw4IEBAIGJvb2wgRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyOjph
cHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VWCiAgICAgaWYgKCFw
aXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byYgc291cmNlUGl4
ZWxBcnJheSA9IHBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgY29udGV4dFNoYWRvdy5ibHVyTGF5
ZXJJbWFnZShzb3VyY2VQaXhlbEFycmF5LmRhdGEoKSwgcGl4ZWxCdWZmZXItPnNpemUoKSwgNCAq
IHBpeGVsQnVmZmVyLT5zaXplKCkud2lkdGgoKSk7Ci0gICAgCisgICAgY29udGV4dFNoYWRvdy5i
bHVyTGF5ZXJJbWFnZShwaXhlbEJ1ZmZlci0+Ynl0ZXMoKSwgcGl4ZWxCdWZmZXItPnNpemUoKSwg
NCAqIHBpeGVsQnVmZmVyLT5zaXplKCkud2lkdGgoKSk7CisKICAgICByZXN1bHRJbWFnZS0+cHV0
UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBzaGFkb3dBcmVhKTsKIAogICAgIHJlc3VsdENvbnRl
eHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFw
cGxpZXIuY3BwCmluZGV4IGE4NmE5ZmQwYWVhNS4uYmU1YjNlMDk0YmNkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFR2F1c3Np
YW5CbHVyU29mdHdhcmVBcHBsaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmNw
cApAQCAtNSw3ICs1LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGty
aXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KICAqIENv
cHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMiBBcHBsZSwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC03MywxMCArNzMsMTAgQEAg
aW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6Omtlcm5lbFBvc2l0aW9u
KGludCBibHVySXRlcmF0aW9uLCB1bnMKIH0KIAogLy8gVGhpcyBmdW5jdGlvbiBvbmx5IG9wZXJh
dGVzIG9uIEFscGhhIGNoYW5uZWwuCi1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJl
QXBwbGllcjo6Ym94Qmx1ckFscGhhT25seShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4
ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksIHVuc2lnbmVkIGR4LCBp
bnQmIGR4TGVmdCwgaW50JiBkeFJpZ2h0LCBpbnQmIHN0cmlkZSwgaW50JiBzdHJpZGVMaW5lLCBp
bnQmIGVmZmVjdFdpZHRoLCBpbnQmIGVmZmVjdEhlaWdodCwgY29uc3QgaW50JiBtYXhLZXJuZWxT
aXplKQoraW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJB
bHBoYU9ubHkoY29uc3QgUGl4ZWxCdWZmZXImIHNyY1BpeGVsQnVmZmVyLCBQaXhlbEJ1ZmZlciYg
ZHN0UGl4ZWxCdWZmZXIsIHVuc2lnbmVkIGR4LCBpbnQmIGR4TGVmdCwgaW50JiBkeFJpZ2h0LCBp
bnQmIHN0cmlkZSwgaW50JiBzdHJpZGVMaW5lLCBpbnQmIGVmZmVjdFdpZHRoLCBpbnQmIGVmZmVj
dEhlaWdodCwgY29uc3QgaW50JiBtYXhLZXJuZWxTaXplKQogewotICAgIGNvbnN0IHVpbnQ4X3Qq
IHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5LmRhdGEoKTsKLSAgICB1aW50OF90KiBkc3REYXRhID0g
ZHN0UGl4ZWxBcnJheS5kYXRhKCk7CisgICAgY29uc3QgdWludDhfdCogc3JjRGF0YSA9IHNyY1Bp
eGVsQnVmZmVyLmJ5dGVzKCk7CisgICAgdWludDhfdCogZHN0RGF0YSA9IGRzdFBpeGVsQnVmZmVy
LmJ5dGVzKCk7CiAgICAgLy8gTWVtb3J5IGFsaWdubWVudCBpczogUkdCQSwgemVyby1pbmRleCBi
YXNlZC4KICAgICBjb25zdCBpbnQgY2hhbm5lbCA9IDM7CiAKQEAgLTExMywxNCArMTEzLDE0IEBA
IGlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyQWxwaGFP
bmx5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFyCiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBGRUdhdXNz
aWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1cihjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksIHVuc2lnbmVk
IGR4LCBpbnQgZHhMZWZ0LCBpbnQgZHhSaWdodCwgaW50IHN0cmlkZSwgaW50IHN0cmlkZUxpbmUs
IGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCwgYm9vbCBhbHBoYUltYWdlLCBFZGdl
TW9kZVR5cGUgZWRnZU1vZGUpCitpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBw
bGllcjo6Ym94Qmx1cihjb25zdCBQaXhlbEJ1ZmZlciYgc3JjUGl4ZWxCdWZmZXIsIFBpeGVsQnVm
ZmVyJiBkc3RQaXhlbEJ1ZmZlciwgdW5zaWduZWQgZHgsIGludCBkeExlZnQsIGludCBkeFJpZ2h0
LCBpbnQgc3RyaWRlLCBpbnQgc3RyaWRlTGluZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0
SGVpZ2h0LCBib29sIGFscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKIHsKICAgICBj
b25zdCBpbnQgbWF4S2VybmVsU2l6ZSA9IHN0ZDo6bWluKGR4UmlnaHQsIGVmZmVjdFdpZHRoKTsK
ICAgICBpZiAoYWxwaGFJbWFnZSkKLSAgICAgICAgcmV0dXJuIGJveEJsdXJBbHBoYU9ubHkoc3Jj
UGl4ZWxBcnJheSwgZHN0UGl4ZWxBcnJheSwgZHgsIGR4TGVmdCwgZHhSaWdodCwgc3RyaWRlLCBz
dHJpZGVMaW5lLCAgZWZmZWN0V2lkdGgsIGVmZmVjdEhlaWdodCwgbWF4S2VybmVsU2l6ZSk7Cisg
ICAgICAgIHJldHVybiBib3hCbHVyQWxwaGFPbmx5KHNyY1BpeGVsQnVmZmVyLCBkc3RQaXhlbEJ1
ZmZlciwgZHgsIGR4TGVmdCwgZHhSaWdodCwgc3RyaWRlLCBzdHJpZGVMaW5lLCAgZWZmZWN0V2lk
dGgsIGVmZmVjdEhlaWdodCwgbWF4S2VybmVsU2l6ZSk7CiAKLSAgICBjb25zdCB1aW50OF90KiBz
cmNEYXRhID0gc3JjUGl4ZWxBcnJheS5kYXRhKCk7Ci0gICAgdWludDhfdCogZHN0RGF0YSA9IGRz
dFBpeGVsQXJyYXkuZGF0YSgpOworICAgIGNvbnN0IHVpbnQ4X3QqIHNyY0RhdGEgPSBzcmNQaXhl
bEJ1ZmZlci5ieXRlcygpOworICAgIHVpbnQ4X3QqIGRzdERhdGEgPSBkc3RQaXhlbEJ1ZmZlci5i
eXRlcygpOwogCiAgICAgLy8gQ29uY2VybmluZyB0aGUgYXJyYXkgd2lkdGgvbGVuZ3RoOiBpdCBp
cyBFbGVtZW50IHNpemUgKyBNYXJnaW4gKyBCb3JkZXIuIFRoZSBudW1iZXIgb2YgcGl4ZWxzIHdp
bGwgYmUKICAgICAvLyBQID0gd2lkdGggKiBoZWlnaHQgKiBjaGFubmVscy4KQEAgLTI0Myw5ICsy
NDMsOSBAQCBpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1
cihjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUAogfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEUp
Ci1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1ckFjY2Vs
ZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRl
bXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemUsIGludCBzdHJpZGUsIGludCBlZmZlY3RXaWR0
aCwgaW50IGVmZmVjdEhlaWdodCkKK2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVB
cHBsaWVyOjpib3hCbHVyQWNjZWxlcmF0ZWQoUGl4ZWxCdWZmZXImIGlvQnVmZmVyLCBQaXhlbEJ1
ZmZlciYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZSwgaW50IHN0cmlkZSwgaW50IGVm
ZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0KQogewotICAgIGlmICghaW9CdWZmZXIuZGF0YSgp
IHx8ICF0ZW1wQnVmZmVyLmRhdGEoKSkgeworICAgIGlmICghaW9CdWZmZXIuYnl0ZXMoKSB8fCAh
dGVtcEJ1ZmZlci5ieXRlcygpKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtMjYwLDEzICsyNjAsMTMgQEAgaW5saW5lIHZvaWQgRkVH
YXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJBY2NlbGVyYXRlZChVaW50OENsYW1w
ZWRBcnJheSYKICAgICAgICAga2VybmVsU2l6ZSArPSAxOwogCiAgICAgdkltYWdlX0J1ZmZlciBl
ZmZlY3RJbkJ1ZmZlcjsKLSAgICBlZmZlY3RJbkJ1ZmZlci5kYXRhID0gc3RhdGljX2Nhc3Q8dm9p
ZCo+KGlvQnVmZmVyLmRhdGEoKSk7CisgICAgZWZmZWN0SW5CdWZmZXIuZGF0YSA9IGlvQnVmZmVy
LmJ5dGVzKCk7CiAgICAgZWZmZWN0SW5CdWZmZXIud2lkdGggPSBlZmZlY3RXaWR0aDsKICAgICBl
ZmZlY3RJbkJ1ZmZlci5oZWlnaHQgPSBlZmZlY3RIZWlnaHQ7CiAgICAgZWZmZWN0SW5CdWZmZXIu
cm93Qnl0ZXMgPSBzdHJpZGU7CiAKICAgICB2SW1hZ2VfQnVmZmVyIGVmZmVjdE91dEJ1ZmZlcjsK
LSAgICBlZmZlY3RPdXRCdWZmZXIuZGF0YSA9IHRlbXBCdWZmZXIuZGF0YSgpOworICAgIGVmZmVj
dE91dEJ1ZmZlci5kYXRhID0gdGVtcEJ1ZmZlci5ieXRlcygpOwogICAgIGVmZmVjdE91dEJ1ZmZl
ci53aWR0aCA9IGVmZmVjdFdpZHRoOwogICAgIGVmZmVjdE91dEJ1ZmZlci5oZWlnaHQgPSBlZmZl
Y3RIZWlnaHQ7CiAgICAgZWZmZWN0T3V0QnVmZmVyLnJvd0J5dGVzID0gc3RyaWRlOwpAQCAtMjg0
LDIwICsyODQsMjAgQEAgaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6
OmJveEJsdXJBY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYKICAgICBmYXN0RnJlZSh0bXBC
dWZmZXIpOwogCiAgICAgLy8gVGhlIGZpbmFsIHJlc3VsdCBzaG91bGQgYmUgc3RvcmVkIGluIGlv
QnVmZmVyLgotICAgIEFTU0VSVChpb0J1ZmZlci5sZW5ndGgoKSA9PSB0ZW1wQnVmZmVyLmxlbmd0
aCgpKTsKLSAgICBtZW1jcHkoaW9CdWZmZXIuZGF0YSgpLCB0ZW1wQnVmZmVyLmRhdGEoKSwgaW9C
dWZmZXIubGVuZ3RoKCkpOworICAgIEFTU0VSVChpb0J1ZmZlci5ieXRlTGVuZ3RoKCkgPT0gdGVt
cEJ1ZmZlci5ieXRlTGVuZ3RoKCkpOworICAgIG1lbWNweShpb0J1ZmZlci5ieXRlcygpLCB0ZW1w
QnVmZmVyLmJ5dGVzKCksIGlvQnVmZmVyLmJ5dGVMZW5ndGgoKSk7CiB9CiAjZW5kaWYKIAotaW5s
aW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJVbmFjY2VsZXJh
dGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBC
dWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgaW50IHN0
cmlkZSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBl
IGVkZ2VNb2RlKQoraW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJv
eEJsdXJVbmFjY2VsZXJhdGVkKFBpeGVsQnVmZmVyJiBpb0J1ZmZlciwgUGl4ZWxCdWZmZXImIHRl
bXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgaW50
IHN0cmlkZSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVU
eXBlIGVkZ2VNb2RlKQogewogICAgIGludCBkeExlZnQgPSAwOwogICAgIGludCBkeFJpZ2h0ID0g
MDsKICAgICBpbnQgZHlMZWZ0ID0gMDsKICAgICBpbnQgZHlSaWdodCA9IDA7CiAgICAgCi0gICAg
VWludDhDbGFtcGVkQXJyYXkqIGZyb21CdWZmZXIgPSAmaW9CdWZmZXI7Ci0gICAgVWludDhDbGFt
cGVkQXJyYXkqIHRvQnVmZmVyID0gJnRlbXBCdWZmZXI7CisgICAgYXV0byogZnJvbUJ1ZmZlciA9
ICZpb0J1ZmZlcjsKKyAgICBhdXRvKiB0b0J1ZmZlciA9ICZ0ZW1wQnVmZmVyOwogCiAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKICAgICAgICAgaWYgKGtlcm5lbFNpemVYKSB7CkBA
IC0zMjksMzQgKzMyOSwzNCBAQCBpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBw
bGllcjo6Ym94Qmx1clVuYWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYQogCiAgICAgLy8gVGhl
IGZpbmFsIHJlc3VsdCBzaG91bGQgYmUgc3RvcmVkIGluIGlvQnVmZmVyLgogICAgIGlmICgmaW9C
dWZmZXIgIT0gZnJvbUJ1ZmZlcikgewotICAgICAgICBBU1NFUlQoaW9CdWZmZXIubGVuZ3RoKCkg
PT0gZnJvbUJ1ZmZlci0+bGVuZ3RoKCkpOwotICAgICAgICBtZW1jcHkoaW9CdWZmZXIuZGF0YSgp
LCBmcm9tQnVmZmVyLT5kYXRhKCksIGlvQnVmZmVyLmxlbmd0aCgpKTsKKyAgICAgICAgQVNTRVJU
KGlvQnVmZmVyLmJ5dGVMZW5ndGgoKSA9PSBmcm9tQnVmZmVyLT5ieXRlTGVuZ3RoKCkpOworICAg
ICAgICBtZW1jcHkoaW9CdWZmZXIuYnl0ZXMoKSwgZnJvbUJ1ZmZlci0+Ynl0ZXMoKSwgaW9CdWZm
ZXIuYnl0ZUxlbmd0aCgpKTsKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVy
U29mdHdhcmVBcHBsaWVyOjpib3hCbHVyR2VuZXJpYyhVaW50OENsYW1wZWRBcnJheSYgaW9CdWZm
ZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25lZCBrZXJuZWxTaXpl
WCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhh
SW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKK2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVy
U29mdHdhcmVBcHBsaWVyOjpib3hCbHVyR2VuZXJpYyhQaXhlbEJ1ZmZlciYgaW9CdWZmZXIsIFBp
eGVsQnVmZmVyJiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2Vy
bmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2Rl
VHlwZSBlZGdlTW9kZSkKIHsKICAgICBpbnQgc3RyaWRlID0gNCAqIHBhaW50U2l6ZS53aWR0aCgp
OwogCiAjaWYgVVNFKEFDQ0VMRVJBVEUpCiAgICAgaWYgKGtlcm5lbFNpemVYID09IGtlcm5lbFNp
emVZICYmIChlZGdlTW9kZSA9PSBFZGdlTW9kZVR5cGU6Ok5vbmUgfHwgZWRnZU1vZGUgPT0gRWRn
ZU1vZGVUeXBlOjpEdXBsaWNhdGUpKSB7Ci0gICAgICAgIGJveEJsdXJBY2NlbGVyYXRlZChpb0J1
ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRo
KCksIHBhaW50U2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGJveEJsdXJBY2NlbGVyYXRlZChpb0J1
ZmZlciwgdGVtcEJ1ZmZlciwga2VybmVsU2l6ZVgsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCks
IHBhaW50U2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKIAot
ICAgIGJveEJsdXJVbmFjY2VsZXJhdGVkKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJuZWxT
aXplWCwga2VybmVsU2l6ZVksIHN0cmlkZSwgcGFpbnRTaXplLCBpc0FscGhhSW1hZ2UsIGVkZ2VN
b2RlKTsKKyAgICBib3hCbHVyVW5hY2NlbGVyYXRlZChpb0J1ZmZlciwgdGVtcEJ1ZmZlciwga2Vy
bmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBzdHJpZGUsIHBhaW50U2l6ZSwgaXNBbHBoYUltYWdlLCBl
ZGdlTW9kZSk7CiB9CiAKICNpZiAhVVNFKEFDQ0VMRVJBVEUpCiBpbmxpbmUgdm9pZCBGRUdhdXNz
aWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1cldvcmtlcihBcHBseVBhcmFtZXRlcnMqIHBh
cmFtZXRlcnMpCiB7CiAgICAgSW50U2l6ZSBwYWludFNpemUocGFyYW1ldGVycy0+d2lkdGgsIHBh
cmFtZXRlcnMtPmhlaWdodCk7Ci0gICAgYm94Qmx1ckdlbmVyaWMoKnBhcmFtZXRlcnMtPmlvUGl4
ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnRtcFBpeGVsQXJyYXksIHBhcmFtZXRlcnMtPmtlcm5lbFNp
emVYLCBwYXJhbWV0ZXJzLT5rZXJuZWxTaXplWSwgcGFpbnRTaXplLCBwYXJhbWV0ZXJzLT5pc0Fs
cGhhSW1hZ2UsIHBhcmFtZXRlcnMtPmVkZ2VNb2RlKTsKKyAgICBib3hCbHVyR2VuZXJpYygqcGFy
YW1ldGVycy0+aW9CdWZmZXIsICpwYXJhbWV0ZXJzLT50ZW1wQnVmZmVyLCBwYXJhbWV0ZXJzLT5r
ZXJuZWxTaXplWCwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVksIHBhaW50U2l6ZSwgcGFyYW1ldGVy
cy0+aXNBbHBoYUltYWdlLCBwYXJhbWV0ZXJzLT5lZGdlTW9kZSk7CiB9CiAjZW5kaWYKIAotaW5s
aW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0oVWlu
dDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJh
eSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBw
YWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCitpbmxp
bmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybShQaXhl
bEJ1ZmZlciYgaW9CdWZmZXIsIFBpeGVsQnVmZmVyJiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJu
ZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBp
c0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKIHsKICNpZiAhVVNFKEFDQ0VMRVJB
VEUpCiAgICAgaW50IHNjYW5saW5lID0gNCAqIHBhaW50U2l6ZS53aWR0aCgpOwpAQCAtMzgzLDE1
ICszODMsMTEgQEAgaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmFw
cGx5UGxhdGZvcm0oVWludDhDbGFtcGVkQXJyYXkmIGlvQnUKICAgICAgICAgICAgICAgICBjdXJy
ZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gYmxvY2tIZWlnaHQgKyAxIDogYmxvY2tIZWln
aHQ7CiAgICAgICAgICAgICAgICAgaW50IGVuZFkgPSBqb2IgPT0gam9icyAtIDEgPyBjdXJyZW50
WSA6IGN1cnJlbnRZICsgZXh0cmFIZWlnaHQ7CiAKLSAgICAgICAgICAgICAgICBpbnQgYmxvY2tT
aXplID0gKGVuZFkgLSBzdGFydFkpICogc2NhbmxpbmU7Ci0gICAgICAgICAgICAgICAgaWYgKCFq
b2IpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmlvUGl4ZWxBcnJheSA9ICZpb0J1ZmZl
cjsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRtcFBpeGVsQXJyYXkgPSAmdG1wUGl4ZWxB
cnJheTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBwYXJh
bXMuaW9QaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
YmxvY2tTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRtcFBpeGVsQXJyYXkgPSBV
aW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChibG9ja1NpemUpOwotICAgICAg
ICAgICAgICAgICAgICBtZW1jcHkocGFyYW1zLmlvUGl4ZWxBcnJheS0+ZGF0YSgpLCBpb0J1ZmZl
ci5kYXRhKCkgKyBzdGFydFkgKiBzY2FubGluZSwgYmxvY2tTaXplKTsKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgSW50U2l6ZSBibG9ja1NpemUgPSB7IGVuZFkgLSBzdGFydFks
IHBhaW50U2l6ZS53aWR0aCgpIH07CisKKyAgICAgICAgICAgICAgICBwYXJhbXMuaW9CdWZmZXIg
PSBpb0J1ZmZlci5jcmVhdGVTY3JhdGNoUGl4ZWxCdWZmZXIoYmxvY2tTaXplKTsKKyAgICAgICAg
ICAgICAgICBwYXJhbXMudGVtcEJ1ZmZlciA9IHRlbXBCdWZmZXIuY3JlYXRlU2NyYXRjaFBpeGVs
QnVmZmVyKGJsb2NrU2l6ZSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KHBhcmFtcy5pb0J1ZmZl
ci0+ZGF0YSgpLCBpb0J1ZmZlci5kYXRhKCkgKyBzdGFydFkgKiBzY2FubGluZSwgcGFyYW1zLmlv
QnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwogCiAgICAgICAgICAgICAgICAgcGFyYW1zLndpZHRoID0g
cGFpbnRTaXplLndpZHRoKCk7CiAgICAgICAgICAgICAgICAgcGFyYW1zLmhlaWdodCA9IGVuZFkg
LSBzdGFydFk7CkBAIC00MTcsNyArNDEzLDcgQEAgaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJT
b2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0oVWludDhDbGFtcGVkQXJyYXkmIGlvQnUKICAg
ICAgICAgICAgICAgICBkZXN0aW5hdGlvbk9mZnNldCA9IGN1cnJlbnRZICogc2NhbmxpbmU7CiAg
ICAgICAgICAgICAgICAgc2l6ZSA9IGFkanVzdGVkQmxvY2tIZWlnaHQgKiBzY2FubGluZTsKIAot
ICAgICAgICAgICAgICAgIG1lbWNweShpb0J1ZmZlci5kYXRhKCkgKyBkZXN0aW5hdGlvbk9mZnNl
dCwgcGFyYW1zLmlvUGl4ZWxBcnJheS0+ZGF0YSgpICsgc291cmNlT2Zmc2V0LCBzaXplKTsKKyAg
ICAgICAgICAgICAgICBtZW1jcHkoaW9CdWZmZXIuZGF0YSgpICsgZGVzdGluYXRpb25PZmZzZXQs
IHBhcmFtcy5pb0J1ZmZlci0+ZGF0YSgpICsgc291cmNlT2Zmc2V0LCBzaXplKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNDI2LDcgKzQyMiw3IEBA
IGlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3Jt
KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1CiAjZW5kaWYKIAogICAgIC8vIFRoZSBzZWxlY3Rpb24g
aGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHkgb24gc29tZSBwbGF0Zm9y
bXMuCi0gICAgYm94Qmx1ckdlbmVyaWMoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNp
emVYLCBrZXJuZWxTaXplWSwgcGFpbnRTaXplLCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKKyAg
ICBib3hCbHVyR2VuZXJpYyhpb0J1ZmZlciwgdGVtcEJ1ZmZlciwga2VybmVsU2l6ZVgsIGtlcm5l
bFNpemVZLCBwYWludFNpemUsIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUpOwogfQogCiBib29sIEZF
R2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwg
Y29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgRmlsdGVySW1hZ2UmIHJlc3VsdCkgY29u
c3QKQEAgLTQ0NSwxMiArNDQxLDExIEBAIGJvb2wgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxp
ZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJbWFnCiAgICAgYXV0
byBrZXJuZWxTaXplID0gbV9lZmZlY3QuY2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9l
ZmZlY3Quc3RkRGV2aWF0aW9uWCgpLCBtX2VmZmVjdC5zdGREZXZpYXRpb25ZKCkgfSk7CiAKICAg
ICBJbnRTaXplIHBhaW50U2l6ZSA9IHJlc3VsdC5hYnNvbHV0ZUltYWdlUmVjdCgpLnNpemUoKTsK
LSAgICBhdXRvIHRtcEltYWdlRGF0YSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmlu
aXRpYWxpemVkKHBhaW50U2l6ZS5hcmVhKCkgKiA0KTsKLSAgICBpZiAoIXRtcEltYWdlRGF0YSkK
KyAgICBhdXRvIHRlbXBCdWZmZXIgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5jcmVhdGVTY3Jh
dGNoUGl4ZWxCdWZmZXIocGFpbnRTaXplKTsKKyAgICBpZiAoIXRlbXBCdWZmZXIpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLSAgICBhcHBseVBsYXRmb3JtKGRlc3RpbmF0aW9u
UGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxTaXpl
LmhlaWdodCgpLCBwYWludFNpemUsIHJlc3VsdC5pc0FscGhhSW1hZ2UoKSwgbV9lZmZlY3QuZWRn
ZU1vZGUoKSk7CisgICAgYXBwbHlQbGF0Zm9ybSgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgKnRl
bXBCdWZmZXIsIGtlcm5lbFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5oZWlnaHQoKSwgcGFpbnRT
aXplLCByZXN1bHQuaXNBbHBoYUltYWdlKCksIG1fZWZmZWN0LmVkZ2VNb2RlKCkpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFR2F1c3Np
YW5CbHVyU29mdHdhcmVBcHBsaWVyLmgKaW5kZXggMThjMDVkZTZlZmVlLi5mZjU3MzM3MTE3MGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdh
cmVBcHBsaWVyLmgKQEAgLTQyLDggKzQyLDggQEAgcHJpdmF0ZToKICAgICBib29sIGFwcGx5KGNv
bnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIEZpbHRlckltYWdl
JiByZXN1bHQpIGNvbnN0IGZpbmFsOwogCiAgICAgc3RydWN0IEFwcGx5UGFyYW1ldGVycyB7Ci0g
ICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gaW9QaXhlbEFycmF5OwotICAgICAgICBS
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHRtcFBpeGVsQXJyYXk7CisgICAgICAgIHN0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IGlvQnVmZmVyOworICAgICAgICBzdGQ6Om9wdGlvbmFsPFBpeGVs
QnVmZmVyPiB0ZW1wQnVmZmVyOwogICAgICAgICBpbnQgd2lkdGg7CiAgICAgICAgIGludCBoZWln
aHQ7CiAgICAgICAgIHVuc2lnbmVkIGtlcm5lbFNpemVYOwpAQCAtNTQsMTYgKzU0LDE2IEBAIHBy
aXZhdGU6CiAKICAgICBzdGF0aWMgaW5saW5lIHZvaWQga2VybmVsUG9zaXRpb24oaW50IGJsdXJJ
dGVyYXRpb24sIHVuc2lnbmVkJiByYWRpdXMsIGludCYgZGVsdGFMZWZ0LCBpbnQmIGRlbHRhUmln
aHQpOwogCi0gICAgc3RhdGljIGlubGluZSB2b2lkIGJveEJsdXJBbHBoYU9ubHkoY29uc3QgVWlu
dDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhl
bEFycmF5LCB1bnNpZ25lZCBkeCwgaW50JiBkeExlZnQsIGludCYgZHhSaWdodCwgaW50JiBzdHJp
ZGUsIGludCYgc3RyaWRlTGluZSwgaW50JiBlZmZlY3RXaWR0aCwgaW50JiBlZmZlY3RIZWlnaHQs
IGNvbnN0IGludCYgbWF4S2VybmVsU2l6ZSk7Ci0gICAgc3RhdGljIGlubGluZSB2b2lkIGJveEJs
dXIoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFy
cmF5JiBkc3RQaXhlbEFycmF5LCB1bnNpZ25lZCBkeCwgaW50IGR4TGVmdCwgaW50IGR4UmlnaHQs
IGludCBzdHJpZGUsIGludCBzdHJpZGVMaW5lLCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RI
ZWlnaHQsIGJvb2wgYWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlKTsKKyAgICBzdGF0aWMgaW5saW5l
IHZvaWQgYm94Qmx1ckFscGhhT25seShjb25zdCBQaXhlbEJ1ZmZlciYgaW9CdWZmZXIsIFBpeGVs
QnVmZmVyJiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBkeCwgaW50JiBkeExlZnQsIGludCYgZHhSaWdo
dCwgaW50JiBzdHJpZGUsIGludCYgc3RyaWRlTGluZSwgaW50JiBlZmZlY3RXaWR0aCwgaW50JiBl
ZmZlY3RIZWlnaHQsIGNvbnN0IGludCYgbWF4S2VybmVsU2l6ZSk7CisgICAgc3RhdGljIGlubGlu
ZSB2b2lkIGJveEJsdXIoY29uc3QgUGl4ZWxCdWZmZXImIGlvQnVmZmVyLCBQaXhlbEJ1ZmZlciYg
dGVtcEJ1ZmZlciwgdW5zaWduZWQgZHgsIGludCBkeExlZnQsIGludCBkeFJpZ2h0LCBpbnQgc3Ry
aWRlLCBpbnQgc3RyaWRlTGluZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0LCBi
b29sIGFscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSk7CiAKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQg
Ym94Qmx1ckFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFt
cGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemUsIGludCBzdHJpZGUsIGlu
dCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCk7Ci0gICAgc3RhdGljIGlubGluZSB2b2lk
IGJveEJsdXJVbmFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhD
bGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBr
ZXJuZWxTaXplWSwgaW50IHN0cmlkZSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJ
bWFnZSwgRWRnZU1vZGVUeXBlKTsKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1ckFjY2Vs
ZXJhdGVkKFBpeGVsQnVmZmVyJiBpb0J1ZmZlciwgUGl4ZWxCdWZmZXImIHRlbXBCdWZmZXIsIHVu
c2lnbmVkIGtlcm5lbFNpemUsIGludCBzdHJpZGUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVj
dEhlaWdodCk7CisgICAgc3RhdGljIGlubGluZSB2b2lkIGJveEJsdXJVbmFjY2VsZXJhdGVkKFBp
eGVsQnVmZmVyJiBpb0J1ZmZlciwgUGl4ZWxCdWZmZXImIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtl
cm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgaW50IHN0cmlkZSwgSW50U2l6ZSYgcGFp
bnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlKTsKIAotICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCBib3hCbHVyR2VuZXJpYyhVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVp
bnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5z
aWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2Us
IEVkZ2VNb2RlVHlwZSk7CisgICAgc3RhdGljIGlubGluZSB2b2lkIGJveEJsdXJHZW5lcmljKFBp
eGVsQnVmZmVyJiBpb0J1ZmZlciwgUGl4ZWxCdWZmZXImIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtl
cm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29s
IGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlKTsKICAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94
Qmx1cldvcmtlcihBcHBseVBhcmFtZXRlcnMqKTsKIAotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBh
cHBseVBsYXRmb3JtKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJy
YXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxT
aXplWSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBl
KTsKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlQbGF0Zm9ybShQaXhlbEJ1ZmZlciYgaW9C
dWZmZXIsIFBpeGVsQnVmZmVyJiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5z
aWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2Us
IEVkZ2VNb2RlVHlwZSk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGln
aHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmNwcAppbmRleCBm
YThlZTNkNTZhNTYuLmU0YjE0N2Y3NTU0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3BwCkBAIC0xLDcgKzEsNyBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAogICogQ29weXJpZ2h0IChD
KSAyMDEwIFpvbHRhbiBIZXJjemVnCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjIgQXBw
bGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzk5LDggKzM5OSw2IEBAIGJvb2wgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6
YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckltYWdlVmVjCiAgICAgaWYg
KCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBh
dXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRh
KCk7Ci0KICAgICBhdXRvIGVmZmVjdERyYXdpbmdSZWN0ID0gcmVzdWx0LmFic29sdXRlSW1hZ2VS
ZWN0UmVsYXRpdmVUbyhpbnB1dCk7CiAgICAgaW5wdXQuY29weVBpeGVsQnVmZmVyKCpkZXN0aW5h
dGlvblBpeGVsQnVmZmVyLCBlZmZlY3REcmF3aW5nUmVjdCk7CiAKQEAgLTQyOCw3ICs0MjYsNyBA
QCBib29sIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmls
dGVyLCBjb25zdCBGaWx0ZXJJbWFnZVZlYwogICAgIGRhdGEubGlnaHRTb3VyY2UgPSAmbV9lZmZl
Y3QubGlnaHRTb3VyY2UoKTsKICAgICBkYXRhLm9wZXJhdGluZ0NvbG9yU3BhY2UgPSAmbV9lZmZl
Y3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgpOwogCi0gICAgZGF0YS5waXhlbHMgPSAmZGVzdGluYXRp
b25QaXhlbEFycmF5OworICAgIGRhdGEucGl4ZWxzID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlcjsK
ICAgICBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplID0gc2l6ZS53aWR0aCgpICogY1Bp
eGVsU2l6ZTsKICAgICBkYXRhLndpZHRoID0gc2l6ZS53aWR0aCgpOwogICAgIGRhdGEuaGVpZ2h0
ID0gc2l6ZS5oZWlnaHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5n
U29mdHdhcmVBcHBsaWVyLmgKaW5kZXggMzg3NWIwYTRiNWRlLi5jOTc0ZDkyMTE1ZmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllci5oCkBA
IC0xMDQsNyArMTA0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY29uc3QgTGlnaHRTb3VyY2UqIGxp
Z2h0U291cmNlOwogICAgICAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UqIG9wZXJhdGlu
Z0NvbG9yU3BhY2U7CiAKLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsczsKKyAgICAg
ICAgUGl4ZWxCdWZmZXIqIHBpeGVsczsKICAgICAgICAgaW50IHdpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplOwogICAgICAgICBpbnQgd2lkdGg7CiAgICAgICAgIGludCBoZWlnaHQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
TW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5jcHAK
aW5kZXggMWM5ZGVmYmMzMmU4Li5kZGRkYTBlZDU1MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdh
cmVBcHBsaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5jcHAKQEAgLTQsNyArNCw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
ICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAq
IENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDE3LTIwMjEgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDE3LTIwMjIgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNDAsMTIgKzQwLDEyIEBA
IGlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVNb3JwaG9sb2d5U29mdHdhcmVB
cHBsaWVyOjptaW5Pck1heChjb25zdCBDCiAgICAgcmV0dXJuIHBlckNvbXBvbmVudE1heChhLCBi
KTsKIH0KIAotaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRU1vcnBob2xvZ3lT
b2Z0d2FyZUFwcGxpZXI6OmNvbHVtbkV4dHJlbXVtKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBz
cmNQaXhlbEFycmF5LCBpbnQgeCwgaW50IHlTdGFydCwgaW50IHlFbmQsIGludCB3aWR0aCwgTW9y
cGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQoraW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90
LCA0PiBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmNvbHVtbkV4dHJlbXVtKGNvbnN0IFBp
eGVsQnVmZmVyJiBzcmNQaXhlbEJ1ZmZlciwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5kLCBp
bnQgd2lkdGgsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKIHsKLSAgICBhdXRvIGV4dHJl
bXVtID0gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JB
IHsgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQqPihzcmNQaXhlbEFycmF5LmRhdGEo
KSArIHBpeGVsQXJyYXlJbmRleCh4LCB5U3RhcnQsIHdpZHRoKSkgfSk7CisgICAgYXV0byBleHRy
ZW11bSA9IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdC
QSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oc3JjUGl4ZWxCdWZmZXIuYnl0
ZXMoKSArIHBpeGVsQXJyYXlJbmRleCh4LCB5U3RhcnQsIHdpZHRoKSkgfSk7CiAKICAgICBmb3Ig
KGludCB5ID0geVN0YXJ0ICsgMTsgeSA8IHlFbmQ7ICsreSkgewotICAgICAgICBhdXRvIHBpeGVs
ID0gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHsg
KnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQqPihzcmNQaXhlbEFycmF5LmRhdGEoKSAr
IHBpeGVsQXJyYXlJbmRleCh4LCB5LCB3aWR0aCkpIH0pOworICAgICAgICBhdXRvIHBpeGVsID0g
bWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHsgKnJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQqPihzcmNQaXhlbEJ1ZmZlci5ieXRlcygpICsg
cGl4ZWxBcnJheUluZGV4KHgsIHksIHdpZHRoKSkgfSk7CiAgICAgICAgIGV4dHJlbXVtID0gbWlu
T3JNYXgoZXh0cmVtdW0sIHBpeGVsLCB0eXBlKTsKICAgICB9CiAgICAgcmV0dXJuIGV4dHJlbXVt
OwpAQCAtNjQsOCArNjQsOCBAQCB2b2lkIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6YXBw
bHlQbGF0Zm9ybUdlbmVyaWMoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludAogewogICAgIEFTU0VS
VChlbmRZID4gc3RhcnRZKTsKIAotICAgIGNvbnN0IGF1dG8mIHNyY1BpeGVsQXJyYXkgPSAqcGFp
bnRpbmdEYXRhLnNyY1BpeGVsQXJyYXk7Ci0gICAgYXV0byYgZHN0UGl4ZWxBcnJheSA9ICpwYWlu
dGluZ0RhdGEuZHN0UGl4ZWxBcnJheTsKKyAgICBjb25zdCBhdXRvJiBzcmNQaXhlbEJ1ZmZlciA9
ICpwYWludGluZ0RhdGEuc3JjUGl4ZWxCdWZmZXI7CisgICAgYXV0byYgZHN0UGl4ZWxCdWZmZXIg
PSAqcGFpbnRpbmdEYXRhLmRzdFBpeGVsQnVmZmVyOwogCiAgICAgY29uc3QgaW50IHJhZGl1c1gg
PSBwYWludGluZ0RhdGEucmFkaXVzWDsKICAgICBjb25zdCBpbnQgcmFkaXVzWSA9IHBhaW50aW5n
RGF0YS5yYWRpdXNZOwpAQCAtODYsMTcgKzg2LDE3IEBAIHZvaWQgRkVNb3JwaG9sb2d5U29mdHdh
cmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpYyhjb25zdCBQYWludGluZ0RhdGEmIHBhaW50
CiAKICAgICAgICAgLy8gV2Ugc3RhcnQgYXQgdGhlIGxlZnQgZWRnZSwgc28gY29tcHV0ZSBleHRy
ZW1lIGZvciB0aGUgcmFkaXVzWCBjb2x1bW5zLgogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IHJhZGl1c1g7ICsreCkKLSAgICAgICAgICAgIGV4dHJlbWEuYXBwZW5kKGNvbHVtbkV4dHJlbXVt
KHNyY1BpeGVsQXJyYXksIHgsIHlSYWRpdXNTdGFydCwgeVJhZGl1c0VuZCwgd2lkdGgsIHBhaW50
aW5nRGF0YS50eXBlKSk7CisgICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11
bShzcmNQaXhlbEJ1ZmZlciwgeCwgeVJhZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0aCwgcGFp
bnRpbmdEYXRhLnR5cGUpKTsKIAogICAgICAgICAvLyBLZXJuZWwgaXMgZmlsbGVkLCBnZXQgZXh0
cmVtYSBvZiBuZXh0IGNvbHVtbgogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyAr
K3gpIHsKICAgICAgICAgICAgIGlmICh4IDwgd2lkdGggLSByYWRpdXNYKQotICAgICAgICAgICAg
ICAgIGV4dHJlbWEuYXBwZW5kKGNvbHVtbkV4dHJlbXVtKHNyY1BpeGVsQXJyYXksIHggKyByYWRp
dXNYLCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBwYWludGluZ0RhdGEudHlwZSkp
OworICAgICAgICAgICAgICAgIGV4dHJlbWEuYXBwZW5kKGNvbHVtbkV4dHJlbXVtKHNyY1BpeGVs
QnVmZmVyLCB4ICsgcmFkaXVzWCwgeVJhZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0aCwgcGFp
bnRpbmdEYXRhLnR5cGUpKTsKIAogICAgICAgICAgICAgaWYgKHggPiByYWRpdXNYKQogICAgICAg
ICAgICAgICAgIGV4dHJlbWEucmVtb3ZlKDApOwogCi0gICAgICAgICAgICB1bnNpZ25lZCogZGVz
dFBpeGVsID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRzdFBpeGVsQXJyYXkuZGF0YSgp
ICsgcGl4ZWxBcnJheUluZGV4KHgsIHksIHdpZHRoKSk7CisgICAgICAgICAgICB1bnNpZ25lZCog
ZGVzdFBpeGVsID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRzdFBpeGVsQnVmZmVyLmJ5
dGVzKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeSwgd2lkdGgpKTsKICAgICAgICAgICAgICpkZXN0
UGl4ZWwgPSBtYWtlUGl4ZWxWYWx1ZUZyb21Db2xvckNvbXBvbmVudHMoa2VybmVsRXh0cmVtdW0o
ZXh0cmVtYSwgcGFpbnRpbmdEYXRhLnR5cGUpKS52YWx1ZTsKICAgICAgICAgfQogICAgIH0KQEAg
LTE3NSwxMyArMTc1LDEwIEBAIGJvb2wgRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjphcHBs
eShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VWCiAgICAgaWYgKCFzb3Vy
Y2VQaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byYgc291cmNl
UGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCiAgICAg
UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKICAgICBwYWludGluZ0RhdGEudHlwZSA9IG1fZWZm
ZWN0Lm1vcnBob2xvZ3lPcGVyYXRvcigpOwotICAgIHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5
ID0gJnNvdXJjZVBpeGVsQXJyYXk7Ci0gICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSAm
ZGVzdGluYXRpb25QaXhlbEFycmF5OworICAgIHBhaW50aW5nRGF0YS5zcmNQaXhlbEJ1ZmZlciA9
ICYqc291cmNlUGl4ZWxCdWZmZXI7CisgICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQnVmZmVyID0g
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlcjsKICAgICBwYWludGluZ0RhdGEud2lkdGggPSBlZmZlY3RE
cmF3aW5nUmVjdC53aWR0aCgpOwogICAgIHBhaW50aW5nRGF0YS5oZWlnaHQgPSBlZmZlY3REcmF3
aW5nUmVjdC5oZWlnaHQoKTsKICAgICBwYWludGluZ0RhdGEucmFkaXVzWCA9IHJhZGl1c1g7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIu
aAppbmRleCA2OGFkNGE0MzM4YjUuLjNjZDliNjU0MTI4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0
d2FyZUFwcGxpZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5oCkBAIC00OCw4ICs0OCw4
IEBAIHByaXZhdGU6CiAgICAgICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZTsKICAgICAg
ICAgaW50IHJhZGl1c1g7CiAgICAgICAgIGludCByYWRpdXNZOwotICAgICAgICBjb25zdCBVaW50
OENsYW1wZWRBcnJheSogc3JjUGl4ZWxBcnJheTsKLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkq
IGRzdFBpeGVsQXJyYXk7CisgICAgICAgIGNvbnN0IFBpeGVsQnVmZmVyKiBzcmNQaXhlbEJ1ZmZl
cjsKKyAgICAgICAgUGl4ZWxCdWZmZXIqIGRzdFBpeGVsQnVmZmVyOwogICAgICAgICBpbnQgd2lk
dGg7CiAgICAgICAgIGludCBoZWlnaHQ7CiAgICAgfTsKQEAgLTY1LDcgKzY1LDcgQEAgcHJpdmF0
ZToKIAogICAgIHN0YXRpYyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1ha2VD
b2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSBwaXhlbCkgeyBy
ZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYXNTUkdCQShwaXhlbCkucmVzb2x2ZWQoKSk7IH0KICAg
ICBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBtaW5Pck1heChjb25z
dCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50czx1
aW50OF90LCA0PiYgYiwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSk7Ci0gICAgc3RhdGljIGlubGlu
ZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhD
bGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwg
aW50IHdpZHRoLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsKKyAgICBzdGF0aWMgaW5saW5lIENv
bG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjb2x1bW5FeHRyZW11bShjb25zdCBQaXhlbEJ1ZmZl
ciYgc3JjUGl4ZWxCdWZmZXIsIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRo
LCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsKICAgICBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9u
ZW50czx1aW50OF90LCA0PiBrZXJuZWxFeHRyZW11bShjb25zdCBDb2x1bW5FeHRyZW1hJiBrZXJu
ZWwsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUpOwogCiAgICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0
Zm9ybUdlbmVyaWMoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxp
ZXIuY3BwCmluZGV4IDZkNjUwNjQ1YTc1Yy4uNTJmNjI0ZmM3OGY0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5j
ZVNvZnR3YXJlQXBwbGllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuY3BwCkBAIC01
LDcgKzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJr
aXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51
LXN6ZWdlZC5odT4KICAqIENvcHlyaWdodCAoQykgMjAxMSBHYWJvciBMb2tpIDxsb2tpQHdlYmtp
dC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjcwLDcgKzI3MCw3IEBAIENv
bG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmNh
bGN1bGF0ZVR1cmJ1bGVuY2VWYWx1CiAgICAgcmV0dXJuIHRvSW50QmFzZWRDb2xvckNvbXBvbmVu
dHModHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0KTsKIH0KIAotdm9pZCBGRVR1cmJ1bGVuY2VTb2Z0
d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1HZW5lcmljKGNvbnN0IEludFJlY3QmIGZpbHRlclJl
Z2lvbiwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgVWludDhDbGFtcGVkQXJyYXkmIHBp
eGVsQXJyYXksIGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0
aXRjaERhdGEsIGludCBzdGFydFksIGludCBlbmRZKQordm9pZCBGRVR1cmJ1bGVuY2VTb2Z0d2Fy
ZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1HZW5lcmljKGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lv
biwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVy
LCBjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRh
LCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKIHsKICAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7CiAK
QEAgLTI4NSw3ICsyODUsNyBAQCB2b2lkIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBw
bHlQbGF0Zm9ybUdlbmVyaWMoY29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaQogICAgICAgICAgICAg
cG9pbnQuc2V0WChwb2ludC54KCkgKyAxKTsKICAgICAgICAgICAgIEZsb2F0UG9pbnQgbG9jYWxQ
b2ludCA9IHBvaW50LnNjYWxlZChpbnZlcnNlU2NhbGUud2lkdGgoKSwgaW52ZXJzZVNjYWxlLmhl
aWdodCgpKTsKICAgICAgICAgICAgIGF1dG8gdmFsdWVzID0gY2FsY3VsYXRlVHVyYnVsZW5jZVZh
bHVlRm9yUG9pbnQocGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCBsb2NhbFBvaW50KTsKLSAgICAg
ICAgICAgIHBpeGVsQXJyYXkuc2V0UmFuZ2UodmFsdWVzLmNvbXBvbmVudHMuZGF0YSgpLCA0LCBp
bmRleE9mUGl4ZWxDaGFubmVsKTsKKyAgICAgICAgICAgIHBpeGVsQnVmZmVyLnNldFJhbmdlKHZh
bHVlcy5jb21wb25lbnRzLmRhdGEoKSwgNCwgaW5kZXhPZlBpeGVsQ2hhbm5lbCk7CiAgICAgICAg
ICAgICBpbmRleE9mUGl4ZWxDaGFubmVsICs9IDQ7CiAgICAgICAgIH0KICAgICB9CkBAIC0yOTMs
MTAgKzI5MywxMCBAQCB2b2lkIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0
Zm9ybUdlbmVyaWMoY29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaQogCiB2b2lkIEZFVHVyYnVsZW5j
ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybVdvcmtlcihBcHBseVBhcmFtZXRlcnMqIHBh
cmFtZXRlcnMpCiB7Ci0gICAgYXBwbHlQbGF0Zm9ybUdlbmVyaWMocGFyYW1ldGVycy0+ZmlsdGVy
UmVnaW9uLCBwYXJhbWV0ZXJzLT5maWx0ZXJTY2FsZSwgKnBhcmFtZXRlcnMtPnBpeGVsQXJyYXks
ICpwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnN0aXRjaERhdGEsIHBhcmFt
ZXRlcnMtPnN0YXJ0WSwgcGFyYW1ldGVycy0+ZW5kWSk7CisgICAgYXBwbHlQbGF0Zm9ybUdlbmVy
aWMocGFyYW1ldGVycy0+ZmlsdGVyUmVnaW9uLCBwYXJhbWV0ZXJzLT5maWx0ZXJTY2FsZSwgKnBh
cmFtZXRlcnMtPnBpeGVsQnVmZmVyLCAqcGFyYW1ldGVycy0+cGFpbnRpbmdEYXRhLCBwYXJhbWV0
ZXJzLT5zdGl0Y2hEYXRhLCBwYXJhbWV0ZXJzLT5zdGFydFksIHBhcmFtZXRlcnMtPmVuZFkpOwog
fQogCi12b2lkIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybShjb25z
dCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIFVp
bnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwg
U3RpdGNoRGF0YSYgc3RpdGNoRGF0YSkKK3ZvaWQgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVy
OjphcHBseVBsYXRmb3JtKGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRT
aXplJiBmaWx0ZXJTY2FsZSwgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSYgc3RpdGNoRGF0YSkKIHsKICAgICBpbnQgaGVpZ2h0
ID0gZmlsdGVyUmVnaW9uLmhlaWdodCgpOwogICAgIHVuc2lnbmVkIGFyZWEgPSBmaWx0ZXJSZWdp
b24uYXJlYSgpOwpAQCAtMzIwLDcgKzMyMCw3IEBAIHZvaWQgRkVUdXJidWxlbmNlU29mdHdhcmVB
cHBsaWVyOjphcHBseVBsYXRmb3JtKGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uCiAg
ICAgICAgICAgICAgICAgQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFy
YW1ldGVyKGkpOwogICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXJSZWdpb24gPSBmaWx0ZXJS
ZWdpb247CiAgICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlclNjYWxlID0gZmlsdGVyU2NhbGU7
Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnBpeGVsQXJyYXkgPSAmcGl4ZWxBcnJheTsKKyAgICAg
ICAgICAgICAgICBwYXJhbXMucGl4ZWxCdWZmZXIgPSAmcGl4ZWxCdWZmZXI7CiAgICAgICAgICAg
ICAgICAgcGFyYW1zLnBhaW50aW5nRGF0YSA9ICZwYWludGluZ0RhdGE7CiAgICAgICAgICAgICAg
ICAgcGFyYW1zLnN0aXRjaERhdGEgPSBzdGl0Y2hEYXRhOwogICAgICAgICAgICAgICAgIHBhcmFt
cy5zdGFydFkgPSBzdGFydFk7CkBAIC0zMzYsNyArMzM2LDcgQEAgdm9pZCBGRVR1cmJ1bGVuY2VT
b2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0oY29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaW9u
LCBjb24KICAgICB9CiAKICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkZWQgbW9kZSBp
ZiB0aGVyZSBpcyBubyByb29tIGZvciBhIG5ldyB0aHJlYWQgb3IgdGhlIHBhaW50IGFyZWEgaXMg
dG9vIHNtYWxsLgotICAgIGFwcGx5UGxhdGZvcm1HZW5lcmljKGZpbHRlclJlZ2lvbiwgZmlsdGVy
U2NhbGUsIHBpeGVsQXJyYXksIHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsK
KyAgICBhcHBseVBsYXRmb3JtR2VuZXJpYyhmaWx0ZXJSZWdpb24sIGZpbHRlclNjYWxlLCBwaXhl
bEJ1ZmZlciwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCAwLCBoZWlnaHQpOwogfQogCiBib29s
IEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIs
IGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiwgRmlsdGVySW1hZ2UmIHJlc3VsdCkgY29uc3QKQEAg
LTM0OSwxMCArMzQ5LDggQEAgYm9vbCBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5
KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJbWFnZVYKICAgICBpZiAocmVzdWx0
U2l6ZS5hcmVhKCkuaGFzT3ZlcmZsb3dlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5k
YXRhKCk7Ci0KICAgICBpZiAocmVzdWx0U2l6ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZGVzdGlu
YXRpb25QaXhlbEFycmF5Lnplcm9GaWxsKCk7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXItPnplcm9GaWxsKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMzY0LDcg
KzM2Miw3IEBAIGJvb2wgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBG
aWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VWCiAKICAgICBhdXRvIHBhaW50aW5nRGF0
YSA9IGluaXRQYWludGluZ0RhdGEobV9lZmZlY3QudHlwZSgpLCBiYXNlRnJlcXVlbmN5WCwgYmFz
ZUZyZXF1ZW5jeVksIG1fZWZmZWN0Lm51bU9jdGF2ZXMoKSwgbV9lZmZlY3Quc2VlZCgpLCBtX2Vm
ZmVjdC5zdGl0Y2hUaWxlcygpLCB0aWxlU2l6ZSk7CiAKLSAgICBhcHBseVBsYXRmb3JtKHJlc3Vs
dC5hYnNvbHV0ZUltYWdlUmVjdCgpLCBmaWx0ZXIuZmlsdGVyU2NhbGUoKSwgZGVzdGluYXRpb25Q
aXhlbEFycmF5LCBwYWludGluZ0RhdGEsIHN0aXRjaERhdGEpOworICAgIGFwcGx5UGxhdGZvcm0o
cmVzdWx0LmFic29sdXRlSW1hZ2VSZWN0KCksIGZpbHRlci5maWx0ZXJTY2FsZSgpLCAqZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlciwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUdXJidWxlbmNlU29m
dHdhcmVBcHBsaWVyLmgKaW5kZXggY2Y0ZDg5NTllYmE0Li5kNmFjMzg1ZGFjM2EgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVU
dXJidWxlbmNlU29mdHdhcmVBcHBsaWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuaApA
QCAtOTMsNyArOTMsNyBAQCBwcml2YXRlOgogICAgIHN0cnVjdCBBcHBseVBhcmFtZXRlcnMgewog
ICAgICAgICBJbnRSZWN0IGZpbHRlclJlZ2lvbjsKICAgICAgICAgRmxvYXRTaXplIGZpbHRlclNj
YWxlOwotICAgICAgICBVaW50OENsYW1wZWRBcnJheSogcGl4ZWxBcnJheTsKKyAgICAgICAgUGl4
ZWxCdWZmZXIqIHBpeGVsQnVmZmVyOwogICAgICAgICBQYWludGluZ0RhdGEqIHBhaW50aW5nRGF0
YTsKICAgICAgICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOwogICAgICAgICBpbnQgc3RhcnRZOwpA
QCAtMTEwLDkgKzExMCw5IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIENvbG9yQ29tcG9uZW50czx1
aW50OF90LCA0PiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50
czxmbG9hdCwgND4mIGZsb2F0Q29tcG9uZW50cyk7CiAgICAgc3RhdGljIENvbG9yQ29tcG9uZW50
czx1aW50OF90LCA0PiBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChjb25zdCBQYWlu
dGluZ0RhdGEmLCBTdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50Jik7CiAKLSAgICBzdGF0aWMg
dm9pZCBhcHBseVBsYXRmb3JtR2VuZXJpYyhjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24sIGNv
bnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5
LCBjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSk7
CisgICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybUdlbmVyaWMoY29uc3QgSW50UmVjdCYgZmls
dGVyUmVnaW9uLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBQaXhlbEJ1ZmZlciYsIGNv
bnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBlbmRZKTsKICAg
ICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtV29ya2VyKEFwcGx5UGFyYW1ldGVycyopOwotICAg
IHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm0oY29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaW9uLCBj
b25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJh
eSwgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSYpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxh
dGZvcm0oY29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFNpemUmIGZpbHRl
clNjYWxlLCBQaXhlbEJ1ZmZlciYsIFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEmKTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLS0gCjIuMzIuMCAoQXBwbGUgR2l0LTEzMikKCg==
</data>
<flag name="commit-queue"
          id="488769"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459655</attachid>
            <date>2022-05-22 17:04:07 -0700</date>
            <delta_ts>2022-05-22 17:23:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-240777-20220522170406.patch</filename>
            <type>text/plain</type>
            <size>62127</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">RnJvbSBmY2I1YWVkZjRkZmNiMzk0NTc3MDhiNmU4ZmZhZmQxNTg3MDFkOGJhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTYWlkIEFib3UtSGFsbGF3YSA8c2FpZEBhcHBsZS5jb20+CkRh
dGU6IFN1biwgMjIgTWF5IDIwMjIgMTc6MDI6NDUgLTA3MDAKU3ViamVjdDogW1BBVENIXSBbR1BV
IFByb2Nlc3NdIFtGaWx0ZXJzXSBEb24ndCB1c2UgVWludDhDbGFtcGVkQXJyYXkgaW4KIHNvZnR3
YXJlIGZpbHRlciBhcHBsaWVycyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjQwNzc3CgpUaGUgcGxhbiBpcyB0byBhbGxvY2F0ZSB0aGUgRmlsdGVySW1hZ2UgYnVmZmVy
cyBkaWZmZXJlbnRseSBmb3IgR1BVUHJvY2Vzcy4gU28KdGhlIGZpcnN0IHN0ZXAgaXMgdG8gaGlk
ZSB0aGUgdW5kZXJseWluZyBtZW1vcnkgb2YgUGl4ZWxCdWZmZXIgZnJvbSB0aGUgc29mdHdhcmUK
ZmlsdGVyIGFwcGxpZXJzLgotLS0KIC4uLi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVs
QnVmZmVyLmNwcCB8IDUwICsrKysrKysrKysrKy0KIC4uLi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BpeGVsQnVmZmVyLmggICB8IDE2ICsrKy0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9zaXRlLmggICB8ICAyIC0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckltYWdlLmNwcCB8IDM5ICsrKysrLS0tLS0KIC4uLi9zb2Z0d2FyZS9GRUNvbG9yTWF0
cml4U29mdHdhcmVBcHBsaWVyLmNwcCB8IDY5ICsrKysrKysrLS0tLS0tLS0tLQogLi4uL0ZFQ29t
cG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIuY3BwICAgIHwgIDkgKy0tCiAuLi4vc29mdHdh
cmUvRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIuY3BwICAgfCAxMiArLS0KIC4uLi9GRUNvbnZv
bHZlTWF0cml4U29mdHdhcmVBcHBsaWVyLmNwcCAgICAgICB8IDM3ICsrKysrLS0tLS0KIC4uLi9G
RUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyLmggICAgICAgICB8ICA2ICstCiAuLi4vRkVE
aXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIuY3BwICAgICAgfCAxNiArKy0tCiAuLi4vc29m
dHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyLmNwcCAgfCAgNSArLQogLi4uL0ZFR2F1
c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmNwcCAgICAgICAgIHwgNzMgKysrKysrKysrLS0tLS0t
LS0tLQogLi4uL3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmggIHwgMTYg
KystLQogLi4uL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3BwICAgIHwgIDYg
Ky0KIC4uLi9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmggICAgICB8ICAyICst
CiAuLi4vc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmNwcCAgfCAyNSArKyst
LS0tCiAuLi4vc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmggICAgfCAgNiAr
LQogLi4uL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllci5jcHAgIHwgMjAgKysr
LS0KIC4uLi9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuaCAgICB8ICA2ICst
CiAxOSBmaWxlcyBjaGFuZ2VkLCAyMjIgaW5zZXJ0aW9ucygrKSwgMTkzIGRlbGV0aW9ucygtKQoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmNwcApp
bmRleCA3NTQzZjQ3NWEyN2EuLmNlNThkMGFjOGNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjAsOSArMTIwLDU1IEBAIFBpeGVs
QnVmZmVyIFBpeGVsQnVmZmVyOjpkZWVwQ2xvbmUoKSBjb25zdAogICAgIHJldHVybiB7IG1fZm9y
bWF0LCBtX3NpemUsIFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUobV9kYXRhLT5kYXRhKCksIG1f
ZGF0YS0+bGVuZ3RoKCkpIH07CiB9CiAKK3VpbnQ4X3QqIFBpeGVsQnVmZmVyOjpieXRlcygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YS0+ZGF0YSgpOworfQorCitzaXplX3QgUGl4ZWxCdWZm
ZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAoreworICAgIEFTU0VSVChtX2RhdGEtPmJ5dGVMZW5ndGgo
KSA9PSBtX3NpemUuYXJlYSgpICogNCk7CisgICAgcmV0dXJuIG1fZGF0YS0+Ynl0ZUxlbmd0aCgp
OworfQorCitib29sIFBpeGVsQnVmZmVyOjpzZXRSYW5nZShjb25zdCB2b2lkKiBkYXRhLCBzaXpl
X3QgZGF0YUJ5dGVMZW5ndGgsIHNpemVfdCBieXRlT2Zmc2V0KQoreworICAgIGlmICghaXNTdW1T
bWFsbGVyVGhhbk9yRXF1YWwoYnl0ZU9mZnNldCwgZGF0YUJ5dGVMZW5ndGgsIGJ5dGVMZW5ndGgo
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1lbW1vdmUoYnl0ZXMoKSArIGJ5dGVP
ZmZzZXQsIGRhdGEsIGRhdGFCeXRlTGVuZ3RoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBQaXhlbEJ1ZmZlcjo6emVyb1JhbmdlKHNpemVfdCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VC
eXRlTGVuZ3RoKQoreworICAgIGlmICghaXNTdW1TbWFsbGVyVGhhbk9yRXF1YWwoYnl0ZU9mZnNl
dCwgcmFuZ2VCeXRlTGVuZ3RoLCBieXRlTGVuZ3RoKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBtZW1zZXQoYnl0ZXMoKSArIGJ5dGVPZmZzZXQsIDAsIHJhbmdlQnl0ZUxlbmd0aCk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3VpbnQ4X3QgUGl4ZWxCdWZmZXI6Oml0ZW0oc2l6ZV90
IGluZGV4KSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04oaW5kZXggPCBieXRlTGVuZ3RoKCkpOworICAgIHJldHVybiBieXRlcygpW2luZGV4XTsK
K30KKwordm9pZCBQaXhlbEJ1ZmZlcjo6c2V0KHNpemVfdCBpbmRleCwgZmxvYXQgdmFsdWUpCit7
CisgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IGJ5
dGVMZW5ndGgoKSk7CisgICAgYnl0ZXMoKVtpbmRleF0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2
YWx1ZSk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IFBpeGVsQnVmZmVyOjpjcmVh
dGVTY3JhdGNoUGl4ZWxCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShtX2Zvcm1hdCwgc2l6ZSk7Cit9CisKIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFBpeGVsQnVmZmVyJiBwaXhl
bEJ1ZmZlcikKIHsKICAgICByZXR1cm4gdHMgPDwgJnBpeGVsQnVmZmVyLmRhdGEoKSA8PCAiZm9y
bWF0ICggIiA8PCBwaXhlbEJ1ZmZlci5mb3JtYXQoKSA8PCAiKSI7CiB9CiAKLX0KK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BpeGVsQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhl
bEJ1ZmZlci5oCmluZGV4IDA0MzRjZWViOTg3Zi4uNGRlNzg3NTUzOGFjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjEsNiArNjEsMTggQEAg
cHVibGljOgogCiAgICAgUGl4ZWxCdWZmZXIgZGVlcENsb25lKCkgY29uc3Q7CiAKKyAgICB1aW50
OF90KiBieXRlcygpIGNvbnN0OworICAgIHNpemVfdCBieXRlTGVuZ3RoKCkgY29uc3Q7CisKKyAg
ICBib29sIHNldFJhbmdlKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhQnl0ZUxlbmd0aCwg
c2l6ZV90IGJ5dGVPZmZzZXQpOworICAgIGJvb2wgemVyb1JhbmdlKHNpemVfdCBieXRlT2Zmc2V0
LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKTsKKyAgICB2b2lkIHplcm9GaWxsKCkgeyB6ZXJvUmFu
Z2UoMCwgYnl0ZUxlbmd0aCgpKTsgfQorCisgICAgdWludDhfdCBpdGVtKHNpemVfdCBpbmRleCkg
Y29uc3Q7CisgICAgdm9pZCBzZXQoc2l6ZV90IGluZGV4LCBmbG9hdCB2YWx1ZSk7CisKKyAgICBz
dGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBjcmVhdGVTY3JhdGNoUGl4ZWxCdWZmZXIoY29uc3Qg
SW50U2l6ZSYpIGNvbnN0OworCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBkZWNvZGUoRGVjb2RlciYpOwogCkBAIC0xMTksNCAr
MTMxLDQgQEAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZl
cj4gUGl4ZWxCdWZmZXI6OmRlY29kZShEZWNvZGVyJgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAppbmRleCAxOWI2OGY0YWU5ZDIu
LjY4MDFiN2RjZjU0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaApAQCAtNzMsOCArNzMsNiBAQCBwcml2YXRlOgog
CiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGlubGlu
ZSB2b2lkIHBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5
JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgZmxvYXQgazEsIGZsb2F0
IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOwotCiAjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNT
KQogICAgIHRlbXBsYXRlIDxpbnQgYjEsIGludCBiND4KICAgICBzdGF0aWMgaW5saW5lIHZvaWQg
Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHNOZW9uKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhf
dCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9h
dCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKaW5kZXggYjEwNmRmM2Ix
ZmZjLi44MDhkNDg1YjRjZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAwLDQ2ICszMDAsNDUgQEAg
dm9pZCBGaWx0ZXJJbWFnZTo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpCiAgICAg
aWYgKCFtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlciB8fCBtX2lzVmFsaWRQcmVtdWx0aXBsaWVk
KQogICAgICAgICByZXR1cm47CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSYgaW1hZ2VBcnJheSA9
IG1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgdWludDhfdCogcGl4ZWxE
YXRhID0gaW1hZ2VBcnJheS5kYXRhKCk7Ci0gICAgaW50IHBpeGVsQXJyYXlMZW5ndGggPSBpbWFn
ZUFycmF5Lmxlbmd0aCgpOworICAgIHVpbnQ4X3QqIHBpeGVsQnl0ZXMgPSBtX3ByZW11bHRpcGxp
ZWRQaXhlbEJ1ZmZlci0+Ynl0ZXMoKTsKKyAgICBpbnQgcGl4ZWxCeXRlTGVuZ3RoID0gbV9wcmVt
dWx0aXBsaWVkUGl4ZWxCdWZmZXItPmJ5dGVMZW5ndGgoKTsKIAogICAgIC8vIFdlIG11c3QgaGF2
ZSBmb3VyIGJ5dGVzIHBlciBwaXhlbCwgYW5kIGNvbXBsZXRlIHBpeGVscwotICAgIEFTU0VSVCgh
KHBpeGVsQXJyYXlMZW5ndGggJSA0KSk7CisgICAgQVNTRVJUKCEocGl4ZWxCeXRlTGVuZ3RoICUg
NCkpOwogCiAjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgIGlmIChwaXhlbEFycmF5
TGVuZ3RoID49IDY0KSB7Ci0gICAgICAgIHVpbnQ4X3QqIGxhc3RQaXhlbCA9IHBpeGVsRGF0YSAr
IChwaXhlbEFycmF5TGVuZ3RoICYgfjB4M2YpOworICAgIGlmIChwaXhlbEJ5dGVMZW5ndGggPj0g
NjQpIHsKKyAgICAgICAgdWludDhfdCogbGFzdFBpeGVsID0gcGl4ZWxCeXRlcyArIChwaXhlbEJ5
dGVMZW5ndGggJiB+MHgzZik7CiAgICAgICAgIGRvIHsKLSAgICAgICAgICAgIC8vIEluY3JlbWVu
dHMgcGl4ZWxEYXRhIGJ5IDY0LgotICAgICAgICAgICAgdWludDh4MTZ4NF90IHNpeHRlZW5QaXhl
bHMgPSB2bGQ0cV91OChwaXhlbERhdGEpOworICAgICAgICAgICAgLy8gSW5jcmVtZW50cyBwaXhl
bEJ5dGVzIGJ5IDY0LgorICAgICAgICAgICAgdWludDh4MTZ4NF90IHNpeHRlZW5QaXhlbHMgPSB2
bGQ0cV91OChwaXhlbEJ5dGVzKTsKICAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzBdID0g
dm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMF0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKICAg
ICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzFdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52
YWxbMV0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKICAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMu
dmFsWzJdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMl0sIHNpeHRlZW5QaXhlbHMudmFs
WzNdKTsKLSAgICAgICAgICAgIHZzdDRxX3U4KHBpeGVsRGF0YSwgc2l4dGVlblBpeGVscyk7Ci0g
ICAgICAgICAgICBwaXhlbERhdGEgKz0gNjQ7Ci0gICAgICAgIH0gd2hpbGUgKHBpeGVsRGF0YSA8
IGxhc3RQaXhlbCk7CisgICAgICAgICAgICB2c3Q0cV91OChwaXhlbEJ5dGVzLCBzaXh0ZWVuUGl4
ZWxzKTsKKyAgICAgICAgICAgIHBpeGVsQnl0ZXMgKz0gNjQ7CisgICAgICAgIH0gd2hpbGUgKHBp
eGVsQnl0ZXMgPCBsYXN0UGl4ZWwpOwogCi0gICAgICAgIHBpeGVsQXJyYXlMZW5ndGggJj0gMHgz
ZjsKLSAgICAgICAgaWYgKCFwaXhlbEFycmF5TGVuZ3RoKQorICAgICAgICBwaXhlbEJ5dGVMZW5n
dGggJj0gMHgzZjsKKyAgICAgICAgaWYgKCFwaXhlbEJ5dGVMZW5ndGgpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgfQogI2VuZGlmCiAKLSAgICBpbnQgbnVtUGl4ZWxzID0gcGl4ZWxBcnJheUxl
bmd0aCAvIDQ7CisgICAgaW50IG51bVBpeGVscyA9IHBpeGVsQnl0ZUxlbmd0aCAvIDQ7CiAKICAg
ICAvLyBJdGVyYXRlIG92ZXIgZWFjaCBwaXhlbCwgY2hlY2tpbmcgYWxwaGEgYW5kIGFkanVzdGlu
ZyBjb2xvciBjb21wb25lbnRzIGlmIG5lY2Vzc2FyeQogICAgIHdoaWxlICgtLW51bVBpeGVscyA+
PSAwKSB7CiAgICAgICAgIC8vIEFscGhhIGlzIHRoZSA0dGggYnl0ZSBpbiBhIHBpeGVsCi0gICAg
ICAgIHVpbnQ4X3QgYSA9ICoocGl4ZWxEYXRhICsgMyk7CisgICAgICAgIHVpbnQ4X3QgYSA9ICoo
cGl4ZWxCeXRlcyArIDMpOwogICAgICAgICAvLyBDbGFtcCBlYWNoIGNvbXBvbmVudCB0byBhbHBo
YSwgYW5kIGluY3JlbWVudCB0aGUgcGl4ZWwgbG9jYXRpb24KICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAgICAgIGlmICgqcGl4ZWxEYXRhID4gYSkKLSAgICAg
ICAgICAgICAgICAqcGl4ZWxEYXRhID0gYTsKLSAgICAgICAgICAgICsrcGl4ZWxEYXRhOworICAg
ICAgICAgICAgaWYgKCpwaXhlbEJ5dGVzID4gYSkKKyAgICAgICAgICAgICAgICAqcGl4ZWxCeXRl
cyA9IGE7CisgICAgICAgICAgICArK3BpeGVsQnl0ZXM7CiAgICAgICAgIH0KICAgICAgICAgLy8g
SW5jcmVtZW50IGZvciBhbHBoYQotICAgICAgICArK3BpeGVsRGF0YTsKKyAgICAgICAgKytwaXhl
bEJ5dGVzOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVD
b2xvck1hdHJpeFNvZnR3YXJlQXBwbGllci5jcHAKaW5kZXggMzE2M2E1NmRlNDM1Li4zMjczYTQ1
MGEzN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4
U29mdHdhcmVBcHBsaWVyLmNwcApAQCAtMyw3ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBT
Y2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTgzLDI1
ICs4MywyMSBAQCBpbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjpsdW1p
bmFuY2UoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbAogI2lmIFVTRShBQ0NFTEVSQVRFKQog
dm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtQWNjZWxlcmF0
ZWQoUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyKSBjb25zdAogewotICAgIGF1dG8mIHBpeGVsQXJy
YXkgPSBwaXhlbEJ1ZmZlci5kYXRhKCk7CisgICAgYXV0byogcGl4ZWxCeXRlcyA9IHBpeGVsQnVm
ZmVyLmJ5dGVzKCk7CiAgICAgYXV0byBidWZmZXJTaXplID0gcGl4ZWxCdWZmZXIuc2l6ZSgpOwot
Ci0gICAgQVNTRVJUKHBpeGVsQXJyYXkubGVuZ3RoKCkgPT0gYnVmZmVyU2l6ZS5hcmVhKCkgKiA0
KTsKLSAgICAKICAgICBjb25zdCBpbnQzMl90IGRpdmlzb3IgPSAyNTY7Ci0gICAgdWludDhfdCog
ZGF0YSA9IHBpeGVsQXJyYXkuZGF0YSgpOwogCiAgICAgdkltYWdlX0J1ZmZlciBzcmM7CiAgICAg
c3JjLndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOwogICAgIHNyYy5oZWlnaHQgPSBidWZmZXJT
aXplLmhlaWdodCgpOwogICAgIHNyYy5yb3dCeXRlcyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7
Ci0gICAgc3JjLmRhdGEgPSBkYXRhOworICAgIHNyYy5kYXRhID0gcGl4ZWxCeXRlczsKICAgICAK
ICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7CiAgICAgZGVzdC53aWR0aCA9IGJ1ZmZlclNpemUud2lk
dGgoKTsKICAgICBkZXN0LmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0KCk7CiAgICAgZGVzdC5y
b3dCeXRlcyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0gICAgZGVzdC5kYXRhID0gZGF0YTsK
KyAgICBkZXN0LmRhdGEgPSBwaXhlbEJ5dGVzOwogCiAgICAgc3dpdGNoIChtX2VmZmVjdC50eXBl
KCkpIHsKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgpAQCAtMTkyLDUzICsx
ODgsNTIgQEAgdm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3Jt
QWNjZWxlcmF0ZWQoUGl4ZWxCdWZmZXImIHBpeGVsQnUKIAogdm9pZCBGRUNvbG9yTWF0cml4U29m
dHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtVW5hY2NlbGVyYXRlZChQaXhlbEJ1ZmZlciYgcGl4
ZWxCdWZmZXIpIGNvbnN0CiB7Ci0gICAgYXV0byYgcGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLmRh
dGEoKTsKLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS5sZW5ndGgo
KTsKKyAgICBhdXRvIHBpeGVsQnl0ZUxlbmd0aCA9IHBpeGVsQnVmZmVyLmJ5dGVMZW5ndGgoKTsK
IAogICAgIHN3aXRjaCAobV9lZmZlY3QudHlwZSgpKSB7CiAgICAgY2FzZSBGRUNPTE9STUFUUklY
X1RZUEVfVU5LTk9XTjoKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhf
VFlQRV9NQVRSSVg6Ci0gICAgICAgIGZvciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsg
cGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQp
IHsKLSAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZz
ZXQpOwotICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRl
T2Zmc2V0ICsgMSk7Ci0gICAgICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBp
eGVsQnl0ZU9mZnNldCArIDIpOwotICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5
Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CisgICAgICAgIGZvciAodW5zaWduZWQgcGl4ZWxC
eXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxCeXRlTGVuZ3RoOyBwaXhlbEJ5
dGVPZmZzZXQgKz0gNCkgeworICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxCdWZmZXIuaXRl
bShwaXhlbEJ5dGVPZmZzZXQpOworICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEJ1ZmZl
ci5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEpOworICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBp
eGVsQnVmZmVyLml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7CisgICAgICAgICAgICBmbG9hdCBh
bHBoYSA9IHBpeGVsQnVmZmVyLml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CiAgICAgICAgICAg
ICBtYXRyaXgocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgICAgICAgICAgcGl4ZWxBcnJh
eS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQo
cGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQo
cGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChw
aXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7CisgICAgICAgICAgICBwaXhlbEJ1ZmZlci5zZXQo
cGl4ZWxCeXRlT2Zmc2V0LCByZWQpOworICAgICAgICAgICAgcGl4ZWxCdWZmZXIuc2V0KHBpeGVs
Qnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKKyAgICAgICAgICAgIHBpeGVsQnVmZmVyLnNldChwaXhl
bEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKKyAgICAgICAgICAgIHBpeGVsQnVmZmVyLnNldChwaXhl
bEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKICAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKICAgICBjYXNlIEZFQ09MT1JNQVRS
SVhfVFlQRV9IVUVST1RBVEU6Ci0gICAgICAgIGZvciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0
ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0
ICs9IDQpIHsKLSAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5
dGVPZmZzZXQpOwotICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4
ZWxCeXRlT2Zmc2V0ICsgMSk7Ci0gICAgICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5p
dGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOwotICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhl
bEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CisgICAgICAgIGZvciAodW5zaWduZWQg
cGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxCeXRlTGVuZ3RoOyBw
aXhlbEJ5dGVPZmZzZXQgKz0gNCkgeworICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxCdWZm
ZXIuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOworICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhl
bEJ1ZmZlci5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEpOworICAgICAgICAgICAgZmxvYXQgYmx1
ZSA9IHBpeGVsQnVmZmVyLml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7CisgICAgICAgICAgICBm
bG9hdCBhbHBoYSA9IHBpeGVsQnVmZmVyLml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CiAgICAg
ICAgICAgICBzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShyZWQsIGdyZWVuLCBibHVlKTsKLSAgICAgICAg
ICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKLSAgICAgICAgICAgIHBp
eGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKLSAgICAgICAgICAgIHBp
eGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJsdWUpOwotICAgICAgICAgICAgcGl4
ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGEpOworICAgICAgICAgICAgcGl4
ZWxCdWZmZXIuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKKyAgICAgICAgICAgIHBpeGVsQnVm
ZmVyLnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7CisgICAgICAgICAgICBwaXhlbEJ1
ZmZlci5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7CisgICAgICAgICAgICBwaXhlbEJ1
ZmZlci5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGEpOwogICAgICAgICB9CiAgICAgICAg
IGJyZWFrOwogCiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZz
ZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewotICAgICAgICAg
ICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7Ci0gICAgICAg
ICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsK
LSAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0
ICsgMik7Ci0gICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5
dGVPZmZzZXQgKyAzKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAw
OyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEJ5dGVMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0
KSB7CisgICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEJ1ZmZlci5pdGVtKHBpeGVsQnl0ZU9m
ZnNldCk7CisgICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQnVmZmVyLml0ZW0ocGl4ZWxC
eXRlT2Zmc2V0ICsgMSk7CisgICAgICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxCdWZmZXIuaXRl
bShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKKyAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxC
dWZmZXIuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKICAgICAgICAgICAgIGx1bWluYW5jZShy
ZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhl
bEJ5dGVPZmZzZXQsIHJlZCk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVP
ZmZzZXQgKyAxLCBncmVlbik7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVP
ZmZzZXQgKyAyLCBibHVlKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9m
ZnNldCArIDMsIGFscGhhKTsKKyAgICAgICAgICAgIHBpeGVsQnVmZmVyLnNldChwaXhlbEJ5dGVP
ZmZzZXQsIHJlZCk7CisgICAgICAgICAgICBwaXhlbEJ1ZmZlci5zZXQocGl4ZWxCeXRlT2Zmc2V0
ICsgMSwgZ3JlZW4pOworICAgICAgICAgICAgcGl4ZWxCdWZmZXIuc2V0KHBpeGVsQnl0ZU9mZnNl
dCArIDIsIGJsdWUpOworICAgICAgICAgICAgcGl4ZWxCdWZmZXIuc2V0KHBpeGVsQnl0ZU9mZnNl
dCArIDMsIGFscGhhKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
Q29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdh
cmVBcHBsaWVyLmNwcAppbmRleCA0ZjRiMzIwMTNlMWEuLjEyODcxNTFhOGU5MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNv
bXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0
d2FyZUFwcGxpZXIuY3BwCkBAIC00LDcgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBT
Y2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMS0yMDIyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTExNCwxNiArMTE0LDE1IEBAIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFw
cGxpZXI6Okxvb2t1cFRhYmxlIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpCiAKIHZv
aWQgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybShQaXhl
bEJ1ZmZlciYgcGl4ZWxCdWZmZXIpIGNvbnN0CiB7Ci0gICAgYXV0byYgcGl4ZWxBcnJheSA9IHBp
eGVsQnVmZmVyLmRhdGEoKTsKLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxB
cnJheS5sZW5ndGgoKTsKLSAgICB1aW50OF90KiBkYXRhID0gcGl4ZWxBcnJheS5kYXRhKCk7Cisg
ICAgYXV0byogZGF0YSA9IHBpeGVsQnVmZmVyLmJ5dGVzKCk7CisgICAgYXV0byBwaXhlbEJ5dGVM
ZW5ndGggPSBwaXhlbEJ1ZmZlci5ieXRlTGVuZ3RoKCk7CiAKICAgICBhdXRvIHJlZFRhYmxlICAg
PSBjb21wdXRlTG9va3VwVGFibGUobV9lZmZlY3QucmVkRnVuY3Rpb24oKSk7CiAgICAgYXV0byBn
cmVlblRhYmxlID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fZWZmZWN0LmdyZWVuRnVuY3Rpb24oKSk7
CiAgICAgYXV0byBibHVlVGFibGUgID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fZWZmZWN0LmJsdWVG
dW5jdGlvbigpKTsKICAgICBhdXRvIGFscGhhVGFibGUgPSBjb21wdXRlTG9va3VwVGFibGUobV9l
ZmZlY3QuYWxwaGFGdW5jdGlvbigpKTsKIAotICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQg
PSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsK
KyAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEJ5
dGVMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKICAgICAgICAgZGF0YVtwaXhlbE9mZnNldF0g
ICAgID0gcmVkVGFibGVbZGF0YVtwaXhlbE9mZnNldF1dOwogICAgICAgICBkYXRhW3BpeGVsT2Zm
c2V0ICsgMV0gPSBncmVlblRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAxXV07CiAgICAgICAgIGRh
dGFbcGl4ZWxPZmZzZXQgKyAyXSA9IGJsdWVUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgMl1dOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVy
LmNwcAppbmRleCAyOGExNmNlNzViYmMuLjNiYzMzMWE1YWE1YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNv
ZnR3YXJlQXBwbGllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5jcHAKQEAgLTQsNyAr
NCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4K
ICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTQwLDEzICsxNDAsMTMg
QEAgYm9vbCBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlBcml0aG1ldGljKEZpbHRl
ckltYWdlJiBpbnB1dCwgRmlsdGVySW1hZ2UKICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVj
dCA9IHJlc3VsdC5hYnNvbHV0ZUltYWdlUmVjdFJlbGF0aXZlVG8oaW5wdXQyKTsKICAgICBpbnB1
dDIuY29weVBpeGVsQnVmZmVyKCpkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBlZmZlY3RCRHJhd2lu
Z1JlY3QpOwogCi0gICAgYXV0byYgc291cmNlUGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQnVmZmVy
LT5kYXRhKCk7Ci0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGF1dG8qIHNvdXJjZVBpeGVsQnl0ZXMgPSBzb3VyY2VQ
aXhlbEJ1ZmZlci0+Ynl0ZXMoKTsKKyAgICBhdXRvKiBkZXN0aW5hdGlvblBpeGVsQnl0ZXMgPSBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5ieXRlcygpOwogCi0gICAgaW50IGxlbmd0aCA9IHNvdXJj
ZVBpeGVsQXJyYXkubGVuZ3RoKCk7Ci0gICAgQVNTRVJUKGxlbmd0aCA9PSBzdGF0aWNfY2FzdDxp
bnQ+KGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5sZW5ndGgoKSkpOworICAgIGF1dG8gbGVuZ3RoID0g
c291cmNlUGl4ZWxCdWZmZXItPmJ5dGVMZW5ndGgoKTsKKyAgICBBU1NFUlQobGVuZ3RoID09IGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXItPmJ5dGVMZW5ndGgoKSk7CiAjaWYgIUhBVkUoQVJNX05FT05f
SU5UUklOU0lDUykKLSAgICBhcHBseVBsYXRmb3JtQXJpdGhtZXRpYyhzb3VyY2VQaXhlbEFycmF5
LmRhdGEoKSwgZGVzdGluYXRpb25QaXhlbEFycmF5LmRhdGEoKSwgbGVuZ3RoLCBtX2VmZmVjdC5r
MSgpLCBtX2VmZmVjdC5rMigpLCBtX2VmZmVjdC5rMygpLCBtX2VmZmVjdC5rNCgpKTsKKyAgICBh
cHBseVBsYXRmb3JtQXJpdGhtZXRpYyhzb3VyY2VQaXhlbEJ5dGVzLCBkZXN0aW5hdGlvblBpeGVs
Qnl0ZXMsIGxlbmd0aCwgbV9lZmZlY3QuazEoKSwgbV9lZmZlY3QuazIoKSwgbV9lZmZlY3QuazMo
KSwgbV9lZmZlY3QuazQoKSk7CiAjZW5kaWYKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVD
b252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxp
ZXIuY3BwCmluZGV4IGU2MTQxMjA0ZDA1Yi4uNmJlMGIzMjFjZDA3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVN
YXRyaXhTb2Z0d2FyZUFwcGxpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5j
cHAKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8emhlcmN6
ZWdAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtOTksMTcgKzk5LDE3IEBA
IGlubGluZSB1aW50OF90IEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmNsYW1wUkdC
QVZhbHVlKGZsb2F0IGNoYW5uZWwsIHVpCiAgICAgcmV0dXJuIGNoYW5uZWw7CiB9CiAKLWlubGlu
ZSB2b2lkIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNldERlc3RpbmF0aW9uUGl4
ZWxzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2VQaXhlbHMsIFVpbnQ4Q2xhbXBlZEFy
cmF5JiBkZXN0UGl4ZWxzLCBpbnQmIHBpeGVsLCBmbG9hdCogdG90YWxzLCBmbG9hdCBkaXZpc29y
LCBmbG9hdCBiaWFzLCBib29sIHByZXNlcnZlQWxwaGFWYWx1ZXMpCitpbmxpbmUgdm9pZCBGRUNv
bnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzZXREZXN0aW5hdGlvblBpeGVscyhjb25zdCBQ
aXhlbEJ1ZmZlciYgc291cmNlUGl4ZWxCdWZmZXIsIFBpeGVsQnVmZmVyJiBkZXN0aW5hdGlvblBp
eGVsQnVmZmVyLCBpbnQmIHBpeGVsLCBmbG9hdCogdG90YWxzLCBmbG9hdCBkaXZpc29yLCBmbG9h
dCBiaWFzLCBib29sIHByZXNlcnZlQWxwaGFWYWx1ZXMpCiB7CiAgICAgdWludDhfdCBtYXhBbHBo
YSA9IHByZXNlcnZlQWxwaGFWYWx1ZXMgPyAyNTUgOiBjbGFtcFJHQkFWYWx1ZSh0b3RhbHNbM10g
LyBkaXZpc29yICsgYmlhcyk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpCi0gICAg
ICAgIGRlc3RQaXhlbHMuc2V0KHBpeGVsKyssIGNsYW1wUkdCQVZhbHVlKHRvdGFsc1tpXSAvIGRp
dmlzb3IgKyBiaWFzLCBtYXhBbHBoYSkpOworICAgICAgICBkZXN0aW5hdGlvblBpeGVsQnVmZmVy
LnNldChwaXhlbCsrLCBjbGFtcFJHQkFWYWx1ZSh0b3RhbHNbaV0gLyBkaXZpc29yICsgYmlhcywg
bWF4QWxwaGEpKTsKIAogICAgIGlmIChwcmVzZXJ2ZUFscGhhVmFsdWVzKSB7Ci0gICAgICAgIGRl
c3RQaXhlbHMuc2V0KHBpeGVsLCBzb3VyY2VQaXhlbHMuaXRlbShwaXhlbCkpOworICAgICAgICBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyLnNldChwaXhlbCwgc291cmNlUGl4ZWxCdWZmZXIuaXRlbShw
aXhlbCkpOwogICAgICAgICArK3BpeGVsOwogICAgIH0gZWxzZQotICAgICAgICBkZXN0UGl4ZWxz
LnNldChwaXhlbCsrLCBtYXhBbHBoYSk7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIu
c2V0KHBpeGVsKyssIG1heEFscGhhKTsKIH0KIAogaW5saW5lIGludCBGRUNvbnZvbHZlTWF0cml4
U29mdHdhcmVBcHBsaWVyOjpnZXRQaXhlbFZhbHVlKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLCBpbnQgeCwgaW50IHkpCkBAIC0xNzAsMTEgKzE3MCwxMSBAQCBpbmxpbmUgdm9pZCBG
RUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzZXRJbnRlcmlvclBpeGVscyhQYWludGlu
Z0RhdGEmIHBhaQogICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKIAogICAgICAgICAgICAgd2hp
bGUgKGtlcm5lbFZhbHVlID49IDApIHsKLSAgICAgICAgICAgICAgICB0b3RhbHNbMF0gKz0gcGFp
bnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4o
cGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7Ci0gICAgICAg
ICAgICAgICAgdG90YWxzWzFdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFs
dWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0o
a2VybmVsUGl4ZWwrKykpOwotICAgICAgICAgICAgICAgIHRvdGFsc1syXSArPSBwYWludGluZ0Rh
dGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGlu
Z0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKyspKTsKKyAgICAgICAgICAgICAg
ICB0b3RhbHNbMF0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBz
dGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNvdXJjZVBpeGVsQnVmZmVyLml0ZW0oa2Vy
bmVsUGl4ZWwrKykpOworICAgICAgICAgICAgICAgIHRvdGFsc1sxXSArPSBwYWludGluZ0RhdGEu
a2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0Rh
dGEuc291cmNlUGl4ZWxCdWZmZXIuaXRlbShrZXJuZWxQaXhlbCsrKSk7CisgICAgICAgICAgICAg
ICAgdG90YWxzWzJdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICog
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zb3VyY2VQaXhlbEJ1ZmZlci5pdGVtKGtl
cm5lbFBpeGVsKyspKTsKICAgICAgICAgICAgICAgICBpZiAoIXBhaW50aW5nRGF0YS5wcmVzZXJ2
ZUFscGhhKQotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRhLmtl
cm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRh
LnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCkpOworICAgICAgICAgICAgICAgICAgICB0
b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0
aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNvdXJjZVBpeGVsQnVmZmVyLml0ZW0oa2VybmVs
UGl4ZWwpKTsKICAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsOwogICAgICAgICAgICAgICAg
IC0ta2VybmVsVmFsdWU7CiAgICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7CkBAIC0xODMs
NyArMTgzLDcgQEAgaW5saW5lIHZvaWQgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6
c2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWkKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzKHBhaW50aW5n
RGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRv
dGFscywgcGFpbnRpbmdEYXRhLmRpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzLCBwYWludGluZ0Rh
dGEucHJlc2VydmVBbHBoYSk7CisgICAgICAgICAgICBzZXREZXN0aW5hdGlvblBpeGVscyhwYWlu
dGluZ0RhdGEuc291cmNlUGl4ZWxCdWZmZXIsIHBhaW50aW5nRGF0YS5kZXN0aW5hdGlvblBpeGVs
QnVmZmVyLCBwaXhlbCwgdG90YWxzLCBwYWludGluZ0RhdGEuZGl2aXNvciwgcGFpbnRpbmdEYXRh
LmJpYXMsIHBhaW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhhKTsKICAgICAgICAgICAgIHN0YXJ0S2Vy
bmVsUGl4ZWwgKz0gNDsKICAgICAgICAgfQogICAgICAgICBwaXhlbCArPSB4SW5jcmVhc2U7CkBA
IC0yMjIsMTIgKzIyMiwxMiBAQCBpbmxpbmUgdm9pZCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVB
cHBsaWVyOjpzZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aQogICAgICAgICAgICAg
d2hpbGUgKGtlcm5lbFZhbHVlID49IDApIHsKICAgICAgICAgICAgICAgICBpbnQgcGl4ZWxJbmRl
eCA9IGdldFBpeGVsVmFsdWUocGFpbnRpbmdEYXRhLCBrZXJuZWxQaXhlbFgsIGtlcm5lbFBpeGVs
WSk7CiAgICAgICAgICAgICAgICAgaWYgKHBpeGVsSW5kZXggPj0gMCkgewotICAgICAgICAgICAg
ICAgICAgICB0b3RhbHNbMF0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1
ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShw
aXhlbEluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgIHRvdGFsc1sxXSArPSBwYWludGluZ0Rh
dGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGlu
Z0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXggKyAxKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHRvdGFsc1syXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVl
XSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBp
eGVsSW5kZXggKyAyKSk7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsc1swXSArPSBwYWludGlu
Z0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWlu
dGluZ0RhdGEuc291cmNlUGl4ZWxCdWZmZXIuaXRlbShwaXhlbEluZGV4KSk7CisgICAgICAgICAg
ICAgICAgICAgIHRvdGFsc1sxXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZh
bHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc291cmNlUGl4ZWxCdWZmZXIu
aXRlbShwaXhlbEluZGV4ICsgMSkpOworICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMl0gKz0g
cGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9h
dD4ocGFpbnRpbmdEYXRhLnNvdXJjZVBpeGVsQnVmZmVyLml0ZW0ocGl4ZWxJbmRleCArIDIpKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFwYWludGluZ0RhdGEucHJl
c2VydmVBbHBoYSAmJiBwaXhlbEluZGV4ID49IDApCi0gICAgICAgICAgICAgICAgICAgIHRvdGFs
c1szXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19j
YXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXggKyAz
KSk7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsc1szXSArPSBwYWludGluZ0RhdGEua2VybmVs
TWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc291
cmNlUGl4ZWxCdWZmZXIuaXRlbShwaXhlbEluZGV4ICsgMykpOwogICAgICAgICAgICAgICAgICsr
a2VybmVsUGl4ZWxYOwogICAgICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7CiAgICAgICAgICAg
ICAgICAgaWYgKCEtLXdpZHRoKSB7CkBAIC0yMzcsNyArMjM3LDcgQEAgaW5saW5lIHZvaWQgRkVD
b252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6c2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRh
JiBwYWludGkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IHNldERlc3RpbmF0aW9uUGl4ZWxzKHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGlu
Z0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgcGFpbnRpbmdEYXRhLmRpdmlzb3Is
IHBhaW50aW5nRGF0YS5iaWFzLCBwYWludGluZ0RhdGEucHJlc2VydmVBbHBoYSk7CisgICAgICAg
ICAgICBzZXREZXN0aW5hdGlvblBpeGVscyhwYWludGluZ0RhdGEuc291cmNlUGl4ZWxCdWZmZXIs
IHBhaW50aW5nRGF0YS5kZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBwaXhlbCwgdG90YWxzLCBwYWlu
dGluZ0RhdGEuZGl2aXNvciwgcGFpbnRpbmdEYXRhLmJpYXMsIHBhaW50aW5nRGF0YS5wcmVzZXJ2
ZUFscGhhKTsKICAgICAgICAgICAgICsrc3RhcnRLZXJuZWxQaXhlbFg7CiAgICAgICAgIH0KICAg
ICAgICAgcGl4ZWwgKz0geEluY3JlYXNlOwpAQCAtMzAwLDE0ICszMDAsMTEgQEAgYm9vbCBGRUNv
bnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBG
aWx0ZXJJbWFnZVZlY3QKICAgICBpZiAoIXNvdXJjZVBpeGVsQnVmZmVyKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBzb3VyY2VQaXhlbEFycmF5ID0gc291cmNlUGl4ZWxCdWZm
ZXItPmRhdGEoKTsKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgCiAgICAgYXV0byBwYWludFNpemUgPSByZXN1bHQu
YWJzb2x1dGVJbWFnZVJlY3QoKS5zaXplKCk7CiAKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdE
YXRhID0gewotICAgICAgICBzb3VyY2VQaXhlbEFycmF5LAotICAgICAgICBkZXN0aW5hdGlvblBp
eGVsQXJyYXksCisgICAgICAgICpzb3VyY2VQaXhlbEJ1ZmZlciwKKyAgICAgICAgKmRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIsCiAgICAgICAgIHBhaW50U2l6ZS53aWR0aCgpLAogICAgICAgICBwYWlu
dFNpemUuaGVpZ2h0KCksCiAgICAgICAgIG1fZWZmZWN0Lmtlcm5lbFNpemUoKSwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVD
b252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVy
LmgKaW5kZXggNTNhMThhNjI5NDk2Li44OGMzNTJmODQ3M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJp
eFNvZnR3YXJlQXBwbGllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5oCkBAIC00
NSw4ICs0NSw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBGaWx0ZXJJbWFnZSYgcmVzdWx0KSBjb25zdCBm
aW5hbDsKIAogICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewotICAgICAgICBjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheTsKLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkmIGRz
dFBpeGVsQXJyYXk7CisgICAgICAgIGNvbnN0IFBpeGVsQnVmZmVyJiBzb3VyY2VQaXhlbEJ1ZmZl
cjsKKyAgICAgICAgUGl4ZWxCdWZmZXImIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXI7CiAgICAgICAg
IGludCB3aWR0aDsKICAgICAgICAgaW50IGhlaWdodDsKIApAQCAtNjAsNyArNjAsNyBAQCBwcml2
YXRlOgogICAgIH07CiAKICAgICBzdGF0aWMgaW5saW5lIHVpbnQ4X3QgY2xhbXBSR0JBVmFsdWUo
ZmxvYXQgY2hhbm5lbCwgdWludDhfdCBtYXggPSAyNTUpOwotICAgIHN0YXRpYyBpbmxpbmUgdm9p
ZCBzZXREZXN0aW5hdGlvblBpeGVscyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlUGl4
ZWxzLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdFBpeGVscywgaW50JiBwaXhlbCwgZmxvYXQqIHRv
dGFscywgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgYm9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVz
KTsKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgc2V0RGVzdGluYXRpb25QaXhlbHMoY29uc3QgUGl4
ZWxCdWZmZXImIHNvdXJjZVBpeGVsQnVmZmVyLCBQaXhlbEJ1ZmZlciYgZGVzdGluYXRpb25QaXhl
bEJ1ZmZlciwgaW50JiBwaXhlbCwgZmxvYXQqIHRvdGFscywgZmxvYXQgZGl2aXNvciwgZmxvYXQg
YmlhcywgYm9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzKTsKIAogICAgIHN0YXRpYyBpbmxpbmUgaW50
IGdldFBpeGVsVmFsdWUoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5KTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdh
cmVBcHBsaWVyLmNwcAppbmRleCAxMjE2NGUzNzhjMjkuLmY3ZmM0NWI3NzAyZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURp
c3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURpc3BsYWNlbWVudE1hcFNvZnR3YXJl
QXBwbGllci5jcHAKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIx
LTIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtNTgsOCArNTgsNiBAQCBib29sIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVy
OjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySQogICAgIGlmICghZGVz
dGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byYg
ZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwot
CiAgICAgYXV0byBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXN1bHQuYWJzb2x1dGVJbWFnZVJlY3RS
ZWxhdGl2ZVRvKGlucHV0KTsKICAgICBhdXRvIGlucHV0UGl4ZWxCdWZmZXIgPSBpbnB1dC5nZXRQ
aXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBlZmZlY3RB
RHJhd2luZ1JlY3QpOwogCkBAIC03MCw5ICs2OCw3IEBAIGJvb2wgRkVEaXNwbGFjZW1lbnRNYXBT
b2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJ
CiAgICAgaWYgKCFpbnB1dFBpeGVsQnVmZmVyIHx8ICFkaXNwbGFjZW1lbnRQaXhlbEJ1ZmZlcikK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byYgaW5wdXRQaXhlbEFycmF5ID0gaW5w
dXRQaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIGF1dG8mIGRpc3BsYWNlbWVudFBpeGVsQXJyYXkg
PSBkaXNwbGFjZW1lbnRQaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIEFTU0VSVChpbnB1dFBpeGVs
QXJyYXkubGVuZ3RoKCkgPT0gZGlzcGxhY2VtZW50UGl4ZWxBcnJheS5sZW5ndGgoKSk7CisgICAg
QVNTRVJUKGlucHV0UGl4ZWxCdWZmZXItPmJ5dGVMZW5ndGgoKSA9PSBkaXNwbGFjZW1lbnRQaXhl
bEJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKIAogICAgIGF1dG8gcGFpbnRTaXplID0gcmVzdWx0LmFi
c29sdXRlSW1hZ2VSZWN0KCkuc2l6ZSgpOwogICAgIGF1dG8gc2NhbGUgPSBmaWx0ZXIucmVzb2x2
ZWRTaXplKHsgbV9lZmZlY3Quc2NhbGUoKSwgbV9lZmZlY3Quc2NhbGUoKSB9KTsKQEAgLTk0LDE2
ICs5MCwxNiBAQCBib29sIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjphcHBseShj
b25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySQogICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHBhaW50U2l6ZS53aWR0aCgpOyArK3gpIHsKICAgICAgICAgICAgIGludCBkZXN0aW5h
dGlvbkluZGV4ID0gbGluZVN0YXJ0T2Zmc2V0ICsgeCAqIDQ7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGludCBzcmNYID0geCArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclggKiBk
aXNwbGFjZW1lbnRQaXhlbEFycmF5Lml0ZW0oZGVzdGluYXRpb25JbmRleCArIGRpc3BsYWNlbWVu
dENoYW5uZWxYKSArIHNjYWxlZE9mZnNldFgpOwotICAgICAgICAgICAgaW50IHNyY1kgPSB5ICsg
c3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWSAqIGRpc3BsYWNlbWVudFBpeGVsQXJyYXku
aXRlbShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFkpICsgc2NhbGVkT2Zm
c2V0WSk7CisgICAgICAgICAgICBpbnQgc3JjWCA9IHggKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxl
Rm9yQ29sb3JYICogZGlzcGxhY2VtZW50UGl4ZWxCdWZmZXItPml0ZW0oZGVzdGluYXRpb25JbmRl
eCArIGRpc3BsYWNlbWVudENoYW5uZWxYKSArIHNjYWxlZE9mZnNldFgpOworICAgICAgICAgICAg
aW50IHNyY1kgPSB5ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWSAqIGRpc3BsYWNl
bWVudFBpeGVsQnVmZmVyLT5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFjZW1lbnRDaGFu
bmVsWSkgKyBzY2FsZWRPZmZzZXRZKTsKIAotICAgICAgICAgICAgdW5zaWduZWQqIGRlc3RpbmF0
aW9uUGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZGVzdGluYXRpb25QaXhl
bEFycmF5LmRhdGEoKSArIGRlc3RpbmF0aW9uSW5kZXgpOworICAgICAgICAgICAgdW5zaWduZWQq
IGRlc3RpbmF0aW9uUGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlci0+Ynl0ZXMoKSArIGRlc3RpbmF0aW9uSW5kZXgpOwogICAgICAgICAg
ICAgaWYgKHNyY1ggPCAwIHx8IHNyY1ggPj0gcGFpbnRTaXplLndpZHRoKCkgfHwgc3JjWSA8IDAg
fHwgc3JjWSA+PSBwYWludFNpemUuaGVpZ2h0KCkpIHsKICAgICAgICAgICAgICAgICAqZGVzdGlu
YXRpb25QaXhlbFB0ciA9IDA7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICpkZXN0aW5hdGlvblBpeGVsUHRyID0gKnJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQqPihpbnB1dFBpeGVsQXJyYXkuZGF0YSgpICsgYnl0ZU9mZnNldE9mUGl4ZWwo
c3JjWCwgc3JjWSwgcm93Qnl0ZXMpKTsKKyAgICAgICAgICAgICpkZXN0aW5hdGlvblBpeGVsUHRy
ID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihpbnB1dFBpeGVsQnVmZmVyLT5ieXRlcygp
ICsgYnl0ZU9mZnNldE9mUGl4ZWwoc3JjWCwgc3JjWSwgcm93Qnl0ZXMpKTsKICAgICAgICAgfQog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0
d2FyZUFwcGxpZXIuY3BwCmluZGV4IDQ0N2M4OTVkMTk4NC4uNmRiMDNjNDQzOWQ5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
RHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXIu
Y3BwCkBAIC02NSw5ICs2NSw4IEBAIGJvb2wgRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyOjph
cHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VWCiAgICAgaWYgKCFw
aXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byYgc291cmNlUGl4
ZWxBcnJheSA9IHBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgY29udGV4dFNoYWRvdy5ibHVyTGF5
ZXJJbWFnZShzb3VyY2VQaXhlbEFycmF5LmRhdGEoKSwgcGl4ZWxCdWZmZXItPnNpemUoKSwgNCAq
IHBpeGVsQnVmZmVyLT5zaXplKCkud2lkdGgoKSk7Ci0gICAgCisgICAgY29udGV4dFNoYWRvdy5i
bHVyTGF5ZXJJbWFnZShwaXhlbEJ1ZmZlci0+Ynl0ZXMoKSwgcGl4ZWxCdWZmZXItPnNpemUoKSwg
NCAqIHBpeGVsQnVmZmVyLT5zaXplKCkud2lkdGgoKSk7CisKICAgICByZXN1bHRJbWFnZS0+cHV0
UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBzaGFkb3dBcmVhKTsKIAogICAgIHJlc3VsdENvbnRl
eHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFw
cGxpZXIuY3BwCmluZGV4IGE4NmE5ZmQwYWVhNS4uMGE1YjhiNjdiYjAyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFR2F1c3Np
YW5CbHVyU29mdHdhcmVBcHBsaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmNw
cApAQCAtNSw3ICs1LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGty
aXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KICAqIENv
cHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMiBBcHBsZSwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC03MywxMCArNzMsMTAgQEAg
aW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6Omtlcm5lbFBvc2l0aW9u
KGludCBibHVySXRlcmF0aW9uLCB1bnMKIH0KIAogLy8gVGhpcyBmdW5jdGlvbiBvbmx5IG9wZXJh
dGVzIG9uIEFscGhhIGNoYW5uZWwuCi1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJl
QXBwbGllcjo6Ym94Qmx1ckFscGhhT25seShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4
ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksIHVuc2lnbmVkIGR4LCBp
bnQmIGR4TGVmdCwgaW50JiBkeFJpZ2h0LCBpbnQmIHN0cmlkZSwgaW50JiBzdHJpZGVMaW5lLCBp
bnQmIGVmZmVjdFdpZHRoLCBpbnQmIGVmZmVjdEhlaWdodCwgY29uc3QgaW50JiBtYXhLZXJuZWxT
aXplKQoraW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJB
bHBoYU9ubHkoY29uc3QgUGl4ZWxCdWZmZXImIHNyY1BpeGVsQnVmZmVyLCBQaXhlbEJ1ZmZlciYg
ZHN0UGl4ZWxCdWZmZXIsIHVuc2lnbmVkIGR4LCBpbnQmIGR4TGVmdCwgaW50JiBkeFJpZ2h0LCBp
bnQmIHN0cmlkZSwgaW50JiBzdHJpZGVMaW5lLCBpbnQmIGVmZmVjdFdpZHRoLCBpbnQmIGVmZmVj
dEhlaWdodCwgY29uc3QgaW50JiBtYXhLZXJuZWxTaXplKQogewotICAgIGNvbnN0IHVpbnQ4X3Qq
IHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5LmRhdGEoKTsKLSAgICB1aW50OF90KiBkc3REYXRhID0g
ZHN0UGl4ZWxBcnJheS5kYXRhKCk7CisgICAgY29uc3QgdWludDhfdCogc3JjRGF0YSA9IHNyY1Bp
eGVsQnVmZmVyLmJ5dGVzKCk7CisgICAgdWludDhfdCogZHN0RGF0YSA9IGRzdFBpeGVsQnVmZmVy
LmJ5dGVzKCk7CiAgICAgLy8gTWVtb3J5IGFsaWdubWVudCBpczogUkdCQSwgemVyby1pbmRleCBi
YXNlZC4KICAgICBjb25zdCBpbnQgY2hhbm5lbCA9IDM7CiAKQEAgLTExMywxNCArMTEzLDE0IEBA
IGlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyQWxwaGFP
bmx5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFyCiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBGRUdhdXNz
aWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1cihjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksIHVuc2lnbmVk
IGR4LCBpbnQgZHhMZWZ0LCBpbnQgZHhSaWdodCwgaW50IHN0cmlkZSwgaW50IHN0cmlkZUxpbmUs
IGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCwgYm9vbCBhbHBoYUltYWdlLCBFZGdl
TW9kZVR5cGUgZWRnZU1vZGUpCitpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBw
bGllcjo6Ym94Qmx1cihjb25zdCBQaXhlbEJ1ZmZlciYgc3JjUGl4ZWxCdWZmZXIsIFBpeGVsQnVm
ZmVyJiBkc3RQaXhlbEJ1ZmZlciwgdW5zaWduZWQgZHgsIGludCBkeExlZnQsIGludCBkeFJpZ2h0
LCBpbnQgc3RyaWRlLCBpbnQgc3RyaWRlTGluZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0
SGVpZ2h0LCBib29sIGFscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKIHsKICAgICBj
b25zdCBpbnQgbWF4S2VybmVsU2l6ZSA9IHN0ZDo6bWluKGR4UmlnaHQsIGVmZmVjdFdpZHRoKTsK
ICAgICBpZiAoYWxwaGFJbWFnZSkKLSAgICAgICAgcmV0dXJuIGJveEJsdXJBbHBoYU9ubHkoc3Jj
UGl4ZWxBcnJheSwgZHN0UGl4ZWxBcnJheSwgZHgsIGR4TGVmdCwgZHhSaWdodCwgc3RyaWRlLCBz
dHJpZGVMaW5lLCAgZWZmZWN0V2lkdGgsIGVmZmVjdEhlaWdodCwgbWF4S2VybmVsU2l6ZSk7Cisg
ICAgICAgIHJldHVybiBib3hCbHVyQWxwaGFPbmx5KHNyY1BpeGVsQnVmZmVyLCBkc3RQaXhlbEJ1
ZmZlciwgZHgsIGR4TGVmdCwgZHhSaWdodCwgc3RyaWRlLCBzdHJpZGVMaW5lLCAgZWZmZWN0V2lk
dGgsIGVmZmVjdEhlaWdodCwgbWF4S2VybmVsU2l6ZSk7CiAKLSAgICBjb25zdCB1aW50OF90KiBz
cmNEYXRhID0gc3JjUGl4ZWxBcnJheS5kYXRhKCk7Ci0gICAgdWludDhfdCogZHN0RGF0YSA9IGRz
dFBpeGVsQXJyYXkuZGF0YSgpOworICAgIGNvbnN0IHVpbnQ4X3QqIHNyY0RhdGEgPSBzcmNQaXhl
bEJ1ZmZlci5ieXRlcygpOworICAgIHVpbnQ4X3QqIGRzdERhdGEgPSBkc3RQaXhlbEJ1ZmZlci5i
eXRlcygpOwogCiAgICAgLy8gQ29uY2VybmluZyB0aGUgYXJyYXkgd2lkdGgvbGVuZ3RoOiBpdCBp
cyBFbGVtZW50IHNpemUgKyBNYXJnaW4gKyBCb3JkZXIuIFRoZSBudW1iZXIgb2YgcGl4ZWxzIHdp
bGwgYmUKICAgICAvLyBQID0gd2lkdGggKiBoZWlnaHQgKiBjaGFubmVscy4KQEAgLTI0Myw5ICsy
NDMsOSBAQCBpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1
cihjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUAogfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEUp
Ci1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1ckFjY2Vs
ZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRl
bXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemUsIGludCBzdHJpZGUsIGludCBlZmZlY3RXaWR0
aCwgaW50IGVmZmVjdEhlaWdodCkKK2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVB
cHBsaWVyOjpib3hCbHVyQWNjZWxlcmF0ZWQoUGl4ZWxCdWZmZXImIGlvQnVmZmVyLCBQaXhlbEJ1
ZmZlciYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZSwgaW50IHN0cmlkZSwgaW50IGVm
ZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0KQogewotICAgIGlmICghaW9CdWZmZXIuZGF0YSgp
IHx8ICF0ZW1wQnVmZmVyLmRhdGEoKSkgeworICAgIGlmICghaW9CdWZmZXIuYnl0ZXMoKSB8fCAh
dGVtcEJ1ZmZlci5ieXRlcygpKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtMjYwLDEzICsyNjAsMTMgQEAgaW5saW5lIHZvaWQgRkVH
YXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJBY2NlbGVyYXRlZChVaW50OENsYW1w
ZWRBcnJheSYKICAgICAgICAga2VybmVsU2l6ZSArPSAxOwogCiAgICAgdkltYWdlX0J1ZmZlciBl
ZmZlY3RJbkJ1ZmZlcjsKLSAgICBlZmZlY3RJbkJ1ZmZlci5kYXRhID0gc3RhdGljX2Nhc3Q8dm9p
ZCo+KGlvQnVmZmVyLmRhdGEoKSk7CisgICAgZWZmZWN0SW5CdWZmZXIuZGF0YSA9IGlvQnVmZmVy
LmJ5dGVzKCk7CiAgICAgZWZmZWN0SW5CdWZmZXIud2lkdGggPSBlZmZlY3RXaWR0aDsKICAgICBl
ZmZlY3RJbkJ1ZmZlci5oZWlnaHQgPSBlZmZlY3RIZWlnaHQ7CiAgICAgZWZmZWN0SW5CdWZmZXIu
cm93Qnl0ZXMgPSBzdHJpZGU7CiAKICAgICB2SW1hZ2VfQnVmZmVyIGVmZmVjdE91dEJ1ZmZlcjsK
LSAgICBlZmZlY3RPdXRCdWZmZXIuZGF0YSA9IHRlbXBCdWZmZXIuZGF0YSgpOworICAgIGVmZmVj
dE91dEJ1ZmZlci5kYXRhID0gdGVtcEJ1ZmZlci5ieXRlcygpOwogICAgIGVmZmVjdE91dEJ1ZmZl
ci53aWR0aCA9IGVmZmVjdFdpZHRoOwogICAgIGVmZmVjdE91dEJ1ZmZlci5oZWlnaHQgPSBlZmZl
Y3RIZWlnaHQ7CiAgICAgZWZmZWN0T3V0QnVmZmVyLnJvd0J5dGVzID0gc3RyaWRlOwpAQCAtMjg0
LDIwICsyODQsMjAgQEAgaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6
OmJveEJsdXJBY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYKICAgICBmYXN0RnJlZSh0bXBC
dWZmZXIpOwogCiAgICAgLy8gVGhlIGZpbmFsIHJlc3VsdCBzaG91bGQgYmUgc3RvcmVkIGluIGlv
QnVmZmVyLgotICAgIEFTU0VSVChpb0J1ZmZlci5sZW5ndGgoKSA9PSB0ZW1wQnVmZmVyLmxlbmd0
aCgpKTsKLSAgICBtZW1jcHkoaW9CdWZmZXIuZGF0YSgpLCB0ZW1wQnVmZmVyLmRhdGEoKSwgaW9C
dWZmZXIubGVuZ3RoKCkpOworICAgIEFTU0VSVChpb0J1ZmZlci5ieXRlTGVuZ3RoKCkgPT0gdGVt
cEJ1ZmZlci5ieXRlTGVuZ3RoKCkpOworICAgIG1lbWNweShpb0J1ZmZlci5ieXRlcygpLCB0ZW1w
QnVmZmVyLmJ5dGVzKCksIGlvQnVmZmVyLmJ5dGVMZW5ndGgoKSk7CiB9CiAjZW5kaWYKIAotaW5s
aW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJVbmFjY2VsZXJh
dGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBC
dWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgaW50IHN0
cmlkZSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBl
IGVkZ2VNb2RlKQoraW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJv
eEJsdXJVbmFjY2VsZXJhdGVkKFBpeGVsQnVmZmVyJiBpb0J1ZmZlciwgUGl4ZWxCdWZmZXImIHRl
bXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgaW50
IHN0cmlkZSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVU
eXBlIGVkZ2VNb2RlKQogewogICAgIGludCBkeExlZnQgPSAwOwogICAgIGludCBkeFJpZ2h0ID0g
MDsKICAgICBpbnQgZHlMZWZ0ID0gMDsKICAgICBpbnQgZHlSaWdodCA9IDA7CiAgICAgCi0gICAg
VWludDhDbGFtcGVkQXJyYXkqIGZyb21CdWZmZXIgPSAmaW9CdWZmZXI7Ci0gICAgVWludDhDbGFt
cGVkQXJyYXkqIHRvQnVmZmVyID0gJnRlbXBCdWZmZXI7CisgICAgYXV0byogZnJvbUJ1ZmZlciA9
ICZpb0J1ZmZlcjsKKyAgICBhdXRvKiB0b0J1ZmZlciA9ICZ0ZW1wQnVmZmVyOwogCiAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKICAgICAgICAgaWYgKGtlcm5lbFNpemVYKSB7CkBA
IC0zMjksMzQgKzMyOSwzNCBAQCBpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBw
bGllcjo6Ym94Qmx1clVuYWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYQogCiAgICAgLy8gVGhl
IGZpbmFsIHJlc3VsdCBzaG91bGQgYmUgc3RvcmVkIGluIGlvQnVmZmVyLgogICAgIGlmICgmaW9C
dWZmZXIgIT0gZnJvbUJ1ZmZlcikgewotICAgICAgICBBU1NFUlQoaW9CdWZmZXIubGVuZ3RoKCkg
PT0gZnJvbUJ1ZmZlci0+bGVuZ3RoKCkpOwotICAgICAgICBtZW1jcHkoaW9CdWZmZXIuZGF0YSgp
LCBmcm9tQnVmZmVyLT5kYXRhKCksIGlvQnVmZmVyLmxlbmd0aCgpKTsKKyAgICAgICAgQVNTRVJU
KGlvQnVmZmVyLmJ5dGVMZW5ndGgoKSA9PSBmcm9tQnVmZmVyLT5ieXRlTGVuZ3RoKCkpOworICAg
ICAgICBtZW1jcHkoaW9CdWZmZXIuYnl0ZXMoKSwgZnJvbUJ1ZmZlci0+Ynl0ZXMoKSwgaW9CdWZm
ZXIuYnl0ZUxlbmd0aCgpKTsKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVy
U29mdHdhcmVBcHBsaWVyOjpib3hCbHVyR2VuZXJpYyhVaW50OENsYW1wZWRBcnJheSYgaW9CdWZm
ZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25lZCBrZXJuZWxTaXpl
WCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhh
SW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKK2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVy
U29mdHdhcmVBcHBsaWVyOjpib3hCbHVyR2VuZXJpYyhQaXhlbEJ1ZmZlciYgaW9CdWZmZXIsIFBp
eGVsQnVmZmVyJiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2Vy
bmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2Rl
VHlwZSBlZGdlTW9kZSkKIHsKICAgICBpbnQgc3RyaWRlID0gNCAqIHBhaW50U2l6ZS53aWR0aCgp
OwogCiAjaWYgVVNFKEFDQ0VMRVJBVEUpCiAgICAgaWYgKGtlcm5lbFNpemVYID09IGtlcm5lbFNp
emVZICYmIChlZGdlTW9kZSA9PSBFZGdlTW9kZVR5cGU6Ok5vbmUgfHwgZWRnZU1vZGUgPT0gRWRn
ZU1vZGVUeXBlOjpEdXBsaWNhdGUpKSB7Ci0gICAgICAgIGJveEJsdXJBY2NlbGVyYXRlZChpb0J1
ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRo
KCksIHBhaW50U2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGJveEJsdXJBY2NlbGVyYXRlZChpb0J1
ZmZlciwgdGVtcEJ1ZmZlciwga2VybmVsU2l6ZVgsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCks
IHBhaW50U2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKIAot
ICAgIGJveEJsdXJVbmFjY2VsZXJhdGVkKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJuZWxT
aXplWCwga2VybmVsU2l6ZVksIHN0cmlkZSwgcGFpbnRTaXplLCBpc0FscGhhSW1hZ2UsIGVkZ2VN
b2RlKTsKKyAgICBib3hCbHVyVW5hY2NlbGVyYXRlZChpb0J1ZmZlciwgdGVtcEJ1ZmZlciwga2Vy
bmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBzdHJpZGUsIHBhaW50U2l6ZSwgaXNBbHBoYUltYWdlLCBl
ZGdlTW9kZSk7CiB9CiAKICNpZiAhVVNFKEFDQ0VMRVJBVEUpCiBpbmxpbmUgdm9pZCBGRUdhdXNz
aWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1cldvcmtlcihBcHBseVBhcmFtZXRlcnMqIHBh
cmFtZXRlcnMpCiB7CiAgICAgSW50U2l6ZSBwYWludFNpemUocGFyYW1ldGVycy0+d2lkdGgsIHBh
cmFtZXRlcnMtPmhlaWdodCk7Ci0gICAgYm94Qmx1ckdlbmVyaWMoKnBhcmFtZXRlcnMtPmlvUGl4
ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnRtcFBpeGVsQXJyYXksIHBhcmFtZXRlcnMtPmtlcm5lbFNp
emVYLCBwYXJhbWV0ZXJzLT5rZXJuZWxTaXplWSwgcGFpbnRTaXplLCBwYXJhbWV0ZXJzLT5pc0Fs
cGhhSW1hZ2UsIHBhcmFtZXRlcnMtPmVkZ2VNb2RlKTsKKyAgICBib3hCbHVyR2VuZXJpYygqcGFy
YW1ldGVycy0+aW9CdWZmZXIsICpwYXJhbWV0ZXJzLT50ZW1wQnVmZmVyLCBwYXJhbWV0ZXJzLT5r
ZXJuZWxTaXplWCwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVksIHBhaW50U2l6ZSwgcGFyYW1ldGVy
cy0+aXNBbHBoYUltYWdlLCBwYXJhbWV0ZXJzLT5lZGdlTW9kZSk7CiB9CiAjZW5kaWYKIAotaW5s
aW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0oVWlu
dDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJh
eSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBw
YWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCitpbmxp
bmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybShQaXhl
bEJ1ZmZlciYgaW9CdWZmZXIsIFBpeGVsQnVmZmVyJiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJu
ZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBp
c0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKIHsKICNpZiAhVVNFKEFDQ0VMRVJB
VEUpCiAgICAgaW50IHNjYW5saW5lID0gNCAqIHBhaW50U2l6ZS53aWR0aCgpOwpAQCAtMzgzLDE1
ICszODMsMTEgQEAgaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmFw
cGx5UGxhdGZvcm0oVWludDhDbGFtcGVkQXJyYXkmIGlvQnUKICAgICAgICAgICAgICAgICBjdXJy
ZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gYmxvY2tIZWlnaHQgKyAxIDogYmxvY2tIZWln
aHQ7CiAgICAgICAgICAgICAgICAgaW50IGVuZFkgPSBqb2IgPT0gam9icyAtIDEgPyBjdXJyZW50
WSA6IGN1cnJlbnRZICsgZXh0cmFIZWlnaHQ7CiAKLSAgICAgICAgICAgICAgICBpbnQgYmxvY2tT
aXplID0gKGVuZFkgLSBzdGFydFkpICogc2NhbmxpbmU7Ci0gICAgICAgICAgICAgICAgaWYgKCFq
b2IpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmlvUGl4ZWxBcnJheSA9ICZpb0J1ZmZl
cjsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRtcFBpeGVsQXJyYXkgPSAmdG1wUGl4ZWxB
cnJheTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBwYXJh
bXMuaW9QaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
YmxvY2tTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRtcFBpeGVsQXJyYXkgPSBV
aW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChibG9ja1NpemUpOwotICAgICAg
ICAgICAgICAgICAgICBtZW1jcHkocGFyYW1zLmlvUGl4ZWxBcnJheS0+ZGF0YSgpLCBpb0J1ZmZl
ci5kYXRhKCkgKyBzdGFydFkgKiBzY2FubGluZSwgYmxvY2tTaXplKTsKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgSW50U2l6ZSBibG9ja1NpemUgPSB7IGVuZFkgLSBzdGFydFks
IHBhaW50U2l6ZS53aWR0aCgpIH07CisKKyAgICAgICAgICAgICAgICBwYXJhbXMuaW9CdWZmZXIg
PSBpb0J1ZmZlci5jcmVhdGVTY3JhdGNoUGl4ZWxCdWZmZXIoYmxvY2tTaXplKTsKKyAgICAgICAg
ICAgICAgICBwYXJhbXMudGVtcEJ1ZmZlciA9IHRlbXBCdWZmZXIuY3JlYXRlU2NyYXRjaFBpeGVs
QnVmZmVyKGJsb2NrU2l6ZSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KHBhcmFtcy5pb0J1ZmZl
ci0+ZGF0YSgpLCBpb0J1ZmZlci5kYXRhKCkgKyBzdGFydFkgKiBzY2FubGluZSwgcGFyYW1zLmlv
QnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwogCiAgICAgICAgICAgICAgICAgcGFyYW1zLndpZHRoID0g
cGFpbnRTaXplLndpZHRoKCk7CiAgICAgICAgICAgICAgICAgcGFyYW1zLmhlaWdodCA9IGVuZFkg
LSBzdGFydFk7CkBAIC00MTcsNyArNDEzLDcgQEAgaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJT
b2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0oVWludDhDbGFtcGVkQXJyYXkmIGlvQnUKICAg
ICAgICAgICAgICAgICBkZXN0aW5hdGlvbk9mZnNldCA9IGN1cnJlbnRZICogc2NhbmxpbmU7CiAg
ICAgICAgICAgICAgICAgc2l6ZSA9IGFkanVzdGVkQmxvY2tIZWlnaHQgKiBzY2FubGluZTsKIAot
ICAgICAgICAgICAgICAgIG1lbWNweShpb0J1ZmZlci5kYXRhKCkgKyBkZXN0aW5hdGlvbk9mZnNl
dCwgcGFyYW1zLmlvUGl4ZWxBcnJheS0+ZGF0YSgpICsgc291cmNlT2Zmc2V0LCBzaXplKTsKKyAg
ICAgICAgICAgICAgICBtZW1jcHkoaW9CdWZmZXIuYnl0ZXMoKSArIGRlc3RpbmF0aW9uT2Zmc2V0
LCBwYXJhbXMuaW9CdWZmZXItPmJ5dGVzKCkgKyBzb3VyY2VPZmZzZXQsIHNpemUpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC00MjYsNyArNDIyLDcg
QEAgaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZv
cm0oVWludDhDbGFtcGVkQXJyYXkmIGlvQnUKICNlbmRpZgogCiAgICAgLy8gVGhlIHNlbGVjdGlv
biBoZXJlIGV2ZW50dWFsbHkgc2hvdWxkIGhhcHBlbiBkeW5hbWljYWxseSBvbiBzb21lIHBsYXRm
b3Jtcy4KLSAgICBib3hCbHVyR2VuZXJpYyhpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVs
U2l6ZVgsIGtlcm5lbFNpemVZLCBwYWludFNpemUsIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUpOwor
ICAgIGJveEJsdXJHZW5lcmljKGlvQnVmZmVyLCB0ZW1wQnVmZmVyLCBrZXJuZWxTaXplWCwga2Vy
bmVsU2l6ZVksIHBhaW50U2l6ZSwgaXNBbHBoYUltYWdlLCBlZGdlTW9kZSk7CiB9CiAKIGJvb2wg
RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVy
LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBGaWx0ZXJJbWFnZSYgcmVzdWx0KSBj
b25zdApAQCAtNDQ1LDEyICs0NDEsMTEgQEAgYm9vbCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBw
bGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckltYWcKICAgICBh
dXRvIGtlcm5lbFNpemUgPSBtX2VmZmVjdC5jYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlciwgeyBt
X2VmZmVjdC5zdGREZXZpYXRpb25YKCksIG1fZWZmZWN0LnN0ZERldmlhdGlvblkoKSB9KTsKIAog
ICAgIEludFNpemUgcGFpbnRTaXplID0gcmVzdWx0LmFic29sdXRlSW1hZ2VSZWN0KCkuc2l6ZSgp
OwotICAgIGF1dG8gdG1wSW1hZ2VEYXRhID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVu
aW5pdGlhbGl6ZWQocGFpbnRTaXplLmFyZWEoKSAqIDQpOwotICAgIGlmICghdG1wSW1hZ2VEYXRh
KQorICAgIGF1dG8gdGVtcEJ1ZmZlciA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmNyZWF0ZVNj
cmF0Y2hQaXhlbEJ1ZmZlcihwYWludFNpemUpOworICAgIGlmICghdGVtcEJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVz
dGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIGFwcGx5UGxhdGZvcm0oZGVzdGluYXRp
b25QaXhlbEFycmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNp
emUuaGVpZ2h0KCksIHBhaW50U2l6ZSwgcmVzdWx0LmlzQWxwaGFJbWFnZSgpLCBtX2VmZmVjdC5l
ZGdlTW9kZSgpKTsKKyAgICBhcHBseVBsYXRmb3JtKCpkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCAq
dGVtcEJ1ZmZlciwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxTaXplLmhlaWdodCgpLCBwYWlu
dFNpemUsIHJlc3VsdC5pc0FscGhhSW1hZ2UoKSwgbV9lZmZlY3QuZWRnZU1vZGUoKSk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVz
c2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIuaAppbmRleCAxOGMwNWRlNmVmZWUuLmZmNTczMzcxMTcw
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0
d2FyZUFwcGxpZXIuaApAQCAtNDIsOCArNDIsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgYXBwbHko
Y29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgRmlsdGVySW1h
Z2UmIHJlc3VsdCkgY29uc3QgZmluYWw7CiAKICAgICBzdHJ1Y3QgQXBwbHlQYXJhbWV0ZXJzIHsK
LSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBpb1BpeGVsQXJyYXk7Ci0gICAgICAg
IFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gdG1wUGl4ZWxBcnJheTsKKyAgICAgICAgc3RkOjpv
cHRpb25hbDxQaXhlbEJ1ZmZlcj4gaW9CdWZmZXI7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IHRlbXBCdWZmZXI7CiAgICAgICAgIGludCB3aWR0aDsKICAgICAgICAgaW50IGhl
aWdodDsKICAgICAgICAgdW5zaWduZWQga2VybmVsU2l6ZVg7CkBAIC01NCwxNiArNTQsMTYgQEAg
cHJpdmF0ZToKIAogICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBrZXJuZWxQb3NpdGlvbihpbnQgYmx1
ckl0ZXJhdGlvbiwgdW5zaWduZWQmIHJhZGl1cywgaW50JiBkZWx0YUxlZnQsIGludCYgZGVsdGFS
aWdodCk7CiAKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1ckFscGhhT25seShjb25zdCBV
aW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBp
eGVsQXJyYXksIHVuc2lnbmVkIGR4LCBpbnQmIGR4TGVmdCwgaW50JiBkeFJpZ2h0LCBpbnQmIHN0
cmlkZSwgaW50JiBzdHJpZGVMaW5lLCBpbnQmIGVmZmVjdFdpZHRoLCBpbnQmIGVmZmVjdEhlaWdo
dCwgY29uc3QgaW50JiBtYXhLZXJuZWxTaXplKTsKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94
Qmx1cihjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGVk
QXJyYXkmIGRzdFBpeGVsQXJyYXksIHVuc2lnbmVkIGR4LCBpbnQgZHhMZWZ0LCBpbnQgZHhSaWdo
dCwgaW50IHN0cmlkZSwgaW50IHN0cmlkZUxpbmUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVj
dEhlaWdodCwgYm9vbCBhbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUpOworICAgIHN0YXRpYyBpbmxp
bmUgdm9pZCBib3hCbHVyQWxwaGFPbmx5KGNvbnN0IFBpeGVsQnVmZmVyJiBpb0J1ZmZlciwgUGl4
ZWxCdWZmZXImIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGR4LCBpbnQmIGR4TGVmdCwgaW50JiBkeFJp
Z2h0LCBpbnQmIHN0cmlkZSwgaW50JiBzdHJpZGVMaW5lLCBpbnQmIGVmZmVjdFdpZHRoLCBpbnQm
IGVmZmVjdEhlaWdodCwgY29uc3QgaW50JiBtYXhLZXJuZWxTaXplKTsKKyAgICBzdGF0aWMgaW5s
aW5lIHZvaWQgYm94Qmx1cihjb25zdCBQaXhlbEJ1ZmZlciYgaW9CdWZmZXIsIFBpeGVsQnVmZmVy
JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBkeCwgaW50IGR4TGVmdCwgaW50IGR4UmlnaHQsIGludCBz
dHJpZGUsIGludCBzdHJpZGVMaW5lLCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQs
IGJvb2wgYWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlKTsKIAotICAgIHN0YXRpYyBpbmxpbmUgdm9p
ZCBib3hCbHVyQWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENs
YW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZSwgaW50IHN0cmlkZSwg
aW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0KTsKLSAgICBzdGF0aWMgaW5saW5lIHZv
aWQgYm94Qmx1clVuYWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50
OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVk
IGtlcm5lbFNpemVZLCBpbnQgc3RyaWRlLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBo
YUltYWdlLCBFZGdlTW9kZVR5cGUpOworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyQWNj
ZWxlcmF0ZWQoUGl4ZWxCdWZmZXImIGlvQnVmZmVyLCBQaXhlbEJ1ZmZlciYgdGVtcEJ1ZmZlciwg
dW5zaWduZWQga2VybmVsU2l6ZSwgaW50IHN0cmlkZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZm
ZWN0SGVpZ2h0KTsKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1clVuYWNjZWxlcmF0ZWQo
UGl4ZWxCdWZmZXImIGlvQnVmZmVyLCBQaXhlbEJ1ZmZlciYgdGVtcEJ1ZmZlciwgdW5zaWduZWQg
a2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBpbnQgc3RyaWRlLCBJbnRTaXplJiBw
YWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUpOwogCi0gICAgc3RhdGlj
IGlubGluZSB2b2lkIGJveEJsdXJHZW5lcmljKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwg
VWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1
bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFn
ZSwgRWRnZU1vZGVUeXBlKTsKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1ckdlbmVyaWMo
UGl4ZWxCdWZmZXImIGlvQnVmZmVyLCBQaXhlbEJ1ZmZlciYgdGVtcEJ1ZmZlciwgdW5zaWduZWQg
a2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUsIGJv
b2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUpOwogICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBi
b3hCbHVyV29ya2VyKEFwcGx5UGFyYW1ldGVycyopOwogCi0gICAgc3RhdGljIGlubGluZSB2b2lk
IGFwcGx5UGxhdGZvcm0oVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRB
cnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5l
bFNpemVZLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5
cGUpOworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseVBsYXRmb3JtKFBpeGVsQnVmZmVyJiBp
b0J1ZmZlciwgUGl4ZWxCdWZmZXImIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1
bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFn
ZSwgRWRnZU1vZGVUeXBlKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVM
aWdodGluZ1NvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3BwCmluZGV4
IGZhOGVlM2Q1NmE1Ni4uZTRiMTQ3Zjc1NTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxp
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllci5jcHAKQEAgLTEsNyArMSw3IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcKLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxl
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMiBB
cHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zOTksOCArMzk5LDYgQEAgYm9vbCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VWZWMKICAgICBp
ZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRh
dGEoKTsKLQogICAgIGF1dG8gZWZmZWN0RHJhd2luZ1JlY3QgPSByZXN1bHQuYWJzb2x1dGVJbWFn
ZVJlY3RSZWxhdGl2ZVRvKGlucHV0KTsKICAgICBpbnB1dC5jb3B5UGl4ZWxCdWZmZXIoKmRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXIsIGVmZmVjdERyYXdpbmdSZWN0KTsKIApAQCAtNDI4LDcgKzQyNiw3
IEBAIGJvb2wgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBm
aWx0ZXIsIGNvbnN0IEZpbHRlckltYWdlVmVjCiAgICAgZGF0YS5saWdodFNvdXJjZSA9ICZtX2Vm
ZmVjdC5saWdodFNvdXJjZSgpOwogICAgIGRhdGEub3BlcmF0aW5nQ29sb3JTcGFjZSA9ICZtX2Vm
ZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCk7CiAKLSAgICBkYXRhLnBpeGVscyA9ICZkZXN0aW5h
dGlvblBpeGVsQXJyYXk7CisgICAgZGF0YS5waXhlbHMgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVy
OwogICAgIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgPSBzaXplLndpZHRoKCkgKiBj
UGl4ZWxTaXplOwogICAgIGRhdGEud2lkdGggPSBzaXplLndpZHRoKCk7CiAgICAgZGF0YS5oZWln
aHQgPSBzaXplLmhlaWdodCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRp
bmdTb2Z0d2FyZUFwcGxpZXIuaAppbmRleCAzODc1YjBhNGI1ZGUuLmM5NzRkOTIxMTVmZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmgK
QEAgLTEwNCw3ICsxMDQsNyBAQCBwcml2YXRlOgogICAgICAgICBjb25zdCBMaWdodFNvdXJjZSog
bGlnaHRTb3VyY2U7CiAgICAgICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSogb3BlcmF0
aW5nQ29sb3JTcGFjZTsKIAotICAgICAgICBVaW50OENsYW1wZWRBcnJheSogcGl4ZWxzOworICAg
ICAgICBQaXhlbEJ1ZmZlciogcGl4ZWxzOwogICAgICAgICBpbnQgd2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemU7CiAgICAgICAgIGludCB3aWR0aDsKICAgICAgICAgaW50IGhlaWdodDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmNw
cAppbmRleCAxYzlkZWZiYzMyZTguLmRkZGRhMGVkNTUwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0
d2FyZUFwcGxpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmNwcApAQCAtNCw3ICs0
LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgog
ICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSBBcHBsZSBJbmMuIDIwMTctMjAyMSBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBBcHBsZSBJbmMuIDIwMTctMjAyMiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC00MCwxMiArNDAsMTIg
QEAgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRU1vcnBob2xvZ3lTb2Z0d2Fy
ZUFwcGxpZXI6Om1pbk9yTWF4KGNvbnN0IEMKICAgICByZXR1cm4gcGVyQ29tcG9uZW50TWF4KGEs
IGIpOwogfQogCi1pbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IEZFTW9ycGhvbG9n
eVNvZnR3YXJlQXBwbGllcjo6Y29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkm
IHNyY1BpeGVsQXJyYXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoLCBN
b3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCitpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4
X3QsIDQ+IEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6Y29sdW1uRXh0cmVtdW0oY29uc3Qg
UGl4ZWxCdWZmZXImIHNyY1BpeGVsQnVmZmVyLCBpbnQgeCwgaW50IHlTdGFydCwgaW50IHlFbmQs
IGludCB3aWR0aCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQogewotICAgIGF1dG8gZXh0
cmVtdW0gPSBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJH
QkEgeyAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJyYXkuZGF0
YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHlTdGFydCwgd2lkdGgpKSB9KTsKKyAgICBhdXRvIGV4
dHJlbXVtID0gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpS
R0JBIHsgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQqPihzcmNQaXhlbEJ1ZmZlci5i
eXRlcygpICsgcGl4ZWxBcnJheUluZGV4KHgsIHlTdGFydCwgd2lkdGgpKSB9KTsKIAogICAgIGZv
ciAoaW50IHkgPSB5U3RhcnQgKyAxOyB5IDwgeUVuZDsgKyt5KSB7Ci0gICAgICAgIGF1dG8gcGl4
ZWwgPSBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEg
eyAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJyYXkuZGF0YSgp
ICsgcGl4ZWxBcnJheUluZGV4KHgsIHksIHdpZHRoKSkgfSk7CisgICAgICAgIGF1dG8gcGl4ZWwg
PSBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgeyAq
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQnVmZmVyLmJ5dGVzKCkg
KyBwaXhlbEFycmF5SW5kZXgoeCwgeSwgd2lkdGgpKSB9KTsKICAgICAgICAgZXh0cmVtdW0gPSBt
aW5Pck1heChleHRyZW11bSwgcGl4ZWwsIHR5cGUpOwogICAgIH0KICAgICByZXR1cm4gZXh0cmVt
dW07CkBAIC02NCw4ICs2NCw4IEBAIHZvaWQgRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjph
cHBseVBsYXRmb3JtR2VuZXJpYyhjb25zdCBQYWludGluZ0RhdGEmIHBhaW50CiB7CiAgICAgQVNT
RVJUKGVuZFkgPiBzdGFydFkpOwogCi0gICAgY29uc3QgYXV0byYgc3JjUGl4ZWxBcnJheSA9ICpw
YWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheTsKLSAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gKnBh
aW50aW5nRGF0YS5kc3RQaXhlbEFycmF5OworICAgIGNvbnN0IGF1dG8mIHNyY1BpeGVsQnVmZmVy
ID0gKnBhaW50aW5nRGF0YS5zcmNQaXhlbEJ1ZmZlcjsKKyAgICBhdXRvJiBkc3RQaXhlbEJ1ZmZl
ciA9ICpwYWludGluZ0RhdGEuZHN0UGl4ZWxCdWZmZXI7CiAKICAgICBjb25zdCBpbnQgcmFkaXVz
WCA9IHBhaW50aW5nRGF0YS5yYWRpdXNYOwogICAgIGNvbnN0IGludCByYWRpdXNZID0gcGFpbnRp
bmdEYXRhLnJhZGl1c1k7CkBAIC04NiwxNyArODYsMTcgQEAgdm9pZCBGRU1vcnBob2xvZ3lTb2Z0
d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1HZW5lcmljKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFp
bnQKIAogICAgICAgICAvLyBXZSBzdGFydCBhdCB0aGUgbGVmdCBlZGdlLCBzbyBjb21wdXRlIGV4
dHJlbWUgZm9yIHRoZSByYWRpdXNYIGNvbHVtbnMuCiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgcmFkaXVzWDsgKyt4KQotICAgICAgICAgICAgZXh0cmVtYS5hcHBlbmQoY29sdW1uRXh0cmVt
dW0oc3JjUGl4ZWxBcnJheSwgeCwgeVJhZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0aCwgcGFp
bnRpbmdEYXRhLnR5cGUpKTsKKyAgICAgICAgICAgIGV4dHJlbWEuYXBwZW5kKGNvbHVtbkV4dHJl
bXVtKHNyY1BpeGVsQnVmZmVyLCB4LCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBw
YWludGluZ0RhdGEudHlwZSkpOwogCiAgICAgICAgIC8vIEtlcm5lbCBpcyBmaWxsZWQsIGdldCBl
eHRyZW1hIG9mIG5leHQgY29sdW1uCiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7
ICsreCkgewogICAgICAgICAgICAgaWYgKHggPCB3aWR0aCAtIHJhZGl1c1gpCi0gICAgICAgICAg
ICAgICAgZXh0cmVtYS5hcHBlbmQoY29sdW1uRXh0cmVtdW0oc3JjUGl4ZWxBcnJheSwgeCArIHJh
ZGl1c1gsIHlSYWRpdXNTdGFydCwgeVJhZGl1c0VuZCwgd2lkdGgsIHBhaW50aW5nRGF0YS50eXBl
KSk7CisgICAgICAgICAgICAgICAgZXh0cmVtYS5hcHBlbmQoY29sdW1uRXh0cmVtdW0oc3JjUGl4
ZWxCdWZmZXIsIHggKyByYWRpdXNYLCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBw
YWludGluZ0RhdGEudHlwZSkpOwogCiAgICAgICAgICAgICBpZiAoeCA+IHJhZGl1c1gpCiAgICAg
ICAgICAgICAgICAgZXh0cmVtYS5yZW1vdmUoMCk7CiAKLSAgICAgICAgICAgIHVuc2lnbmVkKiBk
ZXN0UGl4ZWwgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZHN0UGl4ZWxBcnJheS5kYXRh
KCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeSwgd2lkdGgpKTsKKyAgICAgICAgICAgIHVuc2lnbmVk
KiBkZXN0UGl4ZWwgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZHN0UGl4ZWxCdWZmZXIu
Ynl0ZXMoKSArIHBpeGVsQXJyYXlJbmRleCh4LCB5LCB3aWR0aCkpOwogICAgICAgICAgICAgKmRl
c3RQaXhlbCA9IG1ha2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyhrZXJuZWxFeHRyZW11
bShleHRyZW1hLCBwYWludGluZ0RhdGEudHlwZSkpLnZhbHVlOwogICAgICAgICB9CiAgICAgfQpA
QCAtMTc1LDEzICsxNzUsMTAgQEAgYm9vbCBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmFw
cGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJbWFnZVYKICAgICBpZiAoIXNv
dXJjZVBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBzb3Vy
Y2VQaXhlbEFycmF5ID0gc291cmNlUGl4ZWxCdWZmZXItPmRhdGEoKTsKLSAgICBhdXRvJiBkZXN0
aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KICAg
ICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwogICAgIHBhaW50aW5nRGF0YS50eXBlID0gbV9l
ZmZlY3QubW9ycGhvbG9neU9wZXJhdG9yKCk7Ci0gICAgcGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJy
YXkgPSAmc291cmNlUGl4ZWxBcnJheTsKLSAgICBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSA9
ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7CisgICAgcGFpbnRpbmdEYXRhLnNyY1BpeGVsQnVmZmVy
ID0gJipzb3VyY2VQaXhlbEJ1ZmZlcjsKKyAgICBwYWludGluZ0RhdGEuZHN0UGl4ZWxCdWZmZXIg
PSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyOwogICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IGVmZmVj
dERyYXdpbmdSZWN0LndpZHRoKCk7CiAgICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9IGVmZmVjdERy
YXdpbmdSZWN0LmhlaWdodCgpOwogICAgIHBhaW50aW5nRGF0YS5yYWRpdXNYID0gcmFkaXVzWDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGll
ci5oCmluZGV4IDY4YWQ0YTQzMzhiNS4uM2NkOWI2NTQxMjg2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNv
ZnR3YXJlQXBwbGllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmgKQEAgLTQ4LDggKzQ4
LDggQEAgcHJpdmF0ZToKICAgICAgICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlOwogICAg
ICAgICBpbnQgcmFkaXVzWDsKICAgICAgICAgaW50IHJhZGl1c1k7Ci0gICAgICAgIGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5KiBzcmNQaXhlbEFycmF5OwotICAgICAgICBVaW50OENsYW1wZWRBcnJh
eSogZHN0UGl4ZWxBcnJheTsKKyAgICAgICAgY29uc3QgUGl4ZWxCdWZmZXIqIHNyY1BpeGVsQnVm
ZmVyOworICAgICAgICBQaXhlbEJ1ZmZlciogZHN0UGl4ZWxCdWZmZXI7CiAgICAgICAgIGludCB3
aWR0aDsKICAgICAgICAgaW50IGhlaWdodDsKICAgICB9OwpAQCAtNjUsNyArNjUsNyBAQCBwcml2
YXRlOgogCiAgICAgc3RhdGljIGlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gbWFr
ZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHBpeGVsKSB7
IHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhc1NSR0JBKHBpeGVsKS5yZXNvbHZlZCgpKTsgfQog
ICAgIHN0YXRpYyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1pbk9yTWF4KGNv
bnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYSwgY29uc3QgQ29sb3JDb21wb25lbnRz
PHVpbnQ4X3QsIDQ+JiBiLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsKLSAgICBzdGF0aWMgaW5s
aW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjb2x1bW5FeHRyZW11bShjb25zdCBVaW50
OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5k
LCBpbnQgd2lkdGgsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUpOworICAgIHN0YXRpYyBpbmxpbmUg
Q29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNvbHVtbkV4dHJlbXVtKGNvbnN0IFBpeGVsQnVm
ZmVyJiBzcmNQaXhlbEJ1ZmZlciwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5kLCBpbnQgd2lk
dGgsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUpOwogICAgIHN0YXRpYyBpbmxpbmUgQ29sb3JDb21w
b25lbnRzPHVpbnQ4X3QsIDQ+IGtlcm5lbEV4dHJlbXVtKGNvbnN0IENvbHVtbkV4dHJlbWEmIGtl
cm5lbCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSk7CiAKICAgICBzdGF0aWMgdm9pZCBhcHBseVBs
YXRmb3JtR2VuZXJpYyhjb25zdCBQYWludGluZ0RhdGEmLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlQXBw
bGllci5jcHAKaW5kZXggNmQ2NTA2NDVhNzVjLi41MmY2MjRmYzc4ZjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUdXJidWxl
bmNlU29mdHdhcmVBcHBsaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllci5jcHAKQEAg
LTUsNyArNSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdl
YmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5m
LnUtc3plZ2VkLmh1PgogICogQ29weXJpZ2h0IChDKSAyMDExIEdhYm9yIExva2kgPGxva2lAd2Vi
a2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNzAsNyArMjcwLDcgQEAg
Q29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6
Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHUKICAgICByZXR1cm4gdG9JbnRCYXNlZENvbG9yQ29tcG9u
ZW50cyh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQpOwogfQogCi12b2lkIEZFVHVyYnVsZW5jZVNv
ZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWMoY29uc3QgSW50UmVjdCYgZmlsdGVy
UmVnaW9uLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBVaW50OENsYW1wZWRBcnJheSYg
cGl4ZWxBcnJheSwgY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0aXRjaERhdGEg
c3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCit2b2lkIEZFVHVyYnVsZW5jZVNvZnR3
YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWMoY29uc3QgSW50UmVjdCYgZmlsdGVyUmVn
aW9uLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZm
ZXIsIGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERh
dGEsIGludCBzdGFydFksIGludCBlbmRZKQogewogICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsK
IApAQCAtMjg1LDcgKzI4NSw3IEBAIHZvaWQgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjph
cHBseVBsYXRmb3JtR2VuZXJpYyhjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdpCiAgICAgICAgICAg
ICBwb2ludC5zZXRYKHBvaW50LngoKSArIDEpOwogICAgICAgICAgICAgRmxvYXRQb2ludCBsb2Nh
bFBvaW50ID0gcG9pbnQuc2NhbGVkKGludmVyc2VTY2FsZS53aWR0aCgpLCBpbnZlcnNlU2NhbGUu
aGVpZ2h0KCkpOwogICAgICAgICAgICAgYXV0byB2YWx1ZXMgPSBjYWxjdWxhdGVUdXJidWxlbmNl
VmFsdWVGb3JQb2ludChwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIGxvY2FsUG9pbnQpOwotICAg
ICAgICAgICAgcGl4ZWxBcnJheS5zZXRSYW5nZSh2YWx1ZXMuY29tcG9uZW50cy5kYXRhKCksIDQs
IGluZGV4T2ZQaXhlbENoYW5uZWwpOworICAgICAgICAgICAgcGl4ZWxCdWZmZXIuc2V0UmFuZ2Uo
dmFsdWVzLmNvbXBvbmVudHMuZGF0YSgpLCA0LCBpbmRleE9mUGl4ZWxDaGFubmVsKTsKICAgICAg
ICAgICAgIGluZGV4T2ZQaXhlbENoYW5uZWwgKz0gNDsKICAgICAgICAgfQogICAgIH0KQEAgLTI5
MywxMCArMjkzLDEwIEBAIHZvaWQgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBs
YXRmb3JtR2VuZXJpYyhjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdpCiAKIHZvaWQgRkVUdXJidWxl
bmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtV29ya2VyKEFwcGx5UGFyYW1ldGVycyog
cGFyYW1ldGVycykKIHsKLSAgICBhcHBseVBsYXRmb3JtR2VuZXJpYyhwYXJhbWV0ZXJzLT5maWx0
ZXJSZWdpb24sIHBhcmFtZXRlcnMtPmZpbHRlclNjYWxlLCAqcGFyYW1ldGVycy0+cGl4ZWxBcnJh
eSwgKnBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFyYW1ldGVycy0+c3RpdGNoRGF0YSwgcGFy
YW1ldGVycy0+c3RhcnRZLCBwYXJhbWV0ZXJzLT5lbmRZKTsKKyAgICBhcHBseVBsYXRmb3JtR2Vu
ZXJpYyhwYXJhbWV0ZXJzLT5maWx0ZXJSZWdpb24sIHBhcmFtZXRlcnMtPmZpbHRlclNjYWxlLCAq
cGFyYW1ldGVycy0+cGl4ZWxCdWZmZXIsICpwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFt
ZXRlcnMtPnN0aXRjaERhdGEsIHBhcmFtZXRlcnMtPnN0YXJ0WSwgcGFyYW1ldGVycy0+ZW5kWSk7
CiB9CiAKLXZvaWQgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKGNv
bnN0IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwg
VWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRh
LCBTdGl0Y2hEYXRhJiBzdGl0Y2hEYXRhKQordm9pZCBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxp
ZXI6OmFwcGx5UGxhdGZvcm0oY29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9h
dFNpemUmIGZpbHRlclNjYWxlLCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIFBhaW50aW5nRGF0
YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhJiBzdGl0Y2hEYXRhKQogewogICAgIGludCBoZWln
aHQgPSBmaWx0ZXJSZWdpb24uaGVpZ2h0KCk7CiAgICAgdW5zaWduZWQgYXJlYSA9IGZpbHRlclJl
Z2lvbi5hcmVhKCk7CkBAIC0zMjAsNyArMzIwLDcgQEAgdm9pZCBGRVR1cmJ1bGVuY2VTb2Z0d2Fy
ZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0oY29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaW9uLCBjb24K
ICAgICAgICAgICAgICAgICBBcHBseVBhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5w
YXJhbWV0ZXIoaSk7CiAgICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlclJlZ2lvbiA9IGZpbHRl
clJlZ2lvbjsKICAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyU2NhbGUgPSBmaWx0ZXJTY2Fs
ZTsKLSAgICAgICAgICAgICAgICBwYXJhbXMucGl4ZWxBcnJheSA9ICZwaXhlbEFycmF5OworICAg
ICAgICAgICAgICAgIHBhcmFtcy5waXhlbEJ1ZmZlciA9ICZwaXhlbEJ1ZmZlcjsKICAgICAgICAg
ICAgICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0gJnBhaW50aW5nRGF0YTsKICAgICAgICAgICAg
ICAgICBwYXJhbXMuc3RpdGNoRGF0YSA9IHN0aXRjaERhdGE7CiAgICAgICAgICAgICAgICAgcGFy
YW1zLnN0YXJ0WSA9IHN0YXJ0WTsKQEAgLTMzNiw3ICszMzYsNyBAQCB2b2lkIEZFVHVyYnVsZW5j
ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybShjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdp
b24sIGNvbgogICAgIH0KIAogICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2Rl
IGlmIHRoZXJlIGlzIG5vIHJvb20gZm9yIGEgbmV3IHRocmVhZCBvciB0aGUgcGFpbnQgYXJlYSBp
cyB0b28gc21hbGwuCi0gICAgYXBwbHlQbGF0Zm9ybUdlbmVyaWMoZmlsdGVyUmVnaW9uLCBmaWx0
ZXJTY2FsZSwgcGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCAwLCBoZWlnaHQp
OworICAgIGFwcGx5UGxhdGZvcm1HZW5lcmljKGZpbHRlclJlZ2lvbiwgZmlsdGVyU2NhbGUsIHBp
eGVsQnVmZmVyLCBwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIDAsIGhlaWdodCk7CiB9CiAKIGJv
b2wgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRl
ciwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImLCBGaWx0ZXJJbWFnZSYgcmVzdWx0KSBjb25zdApA
QCAtMzQ5LDEwICszNDksOCBAQCBib29sIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBw
bHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckltYWdlVgogICAgIGlmIChyZXN1
bHRTaXplLmFyZWEoKS5oYXNPdmVyZmxvd2VkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIt
PmRhdGEoKTsKLQogICAgIGlmIChyZXN1bHRTaXplLmlzRW1wdHkoKSkgewotICAgICAgICBkZXN0
aW5hdGlvblBpeGVsQXJyYXkuemVyb0ZpbGwoKTsKKyAgICAgICAgZGVzdGluYXRpb25QaXhlbEJ1
ZmZlci0+emVyb0ZpbGwoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0zNjQs
NyArMzYyLDcgQEAgYm9vbCBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0
IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJbWFnZVYKIAogICAgIGF1dG8gcGFpbnRpbmdE
YXRhID0gaW5pdFBhaW50aW5nRGF0YShtX2VmZmVjdC50eXBlKCksIGJhc2VGcmVxdWVuY3lYLCBi
YXNlRnJlcXVlbmN5WSwgbV9lZmZlY3QubnVtT2N0YXZlcygpLCBtX2VmZmVjdC5zZWVkKCksIG1f
ZWZmZWN0LnN0aXRjaFRpbGVzKCksIHRpbGVTaXplKTsKIAotICAgIGFwcGx5UGxhdGZvcm0ocmVz
dWx0LmFic29sdXRlSW1hZ2VSZWN0KCksIGZpbHRlci5maWx0ZXJTY2FsZSgpLCBkZXN0aW5hdGlv
blBpeGVsQXJyYXksIHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSk7CisgICAgYXBwbHlQbGF0Zm9y
bShyZXN1bHQuYWJzb2x1dGVJbWFnZVJlY3QoKSwgZmlsdGVyLmZpbHRlclNjYWxlKCksICpkZXN0
aW5hdGlvblBpeGVsQnVmZmVyLCBwYWludGluZ0RhdGEsIHN0aXRjaERhdGEpOwogICAgIHJldHVy
biB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VT
b2Z0d2FyZUFwcGxpZXIuaAppbmRleCBjZjRkODk1OWViYTQuLmQ2YWMzODVkYWMzYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllci5o
CkBAIC05Myw3ICs5Myw3IEBAIHByaXZhdGU6CiAgICAgc3RydWN0IEFwcGx5UGFyYW1ldGVycyB7
CiAgICAgICAgIEludFJlY3QgZmlsdGVyUmVnaW9uOwogICAgICAgICBGbG9hdFNpemUgZmlsdGVy
U2NhbGU7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbEFycmF5OworICAgICAgICBQ
aXhlbEJ1ZmZlciogcGl4ZWxCdWZmZXI7CiAgICAgICAgIFBhaW50aW5nRGF0YSogcGFpbnRpbmdE
YXRhOwogICAgICAgICBTdGl0Y2hEYXRhIHN0aXRjaERhdGE7CiAgICAgICAgIGludCBzdGFydFk7
CkBAIC0xMTAsOSArMTEwLDkgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgQ29sb3JDb21wb25lbnRz
PHVpbnQ4X3QsIDQ+IHRvSW50QmFzZWRDb2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25l
bnRzPGZsb2F0LCA0PiYgZmxvYXRDb21wb25lbnRzKTsKICAgICBzdGF0aWMgQ29sb3JDb21wb25l
bnRzPHVpbnQ4X3QsIDQ+IGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0IFBh
aW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmKTsKIAotICAgIHN0YXRp
YyB2b2lkIGFwcGx5UGxhdGZvcm1HZW5lcmljKGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lvbiwg
Y29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJy
YXksIGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBlbmRZ
KTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtR2VuZXJpYyhjb25zdCBJbnRSZWN0JiBm
aWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIFBpeGVsQnVmZmVyJiwg
Y29uc3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOwog
ICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm1Xb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKik7Ci0g
ICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybShjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24s
IGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFy
cmF5LCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRhJik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlQ
bGF0Zm9ybShjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZmls
dGVyU2NhbGUsIFBpeGVsQnVmZmVyJiwgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSYpOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotLSAKMi4zMi4wIChBcHBsZSBHaXQtMTMyKQoK
</data>
<flag name="commit-queue"
          id="488768"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459656</attachid>
            <date>2022-05-22 17:21:11 -0700</date>
            <delta_ts>2022-05-22 20:59:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-240777-20220522172110.patch</filename>
            <type>text/plain</type>
            <size>62129</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">RnJvbSBlZmQwNWVjNWM0OGM3OTA1ZDkyYjExY2IxNjlkNDgzZGE4ZDBjNGUzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTYWlkIEFib3UtSGFsbGF3YSA8c2FpZEBhcHBsZS5jb20+CkRh
dGU6IFN1biwgMjIgTWF5IDIwMjIgMTc6MjA6MDEgLTA3MDAKU3ViamVjdDogW1BBVENIXSBbR1BV
IFByb2Nlc3NdIFtGaWx0ZXJzXSBEb24ndCB1c2UgVWludDhDbGFtcGVkQXJyYXkgaW4KIHNvZnR3
YXJlIGZpbHRlciBhcHBsaWVycyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjQwNzc3CgpUaGUgcGxhbiBpcyB0byBhbGxvY2F0ZSB0aGUgRmlsdGVySW1hZ2UgYnVmZmVy
cyBkaWZmZXJlbnRseSBmb3IgR1BVUHJvY2Vzcy4gU28KdGhlIGZpcnN0IHN0ZXAgaXMgdG8gaGlk
ZSB0aGUgdW5kZXJseWluZyBtZW1vcnkgb2YgUGl4ZWxCdWZmZXIgZnJvbSB0aGUgc29mdHdhcmUK
ZmlsdGVyIGFwcGxpZXJzLgotLS0KIC4uLi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVs
QnVmZmVyLmNwcCB8IDUwICsrKysrKysrKysrKy0KIC4uLi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BpeGVsQnVmZmVyLmggICB8IDE2ICsrKy0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9zaXRlLmggICB8ICAyIC0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckltYWdlLmNwcCB8IDM5ICsrKysrLS0tLS0KIC4uLi9zb2Z0d2FyZS9GRUNvbG9yTWF0
cml4U29mdHdhcmVBcHBsaWVyLmNwcCB8IDY5ICsrKysrKysrLS0tLS0tLS0tLQogLi4uL0ZFQ29t
cG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIuY3BwICAgIHwgIDkgKy0tCiAuLi4vc29mdHdh
cmUvRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIuY3BwICAgfCAxMiArLS0KIC4uLi9GRUNvbnZv
bHZlTWF0cml4U29mdHdhcmVBcHBsaWVyLmNwcCAgICAgICB8IDM3ICsrKysrLS0tLS0KIC4uLi9G
RUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyLmggICAgICAgICB8ICA2ICstCiAuLi4vRkVE
aXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIuY3BwICAgICAgfCAxNiArKy0tCiAuLi4vc29m
dHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyLmNwcCAgfCAgNSArLQogLi4uL0ZFR2F1
c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmNwcCAgICAgICAgIHwgNzMgKysrKysrKysrLS0tLS0t
LS0tLQogLi4uL3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmggIHwgMTYg
KystLQogLi4uL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3BwICAgIHwgIDYg
Ky0KIC4uLi9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmggICAgICB8ICAyICst
CiAuLi4vc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmNwcCAgfCAyNSArKyst
LS0tCiAuLi4vc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmggICAgfCAgNiAr
LQogLi4uL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllci5jcHAgIHwgMjAgKysr
LS0KIC4uLi9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuaCAgICB8ICA2ICst
CiAxOSBmaWxlcyBjaGFuZ2VkLCAyMjIgaW5zZXJ0aW9ucygrKSwgMTkzIGRlbGV0aW9ucygtKQoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmNwcApp
bmRleCA3NTQzZjQ3NWEyN2EuLmNlNThkMGFjOGNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjAsOSArMTIwLDU1IEBAIFBpeGVs
QnVmZmVyIFBpeGVsQnVmZmVyOjpkZWVwQ2xvbmUoKSBjb25zdAogICAgIHJldHVybiB7IG1fZm9y
bWF0LCBtX3NpemUsIFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUobV9kYXRhLT5kYXRhKCksIG1f
ZGF0YS0+bGVuZ3RoKCkpIH07CiB9CiAKK3VpbnQ4X3QqIFBpeGVsQnVmZmVyOjpieXRlcygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YS0+ZGF0YSgpOworfQorCitzaXplX3QgUGl4ZWxCdWZm
ZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAoreworICAgIEFTU0VSVChtX2RhdGEtPmJ5dGVMZW5ndGgo
KSA9PSBtX3NpemUuYXJlYSgpICogNCk7CisgICAgcmV0dXJuIG1fZGF0YS0+Ynl0ZUxlbmd0aCgp
OworfQorCitib29sIFBpeGVsQnVmZmVyOjpzZXRSYW5nZShjb25zdCB2b2lkKiBkYXRhLCBzaXpl
X3QgZGF0YUJ5dGVMZW5ndGgsIHNpemVfdCBieXRlT2Zmc2V0KQoreworICAgIGlmICghaXNTdW1T
bWFsbGVyVGhhbk9yRXF1YWwoYnl0ZU9mZnNldCwgZGF0YUJ5dGVMZW5ndGgsIGJ5dGVMZW5ndGgo
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1lbW1vdmUoYnl0ZXMoKSArIGJ5dGVP
ZmZzZXQsIGRhdGEsIGRhdGFCeXRlTGVuZ3RoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBQaXhlbEJ1ZmZlcjo6emVyb1JhbmdlKHNpemVfdCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VC
eXRlTGVuZ3RoKQoreworICAgIGlmICghaXNTdW1TbWFsbGVyVGhhbk9yRXF1YWwoYnl0ZU9mZnNl
dCwgcmFuZ2VCeXRlTGVuZ3RoLCBieXRlTGVuZ3RoKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBtZW1zZXQoYnl0ZXMoKSArIGJ5dGVPZmZzZXQsIDAsIHJhbmdlQnl0ZUxlbmd0aCk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3VpbnQ4X3QgUGl4ZWxCdWZmZXI6Oml0ZW0oc2l6ZV90
IGluZGV4KSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04oaW5kZXggPCBieXRlTGVuZ3RoKCkpOworICAgIHJldHVybiBieXRlcygpW2luZGV4XTsK
K30KKwordm9pZCBQaXhlbEJ1ZmZlcjo6c2V0KHNpemVfdCBpbmRleCwgZmxvYXQgdmFsdWUpCit7
CisgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IGJ5
dGVMZW5ndGgoKSk7CisgICAgYnl0ZXMoKVtpbmRleF0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2
YWx1ZSk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IFBpeGVsQnVmZmVyOjpjcmVh
dGVTY3JhdGNoUGl4ZWxCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShtX2Zvcm1hdCwgc2l6ZSk7Cit9CisKIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFBpeGVsQnVmZmVyJiBwaXhl
bEJ1ZmZlcikKIHsKICAgICByZXR1cm4gdHMgPDwgJnBpeGVsQnVmZmVyLmRhdGEoKSA8PCAiZm9y
bWF0ICggIiA8PCBwaXhlbEJ1ZmZlci5mb3JtYXQoKSA8PCAiKSI7CiB9CiAKLX0KK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BpeGVsQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhl
bEJ1ZmZlci5oCmluZGV4IDA0MzRjZWViOTg3Zi4uNGRlNzg3NTUzOGFjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjEsNiArNjEsMTggQEAg
cHVibGljOgogCiAgICAgUGl4ZWxCdWZmZXIgZGVlcENsb25lKCkgY29uc3Q7CiAKKyAgICB1aW50
OF90KiBieXRlcygpIGNvbnN0OworICAgIHNpemVfdCBieXRlTGVuZ3RoKCkgY29uc3Q7CisKKyAg
ICBib29sIHNldFJhbmdlKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhQnl0ZUxlbmd0aCwg
c2l6ZV90IGJ5dGVPZmZzZXQpOworICAgIGJvb2wgemVyb1JhbmdlKHNpemVfdCBieXRlT2Zmc2V0
LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKTsKKyAgICB2b2lkIHplcm9GaWxsKCkgeyB6ZXJvUmFu
Z2UoMCwgYnl0ZUxlbmd0aCgpKTsgfQorCisgICAgdWludDhfdCBpdGVtKHNpemVfdCBpbmRleCkg
Y29uc3Q7CisgICAgdm9pZCBzZXQoc2l6ZV90IGluZGV4LCBmbG9hdCB2YWx1ZSk7CisKKyAgICBz
dGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBjcmVhdGVTY3JhdGNoUGl4ZWxCdWZmZXIoY29uc3Qg
SW50U2l6ZSYpIGNvbnN0OworCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBkZWNvZGUoRGVjb2RlciYpOwogCkBAIC0xMTksNCAr
MTMxLDQgQEAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZl
cj4gUGl4ZWxCdWZmZXI6OmRlY29kZShEZWNvZGVyJgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAppbmRleCAxOWI2OGY0YWU5ZDIu
LjY4MDFiN2RjZjU0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaApAQCAtNzMsOCArNzMsNiBAQCBwcml2YXRlOgog
CiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGlubGlu
ZSB2b2lkIHBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5
JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgZmxvYXQgazEsIGZsb2F0
IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOwotCiAjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNT
KQogICAgIHRlbXBsYXRlIDxpbnQgYjEsIGludCBiND4KICAgICBzdGF0aWMgaW5saW5lIHZvaWQg
Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHNOZW9uKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhf
dCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9h
dCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKaW5kZXggYjEwNmRmM2Ix
ZmZjLi44MDhkNDg1YjRjZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAwLDQ2ICszMDAsNDUgQEAg
dm9pZCBGaWx0ZXJJbWFnZTo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpCiAgICAg
aWYgKCFtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlciB8fCBtX2lzVmFsaWRQcmVtdWx0aXBsaWVk
KQogICAgICAgICByZXR1cm47CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSYgaW1hZ2VBcnJheSA9
IG1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgdWludDhfdCogcGl4ZWxE
YXRhID0gaW1hZ2VBcnJheS5kYXRhKCk7Ci0gICAgaW50IHBpeGVsQXJyYXlMZW5ndGggPSBpbWFn
ZUFycmF5Lmxlbmd0aCgpOworICAgIHVpbnQ4X3QqIHBpeGVsQnl0ZXMgPSBtX3ByZW11bHRpcGxp
ZWRQaXhlbEJ1ZmZlci0+Ynl0ZXMoKTsKKyAgICBpbnQgcGl4ZWxCeXRlTGVuZ3RoID0gbV9wcmVt
dWx0aXBsaWVkUGl4ZWxCdWZmZXItPmJ5dGVMZW5ndGgoKTsKIAogICAgIC8vIFdlIG11c3QgaGF2
ZSBmb3VyIGJ5dGVzIHBlciBwaXhlbCwgYW5kIGNvbXBsZXRlIHBpeGVscwotICAgIEFTU0VSVCgh
KHBpeGVsQXJyYXlMZW5ndGggJSA0KSk7CisgICAgQVNTRVJUKCEocGl4ZWxCeXRlTGVuZ3RoICUg
NCkpOwogCiAjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgIGlmIChwaXhlbEFycmF5
TGVuZ3RoID49IDY0KSB7Ci0gICAgICAgIHVpbnQ4X3QqIGxhc3RQaXhlbCA9IHBpeGVsRGF0YSAr
IChwaXhlbEFycmF5TGVuZ3RoICYgfjB4M2YpOworICAgIGlmIChwaXhlbEJ5dGVMZW5ndGggPj0g
NjQpIHsKKyAgICAgICAgdWludDhfdCogbGFzdFBpeGVsID0gcGl4ZWxCeXRlcyArIChwaXhlbEJ5
dGVMZW5ndGggJiB+MHgzZik7CiAgICAgICAgIGRvIHsKLSAgICAgICAgICAgIC8vIEluY3JlbWVu
dHMgcGl4ZWxEYXRhIGJ5IDY0LgotICAgICAgICAgICAgdWludDh4MTZ4NF90IHNpeHRlZW5QaXhl
bHMgPSB2bGQ0cV91OChwaXhlbERhdGEpOworICAgICAgICAgICAgLy8gSW5jcmVtZW50cyBwaXhl
bEJ5dGVzIGJ5IDY0LgorICAgICAgICAgICAgdWludDh4MTZ4NF90IHNpeHRlZW5QaXhlbHMgPSB2
bGQ0cV91OChwaXhlbEJ5dGVzKTsKICAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzBdID0g
dm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMF0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKICAg
ICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzFdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52
YWxbMV0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKICAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMu
dmFsWzJdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMl0sIHNpeHRlZW5QaXhlbHMudmFs
WzNdKTsKLSAgICAgICAgICAgIHZzdDRxX3U4KHBpeGVsRGF0YSwgc2l4dGVlblBpeGVscyk7Ci0g
ICAgICAgICAgICBwaXhlbERhdGEgKz0gNjQ7Ci0gICAgICAgIH0gd2hpbGUgKHBpeGVsRGF0YSA8
IGxhc3RQaXhlbCk7CisgICAgICAgICAgICB2c3Q0cV91OChwaXhlbEJ5dGVzLCBzaXh0ZWVuUGl4
ZWxzKTsKKyAgICAgICAgICAgIHBpeGVsQnl0ZXMgKz0gNjQ7CisgICAgICAgIH0gd2hpbGUgKHBp
eGVsQnl0ZXMgPCBsYXN0UGl4ZWwpOwogCi0gICAgICAgIHBpeGVsQXJyYXlMZW5ndGggJj0gMHgz
ZjsKLSAgICAgICAgaWYgKCFwaXhlbEFycmF5TGVuZ3RoKQorICAgICAgICBwaXhlbEJ5dGVMZW5n
dGggJj0gMHgzZjsKKyAgICAgICAgaWYgKCFwaXhlbEJ5dGVMZW5ndGgpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgfQogI2VuZGlmCiAKLSAgICBpbnQgbnVtUGl4ZWxzID0gcGl4ZWxBcnJheUxl
bmd0aCAvIDQ7CisgICAgaW50IG51bVBpeGVscyA9IHBpeGVsQnl0ZUxlbmd0aCAvIDQ7CiAKICAg
ICAvLyBJdGVyYXRlIG92ZXIgZWFjaCBwaXhlbCwgY2hlY2tpbmcgYWxwaGEgYW5kIGFkanVzdGlu
ZyBjb2xvciBjb21wb25lbnRzIGlmIG5lY2Vzc2FyeQogICAgIHdoaWxlICgtLW51bVBpeGVscyA+
PSAwKSB7CiAgICAgICAgIC8vIEFscGhhIGlzIHRoZSA0dGggYnl0ZSBpbiBhIHBpeGVsCi0gICAg
ICAgIHVpbnQ4X3QgYSA9ICoocGl4ZWxEYXRhICsgMyk7CisgICAgICAgIHVpbnQ4X3QgYSA9ICoo
cGl4ZWxCeXRlcyArIDMpOwogICAgICAgICAvLyBDbGFtcCBlYWNoIGNvbXBvbmVudCB0byBhbHBo
YSwgYW5kIGluY3JlbWVudCB0aGUgcGl4ZWwgbG9jYXRpb24KICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAgICAgIGlmICgqcGl4ZWxEYXRhID4gYSkKLSAgICAg
ICAgICAgICAgICAqcGl4ZWxEYXRhID0gYTsKLSAgICAgICAgICAgICsrcGl4ZWxEYXRhOworICAg
ICAgICAgICAgaWYgKCpwaXhlbEJ5dGVzID4gYSkKKyAgICAgICAgICAgICAgICAqcGl4ZWxCeXRl
cyA9IGE7CisgICAgICAgICAgICArK3BpeGVsQnl0ZXM7CiAgICAgICAgIH0KICAgICAgICAgLy8g
SW5jcmVtZW50IGZvciBhbHBoYQotICAgICAgICArK3BpeGVsRGF0YTsKKyAgICAgICAgKytwaXhl
bEJ5dGVzOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVD
b2xvck1hdHJpeFNvZnR3YXJlQXBwbGllci5jcHAKaW5kZXggMzE2M2E1NmRlNDM1Li4zMjczYTQ1
MGEzN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4
U29mdHdhcmVBcHBsaWVyLmNwcApAQCAtMyw3ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBT
Y2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTgzLDI1
ICs4MywyMSBAQCBpbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjpsdW1p
bmFuY2UoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbAogI2lmIFVTRShBQ0NFTEVSQVRFKQog
dm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtQWNjZWxlcmF0
ZWQoUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyKSBjb25zdAogewotICAgIGF1dG8mIHBpeGVsQXJy
YXkgPSBwaXhlbEJ1ZmZlci5kYXRhKCk7CisgICAgYXV0byogcGl4ZWxCeXRlcyA9IHBpeGVsQnVm
ZmVyLmJ5dGVzKCk7CiAgICAgYXV0byBidWZmZXJTaXplID0gcGl4ZWxCdWZmZXIuc2l6ZSgpOwot
Ci0gICAgQVNTRVJUKHBpeGVsQXJyYXkubGVuZ3RoKCkgPT0gYnVmZmVyU2l6ZS5hcmVhKCkgKiA0
KTsKLSAgICAKICAgICBjb25zdCBpbnQzMl90IGRpdmlzb3IgPSAyNTY7Ci0gICAgdWludDhfdCog
ZGF0YSA9IHBpeGVsQXJyYXkuZGF0YSgpOwogCiAgICAgdkltYWdlX0J1ZmZlciBzcmM7CiAgICAg
c3JjLndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOwogICAgIHNyYy5oZWlnaHQgPSBidWZmZXJT
aXplLmhlaWdodCgpOwogICAgIHNyYy5yb3dCeXRlcyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7
Ci0gICAgc3JjLmRhdGEgPSBkYXRhOworICAgIHNyYy5kYXRhID0gcGl4ZWxCeXRlczsKICAgICAK
ICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7CiAgICAgZGVzdC53aWR0aCA9IGJ1ZmZlclNpemUud2lk
dGgoKTsKICAgICBkZXN0LmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0KCk7CiAgICAgZGVzdC5y
b3dCeXRlcyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0gICAgZGVzdC5kYXRhID0gZGF0YTsK
KyAgICBkZXN0LmRhdGEgPSBwaXhlbEJ5dGVzOwogCiAgICAgc3dpdGNoIChtX2VmZmVjdC50eXBl
KCkpIHsKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgpAQCAtMTkyLDUzICsx
ODgsNTIgQEAgdm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3Jt
QWNjZWxlcmF0ZWQoUGl4ZWxCdWZmZXImIHBpeGVsQnUKIAogdm9pZCBGRUNvbG9yTWF0cml4U29m
dHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtVW5hY2NlbGVyYXRlZChQaXhlbEJ1ZmZlciYgcGl4
ZWxCdWZmZXIpIGNvbnN0CiB7Ci0gICAgYXV0byYgcGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLmRh
dGEoKTsKLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS5sZW5ndGgo
KTsKKyAgICBhdXRvIHBpeGVsQnl0ZUxlbmd0aCA9IHBpeGVsQnVmZmVyLmJ5dGVMZW5ndGgoKTsK
IAogICAgIHN3aXRjaCAobV9lZmZlY3QudHlwZSgpKSB7CiAgICAgY2FzZSBGRUNPTE9STUFUUklY
X1RZUEVfVU5LTk9XTjoKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhf
VFlQRV9NQVRSSVg6Ci0gICAgICAgIGZvciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsg
cGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQp
IHsKLSAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZz
ZXQpOwotICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRl
T2Zmc2V0ICsgMSk7Ci0gICAgICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBp
eGVsQnl0ZU9mZnNldCArIDIpOwotICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5
Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CisgICAgICAgIGZvciAodW5zaWduZWQgcGl4ZWxC
eXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxCeXRlTGVuZ3RoOyBwaXhlbEJ5
dGVPZmZzZXQgKz0gNCkgeworICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxCdWZmZXIuaXRl
bShwaXhlbEJ5dGVPZmZzZXQpOworICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEJ1ZmZl
ci5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEpOworICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBp
eGVsQnVmZmVyLml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7CisgICAgICAgICAgICBmbG9hdCBh
bHBoYSA9IHBpeGVsQnVmZmVyLml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CiAgICAgICAgICAg
ICBtYXRyaXgocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgICAgICAgICAgcGl4ZWxBcnJh
eS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQo
cGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQo
cGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChw
aXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7CisgICAgICAgICAgICBwaXhlbEJ1ZmZlci5zZXQo
cGl4ZWxCeXRlT2Zmc2V0LCByZWQpOworICAgICAgICAgICAgcGl4ZWxCdWZmZXIuc2V0KHBpeGVs
Qnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKKyAgICAgICAgICAgIHBpeGVsQnVmZmVyLnNldChwaXhl
bEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKKyAgICAgICAgICAgIHBpeGVsQnVmZmVyLnNldChwaXhl
bEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKICAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKICAgICBjYXNlIEZFQ09MT1JNQVRS
SVhfVFlQRV9IVUVST1RBVEU6Ci0gICAgICAgIGZvciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0
ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0
ICs9IDQpIHsKLSAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5
dGVPZmZzZXQpOwotICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4
ZWxCeXRlT2Zmc2V0ICsgMSk7Ci0gICAgICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5p
dGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOwotICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhl
bEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CisgICAgICAgIGZvciAodW5zaWduZWQg
cGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxCeXRlTGVuZ3RoOyBw
aXhlbEJ5dGVPZmZzZXQgKz0gNCkgeworICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxCdWZm
ZXIuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOworICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhl
bEJ1ZmZlci5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEpOworICAgICAgICAgICAgZmxvYXQgYmx1
ZSA9IHBpeGVsQnVmZmVyLml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7CisgICAgICAgICAgICBm
bG9hdCBhbHBoYSA9IHBpeGVsQnVmZmVyLml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CiAgICAg
ICAgICAgICBzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShyZWQsIGdyZWVuLCBibHVlKTsKLSAgICAgICAg
ICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKLSAgICAgICAgICAgIHBp
eGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKLSAgICAgICAgICAgIHBp
eGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJsdWUpOwotICAgICAgICAgICAgcGl4
ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGEpOworICAgICAgICAgICAgcGl4
ZWxCdWZmZXIuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKKyAgICAgICAgICAgIHBpeGVsQnVm
ZmVyLnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7CisgICAgICAgICAgICBwaXhlbEJ1
ZmZlci5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7CisgICAgICAgICAgICBwaXhlbEJ1
ZmZlci5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGEpOwogICAgICAgICB9CiAgICAgICAg
IGJyZWFrOwogCiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZz
ZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewotICAgICAgICAg
ICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7Ci0gICAgICAg
ICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsK
LSAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0
ICsgMik7Ci0gICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5
dGVPZmZzZXQgKyAzKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAw
OyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEJ5dGVMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0
KSB7CisgICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEJ1ZmZlci5pdGVtKHBpeGVsQnl0ZU9m
ZnNldCk7CisgICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQnVmZmVyLml0ZW0ocGl4ZWxC
eXRlT2Zmc2V0ICsgMSk7CisgICAgICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxCdWZmZXIuaXRl
bShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKKyAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxC
dWZmZXIuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKICAgICAgICAgICAgIGx1bWluYW5jZShy
ZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhl
bEJ5dGVPZmZzZXQsIHJlZCk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVP
ZmZzZXQgKyAxLCBncmVlbik7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVP
ZmZzZXQgKyAyLCBibHVlKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9m
ZnNldCArIDMsIGFscGhhKTsKKyAgICAgICAgICAgIHBpeGVsQnVmZmVyLnNldChwaXhlbEJ5dGVP
ZmZzZXQsIHJlZCk7CisgICAgICAgICAgICBwaXhlbEJ1ZmZlci5zZXQocGl4ZWxCeXRlT2Zmc2V0
ICsgMSwgZ3JlZW4pOworICAgICAgICAgICAgcGl4ZWxCdWZmZXIuc2V0KHBpeGVsQnl0ZU9mZnNl
dCArIDIsIGJsdWUpOworICAgICAgICAgICAgcGl4ZWxCdWZmZXIuc2V0KHBpeGVsQnl0ZU9mZnNl
dCArIDMsIGFscGhhKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
Q29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdh
cmVBcHBsaWVyLmNwcAppbmRleCA0ZjRiMzIwMTNlMWEuLjEyODcxNTFhOGU5MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNv
bXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0
d2FyZUFwcGxpZXIuY3BwCkBAIC00LDcgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBT
Y2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMS0yMDIyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTExNCwxNiArMTE0LDE1IEBAIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFw
cGxpZXI6Okxvb2t1cFRhYmxlIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpCiAKIHZv
aWQgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybShQaXhl
bEJ1ZmZlciYgcGl4ZWxCdWZmZXIpIGNvbnN0CiB7Ci0gICAgYXV0byYgcGl4ZWxBcnJheSA9IHBp
eGVsQnVmZmVyLmRhdGEoKTsKLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxB
cnJheS5sZW5ndGgoKTsKLSAgICB1aW50OF90KiBkYXRhID0gcGl4ZWxBcnJheS5kYXRhKCk7Cisg
ICAgYXV0byogZGF0YSA9IHBpeGVsQnVmZmVyLmJ5dGVzKCk7CisgICAgYXV0byBwaXhlbEJ5dGVM
ZW5ndGggPSBwaXhlbEJ1ZmZlci5ieXRlTGVuZ3RoKCk7CiAKICAgICBhdXRvIHJlZFRhYmxlICAg
PSBjb21wdXRlTG9va3VwVGFibGUobV9lZmZlY3QucmVkRnVuY3Rpb24oKSk7CiAgICAgYXV0byBn
cmVlblRhYmxlID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fZWZmZWN0LmdyZWVuRnVuY3Rpb24oKSk7
CiAgICAgYXV0byBibHVlVGFibGUgID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fZWZmZWN0LmJsdWVG
dW5jdGlvbigpKTsKICAgICBhdXRvIGFscGhhVGFibGUgPSBjb21wdXRlTG9va3VwVGFibGUobV9l
ZmZlY3QuYWxwaGFGdW5jdGlvbigpKTsKIAotICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQg
PSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsK
KyAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEJ5
dGVMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKICAgICAgICAgZGF0YVtwaXhlbE9mZnNldF0g
ICAgID0gcmVkVGFibGVbZGF0YVtwaXhlbE9mZnNldF1dOwogICAgICAgICBkYXRhW3BpeGVsT2Zm
c2V0ICsgMV0gPSBncmVlblRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAxXV07CiAgICAgICAgIGRh
dGFbcGl4ZWxPZmZzZXQgKyAyXSA9IGJsdWVUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgMl1dOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVy
LmNwcAppbmRleCAyOGExNmNlNzViYmMuLjNiYzMzMWE1YWE1YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNv
ZnR3YXJlQXBwbGllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5jcHAKQEAgLTQsNyAr
NCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4K
ICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTQwLDEzICsxNDAsMTMg
QEAgYm9vbCBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlBcml0aG1ldGljKEZpbHRl
ckltYWdlJiBpbnB1dCwgRmlsdGVySW1hZ2UKICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVj
dCA9IHJlc3VsdC5hYnNvbHV0ZUltYWdlUmVjdFJlbGF0aXZlVG8oaW5wdXQyKTsKICAgICBpbnB1
dDIuY29weVBpeGVsQnVmZmVyKCpkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBlZmZlY3RCRHJhd2lu
Z1JlY3QpOwogCi0gICAgYXV0byYgc291cmNlUGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQnVmZmVy
LT5kYXRhKCk7Ci0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGF1dG8qIHNvdXJjZVBpeGVsQnl0ZXMgPSBzb3VyY2VQ
aXhlbEJ1ZmZlci0+Ynl0ZXMoKTsKKyAgICBhdXRvKiBkZXN0aW5hdGlvblBpeGVsQnl0ZXMgPSBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5ieXRlcygpOwogCi0gICAgaW50IGxlbmd0aCA9IHNvdXJj
ZVBpeGVsQXJyYXkubGVuZ3RoKCk7Ci0gICAgQVNTRVJUKGxlbmd0aCA9PSBzdGF0aWNfY2FzdDxp
bnQ+KGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5sZW5ndGgoKSkpOworICAgIGF1dG8gbGVuZ3RoID0g
c291cmNlUGl4ZWxCdWZmZXItPmJ5dGVMZW5ndGgoKTsKKyAgICBBU1NFUlQobGVuZ3RoID09IGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXItPmJ5dGVMZW5ndGgoKSk7CiAjaWYgIUhBVkUoQVJNX05FT05f
SU5UUklOU0lDUykKLSAgICBhcHBseVBsYXRmb3JtQXJpdGhtZXRpYyhzb3VyY2VQaXhlbEFycmF5
LmRhdGEoKSwgZGVzdGluYXRpb25QaXhlbEFycmF5LmRhdGEoKSwgbGVuZ3RoLCBtX2VmZmVjdC5r
MSgpLCBtX2VmZmVjdC5rMigpLCBtX2VmZmVjdC5rMygpLCBtX2VmZmVjdC5rNCgpKTsKKyAgICBh
cHBseVBsYXRmb3JtQXJpdGhtZXRpYyhzb3VyY2VQaXhlbEJ5dGVzLCBkZXN0aW5hdGlvblBpeGVs
Qnl0ZXMsIGxlbmd0aCwgbV9lZmZlY3QuazEoKSwgbV9lZmZlY3QuazIoKSwgbV9lZmZlY3QuazMo
KSwgbV9lZmZlY3QuazQoKSk7CiAjZW5kaWYKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVD
b252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxp
ZXIuY3BwCmluZGV4IGU2MTQxMjA0ZDA1Yi4uNmJlMGIzMjFjZDA3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVN
YXRyaXhTb2Z0d2FyZUFwcGxpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5j
cHAKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8emhlcmN6
ZWdAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtOTksMTcgKzk5LDE3IEBA
IGlubGluZSB1aW50OF90IEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmNsYW1wUkdC
QVZhbHVlKGZsb2F0IGNoYW5uZWwsIHVpCiAgICAgcmV0dXJuIGNoYW5uZWw7CiB9CiAKLWlubGlu
ZSB2b2lkIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNldERlc3RpbmF0aW9uUGl4
ZWxzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2VQaXhlbHMsIFVpbnQ4Q2xhbXBlZEFy
cmF5JiBkZXN0UGl4ZWxzLCBpbnQmIHBpeGVsLCBmbG9hdCogdG90YWxzLCBmbG9hdCBkaXZpc29y
LCBmbG9hdCBiaWFzLCBib29sIHByZXNlcnZlQWxwaGFWYWx1ZXMpCitpbmxpbmUgdm9pZCBGRUNv
bnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzZXREZXN0aW5hdGlvblBpeGVscyhjb25zdCBQ
aXhlbEJ1ZmZlciYgc291cmNlUGl4ZWxCdWZmZXIsIFBpeGVsQnVmZmVyJiBkZXN0aW5hdGlvblBp
eGVsQnVmZmVyLCBpbnQmIHBpeGVsLCBmbG9hdCogdG90YWxzLCBmbG9hdCBkaXZpc29yLCBmbG9h
dCBiaWFzLCBib29sIHByZXNlcnZlQWxwaGFWYWx1ZXMpCiB7CiAgICAgdWludDhfdCBtYXhBbHBo
YSA9IHByZXNlcnZlQWxwaGFWYWx1ZXMgPyAyNTUgOiBjbGFtcFJHQkFWYWx1ZSh0b3RhbHNbM10g
LyBkaXZpc29yICsgYmlhcyk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpCi0gICAg
ICAgIGRlc3RQaXhlbHMuc2V0KHBpeGVsKyssIGNsYW1wUkdCQVZhbHVlKHRvdGFsc1tpXSAvIGRp
dmlzb3IgKyBiaWFzLCBtYXhBbHBoYSkpOworICAgICAgICBkZXN0aW5hdGlvblBpeGVsQnVmZmVy
LnNldChwaXhlbCsrLCBjbGFtcFJHQkFWYWx1ZSh0b3RhbHNbaV0gLyBkaXZpc29yICsgYmlhcywg
bWF4QWxwaGEpKTsKIAogICAgIGlmIChwcmVzZXJ2ZUFscGhhVmFsdWVzKSB7Ci0gICAgICAgIGRl
c3RQaXhlbHMuc2V0KHBpeGVsLCBzb3VyY2VQaXhlbHMuaXRlbShwaXhlbCkpOworICAgICAgICBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyLnNldChwaXhlbCwgc291cmNlUGl4ZWxCdWZmZXIuaXRlbShw
aXhlbCkpOwogICAgICAgICArK3BpeGVsOwogICAgIH0gZWxzZQotICAgICAgICBkZXN0UGl4ZWxz
LnNldChwaXhlbCsrLCBtYXhBbHBoYSk7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIu
c2V0KHBpeGVsKyssIG1heEFscGhhKTsKIH0KIAogaW5saW5lIGludCBGRUNvbnZvbHZlTWF0cml4
U29mdHdhcmVBcHBsaWVyOjpnZXRQaXhlbFZhbHVlKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLCBpbnQgeCwgaW50IHkpCkBAIC0xNzAsMTEgKzE3MCwxMSBAQCBpbmxpbmUgdm9pZCBG
RUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzZXRJbnRlcmlvclBpeGVscyhQYWludGlu
Z0RhdGEmIHBhaQogICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKIAogICAgICAgICAgICAgd2hp
bGUgKGtlcm5lbFZhbHVlID49IDApIHsKLSAgICAgICAgICAgICAgICB0b3RhbHNbMF0gKz0gcGFp
bnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4o
cGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7Ci0gICAgICAg
ICAgICAgICAgdG90YWxzWzFdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFs
dWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0o
a2VybmVsUGl4ZWwrKykpOwotICAgICAgICAgICAgICAgIHRvdGFsc1syXSArPSBwYWludGluZ0Rh
dGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGlu
Z0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKyspKTsKKyAgICAgICAgICAgICAg
ICB0b3RhbHNbMF0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBz
dGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNvdXJjZVBpeGVsQnVmZmVyLml0ZW0oa2Vy
bmVsUGl4ZWwrKykpOworICAgICAgICAgICAgICAgIHRvdGFsc1sxXSArPSBwYWludGluZ0RhdGEu
a2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0Rh
dGEuc291cmNlUGl4ZWxCdWZmZXIuaXRlbShrZXJuZWxQaXhlbCsrKSk7CisgICAgICAgICAgICAg
ICAgdG90YWxzWzJdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICog
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zb3VyY2VQaXhlbEJ1ZmZlci5pdGVtKGtl
cm5lbFBpeGVsKyspKTsKICAgICAgICAgICAgICAgICBpZiAoIXBhaW50aW5nRGF0YS5wcmVzZXJ2
ZUFscGhhKQotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRhLmtl
cm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRh
LnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCkpOworICAgICAgICAgICAgICAgICAgICB0
b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0
aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNvdXJjZVBpeGVsQnVmZmVyLml0ZW0oa2VybmVs
UGl4ZWwpKTsKICAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsOwogICAgICAgICAgICAgICAg
IC0ta2VybmVsVmFsdWU7CiAgICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7CkBAIC0xODMs
NyArMTgzLDcgQEAgaW5saW5lIHZvaWQgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6
c2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWkKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzKHBhaW50aW5n
RGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRv
dGFscywgcGFpbnRpbmdEYXRhLmRpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzLCBwYWludGluZ0Rh
dGEucHJlc2VydmVBbHBoYSk7CisgICAgICAgICAgICBzZXREZXN0aW5hdGlvblBpeGVscyhwYWlu
dGluZ0RhdGEuc291cmNlUGl4ZWxCdWZmZXIsIHBhaW50aW5nRGF0YS5kZXN0aW5hdGlvblBpeGVs
QnVmZmVyLCBwaXhlbCwgdG90YWxzLCBwYWludGluZ0RhdGEuZGl2aXNvciwgcGFpbnRpbmdEYXRh
LmJpYXMsIHBhaW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhhKTsKICAgICAgICAgICAgIHN0YXJ0S2Vy
bmVsUGl4ZWwgKz0gNDsKICAgICAgICAgfQogICAgICAgICBwaXhlbCArPSB4SW5jcmVhc2U7CkBA
IC0yMjIsMTIgKzIyMiwxMiBAQCBpbmxpbmUgdm9pZCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVB
cHBsaWVyOjpzZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aQogICAgICAgICAgICAg
d2hpbGUgKGtlcm5lbFZhbHVlID49IDApIHsKICAgICAgICAgICAgICAgICBpbnQgcGl4ZWxJbmRl
eCA9IGdldFBpeGVsVmFsdWUocGFpbnRpbmdEYXRhLCBrZXJuZWxQaXhlbFgsIGtlcm5lbFBpeGVs
WSk7CiAgICAgICAgICAgICAgICAgaWYgKHBpeGVsSW5kZXggPj0gMCkgewotICAgICAgICAgICAg
ICAgICAgICB0b3RhbHNbMF0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1
ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShw
aXhlbEluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgIHRvdGFsc1sxXSArPSBwYWludGluZ0Rh
dGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGlu
Z0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXggKyAxKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHRvdGFsc1syXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVl
XSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBp
eGVsSW5kZXggKyAyKSk7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsc1swXSArPSBwYWludGlu
Z0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWlu
dGluZ0RhdGEuc291cmNlUGl4ZWxCdWZmZXIuaXRlbShwaXhlbEluZGV4KSk7CisgICAgICAgICAg
ICAgICAgICAgIHRvdGFsc1sxXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZh
bHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc291cmNlUGl4ZWxCdWZmZXIu
aXRlbShwaXhlbEluZGV4ICsgMSkpOworICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMl0gKz0g
cGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9h
dD4ocGFpbnRpbmdEYXRhLnNvdXJjZVBpeGVsQnVmZmVyLml0ZW0ocGl4ZWxJbmRleCArIDIpKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFwYWludGluZ0RhdGEucHJl
c2VydmVBbHBoYSAmJiBwaXhlbEluZGV4ID49IDApCi0gICAgICAgICAgICAgICAgICAgIHRvdGFs
c1szXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19j
YXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXggKyAz
KSk7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsc1szXSArPSBwYWludGluZ0RhdGEua2VybmVs
TWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc291
cmNlUGl4ZWxCdWZmZXIuaXRlbShwaXhlbEluZGV4ICsgMykpOwogICAgICAgICAgICAgICAgICsr
a2VybmVsUGl4ZWxYOwogICAgICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7CiAgICAgICAgICAg
ICAgICAgaWYgKCEtLXdpZHRoKSB7CkBAIC0yMzcsNyArMjM3LDcgQEAgaW5saW5lIHZvaWQgRkVD
b252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6c2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRh
JiBwYWludGkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IHNldERlc3RpbmF0aW9uUGl4ZWxzKHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGlu
Z0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgcGFpbnRpbmdEYXRhLmRpdmlzb3Is
IHBhaW50aW5nRGF0YS5iaWFzLCBwYWludGluZ0RhdGEucHJlc2VydmVBbHBoYSk7CisgICAgICAg
ICAgICBzZXREZXN0aW5hdGlvblBpeGVscyhwYWludGluZ0RhdGEuc291cmNlUGl4ZWxCdWZmZXIs
IHBhaW50aW5nRGF0YS5kZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBwaXhlbCwgdG90YWxzLCBwYWlu
dGluZ0RhdGEuZGl2aXNvciwgcGFpbnRpbmdEYXRhLmJpYXMsIHBhaW50aW5nRGF0YS5wcmVzZXJ2
ZUFscGhhKTsKICAgICAgICAgICAgICsrc3RhcnRLZXJuZWxQaXhlbFg7CiAgICAgICAgIH0KICAg
ICAgICAgcGl4ZWwgKz0geEluY3JlYXNlOwpAQCAtMzAwLDE0ICszMDAsMTEgQEAgYm9vbCBGRUNv
bnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBG
aWx0ZXJJbWFnZVZlY3QKICAgICBpZiAoIXNvdXJjZVBpeGVsQnVmZmVyKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBzb3VyY2VQaXhlbEFycmF5ID0gc291cmNlUGl4ZWxCdWZm
ZXItPmRhdGEoKTsKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgCiAgICAgYXV0byBwYWludFNpemUgPSByZXN1bHQu
YWJzb2x1dGVJbWFnZVJlY3QoKS5zaXplKCk7CiAKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdE
YXRhID0gewotICAgICAgICBzb3VyY2VQaXhlbEFycmF5LAotICAgICAgICBkZXN0aW5hdGlvblBp
eGVsQXJyYXksCisgICAgICAgICpzb3VyY2VQaXhlbEJ1ZmZlciwKKyAgICAgICAgKmRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIsCiAgICAgICAgIHBhaW50U2l6ZS53aWR0aCgpLAogICAgICAgICBwYWlu
dFNpemUuaGVpZ2h0KCksCiAgICAgICAgIG1fZWZmZWN0Lmtlcm5lbFNpemUoKSwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVD
b252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVy
LmgKaW5kZXggNTNhMThhNjI5NDk2Li44OGMzNTJmODQ3M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJp
eFNvZnR3YXJlQXBwbGllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5oCkBAIC00
NSw4ICs0NSw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBGaWx0ZXJJbWFnZSYgcmVzdWx0KSBjb25zdCBm
aW5hbDsKIAogICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewotICAgICAgICBjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheTsKLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkmIGRz
dFBpeGVsQXJyYXk7CisgICAgICAgIGNvbnN0IFBpeGVsQnVmZmVyJiBzb3VyY2VQaXhlbEJ1ZmZl
cjsKKyAgICAgICAgUGl4ZWxCdWZmZXImIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXI7CiAgICAgICAg
IGludCB3aWR0aDsKICAgICAgICAgaW50IGhlaWdodDsKIApAQCAtNjAsNyArNjAsNyBAQCBwcml2
YXRlOgogICAgIH07CiAKICAgICBzdGF0aWMgaW5saW5lIHVpbnQ4X3QgY2xhbXBSR0JBVmFsdWUo
ZmxvYXQgY2hhbm5lbCwgdWludDhfdCBtYXggPSAyNTUpOwotICAgIHN0YXRpYyBpbmxpbmUgdm9p
ZCBzZXREZXN0aW5hdGlvblBpeGVscyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlUGl4
ZWxzLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdFBpeGVscywgaW50JiBwaXhlbCwgZmxvYXQqIHRv
dGFscywgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgYm9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVz
KTsKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgc2V0RGVzdGluYXRpb25QaXhlbHMoY29uc3QgUGl4
ZWxCdWZmZXImIHNvdXJjZVBpeGVsQnVmZmVyLCBQaXhlbEJ1ZmZlciYgZGVzdGluYXRpb25QaXhl
bEJ1ZmZlciwgaW50JiBwaXhlbCwgZmxvYXQqIHRvdGFscywgZmxvYXQgZGl2aXNvciwgZmxvYXQg
YmlhcywgYm9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzKTsKIAogICAgIHN0YXRpYyBpbmxpbmUgaW50
IGdldFBpeGVsVmFsdWUoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5KTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdh
cmVBcHBsaWVyLmNwcAppbmRleCAxMjE2NGUzNzhjMjkuLmY3ZmM0NWI3NzAyZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURp
c3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURpc3BsYWNlbWVudE1hcFNvZnR3YXJl
QXBwbGllci5jcHAKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIx
LTIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtNTgsOCArNTgsNiBAQCBib29sIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVy
OjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySQogICAgIGlmICghZGVz
dGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byYg
ZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwot
CiAgICAgYXV0byBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXN1bHQuYWJzb2x1dGVJbWFnZVJlY3RS
ZWxhdGl2ZVRvKGlucHV0KTsKICAgICBhdXRvIGlucHV0UGl4ZWxCdWZmZXIgPSBpbnB1dC5nZXRQ
aXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBlZmZlY3RB
RHJhd2luZ1JlY3QpOwogCkBAIC03MCw5ICs2OCw3IEBAIGJvb2wgRkVEaXNwbGFjZW1lbnRNYXBT
b2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJ
CiAgICAgaWYgKCFpbnB1dFBpeGVsQnVmZmVyIHx8ICFkaXNwbGFjZW1lbnRQaXhlbEJ1ZmZlcikK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byYgaW5wdXRQaXhlbEFycmF5ID0gaW5w
dXRQaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIGF1dG8mIGRpc3BsYWNlbWVudFBpeGVsQXJyYXkg
PSBkaXNwbGFjZW1lbnRQaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIEFTU0VSVChpbnB1dFBpeGVs
QXJyYXkubGVuZ3RoKCkgPT0gZGlzcGxhY2VtZW50UGl4ZWxBcnJheS5sZW5ndGgoKSk7CisgICAg
QVNTRVJUKGlucHV0UGl4ZWxCdWZmZXItPmJ5dGVMZW5ndGgoKSA9PSBkaXNwbGFjZW1lbnRQaXhl
bEJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKIAogICAgIGF1dG8gcGFpbnRTaXplID0gcmVzdWx0LmFi
c29sdXRlSW1hZ2VSZWN0KCkuc2l6ZSgpOwogICAgIGF1dG8gc2NhbGUgPSBmaWx0ZXIucmVzb2x2
ZWRTaXplKHsgbV9lZmZlY3Quc2NhbGUoKSwgbV9lZmZlY3Quc2NhbGUoKSB9KTsKQEAgLTk0LDE2
ICs5MCwxNiBAQCBib29sIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjphcHBseShj
b25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySQogICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHBhaW50U2l6ZS53aWR0aCgpOyArK3gpIHsKICAgICAgICAgICAgIGludCBkZXN0aW5h
dGlvbkluZGV4ID0gbGluZVN0YXJ0T2Zmc2V0ICsgeCAqIDQ7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGludCBzcmNYID0geCArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclggKiBk
aXNwbGFjZW1lbnRQaXhlbEFycmF5Lml0ZW0oZGVzdGluYXRpb25JbmRleCArIGRpc3BsYWNlbWVu
dENoYW5uZWxYKSArIHNjYWxlZE9mZnNldFgpOwotICAgICAgICAgICAgaW50IHNyY1kgPSB5ICsg
c3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWSAqIGRpc3BsYWNlbWVudFBpeGVsQXJyYXku
aXRlbShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFkpICsgc2NhbGVkT2Zm
c2V0WSk7CisgICAgICAgICAgICBpbnQgc3JjWCA9IHggKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxl
Rm9yQ29sb3JYICogZGlzcGxhY2VtZW50UGl4ZWxCdWZmZXItPml0ZW0oZGVzdGluYXRpb25JbmRl
eCArIGRpc3BsYWNlbWVudENoYW5uZWxYKSArIHNjYWxlZE9mZnNldFgpOworICAgICAgICAgICAg
aW50IHNyY1kgPSB5ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWSAqIGRpc3BsYWNl
bWVudFBpeGVsQnVmZmVyLT5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFjZW1lbnRDaGFu
bmVsWSkgKyBzY2FsZWRPZmZzZXRZKTsKIAotICAgICAgICAgICAgdW5zaWduZWQqIGRlc3RpbmF0
aW9uUGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZGVzdGluYXRpb25QaXhl
bEFycmF5LmRhdGEoKSArIGRlc3RpbmF0aW9uSW5kZXgpOworICAgICAgICAgICAgdW5zaWduZWQq
IGRlc3RpbmF0aW9uUGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlci0+Ynl0ZXMoKSArIGRlc3RpbmF0aW9uSW5kZXgpOwogICAgICAgICAg
ICAgaWYgKHNyY1ggPCAwIHx8IHNyY1ggPj0gcGFpbnRTaXplLndpZHRoKCkgfHwgc3JjWSA8IDAg
fHwgc3JjWSA+PSBwYWludFNpemUuaGVpZ2h0KCkpIHsKICAgICAgICAgICAgICAgICAqZGVzdGlu
YXRpb25QaXhlbFB0ciA9IDA7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICpkZXN0aW5hdGlvblBpeGVsUHRyID0gKnJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQqPihpbnB1dFBpeGVsQXJyYXkuZGF0YSgpICsgYnl0ZU9mZnNldE9mUGl4ZWwo
c3JjWCwgc3JjWSwgcm93Qnl0ZXMpKTsKKyAgICAgICAgICAgICpkZXN0aW5hdGlvblBpeGVsUHRy
ID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihpbnB1dFBpeGVsQnVmZmVyLT5ieXRlcygp
ICsgYnl0ZU9mZnNldE9mUGl4ZWwoc3JjWCwgc3JjWSwgcm93Qnl0ZXMpKTsKICAgICAgICAgfQog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0
d2FyZUFwcGxpZXIuY3BwCmluZGV4IDQ0N2M4OTVkMTk4NC4uNmRiMDNjNDQzOWQ5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
RHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXIu
Y3BwCkBAIC02NSw5ICs2NSw4IEBAIGJvb2wgRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyOjph
cHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VWCiAgICAgaWYgKCFw
aXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byYgc291cmNlUGl4
ZWxBcnJheSA9IHBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgY29udGV4dFNoYWRvdy5ibHVyTGF5
ZXJJbWFnZShzb3VyY2VQaXhlbEFycmF5LmRhdGEoKSwgcGl4ZWxCdWZmZXItPnNpemUoKSwgNCAq
IHBpeGVsQnVmZmVyLT5zaXplKCkud2lkdGgoKSk7Ci0gICAgCisgICAgY29udGV4dFNoYWRvdy5i
bHVyTGF5ZXJJbWFnZShwaXhlbEJ1ZmZlci0+Ynl0ZXMoKSwgcGl4ZWxCdWZmZXItPnNpemUoKSwg
NCAqIHBpeGVsQnVmZmVyLT5zaXplKCkud2lkdGgoKSk7CisKICAgICByZXN1bHRJbWFnZS0+cHV0
UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBzaGFkb3dBcmVhKTsKIAogICAgIHJlc3VsdENvbnRl
eHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFw
cGxpZXIuY3BwCmluZGV4IGE4NmE5ZmQwYWVhNS4uMzc2MzdhY2ViOGYwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFR2F1c3Np
YW5CbHVyU29mdHdhcmVBcHBsaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmNw
cApAQCAtNSw3ICs1LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGty
aXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KICAqIENv
cHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMiBBcHBsZSwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC03MywxMCArNzMsMTAgQEAg
aW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6Omtlcm5lbFBvc2l0aW9u
KGludCBibHVySXRlcmF0aW9uLCB1bnMKIH0KIAogLy8gVGhpcyBmdW5jdGlvbiBvbmx5IG9wZXJh
dGVzIG9uIEFscGhhIGNoYW5uZWwuCi1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJl
QXBwbGllcjo6Ym94Qmx1ckFscGhhT25seShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4
ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksIHVuc2lnbmVkIGR4LCBp
bnQmIGR4TGVmdCwgaW50JiBkeFJpZ2h0LCBpbnQmIHN0cmlkZSwgaW50JiBzdHJpZGVMaW5lLCBp
bnQmIGVmZmVjdFdpZHRoLCBpbnQmIGVmZmVjdEhlaWdodCwgY29uc3QgaW50JiBtYXhLZXJuZWxT
aXplKQoraW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJB
bHBoYU9ubHkoY29uc3QgUGl4ZWxCdWZmZXImIHNyY1BpeGVsQnVmZmVyLCBQaXhlbEJ1ZmZlciYg
ZHN0UGl4ZWxCdWZmZXIsIHVuc2lnbmVkIGR4LCBpbnQmIGR4TGVmdCwgaW50JiBkeFJpZ2h0LCBp
bnQmIHN0cmlkZSwgaW50JiBzdHJpZGVMaW5lLCBpbnQmIGVmZmVjdFdpZHRoLCBpbnQmIGVmZmVj
dEhlaWdodCwgY29uc3QgaW50JiBtYXhLZXJuZWxTaXplKQogewotICAgIGNvbnN0IHVpbnQ4X3Qq
IHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5LmRhdGEoKTsKLSAgICB1aW50OF90KiBkc3REYXRhID0g
ZHN0UGl4ZWxBcnJheS5kYXRhKCk7CisgICAgY29uc3QgdWludDhfdCogc3JjRGF0YSA9IHNyY1Bp
eGVsQnVmZmVyLmJ5dGVzKCk7CisgICAgdWludDhfdCogZHN0RGF0YSA9IGRzdFBpeGVsQnVmZmVy
LmJ5dGVzKCk7CiAgICAgLy8gTWVtb3J5IGFsaWdubWVudCBpczogUkdCQSwgemVyby1pbmRleCBi
YXNlZC4KICAgICBjb25zdCBpbnQgY2hhbm5lbCA9IDM7CiAKQEAgLTExMywxNCArMTEzLDE0IEBA
IGlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyQWxwaGFP
bmx5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFyCiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBGRUdhdXNz
aWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1cihjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksIHVuc2lnbmVk
IGR4LCBpbnQgZHhMZWZ0LCBpbnQgZHhSaWdodCwgaW50IHN0cmlkZSwgaW50IHN0cmlkZUxpbmUs
IGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCwgYm9vbCBhbHBoYUltYWdlLCBFZGdl
TW9kZVR5cGUgZWRnZU1vZGUpCitpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBw
bGllcjo6Ym94Qmx1cihjb25zdCBQaXhlbEJ1ZmZlciYgc3JjUGl4ZWxCdWZmZXIsIFBpeGVsQnVm
ZmVyJiBkc3RQaXhlbEJ1ZmZlciwgdW5zaWduZWQgZHgsIGludCBkeExlZnQsIGludCBkeFJpZ2h0
LCBpbnQgc3RyaWRlLCBpbnQgc3RyaWRlTGluZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0
SGVpZ2h0LCBib29sIGFscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKIHsKICAgICBj
b25zdCBpbnQgbWF4S2VybmVsU2l6ZSA9IHN0ZDo6bWluKGR4UmlnaHQsIGVmZmVjdFdpZHRoKTsK
ICAgICBpZiAoYWxwaGFJbWFnZSkKLSAgICAgICAgcmV0dXJuIGJveEJsdXJBbHBoYU9ubHkoc3Jj
UGl4ZWxBcnJheSwgZHN0UGl4ZWxBcnJheSwgZHgsIGR4TGVmdCwgZHhSaWdodCwgc3RyaWRlLCBz
dHJpZGVMaW5lLCAgZWZmZWN0V2lkdGgsIGVmZmVjdEhlaWdodCwgbWF4S2VybmVsU2l6ZSk7Cisg
ICAgICAgIHJldHVybiBib3hCbHVyQWxwaGFPbmx5KHNyY1BpeGVsQnVmZmVyLCBkc3RQaXhlbEJ1
ZmZlciwgZHgsIGR4TGVmdCwgZHhSaWdodCwgc3RyaWRlLCBzdHJpZGVMaW5lLCAgZWZmZWN0V2lk
dGgsIGVmZmVjdEhlaWdodCwgbWF4S2VybmVsU2l6ZSk7CiAKLSAgICBjb25zdCB1aW50OF90KiBz
cmNEYXRhID0gc3JjUGl4ZWxBcnJheS5kYXRhKCk7Ci0gICAgdWludDhfdCogZHN0RGF0YSA9IGRz
dFBpeGVsQXJyYXkuZGF0YSgpOworICAgIGNvbnN0IHVpbnQ4X3QqIHNyY0RhdGEgPSBzcmNQaXhl
bEJ1ZmZlci5ieXRlcygpOworICAgIHVpbnQ4X3QqIGRzdERhdGEgPSBkc3RQaXhlbEJ1ZmZlci5i
eXRlcygpOwogCiAgICAgLy8gQ29uY2VybmluZyB0aGUgYXJyYXkgd2lkdGgvbGVuZ3RoOiBpdCBp
cyBFbGVtZW50IHNpemUgKyBNYXJnaW4gKyBCb3JkZXIuIFRoZSBudW1iZXIgb2YgcGl4ZWxzIHdp
bGwgYmUKICAgICAvLyBQID0gd2lkdGggKiBoZWlnaHQgKiBjaGFubmVscy4KQEAgLTI0Myw5ICsy
NDMsOSBAQCBpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1
cihjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUAogfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEUp
Ci1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1ckFjY2Vs
ZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRl
bXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemUsIGludCBzdHJpZGUsIGludCBlZmZlY3RXaWR0
aCwgaW50IGVmZmVjdEhlaWdodCkKK2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVB
cHBsaWVyOjpib3hCbHVyQWNjZWxlcmF0ZWQoUGl4ZWxCdWZmZXImIGlvQnVmZmVyLCBQaXhlbEJ1
ZmZlciYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZSwgaW50IHN0cmlkZSwgaW50IGVm
ZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0KQogewotICAgIGlmICghaW9CdWZmZXIuZGF0YSgp
IHx8ICF0ZW1wQnVmZmVyLmRhdGEoKSkgeworICAgIGlmICghaW9CdWZmZXIuYnl0ZXMoKSB8fCAh
dGVtcEJ1ZmZlci5ieXRlcygpKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtMjYwLDEzICsyNjAsMTMgQEAgaW5saW5lIHZvaWQgRkVH
YXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJBY2NlbGVyYXRlZChVaW50OENsYW1w
ZWRBcnJheSYKICAgICAgICAga2VybmVsU2l6ZSArPSAxOwogCiAgICAgdkltYWdlX0J1ZmZlciBl
ZmZlY3RJbkJ1ZmZlcjsKLSAgICBlZmZlY3RJbkJ1ZmZlci5kYXRhID0gc3RhdGljX2Nhc3Q8dm9p
ZCo+KGlvQnVmZmVyLmRhdGEoKSk7CisgICAgZWZmZWN0SW5CdWZmZXIuZGF0YSA9IGlvQnVmZmVy
LmJ5dGVzKCk7CiAgICAgZWZmZWN0SW5CdWZmZXIud2lkdGggPSBlZmZlY3RXaWR0aDsKICAgICBl
ZmZlY3RJbkJ1ZmZlci5oZWlnaHQgPSBlZmZlY3RIZWlnaHQ7CiAgICAgZWZmZWN0SW5CdWZmZXIu
cm93Qnl0ZXMgPSBzdHJpZGU7CiAKICAgICB2SW1hZ2VfQnVmZmVyIGVmZmVjdE91dEJ1ZmZlcjsK
LSAgICBlZmZlY3RPdXRCdWZmZXIuZGF0YSA9IHRlbXBCdWZmZXIuZGF0YSgpOworICAgIGVmZmVj
dE91dEJ1ZmZlci5kYXRhID0gdGVtcEJ1ZmZlci5ieXRlcygpOwogICAgIGVmZmVjdE91dEJ1ZmZl
ci53aWR0aCA9IGVmZmVjdFdpZHRoOwogICAgIGVmZmVjdE91dEJ1ZmZlci5oZWlnaHQgPSBlZmZl
Y3RIZWlnaHQ7CiAgICAgZWZmZWN0T3V0QnVmZmVyLnJvd0J5dGVzID0gc3RyaWRlOwpAQCAtMjg0
LDIwICsyODQsMjAgQEAgaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6
OmJveEJsdXJBY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYKICAgICBmYXN0RnJlZSh0bXBC
dWZmZXIpOwogCiAgICAgLy8gVGhlIGZpbmFsIHJlc3VsdCBzaG91bGQgYmUgc3RvcmVkIGluIGlv
QnVmZmVyLgotICAgIEFTU0VSVChpb0J1ZmZlci5sZW5ndGgoKSA9PSB0ZW1wQnVmZmVyLmxlbmd0
aCgpKTsKLSAgICBtZW1jcHkoaW9CdWZmZXIuZGF0YSgpLCB0ZW1wQnVmZmVyLmRhdGEoKSwgaW9C
dWZmZXIubGVuZ3RoKCkpOworICAgIEFTU0VSVChpb0J1ZmZlci5ieXRlTGVuZ3RoKCkgPT0gdGVt
cEJ1ZmZlci5ieXRlTGVuZ3RoKCkpOworICAgIG1lbWNweShpb0J1ZmZlci5ieXRlcygpLCB0ZW1w
QnVmZmVyLmJ5dGVzKCksIGlvQnVmZmVyLmJ5dGVMZW5ndGgoKSk7CiB9CiAjZW5kaWYKIAotaW5s
aW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJVbmFjY2VsZXJh
dGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBC
dWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgaW50IHN0
cmlkZSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBl
IGVkZ2VNb2RlKQoraW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJv
eEJsdXJVbmFjY2VsZXJhdGVkKFBpeGVsQnVmZmVyJiBpb0J1ZmZlciwgUGl4ZWxCdWZmZXImIHRl
bXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgaW50
IHN0cmlkZSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVU
eXBlIGVkZ2VNb2RlKQogewogICAgIGludCBkeExlZnQgPSAwOwogICAgIGludCBkeFJpZ2h0ID0g
MDsKICAgICBpbnQgZHlMZWZ0ID0gMDsKICAgICBpbnQgZHlSaWdodCA9IDA7CiAgICAgCi0gICAg
VWludDhDbGFtcGVkQXJyYXkqIGZyb21CdWZmZXIgPSAmaW9CdWZmZXI7Ci0gICAgVWludDhDbGFt
cGVkQXJyYXkqIHRvQnVmZmVyID0gJnRlbXBCdWZmZXI7CisgICAgYXV0byogZnJvbUJ1ZmZlciA9
ICZpb0J1ZmZlcjsKKyAgICBhdXRvKiB0b0J1ZmZlciA9ICZ0ZW1wQnVmZmVyOwogCiAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKICAgICAgICAgaWYgKGtlcm5lbFNpemVYKSB7CkBA
IC0zMjksMzQgKzMyOSwzNCBAQCBpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBw
bGllcjo6Ym94Qmx1clVuYWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYQogCiAgICAgLy8gVGhl
IGZpbmFsIHJlc3VsdCBzaG91bGQgYmUgc3RvcmVkIGluIGlvQnVmZmVyLgogICAgIGlmICgmaW9C
dWZmZXIgIT0gZnJvbUJ1ZmZlcikgewotICAgICAgICBBU1NFUlQoaW9CdWZmZXIubGVuZ3RoKCkg
PT0gZnJvbUJ1ZmZlci0+bGVuZ3RoKCkpOwotICAgICAgICBtZW1jcHkoaW9CdWZmZXIuZGF0YSgp
LCBmcm9tQnVmZmVyLT5kYXRhKCksIGlvQnVmZmVyLmxlbmd0aCgpKTsKKyAgICAgICAgQVNTRVJU
KGlvQnVmZmVyLmJ5dGVMZW5ndGgoKSA9PSBmcm9tQnVmZmVyLT5ieXRlTGVuZ3RoKCkpOworICAg
ICAgICBtZW1jcHkoaW9CdWZmZXIuYnl0ZXMoKSwgZnJvbUJ1ZmZlci0+Ynl0ZXMoKSwgaW9CdWZm
ZXIuYnl0ZUxlbmd0aCgpKTsKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVy
U29mdHdhcmVBcHBsaWVyOjpib3hCbHVyR2VuZXJpYyhVaW50OENsYW1wZWRBcnJheSYgaW9CdWZm
ZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25lZCBrZXJuZWxTaXpl
WCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhh
SW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKK2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVy
U29mdHdhcmVBcHBsaWVyOjpib3hCbHVyR2VuZXJpYyhQaXhlbEJ1ZmZlciYgaW9CdWZmZXIsIFBp
eGVsQnVmZmVyJiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2Vy
bmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2Rl
VHlwZSBlZGdlTW9kZSkKIHsKICAgICBpbnQgc3RyaWRlID0gNCAqIHBhaW50U2l6ZS53aWR0aCgp
OwogCiAjaWYgVVNFKEFDQ0VMRVJBVEUpCiAgICAgaWYgKGtlcm5lbFNpemVYID09IGtlcm5lbFNp
emVZICYmIChlZGdlTW9kZSA9PSBFZGdlTW9kZVR5cGU6Ok5vbmUgfHwgZWRnZU1vZGUgPT0gRWRn
ZU1vZGVUeXBlOjpEdXBsaWNhdGUpKSB7Ci0gICAgICAgIGJveEJsdXJBY2NlbGVyYXRlZChpb0J1
ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRo
KCksIHBhaW50U2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGJveEJsdXJBY2NlbGVyYXRlZChpb0J1
ZmZlciwgdGVtcEJ1ZmZlciwga2VybmVsU2l6ZVgsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCks
IHBhaW50U2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKIAot
ICAgIGJveEJsdXJVbmFjY2VsZXJhdGVkKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJuZWxT
aXplWCwga2VybmVsU2l6ZVksIHN0cmlkZSwgcGFpbnRTaXplLCBpc0FscGhhSW1hZ2UsIGVkZ2VN
b2RlKTsKKyAgICBib3hCbHVyVW5hY2NlbGVyYXRlZChpb0J1ZmZlciwgdGVtcEJ1ZmZlciwga2Vy
bmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBzdHJpZGUsIHBhaW50U2l6ZSwgaXNBbHBoYUltYWdlLCBl
ZGdlTW9kZSk7CiB9CiAKICNpZiAhVVNFKEFDQ0VMRVJBVEUpCiBpbmxpbmUgdm9pZCBGRUdhdXNz
aWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1cldvcmtlcihBcHBseVBhcmFtZXRlcnMqIHBh
cmFtZXRlcnMpCiB7CiAgICAgSW50U2l6ZSBwYWludFNpemUocGFyYW1ldGVycy0+d2lkdGgsIHBh
cmFtZXRlcnMtPmhlaWdodCk7Ci0gICAgYm94Qmx1ckdlbmVyaWMoKnBhcmFtZXRlcnMtPmlvUGl4
ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnRtcFBpeGVsQXJyYXksIHBhcmFtZXRlcnMtPmtlcm5lbFNp
emVYLCBwYXJhbWV0ZXJzLT5rZXJuZWxTaXplWSwgcGFpbnRTaXplLCBwYXJhbWV0ZXJzLT5pc0Fs
cGhhSW1hZ2UsIHBhcmFtZXRlcnMtPmVkZ2VNb2RlKTsKKyAgICBib3hCbHVyR2VuZXJpYygqcGFy
YW1ldGVycy0+aW9CdWZmZXIsICpwYXJhbWV0ZXJzLT50ZW1wQnVmZmVyLCBwYXJhbWV0ZXJzLT5r
ZXJuZWxTaXplWCwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVksIHBhaW50U2l6ZSwgcGFyYW1ldGVy
cy0+aXNBbHBoYUltYWdlLCBwYXJhbWV0ZXJzLT5lZGdlTW9kZSk7CiB9CiAjZW5kaWYKIAotaW5s
aW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0oVWlu
dDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJh
eSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBw
YWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCitpbmxp
bmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybShQaXhl
bEJ1ZmZlciYgaW9CdWZmZXIsIFBpeGVsQnVmZmVyJiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJu
ZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBp
c0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKIHsKICNpZiAhVVNFKEFDQ0VMRVJB
VEUpCiAgICAgaW50IHNjYW5saW5lID0gNCAqIHBhaW50U2l6ZS53aWR0aCgpOwpAQCAtMzgzLDE1
ICszODMsMTEgQEAgaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmFw
cGx5UGxhdGZvcm0oVWludDhDbGFtcGVkQXJyYXkmIGlvQnUKICAgICAgICAgICAgICAgICBjdXJy
ZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gYmxvY2tIZWlnaHQgKyAxIDogYmxvY2tIZWln
aHQ7CiAgICAgICAgICAgICAgICAgaW50IGVuZFkgPSBqb2IgPT0gam9icyAtIDEgPyBjdXJyZW50
WSA6IGN1cnJlbnRZICsgZXh0cmFIZWlnaHQ7CiAKLSAgICAgICAgICAgICAgICBpbnQgYmxvY2tT
aXplID0gKGVuZFkgLSBzdGFydFkpICogc2NhbmxpbmU7Ci0gICAgICAgICAgICAgICAgaWYgKCFq
b2IpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmlvUGl4ZWxBcnJheSA9ICZpb0J1ZmZl
cjsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRtcFBpeGVsQXJyYXkgPSAmdG1wUGl4ZWxB
cnJheTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBwYXJh
bXMuaW9QaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
YmxvY2tTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRtcFBpeGVsQXJyYXkgPSBV
aW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChibG9ja1NpemUpOwotICAgICAg
ICAgICAgICAgICAgICBtZW1jcHkocGFyYW1zLmlvUGl4ZWxBcnJheS0+ZGF0YSgpLCBpb0J1ZmZl
ci5kYXRhKCkgKyBzdGFydFkgKiBzY2FubGluZSwgYmxvY2tTaXplKTsKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgSW50U2l6ZSBibG9ja1NpemUgPSB7IGVuZFkgLSBzdGFydFks
IHBhaW50U2l6ZS53aWR0aCgpIH07CisKKyAgICAgICAgICAgICAgICBwYXJhbXMuaW9CdWZmZXIg
PSBpb0J1ZmZlci5jcmVhdGVTY3JhdGNoUGl4ZWxCdWZmZXIoYmxvY2tTaXplKTsKKyAgICAgICAg
ICAgICAgICBwYXJhbXMudGVtcEJ1ZmZlciA9IHRlbXBCdWZmZXIuY3JlYXRlU2NyYXRjaFBpeGVs
QnVmZmVyKGJsb2NrU2l6ZSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KHBhcmFtcy5pb0J1ZmZl
ci0+Ynl0ZXMoKSwgaW9CdWZmZXIuYnl0ZXMoKSArIHN0YXJ0WSAqIHNjYW5saW5lLCBwYXJhbXMu
aW9CdWZmZXItPmJ5dGVMZW5ndGgoKSk7CiAKICAgICAgICAgICAgICAgICBwYXJhbXMud2lkdGgg
PSBwYWludFNpemUud2lkdGgoKTsKICAgICAgICAgICAgICAgICBwYXJhbXMuaGVpZ2h0ID0gZW5k
WSAtIHN0YXJ0WTsKQEAgLTQxNyw3ICs0MTMsNyBAQCBpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1
clNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybShVaW50OENsYW1wZWRBcnJheSYgaW9CdQog
ICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uT2Zmc2V0ID0gY3VycmVudFkgKiBzY2FubGluZTsK
ICAgICAgICAgICAgICAgICBzaXplID0gYWRqdXN0ZWRCbG9ja0hlaWdodCAqIHNjYW5saW5lOwog
Ci0gICAgICAgICAgICAgICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEoKSArIGRlc3RpbmF0aW9uT2Zm
c2V0LCBwYXJhbXMuaW9QaXhlbEFycmF5LT5kYXRhKCkgKyBzb3VyY2VPZmZzZXQsIHNpemUpOwor
ICAgICAgICAgICAgICAgIG1lbWNweShpb0J1ZmZlci5ieXRlcygpICsgZGVzdGluYXRpb25PZmZz
ZXQsIHBhcmFtcy5pb0J1ZmZlci0+Ynl0ZXMoKSArIHNvdXJjZU9mZnNldCwgc2l6ZSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTQyNiw3ICs0MjIs
NyBAQCBpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0
Zm9ybShVaW50OENsYW1wZWRBcnJheSYgaW9CdQogI2VuZGlmCiAKICAgICAvLyBUaGUgc2VsZWN0
aW9uIGhlcmUgZXZlbnR1YWxseSBzaG91bGQgaGFwcGVuIGR5bmFtaWNhbGx5IG9uIHNvbWUgcGxh
dGZvcm1zLgotICAgIGJveEJsdXJHZW5lcmljKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJu
ZWxTaXplWCwga2VybmVsU2l6ZVksIHBhaW50U2l6ZSwgaXNBbHBoYUltYWdlLCBlZGdlTW9kZSk7
CisgICAgYm94Qmx1ckdlbmVyaWMoaW9CdWZmZXIsIHRlbXBCdWZmZXIsIGtlcm5lbFNpemVYLCBr
ZXJuZWxTaXplWSwgcGFpbnRTaXplLCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKIH0KIAogYm9v
bCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0
ZXIsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIEZpbHRlckltYWdlJiByZXN1bHQp
IGNvbnN0CkBAIC00NDUsMTIgKzQ0MSwxMSBAQCBib29sIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVB
cHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hZwogICAg
IGF1dG8ga2VybmVsU2l6ZSA9IG1fZWZmZWN0LmNhbGN1bGF0ZUtlcm5lbFNpemUoZmlsdGVyLCB7
IG1fZWZmZWN0LnN0ZERldmlhdGlvblgoKSwgbV9lZmZlY3Quc3RkRGV2aWF0aW9uWSgpIH0pOwog
CiAgICAgSW50U2l6ZSBwYWludFNpemUgPSByZXN1bHQuYWJzb2x1dGVJbWFnZVJlY3QoKS5zaXpl
KCk7Ci0gICAgYXV0byB0bXBJbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRl
VW5pbml0aWFsaXplZChwYWludFNpemUuYXJlYSgpICogNCk7Ci0gICAgaWYgKCF0bXBJbWFnZURh
dGEpCisgICAgYXV0byB0ZW1wQnVmZmVyID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+Y3JlYXRl
U2NyYXRjaFBpeGVsQnVmZmVyKHBhaW50U2l6ZSk7CisgICAgaWYgKCF0ZW1wQnVmZmVyKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgYXBwbHlQbGF0Zm9ybShkZXN0aW5h
dGlvblBpeGVsQXJyYXksICp0bXBJbWFnZURhdGEsIGtlcm5lbFNpemUud2lkdGgoKSwga2VybmVs
U2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplLCByZXN1bHQuaXNBbHBoYUltYWdlKCksIG1fZWZmZWN0
LmVkZ2VNb2RlKCkpOworICAgIGFwcGx5UGxhdGZvcm0oKmRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIs
ICp0ZW1wQnVmZmVyLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNpemUuaGVpZ2h0KCksIHBh
aW50U2l6ZSwgcmVzdWx0LmlzQWxwaGFJbWFnZSgpLCBtX2VmZmVjdC5lZGdlTW9kZSgpKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdh
dXNzaWFuQmx1clNvZnR3YXJlQXBwbGllci5oCmluZGV4IDE4YzA1ZGU2ZWZlZS4uZmY1NzMzNzEx
NzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNv
ZnR3YXJlQXBwbGllci5oCkBAIC00Miw4ICs0Miw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBhcHBs
eShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBGaWx0ZXJJ
bWFnZSYgcmVzdWx0KSBjb25zdCBmaW5hbDsKIAogICAgIHN0cnVjdCBBcHBseVBhcmFtZXRlcnMg
ewotICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGlvUGl4ZWxBcnJheTsKLSAgICAg
ICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiB0bXBQaXhlbEFycmF5OworICAgICAgICBzdGQ6
Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBpb0J1ZmZlcjsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4gdGVtcEJ1ZmZlcjsKICAgICAgICAgaW50IHdpZHRoOwogICAgICAgICBpbnQg
aGVpZ2h0OwogICAgICAgICB1bnNpZ25lZCBrZXJuZWxTaXplWDsKQEAgLTU0LDE2ICs1NCwxNiBA
QCBwcml2YXRlOgogCiAgICAgc3RhdGljIGlubGluZSB2b2lkIGtlcm5lbFBvc2l0aW9uKGludCBi
bHVySXRlcmF0aW9uLCB1bnNpZ25lZCYgcmFkaXVzLCBpbnQmIGRlbHRhTGVmdCwgaW50JiBkZWx0
YVJpZ2h0KTsKIAotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyQWxwaGFPbmx5KGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0
UGl4ZWxBcnJheSwgdW5zaWduZWQgZHgsIGludCYgZHhMZWZ0LCBpbnQmIGR4UmlnaHQsIGludCYg
c3RyaWRlLCBpbnQmIHN0cmlkZUxpbmUsIGludCYgZWZmZWN0V2lkdGgsIGludCYgZWZmZWN0SGVp
Z2h0LCBjb25zdCBpbnQmIG1heEtlcm5lbFNpemUpOwotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBi
b3hCbHVyKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1w
ZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwgdW5zaWduZWQgZHgsIGludCBkeExlZnQsIGludCBkeFJp
Z2h0LCBpbnQgc3RyaWRlLCBpbnQgc3RyaWRlTGluZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZm
ZWN0SGVpZ2h0LCBib29sIGFscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSk7CisgICAgc3RhdGljIGlu
bGluZSB2b2lkIGJveEJsdXJBbHBoYU9ubHkoY29uc3QgUGl4ZWxCdWZmZXImIGlvQnVmZmVyLCBQ
aXhlbEJ1ZmZlciYgdGVtcEJ1ZmZlciwgdW5zaWduZWQgZHgsIGludCYgZHhMZWZ0LCBpbnQmIGR4
UmlnaHQsIGludCYgc3RyaWRlLCBpbnQmIHN0cmlkZUxpbmUsIGludCYgZWZmZWN0V2lkdGgsIGlu
dCYgZWZmZWN0SGVpZ2h0LCBjb25zdCBpbnQmIG1heEtlcm5lbFNpemUpOworICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCBib3hCbHVyKGNvbnN0IFBpeGVsQnVmZmVyJiBpb0J1ZmZlciwgUGl4ZWxCdWZm
ZXImIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGR4LCBpbnQgZHhMZWZ0LCBpbnQgZHhSaWdodCwgaW50
IHN0cmlkZSwgaW50IHN0cmlkZUxpbmUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdo
dCwgYm9vbCBhbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUpOwogCi0gICAgc3RhdGljIGlubGluZSB2
b2lkIGJveEJsdXJBY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4
Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplLCBpbnQgc3RyaWRl
LCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQpOwotICAgIHN0YXRpYyBpbmxpbmUg
dm9pZCBib3hCbHVyVW5hY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVp
bnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWdu
ZWQga2VybmVsU2l6ZVksIGludCBzdHJpZGUsIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0Fs
cGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSk7CisgICAgc3RhdGljIGlubGluZSB2b2lkIGJveEJsdXJB
Y2NlbGVyYXRlZChQaXhlbEJ1ZmZlciYgaW9CdWZmZXIsIFBpeGVsQnVmZmVyJiB0ZW1wQnVmZmVy
LCB1bnNpZ25lZCBrZXJuZWxTaXplLCBpbnQgc3RyaWRlLCBpbnQgZWZmZWN0V2lkdGgsIGludCBl
ZmZlY3RIZWlnaHQpOworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyVW5hY2NlbGVyYXRl
ZChQaXhlbEJ1ZmZlciYgaW9CdWZmZXIsIFBpeGVsQnVmZmVyJiB0ZW1wQnVmZmVyLCB1bnNpZ25l
ZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIGludCBzdHJpZGUsIEludFNpemUm
IHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSk7CiAKLSAgICBzdGF0
aWMgaW5saW5lIHZvaWQgYm94Qmx1ckdlbmVyaWMoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVy
LCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgs
IHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUlt
YWdlLCBFZGdlTW9kZVR5cGUpOworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyR2VuZXJp
YyhQaXhlbEJ1ZmZlciYgaW9CdWZmZXIsIFBpeGVsQnVmZmVyJiB0ZW1wQnVmZmVyLCB1bnNpZ25l
ZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwg
Ym9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSk7CiAgICAgc3RhdGljIGlubGluZSB2b2lk
IGJveEJsdXJXb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKik7CiAKLSAgICBzdGF0aWMgaW5saW5lIHZv
aWQgYXBwbHlQbGF0Zm9ybShVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBl
ZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2Vy
bmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2Rl
VHlwZSk7CisgICAgc3RhdGljIGlubGluZSB2b2lkIGFwcGx5UGxhdGZvcm0oUGl4ZWxCdWZmZXIm
IGlvQnVmZmVyLCBQaXhlbEJ1ZmZlciYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZVgs
IHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUlt
YWdlLCBFZGdlTW9kZVR5cGUpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllci5jcHAKaW5k
ZXggZmE4ZWUzZDU2YTU2Li5lNGIxNDdmNzU1NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlQXBw
bGllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmNwcApAQCAtMSw3ICsxLDcgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqIENvcHlyaWdo
dCAoQykgMjAxMCBab2x0YW4gSGVyY3plZwotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBw
bGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIy
IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM5OSw4ICszOTksNiBAQCBib29sIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxp
ZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJbWFnZVZlYwogICAg
IGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+
ZGF0YSgpOwotCiAgICAgYXV0byBlZmZlY3REcmF3aW5nUmVjdCA9IHJlc3VsdC5hYnNvbHV0ZUlt
YWdlUmVjdFJlbGF0aXZlVG8oaW5wdXQpOwogICAgIGlucHV0LmNvcHlQaXhlbEJ1ZmZlcigqZGVz
dGluYXRpb25QaXhlbEJ1ZmZlciwgZWZmZWN0RHJhd2luZ1JlY3QpOwogCkBAIC00MjgsNyArNDI2
LDcgQEAgYm9vbCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXIm
IGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VWZWMKICAgICBkYXRhLmxpZ2h0U291cmNlID0gJm1f
ZWZmZWN0LmxpZ2h0U291cmNlKCk7CiAgICAgZGF0YS5vcGVyYXRpbmdDb2xvclNwYWNlID0gJm1f
ZWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKTsKIAotICAgIGRhdGEucGl4ZWxzID0gJmRlc3Rp
bmF0aW9uUGl4ZWxBcnJheTsKKyAgICBkYXRhLnBpeGVscyA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXI7CiAgICAgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSA9IHNpemUud2lkdGgoKSAq
IGNQaXhlbFNpemU7CiAgICAgZGF0YS53aWR0aCA9IHNpemUud2lkdGgoKTsKICAgICBkYXRhLmhl
aWdodCA9IHNpemUuaGVpZ2h0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdo
dGluZ1NvZnR3YXJlQXBwbGllci5oCmluZGV4IDM4NzViMGE0YjVkZS4uYzk3NGQ5MjExNWZmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIu
aApAQCAtMTA0LDcgKzEwNCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNvbnN0IExpZ2h0U291cmNl
KiBsaWdodFNvdXJjZTsKICAgICAgICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlKiBvcGVy
YXRpbmdDb2xvclNwYWNlOwogCi0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbHM7Cisg
ICAgICAgIFBpeGVsQnVmZmVyKiBwaXhlbHM7CiAgICAgICAgIGludCB3aWR0aE11bHRpcGxpZWRC
eVBpeGVsU2l6ZTsKICAgICAgICAgaW50IHdpZHRoOwogICAgICAgICBpbnQgaGVpZ2h0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIu
Y3BwCmluZGV4IDFjOWRlZmJjMzJlOC4uZGRkZGEwZWQ1NTA3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNv
ZnR3YXJlQXBwbGllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIuY3BwCkBAIC00LDcg
KzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIEFwcGxlIEluYy4gMjAxNy0yMDIxIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIEFwcGxlIEluYy4gMjAxNy0yMDIy
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQwLDEyICs0MCwx
MiBAQCBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IEZFTW9ycGhvbG9neVNvZnR3
YXJlQXBwbGllcjo6bWluT3JNYXgoY29uc3QgQwogICAgIHJldHVybiBwZXJDb21wb25lbnRNYXgo
YSwgYik7CiB9CiAKLWlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVNb3JwaG9s
b2d5U29mdHdhcmVBcHBsaWVyOjpjb2x1bW5FeHRyZW11bShjb25zdCBVaW50OENsYW1wZWRBcnJh
eSYgc3JjUGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5kLCBpbnQgd2lkdGgs
IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKK2lubGluZSBDb2xvckNvbXBvbmVudHM8dWlu
dDhfdCwgND4gRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjpjb2x1bW5FeHRyZW11bShjb25z
dCBQaXhlbEJ1ZmZlciYgc3JjUGl4ZWxCdWZmZXIsIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVu
ZCwgaW50IHdpZHRoLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCiB7Ci0gICAgYXV0byBl
eHRyZW11bSA9IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6
UkdCQSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oc3JjUGl4ZWxBcnJheS5k
YXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeVN0YXJ0LCB3aWR0aCkpIH0pOworICAgIGF1dG8g
ZXh0cmVtdW0gPSBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6
OlJHQkEgeyAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQnVmZmVy
LmJ5dGVzKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeVN0YXJ0LCB3aWR0aCkpIH0pOwogCiAgICAg
Zm9yIChpbnQgeSA9IHlTdGFydCArIDE7IHkgPCB5RW5kOyArK3kpIHsKLSAgICAgICAgYXV0byBw
aXhlbCA9IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdC
QSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oc3JjUGl4ZWxBcnJheS5kYXRh
KCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeSwgd2lkdGgpKSB9KTsKKyAgICAgICAgYXV0byBwaXhl
bCA9IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSB7
ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oc3JjUGl4ZWxCdWZmZXIuYnl0ZXMo
KSArIHBpeGVsQXJyYXlJbmRleCh4LCB5LCB3aWR0aCkpIH0pOwogICAgICAgICBleHRyZW11bSA9
IG1pbk9yTWF4KGV4dHJlbXVtLCBwaXhlbCwgdHlwZSk7CiAgICAgfQogICAgIHJldHVybiBleHRy
ZW11bTsKQEAgLTY0LDggKzY0LDggQEAgdm9pZCBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6
OmFwcGx5UGxhdGZvcm1HZW5lcmljKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnQKIHsKICAgICBB
U1NFUlQoZW5kWSA+IHN0YXJ0WSk7CiAKLSAgICBjb25zdCBhdXRvJiBzcmNQaXhlbEFycmF5ID0g
KnBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5OwotICAgIGF1dG8mIGRzdFBpeGVsQXJyYXkgPSAq
cGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXk7CisgICAgY29uc3QgYXV0byYgc3JjUGl4ZWxCdWZm
ZXIgPSAqcGFpbnRpbmdEYXRhLnNyY1BpeGVsQnVmZmVyOworICAgIGF1dG8mIGRzdFBpeGVsQnVm
ZmVyID0gKnBhaW50aW5nRGF0YS5kc3RQaXhlbEJ1ZmZlcjsKIAogICAgIGNvbnN0IGludCByYWRp
dXNYID0gcGFpbnRpbmdEYXRhLnJhZGl1c1g7CiAgICAgY29uc3QgaW50IHJhZGl1c1kgPSBwYWlu
dGluZ0RhdGEucmFkaXVzWTsKQEAgLTg2LDE3ICs4NiwxNyBAQCB2b2lkIEZFTW9ycGhvbG9neVNv
ZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWMoY29uc3QgUGFpbnRpbmdEYXRhJiBw
YWludAogCiAgICAgICAgIC8vIFdlIHN0YXJ0IGF0IHRoZSBsZWZ0IGVkZ2UsIHNvIGNvbXB1dGUg
ZXh0cmVtZSBmb3IgdGhlIHJhZGl1c1ggY29sdW1ucy4KICAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCByYWRpdXNYOyArK3gpCi0gICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRy
ZW11bShzcmNQaXhlbEFycmF5LCB4LCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBw
YWludGluZ0RhdGEudHlwZSkpOworICAgICAgICAgICAgZXh0cmVtYS5hcHBlbmQoY29sdW1uRXh0
cmVtdW0oc3JjUGl4ZWxCdWZmZXIsIHgsIHlSYWRpdXNTdGFydCwgeVJhZGl1c0VuZCwgd2lkdGgs
IHBhaW50aW5nRGF0YS50eXBlKSk7CiAKICAgICAgICAgLy8gS2VybmVsIGlzIGZpbGxlZCwgZ2V0
IGV4dHJlbWEgb2YgbmV4dCBjb2x1bW4KICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0
aDsgKyt4KSB7CiAgICAgICAgICAgICBpZiAoeCA8IHdpZHRoIC0gcmFkaXVzWCkKLSAgICAgICAg
ICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5LCB4ICsg
cmFkaXVzWCwgeVJhZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0aCwgcGFpbnRpbmdEYXRhLnR5
cGUpKTsKKyAgICAgICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQ
aXhlbEJ1ZmZlciwgeCArIHJhZGl1c1gsIHlSYWRpdXNTdGFydCwgeVJhZGl1c0VuZCwgd2lkdGgs
IHBhaW50aW5nRGF0YS50eXBlKSk7CiAKICAgICAgICAgICAgIGlmICh4ID4gcmFkaXVzWCkKICAg
ICAgICAgICAgICAgICBleHRyZW1hLnJlbW92ZSgwKTsKIAotICAgICAgICAgICAgdW5zaWduZWQq
IGRlc3RQaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihkc3RQaXhlbEFycmF5LmRh
dGEoKSArIHBpeGVsQXJyYXlJbmRleCh4LCB5LCB3aWR0aCkpOworICAgICAgICAgICAgdW5zaWdu
ZWQqIGRlc3RQaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihkc3RQaXhlbEJ1ZmZl
ci5ieXRlcygpICsgcGl4ZWxBcnJheUluZGV4KHgsIHksIHdpZHRoKSk7CiAgICAgICAgICAgICAq
ZGVzdFBpeGVsID0gbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGtlcm5lbEV4dHJl
bXVtKGV4dHJlbWEsIHBhaW50aW5nRGF0YS50eXBlKSkudmFsdWU7CiAgICAgICAgIH0KICAgICB9
CkBAIC0xNzUsMTMgKzE3NSwxMCBAQCBib29sIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6
YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckltYWdlVgogICAgIGlmICgh
c291cmNlUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8mIHNv
dXJjZVBpeGVsQXJyYXkgPSBzb3VyY2VQaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIGF1dG8mIGRl
c3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQog
ICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7CiAgICAgcGFpbnRpbmdEYXRhLnR5cGUgPSBt
X2VmZmVjdC5tb3JwaG9sb2d5T3BlcmF0b3IoKTsKLSAgICBwYWludGluZ0RhdGEuc3JjUGl4ZWxB
cnJheSA9ICZzb3VyY2VQaXhlbEFycmF5OwotICAgIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5
ID0gJmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsKKyAgICBwYWludGluZ0RhdGEuc3JjUGl4ZWxCdWZm
ZXIgPSAmKnNvdXJjZVBpeGVsQnVmZmVyOworICAgIHBhaW50aW5nRGF0YS5kc3RQaXhlbEJ1ZmZl
ciA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXI7CiAgICAgcGFpbnRpbmdEYXRhLndpZHRoID0gZWZm
ZWN0RHJhd2luZ1JlY3Qud2lkdGgoKTsKICAgICBwYWludGluZ0RhdGEuaGVpZ2h0ID0gZWZmZWN0
RHJhd2luZ1JlY3QuaGVpZ2h0KCk7CiAgICAgcGFpbnRpbmdEYXRhLnJhZGl1c1ggPSByYWRpdXNY
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBs
aWVyLmgKaW5kZXggNjhhZDRhNDMzOGI1Li4zY2Q5YjY1NDEyODYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5
U29mdHdhcmVBcHBsaWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIuaApAQCAtNDgsOCAr
NDgsOCBAQCBwcml2YXRlOgogICAgICAgICBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGU7CiAg
ICAgICAgIGludCByYWRpdXNYOwogICAgICAgICBpbnQgcmFkaXVzWTsKLSAgICAgICAgY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkqIHNyY1BpeGVsQXJyYXk7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFy
cmF5KiBkc3RQaXhlbEFycmF5OworICAgICAgICBjb25zdCBQaXhlbEJ1ZmZlciogc3JjUGl4ZWxC
dWZmZXI7CisgICAgICAgIFBpeGVsQnVmZmVyKiBkc3RQaXhlbEJ1ZmZlcjsKICAgICAgICAgaW50
IHdpZHRoOwogICAgICAgICBpbnQgaGVpZ2h0OwogICAgIH07CkBAIC02NSw3ICs2NSw3IEBAIHBy
aXZhdGU6CiAKICAgICBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBt
YWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgcGl4ZWwp
IHsgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGFzU1JHQkEocGl4ZWwpLnJlc29sdmVkKCkpOyB9
CiAgICAgc3RhdGljIGlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gbWluT3JNYXgo
Y29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBhLCBjb25zdCBDb2xvckNvbXBvbmVu
dHM8dWludDhfdCwgND4mIGIsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUpOwotICAgIHN0YXRpYyBp
bmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNvbHVtbkV4dHJlbXVtKGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBpbnQgeCwgaW50IHlTdGFydCwgaW50IHlF
bmQsIGludCB3aWR0aCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSk7CisgICAgc3RhdGljIGlubGlu
ZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY29sdW1uRXh0cmVtdW0oY29uc3QgUGl4ZWxC
dWZmZXImIHNyY1BpeGVsQnVmZmVyLCBpbnQgeCwgaW50IHlTdGFydCwgaW50IHlFbmQsIGludCB3
aWR0aCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSk7CiAgICAgc3RhdGljIGlubGluZSBDb2xvckNv
bXBvbmVudHM8dWludDhfdCwgND4ga2VybmVsRXh0cmVtdW0oY29uc3QgQ29sdW1uRXh0cmVtYSYg
a2VybmVsLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsKIAogICAgIHN0YXRpYyB2b2lkIGFwcGx5
UGxhdGZvcm1HZW5lcmljKGNvbnN0IFBhaW50aW5nRGF0YSYsIGludCBzdGFydFksIGludCBlbmRZ
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmVB
cHBsaWVyLmNwcAppbmRleCA2ZDY1MDY0NWE3NWMuLjUyZjYyNGZjNzhmNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1
bGVuY2VTb2Z0d2FyZUFwcGxpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyLmNwcApA
QCAtNSw3ICs1LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBp
bmYudS1zemVnZWQuaHU+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR2Fib3IgTG9raSA8bG9raUB3
ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI3MCw3ICsyNzAsNyBA
QCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVy
OjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdQogICAgIHJldHVybiB0b0ludEJhc2VkQ29sb3JDb21w
b25lbnRzKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCk7CiB9CiAKLXZvaWQgRkVUdXJidWxlbmNl
U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpYyhjb25zdCBJbnRSZWN0JiBmaWx0
ZXJSZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIFVpbnQ4Q2xhbXBlZEFycmF5
JiBwaXhlbEFycmF5LCBjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0
YSBzdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKK3ZvaWQgRkVUdXJidWxlbmNlU29m
dHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpYyhjb25zdCBJbnRSZWN0JiBmaWx0ZXJS
ZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIFBpeGVsQnVmZmVyJiBwaXhlbEJ1
ZmZlciwgY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0aXRjaERhdGEgc3RpdGNo
RGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCiB7CiAgICAgQVNTRVJUKGVuZFkgPiBzdGFydFkp
OwogCkBAIC0yODUsNyArMjg1LDcgQEAgdm9pZCBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6
OmFwcGx5UGxhdGZvcm1HZW5lcmljKGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2kKICAgICAgICAg
ICAgIHBvaW50LnNldFgocG9pbnQueCgpICsgMSk7CiAgICAgICAgICAgICBGbG9hdFBvaW50IGxv
Y2FsUG9pbnQgPSBwb2ludC5zY2FsZWQoaW52ZXJzZVNjYWxlLndpZHRoKCksIGludmVyc2VTY2Fs
ZS5oZWlnaHQoKSk7CiAgICAgICAgICAgICBhdXRvIHZhbHVlcyA9IGNhbGN1bGF0ZVR1cmJ1bGVu
Y2VWYWx1ZUZvclBvaW50KHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgbG9jYWxQb2ludCk7Ci0g
ICAgICAgICAgICBwaXhlbEFycmF5LnNldFJhbmdlKHZhbHVlcy5jb21wb25lbnRzLmRhdGEoKSwg
NCwgaW5kZXhPZlBpeGVsQ2hhbm5lbCk7CisgICAgICAgICAgICBwaXhlbEJ1ZmZlci5zZXRSYW5n
ZSh2YWx1ZXMuY29tcG9uZW50cy5kYXRhKCksIDQsIGluZGV4T2ZQaXhlbENoYW5uZWwpOwogICAg
ICAgICAgICAgaW5kZXhPZlBpeGVsQ2hhbm5lbCArPSA0OwogICAgICAgICB9CiAgICAgfQpAQCAt
MjkzLDEwICsyOTMsMTAgQEAgdm9pZCBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5
UGxhdGZvcm1HZW5lcmljKGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2kKIAogdm9pZCBGRVR1cmJ1
bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1Xb3JrZXIoQXBwbHlQYXJhbWV0ZXJz
KiBwYXJhbWV0ZXJzKQogewotICAgIGFwcGx5UGxhdGZvcm1HZW5lcmljKHBhcmFtZXRlcnMtPmZp
bHRlclJlZ2lvbiwgcGFyYW1ldGVycy0+ZmlsdGVyU2NhbGUsICpwYXJhbWV0ZXJzLT5waXhlbEFy
cmF5LCAqcGFyYW1ldGVycy0+cGFpbnRpbmdEYXRhLCBwYXJhbWV0ZXJzLT5zdGl0Y2hEYXRhLCBw
YXJhbWV0ZXJzLT5zdGFydFksIHBhcmFtZXRlcnMtPmVuZFkpOworICAgIGFwcGx5UGxhdGZvcm1H
ZW5lcmljKHBhcmFtZXRlcnMtPmZpbHRlclJlZ2lvbiwgcGFyYW1ldGVycy0+ZmlsdGVyU2NhbGUs
ICpwYXJhbWV0ZXJzLT5waXhlbEJ1ZmZlciwgKnBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFy
YW1ldGVycy0+c3RpdGNoRGF0YSwgcGFyYW1ldGVycy0+c3RhcnRZLCBwYXJhbWV0ZXJzLT5lbmRZ
KTsKIH0KIAotdm9pZCBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0o
Y29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxl
LCBVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0Rh
dGEsIFN0aXRjaERhdGEmIHN0aXRjaERhdGEpCit2b2lkIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBw
bGllcjo6YXBwbHlQbGF0Zm9ybShjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZs
b2F0U2l6ZSYgZmlsdGVyU2NhbGUsIFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgUGFpbnRpbmdE
YXRhJiBwYWludGluZ0RhdGEsIFN0aXRjaERhdGEmIHN0aXRjaERhdGEpCiB7CiAgICAgaW50IGhl
aWdodCA9IGZpbHRlclJlZ2lvbi5oZWlnaHQoKTsKICAgICB1bnNpZ25lZCBhcmVhID0gZmlsdGVy
UmVnaW9uLmFyZWEoKTsKQEAgLTMyMCw3ICszMjAsNyBAQCB2b2lkIEZFVHVyYnVsZW5jZVNvZnR3
YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybShjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24sIGNv
bgogICAgICAgICAgICAgICAgIEFwcGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2Jz
LnBhcmFtZXRlcihpKTsKICAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyUmVnaW9uID0gZmls
dGVyUmVnaW9uOwogICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXJTY2FsZSA9IGZpbHRlclNj
YWxlOwotICAgICAgICAgICAgICAgIHBhcmFtcy5waXhlbEFycmF5ID0gJnBpeGVsQXJyYXk7Cisg
ICAgICAgICAgICAgICAgcGFyYW1zLnBpeGVsQnVmZmVyID0gJnBpeGVsQnVmZmVyOwogICAgICAg
ICAgICAgICAgIHBhcmFtcy5wYWludGluZ0RhdGEgPSAmcGFpbnRpbmdEYXRhOwogICAgICAgICAg
ICAgICAgIHBhcmFtcy5zdGl0Y2hEYXRhID0gc3RpdGNoRGF0YTsKICAgICAgICAgICAgICAgICBw
YXJhbXMuc3RhcnRZID0gc3RhcnRZOwpAQCAtMzM2LDcgKzMzNiw3IEBAIHZvaWQgRkVUdXJidWxl
bmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKGNvbnN0IEludFJlY3QmIGZpbHRlclJl
Z2lvbiwgY29uCiAgICAgfQogCiAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVkIG1v
ZGUgaWYgdGhlcmUgaXMgbm8gcm9vbSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRoZSBwYWludCBhcmVh
IGlzIHRvbyBzbWFsbC4KLSAgICBhcHBseVBsYXRmb3JtR2VuZXJpYyhmaWx0ZXJSZWdpb24sIGZp
bHRlclNjYWxlLCBwaXhlbEFycmF5LCBwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIDAsIGhlaWdo
dCk7CisgICAgYXBwbHlQbGF0Zm9ybUdlbmVyaWMoZmlsdGVyUmVnaW9uLCBmaWx0ZXJTY2FsZSwg
cGl4ZWxCdWZmZXIsIHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsKIH0KIAog
Ym9vbCBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmls
dGVyLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYsIEZpbHRlckltYWdlJiByZXN1bHQpIGNvbnN0
CkBAIC0zNDksMTAgKzM0OSw4IEBAIGJvb2wgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjph
cHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VWCiAgICAgaWYgKHJl
c3VsdFNpemUuYXJlYSgpLmhhc092ZXJmbG93ZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZl
ci0+ZGF0YSgpOwotCiAgICAgaWYgKHJlc3VsdFNpemUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGRl
c3RpbmF0aW9uUGl4ZWxBcnJheS56ZXJvRmlsbCgpOworICAgICAgICBkZXN0aW5hdGlvblBpeGVs
QnVmZmVyLT56ZXJvRmlsbCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTM2
NCw3ICszNjIsNyBAQCBib29sIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29u
c3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckltYWdlVgogCiAgICAgYXV0byBwYWludGlu
Z0RhdGEgPSBpbml0UGFpbnRpbmdEYXRhKG1fZWZmZWN0LnR5cGUoKSwgYmFzZUZyZXF1ZW5jeVgs
IGJhc2VGcmVxdWVuY3lZLCBtX2VmZmVjdC5udW1PY3RhdmVzKCksIG1fZWZmZWN0LnNlZWQoKSwg
bV9lZmZlY3Quc3RpdGNoVGlsZXMoKSwgdGlsZVNpemUpOwogCi0gICAgYXBwbHlQbGF0Zm9ybShy
ZXN1bHQuYWJzb2x1dGVJbWFnZVJlY3QoKSwgZmlsdGVyLmZpbHRlclNjYWxlKCksIGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhKTsKKyAgICBhcHBseVBsYXRm
b3JtKHJlc3VsdC5hYnNvbHV0ZUltYWdlUmVjdCgpLCBmaWx0ZXIuZmlsdGVyU2NhbGUoKSwgKmRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIsIHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5j
ZVNvZnR3YXJlQXBwbGllci5oCmluZGV4IGNmNGQ4OTU5ZWJhNC4uZDZhYzM4NWRhYzNhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVy
LmgKQEAgLTkzLDcgKzkzLDcgQEAgcHJpdmF0ZToKICAgICBzdHJ1Y3QgQXBwbHlQYXJhbWV0ZXJz
IHsKICAgICAgICAgSW50UmVjdCBmaWx0ZXJSZWdpb247CiAgICAgICAgIEZsb2F0U2l6ZSBmaWx0
ZXJTY2FsZTsKLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsQXJyYXk7CisgICAgICAg
IFBpeGVsQnVmZmVyKiBwaXhlbEJ1ZmZlcjsKICAgICAgICAgUGFpbnRpbmdEYXRhKiBwYWludGlu
Z0RhdGE7CiAgICAgICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0YTsKICAgICAgICAgaW50IHN0YXJ0
WTsKQEAgLTExMCw5ICsxMTAsOSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBDb2xvckNvbXBvbmVu
dHM8dWludDhfdCwgND4gdG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBv
bmVudHM8ZmxvYXQsIDQ+JiBmbG9hdENvbXBvbmVudHMpOwogICAgIHN0YXRpYyBDb2xvckNvbXBv
bmVudHM8dWludDhfdCwgND4gY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3Qg
UGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYpOwogCi0gICAgc3Rh
dGljIHZvaWQgYXBwbHlQbGF0Zm9ybUdlbmVyaWMoY29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaW9u
LCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxB
cnJheSwgY29uc3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVu
ZFkpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm1HZW5lcmljKGNvbnN0IEludFJlY3Qm
IGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgUGl4ZWxCdWZmZXIm
LCBjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSk7
CiAgICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybVdvcmtlcihBcHBseVBhcmFtZXRlcnMqKTsK
LSAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtKGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lv
biwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgVWludDhDbGFtcGVkQXJyYXkmIHBpeGVs
QXJyYXksIFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEmKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eVBsYXRmb3JtKGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRTaXplJiBm
aWx0ZXJTY2FsZSwgUGl4ZWxCdWZmZXImLCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRhJik7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0tIAoyLjMyLjAgKEFwcGxlIEdpdC0xMzIpCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459660</attachid>
            <date>2022-05-22 20:59:32 -0700</date>
            <delta_ts>2022-05-22 22:43:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-240777-20220522205931.patch</filename>
            <type>text/plain</type>
            <size>62129</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">RnJvbSA4NGViMGQyNGZhOTFmZGQ1ZjYwMjdmODIzMTBiOTI0ODJmODY0ZmVhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTYWlkIEFib3UtSGFsbGF3YSA8c2FpZEBhcHBsZS5jb20+CkRh
dGU6IFN1biwgMjIgTWF5IDIwMjIgMjA6NTg6MDUgLTA3MDAKU3ViamVjdDogW1BBVENIXSBbR1BV
IFByb2Nlc3NdIFtGaWx0ZXJzXSBEb24ndCB1c2UgVWludDhDbGFtcGVkQXJyYXkgaW4KIHNvZnR3
YXJlIGZpbHRlciBhcHBsaWVycyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjQwNzc3CgpUaGUgcGxhbiBpcyB0byBhbGxvY2F0ZSB0aGUgRmlsdGVySW1hZ2UgYnVmZmVy
cyBkaWZmZXJlbnRseSBmb3IgR1BVUHJvY2Vzcy4gU28KdGhlIGZpcnN0IHN0ZXAgaXMgdG8gaGlk
ZSB0aGUgdW5kZXJseWluZyBtZW1vcnkgb2YgUGl4ZWxCdWZmZXIgZnJvbSB0aGUgc29mdHdhcmUK
ZmlsdGVyIGFwcGxpZXJzLgotLS0KIC4uLi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVs
QnVmZmVyLmNwcCB8IDUwICsrKysrKysrKysrKy0KIC4uLi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BpeGVsQnVmZmVyLmggICB8IDE2ICsrKy0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9zaXRlLmggICB8ICAyIC0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckltYWdlLmNwcCB8IDM5ICsrKysrLS0tLS0KIC4uLi9zb2Z0d2FyZS9GRUNvbG9yTWF0
cml4U29mdHdhcmVBcHBsaWVyLmNwcCB8IDY5ICsrKysrKysrLS0tLS0tLS0tLQogLi4uL0ZFQ29t
cG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIuY3BwICAgIHwgIDkgKy0tCiAuLi4vc29mdHdh
cmUvRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIuY3BwICAgfCAxMiArLS0KIC4uLi9GRUNvbnZv
bHZlTWF0cml4U29mdHdhcmVBcHBsaWVyLmNwcCAgICAgICB8IDM3ICsrKysrLS0tLS0KIC4uLi9G
RUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyLmggICAgICAgICB8ICA2ICstCiAuLi4vRkVE
aXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIuY3BwICAgICAgfCAxNiArKy0tCiAuLi4vc29m
dHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyLmNwcCAgfCAgNSArLQogLi4uL0ZFR2F1
c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmNwcCAgICAgICAgIHwgNzMgKysrKysrKysrLS0tLS0t
LS0tLQogLi4uL3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmggIHwgMTYg
KystLQogLi4uL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3BwICAgIHwgIDYg
Ky0KIC4uLi9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmggICAgICB8ICAyICst
CiAuLi4vc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmNwcCAgfCAyNSArKyst
LS0tCiAuLi4vc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmggICAgfCAgNiAr
LQogLi4uL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllci5jcHAgIHwgMjAgKysr
LS0KIC4uLi9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuaCAgICB8ICA2ICst
CiAxOSBmaWxlcyBjaGFuZ2VkLCAyMjIgaW5zZXJ0aW9ucygrKSwgMTkzIGRlbGV0aW9ucygtKQoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmNwcApp
bmRleCA3NTQzZjQ3NWEyN2EuLmNlNThkMGFjOGNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjAsOSArMTIwLDU1IEBAIFBpeGVs
QnVmZmVyIFBpeGVsQnVmZmVyOjpkZWVwQ2xvbmUoKSBjb25zdAogICAgIHJldHVybiB7IG1fZm9y
bWF0LCBtX3NpemUsIFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUobV9kYXRhLT5kYXRhKCksIG1f
ZGF0YS0+bGVuZ3RoKCkpIH07CiB9CiAKK3VpbnQ4X3QqIFBpeGVsQnVmZmVyOjpieXRlcygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YS0+ZGF0YSgpOworfQorCitzaXplX3QgUGl4ZWxCdWZm
ZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAoreworICAgIEFTU0VSVChtX2RhdGEtPmJ5dGVMZW5ndGgo
KSA9PSBtX3NpemUuYXJlYSgpICogNCk7CisgICAgcmV0dXJuIG1fZGF0YS0+Ynl0ZUxlbmd0aCgp
OworfQorCitib29sIFBpeGVsQnVmZmVyOjpzZXRSYW5nZShjb25zdCB2b2lkKiBkYXRhLCBzaXpl
X3QgZGF0YUJ5dGVMZW5ndGgsIHNpemVfdCBieXRlT2Zmc2V0KQoreworICAgIGlmICghaXNTdW1T
bWFsbGVyVGhhbk9yRXF1YWwoYnl0ZU9mZnNldCwgZGF0YUJ5dGVMZW5ndGgsIGJ5dGVMZW5ndGgo
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1lbW1vdmUoYnl0ZXMoKSArIGJ5dGVP
ZmZzZXQsIGRhdGEsIGRhdGFCeXRlTGVuZ3RoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBQaXhlbEJ1ZmZlcjo6emVyb1JhbmdlKHNpemVfdCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VC
eXRlTGVuZ3RoKQoreworICAgIGlmICghaXNTdW1TbWFsbGVyVGhhbk9yRXF1YWwoYnl0ZU9mZnNl
dCwgcmFuZ2VCeXRlTGVuZ3RoLCBieXRlTGVuZ3RoKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBtZW1zZXQoYnl0ZXMoKSArIGJ5dGVPZmZzZXQsIDAsIHJhbmdlQnl0ZUxlbmd0aCk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3VpbnQ4X3QgUGl4ZWxCdWZmZXI6Oml0ZW0oc2l6ZV90
IGluZGV4KSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04oaW5kZXggPCBieXRlTGVuZ3RoKCkpOworICAgIHJldHVybiBieXRlcygpW2luZGV4XTsK
K30KKwordm9pZCBQaXhlbEJ1ZmZlcjo6c2V0KHNpemVfdCBpbmRleCwgZmxvYXQgdmFsdWUpCit7
CisgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IGJ5
dGVMZW5ndGgoKSk7CisgICAgYnl0ZXMoKVtpbmRleF0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2
YWx1ZSk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IFBpeGVsQnVmZmVyOjpjcmVh
dGVTY3JhdGNoUGl4ZWxCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShtX2Zvcm1hdCwgc2l6ZSk7Cit9CisKIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFBpeGVsQnVmZmVyJiBwaXhl
bEJ1ZmZlcikKIHsKICAgICByZXR1cm4gdHMgPDwgJnBpeGVsQnVmZmVyLmRhdGEoKSA8PCAiZm9y
bWF0ICggIiA8PCBwaXhlbEJ1ZmZlci5mb3JtYXQoKSA8PCAiKSI7CiB9CiAKLX0KK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BpeGVsQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhl
bEJ1ZmZlci5oCmluZGV4IDA0MzRjZWViOTg3Zi4uNGRlNzg3NTUzOGFjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjEsNiArNjEsMTggQEAg
cHVibGljOgogCiAgICAgUGl4ZWxCdWZmZXIgZGVlcENsb25lKCkgY29uc3Q7CiAKKyAgICB1aW50
OF90KiBieXRlcygpIGNvbnN0OworICAgIHNpemVfdCBieXRlTGVuZ3RoKCkgY29uc3Q7CisKKyAg
ICBib29sIHNldFJhbmdlKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhQnl0ZUxlbmd0aCwg
c2l6ZV90IGJ5dGVPZmZzZXQpOworICAgIGJvb2wgemVyb1JhbmdlKHNpemVfdCBieXRlT2Zmc2V0
LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKTsKKyAgICB2b2lkIHplcm9GaWxsKCkgeyB6ZXJvUmFu
Z2UoMCwgYnl0ZUxlbmd0aCgpKTsgfQorCisgICAgdWludDhfdCBpdGVtKHNpemVfdCBpbmRleCkg
Y29uc3Q7CisgICAgdm9pZCBzZXQoc2l6ZV90IGluZGV4LCBmbG9hdCB2YWx1ZSk7CisKKyAgICBz
dGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBjcmVhdGVTY3JhdGNoUGl4ZWxCdWZmZXIoY29uc3Qg
SW50U2l6ZSYpIGNvbnN0OworCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBkZWNvZGUoRGVjb2RlciYpOwogCkBAIC0xMTksNCAr
MTMxLDQgQEAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZl
cj4gUGl4ZWxCdWZmZXI6OmRlY29kZShEZWNvZGVyJgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAppbmRleCAxOWI2OGY0YWU5ZDIu
LjY4MDFiN2RjZjU0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaApAQCAtNzMsOCArNzMsNiBAQCBwcml2YXRlOgog
CiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGlubGlu
ZSB2b2lkIHBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5
JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgZmxvYXQgazEsIGZsb2F0
IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOwotCiAjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNT
KQogICAgIHRlbXBsYXRlIDxpbnQgYjEsIGludCBiND4KICAgICBzdGF0aWMgaW5saW5lIHZvaWQg
Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHNOZW9uKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhf
dCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9h
dCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKaW5kZXggYjEwNmRmM2Ix
ZmZjLi44MDhkNDg1YjRjZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAwLDQ2ICszMDAsNDUgQEAg
dm9pZCBGaWx0ZXJJbWFnZTo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpCiAgICAg
aWYgKCFtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlciB8fCBtX2lzVmFsaWRQcmVtdWx0aXBsaWVk
KQogICAgICAgICByZXR1cm47CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSYgaW1hZ2VBcnJheSA9
IG1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgdWludDhfdCogcGl4ZWxE
YXRhID0gaW1hZ2VBcnJheS5kYXRhKCk7Ci0gICAgaW50IHBpeGVsQXJyYXlMZW5ndGggPSBpbWFn
ZUFycmF5Lmxlbmd0aCgpOworICAgIHVpbnQ4X3QqIHBpeGVsQnl0ZXMgPSBtX3ByZW11bHRpcGxp
ZWRQaXhlbEJ1ZmZlci0+Ynl0ZXMoKTsKKyAgICBpbnQgcGl4ZWxCeXRlTGVuZ3RoID0gbV9wcmVt
dWx0aXBsaWVkUGl4ZWxCdWZmZXItPmJ5dGVMZW5ndGgoKTsKIAogICAgIC8vIFdlIG11c3QgaGF2
ZSBmb3VyIGJ5dGVzIHBlciBwaXhlbCwgYW5kIGNvbXBsZXRlIHBpeGVscwotICAgIEFTU0VSVCgh
KHBpeGVsQXJyYXlMZW5ndGggJSA0KSk7CisgICAgQVNTRVJUKCEocGl4ZWxCeXRlTGVuZ3RoICUg
NCkpOwogCiAjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgIGlmIChwaXhlbEFycmF5
TGVuZ3RoID49IDY0KSB7Ci0gICAgICAgIHVpbnQ4X3QqIGxhc3RQaXhlbCA9IHBpeGVsRGF0YSAr
IChwaXhlbEFycmF5TGVuZ3RoICYgfjB4M2YpOworICAgIGlmIChwaXhlbEJ5dGVMZW5ndGggPj0g
NjQpIHsKKyAgICAgICAgdWludDhfdCogbGFzdFBpeGVsID0gcGl4ZWxCeXRlcyArIChwaXhlbEJ5
dGVMZW5ndGggJiB+MHgzZik7CiAgICAgICAgIGRvIHsKLSAgICAgICAgICAgIC8vIEluY3JlbWVu
dHMgcGl4ZWxEYXRhIGJ5IDY0LgotICAgICAgICAgICAgdWludDh4MTZ4NF90IHNpeHRlZW5QaXhl
bHMgPSB2bGQ0cV91OChwaXhlbERhdGEpOworICAgICAgICAgICAgLy8gSW5jcmVtZW50cyBwaXhl
bEJ5dGVzIGJ5IDY0LgorICAgICAgICAgICAgdWludDh4MTZ4NF90IHNpeHRlZW5QaXhlbHMgPSB2
bGQ0cV91OChwaXhlbEJ5dGVzKTsKICAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzBdID0g
dm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMF0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKICAg
ICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzFdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52
YWxbMV0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKICAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMu
dmFsWzJdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMl0sIHNpeHRlZW5QaXhlbHMudmFs
WzNdKTsKLSAgICAgICAgICAgIHZzdDRxX3U4KHBpeGVsRGF0YSwgc2l4dGVlblBpeGVscyk7Ci0g
ICAgICAgICAgICBwaXhlbERhdGEgKz0gNjQ7Ci0gICAgICAgIH0gd2hpbGUgKHBpeGVsRGF0YSA8
IGxhc3RQaXhlbCk7CisgICAgICAgICAgICB2c3Q0cV91OChwaXhlbEJ5dGVzLCBzaXh0ZWVuUGl4
ZWxzKTsKKyAgICAgICAgICAgIHBpeGVsQnl0ZXMgKz0gNjQ7CisgICAgICAgIH0gd2hpbGUgKHBp
eGVsQnl0ZXMgPCBsYXN0UGl4ZWwpOwogCi0gICAgICAgIHBpeGVsQXJyYXlMZW5ndGggJj0gMHgz
ZjsKLSAgICAgICAgaWYgKCFwaXhlbEFycmF5TGVuZ3RoKQorICAgICAgICBwaXhlbEJ5dGVMZW5n
dGggJj0gMHgzZjsKKyAgICAgICAgaWYgKCFwaXhlbEJ5dGVMZW5ndGgpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgfQogI2VuZGlmCiAKLSAgICBpbnQgbnVtUGl4ZWxzID0gcGl4ZWxBcnJheUxl
bmd0aCAvIDQ7CisgICAgaW50IG51bVBpeGVscyA9IHBpeGVsQnl0ZUxlbmd0aCAvIDQ7CiAKICAg
ICAvLyBJdGVyYXRlIG92ZXIgZWFjaCBwaXhlbCwgY2hlY2tpbmcgYWxwaGEgYW5kIGFkanVzdGlu
ZyBjb2xvciBjb21wb25lbnRzIGlmIG5lY2Vzc2FyeQogICAgIHdoaWxlICgtLW51bVBpeGVscyA+
PSAwKSB7CiAgICAgICAgIC8vIEFscGhhIGlzIHRoZSA0dGggYnl0ZSBpbiBhIHBpeGVsCi0gICAg
ICAgIHVpbnQ4X3QgYSA9ICoocGl4ZWxEYXRhICsgMyk7CisgICAgICAgIHVpbnQ4X3QgYSA9ICoo
cGl4ZWxCeXRlcyArIDMpOwogICAgICAgICAvLyBDbGFtcCBlYWNoIGNvbXBvbmVudCB0byBhbHBo
YSwgYW5kIGluY3JlbWVudCB0aGUgcGl4ZWwgbG9jYXRpb24KICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAgICAgIGlmICgqcGl4ZWxEYXRhID4gYSkKLSAgICAg
ICAgICAgICAgICAqcGl4ZWxEYXRhID0gYTsKLSAgICAgICAgICAgICsrcGl4ZWxEYXRhOworICAg
ICAgICAgICAgaWYgKCpwaXhlbEJ5dGVzID4gYSkKKyAgICAgICAgICAgICAgICAqcGl4ZWxCeXRl
cyA9IGE7CisgICAgICAgICAgICArK3BpeGVsQnl0ZXM7CiAgICAgICAgIH0KICAgICAgICAgLy8g
SW5jcmVtZW50IGZvciBhbHBoYQotICAgICAgICArK3BpeGVsRGF0YTsKKyAgICAgICAgKytwaXhl
bEJ5dGVzOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVD
b2xvck1hdHJpeFNvZnR3YXJlQXBwbGllci5jcHAKaW5kZXggMzE2M2E1NmRlNDM1Li4zMjczYTQ1
MGEzN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4
U29mdHdhcmVBcHBsaWVyLmNwcApAQCAtMyw3ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBT
Y2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTgzLDI1
ICs4MywyMSBAQCBpbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjpsdW1p
bmFuY2UoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbAogI2lmIFVTRShBQ0NFTEVSQVRFKQog
dm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtQWNjZWxlcmF0
ZWQoUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyKSBjb25zdAogewotICAgIGF1dG8mIHBpeGVsQXJy
YXkgPSBwaXhlbEJ1ZmZlci5kYXRhKCk7CisgICAgYXV0byogcGl4ZWxCeXRlcyA9IHBpeGVsQnVm
ZmVyLmJ5dGVzKCk7CiAgICAgYXV0byBidWZmZXJTaXplID0gcGl4ZWxCdWZmZXIuc2l6ZSgpOwot
Ci0gICAgQVNTRVJUKHBpeGVsQXJyYXkubGVuZ3RoKCkgPT0gYnVmZmVyU2l6ZS5hcmVhKCkgKiA0
KTsKLSAgICAKICAgICBjb25zdCBpbnQzMl90IGRpdmlzb3IgPSAyNTY7Ci0gICAgdWludDhfdCog
ZGF0YSA9IHBpeGVsQXJyYXkuZGF0YSgpOwogCiAgICAgdkltYWdlX0J1ZmZlciBzcmM7CiAgICAg
c3JjLndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOwogICAgIHNyYy5oZWlnaHQgPSBidWZmZXJT
aXplLmhlaWdodCgpOwogICAgIHNyYy5yb3dCeXRlcyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7
Ci0gICAgc3JjLmRhdGEgPSBkYXRhOworICAgIHNyYy5kYXRhID0gcGl4ZWxCeXRlczsKICAgICAK
ICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7CiAgICAgZGVzdC53aWR0aCA9IGJ1ZmZlclNpemUud2lk
dGgoKTsKICAgICBkZXN0LmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0KCk7CiAgICAgZGVzdC5y
b3dCeXRlcyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0gICAgZGVzdC5kYXRhID0gZGF0YTsK
KyAgICBkZXN0LmRhdGEgPSBwaXhlbEJ5dGVzOwogCiAgICAgc3dpdGNoIChtX2VmZmVjdC50eXBl
KCkpIHsKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgpAQCAtMTkyLDUzICsx
ODgsNTIgQEAgdm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3Jt
QWNjZWxlcmF0ZWQoUGl4ZWxCdWZmZXImIHBpeGVsQnUKIAogdm9pZCBGRUNvbG9yTWF0cml4U29m
dHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtVW5hY2NlbGVyYXRlZChQaXhlbEJ1ZmZlciYgcGl4
ZWxCdWZmZXIpIGNvbnN0CiB7Ci0gICAgYXV0byYgcGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLmRh
dGEoKTsKLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS5sZW5ndGgo
KTsKKyAgICBhdXRvIHBpeGVsQnl0ZUxlbmd0aCA9IHBpeGVsQnVmZmVyLmJ5dGVMZW5ndGgoKTsK
IAogICAgIHN3aXRjaCAobV9lZmZlY3QudHlwZSgpKSB7CiAgICAgY2FzZSBGRUNPTE9STUFUUklY
X1RZUEVfVU5LTk9XTjoKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhf
VFlQRV9NQVRSSVg6Ci0gICAgICAgIGZvciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsg
cGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQp
IHsKLSAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZz
ZXQpOwotICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRl
T2Zmc2V0ICsgMSk7Ci0gICAgICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBp
eGVsQnl0ZU9mZnNldCArIDIpOwotICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5
Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CisgICAgICAgIGZvciAodW5zaWduZWQgcGl4ZWxC
eXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxCeXRlTGVuZ3RoOyBwaXhlbEJ5
dGVPZmZzZXQgKz0gNCkgeworICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxCdWZmZXIuaXRl
bShwaXhlbEJ5dGVPZmZzZXQpOworICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEJ1ZmZl
ci5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEpOworICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBp
eGVsQnVmZmVyLml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7CisgICAgICAgICAgICBmbG9hdCBh
bHBoYSA9IHBpeGVsQnVmZmVyLml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CiAgICAgICAgICAg
ICBtYXRyaXgocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgICAgICAgICAgcGl4ZWxBcnJh
eS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQo
cGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQo
cGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChw
aXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7CisgICAgICAgICAgICBwaXhlbEJ1ZmZlci5zZXQo
cGl4ZWxCeXRlT2Zmc2V0LCByZWQpOworICAgICAgICAgICAgcGl4ZWxCdWZmZXIuc2V0KHBpeGVs
Qnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKKyAgICAgICAgICAgIHBpeGVsQnVmZmVyLnNldChwaXhl
bEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKKyAgICAgICAgICAgIHBpeGVsQnVmZmVyLnNldChwaXhl
bEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKICAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKICAgICBjYXNlIEZFQ09MT1JNQVRS
SVhfVFlQRV9IVUVST1RBVEU6Ci0gICAgICAgIGZvciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0
ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0
ICs9IDQpIHsKLSAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5
dGVPZmZzZXQpOwotICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4
ZWxCeXRlT2Zmc2V0ICsgMSk7Ci0gICAgICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5p
dGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOwotICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhl
bEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CisgICAgICAgIGZvciAodW5zaWduZWQg
cGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxCeXRlTGVuZ3RoOyBw
aXhlbEJ5dGVPZmZzZXQgKz0gNCkgeworICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxCdWZm
ZXIuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOworICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhl
bEJ1ZmZlci5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEpOworICAgICAgICAgICAgZmxvYXQgYmx1
ZSA9IHBpeGVsQnVmZmVyLml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7CisgICAgICAgICAgICBm
bG9hdCBhbHBoYSA9IHBpeGVsQnVmZmVyLml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CiAgICAg
ICAgICAgICBzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShyZWQsIGdyZWVuLCBibHVlKTsKLSAgICAgICAg
ICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKLSAgICAgICAgICAgIHBp
eGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKLSAgICAgICAgICAgIHBp
eGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJsdWUpOwotICAgICAgICAgICAgcGl4
ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGEpOworICAgICAgICAgICAgcGl4
ZWxCdWZmZXIuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKKyAgICAgICAgICAgIHBpeGVsQnVm
ZmVyLnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7CisgICAgICAgICAgICBwaXhlbEJ1
ZmZlci5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7CisgICAgICAgICAgICBwaXhlbEJ1
ZmZlci5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGEpOwogICAgICAgICB9CiAgICAgICAg
IGJyZWFrOwogCiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZz
ZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewotICAgICAgICAg
ICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7Ci0gICAgICAg
ICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsK
LSAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0
ICsgMik7Ci0gICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5
dGVPZmZzZXQgKyAzKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAw
OyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEJ5dGVMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0
KSB7CisgICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEJ1ZmZlci5pdGVtKHBpeGVsQnl0ZU9m
ZnNldCk7CisgICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQnVmZmVyLml0ZW0ocGl4ZWxC
eXRlT2Zmc2V0ICsgMSk7CisgICAgICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxCdWZmZXIuaXRl
bShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKKyAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxC
dWZmZXIuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKICAgICAgICAgICAgIGx1bWluYW5jZShy
ZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhl
bEJ5dGVPZmZzZXQsIHJlZCk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVP
ZmZzZXQgKyAxLCBncmVlbik7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVP
ZmZzZXQgKyAyLCBibHVlKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9m
ZnNldCArIDMsIGFscGhhKTsKKyAgICAgICAgICAgIHBpeGVsQnVmZmVyLnNldChwaXhlbEJ5dGVP
ZmZzZXQsIHJlZCk7CisgICAgICAgICAgICBwaXhlbEJ1ZmZlci5zZXQocGl4ZWxCeXRlT2Zmc2V0
ICsgMSwgZ3JlZW4pOworICAgICAgICAgICAgcGl4ZWxCdWZmZXIuc2V0KHBpeGVsQnl0ZU9mZnNl
dCArIDIsIGJsdWUpOworICAgICAgICAgICAgcGl4ZWxCdWZmZXIuc2V0KHBpeGVsQnl0ZU9mZnNl
dCArIDMsIGFscGhhKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
Q29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdh
cmVBcHBsaWVyLmNwcAppbmRleCA0ZjRiMzIwMTNlMWEuLjEyODcxNTFhOGU5MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNv
bXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0
d2FyZUFwcGxpZXIuY3BwCkBAIC00LDcgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBT
Y2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMS0yMDIyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTExNCwxNiArMTE0LDE1IEBAIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFw
cGxpZXI6Okxvb2t1cFRhYmxlIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpCiAKIHZv
aWQgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybShQaXhl
bEJ1ZmZlciYgcGl4ZWxCdWZmZXIpIGNvbnN0CiB7Ci0gICAgYXV0byYgcGl4ZWxBcnJheSA9IHBp
eGVsQnVmZmVyLmRhdGEoKTsKLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxB
cnJheS5sZW5ndGgoKTsKLSAgICB1aW50OF90KiBkYXRhID0gcGl4ZWxBcnJheS5kYXRhKCk7Cisg
ICAgYXV0byogZGF0YSA9IHBpeGVsQnVmZmVyLmJ5dGVzKCk7CisgICAgYXV0byBwaXhlbEJ5dGVM
ZW5ndGggPSBwaXhlbEJ1ZmZlci5ieXRlTGVuZ3RoKCk7CiAKICAgICBhdXRvIHJlZFRhYmxlICAg
PSBjb21wdXRlTG9va3VwVGFibGUobV9lZmZlY3QucmVkRnVuY3Rpb24oKSk7CiAgICAgYXV0byBn
cmVlblRhYmxlID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fZWZmZWN0LmdyZWVuRnVuY3Rpb24oKSk7
CiAgICAgYXV0byBibHVlVGFibGUgID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fZWZmZWN0LmJsdWVG
dW5jdGlvbigpKTsKICAgICBhdXRvIGFscGhhVGFibGUgPSBjb21wdXRlTG9va3VwVGFibGUobV9l
ZmZlY3QuYWxwaGFGdW5jdGlvbigpKTsKIAotICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQg
PSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsK
KyAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEJ5
dGVMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKICAgICAgICAgZGF0YVtwaXhlbE9mZnNldF0g
ICAgID0gcmVkVGFibGVbZGF0YVtwaXhlbE9mZnNldF1dOwogICAgICAgICBkYXRhW3BpeGVsT2Zm
c2V0ICsgMV0gPSBncmVlblRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAxXV07CiAgICAgICAgIGRh
dGFbcGl4ZWxPZmZzZXQgKyAyXSA9IGJsdWVUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgMl1dOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVy
LmNwcAppbmRleCAyOGExNmNlNzViYmMuLjNiYzMzMWE1YWE1YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNv
ZnR3YXJlQXBwbGllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5jcHAKQEAgLTQsNyAr
NCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4K
ICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTQwLDEzICsxNDAsMTMg
QEAgYm9vbCBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlBcml0aG1ldGljKEZpbHRl
ckltYWdlJiBpbnB1dCwgRmlsdGVySW1hZ2UKICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVj
dCA9IHJlc3VsdC5hYnNvbHV0ZUltYWdlUmVjdFJlbGF0aXZlVG8oaW5wdXQyKTsKICAgICBpbnB1
dDIuY29weVBpeGVsQnVmZmVyKCpkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBlZmZlY3RCRHJhd2lu
Z1JlY3QpOwogCi0gICAgYXV0byYgc291cmNlUGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQnVmZmVy
LT5kYXRhKCk7Ci0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGF1dG8qIHNvdXJjZVBpeGVsQnl0ZXMgPSBzb3VyY2VQ
aXhlbEJ1ZmZlci0+Ynl0ZXMoKTsKKyAgICBhdXRvKiBkZXN0aW5hdGlvblBpeGVsQnl0ZXMgPSBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5ieXRlcygpOwogCi0gICAgaW50IGxlbmd0aCA9IHNvdXJj
ZVBpeGVsQXJyYXkubGVuZ3RoKCk7Ci0gICAgQVNTRVJUKGxlbmd0aCA9PSBzdGF0aWNfY2FzdDxp
bnQ+KGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5sZW5ndGgoKSkpOworICAgIGF1dG8gbGVuZ3RoID0g
c291cmNlUGl4ZWxCdWZmZXItPmJ5dGVMZW5ndGgoKTsKKyAgICBBU1NFUlQobGVuZ3RoID09IGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXItPmJ5dGVMZW5ndGgoKSk7CiAjaWYgIUhBVkUoQVJNX05FT05f
SU5UUklOU0lDUykKLSAgICBhcHBseVBsYXRmb3JtQXJpdGhtZXRpYyhzb3VyY2VQaXhlbEFycmF5
LmRhdGEoKSwgZGVzdGluYXRpb25QaXhlbEFycmF5LmRhdGEoKSwgbGVuZ3RoLCBtX2VmZmVjdC5r
MSgpLCBtX2VmZmVjdC5rMigpLCBtX2VmZmVjdC5rMygpLCBtX2VmZmVjdC5rNCgpKTsKKyAgICBh
cHBseVBsYXRmb3JtQXJpdGhtZXRpYyhzb3VyY2VQaXhlbEJ5dGVzLCBkZXN0aW5hdGlvblBpeGVs
Qnl0ZXMsIGxlbmd0aCwgbV9lZmZlY3QuazEoKSwgbV9lZmZlY3QuazIoKSwgbV9lZmZlY3QuazMo
KSwgbV9lZmZlY3QuazQoKSk7CiAjZW5kaWYKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVD
b252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxp
ZXIuY3BwCmluZGV4IGU2MTQxMjA0ZDA1Yi4uNmJlMGIzMjFjZDA3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVN
YXRyaXhTb2Z0d2FyZUFwcGxpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5j
cHAKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8emhlcmN6
ZWdAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtOTksMTcgKzk5LDE3IEBA
IGlubGluZSB1aW50OF90IEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmNsYW1wUkdC
QVZhbHVlKGZsb2F0IGNoYW5uZWwsIHVpCiAgICAgcmV0dXJuIGNoYW5uZWw7CiB9CiAKLWlubGlu
ZSB2b2lkIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNldERlc3RpbmF0aW9uUGl4
ZWxzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2VQaXhlbHMsIFVpbnQ4Q2xhbXBlZEFy
cmF5JiBkZXN0UGl4ZWxzLCBpbnQmIHBpeGVsLCBmbG9hdCogdG90YWxzLCBmbG9hdCBkaXZpc29y
LCBmbG9hdCBiaWFzLCBib29sIHByZXNlcnZlQWxwaGFWYWx1ZXMpCitpbmxpbmUgdm9pZCBGRUNv
bnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzZXREZXN0aW5hdGlvblBpeGVscyhjb25zdCBQ
aXhlbEJ1ZmZlciYgc291cmNlUGl4ZWxCdWZmZXIsIFBpeGVsQnVmZmVyJiBkZXN0aW5hdGlvblBp
eGVsQnVmZmVyLCBpbnQmIHBpeGVsLCBmbG9hdCogdG90YWxzLCBmbG9hdCBkaXZpc29yLCBmbG9h
dCBiaWFzLCBib29sIHByZXNlcnZlQWxwaGFWYWx1ZXMpCiB7CiAgICAgdWludDhfdCBtYXhBbHBo
YSA9IHByZXNlcnZlQWxwaGFWYWx1ZXMgPyAyNTUgOiBjbGFtcFJHQkFWYWx1ZSh0b3RhbHNbM10g
LyBkaXZpc29yICsgYmlhcyk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpCi0gICAg
ICAgIGRlc3RQaXhlbHMuc2V0KHBpeGVsKyssIGNsYW1wUkdCQVZhbHVlKHRvdGFsc1tpXSAvIGRp
dmlzb3IgKyBiaWFzLCBtYXhBbHBoYSkpOworICAgICAgICBkZXN0aW5hdGlvblBpeGVsQnVmZmVy
LnNldChwaXhlbCsrLCBjbGFtcFJHQkFWYWx1ZSh0b3RhbHNbaV0gLyBkaXZpc29yICsgYmlhcywg
bWF4QWxwaGEpKTsKIAogICAgIGlmIChwcmVzZXJ2ZUFscGhhVmFsdWVzKSB7Ci0gICAgICAgIGRl
c3RQaXhlbHMuc2V0KHBpeGVsLCBzb3VyY2VQaXhlbHMuaXRlbShwaXhlbCkpOworICAgICAgICBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyLnNldChwaXhlbCwgc291cmNlUGl4ZWxCdWZmZXIuaXRlbShw
aXhlbCkpOwogICAgICAgICArK3BpeGVsOwogICAgIH0gZWxzZQotICAgICAgICBkZXN0UGl4ZWxz
LnNldChwaXhlbCsrLCBtYXhBbHBoYSk7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIu
c2V0KHBpeGVsKyssIG1heEFscGhhKTsKIH0KIAogaW5saW5lIGludCBGRUNvbnZvbHZlTWF0cml4
U29mdHdhcmVBcHBsaWVyOjpnZXRQaXhlbFZhbHVlKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLCBpbnQgeCwgaW50IHkpCkBAIC0xNzAsMTEgKzE3MCwxMSBAQCBpbmxpbmUgdm9pZCBG
RUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzZXRJbnRlcmlvclBpeGVscyhQYWludGlu
Z0RhdGEmIHBhaQogICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKIAogICAgICAgICAgICAgd2hp
bGUgKGtlcm5lbFZhbHVlID49IDApIHsKLSAgICAgICAgICAgICAgICB0b3RhbHNbMF0gKz0gcGFp
bnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4o
cGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7Ci0gICAgICAg
ICAgICAgICAgdG90YWxzWzFdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFs
dWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0o
a2VybmVsUGl4ZWwrKykpOwotICAgICAgICAgICAgICAgIHRvdGFsc1syXSArPSBwYWludGluZ0Rh
dGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGlu
Z0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKyspKTsKKyAgICAgICAgICAgICAg
ICB0b3RhbHNbMF0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBz
dGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNvdXJjZVBpeGVsQnVmZmVyLml0ZW0oa2Vy
bmVsUGl4ZWwrKykpOworICAgICAgICAgICAgICAgIHRvdGFsc1sxXSArPSBwYWludGluZ0RhdGEu
a2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0Rh
dGEuc291cmNlUGl4ZWxCdWZmZXIuaXRlbShrZXJuZWxQaXhlbCsrKSk7CisgICAgICAgICAgICAg
ICAgdG90YWxzWzJdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICog
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zb3VyY2VQaXhlbEJ1ZmZlci5pdGVtKGtl
cm5lbFBpeGVsKyspKTsKICAgICAgICAgICAgICAgICBpZiAoIXBhaW50aW5nRGF0YS5wcmVzZXJ2
ZUFscGhhKQotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRhLmtl
cm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRh
LnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCkpOworICAgICAgICAgICAgICAgICAgICB0
b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0
aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNvdXJjZVBpeGVsQnVmZmVyLml0ZW0oa2VybmVs
UGl4ZWwpKTsKICAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsOwogICAgICAgICAgICAgICAg
IC0ta2VybmVsVmFsdWU7CiAgICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7CkBAIC0xODMs
NyArMTgzLDcgQEAgaW5saW5lIHZvaWQgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6
c2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWkKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzKHBhaW50aW5n
RGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRv
dGFscywgcGFpbnRpbmdEYXRhLmRpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzLCBwYWludGluZ0Rh
dGEucHJlc2VydmVBbHBoYSk7CisgICAgICAgICAgICBzZXREZXN0aW5hdGlvblBpeGVscyhwYWlu
dGluZ0RhdGEuc291cmNlUGl4ZWxCdWZmZXIsIHBhaW50aW5nRGF0YS5kZXN0aW5hdGlvblBpeGVs
QnVmZmVyLCBwaXhlbCwgdG90YWxzLCBwYWludGluZ0RhdGEuZGl2aXNvciwgcGFpbnRpbmdEYXRh
LmJpYXMsIHBhaW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhhKTsKICAgICAgICAgICAgIHN0YXJ0S2Vy
bmVsUGl4ZWwgKz0gNDsKICAgICAgICAgfQogICAgICAgICBwaXhlbCArPSB4SW5jcmVhc2U7CkBA
IC0yMjIsMTIgKzIyMiwxMiBAQCBpbmxpbmUgdm9pZCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVB
cHBsaWVyOjpzZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aQogICAgICAgICAgICAg
d2hpbGUgKGtlcm5lbFZhbHVlID49IDApIHsKICAgICAgICAgICAgICAgICBpbnQgcGl4ZWxJbmRl
eCA9IGdldFBpeGVsVmFsdWUocGFpbnRpbmdEYXRhLCBrZXJuZWxQaXhlbFgsIGtlcm5lbFBpeGVs
WSk7CiAgICAgICAgICAgICAgICAgaWYgKHBpeGVsSW5kZXggPj0gMCkgewotICAgICAgICAgICAg
ICAgICAgICB0b3RhbHNbMF0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1
ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShw
aXhlbEluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgIHRvdGFsc1sxXSArPSBwYWludGluZ0Rh
dGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGlu
Z0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXggKyAxKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHRvdGFsc1syXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVl
XSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBp
eGVsSW5kZXggKyAyKSk7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsc1swXSArPSBwYWludGlu
Z0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWlu
dGluZ0RhdGEuc291cmNlUGl4ZWxCdWZmZXIuaXRlbShwaXhlbEluZGV4KSk7CisgICAgICAgICAg
ICAgICAgICAgIHRvdGFsc1sxXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZh
bHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc291cmNlUGl4ZWxCdWZmZXIu
aXRlbShwaXhlbEluZGV4ICsgMSkpOworICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMl0gKz0g
cGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9h
dD4ocGFpbnRpbmdEYXRhLnNvdXJjZVBpeGVsQnVmZmVyLml0ZW0ocGl4ZWxJbmRleCArIDIpKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFwYWludGluZ0RhdGEucHJl
c2VydmVBbHBoYSAmJiBwaXhlbEluZGV4ID49IDApCi0gICAgICAgICAgICAgICAgICAgIHRvdGFs
c1szXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19j
YXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXggKyAz
KSk7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsc1szXSArPSBwYWludGluZ0RhdGEua2VybmVs
TWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc291
cmNlUGl4ZWxCdWZmZXIuaXRlbShwaXhlbEluZGV4ICsgMykpOwogICAgICAgICAgICAgICAgICsr
a2VybmVsUGl4ZWxYOwogICAgICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7CiAgICAgICAgICAg
ICAgICAgaWYgKCEtLXdpZHRoKSB7CkBAIC0yMzcsNyArMjM3LDcgQEAgaW5saW5lIHZvaWQgRkVD
b252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6c2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRh
JiBwYWludGkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IHNldERlc3RpbmF0aW9uUGl4ZWxzKHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGlu
Z0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgcGFpbnRpbmdEYXRhLmRpdmlzb3Is
IHBhaW50aW5nRGF0YS5iaWFzLCBwYWludGluZ0RhdGEucHJlc2VydmVBbHBoYSk7CisgICAgICAg
ICAgICBzZXREZXN0aW5hdGlvblBpeGVscyhwYWludGluZ0RhdGEuc291cmNlUGl4ZWxCdWZmZXIs
IHBhaW50aW5nRGF0YS5kZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBwaXhlbCwgdG90YWxzLCBwYWlu
dGluZ0RhdGEuZGl2aXNvciwgcGFpbnRpbmdEYXRhLmJpYXMsIHBhaW50aW5nRGF0YS5wcmVzZXJ2
ZUFscGhhKTsKICAgICAgICAgICAgICsrc3RhcnRLZXJuZWxQaXhlbFg7CiAgICAgICAgIH0KICAg
ICAgICAgcGl4ZWwgKz0geEluY3JlYXNlOwpAQCAtMzAwLDE0ICszMDAsMTEgQEAgYm9vbCBGRUNv
bnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBG
aWx0ZXJJbWFnZVZlY3QKICAgICBpZiAoIXNvdXJjZVBpeGVsQnVmZmVyKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBzb3VyY2VQaXhlbEFycmF5ID0gc291cmNlUGl4ZWxCdWZm
ZXItPmRhdGEoKTsKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgCiAgICAgYXV0byBwYWludFNpemUgPSByZXN1bHQu
YWJzb2x1dGVJbWFnZVJlY3QoKS5zaXplKCk7CiAKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdE
YXRhID0gewotICAgICAgICBzb3VyY2VQaXhlbEFycmF5LAotICAgICAgICBkZXN0aW5hdGlvblBp
eGVsQXJyYXksCisgICAgICAgICpzb3VyY2VQaXhlbEJ1ZmZlciwKKyAgICAgICAgKmRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIsCiAgICAgICAgIHBhaW50U2l6ZS53aWR0aCgpLAogICAgICAgICBwYWlu
dFNpemUuaGVpZ2h0KCksCiAgICAgICAgIG1fZWZmZWN0Lmtlcm5lbFNpemUoKSwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVD
b252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVy
LmgKaW5kZXggNTNhMThhNjI5NDk2Li44OGMzNTJmODQ3M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJp
eFNvZnR3YXJlQXBwbGllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5oCkBAIC00
NSw4ICs0NSw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBGaWx0ZXJJbWFnZSYgcmVzdWx0KSBjb25zdCBm
aW5hbDsKIAogICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewotICAgICAgICBjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheTsKLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkmIGRz
dFBpeGVsQXJyYXk7CisgICAgICAgIGNvbnN0IFBpeGVsQnVmZmVyJiBzb3VyY2VQaXhlbEJ1ZmZl
cjsKKyAgICAgICAgUGl4ZWxCdWZmZXImIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXI7CiAgICAgICAg
IGludCB3aWR0aDsKICAgICAgICAgaW50IGhlaWdodDsKIApAQCAtNjAsNyArNjAsNyBAQCBwcml2
YXRlOgogICAgIH07CiAKICAgICBzdGF0aWMgaW5saW5lIHVpbnQ4X3QgY2xhbXBSR0JBVmFsdWUo
ZmxvYXQgY2hhbm5lbCwgdWludDhfdCBtYXggPSAyNTUpOwotICAgIHN0YXRpYyBpbmxpbmUgdm9p
ZCBzZXREZXN0aW5hdGlvblBpeGVscyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlUGl4
ZWxzLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdFBpeGVscywgaW50JiBwaXhlbCwgZmxvYXQqIHRv
dGFscywgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgYm9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVz
KTsKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgc2V0RGVzdGluYXRpb25QaXhlbHMoY29uc3QgUGl4
ZWxCdWZmZXImIHNvdXJjZVBpeGVsQnVmZmVyLCBQaXhlbEJ1ZmZlciYgZGVzdGluYXRpb25QaXhl
bEJ1ZmZlciwgaW50JiBwaXhlbCwgZmxvYXQqIHRvdGFscywgZmxvYXQgZGl2aXNvciwgZmxvYXQg
YmlhcywgYm9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzKTsKIAogICAgIHN0YXRpYyBpbmxpbmUgaW50
IGdldFBpeGVsVmFsdWUoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5KTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdh
cmVBcHBsaWVyLmNwcAppbmRleCAxMjE2NGUzNzhjMjkuLmY3ZmM0NWI3NzAyZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURp
c3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURpc3BsYWNlbWVudE1hcFNvZnR3YXJl
QXBwbGllci5jcHAKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIx
LTIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtNTgsOCArNTgsNiBAQCBib29sIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVy
OjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySQogICAgIGlmICghZGVz
dGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byYg
ZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwot
CiAgICAgYXV0byBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXN1bHQuYWJzb2x1dGVJbWFnZVJlY3RS
ZWxhdGl2ZVRvKGlucHV0KTsKICAgICBhdXRvIGlucHV0UGl4ZWxCdWZmZXIgPSBpbnB1dC5nZXRQ
aXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBlZmZlY3RB
RHJhd2luZ1JlY3QpOwogCkBAIC03MCw5ICs2OCw3IEBAIGJvb2wgRkVEaXNwbGFjZW1lbnRNYXBT
b2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJ
CiAgICAgaWYgKCFpbnB1dFBpeGVsQnVmZmVyIHx8ICFkaXNwbGFjZW1lbnRQaXhlbEJ1ZmZlcikK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byYgaW5wdXRQaXhlbEFycmF5ID0gaW5w
dXRQaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIGF1dG8mIGRpc3BsYWNlbWVudFBpeGVsQXJyYXkg
PSBkaXNwbGFjZW1lbnRQaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIEFTU0VSVChpbnB1dFBpeGVs
QXJyYXkubGVuZ3RoKCkgPT0gZGlzcGxhY2VtZW50UGl4ZWxBcnJheS5sZW5ndGgoKSk7CisgICAg
QVNTRVJUKGlucHV0UGl4ZWxCdWZmZXItPmJ5dGVMZW5ndGgoKSA9PSBkaXNwbGFjZW1lbnRQaXhl
bEJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKIAogICAgIGF1dG8gcGFpbnRTaXplID0gcmVzdWx0LmFi
c29sdXRlSW1hZ2VSZWN0KCkuc2l6ZSgpOwogICAgIGF1dG8gc2NhbGUgPSBmaWx0ZXIucmVzb2x2
ZWRTaXplKHsgbV9lZmZlY3Quc2NhbGUoKSwgbV9lZmZlY3Quc2NhbGUoKSB9KTsKQEAgLTk0LDE2
ICs5MCwxNiBAQCBib29sIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjphcHBseShj
b25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySQogICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHBhaW50U2l6ZS53aWR0aCgpOyArK3gpIHsKICAgICAgICAgICAgIGludCBkZXN0aW5h
dGlvbkluZGV4ID0gbGluZVN0YXJ0T2Zmc2V0ICsgeCAqIDQ7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGludCBzcmNYID0geCArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclggKiBk
aXNwbGFjZW1lbnRQaXhlbEFycmF5Lml0ZW0oZGVzdGluYXRpb25JbmRleCArIGRpc3BsYWNlbWVu
dENoYW5uZWxYKSArIHNjYWxlZE9mZnNldFgpOwotICAgICAgICAgICAgaW50IHNyY1kgPSB5ICsg
c3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWSAqIGRpc3BsYWNlbWVudFBpeGVsQXJyYXku
aXRlbShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFkpICsgc2NhbGVkT2Zm
c2V0WSk7CisgICAgICAgICAgICBpbnQgc3JjWCA9IHggKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxl
Rm9yQ29sb3JYICogZGlzcGxhY2VtZW50UGl4ZWxCdWZmZXItPml0ZW0oZGVzdGluYXRpb25JbmRl
eCArIGRpc3BsYWNlbWVudENoYW5uZWxYKSArIHNjYWxlZE9mZnNldFgpOworICAgICAgICAgICAg
aW50IHNyY1kgPSB5ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWSAqIGRpc3BsYWNl
bWVudFBpeGVsQnVmZmVyLT5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFjZW1lbnRDaGFu
bmVsWSkgKyBzY2FsZWRPZmZzZXRZKTsKIAotICAgICAgICAgICAgdW5zaWduZWQqIGRlc3RpbmF0
aW9uUGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZGVzdGluYXRpb25QaXhl
bEFycmF5LmRhdGEoKSArIGRlc3RpbmF0aW9uSW5kZXgpOworICAgICAgICAgICAgdW5zaWduZWQq
IGRlc3RpbmF0aW9uUGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlci0+Ynl0ZXMoKSArIGRlc3RpbmF0aW9uSW5kZXgpOwogICAgICAgICAg
ICAgaWYgKHNyY1ggPCAwIHx8IHNyY1ggPj0gcGFpbnRTaXplLndpZHRoKCkgfHwgc3JjWSA8IDAg
fHwgc3JjWSA+PSBwYWludFNpemUuaGVpZ2h0KCkpIHsKICAgICAgICAgICAgICAgICAqZGVzdGlu
YXRpb25QaXhlbFB0ciA9IDA7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICpkZXN0aW5hdGlvblBpeGVsUHRyID0gKnJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQqPihpbnB1dFBpeGVsQXJyYXkuZGF0YSgpICsgYnl0ZU9mZnNldE9mUGl4ZWwo
c3JjWCwgc3JjWSwgcm93Qnl0ZXMpKTsKKyAgICAgICAgICAgICpkZXN0aW5hdGlvblBpeGVsUHRy
ID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihpbnB1dFBpeGVsQnVmZmVyLT5ieXRlcygp
ICsgYnl0ZU9mZnNldE9mUGl4ZWwoc3JjWCwgc3JjWSwgcm93Qnl0ZXMpKTsKICAgICAgICAgfQog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0
d2FyZUFwcGxpZXIuY3BwCmluZGV4IDQ0N2M4OTVkMTk4NC4uNmRiMDNjNDQzOWQ5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
RHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXIu
Y3BwCkBAIC02NSw5ICs2NSw4IEBAIGJvb2wgRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyOjph
cHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VWCiAgICAgaWYgKCFw
aXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byYgc291cmNlUGl4
ZWxBcnJheSA9IHBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgY29udGV4dFNoYWRvdy5ibHVyTGF5
ZXJJbWFnZShzb3VyY2VQaXhlbEFycmF5LmRhdGEoKSwgcGl4ZWxCdWZmZXItPnNpemUoKSwgNCAq
IHBpeGVsQnVmZmVyLT5zaXplKCkud2lkdGgoKSk7Ci0gICAgCisgICAgY29udGV4dFNoYWRvdy5i
bHVyTGF5ZXJJbWFnZShwaXhlbEJ1ZmZlci0+Ynl0ZXMoKSwgcGl4ZWxCdWZmZXItPnNpemUoKSwg
NCAqIHBpeGVsQnVmZmVyLT5zaXplKCkud2lkdGgoKSk7CisKICAgICByZXN1bHRJbWFnZS0+cHV0
UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBzaGFkb3dBcmVhKTsKIAogICAgIHJlc3VsdENvbnRl
eHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFw
cGxpZXIuY3BwCmluZGV4IGE4NmE5ZmQwYWVhNS4uNGY2ZTU1YWM1YWY1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFR2F1c3Np
YW5CbHVyU29mdHdhcmVBcHBsaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmNw
cApAQCAtNSw3ICs1LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGty
aXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KICAqIENv
cHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMiBBcHBsZSwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC03MywxMCArNzMsMTAgQEAg
aW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6Omtlcm5lbFBvc2l0aW9u
KGludCBibHVySXRlcmF0aW9uLCB1bnMKIH0KIAogLy8gVGhpcyBmdW5jdGlvbiBvbmx5IG9wZXJh
dGVzIG9uIEFscGhhIGNoYW5uZWwuCi1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJl
QXBwbGllcjo6Ym94Qmx1ckFscGhhT25seShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4
ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksIHVuc2lnbmVkIGR4LCBp
bnQmIGR4TGVmdCwgaW50JiBkeFJpZ2h0LCBpbnQmIHN0cmlkZSwgaW50JiBzdHJpZGVMaW5lLCBp
bnQmIGVmZmVjdFdpZHRoLCBpbnQmIGVmZmVjdEhlaWdodCwgY29uc3QgaW50JiBtYXhLZXJuZWxT
aXplKQoraW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJB
bHBoYU9ubHkoY29uc3QgUGl4ZWxCdWZmZXImIHNyY1BpeGVsQnVmZmVyLCBQaXhlbEJ1ZmZlciYg
ZHN0UGl4ZWxCdWZmZXIsIHVuc2lnbmVkIGR4LCBpbnQmIGR4TGVmdCwgaW50JiBkeFJpZ2h0LCBp
bnQmIHN0cmlkZSwgaW50JiBzdHJpZGVMaW5lLCBpbnQmIGVmZmVjdFdpZHRoLCBpbnQmIGVmZmVj
dEhlaWdodCwgY29uc3QgaW50JiBtYXhLZXJuZWxTaXplKQogewotICAgIGNvbnN0IHVpbnQ4X3Qq
IHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5LmRhdGEoKTsKLSAgICB1aW50OF90KiBkc3REYXRhID0g
ZHN0UGl4ZWxBcnJheS5kYXRhKCk7CisgICAgY29uc3QgdWludDhfdCogc3JjRGF0YSA9IHNyY1Bp
eGVsQnVmZmVyLmJ5dGVzKCk7CisgICAgdWludDhfdCogZHN0RGF0YSA9IGRzdFBpeGVsQnVmZmVy
LmJ5dGVzKCk7CiAgICAgLy8gTWVtb3J5IGFsaWdubWVudCBpczogUkdCQSwgemVyby1pbmRleCBi
YXNlZC4KICAgICBjb25zdCBpbnQgY2hhbm5lbCA9IDM7CiAKQEAgLTExMywxNCArMTEzLDE0IEBA
IGlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyQWxwaGFP
bmx5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFyCiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBGRUdhdXNz
aWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1cihjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksIHVuc2lnbmVk
IGR4LCBpbnQgZHhMZWZ0LCBpbnQgZHhSaWdodCwgaW50IHN0cmlkZSwgaW50IHN0cmlkZUxpbmUs
IGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCwgYm9vbCBhbHBoYUltYWdlLCBFZGdl
TW9kZVR5cGUgZWRnZU1vZGUpCitpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBw
bGllcjo6Ym94Qmx1cihjb25zdCBQaXhlbEJ1ZmZlciYgc3JjUGl4ZWxCdWZmZXIsIFBpeGVsQnVm
ZmVyJiBkc3RQaXhlbEJ1ZmZlciwgdW5zaWduZWQgZHgsIGludCBkeExlZnQsIGludCBkeFJpZ2h0
LCBpbnQgc3RyaWRlLCBpbnQgc3RyaWRlTGluZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0
SGVpZ2h0LCBib29sIGFscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKIHsKICAgICBj
b25zdCBpbnQgbWF4S2VybmVsU2l6ZSA9IHN0ZDo6bWluKGR4UmlnaHQsIGVmZmVjdFdpZHRoKTsK
ICAgICBpZiAoYWxwaGFJbWFnZSkKLSAgICAgICAgcmV0dXJuIGJveEJsdXJBbHBoYU9ubHkoc3Jj
UGl4ZWxBcnJheSwgZHN0UGl4ZWxBcnJheSwgZHgsIGR4TGVmdCwgZHhSaWdodCwgc3RyaWRlLCBz
dHJpZGVMaW5lLCAgZWZmZWN0V2lkdGgsIGVmZmVjdEhlaWdodCwgbWF4S2VybmVsU2l6ZSk7Cisg
ICAgICAgIHJldHVybiBib3hCbHVyQWxwaGFPbmx5KHNyY1BpeGVsQnVmZmVyLCBkc3RQaXhlbEJ1
ZmZlciwgZHgsIGR4TGVmdCwgZHhSaWdodCwgc3RyaWRlLCBzdHJpZGVMaW5lLCAgZWZmZWN0V2lk
dGgsIGVmZmVjdEhlaWdodCwgbWF4S2VybmVsU2l6ZSk7CiAKLSAgICBjb25zdCB1aW50OF90KiBz
cmNEYXRhID0gc3JjUGl4ZWxBcnJheS5kYXRhKCk7Ci0gICAgdWludDhfdCogZHN0RGF0YSA9IGRz
dFBpeGVsQXJyYXkuZGF0YSgpOworICAgIGNvbnN0IHVpbnQ4X3QqIHNyY0RhdGEgPSBzcmNQaXhl
bEJ1ZmZlci5ieXRlcygpOworICAgIHVpbnQ4X3QqIGRzdERhdGEgPSBkc3RQaXhlbEJ1ZmZlci5i
eXRlcygpOwogCiAgICAgLy8gQ29uY2VybmluZyB0aGUgYXJyYXkgd2lkdGgvbGVuZ3RoOiBpdCBp
cyBFbGVtZW50IHNpemUgKyBNYXJnaW4gKyBCb3JkZXIuIFRoZSBudW1iZXIgb2YgcGl4ZWxzIHdp
bGwgYmUKICAgICAvLyBQID0gd2lkdGggKiBoZWlnaHQgKiBjaGFubmVscy4KQEAgLTI0Myw5ICsy
NDMsOSBAQCBpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1
cihjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUAogfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEUp
Ci1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1ckFjY2Vs
ZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRl
bXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemUsIGludCBzdHJpZGUsIGludCBlZmZlY3RXaWR0
aCwgaW50IGVmZmVjdEhlaWdodCkKK2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVB
cHBsaWVyOjpib3hCbHVyQWNjZWxlcmF0ZWQoUGl4ZWxCdWZmZXImIGlvQnVmZmVyLCBQaXhlbEJ1
ZmZlciYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZSwgaW50IHN0cmlkZSwgaW50IGVm
ZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0KQogewotICAgIGlmICghaW9CdWZmZXIuZGF0YSgp
IHx8ICF0ZW1wQnVmZmVyLmRhdGEoKSkgeworICAgIGlmICghaW9CdWZmZXIuYnl0ZXMoKSB8fCAh
dGVtcEJ1ZmZlci5ieXRlcygpKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtMjYwLDEzICsyNjAsMTMgQEAgaW5saW5lIHZvaWQgRkVH
YXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJBY2NlbGVyYXRlZChVaW50OENsYW1w
ZWRBcnJheSYKICAgICAgICAga2VybmVsU2l6ZSArPSAxOwogCiAgICAgdkltYWdlX0J1ZmZlciBl
ZmZlY3RJbkJ1ZmZlcjsKLSAgICBlZmZlY3RJbkJ1ZmZlci5kYXRhID0gc3RhdGljX2Nhc3Q8dm9p
ZCo+KGlvQnVmZmVyLmRhdGEoKSk7CisgICAgZWZmZWN0SW5CdWZmZXIuZGF0YSA9IGlvQnVmZmVy
LmJ5dGVzKCk7CiAgICAgZWZmZWN0SW5CdWZmZXIud2lkdGggPSBlZmZlY3RXaWR0aDsKICAgICBl
ZmZlY3RJbkJ1ZmZlci5oZWlnaHQgPSBlZmZlY3RIZWlnaHQ7CiAgICAgZWZmZWN0SW5CdWZmZXIu
cm93Qnl0ZXMgPSBzdHJpZGU7CiAKICAgICB2SW1hZ2VfQnVmZmVyIGVmZmVjdE91dEJ1ZmZlcjsK
LSAgICBlZmZlY3RPdXRCdWZmZXIuZGF0YSA9IHRlbXBCdWZmZXIuZGF0YSgpOworICAgIGVmZmVj
dE91dEJ1ZmZlci5kYXRhID0gdGVtcEJ1ZmZlci5ieXRlcygpOwogICAgIGVmZmVjdE91dEJ1ZmZl
ci53aWR0aCA9IGVmZmVjdFdpZHRoOwogICAgIGVmZmVjdE91dEJ1ZmZlci5oZWlnaHQgPSBlZmZl
Y3RIZWlnaHQ7CiAgICAgZWZmZWN0T3V0QnVmZmVyLnJvd0J5dGVzID0gc3RyaWRlOwpAQCAtMjg0
LDIwICsyODQsMjAgQEAgaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6
OmJveEJsdXJBY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYKICAgICBmYXN0RnJlZSh0bXBC
dWZmZXIpOwogCiAgICAgLy8gVGhlIGZpbmFsIHJlc3VsdCBzaG91bGQgYmUgc3RvcmVkIGluIGlv
QnVmZmVyLgotICAgIEFTU0VSVChpb0J1ZmZlci5sZW5ndGgoKSA9PSB0ZW1wQnVmZmVyLmxlbmd0
aCgpKTsKLSAgICBtZW1jcHkoaW9CdWZmZXIuZGF0YSgpLCB0ZW1wQnVmZmVyLmRhdGEoKSwgaW9C
dWZmZXIubGVuZ3RoKCkpOworICAgIEFTU0VSVChpb0J1ZmZlci5ieXRlTGVuZ3RoKCkgPT0gdGVt
cEJ1ZmZlci5ieXRlTGVuZ3RoKCkpOworICAgIG1lbWNweShpb0J1ZmZlci5ieXRlcygpLCB0ZW1w
QnVmZmVyLmJ5dGVzKCksIGlvQnVmZmVyLmJ5dGVMZW5ndGgoKSk7CiB9CiAjZW5kaWYKIAotaW5s
aW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJVbmFjY2VsZXJh
dGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBC
dWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgaW50IHN0
cmlkZSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBl
IGVkZ2VNb2RlKQoraW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJv
eEJsdXJVbmFjY2VsZXJhdGVkKFBpeGVsQnVmZmVyJiBpb0J1ZmZlciwgUGl4ZWxCdWZmZXImIHRl
bXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgaW50
IHN0cmlkZSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVU
eXBlIGVkZ2VNb2RlKQogewogICAgIGludCBkeExlZnQgPSAwOwogICAgIGludCBkeFJpZ2h0ID0g
MDsKICAgICBpbnQgZHlMZWZ0ID0gMDsKICAgICBpbnQgZHlSaWdodCA9IDA7CiAgICAgCi0gICAg
VWludDhDbGFtcGVkQXJyYXkqIGZyb21CdWZmZXIgPSAmaW9CdWZmZXI7Ci0gICAgVWludDhDbGFt
cGVkQXJyYXkqIHRvQnVmZmVyID0gJnRlbXBCdWZmZXI7CisgICAgYXV0byogZnJvbUJ1ZmZlciA9
ICZpb0J1ZmZlcjsKKyAgICBhdXRvKiB0b0J1ZmZlciA9ICZ0ZW1wQnVmZmVyOwogCiAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKICAgICAgICAgaWYgKGtlcm5lbFNpemVYKSB7CkBA
IC0zMjksMzQgKzMyOSwzNCBAQCBpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBw
bGllcjo6Ym94Qmx1clVuYWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYQogCiAgICAgLy8gVGhl
IGZpbmFsIHJlc3VsdCBzaG91bGQgYmUgc3RvcmVkIGluIGlvQnVmZmVyLgogICAgIGlmICgmaW9C
dWZmZXIgIT0gZnJvbUJ1ZmZlcikgewotICAgICAgICBBU1NFUlQoaW9CdWZmZXIubGVuZ3RoKCkg
PT0gZnJvbUJ1ZmZlci0+bGVuZ3RoKCkpOwotICAgICAgICBtZW1jcHkoaW9CdWZmZXIuZGF0YSgp
LCBmcm9tQnVmZmVyLT5kYXRhKCksIGlvQnVmZmVyLmxlbmd0aCgpKTsKKyAgICAgICAgQVNTRVJU
KGlvQnVmZmVyLmJ5dGVMZW5ndGgoKSA9PSBmcm9tQnVmZmVyLT5ieXRlTGVuZ3RoKCkpOworICAg
ICAgICBtZW1jcHkoaW9CdWZmZXIuYnl0ZXMoKSwgZnJvbUJ1ZmZlci0+Ynl0ZXMoKSwgaW9CdWZm
ZXIuYnl0ZUxlbmd0aCgpKTsKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVy
U29mdHdhcmVBcHBsaWVyOjpib3hCbHVyR2VuZXJpYyhVaW50OENsYW1wZWRBcnJheSYgaW9CdWZm
ZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25lZCBrZXJuZWxTaXpl
WCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhh
SW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKK2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVy
U29mdHdhcmVBcHBsaWVyOjpib3hCbHVyR2VuZXJpYyhQaXhlbEJ1ZmZlciYgaW9CdWZmZXIsIFBp
eGVsQnVmZmVyJiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2Vy
bmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2Rl
VHlwZSBlZGdlTW9kZSkKIHsKICAgICBpbnQgc3RyaWRlID0gNCAqIHBhaW50U2l6ZS53aWR0aCgp
OwogCiAjaWYgVVNFKEFDQ0VMRVJBVEUpCiAgICAgaWYgKGtlcm5lbFNpemVYID09IGtlcm5lbFNp
emVZICYmIChlZGdlTW9kZSA9PSBFZGdlTW9kZVR5cGU6Ok5vbmUgfHwgZWRnZU1vZGUgPT0gRWRn
ZU1vZGVUeXBlOjpEdXBsaWNhdGUpKSB7Ci0gICAgICAgIGJveEJsdXJBY2NlbGVyYXRlZChpb0J1
ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRo
KCksIHBhaW50U2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGJveEJsdXJBY2NlbGVyYXRlZChpb0J1
ZmZlciwgdGVtcEJ1ZmZlciwga2VybmVsU2l6ZVgsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCks
IHBhaW50U2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKIAot
ICAgIGJveEJsdXJVbmFjY2VsZXJhdGVkKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJuZWxT
aXplWCwga2VybmVsU2l6ZVksIHN0cmlkZSwgcGFpbnRTaXplLCBpc0FscGhhSW1hZ2UsIGVkZ2VN
b2RlKTsKKyAgICBib3hCbHVyVW5hY2NlbGVyYXRlZChpb0J1ZmZlciwgdGVtcEJ1ZmZlciwga2Vy
bmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBzdHJpZGUsIHBhaW50U2l6ZSwgaXNBbHBoYUltYWdlLCBl
ZGdlTW9kZSk7CiB9CiAKICNpZiAhVVNFKEFDQ0VMRVJBVEUpCiBpbmxpbmUgdm9pZCBGRUdhdXNz
aWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1cldvcmtlcihBcHBseVBhcmFtZXRlcnMqIHBh
cmFtZXRlcnMpCiB7CiAgICAgSW50U2l6ZSBwYWludFNpemUocGFyYW1ldGVycy0+d2lkdGgsIHBh
cmFtZXRlcnMtPmhlaWdodCk7Ci0gICAgYm94Qmx1ckdlbmVyaWMoKnBhcmFtZXRlcnMtPmlvUGl4
ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnRtcFBpeGVsQXJyYXksIHBhcmFtZXRlcnMtPmtlcm5lbFNp
emVYLCBwYXJhbWV0ZXJzLT5rZXJuZWxTaXplWSwgcGFpbnRTaXplLCBwYXJhbWV0ZXJzLT5pc0Fs
cGhhSW1hZ2UsIHBhcmFtZXRlcnMtPmVkZ2VNb2RlKTsKKyAgICBib3hCbHVyR2VuZXJpYygqcGFy
YW1ldGVycy0+aW9CdWZmZXIsICpwYXJhbWV0ZXJzLT50ZW1wQnVmZmVyLCBwYXJhbWV0ZXJzLT5r
ZXJuZWxTaXplWCwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVksIHBhaW50U2l6ZSwgcGFyYW1ldGVy
cy0+aXNBbHBoYUltYWdlLCBwYXJhbWV0ZXJzLT5lZGdlTW9kZSk7CiB9CiAjZW5kaWYKIAotaW5s
aW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0oVWlu
dDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJh
eSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBw
YWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCitpbmxp
bmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybShQaXhl
bEJ1ZmZlciYgaW9CdWZmZXIsIFBpeGVsQnVmZmVyJiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJu
ZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBp
c0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKIHsKICNpZiAhVVNFKEFDQ0VMRVJB
VEUpCiAgICAgaW50IHNjYW5saW5lID0gNCAqIHBhaW50U2l6ZS53aWR0aCgpOwpAQCAtMzgzLDE1
ICszODMsMTEgQEAgaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmFw
cGx5UGxhdGZvcm0oVWludDhDbGFtcGVkQXJyYXkmIGlvQnUKICAgICAgICAgICAgICAgICBjdXJy
ZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gYmxvY2tIZWlnaHQgKyAxIDogYmxvY2tIZWln
aHQ7CiAgICAgICAgICAgICAgICAgaW50IGVuZFkgPSBqb2IgPT0gam9icyAtIDEgPyBjdXJyZW50
WSA6IGN1cnJlbnRZICsgZXh0cmFIZWlnaHQ7CiAKLSAgICAgICAgICAgICAgICBpbnQgYmxvY2tT
aXplID0gKGVuZFkgLSBzdGFydFkpICogc2NhbmxpbmU7Ci0gICAgICAgICAgICAgICAgaWYgKCFq
b2IpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmlvUGl4ZWxBcnJheSA9ICZpb0J1ZmZl
cjsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRtcFBpeGVsQXJyYXkgPSAmdG1wUGl4ZWxB
cnJheTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBwYXJh
bXMuaW9QaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
YmxvY2tTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRtcFBpeGVsQXJyYXkgPSBV
aW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChibG9ja1NpemUpOwotICAgICAg
ICAgICAgICAgICAgICBtZW1jcHkocGFyYW1zLmlvUGl4ZWxBcnJheS0+ZGF0YSgpLCBpb0J1ZmZl
ci5kYXRhKCkgKyBzdGFydFkgKiBzY2FubGluZSwgYmxvY2tTaXplKTsKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgSW50U2l6ZSBibG9ja1NpemUgPSB7IHBhaW50U2l6ZS53aWR0
aCgpLCBlbmRZIC0gc3RhcnRZIH07CisKKyAgICAgICAgICAgICAgICBwYXJhbXMuaW9CdWZmZXIg
PSBpb0J1ZmZlci5jcmVhdGVTY3JhdGNoUGl4ZWxCdWZmZXIoYmxvY2tTaXplKTsKKyAgICAgICAg
ICAgICAgICBwYXJhbXMudGVtcEJ1ZmZlciA9IHRlbXBCdWZmZXIuY3JlYXRlU2NyYXRjaFBpeGVs
QnVmZmVyKGJsb2NrU2l6ZSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KHBhcmFtcy5pb0J1ZmZl
ci0+Ynl0ZXMoKSwgaW9CdWZmZXIuYnl0ZXMoKSArIHN0YXJ0WSAqIHNjYW5saW5lLCBwYXJhbXMu
aW9CdWZmZXItPmJ5dGVMZW5ndGgoKSk7CiAKICAgICAgICAgICAgICAgICBwYXJhbXMud2lkdGgg
PSBwYWludFNpemUud2lkdGgoKTsKICAgICAgICAgICAgICAgICBwYXJhbXMuaGVpZ2h0ID0gZW5k
WSAtIHN0YXJ0WTsKQEAgLTQxNyw3ICs0MTMsNyBAQCBpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1
clNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybShVaW50OENsYW1wZWRBcnJheSYgaW9CdQog
ICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uT2Zmc2V0ID0gY3VycmVudFkgKiBzY2FubGluZTsK
ICAgICAgICAgICAgICAgICBzaXplID0gYWRqdXN0ZWRCbG9ja0hlaWdodCAqIHNjYW5saW5lOwog
Ci0gICAgICAgICAgICAgICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEoKSArIGRlc3RpbmF0aW9uT2Zm
c2V0LCBwYXJhbXMuaW9QaXhlbEFycmF5LT5kYXRhKCkgKyBzb3VyY2VPZmZzZXQsIHNpemUpOwor
ICAgICAgICAgICAgICAgIG1lbWNweShpb0J1ZmZlci5ieXRlcygpICsgZGVzdGluYXRpb25PZmZz
ZXQsIHBhcmFtcy5pb0J1ZmZlci0+Ynl0ZXMoKSArIHNvdXJjZU9mZnNldCwgc2l6ZSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTQyNiw3ICs0MjIs
NyBAQCBpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0
Zm9ybShVaW50OENsYW1wZWRBcnJheSYgaW9CdQogI2VuZGlmCiAKICAgICAvLyBUaGUgc2VsZWN0
aW9uIGhlcmUgZXZlbnR1YWxseSBzaG91bGQgaGFwcGVuIGR5bmFtaWNhbGx5IG9uIHNvbWUgcGxh
dGZvcm1zLgotICAgIGJveEJsdXJHZW5lcmljKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJu
ZWxTaXplWCwga2VybmVsU2l6ZVksIHBhaW50U2l6ZSwgaXNBbHBoYUltYWdlLCBlZGdlTW9kZSk7
CisgICAgYm94Qmx1ckdlbmVyaWMoaW9CdWZmZXIsIHRlbXBCdWZmZXIsIGtlcm5lbFNpemVYLCBr
ZXJuZWxTaXplWSwgcGFpbnRTaXplLCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKIH0KIAogYm9v
bCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0
ZXIsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIEZpbHRlckltYWdlJiByZXN1bHQp
IGNvbnN0CkBAIC00NDUsMTIgKzQ0MSwxMSBAQCBib29sIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVB
cHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hZwogICAg
IGF1dG8ga2VybmVsU2l6ZSA9IG1fZWZmZWN0LmNhbGN1bGF0ZUtlcm5lbFNpemUoZmlsdGVyLCB7
IG1fZWZmZWN0LnN0ZERldmlhdGlvblgoKSwgbV9lZmZlY3Quc3RkRGV2aWF0aW9uWSgpIH0pOwog
CiAgICAgSW50U2l6ZSBwYWludFNpemUgPSByZXN1bHQuYWJzb2x1dGVJbWFnZVJlY3QoKS5zaXpl
KCk7Ci0gICAgYXV0byB0bXBJbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRl
VW5pbml0aWFsaXplZChwYWludFNpemUuYXJlYSgpICogNCk7Ci0gICAgaWYgKCF0bXBJbWFnZURh
dGEpCisgICAgYXV0byB0ZW1wQnVmZmVyID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+Y3JlYXRl
U2NyYXRjaFBpeGVsQnVmZmVyKHBhaW50U2l6ZSk7CisgICAgaWYgKCF0ZW1wQnVmZmVyKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgYXBwbHlQbGF0Zm9ybShkZXN0aW5h
dGlvblBpeGVsQXJyYXksICp0bXBJbWFnZURhdGEsIGtlcm5lbFNpemUud2lkdGgoKSwga2VybmVs
U2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplLCByZXN1bHQuaXNBbHBoYUltYWdlKCksIG1fZWZmZWN0
LmVkZ2VNb2RlKCkpOworICAgIGFwcGx5UGxhdGZvcm0oKmRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIs
ICp0ZW1wQnVmZmVyLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNpemUuaGVpZ2h0KCksIHBh
aW50U2l6ZSwgcmVzdWx0LmlzQWxwaGFJbWFnZSgpLCBtX2VmZmVjdC5lZGdlTW9kZSgpKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdh
dXNzaWFuQmx1clNvZnR3YXJlQXBwbGllci5oCmluZGV4IDE4YzA1ZGU2ZWZlZS4uZmY1NzMzNzEx
NzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNv
ZnR3YXJlQXBwbGllci5oCkBAIC00Miw4ICs0Miw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBhcHBs
eShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBGaWx0ZXJJ
bWFnZSYgcmVzdWx0KSBjb25zdCBmaW5hbDsKIAogICAgIHN0cnVjdCBBcHBseVBhcmFtZXRlcnMg
ewotICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGlvUGl4ZWxBcnJheTsKLSAgICAg
ICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiB0bXBQaXhlbEFycmF5OworICAgICAgICBzdGQ6
Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBpb0J1ZmZlcjsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4gdGVtcEJ1ZmZlcjsKICAgICAgICAgaW50IHdpZHRoOwogICAgICAgICBpbnQg
aGVpZ2h0OwogICAgICAgICB1bnNpZ25lZCBrZXJuZWxTaXplWDsKQEAgLTU0LDE2ICs1NCwxNiBA
QCBwcml2YXRlOgogCiAgICAgc3RhdGljIGlubGluZSB2b2lkIGtlcm5lbFBvc2l0aW9uKGludCBi
bHVySXRlcmF0aW9uLCB1bnNpZ25lZCYgcmFkaXVzLCBpbnQmIGRlbHRhTGVmdCwgaW50JiBkZWx0
YVJpZ2h0KTsKIAotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyQWxwaGFPbmx5KGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0
UGl4ZWxBcnJheSwgdW5zaWduZWQgZHgsIGludCYgZHhMZWZ0LCBpbnQmIGR4UmlnaHQsIGludCYg
c3RyaWRlLCBpbnQmIHN0cmlkZUxpbmUsIGludCYgZWZmZWN0V2lkdGgsIGludCYgZWZmZWN0SGVp
Z2h0LCBjb25zdCBpbnQmIG1heEtlcm5lbFNpemUpOwotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBi
b3hCbHVyKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1w
ZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwgdW5zaWduZWQgZHgsIGludCBkeExlZnQsIGludCBkeFJp
Z2h0LCBpbnQgc3RyaWRlLCBpbnQgc3RyaWRlTGluZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZm
ZWN0SGVpZ2h0LCBib29sIGFscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSk7CisgICAgc3RhdGljIGlu
bGluZSB2b2lkIGJveEJsdXJBbHBoYU9ubHkoY29uc3QgUGl4ZWxCdWZmZXImIGlvQnVmZmVyLCBQ
aXhlbEJ1ZmZlciYgdGVtcEJ1ZmZlciwgdW5zaWduZWQgZHgsIGludCYgZHhMZWZ0LCBpbnQmIGR4
UmlnaHQsIGludCYgc3RyaWRlLCBpbnQmIHN0cmlkZUxpbmUsIGludCYgZWZmZWN0V2lkdGgsIGlu
dCYgZWZmZWN0SGVpZ2h0LCBjb25zdCBpbnQmIG1heEtlcm5lbFNpemUpOworICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCBib3hCbHVyKGNvbnN0IFBpeGVsQnVmZmVyJiBpb0J1ZmZlciwgUGl4ZWxCdWZm
ZXImIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGR4LCBpbnQgZHhMZWZ0LCBpbnQgZHhSaWdodCwgaW50
IHN0cmlkZSwgaW50IHN0cmlkZUxpbmUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdo
dCwgYm9vbCBhbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUpOwogCi0gICAgc3RhdGljIGlubGluZSB2
b2lkIGJveEJsdXJBY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4
Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplLCBpbnQgc3RyaWRl
LCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQpOwotICAgIHN0YXRpYyBpbmxpbmUg
dm9pZCBib3hCbHVyVW5hY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVp
bnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWdu
ZWQga2VybmVsU2l6ZVksIGludCBzdHJpZGUsIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0Fs
cGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSk7CisgICAgc3RhdGljIGlubGluZSB2b2lkIGJveEJsdXJB
Y2NlbGVyYXRlZChQaXhlbEJ1ZmZlciYgaW9CdWZmZXIsIFBpeGVsQnVmZmVyJiB0ZW1wQnVmZmVy
LCB1bnNpZ25lZCBrZXJuZWxTaXplLCBpbnQgc3RyaWRlLCBpbnQgZWZmZWN0V2lkdGgsIGludCBl
ZmZlY3RIZWlnaHQpOworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyVW5hY2NlbGVyYXRl
ZChQaXhlbEJ1ZmZlciYgaW9CdWZmZXIsIFBpeGVsQnVmZmVyJiB0ZW1wQnVmZmVyLCB1bnNpZ25l
ZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIGludCBzdHJpZGUsIEludFNpemUm
IHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSk7CiAKLSAgICBzdGF0
aWMgaW5saW5lIHZvaWQgYm94Qmx1ckdlbmVyaWMoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVy
LCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgs
IHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUlt
YWdlLCBFZGdlTW9kZVR5cGUpOworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyR2VuZXJp
YyhQaXhlbEJ1ZmZlciYgaW9CdWZmZXIsIFBpeGVsQnVmZmVyJiB0ZW1wQnVmZmVyLCB1bnNpZ25l
ZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwg
Ym9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSk7CiAgICAgc3RhdGljIGlubGluZSB2b2lk
IGJveEJsdXJXb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKik7CiAKLSAgICBzdGF0aWMgaW5saW5lIHZv
aWQgYXBwbHlQbGF0Zm9ybShVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBl
ZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2Vy
bmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2Rl
VHlwZSk7CisgICAgc3RhdGljIGlubGluZSB2b2lkIGFwcGx5UGxhdGZvcm0oUGl4ZWxCdWZmZXIm
IGlvQnVmZmVyLCBQaXhlbEJ1ZmZlciYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZVgs
IHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUlt
YWdlLCBFZGdlTW9kZVR5cGUpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllci5jcHAKaW5k
ZXggZmE4ZWUzZDU2YTU2Li5lNGIxNDdmNzU1NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlQXBw
bGllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmNwcApAQCAtMSw3ICsxLDcgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqIENvcHlyaWdo
dCAoQykgMjAxMCBab2x0YW4gSGVyY3plZwotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBw
bGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIy
IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM5OSw4ICszOTksNiBAQCBib29sIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxp
ZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJbWFnZVZlYwogICAg
IGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+
ZGF0YSgpOwotCiAgICAgYXV0byBlZmZlY3REcmF3aW5nUmVjdCA9IHJlc3VsdC5hYnNvbHV0ZUlt
YWdlUmVjdFJlbGF0aXZlVG8oaW5wdXQpOwogICAgIGlucHV0LmNvcHlQaXhlbEJ1ZmZlcigqZGVz
dGluYXRpb25QaXhlbEJ1ZmZlciwgZWZmZWN0RHJhd2luZ1JlY3QpOwogCkBAIC00MjgsNyArNDI2
LDcgQEAgYm9vbCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXIm
IGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VWZWMKICAgICBkYXRhLmxpZ2h0U291cmNlID0gJm1f
ZWZmZWN0LmxpZ2h0U291cmNlKCk7CiAgICAgZGF0YS5vcGVyYXRpbmdDb2xvclNwYWNlID0gJm1f
ZWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKTsKIAotICAgIGRhdGEucGl4ZWxzID0gJmRlc3Rp
bmF0aW9uUGl4ZWxBcnJheTsKKyAgICBkYXRhLnBpeGVscyA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXI7CiAgICAgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSA9IHNpemUud2lkdGgoKSAq
IGNQaXhlbFNpemU7CiAgICAgZGF0YS53aWR0aCA9IHNpemUud2lkdGgoKTsKICAgICBkYXRhLmhl
aWdodCA9IHNpemUuaGVpZ2h0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdo
dGluZ1NvZnR3YXJlQXBwbGllci5oCmluZGV4IDM4NzViMGE0YjVkZS4uYzk3NGQ5MjExNWZmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIu
aApAQCAtMTA0LDcgKzEwNCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNvbnN0IExpZ2h0U291cmNl
KiBsaWdodFNvdXJjZTsKICAgICAgICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlKiBvcGVy
YXRpbmdDb2xvclNwYWNlOwogCi0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbHM7Cisg
ICAgICAgIFBpeGVsQnVmZmVyKiBwaXhlbHM7CiAgICAgICAgIGludCB3aWR0aE11bHRpcGxpZWRC
eVBpeGVsU2l6ZTsKICAgICAgICAgaW50IHdpZHRoOwogICAgICAgICBpbnQgaGVpZ2h0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIu
Y3BwCmluZGV4IDFjOWRlZmJjMzJlOC4uZGRkZGEwZWQ1NTA3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNv
ZnR3YXJlQXBwbGllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIuY3BwCkBAIC00LDcg
KzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIEFwcGxlIEluYy4gMjAxNy0yMDIxIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIEFwcGxlIEluYy4gMjAxNy0yMDIy
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQwLDEyICs0MCwx
MiBAQCBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IEZFTW9ycGhvbG9neVNvZnR3
YXJlQXBwbGllcjo6bWluT3JNYXgoY29uc3QgQwogICAgIHJldHVybiBwZXJDb21wb25lbnRNYXgo
YSwgYik7CiB9CiAKLWlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVNb3JwaG9s
b2d5U29mdHdhcmVBcHBsaWVyOjpjb2x1bW5FeHRyZW11bShjb25zdCBVaW50OENsYW1wZWRBcnJh
eSYgc3JjUGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5kLCBpbnQgd2lkdGgs
IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKK2lubGluZSBDb2xvckNvbXBvbmVudHM8dWlu
dDhfdCwgND4gRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjpjb2x1bW5FeHRyZW11bShjb25z
dCBQaXhlbEJ1ZmZlciYgc3JjUGl4ZWxCdWZmZXIsIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVu
ZCwgaW50IHdpZHRoLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCiB7Ci0gICAgYXV0byBl
eHRyZW11bSA9IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6
UkdCQSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oc3JjUGl4ZWxBcnJheS5k
YXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeVN0YXJ0LCB3aWR0aCkpIH0pOworICAgIGF1dG8g
ZXh0cmVtdW0gPSBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6
OlJHQkEgeyAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQnVmZmVy
LmJ5dGVzKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeVN0YXJ0LCB3aWR0aCkpIH0pOwogCiAgICAg
Zm9yIChpbnQgeSA9IHlTdGFydCArIDE7IHkgPCB5RW5kOyArK3kpIHsKLSAgICAgICAgYXV0byBw
aXhlbCA9IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdC
QSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oc3JjUGl4ZWxBcnJheS5kYXRh
KCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeSwgd2lkdGgpKSB9KTsKKyAgICAgICAgYXV0byBwaXhl
bCA9IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSB7
ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oc3JjUGl4ZWxCdWZmZXIuYnl0ZXMo
KSArIHBpeGVsQXJyYXlJbmRleCh4LCB5LCB3aWR0aCkpIH0pOwogICAgICAgICBleHRyZW11bSA9
IG1pbk9yTWF4KGV4dHJlbXVtLCBwaXhlbCwgdHlwZSk7CiAgICAgfQogICAgIHJldHVybiBleHRy
ZW11bTsKQEAgLTY0LDggKzY0LDggQEAgdm9pZCBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6
OmFwcGx5UGxhdGZvcm1HZW5lcmljKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnQKIHsKICAgICBB
U1NFUlQoZW5kWSA+IHN0YXJ0WSk7CiAKLSAgICBjb25zdCBhdXRvJiBzcmNQaXhlbEFycmF5ID0g
KnBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5OwotICAgIGF1dG8mIGRzdFBpeGVsQXJyYXkgPSAq
cGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXk7CisgICAgY29uc3QgYXV0byYgc3JjUGl4ZWxCdWZm
ZXIgPSAqcGFpbnRpbmdEYXRhLnNyY1BpeGVsQnVmZmVyOworICAgIGF1dG8mIGRzdFBpeGVsQnVm
ZmVyID0gKnBhaW50aW5nRGF0YS5kc3RQaXhlbEJ1ZmZlcjsKIAogICAgIGNvbnN0IGludCByYWRp
dXNYID0gcGFpbnRpbmdEYXRhLnJhZGl1c1g7CiAgICAgY29uc3QgaW50IHJhZGl1c1kgPSBwYWlu
dGluZ0RhdGEucmFkaXVzWTsKQEAgLTg2LDE3ICs4NiwxNyBAQCB2b2lkIEZFTW9ycGhvbG9neVNv
ZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWMoY29uc3QgUGFpbnRpbmdEYXRhJiBw
YWludAogCiAgICAgICAgIC8vIFdlIHN0YXJ0IGF0IHRoZSBsZWZ0IGVkZ2UsIHNvIGNvbXB1dGUg
ZXh0cmVtZSBmb3IgdGhlIHJhZGl1c1ggY29sdW1ucy4KICAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCByYWRpdXNYOyArK3gpCi0gICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRy
ZW11bShzcmNQaXhlbEFycmF5LCB4LCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBw
YWludGluZ0RhdGEudHlwZSkpOworICAgICAgICAgICAgZXh0cmVtYS5hcHBlbmQoY29sdW1uRXh0
cmVtdW0oc3JjUGl4ZWxCdWZmZXIsIHgsIHlSYWRpdXNTdGFydCwgeVJhZGl1c0VuZCwgd2lkdGgs
IHBhaW50aW5nRGF0YS50eXBlKSk7CiAKICAgICAgICAgLy8gS2VybmVsIGlzIGZpbGxlZCwgZ2V0
IGV4dHJlbWEgb2YgbmV4dCBjb2x1bW4KICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0
aDsgKyt4KSB7CiAgICAgICAgICAgICBpZiAoeCA8IHdpZHRoIC0gcmFkaXVzWCkKLSAgICAgICAg
ICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5LCB4ICsg
cmFkaXVzWCwgeVJhZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0aCwgcGFpbnRpbmdEYXRhLnR5
cGUpKTsKKyAgICAgICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQ
aXhlbEJ1ZmZlciwgeCArIHJhZGl1c1gsIHlSYWRpdXNTdGFydCwgeVJhZGl1c0VuZCwgd2lkdGgs
IHBhaW50aW5nRGF0YS50eXBlKSk7CiAKICAgICAgICAgICAgIGlmICh4ID4gcmFkaXVzWCkKICAg
ICAgICAgICAgICAgICBleHRyZW1hLnJlbW92ZSgwKTsKIAotICAgICAgICAgICAgdW5zaWduZWQq
IGRlc3RQaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihkc3RQaXhlbEFycmF5LmRh
dGEoKSArIHBpeGVsQXJyYXlJbmRleCh4LCB5LCB3aWR0aCkpOworICAgICAgICAgICAgdW5zaWdu
ZWQqIGRlc3RQaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihkc3RQaXhlbEJ1ZmZl
ci5ieXRlcygpICsgcGl4ZWxBcnJheUluZGV4KHgsIHksIHdpZHRoKSk7CiAgICAgICAgICAgICAq
ZGVzdFBpeGVsID0gbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGtlcm5lbEV4dHJl
bXVtKGV4dHJlbWEsIHBhaW50aW5nRGF0YS50eXBlKSkudmFsdWU7CiAgICAgICAgIH0KICAgICB9
CkBAIC0xNzUsMTMgKzE3NSwxMCBAQCBib29sIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6
YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckltYWdlVgogICAgIGlmICgh
c291cmNlUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8mIHNv
dXJjZVBpeGVsQXJyYXkgPSBzb3VyY2VQaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIGF1dG8mIGRl
c3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQog
ICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7CiAgICAgcGFpbnRpbmdEYXRhLnR5cGUgPSBt
X2VmZmVjdC5tb3JwaG9sb2d5T3BlcmF0b3IoKTsKLSAgICBwYWludGluZ0RhdGEuc3JjUGl4ZWxB
cnJheSA9ICZzb3VyY2VQaXhlbEFycmF5OwotICAgIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5
ID0gJmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsKKyAgICBwYWludGluZ0RhdGEuc3JjUGl4ZWxCdWZm
ZXIgPSAmKnNvdXJjZVBpeGVsQnVmZmVyOworICAgIHBhaW50aW5nRGF0YS5kc3RQaXhlbEJ1ZmZl
ciA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXI7CiAgICAgcGFpbnRpbmdEYXRhLndpZHRoID0gZWZm
ZWN0RHJhd2luZ1JlY3Qud2lkdGgoKTsKICAgICBwYWludGluZ0RhdGEuaGVpZ2h0ID0gZWZmZWN0
RHJhd2luZ1JlY3QuaGVpZ2h0KCk7CiAgICAgcGFpbnRpbmdEYXRhLnJhZGl1c1ggPSByYWRpdXNY
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBs
aWVyLmgKaW5kZXggNjhhZDRhNDMzOGI1Li4zY2Q5YjY1NDEyODYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5
U29mdHdhcmVBcHBsaWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIuaApAQCAtNDgsOCAr
NDgsOCBAQCBwcml2YXRlOgogICAgICAgICBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGU7CiAg
ICAgICAgIGludCByYWRpdXNYOwogICAgICAgICBpbnQgcmFkaXVzWTsKLSAgICAgICAgY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkqIHNyY1BpeGVsQXJyYXk7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFy
cmF5KiBkc3RQaXhlbEFycmF5OworICAgICAgICBjb25zdCBQaXhlbEJ1ZmZlciogc3JjUGl4ZWxC
dWZmZXI7CisgICAgICAgIFBpeGVsQnVmZmVyKiBkc3RQaXhlbEJ1ZmZlcjsKICAgICAgICAgaW50
IHdpZHRoOwogICAgICAgICBpbnQgaGVpZ2h0OwogICAgIH07CkBAIC02NSw3ICs2NSw3IEBAIHBy
aXZhdGU6CiAKICAgICBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBt
YWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgcGl4ZWwp
IHsgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGFzU1JHQkEocGl4ZWwpLnJlc29sdmVkKCkpOyB9
CiAgICAgc3RhdGljIGlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gbWluT3JNYXgo
Y29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBhLCBjb25zdCBDb2xvckNvbXBvbmVu
dHM8dWludDhfdCwgND4mIGIsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUpOwotICAgIHN0YXRpYyBp
bmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNvbHVtbkV4dHJlbXVtKGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBpbnQgeCwgaW50IHlTdGFydCwgaW50IHlF
bmQsIGludCB3aWR0aCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSk7CisgICAgc3RhdGljIGlubGlu
ZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY29sdW1uRXh0cmVtdW0oY29uc3QgUGl4ZWxC
dWZmZXImIHNyY1BpeGVsQnVmZmVyLCBpbnQgeCwgaW50IHlTdGFydCwgaW50IHlFbmQsIGludCB3
aWR0aCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSk7CiAgICAgc3RhdGljIGlubGluZSBDb2xvckNv
bXBvbmVudHM8dWludDhfdCwgND4ga2VybmVsRXh0cmVtdW0oY29uc3QgQ29sdW1uRXh0cmVtYSYg
a2VybmVsLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsKIAogICAgIHN0YXRpYyB2b2lkIGFwcGx5
UGxhdGZvcm1HZW5lcmljKGNvbnN0IFBhaW50aW5nRGF0YSYsIGludCBzdGFydFksIGludCBlbmRZ
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmVB
cHBsaWVyLmNwcAppbmRleCA2ZDY1MDY0NWE3NWMuLjUyZjYyNGZjNzhmNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1
bGVuY2VTb2Z0d2FyZUFwcGxpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyLmNwcApA
QCAtNSw3ICs1LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBp
bmYudS1zemVnZWQuaHU+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR2Fib3IgTG9raSA8bG9raUB3
ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI3MCw3ICsyNzAsNyBA
QCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVy
OjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdQogICAgIHJldHVybiB0b0ludEJhc2VkQ29sb3JDb21w
b25lbnRzKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCk7CiB9CiAKLXZvaWQgRkVUdXJidWxlbmNl
U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpYyhjb25zdCBJbnRSZWN0JiBmaWx0
ZXJSZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIFVpbnQ4Q2xhbXBlZEFycmF5
JiBwaXhlbEFycmF5LCBjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0
YSBzdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKK3ZvaWQgRkVUdXJidWxlbmNlU29m
dHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpYyhjb25zdCBJbnRSZWN0JiBmaWx0ZXJS
ZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIFBpeGVsQnVmZmVyJiBwaXhlbEJ1
ZmZlciwgY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0aXRjaERhdGEgc3RpdGNo
RGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCiB7CiAgICAgQVNTRVJUKGVuZFkgPiBzdGFydFkp
OwogCkBAIC0yODUsNyArMjg1LDcgQEAgdm9pZCBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6
OmFwcGx5UGxhdGZvcm1HZW5lcmljKGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2kKICAgICAgICAg
ICAgIHBvaW50LnNldFgocG9pbnQueCgpICsgMSk7CiAgICAgICAgICAgICBGbG9hdFBvaW50IGxv
Y2FsUG9pbnQgPSBwb2ludC5zY2FsZWQoaW52ZXJzZVNjYWxlLndpZHRoKCksIGludmVyc2VTY2Fs
ZS5oZWlnaHQoKSk7CiAgICAgICAgICAgICBhdXRvIHZhbHVlcyA9IGNhbGN1bGF0ZVR1cmJ1bGVu
Y2VWYWx1ZUZvclBvaW50KHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgbG9jYWxQb2ludCk7Ci0g
ICAgICAgICAgICBwaXhlbEFycmF5LnNldFJhbmdlKHZhbHVlcy5jb21wb25lbnRzLmRhdGEoKSwg
NCwgaW5kZXhPZlBpeGVsQ2hhbm5lbCk7CisgICAgICAgICAgICBwaXhlbEJ1ZmZlci5zZXRSYW5n
ZSh2YWx1ZXMuY29tcG9uZW50cy5kYXRhKCksIDQsIGluZGV4T2ZQaXhlbENoYW5uZWwpOwogICAg
ICAgICAgICAgaW5kZXhPZlBpeGVsQ2hhbm5lbCArPSA0OwogICAgICAgICB9CiAgICAgfQpAQCAt
MjkzLDEwICsyOTMsMTAgQEAgdm9pZCBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5
UGxhdGZvcm1HZW5lcmljKGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2kKIAogdm9pZCBGRVR1cmJ1
bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1Xb3JrZXIoQXBwbHlQYXJhbWV0ZXJz
KiBwYXJhbWV0ZXJzKQogewotICAgIGFwcGx5UGxhdGZvcm1HZW5lcmljKHBhcmFtZXRlcnMtPmZp
bHRlclJlZ2lvbiwgcGFyYW1ldGVycy0+ZmlsdGVyU2NhbGUsICpwYXJhbWV0ZXJzLT5waXhlbEFy
cmF5LCAqcGFyYW1ldGVycy0+cGFpbnRpbmdEYXRhLCBwYXJhbWV0ZXJzLT5zdGl0Y2hEYXRhLCBw
YXJhbWV0ZXJzLT5zdGFydFksIHBhcmFtZXRlcnMtPmVuZFkpOworICAgIGFwcGx5UGxhdGZvcm1H
ZW5lcmljKHBhcmFtZXRlcnMtPmZpbHRlclJlZ2lvbiwgcGFyYW1ldGVycy0+ZmlsdGVyU2NhbGUs
ICpwYXJhbWV0ZXJzLT5waXhlbEJ1ZmZlciwgKnBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFy
YW1ldGVycy0+c3RpdGNoRGF0YSwgcGFyYW1ldGVycy0+c3RhcnRZLCBwYXJhbWV0ZXJzLT5lbmRZ
KTsKIH0KIAotdm9pZCBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0o
Y29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxl
LCBVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0Rh
dGEsIFN0aXRjaERhdGEmIHN0aXRjaERhdGEpCit2b2lkIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBw
bGllcjo6YXBwbHlQbGF0Zm9ybShjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZs
b2F0U2l6ZSYgZmlsdGVyU2NhbGUsIFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgUGFpbnRpbmdE
YXRhJiBwYWludGluZ0RhdGEsIFN0aXRjaERhdGEmIHN0aXRjaERhdGEpCiB7CiAgICAgaW50IGhl
aWdodCA9IGZpbHRlclJlZ2lvbi5oZWlnaHQoKTsKICAgICB1bnNpZ25lZCBhcmVhID0gZmlsdGVy
UmVnaW9uLmFyZWEoKTsKQEAgLTMyMCw3ICszMjAsNyBAQCB2b2lkIEZFVHVyYnVsZW5jZVNvZnR3
YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybShjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24sIGNv
bgogICAgICAgICAgICAgICAgIEFwcGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2Jz
LnBhcmFtZXRlcihpKTsKICAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyUmVnaW9uID0gZmls
dGVyUmVnaW9uOwogICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXJTY2FsZSA9IGZpbHRlclNj
YWxlOwotICAgICAgICAgICAgICAgIHBhcmFtcy5waXhlbEFycmF5ID0gJnBpeGVsQXJyYXk7Cisg
ICAgICAgICAgICAgICAgcGFyYW1zLnBpeGVsQnVmZmVyID0gJnBpeGVsQnVmZmVyOwogICAgICAg
ICAgICAgICAgIHBhcmFtcy5wYWludGluZ0RhdGEgPSAmcGFpbnRpbmdEYXRhOwogICAgICAgICAg
ICAgICAgIHBhcmFtcy5zdGl0Y2hEYXRhID0gc3RpdGNoRGF0YTsKICAgICAgICAgICAgICAgICBw
YXJhbXMuc3RhcnRZID0gc3RhcnRZOwpAQCAtMzM2LDcgKzMzNiw3IEBAIHZvaWQgRkVUdXJidWxl
bmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKGNvbnN0IEludFJlY3QmIGZpbHRlclJl
Z2lvbiwgY29uCiAgICAgfQogCiAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVkIG1v
ZGUgaWYgdGhlcmUgaXMgbm8gcm9vbSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRoZSBwYWludCBhcmVh
IGlzIHRvbyBzbWFsbC4KLSAgICBhcHBseVBsYXRmb3JtR2VuZXJpYyhmaWx0ZXJSZWdpb24sIGZp
bHRlclNjYWxlLCBwaXhlbEFycmF5LCBwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIDAsIGhlaWdo
dCk7CisgICAgYXBwbHlQbGF0Zm9ybUdlbmVyaWMoZmlsdGVyUmVnaW9uLCBmaWx0ZXJTY2FsZSwg
cGl4ZWxCdWZmZXIsIHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsKIH0KIAog
Ym9vbCBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmls
dGVyLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYsIEZpbHRlckltYWdlJiByZXN1bHQpIGNvbnN0
CkBAIC0zNDksMTAgKzM0OSw4IEBAIGJvb2wgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjph
cHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VWCiAgICAgaWYgKHJl
c3VsdFNpemUuYXJlYSgpLmhhc092ZXJmbG93ZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZl
ci0+ZGF0YSgpOwotCiAgICAgaWYgKHJlc3VsdFNpemUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGRl
c3RpbmF0aW9uUGl4ZWxBcnJheS56ZXJvRmlsbCgpOworICAgICAgICBkZXN0aW5hdGlvblBpeGVs
QnVmZmVyLT56ZXJvRmlsbCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTM2
NCw3ICszNjIsNyBAQCBib29sIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29u
c3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckltYWdlVgogCiAgICAgYXV0byBwYWludGlu
Z0RhdGEgPSBpbml0UGFpbnRpbmdEYXRhKG1fZWZmZWN0LnR5cGUoKSwgYmFzZUZyZXF1ZW5jeVgs
IGJhc2VGcmVxdWVuY3lZLCBtX2VmZmVjdC5udW1PY3RhdmVzKCksIG1fZWZmZWN0LnNlZWQoKSwg
bV9lZmZlY3Quc3RpdGNoVGlsZXMoKSwgdGlsZVNpemUpOwogCi0gICAgYXBwbHlQbGF0Zm9ybShy
ZXN1bHQuYWJzb2x1dGVJbWFnZVJlY3QoKSwgZmlsdGVyLmZpbHRlclNjYWxlKCksIGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhKTsKKyAgICBhcHBseVBsYXRm
b3JtKHJlc3VsdC5hYnNvbHV0ZUltYWdlUmVjdCgpLCBmaWx0ZXIuZmlsdGVyU2NhbGUoKSwgKmRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIsIHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5j
ZVNvZnR3YXJlQXBwbGllci5oCmluZGV4IGNmNGQ4OTU5ZWJhNC4uZDZhYzM4NWRhYzNhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVy
LmgKQEAgLTkzLDcgKzkzLDcgQEAgcHJpdmF0ZToKICAgICBzdHJ1Y3QgQXBwbHlQYXJhbWV0ZXJz
IHsKICAgICAgICAgSW50UmVjdCBmaWx0ZXJSZWdpb247CiAgICAgICAgIEZsb2F0U2l6ZSBmaWx0
ZXJTY2FsZTsKLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsQXJyYXk7CisgICAgICAg
IFBpeGVsQnVmZmVyKiBwaXhlbEJ1ZmZlcjsKICAgICAgICAgUGFpbnRpbmdEYXRhKiBwYWludGlu
Z0RhdGE7CiAgICAgICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0YTsKICAgICAgICAgaW50IHN0YXJ0
WTsKQEAgLTExMCw5ICsxMTAsOSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBDb2xvckNvbXBvbmVu
dHM8dWludDhfdCwgND4gdG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBv
bmVudHM8ZmxvYXQsIDQ+JiBmbG9hdENvbXBvbmVudHMpOwogICAgIHN0YXRpYyBDb2xvckNvbXBv
bmVudHM8dWludDhfdCwgND4gY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3Qg
UGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYpOwogCi0gICAgc3Rh
dGljIHZvaWQgYXBwbHlQbGF0Zm9ybUdlbmVyaWMoY29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaW9u
LCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxB
cnJheSwgY29uc3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVu
ZFkpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm1HZW5lcmljKGNvbnN0IEludFJlY3Qm
IGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgUGl4ZWxCdWZmZXIm
LCBjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSk7
CiAgICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybVdvcmtlcihBcHBseVBhcmFtZXRlcnMqKTsK
LSAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtKGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lv
biwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgVWludDhDbGFtcGVkQXJyYXkmIHBpeGVs
QXJyYXksIFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEmKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eVBsYXRmb3JtKGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRTaXplJiBm
aWx0ZXJTY2FsZSwgUGl4ZWxCdWZmZXImLCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRhJik7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0tIAoyLjMyLjAgKEFwcGxlIEdpdC0xMzIpCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459662</attachid>
            <date>2022-05-22 22:43:10 -0700</date>
            <delta_ts>2022-05-23 10:26:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-240777-20220522224309.patch</filename>
            <type>text/plain</type>
            <size>62155</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">RnJvbSBmZTk3Y2I0MjFkZmJiNzljMzY3M2I2YmI0NGM5YjliODIzOGQyYWJjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTYWlkIEFib3UtSGFsbGF3YSA8c2FpZEBhcHBsZS5jb20+CkRh
dGU6IFN1biwgMjIgTWF5IDIwMjIgMjI6NDE6MjMgLTA3MDAKU3ViamVjdDogW1BBVENIXSBbR1BV
IFByb2Nlc3NdIFtGaWx0ZXJzXSBEb24ndCB1c2UgVWludDhDbGFtcGVkQXJyYXkgaW4KIHNvZnR3
YXJlIGZpbHRlciBhcHBsaWVycyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjQwNzc3CgpUaGUgcGxhbiBpcyB0byBhbGxvY2F0ZSB0aGUgRmlsdGVySW1hZ2UgYnVmZmVy
cyBkaWZmZXJlbnRseSBmb3IgR1BVUHJvY2Vzcy4gU28KdGhlIGZpcnN0IHN0ZXAgaXMgdG8gaGlk
ZSB0aGUgdW5kZXJseWluZyBtZW1vcnkgb2YgUGl4ZWxCdWZmZXIgZnJvbSB0aGUgc29mdHdhcmUK
ZmlsdGVyIGFwcGxpZXJzLgotLS0KIC4uLi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVs
QnVmZmVyLmNwcCB8IDUwICsrKysrKysrKysrKy0KIC4uLi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BpeGVsQnVmZmVyLmggICB8IDE2ICsrKy0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9zaXRlLmggICB8ICAyIC0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckltYWdlLmNwcCB8IDM5ICsrKysrLS0tLS0KIC4uLi9zb2Z0d2FyZS9GRUNvbG9yTWF0
cml4U29mdHdhcmVBcHBsaWVyLmNwcCB8IDY5ICsrKysrKysrLS0tLS0tLS0tLQogLi4uL0ZFQ29t
cG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIuY3BwICAgIHwgIDkgKy0tCiAuLi4vc29mdHdh
cmUvRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIuY3BwICAgfCAxMiArLS0KIC4uLi9GRUNvbnZv
bHZlTWF0cml4U29mdHdhcmVBcHBsaWVyLmNwcCAgICAgICB8IDM3ICsrKysrLS0tLS0KIC4uLi9G
RUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyLmggICAgICAgICB8ICA2ICstCiAuLi4vRkVE
aXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIuY3BwICAgICAgfCAxNiArKy0tCiAuLi4vc29m
dHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyLmNwcCAgfCAgNSArLQogLi4uL0ZFR2F1
c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmNwcCAgICAgICAgIHwgNzMgKysrKysrKysrLS0tLS0t
LS0tLQogLi4uL3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmggIHwgMTYg
KystLQogLi4uL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3BwICAgIHwgIDYg
Ky0KIC4uLi9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmggICAgICB8ICAyICst
CiAuLi4vc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmNwcCAgfCAyNSArKyst
LS0tCiAuLi4vc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmggICAgfCAgNiAr
LQogLi4uL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllci5jcHAgIHwgMjAgKysr
LS0KIC4uLi9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuaCAgICB8ICA2ICst
CiAxOSBmaWxlcyBjaGFuZ2VkLCAyMjIgaW5zZXJ0aW9ucygrKSwgMTkzIGRlbGV0aW9ucygtKQoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmNwcApp
bmRleCA3NTQzZjQ3NWEyN2EuLjMyNGQ2MDVjYTY1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjAsOSArMTIwLDU1IEBAIFBpeGVs
QnVmZmVyIFBpeGVsQnVmZmVyOjpkZWVwQ2xvbmUoKSBjb25zdAogICAgIHJldHVybiB7IG1fZm9y
bWF0LCBtX3NpemUsIFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUobV9kYXRhLT5kYXRhKCksIG1f
ZGF0YS0+bGVuZ3RoKCkpIH07CiB9CiAKK3VpbnQ4X3QqIFBpeGVsQnVmZmVyOjpieXRlcygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YS0+ZGF0YSgpOworfQorCitzaXplX3QgUGl4ZWxCdWZm
ZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAoreworICAgIEFTU0VSVChtX2RhdGEtPmJ5dGVMZW5ndGgo
KSA9PSBtX3NpemUuYXJlYSgpICogNCk7CisgICAgcmV0dXJuIG1fZGF0YS0+Ynl0ZUxlbmd0aCgp
OworfQorCitib29sIFBpeGVsQnVmZmVyOjpzZXRSYW5nZShjb25zdCB2b2lkKiBkYXRhLCBzaXpl
X3QgZGF0YUJ5dGVMZW5ndGgsIHNpemVfdCBieXRlT2Zmc2V0KQoreworICAgIGlmICghaXNTdW1T
bWFsbGVyVGhhbk9yRXF1YWwoYnl0ZU9mZnNldCwgZGF0YUJ5dGVMZW5ndGgsIGJ5dGVMZW5ndGgo
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1lbW1vdmUoYnl0ZXMoKSArIGJ5dGVP
ZmZzZXQsIGRhdGEsIGRhdGFCeXRlTGVuZ3RoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBQaXhlbEJ1ZmZlcjo6emVyb1JhbmdlKHNpemVfdCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VC
eXRlTGVuZ3RoKQoreworICAgIGlmICghaXNTdW1TbWFsbGVyVGhhbk9yRXF1YWwoYnl0ZU9mZnNl
dCwgcmFuZ2VCeXRlTGVuZ3RoLCBieXRlTGVuZ3RoKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBtZW1zZXQoYnl0ZXMoKSArIGJ5dGVPZmZzZXQsIDAsIHJhbmdlQnl0ZUxlbmd0aCk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3VpbnQ4X3QgUGl4ZWxCdWZmZXI6Oml0ZW0oc2l6ZV90
IGluZGV4KSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04oaW5kZXggPCBieXRlTGVuZ3RoKCkpOworICAgIHJldHVybiBieXRlcygpW2luZGV4XTsK
K30KKwordm9pZCBQaXhlbEJ1ZmZlcjo6c2V0KHNpemVfdCBpbmRleCwgZG91YmxlIHZhbHVlKQor
eworICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBi
eXRlTGVuZ3RoKCkpOworICAgIGJ5dGVzKClbaW5kZXhdID0gSlNDOjpVaW50OENsYW1wZWRBZGFw
dG9yOjp0b05hdGl2ZUZyb21Eb3VibGUodmFsdWUpOworfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBQaXhlbEJ1ZmZlcjo6Y3JlYXRlU2NyYXRjaFBpeGVsQnVmZmVyKGNvbnN0IEludFNp
emUmIHNpemUpIGNvbnN0Cit7CisgICAgcmV0dXJuIFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUobV9m
b3JtYXQsIHNpemUpOworfQorCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIpCiB7CiAgICAgcmV0dXJuIHRzIDw8ICZw
aXhlbEJ1ZmZlci5kYXRhKCkgPDwgImZvcm1hdCAoICIgPDwgcGl4ZWxCdWZmZXIuZm9ybWF0KCkg
PDwgIikiOwogfQogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAppbmRleCAwNDM0Y2VlYjk4N2YuLjBj
ODRiM2FlOTg2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGl4ZWxCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhl
bEJ1ZmZlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTYxLDYgKzYxLDE4IEBAIHB1YmxpYzoKIAogICAgIFBpeGVsQnVmZmVyIGRlZXBD
bG9uZSgpIGNvbnN0OwogCisgICAgdWludDhfdCogYnl0ZXMoKSBjb25zdDsKKyAgICBzaXplX3Qg
Ynl0ZUxlbmd0aCgpIGNvbnN0OworCisgICAgYm9vbCBzZXRSYW5nZShjb25zdCB2b2lkKiBkYXRh
LCBzaXplX3QgZGF0YUJ5dGVMZW5ndGgsIHNpemVfdCBieXRlT2Zmc2V0KTsKKyAgICBib29sIHpl
cm9SYW5nZShzaXplX3QgYnl0ZU9mZnNldCwgc2l6ZV90IHJhbmdlQnl0ZUxlbmd0aCk7CisgICAg
dm9pZCB6ZXJvRmlsbCgpIHsgemVyb1JhbmdlKDAsIGJ5dGVMZW5ndGgoKSk7IH0KKworICAgIHVp
bnQ4X3QgaXRlbShzaXplX3QgaW5kZXgpIGNvbnN0OworICAgIHZvaWQgc2V0KHNpemVfdCBpbmRl
eCwgZG91YmxlIHZhbHVlKTsKKworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGNyZWF0
ZVNjcmF0Y2hQaXhlbEJ1ZmZlcihjb25zdCBJbnRTaXplJikgY29uc3Q7CisKICAgICB0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGRlY29k
ZShEZWNvZGVyJik7CiAKQEAgLTExOSw0ICsxMzEsNCBAQCB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBQaXhlbEJ1ZmZlcjo6ZGVjb2RlKERlY29kZXIm
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
c2l0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
c2l0ZS5oCmluZGV4IDE5YjY4ZjRhZTlkMi4uNjgwMWI3ZGNmNTRlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCkBA
IC03Myw4ICs3Myw2IEBAIHByaXZhdGU6CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFs
UmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgaW5saW5lIHZvaWQgcGxhdGZvcm1Bcml0aG1ldGljU29mdHdh
cmUoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRl
c3RpbmF0aW9uLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7Ci0KICNp
ZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCiAgICAgdGVtcGxhdGUgPGludCBiMSwgaW50IGI0
PgogICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc05lb24oY29u
c3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxB
cnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJ
bWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckltYWdlLmNwcAppbmRleCBiMTA2ZGYzYjFmZmMuLjgwOGQ0ODViNGNmOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFn
ZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMDAsNDYgKzMwMCw0NSBAQCB2b2lkIEZpbHRlckltYWdlOjpjb3JyZWN0UHJlbXVs
dGlwbGllZFBpeGVsQnVmZmVyKCkKICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVy
IHx8IG1faXNWYWxpZFByZW11bHRpcGxpZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFVpbnQ4
Q2xhbXBlZEFycmF5JiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXItPmRh
dGEoKTsKLSAgICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5LmRhdGEoKTsKLSAgICBp
bnQgcGl4ZWxBcnJheUxlbmd0aCA9IGltYWdlQXJyYXkubGVuZ3RoKCk7CisgICAgdWludDhfdCog
cGl4ZWxCeXRlcyA9IG1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyLT5ieXRlcygpOworICAgIGlu
dCBwaXhlbEJ5dGVMZW5ndGggPSBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlci0+Ynl0ZUxlbmd0
aCgpOwogCiAgICAgLy8gV2UgbXVzdCBoYXZlIGZvdXIgYnl0ZXMgcGVyIHBpeGVsLCBhbmQgY29t
cGxldGUgcGl4ZWxzCi0gICAgQVNTRVJUKCEocGl4ZWxBcnJheUxlbmd0aCAlIDQpKTsKKyAgICBB
U1NFUlQoIShwaXhlbEJ5dGVMZW5ndGggJSA0KSk7CiAKICNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJ
TlNJQ1MpCi0gICAgaWYgKHBpeGVsQXJyYXlMZW5ndGggPj0gNjQpIHsKLSAgICAgICAgdWludDhf
dCogbGFzdFBpeGVsID0gcGl4ZWxEYXRhICsgKHBpeGVsQXJyYXlMZW5ndGggJiB+MHgzZik7Cisg
ICAgaWYgKHBpeGVsQnl0ZUxlbmd0aCA+PSA2NCkgeworICAgICAgICB1aW50OF90KiBsYXN0UGl4
ZWwgPSBwaXhlbEJ5dGVzICsgKHBpeGVsQnl0ZUxlbmd0aCAmIH4weDNmKTsKICAgICAgICAgZG8g
ewotICAgICAgICAgICAgLy8gSW5jcmVtZW50cyBwaXhlbERhdGEgYnkgNjQuCi0gICAgICAgICAg
ICB1aW50OHgxNng0X3Qgc2l4dGVlblBpeGVscyA9IHZsZDRxX3U4KHBpeGVsRGF0YSk7CisgICAg
ICAgICAgICAvLyBJbmNyZW1lbnRzIHBpeGVsQnl0ZXMgYnkgNjQuCisgICAgICAgICAgICB1aW50
OHgxNng0X3Qgc2l4dGVlblBpeGVscyA9IHZsZDRxX3U4KHBpeGVsQnl0ZXMpOwogICAgICAgICAg
ICAgc2l4dGVlblBpeGVscy52YWxbMF0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFswXSwg
c2l4dGVlblBpeGVscy52YWxbM10pOwogICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMV0g
PSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsxXSwgc2l4dGVlblBpeGVscy52YWxbM10pOwog
ICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMl0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxz
LnZhbFsyXSwgc2l4dGVlblBpeGVscy52YWxbM10pOwotICAgICAgICAgICAgdnN0NHFfdTgocGl4
ZWxEYXRhLCBzaXh0ZWVuUGl4ZWxzKTsKLSAgICAgICAgICAgIHBpeGVsRGF0YSArPSA2NDsKLSAg
ICAgICAgfSB3aGlsZSAocGl4ZWxEYXRhIDwgbGFzdFBpeGVsKTsKKyAgICAgICAgICAgIHZzdDRx
X3U4KHBpeGVsQnl0ZXMsIHNpeHRlZW5QaXhlbHMpOworICAgICAgICAgICAgcGl4ZWxCeXRlcyAr
PSA2NDsKKyAgICAgICAgfSB3aGlsZSAocGl4ZWxCeXRlcyA8IGxhc3RQaXhlbCk7CiAKLSAgICAg
ICAgcGl4ZWxBcnJheUxlbmd0aCAmPSAweDNmOwotICAgICAgICBpZiAoIXBpeGVsQXJyYXlMZW5n
dGgpCisgICAgICAgIHBpeGVsQnl0ZUxlbmd0aCAmPSAweDNmOworICAgICAgICBpZiAoIXBpeGVs
Qnl0ZUxlbmd0aCkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKIAotICAgIGlu
dCBudW1QaXhlbHMgPSBwaXhlbEFycmF5TGVuZ3RoIC8gNDsKKyAgICBpbnQgbnVtUGl4ZWxzID0g
cGl4ZWxCeXRlTGVuZ3RoIC8gNDsKIAogICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIHBpeGVsLCBj
aGVja2luZyBhbHBoYSBhbmQgYWRqdXN0aW5nIGNvbG9yIGNvbXBvbmVudHMgaWYgbmVjZXNzYXJ5
CiAgICAgd2hpbGUgKC0tbnVtUGl4ZWxzID49IDApIHsKICAgICAgICAgLy8gQWxwaGEgaXMgdGhl
IDR0aCBieXRlIGluIGEgcGl4ZWwKLSAgICAgICAgdWludDhfdCBhID0gKihwaXhlbERhdGEgKyAz
KTsKKyAgICAgICAgdWludDhfdCBhID0gKihwaXhlbEJ5dGVzICsgMyk7CiAgICAgICAgIC8vIENs
YW1wIGVhY2ggY29tcG9uZW50IHRvIGFscGhhLCBhbmQgaW5jcmVtZW50IHRoZSBwaXhlbCBsb2Nh
dGlvbgogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICAgICAg
aWYgKCpwaXhlbERhdGEgPiBhKQotICAgICAgICAgICAgICAgICpwaXhlbERhdGEgPSBhOwotICAg
ICAgICAgICAgKytwaXhlbERhdGE7CisgICAgICAgICAgICBpZiAoKnBpeGVsQnl0ZXMgPiBhKQor
ICAgICAgICAgICAgICAgICpwaXhlbEJ5dGVzID0gYTsKKyAgICAgICAgICAgICsrcGl4ZWxCeXRl
czsKICAgICAgICAgfQogICAgICAgICAvLyBJbmNyZW1lbnQgZm9yIGFscGhhCi0gICAgICAgICsr
cGl4ZWxEYXRhOworICAgICAgICArK3BpeGVsQnl0ZXM7CiAgICAgfQogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29s
b3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyLmNwcApp
bmRleCAzMTYzYTU2ZGU0MzUuLjMyNzNhNDUwYTM3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdh
cmVBcHBsaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuY3BwCkBAIC0zLDcgKzMs
NyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KLSAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtODMsMjUgKzgzLDIxIEBAIGlubGluZSB2b2lkIEZFQ29sb3JN
YXRyaXhTb2Z0d2FyZUFwcGxpZXI6Omx1bWluYW5jZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4s
IGZsCiAjaWYgVVNFKEFDQ0VMRVJBVEUpCiB2b2lkIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxp
ZXI6OmFwcGx5UGxhdGZvcm1BY2NlbGVyYXRlZChQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIpIGNv
bnN0CiB7Ci0gICAgYXV0byYgcGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLmRhdGEoKTsKKyAgICBh
dXRvKiBwaXhlbEJ5dGVzID0gcGl4ZWxCdWZmZXIuYnl0ZXMoKTsKICAgICBhdXRvIGJ1ZmZlclNp
emUgPSBwaXhlbEJ1ZmZlci5zaXplKCk7Ci0KLSAgICBBU1NFUlQocGl4ZWxBcnJheS5sZW5ndGgo
KSA9PSBidWZmZXJTaXplLmFyZWEoKSAqIDQpOwotICAgIAogICAgIGNvbnN0IGludDMyX3QgZGl2
aXNvciA9IDI1NjsKLSAgICB1aW50OF90KiBkYXRhID0gcGl4ZWxBcnJheS5kYXRhKCk7CiAKICAg
ICB2SW1hZ2VfQnVmZmVyIHNyYzsKICAgICBzcmMud2lkdGggPSBidWZmZXJTaXplLndpZHRoKCk7
CiAgICAgc3JjLmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0KCk7CiAgICAgc3JjLnJvd0J5dGVz
ID0gYnVmZmVyU2l6ZS53aWR0aCgpICogNDsKLSAgICBzcmMuZGF0YSA9IGRhdGE7CisgICAgc3Jj
LmRhdGEgPSBwaXhlbEJ5dGVzOwogICAgIAogICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKICAgICBk
ZXN0LndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOwogICAgIGRlc3QuaGVpZ2h0ID0gYnVmZmVy
U2l6ZS5oZWlnaHQoKTsKICAgICBkZXN0LnJvd0J5dGVzID0gYnVmZmVyU2l6ZS53aWR0aCgpICog
NDsKLSAgICBkZXN0LmRhdGEgPSBkYXRhOworICAgIGRlc3QuZGF0YSA9IHBpeGVsQnl0ZXM7CiAK
ICAgICBzd2l0Y2ggKG1fZWZmZWN0LnR5cGUoKSkgewogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9U
WVBFX1VOS05PV046CkBAIC0xOTIsNTMgKzE4OCw1MiBAQCB2b2lkIEZFQ29sb3JNYXRyaXhTb2Z0
d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1BY2NlbGVyYXRlZChQaXhlbEJ1ZmZlciYgcGl4ZWxC
dQogCiB2b2lkIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1VbmFj
Y2VsZXJhdGVkKFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlcikgY29uc3QKIHsKLSAgICBhdXRvJiBw
aXhlbEFycmF5ID0gcGl4ZWxCdWZmZXIuZGF0YSgpOwotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlM
ZW5ndGggPSBwaXhlbEFycmF5Lmxlbmd0aCgpOworICAgIGF1dG8gcGl4ZWxCeXRlTGVuZ3RoID0g
cGl4ZWxCdWZmZXIuYnl0ZUxlbmd0aCgpOwogCiAgICAgc3dpdGNoIChtX2VmZmVjdC50eXBlKCkp
IHsKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgogICAgICAgICBicmVhazsK
IAogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVu
Z3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewotICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4
ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7Ci0gICAgICAgICAgICBmbG9hdCBncmVlbiA9
IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKLSAgICAgICAgICAgIGZsb2F0
IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7Ci0gICAgICAgICAg
ICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQg
PCBwaXhlbEJ5dGVMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7CisgICAgICAgICAgICBm
bG9hdCByZWQgPSBwaXhlbEJ1ZmZlci5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7CisgICAgICAgICAg
ICBmbG9hdCBncmVlbiA9IHBpeGVsQnVmZmVyLml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7Cisg
ICAgICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxCdWZmZXIuaXRlbShwaXhlbEJ5dGVPZmZzZXQg
KyAyKTsKKyAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxCdWZmZXIuaXRlbShwaXhlbEJ5
dGVPZmZzZXQgKyAzKTsKICAgICAgICAgICAgIG1hdHJpeChyZWQsIGdyZWVuLCBibHVlLCBhbHBo
YSk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7Ci0g
ICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7Ci0g
ICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKLSAg
ICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKKyAg
ICAgICAgICAgIHBpeGVsQnVmZmVyLnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7CisgICAgICAg
ICAgICBwaXhlbEJ1ZmZlci5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOworICAgICAg
ICAgICAgcGl4ZWxCdWZmZXIuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJsdWUpOworICAgICAg
ICAgICAgcGl4ZWxCdWZmZXIuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKICAgICAg
ICAgfQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVS
QVRFOgogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFy
cmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewotICAgICAgICAgICAgZmxvYXQgcmVk
ID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7Ci0gICAgICAgICAgICBmbG9hdCBn
cmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKLSAgICAgICAgICAg
IGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7Ci0gICAg
ICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAz
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVP
ZmZzZXQgPCBwaXhlbEJ5dGVMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7CisgICAgICAg
ICAgICBmbG9hdCByZWQgPSBwaXhlbEJ1ZmZlci5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7CisgICAg
ICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQnVmZmVyLml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsg
MSk7CisgICAgICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxCdWZmZXIuaXRlbShwaXhlbEJ5dGVP
ZmZzZXQgKyAyKTsKKyAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxCdWZmZXIuaXRlbShw
aXhlbEJ5dGVPZmZzZXQgKyAzKTsKICAgICAgICAgICAgIHNhdHVyYXRlQW5kSHVlUm90YXRlKHJl
ZCwgZ3JlZW4sIGJsdWUpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zm
c2V0LCByZWQpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsg
MSwgZ3JlZW4pOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsg
MiwgYmx1ZSk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAz
LCBhbHBoYSk7CisgICAgICAgICAgICBwaXhlbEJ1ZmZlci5zZXQocGl4ZWxCeXRlT2Zmc2V0LCBy
ZWQpOworICAgICAgICAgICAgcGl4ZWxCdWZmZXIuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdy
ZWVuKTsKKyAgICAgICAgICAgIHBpeGVsQnVmZmVyLnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBi
bHVlKTsKKyAgICAgICAgICAgIHBpeGVsQnVmZmVyLnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBh
bHBoYSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEZFQ09MT1JNQVRS
SVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0
ZU9mZnNldCA9IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0
ZU9mZnNldCArPSA0KSB7Ci0gICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0o
cGl4ZWxCeXRlT2Zmc2V0KTsKLSAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5p
dGVtKHBpeGVsQnl0ZU9mZnNldCArIDEpOwotICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVs
QXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKLSAgICAgICAgICAgIGZsb2F0IGFscGhh
ID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQnl0ZUxl
bmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKKyAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBp
eGVsQnVmZmVyLml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKKyAgICAgICAgICAgIGZsb2F0IGdyZWVu
ID0gcGl4ZWxCdWZmZXIuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKKyAgICAgICAgICAgIGZs
b2F0IGJsdWUgPSBwaXhlbEJ1ZmZlci5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOworICAgICAg
ICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEJ1ZmZlci5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMp
OwogICAgICAgICAgICAgbHVtaW5hbmNlKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAgICAg
ICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKLSAgICAgICAgICAg
IHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKLSAgICAgICAgICAg
IHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJsdWUpOwotICAgICAgICAgICAg
cGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGEpOworICAgICAgICAgICAg
cGl4ZWxCdWZmZXIuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKKyAgICAgICAgICAgIHBpeGVs
QnVmZmVyLnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7CisgICAgICAgICAgICBwaXhl
bEJ1ZmZlci5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7CisgICAgICAgICAgICBwaXhl
bEJ1ZmZlci5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGEpOwogICAgICAgICB9CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGll
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIuY3BwCmluZGV4IDRmNGIzMjAxM2Ux
YS4uMTI4NzE1MWE4ZTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllci5jcHAKQEAgLTQsNyArNCw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENv
cHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTE0LDE2ICsxMTQsMTUgQEAgRkVD
b21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6TG9va3VwVGFibGUgRkVDb21wb25lbnRU
cmFuc2ZlclNvZnR3YXJlQXBwbGkKIAogdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVB
cHBsaWVyOjphcHBseVBsYXRmb3JtKFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlcikgY29uc3QKIHsK
LSAgICBhdXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXIuZGF0YSgpOwotICAgIHVuc2lnbmVk
IHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5Lmxlbmd0aCgpOwotICAgIHVpbnQ4X3QqIGRh
dGEgPSBwaXhlbEFycmF5LmRhdGEoKTsKKyAgICBhdXRvKiBkYXRhID0gcGl4ZWxCdWZmZXIuYnl0
ZXMoKTsKKyAgICBhdXRvIHBpeGVsQnl0ZUxlbmd0aCA9IHBpeGVsQnVmZmVyLmJ5dGVMZW5ndGgo
KTsKIAogICAgIGF1dG8gcmVkVGFibGUgICA9IGNvbXB1dGVMb29rdXBUYWJsZShtX2VmZmVjdC5y
ZWRGdW5jdGlvbigpKTsKICAgICBhdXRvIGdyZWVuVGFibGUgPSBjb21wdXRlTG9va3VwVGFibGUo
bV9lZmZlY3QuZ3JlZW5GdW5jdGlvbigpKTsKICAgICBhdXRvIGJsdWVUYWJsZSAgPSBjb21wdXRl
TG9va3VwVGFibGUobV9lZmZlY3QuYmx1ZUZ1bmN0aW9uKCkpOwogICAgIGF1dG8gYWxwaGFUYWJs
ZSA9IGNvbXB1dGVMb29rdXBUYWJsZShtX2VmZmVjdC5hbHBoYUZ1bmN0aW9uKCkpOwogCi0gICAg
Zm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgcGl4ZWxBcnJheUxl
bmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgeworICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQg
PSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQnl0ZUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewog
ICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0XSAgICAgPSByZWRUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0
XV07CiAgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAxXSA9IGdyZWVuVGFibGVbZGF0YVtwaXhl
bE9mZnNldCArIDFdXTsKICAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDJdID0gYmx1ZVRhYmxl
W2RhdGFbcGl4ZWxPZmZzZXQgKyAyXV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIuY3BwCmluZGV4IDI4YTE2Y2U3NWJiYy4uM2JjMzMx
YTVhYTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29m
dHdhcmVBcHBsaWVyLmNwcApAQCAtNCw3ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBF
cmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsg
U2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEtMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0xNDAsMTMgKzE0MCwxMyBAQCBib29sIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBs
aWVyOjphcHBseUFyaXRobWV0aWMoRmlsdGVySW1hZ2UmIGlucHV0LCBGaWx0ZXJJbWFnZQogICAg
IEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVzdWx0LmFic29sdXRlSW1hZ2VSZWN0UmVs
YXRpdmVUbyhpbnB1dDIpOwogICAgIGlucHV0Mi5jb3B5UGl4ZWxCdWZmZXIoKmRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIsIGVmZmVjdEJEcmF3aW5nUmVjdCk7CiAKLSAgICBhdXRvJiBzb3VyY2VQaXhl
bEFycmF5ID0gc291cmNlUGl4ZWxCdWZmZXItPmRhdGEoKTsKLSAgICBhdXRvJiBkZXN0aW5hdGlv
blBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgYXV0byog
c291cmNlUGl4ZWxCeXRlcyA9IHNvdXJjZVBpeGVsQnVmZmVyLT5ieXRlcygpOworICAgIGF1dG8q
IGRlc3RpbmF0aW9uUGl4ZWxCeXRlcyA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmJ5dGVzKCk7
CiAKLSAgICBpbnQgbGVuZ3RoID0gc291cmNlUGl4ZWxBcnJheS5sZW5ndGgoKTsKLSAgICBBU1NF
UlQobGVuZ3RoID09IHN0YXRpY19jYXN0PGludD4oZGVzdGluYXRpb25QaXhlbEFycmF5Lmxlbmd0
aCgpKSk7CisgICAgYXV0byBsZW5ndGggPSBzb3VyY2VQaXhlbEJ1ZmZlci0+Ynl0ZUxlbmd0aCgp
OworICAgIEFTU0VSVChsZW5ndGggPT0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+Ynl0ZUxlbmd0
aCgpKTsKICNpZiAhSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgIGFwcGx5UGxhdGZvcm1B
cml0aG1ldGljKHNvdXJjZVBpeGVsQXJyYXkuZGF0YSgpLCBkZXN0aW5hdGlvblBpeGVsQXJyYXku
ZGF0YSgpLCBsZW5ndGgsIG1fZWZmZWN0LmsxKCksIG1fZWZmZWN0LmsyKCksIG1fZWZmZWN0Lmsz
KCksIG1fZWZmZWN0Lms0KCkpOworICAgIGFwcGx5UGxhdGZvcm1Bcml0aG1ldGljKHNvdXJjZVBp
eGVsQnl0ZXMsIGRlc3RpbmF0aW9uUGl4ZWxCeXRlcywgbGVuZ3RoLCBtX2VmZmVjdC5rMSgpLCBt
X2VmZmVjdC5rMigpLCBtX2VmZmVjdC5rMygpLCBtX2VmZmVjdC5rNCgpKTsKICNlbmRpZgogICAg
IHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVD
b252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5jcHAKaW5kZXggZTYxNDEyMDRkMDViLi42YmUw
YjMyMWNkMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZv
bHZlTWF0cml4U29mdHdhcmVBcHBsaWVyLmNwcApAQCAtNCw3ICs0LDcgQEAKICAqIENvcHlyaWdo
dCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChD
KSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEtMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC05OSwxNyArOTksMTcgQEAgaW5saW5lIHVpbnQ4X3QgRkVDb252b2x2ZU1hdHJp
eFNvZnR3YXJlQXBwbGllcjo6Y2xhbXBSR0JBVmFsdWUoZmxvYXQgY2hhbm5lbCwgdWkKICAgICBy
ZXR1cm4gY2hhbm5lbDsKIH0KIAotaW5saW5lIHZvaWQgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJl
QXBwbGllcjo6c2V0RGVzdGluYXRpb25QaXhlbHMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNv
dXJjZVBpeGVscywgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RQaXhlbHMsIGludCYgcGl4ZWwsIGZs
b2F0KiB0b3RhbHMsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGJvb2wgcHJlc2VydmVBbHBo
YVZhbHVlcykKK2lubGluZSB2b2lkIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNl
dERlc3RpbmF0aW9uUGl4ZWxzKGNvbnN0IFBpeGVsQnVmZmVyJiBzb3VyY2VQaXhlbEJ1ZmZlciwg
UGl4ZWxCdWZmZXImIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGludCYgcGl4ZWwsIGZsb2F0KiB0
b3RhbHMsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGJvb2wgcHJlc2VydmVBbHBoYVZhbHVl
cykKIHsKICAgICB1aW50OF90IG1heEFscGhhID0gcHJlc2VydmVBbHBoYVZhbHVlcyA/IDI1NSA6
IGNsYW1wUkdCQVZhbHVlKHRvdGFsc1szXSAvIGRpdmlzb3IgKyBiaWFzKTsKICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IDM7ICsraSkKLSAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwrKywgY2xh
bXBSR0JBVmFsdWUodG90YWxzW2ldIC8gZGl2aXNvciArIGJpYXMsIG1heEFscGhhKSk7CisgICAg
ICAgIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIuc2V0KHBpeGVsKyssIGNsYW1wUkdCQVZhbHVlKHRv
dGFsc1tpXSAvIGRpdmlzb3IgKyBiaWFzLCBtYXhBbHBoYSkpOwogCiAgICAgaWYgKHByZXNlcnZl
QWxwaGFWYWx1ZXMpIHsKLSAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwsIHNvdXJjZVBpeGVs
cy5pdGVtKHBpeGVsKSk7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIuc2V0KHBpeGVs
LCBzb3VyY2VQaXhlbEJ1ZmZlci5pdGVtKHBpeGVsKSk7CiAgICAgICAgICsrcGl4ZWw7CiAgICAg
fSBlbHNlCi0gICAgICAgIGRlc3RQaXhlbHMuc2V0KHBpeGVsKyssIG1heEFscGhhKTsKKyAgICAg
ICAgZGVzdGluYXRpb25QaXhlbEJ1ZmZlci5zZXQocGl4ZWwrKywgbWF4QWxwaGEpOwogfQogCiBp
bmxpbmUgaW50IEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmdldFBpeGVsVmFsdWUo
Y29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSkKQEAgLTE3MCwx
MSArMTcwLDExIEBAIGlubGluZSB2b2lkIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6
OnNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpCiAgICAgICAgICAgICB0b3RhbHNb
M10gPSAwOwogCiAgICAgICAgICAgICB3aGlsZSAoa2VybmVsVmFsdWUgPj0gMCkgewotICAgICAg
ICAgICAgICAgIHRvdGFsc1swXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZh
bHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVt
KGtlcm5lbFBpeGVsKyspKTsKLSAgICAgICAgICAgICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdE
YXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRp
bmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7Ci0gICAgICAgICAgICAg
ICAgdG90YWxzWzJdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICog
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVs
UGl4ZWwrKykpOworICAgICAgICAgICAgICAgIHRvdGFsc1swXSArPSBwYWludGluZ0RhdGEua2Vy
bmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEu
c291cmNlUGl4ZWxCdWZmZXIuaXRlbShrZXJuZWxQaXhlbCsrKSk7CisgICAgICAgICAgICAgICAg
dG90YWxzWzFdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zb3VyY2VQaXhlbEJ1ZmZlci5pdGVtKGtlcm5l
bFBpeGVsKyspKTsKKyAgICAgICAgICAgICAgICB0b3RhbHNbMl0gKz0gcGFpbnRpbmdEYXRhLmtl
cm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRh
LnNvdXJjZVBpeGVsQnVmZmVyLml0ZW0oa2VybmVsUGl4ZWwrKykpOwogICAgICAgICAgICAgICAg
IGlmICghcGFpbnRpbmdEYXRhLnByZXNlcnZlQWxwaGEpCi0gICAgICAgICAgICAgICAgICAgIHRv
dGFsc1szXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRp
Y19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVs
KSk7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsc1szXSArPSBwYWludGluZ0RhdGEua2VybmVs
TWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc291
cmNlUGl4ZWxCdWZmZXIuaXRlbShrZXJuZWxQaXhlbCkpOwogICAgICAgICAgICAgICAgICsra2Vy
bmVsUGl4ZWw7CiAgICAgICAgICAgICAgICAgLS1rZXJuZWxWYWx1ZTsKICAgICAgICAgICAgICAg
ICBpZiAoIS0td2lkdGgpIHsKQEAgLTE4Myw3ICsxODMsNyBAQCBpbmxpbmUgdm9pZCBGRUNvbnZv
bHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEm
IHBhaQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgc2V0
RGVzdGluYXRpb25QaXhlbHMocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXksIHBhaW50aW5nRGF0
YS5kc3RQaXhlbEFycmF5LCBwaXhlbCwgdG90YWxzLCBwYWludGluZ0RhdGEuZGl2aXNvciwgcGFp
bnRpbmdEYXRhLmJpYXMsIHBhaW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhhKTsKKyAgICAgICAgICAg
IHNldERlc3RpbmF0aW9uUGl4ZWxzKHBhaW50aW5nRGF0YS5zb3VyY2VQaXhlbEJ1ZmZlciwgcGFp
bnRpbmdEYXRhLmRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIHBpeGVsLCB0b3RhbHMsIHBhaW50aW5n
RGF0YS5kaXZpc29yLCBwYWludGluZ0RhdGEuYmlhcywgcGFpbnRpbmdEYXRhLnByZXNlcnZlQWxw
aGEpOwogICAgICAgICAgICAgc3RhcnRLZXJuZWxQaXhlbCArPSA0OwogICAgICAgICB9CiAgICAg
ICAgIHBpeGVsICs9IHhJbmNyZWFzZTsKQEAgLTIyMiwxMiArMjIyLDEyIEBAIGlubGluZSB2b2lk
IEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNldE91dGVyUGl4ZWxzKFBhaW50aW5n
RGF0YSYgcGFpbnRpCiAgICAgICAgICAgICB3aGlsZSAoa2VybmVsVmFsdWUgPj0gMCkgewogICAg
ICAgICAgICAgICAgIGludCBwaXhlbEluZGV4ID0gZ2V0UGl4ZWxWYWx1ZShwYWludGluZ0RhdGEs
IGtlcm5lbFBpeGVsWCwga2VybmVsUGl4ZWxZKTsKICAgICAgICAgICAgICAgICBpZiAocGl4ZWxJ
bmRleCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRvdGFsc1swXSArPSBwYWludGluZ0Rh
dGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGlu
Z0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgdG90YWxzWzFdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICog
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJ
bmRleCArIDEpKTsKLSAgICAgICAgICAgICAgICAgICAgdG90YWxzWzJdICs9IHBhaW50aW5nRGF0
YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5n
RGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCArIDIpKTsKKyAgICAgICAgICAgICAg
ICAgICAgdG90YWxzWzBdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVd
ICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zb3VyY2VQaXhlbEJ1ZmZlci5pdGVt
KHBpeGVsSW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IHBhaW50aW5n
RGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50
aW5nRGF0YS5zb3VyY2VQaXhlbEJ1ZmZlci5pdGVtKHBpeGVsSW5kZXggKyAxKSk7CisgICAgICAg
ICAgICAgICAgICAgIHRvdGFsc1syXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5l
bFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc291cmNlUGl4ZWxCdWZm
ZXIuaXRlbShwaXhlbEluZGV4ICsgMikpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBpZiAoIXBhaW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhhICYmIHBpeGVsSW5kZXggPj0gMCkK
LSAgICAgICAgICAgICAgICAgICAgdG90YWxzWzNdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRy
aXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhl
bEFycmF5Lml0ZW0ocGl4ZWxJbmRleCArIDMpKTsKKyAgICAgICAgICAgICAgICAgICAgdG90YWxz
WzNdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zb3VyY2VQaXhlbEJ1ZmZlci5pdGVtKHBpeGVsSW5kZXgg
KyAzKSk7CiAgICAgICAgICAgICAgICAgKytrZXJuZWxQaXhlbFg7CiAgICAgICAgICAgICAgICAg
LS1rZXJuZWxWYWx1ZTsKICAgICAgICAgICAgICAgICBpZiAoIS0td2lkdGgpIHsKQEAgLTIzNyw3
ICsyMzcsNyBAQCBpbmxpbmUgdm9pZCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpz
ZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aQogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHMocGFpbnRpbmdE
YXRhLnNyY1BpeGVsQXJyYXksIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBwaXhlbCwgdG90
YWxzLCBwYWludGluZ0RhdGEuZGl2aXNvciwgcGFpbnRpbmdEYXRhLmJpYXMsIHBhaW50aW5nRGF0
YS5wcmVzZXJ2ZUFscGhhKTsKKyAgICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzKHBhaW50
aW5nRGF0YS5zb3VyY2VQaXhlbEJ1ZmZlciwgcGFpbnRpbmdEYXRhLmRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIsIHBpeGVsLCB0b3RhbHMsIHBhaW50aW5nRGF0YS5kaXZpc29yLCBwYWludGluZ0RhdGEu
YmlhcywgcGFpbnRpbmdEYXRhLnByZXNlcnZlQWxwaGEpOwogICAgICAgICAgICAgKytzdGFydEtl
cm5lbFBpeGVsWDsKICAgICAgICAgfQogICAgICAgICBwaXhlbCArPSB4SW5jcmVhc2U7CkBAIC0z
MDAsMTQgKzMwMCwxMSBAQCBib29sIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFw
cGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdAogICAgIGlmICghc291cmNl
UGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8mIHNvdXJjZVBp
eGVsQXJyYXkgPSBzb3VyY2VQaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIGF1dG8mIGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLSAgICAKICAg
ICBhdXRvIHBhaW50U2l6ZSA9IHJlc3VsdC5hYnNvbHV0ZUltYWdlUmVjdCgpLnNpemUoKTsKIAog
ICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEgPSB7Ci0gICAgICAgIHNvdXJjZVBpeGVsQXJy
YXksCi0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwKKyAgICAgICAgKnNvdXJjZVBpeGVs
QnVmZmVyLAorICAgICAgICAqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwKICAgICAgICAgcGFpbnRT
aXplLndpZHRoKCksCiAgICAgICAgIHBhaW50U2l6ZS5oZWlnaHQoKSwKICAgICAgICAgbV9lZmZl
Y3Qua2VybmVsU2l6ZSgpLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29u
dm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuaAppbmRleCA1M2ExOGE2Mjk0OTYuLjg4YzM1MmY4
NDczZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0
cml4U29mdHdhcmVBcHBsaWVyLmgKQEAgLTQ1LDggKzQ1LDggQEAgcHJpdmF0ZToKICAgICBib29s
IGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIEZp
bHRlckltYWdlJiByZXN1bHQpIGNvbnN0IGZpbmFsOwogCiAgICAgc3RydWN0IFBhaW50aW5nRGF0
YSB7Ci0gICAgICAgIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5OwotICAg
ICAgICBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheTsKKyAgICAgICAgY29uc3QgUGl4
ZWxCdWZmZXImIHNvdXJjZVBpeGVsQnVmZmVyOworICAgICAgICBQaXhlbEJ1ZmZlciYgZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlcjsKICAgICAgICAgaW50IHdpZHRoOwogICAgICAgICBpbnQgaGVpZ2h0
OwogCkBAIC02MCw3ICs2MCw3IEBAIHByaXZhdGU6CiAgICAgfTsKIAogICAgIHN0YXRpYyBpbmxp
bmUgdWludDhfdCBjbGFtcFJHQkFWYWx1ZShmbG9hdCBjaGFubmVsLCB1aW50OF90IG1heCA9IDI1
NSk7Ci0gICAgc3RhdGljIGlubGluZSB2b2lkIHNldERlc3RpbmF0aW9uUGl4ZWxzKGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2VQaXhlbHMsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0UGl4
ZWxzLCBpbnQmIHBpeGVsLCBmbG9hdCogdG90YWxzLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFz
LCBib29sIHByZXNlcnZlQWxwaGFWYWx1ZXMpOworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRE
ZXN0aW5hdGlvblBpeGVscyhjb25zdCBQaXhlbEJ1ZmZlciYgc291cmNlUGl4ZWxCdWZmZXIsIFBp
eGVsQnVmZmVyJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBpbnQmIHBpeGVsLCBmbG9hdCogdG90
YWxzLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBib29sIHByZXNlcnZlQWxwaGFWYWx1ZXMp
OwogCiAgICAgc3RhdGljIGlubGluZSBpbnQgZ2V0UGl4ZWxWYWx1ZShjb25zdCBQYWludGluZ0Rh
dGEmLCBpbnQgeCwgaW50IHkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBs
aWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIuY3BwCmluZGV4IDEyMTY0ZTM3OGMy
OS4uZjdmYzQ1Yjc3MDJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyLmNwcApAQCAtNCw3ICs0LDcgQEAKICAq
IENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29w
eXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJp
Z2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01OCw4ICs1OCw2IEBAIGJvb2wgRkVEaXNw
bGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBj
b25zdCBGaWx0ZXJJCiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5h
dGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KICAgICBhdXRvIGVmZmVjdEFEcmF3aW5nUmVjdCA9
IHJlc3VsdC5hYnNvbHV0ZUltYWdlUmVjdFJlbGF0aXZlVG8oaW5wdXQpOwogICAgIGF1dG8gaW5w
dXRQaXhlbEJ1ZmZlciA9IGlucHV0LmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQsIGVmZmVjdEFEcmF3aW5nUmVjdCk7CiAKQEAgLTcwLDkgKzY4LDcg
QEAgYm9vbCBGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmls
dGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckkKICAgICBpZiAoIWlucHV0UGl4ZWxCdWZmZXIgfHwg
IWRpc3BsYWNlbWVudFBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBh
dXRvJiBpbnB1dFBpeGVsQXJyYXkgPSBpbnB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgYXV0
byYgZGlzcGxhY2VtZW50UGl4ZWxBcnJheSA9IGRpc3BsYWNlbWVudFBpeGVsQnVmZmVyLT5kYXRh
KCk7Ci0gICAgQVNTRVJUKGlucHV0UGl4ZWxBcnJheS5sZW5ndGgoKSA9PSBkaXNwbGFjZW1lbnRQ
aXhlbEFycmF5Lmxlbmd0aCgpKTsKKyAgICBBU1NFUlQoaW5wdXRQaXhlbEJ1ZmZlci0+Ynl0ZUxl
bmd0aCgpID09IGRpc3BsYWNlbWVudFBpeGVsQnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwogCiAgICAg
YXV0byBwYWludFNpemUgPSByZXN1bHQuYWJzb2x1dGVJbWFnZVJlY3QoKS5zaXplKCk7CiAgICAg
YXV0byBzY2FsZSA9IGZpbHRlci5yZXNvbHZlZFNpemUoeyBtX2VmZmVjdC5zY2FsZSgpLCBtX2Vm
ZmVjdC5zY2FsZSgpIH0pOwpAQCAtOTQsMTYgKzkwLDE2IEBAIGJvb2wgRkVEaXNwbGFjZW1lbnRN
YXBTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0
ZXJJCiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgcGFpbnRTaXplLndpZHRoKCk7ICsreCkg
ewogICAgICAgICAgICAgaW50IGRlc3RpbmF0aW9uSW5kZXggPSBsaW5lU3RhcnRPZmZzZXQgKyB4
ICogNDsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaW50IHNyY1ggPSB4ICsgc3RhdGljX2Nh
c3Q8aW50PihzY2FsZUZvckNvbG9yWCAqIGRpc3BsYWNlbWVudFBpeGVsQXJyYXkuaXRlbShkZXN0
aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFgpICsgc2NhbGVkT2Zmc2V0WCk7Ci0g
ICAgICAgICAgICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29sb3JZ
ICogZGlzcGxhY2VtZW50UGl4ZWxBcnJheS5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFj
ZW1lbnRDaGFubmVsWSkgKyBzY2FsZWRPZmZzZXRZKTsKKyAgICAgICAgICAgIGludCBzcmNYID0g
eCArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclggKiBkaXNwbGFjZW1lbnRQaXhlbEJ1
ZmZlci0+aXRlbShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFgpICsgc2Nh
bGVkT2Zmc2V0WCk7CisgICAgICAgICAgICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNfY2FzdDxpbnQ+
KHNjYWxlRm9yQ29sb3JZICogZGlzcGxhY2VtZW50UGl4ZWxCdWZmZXItPml0ZW0oZGVzdGluYXRp
b25JbmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxZKSArIHNjYWxlZE9mZnNldFkpOwogCi0gICAg
ICAgICAgICB1bnNpZ25lZCogZGVzdGluYXRpb25QaXhlbFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQqPihkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpICsgZGVzdGluYXRpb25JbmRl
eCk7CisgICAgICAgICAgICB1bnNpZ25lZCogZGVzdGluYXRpb25QaXhlbFB0ciA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQqPihkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5ieXRlcygpICsgZGVz
dGluYXRpb25JbmRleCk7CiAgICAgICAgICAgICBpZiAoc3JjWCA8IDAgfHwgc3JjWCA+PSBwYWlu
dFNpemUud2lkdGgoKSB8fCBzcmNZIDwgMCB8fCBzcmNZID49IHBhaW50U2l6ZS5oZWlnaHQoKSkg
ewogICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvblBpeGVsUHRyID0gMDsKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgKmRlc3RpbmF0aW9u
UGl4ZWxQdHIgPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGlucHV0UGl4ZWxBcnJheS5k
YXRhKCkgKyBieXRlT2Zmc2V0T2ZQaXhlbChzcmNYLCBzcmNZLCByb3dCeXRlcykpOworICAgICAg
ICAgICAgKmRlc3RpbmF0aW9uUGl4ZWxQdHIgPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+
KGlucHV0UGl4ZWxCdWZmZXItPmJ5dGVzKCkgKyBieXRlT2Zmc2V0T2ZQaXhlbChzcmNYLCBzcmNZ
LCByb3dCeXRlcykpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRHJvcFNoYWRvd1NvZnR3
YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFRHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllci5jcHAKaW5kZXggNDQ3Yzg5NWQx
OTg0Li42ZGIwM2M0NDM5ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
RHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllci5jcHAKQEAgLTY1LDkgKzY1LDggQEAgYm9vbCBGRURy
b3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25z
dCBGaWx0ZXJJbWFnZVYKICAgICBpZiAoIXBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBhdXRvJiBzb3VyY2VQaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsK
LSAgICBjb250ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNvdXJjZVBpeGVsQXJyYXkuZGF0YSgp
LCBwaXhlbEJ1ZmZlci0+c2l6ZSgpLCA0ICogcGl4ZWxCdWZmZXItPnNpemUoKS53aWR0aCgpKTsK
LSAgICAKKyAgICBjb250ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHBpeGVsQnVmZmVyLT5ieXRl
cygpLCBwaXhlbEJ1ZmZlci0+c2l6ZSgpLCA0ICogcGl4ZWxCdWZmZXItPnNpemUoKS53aWR0aCgp
KTsKKwogICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIHNoYWRv
d0FyZWEpOwogCiAgICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9z
aXRlT3BlcmF0b3I6OlNvdXJjZUluKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxp
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllci5jcHAKaW5kZXggYTg2YTlmZDBhZWE1Li40
ZjZlNTVhYzVhZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVz
c2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIuY3BwCkBAIC01LDcgKzUsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChD
KSAyMDEwIElnYWxpYSwgUy5MLgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDIyIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTczLDEwICs3MywxMCBAQCBpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3
YXJlQXBwbGllcjo6a2VybmVsUG9zaXRpb24oaW50IGJsdXJJdGVyYXRpb24sIHVucwogfQogCiAv
LyBUaGlzIGZ1bmN0aW9uIG9ubHkgb3BlcmF0ZXMgb24gQWxwaGEgY2hhbm5lbC4KLWlubGluZSB2
b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyQWxwaGFPbmx5KGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0
UGl4ZWxBcnJheSwgdW5zaWduZWQgZHgsIGludCYgZHhMZWZ0LCBpbnQmIGR4UmlnaHQsIGludCYg
c3RyaWRlLCBpbnQmIHN0cmlkZUxpbmUsIGludCYgZWZmZWN0V2lkdGgsIGludCYgZWZmZWN0SGVp
Z2h0LCBjb25zdCBpbnQmIG1heEtlcm5lbFNpemUpCitpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1
clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1ckFscGhhT25seShjb25zdCBQaXhlbEJ1ZmZlciYgc3Jj
UGl4ZWxCdWZmZXIsIFBpeGVsQnVmZmVyJiBkc3RQaXhlbEJ1ZmZlciwgdW5zaWduZWQgZHgsIGlu
dCYgZHhMZWZ0LCBpbnQmIGR4UmlnaHQsIGludCYgc3RyaWRlLCBpbnQmIHN0cmlkZUxpbmUsIGlu
dCYgZWZmZWN0V2lkdGgsIGludCYgZWZmZWN0SGVpZ2h0LCBjb25zdCBpbnQmIG1heEtlcm5lbFNp
emUpCiB7Ci0gICAgY29uc3QgdWludDhfdCogc3JjRGF0YSA9IHNyY1BpeGVsQXJyYXkuZGF0YSgp
OwotICAgIHVpbnQ4X3QqIGRzdERhdGEgPSBkc3RQaXhlbEFycmF5LmRhdGEoKTsKKyAgICBjb25z
dCB1aW50OF90KiBzcmNEYXRhID0gc3JjUGl4ZWxCdWZmZXIuYnl0ZXMoKTsKKyAgICB1aW50OF90
KiBkc3REYXRhID0gZHN0UGl4ZWxCdWZmZXIuYnl0ZXMoKTsKICAgICAvLyBNZW1vcnkgYWxpZ25t
ZW50IGlzOiBSR0JBLCB6ZXJvLWluZGV4IGJhc2VkLgogICAgIGNvbnN0IGludCBjaGFubmVsID0g
MzsKIApAQCAtMTEzLDE0ICsxMTMsMTQgQEAgaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0
d2FyZUFwcGxpZXI6OmJveEJsdXJBbHBoYU9ubHkoY29uc3QgVWludDhDbGFtcGVkQXIKICAgICB9
CiB9CiAKLWlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVy
KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJh
eSYgZHN0UGl4ZWxBcnJheSwgdW5zaWduZWQgZHgsIGludCBkeExlZnQsIGludCBkeFJpZ2h0LCBp
bnQgc3RyaWRlLCBpbnQgc3RyaWRlTGluZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVp
Z2h0LCBib29sIGFscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKK2lubGluZSB2b2lk
IEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyKGNvbnN0IFBpeGVsQnVmZmVy
JiBzcmNQaXhlbEJ1ZmZlciwgUGl4ZWxCdWZmZXImIGRzdFBpeGVsQnVmZmVyLCB1bnNpZ25lZCBk
eCwgaW50IGR4TGVmdCwgaW50IGR4UmlnaHQsIGludCBzdHJpZGUsIGludCBzdHJpZGVMaW5lLCBp
bnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQsIGJvb2wgYWxwaGFJbWFnZSwgRWRnZU1v
ZGVUeXBlIGVkZ2VNb2RlKQogewogICAgIGNvbnN0IGludCBtYXhLZXJuZWxTaXplID0gc3RkOjpt
aW4oZHhSaWdodCwgZWZmZWN0V2lkdGgpOwogICAgIGlmIChhbHBoYUltYWdlKQotICAgICAgICBy
ZXR1cm4gYm94Qmx1ckFscGhhT25seShzcmNQaXhlbEFycmF5LCBkc3RQaXhlbEFycmF5LCBkeCwg
ZHhMZWZ0LCBkeFJpZ2h0LCBzdHJpZGUsIHN0cmlkZUxpbmUsICBlZmZlY3RXaWR0aCwgZWZmZWN0
SGVpZ2h0LCBtYXhLZXJuZWxTaXplKTsKKyAgICAgICAgcmV0dXJuIGJveEJsdXJBbHBoYU9ubHko
c3JjUGl4ZWxCdWZmZXIsIGRzdFBpeGVsQnVmZmVyLCBkeCwgZHhMZWZ0LCBkeFJpZ2h0LCBzdHJp
ZGUsIHN0cmlkZUxpbmUsICBlZmZlY3RXaWR0aCwgZWZmZWN0SGVpZ2h0LCBtYXhLZXJuZWxTaXpl
KTsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5LmRhdGEoKTsK
LSAgICB1aW50OF90KiBkc3REYXRhID0gZHN0UGl4ZWxBcnJheS5kYXRhKCk7CisgICAgY29uc3Qg
dWludDhfdCogc3JjRGF0YSA9IHNyY1BpeGVsQnVmZmVyLmJ5dGVzKCk7CisgICAgdWludDhfdCog
ZHN0RGF0YSA9IGRzdFBpeGVsQnVmZmVyLmJ5dGVzKCk7CiAKICAgICAvLyBDb25jZXJuaW5nIHRo
ZSBhcnJheSB3aWR0aC9sZW5ndGg6IGl0IGlzIEVsZW1lbnQgc2l6ZSArIE1hcmdpbiArIEJvcmRl
ci4gVGhlIG51bWJlciBvZiBwaXhlbHMgd2lsbCBiZQogICAgIC8vIFAgPSB3aWR0aCAqIGhlaWdo
dCAqIGNoYW5uZWxzLgpAQCAtMjQzLDkgKzI0Myw5IEBAIGlubGluZSB2b2lkIEZFR2F1c3NpYW5C
bHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQ
CiB9CiAKICNpZiBVU0UoQUNDRUxFUkFURSkKLWlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29m
dHdhcmVBcHBsaWVyOjpib3hCbHVyQWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVm
ZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZSwg
aW50IHN0cmlkZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0KQoraW5saW5lIHZv
aWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJBY2NlbGVyYXRlZChQaXhl
bEJ1ZmZlciYgaW9CdWZmZXIsIFBpeGVsQnVmZmVyJiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJu
ZWxTaXplLCBpbnQgc3RyaWRlLCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQpCiB7
Ci0gICAgaWYgKCFpb0J1ZmZlci5kYXRhKCkgfHwgIXRlbXBCdWZmZXIuZGF0YSgpKSB7CisgICAg
aWYgKCFpb0J1ZmZlci5ieXRlcygpIHx8ICF0ZW1wQnVmZmVyLmJ5dGVzKCkpIHsKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yNjAsMTMg
KzI2MCwxMyBAQCBpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94
Qmx1ckFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5JgogICAgICAgICBrZXJuZWxTaXplICs9
IDE7CiAKICAgICB2SW1hZ2VfQnVmZmVyIGVmZmVjdEluQnVmZmVyOwotICAgIGVmZmVjdEluQnVm
ZmVyLmRhdGEgPSBzdGF0aWNfY2FzdDx2b2lkKj4oaW9CdWZmZXIuZGF0YSgpKTsKKyAgICBlZmZl
Y3RJbkJ1ZmZlci5kYXRhID0gaW9CdWZmZXIuYnl0ZXMoKTsKICAgICBlZmZlY3RJbkJ1ZmZlci53
aWR0aCA9IGVmZmVjdFdpZHRoOwogICAgIGVmZmVjdEluQnVmZmVyLmhlaWdodCA9IGVmZmVjdEhl
aWdodDsKICAgICBlZmZlY3RJbkJ1ZmZlci5yb3dCeXRlcyA9IHN0cmlkZTsKIAogICAgIHZJbWFn
ZV9CdWZmZXIgZWZmZWN0T3V0QnVmZmVyOwotICAgIGVmZmVjdE91dEJ1ZmZlci5kYXRhID0gdGVt
cEJ1ZmZlci5kYXRhKCk7CisgICAgZWZmZWN0T3V0QnVmZmVyLmRhdGEgPSB0ZW1wQnVmZmVyLmJ5
dGVzKCk7CiAgICAgZWZmZWN0T3V0QnVmZmVyLndpZHRoID0gZWZmZWN0V2lkdGg7CiAgICAgZWZm
ZWN0T3V0QnVmZmVyLmhlaWdodCA9IGVmZmVjdEhlaWdodDsKICAgICBlZmZlY3RPdXRCdWZmZXIu
cm93Qnl0ZXMgPSBzdHJpZGU7CkBAIC0yODQsMjAgKzI4NCwyMCBAQCBpbmxpbmUgdm9pZCBGRUdh
dXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1ckFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBl
ZEFycmF5JgogICAgIGZhc3RGcmVlKHRtcEJ1ZmZlcik7CiAKICAgICAvLyBUaGUgZmluYWwgcmVz
dWx0IHNob3VsZCBiZSBzdG9yZWQgaW4gaW9CdWZmZXIuCi0gICAgQVNTRVJUKGlvQnVmZmVyLmxl
bmd0aCgpID09IHRlbXBCdWZmZXIubGVuZ3RoKCkpOwotICAgIG1lbWNweShpb0J1ZmZlci5kYXRh
KCksIHRlbXBCdWZmZXIuZGF0YSgpLCBpb0J1ZmZlci5sZW5ndGgoKSk7CisgICAgQVNTRVJUKGlv
QnVmZmVyLmJ5dGVMZW5ndGgoKSA9PSB0ZW1wQnVmZmVyLmJ5dGVMZW5ndGgoKSk7CisgICAgbWVt
Y3B5KGlvQnVmZmVyLmJ5dGVzKCksIHRlbXBCdWZmZXIuYnl0ZXMoKSwgaW9CdWZmZXIuYnl0ZUxl
bmd0aCgpKTsKIH0KICNlbmRpZgogCi1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJl
QXBwbGllcjo6Ym94Qmx1clVuYWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVy
LCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVu
c2lnbmVkIGtlcm5lbFNpemVZLCBpbnQgc3RyaWRlLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wg
aXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCitpbmxpbmUgdm9pZCBGRUdhdXNz
aWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1clVuYWNjZWxlcmF0ZWQoUGl4ZWxCdWZmZXIm
IGlvQnVmZmVyLCBQaXhlbEJ1ZmZlciYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZVgs
IHVuc2lnbmVkIGtlcm5lbFNpemVZLCBpbnQgc3RyaWRlLCBJbnRTaXplJiBwYWludFNpemUsIGJv
b2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCiB7CiAgICAgaW50IGR4TGVm
dCA9IDA7CiAgICAgaW50IGR4UmlnaHQgPSAwOwogICAgIGludCBkeUxlZnQgPSAwOwogICAgIGlu
dCBkeVJpZ2h0ID0gMDsKICAgICAKLSAgICBVaW50OENsYW1wZWRBcnJheSogZnJvbUJ1ZmZlciA9
ICZpb0J1ZmZlcjsKLSAgICBVaW50OENsYW1wZWRBcnJheSogdG9CdWZmZXIgPSAmdGVtcEJ1ZmZl
cjsKKyAgICBhdXRvKiBmcm9tQnVmZmVyID0gJmlvQnVmZmVyOworICAgIGF1dG8qIHRvQnVmZmVy
ID0gJnRlbXBCdWZmZXI7CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewogICAg
ICAgICBpZiAoa2VybmVsU2l6ZVgpIHsKQEAgLTMyOSwzNCArMzI5LDM0IEBAIGlubGluZSB2b2lk
IEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyVW5hY2NlbGVyYXRlZChVaW50
OENsYW1wZWRBcnJhCiAKICAgICAvLyBUaGUgZmluYWwgcmVzdWx0IHNob3VsZCBiZSBzdG9yZWQg
aW4gaW9CdWZmZXIuCiAgICAgaWYgKCZpb0J1ZmZlciAhPSBmcm9tQnVmZmVyKSB7Ci0gICAgICAg
IEFTU0VSVChpb0J1ZmZlci5sZW5ndGgoKSA9PSBmcm9tQnVmZmVyLT5sZW5ndGgoKSk7Ci0gICAg
ICAgIG1lbWNweShpb0J1ZmZlci5kYXRhKCksIGZyb21CdWZmZXItPmRhdGEoKSwgaW9CdWZmZXIu
bGVuZ3RoKCkpOworICAgICAgICBBU1NFUlQoaW9CdWZmZXIuYnl0ZUxlbmd0aCgpID09IGZyb21C
dWZmZXItPmJ5dGVMZW5ndGgoKSk7CisgICAgICAgIG1lbWNweShpb0J1ZmZlci5ieXRlcygpLCBm
cm9tQnVmZmVyLT5ieXRlcygpLCBpb0J1ZmZlci5ieXRlTGVuZ3RoKCkpOwogICAgIH0KIH0KIAot
aW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJHZW5lcmlj
KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVs
QXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6
ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQor
aW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJHZW5lcmlj
KFBpeGVsQnVmZmVyJiBpb0J1ZmZlciwgUGl4ZWxCdWZmZXImIHRlbXBCdWZmZXIsIHVuc2lnbmVk
IGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplLCBi
b29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQogewogICAgIGludCBzdHJp
ZGUgPSA0ICogcGFpbnRTaXplLndpZHRoKCk7CiAKICNpZiBVU0UoQUNDRUxFUkFURSkKICAgICBp
ZiAoa2VybmVsU2l6ZVggPT0ga2VybmVsU2l6ZVkgJiYgKGVkZ2VNb2RlID09IEVkZ2VNb2RlVHlw
ZTo6Tm9uZSB8fCBlZGdlTW9kZSA9PSBFZGdlTW9kZVR5cGU6OkR1cGxpY2F0ZSkpIHsKLSAgICAg
ICAgYm94Qmx1ckFjY2VsZXJhdGVkKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJuZWxTaXpl
WCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsKKyAgICAg
ICAgYm94Qmx1ckFjY2VsZXJhdGVkKGlvQnVmZmVyLCB0ZW1wQnVmZmVyLCBrZXJuZWxTaXplWCwg
c3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICNlbmRpZgogCi0gICAgYm94Qmx1clVuYWNjZWxlcmF0ZWQoaW9CdWZm
ZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBrZXJuZWxTaXplWSwgc3RyaWRlLCBwYWlu
dFNpemUsIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUpOworICAgIGJveEJsdXJVbmFjY2VsZXJhdGVk
KGlvQnVmZmVyLCB0ZW1wQnVmZmVyLCBrZXJuZWxTaXplWCwga2VybmVsU2l6ZVksIHN0cmlkZSwg
cGFpbnRTaXplLCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKIH0KIAogI2lmICFVU0UoQUNDRUxF
UkFURSkKIGlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVy
V29ya2VyKEFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVycykKIHsKICAgICBJbnRTaXplIHBhaW50
U2l6ZShwYXJhbWV0ZXJzLT53aWR0aCwgcGFyYW1ldGVycy0+aGVpZ2h0KTsKLSAgICBib3hCbHVy
R2VuZXJpYygqcGFyYW1ldGVycy0+aW9QaXhlbEFycmF5LCAqcGFyYW1ldGVycy0+dG1wUGl4ZWxB
cnJheSwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVgsIHBhcmFtZXRlcnMtPmtlcm5lbFNpemVZLCBw
YWludFNpemUsIHBhcmFtZXRlcnMtPmlzQWxwaGFJbWFnZSwgcGFyYW1ldGVycy0+ZWRnZU1vZGUp
OworICAgIGJveEJsdXJHZW5lcmljKCpwYXJhbWV0ZXJzLT5pb0J1ZmZlciwgKnBhcmFtZXRlcnMt
PnRlbXBCdWZmZXIsIHBhcmFtZXRlcnMtPmtlcm5lbFNpemVYLCBwYXJhbWV0ZXJzLT5rZXJuZWxT
aXplWSwgcGFpbnRTaXplLCBwYXJhbWV0ZXJzLT5pc0FscGhhSW1hZ2UsIHBhcmFtZXRlcnMtPmVk
Z2VNb2RlKTsKIH0KICNlbmRpZgogCi1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJl
QXBwbGllcjo6YXBwbHlQbGF0Zm9ybShVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4
Q2xhbXBlZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWdu
ZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVk
Z2VNb2RlVHlwZSBlZGdlTW9kZSkKK2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVB
cHBsaWVyOjphcHBseVBsYXRmb3JtKFBpeGVsQnVmZmVyJiBpb0J1ZmZlciwgUGl4ZWxCdWZmZXIm
IHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwg
SW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VN
b2RlKQogewogI2lmICFVU0UoQUNDRUxFUkFURSkKICAgICBpbnQgc2NhbmxpbmUgPSA0ICogcGFp
bnRTaXplLndpZHRoKCk7CkBAIC0zODMsMTUgKzM4MywxMSBAQCBpbmxpbmUgdm9pZCBGRUdhdXNz
aWFuQmx1clNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybShVaW50OENsYW1wZWRBcnJheSYg
aW9CdQogICAgICAgICAgICAgICAgIGN1cnJlbnRZICs9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyBi
bG9ja0hlaWdodCArIDEgOiBibG9ja0hlaWdodDsKICAgICAgICAgICAgICAgICBpbnQgZW5kWSA9
IGpvYiA9PSBqb2JzIC0gMSA/IGN1cnJlbnRZIDogY3VycmVudFkgKyBleHRyYUhlaWdodDsKIAot
ICAgICAgICAgICAgICAgIGludCBibG9ja1NpemUgPSAoZW5kWSAtIHN0YXJ0WSkgKiBzY2FubGlu
ZTsKLSAgICAgICAgICAgICAgICBpZiAoIWpvYikgewotICAgICAgICAgICAgICAgICAgICBwYXJh
bXMuaW9QaXhlbEFycmF5ID0gJmlvQnVmZmVyOwotICAgICAgICAgICAgICAgICAgICBwYXJhbXMu
dG1wUGl4ZWxBcnJheSA9ICZ0bXBQaXhlbEFycmF5OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5pb1BpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRB
cnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChibG9ja1NpemUpOwotICAgICAgICAgICAgICAgICAg
ICBwYXJhbXMudG1wUGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRp
YWxpemVkKGJsb2NrU2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgIG1lbWNweShwYXJhbXMuaW9Q
aXhlbEFycmF5LT5kYXRhKCksIGlvQnVmZmVyLmRhdGEoKSArIHN0YXJ0WSAqIHNjYW5saW5lLCBi
bG9ja1NpemUpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBJbnRTaXplIGJs
b2NrU2l6ZSA9IHsgcGFpbnRTaXplLndpZHRoKCksIGVuZFkgLSBzdGFydFkgfTsKKworICAgICAg
ICAgICAgICAgIHBhcmFtcy5pb0J1ZmZlciA9IGlvQnVmZmVyLmNyZWF0ZVNjcmF0Y2hQaXhlbEJ1
ZmZlcihibG9ja1NpemUpOworICAgICAgICAgICAgICAgIHBhcmFtcy50ZW1wQnVmZmVyID0gdGVt
cEJ1ZmZlci5jcmVhdGVTY3JhdGNoUGl4ZWxCdWZmZXIoYmxvY2tTaXplKTsKKyAgICAgICAgICAg
ICAgICBtZW1jcHkocGFyYW1zLmlvQnVmZmVyLT5ieXRlcygpLCBpb0J1ZmZlci5ieXRlcygpICsg
c3RhcnRZICogc2NhbmxpbmUsIHBhcmFtcy5pb0J1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKIAogICAg
ICAgICAgICAgICAgIHBhcmFtcy53aWR0aCA9IHBhaW50U2l6ZS53aWR0aCgpOwogICAgICAgICAg
ICAgICAgIHBhcmFtcy5oZWlnaHQgPSBlbmRZIC0gc3RhcnRZOwpAQCAtNDE3LDcgKzQxMyw3IEBA
IGlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3Jt
KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1CiAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25PZmZz
ZXQgPSBjdXJyZW50WSAqIHNjYW5saW5lOwogICAgICAgICAgICAgICAgIHNpemUgPSBhZGp1c3Rl
ZEJsb2NrSGVpZ2h0ICogc2NhbmxpbmU7CiAKLSAgICAgICAgICAgICAgICBtZW1jcHkoaW9CdWZm
ZXIuZGF0YSgpICsgZGVzdGluYXRpb25PZmZzZXQsIHBhcmFtcy5pb1BpeGVsQXJyYXktPmRhdGEo
KSArIHNvdXJjZU9mZnNldCwgc2l6ZSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KGlvQnVmZmVy
LmJ5dGVzKCkgKyBkZXN0aW5hdGlvbk9mZnNldCwgcGFyYW1zLmlvQnVmZmVyLT5ieXRlcygpICsg
c291cmNlT2Zmc2V0LCBzaXplKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpAQCAtNDI2LDcgKzQyMiw3IEBAIGlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVy
U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1CiAj
ZW5kaWYKIAogICAgIC8vIFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBw
ZW4gZHluYW1pY2FsbHkgb24gc29tZSBwbGF0Zm9ybXMuCi0gICAgYm94Qmx1ckdlbmVyaWMoaW9C
dWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBrZXJuZWxTaXplWSwgcGFpbnRTaXpl
LCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKKyAgICBib3hCbHVyR2VuZXJpYyhpb0J1ZmZlciwg
dGVtcEJ1ZmZlciwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBwYWludFNpemUsIGlzQWxwaGFJ
bWFnZSwgZWRnZU1vZGUpOwogfQogCiBib29sIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVy
OjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlu
cHV0cywgRmlsdGVySW1hZ2UmIHJlc3VsdCkgY29uc3QKQEAgLTQ0NSwxMiArNDQxLDExIEBAIGJv
b2wgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmls
dGVyLCBjb25zdCBGaWx0ZXJJbWFnCiAgICAgYXV0byBrZXJuZWxTaXplID0gbV9lZmZlY3QuY2Fs
Y3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9lZmZlY3Quc3RkRGV2aWF0aW9uWCgpLCBtX2Vm
ZmVjdC5zdGREZXZpYXRpb25ZKCkgfSk7CiAKICAgICBJbnRTaXplIHBhaW50U2l6ZSA9IHJlc3Vs
dC5hYnNvbHV0ZUltYWdlUmVjdCgpLnNpemUoKTsKLSAgICBhdXRvIHRtcEltYWdlRGF0YSA9IFVp
bnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHBhaW50U2l6ZS5hcmVhKCkg
KiA0KTsKLSAgICBpZiAoIXRtcEltYWdlRGF0YSkKKyAgICBhdXRvIHRlbXBCdWZmZXIgPSBkZXN0
aW5hdGlvblBpeGVsQnVmZmVyLT5jcmVhdGVTY3JhdGNoUGl4ZWxCdWZmZXIocGFpbnRTaXplKTsK
KyAgICBpZiAoIXRlbXBCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8m
IGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsK
LSAgICBhcHBseVBsYXRmb3JtKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwg
a2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxTaXplLmhlaWdodCgpLCBwYWludFNpemUsIHJlc3Vs
dC5pc0FscGhhSW1hZ2UoKSwgbV9lZmZlY3QuZWRnZU1vZGUoKSk7CisgICAgYXBwbHlQbGF0Zm9y
bSgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgKnRlbXBCdWZmZXIsIGtlcm5lbFNpemUud2lkdGgo
KSwga2VybmVsU2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplLCByZXN1bHQuaXNBbHBoYUltYWdlKCks
IG1fZWZmZWN0LmVkZ2VNb2RlKCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFR2F1
c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmgKaW5k
ZXggMThjMDVkZTZlZmVlLi5mZjU3MzM3MTE3MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2Fy
ZUFwcGxpZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmgKQEAgLTQyLDggKzQyLDgg
QEAgcHJpdmF0ZToKICAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlcklt
YWdlVmVjdG9yJiBpbnB1dHMsIEZpbHRlckltYWdlJiByZXN1bHQpIGNvbnN0IGZpbmFsOwogCiAg
ICAgc3RydWN0IEFwcGx5UGFyYW1ldGVycyB7Ci0gICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gaW9QaXhlbEFycmF5OwotICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHRt
cFBpeGVsQXJyYXk7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGlvQnVmZmVy
OworICAgICAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiB0ZW1wQnVmZmVyOwogICAgICAg
ICBpbnQgd2lkdGg7CiAgICAgICAgIGludCBoZWlnaHQ7CiAgICAgICAgIHVuc2lnbmVkIGtlcm5l
bFNpemVYOwpAQCAtNTQsMTYgKzU0LDE2IEBAIHByaXZhdGU6CiAKICAgICBzdGF0aWMgaW5saW5l
IHZvaWQga2VybmVsUG9zaXRpb24oaW50IGJsdXJJdGVyYXRpb24sIHVuc2lnbmVkJiByYWRpdXMs
IGludCYgZGVsdGFMZWZ0LCBpbnQmIGRlbHRhUmlnaHQpOwogCi0gICAgc3RhdGljIGlubGluZSB2
b2lkIGJveEJsdXJBbHBoYU9ubHkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJy
YXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCB1bnNpZ25lZCBkeCwgaW50JiBk
eExlZnQsIGludCYgZHhSaWdodCwgaW50JiBzdHJpZGUsIGludCYgc3RyaWRlTGluZSwgaW50JiBl
ZmZlY3RXaWR0aCwgaW50JiBlZmZlY3RIZWlnaHQsIGNvbnN0IGludCYgbWF4S2VybmVsU2l6ZSk7
Ci0gICAgc3RhdGljIGlubGluZSB2b2lkIGJveEJsdXIoY29uc3QgVWludDhDbGFtcGVkQXJyYXkm
IHNyY1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCB1bnNpZ25l
ZCBkeCwgaW50IGR4TGVmdCwgaW50IGR4UmlnaHQsIGludCBzdHJpZGUsIGludCBzdHJpZGVMaW5l
LCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQsIGJvb2wgYWxwaGFJbWFnZSwgRWRn
ZU1vZGVUeXBlKTsKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1ckFscGhhT25seShjb25z
dCBQaXhlbEJ1ZmZlciYgaW9CdWZmZXIsIFBpeGVsQnVmZmVyJiB0ZW1wQnVmZmVyLCB1bnNpZ25l
ZCBkeCwgaW50JiBkeExlZnQsIGludCYgZHhSaWdodCwgaW50JiBzdHJpZGUsIGludCYgc3RyaWRl
TGluZSwgaW50JiBlZmZlY3RXaWR0aCwgaW50JiBlZmZlY3RIZWlnaHQsIGNvbnN0IGludCYgbWF4
S2VybmVsU2l6ZSk7CisgICAgc3RhdGljIGlubGluZSB2b2lkIGJveEJsdXIoY29uc3QgUGl4ZWxC
dWZmZXImIGlvQnVmZmVyLCBQaXhlbEJ1ZmZlciYgdGVtcEJ1ZmZlciwgdW5zaWduZWQgZHgsIGlu
dCBkeExlZnQsIGludCBkeFJpZ2h0LCBpbnQgc3RyaWRlLCBpbnQgc3RyaWRlTGluZSwgaW50IGVm
ZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0LCBib29sIGFscGhhSW1hZ2UsIEVkZ2VNb2RlVHlw
ZSk7CiAKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1ckFjY2VsZXJhdGVkKFVpbnQ4Q2xh
bXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2ln
bmVkIGtlcm5lbFNpemUsIGludCBzdHJpZGUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhl
aWdodCk7Ci0gICAgc3RhdGljIGlubGluZSB2b2lkIGJveEJsdXJVbmFjY2VsZXJhdGVkKFVpbnQ4
Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVu
c2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgaW50IHN0cmlkZSwgSW50
U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlKTsKKyAgICBz
dGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1ckFjY2VsZXJhdGVkKFBpeGVsQnVmZmVyJiBpb0J1ZmZl
ciwgUGl4ZWxCdWZmZXImIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemUsIGludCBzdHJp
ZGUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCk7CisgICAgc3RhdGljIGlubGlu
ZSB2b2lkIGJveEJsdXJVbmFjY2VsZXJhdGVkKFBpeGVsQnVmZmVyJiBpb0J1ZmZlciwgUGl4ZWxC
dWZmZXImIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxT
aXplWSwgaW50IHN0cmlkZSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwg
RWRnZU1vZGVUeXBlKTsKIAotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyR2VuZXJpYyhV
aW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhlbEFy
cmF5LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUm
IHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSk7CisgICAgc3RhdGlj
IGlubGluZSB2b2lkIGJveEJsdXJHZW5lcmljKFBpeGVsQnVmZmVyJiBpb0J1ZmZlciwgUGl4ZWxC
dWZmZXImIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxT
aXplWSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBl
KTsKICAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1cldvcmtlcihBcHBseVBhcmFtZXRlcnMq
KTsKIAotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseVBsYXRmb3JtKFVpbnQ4Q2xhbXBlZEFy
cmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVk
IGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplLCBi
b29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlKTsKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQg
YXBwbHlQbGF0Zm9ybShQaXhlbEJ1ZmZlciYgaW9CdWZmZXIsIFBpeGVsQnVmZmVyJiB0ZW1wQnVm
ZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUm
IHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSk7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0
aW5nU29mdHdhcmVBcHBsaWVyLmNwcAppbmRleCBmYThlZTNkNTZhNTYuLmU0YjE0N2Y3NTU0MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxp
ZXIuY3BwCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJz
aXR5IG9mIFN6ZWdlZAogICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjIgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzk5LDggKzM5OSw2IEBAIGJv
b2wgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIs
IGNvbnN0IEZpbHRlckltYWdlVmVjCiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkg
PSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KICAgICBhdXRvIGVmZmVjdERyYXdp
bmdSZWN0ID0gcmVzdWx0LmFic29sdXRlSW1hZ2VSZWN0UmVsYXRpdmVUbyhpbnB1dCk7CiAgICAg
aW5wdXQuY29weVBpeGVsQnVmZmVyKCpkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBlZmZlY3REcmF3
aW5nUmVjdCk7CiAKQEAgLTQyOCw3ICs0MjYsNyBAQCBib29sIEZFTGlnaHRpbmdTb2Z0d2FyZUFw
cGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJbWFnZVZlYwog
ICAgIGRhdGEubGlnaHRTb3VyY2UgPSAmbV9lZmZlY3QubGlnaHRTb3VyY2UoKTsKICAgICBkYXRh
Lm9wZXJhdGluZ0NvbG9yU3BhY2UgPSAmbV9lZmZlY3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgpOwog
Ci0gICAgZGF0YS5waXhlbHMgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5OworICAgIGRhdGEucGl4
ZWxzID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlcjsKICAgICBkYXRhLndpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplID0gc2l6ZS53aWR0aCgpICogY1BpeGVsU2l6ZTsKICAgICBkYXRhLndpZHRoID0g
c2l6ZS53aWR0aCgpOwogICAgIGRhdGEuaGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVM
aWdodGluZ1NvZnR3YXJlQXBwbGllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmgKaW5kZXggMzg3
NWIwYTRiNWRlLi5jOTc0ZDkyMTE1ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllci5oCkBAIC0xMDQsNyArMTA0LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgY29uc3QgTGlnaHRTb3VyY2UqIGxpZ2h0U291cmNlOwogICAgICAgICBjb25zdCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UqIG9wZXJhdGluZ0NvbG9yU3BhY2U7CiAKLSAgICAgICAgVWlu
dDhDbGFtcGVkQXJyYXkqIHBpeGVsczsKKyAgICAgICAgUGl4ZWxCdWZmZXIqIHBpeGVsczsKICAg
ICAgICAgaW50IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwogICAgICAgICBpbnQgd2lkdGg7
CiAgICAgICAgIGludCBoZWlnaHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
TW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5jcHAKaW5kZXggMWM5ZGVmYmMzMmU4Li5kZGRkYTBl
ZDU1MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNv
ZnR3YXJlQXBwbGllci5jcHAKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJr
IFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgQXBwbGUgSW5jLiAyMDE3LTIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgQXBwbGUgSW5jLiAyMDE3LTIwMjIgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtNDAsMTIgKzQwLDEyIEBAIGlubGluZSBDb2xvckNvbXBvbmVudHM8dWlu
dDhfdCwgND4gRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjptaW5Pck1heChjb25zdCBDCiAg
ICAgcmV0dXJuIHBlckNvbXBvbmVudE1heChhLCBiKTsKIH0KIAotaW5saW5lIENvbG9yQ29tcG9u
ZW50czx1aW50OF90LCA0PiBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmNvbHVtbkV4dHJl
bXVtKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBpbnQgeCwgaW50IHlT
dGFydCwgaW50IHlFbmQsIGludCB3aWR0aCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQor
aW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFw
cGxpZXI6OmNvbHVtbkV4dHJlbXVtKGNvbnN0IFBpeGVsQnVmZmVyJiBzcmNQaXhlbEJ1ZmZlciwg
aW50IHgsIGludCB5U3RhcnQsIGludCB5RW5kLCBpbnQgd2lkdGgsIE1vcnBob2xvZ3lPcGVyYXRv
clR5cGUgdHlwZSkKIHsKLSAgICBhdXRvIGV4dHJlbXVtID0gbWFrZUNvbG9yQ29tcG9uZW50c2Zy
b21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHsgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dW5zaWduZWQqPihzcmNQaXhlbEFycmF5LmRhdGEoKSArIHBpeGVsQXJyYXlJbmRleCh4LCB5U3Rh
cnQsIHdpZHRoKSkgfSk7CisgICAgYXV0byBleHRyZW11bSA9IG1ha2VDb2xvckNvbXBvbmVudHNm
cm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0
IHVuc2lnbmVkKj4oc3JjUGl4ZWxCdWZmZXIuYnl0ZXMoKSArIHBpeGVsQXJyYXlJbmRleCh4LCB5
U3RhcnQsIHdpZHRoKSkgfSk7CiAKICAgICBmb3IgKGludCB5ID0geVN0YXJ0ICsgMTsgeSA8IHlF
bmQ7ICsreSkgewotICAgICAgICBhdXRvIHBpeGVsID0gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21Q
aXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHsgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5z
aWduZWQqPihzcmNQaXhlbEFycmF5LmRhdGEoKSArIHBpeGVsQXJyYXlJbmRleCh4LCB5LCB3aWR0
aCkpIH0pOworICAgICAgICBhdXRvIHBpeGVsID0gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhl
bFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHsgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQqPihzcmNQaXhlbEJ1ZmZlci5ieXRlcygpICsgcGl4ZWxBcnJheUluZGV4KHgsIHksIHdpZHRo
KSkgfSk7CiAgICAgICAgIGV4dHJlbXVtID0gbWluT3JNYXgoZXh0cmVtdW0sIHBpeGVsLCB0eXBl
KTsKICAgICB9CiAgICAgcmV0dXJuIGV4dHJlbXVtOwpAQCAtNjQsOCArNjQsOCBAQCB2b2lkIEZF
TW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWMoY29uc3QgUGFp
bnRpbmdEYXRhJiBwYWludAogewogICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsKIAotICAgIGNv
bnN0IGF1dG8mIHNyY1BpeGVsQXJyYXkgPSAqcGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXk7Ci0g
ICAgYXV0byYgZHN0UGl4ZWxBcnJheSA9ICpwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheTsKKyAg
ICBjb25zdCBhdXRvJiBzcmNQaXhlbEJ1ZmZlciA9ICpwYWludGluZ0RhdGEuc3JjUGl4ZWxCdWZm
ZXI7CisgICAgYXV0byYgZHN0UGl4ZWxCdWZmZXIgPSAqcGFpbnRpbmdEYXRhLmRzdFBpeGVsQnVm
ZmVyOwogCiAgICAgY29uc3QgaW50IHJhZGl1c1ggPSBwYWludGluZ0RhdGEucmFkaXVzWDsKICAg
ICBjb25zdCBpbnQgcmFkaXVzWSA9IHBhaW50aW5nRGF0YS5yYWRpdXNZOwpAQCAtODYsMTcgKzg2
LDE3IEBAIHZvaWQgRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2Vu
ZXJpYyhjb25zdCBQYWludGluZ0RhdGEmIHBhaW50CiAKICAgICAgICAgLy8gV2Ugc3RhcnQgYXQg
dGhlIGxlZnQgZWRnZSwgc28gY29tcHV0ZSBleHRyZW1lIGZvciB0aGUgcmFkaXVzWCBjb2x1bW5z
LgogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHJhZGl1c1g7ICsreCkKLSAgICAgICAgICAg
IGV4dHJlbWEuYXBwZW5kKGNvbHVtbkV4dHJlbXVtKHNyY1BpeGVsQXJyYXksIHgsIHlSYWRpdXNT
dGFydCwgeVJhZGl1c0VuZCwgd2lkdGgsIHBhaW50aW5nRGF0YS50eXBlKSk7CisgICAgICAgICAg
ICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEJ1ZmZlciwgeCwgeVJhZGl1
c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0aCwgcGFpbnRpbmdEYXRhLnR5cGUpKTsKIAogICAgICAg
ICAvLyBLZXJuZWwgaXMgZmlsbGVkLCBnZXQgZXh0cmVtYSBvZiBuZXh0IGNvbHVtbgogICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKICAgICAgICAgICAgIGlmICh4IDwg
d2lkdGggLSByYWRpdXNYKQotICAgICAgICAgICAgICAgIGV4dHJlbWEuYXBwZW5kKGNvbHVtbkV4
dHJlbXVtKHNyY1BpeGVsQXJyYXksIHggKyByYWRpdXNYLCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNF
bmQsIHdpZHRoLCBwYWludGluZ0RhdGEudHlwZSkpOworICAgICAgICAgICAgICAgIGV4dHJlbWEu
YXBwZW5kKGNvbHVtbkV4dHJlbXVtKHNyY1BpeGVsQnVmZmVyLCB4ICsgcmFkaXVzWCwgeVJhZGl1
c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0aCwgcGFpbnRpbmdEYXRhLnR5cGUpKTsKIAogICAgICAg
ICAgICAgaWYgKHggPiByYWRpdXNYKQogICAgICAgICAgICAgICAgIGV4dHJlbWEucmVtb3ZlKDAp
OwogCi0gICAgICAgICAgICB1bnNpZ25lZCogZGVzdFBpeGVsID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCo+KGRzdFBpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHksIHdp
ZHRoKSk7CisgICAgICAgICAgICB1bnNpZ25lZCogZGVzdFBpeGVsID0gcmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZCo+KGRzdFBpeGVsQnVmZmVyLmJ5dGVzKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwg
eSwgd2lkdGgpKTsKICAgICAgICAgICAgICpkZXN0UGl4ZWwgPSBtYWtlUGl4ZWxWYWx1ZUZyb21D
b2xvckNvbXBvbmVudHMoa2VybmVsRXh0cmVtdW0oZXh0cmVtYSwgcGFpbnRpbmdEYXRhLnR5cGUp
KS52YWx1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTE3NSwxMyArMTc1LDEwIEBAIGJvb2wgRkVN
b3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29u
c3QgRmlsdGVySW1hZ2VWCiAgICAgaWYgKCFzb3VyY2VQaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgYXV0byYgc291cmNlUGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQnVm
ZmVyLT5kYXRhKCk7Ci0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRp
b25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCiAgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsK
ICAgICBwYWludGluZ0RhdGEudHlwZSA9IG1fZWZmZWN0Lm1vcnBob2xvZ3lPcGVyYXRvcigpOwot
ICAgIHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5ID0gJnNvdXJjZVBpeGVsQXJyYXk7Ci0gICAg
cGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5OworICAg
IHBhaW50aW5nRGF0YS5zcmNQaXhlbEJ1ZmZlciA9ICYqc291cmNlUGl4ZWxCdWZmZXI7CisgICAg
cGFpbnRpbmdEYXRhLmRzdFBpeGVsQnVmZmVyID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlcjsKICAg
ICBwYWludGluZ0RhdGEud2lkdGggPSBlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpOwogICAgIHBh
aW50aW5nRGF0YS5oZWlnaHQgPSBlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKTsKICAgICBwYWlu
dGluZ0RhdGEucmFkaXVzWCA9IHJhZGl1c1g7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBw
bGllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIuaAppbmRleCA2OGFkNGE0MzM4YjUuLjNjZDli
NjU0MTI4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNv
ZnR3YXJlQXBwbGllci5oCkBAIC00OCw4ICs0OCw4IEBAIHByaXZhdGU6CiAgICAgICAgIE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGUgdHlwZTsKICAgICAgICAgaW50IHJhZGl1c1g7CiAgICAgICAgIGlu
dCByYWRpdXNZOwotICAgICAgICBjb25zdCBVaW50OENsYW1wZWRBcnJheSogc3JjUGl4ZWxBcnJh
eTsKLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIGRzdFBpeGVsQXJyYXk7CisgICAgICAgIGNv
bnN0IFBpeGVsQnVmZmVyKiBzcmNQaXhlbEJ1ZmZlcjsKKyAgICAgICAgUGl4ZWxCdWZmZXIqIGRz
dFBpeGVsQnVmZmVyOwogICAgICAgICBpbnQgd2lkdGg7CiAgICAgICAgIGludCBoZWlnaHQ7CiAg
ICAgfTsKQEAgLTY1LDcgKzY1LDcgQEAgcHJpdmF0ZToKIAogICAgIHN0YXRpYyBpbmxpbmUgQ29s
b3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1
ZShQYWNrZWRDb2xvcjo6UkdCQSBwaXhlbCkgeyByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYXNT
UkdCQShwaXhlbCkucmVzb2x2ZWQoKSk7IH0KICAgICBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9u
ZW50czx1aW50OF90LCA0PiBtaW5Pck1heChjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwg
ND4mIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYiwgTW9ycGhvbG9neU9w
ZXJhdG9yVHlwZSk7Ci0gICAgc3RhdGljIGlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwg
ND4gY29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXks
IGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoLCBNb3JwaG9sb2d5T3BlcmF0
b3JUeXBlKTsKKyAgICBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBj
b2x1bW5FeHRyZW11bShjb25zdCBQaXhlbEJ1ZmZlciYgc3JjUGl4ZWxCdWZmZXIsIGludCB4LCBp
bnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsK
ICAgICBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBrZXJuZWxFeHRy
ZW11bShjb25zdCBDb2x1bW5FeHRyZW1hJiBrZXJuZWwsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUp
OwogCiAgICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybUdlbmVyaWMoY29uc3QgUGFpbnRpbmdE
YXRhJiwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZUFw
cGxpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuY3BwCmluZGV4IDZkNjUwNjQ1YTc1Yy4u
NTJmNjI0ZmM3OGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1
bGVuY2VTb2Z0d2FyZUFwcGxpZXIuY3BwCkBAIC01LDcgKzUsNyBAQAogICogQ29weXJpZ2h0IChD
KSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDEwIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdlZC5odT4KICAqIENvcHlyaWdodCAo
QykgMjAxMSBHYWJvciBMb2tpIDxsb2tpQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMjcwLDcgKzI3MCw3IEBAIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBG
RVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1CiAgICAg
cmV0dXJuIHRvSW50QmFzZWRDb2xvckNvbXBvbmVudHModHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0
KTsKIH0KIAotdm9pZCBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1H
ZW5lcmljKGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRTaXplJiBmaWx0
ZXJTY2FsZSwgVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFBhaW50aW5nRGF0
YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBl
bmRZKQordm9pZCBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1HZW5l
cmljKGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJT
Y2FsZSwgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBQYWludGluZ0RhdGEmIHBhaW50
aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKIHsK
ICAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7CiAKQEAgLTI4NSw3ICsyODUsNyBAQCB2b2lkIEZF
VHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWMoY29uc3QgSW50
UmVjdCYgZmlsdGVyUmVnaQogICAgICAgICAgICAgcG9pbnQuc2V0WChwb2ludC54KCkgKyAxKTsK
ICAgICAgICAgICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IHBvaW50LnNjYWxlZChpbnZlcnNl
U2NhbGUud2lkdGgoKSwgaW52ZXJzZVNjYWxlLmhlaWdodCgpKTsKICAgICAgICAgICAgIGF1dG8g
dmFsdWVzID0gY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQocGFpbnRpbmdEYXRhLCBz
dGl0Y2hEYXRhLCBsb2NhbFBvaW50KTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0UmFuZ2Uo
dmFsdWVzLmNvbXBvbmVudHMuZGF0YSgpLCA0LCBpbmRleE9mUGl4ZWxDaGFubmVsKTsKKyAgICAg
ICAgICAgIHBpeGVsQnVmZmVyLnNldFJhbmdlKHZhbHVlcy5jb21wb25lbnRzLmRhdGEoKSwgNCwg
aW5kZXhPZlBpeGVsQ2hhbm5lbCk7CiAgICAgICAgICAgICBpbmRleE9mUGl4ZWxDaGFubmVsICs9
IDQ7CiAgICAgICAgIH0KICAgICB9CkBAIC0yOTMsMTAgKzI5MywxMCBAQCB2b2lkIEZFVHVyYnVs
ZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWMoY29uc3QgSW50UmVjdCYg
ZmlsdGVyUmVnaQogCiB2b2lkIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0
Zm9ybVdvcmtlcihBcHBseVBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCiB7Ci0gICAgYXBwbHlQbGF0
Zm9ybUdlbmVyaWMocGFyYW1ldGVycy0+ZmlsdGVyUmVnaW9uLCBwYXJhbWV0ZXJzLT5maWx0ZXJT
Y2FsZSwgKnBhcmFtZXRlcnMtPnBpeGVsQXJyYXksICpwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEs
IHBhcmFtZXRlcnMtPnN0aXRjaERhdGEsIHBhcmFtZXRlcnMtPnN0YXJ0WSwgcGFyYW1ldGVycy0+
ZW5kWSk7CisgICAgYXBwbHlQbGF0Zm9ybUdlbmVyaWMocGFyYW1ldGVycy0+ZmlsdGVyUmVnaW9u
LCBwYXJhbWV0ZXJzLT5maWx0ZXJTY2FsZSwgKnBhcmFtZXRlcnMtPnBpeGVsQnVmZmVyLCAqcGFy
YW1ldGVycy0+cGFpbnRpbmdEYXRhLCBwYXJhbWV0ZXJzLT5zdGl0Y2hEYXRhLCBwYXJhbWV0ZXJz
LT5zdGFydFksIHBhcmFtZXRlcnMtPmVuZFkpOwogfQogCi12b2lkIEZFVHVyYnVsZW5jZVNvZnR3
YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybShjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24sIGNv
bnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5
LCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSYgc3RpdGNoRGF0YSkKK3Zv
aWQgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKGNvbnN0IEludFJl
Y3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgUGl4ZWxCdWZm
ZXImIHBpeGVsQnVmZmVyLCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSYg
c3RpdGNoRGF0YSkKIHsKICAgICBpbnQgaGVpZ2h0ID0gZmlsdGVyUmVnaW9uLmhlaWdodCgpOwog
ICAgIHVuc2lnbmVkIGFyZWEgPSBmaWx0ZXJSZWdpb24uYXJlYSgpOwpAQCAtMzIwLDcgKzMyMCw3
IEBAIHZvaWQgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKGNvbnN0
IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uCiAgICAgICAgICAgICAgICAgQXBwbHlQYXJhbWV0
ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGkpOwogICAgICAgICAgICAgICAg
IHBhcmFtcy5maWx0ZXJSZWdpb24gPSBmaWx0ZXJSZWdpb247CiAgICAgICAgICAgICAgICAgcGFy
YW1zLmZpbHRlclNjYWxlID0gZmlsdGVyU2NhbGU7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnBp
eGVsQXJyYXkgPSAmcGl4ZWxBcnJheTsKKyAgICAgICAgICAgICAgICBwYXJhbXMucGl4ZWxCdWZm
ZXIgPSAmcGl4ZWxCdWZmZXI7CiAgICAgICAgICAgICAgICAgcGFyYW1zLnBhaW50aW5nRGF0YSA9
ICZwYWludGluZ0RhdGE7CiAgICAgICAgICAgICAgICAgcGFyYW1zLnN0aXRjaERhdGEgPSBzdGl0
Y2hEYXRhOwogICAgICAgICAgICAgICAgIHBhcmFtcy5zdGFydFkgPSBzdGFydFk7CkBAIC0zMzYs
NyArMzM2LDcgQEAgdm9pZCBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZv
cm0oY29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaW9uLCBjb24KICAgICB9CiAKICAgICAvLyBGYWxs
YmFjayB0byBzaW5nbGUgdGhyZWFkZWQgbW9kZSBpZiB0aGVyZSBpcyBubyByb29tIGZvciBhIG5l
dyB0aHJlYWQgb3IgdGhlIHBhaW50IGFyZWEgaXMgdG9vIHNtYWxsLgotICAgIGFwcGx5UGxhdGZv
cm1HZW5lcmljKGZpbHRlclJlZ2lvbiwgZmlsdGVyU2NhbGUsIHBpeGVsQXJyYXksIHBhaW50aW5n
RGF0YSwgc3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsKKyAgICBhcHBseVBsYXRmb3JtR2VuZXJpYyhm
aWx0ZXJSZWdpb24sIGZpbHRlclNjYWxlLCBwaXhlbEJ1ZmZlciwgcGFpbnRpbmdEYXRhLCBzdGl0
Y2hEYXRhLCAwLCBoZWlnaHQpOwogfQogCiBib29sIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGll
cjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiwg
RmlsdGVySW1hZ2UmIHJlc3VsdCkgY29uc3QKQEAgLTM0OSwxMCArMzQ5LDggQEAgYm9vbCBGRVR1
cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25z
dCBGaWx0ZXJJbWFnZVYKICAgICBpZiAocmVzdWx0U2l6ZS5hcmVhKCkuaGFzT3ZlcmZsb3dlZCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJy
YXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KICAgICBpZiAocmVzdWx0U2l6
ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZGVzdGluYXRpb25QaXhlbEFycmF5Lnplcm9GaWxsKCk7
CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPnplcm9GaWxsKCk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIApAQCAtMzY0LDcgKzM2Miw3IEBAIGJvb2wgRkVUdXJidWxlbmNl
U29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVy
SW1hZ2VWCiAKICAgICBhdXRvIHBhaW50aW5nRGF0YSA9IGluaXRQYWludGluZ0RhdGEobV9lZmZl
Y3QudHlwZSgpLCBiYXNlRnJlcXVlbmN5WCwgYmFzZUZyZXF1ZW5jeVksIG1fZWZmZWN0Lm51bU9j
dGF2ZXMoKSwgbV9lZmZlY3Quc2VlZCgpLCBtX2VmZmVjdC5zdGl0Y2hUaWxlcygpLCB0aWxlU2l6
ZSk7CiAKLSAgICBhcHBseVBsYXRmb3JtKHJlc3VsdC5hYnNvbHV0ZUltYWdlUmVjdCgpLCBmaWx0
ZXIuZmlsdGVyU2NhbGUoKSwgZGVzdGluYXRpb25QaXhlbEFycmF5LCBwYWludGluZ0RhdGEsIHN0
aXRjaERhdGEpOworICAgIGFwcGx5UGxhdGZvcm0ocmVzdWx0LmFic29sdXRlSW1hZ2VSZWN0KCks
IGZpbHRlci5maWx0ZXJTY2FsZSgpLCAqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgcGFpbnRpbmdE
YXRhLCBzdGl0Y2hEYXRhKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVu
Y2VTb2Z0d2FyZUFwcGxpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyLmgKaW5kZXggY2Y0ZDg5
NTllYmE0Li5kNmFjMzg1ZGFjM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuaApAQCAtOTMsNyArOTMsNyBAQCBwcml2YXRlOgog
ICAgIHN0cnVjdCBBcHBseVBhcmFtZXRlcnMgewogICAgICAgICBJbnRSZWN0IGZpbHRlclJlZ2lv
bjsKICAgICAgICAgRmxvYXRTaXplIGZpbHRlclNjYWxlOwotICAgICAgICBVaW50OENsYW1wZWRB
cnJheSogcGl4ZWxBcnJheTsKKyAgICAgICAgUGl4ZWxCdWZmZXIqIHBpeGVsQnVmZmVyOwogICAg
ICAgICBQYWludGluZ0RhdGEqIHBhaW50aW5nRGF0YTsKICAgICAgICAgU3RpdGNoRGF0YSBzdGl0
Y2hEYXRhOwogICAgICAgICBpbnQgc3RhcnRZOwpAQCAtMTEwLDkgKzExMCw5IEBAIHByaXZhdGU6
CiAgICAgc3RhdGljIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiB0b0ludEJhc2VkQ29sb3JD
b21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4mIGZsb2F0Q29tcG9uZW50
cyk7CiAgICAgc3RhdGljIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjYWxjdWxhdGVUdXJi
dWxlbmNlVmFsdWVGb3JQb2ludChjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRhLCBjb25z
dCBGbG9hdFBvaW50Jik7CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtR2VuZXJpYyhj
b25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUs
IFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0
Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSk7CisgICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0
Zm9ybUdlbmVyaWMoY29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFNpemUm
IGZpbHRlclNjYWxlLCBQaXhlbEJ1ZmZlciYsIGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERh
dGEsIGludCBzdGFydFksIGludCBlbmRZKTsKICAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3Jt
V29ya2VyKEFwcGx5UGFyYW1ldGVycyopOwotICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm0o
Y29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxl
LCBVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0
YSYpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm0oY29uc3QgSW50UmVjdCYgZmlsdGVy
UmVnaW9uLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBQaXhlbEJ1ZmZlciYsIFBhaW50
aW5nRGF0YSYsIFN0aXRjaERhdGEmKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLS0g
CjIuMzIuMCAoQXBwbGUgR2l0LTEzMikKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459685</attachid>
            <date>2022-05-23 10:26:29 -0700</date>
            <delta_ts>2022-05-25 16:08:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-240777-20220523102628.patch</filename>
            <type>text/plain</type>
            <size>62435</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">RnJvbSAzNTc1MTIwZDYxMzQyOGE2MmFiM2E0NmM5OWU4MGUwMzAyNjc1MGYyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTYWlkIEFib3UtSGFsbGF3YSA8c2FpZEBhcHBsZS5jb20+CkRh
dGU6IE1vbiwgMjMgTWF5IDIwMjIgMTA6MjA6MDIgLTA3MDAKU3ViamVjdDogW1BBVENIXSBbR1BV
IFByb2Nlc3NdIFtGaWx0ZXJzXSBEb24ndCB1c2UgVWludDhDbGFtcGVkQXJyYXkgaW4KIHNvZnR3
YXJlIGZpbHRlciBhcHBsaWVycyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjQwNzc3CgpUaGUgcGxhbiBpcyB0byBhbGxvY2F0ZSB0aGUgRmlsdGVySW1hZ2UgYnVmZmVy
cyBkaWZmZXJlbnRseSBmb3IgR1BVUHJvY2Vzcy4gU28KdGhlIGZpcnN0IHN0ZXAgaXMgdG8gaGlk
ZSB0aGUgdW5kZXJseWluZyBtZW1vcnkgb2YgUGl4ZWxCdWZmZXIgZnJvbSB0aGUgc29mdHdhcmUK
ZmlsdGVyIGFwcGxpZXJzLgotLS0KIC4uLi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVs
QnVmZmVyLmNwcCB8IDUwICsrKysrKysrKysrKy0KIC4uLi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BpeGVsQnVmZmVyLmggICB8IDE2ICsrKy0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9zaXRlLmggICB8ICAyIC0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckltYWdlLmNwcCB8IDM5ICsrKysrLS0tLS0KIC4uLi9zb2Z0d2FyZS9GRUNvbG9yTWF0
cml4U29mdHdhcmVBcHBsaWVyLmNwcCB8IDY5ICsrKysrKysrLS0tLS0tLS0tLQogLi4uL0ZFQ29t
cG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIuY3BwICAgIHwgIDkgKy0tCiAuLi4vc29mdHdh
cmUvRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIuY3BwICAgfCAxMiArLS0KIC4uLi9GRUNvbnZv
bHZlTWF0cml4U29mdHdhcmVBcHBsaWVyLmNwcCAgICAgICB8IDM3ICsrKysrLS0tLS0KIC4uLi9G
RUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyLmggICAgICAgICB8ICA2ICstCiAuLi4vRkVE
aXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIuY3BwICAgICAgfCAxNiArKy0tCiAuLi4vc29m
dHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyLmNwcCAgfCAgNSArLQogLi4uL0ZFR2F1
c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmNwcCAgICAgICAgIHwgNzMgKysrKysrKysrKy0tLS0t
LS0tLQogLi4uL3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmggIHwgMTYg
KystLQogLi4uL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3BwICAgIHwgIDYg
Ky0KIC4uLi9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmggICAgICB8ICAyICst
CiAuLi4vc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmNwcCAgfCAyNSArKyst
LS0tCiAuLi4vc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmggICAgfCAgNiAr
LQogLi4uL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllci5jcHAgIHwgMjAgKysr
LS0KIC4uLi9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuaCAgICB8ICA2ICst
CiAxOSBmaWxlcyBjaGFuZ2VkLCAyMjUgaW5zZXJ0aW9ucygrKSwgMTkwIGRlbGV0aW9ucygtKQoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmNwcApp
bmRleCA3NTQzZjQ3NWEyN2EuLjMyNGQ2MDVjYTY1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjAsOSArMTIwLDU1IEBAIFBpeGVs
QnVmZmVyIFBpeGVsQnVmZmVyOjpkZWVwQ2xvbmUoKSBjb25zdAogICAgIHJldHVybiB7IG1fZm9y
bWF0LCBtX3NpemUsIFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUobV9kYXRhLT5kYXRhKCksIG1f
ZGF0YS0+bGVuZ3RoKCkpIH07CiB9CiAKK3VpbnQ4X3QqIFBpeGVsQnVmZmVyOjpieXRlcygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YS0+ZGF0YSgpOworfQorCitzaXplX3QgUGl4ZWxCdWZm
ZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAoreworICAgIEFTU0VSVChtX2RhdGEtPmJ5dGVMZW5ndGgo
KSA9PSBtX3NpemUuYXJlYSgpICogNCk7CisgICAgcmV0dXJuIG1fZGF0YS0+Ynl0ZUxlbmd0aCgp
OworfQorCitib29sIFBpeGVsQnVmZmVyOjpzZXRSYW5nZShjb25zdCB2b2lkKiBkYXRhLCBzaXpl
X3QgZGF0YUJ5dGVMZW5ndGgsIHNpemVfdCBieXRlT2Zmc2V0KQoreworICAgIGlmICghaXNTdW1T
bWFsbGVyVGhhbk9yRXF1YWwoYnl0ZU9mZnNldCwgZGF0YUJ5dGVMZW5ndGgsIGJ5dGVMZW5ndGgo
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1lbW1vdmUoYnl0ZXMoKSArIGJ5dGVP
ZmZzZXQsIGRhdGEsIGRhdGFCeXRlTGVuZ3RoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBQaXhlbEJ1ZmZlcjo6emVyb1JhbmdlKHNpemVfdCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VC
eXRlTGVuZ3RoKQoreworICAgIGlmICghaXNTdW1TbWFsbGVyVGhhbk9yRXF1YWwoYnl0ZU9mZnNl
dCwgcmFuZ2VCeXRlTGVuZ3RoLCBieXRlTGVuZ3RoKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBtZW1zZXQoYnl0ZXMoKSArIGJ5dGVPZmZzZXQsIDAsIHJhbmdlQnl0ZUxlbmd0aCk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3VpbnQ4X3QgUGl4ZWxCdWZmZXI6Oml0ZW0oc2l6ZV90
IGluZGV4KSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04oaW5kZXggPCBieXRlTGVuZ3RoKCkpOworICAgIHJldHVybiBieXRlcygpW2luZGV4XTsK
K30KKwordm9pZCBQaXhlbEJ1ZmZlcjo6c2V0KHNpemVfdCBpbmRleCwgZG91YmxlIHZhbHVlKQor
eworICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBi
eXRlTGVuZ3RoKCkpOworICAgIGJ5dGVzKClbaW5kZXhdID0gSlNDOjpVaW50OENsYW1wZWRBZGFw
dG9yOjp0b05hdGl2ZUZyb21Eb3VibGUodmFsdWUpOworfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBQaXhlbEJ1ZmZlcjo6Y3JlYXRlU2NyYXRjaFBpeGVsQnVmZmVyKGNvbnN0IEludFNp
emUmIHNpemUpIGNvbnN0Cit7CisgICAgcmV0dXJuIFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUobV9m
b3JtYXQsIHNpemUpOworfQorCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIpCiB7CiAgICAgcmV0dXJuIHRzIDw8ICZw
aXhlbEJ1ZmZlci5kYXRhKCkgPDwgImZvcm1hdCAoICIgPDwgcGl4ZWxCdWZmZXIuZm9ybWF0KCkg
PDwgIikiOwogfQogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAppbmRleCAwNDM0Y2VlYjk4N2YuLjBj
ODRiM2FlOTg2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGl4ZWxCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhl
bEJ1ZmZlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTYxLDYgKzYxLDE4IEBAIHB1YmxpYzoKIAogICAgIFBpeGVsQnVmZmVyIGRlZXBD
bG9uZSgpIGNvbnN0OwogCisgICAgdWludDhfdCogYnl0ZXMoKSBjb25zdDsKKyAgICBzaXplX3Qg
Ynl0ZUxlbmd0aCgpIGNvbnN0OworCisgICAgYm9vbCBzZXRSYW5nZShjb25zdCB2b2lkKiBkYXRh
LCBzaXplX3QgZGF0YUJ5dGVMZW5ndGgsIHNpemVfdCBieXRlT2Zmc2V0KTsKKyAgICBib29sIHpl
cm9SYW5nZShzaXplX3QgYnl0ZU9mZnNldCwgc2l6ZV90IHJhbmdlQnl0ZUxlbmd0aCk7CisgICAg
dm9pZCB6ZXJvRmlsbCgpIHsgemVyb1JhbmdlKDAsIGJ5dGVMZW5ndGgoKSk7IH0KKworICAgIHVp
bnQ4X3QgaXRlbShzaXplX3QgaW5kZXgpIGNvbnN0OworICAgIHZvaWQgc2V0KHNpemVfdCBpbmRl
eCwgZG91YmxlIHZhbHVlKTsKKworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGNyZWF0
ZVNjcmF0Y2hQaXhlbEJ1ZmZlcihjb25zdCBJbnRTaXplJikgY29uc3Q7CisKICAgICB0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGRlY29k
ZShEZWNvZGVyJik7CiAKQEAgLTExOSw0ICsxMzEsNCBAQCB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBQaXhlbEJ1ZmZlcjo6ZGVjb2RlKERlY29kZXIm
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
c2l0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
c2l0ZS5oCmluZGV4IDE5YjY4ZjRhZTlkMi4uNjgwMWI3ZGNmNTRlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCkBA
IC03Myw4ICs3Myw2IEBAIHByaXZhdGU6CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFs
UmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgaW5saW5lIHZvaWQgcGxhdGZvcm1Bcml0aG1ldGljU29mdHdh
cmUoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRl
c3RpbmF0aW9uLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7Ci0KICNp
ZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCiAgICAgdGVtcGxhdGUgPGludCBiMSwgaW50IGI0
PgogICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc05lb24oY29u
c3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxB
cnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJ
bWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckltYWdlLmNwcAppbmRleCBiMTA2ZGYzYjFmZmMuLjgwOGQ0ODViNGNmOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFn
ZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMDAsNDYgKzMwMCw0NSBAQCB2b2lkIEZpbHRlckltYWdlOjpjb3JyZWN0UHJlbXVs
dGlwbGllZFBpeGVsQnVmZmVyKCkKICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVy
IHx8IG1faXNWYWxpZFByZW11bHRpcGxpZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFVpbnQ4
Q2xhbXBlZEFycmF5JiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXItPmRh
dGEoKTsKLSAgICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5LmRhdGEoKTsKLSAgICBp
bnQgcGl4ZWxBcnJheUxlbmd0aCA9IGltYWdlQXJyYXkubGVuZ3RoKCk7CisgICAgdWludDhfdCog
cGl4ZWxCeXRlcyA9IG1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyLT5ieXRlcygpOworICAgIGlu
dCBwaXhlbEJ5dGVMZW5ndGggPSBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlci0+Ynl0ZUxlbmd0
aCgpOwogCiAgICAgLy8gV2UgbXVzdCBoYXZlIGZvdXIgYnl0ZXMgcGVyIHBpeGVsLCBhbmQgY29t
cGxldGUgcGl4ZWxzCi0gICAgQVNTRVJUKCEocGl4ZWxBcnJheUxlbmd0aCAlIDQpKTsKKyAgICBB
U1NFUlQoIShwaXhlbEJ5dGVMZW5ndGggJSA0KSk7CiAKICNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJ
TlNJQ1MpCi0gICAgaWYgKHBpeGVsQXJyYXlMZW5ndGggPj0gNjQpIHsKLSAgICAgICAgdWludDhf
dCogbGFzdFBpeGVsID0gcGl4ZWxEYXRhICsgKHBpeGVsQXJyYXlMZW5ndGggJiB+MHgzZik7Cisg
ICAgaWYgKHBpeGVsQnl0ZUxlbmd0aCA+PSA2NCkgeworICAgICAgICB1aW50OF90KiBsYXN0UGl4
ZWwgPSBwaXhlbEJ5dGVzICsgKHBpeGVsQnl0ZUxlbmd0aCAmIH4weDNmKTsKICAgICAgICAgZG8g
ewotICAgICAgICAgICAgLy8gSW5jcmVtZW50cyBwaXhlbERhdGEgYnkgNjQuCi0gICAgICAgICAg
ICB1aW50OHgxNng0X3Qgc2l4dGVlblBpeGVscyA9IHZsZDRxX3U4KHBpeGVsRGF0YSk7CisgICAg
ICAgICAgICAvLyBJbmNyZW1lbnRzIHBpeGVsQnl0ZXMgYnkgNjQuCisgICAgICAgICAgICB1aW50
OHgxNng0X3Qgc2l4dGVlblBpeGVscyA9IHZsZDRxX3U4KHBpeGVsQnl0ZXMpOwogICAgICAgICAg
ICAgc2l4dGVlblBpeGVscy52YWxbMF0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFswXSwg
c2l4dGVlblBpeGVscy52YWxbM10pOwogICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMV0g
PSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsxXSwgc2l4dGVlblBpeGVscy52YWxbM10pOwog
ICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMl0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxz
LnZhbFsyXSwgc2l4dGVlblBpeGVscy52YWxbM10pOwotICAgICAgICAgICAgdnN0NHFfdTgocGl4
ZWxEYXRhLCBzaXh0ZWVuUGl4ZWxzKTsKLSAgICAgICAgICAgIHBpeGVsRGF0YSArPSA2NDsKLSAg
ICAgICAgfSB3aGlsZSAocGl4ZWxEYXRhIDwgbGFzdFBpeGVsKTsKKyAgICAgICAgICAgIHZzdDRx
X3U4KHBpeGVsQnl0ZXMsIHNpeHRlZW5QaXhlbHMpOworICAgICAgICAgICAgcGl4ZWxCeXRlcyAr
PSA2NDsKKyAgICAgICAgfSB3aGlsZSAocGl4ZWxCeXRlcyA8IGxhc3RQaXhlbCk7CiAKLSAgICAg
ICAgcGl4ZWxBcnJheUxlbmd0aCAmPSAweDNmOwotICAgICAgICBpZiAoIXBpeGVsQXJyYXlMZW5n
dGgpCisgICAgICAgIHBpeGVsQnl0ZUxlbmd0aCAmPSAweDNmOworICAgICAgICBpZiAoIXBpeGVs
Qnl0ZUxlbmd0aCkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKIAotICAgIGlu
dCBudW1QaXhlbHMgPSBwaXhlbEFycmF5TGVuZ3RoIC8gNDsKKyAgICBpbnQgbnVtUGl4ZWxzID0g
cGl4ZWxCeXRlTGVuZ3RoIC8gNDsKIAogICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIHBpeGVsLCBj
aGVja2luZyBhbHBoYSBhbmQgYWRqdXN0aW5nIGNvbG9yIGNvbXBvbmVudHMgaWYgbmVjZXNzYXJ5
CiAgICAgd2hpbGUgKC0tbnVtUGl4ZWxzID49IDApIHsKICAgICAgICAgLy8gQWxwaGEgaXMgdGhl
IDR0aCBieXRlIGluIGEgcGl4ZWwKLSAgICAgICAgdWludDhfdCBhID0gKihwaXhlbERhdGEgKyAz
KTsKKyAgICAgICAgdWludDhfdCBhID0gKihwaXhlbEJ5dGVzICsgMyk7CiAgICAgICAgIC8vIENs
YW1wIGVhY2ggY29tcG9uZW50IHRvIGFscGhhLCBhbmQgaW5jcmVtZW50IHRoZSBwaXhlbCBsb2Nh
dGlvbgogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICAgICAg
aWYgKCpwaXhlbERhdGEgPiBhKQotICAgICAgICAgICAgICAgICpwaXhlbERhdGEgPSBhOwotICAg
ICAgICAgICAgKytwaXhlbERhdGE7CisgICAgICAgICAgICBpZiAoKnBpeGVsQnl0ZXMgPiBhKQor
ICAgICAgICAgICAgICAgICpwaXhlbEJ5dGVzID0gYTsKKyAgICAgICAgICAgICsrcGl4ZWxCeXRl
czsKICAgICAgICAgfQogICAgICAgICAvLyBJbmNyZW1lbnQgZm9yIGFscGhhCi0gICAgICAgICsr
cGl4ZWxEYXRhOworICAgICAgICArK3BpeGVsQnl0ZXM7CiAgICAgfQogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29s
b3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyLmNwcApp
bmRleCAzMTYzYTU2ZGU0MzUuLjMyNzNhNDUwYTM3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdh
cmVBcHBsaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuY3BwCkBAIC0zLDcgKzMs
NyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KLSAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtODMsMjUgKzgzLDIxIEBAIGlubGluZSB2b2lkIEZFQ29sb3JN
YXRyaXhTb2Z0d2FyZUFwcGxpZXI6Omx1bWluYW5jZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4s
IGZsCiAjaWYgVVNFKEFDQ0VMRVJBVEUpCiB2b2lkIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxp
ZXI6OmFwcGx5UGxhdGZvcm1BY2NlbGVyYXRlZChQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIpIGNv
bnN0CiB7Ci0gICAgYXV0byYgcGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLmRhdGEoKTsKKyAgICBh
dXRvKiBwaXhlbEJ5dGVzID0gcGl4ZWxCdWZmZXIuYnl0ZXMoKTsKICAgICBhdXRvIGJ1ZmZlclNp
emUgPSBwaXhlbEJ1ZmZlci5zaXplKCk7Ci0KLSAgICBBU1NFUlQocGl4ZWxBcnJheS5sZW5ndGgo
KSA9PSBidWZmZXJTaXplLmFyZWEoKSAqIDQpOwotICAgIAogICAgIGNvbnN0IGludDMyX3QgZGl2
aXNvciA9IDI1NjsKLSAgICB1aW50OF90KiBkYXRhID0gcGl4ZWxBcnJheS5kYXRhKCk7CiAKICAg
ICB2SW1hZ2VfQnVmZmVyIHNyYzsKICAgICBzcmMud2lkdGggPSBidWZmZXJTaXplLndpZHRoKCk7
CiAgICAgc3JjLmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0KCk7CiAgICAgc3JjLnJvd0J5dGVz
ID0gYnVmZmVyU2l6ZS53aWR0aCgpICogNDsKLSAgICBzcmMuZGF0YSA9IGRhdGE7CisgICAgc3Jj
LmRhdGEgPSBwaXhlbEJ5dGVzOwogICAgIAogICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKICAgICBk
ZXN0LndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOwogICAgIGRlc3QuaGVpZ2h0ID0gYnVmZmVy
U2l6ZS5oZWlnaHQoKTsKICAgICBkZXN0LnJvd0J5dGVzID0gYnVmZmVyU2l6ZS53aWR0aCgpICog
NDsKLSAgICBkZXN0LmRhdGEgPSBkYXRhOworICAgIGRlc3QuZGF0YSA9IHBpeGVsQnl0ZXM7CiAK
ICAgICBzd2l0Y2ggKG1fZWZmZWN0LnR5cGUoKSkgewogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9U
WVBFX1VOS05PV046CkBAIC0xOTIsNTMgKzE4OCw1MiBAQCB2b2lkIEZFQ29sb3JNYXRyaXhTb2Z0
d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1BY2NlbGVyYXRlZChQaXhlbEJ1ZmZlciYgcGl4ZWxC
dQogCiB2b2lkIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1VbmFj
Y2VsZXJhdGVkKFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlcikgY29uc3QKIHsKLSAgICBhdXRvJiBw
aXhlbEFycmF5ID0gcGl4ZWxCdWZmZXIuZGF0YSgpOwotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlM
ZW5ndGggPSBwaXhlbEFycmF5Lmxlbmd0aCgpOworICAgIGF1dG8gcGl4ZWxCeXRlTGVuZ3RoID0g
cGl4ZWxCdWZmZXIuYnl0ZUxlbmd0aCgpOwogCiAgICAgc3dpdGNoIChtX2VmZmVjdC50eXBlKCkp
IHsKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgogICAgICAgICBicmVhazsK
IAogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVu
Z3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewotICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4
ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7Ci0gICAgICAgICAgICBmbG9hdCBncmVlbiA9
IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKLSAgICAgICAgICAgIGZsb2F0
IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7Ci0gICAgICAgICAg
ICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQg
PCBwaXhlbEJ5dGVMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7CisgICAgICAgICAgICBm
bG9hdCByZWQgPSBwaXhlbEJ1ZmZlci5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7CisgICAgICAgICAg
ICBmbG9hdCBncmVlbiA9IHBpeGVsQnVmZmVyLml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7Cisg
ICAgICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxCdWZmZXIuaXRlbShwaXhlbEJ5dGVPZmZzZXQg
KyAyKTsKKyAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxCdWZmZXIuaXRlbShwaXhlbEJ5
dGVPZmZzZXQgKyAzKTsKICAgICAgICAgICAgIG1hdHJpeChyZWQsIGdyZWVuLCBibHVlLCBhbHBo
YSk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7Ci0g
ICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7Ci0g
ICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKLSAg
ICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKKyAg
ICAgICAgICAgIHBpeGVsQnVmZmVyLnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7CisgICAgICAg
ICAgICBwaXhlbEJ1ZmZlci5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOworICAgICAg
ICAgICAgcGl4ZWxCdWZmZXIuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJsdWUpOworICAgICAg
ICAgICAgcGl4ZWxCdWZmZXIuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKICAgICAg
ICAgfQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVS
QVRFOgogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFy
cmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewotICAgICAgICAgICAgZmxvYXQgcmVk
ID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7Ci0gICAgICAgICAgICBmbG9hdCBn
cmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKLSAgICAgICAgICAg
IGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7Ci0gICAg
ICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAz
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVP
ZmZzZXQgPCBwaXhlbEJ5dGVMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7CisgICAgICAg
ICAgICBmbG9hdCByZWQgPSBwaXhlbEJ1ZmZlci5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7CisgICAg
ICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQnVmZmVyLml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsg
MSk7CisgICAgICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxCdWZmZXIuaXRlbShwaXhlbEJ5dGVP
ZmZzZXQgKyAyKTsKKyAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxCdWZmZXIuaXRlbShw
aXhlbEJ5dGVPZmZzZXQgKyAzKTsKICAgICAgICAgICAgIHNhdHVyYXRlQW5kSHVlUm90YXRlKHJl
ZCwgZ3JlZW4sIGJsdWUpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zm
c2V0LCByZWQpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsg
MSwgZ3JlZW4pOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsg
MiwgYmx1ZSk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAz
LCBhbHBoYSk7CisgICAgICAgICAgICBwaXhlbEJ1ZmZlci5zZXQocGl4ZWxCeXRlT2Zmc2V0LCBy
ZWQpOworICAgICAgICAgICAgcGl4ZWxCdWZmZXIuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdy
ZWVuKTsKKyAgICAgICAgICAgIHBpeGVsQnVmZmVyLnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBi
bHVlKTsKKyAgICAgICAgICAgIHBpeGVsQnVmZmVyLnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBh
bHBoYSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEZFQ09MT1JNQVRS
SVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0
ZU9mZnNldCA9IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0
ZU9mZnNldCArPSA0KSB7Ci0gICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0o
cGl4ZWxCeXRlT2Zmc2V0KTsKLSAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5p
dGVtKHBpeGVsQnl0ZU9mZnNldCArIDEpOwotICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVs
QXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKLSAgICAgICAgICAgIGZsb2F0IGFscGhh
ID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQnl0ZUxl
bmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKKyAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBp
eGVsQnVmZmVyLml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKKyAgICAgICAgICAgIGZsb2F0IGdyZWVu
ID0gcGl4ZWxCdWZmZXIuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKKyAgICAgICAgICAgIGZs
b2F0IGJsdWUgPSBwaXhlbEJ1ZmZlci5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOworICAgICAg
ICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEJ1ZmZlci5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMp
OwogICAgICAgICAgICAgbHVtaW5hbmNlKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAgICAg
ICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKLSAgICAgICAgICAg
IHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKLSAgICAgICAgICAg
IHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJsdWUpOwotICAgICAgICAgICAg
cGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGEpOworICAgICAgICAgICAg
cGl4ZWxCdWZmZXIuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKKyAgICAgICAgICAgIHBpeGVs
QnVmZmVyLnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7CisgICAgICAgICAgICBwaXhl
bEJ1ZmZlci5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7CisgICAgICAgICAgICBwaXhl
bEJ1ZmZlci5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGEpOwogICAgICAgICB9CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGll
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIuY3BwCmluZGV4IDRmNGIzMjAxM2Ux
YS4uMTI4NzE1MWE4ZTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllci5jcHAKQEAgLTQsNyArNCw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENv
cHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTE0LDE2ICsxMTQsMTUgQEAgRkVD
b21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6TG9va3VwVGFibGUgRkVDb21wb25lbnRU
cmFuc2ZlclNvZnR3YXJlQXBwbGkKIAogdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVB
cHBsaWVyOjphcHBseVBsYXRmb3JtKFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlcikgY29uc3QKIHsK
LSAgICBhdXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXIuZGF0YSgpOwotICAgIHVuc2lnbmVk
IHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5Lmxlbmd0aCgpOwotICAgIHVpbnQ4X3QqIGRh
dGEgPSBwaXhlbEFycmF5LmRhdGEoKTsKKyAgICBhdXRvKiBkYXRhID0gcGl4ZWxCdWZmZXIuYnl0
ZXMoKTsKKyAgICBhdXRvIHBpeGVsQnl0ZUxlbmd0aCA9IHBpeGVsQnVmZmVyLmJ5dGVMZW5ndGgo
KTsKIAogICAgIGF1dG8gcmVkVGFibGUgICA9IGNvbXB1dGVMb29rdXBUYWJsZShtX2VmZmVjdC5y
ZWRGdW5jdGlvbigpKTsKICAgICBhdXRvIGdyZWVuVGFibGUgPSBjb21wdXRlTG9va3VwVGFibGUo
bV9lZmZlY3QuZ3JlZW5GdW5jdGlvbigpKTsKICAgICBhdXRvIGJsdWVUYWJsZSAgPSBjb21wdXRl
TG9va3VwVGFibGUobV9lZmZlY3QuYmx1ZUZ1bmN0aW9uKCkpOwogICAgIGF1dG8gYWxwaGFUYWJs
ZSA9IGNvbXB1dGVMb29rdXBUYWJsZShtX2VmZmVjdC5hbHBoYUZ1bmN0aW9uKCkpOwogCi0gICAg
Zm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgcGl4ZWxBcnJheUxl
bmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgeworICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQg
PSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQnl0ZUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewog
ICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0XSAgICAgPSByZWRUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0
XV07CiAgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAxXSA9IGdyZWVuVGFibGVbZGF0YVtwaXhl
bE9mZnNldCArIDFdXTsKICAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDJdID0gYmx1ZVRhYmxl
W2RhdGFbcGl4ZWxPZmZzZXQgKyAyXV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIuY3BwCmluZGV4IDI4YTE2Y2U3NWJiYy4uM2JjMzMx
YTVhYTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29m
dHdhcmVBcHBsaWVyLmNwcApAQCAtNCw3ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBF
cmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsg
U2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEtMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0xNDAsMTMgKzE0MCwxMyBAQCBib29sIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBs
aWVyOjphcHBseUFyaXRobWV0aWMoRmlsdGVySW1hZ2UmIGlucHV0LCBGaWx0ZXJJbWFnZQogICAg
IEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVzdWx0LmFic29sdXRlSW1hZ2VSZWN0UmVs
YXRpdmVUbyhpbnB1dDIpOwogICAgIGlucHV0Mi5jb3B5UGl4ZWxCdWZmZXIoKmRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIsIGVmZmVjdEJEcmF3aW5nUmVjdCk7CiAKLSAgICBhdXRvJiBzb3VyY2VQaXhl
bEFycmF5ID0gc291cmNlUGl4ZWxCdWZmZXItPmRhdGEoKTsKLSAgICBhdXRvJiBkZXN0aW5hdGlv
blBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgYXV0byog
c291cmNlUGl4ZWxCeXRlcyA9IHNvdXJjZVBpeGVsQnVmZmVyLT5ieXRlcygpOworICAgIGF1dG8q
IGRlc3RpbmF0aW9uUGl4ZWxCeXRlcyA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmJ5dGVzKCk7
CiAKLSAgICBpbnQgbGVuZ3RoID0gc291cmNlUGl4ZWxBcnJheS5sZW5ndGgoKTsKLSAgICBBU1NF
UlQobGVuZ3RoID09IHN0YXRpY19jYXN0PGludD4oZGVzdGluYXRpb25QaXhlbEFycmF5Lmxlbmd0
aCgpKSk7CisgICAgYXV0byBsZW5ndGggPSBzb3VyY2VQaXhlbEJ1ZmZlci0+Ynl0ZUxlbmd0aCgp
OworICAgIEFTU0VSVChsZW5ndGggPT0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+Ynl0ZUxlbmd0
aCgpKTsKICNpZiAhSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgIGFwcGx5UGxhdGZvcm1B
cml0aG1ldGljKHNvdXJjZVBpeGVsQXJyYXkuZGF0YSgpLCBkZXN0aW5hdGlvblBpeGVsQXJyYXku
ZGF0YSgpLCBsZW5ndGgsIG1fZWZmZWN0LmsxKCksIG1fZWZmZWN0LmsyKCksIG1fZWZmZWN0Lmsz
KCksIG1fZWZmZWN0Lms0KCkpOworICAgIGFwcGx5UGxhdGZvcm1Bcml0aG1ldGljKHNvdXJjZVBp
eGVsQnl0ZXMsIGRlc3RpbmF0aW9uUGl4ZWxCeXRlcywgbGVuZ3RoLCBtX2VmZmVjdC5rMSgpLCBt
X2VmZmVjdC5rMigpLCBtX2VmZmVjdC5rMygpLCBtX2VmZmVjdC5rNCgpKTsKICNlbmRpZgogICAg
IHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVD
b252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5jcHAKaW5kZXggZTYxNDEyMDRkMDViLi42YmUw
YjMyMWNkMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZv
bHZlTWF0cml4U29mdHdhcmVBcHBsaWVyLmNwcApAQCAtNCw3ICs0LDcgQEAKICAqIENvcHlyaWdo
dCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChD
KSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEtMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC05OSwxNyArOTksMTcgQEAgaW5saW5lIHVpbnQ4X3QgRkVDb252b2x2ZU1hdHJp
eFNvZnR3YXJlQXBwbGllcjo6Y2xhbXBSR0JBVmFsdWUoZmxvYXQgY2hhbm5lbCwgdWkKICAgICBy
ZXR1cm4gY2hhbm5lbDsKIH0KIAotaW5saW5lIHZvaWQgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJl
QXBwbGllcjo6c2V0RGVzdGluYXRpb25QaXhlbHMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNv
dXJjZVBpeGVscywgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RQaXhlbHMsIGludCYgcGl4ZWwsIGZs
b2F0KiB0b3RhbHMsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGJvb2wgcHJlc2VydmVBbHBo
YVZhbHVlcykKK2lubGluZSB2b2lkIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNl
dERlc3RpbmF0aW9uUGl4ZWxzKGNvbnN0IFBpeGVsQnVmZmVyJiBzb3VyY2VQaXhlbEJ1ZmZlciwg
UGl4ZWxCdWZmZXImIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGludCYgcGl4ZWwsIGZsb2F0KiB0
b3RhbHMsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGJvb2wgcHJlc2VydmVBbHBoYVZhbHVl
cykKIHsKICAgICB1aW50OF90IG1heEFscGhhID0gcHJlc2VydmVBbHBoYVZhbHVlcyA/IDI1NSA6
IGNsYW1wUkdCQVZhbHVlKHRvdGFsc1szXSAvIGRpdmlzb3IgKyBiaWFzKTsKICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IDM7ICsraSkKLSAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwrKywgY2xh
bXBSR0JBVmFsdWUodG90YWxzW2ldIC8gZGl2aXNvciArIGJpYXMsIG1heEFscGhhKSk7CisgICAg
ICAgIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIuc2V0KHBpeGVsKyssIGNsYW1wUkdCQVZhbHVlKHRv
dGFsc1tpXSAvIGRpdmlzb3IgKyBiaWFzLCBtYXhBbHBoYSkpOwogCiAgICAgaWYgKHByZXNlcnZl
QWxwaGFWYWx1ZXMpIHsKLSAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwsIHNvdXJjZVBpeGVs
cy5pdGVtKHBpeGVsKSk7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIuc2V0KHBpeGVs
LCBzb3VyY2VQaXhlbEJ1ZmZlci5pdGVtKHBpeGVsKSk7CiAgICAgICAgICsrcGl4ZWw7CiAgICAg
fSBlbHNlCi0gICAgICAgIGRlc3RQaXhlbHMuc2V0KHBpeGVsKyssIG1heEFscGhhKTsKKyAgICAg
ICAgZGVzdGluYXRpb25QaXhlbEJ1ZmZlci5zZXQocGl4ZWwrKywgbWF4QWxwaGEpOwogfQogCiBp
bmxpbmUgaW50IEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmdldFBpeGVsVmFsdWUo
Y29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSkKQEAgLTE3MCwx
MSArMTcwLDExIEBAIGlubGluZSB2b2lkIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6
OnNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpCiAgICAgICAgICAgICB0b3RhbHNb
M10gPSAwOwogCiAgICAgICAgICAgICB3aGlsZSAoa2VybmVsVmFsdWUgPj0gMCkgewotICAgICAg
ICAgICAgICAgIHRvdGFsc1swXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZh
bHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVt
KGtlcm5lbFBpeGVsKyspKTsKLSAgICAgICAgICAgICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdE
YXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRp
bmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7Ci0gICAgICAgICAgICAg
ICAgdG90YWxzWzJdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICog
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVs
UGl4ZWwrKykpOworICAgICAgICAgICAgICAgIHRvdGFsc1swXSArPSBwYWludGluZ0RhdGEua2Vy
bmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEu
c291cmNlUGl4ZWxCdWZmZXIuaXRlbShrZXJuZWxQaXhlbCsrKSk7CisgICAgICAgICAgICAgICAg
dG90YWxzWzFdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zb3VyY2VQaXhlbEJ1ZmZlci5pdGVtKGtlcm5l
bFBpeGVsKyspKTsKKyAgICAgICAgICAgICAgICB0b3RhbHNbMl0gKz0gcGFpbnRpbmdEYXRhLmtl
cm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRh
LnNvdXJjZVBpeGVsQnVmZmVyLml0ZW0oa2VybmVsUGl4ZWwrKykpOwogICAgICAgICAgICAgICAg
IGlmICghcGFpbnRpbmdEYXRhLnByZXNlcnZlQWxwaGEpCi0gICAgICAgICAgICAgICAgICAgIHRv
dGFsc1szXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRp
Y19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVs
KSk7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsc1szXSArPSBwYWludGluZ0RhdGEua2VybmVs
TWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc291
cmNlUGl4ZWxCdWZmZXIuaXRlbShrZXJuZWxQaXhlbCkpOwogICAgICAgICAgICAgICAgICsra2Vy
bmVsUGl4ZWw7CiAgICAgICAgICAgICAgICAgLS1rZXJuZWxWYWx1ZTsKICAgICAgICAgICAgICAg
ICBpZiAoIS0td2lkdGgpIHsKQEAgLTE4Myw3ICsxODMsNyBAQCBpbmxpbmUgdm9pZCBGRUNvbnZv
bHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEm
IHBhaQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgc2V0
RGVzdGluYXRpb25QaXhlbHMocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXksIHBhaW50aW5nRGF0
YS5kc3RQaXhlbEFycmF5LCBwaXhlbCwgdG90YWxzLCBwYWludGluZ0RhdGEuZGl2aXNvciwgcGFp
bnRpbmdEYXRhLmJpYXMsIHBhaW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhhKTsKKyAgICAgICAgICAg
IHNldERlc3RpbmF0aW9uUGl4ZWxzKHBhaW50aW5nRGF0YS5zb3VyY2VQaXhlbEJ1ZmZlciwgcGFp
bnRpbmdEYXRhLmRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIHBpeGVsLCB0b3RhbHMsIHBhaW50aW5n
RGF0YS5kaXZpc29yLCBwYWludGluZ0RhdGEuYmlhcywgcGFpbnRpbmdEYXRhLnByZXNlcnZlQWxw
aGEpOwogICAgICAgICAgICAgc3RhcnRLZXJuZWxQaXhlbCArPSA0OwogICAgICAgICB9CiAgICAg
ICAgIHBpeGVsICs9IHhJbmNyZWFzZTsKQEAgLTIyMiwxMiArMjIyLDEyIEBAIGlubGluZSB2b2lk
IEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNldE91dGVyUGl4ZWxzKFBhaW50aW5n
RGF0YSYgcGFpbnRpCiAgICAgICAgICAgICB3aGlsZSAoa2VybmVsVmFsdWUgPj0gMCkgewogICAg
ICAgICAgICAgICAgIGludCBwaXhlbEluZGV4ID0gZ2V0UGl4ZWxWYWx1ZShwYWludGluZ0RhdGEs
IGtlcm5lbFBpeGVsWCwga2VybmVsUGl4ZWxZKTsKICAgICAgICAgICAgICAgICBpZiAocGl4ZWxJ
bmRleCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRvdGFsc1swXSArPSBwYWludGluZ0Rh
dGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGlu
Z0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgdG90YWxzWzFdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICog
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJ
bmRleCArIDEpKTsKLSAgICAgICAgICAgICAgICAgICAgdG90YWxzWzJdICs9IHBhaW50aW5nRGF0
YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5n
RGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCArIDIpKTsKKyAgICAgICAgICAgICAg
ICAgICAgdG90YWxzWzBdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVd
ICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zb3VyY2VQaXhlbEJ1ZmZlci5pdGVt
KHBpeGVsSW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IHBhaW50aW5n
RGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50
aW5nRGF0YS5zb3VyY2VQaXhlbEJ1ZmZlci5pdGVtKHBpeGVsSW5kZXggKyAxKSk7CisgICAgICAg
ICAgICAgICAgICAgIHRvdGFsc1syXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5l
bFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc291cmNlUGl4ZWxCdWZm
ZXIuaXRlbShwaXhlbEluZGV4ICsgMikpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBpZiAoIXBhaW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhhICYmIHBpeGVsSW5kZXggPj0gMCkK
LSAgICAgICAgICAgICAgICAgICAgdG90YWxzWzNdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRy
aXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhl
bEFycmF5Lml0ZW0ocGl4ZWxJbmRleCArIDMpKTsKKyAgICAgICAgICAgICAgICAgICAgdG90YWxz
WzNdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zb3VyY2VQaXhlbEJ1ZmZlci5pdGVtKHBpeGVsSW5kZXgg
KyAzKSk7CiAgICAgICAgICAgICAgICAgKytrZXJuZWxQaXhlbFg7CiAgICAgICAgICAgICAgICAg
LS1rZXJuZWxWYWx1ZTsKICAgICAgICAgICAgICAgICBpZiAoIS0td2lkdGgpIHsKQEAgLTIzNyw3
ICsyMzcsNyBAQCBpbmxpbmUgdm9pZCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpz
ZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aQogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHMocGFpbnRpbmdE
YXRhLnNyY1BpeGVsQXJyYXksIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBwaXhlbCwgdG90
YWxzLCBwYWludGluZ0RhdGEuZGl2aXNvciwgcGFpbnRpbmdEYXRhLmJpYXMsIHBhaW50aW5nRGF0
YS5wcmVzZXJ2ZUFscGhhKTsKKyAgICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzKHBhaW50
aW5nRGF0YS5zb3VyY2VQaXhlbEJ1ZmZlciwgcGFpbnRpbmdEYXRhLmRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIsIHBpeGVsLCB0b3RhbHMsIHBhaW50aW5nRGF0YS5kaXZpc29yLCBwYWludGluZ0RhdGEu
YmlhcywgcGFpbnRpbmdEYXRhLnByZXNlcnZlQWxwaGEpOwogICAgICAgICAgICAgKytzdGFydEtl
cm5lbFBpeGVsWDsKICAgICAgICAgfQogICAgICAgICBwaXhlbCArPSB4SW5jcmVhc2U7CkBAIC0z
MDAsMTQgKzMwMCwxMSBAQCBib29sIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFw
cGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdAogICAgIGlmICghc291cmNl
UGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8mIHNvdXJjZVBp
eGVsQXJyYXkgPSBzb3VyY2VQaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIGF1dG8mIGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLSAgICAKICAg
ICBhdXRvIHBhaW50U2l6ZSA9IHJlc3VsdC5hYnNvbHV0ZUltYWdlUmVjdCgpLnNpemUoKTsKIAog
ICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEgPSB7Ci0gICAgICAgIHNvdXJjZVBpeGVsQXJy
YXksCi0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwKKyAgICAgICAgKnNvdXJjZVBpeGVs
QnVmZmVyLAorICAgICAgICAqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwKICAgICAgICAgcGFpbnRT
aXplLndpZHRoKCksCiAgICAgICAgIHBhaW50U2l6ZS5oZWlnaHQoKSwKICAgICAgICAgbV9lZmZl
Y3Qua2VybmVsU2l6ZSgpLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29u
dm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuaAppbmRleCA1M2ExOGE2Mjk0OTYuLjg4YzM1MmY4
NDczZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0
cml4U29mdHdhcmVBcHBsaWVyLmgKQEAgLTQ1LDggKzQ1LDggQEAgcHJpdmF0ZToKICAgICBib29s
IGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIEZp
bHRlckltYWdlJiByZXN1bHQpIGNvbnN0IGZpbmFsOwogCiAgICAgc3RydWN0IFBhaW50aW5nRGF0
YSB7Ci0gICAgICAgIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5OwotICAg
ICAgICBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheTsKKyAgICAgICAgY29uc3QgUGl4
ZWxCdWZmZXImIHNvdXJjZVBpeGVsQnVmZmVyOworICAgICAgICBQaXhlbEJ1ZmZlciYgZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlcjsKICAgICAgICAgaW50IHdpZHRoOwogICAgICAgICBpbnQgaGVpZ2h0
OwogCkBAIC02MCw3ICs2MCw3IEBAIHByaXZhdGU6CiAgICAgfTsKIAogICAgIHN0YXRpYyBpbmxp
bmUgdWludDhfdCBjbGFtcFJHQkFWYWx1ZShmbG9hdCBjaGFubmVsLCB1aW50OF90IG1heCA9IDI1
NSk7Ci0gICAgc3RhdGljIGlubGluZSB2b2lkIHNldERlc3RpbmF0aW9uUGl4ZWxzKGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2VQaXhlbHMsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0UGl4
ZWxzLCBpbnQmIHBpeGVsLCBmbG9hdCogdG90YWxzLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFz
LCBib29sIHByZXNlcnZlQWxwaGFWYWx1ZXMpOworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRE
ZXN0aW5hdGlvblBpeGVscyhjb25zdCBQaXhlbEJ1ZmZlciYgc291cmNlUGl4ZWxCdWZmZXIsIFBp
eGVsQnVmZmVyJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBpbnQmIHBpeGVsLCBmbG9hdCogdG90
YWxzLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBib29sIHByZXNlcnZlQWxwaGFWYWx1ZXMp
OwogCiAgICAgc3RhdGljIGlubGluZSBpbnQgZ2V0UGl4ZWxWYWx1ZShjb25zdCBQYWludGluZ0Rh
dGEmLCBpbnQgeCwgaW50IHkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBs
aWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIuY3BwCmluZGV4IDEyMTY0ZTM3OGMy
OS4uZjdmYzQ1Yjc3MDJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyLmNwcApAQCAtNCw3ICs0LDcgQEAKICAq
IENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29w
eXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJp
Z2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01OCw4ICs1OCw2IEBAIGJvb2wgRkVEaXNw
bGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBj
b25zdCBGaWx0ZXJJCiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5h
dGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KICAgICBhdXRvIGVmZmVjdEFEcmF3aW5nUmVjdCA9
IHJlc3VsdC5hYnNvbHV0ZUltYWdlUmVjdFJlbGF0aXZlVG8oaW5wdXQpOwogICAgIGF1dG8gaW5w
dXRQaXhlbEJ1ZmZlciA9IGlucHV0LmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQsIGVmZmVjdEFEcmF3aW5nUmVjdCk7CiAKQEAgLTcwLDkgKzY4LDcg
QEAgYm9vbCBGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmls
dGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckkKICAgICBpZiAoIWlucHV0UGl4ZWxCdWZmZXIgfHwg
IWRpc3BsYWNlbWVudFBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBh
dXRvJiBpbnB1dFBpeGVsQXJyYXkgPSBpbnB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgYXV0
byYgZGlzcGxhY2VtZW50UGl4ZWxBcnJheSA9IGRpc3BsYWNlbWVudFBpeGVsQnVmZmVyLT5kYXRh
KCk7Ci0gICAgQVNTRVJUKGlucHV0UGl4ZWxBcnJheS5sZW5ndGgoKSA9PSBkaXNwbGFjZW1lbnRQ
aXhlbEFycmF5Lmxlbmd0aCgpKTsKKyAgICBBU1NFUlQoaW5wdXRQaXhlbEJ1ZmZlci0+Ynl0ZUxl
bmd0aCgpID09IGRpc3BsYWNlbWVudFBpeGVsQnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwogCiAgICAg
YXV0byBwYWludFNpemUgPSByZXN1bHQuYWJzb2x1dGVJbWFnZVJlY3QoKS5zaXplKCk7CiAgICAg
YXV0byBzY2FsZSA9IGZpbHRlci5yZXNvbHZlZFNpemUoeyBtX2VmZmVjdC5zY2FsZSgpLCBtX2Vm
ZmVjdC5zY2FsZSgpIH0pOwpAQCAtOTQsMTYgKzkwLDE2IEBAIGJvb2wgRkVEaXNwbGFjZW1lbnRN
YXBTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0
ZXJJCiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgcGFpbnRTaXplLndpZHRoKCk7ICsreCkg
ewogICAgICAgICAgICAgaW50IGRlc3RpbmF0aW9uSW5kZXggPSBsaW5lU3RhcnRPZmZzZXQgKyB4
ICogNDsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaW50IHNyY1ggPSB4ICsgc3RhdGljX2Nh
c3Q8aW50PihzY2FsZUZvckNvbG9yWCAqIGRpc3BsYWNlbWVudFBpeGVsQXJyYXkuaXRlbShkZXN0
aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFgpICsgc2NhbGVkT2Zmc2V0WCk7Ci0g
ICAgICAgICAgICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29sb3JZ
ICogZGlzcGxhY2VtZW50UGl4ZWxBcnJheS5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFj
ZW1lbnRDaGFubmVsWSkgKyBzY2FsZWRPZmZzZXRZKTsKKyAgICAgICAgICAgIGludCBzcmNYID0g
eCArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclggKiBkaXNwbGFjZW1lbnRQaXhlbEJ1
ZmZlci0+aXRlbShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFgpICsgc2Nh
bGVkT2Zmc2V0WCk7CisgICAgICAgICAgICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNfY2FzdDxpbnQ+
KHNjYWxlRm9yQ29sb3JZICogZGlzcGxhY2VtZW50UGl4ZWxCdWZmZXItPml0ZW0oZGVzdGluYXRp
b25JbmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxZKSArIHNjYWxlZE9mZnNldFkpOwogCi0gICAg
ICAgICAgICB1bnNpZ25lZCogZGVzdGluYXRpb25QaXhlbFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQqPihkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpICsgZGVzdGluYXRpb25JbmRl
eCk7CisgICAgICAgICAgICB1bnNpZ25lZCogZGVzdGluYXRpb25QaXhlbFB0ciA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQqPihkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5ieXRlcygpICsgZGVz
dGluYXRpb25JbmRleCk7CiAgICAgICAgICAgICBpZiAoc3JjWCA8IDAgfHwgc3JjWCA+PSBwYWlu
dFNpemUud2lkdGgoKSB8fCBzcmNZIDwgMCB8fCBzcmNZID49IHBhaW50U2l6ZS5oZWlnaHQoKSkg
ewogICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvblBpeGVsUHRyID0gMDsKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgKmRlc3RpbmF0aW9u
UGl4ZWxQdHIgPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGlucHV0UGl4ZWxBcnJheS5k
YXRhKCkgKyBieXRlT2Zmc2V0T2ZQaXhlbChzcmNYLCBzcmNZLCByb3dCeXRlcykpOworICAgICAg
ICAgICAgKmRlc3RpbmF0aW9uUGl4ZWxQdHIgPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+
KGlucHV0UGl4ZWxCdWZmZXItPmJ5dGVzKCkgKyBieXRlT2Zmc2V0T2ZQaXhlbChzcmNYLCBzcmNZ
LCByb3dCeXRlcykpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRHJvcFNoYWRvd1NvZnR3
YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFRHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllci5jcHAKaW5kZXggNDQ3Yzg5NWQx
OTg0Li42ZGIwM2M0NDM5ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
RHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllci5jcHAKQEAgLTY1LDkgKzY1LDggQEAgYm9vbCBGRURy
b3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25z
dCBGaWx0ZXJJbWFnZVYKICAgICBpZiAoIXBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBhdXRvJiBzb3VyY2VQaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsK
LSAgICBjb250ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNvdXJjZVBpeGVsQXJyYXkuZGF0YSgp
LCBwaXhlbEJ1ZmZlci0+c2l6ZSgpLCA0ICogcGl4ZWxCdWZmZXItPnNpemUoKS53aWR0aCgpKTsK
LSAgICAKKyAgICBjb250ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHBpeGVsQnVmZmVyLT5ieXRl
cygpLCBwaXhlbEJ1ZmZlci0+c2l6ZSgpLCA0ICogcGl4ZWxCdWZmZXItPnNpemUoKS53aWR0aCgp
KTsKKwogICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIHNoYWRv
d0FyZWEpOwogCiAgICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9z
aXRlT3BlcmF0b3I6OlNvdXJjZUluKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxp
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllci5jcHAKaW5kZXggYTg2YTlmZDBhZWE1Li5h
M2EwYjIwMzgwMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVz
c2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIuY3BwCkBAIC01LDcgKzUsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChD
KSAyMDEwIElnYWxpYSwgUy5MLgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDIyIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTczLDEwICs3MywxMCBAQCBpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3
YXJlQXBwbGllcjo6a2VybmVsUG9zaXRpb24oaW50IGJsdXJJdGVyYXRpb24sIHVucwogfQogCiAv
LyBUaGlzIGZ1bmN0aW9uIG9ubHkgb3BlcmF0ZXMgb24gQWxwaGEgY2hhbm5lbC4KLWlubGluZSB2
b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyQWxwaGFPbmx5KGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0
UGl4ZWxBcnJheSwgdW5zaWduZWQgZHgsIGludCYgZHhMZWZ0LCBpbnQmIGR4UmlnaHQsIGludCYg
c3RyaWRlLCBpbnQmIHN0cmlkZUxpbmUsIGludCYgZWZmZWN0V2lkdGgsIGludCYgZWZmZWN0SGVp
Z2h0LCBjb25zdCBpbnQmIG1heEtlcm5lbFNpemUpCitpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1
clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1ckFscGhhT25seShjb25zdCBQaXhlbEJ1ZmZlciYgc3Jj
UGl4ZWxCdWZmZXIsIFBpeGVsQnVmZmVyJiBkc3RQaXhlbEJ1ZmZlciwgdW5zaWduZWQgZHgsIGlu
dCYgZHhMZWZ0LCBpbnQmIGR4UmlnaHQsIGludCYgc3RyaWRlLCBpbnQmIHN0cmlkZUxpbmUsIGlu
dCYgZWZmZWN0V2lkdGgsIGludCYgZWZmZWN0SGVpZ2h0LCBjb25zdCBpbnQmIG1heEtlcm5lbFNp
emUpCiB7Ci0gICAgY29uc3QgdWludDhfdCogc3JjRGF0YSA9IHNyY1BpeGVsQXJyYXkuZGF0YSgp
OwotICAgIHVpbnQ4X3QqIGRzdERhdGEgPSBkc3RQaXhlbEFycmF5LmRhdGEoKTsKKyAgICBjb25z
dCB1aW50OF90KiBzcmNEYXRhID0gc3JjUGl4ZWxCdWZmZXIuYnl0ZXMoKTsKKyAgICB1aW50OF90
KiBkc3REYXRhID0gZHN0UGl4ZWxCdWZmZXIuYnl0ZXMoKTsKICAgICAvLyBNZW1vcnkgYWxpZ25t
ZW50IGlzOiBSR0JBLCB6ZXJvLWluZGV4IGJhc2VkLgogICAgIGNvbnN0IGludCBjaGFubmVsID0g
MzsKIApAQCAtMTEzLDE0ICsxMTMsMTQgQEAgaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0
d2FyZUFwcGxpZXI6OmJveEJsdXJBbHBoYU9ubHkoY29uc3QgVWludDhDbGFtcGVkQXIKICAgICB9
CiB9CiAKLWlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVy
KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJh
eSYgZHN0UGl4ZWxBcnJheSwgdW5zaWduZWQgZHgsIGludCBkeExlZnQsIGludCBkeFJpZ2h0LCBp
bnQgc3RyaWRlLCBpbnQgc3RyaWRlTGluZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVp
Z2h0LCBib29sIGFscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKK2lubGluZSB2b2lk
IEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyKGNvbnN0IFBpeGVsQnVmZmVy
JiBzcmNQaXhlbEJ1ZmZlciwgUGl4ZWxCdWZmZXImIGRzdFBpeGVsQnVmZmVyLCB1bnNpZ25lZCBk
eCwgaW50IGR4TGVmdCwgaW50IGR4UmlnaHQsIGludCBzdHJpZGUsIGludCBzdHJpZGVMaW5lLCBp
bnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQsIGJvb2wgYWxwaGFJbWFnZSwgRWRnZU1v
ZGVUeXBlIGVkZ2VNb2RlKQogewogICAgIGNvbnN0IGludCBtYXhLZXJuZWxTaXplID0gc3RkOjpt
aW4oZHhSaWdodCwgZWZmZWN0V2lkdGgpOwogICAgIGlmIChhbHBoYUltYWdlKQotICAgICAgICBy
ZXR1cm4gYm94Qmx1ckFscGhhT25seShzcmNQaXhlbEFycmF5LCBkc3RQaXhlbEFycmF5LCBkeCwg
ZHhMZWZ0LCBkeFJpZ2h0LCBzdHJpZGUsIHN0cmlkZUxpbmUsICBlZmZlY3RXaWR0aCwgZWZmZWN0
SGVpZ2h0LCBtYXhLZXJuZWxTaXplKTsKKyAgICAgICAgcmV0dXJuIGJveEJsdXJBbHBoYU9ubHko
c3JjUGl4ZWxCdWZmZXIsIGRzdFBpeGVsQnVmZmVyLCBkeCwgZHhMZWZ0LCBkeFJpZ2h0LCBzdHJp
ZGUsIHN0cmlkZUxpbmUsICBlZmZlY3RXaWR0aCwgZWZmZWN0SGVpZ2h0LCBtYXhLZXJuZWxTaXpl
KTsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5LmRhdGEoKTsK
LSAgICB1aW50OF90KiBkc3REYXRhID0gZHN0UGl4ZWxBcnJheS5kYXRhKCk7CisgICAgY29uc3Qg
dWludDhfdCogc3JjRGF0YSA9IHNyY1BpeGVsQnVmZmVyLmJ5dGVzKCk7CisgICAgdWludDhfdCog
ZHN0RGF0YSA9IGRzdFBpeGVsQnVmZmVyLmJ5dGVzKCk7CiAKICAgICAvLyBDb25jZXJuaW5nIHRo
ZSBhcnJheSB3aWR0aC9sZW5ndGg6IGl0IGlzIEVsZW1lbnQgc2l6ZSArIE1hcmdpbiArIEJvcmRl
ci4gVGhlIG51bWJlciBvZiBwaXhlbHMgd2lsbCBiZQogICAgIC8vIFAgPSB3aWR0aCAqIGhlaWdo
dCAqIGNoYW5uZWxzLgpAQCAtMjQzLDkgKzI0Myw5IEBAIGlubGluZSB2b2lkIEZFR2F1c3NpYW5C
bHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQ
CiB9CiAKICNpZiBVU0UoQUNDRUxFUkFURSkKLWlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29m
dHdhcmVBcHBsaWVyOjpib3hCbHVyQWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVm
ZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZSwg
aW50IHN0cmlkZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0KQoraW5saW5lIHZv
aWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJBY2NlbGVyYXRlZChQaXhl
bEJ1ZmZlciYgaW9CdWZmZXIsIFBpeGVsQnVmZmVyJiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJu
ZWxTaXplLCBpbnQgc3RyaWRlLCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQpCiB7
Ci0gICAgaWYgKCFpb0J1ZmZlci5kYXRhKCkgfHwgIXRlbXBCdWZmZXIuZGF0YSgpKSB7CisgICAg
aWYgKCFpb0J1ZmZlci5ieXRlcygpIHx8ICF0ZW1wQnVmZmVyLmJ5dGVzKCkpIHsKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yNjAsMTMg
KzI2MCwxMyBAQCBpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94
Qmx1ckFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5JgogICAgICAgICBrZXJuZWxTaXplICs9
IDE7CiAKICAgICB2SW1hZ2VfQnVmZmVyIGVmZmVjdEluQnVmZmVyOwotICAgIGVmZmVjdEluQnVm
ZmVyLmRhdGEgPSBzdGF0aWNfY2FzdDx2b2lkKj4oaW9CdWZmZXIuZGF0YSgpKTsKKyAgICBlZmZl
Y3RJbkJ1ZmZlci5kYXRhID0gaW9CdWZmZXIuYnl0ZXMoKTsKICAgICBlZmZlY3RJbkJ1ZmZlci53
aWR0aCA9IGVmZmVjdFdpZHRoOwogICAgIGVmZmVjdEluQnVmZmVyLmhlaWdodCA9IGVmZmVjdEhl
aWdodDsKICAgICBlZmZlY3RJbkJ1ZmZlci5yb3dCeXRlcyA9IHN0cmlkZTsKIAogICAgIHZJbWFn
ZV9CdWZmZXIgZWZmZWN0T3V0QnVmZmVyOwotICAgIGVmZmVjdE91dEJ1ZmZlci5kYXRhID0gdGVt
cEJ1ZmZlci5kYXRhKCk7CisgICAgZWZmZWN0T3V0QnVmZmVyLmRhdGEgPSB0ZW1wQnVmZmVyLmJ5
dGVzKCk7CiAgICAgZWZmZWN0T3V0QnVmZmVyLndpZHRoID0gZWZmZWN0V2lkdGg7CiAgICAgZWZm
ZWN0T3V0QnVmZmVyLmhlaWdodCA9IGVmZmVjdEhlaWdodDsKICAgICBlZmZlY3RPdXRCdWZmZXIu
cm93Qnl0ZXMgPSBzdHJpZGU7CkBAIC0yODQsMjAgKzI4NCwyMCBAQCBpbmxpbmUgdm9pZCBGRUdh
dXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1ckFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBl
ZEFycmF5JgogICAgIGZhc3RGcmVlKHRtcEJ1ZmZlcik7CiAKICAgICAvLyBUaGUgZmluYWwgcmVz
dWx0IHNob3VsZCBiZSBzdG9yZWQgaW4gaW9CdWZmZXIuCi0gICAgQVNTRVJUKGlvQnVmZmVyLmxl
bmd0aCgpID09IHRlbXBCdWZmZXIubGVuZ3RoKCkpOwotICAgIG1lbWNweShpb0J1ZmZlci5kYXRh
KCksIHRlbXBCdWZmZXIuZGF0YSgpLCBpb0J1ZmZlci5sZW5ndGgoKSk7CisgICAgQVNTRVJUKGlv
QnVmZmVyLmJ5dGVMZW5ndGgoKSA9PSB0ZW1wQnVmZmVyLmJ5dGVMZW5ndGgoKSk7CisgICAgbWVt
Y3B5KGlvQnVmZmVyLmJ5dGVzKCksIHRlbXBCdWZmZXIuYnl0ZXMoKSwgaW9CdWZmZXIuYnl0ZUxl
bmd0aCgpKTsKIH0KICNlbmRpZgogCi1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJl
QXBwbGllcjo6Ym94Qmx1clVuYWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVy
LCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVu
c2lnbmVkIGtlcm5lbFNpemVZLCBpbnQgc3RyaWRlLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wg
aXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCitpbmxpbmUgdm9pZCBGRUdhdXNz
aWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1clVuYWNjZWxlcmF0ZWQoUGl4ZWxCdWZmZXIm
IGlvQnVmZmVyLCBQaXhlbEJ1ZmZlciYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZVgs
IHVuc2lnbmVkIGtlcm5lbFNpemVZLCBpbnQgc3RyaWRlLCBJbnRTaXplJiBwYWludFNpemUsIGJv
b2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCiB7CiAgICAgaW50IGR4TGVm
dCA9IDA7CiAgICAgaW50IGR4UmlnaHQgPSAwOwogICAgIGludCBkeUxlZnQgPSAwOwogICAgIGlu
dCBkeVJpZ2h0ID0gMDsKICAgICAKLSAgICBVaW50OENsYW1wZWRBcnJheSogZnJvbUJ1ZmZlciA9
ICZpb0J1ZmZlcjsKLSAgICBVaW50OENsYW1wZWRBcnJheSogdG9CdWZmZXIgPSAmdGVtcEJ1ZmZl
cjsKKyAgICBhdXRvKiBmcm9tQnVmZmVyID0gJmlvQnVmZmVyOworICAgIGF1dG8qIHRvQnVmZmVy
ID0gJnRlbXBCdWZmZXI7CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewogICAg
ICAgICBpZiAoa2VybmVsU2l6ZVgpIHsKQEAgLTMyOSwzNCArMzI5LDM0IEBAIGlubGluZSB2b2lk
IEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyVW5hY2NlbGVyYXRlZChVaW50
OENsYW1wZWRBcnJhCiAKICAgICAvLyBUaGUgZmluYWwgcmVzdWx0IHNob3VsZCBiZSBzdG9yZWQg
aW4gaW9CdWZmZXIuCiAgICAgaWYgKCZpb0J1ZmZlciAhPSBmcm9tQnVmZmVyKSB7Ci0gICAgICAg
IEFTU0VSVChpb0J1ZmZlci5sZW5ndGgoKSA9PSBmcm9tQnVmZmVyLT5sZW5ndGgoKSk7Ci0gICAg
ICAgIG1lbWNweShpb0J1ZmZlci5kYXRhKCksIGZyb21CdWZmZXItPmRhdGEoKSwgaW9CdWZmZXIu
bGVuZ3RoKCkpOworICAgICAgICBBU1NFUlQoaW9CdWZmZXIuYnl0ZUxlbmd0aCgpID09IGZyb21C
dWZmZXItPmJ5dGVMZW5ndGgoKSk7CisgICAgICAgIG1lbWNweShpb0J1ZmZlci5ieXRlcygpLCBm
cm9tQnVmZmVyLT5ieXRlcygpLCBpb0J1ZmZlci5ieXRlTGVuZ3RoKCkpOwogICAgIH0KIH0KIAot
aW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJHZW5lcmlj
KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVs
QXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6
ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQor
aW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJHZW5lcmlj
KFBpeGVsQnVmZmVyJiBpb0J1ZmZlciwgUGl4ZWxCdWZmZXImIHRlbXBCdWZmZXIsIHVuc2lnbmVk
IGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplLCBi
b29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQogewogICAgIGludCBzdHJp
ZGUgPSA0ICogcGFpbnRTaXplLndpZHRoKCk7CiAKICNpZiBVU0UoQUNDRUxFUkFURSkKICAgICBp
ZiAoa2VybmVsU2l6ZVggPT0ga2VybmVsU2l6ZVkgJiYgKGVkZ2VNb2RlID09IEVkZ2VNb2RlVHlw
ZTo6Tm9uZSB8fCBlZGdlTW9kZSA9PSBFZGdlTW9kZVR5cGU6OkR1cGxpY2F0ZSkpIHsKLSAgICAg
ICAgYm94Qmx1ckFjY2VsZXJhdGVkKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJuZWxTaXpl
WCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsKKyAgICAg
ICAgYm94Qmx1ckFjY2VsZXJhdGVkKGlvQnVmZmVyLCB0ZW1wQnVmZmVyLCBrZXJuZWxTaXplWCwg
c3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICNlbmRpZgogCi0gICAgYm94Qmx1clVuYWNjZWxlcmF0ZWQoaW9CdWZm
ZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBrZXJuZWxTaXplWSwgc3RyaWRlLCBwYWlu
dFNpemUsIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUpOworICAgIGJveEJsdXJVbmFjY2VsZXJhdGVk
KGlvQnVmZmVyLCB0ZW1wQnVmZmVyLCBrZXJuZWxTaXplWCwga2VybmVsU2l6ZVksIHN0cmlkZSwg
cGFpbnRTaXplLCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKIH0KIAogI2lmICFVU0UoQUNDRUxF
UkFURSkKIGlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVy
V29ya2VyKEFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVycykKIHsKICAgICBJbnRTaXplIHBhaW50
U2l6ZShwYXJhbWV0ZXJzLT53aWR0aCwgcGFyYW1ldGVycy0+aGVpZ2h0KTsKLSAgICBib3hCbHVy
R2VuZXJpYygqcGFyYW1ldGVycy0+aW9QaXhlbEFycmF5LCAqcGFyYW1ldGVycy0+dG1wUGl4ZWxB
cnJheSwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVgsIHBhcmFtZXRlcnMtPmtlcm5lbFNpemVZLCBw
YWludFNpemUsIHBhcmFtZXRlcnMtPmlzQWxwaGFJbWFnZSwgcGFyYW1ldGVycy0+ZWRnZU1vZGUp
OworICAgIGJveEJsdXJHZW5lcmljKCpwYXJhbWV0ZXJzLT5pb0J1ZmZlciwgKnBhcmFtZXRlcnMt
PnRlbXBCdWZmZXIsIHBhcmFtZXRlcnMtPmtlcm5lbFNpemVYLCBwYXJhbWV0ZXJzLT5rZXJuZWxT
aXplWSwgcGFpbnRTaXplLCBwYXJhbWV0ZXJzLT5pc0FscGhhSW1hZ2UsIHBhcmFtZXRlcnMtPmVk
Z2VNb2RlKTsKIH0KICNlbmRpZgogCi1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJl
QXBwbGllcjo6YXBwbHlQbGF0Zm9ybShVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4
Q2xhbXBlZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWdu
ZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVk
Z2VNb2RlVHlwZSBlZGdlTW9kZSkKK2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVB
cHBsaWVyOjphcHBseVBsYXRmb3JtKFBpeGVsQnVmZmVyJiBpb0J1ZmZlciwgUGl4ZWxCdWZmZXIm
IHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwg
SW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VN
b2RlKQogewogI2lmICFVU0UoQUNDRUxFUkFURSkKICAgICBpbnQgc2NhbmxpbmUgPSA0ICogcGFp
bnRTaXplLndpZHRoKCk7CkBAIC0zODMsMTQgKzM4MywxNiBAQCBpbmxpbmUgdm9pZCBGRUdhdXNz
aWFuQmx1clNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybShVaW50OENsYW1wZWRBcnJheSYg
aW9CdQogICAgICAgICAgICAgICAgIGN1cnJlbnRZICs9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyBi
bG9ja0hlaWdodCArIDEgOiBibG9ja0hlaWdodDsKICAgICAgICAgICAgICAgICBpbnQgZW5kWSA9
IGpvYiA9PSBqb2JzIC0gMSA/IGN1cnJlbnRZIDogY3VycmVudFkgKyBleHRyYUhlaWdodDsKIAot
ICAgICAgICAgICAgICAgIGludCBibG9ja1NpemUgPSAoZW5kWSAtIHN0YXJ0WSkgKiBzY2FubGlu
ZTsKKyAgICAgICAgICAgICAgICBJbnRTaXplIGJsb2NrU2l6ZSA9IHsgcGFpbnRTaXplLndpZHRo
KCksIGVuZFkgLSBzdGFydFkgfTsKKwogICAgICAgICAgICAgICAgIGlmICgham9iKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHBhcmFtcy5pb1BpeGVsQXJyYXkgPSAmaW9CdWZmZXI7Ci0gICAgICAg
ICAgICAgICAgICAgIHBhcmFtcy50bXBQaXhlbEFycmF5ID0gJnRtcFBpeGVsQXJyYXk7CisgICAg
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBObyBuZWVkIHRvIGNyZWF0ZSBhIFBpeGVsQnVmZmVy
IGlmIGl0IGlzIFJlZkNvdW50ZWQgY2xhc3MuCisgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5p
b0J1ZmZlciA9IFBpeGVsQnVmZmVyKGlvQnVmZmVyLmZvcm1hdCgpLCBpb0J1ZmZlci5zaXplKCks
IHsgaW9CdWZmZXIuZGF0YSgpIH0pOworICAgICAgICAgICAgICAgICAgICBwYXJhbXMudGVtcEJ1
ZmZlciA9IFBpeGVsQnVmZmVyKHRlbXBCdWZmZXIuZm9ybWF0KCksIHRlbXBCdWZmZXIuc2l6ZSgp
LCB7IHRlbXBCdWZmZXIuZGF0YSgpIH0pOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHBhcmFtcy5pb1BpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6
Y3JlYXRlVW5pbml0aWFsaXplZChibG9ja1NpemUpOwotICAgICAgICAgICAgICAgICAgICBwYXJh
bXMudG1wUGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVk
KGJsb2NrU2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgIG1lbWNweShwYXJhbXMuaW9QaXhlbEFy
cmF5LT5kYXRhKCksIGlvQnVmZmVyLmRhdGEoKSArIHN0YXJ0WSAqIHNjYW5saW5lLCBibG9ja1Np
emUpOworICAgICAgICAgICAgICAgICAgICBwYXJhbXMuaW9CdWZmZXIgPSBpb0J1ZmZlci5jcmVh
dGVTY3JhdGNoUGl4ZWxCdWZmZXIoYmxvY2tTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgcGFy
YW1zLnRlbXBCdWZmZXIgPSB0ZW1wQnVmZmVyLmNyZWF0ZVNjcmF0Y2hQaXhlbEJ1ZmZlcihibG9j
a1NpemUpOworICAgICAgICAgICAgICAgICAgICBtZW1jcHkocGFyYW1zLmlvQnVmZmVyLT5ieXRl
cygpLCBpb0J1ZmZlci5ieXRlcygpICsgc3RhcnRZICogc2NhbmxpbmUsIHBhcmFtcy5pb0J1ZmZl
ci0+Ynl0ZUxlbmd0aCgpKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBw
YXJhbXMud2lkdGggPSBwYWludFNpemUud2lkdGgoKTsKQEAgLTQxNyw3ICs0MTksNyBAQCBpbmxp
bmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybShVaW50
OENsYW1wZWRBcnJheSYgaW9CdQogICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uT2Zmc2V0ID0g
Y3VycmVudFkgKiBzY2FubGluZTsKICAgICAgICAgICAgICAgICBzaXplID0gYWRqdXN0ZWRCbG9j
a0hlaWdodCAqIHNjYW5saW5lOwogCi0gICAgICAgICAgICAgICAgbWVtY3B5KGlvQnVmZmVyLmRh
dGEoKSArIGRlc3RpbmF0aW9uT2Zmc2V0LCBwYXJhbXMuaW9QaXhlbEFycmF5LT5kYXRhKCkgKyBz
b3VyY2VPZmZzZXQsIHNpemUpOworICAgICAgICAgICAgICAgIG1lbWNweShpb0J1ZmZlci5ieXRl
cygpICsgZGVzdGluYXRpb25PZmZzZXQsIHBhcmFtcy5pb0J1ZmZlci0+Ynl0ZXMoKSArIHNvdXJj
ZU9mZnNldCwgc2l6ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KQEAgLTQyNiw3ICs0MjgsNyBAQCBpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3
YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybShVaW50OENsYW1wZWRBcnJheSYgaW9CdQogI2VuZGlm
CiAKICAgICAvLyBUaGUgc2VsZWN0aW9uIGhlcmUgZXZlbnR1YWxseSBzaG91bGQgaGFwcGVuIGR5
bmFtaWNhbGx5IG9uIHNvbWUgcGxhdGZvcm1zLgotICAgIGJveEJsdXJHZW5lcmljKGlvQnVmZmVy
LCB0bXBQaXhlbEFycmF5LCBrZXJuZWxTaXplWCwga2VybmVsU2l6ZVksIHBhaW50U2l6ZSwgaXNB
bHBoYUltYWdlLCBlZGdlTW9kZSk7CisgICAgYm94Qmx1ckdlbmVyaWMoaW9CdWZmZXIsIHRlbXBC
dWZmZXIsIGtlcm5lbFNpemVYLCBrZXJuZWxTaXplWSwgcGFpbnRTaXplLCBpc0FscGhhSW1hZ2Us
IGVkZ2VNb2RlKTsKIH0KIAogYm9vbCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6YXBw
bHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMs
IEZpbHRlckltYWdlJiByZXN1bHQpIGNvbnN0CkBAIC00NDUsMTIgKzQ0NywxMSBAQCBib29sIEZF
R2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwg
Y29uc3QgRmlsdGVySW1hZwogICAgIGF1dG8ga2VybmVsU2l6ZSA9IG1fZWZmZWN0LmNhbGN1bGF0
ZUtlcm5lbFNpemUoZmlsdGVyLCB7IG1fZWZmZWN0LnN0ZERldmlhdGlvblgoKSwgbV9lZmZlY3Qu
c3RkRGV2aWF0aW9uWSgpIH0pOwogCiAgICAgSW50U2l6ZSBwYWludFNpemUgPSByZXN1bHQuYWJz
b2x1dGVJbWFnZVJlY3QoKS5zaXplKCk7Ci0gICAgYXV0byB0bXBJbWFnZURhdGEgPSBVaW50OENs
YW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChwYWludFNpemUuYXJlYSgpICogNCk7
Ci0gICAgaWYgKCF0bXBJbWFnZURhdGEpCisgICAgYXV0byB0ZW1wQnVmZmVyID0gZGVzdGluYXRp
b25QaXhlbEJ1ZmZlci0+Y3JlYXRlU2NyYXRjaFBpeGVsQnVmZmVyKHBhaW50U2l6ZSk7CisgICAg
aWYgKCF0ZW1wQnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBkZXN0
aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAg
YXBwbHlQbGF0Zm9ybShkZXN0aW5hdGlvblBpeGVsQXJyYXksICp0bXBJbWFnZURhdGEsIGtlcm5l
bFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplLCByZXN1bHQuaXNB
bHBoYUltYWdlKCksIG1fZWZmZWN0LmVkZ2VNb2RlKCkpOworICAgIGFwcGx5UGxhdGZvcm0oKmRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIsICp0ZW1wQnVmZmVyLCBrZXJuZWxTaXplLndpZHRoKCksIGtl
cm5lbFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZSwgcmVzdWx0LmlzQWxwaGFJbWFnZSgpLCBtX2Vm
ZmVjdC5lZGdlTW9kZSgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFu
Qmx1clNvZnR3YXJlQXBwbGllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllci5oCmluZGV4IDE4
YzA1ZGU2ZWZlZS4uZmY1NzMzNzExNzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBs
aWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllci5oCkBAIC00Miw4ICs0Miw4IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJJbWFnZVZl
Y3RvciYgaW5wdXRzLCBGaWx0ZXJJbWFnZSYgcmVzdWx0KSBjb25zdCBmaW5hbDsKIAogICAgIHN0
cnVjdCBBcHBseVBhcmFtZXRlcnMgewotICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IGlvUGl4ZWxBcnJheTsKLSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiB0bXBQaXhl
bEFycmF5OworICAgICAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBpb0J1ZmZlcjsKKyAg
ICAgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gdGVtcEJ1ZmZlcjsKICAgICAgICAgaW50
IHdpZHRoOwogICAgICAgICBpbnQgaGVpZ2h0OwogICAgICAgICB1bnNpZ25lZCBrZXJuZWxTaXpl
WDsKQEAgLTU0LDE2ICs1NCwxNiBAQCBwcml2YXRlOgogCiAgICAgc3RhdGljIGlubGluZSB2b2lk
IGtlcm5lbFBvc2l0aW9uKGludCBibHVySXRlcmF0aW9uLCB1bnNpZ25lZCYgcmFkaXVzLCBpbnQm
IGRlbHRhTGVmdCwgaW50JiBkZWx0YVJpZ2h0KTsKIAotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBi
b3hCbHVyQWxwaGFPbmx5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBV
aW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwgdW5zaWduZWQgZHgsIGludCYgZHhMZWZ0
LCBpbnQmIGR4UmlnaHQsIGludCYgc3RyaWRlLCBpbnQmIHN0cmlkZUxpbmUsIGludCYgZWZmZWN0
V2lkdGgsIGludCYgZWZmZWN0SGVpZ2h0LCBjb25zdCBpbnQmIG1heEtlcm5lbFNpemUpOwotICAg
IHN0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQ
aXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwgdW5zaWduZWQgZHgs
IGludCBkeExlZnQsIGludCBkeFJpZ2h0LCBpbnQgc3RyaWRlLCBpbnQgc3RyaWRlTGluZSwgaW50
IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0LCBib29sIGFscGhhSW1hZ2UsIEVkZ2VNb2Rl
VHlwZSk7CisgICAgc3RhdGljIGlubGluZSB2b2lkIGJveEJsdXJBbHBoYU9ubHkoY29uc3QgUGl4
ZWxCdWZmZXImIGlvQnVmZmVyLCBQaXhlbEJ1ZmZlciYgdGVtcEJ1ZmZlciwgdW5zaWduZWQgZHgs
IGludCYgZHhMZWZ0LCBpbnQmIGR4UmlnaHQsIGludCYgc3RyaWRlLCBpbnQmIHN0cmlkZUxpbmUs
IGludCYgZWZmZWN0V2lkdGgsIGludCYgZWZmZWN0SGVpZ2h0LCBjb25zdCBpbnQmIG1heEtlcm5l
bFNpemUpOworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyKGNvbnN0IFBpeGVsQnVmZmVy
JiBpb0J1ZmZlciwgUGl4ZWxCdWZmZXImIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGR4LCBpbnQgZHhM
ZWZ0LCBpbnQgZHhSaWdodCwgaW50IHN0cmlkZSwgaW50IHN0cmlkZUxpbmUsIGludCBlZmZlY3RX
aWR0aCwgaW50IGVmZmVjdEhlaWdodCwgYm9vbCBhbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUpOwog
Ci0gICAgc3RhdGljIGlubGluZSB2b2lkIGJveEJsdXJBY2NlbGVyYXRlZChVaW50OENsYW1wZWRB
cnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBr
ZXJuZWxTaXplLCBpbnQgc3RyaWRlLCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQp
OwotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyVW5hY2NlbGVyYXRlZChVaW50OENsYW1w
ZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25l
ZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIGludCBzdHJpZGUsIEludFNpemUm
IHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSk7CisgICAgc3RhdGlj
IGlubGluZSB2b2lkIGJveEJsdXJBY2NlbGVyYXRlZChQaXhlbEJ1ZmZlciYgaW9CdWZmZXIsIFBp
eGVsQnVmZmVyJiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplLCBpbnQgc3RyaWRlLCBp
bnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQpOworICAgIHN0YXRpYyBpbmxpbmUgdm9p
ZCBib3hCbHVyVW5hY2NlbGVyYXRlZChQaXhlbEJ1ZmZlciYgaW9CdWZmZXIsIFBpeGVsQnVmZmVy
JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVks
IGludCBzdHJpZGUsIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VN
b2RlVHlwZSk7CiAKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1ckdlbmVyaWMoVWludDhD
bGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwg
dW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWlu
dFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUpOworICAgIHN0YXRpYyBpbmxp
bmUgdm9pZCBib3hCbHVyR2VuZXJpYyhQaXhlbEJ1ZmZlciYgaW9CdWZmZXIsIFBpeGVsQnVmZmVy
JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVks
IEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSk7CiAg
ICAgc3RhdGljIGlubGluZSB2b2lkIGJveEJsdXJXb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKik7CiAK
LSAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlQbGF0Zm9ybShVaW50OENsYW1wZWRBcnJheSYg
aW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25lZCBrZXJu
ZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBp
c0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSk7CisgICAgc3RhdGljIGlubGluZSB2b2lkIGFwcGx5
UGxhdGZvcm0oUGl4ZWxCdWZmZXImIGlvQnVmZmVyLCBQaXhlbEJ1ZmZlciYgdGVtcEJ1ZmZlciwg
dW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWlu
dFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUpOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1Nv
ZnR3YXJlQXBwbGllci5jcHAKaW5kZXggZmE4ZWUzZDU2YTU2Li5lNGIxNDdmNzU1NDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmNw
cApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBv
ZiBTemVnZWQKICAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZwotICogQ29weXJp
Z2h0IChDKSAyMDE4LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxOC0yMDIyIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5OSw4ICszOTksNiBAQCBib29sIEZF
TGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25z
dCBGaWx0ZXJJbWFnZVZlYwogICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVz
dGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCiAgICAgYXV0byBlZmZlY3REcmF3aW5nUmVj
dCA9IHJlc3VsdC5hYnNvbHV0ZUltYWdlUmVjdFJlbGF0aXZlVG8oaW5wdXQpOwogICAgIGlucHV0
LmNvcHlQaXhlbEJ1ZmZlcigqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgZWZmZWN0RHJhd2luZ1Jl
Y3QpOwogCkBAIC00MjgsNyArNDI2LDcgQEAgYm9vbCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VWZWMKICAgICBk
YXRhLmxpZ2h0U291cmNlID0gJm1fZWZmZWN0LmxpZ2h0U291cmNlKCk7CiAgICAgZGF0YS5vcGVy
YXRpbmdDb2xvclNwYWNlID0gJm1fZWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKTsKIAotICAg
IGRhdGEucGl4ZWxzID0gJmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsKKyAgICBkYXRhLnBpeGVscyA9
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXI7CiAgICAgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZSA9IHNpemUud2lkdGgoKSAqIGNQaXhlbFNpemU7CiAgICAgZGF0YS53aWR0aCA9IHNpemUu
d2lkdGgoKTsKICAgICBkYXRhLmhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRp
bmdTb2Z0d2FyZUFwcGxpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllci5oCmluZGV4IDM4NzViMGE0
YjVkZS4uYzk3NGQ5MjExNWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGln
aHRpbmdTb2Z0d2FyZUFwcGxpZXIuaApAQCAtMTA0LDcgKzEwNCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIGNvbnN0IExpZ2h0U291cmNlKiBsaWdodFNvdXJjZTsKICAgICAgICAgY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlKiBvcGVyYXRpbmdDb2xvclNwYWNlOwogCi0gICAgICAgIFVpbnQ4Q2xh
bXBlZEFycmF5KiBwaXhlbHM7CisgICAgICAgIFBpeGVsQnVmZmVyKiBwaXhlbHM7CiAgICAgICAg
IGludCB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKICAgICAgICAgaW50IHdpZHRoOwogICAg
ICAgICBpbnQgaGVpZ2h0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBo
b2xvZ3lTb2Z0d2FyZUFwcGxpZXIuY3BwCmluZGV4IDFjOWRlZmJjMzJlOC4uZGRkZGEwZWQ1NTA3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2Fy
ZUFwcGxpZXIuY3BwCkBAIC00LDcgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1
bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIEFw
cGxlIEluYy4gMjAxNy0yMDIxIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IEFwcGxlIEluYy4gMjAxNy0yMDIyIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTQwLDEyICs0MCwxMiBAQCBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3Qs
IDQ+IEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6bWluT3JNYXgoY29uc3QgQwogICAgIHJl
dHVybiBwZXJDb21wb25lbnRNYXgoYSwgYik7CiB9CiAKLWlubGluZSBDb2xvckNvbXBvbmVudHM8
dWludDhfdCwgND4gRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjpjb2x1bW5FeHRyZW11bShj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQs
IGludCB5RW5kLCBpbnQgd2lkdGgsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKK2lubGlu
ZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVy
Ojpjb2x1bW5FeHRyZW11bShjb25zdCBQaXhlbEJ1ZmZlciYgc3JjUGl4ZWxCdWZmZXIsIGludCB4
LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBl
IHR5cGUpCiB7Ci0gICAgYXV0byBleHRyZW11bSA9IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4
ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2ln
bmVkKj4oc3JjUGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeVN0YXJ0LCB3
aWR0aCkpIH0pOworICAgIGF1dG8gZXh0cmVtdW0gPSBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBp
eGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgeyAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNp
Z25lZCo+KHNyY1BpeGVsQnVmZmVyLmJ5dGVzKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeVN0YXJ0
LCB3aWR0aCkpIH0pOwogCiAgICAgZm9yIChpbnQgeSA9IHlTdGFydCArIDE7IHkgPCB5RW5kOyAr
K3kpIHsKLSAgICAgICAgYXV0byBwaXhlbCA9IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxW
YWx1ZShQYWNrZWRDb2xvcjo6UkdCQSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVk
Kj4oc3JjUGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeSwgd2lkdGgpKSB9
KTsKKyAgICAgICAgYXV0byBwaXhlbCA9IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1
ZShQYWNrZWRDb2xvcjo6UkdCQSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4o
c3JjUGl4ZWxCdWZmZXIuYnl0ZXMoKSArIHBpeGVsQXJyYXlJbmRleCh4LCB5LCB3aWR0aCkpIH0p
OwogICAgICAgICBleHRyZW11bSA9IG1pbk9yTWF4KGV4dHJlbXVtLCBwaXhlbCwgdHlwZSk7CiAg
ICAgfQogICAgIHJldHVybiBleHRyZW11bTsKQEAgLTY0LDggKzY0LDggQEAgdm9pZCBGRU1vcnBo
b2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1HZW5lcmljKGNvbnN0IFBhaW50aW5n
RGF0YSYgcGFpbnQKIHsKICAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7CiAKLSAgICBjb25zdCBh
dXRvJiBzcmNQaXhlbEFycmF5ID0gKnBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5OwotICAgIGF1
dG8mIGRzdFBpeGVsQXJyYXkgPSAqcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXk7CisgICAgY29u
c3QgYXV0byYgc3JjUGl4ZWxCdWZmZXIgPSAqcGFpbnRpbmdEYXRhLnNyY1BpeGVsQnVmZmVyOwor
ICAgIGF1dG8mIGRzdFBpeGVsQnVmZmVyID0gKnBhaW50aW5nRGF0YS5kc3RQaXhlbEJ1ZmZlcjsK
IAogICAgIGNvbnN0IGludCByYWRpdXNYID0gcGFpbnRpbmdEYXRhLnJhZGl1c1g7CiAgICAgY29u
c3QgaW50IHJhZGl1c1kgPSBwYWludGluZ0RhdGEucmFkaXVzWTsKQEAgLTg2LDE3ICs4NiwxNyBA
QCB2b2lkIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWMo
Y29uc3QgUGFpbnRpbmdEYXRhJiBwYWludAogCiAgICAgICAgIC8vIFdlIHN0YXJ0IGF0IHRoZSBs
ZWZ0IGVkZ2UsIHNvIGNvbXB1dGUgZXh0cmVtZSBmb3IgdGhlIHJhZGl1c1ggY29sdW1ucy4KICAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCByYWRpdXNYOyArK3gpCi0gICAgICAgICAgICBleHRy
ZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5LCB4LCB5UmFkaXVzU3RhcnQs
IHlSYWRpdXNFbmQsIHdpZHRoLCBwYWludGluZ0RhdGEudHlwZSkpOworICAgICAgICAgICAgZXh0
cmVtYS5hcHBlbmQoY29sdW1uRXh0cmVtdW0oc3JjUGl4ZWxCdWZmZXIsIHgsIHlSYWRpdXNTdGFy
dCwgeVJhZGl1c0VuZCwgd2lkdGgsIHBhaW50aW5nRGF0YS50eXBlKSk7CiAKICAgICAgICAgLy8g
S2VybmVsIGlzIGZpbGxlZCwgZ2V0IGV4dHJlbWEgb2YgbmV4dCBjb2x1bW4KICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCB3aWR0aDsgKyt4KSB7CiAgICAgICAgICAgICBpZiAoeCA8IHdpZHRo
IC0gcmFkaXVzWCkKLSAgICAgICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11
bShzcmNQaXhlbEFycmF5LCB4ICsgcmFkaXVzWCwgeVJhZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3
aWR0aCwgcGFpbnRpbmdEYXRhLnR5cGUpKTsKKyAgICAgICAgICAgICAgICBleHRyZW1hLmFwcGVu
ZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEJ1ZmZlciwgeCArIHJhZGl1c1gsIHlSYWRpdXNTdGFy
dCwgeVJhZGl1c0VuZCwgd2lkdGgsIHBhaW50aW5nRGF0YS50eXBlKSk7CiAKICAgICAgICAgICAg
IGlmICh4ID4gcmFkaXVzWCkKICAgICAgICAgICAgICAgICBleHRyZW1hLnJlbW92ZSgwKTsKIAot
ICAgICAgICAgICAgdW5zaWduZWQqIGRlc3RQaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQqPihkc3RQaXhlbEFycmF5LmRhdGEoKSArIHBpeGVsQXJyYXlJbmRleCh4LCB5LCB3aWR0aCkp
OworICAgICAgICAgICAgdW5zaWduZWQqIGRlc3RQaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQqPihkc3RQaXhlbEJ1ZmZlci5ieXRlcygpICsgcGl4ZWxBcnJheUluZGV4KHgsIHksIHdp
ZHRoKSk7CiAgICAgICAgICAgICAqZGVzdFBpeGVsID0gbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JD
b21wb25lbnRzKGtlcm5lbEV4dHJlbXVtKGV4dHJlbWEsIHBhaW50aW5nRGF0YS50eXBlKSkudmFs
dWU7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNzUsMTMgKzE3NSwxMCBAQCBib29sIEZFTW9ycGhv
bG9neVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZp
bHRlckltYWdlVgogICAgIGlmICghc291cmNlUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBzb3VyY2VQaXhlbEJ1ZmZlci0+
ZGF0YSgpOwotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXItPmRhdGEoKTsKLQogICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7CiAgICAg
cGFpbnRpbmdEYXRhLnR5cGUgPSBtX2VmZmVjdC5tb3JwaG9sb2d5T3BlcmF0b3IoKTsKLSAgICBw
YWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSA9ICZzb3VyY2VQaXhlbEFycmF5OwotICAgIHBhaW50
aW5nRGF0YS5kc3RQaXhlbEFycmF5ID0gJmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsKKyAgICBwYWlu
dGluZ0RhdGEuc3JjUGl4ZWxCdWZmZXIgPSAmKnNvdXJjZVBpeGVsQnVmZmVyOworICAgIHBhaW50
aW5nRGF0YS5kc3RQaXhlbEJ1ZmZlciA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXI7CiAgICAgcGFp
bnRpbmdEYXRhLndpZHRoID0gZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKTsKICAgICBwYWludGlu
Z0RhdGEuaGVpZ2h0ID0gZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCk7CiAgICAgcGFpbnRpbmdE
YXRhLnJhZGl1c1ggPSByYWRpdXNYOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVN
b3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmgKaW5kZXggNjhhZDRhNDMzOGI1Li4zY2Q5YjY1NDEy
ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2Fy
ZUFwcGxpZXIuaApAQCAtNDgsOCArNDgsOCBAQCBwcml2YXRlOgogICAgICAgICBNb3JwaG9sb2d5
T3BlcmF0b3JUeXBlIHR5cGU7CiAgICAgICAgIGludCByYWRpdXNYOwogICAgICAgICBpbnQgcmFk
aXVzWTsKLSAgICAgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkqIHNyY1BpeGVsQXJyYXk7Ci0g
ICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFycmF5OworICAgICAgICBjb25zdCBQ
aXhlbEJ1ZmZlciogc3JjUGl4ZWxCdWZmZXI7CisgICAgICAgIFBpeGVsQnVmZmVyKiBkc3RQaXhl
bEJ1ZmZlcjsKICAgICAgICAgaW50IHdpZHRoOwogICAgICAgICBpbnQgaGVpZ2h0OwogICAgIH07
CkBAIC02NSw3ICs2NSw3IEBAIHByaXZhdGU6CiAKICAgICBzdGF0aWMgaW5saW5lIENvbG9yQ29t
cG9uZW50czx1aW50OF90LCA0PiBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFj
a2VkQ29sb3I6OlJHQkEgcGl4ZWwpIHsgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGFzU1JHQkEo
cGl4ZWwpLnJlc29sdmVkKCkpOyB9CiAgICAgc3RhdGljIGlubGluZSBDb2xvckNvbXBvbmVudHM8
dWludDhfdCwgND4gbWluT3JNYXgoY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBh
LCBjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGIsIE1vcnBob2xvZ3lPcGVyYXRv
clR5cGUpOwotICAgIHN0YXRpYyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNv
bHVtbkV4dHJlbXVtKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBpbnQg
eCwgaW50IHlTdGFydCwgaW50IHlFbmQsIGludCB3aWR0aCwgTW9ycGhvbG9neU9wZXJhdG9yVHlw
ZSk7CisgICAgc3RhdGljIGlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY29sdW1u
RXh0cmVtdW0oY29uc3QgUGl4ZWxCdWZmZXImIHNyY1BpeGVsQnVmZmVyLCBpbnQgeCwgaW50IHlT
dGFydCwgaW50IHlFbmQsIGludCB3aWR0aCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSk7CiAgICAg
c3RhdGljIGlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4ga2VybmVsRXh0cmVtdW0o
Y29uc3QgQ29sdW1uRXh0cmVtYSYga2VybmVsLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsKIAog
ICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm1HZW5lcmljKGNvbnN0IFBhaW50aW5nRGF0YSYs
IGludCBzdGFydFksIGludCBlbmRZKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyLmNwcAppbmRleCA2ZDY1MDY0NWE3NWMuLjUyZjYy
NGZjNzhmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUdXJidWxlbmNl
U29mdHdhcmVBcHBsaWVyLmNwcApAQCAtNSw3ICs1LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBS
ZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR2Fib3IgTG9raSA8bG9raUB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ny0yMDIyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTI3MCw3ICsyNzAsNyBAQCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVUdXJi
dWxlbmNlU29mdHdhcmVBcHBsaWVyOjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdQogICAgIHJldHVy
biB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCk7CiB9
CiAKLXZvaWQgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJp
Yyhjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2Nh
bGUsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQYWludGluZ0RhdGEmIHBh
aW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkK
K3ZvaWQgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpYyhj
b25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUs
IFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0Rh
dGEsIFN0aXRjaERhdGEgc3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCiB7CiAgICAg
QVNTRVJUKGVuZFkgPiBzdGFydFkpOwogCkBAIC0yODUsNyArMjg1LDcgQEAgdm9pZCBGRVR1cmJ1
bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1HZW5lcmljKGNvbnN0IEludFJlY3Qm
IGZpbHRlclJlZ2kKICAgICAgICAgICAgIHBvaW50LnNldFgocG9pbnQueCgpICsgMSk7CiAgICAg
ICAgICAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBwb2ludC5zY2FsZWQoaW52ZXJzZVNjYWxl
LndpZHRoKCksIGludmVyc2VTY2FsZS5oZWlnaHQoKSk7CiAgICAgICAgICAgICBhdXRvIHZhbHVl
cyA9IGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KHBhaW50aW5nRGF0YSwgc3RpdGNo
RGF0YSwgbG9jYWxQb2ludCk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldFJhbmdlKHZhbHVl
cy5jb21wb25lbnRzLmRhdGEoKSwgNCwgaW5kZXhPZlBpeGVsQ2hhbm5lbCk7CisgICAgICAgICAg
ICBwaXhlbEJ1ZmZlci5zZXRSYW5nZSh2YWx1ZXMuY29tcG9uZW50cy5kYXRhKCksIDQsIGluZGV4
T2ZQaXhlbENoYW5uZWwpOwogICAgICAgICAgICAgaW5kZXhPZlBpeGVsQ2hhbm5lbCArPSA0Owog
ICAgICAgICB9CiAgICAgfQpAQCAtMjkzLDEwICsyOTMsMTAgQEAgdm9pZCBGRVR1cmJ1bGVuY2VT
b2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1HZW5lcmljKGNvbnN0IEludFJlY3QmIGZpbHRl
clJlZ2kKIAogdm9pZCBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1X
b3JrZXIoQXBwbHlQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQogewotICAgIGFwcGx5UGxhdGZvcm1H
ZW5lcmljKHBhcmFtZXRlcnMtPmZpbHRlclJlZ2lvbiwgcGFyYW1ldGVycy0+ZmlsdGVyU2NhbGUs
ICpwYXJhbWV0ZXJzLT5waXhlbEFycmF5LCAqcGFyYW1ldGVycy0+cGFpbnRpbmdEYXRhLCBwYXJh
bWV0ZXJzLT5zdGl0Y2hEYXRhLCBwYXJhbWV0ZXJzLT5zdGFydFksIHBhcmFtZXRlcnMtPmVuZFkp
OworICAgIGFwcGx5UGxhdGZvcm1HZW5lcmljKHBhcmFtZXRlcnMtPmZpbHRlclJlZ2lvbiwgcGFy
YW1ldGVycy0+ZmlsdGVyU2NhbGUsICpwYXJhbWV0ZXJzLT5waXhlbEJ1ZmZlciwgKnBhcmFtZXRl
cnMtPnBhaW50aW5nRGF0YSwgcGFyYW1ldGVycy0+c3RpdGNoRGF0YSwgcGFyYW1ldGVycy0+c3Rh
cnRZLCBwYXJhbWV0ZXJzLT5lbmRZKTsKIH0KIAotdm9pZCBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFw
cGxpZXI6OmFwcGx5UGxhdGZvcm0oY29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBG
bG9hdFNpemUmIGZpbHRlclNjYWxlLCBVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgUGFp
bnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0aXRjaERhdGEmIHN0aXRjaERhdGEpCit2b2lkIEZF
VHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybShjb25zdCBJbnRSZWN0JiBm
aWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIFBpeGVsQnVmZmVyJiBw
aXhlbEJ1ZmZlciwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0aXRjaERhdGEmIHN0aXRj
aERhdGEpCiB7CiAgICAgaW50IGhlaWdodCA9IGZpbHRlclJlZ2lvbi5oZWlnaHQoKTsKICAgICB1
bnNpZ25lZCBhcmVhID0gZmlsdGVyUmVnaW9uLmFyZWEoKTsKQEAgLTMyMCw3ICszMjAsNyBAQCB2
b2lkIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybShjb25zdCBJbnRS
ZWN0JiBmaWx0ZXJSZWdpb24sIGNvbgogICAgICAgICAgICAgICAgIEFwcGx5UGFyYW1ldGVycyYg
cGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihpKTsKICAgICAgICAgICAgICAgICBwYXJh
bXMuZmlsdGVyUmVnaW9uID0gZmlsdGVyUmVnaW9uOwogICAgICAgICAgICAgICAgIHBhcmFtcy5m
aWx0ZXJTY2FsZSA9IGZpbHRlclNjYWxlOwotICAgICAgICAgICAgICAgIHBhcmFtcy5waXhlbEFy
cmF5ID0gJnBpeGVsQXJyYXk7CisgICAgICAgICAgICAgICAgcGFyYW1zLnBpeGVsQnVmZmVyID0g
JnBpeGVsQnVmZmVyOwogICAgICAgICAgICAgICAgIHBhcmFtcy5wYWludGluZ0RhdGEgPSAmcGFp
bnRpbmdEYXRhOwogICAgICAgICAgICAgICAgIHBhcmFtcy5zdGl0Y2hEYXRhID0gc3RpdGNoRGF0
YTsKICAgICAgICAgICAgICAgICBwYXJhbXMuc3RhcnRZID0gc3RhcnRZOwpAQCAtMzM2LDcgKzMz
Niw3IEBAIHZvaWQgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKGNv
bnN0IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uCiAgICAgfQogCiAgICAgLy8gRmFsbGJhY2sg
dG8gc2luZ2xlIHRocmVhZGVkIG1vZGUgaWYgdGhlcmUgaXMgbm8gcm9vbSBmb3IgYSBuZXcgdGhy
ZWFkIG9yIHRoZSBwYWludCBhcmVhIGlzIHRvbyBzbWFsbC4KLSAgICBhcHBseVBsYXRmb3JtR2Vu
ZXJpYyhmaWx0ZXJSZWdpb24sIGZpbHRlclNjYWxlLCBwaXhlbEFycmF5LCBwYWludGluZ0RhdGEs
IHN0aXRjaERhdGEsIDAsIGhlaWdodCk7CisgICAgYXBwbHlQbGF0Zm9ybUdlbmVyaWMoZmlsdGVy
UmVnaW9uLCBmaWx0ZXJTY2FsZSwgcGl4ZWxCdWZmZXIsIHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0
YSwgMCwgaGVpZ2h0KTsKIH0KIAogYm9vbCBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFw
cGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYsIEZpbHRl
ckltYWdlJiByZXN1bHQpIGNvbnN0CkBAIC0zNDksMTAgKzM0OSw4IEBAIGJvb2wgRkVUdXJidWxl
bmNlU29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmls
dGVySW1hZ2VWCiAgICAgaWYgKHJlc3VsdFNpemUuYXJlYSgpLmhhc092ZXJmbG93ZWQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0g
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCiAgICAgaWYgKHJlc3VsdFNpemUuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJheS56ZXJvRmlsbCgpOworICAg
ICAgICBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT56ZXJvRmlsbCgpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKQEAgLTM2NCw3ICszNjIsNyBAQCBib29sIEZFVHVyYnVsZW5jZVNvZnR3
YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckltYWdl
VgogCiAgICAgYXV0byBwYWludGluZ0RhdGEgPSBpbml0UGFpbnRpbmdEYXRhKG1fZWZmZWN0LnR5
cGUoKSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBtX2VmZmVjdC5udW1PY3RhdmVz
KCksIG1fZWZmZWN0LnNlZWQoKSwgbV9lZmZlY3Quc3RpdGNoVGlsZXMoKSwgdGlsZVNpemUpOwog
Ci0gICAgYXBwbHlQbGF0Zm9ybShyZXN1bHQuYWJzb2x1dGVJbWFnZVJlY3QoKSwgZmlsdGVyLmZp
bHRlclNjYWxlKCksIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hE
YXRhKTsKKyAgICBhcHBseVBsYXRmb3JtKHJlc3VsdC5hYnNvbHV0ZUltYWdlUmVjdCgpLCBmaWx0
ZXIuZmlsdGVyU2NhbGUoKSwgKmRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIHBhaW50aW5nRGF0YSwg
c3RpdGNoRGF0YSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUdXJidWxlbmNlU29m
dHdhcmVBcHBsaWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllci5oCmluZGV4IGNmNGQ4OTU5ZWJh
NC4uZDZhYzM4NWRhYzNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUdXJi
dWxlbmNlU29mdHdhcmVBcHBsaWVyLmgKQEAgLTkzLDcgKzkzLDcgQEAgcHJpdmF0ZToKICAgICBz
dHJ1Y3QgQXBwbHlQYXJhbWV0ZXJzIHsKICAgICAgICAgSW50UmVjdCBmaWx0ZXJSZWdpb247CiAg
ICAgICAgIEZsb2F0U2l6ZSBmaWx0ZXJTY2FsZTsKLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkq
IHBpeGVsQXJyYXk7CisgICAgICAgIFBpeGVsQnVmZmVyKiBwaXhlbEJ1ZmZlcjsKICAgICAgICAg
UGFpbnRpbmdEYXRhKiBwYWludGluZ0RhdGE7CiAgICAgICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0
YTsKICAgICAgICAgaW50IHN0YXJ0WTsKQEAgLTExMCw5ICsxMTAsOSBAQCBwcml2YXRlOgogICAg
IHN0YXRpYyBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gdG9JbnRCYXNlZENvbG9yQ29tcG9u
ZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+JiBmbG9hdENvbXBvbmVudHMpOwog
ICAgIHN0YXRpYyBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY2FsY3VsYXRlVHVyYnVsZW5j
ZVZhbHVlRm9yUG9pbnQoY29uc3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgY29uc3QgRmxv
YXRQb2ludCYpOwogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybUdlbmVyaWMoY29uc3Qg
SW50UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBVaW50
OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0
YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm1H
ZW5lcmljKGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRTaXplJiBmaWx0
ZXJTY2FsZSwgUGl4ZWxCdWZmZXImLCBjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRhLCBp
bnQgc3RhcnRZLCBpbnQgZW5kWSk7CiAgICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybVdvcmtl
cihBcHBseVBhcmFtZXRlcnMqKTsKLSAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtKGNvbnN0
IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgVWlu
dDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEmKTsK
KyAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtKGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lv
biwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgUGl4ZWxCdWZmZXImLCBQYWludGluZ0Rh
dGEmLCBTdGl0Y2hEYXRhJik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0tIAoyLjMy
LjAgKEFwcGxlIEdpdC0xMzIpCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>