<?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>226841</bug_id>
          
          <creation_ts>2021-06-09 12:47:41 -0700</creation_ts>
          <short_desc>ANGLE Metal perf regression: sdf-sapp.html</short_desc>
          <delta_ts>2021-07-07 14:12:32 -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>WebGL</component>
          <version>Safari Technology Preview</version>
          <rep_platform>Mac (Intel)</rep_platform>
          <op_sys>macOS 11</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>227226</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>227024</dependson>
    
    <dependson>227059</dependson>
          <blocked>223434</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Andre Weissflog">floooh</reporter>
          <assigned_to name="Kyle Piddington">kpiddington</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>kbr</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>kpiddington</cc>
    
    <cc>marcin.ignac</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1768292</commentid>
    <comment_count>0</comment_count>
    <who name="Andre Weissflog">floooh</who>
    <bug_when>2021-06-09 12:47:41 -0700</bug_when>
    <thetext>One of my WASM + WebGL samples with a somewhat complex pixel shader (shadertoy-like signed-distance-field rendering) is seeing a fairly serious regression in the new Metal backend.

My config:

- mid-2014 13&quot;MBP
- macOS version 11.5 Beta (20G5033c)
- Safari Technology Preview Release 125 (Safari 14.2, WebKit 16612.1.15.1.12)

To reproduce:

- first save and close any open files and applications, a forced reboot may be required!
- in Safari Technology Preview enable the following experimental features: &quot;WebGL 2.0&quot; and &quot;WebGL via Metal&quot; (I suspect that only &quot;WebGL via Metal&quot; is needed though)
- navigate to https://floooh.github.io/sokol-html5/sdf-sapp.html

Expected behaviour:

- the demo should run smoothly at 60fps

Observed behaviour:

- the demo only runs at an extremely low frame rate (less then 1 fps) and causes the entire macOS UI to become unresponsive
- in some cases the entire macOS desktop is replaced with a random pixel pattern (this is where a forced reboot is needed)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768298</commentid>
    <comment_count>1</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2021-06-09 12:55:42 -0700</bug_when>
    <thetext>Kyle, would it be possible for you to triage this, since it&apos;s apparently a problem specific to the Metal backend?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768331</commentid>
    <comment_count>2</comment_count>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2021-06-09 13:49:58 -0700</bug_when>
    <thetext>This appears to be an issue with Metal on the 11.5 beta, rather than with Safari Tech Preview 125. I&apos;ll do my best to track down what&apos;s happening here, but I had no performance issues when running against 11.4 on a similar system.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768395</commentid>
    <comment_count>3</comment_count>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2021-06-09 16:59:39 -0700</bug_when>
    <thetext>Perhaps I was mistaken, or lucky earlier. I apologize, I&apos;m still seeing the system slowdown on a 11.4 release.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768416</commentid>
    <comment_count>4</comment_count>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2021-06-09 18:08:34 -0700</bug_when>
    <thetext>A proposed workaround: It seems the current issue is due to us queueing up an excessive number of frames. It seems where the OpenGL backend may have a cap, the metal backend does not.

@Andrew Weissflog,
While we&apos;re working to address the underlying issue, can you try adding a glFinish() to the end of your render loop, instead of a glFlush()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768477</commentid>
    <comment_count>5</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-06-10 00:46:35 -0700</bug_when>
    <thetext>So there are two problems:
1) When UI is running slow, compositor might skip the frame and we will reuse the back  buffer but not cancel the work. The work on that back buffer might still be executing, in case the UI slowness is due to slow WebGL content. Drawing a new slow frame on top of this is only making it slower.

2) Regardless or in conjunction to to 1), there is the problem of not waiting on a fence for completing certain amount of frames (2-3?).

Discussed in passing in bug 222731 but I didn&apos;t file a specific bug about the work yet (we can use this bug).


I&apos;d imagine conceptually we could fix 1) by implementing glDiscardFramebuffer() and call that first thing for the new frame in case of preserveDrawingBuffer=false, but I don&apos;t know how effective would that be.

Other would be to make sure sync points work and add a sync point per frame and wait for the  i-2 sync point?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768702</commentid>
    <comment_count>6</comment_count>
      <attachid>431119</attachid>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2021-06-10 13:42:53 -0700</bug_when>
    <thetext>Created attachment 431119
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768705</commentid>
    <comment_count>7</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2021-06-10 13:43:43 -0700</bug_when>
    <thetext>Note that there are important steps to take when updating ANGLE. See https://trac.webkit.org/wiki/UpdatingANGLE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768820</commentid>
    <comment_count>8</comment_count>
      <attachid>431119</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2021-06-10 16:59:30 -0700</bug_when>
    <thetext>Comment on attachment 431119
Patch

Chromium implemented this kind of backpressure at a higher level - allow no more than a certain number of outstanding frames before throttling the application. See these BackpressureFenceCreate and BackpressureFenceWait methods:

https://source.chromium.org/chromium/chromium/src/+/main:ui/gl/gl_context.h;l=248?q=BackpressureFenceCreate

