<?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>220649</bug_id>
          
          <creation_ts>2021-01-15 00:24:10 -0800</creation_ts>
          <short_desc>[GPU Process] Make getImageData use display list with shared memory instead of sending a sync IPC</short_desc>
          <delta_ts>2021-03-29 14:50:40 -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>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>223544</dependson>
    
    <dependson>223550</dependson>
    
    <dependson>223732</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>ggaren</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1719800</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-01-15 00:24:10 -0800</bug_when>
    <thetext>Improve the latency of getImageData by turning it into a display list command and getting the output with shared memory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719801</commentid>
    <comment_count>1</comment_count>
      <attachid>417683</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-01-15 00:24:44 -0800</bug_when>
    <thetext>Created attachment 417683
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719802</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-01-15 00:26:53 -0800</bug_when>
    <thetext>With this WIP patch, we can sometimes get stuck in RemoteImageBufferProxy&lt;WebKit::ImageBufferShareableMappedIOSurfaceBackend&gt;::getImageData forever. As far as I can tell, we never wake up the GPU Process.

Wenson, am I doing something wrong here in RemoteImageBufferProxy&lt;WebKit::ImageBufferShareableMappedIOSurfaceBackend&gt;::getImageData by sending flushDrawingContextAsync?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720439</commentid>
    <comment_count>3</comment_count>
      <attachid>417852</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-01-18 16:31:00 -0800</bug_when>
    <thetext>Created attachment 417852
Ryosuke&apos;s WIP (+ hang fix)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720440</commentid>
    <comment_count>4</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-01-18 16:45:56 -0800</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #2)
&gt; With this WIP patch, we can sometimes get stuck in
&gt; RemoteImageBufferProxy&lt;WebKit::ImageBufferShareableMappedIOSurfaceBackend&gt;::
&gt; getImageData forever. As far as I can tell, we never wake up the GPU Process.
&gt; 
&gt; Wenson, am I doing something wrong here in
&gt; RemoteImageBufferProxy&lt;WebKit::ImageBufferShareableMappedIOSurfaceBackend&gt;::
&gt; getImageData by sending flushDrawingContextAsync?

The previous patch was hanging in the case where the wakeup message is sent for some destination image buffer A, but a sync GetImageData is later appended for a different destination image buffer B. In this case, since we&apos;re directly appending the item to the display list, we bypass the DisplayList::Recorder delegate methods, which call out to the recorder client (in this case, RemoteImageBufferProxy::willAppendItemOfType), which is what ultimately allows us to append &quot;change destination image buffer&quot; items when synchronizing display list items between multiple destination image buffers.

As a result, the GPUP (in RemoteRenderingBackend) never learned that it needed to switch from image buffer A to image buffer B, and thus never processed the GetImageData.

To fix this, I added a DisplayList::Recorder method for getImageData that calls into the recorder client hooks, and used that instead of the DisplayList method in RemoteImageBufferProxy::getImageData. MotionMark Images seems to run smoothly after this adjustment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1721504</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-01-22 00:25:13 -0800</bug_when>
    <thetext>&lt;rdar://problem/73488204&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723322</commentid>
    <comment_count>6</comment_count>
      <attachid>418630</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-01-28 01:28:44 -0800</bug_when>
    <thetext>Created attachment 418630
Updated to use semaphore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723428</commentid>
    <comment_count>7</comment_count>
      <attachid>418630</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-01-28 11:11:23 -0800</bug_when>
    <thetext>Comment on attachment 418630
Updated to use semaphore

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

&gt; Source/WebCore/platform/graphics/ImageBuffer.h:131
&gt; +    virtual void copyImageData(void*, AlphaPremultiplication outputFormat, const IntRect&amp; srcRect) const = 0;

It is unclear whether this ImageBuffer is the source or the destination of the copy operation. I would suggest make it an override of getImageData().

Also this call looks insecure since we do not know the size off the &quot;void*&quot; buffer. We use &quot;void *&quot; when calling private methods like copyImagePixels(). But these calls for buffers that we allocate or we sure they are sufficient for the data to be be copied to or from. I would suggest passing the number of bytes of the destination buffer.

&gt; Source/WebCore/platform/graphics/ImageBufferBackend.cpp:262
&gt; +void ImageBufferBackend::copyImageData(void* destData, AlphaPremultiplication outputFormat, const IntRect&amp; srcRect, void* srcData) const

ImageBufferBackend::getImageData() above can be written in in terms of this function.

RefPtr&lt;ImageData&gt; ImageBufferBackend::getImageData(AlphaPremultiplication outputFormat, const IntRect&amp; srcRect, void* data) const
{
    auto imageData = ImageData::create(srcRectScaled.size());
    copyImageData(imageData-&gt;data()-&gt;data(), outputFormat, srcRect, data);
    return imageData;
}

&gt; Source/WebCore/platform/graphics/cairo/ImageBufferCairoSurfaceBackend.cpp:128
&gt; +RefPtr&lt;ImageData&gt; ImageBufferCairoSurfaceBackend::copyImageData(void* buffer, AlphaPremultiplication outputFormat, const IntRect&amp; srcRect) const

The return of this function is &quot;void&quot;. And its prototype is not defined in the file ImageBufferCairoSurfaceBackend.h

&gt; Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp:304
&gt; +void RemoteRenderingBackend::getImageData(const WebCore::IntSize&amp; size, CompletionHandler&lt;void(const SharedMemory::IPCHandle&amp; handle)&gt;&amp;&amp; completionHandler)

No need to WebCore:: in &quot;onst WebCore::IntSize&amp; size&quot;.

Also what is the use of this function now after deleting the ImageBuffer renderingResourceIdentifier and the outputFormat? What does it exactly return in the completionHandler?

&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:171
&gt; +    IntSize newSize = m_imageDataBufferSize.expandedTo(desiredSize);
&gt; +    SharedMemory::IPCHandle handle;
&gt; +    sendSync(Messages::RemoteRenderingBackend::GetImageData(newSize), Messages::RemoteRenderingBackend::GetImageData::Reply(handle), m_renderingBackendIdentifier, 1_s);
&gt; +
&gt; +    m_imageDataBuffer = SharedMemory::map(handle.handle, SharedMemory::Protection::ReadWrite);
&gt; +    m_imageDataBufferSize = newSize;

Can&apos;t we make managing the SharedMemory be handled completely by WebP? I think this scenario might work:

RemoteRenderingBackendProxy::getImageData():
    Ensures the size of m_imageDataBuffer is sufficient for the request image data
    Records getImageData() and passes the handle of m_imageDataBuffer in the DL item
    waitForImageData().
    Creates an ImageData and copies from m_imageDataBuffer to this new ImageData.

RemoteRenderingBackend::getImageData()
    Maps the handle of the SharedMemory in GetImageData to a SharedMemory
    Calls copyImageData()
    Signal the semaphore.

&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h:134
&gt; +    RefPtr&lt;SharedMemory&gt; m_imageDataBuffer;
&gt; +    WebCore::IntSize m_imageDataBufferSize;

Why do we need to store the size of the SharedMemory in m_imageDataBufferSize? Can&apos;t we use m_imageDataBuffer-&gt;size() instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728914</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-02-12 23:26:56 -0800</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #7)
&gt; Comment on attachment 418630 [details]
&gt; Updated to use semaphore
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=418630&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ImageBuffer.h:131
&gt; &gt; +    virtual void copyImageData(void*, AlphaPremultiplication outputFormat, const IntRect&amp; srcRect) const = 0;
&gt; 
&gt; It is unclear whether this ImageBuffer is the source or the destination of
&gt; the copy operation. I would suggest make it an override of getImageData().

I&apos;d rather avoid function overrides as they could be confusing. I&apos;d probably call this function copyImageDataToBuffer or something.

&gt; Also this call looks insecure since we do not know the size off the &quot;void*&quot;
&gt; buffer. We use &quot;void *&quot; when calling private methods like copyImagePixels().
&gt; But these calls for buffers that we allocate or we sure they are sufficient
&gt; for the data to be be copied to or from. I would suggest passing the number
&gt; of bytes of the destination buffer.

Well, you reviewed this way too early. There is a reason I didn&apos;t put this up for review.

&gt; &gt; Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp:304
&gt; &gt; +void RemoteRenderingBackend::getImageData(const WebCore::IntSize&amp; size, CompletionHandler&lt;void(const SharedMemory::IPCHandle&amp; handle)&gt;&amp;&amp; completionHandler)
&gt; 
&gt; No need to WebCore:: in &quot;onst WebCore::IntSize&amp; size&quot;.
&gt; 
&gt; Also what is the use of this function now after deleting the ImageBuffer
&gt; renderingResourceIdentifier and the outputFormat? What does it exactly
&gt; return in the completionHandler?

We need toe IPC to get a new shared memory buffer when the size of getImageData is larger than the current buffer size or the shared memory hasn&apos;t been allocated yet. I just re-used the old IPC to implement that. Again, a pre-emptive code review :)

&gt; &gt; Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:171
&gt; &gt; +    IntSize newSize = m_imageDataBufferSize.expandedTo(desiredSize);
&gt; &gt; +    SharedMemory::IPCHandle handle;
&gt; &gt; +    sendSync(Messages::RemoteRenderingBackend::GetImageData(newSize), Messages::RemoteRenderingBackend::GetImageData::Reply(handle), m_renderingBackendIdentifier, 1_s);
&gt; &gt; +
&gt; &gt; +    m_imageDataBuffer = SharedMemory::map(handle.handle, SharedMemory::Protection::ReadWrite);
&gt; &gt; +    m_imageDataBufferSize = newSize;
&gt; 
&gt; Can&apos;t we make managing the SharedMemory be handled completely by WebP? I
&gt; think this scenario might work:
&gt; 
&gt; RemoteRenderingBackendProxy::getImageData():
&gt;     Ensures the size of m_imageDataBuffer is sufficient for the request
&gt; image data
&gt;     Records getImageData() and passes the handle of m_imageDataBuffer in the
&gt; DL item
&gt;     waitForImageData().

No, you can&apos;t pass a shared memory in display list. There is no mechanism to share a new shared memory by sharing some bytes in a shared memory. We need to send it as a mach port attachment via IPC.

We also want to allocate this memory in GPU Process so that only GPU process will have read-write access to the memory while WebContent will have readonly access to it.

There is an alternative design which is for GPU content process to send a new shared memory buffer when it detects that the newly requested getImageData doesn&apos;t fit in the existing buffer but this is kind of tricky because then Web content process will now have to wait for both the semaphore and potentially an IPC to arrive. In practice, this would mean that there needs to be some data indicating that the new IPC is coming and then WebContent has to send a sync IPC to GPU Process. This will be a lot of back &amp; forth between GPU &amp; WebContent processes, which will incur extra overhead.

&gt; &gt; Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h:134
&gt; &gt; +    RefPtr&lt;SharedMemory&gt; m_imageDataBuffer;
&gt; &gt; +    WebCore::IntSize m_imageDataBufferSize;
&gt; 
&gt; Why do we need to store the size of the SharedMemory in
&gt; m_imageDataBufferSize? Can&apos;t we use m_imageDataBuffer-&gt;size() instead?

This was really for expedience to get things going but you&apos;re right that we don&apos;t really need it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1737934</commentid>
    <comment_count>9</comment_count>
      <attachid>422797</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-03-09 21:26:09 -0800</bug_when>
    <thetext>Created attachment 422797
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744929</commentid>
    <comment_count>10</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-03-29 14:50:40 -0700</bug_when>
    <thetext>Closing because the &quot;Depends on&quot; bugs are all fixed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417683</attachid>
            <date>2021-01-15 00:24:44 -0800</date>
            <delta_ts>2021-01-28 01:28:44 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug220649.patch</filename>
            <type>text/plain</type>
            <size>36216</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1h
