<?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>100797</bug_id>
          
          <creation_ts>2012-10-30 17:07:17 -0700</creation_ts>
          <short_desc>Coordinated Graphics: Manage the lifecycle of shareable surfaces precisely.</short_desc>
          <delta_ts>2012-11-02 00:33:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>100907</dependson>
          <blocked>100341</blocked>
    
    <blocked>100819</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dongseong Hwang">dongseong.hwang</reporter>
          <assigned_to name="Dongseong Hwang">dongseong.hwang</assigned_to>
          <cc>d.nomiyama</cc>
    
    <cc>jaepark</cc>
    
    <cc>jturcotte</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>noam</cc>
    
    <cc>ostap73</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yoon</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>754806</commentid>
    <comment_count>0</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-30 17:07:17 -0700</bug_when>
    <thetext>This patch makes UpdateAtlas manage the lifecycle of shareable surfaces
containing the updates in the way how CoordinatedTile manages the lifecycle of
tiles. Currently, UI Process creates the shareable surface when receiving an
UpdateTileForLayer message, but there is no exact point to remove the shareable
surface. Now, we introduce new two messages to handle the lifecycle:
CreateUpdateAtlas and RemoveUpdateAtlas.

This patch gives us two benefits.
1. Reduce file and mmap operations. Web Process does not need to duplicate a
file handle every tile update. UI Proces does not need to create a
ShareableSurface every UpdateTileForLayer message.
2. Save memory. We can remove a ShareableSurface in UI Process when UpdateAtlas
in Web Process is removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754807</commentid>
    <comment_count>1</comment_count>
      <attachid>171553</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-30 17:09:37 -0700</bug_when>
    <thetext>Created attachment 171553
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754813</commentid>
    <comment_count>2</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-30 17:15:13 -0700</bug_when>
    <thetext>Since Bug 91609, LayerTreeCoordinatorProxy has not keep a shareable surface if a shareable surface backed ShareableBitmap, not GraphicsSurface.
Bug 91609 said &quot;Caching of ShareableSurfaces breaks tiling&quot; if a shareable surface backed ShareableBitmap.
However, I can not understand fully.

This patch makes LayerTreeCoordinatorProxy keep a ShareableSurfaces regardless of the backed implementation of a shareable surface. I&apos;m afraid that this patch causes the bug that Bug 91609 fixed. 
I need advice :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754821</commentid>
    <comment_count>3</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-10-30 17:27:23 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Since Bug 91609, LayerTreeCoordinatorProxy has not keep a shareable surface if a shareable surface backed ShareableBitmap, not GraphicsSurface.
&gt; Bug 91609 said &quot;Caching of ShareableSurfaces breaks tiling&quot; if a shareable surface backed ShareableBitmap.
&gt; However, I can not understand fully.
&gt; 
&gt; This patch makes LayerTreeCoordinatorProxy keep a ShareableSurfaces regardless of the backed implementation of a shareable surface. I&apos;m afraid that this patch causes the bug that Bug 91609 fixed. 
&gt; I need advice :)

I don&apos;t fully understand myself bug 91609 and why tiling was broken. Zeno, Kenneth, Jocelyn?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755112</commentid>
    <comment_count>4</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-10-31 03:14:06 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; Since Bug 91609, LayerTreeCoordinatorProxy has not keep a shareable surface if a shareable surface backed ShareableBitmap, not GraphicsSurface.
&gt; &gt; Bug 91609 said &quot;Caching of ShareableSurfaces breaks tiling&quot; if a shareable surface backed ShareableBitmap.
&gt; &gt; However, I can not understand fully.
&gt; &gt; 
&gt; &gt; This patch makes LayerTreeCoordinatorProxy keep a ShareableSurfaces regardless of the backed implementation of a shareable surface. I&apos;m afraid that this patch causes the bug that Bug 91609 fixed. 
&gt; &gt; I need advice :)
&gt; 
&gt; I don&apos;t fully understand myself bug 91609 and why tiling was broken. Zeno, Kenneth, Jocelyn?

If i remember correctly, this was the following issue:
Once a GraphicsSurface has been created, the instance will be reused &quot;endlessly&quot;, unless the surface changes size or the page is reloaded. So in other words, the instance remains the same, but the texture bound to the surface changes.

Now with the ShareableSurface we have two cases:
If it is backed by a GraphicsSurface, we can cache it.
If it is backed by a BitmapTexture, we actually have to reload the bitmap, because the bitmap is actually transferred through IPC, and therefore it is not sufficient to just redraw a texture.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755143</commentid>
    <comment_count>5</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-31 04:25:12 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; I don&apos;t fully understand myself bug 91609 and why tiling was broken. Zeno, Kenneth, Jocelyn?
&gt; 
&gt; If i remember correctly, this was the following issue:
&gt; Once a GraphicsSurface has been created, the instance will be reused &quot;endlessly&quot;, unless the surface changes size or the page is reloaded. So in other words, the instance remains the same, but the texture bound to the surface changes.
&gt; 
&gt; Now with the ShareableSurface we have two cases:
&gt; If it is backed by a GraphicsSurface, we can cache it.
&gt; If it is backed by a BitmapTexture, we actually have to reload the bitmap, because the bitmap is actually transferred through IPC, and therefore it is not sufficient to just redraw a texture.

Thanks for explanation.

As I understand your explanation, if ShareableSurface is backed by a ShareableBitmap (not BitmapTexture), UI Process can read the image data while Web Process is writing.
I don&apos;t know exact implementation in the past, but currently it is impossible.

I briefly summarize current implementation.
1. CoordinatedTile draws on ShareableSurface in Web Process.
2. Web Process send an update message to UI Process.
3. UI Process updates BitmapTexture using ShareableSurface.

NOTE
a) Before #3 is completed, #1 can not start again because UI Process sends a RenderNextFrame message after #3 is completed.
b) BitmapTexture can not be backed by ShareableSurface. BitmapTexture is just updated using ShareableSurface.


I put ShareableSurface::copyToTexture below to clarify &quot;NOTE b)&quot;. ShareableSurface::copyToTexture just update BitmapTexture using itself regardless of it backed by GraphicsSurface or ShareableBitmap.

#if USE(TEXTURE_MAPPER)
void ShareableSurface::copyToTexture(PassRefPtr&lt;WebCore::BitmapTexture&gt; passTexture, const IntRect&amp; target, const IntPoint&amp; sourceOffset)
{
    RefPtr&lt;BitmapTexture&gt; texture(passTexture);

#if USE(GRAPHICS_SURFACE)
    if (isBackedByGraphicsSurface()) {
        RefPtr&lt;BitmapTextureGL&gt; textureGL = toBitmapTextureGL(texture.get());
        if (textureGL) {
            uint32_t textureID = textureGL-&gt;id();
            uint32_t textureTarget = textureGL-&gt;textureTarget();
            m_graphicsSurface-&gt;copyToGLTexture(textureTarget, textureID, target, sourceOffset);
            return;
        }

        RefPtr&lt;Image&gt; image = m_graphicsSurface-&gt;createReadOnlyImage(IntRect(sourceOffset, target.size()));
        if (image)
            texture-&gt;updateContents(image.get(), target, IntPoint::zero(), BitmapTexture::UpdateCanModifyOriginalImageData);
    }
#endif

    ASSERT(m_bitmap);
    RefPtr&lt;Image&gt; image = m_bitmap-&gt;createImage();
    texture-&gt;updateContents(image.get(), target, sourceOffset, BitmapTexture::UpdateCanModifyOriginalImageData);
    return;
}
#endif // USE(TEXTURE_MAPPER)


In my understanding, we can cache ShareableSurface in both cases. Could you feedback again? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755354</commentid>
    <comment_count>6</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-10-31 08:53:59 -0700</bug_when>
    <thetext>(In reply to comment #5)
Okay i probably mixed up BitmapTexture  and ShareableBitmap. - Sorry for the confusion.
But my point is the same anyway:
A ShareableSurface is either backed by a GraphicsSurface or by a ShareableBitmap.
Where you can simply reuse the GraphicsSurface, because it is actually double buffered, and the frontBuffer texture can simply be &quot;re-bound&quot; and be drawn.
In case of the ShareableSurface being backed by a ShareableBitmap you would actually need to reload the bitmap data from shared memory (Which is certainly done, when you recreate a new instance). This is why i believe, we cannot actually reuse the instance on the UIProcess side.

And that was what caused the bug that i fixed back then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755665</commentid>
    <comment_count>7</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-31 15:18:18 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; Okay i probably mixed up BitmapTexture  and ShareableBitmap. - Sorry for the confusion.
&gt; But my point is the same anyway:
&gt; A ShareableSurface is either backed by a GraphicsSurface or by a ShareableBitmap.
&gt; Where you can simply reuse the GraphicsSurface, because it is actually double buffered, and the frontBuffer texture can simply be &quot;re-bound&quot; and be drawn.
&gt; In case of the ShareableSurface being backed by a ShareableBitmap you would actually need to reload the bitmap data from shared memory (Which is certainly done, when you recreate a new instance). This is why i believe, we cannot actually reuse the instance on the UIProcess side.
&gt; 
&gt; And that was what caused the bug that i fixed back then.

Thank you for explanation!

I understand. I&apos;ll reproduce this behavior. If reproduced, I&apos;ll find the way how we flush or update brand new shared memory in UI Process gracefully.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755826</commentid>
    <comment_count>8</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-31 20:16:18 -0700</bug_when>
    <thetext>Hi, Zeno.

Could you say your environment in which you experienced this bug?

I can not reproduce this bug. I use Ubuntu 12.04.

I think animations/timing-functions.html is one of the best test cases for this bug, because Web Process makes progress various animations.
However, I can not reproduce. I have tested google, yahoo, youtube and nytimes also.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755897</commentid>
    <comment_count>9</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-31 22:50:28 -0700</bug_when>
    <thetext>We clarified the problem: If ShareableSurface is backed by ShareableBitmap, UI Process can read stale updates.

I surveyed whether the problem is possible.

In my conclusion, it is impossible at least on linux. I don&apos;t know the case of Mac and Win.

ShareableBitmap draws and reads a image using SharedMemory. SharedMemoryUnix uses shm_open and mmap to share memory between processes.
SharedMemory calls mmap with MAP_SHARED flag.
  mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fileDescriptor, 0);

The following document said &quot;The MAP_SHARED flag specifies that modifications made to the mapped file region are immediately visible to other processes which are mapped to the same region and also use the MAP_SHARED flag.&quot;
http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V50_HTML/ARH9TATE/SHMCHPXX.HTM

I means UI Process can not read stale updates.

So I think we can cache ShareableSurface in LayerTreeCoordinatorProxy. It can reduce redundant mmap calls.
If there are a problem in mac and win, I think it is the problem that SharedMemory[Port] should fix.
SharedMemory[Port] can solve this problem gracefully. For example,

void SharedMemory::Handle::encode(CoreIPC::ArgumentEncoder&amp; encoder) const
{
    ADD CODE TO FLUSH UPDATES HERE!!!!
    encoder &lt;&lt; static_cast&lt;uint64_t&gt;(m_size);
    encoder &lt;&lt; CoreIPC::MachPort(m_port, MACH_MSG_TYPE_MOVE_SEND);
    m_port = MACH_PORT_NULL;
}

bool SharedMemory::Handle::decode(CoreIPC::ArgumentDecoder* decoder, Handle&amp; handle)
{
    ASSERT(!handle.m_port);
    ASSERT(!handle.m_size);

    uint64_t size;
    if (!decoder-&gt;decodeUInt64(size))
        return false;

    CoreIPC::MachPort machPort;
    if (!decoder-&gt;decode(machPort))
        return false;
    
    handle.m_size = size;
    handle.m_port = machPort.port();

    ADD CODE TO SYNCH UPDATES HERE!!!!
    return true;
}

I think we can go with this patch. I need to listen your opinions!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755904</commentid>
    <comment_count>10</comment_count>
      <attachid>171771</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-31 22:57:14 -0700</bug_when>
    <thetext>Created attachment 171771
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755906</commentid>
    <comment_count>11</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-31 22:57:34 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Created an attachment (id=171771) [details]
&gt; Patch

Rebased to upstream.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756037</commentid>
    <comment_count>12</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-11-01 03:23:15 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; I think we can go with this patch. I need to listen your opinions!!

I have been looking at the bug 91609 again.
And i think the real problem was, that previously we used a compound key generated from layerID and tileID as a key for the surface map. Therefore even if the content changed in between the cached version was used. In your case you changed that to use an atlasID that you generate in the UpdateAtlas ctor.
So I would assume that this is alright. Also it seems you tested it for exactly that case. :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756266</commentid>
    <comment_count>13</comment_count>
      <attachid>171771</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-11-01 08:24:10 -0700</bug_when>
    <thetext>Comment on attachment 171771
Patch

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

Some nitpicks, otherwise good!

&gt; Source/WebKit2/ChangeLog:19
&gt; +        file handle every tile update. UI Proces does not need to create a

Proces -&gt; Process

&gt; Source/WebKit2/UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:82
&gt; +#ifndef NDEBUG
&gt; +    SurfaceMap::iterator it = m_surfaces.find(atlasID);
&gt; +    ASSERT(it == m_surfaces.end());
&gt; +#endif

ASSERT(!m_surfaces.contains(atlasID))

&gt; Source/WebKit2/UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:91
&gt; +#ifndef NDEBUG
&gt; +    SurfaceMap::iterator it = m_surfaces.find(atlasID);
&gt; +    ASSERT(it != m_surfaces.end());
&gt; +#endif

ditto

&gt; Source/WebKit2/WebProcess/WebPage/UpdateAtlas.cpp:39
&gt; +    static int id = 0;

id -&gt; nextID</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756755</commentid>
    <comment_count>14</comment_count>
      <attachid>171958</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-01 17:36:10 -0700</bug_when>
    <thetext>Created attachment 171958
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756756</commentid>
    <comment_count>15</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-01 17:36:47 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; I think we can go with this patch. I need to listen your opinions!!
&gt; 
&gt; I have been looking at the bug 91609 again.
&gt; And i think the real problem was, that previously we used a compound key generated from layerID and tileID as a key for the surface map. Therefore even if the content changed in between the cached version was used. In your case you changed that to use an atlasID that you generate in the UpdateAtlas ctor.
&gt; So I would assume that this is alright. Also it seems you tested it for exactly that case. :-)

Thanks for investigation. I understand now :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756758</commentid>
    <comment_count>16</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-01 17:37:38 -0700</bug_when>
    <thetext>Thanks for your review!