How can we know how many command buffers an application will use per frame? Is it possible to implement this throttling at a higher level, using APIs that ANGLE already exposes (like glFenceSync / glGetSync / glWaitSync)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768825</commentid>
    <comment_count>9</comment_count>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2021-06-10 17:26:45 -0700</bug_when>
    <thetext>(In reply to Kenneth Russell from comment #8)
&gt; Comment on attachment 431119 [details]
&gt; Patch
 
&gt; How can we know how many command buffers an application will use per frame?
&gt; Is it possible to implement this throttling at a higher level, using APIs
&gt; that ANGLE already exposes (like glFenceSync / glGetSync / glWaitSync)?

This is the exact problem I&apos;m facing right now, we don&apos;t know how many CB&apos;s will be running per frame. &apos;6 enqueued at any time&apos; is a poor metric, I&apos;ll see about the higher level API&apos;s, but we do need a solution as this can, as Andre mentions, lock up the rest of the system exhausting metal resources.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769003</commentid>
    <comment_count>10</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2021-06-11 11:31:22 -0700</bug_when>
    <thetext>The boundaries between rendered frames are best understood at the WebKit level rather than inside ANGLE. Could we try maintaining a queue of FenceSync objects in GraphicsContextGLOpenGL::prepareTextureImpl (Source/WebCore/platform/graphics/angle/GraphicsContextGLANGLE.cpp) for WebGL 2.0 contexts only, and wait on them if they haven&apos;t completed within 3-4 frames?

https://source.chromium.org/chromium/chromium/src/+/main:ui/gl/gl_context.cc;l=229?q=BackpressureFenceCreate</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769155</commentid>
    <comment_count>11</comment_count>
      <attachid>431119</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2021-06-11 18:59:01 -0700</bug_when>
    <thetext>Comment on attachment 431119
Patch

I&apos;d like other people to weigh in on this. This would effectively be blocking the Web Process while waiting for the GPU - that&apos;s probably OK, and maybe better than simply pushing too much at it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769163</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-11 19:39:08 -0700</bug_when>
    <thetext>&lt;rdar://problem/79228701&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769245</commentid>
    <comment_count>13</comment_count>
      <attachid>431119</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-06-12 23:18:48 -0700</bug_when>
    <thetext>Comment on attachment 431119
Patch

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

&gt; Source/ThirdParty/ANGLE/ChangeLog:9
&gt; + 

What is the performance result of this change?

Why does submitting a lot of work cause a performance drop?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769246</commentid>
    <comment_count>14</comment_count>
      <attachid>431119</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-06-12 23:18:49 -0700</bug_when>
    <thetext>Comment on attachment 431119
Patch

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

&gt; Source/ThirdParty/ANGLE/ChangeLog:9
&gt; + 

What is the performance result of this change?

Why does submitting a lot of work cause a performance drop?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769247</commentid>
    <comment_count>15</comment_count>
      <attachid>431119</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-06-12 23:22:41 -0700</bug_when>
    <thetext>Comment on attachment 431119
Patch

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

&gt; Source/ThirdParty/ANGLE/ChangeLog:6
&gt; +        WebGL content was submitting an unbounded amount of GPU work and frames to ANGLE. In OpenGL, this is handled by internal logic. However, for Metal, we need to directly manage how much in-flight work we have at once. 

What about non-Apple ports that still use an OpenGL backend? (Do those exist?)

Was the behavior of the old OpenGL codepath to block the main thread until there is capacity available?

&gt; Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_command_buffer.mm:542
&gt; +    dispatch_semaphore_wait(mMetalEnqueueSemaphore, DISPATCH_TIME_FOREVER);

Forever sounds a little extreme.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769248</commentid>
    <comment_count>16</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-06-12 23:29:19 -0700</bug_when>
    <thetext>I think this is reasonable, given the semantics of WebGL - if the application drew something, we can’t just ignore them if there’s a lot of work in flight. I guess we could like defer/record their work, return early, and submit it again later on their behalf, but that sounds a little crazy to do. I can’t think of another solution other than blocking. Curious what the old OpenGL codepath did.

Given Kimmo’s comment above, I think he should be the final one to review this, so I won’t r+ just yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769249</commentid>
    <comment_count>17</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-06-12 23:31:13 -0700</bug_when>
    <thetext>(In reply to Myles C. Maxfield from comment #16)
&gt; submit it again later on their behalf

This could also get you into the situation where the application submits 10 minutes’ worth of work during the first frame and now the content is no longer interactive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769359</commentid>
    <comment_count>18</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-06-14 05:34:32 -0700</bug_when>
    <thetext>The semaphore leaks as per my reading? (Or do we have some sort of objc arc/releasepool enabled here?)

While something like this is probably needed, I think this context is maybe the wrong  context to push this particular in. However, we&apos;ve done &quot;ends justify the means&quot; type work before, so from that perspective this could be landed as is (with the semaphore leak fixed?)

Slowdowns due to single shader complexity are due to single draw call slowness.
The change here implies that the measure of badness is the amount of stuff sent to GPU via command buffers. E.g. the statement is: 7 command buffers == bad. However, in this case it can be argued that that even 1, 2 or 3 command buffers == bad.

Said differently: We see major amount of command buffers because we just keep generating simple command buffers that take huge amount of time. It&apos;s not because we would be generating overly much command buffers.

So I think for _this particular case_, the correct fix is to create back pressure to the frame generation by waiting that we don&apos;t get ahead of the finished work more than 2 frames.

I can implement this if we have time to wait for few days.

There&apos;s a separate concern where single frame would send, say, 1000 command buffers worth of data. In these cases, a fix similar to this would probably be needed. My concern is that since we&apos;re using wrong solution for the current problem, we don&apos;t end up analysing the right problem at all. In other words, it&apos;d be good if we had the test case of 100 command buffers per frame which we could associate with the fix.

The overt caution is due to a scenario where 2 years down the line I&apos;d be debugging some sort of perf problem and failing to understand that there&apos;s a implicit fuzz factor that limits the amount of work done. Explicit configuration knobs are easier to find in cases like that, but I don&apos;t see this being very configurable through the abstraction.

If I understand correctly the objects that we can induce to be allocated during frame rendering are fairly lightweight. So in general Metal rendering, if I understand correctly, having 7 command buffers in flight is not in general taxing the system? It&apos;s just that if the any of the buffers contain shaders that complete only in 1 hour, that&apos;s when the system has problems?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769427</commentid>
    <comment_count>19</comment_count>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2021-06-14 09:27:26 -0700</bug_when>
    <thetext>(In reply to Kimmo Kinnunen from comment #18)
&gt; The semaphore leaks as per my reading? (Or do we have some sort of objc
&gt; arc/releasepool enabled here?)

I&apos;ll double check, I was reading the man pages and didn&apos;t. spot dispatch-release

&gt; While something like this is probably needed, I think this context is maybe
&gt; the wrong  context to push this particular in. However, we&apos;ve done &quot;ends
&gt; justify the means&quot; type work before, so from that perspective this could be
&gt; landed as is (with the semaphore leak fixed?)
&gt; 
&gt; Slowdowns due to single shader complexity are due to single draw call
&gt; slowness.
&gt; The change here implies that the measure of badness is the amount of stuff
&gt; sent to GPU via command buffers. E.g. the statement is: 7 command buffers ==
&gt; bad. However, in this case it can be argued that that even 1, 2 or 3 command
&gt; buffers == bad.
You are correct in this case: the measure here is how many in-flight command buffers we have at any time. This could hinder apps with 6/7 simple draw calls to save apps with 1, 2, or 3 very large command offers.

&gt; 
&gt; Said differently: We see major amount of command buffers because we just
&gt; keep generating simple command buffers that take huge amount of time. It&apos;s
&gt; not because we would be generating overly much command buffers.
&gt; 
&gt; So I think for _this particular case_, the correct fix is to create back
&gt; pressure to the frame generation by waiting that we don&apos;t get ahead of the
&gt; finished work more than 2 frames.
&gt; 
&gt; I can implement this if we have time to wait for few days.

Let&apos;s chat offline.

&gt; There&apos;s a separate concern where single frame would send, say, 1000 command
&gt; buffers worth of data. In these cases, a fix similar to this would probably
&gt; be needed. My concern is that since we&apos;re using wrong solution for the
&gt; current problem, we don&apos;t end up analysing the right problem at all. In
&gt; other words, it&apos;d be good if we had the test case of 100 command buffers per
&gt; frame which we could associate with the fix.

Metal does have a system cap of a max number of in-flight command buffers. I believe most of the issue here isn&apos;t actually us using all of the command buffers up, but also exhausting GPU resources by creating frames.

&gt; The overt caution is due to a scenario where 2 years down the line I&apos;d be
&gt; debugging some sort of perf problem and failing to understand that there&apos;s a
&gt; implicit fuzz factor that limits the amount of work done. Explicit
&gt; configuration knobs are easier to find in cases like that, but I don&apos;t see
&gt; this being very configurable through the abstraction.

Agreed.

&gt; If I understand correctly the objects that we can induce to be allocated
&gt; during frame rendering are fairly lightweight. So in general Metal
&gt; rendering, if I understand correctly, having 7 command buffers in flight is
&gt; not in general taxing the system? It&apos;s just that if the any of the buffers
&gt; contain shaders that complete only in 1 hour, that&apos;s when the system has
&gt; problems?

From my sampling, the app is spending most of the time waiting for Metal to hand it a command buffer. The system slowdown might be due to other issues, such as us exhausting GPU memory by creating excessive amounts of IOSurfaces. Either way, back pressure is the correct solution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769787</commentid>
    <comment_count>20</comment_count>
      <attachid>431434</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-06-15 07:14:50 -0700</bug_when>
    <thetext>Created attachment 431434
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769795</commentid>
    <comment_count>21</comment_count>
      <attachid>431437</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-06-15 07:41:46 -0700</bug_when>
    <thetext>Created attachment 431437
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770013</commentid>
    <comment_count>22</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2021-06-15 16:42:06 -0700</bug_when>
    <thetext>Thanks for trying this direction Kimmo. Assuming the conformance test failures are due to Bug 227024 - have linked to that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770119</commentid>
    <comment_count>23</comment_count>
      <attachid>431437</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-06-16 02:06:21 -0700</bug_when>
    <thetext>Comment on attachment 431437
Patch

Moving the &quot;back pressure&quot; patch to the blocking bug 227059.

This bug should be continuing to investigate why sdf-sapp.html has a performance problem with Metal backend. The perf is OK on OpenGL, but poor on Metal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771629</commentid>
    <comment_count>24</comment_count>
    <who name="Marcin Ignac">marcin.ignac</who>
    <bug_when>2021-06-22 02:25:37 -0700</bug_when>
    <thetext>I would like to provide additional test case which although unaffected by WebGL on Metal setting it has identical symptoms:

Here is 250k instanced quad particles with somewhat complicated GPGPU curl noise fragment shader pass for animation.
http://projects.variable.io/webgl/shader-performance/

MacBook Pro 16&quot;
macOS Big Sur 11.4

Chrome 91.0.4472.106 + Intel UHD Graphics 630 = 30fps
Chrome 91.0.4472.106 + AMD Radeon Pro 5600M = 60fps

Safar 14.1.1 + Apple GPU = 30fps, feels like 5fps
Safari TP Release 126 + Apple GPU = 28fps, feels like 1-2fps

if i&apos;m unlucky it completely DDOSs my mac and have to wait e.g. 30s to close tab button to work after click</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1775449</commentid>
    <comment_count>25</comment_count>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2021-07-07 14:10:18 -0700</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 227226 ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1775452</commentid>
    <comment_count>26</comment_count>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2021-07-07 14:12:32 -0700</bug_when>
    <thetext>Enabling fastmath on integrated graphics fixes up a majority of performance.
Remaining frame-pacing work to be tracked here: https://bugs.webkit.org/show_bug.cgi?id=227059</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431119</attachid>
            <date>2021-06-10 13:42:53 -0700</date>
            <delta_ts>2021-06-15 07:14:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226841-20210610134252.patch</filename>
            <type>text/plain</type>
            <size>4571</size>
            <attacher name="Kyle Piddington">kpiddington</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4NTcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggNTQ5ZDAxOTFkYjcwNDgwZDgyM2FhNzg3OGVlZmJhMzIwZTE2MjhiMy4uZGZiMTY1NjhiZTQ2
NmQ0ODI3Nzg1MTcwZmJkNjZmNTlkMWUyMDA4YSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDIwIEBACisyMDIxLTA2LTEwICBLeWxlIFBpZGRpbmd0b24gIDxrcGlkZGlu
Z3RvbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkdMIHZpYSBNZXRhbF0gU2lnbmVkIERpc3Rh
bmNlIEZpZWxkIHNhbXBsZSBoYXMgYmFkIHBlcmZvcm1hbmNlIHZpYSBNZXRhbAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2ODQxCisKKyAgICAgICAg
V2ViR0wgY29udGVudCB3YXMgc3VibWl0dGluZyBhbiB1bmJvdW5kZWQgYW1vdW50IG9mIEdQVSB3
b3JrIGFuZCBmcmFtZXMgdG8gQU5HTEUuIEluIE9wZW5HTCwgdGhpcyBpcyBoYW5kbGVkIGJ5IGlu
dGVybmFsIGxvZ2ljLiBIb3dldmVyLCBmb3IgTWV0YWwsIHdlIG5lZWQgdG8gZGlyZWN0bHkgbWFu
YWdlIGhvdyBtdWNoIGluLWZsaWdodCB3b3JrIHdlIGhhdmUgYXQgb25jZS4gCisKKyAgICAgICAg
VG8gbWFuYWdlIHRoaXMsIHdlIGNyZWF0ZSBhbiBpbnRlcm5hbCBzZW1hcGhvcmUgdG8gYWxsb3cg
J04nIG51bWJlciBvZiBpbi1mbGlnaHQgY29tbWFuZCBidWZmZXJzIGF0IGFueSB0aW1lLiBCZWZv
cmUgd2UgY29tbWl0IGEgbmV3IGJ1ZmZlciwgd2UgaG9sZCBvZmYgdG8gYWxsb3cgZXhpc3Rpbmcg
YnVmZmVycyB0byBjb21wbGV0ZS4KKyAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRf
YnVmZmVyLmg6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21t
YW5kX2J1ZmZlci5tbToKKyAgICAgICAgKHJ4OjptdGw6OkNvbW1hbmRRdWV1ZTo6Q29tbWFuZFF1
ZXVlKToKKyAgICAgICAgKHJ4OjptdGw6OkNvbW1hbmRRdWV1ZTo6b25Db21tYW5kQnVmZmVyQ29t
bWl0dGVkKToKKyAgICAgICAgKHJ4OjptdGw6OkNvbW1hbmRRdWV1ZTo6b25Db21tYW5kQnVmZmVy
Q29tcGxldGVkKToKKwogMjAyMS0wNi0wMiAgS3lsZSBQaWRkaW5ndG9uICA8a3BpZGRpbmd0b25A
YXBwbGUuY29tPgogCiAgICAgICAgIEFkZCAnbWl4JyBvdmVycmlkZSB3aXRoIGJvb2wtdmVjdG9y
cyB0byBNU0wgdHJhbnNsYXRvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5kX2J1ZmZlci5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5k
X2J1ZmZlci5oCmluZGV4IDZlMGIzM2FhZTE5ZWUwOWQ0YmRmNjI0NzZmYTQyYTNjOTU4MGY1YTUu
Ljk1NTFmMTEzNjM1NzA2YTllNDRkNDNiNTI5NmE5NTExZWQ4MGU3MzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29t
bWFuZF9idWZmZXIuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVmZmVyLmgKQEAgLTIwLDYgKzIwLDcgQEAKICNp
bmNsdWRlIDx0aHJlYWQ+CiAjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KICNpbmNsdWRlIDx2ZWN0
b3I+CisjaW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KIAogI2luY2x1ZGUgImNvbW1vbi9G
aXhlZFZlY3Rvci5oIgogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCkBAIC00Nyw2ICs0
OCw3IEBAIGNsYXNzIE9jY2x1c2lvblF1ZXJ5UG9vbDsKIGNsYXNzIENvbW1hbmRRdWV1ZSBmaW5h
bCA6IHB1YmxpYyBXcmFwcGVkT2JqZWN0PGlkPE1UTENvbW1hbmRRdWV1ZT4+LCBhbmdsZTo6Tm9u
Q29weWFibGUKIHsKICAgcHVibGljOgorICAgIENvbW1hbmRRdWV1ZSgpOwogICAgIHZvaWQgcmVz
ZXQoKTsKICAgICB2b2lkIHNldChpZDxNVExDb21tYW5kUXVldWU+IG1ldGFsUXVldWUpOwogCkBA
IC05MCw3ICs5Miw3IEBAIGNsYXNzIENvbW1hbmRRdWV1ZSBmaW5hbCA6IHB1YmxpYyBXcmFwcGVk
T2JqZWN0PGlkPE1UTENvbW1hbmRRdWV1ZT4+LCBhbmdsZTo6Tm9uCiAgICAgfTsKICAgICBzdGQ6
OmRlcXVlPENtZEJ1ZmZlclF1ZXVlRW50cnk+IG1NZXRhbENtZEJ1ZmZlcnM7CiAgICAgc3RkOjpk
ZXF1ZTxDbWRCdWZmZXJRdWV1ZUVudHJ5PiBtTWV0YWxDbWRCdWZmZXJzVG1wOwotCisgICAgZGlz
cGF0Y2hfc2VtYXBob3JlX3QgbU1ldGFsRW5xdWV1ZVNlbWFwaG9yZTsKICAgICB1aW50NjRfdCBt
UXVldWVTZXJpYWxDb3VudGVyID0gMTsKICAgICBzdGQ6OmF0b21pYzx1aW50NjRfdD4gbUNvbW1p
dHRlZEJ1ZmZlclNlcmlhbHswfTsKICAgICBzdGQ6OmF0b21pYzx1aW50NjRfdD4gbUNvbXBsZXRl
ZEJ1ZmZlclNlcmlhbHswfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbWFuZF9idWZmZXIubW0gYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRf
YnVmZmVyLm1tCmluZGV4IGJlMDU5MWJhMjE2NGVmZWIxNDc0NDVjNWE5NzBjOGVlOWQwZWY3NDIu
LjUwZjAzNDQzNDNiYTFhYmQ3YjdiMDRlYjE4NTlkMGM0MDQ2NjQxNzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29t
bWFuZF9idWZmZXIubW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5kX2J1ZmZlci5tbQpAQCAtNzQsNiArNzQsOSBAQCBu
YW1lc3BhY2UKIAogI2RlZmluZSBBTkdMRV9NVExfVFlQRV9ERUNMKENNRCkgQ01ELAogCisvL05v
dGUsIHRoaXMgaXNuJ3QgZW1waXJpY2FsbHkgY2hvc2VuLCB0aGlzIGlzIGEgYmVzdC1ndWVzcyBh
c3N1bXB0aW9uIHRoYXQgZWFjaCBmcmFtZSB0YWtlcywgIG9yIHNob3VsZCB0YWtlIDIgY29tbWFu
ZCBidWZmZXJzIHRvIGNvbXBsZXRlLiBXZSB3aWxsIG5ldmVyICdydW4gb3V0JyBvZiBjb21tYW5k
IGJ1ZmZlcnMsIGJ1dCB3ZSBtYXkgc3RhbGwgb24gY29tbWl0dGluZyB1bnRpbCBwYXN0IGNvbW1h
bmQgYnVmZmVycyBhcmUgY29tcGxldGUuCitjb25zdGV4cHIgdWludDY0X3Qga01heEluRmxpZ2h0
Q29tbWFuZEJ1ZmZlcnMgPSA2OworCiAvLyBDb21tYW5kIHR5cGVzCiBlbnVtIGNsYXNzIENtZFR5
cGUgOiB1aW50OF90CiB7CkBAIC00MDksNiArNDEyLDExIEBAIE5TU3RyaW5nICpjcHBMYWJlbFRv
T2JqQyhjb25zdCBzdGQ6OnN0cmluZyAmbWFya2VyKQogfQogfQogCitDb21tYW5kUXVldWU6OkNv
bW1hbmRRdWV1ZSgpCit7CisgICAgbU1ldGFsRW5xdWV1ZVNlbWFwaG9yZSA9IGRpc3BhdGNoX3Nl
bWFwaG9yZV9jcmVhdGUoa01heEluRmxpZ2h0Q29tbWFuZEJ1ZmZlcnMpOworfQorCiAvLyBDb21t
YW5kUXVldWUgaW1wbGVtZW50YXRpb24KIHZvaWQgQ29tbWFuZFF1ZXVlOjpyZXNldCgpCiB7CkBA
IC01MzAsNiArNTM4LDggQEAgQXV0b09iakNQdHI8aWQ8TVRMQ29tbWFuZEJ1ZmZlcj4+IENvbW1h
bmRRdWV1ZTo6bWFrZU1ldGFsQ29tbWFuZEJ1ZmZlcih1aW50NjRfdAogCiB2b2lkIENvbW1hbmRR
dWV1ZTo6b25Db21tYW5kQnVmZmVyQ29tbWl0dGVkKGlkPE1UTENvbW1hbmRCdWZmZXI+IGJ1Ziwg
dWludDY0X3Qgc2VyaWFsKQogeworICAgIC8vV2FpdCBiZWZvcmUgbG9jaywgdG8gYXZvaWQgZGVh
ZGxvY2sgb24gY29tcGxldGVkLgorICAgIGRpc3BhdGNoX3NlbWFwaG9yZV93YWl0KG1NZXRhbEVu
cXVldWVTZW1hcGhvcmUsIERJU1BBVENIX1RJTUVfRk9SRVZFUik7CiAgICAgc3RkOjpsb2NrX2d1
YXJkPHN0ZDo6bXV0ZXg+IGxnKG1Mb2NrKTsKIAogICAgIEFOR0xFX01UTF9MT0coIkNvbW1pdHRl
ZCBNVExDb21tYW5kQnVmZmVyICVsbHU6JXAiLCBzZXJpYWwsIGJ1Zik7CkBAIC01NDEsNiArNTUx
LDcgQEAgdm9pZCBDb21tYW5kUXVldWU6Om9uQ29tbWFuZEJ1ZmZlckNvbW1pdHRlZChpZDxNVExD
b21tYW5kQnVmZmVyPiBidWYsIHVpbnQ2NF90IHMKIAogdm9pZCBDb21tYW5kUXVldWU6Om9uQ29t
bWFuZEJ1ZmZlckNvbXBsZXRlZChpZDxNVExDb21tYW5kQnVmZmVyPiBidWYsIHVpbnQ2NF90IHNl
cmlhbCkKIHsKKyAgICBkaXNwYXRjaF9zZW1hcGhvcmVfc2lnbmFsKG1NZXRhbEVucXVldWVTZW1h
cGhvcmUpOwogICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsZyhtTG9jayk7CiAKICAg
ICBBTkdMRV9NVExfTE9HKCJDb21wbGV0ZWQgTVRMQ29tbWFuZEJ1ZmZlciAlbGx1OiVwIiwgc2Vy
aWFsLCBidWYpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431434</attachid>
            <date>2021-06-15 07:14:50 -0700</date>
            <delta_ts>2021-06-15 07:57:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226841-20210615171448.patch</filename>
            <type>text/plain</type>
            <size>14854</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4ODIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggMjg1MTNkN2JhNTE5Y2JhMzc0ZDlhNDYyMDkzYTM0Y2Y1NjcwNmE2My4uNjlmOWY3YTJlOTJj
ZDdkMmM5YWUzNzRmOWZlM2I5M2ZlZWIyMTU3YyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE4IEBACisyMDIxLTA2LTE1ICBLaW1tbyBLaW5udW5lbiAgPGtraW5udW5l
bkBhcHBsZS5jb20+CisKKyAgICAgICAgU2VyaW91cyBXZWJHTC9NZXRhbCBwZXJmb3JtYW5jZSBy
ZWdyZXNzaW9uIGluIFNhZmFyaSBUZWNobm9sb2d5IFByZXZpZXcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjg0MQorICAgICAgICA8cmRhcjovL3By
b2JsZW0vNzkyMjg3MDE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWR2ZXJ0aXNlIEdMX0FSQl9zeW5jIGZvciB0aGUgTWV0YWwgYmFja2VuZC4KKyAg
ICAgICAgU2luY2UgR0xfQVJCX3N5bmMgaXMgY29yZSBpbiBPcGVuR0wgRVMgMy4wIGFuZCB0aGUg
TWV0YWwgYmFja2VuZCBhZHZlcnRpc2VzIE9wZW5HTCBFUyAzLjAsCisgICAgICAgIHRoZSBBUEkg
bXVzdCBiZSB3b3JraW5nIGFscmVhZHkuCisKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvRGlzcGxheU10bC5tbToKKyAgICAgICAgKHJ4OjpEaXNwbGF5TXRsOjppbml0aWFs
aXplRXh0ZW5zaW9ucyBjb25zdCk6CisKIDIwMjEtMDYtMTEgIEVsZW5pIE1hcmlhIFN0ZWEgIDxl
c3RlYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIEFOR0xFIEVHTCBhbmQgR0xFUyBsaWJyYXJpZXMg
c2hvdWxkIGxpbmsgd2l0aCBsaWIgZGwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzM1YzZhZWE2MmZkYzg5MTc2
YmRiZWZmOWIyZDQzMDdiNzQ5MjVlZC4uY2I4YTU4ZmM2MDc2MjdjNzBjYmZhOTFhNjg3ODk3ZGY1
NzZiMjE1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDIxLTA2LTE1ICBLaW1tbyBL
aW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2VyaW91cyBXZWJHTC9N
ZXRhbCBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIGluIFNhZmFyaSBUZWNobm9sb2d5IFByZXZpZXcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjg0MQor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzkyMjg3MDE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGltaXQgaW4tZmxpZ2h0IFdlYkdMIGZyYW1lcyB0
byB0aHJlZSBmcmFtZXMuIERvIG5vdCBjb250aW51ZSBwcmVwYXJhdGlvbiBmb3IgZGlzcGxheQor
ICAgICAgICB1bnRpbCB0aGUgY29tbWFuZHMgZm9yIHRoZSBvbGRlc3QgZnJhbWUgaGF2ZSBiZWVu
IGV4ZWN1dGVkIGJ5IHRoZSBHUFUuCisKKyAgICAgICAgVGhpcyBsaW1pdHMgdGhlIGltcGFjdCBz
bG93IGZyYW1lcyBoYXZlLCBlc3BlY2lhbGx5IGluIHRoZQorICAgICAgICBjYXNlIHdoZXJlIHRo
ZSBjb21wb3NpdG9yIHNraXAgZnJhbWVzIGFuZCBXZWJLaXQgd291bGQgaXNzdWUgYSBuZXcgc2xv
dyBmcmFtZQorICAgICAgICBvbiB0b3Agb2YgdGhlIHNraXBwZWQgZnJhbWUuCisKKyAgICAgICAg
V0lQOiBDdXJyZW50bHkgY2Fubm90IGJlIGxhbmRlZCBkdWUgdG8gQU5HTEUgTWV0YWwgYmFja2Vu
ZCBmZW5jZXMgYXJlIGJsb2NrZWQgYnkKKyAgICAgICAgdGhlIHNhbmRib3guIE9wZW5HTCBiYWNr
ZW5kIHdvcmtzIGFzIGV4cGVjdGVkLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgor
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRGb3JDb21wbGV0ZWRG
cmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0
R0xBTkdMRVV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkR0xGZW5jZTo6U2Nv
cGVkR0xGZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRHTEZlbmNlOjpvcGVyYXRvcj0p
OgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkR0xGZW5jZTo6flNjb3BlZEdMRmVuY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NvcGVkR0xGZW5jZTo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
U2NvcGVkR0xGZW5jZTo6YWJhbmRvbik6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRHTEZlbmNl
OjpmZW5jZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkR0xGZW5jZTo6b3BlcmF0b3Ig
R0xzeW5jIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTENvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wuaDoKKwogMjAyMS0wNi0xNCAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIERpc3BsYXlMaXN0OjpJbWFnZUJ1ZmZlciBjYWxscyB2aXJ0dWFsIGZ1
bmN0aW9uIGVycm9uZW91c2x5IGluIGRlc3RydWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLm1tIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3Bs
YXlNdGwubW0KaW5kZXggMzA1MmFmYzYwMTMwZjk0NWU1NzRlYTQxNjIyMzU0NjMzNDAzZDZkNi4u
MWI0YzllYzNlNGExNWNlZTg2OGQ3YTlmNDBjYWE3NWYwOTMxZWJkZCAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlN
dGwubW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL0Rpc3BsYXlNdGwubW0KQEAgLTg0Miw2ICs4NDIsOSBAQCB2b2lkIERpc3BsYXlNdGw6
OmluaXRpYWxpemVFeHRlbnNpb25zKCkgY29uc3QKIAogICAgICAgICAvLyBHTF9PRVNfRUdMX3N5
bmMKICAgICAgICAgbU5hdGl2ZUV4dGVuc2lvbnMuZWdsU3luY09FUyA9IHRydWU7CisKKyAgICAg
ICAgLy8gR0xfQVJCX3N5bmMKKyAgICAgICAgbU5hdGl2ZUV4dGVuc2lvbnMuZ2xTeW5jQVJCID0g
dHJ1ZTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCAyOTZmOTgyOTZjOWE2Y2I2NjY4MzM3NDRkZDVkYzc2Nzcw
YmU2ZjM1Li5mZmY0YmI3NzZjMGMyYmYwNDgyZGJhYjM3N2U5MTYyMDNmOTE1OTgyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC03
MTQsNyArNzE0LDcgQEAKIAkJMjZGNzU2QjUxQjNCNjhGMjAwMDVERDc5IC8qIEltbXV0YWJsZU5G
QU5vZGVCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyNkY3NTZCNDFCM0I2OEYyMDAwNURENzkgLyogSW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyNkY5
QTgzODE4QTA0NkFDMDBBRUI4OEEgLyogVmlld3BvcnRDb25maWd1cmF0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RjlBODM2MThBMDQ2QUMw
MEFFQjg4QSAvKiBWaWV3cG9ydENvbmZpZ3VyYXRpb24uY3BwICovOyB9OwogCQkyNkY5QTgzOTE4
QTA0NkFDMDBBRUI4OEEgLyogVmlld3BvcnRDb25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkY5QTgzNzE4QTA0NkFDMDBBRUI4OEEg
LyogVmlld3BvcnRDb25maWd1cmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJMjdFM0M4MDgyNTdGNUU2RTAwQzk4NkFCIC8qIEFOR0xFSGVh
ZGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjdF
M0M4MDYyNTdGNUU2RTAwQzk4NkFCIC8qIEFOR0xFSGVhZGVycy5oICovOyB9OworCQkyN0UzQzgw
ODI1N0Y1RTZFMDBDOTg2QUIgLyogQU5HTEVIZWFkZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyN0UzQzgwNjI1N0Y1RTZFMDBDOTg2QUIgLyogQU5H
TEVIZWFkZXJzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMjkxNEUzMDgxQ0FCNUE0NDAwNDk5NjZGIC8qIEFjY2Vzc2liaWxpdHlBdHRhY2htZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOTE0RTMw
NjFDQUI1QTQ0MDA0OTk2NkYgLyogQWNjZXNzaWJpbGl0eUF0dGFjaG1lbnQuaCAqLzsgfTsKIAkJ
MjkzNkJGNUMyMUQ2OUU0QjAwNEE4RkM5IC8qIEFjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5MzZCRjVB
MjFENjk5OUUwMDRBOEZDOSAvKiBBY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjkzRUFFMUYxMzU2
QjJGRTAwNjdBQ0Y5IC8qIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjkzRUFFMUUxMzU2QjJGRTAwNjdBQ0Y5
IC8qIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMzIyLDcgKzIzMjIsNyBAQAogCQk3QjZEQzgxOTI1
NzEyRTkyMDAzODBDNzAgLyogR3JhcGhpY3NDb250ZXh0R0xJT1N1cmZhY2VTd2FwQ2hhaW4uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCNkRDODE3MjU3
MTJFOTIwMDM4MEM3MCAvKiBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdCNzMxMUZC
MjVDMDkyQjcwMDNCMjc5NiAvKiBTY29wZWRIaWdoUGVyZm9ybWFuY2VHUFVSZXF1ZXN0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjczMTFGQTI1QzA5
MkI3MDAzQjI3OTYgLyogU2NvcGVkSGlnaFBlcmZvcm1hbmNlR1BVUmVxdWVzdC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdCOTA0MTcwMjU1MDEx
NDIwMDZFRUI4QyAvKiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0I5MDQxNkUyNTUwMTEwOTAw
NkVFQjhDIC8qIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJN0JCMzRBMTcyNTM0NUNCMjAw
MDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMQU5HTEVVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQjM0QTE2MjUzNDVDQjIwMDAyOUQw
OCAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFVXRpbGl0aWVzLmggKi87IH07CisJCTdCQjM0QTE3
MjUzNDVDQjIwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFVXRpbGl0aWVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkIzNEExNjI1MzQ1
Q0IyMDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0R0xBTkdMRVV0aWxpdGllcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdCQjM0QTQ4MjUzNzc2
Q0EwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkIzNEE0NTI1Mzc3NkM2MDAw
MjlEMDggLyogR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdCQjY4MEJBMjVCQTFCRTQwMDJC
ODczOCAvKiBHcmFwaGljc0NoZWNrc01hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0JCNjgwQjgyNUJBMUJFNDAwMkI4NzM4IC8qIEdyYXBoaWNzQ2hl
Y2tzTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJN0JFNzQyNzM4MUZBOTA2RkJCNEYwRjJDIC8qIEpTU1ZHR3JhcGhpY3NFbGVtZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NTBDNEMwMkJFRDg5
MzZGODE4RTJGOTkgLyogSlNTVkdHcmFwaGljc0VsZW1lbnQuaCAqLzsgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdM
QU5HTEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRS5jcHAKaW5kZXggZjA1YjBlNTA0MzYwMjgyZGRkZTI4NmI0YWVkM2Iy
OWI4MDRhNDM4MC4uNmEwNGJjNGQ1MmQzNDUwODhkMTkyMDMyMzRjYjgxZDRjZGE4YjNjZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3ND
b250ZXh0R0xBTkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNs
dWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8Y3N0cmluZz4KICNpbmNsdWRlIDx3dGYvSGV4TnVt
YmVyLmg+CisjaW5jbHVkZSA8d3RmL1NlY29uZHMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU3Bl
Y2lmaWMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5oPgpAQCAtNjEsMTAgKzYyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBzdGF0aWMgY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uTmFtZSA9
ICJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiOwogCi1uYW1lc3BhY2UgewotCi0KLX0gLy8g
bmFtZXNwYWNlIGFub255bW91cworc3RhdGljIFNlY29uZHMgbWF4RnJhbWVEdXJhdGlvbiA9IDVf
czsKIAogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIHN0YXRpYyB2
b2lkIHdpcGVBbHBoYUNoYW5uZWxGcm9tUGl4ZWxzKGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5z
aWduZWQgY2hhciogcGl4ZWxzKQpAQCAtMjg0Niw2ICsyODQ0LDI3IEBAIEdyYXBoaWNzQ29udGV4
dEdMQ1YqIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphc0NWKCkKIH0KICNlbmRpZgogCitib29s
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0Rm9yQ29tcGxldGVkRnJhbWUoKQoreworICAg
IHNpemVfdCBvbGRlc3RGcmFtZUNvbXBsZXRpb25GZW5jZSA9IG1fb2xkZXN0RnJhbWVDb21wbGV0
aW9uRmVuY2UrKyAlIG1heFBlbmRpbmdGcmFtZXM7CisgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsK
KyAgICBpZiAoU2NvcGVkR0xGZW5jZSBmZW5jZSA9IFdURk1vdmUobV9mcmFtZUNvbXBsZXRpb25G
ZW5jZXNbb2xkZXN0RnJhbWVDb21wbGV0aW9uRmVuY2VdKSkgeworICAgICAgICAvLyBXYWl0IHNv
IHRoYXQgcmVuZGVyaW5nIGRvZXMgbm90IGdldCBtb3JlIHRoYW4gbWF4UGVuZGluZ0ZyYW1lcyBm
cmFtZXMgYWhlYWQuCisgICAgICAgIEdMYml0ZmllbGQgZmxhZ3MgPSBHTF9TWU5DX0ZMVVNIX0NP
TU1BTkRTX0JJVDsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAgICAgLy8gQXZvaWQgdXNpbmcg
dGhlIEdMX1NZTkNfRkxVU0hfQ09NTUFORFNfQklUIGJlY2F1c2UgZWFjaCBlYWNoIGZyYW1lIGlz
IGVuZGVkIHdpdGggYSBmbHVzaAorICAgICAgICAvLyBkdWUgdG8gZXh0ZXJuYWwgSU9TdXJmYWNl
IGFjY2Vzcy4gVGhpcyBwYXJ0aWN1bGFyIGZlbmNlIGlzIG1heFBlbmRpbmdGcmFtZXMgYmVoaW5k
LgorICAgICAgICAvLyBUaGlzIG1lYW5zIHRoZSBjcmVhdGlvbiBvZiB0aGlzIGZlbmNlIGhhcyBh
bHJlYWR5IGJlZW4gZmx1c2hlZC4KKyAgICAgICAgZmxhZ3MgPSAwOworI2VuZGlmCisgICAgICAg
IEdMZW51bSByZXN1bHQgPSBnbDo6Q2xpZW50V2FpdFN5bmMoZmVuY2UsIGZsYWdzLCBtYXhGcmFt
ZUR1cmF0aW9uLm5hbm9zZWNvbmRzQXM8R0x1aW50NjQ+KCkpOworICAgICAgICBBU1NFUlQocmVz
dWx0ICE9IEdMX1dBSVRfRkFJTEVEKTsKKyAgICAgICAgc3VjY2VzcyA9IHJlc3VsdCAhPSBHTF9X
QUlUX0ZBSUxFRCAmJiByZXN1bHQgIT0gR0xfVElNRU9VVF9FWFBJUkVEOworICAgIH0KKyAgICBt
X2ZyYW1lQ29tcGxldGlvbkZlbmNlc1tvbGRlc3RGcmFtZUNvbXBsZXRpb25GZW5jZV0uZmVuY2VT
eW5jKCk7CisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShX
RUJHTCkgJiYgVVNFKEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRVV0aWxpdGllcy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRVV0
aWxpdGllcy5oCmluZGV4IDRiYTNjYjU4OTY1ZDAyNDVlZWI0NjE5ZTRjN2U2MmM3NzM1NDc1ZTUu
LjFjZWY3ZTM1MzIzNzA5MDY1NGYyYTQ1ZDkwNGY1ZDQ2YWFmMjhmMzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5H
TEVVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmds
ZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFVXRpbGl0aWVzLmgKQEAgLTIwNCw2ICsyMDQsNDcgQEAg
cHJpdmF0ZToKICAgICBHTHVpbnQgbV9vYmplY3QgeyAwIH07CiB9OwogCitjbGFzcyBTY29wZWRH
TEZlbmNlIHsKK3B1YmxpYzoKKyAgICBTY29wZWRHTEZlbmNlKCkgPSBkZWZhdWx0OworICAgIFNj
b3BlZEdMRmVuY2UoU2NvcGVkR0xGZW5jZSYmIG90aGVyKQorICAgICAgICA6IG1fb2JqZWN0KHN0
ZDo6ZXhjaGFuZ2Uob3RoZXIubV9vYmplY3QsIHsgfSkpCisgICAgeworICAgIH0KKyAgICBTY29w
ZWRHTEZlbmNlJiBvcGVyYXRvcj0oU2NvcGVkR0xGZW5jZSYmIG90aGVyKQorICAgIHsKKyAgICAg
ICAgcmVzZXQoKTsKKyAgICAgICAgbV9vYmplY3QgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fb2Jq
ZWN0LCB7IH0pOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIH5TY29wZWRHTEZl
bmNlKCkKKyAgICB7CisgICAgICAgIHJlc2V0KCk7CisgICAgfQorICAgIHZvaWQgcmVzZXQoKQor
ICAgIHsKKyAgICAgICAgaWYgKG1fb2JqZWN0KSB7CisgICAgICAgICAgICBnbDo6RGVsZXRlU3lu
YyhtX29iamVjdCk7CisgICAgICAgICAgICBtX29iamVjdCA9IHsgfTsKKyAgICAgICAgfQorICAg
IH0KKyAgICB2b2lkIGFiYW5kb24oKQorICAgIHsKKyAgICAgICAgbV9vYmplY3QgPSB7IH07Cisg
ICAgfQorICAgIHZvaWQgZmVuY2VTeW5jKCkKKyAgICB7CisgICAgICAgIHJlc2V0KCk7CisgICAg
ICAgIG1fb2JqZWN0ID0gZ2w6OkZlbmNlU3luYyhHTF9TWU5DX0dQVV9DT01NQU5EU19DT01QTEVU
RSwgMCk7CisgICAgfQorICAgIG9wZXJhdG9yIEdMc3luYygpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9vYmplY3Q7CisgICAgfQorcHJpdmF0ZToKKyAgICBHTHN5bmMgbV9vYmplY3Qg
eyB9OworfTsKKwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5H
TENvY29hLm1tCmluZGV4IDA2ZTI4ZjJlYzYzODQ3YjdkODZhZTA1NTQ2ZjU4ZGVmOGU2ZGZjMjYu
Ljk0YTA3MTZiZGEyYmE0NzkyYTczN2NhMzU0NTFmNzU1YmY2OTBkNzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbQpAQCAtMjg2LDYgKzI4NiwxMCBAQCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250
ZXh0R0xBdHRyaWJ1dGVzIGF0dAogICAgIGlmIChtX2lzRm9yV2ViR0wyKSB7CiAgICAgICAgIC8v
IEZvciBXZWJHTCAyLjAgb2NjbHVzaW9uIHF1ZXJpZXMgdG8gd29yay4KICAgICAgICAgcmVxdWly
ZWRFeHRlbnNpb25zLmFwcGVuZCgiR0xfRVhUX29jY2x1c2lvbl9xdWVyeV9ib29sZWFuIl9zKTsK
KyAgICB9IGVsc2UgeworICAgICAgICAvLyBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyBHTHN5bmMg
b2JqZWN0cy4gRW5hYmxlIHRoZSBmdW5jdGlvbmFsaXR5IGZvciBXZWJHTCAxLjAgY29udGV4dHMK
KyAgICAgICAgLy8gdGhhdCB1c2UgT3BlbkdMIEVTIDIuMC4KKyAgICAgICAgcmVxdWlyZWRFeHRl
bnNpb25zLmFwcGVuZCgiR0xfQVJCX3N5bmMiX3MpOwogICAgIH0KICNpZiBQTEFURk9STShNQUMp
IHx8IFBMQVRGT1JNKE1BQ0NBVEFMWVNUKQogICAgIGlmICghbmVlZHNFQUdMT25NYWMoKSkgewpA
QCAtMjkzLDggKzI5Nyw3IEBAIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0CiAgICAgICAgIHJlcXVp
cmVkRXh0ZW5zaW9ucy5hcHBlbmQoIkdMX0FOR0xFX3RleHR1cmVfcmVjdGFuZ2xlIl9zKTsKICAg
ICAgICAgLy8gRm9yIGNyZWF0aW5nIHRoZSBFR0wgc3VyZmFjZSBmcm9tIGFuIElPU3VyZmFjZS4K
ICAgICAgICAgcmVxdWlyZWRFeHRlbnNpb25zLmFwcGVuZCgiR0xfRVhUX3RleHR1cmVfZm9ybWF0
X0JHUkE4ODg4Il9zKTsKLSAgICAgICAgICAgIH0KLQorICAgIH0KICNlbmRpZiAvLyBQTEFURk9S
TShNQUMpIHx8IFBMQVRGT1JNKE1BQ0NBVEFMWVNUKQogICAgIEV4dGVuc2lvbnNHTCYgZXh0ZW5z
aW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKICAgICBmb3IgKGF1dG8mIGV4dGVuc2lvbiA6IHJlcXVp
cmVkRXh0ZW5zaW9ucykgewpAQCAtMzg1LDYgKzM4OCwxMSBAQCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKCkKICAgICAgICAgICAgIGdsOjpEZWxldGVU
ZXh0dXJlcygxLCAmbV9wcmVzZXJ2ZURyYXdpbmdCdWZmZXJUZXh0dXJlKTsKICAgICAgICAgaWYg
KG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyRkJPKQogICAgICAgICAgICAgZ2w6OkRlbGV0ZUZyYW1l
YnVmZmVycygxLCAmbV9wcmVzZXJ2ZURyYXdpbmdCdWZmZXJGQk8pOworICAgICAgICBmb3IgKGF1
dG8mIGZlbmNlIDogbV9mcmFtZUNvbXBsZXRpb25GZW5jZXMpCisgICAgICAgICAgICBmZW5jZS5y
ZXNldCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoYXV0byYgZmVuY2UgOiBtX2ZyYW1l
Q29tcGxldGlvbkZlbmNlcykKKyAgICAgICAgICAgIGZlbmNlLmFiYW5kb24oKTsKICAgICB9CiAg
ICAgaWYgKG1fZGlzcGxheUJ1ZmZlclBidWZmZXIpIHsKICAgICAgICAgRUdMX0Rlc3Ryb3lTdXJm
YWNlKG1fZGlzcGxheU9iaiwgbV9kaXNwbGF5QnVmZmVyUGJ1ZmZlcik7CkBAIC03MjAsOCArNzI4
LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KCkK
ICAgICAvLyBFcnJvciB3aWxsIGJlIGhhbmRsZWQgYnkgbmV4dCBjYWxsIHRvIG1ha2VDb250ZXh0
Q3VycmVudCgpIHdoaWNoIHdpbGwgbm90aWNlIGxhY2sgb2YgZGlzcGxheSBidWZmZXIuCiAgICAg
aWYgKCFoYXNOZXdCYWNraW5nKQogICAgICAgICBhbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVy
QmFja2luZygpOwotCiAgICAgbWFya0xheWVyQ29tcG9zaXRlZCgpOworICAgIGJvb2wgc3VjY2Vz
cyA9IHdhaXRGb3JDb21wbGV0ZWRGcmFtZSgpOworICAgIFVOVVNFRF9WQVJJQUJMRShzdWNjZXNz
KTsgIC8vIEZJWE1FOiBpbXBsZW1lbnQgY29udGV4dCBsb3N0LgorICAgIH0KIH0KIAogc3RkOjpv
cHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRDb21wb3Np
dGVkUmVzdWx0cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCmluZGV4IDYwY2Jh
ZWRkMjM4ZjQ5OTlmNjQ4OTM0MmIyMGM0OTU0MjhiYTNiMDAuLjcxNDQ4YWI5NTA2NzM4NTZhYTJi
ZTc2YmIxNzFmNTkyNzYzMWMwOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5o
CkBAIC00NSwxMSArNDUsMTkgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXIuaCIKICNlbmRp
ZgogCi0jaWYgIVVTRShBTkdMRSkKKyNpZiBVU0UoQU5HTEUpCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0R0xBTkdMRVV0aWxpdGllcy5oIgorI2Vsc2UKICNpbmNsdWRlICJBTkdMRVdlYktpdEJy
aWRnZS5oIgogI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5oIgogI2VuZGlmCiAK
KyNpZiBQTEFURk9STShNQUMpCisjaW5jbHVkZSAiU2NvcGVkSGlnaFBlcmZvcm1hbmNlR1BVUmVx
dWVzdC5oIgorI2VuZGlmCisKKworCiAvLyBGSVhNRTogRmluZCBhIGJldHRlciB3YXkgdG8gYXZv
aWQgdGhlIG5hbWUgY29uZmxpY3Rpb24gZm9yIE5PX0VSUk9SLgogI2lmIFBMQVRGT1JNKFdJTikK
ICN1bmRlZiBOT19FUlJPUgpAQCAtNzIsMTAgKzgwLDYgQEAgY2xhc3MgR0NHTExheWVyOwogfQog
I2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSAiU2NvcGVkSGlnaFBlcmZvcm1h
bmNlR1BVUmVxdWVzdC5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEV4
dGVuc2lvbnNHTDsKICNpZiBVU0UoQU5HTEUpCkBAIC01NzQsNiArNTc4LDEwIEBAIHByaXZhdGU6
CiAgICAgYm9vbCBhbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFja2luZygpOwogICAgIGJv
b2wgYmluZERpc3BsYXlCdWZmZXJCYWNraW5nKHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IGJh
Y2tpbmcsIHZvaWQqIHBidWZmZXIpOwogI2VuZGlmCisjaWYgVVNFKEFOR0xFKQorICAgIC8vIFJl
dHVybnMgZmFsc2UgaWYgY29udGV4dCBzaG91bGQgYmUgbG9zdCBkdWUgdG8gdGltZW91dC4KKyAg
ICBib29sIHdhaXRGb3JDb21wbGV0ZWRGcmFtZSgpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyNlbmRp
ZgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgR3JhcGhpY3NDb250ZXh0R0xJT1N1cmZhY2VT
d2FwQ2hhaW4qIG1fc3dhcENoYWluIHsgbnVsbHB0ciB9OwpAQCAtNzg3LDYgKzc5NSwxMSBAQCBw
cml2YXRlOgogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVj4gbV9jdjsKICNlbmRpZgorI2lmIFVTRShB
TkdMRSkKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBtYXhQZW5kaW5nRnJhbWVzID0gMzsK
KyAgICBzaXplX3QgbV9vbGRlc3RGcmFtZUNvbXBsZXRpb25GZW5jZSB7IDAgfTsKKyAgICBTY29w
ZWRHTEZlbmNlIG1fZnJhbWVDb21wbGV0aW9uRmVuY2VzW21heFBlbmRpbmdGcmFtZXNdOworI2Vu
ZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>
<flag name="commit-queue"
          id="453222"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431437</attachid>
            <date>2021-06-15 07:41:46 -0700</date>
            <delta_ts>2021-06-16 02:06:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226841-20210615174144.patch</filename>
            <type>text/plain</type>
            <size>15863</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4ODIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggZDQzYWY4ODE4OWU2OTMwZDhhMWViYjQ1MmI3NjQ0NzY1NTllODZjZi4uM2Q4NzFlZjE4ZTgy
YmY2M2E3Y2IwNTRjYmZjNDEwMzI3ZTkwY2MxZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE4IEBACisyMDIxLTA2LTE1ICBLaW1tbyBLaW5udW5lbiAgPGtraW5udW5l
bkBhcHBsZS5jb20+CisKKyAgICAgICAgU2VyaW91cyBXZWJHTC9NZXRhbCBwZXJmb3JtYW5jZSBy
ZWdyZXNzaW9uIGluIFNhZmFyaSBUZWNobm9sb2d5IFByZXZpZXcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjg0MQorICAgICAgICA8cmRhcjovL3By
b2JsZW0vNzkyMjg3MDE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWR2ZXJ0aXNlIEdMX0FSQl9zeW5jIGZvciB0aGUgTWV0YWwgYmFja2VuZC4KKyAg
ICAgICAgU2luY2UgR0xfQVJCX3N5bmMgaXMgY29yZSBpbiBPcGVuR0wgRVMgMy4wIGFuZCB0aGUg
TWV0YWwgYmFja2VuZCBhZHZlcnRpc2VzIE9wZW5HTCBFUyAzLjAsCisgICAgICAgIHRoZSBBUEkg
bXVzdCBiZSB3b3JraW5nIGFscmVhZHkuCisKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvRGlzcGxheU10bC5tbToKKyAgICAgICAgKHJ4OjpEaXNwbGF5TXRsOjppbml0aWFs
aXplRXh0ZW5zaW9ucyBjb25zdCk6CisKIDIwMjEtMDYtMTUgIEtpbW1vIEtpbm51bmVuICA8a2tp
bm51bmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBBTkdMRSBNZXRhbCBBdXRvT2JqQ1B0ciA9PSBu
dWxscHRyIGNvbXBhcmlzb24gaXMgaW52ZXJ0ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzMzVjNmFlYTYyZmRj
ODkxNzZiZGJlZmY5YjJkNDMwN2I3NDkyNWVkLi5jYjhhNThmYzYwNzYyN2M3MGNiZmE5MWE2ODc4
OTdkZjU3NmIyMTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAgQEAKKzIwMjEtMDYtMTUgIEtp
bW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBTZXJpb3VzIFdl
YkdML01ldGFsIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gaW4gU2FmYXJpIFRlY2hub2xvZ3kgUHJl
dmlldworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2
ODQxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83OTIyODcwMT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMaW1pdCBpbi1mbGlnaHQgV2ViR0wgZnJh
bWVzIHRvIHRocmVlIGZyYW1lcy4gRG8gbm90IGNvbnRpbnVlIHByZXBhcmF0aW9uIGZvciBkaXNw
bGF5CisgICAgICAgIHVudGlsIHRoZSBjb21tYW5kcyBmb3IgdGhlIG9sZGVzdCBmcmFtZSBoYXZl
IGJlZW4gZXhlY3V0ZWQgYnkgdGhlIEdQVS4KKworICAgICAgICBUaGlzIGxpbWl0cyB0aGUgaW1w
YWN0IHNsb3cgZnJhbWVzIGhhdmUsIGVzcGVjaWFsbHkgaW4gdGhlCisgICAgICAgIGNhc2Ugd2hl
cmUgdGhlIGNvbXBvc2l0b3Igc2tpcCBmcmFtZXMgYW5kIFdlYktpdCB3b3VsZCBpc3N1ZSBhIG5l
dyBzbG93IGZyYW1lCisgICAgICAgIG9uIHRvcCBvZiB0aGUgc2tpcHBlZCBmcmFtZS4KKworICAg
ICAgICBXSVA6IEN1cnJlbnRseSBjYW5ub3QgYmUgbGFuZGVkIGR1ZSB0byBBTkdMRSBNZXRhbCBi
YWNrZW5kIGZlbmNlcyBhcmUgYmxvY2tlZCBieQorICAgICAgICB0aGUgc2FuZGJveC4gT3BlbkdM
IGJhY2tlbmQgd29ya3MgYXMgZXhwZWN0ZWQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BT
ISkuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6d2FpdEZvckNvbXBs
ZXRlZEZyYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0Nv
bnRleHRHTEFOR0xFVXRpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRHTEZlbmNl
OjpTY29wZWRHTEZlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZEdMRmVuY2U6Om9wZXJh
dG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRHTEZlbmNlOjp+U2NvcGVkR0xGZW5jZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRHTEZlbmNlOjpyZXNldCk6CisgICAgICAgIChXZWJD
b3JlOjpTY29wZWRHTEZlbmNlOjphYmFuZG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZEdM
RmVuY2U6OmZlbmNlU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRHTEZlbmNlOjpvcGVy
YXRvciBHTHN5bmMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dy
YXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZUZvckRp
c3BsYXkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTC5oOgorCiAyMDIxLTA2LTE0ICBLaW1tbyBLaW5udW5lbiAgPGtraW5udW5lbkBh
cHBsZS5jb20+CiAKICAgICAgICAgRGlzcGxheUxpc3Q6OkltYWdlQnVmZmVyIGNhbGxzIHZpcnR1
YWwgZnVuY3Rpb24gZXJyb25lb3VzbHkgaW4gZGVzdHJ1Y3RvcgpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwu
bW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
RGlzcGxheU10bC5tbQppbmRleCAzMDUyYWZjNjAxMzBmOTQ1ZTU3NGVhNDE2MjIzNTQ2MzM0MDNk
NmQ2Li4xYjRjOWVjM2U0YTE1Y2VlODY4ZDdhOWY0MGNhYTc1ZjA5MzFlYmRkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlz
cGxheU10bC5tbQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvRGlzcGxheU10bC5tbQpAQCAtODQyLDYgKzg0Miw5IEBAIHZvaWQgRGlzcGxh
eU10bDo6aW5pdGlhbGl6ZUV4dGVuc2lvbnMoKSBjb25zdAogCiAgICAgICAgIC8vIEdMX09FU19F
R0xfc3luYwogICAgICAgICBtTmF0aXZlRXh0ZW5zaW9ucy5lZ2xTeW5jT0VTID0gdHJ1ZTsKKwor
ICAgICAgICAvLyBHTF9BUkJfc3luYworICAgICAgICBtTmF0aXZlRXh0ZW5zaW9ucy5nbFN5bmNB
UkIgPSB0cnVlOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDI5NmY5ODI5NmM5YTZjYjY2NjgzMzc0NGRkNWRj
NzY3NzBiZTZmMzUuLmFiNDZhM2E1OGFlZTgwMDVlMjFlMzU0YzRhNWU2YzU0YjBmMmVlZGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTcxNCw3ICs3MTQsNyBAQAogCQkyNkY3NTZCNTFCM0I2OEYyMDAwNURENzkgLyogSW1tdXRh
YmxlTkZBTm9kZUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDI2Rjc1NkI0MUIzQjY4RjIwMDA1REQ3OSAvKiBJbW11dGFibGVORkFOb2RlQnVp
bGRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTI2RjlBODM4MThBMDQ2QUMwMEFFQjg4QSAvKiBWaWV3cG9ydENvbmZpZ3VyYXRpb24uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZGOUE4MzYxOEEw
NDZBQzAwQUVCODhBIC8qIFZpZXdwb3J0Q29uZmlndXJhdGlvbi5jcHAgKi87IH07CiAJCTI2RjlB
ODM5MThBMDQ2QUMwMEFFQjg4QSAvKiBWaWV3cG9ydENvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RjlBODM3MThBMDQ2QUMwMEFF
Qjg4QSAvKiBWaWV3cG9ydENvbmZpZ3VyYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkyN0UzQzgwODI1N0Y1RTZFMDBDOTg2QUIgLyogQU5H
TEVIZWFkZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyN0UzQzgwNjI1N0Y1RTZFMDBDOTg2QUIgLyogQU5HTEVIZWFkZXJzLmggKi87IH07CisJCTI3
RTNDODA4MjU3RjVFNkUwMEM5ODZBQiAvKiBBTkdMRUhlYWRlcnMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI3RTNDODA2MjU3RjVFNkUwMEM5ODZBQiAv
KiBBTkdMRUhlYWRlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkyOTE0RTMwODFDQUI1QTQ0MDA0OTk2NkYgLyogQWNjZXNzaWJpbGl0eUF0dGFj
aG1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5
MTRFMzA2MUNBQjVBNDQwMDQ5OTY2RiAvKiBBY2Nlc3NpYmlsaXR5QXR0YWNobWVudC5oICovOyB9
OwogCQkyOTM2QkY1QzIxRDY5RTRCMDA0QThGQzkgLyogQWNjZXNzaWJpbGl0eU9iamVjdEludGVy
ZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjkz
NkJGNUEyMUQ2OTk5RTAwNEE4RkM5IC8qIEFjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyOTNFQUUx
RjEzNTZCMkZFMDA2N0FDRjkgLyogUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOTNFQUUxRTEzNTZCMkZFMDA2
N0FDRjkgLyogUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIzMjIsNyArMjMyMiw3IEBACiAJCTdCNkRD
ODE5MjU3MTJFOTIwMDM4MEM3MCAvKiBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFp
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0I2REM4
MTcyNTcxMkU5MjAwMzgwQzcwIC8qIEdyYXBoaWNzQ29udGV4dEdMSU9TdXJmYWNlU3dhcENoYWlu
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0I3
MzExRkIyNUMwOTJCNzAwM0IyNzk2IC8qIFNjb3BlZEhpZ2hQZXJmb3JtYW5jZUdQVVJlcXVlc3Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCNzMxMUZB
MjVDMDkyQjcwMDNCMjc5NiAvKiBTY29wZWRIaWdoUGVyZm9ybWFuY2VHUFVSZXF1ZXN0LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0I5MDQxNzAy
NTUwMTE0MjAwNkVFQjhDIC8qIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjkwNDE2RTI1NTAx
MTA5MDA2RUVCOEMgLyogUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk3QkIzNEExNzI1MzQ1
Q0IyMDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0R0xBTkdMRVV0aWxpdGllcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JCMzRBMTYyNTM0NUNCMjAw
MDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMQU5HTEVVdGlsaXRpZXMuaCAqLzsgfTsKKwkJN0JC
MzRBMTcyNTM0NUNCMjAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMQU5HTEVVdGlsaXRpZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQjM0QTE2
MjUzNDVDQjIwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFVXRpbGl0aWVzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0JCMzRBNDgy
NTM3NzZDQTAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQjM0QTQ1MjUzNzc2
QzYwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0JCNjgwQkEyNUJBMUJF
NDAwMkI4NzM4IC8qIEdyYXBoaWNzQ2hlY2tzTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkI2ODBCODI1QkExQkU0MDAyQjg3MzggLyogR3JhcGhp
Y3NDaGVja3NNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk3QkU3NDI3MzgxRkE5MDZGQkI0RjBGMkMgLyogSlNTVkdHcmFwaGljc0VsZW1lbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk1MEM0QzAy
QkVEODkzNkY4MThFMkY5OSAvKiBKU1NWR0dyYXBoaWNzRWxlbWVudC5oICovOyB9OwpAQCAtMzI2
NDYsNyArMzI2NDYsNiBAQAogCQkJCUU0QThEMjE2MjI1NzhEQjcwMEE4NDYzQyAvKiBFdmVudFJl
Z2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTBGRUYzNzJCMTdDNTNFQUMxQzFGQkVFIC8qIEV2
ZW50U291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTJFREI3QjBCMzA4QTc4MDAyNzA0QjYg
LyogRXZlbnRUYXJnZXQuaCBpbiBIZWFkZXJzICovLAotCQkJCUUzQ0EwQkZDMjY3M0Y0N0MwMDlG
REQ2NyAvKiBKU0RPTUJpbmRpbmdTZWN1cml0eUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg0QjM0OUEyMjJGODZFNzUwMEQ0N0JDRiAvKiBFdmVudFRhcmdldENvbmNyZXRlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5N0FBM0NBNTE0NTIzN0NDMDAzRTFEQTYgLyogRXZlbnRUYXJnZXRIZWFk
ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0FBM0NBNjE0NTIzN0NDMDAzRTFEQTYgLyogRXZl
bnRUYXJnZXRJbnRlcmZhY2VzLmggaW4gSGVhZGVycyAqLywKQEAgLTMzNDUzLDYgKzMzNDUyLDcg
QEAKIAkJCQk5M0I3MEQ2NDA5RUIwQzdDMDA5RDg0NjggLyogSlNET01CaW5kaW5nLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0MTZFNkZFODFCQkQxMkRGMDAwQTNGNjUgLyogSlNET01CaW5kaW5nSW50
ZXJuYWxzQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDNDVDOUQ0MUUzRkNCREYwMEFB
QjU1OCAvKiBKU0RPTUJpbmRpbmdTZWN1cml0eS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTNDQTBC
RkMyNjczRjQ3QzAwOUZERDY3IC8qIEpTRE9NQmluZGluZ1NlY3VyaXR5SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJN0NFMTkxNzMxRjJBQkU3MTAwMjcyRjc5IC8qIEpTRE9NQ2FjaGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTdDRTE5MTczMUYyQUJFNzEwMDI3MkY3QSAvKiBKU0RPTUNhY2hl
U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQxQzQ0MTYyNjBDMzhGRDAwRkY2NjczIC8q
IEpTRE9NQ2FzdFRoaXNWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4
dEdMQU5HTEUuY3BwCmluZGV4IGYwNWIwZTUwNDM2MDI4MmRkZGUyODZiNGFlZDNiMjliODA0YTQz
ODAuLjZhMDRiYzRkNTJkMzQ1MDg4ZDE5MjAzMjM0Y2I4MWQ0Y2RhOGIzY2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdM
QU5HTEUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dy
YXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSA8YWxn
b3JpdGhtPgogI2luY2x1ZGUgPGNzdHJpbmc+CiAjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgor
I2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KQEAgLTYxLDEwICs2Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3Rh
dGljIGNvbnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbk5hbWUgPSAiR0xfT0VT
X3BhY2tlZF9kZXB0aF9zdGVuY2lsIjsKIAotbmFtZXNwYWNlIHsKLQotCi19IC8vIG5hbWVzcGFj
ZSBhbm9ueW1vdXMKK3N0YXRpYyBTZWNvbmRzIG1heEZyYW1lRHVyYXRpb24gPSA1X3M7CiAKICNp
ZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKElPU19GQU1JTFkpCiBzdGF0aWMgdm9pZCB3aXBl
QWxwaGFDaGFubmVsRnJvbVBpeGVscyhpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVuc2lnbmVkIGNo
YXIqIHBpeGVscykKQEAgLTI4NDYsNiArMjg0NCwyNyBAQCBHcmFwaGljc0NvbnRleHRHTENWKiBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YXNDVigpCiB9CiAjZW5kaWYKIAorYm9vbCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6d2FpdEZvckNvbXBsZXRlZEZyYW1lKCkKK3sKKyAgICBzaXplX3Qg
b2xkZXN0RnJhbWVDb21wbGV0aW9uRmVuY2UgPSBtX29sZGVzdEZyYW1lQ29tcGxldGlvbkZlbmNl
KysgJSBtYXhQZW5kaW5nRnJhbWVzOworICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CisgICAgaWYg
KFNjb3BlZEdMRmVuY2UgZmVuY2UgPSBXVEZNb3ZlKG1fZnJhbWVDb21wbGV0aW9uRmVuY2VzW29s
ZGVzdEZyYW1lQ29tcGxldGlvbkZlbmNlXSkpIHsKKyAgICAgICAgLy8gV2FpdCBzbyB0aGF0IHJl
bmRlcmluZyBkb2VzIG5vdCBnZXQgbW9yZSB0aGFuIG1heFBlbmRpbmdGcmFtZXMgZnJhbWVzIGFo
ZWFkLgorICAgICAgICBHTGJpdGZpZWxkIGZsYWdzID0gR0xfU1lOQ19GTFVTSF9DT01NQU5EU19C
SVQ7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAgIC8vIEF2b2lkIHVzaW5nIHRoZSBHTF9T
WU5DX0ZMVVNIX0NPTU1BTkRTX0JJVCBiZWNhdXNlIGVhY2ggZWFjaCBmcmFtZSBpcyBlbmRlZCB3
aXRoIGEgZmx1c2gKKyAgICAgICAgLy8gZHVlIHRvIGV4dGVybmFsIElPU3VyZmFjZSBhY2Nlc3Mu
IFRoaXMgcGFydGljdWxhciBmZW5jZSBpcyBtYXhQZW5kaW5nRnJhbWVzIGJlaGluZC4KKyAgICAg
ICAgLy8gVGhpcyBtZWFucyB0aGUgY3JlYXRpb24gb2YgdGhpcyBmZW5jZSBoYXMgYWxyZWFkeSBi
ZWVuIGZsdXNoZWQuCisgICAgICAgIGZsYWdzID0gMDsKKyNlbmRpZgorICAgICAgICBHTGVudW0g
cmVzdWx0ID0gZ2w6OkNsaWVudFdhaXRTeW5jKGZlbmNlLCBmbGFncywgbWF4RnJhbWVEdXJhdGlv
bi5uYW5vc2Vjb25kc0FzPEdMdWludDY0PigpKTsKKyAgICAgICAgQVNTRVJUKHJlc3VsdCAhPSBH
TF9XQUlUX0ZBSUxFRCk7CisgICAgICAgIHN1Y2Nlc3MgPSByZXN1bHQgIT0gR0xfV0FJVF9GQUlM
RUQgJiYgcmVzdWx0ICE9IEdMX1RJTUVPVVRfRVhQSVJFRDsKKyAgICB9CisgICAgbV9mcmFtZUNv
bXBsZXRpb25GZW5jZXNbb2xkZXN0RnJhbWVDb21wbGV0aW9uRmVuY2VdLmZlbmNlU3luYygpOwor
ICAgIHJldHVybiBzdWNjZXNzOworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpICYm
IFVTRShBTkdMRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEVVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEVVdGlsaXRpZXMu
aAppbmRleCA0YmEzY2I1ODk2NWQwMjQ1ZWViNDYxOWU0YzdlNjJjNzczNTQ3NWU1Li4xY2VmN2Uz
NTMyMzcwOTA2NTRmMmE0NWQ5MDRmNWQ0NmFhZjI4ZjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFVXRpbGl0
aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRVV0aWxpdGllcy5oCkBAIC0yMDQsNiArMjA0LDQ3IEBAIHByaXZhdGU6
CiAgICAgR0x1aW50IG1fb2JqZWN0IHsgMCB9OwogfTsKIAorY2xhc3MgU2NvcGVkR0xGZW5jZSB7
CitwdWJsaWM6CisgICAgU2NvcGVkR0xGZW5jZSgpID0gZGVmYXVsdDsKKyAgICBTY29wZWRHTEZl
bmNlKFNjb3BlZEdMRmVuY2UmJiBvdGhlcikKKyAgICAgICAgOiBtX29iamVjdChzdGQ6OmV4Y2hh
bmdlKG90aGVyLm1fb2JqZWN0LCB7IH0pKQorICAgIHsKKyAgICB9CisgICAgU2NvcGVkR0xGZW5j
ZSYgb3BlcmF0b3I9KFNjb3BlZEdMRmVuY2UmJiBvdGhlcikKKyAgICB7CisgICAgICAgIHJlc2V0
KCk7CisgICAgICAgIG1fb2JqZWN0ID0gc3RkOjpleGNoYW5nZShvdGhlci5tX29iamVjdCwgeyB9
KTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICB+U2NvcGVkR0xGZW5jZSgpCisg
ICAgeworICAgICAgICByZXNldCgpOworICAgIH0KKyAgICB2b2lkIHJlc2V0KCkKKyAgICB7Cisg
ICAgICAgIGlmIChtX29iamVjdCkgeworICAgICAgICAgICAgZ2w6OkRlbGV0ZVN5bmMobV9vYmpl
Y3QpOworICAgICAgICAgICAgbV9vYmplY3QgPSB7IH07CisgICAgICAgIH0KKyAgICB9CisgICAg
dm9pZCBhYmFuZG9uKCkKKyAgICB7CisgICAgICAgIG1fb2JqZWN0ID0geyB9OworICAgIH0KKyAg
ICB2b2lkIGZlbmNlU3luYygpCisgICAgeworICAgICAgICByZXNldCgpOworICAgICAgICBtX29i
amVjdCA9IGdsOjpGZW5jZVN5bmMoR0xfU1lOQ19HUFVfQ09NTUFORFNfQ09NUExFVEUsIDApOwor
ICAgIH0KKyAgICBvcGVyYXRvciBHTHN5bmMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fb2JqZWN0OworICAgIH0KK3ByaXZhdGU6CisgICAgR0xzeW5jIG1fb2JqZWN0IHsgfTsKK307
CisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5t
bQppbmRleCAwNmUyOGYyZWM2Mzg0N2I3ZDg2YWUwNTU0NmY1OGRlZjhlNmRmYzI2Li40NjY4Yjlh
YTY5NjVmNDZkMjU2M2Y1Y2Y3OGJjOTdkMmNhMzkxZDc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29h
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMQ29jb2EubW0KQEAgLTI4Niw2ICsyODYsMTAgQEAgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0
cmlidXRlcyBhdHQKICAgICBpZiAobV9pc0ZvcldlYkdMMikgewogICAgICAgICAvLyBGb3IgV2Vi
R0wgMi4wIG9jY2x1c2lvbiBxdWVyaWVzIHRvIHdvcmsuCiAgICAgICAgIHJlcXVpcmVkRXh0ZW5z
aW9ucy5hcHBlbmQoIkdMX0VYVF9vY2NsdXNpb25fcXVlcnlfYm9vbGVhbiJfcyk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgLy8gVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgR0xzeW5jIG9iamVjdHMu
IEVuYWJsZSB0aGUgZnVuY3Rpb25hbGl0eSBmb3IgV2ViR0wgMS4wIGNvbnRleHRzCisgICAgICAg
IC8vIHRoYXQgdXNlIE9wZW5HTCBFUyAyLjAuCisgICAgICAgIHJlcXVpcmVkRXh0ZW5zaW9ucy5h
cHBlbmQoIkdMX0FSQl9zeW5jIl9zKTsKICAgICB9CiAjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFU
Rk9STShNQUNDQVRBTFlTVCkKICAgICBpZiAoIW5lZWRzRUFHTE9uTWFjKCkpIHsKQEAgLTI5Myw4
ICsyOTcsNyBAQCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dAogICAgICAgICByZXF1aXJlZEV4dGVu
c2lvbnMuYXBwZW5kKCJHTF9BTkdMRV90ZXh0dXJlX3JlY3RhbmdsZSJfcyk7CiAgICAgICAgIC8v
IEZvciBjcmVhdGluZyB0aGUgRUdMIHN1cmZhY2UgZnJvbSBhbiBJT1N1cmZhY2UuCiAgICAgICAg
IHJlcXVpcmVkRXh0ZW5zaW9ucy5hcHBlbmQoIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4
OCJfcyk7Ci0gICAgICAgICAgICB9Ci0KKyAgICB9CiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKSB8
fCBQTEFURk9STShNQUNDQVRBTFlTVCkKICAgICBFeHRlbnNpb25zR0wmIGV4dGVuc2lvbnMgPSBn
ZXRFeHRlbnNpb25zKCk7CiAgICAgZm9yIChhdXRvJiBleHRlbnNpb24gOiByZXF1aXJlZEV4dGVu
c2lvbnMpIHsKQEAgLTM4NSw2ICszODgsMTEgQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5H
cmFwaGljc0NvbnRleHRHTE9wZW5HTCgpCiAgICAgICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMo
MSwgJm1fcHJlc2VydmVEcmF3aW5nQnVmZmVyVGV4dHVyZSk7CiAgICAgICAgIGlmIChtX3ByZXNl
cnZlRHJhd2luZ0J1ZmZlckZCTykKICAgICAgICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMo
MSwgJm1fcHJlc2VydmVEcmF3aW5nQnVmZmVyRkJPKTsKKyAgICAgICAgZm9yIChhdXRvJiBmZW5j
ZSA6IG1fZnJhbWVDb21wbGV0aW9uRmVuY2VzKQorICAgICAgICAgICAgZmVuY2UucmVzZXQoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGF1dG8mIGZlbmNlIDogbV9mcmFtZUNvbXBsZXRp
b25GZW5jZXMpCisgICAgICAgICAgICBmZW5jZS5hYmFuZG9uKCk7CiAgICAgfQogICAgIGlmICht
X2Rpc3BsYXlCdWZmZXJQYnVmZmVyKSB7CiAgICAgICAgIEVHTF9EZXN0cm95U3VyZmFjZShtX2Rp
c3BsYXlPYmosIG1fZGlzcGxheUJ1ZmZlclBidWZmZXIpOwpAQCAtNzIwLDggKzcyOCw5IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KCkKICAgICAvLyBF
cnJvciB3aWxsIGJlIGhhbmRsZWQgYnkgbmV4dCBjYWxsIHRvIG1ha2VDb250ZXh0Q3VycmVudCgp
IHdoaWNoIHdpbGwgbm90aWNlIGxhY2sgb2YgZGlzcGxheSBidWZmZXIuCiAgICAgaWYgKCFoYXNO
ZXdCYWNraW5nKQogICAgICAgICBhbGxvY2F0ZUFuZEJpbmREaXNwbGF5QnVmZmVyQmFja2luZygp
OwotCiAgICAgbWFya0xheWVyQ29tcG9zaXRlZCgpOworICAgIGJvb2wgc3VjY2VzcyA9IHdhaXRG
b3JDb21wbGV0ZWRGcmFtZSgpOworICAgIFVOVVNFRF9WQVJJQUJMRShzdWNjZXNzKTsgLy8gRklY
TUU6IGltcGxlbWVudCBjb250ZXh0IGxvc3QuCiB9CiAKIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaAppbmRleCA2MGNiYWVkZDIzOGY0OTk5ZjY0ODkz
NDJiMjBjNDk1NDI4YmEzYjAwLi43MTQ0OGFiOTUwNjczODU2YWEyYmU3NmJiMTcxZjU5Mjc2MzFj
MDk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaApAQCAtNDUsMTEgKzQ1LDE5
IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCiAjZW5kaWYKIAotI2lmICFVU0UoQU5H
TEUpCisjaWYgVVNFKEFOR0xFKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQU5HTEVVdGls
aXRpZXMuaCIKKyNlbHNlCiAjaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKICNpbmNsdWRl
ICJFeHRlbnNpb25zR0xPcGVuR0xDb21tb24uaCIKICNlbmRpZgogCisjaWYgUExBVEZPUk0oTUFD
KQorI2luY2x1ZGUgIlNjb3BlZEhpZ2hQZXJmb3JtYW5jZUdQVVJlcXVlc3QuaCIKKyNlbmRpZgor
CisKKwogLy8gRklYTUU6IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGF2b2lkIHRoZSBuYW1lIGNvbmZs
aWN0aW9uIGZvciBOT19FUlJPUi4KICNpZiBQTEFURk9STShXSU4pCiAjdW5kZWYgTk9fRVJST1IK
QEAgLTcyLDEwICs4MCw2IEBAIGNsYXNzIEdDR0xMYXllcjsKIH0KICNlbmRpZgogCi0jaWYgUExB
VEZPUk0oTUFDKQotI2luY2x1ZGUgIlNjb3BlZEhpZ2hQZXJmb3JtYW5jZUdQVVJlcXVlc3QuaCIK
LSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBFeHRlbnNpb25zR0w7CiAjaWYg
VVNFKEFOR0xFKQpAQCAtNTc0LDYgKzU3OCwxMCBAQCBwcml2YXRlOgogICAgIGJvb2wgYWxsb2Nh
dGVBbmRCaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoKTsKICAgICBib29sIGJpbmREaXNwbGF5QnVm
ZmVyQmFja2luZyhzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBiYWNraW5nLCB2b2lkKiBwYnVm
ZmVyKTsKICNlbmRpZgorI2lmIFVTRShBTkdMRSkKKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIGNv
bnRleHQgc2hvdWxkIGJlIGxvc3QgZHVlIHRvIHRpbWVvdXQuCisgICAgYm9vbCB3YWl0Rm9yQ29t
cGxldGVkRnJhbWUoKSBXQVJOX1VOVVNFRF9SRVRVUk47CisjZW5kaWYKIAogI2lmIFBMQVRGT1JN
KENPQ09BKQogICAgIEdyYXBoaWNzQ29udGV4dEdMSU9TdXJmYWNlU3dhcENoYWluKiBtX3N3YXBD
aGFpbiB7IG51bGxwdHIgfTsKQEAgLTc4Nyw2ICs3OTUsMTEgQEAgcHJpdmF0ZToKICNpZiBFTkFC
TEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCiAgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBo
aWNzQ29udGV4dEdMQ1Y+IG1fY3Y7CiAjZW5kaWYKKyNpZiBVU0UoQU5HTEUpCisgICAgc3RhdGlj
IGNvbnN0ZXhwciBzaXplX3QgbWF4UGVuZGluZ0ZyYW1lcyA9IDM7CisgICAgc2l6ZV90IG1fb2xk
ZXN0RnJhbWVDb21wbGV0aW9uRmVuY2UgeyAwIH07CisgICAgU2NvcGVkR0xGZW5jZSBtX2ZyYW1l
Q29tcGxldGlvbkZlbmNlc1ttYXhQZW5kaW5nRnJhbWVzXTsKKyNlbmRpZgogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>