Z2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1h
Z2VCdWZmZXIuaAppbmRleCAxZjI0NWJjZWJhNzIuLmUxZGVhNWJhNDRiMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIu
aApAQCAtMjM5LDYgKzIzOSwxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAorICAgIHZvaWQgY29weUltYWdlRGF0YSh2b2lkKiBidWZmZXIsIEFscGhhUHJl
bXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25z
dCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNr
ZW5kQ3JlYXRlZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PENvbmNyZXRlSW1hZ2VCdWZm
ZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+
Y29weUltYWdlRGF0YShidWZmZXIsIG91dHB1dEZvcm1hdCwgc3JjUmVjdCk7CisgICAgICAgIH0K
KyAgICB9CisKICAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlu
cHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCA9IHsgfSwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBkZXN0Rm9ybWF0ID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkg
b3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2Vu
ZENyZWF0ZWQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmgKaW5kZXggNDI1YTMyZWE0NDljLi41Nzg2YzRjNmRhNzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaApAQCAtMTI4LDYgKzEyOCw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29u
c3QgPSAwOwogCiAgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29weUltYWdlRGF0YSh2b2lkKiwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNv
bnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0sIEFscGhhUHJlbXVsdGlwbGljYXRp
b24gZGVzdEZvcm1hdCA9IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpID0g
MDsKIAogICAgIC8vIEZJWE1FOiBjdXJyZW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIG1ldGhv
ZCBoYXZlIHRoZSByZXN0cmljdGlvbiB0aGF0IHRoZXkgb25seSB3b3JrCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcApp
bmRleCA5Mzk0ZTdiZmY0MjkuLjRkYTM3NTVhYjUwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCkBAIC0yNTks
NiArMjU5LDMyIEBAIFJlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0CiAgICAgcmV0dXJuIGltYWdlRGF0
YTsKIH0KIAordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlJbWFnZURhdGEodm9pZCogZGVz
dERhdGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCB2b2lkKiBzcmNEYXRhKSBjb25zdAoreworICAgIEludFJlY3Qgc3JjUmVjdFNj
YWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKHNyY1JlY3QpOworICAgIGlmIChzcmNSZWN0U2Nh
bGVkLndpZHRoKCkgIT0gc3JjUmVjdC53aWR0aCgpIHx8IHNyY1JlY3RTY2FsZWQuaGVpZ2h0KCkg
IT0gc3JjUmVjdC5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UmVjdCBzcmNS
ZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbihiYWNrZW5kUmVjdCgpLCBzcmNSZWN0U2NhbGVkKTsK
KyAgICBJbnRSZWN0IGRlc3RSZWN0ID0geyBJbnRQb2ludDo6emVybygpLCBzcmNSZWN0Q2xpcHBl
ZC5zaXplKCkgfTsKKworICAgIGlmIChzcmNSZWN0U2NhbGVkLngoKSA8IDApCisgICAgICAgIGRl
c3RSZWN0LnNldFgoLXNyY1JlY3RTY2FsZWQueCgpKTsKKworICAgIGlmIChzcmNSZWN0U2NhbGVk
LnkoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNldFkoLXNyY1JlY3RTY2FsZWQueSgpKTsKKwor
ICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiBzcmNSZWN0U2NhbGVkLndpZHRoKCk7
CisgICAgdWludDhfdCogZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkZXN0
RGF0YSkgKyBkZXN0UmVjdC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0
OworCisgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAgIHVp
bnQ4X3QqIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzcmNEYXRhKSArIHNy
Y1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICog
NDsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCwgcGl4ZWxGb3JtYXQoKSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3Ms
CisgICAgICAgIG91dHB1dEZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBkZXN0Qnl0ZXNQZXJS
b3csIGRlc3RSb3dzLCBkZXN0UmVjdC5zaXplKCkpOworfQorCiB2b2lkIEltYWdlQnVmZmVyQmFj
a2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQsIHZv
aWQqIGRhdGEpCiB7CiAgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gdG9CYWNrZW5kQ29vcmRp
bmF0ZXMoc3JjUmVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCmluZGV4IDRmNWViYWY5OWE4OC4uY2YwM2UxNDQ0Nzdi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ckJhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlckJhY2tlbmQuaApAQCAtMTE3LDYgKzExNyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFZl
Y3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCBSZWZQ
dHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvcHlJ
bWFnZURhdGEodm9pZCogYnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCwgY29uc3QgSW50UmVjdCYpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcHV0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgPSAwOwogCiAgICAgdmlydHVhbCBQbGF0Zm9y
bUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQpAQCAtMTYy
LDYgKzE2Myw3IEBAIHByb3RlY3RlZDoKICAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8dWludDhf
dD4gdG9CR1JBRGF0YSh2b2lkKiBkYXRhKSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIFJl
ZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgdm9pZCogZGF0YSkgY29uc3Q7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBjb3B5SW1hZ2VEYXRhKHZvaWQqIGRlc3REYXRhLCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgdm9p
ZCogc3JjRGF0YSkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0LCB2b2lkKiBkYXRhKTsKIAogICAgIFBhcmFtZXRlcnMg
bV9wYXJhbWV0ZXJzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2Vu
ZC5jcHAKaW5kZXggMGI3M2YxNGJhNzAwLi43ZjQzYzJiMzQ5YTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNl
QmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMTI1LDYgKzEyNSwxMSBAQCBS
ZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpYwogICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6Omdl
dEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X2RhdGEobV9zdXJmYWNlLmdldCgpKSk7CiB9CiAKK1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVm
ZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y29weUltYWdlRGF0YSh2b2lkKiBidWZmZXIsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBj
b25zdAoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlJbWFnZURhdGEoYnVm
ZmVyLCBvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEo
bV9zdXJmYWNlLmdldCgpKSk7Cit9CisKIHZvaWQgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNr
ZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29u
c3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IElu
dFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKIHsK
ICAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VE
YXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2RhdGEobV9zdXJmYWNlLmdldCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZC5jcHAKaW5kZXggOWQ1MzhiZWZjZDhlLi43ODRlYjU1ZDMyOTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5k
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZC5jcHAKQEAgLTEzNyw2ICsxMzcsMTEgQEAgUmVmUHRyPEltYWdlRGF0
YT4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW8KICAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0
cHV0Rm9ybWF0LCBzcmNSZWN0LCBtX2RhdGEpOwogfQogCit2b2lkIEltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kOjpjb3B5SW1hZ2VEYXRhKHZvaWQqIGJ1ZmZlciwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0Cit7CisgICAg
cmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Y29weUltYWdlRGF0YShidWZmZXIsIG91dHB1dEZv
cm1hdCwgc3JjUmVjdCwgbV9kYXRhKTsKK30KKwogdm9pZCBJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCiB7
CiAgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdl
RGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0LCBtX2RhdGEpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kLmgKaW5kZXggOGYzMzIzZTdkY2VjLi5kMGMyMDc3ODljOWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaApAQCAtNDksNiArNDksNyBAQCBwdWJsaWM6
CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKIAogICAg
IFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91
dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgY29w
eUltYWdlRGF0YSh2b2lkKiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNv
bnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRlOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzT3JpZ2luQXRVcHBlckxlZnRDb3JuZXIgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZC5jcHAKaW5kZXggNmMzYjdjNzRiNDZlLi4wOTgzYjFmOWQxM2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMTgzLDYgKzE4MywxMiBAQCBS
ZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aQogICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6Omdl
dEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGxvY2suc3VyZmFjZUJhc2VBZGRyZXNz
KCkpOwogfQogCit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29weUltYWdlRGF0
YSh2b2lkKiBidWZmZXIsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25z
dCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAoreworICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2so
Km1fc3VyZmFjZSk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Y29weUltYWdlRGF0
YShidWZmZXIsIG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbG9jay5zdXJmYWNlQmFzZUFkZHJlc3Mo
KSk7Cit9CisKIHZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpwdXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFn
ZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQs
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKIHsKICAgICBJT1N1cmZhY2U6Okxv
Y2tlciBsb2NrKCptX3N1cmZhY2UsIElPU3VyZmFjZTo6TG9ja2VyOjpBY2Nlc3NNb2RlOjpSZWFk
V3JpdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAppbmRleCA0ODU5ZGY2ZmM1
MjUuLmEyNjZkMTU0OGU5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKQEAg
LTYyLDYgKzYyLDcgQEAgcHVibGljOgogICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBv
dmVycmlkZTsKKyAgICB2b2lkIGNvcHlJbWFnZURhdGEodm9pZCosIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
dm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29u
c3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKICAg
ICBJT1N1cmZhY2UqIHN1cmZhY2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKaW5kZXgg
YTk0NzlmMjZjNzU3Li4zOWM3ZTA5NDQ3N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcApA
QCAtMjg3LDYgKzI4Nyw4IEBAIHZvaWQgRGlzcGxheUxpc3Q6OmFwcGVuZChJdGVtSGFuZGxlIGl0
ZW0pCiAgICAgICAgIHJldHVybiBhcHBlbmQ8TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbklt
YWdlQnVmZmVyPihpdGVtLmdldDxNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZm
ZXI+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjoK
ICAgICAgICAgcmV0dXJuIGFwcGVuZDxNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXI+KGl0ZW0u
Z2V0PE1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcj4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6
R2V0SW1hZ2VEYXRhOgorICAgICAgICByZXR1cm4gYXBwZW5kPEdldEltYWdlRGF0YT4oaXRlbS5n
ZXQ8R2V0SW1hZ2VEYXRhPigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6CiAg
ICAgICAgIHJldHVybiBhcHBlbmQ8UHV0SW1hZ2VEYXRhPihpdGVtLmdldDxQdXRJbWFnZURhdGE+
KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1CdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKaW5kZXggNWY5YzllMmE4NDExLi43ZTE1
M2Q1NmM1ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3Bw
CkBAIC0yMjgsNiArMjI4LDggQEAgdm9pZCBJdGVtSGFuZGxlOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpCiAgICAgY2FzZSBJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5h
dGlvbkltYWdlQnVmZmVyOgogICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRl
bUJ1ZmZlcjoKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSXRlbVR5cGU6OkdldEltYWdlRGF0
YToKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YTogewog
ICAgICAgICBnZXQ8UHV0SW1hZ2VEYXRhPigpLmFwcGx5KGNvbnRleHQpOwogICAgICAgICByZXR1
cm47CkBAIC00NjIsNiArNDY0LDEwIEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAg
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPE1ldGFDb21t
YW5kQ2hhbmdlSXRlbUJ1ZmZlcj46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAg
ICBjYXNlIEl0ZW1UeXBlOjpHZXRJbWFnZURhdGE6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8R2V0SW1hZ2VEYXRhPjo6dmFsdWUpOworICAg
ICAgICByZXR1cm47CisgICAgfQogICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRp
YTogewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJs
ZTxQYWludEZyYW1lRm9yTWVkaWE+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTcxNyw2
ICs3MjMsMTAgQEAgdm9pZCBJdGVtSGFuZGxlOjpjb3B5VG8oSXRlbUhhbmRsZSBkZXN0aW5hdGlv
bikgY29uc3QKICAgICAgICAgbmV3IChpdGVtT2Zmc2V0KSBNZXRhQ29tbWFuZENoYW5nZUl0ZW1C
dWZmZXIoZ2V0PE1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcj4oKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6R2V0SW1hZ2VEYXRhOiB7CisgICAgICAgIG5l
dyAoaXRlbU9mZnNldCkgR2V0SW1hZ2VEYXRhKGdldDxHZXRJbWFnZURhdGE+KCkpOworICAgICAg
ICByZXR1cm47CisgICAgfQogICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYTog
ewogICAgICAgICBuZXcgKGl0ZW1PZmZzZXQpIFBhaW50RnJhbWVGb3JNZWRpYShnZXQ8UGFpbnRG
cmFtZUZvck1lZGlhPigpKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0SXRlbVR5cGUuY3BwCmluZGV4IGMwYzczYjgzYmQ1Mi4uZGUxOTA2ODg4OTkyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtVHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCkBAIC0xMzAsNiArMTMwLDgg
QEAgc3RhdGljIHNpemVfdCBzaXplT2ZJdGVtSW5CeXRlcyhJdGVtVHlwZSB0eXBlKQogICAgICAg
ICByZXR1cm4gc2l6ZW9mKE1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcik7
CiAgICAgY2FzZSBJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyOgogICAgICAg
ICByZXR1cm4gc2l6ZW9mKE1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcik7CisgICAgY2FzZSBJ
dGVtVHlwZTo6R2V0SW1hZ2VEYXRhOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdldEltYWdlRGF0
YSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgogICAgICAgICByZXR1cm4gc2l6
ZW9mKFB1dEltYWdlRGF0YSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlh
OgpAQCAtMTg0LDYgKzE4Niw3IEBAIGJvb2wgaXNEcmF3aW5nSXRlbShJdGVtVHlwZSB0eXBlKQog
ICAgIGNhc2UgSXRlbVR5cGU6OkZsdXNoQ29udGV4dDoKICAgICBjYXNlIEl0ZW1UeXBlOjpNZXRh
Q29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXI6CiAgICAgY2FzZSBJdGVtVHlwZTo6
TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyOgorICAgIGNhc2UgSXRlbVR5cGU6OkdldEltYWdl
RGF0YToKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgogICAgIGNhc2UgSXRlbVR5cGU6OlJv
dGF0ZToKICAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOgpAQCAtMjk2LDYgKzI5OSw3IEBAIGJvb2wg
aXNJbmxpbmVJdGVtKEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6Rmx1c2hDb250
ZXh0OgogICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFn
ZUJ1ZmZlcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXI6
CisgICAgY2FzZSBJdGVtVHlwZTo6R2V0SW1hZ2VEYXRhOgogICAgIGNhc2UgSXRlbVR5cGU6OlBh
aW50RnJhbWVGb3JNZWRpYToKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgogICAgIGNhc2Ug
SXRlbVR5cGU6OlJvdGF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oCmlu
ZGV4IDBlOTQ3YTA2ZGFiNS4uMjg5Yzc5ZTgxOWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1UeXBlLmgKQEAgLTc4LDYgKzc4LDcgQEAgZW51bSBjbGFzcyBJdGVtVHlwZSA6IHVp
bnQ4X3QgewogICAgIEZsdXNoQ29udGV4dCwKICAgICBNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0
aW9uSW1hZ2VCdWZmZXIsCiAgICAgTWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyLAorICAgIEdl
dEltYWdlRGF0YSwKICAgICBQdXRJbWFnZURhdGEsCiAgICAgUGFpbnRGcmFtZUZvck1lZGlhLAog
ICAgIFN0cm9rZVJlY3QsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKaW5kZXgg
MjEzZGI5YzhjZjQyLi44M2RiNmMxNDU0Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtcy5jcHAKQEAgLTc3Myw2ICs3NzMsMTMgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxFbGxpcHNlJiBpdGVtKQogICAgIHJldHVybiB0
czsKIH0KIAorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IEdldEltYWdlRGF0YSYgaXRlbSkKK3sKKyAgICB0cy5kdW1wUHJvcGVydHkoIm91dHB1dEZv
cm1hdCIsIGl0ZW0ub3V0cHV0Rm9ybWF0KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgic3JjUmVj
dCIsIGl0ZW0uc3JjUmVjdCgpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKIFB1dEltYWdlRGF0YTo6
UHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IElt
YWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCiAgICAgOiBt
X3NyY1JlY3Qoc3JjUmVjdCkKICAgICAsIG1fZGVzdFBvaW50KGRlc3RQb2ludCkKQEAgLTEwNjQs
NiArMTA3MSw3IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OkZsdXNoQ29udGV4dDogdHMgPDwg
ImZsdXNoLWNvbnRleHQiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENo
YW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXI6IHRzIDw8ICJtZXRhLWNvbW1hbmQtY2hhbmdlLWRl
c3RpbmF0aW9uLWltYWdlLWJ1ZmZlciI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFD
b21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjogdHMgPDwgIm1ldGEtY29tbWFuZC1jaGFuZ2UtaXRlbS1i
dWZmZXIiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpHZXRJbWFnZURhdGE6IHRzIDw8ICJn
ZXQtaW1hZ2UtZGF0YSI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YTog
dHMgPDwgInB1dC1pbWFnZS1kYXRhIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRG
cmFtZUZvck1lZGlhOiB0cyA8PCAicGFpbnQtZnJhbWUtZm9yLW1lZGlhIjsgYnJlYWs7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDogdHMgPDwgInN0cm9rZS1yZWN0IjsgYnJlYWs7CkBA
IC0xMjI1LDYgKzEyMzMsOSBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBJdGVtSGFuZGxlIGl0ZW0pCiAgICAgY2FzZSBJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VJ
dGVtQnVmZmVyOgogICAgICAgICB0cyA8PCBpdGVtLmdldDxNZXRhQ29tbWFuZENoYW5nZUl0ZW1C
dWZmZXI+KCk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkdldEltYWdlRGF0
YToKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8R2V0SW1hZ2VEYXRhPigpOworICAgICAgICBicmVh
azsKICAgICBjYXNlIEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6CiAgICAgICAgIHRzIDw8IGl0ZW0u
Z2V0PFB1dEltYWdlRGF0YT4oKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbXMuaAppbmRleCBjMjhkNjlmODY4ODQuLjIyMmEzZDgwNDlkYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5oCkBAIC0xOTE1LDYgKzE5MTUsMjYgQEAgcHJpdmF0ZToKICAg
ICBGbG9hdFJlY3QgbV9yZWN0OwogfTsKIAorY2xhc3MgR2V0SW1hZ2VEYXRhIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkdldElt
YWdlRGF0YTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOworCisgICAg
R2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0KQorICAgICAgICA6IG1fb3V0cHV0Rm9ybWF0KG91dHB1dEZvcm1hdCkK
KyAgICAgICAgLCBtX3NyY1JlY3Qoc3JjUmVjdCkKKyAgICB7CisgICAgfQorCisgICAgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX291dHB1dEZv
cm1hdDsgfQorICAgIGNvbnN0IEludFJlY3QmIHNyY1JlY3QoKSBjb25zdCB7IHJldHVybiBtX3Ny
Y1JlY3Q7IH0KKworcHJpdmF0ZToKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG1fb3V0cHV0
Rm9ybWF0OworICAgIEludFJlY3QgbV9zcmNSZWN0OworfTsKKwogY2xhc3MgUHV0SW1hZ2VEYXRh
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRl
bVR5cGU6OlB1dEltYWdlRGF0YTsKQEAgLTIzMzEsNiArMjM1MSw3IEBAIHRlbXBsYXRlPD4gc3Ry
dWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlPiB7CiAgICAgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGbHVzaENvbnRleHQsCiAgICAgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VC
dWZmZXIsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpNZXRhQ29tbWFuZENo
YW5nZUl0ZW1CdWZmZXIsCisgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpHZXRJ
bWFnZURhdGEsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpQdXRJbWFnZURh
dGEsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVk
aWEsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTdHJva2VSZWN0LApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKaW5kZXggMDFkMmU3ODAyODViLi5jNDAw
Mjk5YmY4YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcApAQCAtMzE1
LDcgKzMxNSw3IEBAIFZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6
dG9CR1JBRGF0YSgpIGNvbnN0CiBSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1h
dCwgc3JjUmVjdCwgbnVsbHB0cik7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0
SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCk7CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXJE
aXJlY3QyREJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0
Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0
Rm9ybWF0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlSW1hZ2VCdWZmZXIuaAppbmRleCAxNjJkMmVmOTBlNWQuLmM1MTdmNjlhM2ZiMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVy
LmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVm
ZmVyLmgKQEAgLTgxLDYgKzgxLDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQogCisgICAgICAgIGlmIChpdGVtLmlzPFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpHZXRJbWFnZURhdGE+KCkpIHsKKyAgICAgICAgICAgIGF1dG8gZ2V0SW1hZ2VEYXRhSXRlbSA9
IGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZXRJbWFnZURhdGE+KCk7CisKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBDaGVjayB0aGUgc2l6ZS4KKyAgICAgICAgICAgIFdURkxvZ0Fsd2F5
cygiPT09PT09PT09PT09PT09PT09PVJlbW90ZUltYWdlQnVmZmVyIEdldEltYWdlRGF0YSIpOwor
ICAgICAgICAgICAgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZURhdGEobV9yZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLmltYWdlRGF0YUJ1ZmZlcigpLCBnZXRJbWFnZURhdGFJdGVtLm91
dHB1dEZvcm1hdCgpLCBnZXRJbWFnZURhdGFJdGVtLnNyY1JlY3QoKSk7CisgICAgICAgICAgICBt
X3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuZGlkRmluaXNoR2V0SW1hZ2VEYXRhKCk7CisKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKICAgICAgICAgaWYgKGl0ZW0uaXM8V2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcj4oKSkgewogICAg
ICAgICAgICAgYXV0byBuZXh0QnVmZmVySWRlbnRpZmllciA9IGl0ZW0uZ2V0PFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXI+KCkuaWRlbnRpZmllcigpOwog
ICAgICAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kLnNldE5leHRJdGVtQnVmZmVyVG9S
ZWFkKG5leHRCdWZmZXJJZGVudGlmaWVyLCBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKaW5kZXggNDg3YjEzNWE4ODkyLi5iODg5ZjJhZTI3YWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKQEAgLTMyMSwxNCArMzIxLDQ0IEBAIHZvaWQgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6c2V0TmV4dEl0ZW1CdWZmZXJUb1JlYWQoRGlzcGxheUxpc3Q6
Okl0ZW1CdWZmZXJJZGVuCiAgICAgbV9wZW5kaW5nV2FrZXVwSW5mbyA9IHt7eyBpZGVudGlmaWVy
LCBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6aGVhZGVyU2l6ZSgpLCBkZXN0aW5hdGlvbklkZW50
aWZpZXIsIEdQVVByb2Nlc3NXYWtldXBSZWFzb246OlVuc3BlY2lmaWVkIH0sIFdURjo6bnVsbG9w
dCB9fTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIEludFJlY3Qgc3JjUmVjdCwgUmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChJUEM6OkltYWdlRGF0YVJlZmVyZW5jZSYmKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKGNvbnN0
IFdlYkNvcmU6OkludFNpemUmIHNpemUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU2hh
cmVkTWVtb3J5OjpJUENIYW5kbGUmIGhhbmRsZSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0g
ICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhOwotICAgIGlmIChhdXRvIGltYWdlQnVmZmVy
ID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNhY2hlZEltYWdlQnVmZmVyKHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcikpCi0gICAgICAgIGltYWdlRGF0YSA9IGltYWdlQnVmZmVyLT5nZXRJbWFn
ZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0KTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihJUEM6
OkltYWdlRGF0YVJlZmVyZW5jZShXVEZNb3ZlKGltYWdlRGF0YSkpKTsKKyAgICBDaGVja2VkPGlu
dCwgUmVjb3JkT3ZlcmZsb3c+IGRhdGFTaXplID0gNDsKKyAgICBkYXRhU2l6ZSAqPSBzaXplLndp
ZHRoKCk7CisgICAgZGF0YVNpemUgKj0gc2l6ZS5oZWlnaHQoKTsKKyAgICBSZWZQdHI8U2hhcmVk
TWVtb3J5PiBzaGFyZWRNZW1vcnk7CisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSAwOworICAgIGlm
ICghZGF0YVNpemUuaGFzT3ZlcmZsb3dlZCgpKSB7CisgICAgICAgIGJ1ZmZlclNpemUgPSBzaXpl
b2YoQXRvbWljPHVpbnQ2NF90PikgKyBkYXRhU2l6ZS51bnNhZmVHZXQoKTsKKyAgICAgICAgc2hh
cmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjphbGxvY2F0ZShidWZmZXJTaXplKTsKKyAgICB9CisK
KyAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7CisgICAgaWYgKHNoYXJlZE1lbW9yeSkK
KyAgICAgICAgc2hhcmVkTWVtb3J5LT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6
OlByb3RlY3Rpb246OlJlYWRXcml0ZSk7CisKKyAgICBtX2dldEltYWdlRGF0YUJ1ZmZlciA9IHNo
YXJlZE1lbW9yeTsKKyAgICBtX2dldEltYWdlRGF0YUJ1ZmZlclNpemUgPSBzaGFyZWRNZW1vcnkg
PyBzaXplIDogSW50U2l6ZSgpOworCisgICAgY29tcGxldGlvbkhhbmRsZXIoU2hhcmVkTWVtb3J5
OjpJUENIYW5kbGUgeyBXVEZNb3ZlKGhhbmRsZSksIGJ1ZmZlclNpemUgfSk7CiB9CiAKK3ZvaWQq
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmltYWdlRGF0YUJ1ZmZlcigpCit7CisgICAgaWYgKCFt
X2dldEltYWdlRGF0YUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fZ2V0SW1hZ2VEYXRhQnVmZmVyLT5kYXRhKCkpICsg
c2l6ZW9mKEF0b21pYzx1aW50NjRfdD4pOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OmRpZEZpbmlzaEdldEltYWdlRGF0YSgpCit7CisgICAgaWYgKCFtX2dldEltYWdlRGF0YUJ1
ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVpbnRlcnByZXRfY2FzdDxBdG9taWM8dWlu
dDY0X3Q+Kj4obV9nZXRJbWFnZURhdGFCdWZmZXItPmRhdGEoKSktPnN0b3JlKDEpOworIH0KKwog
dm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpQ
cmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFN0cmluZyYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBTdHJp
bmcgdXJsU3RyaW5nOwpAQCAtNDY5LDYgKzQ5OSw3IEBAIE9wdGlvbmFsPERpc3BsYXlMaXN0OjpJ
dGVtSGFuZGxlPiBXQVJOX1VOVVNFRF9SRVRVUk4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGVj
CiAgICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZsdXNoQ29udGV4dDoKICAgICBjYXNl
IERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdl
QnVmZmVyOgogICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5n
ZUl0ZW1CdWZmZXI6CisgICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkdldEltYWdlRGF0
YToKICAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgog
ICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpSZXN0b3JlOgogICAgIGNhc2UgRGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpSb3RhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaAppbmRleCBiYzEyOGYx
NmJiMzcuLjM2MjkyNjM4MzBlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCkBAIC04NCw2ICs4NCw5
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0TmV4dEl0ZW1CdWZmZXJUb1JlYWQoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgZGVzdGluYXRpb24pOwogCisgICAgdm9pZCogaW1hZ2VEYXRhQnVmZmVy
KCk7CisgICAgdm9pZCBkaWRGaW5pc2hHZXRJbWFnZURhdGEoKTsKKwogcHJpdmF0ZToKICAgICBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzJiYpOwogCkBAIC0xMTUsNyArMTE4LDcg
QEAgcHJpdmF0ZToKICAgICAvLyBNZXNzYWdlcyB0byBiZSByZWNlaXZlZC4KICAgICB2b2lkIGNy
ZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFdl
YkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29s
b3JTcGFjZSwgV2ViQ29yZTo6UGl4ZWxGb3JtYXQsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcik7CiAgICAgdm9pZCB3YWtlVXBBbmRBcHBseURpc3BsYXlMaXN0KGNvbnN0IEdQ
VVByb2Nlc3NXYWtldXBNZXNzYWdlQXJndW1lbnRzJik7Ci0gICAgdm9pZCBnZXRJbWFnZURhdGEo
V2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIFdlYkNvcmU6Oklu
dFJlY3Qgc3JjUmVjdCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKElQQzo6SW1hZ2VEYXRhUmVmZXJlbmNlJiYpPiYmKTsKKyAgICB2
b2lkIGdldEltYWdlRGF0YShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYpPiYmKTsKICAgICB2b2lkIGdl
dERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYm
KT4mJik7CiAgICAgdm9pZCBnZXREYXRhRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPHVpbnQ4X3Q+JiYpPiYm
KTsKICAgICB2b2lkIGdldEJHUkFEYXRhRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rvcjx1aW50OF90
PiYmKT4mJik7CkBAIC0xNDksNiArMTUyLDggQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShDT0NP
QSkKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V1RGOjpNYWNoU2VtYXBob3JlPiBtX3Jlc3VtZURpc3Bs
YXlMaXN0U2VtYXBob3JlOwogI2VuZGlmCisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gbV9nZXRJ
bWFnZURhdGFCdWZmZXI7CisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX2dldEltYWdlRGF0YUJ1ZmZl
clNpemU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2Vz
LmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQubWVzc2FnZXMuaW4KaW5kZXggMjAyYzIwYTljNjUwLi4xYTg3OWIxZTNjZmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCkBAIC0yNSw3ICsyNSw3IEBACiBt
ZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIE5vdFJlZkNvdW50ZWQgewogICAgIENy
ZWF0ZUltYWdlQnVmZmVyKFdlYkNvcmU6OkZsb2F0U2l6ZSBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6
UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNv
cmU6OkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgZW51bTp1aW50OF90IFdlYkNvcmU6OlBpeGVsRm9y
bWF0IHBpeGVsRm9ybWF0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogICAgIFdha2VVcEFuZEFwcGx5RGlzcGxheUxpc3Qo
c3RydWN0IFdlYktpdDo6R1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHMgYXJndW1lbnRz
KQotICAgIEdldEltYWdlRGF0YShlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBvdXRwdXRGb3JtYXQsIFdlYkNvcmU6OkludFJlY3Qgc3JjUmVjdCwgV2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikg
LT4gKElQQzo6SW1hZ2VEYXRhUmVmZXJlbmNlIGltYWdlRGF0YSkgU3luY2hyb25vdXMKKyAgICBH
ZXRJbWFnZURhdGEoV2ViQ29yZTo6SW50U2l6ZSBzaXplKSAtPiAoV2ViS2l0OjpTaGFyZWRNZW1v
cnk6OklQQ0hhbmRsZSBoYW5kbGUpIFN5bmNocm9ub3VzCiAgICAgR2V0RGF0YVVSTEZvckltYWdl
QnVmZmVyKFN0cmluZyBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBlbnVtOnVp
bnQ4X3QgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiwgV2Vi
Q29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcikgLT4gKFN0cmluZyB1cmxTdHJpbmcpIFN5bmNocm9ub3VzCiAgICAgR2V0RGF0YUZvcklt
YWdlQnVmZmVyKFN0cmluZyBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKSAtPiAoVmVjdG9yPHVpbnQ4X3Q+IGRhdGEpIFN5bmNocm9ub3VzCiAgICAgR2V0QkdSQURh
dGFGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoVmVjdG9yPHVpbnQ4X3Q+IGRhdGEpIFN5bmNo
cm9ub3VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5j
cHAKaW5kZXggMWQ3YWY2YmI4YzU3Li4yMTVmZDJkMTFlMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBC
YWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0lt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHAKQEAgLTEyMyw2ICsxMjMsMTEgQEAg
UmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpnZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXAKICAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpn
ZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBtX2JpdG1hcC0+ZGF0YSgpKTsKIH0K
IAordm9pZCBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmNvcHlJbWFnZURhdGEo
dm9pZCogYnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5k
Ojpjb3B5SW1hZ2VEYXRhKGJ1ZmZlciwgb3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBtX2JpdG1hcC0+
ZGF0YSgpKTsKK30KKwogdm9pZCBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnB1
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFn
ZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQog
ewogICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFn
ZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCwgbV9iaXRtYXAtPmRhdGEoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdl
QnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaAppbmRleCA1
NTUwNmE0OWQwM2UuLjRiOWRkNjYzYjBlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hh
cmVhYmxlQml0bWFwQmFja2VuZC5oCkBAIC01OSw2ICs1OSw3IEBAIHB1YmxpYzoKIAogICAgIFZl
Y3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgUmVmUHRyPFdl
YkNvcmU6OkltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGlj
YXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdm9pZCBjb3B5SW1hZ2VEYXRhKHZvaWQqIGJ1ZmZlciwgV2ViQ29yZTo6QWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBj
b25zdCBvdmVycmlkZTsKICAgICB2b2lkIHB1dEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbWFnZURhdGEmLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVz
dFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJy
aWRlOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAppbmRleCBkN2I5MGI1
NzJkYTUuLjgwN2IyYmJhMThiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTE0
Niw3ICsxNDYsMzMgQEAgcHJvdGVjdGVkOgogICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5KSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgICAgIHJldHVybiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+Z2V0SW1hZ2VEYXRh
KG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwor
ICAgICAgICBhdXRvIHNoYXJlZE1lbW9yeSA9IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LT5zaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEoc3JjUmVjdC5zaXplKCkpOworICAgICAgICBp
ZiAoIXNoYXJlZE1lbW9yeSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAg
IGF1dG8qIGhhc0ZpbmlzaGVkID0gcmVpbnRlcnByZXRfY2FzdDxBdG9taWM8dWludDY0X3Q+Kj4o
c2hhcmVkTWVtb3J5LT5kYXRhKCkpOworICAgICAgICBoYXNGaW5pc2hlZC0+c3RvcmUoMCk7CisK
KyAgICAgICAgYXV0byYgbXV0YWJsZVRoaXMgPSBjb25zdF9jYXN0PFJlbW90ZUltYWdlQnVmZmVy
UHJveHkmPigqdGhpcyk7CisgICAgICAgIGF1dG8mIGRpc3BsYXlMaXN0ID0gbXV0YWJsZVRoaXMu
bV9kcmF3aW5nQ29udGV4dC5kaXNwbGF5TGlzdCgpOworICAgICAgICBkaXNwbGF5TGlzdC50ZW1w
bGF0ZSBhcHBlbmQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkdldEltYWdlRGF0YT4ob3V0cHV0Rm9y
bWF0LCBzcmNSZWN0KTsKKyAgICAgICAgbXV0YWJsZVRoaXMuZmx1c2hEcmF3aW5nQ29udGV4dEFz
eW5jKCk7CisKKyAgICAgICAgV1RGTG9nQWx3YXlzKCI9PT09PT09PT09PT09PT09PT09UmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eTo6Z2V0SW1hZ2VEYXRhIGZsdXNoZWQhIik7CisKKyAgICAgICAgYXV0
byBpbWFnZURhdGEgPSBXZWJDb3JlOjpJbWFnZURhdGE6OmNyZWF0ZShzcmNSZWN0LnNpemUoKSk7
CisgICAgICAgIHNpemVfdCBpbWFnZVNpemVJbkJ5dGVzID0gaW1hZ2VEYXRhLT5kYXRhKCktPmJ5
dGVMZW5ndGgoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW1hZ2VTaXplSW5CeXRlcyArIHNp
emVvZihBdG9taWM8dWludDY0X3Q+KSA8PSBzaGFyZWRNZW1vcnktPnNpemUoKSk7CisKKyAgICAg
ICAgLy8gVXNlIHNlbWFwaG9yZQorICAgICAgICB3aGlsZSAoIWhhc0ZpbmlzaGVkLT5sb2FkKCkp
IHsKKyAgICAgICAgICAgIFRocmVhZDo6eWllbGQoKTsKKyAgICAgICAgICAgIHNsZWVwKDEwX3Vz
KTsKKyAgICAgICAgfQorIAorICAgICAgICBtZW1jcHkoaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEo
KSwgc3RhdGljX2Nhc3Q8dWludDhfdCo+KHNoYXJlZE1lbW9yeS0+ZGF0YSgpKSArIHNpemVvZihB
dG9taWM8dWludDY0X3Q+KSwgaW1hZ2VTaXplSW5CeXRlcyk7CisKKyAgICAgICAgcmV0dXJuIGlt
YWdlRGF0YTsKICAgICB9CiAKICAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0
aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LmNwcAppbmRleCA2MWI0YzgyNDk1NzYuLjQzYmZmOWUzNzcwMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcApAQCAtMTQ5LDE0ICsx
NDksMjAgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2kKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAotUmVmUHRyPEltYWdlRGF0YT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpnZXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3Qm
IHNyY1JlY3QsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpCitSZWZQdHI8U2hhcmVkTWVtb3J5PiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk6OnNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YShjb25zdCBJbnRTaXplJiBkZXNpcmVkU2l6
ZSkKIHsKLSAgICBzZW5kRGVmZXJyZWRXYWtldXBNZXNzYWdlSWZOZWVkZWQoKTsKKyAgICBpZiAo
bV9pbWFnZURhdGFCdWZmZXJTaXplLndpZHRoKCkgPj0gZGVzaXJlZFNpemUud2lkdGgoKSAmJiBt
X2ltYWdlRGF0YUJ1ZmZlclNpemUuaGVpZ2h0KCkgPj0gZGVzaXJlZFNpemUuaGVpZ2h0KCkpCisg
ICAgICAgIHJldHVybiBtX2ltYWdlRGF0YUJ1ZmZlcjsKIAotICAgIElQQzo6SW1hZ2VEYXRhUmVm
ZXJlbmNlIGltYWdlRGF0YVJlZmVyZW5jZTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6R2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OkdldEltYWdlRGF0YTo6UmVwbHkoaW1hZ2VEYXRhUmVmZXJlbmNlKSwgbV9yZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllciwgMV9zKTsKLSAgICByZXR1cm4gaW1hZ2VEYXRhUmVmZXJlbmNlLmJ1
ZmZlcigpOwotfQorICAgIEludFNpemUgbmV3U2l6ZSA9IG1faW1hZ2VEYXRhQnVmZmVyU2l6ZS5l
eHBhbmRlZFRvKGRlc2lyZWRTaXplKTsKKyAgICBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSBoYW5k
bGU7CisgICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldElt
YWdlRGF0YShuZXdTaXplKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldElt
YWdlRGF0YTo6UmVwbHkoaGFuZGxlKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciwgMV9z
KTsKKworICAgIG1faW1hZ2VEYXRhQnVmZmVyID0gU2hhcmVkTWVtb3J5OjptYXAoaGFuZGxlLmhh
bmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkV3JpdGUpOworICAgIG1faW1hZ2VE
YXRhQnVmZmVyU2l6ZSA9IG5ld1NpemU7CisKKyAgICByZXR1cm4gbV9pbWFnZURhdGFCdWZmZXI7
CisgfQogCiBTdHJpbmcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpnZXREYXRhVVJMRm9y
SW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uLCBSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKaW5kZXggNDhmYTA2OWRhYThkLi5jMWMxYmIyMTM1
NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApAQCAtODQsNyArODQs
NyBAQCBwdWJsaWM6CiAKICAgICAvLyBNZXNzYWdlcyB0byBiZSBzZW50LgogICAgIFJlZlB0cjxX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6Rmxv
YXRTaXplJiwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBX
ZWJDb3JlOjpDb2xvclNwYWNlLCBXZWJDb3JlOjpQaXhlbEZvcm1hdCk7Ci0gICAgUmVmUHRyPFdl
YkNvcmU6OkltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGlj
YXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgIFJlZlB0cjxTaGFyZWRNZW1v
cnk+IHNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7
CiAgICAgU3RyaW5nIGdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlv
biwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICBWZWN0b3I8dWlu
dDhfdD4gZ2V0RGF0YUZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KTsKICAgICBWZWN0b3I8dWludDhfdD4gZ2V0QkdSQURhdGFGb3JJbWFnZUJ1ZmZlcihXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwpAQCAtMTI5LDYgKzEyOSw4IEBAIHByaXZh
dGU6CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgTWFjaFNlbWFwaG9yZSBtX3Jlc3VtZURpc3Bs
YXlMaXN0U2VtYXBob3JlOwogI2VuZGlmCisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gbV9pbWFn
ZURhdGFCdWZmZXI7CisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX2ltYWdlRGF0YUJ1ZmZlclNpemU7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZh
Y2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29j
b2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcAppbmRleCA1N2M3Zjdk
NWEyNDUuLjYzNWYwMTZkYzkzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1h
Z2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMTA0LDYgKzEwNCwxMSBA
QCBSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6
OmdldEltYWdlRGF0YShBbHBoYVByZW11bAogICAgIHJldHVybiB7IH07CiB9CiAKK3ZvaWQgSW1h
Z2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOjpjb3B5SW1hZ2VEYXRhKHZvaWQqLCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JikgY29uc3QKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiB2b2lkIEltYWdlQnVmZmVyU2hhcmVhYmxl
SU9TdXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNv
bnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRQb2ludCYsIEFscGhhUHJl
bXVsdGlwbGljYXRpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1h
Z2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFj
a2VuZC5oCmluZGV4IGQ1ZTAwZTQyMDk4YS4uYjQyNTA5N2FmOTI2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVh
YmxlSU9TdXJmYWNlQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmgKQEAg
LTU3LDYgKzU3LDcgQEAgcHVibGljOgogICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCBvdmVycmlk
ZTsKICAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwogICAg
IFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+IGdldEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNv
bnN0IG92ZXJyaWRlOworICAgIHZvaWQgY29weUltYWdlRGF0YSh2b2lkKiBidWZmZXIsIFdlYkNv
cmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBwdXRJbWFnZURhdGEoV2ViQ29yZTo6
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VE
YXRhJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9y
bWF0KSBvdmVycmlkZTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc09yaWdpbkF0VXBw
ZXJMZWZ0Q29ybmVyID0gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417852</attachid>
            <date>2021-01-18 16:31:00 -0800</date>
            <delta_ts>2021-01-28 01:28:44 -0800</delta_ts>
            <desc>Ryosuke&apos;s WIP (+ hang fix)</desc>
            <filename>bug-220649-20210118163100.patch</filename>
            <type>text/plain</type>
            <size>40768</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcxNTY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgKaW5kZXggMWYyNDViY2ViYTcy