(In reply to comment #13)
&gt; (From update of attachment 171771 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=171771&amp;action=review
&gt; 
&gt; Some nitpicks, otherwise good!
&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:19
&gt; &gt; +        file handle every tile update. UI Proces does not need to create a
&gt; 
&gt; Proces -&gt; Process

Done.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:82
&gt; &gt; +#ifndef NDEBUG
&gt; &gt; +    SurfaceMap::iterator it = m_surfaces.find(atlasID);
&gt; &gt; +    ASSERT(it == m_surfaces.end());
&gt; &gt; +#endif
&gt; 
&gt; ASSERT(!m_surfaces.contains(atlasID))

Done.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:91
&gt; &gt; +#ifndef NDEBUG
&gt; &gt; +    SurfaceMap::iterator it = m_surfaces.find(atlasID);
&gt; &gt; +    ASSERT(it != m_surfaces.end());
&gt; &gt; +#endif
&gt; 
&gt; ditto

ditto

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/UpdateAtlas.cpp:39
&gt; &gt; +    static int id = 0;
&gt; 
&gt; id -&gt; nextID

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756936</commentid>
    <comment_count>17</comment_count>
      <attachid>171958</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-02 00:23:20 -0700</bug_when>
    <thetext>Comment on attachment 171958
Patch

Clearing flags on attachment: 171958

Committed r133270: &lt;http://trac.webkit.org/changeset/133270&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756938</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-02 00:23:25 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756945</commentid>
    <comment_count>19</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-02 00:33:05 -0700</bug_when>
    <thetext>Thank you for review, noam. :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171553</attachid>
            <date>2012-10-30 17:09:37 -0700</date>
            <delta_ts>2012-10-31 22:57:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100797-20121031090801.patch</filename>
            <type>text/plain</type>
            <size>24813</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyOTQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMDNhNzUzOTUyYWZkMjJm
YTc0NTk5ZDY4MjZiNzRiOWFhMmI1MjY0OC4uMDRkZDc3NGVhM2FlNzk4MGM5MmFjNDU1OGQ0OThm
OTQ1YzMwZDUwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDEyLTEwLTMwICBIdWFu
ZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIENvb3JkaW5h
dGVkIEdyYXBoaWNzOiBNYW5hZ2UgdGhlIGxpZmVjeWNsZSBvZiBzaGFyZWFibGUgc3VyZmFjZXMg
cHJlY2lzZWx5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTAwNzk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgSW50ZXJuYWwgUmV2aWV3IGJ5IEd3YW5nIFlvb24gSHdhbmcgYW5kIEphZSBIeXVuIFBhcmsu
CisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBVcGRhdGVBdGxhcyBtYW5hZ2UgdGhlIGxpZmVj
eWNsZSBvZiBzaGFyZWFibGUgc3VyZmFjZXMKKyAgICAgICAgY29udGFpbmluZyB0aGUgdXBkYXRl
cyBpbiB0aGUgd2F5IGhvdyBDb29yZGluYXRlZFRpbGUgbWFuYWdlcyB0aGUgbGlmZWN5Y2xlIG9m
CisgICAgICAgIHRpbGVzLiBDdXJyZW50bHksIFVJIFByb2Nlc3MgY3JlYXRlcyB0aGUgc2hhcmVh
YmxlIHN1cmZhY2Ugd2hlbiByZWNlaXZpbmcgYW4KKyAgICAgICAgVXBkYXRlVGlsZUZvckxheWVy
IG1lc3NhZ2UsIGJ1dCB0aGVyZSBpcyBubyBleGFjdCBwb2ludCB0byByZW1vdmUgdGhlIHNoYXJl
YWJsZQorICAgICAgICBzdXJmYWNlLiBOb3csIHdlIGludHJvZHVjZSBuZXcgdHdvIG1lc3NhZ2Vz
IHRvIGhhbmRsZSB0aGUgbGlmZWN5Y2xlOgorICAgICAgICBDcmVhdGVVcGRhdGVBdGxhcyBhbmQg
UmVtb3ZlVXBkYXRlQXRsYXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBnaXZlcyB1cyB0d28gYmVu
ZWZpdHMuCisgICAgICAgIDEuIFJlZHVjZSBmaWxlIGFuZCBtbWFwIG9wZXJhdGlvbnMuIFdlYiBQ
cm9jZXNzIGRvZXMgbm90IG5lZWQgdG8gZHVwbGljYXRlIGEKKyAgICAgICAgZmlsZSBoYW5kbGUg
ZXZlcnkgdGlsZSB1cGRhdGUuIFVJIFByb2NlcyBkb2VzIG5vdCBuZWVkIHRvIGNyZWF0ZSBhCisg
ICAgICAgIFNoYXJlYWJsZVN1cmZhY2UgZXZlcnkgVXBkYXRlVGlsZUZvckxheWVyIG1lc3NhZ2Uu
CisgICAgICAgIDIuIFNhdmUgbWVtb3J5LiBXZSBjYW4gcmVtb3ZlIGEgU2hhcmVhYmxlU3VyZmFj
ZSBpbiBVSSBQcm9jZXNzIHdoZW4gVXBkYXRlQXRsYXMKKyAgICAgICAgaW4gV2ViIFByb2Nlc3Mg
aXMgcmVtb3ZlZC4KKworICAgICAgICAqIFNoYXJlZC9TdXJmYWNlVXBkYXRlSW5mby5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvOjplbmNvZGUpOgorICAgICAgICAoV2Vi
S2l0OjpTdXJmYWNlVXBkYXRlSW5mbzo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvU3VyZmFj
ZVVwZGF0ZUluZm8uaDoKKyAgICAgICAgKFN1cmZhY2VVcGRhdGVJbmZvKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6dXBkYXRlVGls
ZUZvckxheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6
Y3JlYXRlVXBkYXRlQXRsYXMpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6cmVtb3ZlVXBkYXRlQXRsYXMpOgorICAgICAgICAo
V2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpwdXJnZUJhY2tpbmdTdG9yZXMpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHkuaDoKKyAgICAgICAgKExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHkubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YmVnaW5Db250ZW50VXBkYXRlKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIuaDoKKyAgICAgICAgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCk6Cisg
ICAgICAgIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkNvb3JkaW5hdGVkVGlsZTo6dXBkYXRlQmFja0J1ZmZlcik6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmg6
CisgICAgICAgIChDb29yZGluYXRlZFRpbGVDbGllbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZVVwZGF0ZUF0bGFzKToK
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9y
OjpyZW1vdmVVcGRhdGVBdGxhcyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5h
dG9yOjpiZWdpbkNvbnRlbnRVcGRhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmg6CisgICAgICAgIChMYXll
clRyZWVDb29yZGluYXRvcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0
bGFzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlQXRsYXM6OlVwZGF0ZUF0bGFzKToKKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjp+VXBkYXRlQXRs
YXMpOgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVBdGxhczo6YmVnaW5QYWludGluZ09uQXZhaWxh
YmxlQnVmZmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuaDoK
KyAgICAgICAgKFVwZGF0ZUF0bGFzQ2xpZW50KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
IChVcGRhdGVBdGxhcyk6CisKIDIwMTItMTAtMzAgIEplc3NlIHZhbiBkZW4gS2llYm9vbSAgPGpl
c3NldmRrQGdub21lLm9yZz4KIAogICAgICAgICBGaXhlZCB0cmFuc2ZlciBhbm5vdGF0aW9uIGZv
ciBkZWZhdWx0IHdlYiBjb250ZXh0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
U3VyZmFjZVVwZGF0ZUluZm8uY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1N1cmZhY2VVcGRh
dGVJbmZvLmNwcAppbmRleCBmZGFjMjE3YzU1Yjk1NzZkMWVhMTFkYTM0N2Q5MDNkNTkwNTc0NDgw
Li40MTQ3Y2VhYTdhMmYxOGM4MGFjNjUxNmI3YjA0Y2I1Y2MxOTI3NWFiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvU3VyZmFjZVVwZGF0ZUluZm8uY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9TdXJmYWNlVXBkYXRlSW5mby5jcHAKQEAgLTI4LDcgKzI4LDcgQEAgdm9p
ZCBTdXJmYWNlVXBkYXRlSW5mbzo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5j
b2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyLmVuY29kZSh1cGRhdGVSZWN0KTsKICAgICBlbmNv
ZGVyLmVuY29kZShzY2FsZUZhY3Rvcik7Ci0gICAgZW5jb2Rlci5lbmNvZGUoc3VyZmFjZUhhbmRs
ZSk7CisgICAgZW5jb2Rlci5lbmNvZGUoYXRsYXNJRCk7CiAgICAgZW5jb2Rlci5lbmNvZGUoc3Vy
ZmFjZU9mZnNldCk7CiB9CiAKQEAgLTM4LDcgKzM4LDcgQEAgYm9vbCBTdXJmYWNlVXBkYXRlSW5m
bzo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgU3VyZmFjZVVwZGF0
ZUkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHJlc3Vs
dC5zY2FsZUZhY3RvcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIt
PmRlY29kZShyZXN1bHQuc3VyZmFjZUhhbmRsZSkpCisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUo
cmVzdWx0LmF0bGFzSUQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVy
LT5kZWNvZGUocmVzdWx0LnN1cmZhY2VPZmZzZXQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU3VyZmFjZVVwZGF0ZUluZm8uaCBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9TdXJmYWNlVXBkYXRlSW5mby5oCmluZGV4IDNjZDljZTNjNzE1
NWM5MDc3MTdlMGRhZWEzZDE2ZWVhYzYxYTk2MmYuLmUwODk2N2Q5NjcxYTY0ZWNkMzU4NGM4NmUx
MzRmODAzNDA5MzdiNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TdXJmYWNl
VXBkYXRlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TdXJmYWNlVXBkYXRlSW5m
by5oCkBAIC0yMCw3ICsyMCw2IEBACiAjaWZuZGVmIFN1cmZhY2VVcGRhdGVJbmZvX2gKICNkZWZp
bmUgU3VyZmFjZVVwZGF0ZUluZm9faAogCi0jaW5jbHVkZSAiU2hhcmVhYmxlU3VyZmFjZS5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgogCkBAIC00Niw4ICs0NSw4IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgcGFnZSBzY2FsZSBmYWN0
b3IgdXNlZCB0byByZW5kZXIgdGhpcyB1cGRhdGUuCiAgICAgZmxvYXQgc2NhbGVGYWN0b3I7CiAK
LSAgICAvLyBUaGUgaGFuZGxlIG9mIHRoZSBzaGFyZWFibGUgYml0bWFwIGNvbnRhaW5pbmcgdGhl
IHVwZGF0ZXMuIFdpbGwgYmUgbnVsbCBpZiB0aGVyZSBhcmUgbm8gdXBkYXRlcy4KLSAgICBTaGFy
ZWFibGVTdXJmYWNlOjpIYW5kbGUgc3VyZmFjZUhhbmRsZTsKKyAgICAvLyBUaGUgaWQgb2YgdGhl
IHVwZGF0ZSBhdGxhcyBpbmNsdWRpbmcgdGhlIHNoYXJlYWJsZSBiaXRtYXAgY29udGFpbmluZyB0
aGUgdXBkYXRlcy4KKyAgICBpbnQgYXRsYXNJRDsKIAogICAgIC8vIFRoZSBvZmZzZXQgaW4gdGhl
IGJpdG1hcCB3aGVyZSB0aGUgcmVuZGVyZWQgY29udGVudHMgYXJlLgogICAgIFdlYkNvcmU6Oklu
dFBvaW50IHN1cmZhY2VPZmZzZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHkuY3BwCmluZGV4IDFkMWQ0ZmUyN2RkMzE2NDI2ZmE2NjRkYTk0OGQ0ODMxYWJi
ZTZlYWEuLmYxYzRiZjNmM2M5NDNjNGM3N2FkODY4OTZhZWMwZWVjOTI1NTI1OGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCkBAIC02NCwyMiAr
NjQsOSBAQCB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmNyZWF0ZVRpbGVGb3JMYXll
cihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29ucwogCiB2b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHk6OnVwZGF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29u
c3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyYg
dXBkYXRlSW5mbykKIHsKLSAgICBSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gc3VyZmFjZTsKLSNp
ZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBHcmFwaGljc1N1cmZhY2VUb2tlbiB0b2tlbiA9
IHVwZGF0ZUluZm8uc3VyZmFjZUhhbmRsZS5ncmFwaGljc1N1cmZhY2VUb2tlbigpOwotICAgIGlm
ICh0b2tlbi5pc1ZhbGlkKCkpIHsKLSAgICAgICAgSGFzaE1hcDxHcmFwaGljc1N1cmZhY2VUb2tl
bjo6QnVmZmVySGFuZGxlLCBSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gPjo6aXRlcmF0b3IgaXQg
PSBtX3N1cmZhY2VzLmZpbmQodG9rZW4uZnJvbnRCdWZmZXJIYW5kbGUpOwotICAgICAgICBpZiAo
aXQgPT0gbV9zdXJmYWNlcy5lbmQoKSkgewotICAgICAgICAgICAgc3VyZmFjZSA9IFNoYXJlYWJs
ZVN1cmZhY2U6OmNyZWF0ZSh1cGRhdGVJbmZvLnN1cmZhY2VIYW5kbGUpOwotICAgICAgICAgICAg
bV9zdXJmYWNlcy5hZGQodG9rZW4uZnJvbnRCdWZmZXJIYW5kbGUsIHN1cmZhY2UpOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIHN1cmZhY2UgPSBpdC0+dmFsdWU7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIHN1cmZhY2UgPSBTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGUodXBkYXRlSW5mby5zdXJm
YWNlSGFuZGxlKTsKLSNlbHNlCi0gICAgc3VyZmFjZSA9IFNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0
ZSh1cGRhdGVJbmZvLnN1cmZhY2VIYW5kbGUpOwotI2VuZGlmCi0gICAgZGlzcGF0Y2hVcGRhdGUo
YmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxh
eWVySUQsIHRpbGVJRCwgTGF5ZXJUcmVlUmVuZGVyZXI6OlRpbGVVcGRhdGUodXBkYXRlSW5mby51
cGRhdGVSZWN0LCB0YXJnZXRSZWN0LCBzdXJmYWNlLCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQp
KSk7CisgICAgU3VyZmFjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N1cmZhY2VzLmZpbmQodXBkYXRl
SW5mby5hdGxhc0lEKTsKKyAgICBBU1NFUlQoaXQgIT0gbV9zdXJmYWNlcy5lbmQoKSk7CisgICAg
ZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVRpbGUsIG1fcmVu
ZGVyZXIuZ2V0KCksIGxheWVySUQsIHRpbGVJRCwgTGF5ZXJUcmVlUmVuZGVyZXI6OlRpbGVVcGRh
dGUodXBkYXRlSW5mby51cGRhdGVSZWN0LCB0YXJnZXRSZWN0LCBpdC0+dmFsdWUsIHVwZGF0ZUlu
Zm8uc3VyZmFjZU9mZnNldCkpKTsKIH0KIAogdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5
OjpyZW1vdmVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQpCkBAIC04Nyw2ICs3
NCwyNCBAQCB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnJlbW92ZVRpbGVGb3JMYXll
cihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKICAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXll
clRyZWVSZW5kZXJlcjo6cmVtb3ZlVGlsZSwgbV9yZW5kZXJlci5nZXQoKSwgbGF5ZXJJRCwgdGls
ZUlEKSk7CiB9CiAKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Y3JlYXRlVXBkYXRl
QXRsYXMoaW50IGF0bGFzSUQsIGNvbnN0IFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYgaGFuZGxl
KQoreworI2lmbmRlZiBOREVCVUcKKyAgICBTdXJmYWNlTWFwOjppdGVyYXRvciBpdCA9IG1fc3Vy
ZmFjZXMuZmluZChhdGxhc0lEKTsKKyAgICBBU1NFUlQoaXQgPT0gbV9zdXJmYWNlcy5lbmQoKSk7
CisjZW5kaWYKKyAgICBtX3N1cmZhY2VzLmFkZChhdGxhc0lELCBTaGFyZWFibGVTdXJmYWNlOjpj
cmVhdGUoaGFuZGxlKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6cmVt
b3ZlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQpCit7CisjaWZuZGVmIE5ERUJVRworICAgIFN1cmZh
Y2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdXJmYWNlcy5maW5kKGF0bGFzSUQpOworICAgIEFTU0VS
VChpdCAhPSBtX3N1cmZhY2VzLmVuZCgpKTsKKyNlbmRpZgorICAgIG1fc3VyZmFjZXMucmVtb3Zl
KGF0bGFzSUQpOworfQorCiB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmRlbGV0ZUNv
bXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCBpZCkKIHsKICAgICBkaXNwYXRjaFVwZGF0ZShiaW5k
KCZMYXllclRyZWVSZW5kZXJlcjo6ZGVsZXRlTGF5ZXIsIG1fcmVuZGVyZXIuZ2V0KCksIGlkKSk7
CkBAIC0yMDMsOSArMjA4LDYgQEAgdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzeW5j
Q2FudmFzKHVpbnQzMl90IGlkLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXoKIHZvaWQgTGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eTo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKIHsKICAgICBtX2RyYXdp
bmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVD
b29yZGluYXRvcjo6UHVyZ2VCYWNraW5nU3RvcmVzKCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFn
ZSgpLT5wYWdlSUQoKSk7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgbV9zdXJmYWNl
cy5jbGVhcigpOwotI2VuZGlmCiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHkuaAppbmRleCAwZDE3NTk5MjcxNjZhZDJlMDdjODAxZDVlMThmNGJlMzdl
YjU2ZjExLi4wY2E4MTFmY2RhZjY2NWVmNzI0NGJjZjE1M2JkZTQ3MWI4NDc2NWNjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRy
ZWVDb29yZGluYXRvclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oCkBAIC0yNiw2ICsyNiw3
IEBACiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgiCiAjaW5j
bHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgogI2luY2x1ZGUgIlJlZ2lvbi5oIgorI2luY2x1ZGUg
IlNoYXJlYWJsZVN1cmZhY2UuaCIKICNpbmNsdWRlICJTdXJmYWNlVXBkYXRlSW5mby5oIgogI2lu
Y2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29u
dGV4dC5oPgpAQCAtNzAsNiArNzEsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjcmVhdGVUaWxlRm9y
TGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBj
b25zdCBTdXJmYWNlVXBkYXRlSW5mbyYpOwogICAgIHZvaWQgdXBkYXRlVGlsZUZvckxheWVyKGlu
dCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgU3Vy
ZmFjZVVwZGF0ZUluZm8mKTsKICAgICB2b2lkIHJlbW92ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJ
RCwgaW50IHRpbGVJRCk7CisgICAgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCwg
Y29uc3QgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJik7CisgICAgdm9pZCByZW1vdmVVcGRhdGVB
dGxhcyhpbnQgYXRsYXNJRCk7CiAgICAgdm9pZCBjcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZShpbnQ2NF90LCBjb25zdCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJik7CiAgICAg
dm9pZCBkZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCk7CiAgICAgdm9pZCBk
aWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVj
dGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKTsKQEAg
LTk2LDkgKzk5LDggQEAgcHJvdGVjdGVkOgogICAgIFdlYkNvcmU6OkludFJlY3QgbV9sYXN0U2Vu
dFZpc2libGVSZWN0OwogICAgIGZsb2F0IG1fbGFzdFNlbnRTY2FsZTsKICAgICBXZWJDb3JlOjpG
bG9hdFBvaW50IG1fbGFzdFNlbnRUcmFqZWN0b3J5VmVjdG9yOwotI2lmIFVTRShHUkFQSElDU19T
VVJGQUNFKQotICAgIEhhc2hNYXA8V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW46OkJ1ZmZl
ckhhbmRsZSwgUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+ID4gbV9zdXJmYWNlczsKLSNlbmRpZgor
ICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQgLyogYXRsYXNJRCAqLywgUmVmUHRyPFNoYXJlYWJsZVN1
cmZhY2U+ID4gU3VyZmFjZU1hcDsKKyAgICBTdXJmYWNlTWFwIG1fc3VyZmFjZXM7CiB9OwogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5t
ZXNzYWdlcy5pbgppbmRleCBiODQyYjk5NTAwZmUyM2NmOGNhMDc0ZGZkM2Y5ZmRjM2RmZGI4ZjNl
Li5iYTg4ZGU1M2ZmMzNlNDVmMWQwODhhM2QyMDU1NzBhNDBmZDRiNTY3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29y
ZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4K
QEAgLTI5LDYgKzI5LDggQEAgbWVzc2FnZXMgLT4gTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSB7
CiAgICAgQ3JlYXRlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIGludCB0aWxlSUQsIFdl
YkNvcmU6OkludFJlY3QgdGFyZ2V0UmVjdCwgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyB1cGRh
dGVJbmZvKQogICAgIFVwZGF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCBpbnQgdGls
ZUlELCBXZWJDb3JlOjpJbnRSZWN0IHRhcmdldFJlY3QsIFdlYktpdDo6U3VyZmFjZVVwZGF0ZUlu
Zm8gdXBkYXRlSW5mbykKICAgICBSZW1vdmVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwg
aW50IHRpbGVJRCkKKyAgICBDcmVhdGVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCwgV2ViS2l0OjpT
aGFyZWFibGVTdXJmYWNlOjpIYW5kbGUgaGFuZGxlKQorICAgIFJlbW92ZVVwZGF0ZUF0bGFzKGlu
dCBhdGxhc0lEKQogICAgIENyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5
LCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSkKICAgICBEZXN0cm95RGly
ZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXkpCiAgICAgRGlkUmVuZGVyRnJhbWUoV2Vi
Q29yZTo6SW50U2l6ZSBjb250ZW50c1NpemUsIFdlYkNvcmU6OkludFJlY3QgY292ZXJlZFJlY3Qp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyLmNwcAppbmRleCBmNjQ3YzRlYjJiOTUwZDE2NDNkY2JkYjYwNjA0ZDg0ZDMyNzBlOWE1
Li44MWQzZGZhNzczZDcwZjkwYmExMWQ5NDc3YzNiYjliZGUzNDY2ZTQ2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAK
QEAgLTY1MSw5ICs2NTEsOSBAQCBDb2xvciBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVk
QmFja2luZ1N0b3JlQmFja2dyb3VuZENvbG9yKCkgY29uc3QKICAgICByZXR1cm4gY29udGVudHNP
cGFxdWUoKSA/IENvbG9yOjp3aGl0ZSA6IENvbG9yOjp0cmFuc3BhcmVudDsKIH0KIAotUGFzc093
blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
YmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUsIFNoYXJlYWJs
ZVN1cmZhY2U6OkhhbmRsZSYgaGFuZGxlLCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zmc2V0KQorUGFz
c093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6YmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUsIGludCYg
YXRsYXMsIFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQpCiB7Ci0gICAgcmV0dXJuIG1fQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50LT5iZWdpbkNvbnRlbnRVcGRhdGUoc2l6ZSwgY29udGVu
dHNPcGFxdWUoKSA/IDAgOiBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEsIGhhbmRsZSwg
b2Zmc2V0KTsKKyAgICByZXR1cm4gbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQtPmJl
Z2luQ29udGVudFVwZGF0ZShzaXplLCBjb250ZW50c09wYXF1ZSgpID8gMCA6IFNoYXJlYWJsZUJp
dG1hcDo6U3VwcG9ydHNBbHBoYSwgYXRsYXMsIG9mZnNldCk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpjcmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRh
dGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaAppbmRl
eCA4MjZkZjZkYjFhZGU5OTNmM2ZkMzA0NTM2MGMzMmVhNWM4ZTM4MWY0Li5hOGMyYTljZWYwNzUz
YzRjZWMxNzExNzA0MjI4NTM1MTBiNDU5NWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaApAQCAtNzIsNyArNzIsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaExheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NMYXllciopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzeW5j
Rml4ZWRMYXllcnMoKSA9IDA7Ci0gICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBT
aGFyZWFibGVCaXRtYXA6OkZsYWdzLCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmLCBXZWJDb3Jl
OjpJbnRQb2ludCYpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFNo
YXJlYWJsZUJpdG1hcDo6RmxhZ3MsIGludCYgYXRsYXNJRCwgV2ViQ29yZTo6SW50UG9pbnQmKSA9
IDA7CiB9OwogfQogCkBAIC0xNTAsNyArMTUwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBjcmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8m
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUo
aW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShpbnQgdGlsZUlEKTsK
LSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNv
bnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdlYktpdDo6U2hhcmVhYmxlU3Vy
ZmFjZTo6SGFuZGxlJiwgV2ViQ29yZTo6SW50UG9pbnQmKTsKKyAgICB2aXJ0dWFsIFBhc3NPd25Q
dHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYsIGludCYgYXRsYXNJRCwgV2ViQ29yZTo6SW50UG9pbnQmKTsKIAogICAg
IHZvaWQgc2V0Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KFdlYktpdDo6Q29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyQ2xpZW50Kik7CiAgICAgdm9pZCBzeW5jQ2hpbGRyZW4oKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkVGlsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuY3BwCmluZGV4IDY2OGNhNWQ5
ZWRlNDk5ZGVhMmFlYjU5MjA2Mzg3ZmRkNmYyZTlhYTUuLjU0OGQ0OWQzMjdmMDM1NTMyNzQ2ZmQy
ZmI1OTU1YmQ2MWRhOGJhYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRUaWxlLmNwcApAQCAtNzMsNyArNzMsNyBAQCBWZWN0b3I8SW50UmVjdD4gQ29vcmRpbmF0
ZWRUaWxlOjp1cGRhdGVCYWNrQnVmZmVyKCkKICAgICAgICAgcmV0dXJuIFZlY3RvcjxJbnRSZWN0
PigpOwogCiAgICAgU3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbzsKLSAgICBPd25QdHI8R3Jh
cGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBtX2NsaWVudC0+YmVnaW5Db250ZW50VXBk
YXRlKG1fZGlydHlSZWN0LnNpemUoKSwgdXBkYXRlSW5mby5zdXJmYWNlSGFuZGxlLCB1cGRhdGVJ
bmZvLnN1cmZhY2VPZmZzZXQpOworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNz
Q29udGV4dCA9IG1fY2xpZW50LT5iZWdpbkNvbnRlbnRVcGRhdGUobV9kaXJ0eVJlY3Quc2l6ZSgp
LCB1cGRhdGVJbmZvLmF0bGFzSUQsIHVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCk7CiAgICAgaWYg
KCFncmFwaGljc0NvbnRleHQpCiAgICAgICAgIHJldHVybiBWZWN0b3I8SW50UmVjdD4oKTsKICAg
ICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZSgtbV9kaXJ0eVJlY3QueCgpLCAtbV9kaXJ0eVJl
Y3QueSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmgKaW5k
ZXggODRkMTEzNGYwNDJlOWY1MmUwM2ZjYjQxMmMwM2QzMzdhNjQ1NzlmNC4uMzJmZjRlN2M3OTFm
MmJlMzRiNTAzODAwODU2NTgzODZlZTFlYzYzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmgK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRUaWxlLmgKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIFVTRShUSUxFRF9C
QUNLSU5HX1NUT1JFKQogCi0jaW5jbHVkZSAiU2hhcmVhYmxlU3VyZmFjZS5oIgogI2luY2x1ZGUg
IlRpbGUuaCIKICNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIldlYkNv
cmUvSW50UmVjdC5oIgpAQCAtNzksNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IGNyZWF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKGludCB0
aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShpbnQgdGlsZUlEKSA9IDA7Ci0gICAg
dmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250ZW50
VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUm
LCBXZWJDb3JlOjpJbnRQb2ludCYpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYsIGludCYgYXRsYXNJRCwgV2ViQ29yZTo6SW50UG9pbnQmKSA9IDA7CiB9OwogCiBjbGFz
cyBDb29yZGluYXRlZFRpbGVCYWNrZW5kIDogcHVibGljIFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0
b3JlQmFja2VuZCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVD
b29yZGluYXRvci5jcHAKaW5kZXggN2ViNDc5YmUwODE2MjFjNzliZTkxMTVmNTY5OTRmMmNlMGIz
NWEwMC4uOWViMzc4ZTVkYTMzMWZjOGM5MWM1MmE0NDk5YjZhNTlkNGVmZjJhYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcApAQCAt
NjE2LDYgKzYxNiwxNiBAQCB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpyZW1vdmVUaWxlKFdl
YkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlJlbW92ZVRpbGVGb3JMYXllcihsYXllcklE
LCB0aWxlSUQpKTsKIH0KIAordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6Y3JlYXRlVXBkYXRl
QXRsYXMoaW50IGF0bGFzSUQsIGNvbnN0IFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYgaGFuZGxl
KQoreworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eTo6Q3JlYXRlVXBkYXRlQXRsYXMoYXRsYXNJRCwgaGFuZGxlKSk7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlQ29vcmRpbmF0b3I6OnJlbW92ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lEKQoreworICAg
IG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6UmVt
b3ZlVXBkYXRlQXRsYXMoYXRsYXNJRCkpOworfQorCiBXZWJDb3JlOjpJbnRSZWN0IExheWVyVHJl
ZUNvb3JkaW5hdG9yOjp2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QKIHsKICAgICByZXR1cm4g
bV92aXNpYmxlQ29udGVudHNSZWN0OwpAQCAtNjk5LDIzICs3MDksMjMgQEAgdm9pZCBMYXllclRy
ZWVDb29yZGluYXRvcjo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKICAgICBtX3VwZGF0ZUF0bGFzZXMu
Y2xlYXIoKTsKIH0KIAotUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IExheWVy
VHJlZUNvb3JkaW5hdG9yOjpiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgc2l6ZSwgU2hhcmVhYmxlQml0bWFwOjpGbGFncyBmbGFncywgU2hhcmVhYmxlU3VyZmFjZTo6
SGFuZGxlJiBoYW5kbGUsIFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQpCitQYXNzT3duUHRyPFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmJlZ2luQ29udGVu
dFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBTaGFyZWFibGVCaXRtYXA6OkZs
YWdzIGZsYWdzLCBpbnQmIGF0bGFzSUQsIFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQpCiB7CiAg
ICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0OwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgVXBkYXRlQXRsYXMqIGF0bGFzID0gbV91cGRhdGVBdGxhc2VzW2ldLmdldCgpOwog
ICAgICAgICBpZiAoYXRsYXMtPmZsYWdzKCkgPT0gZmxhZ3MpIHsKICAgICAgICAgICAgIC8vIFRo
aXMgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGVyZSBpcyBubyBhdmFpbGFibGUgYnVmZmVyIHNwYWNl
LgotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0ID0gYXRsYXMtPmJlZ2luUGFpbnRpbmdPbkF2
YWlsYWJsZUJ1ZmZlcihoYW5kbGUsIHNpemUsIG9mZnNldCk7CisgICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQgPSBhdGxhcy0+YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKGF0bGFzSUQs
IHNpemUsIG9mZnNldCk7CiAgICAgICAgICAgICBpZiAoZ3JhcGhpY3NDb250ZXh0KQogICAgICAg
ICAgICAgICAgIHJldHVybiBncmFwaGljc0NvbnRleHQucmVsZWFzZSgpOwogICAgICAgICB9CiAg
ICAgfQogCiAgICAgc3RhdGljIGNvbnN0IGludCBTY3JhdGNoQnVmZmVyRGltZW5zaW9uID0gMTAy
NDsgLy8gU2hvdWxkIGJlIGEgcG93ZXIgb2YgdHdvLgotICAgIG1fdXBkYXRlQXRsYXNlcy5hcHBl
bmQoYWRvcHRQdHIobmV3IFVwZGF0ZUF0bGFzKFNjcmF0Y2hCdWZmZXJEaW1lbnNpb24sIGZsYWdz
KSkpOworICAgIG1fdXBkYXRlQXRsYXNlcy5hcHBlbmQoYWRvcHRQdHIobmV3IFVwZGF0ZUF0bGFz
KHRoaXMsIFNjcmF0Y2hCdWZmZXJEaW1lbnNpb24sIGZsYWdzKSkpOwogICAgIHNjaGVkdWxlUmVs
ZWFzZUluYWN0aXZlQXRsYXNlcygpOwotICAgIHJldHVybiBtX3VwZGF0ZUF0bGFzZXMubGFzdCgp
LT5iZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIoaGFuZGxlLCBzaXplLCBvZmZzZXQpOwor
ICAgIHJldHVybiBtX3VwZGF0ZUF0bGFzZXMubGFzdCgpLT5iZWdpblBhaW50aW5nT25BdmFpbGFi
bGVCdWZmZXIoYXRsYXNJRCwgc2l6ZSwgb2Zmc2V0KTsKIH0KIAogY29uc3QgZG91YmxlIFJlbGVh
c2VJbmFjdGl2ZUF0bGFzZXNUaW1lckludGVydmFsID0gMC41OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmgKaW5kZXggNGRmNjM0Nzc4ODAwYjYz
NWY1ZTk0ODJkMTU3N2JiNmE5NjhlYzNlYS4uNGZhZmEzYWZjZTBkMzE3YTY2ZTUwYWViZjdiM2Nh
NGE5OTliMWNhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVD
b29yZGluYXRvci5oCkBAIC0zOCw4ICszOCw5IEBAIGNsYXNzIFVwZGF0ZUluZm87CiBjbGFzcyBX
ZWJQYWdlOwogCiBjbGFzcyBMYXllclRyZWVDb29yZGluYXRvciA6IHB1YmxpYyBMYXllclRyZWVI
b3N0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIHB1YmxpYyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICwgcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5IHsK
KyAgICAsIHB1YmxpYyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQKKyAgICAsIHB1Ymxp
YyBVcGRhdGVBdGxhc0NsaWVudAorICAgICwgcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJG
YWN0b3J5IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllclRyZWVDb29yZGlu
YXRvcj4gY3JlYXRlKFdlYlBhZ2UqKTsKICAgICB2aXJ0dWFsIH5MYXllclRyZWVDb29yZGluYXRv
cigpOwpAQCAtOTUsNyArOTYsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hM
YXllcihXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqKTsKICAgICB2aXJ0dWFsIHZv
aWQgc3luY0ZpeGVkTGF5ZXJzKCk7CiAKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYsIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MsIFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYsIFdl
YkNvcmU6OkludFBvaW50Jik7CisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBT
aGFyZWFibGVCaXRtYXA6OkZsYWdzLCBpbnQmIGF0bGFzSUQsIFdlYkNvcmU6OkludFBvaW50Jik7
CisKKyAgICAvLyBVcGRhdGVBdGxhc0NsaWVudAorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVVcGRh
dGVBdGxhcyhpbnQgYXRsYXNJRCwgY29uc3QgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJik7Cisg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lEKTsKIAogI2lmIEVO
QUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVB
bmltYXRpb24oKSBPVkVSUklERTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvVXBkYXRlQXRsYXMuY3BwCmluZGV4IDI3NTAwNjM1ZDI3NWUyODMyZGU3YTE3OTIzY2U5
ODk2YmI4ODMzYWEuLjFmNGJlNWJlM2IwYzZiZDgyZTc0NWQwYTMzODc2NjRhMmViMjNkN2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNw
cApAQCAtMzAsMTIgKzMwLDI4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAotVXBkYXRlQXRsYXM6OlVwZGF0ZUF0bGFzKGludCBkaW1lbnNpb24sIFNo
YXJlYWJsZUJpdG1hcDo6RmxhZ3MgZmxhZ3MpCi0gICAgOiBtX2ZsYWdzKGZsYWdzKQorVXBkYXRl
QXRsYXM6OlVwZGF0ZUF0bGFzKFVwZGF0ZUF0bGFzQ2xpZW50KiBjbGllbnQsIGludCBkaW1lbnNp
b24sIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MgZmxhZ3MpCisgICAgOiBtX2NsaWVudChjbGllbnQp
CisgICAgLCBtX2ZsYWdzKGZsYWdzKQogICAgICwgbV9pbmFjdGl2aXR5SW5TZWNvbmRzKDApCisg
ICAgLCBtX2lzVmFpbGQodHJ1ZSkKIHsKKyAgICBzdGF0aWMgaW50IGlkID0gMDsKKyAgICBtX0lE
ID0gKytpZDsKICAgICBJbnRTaXplIHNpemUgPSBuZXh0UG93ZXJPZlR3byhJbnRTaXplKGRpbWVu
c2lvbiwgZGltZW5zaW9uKSk7CiAgICAgbV9zdXJmYWNlID0gU2hhcmVhYmxlU3VyZmFjZTo6Y3Jl
YXRlKHNpemUsIGZsYWdzLCBTaGFyZWFibGVTdXJmYWNlOjpTdXBwb3J0c0dyYXBoaWNzU3VyZmFj
ZSk7CisKKyAgICBpZiAoIW1fc3VyZmFjZS0+Y3JlYXRlSGFuZGxlKG1faGFuZGxlKSkgeworICAg
ICAgICBtX2lzVmFpbGQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2Ns
aWVudC0+Y3JlYXRlVXBkYXRlQXRsYXMobV9JRCwgbV9oYW5kbGUpOworfQorCitVcGRhdGVBdGxh
czo6flVwZGF0ZUF0bGFzKCkKK3sKKyAgICBpZiAobV9pc1ZhaWxkKQorICAgICAgICBtX2NsaWVu
dC0+cmVtb3ZlVXBkYXRlQXRsYXMobV9JRCk7CiB9CiAKIHZvaWQgVXBkYXRlQXRsYXM6OmJ1aWxk
TGF5b3V0SWZOZWVkZWQoKQpAQCAtNTEsNyArNjcsNyBAQCB2b2lkIFVwZGF0ZUF0bGFzOjpkaWRT
d2FwQnVmZmVycygpCiAgICAgbV9hcmVhQWxsb2NhdG9yLmNsZWFyKCk7CiB9CiAKLVBhc3NPd25Q
dHI8R3JhcGhpY3NDb250ZXh0PiBVcGRhdGVBdGxhczo6YmVnaW5QYWludGluZ09uQXZhaWxhYmxl
QnVmZmVyKFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYgaGFuZGxlLCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBzaXplLCBJbnRQb2ludCYgb2Zmc2V0KQorUGFzc093blB0cjxHcmFwaGljc0NvbnRl
eHQ+IFVwZGF0ZUF0bGFzOjpiZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIoaW50JiBhdGxh
c0lELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBJbnRQb2ludCYgb2Zmc2V0KQogewog
ICAgIG1faW5hY3Rpdml0eUluU2Vjb25kcyA9IDA7CiAgICAgYnVpbGRMYXlvdXRJZk5lZWRlZCgp
OwpAQCAtNjEsOCArNzcsMTAgQEAgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IFVwZGF0ZUF0
bGFzOjpiZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIoU2hhcmVhYmwKICAgICBpZiAocmVj
dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4o
KTsKIAotICAgIGlmICghbV9zdXJmYWNlLT5jcmVhdGVIYW5kbGUoaGFuZGxlKSkKLSAgICAgICAg
cmV0dXJuIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PigpOworICAgIGlmICgh
bV9pc1ZhaWxkKQorICAgICAgICByZXR1cm4gUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+KCk7
CisKKyAgICBhdGxhc0lEID0gbV9JRDsKIAogICAgIC8vIEZJWE1FOiBVc2UgdHJpLXN0YXRlIGJ1
ZmZlcnMsIHRvIGFsbG93IGZhc3RlciB1cGRhdGVzLgogICAgIG9mZnNldCA9IHJlY3QubG9jYXRp
b24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRh
dGVBdGxhcy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFz
LmgKaW5kZXggMDBlODUwYjgzMWJkNzJlOTliYmE0MTFhMjM3MDhhYmE5ODQ0NTQ4Ni4uN2NlZmU5
Yzk3OTQyMTU4NjI3M2Y0ZTBjZDMwOWEyMDIzNGM3MWFkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmgKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmgKQEAgLTMyLDE1ICszMiwyMiBAQCBj
bGFzcyBJbnRQb2ludDsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIFVwZGF0ZUF0bGFz
Q2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXMoaW50
IGF0bGFzSUQsIGNvbnN0IFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQpID0gMDsKK307CisKIGNsYXNz
IFVwZGF0ZUF0bGFzIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShVcGRhdGVBdGxhcyk7CiBw
dWJsaWM6Ci0gICAgVXBkYXRlQXRsYXMoaW50IGRpbWVuc2lvbiwgU2hhcmVhYmxlQml0bWFwOjpG
bGFncyk7CisgICAgVXBkYXRlQXRsYXMoVXBkYXRlQXRsYXNDbGllbnQqLCBpbnQgZGltZW5zaW9u
LCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzKTsKKyAgICB+VXBkYXRlQXRsYXMoKTsKIAogICAgIGlu
bGluZSBXZWJDb3JlOjpJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2UtPnNp
emUoKTsgfQogCiAgICAgLy8gUmV0dXJucyBhIG51bGwgcG9pbnRlciBvZiB0aGVyZSBpcyBubyBh
dmFpbGFibGUgYnVmZmVyLgotICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
PiBiZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIoU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxl
JiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQpOwor
ICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpblBhaW50aW5nT25B
dmFpbGFibGVCdWZmZXIoaW50JiBhdGxhc0lELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgV2Vi
Q29yZTo6SW50UG9pbnQmIG9mZnNldCk7CiAgICAgdm9pZCBkaWRTd2FwQnVmZmVycygpOwogICAg
IFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzOyB9
CiAKQEAgLTYwLDEwICs2NywxNCBAQCBwcml2YXRlOgogICAgIHZvaWQgYnVpbGRMYXlvdXRJZk5l
ZWRlZCgpOwogCiBwcml2YXRlOgorICAgIFVwZGF0ZUF0bGFzQ2xpZW50KiBtX2NsaWVudDsKICAg
ICBPd25QdHI8R2VuZXJhbEFyZWFBbGxvY2F0b3I+IG1fYXJlYUFsbG9jYXRvcjsKICAgICBTaGFy
ZWFibGVCaXRtYXA6OkZsYWdzIG1fZmxhZ3M7CiAgICAgUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+
IG1fc3VyZmFjZTsKKyAgICBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUgbV9oYW5kbGU7CiAgICAg
ZG91YmxlIG1faW5hY3Rpdml0eUluU2Vjb25kczsKKyAgICBpbnQgbV9JRDsKKyAgICBib29sIG1f
aXNWYWlsZDsKIH07CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171771</attachid>
            <date>2012-10-31 22:57:14 -0700</date>
            <delta_ts>2012-11-01 17:36:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100797-20121101145532.patch</filename>
            <type>text/plain</type>
            <size>24832</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzMTI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggM2ZmMWU2ODZhZmVjMzEx
MWEzODk3ZGQ0ZDY2OGI2NWYyNGI2MmYzYi4uYmZkOTg5YjY3NjMzZTIxZDk5MjljNzlmMDUyZmEw
YzU0ZjJkNDg5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDY4IEBACiAyMDEyLTEwLTMxICBIdWFu
ZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgogCisgICAgICAgIENvb3JkaW5h
dGVkIEdyYXBoaWNzOiBNYW5hZ2UgdGhlIGxpZmVjeWNsZSBvZiBzaGFyZWFibGUgc3VyZmFjZXMg
cHJlY2lzZWx5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTAwNzk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgSW50ZXJuYWwgUmV2aWV3IGJ5IEd3YW5nIFlvb24gSHdhbmcgYW5kIEphZSBIeXVuIFBhcmsu
CisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBVcGRhdGVBdGxhcyBtYW5hZ2UgdGhlIGxpZmVj
eWNsZSBvZiBzaGFyZWFibGUgc3VyZmFjZXMKKyAgICAgICAgY29udGFpbmluZyB0aGUgdXBkYXRl
cyBpbiB0aGUgd2F5IGhvdyBDb29yZGluYXRlZFRpbGUgbWFuYWdlcyB0aGUgbGlmZWN5Y2xlIG9m
CisgICAgICAgIHRpbGVzLiBDdXJyZW50bHksIFVJIFByb2Nlc3MgY3JlYXRlcyB0aGUgc2hhcmVh
YmxlIHN1cmZhY2Ugd2hlbiByZWNlaXZpbmcgYW4KKyAgICAgICAgVXBkYXRlVGlsZUZvckxheWVy
IG1lc3NhZ2UsIGJ1dCB0aGVyZSBpcyBubyBleGFjdCBwb2ludCB0byByZW1vdmUgdGhlIHNoYXJl
YWJsZQorICAgICAgICBzdXJmYWNlLiBOb3csIHdlIGludHJvZHVjZSBuZXcgdHdvIG1lc3NhZ2Vz
IHRvIGhhbmRsZSB0aGUgbGlmZWN5Y2xlOgorICAgICAgICBDcmVhdGVVcGRhdGVBdGxhcyBhbmQg
UmVtb3ZlVXBkYXRlQXRsYXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBnaXZlcyB1cyB0d28gYmVu
ZWZpdHMuCisgICAgICAgIDEuIFJlZHVjZSBmaWxlIGFuZCBtbWFwIG9wZXJhdGlvbnMuIFdlYiBQ
cm9jZXNzIGRvZXMgbm90IG5lZWQgdG8gZHVwbGljYXRlIGEKKyAgICAgICAgZmlsZSBoYW5kbGUg
ZXZlcnkgdGlsZSB1cGRhdGUuIFVJIFByb2NlcyBkb2VzIG5vdCBuZWVkIHRvIGNyZWF0ZSBhCisg
ICAgICAgIFNoYXJlYWJsZVN1cmZhY2UgZXZlcnkgVXBkYXRlVGlsZUZvckxheWVyIG1lc3NhZ2Uu
CisgICAgICAgIDIuIFNhdmUgbWVtb3J5LiBXZSBjYW4gcmVtb3ZlIGEgU2hhcmVhYmxlU3VyZmFj
ZSBpbiBVSSBQcm9jZXNzIHdoZW4gVXBkYXRlQXRsYXMKKyAgICAgICAgaW4gV2ViIFByb2Nlc3Mg
aXMgcmVtb3ZlZC4KKworICAgICAgICAqIFNoYXJlZC9TdXJmYWNlVXBkYXRlSW5mby5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvOjplbmNvZGUpOgorICAgICAgICAoV2Vi
S2l0OjpTdXJmYWNlVXBkYXRlSW5mbzo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvU3VyZmFj
ZVVwZGF0ZUluZm8uaDoKKyAgICAgICAgKFN1cmZhY2VVcGRhdGVJbmZvKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6dXBkYXRlVGls
ZUZvckxheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6
Y3JlYXRlVXBkYXRlQXRsYXMpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6cmVtb3ZlVXBkYXRlQXRsYXMpOgorICAgICAgICAo
V2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpwdXJnZUJhY2tpbmdTdG9yZXMpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHkuaDoKKyAgICAgICAgKExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHkubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YmVnaW5Db250ZW50VXBkYXRlKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIuaDoKKyAgICAgICAgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCk6Cisg
ICAgICAgIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkNvb3JkaW5hdGVkVGlsZTo6dXBkYXRlQmFja0J1ZmZlcik6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmg6
CisgICAgICAgIChDb29yZGluYXRlZFRpbGVDbGllbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZVVwZGF0ZUF0bGFzKToK
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9y
OjpyZW1vdmVVcGRhdGVBdGxhcyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5h
dG9yOjpiZWdpbkNvbnRlbnRVcGRhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmg6CisgICAgICAgIChMYXll
clRyZWVDb29yZGluYXRvcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0
bGFzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlQXRsYXM6OlVwZGF0ZUF0bGFzKToKKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjp+VXBkYXRlQXRs
YXMpOgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVBdGxhczo6YmVnaW5QYWludGluZ09uQXZhaWxh
YmxlQnVmZmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuaDoK
KyAgICAgICAgKFVwZGF0ZUF0bGFzQ2xpZW50KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
IChVcGRhdGVBdGxhcyk6CisKKzIwMTItMTAtMzEgIEh1YW5nIERvbmdzdW5nICA8bHV4dGVsbGFA
Y29tcGFueTEwMC5uZXQ+CisKICAgICAgICAgQ29vcmRpbmF0ZWQgR3JhcGhpY3M6IENsZWFuIHVw
IGhlYWRlcnMgb2YgQ29vcmRpbmF0ZWQgR3JhcGhpY3MuCiAgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDA5MDcKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL1N1cmZhY2VVcGRhdGVJbmZvLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9TdXJmYWNlVXBkYXRlSW5mby5jcHAKaW5kZXggZmRhYzIxN2M1NWI5NTc2ZDFlYTExZGEzNDdk
OTAzZDU5MDU3NDQ4MC4uNDE0N2NlYWE3YTJmMThjODBhYzY1MTZiN2IwNGNiNWNjMTkyNzVhYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1N1cmZhY2VVcGRhdGVJbmZvLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU3VyZmFjZVVwZGF0ZUluZm8uY3BwCkBAIC0yOCw3
ICsyOCw3IEBAIHZvaWQgU3VyZmFjZVVwZGF0ZUluZm86OmVuY29kZShDb3JlSVBDOjpBcmd1bWVu
dEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2Rlci5lbmNvZGUodXBkYXRlUmVj
dCk7CiAgICAgZW5jb2Rlci5lbmNvZGUoc2NhbGVGYWN0b3IpOwotICAgIGVuY29kZXIuZW5jb2Rl
KHN1cmZhY2VIYW5kbGUpOworICAgIGVuY29kZXIuZW5jb2RlKGF0bGFzSUQpOwogICAgIGVuY29k
ZXIuZW5jb2RlKHN1cmZhY2VPZmZzZXQpOwogfQogCkBAIC0zOCw3ICszOCw3IEBAIGJvb2wgU3Vy
ZmFjZVVwZGF0ZUluZm86OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIs
IFN1cmZhY2VVcGRhdGVJCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIt
PmRlY29kZShyZXN1bHQuc2NhbGVGYWN0b3IpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKCFkZWNvZGVyLT5kZWNvZGUocmVzdWx0LnN1cmZhY2VIYW5kbGUpKQorICAgIGlmICghZGVj
b2Rlci0+ZGVjb2RlKHJlc3VsdC5hdGxhc0lEKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGlmICghZGVjb2Rlci0+ZGVjb2RlKHJlc3VsdC5zdXJmYWNlT2Zmc2V0KSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1N1cmZhY2VVcGRh
dGVJbmZvLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU3VyZmFjZVVwZGF0ZUluZm8uaAppbmRl
eCAzY2Q5Y2UzYzcxNTVjOTA3NzE3ZTBkYWVhM2QxNmVlYWM2MWE5NjJmLi5lMDg5NjdkOTY3MWE2
NGVjZDM1ODRjODZlMTM0ZjgwMzQwOTM3YjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvU3VyZmFjZVVwZGF0ZUluZm8uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU3Vy
ZmFjZVVwZGF0ZUluZm8uaApAQCAtMjAsNyArMjAsNiBAQAogI2lmbmRlZiBTdXJmYWNlVXBkYXRl
SW5mb19oCiAjZGVmaW5lIFN1cmZhY2VVcGRhdGVJbmZvX2gKIAotI2luY2x1ZGUgIlNoYXJlYWJs
ZVN1cmZhY2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KIApAQCAtNDYsOCArNDUsOCBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIHBh
Z2Ugc2NhbGUgZmFjdG9yIHVzZWQgdG8gcmVuZGVyIHRoaXMgdXBkYXRlLgogICAgIGZsb2F0IHNj
YWxlRmFjdG9yOwogCi0gICAgLy8gVGhlIGhhbmRsZSBvZiB0aGUgc2hhcmVhYmxlIGJpdG1hcCBj
b250YWluaW5nIHRoZSB1cGRhdGVzLiBXaWxsIGJlIG51bGwgaWYgdGhlcmUgYXJlIG5vIHVwZGF0
ZXMuCi0gICAgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlIHN1cmZhY2VIYW5kbGU7CisgICAgLy8g
VGhlIGlkIG9mIHRoZSB1cGRhdGUgYXRsYXMgaW5jbHVkaW5nIHRoZSBzaGFyZWFibGUgYml0bWFw
IGNvbnRhaW5pbmcgdGhlIHVwZGF0ZXMuCisgICAgaW50IGF0bGFzSUQ7CiAKICAgICAvLyBUaGUg
b2Zmc2V0IGluIHRoZSBiaXRtYXAgd2hlcmUgdGhlIHJlbmRlcmVkIGNvbnRlbnRzIGFyZS4KICAg
ICBXZWJDb3JlOjpJbnRQb2ludCBzdXJmYWNlT2Zmc2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcAppbmRleCAxZDFkNGZlMjdkZDMxNjQyNmZhNjY0
ZGE5NDhkNDgzMWFiYmU2ZWFhLi5mMWM0YmYzZjNjOTQzYzRjNzdhZDg2ODk2YWVjMGVlYzkyNTUy
NThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFw
aGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNw
cApAQCAtNjQsMjIgKzY0LDkgQEAgdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpjcmVh
dGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnMKIAogdm9pZCBMYXll
clRyZWVDb29yZGluYXRvclByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGlu
dCB0aWxlSUQsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFdlYktpdDo6U3VyZmFj
ZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCiB7Ci0gICAgUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+
IHN1cmZhY2U7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgR3JhcGhpY3NTdXJmYWNl
VG9rZW4gdG9rZW4gPSB1cGRhdGVJbmZvLnN1cmZhY2VIYW5kbGUuZ3JhcGhpY3NTdXJmYWNlVG9r
ZW4oKTsKLSAgICBpZiAodG9rZW4uaXNWYWxpZCgpKSB7Ci0gICAgICAgIEhhc2hNYXA8R3JhcGhp
Y3NTdXJmYWNlVG9rZW46OkJ1ZmZlckhhbmRsZSwgUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+ID46
Oml0ZXJhdG9yIGl0ID0gbV9zdXJmYWNlcy5maW5kKHRva2VuLmZyb250QnVmZmVySGFuZGxlKTsK
LSAgICAgICAgaWYgKGl0ID09IG1fc3VyZmFjZXMuZW5kKCkpIHsKLSAgICAgICAgICAgIHN1cmZh
Y2UgPSBTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGUodXBkYXRlSW5mby5zdXJmYWNlSGFuZGxlKTsK
LSAgICAgICAgICAgIG1fc3VyZmFjZXMuYWRkKHRva2VuLmZyb250QnVmZmVySGFuZGxlLCBzdXJm
YWNlKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBzdXJmYWNlID0gaXQtPnZhbHVlOwot
ICAgIH0gZWxzZQotICAgICAgICBzdXJmYWNlID0gU2hhcmVhYmxlU3VyZmFjZTo6Y3JlYXRlKHVw
ZGF0ZUluZm8uc3VyZmFjZUhhbmRsZSk7Ci0jZWxzZQotICAgIHN1cmZhY2UgPSBTaGFyZWFibGVT
dXJmYWNlOjpjcmVhdGUodXBkYXRlSW5mby5zdXJmYWNlSGFuZGxlKTsKLSNlbmRpZgotICAgIGRp
c3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVUaWxlLCBtX3JlbmRl
cmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQsIExheWVyVHJlZVJlbmRlcmVyOjpUaWxlVXBkYXRl
KHVwZGF0ZUluZm8udXBkYXRlUmVjdCwgdGFyZ2V0UmVjdCwgc3VyZmFjZSwgdXBkYXRlSW5mby5z
dXJmYWNlT2Zmc2V0KSkpOworICAgIFN1cmZhY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdXJmYWNl
cy5maW5kKHVwZGF0ZUluZm8uYXRsYXNJRCk7CisgICAgQVNTRVJUKGl0ICE9IG1fc3VyZmFjZXMu
ZW5kKCkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjp1cGRh
dGVUaWxlLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQsIExheWVyVHJlZVJlbmRl
cmVyOjpUaWxlVXBkYXRlKHVwZGF0ZUluZm8udXBkYXRlUmVjdCwgdGFyZ2V0UmVjdCwgaXQtPnZh
bHVlLCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpKSk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlE
KQpAQCAtODcsNiArNzQsMjQgQEAgdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpyZW1v
dmVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQpCiAgICAgZGlzcGF0Y2hVcGRh
dGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCks
IGxheWVySUQsIHRpbGVJRCkpOwogfQogCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6
OmNyZWF0ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lELCBjb25zdCBTaGFyZWFibGVTdXJmYWNlOjpI
YW5kbGUmIGhhbmRsZSkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgU3VyZmFjZU1hcDo6aXRlcmF0
b3IgaXQgPSBtX3N1cmZhY2VzLmZpbmQoYXRsYXNJRCk7CisgICAgQVNTRVJUKGl0ID09IG1fc3Vy
ZmFjZXMuZW5kKCkpOworI2VuZGlmCisgICAgbV9zdXJmYWNlcy5hZGQoYXRsYXNJRCwgU2hhcmVh
YmxlU3VyZmFjZTo6Y3JlYXRlKGhhbmRsZSkpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHk6OnJlbW92ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lEKQoreworI2lmbmRlZiBOREVC
VUcKKyAgICBTdXJmYWNlTWFwOjppdGVyYXRvciBpdCA9IG1fc3VyZmFjZXMuZmluZChhdGxhc0lE
KTsKKyAgICBBU1NFUlQoaXQgIT0gbV9zdXJmYWNlcy5lbmQoKSk7CisjZW5kaWYKKyAgICBtX3N1
cmZhY2VzLnJlbW92ZShhdGxhc0lEKTsKK30KKwogdm9pZCBMYXllclRyZWVDb29yZGluYXRvclBy
b3h5OjpkZWxldGVDb21wb3NpdGluZ0xheWVyKFdlYkxheWVySUQgaWQpCiB7CiAgICAgZGlzcGF0
Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmRlbGV0ZUxheWVyLCBtX3JlbmRlcmVy
LmdldCgpLCBpZCkpOwpAQCAtMjAzLDkgKzIwOCw2IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eTo6c3luY0NhbnZhcyh1aW50MzJfdCBpZCwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6
CiB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnB1cmdlQmFja2luZ1N0b3JlcygpCiB7
CiAgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdl
czo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OlB1cmdlQmFja2luZ1N0b3JlcygpLCBtX2RyYXdpbmdB
cmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOwotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQot
ICAgIG1fc3VyZmFjZXMuY2xlYXIoKTsKLSNlbmRpZgogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGlu
YXRvclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmgKaW5kZXggYWZkY2Y5N2M1YmUzNDA2MWUxZWU2
MGQ3MjNmNDJjMzk5MTRjMmFlNy4uNjQ2ODAxMTY4ZjI0YTc4OWI3ZWI4MDcxY2Y0YjZmOGE0YzRm
Yjk3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaApA
QCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENv
ZGVycy5oIgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKICNpbmNsdWRlICJSZWdpb24u
aCIKKyNpbmNsdWRlICJTaGFyZWFibGVTdXJmYWNlLmgiCiAjaW5jbHVkZSAiU3VyZmFjZVVwZGF0
ZUluZm8uaCIKICNpbmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgiCiAjaW5jbHVkZSA8V2ViQ29y
ZS9HcmFwaGljc0NvbnRleHQuaD4KQEAgLTY0LDYgKzY1LDggQEAgcHVibGljOgogICAgIHZvaWQg
Y3JlYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mKTsKICAgICB2b2lkIHVwZGF0ZVRp
bGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJik7CiAgICAgdm9pZCByZW1vdmVUaWxlRm9yTGF5
ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQpOworICAgIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXMo
aW50IGF0bGFzSUQsIGNvbnN0IFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYpOworICAgIHZvaWQg
cmVtb3ZlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQpOwogICAgIHZvaWQgY3JlYXRlRGlyZWN0bHlD
b21wb3NpdGVkSW1hZ2UoaW50NjRfdCwgY29uc3QgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6Okhh
bmRsZSYpOwogICAgIHZvaWQgZGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qp
OwogICAgIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlKENv
cmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6Ok1lc3NhZ2VE
ZWNvZGVyJik7CkBAIC05MCw5ICs5Myw4IEBAIHByb3RlY3RlZDoKICAgICBXZWJDb3JlOjpJbnRS
ZWN0IG1fbGFzdFNlbnRWaXNpYmxlUmVjdDsKICAgICBmbG9hdCBtX2xhc3RTZW50U2NhbGU7CiAg
ICAgV2ViQ29yZTo6RmxvYXRQb2ludCBtX2xhc3RTZW50VHJhamVjdG9yeVZlY3RvcjsKLSNpZiBV
U0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBIYXNoTWFwPFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFj
ZVRva2VuOjpCdWZmZXJIYW5kbGUsIFJlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiA+IG1fc3VyZmFj
ZXM7Ci0jZW5kaWYKKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50IC8qIGF0bGFzSUQgKi8sIFJlZlB0
cjxTaGFyZWFibGVTdXJmYWNlPiA+IFN1cmZhY2VNYXA7CisgICAgU3VyZmFjZU1hcCBtX3N1cmZh
Y2VzOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbiBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHkubWVzc2FnZXMuaW4KaW5kZXggYjg0MmI5OTUwMGZlMjNjZjhjYTA3NGRmZDNm
OWZkYzNkZmRiOGYzZS4uYmE4OGRlNTNmZjMzZTQ1ZjFkMDg4YTNkMjA1NTcwYTQwZmQ0YjU2NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5
Lm1lc3NhZ2VzLmluCkBAIC0yOSw2ICsyOSw4IEBAIG1lc3NhZ2VzIC0+IExheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHkgewogICAgIENyZWF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCBp
bnQgdGlsZUlELCBXZWJDb3JlOjpJbnRSZWN0IHRhcmdldFJlY3QsIFdlYktpdDo6U3VyZmFjZVVw
ZGF0ZUluZm8gdXBkYXRlSW5mbykKICAgICBVcGRhdGVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5
ZXJJRCwgaW50IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0YXJnZXRSZWN0LCBXZWJLaXQ6OlN1
cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCiAgICAgUmVtb3ZlVGlsZUZvckxheWVyKHVpbnQz
Ml90IGxheWVySUQsIGludCB0aWxlSUQpCisgICAgQ3JlYXRlVXBkYXRlQXRsYXMoaW50IGF0bGFz
SUQsIFdlYktpdDo6U2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlIGhhbmRsZSkKKyAgICBSZW1vdmVV
cGRhdGVBdGxhcyhpbnQgYXRsYXNJRCkKICAgICBDcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZShpbnQ2NF90IGtleSwgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUpCiAg
ICAgRGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5KQogICAgIERpZFJl
bmRlckZyYW1lKFdlYkNvcmU6OkludFNpemUgY29udGVudHNTaXplLCBXZWJDb3JlOjpJbnRSZWN0
IGNvdmVyZWRSZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllci5jcHAKaW5kZXggZTNkYmFiMTQ5MzIyYTVmMWMzMzVlN2E3Njhl
YmNhNTY5MTgwZjlhOS4uYTBmNGY2NWY0MWIwNmNhZGE0ZThmZGZkY2QyMzIzNWNjYWFlZGQyMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIuY3BwCkBAIC02MzcsOSArNjM3LDkgQEAgQ29sb3IgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZUJhY2tncm91bmRDb2xvcigpIGNvbnN0CiAgICAgcmV0
dXJuIGNvbnRlbnRzT3BhcXVlKCkgPyBDb2xvcjo6d2hpdGUgOiBDb2xvcjo6dHJhbnNwYXJlbnQ7
CiB9CiAKLVBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OmJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBz
aXplLCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSwgV2ViQ29yZTo6SW50UG9pbnQm
IG9mZnNldCkKK1Bhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OmJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiBzaXplLCBpbnQmIGF0bGFzLCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zmc2V0KQogewotICAgIHJl
dHVybiBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+YmVnaW5Db250ZW50VXBkYXRl
KHNpemUsIGNvbnRlbnRzT3BhcXVlKCkgPyAwIDogU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0Fs
cGhhLCBoYW5kbGUsIG9mZnNldCk7CisgICAgcmV0dXJuIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyQ2xpZW50LT5iZWdpbkNvbnRlbnRVcGRhdGUoc2l6ZSwgY29udGVudHNPcGFxdWUoKSA/IDAg
OiBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEsIGF0bGFzLCBvZmZzZXQpOwogfQogCiB2
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGlsZShpbnQgdGlsZUlELCBjb25z
dCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVj
dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyLmgKaW5kZXggM2I3MDU0MGY4NmYxYzA5ZjA4YzQzY2M3ZGFkY2UxNTkxNzQxNDM1Ny4u
NTRhZTE1OWJkZDRjZGE3MGE3NzM0YzQzYmQ1NTBhOTdjMzQ0ZDgyYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKQEAgLTcy
LDcgKzcyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hMYXllcihXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRldGFj
aExheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllciopID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgc3luY0ZpeGVkTGF5ZXJzKCkgPSAwOwotICAgIHZpcnR1YWwgUGFzc093blB0cjxX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncywgU2hhcmVhYmxlU3VyZmFjZTo6SGFu
ZGxlJiwgV2ViQ29yZTo6SW50UG9pbnQmKSA9IDA7CisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzLCBpbnQmIGF0bGFzSUQsIFdlYkNvcmU6
OkludFBvaW50JikgPSAwOwogfTsKIH0KIApAQCAtMTQ3LDcgKzE0Nyw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlN1cmZh
Y2VVcGRhdGVJbmZvJiwgY29uc3QgSW50UmVjdCYpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8m
LCBjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUo
aW50IHRpbGVJRCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBQYXNzT3duUHRyPEdyYXBoaWNzQ29u
dGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IEludFNpemUmLCBXZWJLaXQ6OlNoYXJlYWJs
ZVN1cmZhY2U6OkhhbmRsZSYsIEludFBvaW50JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNz
T3duUHRyPEdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IEludFNpemUm
LCBpbnQmIGF0bGFzSUQsIEludFBvaW50JikgT1ZFUlJJREU7CiAKICAgICB2b2lkIHNldENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllckNsaWVudChXZWJLaXQ6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ckNsaWVudCopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxl
LmNwcAppbmRleCA2NjhjYTVkOWVkZTQ5OWRlYTJhZWI1OTIwNjM4N2ZkZDZmMmU5YWE1Li41NDhk
NDlkMzI3ZjAzNTUzMjc0NmZkMmZiNTk1NWJkNjFkYThiYWM3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZFRpbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5jcHAKQEAgLTczLDcgKzczLDcgQEAgVmVjdG9y
PEludFJlY3Q+IENvb3JkaW5hdGVkVGlsZTo6dXBkYXRlQmFja0J1ZmZlcigpCiAgICAgICAgIHJl
dHVybiBWZWN0b3I8SW50UmVjdD4oKTsKIAogICAgIFN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUlu
Zm87Ci0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gbV9jbGll
bnQtPmJlZ2luQ29udGVudFVwZGF0ZShtX2RpcnR5UmVjdC5zaXplKCksIHVwZGF0ZUluZm8uc3Vy
ZmFjZUhhbmRsZSwgdXBkYXRlSW5mby5zdXJmYWNlT2Zmc2V0KTsKKyAgICBPd25QdHI8R3JhcGhp
Y3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBtX2NsaWVudC0+YmVnaW5Db250ZW50VXBkYXRl
KG1fZGlydHlSZWN0LnNpemUoKSwgdXBkYXRlSW5mby5hdGxhc0lELCB1cGRhdGVJbmZvLnN1cmZh
Y2VPZmZzZXQpOwogICAgIGlmICghZ3JhcGhpY3NDb250ZXh0KQogICAgICAgICByZXR1cm4gVmVj
dG9yPEludFJlY3Q+KCk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUoLW1fZGlydHlS
ZWN0LngoKSwgLW1fZGlydHlSZWN0LnkoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkVGlsZS5oCmluZGV4IDg0ZDExMzRmMDQyZTlmNTJlMDNmY2I0MTJjMDNkMzM3YTY0
NTc5ZjQuLjMyZmY0ZTdjNzkxZjJiZTM0YjUwMzgwMDg1NjU4Mzg2ZWUxZWM2MzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkVGlsZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5oCkBAIC0yOCw3ICsyOCw2IEBA
CiAKICNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKIAotI2luY2x1ZGUgIlNoYXJlYWJsZVN1
cmZhY2UuaCIKICNpbmNsdWRlICJUaWxlLmgiCiAjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmUu
aCIKICNpbmNsdWRlICJXZWJDb3JlL0ludFJlY3QuaCIKQEAgLTc5LDcgKzc4LDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VV
cGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoaW50
IHRpbGVJRCkgPSAwOwotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVh
YmxlU3VyZmFjZTo6SGFuZGxlJiwgV2ViQ29yZTo6SW50UG9pbnQmKSA9IDA7CisgICAgdmlydHVh
bCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRl
KGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBpbnQmIGF0bGFzSUQsIFdlYkNvcmU6OkludFBvaW50
JikgPSAwOwogfTsKIAogY2xhc3MgQ29vcmRpbmF0ZWRUaWxlQmFja2VuZCA6IHB1YmxpYyBXZWJD
b3JlOjpUaWxlZEJhY2tpbmdTdG9yZUJhY2tlbmQgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRp
bmF0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCmluZGV4IDdlYjQ3OWJlMDgxNjIxYzc5
YmU5MTE1ZjU2OTk0ZjJjZTBiMzVhMDAuLjllYjM3OGU1ZGEzMzFmYzhjOTFjNTJhNDQ5OWI2YTU5
ZDRlZmYyYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVD
b29yZGluYXRvci5jcHAKQEAgLTYxNiw2ICs2MTYsMTYgQEAgdm9pZCBMYXllclRyZWVDb29yZGlu
YXRvcjo6cmVtb3ZlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQpCiAgICAgbV93
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpSZW1vdmVU
aWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlEKSk7CiB9CiAKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRp
bmF0b3I6OmNyZWF0ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lELCBjb25zdCBTaGFyZWFibGVTdXJm
YWNlOjpIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6Okxh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkNyZWF0ZVVwZGF0ZUF0bGFzKGF0bGFzSUQsIGhhbmRs
ZSkpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpyZW1vdmVVcGRhdGVBdGxhcyhp
bnQgYXRsYXNJRCkKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHk6OlJlbW92ZVVwZGF0ZUF0bGFzKGF0bGFzSUQpKTsKK30KKwogV2ViQ29y
ZTo6SW50UmVjdCBMYXllclRyZWVDb29yZGluYXRvcjo6dmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKQEAgLTY5OSwyMyArNzA5
LDIzIEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnB1cmdlQmFja2luZ1N0b3JlcygpCiAg
ICAgbV91cGRhdGVBdGxhc2VzLmNsZWFyKCk7CiB9CiAKLVBhc3NPd25QdHI8V2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0PiBMYXllclRyZWVDb29yZGluYXRvcjo6YmVnaW5Db250ZW50VXBkYXRlKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUsIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MgZmxhZ3Ms
IFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYgaGFuZGxlLCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zm
c2V0KQorUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IExheWVyVHJlZUNvb3Jk
aW5hdG9yOjpiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwg
U2hhcmVhYmxlQml0bWFwOjpGbGFncyBmbGFncywgaW50JiBhdGxhc0lELCBXZWJDb3JlOjpJbnRQ
b2ludCYgb2Zmc2V0KQogewogICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGdy
YXBoaWNzQ29udGV4dDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV91cGRhdGVBdGxh
c2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFVwZGF0ZUF0bGFzKiBhdGxhcyA9IG1fdXBkYXRl
QXRsYXNlc1tpXS5nZXQoKTsKICAgICAgICAgaWYgKGF0bGFzLT5mbGFncygpID09IGZsYWdzKSB7
CiAgICAgICAgICAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIG51bGwgaWYgdGhlcmUgaXMgbm8gYXZh
aWxhYmxlIGJ1ZmZlciBzcGFjZS4KLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dCA9IGF0bGFz
LT5iZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIoaGFuZGxlLCBzaXplLCBvZmZzZXQpOwor
ICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0ID0gYXRsYXMtPmJlZ2luUGFpbnRpbmdPbkF2YWls
YWJsZUJ1ZmZlcihhdGxhc0lELCBzaXplLCBvZmZzZXQpOwogICAgICAgICAgICAgaWYgKGdyYXBo
aWNzQ29udGV4dCkKICAgICAgICAgICAgICAgICByZXR1cm4gZ3JhcGhpY3NDb250ZXh0LnJlbGVh
c2UoKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBpbnQgU2NyYXRjaEJ1
ZmZlckRpbWVuc2lvbiA9IDEwMjQ7IC8vIFNob3VsZCBiZSBhIHBvd2VyIG9mIHR3by4KLSAgICBt
X3VwZGF0ZUF0bGFzZXMuYXBwZW5kKGFkb3B0UHRyKG5ldyBVcGRhdGVBdGxhcyhTY3JhdGNoQnVm
ZmVyRGltZW5zaW9uLCBmbGFncykpKTsKKyAgICBtX3VwZGF0ZUF0bGFzZXMuYXBwZW5kKGFkb3B0
UHRyKG5ldyBVcGRhdGVBdGxhcyh0aGlzLCBTY3JhdGNoQnVmZmVyRGltZW5zaW9uLCBmbGFncykp
KTsKICAgICBzY2hlZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMoKTsKLSAgICByZXR1cm4gbV91
cGRhdGVBdGxhc2VzLmxhc3QoKS0+YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKGhhbmRs
ZSwgc2l6ZSwgb2Zmc2V0KTsKKyAgICByZXR1cm4gbV91cGRhdGVBdGxhc2VzLmxhc3QoKS0+YmVn
aW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKGF0bGFzSUQsIHNpemUsIG9mZnNldCk7CiB9CiAK
IGNvbnN0IGRvdWJsZSBSZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJJbnRlcnZhbCA9IDAuNTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5oCmlu
ZGV4IGJkMjk5YzU0ZmJlY2EyNWM2YmI5ZjE3YWEwN2Q5NWFkZmM4ODY0ZjkuLmQ3MjVhZjY5N2E4
NTNkZWM5MWZjNjg5NTkyYTI1ZDMwOTY0NzcxZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5h
dG9yLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaApAQCAtMzgsOCArMzgsOSBAQCBjbGFzcyBV
cGRhdGVJbmZvOwogY2xhc3MgV2ViUGFnZTsKIAogY2xhc3MgTGF5ZXJUcmVlQ29vcmRpbmF0b3Ig
OiBwdWJsaWMgTGF5ZXJUcmVlSG9zdCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
Q2xpZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJDb3JlOjpHcmFw
aGljc0xheWVyRmFjdG9yeSB7CisgICAgLCBwdWJsaWMgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
Q2xpZW50CisgICAgLCBwdWJsaWMgVXBkYXRlQXRsYXNDbGllbnQKKyAgICAsIHB1YmxpYyBXZWJD
b3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+IGNyZWF0ZShXZWJQYWdlKik7CiAgICAgdmlydHVhbCB+
TGF5ZXJUcmVlQ29vcmRpbmF0b3IoKTsKQEAgLTkzLDcgKzk0LDExIEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
Kik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNGaXhlZExheWVycygpOwogCi0gICAgdmlydHVhbCBQ
YXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzLCBTaGFyZWFibGVT
dXJmYWNlOjpIYW5kbGUmLCBXZWJDb3JlOjpJbnRQb2ludCYpOworICAgIHZpcnR1YWwgUGFzc093
blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncywgaW50JiBhdGxhc0lELCBX
ZWJDb3JlOjpJbnRQb2ludCYpOworCisgICAgLy8gVXBkYXRlQXRsYXNDbGllbnQKKyAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQsIGNvbnN0IFNoYXJlYWJsZVN1
cmZhY2U6OkhhbmRsZSYpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyhpbnQg
YXRsYXNJRCk7CiAKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCiAgICAgdmly
dHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgT1ZFUlJJREU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNwcAppbmRleCAyNzUwMDYzNWQy
NzVlMjgzMmRlN2ExNzkyM2NlOTg5NmJiODgzM2FhLi4xZjRiZTViZTNiMGM2YmQ4MmU3NDVkMGEz
Mzg3NjY0YTJlYjIzZDdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvVXBkYXRlQXRsYXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9VcGRhdGVBdGxhcy5jcHAKQEAgLTMwLDEyICszMCwyOCBAQCB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVVwZGF0ZUF0bGFzOjpVcGRhdGVBdGxh
cyhpbnQgZGltZW5zaW9uLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdzKQotICAgIDogbV9m
bGFncyhmbGFncykKK1VwZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyhVcGRhdGVBdGxhc0NsaWVudCog
Y2xpZW50LCBpbnQgZGltZW5zaW9uLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdzKQorICAg
IDogbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9mbGFncyhmbGFncykKICAgICAsIG1faW5hY3Rp
dml0eUluU2Vjb25kcygwKQorICAgICwgbV9pc1ZhaWxkKHRydWUpCiB7CisgICAgc3RhdGljIGlu
dCBpZCA9IDA7CisgICAgbV9JRCA9ICsraWQ7CiAgICAgSW50U2l6ZSBzaXplID0gbmV4dFBvd2Vy
T2ZUd28oSW50U2l6ZShkaW1lbnNpb24sIGRpbWVuc2lvbikpOwogICAgIG1fc3VyZmFjZSA9IFNo
YXJlYWJsZVN1cmZhY2U6OmNyZWF0ZShzaXplLCBmbGFncywgU2hhcmVhYmxlU3VyZmFjZTo6U3Vw
cG9ydHNHcmFwaGljc1N1cmZhY2UpOworCisgICAgaWYgKCFtX3N1cmZhY2UtPmNyZWF0ZUhhbmRs
ZShtX2hhbmRsZSkpIHsKKyAgICAgICAgbV9pc1ZhaWxkID0gZmFsc2U7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgbV9jbGllbnQtPmNyZWF0ZVVwZGF0ZUF0bGFzKG1fSUQsIG1faGFuZGxl
KTsKK30KKworVXBkYXRlQXRsYXM6On5VcGRhdGVBdGxhcygpCit7CisgICAgaWYgKG1faXNWYWls
ZCkKKyAgICAgICAgbV9jbGllbnQtPnJlbW92ZVVwZGF0ZUF0bGFzKG1fSUQpOwogfQogCiB2b2lk
IFVwZGF0ZUF0bGFzOjpidWlsZExheW91dElmTmVlZGVkKCkKQEAgLTUxLDcgKzY3LDcgQEAgdm9p
ZCBVcGRhdGVBdGxhczo6ZGlkU3dhcEJ1ZmZlcnMoKQogICAgIG1fYXJlYUFsbG9jYXRvci5jbGVh
cigpOwogfQogCi1QYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gVXBkYXRlQXRsYXM6OmJlZ2lu
UGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmIGhhbmRs
ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgSW50UG9pbnQmIG9mZnNldCkKK1Bhc3NP
d25QdHI8R3JhcGhpY3NDb250ZXh0PiBVcGRhdGVBdGxhczo6YmVnaW5QYWludGluZ09uQXZhaWxh
YmxlQnVmZmVyKGludCYgYXRsYXNJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgSW50
UG9pbnQmIG9mZnNldCkKIHsKICAgICBtX2luYWN0aXZpdHlJblNlY29uZHMgPSAwOwogICAgIGJ1
aWxkTGF5b3V0SWZOZWVkZWQoKTsKQEAgLTYxLDggKzc3LDEwIEBAIFBhc3NPd25QdHI8R3JhcGhp
Y3NDb250ZXh0PiBVcGRhdGVBdGxhczo6YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKFNo
YXJlYWJsCiAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gUGFzc093blB0
cjxHcmFwaGljc0NvbnRleHQ+KCk7CiAKLSAgICBpZiAoIW1fc3VyZmFjZS0+Y3JlYXRlSGFuZGxl
KGhhbmRsZSkpCi0gICAgICAgIHJldHVybiBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dD4oKTsKKyAgICBpZiAoIW1faXNWYWlsZCkKKyAgICAgICAgcmV0dXJuIFBhc3NPd25QdHI8
R3JhcGhpY3NDb250ZXh0PigpOworCisgICAgYXRsYXNJRCA9IG1fSUQ7CiAKICAgICAvLyBGSVhN
RTogVXNlIHRyaS1zdGF0ZSBidWZmZXJzLCB0byBhbGxvdyBmYXN0ZXIgdXBkYXRlcy4KICAgICBv
ZmZzZXQgPSByZWN0LmxvY2F0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9VcGRhdGVBdGxhcy5oCmluZGV4IDAwZTg1MGI4MzFiZDcyZTk5YmJhNDExYTIzNzA4
YWJhOTg0NDU0ODYuLjdjZWZlOWM5Nzk0MjE1ODYyNzNmNGUwY2QzMDlhMjAyMzRjNzFhZDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oCkBA
IC0zMiwxNSArMzIsMjIgQEAgY2xhc3MgSW50UG9pbnQ7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewog
CitjbGFzcyBVcGRhdGVBdGxhc0NsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGNy
ZWF0ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lELCBjb25zdCBTaGFyZWFibGVTdXJmYWNlOjpIYW5k
bGUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lE
KSA9IDA7Cit9OworCiBjbGFzcyBVcGRhdGVBdGxhcyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoVXBkYXRlQXRsYXMpOwogcHVibGljOgotICAgIFVwZGF0ZUF0bGFzKGludCBkaW1lbnNpb24s
IFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MpOworICAgIFVwZGF0ZUF0bGFzKFVwZGF0ZUF0bGFzQ2xp
ZW50KiwgaW50IGRpbWVuc2lvbiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncyk7CisgICAgflVwZGF0
ZUF0bGFzKCk7CiAKICAgICBpbmxpbmUgV2ViQ29yZTo6SW50U2l6ZSBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdXJmYWNlLT5zaXplKCk7IH0KIAogICAgIC8vIFJldHVybnMgYSBudWxsIHBvaW50
ZXIgb2YgdGhlcmUgaXMgbm8gYXZhaWxhYmxlIGJ1ZmZlci4KLSAgICBQYXNzT3duUHRyPFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKFNoYXJl
YWJsZVN1cmZhY2U6OkhhbmRsZSYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJDb3JlOjpJ
bnRQb2ludCYgb2Zmc2V0KTsKKyAgICBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dD4gYmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKGludCYgYXRsYXNJRCwgY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYsIFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQpOwogICAgIHZvaWQgZGlk
U3dhcEJ1ZmZlcnMoKTsKICAgICBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdzKCkgY29uc3Qg
eyByZXR1cm4gbV9mbGFnczsgfQogCkBAIC02MCwxMCArNjcsMTQgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGJ1aWxkTGF5b3V0SWZOZWVkZWQoKTsKIAogcHJpdmF0ZToKKyAgICBVcGRhdGVBdGxhc0Ns
aWVudCogbV9jbGllbnQ7CiAgICAgT3duUHRyPEdlbmVyYWxBcmVhQWxsb2NhdG9yPiBtX2FyZWFB
bGxvY2F0b3I7CiAgICAgU2hhcmVhYmxlQml0bWFwOjpGbGFncyBtX2ZsYWdzOwogICAgIFJlZlB0
cjxTaGFyZWFibGVTdXJmYWNlPiBtX3N1cmZhY2U7CisgICAgU2hhcmVhYmxlU3VyZmFjZTo6SGFu
ZGxlIG1faGFuZGxlOwogICAgIGRvdWJsZSBtX2luYWN0aXZpdHlJblNlY29uZHM7CisgICAgaW50
IG1fSUQ7CisgICAgYm9vbCBtX2lzVmFpbGQ7CiB9OwogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171958</attachid>
            <date>2012-11-01 17:36:10 -0700</date>
            <delta_ts>2012-11-02 00:23:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100797-20121102093424.patch</filename>
            <type>text/plain</type>
            <size>24628</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzMjQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOGZjNTI3MmY1ZWNlNjc0
ZTVlMTYzMzk4YjJhNzM5MDI5YTllODYwNC4uYTkxMTBiOTRiMmVhMGUzY2I4YjJlNjNiZjY2ODJl
OTY5NzcxMTJmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDEyLTEwLTMxICBIdWFu
ZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIENvb3JkaW5h
dGVkIEdyYXBoaWNzOiBNYW5hZ2UgdGhlIGxpZmVjeWNsZSBvZiBzaGFyZWFibGUgc3VyZmFjZXMg
cHJlY2lzZWx5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTAwNzk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgSW50ZXJuYWwgUmV2aWV3IGJ5IEd3YW5nIFlvb24gSHdhbmcgYW5kIEphZSBIeXVuIFBhcmsu
CisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBVcGRhdGVBdGxhcyBtYW5hZ2UgdGhlIGxpZmVj
eWNsZSBvZiBzaGFyZWFibGUgc3VyZmFjZXMKKyAgICAgICAgY29udGFpbmluZyB0aGUgdXBkYXRl
cyBpbiB0aGUgd2F5IGhvdyBDb29yZGluYXRlZFRpbGUgbWFuYWdlcyB0aGUgbGlmZWN5Y2xlIG9m
CisgICAgICAgIHRpbGVzLiBDdXJyZW50bHksIFVJIFByb2Nlc3MgY3JlYXRlcyB0aGUgc2hhcmVh
YmxlIHN1cmZhY2Ugd2hlbiByZWNlaXZpbmcgYW4KKyAgICAgICAgVXBkYXRlVGlsZUZvckxheWVy
IG1lc3NhZ2UsIGJ1dCB0aGVyZSBpcyBubyBleGFjdCBwb2ludCB0byByZW1vdmUgdGhlIHNoYXJl
YWJsZQorICAgICAgICBzdXJmYWNlLiBOb3csIHdlIGludHJvZHVjZSBuZXcgdHdvIG1lc3NhZ2Vz
IHRvIGhhbmRsZSB0aGUgbGlmZWN5Y2xlOgorICAgICAgICBDcmVhdGVVcGRhdGVBdGxhcyBhbmQg
UmVtb3ZlVXBkYXRlQXRsYXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBnaXZlcyB1cyB0d28gYmVu
ZWZpdHMuCisgICAgICAgIDEuIFJlZHVjZSBmaWxlIGFuZCBtbWFwIG9wZXJhdGlvbnMuIFdlYiBQ
cm9jZXNzIGRvZXMgbm90IG5lZWQgdG8gZHVwbGljYXRlIGEKKyAgICAgICAgZmlsZSBoYW5kbGUg
ZXZlcnkgdGlsZSB1cGRhdGUuIFVJIFByb2Nlc3MgZG9lcyBub3QgbmVlZCB0byBjcmVhdGUgYQor
ICAgICAgICBTaGFyZWFibGVTdXJmYWNlIGV2ZXJ5IFVwZGF0ZVRpbGVGb3JMYXllciBtZXNzYWdl
LgorICAgICAgICAyLiBTYXZlIG1lbW9yeS4gV2UgY2FuIHJlbW92ZSBhIFNoYXJlYWJsZVN1cmZh
Y2UgaW4gVUkgUHJvY2VzcyB3aGVuIFVwZGF0ZUF0bGFzCisgICAgICAgIGluIFdlYiBQcm9jZXNz
IGlzIHJlbW92ZWQuCisKKyAgICAgICAgKiBTaGFyZWQvU3VyZmFjZVVwZGF0ZUluZm8uY3BwOgor
ICAgICAgICAoV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbzo6ZW5jb2RlKToKKyAgICAgICAgKFdl
YktpdDo6U3VyZmFjZVVwZGF0ZUluZm86OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1N1cmZh
Y2VVcGRhdGVJbmZvLmg6CisgICAgICAgIChTdXJmYWNlVXBkYXRlSW5mbyk6CisgICAgICAgICog
VUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnVwZGF0ZVRp
bGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6
OmNyZWF0ZVVwZGF0ZUF0bGFzKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnJlbW92ZVVwZGF0ZUF0bGFzKToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6cHVyZ2VCYWNraW5nU3RvcmVzKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGlu
YXRvclByb3h5Lmg6CisgICAgICAgIChMYXllclRyZWVDb29yZGluYXRvclByb3h5KToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclBy
b3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmJlZ2luQ29udGVudFVwZGF0ZSk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyLmg6CisgICAgICAgIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQpOgor
ICAgICAgICAoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpDb29yZGluYXRlZFRpbGU6OnVwZGF0ZUJhY2tCdWZmZXIpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5o
OgorICAgICAgICAoQ29vcmRpbmF0ZWRUaWxlQ2xpZW50KToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVhdGVVcGRhdGVBdGxhcyk6
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRv
cjo6cmVtb3ZlVXBkYXRlQXRsYXMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGlu
YXRvcjo6YmVnaW5Db250ZW50VXBkYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5oOgorICAgICAgICAoTGF5
ZXJUcmVlQ29vcmRpbmF0b3IpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVB
dGxhcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyk6Cisg
ICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVBdGxhczo6flVwZGF0ZUF0
bGFzKToKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlQXRsYXM6OmJlZ2luUGFpbnRpbmdPbkF2YWls
YWJsZUJ1ZmZlcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmg6
CisgICAgICAgIChVcGRhdGVBdGxhc0NsaWVudCk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAg
ICAoVXBkYXRlQXRsYXMpOgorCiAyMDEyLTExLTAxICBBbGV4YW5kcnUgQ2hpY3VsaXRhICA8YWNo
aWN1QGFkb2JlLmNvbT4KIAogICAgICAgICBbQ1NTIFNoYWRlcnNdIE1vdmUgTWVzaEJveFR5cGUg
b3V0IG9mIEN1c3RvbUZpbHRlck9wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
U2hhcmVkL1N1cmZhY2VVcGRhdGVJbmZvLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TdXJm
YWNlVXBkYXRlSW5mby5jcHAKaW5kZXggZmRhYzIxN2M1NWI5NTc2ZDFlYTExZGEzNDdkOTAzZDU5
MDU3NDQ4MC4uNDE0N2NlYWE3YTJmMThjODBhYzY1MTZiN2IwNGNiNWNjMTkyNzVhYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1N1cmZhY2VVcGRhdGVJbmZvLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvU3VyZmFjZVVwZGF0ZUluZm8uY3BwCkBAIC0yOCw3ICsyOCw3
IEBAIHZvaWQgU3VyZmFjZVVwZGF0ZUluZm86OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2Rlci5lbmNvZGUodXBkYXRlUmVjdCk7CiAg
ICAgZW5jb2Rlci5lbmNvZGUoc2NhbGVGYWN0b3IpOwotICAgIGVuY29kZXIuZW5jb2RlKHN1cmZh
Y2VIYW5kbGUpOworICAgIGVuY29kZXIuZW5jb2RlKGF0bGFzSUQpOwogICAgIGVuY29kZXIuZW5j
b2RlKHN1cmZhY2VPZmZzZXQpOwogfQogCkBAIC0zOCw3ICszOCw3IEBAIGJvb2wgU3VyZmFjZVVw
ZGF0ZUluZm86OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFN1cmZh
Y2VVcGRhdGVJCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXItPmRlY29k
ZShyZXN1bHQuc2NhbGVGYWN0b3IpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFk
ZWNvZGVyLT5kZWNvZGUocmVzdWx0LnN1cmZhY2VIYW5kbGUpKQorICAgIGlmICghZGVjb2Rlci0+
ZGVjb2RlKHJlc3VsdC5hdGxhc0lEKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICgh
ZGVjb2Rlci0+ZGVjb2RlKHJlc3VsdC5zdXJmYWNlT2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1N1cmZhY2VVcGRhdGVJbmZv
LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU3VyZmFjZVVwZGF0ZUluZm8uaAppbmRleCAzY2Q5
Y2UzYzcxNTVjOTA3NzE3ZTBkYWVhM2QxNmVlYWM2MWE5NjJmLi5lMDg5NjdkOTY3MWE2NGVjZDM1
ODRjODZlMTM0ZjgwMzQwOTM3YjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
U3VyZmFjZVVwZGF0ZUluZm8uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU3VyZmFjZVVw
ZGF0ZUluZm8uaApAQCAtMjAsNyArMjAsNiBAQAogI2lmbmRlZiBTdXJmYWNlVXBkYXRlSW5mb19o
CiAjZGVmaW5lIFN1cmZhY2VVcGRhdGVJbmZvX2gKIAotI2luY2x1ZGUgIlNoYXJlYWJsZVN1cmZh
Y2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KIApAQCAtNDYsOCArNDUsOCBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIHBhZ2Ugc2Nh
bGUgZmFjdG9yIHVzZWQgdG8gcmVuZGVyIHRoaXMgdXBkYXRlLgogICAgIGZsb2F0IHNjYWxlRmFj
dG9yOwogCi0gICAgLy8gVGhlIGhhbmRsZSBvZiB0aGUgc2hhcmVhYmxlIGJpdG1hcCBjb250YWlu
aW5nIHRoZSB1cGRhdGVzLiBXaWxsIGJlIG51bGwgaWYgdGhlcmUgYXJlIG5vIHVwZGF0ZXMuCi0g
ICAgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlIHN1cmZhY2VIYW5kbGU7CisgICAgLy8gVGhlIGlk
IG9mIHRoZSB1cGRhdGUgYXRsYXMgaW5jbHVkaW5nIHRoZSBzaGFyZWFibGUgYml0bWFwIGNvbnRh
aW5pbmcgdGhlIHVwZGF0ZXMuCisgICAgaW50IGF0bGFzSUQ7CiAKICAgICAvLyBUaGUgb2Zmc2V0
IGluIHRoZSBiaXRtYXAgd2hlcmUgdGhlIHJlbmRlcmVkIGNvbnRlbnRzIGFyZS4KICAgICBXZWJD
b3JlOjpJbnRQb2ludCBzdXJmYWNlT2Zmc2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRy
ZWVDb29yZGluYXRvclByb3h5LmNwcAppbmRleCAxZDFkNGZlMjdkZDMxNjQyNmZhNjY0ZGE5NDhk
NDgzMWFiYmU2ZWFhLi40ZDQzZmViODE3MDBlOTU3OWNjNzY2ZWVhNzM3ZmE4Yzc2NTAzZDU2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcApAQCAt
NjQsMjIgKzY0LDkgQEAgdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpjcmVhdGVUaWxl
Rm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnMKIAogdm9pZCBMYXllclRyZWVD
b29yZGluYXRvclByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxl
SUQsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFdlYktpdDo6U3VyZmFjZVVwZGF0
ZUluZm8mIHVwZGF0ZUluZm8pCiB7Ci0gICAgUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IHN1cmZh
Y2U7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgR3JhcGhpY3NTdXJmYWNlVG9rZW4g
dG9rZW4gPSB1cGRhdGVJbmZvLnN1cmZhY2VIYW5kbGUuZ3JhcGhpY3NTdXJmYWNlVG9rZW4oKTsK
LSAgICBpZiAodG9rZW4uaXNWYWxpZCgpKSB7Ci0gICAgICAgIEhhc2hNYXA8R3JhcGhpY3NTdXJm
YWNlVG9rZW46OkJ1ZmZlckhhbmRsZSwgUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+ID46Oml0ZXJh
dG9yIGl0ID0gbV9zdXJmYWNlcy5maW5kKHRva2VuLmZyb250QnVmZmVySGFuZGxlKTsKLSAgICAg
ICAgaWYgKGl0ID09IG1fc3VyZmFjZXMuZW5kKCkpIHsKLSAgICAgICAgICAgIHN1cmZhY2UgPSBT
aGFyZWFibGVTdXJmYWNlOjpjcmVhdGUodXBkYXRlSW5mby5zdXJmYWNlSGFuZGxlKTsKLSAgICAg
ICAgICAgIG1fc3VyZmFjZXMuYWRkKHRva2VuLmZyb250QnVmZmVySGFuZGxlLCBzdXJmYWNlKTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBzdXJmYWNlID0gaXQtPnZhbHVlOwotICAgIH0g
ZWxzZQotICAgICAgICBzdXJmYWNlID0gU2hhcmVhYmxlU3VyZmFjZTo6Y3JlYXRlKHVwZGF0ZUlu
Zm8uc3VyZmFjZUhhbmRsZSk7Ci0jZWxzZQotICAgIHN1cmZhY2UgPSBTaGFyZWFibGVTdXJmYWNl
OjpjcmVhdGUodXBkYXRlSW5mby5zdXJmYWNlSGFuZGxlKTsKLSNlbmRpZgotICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVUaWxlLCBtX3JlbmRlcmVyLmdl
dCgpLCBsYXllcklELCB0aWxlSUQsIExheWVyVHJlZVJlbmRlcmVyOjpUaWxlVXBkYXRlKHVwZGF0
ZUluZm8udXBkYXRlUmVjdCwgdGFyZ2V0UmVjdCwgc3VyZmFjZSwgdXBkYXRlSW5mby5zdXJmYWNl
T2Zmc2V0KSkpOworICAgIFN1cmZhY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdXJmYWNlcy5maW5k
KHVwZGF0ZUluZm8uYXRsYXNJRCk7CisgICAgQVNTRVJUKGl0ICE9IG1fc3VyZmFjZXMuZW5kKCkp
OworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVUaWxl
LCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQsIExheWVyVHJlZVJlbmRlcmVyOjpU
aWxlVXBkYXRlKHVwZGF0ZUluZm8udXBkYXRlUmVjdCwgdGFyZ2V0UmVjdCwgaXQtPnZhbHVlLCB1
cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpKSk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlEKQpAQCAt
ODcsNiArNzQsMTggQEAgdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpyZW1vdmVUaWxl
Rm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQpCiAgICAgZGlzcGF0Y2hVcGRhdGUoYmlu
ZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxheWVy
SUQsIHRpbGVJRCkpOwogfQogCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmNyZWF0
ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lELCBjb25zdCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUm
IGhhbmRsZSkKK3sKKyAgICBBU1NFUlQoIW1fc3VyZmFjZXMuY29udGFpbnMoYXRsYXNJRCkpOwor
ICAgIG1fc3VyZmFjZXMuYWRkKGF0bGFzSUQsIFNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0ZShoYW5k
bGUpKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpyZW1vdmVVcGRhdGVB
dGxhcyhpbnQgYXRsYXNJRCkKK3sKKyAgICBBU1NFUlQobV9zdXJmYWNlcy5jb250YWlucyhhdGxh
c0lEKSk7CisgICAgbV9zdXJmYWNlcy5yZW1vdmUoYXRsYXNJRCk7Cit9CisKIHZvaWQgTGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eTo6ZGVsZXRlQ29tcG9zaXRpbmdMYXllcihXZWJMYXllcklEIGlk
KQogewogICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpkZWxldGVM
YXllciwgbV9yZW5kZXJlci5nZXQoKSwgaWQpKTsKQEAgLTIwMyw5ICsyMDIsNiBAQCB2b2lkIExh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnN5bmNDYW52YXModWludDMyX3QgaWQsIGNvbnN0IElu
dFNpemUmIGNhbnZhc1Npegogdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpwdXJnZUJh
Y2tpbmdTdG9yZXMoKQogewogICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNz
KCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpQdXJnZUJhY2tpbmdTdG9y
ZXMoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKLSNpZiBVU0UoR1JB
UEhJQ1NfU1VSRkFDRSkKLSAgICBtX3N1cmZhY2VzLmNsZWFyKCk7Ci0jZW5kaWYKIH0KIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oCmluZGV4IGFmZGNm
OTdjNWJlMzQwNjFlMWVlNjBkNzIzZjQyYzM5OTE0YzJhZTcuLjY0NjgwMTE2OGYyNGE3ODliN2Vi
ODA3MWNmNGI2ZjhhNGM0ZmI5N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29y
ZGluYXRvclByb3h5LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJDb29yZGluYXRlZEdy
YXBoaWNzQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5LmgiCiAj
aW5jbHVkZSAiUmVnaW9uLmgiCisjaW5jbHVkZSAiU2hhcmVhYmxlU3VyZmFjZS5oIgogI2luY2x1
ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgiCiAjaW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CkBAIC02NCw2ICs2NSw4IEBAIHB1
YmxpYzoKICAgICB2b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJ
RCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJik7CiAg
ICAgdm9pZCB1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYpOwogICAgIHZvaWQg
cmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlEKTsKKyAgICB2b2lkIGNy
ZWF0ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lELCBjb25zdCBTaGFyZWFibGVTdXJmYWNlOjpIYW5k
bGUmKTsKKyAgICB2b2lkIHJlbW92ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lEKTsKICAgICB2b2lk
IGNyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3QsIGNvbnN0IFdlYktpdDo6U2hh
cmVhYmxlQml0bWFwOjpIYW5kbGUmKTsKICAgICB2b2lkIGRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZShpbnQ2NF90KTsKICAgICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRv
clByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBD
b3JlSVBDOjpNZXNzYWdlRGVjb2RlciYpOwpAQCAtOTAsOSArOTMsOCBAQCBwcm90ZWN0ZWQ6CiAg
ICAgV2ViQ29yZTo6SW50UmVjdCBtX2xhc3RTZW50VmlzaWJsZVJlY3Q7CiAgICAgZmxvYXQgbV9s
YXN0U2VudFNjYWxlOwogICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgbV9sYXN0U2VudFRyYWplY3Rv
cnlWZWN0b3I7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgSGFzaE1hcDxXZWJDb3Jl
OjpHcmFwaGljc1N1cmZhY2VUb2tlbjo6QnVmZmVySGFuZGxlLCBSZWZQdHI8U2hhcmVhYmxlU3Vy
ZmFjZT4gPiBtX3N1cmZhY2VzOwotI2VuZGlmCisgICAgdHlwZWRlZiBIYXNoTWFwPGludCAvKiBh
dGxhc0lEICovLCBSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gPiBTdXJmYWNlTWFwOworICAgIFN1
cmZhY2VNYXAgbV9zdXJmYWNlczsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHku
bWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IGI4NDJiOTk1MDBm
ZTIzY2Y4Y2EwNzRkZmQzZjlmZGMzZGZkYjhmM2UuLmJhODhkZTUzZmYzM2U0NWYxZDA4OGEzZDIw
NTU3MGE0MGZkNGI1NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4KKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbgpAQCAtMjksNiArMjksOCBAQCBtZXNzYWdlcyAt
PiBMYXllclRyZWVDb29yZGluYXRvclByb3h5IHsKICAgICBDcmVhdGVUaWxlRm9yTGF5ZXIodWlu
dDMyX3QgbGF5ZXJJRCwgaW50IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0YXJnZXRSZWN0LCBX
ZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCiAgICAgVXBkYXRlVGlsZUZvckxh
eWVyKHVpbnQzMl90IGxheWVySUQsIGludCB0aWxlSUQsIFdlYkNvcmU6OkludFJlY3QgdGFyZ2V0
UmVjdCwgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvKQogICAgIFJlbW92ZVRp
bGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCBpbnQgdGlsZUlEKQorICAgIENyZWF0ZVVwZGF0
ZUF0bGFzKGludCBhdGxhc0lELCBXZWJLaXQ6OlNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSBoYW5k
bGUpCisgICAgUmVtb3ZlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQpCiAgICAgQ3JlYXRlRGlyZWN0
bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXksIFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpI
YW5kbGUgaGFuZGxlKQogICAgIERlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90
IGtleSkKICAgICBEaWRSZW5kZXJGcmFtZShXZWJDb3JlOjpJbnRTaXplIGNvbnRlbnRzU2l6ZSwg
V2ViQ29yZTo6SW50UmVjdCBjb3ZlcmVkUmVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCmluZGV4IGUzZGJhYjE0OTMy
MmE1ZjFjMzM1ZTdhNzY4ZWJjYTU2OTE4MGY5YTkuLmEwZjRmNjVmNDFiMDZjYWRhNGU4ZmRmZGNk
MjMyMzVjY2FhZWRkMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcApAQCAtNjM3LDkgKzYzNyw5IEBAIENvbG9yIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3Io
KSBjb25zdAogICAgIHJldHVybiBjb250ZW50c09wYXF1ZSgpID8gQ29sb3I6OndoaXRlIDogQ29s
b3I6OnRyYW5zcGFyZW50OwogfQogCi1QYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dD4gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgc2l6ZSwgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUsIFdl
YkNvcmU6OkludFBvaW50JiBvZmZzZXQpCitQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dD4gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgaW50JiBhdGxhcywgV2ViQ29yZTo6SW50UG9pbnQmIG9m
ZnNldCkKIHsKLSAgICByZXR1cm4gbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQtPmJl
Z2luQ29udGVudFVwZGF0ZShzaXplLCBjb250ZW50c09wYXF1ZSgpID8gMCA6IFNoYXJlYWJsZUJp
dG1hcDo6U3VwcG9ydHNBbHBoYSwgaGFuZGxlLCBvZmZzZXQpOworICAgIHJldHVybiBtX0Nvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+YmVnaW5Db250ZW50VXBkYXRlKHNpemUsIGNvbnRl
bnRzT3BhcXVlKCkgPyAwIDogU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhLCBhdGxhcywg
b2Zmc2V0KTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZVRpbGUo
aW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IElu
dFJlY3QmIHRhcmdldFJlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCmluZGV4IGYyM2ZkMWRmZGU2ODBiMmUyOTIwNjEwYTMz
Y2JhMzY3ZTc3ZjYyZjguLmI4ZTg1OTU3MWM3N2Y5YjUyMGFhMzNjYTAyYWJmYjE0NjhjNmIzNGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllci5oCkBAIC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYXR0
YWNoTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIq
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNGaXhlZExheWVycygpID0gMDsKLSAgICB2aXJ0
dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRh
dGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MsIFNoYXJl
YWJsZVN1cmZhY2U6OkhhbmRsZSYsIFdlYkNvcmU6OkludFBvaW50JikgPSAwOworICAgIHZpcnR1
YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0
ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncywgaW50JiBh
dGxhc0lELCBXZWJDb3JlOjpJbnRQb2ludCYpID0gMDsKIH07CiB9CiAKQEAgLTE0Nyw3ICsxNDcs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoaW50IHRpbGVJRCwgY29u
c3QgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IEludFJlY3QmKSBPVkVSUklERTsK
ICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlN1
cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgSW50UmVjdCYpIE9WRVJSSURFOwogICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVUaWxlKGludCB0aWxlSUQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgUGFzc093
blB0cjxHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBJbnRTaXplJiwg
V2ViS2l0OjpTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmLCBJbnRQb2ludCYpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0
ZShjb25zdCBJbnRTaXplJiwgaW50JiBhdGxhc0lELCBJbnRQb2ludCYpIE9WRVJSSURFOwogCiAg
ICAgdm9pZCBzZXRDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQoV2ViS2l0OjpDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkVGlsZS5jcHAKaW5kZXggNjY4Y2E1ZDllZGU0OTlkZWEyYWViNTkyMDYzODdm
ZGQ2ZjJlOWFhNS4uNTQ4ZDQ5ZDMyN2YwMzU1MzI3NDZmZDJmYjU5NTViZDYxZGE4YmFjNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuY3BwCkBAIC03Myw3
ICs3Myw3IEBAIFZlY3RvcjxJbnRSZWN0PiBDb29yZGluYXRlZFRpbGU6OnVwZGF0ZUJhY2tCdWZm
ZXIoKQogICAgICAgICByZXR1cm4gVmVjdG9yPEludFJlY3Q+KCk7CiAKICAgICBTdXJmYWNlVXBk
YXRlSW5mbyB1cGRhdGVJbmZvOwotICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNz
Q29udGV4dCA9IG1fY2xpZW50LT5iZWdpbkNvbnRlbnRVcGRhdGUobV9kaXJ0eVJlY3Quc2l6ZSgp
LCB1cGRhdGVJbmZvLnN1cmZhY2VIYW5kbGUsIHVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCk7Cisg
ICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gbV9jbGllbnQtPmJl
Z2luQ29udGVudFVwZGF0ZShtX2RpcnR5UmVjdC5zaXplKCksIHVwZGF0ZUluZm8uYXRsYXNJRCwg
dXBkYXRlSW5mby5zdXJmYWNlT2Zmc2V0KTsKICAgICBpZiAoIWdyYXBoaWNzQ29udGV4dCkKICAg
ICAgICAgcmV0dXJuIFZlY3RvcjxJbnRSZWN0PigpOwogICAgIGdyYXBoaWNzQ29udGV4dC0+dHJh
bnNsYXRlKC1tX2RpcnR5UmVjdC54KCksIC1tX2RpcnR5UmVjdC55KCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRUaWxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuaAppbmRleCA4NGQxMTM0ZjA0MmU5ZjUyZTAz
ZmNiNDEyYzAzZDMzN2E2NDU3OWY0Li4zMmZmNGU3Yzc5MWYyYmUzNGI1MDM4MDA4NTY1ODM4NmVl
MWVjNjM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuaApA
QCAtMjgsNyArMjgsNiBAQAogCiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCiAKLSNpbmNs
dWRlICJTaGFyZWFibGVTdXJmYWNlLmgiCiAjaW5jbHVkZSAiVGlsZS5oIgogI2luY2x1ZGUgIlRp
bGVkQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiV2ViQ29yZS9JbnRSZWN0LmgiCkBAIC03OSw3
ICs3OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShpbnQgdGlsZUlE
LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVw
ZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmVUaWxlKGludCB0aWxlSUQpID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYsIFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYsIFdlYkNvcmU6OkludFBvaW50Jikg
PSAwOworICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJl
Z2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgaW50JiBhdGxhc0lELCBX
ZWJDb3JlOjpJbnRQb2ludCYpID0gMDsKIH07CiAKIGNsYXNzIENvb3JkaW5hdGVkVGlsZUJhY2tl
bmQgOiBwdWJsaWMgV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmVCYWNrZW5kIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcAppbmRleCA3
ZWI0NzliZTA4MTYyMWM3OWJlOTExNWY1Njk5NGYyY2UwYjM1YTAwLi45ZWIzNzhlNWRhMzMxZmM4
YzkxYzUyYTQ0OTliNmE1OWQ0ZWZmMmFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCkBAIC02MTYsNiArNjE2LDE2IEBAIHZvaWQg
TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJlbW92ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQg
dGlsZUlEKQogICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eTo6UmVtb3ZlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCkpOwogfQogCit2b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVhdGVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCwgY29u
c3QgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUpCit7CisgICAgbV93ZWJQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpDcmVhdGVVcGRhdGVBdGxh
cyhhdGxhc0lELCBoYW5kbGUpKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cmVt
b3ZlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQpCit7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpSZW1vdmVVcGRhdGVBdGxhcyhhdGxhc0lE
KSk7Cit9CisKIFdlYkNvcmU6OkludFJlY3QgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnZpc2libGVD
b250ZW50c1JlY3QoKSBjb25zdAogewogICAgIHJldHVybiBtX3Zpc2libGVDb250ZW50c1JlY3Q7
CkBAIC02OTksMjMgKzcwOSwyMyBAQCB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpwdXJnZUJh
Y2tpbmdTdG9yZXMoKQogICAgIG1fdXBkYXRlQXRsYXNlcy5jbGVhcigpOwogfQogCi1QYXNzT3du
UHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmJlZ2lu
Q29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBTaGFyZWFibGVCaXRt
YXA6OkZsYWdzIGZsYWdzLCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSwgV2ViQ29y
ZTo6SW50UG9pbnQmIG9mZnNldCkKK1Bhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
PiBMYXllclRyZWVDb29yZGluYXRvcjo6YmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIHNpemUsIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MgZmxhZ3MsIGludCYgYXRsYXNJ
RCwgV2ViQ29yZTo6SW50UG9pbnQmIG9mZnNldCkKIHsKICAgICBPd25QdHI8V2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQ7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkgewogICAgICAgICBVcGRhdGVBdGxhcyog
YXRsYXMgPSBtX3VwZGF0ZUF0bGFzZXNbaV0uZ2V0KCk7CiAgICAgICAgIGlmIChhdGxhcy0+Zmxh
Z3MoKSA9PSBmbGFncykgewogICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHJldHVybiBudWxsIGlm
IHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBidWZmZXIgc3BhY2UuCi0gICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQgPSBhdGxhcy0+YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKGhhbmRsZSwg
c2l6ZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dCA9IGF0bGFzLT5iZWdp
blBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIoYXRsYXNJRCwgc2l6ZSwgb2Zmc2V0KTsKICAgICAg
ICAgICAgIGlmIChncmFwaGljc0NvbnRleHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGdyYXBo
aWNzQ29udGV4dC5yZWxlYXNlKCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBzdGF0aWMgY29u
c3QgaW50IFNjcmF0Y2hCdWZmZXJEaW1lbnNpb24gPSAxMDI0OyAvLyBTaG91bGQgYmUgYSBwb3dl
ciBvZiB0d28uCi0gICAgbV91cGRhdGVBdGxhc2VzLmFwcGVuZChhZG9wdFB0cihuZXcgVXBkYXRl
QXRsYXMoU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiwgZmxhZ3MpKSk7CisgICAgbV91cGRhdGVBdGxh
c2VzLmFwcGVuZChhZG9wdFB0cihuZXcgVXBkYXRlQXRsYXModGhpcywgU2NyYXRjaEJ1ZmZlckRp
bWVuc2lvbiwgZmxhZ3MpKSk7CiAgICAgc2NoZWR1bGVSZWxlYXNlSW5hY3RpdmVBdGxhc2VzKCk7
Ci0gICAgcmV0dXJuIG1fdXBkYXRlQXRsYXNlcy5sYXN0KCktPmJlZ2luUGFpbnRpbmdPbkF2YWls
YWJsZUJ1ZmZlcihoYW5kbGUsIHNpemUsIG9mZnNldCk7CisgICAgcmV0dXJuIG1fdXBkYXRlQXRs
YXNlcy5sYXN0KCktPmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihhdGxhc0lELCBzaXpl
LCBvZmZzZXQpOwogfQogCiBjb25zdCBkb3VibGUgUmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVy
SW50ZXJ2YWwgPSAwLjU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IuaAppbmRleCBiZDI5OWM1NGZiZWNhMjVjNmJiOWYxN2FhMDdkOTVhZGZjODg2
NGY5Li5kNzI1YWY2OTdhODUzZGVjOTFmYzY4OTU5MmEyNWQzMDk2NDc3MWY1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVDb29yZGluYXRvci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmgKQEAgLTM4LDgg
KzM4LDkgQEAgY2xhc3MgVXBkYXRlSW5mbzsKIGNsYXNzIFdlYlBhZ2U7CiAKIGNsYXNzIExheWVy
VHJlZUNvb3JkaW5hdG9yIDogcHVibGljIExheWVyVHJlZUhvc3QsIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDbGllbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllckNsaWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJs
aWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkgeworICAgICwgcHVibGljIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllckNsaWVudAorICAgICwgcHVibGljIFVwZGF0ZUF0bGFzQ2xpZW50Cisg
ICAgLCBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkgewogcHVibGljOgogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPExheWVyVHJlZUNvb3JkaW5hdG9yPiBjcmVhdGUoV2ViUGFnZSop
OwogICAgIHZpcnR1YWwgfkxheWVyVHJlZUNvb3JkaW5hdG9yKCk7CkBAIC05Myw3ICs5NCwxMSBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllciopOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRMYXllcnMoKTsK
IAotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2lu
Q29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0bWFwOjpG
bGFncywgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiwgV2ViQ29yZTo6SW50UG9pbnQmKTsKKyAg
ICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRl
bnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3Ms
IGludCYgYXRsYXNJRCwgV2ViQ29yZTo6SW50UG9pbnQmKTsKKworICAgIC8vIFVwZGF0ZUF0bGFz
Q2xpZW50CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lELCBj
b25zdCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
VXBkYXRlQXRsYXMoaW50IGF0bGFzSUQpOwogCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FKQogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpIE9WRVJSSURFOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFz
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHAK
aW5kZXggMjc1MDA2MzVkMjc1ZTI4MzJkZTdhMTc5MjNjZTk4OTZiYjg4MzNhYS4uOWE1NDE4ZjFl
YWFhMzQ4N2I0ZTQyNGI5YTk1NjIwMjA4MzA5NzU0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuY3BwCkBAIC0zMCwxMiArMzAsMjggQEAg
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1VcGRhdGVB
dGxhczo6VXBkYXRlQXRsYXMoaW50IGRpbWVuc2lvbiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncyBm
bGFncykKLSAgICA6IG1fZmxhZ3MoZmxhZ3MpCitVcGRhdGVBdGxhczo6VXBkYXRlQXRsYXMoVXBk
YXRlQXRsYXNDbGllbnQqIGNsaWVudCwgaW50IGRpbWVuc2lvbiwgU2hhcmVhYmxlQml0bWFwOjpG
bGFncyBmbGFncykKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fZmxhZ3MoZmxhZ3Mp
CiAgICAgLCBtX2luYWN0aXZpdHlJblNlY29uZHMoMCkKKyAgICAsIG1faXNWYWlsZCh0cnVlKQog
eworICAgIHN0YXRpYyBpbnQgbmV4dElEID0gMDsKKyAgICBtX0lEID0gKytuZXh0SUQ7CiAgICAg
SW50U2l6ZSBzaXplID0gbmV4dFBvd2VyT2ZUd28oSW50U2l6ZShkaW1lbnNpb24sIGRpbWVuc2lv
bikpOwogICAgIG1fc3VyZmFjZSA9IFNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0ZShzaXplLCBmbGFn
cywgU2hhcmVhYmxlU3VyZmFjZTo6U3VwcG9ydHNHcmFwaGljc1N1cmZhY2UpOworCisgICAgaWYg
KCFtX3N1cmZhY2UtPmNyZWF0ZUhhbmRsZShtX2hhbmRsZSkpIHsKKyAgICAgICAgbV9pc1ZhaWxk
ID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9jbGllbnQtPmNyZWF0ZVVw
ZGF0ZUF0bGFzKG1fSUQsIG1faGFuZGxlKTsKK30KKworVXBkYXRlQXRsYXM6On5VcGRhdGVBdGxh
cygpCit7CisgICAgaWYgKG1faXNWYWlsZCkKKyAgICAgICAgbV9jbGllbnQtPnJlbW92ZVVwZGF0
ZUF0bGFzKG1fSUQpOwogfQogCiB2b2lkIFVwZGF0ZUF0bGFzOjpidWlsZExheW91dElmTmVlZGVk
KCkKQEAgLTUxLDcgKzY3LDcgQEAgdm9pZCBVcGRhdGVBdGxhczo6ZGlkU3dhcEJ1ZmZlcnMoKQog
ICAgIG1fYXJlYUFsbG9jYXRvci5jbGVhcigpOwogfQogCi1QYXNzT3duUHRyPEdyYXBoaWNzQ29u
dGV4dD4gVXBkYXRlQXRsYXM6OmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihTaGFyZWFi
bGVTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwg
SW50UG9pbnQmIG9mZnNldCkKK1Bhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBVcGRhdGVBdGxh
czo6YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKGludCYgYXRsYXNJRCwgY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgc2l6ZSwgSW50UG9pbnQmIG9mZnNldCkKIHsKICAgICBtX2luYWN0aXZp
dHlJblNlY29uZHMgPSAwOwogICAgIGJ1aWxkTGF5b3V0SWZOZWVkZWQoKTsKQEAgLTYxLDggKzc3
LDEwIEBAIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBVcGRhdGVBdGxhczo6YmVnaW5QYWlu
dGluZ09uQXZhaWxhYmxlQnVmZmVyKFNoYXJlYWJsCiAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+KCk7CiAKLSAgICBpZiAo
IW1fc3VyZmFjZS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkpCi0gICAgICAgIHJldHVybiBQYXNzT3du
UHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4oKTsKKyAgICBpZiAoIW1faXNWYWlsZCkKKyAg
ICAgICAgcmV0dXJuIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PigpOworCisgICAgYXRsYXNJ
RCA9IG1fSUQ7CiAKICAgICAvLyBGSVhNRTogVXNlIHRyaS1zdGF0ZSBidWZmZXJzLCB0byBhbGxv
dyBmYXN0ZXIgdXBkYXRlcy4KICAgICBvZmZzZXQgPSByZWN0LmxvY2F0aW9uKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oCmluZGV4IDAwZTg1
MGI4MzFiZDcyZTk5YmJhNDExYTIzNzA4YWJhOTg0NDU0ODYuLjdjZWZlOWM5Nzk0MjE1ODYyNzNm
NGUwY2QzMDlhMjAyMzRjNzFhZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9VcGRhdGVBdGxhcy5oCkBAIC0zMiwxNSArMzIsMjIgQEAgY2xhc3MgSW50UG9pbnQ7
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBVcGRhdGVBdGxhc0NsaWVudCB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lELCBjb25z
dCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92
ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lEKSA9IDA7Cit9OworCiBjbGFzcyBVcGRhdGVBdGxhcyB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVXBkYXRlQXRsYXMpOwogcHVibGljOgotICAgIFVw
ZGF0ZUF0bGFzKGludCBkaW1lbnNpb24sIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MpOworICAgIFVw
ZGF0ZUF0bGFzKFVwZGF0ZUF0bGFzQ2xpZW50KiwgaW50IGRpbWVuc2lvbiwgU2hhcmVhYmxlQml0
bWFwOjpGbGFncyk7CisgICAgflVwZGF0ZUF0bGFzKCk7CiAKICAgICBpbmxpbmUgV2ViQ29yZTo6
SW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlLT5zaXplKCk7IH0KIAogICAg
IC8vIFJldHVybnMgYSBudWxsIHBvaW50ZXIgb2YgdGhlcmUgaXMgbm8gYXZhaWxhYmxlIGJ1ZmZl
ci4KLSAgICBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5QYWludGlu
Z09uQXZhaWxhYmxlQnVmZmVyKFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYsIGNvbnN0IFdlYkNv
cmU6OkludFNpemUmLCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zmc2V0KTsKKyAgICBQYXNzT3duUHRy
PFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVy
KGludCYgYXRsYXNJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdlYkNvcmU6OkludFBvaW50
JiBvZmZzZXQpOwogICAgIHZvaWQgZGlkU3dhcEJ1ZmZlcnMoKTsKICAgICBTaGFyZWFibGVCaXRt
YXA6OkZsYWdzIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9mbGFnczsgfQogCkBAIC02MCwxMCAr
NjcsMTQgQEAgcHJpdmF0ZToKICAgICB2b2lkIGJ1aWxkTGF5b3V0SWZOZWVkZWQoKTsKIAogcHJp
dmF0ZToKKyAgICBVcGRhdGVBdGxhc0NsaWVudCogbV9jbGllbnQ7CiAgICAgT3duUHRyPEdlbmVy
YWxBcmVhQWxsb2NhdG9yPiBtX2FyZWFBbGxvY2F0b3I7CiAgICAgU2hhcmVhYmxlQml0bWFwOjpG
bGFncyBtX2ZsYWdzOwogICAgIFJlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBtX3N1cmZhY2U7Cisg
ICAgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlIG1faGFuZGxlOwogICAgIGRvdWJsZSBtX2luYWN0
aXZpdHlJblNlY29uZHM7CisgICAgaW50IG1fSUQ7CisgICAgYm9vbCBtX2lzVmFpbGQ7CiB9Owog
CiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>