Y2UxMzdlOTBjNjFlNTVmNTFhMzM4MWI4MDY4NS4uZTFkZWE1YmE0NGIzYzg4NDdhMGE1YTJkMWFk
MTAyY2Y4NzMyMzlmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaApAQCAtMjM5LDYgKzIzOSwxNCBAQCBwcm90ZWN0
ZWQ6CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAorICAgIHZvaWQgY29weUltYWdl
RGF0YSh2b2lkKiBidWZmZXIsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYg
KGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpKSB7CisgICAgICAgICAgICBj
b25zdF9jYXN0PENvbmNyZXRlSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7Cisg
ICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Y29weUltYWdlRGF0YShidWZmZXIsIG91dHB1dEZv
cm1hdCwgc3JjUmVjdCk7CisgICAgICAgIH0KKyAgICB9CisKICAgICB2b2lkIHB1dEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGlt
YWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCA9IHsgfSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0ID0gQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmIChh
dXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5kZXggMzZkNzRjYTM5ZGUxN2Nk
MDNjMTNiYjc1ZTRkNWUzODQ4YzMzZWNmZS4uMTA3YmRjNWQ2OWRmNjlmODE2YjY5ZGZlOGNhNzRh
MjdmODNiNDg3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlci5oCkBAIC0xMjgsNiArMTI4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgVmVjdG9y
PHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIFJlZlB0cjxJ
bWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBj
b3B5SW1hZ2VEYXRhKHZvaWQqLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwdXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VE
YXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCA9
IHsgfSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0ID0gQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgPSAwOwogCiAgICAgLy8gRklYTUU6IGN1cnJlbnQgaW1w
bGVtZW50YXRpb25zIG9mIHRoaXMgbWV0aG9kIGhhdmUgdGhlIHJlc3RyaWN0aW9uIHRoYXQgdGhl
eSBvbmx5IHdvcmsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCmluZGV4IDkzOTRlN2JmZjQyOWJjMjFlZmNkZjNiMTQw
MTExZjFhZTJjYTk0NGQuLjRkYTM3NTVhYjUwMDkyMmVlNzBiNDU4Yjk4MDRmZDI1YjQzZjk2NzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
QmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXJCYWNrZW5kLmNwcApAQCAtMjU5LDYgKzI1OSwzMiBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBJ
bWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91
dHB1dAogICAgIHJldHVybiBpbWFnZURhdGE7CiB9CiAKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5k
Ojpjb3B5SW1hZ2VEYXRhKHZvaWQqIGRlc3REYXRhLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91
dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgdm9pZCogc3JjRGF0YSkgY29uc3QK
K3sKKyAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRlcyhzcmNS
ZWN0KTsKKyAgICBpZiAoc3JjUmVjdFNjYWxlZC53aWR0aCgpICE9IHNyY1JlY3Qud2lkdGgoKSB8
fCBzcmNSZWN0U2NhbGVkLmhlaWdodCgpICE9IHNyY1JlY3QuaGVpZ2h0KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQgPSBpbnRlcnNlY3Rpb24oYmFja2Vu
ZFJlY3QoKSwgc3JjUmVjdFNjYWxlZCk7CisgICAgSW50UmVjdCBkZXN0UmVjdCA9IHsgSW50UG9p
bnQ6Onplcm8oKSwgc3JjUmVjdENsaXBwZWQuc2l6ZSgpIH07CisKKyAgICBpZiAoc3JjUmVjdFNj
YWxlZC54KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5zZXRYKC1zcmNSZWN0U2NhbGVkLngoKSk7
CisKKyAgICBpZiAoc3JjUmVjdFNjYWxlZC55KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5zZXRZ
KC1zcmNSZWN0U2NhbGVkLnkoKSk7CisKKyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0
ICogc3JjUmVjdFNjYWxlZC53aWR0aCgpOworICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50OF90Kj4oZGVzdERhdGEpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5dGVz
UGVyUm93ICsgZGVzdFJlY3QueCgpICogNDsKKworICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93
ID0gYnl0ZXNQZXJSb3coKTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50OF90Kj4oc3JjRGF0YSkgKyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNCeXRlc1BlclJv
dyArIHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoCisgICAg
ICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHBpeGVsRm9ybWF0KCks
IHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAgICAgICBvdXRwdXRGb3JtYXQsIFBpeGVsRm9y
bWF0OjpSR0JBOCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsK
K30KKwogdm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBkZXN0Rm9ybWF0LCB2b2lkKiBkYXRhKQogewogICAgIEludFJlY3Qgc3JjUmVj
dFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKHNyY1JlY3QpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAppbmRleCA0
ZjVlYmFmOTlhODg2MGZlNDU1NTNkZTJjM2M2YjIxZWZhZGQzYzEzLi5jZjAzZTE0NDQ3N2JkMjAy
OTZiODkyY2VmNDVmZmI5YzZjYTFlOTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaApAQCAtMTE3LDYgKzExNyw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qg
PSAwOwogCiAgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGNvcHlJbWFnZURhdGEodm9pZCogYnVmZmVyLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0ID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRG
b3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IElu
dFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgPSAw
OwogCiAgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgeyBy
ZXR1cm4gbnVsbHB0cjsgfQpAQCAtMTYyLDYgKzE2Myw3IEBAIHByb3RlY3RlZDoKICAgICBXRUJD
T1JFX0VYUE9SVCBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSh2b2lkKiBkYXRhKSBjb25zdDsK
IAogICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwg
dm9pZCogZGF0YSkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb3B5SW1hZ2VEYXRh
KHZvaWQqIGRlc3REYXRhLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCwgdm9pZCogc3JjRGF0YSkgY29uc3Q7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1h
dCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0LCB2b2lkKiBk
YXRhKTsKIAogICAgIFBhcmFtZXRlcnMgbV9wYXJhbWV0ZXJzOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VC
YWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKaW5kZXggMGI3M2YxNGJhNzAwNWU1MjA1MGVk
NTgyMTY0YTExNjM4MDU0OTcxZi4uN2Y0M2MyYjM0OWE2MTgzNDZiOGEyNzMxYjljNzE4MDJjMjRh
YmI5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3Bw
CkBAIC0xMjUsNiArMTI1LDExIEBAIFJlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyQ2Fpcm9T
dXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljCiAgICAgcmV0dXJu
IEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwg
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZhY2UuZ2V0KCkpKTsKIH0KIAorUmVm
UHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjb3B5SW1hZ2VE
YXRhKHZvaWQqIGJ1ZmZlciwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFj
a2VuZDo6Y29weUltYWdlRGF0YShidWZmZXIsIG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZhY2UuZ2V0KCkpKTsKK30KKwogdm9pZCBJbWFn
ZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBkZXN0Rm9ybWF0KQogewogICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VE
YXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1h
dCwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZhY2UuZ2V0KCkpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAppbmRleCA5ZDUzOGJlZmNkOGUwMzhmMWExYTk3
YTJhNzc4NDEzMGYzMjhjYTQ1Li43ODRlYjU1ZDMyOTM0Y2M0Njc4MjUzMjUxMjFjMzhmODRlYjU4
MTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCkBAIC0xMzcsNiArMTM3
LDExIEBAIFJlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvCiAgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFj
a2VuZDo6Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbV9kYXRhKTsKIH0KIAor
dm9pZCBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y29weUltYWdlRGF0YSh2b2lkKiBidWZm
ZXIsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0KSBjb25zdAoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlJbWFn
ZURhdGEoYnVmZmVyLCBvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIG1fZGF0YSk7Cit9CisKIHZvaWQg
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBkZXN0Rm9ybWF0KQogewogICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VE
YXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1h
dCwgbV9kYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCmluZGV4IDhmMzMyM2U3
ZGNlYzYzNTVhY2I3ZDViOTljMjA3ODc3MTVjODZiYTguLmQwYzIwNzc4OWM5Y2U0MjBhM2UxZDRj
OTA4YWNlMTQ5YzVhMzdiNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaApAQCAt
NDksNiArNDksNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBj
b25zdCBvdmVycmlkZTsKIAogICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92
ZXJyaWRlOworICAgIHZvaWQgY29weUltYWdlRGF0YSh2b2lkKiwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKICAgICB2
b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25z
dCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRlOwogCiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzT3JpZ2luQXRVcHBlckxlZnRDb3JuZXIgPSB0cnVl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKaW5kZXggNmMzYjdjNzRiNDZl
MTI2ZTc5ZDlmMTYyMjBiM2EyZmFkOWVkZDlhMS4uMDk4M2IxZjlkMTNmODE3NzAzNjRkMDRhNzIw
YjZhNGFlNzZmZmMxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCkBA
IC0xODMsNiArMTgzLDEyIEBAIFJlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpCiAgICAgcmV0dXJuIElt
YWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbG9j
ay5zdXJmYWNlQmFzZUFkZHJlc3MoKSk7CiB9CiAKK3ZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kOjpjb3B5SW1hZ2VEYXRhKHZvaWQqIGJ1ZmZlciwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0Cit7CisgICAgSU9T
dXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJC
YWNrZW5kOjpjb3B5SW1hZ2VEYXRhKGJ1ZmZlciwgb3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBsb2Nr
LnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKK30KKwogdm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQog
ewogICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKm1fc3VyZmFjZSwgSU9TdXJmYWNlOjpMb2Nr
ZXI6OkFjY2Vzc01vZGU6OlJlYWRXcml0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZC5oCmluZGV4IDQ4NTlkZjZmYzUyNWQ4NWMzMjhjMTQ1ZjA3OTE3ODM1NjkwOWUyNWQuLmEyNjZk
MTU0OGU5NDYxY2JlMDYyOGU4NDA3OWQ3ZTBlMDM5YjAwMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZC5oCkBAIC02Miw2ICs2Miw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8dWlu
dDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUmVmUHRyPEltYWdlRGF0
YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25z
dCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBjb3B5SW1hZ2VEYXRhKHZvaWQq
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNv
bnN0IG92ZXJyaWRlOwogICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZv
cm1hdCkgb3ZlcnJpZGU7CiAgICAgSU9TdXJmYWNlKiBzdXJmYWNlKCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3QuY3BwCmluZGV4IGE5NDc5ZjI2Yzc1NzI1Y2U3N2VhZGYxNTliMDJlNDI4YzgzY2Jm
ZDUuLjM5YzdlMDk0NDc3ZDExOGZlNjNiOTI4N2NiMGRiMTJkNmU0ODg3MGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0LmNwcApAQCAtMjg3LDYgKzI4Nyw4IEBAIHZvaWQgRGlzcGxheUxpc3Q6OmFw
cGVuZChJdGVtSGFuZGxlIGl0ZW0pCiAgICAgICAgIHJldHVybiBhcHBlbmQ8TWV0YUNvbW1hbmRD
aGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyPihpdGVtLmdldDxNZXRhQ29tbWFuZENoYW5nZURl
c3RpbmF0aW9uSW1hZ2VCdWZmZXI+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5k
Q2hhbmdlSXRlbUJ1ZmZlcjoKICAgICAgICAgcmV0dXJuIGFwcGVuZDxNZXRhQ29tbWFuZENoYW5n
ZUl0ZW1CdWZmZXI+KGl0ZW0uZ2V0PE1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcj4oKSk7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6R2V0SW1hZ2VEYXRhOgorICAgICAgICByZXR1cm4gYXBwZW5kPEdl
dEltYWdlRGF0YT4oaXRlbS5nZXQ8R2V0SW1hZ2VEYXRhPigpKTsKICAgICBjYXNlIEl0ZW1UeXBl
OjpQdXRJbWFnZURhdGE6CiAgICAgICAgIHJldHVybiBhcHBlbmQ8UHV0SW1hZ2VEYXRhPihpdGVt
LmdldDxQdXRJbWFnZURhdGE+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JN
ZWRpYToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKaW5kZXgg
NWY5YzllMmE4NDExZmJmY2E1ZmVjNmU5OWNkODI2YTM4ODk3ZWIwOC4uN2UxNTNkNTZjNWU5ZjM1
OTlkYjViNDA3ODJjNTdlZDY0OWIwODIwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbUJ1ZmZlci5jcHAKQEAgLTIyOCw2ICsyMjgsOCBAQCB2b2lkIEl0ZW1IYW5kbGU6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKICAgICBjYXNlIEl0ZW1UeXBlOjpNZXRhQ29t
bWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXI6CiAgICAgY2FzZSBJdGVtVHlwZTo6TWV0
YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyOgogICAgICAgICByZXR1cm47CisgICAgY2FzZSBJdGVt
VHlwZTo6R2V0SW1hZ2VEYXRhOgorICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6
UHV0SW1hZ2VEYXRhOiB7CiAgICAgICAgIGdldDxQdXRJbWFnZURhdGE+KCkuYXBwbHkoY29udGV4
dCk7CiAgICAgICAgIHJldHVybjsKQEAgLTQ2Miw2ICs0NjQsMTAgQEAgdm9pZCBJdGVtSGFuZGxl
OjpkZXN0cm95KCkKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0
cnVjdGlibGU8TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyPjo6dmFsdWUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkdldEltYWdlRGF0YTogeworICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxHZXRJbWFnZURh
dGE+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgY2FzZSBJdGVtVHlwZTo6
UGFpbnRGcmFtZUZvck1lZGlhOiB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2
aWFsbHlfZGVzdHJ1Y3RpYmxlPFBhaW50RnJhbWVGb3JNZWRpYT46OnZhbHVlKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtNzE3LDYgKzcyMywxMCBAQCB2b2lkIEl0ZW1IYW5kbGU6OmNvcHlUbyhJdGVt
SGFuZGxlIGRlc3RpbmF0aW9uKSBjb25zdAogICAgICAgICBuZXcgKGl0ZW1PZmZzZXQpIE1ldGFD
b21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcihnZXQ8TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyPigp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpHZXRJbWFnZURh
dGE6IHsKKyAgICAgICAgbmV3IChpdGVtT2Zmc2V0KSBHZXRJbWFnZURhdGEoZ2V0PEdldEltYWdl
RGF0YT4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgY2FzZSBJdGVtVHlwZTo6UGFp
bnRGcmFtZUZvck1lZGlhOiB7CiAgICAgICAgIG5ldyAoaXRlbU9mZnNldCkgUGFpbnRGcmFtZUZv
ck1lZGlhKGdldDxQYWludEZyYW1lRm9yTWVkaWE+KCkpOwogICAgICAgICByZXR1cm47CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAKaW5kZXggYzBjNzNiODNiZDUyZWFh
MDRhOTUxNzgxODA0NDUzOTQ3YmJjOTVlOS4uZGUxOTA2ODg4OTkyMzZjZWQ5ZGYzMTEwYzRjYmUw
ODY3MDU1NzA3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcApA
QCAtMTMwLDYgKzEzMCw4IEBAIHN0YXRpYyBzaXplX3Qgc2l6ZU9mSXRlbUluQnl0ZXMoSXRlbVR5
cGUgdHlwZSkKICAgICAgICAgcmV0dXJuIHNpemVvZihNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0
aW9uSW1hZ2VCdWZmZXIpOwogICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRl
bUJ1ZmZlcjoKICAgICAgICAgcmV0dXJuIHNpemVvZihNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZm
ZXIpOworICAgIGNhc2UgSXRlbVR5cGU6OkdldEltYWdlRGF0YToKKyAgICAgICAgcmV0dXJuIHNp
emVvZihHZXRJbWFnZURhdGEpOwogICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKICAg
ICAgICAgcmV0dXJuIHNpemVvZihQdXRJbWFnZURhdGEpOwogICAgIGNhc2UgSXRlbVR5cGU6OlBh
aW50RnJhbWVGb3JNZWRpYToKQEAgLTE4NCw2ICsxODYsNyBAQCBib29sIGlzRHJhd2luZ0l0ZW0o
SXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpGbHVzaENvbnRleHQ6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyOgogICAg
IGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjoKKyAgICBjYXNlIEl0
ZW1UeXBlOjpHZXRJbWFnZURhdGE6CiAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKICAgICBj
YXNlIEl0ZW1UeXBlOjpSb3RhdGU6CiAgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToKQEAgLTI5Niw2
ICsyOTksNyBAQCBib29sIGlzSW5saW5lSXRlbShJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRl
bVR5cGU6OkZsdXNoQ29udGV4dDoKICAgICBjYXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5n
ZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXI6CiAgICAgY2FzZSBJdGVtVHlwZTo6TWV0YUNvbW1hbmRD
aGFuZ2VJdGVtQnVmZmVyOgorICAgIGNhc2UgSXRlbVR5cGU6OkdldEltYWdlRGF0YToKICAgICBj
YXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6CiAgICAgY2FzZSBJdGVtVHlwZTo6UmVz
dG9yZToKICAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbVR5cGUuaAppbmRleCAwZTk0N2EwNmRhYjVhMmRmYjQ3NjkwODJmOGNhYzU0OGFmODkz
NDNiLi4yODljNzllODE5YWI0Y2MzNzdlNzY3YjQwZmU1NjFkMTIwZDgyNjAxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RJdGVtVHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmgKQEAgLTc4LDYgKzc4LDcgQEAgZW51bSBjbGFz
cyBJdGVtVHlwZSA6IHVpbnQ4X3QgewogICAgIEZsdXNoQ29udGV4dCwKICAgICBNZXRhQ29tbWFu
ZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXIsCiAgICAgTWV0YUNvbW1hbmRDaGFuZ2VJdGVt
QnVmZmVyLAorICAgIEdldEltYWdlRGF0YSwKICAgICBQdXRJbWFnZURhdGEsCiAgICAgUGFpbnRG
cmFtZUZvck1lZGlhLAogICAgIFN0cm9rZVJlY3QsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtcy5jcHAKaW5kZXggMjEzZGI5YzhjZjQyZWMxYWUyZDEzMzkzNzVkOWY1NjMwZTc2ZDc0My4u
ODNkYjZjMTQ1NGNlZjFjZGYyNDI0ZTdlYzE4NWYxNWI4ZTdhZDQxOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRl
bXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcApAQCAtNzczLDYgKzc3MywxMyBAQCBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbEVsbGlwc2UmIGl0ZW0p
CiAgICAgcmV0dXJuIHRzOwogfQogCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgR2V0SW1hZ2VEYXRhJiBpdGVtKQoreworICAgIHRzLmR1bXBQcm9w
ZXJ0eSgib3V0cHV0Rm9ybWF0IiwgaXRlbS5vdXRwdXRGb3JtYXQoKSk7CisgICAgdHMuZHVtcFBy
b3BlcnR5KCJzcmNSZWN0IiwgaXRlbS5zcmNSZWN0KCkpOworICAgIHJldHVybiB0czsKK30KKwog
UHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZv
cm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZv
cm1hdCkKICAgICA6IG1fc3JjUmVjdChzcmNSZWN0KQogICAgICwgbV9kZXN0UG9pbnQoZGVzdFBv
aW50KQpAQCAtMTA2NCw2ICsxMDcxLDcgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6Rmx1c2hD
b250ZXh0OiB0cyA8PCAiZmx1c2gtY29udGV4dCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6
Ok1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcjogdHMgPDwgIm1ldGEtY29t
bWFuZC1jaGFuZ2UtZGVzdGluYXRpb24taW1hZ2UtYnVmZmVyIjsgYnJlYWs7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyOiB0cyA8PCAibWV0YS1jb21tYW5k
LWNoYW5nZS1pdGVtLWJ1ZmZlciI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkdldEltYWdl
RGF0YTogdHMgPDwgImdldC1pbWFnZS1kYXRhIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6
UHV0SW1hZ2VEYXRhOiB0cyA8PCAicHV0LWltYWdlLWRhdGEiOyBicmVhazsKICAgICBjYXNlIEl0
ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6IHRzIDw8ICJwYWludC1mcmFtZS1mb3ItbWVkaWEi
OyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OiB0cyA8PCAic3Ryb2tlLXJl
Y3QiOyBicmVhazsKQEAgLTEyMjUsNiArMTIzMyw5IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIEl0ZW1IYW5kbGUgaXRlbSkKICAgICBjYXNlIEl0ZW1UeXBlOjpNZXRh
Q29tbWFuZENoYW5nZUl0ZW1CdWZmZXI6CiAgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PE1ldGFDb21t
YW5kQ2hhbmdlSXRlbUJ1ZmZlcj4oKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlw
ZTo6R2V0SW1hZ2VEYXRhOgorICAgICAgICB0cyA8PCBpdGVtLmdldDxHZXRJbWFnZURhdGE+KCk7
CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKICAgICAg
ICAgdHMgPDwgaXRlbS5nZXQ8UHV0SW1hZ2VEYXRhPigpOwogICAgICAgICBicmVhazsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCmluZGV4IGMyOGQ2OWY4Njg4NGUzMTYzNjA3Nzg2ZWY5
YmIyMTljYmVjZGFjZTkuLjIyMmEzZDgwNDlkYjMxZDk5MjFlYTc2Mzg4NTI1ZjIyYzczODg1MDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdEl0ZW1zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaApAQCAtMTkxNSw2ICsxOTE1LDI2IEBA
IHByaXZhdGU6CiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKIH07CiAKK2NsYXNzIEdldEltYWdlRGF0
YSB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0
ZW1UeXBlOjpHZXRJbWFnZURhdGE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5l
SXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBm
YWxzZTsKKworICAgIEdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZv
cm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkKKyAgICAgICAgOiBtX291dHB1dEZvcm1hdChv
dXRwdXRGb3JtYXQpCisgICAgICAgICwgbV9zcmNSZWN0KHNyY1JlY3QpCisgICAgeworICAgIH0K
KworICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0KCkgY29uc3QgeyByZXR1
cm4gbV9vdXRwdXRGb3JtYXQ7IH0KKyAgICBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9zcmNSZWN0OyB9CisKK3ByaXZhdGU6CisgICAgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBtX291dHB1dEZvcm1hdDsKKyAgICBJbnRSZWN0IG1fc3JjUmVjdDsKK307CisKIGNsYXNz
IFB1dEltYWdlRGF0YSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBp
dGVtVHlwZSA9IEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE7CkBAIC0yMzMxLDYgKzIzNTEsNyBAQCB0
ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZT4gewogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Rmx1c2hDb250ZXh0LAog
ICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VEZXN0
aW5hdGlvbkltYWdlQnVmZmVyLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyLAorICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6R2V0SW1hZ2VEYXRhLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6UHV0SW1hZ2VEYXRhLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UGFp
bnRGcmFtZUZvck1lZGlhLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ry
b2tlUmVjdCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAppbmRleCBl
ZGEwYjU1OTgzNWUwZDg5ZWQwYTU3ZTU4ZTUzY2YxMzg5NjM1NzFiLi5lZDc0NjAzMzZkZGEzMmUy
NTA0N2MzYmM1ODllNDNlN2JjODhiY2E4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVjb3JkZXIuY3BwCkBAIC01NSw2ICs1NSwxMSBAQCBSZWNvcmRlcjo6flJlY29yZGVyKCkKICAg
ICBMT0coRGlzcGxheUxpc3RzLCAiUmVjb3JkZWQgZGlzcGxheSBsaXN0OlxuJXMiLCBtX2Rpc3Bs
YXlMaXN0LmRlc2NyaXB0aW9uKCkuZGF0YSgpKTsKIH0KIAordm9pZCBSZWNvcmRlcjo6Z2V0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0KQoreworICAgIGFwcGVuZDxHZXRJbWFnZURhdGE+KG91dHB1dEZvcm1hdCwg
c291cmNlUmVjdCk7Cit9CisKIHZvaWQgUmVjb3JkZXI6OnB1dEltYWdlRGF0YShXZWJDb3JlOjpB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbWFnZURh
dGEmIGltYWdlRGF0YSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBkZXN0Rm9ybWF0KQogewogICAgIGFwcGVuZDxQdXRJbWFnZURhdGE+KGlucHV0Rm9ybWF0LCBp
bWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAppbmRleCA4OWE5OTA4NmFhZDExZWFkZTAzNzVmMWRmMTg2
NGQzMzMzMTc5NThiLi5jMjk4ZTc5OTE2MmFhZTMxYjdkOWVmYWU2ZDM4NTIwMjVmNjUxYjY1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKQEAgLTU3LDYgKzU3LDcgQEAg
cHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFJlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYsIERp
c3BsYXlMaXN0JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3Qm
IGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBEZWxlZ2F0ZSogPSBudWxscHRy
LCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbiA9IERyYXdHbHlw
aHNSZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uOjpEZWNvbnN0cnVjdCk7CiAgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+UmVjb3JkZXIoKTsKIAorICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBj
b25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURh
dGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpOwogCiAgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gbV9kaXNwbGF5TGlzdC5pc0VtcHR5KCk7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZm
ZXJEaXJlY3QyREJhY2tlbmQuY3BwCmluZGV4IDAxZDJlNzgwMjg1YjExZmVjMzliNGNkMjZiZjRj
ZmZmMDgwNzMzNzcuLmM0MDAyOTliZjhiODI3MGM1MWQ0MWVhMGQxNmE1NGJjYWRiOTY5NTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcApAQCAtMzE1LDcgKzMxNSw3IEBA
IFZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6dG9CR1JBRGF0YSgp
IGNvbnN0CiBSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Z2V0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0KSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwg
bnVsbHB0cik7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKG91
dHB1dEZvcm1hdCwgc3JjUmVjdCk7CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25z
dCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVm
ZmVyLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZm
ZXIuaAppbmRleCAxNjJkMmVmOTBlNWRjZTYyY2NiMTU1NDVjNmQ0NTQ1YWVkYjU4MTNiLi44NDk3
MDI3OGY0YjQ2ZjFlNGVlMTQ2MmFmNzRlMzBiNGZmMTc4ZjI4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaApAQCAtODEs
NiArODEsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAKKyAgICAgICAgaWYgKGl0ZW0uaXM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkdldEltYWdlRGF0
YT4oKSkgeworICAgICAgICAgICAgYXV0byBnZXRJbWFnZURhdGFJdGVtID0gaXRlbS5nZXQ8V2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkdldEltYWdlRGF0YT4oKTsKKworICAgICAgICAgICAgLy8gRklY
TUU6IENoZWNrIHRoZSBzaXplLgorICAgICAgICAgICAgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6
OmNvcHlJbWFnZURhdGEobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmltYWdlRGF0YUJ1ZmZlcigp
LCBnZXRJbWFnZURhdGFJdGVtLm91dHB1dEZvcm1hdCgpLCBnZXRJbWFnZURhdGFJdGVtLnNyY1Jl
Y3QoKSk7CisgICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuZGlkRmluaXNoR2V0
SW1hZ2VEYXRhKCk7CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKICAg
ICAgICAgaWYgKGl0ZW0uaXM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Ok1ldGFDb21tYW5kQ2hhbmdl
SXRlbUJ1ZmZlcj4oKSkgewogICAgICAgICAgICAgYXV0byBuZXh0QnVmZmVySWRlbnRpZmllciA9
IGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZm
ZXI+KCkuaWRlbnRpZmllcigpOwogICAgICAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5k
LnNldE5leHRJdGVtQnVmZmVyVG9SZWFkKG5leHRCdWZmZXJJZGVudGlmaWVyLCBtX3JlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKaW5kZXggMWNiNTBl
MzdiNjBhZjA0MDQ2ZjA3NmUzOTZjODI4MTMwNTY1OTU2ZC4uOTgxNWZlMGZjOGUwZThiNzQyNDdm
OGZjZjIzODkyNmFjMTE2MmIyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtMTg2LDcg
KzE4Niw3IEBAIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bmV4
dERlc3RpbmF0aW9uSW1hZ2VCdWZmZXJBZnRlckFwcGx5CiAgICAgICAgIGNoZWNrZWRPZmZzZXQg
Kz0gcmVzdWx0Lm51bWJlck9mQnl0ZXNSZWFkOwogICAgICAgICBpZiAoVU5MSUtFTFkoY2hlY2tl
ZE9mZnNldC5oYXNPdmVyZmxvd2VkKCkpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogQWRkIGEg
bWVzc2FnZSBjaGVjayB0byB0ZXJtaW5hdGUgdGhlIHdlYiBwcm9jZXNzLgotICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTk0LDE0ICsxOTQs
MTQgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpuZXh0RGVz
dGluYXRpb25JbWFnZUJ1ZmZlckFmdGVyQXBwbHkKIAogICAgICAgICBpZiAoVU5MSUtFTFkob2Zm
c2V0ID4gaGFuZGxlLnNoYXJlZE1lbW9yeSgpLnNpemUoKSkpIHsKICAgICAgICAgICAgIC8vIEZJ
WE1FOiBBZGQgYSBtZXNzYWdlIGNoZWNrIHRvIHRlcm1pbmF0ZSB0aGUgd2ViIHByb2Nlc3MuCi0g
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChyZXN1bHQucmVhc29uRm9yU3RvcHBpbmcgPT0gRGlzcGxheUxpc3Q6OlN0b3BSZXBs
YXlSZWFzb246OkNoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXIpIHsKICAgICAgICAgICAgIGRl
c3RpbmF0aW9uID0gbWFrZVJlZlB0cihtX3JlbW90ZVJlc291cmNlQ2FjaGUuY2FjaGVkSW1hZ2VC
dWZmZXIoKnJlc3VsdC5uZXh0RGVzdGluYXRpb25JbWFnZUJ1ZmZlcikpOwogICAgICAgICAgICAg
aWYgKCFkZXN0aW5hdGlvbikgewotICAgICAgICAgICAgICAgIEFTU0VSVCghbV9wZW5kaW5nV2Fr
ZXVwSW5mbyk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcGVuZGluZ1dha2V1
cEluZm8pOwogICAgICAgICAgICAgICAgIG1fcGVuZGluZ1dha2V1cEluZm8gPSB7e3sgaGFuZGxl
LmlkZW50aWZpZXIoKSwgb2Zmc2V0LCAqcmVzdWx0Lm5leHREZXN0aW5hdGlvbkltYWdlQnVmZmVy
LCByZWFzb24gfSwgV1RGOjpudWxsb3B0IH19OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC0zMjIsMTYgKzMyMiw0NCBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnNldE5leHRJ
dGVtQnVmZmVyVG9SZWFkKERpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbgogICAgIG1fcGVuZGlu
Z1dha2V1cEluZm8gPSB7e3sgaWRlbnRpZmllciwgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6Omhl
YWRlclNpemUoKSwgZGVzdGluYXRpb25JZGVudGlmaWVyLCBHUFVQcm9jZXNzV2FrZXVwUmVhc29u
OjpVbnNwZWNpZmllZCB9LCBXVEY6Om51bGxvcHQgfX07CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9y
bWF0LCBJbnRSZWN0IHNyY1JlY3QsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSVBDOjpJbWFnZURh
dGFSZWZlcmVuY2UmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OmdldEltYWdlRGF0YShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJiBoYW5kbGUp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwogCi0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhOwotICAgIGlmIChhdXRvIGltYWdl
QnVmZmVyID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNhY2hlZEltYWdlQnVmZmVyKHJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcikpCi0gICAgICAgIGltYWdlRGF0YSA9IGltYWdlQnVmZmVyLT5n
ZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0KTsKLSAgICBjb21wbGV0aW9uSGFuZGxl
cihJUEM6OkltYWdlRGF0YVJlZmVyZW5jZShXVEZNb3ZlKGltYWdlRGF0YSkpKTsKKyAgICBDaGVj
a2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IGRhdGFTaXplID0gNDsKKyAgICBkYXRhU2l6ZSAqPSBz
aXplLndpZHRoKCk7CisgICAgZGF0YVNpemUgKj0gc2l6ZS5oZWlnaHQoKTsKKyAgICBSZWZQdHI8
U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnk7CisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSAwOwor
ICAgIGlmICghZGF0YVNpemUuaGFzT3ZlcmZsb3dlZCgpKSB7CisgICAgICAgIGJ1ZmZlclNpemUg
PSBzaXplb2YoQXRvbWljPHVpbnQ2NF90PikgKyBkYXRhU2l6ZS51bnNhZmVHZXQoKTsKKyAgICAg
ICAgc2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjphbGxvY2F0ZShidWZmZXJTaXplKTsKKyAg
ICB9CisKKyAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7CisgICAgaWYgKHNoYXJlZE1l
bW9yeSkKKyAgICAgICAgc2hhcmVkTWVtb3J5LT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRN
ZW1vcnk6OlByb3RlY3Rpb246OlJlYWRXcml0ZSk7CisKKyAgICBtX2dldEltYWdlRGF0YUJ1ZmZl
ciA9IHNoYXJlZE1lbW9yeTsKKyAgICBtX2dldEltYWdlRGF0YUJ1ZmZlclNpemUgPSBzaGFyZWRN
ZW1vcnkgPyBzaXplIDogSW50U2l6ZSgpOworCisgICAgY29tcGxldGlvbkhhbmRsZXIoU2hhcmVk
TWVtb3J5OjpJUENIYW5kbGUgeyBXVEZNb3ZlKGhhbmRsZSksIGJ1ZmZlclNpemUgfSk7Cit9CisK
K3ZvaWQqIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmltYWdlRGF0YUJ1ZmZlcigpCit7CisgICAg
aWYgKCFtX2dldEltYWdlRGF0YUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX2dldEltYWdlRGF0YUJ1ZmZlci0+ZGF0YSgp
KSArIHNpemVvZihBdG9taWM8dWludDY0X3Q+KTsKIH0KIAordm9pZCBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpkaWRGaW5pc2hHZXRJbWFnZURhdGEoKQoreworICAgIGlmICghbV9nZXRJbWFnZURh
dGFCdWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICByZWludGVycHJldF9jYXN0PEF0b21pYzx1
aW50NjRfdD4qPihtX2dldEltYWdlRGF0YUJ1ZmZlci0+ZGF0YSgpKS0+c3RvcmUoMSk7CisgfQor
CiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6
OlByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24sIFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoU3RyaW5nJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtNDg2LDYgKzUxNCw3IEBAIE9wdGlvbmFsPERp
c3BsYXlMaXN0OjpJdGVtSGFuZGxlPiBXQVJOX1VOVVNFRF9SRVRVUk4gUmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6ZGVjCiAgICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZsdXNoQ29udGV4
dDoKICAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VEZXN0
aW5hdGlvbkltYWdlQnVmZmVyOgogICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpNZXRh
Q29tbWFuZENoYW5nZUl0ZW1CdWZmZXI6CisgICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OkdldEltYWdlRGF0YToKICAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UGFpbnRGcmFt
ZUZvck1lZGlhOgogICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpSZXN0b3JlOgogICAg
IGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpSb3RhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaApp
bmRleCBlNjM4OTkwM2I2NTBiYThkOTczZGFmOWIzZGNjYTY0NTM1NmY0NWY4Li5iODRlMzE3NGVk
N2ZmM2I2NjgwNzE1MThmNjI0NjI1YWYwYjA0OGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKQEAg
LTg1LDYgKzg1LDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBkaXNjb25uZWN0KCk7CiAKKyAgICB2
b2lkKiBpbWFnZURhdGFCdWZmZXIoKTsKKyAgICB2b2lkIGRpZEZpbmlzaEdldEltYWdlRGF0YSgp
OworCiBwcml2YXRlOgogICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2VzcyYsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMmJik7
CiAKQEAgLTExNiw3ICsxMTksNyBAQCBwcml2YXRlOgogICAgIC8vIE1lc3NhZ2VzIHRvIGJlIHJl
Y2VpdmVkLgogICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRT
aXplJiBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBXZWJDb3JlOjpQaXhlbEZvcm1hdCwgV2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lkIHdha2VVcEFuZEFwcGx5
RGlzcGxheUxpc3QoY29uc3QgR1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHMmKTsKLSAg
ICB2b2lkIGdldEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCwgV2ViQ29yZTo6SW50UmVjdCBzcmNSZWN0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSVBDOjpJbWFnZURhdGFSZWZl
cmVuY2UmJik+JiYpOworICAgIHZvaWQgZ2V0SW1hZ2VEYXRhKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxl
Jik+JiYpOwogICAgIHZvaWQgZ2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJlc2VydmVSZXNv
bHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoU3RyaW5nJiYpPiYmKTsKICAgICB2b2lkIGdldERhdGFGb3JJbWFnZUJ1ZmZl
cihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChW
ZWN0b3I8dWludDhfdD4mJik+JiYpOwogICAgIHZvaWQgZ2V0QkdSQURhdGFGb3JJbWFnZUJ1ZmZl
cihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoVmVjdG9yPHVpbnQ4X3Q+JiYpPiYmKTsKQEAgLTE1MSw2ICsxNTQsOCBAQCBwcml2YXRl
OgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxXVEY6Ok1hY2hTZW1h
cGhvcmU+IG1fcmVzdW1lRGlzcGxheUxpc3RTZW1hcGhvcmU7CiAjZW5kaWYKKyAgICBSZWZQdHI8
U2hhcmVkTWVtb3J5PiBtX2dldEltYWdlRGF0YUJ1ZmZlcjsKKyAgICBXZWJDb3JlOjpJbnRTaXpl
IG1fZ2V0SW1hZ2VEYXRhQnVmZmVyU2l6ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmQubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgppbmRleCA3ZDY1Y2U5MDljNTgy
MGY0NmIwMWU2YmRlZWNkZWFhNzMzNmFhZjI4Li4zMmJiMGNhYzdhNDhjZDliYWRlNGQyZTdkYzBl
NWNhMDIwZWZmYzU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgpA
QCAtMjUsNyArMjUsNyBAQAogbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCB7CiAg
ICAgQ3JlYXRlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6RmxvYXRTaXplIGxvZ2ljYWxTaXplLCBXZWJD
b3JlOjpSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
V2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6UGl4
ZWxGb3JtYXQgcGl4ZWxGb3JtYXQsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiAgICAgV2FrZVVwQW5kQXBwbHlEaXNwbGF5
TGlzdChzdHJ1Y3QgV2ViS2l0OjpHUFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50cyBhcmd1
bWVudHMpCi0gICAgR2V0SW1hZ2VEYXRhKGVudW06dWludDhfdCBXZWJDb3JlOjpBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgV2ViQ29yZTo6SW50UmVjdCBzcmNSZWN0LCBXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKSAtPiAoSVBDOjpJbWFnZURhdGFSZWZlcmVuY2UgaW1hZ2VEYXRhKSBTeW5jaHJvbm91cwor
ICAgIEdldEltYWdlRGF0YShXZWJDb3JlOjpJbnRTaXplIHNpemUpIC0+IChXZWJLaXQ6OlNoYXJl
ZE1lbW9yeTo6SVBDSGFuZGxlIGhhbmRsZSkgU3luY2hyb25vdXMKICAgICBHZXREYXRhVVJMRm9y
SW1hZ2VCdWZmZXIoU3RyaW5nIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIGVu
dW06dWludDhfdCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9u
LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKSAtPiAoU3RyaW5nIHVybFN0cmluZykgU3luY2hyb25vdXMKICAgICBHZXREYXRh
Rm9ySW1hZ2VCdWZmZXIoU3RyaW5nIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHks
IFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpIC0+IChWZWN0b3I8dWludDhfdD4gZGF0YSkgU3luY2hyb25vdXMKICAgICBHZXRC
R1JBRGF0YUZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIC0+IChWZWN0b3I8dWludDhfdD4gZGF0YSkg
U3luY2hyb25vdXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNr
ZW5kLmNwcAppbmRleCAxZDdhZjZiYjhjNTdlYzZhNzY3MTAwNTdkNGMxOGNiYTZjNDY3MjYxLi4y
MTVmZDJkMTFlMzc2ZTZmMzQ5MTUyMGIzYTQ2ZWZhYzA5YjY1NDA5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0
bWFwQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwCkBAIC0xMjMsNiArMTIzLDEx
IEBAIFJlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6
Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwCiAgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2Vu
ZDo6Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbV9iaXRtYXAtPmRhdGEoKSk7
CiB9CiAKK3ZvaWQgSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpjb3B5SW1hZ2VE
YXRhKHZvaWQqIGJ1ZmZlciwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFj
a2VuZDo6Y29weUltYWdlRGF0YShidWZmZXIsIG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbV9iaXRt
YXAtPmRhdGEoKSk7Cit9CisKIHZvaWQgSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5k
OjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3Qg
SW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBv
aW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1h
dCkKIHsKICAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwg
aW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIG1fYml0bWFwLT5kYXRh
KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9J
bWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmgKaW5k
ZXggNTU1MDZhNDlkMDNlMzllODhlMDM2MWU0OTE1NWYxMzFkNzk5MDEwZi4uNGI5ZGQ2NjNiMGU0
NWUzNTlhOWJiNzEyOTkyZTg4MTgwNzA1N2RlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVy
U2hhcmVhYmxlQml0bWFwQmFja2VuZC5oCkBAIC01OSw2ICs1OSw3IEBAIHB1YmxpYzoKIAogICAg
IFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgUmVmUHRy
PFdlYkNvcmU6OkltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlw
bGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdm9pZCBjb3B5SW1hZ2VEYXRhKHZvaWQqIGJ1ZmZlciwgV2ViQ29yZTo6QWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
KSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIHB1dEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbWFnZURhdGEmLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYg
ZGVzdFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92
ZXJyaWRlOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAppbmRleCBkN2I5
MGI1NzJkYTVmYzEzY2QzYmQwODZiNDc3MTRiMTBjZDM1Y2E5Li4wMGVkMTdjYWNkZDQ3MjU0ODk0
YzBhNTAwYjMwYTEwMjQwYmRiZTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaApAQCAt
MTQ2LDcgKzE0NiwzMCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGlmIChVTkxJS0VMWSghbV9yZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICAgICAgcmV0dXJuIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5nZXRJbWFnZURh
dGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7
CisgICAgICAgIGF1dG8gc2hhcmVkTWVtb3J5ID0gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHktPnNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YShzcmNSZWN0LnNpemUoKSk7CisgICAgICAg
IGlmICghc2hhcmVkTWVtb3J5KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAg
ICAgYXV0byogaGFzRmluaXNoZWQgPSByZWludGVycHJldF9jYXN0PEF0b21pYzx1aW50NjRfdD4q
PihzaGFyZWRNZW1vcnktPmRhdGEoKSk7CisgICAgICAgIGhhc0ZpbmlzaGVkLT5zdG9yZSgwKTsK
KworICAgICAgICBhdXRvJiBtdXRhYmxlVGhpcyA9IGNvbnN0X2Nhc3Q8UmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eSY+KCp0aGlzKTsKKyAgICAgICAgbXV0YWJsZVRoaXMubV9kcmF3aW5nQ29udGV4dC5y
ZWNvcmRlcigpLmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QpOworICAgICAgICBt
dXRhYmxlVGhpcy5mbHVzaERyYXdpbmdDb250ZXh0QXN5bmMoKTsKKworICAgICAgICBhdXRvIGlt
YWdlRGF0YSA9IFdlYkNvcmU6OkltYWdlRGF0YTo6Y3JlYXRlKHNyY1JlY3Quc2l6ZSgpKTsKKyAg
ICAgICAgc2l6ZV90IGltYWdlU2l6ZUluQnl0ZXMgPSBpbWFnZURhdGEtPmRhdGEoKS0+Ynl0ZUxl
bmd0aCgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChpbWFnZVNpemVJbkJ5dGVzICsgc2l6ZW9m
KEF0b21pYzx1aW50NjRfdD4pIDw9IHNoYXJlZE1lbW9yeS0+c2l6ZSgpKTsKKworICAgICAgICAv
LyBVc2Ugc2VtYXBob3JlCisgICAgICAgIHdoaWxlICghaGFzRmluaXNoZWQtPmxvYWQoKSkgewor
ICAgICAgICAgICAgVGhyZWFkOjp5aWVsZCgpOworICAgICAgICAgICAgc2xlZXAoMTBfdXMpOwor
ICAgICAgICB9CisgCisgICAgICAgIG1lbWNweShpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpLCBz
dGF0aWNfY2FzdDx1aW50OF90Kj4oc2hhcmVkTWVtb3J5LT5kYXRhKCkpICsgc2l6ZW9mKEF0b21p
Yzx1aW50NjRfdD4pLCBpbWFnZVNpemVJbkJ5dGVzKTsKKworICAgICAgICByZXR1cm4gaW1hZ2VE
YXRhOwogICAgIH0KIAogICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24g
cHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkuY3BwCmluZGV4IDYxYjRjODI0OTU3NmRlMTI4YTlhYmVkMDkyN2Y0MWVl
NDE2MmJlNmUuLjQzYmZmOWUzNzcwMDJiZThkZjc4ZTBmOWI3OTkxYzc4MWZjYjBjZjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKQEAgLTE0OSwxNCArMTQ5LDIw
IEBAIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVh
dGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVJl
ZlB0cjxJbWFnZURhdGE+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0LCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKQorUmVmUHRyPFNoYXJlZE1lbW9yeT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpz
aGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEoY29uc3QgSW50U2l6ZSYgZGVzaXJlZFNpemUpCiB7
Ci0gICAgc2VuZERlZmVycmVkV2FrZXVwTWVzc2FnZUlmTmVlZGVkKCk7CisgICAgaWYgKG1faW1h
Z2VEYXRhQnVmZmVyU2l6ZS53aWR0aCgpID49IGRlc2lyZWRTaXplLndpZHRoKCkgJiYgbV9pbWFn
ZURhdGFCdWZmZXJTaXplLmhlaWdodCgpID49IGRlc2lyZWRTaXplLmhlaWdodCgpKQorICAgICAg
ICByZXR1cm4gbV9pbWFnZURhdGFCdWZmZXI7CiAKLSAgICBJUEM6OkltYWdlRGF0YVJlZmVyZW5j
ZSBpbWFnZURhdGFSZWZlcmVuY2U7Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OkdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIHJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpH
ZXRJbWFnZURhdGE6OlJlcGx5KGltYWdlRGF0YVJlZmVyZW5jZSksIG1fcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIsIDFfcyk7Ci0gICAgcmV0dXJuIGltYWdlRGF0YVJlZmVyZW5jZS5idWZmZXIo
KTsKLX0KKyAgICBJbnRTaXplIG5ld1NpemUgPSBtX2ltYWdlRGF0YUJ1ZmZlclNpemUuZXhwYW5k
ZWRUbyhkZXNpcmVkU2l6ZSk7CisgICAgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgaGFuZGxlOwor
ICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpHZXRJbWFnZURh
dGEobmV3U2l6ZSksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpHZXRJbWFnZURh
dGE6OlJlcGx5KGhhbmRsZSksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIsIDFfcyk7CisK
KyAgICBtX2ltYWdlRGF0YUJ1ZmZlciA9IFNoYXJlZE1lbW9yeTo6bWFwKGhhbmRsZS5oYW5kbGUs
IFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZFdyaXRlKTsKKyAgICBtX2ltYWdlRGF0YUJ1
ZmZlclNpemUgPSBuZXdTaXplOworCisgICAgcmV0dXJuIG1faW1hZ2VEYXRhQnVmZmVyOworIH0K
IAogU3RyaW5nIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0RGF0YVVSTEZvckltYWdl
QnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwg
UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiwgUmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5oCmluZGV4IDQ4ZmEwNjlkYWE4ZDNjZDZkMTI0NDJkYjMzMDYw
M2M5MzZiOTdiNDcuLmMxYzFiYjIxMzU0ZmIyMjFlM2Y4NGI2M2FhYzQ0OGI1MTFlZWM2ZjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApAQCAtODQsNyArODQsNyBAQCBw
dWJsaWM6CiAKICAgICAvLyBNZXNzYWdlcyB0byBiZSBzZW50LgogICAgIFJlZlB0cjxXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXpl
JiwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3Jl
OjpDb2xvclNwYWNlLCBXZWJDb3JlOjpQaXhlbEZvcm1hdCk7Ci0gICAgUmVmUHRyPFdlYkNvcmU6
OkltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24g
b3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNo
YXJlZE1lbW9yeUZvckdldEltYWdlRGF0YShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CiAgICAg
U3RyaW5nIGdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiwgV2Vi
Q29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICBWZWN0b3I8dWludDhfdD4g
Z2V0RGF0YUZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAg
ICBWZWN0b3I8dWludDhfdD4gZ2V0QkdSQURhdGFGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwpAQCAtMTI5LDYgKzEyOSw4IEBAIHByaXZhdGU6CiAj
aWYgUExBVEZPUk0oQ09DT0EpCiAgICAgTWFjaFNlbWFwaG9yZSBtX3Jlc3VtZURpc3BsYXlMaXN0
U2VtYXBob3JlOwogI2VuZGlmCisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gbV9pbWFnZURhdGFC
dWZmZXI7CisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX2ltYWdlRGF0YUJ1ZmZlclNpemU7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNr
ZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1h
Z2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcAppbmRleCA1N2M3ZjdkNWEyNDU5
N2QyYjZiMmZmM2ViNTBkN2Y1Njk3NDk1MGE5Li42MzVmMDE2ZGM5MzdiY2FhYjU3MTkzOWI1OWNk
NDgyNTZlMTllNjNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZl
clNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0xMDQsNiArMTA0LDExIEBAIFJlZlB0
cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6Z2V0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsCiAgICAgcmV0dXJuIHsgfTsKIH0KIAordm9pZCBJbWFnZUJ1ZmZl
clNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OmNvcHlJbWFnZURhdGEodm9pZCosIEFscGhhUHJl
bXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIHZvaWQgSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZh
Y2VCYWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW1h
Z2VEYXRhJiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50JiwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZl
clNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmgK
aW5kZXggZDVlMDBlNDIwOThhNGIzNzA2ODJhNDk3YmUzODljMGQzODk1M2NhOC4uYjQyNTA5N2Fm
OTI2MTMxMWVjYjllNGYyYjQ1ZWY0ZTEwYzE5NWMxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3Vy
ZmFjZUJhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oCkBAIC01Nyw2ICs1
Nyw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
VmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKICAgICBSZWZQdHI8
V2ViQ29yZTo6SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2b2lkIGNvcHlJbWFnZURhdGEodm9pZCogYnVmZmVyLCBXZWJDb3JlOjpBbHBo
YVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
IGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgcHV0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJl
bXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkltYWdlRGF0YSYsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBk
ZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3Zl
cnJpZGU7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNPcmlnaW5BdFVwcGVyTGVmdENv
cm5lciA9IHRydWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418630</attachid>
            <date>2021-01-28 01:28:44 -0800</date>
            <delta_ts>2021-03-09 21:26:09 -0800</delta_ts>
            <desc>Updated to use semaphore</desc>
            <filename>display-list-get-image-data-semaphore.patch</filename>
            <type>text/plain</type>
            <size>39512</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1h
Z2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1h
Z2VCdWZmZXIuaAppbmRleCAxZjI0NWJjZWJhNzIuLmUxZGVhNWJhNDRiMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIu
aApAQCAtMjM5LDYgKzIzOSwxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAorICAgIHZvaWQgY29weUltYWdlRGF0YSh2b2lkKiBidWZmZXIsIEFscGhhUHJl
bXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25z
dCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNr
ZW5kQ3JlYXRlZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PENvbmNyZXRlSW1hZ2VCdWZm
ZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+
Y29weUltYWdlRGF0YShidWZmZXIsIG91dHB1dEZvcm1hdCwgc3JjUmVjdCk7CisgICAgICAgIH0K
KyAgICB9CisKICAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlu
cHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCA9IHsgfSwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBkZXN0Rm9ybWF0ID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkg
b3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2Vu
ZENyZWF0ZWQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmgKaW5kZXggMzZkNzRjYTM5ZGUxLi4xMDdiZGM1ZDY5ZGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaApAQCAtMTI4LDYgKzEyOCw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29u
c3QgPSAwOwogCiAgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29weUltYWdlRGF0YSh2b2lkKiwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNv
bnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0sIEFscGhhUHJlbXVsdGlwbGljYXRp
b24gZGVzdEZvcm1hdCA9IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpID0g
MDsKIAogICAgIC8vIEZJWE1FOiBjdXJyZW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIG1ldGhv
ZCBoYXZlIHRoZSByZXN0cmljdGlvbiB0aGF0IHRoZXkgb25seSB3b3JrCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcApp
bmRleCA5Mzk0ZTdiZmY0MjkuLjRkYTM3NTVhYjUwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCkBAIC0yNTks
NiArMjU5LDMyIEBAIFJlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0CiAgICAgcmV0dXJuIGltYWdlRGF0
YTsKIH0KIAordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlJbWFnZURhdGEodm9pZCogZGVz
dERhdGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCB2b2lkKiBzcmNEYXRhKSBjb25zdAoreworICAgIEludFJlY3Qgc3JjUmVjdFNj
YWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKHNyY1JlY3QpOworICAgIGlmIChzcmNSZWN0U2Nh
bGVkLndpZHRoKCkgIT0gc3JjUmVjdC53aWR0aCgpIHx8IHNyY1JlY3RTY2FsZWQuaGVpZ2h0KCkg
IT0gc3JjUmVjdC5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UmVjdCBzcmNS
ZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbihiYWNrZW5kUmVjdCgpLCBzcmNSZWN0U2NhbGVkKTsK
KyAgICBJbnRSZWN0IGRlc3RSZWN0ID0geyBJbnRQb2ludDo6emVybygpLCBzcmNSZWN0Q2xpcHBl
ZC5zaXplKCkgfTsKKworICAgIGlmIChzcmNSZWN0U2NhbGVkLngoKSA8IDApCisgICAgICAgIGRl
c3RSZWN0LnNldFgoLXNyY1JlY3RTY2FsZWQueCgpKTsKKworICAgIGlmIChzcmNSZWN0U2NhbGVk
LnkoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNldFkoLXNyY1JlY3RTY2FsZWQueSgpKTsKKwor
ICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiBzcmNSZWN0U2NhbGVkLndpZHRoKCk7
CisgICAgdWludDhfdCogZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkZXN0
RGF0YSkgKyBkZXN0UmVjdC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0
OworCisgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAgIHVp
bnQ4X3QqIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzcmNEYXRhKSArIHNy
Y1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICog
NDsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCwgcGl4ZWxGb3JtYXQoKSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3Ms
CisgICAgICAgIG91dHB1dEZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBkZXN0Qnl0ZXNQZXJS
b3csIGRlc3RSb3dzLCBkZXN0UmVjdC5zaXplKCkpOworfQorCiB2b2lkIEltYWdlQnVmZmVyQmFj
a2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQsIHZv
aWQqIGRhdGEpCiB7CiAgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gdG9CYWNrZW5kQ29vcmRp
bmF0ZXMoc3JjUmVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCmluZGV4IDRmNWViYWY5OWE4OC4uY2YwM2UxNDQ0Nzdi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ckJhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlckJhY2tlbmQuaApAQCAtMTE3LDYgKzExNyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFZl
Y3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCBSZWZQ
dHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvcHlJ
bWFnZURhdGEodm9pZCogYnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCwgY29uc3QgSW50UmVjdCYpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcHV0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgPSAwOwogCiAgICAgdmlydHVhbCBQbGF0Zm9y
bUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQpAQCAtMTYy
LDYgKzE2Myw3IEBAIHByb3RlY3RlZDoKICAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8dWludDhf
dD4gdG9CR1JBRGF0YSh2b2lkKiBkYXRhKSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIFJl
ZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgdm9pZCogZGF0YSkgY29uc3Q7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBjb3B5SW1hZ2VEYXRhKHZvaWQqIGRlc3REYXRhLCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgdm9p
ZCogc3JjRGF0YSkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0LCB2b2lkKiBkYXRhKTsKIAogICAgIFBhcmFtZXRlcnMg
bV9wYXJhbWV0ZXJzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2Vu
ZC5jcHAKaW5kZXggMGI3M2YxNGJhNzAwLi43ZjQzYzJiMzQ5YTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNl
QmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMTI1LDYgKzEyNSwxMSBAQCBS
ZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpYwogICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6Omdl
dEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X2RhdGEobV9zdXJmYWNlLmdldCgpKSk7CiB9CiAKK1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVm
ZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y29weUltYWdlRGF0YSh2b2lkKiBidWZmZXIsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBj
b25zdAoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlJbWFnZURhdGEoYnVm
ZmVyLCBvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEo
bV9zdXJmYWNlLmdldCgpKSk7Cit9CisKIHZvaWQgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNr
ZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29u
c3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IElu
dFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKIHsK
ICAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VE
YXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2RhdGEobV9zdXJmYWNlLmdldCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZC5jcHAKaW5kZXggOWQ1MzhiZWZjZDhlLi43ODRlYjU1ZDMyOTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5k
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZC5jcHAKQEAgLTEzNyw2ICsxMzcsMTEgQEAgUmVmUHRyPEltYWdlRGF0
YT4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW8KICAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0
cHV0Rm9ybWF0LCBzcmNSZWN0LCBtX2RhdGEpOwogfQogCit2b2lkIEltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kOjpjb3B5SW1hZ2VEYXRhKHZvaWQqIGJ1ZmZlciwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0Cit7CisgICAg
cmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Y29weUltYWdlRGF0YShidWZmZXIsIG91dHB1dEZv
cm1hdCwgc3JjUmVjdCwgbV9kYXRhKTsKK30KKwogdm9pZCBJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCiB7
CiAgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdl
RGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0LCBtX2RhdGEpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kLmgKaW5kZXggOGYzMzIzZTdkY2VjLi5kMGMyMDc3ODljOWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaApAQCAtNDksNiArNDksNyBAQCBwdWJsaWM6
CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKIAogICAg
IFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91
dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgY29w
eUltYWdlRGF0YSh2b2lkKiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNv
bnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRlOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzT3JpZ2luQXRVcHBlckxlZnRDb3JuZXIgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZC5jcHAKaW5kZXggNmMzYjdjNzRiNDZlLi4wOTgzYjFmOWQxM2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMTgzLDYgKzE4MywxMiBAQCBS
ZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aQogICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6Omdl
dEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGxvY2suc3VyZmFjZUJhc2VBZGRyZXNz
KCkpOwogfQogCit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29weUltYWdlRGF0
YSh2b2lkKiBidWZmZXIsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25z
dCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAoreworICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2so
Km1fc3VyZmFjZSk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Y29weUltYWdlRGF0
YShidWZmZXIsIG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbG9jay5zdXJmYWNlQmFzZUFkZHJlc3Mo
KSk7Cit9CisKIHZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpwdXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFn
ZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQs
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKIHsKICAgICBJT1N1cmZhY2U6Okxv
Y2tlciBsb2NrKCptX3N1cmZhY2UsIElPU3VyZmFjZTo6TG9ja2VyOjpBY2Nlc3NNb2RlOjpSZWFk
V3JpdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAppbmRleCA0ODU5ZGY2ZmM1
MjUuLmEyNjZkMTU0OGU5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKQEAg
LTYyLDYgKzYyLDcgQEAgcHVibGljOgogICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBv
dmVycmlkZTsKKyAgICB2b2lkIGNvcHlJbWFnZURhdGEodm9pZCosIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
dm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29u
c3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKICAg
ICBJT1N1cmZhY2UqIHN1cmZhY2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKaW5kZXgg
ZDE1M2RmYTQ1YzIxLi41ZmE3MWNlYzUwY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcApA
QCAtMjg3LDYgKzI4Nyw4IEBAIHZvaWQgRGlzcGxheUxpc3Q6OmFwcGVuZChJdGVtSGFuZGxlIGl0
ZW0pCiAgICAgICAgIHJldHVybiBhcHBlbmQ8TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbklt
YWdlQnVmZmVyPihpdGVtLmdldDxNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZm
ZXI+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjoK
ICAgICAgICAgcmV0dXJuIGFwcGVuZDxNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXI+KGl0ZW0u
Z2V0PE1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcj4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6
R2V0SW1hZ2VEYXRhOgorICAgICAgICByZXR1cm4gYXBwZW5kPEdldEltYWdlRGF0YT4oaXRlbS5n
ZXQ8R2V0SW1hZ2VEYXRhPigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6CiAg
ICAgICAgIHJldHVybiBhcHBlbmQ8UHV0SW1hZ2VEYXRhPihpdGVtLmdldDxQdXRJbWFnZURhdGE+
KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1CdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKaW5kZXggNTBjOGQ4Zjc1NzdhLi4yN2Q4
YjNhNmM5MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3Bw
CkBAIC0yMjgsNiArMjI4LDggQEAgdm9pZCBJdGVtSGFuZGxlOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpCiAgICAgY2FzZSBJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5h
dGlvbkltYWdlQnVmZmVyOgogICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRl
bUJ1ZmZlcjoKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSXRlbVR5cGU6OkdldEltYWdlRGF0
YToKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YTogewog
ICAgICAgICBnZXQ8UHV0SW1hZ2VEYXRhPigpLmFwcGx5KGNvbnRleHQpOwogICAgICAgICByZXR1
cm47CkBAIC00NjIsNiArNDY0LDEwIEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAg
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPE1ldGFDb21t
YW5kQ2hhbmdlSXRlbUJ1ZmZlcj46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAg
ICBjYXNlIEl0ZW1UeXBlOjpHZXRJbWFnZURhdGE6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8R2V0SW1hZ2VEYXRhPjo6dmFsdWUpOworICAg
ICAgICByZXR1cm47CisgICAgfQogICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRp
YTogewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJs
ZTxQYWludEZyYW1lRm9yTWVkaWE+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTY1MCw2
ICs2NTYsOCBAQCBib29sIEl0ZW1IYW5kbGU6OnNhZmVDb3B5KEl0ZW1IYW5kbGUgZGVzdGluYXRp
b24pIGNvbnN0CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxNZXRhQ29tbWFuZENoYW5nZURlc3Rp
bmF0aW9uSW1hZ2VCdWZmZXI+KCp0aGlzLCBpdGVtT2Zmc2V0KTsKICAgICBjYXNlIEl0ZW1UeXBl
OjpNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXI6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxN
ZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXI+KCp0aGlzLCBpdGVtT2Zmc2V0KTsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpHZXRJbWFnZURhdGE6CisgICAgICAgIHJldHVybiBjb3B5SW50bzxHZXRJbWFn
ZURhdGE+KCp0aGlzLCBpdGVtT2Zmc2V0KTsKICAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1l
Rm9yTWVkaWE6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxQYWludEZyYW1lRm9yTWVkaWE+KCp0
aGlzLCBpdGVtT2Zmc2V0KTsKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbVR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCmluZGV4IGMwYzczYjgzYmQ1Mi4uZGUxOTA2
ODg4OTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCkBAIC0x
MzAsNiArMTMwLDggQEAgc3RhdGljIHNpemVfdCBzaXplT2ZJdGVtSW5CeXRlcyhJdGVtVHlwZSB0
eXBlKQogICAgICAgICByZXR1cm4gc2l6ZW9mKE1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25J
bWFnZUJ1ZmZlcik7CiAgICAgY2FzZSBJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVm
ZmVyOgogICAgICAgICByZXR1cm4gc2l6ZW9mKE1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcik7
CisgICAgY2FzZSBJdGVtVHlwZTo6R2V0SW1hZ2VEYXRhOgorICAgICAgICByZXR1cm4gc2l6ZW9m
KEdldEltYWdlRGF0YSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgogICAgICAg
ICByZXR1cm4gc2l6ZW9mKFB1dEltYWdlRGF0YSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRG
cmFtZUZvck1lZGlhOgpAQCAtMTg0LDYgKzE4Niw3IEBAIGJvb2wgaXNEcmF3aW5nSXRlbShJdGVt
VHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OkZsdXNoQ29udGV4dDoKICAgICBjYXNlIEl0
ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXI6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyOgorICAgIGNhc2UgSXRlbVR5
cGU6OkdldEltYWdlRGF0YToKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgogICAgIGNhc2Ug
SXRlbVR5cGU6OlJvdGF0ZToKICAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOgpAQCAtMjk2LDYgKzI5
OSw3IEBAIGJvb2wgaXNJbmxpbmVJdGVtKEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlw
ZTo6Rmx1c2hDb250ZXh0OgogICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlRGVz
dGluYXRpb25JbWFnZUJ1ZmZlcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5n
ZUl0ZW1CdWZmZXI6CisgICAgY2FzZSBJdGVtVHlwZTo6R2V0SW1hZ2VEYXRhOgogICAgIGNhc2Ug
SXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3Jl
OgogICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtVHlwZS5oCmluZGV4IDBlOTQ3YTA2ZGFiNS4uMjg5Yzc5ZTgxOWFiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtVHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmgKQEAgLTc4LDYgKzc4LDcgQEAgZW51bSBjbGFzcyBJ
dGVtVHlwZSA6IHVpbnQ4X3QgewogICAgIEZsdXNoQ29udGV4dCwKICAgICBNZXRhQ29tbWFuZENo
YW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXIsCiAgICAgTWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVm
ZmVyLAorICAgIEdldEltYWdlRGF0YSwKICAgICBQdXRJbWFnZURhdGEsCiAgICAgUGFpbnRGcmFt
ZUZvck1lZGlhLAogICAgIFN0cm9rZVJlY3QsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
cy5jcHAKaW5kZXggMjEzZGI5YzhjZjQyLi44M2RiNmMxNDU0Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1z
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RJdGVtcy5jcHAKQEAgLTc3Myw2ICs3NzMsMTMgQEAgc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxFbGxpcHNlJiBpdGVtKQog
ICAgIHJldHVybiB0czsKIH0KIAorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IEdldEltYWdlRGF0YSYgaXRlbSkKK3sKKyAgICB0cy5kdW1wUHJvcGVy
dHkoIm91dHB1dEZvcm1hdCIsIGl0ZW0ub3V0cHV0Rm9ybWF0KCkpOworICAgIHRzLmR1bXBQcm9w
ZXJ0eSgic3JjUmVjdCIsIGl0ZW0uc3JjUmVjdCgpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKIFB1
dEltYWdlRGF0YTo6UHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3Jt
YXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3Jt
YXQpCiAgICAgOiBtX3NyY1JlY3Qoc3JjUmVjdCkKICAgICAsIG1fZGVzdFBvaW50KGRlc3RQb2lu
dCkKQEAgLTEwNjQsNiArMTA3MSw3IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OkZsdXNoQ29u
dGV4dDogdHMgPDwgImZsdXNoLWNvbnRleHQiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpN
ZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXI6IHRzIDw8ICJtZXRhLWNvbW1h
bmQtY2hhbmdlLWRlc3RpbmF0aW9uLWltYWdlLWJ1ZmZlciI7IGJyZWFrOwogICAgIGNhc2UgSXRl
bVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjogdHMgPDwgIm1ldGEtY29tbWFuZC1j
aGFuZ2UtaXRlbS1idWZmZXIiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpHZXRJbWFnZURh
dGE6IHRzIDw8ICJnZXQtaW1hZ2UtZGF0YSI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlB1
dEltYWdlRGF0YTogdHMgPDwgInB1dC1pbWFnZS1kYXRhIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVt
VHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOiB0cyA8PCAicGFpbnQtZnJhbWUtZm9yLW1lZGlhIjsg
YnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDogdHMgPDwgInN0cm9rZS1yZWN0
IjsgYnJlYWs7CkBAIC0xMjI1LDYgKzEyMzMsOSBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBJdGVtSGFuZGxlIGl0ZW0pCiAgICAgY2FzZSBJdGVtVHlwZTo6TWV0YUNv
bW1hbmRDaGFuZ2VJdGVtQnVmZmVyOgogICAgICAgICB0cyA8PCBpdGVtLmdldDxNZXRhQ29tbWFu
ZENoYW5nZUl0ZW1CdWZmZXI+KCk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6
OkdldEltYWdlRGF0YToKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8R2V0SW1hZ2VEYXRhPigpOwor
ICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6CiAgICAgICAg
IHRzIDw8IGl0ZW0uZ2V0PFB1dEltYWdlRGF0YT4oKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAppbmRleCAxZTAzZGU3NjQ5MzUuLjRkYWQ3Yzk0MDI2MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0SXRlbXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCkBAIC0xOTIyLDYgKzE5MjIsMjYgQEAg
cHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsKIAorY2xhc3MgR2V0SW1hZ2VEYXRh
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRl
bVR5cGU6OkdldEltYWdlRGF0YTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJ
dGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZh
bHNlOworCisgICAgR2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9y
bWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KQorICAgICAgICA6IG1fb3V0cHV0Rm9ybWF0KG91
dHB1dEZvcm1hdCkKKyAgICAgICAgLCBtX3NyY1JlY3Qoc3JjUmVjdCkKKyAgICB7CisgICAgfQor
CisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQoKSBjb25zdCB7IHJldHVy
biBtX291dHB1dEZvcm1hdDsgfQorICAgIGNvbnN0IEludFJlY3QmIHNyY1JlY3QoKSBjb25zdCB7
IHJldHVybiBtX3NyY1JlY3Q7IH0KKworcHJpdmF0ZToKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG1fb3V0cHV0Rm9ybWF0OworICAgIEludFJlY3QgbV9zcmNSZWN0OworfTsKKwogY2xhc3Mg
UHV0SW1hZ2VEYXRhIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0
ZW1UeXBlID0gSXRlbVR5cGU6OlB1dEltYWdlRGF0YTsKQEAgLTIzNDMsNiArMjM2Myw3IEBAIHRl
bXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
PiB7CiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGbHVzaENvbnRleHQsCiAg
ICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZURlc3Rp
bmF0aW9uSW1hZ2VCdWZmZXIsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpN
ZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXIsCisgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpHZXRJbWFnZURhdGEsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpQdXRJbWFnZURhdGEsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpQYWlu
dEZyYW1lRm9yTWVkaWEsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTdHJv
a2VSZWN0LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IGVk
YTBiNTU5ODM1ZS4uZWQ3NDYwMzM2ZGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVjb3JkZXIuY3BwCkBAIC01NSw2ICs1NSwxMSBAQCBSZWNvcmRlcjo6flJlY29yZGVyKCkKICAg
ICBMT0coRGlzcGxheUxpc3RzLCAiUmVjb3JkZWQgZGlzcGxheSBsaXN0OlxuJXMiLCBtX2Rpc3Bs
YXlMaXN0LmRlc2NyaXB0aW9uKCkuZGF0YSgpKTsKIH0KIAordm9pZCBSZWNvcmRlcjo6Z2V0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0KQoreworICAgIGFwcGVuZDxHZXRJbWFnZURhdGE+KG91dHB1dEZvcm1hdCwg
c291cmNlUmVjdCk7Cit9CisKIHZvaWQgUmVjb3JkZXI6OnB1dEltYWdlRGF0YShXZWJDb3JlOjpB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbWFnZURh
dGEmIGltYWdlRGF0YSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBkZXN0Rm9ybWF0KQogewogICAgIGFwcGVuZDxQdXRJbWFnZURhdGE+KGlucHV0Rm9ybWF0LCBp
bWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAppbmRleCA4OWE5OTA4NmFhZDEuLmMyOThlNzk5MTYyYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCkBAIC01Nyw2ICs1Nyw3IEBA
IHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmLCBE
aXNwbGF5TGlzdCYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgY29uc3QgRmxvYXRSZWN0
JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgRGVsZWdhdGUqID0gbnVsbHB0
ciwgRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24gPSBEcmF3R2x5
cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbjo6RGVjb25zdHJ1Y3QpOwogICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflJlY29yZGVyKCk7CiAKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwg
Y29uc3QgSW50UmVjdCYgc291cmNlUmVjdCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VE
YXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsKIAogICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUxpc3QuaXNFbXB0eSgpOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kLmNwcAppbmRleCAwMWQyZTc4MDI4NWIuLmM0MDAyOTliZjhiOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCkBAIC0zMTUsNyArMzE1LDcg
QEAgVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0JHUkFEYXRh
KCkgY29uc3QKIFJlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpn
ZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0
LCBudWxscHRyKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEo
b3V0cHV0Rm9ybWF0LCBzcmNSZWN0KTsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VC
dWZmZXIuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1
ZmZlci5oCmluZGV4IDE2MmQyZWY5MGU1ZC4uODQ5NzAyNzhmNGI0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaAorKysgYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaApAQCAt
ODEsNiArODEsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAKKyAgICAgICAgaWYgKGl0ZW0uaXM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkdldEltYWdl
RGF0YT4oKSkgeworICAgICAgICAgICAgYXV0byBnZXRJbWFnZURhdGFJdGVtID0gaXRlbS5nZXQ8
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkdldEltYWdlRGF0YT4oKTsKKworICAgICAgICAgICAgLy8g
RklYTUU6IENoZWNrIHRoZSBzaXplLgorICAgICAgICAgICAgQmFzZUNvbmNyZXRlSW1hZ2VCdWZm
ZXI6OmNvcHlJbWFnZURhdGEobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmltYWdlRGF0YUJ1ZmZl
cigpLCBnZXRJbWFnZURhdGFJdGVtLm91dHB1dEZvcm1hdCgpLCBnZXRJbWFnZURhdGFJdGVtLnNy
Y1JlY3QoKSk7CisgICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuZGlkRmluaXNo
R2V0SW1hZ2VEYXRhKCk7CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisK
ICAgICAgICAgaWYgKGl0ZW0uaXM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Ok1ldGFDb21tYW5kQ2hh
bmdlSXRlbUJ1ZmZlcj4oKSkgewogICAgICAgICAgICAgYXV0byBuZXh0QnVmZmVySWRlbnRpZmll
ciA9IGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpNZXRhQ29tbWFuZENoYW5nZUl0ZW1C
dWZmZXI+KCkuaWRlbnRpZmllcigpOwogICAgICAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLnNldE5leHRJdGVtQnVmZmVyVG9SZWFkKG5leHRCdWZmZXJJZGVudGlmaWVyLCBtX3JlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKaW5kZXggMzJh
ZmQzMTBiZTVjLi5lY2E4ZmNkYjA4OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKQEAgLTIz
MSw3ICsyMzEsNyBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
Om5leHREZXN0aW5hdGlvbkltYWdlQnVmZmVyQWZ0ZXJBcHBseQogCiAgICAgICAgICAgICBoYW5k
bGUuc3RhcnRXYWl0aW5nKCk7CiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAgICAgICBtX3Jl
c3VtZURpc3BsYXlMaXN0U2VtYXBob3JlLT53YWl0Rm9yKDMwX3VzKTsKKyAgICAgICAgICAgIG1f
cmVzdW1lRGlzcGxheUxpc3RTZW1hcGhvcmUtPndhaXRGb3IoMjAwX3VzKTsKICNlbHNlCiAgICAg
ICAgICAgICBzbGVlcCgzMF91cyk7CiAjZW5kaWYKQEAgLTMwMSwxNiArMzAxLDU4IEBAIHZvaWQg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6c2V0TmV4dEl0ZW1CdWZmZXJUb1JlYWQoRGlzcGxheUxp
c3Q6Okl0ZW1CdWZmZXJJZGVuCiAgICAgbV9wZW5kaW5nV2FrZXVwSW5mbyA9IHt7eyBpZGVudGlm
aWVyLCBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6aGVhZGVyU2l6ZSgpLCBkZXN0aW5hdGlvbklk
ZW50aWZpZXIsIEdQVVByb2Nlc3NXYWtldXBSZWFzb246OlVuc3BlY2lmaWVkIH0sIFdURjo6bnVs
bG9wdCB9fTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIEludFJlY3Qgc3JjUmVjdCwgUmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChJUEM6OkltYWdlRGF0YVJlZmVyZW5jZSYmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3Qg
U2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmIGhhbmRsZSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBSZWZQdHI8SW1hZ2VEYXRh
PiBpbWFnZURhdGE7Ci0gICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBtX3JlbW90ZVJlc291cmNl
Q2FjaGUuY2FjaGVkSW1hZ2VCdWZmZXIocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSkKLSAg
ICAgICAgaW1hZ2VEYXRhID0gaW1hZ2VCdWZmZXItPmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQs
IHNyY1JlY3QpOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKElQQzo6SW1hZ2VEYXRhUmVmZXJlbmNl
KFdURk1vdmUoaW1hZ2VEYXRhKSkpOworICAgIENoZWNrZWRJbnQzMiBkYXRhU2l6ZSA9IDQ7Cisg
ICAgZGF0YVNpemUgKj0gc2l6ZS53aWR0aCgpOworICAgIGRhdGFTaXplICo9IHNpemUuaGVpZ2h0
KCk7CisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5OworICAgIGludDMyX3Qg
YnVmZmVyU2l6ZSA9IDA7CisgICAgaWYgKGRhdGFTaXplID4gMCAmJiBkYXRhU2l6ZS5zYWZlR2V0
KGJ1ZmZlclNpemUpID09IENoZWNrZWRTdGF0ZTo6RGlkTm90T3ZlcmZsb3cpCisgICAgICAgIHNo
YXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6YWxsb2NhdGUoYnVmZmVyU2l6ZSk7CisKKyAgICBT
aGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7CisgICAgaWYgKHNoYXJlZE1lbW9yeSkKKyAgICAg
ICAgc2hhcmVkTWVtb3J5LT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3Rl
Y3Rpb246OlJlYWRXcml0ZSk7CisKKyAgICBtX2dldEltYWdlRGF0YUJ1ZmZlciA9IHNoYXJlZE1l
bW9yeTsKKyAgICBtX2dldEltYWdlRGF0YUJ1ZmZlclNpemUgPSBzaGFyZWRNZW1vcnkgPyBzaXpl
IDogSW50U2l6ZSgpOworCisgICAgY29tcGxldGlvbkhhbmRsZXIoU2hhcmVkTWVtb3J5OjpJUENI
YW5kbGUgeyBXVEZNb3ZlKGhhbmRsZSksIHN0YXRpY19jYXN0PHVpbnQ2NF90PihidWZmZXJTaXpl
KSB9KTsKK30KKworI2lmIFBMQVRGT1JNKENPQ09BKQordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpjcmVhdGVTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChXVEY6Ok1hY2hTZW5kUmlnaHQgc2VtYXBob3JlKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sK
KyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmICghbV9nZXRJbWFnZURh
dGFTZW1hcGhvcmUpCisgICAgICAgIG1fZ2V0SW1hZ2VEYXRhU2VtYXBob3JlID0gbWFrZVVuaXF1
ZTxNYWNoU2VtYXBob3JlPigpOworCisgICAgY29tcGxldGlvbkhhbmRsZXIobV9nZXRJbWFnZURh
dGFTZW1hcGhvcmUtPmNyZWF0ZVNlbmRSaWdodCgpKTsKK30KKyNlbmRpZgorCit2b2lkKiBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjppbWFnZURhdGFCdWZmZXIoKQoreworICAgIGlmICghbV9nZXRJ
bWFnZURhdGFCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBtX2dl
dEltYWdlRGF0YUJ1ZmZlci0+ZGF0YSgpOwogfQogCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OmRpZEZpbmlzaEdldEltYWdlRGF0YSgpCit7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAg
QVNTRVJUKG1fZ2V0SW1hZ2VEYXRhU2VtYXBob3JlKTsKKyAgICBtX2dldEltYWdlRGF0YVNlbWFw
aG9yZS0+c2lnbmFsKCk7CisjZWxzZQorICAgIC8vIEZJWE1FOiBOZWVkIGEgZmFsbGJhY2suCisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorIH0KKwogdm9pZCBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpnZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpQcmVzZXJ2ZVJl
c29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFN0cmluZyYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKQEAgLTQ2MCw2ICs1MDIsNyBAQCBPcHRpb25hbDxEaXNwbGF5TGlzdDo6
SXRlbUhhbmRsZT4gV0FSTl9VTlVTRURfUkVUVVJOIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRl
YwogICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGbHVzaENvbnRleHQ6CiAgICAgY2Fz
ZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFn
ZUJ1ZmZlcjoKICAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFu
Z2VJdGVtQnVmZmVyOgorICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpHZXRJbWFnZURh
dGE6CiAgICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToK
ICAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UmVzdG9yZToKICAgICBjYXNlIERpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6Um90YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKaW5kZXggZTYzODk5
MDNiNjUwLi4zNWVmMmZlMDliMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtODUsNiArODUs
OSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRpc2Nvbm5lY3QoKTsKIAorICAgIHZvaWQqIGltYWdl
RGF0YUJ1ZmZlcigpOworICAgIHZvaWQgZGlkRmluaXNoR2V0SW1hZ2VEYXRhKCk7CisKIHByaXZh
dGU6CiAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZChHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
JiwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVycyYmKTsKIApAQCAtMTE2
LDcgKzExOSwxMCBAQCBwcml2YXRlOgogICAgIC8vIE1lc3NhZ2VzIHRvIGJlIHJlY2VpdmVkLgog
ICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dp
Y2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBX
ZWJDb3JlOjpDb2xvclNwYWNlLCBXZWJDb3JlOjpQaXhlbEZvcm1hdCwgV2ViQ29yZTo6UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lkIHdha2VVcEFuZEFwcGx5RGlzcGxheUxp
c3QoY29uc3QgR1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHMmKTsKLSAgICB2b2lkIGdl
dEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwg
V2ViQ29yZTo6SW50UmVjdCBzcmNSZWN0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSVBDOjpJbWFnZURhdGFSZWZlcmVuY2UmJik+
JiYpOworICAgIHZvaWQgZ2V0SW1hZ2VEYXRhKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJik+JiYpOwor
I2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHZvaWQgY3JlYXRlU2VtYXBob3JlRm9yR2V0SW1hZ2VE
YXRhKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV1RGOjpNYWNoU2VuZFJpZ2h0KT4mJik7CisjZW5k
aWYKICAgICB2b2lkIGdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlv
biwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFN0cmluZyYmKT4mJik7CiAgICAgdm9pZCBnZXREYXRhRm9ySW1hZ2VCdWZmZXIoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9y
PHVpbnQ4X3Q+JiYpPiYmKTsKICAgICB2b2lkIGdldEJHUkFEYXRhRm9ySW1hZ2VCdWZmZXIoV2Vi
Q29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFZlY3Rvcjx1aW50OF90PiYmKT4mJik7CkBAIC0xNTAsNyArMTU2LDEwIEBAIHByaXZhdGU6CiAg
ICAgT3B0aW9uYWw8UGVuZGluZ1dha2V1cEluZm9ybWF0aW9uPiBtX3BlbmRpbmdXYWtldXBJbmZv
OwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxXVEY6Ok1hY2hTZW1h
cGhvcmU+IG1fcmVzdW1lRGlzcGxheUxpc3RTZW1hcGhvcmU7CisgICAgc3RkOjp1bmlxdWVfcHRy
PFdURjo6TWFjaFNlbWFwaG9yZT4gbV9nZXRJbWFnZURhdGFTZW1hcGhvcmU7CiAjZW5kaWYKKyAg
ICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBtX2dldEltYWdlRGF0YUJ1ZmZlcjsKKyAgICBXZWJDb3Jl
OjpJbnRTaXplIG1fZ2V0SW1hZ2VEYXRhQnVmZmVyU2l6ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgppbmRleCA3ZDY1
Y2U5MDljNTguLjg2NGIxY2NjOTQ2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KKysrIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVz
c2FnZXMuaW4KQEAgLTI1LDcgKzI1LDEyIEBACiBtZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kIHsKICAgICBDcmVhdGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpGbG9hdFNpemUgbG9naWNh
bFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGVudW06dWludDhfdCBX
ZWJDb3JlOjpQaXhlbEZvcm1hdCBwaXhlbEZvcm1hdCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKICAgICBXYWtlVXBBbmRB
cHBseURpc3BsYXlMaXN0KHN0cnVjdCBXZWJLaXQ6OkdQVVByb2Nlc3NXYWtldXBNZXNzYWdlQXJn
dW1lbnRzIGFyZ3VtZW50cykKLSAgICBHZXRJbWFnZURhdGEoZW51bTp1aW50OF90IFdlYkNvcmU6
OkFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBXZWJDb3JlOjpJbnRSZWN0IHNy
Y1JlY3QsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIpIC0+IChJUEM6OkltYWdlRGF0YVJlZmVyZW5jZSBpbWFnZURhdGEpIFN5
bmNocm9ub3VzCisKKyAgICBHZXRJbWFnZURhdGEoV2ViQ29yZTo6SW50U2l6ZSBzaXplKSAtPiAo
V2ViS2l0OjpTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGUpIFN5bmNocm9ub3VzCisjaWYg
UExBVEZPUk0oQ09DT0EpCisgICAgQ3JlYXRlU2VtYXBob3JlRm9yR2V0SW1hZ2VEYXRhKCkgLT4g
KE1hY2hTZW5kUmlnaHQgc2VtYXBob3JlKSBTeW5jaHJvbm91cworI2VuZGlmCisKICAgICBHZXRE
YXRhVVJMRm9ySW1hZ2VCdWZmZXIoU3RyaW5nIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHksIGVudW06dWludDhfdCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVS
ZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoU3RyaW5nIHVybFN0cmluZykgU3luY2hyb25vdXMKICAg
ICBHZXREYXRhRm9ySW1hZ2VCdWZmZXIoU3RyaW5nIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHksIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpIC0+IChWZWN0b3I8dWludDhfdD4gZGF0YSkgU3luY2hyb25vdXMK
ICAgICBHZXRCR1JBRGF0YUZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIC0+IChWZWN0b3I8dWludDhf
dD4gZGF0YSkgU3luY2hyb25vdXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVC
aXRtYXBCYWNrZW5kLmNwcAppbmRleCAxZDdhZjZiYjhjNTcuLjIxNWZkMmQxMWUzNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNo
YXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcApAQCAtMTIz
LDYgKzEyMywxMSBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1h
cEJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcAogICAgIHJldHVybiBJbWFnZUJ1
ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIG1fYml0bWFw
LT5kYXRhKCkpOwogfQogCit2b2lkIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6
Y29weUltYWdlRGF0YSh2b2lkKiBidWZmZXIsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0
Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAoreworICAgIHJldHVybiBJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OmNvcHlJbWFnZURhdGEoYnVmZmVyLCBvdXRwdXRGb3JtYXQsIHNyY1Jl
Y3QsIG1fYml0bWFwLT5kYXRhKCkpOworfQorCiB2b2lkIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0
bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3Jt
YXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGRlc3RGb3JtYXQpCiB7CiAgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoaW5w
dXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0LCBtX2Jp
dG1hcC0+ZGF0YSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFj
a2VuZC5oCmluZGV4IDU1NTA2YTQ5ZDAzZS4uNGI5ZGQ2NjNiMGU0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0
bWFwQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmgKQEAgLTU5LDYgKzU5LDcgQEAgcHVi
bGljOgogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsK
ICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGNvcHlJbWFnZURhdGEodm9pZCogYnVmZmVyLCBX
ZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgcHV0SW1hZ2VEYXRhKFdlYkNv
cmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6Oklt
YWdlRGF0YSYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVz
dEZvcm1hdCkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5o
CmluZGV4IGQ3YjkwYjU3MmRhNS4uNWZjMGY4MTk2NzcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVy
UHJveHkuaApAQCAtMTQ2LDcgKzE0NiwyMyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGlmIChVTkxJ
S0VMWSghbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpKQogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICAgICAgcmV0dXJuIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LT5nZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBtX3JlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcik7CisgICAgICAgIGF1dG8gc2hhcmVkTWVtb3J5ID0gbV9yZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHktPnNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YShzcmNSZWN0LnNpemUo
KSk7CisgICAgICAgIGlmICghc2hhcmVkTWVtb3J5KQorICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICAgICAgYXV0byYgbXV0YWJsZVRoaXMgPSBjb25zdF9jYXN0PFJlbW90ZUltYWdl
QnVmZmVyUHJveHkmPigqdGhpcyk7CisgICAgICAgIG11dGFibGVUaGlzLm1fZHJhd2luZ0NvbnRl
eHQucmVjb3JkZXIoKS5nZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0KTsKKyAgICAg
ICAgbXV0YWJsZVRoaXMuZmx1c2hEcmF3aW5nQ29udGV4dEFzeW5jKCk7CisKKyAgICAgICAgYXV0
byBpbWFnZURhdGEgPSBXZWJDb3JlOjpJbWFnZURhdGE6OmNyZWF0ZShzcmNSZWN0LnNpemUoKSk7
CisgICAgICAgIHNpemVfdCBpbWFnZVNpemVJbkJ5dGVzID0gaW1hZ2VEYXRhLT5kYXRhKCktPmJ5
dGVMZW5ndGgoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW1hZ2VTaXplSW5CeXRlcyA8PSBz
aGFyZWRNZW1vcnktPnNpemUoKSk7CisKKyAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHktPndhaXRGb3JJbWFnZURhdGEoKTsKKyAKKyAgICAgICAgbWVtY3B5KGltYWdlRGF0YS0+
ZGF0YSgpLT5kYXRhKCksIHNoYXJlZE1lbW9yeS0+ZGF0YSgpLCBpbWFnZVNpemVJbkJ5dGVzKTsK
KworICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOwogICAgIH0KIAogICAgIFN0cmluZyB0b0RhdGFV
UkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJD
b3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlk
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCmluZGV4IDYxYjRjODI0
OTU3Ni4uZTg2YWE3MmRmNWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkuY3BwCkBAIC0xNDksMTUgKzE0OSw0MSBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaQogICAg
IHJldHVybiBudWxscHRyOwogfQogCi1SZWZQdHI8SW1hZ2VEYXRhPiBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZv
cm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKK1JlZlB0cjxTaGFyZWRNZW1vcnk+IFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6c2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhKGNvbnN0
IEludFNpemUmIGRlc2lyZWRTaXplKQogewotICAgIHNlbmREZWZlcnJlZFdha2V1cE1lc3NhZ2VJ
Zk5lZWRlZCgpOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGlmIChVTkxJS0VMWSghbV9pbWFn
ZURhdGFTZW1hcGhvcmUpKSB7CisgICAgICAgIFdURjo6TWFjaFNlbmRSaWdodCBzZW1hcGhvcmU7
CisgICAgICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpDcmVh
dGVTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEoKSwKKyAgICAgICAgICAgIE1lc3NhZ2VzOjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpDcmVhdGVTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGE6OlJlcGx5
KHNlbWFwaG9yZSksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIsIDFfcyk7CisgICAgICAg
IG1faW1hZ2VEYXRhU2VtYXBob3JlID0gbWFrZVVuaXF1ZTxNYWNoU2VtYXBob3JlPihXVEZNb3Zl
KHNlbWFwaG9yZSkpOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKG1faW1hZ2VEYXRhQnVmZmVy
U2l6ZS53aWR0aCgpID49IGRlc2lyZWRTaXplLndpZHRoKCkgJiYgbV9pbWFnZURhdGFCdWZmZXJT
aXplLmhlaWdodCgpID49IGRlc2lyZWRTaXplLmhlaWdodCgpKQorICAgICAgICByZXR1cm4gbV9p
bWFnZURhdGFCdWZmZXI7CisKKyAgICBJbnRTaXplIG5ld1NpemUgPSBtX2ltYWdlRGF0YUJ1ZmZl
clNpemUuZXhwYW5kZWRUbyhkZXNpcmVkU2l6ZSk7CisgICAgU2hhcmVkTWVtb3J5OjpJUENIYW5k
bGUgaGFuZGxlOworICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjpHZXRJbWFnZURhdGEobmV3U2l6ZSksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjpHZXRJbWFnZURhdGE6OlJlcGx5KGhhbmRsZSksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIsIDFfcyk7CisKKyAgICBtX2ltYWdlRGF0YUJ1ZmZlciA9IFNoYXJlZE1lbW9yeTo6bWFwKGhh
bmRsZS5oYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZFdyaXRlKTsKKyAgICBt
X2ltYWdlRGF0YUJ1ZmZlclNpemUgPSBuZXdTaXplOwogCi0gICAgSVBDOjpJbWFnZURhdGFSZWZl
cmVuY2UgaW1hZ2VEYXRhUmVmZXJlbmNlOwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpHZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCByZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6R2V0SW1hZ2VEYXRhOjpSZXBseShpbWFnZURhdGFSZWZlcmVuY2UpLCBtX3JlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyLCAxX3MpOwotICAgIHJldHVybiBpbWFnZURhdGFSZWZlcmVuY2UuYnVm
ZmVyKCk7CisgICAgcmV0dXJuIG1faW1hZ2VEYXRhQnVmZmVyOwogfQogCit2b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6d2FpdEZvckltYWdlRGF0YSgpCit7CisjaWYgUExBVEZPUk0o
Q09DT0EpCisgICAgbV9pbWFnZURhdGFTZW1hcGhvcmUtPndhaXRGb3IoNV9zKTsKKyNlbHNlCisg
ICAgLy8gRklYTUU6IE5lZWQgYSBmYWxsYmFjay4KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworI2VuZGlmCit9CisKKwogU3RyaW5nIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6Z2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlv
biwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cikKIHsKICAgICBzZW5kRGVmZXJyZWRXYWtldXBNZXNzYWdlSWZOZWVkZWQoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCmluZGV4IDQ4ZmEwNjlkYWE4ZC4uOGFlODZkYTgx
NTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKQEAgLTg0LDcgKzg0
LDggQEAgcHVibGljOgogCiAgICAgLy8gTWVzc2FnZXMgdG8gYmUgc2VudC4KICAgICBSZWZQdHI8
V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZs
b2F0U2l6ZSYsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
V2ViQ29yZTo6Q29sb3JTcGFjZSwgV2ViQ29yZTo6UGl4ZWxGb3JtYXQpOwotICAgIFJlZlB0cjxX
ZWJDb3JlOjpJbWFnZURhdGE+IGdldEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgV2Vi
Q29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICBSZWZQdHI8U2hhcmVkTWVt
b3J5PiBzaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYp
OworICAgIHZvaWQgd2FpdEZvckltYWdlRGF0YSgpOwogICAgIFN0cmluZyBnZXREYXRhVVJMRm9y
SW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5LCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24sIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcik7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGdldERhdGFGb3JJbWFnZUJ1ZmZl
cihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGdl
dEJHUkFEYXRhRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKTsKQEAgLTEyOCw2ICsxMjksMTEgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3JlbWFp
bmluZ0l0ZW1zVG9BcHBlbmRCZWZvcmVTZW5kaW5nV2FrZXVwIHsgMCB9OwogI2lmIFBMQVRGT1JN
KENPQ09BKQogICAgIE1hY2hTZW1hcGhvcmUgbV9yZXN1bWVEaXNwbGF5TGlzdFNlbWFwaG9yZTsK
KyNlbmRpZgorICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IG1faW1hZ2VEYXRhQnVmZmVyOworICAg
IFdlYkNvcmU6OkludFNpemUgbV9pbWFnZURhdGFCdWZmZXJTaXplOworI2lmIFBMQVRGT1JNKENP
Q09BKQorICAgIHN0ZDo6dW5pcXVlX3B0cjxNYWNoU2VtYXBob3JlPiBtX2ltYWdlRGF0YVNlbWFw
aG9yZTsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1
ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwCmluZGV4IDU3YzdmN2Q1YTI0NS4uNjM1
ZjAxNmRjOTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNo
YXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0xMDQsNiArMTA0LDExIEBAIFJlZlB0cjxJ
bWFnZURhdGE+IEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsCiAgICAgcmV0dXJuIHsgfTsKIH0KIAordm9pZCBJbWFnZUJ1ZmZlclNo
YXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OmNvcHlJbWFnZURhdGEodm9pZCosIEFscGhhUHJlbXVs
dGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKIHZvaWQgSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VC
YWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW1hZ2VE
YXRhJiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50JiwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNo
YXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmgKaW5k
ZXggZDVlMDBlNDIwOThhLi5iNDI1MDk3YWY5MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZh
Y2VCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9j
b2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaApAQCAtNTcsNiArNTcs
NyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZl
Y3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgUmVmUHRyPFdl
YkNvcmU6OkltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGlj
YXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdm9pZCBjb3B5SW1hZ2VEYXRhKHZvaWQqIGJ1ZmZlciwgV2ViQ29yZTo6QWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBj
b25zdCBvdmVycmlkZTsKICAgICB2b2lkIHB1dEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbWFnZURhdGEmLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVz
dFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJy
aWRlOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzT3JpZ2luQXRVcHBlckxlZnRDb3Ju
ZXIgPSB0cnVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>422797</attachid>
            <date>2021-03-09 21:26:09 -0800</date>
            <delta_ts>2021-03-09 21:26:09 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>wip220649b.patch</filename>
            <type>text/plain</type>
            <size>38712</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1h
Z2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1h
Z2VCdWZmZXIuaAppbmRleCAzNDliNDVhZTlkOGYuLjQ5NzhkZWZlNzk5YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIu
aApAQCAtMjM5LDYgKzIzOSwxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAorICAgIHZvaWQgY29weUltYWdlRGF0YSh2b2lkKiBidWZmZXIsIEFscGhhUHJl
bXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25z
dCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNr
ZW5kQ3JlYXRlZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PENvbmNyZXRlSW1hZ2VCdWZm
ZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+
Y29weUltYWdlRGF0YShidWZmZXIsIG91dHB1dEZvcm1hdCwgc3JjUmVjdCk7CisgICAgICAgIH0K
KyAgICB9CisKICAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlu
cHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCA9IHsgfSwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBkZXN0Rm9ybWF0ID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkg
b3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2Vu
ZENyZWF0ZWQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmgKaW5kZXggNzVjYzc5N2I1MmNmLi5jMjk1ZDAxMjdjNzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaApAQCAtMTI4LDYgKzEyOCw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29u
c3QgPSAwOwogCiAgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29weUltYWdlRGF0YSh2b2lkKiwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNv
bnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0sIEFscGhhUHJlbXVsdGlwbGljYXRp
b24gZGVzdEZvcm1hdCA9IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpID0g
MDsKIAogICAgIC8vIEZJWE1FOiBjdXJyZW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIG1ldGhv
ZCBoYXZlIHRoZSByZXN0cmljdGlvbiB0aGF0IHRoZXkgb25seSB3b3JrCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcApp
bmRleCA5Mzk0ZTdiZmY0MjkuLjRkYTM3NTVhYjUwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCkBAIC0yNTks
NiArMjU5LDMyIEBAIFJlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0CiAgICAgcmV0dXJuIGltYWdlRGF0
YTsKIH0KIAordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlJbWFnZURhdGEodm9pZCogZGVz
dERhdGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCB2b2lkKiBzcmNEYXRhKSBjb25zdAoreworICAgIEludFJlY3Qgc3JjUmVjdFNj
YWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKHNyY1JlY3QpOworICAgIGlmIChzcmNSZWN0U2Nh
bGVkLndpZHRoKCkgIT0gc3JjUmVjdC53aWR0aCgpIHx8IHNyY1JlY3RTY2FsZWQuaGVpZ2h0KCkg
IT0gc3JjUmVjdC5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UmVjdCBzcmNS
ZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbihiYWNrZW5kUmVjdCgpLCBzcmNSZWN0U2NhbGVkKTsK
KyAgICBJbnRSZWN0IGRlc3RSZWN0ID0geyBJbnRQb2ludDo6emVybygpLCBzcmNSZWN0Q2xpcHBl
ZC5zaXplKCkgfTsKKworICAgIGlmIChzcmNSZWN0U2NhbGVkLngoKSA8IDApCisgICAgICAgIGRl
c3RSZWN0LnNldFgoLXNyY1JlY3RTY2FsZWQueCgpKTsKKworICAgIGlmIChzcmNSZWN0U2NhbGVk
LnkoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNldFkoLXNyY1JlY3RTY2FsZWQueSgpKTsKKwor
ICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiBzcmNSZWN0U2NhbGVkLndpZHRoKCk7
CisgICAgdWludDhfdCogZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkZXN0
RGF0YSkgKyBkZXN0UmVjdC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0
OworCisgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAgIHVp
bnQ4X3QqIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzcmNEYXRhKSArIHNy
Y1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICog
NDsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCwgcGl4ZWxGb3JtYXQoKSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3Ms
CisgICAgICAgIG91dHB1dEZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBkZXN0Qnl0ZXNQZXJS
b3csIGRlc3RSb3dzLCBkZXN0UmVjdC5zaXplKCkpOworfQorCiB2b2lkIEltYWdlQnVmZmVyQmFj
a2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQsIHZv
aWQqIGRhdGEpCiB7CiAgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gdG9CYWNrZW5kQ29vcmRp
bmF0ZXMoc3JjUmVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCmluZGV4IDMxY2U5Nzc1N2I1ZC4uZTUxYjc5NTEzNTMz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ckJhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlckJhY2tlbmQuaApAQCAtMTE3LDYgKzExNyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFZl
Y3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCBSZWZQ
dHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvcHlJ
bWFnZURhdGEodm9pZCogYnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCwgY29uc3QgSW50UmVjdCYpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcHV0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgPSAwOwogCiAgICAgdmlydHVhbCBQbGF0Zm9y
bUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQpAQCAtMTYy
LDYgKzE2Myw3IEBAIHByb3RlY3RlZDoKICAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8dWludDhf
dD4gdG9CR1JBRGF0YSh2b2lkKiBkYXRhKSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIFJl
ZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgdm9pZCogZGF0YSkgY29uc3Q7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBjb3B5SW1hZ2VEYXRhKHZvaWQqIGRlc3REYXRhLCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgdm9p
ZCogc3JjRGF0YSkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0LCB2b2lkKiBkYXRhKTsKIAogICAgIFBhcmFtZXRlcnMg
bV9wYXJhbWV0ZXJzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2Vu
ZC5jcHAKaW5kZXggMGI3M2YxNGJhNzAwLi43ZWM0MzEyNjVmZjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNl
QmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMTI1LDYgKzEyNSwxMSBAQCBS
ZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpYwogICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6Omdl
dEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X2RhdGEobV9zdXJmYWNlLmdldCgpKSk7CiB9CiAKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb1N1cmZh
Y2VCYWNrZW5kOjpjb3B5SW1hZ2VEYXRhKHZvaWQqIGJ1ZmZlciwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0Cit7CisgICAg
cmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Y29weUltYWdlRGF0YShidWZmZXIsIG91dHB1dEZv
cm1hdCwgc3JjUmVjdCwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZhY2UuZ2V0
KCkpKTsKK30KKwogdm9pZCBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEm
IGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQogewogICAgIEltYWdlQnVm
ZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3Qs
IGRlc3RQb2ludCwgZGVzdEZvcm1hdCwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1
cmZhY2UuZ2V0KCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAppbmRleCA5
ZDUzOGJlZmNkOGUuLjc4NGViNTVkMzI5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kLmNwcApAQCAtMTM3LDYgKzEzNywxMSBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpbwogICAg
IHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNy
Y1JlY3QsIG1fZGF0YSk7CiB9CiAKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNv
cHlJbWFnZURhdGEodm9pZCogYnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZv
cm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW1hZ2VC
dWZmZXJCYWNrZW5kOjpjb3B5SW1hZ2VEYXRhKGJ1ZmZlciwgb3V0cHV0Rm9ybWF0LCBzcmNSZWN0
LCBtX2RhdGEpOworfQorCiB2b2lkIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpwdXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRh
JiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKIHsKICAgICBJbWFnZUJ1
ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0
LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIG1fZGF0YSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQuaAppbmRleCA4ZjMzMjNlN2RjZWMuLmQwYzIwNzc4OWM5YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tl
bmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZC5oCkBAIC00OSw2ICs0OSw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8
dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUmVmUHRyPEltYWdl
RGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBj
b25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBjb3B5SW1hZ2VEYXRhKHZv
aWQqLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYp
IGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVz
dEZvcm1hdCkgb3ZlcnJpZGU7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNPcmlnaW5B
dFVwcGVyTGVmdENvcm5lciA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
LmNwcAppbmRleCA2YzNiN2M3NGI0NmUuLjA5ODNiMWY5ZDEzZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0xODMsNiArMTgzLDEyIEBAIFJlZlB0cjxJbWFnZURh
dGE+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpCiAgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKG91
dHB1dEZvcm1hdCwgc3JjUmVjdCwgbG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSk7CiB9CiAKK3Zv
aWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb3B5SW1hZ2VEYXRhKHZvaWQqIGJ1ZmZl
ciwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QpIGNvbnN0Cit7CisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsK
KyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5SW1hZ2VEYXRhKGJ1ZmZlciwgb3V0
cHV0Rm9ybWF0LCBzcmNSZWN0LCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKK30KKwogdm9p
ZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQogewogICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKm1f
c3VyZmFjZSwgSU9TdXJmYWNlOjpMb2NrZXI6OkFjY2Vzc01vZGU6OlJlYWRXcml0ZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCmluZGV4IDQ4NTlkZjZmYzUyNS4uYTI2NmQxNTQ4
ZTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaApAQCAtNjIsNiArNjIsNyBA
QCBwdWJsaWM6CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZvaWQgY29weUltYWdlRGF0YSh2b2lkKiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIHB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEm
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRlOwogICAgIElPU3VyZmFjZSog
c3VyZmFjZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAppbmRleCBlMDc5ZjczMGJlODUu
LmQ4Nzg2ZGI1MDViZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCkBAIC0yODcsNiArMjg3
LDggQEAgdm9pZCBEaXNwbGF5TGlzdDo6YXBwZW5kKEl0ZW1IYW5kbGUgaXRlbSkKICAgICAgICAg
cmV0dXJuIGFwcGVuZDxNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXI+KGl0
ZW0uZ2V0PE1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcj4oKSk7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyOgogICAgICAgICByZXR1
cm4gYXBwZW5kPE1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcj4oaXRlbS5nZXQ8TWV0YUNvbW1h
bmRDaGFuZ2VJdGVtQnVmZmVyPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpHZXRJbWFnZURhdGE6
CisgICAgICAgIHJldHVybiBhcHBlbmQ8R2V0SW1hZ2VEYXRhPihpdGVtLmdldDxHZXRJbWFnZURh
dGE+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKICAgICAgICAgcmV0dXJu
IGFwcGVuZDxQdXRJbWFnZURhdGE+KGl0ZW0uZ2V0PFB1dEltYWdlRGF0YT4oKSk7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtQnVmZmVyLmNwcAppbmRleCAzOTVmZTY3MWNjZjcuLjg3NWQzMGIyODkxNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKQEAgLTIyOCw2ICsy
MjgsOCBAQCB2b2lkIEl0ZW1IYW5kbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkK
ICAgICBjYXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZm
ZXI6CiAgICAgY2FzZSBJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyOgogICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBJdGVtVHlwZTo6R2V0SW1hZ2VEYXRhOgorICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOiB7CiAgICAgICAgIGdldDxQ
dXRJbWFnZURhdGE+KCkuYXBwbHkoY29udGV4dCk7CiAgICAgICAgIHJldHVybjsKQEAgLTQ2Miw2
ICs0NjQsMTAgQEAgdm9pZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkKICAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8TWV0YUNvbW1hbmRDaGFuZ2VJdGVt
QnVmZmVyPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGNhc2UgSXRlbVR5
cGU6OkdldEltYWdlRGF0YTogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlh
bGx5X2Rlc3RydWN0aWJsZTxHZXRJbWFnZURhdGE+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CiAgICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOiB7CiAgICAgICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFBhaW50RnJhbWVG
b3JNZWRpYT46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNjUwLDYgKzY1Niw4IEBAIGJv
b2wgSXRlbUhhbmRsZTo6c2FmZUNvcHkoSXRlbUhhbmRsZSBkZXN0aW5hdGlvbikgY29uc3QKICAg
ICAgICAgcmV0dXJuIGNvcHlJbnRvPE1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1
ZmZlcj4oKnRoaXMsIGl0ZW1PZmZzZXQpOwogICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5k
Q2hhbmdlSXRlbUJ1ZmZlcjoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPE1ldGFDb21tYW5kQ2hh
bmdlSXRlbUJ1ZmZlcj4oKnRoaXMsIGl0ZW1PZmZzZXQpOworICAgIGNhc2UgSXRlbVR5cGU6Okdl
dEltYWdlRGF0YToKKyAgICAgICAgcmV0dXJuIGNvcHlJbnRvPEdldEltYWdlRGF0YT4oKnRoaXMs
IGl0ZW1PZmZzZXQpOwogICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKICAg
ICAgICAgcmV0dXJuIGNvcHlJbnRvPFBhaW50RnJhbWVGb3JNZWRpYT4oKnRoaXMsIGl0ZW1PZmZz
ZXQpOwogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtVHlwZS5jcHAKaW5kZXggYzBjNzNiODNiZDUyLi5kZTE5MDY4ODg5OTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1UeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAKQEAgLTEzMCw2ICsxMzAsOCBA
QCBzdGF0aWMgc2l6ZV90IHNpemVPZkl0ZW1JbkJ5dGVzKEl0ZW1UeXBlIHR5cGUpCiAgICAgICAg
IHJldHVybiBzaXplb2YoTWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyKTsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXI6CiAgICAgICAg
IHJldHVybiBzaXplb2YoTWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyKTsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpHZXRJbWFnZURhdGE6CisgICAgICAgIHJldHVybiBzaXplb2YoR2V0SW1hZ2VEYXRh
KTsKICAgICBjYXNlIEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6CiAgICAgICAgIHJldHVybiBzaXpl
b2YoUHV0SW1hZ2VEYXRhKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6
CkBAIC0xODQsNiArMTg2LDcgQEAgYm9vbCBpc0RyYXdpbmdJdGVtKEl0ZW1UeXBlIHR5cGUpCiAg
ICAgY2FzZSBJdGVtVHlwZTo6Rmx1c2hDb250ZXh0OgogICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFD
b21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpN
ZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXI6CisgICAgY2FzZSBJdGVtVHlwZTo6R2V0SW1hZ2VE
YXRhOgogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6CiAgICAgY2FzZSBJdGVtVHlwZTo6Um90
YXRlOgogICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6CkBAIC0yOTYsNiArMjk5LDcgQEAgYm9vbCBp
c0lubGluZUl0ZW0oSXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpGbHVzaENvbnRl
eHQ6CiAgICAgY2FzZSBJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdl
QnVmZmVyOgogICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjoK
KyAgICBjYXNlIEl0ZW1UeXBlOjpHZXRJbWFnZURhdGE6CiAgICAgY2FzZSBJdGVtVHlwZTo6UGFp
bnRGcmFtZUZvck1lZGlhOgogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6CiAgICAgY2FzZSBJ
dGVtVHlwZTo6Um90YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmgKaW5k
ZXggMGU5NDdhMDZkYWI1Li4yODljNzllODE5YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbVR5cGUuaApAQCAtNzgsNiArNzgsNyBAQCBlbnVtIGNsYXNzIEl0ZW1UeXBlIDogdWlu
dDhfdCB7CiAgICAgRmx1c2hDb250ZXh0LAogICAgIE1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRp
b25JbWFnZUJ1ZmZlciwKICAgICBNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXIsCisgICAgR2V0
SW1hZ2VEYXRhLAogICAgIFB1dEltYWdlRGF0YSwKICAgICBQYWludEZyYW1lRm9yTWVkaWEsCiAg
ICAgU3Ryb2tlUmVjdCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAppbmRleCBl
NTFhYzEzOWQyYWYuLjMyN2E4MTQ3YzM3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0
ZW1zLmNwcApAQCAtNzcxLDYgKzc3MSwxMyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbEVsbGlwc2UmIGl0ZW0pCiAgICAgcmV0dXJuIHRz
OwogfQogCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgR2V0SW1hZ2VEYXRhJiBpdGVtKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgib3V0cHV0Rm9y
bWF0IiwgaXRlbS5vdXRwdXRGb3JtYXQoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJzcmNSZWN0
IiwgaXRlbS5zcmNSZWN0KCkpOworICAgIHJldHVybiB0czsKK30KKwogUHV0SW1hZ2VEYXRhOjpQ
dXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1h
Z2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50
JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKICAgICA6IG1f
c3JjUmVjdChzcmNSZWN0KQogICAgICwgbV9kZXN0UG9pbnQoZGVzdFBvaW50KQpAQCAtMTA2Miw2
ICsxMDY5LDcgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6Rmx1c2hDb250ZXh0OiB0cyA8PCAi
Zmx1c2gtY29udGV4dCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hh
bmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcjogdHMgPDwgIm1ldGEtY29tbWFuZC1jaGFuZ2UtZGVz
dGluYXRpb24taW1hZ2UtYnVmZmVyIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6TWV0YUNv
bW1hbmRDaGFuZ2VJdGVtQnVmZmVyOiB0cyA8PCAibWV0YS1jb21tYW5kLWNoYW5nZS1pdGVtLWJ1
ZmZlciI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkdldEltYWdlRGF0YTogdHMgPDwgImdl
dC1pbWFnZS1kYXRhIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOiB0
cyA8PCAicHV0LWltYWdlLWRhdGEiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZy
YW1lRm9yTWVkaWE6IHRzIDw8ICJwYWludC1mcmFtZS1mb3ItbWVkaWEiOyBicmVhazsKICAgICBj
YXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OiB0cyA8PCAic3Ryb2tlLXJlY3QiOyBicmVhazsKQEAg
LTEyMjMsNiArMTIzMSw5IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IEl0ZW1IYW5kbGUgaXRlbSkKICAgICBjYXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZUl0
ZW1CdWZmZXI6CiAgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PE1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1
ZmZlcj4oKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6R2V0SW1hZ2VEYXRh
OgorICAgICAgICB0cyA8PCBpdGVtLmdldDxHZXRJbWFnZURhdGE+KCk7CisgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKICAgICAgICAgdHMgPDwgaXRlbS5n
ZXQ8UHV0SW1hZ2VEYXRhPigpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RJdGVtcy5oCmluZGV4IDQ2Mjg2NTQyYTM5ZC4uOWI4MmM2NmFjYjU2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdEl0ZW1zLmgKQEAgLTE5NTEsNiArMTk1MSwyNiBAQCBwcml2YXRlOgogICAg
IEZsb2F0UmVjdCBtX3JlY3Q7CiB9OwogCitjbGFzcyBHZXRJbWFnZURhdGEgeworcHVibGljOgor
ICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6R2V0SW1h
Z2VEYXRhOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBH
ZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QpCisgICAgICAgIDogbV9vdXRwdXRGb3JtYXQob3V0cHV0Rm9ybWF0KQor
ICAgICAgICAsIG1fc3JjUmVjdChzcmNSZWN0KQorICAgIHsKKyAgICB9CisKKyAgICBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1fb3V0cHV0Rm9y
bWF0OyB9CisgICAgY29uc3QgSW50UmVjdCYgc3JjUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Jj
UmVjdDsgfQorCitwcml2YXRlOgorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gbV9vdXRwdXRG
b3JtYXQ7CisgICAgSW50UmVjdCBtX3NyY1JlY3Q7Cit9OworCiBjbGFzcyBQdXRJbWFnZURhdGEg
ewogcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVt
VHlwZTo6UHV0SW1hZ2VEYXRhOwpAQCAtMjM3Miw2ICsyMzkyLDcgQEAgdGVtcGxhdGU8PiBzdHJ1
Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU+IHsKICAgICBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZsdXNoQ29udGV4dCwKICAgICBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1
ZmZlciwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hh
bmdlSXRlbUJ1ZmZlciwKKyAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkdldElt
YWdlRGF0YSwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlB1dEltYWdlRGF0
YSwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRp
YSwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZVJlY3QsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKaW5kZXggZTdmOWUyOGMzNTAyLi43
ZDY4ODMwYzI3ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAK
QEAgLTU1LDYgKzU1LDExIEBAIFJlY29yZGVyOjp+UmVjb3JkZXIoKQogICAgIExPRyhEaXNwbGF5
TGlzdHMsICJSZWNvcmRlZCBkaXNwbGF5IGxpc3Q6XG4lcyIsIG1fZGlzcGxheUxpc3QuZGVzY3Jp
cHRpb24oKS5kYXRhKCkpOwogfQogCit2b2lkIFJlY29yZGVyOjpnZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qp
Cit7CisgICAgYXBwZW5kPEdldEltYWdlRGF0YT4ob3V0cHV0Rm9ybWF0LCBzb3VyY2VSZWN0KTsK
K30KKwogdm9pZCBSZWNvcmRlcjo6cHV0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlw
bGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkltYWdlRGF0YSYgaW1hZ2VEYXRh
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYgZGVzdFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQp
CiB7CiAgICAgYXBwZW5kPFB1dEltYWdlRGF0YT4oaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3Jj
UmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlci5oCmluZGV4IDlmZTQ3MDNiOWUxYy4uMDcwMGRiNzY5NDExIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKQEAgLTU3LDYgKzU3LDcgQEAgcHVibGljOgogICAg
IFdFQkNPUkVfRVhQT1JUIFJlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYsIERpc3BsYXlMaXN0Jiwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlw
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBEZWxlZ2F0ZSogPSBudWxscHRyLCBEcmF3R2x5cGhz
UmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbiA9IERyYXdHbHlwaHNSZWNvcmRlcjo6
RHJhd0dseXBoc0RlY29uc3RydWN0aW9uOjpEZWNvbnN0cnVjdCk7CiAgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB+UmVjb3JkZXIoKTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHB1dEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGRlc3RGb3JtYXQpOwogCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gbV9kaXNwbGF5TGlzdC5pc0VtcHR5KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQuY3BwCmluZGV4IGQwNzI0NmVjYjRhMi4uNDUwNGQ5NmNiZTdkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFn
ZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKQEAgLTMxNSw3ICszMTUsNyBAQCBWZWN0b3I8dWlu
dDhfdD4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAogUmVm
UHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmdldEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIG51bGxwdHIpOwor
ICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQs
IHNyY1JlY3QpOwogfQogCiB2b2lkIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpwdXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRh
JiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmgKaW5kZXgg
NTA2ZTI4Y2EyNGI3Li41ODkwMjBjOTk2MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oCkBAIC04MSw2ICs4MSwxNiBA
QCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAorICAgICAg
ICBpZiAoaXRlbS5pczxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6R2V0SW1hZ2VEYXRhPigpKSB7Cisg
ICAgICAgICAgICBhdXRvIGdldEltYWdlRGF0YUl0ZW0gPSBpdGVtLmdldDxXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6R2V0SW1hZ2VEYXRhPigpOworCisgICAgICAgICAgICAvLyBGSVhNRTogQ2hlY2sg
dGhlIHNpemUuCisgICAgICAgICAgICBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6Y29weUltYWdl
RGF0YShtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaW1hZ2VEYXRhQnVmZmVyKCksIGdldEltYWdl
RGF0YUl0ZW0ub3V0cHV0Rm9ybWF0KCksIGdldEltYWdlRGF0YUl0ZW0uc3JjUmVjdCgpKTsKKyAg
ICAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC5kaWRGaW5pc2hHZXRJbWFnZURhdGEo
KTsKKworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKwogICAgICAgICBpZiAo
aXRlbS5pczxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVy
PigpKSB7CiAgICAgICAgICAgICBhdXRvIG5leHRCdWZmZXJJZGVudGlmaWVyID0gaXRlbS5nZXQ8
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcj4oKS5pZGVu
dGlmaWVyKCk7CiAgICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuc2V0TmV4dEl0
ZW1CdWZmZXJUb1JlYWQobmV4dEJ1ZmZlcklkZW50aWZpZXIsIG1fcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAppbmRleCAyYzc2MjUxODZhZWUuLjkx
OTc4ZWQ2ODdlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtMjk2LDE2ICsyOTYsNDYg
QEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzZXROZXh0SXRlbUJ1ZmZlclRvUmVhZChE
aXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW4KICAgICBtX3BlbmRpbmdXYWtldXBJbmZvID0ge3t7
IGlkZW50aWZpZXIsIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpoZWFkZXJTaXplKCksIGRlc3Rp
bmF0aW9uSWRlbnRpZmllciwgR1BVUHJvY2Vzc1dha2V1cFJlYXNvbjo6VW5zcGVjaWZpZWQgfSwg
V1RGOjpudWxsb3B0IH19OwogfQogCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmdldElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgSW50UmVjdCBzcmNS
ZWN0LCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+JiYp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXRJ
bWFnZURhdGEoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25z
dCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYgaGFuZGxlKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIFJlZlB0cjxJbWFnZURh
dGE+IGltYWdlRGF0YTsKLSAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IG1fcmVtb3RlUmVzb3Vy
Y2VDYWNoZS5jYWNoZWRJbWFnZUJ1ZmZlcihyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpKQot
ICAgICAgICBpbWFnZURhdGEgPSBpbWFnZUJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1h
dCwgc3JjUmVjdCk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShpbWFnZURhdGEpKTsK
KyAgICBDaGVja2VkSW50MzIgZGF0YVNpemUgPSA0OworICAgIGRhdGFTaXplICo9IHNpemUud2lk
dGgoKTsKKyAgICBkYXRhU2l6ZSAqPSBzaXplLmhlaWdodCgpOworICAgIFJlZlB0cjxTaGFyZWRN
ZW1vcnk+IHNoYXJlZE1lbW9yeTsKKyAgICBpbnQzMl90IGJ1ZmZlclNpemUgPSAwOworICAgIGlm
IChkYXRhU2l6ZSA+IDAgJiYgZGF0YVNpemUuc2FmZUdldChidWZmZXJTaXplKSA9PSBDaGVja2Vk
U3RhdGU6OkRpZE5vdE92ZXJmbG93KQorICAgICAgICBzaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1v
cnk6OmFsbG9jYXRlKGJ1ZmZlclNpemUpOworCisgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFu
ZGxlOworICAgIGlmIChzaGFyZWRNZW1vcnkpCisgICAgICAgIHNoYXJlZE1lbW9yeS0+Y3JlYXRl
SGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7CisKKyAg
ICBtX2dldEltYWdlRGF0YUJ1ZmZlciA9IHNoYXJlZE1lbW9yeTsKKyAgICBtX2dldEltYWdlRGF0
YUJ1ZmZlclNpemUgPSBzaGFyZWRNZW1vcnkgPyBzaXplIDogSW50U2l6ZSgpOworCisgICAgY29t
cGxldGlvbkhhbmRsZXIoU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgeyBXVEZNb3ZlKGhhbmRsZSks
IHN0YXRpY19jYXN0PHVpbnQ2NF90PihidWZmZXJTaXplKSB9KTsKIH0KIAordm9pZCBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChjb25zdCBJUEM6OlNlbWFwaG9yZSYgc2VtYXBob3JlKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBjb21w
bGV0aW9uSGFuZGxlcihtX2dldEltYWdlRGF0YVNlbWFwaG9yZSk7Cit9CisKK3ZvaWQqIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OmltYWdlRGF0YUJ1ZmZlcigpCit7CisgICAgaWYgKCFtX2dldElt
YWdlRGF0YUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1fZ2V0
SW1hZ2VEYXRhQnVmZmVyLT5kYXRhKCk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6ZGlkRmluaXNoR2V0SW1hZ2VEYXRhKCkKK3sKKyAgICBtX2dldEltYWdlRGF0YVNlbWFwaG9y
ZS5zaWduYWwoKTsKKyB9CisKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0RGF0YVVS
TEZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiwg
V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcmJik+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CkBAIC00NTUsNiArNDg1
LDcgQEAgT3B0aW9uYWw8RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU+IFdBUk5fVU5VU0VEX1JFVFVS
TiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkZWMKICAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6Rmx1c2hDb250ZXh0OgogICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpNZXRh
Q29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXI6CiAgICAgY2FzZSBEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjoKKyAgICBjYXNlIERpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6R2V0SW1hZ2VEYXRhOgogICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6CiAgICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OlJlc3RvcmU6CiAgICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlJvdGF0ZToKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5oCmluZGV4IGI3YWVlMjYyNzcwNS4uNzI3ZGQ1NjI2OWM0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLmgKQEAgLTgwLDYgKzgwLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBkaXNj
b25uZWN0KCk7CiAKKyAgICB2b2lkKiBpbWFnZURhdGFCdWZmZXIoKTsKKyAgICB2b2lkIGRpZEZp
bmlzaEdldEltYWdlRGF0YSgpOworCiBwcml2YXRlOgogICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
LCBJUEM6OlNlbWFwaG9yZSYmKTsKIApAQCAtMTExLDcgKzExNCw4IEBAIHByaXZhdGU6CiAgICAg
Ly8gTWVzc2FnZXMgdG8gYmUgcmVjZWl2ZWQuCiAgICAgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZlcihj
b25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdN
b2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFj
ZSwgV2ViQ29yZTo6UGl4ZWxGb3JtYXQsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
Zmllcik7CiAgICAgdm9pZCB3YWtlVXBBbmRBcHBseURpc3BsYXlMaXN0KGNvbnN0IEdQVVByb2Nl
c3NXYWtldXBNZXNzYWdlQXJndW1lbnRzJik7Ci0gICAgdm9pZCBnZXRJbWFnZURhdGEoV2ViQ29y
ZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIFdlYkNvcmU6OkludFJlY3Qg
c3JjUmVjdCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+JiYpPiYmKTsKKyAgICB2b2lk
IGdldEltYWdlRGF0YShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYpPiYmKTsKKyAgICB2b2lkIGNyZWF0
ZVNlbWFwaG9yZUZvckdldEltYWdlRGF0YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IElQ
Qzo6U2VtYXBob3JlJik+JiYpOwogICAgIHZvaWQgZ2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6
UHJlc2VydmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYpPiYmKTsKICAgICB2b2lkIGdldERhdGFG
b3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHksIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChWZWN0b3I8dWludDhfdD4mJik+JiYpOwogICAgIHZvaWQgZ2V0QkdSQURhdGFG
b3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPHVpbnQ4X3Q+JiYpPiYmKTsKQEAgLTE0NCw2ICsxNDgs
OSBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZm
ZXJJZGVudGlmaWVyLCBSZWZQdHI8RGlzcGxheUxpc3RSZWFkZXJIYW5kbGU+PiBtX3NoYXJlZERp
c3BsYXlMaXN0SGFuZGxlczsKICAgICBPcHRpb25hbDxQZW5kaW5nV2FrZXVwSW5mb3JtYXRpb24+
IG1fcGVuZGluZ1dha2V1cEluZm87CiAgICAgSVBDOjpTZW1hcGhvcmUgbV9yZXN1bWVEaXNwbGF5
TGlzdFNlbWFwaG9yZTsKKyAgICBJUEM6OlNlbWFwaG9yZSBtX2dldEltYWdlRGF0YVNlbWFwaG9y
ZTsKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBtX2dldEltYWdlRGF0YUJ1ZmZlcjsKKyAgICBX
ZWJDb3JlOjpJbnRTaXplIG1fZ2V0SW1hZ2VEYXRhQnVmZmVyU2l6ZTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgppbmRl
eCA2ODhjNjQyYmRjNDguLjZmYTE1MjhhNzEyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KKysr
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmQubWVzc2FnZXMuaW4KQEAgLTI1LDcgKzI1LDEwIEBACiBtZXNzYWdlcyAtPiBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kIHsKICAgICBDcmVhdGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpGbG9hdFNpemUg
bG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgZW51bTp1aW50OF90IFdlYkNvcmU6OlBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0LCBXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KQogICAgIFdha2VVcEFuZEFwcGx5RGlzcGxheUxpc3Qoc3RydWN0IFdlYktpdDo6R1BVUHJvY2Vz
c1dha2V1cE1lc3NhZ2VBcmd1bWVudHMgYXJndW1lbnRzKQotICAgIEdldEltYWdlRGF0YShlbnVt
OnVpbnQ4X3QgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIFdl
YkNvcmU6OkludFJlY3Qgc3JjUmVjdCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFJlZlB0cjxXZWJDb3JlOjpJbWFn
ZURhdGE+IGltYWdlRGF0YSkgU3luY2hyb25vdXMKKworICAgIEdldEltYWdlRGF0YShXZWJDb3Jl
OjpJbnRTaXplIHNpemUpIC0+IChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIGhhbmRs
ZSkgU3luY2hyb25vdXMKKyAgICBDcmVhdGVTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEoKSAtPiAo
SVBDOjpTZW1hcGhvcmUgc2VtYXBob3JlKSBTeW5jaHJvbm91cworCiAgICAgR2V0RGF0YVVSTEZv
ckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBl
bnVtOnVpbnQ4X3QgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlv
biwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcikgLT4gKFN0cmluZyB1cmxTdHJpbmcpIFN5bmNocm9ub3VzCiAgICAgR2V0RGF0
YUZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKSAtPiAoVmVjdG9yPHVpbnQ4X3Q+IGRhdGEpIFN5bmNocm9ub3VzCiAgICAgR2V0
QkdSQURhdGFGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoVmVjdG9yPHVpbnQ4X3Q+IGRhdGEp
IFN5bmNocm9ub3VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFj
a2VuZC5jcHAKaW5kZXggMWQ3YWY2YmI4YzU3Li4yMTVmZDJkMTFlMzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVC
aXRtYXBCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHAKQEAgLTEyMyw2ICsxMjMs
MTEgQEAgUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5k
OjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXAKICAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNr
ZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBtX2JpdG1hcC0+ZGF0YSgp
KTsKIH0KIAordm9pZCBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmNvcHlJbWFn
ZURhdGEodm9pZCogYnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJC
YWNrZW5kOjpjb3B5SW1hZ2VEYXRhKGJ1ZmZlciwgb3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBtX2Jp
dG1hcC0+ZGF0YSgpKTsKK30KKwogdm9pZCBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tl
bmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25z
dCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9y
bWF0KQogewogICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0
LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCwgbV9iaXRtYXAtPmRh
dGEoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaApp
bmRleCA1NTUwNmE0OWQwM2UuLjRiOWRkNjYzYjBlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tl
bmQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oCkBAIC01OSw2ICs1OSw3IEBAIHB1YmxpYzoKIAog
ICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgUmVm
UHRyPFdlYkNvcmU6OkltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVs
dGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdm9pZCBjb3B5SW1hZ2VEYXRhKHZvaWQqIGJ1ZmZlciwgV2ViQ29yZTo6
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIHB1dEltYWdlRGF0YShXZWJDb3JlOjpBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbWFnZURhdGEm
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYgZGVzdFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQp
IG92ZXJyaWRlOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAppbmRleCAw
Y2EyYmIyMDNlNGMuLjJjNWY3YmZjMDgxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgK
QEAgLTE0Niw3ICsxNDYsMjMgQEAgcHJvdGVjdGVkOgogICAgICAgICBpZiAoVU5MSUtFTFkoIW1f
cmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgICAgIHJldHVybiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+Z2V0SW1h
Z2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpOworICAgICAgICBhdXRvIHNoYXJlZE1lbW9yeSA9IG1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LT5zaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEoc3JjUmVjdC5zaXplKCkpOworICAg
ICAgICBpZiAoIXNoYXJlZE1lbW9yeSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgICAgIGF1dG8mIG11dGFibGVUaGlzID0gY29uc3RfY2FzdDxSZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5Jj4oKnRoaXMpOworICAgICAgICBtdXRhYmxlVGhpcy5tX2RyYXdpbmdDb250ZXh0LnJlY29y
ZGVyKCkuZ2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCk7CisgICAgICAgIG11dGFi
bGVUaGlzLmZsdXNoRHJhd2luZ0NvbnRleHRBc3luYygpOworCisgICAgICAgIGF1dG8gaW1hZ2VE
YXRhID0gV2ViQ29yZTo6SW1hZ2VEYXRhOjpjcmVhdGUoc3JjUmVjdC5zaXplKCkpOworICAgICAg
ICBzaXplX3QgaW1hZ2VTaXplSW5CeXRlcyA9IGltYWdlRGF0YS0+ZGF0YSgpLT5ieXRlTGVuZ3Ro
KCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGltYWdlU2l6ZUluQnl0ZXMgPD0gc2hhcmVkTWVt
b3J5LT5zaXplKCkpOworCisgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT53
YWl0Rm9ySW1hZ2VEYXRhKCk7CisKKyAgICAgICAgbWVtY3B5KGltYWdlRGF0YS0+ZGF0YSgpLT5k
YXRhKCksIHNoYXJlZE1lbW9yeS0+ZGF0YSgpLCBpbWFnZVNpemVJbkJ5dGVzKTsKKworICAgICAg
ICByZXR1cm4gaW1hZ2VEYXRhOwogICAgIH0KIAogICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpQcmVz
ZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCmluZGV4IGE0YzQ1ZTAwODBhYi4uMjI2
NDc1MTNjNTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCkBA
IC0xNDIsMTMgKzE0MiwzNCBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaQogICAgIHJldHVybiBu
dWxscHRyOwogfQogCi1SZWZQdHI8SW1hZ2VEYXRhPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcikKK1JlZlB0cjxTaGFyZWRNZW1vcnk+IFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTo6c2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhKGNvbnN0IEludFNpemUm
IGRlc2lyZWRTaXplKQogewogICAgIHNlbmREZWZlcnJlZFdha2V1cE1lc3NhZ2VJZk5lZWRlZCgp
OwogCi0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhOwotICAgIHNlbmRTeW5jKE1lc3Nh
Z2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpHZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBz
cmNSZWN0LCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCBNZXNzYWdlczo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6R2V0SW1hZ2VEYXRhOjpSZXBseShpbWFnZURhdGEpLCBtX3JlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyLCAxX3MpOwotICAgIHJldHVybiBpbWFnZURhdGE7CisgICAgaWYg
KFVOTElLRUxZKCFtX2ltYWdlRGF0YVNlbWFwaG9yZSkpIHsKKyAgICAgICAgSVBDOjpTZW1hcGhv
cmUgc2VtYXBob3JlOworICAgICAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6Q3JlYXRlU2VtYXBob3JlRm9yR2V0SW1hZ2VEYXRhKCksCisgICAgICAgICAgICBN
ZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Q3JlYXRlU2VtYXBob3JlRm9yR2V0SW1h
Z2VEYXRhOjpSZXBseShzZW1hcGhvcmUpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLCAx
X3MpOworICAgICAgICBtX2ltYWdlRGF0YVNlbWFwaG9yZSA9IFdURk1vdmUoc2VtYXBob3JlKTsK
KyAgICB9CisKKyAgICBpZiAobV9pbWFnZURhdGFCdWZmZXJTaXplLndpZHRoKCkgPj0gZGVzaXJl
ZFNpemUud2lkdGgoKSAmJiBtX2ltYWdlRGF0YUJ1ZmZlclNpemUuaGVpZ2h0KCkgPj0gZGVzaXJl
ZFNpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybiBtX2ltYWdlRGF0YUJ1ZmZlcjsKKworICAg
IEludFNpemUgbmV3U2l6ZSA9IG1faW1hZ2VEYXRhQnVmZmVyU2l6ZS5leHBhbmRlZFRvKGRlc2ly
ZWRTaXplKTsKKyAgICBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGU7CisgICAgc2VuZFN5
bmMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldEltYWdlRGF0YShuZXdTaXpl
KSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldEltYWdlRGF0YTo6UmVwbHko
aGFuZGxlKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciwgMV9zKTsKKworICAgIG1faW1h
Z2VEYXRhQnVmZmVyID0gU2hhcmVkTWVtb3J5OjptYXAoaGFuZGxlLmhhbmRsZSwgU2hhcmVkTWVt
b3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7CisgICAgbV9pbWFnZURhdGFCdWZmZXJTaXplID0g
bmV3U2l6ZTsKKworICAgIHJldHVybiBtX2ltYWdlRGF0YUJ1ZmZlcjsKK30KKwordm9pZCBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OndhaXRGb3JJbWFnZURhdGEoKQoreworICAgIEFTU0VS
VChtX2ltYWdlRGF0YVNlbWFwaG9yZSk7CisgICAgbV9pbWFnZURhdGFTZW1hcGhvcmUtPndhaXRG
b3IoNV9zKTsKIH0KIAogU3RyaW5nIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0RGF0
YVVSTEZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiwgUmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCmluZGV4IDY3YmU0YWI2N2U0Yy4uODdlYTQ0
ZTFkYWJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKQEAgLTgxLDcg
KzgxLDggQEAgcHVibGljOgogCiAgICAgLy8gTWVzc2FnZXMgdG8gYmUgc2VudC4KICAgICBSZWZQ
dHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6
OkZsb2F0U2l6ZSYsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlLCBXZWJDb3JlOjpQaXhlbEZvcm1hdCk7
Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKFdlYkNvcmU6OkFs
cGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBzcmNSZWN0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgIFJl
ZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YShjb25zdCBXZWJD
b3JlOjpJbnRTaXplJik7CisgICAgdm9pZCB3YWl0Rm9ySW1hZ2VEYXRhKCk7CiAgICAgU3RyaW5n
IGdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICBWZWN0b3I8dWludDhfdD4gZ2V0RGF0
YUZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICBWZWN0
b3I8dWludDhfdD4gZ2V0QkdSQURhdGFGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpOwpAQCAtMTI0LDYgKzEyNSw5IEBAIHByaXZhdGU6CiAgICAgT3B0
aW9uYWw8R1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHM+IG1fZGVmZXJyZWRXYWtldXBN
ZXNzYWdlQXJndW1lbnRzOwogICAgIHVuc2lnbmVkIG1fcmVtYWluaW5nSXRlbXNUb0FwcGVuZEJl
Zm9yZVNlbmRpbmdXYWtldXAgeyAwIH07CiAgICAgSVBDOjpTZW1hcGhvcmUgbV9yZXN1bWVEaXNw
bGF5TGlzdFNlbWFwaG9yZTsKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBtX2ltYWdlRGF0YUJ1
ZmZlcjsKKyAgICBXZWJDb3JlOjpJbnRTaXplIG1faW1hZ2VEYXRhQnVmZmVyU2l6ZTsKKyAgICBP
cHRpb25hbDxJUEM6OlNlbWFwaG9yZT4gbV9pbWFnZURhdGFTZW1hcGhvcmU7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNw
cCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZm
ZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcAppbmRleCA1N2M3ZjdkNWEyNDUuLjYzNWYw
MTZkYzkzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFy
ZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMTA0LDYgKzEwNCwxMSBAQCBSZWZQdHI8SW1h
Z2VEYXRhPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0
YShBbHBoYVByZW11bAogICAgIHJldHVybiB7IH07CiB9CiAKK3ZvaWQgSW1hZ2VCdWZmZXJTaGFy
ZWFibGVJT1N1cmZhY2VCYWNrZW5kOjpjb3B5SW1hZ2VEYXRhKHZvaWQqLCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JikgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCiB2b2lkIEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFj
a2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEltYWdlRGF0
YSYsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRQb2ludCYsIEFscGhhUHJlbXVsdGlwbGljYXRp
b24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFy
ZWFibGVJT1N1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oCmluZGV4
IGQ1ZTAwZTQyMDk4YS4uYjQyNTA5N2FmOTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNl
QmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29j
b2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmgKQEAgLTU3LDYgKzU3LDcg
QEAgcHVibGljOgogICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCBvdmVycmlkZTsKICAgICBWZWN0
b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIFJlZlB0cjxXZWJD
b3JlOjpJbWFnZURhdGE+IGdldEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0IG92ZXJyaWRl
OworICAgIHZvaWQgY29weUltYWdlRGF0YSh2b2lkKiBidWZmZXIsIFdlYkNvcmU6OkFscGhhUHJl
bXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBwdXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VEYXRhJiwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQ
b2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlk
ZTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc09yaWdpbkF0VXBwZXJMZWZ0Q29ybmVy
ID0gdHJ1ZTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>